aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlegoater <legoater@users.noreply.github.com>2022-03-17 07:11:14 +0000
committerlegoater <legoater@users.noreply.github.com>2022-03-17 07:11:14 +0000
commitf86c561710de127eca526a73b79bc7e24ffbb38d (patch)
tree724648a57563b476ece7f5f12a0d2e12829b8abd
parentff7c0852427a5fa90b6423c31410a7a711a9e3ed (diff)
downloadskiboot-f86c561710de127eca526a73b79bc7e24ffbb38d.zip
skiboot-f86c561710de127eca526a73b79bc7e24ffbb38d.tar.gz
skiboot-f86c561710de127eca526a73b79bc7e24ffbb38d.tar.bz2
Deploying to gh-pages from @ open-power/skiboot@e32e57e9728690f251c00894570bcdddd18de49c 🚀
-rw-r--r--coverage-report/ccan/array_size/test/index-sort-b.html2
-rw-r--r--coverage-report/ccan/array_size/test/index-sort-f.html2
-rw-r--r--coverage-report/ccan/array_size/test/index-sort-l.html2
-rw-r--r--coverage-report/ccan/array_size/test/index.html2
-rw-r--r--coverage-report/ccan/array_size/test/run.c.func-sort-c.html2
-rw-r--r--coverage-report/ccan/array_size/test/run.c.func.html2
-rw-r--r--coverage-report/ccan/array_size/test/run.c.gcov.html33
-rw-r--r--coverage-report/ccan/build_assert/test/index-sort-b.html2
-rw-r--r--coverage-report/ccan/build_assert/test/index-sort-f.html2
-rw-r--r--coverage-report/ccan/build_assert/test/index-sort-l.html2
-rw-r--r--coverage-report/ccan/build_assert/test/index.html2
-rw-r--r--coverage-report/ccan/build_assert/test/run-BUILD_ASSERT_OR_ZERO.c.func-sort-c.html2
-rw-r--r--coverage-report/ccan/build_assert/test/run-BUILD_ASSERT_OR_ZERO.c.func.html2
-rw-r--r--coverage-report/ccan/build_assert/test/run-BUILD_ASSERT_OR_ZERO.c.gcov.html15
-rw-r--r--coverage-report/ccan/check_type/test/index-sort-b.html2
-rw-r--r--coverage-report/ccan/check_type/test/index-sort-f.html2
-rw-r--r--coverage-report/ccan/check_type/test/index-sort-l.html2
-rw-r--r--coverage-report/ccan/check_type/test/index.html2
-rw-r--r--coverage-report/ccan/check_type/test/run.c.func-sort-c.html2
-rw-r--r--coverage-report/ccan/check_type/test/run.c.func.html2
-rw-r--r--coverage-report/ccan/check_type/test/run.c.gcov.html36
-rw-r--r--coverage-report/ccan/container_of/container_of.h.func-sort-c.html85
-rw-r--r--coverage-report/ccan/container_of/container_of.h.func.html85
-rw-r--r--coverage-report/ccan/container_of/container_of.h.gcov.html230
-rw-r--r--coverage-report/ccan/container_of/index-sort-b.html107
-rw-r--r--coverage-report/ccan/container_of/index-sort-f.html107
-rw-r--r--coverage-report/ccan/container_of/index-sort-l.html107
-rw-r--r--coverage-report/ccan/container_of/index.html107
-rw-r--r--coverage-report/ccan/container_of/test/index-sort-b.html8
-rw-r--r--coverage-report/ccan/container_of/test/index-sort-f.html8
-rw-r--r--coverage-report/ccan/container_of/test/index-sort-l.html8
-rw-r--r--coverage-report/ccan/container_of/test/index.html8
-rw-r--r--coverage-report/ccan/container_of/test/run.c.func-sort-c.html6
-rw-r--r--coverage-report/ccan/container_of/test/run.c.func.html6
-rw-r--r--coverage-report/ccan/container_of/test/run.c.gcov.html37
-rw-r--r--coverage-report/ccan/endian/endian.h.func-sort-c.html64
-rw-r--r--coverage-report/ccan/endian/endian.h.func.html64
-rw-r--r--coverage-report/ccan/endian/endian.h.gcov.html510
-rw-r--r--coverage-report/ccan/endian/index-sort-b.html14
-rw-r--r--coverage-report/ccan/endian/index-sort-f.html14
-rw-r--r--coverage-report/ccan/endian/index-sort-l.html14
-rw-r--r--coverage-report/ccan/endian/index.html14
-rw-r--r--coverage-report/ccan/endian/test/index-sort-b.html2
-rw-r--r--coverage-report/ccan/endian/test/index-sort-f.html2
-rw-r--r--coverage-report/ccan/endian/test/index-sort-l.html2
-rw-r--r--coverage-report/ccan/endian/test/index.html2
-rw-r--r--coverage-report/ccan/endian/test/run.c.func-sort-c.html2
-rw-r--r--coverage-report/ccan/endian/test/run.c.func.html2
-rw-r--r--coverage-report/ccan/endian/test/run.c.gcov.html179
-rw-r--r--coverage-report/ccan/heap/heap.c.func-sort-c.html2
-rw-r--r--coverage-report/ccan/heap/heap.c.func.html2
-rw-r--r--coverage-report/ccan/heap/heap.c.gcov.html2
-rw-r--r--coverage-report/ccan/heap/index-sort-b.html2
-rw-r--r--coverage-report/ccan/heap/index-sort-f.html2
-rw-r--r--coverage-report/ccan/heap/index-sort-l.html2
-rw-r--r--coverage-report/ccan/heap/index.html2
-rw-r--r--coverage-report/ccan/heap/test/index-sort-b.html14
-rw-r--r--coverage-report/ccan/heap/test/index-sort-f.html14
-rw-r--r--coverage-report/ccan/heap/test/index-sort-l.html14
-rw-r--r--coverage-report/ccan/heap/test/index.html14
-rw-r--r--coverage-report/ccan/heap/test/run.c.func-sort-c.html14
-rw-r--r--coverage-report/ccan/heap/test/run.c.func.html14
-rw-r--r--coverage-report/ccan/heap/test/run.c.gcov.html40
-rw-r--r--coverage-report/ccan/list/index-sort-b.html16
-rw-r--r--coverage-report/ccan/list/index-sort-f.html16
-rw-r--r--coverage-report/ccan/list/index-sort-l.html16
-rw-r--r--coverage-report/ccan/list/index.html16
-rw-r--r--coverage-report/ccan/list/list.c.func-sort-c.html8
-rw-r--r--coverage-report/ccan/list/list.c.func.html8
-rw-r--r--coverage-report/ccan/list/list.c.gcov.html38
-rw-r--r--coverage-report/ccan/list/list.h.func-sort-c.html88
-rw-r--r--coverage-report/ccan/list/list.h.func.html88
-rw-r--r--coverage-report/ccan/list/list.h.gcov.html1391
-rw-r--r--coverage-report/ccan/list/test/helper.c.func-sort-c.html8
-rw-r--r--coverage-report/ccan/list/test/helper.c.func.html8
-rw-r--r--coverage-report/ccan/list/test/helper.c.gcov.html42
-rw-r--r--coverage-report/ccan/list/test/index-sort-b.html78
-rw-r--r--coverage-report/ccan/list/test/index-sort-f.html70
-rw-r--r--coverage-report/ccan/list/test/index-sort-l.html68
-rw-r--r--coverage-report/ccan/list/test/index.html68
-rw-r--r--coverage-report/ccan/list/test/run-CCAN_LIST_DEBUG.c.func-sort-c.html89
-rw-r--r--coverage-report/ccan/list/test/run-CCAN_LIST_DEBUG.c.func.html89
-rw-r--r--coverage-report/ccan/list/test/run-CCAN_LIST_DEBUG.c.gcov.html145
-rw-r--r--coverage-report/ccan/list/test/run-check-corrupt.c.func-sort-c.html8
-rw-r--r--coverage-report/ccan/list/test/run-check-corrupt.c.func.html8
-rw-r--r--coverage-report/ccan/list/test/run-check-corrupt.c.gcov.html149
-rw-r--r--coverage-report/ccan/list/test/run-check-nonconst.c.func-sort-c.html (renamed from coverage-report/usr/include/bits/byteswap.h.func-sort-c.html)16
-rw-r--r--coverage-report/ccan/list/test/run-check-nonconst.c.func.html (renamed from coverage-report/usr/include/bits/byteswap.h.func.html)16
-rw-r--r--coverage-report/ccan/list/test/run-check-nonconst.c.gcov.html112
-rw-r--r--coverage-report/ccan/list/test/run-list_del_from-assert.c.func-sort-c.html8
-rw-r--r--coverage-report/ccan/list/test/run-list_del_from-assert.c.func.html8
-rw-r--r--coverage-report/ccan/list/test/run-list_del_from-assert.c.gcov.html52
-rw-r--r--coverage-report/ccan/list/test/run-list_prev-list_next.c.func-sort-c.html (renamed from coverage-report/usr/include/sys/stat.h.func-sort-c.html)22
-rw-r--r--coverage-report/ccan/list/test/run-list_prev-list_next.c.func.html (renamed from coverage-report/usr/include/sys/stat.h.func.html)22
-rw-r--r--coverage-report/ccan/list/test/run-list_prev-list_next.c.gcov.html150
-rw-r--r--coverage-report/ccan/list/test/run-prepend_list.c.func-sort-c.html (renamed from coverage-report/usr/include/bits/stdio.h.func-sort-c.html)28
-rw-r--r--coverage-report/ccan/list/test/run-prepend_list.c.func.html (renamed from coverage-report/usr/include/bits/stdio.h.func.html)28
-rw-r--r--coverage-report/ccan/list/test/run-prepend_list.c.gcov.html196
-rw-r--r--coverage-report/ccan/list/test/run-single-eval.c.func-sort-c.html4
-rw-r--r--coverage-report/ccan/list/test/run-single-eval.c.func.html4
-rw-r--r--coverage-report/ccan/list/test/run-single-eval.c.gcov.html289
-rw-r--r--coverage-report/ccan/list/test/run.c.func-sort-c.html8
-rw-r--r--coverage-report/ccan/list/test/run.c.func.html8
-rw-r--r--coverage-report/ccan/list/test/run.c.gcov.html466
-rw-r--r--coverage-report/ccan/short_types/test/index-sort-b.html2
-rw-r--r--coverage-report/ccan/short_types/test/index-sort-f.html2
-rw-r--r--coverage-report/ccan/short_types/test/index-sort-l.html2
-rw-r--r--coverage-report/ccan/short_types/test/index.html2
-rw-r--r--coverage-report/ccan/short_types/test/run-endian.c.func-sort-c.html2
-rw-r--r--coverage-report/ccan/short_types/test/run-endian.c.func.html2
-rw-r--r--coverage-report/ccan/short_types/test/run-endian.c.gcov.html4
-rw-r--r--coverage-report/ccan/short_types/test/run.c.func-sort-c.html2
-rw-r--r--coverage-report/ccan/short_types/test/run.c.func.html2
-rw-r--r--coverage-report/ccan/short_types/test/run.c.gcov.html4
-rw-r--r--coverage-report/ccan/str/index-sort-b.html2
-rw-r--r--coverage-report/ccan/str/index-sort-f.html2
-rw-r--r--coverage-report/ccan/str/index-sort-l.html2
-rw-r--r--coverage-report/ccan/str/index.html2
-rw-r--r--coverage-report/ccan/str/str.c.func-sort-c.html2
-rw-r--r--coverage-report/ccan/str/str.c.func.html2
-rw-r--r--coverage-report/ccan/str/str.c.gcov.html2
-rw-r--r--coverage-report/ccan/str/str.h.func-sort-c.html2
-rw-r--r--coverage-report/ccan/str/str.h.func.html2
-rw-r--r--coverage-report/ccan/str/str.h.gcov.html56
-rw-r--r--coverage-report/ccan/str/test/index-sort-b.html18
-rw-r--r--coverage-report/ccan/str/test/index-sort-f.html8
-rw-r--r--coverage-report/ccan/str/test/index-sort-l.html8
-rw-r--r--coverage-report/ccan/str/test/index.html8
-rw-r--r--coverage-report/ccan/str/test/run-STR_MAX_CHARS.c.func-sort-c.html6
-rw-r--r--coverage-report/ccan/str/test/run-STR_MAX_CHARS.c.func.html6
-rw-r--r--coverage-report/ccan/str/test/run-STR_MAX_CHARS.c.gcov.html93
-rw-r--r--coverage-report/ccan/str/test/run.c.func-sort-c.html2
-rw-r--r--coverage-report/ccan/str/test/run.c.func.html2
-rw-r--r--coverage-report/ccan/str/test/run.c.gcov.html163
-rw-r--r--coverage-report/core/bitmap.c.func-sort-c.html2
-rw-r--r--coverage-report/core/bitmap.c.func.html2
-rw-r--r--coverage-report/core/bitmap.c.gcov.html2
-rw-r--r--coverage-report/core/buddy.c.func-sort-c.html2
-rw-r--r--coverage-report/core/buddy.c.func.html2
-rw-r--r--coverage-report/core/buddy.c.gcov.html2
-rw-r--r--coverage-report/core/chip.c.func-sort-c.html18
-rw-r--r--coverage-report/core/chip.c.func.html18
-rw-r--r--coverage-report/core/chip.c.gcov.html325
-rw-r--r--coverage-report/core/console-log.c.func-sort-c.html2
-rw-r--r--coverage-report/core/console-log.c.func.html2
-rw-r--r--coverage-report/core/console-log.c.gcov.html2
-rw-r--r--coverage-report/core/cpufeatures.c.func-sort-c.html14
-rw-r--r--coverage-report/core/cpufeatures.c.func.html14
-rw-r--r--coverage-report/core/cpufeatures.c.gcov.html1914
-rw-r--r--coverage-report/core/device.c.func-sort-c.html30
-rw-r--r--coverage-report/core/device.c.func.html30
-rw-r--r--coverage-report/core/device.c.gcov.html226
-rw-r--r--coverage-report/core/fdt.c.func-sort-c.html6
-rw-r--r--coverage-report/core/fdt.c.func.html6
-rw-r--r--coverage-report/core/fdt.c.gcov.html20
-rw-r--r--coverage-report/core/flash-firmware-versions.c.func-sort-c.html2
-rw-r--r--coverage-report/core/flash-firmware-versions.c.func.html2
-rw-r--r--coverage-report/core/flash-firmware-versions.c.gcov.html2
-rw-r--r--coverage-report/core/flash-subpartition.c.func-sort-c.html2
-rw-r--r--coverage-report/core/flash-subpartition.c.func.html2
-rw-r--r--coverage-report/core/flash-subpartition.c.gcov.html2
-rw-r--r--coverage-report/core/index-sort-b.html216
-rw-r--r--coverage-report/core/index-sort-f.html74
-rw-r--r--coverage-report/core/index-sort-l.html56
-rw-r--r--coverage-report/core/index.html42
-rw-r--r--coverage-report/core/malloc.c.func-sort-c.html8
-rw-r--r--coverage-report/core/malloc.c.func.html8
-rw-r--r--coverage-report/core/malloc.c.gcov.html26
-rw-r--r--coverage-report/core/mem_region.c.func-sort-c.html38
-rw-r--r--coverage-report/core/mem_region.c.func.html32
-rw-r--r--coverage-report/core/mem_region.c.gcov.html310
-rw-r--r--coverage-report/core/nvram-format.c.func-sort-c.html2
-rw-r--r--coverage-report/core/nvram-format.c.func.html2
-rw-r--r--coverage-report/core/nvram-format.c.gcov.html2
-rw-r--r--coverage-report/core/opal-msg.c.func-sort-c.html2
-rw-r--r--coverage-report/core/opal-msg.c.func.html2
-rw-r--r--coverage-report/core/opal-msg.c.gcov.html2
-rw-r--r--coverage-report/core/pci-quirk.c.func-sort-c.html2
-rw-r--r--coverage-report/core/pci-quirk.c.func.html2
-rw-r--r--coverage-report/core/pci-quirk.c.gcov.html2
-rw-r--r--coverage-report/core/pel.c.func-sort-c.html2
-rw-r--r--coverage-report/core/pel.c.func.html2
-rw-r--r--coverage-report/core/pel.c.gcov.html2
-rw-r--r--coverage-report/core/pool.c.func-sort-c.html6
-rw-r--r--coverage-report/core/pool.c.func.html6
-rw-r--r--coverage-report/core/pool.c.gcov.html8
-rw-r--r--coverage-report/core/test/dummy-cpu.h.func-sort-c.html2
-rw-r--r--coverage-report/core/test/dummy-cpu.h.func.html2
-rw-r--r--coverage-report/core/test/dummy-cpu.h.gcov.html2
-rw-r--r--coverage-report/core/test/index-sort-b.html270
-rw-r--r--coverage-report/core/test/index-sort-f.html134
-rw-r--r--coverage-report/core/test/index-sort-l.html64
-rw-r--r--coverage-report/core/test/index.html30
-rw-r--r--coverage-report/core/test/run-api-test.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-api-test.c.func.html2
-rw-r--r--coverage-report/core/test/run-api-test.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-bitmap.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-bitmap.c.func.html2
-rw-r--r--coverage-report/core/test/run-bitmap.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-buddy.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-buddy.c.func.html2
-rw-r--r--coverage-report/core/test/run-buddy.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-console-log-buf-overrun.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-console-log-buf-overrun.c.func.html2
-rw-r--r--coverage-report/core/test/run-console-log-buf-overrun.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-console-log-pr_fmt.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-console-log-pr_fmt.c.func.html2
-rw-r--r--coverage-report/core/test/run-console-log-pr_fmt.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-console-log.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-console-log.c.func.html2
-rw-r--r--coverage-report/core/test/run-console-log.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-cpufeatures.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-cpufeatures.c.func.html2
-rw-r--r--coverage-report/core/test/run-cpufeatures.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-device.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-device.c.func.html2
-rw-r--r--coverage-report/core/test/run-device.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-flash-firmware-versions.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-flash-firmware-versions.c.func.html2
-rw-r--r--coverage-report/core/test/run-flash-firmware-versions.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-flash-subpartition.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-flash-subpartition.c.func.html2
-rw-r--r--coverage-report/core/test/run-flash-subpartition.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-malloc-speed.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-malloc-speed.c.func.html2
-rw-r--r--coverage-report/core/test/run-malloc-speed.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-malloc.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-malloc.c.func.html2
-rw-r--r--coverage-report/core/test/run-malloc.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-mem_range_is_reserved.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-mem_range_is_reserved.c.func.html2
-rw-r--r--coverage-report/core/test/run-mem_range_is_reserved.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-mem_region.c.func-sort-c.html4
-rw-r--r--coverage-report/core/test/run-mem_region.c.func.html4
-rw-r--r--coverage-report/core/test/run-mem_region.c.gcov.html24
-rw-r--r--coverage-report/core/test/run-mem_region_init.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-mem_region_init.c.func.html2
-rw-r--r--coverage-report/core/test/run-mem_region_init.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-mem_region_next.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-mem_region_next.c.func.html2
-rw-r--r--coverage-report/core/test/run-mem_region_next.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-mem_region_release_unused.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-mem_region_release_unused.c.func.html2
-rw-r--r--coverage-report/core/test/run-mem_region_release_unused.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-mem_region_release_unused_noalloc.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-mem_region_release_unused_noalloc.c.func.html2
-rw-r--r--coverage-report/core/test/run-mem_region_release_unused_noalloc.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-mem_region_reservations.c.func-sort-c.html8
-rw-r--r--coverage-report/core/test/run-mem_region_reservations.c.func.html8
-rw-r--r--coverage-report/core/test/run-mem_region_reservations.c.gcov.html22
-rw-r--r--coverage-report/core/test/run-msg.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-msg.c.func.html2
-rw-r--r--coverage-report/core/test/run-msg.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-nvram-format.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-nvram-format.c.func.html2
-rw-r--r--coverage-report/core/test/run-nvram-format.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-pci-quirk.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-pci-quirk.c.func.html2
-rw-r--r--coverage-report/core/test/run-pci-quirk.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-pel.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-pel.c.func.html2
-rw-r--r--coverage-report/core/test/run-pel.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-pool.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-pool.c.func.html2
-rw-r--r--coverage-report/core/test/run-pool.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-time-utils.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-time-utils.c.func.html2
-rw-r--r--coverage-report/core/test/run-time-utils.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-timebase.c.func-sort-c.html2
-rw-r--r--coverage-report/core/test/run-timebase.c.func.html2
-rw-r--r--coverage-report/core/test/run-timebase.c.gcov.html2
-rw-r--r--coverage-report/core/test/run-timer.c.func-sort-c.html20
-rw-r--r--coverage-report/core/test/run-timer.c.func.html16
-rw-r--r--coverage-report/core/test/run-timer.c.gcov.html22
-rw-r--r--coverage-report/core/test/run-trace.c.func-sort-c.html40
-rw-r--r--coverage-report/core/test/run-trace.c.func.html40
-rw-r--r--coverage-report/core/test/run-trace.c.gcov.html587
-rw-r--r--coverage-report/core/test/stubs.c.func-sort-c.html4
-rw-r--r--coverage-report/core/test/stubs.c.func.html4
-rw-r--r--coverage-report/core/test/stubs.c.gcov.html12
-rw-r--r--coverage-report/core/time-utils.c.func-sort-c.html2
-rw-r--r--coverage-report/core/time-utils.c.func.html2
-rw-r--r--coverage-report/core/time-utils.c.gcov.html2
-rw-r--r--coverage-report/core/timer.c.func-sort-c.html32
-rw-r--r--coverage-report/core/timer.c.func.html32
-rw-r--r--coverage-report/core/timer.c.gcov.html553
-rw-r--r--coverage-report/core/trace.c.func-sort-c.html32
-rw-r--r--coverage-report/core/trace.c.func.html32
-rw-r--r--coverage-report/core/trace.c.gcov.html493
-rw-r--r--coverage-report/core/vpd.c.func-sort-c.html2
-rw-r--r--coverage-report/core/vpd.c.func.html2
-rw-r--r--coverage-report/core/vpd.c.gcov.html2
-rw-r--r--coverage-report/external/ffspart/ccan/endian/endian.h.func-sort-c.html10
-rw-r--r--coverage-report/external/ffspart/ccan/endian/endian.h.func.html10
-rw-r--r--coverage-report/external/ffspart/ccan/endian/endian.h.gcov.html494
-rw-r--r--coverage-report/external/ffspart/ccan/endian/index-sort-b.html12
-rw-r--r--coverage-report/external/ffspart/ccan/endian/index-sort-f.html12
-rw-r--r--coverage-report/external/ffspart/ccan/endian/index-sort-l.html12
-rw-r--r--coverage-report/external/ffspart/ccan/endian/index.html12
-rw-r--r--coverage-report/external/ffspart/common/arch_flash_common.c.func-sort-c.html2
-rw-r--r--coverage-report/external/ffspart/common/arch_flash_common.c.func.html2
-rw-r--r--coverage-report/external/ffspart/common/arch_flash_common.c.gcov.html2
-rw-r--r--coverage-report/external/ffspart/common/arch_flash_unknown.c.func-sort-c.html2
-rw-r--r--coverage-report/external/ffspart/common/arch_flash_unknown.c.func.html2
-rw-r--r--coverage-report/external/ffspart/common/arch_flash_unknown.c.gcov.html2
-rw-r--r--coverage-report/external/ffspart/common/index-sort-b.html26
-rw-r--r--coverage-report/external/ffspart/common/index-sort-f.html2
-rw-r--r--coverage-report/external/ffspart/common/index-sort-l.html2
-rw-r--r--coverage-report/external/ffspart/common/index.html2
-rw-r--r--coverage-report/external/ffspart/ffspart.c.func-sort-c.html20
-rw-r--r--coverage-report/external/ffspart/ffspart.c.func.html20
-rw-r--r--coverage-report/external/ffspart/ffspart.c.gcov.html28
-rw-r--r--coverage-report/external/ffspart/index-sort-b.html22
-rw-r--r--coverage-report/external/ffspart/index-sort-f.html22
-rw-r--r--coverage-report/external/ffspart/index-sort-l.html22
-rw-r--r--coverage-report/external/ffspart/index.html22
-rw-r--r--coverage-report/external/ffspart/libflash/blocklevel.c.func-sort-c.html26
-rw-r--r--coverage-report/external/ffspart/libflash/blocklevel.c.func.html26
-rw-r--r--coverage-report/external/ffspart/libflash/blocklevel.c.gcov.html50
-rw-r--r--coverage-report/external/ffspart/libflash/ecc.c.func-sort-c.html10
-rw-r--r--coverage-report/external/ffspart/libflash/ecc.c.func.html10
-rw-r--r--coverage-report/external/ffspart/libflash/ecc.c.gcov.html6
-rw-r--r--coverage-report/external/ffspart/libflash/ecc.h.func-sort-c.html2
-rw-r--r--coverage-report/external/ffspart/libflash/ecc.h.func.html2
-rw-r--r--coverage-report/external/ffspart/libflash/ecc.h.gcov.html2
-rw-r--r--coverage-report/external/ffspart/libflash/file.c.func-sort-c.html14
-rw-r--r--coverage-report/external/ffspart/libflash/file.c.func.html14
-rw-r--r--coverage-report/external/ffspart/libflash/file.c.gcov.html52
-rw-r--r--coverage-report/external/ffspart/libflash/index-sort-b.html84
-rw-r--r--coverage-report/external/ffspart/libflash/index-sort-f.html52
-rw-r--r--coverage-report/external/ffspart/libflash/index-sort-l.html52
-rw-r--r--coverage-report/external/ffspart/libflash/index.html52
-rw-r--r--coverage-report/external/ffspart/libflash/libffs.c.func-sort-c.html36
-rw-r--r--coverage-report/external/ffspart/libflash/libffs.c.func.html32
-rw-r--r--coverage-report/external/ffspart/libflash/libffs.c.gcov.html62
-rw-r--r--coverage-report/external/ffspart/libflash/libflash.c.func-sort-c.html22
-rw-r--r--coverage-report/external/ffspart/libflash/libflash.c.func.html22
-rw-r--r--coverage-report/external/ffspart/libflash/libflash.c.gcov.html62
-rw-r--r--coverage-report/external/gard/ccan/endian/endian.h.func-sort-c.html10
-rw-r--r--coverage-report/external/gard/ccan/endian/endian.h.func.html10
-rw-r--r--coverage-report/external/gard/ccan/endian/endian.h.gcov.html494
-rw-r--r--coverage-report/external/gard/ccan/endian/index-sort-b.html12
-rw-r--r--coverage-report/external/gard/ccan/endian/index-sort-f.html12
-rw-r--r--coverage-report/external/gard/ccan/endian/index-sort-l.html12
-rw-r--r--coverage-report/external/gard/ccan/endian/index.html12
-rw-r--r--coverage-report/external/gard/ccan/list/index-sort-b.html2
-rw-r--r--coverage-report/external/gard/ccan/list/index-sort-f.html2
-rw-r--r--coverage-report/external/gard/ccan/list/index-sort-l.html2
-rw-r--r--coverage-report/external/gard/ccan/list/index.html2
-rw-r--r--coverage-report/external/gard/ccan/list/list.c.func-sort-c.html2
-rw-r--r--coverage-report/external/gard/ccan/list/list.c.func.html2
-rw-r--r--coverage-report/external/gard/ccan/list/list.c.gcov.html2
-rw-r--r--coverage-report/external/gard/common/arch_flash_common.c.func-sort-c.html2
-rw-r--r--coverage-report/external/gard/common/arch_flash_common.c.func.html2
-rw-r--r--coverage-report/external/gard/common/arch_flash_common.c.gcov.html2
-rw-r--r--coverage-report/external/gard/common/arch_flash_unknown.c.func-sort-c.html2
-rw-r--r--coverage-report/external/gard/common/arch_flash_unknown.c.func.html2
-rw-r--r--coverage-report/external/gard/common/arch_flash_unknown.c.gcov.html2
-rw-r--r--coverage-report/external/gard/common/index-sort-b.html2
-rw-r--r--coverage-report/external/gard/common/index-sort-f.html2
-rw-r--r--coverage-report/external/gard/common/index-sort-l.html2
-rw-r--r--coverage-report/external/gard/common/index.html2
-rw-r--r--coverage-report/external/gard/gard.c.func-sort-c.html56
-rw-r--r--coverage-report/external/gard/gard.c.func.html56
-rw-r--r--coverage-report/external/gard/gard.c.gcov.html1705
-rw-r--r--coverage-report/external/gard/index-sort-b.html22
-rw-r--r--coverage-report/external/gard/index-sort-f.html22
-rw-r--r--coverage-report/external/gard/index-sort-l.html22
-rw-r--r--coverage-report/external/gard/index.html22
-rw-r--r--coverage-report/external/gard/libflash/blocklevel.c.func-sort-c.html26
-rw-r--r--coverage-report/external/gard/libflash/blocklevel.c.func.html26
-rw-r--r--coverage-report/external/gard/libflash/blocklevel.c.gcov.html54
-rw-r--r--coverage-report/external/gard/libflash/ecc.c.func-sort-c.html10
-rw-r--r--coverage-report/external/gard/libflash/ecc.c.func.html10
-rw-r--r--coverage-report/external/gard/libflash/ecc.c.gcov.html8
-rw-r--r--coverage-report/external/gard/libflash/ecc.h.func-sort-c.html2
-rw-r--r--coverage-report/external/gard/libflash/ecc.h.func.html2
-rw-r--r--coverage-report/external/gard/libflash/ecc.h.gcov.html2
-rw-r--r--coverage-report/external/gard/libflash/file.c.func-sort-c.html14
-rw-r--r--coverage-report/external/gard/libflash/file.c.func.html14
-rw-r--r--coverage-report/external/gard/libflash/file.c.gcov.html52
-rw-r--r--coverage-report/external/gard/libflash/index-sort-b.html58
-rw-r--r--coverage-report/external/gard/libflash/index-sort-f.html60
-rw-r--r--coverage-report/external/gard/libflash/index-sort-l.html56
-rw-r--r--coverage-report/external/gard/libflash/index.html46
-rw-r--r--coverage-report/external/gard/libflash/libffs.c.func-sort-c.html22
-rw-r--r--coverage-report/external/gard/libflash/libffs.c.func.html22
-rw-r--r--coverage-report/external/gard/libflash/libffs.c.gcov.html48
-rw-r--r--coverage-report/external/gard/libflash/libflash.c.func-sort-c.html22
-rw-r--r--coverage-report/external/gard/libflash/libflash.c.func.html22
-rw-r--r--coverage-report/external/gard/libflash/libflash.c.gcov.html62
-rw-r--r--coverage-report/external/pflash/ccan/endian/endian.h.func-sort-c.html12
-rw-r--r--coverage-report/external/pflash/ccan/endian/endian.h.func.html12
-rw-r--r--coverage-report/external/pflash/ccan/endian/endian.h.gcov.html496
-rw-r--r--coverage-report/external/pflash/ccan/endian/index-sort-b.html14
-rw-r--r--coverage-report/external/pflash/ccan/endian/index-sort-f.html14
-rw-r--r--coverage-report/external/pflash/ccan/endian/index-sort-l.html14
-rw-r--r--coverage-report/external/pflash/ccan/endian/index.html14
-rw-r--r--coverage-report/external/pflash/ccan/list/index-sort-b.html2
-rw-r--r--coverage-report/external/pflash/ccan/list/index-sort-f.html2
-rw-r--r--coverage-report/external/pflash/ccan/list/index-sort-l.html2
-rw-r--r--coverage-report/external/pflash/ccan/list/index.html2
-rw-r--r--coverage-report/external/pflash/ccan/list/list.c.func-sort-c.html2
-rw-r--r--coverage-report/external/pflash/ccan/list/list.c.func.html2
-rw-r--r--coverage-report/external/pflash/ccan/list/list.c.gcov.html2
-rw-r--r--coverage-report/external/pflash/common/arch_flash_common.c.func-sort-c.html2
-rw-r--r--coverage-report/external/pflash/common/arch_flash_common.c.func.html2
-rw-r--r--coverage-report/external/pflash/common/arch_flash_common.c.gcov.html2
-rw-r--r--coverage-report/external/pflash/common/arch_flash_unknown.c.func-sort-c.html2
-rw-r--r--coverage-report/external/pflash/common/arch_flash_unknown.c.func.html2
-rw-r--r--coverage-report/external/pflash/common/arch_flash_unknown.c.gcov.html2
-rw-r--r--coverage-report/external/pflash/common/index-sort-b.html2
-rw-r--r--coverage-report/external/pflash/common/index-sort-f.html2
-rw-r--r--coverage-report/external/pflash/common/index-sort-l.html2
-rw-r--r--coverage-report/external/pflash/common/index.html2
-rw-r--r--coverage-report/external/pflash/index-sort-b.html32
-rw-r--r--coverage-report/external/pflash/index-sort-f.html20
-rw-r--r--coverage-report/external/pflash/index-sort-l.html20
-rw-r--r--coverage-report/external/pflash/index.html20
-rw-r--r--coverage-report/external/pflash/libflash/blocklevel.c.func-sort-c.html24
-rw-r--r--coverage-report/external/pflash/libflash/blocklevel.c.func.html24
-rw-r--r--coverage-report/external/pflash/libflash/blocklevel.c.gcov.html52
-rw-r--r--coverage-report/external/pflash/libflash/ecc.c.func-sort-c.html8
-rw-r--r--coverage-report/external/pflash/libflash/ecc.c.func.html8
-rw-r--r--coverage-report/external/pflash/libflash/ecc.c.gcov.html4
-rw-r--r--coverage-report/external/pflash/libflash/ecc.h.func-sort-c.html2
-rw-r--r--coverage-report/external/pflash/libflash/ecc.h.func.html2
-rw-r--r--coverage-report/external/pflash/libflash/ecc.h.gcov.html2
-rw-r--r--coverage-report/external/pflash/libflash/file.c.func-sort-c.html18
-rw-r--r--coverage-report/external/pflash/libflash/file.c.func.html18
-rw-r--r--coverage-report/external/pflash/libflash/file.c.gcov.html56
-rw-r--r--coverage-report/external/pflash/libflash/index-sort-b.html74
-rw-r--r--coverage-report/external/pflash/libflash/index-sort-f.html50
-rw-r--r--coverage-report/external/pflash/libflash/index-sort-l.html50
-rw-r--r--coverage-report/external/pflash/libflash/index.html50
-rw-r--r--coverage-report/external/pflash/libflash/libffs.c.func-sort-c.html38
-rw-r--r--coverage-report/external/pflash/libflash/libffs.c.func.html32
-rw-r--r--coverage-report/external/pflash/libflash/libffs.c.gcov.html68
-rw-r--r--coverage-report/external/pflash/libflash/libflash.c.func-sort-c.html22
-rw-r--r--coverage-report/external/pflash/libflash/libflash.c.func.html22
-rw-r--r--coverage-report/external/pflash/libflash/libflash.c.gcov.html62
-rw-r--r--coverage-report/external/pflash/pflash.c.func-sort-c.html6
-rw-r--r--coverage-report/external/pflash/pflash.c.func.html6
-rw-r--r--coverage-report/external/pflash/pflash.c.gcov.html16
-rw-r--r--coverage-report/external/pflash/progress.c.func-sort-c.html6
-rw-r--r--coverage-report/external/pflash/progress.c.func.html6
-rw-r--r--coverage-report/external/pflash/progress.c.gcov.html8
-rw-r--r--coverage-report/external/trace/index-sort-b.html2
-rw-r--r--coverage-report/external/trace/index-sort-f.html2
-rw-r--r--coverage-report/external/trace/index-sort-l.html2
-rw-r--r--coverage-report/external/trace/index.html2
-rw-r--r--coverage-report/external/trace/trace.c.func-sort-c.html10
-rw-r--r--coverage-report/external/trace/trace.c.func.html6
-rw-r--r--coverage-report/external/trace/trace.c.gcov.html78
-rw-r--r--coverage-report/hdata/cpu-common.c.func-sort-c.html22
-rw-r--r--coverage-report/hdata/cpu-common.c.func.html22
-rw-r--r--coverage-report/hdata/cpu-common.c.gcov.html591
-rw-r--r--coverage-report/hdata/fsp.c.func-sort-c.html10
-rw-r--r--coverage-report/hdata/fsp.c.func.html10
-rw-r--r--coverage-report/hdata/fsp.c.gcov.html388
-rw-r--r--coverage-report/hdata/hdif.c.func-sort-c.html2
-rw-r--r--coverage-report/hdata/hdif.c.func.html2
-rw-r--r--coverage-report/hdata/hdif.c.gcov.html2
-rw-r--r--coverage-report/hdata/hdif.h.func-sort-c.html2
-rw-r--r--coverage-report/hdata/hdif.h.func.html2
-rw-r--r--coverage-report/hdata/hdif.h.gcov.html2
-rw-r--r--coverage-report/hdata/hostservices.c.func-sort-c.html2
-rw-r--r--coverage-report/hdata/hostservices.c.func.html2
-rw-r--r--coverage-report/hdata/hostservices.c.gcov.html2
-rw-r--r--coverage-report/hdata/i2c.c.func-sort-c.html22
-rw-r--r--coverage-report/hdata/i2c.c.func.html22
-rw-r--r--coverage-report/hdata/i2c.c.gcov.html746
-rw-r--r--coverage-report/hdata/index-sort-b.html188
-rw-r--r--coverage-report/hdata/index-sort-f.html58
-rw-r--r--coverage-report/hdata/index-sort-l.html72
-rw-r--r--coverage-report/hdata/index.html58
-rw-r--r--coverage-report/hdata/iohub.c.func-sort-c.html38
-rw-r--r--coverage-report/hdata/iohub.c.func.html38
-rw-r--r--coverage-report/hdata/iohub.c.gcov.html1457
-rw-r--r--coverage-report/hdata/memory.c.func-sort-c.html46
-rw-r--r--coverage-report/hdata/memory.c.func.html46
-rw-r--r--coverage-report/hdata/memory.c.gcov.html1786
-rw-r--r--coverage-report/hdata/pcia.c.func-sort-c.html12
-rw-r--r--coverage-report/hdata/pcia.c.func.html12
-rw-r--r--coverage-report/hdata/pcia.c.gcov.html301
-rw-r--r--coverage-report/hdata/slca.c.func-sort-c.html2
-rw-r--r--coverage-report/hdata/slca.c.func.html2
-rw-r--r--coverage-report/hdata/slca.c.gcov.html2
-rw-r--r--coverage-report/hdata/spira.c.func-sort-c.html92
-rw-r--r--coverage-report/hdata/spira.c.func.html92
-rw-r--r--coverage-report/hdata/spira.c.gcov.html3634
-rw-r--r--coverage-report/hdata/spira.h.func-sort-c.html4
-rw-r--r--coverage-report/hdata/spira.h.func.html4
-rw-r--r--coverage-report/hdata/spira.h.gcov.html1833
-rw-r--r--coverage-report/hdata/test/hdata_to_dt.c.func-sort-c.html34
-rw-r--r--coverage-report/hdata/test/hdata_to_dt.c.func.html34
-rw-r--r--coverage-report/hdata/test/hdata_to_dt.c.gcov.html736
-rw-r--r--coverage-report/hdata/test/index-sort-b.html14
-rw-r--r--coverage-report/hdata/test/index-sort-f.html14
-rw-r--r--coverage-report/hdata/test/index-sort-l.html14
-rw-r--r--coverage-report/hdata/test/index.html14
-rw-r--r--coverage-report/hdata/tpmrel.c.func-sort-c.html2
-rw-r--r--coverage-report/hdata/tpmrel.c.func.html2
-rw-r--r--coverage-report/hdata/tpmrel.c.gcov.html2
-rw-r--r--coverage-report/hdata/vpd-common.c.func-sort-c.html2
-rw-r--r--coverage-report/hdata/vpd-common.c.func.html2
-rw-r--r--coverage-report/hdata/vpd-common.c.gcov.html2
-rw-r--r--coverage-report/hdata/vpd.c.func-sort-c.html40
-rw-r--r--coverage-report/hdata/vpd.c.func.html40
-rw-r--r--coverage-report/hdata/vpd.c.gcov.html1319
-rw-r--r--coverage-report/hw/index-sort-b.html22
-rw-r--r--coverage-report/hw/index-sort-f.html32
-rw-r--r--coverage-report/hw/index-sort-l.html22
-rw-r--r--coverage-report/hw/index.html22
-rw-r--r--coverage-report/hw/ipmi/index-sort-b.html2
-rw-r--r--coverage-report/hw/ipmi/index-sort-f.html2
-rw-r--r--coverage-report/hw/ipmi/index-sort-l.html2
-rw-r--r--coverage-report/hw/ipmi/index.html2
-rw-r--r--coverage-report/hw/ipmi/ipmi-fru.c.func-sort-c.html2
-rw-r--r--coverage-report/hw/ipmi/ipmi-fru.c.func.html2
-rw-r--r--coverage-report/hw/ipmi/ipmi-fru.c.gcov.html2
-rw-r--r--coverage-report/hw/ipmi/test/index-sort-b.html2
-rw-r--r--coverage-report/hw/ipmi/test/index-sort-f.html2
-rw-r--r--coverage-report/hw/ipmi/test/index-sort-l.html2
-rw-r--r--coverage-report/hw/ipmi/test/index.html2
-rw-r--r--coverage-report/hw/ipmi/test/run-fru.c.func-sort-c.html2
-rw-r--r--coverage-report/hw/ipmi/test/run-fru.c.func.html2
-rw-r--r--coverage-report/hw/ipmi/test/run-fru.c.gcov.html2
-rw-r--r--coverage-report/hw/lpc-port80h.c.func-sort-c.html8
-rw-r--r--coverage-report/hw/lpc-port80h.c.func.html8
-rw-r--r--coverage-report/hw/lpc-port80h.c.gcov.html329
-rw-r--r--coverage-report/hw/phys-map.c.func-sort-c.html28
-rw-r--r--coverage-report/hw/phys-map.c.func.html28
-rw-r--r--coverage-report/hw/phys-map.c.gcov.html789
-rw-r--r--coverage-report/hw/test/index-sort-b.html36
-rw-r--r--coverage-report/hw/test/index-sort-f.html22
-rw-r--r--coverage-report/hw/test/index-sort-l.html22
-rw-r--r--coverage-report/hw/test/index.html22
-rw-r--r--coverage-report/hw/test/phys-map-test.c.func-sort-c.html26
-rw-r--r--coverage-report/hw/test/phys-map-test.c.func.html26
-rw-r--r--coverage-report/hw/test/phys-map-test.c.gcov.html277
-rw-r--r--coverage-report/hw/test/run-port80h.c.func-sort-c.html2
-rw-r--r--coverage-report/hw/test/run-port80h.c.func.html2
-rw-r--r--coverage-report/hw/test/run-port80h.c.gcov.html2
-rw-r--r--coverage-report/include/bitmap.h.func-sort-c.html2
-rw-r--r--coverage-report/include/bitmap.h.func.html2
-rw-r--r--coverage-report/include/bitmap.h.gcov.html2
-rw-r--r--coverage-report/include/chip.h.func-sort-c.html4
-rw-r--r--coverage-report/include/chip.h.func.html4
-rw-r--r--coverage-report/include/chip.h.gcov.html389
-rw-r--r--coverage-report/include/compiler.h.func-sort-c.html2
-rw-r--r--coverage-report/include/compiler.h.func.html2
-rw-r--r--coverage-report/include/compiler.h.gcov.html16
-rw-r--r--coverage-report/include/device.h.func-sort-c.html6
-rw-r--r--coverage-report/include/device.h.func.html6
-rw-r--r--coverage-report/include/device.h.gcov.html10
-rw-r--r--coverage-report/include/index-sort-b.html74
-rw-r--r--coverage-report/include/index-sort-f.html14
-rw-r--r--coverage-report/include/index-sort-l.html2
-rw-r--r--coverage-report/include/index.html2
-rw-r--r--coverage-report/include/lock.h.func-sort-c.html4
-rw-r--r--coverage-report/include/lock.h.func.html4
-rw-r--r--coverage-report/include/lock.h.gcov.html8
-rw-r--r--coverage-report/include/opal-internal.h.func-sort-c.html2
-rw-r--r--coverage-report/include/opal-internal.h.func.html2
-rw-r--r--coverage-report/include/opal-internal.h.gcov.html2
-rw-r--r--coverage-report/include/pci.h.func-sort-c.html2
-rw-r--r--coverage-report/include/pci.h.func.html2
-rw-r--r--coverage-report/include/pci.h.gcov.html4
-rw-r--r--coverage-report/include/processor.h.func-sort-c.html6
-rw-r--r--coverage-report/include/processor.h.func.html6
-rw-r--r--coverage-report/include/processor.h.gcov.html767
-rw-r--r--coverage-report/include/skiboot.h.func-sort-c.html8
-rw-r--r--coverage-report/include/skiboot.h.func.html8
-rw-r--r--coverage-report/include/skiboot.h.gcov.html699
-rw-r--r--coverage-report/include/time-utils.h.func-sort-c.html2
-rw-r--r--coverage-report/include/time-utils.h.func.html2
-rw-r--r--coverage-report/include/time-utils.h.gcov.html2
-rw-r--r--coverage-report/include/timebase.h.func-sort-c.html2
-rw-r--r--coverage-report/include/timebase.h.func.html2
-rw-r--r--coverage-report/include/timebase.h.gcov.html2
-rw-r--r--coverage-report/index-sort-b.html632
-rw-r--r--coverage-report/index-sort-f.html326
-rw-r--r--coverage-report/index-sort-l.html392
-rw-r--r--coverage-report/index.html244
-rw-r--r--coverage-report/libc/ctype/index-sort-b.html18
-rw-r--r--coverage-report/libc/ctype/index-sort-f.html18
-rw-r--r--coverage-report/libc/ctype/index-sort-l.html10
-rw-r--r--coverage-report/libc/ctype/index.html2
-rw-r--r--coverage-report/libc/ctype/isdigit.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/ctype/isdigit.c.func.html2
-rw-r--r--coverage-report/libc/ctype/isdigit.c.gcov.html2
-rw-r--r--coverage-report/libc/ctype/isprint.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/ctype/isprint.c.func.html2
-rw-r--r--coverage-report/libc/ctype/isprint.c.gcov.html2
-rw-r--r--coverage-report/libc/ctype/isspace.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/ctype/isspace.c.func.html2
-rw-r--r--coverage-report/libc/ctype/isspace.c.gcov.html2
-rw-r--r--coverage-report/libc/ctype/isxdigit.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/ctype/isxdigit.c.func.html2
-rw-r--r--coverage-report/libc/ctype/isxdigit.c.gcov.html2
-rw-r--r--coverage-report/libc/ctype/tolower.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/ctype/tolower.c.func.html2
-rw-r--r--coverage-report/libc/ctype/tolower.c.gcov.html2
-rw-r--r--coverage-report/libc/ctype/toupper.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/ctype/toupper.c.func.html2
-rw-r--r--coverage-report/libc/ctype/toupper.c.gcov.html2
-rw-r--r--coverage-report/libc/index-sort-b.html2
-rw-r--r--coverage-report/libc/index-sort-f.html2
-rw-r--r--coverage-report/libc/index-sort-l.html2
-rw-r--r--coverage-report/libc/index.html2
-rw-r--r--coverage-report/libc/stdio/index-sort-b.html2
-rw-r--r--coverage-report/libc/stdio/index-sort-f.html2
-rw-r--r--coverage-report/libc/stdio/index-sort-l.html2
-rw-r--r--coverage-report/libc/stdio/index.html2
-rw-r--r--coverage-report/libc/stdio/snprintf.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/stdio/snprintf.c.func.html2
-rw-r--r--coverage-report/libc/stdio/snprintf.c.gcov.html2
-rw-r--r--coverage-report/libc/stdio/vsnprintf.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/stdio/vsnprintf.c.func.html2
-rw-r--r--coverage-report/libc/stdio/vsnprintf.c.gcov.html18
-rw-r--r--coverage-report/libc/stdlib/atoi.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/stdlib/atoi.c.func.html2
-rw-r--r--coverage-report/libc/stdlib/atoi.c.gcov.html2
-rw-r--r--coverage-report/libc/stdlib/atol.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/stdlib/atol.c.func.html2
-rw-r--r--coverage-report/libc/stdlib/atol.c.gcov.html2
-rw-r--r--coverage-report/libc/stdlib/index-sort-b.html24
-rw-r--r--coverage-report/libc/stdlib/index-sort-f.html24
-rw-r--r--coverage-report/libc/stdlib/index-sort-l.html2
-rw-r--r--coverage-report/libc/stdlib/index.html2
-rw-r--r--coverage-report/libc/stdlib/rand.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/stdlib/rand.c.func.html2
-rw-r--r--coverage-report/libc/stdlib/rand.c.gcov.html2
-rw-r--r--coverage-report/libc/stdlib/strtol.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/stdlib/strtol.c.func.html2
-rw-r--r--coverage-report/libc/stdlib/strtol.c.gcov.html2
-rw-r--r--coverage-report/libc/stdlib/strtoul.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/stdlib/strtoul.c.func.html2
-rw-r--r--coverage-report/libc/stdlib/strtoul.c.gcov.html2
-rw-r--r--coverage-report/libc/string/index-sort-b.html102
-rw-r--r--coverage-report/libc/string/index-sort-f.html58
-rw-r--r--coverage-report/libc/string/index-sort-l.html18
-rw-r--r--coverage-report/libc/string/index.html2
-rw-r--r--coverage-report/libc/string/memchr.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/string/memchr.c.func.html2
-rw-r--r--coverage-report/libc/string/memchr.c.gcov.html2
-rw-r--r--coverage-report/libc/string/memcmp.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/string/memcmp.c.func.html2
-rw-r--r--coverage-report/libc/string/memcmp.c.gcov.html2
-rw-r--r--coverage-report/libc/string/memcpy.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/string/memcpy.c.func.html2
-rw-r--r--coverage-report/libc/string/memcpy.c.gcov.html2
-rw-r--r--coverage-report/libc/string/memmove.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/string/memmove.c.func.html2
-rw-r--r--coverage-report/libc/string/memmove.c.gcov.html2
-rw-r--r--coverage-report/libc/string/memset.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/string/memset.c.func.html2
-rw-r--r--coverage-report/libc/string/memset.c.gcov.html2
-rw-r--r--coverage-report/libc/string/strcasecmp.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/string/strcasecmp.c.func.html2
-rw-r--r--coverage-report/libc/string/strcasecmp.c.gcov.html2
-rw-r--r--coverage-report/libc/string/strcat.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/string/strcat.c.func.html2
-rw-r--r--coverage-report/libc/string/strcat.c.gcov.html2
-rw-r--r--coverage-report/libc/string/strchr.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/string/strchr.c.func.html2
-rw-r--r--coverage-report/libc/string/strchr.c.gcov.html2
-rw-r--r--coverage-report/libc/string/strcmp.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/string/strcmp.c.func.html2
-rw-r--r--coverage-report/libc/string/strcmp.c.gcov.html2
-rw-r--r--coverage-report/libc/string/strcpy.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/string/strcpy.c.func.html2
-rw-r--r--coverage-report/libc/string/strcpy.c.gcov.html2
-rw-r--r--coverage-report/libc/string/strdup.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/string/strdup.c.func.html2
-rw-r--r--coverage-report/libc/string/strdup.c.gcov.html2
-rw-r--r--coverage-report/libc/string/strlen.c.func-sort-c.html4
-rw-r--r--coverage-report/libc/string/strlen.c.func.html4
-rw-r--r--coverage-report/libc/string/strlen.c.gcov.html14
-rw-r--r--coverage-report/libc/string/strncasecmp.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/string/strncasecmp.c.func.html2
-rw-r--r--coverage-report/libc/string/strncasecmp.c.gcov.html2
-rw-r--r--coverage-report/libc/string/strncmp.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/string/strncmp.c.func.html2
-rw-r--r--coverage-report/libc/string/strncmp.c.gcov.html2
-rw-r--r--coverage-report/libc/string/strncpy.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/string/strncpy.c.func.html2
-rw-r--r--coverage-report/libc/string/strncpy.c.gcov.html2
-rw-r--r--coverage-report/libc/string/strrchr.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/string/strrchr.c.func.html2
-rw-r--r--coverage-report/libc/string/strrchr.c.gcov.html2
-rw-r--r--coverage-report/libc/string/strstr.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/string/strstr.c.func.html2
-rw-r--r--coverage-report/libc/string/strstr.c.gcov.html2
-rw-r--r--coverage-report/libc/string/strtok.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/string/strtok.c.func.html2
-rw-r--r--coverage-report/libc/string/strtok.c.gcov.html2
-rw-r--r--coverage-report/libc/test/index-sort-b.html58
-rw-r--r--coverage-report/libc/test/index-sort-f.html10
-rw-r--r--coverage-report/libc/test/index-sort-l.html2
-rw-r--r--coverage-report/libc/test/index.html2
-rw-r--r--coverage-report/libc/test/run-ctype-test.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/test/run-ctype-test.c.func.html2
-rw-r--r--coverage-report/libc/test/run-ctype-test.c.gcov.html2
-rw-r--r--coverage-report/libc/test/run-ctype.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/test/run-ctype.c.func.html2
-rw-r--r--coverage-report/libc/test/run-ctype.c.gcov.html2
-rw-r--r--coverage-report/libc/test/run-memops-test.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/test/run-memops-test.c.func.html2
-rw-r--r--coverage-report/libc/test/run-memops-test.c.gcov.html2
-rw-r--r--coverage-report/libc/test/run-memops.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/test/run-memops.c.func.html2
-rw-r--r--coverage-report/libc/test/run-memops.c.gcov.html2
-rw-r--r--coverage-report/libc/test/run-snprintf-test.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/test/run-snprintf-test.c.func.html2
-rw-r--r--coverage-report/libc/test/run-snprintf-test.c.gcov.html2
-rw-r--r--coverage-report/libc/test/run-snprintf.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/test/run-snprintf.c.func.html2
-rw-r--r--coverage-report/libc/test/run-snprintf.c.gcov.html2
-rw-r--r--coverage-report/libc/test/run-stdlib.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/test/run-stdlib.c.func.html2
-rw-r--r--coverage-report/libc/test/run-stdlib.c.gcov.html2
-rw-r--r--coverage-report/libc/test/run-time.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/test/run-time.c.func.html2
-rw-r--r--coverage-report/libc/test/run-time.c.gcov.html2
-rw-r--r--coverage-report/libc/time.c.func-sort-c.html2
-rw-r--r--coverage-report/libc/time.c.func.html2
-rw-r--r--coverage-report/libc/time.c.gcov.html2
-rw-r--r--coverage-report/libfdt/fdt.c.func-sort-c.html52
-rw-r--r--coverage-report/libfdt/fdt.c.func.html52
-rw-r--r--coverage-report/libfdt/fdt.c.gcov.html674
-rw-r--r--coverage-report/libfdt/fdt_ro.c.func-sort-c.html96
-rw-r--r--coverage-report/libfdt/fdt_ro.c.func.html96
-rw-r--r--coverage-report/libfdt/fdt_ro.c.gcov.html1723
-rw-r--r--coverage-report/libfdt/fdt_strerror.c.func-sort-c.html4
-rw-r--r--coverage-report/libfdt/fdt_strerror.c.func.html4
-rw-r--r--coverage-report/libfdt/fdt_strerror.c.gcov.html165
-rw-r--r--coverage-report/libfdt/fdt_sw.c.func-sort-c.html60
-rw-r--r--coverage-report/libfdt/fdt_sw.c.func.html60
-rw-r--r--coverage-report/libfdt/fdt_sw.c.gcov.html783
-rw-r--r--coverage-report/libfdt/index-sort-b.html98
-rw-r--r--coverage-report/libfdt/index-sort-f.html70
-rw-r--r--coverage-report/libfdt/index-sort-l.html74
-rw-r--r--coverage-report/libfdt/index.html58
-rw-r--r--coverage-report/libfdt/libfdt.h.func-sort-c.html52
-rw-r--r--coverage-report/libfdt/libfdt.h.func.html52
-rw-r--r--coverage-report/libfdt/libfdt.h.gcov.html3869
-rw-r--r--coverage-report/libfdt/libfdt_env.h.func-sort-c.html16
-rw-r--r--coverage-report/libfdt/libfdt_env.h.func.html16
-rw-r--r--coverage-report/libfdt/libfdt_env.h.gcov.html239
-rw-r--r--coverage-report/libfdt/libfdt_internal.h.func-sort-c.html34
-rw-r--r--coverage-report/libfdt/libfdt_internal.h.func.html34
-rw-r--r--coverage-report/libfdt/libfdt_internal.h.gcov.html300
-rw-r--r--coverage-report/libflash/blocklevel.c.func-sort-c.html24
-rw-r--r--coverage-report/libflash/blocklevel.c.func.html12
-rw-r--r--coverage-report/libflash/blocklevel.c.gcov.html36
-rw-r--r--coverage-report/libflash/ecc.c.func-sort-c.html10
-rw-r--r--coverage-report/libflash/ecc.c.func.html4
-rw-r--r--coverage-report/libflash/ecc.c.gcov.html4
-rw-r--r--coverage-report/libflash/ecc.h.func-sort-c.html2
-rw-r--r--coverage-report/libflash/ecc.h.func.html2
-rw-r--r--coverage-report/libflash/ecc.h.gcov.html2
-rw-r--r--coverage-report/libflash/file.c.func-sort-c.html18
-rw-r--r--coverage-report/libflash/file.c.func.html18
-rw-r--r--coverage-report/libflash/file.c.gcov.html56
-rw-r--r--coverage-report/libflash/index-sort-b.html92
-rw-r--r--coverage-report/libflash/index-sort-f.html46
-rw-r--r--coverage-report/libflash/index-sort-l.html46
-rw-r--r--coverage-report/libflash/index.html46
-rw-r--r--coverage-report/libflash/ipmi-hiomap.c.func-sort-c.html2
-rw-r--r--coverage-report/libflash/ipmi-hiomap.c.func.html2
-rw-r--r--coverage-report/libflash/ipmi-hiomap.c.gcov.html4
-rw-r--r--coverage-report/libflash/libffs.c.func-sort-c.html38
-rw-r--r--coverage-report/libflash/libffs.c.func.html32
-rw-r--r--coverage-report/libflash/libffs.c.gcov.html68
-rw-r--r--coverage-report/libflash/libflash.c.func-sort-c.html6
-rw-r--r--coverage-report/libflash/libflash.c.func.html6
-rw-r--r--coverage-report/libflash/libflash.c.gcov.html8
-rw-r--r--coverage-report/libflash/mbox-flash.c.func-sort-c.html2
-rw-r--r--coverage-report/libflash/mbox-flash.c.func.html2
-rw-r--r--coverage-report/libflash/mbox-flash.c.gcov.html42
-rw-r--r--coverage-report/libflash/test/index-sort-b.html66
-rw-r--r--coverage-report/libflash/test/index-sort-f.html2
-rw-r--r--coverage-report/libflash/test/index-sort-l.html2
-rw-r--r--coverage-report/libflash/test/index.html2
-rw-r--r--coverage-report/libflash/test/mbox-server.c.func-sort-c.html8
-rw-r--r--coverage-report/libflash/test/mbox-server.c.func.html8
-rw-r--r--coverage-report/libflash/test/mbox-server.c.gcov.html40
-rw-r--r--coverage-report/libflash/test/stubs.c.func-sort-c.html2
-rw-r--r--coverage-report/libflash/test/stubs.c.func.html2
-rw-r--r--coverage-report/libflash/test/stubs.c.gcov.html2
-rw-r--r--coverage-report/libflash/test/test-blocklevel.c.func-sort-c.html2
-rw-r--r--coverage-report/libflash/test/test-blocklevel.c.func.html2
-rw-r--r--coverage-report/libflash/test/test-blocklevel.c.gcov.html2
-rw-r--r--coverage-report/libflash/test/test-ecc.c.func-sort-c.html2
-rw-r--r--coverage-report/libflash/test/test-ecc.c.func.html2
-rw-r--r--coverage-report/libflash/test/test-ecc.c.gcov.html2
-rw-r--r--coverage-report/libflash/test/test-flash.c.func-sort-c.html2
-rw-r--r--coverage-report/libflash/test/test-flash.c.func.html2
-rw-r--r--coverage-report/libflash/test/test-flash.c.gcov.html2
-rw-r--r--coverage-report/libflash/test/test-ipmi-hiomap.c.func-sort-c.html2
-rw-r--r--coverage-report/libflash/test/test-ipmi-hiomap.c.func.html2
-rw-r--r--coverage-report/libflash/test/test-ipmi-hiomap.c.gcov.html2
-rw-r--r--coverage-report/libflash/test/test-mbox.c.func-sort-c.html2
-rw-r--r--coverage-report/libflash/test/test-mbox.c.func.html2
-rw-r--r--coverage-report/libflash/test/test-mbox.c.gcov.html4
-rw-r--r--coverage-report/libstb/container.c.func-sort-c.html2
-rw-r--r--coverage-report/libstb/container.c.func.html2
-rw-r--r--coverage-report/libstb/container.c.gcov.html2
-rw-r--r--coverage-report/libstb/crypto/pkcs7/index-sort-b.html14
-rw-r--r--coverage-report/libstb/crypto/pkcs7/index-sort-f.html14
-rw-r--r--coverage-report/libstb/crypto/pkcs7/index-sort-l.html14
-rw-r--r--coverage-report/libstb/crypto/pkcs7/index.html14
-rw-r--r--coverage-report/libstb/crypto/pkcs7/pkcs7.c.func-sort-c.html60
-rw-r--r--coverage-report/libstb/crypto/pkcs7/pkcs7.c.func.html52
-rw-r--r--coverage-report/libstb/crypto/pkcs7/pkcs7.c.gcov.html894
-rw-r--r--coverage-report/libstb/index-sort-b.html2
-rw-r--r--coverage-report/libstb/index-sort-f.html2
-rw-r--r--coverage-report/libstb/index-sort-l.html2
-rw-r--r--coverage-report/libstb/index.html2
-rw-r--r--coverage-report/libstb/secvar/backend/edk2-compat-process.c.func-sort-c.html86
-rw-r--r--coverage-report/libstb/secvar/backend/edk2-compat-process.c.func.html80
-rw-r--r--coverage-report/libstb/secvar/backend/edk2-compat-process.c.gcov.html1492
-rw-r--r--coverage-report/libstb/secvar/backend/edk2-compat.c.func-sort-c.html20
-rw-r--r--coverage-report/libstb/secvar/backend/edk2-compat.c.func.html20
-rw-r--r--coverage-report/libstb/secvar/backend/edk2-compat.c.gcov.html419
-rw-r--r--coverage-report/libstb/secvar/backend/index-sort-b.html20
-rw-r--r--coverage-report/libstb/secvar/backend/index-sort-f.html20
-rw-r--r--coverage-report/libstb/secvar/backend/index-sort-l.html28
-rw-r--r--coverage-report/libstb/secvar/backend/index.html20
-rw-r--r--coverage-report/libstb/secvar/index-sort-b.html2
-rw-r--r--coverage-report/libstb/secvar/index-sort-f.html2
-rw-r--r--coverage-report/libstb/secvar/index-sort-l.html2
-rw-r--r--coverage-report/libstb/secvar/index.html2
-rw-r--r--coverage-report/libstb/secvar/secvar_api.c.func-sort-c.html2
-rw-r--r--coverage-report/libstb/secvar/secvar_api.c.func.html2
-rw-r--r--coverage-report/libstb/secvar/secvar_api.c.gcov.html2
-rw-r--r--coverage-report/libstb/secvar/secvar_util.c.func-sort-c.html16
-rw-r--r--coverage-report/libstb/secvar/secvar_util.c.func.html16
-rw-r--r--coverage-report/libstb/secvar/secvar_util.c.gcov.html98
-rw-r--r--coverage-report/libstb/secvar/storage/fakenv_ops.c.func-sort-c.html2
-rw-r--r--coverage-report/libstb/secvar/storage/fakenv_ops.c.func.html2
-rw-r--r--coverage-report/libstb/secvar/storage/fakenv_ops.c.gcov.html2
-rw-r--r--coverage-report/libstb/secvar/storage/index-sort-b.html22
-rw-r--r--coverage-report/libstb/secvar/storage/index-sort-f.html22
-rw-r--r--coverage-report/libstb/secvar/storage/index-sort-l.html22
-rw-r--r--coverage-report/libstb/secvar/storage/index.html22
-rw-r--r--coverage-report/libstb/secvar/storage/secboot_tpm.c.func-sort-c.html60
-rw-r--r--coverage-report/libstb/secvar/storage/secboot_tpm.c.func.html56
-rw-r--r--coverage-report/libstb/secvar/storage/secboot_tpm.c.gcov.html1239
-rw-r--r--coverage-report/libstb/secvar/test/index-sort-b.html70
-rw-r--r--coverage-report/libstb/secvar/test/index-sort-f.html44
-rw-r--r--coverage-report/libstb/secvar/test/index-sort-l.html36
-rw-r--r--coverage-report/libstb/secvar/test/index.html36
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-edk2-compat.c.func-sort-c.html24
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-edk2-compat.c.func.html24
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-edk2-compat.c.gcov.html1049
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-enqueue.c.func-sort-c.html2
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-enqueue.c.func.html2
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-enqueue.c.gcov.html2
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-getvar.c.func-sort-c.html2
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-getvar.c.func.html2
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-getvar.c.gcov.html2
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-nextvar.c.func-sort-c.html2
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-nextvar.c.func.html2
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-nextvar.c.gcov.html2
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-pkcs7.c.func-sort-c.html89
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-pkcs7.c.func.html89
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-pkcs7.c.gcov.html117
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-secboot-tpm.c.func-sort-c.html10
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-secboot-tpm.c.func.html10
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-secboot-tpm.c.gcov.html71
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-void.c.func-sort-c.html2
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-void.c.func.html2
-rw-r--r--coverage-report/libstb/secvar/test/secvar-test-void.c.gcov.html2
-rw-r--r--coverage-report/libstb/secvar/test/secvar_api_test.c.func-sort-c.html2
-rw-r--r--coverage-report/libstb/secvar/test/secvar_api_test.c.func.html2
-rw-r--r--coverage-report/libstb/secvar/test/secvar_api_test.c.gcov.html2
-rw-r--r--coverage-report/libstb/test/index-sort-b.html2
-rw-r--r--coverage-report/libstb/test/index-sort-f.html2
-rw-r--r--coverage-report/libstb/test/index-sort-l.html2
-rw-r--r--coverage-report/libstb/test/index.html2
-rw-r--r--coverage-report/libstb/test/run-stb-container.c.func-sort-c.html2
-rw-r--r--coverage-report/libstb/test/run-stb-container.c.func.html2
-rw-r--r--coverage-report/libstb/test/run-stb-container.c.gcov.html2
-rw-r--r--coverage-report/test/dt_common.c.func-sort-c.html2
-rw-r--r--coverage-report/test/dt_common.c.func.html2
-rw-r--r--coverage-report/test/dt_common.c.gcov.html2
-rw-r--r--coverage-report/test/index-sort-b.html2
-rw-r--r--coverage-report/test/index-sort-f.html2
-rw-r--r--coverage-report/test/index-sort-l.html2
-rw-r--r--coverage-report/test/index.html2
-rw-r--r--coverage-report/usr/include/bits/index-sort-b.html119
-rw-r--r--coverage-report/usr/include/bits/index-sort-f.html119
-rw-r--r--coverage-report/usr/include/bits/index-sort-l.html119
-rw-r--r--coverage-report/usr/include/bits/index.html119
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/byteswap.h.func-sort-c.html93
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/byteswap.h.func.html93
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/byteswap.h.gcov.html (renamed from coverage-report/usr/include/bits/byteswap.h.gcov.html)36
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/fcntl2.h.func-sort-c.html81
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/fcntl2.h.func.html81
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/fcntl2.h.gcov.html257
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/index-sort-b.html167
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/index-sort-f.html167
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/index-sort-l.html167
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/index.html167
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/stdio.h.func-sort-c.html81
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/stdio.h.func.html81
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/stdio.h.gcov.html (renamed from coverage-report/usr/include/bits/stdio.h.gcov.html)16
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/stdio2.h.func-sort-c.html81
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/stdio2.h.func.html81
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/stdio2.h.gcov.html471
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/string_fortified.h.func-sort-c.html81
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/string_fortified.h.func.html81
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/string_fortified.h.gcov.html224
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/unistd.h.func-sort-c.html81
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/unistd.h.func.html81
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/bits/unistd.h.gcov.html470
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/sys/index-sort-b.html (renamed from coverage-report/usr/include/sys/index-sort-b.html)32
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/sys/index-sort-f.html (renamed from coverage-report/usr/include/sys/index-sort-f.html)32
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/sys/index-sort-l.html (renamed from coverage-report/usr/include/sys/index-sort-l.html)32
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/sys/index.html (renamed from coverage-report/usr/include/sys/index.html)32
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/sys/stat.h.func-sort-c.html81
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/sys/stat.h.func.html81
-rw-r--r--coverage-report/usr/include/x86_64-linux-gnu/sys/stat.h.gcov.html (renamed from coverage-report/usr/include/sys/stat.h.gcov.html)24
-rw-r--r--doc/.buildinfo2
-rw-r--r--doc/_sources/opal-api/opal-pci-set-phb-capi-mode-93.rst.txt5
-rw-r--r--doc/_sources/platforms-and-cpus.rst.txt28
-rw-r--r--doc/_sources/release-notes/skiboot-6.0.24.rst.txt22
-rw-r--r--doc/_sources/release-notes/skiboot-6.6.6.rst.txt15
-rw-r--r--doc/_sources/release-notes/skiboot-6.7.1.rst.txt33
-rw-r--r--doc/_sources/release-notes/skiboot-6.7.2.rst.txt29
-rw-r--r--doc/_sources/release-notes/skiboot-6.7.3.rst.txt29
-rw-r--r--doc/_sources/release-notes/skiboot-6.8.1.rst.txt31
-rw-r--r--doc/_sources/release-notes/skiboot-6.8.rst.txt12
-rw-r--r--doc/_sources/release-notes/skiboot-7.0.rst.txt28
-rw-r--r--doc/_static/basic.css322
-rw-r--r--doc/_static/classic.css13
-rw-r--r--doc/_static/doctools.js22
-rw-r--r--doc/_static/documentation_options.js6
-rw-r--r--doc/_static/jquery-3.5.1.js10872
-rw-r--r--doc/_static/jquery.js10367
-rw-r--r--doc/_static/language_data.js6
-rw-r--r--doc/_static/pygments.css7
-rw-r--r--doc/_static/searchtools.js107
-rw-r--r--doc/_static/sidebar.js2
-rw-r--r--doc/_static/underscore-1.12.0.js2027
-rw-r--r--doc/_static/underscore.js1711
-rw-r--r--doc/bmc.html72
-rw-r--r--doc/console-log.html136
-rw-r--r--doc/device-tree.html67
-rw-r--r--doc/device-tree/ibm,cvc.html53
-rw-r--r--doc/device-tree/ibm,firmware-versions.html235
-rw-r--r--doc/device-tree/ibm,opal.html85
-rw-r--r--doc/device-tree/ibm,opal/diagnostics.html53
-rw-r--r--doc/device-tree/ibm,opal/dump.html45
-rw-r--r--doc/device-tree/ibm,opal/firmware.html72
-rw-r--r--doc/device-tree/ibm,opal/flash.html69
-rw-r--r--doc/device-tree/ibm,opal/led.html61
-rw-r--r--doc/device-tree/ibm,opal/nvram.html45
-rw-r--r--doc/device-tree/ibm,opal/oppanel.html45
-rw-r--r--doc/device-tree/ibm,opal/power-mgt.html45
-rw-r--r--doc/device-tree/ibm,opal/power-mgt/occ.html49
-rw-r--r--doc/device-tree/ibm,opal/power-mgt/powercap.html71
-rw-r--r--doc/device-tree/ibm,opal/power-mgt/psr.html65
-rw-r--r--doc/device-tree/ibm,opal/secvar.html145
-rw-r--r--doc/device-tree/ibm,opal/sensor-groups.html75
-rw-r--r--doc/device-tree/ibm,opal/sensors.html65
-rw-r--r--doc/device-tree/ibm,opal/sysparams.html53
-rw-r--r--doc/device-tree/ibm,powerpc-cpu-features/binding.html213
-rw-r--r--doc/device-tree/ibm,powerpc-cpu-features/design.html85
-rw-r--r--doc/device-tree/ibm,secureboot.html53
-rw-r--r--doc/device-tree/imc.html91
-rw-r--r--doc/device-tree/index.html65
-rw-r--r--doc/device-tree/memory-hierarchy.html48
-rw-r--r--doc/device-tree/nvlink.html45
-rw-r--r--doc/device-tree/nx.html45
-rw-r--r--doc/device-tree/opencapi.html45
-rw-r--r--doc/device-tree/pci.html45
-rw-r--r--doc/device-tree/reserved-memory.html70
-rw-r--r--doc/device-tree/tpm.html45
-rw-r--r--doc/device-tree/vas.html45
-rw-r--r--doc/device-tree/vpd.html53
-rw-r--r--doc/error-logging.html126
-rw-r--r--doc/gcov.html47
-rw-r--r--doc/genindex.html46
-rw-r--r--doc/imc.html45
-rw-r--r--doc/index.html65
-rw-r--r--doc/memory.html51
-rw-r--r--doc/mpipl.html47
-rw-r--r--doc/nvlink.html159
-rw-r--r--doc/objects.invbin11129 -> 11229 bytes
-rw-r--r--doc/opal-api/index.html2479
-rw-r--r--doc/opal-api/opal-cec-power-down-5.html86
-rw-r--r--doc/opal-api/opal-cec-reboot-6-116.html120
-rw-r--r--doc/opal-api/opal-check-async-completion-86.html73
-rw-r--r--doc/opal-api/opal-check-token-80.html45
-rw-r--r--doc/opal-api/opal-code-update-76-77-78.html121
-rw-r--r--doc/opal-api/opal-config-cpu-idle-state-99.html55
-rw-r--r--doc/opal-api/opal-console-read-write-1-2.html139
-rw-r--r--doc/opal-api/opal-dump-81-82-83-84-94-101-102.html127
-rw-r--r--doc/opal-api/opal-elog-71-72-73-74-75.html81
-rw-r--r--doc/opal-api/opal-flash-110-111-112.html73
-rw-r--r--doc/opal-api/opal-get-device-tree-118.html85
-rw-r--r--doc/opal-api/opal-get-epow-status-56.html53
-rw-r--r--doc/opal-api/opal-get-msg-85.html67
-rw-r--r--doc/opal-api/opal-get-msi-39-40.html71
-rw-r--r--doc/opal-api/opal-get-xive-20.html63
-rw-r--r--doc/opal-api/opal-handle-hmi-98-166.html79
-rw-r--r--doc/opal-api/opal-handle-interrupt.html57
-rw-r--r--doc/opal-api/opal-i2c-request-109.html105
-rw-r--r--doc/opal-api/opal-imc-counters.html129
-rw-r--r--doc/opal-api/opal-int-eoi-124.html45
-rw-r--r--doc/opal-api/opal-int-get-xirr-122.html45
-rw-r--r--doc/opal-api/opal-int-set-cppr-123.html45
-rw-r--r--doc/opal-api/opal-int-set-mfrr-125.html45
-rw-r--r--doc/opal-api/opal-invalid-call--1.html45
-rw-r--r--doc/opal-api/opal-ipmi-send-recv-107-108.html123
-rw-r--r--doc/opal-api/opal-led-get-set-114-115.html132
-rw-r--r--doc/opal-api/opal-lpc-read-write-67-68.html131
-rw-r--r--doc/opal-api/opal-messages.html53
-rw-r--r--doc/opal-api/opal-mpipl-173-174.html111
-rw-r--r--doc/opal-api/opal-nmmu-set-ptcr-127.html67
-rw-r--r--doc/opal-api/opal-npu2-146-147-148.html45
-rw-r--r--doc/opal-api/opal-npu2-get-set-relaxed-order-168-169.html95
-rw-r--r--doc/opal-api/opal-npu2-opencapi-159-160-161-171-172.html193
-rw-r--r--doc/opal-api/opal-nvram-read-write-7-8.html111
-rw-r--r--doc/opal-api/opal-param-89-90.html107
-rw-r--r--doc/opal-api/opal-pci-config-read-write-13-14-15-16-17-18.html73
-rw-r--r--doc/opal-api/opal-pci-eeh-freeze-clear-26.html65
-rw-r--r--doc/opal-api/opal-pci-eeh-freeze-set-97.html59
-rw-r--r--doc/opal-api/opal-pci-eeh-freeze-status-23.html71
-rw-r--r--doc/opal-api/opal-pci-err-inject-96.html61
-rw-r--r--doc/opal-api/opal-pci-get-hub-diag-data-50.html69
-rw-r--r--doc/opal-api/opal-pci-get-phb-diag-data2-64.html91
-rw-r--r--doc/opal-api/opal-pci-get-power-state-120.html69
-rw-r--r--doc/opal-api/opal-pci-get-presence-state-119.html69
-rw-r--r--doc/opal-api/opal-pci-get-set-pbcq-tunnel-bar-164-165.html96
-rw-r--r--doc/opal-api/opal-pci-map-pe-dma-window-44.html101
-rw-r--r--doc/opal-api/opal-pci-map-pe-dma-window-real-45.html75
-rw-r--r--doc/opal-api/opal-pci-map-pe-mmio-window-29.html70
-rw-r--r--doc/opal-api/opal-pci-msi-eoi-63.html63
-rw-r--r--doc/opal-api/opal-pci-next-error-60.html59
-rw-r--r--doc/opal-api/opal-pci-phb-mmio-enable-27.html68
-rw-r--r--doc/opal-api/opal-pci-poll-62.html45
-rw-r--r--doc/opal-api/opal-pci-reinit-53.html63
-rw-r--r--doc/opal-api/opal-pci-reset-49.html61
-rw-r--r--doc/opal-api/opal-pci-set-mve-33.html59
-rw-r--r--doc/opal-api/opal-pci-set-mve-enable-34.html61
-rw-r--r--doc/opal-api/opal-pci-set-p2p-157.html79
-rw-r--r--doc/opal-api/opal-pci-set-pe-31.html114
-rw-r--r--doc/opal-api/opal-pci-set-peltv-32.html63
-rw-r--r--doc/opal-api/opal-pci-set-phb-capi-mode-93.html98
-rw-r--r--doc/opal-api/opal-pci-set-phb-mem-window-28.html82
-rw-r--r--doc/opal-api/opal-pci-set-power-state-121.html81
-rw-r--r--doc/opal-api/opal-pci-set-xive-pe-37.html59
-rw-r--r--doc/opal-api/opal-pci-tce-kill-126.html65
-rw-r--r--doc/opal-api/opal-phb-flag-set-get-179-180.html75
-rw-r--r--doc/opal-api/opal-poll-events.html45
-rw-r--r--doc/opal-api/opal-power-shift-ratio.html161
-rw-r--r--doc/opal-api/opal-powercap.html145
-rw-r--r--doc/opal-api/opal-prd-msg-113.html53
-rw-r--r--doc/opal-api/opal-query-cpu-status-42.html69
-rw-r--r--doc/opal-api/opal-quiesce-158.html109
-rw-r--r--doc/opal-api/opal-read-write-tpo-dpo-103-104-105.html57
-rw-r--r--doc/opal-api/opal-reinit-cpus-70.html55
-rw-r--r--doc/opal-api/opal-resync-timebase-79.html55
-rw-r--r--doc/opal-api/opal-rtc-read-write-3-4.html103
-rw-r--r--doc/opal-api/opal-secvar.html201
-rw-r--r--doc/opal-api/opal-sensor-group-enable-clear-163-156.html119
-rw-r--r--doc/opal-api/opal-sensor-read-88.html85
-rw-r--r--doc/opal-api/opal-set-xive-19.html73
-rw-r--r--doc/opal-api/opal-signal-system-reset-145.html77
-rw-r--r--doc/opal-api/opal-slw-set-reg-100.html75
-rw-r--r--doc/opal-api/opal-start-return-cpu-41-69.html65
-rw-r--r--doc/opal-api/opal-sync-host-reboot-87.html59
-rw-r--r--doc/opal-api/opal-test-0.html45
-rw-r--r--doc/opal-api/opal-write-oppanel-async-95.html73
-rw-r--r--doc/opal-api/opal-xscom-read-write-65-66.html137
-rw-r--r--doc/opal-api/opal_nx_coproc_init-167.html61
-rw-r--r--doc/opal-api/power9-changes.html68
-rw-r--r--doc/opal-api/return-codes.html501
-rw-r--r--doc/opal-spec.html171
-rw-r--r--doc/overview.html233
-rw-r--r--doc/pci-slot.html187
-rw-r--r--doc/pci.html69
-rw-r--r--doc/platforms-and-cpus.html637
-rw-r--r--doc/power-management.html47
-rw-r--r--doc/process/CONTRIBUTING.html139
-rw-r--r--doc/process/dev-release-process.html101
-rw-r--r--doc/process/stable-skiboot-rules.html107
-rw-r--r--doc/process/versioning.html71
-rw-r--r--doc/release-notes/index.html53
-rw-r--r--doc/release-notes/skiboot-4.0.html51
-rw-r--r--doc/release-notes/skiboot-4.1.1.html104
-rw-r--r--doc/release-notes/skiboot-4.1.html104
-rw-r--r--doc/release-notes/skiboot-5.0.html258
-rw-r--r--doc/release-notes/skiboot-5.1.0-beta1.html690
-rw-r--r--doc/release-notes/skiboot-5.1.0-beta2.html106
-rw-r--r--doc/release-notes/skiboot-5.1.0.html776
-rw-r--r--doc/release-notes/skiboot-5.1.1.html57
-rw-r--r--doc/release-notes/skiboot-5.1.10.html54
-rw-r--r--doc/release-notes/skiboot-5.1.11.html49
-rw-r--r--doc/release-notes/skiboot-5.1.12.html76
-rw-r--r--doc/release-notes/skiboot-5.1.13.html67
-rw-r--r--doc/release-notes/skiboot-5.1.14.html53
-rw-r--r--doc/release-notes/skiboot-5.1.15.html45
-rw-r--r--doc/release-notes/skiboot-5.1.16.html58
-rw-r--r--doc/release-notes/skiboot-5.1.17.html53
-rw-r--r--doc/release-notes/skiboot-5.1.18.html63
-rw-r--r--doc/release-notes/skiboot-5.1.19.html79
-rw-r--r--doc/release-notes/skiboot-5.1.2.html403
-rw-r--r--doc/release-notes/skiboot-5.1.20.html72
-rw-r--r--doc/release-notes/skiboot-5.1.21.html47
-rw-r--r--doc/release-notes/skiboot-5.1.3.html315
-rw-r--r--doc/release-notes/skiboot-5.1.4.html49
-rw-r--r--doc/release-notes/skiboot-5.1.5.html70
-rw-r--r--doc/release-notes/skiboot-5.1.6.html49
-rw-r--r--doc/release-notes/skiboot-5.1.7.html55
-rw-r--r--doc/release-notes/skiboot-5.1.8.html47
-rw-r--r--doc/release-notes/skiboot-5.1.9.html51
-rw-r--r--doc/release-notes/skiboot-5.10-rc1.html630
-rw-r--r--doc/release-notes/skiboot-5.10-rc2.html79
-rw-r--r--doc/release-notes/skiboot-5.10-rc3.html70
-rw-r--r--doc/release-notes/skiboot-5.10-rc4.html72
-rw-r--r--doc/release-notes/skiboot-5.10.1.html50
-rw-r--r--doc/release-notes/skiboot-5.10.2.html47
-rw-r--r--doc/release-notes/skiboot-5.10.3.html61
-rw-r--r--doc/release-notes/skiboot-5.10.4.html53
-rw-r--r--doc/release-notes/skiboot-5.10.5.html65
-rw-r--r--doc/release-notes/skiboot-5.10.6.html57
-rw-r--r--doc/release-notes/skiboot-5.10.html1951
-rw-r--r--doc/release-notes/skiboot-5.11-rc1.html212
-rw-r--r--doc/release-notes/skiboot-5.11.html230
-rw-r--r--doc/release-notes/skiboot-5.2.0-rc1.html694
-rw-r--r--doc/release-notes/skiboot-5.2.0-rc2.html80
-rw-r--r--doc/release-notes/skiboot-5.2.0.html739
-rw-r--r--doc/release-notes/skiboot-5.2.1.html304
-rw-r--r--doc/release-notes/skiboot-5.2.2.html52
-rw-r--r--doc/release-notes/skiboot-5.2.3.html63
-rw-r--r--doc/release-notes/skiboot-5.2.4.html54
-rw-r--r--doc/release-notes/skiboot-5.2.5.html95
-rw-r--r--doc/release-notes/skiboot-5.3.0-rc1.html820
-rw-r--r--doc/release-notes/skiboot-5.3.0-rc2.html69
-rw-r--r--doc/release-notes/skiboot-5.3.0.html45
-rw-r--r--doc/release-notes/skiboot-5.3.1.html75
-rw-r--r--doc/release-notes/skiboot-5.3.2.html57
-rw-r--r--doc/release-notes/skiboot-5.3.3.html51
-rw-r--r--doc/release-notes/skiboot-5.3.4.html57
-rw-r--r--doc/release-notes/skiboot-5.3.5.html51
-rw-r--r--doc/release-notes/skiboot-5.3.6.html49
-rw-r--r--doc/release-notes/skiboot-5.3.7.html87
-rw-r--r--doc/release-notes/skiboot-5.4.0-rc1.html1155
-rw-r--r--doc/release-notes/skiboot-5.4.0-rc2.html405
-rw-r--r--doc/release-notes/skiboot-5.4.0-rc3.html71
-rw-r--r--doc/release-notes/skiboot-5.4.0-rc4.html63
-rw-r--r--doc/release-notes/skiboot-5.4.0.html1303
-rw-r--r--doc/release-notes/skiboot-5.4.1.html67
-rw-r--r--doc/release-notes/skiboot-5.4.10.html59
-rw-r--r--doc/release-notes/skiboot-5.4.11.html58
-rw-r--r--doc/release-notes/skiboot-5.4.12.html47
-rw-r--r--doc/release-notes/skiboot-5.4.2.html49
-rw-r--r--doc/release-notes/skiboot-5.4.3.html59
-rw-r--r--doc/release-notes/skiboot-5.4.4.html54
-rw-r--r--doc/release-notes/skiboot-5.4.5.html51
-rw-r--r--doc/release-notes/skiboot-5.4.6.html64
-rw-r--r--doc/release-notes/skiboot-5.4.7.html49
-rw-r--r--doc/release-notes/skiboot-5.4.8.html145
-rw-r--r--doc/release-notes/skiboot-5.4.9.html47
-rw-r--r--doc/release-notes/skiboot-5.5.0-rc1.html1420
-rw-r--r--doc/release-notes/skiboot-5.5.0-rc2.html92
-rw-r--r--doc/release-notes/skiboot-5.5.0-rc3.html67
-rw-r--r--doc/release-notes/skiboot-5.5.0.html1107
-rw-r--r--doc/release-notes/skiboot-5.6.0-rc1.html727
-rw-r--r--doc/release-notes/skiboot-5.6.0-rc2.html55
-rw-r--r--doc/release-notes/skiboot-5.6.0.html49
-rw-r--r--doc/release-notes/skiboot-5.7-rc1.html338
-rw-r--r--doc/release-notes/skiboot-5.7-rc2.html120
-rw-r--r--doc/release-notes/skiboot-5.7.html1264
-rw-r--r--doc/release-notes/skiboot-5.8-rc1.html237
-rw-r--r--doc/release-notes/skiboot-5.8.html782
-rw-r--r--doc/release-notes/skiboot-5.9-rc1.html261
-rw-r--r--doc/release-notes/skiboot-5.9-rc2.html184
-rw-r--r--doc/release-notes/skiboot-5.9-rc3.html54
-rw-r--r--doc/release-notes/skiboot-5.9-rc4.html61
-rw-r--r--doc/release-notes/skiboot-5.9-rc5.html61
-rw-r--r--doc/release-notes/skiboot-5.9.1.html53
-rw-r--r--doc/release-notes/skiboot-5.9.2.html77
-rw-r--r--doc/release-notes/skiboot-5.9.3.html47
-rw-r--r--doc/release-notes/skiboot-5.9.4.html52
-rw-r--r--doc/release-notes/skiboot-5.9.5.html76
-rw-r--r--doc/release-notes/skiboot-5.9.6.html52
-rw-r--r--doc/release-notes/skiboot-5.9.7.html49
-rw-r--r--doc/release-notes/skiboot-5.9.8.html47
-rw-r--r--doc/release-notes/skiboot-5.9.9.html52
-rw-r--r--doc/release-notes/skiboot-5.9.html1478
-rw-r--r--doc/release-notes/skiboot-6.0-rc1.html289
-rw-r--r--doc/release-notes/skiboot-6.0-rc2.html81
-rw-r--r--doc/release-notes/skiboot-6.0.1.html51
-rw-r--r--doc/release-notes/skiboot-6.0.10.html70
-rw-r--r--doc/release-notes/skiboot-6.0.11.html69
-rw-r--r--doc/release-notes/skiboot-6.0.12.html50
-rw-r--r--doc/release-notes/skiboot-6.0.13.html47
-rw-r--r--doc/release-notes/skiboot-6.0.14.html51
-rw-r--r--doc/release-notes/skiboot-6.0.15.html51
-rw-r--r--doc/release-notes/skiboot-6.0.16.html53
-rw-r--r--doc/release-notes/skiboot-6.0.17.html69
-rw-r--r--doc/release-notes/skiboot-6.0.18.html93
-rw-r--r--doc/release-notes/skiboot-6.0.19.html49
-rw-r--r--doc/release-notes/skiboot-6.0.2.html47
-rw-r--r--doc/release-notes/skiboot-6.0.20.html74
-rw-r--r--doc/release-notes/skiboot-6.0.21.html47
-rw-r--r--doc/release-notes/skiboot-6.0.22.html53
-rw-r--r--doc/release-notes/skiboot-6.0.23.html59
-rw-r--r--doc/release-notes/skiboot-6.0.24.html120
-rw-r--r--doc/release-notes/skiboot-6.0.3.html65
-rw-r--r--doc/release-notes/skiboot-6.0.4.html55
-rw-r--r--doc/release-notes/skiboot-6.0.5.html69
-rw-r--r--doc/release-notes/skiboot-6.0.6.html51
-rw-r--r--doc/release-notes/skiboot-6.0.7.html47
-rw-r--r--doc/release-notes/skiboot-6.0.8.html58
-rw-r--r--doc/release-notes/skiboot-6.0.9.html64
-rw-r--r--doc/release-notes/skiboot-6.0.html328
-rw-r--r--doc/release-notes/skiboot-6.1-rc1.html151
-rw-r--r--doc/release-notes/skiboot-6.1.html190
-rw-r--r--doc/release-notes/skiboot-6.2-rc1.html248
-rw-r--r--doc/release-notes/skiboot-6.2-rc2.html73
-rw-r--r--doc/release-notes/skiboot-6.2.1.html65
-rw-r--r--doc/release-notes/skiboot-6.2.2.html106
-rw-r--r--doc/release-notes/skiboot-6.2.3.html51
-rw-r--r--doc/release-notes/skiboot-6.2.4.html80
-rw-r--r--doc/release-notes/skiboot-6.2.html1247
-rw-r--r--doc/release-notes/skiboot-6.3-rc1.html247
-rw-r--r--doc/release-notes/skiboot-6.3-rc2.html59
-rw-r--r--doc/release-notes/skiboot-6.3-rc3.html106
-rw-r--r--doc/release-notes/skiboot-6.3.1.html51
-rw-r--r--doc/release-notes/skiboot-6.3.2.html65
-rw-r--r--doc/release-notes/skiboot-6.3.3.html58
-rw-r--r--doc/release-notes/skiboot-6.3.4.html59
-rw-r--r--doc/release-notes/skiboot-6.3.5.html49
-rw-r--r--doc/release-notes/skiboot-6.3.html319
-rw-r--r--doc/release-notes/skiboot-6.4-rc1.html245
-rw-r--r--doc/release-notes/skiboot-6.4.html251
-rw-r--r--doc/release-notes/skiboot-6.5.1.html59
-rw-r--r--doc/release-notes/skiboot-6.5.2.html59
-rw-r--r--doc/release-notes/skiboot-6.5.3.html55
-rw-r--r--doc/release-notes/skiboot-6.5.4.html47
-rw-r--r--doc/release-notes/skiboot-6.5.html45
-rw-r--r--doc/release-notes/skiboot-6.6.1.html63
-rw-r--r--doc/release-notes/skiboot-6.6.2.html49
-rw-r--r--doc/release-notes/skiboot-6.6.3.html53
-rw-r--r--doc/release-notes/skiboot-6.6.4.html59
-rw-r--r--doc/release-notes/skiboot-6.6.6.html117
-rw-r--r--doc/release-notes/skiboot-6.6.html55
-rw-r--r--doc/release-notes/skiboot-6.7.1.html126
-rw-r--r--doc/release-notes/skiboot-6.7.2.html124
-rw-r--r--doc/release-notes/skiboot-6.7.3.html124
-rw-r--r--doc/release-notes/skiboot-6.7.html71
-rw-r--r--doc/release-notes/skiboot-6.8.1.html125
-rw-r--r--doc/release-notes/skiboot-6.8.html115
-rw-r--r--doc/release-notes/skiboot-7.0.html130
-rw-r--r--doc/search.html64
-rw-r--r--doc/searchindex.js2
-rw-r--r--doc/secvar/driver-api.html162
-rw-r--r--doc/secvar/edk2.html45
-rw-r--r--doc/secvar/secboot_tpm.html129
-rw-r--r--doc/stb.html89
-rw-r--r--doc/vas.html48
-rw-r--r--doc/xive.html397
-rw-r--r--doc/xscom-node-bindings.html79
1271 files changed, 69187 insertions, 62183 deletions
diff --git a/coverage-report/ccan/array_size/test/index-sort-b.html b/coverage-report/ccan/array_size/test/index-sort-b.html
index 719cd7c..9cc8a68 100644
--- a/coverage-report/ccan/array_size/test/index-sort-b.html
+++ b/coverage-report/ccan/array_size/test/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/array_size/test/index-sort-f.html b/coverage-report/ccan/array_size/test/index-sort-f.html
index 007ceb9..671af1b 100644
--- a/coverage-report/ccan/array_size/test/index-sort-f.html
+++ b/coverage-report/ccan/array_size/test/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/array_size/test/index-sort-l.html b/coverage-report/ccan/array_size/test/index-sort-l.html
index ee9281b..4f628a0 100644
--- a/coverage-report/ccan/array_size/test/index-sort-l.html
+++ b/coverage-report/ccan/array_size/test/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/array_size/test/index.html b/coverage-report/ccan/array_size/test/index.html
index 53f333d..99286e7 100644
--- a/coverage-report/ccan/array_size/test/index.html
+++ b/coverage-report/ccan/array_size/test/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/array_size/test/run.c.func-sort-c.html b/coverage-report/ccan/array_size/test/run.c.func-sort-c.html
index 7f653e0..630e7d9 100644
--- a/coverage-report/ccan/array_size/test/run.c.func-sort-c.html
+++ b/coverage-report/ccan/array_size/test/run.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/array_size/test/run.c.func.html b/coverage-report/ccan/array_size/test/run.c.func.html
index 6246f7c..bf6a651 100644
--- a/coverage-report/ccan/array_size/test/run.c.func.html
+++ b/coverage-report/ccan/array_size/test/run.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/array_size/test/run.c.gcov.html b/coverage-report/ccan/array_size/test/run.c.gcov.html
index 8fd783a..8fe29c9 100644
--- a/coverage-report/ccan/array_size/test/run.c.gcov.html
+++ b/coverage-report/ccan/array_size/test/run.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -87,24 +87,21 @@
<a name="16"><span class="lineNum"> 16 </span> : : static int array3_size = ARRAY_SIZE(array3);</a>
<a name="17"><span class="lineNum"> 17 </span> : : static int array4_size = ARRAY_SIZE(array4);</a>
<a name="18"><span class="lineNum"> 18 </span> : : </a>
-<a name="19"><span class="lineNum"> 19 </span> :<span class="lineCov"> 2 : int __attribute__((const)) main(int argc, char *argv[])</span></a>
+<a name="19"><span class="lineNum"> 19 </span> :<span class="lineCov"> 2 : int main(void)</span></a>
<a name="20"><span class="lineNum"> 20 </span> : : {</a>
-<a name="21"><span class="lineNum"> 21 </span> : : (void)argc;</a>
-<a name="22"><span class="lineNum"> 22 </span> : : (void)argv;</a>
-<a name="23"><span class="lineNum"> 23 </span> : : </a>
-<a name="24"><span class="lineNum"> 24 </span> : : plan_tests(8);</a>
-<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 2 : ok1(array1_size == 1);</span></a>
-<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 2 : ok1(array2_size == 2);</span></a>
-<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 2 : ok1(array3_size == 3);</span></a>
-<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 2 : ok1(array4_size == 4);</span></a>
-<a name="29"><span class="lineNum"> 29 </span> : : </a>
-<a name="30"><span class="lineNum"> 30 </span> : : ok1(ARRAY_SIZE(array1) == 1);</a>
-<a name="31"><span class="lineNum"> 31 </span> : : ok1(ARRAY_SIZE(array2) == 2);</a>
-<a name="32"><span class="lineNum"> 32 </span> : : ok1(ARRAY_SIZE(array3) == 3);</a>
-<a name="33"><span class="lineNum"> 33 </span> : : ok1(ARRAY_SIZE(array4) == 4);</a>
-<a name="34"><span class="lineNum"> 34 </span> : : </a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 2 : return exit_status();</span></a>
-<a name="36"><span class="lineNum"> 36 </span> : : }</a>
+<a name="21"><span class="lineNum"> 21 </span> : : plan_tests(8);</a>
+<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 2 : ok1(array1_size == 1);</span></a>
+<a name="23"><span class="lineNum"> 23 </span> :<span class="lineCov"> 2 : ok1(array2_size == 2);</span></a>
+<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 2 : ok1(array3_size == 3);</span></a>
+<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 2 : ok1(array4_size == 4);</span></a>
+<a name="26"><span class="lineNum"> 26 </span> : : </a>
+<a name="27"><span class="lineNum"> 27 </span> : : ok1(ARRAY_SIZE(array1) == 1);</a>
+<a name="28"><span class="lineNum"> 28 </span> : : ok1(ARRAY_SIZE(array2) == 2);</a>
+<a name="29"><span class="lineNum"> 29 </span> : : ok1(ARRAY_SIZE(array3) == 3);</a>
+<a name="30"><span class="lineNum"> 30 </span> : : ok1(ARRAY_SIZE(array4) == 4);</a>
+<a name="31"><span class="lineNum"> 31 </span> : : </a>
+<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 2 : return exit_status();</span></a>
+<a name="33"><span class="lineNum"> 33 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/ccan/build_assert/test/index-sort-b.html b/coverage-report/ccan/build_assert/test/index-sort-b.html
index f5c17a0..01e34ac 100644
--- a/coverage-report/ccan/build_assert/test/index-sort-b.html
+++ b/coverage-report/ccan/build_assert/test/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/build_assert/test/index-sort-f.html b/coverage-report/ccan/build_assert/test/index-sort-f.html
index e4fbb8d..21ec766 100644
--- a/coverage-report/ccan/build_assert/test/index-sort-f.html
+++ b/coverage-report/ccan/build_assert/test/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/build_assert/test/index-sort-l.html b/coverage-report/ccan/build_assert/test/index-sort-l.html
index 4419b80..65d98c4 100644
--- a/coverage-report/ccan/build_assert/test/index-sort-l.html
+++ b/coverage-report/ccan/build_assert/test/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/build_assert/test/index.html b/coverage-report/ccan/build_assert/test/index.html
index 97ae82e..dbf424a 100644
--- a/coverage-report/ccan/build_assert/test/index.html
+++ b/coverage-report/ccan/build_assert/test/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/build_assert/test/run-BUILD_ASSERT_OR_ZERO.c.func-sort-c.html b/coverage-report/ccan/build_assert/test/run-BUILD_ASSERT_OR_ZERO.c.func-sort-c.html
index 5127fff..f978702 100644
--- a/coverage-report/ccan/build_assert/test/run-BUILD_ASSERT_OR_ZERO.c.func-sort-c.html
+++ b/coverage-report/ccan/build_assert/test/run-BUILD_ASSERT_OR_ZERO.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/build_assert/test/run-BUILD_ASSERT_OR_ZERO.c.func.html b/coverage-report/ccan/build_assert/test/run-BUILD_ASSERT_OR_ZERO.c.func.html
index c499b2d..f55fc6f 100644
--- a/coverage-report/ccan/build_assert/test/run-BUILD_ASSERT_OR_ZERO.c.func.html
+++ b/coverage-report/ccan/build_assert/test/run-BUILD_ASSERT_OR_ZERO.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/build_assert/test/run-BUILD_ASSERT_OR_ZERO.c.gcov.html b/coverage-report/ccan/build_assert/test/run-BUILD_ASSERT_OR_ZERO.c.gcov.html
index f6c7245..35847ab 100644
--- a/coverage-report/ccan/build_assert/test/run-BUILD_ASSERT_OR_ZERO.c.gcov.html
+++ b/coverage-report/ccan/build_assert/test/run-BUILD_ASSERT_OR_ZERO.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -72,15 +72,12 @@
<a name="1"><span class="lineNum"> 1 </span> : : #include &lt;ccan/build_assert/build_assert.h&gt;</a>
<a name="2"><span class="lineNum"> 2 </span> : : #include &lt;ccan/tap/tap.h&gt;</a>
<a name="3"><span class="lineNum"> 3 </span> : : </a>
-<a name="4"><span class="lineNum"> 4 </span> :<span class="lineCov"> 2 : int __attribute__((const)) main(int argc, char *argv[])</span></a>
+<a name="4"><span class="lineNum"> 4 </span> :<span class="lineCov"> 2 : int main(void)</span></a>
<a name="5"><span class="lineNum"> 5 </span> : : {</a>
-<a name="6"><span class="lineNum"> 6 </span> : : (void)argc;</a>
-<a name="7"><span class="lineNum"> 7 </span> : : (void)argv;</a>
-<a name="8"><span class="lineNum"> 8 </span> : : </a>
-<a name="9"><span class="lineNum"> 9 </span> : : plan_tests(1);</a>
-<a name="10"><span class="lineNum"> 10 </span> : : ok1(BUILD_ASSERT_OR_ZERO(1 == 1) == 0);</a>
-<a name="11"><span class="lineNum"> 11 </span> :<span class="lineCov"> 2 : return exit_status();</span></a>
-<a name="12"><span class="lineNum"> 12 </span> : : }</a>
+<a name="6"><span class="lineNum"> 6 </span> : : plan_tests(1);</a>
+<a name="7"><span class="lineNum"> 7 </span> : : ok1(BUILD_ASSERT_OR_ZERO(1 == 1) == 0);</a>
+<a name="8"><span class="lineNum"> 8 </span> :<span class="lineCov"> 2 : return exit_status();</span></a>
+<a name="9"><span class="lineNum"> 9 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/ccan/check_type/test/index-sort-b.html b/coverage-report/ccan/check_type/test/index-sort-b.html
index b90b38f..3230cc2 100644
--- a/coverage-report/ccan/check_type/test/index-sort-b.html
+++ b/coverage-report/ccan/check_type/test/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/check_type/test/index-sort-f.html b/coverage-report/ccan/check_type/test/index-sort-f.html
index 9898adb..fc27229 100644
--- a/coverage-report/ccan/check_type/test/index-sort-f.html
+++ b/coverage-report/ccan/check_type/test/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/check_type/test/index-sort-l.html b/coverage-report/ccan/check_type/test/index-sort-l.html
index 9d9ae65..2e41c47 100644
--- a/coverage-report/ccan/check_type/test/index-sort-l.html
+++ b/coverage-report/ccan/check_type/test/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/check_type/test/index.html b/coverage-report/ccan/check_type/test/index.html
index 0c13451..cc318d2 100644
--- a/coverage-report/ccan/check_type/test/index.html
+++ b/coverage-report/ccan/check_type/test/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/check_type/test/run.c.func-sort-c.html b/coverage-report/ccan/check_type/test/run.c.func-sort-c.html
index 2091337..3e871c0 100644
--- a/coverage-report/ccan/check_type/test/run.c.func-sort-c.html
+++ b/coverage-report/ccan/check_type/test/run.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/check_type/test/run.c.func.html b/coverage-report/ccan/check_type/test/run.c.func.html
index 70c531f..f7bfc56 100644
--- a/coverage-report/ccan/check_type/test/run.c.func.html
+++ b/coverage-report/ccan/check_type/test/run.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/check_type/test/run.c.gcov.html b/coverage-report/ccan/check_type/test/run.c.gcov.html
index 490d914..6e5fb21 100644
--- a/coverage-report/ccan/check_type/test/run.c.gcov.html
+++ b/coverage-report/ccan/check_type/test/run.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -72,28 +72,26 @@
<a name="1"><span class="lineNum"> 1 </span> : : #include &lt;ccan/check_type/check_type.h&gt;</a>
<a name="2"><span class="lineNum"> 2 </span> : : #include &lt;ccan/tap/tap.h&gt;</a>
<a name="3"><span class="lineNum"> 3 </span> : : </a>
-<a name="4"><span class="lineNum"> 4 </span> :<span class="lineCov"> 2 : int __attribute__((const)) main(int argc, char *argv[])</span></a>
+<a name="4"><span class="lineNum"> 4 </span> :<span class="lineCov"> 2 : int main(int argc, char *argv[])</span></a>
<a name="5"><span class="lineNum"> 5 </span> : : {</a>
<a name="6"><span class="lineNum"> 6 </span> :<span class="lineCov"> 2 : int x = 0, y = 0;</span></a>
<a name="7"><span class="lineNum"> 7 </span> : : </a>
-<a name="8"><span class="lineNum"> 8 </span> : : (void)argc;</a>
-<a name="9"><span class="lineNum"> 9 </span> : : (void)argv;</a>
+<a name="8"><span class="lineNum"> 8 </span> : : (void)argv;</a>
+<a name="9"><span class="lineNum"> 9 </span> : : plan_tests(9);</a>
<a name="10"><span class="lineNum"> 10 </span> : : </a>
-<a name="11"><span class="lineNum"> 11 </span> : : plan_tests(9);</a>
-<a name="12"><span class="lineNum"> 12 </span> : : </a>
-<a name="13"><span class="lineNum"> 13 </span> : : ok1(check_type(argc, int) == 0);</a>
-<a name="14"><span class="lineNum"> 14 </span> : : ok1(check_type(&amp;argc, int *) == 0);</a>
-<a name="15"><span class="lineNum"> 15 </span> : : ok1(check_types_match(argc, argc) == 0);</a>
-<a name="16"><span class="lineNum"> 16 </span> : : ok1(check_types_match(argc, x) == 0);</a>
-<a name="17"><span class="lineNum"> 17 </span> : : ok1(check_types_match(&amp;argc, &amp;x) == 0);</a>
-<a name="18"><span class="lineNum"> 18 </span> : : </a>
-<a name="19"><span class="lineNum"> 19 </span> : : ok1(check_type(x++, int) == 0);</a>
-<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 2 : ok(x == 0, &quot;check_type does not evaluate expression&quot;);</span></a>
-<a name="21"><span class="lineNum"> 21 </span> : : ok1(check_types_match(x++, y++) == 0);</a>
-<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 2 : ok(x == 0 &amp;&amp; y == 0, &quot;check_types_match does not evaluate expressions&quot;);</span></a>
-<a name="23"><span class="lineNum"> 23 </span> : : </a>
-<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 2 : return exit_status();</span></a>
-<a name="25"><span class="lineNum"> 25 </span> : : }</a>
+<a name="11"><span class="lineNum"> 11 </span> : : ok1(check_type(argc, int) == 0);</a>
+<a name="12"><span class="lineNum"> 12 </span> : : ok1(check_type(&amp;argc, int *) == 0);</a>
+<a name="13"><span class="lineNum"> 13 </span> : : ok1(check_types_match(argc, argc) == 0);</a>
+<a name="14"><span class="lineNum"> 14 </span> : : ok1(check_types_match(argc, x) == 0);</a>
+<a name="15"><span class="lineNum"> 15 </span> : : ok1(check_types_match(&amp;argc, &amp;x) == 0);</a>
+<a name="16"><span class="lineNum"> 16 </span> : : </a>
+<a name="17"><span class="lineNum"> 17 </span> : : ok1(check_type(x++, int) == 0);</a>
+<a name="18"><span class="lineNum"> 18 </span> :<span class="lineCov"> 2 : ok(x == 0, &quot;check_type does not evaluate expression&quot;);</span></a>
+<a name="19"><span class="lineNum"> 19 </span> : : ok1(check_types_match(x++, y++) == 0);</a>
+<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 2 : ok(x == 0 &amp;&amp; y == 0, &quot;check_types_match does not evaluate expressions&quot;);</span></a>
+<a name="21"><span class="lineNum"> 21 </span> : : </a>
+<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 2 : return exit_status();</span></a>
+<a name="23"><span class="lineNum"> 23 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/ccan/container_of/container_of.h.func-sort-c.html b/coverage-report/ccan/container_of/container_of.h.func-sort-c.html
new file mode 100644
index 0000000..13fe41b
--- /dev/null
+++ b/coverage-report/ccan/container_of/container_of.h.func-sort-c.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - ccan/container_of/container_of.h - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../index.html">top level</a> - <a href="index.html">ccan/container_of</a> - container_of.h<span style="font-size: 80%;"> (<a href="container_of.h.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="container_of.h.func.html"><img src="../../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="container_of.h.gcov.html#63">container_of_or_null_</a></td>
+ <td class="coverFnHi">8</td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/ccan/container_of/container_of.h.func.html b/coverage-report/ccan/container_of/container_of.h.func.html
new file mode 100644
index 0000000..676ac9b
--- /dev/null
+++ b/coverage-report/ccan/container_of/container_of.h.func.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - ccan/container_of/container_of.h - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../index.html">top level</a> - <a href="index.html">ccan/container_of</a> - container_of.h<span style="font-size: 80%;"> (<a href="container_of.h.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="container_of.h.func-sort-c.html"><img src="../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="container_of.h.gcov.html#63">container_of_or_null_</a></td>
+ <td class="coverFnHi">8</td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/ccan/container_of/container_of.h.gcov.html b/coverage-report/ccan/container_of/container_of.h.gcov.html
new file mode 100644
index 0000000..fc74a34
--- /dev/null
+++ b/coverage-report/ccan/container_of/container_of.h.gcov.html
@@ -0,0 +1,230 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - ccan/container_of/container_of.h</title>
+ <link rel="stylesheet" type="text/css" href="../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../index.html">top level</a> - <a href="index.html">ccan/container_of</a> - container_of.h<span style="font-size: 80%;"> (source / <a href="container_of.h.func-sort-c.html">functions</a>)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <table cellpadding=0 cellspacing=0 border=0>
+ <tr>
+ <td><br></td>
+ </tr>
+ <tr>
+ <td>
+<pre class="sourceHeading"> Branch data Line data Source code</pre>
+<pre class="source">
+<a name="1"><span class="lineNum"> 1 </span> : : /* CC0 (Public domain) - see LICENSE file for details */</a>
+<a name="2"><span class="lineNum"> 2 </span> : : #ifndef CCAN_CONTAINER_OF_H</a>
+<a name="3"><span class="lineNum"> 3 </span> : : #define CCAN_CONTAINER_OF_H</a>
+<a name="4"><span class="lineNum"> 4 </span> : : #include &lt;stddef.h&gt;</a>
+<a name="5"><span class="lineNum"> 5 </span> : : </a>
+<a name="6"><span class="lineNum"> 6 </span> : : #include &quot;config.h&quot;</a>
+<a name="7"><span class="lineNum"> 7 </span> : : #include &lt;ccan/check_type/check_type.h&gt;</a>
+<a name="8"><span class="lineNum"> 8 </span> : : </a>
+<a name="9"><span class="lineNum"> 9 </span> : : /**</a>
+<a name="10"><span class="lineNum"> 10 </span> : : * container_of - get pointer to enclosing structure</a>
+<a name="11"><span class="lineNum"> 11 </span> : : * @member_ptr: pointer to the structure member</a>
+<a name="12"><span class="lineNum"> 12 </span> : : * @containing_type: the type this member is within</a>
+<a name="13"><span class="lineNum"> 13 </span> : : * @member: the name of this member within the structure.</a>
+<a name="14"><span class="lineNum"> 14 </span> : : *</a>
+<a name="15"><span class="lineNum"> 15 </span> : : * Given a pointer to a member of a structure, this macro does pointer</a>
+<a name="16"><span class="lineNum"> 16 </span> : : * subtraction to return the pointer to the enclosing type.</a>
+<a name="17"><span class="lineNum"> 17 </span> : : *</a>
+<a name="18"><span class="lineNum"> 18 </span> : : * Example:</a>
+<a name="19"><span class="lineNum"> 19 </span> : : * struct foo {</a>
+<a name="20"><span class="lineNum"> 20 </span> : : * int fielda, fieldb;</a>
+<a name="21"><span class="lineNum"> 21 </span> : : * // ...</a>
+<a name="22"><span class="lineNum"> 22 </span> : : * };</a>
+<a name="23"><span class="lineNum"> 23 </span> : : * struct info {</a>
+<a name="24"><span class="lineNum"> 24 </span> : : * int some_other_field;</a>
+<a name="25"><span class="lineNum"> 25 </span> : : * struct foo my_foo;</a>
+<a name="26"><span class="lineNum"> 26 </span> : : * };</a>
+<a name="27"><span class="lineNum"> 27 </span> : : *</a>
+<a name="28"><span class="lineNum"> 28 </span> : : * static struct info *foo_to_info(struct foo *foo)</a>
+<a name="29"><span class="lineNum"> 29 </span> : : * {</a>
+<a name="30"><span class="lineNum"> 30 </span> : : * return container_of(foo, struct info, my_foo);</a>
+<a name="31"><span class="lineNum"> 31 </span> : : * }</a>
+<a name="32"><span class="lineNum"> 32 </span> : : */</a>
+<a name="33"><span class="lineNum"> 33 </span> : : #define container_of(member_ptr, containing_type, member) \</a>
+<a name="34"><span class="lineNum"> 34 </span> : : ((containing_type *) \</a>
+<a name="35"><span class="lineNum"> 35 </span> : : ((char *)(member_ptr) \</a>
+<a name="36"><span class="lineNum"> 36 </span> : : - container_off(containing_type, member)) \</a>
+<a name="37"><span class="lineNum"> 37 </span> : : + check_types_match(*(member_ptr), ((containing_type *)0)-&gt;member))</a>
+<a name="38"><span class="lineNum"> 38 </span> : : </a>
+<a name="39"><span class="lineNum"> 39 </span> : : </a>
+<a name="40"><span class="lineNum"> 40 </span> : : /**</a>
+<a name="41"><span class="lineNum"> 41 </span> : : * container_of_or_null - get pointer to enclosing structure, or NULL</a>
+<a name="42"><span class="lineNum"> 42 </span> : : * @member_ptr: pointer to the structure member</a>
+<a name="43"><span class="lineNum"> 43 </span> : : * @containing_type: the type this member is within</a>
+<a name="44"><span class="lineNum"> 44 </span> : : * @member: the name of this member within the structure.</a>
+<a name="45"><span class="lineNum"> 45 </span> : : *</a>
+<a name="46"><span class="lineNum"> 46 </span> : : * Given a pointer to a member of a structure, this macro does pointer</a>
+<a name="47"><span class="lineNum"> 47 </span> : : * subtraction to return the pointer to the enclosing type, unless it</a>
+<a name="48"><span class="lineNum"> 48 </span> : : * is given NULL, in which case it also returns NULL.</a>
+<a name="49"><span class="lineNum"> 49 </span> : : *</a>
+<a name="50"><span class="lineNum"> 50 </span> : : * Example:</a>
+<a name="51"><span class="lineNum"> 51 </span> : : * struct foo {</a>
+<a name="52"><span class="lineNum"> 52 </span> : : * int fielda, fieldb;</a>
+<a name="53"><span class="lineNum"> 53 </span> : : * // ...</a>
+<a name="54"><span class="lineNum"> 54 </span> : : * };</a>
+<a name="55"><span class="lineNum"> 55 </span> : : * struct info {</a>
+<a name="56"><span class="lineNum"> 56 </span> : : * int some_other_field;</a>
+<a name="57"><span class="lineNum"> 57 </span> : : * struct foo my_foo;</a>
+<a name="58"><span class="lineNum"> 58 </span> : : * };</a>
+<a name="59"><span class="lineNum"> 59 </span> : : *</a>
+<a name="60"><span class="lineNum"> 60 </span> : : * static struct info *foo_to_info_allowing_null(struct foo *foo)</a>
+<a name="61"><span class="lineNum"> 61 </span> : : * {</a>
+<a name="62"><span class="lineNum"> 62 </span> : : * return container_of_or_null(foo, struct info, my_foo);</a>
+<a name="63"><span class="lineNum"> 63 </span> : : * }</a>
+<a name="64"><span class="lineNum"> 64 </span> : : */</a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 8 : static inline char *container_of_or_null_(void *member_ptr, size_t offset)</span></a>
+<a name="66"><span class="lineNum"> 66 </span> : : {</a>
+<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 8 : return member_ptr ? (char *)member_ptr - offset : NULL;</span></a>
+<a name="68"><span class="lineNum"> 68 </span> : : }</a>
+<a name="69"><span class="lineNum"> 69 </span> : : #define container_of_or_null(member_ptr, containing_type, member) \</a>
+<a name="70"><span class="lineNum"> 70 </span> : : ((containing_type *) \</a>
+<a name="71"><span class="lineNum"> 71 </span> : : container_of_or_null_(member_ptr, \</a>
+<a name="72"><span class="lineNum"> 72 </span> : : container_off(containing_type, member)) \</a>
+<a name="73"><span class="lineNum"> 73 </span> : : + check_types_match(*(member_ptr), ((containing_type *)0)-&gt;member))</a>
+<a name="74"><span class="lineNum"> 74 </span> : : </a>
+<a name="75"><span class="lineNum"> 75 </span> : : /**</a>
+<a name="76"><span class="lineNum"> 76 </span> : : * container_off - get offset to enclosing structure</a>
+<a name="77"><span class="lineNum"> 77 </span> : : * @containing_type: the type this member is within</a>
+<a name="78"><span class="lineNum"> 78 </span> : : * @member: the name of this member within the structure.</a>
+<a name="79"><span class="lineNum"> 79 </span> : : *</a>
+<a name="80"><span class="lineNum"> 80 </span> : : * Given a pointer to a member of a structure, this macro does</a>
+<a name="81"><span class="lineNum"> 81 </span> : : * typechecking and figures out the offset to the enclosing type.</a>
+<a name="82"><span class="lineNum"> 82 </span> : : *</a>
+<a name="83"><span class="lineNum"> 83 </span> : : * Example:</a>
+<a name="84"><span class="lineNum"> 84 </span> : : * struct foo {</a>
+<a name="85"><span class="lineNum"> 85 </span> : : * int fielda, fieldb;</a>
+<a name="86"><span class="lineNum"> 86 </span> : : * // ...</a>
+<a name="87"><span class="lineNum"> 87 </span> : : * };</a>
+<a name="88"><span class="lineNum"> 88 </span> : : * struct info {</a>
+<a name="89"><span class="lineNum"> 89 </span> : : * int some_other_field;</a>
+<a name="90"><span class="lineNum"> 90 </span> : : * struct foo my_foo;</a>
+<a name="91"><span class="lineNum"> 91 </span> : : * };</a>
+<a name="92"><span class="lineNum"> 92 </span> : : *</a>
+<a name="93"><span class="lineNum"> 93 </span> : : * static struct info *foo_to_info(struct foo *foo)</a>
+<a name="94"><span class="lineNum"> 94 </span> : : * {</a>
+<a name="95"><span class="lineNum"> 95 </span> : : * size_t off = container_off(struct info, my_foo);</a>
+<a name="96"><span class="lineNum"> 96 </span> : : * return (void *)((char *)foo - off);</a>
+<a name="97"><span class="lineNum"> 97 </span> : : * }</a>
+<a name="98"><span class="lineNum"> 98 </span> : : */</a>
+<a name="99"><span class="lineNum"> 99 </span> : : #define container_off(containing_type, member) \</a>
+<a name="100"><span class="lineNum"> 100 </span> : : offsetof(containing_type, member)</a>
+<a name="101"><span class="lineNum"> 101 </span> : : </a>
+<a name="102"><span class="lineNum"> 102 </span> : : /**</a>
+<a name="103"><span class="lineNum"> 103 </span> : : * container_of_var - get pointer to enclosing structure using a variable</a>
+<a name="104"><span class="lineNum"> 104 </span> : : * @member_ptr: pointer to the structure member</a>
+<a name="105"><span class="lineNum"> 105 </span> : : * @container_var: a pointer of same type as this member's container</a>
+<a name="106"><span class="lineNum"> 106 </span> : : * @member: the name of this member within the structure.</a>
+<a name="107"><span class="lineNum"> 107 </span> : : *</a>
+<a name="108"><span class="lineNum"> 108 </span> : : * Given a pointer to a member of a structure, this macro does pointer</a>
+<a name="109"><span class="lineNum"> 109 </span> : : * subtraction to return the pointer to the enclosing type.</a>
+<a name="110"><span class="lineNum"> 110 </span> : : *</a>
+<a name="111"><span class="lineNum"> 111 </span> : : * Example:</a>
+<a name="112"><span class="lineNum"> 112 </span> : : * static struct info *foo_to_i(struct foo *foo)</a>
+<a name="113"><span class="lineNum"> 113 </span> : : * {</a>
+<a name="114"><span class="lineNum"> 114 </span> : : * struct info *i = container_of_var(foo, i, my_foo);</a>
+<a name="115"><span class="lineNum"> 115 </span> : : * return i;</a>
+<a name="116"><span class="lineNum"> 116 </span> : : * }</a>
+<a name="117"><span class="lineNum"> 117 </span> : : */</a>
+<a name="118"><span class="lineNum"> 118 </span> : : #if HAVE_TYPEOF</a>
+<a name="119"><span class="lineNum"> 119 </span> : : #define container_of_var(member_ptr, container_var, member) \</a>
+<a name="120"><span class="lineNum"> 120 </span> : : container_of(member_ptr, typeof(*container_var), member)</a>
+<a name="121"><span class="lineNum"> 121 </span> : : #else</a>
+<a name="122"><span class="lineNum"> 122 </span> : : #define container_of_var(member_ptr, container_var, member) \</a>
+<a name="123"><span class="lineNum"> 123 </span> : : ((void *)((char *)(member_ptr) - \</a>
+<a name="124"><span class="lineNum"> 124 </span> : : container_off_var(container_var, member)))</a>
+<a name="125"><span class="lineNum"> 125 </span> : : #endif</a>
+<a name="126"><span class="lineNum"> 126 </span> : : </a>
+<a name="127"><span class="lineNum"> 127 </span> : : /**</a>
+<a name="128"><span class="lineNum"> 128 </span> : : * container_off_var - get offset of a field in enclosing structure</a>
+<a name="129"><span class="lineNum"> 129 </span> : : * @container_var: a pointer to a container structure</a>
+<a name="130"><span class="lineNum"> 130 </span> : : * @member: the name of a member within the structure.</a>
+<a name="131"><span class="lineNum"> 131 </span> : : *</a>
+<a name="132"><span class="lineNum"> 132 </span> : : * Given (any) pointer to a structure and a its member name, this</a>
+<a name="133"><span class="lineNum"> 133 </span> : : * macro does pointer subtraction to return offset of member in a</a>
+<a name="134"><span class="lineNum"> 134 </span> : : * structure memory layout.</a>
+<a name="135"><span class="lineNum"> 135 </span> : : *</a>
+<a name="136"><span class="lineNum"> 136 </span> : : */</a>
+<a name="137"><span class="lineNum"> 137 </span> : : #if HAVE_TYPEOF</a>
+<a name="138"><span class="lineNum"> 138 </span> : : #define container_off_var(var, member) \</a>
+<a name="139"><span class="lineNum"> 139 </span> : : container_off(typeof(*var), member)</a>
+<a name="140"><span class="lineNum"> 140 </span> : : #else</a>
+<a name="141"><span class="lineNum"> 141 </span> : : #define container_off_var(var, member) \</a>
+<a name="142"><span class="lineNum"> 142 </span> : : ((const char *)&amp;(var)-&gt;member - (const char *)(var))</a>
+<a name="143"><span class="lineNum"> 143 </span> : : #endif</a>
+<a name="144"><span class="lineNum"> 144 </span> : : </a>
+<a name="145"><span class="lineNum"> 145 </span> : : #endif /* CCAN_CONTAINER_OF_H */</a>
+</pre>
+ </td>
+ </tr>
+ </table>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/ccan/container_of/index-sort-b.html b/coverage-report/ccan/container_of/index-sort-b.html
new file mode 100644
index 0000000..b446c6c
--- /dev/null
+++ b/coverage-report/ccan/container_of/index-sort-b.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - ccan/container_of</title>
+ <link rel="stylesheet" type="text/css" href="../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../index.html">top level</a> - ccan/container_of</td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="80%" cellpadding=1 cellspacing=1 border=0>
+
+ <tr>
+ <td width="44%"><br></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ </tr>
+
+ <tr>
+ <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
+ <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="container_of.h.gcov.html">container_of.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ </table>
+ </center>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/ccan/container_of/index-sort-f.html b/coverage-report/ccan/container_of/index-sort-f.html
new file mode 100644
index 0000000..2796710
--- /dev/null
+++ b/coverage-report/ccan/container_of/index-sort-f.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - ccan/container_of</title>
+ <link rel="stylesheet" type="text/css" href="../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../index.html">top level</a> - ccan/container_of</td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="80%" cellpadding=1 cellspacing=1 border=0>
+
+ <tr>
+ <td width="44%"><br></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ </tr>
+
+ <tr>
+ <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
+ <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td>
+ <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="container_of.h.gcov.html">container_of.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ </table>
+ </center>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/ccan/container_of/index-sort-l.html b/coverage-report/ccan/container_of/index-sort-l.html
new file mode 100644
index 0000000..076a8e7
--- /dev/null
+++ b/coverage-report/ccan/container_of/index-sort-l.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - ccan/container_of</title>
+ <link rel="stylesheet" type="text/css" href="../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../index.html">top level</a> - ccan/container_of</td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="80%" cellpadding=1 cellspacing=1 border=0>
+
+ <tr>
+ <td width="44%"><br></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ </tr>
+
+ <tr>
+ <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
+ <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></span></td>
+ <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="container_of.h.gcov.html">container_of.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ </table>
+ </center>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/ccan/container_of/index.html b/coverage-report/ccan/container_of/index.html
new file mode 100644
index 0000000..dec2062
--- /dev/null
+++ b/coverage-report/ccan/container_of/index.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - ccan/container_of</title>
+ <link rel="stylesheet" type="text/css" href="../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../index.html">top level</a> - ccan/container_of</td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="80%" cellpadding=1 cellspacing=1 border=0>
+
+ <tr>
+ <td width="44%"><br></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ </tr>
+
+ <tr>
+ <td class="tableHead">Filename <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></span></td>
+ <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="container_of.h.gcov.html">container_of.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ </table>
+ </center>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/ccan/container_of/test/index-sort-b.html b/coverage-report/ccan/container_of/test/index-sort-b.html
index 0dc3d76..5b486dd 100644
--- a/coverage-report/ccan/container_of/test/index-sort-b.html
+++ b/coverage-report/ccan/container_of/test/index-sort-b.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">9</td>
- <td class="headerCovTableEntry">9</td>
+ <td class="headerCovTableEntry">13</td>
+ <td class="headerCovTableEntry">13</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -87,7 +87,7 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
+ <td class="coverNumHi">13 / 13</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/ccan/container_of/test/index-sort-f.html b/coverage-report/ccan/container_of/test/index-sort-f.html
index 49ed54c..e204ed3 100644
--- a/coverage-report/ccan/container_of/test/index-sort-f.html
+++ b/coverage-report/ccan/container_of/test/index-sort-f.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">9</td>
- <td class="headerCovTableEntry">9</td>
+ <td class="headerCovTableEntry">13</td>
+ <td class="headerCovTableEntry">13</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -87,7 +87,7 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
+ <td class="coverNumHi">13 / 13</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/ccan/container_of/test/index-sort-l.html b/coverage-report/ccan/container_of/test/index-sort-l.html
index 3f496d1..db42b76 100644
--- a/coverage-report/ccan/container_of/test/index-sort-l.html
+++ b/coverage-report/ccan/container_of/test/index-sort-l.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">9</td>
- <td class="headerCovTableEntry">9</td>
+ <td class="headerCovTableEntry">13</td>
+ <td class="headerCovTableEntry">13</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -87,7 +87,7 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
+ <td class="coverNumHi">13 / 13</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/ccan/container_of/test/index.html b/coverage-report/ccan/container_of/test/index.html
index 3cdf228..049ae74 100644
--- a/coverage-report/ccan/container_of/test/index.html
+++ b/coverage-report/ccan/container_of/test/index.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">9</td>
- <td class="headerCovTableEntry">9</td>
+ <td class="headerCovTableEntry">13</td>
+ <td class="headerCovTableEntry">13</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -87,7 +87,7 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
+ <td class="coverNumHi">13 / 13</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/ccan/container_of/test/run.c.func-sort-c.html b/coverage-report/ccan/container_of/test/run.c.func-sort-c.html
index d98edf5..c2e5059 100644
--- a/coverage-report/ccan/container_of/test/run.c.func-sort-c.html
+++ b/coverage-report/ccan/container_of/test/run.c.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">9</td>
- <td class="headerCovTableEntry">9</td>
+ <td class="headerCovTableEntry">13</td>
+ <td class="headerCovTableEntry">13</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/container_of/test/run.c.func.html b/coverage-report/ccan/container_of/test/run.c.func.html
index 6832868..4a5ec0a 100644
--- a/coverage-report/ccan/container_of/test/run.c.func.html
+++ b/coverage-report/ccan/container_of/test/run.c.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">9</td>
- <td class="headerCovTableEntry">9</td>
+ <td class="headerCovTableEntry">13</td>
+ <td class="headerCovTableEntry">13</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/container_of/test/run.c.gcov.html b/coverage-report/ccan/container_of/test/run.c.gcov.html
index a71e939..bdfc8e3 100644
--- a/coverage-report/ccan/container_of/test/run.c.gcov.html
+++ b/coverage-report/ccan/container_of/test/run.c.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">9</td>
- <td class="headerCovTableEntry">9</td>
+ <td class="headerCovTableEntry">13</td>
+ <td class="headerCovTableEntry">13</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -77,25 +77,28 @@
<a name="6"><span class="lineNum"> 6 </span> : : char b;</a>
<a name="7"><span class="lineNum"> 7 </span> : : };</a>
<a name="8"><span class="lineNum"> 8 </span> : : </a>
-<a name="9"><span class="lineNum"> 9 </span> :<span class="lineCov"> 2 : int __attribute__((const)) main(int argc, char *argv[])</span></a>
+<a name="9"><span class="lineNum"> 9 </span> :<span class="lineCov"> 2 : int main(void)</span></a>
<a name="10"><span class="lineNum"> 10 </span> : : {</a>
<a name="11"><span class="lineNum"> 11 </span> :<span class="lineCov"> 2 : struct foo foo = { .a = 1, .b = 2 };</span></a>
<a name="12"><span class="lineNum"> 12 </span> :<span class="lineCov"> 2 : int *intp = &amp;foo.a;</span></a>
<a name="13"><span class="lineNum"> 13 </span> :<span class="lineCov"> 2 : char *charp = &amp;foo.b;</span></a>
<a name="14"><span class="lineNum"> 14 </span> : : </a>
-<a name="15"><span class="lineNum"> 15 </span> : : (void)argc;</a>
-<a name="16"><span class="lineNum"> 16 </span> : : (void)argv;</a>
-<a name="17"><span class="lineNum"> 17 </span> : : </a>
-<a name="18"><span class="lineNum"> 18 </span> : : plan_tests(6);</a>
-<a name="19"><span class="lineNum"> 19 </span> :<span class="lineCov"> 2 : ok1(container_of(intp, struct foo, a) == &amp;foo);</span></a>
-<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 2 : ok1(container_of(charp, struct foo, b) == &amp;foo);</span></a>
-<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 2 : ok1(container_of_var(intp, &amp;foo, a) == &amp;foo);</span></a>
-<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 2 : ok1(container_of_var(charp, &amp;foo, b) == &amp;foo);</span></a>
-<a name="23"><span class="lineNum"> 23 </span> : : </a>
-<a name="24"><span class="lineNum"> 24 </span> : : ok1(container_off(struct foo, a) == 0);</a>
-<a name="25"><span class="lineNum"> 25 </span> : : ok1(container_off(struct foo, b) == offsetof(struct foo, b));</a>
-<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 2 : return exit_status();</span></a>
-<a name="27"><span class="lineNum"> 27 </span> : : }</a>
+<a name="15"><span class="lineNum"> 15 </span> : : plan_tests(12);</a>
+<a name="16"><span class="lineNum"> 16 </span> :<span class="lineCov"> 2 : ok1(container_of(intp, struct foo, a) == &amp;foo);</span></a>
+<a name="17"><span class="lineNum"> 17 </span> :<span class="lineCov"> 2 : ok1(container_of(charp, struct foo, b) == &amp;foo);</span></a>
+<a name="18"><span class="lineNum"> 18 </span> :<span class="lineCov"> 2 : ok1(container_of_or_null(intp, struct foo, a) == &amp;foo);</span></a>
+<a name="19"><span class="lineNum"> 19 </span> :<span class="lineCov"> 2 : ok1(container_of_or_null(charp, struct foo, b) == &amp;foo);</span></a>
+<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 2 : ok1(container_of_or_null((int *)NULL, struct foo, a) == NULL);</span></a>
+<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 2 : ok1(container_of_or_null((char *)NULL, struct foo, b) == NULL);</span></a>
+<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 2 : ok1(container_of_var(intp, &amp;foo, a) == &amp;foo);</span></a>
+<a name="23"><span class="lineNum"> 23 </span> :<span class="lineCov"> 2 : ok1(container_of_var(charp, &amp;foo, b) == &amp;foo);</span></a>
+<a name="24"><span class="lineNum"> 24 </span> : : </a>
+<a name="25"><span class="lineNum"> 25 </span> : : ok1(container_off(struct foo, a) == 0);</a>
+<a name="26"><span class="lineNum"> 26 </span> : : ok1(container_off(struct foo, b) == offsetof(struct foo, b));</a>
+<a name="27"><span class="lineNum"> 27 </span> : : ok1(container_off_var(&amp;foo, a) == 0);</a>
+<a name="28"><span class="lineNum"> 28 </span> : : ok1(container_off_var(&amp;foo, b) == offsetof(struct foo, b));</a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 2 : return exit_status();</span></a>
+<a name="30"><span class="lineNum"> 30 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/ccan/endian/endian.h.func-sort-c.html b/coverage-report/ccan/endian/endian.h.func-sort-c.html
index efc0929..ab80afb 100644
--- a/coverage-report/ccan/endian/endian.h.func-sort-c.html
+++ b/coverage-report/ccan/endian/endian.h.func-sort-c.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">30</td>
- <td class="headerCovTableEntry">30</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">24</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">15</td>
- <td class="headerCovTableEntry">15</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -69,64 +69,52 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#69">bswap_16</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#241">cpu_to_le64</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#82">bswap_32</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#268">le64_to_cpu</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#98">bswap_64</a></td>
- <td class="coverFnHi">2</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="endian.h.gcov.html#233">cpu_to_le64</a></td>
- <td class="coverFnHi">2</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="endian.h.gcov.html#260">le64_to_cpu</a></td>
- <td class="coverFnHi">2</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="endian.h.gcov.html#242">cpu_to_le32</a></td>
- <td class="coverFnHi">37</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#250">cpu_to_le32</a></td>
+ <td class="coverFnHi">40</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#269">le32_to_cpu</a></td>
- <td class="coverFnHi">324</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#277">le32_to_cpu</a></td>
+ <td class="coverFnHi">371</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#251">cpu_to_le16</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#259">cpu_to_le16</a></td>
<td class="coverFnHi">1070</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#278">le16_to_cpu</a></td>
- <td class="coverFnHi">2165</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#286">le16_to_cpu</a></td>
+ <td class="coverFnHi">2241</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#305">cpu_to_be16</a></td>
- <td class="coverFnHi">13235752</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#313">cpu_to_be16</a></td>
+ <td class="coverFnHi">13215418</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#287">cpu_to_be64</a></td>
- <td class="coverFnHi">15006234</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#295">cpu_to_be64</a></td>
+ <td class="coverFnHi">15006212</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#332">be16_to_cpu</a></td>
- <td class="coverFnHi">19986278</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#340">be16_to_cpu</a></td>
+ <td class="coverFnHi">20021778</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#296">cpu_to_be32</a></td>
- <td class="coverFnHi">28693593</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#304">cpu_to_be32</a></td>
+ <td class="coverFnHi">28693594</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#323">be32_to_cpu</a></td>
- <td class="coverFnHi">36809977</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#331">be32_to_cpu</a></td>
+ <td class="coverFnHi">36870129</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#314">be64_to_cpu</a></td>
- <td class="coverFnHi">116071949</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#322">be64_to_cpu</a></td>
+ <td class="coverFnHi">116192086</td>
</tr>
</table>
<br>
diff --git a/coverage-report/ccan/endian/endian.h.func.html b/coverage-report/ccan/endian/endian.h.func.html
index 5023fd9..b4eeec0 100644
--- a/coverage-report/ccan/endian/endian.h.func.html
+++ b/coverage-report/ccan/endian/endian.h.func.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">30</td>
- <td class="headerCovTableEntry">30</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">24</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">15</td>
- <td class="headerCovTableEntry">15</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -69,63 +69,51 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="endian.h.func-sort-c.html"><img src="../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#332">be16_to_cpu</a></td>
- <td class="coverFnHi">19986278</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#340">be16_to_cpu</a></td>
+ <td class="coverFnHi">20021778</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#323">be32_to_cpu</a></td>
- <td class="coverFnHi">36809977</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#331">be32_to_cpu</a></td>
+ <td class="coverFnHi">36870129</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#314">be64_to_cpu</a></td>
- <td class="coverFnHi">116071949</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#322">be64_to_cpu</a></td>
+ <td class="coverFnHi">116192086</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#69">bswap_16</a></td>
- <td class="coverFnHi">2</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="endian.h.gcov.html#82">bswap_32</a></td>
- <td class="coverFnHi">2</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="endian.h.gcov.html#98">bswap_64</a></td>
- <td class="coverFnHi">2</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="endian.h.gcov.html#305">cpu_to_be16</a></td>
- <td class="coverFnHi">13235752</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#313">cpu_to_be16</a></td>
+ <td class="coverFnHi">13215418</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#296">cpu_to_be32</a></td>
- <td class="coverFnHi">28693593</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#304">cpu_to_be32</a></td>
+ <td class="coverFnHi">28693594</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#287">cpu_to_be64</a></td>
- <td class="coverFnHi">15006234</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#295">cpu_to_be64</a></td>
+ <td class="coverFnHi">15006212</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#251">cpu_to_le16</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#259">cpu_to_le16</a></td>
<td class="coverFnHi">1070</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#242">cpu_to_le32</a></td>
- <td class="coverFnHi">37</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#250">cpu_to_le32</a></td>
+ <td class="coverFnHi">40</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#233">cpu_to_le64</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#241">cpu_to_le64</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#278">le16_to_cpu</a></td>
- <td class="coverFnHi">2165</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#286">le16_to_cpu</a></td>
+ <td class="coverFnHi">2241</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#269">le32_to_cpu</a></td>
- <td class="coverFnHi">324</td>
+ <td class="coverFn"><a href="endian.h.gcov.html#277">le32_to_cpu</a></td>
+ <td class="coverFnHi">371</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#260">le64_to_cpu</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#268">le64_to_cpu</a></td>
<td class="coverFnHi">2</td>
</tr>
</table>
diff --git a/coverage-report/ccan/endian/endian.h.gcov.html b/coverage-report/ccan/endian/endian.h.gcov.html
index eb2ca28..2012d8d 100644
--- a/coverage-report/ccan/endian/endian.h.gcov.html
+++ b/coverage-report/ccan/endian/endian.h.gcov.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">30</td>
- <td class="headerCovTableEntry">30</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">24</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">15</td>
- <td class="headerCovTableEntry">15</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -139,9 +139,9 @@
<a name="68"><span class="lineNum"> 68 </span> : : * // Output contains &quot;1024 is 4 as two bytes reversed&quot;</a>
<a name="69"><span class="lineNum"> 69 </span> : : * printf(&quot;1024 is %u as two bytes reversed\n&quot;, bswap_16(1024));</a>
<a name="70"><span class="lineNum"> 70 </span> : : */</a>
-<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 2 : static inline uint16_t bswap_16(uint16_t val)</span></a>
+<a name="71"><span class="lineNum"> 71 </span> : : static inline uint16_t bswap_16(uint16_t val)</a>
<a name="72"><span class="lineNum"> 72 </span> : : {</a>
-<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 2 : return BSWAP_16(val);</span></a>
+<a name="73"><span class="lineNum"> 73 </span> : : return BSWAP_16(val);</a>
<a name="74"><span class="lineNum"> 74 </span> : : }</a>
<a name="75"><span class="lineNum"> 75 </span> : : </a>
<a name="76"><span class="lineNum"> 76 </span> : : /**</a>
@@ -152,9 +152,9 @@
<a name="81"><span class="lineNum"> 81 </span> : : * // Output contains &quot;1024 is 262144 as four bytes reversed&quot;</a>
<a name="82"><span class="lineNum"> 82 </span> : : * printf(&quot;1024 is %u as four bytes reversed\n&quot;, bswap_32(1024));</a>
<a name="83"><span class="lineNum"> 83 </span> : : */</a>
-<a name="84"><span class="lineNum"> 84 </span> :<span class="lineCov"> 2 : static inline uint32_t bswap_32(uint32_t val)</span></a>
+<a name="84"><span class="lineNum"> 84 </span> : : static inline uint32_t bswap_32(uint32_t val)</a>
<a name="85"><span class="lineNum"> 85 </span> : : {</a>
-<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 2 : return BSWAP_32(val);</span></a>
+<a name="86"><span class="lineNum"> 86 </span> : : return BSWAP_32(val);</a>
<a name="87"><span class="lineNum"> 87 </span> : : }</a>
<a name="88"><span class="lineNum"> 88 </span> : : #endif /* !HAVE_BYTESWAP_H */</a>
<a name="89"><span class="lineNum"> 89 </span> : : </a>
@@ -168,9 +168,9 @@
<a name="97"><span class="lineNum"> 97 </span> : : * printf(&quot;1024 is %llu as eight bytes reversed\n&quot;,</a>
<a name="98"><span class="lineNum"> 98 </span> : : * (unsigned long long)bswap_64(1024));</a>
<a name="99"><span class="lineNum"> 99 </span> : : */</a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 2 : static inline uint64_t bswap_64(uint64_t val)</span></a>
+<a name="100"><span class="lineNum"> 100 </span> : : static inline uint64_t bswap_64(uint64_t val)</a>
<a name="101"><span class="lineNum"> 101 </span> : : {</a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 2 : return BSWAP_64(val);</span></a>
+<a name="102"><span class="lineNum"> 102 </span> : : return BSWAP_64(val);</a>
<a name="103"><span class="lineNum"> 103 </span> : : }</a>
<a name="104"><span class="lineNum"> 104 </span> : : #endif</a>
<a name="105"><span class="lineNum"> 105 </span> : : </a>
@@ -184,246 +184,254 @@
<a name="113"><span class="lineNum"> 113 </span> : : #elif HAVE_LITTLE_ENDIAN &amp;&amp; HAVE_BIG_ENDIAN</a>
<a name="114"><span class="lineNum"> 114 </span> : : #error &quot;Can't compile for both big and little endian.&quot;</a>
<a name="115"><span class="lineNum"> 115 </span> : : #elif HAVE_LITTLE_ENDIAN</a>
-<a name="116"><span class="lineNum"> 116 </span> : : #define __BYTE_ORDER __LITTLE_ENDIAN</a>
-<a name="117"><span class="lineNum"> 117 </span> : : #elif HAVE_BIG_ENDIAN</a>
-<a name="118"><span class="lineNum"> 118 </span> : : #define __BYTE_ORDER __BIG_ENDIAN</a>
-<a name="119"><span class="lineNum"> 119 </span> : : #endif</a>
-<a name="120"><span class="lineNum"> 120 </span> : : </a>
-<a name="121"><span class="lineNum"> 121 </span> : : </a>
-<a name="122"><span class="lineNum"> 122 </span> : : #ifdef __CHECKER__</a>
-<a name="123"><span class="lineNum"> 123 </span> : : /* sparse needs forcing to remove bitwise attribute from ccan/short_types */</a>
-<a name="124"><span class="lineNum"> 124 </span> : : #define ENDIAN_CAST __attribute__((force))</a>
-<a name="125"><span class="lineNum"> 125 </span> : : #define ENDIAN_TYPE __attribute__((bitwise))</a>
-<a name="126"><span class="lineNum"> 126 </span> : : #else</a>
-<a name="127"><span class="lineNum"> 127 </span> : : #define ENDIAN_CAST</a>
-<a name="128"><span class="lineNum"> 128 </span> : : #define ENDIAN_TYPE</a>
-<a name="129"><span class="lineNum"> 129 </span> : : #endif</a>
-<a name="130"><span class="lineNum"> 130 </span> : : </a>
-<a name="131"><span class="lineNum"> 131 </span> : : typedef uint64_t ENDIAN_TYPE leint64_t;</a>
-<a name="132"><span class="lineNum"> 132 </span> : : typedef uint64_t ENDIAN_TYPE beint64_t;</a>
-<a name="133"><span class="lineNum"> 133 </span> : : typedef uint32_t ENDIAN_TYPE leint32_t;</a>
-<a name="134"><span class="lineNum"> 134 </span> : : typedef uint32_t ENDIAN_TYPE beint32_t;</a>
-<a name="135"><span class="lineNum"> 135 </span> : : typedef uint16_t ENDIAN_TYPE leint16_t;</a>
-<a name="136"><span class="lineNum"> 136 </span> : : typedef uint16_t ENDIAN_TYPE beint16_t;</a>
-<a name="137"><span class="lineNum"> 137 </span> : : </a>
-<a name="138"><span class="lineNum"> 138 </span> : : #if HAVE_LITTLE_ENDIAN</a>
-<a name="139"><span class="lineNum"> 139 </span> : : /**</a>
-<a name="140"><span class="lineNum"> 140 </span> : : * CPU_TO_LE64 - convert a constant uint64_t value to little-endian</a>
-<a name="141"><span class="lineNum"> 141 </span> : : * @native: constant to convert</a>
-<a name="142"><span class="lineNum"> 142 </span> : : */</a>
-<a name="143"><span class="lineNum"> 143 </span> : : #define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)(native))</a>
-<a name="144"><span class="lineNum"> 144 </span> : : </a>
-<a name="145"><span class="lineNum"> 145 </span> : : /**</a>
-<a name="146"><span class="lineNum"> 146 </span> : : * CPU_TO_LE32 - convert a constant uint32_t value to little-endian</a>
-<a name="147"><span class="lineNum"> 147 </span> : : * @native: constant to convert</a>
-<a name="148"><span class="lineNum"> 148 </span> : : */</a>
-<a name="149"><span class="lineNum"> 149 </span> : : #define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)(native))</a>
-<a name="150"><span class="lineNum"> 150 </span> : : </a>
-<a name="151"><span class="lineNum"> 151 </span> : : /**</a>
-<a name="152"><span class="lineNum"> 152 </span> : : * CPU_TO_LE16 - convert a constant uint16_t value to little-endian</a>
-<a name="153"><span class="lineNum"> 153 </span> : : * @native: constant to convert</a>
-<a name="154"><span class="lineNum"> 154 </span> : : */</a>
-<a name="155"><span class="lineNum"> 155 </span> : : #define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)(native))</a>
-<a name="156"><span class="lineNum"> 156 </span> : : </a>
-<a name="157"><span class="lineNum"> 157 </span> : : /**</a>
-<a name="158"><span class="lineNum"> 158 </span> : : * LE64_TO_CPU - convert a little-endian uint64_t constant</a>
-<a name="159"><span class="lineNum"> 159 </span> : : * @le_val: little-endian constant to convert</a>
-<a name="160"><span class="lineNum"> 160 </span> : : */</a>
-<a name="161"><span class="lineNum"> 161 </span> : : #define LE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val))</a>
-<a name="162"><span class="lineNum"> 162 </span> : : </a>
-<a name="163"><span class="lineNum"> 163 </span> : : /**</a>
-<a name="164"><span class="lineNum"> 164 </span> : : * LE32_TO_CPU - convert a little-endian uint32_t constant</a>
-<a name="165"><span class="lineNum"> 165 </span> : : * @le_val: little-endian constant to convert</a>
-<a name="166"><span class="lineNum"> 166 </span> : : */</a>
-<a name="167"><span class="lineNum"> 167 </span> : : #define LE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val))</a>
-<a name="168"><span class="lineNum"> 168 </span> : : </a>
-<a name="169"><span class="lineNum"> 169 </span> : : /**</a>
-<a name="170"><span class="lineNum"> 170 </span> : : * LE16_TO_CPU - convert a little-endian uint16_t constant</a>
-<a name="171"><span class="lineNum"> 171 </span> : : * @le_val: little-endian constant to convert</a>
-<a name="172"><span class="lineNum"> 172 </span> : : */</a>
-<a name="173"><span class="lineNum"> 173 </span> : : #define LE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val))</a>
-<a name="174"><span class="lineNum"> 174 </span> : : </a>
-<a name="175"><span class="lineNum"> 175 </span> : : #else /* ... HAVE_BIG_ENDIAN */</a>
-<a name="176"><span class="lineNum"> 176 </span> : : #define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)BSWAP_64(native))</a>
-<a name="177"><span class="lineNum"> 177 </span> : : #define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)BSWAP_32(native))</a>
-<a name="178"><span class="lineNum"> 178 </span> : : #define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)BSWAP_16(native))</a>
-<a name="179"><span class="lineNum"> 179 </span> : : #define LE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val)</a>
-<a name="180"><span class="lineNum"> 180 </span> : : #define LE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val)</a>
-<a name="181"><span class="lineNum"> 181 </span> : : #define LE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val)</a>
-<a name="182"><span class="lineNum"> 182 </span> : : #endif /* HAVE_BIG_ENDIAN */</a>
-<a name="183"><span class="lineNum"> 183 </span> : : </a>
-<a name="184"><span class="lineNum"> 184 </span> : : #if HAVE_BIG_ENDIAN</a>
-<a name="185"><span class="lineNum"> 185 </span> : : /**</a>
-<a name="186"><span class="lineNum"> 186 </span> : : * CPU_TO_BE64 - convert a constant uint64_t value to big-endian</a>
-<a name="187"><span class="lineNum"> 187 </span> : : * @native: constant to convert</a>
-<a name="188"><span class="lineNum"> 188 </span> : : */</a>
-<a name="189"><span class="lineNum"> 189 </span> : : #define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)(native))</a>
-<a name="190"><span class="lineNum"> 190 </span> : : </a>
-<a name="191"><span class="lineNum"> 191 </span> : : /**</a>
-<a name="192"><span class="lineNum"> 192 </span> : : * CPU_TO_BE32 - convert a constant uint32_t value to big-endian</a>
-<a name="193"><span class="lineNum"> 193 </span> : : * @native: constant to convert</a>
-<a name="194"><span class="lineNum"> 194 </span> : : */</a>
-<a name="195"><span class="lineNum"> 195 </span> : : #define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)(native))</a>
-<a name="196"><span class="lineNum"> 196 </span> : : </a>
-<a name="197"><span class="lineNum"> 197 </span> : : /**</a>
-<a name="198"><span class="lineNum"> 198 </span> : : * CPU_TO_BE16 - convert a constant uint16_t value to big-endian</a>
-<a name="199"><span class="lineNum"> 199 </span> : : * @native: constant to convert</a>
-<a name="200"><span class="lineNum"> 200 </span> : : */</a>
-<a name="201"><span class="lineNum"> 201 </span> : : #define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)(native))</a>
-<a name="202"><span class="lineNum"> 202 </span> : : </a>
-<a name="203"><span class="lineNum"> 203 </span> : : /**</a>
-<a name="204"><span class="lineNum"> 204 </span> : : * BE64_TO_CPU - convert a big-endian uint64_t constant</a>
-<a name="205"><span class="lineNum"> 205 </span> : : * @le_val: big-endian constant to convert</a>
-<a name="206"><span class="lineNum"> 206 </span> : : */</a>
-<a name="207"><span class="lineNum"> 207 </span> : : #define BE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val))</a>
-<a name="208"><span class="lineNum"> 208 </span> : : </a>
-<a name="209"><span class="lineNum"> 209 </span> : : /**</a>
-<a name="210"><span class="lineNum"> 210 </span> : : * BE32_TO_CPU - convert a big-endian uint32_t constant</a>
-<a name="211"><span class="lineNum"> 211 </span> : : * @le_val: big-endian constant to convert</a>
-<a name="212"><span class="lineNum"> 212 </span> : : */</a>
-<a name="213"><span class="lineNum"> 213 </span> : : #define BE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val))</a>
-<a name="214"><span class="lineNum"> 214 </span> : : </a>
-<a name="215"><span class="lineNum"> 215 </span> : : /**</a>
-<a name="216"><span class="lineNum"> 216 </span> : : * BE16_TO_CPU - convert a big-endian uint16_t constant</a>
-<a name="217"><span class="lineNum"> 217 </span> : : * @le_val: big-endian constant to convert</a>
-<a name="218"><span class="lineNum"> 218 </span> : : */</a>
-<a name="219"><span class="lineNum"> 219 </span> : : #define BE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val))</a>
-<a name="220"><span class="lineNum"> 220 </span> : : </a>
-<a name="221"><span class="lineNum"> 221 </span> : : #else /* ... HAVE_LITTLE_ENDIAN */</a>
-<a name="222"><span class="lineNum"> 222 </span> : : #define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)BSWAP_64(native))</a>
-<a name="223"><span class="lineNum"> 223 </span> : : #define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)BSWAP_32(native))</a>
-<a name="224"><span class="lineNum"> 224 </span> : : #define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)BSWAP_16(native))</a>
-<a name="225"><span class="lineNum"> 225 </span> : : #define BE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val)</a>
-<a name="226"><span class="lineNum"> 226 </span> : : #define BE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val)</a>
-<a name="227"><span class="lineNum"> 227 </span> : : #define BE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val)</a>
-<a name="228"><span class="lineNum"> 228 </span> : : #endif /* HAVE_LITTE_ENDIAN */</a>
-<a name="229"><span class="lineNum"> 229 </span> : : </a>
-<a name="230"><span class="lineNum"> 230 </span> : : </a>
-<a name="231"><span class="lineNum"> 231 </span> : : /**</a>
-<a name="232"><span class="lineNum"> 232 </span> : : * cpu_to_le64 - convert a uint64_t value to little-endian</a>
-<a name="233"><span class="lineNum"> 233 </span> : : * @native: value to convert</a>
-<a name="234"><span class="lineNum"> 234 </span> : : */</a>
-<a name="235"><span class="lineNum"> 235 </span> :<span class="lineCov"> 2 : static inline leint64_t cpu_to_le64(uint64_t native)</span></a>
-<a name="236"><span class="lineNum"> 236 </span> : : {</a>
-<a name="237"><span class="lineNum"> 237 </span> :<span class="lineCov"> 2 : return CPU_TO_LE64(native);</span></a>
-<a name="238"><span class="lineNum"> 238 </span> : : }</a>
-<a name="239"><span class="lineNum"> 239 </span> : : </a>
-<a name="240"><span class="lineNum"> 240 </span> : : /**</a>
-<a name="241"><span class="lineNum"> 241 </span> : : * cpu_to_le32 - convert a uint32_t value to little-endian</a>
-<a name="242"><span class="lineNum"> 242 </span> : : * @native: value to convert</a>
-<a name="243"><span class="lineNum"> 243 </span> : : */</a>
-<a name="244"><span class="lineNum"> 244 </span> :<span class="lineCov"> 37 : static inline leint32_t cpu_to_le32(uint32_t native)</span></a>
-<a name="245"><span class="lineNum"> 245 </span> : : {</a>
-<a name="246"><span class="lineNum"> 246 </span> :<span class="lineCov"> 37 : return CPU_TO_LE32(native);</span></a>
-<a name="247"><span class="lineNum"> 247 </span> : : }</a>
-<a name="248"><span class="lineNum"> 248 </span> : : </a>
-<a name="249"><span class="lineNum"> 249 </span> : : /**</a>
-<a name="250"><span class="lineNum"> 250 </span> : : * cpu_to_le16 - convert a uint16_t value to little-endian</a>
-<a name="251"><span class="lineNum"> 251 </span> : : * @native: value to convert</a>
-<a name="252"><span class="lineNum"> 252 </span> : : */</a>
-<a name="253"><span class="lineNum"> 253 </span> :<span class="lineCov"> 1070 : static inline leint16_t cpu_to_le16(uint16_t native)</span></a>
-<a name="254"><span class="lineNum"> 254 </span> : : {</a>
-<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 1070 : return CPU_TO_LE16(native);</span></a>
-<a name="256"><span class="lineNum"> 256 </span> : : }</a>
-<a name="257"><span class="lineNum"> 257 </span> : : </a>
-<a name="258"><span class="lineNum"> 258 </span> : : /**</a>
-<a name="259"><span class="lineNum"> 259 </span> : : * le64_to_cpu - convert a little-endian uint64_t value</a>
-<a name="260"><span class="lineNum"> 260 </span> : : * @le_val: little-endian value to convert</a>
-<a name="261"><span class="lineNum"> 261 </span> : : */</a>
-<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 2 : static inline uint64_t le64_to_cpu(leint64_t le_val)</span></a>
-<a name="263"><span class="lineNum"> 263 </span> : : {</a>
-<a name="264"><span class="lineNum"> 264 </span> :<span class="lineCov"> 2 : return LE64_TO_CPU(le_val);</span></a>
-<a name="265"><span class="lineNum"> 265 </span> : : }</a>
-<a name="266"><span class="lineNum"> 266 </span> : : </a>
-<a name="267"><span class="lineNum"> 267 </span> : : /**</a>
-<a name="268"><span class="lineNum"> 268 </span> : : * le32_to_cpu - convert a little-endian uint32_t value</a>
-<a name="269"><span class="lineNum"> 269 </span> : : * @le_val: little-endian value to convert</a>
-<a name="270"><span class="lineNum"> 270 </span> : : */</a>
-<a name="271"><span class="lineNum"> 271 </span> :<span class="lineCov"> 324 : static inline uint32_t le32_to_cpu(leint32_t le_val)</span></a>
-<a name="272"><span class="lineNum"> 272 </span> : : {</a>
-<a name="273"><span class="lineNum"> 273 </span> :<span class="lineCov"> 324 : return LE32_TO_CPU(le_val);</span></a>
-<a name="274"><span class="lineNum"> 274 </span> : : }</a>
-<a name="275"><span class="lineNum"> 275 </span> : : </a>
-<a name="276"><span class="lineNum"> 276 </span> : : /**</a>
-<a name="277"><span class="lineNum"> 277 </span> : : * le16_to_cpu - convert a little-endian uint16_t value</a>
-<a name="278"><span class="lineNum"> 278 </span> : : * @le_val: little-endian value to convert</a>
-<a name="279"><span class="lineNum"> 279 </span> : : */</a>
-<a name="280"><span class="lineNum"> 280 </span> :<span class="lineCov"> 2165 : static inline uint16_t le16_to_cpu(leint16_t le_val)</span></a>
-<a name="281"><span class="lineNum"> 281 </span> : : {</a>
-<a name="282"><span class="lineNum"> 282 </span> :<span class="lineCov"> 2165 : return LE16_TO_CPU(le_val);</span></a>
-<a name="283"><span class="lineNum"> 283 </span> : : }</a>
-<a name="284"><span class="lineNum"> 284 </span> : : </a>
-<a name="285"><span class="lineNum"> 285 </span> : : /**</a>
-<a name="286"><span class="lineNum"> 286 </span> : : * cpu_to_be64 - convert a uint64_t value to big endian.</a>
-<a name="287"><span class="lineNum"> 287 </span> : : * @native: value to convert</a>
-<a name="288"><span class="lineNum"> 288 </span> : : */</a>
-<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 15006234 : static inline beint64_t cpu_to_be64(uint64_t native)</span></a>
-<a name="290"><span class="lineNum"> 290 </span> : : {</a>
-<a name="291"><span class="lineNum"> 291 </span> :<span class="lineCov"> 15006234 : return CPU_TO_BE64(native);</span></a>
-<a name="292"><span class="lineNum"> 292 </span> : : }</a>
-<a name="293"><span class="lineNum"> 293 </span> : : </a>
-<a name="294"><span class="lineNum"> 294 </span> : : /**</a>
-<a name="295"><span class="lineNum"> 295 </span> : : * cpu_to_be32 - convert a uint32_t value to big endian.</a>
-<a name="296"><span class="lineNum"> 296 </span> : : * @native: value to convert</a>
-<a name="297"><span class="lineNum"> 297 </span> : : */</a>
-<a name="298"><span class="lineNum"> 298 </span> :<span class="lineCov"> 28693594 : static inline beint32_t cpu_to_be32(uint32_t native)</span></a>
-<a name="299"><span class="lineNum"> 299 </span> : : {</a>
-<a name="300"><span class="lineNum"> 300 </span> :<span class="lineCov"> 28693594 : return CPU_TO_BE32(native);</span></a>
-<a name="301"><span class="lineNum"> 301 </span> : : }</a>
-<a name="302"><span class="lineNum"> 302 </span> : : </a>
-<a name="303"><span class="lineNum"> 303 </span> : : /**</a>
-<a name="304"><span class="lineNum"> 304 </span> : : * cpu_to_be16 - convert a uint16_t value to big endian.</a>
-<a name="305"><span class="lineNum"> 305 </span> : : * @native: value to convert</a>
-<a name="306"><span class="lineNum"> 306 </span> : : */</a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineCov"> 13235753 : static inline beint16_t cpu_to_be16(uint16_t native)</span></a>
-<a name="308"><span class="lineNum"> 308 </span> : : {</a>
-<a name="309"><span class="lineNum"> 309 </span> :<span class="lineCov"> 13235753 : return CPU_TO_BE16(native);</span></a>
-<a name="310"><span class="lineNum"> 310 </span> : : }</a>
-<a name="311"><span class="lineNum"> 311 </span> : : </a>
-<a name="312"><span class="lineNum"> 312 </span> : : /**</a>
-<a name="313"><span class="lineNum"> 313 </span> : : * be64_to_cpu - convert a big-endian uint64_t value</a>
-<a name="314"><span class="lineNum"> 314 </span> : : * @be_val: big-endian value to convert</a>
-<a name="315"><span class="lineNum"> 315 </span> : : */</a>
-<a name="316"><span class="lineNum"> 316 </span> :<span class="lineCov"> 116071949 : static inline uint64_t be64_to_cpu(beint64_t be_val)</span></a>
-<a name="317"><span class="lineNum"> 317 </span> : : {</a>
-<a name="318"><span class="lineNum"> 318 </span> :<span class="lineCov"> 116071949 : return BE64_TO_CPU(be_val);</span></a>
-<a name="319"><span class="lineNum"> 319 </span> : : }</a>
-<a name="320"><span class="lineNum"> 320 </span> : : </a>
-<a name="321"><span class="lineNum"> 321 </span> : : /**</a>
-<a name="322"><span class="lineNum"> 322 </span> : : * be32_to_cpu - convert a big-endian uint32_t value</a>
-<a name="323"><span class="lineNum"> 323 </span> : : * @be_val: big-endian value to convert</a>
-<a name="324"><span class="lineNum"> 324 </span> : : */</a>
-<a name="325"><span class="lineNum"> 325 </span> :<span class="lineCov"> 36810081 : static inline uint32_t be32_to_cpu(beint32_t be_val)</span></a>
-<a name="326"><span class="lineNum"> 326 </span> : : {</a>
-<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 36810054 : return BE32_TO_CPU(be_val);</span></a>
-<a name="328"><span class="lineNum"> 328 </span> : : }</a>
-<a name="329"><span class="lineNum"> 329 </span> : : </a>
-<a name="330"><span class="lineNum"> 330 </span> : : /**</a>
-<a name="331"><span class="lineNum"> 331 </span> : : * be16_to_cpu - convert a big-endian uint16_t value</a>
-<a name="332"><span class="lineNum"> 332 </span> : : * @be_val: big-endian value to convert</a>
-<a name="333"><span class="lineNum"> 333 </span> : : */</a>
-<a name="334"><span class="lineNum"> 334 </span> :<span class="lineCov"> 19986337 : static inline uint16_t be16_to_cpu(beint16_t be_val)</span></a>
-<a name="335"><span class="lineNum"> 335 </span> : : {</a>
-<a name="336"><span class="lineNum"> 336 </span> :<span class="lineCov"> 19986337 : return BE16_TO_CPU(be_val);</span></a>
-<a name="337"><span class="lineNum"> 337 </span> : : }</a>
-<a name="338"><span class="lineNum"> 338 </span> : : </a>
-<a name="339"><span class="lineNum"> 339 </span> : : /* Whichever they include first, they get these definitions. */</a>
-<a name="340"><span class="lineNum"> 340 </span> : : #ifdef CCAN_SHORT_TYPES_H</a>
-<a name="341"><span class="lineNum"> 341 </span> : : /**</a>
-<a name="342"><span class="lineNum"> 342 </span> : : * be64/be32/be16 - 64/32/16 bit big-endian representation.</a>
-<a name="343"><span class="lineNum"> 343 </span> : : */</a>
-<a name="344"><span class="lineNum"> 344 </span> : : typedef beint64_t be64;</a>
-<a name="345"><span class="lineNum"> 345 </span> : : typedef beint32_t be32;</a>
-<a name="346"><span class="lineNum"> 346 </span> : : typedef beint16_t be16;</a>
-<a name="347"><span class="lineNum"> 347 </span> : : </a>
-<a name="348"><span class="lineNum"> 348 </span> : : /**</a>
-<a name="349"><span class="lineNum"> 349 </span> : : * le64/le32/le16 - 64/32/16 bit little-endian representation.</a>
-<a name="350"><span class="lineNum"> 350 </span> : : */</a>
-<a name="351"><span class="lineNum"> 351 </span> : : typedef leint64_t le64;</a>
-<a name="352"><span class="lineNum"> 352 </span> : : typedef leint32_t le32;</a>
-<a name="353"><span class="lineNum"> 353 </span> : : typedef leint16_t le16;</a>
-<a name="354"><span class="lineNum"> 354 </span> : : #endif</a>
-<a name="355"><span class="lineNum"> 355 </span> : : #endif /* CCAN_ENDIAN_H */</a>
+<a name="116"><span class="lineNum"> 116 </span> : : #ifndef __BYTE_ORDER</a>
+<a name="117"><span class="lineNum"> 117 </span> : : #define __BYTE_ORDER __LITTLE_ENDIAN</a>
+<a name="118"><span class="lineNum"> 118 </span> : : #elif __BYTE_ORDER != __LITTLE_ENDIAN</a>
+<a name="119"><span class="lineNum"> 119 </span> : : #error &quot;__BYTE_ORDER already defined, but not equal to __LITTLE_ENDIAN&quot;</a>
+<a name="120"><span class="lineNum"> 120 </span> : : #endif</a>
+<a name="121"><span class="lineNum"> 121 </span> : : #elif HAVE_BIG_ENDIAN</a>
+<a name="122"><span class="lineNum"> 122 </span> : : #ifndef __BYTE_ORDER</a>
+<a name="123"><span class="lineNum"> 123 </span> : : #define __BYTE_ORDER __BIG_ENDIAN</a>
+<a name="124"><span class="lineNum"> 124 </span> : : #elif __BYTE_ORDER != __BIG_ENDIAN</a>
+<a name="125"><span class="lineNum"> 125 </span> : : #error &quot;__BYTE_ORDER already defined, but not equal to __BIG_ENDIAN&quot;</a>
+<a name="126"><span class="lineNum"> 126 </span> : : #endif</a>
+<a name="127"><span class="lineNum"> 127 </span> : : #endif</a>
+<a name="128"><span class="lineNum"> 128 </span> : : </a>
+<a name="129"><span class="lineNum"> 129 </span> : : </a>
+<a name="130"><span class="lineNum"> 130 </span> : : #ifdef __CHECKER__</a>
+<a name="131"><span class="lineNum"> 131 </span> : : /* sparse needs forcing to remove bitwise attribute from ccan/short_types */</a>
+<a name="132"><span class="lineNum"> 132 </span> : : #define ENDIAN_CAST __attribute__((force))</a>
+<a name="133"><span class="lineNum"> 133 </span> : : #define ENDIAN_TYPE __attribute__((bitwise))</a>
+<a name="134"><span class="lineNum"> 134 </span> : : #else</a>
+<a name="135"><span class="lineNum"> 135 </span> : : #define ENDIAN_CAST</a>
+<a name="136"><span class="lineNum"> 136 </span> : : #define ENDIAN_TYPE</a>
+<a name="137"><span class="lineNum"> 137 </span> : : #endif</a>
+<a name="138"><span class="lineNum"> 138 </span> : : </a>
+<a name="139"><span class="lineNum"> 139 </span> : : typedef uint64_t ENDIAN_TYPE leint64_t;</a>
+<a name="140"><span class="lineNum"> 140 </span> : : typedef uint64_t ENDIAN_TYPE beint64_t;</a>
+<a name="141"><span class="lineNum"> 141 </span> : : typedef uint32_t ENDIAN_TYPE leint32_t;</a>
+<a name="142"><span class="lineNum"> 142 </span> : : typedef uint32_t ENDIAN_TYPE beint32_t;</a>
+<a name="143"><span class="lineNum"> 143 </span> : : typedef uint16_t ENDIAN_TYPE leint16_t;</a>
+<a name="144"><span class="lineNum"> 144 </span> : : typedef uint16_t ENDIAN_TYPE beint16_t;</a>
+<a name="145"><span class="lineNum"> 145 </span> : : </a>
+<a name="146"><span class="lineNum"> 146 </span> : : #if HAVE_LITTLE_ENDIAN</a>
+<a name="147"><span class="lineNum"> 147 </span> : : /**</a>
+<a name="148"><span class="lineNum"> 148 </span> : : * CPU_TO_LE64 - convert a constant uint64_t value to little-endian</a>
+<a name="149"><span class="lineNum"> 149 </span> : : * @native: constant to convert</a>
+<a name="150"><span class="lineNum"> 150 </span> : : */</a>
+<a name="151"><span class="lineNum"> 151 </span> : : #define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)(native))</a>
+<a name="152"><span class="lineNum"> 152 </span> : : </a>
+<a name="153"><span class="lineNum"> 153 </span> : : /**</a>
+<a name="154"><span class="lineNum"> 154 </span> : : * CPU_TO_LE32 - convert a constant uint32_t value to little-endian</a>
+<a name="155"><span class="lineNum"> 155 </span> : : * @native: constant to convert</a>
+<a name="156"><span class="lineNum"> 156 </span> : : */</a>
+<a name="157"><span class="lineNum"> 157 </span> : : #define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)(native))</a>
+<a name="158"><span class="lineNum"> 158 </span> : : </a>
+<a name="159"><span class="lineNum"> 159 </span> : : /**</a>
+<a name="160"><span class="lineNum"> 160 </span> : : * CPU_TO_LE16 - convert a constant uint16_t value to little-endian</a>
+<a name="161"><span class="lineNum"> 161 </span> : : * @native: constant to convert</a>
+<a name="162"><span class="lineNum"> 162 </span> : : */</a>
+<a name="163"><span class="lineNum"> 163 </span> : : #define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)(native))</a>
+<a name="164"><span class="lineNum"> 164 </span> : : </a>
+<a name="165"><span class="lineNum"> 165 </span> : : /**</a>
+<a name="166"><span class="lineNum"> 166 </span> : : * LE64_TO_CPU - convert a little-endian uint64_t constant</a>
+<a name="167"><span class="lineNum"> 167 </span> : : * @le_val: little-endian constant to convert</a>
+<a name="168"><span class="lineNum"> 168 </span> : : */</a>
+<a name="169"><span class="lineNum"> 169 </span> : : #define LE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val))</a>
+<a name="170"><span class="lineNum"> 170 </span> : : </a>
+<a name="171"><span class="lineNum"> 171 </span> : : /**</a>
+<a name="172"><span class="lineNum"> 172 </span> : : * LE32_TO_CPU - convert a little-endian uint32_t constant</a>
+<a name="173"><span class="lineNum"> 173 </span> : : * @le_val: little-endian constant to convert</a>
+<a name="174"><span class="lineNum"> 174 </span> : : */</a>
+<a name="175"><span class="lineNum"> 175 </span> : : #define LE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val))</a>
+<a name="176"><span class="lineNum"> 176 </span> : : </a>
+<a name="177"><span class="lineNum"> 177 </span> : : /**</a>
+<a name="178"><span class="lineNum"> 178 </span> : : * LE16_TO_CPU - convert a little-endian uint16_t constant</a>
+<a name="179"><span class="lineNum"> 179 </span> : : * @le_val: little-endian constant to convert</a>
+<a name="180"><span class="lineNum"> 180 </span> : : */</a>
+<a name="181"><span class="lineNum"> 181 </span> : : #define LE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val))</a>
+<a name="182"><span class="lineNum"> 182 </span> : : </a>
+<a name="183"><span class="lineNum"> 183 </span> : : #else /* ... HAVE_BIG_ENDIAN */</a>
+<a name="184"><span class="lineNum"> 184 </span> : : #define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)BSWAP_64(native))</a>
+<a name="185"><span class="lineNum"> 185 </span> : : #define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)BSWAP_32(native))</a>
+<a name="186"><span class="lineNum"> 186 </span> : : #define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)BSWAP_16(native))</a>
+<a name="187"><span class="lineNum"> 187 </span> : : #define LE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val)</a>
+<a name="188"><span class="lineNum"> 188 </span> : : #define LE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val)</a>
+<a name="189"><span class="lineNum"> 189 </span> : : #define LE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val)</a>
+<a name="190"><span class="lineNum"> 190 </span> : : #endif /* HAVE_BIG_ENDIAN */</a>
+<a name="191"><span class="lineNum"> 191 </span> : : </a>
+<a name="192"><span class="lineNum"> 192 </span> : : #if HAVE_BIG_ENDIAN</a>
+<a name="193"><span class="lineNum"> 193 </span> : : /**</a>
+<a name="194"><span class="lineNum"> 194 </span> : : * CPU_TO_BE64 - convert a constant uint64_t value to big-endian</a>
+<a name="195"><span class="lineNum"> 195 </span> : : * @native: constant to convert</a>
+<a name="196"><span class="lineNum"> 196 </span> : : */</a>
+<a name="197"><span class="lineNum"> 197 </span> : : #define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)(native))</a>
+<a name="198"><span class="lineNum"> 198 </span> : : </a>
+<a name="199"><span class="lineNum"> 199 </span> : : /**</a>
+<a name="200"><span class="lineNum"> 200 </span> : : * CPU_TO_BE32 - convert a constant uint32_t value to big-endian</a>
+<a name="201"><span class="lineNum"> 201 </span> : : * @native: constant to convert</a>
+<a name="202"><span class="lineNum"> 202 </span> : : */</a>
+<a name="203"><span class="lineNum"> 203 </span> : : #define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)(native))</a>
+<a name="204"><span class="lineNum"> 204 </span> : : </a>
+<a name="205"><span class="lineNum"> 205 </span> : : /**</a>
+<a name="206"><span class="lineNum"> 206 </span> : : * CPU_TO_BE16 - convert a constant uint16_t value to big-endian</a>
+<a name="207"><span class="lineNum"> 207 </span> : : * @native: constant to convert</a>
+<a name="208"><span class="lineNum"> 208 </span> : : */</a>
+<a name="209"><span class="lineNum"> 209 </span> : : #define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)(native))</a>
+<a name="210"><span class="lineNum"> 210 </span> : : </a>
+<a name="211"><span class="lineNum"> 211 </span> : : /**</a>
+<a name="212"><span class="lineNum"> 212 </span> : : * BE64_TO_CPU - convert a big-endian uint64_t constant</a>
+<a name="213"><span class="lineNum"> 213 </span> : : * @le_val: big-endian constant to convert</a>
+<a name="214"><span class="lineNum"> 214 </span> : : */</a>
+<a name="215"><span class="lineNum"> 215 </span> : : #define BE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val))</a>
+<a name="216"><span class="lineNum"> 216 </span> : : </a>
+<a name="217"><span class="lineNum"> 217 </span> : : /**</a>
+<a name="218"><span class="lineNum"> 218 </span> : : * BE32_TO_CPU - convert a big-endian uint32_t constant</a>
+<a name="219"><span class="lineNum"> 219 </span> : : * @le_val: big-endian constant to convert</a>
+<a name="220"><span class="lineNum"> 220 </span> : : */</a>
+<a name="221"><span class="lineNum"> 221 </span> : : #define BE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val))</a>
+<a name="222"><span class="lineNum"> 222 </span> : : </a>
+<a name="223"><span class="lineNum"> 223 </span> : : /**</a>
+<a name="224"><span class="lineNum"> 224 </span> : : * BE16_TO_CPU - convert a big-endian uint16_t constant</a>
+<a name="225"><span class="lineNum"> 225 </span> : : * @le_val: big-endian constant to convert</a>
+<a name="226"><span class="lineNum"> 226 </span> : : */</a>
+<a name="227"><span class="lineNum"> 227 </span> : : #define BE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val))</a>
+<a name="228"><span class="lineNum"> 228 </span> : : </a>
+<a name="229"><span class="lineNum"> 229 </span> : : #else /* ... HAVE_LITTLE_ENDIAN */</a>
+<a name="230"><span class="lineNum"> 230 </span> : : #define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)BSWAP_64(native))</a>
+<a name="231"><span class="lineNum"> 231 </span> : : #define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)BSWAP_32(native))</a>
+<a name="232"><span class="lineNum"> 232 </span> : : #define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)BSWAP_16(native))</a>
+<a name="233"><span class="lineNum"> 233 </span> : : #define BE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val)</a>
+<a name="234"><span class="lineNum"> 234 </span> : : #define BE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val)</a>
+<a name="235"><span class="lineNum"> 235 </span> : : #define BE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val)</a>
+<a name="236"><span class="lineNum"> 236 </span> : : #endif /* HAVE_LITTE_ENDIAN */</a>
+<a name="237"><span class="lineNum"> 237 </span> : : </a>
+<a name="238"><span class="lineNum"> 238 </span> : : </a>
+<a name="239"><span class="lineNum"> 239 </span> : : /**</a>
+<a name="240"><span class="lineNum"> 240 </span> : : * cpu_to_le64 - convert a uint64_t value to little-endian</a>
+<a name="241"><span class="lineNum"> 241 </span> : : * @native: value to convert</a>
+<a name="242"><span class="lineNum"> 242 </span> : : */</a>
+<a name="243"><span class="lineNum"> 243 </span> :<span class="lineCov"> 2 : static inline leint64_t cpu_to_le64(uint64_t native)</span></a>
+<a name="244"><span class="lineNum"> 244 </span> : : {</a>
+<a name="245"><span class="lineNum"> 245 </span> :<span class="lineCov"> 2 : return CPU_TO_LE64(native);</span></a>
+<a name="246"><span class="lineNum"> 246 </span> : : }</a>
+<a name="247"><span class="lineNum"> 247 </span> : : </a>
+<a name="248"><span class="lineNum"> 248 </span> : : /**</a>
+<a name="249"><span class="lineNum"> 249 </span> : : * cpu_to_le32 - convert a uint32_t value to little-endian</a>
+<a name="250"><span class="lineNum"> 250 </span> : : * @native: value to convert</a>
+<a name="251"><span class="lineNum"> 251 </span> : : */</a>
+<a name="252"><span class="lineNum"> 252 </span> :<span class="lineCov"> 40 : static inline leint32_t cpu_to_le32(uint32_t native)</span></a>
+<a name="253"><span class="lineNum"> 253 </span> : : {</a>
+<a name="254"><span class="lineNum"> 254 </span> :<span class="lineCov"> 40 : return CPU_TO_LE32(native);</span></a>
+<a name="255"><span class="lineNum"> 255 </span> : : }</a>
+<a name="256"><span class="lineNum"> 256 </span> : : </a>
+<a name="257"><span class="lineNum"> 257 </span> : : /**</a>
+<a name="258"><span class="lineNum"> 258 </span> : : * cpu_to_le16 - convert a uint16_t value to little-endian</a>
+<a name="259"><span class="lineNum"> 259 </span> : : * @native: value to convert</a>
+<a name="260"><span class="lineNum"> 260 </span> : : */</a>
+<a name="261"><span class="lineNum"> 261 </span> :<span class="lineCov"> 1070 : static inline leint16_t cpu_to_le16(uint16_t native)</span></a>
+<a name="262"><span class="lineNum"> 262 </span> : : {</a>
+<a name="263"><span class="lineNum"> 263 </span> :<span class="lineCov"> 1070 : return CPU_TO_LE16(native);</span></a>
+<a name="264"><span class="lineNum"> 264 </span> : : }</a>
+<a name="265"><span class="lineNum"> 265 </span> : : </a>
+<a name="266"><span class="lineNum"> 266 </span> : : /**</a>
+<a name="267"><span class="lineNum"> 267 </span> : : * le64_to_cpu - convert a little-endian uint64_t value</a>
+<a name="268"><span class="lineNum"> 268 </span> : : * @le_val: little-endian value to convert</a>
+<a name="269"><span class="lineNum"> 269 </span> : : */</a>
+<a name="270"><span class="lineNum"> 270 </span> :<span class="lineCov"> 2 : static inline uint64_t le64_to_cpu(leint64_t le_val)</span></a>
+<a name="271"><span class="lineNum"> 271 </span> : : {</a>
+<a name="272"><span class="lineNum"> 272 </span> :<span class="lineCov"> 2 : return LE64_TO_CPU(le_val);</span></a>
+<a name="273"><span class="lineNum"> 273 </span> : : }</a>
+<a name="274"><span class="lineNum"> 274 </span> : : </a>
+<a name="275"><span class="lineNum"> 275 </span> : : /**</a>
+<a name="276"><span class="lineNum"> 276 </span> : : * le32_to_cpu - convert a little-endian uint32_t value</a>
+<a name="277"><span class="lineNum"> 277 </span> : : * @le_val: little-endian value to convert</a>
+<a name="278"><span class="lineNum"> 278 </span> : : */</a>
+<a name="279"><span class="lineNum"> 279 </span> :<span class="lineCov"> 371 : static inline uint32_t le32_to_cpu(leint32_t le_val)</span></a>
+<a name="280"><span class="lineNum"> 280 </span> : : {</a>
+<a name="281"><span class="lineNum"> 281 </span> :<span class="lineCov"> 371 : return LE32_TO_CPU(le_val);</span></a>
+<a name="282"><span class="lineNum"> 282 </span> : : }</a>
+<a name="283"><span class="lineNum"> 283 </span> : : </a>
+<a name="284"><span class="lineNum"> 284 </span> : : /**</a>
+<a name="285"><span class="lineNum"> 285 </span> : : * le16_to_cpu - convert a little-endian uint16_t value</a>
+<a name="286"><span class="lineNum"> 286 </span> : : * @le_val: little-endian value to convert</a>
+<a name="287"><span class="lineNum"> 287 </span> : : */</a>
+<a name="288"><span class="lineNum"> 288 </span> :<span class="lineCov"> 2241 : static inline uint16_t le16_to_cpu(leint16_t le_val)</span></a>
+<a name="289"><span class="lineNum"> 289 </span> : : {</a>
+<a name="290"><span class="lineNum"> 290 </span> :<span class="lineCov"> 2241 : return LE16_TO_CPU(le_val);</span></a>
+<a name="291"><span class="lineNum"> 291 </span> : : }</a>
+<a name="292"><span class="lineNum"> 292 </span> : : </a>
+<a name="293"><span class="lineNum"> 293 </span> : : /**</a>
+<a name="294"><span class="lineNum"> 294 </span> : : * cpu_to_be64 - convert a uint64_t value to big endian.</a>
+<a name="295"><span class="lineNum"> 295 </span> : : * @native: value to convert</a>
+<a name="296"><span class="lineNum"> 296 </span> : : */</a>
+<a name="297"><span class="lineNum"> 297 </span> :<span class="lineCov"> 15006212 : static inline beint64_t cpu_to_be64(uint64_t native)</span></a>
+<a name="298"><span class="lineNum"> 298 </span> : : {</a>
+<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 15006212 : return CPU_TO_BE64(native);</span></a>
+<a name="300"><span class="lineNum"> 300 </span> : : }</a>
+<a name="301"><span class="lineNum"> 301 </span> : : </a>
+<a name="302"><span class="lineNum"> 302 </span> : : /**</a>
+<a name="303"><span class="lineNum"> 303 </span> : : * cpu_to_be32 - convert a uint32_t value to big endian.</a>
+<a name="304"><span class="lineNum"> 304 </span> : : * @native: value to convert</a>
+<a name="305"><span class="lineNum"> 305 </span> : : */</a>
+<a name="306"><span class="lineNum"> 306 </span> :<span class="lineCov"> 28693595 : static inline beint32_t cpu_to_be32(uint32_t native)</span></a>
+<a name="307"><span class="lineNum"> 307 </span> : : {</a>
+<a name="308"><span class="lineNum"> 308 </span> :<span class="lineCov"> 28693595 : return CPU_TO_BE32(native);</span></a>
+<a name="309"><span class="lineNum"> 309 </span> : : }</a>
+<a name="310"><span class="lineNum"> 310 </span> : : </a>
+<a name="311"><span class="lineNum"> 311 </span> : : /**</a>
+<a name="312"><span class="lineNum"> 312 </span> : : * cpu_to_be16 - convert a uint16_t value to big endian.</a>
+<a name="313"><span class="lineNum"> 313 </span> : : * @native: value to convert</a>
+<a name="314"><span class="lineNum"> 314 </span> : : */</a>
+<a name="315"><span class="lineNum"> 315 </span> :<span class="lineCov"> 13215419 : static inline beint16_t cpu_to_be16(uint16_t native)</span></a>
+<a name="316"><span class="lineNum"> 316 </span> : : {</a>
+<a name="317"><span class="lineNum"> 317 </span> :<span class="lineCov"> 13215419 : return CPU_TO_BE16(native);</span></a>
+<a name="318"><span class="lineNum"> 318 </span> : : }</a>
+<a name="319"><span class="lineNum"> 319 </span> : : </a>
+<a name="320"><span class="lineNum"> 320 </span> : : /**</a>
+<a name="321"><span class="lineNum"> 321 </span> : : * be64_to_cpu - convert a big-endian uint64_t value</a>
+<a name="322"><span class="lineNum"> 322 </span> : : * @be_val: big-endian value to convert</a>
+<a name="323"><span class="lineNum"> 323 </span> : : */</a>
+<a name="324"><span class="lineNum"> 324 </span> :<span class="lineCov"> 116192086 : static inline uint64_t be64_to_cpu(beint64_t be_val)</span></a>
+<a name="325"><span class="lineNum"> 325 </span> : : {</a>
+<a name="326"><span class="lineNum"> 326 </span> :<span class="lineCov"> 116192086 : return BE64_TO_CPU(be_val);</span></a>
+<a name="327"><span class="lineNum"> 327 </span> : : }</a>
+<a name="328"><span class="lineNum"> 328 </span> : : </a>
+<a name="329"><span class="lineNum"> 329 </span> : : /**</a>
+<a name="330"><span class="lineNum"> 330 </span> : : * be32_to_cpu - convert a big-endian uint32_t value</a>
+<a name="331"><span class="lineNum"> 331 </span> : : * @be_val: big-endian value to convert</a>
+<a name="332"><span class="lineNum"> 332 </span> : : */</a>
+<a name="333"><span class="lineNum"> 333 </span> :<span class="lineCov"> 36870174 : static inline uint32_t be32_to_cpu(beint32_t be_val)</span></a>
+<a name="334"><span class="lineNum"> 334 </span> : : {</a>
+<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 36870147 : return BE32_TO_CPU(be_val);</span></a>
+<a name="336"><span class="lineNum"> 336 </span> : : }</a>
+<a name="337"><span class="lineNum"> 337 </span> : : </a>
+<a name="338"><span class="lineNum"> 338 </span> : : /**</a>
+<a name="339"><span class="lineNum"> 339 </span> : : * be16_to_cpu - convert a big-endian uint16_t value</a>
+<a name="340"><span class="lineNum"> 340 </span> : : * @be_val: big-endian value to convert</a>
+<a name="341"><span class="lineNum"> 341 </span> : : */</a>
+<a name="342"><span class="lineNum"> 342 </span> :<span class="lineCov"> 20021778 : static inline uint16_t be16_to_cpu(beint16_t be_val)</span></a>
+<a name="343"><span class="lineNum"> 343 </span> : : {</a>
+<a name="344"><span class="lineNum"> 344 </span> :<span class="lineCov"> 20021778 : return BE16_TO_CPU(be_val);</span></a>
+<a name="345"><span class="lineNum"> 345 </span> : : }</a>
+<a name="346"><span class="lineNum"> 346 </span> : : </a>
+<a name="347"><span class="lineNum"> 347 </span> : : /* Whichever they include first, they get these definitions. */</a>
+<a name="348"><span class="lineNum"> 348 </span> : : #ifdef CCAN_SHORT_TYPES_H</a>
+<a name="349"><span class="lineNum"> 349 </span> : : /**</a>
+<a name="350"><span class="lineNum"> 350 </span> : : * be64/be32/be16 - 64/32/16 bit big-endian representation.</a>
+<a name="351"><span class="lineNum"> 351 </span> : : */</a>
+<a name="352"><span class="lineNum"> 352 </span> : : typedef beint64_t be64;</a>
+<a name="353"><span class="lineNum"> 353 </span> : : typedef beint32_t be32;</a>
+<a name="354"><span class="lineNum"> 354 </span> : : typedef beint16_t be16;</a>
+<a name="355"><span class="lineNum"> 355 </span> : : </a>
+<a name="356"><span class="lineNum"> 356 </span> : : /**</a>
+<a name="357"><span class="lineNum"> 357 </span> : : * le64/le32/le16 - 64/32/16 bit little-endian representation.</a>
+<a name="358"><span class="lineNum"> 358 </span> : : */</a>
+<a name="359"><span class="lineNum"> 359 </span> : : typedef leint64_t le64;</a>
+<a name="360"><span class="lineNum"> 360 </span> : : typedef leint32_t le32;</a>
+<a name="361"><span class="lineNum"> 361 </span> : : typedef leint16_t le16;</a>
+<a name="362"><span class="lineNum"> 362 </span> : : #endif</a>
+<a name="363"><span class="lineNum"> 363 </span> : : #endif /* CCAN_ENDIAN_H */</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/ccan/endian/index-sort-b.html b/coverage-report/ccan/endian/index-sort-b.html
index 7726f64..16380de 100644
--- a/coverage-report/ccan/endian/index-sort-b.html
+++ b/coverage-report/ccan/endian/index-sort-b.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">30</td>
- <td class="headerCovTableEntry">30</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">24</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">15</td>
- <td class="headerCovTableEntry">15</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -87,9 +87,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">30 / 30</td>
+ <td class="coverNumHi">24 / 24</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">15 / 15</td>
+ <td class="coverNumHi">12 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/ccan/endian/index-sort-f.html b/coverage-report/ccan/endian/index-sort-f.html
index 91aef21..37ce99c 100644
--- a/coverage-report/ccan/endian/index-sort-f.html
+++ b/coverage-report/ccan/endian/index-sort-f.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">30</td>
- <td class="headerCovTableEntry">30</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">24</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">15</td>
- <td class="headerCovTableEntry">15</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -87,9 +87,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">30 / 30</td>
+ <td class="coverNumHi">24 / 24</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">15 / 15</td>
+ <td class="coverNumHi">12 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/ccan/endian/index-sort-l.html b/coverage-report/ccan/endian/index-sort-l.html
index 4cefe34..6b09d44 100644
--- a/coverage-report/ccan/endian/index-sort-l.html
+++ b/coverage-report/ccan/endian/index-sort-l.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">30</td>
- <td class="headerCovTableEntry">30</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">24</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">15</td>
- <td class="headerCovTableEntry">15</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -87,9 +87,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">30 / 30</td>
+ <td class="coverNumHi">24 / 24</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">15 / 15</td>
+ <td class="coverNumHi">12 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/ccan/endian/index.html b/coverage-report/ccan/endian/index.html
index 75e8d21..e46641c 100644
--- a/coverage-report/ccan/endian/index.html
+++ b/coverage-report/ccan/endian/index.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">30</td>
- <td class="headerCovTableEntry">30</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">24</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">15</td>
- <td class="headerCovTableEntry">15</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntry">12</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -87,9 +87,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">30 / 30</td>
+ <td class="coverNumHi">24 / 24</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">15 / 15</td>
+ <td class="coverNumHi">12 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/ccan/endian/test/index-sort-b.html b/coverage-report/ccan/endian/test/index-sort-b.html
index 1534844..76b840d 100644
--- a/coverage-report/ccan/endian/test/index-sort-b.html
+++ b/coverage-report/ccan/endian/test/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/endian/test/index-sort-f.html b/coverage-report/ccan/endian/test/index-sort-f.html
index e9d1c60..46f78c6 100644
--- a/coverage-report/ccan/endian/test/index-sort-f.html
+++ b/coverage-report/ccan/endian/test/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/endian/test/index-sort-l.html b/coverage-report/ccan/endian/test/index-sort-l.html
index 000a34b..bb0fec2 100644
--- a/coverage-report/ccan/endian/test/index-sort-l.html
+++ b/coverage-report/ccan/endian/test/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/endian/test/index.html b/coverage-report/ccan/endian/test/index.html
index b464d6a..d6dff85 100644
--- a/coverage-report/ccan/endian/test/index.html
+++ b/coverage-report/ccan/endian/test/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/endian/test/run.c.func-sort-c.html b/coverage-report/ccan/endian/test/run.c.func-sort-c.html
index c57009b..76ed108 100644
--- a/coverage-report/ccan/endian/test/run.c.func-sort-c.html
+++ b/coverage-report/ccan/endian/test/run.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/endian/test/run.c.func.html b/coverage-report/ccan/endian/test/run.c.func.html
index a60222ec..ca0ace0 100644
--- a/coverage-report/ccan/endian/test/run.c.func.html
+++ b/coverage-report/ccan/endian/test/run.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/endian/test/run.c.gcov.html b/coverage-report/ccan/endian/test/run.c.gcov.html
index 47cfb89..cb1a1b4 100644
--- a/coverage-report/ccan/endian/test/run.c.gcov.html
+++ b/coverage-report/ccan/endian/test/run.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -74,7 +74,7 @@
<a name="3"><span class="lineNum"> 3 </span> : : #include &lt;stddef.h&gt;</a>
<a name="4"><span class="lineNum"> 4 </span> : : #include &lt;ccan/tap/tap.h&gt;</a>
<a name="5"><span class="lineNum"> 5 </span> : : </a>
-<a name="6"><span class="lineNum"> 6 </span> :<span class="lineCov"> 2 : int main(int argc, char *argv[])</span></a>
+<a name="6"><span class="lineNum"> 6 </span> :<span class="lineCov"> 2 : int main(void)</span></a>
<a name="7"><span class="lineNum"> 7 </span> : : {</a>
<a name="8"><span class="lineNum"> 8 </span> : : union {</a>
<a name="9"><span class="lineNum"> 9 </span> : : uint64_t u64;</a>
@@ -89,95 +89,92 @@
<a name="18"><span class="lineNum"> 18 </span> : : unsigned char u16_bytes[2];</a>
<a name="19"><span class="lineNum"> 19 </span> : : } u16;</a>
<a name="20"><span class="lineNum"> 20 </span> : : </a>
-<a name="21"><span class="lineNum"> 21 </span> : : (void)argc;</a>
-<a name="22"><span class="lineNum"> 22 </span> : : (void)argv;</a>
-<a name="23"><span class="lineNum"> 23 </span> : : </a>
-<a name="24"><span class="lineNum"> 24 </span> : : plan_tests(48);</a>
-<a name="25"><span class="lineNum"> 25 </span> : : </a>
-<a name="26"><span class="lineNum"> 26 </span> : : /* Straight swap tests. */</a>
-<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 2 : u64.u64_bytes[0] = 0x00;</span></a>
-<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 2 : u64.u64_bytes[1] = 0x11;</span></a>
-<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 2 : u64.u64_bytes[2] = 0x22;</span></a>
-<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 2 : u64.u64_bytes[3] = 0x33;</span></a>
-<a name="31"><span class="lineNum"> 31 </span> :<span class="lineCov"> 2 : u64.u64_bytes[4] = 0x44;</span></a>
-<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 2 : u64.u64_bytes[5] = 0x55;</span></a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 2 : u64.u64_bytes[6] = 0x66;</span></a>
-<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 2 : u64.u64_bytes[7] = 0x77;</span></a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 2 : u64.u64 = bswap_64(u64.u64);</span></a>
-<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[7] == 0x00);</span></a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[6] == 0x11);</span></a>
-<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[5] == 0x22);</span></a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[4] == 0x33);</span></a>
-<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[3] == 0x44);</span></a>
-<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[2] == 0x55);</span></a>
-<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[1] == 0x66);</span></a>
-<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[0] == 0x77);</span></a>
-<a name="44"><span class="lineNum"> 44 </span> : : </a>
-<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 2 : u32.u32_bytes[0] = 0x00;</span></a>
-<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 2 : u32.u32_bytes[1] = 0x11;</span></a>
-<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 2 : u32.u32_bytes[2] = 0x22;</span></a>
-<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 2 : u32.u32_bytes[3] = 0x33;</span></a>
-<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 2 : u32.u32 = bswap_32(u32.u32);</span></a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[3] == 0x00);</span></a>
-<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[2] == 0x11);</span></a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[1] == 0x22);</span></a>
-<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[0] == 0x33);</span></a>
-<a name="54"><span class="lineNum"> 54 </span> : : </a>
-<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 2 : u16.u16_bytes[0] = 0x00;</span></a>
-<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 2 : u16.u16_bytes[1] = 0x11;</span></a>
-<a name="57"><span class="lineNum"> 57 </span> :<span class="lineCov"> 2 : u16.u16 = bswap_16(u16.u16);</span></a>
-<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 2 : ok1(u16.u16_bytes[1] == 0x00);</span></a>
-<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 2 : ok1(u16.u16_bytes[0] == 0x11);</span></a>
-<a name="60"><span class="lineNum"> 60 </span> : : </a>
-<a name="61"><span class="lineNum"> 61 </span> : : /* Endian tests. */</a>
-<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 2 : u64.u64 = cpu_to_le64(0x0011223344556677ULL);</span></a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[0] == 0x77);</span></a>
-<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[1] == 0x66);</span></a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[2] == 0x55);</span></a>
-<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[3] == 0x44);</span></a>
-<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[4] == 0x33);</span></a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[5] == 0x22);</span></a>
-<a name="69"><span class="lineNum"> 69 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[6] == 0x11);</span></a>
-<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[7] == 0x00);</span></a>
-<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 2 : ok1(le64_to_cpu(u64.u64) == 0x0011223344556677ULL);</span></a>
-<a name="72"><span class="lineNum"> 72 </span> : : </a>
-<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 2 : u64.u64 = cpu_to_be64(0x0011223344556677ULL);</span></a>
-<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[7] == 0x77);</span></a>
-<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[6] == 0x66);</span></a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[5] == 0x55);</span></a>
-<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[4] == 0x44);</span></a>
-<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[3] == 0x33);</span></a>
-<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[2] == 0x22);</span></a>
-<a name="80"><span class="lineNum"> 80 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[1] == 0x11);</span></a>
-<a name="81"><span class="lineNum"> 81 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[0] == 0x00);</span></a>
-<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 2 : ok1(be64_to_cpu(u64.u64) == 0x0011223344556677ULL);</span></a>
-<a name="83"><span class="lineNum"> 83 </span> : : </a>
-<a name="84"><span class="lineNum"> 84 </span> :<span class="lineCov"> 2 : u32.u32 = cpu_to_le32(0x00112233);</span></a>
-<a name="85"><span class="lineNum"> 85 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[0] == 0x33);</span></a>
-<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[1] == 0x22);</span></a>
-<a name="87"><span class="lineNum"> 87 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[2] == 0x11);</span></a>
-<a name="88"><span class="lineNum"> 88 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[3] == 0x00);</span></a>
-<a name="89"><span class="lineNum"> 89 </span> :<span class="lineCov"> 2 : ok1(le32_to_cpu(u32.u32) == 0x00112233);</span></a>
-<a name="90"><span class="lineNum"> 90 </span> : : </a>
-<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 2 : u32.u32 = cpu_to_be32(0x00112233);</span></a>
-<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[3] == 0x33);</span></a>
-<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[2] == 0x22);</span></a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[1] == 0x11);</span></a>
-<a name="95"><span class="lineNum"> 95 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[0] == 0x00);</span></a>
-<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 2 : ok1(be32_to_cpu(u32.u32) == 0x00112233);</span></a>
-<a name="97"><span class="lineNum"> 97 </span> : : </a>
-<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 2 : u16.u16 = cpu_to_le16(0x0011);</span></a>
-<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 2 : ok1(u16.u16_bytes[0] == 0x11);</span></a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 2 : ok1(u16.u16_bytes[1] == 0x00);</span></a>
-<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 2 : ok1(le16_to_cpu(u16.u16) == 0x0011);</span></a>
-<a name="102"><span class="lineNum"> 102 </span> : : </a>
-<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 2 : u16.u16 = cpu_to_be16(0x0011);</span></a>
-<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 2 : ok1(u16.u16_bytes[1] == 0x11);</span></a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 2 : ok1(u16.u16_bytes[0] == 0x00);</span></a>
-<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 2 : ok1(be16_to_cpu(u16.u16) == 0x0011);</span></a>
-<a name="107"><span class="lineNum"> 107 </span> : : </a>
-<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 2 : exit(exit_status());</span></a>
-<a name="109"><span class="lineNum"> 109 </span> : : }</a>
+<a name="21"><span class="lineNum"> 21 </span> : : plan_tests(48);</a>
+<a name="22"><span class="lineNum"> 22 </span> : : </a>
+<a name="23"><span class="lineNum"> 23 </span> : : /* Straight swap tests. */</a>
+<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 2 : u64.u64_bytes[0] = 0x00;</span></a>
+<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 2 : u64.u64_bytes[1] = 0x11;</span></a>
+<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 2 : u64.u64_bytes[2] = 0x22;</span></a>
+<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 2 : u64.u64_bytes[3] = 0x33;</span></a>
+<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 2 : u64.u64_bytes[4] = 0x44;</span></a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 2 : u64.u64_bytes[5] = 0x55;</span></a>
+<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 2 : u64.u64_bytes[6] = 0x66;</span></a>
+<a name="31"><span class="lineNum"> 31 </span> :<span class="lineCov"> 2 : u64.u64_bytes[7] = 0x77;</span></a>
+<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 2 : u64.u64 = bswap_64(u64.u64);</span></a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[7] == 0x00);</span></a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[6] == 0x11);</span></a>
+<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[5] == 0x22);</span></a>
+<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[4] == 0x33);</span></a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[3] == 0x44);</span></a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[2] == 0x55);</span></a>
+<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[1] == 0x66);</span></a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[0] == 0x77);</span></a>
+<a name="41"><span class="lineNum"> 41 </span> : : </a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 2 : u32.u32_bytes[0] = 0x00;</span></a>
+<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 2 : u32.u32_bytes[1] = 0x11;</span></a>
+<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 2 : u32.u32_bytes[2] = 0x22;</span></a>
+<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 2 : u32.u32_bytes[3] = 0x33;</span></a>
+<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 2 : u32.u32 = bswap_32(u32.u32);</span></a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[3] == 0x00);</span></a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[2] == 0x11);</span></a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[1] == 0x22);</span></a>
+<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[0] == 0x33);</span></a>
+<a name="51"><span class="lineNum"> 51 </span> : : </a>
+<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 2 : u16.u16_bytes[0] = 0x00;</span></a>
+<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 2 : u16.u16_bytes[1] = 0x11;</span></a>
+<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 2 : u16.u16 = bswap_16(u16.u16);</span></a>
+<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 2 : ok1(u16.u16_bytes[1] == 0x00);</span></a>
+<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 2 : ok1(u16.u16_bytes[0] == 0x11);</span></a>
+<a name="57"><span class="lineNum"> 57 </span> : : </a>
+<a name="58"><span class="lineNum"> 58 </span> : : /* Endian tests. */</a>
+<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 2 : u64.u64 = cpu_to_le64(0x0011223344556677ULL);</span></a>
+<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[0] == 0x77);</span></a>
+<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[1] == 0x66);</span></a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[2] == 0x55);</span></a>
+<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[3] == 0x44);</span></a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[4] == 0x33);</span></a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[5] == 0x22);</span></a>
+<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[6] == 0x11);</span></a>
+<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[7] == 0x00);</span></a>
+<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 2 : ok1(le64_to_cpu(u64.u64) == 0x0011223344556677ULL);</span></a>
+<a name="69"><span class="lineNum"> 69 </span> : : </a>
+<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 2 : u64.u64 = cpu_to_be64(0x0011223344556677ULL);</span></a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[7] == 0x77);</span></a>
+<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[6] == 0x66);</span></a>
+<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[5] == 0x55);</span></a>
+<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[4] == 0x44);</span></a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[3] == 0x33);</span></a>
+<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[2] == 0x22);</span></a>
+<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[1] == 0x11);</span></a>
+<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 2 : ok1(u64.u64_bytes[0] == 0x00);</span></a>
+<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 2 : ok1(be64_to_cpu(u64.u64) == 0x0011223344556677ULL);</span></a>
+<a name="80"><span class="lineNum"> 80 </span> : : </a>
+<a name="81"><span class="lineNum"> 81 </span> :<span class="lineCov"> 2 : u32.u32 = cpu_to_le32(0x00112233);</span></a>
+<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[0] == 0x33);</span></a>
+<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[1] == 0x22);</span></a>
+<a name="84"><span class="lineNum"> 84 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[2] == 0x11);</span></a>
+<a name="85"><span class="lineNum"> 85 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[3] == 0x00);</span></a>
+<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 2 : ok1(le32_to_cpu(u32.u32) == 0x00112233);</span></a>
+<a name="87"><span class="lineNum"> 87 </span> : : </a>
+<a name="88"><span class="lineNum"> 88 </span> :<span class="lineCov"> 2 : u32.u32 = cpu_to_be32(0x00112233);</span></a>
+<a name="89"><span class="lineNum"> 89 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[3] == 0x33);</span></a>
+<a name="90"><span class="lineNum"> 90 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[2] == 0x22);</span></a>
+<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[1] == 0x11);</span></a>
+<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 2 : ok1(u32.u32_bytes[0] == 0x00);</span></a>
+<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 2 : ok1(be32_to_cpu(u32.u32) == 0x00112233);</span></a>
+<a name="94"><span class="lineNum"> 94 </span> : : </a>
+<a name="95"><span class="lineNum"> 95 </span> :<span class="lineCov"> 2 : u16.u16 = cpu_to_le16(0x0011);</span></a>
+<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 2 : ok1(u16.u16_bytes[0] == 0x11);</span></a>
+<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 2 : ok1(u16.u16_bytes[1] == 0x00);</span></a>
+<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 2 : ok1(le16_to_cpu(u16.u16) == 0x0011);</span></a>
+<a name="99"><span class="lineNum"> 99 </span> : : </a>
+<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 2 : u16.u16 = cpu_to_be16(0x0011);</span></a>
+<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 2 : ok1(u16.u16_bytes[1] == 0x11);</span></a>
+<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 2 : ok1(u16.u16_bytes[0] == 0x00);</span></a>
+<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 2 : ok1(be16_to_cpu(u16.u16) == 0x0011);</span></a>
+<a name="104"><span class="lineNum"> 104 </span> : : </a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 2 : exit(exit_status());</span></a>
+<a name="106"><span class="lineNum"> 106 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/ccan/heap/heap.c.func-sort-c.html b/coverage-report/ccan/heap/heap.c.func-sort-c.html
index d2bc109..08ffab6 100644
--- a/coverage-report/ccan/heap/heap.c.func-sort-c.html
+++ b/coverage-report/ccan/heap/heap.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
diff --git a/coverage-report/ccan/heap/heap.c.func.html b/coverage-report/ccan/heap/heap.c.func.html
index d5298dc..ef1a61d 100644
--- a/coverage-report/ccan/heap/heap.c.func.html
+++ b/coverage-report/ccan/heap/heap.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
diff --git a/coverage-report/ccan/heap/heap.c.gcov.html b/coverage-report/ccan/heap/heap.c.gcov.html
index 07f82d0..0178502 100644
--- a/coverage-report/ccan/heap/heap.c.gcov.html
+++ b/coverage-report/ccan/heap/heap.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
diff --git a/coverage-report/ccan/heap/index-sort-b.html b/coverage-report/ccan/heap/index-sort-b.html
index fc78a98..30b3d46 100644
--- a/coverage-report/ccan/heap/index-sort-b.html
+++ b/coverage-report/ccan/heap/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
diff --git a/coverage-report/ccan/heap/index-sort-f.html b/coverage-report/ccan/heap/index-sort-f.html
index 9f6a959..87b746c 100644
--- a/coverage-report/ccan/heap/index-sort-f.html
+++ b/coverage-report/ccan/heap/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
diff --git a/coverage-report/ccan/heap/index-sort-l.html b/coverage-report/ccan/heap/index-sort-l.html
index 6de54c9..b44c601 100644
--- a/coverage-report/ccan/heap/index-sort-l.html
+++ b/coverage-report/ccan/heap/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
diff --git a/coverage-report/ccan/heap/index.html b/coverage-report/ccan/heap/index.html
index 2edfed8..4c94118 100644
--- a/coverage-report/ccan/heap/index.html
+++ b/coverage-report/ccan/heap/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
diff --git a/coverage-report/ccan/heap/test/index-sort-b.html b/coverage-report/ccan/heap/test/index-sort-b.html
index c6b0113..a8d20f9 100644
--- a/coverage-report/ccan/heap/test/index-sort-b.html
+++ b/coverage-report/ccan/heap/test/index-sort-b.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">53</td>
- <td class="headerCovTableEntry">70</td>
- <td class="headerCovTableEntryMed">75.7 %</td>
+ <td class="headerCovTableEntry">55</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryMed">76.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="run.c.gcov.html">run.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=76 height=10 alt="75.7%"><img src="../../../snow.png" width=24 height=10 alt="75.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=76 height=10 alt="76.4%"><img src="../../../snow.png" width=24 height=10 alt="76.4%"></td></tr></table>
</td>
- <td class="coverPerMed">75.7&nbsp;%</td>
- <td class="coverNumMed">53 / 70</td>
+ <td class="coverPerMed">76.4&nbsp;%</td>
+ <td class="coverNumMed">55 / 72</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/ccan/heap/test/index-sort-f.html b/coverage-report/ccan/heap/test/index-sort-f.html
index ffed1c8..f62f7d6 100644
--- a/coverage-report/ccan/heap/test/index-sort-f.html
+++ b/coverage-report/ccan/heap/test/index-sort-f.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">53</td>
- <td class="headerCovTableEntry">70</td>
- <td class="headerCovTableEntryMed">75.7 %</td>
+ <td class="headerCovTableEntry">55</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryMed">76.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="run.c.gcov.html">run.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=76 height=10 alt="75.7%"><img src="../../../snow.png" width=24 height=10 alt="75.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=76 height=10 alt="76.4%"><img src="../../../snow.png" width=24 height=10 alt="76.4%"></td></tr></table>
</td>
- <td class="coverPerMed">75.7&nbsp;%</td>
- <td class="coverNumMed">53 / 70</td>
+ <td class="coverPerMed">76.4&nbsp;%</td>
+ <td class="coverNumMed">55 / 72</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/ccan/heap/test/index-sort-l.html b/coverage-report/ccan/heap/test/index-sort-l.html
index a00a096..c5214f2 100644
--- a/coverage-report/ccan/heap/test/index-sort-l.html
+++ b/coverage-report/ccan/heap/test/index-sort-l.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">53</td>
- <td class="headerCovTableEntry">70</td>
- <td class="headerCovTableEntryMed">75.7 %</td>
+ <td class="headerCovTableEntry">55</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryMed">76.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="run.c.gcov.html">run.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=76 height=10 alt="75.7%"><img src="../../../snow.png" width=24 height=10 alt="75.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=76 height=10 alt="76.4%"><img src="../../../snow.png" width=24 height=10 alt="76.4%"></td></tr></table>
</td>
- <td class="coverPerMed">75.7&nbsp;%</td>
- <td class="coverNumMed">53 / 70</td>
+ <td class="coverPerMed">76.4&nbsp;%</td>
+ <td class="coverNumMed">55 / 72</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/ccan/heap/test/index.html b/coverage-report/ccan/heap/test/index.html
index ddbc273..46a4283 100644
--- a/coverage-report/ccan/heap/test/index.html
+++ b/coverage-report/ccan/heap/test/index.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">53</td>
- <td class="headerCovTableEntry">70</td>
- <td class="headerCovTableEntryMed">75.7 %</td>
+ <td class="headerCovTableEntry">55</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryMed">76.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="run.c.gcov.html">run.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=76 height=10 alt="75.7%"><img src="../../../snow.png" width=24 height=10 alt="75.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=76 height=10 alt="76.4%"><img src="../../../snow.png" width=24 height=10 alt="76.4%"></td></tr></table>
</td>
- <td class="coverPerMed">75.7&nbsp;%</td>
- <td class="coverNumMed">53 / 70</td>
+ <td class="coverPerMed">76.4&nbsp;%</td>
+ <td class="coverNumMed">55 / 72</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/ccan/heap/test/run.c.func-sort-c.html b/coverage-report/ccan/heap/test/run.c.func-sort-c.html
index 1bb919c..39ca9aa 100644
--- a/coverage-report/ccan/heap/test/run.c.func-sort-c.html
+++ b/coverage-report/ccan/heap/test/run.c.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">53</td>
- <td class="headerCovTableEntry">70</td>
- <td class="headerCovTableEntryMed">75.7 %</td>
+ <td class="headerCovTableEntry">55</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryMed">76.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@@ -86,15 +86,15 @@
</tr>
<tr>
<td class="coverFn"><a href="run.c.gcov.html#12">heap_ok</a></td>
- <td class="coverFnHi">50022256</td>
+ <td class="coverFnHi">50022200</td>
</tr>
<tr>
<td class="coverFn"><a href="run.c.gcov.html#43">__less</a></td>
- <td class="coverFnHi">50229620</td>
+ <td class="coverFnHi">50229600</td>
</tr>
<tr>
<td class="coverFn"><a href="run.c.gcov.html#38">less</a></td>
- <td class="coverFnHi">50239618</td>
+ <td class="coverFnHi">50239600</td>
</tr>
</table>
<br>
diff --git a/coverage-report/ccan/heap/test/run.c.func.html b/coverage-report/ccan/heap/test/run.c.func.html
index 7748bc8..edefd23 100644
--- a/coverage-report/ccan/heap/test/run.c.func.html
+++ b/coverage-report/ccan/heap/test/run.c.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">53</td>
- <td class="headerCovTableEntry">70</td>
- <td class="headerCovTableEntryMed">75.7 %</td>
+ <td class="headerCovTableEntry">55</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryMed">76.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@@ -70,7 +70,7 @@
</tr>
<tr>
<td class="coverFn"><a href="run.c.gcov.html#43">__less</a></td>
- <td class="coverFnHi">50229620</td>
+ <td class="coverFnHi">50229600</td>
</tr>
<tr>
<td class="coverFn"><a href="run.c.gcov.html#53">__more</a></td>
@@ -78,11 +78,11 @@
</tr>
<tr>
<td class="coverFn"><a href="run.c.gcov.html#12">heap_ok</a></td>
- <td class="coverFnHi">50022256</td>
+ <td class="coverFnHi">50022200</td>
</tr>
<tr>
<td class="coverFn"><a href="run.c.gcov.html#38">less</a></td>
- <td class="coverFnHi">50239618</td>
+ <td class="coverFnHi">50239600</td>
</tr>
<tr>
<td class="coverFn"><a href="run.c.gcov.html#122">main</a></td>
diff --git a/coverage-report/ccan/heap/test/run.c.gcov.html b/coverage-report/ccan/heap/test/run.c.gcov.html
index 7d76036..3d8e0d0 100644
--- a/coverage-report/ccan/heap/test/run.c.gcov.html
+++ b/coverage-report/ccan/heap/test/run.c.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">53</td>
- <td class="headerCovTableEntry">70</td>
- <td class="headerCovTableEntryMed">75.7 %</td>
+ <td class="headerCovTableEntry">55</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryMed">76.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@@ -82,40 +82,40 @@
<a name="11"><span class="lineNum"> 11 </span> : : int v;</a>
<a name="12"><span class="lineNum"> 12 </span> : : };</a>
<a name="13"><span class="lineNum"> 13 </span> : : </a>
-<a name="14"><span class="lineNum"> 14 </span> :<span class="lineCov"> 50022256 : static bool heap_ok(const struct heap *h, heap_less_func_t less, int i)</span></a>
+<a name="14"><span class="lineNum"> 14 </span> :<span class="lineCov"> 50022200 : static bool heap_ok(const struct heap *h, heap_less_func_t less, int i)</span></a>
<a name="15"><span class="lineNum"> 15 </span> : : {</a>
<a name="16"><span class="lineNum"> 16 </span> : : int l, r;</a>
<a name="17"><span class="lineNum"> 17 </span> : : </a>
-<a name="18"><span class="lineNum"> 18 </span> :<span class="lineCov"> 50022256 : l = 2 * i + 1;</span></a>
-<a name="19"><span class="lineNum"> 19 </span> :<span class="lineCov"> 50022256 : r = l + 1;</span></a>
+<a name="18"><span class="lineNum"> 18 </span> :<span class="lineCov"> 50022200 : l = 2 * i + 1;</span></a>
+<a name="19"><span class="lineNum"> 19 </span> :<span class="lineCov"> 50022200 : r = l + 1;</span></a>
<a name="20"><span class="lineNum"> 20 </span> : : </a>
-<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 50022256 : if (l &lt; h-&gt;len) {</span></a>
-<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 25006088 : if (less(h-&gt;data[l], h-&gt;data[i])) {</span></a>
+<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 50022200 : if (l &lt; h-&gt;len) {</span></a>
+<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 25006000 : if (less(h-&gt;data[l], h-&gt;data[i])) {</span></a>
<a name="23"><span class="lineNum"> 23 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;heap property violation\n&quot;);</span></a>
<a name="24"><span class="lineNum"> 24 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
<a name="25"><span class="lineNum"> 25 </span> : : }</a>
-<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 25006088 : if (!heap_ok(h, less, l))</span></a>
+<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 25006000 : if (!heap_ok(h, less, l))</span></a>
<a name="27"><span class="lineNum"> 27 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
<a name="28"><span class="lineNum"> 28 </span> : : }</a>
-<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 50022256 : if (r &lt; h-&gt;len) {</span></a>
-<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 24996022 : if (less(h-&gt;data[r], h-&gt;data[i])) {</span></a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 50022200 : if (r &lt; h-&gt;len) {</span></a>
+<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 24996000 : if (less(h-&gt;data[r], h-&gt;data[i])) {</span></a>
<a name="31"><span class="lineNum"> 31 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;heap property violation\n&quot;);</span></a>
<a name="32"><span class="lineNum"> 32 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
<a name="33"><span class="lineNum"> 33 </span> : : }</a>
-<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 24996022 : if (!heap_ok(h, less, r))</span></a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 24996000 : if (!heap_ok(h, less, r))</span></a>
<a name="35"><span class="lineNum"> 35 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
<a name="36"><span class="lineNum"> 36 </span> : : }</a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 50022256 : return true;</span></a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 50022200 : return true;</span></a>
<a name="38"><span class="lineNum"> 38 </span> : : }</a>
<a name="39"><span class="lineNum"> 39 </span> : : </a>
-<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 50239618 : static bool less(const struct item *a, const struct item *b)</span></a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 50239600 : static bool less(const struct item *a, const struct item *b)</span></a>
<a name="41"><span class="lineNum"> 41 </span> : : {</a>
-<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 50239618 : return a-&gt;v &lt; b-&gt;v;</span></a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 50239600 : return a-&gt;v &lt; b-&gt;v;</span></a>
<a name="43"><span class="lineNum"> 43 </span> : : }</a>
<a name="44"><span class="lineNum"> 44 </span> : : </a>
-<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 50229620 : static bool __less(const void *a, const void *b)</span></a>
+<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 50229600 : static bool __less(const void *a, const void *b)</span></a>
<a name="46"><span class="lineNum"> 46 </span> : : {</a>
-<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 50229620 : return less(a, b);</span></a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 50229600 : return less(a, b);</span></a>
<a name="48"><span class="lineNum"> 48 </span> : : }</a>
<a name="49"><span class="lineNum"> 49 </span> : : </a>
<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 32684 : static bool more(const struct item *a, const struct item *b)</span></a>
@@ -153,7 +153,7 @@
<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 10068 : item = &amp;items[i];</span></a>
<a name="83"><span class="lineNum"> 83 </span> : : </a>
<a name="84"><span class="lineNum"> 84 </span> :<span class="lineCov"> 10068 : item-&gt;v = rand();</span></a>
-<a name="85"><span class="lineNum"> 85 </span> : : /* printf(&quot;pushing %d\n&quot;, item-&gt;v); */</a>
+<a name="85"><span class="lineNum"> 85 </span> :<span class="lineCov"> 10068 : printf(&quot;pushing %d\n&quot;, item-&gt;v);</span></a>
<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 10068 : heap_push(h, item);</span></a>
<a name="87"><span class="lineNum"> 87 </span> :<span class="lineCov"> 10068 : if (!heap_ok(h, is_less ? __less : __more, 0))</span></a>
<a name="88"><span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
@@ -175,7 +175,7 @@
<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 10068 : item = heap_pop(h);</span></a>
<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 10068 : if (!heap_ok(h, is_less ? __less : __more, 0))</span></a>
<a name="106"><span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="107"><span class="lineNum"> 107 </span> : : /* printf(&quot;popped %d\n&quot;, item-&gt;v); */</a>
+<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 10068 : printf(&quot;popped %d\n&quot;, item-&gt;v);</span></a>
<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 10068 : if (i &gt; 0) {</span></a>
<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 10062 : if (is_less) {</span></a>
<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 9998 : if (less(item, prev))</span></a>
diff --git a/coverage-report/ccan/list/index-sort-b.html b/coverage-report/ccan/list/index-sort-b.html
index a4cd31c..edb5fe4 100644
--- a/coverage-report/ccan/list/index-sort-b.html
+++ b/coverage-report/ccan/list/index-sort-b.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">90</td>
- <td class="headerCovTableEntry">91</td>
- <td class="headerCovTableEntryHi">98.9 %</td>
+ <td class="headerCovTableEntry">114</td>
+ <td class="headerCovTableEntry">115</td>
+ <td class="headerCovTableEntryHi">99.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">18</td>
- <td class="headerCovTableEntry">18</td>
+ <td class="headerCovTableEntry">23</td>
+ <td class="headerCovTableEntry">23</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -87,9 +87,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">72 / 72</td>
+ <td class="coverNumHi">96 / 96</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">15 / 15</td>
+ <td class="coverNumHi">20 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/ccan/list/index-sort-f.html b/coverage-report/ccan/list/index-sort-f.html
index 95358ae..4fbe3fa 100644
--- a/coverage-report/ccan/list/index-sort-f.html
+++ b/coverage-report/ccan/list/index-sort-f.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">90</td>
- <td class="headerCovTableEntry">91</td>
- <td class="headerCovTableEntryHi">98.9 %</td>
+ <td class="headerCovTableEntry">114</td>
+ <td class="headerCovTableEntry">115</td>
+ <td class="headerCovTableEntryHi">99.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">18</td>
- <td class="headerCovTableEntry">18</td>
+ <td class="headerCovTableEntry">23</td>
+ <td class="headerCovTableEntry">23</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -99,9 +99,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">72 / 72</td>
+ <td class="coverNumHi">96 / 96</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">15 / 15</td>
+ <td class="coverNumHi">20 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/ccan/list/index-sort-l.html b/coverage-report/ccan/list/index-sort-l.html
index bd2391e..f90ac6b 100644
--- a/coverage-report/ccan/list/index-sort-l.html
+++ b/coverage-report/ccan/list/index-sort-l.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">90</td>
- <td class="headerCovTableEntry">91</td>
- <td class="headerCovTableEntryHi">98.9 %</td>
+ <td class="headerCovTableEntry">114</td>
+ <td class="headerCovTableEntry">115</td>
+ <td class="headerCovTableEntryHi">99.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">18</td>
- <td class="headerCovTableEntry">18</td>
+ <td class="headerCovTableEntry">23</td>
+ <td class="headerCovTableEntry">23</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -99,9 +99,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">72 / 72</td>
+ <td class="coverNumHi">96 / 96</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">15 / 15</td>
+ <td class="coverNumHi">20 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/ccan/list/index.html b/coverage-report/ccan/list/index.html
index f85a60f..4df0948 100644
--- a/coverage-report/ccan/list/index.html
+++ b/coverage-report/ccan/list/index.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">90</td>
- <td class="headerCovTableEntry">91</td>
- <td class="headerCovTableEntryHi">98.9 %</td>
+ <td class="headerCovTableEntry">114</td>
+ <td class="headerCovTableEntry">115</td>
+ <td class="headerCovTableEntryHi">99.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">18</td>
- <td class="headerCovTableEntry">18</td>
+ <td class="headerCovTableEntry">23</td>
+ <td class="headerCovTableEntry">23</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -99,9 +99,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">72 / 72</td>
+ <td class="coverNumHi">96 / 96</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">15 / 15</td>
+ <td class="coverNumHi">20 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/ccan/list/list.c.func-sort-c.html b/coverage-report/ccan/list/list.c.func-sort-c.html
index fe252d3..4206eda 100644
--- a/coverage-report/ccan/list/list.c.func-sort-c.html
+++ b/coverage-report/ccan/list/list.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@@ -70,15 +70,15 @@
</tr>
<tr>
<td class="coverFn"><a href="list.c.gcov.html#4">corrupt</a></td>
- <td class="coverFnHi">36</td>
+ <td class="coverFnHi">70</td>
</tr>
<tr>
<td class="coverFn"><a href="list.c.gcov.html#36">list_check</a></td>
- <td class="coverFnHi">690</td>
+ <td class="coverFnHi">2630</td>
</tr>
<tr>
<td class="coverFn"><a href="list.c.gcov.html#18">list_check_node</a></td>
- <td class="coverFnHi">858</td>
+ <td class="coverFnHi">3260</td>
</tr>
</table>
<br>
diff --git a/coverage-report/ccan/list/list.c.func.html b/coverage-report/ccan/list/list.c.func.html
index 9f8dbec..8a7a036 100644
--- a/coverage-report/ccan/list/list.c.func.html
+++ b/coverage-report/ccan/list/list.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@@ -70,15 +70,15 @@
</tr>
<tr>
<td class="coverFn"><a href="list.c.gcov.html#4">corrupt</a></td>
- <td class="coverFnHi">36</td>
+ <td class="coverFnHi">70</td>
</tr>
<tr>
<td class="coverFn"><a href="list.c.gcov.html#36">list_check</a></td>
- <td class="coverFnHi">690</td>
+ <td class="coverFnHi">2630</td>
</tr>
<tr>
<td class="coverFn"><a href="list.c.gcov.html#18">list_check_node</a></td>
- <td class="coverFnHi">858</td>
+ <td class="coverFnHi">3260</td>
</tr>
</table>
<br>
diff --git a/coverage-report/ccan/list/list.c.gcov.html b/coverage-report/ccan/list/list.c.gcov.html
index ca37e1b..0375769 100644
--- a/coverage-report/ccan/list/list.c.gcov.html
+++ b/coverage-report/ccan/list/list.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@@ -74,43 +74,43 @@
<a name="3"><span class="lineNum"> 3 </span> : : #include &lt;stdlib.h&gt;</a>
<a name="4"><span class="lineNum"> 4 </span> : : #include &quot;list.h&quot;</a>
<a name="5"><span class="lineNum"> 5 </span> : : </a>
-<a name="6"><span class="lineNum"> 6 </span> :<span class="lineCov"> 36 : static void *corrupt(const char *abortstr,</span></a>
+<a name="6"><span class="lineNum"> 6 </span> :<span class="lineCov"> 70 : static void *corrupt(const char *abortstr,</span></a>
<a name="7"><span class="lineNum"> 7 </span> : : const struct list_node *head,</a>
<a name="8"><span class="lineNum"> 8 </span> : : const struct list_node *node,</a>
<a name="9"><span class="lineNum"> 9 </span> : : unsigned int count)</a>
<a name="10"><span class="lineNum"> 10 </span> : : {</a>
-<a name="11"><span class="lineNum"> 11 </span> :<span class="lineCov"> 36 : if (abortstr) {</span></a>
-<a name="12"><span class="lineNum"> 12 </span> :<span class="lineCov"> 18 : fprintf(stderr,</span></a>
+<a name="11"><span class="lineNum"> 11 </span> :<span class="lineCov"> 70 : if (abortstr) {</span></a>
+<a name="12"><span class="lineNum"> 12 </span> :<span class="lineCov"> 40 : fprintf(stderr,</span></a>
<a name="13"><span class="lineNum"> 13 </span> : : &quot;%s: prev corrupt in node %p (%u) of %p\n&quot;,</a>
<a name="14"><span class="lineNum"> 14 </span> : : abortstr, node, count, head);</a>
-<a name="15"><span class="lineNum"> 15 </span> :<span class="lineCov"> 18 : abort();</span></a>
+<a name="15"><span class="lineNum"> 15 </span> :<span class="lineCov"> 40 : abort();</span></a>
<a name="16"><span class="lineNum"> 16 </span> : : }</a>
-<a name="17"><span class="lineNum"> 17 </span> :<span class="lineCov"> 18 : return NULL;</span></a>
+<a name="17"><span class="lineNum"> 17 </span> :<span class="lineCov"> 30 : return NULL;</span></a>
<a name="18"><span class="lineNum"> 18 </span> : : }</a>
<a name="19"><span class="lineNum"> 19 </span> : : </a>
-<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 858 : struct list_node *list_check_node(const struct list_node *node,</span></a>
+<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 3260 : struct list_node *list_check_node(const struct list_node *node,</span></a>
<a name="21"><span class="lineNum"> 21 </span> : : const char *abortstr)</a>
<a name="22"><span class="lineNum"> 22 </span> : : {</a>
<a name="23"><span class="lineNum"> 23 </span> :<span class="lineNoCov"> 0 : const struct list_node *p, *n;</span></a>
-<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 858 : int count = 0;</span></a>
+<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 3260 : int count = 0;</span></a>
<a name="25"><span class="lineNum"> 25 </span> : : </a>
-<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 2172 : for (p = node, n = node-&gt;next; n != node; p = n, n = n-&gt;next) {</span></a>
-<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 1326 : count++;</span></a>
-<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 1326 : if (n-&gt;prev != p)</span></a>
-<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 12 : return corrupt(abortstr, node, n, count);</span></a>
+<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 8290 : for (p = node, n = node-&gt;next; n != node; p = n, n = n-&gt;next) {</span></a>
+<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 5050 : count++;</span></a>
+<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 5050 : if (n-&gt;prev != p)</span></a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 20 : return corrupt(abortstr, node, n, count);</span></a>
<a name="30"><span class="lineNum"> 30 </span> : : }</a>
<a name="31"><span class="lineNum"> 31 </span> : : /* Check prev on head node. */</a>
-<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 846 : if (node-&gt;prev != p)</span></a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 24 : return corrupt(abortstr, node, node, 0);</span></a>
+<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 3240 : if (node-&gt;prev != p)</span></a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 50 : return corrupt(abortstr, node, node, 0);</span></a>
<a name="34"><span class="lineNum"> 34 </span> : : </a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 822 : return (struct list_node *)node;</span></a>
+<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 3190 : return (struct list_node *)node;</span></a>
<a name="36"><span class="lineNum"> 36 </span> : : }</a>
<a name="37"><span class="lineNum"> 37 </span> : : </a>
-<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 690 : struct list_head *list_check(const struct list_head *h, const char *abortstr)</span></a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 2630 : struct list_head *list_check(const struct list_head *h, const char *abortstr)</span></a>
<a name="39"><span class="lineNum"> 39 </span> : : {</a>
-<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 690 : if (!list_check_node(&amp;h-&gt;n, abortstr))</span></a>
-<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 12 : return NULL;</span></a>
-<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 666 : return (struct list_head *)h;</span></a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 2630 : if (!list_check_node(&amp;h-&gt;n, abortstr))</span></a>
+<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 20 : return NULL;</span></a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 2580 : return (struct list_head *)h;</span></a>
<a name="43"><span class="lineNum"> 43 </span> : : }</a>
</pre>
</td>
diff --git a/coverage-report/ccan/list/list.h.func-sort-c.html b/coverage-report/ccan/list/list.h.func-sort-c.html
index dd4a604..e5d529e 100644
--- a/coverage-report/ccan/list/list.h.func-sort-c.html
+++ b/coverage-report/ccan/list/list.h.func-sort-c.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">72</td>
- <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntry">96</td>
+ <td class="headerCovTableEntry">96</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">15</td>
- <td class="headerCovTableEntry">15</td>
+ <td class="headerCovTableEntry">20</td>
+ <td class="headerCovTableEntry">20</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -69,64 +69,84 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#552">list_entry_or_null</a></td>
- <td class="coverFnHi">3</td>
+ <td class="coverFn"><a href="list.h.gcov.html#403">list_swap_</a></td>
+ <td class="coverFnHi">20</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#192">list_add_after</a></td>
- <td class="coverFnHi">40</td>
+ <td class="coverFn"><a href="list.h.gcov.html#638">list_append_list_</a></td>
+ <td class="coverFnHi">50</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#382">list_tail_</a></td>
- <td class="coverFnHi">217</td>
+ <td class="coverFn"><a href="list.h.gcov.html#670">list_prepend_list_</a></td>
+ <td class="coverFnHi">50</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#173">list_add_before</a></td>
- <td class="coverFnHi">948</td>
+ <td class="coverFn"><a href="list.h.gcov.html#348">list_del_init_</a></td>
+ <td class="coverFnHi">60</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#138">list_head_init</a></td>
- <td class="coverFnHi">1866</td>
+ <td class="coverFn"><a href="list.h.gcov.html#153">list_node_init</a></td>
+ <td class="coverFnHi">80</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#213">list_add_tail</a></td>
- <td class="coverFnHi">4901</td>
+ <td class="coverFn"><a href="list.h.gcov.html#832">list_entry_or_null</a></td>
+ <td class="coverFnHi">203</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#354">list_pop_</a></td>
- <td class="coverFnHi">5429</td>
+ <td class="coverFn"><a href="list.h.gcov.html#501">list_tail_</a></td>
+ <td class="coverFnHi">241</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#156">list_add</a></td>
- <td class="coverFnHi">14471</td>
+ <td class="coverFn"><a href="list.h.gcov.html#141">list_head_init</a></td>
+ <td class="coverFnHi">2022</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#291">list_del_from</a></td>
- <td class="coverFnHi">15170</td>
+ <td class="coverFn"><a href="list.h.gcov.html#248">list_add_tail_</a></td>
+ <td class="coverFnHi">5056</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#266">list_del</a></td>
- <td class="coverFnHi">20070</td>
+ <td class="coverFn"><a href="list.h.gcov.html#473">list_pop_</a></td>
+ <td class="coverFnHi">5495</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#247">list_empty_nocheck</a></td>
+ <td class="coverFn"><a href="list.h.gcov.html#225">list_add_before_</a></td>
+ <td class="coverFnHi">6024</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="list.h.gcov.html#202">list_add_</a></td>
+ <td class="coverFnHi">14688</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="list.h.gcov.html#176">list_add_after_</a></td>
+ <td class="coverFnHi">14753</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="list.h.gcov.html#368">list_del_from</a></td>
+ <td class="coverFnHi">15303</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="list.h.gcov.html#322">list_del_</a></td>
+ <td class="coverFnHi">20513</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="list.h.gcov.html#302">list_empty_nocheck</a></td>
<td class="coverFnHi">130932</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#339">list_top_</a></td>
- <td class="coverFnHi">133431</td>
+ <td class="coverFn"><a href="list.h.gcov.html#449">list_top_</a></td>
+ <td class="coverFnHi">133475</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#231">list_empty</a></td>
- <td class="coverFnHi">163970</td>
+ <td class="coverFn"><a href="list.h.gcov.html#265">list_empty_</a></td>
+ <td class="coverFnHi">164536</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#525">list_node_to_off_</a></td>
- <td class="coverFnHi">376883</td>
+ <td class="coverFn"><a href="list.h.gcov.html#807">list_node_to_off_</a></td>
+ <td class="coverFnHi">378027</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#529">list_node_from_off_</a></td>
- <td class="coverFnHi">603699</td>
+ <td class="coverFn"><a href="list.h.gcov.html#811">list_node_from_off_</a></td>
+ <td class="coverFnHi">605719</td>
</tr>
</table>
<br>
diff --git a/coverage-report/ccan/list/list.h.func.html b/coverage-report/ccan/list/list.h.func.html
index 3d7daaf..ad921e2 100644
--- a/coverage-report/ccan/list/list.h.func.html
+++ b/coverage-report/ccan/list/list.h.func.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">72</td>
- <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntry">96</td>
+ <td class="headerCovTableEntry">96</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">15</td>
- <td class="headerCovTableEntry">15</td>
+ <td class="headerCovTableEntry">20</td>
+ <td class="headerCovTableEntry">20</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -69,64 +69,84 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="list.h.func-sort-c.html"><img src="../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#156">list_add</a></td>
- <td class="coverFnHi">14471</td>
+ <td class="coverFn"><a href="list.h.gcov.html#202">list_add_</a></td>
+ <td class="coverFnHi">14688</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#192">list_add_after</a></td>
- <td class="coverFnHi">40</td>
+ <td class="coverFn"><a href="list.h.gcov.html#176">list_add_after_</a></td>
+ <td class="coverFnHi">14753</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#173">list_add_before</a></td>
- <td class="coverFnHi">948</td>
+ <td class="coverFn"><a href="list.h.gcov.html#225">list_add_before_</a></td>
+ <td class="coverFnHi">6024</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#213">list_add_tail</a></td>
- <td class="coverFnHi">4901</td>
+ <td class="coverFn"><a href="list.h.gcov.html#248">list_add_tail_</a></td>
+ <td class="coverFnHi">5056</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#266">list_del</a></td>
- <td class="coverFnHi">20070</td>
+ <td class="coverFn"><a href="list.h.gcov.html#638">list_append_list_</a></td>
+ <td class="coverFnHi">50</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#291">list_del_from</a></td>
- <td class="coverFnHi">15170</td>
+ <td class="coverFn"><a href="list.h.gcov.html#322">list_del_</a></td>
+ <td class="coverFnHi">20513</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#231">list_empty</a></td>
- <td class="coverFnHi">163970</td>
+ <td class="coverFn"><a href="list.h.gcov.html#368">list_del_from</a></td>
+ <td class="coverFnHi">15303</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#247">list_empty_nocheck</a></td>
+ <td class="coverFn"><a href="list.h.gcov.html#348">list_del_init_</a></td>
+ <td class="coverFnHi">60</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="list.h.gcov.html#265">list_empty_</a></td>
+ <td class="coverFnHi">164536</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="list.h.gcov.html#302">list_empty_nocheck</a></td>
<td class="coverFnHi">130932</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#552">list_entry_or_null</a></td>
- <td class="coverFnHi">3</td>
+ <td class="coverFn"><a href="list.h.gcov.html#832">list_entry_or_null</a></td>
+ <td class="coverFnHi">203</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="list.h.gcov.html#141">list_head_init</a></td>
+ <td class="coverFnHi">2022</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="list.h.gcov.html#811">list_node_from_off_</a></td>
+ <td class="coverFnHi">605719</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="list.h.gcov.html#153">list_node_init</a></td>
+ <td class="coverFnHi">80</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#138">list_head_init</a></td>
- <td class="coverFnHi">1866</td>
+ <td class="coverFn"><a href="list.h.gcov.html#807">list_node_to_off_</a></td>
+ <td class="coverFnHi">378027</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#529">list_node_from_off_</a></td>
- <td class="coverFnHi">603699</td>
+ <td class="coverFn"><a href="list.h.gcov.html#473">list_pop_</a></td>
+ <td class="coverFnHi">5495</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#525">list_node_to_off_</a></td>
- <td class="coverFnHi">376883</td>
+ <td class="coverFn"><a href="list.h.gcov.html#670">list_prepend_list_</a></td>
+ <td class="coverFnHi">50</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#354">list_pop_</a></td>
- <td class="coverFnHi">5429</td>
+ <td class="coverFn"><a href="list.h.gcov.html#403">list_swap_</a></td>
+ <td class="coverFnHi">20</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#382">list_tail_</a></td>
- <td class="coverFnHi">217</td>
+ <td class="coverFn"><a href="list.h.gcov.html#501">list_tail_</a></td>
+ <td class="coverFnHi">241</td>
</tr>
<tr>
- <td class="coverFn"><a href="list.h.gcov.html#339">list_top_</a></td>
- <td class="coverFnHi">133431</td>
+ <td class="coverFn"><a href="list.h.gcov.html#449">list_top_</a></td>
+ <td class="coverFnHi">133475</td>
</tr>
</table>
<br>
diff --git a/coverage-report/ccan/list/list.h.gcov.html b/coverage-report/ccan/list/list.h.gcov.html
index 342e63f..e891ccd 100644
--- a/coverage-report/ccan/list/list.h.gcov.html
+++ b/coverage-report/ccan/list/list.h.gcov.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">72</td>
- <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntry">96</td>
+ <td class="headerCovTableEntry">96</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">15</td>
- <td class="headerCovTableEntry">15</td>
+ <td class="headerCovTableEntry">20</td>
+ <td class="headerCovTableEntry">20</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -72,586 +72,845 @@
<a name="1"><span class="lineNum"> 1 </span> : : /* Licensed under BSD-MIT - see LICENSE file for details */</a>
<a name="2"><span class="lineNum"> 2 </span> : : #ifndef CCAN_LIST_H</a>
<a name="3"><span class="lineNum"> 3 </span> : : #define CCAN_LIST_H</a>
-<a name="4"><span class="lineNum"> 4 </span> : : #include &lt;stdbool.h&gt;</a>
-<a name="5"><span class="lineNum"> 5 </span> : : #include &lt;assert.h&gt;</a>
-<a name="6"><span class="lineNum"> 6 </span> : : #include &lt;ccan/container_of/container_of.h&gt;</a>
-<a name="7"><span class="lineNum"> 7 </span> : : #include &lt;ccan/check_type/check_type.h&gt;</a>
-<a name="8"><span class="lineNum"> 8 </span> : : </a>
-<a name="9"><span class="lineNum"> 9 </span> : : /**</a>
-<a name="10"><span class="lineNum"> 10 </span> : : * struct list_node - an entry in a doubly-linked list</a>
-<a name="11"><span class="lineNum"> 11 </span> : : * @next: next entry (self if empty)</a>
-<a name="12"><span class="lineNum"> 12 </span> : : * @prev: previous entry (self if empty)</a>
-<a name="13"><span class="lineNum"> 13 </span> : : *</a>
-<a name="14"><span class="lineNum"> 14 </span> : : * This is used as an entry in a linked list.</a>
-<a name="15"><span class="lineNum"> 15 </span> : : * Example:</a>
-<a name="16"><span class="lineNum"> 16 </span> : : * struct child {</a>
-<a name="17"><span class="lineNum"> 17 </span> : : * const char *name;</a>
-<a name="18"><span class="lineNum"> 18 </span> : : * // Linked list of all us children.</a>
-<a name="19"><span class="lineNum"> 19 </span> : : * struct list_node list;</a>
-<a name="20"><span class="lineNum"> 20 </span> : : * };</a>
-<a name="21"><span class="lineNum"> 21 </span> : : */</a>
-<a name="22"><span class="lineNum"> 22 </span> : : struct list_node</a>
-<a name="23"><span class="lineNum"> 23 </span> : : {</a>
-<a name="24"><span class="lineNum"> 24 </span> : : struct list_node *next, *prev;</a>
-<a name="25"><span class="lineNum"> 25 </span> : : };</a>
-<a name="26"><span class="lineNum"> 26 </span> : : </a>
-<a name="27"><span class="lineNum"> 27 </span> : : /**</a>
-<a name="28"><span class="lineNum"> 28 </span> : : * struct list_head - the head of a doubly-linked list</a>
-<a name="29"><span class="lineNum"> 29 </span> : : * @h: the list_head (containing next and prev pointers)</a>
-<a name="30"><span class="lineNum"> 30 </span> : : *</a>
-<a name="31"><span class="lineNum"> 31 </span> : : * This is used as the head of a linked list.</a>
-<a name="32"><span class="lineNum"> 32 </span> : : * Example:</a>
-<a name="33"><span class="lineNum"> 33 </span> : : * struct parent {</a>
-<a name="34"><span class="lineNum"> 34 </span> : : * const char *name;</a>
-<a name="35"><span class="lineNum"> 35 </span> : : * struct list_head children;</a>
-<a name="36"><span class="lineNum"> 36 </span> : : * unsigned int num_children;</a>
-<a name="37"><span class="lineNum"> 37 </span> : : * };</a>
-<a name="38"><span class="lineNum"> 38 </span> : : */</a>
-<a name="39"><span class="lineNum"> 39 </span> : : struct list_head</a>
-<a name="40"><span class="lineNum"> 40 </span> : : {</a>
-<a name="41"><span class="lineNum"> 41 </span> : : struct list_node n;</a>
-<a name="42"><span class="lineNum"> 42 </span> : : };</a>
-<a name="43"><span class="lineNum"> 43 </span> : : </a>
-<a name="44"><span class="lineNum"> 44 </span> : : /**</a>
-<a name="45"><span class="lineNum"> 45 </span> : : * list_check - check head of a list for consistency</a>
-<a name="46"><span class="lineNum"> 46 </span> : : * @h: the list_head</a>
-<a name="47"><span class="lineNum"> 47 </span> : : * @abortstr: the location to print on aborting, or NULL.</a>
-<a name="48"><span class="lineNum"> 48 </span> : : *</a>
-<a name="49"><span class="lineNum"> 49 </span> : : * Because list_nodes have redundant information, consistency checking between</a>
-<a name="50"><span class="lineNum"> 50 </span> : : * the back and forward links can be done. This is useful as a debugging check.</a>
-<a name="51"><span class="lineNum"> 51 </span> : : * If @abortstr is non-NULL, that will be printed in a diagnostic if the list</a>
-<a name="52"><span class="lineNum"> 52 </span> : : * is inconsistent, and the function will abort.</a>
-<a name="53"><span class="lineNum"> 53 </span> : : *</a>
-<a name="54"><span class="lineNum"> 54 </span> : : * Returns the list head if the list is consistent, NULL if not (it</a>
-<a name="55"><span class="lineNum"> 55 </span> : : * can never return NULL if @abortstr is set).</a>
-<a name="56"><span class="lineNum"> 56 </span> : : *</a>
-<a name="57"><span class="lineNum"> 57 </span> : : * See also: list_check_node()</a>
+<a name="4"><span class="lineNum"> 4 </span> : : //#define CCAN_LIST_DEBUG 1</a>
+<a name="5"><span class="lineNum"> 5 </span> : : #include &lt;stdbool.h&gt;</a>
+<a name="6"><span class="lineNum"> 6 </span> : : #include &lt;assert.h&gt;</a>
+<a name="7"><span class="lineNum"> 7 </span> : : #include &lt;ccan/str/str.h&gt;</a>
+<a name="8"><span class="lineNum"> 8 </span> : : #include &lt;ccan/container_of/container_of.h&gt;</a>
+<a name="9"><span class="lineNum"> 9 </span> : : #include &lt;ccan/check_type/check_type.h&gt;</a>
+<a name="10"><span class="lineNum"> 10 </span> : : </a>
+<a name="11"><span class="lineNum"> 11 </span> : : /**</a>
+<a name="12"><span class="lineNum"> 12 </span> : : * struct list_node - an entry in a doubly-linked list</a>
+<a name="13"><span class="lineNum"> 13 </span> : : * @next: next entry (self if empty)</a>
+<a name="14"><span class="lineNum"> 14 </span> : : * @prev: previous entry (self if empty)</a>
+<a name="15"><span class="lineNum"> 15 </span> : : *</a>
+<a name="16"><span class="lineNum"> 16 </span> : : * This is used as an entry in a linked list.</a>
+<a name="17"><span class="lineNum"> 17 </span> : : * Example:</a>
+<a name="18"><span class="lineNum"> 18 </span> : : * struct child {</a>
+<a name="19"><span class="lineNum"> 19 </span> : : * const char *name;</a>
+<a name="20"><span class="lineNum"> 20 </span> : : * // Linked list of all us children.</a>
+<a name="21"><span class="lineNum"> 21 </span> : : * struct list_node list;</a>
+<a name="22"><span class="lineNum"> 22 </span> : : * };</a>
+<a name="23"><span class="lineNum"> 23 </span> : : */</a>
+<a name="24"><span class="lineNum"> 24 </span> : : struct list_node</a>
+<a name="25"><span class="lineNum"> 25 </span> : : {</a>
+<a name="26"><span class="lineNum"> 26 </span> : : struct list_node *next, *prev;</a>
+<a name="27"><span class="lineNum"> 27 </span> : : };</a>
+<a name="28"><span class="lineNum"> 28 </span> : : </a>
+<a name="29"><span class="lineNum"> 29 </span> : : /**</a>
+<a name="30"><span class="lineNum"> 30 </span> : : * struct list_head - the head of a doubly-linked list</a>
+<a name="31"><span class="lineNum"> 31 </span> : : * @h: the list_head (containing next and prev pointers)</a>
+<a name="32"><span class="lineNum"> 32 </span> : : *</a>
+<a name="33"><span class="lineNum"> 33 </span> : : * This is used as the head of a linked list.</a>
+<a name="34"><span class="lineNum"> 34 </span> : : * Example:</a>
+<a name="35"><span class="lineNum"> 35 </span> : : * struct parent {</a>
+<a name="36"><span class="lineNum"> 36 </span> : : * const char *name;</a>
+<a name="37"><span class="lineNum"> 37 </span> : : * struct list_head children;</a>
+<a name="38"><span class="lineNum"> 38 </span> : : * unsigned int num_children;</a>
+<a name="39"><span class="lineNum"> 39 </span> : : * };</a>
+<a name="40"><span class="lineNum"> 40 </span> : : */</a>
+<a name="41"><span class="lineNum"> 41 </span> : : struct list_head</a>
+<a name="42"><span class="lineNum"> 42 </span> : : {</a>
+<a name="43"><span class="lineNum"> 43 </span> : : struct list_node n;</a>
+<a name="44"><span class="lineNum"> 44 </span> : : };</a>
+<a name="45"><span class="lineNum"> 45 </span> : : </a>
+<a name="46"><span class="lineNum"> 46 </span> : : /**</a>
+<a name="47"><span class="lineNum"> 47 </span> : : * list_check - check head of a list for consistency</a>
+<a name="48"><span class="lineNum"> 48 </span> : : * @h: the list_head</a>
+<a name="49"><span class="lineNum"> 49 </span> : : * @abortstr: the location to print on aborting, or NULL.</a>
+<a name="50"><span class="lineNum"> 50 </span> : : *</a>
+<a name="51"><span class="lineNum"> 51 </span> : : * Because list_nodes have redundant information, consistency checking between</a>
+<a name="52"><span class="lineNum"> 52 </span> : : * the back and forward links can be done. This is useful as a debugging check.</a>
+<a name="53"><span class="lineNum"> 53 </span> : : * If @abortstr is non-NULL, that will be printed in a diagnostic if the list</a>
+<a name="54"><span class="lineNum"> 54 </span> : : * is inconsistent, and the function will abort.</a>
+<a name="55"><span class="lineNum"> 55 </span> : : *</a>
+<a name="56"><span class="lineNum"> 56 </span> : : * Returns the list head if the list is consistent, NULL if not (it</a>
+<a name="57"><span class="lineNum"> 57 </span> : : * can never return NULL if @abortstr is set).</a>
<a name="58"><span class="lineNum"> 58 </span> : : *</a>
-<a name="59"><span class="lineNum"> 59 </span> : : * Example:</a>
-<a name="60"><span class="lineNum"> 60 </span> : : * static void dump_parent(struct parent *p)</a>
-<a name="61"><span class="lineNum"> 61 </span> : : * {</a>
-<a name="62"><span class="lineNum"> 62 </span> : : * struct child *c;</a>
-<a name="63"><span class="lineNum"> 63 </span> : : *</a>
-<a name="64"><span class="lineNum"> 64 </span> : : * printf(&quot;%s (%u children):\n&quot;, p-&gt;name, p-&gt;num_children);</a>
-<a name="65"><span class="lineNum"> 65 </span> : : * list_check(&amp;p-&gt;children, &quot;bad child list&quot;);</a>
-<a name="66"><span class="lineNum"> 66 </span> : : * list_for_each(&amp;p-&gt;children, c, list)</a>
-<a name="67"><span class="lineNum"> 67 </span> : : * printf(&quot; -&gt; %s\n&quot;, c-&gt;name);</a>
-<a name="68"><span class="lineNum"> 68 </span> : : * }</a>
-<a name="69"><span class="lineNum"> 69 </span> : : */</a>
-<a name="70"><span class="lineNum"> 70 </span> : : struct list_head *list_check(const struct list_head *h, const char *abortstr);</a>
-<a name="71"><span class="lineNum"> 71 </span> : : </a>
-<a name="72"><span class="lineNum"> 72 </span> : : /**</a>
-<a name="73"><span class="lineNum"> 73 </span> : : * list_check_node - check node of a list for consistency</a>
-<a name="74"><span class="lineNum"> 74 </span> : : * @n: the list_node</a>
-<a name="75"><span class="lineNum"> 75 </span> : : * @abortstr: the location to print on aborting, or NULL.</a>
-<a name="76"><span class="lineNum"> 76 </span> : : *</a>
-<a name="77"><span class="lineNum"> 77 </span> : : * Check consistency of the list node is in (it must be in one).</a>
+<a name="59"><span class="lineNum"> 59 </span> : : * See also: list_check_node()</a>
+<a name="60"><span class="lineNum"> 60 </span> : : *</a>
+<a name="61"><span class="lineNum"> 61 </span> : : * Example:</a>
+<a name="62"><span class="lineNum"> 62 </span> : : * static void dump_parent(struct parent *p)</a>
+<a name="63"><span class="lineNum"> 63 </span> : : * {</a>
+<a name="64"><span class="lineNum"> 64 </span> : : * struct child *c;</a>
+<a name="65"><span class="lineNum"> 65 </span> : : *</a>
+<a name="66"><span class="lineNum"> 66 </span> : : * printf(&quot;%s (%u children):\n&quot;, p-&gt;name, p-&gt;num_children);</a>
+<a name="67"><span class="lineNum"> 67 </span> : : * list_check(&amp;p-&gt;children, &quot;bad child list&quot;);</a>
+<a name="68"><span class="lineNum"> 68 </span> : : * list_for_each(&amp;p-&gt;children, c, list)</a>
+<a name="69"><span class="lineNum"> 69 </span> : : * printf(&quot; -&gt; %s\n&quot;, c-&gt;name);</a>
+<a name="70"><span class="lineNum"> 70 </span> : : * }</a>
+<a name="71"><span class="lineNum"> 71 </span> : : */</a>
+<a name="72"><span class="lineNum"> 72 </span> : : struct list_head *list_check(const struct list_head *h, const char *abortstr);</a>
+<a name="73"><span class="lineNum"> 73 </span> : : </a>
+<a name="74"><span class="lineNum"> 74 </span> : : /**</a>
+<a name="75"><span class="lineNum"> 75 </span> : : * list_check_node - check node of a list for consistency</a>
+<a name="76"><span class="lineNum"> 76 </span> : : * @n: the list_node</a>
+<a name="77"><span class="lineNum"> 77 </span> : : * @abortstr: the location to print on aborting, or NULL.</a>
<a name="78"><span class="lineNum"> 78 </span> : : *</a>
-<a name="79"><span class="lineNum"> 79 </span> : : * See also: list_check()</a>
+<a name="79"><span class="lineNum"> 79 </span> : : * Check consistency of the list node is in (it must be in one).</a>
<a name="80"><span class="lineNum"> 80 </span> : : *</a>
-<a name="81"><span class="lineNum"> 81 </span> : : * Example:</a>
-<a name="82"><span class="lineNum"> 82 </span> : : * static void dump_child(const struct child *c)</a>
-<a name="83"><span class="lineNum"> 83 </span> : : * {</a>
-<a name="84"><span class="lineNum"> 84 </span> : : * list_check_node(&amp;c-&gt;list, &quot;bad child list&quot;);</a>
-<a name="85"><span class="lineNum"> 85 </span> : : * printf(&quot;%s\n&quot;, c-&gt;name);</a>
-<a name="86"><span class="lineNum"> 86 </span> : : * }</a>
-<a name="87"><span class="lineNum"> 87 </span> : : */</a>
-<a name="88"><span class="lineNum"> 88 </span> : : struct list_node *list_check_node(const struct list_node *n,</a>
-<a name="89"><span class="lineNum"> 89 </span> : : const char *abortstr);</a>
-<a name="90"><span class="lineNum"> 90 </span> : : </a>
-<a name="91"><span class="lineNum"> 91 </span> : : #ifdef CCAN_LIST_DEBUG</a>
-<a name="92"><span class="lineNum"> 92 </span> : : #define list_debug(h) list_check((h), __func__)</a>
-<a name="93"><span class="lineNum"> 93 </span> : : #define list_debug_node(n) list_check_node((n), __func__)</a>
-<a name="94"><span class="lineNum"> 94 </span> : : #else</a>
-<a name="95"><span class="lineNum"> 95 </span> : : #define list_debug(h) (h)</a>
-<a name="96"><span class="lineNum"> 96 </span> : : #define list_debug_node(n) (n)</a>
-<a name="97"><span class="lineNum"> 97 </span> : : #endif</a>
-<a name="98"><span class="lineNum"> 98 </span> : : </a>
-<a name="99"><span class="lineNum"> 99 </span> : : /**</a>
-<a name="100"><span class="lineNum"> 100 </span> : : * LIST_HEAD_INIT - initializer for an empty list_head</a>
-<a name="101"><span class="lineNum"> 101 </span> : : * @name: the name of the list.</a>
-<a name="102"><span class="lineNum"> 102 </span> : : *</a>
-<a name="103"><span class="lineNum"> 103 </span> : : * Explicit initializer for an empty list.</a>
-<a name="104"><span class="lineNum"> 104 </span> : : *</a>
-<a name="105"><span class="lineNum"> 105 </span> : : * See also:</a>
-<a name="106"><span class="lineNum"> 106 </span> : : * LIST_HEAD, list_head_init()</a>
+<a name="81"><span class="lineNum"> 81 </span> : : * See also: list_check()</a>
+<a name="82"><span class="lineNum"> 82 </span> : : *</a>
+<a name="83"><span class="lineNum"> 83 </span> : : * Example:</a>
+<a name="84"><span class="lineNum"> 84 </span> : : * static void dump_child(const struct child *c)</a>
+<a name="85"><span class="lineNum"> 85 </span> : : * {</a>
+<a name="86"><span class="lineNum"> 86 </span> : : * list_check_node(&amp;c-&gt;list, &quot;bad child list&quot;);</a>
+<a name="87"><span class="lineNum"> 87 </span> : : * printf(&quot;%s\n&quot;, c-&gt;name);</a>
+<a name="88"><span class="lineNum"> 88 </span> : : * }</a>
+<a name="89"><span class="lineNum"> 89 </span> : : */</a>
+<a name="90"><span class="lineNum"> 90 </span> : : struct list_node *list_check_node(const struct list_node *n,</a>
+<a name="91"><span class="lineNum"> 91 </span> : : const char *abortstr);</a>
+<a name="92"><span class="lineNum"> 92 </span> : : </a>
+<a name="93"><span class="lineNum"> 93 </span> : : #define LIST_LOC __FILE__ &quot;:&quot; stringify(__LINE__)</a>
+<a name="94"><span class="lineNum"> 94 </span> : : #ifdef CCAN_LIST_DEBUG</a>
+<a name="95"><span class="lineNum"> 95 </span> : : #define list_debug(h, loc) list_check((h), loc)</a>
+<a name="96"><span class="lineNum"> 96 </span> : : #define list_debug_node(n, loc) list_check_node((n), loc)</a>
+<a name="97"><span class="lineNum"> 97 </span> : : #else</a>
+<a name="98"><span class="lineNum"> 98 </span> : : #define list_debug(h, loc) ((void)loc, h)</a>
+<a name="99"><span class="lineNum"> 99 </span> : : #define list_debug_node(n, loc) ((void)loc, n)</a>
+<a name="100"><span class="lineNum"> 100 </span> : : #endif</a>
+<a name="101"><span class="lineNum"> 101 </span> : : </a>
+<a name="102"><span class="lineNum"> 102 </span> : : /**</a>
+<a name="103"><span class="lineNum"> 103 </span> : : * LIST_HEAD_INIT - initializer for an empty list_head</a>
+<a name="104"><span class="lineNum"> 104 </span> : : * @name: the name of the list.</a>
+<a name="105"><span class="lineNum"> 105 </span> : : *</a>
+<a name="106"><span class="lineNum"> 106 </span> : : * Explicit initializer for an empty list.</a>
<a name="107"><span class="lineNum"> 107 </span> : : *</a>
-<a name="108"><span class="lineNum"> 108 </span> : : * Example:</a>
-<a name="109"><span class="lineNum"> 109 </span> : : * static struct list_head my_list = LIST_HEAD_INIT(my_list);</a>
-<a name="110"><span class="lineNum"> 110 </span> : : */</a>
-<a name="111"><span class="lineNum"> 111 </span> : : #define LIST_HEAD_INIT(name) { { &amp;name.n, &amp;name.n } }</a>
-<a name="112"><span class="lineNum"> 112 </span> : : </a>
-<a name="113"><span class="lineNum"> 113 </span> : : /**</a>
-<a name="114"><span class="lineNum"> 114 </span> : : * LIST_HEAD - define and initialize an empty list_head</a>
-<a name="115"><span class="lineNum"> 115 </span> : : * @name: the name of the list.</a>
-<a name="116"><span class="lineNum"> 116 </span> : : *</a>
-<a name="117"><span class="lineNum"> 117 </span> : : * The LIST_HEAD macro defines a list_head and initializes it to an empty</a>
-<a name="118"><span class="lineNum"> 118 </span> : : * list. It can be prepended by &quot;static&quot; to define a static list_head.</a>
+<a name="108"><span class="lineNum"> 108 </span> : : * See also:</a>
+<a name="109"><span class="lineNum"> 109 </span> : : * LIST_HEAD, list_head_init()</a>
+<a name="110"><span class="lineNum"> 110 </span> : : *</a>
+<a name="111"><span class="lineNum"> 111 </span> : : * Example:</a>
+<a name="112"><span class="lineNum"> 112 </span> : : * static struct list_head my_list = LIST_HEAD_INIT(my_list);</a>
+<a name="113"><span class="lineNum"> 113 </span> : : */</a>
+<a name="114"><span class="lineNum"> 114 </span> : : #define LIST_HEAD_INIT(name) { { &amp;(name).n, &amp;(name).n } }</a>
+<a name="115"><span class="lineNum"> 115 </span> : : </a>
+<a name="116"><span class="lineNum"> 116 </span> : : /**</a>
+<a name="117"><span class="lineNum"> 117 </span> : : * LIST_HEAD - define and initialize an empty list_head</a>
+<a name="118"><span class="lineNum"> 118 </span> : : * @name: the name of the list.</a>
<a name="119"><span class="lineNum"> 119 </span> : : *</a>
-<a name="120"><span class="lineNum"> 120 </span> : : * See also:</a>
-<a name="121"><span class="lineNum"> 121 </span> : : * LIST_HEAD_INIT, list_head_init()</a>
+<a name="120"><span class="lineNum"> 120 </span> : : * The LIST_HEAD macro defines a list_head and initializes it to an empty</a>
+<a name="121"><span class="lineNum"> 121 </span> : : * list. It can be prepended by &quot;static&quot; to define a static list_head.</a>
<a name="122"><span class="lineNum"> 122 </span> : : *</a>
-<a name="123"><span class="lineNum"> 123 </span> : : * Example:</a>
-<a name="124"><span class="lineNum"> 124 </span> : : * static LIST_HEAD(my_global_list);</a>
-<a name="125"><span class="lineNum"> 125 </span> : : */</a>
-<a name="126"><span class="lineNum"> 126 </span> : : #define LIST_HEAD(name) \</a>
-<a name="127"><span class="lineNum"> 127 </span> : : struct list_head name = LIST_HEAD_INIT(name)</a>
-<a name="128"><span class="lineNum"> 128 </span> : : </a>
-<a name="129"><span class="lineNum"> 129 </span> : : /**</a>
-<a name="130"><span class="lineNum"> 130 </span> : : * list_head_init - initialize a list_head</a>
-<a name="131"><span class="lineNum"> 131 </span> : : * @h: the list_head to set to the empty list</a>
-<a name="132"><span class="lineNum"> 132 </span> : : *</a>
-<a name="133"><span class="lineNum"> 133 </span> : : * Example:</a>
-<a name="134"><span class="lineNum"> 134 </span> : : * ...</a>
-<a name="135"><span class="lineNum"> 135 </span> : : * struct parent *parent = malloc(sizeof(*parent));</a>
-<a name="136"><span class="lineNum"> 136 </span> : : *</a>
-<a name="137"><span class="lineNum"> 137 </span> : : * list_head_init(&amp;parent-&gt;children);</a>
-<a name="138"><span class="lineNum"> 138 </span> : : * parent-&gt;num_children = 0;</a>
-<a name="139"><span class="lineNum"> 139 </span> : : */</a>
-<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 1866 : static inline void list_head_init(struct list_head *h)</span></a>
-<a name="141"><span class="lineNum"> 141 </span> : : {</a>
-<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 1866 : h-&gt;n.next = h-&gt;n.prev = &amp;h-&gt;n;</span></a>
-<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 1866 : }</span></a>
-<a name="144"><span class="lineNum"> 144 </span> : : </a>
-<a name="145"><span class="lineNum"> 145 </span> : : /**</a>
-<a name="146"><span class="lineNum"> 146 </span> : : * list_add - add an entry at the start of a linked list.</a>
-<a name="147"><span class="lineNum"> 147 </span> : : * @h: the list_head to add the node to</a>
-<a name="148"><span class="lineNum"> 148 </span> : : * @n: the list_node to add to the list.</a>
-<a name="149"><span class="lineNum"> 149 </span> : : *</a>
-<a name="150"><span class="lineNum"> 150 </span> : : * The list_node does not need to be initialized; it will be overwritten.</a>
-<a name="151"><span class="lineNum"> 151 </span> : : * Example:</a>
-<a name="152"><span class="lineNum"> 152 </span> : : * struct child *child = malloc(sizeof(*child));</a>
-<a name="153"><span class="lineNum"> 153 </span> : : *</a>
-<a name="154"><span class="lineNum"> 154 </span> : : * child-&gt;name = &quot;marvin&quot;;</a>
-<a name="155"><span class="lineNum"> 155 </span> : : * list_add(&amp;parent-&gt;children, &amp;child-&gt;list);</a>
-<a name="156"><span class="lineNum"> 156 </span> : : * parent-&gt;num_children++;</a>
-<a name="157"><span class="lineNum"> 157 </span> : : */</a>
-<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 14471 : static inline void list_add(struct list_head *h, struct list_node *n)</span></a>
-<a name="159"><span class="lineNum"> 159 </span> : : {</a>
-<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 14471 : n-&gt;next = h-&gt;n.next;</span></a>
-<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 14471 : n-&gt;prev = &amp;h-&gt;n;</span></a>
-<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 14471 : h-&gt;n.next-&gt;prev = n;</span></a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 14471 : h-&gt;n.next = n;</span></a>
-<a name="164"><span class="lineNum"> 164 </span> :<span class="lineCov"> 14471 : (void)list_debug(h);</span></a>
-<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 14471 : }</span></a>
-<a name="166"><span class="lineNum"> 166 </span> : : </a>
-<a name="167"><span class="lineNum"> 167 </span> : : /**</a>
-<a name="168"><span class="lineNum"> 168 </span> : : * list_add_before - add an entry before another entry.</a>
-<a name="169"><span class="lineNum"> 169 </span> : : * @h: the list_head to add the node to (we use it for debug purposes, can be NULL)</a>
-<a name="170"><span class="lineNum"> 170 </span> : : * @n: the list_node to add to the list.</a>
-<a name="171"><span class="lineNum"> 171 </span> : : * @p: the list_node of the other entry</a>
+<a name="123"><span class="lineNum"> 123 </span> : : * See also:</a>
+<a name="124"><span class="lineNum"> 124 </span> : : * LIST_HEAD_INIT, list_head_init()</a>
+<a name="125"><span class="lineNum"> 125 </span> : : *</a>
+<a name="126"><span class="lineNum"> 126 </span> : : * Example:</a>
+<a name="127"><span class="lineNum"> 127 </span> : : * static LIST_HEAD(my_global_list);</a>
+<a name="128"><span class="lineNum"> 128 </span> : : */</a>
+<a name="129"><span class="lineNum"> 129 </span> : : #define LIST_HEAD(name) \</a>
+<a name="130"><span class="lineNum"> 130 </span> : : struct list_head name = LIST_HEAD_INIT(name)</a>
+<a name="131"><span class="lineNum"> 131 </span> : : </a>
+<a name="132"><span class="lineNum"> 132 </span> : : /**</a>
+<a name="133"><span class="lineNum"> 133 </span> : : * list_head_init - initialize a list_head</a>
+<a name="134"><span class="lineNum"> 134 </span> : : * @h: the list_head to set to the empty list</a>
+<a name="135"><span class="lineNum"> 135 </span> : : *</a>
+<a name="136"><span class="lineNum"> 136 </span> : : * Example:</a>
+<a name="137"><span class="lineNum"> 137 </span> : : * ...</a>
+<a name="138"><span class="lineNum"> 138 </span> : : * struct parent *parent = malloc(sizeof(*parent));</a>
+<a name="139"><span class="lineNum"> 139 </span> : : *</a>
+<a name="140"><span class="lineNum"> 140 </span> : : * list_head_init(&amp;parent-&gt;children);</a>
+<a name="141"><span class="lineNum"> 141 </span> : : * parent-&gt;num_children = 0;</a>
+<a name="142"><span class="lineNum"> 142 </span> : : */</a>
+<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 2022 : static inline void list_head_init(struct list_head *h)</span></a>
+<a name="144"><span class="lineNum"> 144 </span> : : {</a>
+<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 2022 : h-&gt;n.next = h-&gt;n.prev = &amp;h-&gt;n;</span></a>
+<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 2022 : }</span></a>
+<a name="147"><span class="lineNum"> 147 </span> : : </a>
+<a name="148"><span class="lineNum"> 148 </span> : : /**</a>
+<a name="149"><span class="lineNum"> 149 </span> : : * list_node_init - initialize a list_node</a>
+<a name="150"><span class="lineNum"> 150 </span> : : * @n: the list_node to link to itself.</a>
+<a name="151"><span class="lineNum"> 151 </span> : : *</a>
+<a name="152"><span class="lineNum"> 152 </span> : : * You don't need to use this normally! But it lets you list_del(@n)</a>
+<a name="153"><span class="lineNum"> 153 </span> : : * safely.</a>
+<a name="154"><span class="lineNum"> 154 </span> : : */</a>
+<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 80 : static inline void list_node_init(struct list_node *n)</span></a>
+<a name="156"><span class="lineNum"> 156 </span> : : {</a>
+<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 80 : n-&gt;next = n-&gt;prev = n;</span></a>
+<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 80 : }</span></a>
+<a name="159"><span class="lineNum"> 159 </span> : : </a>
+<a name="160"><span class="lineNum"> 160 </span> : : /**</a>
+<a name="161"><span class="lineNum"> 161 </span> : : * list_add_after - add an entry after an existing node in a linked list</a>
+<a name="162"><span class="lineNum"> 162 </span> : : * @h: the list_head to add the node to (for debugging)</a>
+<a name="163"><span class="lineNum"> 163 </span> : : * @p: the existing list_node to add the node after</a>
+<a name="164"><span class="lineNum"> 164 </span> : : * @n: the new list_node to add to the list.</a>
+<a name="165"><span class="lineNum"> 165 </span> : : *</a>
+<a name="166"><span class="lineNum"> 166 </span> : : * The existing list_node must already be a member of the list.</a>
+<a name="167"><span class="lineNum"> 167 </span> : : * The new list_node does not need to be initialized; it will be overwritten.</a>
+<a name="168"><span class="lineNum"> 168 </span> : : *</a>
+<a name="169"><span class="lineNum"> 169 </span> : : * Example:</a>
+<a name="170"><span class="lineNum"> 170 </span> : : * struct child c1, c2, c3;</a>
+<a name="171"><span class="lineNum"> 171 </span> : : * LIST_HEAD(h);</a>
<a name="172"><span class="lineNum"> 172 </span> : : *</a>
-<a name="173"><span class="lineNum"> 173 </span> : : * The list_node does not need to be initialized; it will be overwritten.</a>
-<a name="174"><span class="lineNum"> 174 </span> : : */</a>
-<a name="175"><span class="lineNum"> 175 </span> :<span class="lineCov"> 948 : static inline void list_add_before(struct list_head *h, struct list_node *n,</span></a>
-<a name="176"><span class="lineNum"> 176 </span> : : struct list_node *p)</a>
-<a name="177"><span class="lineNum"> 177 </span> : : {</a>
-<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 948 : n-&gt;next = p;</span></a>
-<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 948 : n-&gt;prev = p-&gt;prev;</span></a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 948 : p-&gt;prev = n;</span></a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 948 : n-&gt;prev-&gt;next = n;</span></a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 948 : if (h)</span></a>
-<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 948 : (void)list_debug(h);</span></a>
-<a name="184"><span class="lineNum"> 184 </span> :<span class="lineCov"> 948 : }</span></a>
-<a name="185"><span class="lineNum"> 185 </span> : : </a>
-<a name="186"><span class="lineNum"> 186 </span> : : /**</a>
-<a name="187"><span class="lineNum"> 187 </span> : : * list_add_after - add an entry after another entry.</a>
-<a name="188"><span class="lineNum"> 188 </span> : : * @h: the list_head to add the node to (we use it for debug purposes, can be NULL)</a>
-<a name="189"><span class="lineNum"> 189 </span> : : * @n: the list_node to add to the list.</a>
-<a name="190"><span class="lineNum"> 190 </span> : : * @p: the list_node of the other entry</a>
-<a name="191"><span class="lineNum"> 191 </span> : : *</a>
-<a name="192"><span class="lineNum"> 192 </span> : : * The list_node does not need to be initialized; it will be overwritten.</a>
-<a name="193"><span class="lineNum"> 193 </span> : : */</a>
-<a name="194"><span class="lineNum"> 194 </span> :<span class="lineCov"> 40 : static inline void list_add_after(struct list_head *h, struct list_node *n,</span></a>
-<a name="195"><span class="lineNum"> 195 </span> : : struct list_node *p)</a>
-<a name="196"><span class="lineNum"> 196 </span> : : {</a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 40 : n-&gt;next = p-&gt;next;</span></a>
-<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 40 : n-&gt;prev = p;</span></a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineCov"> 40 : p-&gt;next = n;</span></a>
-<a name="200"><span class="lineNum"> 200 </span> :<span class="lineCov"> 40 : n-&gt;next-&gt;prev = n;</span></a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 40 : if (h)</span></a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineCov"> 40 : (void)list_debug(h);</span></a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 40 : }</span></a>
-<a name="204"><span class="lineNum"> 204 </span> : : </a>
-<a name="205"><span class="lineNum"> 205 </span> : : /**</a>
-<a name="206"><span class="lineNum"> 206 </span> : : * list_add_tail - add an entry at the end of a linked list.</a>
-<a name="207"><span class="lineNum"> 207 </span> : : * @h: the list_head to add the node to</a>
-<a name="208"><span class="lineNum"> 208 </span> : : * @n: the list_node to add to the list.</a>
-<a name="209"><span class="lineNum"> 209 </span> : : *</a>
-<a name="210"><span class="lineNum"> 210 </span> : : * The list_node does not need to be initialized; it will be overwritten.</a>
-<a name="211"><span class="lineNum"> 211 </span> : : * Example:</a>
-<a name="212"><span class="lineNum"> 212 </span> : : * list_add_tail(&amp;parent-&gt;children, &amp;child-&gt;list);</a>
-<a name="213"><span class="lineNum"> 213 </span> : : * parent-&gt;num_children++;</a>
-<a name="214"><span class="lineNum"> 214 </span> : : */</a>
-<a name="215"><span class="lineNum"> 215 </span> :<span class="lineCov"> 4901 : static inline void list_add_tail(struct list_head *h, struct list_node *n)</span></a>
-<a name="216"><span class="lineNum"> 216 </span> : : {</a>
-<a name="217"><span class="lineNum"> 217 </span> :<span class="lineCov"> 4901 : n-&gt;next = &amp;h-&gt;n;</span></a>
-<a name="218"><span class="lineNum"> 218 </span> :<span class="lineCov"> 4901 : n-&gt;prev = h-&gt;n.prev;</span></a>
-<a name="219"><span class="lineNum"> 219 </span> :<span class="lineCov"> 4901 : h-&gt;n.prev-&gt;next = n;</span></a>
-<a name="220"><span class="lineNum"> 220 </span> :<span class="lineCov"> 4901 : h-&gt;n.prev = n;</span></a>
-<a name="221"><span class="lineNum"> 221 </span> :<span class="lineCov"> 4901 : (void)list_debug(h);</span></a>
-<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 4901 : }</span></a>
-<a name="223"><span class="lineNum"> 223 </span> : : </a>
-<a name="224"><span class="lineNum"> 224 </span> : : /**</a>
-<a name="225"><span class="lineNum"> 225 </span> : : * list_empty - is a list empty?</a>
-<a name="226"><span class="lineNum"> 226 </span> : : * @h: the list_head</a>
-<a name="227"><span class="lineNum"> 227 </span> : : *</a>
-<a name="228"><span class="lineNum"> 228 </span> : : * If the list is empty, returns true.</a>
-<a name="229"><span class="lineNum"> 229 </span> : : *</a>
-<a name="230"><span class="lineNum"> 230 </span> : : * Example:</a>
-<a name="231"><span class="lineNum"> 231 </span> : : * assert(list_empty(&amp;parent-&gt;children) == (parent-&gt;num_children == 0));</a>
-<a name="232"><span class="lineNum"> 232 </span> : : */</a>
-<a name="233"><span class="lineNum"> 233 </span> :<span class="lineCov"> 163970 : static inline bool list_empty(const struct list_head *h)</span></a>
-<a name="234"><span class="lineNum"> 234 </span> : : {</a>
-<a name="235"><span class="lineNum"> 235 </span> :<span class="lineCov"> 163970 : (void)list_debug(h);</span></a>
-<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 163970 : return h-&gt;n.next == &amp;h-&gt;n;</span></a>
-<a name="237"><span class="lineNum"> 237 </span> : : }</a>
+<a name="173"><span class="lineNum"> 173 </span> : : * list_add_tail(&amp;h, &amp;c1.list);</a>
+<a name="174"><span class="lineNum"> 174 </span> : : * list_add_tail(&amp;h, &amp;c3.list);</a>
+<a name="175"><span class="lineNum"> 175 </span> : : * list_add_after(&amp;h, &amp;c1.list, &amp;c2.list);</a>
+<a name="176"><span class="lineNum"> 176 </span> : : */</a>
+<a name="177"><span class="lineNum"> 177 </span> : : #define list_add_after(h, p, n) list_add_after_(h, p, n, LIST_LOC)</a>
+<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 14753 : static inline void list_add_after_(struct list_head *h,</span></a>
+<a name="179"><span class="lineNum"> 179 </span> : : struct list_node *p,</a>
+<a name="180"><span class="lineNum"> 180 </span> : : struct list_node *n,</a>
+<a name="181"><span class="lineNum"> 181 </span> : : const char *abortstr)</a>
+<a name="182"><span class="lineNum"> 182 </span> : : {</a>
+<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 14753 : n-&gt;next = p-&gt;next;</span></a>
+<a name="184"><span class="lineNum"> 184 </span> :<span class="lineCov"> 14753 : n-&gt;prev = p;</span></a>
+<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 14753 : p-&gt;next-&gt;prev = n;</span></a>
+<a name="186"><span class="lineNum"> 186 </span> :<span class="lineCov"> 14753 : p-&gt;next = n;</span></a>
+<a name="187"><span class="lineNum"> 187 </span> :<span class="lineCov"> 14753 : (void)list_debug(h, abortstr);</span></a>
+<a name="188"><span class="lineNum"> 188 </span> :<span class="lineCov"> 14753 : }</span></a>
+<a name="189"><span class="lineNum"> 189 </span> : : </a>
+<a name="190"><span class="lineNum"> 190 </span> : : /**</a>
+<a name="191"><span class="lineNum"> 191 </span> : : * list_add - add an entry at the start of a linked list.</a>
+<a name="192"><span class="lineNum"> 192 </span> : : * @h: the list_head to add the node to</a>
+<a name="193"><span class="lineNum"> 193 </span> : : * @n: the list_node to add to the list.</a>
+<a name="194"><span class="lineNum"> 194 </span> : : *</a>
+<a name="195"><span class="lineNum"> 195 </span> : : * The list_node does not need to be initialized; it will be overwritten.</a>
+<a name="196"><span class="lineNum"> 196 </span> : : * Example:</a>
+<a name="197"><span class="lineNum"> 197 </span> : : * struct child *child = malloc(sizeof(*child));</a>
+<a name="198"><span class="lineNum"> 198 </span> : : *</a>
+<a name="199"><span class="lineNum"> 199 </span> : : * child-&gt;name = &quot;marvin&quot;;</a>
+<a name="200"><span class="lineNum"> 200 </span> : : * list_add(&amp;parent-&gt;children, &amp;child-&gt;list);</a>
+<a name="201"><span class="lineNum"> 201 </span> : : * parent-&gt;num_children++;</a>
+<a name="202"><span class="lineNum"> 202 </span> : : */</a>
+<a name="203"><span class="lineNum"> 203 </span> : : #define list_add(h, n) list_add_(h, n, LIST_LOC)</a>
+<a name="204"><span class="lineNum"> 204 </span> :<span class="lineCov"> 14688 : static inline void list_add_(struct list_head *h,</span></a>
+<a name="205"><span class="lineNum"> 205 </span> : : struct list_node *n,</a>
+<a name="206"><span class="lineNum"> 206 </span> : : const char *abortstr)</a>
+<a name="207"><span class="lineNum"> 207 </span> : : {</a>
+<a name="208"><span class="lineNum"> 208 </span> :<span class="lineCov"> 14688 : list_add_after_(h, &amp;h-&gt;n, n, abortstr);</span></a>
+<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 14688 : }</span></a>
+<a name="210"><span class="lineNum"> 210 </span> : : </a>
+<a name="211"><span class="lineNum"> 211 </span> : : /**</a>
+<a name="212"><span class="lineNum"> 212 </span> : : * list_add_before - add an entry before an existing node in a linked list</a>
+<a name="213"><span class="lineNum"> 213 </span> : : * @h: the list_head to add the node to (for debugging)</a>
+<a name="214"><span class="lineNum"> 214 </span> : : * @p: the existing list_node to add the node before</a>
+<a name="215"><span class="lineNum"> 215 </span> : : * @n: the new list_node to add to the list.</a>
+<a name="216"><span class="lineNum"> 216 </span> : : *</a>
+<a name="217"><span class="lineNum"> 217 </span> : : * The existing list_node must already be a member of the list.</a>
+<a name="218"><span class="lineNum"> 218 </span> : : * The new list_node does not need to be initialized; it will be overwritten.</a>
+<a name="219"><span class="lineNum"> 219 </span> : : *</a>
+<a name="220"><span class="lineNum"> 220 </span> : : * Example:</a>
+<a name="221"><span class="lineNum"> 221 </span> : : * list_head_init(&amp;h);</a>
+<a name="222"><span class="lineNum"> 222 </span> : : * list_add_tail(&amp;h, &amp;c1.list);</a>
+<a name="223"><span class="lineNum"> 223 </span> : : * list_add_tail(&amp;h, &amp;c3.list);</a>
+<a name="224"><span class="lineNum"> 224 </span> : : * list_add_before(&amp;h, &amp;c3.list, &amp;c2.list);</a>
+<a name="225"><span class="lineNum"> 225 </span> : : */</a>
+<a name="226"><span class="lineNum"> 226 </span> : : #define list_add_before(h, p, n) list_add_before_(h, p, n, LIST_LOC)</a>
+<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 6024 : static inline void list_add_before_(struct list_head *h,</span></a>
+<a name="228"><span class="lineNum"> 228 </span> : : struct list_node *p,</a>
+<a name="229"><span class="lineNum"> 229 </span> : : struct list_node *n,</a>
+<a name="230"><span class="lineNum"> 230 </span> : : const char *abortstr)</a>
+<a name="231"><span class="lineNum"> 231 </span> : : {</a>
+<a name="232"><span class="lineNum"> 232 </span> :<span class="lineCov"> 6024 : n-&gt;next = p;</span></a>
+<a name="233"><span class="lineNum"> 233 </span> :<span class="lineCov"> 6024 : n-&gt;prev = p-&gt;prev;</span></a>
+<a name="234"><span class="lineNum"> 234 </span> :<span class="lineCov"> 6024 : p-&gt;prev-&gt;next = n;</span></a>
+<a name="235"><span class="lineNum"> 235 </span> :<span class="lineCov"> 6024 : p-&gt;prev = n;</span></a>
+<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 6024 : (void)list_debug(h, abortstr);</span></a>
+<a name="237"><span class="lineNum"> 237 </span> :<span class="lineCov"> 6024 : }</span></a>
<a name="238"><span class="lineNum"> 238 </span> : : </a>
<a name="239"><span class="lineNum"> 239 </span> : : /**</a>
-<a name="240"><span class="lineNum"> 240 </span> : : * list_empty_nocheck - is a list empty?</a>
-<a name="241"><span class="lineNum"> 241 </span> : : * @h: the list_head</a>
-<a name="242"><span class="lineNum"> 242 </span> : : *</a>
-<a name="243"><span class="lineNum"> 243 </span> : : * If the list is empty, returns true. This doesn't perform any</a>
-<a name="244"><span class="lineNum"> 244 </span> : : * debug check for list consistency, so it can be called without</a>
-<a name="245"><span class="lineNum"> 245 </span> : : * locks, racing with the list being modified. This is ok for</a>
-<a name="246"><span class="lineNum"> 246 </span> : : * checks where an incorrect result is not an issue (optimized</a>
-<a name="247"><span class="lineNum"> 247 </span> : : * bail out path for example).</a>
+<a name="240"><span class="lineNum"> 240 </span> : : * list_add_tail - add an entry at the end of a linked list.</a>
+<a name="241"><span class="lineNum"> 241 </span> : : * @h: the list_head to add the node to</a>
+<a name="242"><span class="lineNum"> 242 </span> : : * @n: the list_node to add to the list.</a>
+<a name="243"><span class="lineNum"> 243 </span> : : *</a>
+<a name="244"><span class="lineNum"> 244 </span> : : * The list_node does not need to be initialized; it will be overwritten.</a>
+<a name="245"><span class="lineNum"> 245 </span> : : * Example:</a>
+<a name="246"><span class="lineNum"> 246 </span> : : * list_add_tail(&amp;parent-&gt;children, &amp;child-&gt;list);</a>
+<a name="247"><span class="lineNum"> 247 </span> : : * parent-&gt;num_children++;</a>
<a name="248"><span class="lineNum"> 248 </span> : : */</a>
-<a name="249"><span class="lineNum"> 249 </span> :<span class="lineCov"> 130932 : static inline bool list_empty_nocheck(const struct list_head *h)</span></a>
-<a name="250"><span class="lineNum"> 250 </span> : : {</a>
-<a name="251"><span class="lineNum"> 251 </span> :<span class="lineCov"> 130932 : return h-&gt;n.next == &amp;h-&gt;n;</span></a>
-<a name="252"><span class="lineNum"> 252 </span> : : }</a>
-<a name="253"><span class="lineNum"> 253 </span> : : </a>
-<a name="254"><span class="lineNum"> 254 </span> : : /**</a>
-<a name="255"><span class="lineNum"> 255 </span> : : * list_del - delete an entry from an (unknown) linked list.</a>
-<a name="256"><span class="lineNum"> 256 </span> : : * @n: the list_node to delete from the list.</a>
-<a name="257"><span class="lineNum"> 257 </span> : : *</a>
-<a name="258"><span class="lineNum"> 258 </span> : : * Note that this leaves @n in an undefined state; it can be added to</a>
-<a name="259"><span class="lineNum"> 259 </span> : : * another list, but not deleted again.</a>
+<a name="249"><span class="lineNum"> 249 </span> : : #define list_add_tail(h, n) list_add_tail_(h, n, LIST_LOC)</a>
+<a name="250"><span class="lineNum"> 250 </span> :<span class="lineCov"> 5056 : static inline void list_add_tail_(struct list_head *h,</span></a>
+<a name="251"><span class="lineNum"> 251 </span> : : struct list_node *n,</a>
+<a name="252"><span class="lineNum"> 252 </span> : : const char *abortstr)</a>
+<a name="253"><span class="lineNum"> 253 </span> : : {</a>
+<a name="254"><span class="lineNum"> 254 </span> :<span class="lineCov"> 5056 : list_add_before_(h, &amp;h-&gt;n, n, abortstr);</span></a>
+<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 5056 : }</span></a>
+<a name="256"><span class="lineNum"> 256 </span> : : </a>
+<a name="257"><span class="lineNum"> 257 </span> : : /**</a>
+<a name="258"><span class="lineNum"> 258 </span> : : * list_empty - is a list empty?</a>
+<a name="259"><span class="lineNum"> 259 </span> : : * @h: the list_head</a>
<a name="260"><span class="lineNum"> 260 </span> : : *</a>
-<a name="261"><span class="lineNum"> 261 </span> : : * See also:</a>
-<a name="262"><span class="lineNum"> 262 </span> : : * list_del_from()</a>
-<a name="263"><span class="lineNum"> 263 </span> : : *</a>
-<a name="264"><span class="lineNum"> 264 </span> : : * Example:</a>
-<a name="265"><span class="lineNum"> 265 </span> : : * list_del(&amp;child-&gt;list);</a>
-<a name="266"><span class="lineNum"> 266 </span> : : * parent-&gt;num_children--;</a>
-<a name="267"><span class="lineNum"> 267 </span> : : */</a>
-<a name="268"><span class="lineNum"> 268 </span> :<span class="lineCov"> 20070 : static inline void list_del(struct list_node *n)</span></a>
-<a name="269"><span class="lineNum"> 269 </span> : : {</a>
-<a name="270"><span class="lineNum"> 270 </span> :<span class="lineCov"> 20070 : (void)list_debug_node(n);</span></a>
-<a name="271"><span class="lineNum"> 271 </span> :<span class="lineCov"> 20070 : n-&gt;next-&gt;prev = n-&gt;prev;</span></a>
-<a name="272"><span class="lineNum"> 272 </span> :<span class="lineCov"> 20070 : n-&gt;prev-&gt;next = n-&gt;next;</span></a>
-<a name="273"><span class="lineNum"> 273 </span> : : #ifdef CCAN_LIST_DEBUG</a>
-<a name="274"><span class="lineNum"> 274 </span> : : /* Catch use-after-del. */</a>
-<a name="275"><span class="lineNum"> 275 </span> :<span class="lineCov"> 20070 : n-&gt;next = n-&gt;prev = NULL;</span></a>
-<a name="276"><span class="lineNum"> 276 </span> : : #endif</a>
-<a name="277"><span class="lineNum"> 277 </span> :<span class="lineCov"> 20070 : }</span></a>
-<a name="278"><span class="lineNum"> 278 </span> : : </a>
-<a name="279"><span class="lineNum"> 279 </span> : : /**</a>
-<a name="280"><span class="lineNum"> 280 </span> : : * list_del_from - delete an entry from a known linked list.</a>
-<a name="281"><span class="lineNum"> 281 </span> : : * @h: the list_head the node is in.</a>
-<a name="282"><span class="lineNum"> 282 </span> : : * @n: the list_node to delete from the list.</a>
-<a name="283"><span class="lineNum"> 283 </span> : : *</a>
-<a name="284"><span class="lineNum"> 284 </span> : : * This explicitly indicates which list a node is expected to be in,</a>
-<a name="285"><span class="lineNum"> 285 </span> : : * which is better documentation and can catch more bugs.</a>
-<a name="286"><span class="lineNum"> 286 </span> : : *</a>
-<a name="287"><span class="lineNum"> 287 </span> : : * See also: list_del()</a>
-<a name="288"><span class="lineNum"> 288 </span> : : *</a>
-<a name="289"><span class="lineNum"> 289 </span> : : * Example:</a>
-<a name="290"><span class="lineNum"> 290 </span> : : * list_del_from(&amp;parent-&gt;children, &amp;child-&gt;list);</a>
-<a name="291"><span class="lineNum"> 291 </span> : : * parent-&gt;num_children--;</a>
-<a name="292"><span class="lineNum"> 292 </span> : : */</a>
-<a name="293"><span class="lineNum"> 293 </span> :<span class="lineCov"> 15170 : static inline void list_del_from(struct list_head *h, struct list_node *n)</span></a>
-<a name="294"><span class="lineNum"> 294 </span> : : {</a>
-<a name="295"><span class="lineNum"> 295 </span> : : #ifdef CCAN_LIST_DEBUG</a>
-<a name="296"><span class="lineNum"> 296 </span> : : {</a>
-<a name="297"><span class="lineNum"> 297 </span> : : /* Thorough check: make sure it was in list! */</a>
-<a name="298"><span class="lineNum"> 298 </span> : : struct list_node *i;</a>
-<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 16867 : for (i = h-&gt;n.next; i != n; i = i-&gt;next)</span></a>
-<a name="300"><span class="lineNum"> 300 </span> :<span class="lineCov"> 1697 : assert(i != &amp;h-&gt;n);</span></a>
-<a name="301"><span class="lineNum"> 301 </span> : : }</a>
-<a name="302"><span class="lineNum"> 302 </span> : : #endif /* CCAN_LIST_DEBUG */</a>
-<a name="303"><span class="lineNum"> 303 </span> : : </a>
-<a name="304"><span class="lineNum"> 304 </span> : : /* Quick test that catches a surprising number of bugs. */</a>
-<a name="305"><span class="lineNum"> 305 </span> :<span class="lineCov"> 15170 : assert(!list_empty(h));</span></a>
-<a name="306"><span class="lineNum"> 306 </span> :<span class="lineCov"> 15170 : list_del(n);</span></a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineCov"> 15170 : }</span></a>
+<a name="261"><span class="lineNum"> 261 </span> : : * If the list is empty, returns true.</a>
+<a name="262"><span class="lineNum"> 262 </span> : : *</a>
+<a name="263"><span class="lineNum"> 263 </span> : : * Example:</a>
+<a name="264"><span class="lineNum"> 264 </span> : : * assert(list_empty(&amp;parent-&gt;children) == (parent-&gt;num_children == 0));</a>
+<a name="265"><span class="lineNum"> 265 </span> : : */</a>
+<a name="266"><span class="lineNum"> 266 </span> : : #define list_empty(h) list_empty_(h, LIST_LOC)</a>
+<a name="267"><span class="lineNum"> 267 </span> :<span class="lineCov"> 164536 : static inline bool list_empty_(const struct list_head *h, const char* abortstr)</span></a>
+<a name="268"><span class="lineNum"> 268 </span> : : {</a>
+<a name="269"><span class="lineNum"> 269 </span> :<span class="lineCov"> 164536 : (void)list_debug(h, abortstr);</span></a>
+<a name="270"><span class="lineNum"> 270 </span> :<span class="lineCov"> 164526 : return h-&gt;n.next == &amp;h-&gt;n;</span></a>
+<a name="271"><span class="lineNum"> 271 </span> : : }</a>
+<a name="272"><span class="lineNum"> 272 </span> : : </a>
+<a name="273"><span class="lineNum"> 273 </span> : : /**</a>
+<a name="274"><span class="lineNum"> 274 </span> : : * list_empty_nodebug - is a list empty (and don't perform debug checks)?</a>
+<a name="275"><span class="lineNum"> 275 </span> : : * @h: the list_head</a>
+<a name="276"><span class="lineNum"> 276 </span> : : *</a>
+<a name="277"><span class="lineNum"> 277 </span> : : * If the list is empty, returns true.</a>
+<a name="278"><span class="lineNum"> 278 </span> : : * This differs from list_empty() in that if CCAN_LIST_DEBUG is set it</a>
+<a name="279"><span class="lineNum"> 279 </span> : : * will NOT perform debug checks. Only use this function if you REALLY</a>
+<a name="280"><span class="lineNum"> 280 </span> : : * know what you're doing.</a>
+<a name="281"><span class="lineNum"> 281 </span> : : *</a>
+<a name="282"><span class="lineNum"> 282 </span> : : * Example:</a>
+<a name="283"><span class="lineNum"> 283 </span> : : * assert(list_empty_nodebug(&amp;parent-&gt;children) == (parent-&gt;num_children == 0));</a>
+<a name="284"><span class="lineNum"> 284 </span> : : */</a>
+<a name="285"><span class="lineNum"> 285 </span> : : #ifndef CCAN_LIST_DEBUG</a>
+<a name="286"><span class="lineNum"> 286 </span> : : #define list_empty_nodebug(h) list_empty(h)</a>
+<a name="287"><span class="lineNum"> 287 </span> : : #else</a>
+<a name="288"><span class="lineNum"> 288 </span> : : static inline bool list_empty_nodebug(const struct list_head *h)</a>
+<a name="289"><span class="lineNum"> 289 </span> : : {</a>
+<a name="290"><span class="lineNum"> 290 </span> : : return h-&gt;n.next == &amp;h-&gt;n;</a>
+<a name="291"><span class="lineNum"> 291 </span> : : }</a>
+<a name="292"><span class="lineNum"> 292 </span> : : #endif</a>
+<a name="293"><span class="lineNum"> 293 </span> : : </a>
+<a name="294"><span class="lineNum"> 294 </span> : : /**</a>
+<a name="295"><span class="lineNum"> 295 </span> : : * list_empty_nocheck - is a list empty?</a>
+<a name="296"><span class="lineNum"> 296 </span> : : * @h: the list_head</a>
+<a name="297"><span class="lineNum"> 297 </span> : : *</a>
+<a name="298"><span class="lineNum"> 298 </span> : : * If the list is empty, returns true. This doesn't perform any</a>
+<a name="299"><span class="lineNum"> 299 </span> : : * debug check for list consistency, so it can be called without</a>
+<a name="300"><span class="lineNum"> 300 </span> : : * locks, racing with the list being modified. This is ok for</a>
+<a name="301"><span class="lineNum"> 301 </span> : : * checks where an incorrect result is not an issue (optimized</a>
+<a name="302"><span class="lineNum"> 302 </span> : : * bail out path for example).</a>
+<a name="303"><span class="lineNum"> 303 </span> : : */</a>
+<a name="304"><span class="lineNum"> 304 </span> :<span class="lineCov"> 130932 : static inline bool list_empty_nocheck(const struct list_head *h)</span></a>
+<a name="305"><span class="lineNum"> 305 </span> : : {</a>
+<a name="306"><span class="lineNum"> 306 </span> :<span class="lineCov"> 130932 : return h-&gt;n.next == &amp;h-&gt;n;</span></a>
+<a name="307"><span class="lineNum"> 307 </span> : : }</a>
<a name="308"><span class="lineNum"> 308 </span> : : </a>
<a name="309"><span class="lineNum"> 309 </span> : : /**</a>
-<a name="310"><span class="lineNum"> 310 </span> : : * list_entry - convert a list_node back into the structure containing it.</a>
-<a name="311"><span class="lineNum"> 311 </span> : : * @n: the list_node</a>
-<a name="312"><span class="lineNum"> 312 </span> : : * @type: the type of the entry</a>
-<a name="313"><span class="lineNum"> 313 </span> : : * @member: the list_node member of the type</a>
-<a name="314"><span class="lineNum"> 314 </span> : : *</a>
-<a name="315"><span class="lineNum"> 315 </span> : : * Example:</a>
-<a name="316"><span class="lineNum"> 316 </span> : : * // First list entry is children.next; convert back to child.</a>
-<a name="317"><span class="lineNum"> 317 </span> : : * child = list_entry(parent-&gt;children.n.next, struct child, list);</a>
+<a name="310"><span class="lineNum"> 310 </span> : : * list_del - delete an entry from an (unknown) linked list.</a>
+<a name="311"><span class="lineNum"> 311 </span> : : * @n: the list_node to delete from the list.</a>
+<a name="312"><span class="lineNum"> 312 </span> : : *</a>
+<a name="313"><span class="lineNum"> 313 </span> : : * Note that this leaves @n in an undefined state; it can be added to</a>
+<a name="314"><span class="lineNum"> 314 </span> : : * another list, but not deleted again.</a>
+<a name="315"><span class="lineNum"> 315 </span> : : *</a>
+<a name="316"><span class="lineNum"> 316 </span> : : * See also:</a>
+<a name="317"><span class="lineNum"> 317 </span> : : * list_del_from(), list_del_init()</a>
<a name="318"><span class="lineNum"> 318 </span> : : *</a>
-<a name="319"><span class="lineNum"> 319 </span> : : * See Also:</a>
-<a name="320"><span class="lineNum"> 320 </span> : : * list_top(), list_for_each()</a>
-<a name="321"><span class="lineNum"> 321 </span> : : */</a>
-<a name="322"><span class="lineNum"> 322 </span> : : #define list_entry(n, type, member) container_of(n, type, member)</a>
-<a name="323"><span class="lineNum"> 323 </span> : : </a>
-<a name="324"><span class="lineNum"> 324 </span> : : /**</a>
-<a name="325"><span class="lineNum"> 325 </span> : : * list_top - get the first entry in a list</a>
-<a name="326"><span class="lineNum"> 326 </span> : : * @h: the list_head</a>
-<a name="327"><span class="lineNum"> 327 </span> : : * @type: the type of the entry</a>
-<a name="328"><span class="lineNum"> 328 </span> : : * @member: the list_node member of the type</a>
-<a name="329"><span class="lineNum"> 329 </span> : : *</a>
-<a name="330"><span class="lineNum"> 330 </span> : : * If the list is empty, returns NULL.</a>
-<a name="331"><span class="lineNum"> 331 </span> : : *</a>
-<a name="332"><span class="lineNum"> 332 </span> : : * Example:</a>
-<a name="333"><span class="lineNum"> 333 </span> : : * struct child *first;</a>
-<a name="334"><span class="lineNum"> 334 </span> : : * first = list_top(&amp;parent-&gt;children, struct child, list);</a>
-<a name="335"><span class="lineNum"> 335 </span> : : * if (!first)</a>
-<a name="336"><span class="lineNum"> 336 </span> : : * printf(&quot;Empty list!\n&quot;);</a>
-<a name="337"><span class="lineNum"> 337 </span> : : */</a>
-<a name="338"><span class="lineNum"> 338 </span> : : #define list_top(h, type, member) \</a>
-<a name="339"><span class="lineNum"> 339 </span> : : ((type *)list_top_((h), list_off_(type, member)))</a>
-<a name="340"><span class="lineNum"> 340 </span> : : </a>
-<a name="341"><span class="lineNum"> 341 </span> :<span class="lineCov"> 133431 : static inline const void *list_top_(const struct list_head *h, size_t off)</span></a>
-<a name="342"><span class="lineNum"> 342 </span> : : {</a>
-<a name="343"><span class="lineNum"> 343 </span> :<span class="lineCov"> 133431 : if (list_empty(h))</span></a>
-<a name="344"><span class="lineNum"> 344 </span> :<span class="lineCov"> 66360 : return NULL;</span></a>
-<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 67071 : return (const char *)h-&gt;n.next - off;</span></a>
-<a name="346"><span class="lineNum"> 346 </span> : : }</a>
-<a name="347"><span class="lineNum"> 347 </span> : : </a>
-<a name="348"><span class="lineNum"> 348 </span> : : /**</a>
-<a name="349"><span class="lineNum"> 349 </span> : : * list_pop - get the first entry in a list and dequeue it</a>
-<a name="350"><span class="lineNum"> 350 </span> : : * @h: the list_head</a>
-<a name="351"><span class="lineNum"> 351 </span> : : * @type: the type of the entry</a>
-<a name="352"><span class="lineNum"> 352 </span> : : * @member: the list_node member of the type</a>
-<a name="353"><span class="lineNum"> 353 </span> : : */</a>
-<a name="354"><span class="lineNum"> 354 </span> : : #define list_pop(h, type, member) \</a>
-<a name="355"><span class="lineNum"> 355 </span> : : ((type *)list_pop_((h), list_off_(type, member)))</a>
-<a name="356"><span class="lineNum"> 356 </span> :<span class="lineCov"> 5429 : static inline const void *list_pop_(struct list_head *h, size_t off)</span></a>
-<a name="357"><span class="lineNum"> 357 </span> : : {</a>
-<a name="358"><span class="lineNum"> 358 </span> : : struct list_node *n;</a>
-<a name="359"><span class="lineNum"> 359 </span> : : </a>
-<a name="360"><span class="lineNum"> 360 </span> :<span class="lineCov"> 5429 : if (list_empty(h))</span></a>
-<a name="361"><span class="lineNum"> 361 </span> :<span class="lineCov"> 861 : return NULL;</span></a>
-<a name="362"><span class="lineNum"> 362 </span> :<span class="lineCov"> 4568 : n = h-&gt;n.next;</span></a>
-<a name="363"><span class="lineNum"> 363 </span> :<span class="lineCov"> 4568 : list_del(n);</span></a>
-<a name="364"><span class="lineNum"> 364 </span> :<span class="lineCov"> 4568 : return (const char *)n - off;</span></a>
-<a name="365"><span class="lineNum"> 365 </span> : : }</a>
-<a name="366"><span class="lineNum"> 366 </span> : : </a>
-<a name="367"><span class="lineNum"> 367 </span> : : /**</a>
-<a name="368"><span class="lineNum"> 368 </span> : : * list_tail - get the last entry in a list</a>
-<a name="369"><span class="lineNum"> 369 </span> : : * @h: the list_head</a>
-<a name="370"><span class="lineNum"> 370 </span> : : * @type: the type of the entry</a>
-<a name="371"><span class="lineNum"> 371 </span> : : * @member: the list_node member of the type</a>
-<a name="372"><span class="lineNum"> 372 </span> : : *</a>
-<a name="373"><span class="lineNum"> 373 </span> : : * If the list is empty, returns NULL.</a>
-<a name="374"><span class="lineNum"> 374 </span> : : *</a>
-<a name="375"><span class="lineNum"> 375 </span> : : * Example:</a>
-<a name="376"><span class="lineNum"> 376 </span> : : * struct child *last;</a>
-<a name="377"><span class="lineNum"> 377 </span> : : * last = list_tail(&amp;parent-&gt;children, struct child, list);</a>
-<a name="378"><span class="lineNum"> 378 </span> : : * if (!last)</a>
-<a name="379"><span class="lineNum"> 379 </span> : : * printf(&quot;Empty list!\n&quot;);</a>
-<a name="380"><span class="lineNum"> 380 </span> : : */</a>
-<a name="381"><span class="lineNum"> 381 </span> : : #define list_tail(h, type, member) \</a>
-<a name="382"><span class="lineNum"> 382 </span> : : ((type *)list_tail_((h), list_off_(type, member)))</a>
-<a name="383"><span class="lineNum"> 383 </span> : : </a>
-<a name="384"><span class="lineNum"> 384 </span> :<span class="lineCov"> 217 : static inline const void *list_tail_(const struct list_head *h, size_t off)</span></a>
-<a name="385"><span class="lineNum"> 385 </span> : : {</a>
-<a name="386"><span class="lineNum"> 386 </span> :<span class="lineCov"> 217 : if (list_empty(h))</span></a>
-<a name="387"><span class="lineNum"> 387 </span> :<span class="lineCov"> 144 : return NULL;</span></a>
-<a name="388"><span class="lineNum"> 388 </span> :<span class="lineCov"> 73 : return (const char *)h-&gt;n.prev - off;</span></a>
-<a name="389"><span class="lineNum"> 389 </span> : : }</a>
-<a name="390"><span class="lineNum"> 390 </span> : : </a>
-<a name="391"><span class="lineNum"> 391 </span> : : /**</a>
-<a name="392"><span class="lineNum"> 392 </span> : : * list_for_each - iterate through a list.</a>
-<a name="393"><span class="lineNum"> 393 </span> : : * @h: the list_head (warning: evaluated multiple times!)</a>
-<a name="394"><span class="lineNum"> 394 </span> : : * @i: the structure containing the list_node</a>
-<a name="395"><span class="lineNum"> 395 </span> : : * @member: the list_node member of the structure</a>
+<a name="319"><span class="lineNum"> 319 </span> : : * Example:</a>
+<a name="320"><span class="lineNum"> 320 </span> : : * list_del(&amp;child-&gt;list);</a>
+<a name="321"><span class="lineNum"> 321 </span> : : * parent-&gt;num_children--;</a>
+<a name="322"><span class="lineNum"> 322 </span> : : */</a>
+<a name="323"><span class="lineNum"> 323 </span> : : #define list_del(n) list_del_(n, LIST_LOC)</a>
+<a name="324"><span class="lineNum"> 324 </span> :<span class="lineCov"> 20513 : static inline void list_del_(struct list_node *n, const char* abortstr)</span></a>
+<a name="325"><span class="lineNum"> 325 </span> : : {</a>
+<a name="326"><span class="lineNum"> 326 </span> :<span class="lineCov"> 20513 : (void)list_debug_node(n, abortstr);</span></a>
+<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 20513 : n-&gt;next-&gt;prev = n-&gt;prev;</span></a>
+<a name="328"><span class="lineNum"> 328 </span> :<span class="lineCov"> 20513 : n-&gt;prev-&gt;next = n-&gt;next;</span></a>
+<a name="329"><span class="lineNum"> 329 </span> : : #ifdef CCAN_LIST_DEBUG</a>
+<a name="330"><span class="lineNum"> 330 </span> : : /* Catch use-after-del. */</a>
+<a name="331"><span class="lineNum"> 331 </span> :<span class="lineCov"> 20513 : n-&gt;next = n-&gt;prev = NULL;</span></a>
+<a name="332"><span class="lineNum"> 332 </span> : : #endif</a>
+<a name="333"><span class="lineNum"> 333 </span> :<span class="lineCov"> 20513 : }</span></a>
+<a name="334"><span class="lineNum"> 334 </span> : : </a>
+<a name="335"><span class="lineNum"> 335 </span> : : /**</a>
+<a name="336"><span class="lineNum"> 336 </span> : : * list_del_init - delete a node, and reset it so it can be deleted again.</a>
+<a name="337"><span class="lineNum"> 337 </span> : : * @n: the list_node to be deleted.</a>
+<a name="338"><span class="lineNum"> 338 </span> : : *</a>
+<a name="339"><span class="lineNum"> 339 </span> : : * list_del(@n) or list_del_init() again after this will be safe,</a>
+<a name="340"><span class="lineNum"> 340 </span> : : * which can be useful in some cases.</a>
+<a name="341"><span class="lineNum"> 341 </span> : : *</a>
+<a name="342"><span class="lineNum"> 342 </span> : : * See also:</a>
+<a name="343"><span class="lineNum"> 343 </span> : : * list_del_from(), list_del()</a>
+<a name="344"><span class="lineNum"> 344 </span> : : *</a>
+<a name="345"><span class="lineNum"> 345 </span> : : * Example:</a>
+<a name="346"><span class="lineNum"> 346 </span> : : * list_del_init(&amp;child-&gt;list);</a>
+<a name="347"><span class="lineNum"> 347 </span> : : * parent-&gt;num_children--;</a>
+<a name="348"><span class="lineNum"> 348 </span> : : */</a>
+<a name="349"><span class="lineNum"> 349 </span> : : #define list_del_init(n) list_del_init_(n, LIST_LOC)</a>
+<a name="350"><span class="lineNum"> 350 </span> :<span class="lineCov"> 60 : static inline void list_del_init_(struct list_node *n, const char *abortstr)</span></a>
+<a name="351"><span class="lineNum"> 351 </span> : : {</a>
+<a name="352"><span class="lineNum"> 352 </span> :<span class="lineCov"> 60 : list_del_(n, abortstr);</span></a>
+<a name="353"><span class="lineNum"> 353 </span> :<span class="lineCov"> 60 : list_node_init(n);</span></a>
+<a name="354"><span class="lineNum"> 354 </span> :<span class="lineCov"> 60 : }</span></a>
+<a name="355"><span class="lineNum"> 355 </span> : : </a>
+<a name="356"><span class="lineNum"> 356 </span> : : /**</a>
+<a name="357"><span class="lineNum"> 357 </span> : : * list_del_from - delete an entry from a known linked list.</a>
+<a name="358"><span class="lineNum"> 358 </span> : : * @h: the list_head the node is in.</a>
+<a name="359"><span class="lineNum"> 359 </span> : : * @n: the list_node to delete from the list.</a>
+<a name="360"><span class="lineNum"> 360 </span> : : *</a>
+<a name="361"><span class="lineNum"> 361 </span> : : * This explicitly indicates which list a node is expected to be in,</a>
+<a name="362"><span class="lineNum"> 362 </span> : : * which is better documentation and can catch more bugs.</a>
+<a name="363"><span class="lineNum"> 363 </span> : : *</a>
+<a name="364"><span class="lineNum"> 364 </span> : : * See also: list_del()</a>
+<a name="365"><span class="lineNum"> 365 </span> : : *</a>
+<a name="366"><span class="lineNum"> 366 </span> : : * Example:</a>
+<a name="367"><span class="lineNum"> 367 </span> : : * list_del_from(&amp;parent-&gt;children, &amp;child-&gt;list);</a>
+<a name="368"><span class="lineNum"> 368 </span> : : * parent-&gt;num_children--;</a>
+<a name="369"><span class="lineNum"> 369 </span> : : */</a>
+<a name="370"><span class="lineNum"> 370 </span> :<span class="lineCov"> 15303 : static inline void list_del_from(struct list_head *h, struct list_node *n)</span></a>
+<a name="371"><span class="lineNum"> 371 </span> : : {</a>
+<a name="372"><span class="lineNum"> 372 </span> : : #ifdef CCAN_LIST_DEBUG</a>
+<a name="373"><span class="lineNum"> 373 </span> : : {</a>
+<a name="374"><span class="lineNum"> 374 </span> : : /* Thorough check: make sure it was in list! */</a>
+<a name="375"><span class="lineNum"> 375 </span> : : struct list_node *i;</a>
+<a name="376"><span class="lineNum"> 376 </span> :<span class="lineCov"> 17062 : for (i = h-&gt;n.next; i != n; i = i-&gt;next)</span></a>
+<a name="377"><span class="lineNum"> 377 </span> :<span class="lineCov"> 1759 : assert(i != &amp;h-&gt;n);</span></a>
+<a name="378"><span class="lineNum"> 378 </span> : : }</a>
+<a name="379"><span class="lineNum"> 379 </span> : : #endif /* CCAN_LIST_DEBUG */</a>
+<a name="380"><span class="lineNum"> 380 </span> : : </a>
+<a name="381"><span class="lineNum"> 381 </span> : : /* Quick test that catches a surprising number of bugs. */</a>
+<a name="382"><span class="lineNum"> 382 </span> :<span class="lineCov"> 15303 : assert(!list_empty(h));</span></a>
+<a name="383"><span class="lineNum"> 383 </span> :<span class="lineCov"> 15303 : list_del(n);</span></a>
+<a name="384"><span class="lineNum"> 384 </span> :<span class="lineCov"> 15303 : }</span></a>
+<a name="385"><span class="lineNum"> 385 </span> : : </a>
+<a name="386"><span class="lineNum"> 386 </span> : : /**</a>
+<a name="387"><span class="lineNum"> 387 </span> : : * list_swap - swap out an entry from an (unknown) linked list for a new one.</a>
+<a name="388"><span class="lineNum"> 388 </span> : : * @o: the list_node to replace from the list.</a>
+<a name="389"><span class="lineNum"> 389 </span> : : * @n: the list_node to insert in place of the old one.</a>
+<a name="390"><span class="lineNum"> 390 </span> : : *</a>
+<a name="391"><span class="lineNum"> 391 </span> : : * Note that this leaves @o in an undefined state; it can be added to</a>
+<a name="392"><span class="lineNum"> 392 </span> : : * another list, but not deleted/swapped again.</a>
+<a name="393"><span class="lineNum"> 393 </span> : : *</a>
+<a name="394"><span class="lineNum"> 394 </span> : : * See also:</a>
+<a name="395"><span class="lineNum"> 395 </span> : : * list_del()</a>
<a name="396"><span class="lineNum"> 396 </span> : : *</a>
-<a name="397"><span class="lineNum"> 397 </span> : : * This is a convenient wrapper to iterate @i over the entire list. It's</a>
-<a name="398"><span class="lineNum"> 398 </span> : : * a for loop, so you can break and continue as normal.</a>
-<a name="399"><span class="lineNum"> 399 </span> : : *</a>
-<a name="400"><span class="lineNum"> 400 </span> : : * Example:</a>
-<a name="401"><span class="lineNum"> 401 </span> : : * list_for_each(&amp;parent-&gt;children, child, list)</a>
-<a name="402"><span class="lineNum"> 402 </span> : : * printf(&quot;Name: %s\n&quot;, child-&gt;name);</a>
+<a name="397"><span class="lineNum"> 397 </span> : : * Example:</a>
+<a name="398"><span class="lineNum"> 398 </span> : : * struct child x1, x2;</a>
+<a name="399"><span class="lineNum"> 399 </span> : : * LIST_HEAD(xh);</a>
+<a name="400"><span class="lineNum"> 400 </span> : : *</a>
+<a name="401"><span class="lineNum"> 401 </span> : : * list_add(&amp;xh, &amp;x1.list);</a>
+<a name="402"><span class="lineNum"> 402 </span> : : * list_swap(&amp;x1.list, &amp;x2.list);</a>
<a name="403"><span class="lineNum"> 403 </span> : : */</a>
-<a name="404"><span class="lineNum"> 404 </span> : : #define list_for_each(h, i, member) \</a>
-<a name="405"><span class="lineNum"> 405 </span> : : list_for_each_off(h, i, list_off_var_(i, member))</a>
-<a name="406"><span class="lineNum"> 406 </span> : : </a>
-<a name="407"><span class="lineNum"> 407 </span> : : /**</a>
-<a name="408"><span class="lineNum"> 408 </span> : : * list_for_each_rev - iterate through a list backwards.</a>
-<a name="409"><span class="lineNum"> 409 </span> : : * @h: the list_head</a>
-<a name="410"><span class="lineNum"> 410 </span> : : * @i: the structure containing the list_node</a>
-<a name="411"><span class="lineNum"> 411 </span> : : * @member: the list_node member of the structure</a>
-<a name="412"><span class="lineNum"> 412 </span> : : *</a>
-<a name="413"><span class="lineNum"> 413 </span> : : * This is a convenient wrapper to iterate @i over the entire list. It's</a>
-<a name="414"><span class="lineNum"> 414 </span> : : * a for loop, so you can break and continue as normal.</a>
-<a name="415"><span class="lineNum"> 415 </span> : : *</a>
-<a name="416"><span class="lineNum"> 416 </span> : : * Example:</a>
-<a name="417"><span class="lineNum"> 417 </span> : : * list_for_each_rev(&amp;parent-&gt;children, child, list)</a>
-<a name="418"><span class="lineNum"> 418 </span> : : * printf(&quot;Name: %s\n&quot;, child-&gt;name);</a>
-<a name="419"><span class="lineNum"> 419 </span> : : */</a>
-<a name="420"><span class="lineNum"> 420 </span> : : #define list_for_each_rev(h, i, member) \</a>
-<a name="421"><span class="lineNum"> 421 </span> : : for (i = container_of_var(list_debug(h)-&gt;n.prev, i, member); \</a>
-<a name="422"><span class="lineNum"> 422 </span> : : &amp;i-&gt;member != &amp;(h)-&gt;n; \</a>
-<a name="423"><span class="lineNum"> 423 </span> : : i = container_of_var(i-&gt;member.prev, i, member))</a>
-<a name="424"><span class="lineNum"> 424 </span> : : </a>
-<a name="425"><span class="lineNum"> 425 </span> : : /**</a>
-<a name="426"><span class="lineNum"> 426 </span> : : * list_for_each_safe - iterate through a list, maybe during deletion</a>
-<a name="427"><span class="lineNum"> 427 </span> : : * @h: the list_head</a>
-<a name="428"><span class="lineNum"> 428 </span> : : * @i: the structure containing the list_node</a>
-<a name="429"><span class="lineNum"> 429 </span> : : * @nxt: the structure containing the list_node</a>
-<a name="430"><span class="lineNum"> 430 </span> : : * @member: the list_node member of the structure</a>
-<a name="431"><span class="lineNum"> 431 </span> : : *</a>
-<a name="432"><span class="lineNum"> 432 </span> : : * This is a convenient wrapper to iterate @i over the entire list. It's</a>
-<a name="433"><span class="lineNum"> 433 </span> : : * a for loop, so you can break and continue as normal. The extra variable</a>
-<a name="434"><span class="lineNum"> 434 </span> : : * @nxt is used to hold the next element, so you can delete @i from the list.</a>
-<a name="435"><span class="lineNum"> 435 </span> : : *</a>
-<a name="436"><span class="lineNum"> 436 </span> : : * Example:</a>
-<a name="437"><span class="lineNum"> 437 </span> : : * struct child *next;</a>
-<a name="438"><span class="lineNum"> 438 </span> : : * list_for_each_safe(&amp;parent-&gt;children, child, next, list) {</a>
-<a name="439"><span class="lineNum"> 439 </span> : : * list_del(&amp;child-&gt;list);</a>
-<a name="440"><span class="lineNum"> 440 </span> : : * parent-&gt;num_children--;</a>
-<a name="441"><span class="lineNum"> 441 </span> : : * }</a>
-<a name="442"><span class="lineNum"> 442 </span> : : */</a>
-<a name="443"><span class="lineNum"> 443 </span> : : #define list_for_each_safe(h, i, nxt, member) \</a>
-<a name="444"><span class="lineNum"> 444 </span> : : list_for_each_safe_off(h, i, nxt, list_off_var_(i, member))</a>
-<a name="445"><span class="lineNum"> 445 </span> : : </a>
-<a name="446"><span class="lineNum"> 446 </span> : : /**</a>
-<a name="447"><span class="lineNum"> 447 </span> : : * list_for_each_off - iterate through a list of memory regions.</a>
-<a name="448"><span class="lineNum"> 448 </span> : : * @h: the list_head</a>
-<a name="449"><span class="lineNum"> 449 </span> : : * @i: the pointer to a memory region which contains list node data.</a>
-<a name="450"><span class="lineNum"> 450 </span> : : * @off: offset(relative to @i) at which list node data resides.</a>
-<a name="451"><span class="lineNum"> 451 </span> : : *</a>
-<a name="452"><span class="lineNum"> 452 </span> : : * This is a low-level wrapper to iterate @i over the entire list, used to</a>
-<a name="453"><span class="lineNum"> 453 </span> : : * implement all oher, more high-level, for-each constructs. It's a for loop,</a>
-<a name="454"><span class="lineNum"> 454 </span> : : * so you can break and continue as normal.</a>
-<a name="455"><span class="lineNum"> 455 </span> : : *</a>
-<a name="456"><span class="lineNum"> 456 </span> : : * WARNING! Being the low-level macro that it is, this wrapper doesn't know</a>
-<a name="457"><span class="lineNum"> 457 </span> : : * nor care about the type of @i. The only assumtion made is that @i points</a>
-<a name="458"><span class="lineNum"> 458 </span> : : * to a chunk of memory that at some @offset, relative to @i, contains a</a>
-<a name="459"><span class="lineNum"> 459 </span> : : * properly filled `struct node_list' which in turn contains pointers to</a>
-<a name="460"><span class="lineNum"> 460 </span> : : * memory chunks and it's turtles all the way down. With all that in mind</a>
-<a name="461"><span class="lineNum"> 461 </span> : : * remember that given the wrong pointer/offset couple this macro will</a>
-<a name="462"><span class="lineNum"> 462 </span> : : * happily churn all you memory until SEGFAULT stops it, in other words</a>
-<a name="463"><span class="lineNum"> 463 </span> : : * caveat emptor.</a>
-<a name="464"><span class="lineNum"> 464 </span> : : *</a>
-<a name="465"><span class="lineNum"> 465 </span> : : * It is worth mentioning that one of legitimate use-cases for that wrapper</a>
-<a name="466"><span class="lineNum"> 466 </span> : : * is operation on opaque types with known offset for `struct list_node'</a>
-<a name="467"><span class="lineNum"> 467 </span> : : * member(preferably 0), because it allows you not to disclose the type of</a>
-<a name="468"><span class="lineNum"> 468 </span> : : * @i.</a>
-<a name="469"><span class="lineNum"> 469 </span> : : *</a>
-<a name="470"><span class="lineNum"> 470 </span> : : * Example:</a>
-<a name="471"><span class="lineNum"> 471 </span> : : * list_for_each_off(&amp;parent-&gt;children, child,</a>
-<a name="472"><span class="lineNum"> 472 </span> : : * offsetof(struct child, list))</a>
-<a name="473"><span class="lineNum"> 473 </span> : : * printf(&quot;Name: %s\n&quot;, child-&gt;name);</a>
-<a name="474"><span class="lineNum"> 474 </span> : : */</a>
-<a name="475"><span class="lineNum"> 475 </span> : : #define list_for_each_off(h, i, off) \</a>
-<a name="476"><span class="lineNum"> 476 </span> : : for (i = list_node_to_off_(list_debug(h)-&gt;n.next, (off)); \</a>
-<a name="477"><span class="lineNum"> 477 </span> : : list_node_from_off_((void *)i, (off)) != &amp;(h)-&gt;n; \</a>
-<a name="478"><span class="lineNum"> 478 </span> : : i = list_node_to_off_(list_node_from_off_((void *)i, (off))-&gt;next, \</a>
-<a name="479"><span class="lineNum"> 479 </span> : : (off)))</a>
-<a name="480"><span class="lineNum"> 480 </span> : : </a>
-<a name="481"><span class="lineNum"> 481 </span> : : /**</a>
-<a name="482"><span class="lineNum"> 482 </span> : : * list_for_each_safe_off - iterate through a list of memory regions, maybe</a>
-<a name="483"><span class="lineNum"> 483 </span> : : * during deletion</a>
-<a name="484"><span class="lineNum"> 484 </span> : : * @h: the list_head</a>
-<a name="485"><span class="lineNum"> 485 </span> : : * @i: the pointer to a memory region which contains list node data.</a>
-<a name="486"><span class="lineNum"> 486 </span> : : * @nxt: the structure containing the list_node</a>
-<a name="487"><span class="lineNum"> 487 </span> : : * @off: offset(relative to @i) at which list node data resides.</a>
-<a name="488"><span class="lineNum"> 488 </span> : : *</a>
-<a name="489"><span class="lineNum"> 489 </span> : : * For details see `list_for_each_off' and `list_for_each_safe'</a>
-<a name="490"><span class="lineNum"> 490 </span> : : * descriptions.</a>
+<a name="404"><span class="lineNum"> 404 </span> : : #define list_swap(o, n) list_swap_(o, n, LIST_LOC)</a>
+<a name="405"><span class="lineNum"> 405 </span> :<span class="lineCov"> 20 : static inline void list_swap_(struct list_node *o,</span></a>
+<a name="406"><span class="lineNum"> 406 </span> : : struct list_node *n,</a>
+<a name="407"><span class="lineNum"> 407 </span> : : const char* abortstr)</a>
+<a name="408"><span class="lineNum"> 408 </span> : : {</a>
+<a name="409"><span class="lineNum"> 409 </span> :<span class="lineCov"> 20 : (void)list_debug_node(o, abortstr);</span></a>
+<a name="410"><span class="lineNum"> 410 </span> :<span class="lineCov"> 20 : *n = *o;</span></a>
+<a name="411"><span class="lineNum"> 411 </span> :<span class="lineCov"> 20 : n-&gt;next-&gt;prev = n;</span></a>
+<a name="412"><span class="lineNum"> 412 </span> :<span class="lineCov"> 20 : n-&gt;prev-&gt;next = n;</span></a>
+<a name="413"><span class="lineNum"> 413 </span> : : #ifdef CCAN_LIST_DEBUG</a>
+<a name="414"><span class="lineNum"> 414 </span> : : /* Catch use-after-del. */</a>
+<a name="415"><span class="lineNum"> 415 </span> :<span class="lineCov"> 20 : o-&gt;next = o-&gt;prev = NULL;</span></a>
+<a name="416"><span class="lineNum"> 416 </span> : : #endif</a>
+<a name="417"><span class="lineNum"> 417 </span> :<span class="lineCov"> 20 : }</span></a>
+<a name="418"><span class="lineNum"> 418 </span> : : </a>
+<a name="419"><span class="lineNum"> 419 </span> : : /**</a>
+<a name="420"><span class="lineNum"> 420 </span> : : * list_entry - convert a list_node back into the structure containing it.</a>
+<a name="421"><span class="lineNum"> 421 </span> : : * @n: the list_node</a>
+<a name="422"><span class="lineNum"> 422 </span> : : * @type: the type of the entry</a>
+<a name="423"><span class="lineNum"> 423 </span> : : * @member: the list_node member of the type</a>
+<a name="424"><span class="lineNum"> 424 </span> : : *</a>
+<a name="425"><span class="lineNum"> 425 </span> : : * Example:</a>
+<a name="426"><span class="lineNum"> 426 </span> : : * // First list entry is children.next; convert back to child.</a>
+<a name="427"><span class="lineNum"> 427 </span> : : * child = list_entry(parent-&gt;children.n.next, struct child, list);</a>
+<a name="428"><span class="lineNum"> 428 </span> : : *</a>
+<a name="429"><span class="lineNum"> 429 </span> : : * See Also:</a>
+<a name="430"><span class="lineNum"> 430 </span> : : * list_top(), list_for_each()</a>
+<a name="431"><span class="lineNum"> 431 </span> : : */</a>
+<a name="432"><span class="lineNum"> 432 </span> : : #define list_entry(n, type, member) container_of(n, type, member)</a>
+<a name="433"><span class="lineNum"> 433 </span> : : </a>
+<a name="434"><span class="lineNum"> 434 </span> : : /**</a>
+<a name="435"><span class="lineNum"> 435 </span> : : * list_top - get the first entry in a list</a>
+<a name="436"><span class="lineNum"> 436 </span> : : * @h: the list_head</a>
+<a name="437"><span class="lineNum"> 437 </span> : : * @type: the type of the entry</a>
+<a name="438"><span class="lineNum"> 438 </span> : : * @member: the list_node member of the type</a>
+<a name="439"><span class="lineNum"> 439 </span> : : *</a>
+<a name="440"><span class="lineNum"> 440 </span> : : * If the list is empty, returns NULL.</a>
+<a name="441"><span class="lineNum"> 441 </span> : : *</a>
+<a name="442"><span class="lineNum"> 442 </span> : : * Example:</a>
+<a name="443"><span class="lineNum"> 443 </span> : : * struct child *first;</a>
+<a name="444"><span class="lineNum"> 444 </span> : : * first = list_top(&amp;parent-&gt;children, struct child, list);</a>
+<a name="445"><span class="lineNum"> 445 </span> : : * if (!first)</a>
+<a name="446"><span class="lineNum"> 446 </span> : : * printf(&quot;Empty list!\n&quot;);</a>
+<a name="447"><span class="lineNum"> 447 </span> : : */</a>
+<a name="448"><span class="lineNum"> 448 </span> : : #define list_top(h, type, member) \</a>
+<a name="449"><span class="lineNum"> 449 </span> : : ((type *)list_top_((h), list_off_(type, member)))</a>
+<a name="450"><span class="lineNum"> 450 </span> : : </a>
+<a name="451"><span class="lineNum"> 451 </span> :<span class="lineCov"> 133475 : static inline const void *list_top_(const struct list_head *h, size_t off)</span></a>
+<a name="452"><span class="lineNum"> 452 </span> : : {</a>
+<a name="453"><span class="lineNum"> 453 </span> :<span class="lineCov"> 133475 : if (list_empty(h))</span></a>
+<a name="454"><span class="lineNum"> 454 </span> :<span class="lineCov"> 66372 : return NULL;</span></a>
+<a name="455"><span class="lineNum"> 455 </span> :<span class="lineCov"> 67103 : return (const char *)h-&gt;n.next - off;</span></a>
+<a name="456"><span class="lineNum"> 456 </span> : : }</a>
+<a name="457"><span class="lineNum"> 457 </span> : : </a>
+<a name="458"><span class="lineNum"> 458 </span> : : /**</a>
+<a name="459"><span class="lineNum"> 459 </span> : : * list_pop - remove the first entry in a list</a>
+<a name="460"><span class="lineNum"> 460 </span> : : * @h: the list_head</a>
+<a name="461"><span class="lineNum"> 461 </span> : : * @type: the type of the entry</a>
+<a name="462"><span class="lineNum"> 462 </span> : : * @member: the list_node member of the type</a>
+<a name="463"><span class="lineNum"> 463 </span> : : *</a>
+<a name="464"><span class="lineNum"> 464 </span> : : * If the list is empty, returns NULL.</a>
+<a name="465"><span class="lineNum"> 465 </span> : : *</a>
+<a name="466"><span class="lineNum"> 466 </span> : : * Example:</a>
+<a name="467"><span class="lineNum"> 467 </span> : : * struct child *one;</a>
+<a name="468"><span class="lineNum"> 468 </span> : : * one = list_pop(&amp;parent-&gt;children, struct child, list);</a>
+<a name="469"><span class="lineNum"> 469 </span> : : * if (!one)</a>
+<a name="470"><span class="lineNum"> 470 </span> : : * printf(&quot;Empty list!\n&quot;);</a>
+<a name="471"><span class="lineNum"> 471 </span> : : */</a>
+<a name="472"><span class="lineNum"> 472 </span> : : #define list_pop(h, type, member) \</a>
+<a name="473"><span class="lineNum"> 473 </span> : : ((type *)list_pop_((h), list_off_(type, member)))</a>
+<a name="474"><span class="lineNum"> 474 </span> : : </a>
+<a name="475"><span class="lineNum"> 475 </span> :<span class="lineCov"> 5495 : static inline const void *list_pop_(const struct list_head *h, size_t off)</span></a>
+<a name="476"><span class="lineNum"> 476 </span> : : {</a>
+<a name="477"><span class="lineNum"> 477 </span> : : struct list_node *n;</a>
+<a name="478"><span class="lineNum"> 478 </span> : : </a>
+<a name="479"><span class="lineNum"> 479 </span> :<span class="lineCov"> 5495 : if (list_empty(h))</span></a>
+<a name="480"><span class="lineNum"> 480 </span> :<span class="lineCov"> 881 : return NULL;</span></a>
+<a name="481"><span class="lineNum"> 481 </span> :<span class="lineCov"> 4614 : n = h-&gt;n.next;</span></a>
+<a name="482"><span class="lineNum"> 482 </span> :<span class="lineCov"> 4614 : list_del(n);</span></a>
+<a name="483"><span class="lineNum"> 483 </span> :<span class="lineCov"> 4614 : return (const char *)n - off;</span></a>
+<a name="484"><span class="lineNum"> 484 </span> : : }</a>
+<a name="485"><span class="lineNum"> 485 </span> : : </a>
+<a name="486"><span class="lineNum"> 486 </span> : : /**</a>
+<a name="487"><span class="lineNum"> 487 </span> : : * list_tail - get the last entry in a list</a>
+<a name="488"><span class="lineNum"> 488 </span> : : * @h: the list_head</a>
+<a name="489"><span class="lineNum"> 489 </span> : : * @type: the type of the entry</a>
+<a name="490"><span class="lineNum"> 490 </span> : : * @member: the list_node member of the type</a>
<a name="491"><span class="lineNum"> 491 </span> : : *</a>
-<a name="492"><span class="lineNum"> 492 </span> : : * Example:</a>
-<a name="493"><span class="lineNum"> 493 </span> : : * list_for_each_safe_off(&amp;parent-&gt;children, child,</a>
-<a name="494"><span class="lineNum"> 494 </span> : : * next, offsetof(struct child, list))</a>
-<a name="495"><span class="lineNum"> 495 </span> : : * printf(&quot;Name: %s\n&quot;, child-&gt;name);</a>
-<a name="496"><span class="lineNum"> 496 </span> : : */</a>
-<a name="497"><span class="lineNum"> 497 </span> : : #define list_for_each_safe_off(h, i, nxt, off) \</a>
-<a name="498"><span class="lineNum"> 498 </span> : : for (i = list_node_to_off_(list_debug(h)-&gt;n.next, (off)), \</a>
-<a name="499"><span class="lineNum"> 499 </span> : : nxt = list_node_to_off_(list_node_from_off_(i, (off))-&gt;next, \</a>
-<a name="500"><span class="lineNum"> 500 </span> : : (off)); \</a>
-<a name="501"><span class="lineNum"> 501 </span> : : list_node_from_off_(i, (off)) != &amp;(h)-&gt;n; \</a>
-<a name="502"><span class="lineNum"> 502 </span> : : i = nxt, \</a>
-<a name="503"><span class="lineNum"> 503 </span> : : nxt = list_node_to_off_(list_node_from_off_(i, (off))-&gt;next, \</a>
-<a name="504"><span class="lineNum"> 504 </span> : : (off)))</a>
-<a name="505"><span class="lineNum"> 505 </span> : : </a>
-<a name="506"><span class="lineNum"> 506 </span> : : </a>
-<a name="507"><span class="lineNum"> 507 </span> : : /* Other -off variants. */</a>
-<a name="508"><span class="lineNum"> 508 </span> : : #define list_entry_off(n, type, off) \</a>
-<a name="509"><span class="lineNum"> 509 </span> : : ((type *)list_node_from_off_((n), (off)))</a>
-<a name="510"><span class="lineNum"> 510 </span> : : </a>
-<a name="511"><span class="lineNum"> 511 </span> : : #define list_head_off(h, type, off) \</a>
-<a name="512"><span class="lineNum"> 512 </span> : : ((type *)list_head_off((h), (off)))</a>
-<a name="513"><span class="lineNum"> 513 </span> : : </a>
-<a name="514"><span class="lineNum"> 514 </span> : : #define list_tail_off(h, type, off) \</a>
-<a name="515"><span class="lineNum"> 515 </span> : : ((type *)list_tail_((h), (off)))</a>
-<a name="516"><span class="lineNum"> 516 </span> : : </a>
-<a name="517"><span class="lineNum"> 517 </span> : : #define list_add_off(h, n, off) \</a>
-<a name="518"><span class="lineNum"> 518 </span> : : list_add((h), list_node_from_off_((n), (off)))</a>
-<a name="519"><span class="lineNum"> 519 </span> : : </a>
-<a name="520"><span class="lineNum"> 520 </span> : : #define list_del_off(n, off) \</a>
-<a name="521"><span class="lineNum"> 521 </span> : : list_del(list_node_from_off_((n), (off)))</a>
-<a name="522"><span class="lineNum"> 522 </span> : : </a>
-<a name="523"><span class="lineNum"> 523 </span> : : #define list_del_from_off(h, n, off) \</a>
-<a name="524"><span class="lineNum"> 524 </span> : : list_del_from(h, list_node_from_off_((n), (off)))</a>
+<a name="492"><span class="lineNum"> 492 </span> : : * If the list is empty, returns NULL.</a>
+<a name="493"><span class="lineNum"> 493 </span> : : *</a>
+<a name="494"><span class="lineNum"> 494 </span> : : * Example:</a>
+<a name="495"><span class="lineNum"> 495 </span> : : * struct child *last;</a>
+<a name="496"><span class="lineNum"> 496 </span> : : * last = list_tail(&amp;parent-&gt;children, struct child, list);</a>
+<a name="497"><span class="lineNum"> 497 </span> : : * if (!last)</a>
+<a name="498"><span class="lineNum"> 498 </span> : : * printf(&quot;Empty list!\n&quot;);</a>
+<a name="499"><span class="lineNum"> 499 </span> : : */</a>
+<a name="500"><span class="lineNum"> 500 </span> : : #define list_tail(h, type, member) \</a>
+<a name="501"><span class="lineNum"> 501 </span> : : ((type *)list_tail_((h), list_off_(type, member)))</a>
+<a name="502"><span class="lineNum"> 502 </span> : : </a>
+<a name="503"><span class="lineNum"> 503 </span> :<span class="lineCov"> 241 : static inline const void *list_tail_(const struct list_head *h, size_t off)</span></a>
+<a name="504"><span class="lineNum"> 504 </span> : : {</a>
+<a name="505"><span class="lineNum"> 505 </span> :<span class="lineCov"> 241 : if (list_empty(h))</span></a>
+<a name="506"><span class="lineNum"> 506 </span> :<span class="lineCov"> 156 : return NULL;</span></a>
+<a name="507"><span class="lineNum"> 507 </span> :<span class="lineCov"> 85 : return (const char *)h-&gt;n.prev - off;</span></a>
+<a name="508"><span class="lineNum"> 508 </span> : : }</a>
+<a name="509"><span class="lineNum"> 509 </span> : : </a>
+<a name="510"><span class="lineNum"> 510 </span> : : /**</a>
+<a name="511"><span class="lineNum"> 511 </span> : : * list_for_each - iterate through a list.</a>
+<a name="512"><span class="lineNum"> 512 </span> : : * @h: the list_head (warning: evaluated multiple times!)</a>
+<a name="513"><span class="lineNum"> 513 </span> : : * @i: the structure containing the list_node</a>
+<a name="514"><span class="lineNum"> 514 </span> : : * @member: the list_node member of the structure</a>
+<a name="515"><span class="lineNum"> 515 </span> : : *</a>
+<a name="516"><span class="lineNum"> 516 </span> : : * This is a convenient wrapper to iterate @i over the entire list. It's</a>
+<a name="517"><span class="lineNum"> 517 </span> : : * a for loop, so you can break and continue as normal.</a>
+<a name="518"><span class="lineNum"> 518 </span> : : *</a>
+<a name="519"><span class="lineNum"> 519 </span> : : * Example:</a>
+<a name="520"><span class="lineNum"> 520 </span> : : * list_for_each(&amp;parent-&gt;children, child, list)</a>
+<a name="521"><span class="lineNum"> 521 </span> : : * printf(&quot;Name: %s\n&quot;, child-&gt;name);</a>
+<a name="522"><span class="lineNum"> 522 </span> : : */</a>
+<a name="523"><span class="lineNum"> 523 </span> : : #define list_for_each(h, i, member) \</a>
+<a name="524"><span class="lineNum"> 524 </span> : : list_for_each_off(h, i, list_off_var_(i, member))</a>
<a name="525"><span class="lineNum"> 525 </span> : : </a>
-<a name="526"><span class="lineNum"> 526 </span> : : /* Offset helper functions so we only single-evaluate. */</a>
-<a name="527"><span class="lineNum"> 527 </span> :<span class="lineCov"> 376883 : static inline void *list_node_to_off_(struct list_node *node, size_t off)</span></a>
-<a name="528"><span class="lineNum"> 528 </span> : : {</a>
-<a name="529"><span class="lineNum"> 529 </span> :<span class="lineCov"> 376883 : return (void *)((char *)node - off);</span></a>
-<a name="530"><span class="lineNum"> 530 </span> : : }</a>
-<a name="531"><span class="lineNum"> 531 </span> :<span class="lineCov"> 603699 : static inline struct list_node *list_node_from_off_(void *ptr, size_t off)</span></a>
-<a name="532"><span class="lineNum"> 532 </span> : : {</a>
-<a name="533"><span class="lineNum"> 533 </span> :<span class="lineCov"> 603699 : return (struct list_node *)((char *)ptr + off);</span></a>
-<a name="534"><span class="lineNum"> 534 </span> : : }</a>
-<a name="535"><span class="lineNum"> 535 </span> : : </a>
-<a name="536"><span class="lineNum"> 536 </span> : : /* Get the offset of the member, but make sure it's a list_node. */</a>
-<a name="537"><span class="lineNum"> 537 </span> : : #define list_off_(type, member) \</a>
-<a name="538"><span class="lineNum"> 538 </span> : : (container_off(type, member) + \</a>
-<a name="539"><span class="lineNum"> 539 </span> : : check_type(((type *)0)-&gt;member, struct list_node))</a>
-<a name="540"><span class="lineNum"> 540 </span> : : </a>
-<a name="541"><span class="lineNum"> 541 </span> : : #define list_off_var_(var, member) \</a>
-<a name="542"><span class="lineNum"> 542 </span> : : (container_off_var(var, member) + \</a>
-<a name="543"><span class="lineNum"> 543 </span> : : check_type(var-&gt;member, struct list_node))</a>
-<a name="544"><span class="lineNum"> 544 </span> : : </a>
-<a name="545"><span class="lineNum"> 545 </span> : : </a>
-<a name="546"><span class="lineNum"> 546 </span> : : #if HAVE_TYPEOF</a>
-<a name="547"><span class="lineNum"> 547 </span> : : #define list_typeof(var) typeof(var)</a>
-<a name="548"><span class="lineNum"> 548 </span> : : #else</a>
-<a name="549"><span class="lineNum"> 549 </span> : : #define list_typeof(var) void *</a>
-<a name="550"><span class="lineNum"> 550 </span> : : #endif</a>
-<a name="551"><span class="lineNum"> 551 </span> : : </a>
-<a name="552"><span class="lineNum"> 552 </span> : : </a>
-<a name="553"><span class="lineNum"> 553 </span> : : /* Returns member, or NULL if at end of list. */</a>
-<a name="554"><span class="lineNum"> 554 </span> :<span class="lineCov"> 3 : static inline void *list_entry_or_null(const struct list_head *h,</span></a>
-<a name="555"><span class="lineNum"> 555 </span> : : const struct list_node *n,</a>
-<a name="556"><span class="lineNum"> 556 </span> : : size_t off)</a>
-<a name="557"><span class="lineNum"> 557 </span> : : {</a>
-<a name="558"><span class="lineNum"> 558 </span> :<span class="lineCov"> 3 : if (n == &amp;h-&gt;n)</span></a>
-<a name="559"><span class="lineNum"> 559 </span> :<span class="lineCov"> 1 : return NULL;</span></a>
-<a name="560"><span class="lineNum"> 560 </span> :<span class="lineCov"> 2 : return (char *)n - off;</span></a>
-<a name="561"><span class="lineNum"> 561 </span> : : }</a>
-<a name="562"><span class="lineNum"> 562 </span> : : </a>
-<a name="563"><span class="lineNum"> 563 </span> : : /**</a>
-<a name="564"><span class="lineNum"> 564 </span> : : * list_next - get the next entry in a list</a>
-<a name="565"><span class="lineNum"> 565 </span> : : * @h: the list_head</a>
-<a name="566"><span class="lineNum"> 566 </span> : : * @i: a pointer to an entry in the list.</a>
-<a name="567"><span class="lineNum"> 567 </span> : : * @member: the list_node member of the structure</a>
-<a name="568"><span class="lineNum"> 568 </span> : : *</a>
-<a name="569"><span class="lineNum"> 569 </span> : : * If @i was the last entry in the list, returns NULL.</a>
+<a name="526"><span class="lineNum"> 526 </span> : : /**</a>
+<a name="527"><span class="lineNum"> 527 </span> : : * list_for_each_rev - iterate through a list backwards.</a>
+<a name="528"><span class="lineNum"> 528 </span> : : * @h: the list_head</a>
+<a name="529"><span class="lineNum"> 529 </span> : : * @i: the structure containing the list_node</a>
+<a name="530"><span class="lineNum"> 530 </span> : : * @member: the list_node member of the structure</a>
+<a name="531"><span class="lineNum"> 531 </span> : : *</a>
+<a name="532"><span class="lineNum"> 532 </span> : : * This is a convenient wrapper to iterate @i over the entire list. It's</a>
+<a name="533"><span class="lineNum"> 533 </span> : : * a for loop, so you can break and continue as normal.</a>
+<a name="534"><span class="lineNum"> 534 </span> : : *</a>
+<a name="535"><span class="lineNum"> 535 </span> : : * Example:</a>
+<a name="536"><span class="lineNum"> 536 </span> : : * list_for_each_rev(&amp;parent-&gt;children, child, list)</a>
+<a name="537"><span class="lineNum"> 537 </span> : : * printf(&quot;Name: %s\n&quot;, child-&gt;name);</a>
+<a name="538"><span class="lineNum"> 538 </span> : : */</a>
+<a name="539"><span class="lineNum"> 539 </span> : : #define list_for_each_rev(h, i, member) \</a>
+<a name="540"><span class="lineNum"> 540 </span> : : list_for_each_rev_off(h, i, list_off_var_(i, member))</a>
+<a name="541"><span class="lineNum"> 541 </span> : : </a>
+<a name="542"><span class="lineNum"> 542 </span> : : /**</a>
+<a name="543"><span class="lineNum"> 543 </span> : : * list_for_each_rev_safe - iterate through a list backwards,</a>
+<a name="544"><span class="lineNum"> 544 </span> : : * maybe during deletion</a>
+<a name="545"><span class="lineNum"> 545 </span> : : * @h: the list_head</a>
+<a name="546"><span class="lineNum"> 546 </span> : : * @i: the structure containing the list_node</a>
+<a name="547"><span class="lineNum"> 547 </span> : : * @nxt: the structure containing the list_node</a>
+<a name="548"><span class="lineNum"> 548 </span> : : * @member: the list_node member of the structure</a>
+<a name="549"><span class="lineNum"> 549 </span> : : *</a>
+<a name="550"><span class="lineNum"> 550 </span> : : * This is a convenient wrapper to iterate @i over the entire list backwards.</a>
+<a name="551"><span class="lineNum"> 551 </span> : : * It's a for loop, so you can break and continue as normal. The extra</a>
+<a name="552"><span class="lineNum"> 552 </span> : : * variable * @nxt is used to hold the next element, so you can delete @i</a>
+<a name="553"><span class="lineNum"> 553 </span> : : * from the list.</a>
+<a name="554"><span class="lineNum"> 554 </span> : : *</a>
+<a name="555"><span class="lineNum"> 555 </span> : : * Example:</a>
+<a name="556"><span class="lineNum"> 556 </span> : : * struct child *next;</a>
+<a name="557"><span class="lineNum"> 557 </span> : : * list_for_each_rev_safe(&amp;parent-&gt;children, child, next, list) {</a>
+<a name="558"><span class="lineNum"> 558 </span> : : * printf(&quot;Name: %s\n&quot;, child-&gt;name);</a>
+<a name="559"><span class="lineNum"> 559 </span> : : * }</a>
+<a name="560"><span class="lineNum"> 560 </span> : : */</a>
+<a name="561"><span class="lineNum"> 561 </span> : : #define list_for_each_rev_safe(h, i, nxt, member) \</a>
+<a name="562"><span class="lineNum"> 562 </span> : : list_for_each_rev_safe_off(h, i, nxt, list_off_var_(i, member))</a>
+<a name="563"><span class="lineNum"> 563 </span> : : </a>
+<a name="564"><span class="lineNum"> 564 </span> : : /**</a>
+<a name="565"><span class="lineNum"> 565 </span> : : * list_for_each_safe - iterate through a list, maybe during deletion</a>
+<a name="566"><span class="lineNum"> 566 </span> : : * @h: the list_head</a>
+<a name="567"><span class="lineNum"> 567 </span> : : * @i: the structure containing the list_node</a>
+<a name="568"><span class="lineNum"> 568 </span> : : * @nxt: the structure containing the list_node</a>
+<a name="569"><span class="lineNum"> 569 </span> : : * @member: the list_node member of the structure</a>
<a name="570"><span class="lineNum"> 570 </span> : : *</a>
-<a name="571"><span class="lineNum"> 571 </span> : : * Example:</a>
-<a name="572"><span class="lineNum"> 572 </span> : : * struct child *second;</a>
-<a name="573"><span class="lineNum"> 573 </span> : : * second = list_next(&amp;parent-&gt;children, first, list);</a>
-<a name="574"><span class="lineNum"> 574 </span> : : * if (!second)</a>
-<a name="575"><span class="lineNum"> 575 </span> : : * printf(&quot;No second child!\n&quot;);</a>
-<a name="576"><span class="lineNum"> 576 </span> : : */</a>
-<a name="577"><span class="lineNum"> 577 </span> : : #define list_next(h, i, member) \</a>
-<a name="578"><span class="lineNum"> 578 </span> : : ((list_typeof(i))list_entry_or_null(list_debug(h), \</a>
-<a name="579"><span class="lineNum"> 579 </span> : : (i)-&gt;member.next, \</a>
-<a name="580"><span class="lineNum"> 580 </span> : : list_off_var_((i), member)))</a>
-<a name="581"><span class="lineNum"> 581 </span> : : </a>
-<a name="582"><span class="lineNum"> 582 </span> : : </a>
-<a name="583"><span class="lineNum"> 583 </span> : : #endif /* CCAN_LIST_H */</a>
+<a name="571"><span class="lineNum"> 571 </span> : : * This is a convenient wrapper to iterate @i over the entire list. It's</a>
+<a name="572"><span class="lineNum"> 572 </span> : : * a for loop, so you can break and continue as normal. The extra variable</a>
+<a name="573"><span class="lineNum"> 573 </span> : : * @nxt is used to hold the next element, so you can delete @i from the list.</a>
+<a name="574"><span class="lineNum"> 574 </span> : : *</a>
+<a name="575"><span class="lineNum"> 575 </span> : : * Example:</a>
+<a name="576"><span class="lineNum"> 576 </span> : : * list_for_each_safe(&amp;parent-&gt;children, child, next, list) {</a>
+<a name="577"><span class="lineNum"> 577 </span> : : * list_del(&amp;child-&gt;list);</a>
+<a name="578"><span class="lineNum"> 578 </span> : : * parent-&gt;num_children--;</a>
+<a name="579"><span class="lineNum"> 579 </span> : : * }</a>
+<a name="580"><span class="lineNum"> 580 </span> : : */</a>
+<a name="581"><span class="lineNum"> 581 </span> : : #define list_for_each_safe(h, i, nxt, member) \</a>
+<a name="582"><span class="lineNum"> 582 </span> : : list_for_each_safe_off(h, i, nxt, list_off_var_(i, member))</a>
+<a name="583"><span class="lineNum"> 583 </span> : : </a>
+<a name="584"><span class="lineNum"> 584 </span> : : /**</a>
+<a name="585"><span class="lineNum"> 585 </span> : : * list_next - get the next entry in a list</a>
+<a name="586"><span class="lineNum"> 586 </span> : : * @h: the list_head</a>
+<a name="587"><span class="lineNum"> 587 </span> : : * @i: a pointer to an entry in the list.</a>
+<a name="588"><span class="lineNum"> 588 </span> : : * @member: the list_node member of the structure</a>
+<a name="589"><span class="lineNum"> 589 </span> : : *</a>
+<a name="590"><span class="lineNum"> 590 </span> : : * If @i was the last entry in the list, returns NULL.</a>
+<a name="591"><span class="lineNum"> 591 </span> : : *</a>
+<a name="592"><span class="lineNum"> 592 </span> : : * Example:</a>
+<a name="593"><span class="lineNum"> 593 </span> : : * struct child *second;</a>
+<a name="594"><span class="lineNum"> 594 </span> : : * second = list_next(&amp;parent-&gt;children, first, list);</a>
+<a name="595"><span class="lineNum"> 595 </span> : : * if (!second)</a>
+<a name="596"><span class="lineNum"> 596 </span> : : * printf(&quot;No second child!\n&quot;);</a>
+<a name="597"><span class="lineNum"> 597 </span> : : */</a>
+<a name="598"><span class="lineNum"> 598 </span> : : #define list_next(h, i, member) \</a>
+<a name="599"><span class="lineNum"> 599 </span> : : ((list_typeof(i))list_entry_or_null(list_debug(h, \</a>
+<a name="600"><span class="lineNum"> 600 </span> : : __FILE__ &quot;:&quot; stringify(__LINE__)), \</a>
+<a name="601"><span class="lineNum"> 601 </span> : : (i)-&gt;member.next, \</a>
+<a name="602"><span class="lineNum"> 602 </span> : : list_off_var_((i), member)))</a>
+<a name="603"><span class="lineNum"> 603 </span> : : </a>
+<a name="604"><span class="lineNum"> 604 </span> : : /**</a>
+<a name="605"><span class="lineNum"> 605 </span> : : * list_prev - get the previous entry in a list</a>
+<a name="606"><span class="lineNum"> 606 </span> : : * @h: the list_head</a>
+<a name="607"><span class="lineNum"> 607 </span> : : * @i: a pointer to an entry in the list.</a>
+<a name="608"><span class="lineNum"> 608 </span> : : * @member: the list_node member of the structure</a>
+<a name="609"><span class="lineNum"> 609 </span> : : *</a>
+<a name="610"><span class="lineNum"> 610 </span> : : * If @i was the first entry in the list, returns NULL.</a>
+<a name="611"><span class="lineNum"> 611 </span> : : *</a>
+<a name="612"><span class="lineNum"> 612 </span> : : * Example:</a>
+<a name="613"><span class="lineNum"> 613 </span> : : * first = list_prev(&amp;parent-&gt;children, second, list);</a>
+<a name="614"><span class="lineNum"> 614 </span> : : * if (!first)</a>
+<a name="615"><span class="lineNum"> 615 </span> : : * printf(&quot;Can't go back to first child?!\n&quot;);</a>
+<a name="616"><span class="lineNum"> 616 </span> : : */</a>
+<a name="617"><span class="lineNum"> 617 </span> : : #define list_prev(h, i, member) \</a>
+<a name="618"><span class="lineNum"> 618 </span> : : ((list_typeof(i))list_entry_or_null(list_debug(h, \</a>
+<a name="619"><span class="lineNum"> 619 </span> : : __FILE__ &quot;:&quot; stringify(__LINE__)), \</a>
+<a name="620"><span class="lineNum"> 620 </span> : : (i)-&gt;member.prev, \</a>
+<a name="621"><span class="lineNum"> 621 </span> : : list_off_var_((i), member)))</a>
+<a name="622"><span class="lineNum"> 622 </span> : : </a>
+<a name="623"><span class="lineNum"> 623 </span> : : /**</a>
+<a name="624"><span class="lineNum"> 624 </span> : : * list_append_list - empty one list onto the end of another.</a>
+<a name="625"><span class="lineNum"> 625 </span> : : * @to: the list to append into</a>
+<a name="626"><span class="lineNum"> 626 </span> : : * @from: the list to empty.</a>
+<a name="627"><span class="lineNum"> 627 </span> : : *</a>
+<a name="628"><span class="lineNum"> 628 </span> : : * This takes the entire contents of @from and moves it to the end of</a>
+<a name="629"><span class="lineNum"> 629 </span> : : * @to. After this @from will be empty.</a>
+<a name="630"><span class="lineNum"> 630 </span> : : *</a>
+<a name="631"><span class="lineNum"> 631 </span> : : * Example:</a>
+<a name="632"><span class="lineNum"> 632 </span> : : * struct list_head adopter;</a>
+<a name="633"><span class="lineNum"> 633 </span> : : *</a>
+<a name="634"><span class="lineNum"> 634 </span> : : * list_append_list(&amp;adopter, &amp;parent-&gt;children);</a>
+<a name="635"><span class="lineNum"> 635 </span> : : * assert(list_empty(&amp;parent-&gt;children));</a>
+<a name="636"><span class="lineNum"> 636 </span> : : * parent-&gt;num_children = 0;</a>
+<a name="637"><span class="lineNum"> 637 </span> : : */</a>
+<a name="638"><span class="lineNum"> 638 </span> : : #define list_append_list(t, f) list_append_list_(t, f, \</a>
+<a name="639"><span class="lineNum"> 639 </span> : : __FILE__ &quot;:&quot; stringify(__LINE__))</a>
+<a name="640"><span class="lineNum"> 640 </span> :<span class="lineCov"> 50 : static inline void list_append_list_(struct list_head *to,</span></a>
+<a name="641"><span class="lineNum"> 641 </span> : : struct list_head *from,</a>
+<a name="642"><span class="lineNum"> 642 </span> : : const char *abortstr)</a>
+<a name="643"><span class="lineNum"> 643 </span> : : {</a>
+<a name="644"><span class="lineNum"> 644 </span> :<span class="lineCov"> 50 : struct list_node *from_tail = list_debug(from, abortstr)-&gt;n.prev;</span></a>
+<a name="645"><span class="lineNum"> 645 </span> :<span class="lineCov"> 50 : struct list_node *to_tail = list_debug(to, abortstr)-&gt;n.prev;</span></a>
+<a name="646"><span class="lineNum"> 646 </span> : : </a>
+<a name="647"><span class="lineNum"> 647 </span> : : /* Sew in head and entire list. */</a>
+<a name="648"><span class="lineNum"> 648 </span> :<span class="lineCov"> 50 : to-&gt;n.prev = from_tail;</span></a>
+<a name="649"><span class="lineNum"> 649 </span> :<span class="lineCov"> 50 : from_tail-&gt;next = &amp;to-&gt;n;</span></a>
+<a name="650"><span class="lineNum"> 650 </span> :<span class="lineCov"> 50 : to_tail-&gt;next = &amp;from-&gt;n;</span></a>
+<a name="651"><span class="lineNum"> 651 </span> :<span class="lineCov"> 50 : from-&gt;n.prev = to_tail;</span></a>
+<a name="652"><span class="lineNum"> 652 </span> : : </a>
+<a name="653"><span class="lineNum"> 653 </span> : : /* Now remove head. */</a>
+<a name="654"><span class="lineNum"> 654 </span> :<span class="lineCov"> 50 : list_del(&amp;from-&gt;n);</span></a>
+<a name="655"><span class="lineNum"> 655 </span> :<span class="lineCov"> 50 : list_head_init(from);</span></a>
+<a name="656"><span class="lineNum"> 656 </span> :<span class="lineCov"> 50 : }</span></a>
+<a name="657"><span class="lineNum"> 657 </span> : : </a>
+<a name="658"><span class="lineNum"> 658 </span> : : /**</a>
+<a name="659"><span class="lineNum"> 659 </span> : : * list_prepend_list - empty one list into the start of another.</a>
+<a name="660"><span class="lineNum"> 660 </span> : : * @to: the list to prepend into</a>
+<a name="661"><span class="lineNum"> 661 </span> : : * @from: the list to empty.</a>
+<a name="662"><span class="lineNum"> 662 </span> : : *</a>
+<a name="663"><span class="lineNum"> 663 </span> : : * This takes the entire contents of @from and moves it to the start</a>
+<a name="664"><span class="lineNum"> 664 </span> : : * of @to. After this @from will be empty.</a>
+<a name="665"><span class="lineNum"> 665 </span> : : *</a>
+<a name="666"><span class="lineNum"> 666 </span> : : * Example:</a>
+<a name="667"><span class="lineNum"> 667 </span> : : * list_prepend_list(&amp;adopter, &amp;parent-&gt;children);</a>
+<a name="668"><span class="lineNum"> 668 </span> : : * assert(list_empty(&amp;parent-&gt;children));</a>
+<a name="669"><span class="lineNum"> 669 </span> : : * parent-&gt;num_children = 0;</a>
+<a name="670"><span class="lineNum"> 670 </span> : : */</a>
+<a name="671"><span class="lineNum"> 671 </span> : : #define list_prepend_list(t, f) list_prepend_list_(t, f, LIST_LOC)</a>
+<a name="672"><span class="lineNum"> 672 </span> :<span class="lineCov"> 50 : static inline void list_prepend_list_(struct list_head *to,</span></a>
+<a name="673"><span class="lineNum"> 673 </span> : : struct list_head *from,</a>
+<a name="674"><span class="lineNum"> 674 </span> : : const char *abortstr)</a>
+<a name="675"><span class="lineNum"> 675 </span> : : {</a>
+<a name="676"><span class="lineNum"> 676 </span> :<span class="lineCov"> 50 : struct list_node *from_tail = list_debug(from, abortstr)-&gt;n.prev;</span></a>
+<a name="677"><span class="lineNum"> 677 </span> :<span class="lineCov"> 50 : struct list_node *to_head = list_debug(to, abortstr)-&gt;n.next;</span></a>
+<a name="678"><span class="lineNum"> 678 </span> : : </a>
+<a name="679"><span class="lineNum"> 679 </span> : : /* Sew in head and entire list. */</a>
+<a name="680"><span class="lineNum"> 680 </span> :<span class="lineCov"> 50 : to-&gt;n.next = &amp;from-&gt;n;</span></a>
+<a name="681"><span class="lineNum"> 681 </span> :<span class="lineCov"> 50 : from-&gt;n.prev = &amp;to-&gt;n;</span></a>
+<a name="682"><span class="lineNum"> 682 </span> :<span class="lineCov"> 50 : to_head-&gt;prev = from_tail;</span></a>
+<a name="683"><span class="lineNum"> 683 </span> :<span class="lineCov"> 50 : from_tail-&gt;next = to_head;</span></a>
+<a name="684"><span class="lineNum"> 684 </span> : : </a>
+<a name="685"><span class="lineNum"> 685 </span> : : /* Now remove head. */</a>
+<a name="686"><span class="lineNum"> 686 </span> :<span class="lineCov"> 50 : list_del(&amp;from-&gt;n);</span></a>
+<a name="687"><span class="lineNum"> 687 </span> :<span class="lineCov"> 50 : list_head_init(from);</span></a>
+<a name="688"><span class="lineNum"> 688 </span> :<span class="lineCov"> 50 : }</span></a>
+<a name="689"><span class="lineNum"> 689 </span> : : </a>
+<a name="690"><span class="lineNum"> 690 </span> : : /* internal macros, do not use directly */</a>
+<a name="691"><span class="lineNum"> 691 </span> : : #define list_for_each_off_dir_(h, i, off, dir) \</a>
+<a name="692"><span class="lineNum"> 692 </span> : : for (i = list_node_to_off_(list_debug(h, LIST_LOC)-&gt;n.dir, \</a>
+<a name="693"><span class="lineNum"> 693 </span> : : (off)); \</a>
+<a name="694"><span class="lineNum"> 694 </span> : : list_node_from_off_((void *)i, (off)) != &amp;(h)-&gt;n; \</a>
+<a name="695"><span class="lineNum"> 695 </span> : : i = list_node_to_off_(list_node_from_off_((void *)i, (off))-&gt;dir, \</a>
+<a name="696"><span class="lineNum"> 696 </span> : : (off)))</a>
+<a name="697"><span class="lineNum"> 697 </span> : : </a>
+<a name="698"><span class="lineNum"> 698 </span> : : #define list_for_each_safe_off_dir_(h, i, nxt, off, dir) \</a>
+<a name="699"><span class="lineNum"> 699 </span> : : for (i = list_node_to_off_(list_debug(h, LIST_LOC)-&gt;n.dir, \</a>
+<a name="700"><span class="lineNum"> 700 </span> : : (off)), \</a>
+<a name="701"><span class="lineNum"> 701 </span> : : nxt = list_node_to_off_(list_node_from_off_(i, (off))-&gt;dir, \</a>
+<a name="702"><span class="lineNum"> 702 </span> : : (off)); \</a>
+<a name="703"><span class="lineNum"> 703 </span> : : list_node_from_off_(i, (off)) != &amp;(h)-&gt;n; \</a>
+<a name="704"><span class="lineNum"> 704 </span> : : i = nxt, \</a>
+<a name="705"><span class="lineNum"> 705 </span> : : nxt = list_node_to_off_(list_node_from_off_(i, (off))-&gt;dir, \</a>
+<a name="706"><span class="lineNum"> 706 </span> : : (off)))</a>
+<a name="707"><span class="lineNum"> 707 </span> : : </a>
+<a name="708"><span class="lineNum"> 708 </span> : : /**</a>
+<a name="709"><span class="lineNum"> 709 </span> : : * list_for_each_off - iterate through a list of memory regions.</a>
+<a name="710"><span class="lineNum"> 710 </span> : : * @h: the list_head</a>
+<a name="711"><span class="lineNum"> 711 </span> : : * @i: the pointer to a memory region which contains list node data.</a>
+<a name="712"><span class="lineNum"> 712 </span> : : * @off: offset(relative to @i) at which list node data resides.</a>
+<a name="713"><span class="lineNum"> 713 </span> : : *</a>
+<a name="714"><span class="lineNum"> 714 </span> : : * This is a low-level wrapper to iterate @i over the entire list, used to</a>
+<a name="715"><span class="lineNum"> 715 </span> : : * implement all oher, more high-level, for-each constructs. It's a for loop,</a>
+<a name="716"><span class="lineNum"> 716 </span> : : * so you can break and continue as normal.</a>
+<a name="717"><span class="lineNum"> 717 </span> : : *</a>
+<a name="718"><span class="lineNum"> 718 </span> : : * WARNING! Being the low-level macro that it is, this wrapper doesn't know</a>
+<a name="719"><span class="lineNum"> 719 </span> : : * nor care about the type of @i. The only assumption made is that @i points</a>
+<a name="720"><span class="lineNum"> 720 </span> : : * to a chunk of memory that at some @offset, relative to @i, contains a</a>
+<a name="721"><span class="lineNum"> 721 </span> : : * properly filled `struct list_node' which in turn contains pointers to</a>
+<a name="722"><span class="lineNum"> 722 </span> : : * memory chunks and it's turtles all the way down. With all that in mind</a>
+<a name="723"><span class="lineNum"> 723 </span> : : * remember that given the wrong pointer/offset couple this macro will</a>
+<a name="724"><span class="lineNum"> 724 </span> : : * happily churn all you memory until SEGFAULT stops it, in other words</a>
+<a name="725"><span class="lineNum"> 725 </span> : : * caveat emptor.</a>
+<a name="726"><span class="lineNum"> 726 </span> : : *</a>
+<a name="727"><span class="lineNum"> 727 </span> : : * It is worth mentioning that one of legitimate use-cases for that wrapper</a>
+<a name="728"><span class="lineNum"> 728 </span> : : * is operation on opaque types with known offset for `struct list_node'</a>
+<a name="729"><span class="lineNum"> 729 </span> : : * member(preferably 0), because it allows you not to disclose the type of</a>
+<a name="730"><span class="lineNum"> 730 </span> : : * @i.</a>
+<a name="731"><span class="lineNum"> 731 </span> : : *</a>
+<a name="732"><span class="lineNum"> 732 </span> : : * Example:</a>
+<a name="733"><span class="lineNum"> 733 </span> : : * list_for_each_off(&amp;parent-&gt;children, child,</a>
+<a name="734"><span class="lineNum"> 734 </span> : : * offsetof(struct child, list))</a>
+<a name="735"><span class="lineNum"> 735 </span> : : * printf(&quot;Name: %s\n&quot;, child-&gt;name);</a>
+<a name="736"><span class="lineNum"> 736 </span> : : */</a>
+<a name="737"><span class="lineNum"> 737 </span> : : #define list_for_each_off(h, i, off) \</a>
+<a name="738"><span class="lineNum"> 738 </span> : : list_for_each_off_dir_((h),(i),(off),next)</a>
+<a name="739"><span class="lineNum"> 739 </span> : : </a>
+<a name="740"><span class="lineNum"> 740 </span> : : /**</a>
+<a name="741"><span class="lineNum"> 741 </span> : : * list_for_each_rev_off - iterate through a list of memory regions backwards</a>
+<a name="742"><span class="lineNum"> 742 </span> : : * @h: the list_head</a>
+<a name="743"><span class="lineNum"> 743 </span> : : * @i: the pointer to a memory region which contains list node data.</a>
+<a name="744"><span class="lineNum"> 744 </span> : : * @off: offset(relative to @i) at which list node data resides.</a>
+<a name="745"><span class="lineNum"> 745 </span> : : *</a>
+<a name="746"><span class="lineNum"> 746 </span> : : * See list_for_each_off for details</a>
+<a name="747"><span class="lineNum"> 747 </span> : : */</a>
+<a name="748"><span class="lineNum"> 748 </span> : : #define list_for_each_rev_off(h, i, off) \</a>
+<a name="749"><span class="lineNum"> 749 </span> : : list_for_each_off_dir_((h),(i),(off),prev)</a>
+<a name="750"><span class="lineNum"> 750 </span> : : </a>
+<a name="751"><span class="lineNum"> 751 </span> : : /**</a>
+<a name="752"><span class="lineNum"> 752 </span> : : * list_for_each_safe_off - iterate through a list of memory regions, maybe</a>
+<a name="753"><span class="lineNum"> 753 </span> : : * during deletion</a>
+<a name="754"><span class="lineNum"> 754 </span> : : * @h: the list_head</a>
+<a name="755"><span class="lineNum"> 755 </span> : : * @i: the pointer to a memory region which contains list node data.</a>
+<a name="756"><span class="lineNum"> 756 </span> : : * @nxt: the structure containing the list_node</a>
+<a name="757"><span class="lineNum"> 757 </span> : : * @off: offset(relative to @i) at which list node data resides.</a>
+<a name="758"><span class="lineNum"> 758 </span> : : *</a>
+<a name="759"><span class="lineNum"> 759 </span> : : * For details see `list_for_each_off' and `list_for_each_safe'</a>
+<a name="760"><span class="lineNum"> 760 </span> : : * descriptions.</a>
+<a name="761"><span class="lineNum"> 761 </span> : : *</a>
+<a name="762"><span class="lineNum"> 762 </span> : : * Example:</a>
+<a name="763"><span class="lineNum"> 763 </span> : : * list_for_each_safe_off(&amp;parent-&gt;children, child,</a>
+<a name="764"><span class="lineNum"> 764 </span> : : * next, offsetof(struct child, list))</a>
+<a name="765"><span class="lineNum"> 765 </span> : : * printf(&quot;Name: %s\n&quot;, child-&gt;name);</a>
+<a name="766"><span class="lineNum"> 766 </span> : : */</a>
+<a name="767"><span class="lineNum"> 767 </span> : : #define list_for_each_safe_off(h, i, nxt, off) \</a>
+<a name="768"><span class="lineNum"> 768 </span> : : list_for_each_safe_off_dir_((h),(i),(nxt),(off),next)</a>
+<a name="769"><span class="lineNum"> 769 </span> : : </a>
+<a name="770"><span class="lineNum"> 770 </span> : : /**</a>
+<a name="771"><span class="lineNum"> 771 </span> : : * list_for_each_rev_safe_off - iterate backwards through a list of</a>
+<a name="772"><span class="lineNum"> 772 </span> : : * memory regions, maybe during deletion</a>
+<a name="773"><span class="lineNum"> 773 </span> : : * @h: the list_head</a>
+<a name="774"><span class="lineNum"> 774 </span> : : * @i: the pointer to a memory region which contains list node data.</a>
+<a name="775"><span class="lineNum"> 775 </span> : : * @nxt: the structure containing the list_node</a>
+<a name="776"><span class="lineNum"> 776 </span> : : * @off: offset(relative to @i) at which list node data resides.</a>
+<a name="777"><span class="lineNum"> 777 </span> : : *</a>
+<a name="778"><span class="lineNum"> 778 </span> : : * For details see `list_for_each_rev_off' and `list_for_each_rev_safe'</a>
+<a name="779"><span class="lineNum"> 779 </span> : : * descriptions.</a>
+<a name="780"><span class="lineNum"> 780 </span> : : *</a>
+<a name="781"><span class="lineNum"> 781 </span> : : * Example:</a>
+<a name="782"><span class="lineNum"> 782 </span> : : * list_for_each_rev_safe_off(&amp;parent-&gt;children, child,</a>
+<a name="783"><span class="lineNum"> 783 </span> : : * next, offsetof(struct child, list))</a>
+<a name="784"><span class="lineNum"> 784 </span> : : * printf(&quot;Name: %s\n&quot;, child-&gt;name);</a>
+<a name="785"><span class="lineNum"> 785 </span> : : */</a>
+<a name="786"><span class="lineNum"> 786 </span> : : #define list_for_each_rev_safe_off(h, i, nxt, off) \</a>
+<a name="787"><span class="lineNum"> 787 </span> : : list_for_each_safe_off_dir_((h),(i),(nxt),(off),prev)</a>
+<a name="788"><span class="lineNum"> 788 </span> : : </a>
+<a name="789"><span class="lineNum"> 789 </span> : : /* Other -off variants. */</a>
+<a name="790"><span class="lineNum"> 790 </span> : : #define list_entry_off(n, type, off) \</a>
+<a name="791"><span class="lineNum"> 791 </span> : : ((type *)list_node_from_off_((n), (off)))</a>
+<a name="792"><span class="lineNum"> 792 </span> : : </a>
+<a name="793"><span class="lineNum"> 793 </span> : : #define list_head_off(h, type, off) \</a>
+<a name="794"><span class="lineNum"> 794 </span> : : ((type *)list_head_off((h), (off)))</a>
+<a name="795"><span class="lineNum"> 795 </span> : : </a>
+<a name="796"><span class="lineNum"> 796 </span> : : #define list_tail_off(h, type, off) \</a>
+<a name="797"><span class="lineNum"> 797 </span> : : ((type *)list_tail_((h), (off)))</a>
+<a name="798"><span class="lineNum"> 798 </span> : : </a>
+<a name="799"><span class="lineNum"> 799 </span> : : #define list_add_off(h, n, off) \</a>
+<a name="800"><span class="lineNum"> 800 </span> : : list_add((h), list_node_from_off_((n), (off)))</a>
+<a name="801"><span class="lineNum"> 801 </span> : : </a>
+<a name="802"><span class="lineNum"> 802 </span> : : #define list_del_off(n, off) \</a>
+<a name="803"><span class="lineNum"> 803 </span> : : list_del(list_node_from_off_((n), (off)))</a>
+<a name="804"><span class="lineNum"> 804 </span> : : </a>
+<a name="805"><span class="lineNum"> 805 </span> : : #define list_del_from_off(h, n, off) \</a>
+<a name="806"><span class="lineNum"> 806 </span> : : list_del_from(h, list_node_from_off_((n), (off)))</a>
+<a name="807"><span class="lineNum"> 807 </span> : : </a>
+<a name="808"><span class="lineNum"> 808 </span> : : /* Offset helper functions so we only single-evaluate. */</a>
+<a name="809"><span class="lineNum"> 809 </span> :<span class="lineCov"> 378027 : static inline void *list_node_to_off_(struct list_node *node, size_t off)</span></a>
+<a name="810"><span class="lineNum"> 810 </span> : : {</a>
+<a name="811"><span class="lineNum"> 811 </span> :<span class="lineCov"> 378027 : return (void *)((char *)node - off);</span></a>
+<a name="812"><span class="lineNum"> 812 </span> : : }</a>
+<a name="813"><span class="lineNum"> 813 </span> :<span class="lineCov"> 605719 : static inline struct list_node *list_node_from_off_(void *ptr, size_t off)</span></a>
+<a name="814"><span class="lineNum"> 814 </span> : : {</a>
+<a name="815"><span class="lineNum"> 815 </span> :<span class="lineCov"> 605719 : return (struct list_node *)((char *)ptr + off);</span></a>
+<a name="816"><span class="lineNum"> 816 </span> : : }</a>
+<a name="817"><span class="lineNum"> 817 </span> : : </a>
+<a name="818"><span class="lineNum"> 818 </span> : : /* Get the offset of the member, but make sure it's a list_node. */</a>
+<a name="819"><span class="lineNum"> 819 </span> : : #define list_off_(type, member) \</a>
+<a name="820"><span class="lineNum"> 820 </span> : : (container_off(type, member) + \</a>
+<a name="821"><span class="lineNum"> 821 </span> : : check_type(((type *)0)-&gt;member, struct list_node))</a>
+<a name="822"><span class="lineNum"> 822 </span> : : </a>
+<a name="823"><span class="lineNum"> 823 </span> : : #define list_off_var_(var, member) \</a>
+<a name="824"><span class="lineNum"> 824 </span> : : (container_off_var(var, member) + \</a>
+<a name="825"><span class="lineNum"> 825 </span> : : check_type(var-&gt;member, struct list_node))</a>
+<a name="826"><span class="lineNum"> 826 </span> : : </a>
+<a name="827"><span class="lineNum"> 827 </span> : : #if HAVE_TYPEOF</a>
+<a name="828"><span class="lineNum"> 828 </span> : : #define list_typeof(var) typeof(var)</a>
+<a name="829"><span class="lineNum"> 829 </span> : : #else</a>
+<a name="830"><span class="lineNum"> 830 </span> : : #define list_typeof(var) void *</a>
+<a name="831"><span class="lineNum"> 831 </span> : : #endif</a>
+<a name="832"><span class="lineNum"> 832 </span> : : </a>
+<a name="833"><span class="lineNum"> 833 </span> : : /* Returns member, or NULL if at end of list. */</a>
+<a name="834"><span class="lineNum"> 834 </span> :<span class="lineCov"> 203 : static inline void *list_entry_or_null(const struct list_head *h,</span></a>
+<a name="835"><span class="lineNum"> 835 </span> : : const struct list_node *n,</a>
+<a name="836"><span class="lineNum"> 836 </span> : : size_t off)</a>
+<a name="837"><span class="lineNum"> 837 </span> : : {</a>
+<a name="838"><span class="lineNum"> 838 </span> :<span class="lineCov"> 203 : if (n == &amp;h-&gt;n)</span></a>
+<a name="839"><span class="lineNum"> 839 </span> :<span class="lineCov"> 81 : return NULL;</span></a>
+<a name="840"><span class="lineNum"> 840 </span> :<span class="lineCov"> 122 : return (char *)n - off;</span></a>
+<a name="841"><span class="lineNum"> 841 </span> : : }</a>
+<a name="842"><span class="lineNum"> 842 </span> : : #endif /* CCAN_LIST_H */</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/ccan/list/test/helper.c.func-sort-c.html b/coverage-report/ccan/list/test/helper.c.func-sort-c.html
index 14f37c3..8d1a06e 100644
--- a/coverage-report/ccan/list/test/helper.c.func-sort-c.html
+++ b/coverage-report/ccan/list/test/helper.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@@ -70,15 +70,15 @@
</tr>
<tr>
<td class="coverFn"><a href="helper.c.gcov.html#17">create_opaque_blob</a></td>
- <td class="coverFnHi">36</td>
+ <td class="coverFnHi">60</td>
</tr>
<tr>
<td class="coverFn"><a href="helper.c.gcov.html#49">destroy_opaque_blob</a></td>
- <td class="coverFnHi">36</td>
+ <td class="coverFnHi">60</td>
</tr>
<tr>
<td class="coverFn"><a href="helper.c.gcov.html#33">if_blobs_know_the_secret</a></td>
- <td class="coverFnHi">60</td>
+ <td class="coverFnHi">100</td>
</tr>
</table>
<br>
diff --git a/coverage-report/ccan/list/test/helper.c.func.html b/coverage-report/ccan/list/test/helper.c.func.html
index 65170a7..400928d 100644
--- a/coverage-report/ccan/list/test/helper.c.func.html
+++ b/coverage-report/ccan/list/test/helper.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@@ -70,15 +70,15 @@
</tr>
<tr>
<td class="coverFn"><a href="helper.c.gcov.html#17">create_opaque_blob</a></td>
- <td class="coverFnHi">36</td>
+ <td class="coverFnHi">60</td>
</tr>
<tr>
<td class="coverFn"><a href="helper.c.gcov.html#49">destroy_opaque_blob</a></td>
- <td class="coverFnHi">36</td>
+ <td class="coverFnHi">60</td>
</tr>
<tr>
<td class="coverFn"><a href="helper.c.gcov.html#33">if_blobs_know_the_secret</a></td>
- <td class="coverFnHi">60</td>
+ <td class="coverFnHi">100</td>
</tr>
</table>
<br>
diff --git a/coverage-report/ccan/list/test/helper.c.gcov.html b/coverage-report/ccan/list/test/helper.c.gcov.html
index ff2f9d2..5b1f678 100644
--- a/coverage-report/ccan/list/test/helper.c.gcov.html
+++ b/coverage-report/ccan/list/test/helper.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@@ -87,42 +87,42 @@
<a name="16"><span class="lineNum"> 16 </span> : : </a>
<a name="17"><span class="lineNum"> 17 </span> : : static bool not_randomized = true;</a>
<a name="18"><span class="lineNum"> 18 </span> : : </a>
-<a name="19"><span class="lineNum"> 19 </span> :<span class="lineCov"> 36 : struct opaque *create_opaque_blob(void)</span></a>
+<a name="19"><span class="lineNum"> 19 </span> :<span class="lineCov"> 60 : struct opaque *create_opaque_blob(void)</span></a>
<a name="20"><span class="lineNum"> 20 </span> : : {</a>
-<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 36 : struct opaque *blob = calloc(1, sizeof(struct opaque));</span></a>
+<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 60 : struct opaque *blob = calloc(1, sizeof(struct opaque));</span></a>
<a name="22"><span class="lineNum"> 22 </span> : : </a>
-<a name="23"><span class="lineNum"> 23 </span> :<span class="lineCov"> 36 : if (not_randomized) {</span></a>
-<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 12 : srandom((int)time(NULL));</span></a>
-<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 12 : not_randomized = false;</span></a>
+<a name="23"><span class="lineNum"> 23 </span> :<span class="lineCov"> 60 : if (not_randomized) {</span></a>
+<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 20 : srandom((int)time(NULL));</span></a>
+<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 20 : not_randomized = false;</span></a>
<a name="26"><span class="lineNum"> 26 </span> : : }</a>
<a name="27"><span class="lineNum"> 27 </span> : : </a>
-<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 36 : blob-&gt;secret_offset = random() % (sizeof(blob-&gt;secret_drawer));</span></a>
-<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 36 : blob-&gt;secret_drawer[blob-&gt;secret_offset] =</span></a>
+<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 60 : blob-&gt;secret_offset = random() % (sizeof(blob-&gt;secret_drawer));</span></a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 60 : blob-&gt;secret_drawer[blob-&gt;secret_offset] =</span></a>
<a name="30"><span class="lineNum"> 30 </span> : : ANSWER_TO_THE_ULTIMATE_QUESTION_OF_LIFE_THE_UNIVERSE_AND_EVERYTHING;</a>
<a name="31"><span class="lineNum"> 31 </span> : : </a>
-<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 36 : return blob;</span></a>
+<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 60 : return blob;</span></a>
<a name="33"><span class="lineNum"> 33 </span> : : }</a>
<a name="34"><span class="lineNum"> 34 </span> : : </a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 60 : bool if_blobs_know_the_secret(struct opaque *blob)</span></a>
+<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 100 : bool if_blobs_know_the_secret(struct opaque *blob)</span></a>
<a name="36"><span class="lineNum"> 36 </span> : : {</a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 60 : bool answer = true;</span></a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 100 : bool answer = true;</span></a>
<a name="38"><span class="lineNum"> 38 </span> : : int i;</a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 2580 : for (i = 0; i &lt; sizeof(blob-&gt;secret_drawer) /</span></a>
-<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 2520 : sizeof(blob-&gt;secret_drawer[0]); i++)</span></a>
-<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 2520 : if (i != blob-&gt;secret_offset)</span></a>
-<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 2460 : answer = answer &amp;&amp; (blob-&gt;secret_drawer[i] == 0);</span></a>
+<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 4300 : for (i = 0; i &lt; sizeof(blob-&gt;secret_drawer) /</span></a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 4200 : sizeof(blob-&gt;secret_drawer[0]); i++)</span></a>
+<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 4200 : if (i != blob-&gt;secret_offset)</span></a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 4100 : answer = answer &amp;&amp; (blob-&gt;secret_drawer[i] == 0);</span></a>
<a name="43"><span class="lineNum"> 43 </span> : : else</a>
-<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 120 : answer = answer &amp;&amp;</span></a>
-<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 60 : (blob-&gt;secret_drawer[blob-&gt;secret_offset] ==</span></a>
+<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 200 : answer = answer &amp;&amp;</span></a>
+<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 100 : (blob-&gt;secret_drawer[blob-&gt;secret_offset] ==</span></a>
<a name="46"><span class="lineNum"> 46 </span> : : ANSWER_TO_THE_ULTIMATE_QUESTION_OF_LIFE_THE_UNIVERSE_AND_EVERYTHING);</a>
<a name="47"><span class="lineNum"> 47 </span> : : </a>
-<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 60 : return answer;</span></a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 100 : return answer;</span></a>
<a name="49"><span class="lineNum"> 49 </span> : : }</a>
<a name="50"><span class="lineNum"> 50 </span> : : </a>
-<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 36 : void destroy_opaque_blob(struct opaque *blob)</span></a>
+<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 60 : void destroy_opaque_blob(struct opaque *blob)</span></a>
<a name="52"><span class="lineNum"> 52 </span> : : {</a>
-<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 36 : free(blob);</span></a>
-<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 36 : }</span></a>
+<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 60 : free(blob);</span></a>
+<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 60 : }</span></a>
<a name="55"><span class="lineNum"> 55 </span> : : </a>
<a name="56"><span class="lineNum"> 56 </span> : : </a>
</pre>
diff --git a/coverage-report/ccan/list/test/index-sort-b.html b/coverage-report/ccan/list/test/index-sort-b.html
index fd7ced4..decf377 100644
--- a/coverage-report/ccan/list/test/index-sort-b.html
+++ b/coverage-report/ccan/list/test/index-sort-b.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">310</td>
- <td class="headerCovTableEntry">316</td>
- <td class="headerCovTableEntryHi">98.1 %</td>
+ <td class="headerCovTableEntry">514</td>
+ <td class="headerCovTableEntry">521</td>
+ <td class="headerCovTableEntryHi">98.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntry">14</td>
+ <td class="headerCovTableEntry">14</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -82,6 +82,42 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
+ <td class="coverFile"><a href="run-list_prev-list_next.c.gcov.html">run-list_prev-list_next.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">32 / 32</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="run-single-eval.c.gcov.html">run-single-eval.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">112 / 112</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="run-prepend_list.c.gcov.html">run-prepend_list.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=99 height=10 alt="98.6%"><img src="../../../snow.png" width=1 height=10 alt="98.6%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">98.6&nbsp;%</td>
+ <td class="coverNumHi">71 / 72</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="helper.c.gcov.html">helper.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
@@ -94,14 +130,14 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-list_del_from-assert.c.gcov.html">run-list_del_from-assert.c</a></td>
+ <td class="coverFile"><a href="run-CCAN_LIST_DEBUG.c.gcov.html">run-CCAN_LIST_DEBUG.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=80 height=10 alt="80.0%"><img src="../../../snow.png" width=20 height=10 alt="80.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=94 height=10 alt="94.1%"><img src="../../../snow.png" width=6 height=10 alt="94.1%"></td></tr></table>
</td>
- <td class="coverPerMed">80.0&nbsp;%</td>
- <td class="coverNumMed">12 / 15</td>
+ <td class="coverPerHi">94.1&nbsp;%</td>
+ <td class="coverNumHi">16 / 17</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -118,24 +154,36 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-single-eval.c.gcov.html">run-single-eval.c</a></td>
+ <td class="coverFile"><a href="run.c.gcov.html">run.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">112 / 112</td>
+ <td class="coverNumHi">210 / 210</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run.c.gcov.html">run.c</a></td>
+ <td class="coverFile"><a href="run-list_del_from-assert.c.gcov.html">run-list_del_from-assert.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=86 height=10 alt="85.7%"><img src="../../../snow.png" width=14 height=10 alt="85.7%"></td></tr></table>
+ </td>
+ <td class="coverPerMed">85.7&nbsp;%</td>
+ <td class="coverNumMed">12 / 14</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="run-check-nonconst.c.gcov.html">run-check-nonconst.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">133 / 133</td>
+ <td class="coverNumHi">8 / 8</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/ccan/list/test/index-sort-f.html b/coverage-report/ccan/list/test/index-sort-f.html
index 54a28eb..02071ae 100644
--- a/coverage-report/ccan/list/test/index-sort-f.html
+++ b/coverage-report/ccan/list/test/index-sort-f.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">310</td>
- <td class="headerCovTableEntry">316</td>
- <td class="headerCovTableEntryHi">98.1 %</td>
+ <td class="headerCovTableEntry">514</td>
+ <td class="headerCovTableEntry">521</td>
+ <td class="headerCovTableEntryHi">98.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntry">14</td>
+ <td class="headerCovTableEntry">14</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -82,12 +82,12 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="run-list_del_from-assert.c.gcov.html">run-list_del_from-assert.c</a></td>
+ <td class="coverFile"><a href="run-list_prev-list_next.c.gcov.html">run-list_prev-list_next.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=80 height=10 alt="80.0%"><img src="../../../snow.png" width=20 height=10 alt="80.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerMed">80.0&nbsp;%</td>
- <td class="coverNumMed">12 / 15</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">32 / 32</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
@@ -111,13 +111,61 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">133 / 133</td>
+ <td class="coverNumHi">210 / 210</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="run-list_del_from-assert.c.gcov.html">run-list_del_from-assert.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=86 height=10 alt="85.7%"><img src="../../../snow.png" width=14 height=10 alt="85.7%"></td></tr></table>
+ </td>
+ <td class="coverPerMed">85.7&nbsp;%</td>
+ <td class="coverNumMed">12 / 14</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="run-check-nonconst.c.gcov.html">run-check-nonconst.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">8 / 8</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="run-prepend_list.c.gcov.html">run-prepend_list.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=99 height=10 alt="98.6%"><img src="../../../snow.png" width=1 height=10 alt="98.6%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">98.6&nbsp;%</td>
+ <td class="coverNumHi">71 / 72</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="run-CCAN_LIST_DEBUG.c.gcov.html">run-CCAN_LIST_DEBUG.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=94 height=10 alt="94.1%"><img src="../../../snow.png" width=6 height=10 alt="94.1%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">94.1&nbsp;%</td>
+ <td class="coverNumHi">16 / 17</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="run-check-corrupt.c.gcov.html">run-check-corrupt.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=92 height=10 alt="91.7%"><img src="../../../snow.png" width=8 height=10 alt="91.7%"></td></tr></table>
diff --git a/coverage-report/ccan/list/test/index-sort-l.html b/coverage-report/ccan/list/test/index-sort-l.html
index 8da8c41..24a2231 100644
--- a/coverage-report/ccan/list/test/index-sort-l.html
+++ b/coverage-report/ccan/list/test/index-sort-l.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">310</td>
- <td class="headerCovTableEntry">316</td>
- <td class="headerCovTableEntryHi">98.1 %</td>
+ <td class="headerCovTableEntry">514</td>
+ <td class="headerCovTableEntry">521</td>
+ <td class="headerCovTableEntryHi">98.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntry">14</td>
+ <td class="headerCovTableEntry">14</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="run-list_del_from-assert.c.gcov.html">run-list_del_from-assert.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=80 height=10 alt="80.0%"><img src="../../../snow.png" width=20 height=10 alt="80.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=86 height=10 alt="85.7%"><img src="../../../snow.png" width=14 height=10 alt="85.7%"></td></tr></table>
</td>
- <td class="coverPerMed">80.0&nbsp;%</td>
- <td class="coverNumMed">12 / 15</td>
+ <td class="coverPerMed">85.7&nbsp;%</td>
+ <td class="coverNumMed">12 / 14</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
@@ -106,6 +106,42 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="run-CCAN_LIST_DEBUG.c.gcov.html">run-CCAN_LIST_DEBUG.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=94 height=10 alt="94.1%"><img src="../../../snow.png" width=6 height=10 alt="94.1%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">94.1&nbsp;%</td>
+ <td class="coverNumHi">16 / 17</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="run-prepend_list.c.gcov.html">run-prepend_list.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=99 height=10 alt="98.6%"><img src="../../../snow.png" width=1 height=10 alt="98.6%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">98.6&nbsp;%</td>
+ <td class="coverNumHi">71 / 72</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="run-check-nonconst.c.gcov.html">run-check-nonconst.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">8 / 8</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="helper.c.gcov.html">helper.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
@@ -118,6 +154,18 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="run-list_prev-list_next.c.gcov.html">run-list_prev-list_next.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">32 / 32</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="run-single-eval.c.gcov.html">run-single-eval.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
@@ -135,7 +183,7 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">133 / 133</td>
+ <td class="coverNumHi">210 / 210</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/ccan/list/test/index.html b/coverage-report/ccan/list/test/index.html
index a605d76..b382fe9 100644
--- a/coverage-report/ccan/list/test/index.html
+++ b/coverage-report/ccan/list/test/index.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">310</td>
- <td class="headerCovTableEntry">316</td>
- <td class="headerCovTableEntryHi">98.1 %</td>
+ <td class="headerCovTableEntry">514</td>
+ <td class="headerCovTableEntry">521</td>
+ <td class="headerCovTableEntryHi">98.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntry">14</td>
+ <td class="headerCovTableEntry">14</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -94,6 +94,18 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="run-CCAN_LIST_DEBUG.c.gcov.html">run-CCAN_LIST_DEBUG.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=94 height=10 alt="94.1%"><img src="../../../snow.png" width=6 height=10 alt="94.1%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">94.1&nbsp;%</td>
+ <td class="coverNumHi">16 / 17</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="run-check-corrupt.c.gcov.html">run-check-corrupt.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=92 height=10 alt="91.7%"><img src="../../../snow.png" width=8 height=10 alt="91.7%"></td></tr></table>
@@ -106,18 +118,54 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="run-check-nonconst.c.gcov.html">run-check-nonconst.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">8 / 8</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="run-list_del_from-assert.c.gcov.html">run-list_del_from-assert.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=80 height=10 alt="80.0%"><img src="../../../snow.png" width=20 height=10 alt="80.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=86 height=10 alt="85.7%"><img src="../../../snow.png" width=14 height=10 alt="85.7%"></td></tr></table>
</td>
- <td class="coverPerMed">80.0&nbsp;%</td>
- <td class="coverNumMed">12 / 15</td>
+ <td class="coverPerMed">85.7&nbsp;%</td>
+ <td class="coverNumMed">12 / 14</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="run-list_prev-list_next.c.gcov.html">run-list_prev-list_next.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">32 / 32</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="run-prepend_list.c.gcov.html">run-prepend_list.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=99 height=10 alt="98.6%"><img src="../../../snow.png" width=1 height=10 alt="98.6%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">98.6&nbsp;%</td>
+ <td class="coverNumHi">71 / 72</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="run-single-eval.c.gcov.html">run-single-eval.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
@@ -135,7 +183,7 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">133 / 133</td>
+ <td class="coverNumHi">210 / 210</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/ccan/list/test/run-CCAN_LIST_DEBUG.c.func-sort-c.html b/coverage-report/ccan/list/test/run-CCAN_LIST_DEBUG.c.func-sort-c.html
new file mode 100644
index 0000000..6ef571f
--- /dev/null
+++ b/coverage-report/ccan/list/test/run-CCAN_LIST_DEBUG.c.func-sort-c.html
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - ccan/list/test/run-CCAN_LIST_DEBUG.c - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">ccan/list/test</a> - run-CCAN_LIST_DEBUG.c<span style="font-size: 80%;"> (<a href="run-CCAN_LIST_DEBUG.c.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">16</td>
+ <td class="headerCovTableEntry">17</td>
+ <td class="headerCovTableEntryHi">94.1 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="run-CCAN_LIST_DEBUG.c.func.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="run-CCAN_LIST_DEBUG.c.gcov.html#30">main</a></td>
+ <td class="coverFnHi">10</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="run-CCAN_LIST_DEBUG.c.gcov.html#14">my_fprintf</a></td>
+ <td class="coverFnHi">10</td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/ccan/list/test/run-CCAN_LIST_DEBUG.c.func.html b/coverage-report/ccan/list/test/run-CCAN_LIST_DEBUG.c.func.html
new file mode 100644
index 0000000..63c681d
--- /dev/null
+++ b/coverage-report/ccan/list/test/run-CCAN_LIST_DEBUG.c.func.html
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - ccan/list/test/run-CCAN_LIST_DEBUG.c - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">ccan/list/test</a> - run-CCAN_LIST_DEBUG.c<span style="font-size: 80%;"> (<a href="run-CCAN_LIST_DEBUG.c.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">16</td>
+ <td class="headerCovTableEntry">17</td>
+ <td class="headerCovTableEntryHi">94.1 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="run-CCAN_LIST_DEBUG.c.func-sort-c.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="run-CCAN_LIST_DEBUG.c.gcov.html#30">main</a></td>
+ <td class="coverFnHi">10</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="run-CCAN_LIST_DEBUG.c.gcov.html#14">my_fprintf</a></td>
+ <td class="coverFnHi">10</td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/ccan/list/test/run-CCAN_LIST_DEBUG.c.gcov.html b/coverage-report/ccan/list/test/run-CCAN_LIST_DEBUG.c.gcov.html
new file mode 100644
index 0000000..cf33a13
--- /dev/null
+++ b/coverage-report/ccan/list/test/run-CCAN_LIST_DEBUG.c.gcov.html
@@ -0,0 +1,145 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - ccan/list/test/run-CCAN_LIST_DEBUG.c</title>
+ <link rel="stylesheet" type="text/css" href="../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">ccan/list/test</a> - run-CCAN_LIST_DEBUG.c<span style="font-size: 80%;"> (source / <a href="run-CCAN_LIST_DEBUG.c.func-sort-c.html">functions</a>)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">16</td>
+ <td class="headerCovTableEntry">17</td>
+ <td class="headerCovTableEntryHi">94.1 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <table cellpadding=0 cellspacing=0 border=0>
+ <tr>
+ <td><br></td>
+ </tr>
+ <tr>
+ <td>
+<pre class="sourceHeading"> Branch data Line data Source code</pre>
+<pre class="source">
+<a name="1"><span class="lineNum"> 1 </span> : : /* Check that CCAN_LIST_DEBUG works */</a>
+<a name="2"><span class="lineNum"> 2 </span> : : #include &lt;setjmp.h&gt;</a>
+<a name="3"><span class="lineNum"> 3 </span> : : #include &lt;stdlib.h&gt;</a>
+<a name="4"><span class="lineNum"> 4 </span> : : #include &lt;stdio.h&gt;</a>
+<a name="5"><span class="lineNum"> 5 </span> : : #include &lt;stdarg.h&gt;</a>
+<a name="6"><span class="lineNum"> 6 </span> : : #include &lt;string.h&gt;</a>
+<a name="7"><span class="lineNum"> 7 </span> : : #include &lt;err.h&gt;</a>
+<a name="8"><span class="lineNum"> 8 </span> : : </a>
+<a name="9"><span class="lineNum"> 9 </span> : : /* We don't actually want it to exit... */</a>
+<a name="10"><span class="lineNum"> 10 </span> : : static jmp_buf aborted;</a>
+<a name="11"><span class="lineNum"> 11 </span> : : #define abort() longjmp(aborted, 1)</a>
+<a name="12"><span class="lineNum"> 12 </span> : : </a>
+<a name="13"><span class="lineNum"> 13 </span> : : #define fprintf my_fprintf</a>
+<a name="14"><span class="lineNum"> 14 </span> : : static char printf_buffer[1000];</a>
+<a name="15"><span class="lineNum"> 15 </span> : : </a>
+<a name="16"><span class="lineNum"> 16 </span> :<span class="lineCov"> 10 : static int my_fprintf(FILE *stream, const char *format, ...)</span></a>
+<a name="17"><span class="lineNum"> 17 </span> : : {</a>
+<a name="18"><span class="lineNum"> 18 </span> : : va_list ap;</a>
+<a name="19"><span class="lineNum"> 19 </span> : : int ret;</a>
+<a name="20"><span class="lineNum"> 20 </span> : : (void)stream;</a>
+<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 10 : va_start(ap, format);</span></a>
+<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 10 : ret = vsprintf(printf_buffer, format, ap);</span></a>
+<a name="23"><span class="lineNum"> 23 </span> :<span class="lineCov"> 10 : va_end(ap);</span></a>
+<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 10 : return ret;</span></a>
+<a name="25"><span class="lineNum"> 25 </span> : : }</a>
+<a name="26"><span class="lineNum"> 26 </span> : : </a>
+<a name="27"><span class="lineNum"> 27 </span> : : #define CCAN_LIST_DEBUG 1</a>
+<a name="28"><span class="lineNum"> 28 </span> : : #include &lt;ccan/list/list.h&gt;</a>
+<a name="29"><span class="lineNum"> 29 </span> : : #include &lt;ccan/tap/tap.h&gt;</a>
+<a name="30"><span class="lineNum"> 30 </span> : : #include &lt;ccan/list/list.c&gt;</a>
+<a name="31"><span class="lineNum"> 31 </span> : : </a>
+<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 10 : int main(void)</span></a>
+<a name="33"><span class="lineNum"> 33 </span> : : {</a>
+<a name="34"><span class="lineNum"> 34 </span> : : struct list_head list;</a>
+<a name="35"><span class="lineNum"> 35 </span> : : struct list_node n1;</a>
+<a name="36"><span class="lineNum"> 36 </span> : : char expect[100];</a>
+<a name="37"><span class="lineNum"> 37 </span> : : </a>
+<a name="38"><span class="lineNum"> 38 </span> : : plan_tests(2);</a>
+<a name="39"><span class="lineNum"> 39 </span> : : /* Empty list. */</a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 10 : list.n.next = &amp;list.n;</span></a>
+<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 10 : list.n.prev = &amp;list.n;</span></a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;list, NULL) == &amp;list);</span></a>
+<a name="43"><span class="lineNum"> 43 </span> : : </a>
+<a name="44"><span class="lineNum"> 44 </span> : : /* Bad back ptr */</a>
+<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 10 : list.n.prev = &amp;n1;</span></a>
+<a name="46"><span class="lineNum"> 46 </span> : : </a>
+<a name="47"><span class="lineNum"> 47 </span> : : /* Aborting version. */</a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 10 : sprintf(expect, &quot;run-CCAN_LIST_DEBUG.c:51: prev corrupt in node %p (0) of %p\n&quot;,</span></a>
+<a name="49"><span class="lineNum"> 49 </span> : : &amp;list, &amp;list);</a>
+<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 10 : if (setjmp(aborted) == 0) {</span></a>
+<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 10 : assert(list_empty(&amp;list));</span></a>
+<a name="52"><span class="lineNum"> 52 </span> :<span class="lineNoCov"> 0 : fail(&quot;list_empty on empty with bad back ptr didn't fail!&quot;);</span></a>
+<a name="53"><span class="lineNum"> 53 </span> : : } else {</a>
+<a name="54"><span class="lineNum"> 54 </span> : : /* __FILE__ might give full path. */</a>
+<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 10 : int prep = strlen(printf_buffer) - strlen(expect);</span></a>
+<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 10 : ok1(prep &gt;= 0 &amp;&amp; strcmp(printf_buffer + prep, expect) == 0);</span></a>
+<a name="57"><span class="lineNum"> 57 </span> : : }</a>
+<a name="58"><span class="lineNum"> 58 </span> : : </a>
+<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 10 : return exit_status();</span></a>
+<a name="60"><span class="lineNum"> 60 </span> : : }</a>
+</pre>
+ </td>
+ </tr>
+ </table>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/ccan/list/test/run-check-corrupt.c.func-sort-c.html b/coverage-report/ccan/list/test/run-check-corrupt.c.func-sort-c.html
index 1fba9f8..260418a 100644
--- a/coverage-report/ccan/list/test/run-check-corrupt.c.func-sort-c.html
+++ b/coverage-report/ccan/list/test/run-check-corrupt.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -69,12 +69,12 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="run-check-corrupt.c.gcov.html#30">main</a></td>
- <td class="coverFnHi">6</td>
+ <td class="coverFn"><a href="run-check-corrupt.c.gcov.html#28">main</a></td>
+ <td class="coverFnHi">10</td>
</tr>
<tr>
<td class="coverFn"><a href="run-check-corrupt.c.gcov.html#13">my_fprintf</a></td>
- <td class="coverFnHi">18</td>
+ <td class="coverFnHi">30</td>
</tr>
</table>
<br>
diff --git a/coverage-report/ccan/list/test/run-check-corrupt.c.func.html b/coverage-report/ccan/list/test/run-check-corrupt.c.func.html
index 26b92b5..a390ee2 100644
--- a/coverage-report/ccan/list/test/run-check-corrupt.c.func.html
+++ b/coverage-report/ccan/list/test/run-check-corrupt.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -69,12 +69,12 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="run-check-corrupt.c.func-sort-c.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="run-check-corrupt.c.gcov.html#30">main</a></td>
- <td class="coverFnHi">6</td>
+ <td class="coverFn"><a href="run-check-corrupt.c.gcov.html#28">main</a></td>
+ <td class="coverFnHi">10</td>
</tr>
<tr>
<td class="coverFn"><a href="run-check-corrupt.c.gcov.html#13">my_fprintf</a></td>
- <td class="coverFnHi">18</td>
+ <td class="coverFnHi">30</td>
</tr>
</table>
<br>
diff --git a/coverage-report/ccan/list/test/run-check-corrupt.c.gcov.html b/coverage-report/ccan/list/test/run-check-corrupt.c.gcov.html
index 61823a2..7adab27 100644
--- a/coverage-report/ccan/list/test/run-check-corrupt.c.gcov.html
+++ b/coverage-report/ccan/list/test/run-check-corrupt.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -83,87 +83,82 @@
<a name="12"><span class="lineNum"> 12 </span> : : #define fprintf my_fprintf</a>
<a name="13"><span class="lineNum"> 13 </span> : : static char printf_buffer[1000];</a>
<a name="14"><span class="lineNum"> 14 </span> : : </a>
-<a name="15"><span class="lineNum"> 15 </span> :<span class="lineCov"> 18 : static int my_fprintf(FILE *stream, const char *format, ...)</span></a>
+<a name="15"><span class="lineNum"> 15 </span> :<span class="lineCov"> 30 : static int my_fprintf(FILE *stream, const char *format, ...)</span></a>
<a name="16"><span class="lineNum"> 16 </span> : : {</a>
<a name="17"><span class="lineNum"> 17 </span> : : va_list ap;</a>
<a name="18"><span class="lineNum"> 18 </span> : : int ret;</a>
-<a name="19"><span class="lineNum"> 19 </span> : : </a>
-<a name="20"><span class="lineNum"> 20 </span> : : (void)stream;</a>
-<a name="21"><span class="lineNum"> 21 </span> : : </a>
-<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 18 : va_start(ap, format);</span></a>
-<a name="23"><span class="lineNum"> 23 </span> :<span class="lineCov"> 18 : ret = vsnprintf(printf_buffer, sizeof(printf_buffer), format, ap);</span></a>
-<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 18 : va_end(ap);</span></a>
-<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 18 : return ret;</span></a>
-<a name="26"><span class="lineNum"> 26 </span> : : }</a>
-<a name="27"><span class="lineNum"> 27 </span> : : </a>
-<a name="28"><span class="lineNum"> 28 </span> : : #include &lt;ccan/list/list.h&gt;</a>
-<a name="29"><span class="lineNum"> 29 </span> : : #include &lt;ccan/tap/tap.h&gt;</a>
-<a name="30"><span class="lineNum"> 30 </span> : : #include &lt;ccan/list/list.c&gt;</a>
-<a name="31"><span class="lineNum"> 31 </span> : : </a>
-<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 6 : int main(int argc, char *argv[])</span></a>
-<a name="33"><span class="lineNum"> 33 </span> : : {</a>
-<a name="34"><span class="lineNum"> 34 </span> : : struct list_head list;</a>
-<a name="35"><span class="lineNum"> 35 </span> : : struct list_node n1;</a>
-<a name="36"><span class="lineNum"> 36 </span> : : char expect[100];</a>
-<a name="37"><span class="lineNum"> 37 </span> : : </a>
-<a name="38"><span class="lineNum"> 38 </span> : : (void)argc;</a>
-<a name="39"><span class="lineNum"> 39 </span> : : (void)argv;</a>
-<a name="40"><span class="lineNum"> 40 </span> : : </a>
-<a name="41"><span class="lineNum"> 41 </span> : : plan_tests(9);</a>
-<a name="42"><span class="lineNum"> 42 </span> : : /* Empty list. */</a>
-<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 6 : list.n.next = &amp;list.n;</span></a>
-<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 6 : list.n.prev = &amp;list.n;</span></a>
-<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 6 : ok1(list_check(&amp;list, NULL) == &amp;list);</span></a>
+<a name="19"><span class="lineNum"> 19 </span> : : (void)stream;</a>
+<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 30 : va_start(ap, format);</span></a>
+<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 30 : ret = vsprintf(printf_buffer, format, ap);</span></a>
+<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 30 : va_end(ap);</span></a>
+<a name="23"><span class="lineNum"> 23 </span> :<span class="lineCov"> 30 : return ret;</span></a>
+<a name="24"><span class="lineNum"> 24 </span> : : }</a>
+<a name="25"><span class="lineNum"> 25 </span> : : </a>
+<a name="26"><span class="lineNum"> 26 </span> : : #include &lt;ccan/list/list.h&gt;</a>
+<a name="27"><span class="lineNum"> 27 </span> : : #include &lt;ccan/tap/tap.h&gt;</a>
+<a name="28"><span class="lineNum"> 28 </span> : : #include &lt;ccan/list/list.c&gt;</a>
+<a name="29"><span class="lineNum"> 29 </span> : : </a>
+<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 10 : int main(void)</span></a>
+<a name="31"><span class="lineNum"> 31 </span> : : {</a>
+<a name="32"><span class="lineNum"> 32 </span> : : struct list_head list;</a>
+<a name="33"><span class="lineNum"> 33 </span> : : struct list_node n1;</a>
+<a name="34"><span class="lineNum"> 34 </span> : : char expect[100];</a>
+<a name="35"><span class="lineNum"> 35 </span> : : </a>
+<a name="36"><span class="lineNum"> 36 </span> : : plan_tests(9);</a>
+<a name="37"><span class="lineNum"> 37 </span> : : /* Empty list. */</a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 10 : list.n.next = &amp;list.n;</span></a>
+<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 10 : list.n.prev = &amp;list.n;</span></a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;list, NULL) == &amp;list);</span></a>
+<a name="41"><span class="lineNum"> 41 </span> : : </a>
+<a name="42"><span class="lineNum"> 42 </span> : : /* Bad back ptr */</a>
+<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 10 : list.n.prev = &amp;n1;</span></a>
+<a name="44"><span class="lineNum"> 44 </span> : : /* Non-aborting version. */</a>
+<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;list, NULL) == NULL);</span></a>
<a name="46"><span class="lineNum"> 46 </span> : : </a>
-<a name="47"><span class="lineNum"> 47 </span> : : /* Bad back ptr */</a>
-<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 6 : list.n.prev = &amp;n1;</span></a>
-<a name="49"><span class="lineNum"> 49 </span> : : /* Non-aborting version. */</a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 6 : ok1(list_check(&amp;list, NULL) == NULL);</span></a>
-<a name="51"><span class="lineNum"> 51 </span> : : </a>
-<a name="52"><span class="lineNum"> 52 </span> : : /* Aborting version. */</a>
-<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 6 : sprintf(expect, &quot;test message: prev corrupt in node %p (0) of %p\n&quot;,</span></a>
-<a name="54"><span class="lineNum"> 54 </span> : : &amp;list, &amp;list);</a>
-<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 6 : if (setjmp(aborted) == 0) {</span></a>
-<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 6 : list_check(&amp;list, &quot;test message&quot;);</span></a>
-<a name="57"><span class="lineNum"> 57 </span> :<span class="lineNoCov"> 0 : fail(&quot;list_check on empty with bad back ptr didn't fail!&quot;);</span></a>
-<a name="58"><span class="lineNum"> 58 </span> : : } else {</a>
-<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 6 : ok1(strcmp(printf_buffer, expect) == 0);</span></a>
-<a name="60"><span class="lineNum"> 60 </span> : : }</a>
-<a name="61"><span class="lineNum"> 61 </span> : : </a>
-<a name="62"><span class="lineNum"> 62 </span> : : /* n1 in list. */</a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 6 : list.n.next = &amp;n1;</span></a>
-<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 6 : list.n.prev = &amp;n1;</span></a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 6 : n1.prev = &amp;list.n;</span></a>
-<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 6 : n1.next = &amp;list.n;</span></a>
-<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 6 : ok1(list_check(&amp;list, NULL) == &amp;list);</span></a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 6 : ok1(list_check_node(&amp;n1, NULL) == &amp;n1);</span></a>
+<a name="47"><span class="lineNum"> 47 </span> : : /* Aborting version. */</a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 10 : sprintf(expect, &quot;test message: prev corrupt in node %p (0) of %p\n&quot;,</span></a>
+<a name="49"><span class="lineNum"> 49 </span> : : &amp;list, &amp;list);</a>
+<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 10 : if (setjmp(aborted) == 0) {</span></a>
+<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 10 : list_check(&amp;list, &quot;test message&quot;);</span></a>
+<a name="52"><span class="lineNum"> 52 </span> :<span class="lineNoCov"> 0 : fail(&quot;list_check on empty with bad back ptr didn't fail!&quot;);</span></a>
+<a name="53"><span class="lineNum"> 53 </span> : : } else {</a>
+<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 10 : ok1(strcmp(printf_buffer, expect) == 0);</span></a>
+<a name="55"><span class="lineNum"> 55 </span> : : }</a>
+<a name="56"><span class="lineNum"> 56 </span> : : </a>
+<a name="57"><span class="lineNum"> 57 </span> : : /* n1 in list. */</a>
+<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 10 : list.n.next = &amp;n1;</span></a>
+<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 10 : list.n.prev = &amp;n1;</span></a>
+<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 10 : n1.prev = &amp;list.n;</span></a>
+<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 10 : n1.next = &amp;list.n;</span></a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;list, NULL) == &amp;list);</span></a>
+<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 10 : ok1(list_check_node(&amp;n1, NULL) == &amp;n1);</span></a>
+<a name="64"><span class="lineNum"> 64 </span> : : </a>
+<a name="65"><span class="lineNum"> 65 </span> : : /* Bad back ptr */</a>
+<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 10 : n1.prev = &amp;n1;</span></a>
+<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;list, NULL) == NULL);</span></a>
+<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 10 : ok1(list_check_node(&amp;n1, NULL) == NULL);</span></a>
<a name="69"><span class="lineNum"> 69 </span> : : </a>
-<a name="70"><span class="lineNum"> 70 </span> : : /* Bad back ptr */</a>
-<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 6 : n1.prev = &amp;n1;</span></a>
-<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 6 : ok1(list_check(&amp;list, NULL) == NULL);</span></a>
-<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 6 : ok1(list_check_node(&amp;n1, NULL) == NULL);</span></a>
-<a name="74"><span class="lineNum"> 74 </span> : : </a>
-<a name="75"><span class="lineNum"> 75 </span> : : /* Aborting version. */</a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 6 : sprintf(expect, &quot;test message: prev corrupt in node %p (1) of %p\n&quot;,</span></a>
-<a name="77"><span class="lineNum"> 77 </span> : : &amp;n1, &amp;list);</a>
-<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 6 : if (setjmp(aborted) == 0) {</span></a>
-<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 6 : list_check(&amp;list, &quot;test message&quot;);</span></a>
-<a name="80"><span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : fail(&quot;list_check on n1 bad back ptr didn't fail!&quot;);</span></a>
-<a name="81"><span class="lineNum"> 81 </span> : : } else {</a>
-<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 6 : ok1(strcmp(printf_buffer, expect) == 0);</span></a>
-<a name="83"><span class="lineNum"> 83 </span> : : }</a>
-<a name="84"><span class="lineNum"> 84 </span> : : </a>
-<a name="85"><span class="lineNum"> 85 </span> :<span class="lineCov"> 6 : sprintf(expect, &quot;test message: prev corrupt in node %p (0) of %p\n&quot;,</span></a>
-<a name="86"><span class="lineNum"> 86 </span> : : &amp;n1, &amp;n1);</a>
-<a name="87"><span class="lineNum"> 87 </span> :<span class="lineCov"> 6 : if (setjmp(aborted) == 0) {</span></a>
-<a name="88"><span class="lineNum"> 88 </span> :<span class="lineCov"> 6 : list_check_node(&amp;n1, &quot;test message&quot;);</span></a>
-<a name="89"><span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : fail(&quot;list_check_node on n1 bad back ptr didn't fail!&quot;);</span></a>
-<a name="90"><span class="lineNum"> 90 </span> : : } else {</a>
-<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 6 : ok1(strcmp(printf_buffer, expect) == 0);</span></a>
-<a name="92"><span class="lineNum"> 92 </span> : : }</a>
-<a name="93"><span class="lineNum"> 93 </span> : : </a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 6 : return exit_status();</span></a>
-<a name="95"><span class="lineNum"> 95 </span> : : }</a>
+<a name="70"><span class="lineNum"> 70 </span> : : /* Aborting version. */</a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 10 : sprintf(expect, &quot;test message: prev corrupt in node %p (1) of %p\n&quot;,</span></a>
+<a name="72"><span class="lineNum"> 72 </span> : : &amp;n1, &amp;list);</a>
+<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 10 : if (setjmp(aborted) == 0) {</span></a>
+<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 10 : list_check(&amp;list, &quot;test message&quot;);</span></a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineNoCov"> 0 : fail(&quot;list_check on n1 bad back ptr didn't fail!&quot;);</span></a>
+<a name="76"><span class="lineNum"> 76 </span> : : } else {</a>
+<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 10 : ok1(strcmp(printf_buffer, expect) == 0);</span></a>
+<a name="78"><span class="lineNum"> 78 </span> : : }</a>
+<a name="79"><span class="lineNum"> 79 </span> : : </a>
+<a name="80"><span class="lineNum"> 80 </span> :<span class="lineCov"> 10 : sprintf(expect, &quot;test message: prev corrupt in node %p (0) of %p\n&quot;,</span></a>
+<a name="81"><span class="lineNum"> 81 </span> : : &amp;n1, &amp;n1);</a>
+<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 10 : if (setjmp(aborted) == 0) {</span></a>
+<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 10 : list_check_node(&amp;n1, &quot;test message&quot;);</span></a>
+<a name="84"><span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : fail(&quot;list_check_node on n1 bad back ptr didn't fail!&quot;);</span></a>
+<a name="85"><span class="lineNum"> 85 </span> : : } else {</a>
+<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 10 : ok1(strcmp(printf_buffer, expect) == 0);</span></a>
+<a name="87"><span class="lineNum"> 87 </span> : : }</a>
+<a name="88"><span class="lineNum"> 88 </span> : : </a>
+<a name="89"><span class="lineNum"> 89 </span> :<span class="lineCov"> 10 : return exit_status();</span></a>
+<a name="90"><span class="lineNum"> 90 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/usr/include/bits/byteswap.h.func-sort-c.html b/coverage-report/ccan/list/test/run-check-nonconst.c.func-sort-c.html
index 41d837e..ebedf07 100644
--- a/coverage-report/usr/include/bits/byteswap.h.func-sort-c.html
+++ b/coverage-report/ccan/list/test/run-check-nonconst.c.func-sort-c.html
@@ -4,7 +4,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>LCOV - skiboot.info - /usr/include/bits/byteswap.h - functions</title>
+ <title>LCOV - skiboot.info - ccan/list/test/run-check-nonconst.c - functions</title>
<link rel="stylesheet" type="text/css" href="../../../gcov.css">
</head>
@@ -19,7 +19,7 @@
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
- <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">usr/include/bits</a> - byteswap.h<span style="font-size: 80%;"> (<a href="byteswap.h.gcov.html">source</a> / functions)</span></td>
+ <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">ccan/list/test</a> - run-check-nonconst.c<span style="font-size: 80%;"> (<a href="run-check-nonconst.c.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">4</td>
+ <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -65,12 +65,12 @@
<table width="60%" cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
- <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="byteswap.h.func.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="run-check-nonconst.c.func.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="byteswap.h.gcov.html#68">__bswap_64</a></td>
- <td class="coverFnHi">7601</td>
+ <td class="coverFn"><a href="run-check-nonconst.c.gcov.html#9">main</a></td>
+ <td class="coverFnHi">10</td>
</tr>
</table>
<br>
diff --git a/coverage-report/usr/include/bits/byteswap.h.func.html b/coverage-report/ccan/list/test/run-check-nonconst.c.func.html
index ce44bc6..89b2528 100644
--- a/coverage-report/usr/include/bits/byteswap.h.func.html
+++ b/coverage-report/ccan/list/test/run-check-nonconst.c.func.html
@@ -4,7 +4,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>LCOV - skiboot.info - /usr/include/bits/byteswap.h - functions</title>
+ <title>LCOV - skiboot.info - ccan/list/test/run-check-nonconst.c - functions</title>
<link rel="stylesheet" type="text/css" href="../../../gcov.css">
</head>
@@ -19,7 +19,7 @@
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
- <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">usr/include/bits</a> - byteswap.h<span style="font-size: 80%;"> (<a href="byteswap.h.gcov.html">source</a> / functions)</span></td>
+ <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">ccan/list/test</a> - run-check-nonconst.c<span style="font-size: 80%;"> (<a href="run-check-nonconst.c.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">4</td>
+ <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntry">8</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -66,11 +66,11 @@
<tr><td><br></td></tr>
<tr>
<td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
- <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="byteswap.h.func-sort-c.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="run-check-nonconst.c.func-sort-c.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="byteswap.h.gcov.html#68">__bswap_64</a></td>
- <td class="coverFnHi">7601</td>
+ <td class="coverFn"><a href="run-check-nonconst.c.gcov.html#9">main</a></td>
+ <td class="coverFnHi">10</td>
</tr>
</table>
<br>
diff --git a/coverage-report/ccan/list/test/run-check-nonconst.c.gcov.html b/coverage-report/ccan/list/test/run-check-nonconst.c.gcov.html
new file mode 100644
index 0000000..6f23885
--- /dev/null
+++ b/coverage-report/ccan/list/test/run-check-nonconst.c.gcov.html
@@ -0,0 +1,112 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - ccan/list/test/run-check-nonconst.c</title>
+ <link rel="stylesheet" type="text/css" href="../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">ccan/list/test</a> - run-check-nonconst.c<span style="font-size: 80%;"> (source / <a href="run-check-nonconst.c.func-sort-c.html">functions</a>)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <table cellpadding=0 cellspacing=0 border=0>
+ <tr>
+ <td><br></td>
+ </tr>
+ <tr>
+ <td>
+<pre class="sourceHeading"> Branch data Line data Source code</pre>
+<pre class="source">
+<a name="1"><span class="lineNum"> 1 </span> : : #include &lt;ccan/list/list.h&gt;</a>
+<a name="2"><span class="lineNum"> 2 </span> : : #include &lt;ccan/tap/tap.h&gt;</a>
+<a name="3"><span class="lineNum"> 3 </span> : : #include &lt;ccan/list/list.c&gt;</a>
+<a name="4"><span class="lineNum"> 4 </span> : : #include &quot;helper.h&quot;</a>
+<a name="5"><span class="lineNum"> 5 </span> : : </a>
+<a name="6"><span class="lineNum"> 6 </span> : : struct child {</a>
+<a name="7"><span class="lineNum"> 7 </span> : : const char *name;</a>
+<a name="8"><span class="lineNum"> 8 </span> : : struct list_node list;</a>
+<a name="9"><span class="lineNum"> 9 </span> : : };</a>
+<a name="10"><span class="lineNum"> 10 </span> : : </a>
+<a name="11"><span class="lineNum"> 11 </span> :<span class="lineCov"> 10 : int main(void)</span></a>
+<a name="12"><span class="lineNum"> 12 </span> : : {</a>
+<a name="13"><span class="lineNum"> 13 </span> : : struct child c1, c2;</a>
+<a name="14"><span class="lineNum"> 14 </span> :<span class="lineCov"> 10 : struct list_head list = LIST_HEAD_INIT(list);</span></a>
+<a name="15"><span class="lineNum"> 15 </span> : : </a>
+<a name="16"><span class="lineNum"> 16 </span> : : plan_tests(1);</a>
+<a name="17"><span class="lineNum"> 17 </span> : : </a>
+<a name="18"><span class="lineNum"> 18 </span> :<span class="lineCov"> 10 : list_add(&amp;list, &amp;c1.list);</span></a>
+<a name="19"><span class="lineNum"> 19 </span> :<span class="lineCov"> 10 : list_add_tail(list_check(&amp;list, &quot;Bad list!&quot;), &amp;c2.list);</span></a>
+<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 10 : list_del_from(list_check(&amp;list, &quot;Bad list!&quot;),</span></a>
+<a name="21"><span class="lineNum"> 21 </span> : : list_check_node(&amp;c2.list, &quot;Bad node!&quot;));</a>
+<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 10 : list_del_from(list_check(&amp;list, &quot;Bad list!&quot;),</span></a>
+<a name="23"><span class="lineNum"> 23 </span> : : list_check_node(&amp;c1.list, &quot;Bad node!&quot;));</a>
+<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 10 : ok1(list_empty(list_check(&amp;list, &quot;Bad emptied list&quot;)));</span></a>
+<a name="25"><span class="lineNum"> 25 </span> : : </a>
+<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 10 : return exit_status();</span></a>
+<a name="27"><span class="lineNum"> 27 </span> : : }</a>
+</pre>
+ </td>
+ </tr>
+ </table>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/ccan/list/test/run-list_del_from-assert.c.func-sort-c.html b/coverage-report/ccan/list/test/run-list_del_from-assert.c.func-sort-c.html
index d566b3b..580520b 100644
--- a/coverage-report/ccan/list/test/run-list_del_from-assert.c.func-sort-c.html
+++ b/coverage-report/ccan/list/test/run-list_del_from-assert.c.func-sort-c.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntry">15</td>
- <td class="headerCovTableEntryMed">80.0 %</td>
+ <td class="headerCovTableEntry">14</td>
+ <td class="headerCovTableEntryMed">85.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -70,7 +70,7 @@
</tr>
<tr>
<td class="coverFn"><a href="run-list_del_from-assert.c.gcov.html#8">main</a></td>
- <td class="coverFnHi">6</td>
+ <td class="coverFnHi">10</td>
</tr>
</table>
<br>
diff --git a/coverage-report/ccan/list/test/run-list_del_from-assert.c.func.html b/coverage-report/ccan/list/test/run-list_del_from-assert.c.func.html
index 38a5fc9..fbe3203 100644
--- a/coverage-report/ccan/list/test/run-list_del_from-assert.c.func.html
+++ b/coverage-report/ccan/list/test/run-list_del_from-assert.c.func.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntry">15</td>
- <td class="headerCovTableEntryMed">80.0 %</td>
+ <td class="headerCovTableEntry">14</td>
+ <td class="headerCovTableEntryMed">85.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -70,7 +70,7 @@
</tr>
<tr>
<td class="coverFn"><a href="run-list_del_from-assert.c.gcov.html#8">main</a></td>
- <td class="coverFnHi">6</td>
+ <td class="coverFnHi">10</td>
</tr>
</table>
<br>
diff --git a/coverage-report/ccan/list/test/run-list_del_from-assert.c.gcov.html b/coverage-report/ccan/list/test/run-list_del_from-assert.c.gcov.html
index a2b9178..5daffec 100644
--- a/coverage-report/ccan/list/test/run-list_del_from-assert.c.gcov.html
+++ b/coverage-report/ccan/list/test/run-list_del_from-assert.c.gcov.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntry">15</td>
- <td class="headerCovTableEntryMed">80.0 %</td>
+ <td class="headerCovTableEntry">14</td>
+ <td class="headerCovTableEntryMed">85.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -78,37 +78,33 @@
<a name="7"><span class="lineNum"> 7 </span> : : #include &lt;unistd.h&gt;</a>
<a name="8"><span class="lineNum"> 8 </span> : : #include &lt;signal.h&gt;</a>
<a name="9"><span class="lineNum"> 9 </span> : : </a>
-<a name="10"><span class="lineNum"> 10 </span> :<span class="lineCov"> 6 : int main(int argc, char *argv[])</span></a>
+<a name="10"><span class="lineNum"> 10 </span> :<span class="lineCov"> 10 : int main(void)</span></a>
<a name="11"><span class="lineNum"> 11 </span> : : {</a>
<a name="12"><span class="lineNum"> 12 </span> : : struct list_head list1, list2;</a>
<a name="13"><span class="lineNum"> 13 </span> : : struct list_node n1, n2, n3;</a>
<a name="14"><span class="lineNum"> 14 </span> : : pid_t child;</a>
<a name="15"><span class="lineNum"> 15 </span> : : int status;</a>
<a name="16"><span class="lineNum"> 16 </span> : : </a>
-<a name="17"><span class="lineNum"> 17 </span> : : (void)argc;</a>
-<a name="18"><span class="lineNum"> 18 </span> : : (void)argv;</a>
-<a name="19"><span class="lineNum"> 19 </span> : : </a>
-<a name="20"><span class="lineNum"> 20 </span> : : plan_tests(1);</a>
-<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 6 : list_head_init(&amp;list1);</span></a>
-<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 6 : list_head_init(&amp;list2);</span></a>
-<a name="23"><span class="lineNum"> 23 </span> :<span class="lineCov"> 6 : list_add(&amp;list1, &amp;n1);</span></a>
-<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 6 : list_add(&amp;list2, &amp;n2);</span></a>
-<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 6 : list_add_tail(&amp;list2, &amp;n3);</span></a>
-<a name="26"><span class="lineNum"> 26 </span> : : </a>
-<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 6 : child = fork();</span></a>
-<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 6 : if (child) {</span></a>
-<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 6 : wait(&amp;status);</span></a>
-<a name="30"><span class="lineNum"> 30 </span> : : } else {</a>
-<a name="31"><span class="lineNum"> 31 </span> :<span class="lineNoCov"> 0 : close(2); /* Close stderr so we don't print confusing assert */</span></a>
-<a name="32"><span class="lineNum"> 32 </span> : : /* This should abort. */</a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineNoCov"> 0 : list_del_from(&amp;list1, &amp;n3);</span></a>
-<a name="34"><span class="lineNum"> 34 </span> :<span class="lineNoCov"> 0 : exit(0);</span></a>
-<a name="35"><span class="lineNum"> 35 </span> : : }</a>
-<a name="36"><span class="lineNum"> 36 </span> : : </a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 6 : ok1(WIFSIGNALED(status) &amp;&amp; WTERMSIG(status) == SIGABRT);</span></a>
-<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 6 : list_del_from(&amp;list2, &amp;n3);</span></a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 6 : return exit_status();</span></a>
-<a name="40"><span class="lineNum"> 40 </span> : : }</a>
+<a name="17"><span class="lineNum"> 17 </span> : : plan_tests(1);</a>
+<a name="18"><span class="lineNum"> 18 </span> :<span class="lineCov"> 10 : list_head_init(&amp;list1);</span></a>
+<a name="19"><span class="lineNum"> 19 </span> :<span class="lineCov"> 10 : list_head_init(&amp;list2);</span></a>
+<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 10 : list_add(&amp;list1, &amp;n1);</span></a>
+<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 10 : list_add(&amp;list2, &amp;n2);</span></a>
+<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 10 : list_add_tail(&amp;list2, &amp;n3);</span></a>
+<a name="23"><span class="lineNum"> 23 </span> : : </a>
+<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 10 : child = fork();</span></a>
+<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 10 : if (child) {</span></a>
+<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 10 : wait(&amp;status);</span></a>
+<a name="27"><span class="lineNum"> 27 </span> : : } else {</a>
+<a name="28"><span class="lineNum"> 28 </span> : : /* This should abort. */</a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineNoCov"> 0 : list_del_from(&amp;list1, &amp;n3);</span></a>
+<a name="30"><span class="lineNum"> 30 </span> :<span class="lineNoCov"> 0 : exit(0);</span></a>
+<a name="31"><span class="lineNum"> 31 </span> : : }</a>
+<a name="32"><span class="lineNum"> 32 </span> : : </a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 10 : ok1(WIFSIGNALED(status) &amp;&amp; WTERMSIG(status) == SIGABRT);</span></a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 10 : list_del_from(&amp;list2, &amp;n3);</span></a>
+<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 10 : return exit_status();</span></a>
+<a name="36"><span class="lineNum"> 36 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/usr/include/sys/stat.h.func-sort-c.html b/coverage-report/ccan/list/test/run-list_prev-list_next.c.func-sort-c.html
index 99d1086..b8105e8 100644
--- a/coverage-report/usr/include/sys/stat.h.func-sort-c.html
+++ b/coverage-report/ccan/list/test/run-list_prev-list_next.c.func-sort-c.html
@@ -4,7 +4,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>LCOV - skiboot.info - /usr/include/sys/stat.h - functions</title>
+ <title>LCOV - skiboot.info - ccan/list/test/run-list_prev-list_next.c - functions</title>
<link rel="stylesheet" type="text/css" href="../../../gcov.css">
</head>
@@ -19,7 +19,7 @@
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
- <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">usr/include/sys</a> - stat.h<span style="font-size: 80%;"> (<a href="stat.h.gcov.html">source</a> / functions)</span></td>
+ <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">ccan/list/test</a> - run-list_prev-list_next.c<span style="font-size: 80%;"> (<a href="run-list_prev-list_next.c.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">32</td>
+ <td class="headerCovTableEntry">32</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntryHi">-</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td></td>
@@ -65,9 +65,13 @@
<table width="60%" cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
- <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="stat.h.func.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="run-list_prev-list_next.c.func.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
+ <tr>
+ <td class="coverFn"><a href="run-list_prev-list_next.c.gcov.html#15">main</a></td>
+ <td class="coverFnHi">10</td>
+ </tr>
</table>
<br>
</center>
diff --git a/coverage-report/usr/include/sys/stat.h.func.html b/coverage-report/ccan/list/test/run-list_prev-list_next.c.func.html
index c65fdda..28091f0 100644
--- a/coverage-report/usr/include/sys/stat.h.func.html
+++ b/coverage-report/ccan/list/test/run-list_prev-list_next.c.func.html
@@ -4,7 +4,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>LCOV - skiboot.info - /usr/include/sys/stat.h - functions</title>
+ <title>LCOV - skiboot.info - ccan/list/test/run-list_prev-list_next.c - functions</title>
<link rel="stylesheet" type="text/css" href="../../../gcov.css">
</head>
@@ -19,7 +19,7 @@
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
- <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">usr/include/sys</a> - stat.h<span style="font-size: 80%;"> (<a href="stat.h.gcov.html">source</a> / functions)</span></td>
+ <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">ccan/list/test</a> - run-list_prev-list_next.c<span style="font-size: 80%;"> (<a href="run-list_prev-list_next.c.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">32</td>
+ <td class="headerCovTableEntry">32</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntryHi">-</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td></td>
@@ -66,8 +66,12 @@
<tr><td><br></td></tr>
<tr>
<td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
- <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="stat.h.func-sort-c.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="run-list_prev-list_next.c.func-sort-c.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
+ <tr>
+ <td class="coverFn"><a href="run-list_prev-list_next.c.gcov.html#15">main</a></td>
+ <td class="coverFnHi">10</td>
+ </tr>
</table>
<br>
</center>
diff --git a/coverage-report/ccan/list/test/run-list_prev-list_next.c.gcov.html b/coverage-report/ccan/list/test/run-list_prev-list_next.c.gcov.html
new file mode 100644
index 0000000..ffda556
--- /dev/null
+++ b/coverage-report/ccan/list/test/run-list_prev-list_next.c.gcov.html
@@ -0,0 +1,150 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - ccan/list/test/run-list_prev-list_next.c</title>
+ <link rel="stylesheet" type="text/css" href="../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">ccan/list/test</a> - run-list_prev-list_next.c<span style="font-size: 80%;"> (source / <a href="run-list_prev-list_next.c.func-sort-c.html">functions</a>)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">32</td>
+ <td class="headerCovTableEntry">32</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <table cellpadding=0 cellspacing=0 border=0>
+ <tr>
+ <td><br></td>
+ </tr>
+ <tr>
+ <td>
+<pre class="sourceHeading"> Branch data Line data Source code</pre>
+<pre class="source">
+<a name="1"><span class="lineNum"> 1 </span> : : #include &lt;ccan/list/list.h&gt;</a>
+<a name="2"><span class="lineNum"> 2 </span> : : #include &lt;ccan/tap/tap.h&gt;</a>
+<a name="3"><span class="lineNum"> 3 </span> : : #include &lt;ccan/list/list.c&gt;</a>
+<a name="4"><span class="lineNum"> 4 </span> : : #include &quot;helper.h&quot;</a>
+<a name="5"><span class="lineNum"> 5 </span> : : </a>
+<a name="6"><span class="lineNum"> 6 </span> : : struct parent {</a>
+<a name="7"><span class="lineNum"> 7 </span> : : const char *name;</a>
+<a name="8"><span class="lineNum"> 8 </span> : : unsigned int num_children;</a>
+<a name="9"><span class="lineNum"> 9 </span> : : struct list_head children;</a>
+<a name="10"><span class="lineNum"> 10 </span> : : };</a>
+<a name="11"><span class="lineNum"> 11 </span> : : </a>
+<a name="12"><span class="lineNum"> 12 </span> : : struct child {</a>
+<a name="13"><span class="lineNum"> 13 </span> : : const char *name;</a>
+<a name="14"><span class="lineNum"> 14 </span> : : struct list_node list;</a>
+<a name="15"><span class="lineNum"> 15 </span> : : };</a>
+<a name="16"><span class="lineNum"> 16 </span> : : </a>
+<a name="17"><span class="lineNum"> 17 </span> :<span class="lineCov"> 10 : int main(void)</span></a>
+<a name="18"><span class="lineNum"> 18 </span> : : {</a>
+<a name="19"><span class="lineNum"> 19 </span> : : struct parent parent;</a>
+<a name="20"><span class="lineNum"> 20 </span> : : struct child c1, c2, c3;</a>
+<a name="21"><span class="lineNum"> 21 </span> : : const struct parent *p;</a>
+<a name="22"><span class="lineNum"> 22 </span> : : const struct child *c;</a>
+<a name="23"><span class="lineNum"> 23 </span> : : </a>
+<a name="24"><span class="lineNum"> 24 </span> : : plan_tests(20);</a>
+<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 10 : parent.num_children = 0;</span></a>
+<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 10 : list_head_init(&amp;parent.children);</span></a>
+<a name="27"><span class="lineNum"> 27 </span> : : </a>
+<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 10 : c1.name = &quot;c1&quot;;</span></a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 10 : list_add(&amp;parent.children, &amp;c1.list);</span></a>
+<a name="30"><span class="lineNum"> 30 </span> : : </a>
+<a name="31"><span class="lineNum"> 31 </span> :<span class="lineCov"> 10 : ok1(list_next(&amp;parent.children, &amp;c1, list) == NULL);</span></a>
+<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 10 : ok1(list_prev(&amp;parent.children, &amp;c1, list) == NULL);</span></a>
+<a name="33"><span class="lineNum"> 33 </span> : : </a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 10 : c2.name = &quot;c2&quot;;</span></a>
+<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 10 : list_add_tail(&amp;parent.children, &amp;c2.list);</span></a>
+<a name="36"><span class="lineNum"> 36 </span> : : </a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 10 : ok1(list_next(&amp;parent.children, &amp;c1, list) == &amp;c2);</span></a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 10 : ok1(list_prev(&amp;parent.children, &amp;c1, list) == NULL);</span></a>
+<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 10 : ok1(list_next(&amp;parent.children, &amp;c2, list) == NULL);</span></a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 10 : ok1(list_prev(&amp;parent.children, &amp;c2, list) == &amp;c1);</span></a>
+<a name="41"><span class="lineNum"> 41 </span> : : </a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 10 : c3.name = &quot;c3&quot;;</span></a>
+<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 10 : list_add_tail(&amp;parent.children, &amp;c3.list);</span></a>
+<a name="44"><span class="lineNum"> 44 </span> : : </a>
+<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 10 : ok1(list_next(&amp;parent.children, &amp;c1, list) == &amp;c2);</span></a>
+<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 10 : ok1(list_prev(&amp;parent.children, &amp;c1, list) == NULL);</span></a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 10 : ok1(list_next(&amp;parent.children, &amp;c2, list) == &amp;c3);</span></a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 10 : ok1(list_prev(&amp;parent.children, &amp;c2, list) == &amp;c1);</span></a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 10 : ok1(list_next(&amp;parent.children, &amp;c3, list) == NULL);</span></a>
+<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 10 : ok1(list_prev(&amp;parent.children, &amp;c3, list) == &amp;c2);</span></a>
+<a name="51"><span class="lineNum"> 51 </span> : : </a>
+<a name="52"><span class="lineNum"> 52 </span> : : /* Const variants */</a>
+<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 10 : p = &amp;parent;</span></a>
+<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 10 : c = &amp;c2;</span></a>
+<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 10 : ok1(list_next(&amp;p-&gt;children, &amp;c1, list) == &amp;c2);</span></a>
+<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 10 : ok1(list_prev(&amp;p-&gt;children, &amp;c1, list) == NULL);</span></a>
+<a name="57"><span class="lineNum"> 57 </span> :<span class="lineCov"> 10 : ok1(list_next(&amp;p-&gt;children, c, list) == &amp;c3);</span></a>
+<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 10 : ok1(list_prev(&amp;p-&gt;children, c, list) == &amp;c1);</span></a>
+<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 10 : ok1(list_next(&amp;parent.children, c, list) == &amp;c3);</span></a>
+<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 10 : ok1(list_prev(&amp;parent.children, c, list) == &amp;c1);</span></a>
+<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 10 : ok1(list_next(&amp;p-&gt;children, &amp;c3, list) == NULL);</span></a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 10 : ok1(list_prev(&amp;p-&gt;children, &amp;c3, list) == &amp;c2);</span></a>
+<a name="63"><span class="lineNum"> 63 </span> : : </a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 10 : return exit_status();</span></a>
+<a name="65"><span class="lineNum"> 65 </span> : : }</a>
+</pre>
+ </td>
+ </tr>
+ </table>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/bits/stdio.h.func-sort-c.html b/coverage-report/ccan/list/test/run-prepend_list.c.func-sort-c.html
index e875506..9f26743 100644
--- a/coverage-report/usr/include/bits/stdio.h.func-sort-c.html
+++ b/coverage-report/ccan/list/test/run-prepend_list.c.func-sort-c.html
@@ -4,7 +4,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>LCOV - skiboot.info - /usr/include/bits/stdio.h - functions</title>
+ <title>LCOV - skiboot.info - ccan/list/test/run-prepend_list.c - functions</title>
<link rel="stylesheet" type="text/css" href="../../../gcov.css">
</head>
@@ -19,7 +19,7 @@
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
- <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">usr/include/bits</a> - stdio.h<span style="font-size: 80%;"> (<a href="stdio.h.gcov.html">source</a> / functions)</span></td>
+ <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">ccan/list/test</a> - run-prepend_list.c<span style="font-size: 80%;"> (<a href="run-prepend_list.c.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">2</td>
- <td class="headerCovTableEntry">2</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
+ <td class="headerCovTableEntry">71</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryHi">98.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntryHi">-</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td></td>
@@ -65,9 +65,17 @@
<table width="60%" cellpadding=1 cellspacing=1 border=0>
<tr><td><br></td></tr>
<tr>
- <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="stdio.h.func.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="run-prepend_list.c.func.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
+ <tr>
+ <td class="coverFn"><a href="run-prepend_list.c.gcov.html#18">main</a></td>
+ <td class="coverFnHi">10</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="run-prepend_list.c.gcov.html#4">list_expect</a></td>
+ <td class="coverFnHi">80</td>
+ </tr>
</table>
<br>
</center>
diff --git a/coverage-report/usr/include/bits/stdio.h.func.html b/coverage-report/ccan/list/test/run-prepend_list.c.func.html
index 2c71b4d..dba3674 100644
--- a/coverage-report/usr/include/bits/stdio.h.func.html
+++ b/coverage-report/ccan/list/test/run-prepend_list.c.func.html
@@ -4,7 +4,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>LCOV - skiboot.info - /usr/include/bits/stdio.h - functions</title>
+ <title>LCOV - skiboot.info - ccan/list/test/run-prepend_list.c - functions</title>
<link rel="stylesheet" type="text/css" href="../../../gcov.css">
</head>
@@ -19,7 +19,7 @@
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
- <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">usr/include/bits</a> - stdio.h<span style="font-size: 80%;"> (<a href="stdio.h.gcov.html">source</a> / functions)</span></td>
+ <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">ccan/list/test</a> - run-prepend_list.c<span style="font-size: 80%;"> (<a href="run-prepend_list.c.gcov.html">source</a> / functions)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">2</td>
- <td class="headerCovTableEntry">2</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
+ <td class="headerCovTableEntry">71</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryHi">98.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntryHi">-</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td></td>
@@ -66,8 +66,16 @@
<tr><td><br></td></tr>
<tr>
<td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
- <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="stdio.h.func-sort-c.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="run-prepend_list.c.func-sort-c.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
+ <tr>
+ <td class="coverFn"><a href="run-prepend_list.c.gcov.html#4">list_expect</a></td>
+ <td class="coverFnHi">80</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="run-prepend_list.c.gcov.html#18">main</a></td>
+ <td class="coverFnHi">10</td>
+ </tr>
</table>
<br>
</center>
diff --git a/coverage-report/ccan/list/test/run-prepend_list.c.gcov.html b/coverage-report/ccan/list/test/run-prepend_list.c.gcov.html
new file mode 100644
index 0000000..f25e3e4
--- /dev/null
+++ b/coverage-report/ccan/list/test/run-prepend_list.c.gcov.html
@@ -0,0 +1,196 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - ccan/list/test/run-prepend_list.c</title>
+ <link rel="stylesheet" type="text/css" href="../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">ccan/list/test</a> - run-prepend_list.c<span style="font-size: 80%;"> (source / <a href="run-prepend_list.c.func-sort-c.html">functions</a>)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">71</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryHi">98.6 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <table cellpadding=0 cellspacing=0 border=0>
+ <tr>
+ <td><br></td>
+ </tr>
+ <tr>
+ <td>
+<pre class="sourceHeading"> Branch data Line data Source code</pre>
+<pre class="source">
+<a name="1"><span class="lineNum"> 1 </span> : : #include &lt;ccan/list/list.h&gt;</a>
+<a name="2"><span class="lineNum"> 2 </span> : : #include &lt;ccan/tap/tap.h&gt;</a>
+<a name="3"><span class="lineNum"> 3 </span> : : #include &lt;ccan/list/list.c&gt;</a>
+<a name="4"><span class="lineNum"> 4 </span> : : #include &lt;stdarg.h&gt;</a>
+<a name="5"><span class="lineNum"> 5 </span> : : </a>
+<a name="6"><span class="lineNum"> 6 </span> :<span class="lineCov"> 80 : static bool list_expect(struct list_head *h, ...)</span></a>
+<a name="7"><span class="lineNum"> 7 </span> : : {</a>
+<a name="8"><span class="lineNum"> 8 </span> : : va_list ap;</a>
+<a name="9"><span class="lineNum"> 9 </span> :<span class="lineCov"> 80 : struct list_node *n = &amp;h-&gt;n, *expected;</span></a>
+<a name="10"><span class="lineNum"> 10 </span> : : </a>
+<a name="11"><span class="lineNum"> 11 </span> :<span class="lineCov"> 80 : va_start(ap, h);</span></a>
+<a name="12"><span class="lineNum"> 12 </span> :<span class="lineCov"> 250 : while ((expected = va_arg(ap, struct list_node *)) != NULL) {</span></a>
+<a name="13"><span class="lineNum"> 13 </span> :<span class="lineCov"> 170 : n = n-&gt;next;</span></a>
+<a name="14"><span class="lineNum"> 14 </span> :<span class="lineCov"> 170 : if (n != expected)</span></a>
+<a name="15"><span class="lineNum"> 15 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="16"><span class="lineNum"> 16 </span> : : }</a>
+<a name="17"><span class="lineNum"> 17 </span> :<span class="lineCov"> 80 : return (n-&gt;next == &amp;h-&gt;n);</span></a>
+<a name="18"><span class="lineNum"> 18 </span> : : }</a>
+<a name="19"><span class="lineNum"> 19 </span> : : </a>
+<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 10 : int main(void)</span></a>
+<a name="21"><span class="lineNum"> 21 </span> : : {</a>
+<a name="22"><span class="lineNum"> 22 </span> : : struct list_head h1, h2;</a>
+<a name="23"><span class="lineNum"> 23 </span> : : struct list_node n[4];</a>
+<a name="24"><span class="lineNum"> 24 </span> : : </a>
+<a name="25"><span class="lineNum"> 25 </span> : : plan_tests(40);</a>
+<a name="26"><span class="lineNum"> 26 </span> : : </a>
+<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 10 : list_head_init(&amp;h1);</span></a>
+<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 10 : list_head_init(&amp;h2);</span></a>
+<a name="29"><span class="lineNum"> 29 </span> : : </a>
+<a name="30"><span class="lineNum"> 30 </span> : : /* Append an empty list to an empty list. */</a>
+<a name="31"><span class="lineNum"> 31 </span> :<span class="lineCov"> 10 : list_append_list(&amp;h1, &amp;h2);</span></a>
+<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 10 : ok1(list_empty(&amp;h1));</span></a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 10 : ok1(list_empty(&amp;h2));</span></a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h1, NULL));</span></a>
+<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h2, NULL));</span></a>
+<a name="36"><span class="lineNum"> 36 </span> : : </a>
+<a name="37"><span class="lineNum"> 37 </span> : : /* Prepend an empty list to an empty list. */</a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 10 : list_prepend_list(&amp;h1, &amp;h2);</span></a>
+<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 10 : ok1(list_empty(&amp;h1));</span></a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 10 : ok1(list_empty(&amp;h2));</span></a>
+<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h1, NULL));</span></a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h2, NULL));</span></a>
+<a name="43"><span class="lineNum"> 43 </span> : : </a>
+<a name="44"><span class="lineNum"> 44 </span> : : /* Append an empty list to a non-empty list */</a>
+<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 10 : list_add(&amp;h1, &amp;n[0]);</span></a>
+<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 10 : list_append_list(&amp;h1, &amp;h2);</span></a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 10 : ok1(list_empty(&amp;h2));</span></a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h1, NULL));</span></a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h2, NULL));</span></a>
+<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 10 : ok1(list_expect(&amp;h1, &amp;n[0], NULL));</span></a>
+<a name="51"><span class="lineNum"> 51 </span> : : </a>
+<a name="52"><span class="lineNum"> 52 </span> : : /* Prepend an empty list to a non-empty list */</a>
+<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 10 : list_prepend_list(&amp;h1, &amp;h2);</span></a>
+<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 10 : ok1(list_empty(&amp;h2));</span></a>
+<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h1, NULL));</span></a>
+<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h2, NULL));</span></a>
+<a name="57"><span class="lineNum"> 57 </span> :<span class="lineCov"> 10 : ok1(list_expect(&amp;h1, &amp;n[0], NULL));</span></a>
+<a name="58"><span class="lineNum"> 58 </span> : : </a>
+<a name="59"><span class="lineNum"> 59 </span> : : /* Append a non-empty list to an empty list. */</a>
+<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 10 : list_append_list(&amp;h2, &amp;h1);</span></a>
+<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 10 : ok1(list_empty(&amp;h1));</span></a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h1, NULL));</span></a>
+<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h2, NULL));</span></a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 10 : ok1(list_expect(&amp;h2, &amp;n[0], NULL));</span></a>
+<a name="65"><span class="lineNum"> 65 </span> : : </a>
+<a name="66"><span class="lineNum"> 66 </span> : : /* Prepend a non-empty list to an empty list. */</a>
+<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 10 : list_prepend_list(&amp;h1, &amp;h2);</span></a>
+<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 10 : ok1(list_empty(&amp;h2));</span></a>
+<a name="69"><span class="lineNum"> 69 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h1, NULL));</span></a>
+<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h2, NULL));</span></a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 10 : ok1(list_expect(&amp;h1, &amp;n[0], NULL));</span></a>
+<a name="72"><span class="lineNum"> 72 </span> : : </a>
+<a name="73"><span class="lineNum"> 73 </span> : : /* Prepend a non-empty list to non-empty list. */</a>
+<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 10 : list_add(&amp;h2, &amp;n[1]);</span></a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 10 : list_prepend_list(&amp;h1, &amp;h2);</span></a>
+<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 10 : ok1(list_empty(&amp;h2));</span></a>
+<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h1, NULL));</span></a>
+<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h2, NULL));</span></a>
+<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 10 : ok1(list_expect(&amp;h1, &amp;n[1], &amp;n[0], NULL));</span></a>
+<a name="80"><span class="lineNum"> 80 </span> : : </a>
+<a name="81"><span class="lineNum"> 81 </span> : : /* Append a non-empty list to non-empty list. */</a>
+<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 10 : list_add(&amp;h2, &amp;n[2]);</span></a>
+<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 10 : list_append_list(&amp;h1, &amp;h2);</span></a>
+<a name="84"><span class="lineNum"> 84 </span> :<span class="lineCov"> 10 : ok1(list_empty(&amp;h2));</span></a>
+<a name="85"><span class="lineNum"> 85 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h1, NULL));</span></a>
+<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h2, NULL));</span></a>
+<a name="87"><span class="lineNum"> 87 </span> :<span class="lineCov"> 10 : ok1(list_expect(&amp;h1, &amp;n[1], &amp;n[0], &amp;n[2], NULL));</span></a>
+<a name="88"><span class="lineNum"> 88 </span> : : </a>
+<a name="89"><span class="lineNum"> 89 </span> : : /* Prepend a 2-entry list to a 2-entry list. */</a>
+<a name="90"><span class="lineNum"> 90 </span> :<span class="lineCov"> 10 : list_del_from(&amp;h1, &amp;n[2]);</span></a>
+<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 10 : list_add(&amp;h2, &amp;n[2]);</span></a>
+<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 10 : list_add_tail(&amp;h2, &amp;n[3]);</span></a>
+<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 10 : list_prepend_list(&amp;h1, &amp;h2);</span></a>
+<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 10 : ok1(list_empty(&amp;h2));</span></a>
+<a name="95"><span class="lineNum"> 95 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h1, NULL));</span></a>
+<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h2, NULL));</span></a>
+<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 10 : ok1(list_expect(&amp;h1, &amp;n[2], &amp;n[3], &amp;n[1], &amp;n[0], NULL));</span></a>
+<a name="98"><span class="lineNum"> 98 </span> : : </a>
+<a name="99"><span class="lineNum"> 99 </span> : : /* Append a 2-entry list to a 2-entry list. */</a>
+<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 10 : list_del_from(&amp;h1, &amp;n[2]);</span></a>
+<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 10 : list_del_from(&amp;h1, &amp;n[3]);</span></a>
+<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 10 : list_add(&amp;h2, &amp;n[2]);</span></a>
+<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 10 : list_add_tail(&amp;h2, &amp;n[3]);</span></a>
+<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 10 : list_append_list(&amp;h1, &amp;h2);</span></a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 10 : ok1(list_empty(&amp;h2));</span></a>
+<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h1, NULL));</span></a>
+<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 10 : ok1(list_check(&amp;h2, NULL));</span></a>
+<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 10 : ok1(list_expect(&amp;h1, &amp;n[1], &amp;n[0], &amp;n[2], &amp;n[3], NULL));</span></a>
+<a name="109"><span class="lineNum"> 109 </span> : : </a>
+<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 10 : return exit_status();</span></a>
+<a name="111"><span class="lineNum"> 111 </span> : : }</a>
+</pre>
+ </td>
+ </tr>
+ </table>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/ccan/list/test/run-single-eval.c.func-sort-c.html b/coverage-report/ccan/list/test/run-single-eval.c.func-sort-c.html
index 311c5ea..e4e0150 100644
--- a/coverage-report/ccan/list/test/run-single-eval.c.func-sort-c.html
+++ b/coverage-report/ccan/list/test/run-single-eval.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -70,7 +70,7 @@
</tr>
<tr>
<td class="coverFn"><a href="run-single-eval.c.gcov.html#20">main</a></td>
- <td class="coverFnHi">6</td>
+ <td class="coverFnHi">10</td>
</tr>
</table>
<br>
diff --git a/coverage-report/ccan/list/test/run-single-eval.c.func.html b/coverage-report/ccan/list/test/run-single-eval.c.func.html
index ffafe34..a5a961d 100644
--- a/coverage-report/ccan/list/test/run-single-eval.c.func.html
+++ b/coverage-report/ccan/list/test/run-single-eval.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -70,7 +70,7 @@
</tr>
<tr>
<td class="coverFn"><a href="run-single-eval.c.gcov.html#20">main</a></td>
- <td class="coverFnHi">6</td>
+ <td class="coverFnHi">10</td>
</tr>
</table>
<br>
diff --git a/coverage-report/ccan/list/test/run-single-eval.c.gcov.html b/coverage-report/ccan/list/test/run-single-eval.c.gcov.html
index 4ad86af..5632385 100644
--- a/coverage-report/ccan/list/test/run-single-eval.c.gcov.html
+++ b/coverage-report/ccan/list/test/run-single-eval.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -90,156 +90,153 @@
<a name="19"><span class="lineNum"> 19 </span> : : </a>
<a name="20"><span class="lineNum"> 20 </span> : : #define ref(obj, counter) ((counter)++, (obj))</a>
<a name="21"><span class="lineNum"> 21 </span> : : </a>
-<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 6 : int main(int argc, char *argv[])</span></a>
+<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 10 : int main(void)</span></a>
<a name="23"><span class="lineNum"> 23 </span> : : {</a>
<a name="24"><span class="lineNum"> 24 </span> : : struct parent parent;</a>
<a name="25"><span class="lineNum"> 25 </span> : : struct child c1, c2, c3, *c, *n;</a>
<a name="26"><span class="lineNum"> 26 </span> : : unsigned int i;</a>
-<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 6 : unsigned int static_count = 0, parent_count = 0, list_count = 0,</span></a>
-<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 6 : node_count = 0;</span></a>
-<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 6 : struct list_head list = LIST_HEAD_INIT(list);</span></a>
+<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 10 : unsigned int static_count = 0, parent_count = 0, list_count = 0,</span></a>
+<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 10 : node_count = 0;</span></a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 10 : struct list_head list = LIST_HEAD_INIT(list);</span></a>
<a name="30"><span class="lineNum"> 30 </span> : : </a>
-<a name="31"><span class="lineNum"> 31 </span> : : (void)argc;</a>
-<a name="32"><span class="lineNum"> 32 </span> : : (void)argv;</a>
-<a name="33"><span class="lineNum"> 33 </span> : : </a>
-<a name="34"><span class="lineNum"> 34 </span> : : plan_tests(74);</a>
-<a name="35"><span class="lineNum"> 35 </span> : : /* Test LIST_HEAD, LIST_HEAD_INIT, list_empty and check_list */</a>
-<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 6 : ok1(list_empty(ref(&amp;static_list, static_count)));</span></a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 6 : ok1(static_count == 1);</span></a>
-<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 6 : ok1(list_check(ref(&amp;static_list, static_count), NULL));</span></a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 6 : ok1(static_count == 2);</span></a>
-<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 6 : ok1(list_empty(ref(&amp;list, list_count)));</span></a>
-<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 6 : ok1(list_count == 1);</span></a>
-<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 6 : ok1(list_check(ref(&amp;list, list_count), NULL));</span></a>
-<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 6 : ok1(list_count == 2);</span></a>
-<a name="44"><span class="lineNum"> 44 </span> : : </a>
-<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 6 : parent.num_children = 0;</span></a>
-<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 6 : list_head_init(ref(&amp;parent.children, parent_count));</span></a>
-<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 6 : ok1(parent_count == 1);</span></a>
-<a name="48"><span class="lineNum"> 48 </span> : : /* Test list_head_init */</a>
-<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 6 : ok1(list_empty(ref(&amp;parent.children, parent_count)));</span></a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 6 : ok1(parent_count == 2);</span></a>
-<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 6 : ok1(list_check(ref(&amp;parent.children, parent_count), NULL));</span></a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 6 : ok1(parent_count == 3);</span></a>
-<a name="53"><span class="lineNum"> 53 </span> : : </a>
-<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 6 : c2.name = &quot;c2&quot;;</span></a>
-<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 6 : list_add(ref(&amp;parent.children, parent_count), &amp;c2.list);</span></a>
-<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 6 : ok1(parent_count == 4);</span></a>
-<a name="57"><span class="lineNum"> 57 </span> : : /* Test list_add and !list_empty. */</a>
-<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 6 : ok1(!list_empty(ref(&amp;parent.children, parent_count)));</span></a>
-<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 6 : ok1(parent_count == 5);</span></a>
-<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 6 : ok1(c2.list.next == &amp;parent.children.n);</span></a>
-<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 6 : ok1(c2.list.prev == &amp;parent.children.n);</span></a>
-<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 6 : ok1(parent.children.n.next == &amp;c2.list);</span></a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 6 : ok1(parent.children.n.prev == &amp;c2.list);</span></a>
-<a name="64"><span class="lineNum"> 64 </span> : : /* Test list_check */</a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 6 : ok1(list_check(ref(&amp;parent.children, parent_count), NULL));</span></a>
-<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 6 : ok1(parent_count == 6);</span></a>
-<a name="67"><span class="lineNum"> 67 </span> : : </a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 6 : c1.name = &quot;c1&quot;;</span></a>
-<a name="69"><span class="lineNum"> 69 </span> :<span class="lineCov"> 6 : list_add(ref(&amp;parent.children, parent_count), &amp;c1.list);</span></a>
-<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 6 : ok1(parent_count == 7);</span></a>
-<a name="71"><span class="lineNum"> 71 </span> : : /* Test list_add and !list_empty. */</a>
-<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 6 : ok1(!list_empty(ref(&amp;parent.children, parent_count)));</span></a>
-<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 6 : ok1(parent_count == 8);</span></a>
-<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 6 : ok1(c2.list.next == &amp;parent.children.n);</span></a>
-<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 6 : ok1(c2.list.prev == &amp;c1.list);</span></a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 6 : ok1(parent.children.n.next == &amp;c1.list);</span></a>
-<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 6 : ok1(parent.children.n.prev == &amp;c2.list);</span></a>
-<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 6 : ok1(c1.list.next == &amp;c2.list);</span></a>
-<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 6 : ok1(c1.list.prev == &amp;parent.children.n);</span></a>
-<a name="80"><span class="lineNum"> 80 </span> : : /* Test list_check */</a>
-<a name="81"><span class="lineNum"> 81 </span> :<span class="lineCov"> 6 : ok1(list_check(ref(&amp;parent.children, parent_count), NULL));</span></a>
-<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 6 : ok1(parent_count == 9);</span></a>
-<a name="83"><span class="lineNum"> 83 </span> : : </a>
-<a name="84"><span class="lineNum"> 84 </span> :<span class="lineCov"> 6 : c3.name = &quot;c3&quot;;</span></a>
-<a name="85"><span class="lineNum"> 85 </span> :<span class="lineCov"> 6 : list_add_tail(ref(&amp;parent.children, parent_count), &amp;c3.list);</span></a>
-<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 6 : ok1(parent_count == 10);</span></a>
-<a name="87"><span class="lineNum"> 87 </span> : : /* Test list_add_tail and !list_empty. */</a>
-<a name="88"><span class="lineNum"> 88 </span> :<span class="lineCov"> 6 : ok1(!list_empty(ref(&amp;parent.children, parent_count)));</span></a>
-<a name="89"><span class="lineNum"> 89 </span> :<span class="lineCov"> 6 : ok1(parent_count == 11);</span></a>
-<a name="90"><span class="lineNum"> 90 </span> :<span class="lineCov"> 6 : ok1(parent.children.n.next == &amp;c1.list);</span></a>
-<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 6 : ok1(parent.children.n.prev == &amp;c3.list);</span></a>
-<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 6 : ok1(c1.list.next == &amp;c2.list);</span></a>
-<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 6 : ok1(c1.list.prev == &amp;parent.children.n);</span></a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 6 : ok1(c2.list.next == &amp;c3.list);</span></a>
-<a name="95"><span class="lineNum"> 95 </span> :<span class="lineCov"> 6 : ok1(c2.list.prev == &amp;c1.list);</span></a>
-<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 6 : ok1(c3.list.next == &amp;parent.children.n);</span></a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 6 : ok1(c3.list.prev == &amp;c2.list);</span></a>
-<a name="98"><span class="lineNum"> 98 </span> : : /* Test list_check */</a>
-<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 6 : ok1(list_check(ref(&amp;parent.children, parent_count), NULL));</span></a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 6 : ok1(parent_count == 12);</span></a>
-<a name="101"><span class="lineNum"> 101 </span> : : </a>
-<a name="102"><span class="lineNum"> 102 </span> : : /* Test list_check_node */</a>
-<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 6 : ok1(list_check_node(&amp;c1.list, NULL));</span></a>
-<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 6 : ok1(list_check_node(&amp;c2.list, NULL));</span></a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 6 : ok1(list_check_node(&amp;c3.list, NULL));</span></a>
-<a name="106"><span class="lineNum"> 106 </span> : : </a>
-<a name="107"><span class="lineNum"> 107 </span> : : /* Test list_top */</a>
-<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 6 : ok1(list_top(ref(&amp;parent.children, parent_count), struct child, list) == &amp;c1);</span></a>
-<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 6 : ok1(parent_count == 13);</span></a>
-<a name="110"><span class="lineNum"> 110 </span> : : </a>
-<a name="111"><span class="lineNum"> 111 </span> : : /* Test list_tail */</a>
-<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 6 : ok1(list_tail(ref(&amp;parent.children, parent_count), struct child, list) == &amp;c3);</span></a>
-<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 6 : ok1(parent_count == 14);</span></a>
-<a name="114"><span class="lineNum"> 114 </span> : : </a>
-<a name="115"><span class="lineNum"> 115 </span> : : /* Test list_for_each. */</a>
-<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 6 : i = 0;</span></a>
-<a name="117"><span class="lineNum"> 117 </span> :<span class="lineCov"> 18 : list_for_each(&amp;parent.children, c, list) {</span></a>
-<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 18 : switch (i++) {</span></a>
-<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 6 : case 0:</span></a>
-<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 6 : ok1(c == &amp;c1);</span></a>
-<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 6 : case 1:</span></a>
-<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 6 : ok1(c == &amp;c2);</span></a>
-<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 6 : case 2:</span></a>
-<a name="126"><span class="lineNum"> 126 </span> :<span class="lineCov"> 6 : ok1(c == &amp;c3);</span></a>
-<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="128"><span class="lineNum"> 128 </span> : : }</a>
-<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 18 : if (i &gt; 2)</span></a>
-<a name="130"><span class="lineNum"> 130 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="131"><span class="lineNum"> 131 </span> : : }</a>
-<a name="132"><span class="lineNum"> 132 </span> :<span class="lineCov"> 6 : ok1(i == 3);</span></a>
-<a name="133"><span class="lineNum"> 133 </span> : : </a>
-<a name="134"><span class="lineNum"> 134 </span> : : /* Test list_for_each_safe, list_del and list_del_from. */</a>
-<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 6 : i = 0;</span></a>
-<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 18 : list_for_each_safe(&amp;parent.children, c, n, list) {</span></a>
-<a name="137"><span class="lineNum"> 137 </span> :<span class="lineCov"> 18 : switch (i++) {</span></a>
-<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 6 : case 0:</span></a>
-<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 6 : ok1(c == &amp;c1);</span></a>
-<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 6 : list_del(ref(&amp;c-&gt;list, node_count));</span></a>
-<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 6 : ok1(node_count == 1);</span></a>
-<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 6 : case 1:</span></a>
-<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 6 : ok1(c == &amp;c2);</span></a>
-<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 6 : list_del_from(ref(&amp;parent.children, parent_count),</span></a>
-<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 6 : ref(&amp;c-&gt;list, node_count));</span></a>
-<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 6 : ok1(node_count == 2);</span></a>
-<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 6 : case 2:</span></a>
-<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 6 : ok1(c == &amp;c3);</span></a>
-<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 6 : list_del_from(ref(&amp;parent.children, parent_count),</span></a>
-<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 6 : ref(&amp;c-&gt;list, node_count));</span></a>
-<a name="153"><span class="lineNum"> 153 </span> :<span class="lineCov"> 6 : ok1(node_count == 3);</span></a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="155"><span class="lineNum"> 155 </span> : : }</a>
-<a name="156"><span class="lineNum"> 156 </span> :<span class="lineCov"> 18 : ok1(list_check(ref(&amp;parent.children, parent_count), NULL));</span></a>
-<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 18 : if (i &gt; 2)</span></a>
-<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="159"><span class="lineNum"> 159 </span> : : }</a>
-<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 6 : ok1(i == 3);</span></a>
-<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 6 : ok1(parent_count == 19);</span></a>
-<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 6 : ok1(list_empty(ref(&amp;parent.children, parent_count)));</span></a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 6 : ok1(parent_count == 20);</span></a>
-<a name="164"><span class="lineNum"> 164 </span> : : </a>
-<a name="165"><span class="lineNum"> 165 </span> : : /* Test list_top/list_tail on empty list. */</a>
-<a name="166"><span class="lineNum"> 166 </span> :<span class="lineCov"> 6 : ok1(list_top(ref(&amp;parent.children, parent_count), struct child, list) == NULL);</span></a>
-<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 6 : ok1(parent_count == 21);</span></a>
-<a name="168"><span class="lineNum"> 168 </span> :<span class="lineCov"> 6 : ok1(list_tail(ref(&amp;parent.children, parent_count), struct child, list) == NULL);</span></a>
-<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 6 : ok1(parent_count == 22);</span></a>
-<a name="170"><span class="lineNum"> 170 </span> :<span class="lineCov"> 6 : return exit_status();</span></a>
-<a name="171"><span class="lineNum"> 171 </span> : : }</a>
+<a name="31"><span class="lineNum"> 31 </span> : : plan_tests(74);</a>
+<a name="32"><span class="lineNum"> 32 </span> : : /* Test LIST_HEAD, LIST_HEAD_INIT, list_empty and check_list */</a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 10 : ok1(list_empty(ref(&amp;static_list, static_count)));</span></a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 10 : ok1(static_count == 1);</span></a>
+<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 10 : ok1(list_check(ref(&amp;static_list, static_count), NULL));</span></a>
+<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 10 : ok1(static_count == 2);</span></a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 10 : ok1(list_empty(ref(&amp;list, list_count)));</span></a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 10 : ok1(list_count == 1);</span></a>
+<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 10 : ok1(list_check(ref(&amp;list, list_count), NULL));</span></a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 10 : ok1(list_count == 2);</span></a>
+<a name="41"><span class="lineNum"> 41 </span> : : </a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 10 : parent.num_children = 0;</span></a>
+<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 10 : list_head_init(ref(&amp;parent.children, parent_count));</span></a>
+<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 10 : ok1(parent_count == 1);</span></a>
+<a name="45"><span class="lineNum"> 45 </span> : : /* Test list_head_init */</a>
+<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 10 : ok1(list_empty(ref(&amp;parent.children, parent_count)));</span></a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 10 : ok1(parent_count == 2);</span></a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 10 : ok1(list_check(ref(&amp;parent.children, parent_count), NULL));</span></a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 10 : ok1(parent_count == 3);</span></a>
+<a name="50"><span class="lineNum"> 50 </span> : : </a>
+<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 10 : c2.name = &quot;c2&quot;;</span></a>
+<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 10 : list_add(ref(&amp;parent.children, parent_count), &amp;c2.list);</span></a>
+<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 10 : ok1(parent_count == 4);</span></a>
+<a name="54"><span class="lineNum"> 54 </span> : : /* Test list_add and !list_empty. */</a>
+<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 10 : ok1(!list_empty(ref(&amp;parent.children, parent_count)));</span></a>
+<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 10 : ok1(parent_count == 5);</span></a>
+<a name="57"><span class="lineNum"> 57 </span> :<span class="lineCov"> 10 : ok1(c2.list.next == &amp;parent.children.n);</span></a>
+<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 10 : ok1(c2.list.prev == &amp;parent.children.n);</span></a>
+<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 10 : ok1(parent.children.n.next == &amp;c2.list);</span></a>
+<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 10 : ok1(parent.children.n.prev == &amp;c2.list);</span></a>
+<a name="61"><span class="lineNum"> 61 </span> : : /* Test list_check */</a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 10 : ok1(list_check(ref(&amp;parent.children, parent_count), NULL));</span></a>
+<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 10 : ok1(parent_count == 6);</span></a>
+<a name="64"><span class="lineNum"> 64 </span> : : </a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 10 : c1.name = &quot;c1&quot;;</span></a>
+<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 10 : list_add(ref(&amp;parent.children, parent_count), &amp;c1.list);</span></a>
+<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 10 : ok1(parent_count == 7);</span></a>
+<a name="68"><span class="lineNum"> 68 </span> : : /* Test list_add and !list_empty. */</a>
+<a name="69"><span class="lineNum"> 69 </span> :<span class="lineCov"> 10 : ok1(!list_empty(ref(&amp;parent.children, parent_count)));</span></a>
+<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 10 : ok1(parent_count == 8);</span></a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 10 : ok1(c2.list.next == &amp;parent.children.n);</span></a>
+<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 10 : ok1(c2.list.prev == &amp;c1.list);</span></a>
+<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 10 : ok1(parent.children.n.next == &amp;c1.list);</span></a>
+<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 10 : ok1(parent.children.n.prev == &amp;c2.list);</span></a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 10 : ok1(c1.list.next == &amp;c2.list);</span></a>
+<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 10 : ok1(c1.list.prev == &amp;parent.children.n);</span></a>
+<a name="77"><span class="lineNum"> 77 </span> : : /* Test list_check */</a>
+<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 10 : ok1(list_check(ref(&amp;parent.children, parent_count), NULL));</span></a>
+<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 10 : ok1(parent_count == 9);</span></a>
+<a name="80"><span class="lineNum"> 80 </span> : : </a>
+<a name="81"><span class="lineNum"> 81 </span> :<span class="lineCov"> 10 : c3.name = &quot;c3&quot;;</span></a>
+<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 10 : list_add_tail(ref(&amp;parent.children, parent_count), &amp;c3.list);</span></a>
+<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 10 : ok1(parent_count == 10);</span></a>
+<a name="84"><span class="lineNum"> 84 </span> : : /* Test list_add_tail and !list_empty. */</a>
+<a name="85"><span class="lineNum"> 85 </span> :<span class="lineCov"> 10 : ok1(!list_empty(ref(&amp;parent.children, parent_count)));</span></a>
+<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 10 : ok1(parent_count == 11);</span></a>
+<a name="87"><span class="lineNum"> 87 </span> :<span class="lineCov"> 10 : ok1(parent.children.n.next == &amp;c1.list);</span></a>
+<a name="88"><span class="lineNum"> 88 </span> :<span class="lineCov"> 10 : ok1(parent.children.n.prev == &amp;c3.list);</span></a>
+<a name="89"><span class="lineNum"> 89 </span> :<span class="lineCov"> 10 : ok1(c1.list.next == &amp;c2.list);</span></a>
+<a name="90"><span class="lineNum"> 90 </span> :<span class="lineCov"> 10 : ok1(c1.list.prev == &amp;parent.children.n);</span></a>
+<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 10 : ok1(c2.list.next == &amp;c3.list);</span></a>
+<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 10 : ok1(c2.list.prev == &amp;c1.list);</span></a>
+<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 10 : ok1(c3.list.next == &amp;parent.children.n);</span></a>
+<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 10 : ok1(c3.list.prev == &amp;c2.list);</span></a>
+<a name="95"><span class="lineNum"> 95 </span> : : /* Test list_check */</a>
+<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 10 : ok1(list_check(ref(&amp;parent.children, parent_count), NULL));</span></a>
+<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 10 : ok1(parent_count == 12);</span></a>
+<a name="98"><span class="lineNum"> 98 </span> : : </a>
+<a name="99"><span class="lineNum"> 99 </span> : : /* Test list_check_node */</a>
+<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 10 : ok1(list_check_node(&amp;c1.list, NULL));</span></a>
+<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 10 : ok1(list_check_node(&amp;c2.list, NULL));</span></a>
+<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 10 : ok1(list_check_node(&amp;c3.list, NULL));</span></a>
+<a name="103"><span class="lineNum"> 103 </span> : : </a>
+<a name="104"><span class="lineNum"> 104 </span> : : /* Test list_top */</a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 10 : ok1(list_top(ref(&amp;parent.children, parent_count), struct child, list) == &amp;c1);</span></a>
+<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 10 : ok1(parent_count == 13);</span></a>
+<a name="107"><span class="lineNum"> 107 </span> : : </a>
+<a name="108"><span class="lineNum"> 108 </span> : : /* Test list_tail */</a>
+<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 10 : ok1(list_tail(ref(&amp;parent.children, parent_count), struct child, list) == &amp;c3);</span></a>
+<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 10 : ok1(parent_count == 14);</span></a>
+<a name="111"><span class="lineNum"> 111 </span> : : </a>
+<a name="112"><span class="lineNum"> 112 </span> : : /* Test list_for_each. */</a>
+<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 10 : i = 0;</span></a>
+<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 30 : list_for_each(&amp;parent.children, c, list) {</span></a>
+<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 30 : switch (i++) {</span></a>
+<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 10 : case 0:</span></a>
+<a name="117"><span class="lineNum"> 117 </span> :<span class="lineCov"> 10 : ok1(c == &amp;c1);</span></a>
+<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 10 : break;</span></a>
+<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 10 : case 1:</span></a>
+<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 10 : ok1(c == &amp;c2);</span></a>
+<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 10 : break;</span></a>
+<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 10 : case 2:</span></a>
+<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 10 : ok1(c == &amp;c3);</span></a>
+<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 10 : break;</span></a>
+<a name="125"><span class="lineNum"> 125 </span> : : }</a>
+<a name="126"><span class="lineNum"> 126 </span> :<span class="lineCov"> 30 : if (i &gt; 2)</span></a>
+<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 10 : break;</span></a>
+<a name="128"><span class="lineNum"> 128 </span> : : }</a>
+<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 10 : ok1(i == 3);</span></a>
+<a name="130"><span class="lineNum"> 130 </span> : : </a>
+<a name="131"><span class="lineNum"> 131 </span> : : /* Test list_for_each_safe, list_del and list_del_from. */</a>
+<a name="132"><span class="lineNum"> 132 </span> :<span class="lineCov"> 10 : i = 0;</span></a>
+<a name="133"><span class="lineNum"> 133 </span> :<span class="lineCov"> 30 : list_for_each_safe(&amp;parent.children, c, n, list) {</span></a>
+<a name="134"><span class="lineNum"> 134 </span> :<span class="lineCov"> 30 : switch (i++) {</span></a>
+<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 10 : case 0:</span></a>
+<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 10 : ok1(c == &amp;c1);</span></a>
+<a name="137"><span class="lineNum"> 137 </span> :<span class="lineCov"> 10 : list_del(ref(&amp;c-&gt;list, node_count));</span></a>
+<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 10 : ok1(node_count == 1);</span></a>
+<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 10 : break;</span></a>
+<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 10 : case 1:</span></a>
+<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 10 : ok1(c == &amp;c2);</span></a>
+<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 10 : list_del_from(ref(&amp;parent.children, parent_count),</span></a>
+<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 10 : ref(&amp;c-&gt;list, node_count));</span></a>
+<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 10 : ok1(node_count == 2);</span></a>
+<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 10 : break;</span></a>
+<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 10 : case 2:</span></a>
+<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 10 : ok1(c == &amp;c3);</span></a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 10 : list_del_from(ref(&amp;parent.children, parent_count),</span></a>
+<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 10 : ref(&amp;c-&gt;list, node_count));</span></a>
+<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 10 : ok1(node_count == 3);</span></a>
+<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 10 : break;</span></a>
+<a name="152"><span class="lineNum"> 152 </span> : : }</a>
+<a name="153"><span class="lineNum"> 153 </span> :<span class="lineCov"> 30 : ok1(list_check(ref(&amp;parent.children, parent_count), NULL));</span></a>
+<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 30 : if (i &gt; 2)</span></a>
+<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 10 : break;</span></a>
+<a name="156"><span class="lineNum"> 156 </span> : : }</a>
+<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 10 : ok1(i == 3);</span></a>
+<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 10 : ok1(parent_count == 19);</span></a>
+<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 10 : ok1(list_empty(ref(&amp;parent.children, parent_count)));</span></a>
+<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 10 : ok1(parent_count == 20);</span></a>
+<a name="161"><span class="lineNum"> 161 </span> : : </a>
+<a name="162"><span class="lineNum"> 162 </span> : : /* Test list_top/list_tail on empty list. */</a>
+<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 10 : ok1(list_top(ref(&amp;parent.children, parent_count), struct child, list) == NULL);</span></a>
+<a name="164"><span class="lineNum"> 164 </span> :<span class="lineCov"> 10 : ok1(parent_count == 21);</span></a>
+<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 10 : ok1(list_tail(ref(&amp;parent.children, parent_count), struct child, list) == NULL);</span></a>
+<a name="166"><span class="lineNum"> 166 </span> :<span class="lineCov"> 10 : ok1(parent_count == 22);</span></a>
+<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 10 : return exit_status();</span></a>
+<a name="168"><span class="lineNum"> 168 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/ccan/list/test/run.c.func-sort-c.html b/coverage-report/ccan/list/test/run.c.func-sort-c.html
index fbea70b..8a71672 100644
--- a/coverage-report/ccan/list/test/run.c.func-sort-c.html
+++ b/coverage-report/ccan/list/test/run.c.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">133</td>
- <td class="headerCovTableEntry">133</td>
+ <td class="headerCovTableEntry">210</td>
+ <td class="headerCovTableEntry">210</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -70,7 +70,7 @@
</tr>
<tr>
<td class="coverFn"><a href="run.c.gcov.html#18">main</a></td>
- <td class="coverFnHi">12</td>
+ <td class="coverFnHi">20</td>
</tr>
</table>
<br>
diff --git a/coverage-report/ccan/list/test/run.c.func.html b/coverage-report/ccan/list/test/run.c.func.html
index 5e2d756..4188f2b 100644
--- a/coverage-report/ccan/list/test/run.c.func.html
+++ b/coverage-report/ccan/list/test/run.c.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">133</td>
- <td class="headerCovTableEntry">133</td>
+ <td class="headerCovTableEntry">210</td>
+ <td class="headerCovTableEntry">210</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -70,7 +70,7 @@
</tr>
<tr>
<td class="coverFn"><a href="run.c.gcov.html#18">main</a></td>
- <td class="coverFnHi">12</td>
+ <td class="coverFnHi">20</td>
</tr>
</table>
<br>
diff --git a/coverage-report/ccan/list/test/run.c.gcov.html b/coverage-report/ccan/list/test/run.c.gcov.html
index 584d03e..3e51901 100644
--- a/coverage-report/ccan/list/test/run.c.gcov.html
+++ b/coverage-report/ccan/list/test/run.c.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">133</td>
- <td class="headerCovTableEntry">133</td>
+ <td class="headerCovTableEntry">210</td>
+ <td class="headerCovTableEntry">210</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -88,191 +88,293 @@
<a name="17"><span class="lineNum"> 17 </span> : : </a>
<a name="18"><span class="lineNum"> 18 </span> : : static LIST_HEAD(static_list);</a>
<a name="19"><span class="lineNum"> 19 </span> : : </a>
-<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 12 : int main(int argc, char *argv[])</span></a>
+<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 20 : int main(void)</span></a>
<a name="21"><span class="lineNum"> 21 </span> : : {</a>
<a name="22"><span class="lineNum"> 22 </span> : : struct parent parent;</a>
-<a name="23"><span class="lineNum"> 23 </span> : : struct child c1, c2, c3, *c, *n;</a>
+<a name="23"><span class="lineNum"> 23 </span> : : struct child c1, c2, c3, x1, *c, *n;</a>
<a name="24"><span class="lineNum"> 24 </span> : : unsigned int i;</a>
-<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 12 : struct list_head list = LIST_HEAD_INIT(list);</span></a>
+<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 20 : struct list_head list = LIST_HEAD_INIT(list);</span></a>
<a name="26"><span class="lineNum"> 26 </span> : : opaque_t *q, *nq;</a>
-<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 12 : struct list_head opaque_list = LIST_HEAD_INIT(opaque_list);</span></a>
-<a name="28"><span class="lineNum"> 28 </span> : : </a>
-<a name="29"><span class="lineNum"> 29 </span> : : (void)argc;</a>
-<a name="30"><span class="lineNum"> 30 </span> : : (void)argv;</a>
-<a name="31"><span class="lineNum"> 31 </span> : : </a>
-<a name="32"><span class="lineNum"> 32 </span> : : plan_tests(65);</a>
-<a name="33"><span class="lineNum"> 33 </span> : : /* Test LIST_HEAD, LIST_HEAD_INIT, list_empty and check_list */</a>
-<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 12 : ok1(list_empty(&amp;static_list));</span></a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 12 : ok1(list_check(&amp;static_list, NULL));</span></a>
-<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 12 : ok1(list_empty(&amp;list));</span></a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 12 : ok1(list_check(&amp;list, NULL));</span></a>
-<a name="38"><span class="lineNum"> 38 </span> : : </a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 12 : parent.num_children = 0;</span></a>
-<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 12 : list_head_init(&amp;parent.children);</span></a>
-<a name="41"><span class="lineNum"> 41 </span> : : /* Test list_head_init */</a>
-<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 12 : ok1(list_empty(&amp;parent.children));</span></a>
-<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 12 : ok1(list_check(&amp;parent.children, NULL));</span></a>
-<a name="44"><span class="lineNum"> 44 </span> : : </a>
-<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 12 : c2.name = &quot;c2&quot;;</span></a>
-<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 12 : list_add(&amp;parent.children, &amp;c2.list);</span></a>
-<a name="47"><span class="lineNum"> 47 </span> : : /* Test list_add and !list_empty. */</a>
-<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 12 : ok1(!list_empty(&amp;parent.children));</span></a>
-<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 12 : ok1(c2.list.next == &amp;parent.children.n);</span></a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 12 : ok1(c2.list.prev == &amp;parent.children.n);</span></a>
-<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 12 : ok1(parent.children.n.next == &amp;c2.list);</span></a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 12 : ok1(parent.children.n.prev == &amp;c2.list);</span></a>
-<a name="53"><span class="lineNum"> 53 </span> : : /* Test list_check */</a>
-<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 12 : ok1(list_check(&amp;parent.children, NULL));</span></a>
-<a name="55"><span class="lineNum"> 55 </span> : : </a>
-<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 12 : c1.name = &quot;c1&quot;;</span></a>
-<a name="57"><span class="lineNum"> 57 </span> :<span class="lineCov"> 12 : list_add(&amp;parent.children, &amp;c1.list);</span></a>
-<a name="58"><span class="lineNum"> 58 </span> : : /* Test list_add and !list_empty. */</a>
-<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 12 : ok1(!list_empty(&amp;parent.children));</span></a>
-<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 12 : ok1(c2.list.next == &amp;parent.children.n);</span></a>
-<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 12 : ok1(c2.list.prev == &amp;c1.list);</span></a>
-<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 12 : ok1(parent.children.n.next == &amp;c1.list);</span></a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 12 : ok1(parent.children.n.prev == &amp;c2.list);</span></a>
-<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 12 : ok1(c1.list.next == &amp;c2.list);</span></a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 12 : ok1(c1.list.prev == &amp;parent.children.n);</span></a>
-<a name="66"><span class="lineNum"> 66 </span> : : /* Test list_check */</a>
-<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 12 : ok1(list_check(&amp;parent.children, NULL));</span></a>
-<a name="68"><span class="lineNum"> 68 </span> : : </a>
-<a name="69"><span class="lineNum"> 69 </span> :<span class="lineCov"> 12 : c3.name = &quot;c3&quot;;</span></a>
-<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 12 : list_add_tail(&amp;parent.children, &amp;c3.list);</span></a>
-<a name="71"><span class="lineNum"> 71 </span> : : /* Test list_add_tail and !list_empty. */</a>
-<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 12 : ok1(!list_empty(&amp;parent.children));</span></a>
-<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 12 : ok1(parent.children.n.next == &amp;c1.list);</span></a>
-<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 12 : ok1(parent.children.n.prev == &amp;c3.list);</span></a>
-<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 12 : ok1(c1.list.next == &amp;c2.list);</span></a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 12 : ok1(c1.list.prev == &amp;parent.children.n);</span></a>
-<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 12 : ok1(c2.list.next == &amp;c3.list);</span></a>
-<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 12 : ok1(c2.list.prev == &amp;c1.list);</span></a>
-<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 12 : ok1(c3.list.next == &amp;parent.children.n);</span></a>
-<a name="80"><span class="lineNum"> 80 </span> :<span class="lineCov"> 12 : ok1(c3.list.prev == &amp;c2.list);</span></a>
-<a name="81"><span class="lineNum"> 81 </span> : : /* Test list_check */</a>
-<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 12 : ok1(list_check(&amp;parent.children, NULL));</span></a>
-<a name="83"><span class="lineNum"> 83 </span> : : </a>
-<a name="84"><span class="lineNum"> 84 </span> : : /* Test list_check_node */</a>
-<a name="85"><span class="lineNum"> 85 </span> :<span class="lineCov"> 12 : ok1(list_check_node(&amp;c1.list, NULL));</span></a>
-<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 12 : ok1(list_check_node(&amp;c2.list, NULL));</span></a>
-<a name="87"><span class="lineNum"> 87 </span> :<span class="lineCov"> 12 : ok1(list_check_node(&amp;c3.list, NULL));</span></a>
-<a name="88"><span class="lineNum"> 88 </span> : : </a>
-<a name="89"><span class="lineNum"> 89 </span> : : /* Test list_top */</a>
-<a name="90"><span class="lineNum"> 90 </span> :<span class="lineCov"> 12 : ok1(list_top(&amp;parent.children, struct child, list) == &amp;c1);</span></a>
-<a name="91"><span class="lineNum"> 91 </span> : : </a>
-<a name="92"><span class="lineNum"> 92 </span> : : /* Test list_tail */</a>
-<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 12 : ok1(list_tail(&amp;parent.children, struct child, list) == &amp;c3);</span></a>
+<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 20 : struct list_head opaque_list = LIST_HEAD_INIT(opaque_list);</span></a>
+<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 20 : LIST_HEAD(rev);</span></a>
+<a name="29"><span class="lineNum"> 29 </span> : : </a>
+<a name="30"><span class="lineNum"> 30 </span> : : plan_tests(92);</a>
+<a name="31"><span class="lineNum"> 31 </span> : : /* Test LIST_HEAD, LIST_HEAD_INIT, list_empty and check_list */</a>
+<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 20 : ok1(list_empty(&amp;static_list));</span></a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 20 : ok1(list_check(&amp;static_list, NULL));</span></a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 20 : ok1(list_empty(&amp;list));</span></a>
+<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 20 : ok1(list_check(&amp;list, NULL));</span></a>
+<a name="36"><span class="lineNum"> 36 </span> : : </a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 20 : parent.num_children = 0;</span></a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 20 : list_head_init(&amp;parent.children);</span></a>
+<a name="39"><span class="lineNum"> 39 </span> : : /* Test list_head_init */</a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 20 : ok1(list_empty(&amp;parent.children));</span></a>
+<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 20 : ok1(list_check(&amp;parent.children, NULL));</span></a>
+<a name="42"><span class="lineNum"> 42 </span> : : </a>
+<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 20 : c2.name = &quot;c2&quot;;</span></a>
+<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 20 : list_add(&amp;parent.children, &amp;c2.list);</span></a>
+<a name="45"><span class="lineNum"> 45 </span> : : /* Test list_add and !list_empty. */</a>
+<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 20 : ok1(!list_empty(&amp;parent.children));</span></a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 20 : ok1(c2.list.next == &amp;parent.children.n);</span></a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 20 : ok1(c2.list.prev == &amp;parent.children.n);</span></a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 20 : ok1(parent.children.n.next == &amp;c2.list);</span></a>
+<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 20 : ok1(parent.children.n.prev == &amp;c2.list);</span></a>
+<a name="51"><span class="lineNum"> 51 </span> : : /* Test list_check */</a>
+<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 20 : ok1(list_check(&amp;parent.children, NULL));</span></a>
+<a name="53"><span class="lineNum"> 53 </span> : : </a>
+<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 20 : c1.name = &quot;c1&quot;;</span></a>
+<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 20 : list_add(&amp;parent.children, &amp;c1.list);</span></a>
+<a name="56"><span class="lineNum"> 56 </span> : : /* Test list_add and !list_empty. */</a>
+<a name="57"><span class="lineNum"> 57 </span> :<span class="lineCov"> 20 : ok1(!list_empty(&amp;parent.children));</span></a>
+<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 20 : ok1(c2.list.next == &amp;parent.children.n);</span></a>
+<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 20 : ok1(c2.list.prev == &amp;c1.list);</span></a>
+<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 20 : ok1(parent.children.n.next == &amp;c1.list);</span></a>
+<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 20 : ok1(parent.children.n.prev == &amp;c2.list);</span></a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 20 : ok1(c1.list.next == &amp;c2.list);</span></a>
+<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 20 : ok1(c1.list.prev == &amp;parent.children.n);</span></a>
+<a name="64"><span class="lineNum"> 64 </span> : : /* Test list_check */</a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 20 : ok1(list_check(&amp;parent.children, NULL));</span></a>
+<a name="66"><span class="lineNum"> 66 </span> : : </a>
+<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 20 : c3.name = &quot;c3&quot;;</span></a>
+<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 20 : list_add_tail(&amp;parent.children, &amp;c3.list);</span></a>
+<a name="69"><span class="lineNum"> 69 </span> : : /* Test list_add_tail and !list_empty. */</a>
+<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 20 : ok1(!list_empty(&amp;parent.children));</span></a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 20 : ok1(parent.children.n.next == &amp;c1.list);</span></a>
+<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 20 : ok1(parent.children.n.prev == &amp;c3.list);</span></a>
+<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 20 : ok1(c1.list.next == &amp;c2.list);</span></a>
+<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 20 : ok1(c1.list.prev == &amp;parent.children.n);</span></a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 20 : ok1(c2.list.next == &amp;c3.list);</span></a>
+<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 20 : ok1(c2.list.prev == &amp;c1.list);</span></a>
+<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 20 : ok1(c3.list.next == &amp;parent.children.n);</span></a>
+<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 20 : ok1(c3.list.prev == &amp;c2.list);</span></a>
+<a name="79"><span class="lineNum"> 79 </span> : : /* Test list_check */</a>
+<a name="80"><span class="lineNum"> 80 </span> :<span class="lineCov"> 20 : ok1(list_check(&amp;parent.children, NULL));</span></a>
+<a name="81"><span class="lineNum"> 81 </span> : : </a>
+<a name="82"><span class="lineNum"> 82 </span> : : /* Test list_check_node */</a>
+<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 20 : ok1(list_check_node(&amp;c1.list, NULL));</span></a>
+<a name="84"><span class="lineNum"> 84 </span> :<span class="lineCov"> 20 : ok1(list_check_node(&amp;c2.list, NULL));</span></a>
+<a name="85"><span class="lineNum"> 85 </span> :<span class="lineCov"> 20 : ok1(list_check_node(&amp;c3.list, NULL));</span></a>
+<a name="86"><span class="lineNum"> 86 </span> : : </a>
+<a name="87"><span class="lineNum"> 87 </span> : : /* Test list_top */</a>
+<a name="88"><span class="lineNum"> 88 </span> :<span class="lineCov"> 20 : ok1(list_top(&amp;parent.children, struct child, list) == &amp;c1);</span></a>
+<a name="89"><span class="lineNum"> 89 </span> : : </a>
+<a name="90"><span class="lineNum"> 90 </span> : : /* Test list_pop */</a>
+<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 20 : ok1(list_pop(&amp;parent.children, struct child, list) == &amp;c1);</span></a>
+<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 20 : ok1(list_top(&amp;parent.children, struct child, list) == &amp;c2);</span></a>
+<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 20 : list_add(&amp;parent.children, &amp;c1.list);</span></a>
<a name="94"><span class="lineNum"> 94 </span> : : </a>
-<a name="95"><span class="lineNum"> 95 </span> : : /* Test list_for_each. */</a>
-<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 12 : i = 0;</span></a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 36 : list_for_each(&amp;parent.children, c, list) {</span></a>
-<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 36 : switch (i++) {</span></a>
-<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 12 : case 0:</span></a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 12 : ok1(c == &amp;c1);</span></a>
-<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 12 : break;</span></a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 12 : case 1:</span></a>
-<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 12 : ok1(c == &amp;c2);</span></a>
-<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 12 : break;</span></a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 12 : case 2:</span></a>
-<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 12 : ok1(c == &amp;c3);</span></a>
-<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 12 : break;</span></a>
-<a name="108"><span class="lineNum"> 108 </span> : : }</a>
-<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 36 : if (i &gt; 2)</span></a>
-<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 12 : break;</span></a>
-<a name="111"><span class="lineNum"> 111 </span> : : }</a>
-<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 12 : ok1(i == 3);</span></a>
-<a name="113"><span class="lineNum"> 113 </span> : : </a>
-<a name="114"><span class="lineNum"> 114 </span> : : /* Test list_for_each_rev. */</a>
-<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 12 : i = 0;</span></a>
-<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 36 : list_for_each_rev(&amp;parent.children, c, list) {</span></a>
-<a name="117"><span class="lineNum"> 117 </span> :<span class="lineCov"> 36 : switch (i++) {</span></a>
-<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 12 : case 0:</span></a>
-<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 12 : ok1(c == &amp;c3);</span></a>
-<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 12 : break;</span></a>
-<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 12 : case 1:</span></a>
-<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 12 : ok1(c == &amp;c2);</span></a>
-<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 12 : break;</span></a>
-<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 12 : case 2:</span></a>
-<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 12 : ok1(c == &amp;c1);</span></a>
-<a name="126"><span class="lineNum"> 126 </span> :<span class="lineCov"> 12 : break;</span></a>
-<a name="127"><span class="lineNum"> 127 </span> : : }</a>
-<a name="128"><span class="lineNum"> 128 </span> :<span class="lineCov"> 36 : if (i &gt; 2)</span></a>
-<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 12 : break;</span></a>
-<a name="130"><span class="lineNum"> 130 </span> : : }</a>
-<a name="131"><span class="lineNum"> 131 </span> :<span class="lineCov"> 12 : ok1(i == 3);</span></a>
-<a name="132"><span class="lineNum"> 132 </span> : : </a>
-<a name="133"><span class="lineNum"> 133 </span> : : /* Test list_for_each_safe, list_del and list_del_from. */</a>
-<a name="134"><span class="lineNum"> 134 </span> :<span class="lineCov"> 12 : i = 0;</span></a>
-<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 36 : list_for_each_safe(&amp;parent.children, c, n, list) {</span></a>
-<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 36 : switch (i++) {</span></a>
-<a name="137"><span class="lineNum"> 137 </span> :<span class="lineCov"> 12 : case 0:</span></a>
-<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 12 : ok1(c == &amp;c1); </span></a>
-<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 12 : list_del(&amp;c-&gt;list);</span></a>
-<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 12 : break;</span></a>
-<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 12 : case 1:</span></a>
-<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 12 : ok1(c == &amp;c2);</span></a>
-<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 12 : list_del_from(&amp;parent.children, &amp;c-&gt;list);</span></a>
-<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 12 : break;</span></a>
-<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 12 : case 2:</span></a>
-<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 12 : ok1(c == &amp;c3);</span></a>
-<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 12 : list_del_from(&amp;parent.children, &amp;c-&gt;list);</span></a>
-<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 12 : break;</span></a>
-<a name="149"><span class="lineNum"> 149 </span> : : }</a>
-<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 36 : ok1(list_check(&amp;parent.children, NULL));</span></a>
-<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 36 : if (i &gt; 2)</span></a>
-<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 12 : break;</span></a>
-<a name="153"><span class="lineNum"> 153 </span> : : }</a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 12 : ok1(i == 3);</span></a>
-<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 12 : ok1(list_empty(&amp;parent.children));</span></a>
+<a name="95"><span class="lineNum"> 95 </span> : : /* Test list_tail */</a>
+<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 20 : ok1(list_tail(&amp;parent.children, struct child, list) == &amp;c3);</span></a>
+<a name="97"><span class="lineNum"> 97 </span> : : </a>
+<a name="98"><span class="lineNum"> 98 </span> : : /* Test list_for_each. */</a>
+<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 20 : i = 0;</span></a>
+<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 60 : list_for_each(&amp;parent.children, c, list) {</span></a>
+<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 60 : switch (i++) {</span></a>
+<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 20 : case 0:</span></a>
+<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c1);</span></a>
+<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 20 : case 1:</span></a>
+<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c2);</span></a>
+<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 20 : case 2:</span></a>
+<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c3);</span></a>
+<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="111"><span class="lineNum"> 111 </span> : : }</a>
+<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 60 : if (i &gt; 2)</span></a>
+<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="114"><span class="lineNum"> 114 </span> : : }</a>
+<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 20 : ok1(i == 3);</span></a>
+<a name="116"><span class="lineNum"> 116 </span> : : </a>
+<a name="117"><span class="lineNum"> 117 </span> : : /* Test list_for_each_rev. */</a>
+<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 20 : i = 0;</span></a>
+<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 60 : list_for_each_rev(&amp;parent.children, c, list) {</span></a>
+<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 60 : switch (i++) {</span></a>
+<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 20 : case 0:</span></a>
+<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c3);</span></a>
+<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 20 : case 1:</span></a>
+<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c2);</span></a>
+<a name="126"><span class="lineNum"> 126 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 20 : case 2:</span></a>
+<a name="128"><span class="lineNum"> 128 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c1);</span></a>
+<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="130"><span class="lineNum"> 130 </span> : : }</a>
+<a name="131"><span class="lineNum"> 131 </span> :<span class="lineCov"> 60 : if (i &gt; 2)</span></a>
+<a name="132"><span class="lineNum"> 132 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="133"><span class="lineNum"> 133 </span> : : }</a>
+<a name="134"><span class="lineNum"> 134 </span> :<span class="lineCov"> 20 : ok1(i == 3);</span></a>
+<a name="135"><span class="lineNum"> 135 </span> : : </a>
+<a name="136"><span class="lineNum"> 136 </span> : : /* Test list_for_each_safe, list_del and list_del_from. */</a>
+<a name="137"><span class="lineNum"> 137 </span> :<span class="lineCov"> 20 : i = 0;</span></a>
+<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 60 : list_for_each_safe(&amp;parent.children, c, n, list) {</span></a>
+<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 60 : switch (i++) {</span></a>
+<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 20 : case 0:</span></a>
+<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c1); </span></a>
+<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 20 : list_del(&amp;c-&gt;list);</span></a>
+<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 20 : case 1:</span></a>
+<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c2);</span></a>
+<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 20 : list_del_from(&amp;parent.children, &amp;c-&gt;list);</span></a>
+<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 20 : case 2:</span></a>
+<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c3);</span></a>
+<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 20 : list_del_from(&amp;parent.children, &amp;c-&gt;list);</span></a>
+<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="152"><span class="lineNum"> 152 </span> : : }</a>
+<a name="153"><span class="lineNum"> 153 </span> : : </a>
+<a name="154"><span class="lineNum"> 154 </span> : : /* prepare for list_for_each_rev_safe test */</a>
+<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 60 : list_add(&amp;rev, &amp;c-&gt;list);</span></a>
<a name="156"><span class="lineNum"> 156 </span> : : </a>
-<a name="157"><span class="lineNum"> 157 </span> : : /* Test list_for_each_off. */</a>
-<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 12 : list_add_tail(&amp;opaque_list,</span></a>
-<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 12 : (struct list_node *)create_opaque_blob());</span></a>
-<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 12 : list_add_tail(&amp;opaque_list,</span></a>
-<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 12 : (struct list_node *)create_opaque_blob());</span></a>
-<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 12 : list_add_tail(&amp;opaque_list,</span></a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 12 : (struct list_node *)create_opaque_blob());</span></a>
-<a name="164"><span class="lineNum"> 164 </span> : : </a>
-<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 12 : i = 0;</span></a>
-<a name="166"><span class="lineNum"> 166 </span> : : </a>
-<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 48 : list_for_each_off(&amp;opaque_list, q, 0) {</span></a>
-<a name="168"><span class="lineNum"> 168 </span> :<span class="lineCov"> 36 : i++;</span></a>
-<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 36 : ok1(if_blobs_know_the_secret(q));</span></a>
-<a name="170"><span class="lineNum"> 170 </span> : : }</a>
-<a name="171"><span class="lineNum"> 171 </span> :<span class="lineCov"> 12 : ok1(i == 3);</span></a>
-<a name="172"><span class="lineNum"> 172 </span> : : </a>
-<a name="173"><span class="lineNum"> 173 </span> : : /* Test list_for_each_safe_off, list_del_off and list_del_from_off. */</a>
-<a name="174"><span class="lineNum"> 174 </span> :<span class="lineCov"> 12 : i = 0;</span></a>
-<a name="175"><span class="lineNum"> 175 </span> :<span class="lineCov"> 36 : list_for_each_safe_off(&amp;opaque_list, q, nq, 0) {</span></a>
-<a name="176"><span class="lineNum"> 176 </span> :<span class="lineCov"> 36 : switch (i++) {</span></a>
-<a name="177"><span class="lineNum"> 177 </span> :<span class="lineCov"> 12 : case 0:</span></a>
-<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 12 : ok1(if_blobs_know_the_secret(q));</span></a>
-<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 12 : list_del_off(q, 0);</span></a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 12 : destroy_opaque_blob(q);</span></a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 12 : break;</span></a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 12 : case 1:</span></a>
-<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 12 : ok1(if_blobs_know_the_secret(q));</span></a>
-<a name="184"><span class="lineNum"> 184 </span> :<span class="lineCov"> 12 : list_del_from_off(&amp;opaque_list, q, 0);</span></a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 12 : destroy_opaque_blob(q);</span></a>
-<a name="186"><span class="lineNum"> 186 </span> :<span class="lineCov"> 12 : break;</span></a>
-<a name="187"><span class="lineNum"> 187 </span> :<span class="lineCov"> 12 : case 2:</span></a>
-<a name="188"><span class="lineNum"> 188 </span> :<span class="lineCov"> 12 : ok1(c == &amp;c3);</span></a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 12 : list_del_from_off(&amp;opaque_list, q, 0);</span></a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineCov"> 12 : destroy_opaque_blob(q);</span></a>
-<a name="191"><span class="lineNum"> 191 </span> :<span class="lineCov"> 12 : break;</span></a>
-<a name="192"><span class="lineNum"> 192 </span> : : }</a>
-<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 36 : ok1(list_check(&amp;opaque_list, NULL));</span></a>
-<a name="194"><span class="lineNum"> 194 </span> :<span class="lineCov"> 36 : if (i &gt; 2)</span></a>
-<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 12 : break;</span></a>
-<a name="196"><span class="lineNum"> 196 </span> : : }</a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 12 : ok1(i == 3);</span></a>
-<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 12 : ok1(list_empty(&amp;opaque_list));</span></a>
-<a name="199"><span class="lineNum"> 199 </span> : : </a>
-<a name="200"><span class="lineNum"> 200 </span> : : /* Test list_top/list_tail on empty list. */</a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 12 : ok1(list_top(&amp;parent.children, struct child, list) == NULL);</span></a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineCov"> 12 : ok1(list_tail(&amp;parent.children, struct child, list) == NULL);</span></a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 12 : return exit_status();</span></a>
-<a name="204"><span class="lineNum"> 204 </span> : : }</a>
+<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 60 : ok1(list_check(&amp;parent.children, NULL));</span></a>
+<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 60 : if (i &gt; 2)</span></a>
+<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="160"><span class="lineNum"> 160 </span> : : }</a>
+<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 20 : ok1(i == 3);</span></a>
+<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 20 : ok1(list_empty(&amp;parent.children));</span></a>
+<a name="163"><span class="lineNum"> 163 </span> : : </a>
+<a name="164"><span class="lineNum"> 164 </span> : : /* Test list_for_each_rev_safe, list_del and list_del_from. */</a>
+<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 20 : i = 0;</span></a>
+<a name="166"><span class="lineNum"> 166 </span> :<span class="lineCov"> 60 : list_for_each_rev_safe(&amp;rev, c, n, list) {</span></a>
+<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 60 : switch (i++) {</span></a>
+<a name="168"><span class="lineNum"> 168 </span> :<span class="lineCov"> 20 : case 0:</span></a>
+<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c1);</span></a>
+<a name="170"><span class="lineNum"> 170 </span> :<span class="lineCov"> 20 : list_del(&amp;c-&gt;list);</span></a>
+<a name="171"><span class="lineNum"> 171 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="172"><span class="lineNum"> 172 </span> :<span class="lineCov"> 20 : case 1:</span></a>
+<a name="173"><span class="lineNum"> 173 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c2);</span></a>
+<a name="174"><span class="lineNum"> 174 </span> :<span class="lineCov"> 20 : list_del_from(&amp;rev, &amp;c-&gt;list);</span></a>
+<a name="175"><span class="lineNum"> 175 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="176"><span class="lineNum"> 176 </span> :<span class="lineCov"> 20 : case 2:</span></a>
+<a name="177"><span class="lineNum"> 177 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c3);</span></a>
+<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 20 : list_del_from(&amp;rev, &amp;c-&gt;list);</span></a>
+<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="180"><span class="lineNum"> 180 </span> : : }</a>
+<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 60 : ok1(list_check(&amp;rev, NULL));</span></a>
+<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 60 : if (i &gt; 2)</span></a>
+<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="184"><span class="lineNum"> 184 </span> : : }</a>
+<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 20 : ok1(i == 3);</span></a>
+<a name="186"><span class="lineNum"> 186 </span> :<span class="lineCov"> 20 : ok1(list_empty(&amp;rev));</span></a>
+<a name="187"><span class="lineNum"> 187 </span> : : </a>
+<a name="188"><span class="lineNum"> 188 </span> : : /* Test list_node_init: safe to list_del after this. */</a>
+<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 20 : list_node_init(&amp;c-&gt;list);</span></a>
+<a name="190"><span class="lineNum"> 190 </span> :<span class="lineCov"> 20 : list_del(&amp;c-&gt;list);</span></a>
+<a name="191"><span class="lineNum"> 191 </span> : : </a>
+<a name="192"><span class="lineNum"> 192 </span> : : /* Test list_del_init */</a>
+<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 20 : list_add(&amp;parent.children, &amp;c-&gt;list);</span></a>
+<a name="194"><span class="lineNum"> 194 </span> :<span class="lineCov"> 20 : ok1(!list_empty(&amp;parent.children));</span></a>
+<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 20 : list_del_init(&amp;c-&gt;list);</span></a>
+<a name="196"><span class="lineNum"> 196 </span> :<span class="lineCov"> 20 : ok1(list_empty(&amp;parent.children));</span></a>
+<a name="197"><span class="lineNum"> 197 </span> : : /* We can call this as many times as we like. */</a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 20 : list_del_init(&amp;c-&gt;list);</span></a>
+<a name="199"><span class="lineNum"> 199 </span> :<span class="lineCov"> 20 : list_del_init(&amp;c-&gt;list);</span></a>
+<a name="200"><span class="lineNum"> 200 </span> : : </a>
+<a name="201"><span class="lineNum"> 201 </span> : : /* Test list_for_each_off. */</a>
+<a name="202"><span class="lineNum"> 202 </span> :<span class="lineCov"> 20 : list_add_tail(&amp;opaque_list,</span></a>
+<a name="203"><span class="lineNum"> 203 </span> : : (struct list_node *)create_opaque_blob());</a>
+<a name="204"><span class="lineNum"> 204 </span> :<span class="lineCov"> 20 : list_add_tail(&amp;opaque_list,</span></a>
+<a name="205"><span class="lineNum"> 205 </span> : : (struct list_node *)create_opaque_blob());</a>
+<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 20 : list_add_tail(&amp;opaque_list,</span></a>
+<a name="207"><span class="lineNum"> 207 </span> : : (struct list_node *)create_opaque_blob());</a>
+<a name="208"><span class="lineNum"> 208 </span> : : </a>
+<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 20 : i = 0;</span></a>
+<a name="210"><span class="lineNum"> 210 </span> : : </a>
+<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 80 : list_for_each_off(&amp;opaque_list, q, 0) {</span></a>
+<a name="212"><span class="lineNum"> 212 </span> :<span class="lineCov"> 60 : i++;</span></a>
+<a name="213"><span class="lineNum"> 213 </span> :<span class="lineCov"> 60 : ok1(if_blobs_know_the_secret(q));</span></a>
+<a name="214"><span class="lineNum"> 214 </span> : : }</a>
+<a name="215"><span class="lineNum"> 215 </span> :<span class="lineCov"> 20 : ok1(i == 3);</span></a>
+<a name="216"><span class="lineNum"> 216 </span> : : </a>
+<a name="217"><span class="lineNum"> 217 </span> : : /* Test list_for_each_safe_off, list_del_off and list_del_from_off. */</a>
+<a name="218"><span class="lineNum"> 218 </span> :<span class="lineCov"> 20 : i = 0;</span></a>
+<a name="219"><span class="lineNum"> 219 </span> :<span class="lineCov"> 60 : list_for_each_safe_off(&amp;opaque_list, q, nq, 0) {</span></a>
+<a name="220"><span class="lineNum"> 220 </span> :<span class="lineCov"> 60 : switch (i++) {</span></a>
+<a name="221"><span class="lineNum"> 221 </span> :<span class="lineCov"> 20 : case 0:</span></a>
+<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 20 : ok1(if_blobs_know_the_secret(q));</span></a>
+<a name="223"><span class="lineNum"> 223 </span> :<span class="lineCov"> 20 : list_del_off(q, 0);</span></a>
+<a name="224"><span class="lineNum"> 224 </span> :<span class="lineCov"> 20 : destroy_opaque_blob(q);</span></a>
+<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 20 : case 1:</span></a>
+<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 20 : ok1(if_blobs_know_the_secret(q));</span></a>
+<a name="228"><span class="lineNum"> 228 </span> :<span class="lineCov"> 20 : list_del_from_off(&amp;opaque_list, q, 0);</span></a>
+<a name="229"><span class="lineNum"> 229 </span> :<span class="lineCov"> 20 : destroy_opaque_blob(q);</span></a>
+<a name="230"><span class="lineNum"> 230 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="231"><span class="lineNum"> 231 </span> :<span class="lineCov"> 20 : case 2:</span></a>
+<a name="232"><span class="lineNum"> 232 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c3);</span></a>
+<a name="233"><span class="lineNum"> 233 </span> :<span class="lineCov"> 20 : list_del_from_off(&amp;opaque_list, q, 0);</span></a>
+<a name="234"><span class="lineNum"> 234 </span> :<span class="lineCov"> 20 : destroy_opaque_blob(q);</span></a>
+<a name="235"><span class="lineNum"> 235 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="236"><span class="lineNum"> 236 </span> : : }</a>
+<a name="237"><span class="lineNum"> 237 </span> :<span class="lineCov"> 60 : ok1(list_check(&amp;opaque_list, NULL));</span></a>
+<a name="238"><span class="lineNum"> 238 </span> :<span class="lineCov"> 60 : if (i &gt; 2)</span></a>
+<a name="239"><span class="lineNum"> 239 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="240"><span class="lineNum"> 240 </span> : : }</a>
+<a name="241"><span class="lineNum"> 241 </span> :<span class="lineCov"> 20 : ok1(i == 3);</span></a>
+<a name="242"><span class="lineNum"> 242 </span> :<span class="lineCov"> 20 : ok1(list_empty(&amp;opaque_list));</span></a>
+<a name="243"><span class="lineNum"> 243 </span> : : </a>
+<a name="244"><span class="lineNum"> 244 </span> : : /* Test list_top/list_tail/list_pop on empty list. */</a>
+<a name="245"><span class="lineNum"> 245 </span> :<span class="lineCov"> 20 : ok1(list_top(&amp;parent.children, struct child, list) == NULL);</span></a>
+<a name="246"><span class="lineNum"> 246 </span> :<span class="lineCov"> 20 : ok1(list_tail(&amp;parent.children, struct child, list) == NULL);</span></a>
+<a name="247"><span class="lineNum"> 247 </span> :<span class="lineCov"> 20 : ok1(list_pop(&amp;parent.children, struct child, list) == NULL);</span></a>
+<a name="248"><span class="lineNum"> 248 </span> : : </a>
+<a name="249"><span class="lineNum"> 249 </span> : : /* Test list_add_before and list_add_after */</a>
+<a name="250"><span class="lineNum"> 250 </span> :<span class="lineCov"> 20 : list_add(&amp;parent.children, &amp;c1.list);</span></a>
+<a name="251"><span class="lineNum"> 251 </span> :<span class="lineCov"> 20 : list_add_after(&amp;parent.children, &amp;c1.list, &amp;c2.list);</span></a>
+<a name="252"><span class="lineNum"> 252 </span> :<span class="lineCov"> 20 : ok1(list_check(&amp;parent.children, &quot;list_add_after&quot;));</span></a>
+<a name="253"><span class="lineNum"> 253 </span> : : </a>
+<a name="254"><span class="lineNum"> 254 </span> :<span class="lineCov"> 20 : i = 0;</span></a>
+<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 60 : list_for_each(&amp;parent.children, c, list) {</span></a>
+<a name="256"><span class="lineNum"> 256 </span> :<span class="lineCov"> 40 : switch (i++) {</span></a>
+<a name="257"><span class="lineNum"> 257 </span> :<span class="lineCov"> 20 : case 0:</span></a>
+<a name="258"><span class="lineNum"> 258 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c1);</span></a>
+<a name="259"><span class="lineNum"> 259 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="260"><span class="lineNum"> 260 </span> :<span class="lineCov"> 20 : case 1:</span></a>
+<a name="261"><span class="lineNum"> 261 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c2);</span></a>
+<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="263"><span class="lineNum"> 263 </span> : : }</a>
+<a name="264"><span class="lineNum"> 264 </span> :<span class="lineCov"> 40 : }</span></a>
+<a name="265"><span class="lineNum"> 265 </span> :<span class="lineCov"> 20 : ok1(i == 2);</span></a>
+<a name="266"><span class="lineNum"> 266 </span> : : </a>
+<a name="267"><span class="lineNum"> 267 </span> :<span class="lineCov"> 20 : list_add_before(&amp;parent.children, &amp;c2.list, &amp;c3.list);</span></a>
+<a name="268"><span class="lineNum"> 268 </span> :<span class="lineCov"> 20 : ok1(list_check(&amp;parent.children, &quot;list_add_before&quot;));</span></a>
+<a name="269"><span class="lineNum"> 269 </span> : : </a>
+<a name="270"><span class="lineNum"> 270 </span> :<span class="lineCov"> 20 : i = 0;</span></a>
+<a name="271"><span class="lineNum"> 271 </span> :<span class="lineCov"> 80 : list_for_each(&amp;parent.children, c, list) {</span></a>
+<a name="272"><span class="lineNum"> 272 </span> :<span class="lineCov"> 60 : switch (i++) {</span></a>
+<a name="273"><span class="lineNum"> 273 </span> :<span class="lineCov"> 20 : case 0:</span></a>
+<a name="274"><span class="lineNum"> 274 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c1);</span></a>
+<a name="275"><span class="lineNum"> 275 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="276"><span class="lineNum"> 276 </span> :<span class="lineCov"> 20 : case 1:</span></a>
+<a name="277"><span class="lineNum"> 277 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c3);</span></a>
+<a name="278"><span class="lineNum"> 278 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="279"><span class="lineNum"> 279 </span> :<span class="lineCov"> 20 : case 2:</span></a>
+<a name="280"><span class="lineNum"> 280 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c2);</span></a>
+<a name="281"><span class="lineNum"> 281 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="282"><span class="lineNum"> 282 </span> : : }</a>
+<a name="283"><span class="lineNum"> 283 </span> :<span class="lineCov"> 60 : }</span></a>
+<a name="284"><span class="lineNum"> 284 </span> :<span class="lineCov"> 20 : ok1(i == 3);</span></a>
+<a name="285"><span class="lineNum"> 285 </span> : : </a>
+<a name="286"><span class="lineNum"> 286 </span> : : /* test list_swap */</a>
+<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 20 : list_swap(&amp;c3.list, &amp;x1.list);</span></a>
+<a name="288"><span class="lineNum"> 288 </span> :<span class="lineCov"> 20 : ok1(list_check(&amp;parent.children, &quot;list_swap&quot;));</span></a>
+<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 20 : i = 0;</span></a>
+<a name="290"><span class="lineNum"> 290 </span> :<span class="lineCov"> 80 : list_for_each(&amp;parent.children, c, list) {</span></a>
+<a name="291"><span class="lineNum"> 291 </span> :<span class="lineCov"> 60 : switch (i++) {</span></a>
+<a name="292"><span class="lineNum"> 292 </span> :<span class="lineCov"> 20 : case 0:</span></a>
+<a name="293"><span class="lineNum"> 293 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c1);</span></a>
+<a name="294"><span class="lineNum"> 294 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="295"><span class="lineNum"> 295 </span> :<span class="lineCov"> 20 : case 1:</span></a>
+<a name="296"><span class="lineNum"> 296 </span> :<span class="lineCov"> 20 : ok1(c == &amp;x1);</span></a>
+<a name="297"><span class="lineNum"> 297 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="298"><span class="lineNum"> 298 </span> :<span class="lineCov"> 20 : case 2:</span></a>
+<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 20 : ok1(c == &amp;c2);</span></a>
+<a name="300"><span class="lineNum"> 300 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="301"><span class="lineNum"> 301 </span> : : }</a>
+<a name="302"><span class="lineNum"> 302 </span> :<span class="lineCov"> 60 : }</span></a>
+<a name="303"><span class="lineNum"> 303 </span> :<span class="lineCov"> 20 : ok1(i == 3);</span></a>
+<a name="304"><span class="lineNum"> 304 </span> : : </a>
+<a name="305"><span class="lineNum"> 305 </span> :<span class="lineCov"> 20 : return exit_status();</span></a>
+<a name="306"><span class="lineNum"> 306 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/ccan/short_types/test/index-sort-b.html b/coverage-report/ccan/short_types/test/index-sort-b.html
index f39368e..78e1f1c 100644
--- a/coverage-report/ccan/short_types/test/index-sort-b.html
+++ b/coverage-report/ccan/short_types/test/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/ccan/short_types/test/index-sort-f.html b/coverage-report/ccan/short_types/test/index-sort-f.html
index aad13a6..5349192 100644
--- a/coverage-report/ccan/short_types/test/index-sort-f.html
+++ b/coverage-report/ccan/short_types/test/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/ccan/short_types/test/index-sort-l.html b/coverage-report/ccan/short_types/test/index-sort-l.html
index 075d174..926320f 100644
--- a/coverage-report/ccan/short_types/test/index-sort-l.html
+++ b/coverage-report/ccan/short_types/test/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/ccan/short_types/test/index.html b/coverage-report/ccan/short_types/test/index.html
index aa707d1..79e0ed4 100644
--- a/coverage-report/ccan/short_types/test/index.html
+++ b/coverage-report/ccan/short_types/test/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/ccan/short_types/test/run-endian.c.func-sort-c.html b/coverage-report/ccan/short_types/test/run-endian.c.func-sort-c.html
index e08981b..c6527ed 100644
--- a/coverage-report/ccan/short_types/test/run-endian.c.func-sort-c.html
+++ b/coverage-report/ccan/short_types/test/run-endian.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/short_types/test/run-endian.c.func.html b/coverage-report/ccan/short_types/test/run-endian.c.func.html
index a1eb6a0..660d54a 100644
--- a/coverage-report/ccan/short_types/test/run-endian.c.func.html
+++ b/coverage-report/ccan/short_types/test/run-endian.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/short_types/test/run-endian.c.gcov.html b/coverage-report/ccan/short_types/test/run-endian.c.gcov.html
index 93dd7eb..9ce7a02 100644
--- a/coverage-report/ccan/short_types/test/run-endian.c.gcov.html
+++ b/coverage-report/ccan/short_types/test/run-endian.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -75,7 +75,7 @@
<a name="4"><span class="lineNum"> 4 </span> : : #include &lt;stdlib.h&gt;</a>
<a name="5"><span class="lineNum"> 5 </span> : : #include &lt;err.h&gt;</a>
<a name="6"><span class="lineNum"> 6 </span> : : </a>
-<a name="7"><span class="lineNum"> 7 </span> :<span class="lineCov"> 3 : int __attribute__((const)) main(void)</span></a>
+<a name="7"><span class="lineNum"> 7 </span> :<span class="lineCov"> 3 : int main(void)</span></a>
<a name="8"><span class="lineNum"> 8 </span> : : {</a>
<a name="9"><span class="lineNum"> 9 </span> : : plan_tests(6);</a>
<a name="10"><span class="lineNum"> 10 </span> : : </a>
diff --git a/coverage-report/ccan/short_types/test/run.c.func-sort-c.html b/coverage-report/ccan/short_types/test/run.c.func-sort-c.html
index 47b24e3..010274a 100644
--- a/coverage-report/ccan/short_types/test/run.c.func-sort-c.html
+++ b/coverage-report/ccan/short_types/test/run.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/short_types/test/run.c.func.html b/coverage-report/ccan/short_types/test/run.c.func.html
index fb5deac..dfe0ab2 100644
--- a/coverage-report/ccan/short_types/test/run.c.func.html
+++ b/coverage-report/ccan/short_types/test/run.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/short_types/test/run.c.gcov.html b/coverage-report/ccan/short_types/test/run.c.gcov.html
index 00903fd..d8f8faf 100644
--- a/coverage-report/ccan/short_types/test/run.c.gcov.html
+++ b/coverage-report/ccan/short_types/test/run.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -74,7 +74,7 @@
<a name="3"><span class="lineNum"> 3 </span> : : #include &lt;stdlib.h&gt;</a>
<a name="4"><span class="lineNum"> 4 </span> : : #include &lt;err.h&gt;</a>
<a name="5"><span class="lineNum"> 5 </span> : : </a>
-<a name="6"><span class="lineNum"> 6 </span> :<span class="lineCov"> 3 : int __attribute__((const)) main(void)</span></a>
+<a name="6"><span class="lineNum"> 6 </span> :<span class="lineCov"> 3 : int main(void)</span></a>
<a name="7"><span class="lineNum"> 7 </span> : : {</a>
<a name="8"><span class="lineNum"> 8 </span> : : plan_tests(16);</a>
<a name="9"><span class="lineNum"> 9 </span> : : </a>
diff --git a/coverage-report/ccan/str/index-sort-b.html b/coverage-report/ccan/str/index-sort-b.html
index 7b10b8a..bdd201c 100644
--- a/coverage-report/ccan/str/index-sort-b.html
+++ b/coverage-report/ccan/str/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/ccan/str/index-sort-f.html b/coverage-report/ccan/str/index-sort-f.html
index 95112cc..734882f 100644
--- a/coverage-report/ccan/str/index-sort-f.html
+++ b/coverage-report/ccan/str/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/ccan/str/index-sort-l.html b/coverage-report/ccan/str/index-sort-l.html
index 84cc534..9be1718 100644
--- a/coverage-report/ccan/str/index-sort-l.html
+++ b/coverage-report/ccan/str/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/ccan/str/index.html b/coverage-report/ccan/str/index.html
index 330d637..9d5b491 100644
--- a/coverage-report/ccan/str/index.html
+++ b/coverage-report/ccan/str/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/ccan/str/str.c.func-sort-c.html b/coverage-report/ccan/str/str.c.func-sort-c.html
index 288bec0..c99b77d 100644
--- a/coverage-report/ccan/str/str.c.func-sort-c.html
+++ b/coverage-report/ccan/str/str.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/str/str.c.func.html b/coverage-report/ccan/str/str.c.func.html
index 17c43a3..0eb0348 100644
--- a/coverage-report/ccan/str/str.c.func.html
+++ b/coverage-report/ccan/str/str.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/str/str.c.gcov.html b/coverage-report/ccan/str/str.c.gcov.html
index 8760c77..a398e40 100644
--- a/coverage-report/ccan/str/str.c.gcov.html
+++ b/coverage-report/ccan/str/str.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/str/str.h.func-sort-c.html b/coverage-report/ccan/str/str.h.func-sort-c.html
index a7168ca..d081a73 100644
--- a/coverage-report/ccan/str/str.h.func-sort-c.html
+++ b/coverage-report/ccan/str/str.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/str/str.h.func.html b/coverage-report/ccan/str/str.h.func.html
index a5f92e8..31d8164 100644
--- a/coverage-report/ccan/str/str.h.func.html
+++ b/coverage-report/ccan/str/str.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/str/str.h.gcov.html b/coverage-report/ccan/str/str.h.gcov.html
index 1e4e4c0..3b4532d 100644
--- a/coverage-report/ccan/str/str.h.gcov.html
+++ b/coverage-report/ccan/str/str.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -165,30 +165,44 @@
<a name="94"><span class="lineNum"> 94 </span> : : #if HAVE_TYPEOF</a>
<a name="95"><span class="lineNum"> 95 </span> : : /* Only a simple type can have 0 assigned, so test that. */</a>
<a name="96"><span class="lineNum"> 96 </span> : : #define STR_MAX_CHARS_TCHECK_(type_or_expr) \</a>
-<a name="97"><span class="lineNum"> 97 </span> : : ({ typeof(type_or_expr) x = 0; (void)x; 0; })</a>
+<a name="97"><span class="lineNum"> 97 </span> : : (sizeof(({ typeof(type_or_expr) x = 0; x; }))*0)</a>
<a name="98"><span class="lineNum"> 98 </span> : : #else</a>
<a name="99"><span class="lineNum"> 99 </span> : : #define STR_MAX_CHARS_TCHECK_(type_or_expr) 0</a>
<a name="100"><span class="lineNum"> 100 </span> : : #endif</a>
<a name="101"><span class="lineNum"> 101 </span> : : </a>
-<a name="102"><span class="lineNum"> 102 </span> : : /* These checks force things out of line, hence they are under DEBUG. */</a>
-<a name="103"><span class="lineNum"> 103 </span> : : #ifdef CCAN_STR_DEBUG</a>
-<a name="104"><span class="lineNum"> 104 </span> : : #if HAVE_TYPEOF</a>
-<a name="105"><span class="lineNum"> 105 </span> : : /* With GNU magic, we can make const-respecting standard string functions. */</a>
-<a name="106"><span class="lineNum"> 106 </span> : : #undef strstr</a>
-<a name="107"><span class="lineNum"> 107 </span> : : #undef strchr</a>
-<a name="108"><span class="lineNum"> 108 </span> : : #undef strrchr</a>
-<a name="109"><span class="lineNum"> 109 </span> : : </a>
-<a name="110"><span class="lineNum"> 110 </span> : : /* + 0 is needed to decay array into pointer. */</a>
-<a name="111"><span class="lineNum"> 111 </span> : : #define strstr(haystack, needle) \</a>
-<a name="112"><span class="lineNum"> 112 </span> : : ((typeof((haystack) + 0))str_strstr((haystack), (needle)))</a>
-<a name="113"><span class="lineNum"> 113 </span> : : #define strchr(haystack, c) \</a>
-<a name="114"><span class="lineNum"> 114 </span> : : ((typeof((haystack) + 0))str_strchr((haystack), (c)))</a>
-<a name="115"><span class="lineNum"> 115 </span> : : #define strrchr(haystack, c) \</a>
-<a name="116"><span class="lineNum"> 116 </span> : : ((typeof((haystack) + 0))str_strrchr((haystack), (c)))</a>
-<a name="117"><span class="lineNum"> 117 </span> : : #endif</a>
-<a name="118"><span class="lineNum"> 118 </span> : : #endif /* CCAN_STR_DEBUG */</a>
-<a name="119"><span class="lineNum"> 119 </span> : : </a>
-<a name="120"><span class="lineNum"> 120 </span> : : #endif /* CCAN_STR_H */</a>
+<a name="102"><span class="lineNum"> 102 </span> : : #include &lt;ccan/str/str_debug.h&gt;</a>
+<a name="103"><span class="lineNum"> 103 </span> : : </a>
+<a name="104"><span class="lineNum"> 104 </span> : : /* These checks force things out of line, hence they are under DEBUG. */</a>
+<a name="105"><span class="lineNum"> 105 </span> : : #ifdef CCAN_STR_DEBUG</a>
+<a name="106"><span class="lineNum"> 106 </span> : : #include &lt;ccan/build_assert/build_assert.h&gt;</a>
+<a name="107"><span class="lineNum"> 107 </span> : : </a>
+<a name="108"><span class="lineNum"> 108 </span> : : /* You can use a char if char is unsigned. */</a>
+<a name="109"><span class="lineNum"> 109 </span> : : #if HAVE_BUILTIN_TYPES_COMPATIBLE_P &amp;&amp; HAVE_TYPEOF</a>
+<a name="110"><span class="lineNum"> 110 </span> : : #define str_check_arg_(i) \</a>
+<a name="111"><span class="lineNum"> 111 </span> : : ((i) + BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(typeof(i), \</a>
+<a name="112"><span class="lineNum"> 112 </span> : : char) \</a>
+<a name="113"><span class="lineNum"> 113 </span> : : || (char)255 &gt; 0))</a>
+<a name="114"><span class="lineNum"> 114 </span> : : #else</a>
+<a name="115"><span class="lineNum"> 115 </span> : : #define str_check_arg_(i) (i)</a>
+<a name="116"><span class="lineNum"> 116 </span> : : #endif</a>
+<a name="117"><span class="lineNum"> 117 </span> : : </a>
+<a name="118"><span class="lineNum"> 118 </span> : : #if HAVE_TYPEOF</a>
+<a name="119"><span class="lineNum"> 119 </span> : : /* With GNU magic, we can make const-respecting standard string functions. */</a>
+<a name="120"><span class="lineNum"> 120 </span> : : #undef strstr</a>
+<a name="121"><span class="lineNum"> 121 </span> : : #undef strchr</a>
+<a name="122"><span class="lineNum"> 122 </span> : : #undef strrchr</a>
+<a name="123"><span class="lineNum"> 123 </span> : : </a>
+<a name="124"><span class="lineNum"> 124 </span> : : /* + 0 is needed to decay array into pointer. */</a>
+<a name="125"><span class="lineNum"> 125 </span> : : #define strstr(haystack, needle) \</a>
+<a name="126"><span class="lineNum"> 126 </span> : : ((typeof((haystack) + 0))str_strstr((haystack), (needle)))</a>
+<a name="127"><span class="lineNum"> 127 </span> : : #define strchr(haystack, c) \</a>
+<a name="128"><span class="lineNum"> 128 </span> : : ((typeof((haystack) + 0))str_strchr((haystack), (c)))</a>
+<a name="129"><span class="lineNum"> 129 </span> : : #define strrchr(haystack, c) \</a>
+<a name="130"><span class="lineNum"> 130 </span> : : ((typeof((haystack) + 0))str_strrchr((haystack), (c)))</a>
+<a name="131"><span class="lineNum"> 131 </span> : : #endif</a>
+<a name="132"><span class="lineNum"> 132 </span> : : #endif /* CCAN_STR_DEBUG */</a>
+<a name="133"><span class="lineNum"> 133 </span> : : </a>
+<a name="134"><span class="lineNum"> 134 </span> : : #endif /* CCAN_STR_H */</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/ccan/str/test/index-sort-b.html b/coverage-report/ccan/str/test/index-sort-b.html
index 509e9fc..4234dce 100644
--- a/coverage-report/ccan/str/test/index-sort-b.html
+++ b/coverage-report/ccan/str/test/index-sort-b.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">84</td>
- <td class="headerCovTableEntry">84</td>
+ <td class="headerCovTableEntry">81</td>
+ <td class="headerCovTableEntry">81</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@@ -82,26 +82,26 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="run-STR_MAX_CHARS.c.gcov.html">run-STR_MAX_CHARS.c</a></td>
+ <td class="coverFile"><a href="run.c.gcov.html">run.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">32 / 32</td>
+ <td class="coverNumHi">52 / 52</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run.c.gcov.html">run.c</a></td>
+ <td class="coverFile"><a href="run-STR_MAX_CHARS.c.gcov.html">run-STR_MAX_CHARS.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">52 / 52</td>
+ <td class="coverNumHi">29 / 29</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/ccan/str/test/index-sort-f.html b/coverage-report/ccan/str/test/index-sort-f.html
index 5ca76c9..1460313 100644
--- a/coverage-report/ccan/str/test/index-sort-f.html
+++ b/coverage-report/ccan/str/test/index-sort-f.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">84</td>
- <td class="headerCovTableEntry">84</td>
+ <td class="headerCovTableEntry">81</td>
+ <td class="headerCovTableEntry">81</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@@ -87,7 +87,7 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">32 / 32</td>
+ <td class="coverNumHi">29 / 29</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/ccan/str/test/index-sort-l.html b/coverage-report/ccan/str/test/index-sort-l.html
index 85c8838..672fe23 100644
--- a/coverage-report/ccan/str/test/index-sort-l.html
+++ b/coverage-report/ccan/str/test/index-sort-l.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">84</td>
- <td class="headerCovTableEntry">84</td>
+ <td class="headerCovTableEntry">81</td>
+ <td class="headerCovTableEntry">81</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@@ -87,7 +87,7 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">32 / 32</td>
+ <td class="coverNumHi">29 / 29</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/ccan/str/test/index.html b/coverage-report/ccan/str/test/index.html
index ab71e91..5ed6985 100644
--- a/coverage-report/ccan/str/test/index.html
+++ b/coverage-report/ccan/str/test/index.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">84</td>
- <td class="headerCovTableEntry">84</td>
+ <td class="headerCovTableEntry">81</td>
+ <td class="headerCovTableEntry">81</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@@ -87,7 +87,7 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">32 / 32</td>
+ <td class="coverNumHi">29 / 29</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/ccan/str/test/run-STR_MAX_CHARS.c.func-sort-c.html b/coverage-report/ccan/str/test/run-STR_MAX_CHARS.c.func-sort-c.html
index 72fc602..c4851dd 100644
--- a/coverage-report/ccan/str/test/run-STR_MAX_CHARS.c.func-sort-c.html
+++ b/coverage-report/ccan/str/test/run-STR_MAX_CHARS.c.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">32</td>
- <td class="headerCovTableEntry">32</td>
+ <td class="headerCovTableEntry">29</td>
+ <td class="headerCovTableEntry">29</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/str/test/run-STR_MAX_CHARS.c.func.html b/coverage-report/ccan/str/test/run-STR_MAX_CHARS.c.func.html
index ff4879f..8e8b201 100644
--- a/coverage-report/ccan/str/test/run-STR_MAX_CHARS.c.func.html
+++ b/coverage-report/ccan/str/test/run-STR_MAX_CHARS.c.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">32</td>
- <td class="headerCovTableEntry">32</td>
+ <td class="headerCovTableEntry">29</td>
+ <td class="headerCovTableEntry">29</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/ccan/str/test/run-STR_MAX_CHARS.c.gcov.html b/coverage-report/ccan/str/test/run-STR_MAX_CHARS.c.gcov.html
index 9ca283c..d881b30 100644
--- a/coverage-report/ccan/str/test/run-STR_MAX_CHARS.c.gcov.html
+++ b/coverage-report/ccan/str/test/run-STR_MAX_CHARS.c.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">32</td>
- <td class="headerCovTableEntry">32</td>
+ <td class="headerCovTableEntry">29</td>
+ <td class="headerCovTableEntry">29</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -75,9 +75,9 @@
<a name="4"><span class="lineNum"> 4 </span> : : #include &lt;ccan/tap/tap.h&gt;</a>
<a name="5"><span class="lineNum"> 5 </span> : : #include &lt;stdint.h&gt;</a>
<a name="6"><span class="lineNum"> 6 </span> : : </a>
-<a name="7"><span class="lineNum"> 7 </span> :<span class="lineCov"> 3 : int main(int argc, char *argv[])</span></a>
+<a name="7"><span class="lineNum"> 7 </span> :<span class="lineCov"> 3 : int main(void)</span></a>
<a name="8"><span class="lineNum"> 8 </span> : : {</a>
-<a name="9"><span class="lineNum"> 9 </span> :<span class="lineCov"> 3 : char *str = (char*)malloc(sizeof(char)*1000);</span></a>
+<a name="9"><span class="lineNum"> 9 </span> : : char str[1000];</a>
<a name="10"><span class="lineNum"> 10 </span> : : struct {</a>
<a name="11"><span class="lineNum"> 11 </span> : : uint8_t u1byte;</a>
<a name="12"><span class="lineNum"> 12 </span> : : int8_t s1byte;</a>
@@ -90,51 +90,44 @@
<a name="19"><span class="lineNum"> 19 </span> : : void *ptr;</a>
<a name="20"><span class="lineNum"> 20 </span> : : } types;</a>
<a name="21"><span class="lineNum"> 21 </span> : : </a>
-<a name="22"><span class="lineNum"> 22 </span> : : (void)argc;</a>
-<a name="23"><span class="lineNum"> 23 </span> : : (void)argv;</a>
-<a name="24"><span class="lineNum"> 24 </span> : : </a>
-<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 3 : assert(str);</span></a>
-<a name="26"><span class="lineNum"> 26 </span> : : </a>
-<a name="27"><span class="lineNum"> 27 </span> : : plan_tests(13);</a>
-<a name="28"><span class="lineNum"> 28 </span> : : </a>
-<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 3 : memset(&amp;types, 0xFF, sizeof(types));</span></a>
-<a name="30"><span class="lineNum"> 30 </span> : : </a>
-<a name="31"><span class="lineNum"> 31 </span> : : /* Hex versions */</a>
-<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;0x%llx&quot;, (unsigned long long)types.u1byte);</span></a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.u1byte));</span></a>
-<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;0x%llx&quot;, (unsigned long long)types.u2byte);</span></a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.u2byte));</span></a>
-<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;0x%llx&quot;, (unsigned long long)types.u4byte);</span></a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.u4byte));</span></a>
-<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;0x%llx&quot;, (unsigned long long)types.u8byte);</span></a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.u8byte));</span></a>
-<a name="40"><span class="lineNum"> 40 </span> : : </a>
-<a name="41"><span class="lineNum"> 41 </span> : : /* Decimal versions */</a>
-<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%u&quot;, types.u1byte);</span></a>
-<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.u1byte));</span></a>
-<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%d&quot;, types.s1byte);</span></a>
-<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.s1byte));</span></a>
-<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%u&quot;, types.u2byte);</span></a>
-<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.u2byte));</span></a>
-<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%d&quot;, types.s2byte);</span></a>
-<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.s2byte));</span></a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%u&quot;, types.u4byte);</span></a>
-<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.u4byte));</span></a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%d&quot;, types.s4byte);</span></a>
-<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.s4byte));</span></a>
-<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%llu&quot;, (unsigned long long)types.u8byte);</span></a>
-<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.u8byte));</span></a>
-<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%lld&quot;, (long long)types.s8byte);</span></a>
-<a name="57"><span class="lineNum"> 57 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.s8byte));</span></a>
-<a name="58"><span class="lineNum"> 58 </span> : : </a>
-<a name="59"><span class="lineNum"> 59 </span> : : /* Pointer version. */</a>
-<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%p&quot;, types.ptr);</span></a>
-<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.ptr));</span></a>
-<a name="62"><span class="lineNum"> 62 </span> : : </a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 3 : free(str);</span></a>
-<a name="64"><span class="lineNum"> 64 </span> : : </a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 3 : return exit_status();</span></a>
-<a name="66"><span class="lineNum"> 66 </span> : : } </a>
+<a name="22"><span class="lineNum"> 22 </span> : : plan_tests(13);</a>
+<a name="23"><span class="lineNum"> 23 </span> : : </a>
+<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 3 : memset(&amp;types, 0xFF, sizeof(types));</span></a>
+<a name="25"><span class="lineNum"> 25 </span> : : </a>
+<a name="26"><span class="lineNum"> 26 </span> : : /* Hex versions */</a>
+<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;0x%llx&quot;, (unsigned long long)types.u1byte);</span></a>
+<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.u1byte));</span></a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;0x%llx&quot;, (unsigned long long)types.u2byte);</span></a>
+<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.u2byte));</span></a>
+<a name="31"><span class="lineNum"> 31 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;0x%llx&quot;, (unsigned long long)types.u4byte);</span></a>
+<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.u4byte));</span></a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;0x%llx&quot;, (unsigned long long)types.u8byte);</span></a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.u8byte));</span></a>
+<a name="35"><span class="lineNum"> 35 </span> : : </a>
+<a name="36"><span class="lineNum"> 36 </span> : : /* Decimal versions */</a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%u&quot;, types.u1byte);</span></a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.u1byte));</span></a>
+<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%d&quot;, types.s1byte);</span></a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.s1byte));</span></a>
+<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%u&quot;, types.u2byte);</span></a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.u2byte));</span></a>
+<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%d&quot;, types.s2byte);</span></a>
+<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.s2byte));</span></a>
+<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%u&quot;, types.u4byte);</span></a>
+<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.u4byte));</span></a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%d&quot;, types.s4byte);</span></a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.s4byte));</span></a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%llu&quot;, (unsigned long long)types.u8byte);</span></a>
+<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.u8byte));</span></a>
+<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%lld&quot;, (long long)types.s8byte);</span></a>
+<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.s8byte));</span></a>
+<a name="53"><span class="lineNum"> 53 </span> : : </a>
+<a name="54"><span class="lineNum"> 54 </span> : : /* Pointer version. */</a>
+<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 3 : sprintf(str, &quot;%p&quot;, types.ptr);</span></a>
+<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 3 : ok1(strlen(str) &lt; STR_MAX_CHARS(types.ptr));</span></a>
+<a name="57"><span class="lineNum"> 57 </span> : : </a>
+<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 3 : return exit_status();</span></a>
+<a name="59"><span class="lineNum"> 59 </span> : : } </a>
</pre>
</td>
</tr>
diff --git a/coverage-report/ccan/str/test/run.c.func-sort-c.html b/coverage-report/ccan/str/test/run.c.func-sort-c.html
index 3fdc959..74cc890 100644
--- a/coverage-report/ccan/str/test/run.c.func-sort-c.html
+++ b/coverage-report/ccan/str/test/run.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/ccan/str/test/run.c.func.html b/coverage-report/ccan/str/test/run.c.func.html
index 8dbe5b9..3620451 100644
--- a/coverage-report/ccan/str/test/run.c.func.html
+++ b/coverage-report/ccan/str/test/run.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/ccan/str/test/run.c.gcov.html b/coverage-report/ccan/str/test/run.c.gcov.html
index 6082d7b..191e147 100644
--- a/coverage-report/ccan/str/test/run.c.gcov.html
+++ b/coverage-report/ccan/str/test/run.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -92,92 +92,89 @@
<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 14406 : return ret;</span></a>
<a name="22"><span class="lineNum"> 22 </span> : : }</a>
<a name="23"><span class="lineNum"> 23 </span> : : </a>
-<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 3 : int main(int argc, char *argv[])</span></a>
+<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 3 : int main(void)</span></a>
<a name="25"><span class="lineNum"> 25 </span> : : {</a>
<a name="26"><span class="lineNum"> 26 </span> : : unsigned int i, j, n;</a>
<a name="27"><span class="lineNum"> 27 </span> : : char *strings[NUM_SUBSTRINGS * NUM_SUBSTRINGS];</a>
-<a name="28"><span class="lineNum"> 28 </span> : : </a>
-<a name="29"><span class="lineNum"> 29 </span> : : (void)argc;</a>
-<a name="30"><span class="lineNum"> 30 </span> : : (void)argv;</a>
-<a name="31"><span class="lineNum"> 31 </span> : : </a>
-<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 3 : n = 0;</span></a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 24 : for (i = 0; i &lt; NUM_SUBSTRINGS; i++) {</span></a>
-<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 168 : for (j = 0; j &lt; NUM_SUBSTRINGS; j++) {</span></a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 147 : strings[n] = malloc(strlen(substrings[i])</span></a>
-<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 147 : + strlen(substrings[j]) + 1);</span></a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 147 : sprintf(strings[n++], &quot;%s%s&quot;,</span></a>
-<a name="38"><span class="lineNum"> 38 </span> : : substrings[i], substrings[j]);</a>
-<a name="39"><span class="lineNum"> 39 </span> : : }</a>
-<a name="40"><span class="lineNum"> 40 </span> : : }</a>
-<a name="41"><span class="lineNum"> 41 </span> : : </a>
-<a name="42"><span class="lineNum"> 42 </span> : : plan_tests(n * n * 5 + 16);</a>
-<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 150 : for (i = 0; i &lt; n; i++) {</span></a>
-<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 7350 : for (j = 0; j &lt; n; j++) {</span></a>
-<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 7203 : unsigned int k, identical = 0;</span></a>
-<a name="46"><span class="lineNum"> 46 </span> : : char *reva, *revb;</a>
-<a name="47"><span class="lineNum"> 47 </span> : : </a>
-<a name="48"><span class="lineNum"> 48 </span> : : /* Find first difference. */</a>
-<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 12957 : for (k = 0; strings[i][k]==strings[j][k]; k++) {</span></a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 5901 : if (k == strlen(strings[i])) {</span></a>
-<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 147 : identical = 1;</span></a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 147 : break;</span></a>
-<a name="53"><span class="lineNum"> 53 </span> : : }</a>
-<a name="54"><span class="lineNum"> 54 </span> : : }</a>
-<a name="55"><span class="lineNum"> 55 </span> : : </a>
-<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 7203 : if (identical) </span></a>
-<a name="57"><span class="lineNum"> 57 </span> :<span class="lineCov"> 147 : ok1(streq(strings[i], strings[j]));</span></a>
-<a name="58"><span class="lineNum"> 58 </span> : : else</a>
-<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 7056 : ok1(!streq(strings[i], strings[j]));</span></a>
-<a name="60"><span class="lineNum"> 60 </span> : : </a>
-<a name="61"><span class="lineNum"> 61 </span> : : /* Postfix test should be equivalent to prefix</a>
-<a name="62"><span class="lineNum"> 62 </span> : : * test on reversed string. */</a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 7203 : reva = strdup_rev(strings[i]);</span></a>
-<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 7203 : revb = strdup_rev(strings[j]);</span></a>
-<a name="65"><span class="lineNum"> 65 </span> : : </a>
-<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 7203 : if (!strings[i][k]) {</span></a>
-<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 294 : ok1(strstarts(strings[j], strings[i]));</span></a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 294 : ok1(strends(revb, reva));</span></a>
-<a name="69"><span class="lineNum"> 69 </span> : : } else {</a>
-<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 6909 : ok1(!strstarts(strings[j], strings[i]));</span></a>
-<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 6909 : ok1(!strends(revb, reva));</span></a>
-<a name="72"><span class="lineNum"> 72 </span> : : }</a>
-<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 7203 : if (!strings[j][k]) {</span></a>
-<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 294 : ok1(strstarts(strings[i], strings[j]));</span></a>
-<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 294 : ok1(strends(reva, revb));</span></a>
-<a name="76"><span class="lineNum"> 76 </span> : : } else {</a>
-<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 6909 : ok1(!strstarts(strings[i], strings[j]));</span></a>
-<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 6909 : ok1(!strends(reva, revb));</span></a>
-<a name="79"><span class="lineNum"> 79 </span> : : }</a>
-<a name="80"><span class="lineNum"> 80 </span> :<span class="lineCov"> 7203 : free(reva);</span></a>
-<a name="81"><span class="lineNum"> 81 </span> :<span class="lineCov"> 7203 : free(revb);</span></a>
-<a name="82"><span class="lineNum"> 82 </span> : : }</a>
-<a name="83"><span class="lineNum"> 83 </span> : : }</a>
+<a name="28"><span class="lineNum"> 28 </span> : : </a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 3 : n = 0;</span></a>
+<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 24 : for (i = 0; i &lt; NUM_SUBSTRINGS; i++) {</span></a>
+<a name="31"><span class="lineNum"> 31 </span> :<span class="lineCov"> 168 : for (j = 0; j &lt; NUM_SUBSTRINGS; j++) {</span></a>
+<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 147 : strings[n] = malloc(strlen(substrings[i])</span></a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 147 : + strlen(substrings[j]) + 1);</span></a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 147 : sprintf(strings[n++], &quot;%s%s&quot;,</span></a>
+<a name="35"><span class="lineNum"> 35 </span> : : substrings[i], substrings[j]);</a>
+<a name="36"><span class="lineNum"> 36 </span> : : }</a>
+<a name="37"><span class="lineNum"> 37 </span> : : }</a>
+<a name="38"><span class="lineNum"> 38 </span> : : </a>
+<a name="39"><span class="lineNum"> 39 </span> : : plan_tests(n * n * 5 + 16);</a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 150 : for (i = 0; i &lt; n; i++) {</span></a>
+<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 7350 : for (j = 0; j &lt; n; j++) {</span></a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 7203 : unsigned int k, identical = 0;</span></a>
+<a name="43"><span class="lineNum"> 43 </span> : : char *reva, *revb;</a>
+<a name="44"><span class="lineNum"> 44 </span> : : </a>
+<a name="45"><span class="lineNum"> 45 </span> : : /* Find first difference. */</a>
+<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 12957 : for (k = 0; strings[i][k]==strings[j][k]; k++) {</span></a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 5901 : if (k == strlen(strings[i])) {</span></a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 147 : identical = 1;</span></a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 147 : break;</span></a>
+<a name="50"><span class="lineNum"> 50 </span> : : }</a>
+<a name="51"><span class="lineNum"> 51 </span> : : }</a>
+<a name="52"><span class="lineNum"> 52 </span> : : </a>
+<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 7203 : if (identical) </span></a>
+<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 147 : ok1(streq(strings[i], strings[j]));</span></a>
+<a name="55"><span class="lineNum"> 55 </span> : : else</a>
+<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 7056 : ok1(!streq(strings[i], strings[j]));</span></a>
+<a name="57"><span class="lineNum"> 57 </span> : : </a>
+<a name="58"><span class="lineNum"> 58 </span> : : /* Postfix test should be equivalent to prefix</a>
+<a name="59"><span class="lineNum"> 59 </span> : : * test on reversed string. */</a>
+<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 7203 : reva = strdup_rev(strings[i]);</span></a>
+<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 7203 : revb = strdup_rev(strings[j]);</span></a>
+<a name="62"><span class="lineNum"> 62 </span> : : </a>
+<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 7203 : if (!strings[i][k]) {</span></a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 294 : ok1(strstarts(strings[j], strings[i]));</span></a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 294 : ok1(strends(revb, reva));</span></a>
+<a name="66"><span class="lineNum"> 66 </span> : : } else {</a>
+<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 6909 : ok1(!strstarts(strings[j], strings[i]));</span></a>
+<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 6909 : ok1(!strends(revb, reva));</span></a>
+<a name="69"><span class="lineNum"> 69 </span> : : }</a>
+<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 7203 : if (!strings[j][k]) {</span></a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 294 : ok1(strstarts(strings[i], strings[j]));</span></a>
+<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 294 : ok1(strends(reva, revb));</span></a>
+<a name="73"><span class="lineNum"> 73 </span> : : } else {</a>
+<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 6909 : ok1(!strstarts(strings[i], strings[j]));</span></a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 6909 : ok1(!strends(reva, revb));</span></a>
+<a name="76"><span class="lineNum"> 76 </span> : : }</a>
+<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 7203 : free(reva);</span></a>
+<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 7203 : free(revb);</span></a>
+<a name="79"><span class="lineNum"> 79 </span> : : }</a>
+<a name="80"><span class="lineNum"> 80 </span> : : }</a>
+<a name="81"><span class="lineNum"> 81 </span> : : </a>
+<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 150 : for (i = 0; i &lt; n; i++)</span></a>
+<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 147 : free(strings[i]);</span></a>
<a name="84"><span class="lineNum"> 84 </span> : : </a>
-<a name="85"><span class="lineNum"> 85 </span> :<span class="lineCov"> 150 : for (i = 0; i &lt; n; i++)</span></a>
-<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 147 : free(strings[i]);</span></a>
-<a name="87"><span class="lineNum"> 87 </span> : : </a>
-<a name="88"><span class="lineNum"> 88 </span> : : ok1(streq(stringify(NUM_SUBSTRINGS),</a>
-<a name="89"><span class="lineNum"> 89 </span> : : &quot;((sizeof(substrings) / sizeof(substrings[0])) - 1)&quot;));</a>
-<a name="90"><span class="lineNum"> 90 </span> : : ok1(streq(stringify(ARRAY_SIZE(substrings)),</a>
-<a name="91"><span class="lineNum"> 91 </span> : : &quot;(sizeof(substrings) / sizeof(substrings[0]))&quot;));</a>
-<a name="92"><span class="lineNum"> 92 </span> : : ok1(streq(stringify(i == 0), &quot;i == 0&quot;));</a>
-<a name="93"><span class="lineNum"> 93 </span> : : </a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaaaaa&quot;, &quot;b&quot;) == 0);</span></a>
-<a name="95"><span class="lineNum"> 95 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaaaaa&quot;, &quot;a&quot;) == 6);</span></a>
-<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaaaaa&quot;, &quot;aa&quot;) == 3);</span></a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaaaaa&quot;, &quot;aaa&quot;) == 2);</span></a>
-<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaaaaa&quot;, &quot;aaaa&quot;) == 1);</span></a>
-<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaaaaa&quot;, &quot;aaaaa&quot;) == 1);</span></a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaaaaa&quot;, &quot;aaaaaa&quot;) == 1);</span></a>
-<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaa aaa&quot;, &quot;b&quot;) == 0);</span></a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaa aaa&quot;, &quot;a&quot;) == 6);</span></a>
-<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaa aaa&quot;, &quot;aa&quot;) == 2);</span></a>
-<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaa aaa&quot;, &quot;aaa&quot;) == 2);</span></a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaa aaa&quot;, &quot;aaaa&quot;) == 0);</span></a>
-<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaa aaa&quot;, &quot;aaaaa&quot;) == 0);</span></a>
-<a name="107"><span class="lineNum"> 107 </span> : : </a>
-<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 3 : return exit_status();</span></a>
-<a name="109"><span class="lineNum"> 109 </span> : : } </a>
+<a name="85"><span class="lineNum"> 85 </span> : : ok1(streq(stringify(NUM_SUBSTRINGS),</a>
+<a name="86"><span class="lineNum"> 86 </span> : : &quot;((sizeof(substrings) / sizeof(substrings[0])) - 1)&quot;));</a>
+<a name="87"><span class="lineNum"> 87 </span> : : ok1(streq(stringify(ARRAY_SIZE(substrings)),</a>
+<a name="88"><span class="lineNum"> 88 </span> : : &quot;(sizeof(substrings) / sizeof(substrings[0]))&quot;));</a>
+<a name="89"><span class="lineNum"> 89 </span> : : ok1(streq(stringify(i == 0), &quot;i == 0&quot;));</a>
+<a name="90"><span class="lineNum"> 90 </span> : : </a>
+<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaaaaa&quot;, &quot;b&quot;) == 0);</span></a>
+<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaaaaa&quot;, &quot;a&quot;) == 6);</span></a>
+<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaaaaa&quot;, &quot;aa&quot;) == 3);</span></a>
+<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaaaaa&quot;, &quot;aaa&quot;) == 2);</span></a>
+<a name="95"><span class="lineNum"> 95 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaaaaa&quot;, &quot;aaaa&quot;) == 1);</span></a>
+<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaaaaa&quot;, &quot;aaaaa&quot;) == 1);</span></a>
+<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaaaaa&quot;, &quot;aaaaaa&quot;) == 1);</span></a>
+<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaa aaa&quot;, &quot;b&quot;) == 0);</span></a>
+<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaa aaa&quot;, &quot;a&quot;) == 6);</span></a>
+<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaa aaa&quot;, &quot;aa&quot;) == 2);</span></a>
+<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaa aaa&quot;, &quot;aaa&quot;) == 2);</span></a>
+<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaa aaa&quot;, &quot;aaaa&quot;) == 0);</span></a>
+<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 3 : ok1(strcount(&quot;aaa aaa&quot;, &quot;aaaaa&quot;) == 0);</span></a>
+<a name="104"><span class="lineNum"> 104 </span> : : </a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 3 : return exit_status();</span></a>
+<a name="106"><span class="lineNum"> 106 </span> : : } </a>
</pre>
</td>
</tr>
diff --git a/coverage-report/core/bitmap.c.func-sort-c.html b/coverage-report/core/bitmap.c.func-sort-c.html
index 162fd75..60271af 100644
--- a/coverage-report/core/bitmap.c.func-sort-c.html
+++ b/coverage-report/core/bitmap.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/bitmap.c.func.html b/coverage-report/core/bitmap.c.func.html
index 2b1a265..25ec1b9 100644
--- a/coverage-report/core/bitmap.c.func.html
+++ b/coverage-report/core/bitmap.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/bitmap.c.gcov.html b/coverage-report/core/bitmap.c.gcov.html
index 4ca0ffb..c505f59 100644
--- a/coverage-report/core/bitmap.c.gcov.html
+++ b/coverage-report/core/bitmap.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/buddy.c.func-sort-c.html b/coverage-report/core/buddy.c.func-sort-c.html
index 6c2e8a9..1401d6a 100644
--- a/coverage-report/core/buddy.c.func-sort-c.html
+++ b/coverage-report/core/buddy.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">12</td>
diff --git a/coverage-report/core/buddy.c.func.html b/coverage-report/core/buddy.c.func.html
index aa2aa37..45a581c 100644
--- a/coverage-report/core/buddy.c.func.html
+++ b/coverage-report/core/buddy.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">12</td>
diff --git a/coverage-report/core/buddy.c.gcov.html b/coverage-report/core/buddy.c.gcov.html
index 4916a40..b1d63b3 100644
--- a/coverage-report/core/buddy.c.gcov.html
+++ b/coverage-report/core/buddy.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">12</td>
diff --git a/coverage-report/core/chip.c.func-sort-c.html b/coverage-report/core/chip.c.func-sort-c.html
index 63dca0f..d910698 100644
--- a/coverage-report/core/chip.c.func-sort-c.html
+++ b/coverage-report/core/chip.c.func-sort-c.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">87</td>
+ <td class="headerCovTableEntry">107</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -69,19 +69,19 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="chip.c.gcov.html#72">get_chip</a></td>
+ <td class="coverFn"><a href="chip.c.gcov.html#92">get_chip</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="chip.c.gcov.html#79">init_chip</a></td>
+ <td class="coverFn"><a href="chip.c.gcov.html#99">init_chip</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="chip.c.gcov.html#118">init_chips</a></td>
+ <td class="coverFn"><a href="chip.c.gcov.html#141">init_chips</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="chip.c.gcov.html#61">next_chip</a></td>
+ <td class="coverFn"><a href="chip.c.gcov.html#81">next_chip</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
@@ -89,15 +89,15 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="chip.c.gcov.html#22">pir_to_core_id</a></td>
+ <td class="coverFn"><a href="chip.c.gcov.html#24">pir_to_core_id</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="chip.c.gcov.html#35">pir_to_fused_core_id</a></td>
+ <td class="coverFn"><a href="chip.c.gcov.html#43">pir_to_fused_core_id</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="chip.c.gcov.html#48">pir_to_thread_id</a></td>
+ <td class="coverFn"><a href="chip.c.gcov.html#62">pir_to_thread_id</a></td>
<td class="coverFnLo">0</td>
</tr>
</table>
diff --git a/coverage-report/core/chip.c.func.html b/coverage-report/core/chip.c.func.html
index cf2aef8..bd26cad 100644
--- a/coverage-report/core/chip.c.func.html
+++ b/coverage-report/core/chip.c.func.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">87</td>
+ <td class="headerCovTableEntry">107</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -69,19 +69,19 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="chip.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="chip.c.gcov.html#72">get_chip</a></td>
+ <td class="coverFn"><a href="chip.c.gcov.html#92">get_chip</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="chip.c.gcov.html#79">init_chip</a></td>
+ <td class="coverFn"><a href="chip.c.gcov.html#99">init_chip</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="chip.c.gcov.html#118">init_chips</a></td>
+ <td class="coverFn"><a href="chip.c.gcov.html#141">init_chips</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="chip.c.gcov.html#61">next_chip</a></td>
+ <td class="coverFn"><a href="chip.c.gcov.html#81">next_chip</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
@@ -89,15 +89,15 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="chip.c.gcov.html#22">pir_to_core_id</a></td>
+ <td class="coverFn"><a href="chip.c.gcov.html#24">pir_to_core_id</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="chip.c.gcov.html#35">pir_to_fused_core_id</a></td>
+ <td class="coverFn"><a href="chip.c.gcov.html#43">pir_to_fused_core_id</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="chip.c.gcov.html#48">pir_to_thread_id</a></td>
+ <td class="coverFn"><a href="chip.c.gcov.html#62">pir_to_thread_id</a></td>
<td class="coverFnLo">0</td>
</tr>
</table>
diff --git a/coverage-report/core/chip.c.gcov.html b/coverage-report/core/chip.c.gcov.html
index 351ee40..9f4de8d 100644
--- a/coverage-report/core/chip.c.gcov.html
+++ b/coverage-report/core/chip.c.gcov.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">87</td>
+ <td class="headerCovTableEntry">107</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -84,157 +84,190 @@
<a name="13"><span class="lineNum"> 13 </span> : : </a>
<a name="14"><span class="lineNum"> 14 </span> :<span class="lineNoCov"> 0 : uint32_t pir_to_chip_id(uint32_t pir)</span></a>
<a name="15"><span class="lineNum"> 15 </span> : : {</a>
-<a name="16"><span class="lineNum"> 16 </span> :<span class="lineNoCov"> 0 : if (proc_gen == proc_gen_p9)</span></a>
-<a name="17"><span class="lineNum"> 17 </span> :<span class="lineNoCov"> 0 : return P9_PIR2GCID(pir);</span></a>
-<a name="18"><span class="lineNum"> 18 </span> :<span class="lineNoCov"> 0 : else if (proc_gen == proc_gen_p8)</span></a>
-<a name="19"><span class="lineNum"> 19 </span> :<span class="lineNoCov"> 0 : return P8_PIR2GCID(pir);</span></a>
-<a name="20"><span class="lineNum"> 20 </span> : : else</a>
-<a name="21"><span class="lineNum"> 21 </span> :<span class="lineNoCov"> 0 : assert(false);</span></a>
-<a name="22"><span class="lineNum"> 22 </span> : : }</a>
-<a name="23"><span class="lineNum"> 23 </span> : : </a>
-<a name="24"><span class="lineNum"> 24 </span> :<span class="lineNoCov"> 0 : uint32_t pir_to_core_id(uint32_t pir)</span></a>
-<a name="25"><span class="lineNum"> 25 </span> : : {</a>
-<a name="26"><span class="lineNum"> 26 </span> :<span class="lineNoCov"> 0 : if (proc_gen == proc_gen_p9) {</span></a>
-<a name="27"><span class="lineNum"> 27 </span> :<span class="lineNoCov"> 0 : if (this_cpu()-&gt;is_fused_core)</span></a>
-<a name="28"><span class="lineNum"> 28 </span> :<span class="lineNoCov"> 0 : return P9_PIRFUSED2NORMALCOREID(pir);</span></a>
-<a name="29"><span class="lineNum"> 29 </span> : : else</a>
-<a name="30"><span class="lineNum"> 30 </span> :<span class="lineNoCov"> 0 : return P9_PIR2COREID(pir);</span></a>
-<a name="31"><span class="lineNum"> 31 </span> :<span class="lineNoCov"> 0 : } else if (proc_gen == proc_gen_p8)</span></a>
-<a name="32"><span class="lineNum"> 32 </span> :<span class="lineNoCov"> 0 : return P8_PIR2COREID(pir);</span></a>
-<a name="33"><span class="lineNum"> 33 </span> : : else</a>
-<a name="34"><span class="lineNum"> 34 </span> :<span class="lineNoCov"> 0 : assert(false);</span></a>
-<a name="35"><span class="lineNum"> 35 </span> : : }</a>
-<a name="36"><span class="lineNum"> 36 </span> : : </a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineNoCov"> 0 : uint32_t pir_to_fused_core_id(uint32_t pir)</span></a>
-<a name="38"><span class="lineNum"> 38 </span> : : {</a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineNoCov"> 0 : if (proc_gen == proc_gen_p9) {</span></a>
-<a name="40"><span class="lineNum"> 40 </span> :<span class="lineNoCov"> 0 : if (this_cpu()-&gt;is_fused_core)</span></a>
-<a name="41"><span class="lineNum"> 41 </span> :<span class="lineNoCov"> 0 : return P9_PIR2FUSEDCOREID(pir);</span></a>
-<a name="42"><span class="lineNum"> 42 </span> : : else</a>
-<a name="43"><span class="lineNum"> 43 </span> :<span class="lineNoCov"> 0 : return P9_PIR2COREID(pir);</span></a>
-<a name="44"><span class="lineNum"> 44 </span> :<span class="lineNoCov"> 0 : } else if (proc_gen == proc_gen_p8)</span></a>
-<a name="45"><span class="lineNum"> 45 </span> :<span class="lineNoCov"> 0 : return P8_PIR2COREID(pir);</span></a>
-<a name="46"><span class="lineNum"> 46 </span> : : else</a>
-<a name="47"><span class="lineNum"> 47 </span> :<span class="lineNoCov"> 0 : assert(false);</span></a>
-<a name="48"><span class="lineNum"> 48 </span> : : }</a>
-<a name="49"><span class="lineNum"> 49 </span> : : </a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineNoCov"> 0 : uint32_t pir_to_thread_id(uint32_t pir)</span></a>
-<a name="51"><span class="lineNum"> 51 </span> : : {</a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineNoCov"> 0 : if (proc_gen == proc_gen_p9) {</span></a>
+<a name="16"><span class="lineNum"> 16 </span> :<span class="lineNoCov"> 0 : if (proc_gen == proc_gen_p10)</span></a>
+<a name="17"><span class="lineNum"> 17 </span> :<span class="lineNoCov"> 0 : return P10_PIR2GCID(pir);</span></a>
+<a name="18"><span class="lineNum"> 18 </span> :<span class="lineNoCov"> 0 : else if (proc_gen == proc_gen_p9)</span></a>
+<a name="19"><span class="lineNum"> 19 </span> :<span class="lineNoCov"> 0 : return P9_PIR2GCID(pir);</span></a>
+<a name="20"><span class="lineNum"> 20 </span> :<span class="lineNoCov"> 0 : else if (proc_gen == proc_gen_p8)</span></a>
+<a name="21"><span class="lineNum"> 21 </span> :<span class="lineNoCov"> 0 : return P8_PIR2GCID(pir);</span></a>
+<a name="22"><span class="lineNum"> 22 </span> : : else</a>
+<a name="23"><span class="lineNum"> 23 </span> :<span class="lineNoCov"> 0 : assert(false);</span></a>
+<a name="24"><span class="lineNum"> 24 </span> : : }</a>
+<a name="25"><span class="lineNum"> 25 </span> : : </a>
+<a name="26"><span class="lineNum"> 26 </span> :<span class="lineNoCov"> 0 : uint32_t pir_to_core_id(uint32_t pir)</span></a>
+<a name="27"><span class="lineNum"> 27 </span> : : {</a>
+<a name="28"><span class="lineNum"> 28 </span> :<span class="lineNoCov"> 0 : if (proc_gen == proc_gen_p10) {</span></a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineNoCov"> 0 : if (this_cpu()-&gt;is_fused_core)</span></a>
+<a name="30"><span class="lineNum"> 30 </span> :<span class="lineNoCov"> 0 : return P10_PIRFUSED2NORMALCOREID(pir);</span></a>
+<a name="31"><span class="lineNum"> 31 </span> : : else</a>
+<a name="32"><span class="lineNum"> 32 </span> :<span class="lineNoCov"> 0 : return P10_PIR2COREID(pir);</span></a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineNoCov"> 0 : } else if (proc_gen == proc_gen_p9) {</span></a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineNoCov"> 0 : if (this_cpu()-&gt;is_fused_core)</span></a>
+<a name="35"><span class="lineNum"> 35 </span> :<span class="lineNoCov"> 0 : return P9_PIRFUSED2NORMALCOREID(pir);</span></a>
+<a name="36"><span class="lineNum"> 36 </span> : : else</a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineNoCov"> 0 : return P9_PIR2COREID(pir);</span></a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineNoCov"> 0 : } else if (proc_gen == proc_gen_p8) {</span></a>
+<a name="39"><span class="lineNum"> 39 </span> :<span class="lineNoCov"> 0 : return P8_PIR2COREID(pir);</span></a>
+<a name="40"><span class="lineNum"> 40 </span> : : } else {</a>
+<a name="41"><span class="lineNum"> 41 </span> :<span class="lineNoCov"> 0 : assert(false);</span></a>
+<a name="42"><span class="lineNum"> 42 </span> : : }</a>
+<a name="43"><span class="lineNum"> 43 </span> : : }</a>
+<a name="44"><span class="lineNum"> 44 </span> : : </a>
+<a name="45"><span class="lineNum"> 45 </span> :<span class="lineNoCov"> 0 : uint32_t pir_to_fused_core_id(uint32_t pir)</span></a>
+<a name="46"><span class="lineNum"> 46 </span> : : {</a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineNoCov"> 0 : if (proc_gen == proc_gen_p10) {</span></a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineNoCov"> 0 : if (this_cpu()-&gt;is_fused_core)</span></a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineNoCov"> 0 : return P10_PIR2FUSEDCOREID(pir);</span></a>
+<a name="50"><span class="lineNum"> 50 </span> : : else</a>
+<a name="51"><span class="lineNum"> 51 </span> :<span class="lineNoCov"> 0 : return P10_PIR2COREID(pir);</span></a>
+<a name="52"><span class="lineNum"> 52 </span> :<span class="lineNoCov"> 0 : } else if (proc_gen == proc_gen_p9) {</span></a>
<a name="53"><span class="lineNum"> 53 </span> :<span class="lineNoCov"> 0 : if (this_cpu()-&gt;is_fused_core)</span></a>
-<a name="54"><span class="lineNum"> 54 </span> :<span class="lineNoCov"> 0 : return P9_PIRFUSED2NORMALTHREADID(pir);</span></a>
+<a name="54"><span class="lineNum"> 54 </span> :<span class="lineNoCov"> 0 : return P9_PIR2FUSEDCOREID(pir);</span></a>
<a name="55"><span class="lineNum"> 55 </span> : : else</a>
-<a name="56"><span class="lineNum"> 56 </span> :<span class="lineNoCov"> 0 : return P9_PIR2THREADID(pir);</span></a>
-<a name="57"><span class="lineNum"> 57 </span> :<span class="lineNoCov"> 0 : } else if (proc_gen == proc_gen_p8)</span></a>
-<a name="58"><span class="lineNum"> 58 </span> :<span class="lineNoCov"> 0 : return P8_PIR2THREADID(pir);</span></a>
-<a name="59"><span class="lineNum"> 59 </span> : : else</a>
+<a name="56"><span class="lineNum"> 56 </span> :<span class="lineNoCov"> 0 : return P9_PIR2COREID(pir);</span></a>
+<a name="57"><span class="lineNum"> 57 </span> :<span class="lineNoCov"> 0 : } else if (proc_gen == proc_gen_p8) {</span></a>
+<a name="58"><span class="lineNum"> 58 </span> :<span class="lineNoCov"> 0 : return P8_PIR2COREID(pir);</span></a>
+<a name="59"><span class="lineNum"> 59 </span> : : } else {</a>
<a name="60"><span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : assert(false);</span></a>
-<a name="61"><span class="lineNum"> 61 </span> : : }</a>
-<a name="62"><span class="lineNum"> 62 </span> : : </a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : struct proc_chip *next_chip(struct proc_chip *chip)</span></a>
-<a name="64"><span class="lineNum"> 64 </span> : : {</a>
-<a name="65"><span class="lineNum"> 65 </span> : : unsigned int i;</a>
-<a name="66"><span class="lineNum"> 66 </span> : : </a>
-<a name="67"><span class="lineNum"> 67 </span> :<span class="lineNoCov"> 0 : for (i = chip ? (chip-&gt;id + 1) : 0; i &lt; MAX_CHIPS; i++)</span></a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineNoCov"> 0 : if (chips[i])</span></a>
-<a name="69"><span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : return chips[i];</span></a>
-<a name="70"><span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="71"><span class="lineNum"> 71 </span> : : }</a>
-<a name="72"><span class="lineNum"> 72 </span> : : </a>
-<a name="73"><span class="lineNum"> 73 </span> : : </a>
-<a name="74"><span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : struct proc_chip *get_chip(uint32_t chip_id)</span></a>
-<a name="75"><span class="lineNum"> 75 </span> : : {</a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : if (chip_id &gt;= MAX_CHIPS)</span></a>
-<a name="77"><span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="78"><span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : return chips[chip_id];</span></a>
-<a name="79"><span class="lineNum"> 79 </span> : : }</a>
-<a name="80"><span class="lineNum"> 80 </span> : : </a>
-<a name="81"><span class="lineNum"> 81 </span> :<span class="lineNoCov"> 0 : static void init_chip(struct dt_node *dn)</span></a>
-<a name="82"><span class="lineNum"> 82 </span> : : {</a>
-<a name="83"><span class="lineNum"> 83 </span> : : struct proc_chip *chip;</a>
-<a name="84"><span class="lineNum"> 84 </span> : : uint32_t id;</a>
-<a name="85"><span class="lineNum"> 85 </span> :<span class="lineNoCov"> 0 : const char *lc = NULL;</span></a>
+<a name="61"><span class="lineNum"> 61 </span> : : }</a>
+<a name="62"><span class="lineNum"> 62 </span> : : }</a>
+<a name="63"><span class="lineNum"> 63 </span> : : </a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineNoCov"> 0 : uint32_t pir_to_thread_id(uint32_t pir)</span></a>
+<a name="65"><span class="lineNum"> 65 </span> : : {</a>
+<a name="66"><span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : if (proc_gen == proc_gen_p10) {</span></a>
+<a name="67"><span class="lineNum"> 67 </span> :<span class="lineNoCov"> 0 : if (this_cpu()-&gt;is_fused_core)</span></a>
+<a name="68"><span class="lineNum"> 68 </span> :<span class="lineNoCov"> 0 : return P10_PIRFUSED2NORMALTHREADID(pir);</span></a>
+<a name="69"><span class="lineNum"> 69 </span> : : else</a>
+<a name="70"><span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : return P10_PIR2THREADID(pir);</span></a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineNoCov"> 0 : } else if (proc_gen == proc_gen_p9) {</span></a>
+<a name="72"><span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : if (this_cpu()-&gt;is_fused_core)</span></a>
+<a name="73"><span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : return P9_PIRFUSED2NORMALTHREADID(pir);</span></a>
+<a name="74"><span class="lineNum"> 74 </span> : : else</a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineNoCov"> 0 : return P9_PIR2THREADID(pir);</span></a>
+<a name="76"><span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : } else if (proc_gen == proc_gen_p8) {</span></a>
+<a name="77"><span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : return P8_PIR2THREADID(pir);</span></a>
+<a name="78"><span class="lineNum"> 78 </span> : : } else {</a>
+<a name="79"><span class="lineNum"> 79 </span> :<span class="lineNoCov"> 0 : assert(false);</span></a>
+<a name="80"><span class="lineNum"> 80 </span> : : }</a>
+<a name="81"><span class="lineNum"> 81 </span> : : }</a>
+<a name="82"><span class="lineNum"> 82 </span> : : </a>
+<a name="83"><span class="lineNum"> 83 </span> :<span class="lineNoCov"> 0 : struct proc_chip *next_chip(struct proc_chip *chip)</span></a>
+<a name="84"><span class="lineNum"> 84 </span> : : {</a>
+<a name="85"><span class="lineNum"> 85 </span> : : unsigned int i;</a>
<a name="86"><span class="lineNum"> 86 </span> : : </a>
-<a name="87"><span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : id = dt_get_chip_id(dn);</span></a>
-<a name="88"><span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : assert(id &lt; MAX_CHIPS);</span></a>
-<a name="89"><span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : assert(chips[id] == NULL);</span></a>
-<a name="90"><span class="lineNum"> 90 </span> : : </a>
-<a name="91"><span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : chip = zalloc(sizeof(struct proc_chip));</span></a>
-<a name="92"><span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : assert(chip);</span></a>
+<a name="87"><span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : for (i = chip ? (chip-&gt;id + 1) : 0; i &lt; MAX_CHIPS; i++)</span></a>
+<a name="88"><span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : if (chips[i])</span></a>
+<a name="89"><span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : return chips[i];</span></a>
+<a name="90"><span class="lineNum"> 90 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="91"><span class="lineNum"> 91 </span> : : }</a>
+<a name="92"><span class="lineNum"> 92 </span> : : </a>
<a name="93"><span class="lineNum"> 93 </span> : : </a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : chip-&gt;id = id;</span></a>
-<a name="95"><span class="lineNum"> 95 </span> :<span class="lineNoCov"> 0 : chip-&gt;devnode = dn;</span></a>
-<a name="96"><span class="lineNum"> 96 </span> : : </a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : chip-&gt;dbob_id = dt_prop_get_u32_def(dn, &quot;ibm,dbob-id&quot;, 0xffffffff);</span></a>
-<a name="98"><span class="lineNum"> 98 </span> :<span class="lineNoCov"> 0 : chip-&gt;pcid = dt_prop_get_u32_def(dn, &quot;ibm,proc-chip-id&quot;, 0xffffffff);</span></a>
-<a name="99"><span class="lineNum"> 99 </span> : : </a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : if (dt_prop_get_u32_def(dn, &quot;ibm,occ-functional-state&quot;, 0))</span></a>
-<a name="101"><span class="lineNum"> 101 </span> :<span class="lineNoCov"> 0 : chip-&gt;occ_functional = true;</span></a>
-<a name="102"><span class="lineNum"> 102 </span> : : else</a>
-<a name="103"><span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : chip-&gt;occ_functional = false;</span></a>
-<a name="104"><span class="lineNum"> 104 </span> : : </a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : list_head_init(&amp;chip-&gt;i2cms);</span></a>
+<a name="94"><span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : struct proc_chip *get_chip(uint32_t chip_id)</span></a>
+<a name="95"><span class="lineNum"> 95 </span> : : {</a>
+<a name="96"><span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : if (chip_id &gt;= MAX_CHIPS)</span></a>
+<a name="97"><span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="98"><span class="lineNum"> 98 </span> :<span class="lineNoCov"> 0 : return chips[chip_id];</span></a>
+<a name="99"><span class="lineNum"> 99 </span> : : }</a>
+<a name="100"><span class="lineNum"> 100 </span> : : </a>
+<a name="101"><span class="lineNum"> 101 </span> :<span class="lineNoCov"> 0 : static void init_chip(struct dt_node *dn)</span></a>
+<a name="102"><span class="lineNum"> 102 </span> : : {</a>
+<a name="103"><span class="lineNum"> 103 </span> : : struct proc_chip *chip;</a>
+<a name="104"><span class="lineNum"> 104 </span> : : uint32_t id;</a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : const char *lc = NULL;</span></a>
<a name="106"><span class="lineNum"> 106 </span> : : </a>
-<a name="107"><span class="lineNum"> 107 </span> : : /* Update the location code for this chip. */</a>
-<a name="108"><span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : if (dt_has_node_property(dn, &quot;ibm,loc-code&quot;, NULL))</span></a>
-<a name="109"><span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : lc = dt_prop_get(dn, &quot;ibm,loc-code&quot;);</span></a>
-<a name="110"><span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : else if (dt_has_node_property(dn, &quot;ibm,slot-location-code&quot;, NULL))</span></a>
-<a name="111"><span class="lineNum"> 111 </span> :<span class="lineNoCov"> 0 : lc = dt_prop_get(dn, &quot;ibm,slot-location-code&quot;);</span></a>
-<a name="112"><span class="lineNum"> 112 </span> : : </a>
-<a name="113"><span class="lineNum"> 113 </span> :<span class="lineNoCov"> 0 : if (lc)</span></a>
-<a name="114"><span class="lineNum"> 114 </span> :<span class="lineNoCov"> 0 : chip-&gt;loc_code = strdup(lc);</span></a>
-<a name="115"><span class="lineNum"> 115 </span> : : </a>
-<a name="116"><span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;CHIP: Initialised chip %d from %s\n&quot;, id, dn-&gt;name);</span></a>
-<a name="117"><span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : chips[id] = chip;</span></a>
-<a name="118"><span class="lineNum"> 118 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="107"><span class="lineNum"> 107 </span> :<span class="lineNoCov"> 0 : id = dt_get_chip_id(dn);</span></a>
+<a name="108"><span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : assert(id &lt; MAX_CHIPS);</span></a>
+<a name="109"><span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : assert(chips[id] == NULL);</span></a>
+<a name="110"><span class="lineNum"> 110 </span> : : </a>
+<a name="111"><span class="lineNum"> 111 </span> :<span class="lineNoCov"> 0 : chip = zalloc(sizeof(struct proc_chip));</span></a>
+<a name="112"><span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : assert(chip);</span></a>
+<a name="113"><span class="lineNum"> 113 </span> : : </a>
+<a name="114"><span class="lineNum"> 114 </span> :<span class="lineNoCov"> 0 : chip-&gt;id = id;</span></a>
+<a name="115"><span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : chip-&gt;devnode = dn;</span></a>
+<a name="116"><span class="lineNum"> 116 </span> : : </a>
+<a name="117"><span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : chip-&gt;dbob_id = dt_prop_get_u32_def(dn, &quot;ibm,dbob-id&quot;, 0xffffffff);</span></a>
+<a name="118"><span class="lineNum"> 118 </span> :<span class="lineNoCov"> 0 : chip-&gt;pcid = dt_prop_get_u32_def(dn, &quot;ibm,proc-chip-id&quot;, 0xffffffff);</span></a>
<a name="119"><span class="lineNum"> 119 </span> : : </a>
-<a name="120"><span class="lineNum"> 120 </span> :<span class="lineNoCov"> 0 : void init_chips(void)</span></a>
-<a name="121"><span class="lineNum"> 121 </span> : : {</a>
-<a name="122"><span class="lineNum"> 122 </span> : : struct dt_node *xn;</a>
-<a name="123"><span class="lineNum"> 123 </span> : : </a>
-<a name="124"><span class="lineNum"> 124 </span> : : /* Detect mambo chip */</a>
-<a name="125"><span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : if (dt_find_by_path(dt_root, &quot;/mambo&quot;)) {</span></a>
-<a name="126"><span class="lineNum"> 126 </span> :<span class="lineNoCov"> 0 : proc_chip_quirks |= QUIRK_NO_CHIPTOD | QUIRK_MAMBO_CALLOUTS</span></a>
-<a name="127"><span class="lineNum"> 127 </span> : : | QUIRK_NO_F000F | QUIRK_NO_PBA | QUIRK_NO_OCC_IRQ</a>
-<a name="128"><span class="lineNum"> 128 </span> : : | QUIRK_NO_RNG;</a>
-<a name="129"><span class="lineNum"> 129 </span> : : </a>
-<a name="130"><span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : enable_mambo_console();</span></a>
-<a name="131"><span class="lineNum"> 131 </span> : : </a>
-<a name="132"><span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : prlog(PR_NOTICE, &quot;CHIP: Detected Mambo simulator\n&quot;);</span></a>
-<a name="133"><span class="lineNum"> 133 </span> : : </a>
-<a name="134"><span class="lineNum"> 134 </span> :<span class="lineNoCov"> 0 : dt_for_each_compatible(dt_root, xn, &quot;ibm,mambo-chip&quot;)</span></a>
-<a name="135"><span class="lineNum"> 135 </span> :<span class="lineNoCov"> 0 : init_chip(xn);</span></a>
-<a name="136"><span class="lineNum"> 136 </span> : : }</a>
-<a name="137"><span class="lineNum"> 137 </span> : : </a>
-<a name="138"><span class="lineNum"> 138 </span> : : /* Detect simics */</a>
-<a name="139"><span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : if (dt_find_by_path(dt_root, &quot;/simics&quot;)) {</span></a>
-<a name="140"><span class="lineNum"> 140 </span> :<span class="lineNoCov"> 0 : proc_chip_quirks |= QUIRK_SIMICS</span></a>
-<a name="141"><span class="lineNum"> 141 </span> : : | QUIRK_NO_PBA | QUIRK_NO_OCC_IRQ | QUIRK_SLOW_SIM;</a>
-<a name="142"><span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : tb_hz = 512000;</span></a>
-<a name="143"><span class="lineNum"> 143 </span> :<span class="lineNoCov"> 0 : prlog(PR_NOTICE, &quot;CHIP: Detected Simics simulator\n&quot;);</span></a>
-<a name="144"><span class="lineNum"> 144 </span> : : }</a>
-<a name="145"><span class="lineNum"> 145 </span> : : /* Detect Awan emulator */</a>
-<a name="146"><span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : if (dt_find_by_path(dt_root, &quot;/awan&quot;)) {</span></a>
-<a name="147"><span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : proc_chip_quirks |= QUIRK_NO_CHIPTOD | QUIRK_NO_F000F</span></a>
-<a name="148"><span class="lineNum"> 148 </span> : : | QUIRK_NO_PBA | QUIRK_NO_OCC_IRQ | QUIRK_SLOW_SIM;</a>
-<a name="149"><span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : tb_hz = 512000;</span></a>
-<a name="150"><span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : prlog(PR_NOTICE, &quot;CHIP: Detected Awan emulator\n&quot;);</span></a>
-<a name="151"><span class="lineNum"> 151 </span> : : }</a>
-<a name="152"><span class="lineNum"> 152 </span> : : /* Detect Qemu */</a>
-<a name="153"><span class="lineNum"> 153 </span> :<span class="lineNoCov"> 0 : if (dt_node_is_compatible(dt_root, &quot;qemu,powernv&quot;) ||</span></a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : dt_node_is_compatible(dt_root, &quot;qemu,powernv8&quot;) ||</span></a>
-<a name="155"><span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : dt_node_is_compatible(dt_root, &quot;qemu,powernv9&quot;) ||</span></a>
-<a name="156"><span class="lineNum"> 156 </span> :<span class="lineNoCov"> 0 : dt_find_by_path(dt_root, &quot;/qemu&quot;)) {</span></a>
-<a name="157"><span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : proc_chip_quirks |= QUIRK_QEMU | QUIRK_NO_CHIPTOD</span></a>
-<a name="158"><span class="lineNum"> 158 </span> : : | QUIRK_NO_DIRECT_CTL | QUIRK_NO_RNG;</a>
-<a name="159"><span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : prlog(PR_NOTICE, &quot;CHIP: Detected QEMU simulator\n&quot;);</span></a>
-<a name="160"><span class="lineNum"> 160 </span> : : }</a>
-<a name="161"><span class="lineNum"> 161 </span> : : </a>
-<a name="162"><span class="lineNum"> 162 </span> : : /* We walk the chips based on xscom nodes in the tree */</a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineNoCov"> 0 : dt_for_each_compatible(dt_root, xn, &quot;ibm,xscom&quot;) {</span></a>
-<a name="164"><span class="lineNum"> 164 </span> :<span class="lineNoCov"> 0 : init_chip(xn);</span></a>
-<a name="165"><span class="lineNum"> 165 </span> : : }</a>
-<a name="166"><span class="lineNum"> 166 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="120"><span class="lineNum"> 120 </span> :<span class="lineNoCov"> 0 : if (dt_prop_get_u32_def(dn, &quot;ibm,occ-functional-state&quot;, 0))</span></a>
+<a name="121"><span class="lineNum"> 121 </span> :<span class="lineNoCov"> 0 : chip-&gt;occ_functional = true;</span></a>
+<a name="122"><span class="lineNum"> 122 </span> : : else</a>
+<a name="123"><span class="lineNum"> 123 </span> :<span class="lineNoCov"> 0 : chip-&gt;occ_functional = false;</span></a>
+<a name="124"><span class="lineNum"> 124 </span> : : </a>
+<a name="125"><span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : list_head_init(&amp;chip-&gt;i2cms);</span></a>
+<a name="126"><span class="lineNum"> 126 </span> : : </a>
+<a name="127"><span class="lineNum"> 127 </span> : : /* Update the location code for this chip. */</a>
+<a name="128"><span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : if (dt_has_node_property(dn, &quot;ibm,loc-code&quot;, NULL))</span></a>
+<a name="129"><span class="lineNum"> 129 </span> :<span class="lineNoCov"> 0 : lc = dt_prop_get(dn, &quot;ibm,loc-code&quot;);</span></a>
+<a name="130"><span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : else if (dt_has_node_property(dn, &quot;ibm,slot-location-code&quot;, NULL))</span></a>
+<a name="131"><span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : lc = dt_prop_get(dn, &quot;ibm,slot-location-code&quot;);</span></a>
+<a name="132"><span class="lineNum"> 132 </span> : : </a>
+<a name="133"><span class="lineNum"> 133 </span> :<span class="lineNoCov"> 0 : if (lc)</span></a>
+<a name="134"><span class="lineNum"> 134 </span> :<span class="lineNoCov"> 0 : chip-&gt;loc_code = strdup(lc);</span></a>
+<a name="135"><span class="lineNum"> 135 </span> : : </a>
+<a name="136"><span class="lineNum"> 136 </span> :<span class="lineNoCov"> 0 : chip-&gt;primary_topology = dt_prop_get_u32_def(dn,</span></a>
+<a name="137"><span class="lineNum"> 137 </span> : : &quot;ibm,primary-topology-index&quot;, 0xffffffff);</a>
+<a name="138"><span class="lineNum"> 138 </span> : : </a>
+<a name="139"><span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;CHIP: Initialised chip %d from %s\n&quot;, id, dn-&gt;name);</span></a>
+<a name="140"><span class="lineNum"> 140 </span> :<span class="lineNoCov"> 0 : chips[id] = chip;</span></a>
+<a name="141"><span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="142"><span class="lineNum"> 142 </span> : : </a>
+<a name="143"><span class="lineNum"> 143 </span> :<span class="lineNoCov"> 0 : void init_chips(void)</span></a>
+<a name="144"><span class="lineNum"> 144 </span> : : {</a>
+<a name="145"><span class="lineNum"> 145 </span> : : struct dt_node *xn;</a>
+<a name="146"><span class="lineNum"> 146 </span> : : </a>
+<a name="147"><span class="lineNum"> 147 </span> : : /* Detect mambo chip */</a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : if (dt_find_by_path(dt_root, &quot;/mambo&quot;)) {</span></a>
+<a name="149"><span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : proc_chip_quirks |= QUIRK_NO_CHIPTOD | QUIRK_MAMBO_CALLOUTS</span></a>
+<a name="150"><span class="lineNum"> 150 </span> : : | QUIRK_NO_F000F | QUIRK_NO_PBA | QUIRK_NO_OCC_IRQ</a>
+<a name="151"><span class="lineNum"> 151 </span> : : | QUIRK_NO_RNG;</a>
+<a name="152"><span class="lineNum"> 152 </span> : : </a>
+<a name="153"><span class="lineNum"> 153 </span> :<span class="lineNoCov"> 0 : enable_mambo_console();</span></a>
+<a name="154"><span class="lineNum"> 154 </span> : : </a>
+<a name="155"><span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : prlog(PR_NOTICE, &quot;CHIP: Detected Mambo simulator\n&quot;);</span></a>
+<a name="156"><span class="lineNum"> 156 </span> : : </a>
+<a name="157"><span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : dt_for_each_compatible(dt_root, xn, &quot;ibm,mambo-chip&quot;)</span></a>
+<a name="158"><span class="lineNum"> 158 </span> :<span class="lineNoCov"> 0 : init_chip(xn);</span></a>
+<a name="159"><span class="lineNum"> 159 </span> : : }</a>
+<a name="160"><span class="lineNum"> 160 </span> : : </a>
+<a name="161"><span class="lineNum"> 161 </span> : : /* Detect simics */</a>
+<a name="162"><span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : if (dt_find_by_path(dt_root, &quot;/simics&quot;)) {</span></a>
+<a name="163"><span class="lineNum"> 163 </span> :<span class="lineNoCov"> 0 : proc_chip_quirks |= QUIRK_SIMICS</span></a>
+<a name="164"><span class="lineNum"> 164 </span> : : | QUIRK_NO_PBA | QUIRK_NO_OCC_IRQ | QUIRK_SLOW_SIM;</a>
+<a name="165"><span class="lineNum"> 165 </span> :<span class="lineNoCov"> 0 : tb_hz = 512000;</span></a>
+<a name="166"><span class="lineNum"> 166 </span> :<span class="lineNoCov"> 0 : prlog(PR_NOTICE, &quot;CHIP: Detected Simics simulator\n&quot;);</span></a>
+<a name="167"><span class="lineNum"> 167 </span> : : }</a>
+<a name="168"><span class="lineNum"> 168 </span> : : /* Detect Awan emulator */</a>
+<a name="169"><span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : xn = dt_find_by_path(dt_root, &quot;/awan&quot;);</span></a>
+<a name="170"><span class="lineNum"> 170 </span> :<span class="lineNoCov"> 0 : if (xn) {</span></a>
+<a name="171"><span class="lineNum"> 171 </span> : : const char *model_type;</a>
+<a name="172"><span class="lineNum"> 172 </span> :<span class="lineNoCov"> 0 : proc_chip_quirks |= QUIRK_AWAN | QUIRK_SLOW_SIM | QUIRK_NO_PBA</span></a>
+<a name="173"><span class="lineNum"> 173 </span> : : | QUIRK_NO_OCC_IRQ;</a>
+<a name="174"><span class="lineNum"> 174 </span> :<span class="lineNoCov"> 0 : tb_hz = 512000;</span></a>
+<a name="175"><span class="lineNum"> 175 </span> : : </a>
+<a name="176"><span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : model_type = dt_prop_get_def(xn, &quot;device_type&quot;, (void *)&quot;core&quot;);</span></a>
+<a name="177"><span class="lineNum"> 177 </span> :<span class="lineNoCov"> 0 : if (strcmp(model_type, &quot;core&quot;) == 0) {</span></a>
+<a name="178"><span class="lineNum"> 178 </span> :<span class="lineNoCov"> 0 : proc_chip_quirks |= QUIRK_NO_RNG | QUIRK_NO_CHIPTOD</span></a>
+<a name="179"><span class="lineNum"> 179 </span> : : | QUIRK_NO_F000F;</a>
+<a name="180"><span class="lineNum"> 180 </span> : : }</a>
+<a name="181"><span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : prlog(PR_NOTICE, &quot;CHIP: Detected Awan emulator %s model\n&quot;,</span></a>
+<a name="182"><span class="lineNum"> 182 </span> : : model_type);</a>
+<a name="183"><span class="lineNum"> 183 </span> : : }</a>
+<a name="184"><span class="lineNum"> 184 </span> : : /* Detect Qemu */</a>
+<a name="185"><span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : if (dt_node_is_compatible(dt_root, &quot;qemu,powernv&quot;) ||</span></a>
+<a name="186"><span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : dt_node_is_compatible(dt_root, &quot;qemu,powernv8&quot;) ||</span></a>
+<a name="187"><span class="lineNum"> 187 </span> :<span class="lineNoCov"> 0 : dt_node_is_compatible(dt_root, &quot;qemu,powernv9&quot;) ||</span></a>
+<a name="188"><span class="lineNum"> 188 </span> :<span class="lineNoCov"> 0 : dt_node_is_compatible(dt_root, &quot;qemu,powernv10&quot;) ||</span></a>
+<a name="189"><span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : dt_find_by_path(dt_root, &quot;/qemu&quot;)) {</span></a>
+<a name="190"><span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : proc_chip_quirks |= QUIRK_QEMU | QUIRK_NO_CHIPTOD</span></a>
+<a name="191"><span class="lineNum"> 191 </span> : : | QUIRK_NO_DIRECT_CTL | QUIRK_NO_RNG;</a>
+<a name="192"><span class="lineNum"> 192 </span> :<span class="lineNoCov"> 0 : prlog(PR_NOTICE, &quot;CHIP: Detected QEMU simulator\n&quot;);</span></a>
+<a name="193"><span class="lineNum"> 193 </span> : : }</a>
+<a name="194"><span class="lineNum"> 194 </span> : : </a>
+<a name="195"><span class="lineNum"> 195 </span> : : /* We walk the chips based on xscom nodes in the tree */</a>
+<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : dt_for_each_compatible(dt_root, xn, &quot;ibm,xscom&quot;) {</span></a>
+<a name="197"><span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : init_chip(xn);</span></a>
+<a name="198"><span class="lineNum"> 198 </span> : : }</a>
+<a name="199"><span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : }</span></a>
</pre>
</td>
</tr>
diff --git a/coverage-report/core/console-log.c.func-sort-c.html b/coverage-report/core/console-log.c.func-sort-c.html
index d8a271e..e75d5b6 100644
--- a/coverage-report/core/console-log.c.func-sort-c.html
+++ b/coverage-report/core/console-log.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/console-log.c.func.html b/coverage-report/core/console-log.c.func.html
index 96487cf..1318a29 100644
--- a/coverage-report/core/console-log.c.func.html
+++ b/coverage-report/core/console-log.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/console-log.c.gcov.html b/coverage-report/core/console-log.c.gcov.html
index 2daf712..c141988 100644
--- a/coverage-report/core/console-log.c.gcov.html
+++ b/coverage-report/core/console-log.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/cpufeatures.c.func-sort-c.html b/coverage-report/core/cpufeatures.c.func-sort-c.html
index ef6dcd8..5ad5465 100644
--- a/coverage-report/core/cpufeatures.c.func-sort-c.html
+++ b/coverage-report/core/cpufeatures.c.func-sort-c.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">118</td>
- <td class="headerCovTableEntry">139</td>
- <td class="headerCovTableEntryMed">84.9 %</td>
+ <td class="headerCovTableEntry">145</td>
+ <td class="headerCovTableEntryMed">81.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@@ -69,19 +69,19 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="cpufeatures.c.gcov.html#860">add_cpufeatures</a></td>
+ <td class="coverFn"><a href="cpufeatures.c.gcov.html#913">add_cpufeatures</a></td>
<td class="coverFnHi">10</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpufeatures.c.gcov.html#795">add_cpufeatures_dependencies</a></td>
+ <td class="coverFn"><a href="cpufeatures.c.gcov.html#848">add_cpufeatures_dependencies</a></td>
<td class="coverFnHi">10</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpufeatures.c.gcov.html#892">dt_add_cpufeatures</a></td>
+ <td class="coverFn"><a href="cpufeatures.c.gcov.html#945">dt_add_cpufeatures</a></td>
<td class="coverFnHi">11</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpufeatures.c.gcov.html#748">add_cpu_feature_nodeps</a></td>
+ <td class="coverFn"><a href="cpufeatures.c.gcov.html#801">add_cpu_feature_nodeps</a></td>
<td class="coverFnHi">432</td>
</tr>
</table>
diff --git a/coverage-report/core/cpufeatures.c.func.html b/coverage-report/core/cpufeatures.c.func.html
index a040883..cef1f33 100644
--- a/coverage-report/core/cpufeatures.c.func.html
+++ b/coverage-report/core/cpufeatures.c.func.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">118</td>
- <td class="headerCovTableEntry">139</td>
- <td class="headerCovTableEntryMed">84.9 %</td>
+ <td class="headerCovTableEntry">145</td>
+ <td class="headerCovTableEntryMed">81.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@@ -69,19 +69,19 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="cpufeatures.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="cpufeatures.c.gcov.html#748">add_cpu_feature_nodeps</a></td>
+ <td class="coverFn"><a href="cpufeatures.c.gcov.html#801">add_cpu_feature_nodeps</a></td>
<td class="coverFnHi">432</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpufeatures.c.gcov.html#860">add_cpufeatures</a></td>
+ <td class="coverFn"><a href="cpufeatures.c.gcov.html#913">add_cpufeatures</a></td>
<td class="coverFnHi">10</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpufeatures.c.gcov.html#795">add_cpufeatures_dependencies</a></td>
+ <td class="coverFn"><a href="cpufeatures.c.gcov.html#848">add_cpufeatures_dependencies</a></td>
<td class="coverFnHi">10</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpufeatures.c.gcov.html#892">dt_add_cpufeatures</a></td>
+ <td class="coverFn"><a href="cpufeatures.c.gcov.html#945">dt_add_cpufeatures</a></td>
<td class="coverFnHi">11</td>
</tr>
</table>
diff --git a/coverage-report/core/cpufeatures.c.gcov.html b/coverage-report/core/cpufeatures.c.gcov.html
index 4a89897..eea1b47 100644
--- a/coverage-report/core/cpufeatures.c.gcov.html
+++ b/coverage-report/core/cpufeatures.c.gcov.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">118</td>
- <td class="headerCovTableEntry">139</td>
- <td class="headerCovTableEntryMed">84.9 %</td>
+ <td class="headerCovTableEntry">145</td>
+ <td class="headerCovTableEntryMed">81.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@@ -91,967 +91,1027 @@
<a name="20"><span class="lineNum"> 20 </span> : : /* Device-tree visible constants follow */</a>
<a name="21"><span class="lineNum"> 21 </span> : : #define ISA_V2_07B 2070</a>
<a name="22"><span class="lineNum"> 22 </span> : : #define ISA_V3_0B 3000</a>
-<a name="23"><span class="lineNum"> 23 </span> : : </a>
-<a name="24"><span class="lineNum"> 24 </span> : : #define USABLE_PR (1U &lt;&lt; 0)</a>
-<a name="25"><span class="lineNum"> 25 </span> : : #define USABLE_OS (1U &lt;&lt; 1)</a>
-<a name="26"><span class="lineNum"> 26 </span> : : #define USABLE_HV (1U &lt;&lt; 2)</a>
-<a name="27"><span class="lineNum"> 27 </span> : : </a>
-<a name="28"><span class="lineNum"> 28 </span> : : #define HV_SUPPORT_HFSCR (1U &lt;&lt; 0)</a>
-<a name="29"><span class="lineNum"> 29 </span> : : #define OS_SUPPORT_FSCR (1U &lt;&lt; 0)</a>
-<a name="30"><span class="lineNum"> 30 </span> : : </a>
-<a name="31"><span class="lineNum"> 31 </span> : : /* Following are definitions for the match tables, not the DT binding itself */</a>
-<a name="32"><span class="lineNum"> 32 </span> : : #define ISA_BASE 0</a>
-<a name="33"><span class="lineNum"> 33 </span> : : </a>
-<a name="34"><span class="lineNum"> 34 </span> : : #define HV_NONE 0</a>
-<a name="35"><span class="lineNum"> 35 </span> : : #define HV_CUSTOM 1</a>
-<a name="36"><span class="lineNum"> 36 </span> : : #define HV_HFSCR 2</a>
-<a name="37"><span class="lineNum"> 37 </span> : : </a>
-<a name="38"><span class="lineNum"> 38 </span> : : #define OS_NONE 0</a>
-<a name="39"><span class="lineNum"> 39 </span> : : #define OS_CUSTOM 1</a>
-<a name="40"><span class="lineNum"> 40 </span> : : #define OS_FSCR 2</a>
-<a name="41"><span class="lineNum"> 41 </span> : : </a>
-<a name="42"><span class="lineNum"> 42 </span> : : /* CPU bitmasks for match table */</a>
-<a name="43"><span class="lineNum"> 43 </span> : : #define CPU_P8_DD1 (1U &lt;&lt; 0)</a>
-<a name="44"><span class="lineNum"> 44 </span> : : #define CPU_P8_DD2 (1U &lt;&lt; 1)</a>
-<a name="45"><span class="lineNum"> 45 </span> : : #define CPU_P9_DD1 (1U &lt;&lt; 2)</a>
-<a name="46"><span class="lineNum"> 46 </span> : : #define CPU_P9_DD2_0_1 (1U &lt;&lt; 3) // 2.01 or 2.1</a>
-<a name="47"><span class="lineNum"> 47 </span> : : #define CPU_P9P (1U &lt;&lt; 4)</a>
-<a name="48"><span class="lineNum"> 48 </span> : : #define CPU_P9_DD2_2 (1U &lt;&lt; 5)</a>
-<a name="49"><span class="lineNum"> 49 </span> : : #define CPU_P9_DD2_3 (1U &lt;&lt; 6)</a>
-<a name="50"><span class="lineNum"> 50 </span> : : </a>
-<a name="51"><span class="lineNum"> 51 </span> : : #define CPU_P9_DD2 (CPU_P9_DD2_0_1|CPU_P9_DD2_2|CPU_P9_DD2_3|CPU_P9P)</a>
+<a name="23"><span class="lineNum"> 23 </span> : : #define ISA_V3_1 3100</a>
+<a name="24"><span class="lineNum"> 24 </span> : : </a>
+<a name="25"><span class="lineNum"> 25 </span> : : #define USABLE_PR (1U &lt;&lt; 0)</a>
+<a name="26"><span class="lineNum"> 26 </span> : : #define USABLE_OS (1U &lt;&lt; 1)</a>
+<a name="27"><span class="lineNum"> 27 </span> : : #define USABLE_HV (1U &lt;&lt; 2)</a>
+<a name="28"><span class="lineNum"> 28 </span> : : </a>
+<a name="29"><span class="lineNum"> 29 </span> : : #define HV_SUPPORT_HFSCR (1U &lt;&lt; 0)</a>
+<a name="30"><span class="lineNum"> 30 </span> : : #define OS_SUPPORT_FSCR (1U &lt;&lt; 0)</a>
+<a name="31"><span class="lineNum"> 31 </span> : : </a>
+<a name="32"><span class="lineNum"> 32 </span> : : /* Following are definitions for the match tables, not the DT binding itself */</a>
+<a name="33"><span class="lineNum"> 33 </span> : : #define ISA_BASE 0</a>
+<a name="34"><span class="lineNum"> 34 </span> : : </a>
+<a name="35"><span class="lineNum"> 35 </span> : : #define HV_NONE 0</a>
+<a name="36"><span class="lineNum"> 36 </span> : : #define HV_CUSTOM 1</a>
+<a name="37"><span class="lineNum"> 37 </span> : : #define HV_HFSCR 2</a>
+<a name="38"><span class="lineNum"> 38 </span> : : </a>
+<a name="39"><span class="lineNum"> 39 </span> : : #define OS_NONE 0</a>
+<a name="40"><span class="lineNum"> 40 </span> : : #define OS_CUSTOM 1</a>
+<a name="41"><span class="lineNum"> 41 </span> : : #define OS_FSCR 2</a>
+<a name="42"><span class="lineNum"> 42 </span> : : </a>
+<a name="43"><span class="lineNum"> 43 </span> : : /* CPU bitmasks for match table */</a>
+<a name="44"><span class="lineNum"> 44 </span> : : #define CPU_P8_DD1 (1U &lt;&lt; 0)</a>
+<a name="45"><span class="lineNum"> 45 </span> : : #define CPU_P8_DD2 (1U &lt;&lt; 1)</a>
+<a name="46"><span class="lineNum"> 46 </span> : : #define CPU_P9_DD1 (1U &lt;&lt; 2)</a>
+<a name="47"><span class="lineNum"> 47 </span> : : #define CPU_P9_DD2_0_1 (1U &lt;&lt; 3) // 2.01 or 2.1</a>
+<a name="48"><span class="lineNum"> 48 </span> : : #define CPU_P9P (1U &lt;&lt; 4)</a>
+<a name="49"><span class="lineNum"> 49 </span> : : #define CPU_P9_DD2_2 (1U &lt;&lt; 5)</a>
+<a name="50"><span class="lineNum"> 50 </span> : : #define CPU_P9_DD2_3 (1U &lt;&lt; 6)</a>
+<a name="51"><span class="lineNum"> 51 </span> : : #define CPU_P10 (1U &lt;&lt; 7)</a>
<a name="52"><span class="lineNum"> 52 </span> : : </a>
-<a name="53"><span class="lineNum"> 53 </span> : : #define CPU_P8 (CPU_P8_DD1|CPU_P8_DD2)</a>
-<a name="54"><span class="lineNum"> 54 </span> : : #define CPU_P9 (CPU_P9_DD1|CPU_P9_DD2|CPU_P9P)</a>
-<a name="55"><span class="lineNum"> 55 </span> : : #define CPU_ALL (CPU_P8|CPU_P9)</a>
-<a name="56"><span class="lineNum"> 56 </span> : : </a>
-<a name="57"><span class="lineNum"> 57 </span> : : struct cpu_feature {</a>
-<a name="58"><span class="lineNum"> 58 </span> : : const char *name;</a>
-<a name="59"><span class="lineNum"> 59 </span> : : uint32_t cpus_supported;</a>
-<a name="60"><span class="lineNum"> 60 </span> : : uint32_t isa;</a>
-<a name="61"><span class="lineNum"> 61 </span> : : uint32_t usable_privilege;</a>
-<a name="62"><span class="lineNum"> 62 </span> : : uint32_t hv_support;</a>
-<a name="63"><span class="lineNum"> 63 </span> : : uint32_t os_support;</a>
-<a name="64"><span class="lineNum"> 64 </span> : : uint32_t hfscr_bit_nr;</a>
-<a name="65"><span class="lineNum"> 65 </span> : : uint32_t fscr_bit_nr;</a>
-<a name="66"><span class="lineNum"> 66 </span> : : uint32_t hwcap_bit_nr;</a>
-<a name="67"><span class="lineNum"> 67 </span> : : const char *dependencies_names; /* space-delimited names */</a>
-<a name="68"><span class="lineNum"> 68 </span> : : };</a>
-<a name="69"><span class="lineNum"> 69 </span> : : </a>
-<a name="70"><span class="lineNum"> 70 </span> : : /*</a>
-<a name="71"><span class="lineNum"> 71 </span> : : * The base (or NULL) cpu feature set is the CPU features available</a>
-<a name="72"><span class="lineNum"> 72 </span> : : * when no child nodes of the /cpus/ibm,powerpc-cpu-features node exist. The</a>
-<a name="73"><span class="lineNum"> 73 </span> : : * base feature set is POWER8 (ISAv2.07B), less features that are listed</a>
-<a name="74"><span class="lineNum"> 74 </span> : : * explicitly.</a>
-<a name="75"><span class="lineNum"> 75 </span> : : *</a>
-<a name="76"><span class="lineNum"> 76 </span> : : * XXX: currently, the feature dependencies are not necessarily captured</a>
-<a name="77"><span class="lineNum"> 77 </span> : : * exactly or completely. This is somewhat acceptable because all</a>
-<a name="78"><span class="lineNum"> 78 </span> : : * implementations must be aware of all these features.</a>
-<a name="79"><span class="lineNum"> 79 </span> : : */</a>
-<a name="80"><span class="lineNum"> 80 </span> : : static const struct cpu_feature cpu_features_table[] = {</a>
-<a name="81"><span class="lineNum"> 81 </span> : : /*</a>
-<a name="82"><span class="lineNum"> 82 </span> : : * Big endian as in ISAv2.07B, MSR_LE=0</a>
-<a name="83"><span class="lineNum"> 83 </span> : : */</a>
-<a name="84"><span class="lineNum"> 84 </span> : : { &quot;big-endian&quot;,</a>
-<a name="85"><span class="lineNum"> 85 </span> : : CPU_ALL,</a>
-<a name="86"><span class="lineNum"> 86 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="87"><span class="lineNum"> 87 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="88"><span class="lineNum"> 88 </span> : : -1, -1, -1,</a>
-<a name="89"><span class="lineNum"> 89 </span> : : NULL, },</a>
-<a name="90"><span class="lineNum"> 90 </span> : : </a>
-<a name="91"><span class="lineNum"> 91 </span> : : /*</a>
-<a name="92"><span class="lineNum"> 92 </span> : : * Little endian as in ISAv2.07B, MSR_LE=1.</a>
-<a name="93"><span class="lineNum"> 93 </span> : : *</a>
-<a name="94"><span class="lineNum"> 94 </span> : : * When both big and little endian are defined, there is an LPCR ILE</a>
-<a name="95"><span class="lineNum"> 95 </span> : : * bit and implementation specific way to switch HILE mode, MSR_SLE,</a>
-<a name="96"><span class="lineNum"> 96 </span> : : * etc.</a>
-<a name="97"><span class="lineNum"> 97 </span> : : */</a>
-<a name="98"><span class="lineNum"> 98 </span> : : { &quot;little-endian&quot;,</a>
-<a name="99"><span class="lineNum"> 99 </span> : : CPU_ALL,</a>
-<a name="100"><span class="lineNum"> 100 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="101"><span class="lineNum"> 101 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="102"><span class="lineNum"> 102 </span> : : -1, -1, -1,</a>
-<a name="103"><span class="lineNum"> 103 </span> : : NULL, },</a>
-<a name="104"><span class="lineNum"> 104 </span> : : </a>
-<a name="105"><span class="lineNum"> 105 </span> : : /*</a>
-<a name="106"><span class="lineNum"> 106 </span> : : * MSR_HV=1 mode as in ISAv2.07B (i.e., hypervisor privileged</a>
-<a name="107"><span class="lineNum"> 107 </span> : : * instructions and registers).</a>
-<a name="108"><span class="lineNum"> 108 </span> : : */</a>
-<a name="109"><span class="lineNum"> 109 </span> : : { &quot;hypervisor&quot;,</a>
-<a name="110"><span class="lineNum"> 110 </span> : : CPU_ALL,</a>
-<a name="111"><span class="lineNum"> 111 </span> : : ISA_BASE, USABLE_HV,</a>
-<a name="112"><span class="lineNum"> 112 </span> : : HV_CUSTOM, OS_NONE,</a>
-<a name="113"><span class="lineNum"> 113 </span> : : -1, -1, -1,</a>
-<a name="114"><span class="lineNum"> 114 </span> : : NULL, },</a>
-<a name="115"><span class="lineNum"> 115 </span> : : </a>
-<a name="116"><span class="lineNum"> 116 </span> : : /*</a>
-<a name="117"><span class="lineNum"> 117 </span> : : * ISAv2.07B interrupt vectors, registers, and control registers</a>
-<a name="118"><span class="lineNum"> 118 </span> : : * (e.g., AIL, ILE, HV, etc LPCR bits).</a>
-<a name="119"><span class="lineNum"> 119 </span> : : *</a>
-<a name="120"><span class="lineNum"> 120 </span> : : * This does not necessarily specify all possible interrupt types.</a>
-<a name="121"><span class="lineNum"> 121 </span> : : * floating-point, for example requires some ways to handle floating</a>
-<a name="122"><span class="lineNum"> 122 </span> : : * point exceptions, but the low level details of interrupt handler</a>
-<a name="123"><span class="lineNum"> 123 </span> : : * is not a dependency there. There will always be *some* interrupt</a>
-<a name="124"><span class="lineNum"> 124 </span> : : * handler, (and some way to provide memory magagement, etc.).</a>
-<a name="125"><span class="lineNum"> 125 </span> : : */</a>
-<a name="126"><span class="lineNum"> 126 </span> : : { &quot;interrupt-facilities&quot;,</a>
-<a name="127"><span class="lineNum"> 127 </span> : : CPU_ALL,</a>
-<a name="128"><span class="lineNum"> 128 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
-<a name="129"><span class="lineNum"> 129 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="130"><span class="lineNum"> 130 </span> : : -1, -1, -1,</a>
-<a name="131"><span class="lineNum"> 131 </span> : : NULL, },</a>
-<a name="132"><span class="lineNum"> 132 </span> : : </a>
-<a name="133"><span class="lineNum"> 133 </span> : : { &quot;smt&quot;,</a>
-<a name="134"><span class="lineNum"> 134 </span> : : CPU_ALL,</a>
-<a name="135"><span class="lineNum"> 135 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="136"><span class="lineNum"> 136 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="137"><span class="lineNum"> 137 </span> : : -1, -1, 14,</a>
-<a name="138"><span class="lineNum"> 138 </span> : : NULL, },</a>
-<a name="139"><span class="lineNum"> 139 </span> : : </a>
-<a name="140"><span class="lineNum"> 140 </span> : : /*</a>
-<a name="141"><span class="lineNum"> 141 </span> : : * ISAv2.07B Program Priority Registers (PPR)</a>
-<a name="142"><span class="lineNum"> 142 </span> : : * PPR and associated control registers (e.g. RPR, PSPB),</a>
-<a name="143"><span class="lineNum"> 143 </span> : : * priority &quot;or&quot; instructions, etc.</a>
-<a name="144"><span class="lineNum"> 144 </span> : : */</a>
-<a name="145"><span class="lineNum"> 145 </span> : : { &quot;program-priority-register&quot;,</a>
-<a name="146"><span class="lineNum"> 146 </span> : : CPU_ALL,</a>
-<a name="147"><span class="lineNum"> 147 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="148"><span class="lineNum"> 148 </span> : : HV_NONE, OS_NONE,</a>
-<a name="149"><span class="lineNum"> 149 </span> : : -1, -1, -1,</a>
-<a name="150"><span class="lineNum"> 150 </span> : : NULL, },</a>
-<a name="151"><span class="lineNum"> 151 </span> : : </a>
-<a name="152"><span class="lineNum"> 152 </span> : : /*</a>
-<a name="153"><span class="lineNum"> 153 </span> : : * ISAv2.07B Book3S Chapter 5.7.9.1. Virtual Page Class Key Protecion</a>
-<a name="154"><span class="lineNum"> 154 </span> : : * AMR, IAMR, AMOR, UAMOR, etc registers and MMU key bits.</a>
-<a name="155"><span class="lineNum"> 155 </span> : : */</a>
-<a name="156"><span class="lineNum"> 156 </span> : : { &quot;virtual-page-class-key-protection&quot;,</a>
-<a name="157"><span class="lineNum"> 157 </span> : : CPU_ALL,</a>
-<a name="158"><span class="lineNum"> 158 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="159"><span class="lineNum"> 159 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="160"><span class="lineNum"> 160 </span> : : -1, -1, -1,</a>
-<a name="161"><span class="lineNum"> 161 </span> : : NULL, },</a>
-<a name="162"><span class="lineNum"> 162 </span> : : </a>
-<a name="163"><span class="lineNum"> 163 </span> : : /*</a>
-<a name="164"><span class="lineNum"> 164 </span> : : * ISAv2.07B SAO storage control attribute</a>
-<a name="165"><span class="lineNum"> 165 </span> : : */</a>
-<a name="166"><span class="lineNum"> 166 </span> : : { &quot;strong-access-ordering&quot;,</a>
-<a name="167"><span class="lineNum"> 167 </span> : : CPU_ALL &amp; ~CPU_P9_DD1,</a>
-<a name="168"><span class="lineNum"> 168 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="169"><span class="lineNum"> 169 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="170"><span class="lineNum"> 170 </span> : : -1, -1, -1,</a>
-<a name="171"><span class="lineNum"> 171 </span> : : NULL, },</a>
-<a name="172"><span class="lineNum"> 172 </span> : : </a>
-<a name="173"><span class="lineNum"> 173 </span> : : /*</a>
-<a name="174"><span class="lineNum"> 174 </span> : : * ISAv2.07B no-execute storage control attribute</a>
-<a name="175"><span class="lineNum"> 175 </span> : : */</a>
-<a name="176"><span class="lineNum"> 176 </span> : : { &quot;no-execute&quot;,</a>
-<a name="177"><span class="lineNum"> 177 </span> : : CPU_ALL,</a>
-<a name="178"><span class="lineNum"> 178 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
-<a name="179"><span class="lineNum"> 179 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="180"><span class="lineNum"> 180 </span> : : -1, -1, -1,</a>
-<a name="181"><span class="lineNum"> 181 </span> : : NULL, },</a>
-<a name="182"><span class="lineNum"> 182 </span> : : </a>
-<a name="183"><span class="lineNum"> 183 </span> : : /*</a>
-<a name="184"><span class="lineNum"> 184 </span> : : * Cache inhibited attribute supported on large pages.</a>
-<a name="185"><span class="lineNum"> 185 </span> : : */</a>
-<a name="186"><span class="lineNum"> 186 </span> : : { &quot;cache-inhibited-large-page&quot;,</a>
-<a name="187"><span class="lineNum"> 187 </span> : : CPU_ALL,</a>
-<a name="188"><span class="lineNum"> 188 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
-<a name="189"><span class="lineNum"> 189 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="190"><span class="lineNum"> 190 </span> : : -1, -1, -1,</a>
-<a name="191"><span class="lineNum"> 191 </span> : : NULL, },</a>
-<a name="192"><span class="lineNum"> 192 </span> : : </a>
-<a name="193"><span class="lineNum"> 193 </span> : : /*</a>
-<a name="194"><span class="lineNum"> 194 </span> : : * ISAv2.07B Book3S Chapter 8. Debug Facilities</a>
-<a name="195"><span class="lineNum"> 195 </span> : : * CIEA, CIABR, DEAW, MEte, trace interrupt, etc.</a>
-<a name="196"><span class="lineNum"> 196 </span> : : * Except CFAR, branch tracing.</a>
-<a name="197"><span class="lineNum"> 197 </span> : : */</a>
-<a name="198"><span class="lineNum"> 198 </span> : : { &quot;debug-facilities&quot;,</a>
-<a name="199"><span class="lineNum"> 199 </span> : : CPU_ALL,</a>
-<a name="200"><span class="lineNum"> 200 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
-<a name="201"><span class="lineNum"> 201 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="202"><span class="lineNum"> 202 </span> : : -1, -1, -1,</a>
-<a name="203"><span class="lineNum"> 203 </span> : : NULL, },</a>
-<a name="204"><span class="lineNum"> 204 </span> : : </a>
-<a name="205"><span class="lineNum"> 205 </span> : : /*</a>
-<a name="206"><span class="lineNum"> 206 </span> : : * ISAv2.07B CFAR</a>
-<a name="207"><span class="lineNum"> 207 </span> : : */</a>
-<a name="208"><span class="lineNum"> 208 </span> : : { &quot;come-from-address-register&quot;,</a>
-<a name="209"><span class="lineNum"> 209 </span> : : CPU_ALL,</a>
-<a name="210"><span class="lineNum"> 210 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
-<a name="211"><span class="lineNum"> 211 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="212"><span class="lineNum"> 212 </span> : : -1, -1, -1,</a>
-<a name="213"><span class="lineNum"> 213 </span> : : &quot;debug-facilities&quot;, },</a>
-<a name="214"><span class="lineNum"> 214 </span> : : </a>
-<a name="215"><span class="lineNum"> 215 </span> : : /*</a>
-<a name="216"><span class="lineNum"> 216 </span> : : * ISAv2.07B Branch tracing (optional in ISA)</a>
-<a name="217"><span class="lineNum"> 217 </span> : : */</a>
-<a name="218"><span class="lineNum"> 218 </span> : : { &quot;branch-tracing&quot;,</a>
-<a name="219"><span class="lineNum"> 219 </span> : : CPU_ALL,</a>
-<a name="220"><span class="lineNum"> 220 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
-<a name="221"><span class="lineNum"> 221 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="222"><span class="lineNum"> 222 </span> : : -1, -1, -1,</a>
-<a name="223"><span class="lineNum"> 223 </span> : : &quot;debug-facilities&quot;, },</a>
-<a name="224"><span class="lineNum"> 224 </span> : : </a>
-<a name="225"><span class="lineNum"> 225 </span> : : /*</a>
-<a name="226"><span class="lineNum"> 226 </span> : : * ISAv2.07B Floating-point Facility</a>
-<a name="227"><span class="lineNum"> 227 </span> : : */</a>
-<a name="228"><span class="lineNum"> 228 </span> : : { &quot;floating-point&quot;,</a>
-<a name="229"><span class="lineNum"> 229 </span> : : CPU_ALL,</a>
-<a name="230"><span class="lineNum"> 230 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="231"><span class="lineNum"> 231 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="232"><span class="lineNum"> 232 </span> : : PPC_BITLSHIFT(63), -1, 27,</a>
-<a name="233"><span class="lineNum"> 233 </span> : : NULL, },</a>
-<a name="234"><span class="lineNum"> 234 </span> : : </a>
-<a name="235"><span class="lineNum"> 235 </span> : : /*</a>
-<a name="236"><span class="lineNum"> 236 </span> : : * ISAv2.07B Vector Facility (VMX)</a>
-<a name="237"><span class="lineNum"> 237 </span> : : */</a>
-<a name="238"><span class="lineNum"> 238 </span> : : { &quot;vector&quot;,</a>
-<a name="239"><span class="lineNum"> 239 </span> : : CPU_ALL,</a>
-<a name="240"><span class="lineNum"> 240 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="241"><span class="lineNum"> 241 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="242"><span class="lineNum"> 242 </span> : : PPC_BITLSHIFT(62), -1, 28,</a>
-<a name="243"><span class="lineNum"> 243 </span> : : &quot;floating-point&quot;, },</a>
-<a name="244"><span class="lineNum"> 244 </span> : : </a>
-<a name="245"><span class="lineNum"> 245 </span> : : /*</a>
-<a name="246"><span class="lineNum"> 246 </span> : : * ISAv2.07B Vector-scalar Facility (VSX)</a>
-<a name="247"><span class="lineNum"> 247 </span> : : */</a>
-<a name="248"><span class="lineNum"> 248 </span> : : { &quot;vector-scalar&quot;,</a>
-<a name="249"><span class="lineNum"> 249 </span> : : CPU_ALL,</a>
-<a name="250"><span class="lineNum"> 250 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="251"><span class="lineNum"> 251 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="252"><span class="lineNum"> 252 </span> : : -1, -1, 7,</a>
-<a name="253"><span class="lineNum"> 253 </span> : : &quot;vector&quot;, },</a>
-<a name="254"><span class="lineNum"> 254 </span> : : </a>
-<a name="255"><span class="lineNum"> 255 </span> : : { &quot;vector-crypto&quot;,</a>
-<a name="256"><span class="lineNum"> 256 </span> : : CPU_ALL,</a>
-<a name="257"><span class="lineNum"> 257 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="258"><span class="lineNum"> 258 </span> : : HV_NONE, OS_NONE,</a>
-<a name="259"><span class="lineNum"> 259 </span> : : -1, -1, 57,</a>
-<a name="260"><span class="lineNum"> 260 </span> : : &quot;vector&quot;, },</a>
-<a name="261"><span class="lineNum"> 261 </span> : : </a>
-<a name="262"><span class="lineNum"> 262 </span> : : /*</a>
-<a name="263"><span class="lineNum"> 263 </span> : : * ISAv2.07B Quadword Load and Store instructions</a>
-<a name="264"><span class="lineNum"> 264 </span> : : * including lqarx/stdqcx. instructions.</a>
-<a name="265"><span class="lineNum"> 265 </span> : : */</a>
-<a name="266"><span class="lineNum"> 266 </span> : : { &quot;quadword-load-store&quot;,</a>
-<a name="267"><span class="lineNum"> 267 </span> : : CPU_ALL,</a>
-<a name="268"><span class="lineNum"> 268 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="269"><span class="lineNum"> 269 </span> : : HV_NONE, OS_NONE,</a>
-<a name="270"><span class="lineNum"> 270 </span> : : -1, -1, -1,</a>
-<a name="271"><span class="lineNum"> 271 </span> : : NULL, },</a>
-<a name="272"><span class="lineNum"> 272 </span> : : </a>
-<a name="273"><span class="lineNum"> 273 </span> : : /*</a>
-<a name="274"><span class="lineNum"> 274 </span> : : * ISAv2.07B Binary Coded Decimal (BCD)</a>
-<a name="275"><span class="lineNum"> 275 </span> : : * BCD fixed point instructions</a>
-<a name="276"><span class="lineNum"> 276 </span> : : */</a>
-<a name="277"><span class="lineNum"> 277 </span> : : { &quot;decimal-integer&quot;,</a>
-<a name="278"><span class="lineNum"> 278 </span> : : CPU_ALL,</a>
-<a name="279"><span class="lineNum"> 279 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="280"><span class="lineNum"> 280 </span> : : HV_NONE, OS_NONE,</a>
-<a name="281"><span class="lineNum"> 281 </span> : : -1, -1, -1,</a>
-<a name="282"><span class="lineNum"> 282 </span> : : NULL, },</a>
-<a name="283"><span class="lineNum"> 283 </span> : : </a>
-<a name="284"><span class="lineNum"> 284 </span> : : /*</a>
-<a name="285"><span class="lineNum"> 285 </span> : : * ISAv2.07B Decimal floating-point Facility (DFP)</a>
-<a name="286"><span class="lineNum"> 286 </span> : : */</a>
-<a name="287"><span class="lineNum"> 287 </span> : : { &quot;decimal-floating-point&quot;,</a>
-<a name="288"><span class="lineNum"> 288 </span> : : CPU_ALL,</a>
-<a name="289"><span class="lineNum"> 289 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="290"><span class="lineNum"> 290 </span> : : HV_NONE, OS_NONE,</a>
-<a name="291"><span class="lineNum"> 291 </span> : : -1, -1, 10,</a>
-<a name="292"><span class="lineNum"> 292 </span> : : &quot;floating-point&quot;, },</a>
-<a name="293"><span class="lineNum"> 293 </span> : : </a>
-<a name="294"><span class="lineNum"> 294 </span> : : /*</a>
-<a name="295"><span class="lineNum"> 295 </span> : : * ISAv2.07B</a>
-<a name="296"><span class="lineNum"> 296 </span> : : * DSCR, default data prefetch LPCR, etc</a>
-<a name="297"><span class="lineNum"> 297 </span> : : */</a>
-<a name="298"><span class="lineNum"> 298 </span> : : { &quot;data-stream-control-register&quot;,</a>
-<a name="299"><span class="lineNum"> 299 </span> : : CPU_ALL,</a>
-<a name="300"><span class="lineNum"> 300 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="301"><span class="lineNum"> 301 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="302"><span class="lineNum"> 302 </span> : : PPC_BITLSHIFT(61), PPC_BITLSHIFT(61), 61,</a>
-<a name="303"><span class="lineNum"> 303 </span> : : NULL, },</a>
-<a name="304"><span class="lineNum"> 304 </span> : : </a>
-<a name="305"><span class="lineNum"> 305 </span> : : /*</a>
-<a name="306"><span class="lineNum"> 306 </span> : : * ISAv2.07B Branch History Rolling Buffer (BHRB)</a>
-<a name="307"><span class="lineNum"> 307 </span> : : */</a>
-<a name="308"><span class="lineNum"> 308 </span> : : { &quot;branch-history-rolling-buffer&quot;,</a>
-<a name="309"><span class="lineNum"> 309 </span> : : CPU_ALL,</a>
-<a name="310"><span class="lineNum"> 310 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="311"><span class="lineNum"> 311 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="312"><span class="lineNum"> 312 </span> : : PPC_BITLSHIFT(59), -1, -1,</a>
-<a name="313"><span class="lineNum"> 313 </span> : : NULL, },</a>
-<a name="314"><span class="lineNum"> 314 </span> : : </a>
-<a name="315"><span class="lineNum"> 315 </span> : : /*</a>
-<a name="316"><span class="lineNum"> 316 </span> : : * ISAv2.07B Transactional Memory Facility (TM or HTM)</a>
-<a name="317"><span class="lineNum"> 317 </span> : : */</a>
-<a name="318"><span class="lineNum"> 318 </span> : : { &quot;transactional-memory&quot;,</a>
-<a name="319"><span class="lineNum"> 319 </span> : : CPU_P8, /* P9 support is not enabled yet */</a>
-<a name="320"><span class="lineNum"> 320 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="321"><span class="lineNum"> 321 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="322"><span class="lineNum"> 322 </span> : : PPC_BITLSHIFT(58), -1, 62,</a>
-<a name="323"><span class="lineNum"> 323 </span> : : NULL, },</a>
-<a name="324"><span class="lineNum"> 324 </span> : : </a>
-<a name="325"><span class="lineNum"> 325 </span> : : /*</a>
-<a name="326"><span class="lineNum"> 326 </span> : : * ISAv3.0B TM additions</a>
-<a name="327"><span class="lineNum"> 327 </span> : : * TEXASR bit 17, self-induced vs external footprint overflow</a>
-<a name="328"><span class="lineNum"> 328 </span> : : */</a>
-<a name="329"><span class="lineNum"> 329 </span> : : { &quot;transactional-memory-v3&quot;,</a>
-<a name="330"><span class="lineNum"> 330 </span> : : 0,</a>
-<a name="331"><span class="lineNum"> 331 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="332"><span class="lineNum"> 332 </span> : : HV_NONE, OS_NONE,</a>
-<a name="333"><span class="lineNum"> 333 </span> : : -1, -1, -1,</a>
-<a name="334"><span class="lineNum"> 334 </span> : : &quot;transactional-memory&quot;, },</a>
-<a name="335"><span class="lineNum"> 335 </span> : : </a>
-<a name="336"><span class="lineNum"> 336 </span> : : /*</a>
-<a name="337"><span class="lineNum"> 337 </span> : : * ISAv2.07B Event-Based Branch Facility (EBB)</a>
-<a name="338"><span class="lineNum"> 338 </span> : : */</a>
-<a name="339"><span class="lineNum"> 339 </span> : : { &quot;event-based-branch&quot;,</a>
-<a name="340"><span class="lineNum"> 340 </span> : : CPU_ALL,</a>
-<a name="341"><span class="lineNum"> 341 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="342"><span class="lineNum"> 342 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="343"><span class="lineNum"> 343 </span> : : PPC_BITLSHIFT(56), PPC_BITLSHIFT(56), 60,</a>
-<a name="344"><span class="lineNum"> 344 </span> : : NULL, },</a>
-<a name="345"><span class="lineNum"> 345 </span> : : </a>
-<a name="346"><span class="lineNum"> 346 </span> : : /*</a>
-<a name="347"><span class="lineNum"> 347 </span> : : * ISAv2.07B Target Address Register (TAR)</a>
-<a name="348"><span class="lineNum"> 348 </span> : : */</a>
-<a name="349"><span class="lineNum"> 349 </span> : : { &quot;target-address-register&quot;,</a>
-<a name="350"><span class="lineNum"> 350 </span> : : CPU_ALL,</a>
-<a name="351"><span class="lineNum"> 351 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="352"><span class="lineNum"> 352 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="353"><span class="lineNum"> 353 </span> : : PPC_BITLSHIFT(55), PPC_BITLSHIFT(55), 58,</a>
-<a name="354"><span class="lineNum"> 354 </span> : : NULL, },</a>
-<a name="355"><span class="lineNum"> 355 </span> : : </a>
-<a name="356"><span class="lineNum"> 356 </span> : : /*</a>
-<a name="357"><span class="lineNum"> 357 </span> : : * ISAv2.07B Control Register (CTRL)</a>
-<a name="358"><span class="lineNum"> 358 </span> : : */</a>
-<a name="359"><span class="lineNum"> 359 </span> : : { &quot;control-register&quot;,</a>
-<a name="360"><span class="lineNum"> 360 </span> : : CPU_ALL,</a>
-<a name="361"><span class="lineNum"> 361 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
-<a name="362"><span class="lineNum"> 362 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="363"><span class="lineNum"> 363 </span> : : -1, -1, -1,</a>
-<a name="364"><span class="lineNum"> 364 </span> : : NULL, },</a>
-<a name="365"><span class="lineNum"> 365 </span> : : </a>
-<a name="366"><span class="lineNum"> 366 </span> : : /*</a>
-<a name="367"><span class="lineNum"> 367 </span> : : * ISAv2.07B Book3S Chapter 11. Processor Control.</a>
-<a name="368"><span class="lineNum"> 368 </span> : : * msgsnd, msgsndp, doorbell, etc.</a>
-<a name="369"><span class="lineNum"> 369 </span> : : *</a>
-<a name="370"><span class="lineNum"> 370 </span> : : * ISAv3.0B is not compatible (different addressing, HFSCR required</a>
-<a name="371"><span class="lineNum"> 371 </span> : : * for msgsndp).</a>
-<a name="372"><span class="lineNum"> 372 </span> : : */</a>
-<a name="373"><span class="lineNum"> 373 </span> : : { &quot;processor-control-facility&quot;,</a>
-<a name="374"><span class="lineNum"> 374 </span> : : CPU_P8_DD2, /* P8 DD1 has no dbell */</a>
-<a name="375"><span class="lineNum"> 375 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
-<a name="376"><span class="lineNum"> 376 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="377"><span class="lineNum"> 377 </span> : : -1, -1, -1,</a>
-<a name="378"><span class="lineNum"> 378 </span> : : NULL, },</a>
-<a name="379"><span class="lineNum"> 379 </span> : : </a>
-<a name="380"><span class="lineNum"> 380 </span> : : /*</a>
-<a name="381"><span class="lineNum"> 381 </span> : : * ISAv2.07B PURR, SPURR registers</a>
-<a name="382"><span class="lineNum"> 382 </span> : : */</a>
-<a name="383"><span class="lineNum"> 383 </span> : : { &quot;processor-utilization-of-resources-register&quot;,</a>
-<a name="384"><span class="lineNum"> 384 </span> : : CPU_ALL,</a>
-<a name="385"><span class="lineNum"> 385 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
-<a name="386"><span class="lineNum"> 386 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="387"><span class="lineNum"> 387 </span> : : -1, -1, -1,</a>
-<a name="388"><span class="lineNum"> 388 </span> : : NULL, },</a>
-<a name="389"><span class="lineNum"> 389 </span> : : </a>
-<a name="390"><span class="lineNum"> 390 </span> : : /*</a>
-<a name="391"><span class="lineNum"> 391 </span> : : * POWER8 initiate coprocessor store word indexed (icswx) instruction</a>
-<a name="392"><span class="lineNum"> 392 </span> : : */</a>
-<a name="393"><span class="lineNum"> 393 </span> : : { &quot;coprocessor-icswx&quot;,</a>
-<a name="394"><span class="lineNum"> 394 </span> : : CPU_P8,</a>
-<a name="395"><span class="lineNum"> 395 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
-<a name="396"><span class="lineNum"> 396 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="397"><span class="lineNum"> 397 </span> : : -1, -1, -1,</a>
-<a name="398"><span class="lineNum"> 398 </span> : : NULL, },</a>
-<a name="399"><span class="lineNum"> 399 </span> : : </a>
-<a name="400"><span class="lineNum"> 400 </span> : : /*</a>
-<a name="401"><span class="lineNum"> 401 </span> : : * ISAv2.07B hash based MMU and all instructions, registers,</a>
-<a name="402"><span class="lineNum"> 402 </span> : : * data structures, exceptions, etc.</a>
-<a name="403"><span class="lineNum"> 403 </span> : : */</a>
-<a name="404"><span class="lineNum"> 404 </span> : : { &quot;mmu-hash&quot;,</a>
-<a name="405"><span class="lineNum"> 405 </span> : : CPU_P8,</a>
-<a name="406"><span class="lineNum"> 406 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
-<a name="407"><span class="lineNum"> 407 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="408"><span class="lineNum"> 408 </span> : : -1, -1, -1,</a>
-<a name="409"><span class="lineNum"> 409 </span> : : NULL, },</a>
-<a name="410"><span class="lineNum"> 410 </span> : : </a>
-<a name="411"><span class="lineNum"> 411 </span> : : /*</a>
-<a name="412"><span class="lineNum"> 412 </span> : : * POWER8 MCE / machine check exception.</a>
-<a name="413"><span class="lineNum"> 413 </span> : : */</a>
-<a name="414"><span class="lineNum"> 414 </span> : : { &quot;machine-check-power8&quot;,</a>
-<a name="415"><span class="lineNum"> 415 </span> : : CPU_P8,</a>
-<a name="416"><span class="lineNum"> 416 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
-<a name="417"><span class="lineNum"> 417 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="418"><span class="lineNum"> 418 </span> : : -1, -1, -1,</a>
-<a name="419"><span class="lineNum"> 419 </span> : : NULL, },</a>
-<a name="420"><span class="lineNum"> 420 </span> : : </a>
-<a name="421"><span class="lineNum"> 421 </span> : : /*</a>
-<a name="422"><span class="lineNum"> 422 </span> : : * POWER8 PMU / performance monitor unit.</a>
-<a name="423"><span class="lineNum"> 423 </span> : : */</a>
-<a name="424"><span class="lineNum"> 424 </span> : : { &quot;performance-monitor-power8&quot;,</a>
-<a name="425"><span class="lineNum"> 425 </span> : : CPU_P8,</a>
-<a name="426"><span class="lineNum"> 426 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
-<a name="427"><span class="lineNum"> 427 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="428"><span class="lineNum"> 428 </span> : : -1, -1, -1,</a>
-<a name="429"><span class="lineNum"> 429 </span> : : NULL, },</a>
-<a name="430"><span class="lineNum"> 430 </span> : : </a>
-<a name="431"><span class="lineNum"> 431 </span> : : /*</a>
-<a name="432"><span class="lineNum"> 432 </span> : : * ISAv2.07B alignment interrupts set DSISR register</a>
-<a name="433"><span class="lineNum"> 433 </span> : : *</a>
-<a name="434"><span class="lineNum"> 434 </span> : : * POWER CPUs do not used this, and it's removed from ISAv3.0B.</a>
+<a name="53"><span class="lineNum"> 53 </span> : : #define CPU_P9_DD2 (CPU_P9_DD2_0_1|CPU_P9_DD2_2|CPU_P9_DD2_3|CPU_P9P)</a>
+<a name="54"><span class="lineNum"> 54 </span> : : </a>
+<a name="55"><span class="lineNum"> 55 </span> : : #define CPU_P8 (CPU_P8_DD1|CPU_P8_DD2)</a>
+<a name="56"><span class="lineNum"> 56 </span> : : #define CPU_P9 (CPU_P9_DD1|CPU_P9_DD2|CPU_P9P)</a>
+<a name="57"><span class="lineNum"> 57 </span> : : #define CPU_ALL (CPU_P8|CPU_P9|CPU_P10)</a>
+<a name="58"><span class="lineNum"> 58 </span> : : </a>
+<a name="59"><span class="lineNum"> 59 </span> : : struct cpu_feature {</a>
+<a name="60"><span class="lineNum"> 60 </span> : : const char *name;</a>
+<a name="61"><span class="lineNum"> 61 </span> : : uint32_t cpus_supported;</a>
+<a name="62"><span class="lineNum"> 62 </span> : : uint32_t isa;</a>
+<a name="63"><span class="lineNum"> 63 </span> : : uint32_t usable_privilege;</a>
+<a name="64"><span class="lineNum"> 64 </span> : : uint32_t hv_support;</a>
+<a name="65"><span class="lineNum"> 65 </span> : : uint32_t os_support;</a>
+<a name="66"><span class="lineNum"> 66 </span> : : uint32_t hfscr_bit_nr;</a>
+<a name="67"><span class="lineNum"> 67 </span> : : uint32_t fscr_bit_nr;</a>
+<a name="68"><span class="lineNum"> 68 </span> : : uint32_t hwcap_bit_nr;</a>
+<a name="69"><span class="lineNum"> 69 </span> : : const char *dependencies_names; /* space-delimited names */</a>
+<a name="70"><span class="lineNum"> 70 </span> : : };</a>
+<a name="71"><span class="lineNum"> 71 </span> : : </a>
+<a name="72"><span class="lineNum"> 72 </span> : : /*</a>
+<a name="73"><span class="lineNum"> 73 </span> : : * The base (or NULL) cpu feature set is the CPU features available</a>
+<a name="74"><span class="lineNum"> 74 </span> : : * when no child nodes of the /cpus/ibm,powerpc-cpu-features node exist. The</a>
+<a name="75"><span class="lineNum"> 75 </span> : : * base feature set is POWER8 (ISAv2.07B), less features that are listed</a>
+<a name="76"><span class="lineNum"> 76 </span> : : * explicitly.</a>
+<a name="77"><span class="lineNum"> 77 </span> : : *</a>
+<a name="78"><span class="lineNum"> 78 </span> : : * XXX: currently, the feature dependencies are not necessarily captured</a>
+<a name="79"><span class="lineNum"> 79 </span> : : * exactly or completely. This is somewhat acceptable because all</a>
+<a name="80"><span class="lineNum"> 80 </span> : : * implementations must be aware of all these features.</a>
+<a name="81"><span class="lineNum"> 81 </span> : : */</a>
+<a name="82"><span class="lineNum"> 82 </span> : : static const struct cpu_feature cpu_features_table[] = {</a>
+<a name="83"><span class="lineNum"> 83 </span> : : /*</a>
+<a name="84"><span class="lineNum"> 84 </span> : : * Big endian as in ISAv2.07B, MSR_LE=0</a>
+<a name="85"><span class="lineNum"> 85 </span> : : */</a>
+<a name="86"><span class="lineNum"> 86 </span> : : { &quot;big-endian&quot;,</a>
+<a name="87"><span class="lineNum"> 87 </span> : : CPU_ALL,</a>
+<a name="88"><span class="lineNum"> 88 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="89"><span class="lineNum"> 89 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="90"><span class="lineNum"> 90 </span> : : -1, -1, -1,</a>
+<a name="91"><span class="lineNum"> 91 </span> : : NULL, },</a>
+<a name="92"><span class="lineNum"> 92 </span> : : </a>
+<a name="93"><span class="lineNum"> 93 </span> : : /*</a>
+<a name="94"><span class="lineNum"> 94 </span> : : * Little endian as in ISAv2.07B, MSR_LE=1.</a>
+<a name="95"><span class="lineNum"> 95 </span> : : *</a>
+<a name="96"><span class="lineNum"> 96 </span> : : * When both big and little endian are defined, there is an LPCR ILE</a>
+<a name="97"><span class="lineNum"> 97 </span> : : * bit and implementation specific way to switch HILE mode, MSR_SLE,</a>
+<a name="98"><span class="lineNum"> 98 </span> : : * etc.</a>
+<a name="99"><span class="lineNum"> 99 </span> : : */</a>
+<a name="100"><span class="lineNum"> 100 </span> : : { &quot;little-endian&quot;,</a>
+<a name="101"><span class="lineNum"> 101 </span> : : CPU_ALL,</a>
+<a name="102"><span class="lineNum"> 102 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="103"><span class="lineNum"> 103 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="104"><span class="lineNum"> 104 </span> : : -1, -1, -1,</a>
+<a name="105"><span class="lineNum"> 105 </span> : : NULL, },</a>
+<a name="106"><span class="lineNum"> 106 </span> : : </a>
+<a name="107"><span class="lineNum"> 107 </span> : : /*</a>
+<a name="108"><span class="lineNum"> 108 </span> : : * MSR_HV=1 mode as in ISAv2.07B (i.e., hypervisor privileged</a>
+<a name="109"><span class="lineNum"> 109 </span> : : * instructions and registers).</a>
+<a name="110"><span class="lineNum"> 110 </span> : : */</a>
+<a name="111"><span class="lineNum"> 111 </span> : : { &quot;hypervisor&quot;,</a>
+<a name="112"><span class="lineNum"> 112 </span> : : CPU_ALL,</a>
+<a name="113"><span class="lineNum"> 113 </span> : : ISA_BASE, USABLE_HV,</a>
+<a name="114"><span class="lineNum"> 114 </span> : : HV_CUSTOM, OS_NONE,</a>
+<a name="115"><span class="lineNum"> 115 </span> : : -1, -1, -1,</a>
+<a name="116"><span class="lineNum"> 116 </span> : : NULL, },</a>
+<a name="117"><span class="lineNum"> 117 </span> : : </a>
+<a name="118"><span class="lineNum"> 118 </span> : : /*</a>
+<a name="119"><span class="lineNum"> 119 </span> : : * ISAv2.07B interrupt vectors, registers, and control registers</a>
+<a name="120"><span class="lineNum"> 120 </span> : : * (e.g., AIL, ILE, HV, etc LPCR bits).</a>
+<a name="121"><span class="lineNum"> 121 </span> : : *</a>
+<a name="122"><span class="lineNum"> 122 </span> : : * This does not necessarily specify all possible interrupt types.</a>
+<a name="123"><span class="lineNum"> 123 </span> : : * floating-point, for example requires some ways to handle floating</a>
+<a name="124"><span class="lineNum"> 124 </span> : : * point exceptions, but the low level details of interrupt handler</a>
+<a name="125"><span class="lineNum"> 125 </span> : : * is not a dependency there. There will always be *some* interrupt</a>
+<a name="126"><span class="lineNum"> 126 </span> : : * handler, (and some way to provide memory magagement, etc.).</a>
+<a name="127"><span class="lineNum"> 127 </span> : : */</a>
+<a name="128"><span class="lineNum"> 128 </span> : : { &quot;interrupt-facilities&quot;,</a>
+<a name="129"><span class="lineNum"> 129 </span> : : CPU_ALL,</a>
+<a name="130"><span class="lineNum"> 130 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
+<a name="131"><span class="lineNum"> 131 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="132"><span class="lineNum"> 132 </span> : : -1, -1, -1,</a>
+<a name="133"><span class="lineNum"> 133 </span> : : NULL, },</a>
+<a name="134"><span class="lineNum"> 134 </span> : : </a>
+<a name="135"><span class="lineNum"> 135 </span> : : { &quot;smt&quot;,</a>
+<a name="136"><span class="lineNum"> 136 </span> : : CPU_ALL,</a>
+<a name="137"><span class="lineNum"> 137 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="138"><span class="lineNum"> 138 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="139"><span class="lineNum"> 139 </span> : : -1, -1, 14,</a>
+<a name="140"><span class="lineNum"> 140 </span> : : NULL, },</a>
+<a name="141"><span class="lineNum"> 141 </span> : : </a>
+<a name="142"><span class="lineNum"> 142 </span> : : /*</a>
+<a name="143"><span class="lineNum"> 143 </span> : : * ISAv2.07B Program Priority Registers (PPR)</a>
+<a name="144"><span class="lineNum"> 144 </span> : : * PPR and associated control registers (e.g. RPR, PSPB),</a>
+<a name="145"><span class="lineNum"> 145 </span> : : * priority &quot;or&quot; instructions, etc.</a>
+<a name="146"><span class="lineNum"> 146 </span> : : */</a>
+<a name="147"><span class="lineNum"> 147 </span> : : { &quot;program-priority-register&quot;,</a>
+<a name="148"><span class="lineNum"> 148 </span> : : CPU_ALL,</a>
+<a name="149"><span class="lineNum"> 149 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="150"><span class="lineNum"> 150 </span> : : HV_NONE, OS_NONE,</a>
+<a name="151"><span class="lineNum"> 151 </span> : : -1, -1, -1,</a>
+<a name="152"><span class="lineNum"> 152 </span> : : NULL, },</a>
+<a name="153"><span class="lineNum"> 153 </span> : : </a>
+<a name="154"><span class="lineNum"> 154 </span> : : /*</a>
+<a name="155"><span class="lineNum"> 155 </span> : : * ISAv2.07B Book3S Chapter 5.7.9.1. Virtual Page Class Key Protecion</a>
+<a name="156"><span class="lineNum"> 156 </span> : : * AMR, IAMR, AMOR, UAMOR, etc registers and MMU key bits.</a>
+<a name="157"><span class="lineNum"> 157 </span> : : */</a>
+<a name="158"><span class="lineNum"> 158 </span> : : { &quot;virtual-page-class-key-protection&quot;,</a>
+<a name="159"><span class="lineNum"> 159 </span> : : CPU_ALL,</a>
+<a name="160"><span class="lineNum"> 160 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="161"><span class="lineNum"> 161 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="162"><span class="lineNum"> 162 </span> : : -1, -1, -1,</a>
+<a name="163"><span class="lineNum"> 163 </span> : : NULL, },</a>
+<a name="164"><span class="lineNum"> 164 </span> : : </a>
+<a name="165"><span class="lineNum"> 165 </span> : : /*</a>
+<a name="166"><span class="lineNum"> 166 </span> : : * ISAv2.07B SAO storage control attribute</a>
+<a name="167"><span class="lineNum"> 167 </span> : : */</a>
+<a name="168"><span class="lineNum"> 168 </span> : : { &quot;strong-access-ordering&quot;,</a>
+<a name="169"><span class="lineNum"> 169 </span> : : CPU_ALL &amp; ~CPU_P9_DD1,</a>
+<a name="170"><span class="lineNum"> 170 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="171"><span class="lineNum"> 171 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="172"><span class="lineNum"> 172 </span> : : -1, -1, -1,</a>
+<a name="173"><span class="lineNum"> 173 </span> : : NULL, },</a>
+<a name="174"><span class="lineNum"> 174 </span> : : </a>
+<a name="175"><span class="lineNum"> 175 </span> : : /*</a>
+<a name="176"><span class="lineNum"> 176 </span> : : * ISAv2.07B no-execute storage control attribute</a>
+<a name="177"><span class="lineNum"> 177 </span> : : */</a>
+<a name="178"><span class="lineNum"> 178 </span> : : { &quot;no-execute&quot;,</a>
+<a name="179"><span class="lineNum"> 179 </span> : : CPU_ALL,</a>
+<a name="180"><span class="lineNum"> 180 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
+<a name="181"><span class="lineNum"> 181 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="182"><span class="lineNum"> 182 </span> : : -1, -1, -1,</a>
+<a name="183"><span class="lineNum"> 183 </span> : : NULL, },</a>
+<a name="184"><span class="lineNum"> 184 </span> : : </a>
+<a name="185"><span class="lineNum"> 185 </span> : : /*</a>
+<a name="186"><span class="lineNum"> 186 </span> : : * Cache inhibited attribute supported on large pages.</a>
+<a name="187"><span class="lineNum"> 187 </span> : : */</a>
+<a name="188"><span class="lineNum"> 188 </span> : : { &quot;cache-inhibited-large-page&quot;,</a>
+<a name="189"><span class="lineNum"> 189 </span> : : CPU_ALL,</a>
+<a name="190"><span class="lineNum"> 190 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
+<a name="191"><span class="lineNum"> 191 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="192"><span class="lineNum"> 192 </span> : : -1, -1, -1,</a>
+<a name="193"><span class="lineNum"> 193 </span> : : NULL, },</a>
+<a name="194"><span class="lineNum"> 194 </span> : : </a>
+<a name="195"><span class="lineNum"> 195 </span> : : /*</a>
+<a name="196"><span class="lineNum"> 196 </span> : : * ISAv2.07B Book3S Chapter 8. Debug Facilities</a>
+<a name="197"><span class="lineNum"> 197 </span> : : * CIEA, CIABR, DEAW, MEte, trace interrupt, etc.</a>
+<a name="198"><span class="lineNum"> 198 </span> : : * Except CFAR, branch tracing.</a>
+<a name="199"><span class="lineNum"> 199 </span> : : */</a>
+<a name="200"><span class="lineNum"> 200 </span> : : { &quot;debug-facilities&quot;,</a>
+<a name="201"><span class="lineNum"> 201 </span> : : CPU_ALL,</a>
+<a name="202"><span class="lineNum"> 202 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
+<a name="203"><span class="lineNum"> 203 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="204"><span class="lineNum"> 204 </span> : : -1, -1, -1,</a>
+<a name="205"><span class="lineNum"> 205 </span> : : NULL, },</a>
+<a name="206"><span class="lineNum"> 206 </span> : : </a>
+<a name="207"><span class="lineNum"> 207 </span> : : /*</a>
+<a name="208"><span class="lineNum"> 208 </span> : : * DAWR1, DAWRX1 etc.</a>
+<a name="209"><span class="lineNum"> 209 </span> : : */</a>
+<a name="210"><span class="lineNum"> 210 </span> : : { &quot;debug-facilities-v31&quot;,</a>
+<a name="211"><span class="lineNum"> 211 </span> : : CPU_P10,</a>
+<a name="212"><span class="lineNum"> 212 </span> : : ISA_V3_1, USABLE_HV|USABLE_OS,</a>
+<a name="213"><span class="lineNum"> 213 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="214"><span class="lineNum"> 214 </span> : : -1, -1, -1,</a>
+<a name="215"><span class="lineNum"> 215 </span> : : NULL, },</a>
+<a name="216"><span class="lineNum"> 216 </span> : : </a>
+<a name="217"><span class="lineNum"> 217 </span> : : /*</a>
+<a name="218"><span class="lineNum"> 218 </span> : : * ISAv2.07B CFAR</a>
+<a name="219"><span class="lineNum"> 219 </span> : : */</a>
+<a name="220"><span class="lineNum"> 220 </span> : : { &quot;come-from-address-register&quot;,</a>
+<a name="221"><span class="lineNum"> 221 </span> : : CPU_ALL,</a>
+<a name="222"><span class="lineNum"> 222 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
+<a name="223"><span class="lineNum"> 223 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="224"><span class="lineNum"> 224 </span> : : -1, -1, -1,</a>
+<a name="225"><span class="lineNum"> 225 </span> : : &quot;debug-facilities&quot;, },</a>
+<a name="226"><span class="lineNum"> 226 </span> : : </a>
+<a name="227"><span class="lineNum"> 227 </span> : : /*</a>
+<a name="228"><span class="lineNum"> 228 </span> : : * ISAv2.07B Branch tracing (optional in ISA)</a>
+<a name="229"><span class="lineNum"> 229 </span> : : */</a>
+<a name="230"><span class="lineNum"> 230 </span> : : { &quot;branch-tracing&quot;,</a>
+<a name="231"><span class="lineNum"> 231 </span> : : CPU_ALL,</a>
+<a name="232"><span class="lineNum"> 232 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
+<a name="233"><span class="lineNum"> 233 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="234"><span class="lineNum"> 234 </span> : : -1, -1, -1,</a>
+<a name="235"><span class="lineNum"> 235 </span> : : &quot;debug-facilities&quot;, },</a>
+<a name="236"><span class="lineNum"> 236 </span> : : </a>
+<a name="237"><span class="lineNum"> 237 </span> : : /*</a>
+<a name="238"><span class="lineNum"> 238 </span> : : * ISAv2.07B Floating-point Facility</a>
+<a name="239"><span class="lineNum"> 239 </span> : : */</a>
+<a name="240"><span class="lineNum"> 240 </span> : : { &quot;floating-point&quot;,</a>
+<a name="241"><span class="lineNum"> 241 </span> : : CPU_ALL,</a>
+<a name="242"><span class="lineNum"> 242 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="243"><span class="lineNum"> 243 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="244"><span class="lineNum"> 244 </span> : : PPC_BITLSHIFT(63), -1, 27,</a>
+<a name="245"><span class="lineNum"> 245 </span> : : NULL, },</a>
+<a name="246"><span class="lineNum"> 246 </span> : : </a>
+<a name="247"><span class="lineNum"> 247 </span> : : /*</a>
+<a name="248"><span class="lineNum"> 248 </span> : : * ISAv2.07B Vector Facility (VMX)</a>
+<a name="249"><span class="lineNum"> 249 </span> : : */</a>
+<a name="250"><span class="lineNum"> 250 </span> : : { &quot;vector&quot;,</a>
+<a name="251"><span class="lineNum"> 251 </span> : : CPU_ALL,</a>
+<a name="252"><span class="lineNum"> 252 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="253"><span class="lineNum"> 253 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="254"><span class="lineNum"> 254 </span> : : PPC_BITLSHIFT(62), -1, 28,</a>
+<a name="255"><span class="lineNum"> 255 </span> : : &quot;floating-point&quot;, },</a>
+<a name="256"><span class="lineNum"> 256 </span> : : </a>
+<a name="257"><span class="lineNum"> 257 </span> : : /*</a>
+<a name="258"><span class="lineNum"> 258 </span> : : * ISAv2.07B Vector-scalar Facility (VSX)</a>
+<a name="259"><span class="lineNum"> 259 </span> : : */</a>
+<a name="260"><span class="lineNum"> 260 </span> : : { &quot;vector-scalar&quot;,</a>
+<a name="261"><span class="lineNum"> 261 </span> : : CPU_ALL,</a>
+<a name="262"><span class="lineNum"> 262 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="263"><span class="lineNum"> 263 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="264"><span class="lineNum"> 264 </span> : : -1, -1, 7,</a>
+<a name="265"><span class="lineNum"> 265 </span> : : &quot;vector&quot;, },</a>
+<a name="266"><span class="lineNum"> 266 </span> : : </a>
+<a name="267"><span class="lineNum"> 267 </span> : : { &quot;vector-crypto&quot;,</a>
+<a name="268"><span class="lineNum"> 268 </span> : : CPU_ALL,</a>
+<a name="269"><span class="lineNum"> 269 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="270"><span class="lineNum"> 270 </span> : : HV_NONE, OS_NONE,</a>
+<a name="271"><span class="lineNum"> 271 </span> : : -1, -1, 57,</a>
+<a name="272"><span class="lineNum"> 272 </span> : : &quot;vector&quot;, },</a>
+<a name="273"><span class="lineNum"> 273 </span> : : </a>
+<a name="274"><span class="lineNum"> 274 </span> : : /*</a>
+<a name="275"><span class="lineNum"> 275 </span> : : * ISAv2.07B Quadword Load and Store instructions</a>
+<a name="276"><span class="lineNum"> 276 </span> : : * including lqarx/stdqcx. instructions.</a>
+<a name="277"><span class="lineNum"> 277 </span> : : */</a>
+<a name="278"><span class="lineNum"> 278 </span> : : { &quot;quadword-load-store&quot;,</a>
+<a name="279"><span class="lineNum"> 279 </span> : : CPU_ALL,</a>
+<a name="280"><span class="lineNum"> 280 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="281"><span class="lineNum"> 281 </span> : : HV_NONE, OS_NONE,</a>
+<a name="282"><span class="lineNum"> 282 </span> : : -1, -1, -1,</a>
+<a name="283"><span class="lineNum"> 283 </span> : : NULL, },</a>
+<a name="284"><span class="lineNum"> 284 </span> : : </a>
+<a name="285"><span class="lineNum"> 285 </span> : : /*</a>
+<a name="286"><span class="lineNum"> 286 </span> : : * ISAv2.07B Binary Coded Decimal (BCD)</a>
+<a name="287"><span class="lineNum"> 287 </span> : : * BCD fixed point instructions</a>
+<a name="288"><span class="lineNum"> 288 </span> : : */</a>
+<a name="289"><span class="lineNum"> 289 </span> : : { &quot;decimal-integer&quot;,</a>
+<a name="290"><span class="lineNum"> 290 </span> : : CPU_ALL,</a>
+<a name="291"><span class="lineNum"> 291 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="292"><span class="lineNum"> 292 </span> : : HV_NONE, OS_NONE,</a>
+<a name="293"><span class="lineNum"> 293 </span> : : -1, -1, -1,</a>
+<a name="294"><span class="lineNum"> 294 </span> : : NULL, },</a>
+<a name="295"><span class="lineNum"> 295 </span> : : </a>
+<a name="296"><span class="lineNum"> 296 </span> : : /*</a>
+<a name="297"><span class="lineNum"> 297 </span> : : * ISAv2.07B Decimal floating-point Facility (DFP)</a>
+<a name="298"><span class="lineNum"> 298 </span> : : */</a>
+<a name="299"><span class="lineNum"> 299 </span> : : { &quot;decimal-floating-point&quot;,</a>
+<a name="300"><span class="lineNum"> 300 </span> : : CPU_ALL,</a>
+<a name="301"><span class="lineNum"> 301 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="302"><span class="lineNum"> 302 </span> : : HV_NONE, OS_NONE,</a>
+<a name="303"><span class="lineNum"> 303 </span> : : -1, -1, 10,</a>
+<a name="304"><span class="lineNum"> 304 </span> : : &quot;floating-point&quot;, },</a>
+<a name="305"><span class="lineNum"> 305 </span> : : </a>
+<a name="306"><span class="lineNum"> 306 </span> : : /*</a>
+<a name="307"><span class="lineNum"> 307 </span> : : * ISAv2.07B</a>
+<a name="308"><span class="lineNum"> 308 </span> : : * DSCR, default data prefetch LPCR, etc</a>
+<a name="309"><span class="lineNum"> 309 </span> : : */</a>
+<a name="310"><span class="lineNum"> 310 </span> : : { &quot;data-stream-control-register&quot;,</a>
+<a name="311"><span class="lineNum"> 311 </span> : : CPU_ALL,</a>
+<a name="312"><span class="lineNum"> 312 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="313"><span class="lineNum"> 313 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="314"><span class="lineNum"> 314 </span> : : PPC_BITLSHIFT(61), PPC_BITLSHIFT(61), 61,</a>
+<a name="315"><span class="lineNum"> 315 </span> : : NULL, },</a>
+<a name="316"><span class="lineNum"> 316 </span> : : </a>
+<a name="317"><span class="lineNum"> 317 </span> : : /*</a>
+<a name="318"><span class="lineNum"> 318 </span> : : * ISAv2.07B Branch History Rolling Buffer (BHRB)</a>
+<a name="319"><span class="lineNum"> 319 </span> : : */</a>
+<a name="320"><span class="lineNum"> 320 </span> : : { &quot;branch-history-rolling-buffer&quot;,</a>
+<a name="321"><span class="lineNum"> 321 </span> : : CPU_ALL,</a>
+<a name="322"><span class="lineNum"> 322 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="323"><span class="lineNum"> 323 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="324"><span class="lineNum"> 324 </span> : : PPC_BITLSHIFT(59), -1, -1,</a>
+<a name="325"><span class="lineNum"> 325 </span> : : NULL, },</a>
+<a name="326"><span class="lineNum"> 326 </span> : : </a>
+<a name="327"><span class="lineNum"> 327 </span> : : /*</a>
+<a name="328"><span class="lineNum"> 328 </span> : : * ISAv2.07B Transactional Memory Facility (TM or HTM)</a>
+<a name="329"><span class="lineNum"> 329 </span> : : */</a>
+<a name="330"><span class="lineNum"> 330 </span> : : { &quot;transactional-memory&quot;,</a>
+<a name="331"><span class="lineNum"> 331 </span> : : CPU_P8, /* P9 support is not enabled yet */</a>
+<a name="332"><span class="lineNum"> 332 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="333"><span class="lineNum"> 333 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="334"><span class="lineNum"> 334 </span> : : PPC_BITLSHIFT(58), -1, 62,</a>
+<a name="335"><span class="lineNum"> 335 </span> : : NULL, },</a>
+<a name="336"><span class="lineNum"> 336 </span> : : </a>
+<a name="337"><span class="lineNum"> 337 </span> : : /*</a>
+<a name="338"><span class="lineNum"> 338 </span> : : * ISAv3.0B TM additions</a>
+<a name="339"><span class="lineNum"> 339 </span> : : * TEXASR bit 17, self-induced vs external footprint overflow</a>
+<a name="340"><span class="lineNum"> 340 </span> : : */</a>
+<a name="341"><span class="lineNum"> 341 </span> : : { &quot;transactional-memory-v3&quot;,</a>
+<a name="342"><span class="lineNum"> 342 </span> : : 0,</a>
+<a name="343"><span class="lineNum"> 343 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="344"><span class="lineNum"> 344 </span> : : HV_NONE, OS_NONE,</a>
+<a name="345"><span class="lineNum"> 345 </span> : : -1, -1, -1,</a>
+<a name="346"><span class="lineNum"> 346 </span> : : &quot;transactional-memory&quot;, },</a>
+<a name="347"><span class="lineNum"> 347 </span> : : </a>
+<a name="348"><span class="lineNum"> 348 </span> : : /*</a>
+<a name="349"><span class="lineNum"> 349 </span> : : * ISAv2.07B Event-Based Branch Facility (EBB)</a>
+<a name="350"><span class="lineNum"> 350 </span> : : */</a>
+<a name="351"><span class="lineNum"> 351 </span> : : { &quot;event-based-branch&quot;,</a>
+<a name="352"><span class="lineNum"> 352 </span> : : CPU_ALL,</a>
+<a name="353"><span class="lineNum"> 353 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="354"><span class="lineNum"> 354 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="355"><span class="lineNum"> 355 </span> : : PPC_BITLSHIFT(56), PPC_BITLSHIFT(56), 60,</a>
+<a name="356"><span class="lineNum"> 356 </span> : : NULL, },</a>
+<a name="357"><span class="lineNum"> 357 </span> : : </a>
+<a name="358"><span class="lineNum"> 358 </span> : : /*</a>
+<a name="359"><span class="lineNum"> 359 </span> : : * ISAv2.07B Target Address Register (TAR)</a>
+<a name="360"><span class="lineNum"> 360 </span> : : */</a>
+<a name="361"><span class="lineNum"> 361 </span> : : { &quot;target-address-register&quot;,</a>
+<a name="362"><span class="lineNum"> 362 </span> : : CPU_ALL,</a>
+<a name="363"><span class="lineNum"> 363 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="364"><span class="lineNum"> 364 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="365"><span class="lineNum"> 365 </span> : : PPC_BITLSHIFT(55), PPC_BITLSHIFT(55), 58,</a>
+<a name="366"><span class="lineNum"> 366 </span> : : NULL, },</a>
+<a name="367"><span class="lineNum"> 367 </span> : : </a>
+<a name="368"><span class="lineNum"> 368 </span> : : /*</a>
+<a name="369"><span class="lineNum"> 369 </span> : : * ISAv2.07B Control Register (CTRL)</a>
+<a name="370"><span class="lineNum"> 370 </span> : : */</a>
+<a name="371"><span class="lineNum"> 371 </span> : : { &quot;control-register&quot;,</a>
+<a name="372"><span class="lineNum"> 372 </span> : : CPU_ALL,</a>
+<a name="373"><span class="lineNum"> 373 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
+<a name="374"><span class="lineNum"> 374 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="375"><span class="lineNum"> 375 </span> : : -1, -1, -1,</a>
+<a name="376"><span class="lineNum"> 376 </span> : : NULL, },</a>
+<a name="377"><span class="lineNum"> 377 </span> : : </a>
+<a name="378"><span class="lineNum"> 378 </span> : : /*</a>
+<a name="379"><span class="lineNum"> 379 </span> : : * ISAv2.07B Book3S Chapter 11. Processor Control.</a>
+<a name="380"><span class="lineNum"> 380 </span> : : * msgsnd, msgsndp, doorbell, etc.</a>
+<a name="381"><span class="lineNum"> 381 </span> : : *</a>
+<a name="382"><span class="lineNum"> 382 </span> : : * ISAv3.0B is not compatible (different addressing, HFSCR required</a>
+<a name="383"><span class="lineNum"> 383 </span> : : * for msgsndp).</a>
+<a name="384"><span class="lineNum"> 384 </span> : : */</a>
+<a name="385"><span class="lineNum"> 385 </span> : : { &quot;processor-control-facility&quot;,</a>
+<a name="386"><span class="lineNum"> 386 </span> : : CPU_P8_DD2, /* P8 DD1 has no dbell */</a>
+<a name="387"><span class="lineNum"> 387 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
+<a name="388"><span class="lineNum"> 388 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="389"><span class="lineNum"> 389 </span> : : -1, -1, -1,</a>
+<a name="390"><span class="lineNum"> 390 </span> : : NULL, },</a>
+<a name="391"><span class="lineNum"> 391 </span> : : </a>
+<a name="392"><span class="lineNum"> 392 </span> : : /*</a>
+<a name="393"><span class="lineNum"> 393 </span> : : * ISAv2.07B PURR, SPURR registers</a>
+<a name="394"><span class="lineNum"> 394 </span> : : */</a>
+<a name="395"><span class="lineNum"> 395 </span> : : { &quot;processor-utilization-of-resources-register&quot;,</a>
+<a name="396"><span class="lineNum"> 396 </span> : : CPU_ALL,</a>
+<a name="397"><span class="lineNum"> 397 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
+<a name="398"><span class="lineNum"> 398 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="399"><span class="lineNum"> 399 </span> : : -1, -1, -1,</a>
+<a name="400"><span class="lineNum"> 400 </span> : : NULL, },</a>
+<a name="401"><span class="lineNum"> 401 </span> : : </a>
+<a name="402"><span class="lineNum"> 402 </span> : : /*</a>
+<a name="403"><span class="lineNum"> 403 </span> : : * POWER8 initiate coprocessor store word indexed (icswx) instruction</a>
+<a name="404"><span class="lineNum"> 404 </span> : : */</a>
+<a name="405"><span class="lineNum"> 405 </span> : : { &quot;coprocessor-icswx&quot;,</a>
+<a name="406"><span class="lineNum"> 406 </span> : : CPU_P8,</a>
+<a name="407"><span class="lineNum"> 407 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
+<a name="408"><span class="lineNum"> 408 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="409"><span class="lineNum"> 409 </span> : : -1, -1, -1,</a>
+<a name="410"><span class="lineNum"> 410 </span> : : NULL, },</a>
+<a name="411"><span class="lineNum"> 411 </span> : : </a>
+<a name="412"><span class="lineNum"> 412 </span> : : /*</a>
+<a name="413"><span class="lineNum"> 413 </span> : : * ISAv2.07B hash based MMU and all instructions, registers,</a>
+<a name="414"><span class="lineNum"> 414 </span> : : * data structures, exceptions, etc.</a>
+<a name="415"><span class="lineNum"> 415 </span> : : */</a>
+<a name="416"><span class="lineNum"> 416 </span> : : { &quot;mmu-hash&quot;,</a>
+<a name="417"><span class="lineNum"> 417 </span> : : CPU_P8,</a>
+<a name="418"><span class="lineNum"> 418 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
+<a name="419"><span class="lineNum"> 419 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="420"><span class="lineNum"> 420 </span> : : -1, -1, -1,</a>
+<a name="421"><span class="lineNum"> 421 </span> : : NULL, },</a>
+<a name="422"><span class="lineNum"> 422 </span> : : </a>
+<a name="423"><span class="lineNum"> 423 </span> : : /*</a>
+<a name="424"><span class="lineNum"> 424 </span> : : * POWER8 MCE / machine check exception.</a>
+<a name="425"><span class="lineNum"> 425 </span> : : */</a>
+<a name="426"><span class="lineNum"> 426 </span> : : { &quot;machine-check-power8&quot;,</a>
+<a name="427"><span class="lineNum"> 427 </span> : : CPU_P8,</a>
+<a name="428"><span class="lineNum"> 428 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
+<a name="429"><span class="lineNum"> 429 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="430"><span class="lineNum"> 430 </span> : : -1, -1, -1,</a>
+<a name="431"><span class="lineNum"> 431 </span> : : NULL, },</a>
+<a name="432"><span class="lineNum"> 432 </span> : : </a>
+<a name="433"><span class="lineNum"> 433 </span> : : /*</a>
+<a name="434"><span class="lineNum"> 434 </span> : : * POWER8 PMU / performance monitor unit.</a>
<a name="435"><span class="lineNum"> 435 </span> : : */</a>
-<a name="436"><span class="lineNum"> 436 </span> : : { &quot;alignment-interrupt-dsisr&quot;,</a>
-<a name="437"><span class="lineNum"> 437 </span> : : 0,</a>
+<a name="436"><span class="lineNum"> 436 </span> : : { &quot;performance-monitor-power8&quot;,</a>
+<a name="437"><span class="lineNum"> 437 </span> : : CPU_P8,</a>
<a name="438"><span class="lineNum"> 438 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
-<a name="439"><span class="lineNum"> 439 </span> : : HV_NONE, OS_NONE,</a>
+<a name="439"><span class="lineNum"> 439 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
<a name="440"><span class="lineNum"> 440 </span> : : -1, -1, -1,</a>
<a name="441"><span class="lineNum"> 441 </span> : : NULL, },</a>
<a name="442"><span class="lineNum"> 442 </span> : : </a>
<a name="443"><span class="lineNum"> 443 </span> : : /*</a>
-<a name="444"><span class="lineNum"> 444 </span> : : * ISAv2.07B / POWER8 doze, nap, sleep, winkle instructions</a>
-<a name="445"><span class="lineNum"> 445 </span> : : * XXX: is Linux we using some BookIV specific implementation details</a>
-<a name="446"><span class="lineNum"> 446 </span> : : * in nap handling? We have no POWER8 specific key here.</a>
+<a name="444"><span class="lineNum"> 444 </span> : : * ISAv2.07B alignment interrupts set DSISR register</a>
+<a name="445"><span class="lineNum"> 445 </span> : : *</a>
+<a name="446"><span class="lineNum"> 446 </span> : : * POWER CPUs do not used this, and it's removed from ISAv3.0B.</a>
<a name="447"><span class="lineNum"> 447 </span> : : */</a>
-<a name="448"><span class="lineNum"> 448 </span> : : { &quot;idle-nap&quot;,</a>
-<a name="449"><span class="lineNum"> 449 </span> : : CPU_P8,</a>
-<a name="450"><span class="lineNum"> 450 </span> : : ISA_BASE, USABLE_HV,</a>
-<a name="451"><span class="lineNum"> 451 </span> : : HV_CUSTOM, OS_NONE,</a>
+<a name="448"><span class="lineNum"> 448 </span> : : { &quot;alignment-interrupt-dsisr&quot;,</a>
+<a name="449"><span class="lineNum"> 449 </span> : : 0,</a>
+<a name="450"><span class="lineNum"> 450 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
+<a name="451"><span class="lineNum"> 451 </span> : : HV_NONE, OS_NONE,</a>
<a name="452"><span class="lineNum"> 452 </span> : : -1, -1, -1,</a>
<a name="453"><span class="lineNum"> 453 </span> : : NULL, },</a>
<a name="454"><span class="lineNum"> 454 </span> : : </a>
<a name="455"><span class="lineNum"> 455 </span> : : /*</a>
-<a name="456"><span class="lineNum"> 456 </span> : : * ISAv2.07B wait instruction</a>
-<a name="457"><span class="lineNum"> 457 </span> : : */</a>
-<a name="458"><span class="lineNum"> 458 </span> : : { &quot;wait&quot;,</a>
-<a name="459"><span class="lineNum"> 459 </span> : : CPU_P8,</a>
-<a name="460"><span class="lineNum"> 460 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="461"><span class="lineNum"> 461 </span> : : HV_NONE, OS_NONE,</a>
-<a name="462"><span class="lineNum"> 462 </span> : : -1, -1, -1,</a>
-<a name="463"><span class="lineNum"> 463 </span> : : NULL, },</a>
-<a name="464"><span class="lineNum"> 464 </span> : : </a>
-<a name="465"><span class="lineNum"> 465 </span> : : { &quot;subcore&quot;,</a>
-<a name="466"><span class="lineNum"> 466 </span> : : CPU_P8,</a>
-<a name="467"><span class="lineNum"> 467 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
-<a name="468"><span class="lineNum"> 468 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="469"><span class="lineNum"> 469 </span> : : -1, -1, -1,</a>
-<a name="470"><span class="lineNum"> 470 </span> : : &quot;smt&quot;, },</a>
-<a name="471"><span class="lineNum"> 471 </span> : : </a>
-<a name="472"><span class="lineNum"> 472 </span> : : /*</a>
-<a name="473"><span class="lineNum"> 473 </span> : : * ISAv3.0B radix based MMU</a>
-<a name="474"><span class="lineNum"> 474 </span> : : */</a>
-<a name="475"><span class="lineNum"> 475 </span> : : { &quot;mmu-radix&quot;,</a>
-<a name="476"><span class="lineNum"> 476 </span> : : CPU_P9,</a>
-<a name="477"><span class="lineNum"> 477 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS,</a>
-<a name="478"><span class="lineNum"> 478 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="479"><span class="lineNum"> 479 </span> : : -1, -1, -1,</a>
-<a name="480"><span class="lineNum"> 480 </span> : : NULL, },</a>
-<a name="481"><span class="lineNum"> 481 </span> : : </a>
-<a name="482"><span class="lineNum"> 482 </span> : : /*</a>
-<a name="483"><span class="lineNum"> 483 </span> : : * ISAv3.0B hash based MMU, new hash pte format, PCTR, etc</a>
-<a name="484"><span class="lineNum"> 484 </span> : : */</a>
-<a name="485"><span class="lineNum"> 485 </span> : : { &quot;mmu-hash-v3&quot;,</a>
-<a name="486"><span class="lineNum"> 486 </span> : : CPU_P9,</a>
-<a name="487"><span class="lineNum"> 487 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS,</a>
-<a name="488"><span class="lineNum"> 488 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="489"><span class="lineNum"> 489 </span> : : -1, -1, -1,</a>
-<a name="490"><span class="lineNum"> 490 </span> : : NULL, },</a>
-<a name="491"><span class="lineNum"> 491 </span> : : </a>
-<a name="492"><span class="lineNum"> 492 </span> : : /*</a>
-<a name="493"><span class="lineNum"> 493 </span> : : * ISAv3.0B wait instruction</a>
-<a name="494"><span class="lineNum"> 494 </span> : : */</a>
-<a name="495"><span class="lineNum"> 495 </span> : : { &quot;wait-v3&quot;,</a>
-<a name="496"><span class="lineNum"> 496 </span> : : CPU_P9,</a>
-<a name="497"><span class="lineNum"> 497 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="498"><span class="lineNum"> 498 </span> : : HV_NONE, OS_NONE,</a>
-<a name="499"><span class="lineNum"> 499 </span> : : -1, -1, -1,</a>
-<a name="500"><span class="lineNum"> 500 </span> : : NULL, },</a>
-<a name="501"><span class="lineNum"> 501 </span> : : </a>
-<a name="502"><span class="lineNum"> 502 </span> : : /*</a>
-<a name="503"><span class="lineNum"> 503 </span> : : * ISAv3.0B stop idle instructions and registers</a>
-<a name="504"><span class="lineNum"> 504 </span> : : * XXX: Same question as for idle-nap</a>
-<a name="505"><span class="lineNum"> 505 </span> : : */</a>
-<a name="506"><span class="lineNum"> 506 </span> : : { &quot;idle-stop&quot;,</a>
-<a name="507"><span class="lineNum"> 507 </span> : : CPU_P9,</a>
-<a name="508"><span class="lineNum"> 508 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS,</a>
-<a name="509"><span class="lineNum"> 509 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="510"><span class="lineNum"> 510 </span> : : -1, -1, -1,</a>
-<a name="511"><span class="lineNum"> 511 </span> : : NULL, },</a>
-<a name="512"><span class="lineNum"> 512 </span> : : </a>
-<a name="513"><span class="lineNum"> 513 </span> : : /*</a>
-<a name="514"><span class="lineNum"> 514 </span> : : * ISAv3.0B Hypervisor Virtualization Interrupt</a>
-<a name="515"><span class="lineNum"> 515 </span> : : * Also associated system registers, LPCR EE, HEIC, HVICE,</a>
-<a name="516"><span class="lineNum"> 516 </span> : : * system reset SRR1 reason, etc.</a>
+<a name="456"><span class="lineNum"> 456 </span> : : * ISAv2.07B / POWER8 doze, nap, sleep, winkle instructions</a>
+<a name="457"><span class="lineNum"> 457 </span> : : * XXX: is Linux we using some BookIV specific implementation details</a>
+<a name="458"><span class="lineNum"> 458 </span> : : * in nap handling? We have no POWER8 specific key here.</a>
+<a name="459"><span class="lineNum"> 459 </span> : : */</a>
+<a name="460"><span class="lineNum"> 460 </span> : : { &quot;idle-nap&quot;,</a>
+<a name="461"><span class="lineNum"> 461 </span> : : CPU_P8,</a>
+<a name="462"><span class="lineNum"> 462 </span> : : ISA_BASE, USABLE_HV,</a>
+<a name="463"><span class="lineNum"> 463 </span> : : HV_CUSTOM, OS_NONE,</a>
+<a name="464"><span class="lineNum"> 464 </span> : : -1, -1, -1,</a>
+<a name="465"><span class="lineNum"> 465 </span> : : NULL, },</a>
+<a name="466"><span class="lineNum"> 466 </span> : : </a>
+<a name="467"><span class="lineNum"> 467 </span> : : /*</a>
+<a name="468"><span class="lineNum"> 468 </span> : : * ISAv2.07B wait instruction</a>
+<a name="469"><span class="lineNum"> 469 </span> : : */</a>
+<a name="470"><span class="lineNum"> 470 </span> : : { &quot;wait&quot;,</a>
+<a name="471"><span class="lineNum"> 471 </span> : : CPU_P8,</a>
+<a name="472"><span class="lineNum"> 472 </span> : : ISA_BASE, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="473"><span class="lineNum"> 473 </span> : : HV_NONE, OS_NONE,</a>
+<a name="474"><span class="lineNum"> 474 </span> : : -1, -1, -1,</a>
+<a name="475"><span class="lineNum"> 475 </span> : : NULL, },</a>
+<a name="476"><span class="lineNum"> 476 </span> : : </a>
+<a name="477"><span class="lineNum"> 477 </span> : : { &quot;subcore&quot;,</a>
+<a name="478"><span class="lineNum"> 478 </span> : : CPU_P8,</a>
+<a name="479"><span class="lineNum"> 479 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
+<a name="480"><span class="lineNum"> 480 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="481"><span class="lineNum"> 481 </span> : : -1, -1, -1,</a>
+<a name="482"><span class="lineNum"> 482 </span> : : &quot;smt&quot;, },</a>
+<a name="483"><span class="lineNum"> 483 </span> : : </a>
+<a name="484"><span class="lineNum"> 484 </span> : : /*</a>
+<a name="485"><span class="lineNum"> 485 </span> : : * ISAv3.0B radix based MMU</a>
+<a name="486"><span class="lineNum"> 486 </span> : : */</a>
+<a name="487"><span class="lineNum"> 487 </span> : : { &quot;mmu-radix&quot;,</a>
+<a name="488"><span class="lineNum"> 488 </span> : : CPU_P9|CPU_P10,</a>
+<a name="489"><span class="lineNum"> 489 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS,</a>
+<a name="490"><span class="lineNum"> 490 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="491"><span class="lineNum"> 491 </span> : : -1, -1, -1,</a>
+<a name="492"><span class="lineNum"> 492 </span> : : NULL, },</a>
+<a name="493"><span class="lineNum"> 493 </span> : : </a>
+<a name="494"><span class="lineNum"> 494 </span> : : /*</a>
+<a name="495"><span class="lineNum"> 495 </span> : : * ISAv3.0B hash based MMU, new hash pte format, PCTR, etc</a>
+<a name="496"><span class="lineNum"> 496 </span> : : */</a>
+<a name="497"><span class="lineNum"> 497 </span> : : { &quot;mmu-hash-v3&quot;,</a>
+<a name="498"><span class="lineNum"> 498 </span> : : CPU_P9|CPU_P10,</a>
+<a name="499"><span class="lineNum"> 499 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS,</a>
+<a name="500"><span class="lineNum"> 500 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="501"><span class="lineNum"> 501 </span> : : -1, -1, -1,</a>
+<a name="502"><span class="lineNum"> 502 </span> : : NULL, },</a>
+<a name="503"><span class="lineNum"> 503 </span> : : </a>
+<a name="504"><span class="lineNum"> 504 </span> : : /*</a>
+<a name="505"><span class="lineNum"> 505 </span> : : * ISAv3.0B wait instruction</a>
+<a name="506"><span class="lineNum"> 506 </span> : : */</a>
+<a name="507"><span class="lineNum"> 507 </span> : : { &quot;wait-v3&quot;,</a>
+<a name="508"><span class="lineNum"> 508 </span> : : CPU_P9|CPU_P10,</a>
+<a name="509"><span class="lineNum"> 509 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="510"><span class="lineNum"> 510 </span> : : HV_NONE, OS_NONE,</a>
+<a name="511"><span class="lineNum"> 511 </span> : : -1, -1, -1,</a>
+<a name="512"><span class="lineNum"> 512 </span> : : NULL, },</a>
+<a name="513"><span class="lineNum"> 513 </span> : : </a>
+<a name="514"><span class="lineNum"> 514 </span> : : /*</a>
+<a name="515"><span class="lineNum"> 515 </span> : : * ISAv3.0B stop idle instructions and registers</a>
+<a name="516"><span class="lineNum"> 516 </span> : : * XXX: Same question as for idle-nap</a>
<a name="517"><span class="lineNum"> 517 </span> : : */</a>
-<a name="518"><span class="lineNum"> 518 </span> : : { &quot;hypervisor-virtualization-interrupt&quot;,</a>
-<a name="519"><span class="lineNum"> 519 </span> : : CPU_P9,</a>
-<a name="520"><span class="lineNum"> 520 </span> : : ISA_V3_0B, USABLE_HV,</a>
-<a name="521"><span class="lineNum"> 521 </span> : : HV_CUSTOM, OS_NONE,</a>
+<a name="518"><span class="lineNum"> 518 </span> : : { &quot;idle-stop&quot;,</a>
+<a name="519"><span class="lineNum"> 519 </span> : : CPU_P9|CPU_P10,</a>
+<a name="520"><span class="lineNum"> 520 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS,</a>
+<a name="521"><span class="lineNum"> 521 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
<a name="522"><span class="lineNum"> 522 </span> : : -1, -1, -1,</a>
<a name="523"><span class="lineNum"> 523 </span> : : NULL, },</a>
<a name="524"><span class="lineNum"> 524 </span> : : </a>
<a name="525"><span class="lineNum"> 525 </span> : : /*</a>
-<a name="526"><span class="lineNum"> 526 </span> : : * POWER9 MCE / machine check exception.</a>
-<a name="527"><span class="lineNum"> 527 </span> : : */</a>
-<a name="528"><span class="lineNum"> 528 </span> : : { &quot;machine-check-power9&quot;,</a>
-<a name="529"><span class="lineNum"> 529 </span> : : CPU_P9,</a>
-<a name="530"><span class="lineNum"> 530 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS,</a>
-<a name="531"><span class="lineNum"> 531 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="532"><span class="lineNum"> 532 </span> : : -1, -1, -1,</a>
-<a name="533"><span class="lineNum"> 533 </span> : : NULL, },</a>
-<a name="534"><span class="lineNum"> 534 </span> : : </a>
-<a name="535"><span class="lineNum"> 535 </span> : : /*</a>
-<a name="536"><span class="lineNum"> 536 </span> : : * POWER9 PMU / performance monitor unit.</a>
-<a name="537"><span class="lineNum"> 537 </span> : : */</a>
-<a name="538"><span class="lineNum"> 538 </span> : : { &quot;performance-monitor-power9&quot;,</a>
-<a name="539"><span class="lineNum"> 539 </span> : : CPU_P9,</a>
-<a name="540"><span class="lineNum"> 540 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS,</a>
-<a name="541"><span class="lineNum"> 541 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
-<a name="542"><span class="lineNum"> 542 </span> : : -1, -1, -1,</a>
-<a name="543"><span class="lineNum"> 543 </span> : : NULL, },</a>
-<a name="544"><span class="lineNum"> 544 </span> : : </a>
-<a name="545"><span class="lineNum"> 545 </span> : : /*</a>
-<a name="546"><span class="lineNum"> 546 </span> : : * ISAv3.0B scv/rfscv system call instructions and exceptions, fscr bit</a>
-<a name="547"><span class="lineNum"> 547 </span> : : * etc.</a>
-<a name="548"><span class="lineNum"> 548 </span> : : */</a>
-<a name="549"><span class="lineNum"> 549 </span> : : { &quot;system-call-vectored&quot;,</a>
-<a name="550"><span class="lineNum"> 550 </span> : : CPU_P9,</a>
-<a name="551"><span class="lineNum"> 551 </span> : : ISA_V3_0B, USABLE_OS|USABLE_PR,</a>
-<a name="552"><span class="lineNum"> 552 </span> : : HV_NONE, OS_CUSTOM,</a>
-<a name="553"><span class="lineNum"> 553 </span> : : -1, PPC_BITLSHIFT(51), 52,</a>
-<a name="554"><span class="lineNum"> 554 </span> : : NULL, },</a>
-<a name="555"><span class="lineNum"> 555 </span> : : </a>
-<a name="556"><span class="lineNum"> 556 </span> : : /*</a>
-<a name="557"><span class="lineNum"> 557 </span> : : * ISAv3.0B Book3S Chapter 10. Processor Control.</a>
-<a name="558"><span class="lineNum"> 558 </span> : : * global msgsnd, msgsndp, msgsync, doorbell, etc.</a>
+<a name="526"><span class="lineNum"> 526 </span> : : * ISAv3.0B Hypervisor Virtualization Interrupt</a>
+<a name="527"><span class="lineNum"> 527 </span> : : * Also associated system registers, LPCR EE, HEIC, HVICE,</a>
+<a name="528"><span class="lineNum"> 528 </span> : : * system reset SRR1 reason, etc.</a>
+<a name="529"><span class="lineNum"> 529 </span> : : */</a>
+<a name="530"><span class="lineNum"> 530 </span> : : { &quot;hypervisor-virtualization-interrupt&quot;,</a>
+<a name="531"><span class="lineNum"> 531 </span> : : CPU_P9|CPU_P10,</a>
+<a name="532"><span class="lineNum"> 532 </span> : : ISA_V3_0B, USABLE_HV,</a>
+<a name="533"><span class="lineNum"> 533 </span> : : HV_CUSTOM, OS_NONE,</a>
+<a name="534"><span class="lineNum"> 534 </span> : : -1, -1, -1,</a>
+<a name="535"><span class="lineNum"> 535 </span> : : NULL, },</a>
+<a name="536"><span class="lineNum"> 536 </span> : : </a>
+<a name="537"><span class="lineNum"> 537 </span> : : /*</a>
+<a name="538"><span class="lineNum"> 538 </span> : : * POWER9 MCE / machine check exception.</a>
+<a name="539"><span class="lineNum"> 539 </span> : : */</a>
+<a name="540"><span class="lineNum"> 540 </span> : : { &quot;machine-check-power9&quot;,</a>
+<a name="541"><span class="lineNum"> 541 </span> : : CPU_P9,</a>
+<a name="542"><span class="lineNum"> 542 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS,</a>
+<a name="543"><span class="lineNum"> 543 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="544"><span class="lineNum"> 544 </span> : : -1, -1, -1,</a>
+<a name="545"><span class="lineNum"> 545 </span> : : NULL, },</a>
+<a name="546"><span class="lineNum"> 546 </span> : : </a>
+<a name="547"><span class="lineNum"> 547 </span> : : /*</a>
+<a name="548"><span class="lineNum"> 548 </span> : : * POWER10 MCE / machine check exception.</a>
+<a name="549"><span class="lineNum"> 549 </span> : : */</a>
+<a name="550"><span class="lineNum"> 550 </span> : : { &quot;machine-check-power10&quot;,</a>
+<a name="551"><span class="lineNum"> 551 </span> : : CPU_P10,</a>
+<a name="552"><span class="lineNum"> 552 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS,</a>
+<a name="553"><span class="lineNum"> 553 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="554"><span class="lineNum"> 554 </span> : : -1, -1, -1,</a>
+<a name="555"><span class="lineNum"> 555 </span> : : NULL, },</a>
+<a name="556"><span class="lineNum"> 556 </span> : : </a>
+<a name="557"><span class="lineNum"> 557 </span> : : /*</a>
+<a name="558"><span class="lineNum"> 558 </span> : : * POWER9 PMU / performance monitor unit.</a>
<a name="559"><span class="lineNum"> 559 </span> : : */</a>
-<a name="560"><span class="lineNum"> 560 </span> : : { &quot;processor-control-facility-v3&quot;,</a>
+<a name="560"><span class="lineNum"> 560 </span> : : { &quot;performance-monitor-power9&quot;,</a>
<a name="561"><span class="lineNum"> 561 </span> : : CPU_P9,</a>
<a name="562"><span class="lineNum"> 562 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS,</a>
-<a name="563"><span class="lineNum"> 563 </span> : : HV_CUSTOM, OS_NONE,</a>
-<a name="564"><span class="lineNum"> 564 </span> : : PPC_BITLSHIFT(53), -1, -1,</a>
+<a name="563"><span class="lineNum"> 563 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="564"><span class="lineNum"> 564 </span> : : -1, -1, -1,</a>
<a name="565"><span class="lineNum"> 565 </span> : : NULL, },</a>
<a name="566"><span class="lineNum"> 566 </span> : : </a>
<a name="567"><span class="lineNum"> 567 </span> : : /*</a>
-<a name="568"><span class="lineNum"> 568 </span> : : * ISAv3.0B addpcis instruction</a>
+<a name="568"><span class="lineNum"> 568 </span> : : * POWER10 PMU / performance monitor unit.</a>
<a name="569"><span class="lineNum"> 569 </span> : : */</a>
-<a name="570"><span class="lineNum"> 570 </span> : : { &quot;pc-relative-addressing&quot;,</a>
-<a name="571"><span class="lineNum"> 571 </span> : : CPU_P9,</a>
-<a name="572"><span class="lineNum"> 572 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="573"><span class="lineNum"> 573 </span> : : HV_NONE, OS_NONE,</a>
+<a name="570"><span class="lineNum"> 570 </span> : : { &quot;performance-monitor-power10&quot;,</a>
+<a name="571"><span class="lineNum"> 571 </span> : : CPU_P10,</a>
+<a name="572"><span class="lineNum"> 572 </span> : : ISA_V3_1, USABLE_HV|USABLE_OS,</a>
+<a name="573"><span class="lineNum"> 573 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
<a name="574"><span class="lineNum"> 574 </span> : : -1, -1, -1,</a>
<a name="575"><span class="lineNum"> 575 </span> : : NULL, },</a>
<a name="576"><span class="lineNum"> 576 </span> : : </a>
<a name="577"><span class="lineNum"> 577 </span> : : /*</a>
-<a name="578"><span class="lineNum"> 578 </span> : : * ISAv2.07B Book3S Chapter 7. Timer Facilities</a>
-<a name="579"><span class="lineNum"> 579 </span> : : * TB, VTB, DEC, HDEC, IC, etc registers and exceptions.</a>
-<a name="580"><span class="lineNum"> 580 </span> : : * Not including PURR or SPURR registers.</a>
-<a name="581"><span class="lineNum"> 581 </span> : : */</a>
-<a name="582"><span class="lineNum"> 582 </span> : : { &quot;timer-facilities&quot;,</a>
-<a name="583"><span class="lineNum"> 583 </span> : : CPU_ALL,</a>
-<a name="584"><span class="lineNum"> 584 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
-<a name="585"><span class="lineNum"> 585 </span> : : HV_NONE, OS_NONE,</a>
-<a name="586"><span class="lineNum"> 586 </span> : : -1, -1, -1,</a>
-<a name="587"><span class="lineNum"> 587 </span> : : NULL, },</a>
-<a name="588"><span class="lineNum"> 588 </span> : : </a>
-<a name="589"><span class="lineNum"> 589 </span> : : /*</a>
-<a name="590"><span class="lineNum"> 590 </span> : : * ISAv3.0B Book3S Chapter 7. Timer Facilities</a>
-<a name="591"><span class="lineNum"> 591 </span> : : * Large decrementer and hypervisor decrementer</a>
-<a name="592"><span class="lineNum"> 592 </span> : : */</a>
-<a name="593"><span class="lineNum"> 593 </span> : : { &quot;timer-facilities-v3&quot;,</a>
-<a name="594"><span class="lineNum"> 594 </span> : : CPU_P9,</a>
-<a name="595"><span class="lineNum"> 595 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS,</a>
-<a name="596"><span class="lineNum"> 596 </span> : : HV_NONE, OS_NONE,</a>
-<a name="597"><span class="lineNum"> 597 </span> : : -1, -1, -1,</a>
-<a name="598"><span class="lineNum"> 598 </span> : : &quot;timer-facilities&quot;, },</a>
-<a name="599"><span class="lineNum"> 599 </span> : : </a>
-<a name="600"><span class="lineNum"> 600 </span> : : /*</a>
-<a name="601"><span class="lineNum"> 601 </span> : : * ISAv3.0B deliver a random number instruction (darn)</a>
-<a name="602"><span class="lineNum"> 602 </span> : : */</a>
-<a name="603"><span class="lineNum"> 603 </span> : : { &quot;random-number-generator&quot;,</a>
-<a name="604"><span class="lineNum"> 604 </span> : : CPU_P9,</a>
-<a name="605"><span class="lineNum"> 605 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="606"><span class="lineNum"> 606 </span> : : HV_NONE, OS_NONE,</a>
-<a name="607"><span class="lineNum"> 607 </span> : : -1, -1, 53,</a>
-<a name="608"><span class="lineNum"> 608 </span> : : NULL, },</a>
-<a name="609"><span class="lineNum"> 609 </span> : : </a>
-<a name="610"><span class="lineNum"> 610 </span> : : /*</a>
-<a name="611"><span class="lineNum"> 611 </span> : : * ISAv3.0B fixed point instructions and registers</a>
-<a name="612"><span class="lineNum"> 612 </span> : : * multiply-add, modulo, count trailing zeroes, cmprb, cmpeqb,</a>
-<a name="613"><span class="lineNum"> 613 </span> : : * extswsli, mfvsrld, mtvsrdd, mtvsrws, addex, CA32, OV32,</a>
-<a name="614"><span class="lineNum"> 614 </span> : : * mcrxrx, setb</a>
-<a name="615"><span class="lineNum"> 615 </span> : : */</a>
-<a name="616"><span class="lineNum"> 616 </span> : : { &quot;fixed-point-v3&quot;,</a>
-<a name="617"><span class="lineNum"> 617 </span> : : CPU_P9,</a>
-<a name="618"><span class="lineNum"> 618 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="619"><span class="lineNum"> 619 </span> : : HV_NONE, OS_NONE,</a>
-<a name="620"><span class="lineNum"> 620 </span> : : -1, -1, -1,</a>
-<a name="621"><span class="lineNum"> 621 </span> : : NULL, },</a>
-<a name="622"><span class="lineNum"> 622 </span> : : </a>
-<a name="623"><span class="lineNum"> 623 </span> : : { &quot;decimal-integer-v3&quot;,</a>
-<a name="624"><span class="lineNum"> 624 </span> : : CPU_P9,</a>
-<a name="625"><span class="lineNum"> 625 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="626"><span class="lineNum"> 626 </span> : : HV_NONE, OS_NONE,</a>
-<a name="627"><span class="lineNum"> 627 </span> : : -1, -1, -1,</a>
-<a name="628"><span class="lineNum"> 628 </span> : : &quot;fixed-point-v3 decimal-integer&quot;, },</a>
-<a name="629"><span class="lineNum"> 629 </span> : : </a>
-<a name="630"><span class="lineNum"> 630 </span> : : /*</a>
-<a name="631"><span class="lineNum"> 631 </span> : : * ISAv3.0B lightweight mffs</a>
-<a name="632"><span class="lineNum"> 632 </span> : : */</a>
-<a name="633"><span class="lineNum"> 633 </span> : : { &quot;floating-point-v3&quot;,</a>
-<a name="634"><span class="lineNum"> 634 </span> : : CPU_P9,</a>
-<a name="635"><span class="lineNum"> 635 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="636"><span class="lineNum"> 636 </span> : : HV_NONE, OS_NONE,</a>
-<a name="637"><span class="lineNum"> 637 </span> : : -1, -1, -1,</a>
-<a name="638"><span class="lineNum"> 638 </span> : : &quot;floating-point&quot;, },</a>
-<a name="639"><span class="lineNum"> 639 </span> : : </a>
-<a name="640"><span class="lineNum"> 640 </span> : : { &quot;decimal-floating-point-v3&quot;,</a>
-<a name="641"><span class="lineNum"> 641 </span> : : CPU_P9,</a>
-<a name="642"><span class="lineNum"> 642 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="643"><span class="lineNum"> 643 </span> : : HV_NONE, OS_NONE,</a>
-<a name="644"><span class="lineNum"> 644 </span> : : -1, -1, -1,</a>
-<a name="645"><span class="lineNum"> 645 </span> : : &quot;floating-point-v3 decimal-floating-point&quot;, },</a>
-<a name="646"><span class="lineNum"> 646 </span> : : </a>
-<a name="647"><span class="lineNum"> 647 </span> : : { &quot;vector-v3&quot;,</a>
-<a name="648"><span class="lineNum"> 648 </span> : : CPU_P9,</a>
-<a name="649"><span class="lineNum"> 649 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="650"><span class="lineNum"> 650 </span> : : HV_NONE, OS_NONE,</a>
-<a name="651"><span class="lineNum"> 651 </span> : : -1, -1, -1,</a>
-<a name="652"><span class="lineNum"> 652 </span> : : &quot;vector&quot;, },</a>
-<a name="653"><span class="lineNum"> 653 </span> : : </a>
-<a name="654"><span class="lineNum"> 654 </span> : : { &quot;vector-scalar-v3&quot;,</a>
-<a name="655"><span class="lineNum"> 655 </span> : : CPU_P9,</a>
-<a name="656"><span class="lineNum"> 656 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="657"><span class="lineNum"> 657 </span> : : HV_NONE, OS_NONE,</a>
-<a name="658"><span class="lineNum"> 658 </span> : : -1, -1, -1,</a>
-<a name="659"><span class="lineNum"> 659 </span> : : &quot;vector-v3 vector-scalar&quot; },</a>
-<a name="660"><span class="lineNum"> 660 </span> : : </a>
-<a name="661"><span class="lineNum"> 661 </span> : : { &quot;vector-binary128&quot;,</a>
-<a name="662"><span class="lineNum"> 662 </span> : : CPU_P9,</a>
-<a name="663"><span class="lineNum"> 663 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="664"><span class="lineNum"> 664 </span> : : HV_NONE, OS_NONE,</a>
-<a name="665"><span class="lineNum"> 665 </span> : : -1, -1, 54,</a>
-<a name="666"><span class="lineNum"> 666 </span> : : &quot;vector-scalar-v3&quot;, },</a>
-<a name="667"><span class="lineNum"> 667 </span> : : </a>
-<a name="668"><span class="lineNum"> 668 </span> : : { &quot;vector-binary16&quot;,</a>
-<a name="669"><span class="lineNum"> 669 </span> : : CPU_P9,</a>
-<a name="670"><span class="lineNum"> 670 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="671"><span class="lineNum"> 671 </span> : : HV_NONE, OS_NONE,</a>
-<a name="672"><span class="lineNum"> 672 </span> : : -1, -1, -1,</a>
-<a name="673"><span class="lineNum"> 673 </span> : : &quot;vector-v3&quot;, },</a>
-<a name="674"><span class="lineNum"> 674 </span> : : </a>
-<a name="675"><span class="lineNum"> 675 </span> : : /*</a>
-<a name="676"><span class="lineNum"> 676 </span> : : * ISAv3.0B external exception for EBB</a>
-<a name="677"><span class="lineNum"> 677 </span> : : */</a>
-<a name="678"><span class="lineNum"> 678 </span> : : { &quot;event-based-branch-v3&quot;,</a>
-<a name="679"><span class="lineNum"> 679 </span> : : CPU_P9,</a>
-<a name="680"><span class="lineNum"> 680 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="681"><span class="lineNum"> 681 </span> : : HV_NONE, OS_NONE,</a>
-<a name="682"><span class="lineNum"> 682 </span> : : -1, -1, -1,</a>
-<a name="683"><span class="lineNum"> 683 </span> : : &quot;event-based-branch&quot;, },</a>
-<a name="684"><span class="lineNum"> 684 </span> : : </a>
-<a name="685"><span class="lineNum"> 685 </span> : : /*</a>
-<a name="686"><span class="lineNum"> 686 </span> : : * ISAv3.0B Atomic Memory Operations (AMO)</a>
-<a name="687"><span class="lineNum"> 687 </span> : : */</a>
-<a name="688"><span class="lineNum"> 688 </span> : : { &quot;atomic-memory-operations&quot;,</a>
-<a name="689"><span class="lineNum"> 689 </span> : : CPU_P9,</a>
-<a name="690"><span class="lineNum"> 690 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="691"><span class="lineNum"> 691 </span> : : HV_NONE, OS_NONE,</a>
-<a name="692"><span class="lineNum"> 692 </span> : : -1, -1, -1,</a>
-<a name="693"><span class="lineNum"> 693 </span> : : NULL, },</a>
-<a name="694"><span class="lineNum"> 694 </span> : : </a>
-<a name="695"><span class="lineNum"> 695 </span> : : /*</a>
-<a name="696"><span class="lineNum"> 696 </span> : : * ISAv3.0B Copy-Paste Facility</a>
-<a name="697"><span class="lineNum"> 697 </span> : : */</a>
-<a name="698"><span class="lineNum"> 698 </span> : : { &quot;copy-paste&quot;,</a>
-<a name="699"><span class="lineNum"> 699 </span> : : CPU_P9,</a>
-<a name="700"><span class="lineNum"> 700 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
-<a name="701"><span class="lineNum"> 701 </span> : : HV_NONE, OS_NONE,</a>
-<a name="702"><span class="lineNum"> 702 </span> : : -1, -1, -1,</a>
-<a name="703"><span class="lineNum"> 703 </span> : : NULL, },</a>
-<a name="704"><span class="lineNum"> 704 </span> : : </a>
-<a name="705"><span class="lineNum"> 705 </span> : : /*</a>
-<a name="706"><span class="lineNum"> 706 </span> : : * ISAv3.0B GSR SPR register</a>
-<a name="707"><span class="lineNum"> 707 </span> : : * POWER9 does not implement it</a>
-<a name="708"><span class="lineNum"> 708 </span> : : */</a>
-<a name="709"><span class="lineNum"> 709 </span> : : { &quot;group-start-register&quot;,</a>
-<a name="710"><span class="lineNum"> 710 </span> : : 0,</a>
-<a name="711"><span class="lineNum"> 711 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS,</a>
-<a name="712"><span class="lineNum"> 712 </span> : : HV_NONE, OS_NONE,</a>
-<a name="713"><span class="lineNum"> 713 </span> : : -1, -1, -1,</a>
-<a name="714"><span class="lineNum"> 714 </span> : : NULL, },</a>
-<a name="715"><span class="lineNum"> 715 </span> : : </a>
-<a name="716"><span class="lineNum"> 716 </span> : : /*</a>
-<a name="717"><span class="lineNum"> 717 </span> : : * Due to hardware bugs in POWER9, the hypervisor needs to assist</a>
-<a name="718"><span class="lineNum"> 718 </span> : : * guests.</a>
-<a name="719"><span class="lineNum"> 719 </span> : : *</a>
-<a name="720"><span class="lineNum"> 720 </span> : : * Presence of this feature indicates presence of the bug.</a>
-<a name="721"><span class="lineNum"> 721 </span> : : *</a>
-<a name="722"><span class="lineNum"> 722 </span> : : * See linux kernel commit 4bb3c7a0208f</a>
-<a name="723"><span class="lineNum"> 723 </span> : : * and linux Documentation/powerpc/transactional_memory.txt</a>
-<a name="724"><span class="lineNum"> 724 </span> : : */</a>
-<a name="725"><span class="lineNum"> 725 </span> : : { &quot;tm-suspend-hypervisor-assist&quot;,</a>
-<a name="726"><span class="lineNum"> 726 </span> : : CPU_P9_DD2_2|CPU_P9_DD2_3|CPU_P9P,</a>
-<a name="727"><span class="lineNum"> 727 </span> : : ISA_V3_0B, USABLE_HV,</a>
-<a name="728"><span class="lineNum"> 728 </span> : : HV_CUSTOM, OS_NONE,</a>
-<a name="729"><span class="lineNum"> 729 </span> : : -1, -1, -1,</a>
-<a name="730"><span class="lineNum"> 730 </span> : : NULL, },</a>
-<a name="731"><span class="lineNum"> 731 </span> : : </a>
-<a name="732"><span class="lineNum"> 732 </span> : : /*</a>
-<a name="733"><span class="lineNum"> 733 </span> : : * Due to hardware bugs in POWER9, the hypervisor can hit</a>
-<a name="734"><span class="lineNum"> 734 </span> : : * CPU bugs in the operations it needs to do for</a>
-<a name="735"><span class="lineNum"> 735 </span> : : * tm-suspend-hypervisor-assist.</a>
-<a name="736"><span class="lineNum"> 736 </span> : : *</a>
-<a name="737"><span class="lineNum"> 737 </span> : : * Presence of this &quot;feature&quot; means processor is affected by the bug.</a>
-<a name="738"><span class="lineNum"> 738 </span> : : *</a>
-<a name="739"><span class="lineNum"> 739 </span> : : * See linux kernel commit 4bb3c7a0208f</a>
-<a name="740"><span class="lineNum"> 740 </span> : : * and linux Documentation/powerpc/transactional_memory.txt</a>
-<a name="741"><span class="lineNum"> 741 </span> : : */</a>
-<a name="742"><span class="lineNum"> 742 </span> : : { &quot;tm-suspend-xer-so-bug&quot;,</a>
-<a name="743"><span class="lineNum"> 743 </span> : : CPU_P9_DD2_2,</a>
-<a name="744"><span class="lineNum"> 744 </span> : : ISA_V3_0B, USABLE_HV,</a>
-<a name="745"><span class="lineNum"> 745 </span> : : HV_CUSTOM, OS_NONE,</a>
-<a name="746"><span class="lineNum"> 746 </span> : : -1, -1, -1,</a>
-<a name="747"><span class="lineNum"> 747 </span> : : NULL, },</a>
-<a name="748"><span class="lineNum"> 748 </span> : : };</a>
-<a name="749"><span class="lineNum"> 749 </span> : : </a>
-<a name="750"><span class="lineNum"> 750 </span> :<span class="lineCov"> 432 : static void add_cpu_feature_nodeps(struct dt_node *features,</span></a>
-<a name="751"><span class="lineNum"> 751 </span> : : const struct cpu_feature *f)</a>
-<a name="752"><span class="lineNum"> 752 </span> : : {</a>
-<a name="753"><span class="lineNum"> 753 </span> : : struct dt_node *feature;</a>
-<a name="754"><span class="lineNum"> 754 </span> : : </a>
-<a name="755"><span class="lineNum"> 755 </span> :<span class="lineCov"> 432 : feature = dt_new(features, f-&gt;name);</span></a>
-<a name="756"><span class="lineNum"> 756 </span> :<span class="lineCov"> 432 : assert(feature);</span></a>
+<a name="578"><span class="lineNum"> 578 </span> : : * ISAv3.0B scv/rfscv system call instructions and exceptions, fscr bit</a>
+<a name="579"><span class="lineNum"> 579 </span> : : * etc.</a>
+<a name="580"><span class="lineNum"> 580 </span> : : */</a>
+<a name="581"><span class="lineNum"> 581 </span> : : { &quot;system-call-vectored&quot;,</a>
+<a name="582"><span class="lineNum"> 582 </span> : : CPU_P9|CPU_P10,</a>
+<a name="583"><span class="lineNum"> 583 </span> : : ISA_V3_0B, USABLE_OS|USABLE_PR,</a>
+<a name="584"><span class="lineNum"> 584 </span> : : HV_NONE, OS_CUSTOM,</a>
+<a name="585"><span class="lineNum"> 585 </span> : : -1, PPC_BITLSHIFT(51), 52,</a>
+<a name="586"><span class="lineNum"> 586 </span> : : NULL, },</a>
+<a name="587"><span class="lineNum"> 587 </span> : : </a>
+<a name="588"><span class="lineNum"> 588 </span> : : /*</a>
+<a name="589"><span class="lineNum"> 589 </span> : : * ISAv3.0B Book3S Chapter 10. Processor Control.</a>
+<a name="590"><span class="lineNum"> 590 </span> : : * global msgsnd, msgsndp, msgsync, doorbell, etc.</a>
+<a name="591"><span class="lineNum"> 591 </span> : : */</a>
+<a name="592"><span class="lineNum"> 592 </span> : : { &quot;processor-control-facility-v3&quot;,</a>
+<a name="593"><span class="lineNum"> 593 </span> : : CPU_P9|CPU_P10,</a>
+<a name="594"><span class="lineNum"> 594 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS,</a>
+<a name="595"><span class="lineNum"> 595 </span> : : HV_CUSTOM, OS_NONE,</a>
+<a name="596"><span class="lineNum"> 596 </span> : : PPC_BITLSHIFT(53), -1, -1,</a>
+<a name="597"><span class="lineNum"> 597 </span> : : NULL, },</a>
+<a name="598"><span class="lineNum"> 598 </span> : : </a>
+<a name="599"><span class="lineNum"> 599 </span> : : /*</a>
+<a name="600"><span class="lineNum"> 600 </span> : : * ISAv3.0B addpcis instruction</a>
+<a name="601"><span class="lineNum"> 601 </span> : : */</a>
+<a name="602"><span class="lineNum"> 602 </span> : : { &quot;pc-relative-addressing&quot;,</a>
+<a name="603"><span class="lineNum"> 603 </span> : : CPU_P9|CPU_P10,</a>
+<a name="604"><span class="lineNum"> 604 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="605"><span class="lineNum"> 605 </span> : : HV_NONE, OS_NONE,</a>
+<a name="606"><span class="lineNum"> 606 </span> : : -1, -1, -1,</a>
+<a name="607"><span class="lineNum"> 607 </span> : : NULL, },</a>
+<a name="608"><span class="lineNum"> 608 </span> : : </a>
+<a name="609"><span class="lineNum"> 609 </span> : : /*</a>
+<a name="610"><span class="lineNum"> 610 </span> : : * ISAv2.07B Book3S Chapter 7. Timer Facilities</a>
+<a name="611"><span class="lineNum"> 611 </span> : : * TB, VTB, DEC, HDEC, IC, etc registers and exceptions.</a>
+<a name="612"><span class="lineNum"> 612 </span> : : * Not including PURR or SPURR registers.</a>
+<a name="613"><span class="lineNum"> 613 </span> : : */</a>
+<a name="614"><span class="lineNum"> 614 </span> : : { &quot;timer-facilities&quot;,</a>
+<a name="615"><span class="lineNum"> 615 </span> : : CPU_ALL,</a>
+<a name="616"><span class="lineNum"> 616 </span> : : ISA_BASE, USABLE_HV|USABLE_OS,</a>
+<a name="617"><span class="lineNum"> 617 </span> : : HV_NONE, OS_NONE,</a>
+<a name="618"><span class="lineNum"> 618 </span> : : -1, -1, -1,</a>
+<a name="619"><span class="lineNum"> 619 </span> : : NULL, },</a>
+<a name="620"><span class="lineNum"> 620 </span> : : </a>
+<a name="621"><span class="lineNum"> 621 </span> : : /*</a>
+<a name="622"><span class="lineNum"> 622 </span> : : * ISAv3.0B Book3S Chapter 7. Timer Facilities</a>
+<a name="623"><span class="lineNum"> 623 </span> : : * Large decrementer and hypervisor decrementer</a>
+<a name="624"><span class="lineNum"> 624 </span> : : */</a>
+<a name="625"><span class="lineNum"> 625 </span> : : { &quot;timer-facilities-v3&quot;,</a>
+<a name="626"><span class="lineNum"> 626 </span> : : CPU_P9|CPU_P10,</a>
+<a name="627"><span class="lineNum"> 627 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS,</a>
+<a name="628"><span class="lineNum"> 628 </span> : : HV_NONE, OS_NONE,</a>
+<a name="629"><span class="lineNum"> 629 </span> : : -1, -1, -1,</a>
+<a name="630"><span class="lineNum"> 630 </span> : : &quot;timer-facilities&quot;, },</a>
+<a name="631"><span class="lineNum"> 631 </span> : : </a>
+<a name="632"><span class="lineNum"> 632 </span> : : /*</a>
+<a name="633"><span class="lineNum"> 633 </span> : : * ISAv3.0B deliver a random number instruction (darn)</a>
+<a name="634"><span class="lineNum"> 634 </span> : : */</a>
+<a name="635"><span class="lineNum"> 635 </span> : : { &quot;random-number-generator&quot;,</a>
+<a name="636"><span class="lineNum"> 636 </span> : : CPU_P9|CPU_P10,</a>
+<a name="637"><span class="lineNum"> 637 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="638"><span class="lineNum"> 638 </span> : : HV_NONE, OS_NONE,</a>
+<a name="639"><span class="lineNum"> 639 </span> : : -1, -1, 53,</a>
+<a name="640"><span class="lineNum"> 640 </span> : : NULL, },</a>
+<a name="641"><span class="lineNum"> 641 </span> : : </a>
+<a name="642"><span class="lineNum"> 642 </span> : : /*</a>
+<a name="643"><span class="lineNum"> 643 </span> : : * ISAv3.0B fixed point instructions and registers</a>
+<a name="644"><span class="lineNum"> 644 </span> : : * multiply-add, modulo, count trailing zeroes, cmprb, cmpeqb,</a>
+<a name="645"><span class="lineNum"> 645 </span> : : * extswsli, mfvsrld, mtvsrdd, mtvsrws, addex, CA32, OV32,</a>
+<a name="646"><span class="lineNum"> 646 </span> : : * mcrxrx, setb</a>
+<a name="647"><span class="lineNum"> 647 </span> : : */</a>
+<a name="648"><span class="lineNum"> 648 </span> : : { &quot;fixed-point-v3&quot;,</a>
+<a name="649"><span class="lineNum"> 649 </span> : : CPU_P9|CPU_P10,</a>
+<a name="650"><span class="lineNum"> 650 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="651"><span class="lineNum"> 651 </span> : : HV_NONE, OS_NONE,</a>
+<a name="652"><span class="lineNum"> 652 </span> : : -1, -1, -1,</a>
+<a name="653"><span class="lineNum"> 653 </span> : : NULL, },</a>
+<a name="654"><span class="lineNum"> 654 </span> : : </a>
+<a name="655"><span class="lineNum"> 655 </span> : : { &quot;decimal-integer-v3&quot;,</a>
+<a name="656"><span class="lineNum"> 656 </span> : : CPU_P9|CPU_P10,</a>
+<a name="657"><span class="lineNum"> 657 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="658"><span class="lineNum"> 658 </span> : : HV_NONE, OS_NONE,</a>
+<a name="659"><span class="lineNum"> 659 </span> : : -1, -1, -1,</a>
+<a name="660"><span class="lineNum"> 660 </span> : : &quot;fixed-point-v3 decimal-integer&quot;, },</a>
+<a name="661"><span class="lineNum"> 661 </span> : : </a>
+<a name="662"><span class="lineNum"> 662 </span> : : /*</a>
+<a name="663"><span class="lineNum"> 663 </span> : : * ISAv3.0B lightweight mffs</a>
+<a name="664"><span class="lineNum"> 664 </span> : : */</a>
+<a name="665"><span class="lineNum"> 665 </span> : : { &quot;floating-point-v3&quot;,</a>
+<a name="666"><span class="lineNum"> 666 </span> : : CPU_P9|CPU_P10,</a>
+<a name="667"><span class="lineNum"> 667 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="668"><span class="lineNum"> 668 </span> : : HV_NONE, OS_NONE,</a>
+<a name="669"><span class="lineNum"> 669 </span> : : -1, -1, -1,</a>
+<a name="670"><span class="lineNum"> 670 </span> : : &quot;floating-point&quot;, },</a>
+<a name="671"><span class="lineNum"> 671 </span> : : </a>
+<a name="672"><span class="lineNum"> 672 </span> : : { &quot;decimal-floating-point-v3&quot;,</a>
+<a name="673"><span class="lineNum"> 673 </span> : : CPU_P9|CPU_P10,</a>
+<a name="674"><span class="lineNum"> 674 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="675"><span class="lineNum"> 675 </span> : : HV_NONE, OS_NONE,</a>
+<a name="676"><span class="lineNum"> 676 </span> : : -1, -1, -1,</a>
+<a name="677"><span class="lineNum"> 677 </span> : : &quot;floating-point-v3 decimal-floating-point&quot;, },</a>
+<a name="678"><span class="lineNum"> 678 </span> : : </a>
+<a name="679"><span class="lineNum"> 679 </span> : : { &quot;vector-v3&quot;,</a>
+<a name="680"><span class="lineNum"> 680 </span> : : CPU_P9|CPU_P10,</a>
+<a name="681"><span class="lineNum"> 681 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="682"><span class="lineNum"> 682 </span> : : HV_NONE, OS_NONE,</a>
+<a name="683"><span class="lineNum"> 683 </span> : : -1, -1, -1,</a>
+<a name="684"><span class="lineNum"> 684 </span> : : &quot;vector&quot;, },</a>
+<a name="685"><span class="lineNum"> 685 </span> : : </a>
+<a name="686"><span class="lineNum"> 686 </span> : : { &quot;vector-scalar-v3&quot;,</a>
+<a name="687"><span class="lineNum"> 687 </span> : : CPU_P9|CPU_P10,</a>
+<a name="688"><span class="lineNum"> 688 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="689"><span class="lineNum"> 689 </span> : : HV_NONE, OS_NONE,</a>
+<a name="690"><span class="lineNum"> 690 </span> : : -1, -1, -1,</a>
+<a name="691"><span class="lineNum"> 691 </span> : : &quot;vector-v3 vector-scalar&quot; },</a>
+<a name="692"><span class="lineNum"> 692 </span> : : </a>
+<a name="693"><span class="lineNum"> 693 </span> : : { &quot;vector-binary128&quot;,</a>
+<a name="694"><span class="lineNum"> 694 </span> : : CPU_P9|CPU_P10,</a>
+<a name="695"><span class="lineNum"> 695 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="696"><span class="lineNum"> 696 </span> : : HV_NONE, OS_NONE,</a>
+<a name="697"><span class="lineNum"> 697 </span> : : -1, -1, 54,</a>
+<a name="698"><span class="lineNum"> 698 </span> : : &quot;vector-scalar-v3&quot;, },</a>
+<a name="699"><span class="lineNum"> 699 </span> : : </a>
+<a name="700"><span class="lineNum"> 700 </span> : : { &quot;vector-binary16&quot;,</a>
+<a name="701"><span class="lineNum"> 701 </span> : : CPU_P9|CPU_P10,</a>
+<a name="702"><span class="lineNum"> 702 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="703"><span class="lineNum"> 703 </span> : : HV_NONE, OS_NONE,</a>
+<a name="704"><span class="lineNum"> 704 </span> : : -1, -1, -1,</a>
+<a name="705"><span class="lineNum"> 705 </span> : : &quot;vector-v3&quot;, },</a>
+<a name="706"><span class="lineNum"> 706 </span> : : </a>
+<a name="707"><span class="lineNum"> 707 </span> : : /*</a>
+<a name="708"><span class="lineNum"> 708 </span> : : * ISAv3.0B external exception for EBB</a>
+<a name="709"><span class="lineNum"> 709 </span> : : */</a>
+<a name="710"><span class="lineNum"> 710 </span> : : { &quot;event-based-branch-v3&quot;,</a>
+<a name="711"><span class="lineNum"> 711 </span> : : CPU_P9|CPU_P10,</a>
+<a name="712"><span class="lineNum"> 712 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="713"><span class="lineNum"> 713 </span> : : HV_NONE, OS_NONE,</a>
+<a name="714"><span class="lineNum"> 714 </span> : : -1, -1, -1,</a>
+<a name="715"><span class="lineNum"> 715 </span> : : &quot;event-based-branch&quot;, },</a>
+<a name="716"><span class="lineNum"> 716 </span> : : </a>
+<a name="717"><span class="lineNum"> 717 </span> : : /*</a>
+<a name="718"><span class="lineNum"> 718 </span> : : * ISAv3.0B Atomic Memory Operations (AMO)</a>
+<a name="719"><span class="lineNum"> 719 </span> : : */</a>
+<a name="720"><span class="lineNum"> 720 </span> : : { &quot;atomic-memory-operations&quot;,</a>
+<a name="721"><span class="lineNum"> 721 </span> : : CPU_P9|CPU_P10,</a>
+<a name="722"><span class="lineNum"> 722 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="723"><span class="lineNum"> 723 </span> : : HV_NONE, OS_NONE,</a>
+<a name="724"><span class="lineNum"> 724 </span> : : -1, -1, -1,</a>
+<a name="725"><span class="lineNum"> 725 </span> : : NULL, },</a>
+<a name="726"><span class="lineNum"> 726 </span> : : </a>
+<a name="727"><span class="lineNum"> 727 </span> : : /*</a>
+<a name="728"><span class="lineNum"> 728 </span> : : * ISAv3.0B Copy-Paste Facility</a>
+<a name="729"><span class="lineNum"> 729 </span> : : */</a>
+<a name="730"><span class="lineNum"> 730 </span> : : { &quot;copy-paste&quot;,</a>
+<a name="731"><span class="lineNum"> 731 </span> : : CPU_P9|CPU_P10,</a>
+<a name="732"><span class="lineNum"> 732 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="733"><span class="lineNum"> 733 </span> : : HV_NONE, OS_NONE,</a>
+<a name="734"><span class="lineNum"> 734 </span> : : -1, -1, -1,</a>
+<a name="735"><span class="lineNum"> 735 </span> : : NULL, },</a>
+<a name="736"><span class="lineNum"> 736 </span> : : </a>
+<a name="737"><span class="lineNum"> 737 </span> : : /*</a>
+<a name="738"><span class="lineNum"> 738 </span> : : * ISAv3.0B GSR SPR register</a>
+<a name="739"><span class="lineNum"> 739 </span> : : * POWER9 does not implement it</a>
+<a name="740"><span class="lineNum"> 740 </span> : : */</a>
+<a name="741"><span class="lineNum"> 741 </span> : : { &quot;group-start-register&quot;,</a>
+<a name="742"><span class="lineNum"> 742 </span> : : 0,</a>
+<a name="743"><span class="lineNum"> 743 </span> : : ISA_V3_0B, USABLE_HV|USABLE_OS,</a>
+<a name="744"><span class="lineNum"> 744 </span> : : HV_NONE, OS_NONE,</a>
+<a name="745"><span class="lineNum"> 745 </span> : : -1, -1, -1,</a>
+<a name="746"><span class="lineNum"> 746 </span> : : NULL, },</a>
+<a name="747"><span class="lineNum"> 747 </span> : : </a>
+<a name="748"><span class="lineNum"> 748 </span> : : /*</a>
+<a name="749"><span class="lineNum"> 749 </span> : : * Enable matrix multiply accumulate.</a>
+<a name="750"><span class="lineNum"> 750 </span> : : */</a>
+<a name="751"><span class="lineNum"> 751 </span> : : { &quot;matrix-multiply-accumulate&quot;,</a>
+<a name="752"><span class="lineNum"> 752 </span> : : CPU_P10,</a>
+<a name="753"><span class="lineNum"> 753 </span> : : ISA_V3_1, USABLE_PR,</a>
+<a name="754"><span class="lineNum"> 754 </span> : : HV_CUSTOM, OS_CUSTOM,</a>
+<a name="755"><span class="lineNum"> 755 </span> : : -1, -1, 49,</a>
+<a name="756"><span class="lineNum"> 756 </span> : : NULL, },</a>
<a name="757"><span class="lineNum"> 757 </span> : : </a>
-<a name="758"><span class="lineNum"> 758 </span> :<span class="lineCov"> 432 : dt_add_property_cells(feature, &quot;isa&quot;, f-&gt;isa);</span></a>
-<a name="759"><span class="lineNum"> 759 </span> :<span class="lineCov"> 432 : dt_add_property_cells(feature, &quot;usable-privilege&quot;, f-&gt;usable_privilege);</span></a>
-<a name="760"><span class="lineNum"> 760 </span> : : </a>
-<a name="761"><span class="lineNum"> 761 </span> :<span class="lineCov"> 432 : if (f-&gt;usable_privilege &amp; USABLE_HV) {</span></a>
-<a name="762"><span class="lineNum"> 762 </span> :<span class="lineCov"> 427 : if (f-&gt;hv_support != HV_NONE) {</span></a>
-<a name="763"><span class="lineNum"> 763 </span> :<span class="lineCov"> 287 : uint32_t s = 0;</span></a>
-<a name="764"><span class="lineNum"> 764 </span> :<span class="lineCov"> 287 : if (f-&gt;hv_support == HV_HFSCR)</span></a>
-<a name="765"><span class="lineNum"> 765 </span> :<span class="lineNoCov"> 0 : s |= HV_SUPPORT_HFSCR;</span></a>
-<a name="766"><span class="lineNum"> 766 </span> : : </a>
-<a name="767"><span class="lineNum"> 767 </span> :<span class="lineCov"> 287 : dt_add_property_cells(feature, &quot;hv-support&quot;, s);</span></a>
-<a name="768"><span class="lineNum"> 768 </span> :<span class="lineCov"> 287 : if (f-&gt;hfscr_bit_nr != -1)</span></a>
-<a name="769"><span class="lineNum"> 769 </span> :<span class="lineCov"> 70 : dt_add_property_cells(feature, &quot;hfscr-bit-nr&quot;, f-&gt;hfscr_bit_nr);</span></a>
-<a name="770"><span class="lineNum"> 770 </span> : : } else {</a>
-<a name="771"><span class="lineNum"> 771 </span> :<span class="lineCov"> 140 : assert(f-&gt;hfscr_bit_nr == -1);</span></a>
-<a name="772"><span class="lineNum"> 772 </span> : : }</a>
-<a name="773"><span class="lineNum"> 773 </span> : : }</a>
-<a name="774"><span class="lineNum"> 774 </span> : : </a>
-<a name="775"><span class="lineNum"> 775 </span> :<span class="lineCov"> 432 : if (f-&gt;usable_privilege &amp; USABLE_OS) {</span></a>
-<a name="776"><span class="lineNum"> 776 </span> :<span class="lineCov"> 408 : if (f-&gt;os_support != OS_NONE) {</span></a>
-<a name="777"><span class="lineNum"> 777 </span> :<span class="lineCov"> 263 : uint32_t s = 0;</span></a>
-<a name="778"><span class="lineNum"> 778 </span> :<span class="lineCov"> 263 : if (f-&gt;os_support == OS_FSCR)</span></a>
-<a name="779"><span class="lineNum"> 779 </span> :<span class="lineNoCov"> 0 : s |= OS_SUPPORT_FSCR;</span></a>
-<a name="780"><span class="lineNum"> 780 </span> :<span class="lineCov"> 263 : dt_add_property_cells(feature, &quot;os-support&quot;, s);</span></a>
-<a name="781"><span class="lineNum"> 781 </span> :<span class="lineCov"> 263 : if (f-&gt;fscr_bit_nr != -1)</span></a>
-<a name="782"><span class="lineNum"> 782 </span> :<span class="lineCov"> 35 : dt_add_property_cells(feature, &quot;fscr-bit-nr&quot;, f-&gt;fscr_bit_nr);</span></a>
-<a name="783"><span class="lineNum"> 783 </span> : : } else {</a>
-<a name="784"><span class="lineNum"> 784 </span> :<span class="lineCov"> 145 : assert(f-&gt;fscr_bit_nr == -1);</span></a>
-<a name="785"><span class="lineNum"> 785 </span> : : }</a>
-<a name="786"><span class="lineNum"> 786 </span> : : }</a>
-<a name="787"><span class="lineNum"> 787 </span> : : </a>
-<a name="788"><span class="lineNum"> 788 </span> :<span class="lineCov"> 432 : if (f-&gt;usable_privilege &amp; USABLE_PR) {</span></a>
-<a name="789"><span class="lineNum"> 789 </span> :<span class="lineCov"> 255 : if (f-&gt;hwcap_bit_nr != -1)</span></a>
-<a name="790"><span class="lineNum"> 790 </span> :<span class="lineCov"> 110 : dt_add_property_cells(feature, &quot;hwcap-bit-nr&quot;, f-&gt;hwcap_bit_nr);</span></a>
-<a name="791"><span class="lineNum"> 791 </span> : : }</a>
-<a name="792"><span class="lineNum"> 792 </span> : : </a>
-<a name="793"><span class="lineNum"> 793 </span> :<span class="lineCov"> 432 : if (f-&gt;dependencies_names)</span></a>
-<a name="794"><span class="lineNum"> 794 </span> :<span class="lineCov"> 110 : dt_add_property(feature, &quot;dependencies&quot;, NULL, 0);</span></a>
-<a name="795"><span class="lineNum"> 795 </span> :<span class="lineCov"> 432 : }</span></a>
-<a name="796"><span class="lineNum"> 796 </span> : : </a>
-<a name="797"><span class="lineNum"> 797 </span> :<span class="lineCov"> 10 : static void add_cpufeatures_dependencies(struct dt_node *features)</span></a>
-<a name="798"><span class="lineNum"> 798 </span> : : {</a>
-<a name="799"><span class="lineNum"> 799 </span> : : struct dt_node *feature;</a>
-<a name="800"><span class="lineNum"> 800 </span> : : </a>
-<a name="801"><span class="lineNum"> 801 </span> :<span class="lineCov"> 442 : dt_for_each_node(features, feature) {</span></a>
-<a name="802"><span class="lineNum"> 802 </span> :<span class="lineCov"> 432 : const struct cpu_feature *f = NULL;</span></a>
-<a name="803"><span class="lineNum"> 803 </span> : : const char *deps_names;</a>
-<a name="804"><span class="lineNum"> 804 </span> : : struct dt_property *deps;</a>
-<a name="805"><span class="lineNum"> 805 </span> : : int nr_deps;</a>
-<a name="806"><span class="lineNum"> 806 </span> : : int i;</a>
+<a name="758"><span class="lineNum"> 758 </span> : : /*</a>
+<a name="759"><span class="lineNum"> 759 </span> : : * Enable prefix instructions. Toolchains assume this is</a>
+<a name="760"><span class="lineNum"> 760 </span> : : * enabled for when compiling for ISA 3.1.</a>
+<a name="761"><span class="lineNum"> 761 </span> : : */</a>
+<a name="762"><span class="lineNum"> 762 </span> : : { &quot;prefix-instructions&quot;,</a>
+<a name="763"><span class="lineNum"> 763 </span> : : CPU_P10,</a>
+<a name="764"><span class="lineNum"> 764 </span> : : ISA_V3_1, USABLE_HV|USABLE_OS|USABLE_PR,</a>
+<a name="765"><span class="lineNum"> 765 </span> : : HV_HFSCR, OS_FSCR,</a>
+<a name="766"><span class="lineNum"> 766 </span> : : 13, 13, -1,</a>
+<a name="767"><span class="lineNum"> 767 </span> : : NULL, },</a>
+<a name="768"><span class="lineNum"> 768 </span> : : </a>
+<a name="769"><span class="lineNum"> 769 </span> : : /*</a>
+<a name="770"><span class="lineNum"> 770 </span> : : * Due to hardware bugs in POWER9, the hypervisor needs to assist</a>
+<a name="771"><span class="lineNum"> 771 </span> : : * guests.</a>
+<a name="772"><span class="lineNum"> 772 </span> : : *</a>
+<a name="773"><span class="lineNum"> 773 </span> : : * Presence of this feature indicates presence of the bug.</a>
+<a name="774"><span class="lineNum"> 774 </span> : : *</a>
+<a name="775"><span class="lineNum"> 775 </span> : : * See linux kernel commit 4bb3c7a0208f</a>
+<a name="776"><span class="lineNum"> 776 </span> : : * and linux Documentation/powerpc/transactional_memory.txt</a>
+<a name="777"><span class="lineNum"> 777 </span> : : */</a>
+<a name="778"><span class="lineNum"> 778 </span> : : { &quot;tm-suspend-hypervisor-assist&quot;,</a>
+<a name="779"><span class="lineNum"> 779 </span> : : CPU_P9_DD2_2|CPU_P9_DD2_3|CPU_P9P,</a>
+<a name="780"><span class="lineNum"> 780 </span> : : ISA_V3_0B, USABLE_HV,</a>
+<a name="781"><span class="lineNum"> 781 </span> : : HV_CUSTOM, OS_NONE,</a>
+<a name="782"><span class="lineNum"> 782 </span> : : -1, -1, -1,</a>
+<a name="783"><span class="lineNum"> 783 </span> : : NULL, },</a>
+<a name="784"><span class="lineNum"> 784 </span> : : </a>
+<a name="785"><span class="lineNum"> 785 </span> : : /*</a>
+<a name="786"><span class="lineNum"> 786 </span> : : * Due to hardware bugs in POWER9, the hypervisor can hit</a>
+<a name="787"><span class="lineNum"> 787 </span> : : * CPU bugs in the operations it needs to do for</a>
+<a name="788"><span class="lineNum"> 788 </span> : : * tm-suspend-hypervisor-assist.</a>
+<a name="789"><span class="lineNum"> 789 </span> : : *</a>
+<a name="790"><span class="lineNum"> 790 </span> : : * Presence of this &quot;feature&quot; means processor is affected by the bug.</a>
+<a name="791"><span class="lineNum"> 791 </span> : : *</a>
+<a name="792"><span class="lineNum"> 792 </span> : : * See linux kernel commit 4bb3c7a0208f</a>
+<a name="793"><span class="lineNum"> 793 </span> : : * and linux Documentation/powerpc/transactional_memory.txt</a>
+<a name="794"><span class="lineNum"> 794 </span> : : */</a>
+<a name="795"><span class="lineNum"> 795 </span> : : { &quot;tm-suspend-xer-so-bug&quot;,</a>
+<a name="796"><span class="lineNum"> 796 </span> : : CPU_P9_DD2_2,</a>
+<a name="797"><span class="lineNum"> 797 </span> : : ISA_V3_0B, USABLE_HV,</a>
+<a name="798"><span class="lineNum"> 798 </span> : : HV_CUSTOM, OS_NONE,</a>
+<a name="799"><span class="lineNum"> 799 </span> : : -1, -1, -1,</a>
+<a name="800"><span class="lineNum"> 800 </span> : : NULL, },</a>
+<a name="801"><span class="lineNum"> 801 </span> : : };</a>
+<a name="802"><span class="lineNum"> 802 </span> : : </a>
+<a name="803"><span class="lineNum"> 803 </span> :<span class="lineCov"> 432 : static void add_cpu_feature_nodeps(struct dt_node *features,</span></a>
+<a name="804"><span class="lineNum"> 804 </span> : : const struct cpu_feature *f)</a>
+<a name="805"><span class="lineNum"> 805 </span> : : {</a>
+<a name="806"><span class="lineNum"> 806 </span> : : struct dt_node *feature;</a>
<a name="807"><span class="lineNum"> 807 </span> : : </a>
-<a name="808"><span class="lineNum"> 808 </span> : : /* Find features with dependencies */</a>
-<a name="809"><span class="lineNum"> 809 </span> : : </a>
-<a name="810"><span class="lineNum"> 810 </span> :<span class="lineCov"> 432 : deps = __dt_find_property(feature, &quot;dependencies&quot;);</span></a>
-<a name="811"><span class="lineNum"> 811 </span> :<span class="lineCov"> 432 : if (!deps)</span></a>
-<a name="812"><span class="lineNum"> 812 </span> :<span class="lineCov"> 322 : continue;</span></a>
+<a name="808"><span class="lineNum"> 808 </span> :<span class="lineCov"> 432 : feature = dt_new(features, f-&gt;name);</span></a>
+<a name="809"><span class="lineNum"> 809 </span> :<span class="lineCov"> 432 : assert(feature);</span></a>
+<a name="810"><span class="lineNum"> 810 </span> : : </a>
+<a name="811"><span class="lineNum"> 811 </span> :<span class="lineCov"> 432 : dt_add_property_cells(feature, &quot;isa&quot;, f-&gt;isa);</span></a>
+<a name="812"><span class="lineNum"> 812 </span> :<span class="lineCov"> 432 : dt_add_property_cells(feature, &quot;usable-privilege&quot;, f-&gt;usable_privilege);</span></a>
<a name="813"><span class="lineNum"> 813 </span> : : </a>
-<a name="814"><span class="lineNum"> 814 </span> : : /* Find the matching cpu table */</a>
-<a name="815"><span class="lineNum"> 815 </span> :<span class="lineCov"> 3580 : for (i = 0; i &lt; ARRAY_SIZE(cpu_features_table); i++) {</span></a>
-<a name="816"><span class="lineNum"> 816 </span> :<span class="lineCov"> 3580 : f = &amp;cpu_features_table[i];</span></a>
-<a name="817"><span class="lineNum"> 817 </span> :<span class="lineCov"> 3580 : if (!strcmp(f-&gt;name, feature-&gt;name))</span></a>
-<a name="818"><span class="lineNum"> 818 </span> :<span class="lineCov"> 110 : break;</span></a>
-<a name="819"><span class="lineNum"> 819 </span> : : }</a>
-<a name="820"><span class="lineNum"> 820 </span> :<span class="lineCov"> 110 : assert(f);</span></a>
-<a name="821"><span class="lineNum"> 821 </span> :<span class="lineCov"> 110 : assert(f-&gt;dependencies_names);</span></a>
-<a name="822"><span class="lineNum"> 822 </span> : : </a>
-<a name="823"><span class="lineNum"> 823 </span> : : /*</a>
-<a name="824"><span class="lineNum"> 824 </span> : : * Count number of depended features and allocate space</a>
-<a name="825"><span class="lineNum"> 825 </span> : : * for phandles in the property.</a>
-<a name="826"><span class="lineNum"> 826 </span> : : */</a>
-<a name="827"><span class="lineNum"> 827 </span> :<span class="lineCov"> 110 : deps_names = f-&gt;dependencies_names;</span></a>
-<a name="828"><span class="lineNum"> 828 </span> :<span class="lineCov"> 110 : nr_deps = strcount(deps_names, &quot; &quot;) + 1;</span></a>
-<a name="829"><span class="lineNum"> 829 </span> :<span class="lineCov"> 110 : dt_resize_property(&amp;deps, nr_deps * sizeof(u32));</span></a>
-<a name="830"><span class="lineNum"> 830 </span> : : </a>
-<a name="831"><span class="lineNum"> 831 </span> :<span class="lineCov"> 110 : DBG(&quot;feature %s has %d dependencies (%s)\n&quot;, f-&gt;name, nr_deps, deps_names);</span></a>
-<a name="832"><span class="lineNum"> 832 </span> : : /*</a>
-<a name="833"><span class="lineNum"> 833 </span> : : * For each one, find the depended feature then advance to</a>
-<a name="834"><span class="lineNum"> 834 </span> : : * next name.</a>
-<a name="835"><span class="lineNum"> 835 </span> : : */</a>
-<a name="836"><span class="lineNum"> 836 </span> :<span class="lineCov"> 235 : for (i = 0; i &lt; nr_deps; i++) {</span></a>
-<a name="837"><span class="lineNum"> 837 </span> : : struct dt_node *dep;</a>
-<a name="838"><span class="lineNum"> 838 </span> : : int len;</a>
-<a name="839"><span class="lineNum"> 839 </span> : : </a>
-<a name="840"><span class="lineNum"> 840 </span> :<span class="lineCov"> 125 : if (nr_deps - i == 1)</span></a>
-<a name="841"><span class="lineNum"> 841 </span> :<span class="lineCov"> 110 : len = strlen(deps_names);</span></a>
-<a name="842"><span class="lineNum"> 842 </span> : : else</a>
-<a name="843"><span class="lineNum"> 843 </span> :<span class="lineCov"> 15 : len = strchr(deps_names, ' ') - deps_names;</span></a>
-<a name="844"><span class="lineNum"> 844 </span> : : </a>
-<a name="845"><span class="lineNum"> 845 </span> :<span class="lineCov"> 3212 : dt_for_each_node(features, dep) {</span></a>
-<a name="846"><span class="lineNum"> 846 </span> :<span class="lineCov"> 3212 : if (!strncmp(deps_names, dep-&gt;name, len))</span></a>
-<a name="847"><span class="lineNum"> 847 </span> :<span class="lineCov"> 125 : goto found_dep;</span></a>
-<a name="848"><span class="lineNum"> 848 </span> : : }</a>
+<a name="814"><span class="lineNum"> 814 </span> :<span class="lineCov"> 432 : if (f-&gt;usable_privilege &amp; USABLE_HV) {</span></a>
+<a name="815"><span class="lineNum"> 815 </span> :<span class="lineCov"> 427 : if (f-&gt;hv_support != HV_NONE) {</span></a>
+<a name="816"><span class="lineNum"> 816 </span> :<span class="lineCov"> 287 : uint32_t s = 0;</span></a>
+<a name="817"><span class="lineNum"> 817 </span> :<span class="lineCov"> 287 : if (f-&gt;hv_support == HV_HFSCR)</span></a>
+<a name="818"><span class="lineNum"> 818 </span> :<span class="lineNoCov"> 0 : s |= HV_SUPPORT_HFSCR;</span></a>
+<a name="819"><span class="lineNum"> 819 </span> : : </a>
+<a name="820"><span class="lineNum"> 820 </span> :<span class="lineCov"> 287 : dt_add_property_cells(feature, &quot;hv-support&quot;, s);</span></a>
+<a name="821"><span class="lineNum"> 821 </span> :<span class="lineCov"> 287 : if (f-&gt;hfscr_bit_nr != -1)</span></a>
+<a name="822"><span class="lineNum"> 822 </span> :<span class="lineCov"> 70 : dt_add_property_cells(feature, &quot;hfscr-bit-nr&quot;, f-&gt;hfscr_bit_nr);</span></a>
+<a name="823"><span class="lineNum"> 823 </span> : : } else {</a>
+<a name="824"><span class="lineNum"> 824 </span> :<span class="lineCov"> 140 : assert(f-&gt;hfscr_bit_nr == -1);</span></a>
+<a name="825"><span class="lineNum"> 825 </span> : : }</a>
+<a name="826"><span class="lineNum"> 826 </span> : : }</a>
+<a name="827"><span class="lineNum"> 827 </span> : : </a>
+<a name="828"><span class="lineNum"> 828 </span> :<span class="lineCov"> 432 : if (f-&gt;usable_privilege &amp; USABLE_OS) {</span></a>
+<a name="829"><span class="lineNum"> 829 </span> :<span class="lineCov"> 408 : if (f-&gt;os_support != OS_NONE) {</span></a>
+<a name="830"><span class="lineNum"> 830 </span> :<span class="lineCov"> 263 : uint32_t s = 0;</span></a>
+<a name="831"><span class="lineNum"> 831 </span> :<span class="lineCov"> 263 : if (f-&gt;os_support == OS_FSCR)</span></a>
+<a name="832"><span class="lineNum"> 832 </span> :<span class="lineNoCov"> 0 : s |= OS_SUPPORT_FSCR;</span></a>
+<a name="833"><span class="lineNum"> 833 </span> :<span class="lineCov"> 263 : dt_add_property_cells(feature, &quot;os-support&quot;, s);</span></a>
+<a name="834"><span class="lineNum"> 834 </span> :<span class="lineCov"> 263 : if (f-&gt;fscr_bit_nr != -1)</span></a>
+<a name="835"><span class="lineNum"> 835 </span> :<span class="lineCov"> 35 : dt_add_property_cells(feature, &quot;fscr-bit-nr&quot;, f-&gt;fscr_bit_nr);</span></a>
+<a name="836"><span class="lineNum"> 836 </span> : : } else {</a>
+<a name="837"><span class="lineNum"> 837 </span> :<span class="lineCov"> 145 : assert(f-&gt;fscr_bit_nr == -1);</span></a>
+<a name="838"><span class="lineNum"> 838 </span> : : }</a>
+<a name="839"><span class="lineNum"> 839 </span> : : }</a>
+<a name="840"><span class="lineNum"> 840 </span> : : </a>
+<a name="841"><span class="lineNum"> 841 </span> :<span class="lineCov"> 432 : if (f-&gt;usable_privilege &amp; USABLE_PR) {</span></a>
+<a name="842"><span class="lineNum"> 842 </span> :<span class="lineCov"> 255 : if (f-&gt;hwcap_bit_nr != -1)</span></a>
+<a name="843"><span class="lineNum"> 843 </span> :<span class="lineCov"> 110 : dt_add_property_cells(feature, &quot;hwcap-bit-nr&quot;, f-&gt;hwcap_bit_nr);</span></a>
+<a name="844"><span class="lineNum"> 844 </span> : : }</a>
+<a name="845"><span class="lineNum"> 845 </span> : : </a>
+<a name="846"><span class="lineNum"> 846 </span> :<span class="lineCov"> 432 : if (f-&gt;dependencies_names)</span></a>
+<a name="847"><span class="lineNum"> 847 </span> :<span class="lineCov"> 110 : dt_add_property(feature, &quot;dependencies&quot;, NULL, 0);</span></a>
+<a name="848"><span class="lineNum"> 848 </span> :<span class="lineCov"> 432 : }</span></a>
<a name="849"><span class="lineNum"> 849 </span> : : </a>
-<a name="850"><span class="lineNum"> 850 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;CPUFT: feature %s dependencies not found\n&quot;, f-&gt;name);</span></a>
-<a name="851"><span class="lineNum"> 851 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="852"><span class="lineNum"> 852 </span> :<span class="lineCov"> 125 : found_dep:</span></a>
-<a name="853"><span class="lineNum"> 853 </span> :<span class="lineCov"> 125 : DBG(&quot; %s found dep (%s)\n&quot;, f-&gt;name, dep-&gt;name);</span></a>
-<a name="854"><span class="lineNum"> 854 </span> :<span class="lineCov"> 125 : dt_property_set_cell(deps, i, dep-&gt;phandle);</span></a>
-<a name="855"><span class="lineNum"> 855 </span> : : </a>
-<a name="856"><span class="lineNum"> 856 </span> : : /* Advance over the name + delimiter */</a>
-<a name="857"><span class="lineNum"> 857 </span> :<span class="lineCov"> 125 : deps_names += len + 1;</span></a>
-<a name="858"><span class="lineNum"> 858 </span> : : }</a>
-<a name="859"><span class="lineNum"> 859 </span> : : }</a>
-<a name="860"><span class="lineNum"> 860 </span> :<span class="lineCov"> 10 : }</span></a>
-<a name="861"><span class="lineNum"> 861 </span> : : </a>
-<a name="862"><span class="lineNum"> 862 </span> :<span class="lineCov"> 10 : static void add_cpufeatures(struct dt_node *cpus,</span></a>
-<a name="863"><span class="lineNum"> 863 </span> : : uint32_t cpu_feature_isa, uint32_t cpu_feature_cpu,</a>
-<a name="864"><span class="lineNum"> 864 </span> : : const char *cpu_name)</a>
-<a name="865"><span class="lineNum"> 865 </span> : : {</a>
-<a name="866"><span class="lineNum"> 866 </span> : : struct dt_node *features;</a>
-<a name="867"><span class="lineNum"> 867 </span> : : int i;</a>
-<a name="868"><span class="lineNum"> 868 </span> : : </a>
-<a name="869"><span class="lineNum"> 869 </span> :<span class="lineCov"> 10 : DBG(&quot;creating cpufeatures for cpu:%d isa:%d\n&quot;, cpu_feature_cpu, cpu_feature_isa);</span></a>
-<a name="870"><span class="lineNum"> 870 </span> : : </a>
-<a name="871"><span class="lineNum"> 871 </span> :<span class="lineCov"> 10 : features = dt_new(cpus, &quot;ibm,powerpc-cpu-features&quot;);</span></a>
-<a name="872"><span class="lineNum"> 872 </span> :<span class="lineCov"> 10 : assert(features);</span></a>
-<a name="873"><span class="lineNum"> 873 </span> : : </a>
-<a name="874"><span class="lineNum"> 874 </span> :<span class="lineCov"> 10 : dt_add_property_cells(features, &quot;isa&quot;, cpu_feature_isa);</span></a>
+<a name="850"><span class="lineNum"> 850 </span> :<span class="lineCov"> 10 : static void add_cpufeatures_dependencies(struct dt_node *features)</span></a>
+<a name="851"><span class="lineNum"> 851 </span> : : {</a>
+<a name="852"><span class="lineNum"> 852 </span> : : struct dt_node *feature;</a>
+<a name="853"><span class="lineNum"> 853 </span> : : </a>
+<a name="854"><span class="lineNum"> 854 </span> :<span class="lineCov"> 442 : dt_for_each_node(features, feature) {</span></a>
+<a name="855"><span class="lineNum"> 855 </span> :<span class="lineCov"> 432 : const struct cpu_feature *f = NULL;</span></a>
+<a name="856"><span class="lineNum"> 856 </span> : : const char *deps_names;</a>
+<a name="857"><span class="lineNum"> 857 </span> : : struct dt_property *deps;</a>
+<a name="858"><span class="lineNum"> 858 </span> : : int nr_deps;</a>
+<a name="859"><span class="lineNum"> 859 </span> : : int i;</a>
+<a name="860"><span class="lineNum"> 860 </span> : : </a>
+<a name="861"><span class="lineNum"> 861 </span> : : /* Find features with dependencies */</a>
+<a name="862"><span class="lineNum"> 862 </span> : : </a>
+<a name="863"><span class="lineNum"> 863 </span> :<span class="lineCov"> 432 : deps = __dt_find_property(feature, &quot;dependencies&quot;);</span></a>
+<a name="864"><span class="lineNum"> 864 </span> :<span class="lineCov"> 432 : if (!deps)</span></a>
+<a name="865"><span class="lineNum"> 865 </span> :<span class="lineCov"> 322 : continue;</span></a>
+<a name="866"><span class="lineNum"> 866 </span> : : </a>
+<a name="867"><span class="lineNum"> 867 </span> : : /* Find the matching cpu table */</a>
+<a name="868"><span class="lineNum"> 868 </span> :<span class="lineCov"> 3780 : for (i = 0; i &lt; ARRAY_SIZE(cpu_features_table); i++) {</span></a>
+<a name="869"><span class="lineNum"> 869 </span> :<span class="lineCov"> 3780 : f = &amp;cpu_features_table[i];</span></a>
+<a name="870"><span class="lineNum"> 870 </span> :<span class="lineCov"> 3780 : if (!strcmp(f-&gt;name, feature-&gt;name))</span></a>
+<a name="871"><span class="lineNum"> 871 </span> :<span class="lineCov"> 110 : break;</span></a>
+<a name="872"><span class="lineNum"> 872 </span> : : }</a>
+<a name="873"><span class="lineNum"> 873 </span> :<span class="lineCov"> 110 : assert(f);</span></a>
+<a name="874"><span class="lineNum"> 874 </span> :<span class="lineCov"> 110 : assert(f-&gt;dependencies_names);</span></a>
<a name="875"><span class="lineNum"> 875 </span> : : </a>
-<a name="876"><span class="lineNum"> 876 </span> :<span class="lineCov"> 10 : dt_add_property_string(features, &quot;device_type&quot;, &quot;cpu-features&quot;);</span></a>
-<a name="877"><span class="lineNum"> 877 </span> :<span class="lineCov"> 10 : dt_add_property_string(features, &quot;compatible&quot;, &quot;ibm,powerpc-cpu-features&quot;);</span></a>
-<a name="878"><span class="lineNum"> 878 </span> :<span class="lineCov"> 10 : dt_add_property_string(features, &quot;display-name&quot;, cpu_name);</span></a>
-<a name="879"><span class="lineNum"> 879 </span> : : </a>
-<a name="880"><span class="lineNum"> 880 </span> : : /* add without dependencies */</a>
-<a name="881"><span class="lineNum"> 881 </span> :<span class="lineCov"> 650 : for (i = 0; i &lt; ARRAY_SIZE(cpu_features_table); i++) {</span></a>
-<a name="882"><span class="lineNum"> 882 </span> :<span class="lineCov"> 640 : const struct cpu_feature *f = &amp;cpu_features_table[i];</span></a>
+<a name="876"><span class="lineNum"> 876 </span> : : /*</a>
+<a name="877"><span class="lineNum"> 877 </span> : : * Count number of depended features and allocate space</a>
+<a name="878"><span class="lineNum"> 878 </span> : : * for phandles in the property.</a>
+<a name="879"><span class="lineNum"> 879 </span> : : */</a>
+<a name="880"><span class="lineNum"> 880 </span> :<span class="lineCov"> 110 : deps_names = f-&gt;dependencies_names;</span></a>
+<a name="881"><span class="lineNum"> 881 </span> :<span class="lineCov"> 110 : nr_deps = strcount(deps_names, &quot; &quot;) + 1;</span></a>
+<a name="882"><span class="lineNum"> 882 </span> :<span class="lineCov"> 110 : dt_resize_property(&amp;deps, nr_deps * sizeof(u32));</span></a>
<a name="883"><span class="lineNum"> 883 </span> : : </a>
-<a name="884"><span class="lineNum"> 884 </span> :<span class="lineCov"> 640 : if (f-&gt;cpus_supported &amp; cpu_feature_cpu) {</span></a>
-<a name="885"><span class="lineNum"> 885 </span> :<span class="lineCov"> 432 : DBG(&quot; '%s'\n&quot;, f-&gt;name);</span></a>
-<a name="886"><span class="lineNum"> 886 </span> :<span class="lineCov"> 432 : add_cpu_feature_nodeps(features, f);</span></a>
-<a name="887"><span class="lineNum"> 887 </span> : : }</a>
-<a name="888"><span class="lineNum"> 888 </span> : : }</a>
-<a name="889"><span class="lineNum"> 889 </span> : : </a>
-<a name="890"><span class="lineNum"> 890 </span> : : /* dependency construction pass */</a>
-<a name="891"><span class="lineNum"> 891 </span> :<span class="lineCov"> 10 : add_cpufeatures_dependencies(features);</span></a>
-<a name="892"><span class="lineNum"> 892 </span> :<span class="lineCov"> 10 : }</span></a>
-<a name="893"><span class="lineNum"> 893 </span> : : </a>
-<a name="894"><span class="lineNum"> 894 </span> :<span class="lineCov"> 11 : void dt_add_cpufeatures(struct dt_node *root)</span></a>
-<a name="895"><span class="lineNum"> 895 </span> : : {</a>
-<a name="896"><span class="lineNum"> 896 </span> : : int version;</a>
-<a name="897"><span class="lineNum"> 897 </span> :<span class="lineCov"> 11 : uint32_t cpu_feature_isa = 0;</span></a>
-<a name="898"><span class="lineNum"> 898 </span> :<span class="lineCov"> 11 : uint32_t cpu_feature_cpu = 0;</span></a>
-<a name="899"><span class="lineNum"> 899 </span> : : struct dt_node *cpus;</a>
-<a name="900"><span class="lineNum"> 900 </span> :<span class="lineCov"> 11 : const char *cpu_name = NULL;</span></a>
-<a name="901"><span class="lineNum"> 901 </span> : : </a>
-<a name="902"><span class="lineNum"> 902 </span> :<span class="lineCov"> 11 : version = mfspr(SPR_PVR);</span></a>
-<a name="903"><span class="lineNum"> 903 </span> :<span class="lineCov"> 11 : switch(PVR_TYPE(version)) {</span></a>
-<a name="904"><span class="lineNum"> 904 </span> :<span class="lineCov"> 2 : case PVR_TYPE_P8:</span></a>
-<a name="905"><span class="lineNum"> 905 </span> :<span class="lineCov"> 2 : if (!cpu_name)</span></a>
-<a name="906"><span class="lineNum"> 906 </span> :<span class="lineCov"> 2 : cpu_name = &quot;POWER8&quot;;</span></a>
-<a name="907"><span class="lineNum"> 907 </span> : : /* fallthrough */</a>
-<a name="908"><span class="lineNum"> 908 </span> : : case PVR_TYPE_P8E:</a>
-<a name="909"><span class="lineNum"> 909 </span> :<span class="lineCov"> 4 : if (!cpu_name)</span></a>
-<a name="910"><span class="lineNum"> 910 </span> :<span class="lineCov"> 2 : cpu_name = &quot;POWER8E&quot;;</span></a>
-<a name="911"><span class="lineNum"> 911 </span> : : /* fallthrough */</a>
-<a name="912"><span class="lineNum"> 912 </span> :<span class="lineCov"> 4 : cpu_feature_isa = ISA_V2_07B;</span></a>
-<a name="913"><span class="lineNum"> 913 </span> :<span class="lineCov"> 4 : if (PVR_VERS_MAJ(version) == 1)</span></a>
-<a name="914"><span class="lineNum"> 914 </span> :<span class="lineCov"> 2 : cpu_feature_cpu = CPU_P8_DD1;</span></a>
-<a name="915"><span class="lineNum"> 915 </span> : : else</a>
-<a name="916"><span class="lineNum"> 916 </span> :<span class="lineCov"> 2 : cpu_feature_cpu = CPU_P8_DD2;</span></a>
-<a name="917"><span class="lineNum"> 917 </span> :<span class="lineCov"> 4 : break;</span></a>
-<a name="918"><span class="lineNum"> 918 </span> :<span class="lineCov"> 1 : case PVR_TYPE_P8NVL:</span></a>
-<a name="919"><span class="lineNum"> 919 </span> :<span class="lineCov"> 1 : cpu_name = &quot;POWER8NVL&quot;;</span></a>
-<a name="920"><span class="lineNum"> 920 </span> :<span class="lineCov"> 1 : cpu_feature_isa = ISA_V2_07B;</span></a>
-<a name="921"><span class="lineNum"> 921 </span> :<span class="lineCov"> 1 : cpu_feature_cpu = CPU_P8_DD2;</span></a>
-<a name="922"><span class="lineNum"> 922 </span> :<span class="lineCov"> 1 : break;</span></a>
-<a name="923"><span class="lineNum"> 923 </span> :<span class="lineCov"> 4 : case PVR_TYPE_P9:</span></a>
-<a name="924"><span class="lineNum"> 924 </span> :<span class="lineCov"> 4 : if (!cpu_name)</span></a>
-<a name="925"><span class="lineNum"> 925 </span> :<span class="lineCov"> 4 : cpu_name = &quot;POWER9&quot;;</span></a>
+<a name="884"><span class="lineNum"> 884 </span> :<span class="lineCov"> 110 : DBG(&quot;feature %s has %d dependencies (%s)\n&quot;, f-&gt;name, nr_deps, deps_names);</span></a>
+<a name="885"><span class="lineNum"> 885 </span> : : /*</a>
+<a name="886"><span class="lineNum"> 886 </span> : : * For each one, find the depended feature then advance to</a>
+<a name="887"><span class="lineNum"> 887 </span> : : * next name.</a>
+<a name="888"><span class="lineNum"> 888 </span> : : */</a>
+<a name="889"><span class="lineNum"> 889 </span> :<span class="lineCov"> 235 : for (i = 0; i &lt; nr_deps; i++) {</span></a>
+<a name="890"><span class="lineNum"> 890 </span> : : struct dt_node *dep;</a>
+<a name="891"><span class="lineNum"> 891 </span> : : int len;</a>
+<a name="892"><span class="lineNum"> 892 </span> : : </a>
+<a name="893"><span class="lineNum"> 893 </span> :<span class="lineCov"> 125 : if (nr_deps - i == 1)</span></a>
+<a name="894"><span class="lineNum"> 894 </span> :<span class="lineCov"> 110 : len = strlen(deps_names);</span></a>
+<a name="895"><span class="lineNum"> 895 </span> : : else</a>
+<a name="896"><span class="lineNum"> 896 </span> :<span class="lineCov"> 15 : len = strchr(deps_names, ' ') - deps_names;</span></a>
+<a name="897"><span class="lineNum"> 897 </span> : : </a>
+<a name="898"><span class="lineNum"> 898 </span> :<span class="lineCov"> 3212 : dt_for_each_node(features, dep) {</span></a>
+<a name="899"><span class="lineNum"> 899 </span> :<span class="lineCov"> 3212 : if (!strncmp(deps_names, dep-&gt;name, len))</span></a>
+<a name="900"><span class="lineNum"> 900 </span> :<span class="lineCov"> 125 : goto found_dep;</span></a>
+<a name="901"><span class="lineNum"> 901 </span> : : }</a>
+<a name="902"><span class="lineNum"> 902 </span> : : </a>
+<a name="903"><span class="lineNum"> 903 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;CPUFT: feature %s dependencies not found\n&quot;, f-&gt;name);</span></a>
+<a name="904"><span class="lineNum"> 904 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="905"><span class="lineNum"> 905 </span> :<span class="lineCov"> 125 : found_dep:</span></a>
+<a name="906"><span class="lineNum"> 906 </span> :<span class="lineCov"> 125 : DBG(&quot; %s found dep (%s)\n&quot;, f-&gt;name, dep-&gt;name);</span></a>
+<a name="907"><span class="lineNum"> 907 </span> :<span class="lineCov"> 125 : dt_property_set_cell(deps, i, dep-&gt;phandle);</span></a>
+<a name="908"><span class="lineNum"> 908 </span> : : </a>
+<a name="909"><span class="lineNum"> 909 </span> : : /* Advance over the name + delimiter */</a>
+<a name="910"><span class="lineNum"> 910 </span> :<span class="lineCov"> 125 : deps_names += len + 1;</span></a>
+<a name="911"><span class="lineNum"> 911 </span> : : }</a>
+<a name="912"><span class="lineNum"> 912 </span> : : }</a>
+<a name="913"><span class="lineNum"> 913 </span> :<span class="lineCov"> 10 : }</span></a>
+<a name="914"><span class="lineNum"> 914 </span> : : </a>
+<a name="915"><span class="lineNum"> 915 </span> :<span class="lineCov"> 10 : static void add_cpufeatures(struct dt_node *cpus,</span></a>
+<a name="916"><span class="lineNum"> 916 </span> : : uint32_t cpu_feature_isa, uint32_t cpu_feature_cpu,</a>
+<a name="917"><span class="lineNum"> 917 </span> : : const char *cpu_name)</a>
+<a name="918"><span class="lineNum"> 918 </span> : : {</a>
+<a name="919"><span class="lineNum"> 919 </span> : : struct dt_node *features;</a>
+<a name="920"><span class="lineNum"> 920 </span> : : int i;</a>
+<a name="921"><span class="lineNum"> 921 </span> : : </a>
+<a name="922"><span class="lineNum"> 922 </span> :<span class="lineCov"> 10 : DBG(&quot;creating cpufeatures for cpu:%d isa:%d\n&quot;, cpu_feature_cpu, cpu_feature_isa);</span></a>
+<a name="923"><span class="lineNum"> 923 </span> : : </a>
+<a name="924"><span class="lineNum"> 924 </span> :<span class="lineCov"> 10 : features = dt_new(cpus, &quot;ibm,powerpc-cpu-features&quot;);</span></a>
+<a name="925"><span class="lineNum"> 925 </span> :<span class="lineCov"> 10 : assert(features);</span></a>
<a name="926"><span class="lineNum"> 926 </span> : : </a>
-<a name="927"><span class="lineNum"> 927 </span> :<span class="lineCov"> 4 : cpu_feature_isa = ISA_V3_0B;</span></a>
-<a name="928"><span class="lineNum"> 928 </span> :<span class="lineCov"> 4 : if (is_power9n(version) &amp;&amp;</span></a>
-<a name="929"><span class="lineNum"> 929 </span> :<span class="lineCov"> 4 : (PVR_VERS_MAJ(version) == 2)) {</span></a>
-<a name="930"><span class="lineNum"> 930 </span> : : /* P9N DD2.x */</a>
-<a name="931"><span class="lineNum"> 931 </span> :<span class="lineCov"> 8 : switch (PVR_VERS_MIN(version)) {</span></a>
-<a name="932"><span class="lineNum"> 932 </span> :<span class="lineCov"> 2 : case 0:</span></a>
-<a name="933"><span class="lineNum"> 933 </span> : : case 1:</a>
-<a name="934"><span class="lineNum"> 934 </span> :<span class="lineCov"> 2 : cpu_feature_cpu = CPU_P9_DD2_0_1;</span></a>
-<a name="935"><span class="lineNum"> 935 </span> :<span class="lineCov"> 2 : break;</span></a>
-<a name="936"><span class="lineNum"> 936 </span> :<span class="lineCov"> 1 : case 2:</span></a>
-<a name="937"><span class="lineNum"> 937 </span> :<span class="lineCov"> 1 : cpu_feature_cpu = CPU_P9_DD2_2;</span></a>
-<a name="938"><span class="lineNum"> 938 </span> :<span class="lineCov"> 1 : break;</span></a>
-<a name="939"><span class="lineNum"> 939 </span> :<span class="lineCov"> 1 : case 3:</span></a>
-<a name="940"><span class="lineNum"> 940 </span> :<span class="lineCov"> 1 : cpu_feature_cpu = CPU_P9_DD2_3;</span></a>
-<a name="941"><span class="lineNum"> 941 </span> :<span class="lineCov"> 1 : break;</span></a>
-<a name="942"><span class="lineNum"> 942 </span> :<span class="lineNoCov"> 0 : default:</span></a>
-<a name="943"><span class="lineNum"> 943 </span> :<span class="lineNoCov"> 0 : assert(0);</span></a>
-<a name="944"><span class="lineNum"> 944 </span> : : }</a>
-<a name="945"><span class="lineNum"> 945 </span> :<span class="lineNoCov"> 0 : } else if (is_power9c(version) &amp;&amp;</span></a>
-<a name="946"><span class="lineNum"> 946 </span> :<span class="lineNoCov"> 0 : (PVR_VERS_MAJ(version) == 1)) {</span></a>
-<a name="947"><span class="lineNum"> 947 </span> : : /* P9C DD1.x */</a>
-<a name="948"><span class="lineNum"> 948 </span> :<span class="lineNoCov"> 0 : switch (PVR_VERS_MIN(version)) {</span></a>
-<a name="949"><span class="lineNum"> 949 </span> :<span class="lineNoCov"> 0 : case 1:</span></a>
-<a name="950"><span class="lineNum"> 950 </span> : : /* Cumulus DD1.1 =&gt; Nimbus DD2.1 */</a>
-<a name="951"><span class="lineNum"> 951 </span> :<span class="lineNoCov"> 0 : cpu_feature_cpu = CPU_P9_DD2_0_1;</span></a>
-<a name="952"><span class="lineNum"> 952 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="953"><span class="lineNum"> 953 </span> :<span class="lineNoCov"> 0 : case 2:</span></a>
-<a name="954"><span class="lineNum"> 954 </span> : : /* Cumulus DD1.2 */</a>
-<a name="955"><span class="lineNum"> 955 </span> :<span class="lineNoCov"> 0 : cpu_feature_cpu = CPU_P9_DD2_2;</span></a>
-<a name="956"><span class="lineNum"> 956 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="957"><span class="lineNum"> 957 </span> :<span class="lineNoCov"> 0 : case 3:</span></a>
-<a name="958"><span class="lineNum"> 958 </span> : : /* Cumulus DD1.3 */</a>
-<a name="959"><span class="lineNum"> 959 </span> :<span class="lineNoCov"> 0 : cpu_feature_cpu = CPU_P9_DD2_3;</span></a>
-<a name="960"><span class="lineNum"> 960 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="961"><span class="lineNum"> 961 </span> :<span class="lineNoCov"> 0 : default:</span></a>
-<a name="962"><span class="lineNum"> 962 </span> :<span class="lineNoCov"> 0 : assert(0);</span></a>
-<a name="963"><span class="lineNum"> 963 </span> : : }</a>
-<a name="964"><span class="lineNum"> 964 </span> : : } else {</a>
-<a name="965"><span class="lineNum"> 965 </span> :<span class="lineNoCov"> 0 : assert(0);</span></a>
-<a name="966"><span class="lineNum"> 966 </span> : : }</a>
-<a name="967"><span class="lineNum"> 967 </span> : : </a>
-<a name="968"><span class="lineNum"> 968 </span> :<span class="lineCov"> 4 : break;</span></a>
-<a name="969"><span class="lineNum"> 969 </span> :<span class="lineCov"> 1 : case PVR_TYPE_P9P:</span></a>
-<a name="970"><span class="lineNum"> 970 </span> :<span class="lineCov"> 1 : if (!cpu_name)</span></a>
-<a name="971"><span class="lineNum"> 971 </span> :<span class="lineCov"> 1 : cpu_name = &quot;POWER9P&quot;;</span></a>
-<a name="972"><span class="lineNum"> 972 </span> : : </a>
-<a name="973"><span class="lineNum"> 973 </span> :<span class="lineCov"> 1 : cpu_feature_isa = ISA_V3_0B;</span></a>
-<a name="974"><span class="lineNum"> 974 </span> :<span class="lineCov"> 1 : cpu_feature_cpu = CPU_P9P;</span></a>
+<a name="927"><span class="lineNum"> 927 </span> :<span class="lineCov"> 10 : dt_add_property_cells(features, &quot;isa&quot;, cpu_feature_isa);</span></a>
+<a name="928"><span class="lineNum"> 928 </span> : : </a>
+<a name="929"><span class="lineNum"> 929 </span> :<span class="lineCov"> 10 : dt_add_property_string(features, &quot;device_type&quot;, &quot;cpu-features&quot;);</span></a>
+<a name="930"><span class="lineNum"> 930 </span> :<span class="lineCov"> 10 : dt_add_property_string(features, &quot;compatible&quot;, &quot;ibm,powerpc-cpu-features&quot;);</span></a>
+<a name="931"><span class="lineNum"> 931 </span> :<span class="lineCov"> 10 : dt_add_property_string(features, &quot;display-name&quot;, cpu_name);</span></a>
+<a name="932"><span class="lineNum"> 932 </span> : : </a>
+<a name="933"><span class="lineNum"> 933 </span> : : /* add without dependencies */</a>
+<a name="934"><span class="lineNum"> 934 </span> :<span class="lineCov"> 700 : for (i = 0; i &lt; ARRAY_SIZE(cpu_features_table); i++) {</span></a>
+<a name="935"><span class="lineNum"> 935 </span> :<span class="lineCov"> 690 : const struct cpu_feature *f = &amp;cpu_features_table[i];</span></a>
+<a name="936"><span class="lineNum"> 936 </span> : : </a>
+<a name="937"><span class="lineNum"> 937 </span> :<span class="lineCov"> 690 : if (f-&gt;cpus_supported &amp; cpu_feature_cpu) {</span></a>
+<a name="938"><span class="lineNum"> 938 </span> :<span class="lineCov"> 432 : DBG(&quot; '%s'\n&quot;, f-&gt;name);</span></a>
+<a name="939"><span class="lineNum"> 939 </span> :<span class="lineCov"> 432 : add_cpu_feature_nodeps(features, f);</span></a>
+<a name="940"><span class="lineNum"> 940 </span> : : }</a>
+<a name="941"><span class="lineNum"> 941 </span> : : }</a>
+<a name="942"><span class="lineNum"> 942 </span> : : </a>
+<a name="943"><span class="lineNum"> 943 </span> : : /* dependency construction pass */</a>
+<a name="944"><span class="lineNum"> 944 </span> :<span class="lineCov"> 10 : add_cpufeatures_dependencies(features);</span></a>
+<a name="945"><span class="lineNum"> 945 </span> :<span class="lineCov"> 10 : }</span></a>
+<a name="946"><span class="lineNum"> 946 </span> : : </a>
+<a name="947"><span class="lineNum"> 947 </span> :<span class="lineCov"> 11 : void dt_add_cpufeatures(struct dt_node *root)</span></a>
+<a name="948"><span class="lineNum"> 948 </span> : : {</a>
+<a name="949"><span class="lineNum"> 949 </span> : : int version;</a>
+<a name="950"><span class="lineNum"> 950 </span> :<span class="lineCov"> 11 : uint32_t cpu_feature_isa = 0;</span></a>
+<a name="951"><span class="lineNum"> 951 </span> :<span class="lineCov"> 11 : uint32_t cpu_feature_cpu = 0;</span></a>
+<a name="952"><span class="lineNum"> 952 </span> : : struct dt_node *cpus;</a>
+<a name="953"><span class="lineNum"> 953 </span> :<span class="lineCov"> 11 : const char *cpu_name = NULL;</span></a>
+<a name="954"><span class="lineNum"> 954 </span> : : </a>
+<a name="955"><span class="lineNum"> 955 </span> :<span class="lineCov"> 11 : version = mfspr(SPR_PVR);</span></a>
+<a name="956"><span class="lineNum"> 956 </span> :<span class="lineCov"> 11 : switch(PVR_TYPE(version)) {</span></a>
+<a name="957"><span class="lineNum"> 957 </span> :<span class="lineCov"> 2 : case PVR_TYPE_P8:</span></a>
+<a name="958"><span class="lineNum"> 958 </span> :<span class="lineCov"> 2 : if (!cpu_name)</span></a>
+<a name="959"><span class="lineNum"> 959 </span> :<span class="lineCov"> 2 : cpu_name = &quot;POWER8&quot;;</span></a>
+<a name="960"><span class="lineNum"> 960 </span> : : /* fallthrough */</a>
+<a name="961"><span class="lineNum"> 961 </span> : : case PVR_TYPE_P8E:</a>
+<a name="962"><span class="lineNum"> 962 </span> :<span class="lineCov"> 4 : if (!cpu_name)</span></a>
+<a name="963"><span class="lineNum"> 963 </span> :<span class="lineCov"> 2 : cpu_name = &quot;POWER8E&quot;;</span></a>
+<a name="964"><span class="lineNum"> 964 </span> : : /* fallthrough */</a>
+<a name="965"><span class="lineNum"> 965 </span> :<span class="lineCov"> 4 : cpu_feature_isa = ISA_V2_07B;</span></a>
+<a name="966"><span class="lineNum"> 966 </span> :<span class="lineCov"> 4 : if (PVR_VERS_MAJ(version) == 1)</span></a>
+<a name="967"><span class="lineNum"> 967 </span> :<span class="lineCov"> 2 : cpu_feature_cpu = CPU_P8_DD1;</span></a>
+<a name="968"><span class="lineNum"> 968 </span> : : else</a>
+<a name="969"><span class="lineNum"> 969 </span> :<span class="lineCov"> 2 : cpu_feature_cpu = CPU_P8_DD2;</span></a>
+<a name="970"><span class="lineNum"> 970 </span> :<span class="lineCov"> 4 : break;</span></a>
+<a name="971"><span class="lineNum"> 971 </span> :<span class="lineCov"> 1 : case PVR_TYPE_P8NVL:</span></a>
+<a name="972"><span class="lineNum"> 972 </span> :<span class="lineCov"> 1 : cpu_name = &quot;POWER8NVL&quot;;</span></a>
+<a name="973"><span class="lineNum"> 973 </span> :<span class="lineCov"> 1 : cpu_feature_isa = ISA_V2_07B;</span></a>
+<a name="974"><span class="lineNum"> 974 </span> :<span class="lineCov"> 1 : cpu_feature_cpu = CPU_P8_DD2;</span></a>
<a name="975"><span class="lineNum"> 975 </span> :<span class="lineCov"> 1 : break;</span></a>
-<a name="976"><span class="lineNum"> 976 </span> :<span class="lineCov"> 1 : default:</span></a>
-<a name="977"><span class="lineNum"> 977 </span> :<span class="lineCov"> 1 : return;</span></a>
-<a name="978"><span class="lineNum"> 978 </span> : : }</a>
+<a name="976"><span class="lineNum"> 976 </span> :<span class="lineCov"> 4 : case PVR_TYPE_P9:</span></a>
+<a name="977"><span class="lineNum"> 977 </span> :<span class="lineCov"> 4 : if (!cpu_name)</span></a>
+<a name="978"><span class="lineNum"> 978 </span> :<span class="lineCov"> 4 : cpu_name = &quot;POWER9&quot;;</span></a>
<a name="979"><span class="lineNum"> 979 </span> : : </a>
-<a name="980"><span class="lineNum"> 980 </span> :<span class="lineCov"> 10 : cpus = dt_new_check(root, &quot;cpus&quot;);</span></a>
-<a name="981"><span class="lineNum"> 981 </span> : : </a>
-<a name="982"><span class="lineNum"> 982 </span> :<span class="lineCov"> 10 : add_cpufeatures(cpus, cpu_feature_isa, cpu_feature_cpu, cpu_name);</span></a>
-<a name="983"><span class="lineNum"> 983 </span> : : }</a>
+<a name="980"><span class="lineNum"> 980 </span> :<span class="lineCov"> 4 : cpu_feature_isa = ISA_V3_0B;</span></a>
+<a name="981"><span class="lineNum"> 981 </span> :<span class="lineCov"> 4 : if (is_power9n(version) &amp;&amp;</span></a>
+<a name="982"><span class="lineNum"> 982 </span> :<span class="lineCov"> 4 : (PVR_VERS_MAJ(version) == 2)) {</span></a>
+<a name="983"><span class="lineNum"> 983 </span> : : /* P9N DD2.x */</a>
+<a name="984"><span class="lineNum"> 984 </span> :<span class="lineCov"> 8 : switch (PVR_VERS_MIN(version)) {</span></a>
+<a name="985"><span class="lineNum"> 985 </span> :<span class="lineCov"> 2 : case 0:</span></a>
+<a name="986"><span class="lineNum"> 986 </span> : : case 1:</a>
+<a name="987"><span class="lineNum"> 987 </span> :<span class="lineCov"> 2 : cpu_feature_cpu = CPU_P9_DD2_0_1;</span></a>
+<a name="988"><span class="lineNum"> 988 </span> :<span class="lineCov"> 2 : break;</span></a>
+<a name="989"><span class="lineNum"> 989 </span> :<span class="lineCov"> 1 : case 2:</span></a>
+<a name="990"><span class="lineNum"> 990 </span> :<span class="lineCov"> 1 : cpu_feature_cpu = CPU_P9_DD2_2;</span></a>
+<a name="991"><span class="lineNum"> 991 </span> :<span class="lineCov"> 1 : break;</span></a>
+<a name="992"><span class="lineNum"> 992 </span> :<span class="lineCov"> 1 : case 3:</span></a>
+<a name="993"><span class="lineNum"> 993 </span> :<span class="lineCov"> 1 : cpu_feature_cpu = CPU_P9_DD2_3;</span></a>
+<a name="994"><span class="lineNum"> 994 </span> :<span class="lineCov"> 1 : break;</span></a>
+<a name="995"><span class="lineNum"> 995 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="996"><span class="lineNum"> 996 </span> :<span class="lineNoCov"> 0 : assert(0);</span></a>
+<a name="997"><span class="lineNum"> 997 </span> : : }</a>
+<a name="998"><span class="lineNum"> 998 </span> :<span class="lineNoCov"> 0 : } else if (is_power9c(version) &amp;&amp;</span></a>
+<a name="999"><span class="lineNum"> 999 </span> :<span class="lineNoCov"> 0 : (PVR_VERS_MAJ(version) == 1)) {</span></a>
+<a name="1000"><span class="lineNum"> 1000 </span> : : /* P9C DD1.x */</a>
+<a name="1001"><span class="lineNum"> 1001 </span> :<span class="lineNoCov"> 0 : switch (PVR_VERS_MIN(version)) {</span></a>
+<a name="1002"><span class="lineNum"> 1002 </span> :<span class="lineNoCov"> 0 : case 1:</span></a>
+<a name="1003"><span class="lineNum"> 1003 </span> : : /* Cumulus DD1.1 =&gt; Nimbus DD2.1 */</a>
+<a name="1004"><span class="lineNum"> 1004 </span> :<span class="lineNoCov"> 0 : cpu_feature_cpu = CPU_P9_DD2_0_1;</span></a>
+<a name="1005"><span class="lineNum"> 1005 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="1006"><span class="lineNum"> 1006 </span> :<span class="lineNoCov"> 0 : case 2:</span></a>
+<a name="1007"><span class="lineNum"> 1007 </span> : : /* Cumulus DD1.2 */</a>
+<a name="1008"><span class="lineNum"> 1008 </span> :<span class="lineNoCov"> 0 : cpu_feature_cpu = CPU_P9_DD2_2;</span></a>
+<a name="1009"><span class="lineNum"> 1009 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="1010"><span class="lineNum"> 1010 </span> :<span class="lineNoCov"> 0 : case 3:</span></a>
+<a name="1011"><span class="lineNum"> 1011 </span> : : /* Cumulus DD1.3 */</a>
+<a name="1012"><span class="lineNum"> 1012 </span> :<span class="lineNoCov"> 0 : cpu_feature_cpu = CPU_P9_DD2_3;</span></a>
+<a name="1013"><span class="lineNum"> 1013 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="1014"><span class="lineNum"> 1014 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="1015"><span class="lineNum"> 1015 </span> :<span class="lineNoCov"> 0 : assert(0);</span></a>
+<a name="1016"><span class="lineNum"> 1016 </span> : : }</a>
+<a name="1017"><span class="lineNum"> 1017 </span> : : } else {</a>
+<a name="1018"><span class="lineNum"> 1018 </span> :<span class="lineNoCov"> 0 : assert(0);</span></a>
+<a name="1019"><span class="lineNum"> 1019 </span> : : }</a>
+<a name="1020"><span class="lineNum"> 1020 </span> : : </a>
+<a name="1021"><span class="lineNum"> 1021 </span> :<span class="lineCov"> 4 : break;</span></a>
+<a name="1022"><span class="lineNum"> 1022 </span> :<span class="lineCov"> 1 : case PVR_TYPE_P9P:</span></a>
+<a name="1023"><span class="lineNum"> 1023 </span> :<span class="lineCov"> 1 : if (!cpu_name)</span></a>
+<a name="1024"><span class="lineNum"> 1024 </span> :<span class="lineCov"> 1 : cpu_name = &quot;POWER9P&quot;;</span></a>
+<a name="1025"><span class="lineNum"> 1025 </span> : : </a>
+<a name="1026"><span class="lineNum"> 1026 </span> :<span class="lineCov"> 1 : cpu_feature_isa = ISA_V3_0B;</span></a>
+<a name="1027"><span class="lineNum"> 1027 </span> :<span class="lineCov"> 1 : cpu_feature_cpu = CPU_P9P;</span></a>
+<a name="1028"><span class="lineNum"> 1028 </span> :<span class="lineCov"> 1 : break;</span></a>
+<a name="1029"><span class="lineNum"> 1029 </span> :<span class="lineNoCov"> 0 : case PVR_TYPE_P10:</span></a>
+<a name="1030"><span class="lineNum"> 1030 </span> :<span class="lineNoCov"> 0 : if (!cpu_name)</span></a>
+<a name="1031"><span class="lineNum"> 1031 </span> :<span class="lineNoCov"> 0 : cpu_name = &quot;POWER10&quot;;</span></a>
+<a name="1032"><span class="lineNum"> 1032 </span> : : </a>
+<a name="1033"><span class="lineNum"> 1033 </span> :<span class="lineNoCov"> 0 : cpu_feature_isa = ISA_V3_1;</span></a>
+<a name="1034"><span class="lineNum"> 1034 </span> :<span class="lineNoCov"> 0 : cpu_feature_cpu = CPU_P10;</span></a>
+<a name="1035"><span class="lineNum"> 1035 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="1036"><span class="lineNum"> 1036 </span> :<span class="lineCov"> 1 : default:</span></a>
+<a name="1037"><span class="lineNum"> 1037 </span> :<span class="lineCov"> 1 : return;</span></a>
+<a name="1038"><span class="lineNum"> 1038 </span> : : }</a>
+<a name="1039"><span class="lineNum"> 1039 </span> : : </a>
+<a name="1040"><span class="lineNum"> 1040 </span> :<span class="lineCov"> 10 : cpus = dt_new_check(root, &quot;cpus&quot;);</span></a>
+<a name="1041"><span class="lineNum"> 1041 </span> : : </a>
+<a name="1042"><span class="lineNum"> 1042 </span> :<span class="lineCov"> 10 : add_cpufeatures(cpus, cpu_feature_isa, cpu_feature_cpu, cpu_name);</span></a>
+<a name="1043"><span class="lineNum"> 1043 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/core/device.c.func-sort-c.html b/coverage-report/core/device.c.func-sort-c.html
index 3aab797..2e1cc8e 100644
--- a/coverage-report/core/device.c.func-sort-c.html
+++ b/coverage-report/core/device.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">60</td>
@@ -174,7 +174,7 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#529">__dt_add_property_u64s</a></td>
- <td class="coverFnHi">34</td>
+ <td class="coverFnHi">31</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#379">dt_find_by_name</a></td>
@@ -226,7 +226,7 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#343">dt_find_by_path</a></td>
- <td class="coverFnHi">116</td>
+ <td class="coverFnHi">115</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#602">dt_property_set_cell</a></td>
@@ -258,7 +258,7 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#136">dt_new</a></td>
- <td class="coverFnHi">610</td>
+ <td class="coverFnHi">609</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#644">__dt_find_property</a></td>
@@ -270,7 +270,7 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#92">dt_attach_root</a></td>
- <td class="coverFnHi">850</td>
+ <td class="coverFnHi">849</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#827">dt_free</a></td>
@@ -282,11 +282,11 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#37">new_node</a></td>
- <td class="coverFnHi">891</td>
+ <td class="coverFnHi">890</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#447">dt_add_property</a></td>
- <td class="coverFnHi">1211</td>
+ <td class="coverFnHi">1210</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#154">__dt_find_by_name_addr</a></td>
@@ -294,7 +294,7 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#311">__dt_path_split</a></td>
- <td class="coverFnHi">2119</td>
+ <td class="coverFnHi">2115</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#728">dt_node_is_compatible</a></td>
@@ -306,19 +306,19 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#511">__dt_add_property_cells</a></td>
- <td class="coverFnHi">3217</td>
+ <td class="coverFnHi">3242</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#419">new_property</a></td>
- <td class="coverFnHi">4534</td>
+ <td class="coverFnHi">4555</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#31">free_name</a></td>
- <td class="coverFnHi">5300</td>
+ <td class="coverFnHi">5326</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#22">take_name</a></td>
- <td class="coverFnHi">5425</td>
+ <td class="coverFnHi">5445</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#616">dt_next</a></td>
@@ -326,15 +326,15 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#69">dt_cmp_subnodes</a></td>
- <td class="coverFnHi">7983</td>
+ <td class="coverFnHi">7984</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#654">dt_find_property</a></td>
- <td class="coverFnHi">9042</td>
+ <td class="coverFnHi">9063</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#59">get_unitname</a></td>
- <td class="coverFnHi">18367</td>
+ <td class="coverFnHi">18369</td>
</tr>
</table>
<br>
diff --git a/coverage-report/core/device.c.func.html b/coverage-report/core/device.c.func.html
index df11bd5..ae64418 100644
--- a/coverage-report/core/device.c.func.html
+++ b/coverage-report/core/device.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">60</td>
@@ -70,7 +70,7 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#511">__dt_add_property_cells</a></td>
- <td class="coverFnHi">3217</td>
+ <td class="coverFnHi">3242</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#547">__dt_add_property_strings</a></td>
@@ -78,7 +78,7 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#529">__dt_add_property_u64s</a></td>
- <td class="coverFnHi">34</td>
+ <td class="coverFnHi">31</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#243">__dt_copy</a></td>
@@ -98,11 +98,11 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#311">__dt_path_split</a></td>
- <td class="coverFnHi">2119</td>
+ <td class="coverFnHi">2115</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#447">dt_add_property</a></td>
- <td class="coverFnHi">1211</td>
+ <td class="coverFnHi">1210</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#494">dt_add_property_nstr</a></td>
@@ -118,7 +118,7 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#92">dt_attach_root</a></td>
- <td class="coverFnHi">850</td>
+ <td class="coverFnHi">849</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#665">dt_check_del_prop</a></td>
@@ -126,7 +126,7 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#69">dt_cmp_subnodes</a></td>
- <td class="coverFnHi">7983</td>
+ <td class="coverFnHi">7984</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#276">dt_copy</a></td>
@@ -162,7 +162,7 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#343">dt_find_by_path</a></td>
- <td class="coverFnHi">116</td>
+ <td class="coverFnHi">115</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#409">dt_find_by_phandle</a></td>
@@ -178,7 +178,7 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#654">dt_find_property</a></td>
- <td class="coverFnHi">9042</td>
+ <td class="coverFnHi">9063</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#610">dt_first</a></td>
@@ -218,7 +218,7 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#136">dt_new</a></td>
- <td class="coverFnHi">610</td>
+ <td class="coverFnHi">609</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#220">dt_new_2addr</a></td>
@@ -318,23 +318,23 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#31">free_name</a></td>
- <td class="coverFnHi">5300</td>
+ <td class="coverFnHi">5326</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#59">get_unitname</a></td>
- <td class="coverFnHi">18367</td>
+ <td class="coverFnHi">18369</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#37">new_node</a></td>
- <td class="coverFnHi">891</td>
+ <td class="coverFnHi">890</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#419">new_property</a></td>
- <td class="coverFnHi">4534</td>
+ <td class="coverFnHi">4555</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#22">take_name</a></td>
- <td class="coverFnHi">5425</td>
+ <td class="coverFnHi">5445</td>
</tr>
</table>
<br>
diff --git a/coverage-report/core/device.c.gcov.html b/coverage-report/core/device.c.gcov.html
index fa09252..47b0b47 100644
--- a/coverage-report/core/device.c.gcov.html
+++ b/coverage-report/core/device.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">60</td>
@@ -92,36 +92,36 @@
<a name="21"><span class="lineNum"> 21 </span> : : struct dt_node *dt_root;</a>
<a name="22"><span class="lineNum"> 22 </span> : : struct dt_node *dt_chosen;</a>
<a name="23"><span class="lineNum"> 23 </span> : : </a>
-<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 5425 : static const char *take_name(const char *name)</span></a>
+<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 5445 : static const char *take_name(const char *name)</span></a>
<a name="25"><span class="lineNum"> 25 </span> : : {</a>
-<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 5425 : if (!is_rodata(name) &amp;&amp; !(name = strdup(name))) {</span></a>
+<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 5445 : if (!is_rodata(name) &amp;&amp; !(name = strdup(name))) {</span></a>
<a name="27"><span class="lineNum"> 27 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Failed to allocate copy of name&quot;);</span></a>
<a name="28"><span class="lineNum"> 28 </span> :<span class="lineNoCov"> 0 : abort();</span></a>
<a name="29"><span class="lineNum"> 29 </span> : : }</a>
-<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 5425 : return name;</span></a>
+<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 5445 : return name;</span></a>
<a name="31"><span class="lineNum"> 31 </span> : : }</a>
<a name="32"><span class="lineNum"> 32 </span> : : </a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 5300 : static void free_name(const char *name)</span></a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 5326 : static void free_name(const char *name)</span></a>
<a name="34"><span class="lineNum"> 34 </span> : : {</a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 5242 : if (!is_rodata(name))</span></a>
-<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 5299 : free((char *)name);</span></a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 5300 : }</span></a>
+<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 5268 : if (!is_rodata(name))</span></a>
+<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 5325 : free((char *)name);</span></a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 5326 : }</span></a>
<a name="38"><span class="lineNum"> 38 </span> : : </a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 891 : static struct dt_node *new_node(const char *name)</span></a>
+<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 890 : static struct dt_node *new_node(const char *name)</span></a>
<a name="40"><span class="lineNum"> 40 </span> : : {</a>
-<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 891 : struct dt_node *node = malloc(sizeof *node);</span></a>
-<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 891 : if (!node) {</span></a>
+<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 890 : struct dt_node *node = malloc(sizeof *node);</span></a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 890 : if (!node) {</span></a>
<a name="43"><span class="lineNum"> 43 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Failed to allocate node\n&quot;);</span></a>
<a name="44"><span class="lineNum"> 44 </span> :<span class="lineNoCov"> 0 : abort();</span></a>
<a name="45"><span class="lineNum"> 45 </span> : : }</a>
<a name="46"><span class="lineNum"> 46 </span> : : </a>
-<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 891 : node-&gt;name = take_name(name);</span></a>
-<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 891 : node-&gt;parent = NULL;</span></a>
-<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 891 : list_head_init(&amp;node-&gt;properties);</span></a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 891 : list_head_init(&amp;node-&gt;children);</span></a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 890 : node-&gt;name = take_name(name);</span></a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 890 : node-&gt;parent = NULL;</span></a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 890 : list_head_init(&amp;node-&gt;properties);</span></a>
+<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 890 : list_head_init(&amp;node-&gt;children);</span></a>
<a name="51"><span class="lineNum"> 51 </span> : : /* FIXME: locking? */</a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 891 : node-&gt;phandle = new_phandle();</span></a>
-<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 891 : return node;</span></a>
+<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 890 : node-&gt;phandle = new_phandle();</span></a>
+<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 890 : return node;</span></a>
<a name="54"><span class="lineNum"> 54 </span> : : }</a>
<a name="55"><span class="lineNum"> 55 </span> : : </a>
<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 50 : struct dt_node *dt_new_root(const char *name)</span></a>
@@ -129,25 +129,25 @@
<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 50 : return new_node(name);</span></a>
<a name="59"><span class="lineNum"> 59 </span> : : }</a>
<a name="60"><span class="lineNum"> 60 </span> : : </a>
-<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 18367 : static const char *get_unitname(const struct dt_node *node)</span></a>
+<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 18369 : static const char *get_unitname(const struct dt_node *node)</span></a>
<a name="62"><span class="lineNum"> 62 </span> : : {</a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 18367 : const char *c = strchr(node-&gt;name, '@');</span></a>
+<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 18369 : const char *c = strchr(node-&gt;name, '@');</span></a>
<a name="64"><span class="lineNum"> 64 </span> : : </a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 18367 : if (!c)</span></a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 18369 : if (!c)</span></a>
<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 11399 : return NULL;</span></a>
<a name="67"><span class="lineNum"> 67 </span> : : </a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 6968 : return c + 1;</span></a>
+<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 6970 : return c + 1;</span></a>
<a name="69"><span class="lineNum"> 69 </span> : : }</a>
<a name="70"><span class="lineNum"> 70 </span> : : </a>
-<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 7983 : int dt_cmp_subnodes(const struct dt_node *a, const struct dt_node *b)</span></a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 7984 : int dt_cmp_subnodes(const struct dt_node *a, const struct dt_node *b)</span></a>
<a name="72"><span class="lineNum"> 72 </span> : : {</a>
-<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 7983 : const char *a_unit = get_unitname(a);</span></a>
-<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 7983 : const char *b_unit = get_unitname(b);</span></a>
+<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 7984 : const char *a_unit = get_unitname(a);</span></a>
+<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 7984 : const char *b_unit = get_unitname(b);</span></a>
<a name="75"><span class="lineNum"> 75 </span> : : </a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 7983 : ptrdiff_t basenamelen = a_unit - a-&gt;name;</span></a>
+<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 7984 : ptrdiff_t basenamelen = a_unit - a-&gt;name;</span></a>
<a name="77"><span class="lineNum"> 77 </span> : : </a>
<a name="78"><span class="lineNum"> 78 </span> : : /* sort hex unit addresses by number */</a>
-<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 7983 : if (a_unit &amp;&amp; b_unit &amp;&amp; !strncmp(a-&gt;name, b-&gt;name, basenamelen)) {</span></a>
+<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 7984 : if (a_unit &amp;&amp; b_unit &amp;&amp; !strncmp(a-&gt;name, b-&gt;name, basenamelen)) {</span></a>
<a name="80"><span class="lineNum"> 80 </span> : : unsigned long long a_num, b_num;</a>
<a name="81"><span class="lineNum"> 81 </span> : : char *a_end, *b_end;</a>
<a name="82"><span class="lineNum"> 82 </span> : : </a>
@@ -159,27 +159,27 @@
<a name="88"><span class="lineNum"> 88 </span> :<span class="lineCov"> 1101 : return (a_num &gt; b_num) - (a_num &lt; b_num);</span></a>
<a name="89"><span class="lineNum"> 89 </span> : : }</a>
<a name="90"><span class="lineNum"> 90 </span> : : </a>
-<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 6882 : return strcmp(a-&gt;name, b-&gt;name);</span></a>
+<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 6883 : return strcmp(a-&gt;name, b-&gt;name);</span></a>
<a name="92"><span class="lineNum"> 92 </span> : : }</a>
<a name="93"><span class="lineNum"> 93 </span> : : </a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 850 : bool dt_attach_root(struct dt_node *parent, struct dt_node *root)</span></a>
+<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 849 : bool dt_attach_root(struct dt_node *parent, struct dt_node *root)</span></a>
<a name="95"><span class="lineNum"> 95 </span> : : {</a>
<a name="96"><span class="lineNum"> 96 </span> : : struct dt_node *node;</a>
<a name="97"><span class="lineNum"> 97 </span> : : </a>
-<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 850 : assert(!root-&gt;parent);</span></a>
+<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 849 : assert(!root-&gt;parent);</span></a>
<a name="99"><span class="lineNum"> 99 </span> : : </a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 850 : if (list_empty(&amp;parent-&gt;children)) {</span></a>
-<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 126 : list_add(&amp;parent-&gt;children, &amp;root-&gt;list);</span></a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 126 : root-&gt;parent = parent;</span></a>
+<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 849 : if (list_empty(&amp;parent-&gt;children)) {</span></a>
+<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 125 : list_add(&amp;parent-&gt;children, &amp;root-&gt;list);</span></a>
+<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 125 : root-&gt;parent = parent;</span></a>
<a name="103"><span class="lineNum"> 103 </span> : : </a>
-<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 126 : return true;</span></a>
+<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 125 : return true;</span></a>
<a name="105"><span class="lineNum"> 105 </span> : : }</a>
<a name="106"><span class="lineNum"> 106 </span> : : </a>
-<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 8000 : dt_for_each_child(parent, node) {</span></a>
-<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 7860 : int cmp = dt_cmp_subnodes(node, root);</span></a>
+<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 8001 : dt_for_each_child(parent, node) {</span></a>
+<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 7861 : int cmp = dt_cmp_subnodes(node, root);</span></a>
<a name="109"><span class="lineNum"> 109 </span> : : </a>
<a name="110"><span class="lineNum"> 110 </span> : : /* Look for duplicates */</a>
-<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 7860 : if (cmp == 0) {</span></a>
+<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 7861 : if (cmp == 0) {</span></a>
<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 4 : prerror(&quot;DT: %s failed, duplicate %s\n&quot;,</span></a>
<a name="113"><span class="lineNum"> 113 </span> : : __func__, root-&gt;name);</a>
<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 4 : return false;</span></a>
@@ -187,11 +187,11 @@
<a name="116"><span class="lineNum"> 116 </span> : : </a>
<a name="117"><span class="lineNum"> 117 </span> : : /* insert before the first node that's larger</a>
<a name="118"><span class="lineNum"> 118 </span> : : * the the node we're inserting */</a>
-<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 7856 : if (cmp &gt; 0)</span></a>
+<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 7857 : if (cmp &gt; 0)</span></a>
<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 580 : break;</span></a>
<a name="121"><span class="lineNum"> 121 </span> : : }</a>
<a name="122"><span class="lineNum"> 122 </span> : : </a>
-<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 720 : list_add_before(&amp;parent-&gt;children, &amp;root-&gt;list, &amp;node-&gt;list);</span></a>
+<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 720 : list_add_before(&amp;parent-&gt;children, &amp;node-&gt;list, &amp;root-&gt;list);</span></a>
<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 720 : root-&gt;parent = parent;</span></a>
<a name="125"><span class="lineNum"> 125 </span> : : </a>
<a name="126"><span class="lineNum"> 126 </span> :<span class="lineCov"> 720 : return true;</span></a>
@@ -206,17 +206,17 @@
<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 859 : free(dn);</span></a>
<a name="136"><span class="lineNum"> 136 </span> : : }</a>
<a name="137"><span class="lineNum"> 137 </span> : : </a>
-<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 610 : struct dt_node *dt_new(struct dt_node *parent, const char *name)</span></a>
+<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 609 : struct dt_node *dt_new(struct dt_node *parent, const char *name)</span></a>
<a name="139"><span class="lineNum"> 139 </span> : : {</a>
<a name="140"><span class="lineNum"> 140 </span> : : struct dt_node *new;</a>
-<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 610 : assert(parent);</span></a>
+<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 609 : assert(parent);</span></a>
<a name="142"><span class="lineNum"> 142 </span> : : </a>
-<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 610 : new = new_node(name);</span></a>
-<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 610 : if (!dt_attach_root(parent, new)) {</span></a>
+<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 609 : new = new_node(name);</span></a>
+<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 609 : if (!dt_attach_root(parent, new)) {</span></a>
<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 1 : dt_destroy(new);</span></a>
<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 1 : return NULL;</span></a>
<a name="147"><span class="lineNum"> 147 </span> : : }</a>
-<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 609 : return new;</span></a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 608 : return new;</span></a>
<a name="149"><span class="lineNum"> 149 </span> : : }</a>
<a name="150"><span class="lineNum"> 150 </span> : : </a>
<a name="151"><span class="lineNum"> 151 </span> : : /*</a>
@@ -381,72 +381,72 @@
<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 10 : return p;</span></a>
<a name="311"><span class="lineNum"> 311 </span> : : }</a>
<a name="312"><span class="lineNum"> 312 </span> : : </a>
-<a name="313"><span class="lineNum"> 313 </span> :<span class="lineCov"> 2119 : static const char *__dt_path_split(const char *p,</span></a>
+<a name="313"><span class="lineNum"> 313 </span> :<span class="lineCov"> 2115 : static const char *__dt_path_split(const char *p,</span></a>
<a name="314"><span class="lineNum"> 314 </span> : : const char **namep, unsigned int *namel,</a>
<a name="315"><span class="lineNum"> 315 </span> : : const char **addrp, unsigned int *addrl)</a>
<a name="316"><span class="lineNum"> 316 </span> : : {</a>
<a name="317"><span class="lineNum"> 317 </span> : : const char *at, *sl;</a>
<a name="318"><span class="lineNum"> 318 </span> : : </a>
-<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 2119 : *namel = *addrl = 0;</span></a>
+<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 2115 : *namel = *addrl = 0;</span></a>
<a name="320"><span class="lineNum"> 320 </span> : : </a>
<a name="321"><span class="lineNum"> 321 </span> : : /* Skip initial '/' */</a>
-<a name="322"><span class="lineNum"> 322 </span> :<span class="lineCov"> 2265 : while (*p == '/')</span></a>
-<a name="323"><span class="lineNum"> 323 </span> :<span class="lineCov"> 146 : p++;</span></a>
+<a name="322"><span class="lineNum"> 322 </span> :<span class="lineCov"> 2260 : while (*p == '/')</span></a>
+<a name="323"><span class="lineNum"> 323 </span> :<span class="lineCov"> 145 : p++;</span></a>
<a name="324"><span class="lineNum"> 324 </span> : : </a>
<a name="325"><span class="lineNum"> 325 </span> : : /* Check empty path */</a>
-<a name="326"><span class="lineNum"> 326 </span> :<span class="lineCov"> 2119 : if (*p == 0)</span></a>
+<a name="326"><span class="lineNum"> 326 </span> :<span class="lineCov"> 2115 : if (*p == 0)</span></a>
<a name="327"><span class="lineNum"> 327 </span> :<span class="lineNoCov"> 0 : return p;</span></a>
<a name="328"><span class="lineNum"> 328 </span> : : </a>
-<a name="329"><span class="lineNum"> 329 </span> :<span class="lineCov"> 2119 : at = strchr(p, '@');</span></a>
-<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 2119 : sl = strchr(p, '/');</span></a>
-<a name="331"><span class="lineNum"> 331 </span> :<span class="lineCov"> 2119 : if (sl == NULL)</span></a>
-<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 2031 : sl = p + strlen(p);</span></a>
-<a name="333"><span class="lineNum"> 333 </span> :<span class="lineCov"> 2119 : if (sl &lt; at)</span></a>
+<a name="329"><span class="lineNum"> 329 </span> :<span class="lineCov"> 2115 : at = strchr(p, '@');</span></a>
+<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 2115 : sl = strchr(p, '/');</span></a>
+<a name="331"><span class="lineNum"> 331 </span> :<span class="lineCov"> 2115 : if (sl == NULL)</span></a>
+<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 2028 : sl = p + strlen(p);</span></a>
+<a name="333"><span class="lineNum"> 333 </span> :<span class="lineCov"> 2115 : if (sl &lt; at)</span></a>
<a name="334"><span class="lineNum"> 334 </span> :<span class="lineCov"> 2 : at = NULL;</span></a>
-<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 2119 : if (at) {</span></a>
+<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 2115 : if (at) {</span></a>
<a name="336"><span class="lineNum"> 336 </span> :<span class="lineCov"> 558 : *addrp = at + 1;</span></a>
<a name="337"><span class="lineNum"> 337 </span> :<span class="lineCov"> 558 : *addrl = sl - at - 1;</span></a>
<a name="338"><span class="lineNum"> 338 </span> : : }</a>
-<a name="339"><span class="lineNum"> 339 </span> :<span class="lineCov"> 2119 : *namep = p;</span></a>
-<a name="340"><span class="lineNum"> 340 </span> :<span class="lineCov"> 2119 : *namel = at ? (at - p) : (sl - p);</span></a>
+<a name="339"><span class="lineNum"> 339 </span> :<span class="lineCov"> 2115 : *namep = p;</span></a>
+<a name="340"><span class="lineNum"> 340 </span> :<span class="lineCov"> 2115 : *namel = at ? (at - p) : (sl - p);</span></a>
<a name="341"><span class="lineNum"> 341 </span> : : </a>
-<a name="342"><span class="lineNum"> 342 </span> :<span class="lineCov"> 2119 : return sl;</span></a>
+<a name="342"><span class="lineNum"> 342 </span> :<span class="lineCov"> 2115 : return sl;</span></a>
<a name="343"><span class="lineNum"> 343 </span> : : }</a>
<a name="344"><span class="lineNum"> 344 </span> : : </a>
-<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 116 : struct dt_node *dt_find_by_path(struct dt_node *root, const char *path)</span></a>
+<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 115 : struct dt_node *dt_find_by_path(struct dt_node *root, const char *path)</span></a>
<a name="346"><span class="lineNum"> 346 </span> : : {</a>
<a name="347"><span class="lineNum"> 347 </span> : : struct dt_node *n;</a>
-<a name="348"><span class="lineNum"> 348 </span> :<span class="lineCov"> 116 : const char *pn, *pa, *p = path, *nn, *na;</span></a>
+<a name="348"><span class="lineNum"> 348 </span> :<span class="lineCov"> 115 : const char *pn, *pa, *p = path, *nn, *na;</span></a>
<a name="349"><span class="lineNum"> 349 </span> : : unsigned int pnl, pal, nnl, nal;</a>
<a name="350"><span class="lineNum"> 350 </span> : : bool match;</a>
<a name="351"><span class="lineNum"> 351 </span> : : </a>
<a name="352"><span class="lineNum"> 352 </span> : : /* Walk path components */</a>
-<a name="353"><span class="lineNum"> 353 </span> :<span class="lineCov"> 236 : while (*p) {</span></a>
+<a name="353"><span class="lineNum"> 353 </span> :<span class="lineCov"> 233 : while (*p) {</span></a>
<a name="354"><span class="lineNum"> 354 </span> : : /* Extract next path component */</a>
-<a name="355"><span class="lineNum"> 355 </span> :<span class="lineCov"> 184 : p = __dt_path_split(p, &amp;pn, &amp;pnl, &amp;pa, &amp;pal);</span></a>
-<a name="356"><span class="lineNum"> 356 </span> :<span class="lineCov"> 184 : if (pnl == 0 &amp;&amp; pal == 0)</span></a>
+<a name="355"><span class="lineNum"> 355 </span> :<span class="lineCov"> 182 : p = __dt_path_split(p, &amp;pn, &amp;pnl, &amp;pa, &amp;pal);</span></a>
+<a name="356"><span class="lineNum"> 356 </span> :<span class="lineCov"> 182 : if (pnl == 0 &amp;&amp; pal == 0)</span></a>
<a name="357"><span class="lineNum"> 357 </span> :<span class="lineNoCov"> 0 : break;</span></a>
<a name="358"><span class="lineNum"> 358 </span> : : </a>
<a name="359"><span class="lineNum"> 359 </span> : : /* Compare with each child node */</a>
-<a name="360"><span class="lineNum"> 360 </span> :<span class="lineCov"> 184 : match = false;</span></a>
-<a name="361"><span class="lineNum"> 361 </span> :<span class="lineCov"> 1999 : list_for_each(&amp;root-&gt;children, n, list) {</span></a>
-<a name="362"><span class="lineNum"> 362 </span> :<span class="lineCov"> 1935 : match = true;</span></a>
-<a name="363"><span class="lineNum"> 363 </span> :<span class="lineCov"> 1935 : __dt_path_split(n-&gt;name, &amp;nn, &amp;nnl, &amp;na, &amp;nal);</span></a>
-<a name="364"><span class="lineNum"> 364 </span> :<span class="lineCov"> 1935 : if (pnl &amp;&amp; (pnl != nnl || strncmp(pn, nn, pnl)))</span></a>
+<a name="360"><span class="lineNum"> 360 </span> :<span class="lineCov"> 182 : match = false;</span></a>
+<a name="361"><span class="lineNum"> 361 </span> :<span class="lineCov"> 1997 : list_for_each(&amp;root-&gt;children, n, list) {</span></a>
+<a name="362"><span class="lineNum"> 362 </span> :<span class="lineCov"> 1933 : match = true;</span></a>
+<a name="363"><span class="lineNum"> 363 </span> :<span class="lineCov"> 1933 : __dt_path_split(n-&gt;name, &amp;nn, &amp;nnl, &amp;na, &amp;nal);</span></a>
+<a name="364"><span class="lineNum"> 364 </span> :<span class="lineCov"> 1933 : if (pnl &amp;&amp; (pnl != nnl || strncmp(pn, nn, pnl)))</span></a>
<a name="365"><span class="lineNum"> 365 </span> :<span class="lineCov"> 1815 : match = false;</span></a>
-<a name="366"><span class="lineNum"> 366 </span> :<span class="lineCov"> 1935 : if (pal &amp;&amp; (pal != nal || strncmp(pa, na, pal)))</span></a>
+<a name="366"><span class="lineNum"> 366 </span> :<span class="lineCov"> 1933 : if (pal &amp;&amp; (pal != nal || strncmp(pa, na, pal)))</span></a>
<a name="367"><span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : match = false;</span></a>
-<a name="368"><span class="lineNum"> 368 </span> :<span class="lineCov"> 1935 : if (match) {</span></a>
-<a name="369"><span class="lineNum"> 369 </span> :<span class="lineCov"> 120 : root = n;</span></a>
-<a name="370"><span class="lineNum"> 370 </span> :<span class="lineCov"> 120 : break;</span></a>
+<a name="368"><span class="lineNum"> 368 </span> :<span class="lineCov"> 1933 : if (match) {</span></a>
+<a name="369"><span class="lineNum"> 369 </span> :<span class="lineCov"> 118 : root = n;</span></a>
+<a name="370"><span class="lineNum"> 370 </span> :<span class="lineCov"> 118 : break;</span></a>
<a name="371"><span class="lineNum"> 371 </span> : : }</a>
<a name="372"><span class="lineNum"> 372 </span> : : }</a>
<a name="373"><span class="lineNum"> 373 </span> : : </a>
<a name="374"><span class="lineNum"> 374 </span> : : /* No child match */</a>
-<a name="375"><span class="lineNum"> 375 </span> :<span class="lineCov"> 184 : if (!match)</span></a>
+<a name="375"><span class="lineNum"> 375 </span> :<span class="lineCov"> 182 : if (!match)</span></a>
<a name="376"><span class="lineNum"> 376 </span> :<span class="lineCov"> 64 : return NULL;</span></a>
<a name="377"><span class="lineNum"> 377 </span> : : }</a>
-<a name="378"><span class="lineNum"> 378 </span> :<span class="lineCov"> 52 : return root;</span></a>
+<a name="378"><span class="lineNum"> 378 </span> :<span class="lineCov"> 51 : return root;</span></a>
<a name="379"><span class="lineNum"> 379 </span> : : }</a>
<a name="380"><span class="lineNum"> 380 </span> : : </a>
<a name="381"><span class="lineNum"> 381 </span> :<span class="lineCov"> 35 : struct dt_node *dt_find_by_name(struct dt_node *root, const char *name)</span></a>
@@ -489,20 +489,20 @@
<a name="418"><span class="lineNum"> 418 </span> :<span class="lineCov"> 1 : return NULL;</span></a>
<a name="419"><span class="lineNum"> 419 </span> : : }</a>
<a name="420"><span class="lineNum"> 420 </span> : : </a>
-<a name="421"><span class="lineNum"> 421 </span> :<span class="lineCov"> 4534 : static struct dt_property *new_property(struct dt_node *node,</span></a>
+<a name="421"><span class="lineNum"> 421 </span> :<span class="lineCov"> 4555 : static struct dt_property *new_property(struct dt_node *node,</span></a>
<a name="422"><span class="lineNum"> 422 </span> : : const char *name, size_t size)</a>
<a name="423"><span class="lineNum"> 423 </span> : : {</a>
-<a name="424"><span class="lineNum"> 424 </span> :<span class="lineCov"> 4534 : struct dt_property *p = malloc(sizeof(*p) + size);</span></a>
+<a name="424"><span class="lineNum"> 424 </span> :<span class="lineCov"> 4555 : struct dt_property *p = malloc(sizeof(*p) + size);</span></a>
<a name="425"><span class="lineNum"> 425 </span> : : char *path;</a>
<a name="426"><span class="lineNum"> 426 </span> : : </a>
-<a name="427"><span class="lineNum"> 427 </span> :<span class="lineCov"> 4534 : if (!p) {</span></a>
+<a name="427"><span class="lineNum"> 427 </span> :<span class="lineCov"> 4555 : if (!p) {</span></a>
<a name="428"><span class="lineNum"> 428 </span> :<span class="lineNoCov"> 0 : path = dt_get_path(node);</span></a>
<a name="429"><span class="lineNum"> 429 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Failed to allocate property \&quot;%s\&quot; for %s of %zu bytes\n&quot;,</span></a>
<a name="430"><span class="lineNum"> 430 </span> : : name, path, size);</a>
<a name="431"><span class="lineNum"> 431 </span> :<span class="lineNoCov"> 0 : free(path);</span></a>
<a name="432"><span class="lineNum"> 432 </span> :<span class="lineNoCov"> 0 : abort();</span></a>
<a name="433"><span class="lineNum"> 433 </span> : : }</a>
-<a name="434"><span class="lineNum"> 434 </span> :<span class="lineCov"> 4534 : if (dt_find_property(node, name)) {</span></a>
+<a name="434"><span class="lineNum"> 434 </span> :<span class="lineCov"> 4555 : if (dt_find_property(node, name)) {</span></a>
<a name="435"><span class="lineNum"> 435 </span> :<span class="lineNoCov"> 0 : path = dt_get_path(node);</span></a>
<a name="436"><span class="lineNum"> 436 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Duplicate property \&quot;%s\&quot; in node %s\n&quot;,</span></a>
<a name="437"><span class="lineNum"> 437 </span> : : name, path);</a>
@@ -511,13 +511,13 @@
<a name="440"><span class="lineNum"> 440 </span> : : </a>
<a name="441"><span class="lineNum"> 441 </span> : : }</a>
<a name="442"><span class="lineNum"> 442 </span> : : </a>
-<a name="443"><span class="lineNum"> 443 </span> :<span class="lineCov"> 4534 : p-&gt;name = take_name(name);</span></a>
-<a name="444"><span class="lineNum"> 444 </span> :<span class="lineCov"> 4534 : p-&gt;len = size;</span></a>
-<a name="445"><span class="lineNum"> 445 </span> :<span class="lineCov"> 4534 : list_add_tail(&amp;node-&gt;properties, &amp;p-&gt;list);</span></a>
-<a name="446"><span class="lineNum"> 446 </span> :<span class="lineCov"> 4534 : return p;</span></a>
+<a name="443"><span class="lineNum"> 443 </span> :<span class="lineCov"> 4555 : p-&gt;name = take_name(name);</span></a>
+<a name="444"><span class="lineNum"> 444 </span> :<span class="lineCov"> 4555 : p-&gt;len = size;</span></a>
+<a name="445"><span class="lineNum"> 445 </span> :<span class="lineCov"> 4555 : list_add_tail(&amp;node-&gt;properties, &amp;p-&gt;list);</span></a>
+<a name="446"><span class="lineNum"> 446 </span> :<span class="lineCov"> 4555 : return p;</span></a>
<a name="447"><span class="lineNum"> 447 </span> : : }</a>
<a name="448"><span class="lineNum"> 448 </span> : : </a>
-<a name="449"><span class="lineNum"> 449 </span> :<span class="lineCov"> 1211 : struct dt_property *dt_add_property(struct dt_node *node,</span></a>
+<a name="449"><span class="lineNum"> 449 </span> :<span class="lineCov"> 1210 : struct dt_property *dt_add_property(struct dt_node *node,</span></a>
<a name="450"><span class="lineNum"> 450 </span> : : const char *name,</a>
<a name="451"><span class="lineNum"> 451 </span> : : const void *val, size_t size)</a>
<a name="452"><span class="lineNum"> 452 </span> : : {</a>
@@ -527,8 +527,8 @@
<a name="456"><span class="lineNum"> 456 </span> : : * Filter out phandle properties, we re-generate them</a>
<a name="457"><span class="lineNum"> 457 </span> : : * when flattening</a>
<a name="458"><span class="lineNum"> 458 </span> : : */</a>
-<a name="459"><span class="lineNum"> 459 </span> :<span class="lineCov"> 1211 : if (strcmp(name, &quot;linux,phandle&quot;) == 0 ||</span></a>
-<a name="460"><span class="lineNum"> 460 </span> :<span class="lineCov"> 1211 : strcmp(name, &quot;phandle&quot;) == 0) {</span></a>
+<a name="459"><span class="lineNum"> 459 </span> :<span class="lineCov"> 1210 : if (strcmp(name, &quot;linux,phandle&quot;) == 0 ||</span></a>
+<a name="460"><span class="lineNum"> 460 </span> :<span class="lineCov"> 1210 : strcmp(name, &quot;phandle&quot;) == 0) {</span></a>
<a name="461"><span class="lineNum"> 461 </span> :<span class="lineCov"> 10 : assert(size == 4);</span></a>
<a name="462"><span class="lineNum"> 462 </span> :<span class="lineCov"> 10 : node-&gt;phandle = *(const u32 *)val;</span></a>
<a name="463"><span class="lineNum"> 463 </span> :<span class="lineCov"> 10 : if (node-&gt;phandle &gt;= last_phandle)</span></a>
@@ -536,10 +536,10 @@
<a name="465"><span class="lineNum"> 465 </span> :<span class="lineCov"> 10 : return NULL;</span></a>
<a name="466"><span class="lineNum"> 466 </span> : : }</a>
<a name="467"><span class="lineNum"> 467 </span> : : </a>
-<a name="468"><span class="lineNum"> 468 </span> :<span class="lineCov"> 1201 : p = new_property(node, name, size);</span></a>
-<a name="469"><span class="lineNum"> 469 </span> :<span class="lineCov"> 1201 : if (size)</span></a>
-<a name="470"><span class="lineNum"> 470 </span> :<span class="lineCov"> 881 : memcpy(p-&gt;prop, val, size);</span></a>
-<a name="471"><span class="lineNum"> 471 </span> :<span class="lineCov"> 1201 : return p;</span></a>
+<a name="468"><span class="lineNum"> 468 </span> :<span class="lineCov"> 1200 : p = new_property(node, name, size);</span></a>
+<a name="469"><span class="lineNum"> 469 </span> :<span class="lineCov"> 1200 : if (size)</span></a>
+<a name="470"><span class="lineNum"> 470 </span> :<span class="lineCov"> 880 : memcpy(p-&gt;prop, val, size);</span></a>
+<a name="471"><span class="lineNum"> 471 </span> :<span class="lineCov"> 1200 : return p;</span></a>
<a name="472"><span class="lineNum"> 472 </span> : : }</a>
<a name="473"><span class="lineNum"> 473 </span> : : </a>
<a name="474"><span class="lineNum"> 474 </span> :<span class="lineCov"> 112 : void dt_resize_property(struct dt_property **prop, size_t len)</span></a>
@@ -581,7 +581,7 @@
<a name="510"><span class="lineNum"> 510 </span> :<span class="lineCov"> 5 : return p;</span></a>
<a name="511"><span class="lineNum"> 511 </span> : : }</a>
<a name="512"><span class="lineNum"> 512 </span> : : </a>
-<a name="513"><span class="lineNum"> 513 </span> :<span class="lineCov"> 3217 : struct dt_property *__dt_add_property_cells(struct dt_node *node,</span></a>
+<a name="513"><span class="lineNum"> 513 </span> :<span class="lineCov"> 3242 : struct dt_property *__dt_add_property_cells(struct dt_node *node,</span></a>
<a name="514"><span class="lineNum"> 514 </span> : : const char *name,</a>
<a name="515"><span class="lineNum"> 515 </span> : : int count, ...)</a>
<a name="516"><span class="lineNum"> 516 </span> : : {</a>
@@ -590,16 +590,16 @@
<a name="519"><span class="lineNum"> 519 </span> : : unsigned int i;</a>
<a name="520"><span class="lineNum"> 520 </span> : : va_list args;</a>
<a name="521"><span class="lineNum"> 521 </span> : : </a>
-<a name="522"><span class="lineNum"> 522 </span> :<span class="lineCov"> 3217 : p = new_property(node, name, count * sizeof(u32));</span></a>
-<a name="523"><span class="lineNum"> 523 </span> :<span class="lineCov"> 3217 : val = (fdt32_t *)p-&gt;prop;</span></a>
-<a name="524"><span class="lineNum"> 524 </span> :<span class="lineCov"> 3217 : va_start(args, count);</span></a>
-<a name="525"><span class="lineNum"> 525 </span> :<span class="lineCov"> 7460 : for (i = 0; i &lt; count; i++)</span></a>
-<a name="526"><span class="lineNum"> 526 </span> :<span class="lineCov"> 4243 : val[i] = cpu_to_fdt32(va_arg(args, u32));</span></a>
-<a name="527"><span class="lineNum"> 527 </span> :<span class="lineCov"> 3217 : va_end(args);</span></a>
-<a name="528"><span class="lineNum"> 528 </span> :<span class="lineCov"> 3217 : return p;</span></a>
+<a name="522"><span class="lineNum"> 522 </span> :<span class="lineCov"> 3242 : p = new_property(node, name, count * sizeof(u32));</span></a>
+<a name="523"><span class="lineNum"> 523 </span> :<span class="lineCov"> 3242 : val = (fdt32_t *)p-&gt;prop;</span></a>
+<a name="524"><span class="lineNum"> 524 </span> :<span class="lineCov"> 3242 : va_start(args, count);</span></a>
+<a name="525"><span class="lineNum"> 525 </span> :<span class="lineCov"> 7509 : for (i = 0; i &lt; count; i++)</span></a>
+<a name="526"><span class="lineNum"> 526 </span> :<span class="lineCov"> 4267 : val[i] = cpu_to_fdt32(va_arg(args, u32));</span></a>
+<a name="527"><span class="lineNum"> 527 </span> :<span class="lineCov"> 3242 : va_end(args);</span></a>
+<a name="528"><span class="lineNum"> 528 </span> :<span class="lineCov"> 3242 : return p;</span></a>
<a name="529"><span class="lineNum"> 529 </span> : : }</a>
<a name="530"><span class="lineNum"> 530 </span> : : </a>
-<a name="531"><span class="lineNum"> 531 </span> :<span class="lineCov"> 34 : struct dt_property *__dt_add_property_u64s(struct dt_node *node,</span></a>
+<a name="531"><span class="lineNum"> 531 </span> :<span class="lineCov"> 31 : struct dt_property *__dt_add_property_u64s(struct dt_node *node,</span></a>
<a name="532"><span class="lineNum"> 532 </span> : : const char *name,</a>
<a name="533"><span class="lineNum"> 533 </span> : : int count, ...)</a>
<a name="534"><span class="lineNum"> 534 </span> : : {</a>
@@ -608,13 +608,13 @@
<a name="537"><span class="lineNum"> 537 </span> : : unsigned int i;</a>
<a name="538"><span class="lineNum"> 538 </span> : : va_list args;</a>
<a name="539"><span class="lineNum"> 539 </span> : : </a>
-<a name="540"><span class="lineNum"> 540 </span> :<span class="lineCov"> 34 : p = new_property(node, name, count * sizeof(u64));</span></a>
-<a name="541"><span class="lineNum"> 541 </span> :<span class="lineCov"> 34 : val = (fdt64_t *)p-&gt;prop;</span></a>
-<a name="542"><span class="lineNum"> 542 </span> :<span class="lineCov"> 34 : va_start(args, count);</span></a>
-<a name="543"><span class="lineNum"> 543 </span> :<span class="lineCov"> 124 : for (i = 0; i &lt; count; i++)</span></a>
-<a name="544"><span class="lineNum"> 544 </span> :<span class="lineCov"> 90 : val[i] = cpu_to_fdt64(va_arg(args, u64));</span></a>
-<a name="545"><span class="lineNum"> 545 </span> :<span class="lineCov"> 34 : va_end(args);</span></a>
-<a name="546"><span class="lineNum"> 546 </span> :<span class="lineCov"> 34 : return p;</span></a>
+<a name="540"><span class="lineNum"> 540 </span> :<span class="lineCov"> 31 : p = new_property(node, name, count * sizeof(u64));</span></a>
+<a name="541"><span class="lineNum"> 541 </span> :<span class="lineCov"> 31 : val = (fdt64_t *)p-&gt;prop;</span></a>
+<a name="542"><span class="lineNum"> 542 </span> :<span class="lineCov"> 31 : va_start(args, count);</span></a>
+<a name="543"><span class="lineNum"> 543 </span> :<span class="lineCov"> 115 : for (i = 0; i &lt; count; i++)</span></a>
+<a name="544"><span class="lineNum"> 544 </span> :<span class="lineCov"> 84 : val[i] = cpu_to_fdt64(va_arg(args, u64));</span></a>
+<a name="545"><span class="lineNum"> 545 </span> :<span class="lineCov"> 31 : va_end(args);</span></a>
+<a name="546"><span class="lineNum"> 546 </span> :<span class="lineCov"> 31 : return p;</span></a>
<a name="547"><span class="lineNum"> 547 </span> : : }</a>
<a name="548"><span class="lineNum"> 548 </span> : : </a>
<a name="549"><span class="lineNum"> 549 </span> :<span class="lineCov"> 82 : struct dt_property *__dt_add_property_strings(struct dt_node *node,</span></a>
@@ -718,21 +718,21 @@
<a name="647"><span class="lineNum"> 647 </span> : : {</a>
<a name="648"><span class="lineNum"> 648 </span> : : struct dt_property *i;</a>
<a name="649"><span class="lineNum"> 649 </span> : : </a>
-<a name="650"><span class="lineNum"> 650 </span> :<span class="lineCov"> 4927 : list_for_each(&amp;node-&gt;properties, i, list)</span></a>
-<a name="651"><span class="lineNum"> 651 </span> :<span class="lineCov"> 4365 : if (strcmp(i-&gt;name, name) == 0)</span></a>
+<a name="650"><span class="lineNum"> 650 </span> :<span class="lineCov"> 4953 : list_for_each(&amp;node-&gt;properties, i, list)</span></a>
+<a name="651"><span class="lineNum"> 651 </span> :<span class="lineCov"> 4391 : if (strcmp(i-&gt;name, name) == 0)</span></a>
<a name="652"><span class="lineNum"> 652 </span> :<span class="lineCov"> 116 : return i;</span></a>
<a name="653"><span class="lineNum"> 653 </span> :<span class="lineCov"> 562 : return NULL;</span></a>
<a name="654"><span class="lineNum"> 654 </span> : : }</a>
<a name="655"><span class="lineNum"> 655 </span> : : </a>
-<a name="656"><span class="lineNum"> 656 </span> :<span class="lineCov"> 9042 : const struct dt_property *dt_find_property(const struct dt_node *node,</span></a>
+<a name="656"><span class="lineNum"> 656 </span> :<span class="lineCov"> 9063 : const struct dt_property *dt_find_property(const struct dt_node *node,</span></a>
<a name="657"><span class="lineNum"> 657 </span> : : const char *name)</a>
<a name="658"><span class="lineNum"> 658 </span> : : {</a>
<a name="659"><span class="lineNum"> 659 </span> : : const struct dt_property *i;</a>
<a name="660"><span class="lineNum"> 660 </span> : : </a>
-<a name="661"><span class="lineNum"> 661 </span> :<span class="lineCov"> 74693 : list_for_each(&amp;node-&gt;properties, i, list)</span></a>
-<a name="662"><span class="lineNum"> 662 </span> :<span class="lineCov"> 66765 : if (strcmp(i-&gt;name, name) == 0)</span></a>
+<a name="661"><span class="lineNum"> 661 </span> :<span class="lineCov"> 74964 : list_for_each(&amp;node-&gt;properties, i, list)</span></a>
+<a name="662"><span class="lineNum"> 662 </span> :<span class="lineCov"> 67015 : if (strcmp(i-&gt;name, name) == 0)</span></a>
<a name="663"><span class="lineNum"> 663 </span> :<span class="lineCov"> 1114 : return i;</span></a>
-<a name="664"><span class="lineNum"> 664 </span> :<span class="lineCov"> 7928 : return NULL;</span></a>
+<a name="664"><span class="lineNum"> 664 </span> :<span class="lineCov"> 7949 : return NULL;</span></a>
<a name="665"><span class="lineNum"> 665 </span> : : }</a>
<a name="666"><span class="lineNum"> 666 </span> : : </a>
<a name="667"><span class="lineNum"> 667 </span> :<span class="lineNoCov"> 0 : void dt_check_del_prop(struct dt_node *node, const char *name)</span></a>
@@ -905,9 +905,9 @@
<a name="834"><span class="lineNum"> 834 </span> :<span class="lineCov"> 1685 : while ((child = list_top(&amp;node-&gt;children, struct dt_node, list)))</span></a>
<a name="835"><span class="lineNum"> 835 </span> :<span class="lineCov"> 829 : dt_free(child);</span></a>
<a name="836"><span class="lineNum"> 836 </span> : : </a>
-<a name="837"><span class="lineNum"> 837 </span> :<span class="lineCov"> 5296 : while ((p = list_pop(&amp;node-&gt;properties, struct dt_property, list))) {</span></a>
-<a name="838"><span class="lineNum"> 838 </span> :<span class="lineCov"> 4440 : free_name(p-&gt;name);</span></a>
-<a name="839"><span class="lineNum"> 839 </span> :<span class="lineCov"> 4440 : free(p);</span></a>
+<a name="837"><span class="lineNum"> 837 </span> :<span class="lineCov"> 5322 : while ((p = list_pop(&amp;node-&gt;properties, struct dt_property, list))) {</span></a>
+<a name="838"><span class="lineNum"> 838 </span> :<span class="lineCov"> 4466 : free_name(p-&gt;name);</span></a>
+<a name="839"><span class="lineNum"> 839 </span> :<span class="lineCov"> 4466 : free(p);</span></a>
<a name="840"><span class="lineNum"> 840 </span> : : }</a>
<a name="841"><span class="lineNum"> 841 </span> : : </a>
<a name="842"><span class="lineNum"> 842 </span> :<span class="lineCov"> 856 : if (node-&gt;parent)</span></a>
diff --git a/coverage-report/core/fdt.c.func-sort-c.html b/coverage-report/core/fdt.c.func-sort-c.html
index 3b63d2f..934ab9f 100644
--- a/coverage-report/core/fdt.c.func-sort-c.html
+++ b/coverage-report/core/fdt.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@@ -106,11 +106,11 @@
</tr>
<tr>
<td class="coverFn"><a href="fdt.c.gcov.html#51">dt_property</a></td>
- <td class="coverFnHi">2549</td>
+ <td class="coverFnHi">2575</td>
</tr>
<tr>
<td class="coverFn"><a href="fdt.c.gcov.html#28">__save_err</a></td>
- <td class="coverFnHi">3269</td>
+ <td class="coverFnHi">3295</td>
</tr>
</table>
<br>
diff --git a/coverage-report/core/fdt.c.func.html b/coverage-report/core/fdt.c.func.html
index d69aea5..6bca530 100644
--- a/coverage-report/core/fdt.c.func.html
+++ b/coverage-report/core/fdt.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@@ -74,7 +74,7 @@
</tr>
<tr>
<td class="coverFn"><a href="fdt.c.gcov.html#28">__save_err</a></td>
- <td class="coverFnHi">3269</td>
+ <td class="coverFnHi">3295</td>
</tr>
<tr>
<td class="coverFn"><a href="fdt.c.gcov.html#187">create_dtb</a></td>
@@ -94,7 +94,7 @@
</tr>
<tr>
<td class="coverFn"><a href="fdt.c.gcov.html#51">dt_property</a></td>
- <td class="coverFnHi">2549</td>
+ <td class="coverFnHi">2575</td>
</tr>
<tr>
<td class="coverFn"><a href="fdt.c.gcov.html#39">dt_property_cell</a></td>
diff --git a/coverage-report/core/fdt.c.gcov.html b/coverage-report/core/fdt.c.gcov.html
index 58e0792..c246281 100644
--- a/coverage-report/core/fdt.c.gcov.html
+++ b/coverage-report/core/fdt.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@@ -98,14 +98,14 @@
<a name="27"><span class="lineNum"> 27 </span> : : #define FDT_DBG(fmt, a...)</a>
<a name="28"><span class="lineNum"> 28 </span> : : #endif</a>
<a name="29"><span class="lineNum"> 29 </span> : : </a>
-<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 3269 : static void __save_err(int err, const char *str)</span></a>
+<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 3295 : static void __save_err(int err, const char *str)</span></a>
<a name="31"><span class="lineNum"> 31 </span> : : {</a>
<a name="32"><span class="lineNum"> 32 </span> : : FDT_DBG(&quot;rc: %d from \&quot;%s\&quot;\n&quot;, err, str);</a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 3269 : if (err &amp;&amp; !fdt_error) {</span></a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 3295 : if (err &amp;&amp; !fdt_error) {</span></a>
<a name="34"><span class="lineNum"> 34 </span> :<span class="lineNoCov"> 0 : prerror(&quot;FDT: Error %d from \&quot;%s\&quot;\n&quot;, err, str);</span></a>
<a name="35"><span class="lineNum"> 35 </span> :<span class="lineNoCov"> 0 : fdt_error = err;</span></a>
<a name="36"><span class="lineNum"> 36 </span> : : }</a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 3269 : }</span></a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 3295 : }</span></a>
<a name="38"><span class="lineNum"> 38 </span> : : </a>
<a name="39"><span class="lineNum"> 39 </span> : : #define save_err(...) __save_err(__VA_ARGS__, #__VA_ARGS__)</a>
<a name="40"><span class="lineNum"> 40 </span> : : </a>
@@ -121,10 +121,10 @@
<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 236 : dt_property_cell(fdt, &quot;phandle&quot;, dn-&gt;phandle);</span></a>
<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 236 : }</span></a>
<a name="52"><span class="lineNum"> 52 </span> : : </a>
-<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 2549 : static void dt_property(void *fdt, const struct dt_property *p)</span></a>
+<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 2575 : static void dt_property(void *fdt, const struct dt_property *p)</span></a>
<a name="54"><span class="lineNum"> 54 </span> : : {</a>
-<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 2549 : save_err(fdt_property(fdt, p-&gt;name, p-&gt;prop, p-&gt;len));</span></a>
-<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 2549 : }</span></a>
+<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 2575 : save_err(fdt_property(fdt, p-&gt;name, p-&gt;prop, p-&gt;len));</span></a>
+<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 2575 : }</span></a>
<a name="57"><span class="lineNum"> 57 </span> : : </a>
<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 236 : static void dt_end_node(void *fdt)</span></a>
<a name="59"><span class="lineNum"> 59 </span> : : {</a>
@@ -177,12 +177,12 @@
<a name="106"><span class="lineNum"> 106 </span> : : {</a>
<a name="107"><span class="lineNum"> 107 </span> : : const struct dt_property *p;</a>
<a name="108"><span class="lineNum"> 108 </span> : : </a>
-<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 2793 : list_for_each(&amp;dn-&gt;properties, p, list) {</span></a>
-<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 2557 : if (strstarts(p-&gt;name, DT_PRIVATE))</span></a>
+<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 2819 : list_for_each(&amp;dn-&gt;properties, p, list) {</span></a>
+<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 2583 : if (strstarts(p-&gt;name, DT_PRIVATE))</span></a>
<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 8 : continue;</span></a>
<a name="112"><span class="lineNum"> 112 </span> : : </a>
<a name="113"><span class="lineNum"> 113 </span> : : FDT_DBG(&quot; prop: %s size: %ld\n&quot;, p-&gt;name, p-&gt;len);</a>
-<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 2549 : dt_property(fdt, p);</span></a>
+<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 2575 : dt_property(fdt, p);</span></a>
<a name="115"><span class="lineNum"> 115 </span> : : }</a>
<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 236 : }</span></a>
<a name="117"><span class="lineNum"> 117 </span> : : </a>
diff --git a/coverage-report/core/flash-firmware-versions.c.func-sort-c.html b/coverage-report/core/flash-firmware-versions.c.func-sort-c.html
index 3dd97c0..5ea02d6 100644
--- a/coverage-report/core/flash-firmware-versions.c.func-sort-c.html
+++ b/coverage-report/core/flash-firmware-versions.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/flash-firmware-versions.c.func.html b/coverage-report/core/flash-firmware-versions.c.func.html
index 27d92fe..bb65462 100644
--- a/coverage-report/core/flash-firmware-versions.c.func.html
+++ b/coverage-report/core/flash-firmware-versions.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/flash-firmware-versions.c.gcov.html b/coverage-report/core/flash-firmware-versions.c.gcov.html
index b6f601d..5b99ced 100644
--- a/coverage-report/core/flash-firmware-versions.c.gcov.html
+++ b/coverage-report/core/flash-firmware-versions.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/flash-subpartition.c.func-sort-c.html b/coverage-report/core/flash-subpartition.c.func-sort-c.html
index 340ea15..882e108 100644
--- a/coverage-report/core/flash-subpartition.c.func-sort-c.html
+++ b/coverage-report/core/flash-subpartition.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/flash-subpartition.c.func.html b/coverage-report/core/flash-subpartition.c.func.html
index aaaae9d..519367a 100644
--- a/coverage-report/core/flash-subpartition.c.func.html
+++ b/coverage-report/core/flash-subpartition.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/flash-subpartition.c.gcov.html b/coverage-report/core/flash-subpartition.c.gcov.html
index b3e1902..b135089 100644
--- a/coverage-report/core/flash-subpartition.c.gcov.html
+++ b/coverage-report/core/flash-subpartition.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/index-sort-b.html b/coverage-report/core/index-sort-b.html
index 0c88363..32c258a 100644
--- a/coverage-report/core/index-sort-b.html
+++ b/coverage-report/core/index-sort-b.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">2002</td>
- <td class="headerCovTableEntry">2683</td>
- <td class="headerCovTableEntryLo">74.6 %</td>
+ <td class="headerCovTableEntry">1979</td>
+ <td class="headerCovTableEntry">2706</td>
+ <td class="headerCovTableEntryLo">73.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">186</td>
+ <td class="headerCovTableEntry">185</td>
<td class="headerCovTableEntry">227</td>
- <td class="headerCovTableEntryMed">81.9 %</td>
+ <td class="headerCovTableEntryMed">81.5 %</td>
</tr>
<tr>
<td></td>
@@ -82,50 +82,62 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="console-log.c.gcov.html">console-log.c</a></td>
+ <td class="coverFile"><a href="pel.c.gcov.html">pel.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=97 height=10 alt="97.5%"><img src="../snow.png" width=3 height=10 alt="97.5%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">97.5&nbsp;%</td>
+ <td class="coverNumHi">155 / 159</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">12 / 12</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="time-utils.c.gcov.html">time-utils.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">21 / 21</td>
+ <td class="coverNumHi">18 / 18</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="trace.c.gcov.html">trace.c</a></td>
+ <td class="coverFile"><a href="chip.c.gcov.html">chip.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=88 height=10 alt="88.2%"><img src="../snow.png" width=12 height=10 alt="88.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
- <td class="coverPerMed">88.2&nbsp;%</td>
- <td class="coverNumMed">112 / 127</td>
- <td class="coverPerMed">85.7&nbsp;%</td>
- <td class="coverNumMed">6 / 7</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 107</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 8</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="bitmap.c.gcov.html">bitmap.c</a></td>
+ <td class="coverFile"><a href="timer.c.gcov.html">timer.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=62 height=10 alt="61.8%"><img src="../snow.png" width=38 height=10 alt="61.8%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">21 / 21</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
+ <td class="coverPerLo">61.8&nbsp;%</td>
+ <td class="coverNumLo">68 / 110</td>
+ <td class="coverPerLo">69.2&nbsp;%</td>
+ <td class="coverNumLo">9 / 13</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="pci-quirk.c.gcov.html">pci-quirk.c</a></td>
+ <td class="coverFile"><a href="flash-firmware-versions.c.gcov.html">flash-firmware-versions.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=13 height=10 alt="13.3%"><img src="../snow.png" width=87 height=10 alt="13.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="85.3%"><img src="../snow.png" width=15 height=10 alt="85.3%"></td></tr></table>
</td>
- <td class="coverPerLo">13.3&nbsp;%</td>
- <td class="coverNumLo">8 / 60</td>
- <td class="coverPerLo">20.0&nbsp;%</td>
- <td class="coverNumLo">1 / 5</td>
+ <td class="coverPerMed">85.3&nbsp;%</td>
+ <td class="coverNumMed">58 / 68</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -142,132 +154,132 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="pool.c.gcov.html">pool.c</a></td>
+ <td class="coverFile"><a href="opal-msg.c.gcov.html">opal-msg.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="96.4%"><img src="../snow.png" width=4 height=10 alt="96.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.1%"><img src="../snow.png" width=27 height=10 alt="73.1%"></td></tr></table>
</td>
- <td class="coverPerHi">96.4&nbsp;%</td>
- <td class="coverNumHi">27 / 28</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
+ <td class="coverPerLo">73.1&nbsp;%</td>
+ <td class="coverNumLo">68 / 93</td>
+ <td class="coverPerMed">75.0&nbsp;%</td>
+ <td class="coverNumMed">3 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="fdt.c.gcov.html">fdt.c</a></td>
+ <td class="coverFile"><a href="buddy.c.gcov.html">buddy.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=63 height=10 alt="63.4%"><img src="../snow.png" width=37 height=10 alt="63.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.0%"><img src="../snow.png" width=1 height=10 alt="99.0%"></td></tr></table>
</td>
- <td class="coverPerLo">63.4&nbsp;%</td>
- <td class="coverNumLo">64 / 101</td>
- <td class="coverPerHi">90.9&nbsp;%</td>
- <td class="coverNumHi">10 / 11</td>
+ <td class="coverPerHi">99.0&nbsp;%</td>
+ <td class="coverNumHi">95 / 96</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">12 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="pel.c.gcov.html">pel.c</a></td>
+ <td class="coverFile"><a href="mem_region.c.gcov.html">mem_region.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=97 height=10 alt="97.5%"><img src="../snow.png" width=3 height=10 alt="97.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=66 height=10 alt="65.6%"><img src="../snow.png" width=34 height=10 alt="65.6%"></td></tr></table>
</td>
- <td class="coverPerHi">97.5&nbsp;%</td>
- <td class="coverNumHi">155 / 159</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">12 / 12</td>
+ <td class="coverPerLo">65.6&nbsp;%</td>
+ <td class="coverNumLo">467 / 712</td>
+ <td class="coverPerMed">79.6&nbsp;%</td>
+ <td class="coverNumMed">39 / 49</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="chip.c.gcov.html">chip.c</a></td>
+ <td class="coverFile"><a href="console-log.c.gcov.html">console-log.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 87</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 8</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">21 / 21</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="flash-firmware-versions.c.gcov.html">flash-firmware-versions.c</a></td>
+ <td class="coverFile"><a href="device.c.gcov.html">device.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="85.3%"><img src="../snow.png" width=15 height=10 alt="85.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="84.9%"><img src="../snow.png" width=15 height=10 alt="84.9%"></td></tr></table>
</td>
- <td class="coverPerMed">85.3&nbsp;%</td>
- <td class="coverNumMed">58 / 68</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
+ <td class="coverPerMed">84.9&nbsp;%</td>
+ <td class="coverNumMed">471 / 555</td>
+ <td class="coverPerMed">89.6&nbsp;%</td>
+ <td class="coverNumMed">60 / 67</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="timer.c.gcov.html">timer.c</a></td>
+ <td class="coverFile"><a href="fdt.c.gcov.html">fdt.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=61 height=10 alt="61.3%"><img src="../snow.png" width=39 height=10 alt="61.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=63 height=10 alt="63.4%"><img src="../snow.png" width=37 height=10 alt="63.4%"></td></tr></table>
</td>
- <td class="coverPerLo">61.3&nbsp;%</td>
- <td class="coverNumLo">68 / 111</td>
- <td class="coverPerLo">69.2&nbsp;%</td>
- <td class="coverNumLo">9 / 13</td>
+ <td class="coverPerLo">63.4&nbsp;%</td>
+ <td class="coverNumLo">64 / 101</td>
+ <td class="coverPerHi">90.9&nbsp;%</td>
+ <td class="coverNumHi">10 / 11</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="buddy.c.gcov.html">buddy.c</a></td>
+ <td class="coverFile"><a href="nvram-format.c.gcov.html">nvram-format.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.0%"><img src="../snow.png" width=1 height=10 alt="99.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=77 height=10 alt="76.9%"><img src="../snow.png" width=23 height=10 alt="76.9%"></td></tr></table>
</td>
- <td class="coverPerHi">99.0&nbsp;%</td>
- <td class="coverNumHi">95 / 96</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">12 / 12</td>
+ <td class="coverPerMed">76.9&nbsp;%</td>
+ <td class="coverNumMed">113 / 147</td>
+ <td class="coverPerLo">54.5&nbsp;%</td>
+ <td class="coverNumLo">6 / 11</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="opal-msg.c.gcov.html">opal-msg.c</a></td>
+ <td class="coverFile"><a href="pool.c.gcov.html">pool.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.1%"><img src="../snow.png" width=27 height=10 alt="73.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="96.3%"><img src="../snow.png" width=4 height=10 alt="96.3%"></td></tr></table>
</td>
- <td class="coverPerLo">73.1&nbsp;%</td>
- <td class="coverNumLo">68 / 93</td>
- <td class="coverPerMed">75.0&nbsp;%</td>
- <td class="coverNumMed">3 / 4</td>
+ <td class="coverPerHi">96.3&nbsp;%</td>
+ <td class="coverNumHi">26 / 27</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="device.c.gcov.html">device.c</a></td>
+ <td class="coverFile"><a href="bitmap.c.gcov.html">bitmap.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="84.9%"><img src="../snow.png" width=15 height=10 alt="84.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerMed">84.9&nbsp;%</td>
- <td class="coverNumMed">471 / 555</td>
- <td class="coverPerMed">89.6&nbsp;%</td>
- <td class="coverNumMed">60 / 67</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">21 / 21</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="nvram-format.c.gcov.html">nvram-format.c</a></td>
+ <td class="coverFile"><a href="pci-quirk.c.gcov.html">pci-quirk.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=77 height=10 alt="76.9%"><img src="../snow.png" width=23 height=10 alt="76.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=13 height=10 alt="13.3%"><img src="../snow.png" width=87 height=10 alt="13.3%"></td></tr></table>
</td>
- <td class="coverPerMed">76.9&nbsp;%</td>
- <td class="coverNumMed">113 / 147</td>
- <td class="coverPerLo">54.5&nbsp;%</td>
- <td class="coverNumLo">6 / 11</td>
+ <td class="coverPerLo">13.3&nbsp;%</td>
+ <td class="coverNumLo">8 / 60</td>
+ <td class="coverPerLo">20.0&nbsp;%</td>
+ <td class="coverNumLo">1 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="cpufeatures.c.gcov.html">cpufeatures.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="84.9%"><img src="../snow.png" width=15 height=10 alt="84.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=81 height=10 alt="81.4%"><img src="../snow.png" width=19 height=10 alt="81.4%"></td></tr></table>
</td>
- <td class="coverPerMed">84.9&nbsp;%</td>
- <td class="coverNumMed">118 / 139</td>
+ <td class="coverPerMed">81.4&nbsp;%</td>
+ <td class="coverNumMed">118 / 145</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">-</td>
@@ -286,26 +298,14 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="time-utils.c.gcov.html">time-utils.c</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
- </td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">18 / 18</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
- <td class="coverFile"><a href="mem_region.c.gcov.html">mem_region.c</a></td>
+ <td class="coverFile"><a href="trace.c.gcov.html">trace.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=66 height=10 alt="65.6%"><img src="../snow.png" width=34 height=10 alt="65.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="71.4%"><img src="../snow.png" width=29 height=10 alt="71.4%"></td></tr></table>
</td>
- <td class="coverPerLo">65.6&nbsp;%</td>
- <td class="coverNumLo">467 / 712</td>
- <td class="coverPerMed">79.6&nbsp;%</td>
- <td class="coverNumMed">39 / 49</td>
+ <td class="coverPerLo">71.4&nbsp;%</td>
+ <td class="coverNumLo">90 / 126</td>
+ <td class="coverPerLo">71.4&nbsp;%</td>
+ <td class="coverNumLo">5 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/core/index-sort-f.html b/coverage-report/core/index-sort-f.html
index d77583e..af7cb84 100644
--- a/coverage-report/core/index-sort-f.html
+++ b/coverage-report/core/index-sort-f.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">2002</td>
- <td class="headerCovTableEntry">2683</td>
- <td class="headerCovTableEntryLo">74.6 %</td>
+ <td class="headerCovTableEntry">1979</td>
+ <td class="headerCovTableEntry">2706</td>
+ <td class="headerCovTableEntryLo">73.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">186</td>
+ <td class="headerCovTableEntry">185</td>
<td class="headerCovTableEntry">227</td>
- <td class="headerCovTableEntryMed">81.9 %</td>
+ <td class="headerCovTableEntryMed">81.5 %</td>
</tr>
<tr>
<td></td>
@@ -87,7 +87,7 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 87</td>
+ <td class="coverNumLo">0 / 107</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumLo">0 / 8</td>
<td class="coverPerHi">-</td>
@@ -120,16 +120,28 @@
<tr>
<td class="coverFile"><a href="timer.c.gcov.html">timer.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=61 height=10 alt="61.3%"><img src="../snow.png" width=39 height=10 alt="61.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=62 height=10 alt="61.8%"><img src="../snow.png" width=38 height=10 alt="61.8%"></td></tr></table>
</td>
- <td class="coverPerLo">61.3&nbsp;%</td>
- <td class="coverNumLo">68 / 111</td>
+ <td class="coverPerLo">61.8&nbsp;%</td>
+ <td class="coverNumLo">68 / 110</td>
<td class="coverPerLo">69.2&nbsp;%</td>
<td class="coverNumLo">9 / 13</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="trace.c.gcov.html">trace.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="71.4%"><img src="../snow.png" width=29 height=10 alt="71.4%"></td></tr></table>
+ </td>
+ <td class="coverPerLo">71.4&nbsp;%</td>
+ <td class="coverNumLo">90 / 126</td>
+ <td class="coverPerLo">71.4&nbsp;%</td>
+ <td class="coverNumLo">5 / 7</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="opal-msg.c.gcov.html">opal-msg.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.1%"><img src="../snow.png" width=27 height=10 alt="73.1%"></td></tr></table>
@@ -154,18 +166,6 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="trace.c.gcov.html">trace.c</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=88 height=10 alt="88.2%"><img src="../snow.png" width=12 height=10 alt="88.2%"></td></tr></table>
- </td>
- <td class="coverPerMed">88.2&nbsp;%</td>
- <td class="coverNumMed">112 / 127</td>
- <td class="coverPerMed">85.7&nbsp;%</td>
- <td class="coverNumMed">6 / 7</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
<td class="coverFile"><a href="device.c.gcov.html">device.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="84.9%"><img src="../snow.png" width=15 height=10 alt="84.9%"></td></tr></table>
@@ -214,19 +214,19 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="console-log.c.gcov.html">console-log.c</a></td>
+ <td class="coverFile"><a href="flash-firmware-versions.c.gcov.html">flash-firmware-versions.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="85.3%"><img src="../snow.png" width=15 height=10 alt="85.3%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">21 / 21</td>
+ <td class="coverPerMed">85.3&nbsp;%</td>
+ <td class="coverNumMed">58 / 68</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="bitmap.c.gcov.html">bitmap.c</a></td>
+ <td class="coverFile"><a href="console-log.c.gcov.html">console-log.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -240,22 +240,22 @@
<tr>
<td class="coverFile"><a href="pool.c.gcov.html">pool.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="96.4%"><img src="../snow.png" width=4 height=10 alt="96.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="96.3%"><img src="../snow.png" width=4 height=10 alt="96.3%"></td></tr></table>
</td>
- <td class="coverPerHi">96.4&nbsp;%</td>
- <td class="coverNumHi">27 / 28</td>
+ <td class="coverPerHi">96.3&nbsp;%</td>
+ <td class="coverNumHi">26 / 27</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="flash-firmware-versions.c.gcov.html">flash-firmware-versions.c</a></td>
+ <td class="coverFile"><a href="bitmap.c.gcov.html">bitmap.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="85.3%"><img src="../snow.png" width=15 height=10 alt="85.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerMed">85.3&nbsp;%</td>
- <td class="coverNumMed">58 / 68</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">21 / 21</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
@@ -264,10 +264,10 @@
<tr>
<td class="coverFile"><a href="cpufeatures.c.gcov.html">cpufeatures.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="84.9%"><img src="../snow.png" width=15 height=10 alt="84.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=81 height=10 alt="81.4%"><img src="../snow.png" width=19 height=10 alt="81.4%"></td></tr></table>
</td>
- <td class="coverPerMed">84.9&nbsp;%</td>
- <td class="coverNumMed">118 / 139</td>
+ <td class="coverPerMed">81.4&nbsp;%</td>
+ <td class="coverNumMed">118 / 145</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/core/index-sort-l.html b/coverage-report/core/index-sort-l.html
index cb951e8..3f3f073 100644
--- a/coverage-report/core/index-sort-l.html
+++ b/coverage-report/core/index-sort-l.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">2002</td>
- <td class="headerCovTableEntry">2683</td>
- <td class="headerCovTableEntryLo">74.6 %</td>
+ <td class="headerCovTableEntry">1979</td>
+ <td class="headerCovTableEntry">2706</td>
+ <td class="headerCovTableEntryLo">73.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">186</td>
+ <td class="headerCovTableEntry">185</td>
<td class="headerCovTableEntry">227</td>
- <td class="headerCovTableEntryMed">81.9 %</td>
+ <td class="headerCovTableEntryMed">81.5 %</td>
</tr>
<tr>
<td></td>
@@ -87,7 +87,7 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 87</td>
+ <td class="coverNumLo">0 / 107</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumLo">0 / 8</td>
<td class="coverPerHi">-</td>
@@ -108,10 +108,10 @@
<tr>
<td class="coverFile"><a href="timer.c.gcov.html">timer.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=61 height=10 alt="61.3%"><img src="../snow.png" width=39 height=10 alt="61.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=62 height=10 alt="61.8%"><img src="../snow.png" width=38 height=10 alt="61.8%"></td></tr></table>
</td>
- <td class="coverPerLo">61.3&nbsp;%</td>
- <td class="coverNumLo">68 / 111</td>
+ <td class="coverPerLo">61.8&nbsp;%</td>
+ <td class="coverNumLo">68 / 110</td>
<td class="coverPerLo">69.2&nbsp;%</td>
<td class="coverNumLo">9 / 13</td>
<td class="coverPerHi">-</td>
@@ -154,6 +154,18 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="trace.c.gcov.html">trace.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="71.4%"><img src="../snow.png" width=29 height=10 alt="71.4%"></td></tr></table>
+ </td>
+ <td class="coverPerLo">71.4&nbsp;%</td>
+ <td class="coverNumLo">90 / 126</td>
+ <td class="coverPerLo">71.4&nbsp;%</td>
+ <td class="coverNumLo">5 / 7</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="opal-msg.c.gcov.html">opal-msg.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.1%"><img src="../snow.png" width=27 height=10 alt="73.1%"></td></tr></table>
@@ -180,10 +192,10 @@
<tr>
<td class="coverFile"><a href="cpufeatures.c.gcov.html">cpufeatures.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="84.9%"><img src="../snow.png" width=15 height=10 alt="84.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=81 height=10 alt="81.4%"><img src="../snow.png" width=19 height=10 alt="81.4%"></td></tr></table>
</td>
- <td class="coverPerMed">84.9&nbsp;%</td>
- <td class="coverNumMed">118 / 139</td>
+ <td class="coverPerMed">81.4&nbsp;%</td>
+ <td class="coverNumMed">118 / 145</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">-</td>
@@ -226,24 +238,12 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="trace.c.gcov.html">trace.c</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=88 height=10 alt="88.2%"><img src="../snow.png" width=12 height=10 alt="88.2%"></td></tr></table>
- </td>
- <td class="coverPerMed">88.2&nbsp;%</td>
- <td class="coverNumMed">112 / 127</td>
- <td class="coverPerMed">85.7&nbsp;%</td>
- <td class="coverNumMed">6 / 7</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
<td class="coverFile"><a href="pool.c.gcov.html">pool.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="96.4%"><img src="../snow.png" width=4 height=10 alt="96.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="96.3%"><img src="../snow.png" width=4 height=10 alt="96.3%"></td></tr></table>
</td>
- <td class="coverPerHi">96.4&nbsp;%</td>
- <td class="coverNumHi">27 / 28</td>
+ <td class="coverPerHi">96.3&nbsp;%</td>
+ <td class="coverNumHi">26 / 27</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/core/index.html b/coverage-report/core/index.html
index a6d0c60..1f351d6 100644
--- a/coverage-report/core/index.html
+++ b/coverage-report/core/index.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">2002</td>
- <td class="headerCovTableEntry">2683</td>
- <td class="headerCovTableEntryLo">74.6 %</td>
+ <td class="headerCovTableEntry">1979</td>
+ <td class="headerCovTableEntry">2706</td>
+ <td class="headerCovTableEntryLo">73.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">186</td>
+ <td class="headerCovTableEntry">185</td>
<td class="headerCovTableEntry">227</td>
- <td class="headerCovTableEntryMed">81.9 %</td>
+ <td class="headerCovTableEntryMed">81.5 %</td>
</tr>
<tr>
<td></td>
@@ -111,7 +111,7 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 87</td>
+ <td class="coverNumLo">0 / 107</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumLo">0 / 8</td>
<td class="coverPerHi">-</td>
@@ -132,10 +132,10 @@
<tr>
<td class="coverFile"><a href="cpufeatures.c.gcov.html">cpufeatures.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="84.9%"><img src="../snow.png" width=15 height=10 alt="84.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=81 height=10 alt="81.4%"><img src="../snow.png" width=19 height=10 alt="81.4%"></td></tr></table>
</td>
- <td class="coverPerMed">84.9&nbsp;%</td>
- <td class="coverNumMed">118 / 139</td>
+ <td class="coverPerMed">81.4&nbsp;%</td>
+ <td class="coverNumMed">118 / 145</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">-</td>
@@ -264,10 +264,10 @@
<tr>
<td class="coverFile"><a href="pool.c.gcov.html">pool.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="96.4%"><img src="../snow.png" width=4 height=10 alt="96.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="96.3%"><img src="../snow.png" width=4 height=10 alt="96.3%"></td></tr></table>
</td>
- <td class="coverPerHi">96.4&nbsp;%</td>
- <td class="coverNumHi">27 / 28</td>
+ <td class="coverPerHi">96.3&nbsp;%</td>
+ <td class="coverNumHi">26 / 27</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
@@ -288,10 +288,10 @@
<tr>
<td class="coverFile"><a href="timer.c.gcov.html">timer.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=61 height=10 alt="61.3%"><img src="../snow.png" width=39 height=10 alt="61.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=62 height=10 alt="61.8%"><img src="../snow.png" width=38 height=10 alt="61.8%"></td></tr></table>
</td>
- <td class="coverPerLo">61.3&nbsp;%</td>
- <td class="coverNumLo">68 / 111</td>
+ <td class="coverPerLo">61.8&nbsp;%</td>
+ <td class="coverNumLo">68 / 110</td>
<td class="coverPerLo">69.2&nbsp;%</td>
<td class="coverNumLo">9 / 13</td>
<td class="coverPerHi">-</td>
@@ -300,12 +300,12 @@
<tr>
<td class="coverFile"><a href="trace.c.gcov.html">trace.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=88 height=10 alt="88.2%"><img src="../snow.png" width=12 height=10 alt="88.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="71.4%"><img src="../snow.png" width=29 height=10 alt="71.4%"></td></tr></table>
</td>
- <td class="coverPerMed">88.2&nbsp;%</td>
- <td class="coverNumMed">112 / 127</td>
- <td class="coverPerMed">85.7&nbsp;%</td>
- <td class="coverNumMed">6 / 7</td>
+ <td class="coverPerLo">71.4&nbsp;%</td>
+ <td class="coverNumLo">90 / 126</td>
+ <td class="coverPerLo">71.4&nbsp;%</td>
+ <td class="coverNumLo">5 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/core/malloc.c.func-sort-c.html b/coverage-report/core/malloc.c.func-sort-c.html
index b4f0bac..46d6112 100644
--- a/coverage-report/core/malloc.c.func-sort-c.html
+++ b/coverage-report/core/malloc.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
@@ -78,15 +78,15 @@
</tr>
<tr>
<td class="coverFn"><a href="malloc.c.gcov.html#30">__free</a></td>
- <td class="coverFnHi">149</td>
+ <td class="coverFnHi">152</td>
</tr>
<tr>
<td class="coverFn"><a href="malloc.c.gcov.html#25">__malloc</a></td>
- <td class="coverFnHi">4311</td>
+ <td class="coverFnHi">4316</td>
</tr>
<tr>
<td class="coverFn"><a href="malloc.c.gcov.html#14">__memalign</a></td>
- <td class="coverFnHi">4311</td>
+ <td class="coverFnHi">4316</td>
</tr>
</table>
<br>
diff --git a/coverage-report/core/malloc.c.func.html b/coverage-report/core/malloc.c.func.html
index d4d633f..f3c9aea 100644
--- a/coverage-report/core/malloc.c.func.html
+++ b/coverage-report/core/malloc.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
@@ -70,15 +70,15 @@
</tr>
<tr>
<td class="coverFn"><a href="malloc.c.gcov.html#30">__free</a></td>
- <td class="coverFnHi">149</td>
+ <td class="coverFnHi">152</td>
</tr>
<tr>
<td class="coverFn"><a href="malloc.c.gcov.html#25">__malloc</a></td>
- <td class="coverFnHi">4311</td>
+ <td class="coverFnHi">4316</td>
</tr>
<tr>
<td class="coverFn"><a href="malloc.c.gcov.html#14">__memalign</a></td>
- <td class="coverFnHi">4311</td>
+ <td class="coverFnHi">4316</td>
</tr>
<tr>
<td class="coverFn"><a href="malloc.c.gcov.html#37">__realloc</a></td>
diff --git a/coverage-report/core/malloc.c.gcov.html b/coverage-report/core/malloc.c.gcov.html
index 60537aa..e2f0dac 100644
--- a/coverage-report/core/malloc.c.gcov.html
+++ b/coverage-report/core/malloc.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
@@ -84,28 +84,28 @@
<a name="13"><span class="lineNum"> 13 </span> : : </a>
<a name="14"><span class="lineNum"> 14 </span> : : #define DEFAULT_ALIGN __alignof__(long)</a>
<a name="15"><span class="lineNum"> 15 </span> : : </a>
-<a name="16"><span class="lineNum"> 16 </span> :<span class="lineCov"> 4311 : void *__memalign(size_t blocksize, size_t bytes, const char *location)</span></a>
+<a name="16"><span class="lineNum"> 16 </span> :<span class="lineCov"> 4316 : void *__memalign(size_t blocksize, size_t bytes, const char *location)</span></a>
<a name="17"><span class="lineNum"> 17 </span> : : {</a>
<a name="18"><span class="lineNum"> 18 </span> : : void *p;</a>
<a name="19"><span class="lineNum"> 19 </span> : : </a>
-<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 4311 : lock(&amp;skiboot_heap.free_list_lock);</span></a>
-<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 4311 : p = mem_alloc(&amp;skiboot_heap, bytes, blocksize, location);</span></a>
-<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 4311 : unlock(&amp;skiboot_heap.free_list_lock);</span></a>
+<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 4316 : lock(&amp;skiboot_heap.free_list_lock);</span></a>
+<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 4316 : p = mem_alloc(&amp;skiboot_heap, bytes, blocksize, location);</span></a>
+<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 4316 : unlock(&amp;skiboot_heap.free_list_lock);</span></a>
<a name="23"><span class="lineNum"> 23 </span> : : </a>
-<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 4311 : return p;</span></a>
+<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 4316 : return p;</span></a>
<a name="25"><span class="lineNum"> 25 </span> : : }</a>
<a name="26"><span class="lineNum"> 26 </span> : : </a>
-<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 4311 : void *__malloc(size_t bytes, const char *location)</span></a>
+<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 4316 : void *__malloc(size_t bytes, const char *location)</span></a>
<a name="28"><span class="lineNum"> 28 </span> : : {</a>
-<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 4311 : return __memalign(DEFAULT_ALIGN, bytes, location);</span></a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 4316 : return __memalign(DEFAULT_ALIGN, bytes, location);</span></a>
<a name="30"><span class="lineNum"> 30 </span> : : }</a>
<a name="31"><span class="lineNum"> 31 </span> : : </a>
-<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 149 : void __free(void *p, const char *location)</span></a>
+<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 152 : void __free(void *p, const char *location)</span></a>
<a name="33"><span class="lineNum"> 33 </span> : : {</a>
-<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 149 : lock(&amp;skiboot_heap.free_list_lock);</span></a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 149 : mem_free(&amp;skiboot_heap, p, location);</span></a>
-<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 149 : unlock(&amp;skiboot_heap.free_list_lock);</span></a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 149 : }</span></a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 152 : lock(&amp;skiboot_heap.free_list_lock);</span></a>
+<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 152 : mem_free(&amp;skiboot_heap, p, location);</span></a>
+<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 152 : unlock(&amp;skiboot_heap.free_list_lock);</span></a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 152 : }</span></a>
<a name="38"><span class="lineNum"> 38 </span> : : </a>
<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 9 : void *__realloc(void *ptr, size_t size, const char *location)</span></a>
<a name="40"><span class="lineNum"> 40 </span> : : {</a>
diff --git a/coverage-report/core/mem_region.c.func-sort-c.html b/coverage-report/core/mem_region.c.func-sort-c.html
index 496c643..ad949f9 100644
--- a/coverage-report/core/mem_region.c.func-sort-c.html
+++ b/coverage-report/core/mem_region.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">39</td>
@@ -157,10 +157,6 @@
<td class="coverFnHi">20</td>
</tr>
<tr>
- <td class="coverFn"><a href="mem_region.c.gcov.html#285">region_is_reservable</a></td>
- <td class="coverFnHi">24</td>
- </tr>
- <tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#826">mem_reserve</a></td>
<td class="coverFnHi">25</td>
</tr>
@@ -169,20 +165,24 @@
<td class="coverFnHi">25</td>
</tr>
<tr>
+ <td class="coverFn"><a href="mem_region.c.gcov.html#285">region_is_reservable</a></td>
+ <td class="coverFnHi">28</td>
+ </tr>
+ <tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#1023">mem_region_parse_reserved_nodes</a></td>
<td class="coverFnHi">40</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#701">split_region</a></td>
- <td class="coverFnHi">41</td>
+ <td class="coverFnHi">46</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#745">contains</a></td>
- <td class="coverFnHi">45</td>
+ <td class="coverFnHi">50</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#678">new_region</a></td>
- <td class="coverFnHi">100</td>
+ <td class="coverFnHi">105</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#290">region_is_reserved</a></td>
@@ -198,27 +198,27 @@
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#753">get_overlap</a></td>
- <td class="coverFnHi">165</td>
+ <td class="coverFnHi">168</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#500">mem_free</a></td>
- <td class="coverFnHi">299</td>
+ <td class="coverFnHi">297</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#717">intersects</a></td>
- <td class="coverFnHi">1170</td>
+ <td class="coverFnHi">1204</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#723">maybe_split</a></td>
- <td class="coverFnHi">1170</td>
+ <td class="coverFnHi">1204</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#739">overlaps</a></td>
- <td class="coverFnHi">1357</td>
+ <td class="coverFnHi">1399</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#143">mem_poison</a></td>
- <td class="coverFnHi">1672</td>
+ <td class="coverFnHi">1670</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#387">__mem_alloc</a></td>
@@ -234,11 +234,11 @@
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#173">make_free</a></td>
- <td class="coverFnHi">15898</td>
+ <td class="coverFnHi">15885</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#125">tailer</a></td>
- <td class="coverFnHi">30220</td>
+ <td class="coverFnHi">30205</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#526">mem_allocated_size</a></td>
@@ -250,7 +250,7 @@
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#588">mem_check</a></td>
- <td class="coverFnHi">131270</td>
+ <td class="coverFnHi">131260</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#241">discard_excess</a></td>
@@ -258,11 +258,11 @@
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#131">next_hdr</a></td>
- <td class="coverFnHi">308459</td>
+ <td class="coverFnHi">308416</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#119">region_start</a></td>
- <td class="coverFnHi">448552</td>
+ <td class="coverFnHi">448495</td>
</tr>
</table>
<br>
diff --git a/coverage-report/core/mem_region.c.func.html b/coverage-report/core/mem_region.c.func.html
index 4202e01..c41d84a 100644
--- a/coverage-report/core/mem_region.c.func.html
+++ b/coverage-report/core/mem_region.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">39</td>
@@ -94,7 +94,7 @@
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#745">contains</a></td>
- <td class="coverFnHi">45</td>
+ <td class="coverFnHi">50</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#241">discard_excess</a></td>
@@ -110,7 +110,7 @@
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#753">get_overlap</a></td>
- <td class="coverFnHi">165</td>
+ <td class="coverFnHi">168</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#262">hdr_location</a></td>
@@ -122,11 +122,11 @@
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#717">intersects</a></td>
- <td class="coverFnHi">1170</td>
+ <td class="coverFnHi">1204</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#173">make_free</a></td>
- <td class="coverFnHi">15898</td>
+ <td class="coverFnHi">15885</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#855">matches_chip_id</a></td>
@@ -134,7 +134,7 @@
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#723">maybe_split</a></td>
- <td class="coverFnHi">1170</td>
+ <td class="coverFnHi">1204</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#478">mem_alloc</a></td>
@@ -146,7 +146,7 @@
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#588">mem_check</a></td>
- <td class="coverFnHi">131270</td>
+ <td class="coverFnHi">131260</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#666">mem_check_all</a></td>
@@ -166,11 +166,11 @@
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#500">mem_free</a></td>
- <td class="coverFnHi">299</td>
+ <td class="coverFnHi">297</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#143">mem_poison</a></td>
- <td class="coverFnHi">1672</td>
+ <td class="coverFnHi">1670</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#932">mem_range_is_reserved</a></td>
@@ -226,19 +226,19 @@
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#678">new_region</a></td>
- <td class="coverFnHi">100</td>
+ <td class="coverFnHi">105</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#131">next_hdr</a></td>
- <td class="coverFnHi">308459</td>
+ <td class="coverFnHi">308416</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#739">overlaps</a></td>
- <td class="coverFnHi">1357</td>
+ <td class="coverFnHi">1399</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#285">region_is_reservable</a></td>
- <td class="coverFnHi">24</td>
+ <td class="coverFnHi">28</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#290">region_is_reserved</a></td>
@@ -246,11 +246,11 @@
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#119">region_start</a></td>
- <td class="coverFnHi">448552</td>
+ <td class="coverFnHi">448495</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#701">split_region</a></td>
- <td class="coverFnHi">41</td>
+ <td class="coverFnHi">46</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#1294">start_mem_region_clear_unused</a></td>
@@ -258,7 +258,7 @@
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#125">tailer</a></td>
- <td class="coverFnHi">30220</td>
+ <td class="coverFnHi">30205</td>
</tr>
<tr>
<td class="coverFn"><a href="mem_region.c.gcov.html#1394">wait_mem_region_clear_unused</a></td>
diff --git a/coverage-report/core/mem_region.c.gcov.html b/coverage-report/core/mem_region.c.gcov.html
index f3f8751..4f8abb5 100644
--- a/coverage-report/core/mem_region.c.gcov.html
+++ b/coverage-report/core/mem_region.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">39</td>
@@ -189,41 +189,41 @@
<a name="118"><span class="lineNum"> 118 </span> : : #define ALLOC_MIN_LONGS (sizeof(struct free_hdr) / sizeof(long) + 1)</a>
<a name="119"><span class="lineNum"> 119 </span> : : </a>
<a name="120"><span class="lineNum"> 120 </span> : : /* Avoid ugly casts. */</a>
-<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 448552 : static void *region_start(const struct mem_region *region)</span></a>
+<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 448495 : static void *region_start(const struct mem_region *region)</span></a>
<a name="122"><span class="lineNum"> 122 </span> : : {</a>
-<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 448552 : return (void *)(unsigned long)region-&gt;start;</span></a>
+<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 448495 : return (void *)(unsigned long)region-&gt;start;</span></a>
<a name="124"><span class="lineNum"> 124 </span> : : }</a>
<a name="125"><span class="lineNum"> 125 </span> : : </a>
<a name="126"><span class="lineNum"> 126 </span> : : /* Each free block has a tailer, so we can walk backwards. */</a>
-<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 30220 : static unsigned long *tailer(struct free_hdr *f)</span></a>
+<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 30205 : static unsigned long *tailer(struct free_hdr *f)</span></a>
<a name="128"><span class="lineNum"> 128 </span> : : {</a>
-<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 30220 : return (unsigned long *)f + f-&gt;hdr.num_longs - 1;</span></a>
+<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 30205 : return (unsigned long *)f + f-&gt;hdr.num_longs - 1;</span></a>
<a name="130"><span class="lineNum"> 130 </span> : : }</a>
<a name="131"><span class="lineNum"> 131 </span> : : </a>
<a name="132"><span class="lineNum"> 132 </span> : : /* This walks forward to the next hdr (or NULL if at the end). */</a>
-<a name="133"><span class="lineNum"> 133 </span> :<span class="lineCov"> 308459 : static struct alloc_hdr *next_hdr(const struct mem_region *region,</span></a>
+<a name="133"><span class="lineNum"> 133 </span> :<span class="lineCov"> 308416 : static struct alloc_hdr *next_hdr(const struct mem_region *region,</span></a>
<a name="134"><span class="lineNum"> 134 </span> : : const struct alloc_hdr *hdr)</a>
<a name="135"><span class="lineNum"> 135 </span> : : {</a>
<a name="136"><span class="lineNum"> 136 </span> : : void *next;</a>
<a name="137"><span class="lineNum"> 137 </span> : : </a>
-<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 308459 : next = ((unsigned long *)hdr + hdr-&gt;num_longs);</span></a>
-<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 308459 : if (next &gt;= region_start(region) + region-&gt;len)</span></a>
-<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 157942 : next = NULL;</span></a>
-<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 308459 : return next;</span></a>
+<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 308416 : next = ((unsigned long *)hdr + hdr-&gt;num_longs);</span></a>
+<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 308416 : if (next &gt;= region_start(region) + region-&gt;len)</span></a>
+<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 157924 : next = NULL;</span></a>
+<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 308416 : return next;</span></a>
<a name="142"><span class="lineNum"> 142 </span> : : }</a>
<a name="143"><span class="lineNum"> 143 </span> : : </a>
<a name="144"><span class="lineNum"> 144 </span> : : #if POISON_MEM_REGION == 1</a>
-<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 1672 : static void mem_poison(struct free_hdr *f)</span></a>
+<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 1670 : static void mem_poison(struct free_hdr *f)</span></a>
<a name="146"><span class="lineNum"> 146 </span> : : {</a>
-<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 1672 : size_t poison_size = (void*)tailer(f) - (void*)(f+1);</span></a>
+<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 1670 : size_t poison_size = (void*)tailer(f) - (void*)(f+1);</span></a>
<a name="148"><span class="lineNum"> 148 </span> : : </a>
<a name="149"><span class="lineNum"> 149 </span> : : /* We only poison up to a limit, as otherwise boot is</a>
<a name="150"><span class="lineNum"> 150 </span> : : * kinda slow */</a>
-<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 1672 : if (poison_size &gt; POISON_MEM_REGION_LIMIT)</span></a>
+<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 1670 : if (poison_size &gt; POISON_MEM_REGION_LIMIT)</span></a>
<a name="152"><span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : poison_size = POISON_MEM_REGION_LIMIT;</span></a>
<a name="153"><span class="lineNum"> 153 </span> : : </a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 1672 : memset(f+1, POISON_MEM_REGION_WITH, poison_size);</span></a>
-<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 1672 : }</span></a>
+<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 1670 : memset(f+1, POISON_MEM_REGION_WITH, poison_size);</span></a>
+<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 1670 : }</span></a>
<a name="156"><span class="lineNum"> 156 </span> : : #endif</a>
<a name="157"><span class="lineNum"> 157 </span> : : </a>
<a name="158"><span class="lineNum"> 158 </span> : : /* Creates free block covering entire region. */</a>
@@ -243,70 +243,70 @@
<a name="172"><span class="lineNum"> 172 </span> : : #endif</a>
<a name="173"><span class="lineNum"> 173 </span> :<span class="lineCov"> 8 : }</span></a>
<a name="174"><span class="lineNum"> 174 </span> : : </a>
-<a name="175"><span class="lineNum"> 175 </span> :<span class="lineCov"> 15898 : static void make_free(struct mem_region *region, struct free_hdr *f,</span></a>
+<a name="175"><span class="lineNum"> 175 </span> :<span class="lineCov"> 15885 : static void make_free(struct mem_region *region, struct free_hdr *f,</span></a>
<a name="176"><span class="lineNum"> 176 </span> : : const char *location, bool skip_poison)</a>
<a name="177"><span class="lineNum"> 177 </span> : : {</a>
<a name="178"><span class="lineNum"> 178 </span> : : struct alloc_hdr *next;</a>
<a name="179"><span class="lineNum"> 179 </span> : : </a>
<a name="180"><span class="lineNum"> 180 </span> : : #if POISON_MEM_REGION == 1</a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 15898 : if (!skip_poison)</span></a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 1664 : mem_poison(f);</span></a>
+<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 15885 : if (!skip_poison)</span></a>
+<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 1662 : mem_poison(f);</span></a>
<a name="183"><span class="lineNum"> 183 </span> : : #else</a>
<a name="184"><span class="lineNum"> 184 </span> : : (void)skip_poison;</a>
<a name="185"><span class="lineNum"> 185 </span> : : #endif</a>
<a name="186"><span class="lineNum"> 186 </span> : : </a>
-<a name="187"><span class="lineNum"> 187 </span> :<span class="lineCov"> 15898 : if (f-&gt;hdr.prev_free) {</span></a>
+<a name="187"><span class="lineNum"> 187 </span> :<span class="lineCov"> 15885 : if (f-&gt;hdr.prev_free) {</span></a>
<a name="188"><span class="lineNum"> 188 </span> : : struct free_hdr *prev;</a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 1650 : unsigned long *prev_tailer = (unsigned long *)f - 1;</span></a>
+<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 1641 : unsigned long *prev_tailer = (unsigned long *)f - 1;</span></a>
<a name="190"><span class="lineNum"> 190 </span> : : </a>
-<a name="191"><span class="lineNum"> 191 </span> :<span class="lineCov"> 1650 : assert(*prev_tailer);</span></a>
-<a name="192"><span class="lineNum"> 192 </span> :<span class="lineCov"> 1650 : prev = (void *)((unsigned long *)f - *prev_tailer);</span></a>
-<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 1650 : assert(prev-&gt;hdr.free);</span></a>
-<a name="194"><span class="lineNum"> 194 </span> :<span class="lineCov"> 1650 : assert(!prev-&gt;hdr.prev_free);</span></a>
+<a name="191"><span class="lineNum"> 191 </span> :<span class="lineCov"> 1641 : assert(*prev_tailer);</span></a>
+<a name="192"><span class="lineNum"> 192 </span> :<span class="lineCov"> 1641 : prev = (void *)((unsigned long *)f - *prev_tailer);</span></a>
+<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 1641 : assert(prev-&gt;hdr.free);</span></a>
+<a name="194"><span class="lineNum"> 194 </span> :<span class="lineCov"> 1641 : assert(!prev-&gt;hdr.prev_free);</span></a>
<a name="195"><span class="lineNum"> 195 </span> : : </a>
<a name="196"><span class="lineNum"> 196 </span> : : /* Expand to cover the one we just freed. */</a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 1650 : prev-&gt;hdr.num_longs += f-&gt;hdr.num_longs;</span></a>
-<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 1650 : f = prev;</span></a>
+<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 1641 : prev-&gt;hdr.num_longs += f-&gt;hdr.num_longs;</span></a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 1641 : f = prev;</span></a>
<a name="199"><span class="lineNum"> 199 </span> : : } else {</a>
-<a name="200"><span class="lineNum"> 200 </span> :<span class="lineCov"> 14248 : f-&gt;hdr.free = true;</span></a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 14248 : f-&gt;hdr.location = location;</span></a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineCov"> 14248 : list_add(&amp;region-&gt;free_list, &amp;f-&gt;list);</span></a>
+<a name="200"><span class="lineNum"> 200 </span> :<span class="lineCov"> 14244 : f-&gt;hdr.free = true;</span></a>
+<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 14244 : f-&gt;hdr.location = location;</span></a>
+<a name="202"><span class="lineNum"> 202 </span> :<span class="lineCov"> 14244 : list_add(&amp;region-&gt;free_list, &amp;f-&gt;list);</span></a>
<a name="203"><span class="lineNum"> 203 </span> : : }</a>
<a name="204"><span class="lineNum"> 204 </span> : : </a>
<a name="205"><span class="lineNum"> 205 </span> : : /* Fix up tailer. */</a>
-<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 15898 : *tailer(f) = f-&gt;hdr.num_longs;</span></a>
+<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 15885 : *tailer(f) = f-&gt;hdr.num_longs;</span></a>
<a name="207"><span class="lineNum"> 207 </span> : : </a>
<a name="208"><span class="lineNum"> 208 </span> : : /* If next is free, coalesce it */</a>
-<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 15898 : next = next_hdr(region, &amp;f-&gt;hdr);</span></a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 15898 : if (next) {</span></a>
-<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 1787 : next-&gt;prev_free = true;</span></a>
-<a name="212"><span class="lineNum"> 212 </span> :<span class="lineCov"> 1787 : if (next-&gt;free) {</span></a>
-<a name="213"><span class="lineNum"> 213 </span> :<span class="lineCov"> 1600 : struct free_hdr *next_free = (void *)next;</span></a>
-<a name="214"><span class="lineNum"> 214 </span> :<span class="lineCov"> 1600 : list_del_from(&amp;region-&gt;free_list, &amp;next_free-&gt;list);</span></a>
+<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 15885 : next = next_hdr(region, &amp;f-&gt;hdr);</span></a>
+<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 15885 : if (next) {</span></a>
+<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 1780 : next-&gt;prev_free = true;</span></a>
+<a name="212"><span class="lineNum"> 212 </span> :<span class="lineCov"> 1780 : if (next-&gt;free) {</span></a>
+<a name="213"><span class="lineNum"> 213 </span> :<span class="lineCov"> 1596 : struct free_hdr *next_free = (void *)next;</span></a>
+<a name="214"><span class="lineNum"> 214 </span> :<span class="lineCov"> 1596 : list_del_from(&amp;region-&gt;free_list, &amp;next_free-&gt;list);</span></a>
<a name="215"><span class="lineNum"> 215 </span> : : /* Maximum of one level of recursion */</a>
-<a name="216"><span class="lineNum"> 216 </span> :<span class="lineCov"> 1600 : make_free(region, next_free, location, true);</span></a>
+<a name="216"><span class="lineNum"> 216 </span> :<span class="lineCov"> 1596 : make_free(region, next_free, location, true);</span></a>
<a name="217"><span class="lineNum"> 217 </span> : : }</a>
<a name="218"><span class="lineNum"> 218 </span> : : }</a>
-<a name="219"><span class="lineNum"> 219 </span> :<span class="lineCov"> 15898 : }</span></a>
+<a name="219"><span class="lineNum"> 219 </span> :<span class="lineCov"> 15885 : }</span></a>
<a name="220"><span class="lineNum"> 220 </span> : : </a>
<a name="221"><span class="lineNum"> 221 </span> : : /* Can we fit this many longs with this alignment in this free block? */</a>
<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 4469 : static bool fits(struct free_hdr *f, size_t longs, size_t align, size_t *offset)</span></a>
<a name="223"><span class="lineNum"> 223 </span> : : {</a>
<a name="224"><span class="lineNum"> 224 </span> :<span class="lineCov"> 4469 : *offset = 0;</span></a>
<a name="225"><span class="lineNum"> 225 </span> : : </a>
-<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 61396 : while (f-&gt;hdr.num_longs &gt;= *offset + longs) {</span></a>
+<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 17329 : while (f-&gt;hdr.num_longs &gt;= *offset + longs) {</span></a>
<a name="227"><span class="lineNum"> 227 </span> : : size_t addr;</a>
<a name="228"><span class="lineNum"> 228 </span> : : </a>
-<a name="229"><span class="lineNum"> 229 </span> :<span class="lineCov"> 61384 : addr = (unsigned long)f</span></a>
-<a name="230"><span class="lineNum"> 230 </span> :<span class="lineCov"> 61384 : + (*offset + ALLOC_HDR_LONGS) * sizeof(long);</span></a>
-<a name="231"><span class="lineNum"> 231 </span> :<span class="lineCov"> 61384 : if ((addr &amp; (align - 1)) == 0)</span></a>
+<a name="229"><span class="lineNum"> 229 </span> :<span class="lineCov"> 17317 : addr = (unsigned long)f</span></a>
+<a name="230"><span class="lineNum"> 230 </span> :<span class="lineCov"> 17317 : + (*offset + ALLOC_HDR_LONGS) * sizeof(long);</span></a>
+<a name="231"><span class="lineNum"> 231 </span> :<span class="lineCov"> 17317 : if ((addr &amp; (align - 1)) == 0)</span></a>
<a name="232"><span class="lineNum"> 232 </span> :<span class="lineCov"> 4457 : return true;</span></a>
<a name="233"><span class="lineNum"> 233 </span> : : </a>
<a name="234"><span class="lineNum"> 234 </span> : : /* Don't make tiny chunks! */</a>
-<a name="235"><span class="lineNum"> 235 </span> :<span class="lineCov"> 56927 : if (*offset == 0)</span></a>
-<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 19 : *offset = ALLOC_MIN_LONGS;</span></a>
+<a name="235"><span class="lineNum"> 235 </span> :<span class="lineCov"> 12860 : if (*offset == 0)</span></a>
+<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 14 : *offset = ALLOC_MIN_LONGS;</span></a>
<a name="237"><span class="lineNum"> 237 </span> : : else</a>
-<a name="238"><span class="lineNum"> 238 </span> :<span class="lineCov"> 56908 : (*offset)++;</span></a>
+<a name="238"><span class="lineNum"> 238 </span> :<span class="lineCov"> 12846 : (*offset)++;</span></a>
<a name="239"><span class="lineNum"> 239 </span> : : }</a>
<a name="240"><span class="lineNum"> 240 </span> :<span class="lineCov"> 12 : return false;</span></a>
<a name="241"><span class="lineNum"> 241 </span> : : }</a>
@@ -320,15 +320,15 @@
<a name="249"><span class="lineNum"> 249 </span> : : struct free_hdr *post;</a>
<a name="250"><span class="lineNum"> 250 </span> : : </a>
<a name="251"><span class="lineNum"> 251 </span> : : /* Set up post block. */</a>
-<a name="252"><span class="lineNum"> 252 </span> :<span class="lineCov"> 13982 : post = (void *)hdr + alloc_longs * sizeof(long);</span></a>
-<a name="253"><span class="lineNum"> 253 </span> :<span class="lineCov"> 13982 : post-&gt;hdr.num_longs = hdr-&gt;num_longs - alloc_longs;</span></a>
-<a name="254"><span class="lineNum"> 254 </span> :<span class="lineCov"> 13982 : post-&gt;hdr.prev_free = false;</span></a>
+<a name="252"><span class="lineNum"> 252 </span> :<span class="lineCov"> 13980 : post = (void *)hdr + alloc_longs * sizeof(long);</span></a>
+<a name="253"><span class="lineNum"> 253 </span> :<span class="lineCov"> 13980 : post-&gt;hdr.num_longs = hdr-&gt;num_longs - alloc_longs;</span></a>
+<a name="254"><span class="lineNum"> 254 </span> :<span class="lineCov"> 13980 : post-&gt;hdr.prev_free = false;</span></a>
<a name="255"><span class="lineNum"> 255 </span> : : </a>
<a name="256"><span class="lineNum"> 256 </span> : : /* Trim our block. */</a>
-<a name="257"><span class="lineNum"> 257 </span> :<span class="lineCov"> 13982 : hdr-&gt;num_longs = alloc_longs;</span></a>
+<a name="257"><span class="lineNum"> 257 </span> :<span class="lineCov"> 13980 : hdr-&gt;num_longs = alloc_longs;</span></a>
<a name="258"><span class="lineNum"> 258 </span> : : </a>
<a name="259"><span class="lineNum"> 259 </span> : : /* This coalesces as required. */</a>
-<a name="260"><span class="lineNum"> 260 </span> :<span class="lineCov"> 13982 : make_free(region, post, location, skip_poison);</span></a>
+<a name="260"><span class="lineNum"> 260 </span> :<span class="lineCov"> 13980 : make_free(region, post, location, skip_poison);</span></a>
<a name="261"><span class="lineNum"> 261 </span> : : }</a>
<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 135502 : }</span></a>
<a name="263"><span class="lineNum"> 263 </span> : : </a>
@@ -355,9 +355,9 @@
<a name="284"><span class="lineNum"> 284 </span> :<span class="lineNoCov"> 0 : abort();</span></a>
<a name="285"><span class="lineNum"> 285 </span> : : }</a>
<a name="286"><span class="lineNum"> 286 </span> : : </a>
-<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 24 : static bool region_is_reservable(struct mem_region *region)</span></a>
+<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 28 : static bool region_is_reservable(struct mem_region *region)</span></a>
<a name="288"><span class="lineNum"> 288 </span> : : {</a>
-<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 24 : return region-&gt;type != REGION_OS;</span></a>
+<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 28 : return region-&gt;type != REGION_OS;</span></a>
<a name="290"><span class="lineNum"> 290 </span> : : }</a>
<a name="291"><span class="lineNum"> 291 </span> : : </a>
<a name="292"><span class="lineNum"> 292 </span> :<span class="lineCov"> 128 : static bool region_is_reserved(struct mem_region *region)</span></a>
@@ -492,7 +492,7 @@
<a name="421"><span class="lineNum"> 421 </span> : : </a>
<a name="422"><span class="lineNum"> 422 </span> : : /* Can't be too small for when we free it, either. */</a>
<a name="423"><span class="lineNum"> 423 </span> :<span class="lineCov"> 4459 : if (alloc_longs &lt; ALLOC_MIN_LONGS)</span></a>
-<a name="424"><span class="lineNum"> 424 </span> :<span class="lineCov"> 179 : alloc_longs = ALLOC_MIN_LONGS;</span></a>
+<a name="424"><span class="lineNum"> 424 </span> :<span class="lineCov"> 174 : alloc_longs = ALLOC_MIN_LONGS;</span></a>
<a name="425"><span class="lineNum"> 425 </span> : : </a>
<a name="426"><span class="lineNum"> 426 </span> : : /* Walk free list. */</a>
<a name="427"><span class="lineNum"> 427 </span> :<span class="lineCov"> 4471 : list_for_each(&amp;region-&gt;free_list, f, list) {</span></a>
@@ -514,28 +514,28 @@
<a name="443"><span class="lineNum"> 443 </span> : : </a>
<a name="444"><span class="lineNum"> 444 </span> :<span class="lineCov"> 4457 : next = next_hdr(region, &amp;f-&gt;hdr);</span></a>
<a name="445"><span class="lineNum"> 445 </span> :<span class="lineCov"> 4457 : if (next) {</span></a>
-<a name="446"><span class="lineNum"> 446 </span> :<span class="lineCov"> 63 : assert(next-&gt;prev_free);</span></a>
-<a name="447"><span class="lineNum"> 447 </span> :<span class="lineCov"> 63 : next-&gt;prev_free = false;</span></a>
+<a name="446"><span class="lineNum"> 446 </span> :<span class="lineCov"> 65 : assert(next-&gt;prev_free);</span></a>
+<a name="447"><span class="lineNum"> 447 </span> :<span class="lineCov"> 65 : next-&gt;prev_free = false;</span></a>
<a name="448"><span class="lineNum"> 448 </span> : : }</a>
<a name="449"><span class="lineNum"> 449 </span> : : </a>
<a name="450"><span class="lineNum"> 450 </span> :<span class="lineCov"> 4457 : if (offset != 0) {</span></a>
-<a name="451"><span class="lineNum"> 451 </span> :<span class="lineCov"> 18 : struct free_hdr *pre = f;</span></a>
+<a name="451"><span class="lineNum"> 451 </span> :<span class="lineCov"> 13 : struct free_hdr *pre = f;</span></a>
<a name="452"><span class="lineNum"> 452 </span> : : </a>
-<a name="453"><span class="lineNum"> 453 </span> :<span class="lineCov"> 18 : f = (void *)f + offset * sizeof(long);</span></a>
-<a name="454"><span class="lineNum"> 454 </span> :<span class="lineCov"> 18 : assert(f &gt;= pre + 1);</span></a>
+<a name="453"><span class="lineNum"> 453 </span> :<span class="lineCov"> 13 : f = (void *)f + offset * sizeof(long);</span></a>
+<a name="454"><span class="lineNum"> 454 </span> :<span class="lineCov"> 13 : assert(f &gt;= pre + 1);</span></a>
<a name="455"><span class="lineNum"> 455 </span> : : </a>
<a name="456"><span class="lineNum"> 456 </span> : : /* Set up new header. */</a>
-<a name="457"><span class="lineNum"> 457 </span> :<span class="lineCov"> 18 : f-&gt;hdr.num_longs = pre-&gt;hdr.num_longs - offset;</span></a>
+<a name="457"><span class="lineNum"> 457 </span> :<span class="lineCov"> 13 : f-&gt;hdr.num_longs = pre-&gt;hdr.num_longs - offset;</span></a>
<a name="458"><span class="lineNum"> 458 </span> : : /* f-&gt;hdr.prev_free will be set by make_free below. */</a>
-<a name="459"><span class="lineNum"> 459 </span> :<span class="lineCov"> 18 : f-&gt;hdr.free = false;</span></a>
-<a name="460"><span class="lineNum"> 460 </span> :<span class="lineCov"> 18 : f-&gt;hdr.location = location;</span></a>
+<a name="459"><span class="lineNum"> 459 </span> :<span class="lineCov"> 13 : f-&gt;hdr.free = false;</span></a>
+<a name="460"><span class="lineNum"> 460 </span> :<span class="lineCov"> 13 : f-&gt;hdr.location = location;</span></a>
<a name="461"><span class="lineNum"> 461 </span> : : </a>
<a name="462"><span class="lineNum"> 462 </span> : : /* Fix up old header. */</a>
-<a name="463"><span class="lineNum"> 463 </span> :<span class="lineCov"> 18 : pre-&gt;hdr.num_longs = offset;</span></a>
-<a name="464"><span class="lineNum"> 464 </span> :<span class="lineCov"> 18 : pre-&gt;hdr.prev_free = false;</span></a>
+<a name="463"><span class="lineNum"> 463 </span> :<span class="lineCov"> 13 : pre-&gt;hdr.num_longs = offset;</span></a>
+<a name="464"><span class="lineNum"> 464 </span> :<span class="lineCov"> 13 : pre-&gt;hdr.prev_free = false;</span></a>
<a name="465"><span class="lineNum"> 465 </span> : : </a>
<a name="466"><span class="lineNum"> 466 </span> : : /* This coalesces as required. */</a>
-<a name="467"><span class="lineNum"> 467 </span> :<span class="lineCov"> 18 : make_free(region, pre, location, true);</span></a>
+<a name="467"><span class="lineNum"> 467 </span> :<span class="lineCov"> 13 : make_free(region, pre, location, true);</span></a>
<a name="468"><span class="lineNum"> 468 </span> : : }</a>
<a name="469"><span class="lineNum"> 469 </span> : : </a>
<a name="470"><span class="lineNum"> 470 </span> : : /* We might be too long; put the rest back. */</a>
@@ -570,30 +570,30 @@
<a name="499"><span class="lineNum"> 499 </span> :<span class="lineCov"> 4 : return NULL;</span></a>
<a name="500"><span class="lineNum"> 500 </span> : : }</a>
<a name="501"><span class="lineNum"> 501 </span> : : </a>
-<a name="502"><span class="lineNum"> 502 </span> :<span class="lineCov"> 299 : void mem_free(struct mem_region *region, void *mem, const char *location)</span></a>
+<a name="502"><span class="lineNum"> 502 </span> :<span class="lineCov"> 297 : void mem_free(struct mem_region *region, void *mem, const char *location)</span></a>
<a name="503"><span class="lineNum"> 503 </span> : : {</a>
<a name="504"><span class="lineNum"> 504 </span> : : struct alloc_hdr *hdr;</a>
<a name="505"><span class="lineNum"> 505 </span> : : </a>
<a name="506"><span class="lineNum"> 506 </span> : : /* This should be a constant. */</a>
<a name="507"><span class="lineNum"> 507 </span> :<span class="lineNoCov"> 0 : assert(is_rodata(location));</span></a>
<a name="508"><span class="lineNum"> 508 </span> : : </a>
-<a name="509"><span class="lineNum"> 509 </span> :<span class="lineCov"> 299 : assert(lock_held_by_me(&amp;region-&gt;free_list_lock));</span></a>
+<a name="509"><span class="lineNum"> 509 </span> :<span class="lineCov"> 297 : assert(lock_held_by_me(&amp;region-&gt;free_list_lock));</span></a>
<a name="510"><span class="lineNum"> 510 </span> : : </a>
<a name="511"><span class="lineNum"> 511 </span> : : /* Freeing NULL is always a noop. */</a>
-<a name="512"><span class="lineNum"> 512 </span> :<span class="lineCov"> 299 : if (!mem)</span></a>
+<a name="512"><span class="lineNum"> 512 </span> :<span class="lineCov"> 297 : if (!mem)</span></a>
<a name="513"><span class="lineNum"> 513 </span> :<span class="lineCov"> 1 : return;</span></a>
<a name="514"><span class="lineNum"> 514 </span> : : </a>
<a name="515"><span class="lineNum"> 515 </span> : : /* Your memory is in the region, right? */</a>
-<a name="516"><span class="lineNum"> 516 </span> :<span class="lineCov"> 298 : assert(mem &gt;= region_start(region) + sizeof(*hdr));</span></a>
-<a name="517"><span class="lineNum"> 517 </span> :<span class="lineCov"> 298 : assert(mem &lt; region_start(region) + region-&gt;len);</span></a>
+<a name="516"><span class="lineNum"> 516 </span> :<span class="lineCov"> 296 : assert(mem &gt;= region_start(region) + sizeof(*hdr));</span></a>
+<a name="517"><span class="lineNum"> 517 </span> :<span class="lineCov"> 296 : assert(mem &lt; region_start(region) + region-&gt;len);</span></a>
<a name="518"><span class="lineNum"> 518 </span> : : </a>
<a name="519"><span class="lineNum"> 519 </span> : : /* Grab header. */</a>
-<a name="520"><span class="lineNum"> 520 </span> :<span class="lineCov"> 298 : hdr = mem - sizeof(*hdr);</span></a>
+<a name="520"><span class="lineNum"> 520 </span> :<span class="lineCov"> 296 : hdr = mem - sizeof(*hdr);</span></a>
<a name="521"><span class="lineNum"> 521 </span> : : </a>
-<a name="522"><span class="lineNum"> 522 </span> :<span class="lineCov"> 298 : if (hdr-&gt;free)</span></a>
+<a name="522"><span class="lineNum"> 522 </span> :<span class="lineCov"> 296 : if (hdr-&gt;free)</span></a>
<a name="523"><span class="lineNum"> 523 </span> :<span class="lineNoCov"> 0 : bad_header(region, hdr, &quot;re-freed&quot;, location);</span></a>
<a name="524"><span class="lineNum"> 524 </span> : : </a>
-<a name="525"><span class="lineNum"> 525 </span> :<span class="lineCov"> 298 : make_free(region, (struct free_hdr *)hdr, location, false);</span></a>
+<a name="525"><span class="lineNum"> 525 </span> :<span class="lineCov"> 296 : make_free(region, (struct free_hdr *)hdr, location, false);</span></a>
<a name="526"><span class="lineNum"> 526 </span> : : }</a>
<a name="527"><span class="lineNum"> 527 </span> : : </a>
<a name="528"><span class="lineNum"> 528 </span> :<span class="lineCov"> 65539 : size_t mem_allocated_size(const void *ptr)</span></a>
@@ -658,49 +658,49 @@
<a name="587"><span class="lineNum"> 587 </span> :<span class="lineCov"> 8185 : return true;</span></a>
<a name="588"><span class="lineNum"> 588 </span> : : }</a>
<a name="589"><span class="lineNum"> 589 </span> : : </a>
-<a name="590"><span class="lineNum"> 590 </span> :<span class="lineCov"> 131270 : bool mem_check(const struct mem_region *region)</span></a>
+<a name="590"><span class="lineNum"> 590 </span> :<span class="lineCov"> 131260 : bool mem_check(const struct mem_region *region)</span></a>
<a name="591"><span class="lineNum"> 591 </span> : : {</a>
-<a name="592"><span class="lineNum"> 592 </span> :<span class="lineCov"> 131270 : size_t frees = 0;</span></a>
-<a name="593"><span class="lineNum"> 593 </span> :<span class="lineCov"> 131270 : struct alloc_hdr *hdr, *prev_free = NULL;</span></a>
+<a name="592"><span class="lineNum"> 592 </span> :<span class="lineCov"> 131260 : size_t frees = 0;</span></a>
+<a name="593"><span class="lineNum"> 593 </span> :<span class="lineCov"> 131260 : struct alloc_hdr *hdr, *prev_free = NULL;</span></a>
<a name="594"><span class="lineNum"> 594 </span> : : struct free_hdr *f;</a>
<a name="595"><span class="lineNum"> 595 </span> : : </a>
<a name="596"><span class="lineNum"> 596 </span> : : /* Check it's sanely aligned. */</a>
-<a name="597"><span class="lineNum"> 597 </span> :<span class="lineCov"> 131270 : if (region-&gt;start % sizeof(long)) {</span></a>
+<a name="597"><span class="lineNum"> 597 </span> :<span class="lineCov"> 131260 : if (region-&gt;start % sizeof(long)) {</span></a>
<a name="598"><span class="lineNum"> 598 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Region '%s' not sanely aligned (%llx)\n&quot;,</span></a>
<a name="599"><span class="lineNum"> 599 </span> : : region-&gt;name, (unsigned long long)region-&gt;start);</a>
<a name="600"><span class="lineNum"> 600 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
<a name="601"><span class="lineNum"> 601 </span> : : }</a>
-<a name="602"><span class="lineNum"> 602 </span> :<span class="lineCov"> 131270 : if ((long)region-&gt;len % sizeof(long)) {</span></a>
+<a name="602"><span class="lineNum"> 602 </span> :<span class="lineCov"> 131260 : if ((long)region-&gt;len % sizeof(long)) {</span></a>
<a name="603"><span class="lineNum"> 603 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Region '%s' not sane length (%llu)\n&quot;,</span></a>
<a name="604"><span class="lineNum"> 604 </span> : : region-&gt;name, (unsigned long long)region-&gt;len);</a>
<a name="605"><span class="lineNum"> 605 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
<a name="606"><span class="lineNum"> 606 </span> : : }</a>
<a name="607"><span class="lineNum"> 607 </span> : : </a>
<a name="608"><span class="lineNum"> 608 </span> : : /* Not ours to play with, or empty? Don't do anything. */</a>
-<a name="609"><span class="lineNum"> 609 </span> :<span class="lineCov"> 131270 : if (!(region-&gt;type == REGION_MEMORY ||</span></a>
-<a name="610"><span class="lineNum"> 610 </span> :<span class="lineCov"> 131263 : region-&gt;type == REGION_SKIBOOT_HEAP) ||</span></a>
-<a name="611"><span class="lineNum"> 611 </span> :<span class="lineCov"> 131252 : region-&gt;free_list.n.next == NULL)</span></a>
+<a name="609"><span class="lineNum"> 609 </span> :<span class="lineCov"> 131260 : if (!(region-&gt;type == REGION_MEMORY ||</span></a>
+<a name="610"><span class="lineNum"> 610 </span> :<span class="lineCov"> 131253 : region-&gt;type == REGION_SKIBOOT_HEAP) ||</span></a>
+<a name="611"><span class="lineNum"> 611 </span> :<span class="lineCov"> 131242 : region-&gt;free_list.n.next == NULL)</span></a>
<a name="612"><span class="lineNum"> 612 </span> :<span class="lineCov"> 30 : return true;</span></a>
<a name="613"><span class="lineNum"> 613 </span> : : </a>
<a name="614"><span class="lineNum"> 614 </span> : : /* Walk linearly. */</a>
-<a name="615"><span class="lineNum"> 615 </span> :<span class="lineCov"> 402800 : for (hdr = region_start(region); hdr; hdr = next_hdr(region, hdr)) {</span></a>
-<a name="616"><span class="lineNum"> 616 </span> :<span class="lineCov"> 271560 : if (hdr-&gt;num_longs &lt; ALLOC_MIN_LONGS) {</span></a>
+<a name="615"><span class="lineNum"> 615 </span> :<span class="lineCov"> 402760 : for (hdr = region_start(region); hdr; hdr = next_hdr(region, hdr)) {</span></a>
+<a name="616"><span class="lineNum"> 616 </span> :<span class="lineCov"> 271530 : if (hdr-&gt;num_longs &lt; ALLOC_MIN_LONGS) {</span></a>
<a name="617"><span class="lineNum"> 617 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Region '%s' %s %p (%s) size %zu\n&quot;,</span></a>
<a name="618"><span class="lineNum"> 618 </span> : : region-&gt;name, hdr-&gt;free ? &quot;free&quot; : &quot;alloc&quot;,</a>
<a name="619"><span class="lineNum"> 619 </span> : : hdr, hdr_location(hdr),</a>
<a name="620"><span class="lineNum"> 620 </span> : : hdr-&gt;num_longs * sizeof(long));</a>
<a name="621"><span class="lineNum"> 621 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
<a name="622"><span class="lineNum"> 622 </span> : : }</a>
-<a name="623"><span class="lineNum"> 623 </span> :<span class="lineCov"> 271560 : if ((unsigned long)hdr + hdr-&gt;num_longs * sizeof(long) &gt;</span></a>
-<a name="624"><span class="lineNum"> 624 </span> :<span class="lineCov"> 271560 : region-&gt;start + region-&gt;len) {</span></a>
+<a name="623"><span class="lineNum"> 623 </span> :<span class="lineCov"> 271530 : if ((unsigned long)hdr + hdr-&gt;num_longs * sizeof(long) &gt;</span></a>
+<a name="624"><span class="lineNum"> 624 </span> :<span class="lineCov"> 271530 : region-&gt;start + region-&gt;len) {</span></a>
<a name="625"><span class="lineNum"> 625 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Region '%s' %s %p (%s) oversize %zu\n&quot;,</span></a>
<a name="626"><span class="lineNum"> 626 </span> : : region-&gt;name, hdr-&gt;free ? &quot;free&quot; : &quot;alloc&quot;,</a>
<a name="627"><span class="lineNum"> 627 </span> : : hdr, hdr_location(hdr),</a>
<a name="628"><span class="lineNum"> 628 </span> : : hdr-&gt;num_longs * sizeof(long));</a>
<a name="629"><span class="lineNum"> 629 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
<a name="630"><span class="lineNum"> 630 </span> : : }</a>
-<a name="631"><span class="lineNum"> 631 </span> :<span class="lineCov"> 271560 : if (hdr-&gt;free) {</span></a>
-<a name="632"><span class="lineNum"> 632 </span> :<span class="lineCov"> 131188 : if (hdr-&gt;prev_free || prev_free) {</span></a>
+<a name="631"><span class="lineNum"> 631 </span> :<span class="lineCov"> 271530 : if (hdr-&gt;free) {</span></a>
+<a name="632"><span class="lineNum"> 632 </span> :<span class="lineCov"> 131173 : if (hdr-&gt;prev_free || prev_free) {</span></a>
<a name="633"><span class="lineNum"> 633 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Region '%s' free %p (%s) has prev_free&quot;</span></a>
<a name="634"><span class="lineNum"> 634 </span> : : &quot; %p (%s) %sset?\n&quot;,</a>
<a name="635"><span class="lineNum"> 635 </span> : : region-&gt;name, hdr, hdr_location(hdr),</a>
@@ -710,30 +710,30 @@
<a name="639"><span class="lineNum"> 639 </span> : : hdr-&gt;prev_free ? &quot;&quot; : &quot;un&quot;);</a>
<a name="640"><span class="lineNum"> 640 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
<a name="641"><span class="lineNum"> 641 </span> : : }</a>
-<a name="642"><span class="lineNum"> 642 </span> :<span class="lineCov"> 131188 : prev_free = hdr;</span></a>
-<a name="643"><span class="lineNum"> 643 </span> :<span class="lineCov"> 131188 : frees ^= (unsigned long)hdr - region-&gt;start;</span></a>
+<a name="642"><span class="lineNum"> 642 </span> :<span class="lineCov"> 131173 : prev_free = hdr;</span></a>
+<a name="643"><span class="lineNum"> 643 </span> :<span class="lineCov"> 131173 : frees ^= (unsigned long)hdr - region-&gt;start;</span></a>
<a name="644"><span class="lineNum"> 644 </span> : : } else {</a>
-<a name="645"><span class="lineNum"> 645 </span> :<span class="lineCov"> 140372 : if (hdr-&gt;prev_free != (bool)prev_free) {</span></a>
+<a name="645"><span class="lineNum"> 645 </span> :<span class="lineCov"> 140357 : if (hdr-&gt;prev_free != (bool)prev_free) {</span></a>
<a name="646"><span class="lineNum"> 646 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Region '%s' alloc %p (%s) has&quot;</span></a>
<a name="647"><span class="lineNum"> 647 </span> : : &quot; prev_free %p %sset?\n&quot;,</a>
<a name="648"><span class="lineNum"> 648 </span> : : region-&gt;name, hdr, hdr_location(hdr),</a>
<a name="649"><span class="lineNum"> 649 </span> : : prev_free, hdr-&gt;prev_free ? &quot;&quot; : &quot;un&quot;);</a>
<a name="650"><span class="lineNum"> 650 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
<a name="651"><span class="lineNum"> 651 </span> : : }</a>
-<a name="652"><span class="lineNum"> 652 </span> :<span class="lineCov"> 140372 : prev_free = NULL;</span></a>
+<a name="652"><span class="lineNum"> 652 </span> :<span class="lineCov"> 140357 : prev_free = NULL;</span></a>
<a name="653"><span class="lineNum"> 653 </span> : : }</a>
<a name="654"><span class="lineNum"> 654 </span> : : }</a>
<a name="655"><span class="lineNum"> 655 </span> : : </a>
<a name="656"><span class="lineNum"> 656 </span> : : /* Now walk free list. */</a>
-<a name="657"><span class="lineNum"> 657 </span> :<span class="lineCov"> 262428 : list_for_each(&amp;region-&gt;free_list, f, list)</span></a>
-<a name="658"><span class="lineNum"> 658 </span> :<span class="lineCov"> 131188 : frees ^= (unsigned long)f - region-&gt;start;</span></a>
+<a name="657"><span class="lineNum"> 657 </span> :<span class="lineCov"> 262403 : list_for_each(&amp;region-&gt;free_list, f, list)</span></a>
+<a name="658"><span class="lineNum"> 658 </span> :<span class="lineCov"> 131173 : frees ^= (unsigned long)f - region-&gt;start;</span></a>
<a name="659"><span class="lineNum"> 659 </span> : : </a>
-<a name="660"><span class="lineNum"> 660 </span> :<span class="lineCov"> 131240 : if (frees) {</span></a>
+<a name="660"><span class="lineNum"> 660 </span> :<span class="lineCov"> 131230 : if (frees) {</span></a>
<a name="661"><span class="lineNum"> 661 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Region '%s' free list and walk do not match!\n&quot;,</span></a>
<a name="662"><span class="lineNum"> 662 </span> : : region-&gt;name);</a>
<a name="663"><span class="lineNum"> 663 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
<a name="664"><span class="lineNum"> 664 </span> : : }</a>
-<a name="665"><span class="lineNum"> 665 </span> :<span class="lineCov"> 131240 : return true;</span></a>
+<a name="665"><span class="lineNum"> 665 </span> :<span class="lineCov"> 131230 : return true;</span></a>
<a name="666"><span class="lineNum"> 666 </span> : : }</a>
<a name="667"><span class="lineNum"> 667 </span> : : </a>
<a name="668"><span class="lineNum"> 668 </span> :<span class="lineNoCov"> 0 : bool mem_check_all(void)</span></a>
@@ -748,88 +748,88 @@
<a name="677"><span class="lineNum"> 677 </span> :<span class="lineNoCov"> 0 : return true;</span></a>
<a name="678"><span class="lineNum"> 678 </span> : : }</a>
<a name="679"><span class="lineNum"> 679 </span> : : </a>
-<a name="680"><span class="lineNum"> 680 </span> :<span class="lineCov"> 100 : static struct mem_region *new_region(const char *name,</span></a>
+<a name="680"><span class="lineNum"> 680 </span> :<span class="lineCov"> 105 : static struct mem_region *new_region(const char *name,</span></a>
<a name="681"><span class="lineNum"> 681 </span> : : uint64_t start, uint64_t len,</a>
<a name="682"><span class="lineNum"> 682 </span> : : struct dt_node *node,</a>
<a name="683"><span class="lineNum"> 683 </span> : : enum mem_region_type type)</a>
<a name="684"><span class="lineNum"> 684 </span> : : {</a>
<a name="685"><span class="lineNum"> 685 </span> : : struct mem_region *region;</a>
<a name="686"><span class="lineNum"> 686 </span> : : </a>
-<a name="687"><span class="lineNum"> 687 </span> :<span class="lineCov"> 100 : region = malloc(sizeof(*region));</span></a>
-<a name="688"><span class="lineNum"> 688 </span> :<span class="lineCov"> 100 : if (!region)</span></a>
+<a name="687"><span class="lineNum"> 687 </span> :<span class="lineCov"> 105 : region = malloc(sizeof(*region));</span></a>
+<a name="688"><span class="lineNum"> 688 </span> :<span class="lineCov"> 105 : if (!region)</span></a>
<a name="689"><span class="lineNum"> 689 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
<a name="690"><span class="lineNum"> 690 </span> : : </a>
-<a name="691"><span class="lineNum"> 691 </span> :<span class="lineCov"> 100 : region-&gt;name = name;</span></a>
-<a name="692"><span class="lineNum"> 692 </span> :<span class="lineCov"> 100 : region-&gt;start = start;</span></a>
-<a name="693"><span class="lineNum"> 693 </span> :<span class="lineCov"> 100 : region-&gt;len = len;</span></a>
-<a name="694"><span class="lineNum"> 694 </span> :<span class="lineCov"> 100 : region-&gt;node = node;</span></a>
-<a name="695"><span class="lineNum"> 695 </span> :<span class="lineCov"> 100 : region-&gt;type = type;</span></a>
-<a name="696"><span class="lineNum"> 696 </span> :<span class="lineCov"> 100 : region-&gt;free_list.n.next = NULL;</span></a>
-<a name="697"><span class="lineNum"> 697 </span> :<span class="lineCov"> 100 : init_lock(&amp;region-&gt;free_list_lock);</span></a>
+<a name="691"><span class="lineNum"> 691 </span> :<span class="lineCov"> 105 : region-&gt;name = name;</span></a>
+<a name="692"><span class="lineNum"> 692 </span> :<span class="lineCov"> 105 : region-&gt;start = start;</span></a>
+<a name="693"><span class="lineNum"> 693 </span> :<span class="lineCov"> 105 : region-&gt;len = len;</span></a>
+<a name="694"><span class="lineNum"> 694 </span> :<span class="lineCov"> 105 : region-&gt;node = node;</span></a>
+<a name="695"><span class="lineNum"> 695 </span> :<span class="lineCov"> 105 : region-&gt;type = type;</span></a>
+<a name="696"><span class="lineNum"> 696 </span> :<span class="lineCov"> 105 : region-&gt;free_list.n.next = NULL;</span></a>
+<a name="697"><span class="lineNum"> 697 </span> :<span class="lineCov"> 105 : init_lock(&amp;region-&gt;free_list_lock);</span></a>
<a name="698"><span class="lineNum"> 698 </span> : : </a>
-<a name="699"><span class="lineNum"> 699 </span> :<span class="lineCov"> 100 : return region;</span></a>
+<a name="699"><span class="lineNum"> 699 </span> :<span class="lineCov"> 105 : return region;</span></a>
<a name="700"><span class="lineNum"> 700 </span> : : }</a>
<a name="701"><span class="lineNum"> 701 </span> : : </a>
<a name="702"><span class="lineNum"> 702 </span> : : /* We always split regions, so we only have to replace one. */</a>
-<a name="703"><span class="lineNum"> 703 </span> :<span class="lineCov"> 41 : static struct mem_region *split_region(struct mem_region *head,</span></a>
+<a name="703"><span class="lineNum"> 703 </span> :<span class="lineCov"> 46 : static struct mem_region *split_region(struct mem_region *head,</span></a>
<a name="704"><span class="lineNum"> 704 </span> : : uint64_t split_at,</a>
<a name="705"><span class="lineNum"> 705 </span> : : enum mem_region_type type)</a>
<a name="706"><span class="lineNum"> 706 </span> : : {</a>
<a name="707"><span class="lineNum"> 707 </span> : : struct mem_region *tail;</a>
-<a name="708"><span class="lineNum"> 708 </span> :<span class="lineCov"> 41 : uint64_t end = head-&gt;start + head-&gt;len;</span></a>
+<a name="708"><span class="lineNum"> 708 </span> :<span class="lineCov"> 46 : uint64_t end = head-&gt;start + head-&gt;len;</span></a>
<a name="709"><span class="lineNum"> 709 </span> : : </a>
-<a name="710"><span class="lineNum"> 710 </span> :<span class="lineCov"> 41 : tail = new_region(head-&gt;name, split_at, end - split_at,</span></a>
+<a name="710"><span class="lineNum"> 710 </span> :<span class="lineCov"> 46 : tail = new_region(head-&gt;name, split_at, end - split_at,</span></a>
<a name="711"><span class="lineNum"> 711 </span> : : head-&gt;node, type);</a>
<a name="712"><span class="lineNum"> 712 </span> : : /* Original region becomes head. */</a>
-<a name="713"><span class="lineNum"> 713 </span> :<span class="lineCov"> 41 : if (tail)</span></a>
-<a name="714"><span class="lineNum"> 714 </span> :<span class="lineCov"> 41 : head-&gt;len -= tail-&gt;len;</span></a>
+<a name="713"><span class="lineNum"> 713 </span> :<span class="lineCov"> 46 : if (tail)</span></a>
+<a name="714"><span class="lineNum"> 714 </span> :<span class="lineCov"> 46 : head-&gt;len -= tail-&gt;len;</span></a>
<a name="715"><span class="lineNum"> 715 </span> : : </a>
-<a name="716"><span class="lineNum"> 716 </span> :<span class="lineCov"> 41 : return tail;</span></a>
+<a name="716"><span class="lineNum"> 716 </span> :<span class="lineCov"> 46 : return tail;</span></a>
<a name="717"><span class="lineNum"> 717 </span> : : }</a>
<a name="718"><span class="lineNum"> 718 </span> : : </a>
-<a name="719"><span class="lineNum"> 719 </span> :<span class="lineCov"> 1170 : static bool intersects(const struct mem_region *region, uint64_t addr)</span></a>
+<a name="719"><span class="lineNum"> 719 </span> :<span class="lineCov"> 1204 : static bool intersects(const struct mem_region *region, uint64_t addr)</span></a>
<a name="720"><span class="lineNum"> 720 </span> : : {</a>
-<a name="721"><span class="lineNum"> 721 </span> :<span class="lineCov"> 1699 : return addr &gt; region-&gt;start &amp;&amp;</span></a>
-<a name="722"><span class="lineNum"> 722 </span> :<span class="lineCov"> 529 : addr &lt; region-&gt;start + region-&gt;len;</span></a>
+<a name="721"><span class="lineNum"> 721 </span> :<span class="lineCov"> 1710 : return addr &gt; region-&gt;start &amp;&amp;</span></a>
+<a name="722"><span class="lineNum"> 722 </span> :<span class="lineCov"> 506 : addr &lt; region-&gt;start + region-&gt;len;</span></a>
<a name="723"><span class="lineNum"> 723 </span> : : }</a>
<a name="724"><span class="lineNum"> 724 </span> : : </a>
-<a name="725"><span class="lineNum"> 725 </span> :<span class="lineCov"> 1170 : static bool maybe_split(struct mem_region *r, uint64_t split_at)</span></a>
+<a name="725"><span class="lineNum"> 725 </span> :<span class="lineCov"> 1204 : static bool maybe_split(struct mem_region *r, uint64_t split_at)</span></a>
<a name="726"><span class="lineNum"> 726 </span> : : {</a>
<a name="727"><span class="lineNum"> 727 </span> : : struct mem_region *tail;</a>
<a name="728"><span class="lineNum"> 728 </span> : : </a>
-<a name="729"><span class="lineNum"> 729 </span> :<span class="lineCov"> 1170 : if (!intersects(r, split_at))</span></a>
-<a name="730"><span class="lineNum"> 730 </span> :<span class="lineCov"> 1130 : return true;</span></a>
+<a name="729"><span class="lineNum"> 729 </span> :<span class="lineCov"> 1204 : if (!intersects(r, split_at))</span></a>
+<a name="730"><span class="lineNum"> 730 </span> :<span class="lineCov"> 1159 : return true;</span></a>
<a name="731"><span class="lineNum"> 731 </span> : : </a>
-<a name="732"><span class="lineNum"> 732 </span> :<span class="lineCov"> 40 : tail = split_region(r, split_at, r-&gt;type);</span></a>
-<a name="733"><span class="lineNum"> 733 </span> :<span class="lineCov"> 40 : if (!tail)</span></a>
+<a name="732"><span class="lineNum"> 732 </span> :<span class="lineCov"> 45 : tail = split_region(r, split_at, r-&gt;type);</span></a>
+<a name="733"><span class="lineNum"> 733 </span> :<span class="lineCov"> 45 : if (!tail)</span></a>
<a name="734"><span class="lineNum"> 734 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
<a name="735"><span class="lineNum"> 735 </span> : : </a>
<a name="736"><span class="lineNum"> 736 </span> : : /* Tail add is important: we may need to split again! */</a>
-<a name="737"><span class="lineNum"> 737 </span> :<span class="lineCov"> 40 : list_add_after(&amp;regions, &amp;tail-&gt;list, &amp;r-&gt;list);</span></a>
-<a name="738"><span class="lineNum"> 738 </span> :<span class="lineCov"> 40 : return true;</span></a>
+<a name="737"><span class="lineNum"> 737 </span> :<span class="lineCov"> 45 : list_add_after(&amp;regions, &amp;r-&gt;list, &amp;tail-&gt;list);</span></a>
+<a name="738"><span class="lineNum"> 738 </span> :<span class="lineCov"> 45 : return true;</span></a>
<a name="739"><span class="lineNum"> 739 </span> : : }</a>
<a name="740"><span class="lineNum"> 740 </span> : : </a>
-<a name="741"><span class="lineNum"> 741 </span> :<span class="lineCov"> 1357 : static bool overlaps(const struct mem_region *r1, const struct mem_region *r2)</span></a>
+<a name="741"><span class="lineNum"> 741 </span> :<span class="lineCov"> 1399 : static bool overlaps(const struct mem_region *r1, const struct mem_region *r2)</span></a>
<a name="742"><span class="lineNum"> 742 </span> : : {</a>
-<a name="743"><span class="lineNum"> 743 </span> :<span class="lineCov"> 1357 : return (r1-&gt;start + r1-&gt;len &gt; r2-&gt;start</span></a>
-<a name="744"><span class="lineNum"> 744 </span> :<span class="lineCov"> 1357 : &amp;&amp; r1-&gt;start &lt; r2-&gt;start + r2-&gt;len);</span></a>
+<a name="743"><span class="lineNum"> 743 </span> :<span class="lineCov"> 1399 : return (r1-&gt;start + r1-&gt;len &gt; r2-&gt;start</span></a>
+<a name="744"><span class="lineNum"> 744 </span> :<span class="lineCov"> 1399 : &amp;&amp; r1-&gt;start &lt; r2-&gt;start + r2-&gt;len);</span></a>
<a name="745"><span class="lineNum"> 745 </span> : : }</a>
<a name="746"><span class="lineNum"> 746 </span> : : </a>
-<a name="747"><span class="lineNum"> 747 </span> :<span class="lineCov"> 45 : static bool contains(const struct mem_region *r1, const struct mem_region *r2)</span></a>
+<a name="747"><span class="lineNum"> 747 </span> :<span class="lineCov"> 50 : static bool contains(const struct mem_region *r1, const struct mem_region *r2)</span></a>
<a name="748"><span class="lineNum"> 748 </span> : : {</a>
-<a name="749"><span class="lineNum"> 749 </span> :<span class="lineCov"> 45 : u64 r1_end = r1-&gt;start + r1-&gt;len;</span></a>
-<a name="750"><span class="lineNum"> 750 </span> :<span class="lineCov"> 45 : u64 r2_end = r2-&gt;start + r2-&gt;len;</span></a>
+<a name="749"><span class="lineNum"> 749 </span> :<span class="lineCov"> 50 : u64 r1_end = r1-&gt;start + r1-&gt;len;</span></a>
+<a name="750"><span class="lineNum"> 750 </span> :<span class="lineCov"> 50 : u64 r2_end = r2-&gt;start + r2-&gt;len;</span></a>
<a name="751"><span class="lineNum"> 751 </span> : : </a>
-<a name="752"><span class="lineNum"> 752 </span> :<span class="lineCov"> 45 : return (r1-&gt;start &lt;= r2-&gt;start &amp;&amp; r2_end &lt;= r1_end);</span></a>
+<a name="752"><span class="lineNum"> 752 </span> :<span class="lineCov"> 50 : return (r1-&gt;start &lt;= r2-&gt;start &amp;&amp; r2_end &lt;= r1_end);</span></a>
<a name="753"><span class="lineNum"> 753 </span> : : }</a>
<a name="754"><span class="lineNum"> 754 </span> : : </a>
-<a name="755"><span class="lineNum"> 755 </span> :<span class="lineCov"> 165 : static struct mem_region *get_overlap(const struct mem_region *region)</span></a>
+<a name="755"><span class="lineNum"> 755 </span> :<span class="lineCov"> 168 : static struct mem_region *get_overlap(const struct mem_region *region)</span></a>
<a name="756"><span class="lineNum"> 756 </span> : : {</a>
<a name="757"><span class="lineNum"> 757 </span> : : struct mem_region *i;</a>
<a name="758"><span class="lineNum"> 758 </span> : : </a>
-<a name="759"><span class="lineNum"> 759 </span> :<span class="lineCov"> 817 : list_for_each(&amp;regions, i, list) {</span></a>
-<a name="760"><span class="lineNum"> 760 </span> :<span class="lineCov"> 682 : if (overlaps(region, i))</span></a>
-<a name="761"><span class="lineNum"> 761 </span> :<span class="lineCov"> 30 : return i;</span></a>
+<a name="759"><span class="lineNum"> 759 </span> :<span class="lineCov"> 842 : list_for_each(&amp;regions, i, list) {</span></a>
+<a name="760"><span class="lineNum"> 760 </span> :<span class="lineCov"> 707 : if (overlaps(region, i))</span></a>
+<a name="761"><span class="lineNum"> 761 </span> :<span class="lineCov"> 33 : return i;</span></a>
<a name="762"><span class="lineNum"> 762 </span> : : }</a>
<a name="763"><span class="lineNum"> 763 </span> :<span class="lineCov"> 135 : return NULL;</span></a>
<a name="764"><span class="lineNum"> 764 </span> : : }</a>
@@ -838,11 +838,11 @@
<a name="767"><span class="lineNum"> 767 </span> : : {</a>
<a name="768"><span class="lineNum"> 768 </span> : : struct mem_region *r;</a>
<a name="769"><span class="lineNum"> 769 </span> : : </a>
-<a name="770"><span class="lineNum"> 770 </span> :<span class="lineCov"> 410 : list_for_each(&amp;regions, r, list) {</span></a>
-<a name="771"><span class="lineNum"> 771 </span> :<span class="lineCov"> 384 : if (r-&gt;start &lt; region-&gt;start)</span></a>
-<a name="772"><span class="lineNum"> 772 </span> :<span class="lineCov"> 252 : continue;</span></a>
+<a name="770"><span class="lineNum"> 770 </span> :<span class="lineCov"> 397 : list_for_each(&amp;regions, r, list) {</span></a>
+<a name="771"><span class="lineNum"> 771 </span> :<span class="lineCov"> 371 : if (r-&gt;start &lt; region-&gt;start)</span></a>
+<a name="772"><span class="lineNum"> 772 </span> :<span class="lineCov"> 239 : continue;</span></a>
<a name="773"><span class="lineNum"> 773 </span> : : </a>
-<a name="774"><span class="lineNum"> 774 </span> :<span class="lineCov"> 132 : list_add_before(&amp;regions, &amp;region-&gt;list, &amp;r-&gt;list);</span></a>
+<a name="774"><span class="lineNum"> 774 </span> :<span class="lineCov"> 132 : list_add_before(&amp;regions, &amp;r-&gt;list, &amp;region-&gt;list);</span></a>
<a name="775"><span class="lineNum"> 775 </span> :<span class="lineCov"> 132 : return;</span></a>
<a name="776"><span class="lineNum"> 776 </span> : : }</a>
<a name="777"><span class="lineNum"> 777 </span> :<span class="lineCov"> 26 : list_add_tail(&amp;regions, &amp;region-&gt;list);</span></a>
@@ -859,7 +859,7 @@
<a name="788"><span class="lineNum"> 788 </span> : : }</a>
<a name="789"><span class="lineNum"> 789 </span> : : </a>
<a name="790"><span class="lineNum"> 790 </span> : : /* First split any regions which intersect. */</a>
-<a name="791"><span class="lineNum"> 791 </span> :<span class="lineCov"> 720 : list_for_each(&amp;regions, r, list) {</span></a>
+<a name="791"><span class="lineNum"> 791 </span> :<span class="lineCov"> 737 : list_for_each(&amp;regions, r, list) {</span></a>
<a name="792"><span class="lineNum"> 792 </span> : : /*</a>
<a name="793"><span class="lineNum"> 793 </span> : : * The new region should be fully contained by an existing one.</a>
<a name="794"><span class="lineNum"> 794 </span> : : * If it's not then we have a problem where reservations</a>
@@ -868,7 +868,7 @@
<a name="797"><span class="lineNum"> 797 </span> : : * NB: There *might* be situations where this is legitimate,</a>
<a name="798"><span class="lineNum"> 798 </span> : : * but the region handling does not currently support this.</a>
<a name="799"><span class="lineNum"> 799 </span> : : */</a>
-<a name="800"><span class="lineNum"> 800 </span> :<span class="lineCov"> 585 : if (overlaps(r, region) &amp;&amp; !contains(r, region)) {</span></a>
+<a name="800"><span class="lineNum"> 800 </span> :<span class="lineCov"> 602 : if (overlaps(r, region) &amp;&amp; !contains(r, region)) {</span></a>
<a name="801"><span class="lineNum"> 801 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MEM: Partial overlap detected between regions:\n&quot;);</span></a>
<a name="802"><span class="lineNum"> 802 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MEM: %s [0x%&quot;PRIx64&quot;-0x%&quot;PRIx64&quot;] (new)\n&quot;,</span></a>
<a name="803"><span class="lineNum"> 803 </span> : : region-&gt;name, region-&gt;start,</a>
@@ -878,17 +878,17 @@
<a name="807"><span class="lineNum"> 807 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
<a name="808"><span class="lineNum"> 808 </span> : : }</a>
<a name="809"><span class="lineNum"> 809 </span> : : </a>
-<a name="810"><span class="lineNum"> 810 </span> :<span class="lineCov"> 585 : if (!maybe_split(r, region-&gt;start) ||</span></a>
-<a name="811"><span class="lineNum"> 811 </span> :<span class="lineCov"> 585 : !maybe_split(r, region-&gt;start + region-&gt;len))</span></a>
+<a name="810"><span class="lineNum"> 810 </span> :<span class="lineCov"> 602 : if (!maybe_split(r, region-&gt;start) ||</span></a>
+<a name="811"><span class="lineNum"> 811 </span> :<span class="lineCov"> 602 : !maybe_split(r, region-&gt;start + region-&gt;len))</span></a>
<a name="812"><span class="lineNum"> 812 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
<a name="813"><span class="lineNum"> 813 </span> : : }</a>
<a name="814"><span class="lineNum"> 814 </span> : : </a>
<a name="815"><span class="lineNum"> 815 </span> : : /* Now we have only whole overlaps, if any. */</a>
-<a name="816"><span class="lineNum"> 816 </span> :<span class="lineCov"> 165 : while ((r = get_overlap(region)) != NULL) {</span></a>
-<a name="817"><span class="lineNum"> 817 </span> :<span class="lineCov"> 30 : assert(r-&gt;start == region-&gt;start);</span></a>
-<a name="818"><span class="lineNum"> 818 </span> :<span class="lineCov"> 30 : assert(r-&gt;len == region-&gt;len);</span></a>
-<a name="819"><span class="lineNum"> 819 </span> :<span class="lineCov"> 30 : list_del_from(&amp;regions, &amp;r-&gt;list);</span></a>
-<a name="820"><span class="lineNum"> 820 </span> :<span class="lineCov"> 30 : free(r);</span></a>
+<a name="816"><span class="lineNum"> 816 </span> :<span class="lineCov"> 168 : while ((r = get_overlap(region)) != NULL) {</span></a>
+<a name="817"><span class="lineNum"> 817 </span> :<span class="lineCov"> 33 : assert(r-&gt;start == region-&gt;start);</span></a>
+<a name="818"><span class="lineNum"> 818 </span> :<span class="lineCov"> 33 : assert(r-&gt;len == region-&gt;len);</span></a>
+<a name="819"><span class="lineNum"> 819 </span> :<span class="lineCov"> 33 : list_del_from(&amp;regions, &amp;r-&gt;list);</span></a>
+<a name="820"><span class="lineNum"> 820 </span> :<span class="lineCov"> 33 : free(r);</span></a>
<a name="821"><span class="lineNum"> 821 </span> : : }</a>
<a name="822"><span class="lineNum"> 822 </span> : : </a>
<a name="823"><span class="lineNum"> 823 </span> : : /* Finally, add in our own region. */</a>
@@ -1261,13 +1261,13 @@
<a name="1190"><span class="lineNum"> 1190 </span> :<span class="lineCov"> 5 : assert(!mem_regions_finalised);</span></a>
<a name="1191"><span class="lineNum"> 1191 </span> : : </a>
<a name="1192"><span class="lineNum"> 1192 </span> :<span class="lineCov"> 5 : prlog(PR_INFO, &quot;Releasing unused memory:\n&quot;);</span></a>
-<a name="1193"><span class="lineNum"> 1193 </span> :<span class="lineCov"> 53 : list_for_each(&amp;regions, r, list) {</span></a>
+<a name="1193"><span class="lineNum"> 1193 </span> :<span class="lineCov"> 55 : list_for_each(&amp;regions, r, list) {</span></a>
<a name="1194"><span class="lineNum"> 1194 </span> : : uint64_t used_len;</a>
<a name="1195"><span class="lineNum"> 1195 </span> : : </a>
<a name="1196"><span class="lineNum"> 1196 </span> : : /* If it's not allocatable, ignore it. */</a>
-<a name="1197"><span class="lineNum"> 1197 </span> :<span class="lineCov"> 48 : if (!(r-&gt;type == REGION_SKIBOOT_HEAP ||</span></a>
-<a name="1198"><span class="lineNum"> 1198 </span> :<span class="lineCov"> 43 : r-&gt;type == REGION_MEMORY))</span></a>
-<a name="1199"><span class="lineNum"> 1199 </span> :<span class="lineCov"> 32 : continue;</span></a>
+<a name="1197"><span class="lineNum"> 1197 </span> :<span class="lineCov"> 50 : if (!(r-&gt;type == REGION_SKIBOOT_HEAP ||</span></a>
+<a name="1198"><span class="lineNum"> 1198 </span> :<span class="lineCov"> 45 : r-&gt;type == REGION_MEMORY))</span></a>
+<a name="1199"><span class="lineNum"> 1199 </span> :<span class="lineCov"> 34 : continue;</span></a>
<a name="1200"><span class="lineNum"> 1200 </span> : : </a>
<a name="1201"><span class="lineNum"> 1201 </span> :<span class="lineCov"> 16 : used_len = allocated_length(r);</span></a>
<a name="1202"><span class="lineNum"> 1202 </span> : : </a>
@@ -1561,9 +1561,9 @@
<a name="1490"><span class="lineNum"> 1490 </span> : : /* First pass, create /reserved-memory/ nodes for each reservation,</a>
<a name="1491"><span class="lineNum"> 1491 </span> : : * and calculate the length for the /reserved-names and</a>
<a name="1492"><span class="lineNum"> 1492 </span> : : * /reserved-ranges properties */</a>
-<a name="1493"><span class="lineNum"> 1493 </span> :<span class="lineCov"> 13 : list_for_each(&amp;regions, region, list) {</span></a>
-<a name="1494"><span class="lineNum"> 1494 </span> :<span class="lineCov"> 12 : if (!region_is_reservable(region))</span></a>
-<a name="1495"><span class="lineNum"> 1495 </span> :<span class="lineCov"> 4 : continue;</span></a>
+<a name="1493"><span class="lineNum"> 1493 </span> :<span class="lineCov"> 15 : list_for_each(&amp;regions, region, list) {</span></a>
+<a name="1494"><span class="lineNum"> 1494 </span> :<span class="lineCov"> 14 : if (!region_is_reservable(region))</span></a>
+<a name="1495"><span class="lineNum"> 1495 </span> :<span class="lineCov"> 6 : continue;</span></a>
<a name="1496"><span class="lineNum"> 1496 </span> : : </a>
<a name="1497"><span class="lineNum"> 1497 </span> :<span class="lineCov"> 8 : prlog(PR_INFO, &quot; 0x%012llx..%012llx : %s\n&quot;,</span></a>
<a name="1498"><span class="lineNum"> 1498 </span> : : (long long)region-&gt;start,</a>
@@ -1582,9 +1582,9 @@
<a name="1511"><span class="lineNum"> 1511 </span> : : </a>
<a name="1512"><span class="lineNum"> 1512 </span> : : /* Second pass: populate the old-style reserved-names and</a>
<a name="1513"><span class="lineNum"> 1513 </span> : : * reserved-regions arrays based on the node data */</a>
-<a name="1514"><span class="lineNum"> 1514 </span> :<span class="lineCov"> 13 : list_for_each(&amp;regions, region, list) {</span></a>
-<a name="1515"><span class="lineNum"> 1515 </span> :<span class="lineCov"> 12 : if (!region_is_reservable(region))</span></a>
-<a name="1516"><span class="lineNum"> 1516 </span> :<span class="lineCov"> 4 : continue;</span></a>
+<a name="1514"><span class="lineNum"> 1514 </span> :<span class="lineCov"> 15 : list_for_each(&amp;regions, region, list) {</span></a>
+<a name="1515"><span class="lineNum"> 1515 </span> :<span class="lineCov"> 14 : if (!region_is_reservable(region))</span></a>
+<a name="1516"><span class="lineNum"> 1516 </span> :<span class="lineCov"> 6 : continue;</span></a>
<a name="1517"><span class="lineNum"> 1517 </span> : : </a>
<a name="1518"><span class="lineNum"> 1518 </span> :<span class="lineCov"> 8 : len = strlen(region-&gt;node-&gt;name) + 1;</span></a>
<a name="1519"><span class="lineNum"> 1519 </span> :<span class="lineCov"> 8 : memcpy(name, region-&gt;node-&gt;name, len);</span></a>
diff --git a/coverage-report/core/nvram-format.c.func-sort-c.html b/coverage-report/core/nvram-format.c.func-sort-c.html
index a5ea216..79fb325 100644
--- a/coverage-report/core/nvram-format.c.func-sort-c.html
+++ b/coverage-report/core/nvram-format.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/core/nvram-format.c.func.html b/coverage-report/core/nvram-format.c.func.html
index 8eb7cef..227645f 100644
--- a/coverage-report/core/nvram-format.c.func.html
+++ b/coverage-report/core/nvram-format.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/core/nvram-format.c.gcov.html b/coverage-report/core/nvram-format.c.gcov.html
index 4f21fd6..9dba5ab 100644
--- a/coverage-report/core/nvram-format.c.gcov.html
+++ b/coverage-report/core/nvram-format.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/core/opal-msg.c.func-sort-c.html b/coverage-report/core/opal-msg.c.func-sort-c.html
index 8005572..0741980 100644
--- a/coverage-report/core/opal-msg.c.func-sort-c.html
+++ b/coverage-report/core/opal-msg.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/opal-msg.c.func.html b/coverage-report/core/opal-msg.c.func.html
index 8b9fb68..c69bf8d 100644
--- a/coverage-report/core/opal-msg.c.func.html
+++ b/coverage-report/core/opal-msg.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/opal-msg.c.gcov.html b/coverage-report/core/opal-msg.c.gcov.html
index 674629e..7cac8c5 100644
--- a/coverage-report/core/opal-msg.c.gcov.html
+++ b/coverage-report/core/opal-msg.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/pci-quirk.c.func-sort-c.html b/coverage-report/core/pci-quirk.c.func-sort-c.html
index 5ec7900..9928abf 100644
--- a/coverage-report/core/pci-quirk.c.func-sort-c.html
+++ b/coverage-report/core/pci-quirk.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/pci-quirk.c.func.html b/coverage-report/core/pci-quirk.c.func.html
index b370e45..3a40a4d 100644
--- a/coverage-report/core/pci-quirk.c.func.html
+++ b/coverage-report/core/pci-quirk.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/pci-quirk.c.gcov.html b/coverage-report/core/pci-quirk.c.gcov.html
index 02fdfae..bec7ee0 100644
--- a/coverage-report/core/pci-quirk.c.gcov.html
+++ b/coverage-report/core/pci-quirk.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/pel.c.func-sort-c.html b/coverage-report/core/pel.c.func-sort-c.html
index 0b084ef..a569446 100644
--- a/coverage-report/core/pel.c.func-sort-c.html
+++ b/coverage-report/core/pel.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">12</td>
diff --git a/coverage-report/core/pel.c.func.html b/coverage-report/core/pel.c.func.html
index ce15183..c114f9c 100644
--- a/coverage-report/core/pel.c.func.html
+++ b/coverage-report/core/pel.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">12</td>
diff --git a/coverage-report/core/pel.c.gcov.html b/coverage-report/core/pel.c.gcov.html
index f273ad5..e862b6a 100644
--- a/coverage-report/core/pel.c.gcov.html
+++ b/coverage-report/core/pel.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">12</td>
diff --git a/coverage-report/core/pool.c.func-sort-c.html b/coverage-report/core/pool.c.func-sort-c.html
index 5f7e8eb..9ebad58 100644
--- a/coverage-report/core/pool.c.func-sort-c.html
+++ b/coverage-report/core/pool.c.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">26</td>
<td class="headerCovTableEntry">27</td>
- <td class="headerCovTableEntry">28</td>
- <td class="headerCovTableEntryHi">96.4 %</td>
+ <td class="headerCovTableEntryHi">96.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/pool.c.func.html b/coverage-report/core/pool.c.func.html
index 8f9c1fb..a326f0e 100644
--- a/coverage-report/core/pool.c.func.html
+++ b/coverage-report/core/pool.c.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">26</td>
<td class="headerCovTableEntry">27</td>
- <td class="headerCovTableEntry">28</td>
- <td class="headerCovTableEntryHi">96.4 %</td>
+ <td class="headerCovTableEntryHi">96.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/pool.c.gcov.html b/coverage-report/core/pool.c.gcov.html
index 8be8338..6eaa074 100644
--- a/coverage-report/core/pool.c.gcov.html
+++ b/coverage-report/core/pool.c.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">26</td>
<td class="headerCovTableEntry">27</td>
- <td class="headerCovTableEntry">28</td>
- <td class="headerCovTableEntryHi">96.4 %</td>
+ <td class="headerCovTableEntryHi">96.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@@ -133,7 +133,7 @@
<a name="62"><span class="lineNum"> 62 </span> : : </a>
<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 11 : for(i = 0; i &lt; count; i++)</span></a>
<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 10 : list_add_tail(&amp;pool-&gt;free_list,</span></a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 10 : (struct list_node *) (pool-&gt;buf + obj_size*i));</span></a>
+<a name="65"><span class="lineNum"> 65 </span> : : (struct list_node *) (pool-&gt;buf + obj_size*i));</a>
<a name="66"><span class="lineNum"> 66 </span> : : </a>
<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 1 : return 0;</span></a>
<a name="68"><span class="lineNum"> 68 </span> : : }</a>
diff --git a/coverage-report/core/test/dummy-cpu.h.func-sort-c.html b/coverage-report/core/test/dummy-cpu.h.func-sort-c.html
index 0adde65..9477c4d 100644
--- a/coverage-report/core/test/dummy-cpu.h.func-sort-c.html
+++ b/coverage-report/core/test/dummy-cpu.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/core/test/dummy-cpu.h.func.html b/coverage-report/core/test/dummy-cpu.h.func.html
index 6477754..34e9b0c 100644
--- a/coverage-report/core/test/dummy-cpu.h.func.html
+++ b/coverage-report/core/test/dummy-cpu.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/core/test/dummy-cpu.h.gcov.html b/coverage-report/core/test/dummy-cpu.h.gcov.html
index cd4c04a..5510477 100644
--- a/coverage-report/core/test/dummy-cpu.h.gcov.html
+++ b/coverage-report/core/test/dummy-cpu.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/core/test/index-sort-b.html b/coverage-report/core/test/index-sort-b.html
index 62a04bc..b43ee46 100644
--- a/coverage-report/core/test/index-sort-b.html
+++ b/coverage-report/core/test/index-sort-b.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">1844</td>
- <td class="headerCovTableEntry">1899</td>
+ <td class="headerCovTableEntry">1846</td>
+ <td class="headerCovTableEntry">1901</td>
<td class="headerCovTableEntryHi">97.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">137</td>
- <td class="headerCovTableEntry">154</td>
+ <td class="headerCovTableEntry">138</td>
+ <td class="headerCovTableEntry">155</td>
<td class="headerCovTableEntryMed">89.0 %</td>
</tr>
<tr>
@@ -82,362 +82,362 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="run-flash-subpartition.c.gcov.html">run-flash-subpartition.c</a></td>
+ <td class="coverFile"><a href="run-mem_region_release_unused.c.gcov.html">run-mem_region_release_unused.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=96 height=10 alt="96.3%"><img src="../../snow.png" width=4 height=10 alt="96.3%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">14 / 14</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerHi">96.3&nbsp;%</td>
+ <td class="coverNumHi">79 / 82</td>
+ <td class="coverPerHi">90.0&nbsp;%</td>
+ <td class="coverNumHi">9 / 10</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-mem_region_release_unused_noalloc.c.gcov.html">run-mem_region_release_unused_noalloc.c</a></td>
+ <td class="coverFile"><a href="run-timebase.c.gcov.html">run-timebase.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=94 height=10 alt="93.9%"><img src="../../snow.png" width=6 height=10 alt="93.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerHi">93.9&nbsp;%</td>
- <td class="coverNumHi">62 / 66</td>
- <td class="coverPerMed">80.0&nbsp;%</td>
- <td class="coverNumMed">8 / 10</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">20 / 20</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-pci-quirk.c.gcov.html">run-pci-quirk.c</a></td>
+ <td class="coverFile"><a href="run-device.c.gcov.html">run-device.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=70 height=10 alt="70.4%"><img src="../../snow.png" width=30 height=10 alt="70.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=98 height=10 alt="98.2%"><img src="../../snow.png" width=2 height=10 alt="98.2%"></td></tr></table>
</td>
- <td class="coverPerLo">70.4&nbsp;%</td>
- <td class="coverNumLo">19 / 27</td>
- <td class="coverPerLo">33.3&nbsp;%</td>
- <td class="coverNumLo">2 / 6</td>
+ <td class="coverPerHi">98.2&nbsp;%</td>
+ <td class="coverNumHi">278 / 283</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">6 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-time-utils.c.gcov.html">run-time-utils.c</a></td>
+ <td class="coverFile"><a href="run-bitmap.c.gcov.html">run-bitmap.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">26 / 26</td>
+ <td class="coverNumHi">38 / 38</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-pool.c.gcov.html">run-pool.c</a></td>
+ <td class="coverFile"><a href="run-msg.c.gcov.html">run-msg.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=98 height=10 alt="98.1%"><img src="../../snow.png" width=2 height=10 alt="98.1%"></td></tr></table>
</td>
+ <td class="coverPerHi">98.1&nbsp;%</td>
+ <td class="coverNumHi">153 / 156</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">20 / 20</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="dummy-cpu.h.gcov.html">dummy-cpu.h</a></td>
+ <td class="coverFile"><a href="run-mem_region_release_unused_noalloc.c.gcov.html">run-mem_region_release_unused_noalloc.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=94 height=10 alt="93.9%"><img src="../../snow.png" width=6 height=10 alt="93.9%"></td></tr></table>
</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 2</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 1</td>
+ <td class="coverPerHi">93.9&nbsp;%</td>
+ <td class="coverNumHi">62 / 66</td>
+ <td class="coverPerMed">80.0&nbsp;%</td>
+ <td class="coverNumMed">8 / 10</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-mem_region_init.c.gcov.html">run-mem_region_init.c</a></td>
+ <td class="coverFile"><a href="run-mem_range_is_reserved.c.gcov.html">run-mem_range_is_reserved.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../amber.png" width=89 height=10 alt="89.5%"><img src="../../snow.png" width=11 height=10 alt="89.5%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">80 / 80</td>
+ <td class="coverPerMed">89.5&nbsp;%</td>
+ <td class="coverNumMed">51 / 57</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">9 / 9</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-pel.c.gcov.html">run-pel.c</a></td>
+ <td class="coverFile"><a href="run-buddy.c.gcov.html">run-buddy.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">52 / 52</td>
+ <td class="coverNumHi">44 / 44</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-malloc-speed.c.gcov.html">run-malloc-speed.c</a></td>
+ <td class="coverFile"><a href="run-mem_region_next.c.gcov.html">run-mem_region_next.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">28 / 28</td>
+ <td class="coverNumHi">41 / 41</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">6 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-malloc.c.gcov.html">run-malloc.c</a></td>
+ <td class="coverFile"><a href="run-malloc-speed.c.gcov.html">run-malloc-speed.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">95 / 95</td>
+ <td class="coverNumHi">28 / 28</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">7 / 7</td>
+ <td class="coverNumHi">6 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-timer.c.gcov.html">run-timer.c</a></td>
+ <td class="coverFile"><a href="run-malloc.c.gcov.html">run-malloc.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=93 height=10 alt="92.6%"><img src="../../snow.png" width=7 height=10 alt="92.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerHi">92.6&nbsp;%</td>
- <td class="coverNumHi">25 / 27</td>
- <td class="coverPerMed">85.7&nbsp;%</td>
- <td class="coverNumMed">6 / 7</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">95 / 95</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-mem_region_reservations.c.gcov.html">run-mem_region_reservations.c</a></td>
+ <td class="coverFile"><a href="run-pool.c.gcov.html">run-pool.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">90 / 90</td>
+ <td class="coverNumHi">20 / 20</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">10 / 10</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-mem_range_is_reserved.c.gcov.html">run-mem_range_is_reserved.c</a></td>
+ <td class="coverFile"><a href="run-nvram-format.c.gcov.html">run-nvram-format.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../amber.png" width=89 height=10 alt="89.5%"><img src="../../snow.png" width=11 height=10 alt="89.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=98 height=10 alt="97.8%"><img src="../../snow.png" width=2 height=10 alt="97.8%"></td></tr></table>
</td>
- <td class="coverPerMed">89.5&nbsp;%</td>
- <td class="coverNumMed">51 / 57</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
+ <td class="coverPerHi">97.8&nbsp;%</td>
+ <td class="coverNumHi">88 / 90</td>
+ <td class="coverPerMed">80.0&nbsp;%</td>
+ <td class="coverNumMed">4 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-console-log-pr_fmt.c.gcov.html">run-console-log-pr_fmt.c</a></td>
+ <td class="coverFile"><a href="run-pel.c.gcov.html">run-pel.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">21 / 21</td>
+ <td class="coverNumHi">52 / 52</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-trace.c.gcov.html">run-trace.c</a></td>
+ <td class="coverFile"><a href="dummy-cpu.h.gcov.html">dummy-cpu.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=99 height=10 alt="99.5%"><img src="../../snow.png" width=1 height=10 alt="99.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
- <td class="coverPerHi">99.5&nbsp;%</td>
- <td class="coverNumHi">195 / 196</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">11 / 11</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 2</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-api-test.c.gcov.html">run-api-test.c</a></td>
+ <td class="coverFile"><a href="run-console-log-buf-overrun.c.gcov.html">run-console-log-buf-overrun.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">13 / 13</td>
+ <td class="coverNumHi">29 / 29</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-nvram-format.c.gcov.html">run-nvram-format.c</a></td>
+ <td class="coverFile"><a href="run-pci-quirk.c.gcov.html">run-pci-quirk.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=98 height=10 alt="97.8%"><img src="../../snow.png" width=2 height=10 alt="97.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=70 height=10 alt="70.4%"><img src="../../snow.png" width=30 height=10 alt="70.4%"></td></tr></table>
</td>
- <td class="coverPerHi">97.8&nbsp;%</td>
- <td class="coverNumHi">88 / 90</td>
- <td class="coverPerMed">80.0&nbsp;%</td>
- <td class="coverNumMed">4 / 5</td>
+ <td class="coverPerLo">70.4&nbsp;%</td>
+ <td class="coverNumLo">19 / 27</td>
+ <td class="coverPerLo">33.3&nbsp;%</td>
+ <td class="coverNumLo">2 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-timebase.c.gcov.html">run-timebase.c</a></td>
+ <td class="coverFile"><a href="run-mem_region.c.gcov.html">run-mem_region.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=99 height=10 alt="99.3%"><img src="../../snow.png" width=1 height=10 alt="99.3%"></td></tr></table>
</td>
+ <td class="coverPerHi">99.3&nbsp;%</td>
+ <td class="coverNumHi">136 / 137</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">20 / 20</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-device.c.gcov.html">run-device.c</a></td>
+ <td class="coverFile"><a href="run-console-log.c.gcov.html">run-console-log.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=98 height=10 alt="98.2%"><img src="../../snow.png" width=2 height=10 alt="98.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerHi">98.2&nbsp;%</td>
- <td class="coverNumHi">278 / 283</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">21 / 21</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-cpufeatures.c.gcov.html">run-cpufeatures.c</a></td>
+ <td class="coverFile"><a href="run-flash-subpartition.c.gcov.html">run-flash-subpartition.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">91 / 91</td>
+ <td class="coverNumHi">14 / 14</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-mem_region.c.gcov.html">run-mem_region.c</a></td>
+ <td class="coverFile"><a href="run-mem_region_init.c.gcov.html">run-mem_region_init.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=99 height=10 alt="99.3%"><img src="../../snow.png" width=1 height=10 alt="99.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerHi">99.3&nbsp;%</td>
- <td class="coverNumHi">136 / 137</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">7 / 7</td>
+ <td class="coverNumHi">80 / 80</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">9 / 9</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-console-log-buf-overrun.c.gcov.html">run-console-log-buf-overrun.c</a></td>
+ <td class="coverFile"><a href="run-cpufeatures.c.gcov.html">run-cpufeatures.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">29 / 29</td>
+ <td class="coverNumHi">91 / 91</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-buddy.c.gcov.html">run-buddy.c</a></td>
+ <td class="coverFile"><a href="run-console-log-pr_fmt.c.gcov.html">run-console-log-pr_fmt.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">44 / 44</td>
+ <td class="coverNumHi">21 / 21</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="stubs.c.gcov.html">stubs.c</a></td>
+ <td class="coverFile"><a href="run-time-utils.c.gcov.html">run-time-utils.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=31 height=10 alt="31.2%"><img src="../../snow.png" width=69 height=10 alt="31.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerLo">31.2&nbsp;%</td>
- <td class="coverNumLo">5 / 16</td>
- <td class="coverPerLo">16.7&nbsp;%</td>
- <td class="coverNumLo">1 / 6</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">26 / 26</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-mem_region_next.c.gcov.html">run-mem_region_next.c</a></td>
+ <td class="coverFile"><a href="run-mem_region_reservations.c.gcov.html">run-mem_region_reservations.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">41 / 41</td>
+ <td class="coverNumHi">90 / 90</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">10 / 10</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-msg.c.gcov.html">run-msg.c</a></td>
+ <td class="coverFile"><a href="stubs.c.gcov.html">stubs.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=98 height=10 alt="98.1%"><img src="../../snow.png" width=2 height=10 alt="98.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=31 height=10 alt="31.2%"><img src="../../snow.png" width=69 height=10 alt="31.2%"></td></tr></table>
</td>
- <td class="coverPerHi">98.1&nbsp;%</td>
- <td class="coverNumHi">153 / 156</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">7 / 7</td>
+ <td class="coverPerLo">31.2&nbsp;%</td>
+ <td class="coverNumLo">5 / 16</td>
+ <td class="coverPerLo">16.7&nbsp;%</td>
+ <td class="coverNumLo">1 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-mem_region_release_unused.c.gcov.html">run-mem_region_release_unused.c</a></td>
+ <td class="coverFile"><a href="run-flash-firmware-versions.c.gcov.html">run-flash-firmware-versions.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=96 height=10 alt="96.3%"><img src="../../snow.png" width=4 height=10 alt="96.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../amber.png" width=81 height=10 alt="81.1%"><img src="../../snow.png" width=19 height=10 alt="81.1%"></td></tr></table>
</td>
- <td class="coverPerHi">96.3&nbsp;%</td>
- <td class="coverNumHi">79 / 82</td>
- <td class="coverPerHi">90.0&nbsp;%</td>
- <td class="coverNumHi">9 / 10</td>
+ <td class="coverPerMed">81.1&nbsp;%</td>
+ <td class="coverNumMed">30 / 37</td>
+ <td class="coverPerMed">75.0&nbsp;%</td>
+ <td class="coverNumMed">6 / 8</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-console-log.c.gcov.html">run-console-log.c</a></td>
+ <td class="coverFile"><a href="run-timer.c.gcov.html">run-timer.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">21 / 21</td>
+ <td class="coverNumHi">27 / 27</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
+ <td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-bitmap.c.gcov.html">run-bitmap.c</a></td>
+ <td class="coverFile"><a href="run-api-test.c.gcov.html">run-api-test.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">38 / 38</td>
+ <td class="coverNumHi">13 / 13</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-flash-firmware-versions.c.gcov.html">run-flash-firmware-versions.c</a></td>
+ <td class="coverFile"><a href="run-trace.c.gcov.html">run-trace.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../amber.png" width=81 height=10 alt="81.1%"><img src="../../snow.png" width=19 height=10 alt="81.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=98 height=10 alt="98.5%"><img src="../../snow.png" width=2 height=10 alt="98.5%"></td></tr></table>
</td>
- <td class="coverPerMed">81.1&nbsp;%</td>
- <td class="coverNumMed">30 / 37</td>
- <td class="coverPerMed">75.0&nbsp;%</td>
- <td class="coverNumMed">6 / 8</td>
+ <td class="coverPerHi">98.5&nbsp;%</td>
+ <td class="coverNumHi">195 / 198</td>
+ <td class="coverPerHi">91.7&nbsp;%</td>
+ <td class="coverNumHi">11 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/core/test/index-sort-f.html b/coverage-report/core/test/index-sort-f.html
index fe12f90..9ecf82f 100644
--- a/coverage-report/core/test/index-sort-f.html
+++ b/coverage-report/core/test/index-sort-f.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">1844</td>
- <td class="headerCovTableEntry">1899</td>
+ <td class="headerCovTableEntry">1846</td>
+ <td class="headerCovTableEntry">1901</td>
<td class="headerCovTableEntryHi">97.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">137</td>
- <td class="headerCovTableEntry">154</td>
+ <td class="headerCovTableEntry">138</td>
+ <td class="headerCovTableEntry">155</td>
<td class="headerCovTableEntryMed">89.0 %</td>
</tr>
<tr>
@@ -154,18 +154,6 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-timer.c.gcov.html">run-timer.c</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=93 height=10 alt="92.6%"><img src="../../snow.png" width=7 height=10 alt="92.6%"></td></tr></table>
- </td>
- <td class="coverPerHi">92.6&nbsp;%</td>
- <td class="coverNumHi">25 / 27</td>
- <td class="coverPerMed">85.7&nbsp;%</td>
- <td class="coverNumMed">6 / 7</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
<td class="coverFile"><a href="run-mem_region_release_unused.c.gcov.html">run-mem_region_release_unused.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=96 height=10 alt="96.3%"><img src="../../snow.png" width=4 height=10 alt="96.3%"></td></tr></table>
@@ -178,24 +166,36 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-flash-subpartition.c.gcov.html">run-flash-subpartition.c</a></td>
+ <td class="coverFile"><a href="run-trace.c.gcov.html">run-trace.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=98 height=10 alt="98.5%"><img src="../../snow.png" width=2 height=10 alt="98.5%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">98.5&nbsp;%</td>
+ <td class="coverNumHi">195 / 198</td>
+ <td class="coverPerHi">91.7&nbsp;%</td>
+ <td class="coverNumHi">11 / 12</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="run-timebase.c.gcov.html">run-timebase.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">14 / 14</td>
+ <td class="coverNumHi">20 / 20</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-time-utils.c.gcov.html">run-time-utils.c</a></td>
+ <td class="coverFile"><a href="run-bitmap.c.gcov.html">run-bitmap.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">26 / 26</td>
+ <td class="coverNumHi">38 / 38</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
@@ -214,36 +214,36 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-api-test.c.gcov.html">run-api-test.c</a></td>
+ <td class="coverFile"><a href="run-flash-subpartition.c.gcov.html">run-flash-subpartition.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">13 / 13</td>
+ <td class="coverNumHi">14 / 14</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-timebase.c.gcov.html">run-timebase.c</a></td>
+ <td class="coverFile"><a href="run-time-utils.c.gcov.html">run-time-utils.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">20 / 20</td>
+ <td class="coverNumHi">26 / 26</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-bitmap.c.gcov.html">run-bitmap.c</a></td>
+ <td class="coverFile"><a href="run-api-test.c.gcov.html">run-api-test.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">38 / 38</td>
+ <td class="coverNumHi">13 / 13</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
@@ -274,43 +274,43 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-console-log-pr_fmt.c.gcov.html">run-console-log-pr_fmt.c</a></td>
+ <td class="coverFile"><a href="run-console-log-buf-overrun.c.gcov.html">run-console-log-buf-overrun.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">21 / 21</td>
+ <td class="coverNumHi">29 / 29</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-cpufeatures.c.gcov.html">run-cpufeatures.c</a></td>
+ <td class="coverFile"><a href="run-console-log.c.gcov.html">run-console-log.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">91 / 91</td>
+ <td class="coverNumHi">21 / 21</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-console-log-buf-overrun.c.gcov.html">run-console-log-buf-overrun.c</a></td>
+ <td class="coverFile"><a href="run-cpufeatures.c.gcov.html">run-cpufeatures.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">29 / 29</td>
+ <td class="coverNumHi">91 / 91</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-console-log.c.gcov.html">run-console-log.c</a></td>
+ <td class="coverFile"><a href="run-console-log-pr_fmt.c.gcov.html">run-console-log-pr_fmt.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -322,18 +322,6 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-malloc-speed.c.gcov.html">run-malloc-speed.c</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
- </td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">28 / 28</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
<td class="coverFile"><a href="run-device.c.gcov.html">run-device.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=98 height=10 alt="98.2%"><img src="../../snow.png" width=2 height=10 alt="98.2%"></td></tr></table>
@@ -358,50 +346,62 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-malloc.c.gcov.html">run-malloc.c</a></td>
+ <td class="coverFile"><a href="run-malloc-speed.c.gcov.html">run-malloc-speed.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">95 / 95</td>
+ <td class="coverNumHi">28 / 28</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">6 / 6</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="run-msg.c.gcov.html">run-msg.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=98 height=10 alt="98.1%"><img src="../../snow.png" width=2 height=10 alt="98.1%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">98.1&nbsp;%</td>
+ <td class="coverNumHi">153 / 156</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-mem_region.c.gcov.html">run-mem_region.c</a></td>
+ <td class="coverFile"><a href="run-malloc.c.gcov.html">run-malloc.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=99 height=10 alt="99.3%"><img src="../../snow.png" width=1 height=10 alt="99.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerHi">99.3&nbsp;%</td>
- <td class="coverNumHi">136 / 137</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">95 / 95</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-msg.c.gcov.html">run-msg.c</a></td>
+ <td class="coverFile"><a href="run-mem_region.c.gcov.html">run-mem_region.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=98 height=10 alt="98.1%"><img src="../../snow.png" width=2 height=10 alt="98.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=99 height=10 alt="99.3%"><img src="../../snow.png" width=1 height=10 alt="99.3%"></td></tr></table>
</td>
- <td class="coverPerHi">98.1&nbsp;%</td>
- <td class="coverNumHi">153 / 156</td>
+ <td class="coverPerHi">99.3&nbsp;%</td>
+ <td class="coverNumHi">136 / 137</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-mem_region_init.c.gcov.html">run-mem_region_init.c</a></td>
+ <td class="coverFile"><a href="run-timer.c.gcov.html">run-timer.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">80 / 80</td>
+ <td class="coverNumHi">27 / 27</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
+ <td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -418,26 +418,26 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-mem_region_reservations.c.gcov.html">run-mem_region_reservations.c</a></td>
+ <td class="coverFile"><a href="run-mem_region_init.c.gcov.html">run-mem_region_init.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">90 / 90</td>
+ <td class="coverNumHi">80 / 80</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">10 / 10</td>
+ <td class="coverNumHi">9 / 9</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-trace.c.gcov.html">run-trace.c</a></td>
+ <td class="coverFile"><a href="run-mem_region_reservations.c.gcov.html">run-mem_region_reservations.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=99 height=10 alt="99.5%"><img src="../../snow.png" width=1 height=10 alt="99.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerHi">99.5&nbsp;%</td>
- <td class="coverNumHi">195 / 196</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">11 / 11</td>
+ <td class="coverNumHi">90 / 90</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">10 / 10</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/core/test/index-sort-l.html b/coverage-report/core/test/index-sort-l.html
index 11b838e..12b9605 100644
--- a/coverage-report/core/test/index-sort-l.html
+++ b/coverage-report/core/test/index-sort-l.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">1844</td>
- <td class="headerCovTableEntry">1899</td>
+ <td class="headerCovTableEntry">1846</td>
+ <td class="headerCovTableEntry">1901</td>
<td class="headerCovTableEntryHi">97.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">137</td>
- <td class="headerCovTableEntry">154</td>
+ <td class="headerCovTableEntry">138</td>
+ <td class="headerCovTableEntry">155</td>
<td class="headerCovTableEntryMed">89.0 %</td>
</tr>
<tr>
@@ -142,18 +142,6 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-timer.c.gcov.html">run-timer.c</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=93 height=10 alt="92.6%"><img src="../../snow.png" width=7 height=10 alt="92.6%"></td></tr></table>
- </td>
- <td class="coverPerHi">92.6&nbsp;%</td>
- <td class="coverNumHi">25 / 27</td>
- <td class="coverPerMed">85.7&nbsp;%</td>
- <td class="coverNumMed">6 / 7</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
<td class="coverFile"><a href="run-mem_region_release_unused_noalloc.c.gcov.html">run-mem_region_release_unused_noalloc.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=94 height=10 alt="93.9%"><img src="../../snow.png" width=6 height=10 alt="93.9%"></td></tr></table>
@@ -214,26 +202,26 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-mem_region.c.gcov.html">run-mem_region.c</a></td>
+ <td class="coverFile"><a href="run-trace.c.gcov.html">run-trace.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=99 height=10 alt="99.3%"><img src="../../snow.png" width=1 height=10 alt="99.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=98 height=10 alt="98.5%"><img src="../../snow.png" width=2 height=10 alt="98.5%"></td></tr></table>
</td>
- <td class="coverPerHi">99.3&nbsp;%</td>
- <td class="coverNumHi">136 / 137</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">7 / 7</td>
+ <td class="coverPerHi">98.5&nbsp;%</td>
+ <td class="coverNumHi">195 / 198</td>
+ <td class="coverPerHi">91.7&nbsp;%</td>
+ <td class="coverNumHi">11 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-trace.c.gcov.html">run-trace.c</a></td>
+ <td class="coverFile"><a href="run-mem_region.c.gcov.html">run-mem_region.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=99 height=10 alt="99.5%"><img src="../../snow.png" width=1 height=10 alt="99.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=99 height=10 alt="99.3%"><img src="../../snow.png" width=1 height=10 alt="99.3%"></td></tr></table>
</td>
- <td class="coverPerHi">99.5&nbsp;%</td>
- <td class="coverNumHi">195 / 196</td>
+ <td class="coverPerHi">99.3&nbsp;%</td>
+ <td class="coverNumHi">136 / 137</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">11 / 11</td>
+ <td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -262,7 +250,7 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-pool.c.gcov.html">run-pool.c</a></td>
+ <td class="coverFile"><a href="run-timebase.c.gcov.html">run-timebase.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -274,7 +262,7 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-timebase.c.gcov.html">run-timebase.c</a></td>
+ <td class="coverFile"><a href="run-pool.c.gcov.html">run-pool.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -286,7 +274,7 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-console-log-pr_fmt.c.gcov.html">run-console-log-pr_fmt.c</a></td>
+ <td class="coverFile"><a href="run-console-log.c.gcov.html">run-console-log.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -298,7 +286,7 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-console-log.c.gcov.html">run-console-log.c</a></td>
+ <td class="coverFile"><a href="run-console-log-pr_fmt.c.gcov.html">run-console-log-pr_fmt.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -322,6 +310,18 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="run-timer.c.gcov.html">run-timer.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">27 / 27</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">7 / 7</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="run-malloc-speed.c.gcov.html">run-malloc-speed.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
diff --git a/coverage-report/core/test/index.html b/coverage-report/core/test/index.html
index 02a9121..bf5690c 100644
--- a/coverage-report/core/test/index.html
+++ b/coverage-report/core/test/index.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">1844</td>
- <td class="headerCovTableEntry">1899</td>
+ <td class="headerCovTableEntry">1846</td>
+ <td class="headerCovTableEntry">1901</td>
<td class="headerCovTableEntryHi">97.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">137</td>
- <td class="headerCovTableEntry">154</td>
+ <td class="headerCovTableEntry">138</td>
+ <td class="headerCovTableEntry">155</td>
<td class="headerCovTableEntryMed">89.0 %</td>
</tr>
<tr>
@@ -408,24 +408,24 @@
<tr>
<td class="coverFile"><a href="run-timer.c.gcov.html">run-timer.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=93 height=10 alt="92.6%"><img src="../../snow.png" width=7 height=10 alt="92.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerHi">92.6&nbsp;%</td>
- <td class="coverNumHi">25 / 27</td>
- <td class="coverPerMed">85.7&nbsp;%</td>
- <td class="coverNumMed">6 / 7</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">27 / 27</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="run-trace.c.gcov.html">run-trace.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=99 height=10 alt="99.5%"><img src="../../snow.png" width=1 height=10 alt="99.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=98 height=10 alt="98.5%"><img src="../../snow.png" width=2 height=10 alt="98.5%"></td></tr></table>
</td>
- <td class="coverPerHi">99.5&nbsp;%</td>
- <td class="coverNumHi">195 / 196</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">11 / 11</td>
+ <td class="coverPerHi">98.5&nbsp;%</td>
+ <td class="coverNumHi">195 / 198</td>
+ <td class="coverPerHi">91.7&nbsp;%</td>
+ <td class="coverNumHi">11 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/core/test/run-api-test.c.func-sort-c.html b/coverage-report/core/test/run-api-test.c.func-sort-c.html
index aaac9bf..01a57c1 100644
--- a/coverage-report/core/test/run-api-test.c.func-sort-c.html
+++ b/coverage-report/core/test/run-api-test.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-api-test.c.func.html b/coverage-report/core/test/run-api-test.c.func.html
index b7b30ce..1b9b099 100644
--- a/coverage-report/core/test/run-api-test.c.func.html
+++ b/coverage-report/core/test/run-api-test.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-api-test.c.gcov.html b/coverage-report/core/test/run-api-test.c.gcov.html
index ef9f284..bb1d3c1 100644
--- a/coverage-report/core/test/run-api-test.c.gcov.html
+++ b/coverage-report/core/test/run-api-test.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-bitmap.c.func-sort-c.html b/coverage-report/core/test/run-bitmap.c.func-sort-c.html
index bf9b606..1083be6 100644
--- a/coverage-report/core/test/run-bitmap.c.func-sort-c.html
+++ b/coverage-report/core/test/run-bitmap.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-bitmap.c.func.html b/coverage-report/core/test/run-bitmap.c.func.html
index eb7eaa8..8575dae 100644
--- a/coverage-report/core/test/run-bitmap.c.func.html
+++ b/coverage-report/core/test/run-bitmap.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-bitmap.c.gcov.html b/coverage-report/core/test/run-bitmap.c.gcov.html
index 972a690..b5d8758 100644
--- a/coverage-report/core/test/run-bitmap.c.gcov.html
+++ b/coverage-report/core/test/run-bitmap.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-buddy.c.func-sort-c.html b/coverage-report/core/test/run-buddy.c.func-sort-c.html
index d4b5250..9b666a4 100644
--- a/coverage-report/core/test/run-buddy.c.func-sort-c.html
+++ b/coverage-report/core/test/run-buddy.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/core/test/run-buddy.c.func.html b/coverage-report/core/test/run-buddy.c.func.html
index 5cc3968..ae97d00 100644
--- a/coverage-report/core/test/run-buddy.c.func.html
+++ b/coverage-report/core/test/run-buddy.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/core/test/run-buddy.c.gcov.html b/coverage-report/core/test/run-buddy.c.gcov.html
index fd95483..968171d 100644
--- a/coverage-report/core/test/run-buddy.c.gcov.html
+++ b/coverage-report/core/test/run-buddy.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/core/test/run-console-log-buf-overrun.c.func-sort-c.html b/coverage-report/core/test/run-console-log-buf-overrun.c.func-sort-c.html
index abf37fd..d659eef 100644
--- a/coverage-report/core/test/run-console-log-buf-overrun.c.func-sort-c.html
+++ b/coverage-report/core/test/run-console-log-buf-overrun.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/test/run-console-log-buf-overrun.c.func.html b/coverage-report/core/test/run-console-log-buf-overrun.c.func.html
index d8d858c..ca3a3c5 100644
--- a/coverage-report/core/test/run-console-log-buf-overrun.c.func.html
+++ b/coverage-report/core/test/run-console-log-buf-overrun.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/test/run-console-log-buf-overrun.c.gcov.html b/coverage-report/core/test/run-console-log-buf-overrun.c.gcov.html
index 51fdc6c..4e6f0c1 100644
--- a/coverage-report/core/test/run-console-log-buf-overrun.c.gcov.html
+++ b/coverage-report/core/test/run-console-log-buf-overrun.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/test/run-console-log-pr_fmt.c.func-sort-c.html b/coverage-report/core/test/run-console-log-pr_fmt.c.func-sort-c.html
index 7350977..76ca43d 100644
--- a/coverage-report/core/test/run-console-log-pr_fmt.c.func-sort-c.html
+++ b/coverage-report/core/test/run-console-log-pr_fmt.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/test/run-console-log-pr_fmt.c.func.html b/coverage-report/core/test/run-console-log-pr_fmt.c.func.html
index 14e7c06..43a736d 100644
--- a/coverage-report/core/test/run-console-log-pr_fmt.c.func.html
+++ b/coverage-report/core/test/run-console-log-pr_fmt.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/test/run-console-log-pr_fmt.c.gcov.html b/coverage-report/core/test/run-console-log-pr_fmt.c.gcov.html
index 8830481..5c2b181 100644
--- a/coverage-report/core/test/run-console-log-pr_fmt.c.gcov.html
+++ b/coverage-report/core/test/run-console-log-pr_fmt.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/test/run-console-log.c.func-sort-c.html b/coverage-report/core/test/run-console-log.c.func-sort-c.html
index 74893a5..6a10461 100644
--- a/coverage-report/core/test/run-console-log.c.func-sort-c.html
+++ b/coverage-report/core/test/run-console-log.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/test/run-console-log.c.func.html b/coverage-report/core/test/run-console-log.c.func.html
index aa30de6..7ff8048 100644
--- a/coverage-report/core/test/run-console-log.c.func.html
+++ b/coverage-report/core/test/run-console-log.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/test/run-console-log.c.gcov.html b/coverage-report/core/test/run-console-log.c.gcov.html
index 8eb7c34..e3daf25 100644
--- a/coverage-report/core/test/run-console-log.c.gcov.html
+++ b/coverage-report/core/test/run-console-log.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/test/run-cpufeatures.c.func-sort-c.html b/coverage-report/core/test/run-cpufeatures.c.func-sort-c.html
index b496d98..33065b3 100644
--- a/coverage-report/core/test/run-cpufeatures.c.func-sort-c.html
+++ b/coverage-report/core/test/run-cpufeatures.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/test/run-cpufeatures.c.func.html b/coverage-report/core/test/run-cpufeatures.c.func.html
index 657759d..ff5aeef 100644
--- a/coverage-report/core/test/run-cpufeatures.c.func.html
+++ b/coverage-report/core/test/run-cpufeatures.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/test/run-cpufeatures.c.gcov.html b/coverage-report/core/test/run-cpufeatures.c.gcov.html
index 498650a..df5eec4 100644
--- a/coverage-report/core/test/run-cpufeatures.c.gcov.html
+++ b/coverage-report/core/test/run-cpufeatures.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/test/run-device.c.func-sort-c.html b/coverage-report/core/test/run-device.c.func-sort-c.html
index e35ce78..2e88af5 100644
--- a/coverage-report/core/test/run-device.c.func-sort-c.html
+++ b/coverage-report/core/test/run-device.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/core/test/run-device.c.func.html b/coverage-report/core/test/run-device.c.func.html
index e8256e6..c615308 100644
--- a/coverage-report/core/test/run-device.c.func.html
+++ b/coverage-report/core/test/run-device.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/core/test/run-device.c.gcov.html b/coverage-report/core/test/run-device.c.gcov.html
index 77e12ed..d0b7e15 100644
--- a/coverage-report/core/test/run-device.c.gcov.html
+++ b/coverage-report/core/test/run-device.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/core/test/run-flash-firmware-versions.c.func-sort-c.html b/coverage-report/core/test/run-flash-firmware-versions.c.func-sort-c.html
index ebc3d3f..ee7c114 100644
--- a/coverage-report/core/test/run-flash-firmware-versions.c.func-sort-c.html
+++ b/coverage-report/core/test/run-flash-firmware-versions.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/core/test/run-flash-firmware-versions.c.func.html b/coverage-report/core/test/run-flash-firmware-versions.c.func.html
index 8333a31..5d86803 100644
--- a/coverage-report/core/test/run-flash-firmware-versions.c.func.html
+++ b/coverage-report/core/test/run-flash-firmware-versions.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/core/test/run-flash-firmware-versions.c.gcov.html b/coverage-report/core/test/run-flash-firmware-versions.c.gcov.html
index 9f103fb..3bd026a 100644
--- a/coverage-report/core/test/run-flash-firmware-versions.c.gcov.html
+++ b/coverage-report/core/test/run-flash-firmware-versions.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/core/test/run-flash-subpartition.c.func-sort-c.html b/coverage-report/core/test/run-flash-subpartition.c.func-sort-c.html
index c9018ce..0d54601 100644
--- a/coverage-report/core/test/run-flash-subpartition.c.func-sort-c.html
+++ b/coverage-report/core/test/run-flash-subpartition.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-flash-subpartition.c.func.html b/coverage-report/core/test/run-flash-subpartition.c.func.html
index 35924a9..b1fb9ca 100644
--- a/coverage-report/core/test/run-flash-subpartition.c.func.html
+++ b/coverage-report/core/test/run-flash-subpartition.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-flash-subpartition.c.gcov.html b/coverage-report/core/test/run-flash-subpartition.c.gcov.html
index f1f2adc..880c9bd 100644
--- a/coverage-report/core/test/run-flash-subpartition.c.gcov.html
+++ b/coverage-report/core/test/run-flash-subpartition.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-malloc-speed.c.func-sort-c.html b/coverage-report/core/test/run-malloc-speed.c.func-sort-c.html
index 548ba60..fab49a7 100644
--- a/coverage-report/core/test/run-malloc-speed.c.func-sort-c.html
+++ b/coverage-report/core/test/run-malloc-speed.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/core/test/run-malloc-speed.c.func.html b/coverage-report/core/test/run-malloc-speed.c.func.html
index 591e9a7..4774457 100644
--- a/coverage-report/core/test/run-malloc-speed.c.func.html
+++ b/coverage-report/core/test/run-malloc-speed.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/core/test/run-malloc-speed.c.gcov.html b/coverage-report/core/test/run-malloc-speed.c.gcov.html
index 9fdfb00..de7b678 100644
--- a/coverage-report/core/test/run-malloc-speed.c.gcov.html
+++ b/coverage-report/core/test/run-malloc-speed.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/core/test/run-malloc.c.func-sort-c.html b/coverage-report/core/test/run-malloc.c.func-sort-c.html
index ca6a04a..529a0b2 100644
--- a/coverage-report/core/test/run-malloc.c.func-sort-c.html
+++ b/coverage-report/core/test/run-malloc.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
diff --git a/coverage-report/core/test/run-malloc.c.func.html b/coverage-report/core/test/run-malloc.c.func.html
index 4c2abf7..46898a2 100644
--- a/coverage-report/core/test/run-malloc.c.func.html
+++ b/coverage-report/core/test/run-malloc.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
diff --git a/coverage-report/core/test/run-malloc.c.gcov.html b/coverage-report/core/test/run-malloc.c.gcov.html
index cd5c63a..e54ab30 100644
--- a/coverage-report/core/test/run-malloc.c.gcov.html
+++ b/coverage-report/core/test/run-malloc.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
diff --git a/coverage-report/core/test/run-mem_range_is_reserved.c.func-sort-c.html b/coverage-report/core/test/run-mem_range_is_reserved.c.func-sort-c.html
index 98df65e..0c4c517 100644
--- a/coverage-report/core/test/run-mem_range_is_reserved.c.func-sort-c.html
+++ b/coverage-report/core/test/run-mem_range_is_reserved.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
diff --git a/coverage-report/core/test/run-mem_range_is_reserved.c.func.html b/coverage-report/core/test/run-mem_range_is_reserved.c.func.html
index e034835..0ae9798 100644
--- a/coverage-report/core/test/run-mem_range_is_reserved.c.func.html
+++ b/coverage-report/core/test/run-mem_range_is_reserved.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
diff --git a/coverage-report/core/test/run-mem_range_is_reserved.c.gcov.html b/coverage-report/core/test/run-mem_range_is_reserved.c.gcov.html
index 643ebcc..1be6585 100644
--- a/coverage-report/core/test/run-mem_range_is_reserved.c.gcov.html
+++ b/coverage-report/core/test/run-mem_range_is_reserved.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
diff --git a/coverage-report/core/test/run-mem_region.c.func-sort-c.html b/coverage-report/core/test/run-mem_region.c.func-sort-c.html
index 5b82944..aa7caf9 100644
--- a/coverage-report/core/test/run-mem_region.c.func-sort-c.html
+++ b/coverage-report/core/test/run-mem_region.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@@ -94,7 +94,7 @@
</tr>
<tr>
<td class="coverFn"><a href="run-mem_region.c.gcov.html#60">lock_held_by_me</a></td>
- <td class="coverFnHi">131344</td>
+ <td class="coverFnHi">131334</td>
</tr>
</table>
<br>
diff --git a/coverage-report/core/test/run-mem_region.c.func.html b/coverage-report/core/test/run-mem_region.c.func.html
index 62327d3..7ec153b 100644
--- a/coverage-report/core/test/run-mem_region.c.func.html
+++ b/coverage-report/core/test/run-mem_region.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@@ -78,7 +78,7 @@
</tr>
<tr>
<td class="coverFn"><a href="run-mem_region.c.gcov.html#60">lock_held_by_me</a></td>
- <td class="coverFnHi">131344</td>
+ <td class="coverFnHi">131334</td>
</tr>
<tr>
<td class="coverFn"><a href="run-mem_region.c.gcov.html#74">main</a></td>
diff --git a/coverage-report/core/test/run-mem_region.c.gcov.html b/coverage-report/core/test/run-mem_region.c.gcov.html
index 68f8b67..fa92a21 100644
--- a/coverage-report/core/test/run-mem_region.c.gcov.html
+++ b/coverage-report/core/test/run-mem_region.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@@ -130,9 +130,9 @@
<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 10 : l-&gt;lock_val--;</span></a>
<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 10 : }</span></a>
<a name="61"><span class="lineNum"> 61 </span> : : </a>
-<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 131344 : bool lock_held_by_me(struct lock *l)</span></a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 131334 : bool lock_held_by_me(struct lock *l)</span></a>
<a name="63"><span class="lineNum"> 63 </span> : : {</a>
-<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 131344 : return l-&gt;lock_val;</span></a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 131334 : return l-&gt;lock_val;</span></a>
<a name="65"><span class="lineNum"> 65 </span> : : }</a>
<a name="66"><span class="lineNum"> 66 </span> : : </a>
<a name="67"><span class="lineNum"> 67 </span> : : #define TEST_HEAP_ORDER 16</a>
@@ -181,19 +181,19 @@
<a name="110"><span class="lineNum"> 110 </span> : : /* Allocations of various alignments: use small alloc first. */</a>
<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 1 : ptrs[0] = mem_alloc(&amp;skiboot_heap, 1, 1, &quot;small&quot;);</span></a>
<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 1 : for (i = 0; ; i++) {</span></a>
-<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 23 : p = mem_alloc(&amp;skiboot_heap, 1, 1ULL &lt;&lt; i, &quot;here&quot;);</span></a>
-<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 23 : assert(mem_check(&amp;skiboot_heap));</span></a>
+<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 18 : p = mem_alloc(&amp;skiboot_heap, 1, 1ULL &lt;&lt; i, &quot;here&quot;);</span></a>
+<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 18 : assert(mem_check(&amp;skiboot_heap));</span></a>
<a name="115"><span class="lineNum"> 115 </span> : : /* We will eventually fail... */</a>
-<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 23 : if (!p) {</span></a>
+<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 18 : if (!p) {</span></a>
<a name="117"><span class="lineNum"> 117 </span> :<span class="lineCov"> 1 : assert(i &gt;= TEST_HEAP_ORDER);</span></a>
<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 1 : break;</span></a>
<a name="119"><span class="lineNum"> 119 </span> : : }</a>
-<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 22 : assert(p);</span></a>
-<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 22 : assert((long)p % (1ULL &lt;&lt; i) == 0);</span></a>
-<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 22 : assert(p &gt; (void *)test_heap);</span></a>
-<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 22 : assert(p + 1 &lt;= (void *)test_heap + TEST_HEAP_SIZE);</span></a>
-<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 22 : mem_free(&amp;skiboot_heap, p, &quot;freed&quot;);</span></a>
-<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 22 : assert(mem_check(&amp;skiboot_heap));</span></a>
+<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 17 : assert(p);</span></a>
+<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 17 : assert((long)p % (1ULL &lt;&lt; i) == 0);</span></a>
+<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 17 : assert(p &gt; (void *)test_heap);</span></a>
+<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 17 : assert(p + 1 &lt;= (void *)test_heap + TEST_HEAP_SIZE);</span></a>
+<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 17 : mem_free(&amp;skiboot_heap, p, &quot;freed&quot;);</span></a>
+<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 17 : assert(mem_check(&amp;skiboot_heap));</span></a>
<a name="126"><span class="lineNum"> 126 </span> : : }</a>
<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 1 : mem_free(&amp;skiboot_heap, ptrs[0], &quot;small freed&quot;);</span></a>
<a name="128"><span class="lineNum"> 128 </span> :<span class="lineCov"> 1 : assert(heap_empty());</span></a>
diff --git a/coverage-report/core/test/run-mem_region_init.c.func-sort-c.html b/coverage-report/core/test/run-mem_region_init.c.func-sort-c.html
index 2478510..622319d 100644
--- a/coverage-report/core/test/run-mem_region_init.c.func-sort-c.html
+++ b/coverage-report/core/test/run-mem_region_init.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
diff --git a/coverage-report/core/test/run-mem_region_init.c.func.html b/coverage-report/core/test/run-mem_region_init.c.func.html
index 7bde439..8a97482 100644
--- a/coverage-report/core/test/run-mem_region_init.c.func.html
+++ b/coverage-report/core/test/run-mem_region_init.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
diff --git a/coverage-report/core/test/run-mem_region_init.c.gcov.html b/coverage-report/core/test/run-mem_region_init.c.gcov.html
index 2eba9b9..9c27ef5 100644
--- a/coverage-report/core/test/run-mem_region_init.c.gcov.html
+++ b/coverage-report/core/test/run-mem_region_init.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
diff --git a/coverage-report/core/test/run-mem_region_next.c.func-sort-c.html b/coverage-report/core/test/run-mem_region_next.c.func-sort-c.html
index 8a6fbda..50fa4dc 100644
--- a/coverage-report/core/test/run-mem_region_next.c.func-sort-c.html
+++ b/coverage-report/core/test/run-mem_region_next.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/core/test/run-mem_region_next.c.func.html b/coverage-report/core/test/run-mem_region_next.c.func.html
index 1e2804d..1d543ea 100644
--- a/coverage-report/core/test/run-mem_region_next.c.func.html
+++ b/coverage-report/core/test/run-mem_region_next.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/core/test/run-mem_region_next.c.gcov.html b/coverage-report/core/test/run-mem_region_next.c.gcov.html
index 92b782d..a2a7be7 100644
--- a/coverage-report/core/test/run-mem_region_next.c.gcov.html
+++ b/coverage-report/core/test/run-mem_region_next.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/core/test/run-mem_region_release_unused.c.func-sort-c.html b/coverage-report/core/test/run-mem_region_release_unused.c.func-sort-c.html
index 3a2f5e0..bc54040 100644
--- a/coverage-report/core/test/run-mem_region_release_unused.c.func-sort-c.html
+++ b/coverage-report/core/test/run-mem_region_release_unused.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
diff --git a/coverage-report/core/test/run-mem_region_release_unused.c.func.html b/coverage-report/core/test/run-mem_region_release_unused.c.func.html
index 021d64b..af6bfad 100644
--- a/coverage-report/core/test/run-mem_region_release_unused.c.func.html
+++ b/coverage-report/core/test/run-mem_region_release_unused.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
diff --git a/coverage-report/core/test/run-mem_region_release_unused.c.gcov.html b/coverage-report/core/test/run-mem_region_release_unused.c.gcov.html
index 1308ca4..c33dc49 100644
--- a/coverage-report/core/test/run-mem_region_release_unused.c.gcov.html
+++ b/coverage-report/core/test/run-mem_region_release_unused.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
diff --git a/coverage-report/core/test/run-mem_region_release_unused_noalloc.c.func-sort-c.html b/coverage-report/core/test/run-mem_region_release_unused_noalloc.c.func-sort-c.html
index 5dbbf9a..bf179f0 100644
--- a/coverage-report/core/test/run-mem_region_release_unused_noalloc.c.func-sort-c.html
+++ b/coverage-report/core/test/run-mem_region_release_unused_noalloc.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
diff --git a/coverage-report/core/test/run-mem_region_release_unused_noalloc.c.func.html b/coverage-report/core/test/run-mem_region_release_unused_noalloc.c.func.html
index eb8c574..5422959 100644
--- a/coverage-report/core/test/run-mem_region_release_unused_noalloc.c.func.html
+++ b/coverage-report/core/test/run-mem_region_release_unused_noalloc.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
diff --git a/coverage-report/core/test/run-mem_region_release_unused_noalloc.c.gcov.html b/coverage-report/core/test/run-mem_region_release_unused_noalloc.c.gcov.html
index 5960614..1a36db7 100644
--- a/coverage-report/core/test/run-mem_region_release_unused_noalloc.c.gcov.html
+++ b/coverage-report/core/test/run-mem_region_release_unused_noalloc.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
diff --git a/coverage-report/core/test/run-mem_region_reservations.c.func-sort-c.html b/coverage-report/core/test/run-mem_region_reservations.c.func-sort-c.html
index 7401df4..ee2d1af 100644
--- a/coverage-report/core/test/run-mem_region_reservations.c.func-sort-c.html
+++ b/coverage-report/core/test/run-mem_region_reservations.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@@ -98,15 +98,15 @@
</tr>
<tr>
<td class="coverFn"><a href="run-mem_region_reservations.c.gcov.html#58">lock_held_by_me</a></td>
- <td class="coverFnHi">167</td>
+ <td class="coverFnHi">175</td>
</tr>
<tr>
<td class="coverFn"><a href="run-mem_region_reservations.c.gcov.html#45">lock_caller</a></td>
- <td class="coverFnHi">175</td>
+ <td class="coverFnHi">183</td>
</tr>
<tr>
<td class="coverFn"><a href="run-mem_region_reservations.c.gcov.html#52">unlock</a></td>
- <td class="coverFnHi">175</td>
+ <td class="coverFnHi">183</td>
</tr>
</table>
<br>
diff --git a/coverage-report/core/test/run-mem_region_reservations.c.func.html b/coverage-report/core/test/run-mem_region_reservations.c.func.html
index f123289..a94e7f7 100644
--- a/coverage-report/core/test/run-mem_region_reservations.c.func.html
+++ b/coverage-report/core/test/run-mem_region_reservations.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@@ -86,11 +86,11 @@
</tr>
<tr>
<td class="coverFn"><a href="run-mem_region_reservations.c.gcov.html#45">lock_caller</a></td>
- <td class="coverFnHi">175</td>
+ <td class="coverFnHi">183</td>
</tr>
<tr>
<td class="coverFn"><a href="run-mem_region_reservations.c.gcov.html#58">lock_held_by_me</a></td>
- <td class="coverFnHi">167</td>
+ <td class="coverFnHi">175</td>
</tr>
<tr>
<td class="coverFn"><a href="run-mem_region_reservations.c.gcov.html#177">main</a></td>
@@ -106,7 +106,7 @@
</tr>
<tr>
<td class="coverFn"><a href="run-mem_region_reservations.c.gcov.html#52">unlock</a></td>
- <td class="coverFnHi">175</td>
+ <td class="coverFnHi">183</td>
</tr>
</table>
<br>
diff --git a/coverage-report/core/test/run-mem_region_reservations.c.gcov.html b/coverage-report/core/test/run-mem_region_reservations.c.gcov.html
index bfce88f..2570ca8 100644
--- a/coverage-report/core/test/run-mem_region_reservations.c.gcov.html
+++ b/coverage-report/core/test/run-mem_region_reservations.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@@ -115,22 +115,22 @@
<a name="44"><span class="lineNum"> 44 </span> : : </a>
<a name="45"><span class="lineNum"> 45 </span> : : enum proc_chip_quirks proc_chip_quirks;</a>
<a name="46"><span class="lineNum"> 46 </span> : : </a>
-<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 175 : void lock_caller(struct lock *l, const char *caller)</span></a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 183 : void lock_caller(struct lock *l, const char *caller)</span></a>
<a name="48"><span class="lineNum"> 48 </span> : : {</a>
<a name="49"><span class="lineNum"> 49 </span> : : (void)caller;</a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 175 : assert(!l-&gt;lock_val);</span></a>
-<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 175 : l-&gt;lock_val++;</span></a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 175 : }</span></a>
+<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 183 : assert(!l-&gt;lock_val);</span></a>
+<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 183 : l-&gt;lock_val++;</span></a>
+<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 183 : }</span></a>
<a name="53"><span class="lineNum"> 53 </span> : : </a>
-<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 175 : void unlock(struct lock *l)</span></a>
+<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 183 : void unlock(struct lock *l)</span></a>
<a name="55"><span class="lineNum"> 55 </span> : : {</a>
-<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 175 : assert(l-&gt;lock_val);</span></a>
-<a name="57"><span class="lineNum"> 57 </span> :<span class="lineCov"> 175 : l-&gt;lock_val--;</span></a>
-<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 175 : }</span></a>
+<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 183 : assert(l-&gt;lock_val);</span></a>
+<a name="57"><span class="lineNum"> 57 </span> :<span class="lineCov"> 183 : l-&gt;lock_val--;</span></a>
+<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 183 : }</span></a>
<a name="59"><span class="lineNum"> 59 </span> : : </a>
-<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 167 : bool lock_held_by_me(struct lock *l)</span></a>
+<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 175 : bool lock_held_by_me(struct lock *l)</span></a>
<a name="61"><span class="lineNum"> 61 </span> : : {</a>
-<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 167 : return l-&gt;lock_val;</span></a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 175 : return l-&gt;lock_val;</span></a>
<a name="63"><span class="lineNum"> 63 </span> : : }</a>
<a name="64"><span class="lineNum"> 64 </span> : : </a>
<a name="65"><span class="lineNum"> 65 </span> : : #define TEST_HEAP_ORDER 16</a>
diff --git a/coverage-report/core/test/run-msg.c.func-sort-c.html b/coverage-report/core/test/run-msg.c.func-sort-c.html
index 66716e1..944e345 100644
--- a/coverage-report/core/test/run-msg.c.func-sort-c.html
+++ b/coverage-report/core/test/run-msg.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
diff --git a/coverage-report/core/test/run-msg.c.func.html b/coverage-report/core/test/run-msg.c.func.html
index 6e15e0e..9eef946 100644
--- a/coverage-report/core/test/run-msg.c.func.html
+++ b/coverage-report/core/test/run-msg.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
diff --git a/coverage-report/core/test/run-msg.c.gcov.html b/coverage-report/core/test/run-msg.c.gcov.html
index 6690252..dc0be47 100644
--- a/coverage-report/core/test/run-msg.c.gcov.html
+++ b/coverage-report/core/test/run-msg.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
diff --git a/coverage-report/core/test/run-nvram-format.c.func-sort-c.html b/coverage-report/core/test/run-nvram-format.c.func-sort-c.html
index 1626bc4..024a763 100644
--- a/coverage-report/core/test/run-nvram-format.c.func-sort-c.html
+++ b/coverage-report/core/test/run-nvram-format.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/core/test/run-nvram-format.c.func.html b/coverage-report/core/test/run-nvram-format.c.func.html
index bc11f8d..e0d5ed3 100644
--- a/coverage-report/core/test/run-nvram-format.c.func.html
+++ b/coverage-report/core/test/run-nvram-format.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/core/test/run-nvram-format.c.gcov.html b/coverage-report/core/test/run-nvram-format.c.gcov.html
index a304d34..a072506 100644
--- a/coverage-report/core/test/run-nvram-format.c.gcov.html
+++ b/coverage-report/core/test/run-nvram-format.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/core/test/run-pci-quirk.c.func-sort-c.html b/coverage-report/core/test/run-pci-quirk.c.func-sort-c.html
index f41d772..e43eef2 100644
--- a/coverage-report/core/test/run-pci-quirk.c.func-sort-c.html
+++ b/coverage-report/core/test/run-pci-quirk.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/core/test/run-pci-quirk.c.func.html b/coverage-report/core/test/run-pci-quirk.c.func.html
index 58baa85..73684ed 100644
--- a/coverage-report/core/test/run-pci-quirk.c.func.html
+++ b/coverage-report/core/test/run-pci-quirk.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/core/test/run-pci-quirk.c.gcov.html b/coverage-report/core/test/run-pci-quirk.c.gcov.html
index 30343be..1240a12 100644
--- a/coverage-report/core/test/run-pci-quirk.c.gcov.html
+++ b/coverage-report/core/test/run-pci-quirk.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/core/test/run-pel.c.func-sort-c.html b/coverage-report/core/test/run-pel.c.func-sort-c.html
index 0909404..7c4922b 100644
--- a/coverage-report/core/test/run-pel.c.func-sort-c.html
+++ b/coverage-report/core/test/run-pel.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/test/run-pel.c.func.html b/coverage-report/core/test/run-pel.c.func.html
index 5ef3e7b..5576d30 100644
--- a/coverage-report/core/test/run-pel.c.func.html
+++ b/coverage-report/core/test/run-pel.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/test/run-pel.c.gcov.html b/coverage-report/core/test/run-pel.c.gcov.html
index e3476f7..31a13ae 100644
--- a/coverage-report/core/test/run-pel.c.gcov.html
+++ b/coverage-report/core/test/run-pel.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/core/test/run-pool.c.func-sort-c.html b/coverage-report/core/test/run-pool.c.func-sort-c.html
index be88a84..bbcb4d3 100644
--- a/coverage-report/core/test/run-pool.c.func-sort-c.html
+++ b/coverage-report/core/test/run-pool.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-pool.c.func.html b/coverage-report/core/test/run-pool.c.func.html
index b09080b..d9ec70f 100644
--- a/coverage-report/core/test/run-pool.c.func.html
+++ b/coverage-report/core/test/run-pool.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-pool.c.gcov.html b/coverage-report/core/test/run-pool.c.gcov.html
index fb6e4e9..4133192 100644
--- a/coverage-report/core/test/run-pool.c.gcov.html
+++ b/coverage-report/core/test/run-pool.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-time-utils.c.func-sort-c.html b/coverage-report/core/test/run-time-utils.c.func-sort-c.html
index 4f965a1..1098e9b 100644
--- a/coverage-report/core/test/run-time-utils.c.func-sort-c.html
+++ b/coverage-report/core/test/run-time-utils.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-time-utils.c.func.html b/coverage-report/core/test/run-time-utils.c.func.html
index b765541..8f6ba7d 100644
--- a/coverage-report/core/test/run-time-utils.c.func.html
+++ b/coverage-report/core/test/run-time-utils.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-time-utils.c.gcov.html b/coverage-report/core/test/run-time-utils.c.gcov.html
index 31a7895..e9e007e 100644
--- a/coverage-report/core/test/run-time-utils.c.gcov.html
+++ b/coverage-report/core/test/run-time-utils.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-timebase.c.func-sort-c.html b/coverage-report/core/test/run-timebase.c.func-sort-c.html
index 3a2c033..883519d 100644
--- a/coverage-report/core/test/run-timebase.c.func-sort-c.html
+++ b/coverage-report/core/test/run-timebase.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-timebase.c.func.html b/coverage-report/core/test/run-timebase.c.func.html
index 1393e80..adaa580 100644
--- a/coverage-report/core/test/run-timebase.c.func.html
+++ b/coverage-report/core/test/run-timebase.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-timebase.c.gcov.html b/coverage-report/core/test/run-timebase.c.gcov.html
index 410a3d3..a7b50f9 100644
--- a/coverage-report/core/test/run-timebase.c.gcov.html
+++ b/coverage-report/core/test/run-timebase.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/core/test/run-timer.c.func-sort-c.html b/coverage-report/core/test/run-timer.c.func-sort-c.html
index 7fb6cd9..ea61011 100644
--- a/coverage-report/core/test/run-timer.c.func-sort-c.html
+++ b/coverage-report/core/test/run-timer.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">25</td>
<td class="headerCovTableEntry">27</td>
- <td class="headerCovTableEntryHi">92.6 %</td>
+ <td class="headerCovTableEntry">27</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">6</td>
<td class="headerCovTableEntry">7</td>
- <td class="headerCovTableEntryMed">85.7 %</td>
+ <td class="headerCovTableEntry">7</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td></td>
@@ -69,10 +69,6 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="run-timer.c.gcov.html#56">p8_sbe_update_timer_expiry</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="run-timer.c.gcov.html#37">init_rand</a></td>
<td class="coverFnHi">1</td>
</tr>
@@ -85,7 +81,11 @@
<td class="coverFnHi">100</td>
</tr>
<tr>
- <td class="coverFn"><a href="run-timer.c.gcov.html#62">p9_sbe_update_timer_expiry</a></td>
+ <td class="coverFn"><a href="run-timer.c.gcov.html#62">sbe_timer_ok</a></td>
+ <td class="coverFnHi">100</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="run-timer.c.gcov.html#56">sbe_update_timer_expiry</a></td>
<td class="coverFnHi">100</td>
</tr>
<tr>
diff --git a/coverage-report/core/test/run-timer.c.func.html b/coverage-report/core/test/run-timer.c.func.html
index 3f18ee2..4184f04 100644
--- a/coverage-report/core/test/run-timer.c.func.html
+++ b/coverage-report/core/test/run-timer.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">25</td>
<td class="headerCovTableEntry">27</td>
- <td class="headerCovTableEntryHi">92.6 %</td>
+ <td class="headerCovTableEntry">27</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">6</td>
<td class="headerCovTableEntry">7</td>
- <td class="headerCovTableEntryMed">85.7 %</td>
+ <td class="headerCovTableEntry">7</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td></td>
@@ -85,11 +85,11 @@
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="run-timer.c.gcov.html#56">p8_sbe_update_timer_expiry</a></td>
- <td class="coverFnLo">0</td>
+ <td class="coverFn"><a href="run-timer.c.gcov.html#62">sbe_timer_ok</a></td>
+ <td class="coverFnHi">100</td>
</tr>
<tr>
- <td class="coverFn"><a href="run-timer.c.gcov.html#62">p9_sbe_update_timer_expiry</a></td>
+ <td class="coverFn"><a href="run-timer.c.gcov.html#56">sbe_update_timer_expiry</a></td>
<td class="coverFnHi">100</td>
</tr>
<tr>
diff --git a/coverage-report/core/test/run-timer.c.gcov.html b/coverage-report/core/test/run-timer.c.gcov.html
index ce1526b..68d70ca 100644
--- a/coverage-report/core/test/run-timer.c.gcov.html
+++ b/coverage-report/core/test/run-timer.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">25</td>
<td class="headerCovTableEntry">27</td>
- <td class="headerCovTableEntryHi">92.6 %</td>
+ <td class="headerCovTableEntry">27</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">6</td>
<td class="headerCovTableEntry">7</td>
- <td class="headerCovTableEntryMed">85.7 %</td>
+ <td class="headerCovTableEntry">7</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td></td>
@@ -87,7 +87,7 @@
<a name="16"><span class="lineNum"> 16 </span> : : #define smt_lowest()</a>
<a name="17"><span class="lineNum"> 17 </span> : : #define smt_medium()</a>
<a name="18"><span class="lineNum"> 18 </span> : : </a>
-<a name="19"><span class="lineNum"> 19 </span> : : enum proc_gen proc_gen = proc_gen_p9;</a>
+<a name="19"><span class="lineNum"> 19 </span> : : enum proc_gen proc_gen = proc_gen_unknown;</a>
<a name="20"><span class="lineNum"> 20 </span> : : </a>
<a name="21"><span class="lineNum"> 21 </span> : : static uint64_t stamp, last;</a>
<a name="22"><span class="lineNum"> 22 </span> : : struct lock;</a>
@@ -126,16 +126,16 @@
<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 100 : count--;</span></a>
<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 100 : }</span></a>
<a name="57"><span class="lineNum"> 57 </span> : : </a>
-<a name="58"><span class="lineNum"> 58 </span> :<span class="lineNoCov"> 0 : void p8_sbe_update_timer_expiry(uint64_t new_target)</span></a>
+<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 100 : void sbe_update_timer_expiry(uint64_t new_target)</span></a>
<a name="59"><span class="lineNum"> 59 </span> : : {</a>
<a name="60"><span class="lineNum"> 60 </span> : : (void)new_target;</a>
<a name="61"><span class="lineNum"> 61 </span> : : /* FIXME: do intersting SLW timer sim */</a>
-<a name="62"><span class="lineNum"> 62 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 100 : }</span></a>
<a name="63"><span class="lineNum"> 63 </span> : : </a>
-<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 100 : void p9_sbe_update_timer_expiry(uint64_t new_target)</span></a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 100 : bool sbe_timer_ok(void)</span></a>
<a name="65"><span class="lineNum"> 65 </span> : : {</a>
-<a name="66"><span class="lineNum"> 66 </span> : : (void)new_target;</a>
-<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 100 : }</span></a>
+<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 100 : return true;</span></a>
+<a name="67"><span class="lineNum"> 67 </span> : : }</a>
<a name="68"><span class="lineNum"> 68 </span> : : </a>
<a name="69"><span class="lineNum"> 69 </span> :<span class="lineCov"> 1 : int main(void)</span></a>
<a name="70"><span class="lineNum"> 70 </span> : : {</a>
diff --git a/coverage-report/core/test/run-trace.c.func-sort-c.html b/coverage-report/core/test/run-trace.c.func-sort-c.html
index 2f2802e..ccba85b 100644
--- a/coverage-report/core/test/run-trace.c.func-sort-c.html
+++ b/coverage-report/core/test/run-trace.c.func-sort-c.html
@@ -32,17 +32,17 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">195</td>
- <td class="headerCovTableEntry">196</td>
- <td class="headerCovTableEntryHi">99.5 %</td>
+ <td class="headerCovTableEntry">198</td>
+ <td class="headerCovTableEntryHi">98.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">11</td>
- <td class="headerCovTableEntry">11</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryHi">91.7 %</td>
</tr>
<tr>
<td></td>
@@ -69,11 +69,15 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="run-trace.c.gcov.html#253">main</a></td>
+ <td class="coverFn"><a href="run-trace.c.gcov.html#103">nvram_query_safe</a></td>
+ <td class="coverFnLo">0</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="run-trace.c.gcov.html#258">main</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="run-trace.c.gcov.html#155">test_parallel</a></td>
+ <td class="coverFn"><a href="run-trace.c.gcov.html#160">test_parallel</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
@@ -81,7 +85,7 @@
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="run-trace.c.gcov.html#125">write_trace_entries</a></td>
+ <td class="coverFn"><a href="run-trace.c.gcov.html#130">write_trace_entries</a></td>
<td class="coverFnHi">4</td>
</tr>
<tr>
@@ -89,28 +93,28 @@
<td class="coverFnHi">15</td>
</tr>
<tr>
- <td class="coverFn"><a href="run-trace.c.gcov.html#145">all_done</a></td>
- <td class="coverFnHi">1870638</td>
+ <td class="coverFn"><a href="run-trace.c.gcov.html#150">all_done</a></td>
+ <td class="coverFnHi">1896250</td>
</tr>
<tr>
- <td class="coverFn"><a href="run-trace.c.gcov.html#103">lock_caller</a></td>
- <td class="coverFnHi">6418116</td>
+ <td class="coverFn"><a href="run-trace.c.gcov.html#108">lock_caller</a></td>
+ <td class="coverFnHi">6418120</td>
</tr>
<tr>
<td class="coverFn"><a href="run-trace.c.gcov.html#71">mftb</a></td>
- <td class="coverFnHi">6418116</td>
+ <td class="coverFnHi">6418120</td>
</tr>
<tr>
- <td class="coverFn"><a href="run-trace.c.gcov.html#110">unlock</a></td>
- <td class="coverFnHi">6418116</td>
+ <td class="coverFn"><a href="run-trace.c.gcov.html#115">unlock</a></td>
+ <td class="coverFnHi">6418120</td>
</tr>
<tr>
<td class="coverFn"><a href="run-trace.c.gcov.html#25">full_barrier</a></td>
- <td class="coverFnHi">10850485</td>
+ <td class="coverFnHi">10850500</td>
</tr>
<tr>
- <td class="coverFn"><a href="run-trace.c.gcov.html#117">this_cpu</a></td>
- <td class="coverFnHi">12836233</td>
+ <td class="coverFn"><a href="run-trace.c.gcov.html#122">this_cpu</a></td>
+ <td class="coverFnHi">12836200</td>
</tr>
</table>
<br>
diff --git a/coverage-report/core/test/run-trace.c.func.html b/coverage-report/core/test/run-trace.c.func.html
index 881a44a..9a228f9 100644
--- a/coverage-report/core/test/run-trace.c.func.html
+++ b/coverage-report/core/test/run-trace.c.func.html
@@ -32,17 +32,17 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">195</td>
- <td class="headerCovTableEntry">196</td>
- <td class="headerCovTableEntryHi">99.5 %</td>
+ <td class="headerCovTableEntry">198</td>
+ <td class="headerCovTableEntryHi">98.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">11</td>
- <td class="headerCovTableEntry">11</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryHi">91.7 %</td>
</tr>
<tr>
<td></td>
@@ -69,47 +69,51 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="run-trace.c.func-sort-c.html"><img src="../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="run-trace.c.gcov.html#145">all_done</a></td>
- <td class="coverFnHi">1870638</td>
+ <td class="coverFn"><a href="run-trace.c.gcov.html#150">all_done</a></td>
+ <td class="coverFnHi">1896250</td>
</tr>
<tr>
<td class="coverFn"><a href="run-trace.c.gcov.html#25">full_barrier</a></td>
- <td class="coverFnHi">10850485</td>
+ <td class="coverFnHi">10850500</td>
</tr>
<tr>
<td class="coverFn"><a href="run-trace.c.gcov.html#76">local_alloc</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="run-trace.c.gcov.html#103">lock_caller</a></td>
- <td class="coverFnHi">6418116</td>
+ <td class="coverFn"><a href="run-trace.c.gcov.html#108">lock_caller</a></td>
+ <td class="coverFnHi">6418120</td>
</tr>
<tr>
- <td class="coverFn"><a href="run-trace.c.gcov.html#253">main</a></td>
+ <td class="coverFn"><a href="run-trace.c.gcov.html#258">main</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
<td class="coverFn"><a href="run-trace.c.gcov.html#71">mftb</a></td>
- <td class="coverFnHi">6418116</td>
+ <td class="coverFnHi">6418120</td>
</tr>
<tr>
<td class="coverFn"><a href="run-trace.c.gcov.html#55">next_cpu</a></td>
<td class="coverFnHi">15</td>
</tr>
<tr>
- <td class="coverFn"><a href="run-trace.c.gcov.html#155">test_parallel</a></td>
+ <td class="coverFn"><a href="run-trace.c.gcov.html#103">nvram_query_safe</a></td>
+ <td class="coverFnLo">0</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="run-trace.c.gcov.html#160">test_parallel</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="run-trace.c.gcov.html#117">this_cpu</a></td>
- <td class="coverFnHi">12836233</td>
+ <td class="coverFn"><a href="run-trace.c.gcov.html#122">this_cpu</a></td>
+ <td class="coverFnHi">12836200</td>
</tr>
<tr>
- <td class="coverFn"><a href="run-trace.c.gcov.html#110">unlock</a></td>
- <td class="coverFnHi">6418116</td>
+ <td class="coverFn"><a href="run-trace.c.gcov.html#115">unlock</a></td>
+ <td class="coverFnHi">6418120</td>
</tr>
<tr>
- <td class="coverFn"><a href="run-trace.c.gcov.html#125">write_trace_entries</a></td>
+ <td class="coverFn"><a href="run-trace.c.gcov.html#130">write_trace_entries</a></td>
<td class="coverFnHi">4</td>
</tr>
</table>
diff --git a/coverage-report/core/test/run-trace.c.gcov.html b/coverage-report/core/test/run-trace.c.gcov.html
index 56ce678..1f0ffc3 100644
--- a/coverage-report/core/test/run-trace.c.gcov.html
+++ b/coverage-report/core/test/run-trace.c.gcov.html
@@ -32,17 +32,17 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">195</td>
- <td class="headerCovTableEntry">196</td>
- <td class="headerCovTableEntryHi">99.5 %</td>
+ <td class="headerCovTableEntry">198</td>
+ <td class="headerCovTableEntryHi">98.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">11</td>
- <td class="headerCovTableEntry">11</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryHi">91.7 %</td>
</tr>
<tr>
<td></td>
@@ -95,10 +95,10 @@
<a name="24"><span class="lineNum"> 24 </span> : : </a>
<a name="25"><span class="lineNum"> 25 </span> : : #if defined(__i386__) || defined(__x86_64__)</a>
<a name="26"><span class="lineNum"> 26 </span> : : /* This is more than a lwsync, but it'll work */</a>
-<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 10850485 : static void full_barrier(void)</span></a>
+<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 10850500 : static void full_barrier(void)</span></a>
<a name="28"><span class="lineNum"> 28 </span> : : {</a>
-<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 10850485 : asm volatile(&quot;mfence&quot; : : : &quot;memory&quot;);</span></a>
-<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 10850485 : }</span></a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 10850500 : asm volatile(&quot;mfence&quot; : : : &quot;memory&quot;);</span></a>
+<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 10850500 : }</span></a>
<a name="31"><span class="lineNum"> 31 </span> : : #define lwsync full_barrier</a>
<a name="32"><span class="lineNum"> 32 </span> : : #elif defined(__powerpc__) || defined(__powerpc64__)</a>
<a name="33"><span class="lineNum"> 33 </span> : : static inline void lwsync(void)</a>
@@ -141,9 +141,9 @@
<a name="70"><span class="lineNum"> 70 </span> : : for (cpu = first_cpu(); cpu; cpu = next_cpu(cpu))</a>
<a name="71"><span class="lineNum"> 71 </span> : : </a>
<a name="72"><span class="lineNum"> 72 </span> : : static unsigned long timestamp;</a>
-<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 6418116 : static unsigned long mftb(void)</span></a>
+<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 6418120 : static unsigned long mftb(void)</span></a>
<a name="74"><span class="lineNum"> 74 </span> : : {</a>
-<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 6418116 : return timestamp;</span></a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 6418120 : return timestamp;</span></a>
<a name="76"><span class="lineNum"> 76 </span> : : }</a>
<a name="77"><span class="lineNum"> 77 </span> : : </a>
<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 2 : static void *local_alloc(unsigned int chip_id,</span></a>
@@ -173,294 +173,299 @@
<a name="102"><span class="lineNum"> 102 </span> : : .trace_mask = -1</a>
<a name="103"><span class="lineNum"> 103 </span> : : };</a>
<a name="104"><span class="lineNum"> 104 </span> : : </a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 6418116 : void lock_caller(struct lock *l, const char *caller)</span></a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : const char *nvram_query_safe(const char *key __unused)</span></a>
<a name="106"><span class="lineNum"> 106 </span> : : {</a>
-<a name="107"><span class="lineNum"> 107 </span> : : (void)caller;</a>
-<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 6418116 : assert(!l-&gt;lock_val);</span></a>
-<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 6418116 : l-&gt;lock_val = 1;</span></a>
-<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 6418116 : }</span></a>
-<a name="111"><span class="lineNum"> 111 </span> : : </a>
-<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 6418116 : void unlock(struct lock *l)</span></a>
-<a name="113"><span class="lineNum"> 113 </span> : : {</a>
-<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 6418116 : assert(l-&gt;lock_val);</span></a>
-<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 6418116 : l-&gt;lock_val = 0;</span></a>
-<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 6418116 : }</span></a>
-<a name="117"><span class="lineNum"> 117 </span> : : </a>
-<a name="118"><span class="lineNum"> 118 </span> : : struct cpu_thread *my_fake_cpu;</a>
-<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 12836233 : static struct cpu_thread *this_cpu(void)</span></a>
-<a name="120"><span class="lineNum"> 120 </span> : : {</a>
-<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 12836233 : return my_fake_cpu;</span></a>
-<a name="122"><span class="lineNum"> 122 </span> : : }</a>
-<a name="123"><span class="lineNum"> 123 </span> : : </a>
-<a name="124"><span class="lineNum"> 124 </span> : : #include &lt;sys/mman.h&gt;</a>
-<a name="125"><span class="lineNum"> 125 </span> : : #define PER_CHILD_TRACES ((RUNNING_ON_VALGRIND) ? (1024*16) : (1024*1024))</a>
-<a name="126"><span class="lineNum"> 126 </span> : : </a>
-<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 4 : static void write_trace_entries(int id)</span></a>
-<a name="128"><span class="lineNum"> 128 </span> : : {</a>
-<a name="129"><span class="lineNum"> 129 </span> : : void exit(int);</a>
-<a name="130"><span class="lineNum"> 130 </span> : : unsigned int i;</a>
-<a name="131"><span class="lineNum"> 131 </span> : : union trace trace;</a>
-<a name="132"><span class="lineNum"> 132 </span> : : </a>
-<a name="133"><span class="lineNum"> 133 </span> :<span class="lineCov"> 4 : timestamp = id;</span></a>
-<a name="134"><span class="lineNum"> 134 </span> :<span class="lineCov"> 4194308 : for (i = 0; i &lt; PER_CHILD_TRACES; i++) {</span></a>
-<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 4194304 : timestamp = i * CPUS + id;</span></a>
-<a name="136"><span class="lineNum"> 136 </span> : : assert(sizeof(trace.hdr) % 8 == 0);</a>
-<a name="137"><span class="lineNum"> 137 </span> : : /* First child never repeats, second repeats once, etc. */</a>
-<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 4194304 : trace_add(&amp;trace, 3 + ((i / (id + 1)) % 0x40),</span></a>
-<a name="139"><span class="lineNum"> 139 </span> : : sizeof(trace.hdr));</a>
-<a name="140"><span class="lineNum"> 140 </span> : : }</a>
-<a name="141"><span class="lineNum"> 141 </span> : : </a>
-<a name="142"><span class="lineNum"> 142 </span> : : /* Final entry has special type, so parent knows it's over. */</a>
-<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 4 : trace_add(&amp;trace, 0x70, sizeof(trace.hdr));</span></a>
-<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 4 : exit(0);</span></a>
-<a name="145"><span class="lineNum"> 145 </span> : : }</a>
+<a name="107"><span class="lineNum"> 107 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="108"><span class="lineNum"> 108 </span> : : }</a>
+<a name="109"><span class="lineNum"> 109 </span> : : </a>
+<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 6418120 : void lock_caller(struct lock *l, const char *caller)</span></a>
+<a name="111"><span class="lineNum"> 111 </span> : : {</a>
+<a name="112"><span class="lineNum"> 112 </span> : : (void)caller;</a>
+<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 6418120 : assert(!l-&gt;lock_val);</span></a>
+<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 6418120 : l-&gt;lock_val = 1;</span></a>
+<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 6418120 : }</span></a>
+<a name="116"><span class="lineNum"> 116 </span> : : </a>
+<a name="117"><span class="lineNum"> 117 </span> :<span class="lineCov"> 6418120 : void unlock(struct lock *l)</span></a>
+<a name="118"><span class="lineNum"> 118 </span> : : {</a>
+<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 6418120 : assert(l-&gt;lock_val);</span></a>
+<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 6418120 : l-&gt;lock_val = 0;</span></a>
+<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 6418120 : }</span></a>
+<a name="122"><span class="lineNum"> 122 </span> : : </a>
+<a name="123"><span class="lineNum"> 123 </span> : : struct cpu_thread *my_fake_cpu;</a>
+<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 12836200 : static struct cpu_thread *this_cpu(void)</span></a>
+<a name="125"><span class="lineNum"> 125 </span> : : {</a>
+<a name="126"><span class="lineNum"> 126 </span> :<span class="lineCov"> 12836200 : return my_fake_cpu;</span></a>
+<a name="127"><span class="lineNum"> 127 </span> : : }</a>
+<a name="128"><span class="lineNum"> 128 </span> : : </a>
+<a name="129"><span class="lineNum"> 129 </span> : : #include &lt;sys/mman.h&gt;</a>
+<a name="130"><span class="lineNum"> 130 </span> : : #define PER_CHILD_TRACES ((RUNNING_ON_VALGRIND) ? (1024*16) : (1024*1024))</a>
+<a name="131"><span class="lineNum"> 131 </span> : : </a>
+<a name="132"><span class="lineNum"> 132 </span> :<span class="lineCov"> 4 : static void write_trace_entries(int id)</span></a>
+<a name="133"><span class="lineNum"> 133 </span> : : {</a>
+<a name="134"><span class="lineNum"> 134 </span> : : void exit(int);</a>
+<a name="135"><span class="lineNum"> 135 </span> : : unsigned int i;</a>
+<a name="136"><span class="lineNum"> 136 </span> : : union trace trace;</a>
+<a name="137"><span class="lineNum"> 137 </span> : : </a>
+<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 4 : timestamp = id;</span></a>
+<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 4194310 : for (i = 0; i &lt; PER_CHILD_TRACES; i++) {</span></a>
+<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 4194300 : timestamp = i * CPUS + id;</span></a>
+<a name="141"><span class="lineNum"> 141 </span> : : assert(sizeof(trace.hdr) % 8 == 0);</a>
+<a name="142"><span class="lineNum"> 142 </span> : : /* First child never repeats, second repeats once, etc. */</a>
+<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 4194300 : trace_add(&amp;trace, 3 + ((i / (id + 1)) % 0x40),</span></a>
+<a name="144"><span class="lineNum"> 144 </span> : : sizeof(trace.hdr));</a>
+<a name="145"><span class="lineNum"> 145 </span> : : }</a>
<a name="146"><span class="lineNum"> 146 </span> : : </a>
-<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 1870638 : static bool all_done(const bool done[])</span></a>
-<a name="148"><span class="lineNum"> 148 </span> : : {</a>
-<a name="149"><span class="lineNum"> 149 </span> : : unsigned int i;</a>
-<a name="150"><span class="lineNum"> 150 </span> : : </a>
-<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 2135583 : for (i = 0; i &lt; CPUS; i++)</span></a>
-<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 2135582 : if (!done[i])</span></a>
-<a name="153"><span class="lineNum"> 153 </span> :<span class="lineCov"> 1870637 : return false;</span></a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 1 : return true;</span></a>
-<a name="155"><span class="lineNum"> 155 </span> : : }</a>
-<a name="156"><span class="lineNum"> 156 </span> : : </a>
-<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 1 : static void test_parallel(void)</span></a>
-<a name="158"><span class="lineNum"> 158 </span> : : {</a>
-<a name="159"><span class="lineNum"> 159 </span> : : void *p;</a>
-<a name="160"><span class="lineNum"> 160 </span> : : unsigned int cpu;</a>
-<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 1 : unsigned int i, counts[CPUS] = { 0 }, overflows[CPUS] = { 0 };</span></a>
-<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 1 : unsigned int repeats[CPUS] = { 0 }, num_overflows[CPUS] = { 0 };</span></a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 1 : bool done[CPUS] = { false };</span></a>
-<a name="164"><span class="lineNum"> 164 </span> :<span class="lineCov"> 1 : size_t len = sizeof(struct trace_info) + TBUF_SZ + sizeof(union trace);</span></a>
-<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 1 : int last = 0;</span></a>
-<a name="166"><span class="lineNum"> 166 </span> : : </a>
-<a name="167"><span class="lineNum"> 167 </span> : : /* Use a shared mmap to test actual parallel buffers. */</a>
-<a name="168"><span class="lineNum"> 168 </span> :<span class="lineCov"> 1 : i = (CPUS*len + getpagesize()-1)&amp;~(getpagesize()-1);</span></a>
-<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 1 : p = mmap(NULL, i, PROT_READ|PROT_WRITE,</span></a>
-<a name="170"><span class="lineNum"> 170 </span> : : MAP_ANONYMOUS|MAP_SHARED, -1, 0);</a>
+<a name="147"><span class="lineNum"> 147 </span> : : /* Final entry has special type, so parent knows it's over. */</a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 4 : trace_add(&amp;trace, 0x70, sizeof(trace.hdr));</span></a>
+<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 4 : exit(0);</span></a>
+<a name="150"><span class="lineNum"> 150 </span> : : }</a>
+<a name="151"><span class="lineNum"> 151 </span> : : </a>
+<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 1896250 : static bool all_done(const bool done[])</span></a>
+<a name="153"><span class="lineNum"> 153 </span> : : {</a>
+<a name="154"><span class="lineNum"> 154 </span> : : unsigned int i;</a>
+<a name="155"><span class="lineNum"> 155 </span> : : </a>
+<a name="156"><span class="lineNum"> 156 </span> :<span class="lineCov"> 2030970 : for (i = 0; i &lt; CPUS; i++)</span></a>
+<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 2030970 : if (!done[i])</span></a>
+<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 1896250 : return false;</span></a>
+<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 1 : return true;</span></a>
+<a name="160"><span class="lineNum"> 160 </span> : : }</a>
+<a name="161"><span class="lineNum"> 161 </span> : : </a>
+<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 1 : static void test_parallel(void)</span></a>
+<a name="163"><span class="lineNum"> 163 </span> : : {</a>
+<a name="164"><span class="lineNum"> 164 </span> : : void *p;</a>
+<a name="165"><span class="lineNum"> 165 </span> : : unsigned int cpu;</a>
+<a name="166"><span class="lineNum"> 166 </span> :<span class="lineCov"> 1 : unsigned int i, counts[CPUS] = { 0 }, overflows[CPUS] = { 0 };</span></a>
+<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 1 : unsigned int repeats[CPUS] = { 0 }, num_overflows[CPUS] = { 0 };</span></a>
+<a name="168"><span class="lineNum"> 168 </span> :<span class="lineCov"> 1 : bool done[CPUS] = { false };</span></a>
+<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 1 : size_t len = sizeof(struct trace_info) + TBUF_SZ + sizeof(union trace);</span></a>
+<a name="170"><span class="lineNum"> 170 </span> :<span class="lineCov"> 1 : int last = 0;</span></a>
<a name="171"><span class="lineNum"> 171 </span> : : </a>
-<a name="172"><span class="lineNum"> 172 </span> :<span class="lineCov"> 5 : for (i = 0; i &lt; CPUS; i++) {</span></a>
-<a name="173"><span class="lineNum"> 173 </span> :<span class="lineCov"> 4 : fake_cpus[i].trace = p + i * len;</span></a>
-<a name="174"><span class="lineNum"> 174 </span> :<span class="lineCov"> 4 : fake_cpus[i].trace-&gt;tb.buf_size = cpu_to_be64(TBUF_SZ);</span></a>
-<a name="175"><span class="lineNum"> 175 </span> :<span class="lineCov"> 4 : fake_cpus[i].trace-&gt;tb.max_size = cpu_to_be32(sizeof(union trace));</span></a>
-<a name="176"><span class="lineNum"> 176 </span> :<span class="lineCov"> 4 : fake_cpus[i].is_secondary = false;</span></a>
-<a name="177"><span class="lineNum"> 177 </span> :<span class="lineCov"> 4 : memset(&amp;trace_readers[i], 0, sizeof(struct trace_reader));</span></a>
-<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 4 : trace_readers[i].tb = &amp;fake_cpus[i].trace-&gt;tb;</span></a>
-<a name="179"><span class="lineNum"> 179 </span> : : }</a>
-<a name="180"><span class="lineNum"> 180 </span> : : </a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 5 : for (i = 0; i &lt; CPUS; i++) {</span></a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 4 : if (!fork()) {</span></a>
-<a name="183"><span class="lineNum"> 183 </span> : : /* Child. */</a>
-<a name="184"><span class="lineNum"> 184 </span> :<span class="lineCov"> 4 : my_fake_cpu = &amp;fake_cpus[i];</span></a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 4 : write_trace_entries(i);</span></a>
-<a name="186"><span class="lineNum"> 186 </span> : : }</a>
-<a name="187"><span class="lineNum"> 187 </span> : : }</a>
-<a name="188"><span class="lineNum"> 188 </span> : : </a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 1870638 : while (!all_done(done)) {</span></a>
-<a name="190"><span class="lineNum"> 190 </span> : : union trace t;</a>
-<a name="191"><span class="lineNum"> 191 </span> : : </a>
-<a name="192"><span class="lineNum"> 192 </span> :<span class="lineCov"> 1877218 : for (i = 0; i &lt; CPUS; i++) {</span></a>
-<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 1875579 : if (trace_get(&amp;t, &amp;trace_readers[(i+last) % CPUS]))</span></a>
-<a name="194"><span class="lineNum"> 194 </span> :<span class="lineCov"> 1868998 : break;</span></a>
-<a name="195"><span class="lineNum"> 195 </span> : : }</a>
+<a name="172"><span class="lineNum"> 172 </span> : : /* Use a shared mmap to test actual parallel buffers. */</a>
+<a name="173"><span class="lineNum"> 173 </span> :<span class="lineCov"> 1 : i = (CPUS*len + getpagesize()-1)&amp;~(getpagesize()-1);</span></a>
+<a name="174"><span class="lineNum"> 174 </span> :<span class="lineCov"> 1 : p = mmap(NULL, i, PROT_READ|PROT_WRITE,</span></a>
+<a name="175"><span class="lineNum"> 175 </span> : : MAP_ANONYMOUS|MAP_SHARED, -1, 0);</a>
+<a name="176"><span class="lineNum"> 176 </span> : : </a>
+<a name="177"><span class="lineNum"> 177 </span> :<span class="lineCov"> 5 : for (i = 0; i &lt; CPUS; i++) {</span></a>
+<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 4 : fake_cpus[i].trace = p + i * len;</span></a>
+<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 4 : fake_cpus[i].trace-&gt;tb.buf_size = cpu_to_be64(TBUF_SZ);</span></a>
+<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 4 : fake_cpus[i].trace-&gt;tb.max_size = cpu_to_be32(sizeof(union trace));</span></a>
+<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 4 : fake_cpus[i].is_secondary = false;</span></a>
+<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 4 : memset(&amp;trace_readers[i], 0, sizeof(struct trace_reader));</span></a>
+<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 4 : trace_readers[i].tb = &amp;fake_cpus[i].trace-&gt;tb;</span></a>
+<a name="184"><span class="lineNum"> 184 </span> : : }</a>
+<a name="185"><span class="lineNum"> 185 </span> : : </a>
+<a name="186"><span class="lineNum"> 186 </span> :<span class="lineCov"> 5 : for (i = 0; i &lt; CPUS; i++) {</span></a>
+<a name="187"><span class="lineNum"> 187 </span> :<span class="lineCov"> 4 : if (!fork()) {</span></a>
+<a name="188"><span class="lineNum"> 188 </span> : : /* Child. */</a>
+<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 4 : my_fake_cpu = &amp;fake_cpus[i];</span></a>
+<a name="190"><span class="lineNum"> 190 </span> :<span class="lineCov"> 4 : write_trace_entries(i);</span></a>
+<a name="191"><span class="lineNum"> 191 </span> : : }</a>
+<a name="192"><span class="lineNum"> 192 </span> : : }</a>
+<a name="193"><span class="lineNum"> 193 </span> : : </a>
+<a name="194"><span class="lineNum"> 194 </span> :<span class="lineCov"> 1896250 : while (!all_done(done)) {</span></a>
+<a name="195"><span class="lineNum"> 195 </span> : : union trace t;</a>
<a name="196"><span class="lineNum"> 196 </span> : : </a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 1870637 : if (i == CPUS) {</span></a>
-<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 1639 : sched_yield();</span></a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineCov"> 1682 : continue;</span></a>
+<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 1908780 : for (i = 0; i &lt; CPUS; i++) {</span></a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 1905660 : if (trace_get(&amp;t, &amp;trace_readers[(i+last) % CPUS]))</span></a>
+<a name="199"><span class="lineNum"> 199 </span> :<span class="lineCov"> 1893120 : break;</span></a>
<a name="200"><span class="lineNum"> 200 </span> : : }</a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 1868998 : i = (i + last) % CPUS;</span></a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineCov"> 1868998 : last = i;</span></a>
-<a name="203"><span class="lineNum"> 203 </span> : : </a>
-<a name="204"><span class="lineNum"> 204 </span> :<span class="lineCov"> 1868998 : if (t.hdr.type == TRACE_OVERFLOW) {</span></a>
-<a name="205"><span class="lineNum"> 205 </span> : : /* Conveniently, each record is 16 bytes here. */</a>
-<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 43 : assert(be64_to_cpu(t.overflow.bytes_missed) % 16 == 0);</span></a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 43 : overflows[i] += be64_to_cpu(t.overflow.bytes_missed) / 16;</span></a>
-<a name="208"><span class="lineNum"> 208 </span> :<span class="lineCov"> 43 : num_overflows[i]++;</span></a>
-<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 43 : continue;</span></a>
-<a name="210"><span class="lineNum"> 210 </span> : : }</a>
-<a name="211"><span class="lineNum"> 211 </span> : : </a>
-<a name="212"><span class="lineNum"> 212 </span> :<span class="lineCov"> 1868955 : assert(be16_to_cpu(t.hdr.cpu) &lt; CPUS);</span></a>
-<a name="213"><span class="lineNum"> 213 </span> :<span class="lineCov"> 1868955 : assert(!done[be16_to_cpu(t.hdr.cpu)]);</span></a>
-<a name="214"><span class="lineNum"> 214 </span> :<span class="lineCov"> 1868955 : assert(be64_to_cpu(t.hdr.timestamp) % CPUS == be16_to_cpu(t.hdr.cpu));</span></a>
-<a name="215"><span class="lineNum"> 215 </span> :<span class="lineCov"> 1868955 : if (t.hdr.type == TRACE_REPEAT) {</span></a>
-<a name="216"><span class="lineNum"> 216 </span> :<span class="lineCov"> 723945 : assert(t.hdr.len_div_8 * 8 == sizeof(t.repeat));</span></a>
-<a name="217"><span class="lineNum"> 217 </span> :<span class="lineCov"> 723945 : assert(be16_to_cpu(t.repeat.num) != 0);</span></a>
-<a name="218"><span class="lineNum"> 218 </span> :<span class="lineCov"> 723945 : assert(be16_to_cpu(t.repeat.num) &lt;= be16_to_cpu(t.hdr.cpu));</span></a>
-<a name="219"><span class="lineNum"> 219 </span> :<span class="lineCov"> 723945 : repeats[be16_to_cpu(t.hdr.cpu)] += be16_to_cpu(t.repeat.num);</span></a>
-<a name="220"><span class="lineNum"> 220 </span> :<span class="lineCov"> 1145010 : } else if (t.hdr.type == 0x70) {</span></a>
-<a name="221"><span class="lineNum"> 221 </span> :<span class="lineCov"> 4 : cpu = be16_to_cpu(t.hdr.cpu);</span></a>
-<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 4 : assert(cpu &lt; CPUS);</span></a>
-<a name="223"><span class="lineNum"> 223 </span> :<span class="lineCov"> 4 : done[cpu] = true;</span></a>
-<a name="224"><span class="lineNum"> 224 </span> : : } else {</a>
-<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 1145006 : cpu = be16_to_cpu(t.hdr.cpu);</span></a>
-<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 1145006 : assert(cpu &lt; CPUS);</span></a>
-<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 1145006 : counts[cpu]++;</span></a>
-<a name="228"><span class="lineNum"> 228 </span> : : }</a>
-<a name="229"><span class="lineNum"> 229 </span> : : }</a>
-<a name="230"><span class="lineNum"> 230 </span> : : </a>
-<a name="231"><span class="lineNum"> 231 </span> : : /* Gather children. */</a>
-<a name="232"><span class="lineNum"> 232 </span> :<span class="lineCov"> 5 : for (i = 0; i &lt; CPUS; i++) {</span></a>
-<a name="233"><span class="lineNum"> 233 </span> : : int status;</a>
-<a name="234"><span class="lineNum"> 234 </span> :<span class="lineCov"> 4 : wait(&amp;status);</span></a>
-<a name="235"><span class="lineNum"> 235 </span> : : }</a>
-<a name="236"><span class="lineNum"> 236 </span> : : </a>
+<a name="201"><span class="lineNum"> 201 </span> : : </a>
+<a name="202"><span class="lineNum"> 202 </span> :<span class="lineCov"> 1896250 : if (i == CPUS) {</span></a>
+<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 3127 : sched_yield();</span></a>
+<a name="204"><span class="lineNum"> 204 </span> :<span class="lineCov"> 3155 : continue;</span></a>
+<a name="205"><span class="lineNum"> 205 </span> : : }</a>
+<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 1893120 : i = (i + last) % CPUS;</span></a>
+<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 1893120 : last = i;</span></a>
+<a name="208"><span class="lineNum"> 208 </span> : : </a>
+<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 1893120 : if (t.hdr.type == TRACE_OVERFLOW) {</span></a>
+<a name="210"><span class="lineNum"> 210 </span> : : /* Conveniently, each record is 16 bytes here. */</a>
+<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 28 : assert(be64_to_cpu(t.overflow.bytes_missed) % 16 == 0);</span></a>
+<a name="212"><span class="lineNum"> 212 </span> :<span class="lineCov"> 28 : overflows[i] += be64_to_cpu(t.overflow.bytes_missed) / 16;</span></a>
+<a name="213"><span class="lineNum"> 213 </span> :<span class="lineCov"> 28 : num_overflows[i]++;</span></a>
+<a name="214"><span class="lineNum"> 214 </span> :<span class="lineCov"> 28 : continue;</span></a>
+<a name="215"><span class="lineNum"> 215 </span> : : }</a>
+<a name="216"><span class="lineNum"> 216 </span> : : </a>
+<a name="217"><span class="lineNum"> 217 </span> :<span class="lineCov"> 1893090 : assert(be16_to_cpu(t.hdr.cpu) &lt; CPUS);</span></a>
+<a name="218"><span class="lineNum"> 218 </span> :<span class="lineCov"> 1893090 : assert(!done[be16_to_cpu(t.hdr.cpu)]);</span></a>
+<a name="219"><span class="lineNum"> 219 </span> :<span class="lineCov"> 1893090 : assert(be64_to_cpu(t.hdr.timestamp) % CPUS == be16_to_cpu(t.hdr.cpu));</span></a>
+<a name="220"><span class="lineNum"> 220 </span> :<span class="lineCov"> 1893090 : if (t.hdr.type == TRACE_REPEAT) {</span></a>
+<a name="221"><span class="lineNum"> 221 </span> :<span class="lineCov"> 713768 : assert(t.hdr.len_div_8 * 8 == sizeof(t.repeat));</span></a>
+<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 713768 : assert(be16_to_cpu(t.repeat.num) != 0);</span></a>
+<a name="223"><span class="lineNum"> 223 </span> :<span class="lineCov"> 713768 : assert(be16_to_cpu(t.repeat.num) &lt;= be16_to_cpu(t.hdr.cpu));</span></a>
+<a name="224"><span class="lineNum"> 224 </span> :<span class="lineCov"> 713768 : repeats[be16_to_cpu(t.hdr.cpu)] += be16_to_cpu(t.repeat.num);</span></a>
+<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 1179330 : } else if (t.hdr.type == 0x70) {</span></a>
+<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 4 : cpu = be16_to_cpu(t.hdr.cpu);</span></a>
+<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 4 : assert(cpu &lt; CPUS);</span></a>
+<a name="228"><span class="lineNum"> 228 </span> :<span class="lineCov"> 4 : done[cpu] = true;</span></a>
+<a name="229"><span class="lineNum"> 229 </span> : : } else {</a>
+<a name="230"><span class="lineNum"> 230 </span> :<span class="lineCov"> 1179320 : cpu = be16_to_cpu(t.hdr.cpu);</span></a>
+<a name="231"><span class="lineNum"> 231 </span> :<span class="lineCov"> 1179320 : assert(cpu &lt; CPUS);</span></a>
+<a name="232"><span class="lineNum"> 232 </span> :<span class="lineCov"> 1179320 : counts[cpu]++;</span></a>
+<a name="233"><span class="lineNum"> 233 </span> : : }</a>
+<a name="234"><span class="lineNum"> 234 </span> : : }</a>
+<a name="235"><span class="lineNum"> 235 </span> : : </a>
+<a name="236"><span class="lineNum"> 236 </span> : : /* Gather children. */</a>
<a name="237"><span class="lineNum"> 237 </span> :<span class="lineCov"> 5 : for (i = 0; i &lt; CPUS; i++) {</span></a>
-<a name="238"><span class="lineNum"> 238 </span> :<span class="lineCov"> 4 : printf(&quot;Child %i: %u produced, %u overflows, %llu total\n&quot;, i,</span></a>
-<a name="239"><span class="lineNum"> 239 </span> : : counts[i], overflows[i],</a>
-<a name="240"><span class="lineNum"> 240 </span> :<span class="lineCov"> 4 : (long long)be64_to_cpu(fake_cpus[i].trace-&gt;tb.end));</span></a>
-<a name="241"><span class="lineNum"> 241 </span> :<span class="lineCov"> 4 : assert(counts[i] + repeats[i] &lt;= PER_CHILD_TRACES);</span></a>
-<a name="242"><span class="lineNum"> 242 </span> : : }</a>
-<a name="243"><span class="lineNum"> 243 </span> : : /* Child 0 never repeats. */</a>
-<a name="244"><span class="lineNum"> 244 </span> :<span class="lineCov"> 1 : assert(repeats[0] == 0);</span></a>
-<a name="245"><span class="lineNum"> 245 </span> :<span class="lineCov"> 1 : assert(counts[0] + overflows[0] == PER_CHILD_TRACES);</span></a>
-<a name="246"><span class="lineNum"> 246 </span> : : </a>
-<a name="247"><span class="lineNum"> 247 </span> : : /*</a>
-<a name="248"><span class="lineNum"> 248 </span> : : * FIXME: Other children have some fuzz, since overflows may</a>
-<a name="249"><span class="lineNum"> 249 </span> : : * include repeat record we already read. And odd-numbered</a>
-<a name="250"><span class="lineNum"> 250 </span> : : * overflows may include more repeat records than normal</a>
-<a name="251"><span class="lineNum"> 251 </span> : : * records (they alternate).</a>
-<a name="252"><span class="lineNum"> 252 </span> : : */</a>
-<a name="253"><span class="lineNum"> 253 </span> :<span class="lineCov"> 1 : }</span></a>
-<a name="254"><span class="lineNum"> 254 </span> : : </a>
-<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 1 : int main(void)</span></a>
-<a name="256"><span class="lineNum"> 256 </span> : : {</a>
-<a name="257"><span class="lineNum"> 257 </span> : : union trace minimal;</a>
-<a name="258"><span class="lineNum"> 258 </span> : : union trace large;</a>
-<a name="259"><span class="lineNum"> 259 </span> : : union trace trace;</a>
-<a name="260"><span class="lineNum"> 260 </span> : : unsigned int i, j;</a>
-<a name="261"><span class="lineNum"> 261 </span> : : </a>
-<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 1 : opal_node = dt_new_root(&quot;opal&quot;);</span></a>
-<a name="263"><span class="lineNum"> 263 </span> :<span class="lineCov"> 1 : dt_new(dt_new(opal_node, &quot;firmware&quot;), &quot;exports&quot;);</span></a>
-<a name="264"><span class="lineNum"> 264 </span> :<span class="lineCov"> 5 : for (i = 0; i &lt; CPUS; i++) {</span></a>
-<a name="265"><span class="lineNum"> 265 </span> :<span class="lineCov"> 4 : fake_cpus[i].server_no = i;</span></a>
-<a name="266"><span class="lineNum"> 266 </span> :<span class="lineCov"> 4 : fake_cpus[i].pir = i;</span></a>
-<a name="267"><span class="lineNum"> 267 </span> :<span class="lineCov"> 4 : fake_cpus[i].is_secondary = (i &amp; 0x1);</span></a>
-<a name="268"><span class="lineNum"> 268 </span> :<span class="lineCov"> 4 : fake_cpus[i].primary = &amp;fake_cpus[i &amp; ~0x1];</span></a>
-<a name="269"><span class="lineNum"> 269 </span> : : }</a>
-<a name="270"><span class="lineNum"> 270 </span> :<span class="lineCov"> 1 : my_fake_cpu = &amp;fake_cpus[0];</span></a>
-<a name="271"><span class="lineNum"> 271 </span> :<span class="lineCov"> 1 : my_trace_reader = &amp;trace_readers[0];</span></a>
-<a name="272"><span class="lineNum"> 272 </span> :<span class="lineCov"> 1 : init_trace_buffers();</span></a>
-<a name="273"><span class="lineNum"> 273 </span> : : </a>
-<a name="274"><span class="lineNum"> 274 </span> :<span class="lineCov"> 5 : for (i = 0; i &lt; CPUS; i++) {</span></a>
-<a name="275"><span class="lineNum"> 275 </span> :<span class="lineCov"> 4 : trace_readers[i].tb = &amp;fake_cpus[i].trace-&gt;tb;</span></a>
-<a name="276"><span class="lineNum"> 276 </span> :<span class="lineCov"> 4 : assert(trace_empty(&amp;trace_readers[i]));</span></a>
-<a name="277"><span class="lineNum"> 277 </span> :<span class="lineCov"> 4 : assert(!trace_get(&amp;trace, &amp;trace_readers[i]));</span></a>
-<a name="278"><span class="lineNum"> 278 </span> : : }</a>
-<a name="279"><span class="lineNum"> 279 </span> : : </a>
-<a name="280"><span class="lineNum"> 280 </span> : : assert(sizeof(trace.hdr) % 8 == 0);</a>
-<a name="281"><span class="lineNum"> 281 </span> :<span class="lineCov"> 1 : timestamp = 1;</span></a>
-<a name="282"><span class="lineNum"> 282 </span> :<span class="lineCov"> 1 : trace_add(&amp;minimal, 100, sizeof(trace.hdr));</span></a>
-<a name="283"><span class="lineNum"> 283 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
-<a name="284"><span class="lineNum"> 284 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 == minimal.hdr.len_div_8);</span></a>
-<a name="285"><span class="lineNum"> 285 </span> :<span class="lineCov"> 1 : assert(be64_to_cpu(trace.hdr.timestamp) == timestamp);</span></a>
-<a name="286"><span class="lineNum"> 286 </span> : : </a>
-<a name="287"><span class="lineNum"> 287 </span> : : /* Make it wrap once. */</a>
-<a name="288"><span class="lineNum"> 288 </span> :<span class="lineCov"> 65404 : for (i = 0; i &lt; TBUF_SZ / (minimal.hdr.len_div_8 * 8) + 1; i++) {</span></a>
-<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 65403 : timestamp = i;</span></a>
-<a name="290"><span class="lineNum"> 290 </span> :<span class="lineCov"> 65403 : trace_add(&amp;minimal, 99 + (i%2), sizeof(trace.hdr));</span></a>
-<a name="291"><span class="lineNum"> 291 </span> : : }</a>
-<a name="292"><span class="lineNum"> 292 </span> : : </a>
-<a name="293"><span class="lineNum"> 293 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
-<a name="294"><span class="lineNum"> 294 </span> : : /* First one must be overflow marker. */</a>
-<a name="295"><span class="lineNum"> 295 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == TRACE_OVERFLOW);</span></a>
-<a name="296"><span class="lineNum"> 296 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 * 8 == sizeof(trace.overflow));</span></a>
-<a name="297"><span class="lineNum"> 297 </span> :<span class="lineCov"> 1 : assert(be64_to_cpu(trace.overflow.bytes_missed) == minimal.hdr.len_div_8 * 8);</span></a>
-<a name="298"><span class="lineNum"> 298 </span> : : </a>
-<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 65403 : for (i = 0; i &lt; TBUF_SZ / (minimal.hdr.len_div_8 * 8); i++) {</span></a>
-<a name="300"><span class="lineNum"> 300 </span> :<span class="lineCov"> 65402 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
-<a name="301"><span class="lineNum"> 301 </span> :<span class="lineCov"> 65402 : assert(trace.hdr.len_div_8 == minimal.hdr.len_div_8);</span></a>
-<a name="302"><span class="lineNum"> 302 </span> :<span class="lineCov"> 65402 : assert(be64_to_cpu(trace.hdr.timestamp) == i+1);</span></a>
-<a name="303"><span class="lineNum"> 303 </span> :<span class="lineCov"> 65402 : assert(trace.hdr.type == 99 + ((i+1)%2));</span></a>
-<a name="304"><span class="lineNum"> 304 </span> : : }</a>
-<a name="305"><span class="lineNum"> 305 </span> :<span class="lineCov"> 1 : assert(!trace_get(&amp;trace, my_trace_reader));</span></a>
-<a name="306"><span class="lineNum"> 306 </span> : : </a>
-<a name="307"><span class="lineNum"> 307 </span> : : /* Now put in some weird-length ones, to test overlap.</a>
-<a name="308"><span class="lineNum"> 308 </span> : : * Last power of 2, minus 8. */</a>
-<a name="309"><span class="lineNum"> 309 </span> :<span class="lineCov"> 8 : for (j = 0; (1 &lt;&lt; j) &lt; sizeof(large); j++);</span></a>
-<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 1046433 : for (i = 0; i &lt; TBUF_SZ; i++) {</span></a>
-<a name="311"><span class="lineNum"> 311 </span> :<span class="lineCov"> 1046432 : timestamp = i;</span></a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 1046432 : trace_add(&amp;large, 100 + (i%2), (1 &lt;&lt; (j-1)));</span></a>
-<a name="313"><span class="lineNum"> 313 </span> : : }</a>
-<a name="314"><span class="lineNum"> 314 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
-<a name="315"><span class="lineNum"> 315 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == TRACE_OVERFLOW);</span></a>
-<a name="316"><span class="lineNum"> 316 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
-<a name="317"><span class="lineNum"> 317 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 == large.hdr.len_div_8);</span></a>
-<a name="318"><span class="lineNum"> 318 </span> :<span class="lineCov"> 1 : i = be64_to_cpu(trace.hdr.timestamp);</span></a>
-<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 16350 : while (trace_get(&amp;trace, my_trace_reader))</span></a>
-<a name="320"><span class="lineNum"> 320 </span> :<span class="lineCov"> 16349 : assert(be64_to_cpu(trace.hdr.timestamp) == ++i);</span></a>
-<a name="321"><span class="lineNum"> 321 </span> : : </a>
-<a name="322"><span class="lineNum"> 322 </span> : : /* Test repeats. */</a>
-<a name="323"><span class="lineNum"> 323 </span> :<span class="lineCov"> 65539 : for (i = 0; i &lt; 65538; i++) {</span></a>
-<a name="324"><span class="lineNum"> 324 </span> :<span class="lineCov"> 65538 : timestamp = i;</span></a>
-<a name="325"><span class="lineNum"> 325 </span> :<span class="lineCov"> 65538 : trace_add(&amp;minimal, 100, sizeof(trace.hdr));</span></a>
-<a name="326"><span class="lineNum"> 326 </span> : : }</a>
-<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 1 : timestamp = i;</span></a>
-<a name="328"><span class="lineNum"> 328 </span> :<span class="lineCov"> 1 : trace_add(&amp;minimal, 101, sizeof(trace.hdr));</span></a>
-<a name="329"><span class="lineNum"> 329 </span> :<span class="lineCov"> 1 : timestamp = i+1;</span></a>
-<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 1 : trace_add(&amp;minimal, 101, sizeof(trace.hdr));</span></a>
-<a name="331"><span class="lineNum"> 331 </span> : : </a>
-<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
-<a name="333"><span class="lineNum"> 333 </span> :<span class="lineCov"> 1 : assert(trace.hdr.timestamp == 0);</span></a>
-<a name="334"><span class="lineNum"> 334 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 == minimal.hdr.len_div_8);</span></a>
-<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == 100);</span></a>
-<a name="336"><span class="lineNum"> 336 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
-<a name="337"><span class="lineNum"> 337 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == TRACE_REPEAT);</span></a>
-<a name="338"><span class="lineNum"> 338 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 * 8 == sizeof(trace.repeat));</span></a>
-<a name="339"><span class="lineNum"> 339 </span> :<span class="lineCov"> 1 : assert(be16_to_cpu(trace.repeat.num) == 65535);</span></a>
-<a name="340"><span class="lineNum"> 340 </span> :<span class="lineCov"> 1 : assert(be64_to_cpu(trace.repeat.timestamp) == 65535);</span></a>
+<a name="238"><span class="lineNum"> 238 </span> : : int status;</a>
+<a name="239"><span class="lineNum"> 239 </span> :<span class="lineCov"> 4 : wait(&amp;status);</span></a>
+<a name="240"><span class="lineNum"> 240 </span> : : }</a>
+<a name="241"><span class="lineNum"> 241 </span> : : </a>
+<a name="242"><span class="lineNum"> 242 </span> :<span class="lineCov"> 5 : for (i = 0; i &lt; CPUS; i++) {</span></a>
+<a name="243"><span class="lineNum"> 243 </span> :<span class="lineCov"> 4 : printf(&quot;Child %i: %u produced, %u overflows, %llu total\n&quot;, i,</span></a>
+<a name="244"><span class="lineNum"> 244 </span> : : counts[i], overflows[i],</a>
+<a name="245"><span class="lineNum"> 245 </span> :<span class="lineCov"> 4 : (long long)be64_to_cpu(fake_cpus[i].trace-&gt;tb.end));</span></a>
+<a name="246"><span class="lineNum"> 246 </span> :<span class="lineCov"> 4 : assert(counts[i] + repeats[i] &lt;= PER_CHILD_TRACES);</span></a>
+<a name="247"><span class="lineNum"> 247 </span> : : }</a>
+<a name="248"><span class="lineNum"> 248 </span> : : /* Child 0 never repeats. */</a>
+<a name="249"><span class="lineNum"> 249 </span> :<span class="lineCov"> 1 : assert(repeats[0] == 0);</span></a>
+<a name="250"><span class="lineNum"> 250 </span> :<span class="lineCov"> 1 : assert(counts[0] + overflows[0] == PER_CHILD_TRACES);</span></a>
+<a name="251"><span class="lineNum"> 251 </span> : : </a>
+<a name="252"><span class="lineNum"> 252 </span> : : /*</a>
+<a name="253"><span class="lineNum"> 253 </span> : : * FIXME: Other children have some fuzz, since overflows may</a>
+<a name="254"><span class="lineNum"> 254 </span> : : * include repeat record we already read. And odd-numbered</a>
+<a name="255"><span class="lineNum"> 255 </span> : : * overflows may include more repeat records than normal</a>
+<a name="256"><span class="lineNum"> 256 </span> : : * records (they alternate).</a>
+<a name="257"><span class="lineNum"> 257 </span> : : */</a>
+<a name="258"><span class="lineNum"> 258 </span> :<span class="lineCov"> 1 : }</span></a>
+<a name="259"><span class="lineNum"> 259 </span> : : </a>
+<a name="260"><span class="lineNum"> 260 </span> :<span class="lineCov"> 1 : int main(void)</span></a>
+<a name="261"><span class="lineNum"> 261 </span> : : {</a>
+<a name="262"><span class="lineNum"> 262 </span> : : union trace minimal;</a>
+<a name="263"><span class="lineNum"> 263 </span> : : union trace large;</a>
+<a name="264"><span class="lineNum"> 264 </span> : : union trace trace;</a>
+<a name="265"><span class="lineNum"> 265 </span> : : unsigned int i, j;</a>
+<a name="266"><span class="lineNum"> 266 </span> : : </a>
+<a name="267"><span class="lineNum"> 267 </span> :<span class="lineCov"> 1 : opal_node = dt_new_root(&quot;opal&quot;);</span></a>
+<a name="268"><span class="lineNum"> 268 </span> :<span class="lineCov"> 1 : dt_new(dt_new(opal_node, &quot;firmware&quot;), &quot;exports&quot;);</span></a>
+<a name="269"><span class="lineNum"> 269 </span> :<span class="lineCov"> 5 : for (i = 0; i &lt; CPUS; i++) {</span></a>
+<a name="270"><span class="lineNum"> 270 </span> :<span class="lineCov"> 4 : fake_cpus[i].server_no = i;</span></a>
+<a name="271"><span class="lineNum"> 271 </span> :<span class="lineCov"> 4 : fake_cpus[i].pir = i;</span></a>
+<a name="272"><span class="lineNum"> 272 </span> :<span class="lineCov"> 4 : fake_cpus[i].is_secondary = (i &amp; 0x1);</span></a>
+<a name="273"><span class="lineNum"> 273 </span> :<span class="lineCov"> 4 : fake_cpus[i].primary = &amp;fake_cpus[i &amp; ~0x1];</span></a>
+<a name="274"><span class="lineNum"> 274 </span> : : }</a>
+<a name="275"><span class="lineNum"> 275 </span> :<span class="lineCov"> 1 : my_fake_cpu = &amp;fake_cpus[0];</span></a>
+<a name="276"><span class="lineNum"> 276 </span> :<span class="lineCov"> 1 : my_trace_reader = &amp;trace_readers[0];</span></a>
+<a name="277"><span class="lineNum"> 277 </span> :<span class="lineCov"> 1 : init_trace_buffers();</span></a>
+<a name="278"><span class="lineNum"> 278 </span> : : </a>
+<a name="279"><span class="lineNum"> 279 </span> :<span class="lineCov"> 5 : for (i = 0; i &lt; CPUS; i++) {</span></a>
+<a name="280"><span class="lineNum"> 280 </span> :<span class="lineCov"> 4 : trace_readers[i].tb = &amp;fake_cpus[i].trace-&gt;tb;</span></a>
+<a name="281"><span class="lineNum"> 281 </span> :<span class="lineCov"> 4 : assert(trace_empty(&amp;trace_readers[i]));</span></a>
+<a name="282"><span class="lineNum"> 282 </span> :<span class="lineCov"> 4 : assert(!trace_get(&amp;trace, &amp;trace_readers[i]));</span></a>
+<a name="283"><span class="lineNum"> 283 </span> : : }</a>
+<a name="284"><span class="lineNum"> 284 </span> : : </a>
+<a name="285"><span class="lineNum"> 285 </span> : : assert(sizeof(trace.hdr) % 8 == 0);</a>
+<a name="286"><span class="lineNum"> 286 </span> :<span class="lineCov"> 1 : timestamp = 1;</span></a>
+<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 1 : trace_add(&amp;minimal, 100, sizeof(trace.hdr));</span></a>
+<a name="288"><span class="lineNum"> 288 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
+<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 == minimal.hdr.len_div_8);</span></a>
+<a name="290"><span class="lineNum"> 290 </span> :<span class="lineCov"> 1 : assert(be64_to_cpu(trace.hdr.timestamp) == timestamp);</span></a>
+<a name="291"><span class="lineNum"> 291 </span> : : </a>
+<a name="292"><span class="lineNum"> 292 </span> : : /* Make it wrap once. */</a>
+<a name="293"><span class="lineNum"> 293 </span> :<span class="lineCov"> 65404 : for (i = 0; i &lt; TBUF_SZ / (minimal.hdr.len_div_8 * 8) + 1; i++) {</span></a>
+<a name="294"><span class="lineNum"> 294 </span> :<span class="lineCov"> 65403 : timestamp = i;</span></a>
+<a name="295"><span class="lineNum"> 295 </span> :<span class="lineCov"> 65403 : trace_add(&amp;minimal, 99 + (i%2), sizeof(trace.hdr));</span></a>
+<a name="296"><span class="lineNum"> 296 </span> : : }</a>
+<a name="297"><span class="lineNum"> 297 </span> : : </a>
+<a name="298"><span class="lineNum"> 298 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
+<a name="299"><span class="lineNum"> 299 </span> : : /* First one must be overflow marker. */</a>
+<a name="300"><span class="lineNum"> 300 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == TRACE_OVERFLOW);</span></a>
+<a name="301"><span class="lineNum"> 301 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 * 8 == sizeof(trace.overflow));</span></a>
+<a name="302"><span class="lineNum"> 302 </span> :<span class="lineCov"> 1 : assert(be64_to_cpu(trace.overflow.bytes_missed) == minimal.hdr.len_div_8 * 8);</span></a>
+<a name="303"><span class="lineNum"> 303 </span> : : </a>
+<a name="304"><span class="lineNum"> 304 </span> :<span class="lineCov"> 65403 : for (i = 0; i &lt; TBUF_SZ / (minimal.hdr.len_div_8 * 8); i++) {</span></a>
+<a name="305"><span class="lineNum"> 305 </span> :<span class="lineCov"> 65402 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
+<a name="306"><span class="lineNum"> 306 </span> :<span class="lineCov"> 65402 : assert(trace.hdr.len_div_8 == minimal.hdr.len_div_8);</span></a>
+<a name="307"><span class="lineNum"> 307 </span> :<span class="lineCov"> 65402 : assert(be64_to_cpu(trace.hdr.timestamp) == i+1);</span></a>
+<a name="308"><span class="lineNum"> 308 </span> :<span class="lineCov"> 65402 : assert(trace.hdr.type == 99 + ((i+1)%2));</span></a>
+<a name="309"><span class="lineNum"> 309 </span> : : }</a>
+<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 1 : assert(!trace_get(&amp;trace, my_trace_reader));</span></a>
+<a name="311"><span class="lineNum"> 311 </span> : : </a>
+<a name="312"><span class="lineNum"> 312 </span> : : /* Now put in some weird-length ones, to test overlap.</a>
+<a name="313"><span class="lineNum"> 313 </span> : : * Last power of 2, minus 8. */</a>
+<a name="314"><span class="lineNum"> 314 </span> :<span class="lineCov"> 8 : for (j = 0; (1 &lt;&lt; j) &lt; sizeof(large); j++);</span></a>
+<a name="315"><span class="lineNum"> 315 </span> :<span class="lineCov"> 1046430 : for (i = 0; i &lt; TBUF_SZ; i++) {</span></a>
+<a name="316"><span class="lineNum"> 316 </span> :<span class="lineCov"> 1046430 : timestamp = i;</span></a>
+<a name="317"><span class="lineNum"> 317 </span> :<span class="lineCov"> 1046430 : trace_add(&amp;large, 100 + (i%2), (1 &lt;&lt; (j-1)));</span></a>
+<a name="318"><span class="lineNum"> 318 </span> : : }</a>
+<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
+<a name="320"><span class="lineNum"> 320 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == TRACE_OVERFLOW);</span></a>
+<a name="321"><span class="lineNum"> 321 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
+<a name="322"><span class="lineNum"> 322 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 == large.hdr.len_div_8);</span></a>
+<a name="323"><span class="lineNum"> 323 </span> :<span class="lineCov"> 1 : i = be64_to_cpu(trace.hdr.timestamp);</span></a>
+<a name="324"><span class="lineNum"> 324 </span> :<span class="lineCov"> 16350 : while (trace_get(&amp;trace, my_trace_reader))</span></a>
+<a name="325"><span class="lineNum"> 325 </span> :<span class="lineCov"> 16349 : assert(be64_to_cpu(trace.hdr.timestamp) == ++i);</span></a>
+<a name="326"><span class="lineNum"> 326 </span> : : </a>
+<a name="327"><span class="lineNum"> 327 </span> : : /* Test repeats. */</a>
+<a name="328"><span class="lineNum"> 328 </span> :<span class="lineCov"> 65539 : for (i = 0; i &lt; 65538; i++) {</span></a>
+<a name="329"><span class="lineNum"> 329 </span> :<span class="lineCov"> 65538 : timestamp = i;</span></a>
+<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 65538 : trace_add(&amp;minimal, 100, sizeof(trace.hdr));</span></a>
+<a name="331"><span class="lineNum"> 331 </span> : : }</a>
+<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 1 : timestamp = i;</span></a>
+<a name="333"><span class="lineNum"> 333 </span> :<span class="lineCov"> 1 : trace_add(&amp;minimal, 101, sizeof(trace.hdr));</span></a>
+<a name="334"><span class="lineNum"> 334 </span> :<span class="lineCov"> 1 : timestamp = i+1;</span></a>
+<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 1 : trace_add(&amp;minimal, 101, sizeof(trace.hdr));</span></a>
+<a name="336"><span class="lineNum"> 336 </span> : : </a>
+<a name="337"><span class="lineNum"> 337 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
+<a name="338"><span class="lineNum"> 338 </span> :<span class="lineCov"> 1 : assert(trace.hdr.timestamp == 0);</span></a>
+<a name="339"><span class="lineNum"> 339 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 == minimal.hdr.len_div_8);</span></a>
+<a name="340"><span class="lineNum"> 340 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == 100);</span></a>
<a name="341"><span class="lineNum"> 341 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
-<a name="342"><span class="lineNum"> 342 </span> :<span class="lineCov"> 1 : assert(be64_to_cpu(trace.hdr.timestamp) == 65536);</span></a>
-<a name="343"><span class="lineNum"> 343 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 == minimal.hdr.len_div_8);</span></a>
-<a name="344"><span class="lineNum"> 344 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == 100);</span></a>
-<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
-<a name="346"><span class="lineNum"> 346 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == TRACE_REPEAT);</span></a>
-<a name="347"><span class="lineNum"> 347 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 * 8 == sizeof(trace.repeat));</span></a>
-<a name="348"><span class="lineNum"> 348 </span> :<span class="lineCov"> 1 : assert(be16_to_cpu(trace.repeat.num) == 1);</span></a>
-<a name="349"><span class="lineNum"> 349 </span> :<span class="lineCov"> 1 : assert(be64_to_cpu(trace.repeat.timestamp) == 65537);</span></a>
-<a name="350"><span class="lineNum"> 350 </span> : : </a>
-<a name="351"><span class="lineNum"> 351 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
-<a name="352"><span class="lineNum"> 352 </span> :<span class="lineCov"> 1 : assert(be64_to_cpu(trace.hdr.timestamp) == 65538);</span></a>
-<a name="353"><span class="lineNum"> 353 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 == minimal.hdr.len_div_8);</span></a>
-<a name="354"><span class="lineNum"> 354 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == 101);</span></a>
-<a name="355"><span class="lineNum"> 355 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
-<a name="356"><span class="lineNum"> 356 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == TRACE_REPEAT);</span></a>
-<a name="357"><span class="lineNum"> 357 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 * 8 == sizeof(trace.repeat));</span></a>
-<a name="358"><span class="lineNum"> 358 </span> :<span class="lineCov"> 1 : assert(be16_to_cpu(trace.repeat.num) == 1);</span></a>
-<a name="359"><span class="lineNum"> 359 </span> :<span class="lineCov"> 1 : assert(be64_to_cpu(trace.repeat.timestamp) == 65539);</span></a>
-<a name="360"><span class="lineNum"> 360 </span> : : </a>
-<a name="361"><span class="lineNum"> 361 </span> : : /* Now, test adding repeat while we're reading... */</a>
-<a name="362"><span class="lineNum"> 362 </span> :<span class="lineCov"> 1 : timestamp = 0;</span></a>
-<a name="363"><span class="lineNum"> 363 </span> :<span class="lineCov"> 1 : trace_add(&amp;minimal, 100, sizeof(trace.hdr));</span></a>
-<a name="364"><span class="lineNum"> 364 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
-<a name="365"><span class="lineNum"> 365 </span> :<span class="lineCov"> 1 : assert(be64_to_cpu(trace.hdr.timestamp) == 0);</span></a>
-<a name="366"><span class="lineNum"> 366 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 == minimal.hdr.len_div_8);</span></a>
-<a name="367"><span class="lineNum"> 367 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == 100);</span></a>
-<a name="368"><span class="lineNum"> 368 </span> : : </a>
-<a name="369"><span class="lineNum"> 369 </span> :<span class="lineCov"> 1046432 : for (i = 1; i &lt; TBUF_SZ; i++) {</span></a>
-<a name="370"><span class="lineNum"> 370 </span> :<span class="lineCov"> 1046431 : timestamp = i;</span></a>
-<a name="371"><span class="lineNum"> 371 </span> :<span class="lineCov"> 1046431 : trace_add(&amp;minimal, 100, sizeof(trace.hdr));</span></a>
-<a name="372"><span class="lineNum"> 372 </span> :<span class="lineCov"> 1046431 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
-<a name="373"><span class="lineNum"> 373 </span> :<span class="lineCov"> 1046431 : if (i % 65536 == 0) {</span></a>
-<a name="374"><span class="lineNum"> 374 </span> :<span class="lineCov"> 15 : assert(trace.hdr.type == 100);</span></a>
-<a name="375"><span class="lineNum"> 375 </span> :<span class="lineCov"> 15 : assert(trace.hdr.len_div_8 == minimal.hdr.len_div_8);</span></a>
-<a name="376"><span class="lineNum"> 376 </span> : : } else {</a>
-<a name="377"><span class="lineNum"> 377 </span> :<span class="lineCov"> 1046416 : assert(trace.hdr.type == TRACE_REPEAT);</span></a>
-<a name="378"><span class="lineNum"> 378 </span> :<span class="lineCov"> 1046416 : assert(trace.hdr.len_div_8 * 8 == sizeof(trace.repeat));</span></a>
-<a name="379"><span class="lineNum"> 379 </span> :<span class="lineCov"> 1046416 : assert(be16_to_cpu(trace.repeat.num) == 1);</span></a>
-<a name="380"><span class="lineNum"> 380 </span> : : }</a>
-<a name="381"><span class="lineNum"> 381 </span> :<span class="lineCov"> 1046431 : assert(be64_to_cpu(trace.repeat.timestamp) == i);</span></a>
-<a name="382"><span class="lineNum"> 382 </span> :<span class="lineCov"> 1046431 : assert(!trace_get(&amp;trace, my_trace_reader));</span></a>
-<a name="383"><span class="lineNum"> 383 </span> : : }</a>
-<a name="384"><span class="lineNum"> 384 </span> : : </a>
-<a name="385"><span class="lineNum"> 385 </span> :<span class="lineCov"> 5 : for (i = 0; i &lt; CPUS; i++)</span></a>
-<a name="386"><span class="lineNum"> 386 </span> :<span class="lineCov"> 4 : if (!fake_cpus[i].is_secondary)</span></a>
-<a name="387"><span class="lineNum"> 387 </span> :<span class="lineCov"> 2 : free(fake_cpus[i].trace);</span></a>
-<a name="388"><span class="lineNum"> 388 </span> : : </a>
-<a name="389"><span class="lineNum"> 389 </span> :<span class="lineCov"> 1 : test_parallel();</span></a>
-<a name="390"><span class="lineNum"> 390 </span> : : </a>
-<a name="391"><span class="lineNum"> 391 </span> :<span class="lineCov"> 1 : return 0;</span></a>
-<a name="392"><span class="lineNum"> 392 </span> : : }</a>
+<a name="342"><span class="lineNum"> 342 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == TRACE_REPEAT);</span></a>
+<a name="343"><span class="lineNum"> 343 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 * 8 == sizeof(trace.repeat));</span></a>
+<a name="344"><span class="lineNum"> 344 </span> :<span class="lineCov"> 1 : assert(be16_to_cpu(trace.repeat.num) == 65535);</span></a>
+<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 1 : assert(be64_to_cpu(trace.repeat.timestamp) == 65535);</span></a>
+<a name="346"><span class="lineNum"> 346 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
+<a name="347"><span class="lineNum"> 347 </span> :<span class="lineCov"> 1 : assert(be64_to_cpu(trace.hdr.timestamp) == 65536);</span></a>
+<a name="348"><span class="lineNum"> 348 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 == minimal.hdr.len_div_8);</span></a>
+<a name="349"><span class="lineNum"> 349 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == 100);</span></a>
+<a name="350"><span class="lineNum"> 350 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
+<a name="351"><span class="lineNum"> 351 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == TRACE_REPEAT);</span></a>
+<a name="352"><span class="lineNum"> 352 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 * 8 == sizeof(trace.repeat));</span></a>
+<a name="353"><span class="lineNum"> 353 </span> :<span class="lineCov"> 1 : assert(be16_to_cpu(trace.repeat.num) == 1);</span></a>
+<a name="354"><span class="lineNum"> 354 </span> :<span class="lineCov"> 1 : assert(be64_to_cpu(trace.repeat.timestamp) == 65537);</span></a>
+<a name="355"><span class="lineNum"> 355 </span> : : </a>
+<a name="356"><span class="lineNum"> 356 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
+<a name="357"><span class="lineNum"> 357 </span> :<span class="lineCov"> 1 : assert(be64_to_cpu(trace.hdr.timestamp) == 65538);</span></a>
+<a name="358"><span class="lineNum"> 358 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 == minimal.hdr.len_div_8);</span></a>
+<a name="359"><span class="lineNum"> 359 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == 101);</span></a>
+<a name="360"><span class="lineNum"> 360 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
+<a name="361"><span class="lineNum"> 361 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == TRACE_REPEAT);</span></a>
+<a name="362"><span class="lineNum"> 362 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 * 8 == sizeof(trace.repeat));</span></a>
+<a name="363"><span class="lineNum"> 363 </span> :<span class="lineCov"> 1 : assert(be16_to_cpu(trace.repeat.num) == 1);</span></a>
+<a name="364"><span class="lineNum"> 364 </span> :<span class="lineCov"> 1 : assert(be64_to_cpu(trace.repeat.timestamp) == 65539);</span></a>
+<a name="365"><span class="lineNum"> 365 </span> : : </a>
+<a name="366"><span class="lineNum"> 366 </span> : : /* Now, test adding repeat while we're reading... */</a>
+<a name="367"><span class="lineNum"> 367 </span> :<span class="lineCov"> 1 : timestamp = 0;</span></a>
+<a name="368"><span class="lineNum"> 368 </span> :<span class="lineCov"> 1 : trace_add(&amp;minimal, 100, sizeof(trace.hdr));</span></a>
+<a name="369"><span class="lineNum"> 369 </span> :<span class="lineCov"> 1 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
+<a name="370"><span class="lineNum"> 370 </span> :<span class="lineCov"> 1 : assert(be64_to_cpu(trace.hdr.timestamp) == 0);</span></a>
+<a name="371"><span class="lineNum"> 371 </span> :<span class="lineCov"> 1 : assert(trace.hdr.len_div_8 == minimal.hdr.len_div_8);</span></a>
+<a name="372"><span class="lineNum"> 372 </span> :<span class="lineCov"> 1 : assert(trace.hdr.type == 100);</span></a>
+<a name="373"><span class="lineNum"> 373 </span> : : </a>
+<a name="374"><span class="lineNum"> 374 </span> :<span class="lineCov"> 1046430 : for (i = 1; i &lt; TBUF_SZ; i++) {</span></a>
+<a name="375"><span class="lineNum"> 375 </span> :<span class="lineCov"> 1046430 : timestamp = i;</span></a>
+<a name="376"><span class="lineNum"> 376 </span> :<span class="lineCov"> 1046430 : trace_add(&amp;minimal, 100, sizeof(trace.hdr));</span></a>
+<a name="377"><span class="lineNum"> 377 </span> :<span class="lineCov"> 1046430 : assert(trace_get(&amp;trace, my_trace_reader));</span></a>
+<a name="378"><span class="lineNum"> 378 </span> :<span class="lineCov"> 1046430 : if (i % 65536 == 0) {</span></a>
+<a name="379"><span class="lineNum"> 379 </span> :<span class="lineCov"> 15 : assert(trace.hdr.type == 100);</span></a>
+<a name="380"><span class="lineNum"> 380 </span> :<span class="lineCov"> 15 : assert(trace.hdr.len_div_8 == minimal.hdr.len_div_8);</span></a>
+<a name="381"><span class="lineNum"> 381 </span> : : } else {</a>
+<a name="382"><span class="lineNum"> 382 </span> :<span class="lineCov"> 1046420 : assert(trace.hdr.type == TRACE_REPEAT);</span></a>
+<a name="383"><span class="lineNum"> 383 </span> :<span class="lineCov"> 1046420 : assert(trace.hdr.len_div_8 * 8 == sizeof(trace.repeat));</span></a>
+<a name="384"><span class="lineNum"> 384 </span> :<span class="lineCov"> 1046420 : assert(be16_to_cpu(trace.repeat.num) == 1);</span></a>
+<a name="385"><span class="lineNum"> 385 </span> : : }</a>
+<a name="386"><span class="lineNum"> 386 </span> :<span class="lineCov"> 1046430 : assert(be64_to_cpu(trace.repeat.timestamp) == i);</span></a>
+<a name="387"><span class="lineNum"> 387 </span> :<span class="lineCov"> 1046430 : assert(!trace_get(&amp;trace, my_trace_reader));</span></a>
+<a name="388"><span class="lineNum"> 388 </span> : : }</a>
+<a name="389"><span class="lineNum"> 389 </span> : : </a>
+<a name="390"><span class="lineNum"> 390 </span> :<span class="lineCov"> 5 : for (i = 0; i &lt; CPUS; i++)</span></a>
+<a name="391"><span class="lineNum"> 391 </span> :<span class="lineCov"> 4 : if (!fake_cpus[i].is_secondary)</span></a>
+<a name="392"><span class="lineNum"> 392 </span> :<span class="lineCov"> 2 : free(fake_cpus[i].trace);</span></a>
+<a name="393"><span class="lineNum"> 393 </span> : : </a>
+<a name="394"><span class="lineNum"> 394 </span> :<span class="lineCov"> 1 : test_parallel();</span></a>
+<a name="395"><span class="lineNum"> 395 </span> : : </a>
+<a name="396"><span class="lineNum"> 396 </span> :<span class="lineCov"> 1 : return 0;</span></a>
+<a name="397"><span class="lineNum"> 397 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/core/test/stubs.c.func-sort-c.html b/coverage-report/core/test/stubs.c.func-sort-c.html
index 4322575..ca0bdc7 100644
--- a/coverage-report/core/test/stubs.c.func-sort-c.html
+++ b/coverage-report/core/test/stubs.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -90,7 +90,7 @@
</tr>
<tr>
<td class="coverFn"><a href="stubs.c.gcov.html#20">_prlog</a></td>
- <td class="coverFnHi">187</td>
+ <td class="coverFnHi">283</td>
</tr>
</table>
<br>
diff --git a/coverage-report/core/test/stubs.c.func.html b/coverage-report/core/test/stubs.c.func.html
index 4421e7d..cd03cba 100644
--- a/coverage-report/core/test/stubs.c.func.html
+++ b/coverage-report/core/test/stubs.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -74,7 +74,7 @@
</tr>
<tr>
<td class="coverFn"><a href="stubs.c.gcov.html#20">_prlog</a></td>
- <td class="coverFnHi">187</td>
+ <td class="coverFnHi">283</td>
</tr>
<tr>
<td class="coverFn"><a href="stubs.c.gcov.html#75">cpu_process_local_jobs</a></td>
diff --git a/coverage-report/core/test/stubs.c.gcov.html b/coverage-report/core/test/stubs.c.gcov.html
index c7d48cc..dca9b37 100644
--- a/coverage-report/core/test/stubs.c.gcov.html
+++ b/coverage-report/core/test/stubs.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -90,14 +90,14 @@
<a name="19"><span class="lineNum"> 19 </span> : : #endif</a>
<a name="20"><span class="lineNum"> 20 </span> : : #define prlog(l, f, ...) do { _prlog(l, pr_fmt(f), ##__VA_ARGS__); } while(0)</a>
<a name="21"><span class="lineNum"> 21 </span> : : </a>
-<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 187 : void _prlog(int log_level __attribute__((unused)), const char* fmt, ...)</span></a>
+<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 283 : void _prlog(int log_level __attribute__((unused)), const char* fmt, ...)</span></a>
<a name="23"><span class="lineNum"> 23 </span> : : {</a>
<a name="24"><span class="lineNum"> 24 </span> : : va_list ap;</a>
<a name="25"><span class="lineNum"> 25 </span> : : </a>
-<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 187 : va_start(ap, fmt);</span></a>
-<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 187 : vprintf(fmt, ap);</span></a>
-<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 187 : va_end(ap);</span></a>
-<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 187 : }</span></a>
+<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 283 : va_start(ap, fmt);</span></a>
+<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 283 : vprintf(fmt, ap);</span></a>
+<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 283 : va_end(ap);</span></a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 283 : }</span></a>
<a name="30"><span class="lineNum"> 30 </span> : : </a>
<a name="31"><span class="lineNum"> 31 </span> : : /* Add any stub functions required for linking here. */</a>
<a name="32"><span class="lineNum"> 32 </span> :<span class="lineNoCov"> 0 : static void stub_function(void)</span></a>
diff --git a/coverage-report/core/time-utils.c.func-sort-c.html b/coverage-report/core/time-utils.c.func-sort-c.html
index dd12f38..41e1ed8 100644
--- a/coverage-report/core/time-utils.c.func-sort-c.html
+++ b/coverage-report/core/time-utils.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/core/time-utils.c.func.html b/coverage-report/core/time-utils.c.func.html
index bb7b833..fc670f6 100644
--- a/coverage-report/core/time-utils.c.func.html
+++ b/coverage-report/core/time-utils.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/core/time-utils.c.gcov.html b/coverage-report/core/time-utils.c.gcov.html
index 7b5a846..fa17fe9 100644
--- a/coverage-report/core/time-utils.c.gcov.html
+++ b/coverage-report/core/time-utils.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/core/timer.c.func-sort-c.html b/coverage-report/core/timer.c.func-sort-c.html
index baedea2..d4834bc 100644
--- a/coverage-report/core/timer.c.func-sort-c.html
+++ b/coverage-report/core/timer.c.func-sort-c.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">68</td>
- <td class="headerCovTableEntry">111</td>
- <td class="headerCovTableEntryLo">61.3 %</td>
+ <td class="headerCovTableEntry">110</td>
+ <td class="headerCovTableEntryLo">61.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
@@ -69,55 +69,55 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#58">__sync_timer</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#55">__sync_timer</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#83">cancel_timer</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#80">cancel_timer</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#92">cancel_timer_async</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#89">cancel_timer_async</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#76">sync_timer</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#73">sync_timer</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#52">__remove_timer</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#49">__remove_timer</a></td>
<td class="coverFnHi">100</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#100">__schedule_timer_at</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#97">__schedule_timer_at</a></td>
<td class="coverFnHi">100</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#43">init_timer</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#40">init_timer</a></td>
<td class="coverFnHi">100</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#142">schedule_timer</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#139">schedule_timer</a></td>
<td class="coverFnHi">100</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#135">schedule_timer_at</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#132">schedule_timer_at</a></td>
<td class="coverFnHi">100</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#35">update_timer_expiry</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#34">update_timer_expiry</a></td>
<td class="coverFnHi">100</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#154">__check_poll_timers</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#151">__check_poll_timers</a></td>
<td class="coverFnHi">65466</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#208">__check_timers</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#205">__check_timers</a></td>
<td class="coverFnHi">65466</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#244">check_timers</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#241">check_timers</a></td>
<td class="coverFnHi">65466</td>
</tr>
</table>
diff --git a/coverage-report/core/timer.c.func.html b/coverage-report/core/timer.c.func.html
index fbeeb50..7d272f0 100644
--- a/coverage-report/core/timer.c.func.html
+++ b/coverage-report/core/timer.c.func.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">68</td>
- <td class="headerCovTableEntry">111</td>
- <td class="headerCovTableEntryLo">61.3 %</td>
+ <td class="headerCovTableEntry">110</td>
+ <td class="headerCovTableEntryLo">61.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
@@ -69,55 +69,55 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="timer.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#154">__check_poll_timers</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#151">__check_poll_timers</a></td>
<td class="coverFnHi">65466</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#208">__check_timers</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#205">__check_timers</a></td>
<td class="coverFnHi">65466</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#52">__remove_timer</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#49">__remove_timer</a></td>
<td class="coverFnHi">100</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#100">__schedule_timer_at</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#97">__schedule_timer_at</a></td>
<td class="coverFnHi">100</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#58">__sync_timer</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#55">__sync_timer</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#83">cancel_timer</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#80">cancel_timer</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#92">cancel_timer_async</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#89">cancel_timer_async</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#244">check_timers</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#241">check_timers</a></td>
<td class="coverFnHi">65466</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#43">init_timer</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#40">init_timer</a></td>
<td class="coverFnHi">100</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#142">schedule_timer</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#139">schedule_timer</a></td>
<td class="coverFnHi">100</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#135">schedule_timer_at</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#132">schedule_timer_at</a></td>
<td class="coverFnHi">100</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#76">sync_timer</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#73">sync_timer</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="timer.c.gcov.html#35">update_timer_expiry</a></td>
+ <td class="coverFn"><a href="timer.c.gcov.html#34">update_timer_expiry</a></td>
<td class="coverFnHi">100</td>
</tr>
</table>
diff --git a/coverage-report/core/timer.c.gcov.html b/coverage-report/core/timer.c.gcov.html
index 01c4387..d74e41f 100644
--- a/coverage-report/core/timer.c.gcov.html
+++ b/coverage-report/core/timer.c.gcov.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">68</td>
- <td class="headerCovTableEntry">111</td>
- <td class="headerCovTableEntryLo">61.3 %</td>
+ <td class="headerCovTableEntry">110</td>
+ <td class="headerCovTableEntryLo">61.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
@@ -86,287 +86,282 @@
<a name="15"><span class="lineNum"> 15 </span> : : #include &lt;fsp.h&gt;</a>
<a name="16"><span class="lineNum"> 16 </span> : : #include &lt;device.h&gt;</a>
<a name="17"><span class="lineNum"> 17 </span> : : #include &lt;opal.h&gt;</a>
-<a name="18"><span class="lineNum"> 18 </span> : : #include &lt;sbe-p8.h&gt;</a>
-<a name="19"><span class="lineNum"> 19 </span> : : #include &lt;sbe-p9.h&gt;</a>
-<a name="20"><span class="lineNum"> 20 </span> : : </a>
-<a name="21"><span class="lineNum"> 21 </span> : : #ifdef __TEST__</a>
-<a name="22"><span class="lineNum"> 22 </span> : : #define this_cpu() ((void *)-1)</a>
-<a name="23"><span class="lineNum"> 23 </span> : : #define cpu_relax()</a>
-<a name="24"><span class="lineNum"> 24 </span> : : #else</a>
-<a name="25"><span class="lineNum"> 25 </span> : : #include &lt;cpu.h&gt;</a>
-<a name="26"><span class="lineNum"> 26 </span> : : #endif</a>
-<a name="27"><span class="lineNum"> 27 </span> : : </a>
-<a name="28"><span class="lineNum"> 28 </span> : : /* Heartbeat requested from Linux */</a>
-<a name="29"><span class="lineNum"> 29 </span> : : #define HEARTBEAT_DEFAULT_MS 200</a>
-<a name="30"><span class="lineNum"> 30 </span> : : </a>
-<a name="31"><span class="lineNum"> 31 </span> : : static struct lock timer_lock = LOCK_UNLOCKED;</a>
-<a name="32"><span class="lineNum"> 32 </span> : : static LIST_HEAD(timer_list);</a>
-<a name="33"><span class="lineNum"> 33 </span> : : static LIST_HEAD(timer_poll_list);</a>
-<a name="34"><span class="lineNum"> 34 </span> : : static bool timer_in_poll;</a>
-<a name="35"><span class="lineNum"> 35 </span> : : static uint64_t timer_poll_gen;</a>
-<a name="36"><span class="lineNum"> 36 </span> : : </a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 100 : static inline void update_timer_expiry(uint64_t target)</span></a>
-<a name="38"><span class="lineNum"> 38 </span> : : {</a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 100 : if (proc_gen &lt; proc_gen_p9)</span></a>
-<a name="40"><span class="lineNum"> 40 </span> :<span class="lineNoCov"> 0 : p8_sbe_update_timer_expiry(target);</span></a>
-<a name="41"><span class="lineNum"> 41 </span> : : else</a>
-<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 100 : p9_sbe_update_timer_expiry(target);</span></a>
-<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 100 : }</span></a>
-<a name="44"><span class="lineNum"> 44 </span> : : </a>
-<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 100 : void init_timer(struct timer *t, timer_func_t expiry, void *data)</span></a>
-<a name="46"><span class="lineNum"> 46 </span> : : {</a>
-<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 100 : t-&gt;link.next = t-&gt;link.prev = NULL;</span></a>
-<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 100 : t-&gt;target = 0;</span></a>
-<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 100 : t-&gt;expiry = expiry;</span></a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 100 : t-&gt;user_data = data;</span></a>
-<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 100 : t-&gt;running = NULL;</span></a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 100 : }</span></a>
-<a name="53"><span class="lineNum"> 53 </span> : : </a>
-<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 100 : static void __remove_timer(struct timer *t)</span></a>
-<a name="55"><span class="lineNum"> 55 </span> : : {</a>
-<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 100 : list_del(&amp;t-&gt;link);</span></a>
-<a name="57"><span class="lineNum"> 57 </span> :<span class="lineCov"> 100 : t-&gt;link.next = t-&gt;link.prev = NULL;</span></a>
-<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 100 : }</span></a>
-<a name="59"><span class="lineNum"> 59 </span> : : </a>
-<a name="60"><span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : static void __sync_timer(struct timer *t)</span></a>
-<a name="61"><span class="lineNum"> 61 </span> : : {</a>
-<a name="62"><span class="lineNum"> 62 </span> : : sync();</a>
+<a name="18"><span class="lineNum"> 18 </span> : : #include &lt;sbe.h&gt;</a>
+<a name="19"><span class="lineNum"> 19 </span> : : </a>
+<a name="20"><span class="lineNum"> 20 </span> : : #ifdef __TEST__</a>
+<a name="21"><span class="lineNum"> 21 </span> : : #define this_cpu() ((void *)-1)</a>
+<a name="22"><span class="lineNum"> 22 </span> : : #define cpu_relax()</a>
+<a name="23"><span class="lineNum"> 23 </span> : : #else</a>
+<a name="24"><span class="lineNum"> 24 </span> : : #include &lt;cpu.h&gt;</a>
+<a name="25"><span class="lineNum"> 25 </span> : : #endif</a>
+<a name="26"><span class="lineNum"> 26 </span> : : </a>
+<a name="27"><span class="lineNum"> 27 </span> : : /* Heartbeat requested from Linux */</a>
+<a name="28"><span class="lineNum"> 28 </span> : : #define HEARTBEAT_DEFAULT_MS 200</a>
+<a name="29"><span class="lineNum"> 29 </span> : : </a>
+<a name="30"><span class="lineNum"> 30 </span> : : static struct lock timer_lock = LOCK_UNLOCKED;</a>
+<a name="31"><span class="lineNum"> 31 </span> : : static LIST_HEAD(timer_list);</a>
+<a name="32"><span class="lineNum"> 32 </span> : : static LIST_HEAD(timer_poll_list);</a>
+<a name="33"><span class="lineNum"> 33 </span> : : static bool timer_in_poll;</a>
+<a name="34"><span class="lineNum"> 34 </span> : : static uint64_t timer_poll_gen;</a>
+<a name="35"><span class="lineNum"> 35 </span> : : </a>
+<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 100 : static inline void update_timer_expiry(uint64_t target)</span></a>
+<a name="37"><span class="lineNum"> 37 </span> : : {</a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 100 : if (sbe_timer_ok())</span></a>
+<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 100 : sbe_update_timer_expiry(target);</span></a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 100 : }</span></a>
+<a name="41"><span class="lineNum"> 41 </span> : : </a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 100 : void init_timer(struct timer *t, timer_func_t expiry, void *data)</span></a>
+<a name="43"><span class="lineNum"> 43 </span> : : {</a>
+<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 100 : t-&gt;link.next = t-&gt;link.prev = NULL;</span></a>
+<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 100 : t-&gt;target = 0;</span></a>
+<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 100 : t-&gt;expiry = expiry;</span></a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 100 : t-&gt;user_data = data;</span></a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 100 : t-&gt;running = NULL;</span></a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 100 : }</span></a>
+<a name="50"><span class="lineNum"> 50 </span> : : </a>
+<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 100 : static void __remove_timer(struct timer *t)</span></a>
+<a name="52"><span class="lineNum"> 52 </span> : : {</a>
+<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 100 : list_del(&amp;t-&gt;link);</span></a>
+<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 100 : t-&gt;link.next = t-&gt;link.prev = NULL;</span></a>
+<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 100 : }</span></a>
+<a name="56"><span class="lineNum"> 56 </span> : : </a>
+<a name="57"><span class="lineNum"> 57 </span> :<span class="lineNoCov"> 0 : static void __sync_timer(struct timer *t)</span></a>
+<a name="58"><span class="lineNum"> 58 </span> : : {</a>
+<a name="59"><span class="lineNum"> 59 </span> : : sync();</a>
+<a name="60"><span class="lineNum"> 60 </span> : : </a>
+<a name="61"><span class="lineNum"> 61 </span> : : /* Guard against re-entrancy */</a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineNoCov"> 0 : assert(t-&gt;running != this_cpu());</span></a>
<a name="63"><span class="lineNum"> 63 </span> : : </a>
-<a name="64"><span class="lineNum"> 64 </span> : : /* Guard against re-entrancy */</a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : assert(t-&gt;running != this_cpu());</span></a>
-<a name="66"><span class="lineNum"> 66 </span> : : </a>
-<a name="67"><span class="lineNum"> 67 </span> :<span class="lineNoCov"> 0 : while (t-&gt;running) {</span></a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineNoCov"> 0 : unlock(&amp;timer_lock);</span></a>
-<a name="69"><span class="lineNum"> 69 </span> : : smt_lowest();</a>
-<a name="70"><span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : while (t-&gt;running)</span></a>
-<a name="71"><span class="lineNum"> 71 </span> :<span class="lineNoCov"> 0 : barrier();</span></a>
-<a name="72"><span class="lineNum"> 72 </span> : : smt_medium();</a>
-<a name="73"><span class="lineNum"> 73 </span> : : /* Should we call the pollers here ? */</a>
-<a name="74"><span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : lock(&amp;timer_lock);</span></a>
-<a name="75"><span class="lineNum"> 75 </span> : : }</a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : }</span></a>
-<a name="77"><span class="lineNum"> 77 </span> : : </a>
-<a name="78"><span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : void sync_timer(struct timer *t)</span></a>
-<a name="79"><span class="lineNum"> 79 </span> : : {</a>
-<a name="80"><span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : lock(&amp;timer_lock);</span></a>
-<a name="81"><span class="lineNum"> 81 </span> :<span class="lineNoCov"> 0 : __sync_timer(t);</span></a>
-<a name="82"><span class="lineNum"> 82 </span> :<span class="lineNoCov"> 0 : unlock(&amp;timer_lock);</span></a>
-<a name="83"><span class="lineNum"> 83 </span> :<span class="lineNoCov"> 0 : }</span></a>
-<a name="84"><span class="lineNum"> 84 </span> : : </a>
-<a name="85"><span class="lineNum"> 85 </span> :<span class="lineNoCov"> 0 : void cancel_timer(struct timer *t)</span></a>
-<a name="86"><span class="lineNum"> 86 </span> : : {</a>
-<a name="87"><span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : lock(&amp;timer_lock);</span></a>
-<a name="88"><span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : __sync_timer(t);</span></a>
-<a name="89"><span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : if (t-&gt;link.next)</span></a>
-<a name="90"><span class="lineNum"> 90 </span> :<span class="lineNoCov"> 0 : __remove_timer(t);</span></a>
-<a name="91"><span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : unlock(&amp;timer_lock);</span></a>
-<a name="92"><span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : }</span></a>
-<a name="93"><span class="lineNum"> 93 </span> : : </a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : void cancel_timer_async(struct timer *t)</span></a>
-<a name="95"><span class="lineNum"> 95 </span> : : {</a>
-<a name="96"><span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : lock(&amp;timer_lock);</span></a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : if (t-&gt;link.next)</span></a>
-<a name="98"><span class="lineNum"> 98 </span> :<span class="lineNoCov"> 0 : __remove_timer(t);</span></a>
-<a name="99"><span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : unlock(&amp;timer_lock);</span></a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : }</span></a>
-<a name="101"><span class="lineNum"> 101 </span> : : </a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 100 : static void __schedule_timer_at(struct timer *t, uint64_t when)</span></a>
-<a name="103"><span class="lineNum"> 103 </span> : : {</a>
-<a name="104"><span class="lineNum"> 104 </span> : : struct timer *lt;</a>
-<a name="105"><span class="lineNum"> 105 </span> : : </a>
-<a name="106"><span class="lineNum"> 106 </span> : : /* If the timer is already scheduled, take it out */</a>
-<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 100 : if (t-&gt;link.next)</span></a>
-<a name="108"><span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : __remove_timer(t);</span></a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineNoCov"> 0 : while (t-&gt;running) {</span></a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : unlock(&amp;timer_lock);</span></a>
+<a name="66"><span class="lineNum"> 66 </span> : : smt_lowest();</a>
+<a name="67"><span class="lineNum"> 67 </span> :<span class="lineNoCov"> 0 : while (t-&gt;running)</span></a>
+<a name="68"><span class="lineNum"> 68 </span> :<span class="lineNoCov"> 0 : barrier();</span></a>
+<a name="69"><span class="lineNum"> 69 </span> : : smt_medium();</a>
+<a name="70"><span class="lineNum"> 70 </span> : : /* Should we call the pollers here ? */</a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineNoCov"> 0 : lock(&amp;timer_lock);</span></a>
+<a name="72"><span class="lineNum"> 72 </span> : : }</a>
+<a name="73"><span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="74"><span class="lineNum"> 74 </span> : : </a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineNoCov"> 0 : void sync_timer(struct timer *t)</span></a>
+<a name="76"><span class="lineNum"> 76 </span> : : {</a>
+<a name="77"><span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : lock(&amp;timer_lock);</span></a>
+<a name="78"><span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : __sync_timer(t);</span></a>
+<a name="79"><span class="lineNum"> 79 </span> :<span class="lineNoCov"> 0 : unlock(&amp;timer_lock);</span></a>
+<a name="80"><span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="81"><span class="lineNum"> 81 </span> : : </a>
+<a name="82"><span class="lineNum"> 82 </span> :<span class="lineNoCov"> 0 : void cancel_timer(struct timer *t)</span></a>
+<a name="83"><span class="lineNum"> 83 </span> : : {</a>
+<a name="84"><span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : lock(&amp;timer_lock);</span></a>
+<a name="85"><span class="lineNum"> 85 </span> :<span class="lineNoCov"> 0 : __sync_timer(t);</span></a>
+<a name="86"><span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : if (t-&gt;link.next)</span></a>
+<a name="87"><span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : __remove_timer(t);</span></a>
+<a name="88"><span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : unlock(&amp;timer_lock);</span></a>
+<a name="89"><span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="90"><span class="lineNum"> 90 </span> : : </a>
+<a name="91"><span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : void cancel_timer_async(struct timer *t)</span></a>
+<a name="92"><span class="lineNum"> 92 </span> : : {</a>
+<a name="93"><span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : lock(&amp;timer_lock);</span></a>
+<a name="94"><span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : if (t-&gt;link.next)</span></a>
+<a name="95"><span class="lineNum"> 95 </span> :<span class="lineNoCov"> 0 : __remove_timer(t);</span></a>
+<a name="96"><span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : unlock(&amp;timer_lock);</span></a>
+<a name="97"><span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="98"><span class="lineNum"> 98 </span> : : </a>
+<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 100 : static void __schedule_timer_at(struct timer *t, uint64_t when)</span></a>
+<a name="100"><span class="lineNum"> 100 </span> : : {</a>
+<a name="101"><span class="lineNum"> 101 </span> : : struct timer *lt;</a>
+<a name="102"><span class="lineNum"> 102 </span> : : </a>
+<a name="103"><span class="lineNum"> 103 </span> : : /* If the timer is already scheduled, take it out */</a>
+<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 100 : if (t-&gt;link.next)</span></a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : __remove_timer(t);</span></a>
+<a name="106"><span class="lineNum"> 106 </span> : : </a>
+<a name="107"><span class="lineNum"> 107 </span> : : /* Update target */</a>
+<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 100 : t-&gt;target = when;</span></a>
<a name="109"><span class="lineNum"> 109 </span> : : </a>
-<a name="110"><span class="lineNum"> 110 </span> : : /* Update target */</a>
-<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 100 : t-&gt;target = when;</span></a>
-<a name="112"><span class="lineNum"> 112 </span> : : </a>
-<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 100 : if (when == TIMER_POLL) {</span></a>
-<a name="114"><span class="lineNum"> 114 </span> : : /* It's a poller, add it to the poller list */</a>
-<a name="115"><span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : t-&gt;gen = timer_poll_gen;</span></a>
-<a name="116"><span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : list_add_tail(&amp;timer_poll_list, &amp;t-&gt;link);</span></a>
-<a name="117"><span class="lineNum"> 117 </span> : : } else {</a>
-<a name="118"><span class="lineNum"> 118 </span> : : /* It's a real timer, add it in the right spot in the</a>
-<a name="119"><span class="lineNum"> 119 </span> : : * ordered timer list</a>
-<a name="120"><span class="lineNum"> 120 </span> : : */</a>
-<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 2761 : list_for_each(&amp;timer_list, lt, link) {</span></a>
-<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 2757 : if (when &gt;= lt-&gt;target)</span></a>
-<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 2661 : continue;</span></a>
-<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 96 : list_add_before(&amp;timer_list, &amp;t-&gt;link, &amp;lt-&gt;link);</span></a>
-<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 96 : goto bail;</span></a>
-<a name="126"><span class="lineNum"> 126 </span> : : }</a>
-<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 4 : list_add_tail(&amp;timer_list, &amp;t-&gt;link);</span></a>
-<a name="128"><span class="lineNum"> 128 </span> : : }</a>
-<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 100 : bail:</span></a>
-<a name="130"><span class="lineNum"> 130 </span> : : /* Pick up the next timer and upddate the SBE HW timer */</a>
-<a name="131"><span class="lineNum"> 131 </span> :<span class="lineCov"> 100 : lt = list_top(&amp;timer_list, struct timer, link);</span></a>
-<a name="132"><span class="lineNum"> 132 </span> :<span class="lineCov"> 100 : if (lt) {</span></a>
-<a name="133"><span class="lineNum"> 133 </span> :<span class="lineCov"> 100 : update_timer_expiry(lt-&gt;target);</span></a>
-<a name="134"><span class="lineNum"> 134 </span> : : }</a>
-<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 100 : }</span></a>
-<a name="136"><span class="lineNum"> 136 </span> : : </a>
-<a name="137"><span class="lineNum"> 137 </span> :<span class="lineCov"> 100 : void schedule_timer_at(struct timer *t, uint64_t when)</span></a>
-<a name="138"><span class="lineNum"> 138 </span> : : {</a>
-<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 100 : lock(&amp;timer_lock);</span></a>
-<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 100 : __schedule_timer_at(t, when);</span></a>
-<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 100 : unlock(&amp;timer_lock);</span></a>
-<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 100 : }</span></a>
-<a name="143"><span class="lineNum"> 143 </span> : : </a>
-<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 100 : uint64_t schedule_timer(struct timer *t, uint64_t how_long)</span></a>
-<a name="145"><span class="lineNum"> 145 </span> : : {</a>
-<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 100 : uint64_t now = mftb();</span></a>
-<a name="147"><span class="lineNum"> 147 </span> : : </a>
-<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 100 : if (how_long == TIMER_POLL)</span></a>
-<a name="149"><span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : schedule_timer_at(t, TIMER_POLL);</span></a>
-<a name="150"><span class="lineNum"> 150 </span> : : else</a>
-<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 100 : schedule_timer_at(t, now + how_long);</span></a>
+<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 100 : if (when == TIMER_POLL) {</span></a>
+<a name="111"><span class="lineNum"> 111 </span> : : /* It's a poller, add it to the poller list */</a>
+<a name="112"><span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : t-&gt;gen = timer_poll_gen;</span></a>
+<a name="113"><span class="lineNum"> 113 </span> :<span class="lineNoCov"> 0 : list_add_tail(&amp;timer_poll_list, &amp;t-&gt;link);</span></a>
+<a name="114"><span class="lineNum"> 114 </span> : : } else {</a>
+<a name="115"><span class="lineNum"> 115 </span> : : /* It's a real timer, add it in the right spot in the</a>
+<a name="116"><span class="lineNum"> 116 </span> : : * ordered timer list</a>
+<a name="117"><span class="lineNum"> 117 </span> : : */</a>
+<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 2761 : list_for_each(&amp;timer_list, lt, link) {</span></a>
+<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 2757 : if (when &gt;= lt-&gt;target)</span></a>
+<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 2661 : continue;</span></a>
+<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 96 : list_add_before(&amp;timer_list, &amp;lt-&gt;link, &amp;t-&gt;link);</span></a>
+<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 96 : goto bail;</span></a>
+<a name="123"><span class="lineNum"> 123 </span> : : }</a>
+<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 4 : list_add_tail(&amp;timer_list, &amp;t-&gt;link);</span></a>
+<a name="125"><span class="lineNum"> 125 </span> : : }</a>
+<a name="126"><span class="lineNum"> 126 </span> :<span class="lineCov"> 100 : bail:</span></a>
+<a name="127"><span class="lineNum"> 127 </span> : : /* Pick up the next timer and upddate the SBE HW timer */</a>
+<a name="128"><span class="lineNum"> 128 </span> :<span class="lineCov"> 100 : lt = list_top(&amp;timer_list, struct timer, link);</span></a>
+<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 100 : if (lt) {</span></a>
+<a name="130"><span class="lineNum"> 130 </span> :<span class="lineCov"> 100 : update_timer_expiry(lt-&gt;target);</span></a>
+<a name="131"><span class="lineNum"> 131 </span> : : }</a>
+<a name="132"><span class="lineNum"> 132 </span> :<span class="lineCov"> 100 : }</span></a>
+<a name="133"><span class="lineNum"> 133 </span> : : </a>
+<a name="134"><span class="lineNum"> 134 </span> :<span class="lineCov"> 100 : void schedule_timer_at(struct timer *t, uint64_t when)</span></a>
+<a name="135"><span class="lineNum"> 135 </span> : : {</a>
+<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 100 : lock(&amp;timer_lock);</span></a>
+<a name="137"><span class="lineNum"> 137 </span> :<span class="lineCov"> 100 : __schedule_timer_at(t, when);</span></a>
+<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 100 : unlock(&amp;timer_lock);</span></a>
+<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 100 : }</span></a>
+<a name="140"><span class="lineNum"> 140 </span> : : </a>
+<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 100 : uint64_t schedule_timer(struct timer *t, uint64_t how_long)</span></a>
+<a name="142"><span class="lineNum"> 142 </span> : : {</a>
+<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 100 : uint64_t now = mftb();</span></a>
+<a name="144"><span class="lineNum"> 144 </span> : : </a>
+<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 100 : if (how_long == TIMER_POLL)</span></a>
+<a name="146"><span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : schedule_timer_at(t, TIMER_POLL);</span></a>
+<a name="147"><span class="lineNum"> 147 </span> : : else</a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 100 : schedule_timer_at(t, now + how_long);</span></a>
+<a name="149"><span class="lineNum"> 149 </span> : : </a>
+<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 100 : return now;</span></a>
+<a name="151"><span class="lineNum"> 151 </span> : : }</a>
<a name="152"><span class="lineNum"> 152 </span> : : </a>
-<a name="153"><span class="lineNum"> 153 </span> :<span class="lineCov"> 100 : return now;</span></a>
-<a name="154"><span class="lineNum"> 154 </span> : : }</a>
-<a name="155"><span class="lineNum"> 155 </span> : : </a>
-<a name="156"><span class="lineNum"> 156 </span> :<span class="lineCov"> 65466 : static void __check_poll_timers(uint64_t now)</span></a>
-<a name="157"><span class="lineNum"> 157 </span> : : {</a>
-<a name="158"><span class="lineNum"> 158 </span> : : struct timer *t;</a>
-<a name="159"><span class="lineNum"> 159 </span> : : </a>
-<a name="160"><span class="lineNum"> 160 </span> : : /* Don't call this from multiple CPUs at once */</a>
-<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 65466 : if (timer_in_poll)</span></a>
-<a name="162"><span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 65466 : timer_in_poll = true;</span></a>
-<a name="164"><span class="lineNum"> 164 </span> : : </a>
-<a name="165"><span class="lineNum"> 165 </span> : : /*</a>
-<a name="166"><span class="lineNum"> 166 </span> : : * Poll timers might re-enqueue themselves and don't have an</a>
-<a name="167"><span class="lineNum"> 167 </span> : : * expiry so we can't do like normal timers and just run until</a>
-<a name="168"><span class="lineNum"> 168 </span> : : * we hit a wall. Instead, each timer has a generation count,</a>
-<a name="169"><span class="lineNum"> 169 </span> : : * which we set to the current global gen count when we schedule</a>
-<a name="170"><span class="lineNum"> 170 </span> : : * it and update when we run it. It will only be considered if</a>
-<a name="171"><span class="lineNum"> 171 </span> : : * the generation count is different than the current one. We</a>
-<a name="172"><span class="lineNum"> 172 </span> : : * don't try to compare generations being larger or smaller</a>
-<a name="173"><span class="lineNum"> 173 </span> : : * because at boot, this can be called quite quickly and I want</a>
-<a name="174"><span class="lineNum"> 174 </span> : : * to be safe vs. wraps.</a>
-<a name="175"><span class="lineNum"> 175 </span> : : */</a>
-<a name="176"><span class="lineNum"> 176 </span> :<span class="lineCov"> 65466 : timer_poll_gen++;</span></a>
-<a name="177"><span class="lineNum"> 177 </span> : : for (;;) {</a>
-<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 65466 : t = list_top(&amp;timer_poll_list, struct timer, link);</span></a>
-<a name="179"><span class="lineNum"> 179 </span> : : </a>
-<a name="180"><span class="lineNum"> 180 </span> : : /* Top timer has a different generation than current ? Must</a>
-<a name="181"><span class="lineNum"> 181 </span> : : * be older, we are done.</a>
-<a name="182"><span class="lineNum"> 182 </span> : : */</a>
-<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 65466 : if (!t || t-&gt;gen == timer_poll_gen)</span></a>
-<a name="184"><span class="lineNum"> 184 </span> : : break;</a>
-<a name="185"><span class="lineNum"> 185 </span> : : </a>
-<a name="186"><span class="lineNum"> 186 </span> : : /* Top of list still running, we have to delay handling it,</a>
-<a name="187"><span class="lineNum"> 187 </span> : : * let's reprogram the SLW with a small delay. We chose</a>
-<a name="188"><span class="lineNum"> 188 </span> : : * arbitrarily 1us.</a>
-<a name="189"><span class="lineNum"> 189 </span> : : */</a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : if (t-&gt;running) {</span></a>
-<a name="191"><span class="lineNum"> 191 </span> :<span class="lineNoCov"> 0 : update_timer_expiry(now + usecs_to_tb(1));</span></a>
-<a name="192"><span class="lineNum"> 192 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="193"><span class="lineNum"> 193 </span> : : }</a>
-<a name="194"><span class="lineNum"> 194 </span> : : </a>
-<a name="195"><span class="lineNum"> 195 </span> : : /* Allright, first remove it and mark it running */</a>
-<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : __remove_timer(t);</span></a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : t-&gt;running = this_cpu();</span></a>
-<a name="198"><span class="lineNum"> 198 </span> : : </a>
-<a name="199"><span class="lineNum"> 199 </span> : : /* Now we can unlock and call it's expiry */</a>
-<a name="200"><span class="lineNum"> 200 </span> :<span class="lineNoCov"> 0 : unlock(&amp;timer_lock);</span></a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : t-&gt;expiry(t, t-&gt;user_data, now);</span></a>
-<a name="202"><span class="lineNum"> 202 </span> : : </a>
-<a name="203"><span class="lineNum"> 203 </span> : : /* Re-lock and mark not running */</a>
-<a name="204"><span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : lock(&amp;timer_lock);</span></a>
-<a name="205"><span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : t-&gt;running = NULL;</span></a>
-<a name="206"><span class="lineNum"> 206 </span> : : }</a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 65466 : timer_in_poll = false;</span></a>
-<a name="208"><span class="lineNum"> 208 </span> : : }</a>
-<a name="209"><span class="lineNum"> 209 </span> : : </a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 65566 : static void __check_timers(uint64_t now)</span></a>
-<a name="211"><span class="lineNum"> 211 </span> : : {</a>
-<a name="212"><span class="lineNum"> 212 </span> : : struct timer *t;</a>
+<a name="153"><span class="lineNum"> 153 </span> :<span class="lineCov"> 65466 : static void __check_poll_timers(uint64_t now)</span></a>
+<a name="154"><span class="lineNum"> 154 </span> : : {</a>
+<a name="155"><span class="lineNum"> 155 </span> : : struct timer *t;</a>
+<a name="156"><span class="lineNum"> 156 </span> : : </a>
+<a name="157"><span class="lineNum"> 157 </span> : : /* Don't call this from multiple CPUs at once */</a>
+<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 65466 : if (timer_in_poll)</span></a>
+<a name="159"><span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 65466 : timer_in_poll = true;</span></a>
+<a name="161"><span class="lineNum"> 161 </span> : : </a>
+<a name="162"><span class="lineNum"> 162 </span> : : /*</a>
+<a name="163"><span class="lineNum"> 163 </span> : : * Poll timers might re-enqueue themselves and don't have an</a>
+<a name="164"><span class="lineNum"> 164 </span> : : * expiry so we can't do like normal timers and just run until</a>
+<a name="165"><span class="lineNum"> 165 </span> : : * we hit a wall. Instead, each timer has a generation count,</a>
+<a name="166"><span class="lineNum"> 166 </span> : : * which we set to the current global gen count when we schedule</a>
+<a name="167"><span class="lineNum"> 167 </span> : : * it and update when we run it. It will only be considered if</a>
+<a name="168"><span class="lineNum"> 168 </span> : : * the generation count is different than the current one. We</a>
+<a name="169"><span class="lineNum"> 169 </span> : : * don't try to compare generations being larger or smaller</a>
+<a name="170"><span class="lineNum"> 170 </span> : : * because at boot, this can be called quite quickly and I want</a>
+<a name="171"><span class="lineNum"> 171 </span> : : * to be safe vs. wraps.</a>
+<a name="172"><span class="lineNum"> 172 </span> : : */</a>
+<a name="173"><span class="lineNum"> 173 </span> :<span class="lineCov"> 65466 : timer_poll_gen++;</span></a>
+<a name="174"><span class="lineNum"> 174 </span> : : for (;;) {</a>
+<a name="175"><span class="lineNum"> 175 </span> :<span class="lineCov"> 65466 : t = list_top(&amp;timer_poll_list, struct timer, link);</span></a>
+<a name="176"><span class="lineNum"> 176 </span> : : </a>
+<a name="177"><span class="lineNum"> 177 </span> : : /* Top timer has a different generation than current ? Must</a>
+<a name="178"><span class="lineNum"> 178 </span> : : * be older, we are done.</a>
+<a name="179"><span class="lineNum"> 179 </span> : : */</a>
+<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 65466 : if (!t || t-&gt;gen == timer_poll_gen)</span></a>
+<a name="181"><span class="lineNum"> 181 </span> : : break;</a>
+<a name="182"><span class="lineNum"> 182 </span> : : </a>
+<a name="183"><span class="lineNum"> 183 </span> : : /* Top of list still running, we have to delay handling it,</a>
+<a name="184"><span class="lineNum"> 184 </span> : : * let's reprogram the SLW with a small delay. We chose</a>
+<a name="185"><span class="lineNum"> 185 </span> : : * arbitrarily 1us.</a>
+<a name="186"><span class="lineNum"> 186 </span> : : */</a>
+<a name="187"><span class="lineNum"> 187 </span> :<span class="lineNoCov"> 0 : if (t-&gt;running) {</span></a>
+<a name="188"><span class="lineNum"> 188 </span> :<span class="lineNoCov"> 0 : update_timer_expiry(now + usecs_to_tb(1));</span></a>
+<a name="189"><span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="190"><span class="lineNum"> 190 </span> : : }</a>
+<a name="191"><span class="lineNum"> 191 </span> : : </a>
+<a name="192"><span class="lineNum"> 192 </span> : : /* Allright, first remove it and mark it running */</a>
+<a name="193"><span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : __remove_timer(t);</span></a>
+<a name="194"><span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : t-&gt;running = this_cpu();</span></a>
+<a name="195"><span class="lineNum"> 195 </span> : : </a>
+<a name="196"><span class="lineNum"> 196 </span> : : /* Now we can unlock and call it's expiry */</a>
+<a name="197"><span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : unlock(&amp;timer_lock);</span></a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineNoCov"> 0 : t-&gt;expiry(t, t-&gt;user_data, now);</span></a>
+<a name="199"><span class="lineNum"> 199 </span> : : </a>
+<a name="200"><span class="lineNum"> 200 </span> : : /* Re-lock and mark not running */</a>
+<a name="201"><span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : lock(&amp;timer_lock);</span></a>
+<a name="202"><span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : t-&gt;running = NULL;</span></a>
+<a name="203"><span class="lineNum"> 203 </span> : : }</a>
+<a name="204"><span class="lineNum"> 204 </span> :<span class="lineCov"> 65466 : timer_in_poll = false;</span></a>
+<a name="205"><span class="lineNum"> 205 </span> : : }</a>
+<a name="206"><span class="lineNum"> 206 </span> : : </a>
+<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 65566 : static void __check_timers(uint64_t now)</span></a>
+<a name="208"><span class="lineNum"> 208 </span> : : {</a>
+<a name="209"><span class="lineNum"> 209 </span> : : struct timer *t;</a>
+<a name="210"><span class="lineNum"> 210 </span> : : </a>
+<a name="211"><span class="lineNum"> 211 </span> : : for (;;) {</a>
+<a name="212"><span class="lineNum"> 212 </span> :<span class="lineCov"> 65566 : t = list_top(&amp;timer_list, struct timer, link);</span></a>
<a name="213"><span class="lineNum"> 213 </span> : : </a>
-<a name="214"><span class="lineNum"> 214 </span> : : for (;;) {</a>
-<a name="215"><span class="lineNum"> 215 </span> :<span class="lineCov"> 65566 : t = list_top(&amp;timer_list, struct timer, link);</span></a>
-<a name="216"><span class="lineNum"> 216 </span> : : </a>
-<a name="217"><span class="lineNum"> 217 </span> : : /* Top of list not expired ? that's it ... */</a>
-<a name="218"><span class="lineNum"> 218 </span> :<span class="lineCov"> 65566 : if (!t || t-&gt;target &gt; now)</span></a>
-<a name="219"><span class="lineNum"> 219 </span> : : break;</a>
-<a name="220"><span class="lineNum"> 220 </span> : : </a>
-<a name="221"><span class="lineNum"> 221 </span> : : /* Top of list still running, we have to delay handling</a>
-<a name="222"><span class="lineNum"> 222 </span> : : * it. For now just skip until the next poll, when we have</a>
-<a name="223"><span class="lineNum"> 223 </span> : : * SLW interrupts, we'll probably want to trip another one</a>
-<a name="224"><span class="lineNum"> 224 </span> : : * ASAP</a>
-<a name="225"><span class="lineNum"> 225 </span> : : */</a>
-<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 100 : if (t-&gt;running)</span></a>
-<a name="227"><span class="lineNum"> 227 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="228"><span class="lineNum"> 228 </span> : : </a>
-<a name="229"><span class="lineNum"> 229 </span> : : /* Allright, first remove it and mark it running */</a>
-<a name="230"><span class="lineNum"> 230 </span> :<span class="lineCov"> 100 : __remove_timer(t);</span></a>
-<a name="231"><span class="lineNum"> 231 </span> :<span class="lineCov"> 100 : t-&gt;running = this_cpu();</span></a>
-<a name="232"><span class="lineNum"> 232 </span> : : </a>
-<a name="233"><span class="lineNum"> 233 </span> : : /* Now we can unlock and call it's expiry */</a>
-<a name="234"><span class="lineNum"> 234 </span> :<span class="lineCov"> 100 : unlock(&amp;timer_lock);</span></a>
-<a name="235"><span class="lineNum"> 235 </span> :<span class="lineCov"> 100 : t-&gt;expiry(t, t-&gt;user_data, now);</span></a>
-<a name="236"><span class="lineNum"> 236 </span> : : </a>
-<a name="237"><span class="lineNum"> 237 </span> : : /* Re-lock and mark not running */</a>
-<a name="238"><span class="lineNum"> 238 </span> :<span class="lineCov"> 100 : lock(&amp;timer_lock);</span></a>
-<a name="239"><span class="lineNum"> 239 </span> :<span class="lineCov"> 100 : t-&gt;running = NULL;</span></a>
-<a name="240"><span class="lineNum"> 240 </span> : : </a>
-<a name="241"><span class="lineNum"> 241 </span> : : /* Update time stamp */</a>
-<a name="242"><span class="lineNum"> 242 </span> :<span class="lineCov"> 100 : now = mftb();</span></a>
-<a name="243"><span class="lineNum"> 243 </span> : : }</a>
-<a name="244"><span class="lineNum"> 244 </span> :<span class="lineCov"> 65466 : }</span></a>
-<a name="245"><span class="lineNum"> 245 </span> : : </a>
-<a name="246"><span class="lineNum"> 246 </span> :<span class="lineCov"> 65466 : void check_timers(bool from_interrupt)</span></a>
-<a name="247"><span class="lineNum"> 247 </span> : : {</a>
-<a name="248"><span class="lineNum"> 248 </span> :<span class="lineCov"> 65466 : uint64_t now = mftb();</span></a>
-<a name="249"><span class="lineNum"> 249 </span> : : </a>
-<a name="250"><span class="lineNum"> 250 </span> : : /* This is the polling variant, the SLW interrupt path, when it</a>
-<a name="251"><span class="lineNum"> 251 </span> : : * exists, will use a slight variant of this that doesn't call</a>
-<a name="252"><span class="lineNum"> 252 </span> : : * the pollers</a>
-<a name="253"><span class="lineNum"> 253 </span> : : */</a>
-<a name="254"><span class="lineNum"> 254 </span> : : </a>
-<a name="255"><span class="lineNum"> 255 </span> : : /* Lockless &quot;peek&quot;, a bit racy but shouldn't be a problem as</a>
-<a name="256"><span class="lineNum"> 256 </span> : : * we are only looking at whether the list is empty</a>
-<a name="257"><span class="lineNum"> 257 </span> : : */</a>
-<a name="258"><span class="lineNum"> 258 </span> :<span class="lineCov"> 130932 : if (list_empty_nocheck(&amp;timer_poll_list) &amp;&amp;</span></a>
-<a name="259"><span class="lineNum"> 259 </span> :<span class="lineCov"> 65466 : list_empty_nocheck(&amp;timer_list))</span></a>
-<a name="260"><span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="261"><span class="lineNum"> 261 </span> : : </a>
-<a name="262"><span class="lineNum"> 262 </span> : : /* Take lock and try again */</a>
-<a name="263"><span class="lineNum"> 263 </span> :<span class="lineCov"> 65466 : lock(&amp;timer_lock);</span></a>
-<a name="264"><span class="lineNum"> 264 </span> :<span class="lineCov"> 65466 : if (!from_interrupt)</span></a>
-<a name="265"><span class="lineNum"> 265 </span> :<span class="lineCov"> 65466 : __check_poll_timers(now);</span></a>
-<a name="266"><span class="lineNum"> 266 </span> :<span class="lineCov"> 65466 : __check_timers(now);</span></a>
-<a name="267"><span class="lineNum"> 267 </span> :<span class="lineCov"> 65466 : unlock(&amp;timer_lock);</span></a>
-<a name="268"><span class="lineNum"> 268 </span> : : }</a>
-<a name="269"><span class="lineNum"> 269 </span> : : </a>
-<a name="270"><span class="lineNum"> 270 </span> : : #ifndef __TEST__</a>
-<a name="271"><span class="lineNum"> 271 </span> : : </a>
-<a name="272"><span class="lineNum"> 272 </span> : : void late_init_timers(void)</a>
-<a name="273"><span class="lineNum"> 273 </span> : : {</a>
-<a name="274"><span class="lineNum"> 274 </span> : : int heartbeat = HEARTBEAT_DEFAULT_MS;</a>
-<a name="275"><span class="lineNum"> 275 </span> : : </a>
-<a name="276"><span class="lineNum"> 276 </span> : : /* Add a property requesting the OS to call opal_poll_event() at</a>
-<a name="277"><span class="lineNum"> 277 </span> : : * a specified interval in order for us to run our background</a>
-<a name="278"><span class="lineNum"> 278 </span> : : * low priority pollers.</a>
-<a name="279"><span class="lineNum"> 279 </span> : : *</a>
-<a name="280"><span class="lineNum"> 280 </span> : : * If a platform quirk exists, use that, else use the default.</a>
+<a name="214"><span class="lineNum"> 214 </span> : : /* Top of list not expired ? that's it ... */</a>
+<a name="215"><span class="lineNum"> 215 </span> :<span class="lineCov"> 65566 : if (!t || t-&gt;target &gt; now)</span></a>
+<a name="216"><span class="lineNum"> 216 </span> : : break;</a>
+<a name="217"><span class="lineNum"> 217 </span> : : </a>
+<a name="218"><span class="lineNum"> 218 </span> : : /* Top of list still running, we have to delay handling</a>
+<a name="219"><span class="lineNum"> 219 </span> : : * it. For now just skip until the next poll, when we have</a>
+<a name="220"><span class="lineNum"> 220 </span> : : * SLW interrupts, we'll probably want to trip another one</a>
+<a name="221"><span class="lineNum"> 221 </span> : : * ASAP</a>
+<a name="222"><span class="lineNum"> 222 </span> : : */</a>
+<a name="223"><span class="lineNum"> 223 </span> :<span class="lineCov"> 100 : if (t-&gt;running)</span></a>
+<a name="224"><span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="225"><span class="lineNum"> 225 </span> : : </a>
+<a name="226"><span class="lineNum"> 226 </span> : : /* Allright, first remove it and mark it running */</a>
+<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 100 : __remove_timer(t);</span></a>
+<a name="228"><span class="lineNum"> 228 </span> :<span class="lineCov"> 100 : t-&gt;running = this_cpu();</span></a>
+<a name="229"><span class="lineNum"> 229 </span> : : </a>
+<a name="230"><span class="lineNum"> 230 </span> : : /* Now we can unlock and call it's expiry */</a>
+<a name="231"><span class="lineNum"> 231 </span> :<span class="lineCov"> 100 : unlock(&amp;timer_lock);</span></a>
+<a name="232"><span class="lineNum"> 232 </span> :<span class="lineCov"> 100 : t-&gt;expiry(t, t-&gt;user_data, now);</span></a>
+<a name="233"><span class="lineNum"> 233 </span> : : </a>
+<a name="234"><span class="lineNum"> 234 </span> : : /* Re-lock and mark not running */</a>
+<a name="235"><span class="lineNum"> 235 </span> :<span class="lineCov"> 100 : lock(&amp;timer_lock);</span></a>
+<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 100 : t-&gt;running = NULL;</span></a>
+<a name="237"><span class="lineNum"> 237 </span> : : </a>
+<a name="238"><span class="lineNum"> 238 </span> : : /* Update time stamp */</a>
+<a name="239"><span class="lineNum"> 239 </span> :<span class="lineCov"> 100 : now = mftb();</span></a>
+<a name="240"><span class="lineNum"> 240 </span> : : }</a>
+<a name="241"><span class="lineNum"> 241 </span> :<span class="lineCov"> 65466 : }</span></a>
+<a name="242"><span class="lineNum"> 242 </span> : : </a>
+<a name="243"><span class="lineNum"> 243 </span> :<span class="lineCov"> 65466 : void check_timers(bool from_interrupt)</span></a>
+<a name="244"><span class="lineNum"> 244 </span> : : {</a>
+<a name="245"><span class="lineNum"> 245 </span> :<span class="lineCov"> 65466 : uint64_t now = mftb();</span></a>
+<a name="246"><span class="lineNum"> 246 </span> : : </a>
+<a name="247"><span class="lineNum"> 247 </span> : : /* This is the polling variant, the SLW interrupt path, when it</a>
+<a name="248"><span class="lineNum"> 248 </span> : : * exists, will use a slight variant of this that doesn't call</a>
+<a name="249"><span class="lineNum"> 249 </span> : : * the pollers</a>
+<a name="250"><span class="lineNum"> 250 </span> : : */</a>
+<a name="251"><span class="lineNum"> 251 </span> : : </a>
+<a name="252"><span class="lineNum"> 252 </span> : : /* Lockless &quot;peek&quot;, a bit racy but shouldn't be a problem as</a>
+<a name="253"><span class="lineNum"> 253 </span> : : * we are only looking at whether the list is empty</a>
+<a name="254"><span class="lineNum"> 254 </span> : : */</a>
+<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 130932 : if (list_empty_nocheck(&amp;timer_poll_list) &amp;&amp;</span></a>
+<a name="256"><span class="lineNum"> 256 </span> :<span class="lineCov"> 65466 : list_empty_nocheck(&amp;timer_list))</span></a>
+<a name="257"><span class="lineNum"> 257 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="258"><span class="lineNum"> 258 </span> : : </a>
+<a name="259"><span class="lineNum"> 259 </span> : : /* Take lock and try again */</a>
+<a name="260"><span class="lineNum"> 260 </span> :<span class="lineCov"> 65466 : lock(&amp;timer_lock);</span></a>
+<a name="261"><span class="lineNum"> 261 </span> :<span class="lineCov"> 65466 : if (!from_interrupt)</span></a>
+<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 65466 : __check_poll_timers(now);</span></a>
+<a name="263"><span class="lineNum"> 263 </span> :<span class="lineCov"> 65466 : __check_timers(now);</span></a>
+<a name="264"><span class="lineNum"> 264 </span> :<span class="lineCov"> 65466 : unlock(&amp;timer_lock);</span></a>
+<a name="265"><span class="lineNum"> 265 </span> : : }</a>
+<a name="266"><span class="lineNum"> 266 </span> : : </a>
+<a name="267"><span class="lineNum"> 267 </span> : : #ifndef __TEST__</a>
+<a name="268"><span class="lineNum"> 268 </span> : : </a>
+<a name="269"><span class="lineNum"> 269 </span> : : void late_init_timers(void)</a>
+<a name="270"><span class="lineNum"> 270 </span> : : {</a>
+<a name="271"><span class="lineNum"> 271 </span> : : int heartbeat = HEARTBEAT_DEFAULT_MS;</a>
+<a name="272"><span class="lineNum"> 272 </span> : : </a>
+<a name="273"><span class="lineNum"> 273 </span> : : /* Add a property requesting the OS to call opal_poll_event() at</a>
+<a name="274"><span class="lineNum"> 274 </span> : : * a specified interval in order for us to run our background</a>
+<a name="275"><span class="lineNum"> 275 </span> : : * low priority pollers.</a>
+<a name="276"><span class="lineNum"> 276 </span> : : *</a>
+<a name="277"><span class="lineNum"> 277 </span> : : * If a platform quirk exists, use that, else use the default.</a>
+<a name="278"><span class="lineNum"> 278 </span> : : *</a>
+<a name="279"><span class="lineNum"> 279 </span> : : * If we have an SBE timer facility, we run this 10 times slower,</a>
+<a name="280"><span class="lineNum"> 280 </span> : : * we could possibly completely get rid of it.</a>
<a name="281"><span class="lineNum"> 281 </span> : : *</a>
-<a name="282"><span class="lineNum"> 282 </span> : : * If we have an SBE timer facility, we run this 10 times slower,</a>
-<a name="283"><span class="lineNum"> 283 </span> : : * we could possibly completely get rid of it.</a>
-<a name="284"><span class="lineNum"> 284 </span> : : *</a>
-<a name="285"><span class="lineNum"> 285 </span> : : * We use a value in milliseconds, we don't want this to ever be</a>
-<a name="286"><span class="lineNum"> 286 </span> : : * faster than that.</a>
-<a name="287"><span class="lineNum"> 287 </span> : : */</a>
-<a name="288"><span class="lineNum"> 288 </span> : : if (platform.heartbeat_time) {</a>
-<a name="289"><span class="lineNum"> 289 </span> : : heartbeat = platform.heartbeat_time();</a>
-<a name="290"><span class="lineNum"> 290 </span> : : } else if (p9_sbe_timer_ok()) {</a>
-<a name="291"><span class="lineNum"> 291 </span> : : heartbeat = HEARTBEAT_DEFAULT_MS * 10;</a>
-<a name="292"><span class="lineNum"> 292 </span> : : } else if (p8_sbe_timer_ok()) {</a>
-<a name="293"><span class="lineNum"> 293 </span> : : heartbeat = HEARTBEAT_DEFAULT_MS * 10;</a>
-<a name="294"><span class="lineNum"> 294 </span> : : }</a>
-<a name="295"><span class="lineNum"> 295 </span> : : </a>
-<a name="296"><span class="lineNum"> 296 </span> : : dt_add_property_cells(opal_node, &quot;ibm,heartbeat-ms&quot;, heartbeat);</a>
-<a name="297"><span class="lineNum"> 297 </span> : : }</a>
-<a name="298"><span class="lineNum"> 298 </span> : : #endif</a>
+<a name="282"><span class="lineNum"> 282 </span> : : * We use a value in milliseconds, we don't want this to ever be</a>
+<a name="283"><span class="lineNum"> 283 </span> : : * faster than that.</a>
+<a name="284"><span class="lineNum"> 284 </span> : : */</a>
+<a name="285"><span class="lineNum"> 285 </span> : : if (platform.heartbeat_time) {</a>
+<a name="286"><span class="lineNum"> 286 </span> : : heartbeat = platform.heartbeat_time();</a>
+<a name="287"><span class="lineNum"> 287 </span> : : } else if (sbe_timer_ok()) {</a>
+<a name="288"><span class="lineNum"> 288 </span> : : heartbeat = HEARTBEAT_DEFAULT_MS * 10;</a>
+<a name="289"><span class="lineNum"> 289 </span> : : }</a>
+<a name="290"><span class="lineNum"> 290 </span> : : </a>
+<a name="291"><span class="lineNum"> 291 </span> : : dt_add_property_cells(opal_node, &quot;ibm,heartbeat-ms&quot;, heartbeat);</a>
+<a name="292"><span class="lineNum"> 292 </span> : : }</a>
+<a name="293"><span class="lineNum"> 293 </span> : : #endif</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/core/trace.c.func-sort-c.html b/coverage-report/core/trace.c.func-sort-c.html
index 21c11e6..c2aa57f 100644
--- a/coverage-report/core/trace.c.func-sort-c.html
+++ b/coverage-report/core/trace.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">112</td>
- <td class="headerCovTableEntry">127</td>
- <td class="headerCovTableEntryMed">88.2 %</td>
+ <td class="headerCovTableEntry">90</td>
+ <td class="headerCovTableEntry">126</td>
+ <td class="headerCovTableEntryLo">71.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntry">7</td>
- <td class="headerCovTableEntryMed">85.7 %</td>
+ <td class="headerCovTableEntryLo">71.4 %</td>
</tr>
<tr>
<td></td>
@@ -69,32 +69,32 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="trace.c.gcov.html#31">init_boot_tracebuf</a></td>
+ <td class="coverFn"><a href="trace.c.gcov.html#32">init_boot_tracebuf</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="trace.c.gcov.html#216">init_trace_buffers</a></td>
- <td class="coverFnHi">1</td>
+ <td class="coverFn"><a href="trace.c.gcov.html#157">trace_add_dt_props</a></td>
+ <td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="trace.c.gcov.html#156">trace_add_dt_props</a></td>
+ <td class="coverFn"><a href="trace.c.gcov.html#222">init_trace_buffers</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="trace.c.gcov.html#199">trace_add_desc</a></td>
+ <td class="coverFn"><a href="trace.c.gcov.html#205">trace_add_desc</a></td>
<td class="coverFnHi">3</td>
</tr>
<tr>
- <td class="coverFn"><a href="trace.c.gcov.html#40">tracebuf_extra</a></td>
+ <td class="coverFn"><a href="trace.c.gcov.html#41">tracebuf_extra</a></td>
<td class="coverFnHi">4</td>
</tr>
<tr>
- <td class="coverFn"><a href="trace.c.gcov.html#48">handle_repeat</a></td>
- <td class="coverFnHi">6418116</td>
+ <td class="coverFn"><a href="trace.c.gcov.html#49">handle_repeat</a></td>
+ <td class="coverFnHi">6418120</td>
</tr>
<tr>
- <td class="coverFn"><a href="trace.c.gcov.html#104">trace_add</a></td>
- <td class="coverFnHi">6418116</td>
+ <td class="coverFn"><a href="trace.c.gcov.html#105">trace_add</a></td>
+ <td class="coverFnHi">6418120</td>
</tr>
</table>
<br>
diff --git a/coverage-report/core/trace.c.func.html b/coverage-report/core/trace.c.func.html
index 957b48c..1fddb96 100644
--- a/coverage-report/core/trace.c.func.html
+++ b/coverage-report/core/trace.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">112</td>
- <td class="headerCovTableEntry">127</td>
- <td class="headerCovTableEntryMed">88.2 %</td>
+ <td class="headerCovTableEntry">90</td>
+ <td class="headerCovTableEntry">126</td>
+ <td class="headerCovTableEntryLo">71.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntry">7</td>
- <td class="headerCovTableEntryMed">85.7 %</td>
+ <td class="headerCovTableEntryLo">71.4 %</td>
</tr>
<tr>
<td></td>
@@ -69,31 +69,31 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="trace.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="trace.c.gcov.html#48">handle_repeat</a></td>
- <td class="coverFnHi">6418116</td>
+ <td class="coverFn"><a href="trace.c.gcov.html#49">handle_repeat</a></td>
+ <td class="coverFnHi">6418120</td>
</tr>
<tr>
- <td class="coverFn"><a href="trace.c.gcov.html#31">init_boot_tracebuf</a></td>
+ <td class="coverFn"><a href="trace.c.gcov.html#32">init_boot_tracebuf</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="trace.c.gcov.html#216">init_trace_buffers</a></td>
+ <td class="coverFn"><a href="trace.c.gcov.html#222">init_trace_buffers</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="trace.c.gcov.html#104">trace_add</a></td>
- <td class="coverFnHi">6418116</td>
+ <td class="coverFn"><a href="trace.c.gcov.html#105">trace_add</a></td>
+ <td class="coverFnHi">6418120</td>
</tr>
<tr>
- <td class="coverFn"><a href="trace.c.gcov.html#199">trace_add_desc</a></td>
+ <td class="coverFn"><a href="trace.c.gcov.html#205">trace_add_desc</a></td>
<td class="coverFnHi">3</td>
</tr>
<tr>
- <td class="coverFn"><a href="trace.c.gcov.html#156">trace_add_dt_props</a></td>
- <td class="coverFnHi">1</td>
+ <td class="coverFn"><a href="trace.c.gcov.html#157">trace_add_dt_props</a></td>
+ <td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="trace.c.gcov.html#40">tracebuf_extra</a></td>
+ <td class="coverFn"><a href="trace.c.gcov.html#41">tracebuf_extra</a></td>
<td class="coverFnHi">4</td>
</tr>
</table>
diff --git a/coverage-report/core/trace.c.gcov.html b/coverage-report/core/trace.c.gcov.html
index 287c871..9f1e614 100644
--- a/coverage-report/core/trace.c.gcov.html
+++ b/coverage-report/core/trace.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">112</td>
- <td class="headerCovTableEntry">127</td>
- <td class="headerCovTableEntryMed">88.2 %</td>
+ <td class="headerCovTableEntry">90</td>
+ <td class="headerCovTableEntry">126</td>
+ <td class="headerCovTableEntryLo">71.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntry">7</td>
- <td class="headerCovTableEntryMed">85.7 %</td>
+ <td class="headerCovTableEntryLo">71.4 %</td>
</tr>
<tr>
<td></td>
@@ -89,248 +89,251 @@
<a name="18"><span class="lineNum"> 18 </span> : : #include &lt;skiboot.h&gt;</a>
<a name="19"><span class="lineNum"> 19 </span> : : #include &lt;opal-api.h&gt;</a>
<a name="20"><span class="lineNum"> 20 </span> : : #include &lt;debug_descriptor.h&gt;</a>
-<a name="21"><span class="lineNum"> 21 </span> : : </a>
-<a name="22"><span class="lineNum"> 22 </span> : : #define DEBUG_TRACES</a>
-<a name="23"><span class="lineNum"> 23 </span> : : </a>
-<a name="24"><span class="lineNum"> 24 </span> : : #define MAX_SIZE sizeof(union trace)</a>
-<a name="25"><span class="lineNum"> 25 </span> : : </a>
-<a name="26"><span class="lineNum"> 26 </span> : : /* Smaller trace buffer for early booting */</a>
-<a name="27"><span class="lineNum"> 27 </span> : : #define BOOT_TBUF_SZ 65536</a>
-<a name="28"><span class="lineNum"> 28 </span> : : static struct {</a>
-<a name="29"><span class="lineNum"> 29 </span> : : struct trace_info trace_info;</a>
-<a name="30"><span class="lineNum"> 30 </span> : : char buf[BOOT_TBUF_SZ + MAX_SIZE];</a>
-<a name="31"><span class="lineNum"> 31 </span> : : } boot_tracebuf __section(&quot;.data.boot_trace&quot;);</a>
-<a name="32"><span class="lineNum"> 32 </span> : : </a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineNoCov"> 0 : void init_boot_tracebuf(struct cpu_thread *boot_cpu)</span></a>
-<a name="34"><span class="lineNum"> 34 </span> : : {</a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineNoCov"> 0 : init_lock(&amp;boot_tracebuf.trace_info.lock);</span></a>
-<a name="36"><span class="lineNum"> 36 </span> :<span class="lineNoCov"> 0 : boot_tracebuf.trace_info.tb.buf_size = cpu_to_be64(BOOT_TBUF_SZ);</span></a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineNoCov"> 0 : boot_tracebuf.trace_info.tb.max_size = cpu_to_be32(MAX_SIZE);</span></a>
-<a name="38"><span class="lineNum"> 38 </span> : : </a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineNoCov"> 0 : boot_cpu-&gt;trace = &amp;boot_tracebuf.trace_info;</span></a>
-<a name="40"><span class="lineNum"> 40 </span> :<span class="lineNoCov"> 0 : }</span></a>
-<a name="41"><span class="lineNum"> 41 </span> : : </a>
-<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 4 : static size_t tracebuf_extra(void)</span></a>
-<a name="43"><span class="lineNum"> 43 </span> : : {</a>
-<a name="44"><span class="lineNum"> 44 </span> : : /* We make room for the largest possible record */</a>
-<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 4 : return TBUF_SZ + MAX_SIZE;</span></a>
-<a name="46"><span class="lineNum"> 46 </span> : : }</a>
-<a name="47"><span class="lineNum"> 47 </span> : : </a>
-<a name="48"><span class="lineNum"> 48 </span> : : /* To avoid bloating each entry, repeats are actually specific entries.</a>
-<a name="49"><span class="lineNum"> 49 </span> : : * tb-&gt;last points to the last (non-repeat) entry. */</a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 6418116 : static bool handle_repeat(struct tracebuf *tb, const union trace *trace)</span></a>
-<a name="51"><span class="lineNum"> 51 </span> : : {</a>
-<a name="52"><span class="lineNum"> 52 </span> : : struct trace_hdr *prev;</a>
-<a name="53"><span class="lineNum"> 53 </span> : : struct trace_repeat *rpt;</a>
-<a name="54"><span class="lineNum"> 54 </span> : : u32 len;</a>
-<a name="55"><span class="lineNum"> 55 </span> : : </a>
-<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 6418116 : prev = (void *)tb-&gt;buf + be64_to_cpu(tb-&gt;last) % be64_to_cpu(tb-&gt;buf_size);</span></a>
-<a name="57"><span class="lineNum"> 57 </span> : : </a>
-<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 6418116 : if (prev-&gt;type != trace-&gt;hdr.type</span></a>
-<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 3121739 : || prev-&gt;len_div_8 != trace-&gt;hdr.len_div_8</span></a>
-<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 3121739 : || prev-&gt;cpu != trace-&gt;hdr.cpu)</span></a>
-<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 3296377 : return false;</span></a>
-<a name="62"><span class="lineNum"> 62 </span> : : </a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 3121739 : len = prev-&gt;len_div_8 &lt;&lt; 3;</span></a>
-<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 3121739 : if (memcmp(prev + 1, &amp;trace-&gt;hdr + 1, len - sizeof(*prev)) != 0)</span></a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="66"><span class="lineNum"> 66 </span> : : </a>
-<a name="67"><span class="lineNum"> 67 </span> : : /* If they've consumed prev entry, don't repeat. */</a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 3121739 : if (be64_to_cpu(tb-&gt;last) &lt; be64_to_cpu(tb-&gt;start))</span></a>
-<a name="69"><span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="70"><span class="lineNum"> 70 </span> : : </a>
-<a name="71"><span class="lineNum"> 71 </span> : : /* OK, it's a duplicate. Do we already have repeat? */</a>
-<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 3121739 : if (be64_to_cpu(tb-&gt;last) + len != be64_to_cpu(tb-&gt;end)) {</span></a>
-<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 1985763 : u64 pos = be64_to_cpu(tb-&gt;last) + len;</span></a>
-<a name="74"><span class="lineNum"> 74 </span> : : /* FIXME: Reader is not protected from seeing this! */</a>
-<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 1985763 : rpt = (void *)tb-&gt;buf + pos % be64_to_cpu(tb-&gt;buf_size);</span></a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 1985763 : assert(pos + rpt-&gt;len_div_8*8 == be64_to_cpu(tb-&gt;end));</span></a>
-<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 1985763 : assert(rpt-&gt;type == TRACE_REPEAT);</span></a>
-<a name="78"><span class="lineNum"> 78 </span> : : </a>
-<a name="79"><span class="lineNum"> 79 </span> : : /* If this repeat entry is full, don't repeat. */</a>
-<a name="80"><span class="lineNum"> 80 </span> :<span class="lineCov"> 1985763 : if (be16_to_cpu(rpt-&gt;num) == 0xFFFF)</span></a>
-<a name="81"><span class="lineNum"> 81 </span> :<span class="lineCov"> 16 : return false;</span></a>
-<a name="82"><span class="lineNum"> 82 </span> : : </a>
-<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 1985747 : rpt-&gt;num = cpu_to_be16(be16_to_cpu(rpt-&gt;num) + 1);</span></a>
-<a name="84"><span class="lineNum"> 84 </span> :<span class="lineCov"> 1985747 : rpt-&gt;timestamp = trace-&gt;hdr.timestamp;</span></a>
-<a name="85"><span class="lineNum"> 85 </span> :<span class="lineCov"> 1985747 : return true;</span></a>
-<a name="86"><span class="lineNum"> 86 </span> : : }</a>
-<a name="87"><span class="lineNum"> 87 </span> : : </a>
-<a name="88"><span class="lineNum"> 88 </span> : : /*</a>
-<a name="89"><span class="lineNum"> 89 </span> : : * Generate repeat entry: it's the smallest possible entry, so we</a>
-<a name="90"><span class="lineNum"> 90 </span> : : * must have eliminated old entries.</a>
-<a name="91"><span class="lineNum"> 91 </span> : : */</a>
-<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 1135976 : assert(trace-&gt;hdr.len_div_8 * 8 &gt;= sizeof(*rpt));</span></a>
-<a name="93"><span class="lineNum"> 93 </span> : : </a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 1135976 : rpt = (void *)tb-&gt;buf + be64_to_cpu(tb-&gt;end) % be64_to_cpu(tb-&gt;buf_size);</span></a>
-<a name="95"><span class="lineNum"> 95 </span> :<span class="lineCov"> 1135976 : rpt-&gt;timestamp = trace-&gt;hdr.timestamp;</span></a>
-<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 1135976 : rpt-&gt;type = TRACE_REPEAT;</span></a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 1135976 : rpt-&gt;len_div_8 = sizeof(*rpt) &gt;&gt; 3;</span></a>
-<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 1135976 : rpt-&gt;cpu = trace-&gt;hdr.cpu;</span></a>
-<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 1135976 : rpt-&gt;prev_len = cpu_to_be16(trace-&gt;hdr.len_div_8 &lt;&lt; 3);</span></a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 1135976 : rpt-&gt;num = cpu_to_be16(1);</span></a>
-<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 1135976 : lwsync(); /* write barrier: complete repeat record before exposing */</span></a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 1135976 : tb-&gt;end = cpu_to_be64(be64_to_cpu(tb-&gt;end) + sizeof(*rpt));</span></a>
-<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 1135976 : return true;</span></a>
-<a name="104"><span class="lineNum"> 104 </span> : : }</a>
-<a name="105"><span class="lineNum"> 105 </span> : : </a>
-<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 6418116 : void trace_add(union trace *trace, u8 type, u16 len)</span></a>
-<a name="107"><span class="lineNum"> 107 </span> : : {</a>
-<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 6418116 : struct trace_info *ti = this_cpu()-&gt;trace;</span></a>
-<a name="109"><span class="lineNum"> 109 </span> : : unsigned int tsz;</a>
-<a name="110"><span class="lineNum"> 110 </span> : : </a>
-<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 6418116 : trace-&gt;hdr.type = type;</span></a>
-<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 6418116 : trace-&gt;hdr.len_div_8 = (len + 7) &gt;&gt; 3;</span></a>
-<a name="113"><span class="lineNum"> 113 </span> : : </a>
-<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 6418116 : tsz = trace-&gt;hdr.len_div_8 &lt;&lt; 3;</span></a>
-<a name="115"><span class="lineNum"> 115 </span> : : </a>
-<a name="116"><span class="lineNum"> 116 </span> : : #ifdef DEBUG_TRACES</a>
-<a name="117"><span class="lineNum"> 117 </span> :<span class="lineCov"> 6418116 : assert(tsz &gt;= sizeof(trace-&gt;hdr));</span></a>
-<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 6418116 : assert(tsz &lt;= sizeof(*trace));</span></a>
-<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 6418116 : assert(trace-&gt;hdr.type != TRACE_REPEAT);</span></a>
-<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 6418116 : assert(trace-&gt;hdr.type != TRACE_OVERFLOW);</span></a>
-<a name="121"><span class="lineNum"> 121 </span> : : #endif</a>
-<a name="122"><span class="lineNum"> 122 </span> : : /* Skip traces not enabled in the debug descriptor */</a>
-<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 6418116 : if (trace-&gt;hdr.type &lt; (8 * sizeof(debug_descriptor.trace_mask)) &amp;&amp;</span></a>
-<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 3997699 : !((1ul &lt;&lt; trace-&gt;hdr.type) &amp; be64_to_cpu(debug_descriptor.trace_mask)))</span></a>
-<a name="125"><span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="126"><span class="lineNum"> 126 </span> : : </a>
-<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 6418116 : trace-&gt;hdr.timestamp = cpu_to_be64(mftb());</span></a>
-<a name="128"><span class="lineNum"> 128 </span> :<span class="lineCov"> 6418116 : trace-&gt;hdr.cpu = cpu_to_be16(this_cpu()-&gt;server_no);</span></a>
-<a name="129"><span class="lineNum"> 129 </span> : : </a>
-<a name="130"><span class="lineNum"> 130 </span> :<span class="lineCov"> 6418116 : lock(&amp;ti-&gt;lock);</span></a>
-<a name="131"><span class="lineNum"> 131 </span> : : </a>
-<a name="132"><span class="lineNum"> 132 </span> : : /* Throw away old entries before we overwrite them. */</a>
-<a name="133"><span class="lineNum"> 133 </span> :<span class="lineCov"> 10572499 : while ((be64_to_cpu(ti-&gt;tb.start) + be64_to_cpu(ti-&gt;tb.buf_size))</span></a>
-<a name="134"><span class="lineNum"> 134 </span> :<span class="lineCov"> 10572499 : &lt; (be64_to_cpu(ti-&gt;tb.end) + tsz)) {</span></a>
-<a name="135"><span class="lineNum"> 135 </span> : : struct trace_hdr *hdr;</a>
-<a name="136"><span class="lineNum"> 136 </span> : : </a>
-<a name="137"><span class="lineNum"> 137 </span> :<span class="lineCov"> 8308766 : hdr = (void *)ti-&gt;tb.buf +</span></a>
-<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 4154383 : be64_to_cpu(ti-&gt;tb.start) % be64_to_cpu(ti-&gt;tb.buf_size);</span></a>
-<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 8308766 : ti-&gt;tb.start = cpu_to_be64(be64_to_cpu(ti-&gt;tb.start) +</span></a>
-<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 4154383 : (hdr-&gt;len_div_8 &lt;&lt; 3));</span></a>
-<a name="141"><span class="lineNum"> 141 </span> : : }</a>
-<a name="142"><span class="lineNum"> 142 </span> : : </a>
-<a name="143"><span class="lineNum"> 143 </span> : : /* Must update -&gt;start before we rewrite new entries. */</a>
-<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 6418116 : lwsync(); /* write barrier */</span></a>
-<a name="145"><span class="lineNum"> 145 </span> : : </a>
-<a name="146"><span class="lineNum"> 146 </span> : : /* Check for duplicates... */</a>
-<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 6418116 : if (!handle_repeat(&amp;ti-&gt;tb, trace)) {</span></a>
-<a name="148"><span class="lineNum"> 148 </span> : : /* This may go off end, and that's why ti-&gt;tb.buf is oversize */</a>
-<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 3296393 : memcpy(ti-&gt;tb.buf + be64_to_cpu(ti-&gt;tb.end) % be64_to_cpu(ti-&gt;tb.buf_size),</span></a>
-<a name="150"><span class="lineNum"> 150 </span> : : trace, tsz);</a>
-<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 3296393 : ti-&gt;tb.last = ti-&gt;tb.end;</span></a>
-<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 3296393 : lwsync(); /* write barrier: write entry before exposing */</span></a>
-<a name="153"><span class="lineNum"> 153 </span> :<span class="lineCov"> 3296393 : ti-&gt;tb.end = cpu_to_be64(be64_to_cpu(ti-&gt;tb.end) + tsz);</span></a>
-<a name="154"><span class="lineNum"> 154 </span> : : }</a>
-<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 6418116 : unlock(&amp;ti-&gt;lock);</span></a>
-<a name="156"><span class="lineNum"> 156 </span> : : }</a>
-<a name="157"><span class="lineNum"> 157 </span> : : </a>
-<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 1 : static void trace_add_dt_props(void)</span></a>
-<a name="159"><span class="lineNum"> 159 </span> : : {</a>
-<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 1 : uint64_t boot_buf_phys = (uint64_t) &amp;boot_tracebuf.trace_info;</span></a>
-<a name="161"><span class="lineNum"> 161 </span> : : struct dt_node *exports, *traces;</a>
-<a name="162"><span class="lineNum"> 162 </span> : : unsigned int i;</a>
-<a name="163"><span class="lineNum"> 163 </span> : : fdt64_t *prop;</a>
-<a name="164"><span class="lineNum"> 164 </span> : : u64 tmask;</a>
-<a name="165"><span class="lineNum"> 165 </span> : : char tname[256];</a>
-<a name="166"><span class="lineNum"> 166 </span> : : </a>
-<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 1 : exports = dt_find_by_path(opal_node, &quot;firmware/exports&quot;);</span></a>
-<a name="168"><span class="lineNum"> 168 </span> :<span class="lineCov"> 1 : if (!exports)</span></a>
-<a name="169"><span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="170"><span class="lineNum"> 170 </span> : : </a>
-<a name="171"><span class="lineNum"> 171 </span> :<span class="lineCov"> 1 : traces = dt_new(exports, &quot;traces&quot;);</span></a>
-<a name="172"><span class="lineNum"> 172 </span> :<span class="lineCov"> 1 : if (!exports)</span></a>
-<a name="173"><span class="lineNum"> 173 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="174"><span class="lineNum"> 174 </span> : : </a>
-<a name="175"><span class="lineNum"> 175 </span> :<span class="lineCov"> 1 : prop = malloc(sizeof(u64) * 2 * be32_to_cpu(debug_descriptor.num_traces));</span></a>
-<a name="176"><span class="lineNum"> 176 </span> : : </a>
-<a name="177"><span class="lineNum"> 177 </span> :<span class="lineCov"> 4 : for (i = 0; i &lt; be32_to_cpu(debug_descriptor.num_traces); i++) {</span></a>
-<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 3 : uint64_t addr = be64_to_cpu(debug_descriptor.trace_phys[i]);</span></a>
-<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 3 : uint64_t size = be32_to_cpu(debug_descriptor.trace_size[i]);</span></a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 3 : uint32_t pir = be16_to_cpu(debug_descriptor.trace_pir[i]);</span></a>
-<a name="181"><span class="lineNum"> 181 </span> : : </a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 3 : prop[i * 2] = cpu_to_fdt64(addr);</span></a>
-<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 3 : prop[i * 2 + 1] = cpu_to_fdt64(size);</span></a>
-<a name="184"><span class="lineNum"> 184 </span> : : </a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 3 : if (addr == boot_buf_phys)</span></a>
-<a name="186"><span class="lineNum"> 186 </span> :<span class="lineCov"> 1 : snprintf(tname, sizeof(tname), &quot;boot-%x&quot;, pir);</span></a>
-<a name="187"><span class="lineNum"> 187 </span> : : else</a>
-<a name="188"><span class="lineNum"> 188 </span> :<span class="lineCov"> 2 : snprintf(tname, sizeof(tname), &quot;trace-%x&quot;, pir);</span></a>
-<a name="189"><span class="lineNum"> 189 </span> : : </a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineCov"> 3 : dt_add_property_u64s(traces, tname, addr, size);</span></a>
-<a name="191"><span class="lineNum"> 191 </span> : : }</a>
-<a name="192"><span class="lineNum"> 192 </span> : : </a>
-<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 1 : dt_add_property(opal_node, &quot;ibm,opal-traces&quot;,</span></a>
-<a name="194"><span class="lineNum"> 194 </span> : : prop, sizeof(u64) * 2 * i);</a>
-<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 1 : free(prop);</span></a>
-<a name="196"><span class="lineNum"> 196 </span> : : </a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 1 : tmask = (uint64_t)&amp;debug_descriptor.trace_mask;</span></a>
-<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 1 : dt_add_property_u64(opal_node, &quot;ibm,opal-trace-mask&quot;, tmask);</span></a>
-<a name="199"><span class="lineNum"> 199 </span> : : }</a>
-<a name="200"><span class="lineNum"> 200 </span> : : </a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 3 : static void trace_add_desc(struct trace_info *t, uint64_t size, uint16_t pir)</span></a>
-<a name="202"><span class="lineNum"> 202 </span> : : {</a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 3 : unsigned int i = be32_to_cpu(debug_descriptor.num_traces);</span></a>
-<a name="204"><span class="lineNum"> 204 </span> : : </a>
-<a name="205"><span class="lineNum"> 205 </span> :<span class="lineCov"> 3 : if (i &gt;= DEBUG_DESC_MAX_TRACES) {</span></a>
-<a name="206"><span class="lineNum"> 206 </span> :<span class="lineNoCov"> 0 : prerror(&quot;TRACE: Debug descriptor trace list full !\n&quot;);</span></a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="208"><span class="lineNum"> 208 </span> : : }</a>
-<a name="209"><span class="lineNum"> 209 </span> : : </a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 3 : debug_descriptor.num_traces = cpu_to_be32(i + 1);</span></a>
-<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 3 : debug_descriptor.trace_phys[i] = cpu_to_be64((uint64_t)t);</span></a>
-<a name="212"><span class="lineNum"> 212 </span> :<span class="lineCov"> 3 : debug_descriptor.trace_tce[i] = 0; /* populated later */</span></a>
-<a name="213"><span class="lineNum"> 213 </span> :<span class="lineCov"> 3 : debug_descriptor.trace_size[i] = cpu_to_be32(size);</span></a>
-<a name="214"><span class="lineNum"> 214 </span> :<span class="lineCov"> 3 : debug_descriptor.trace_pir[i] = cpu_to_be16(pir);</span></a>
-<a name="215"><span class="lineNum"> 215 </span> : : }</a>
-<a name="216"><span class="lineNum"> 216 </span> : : </a>
-<a name="217"><span class="lineNum"> 217 </span> : : /* Allocate trace buffers once we know memory topology */</a>
-<a name="218"><span class="lineNum"> 218 </span> :<span class="lineCov"> 1 : void init_trace_buffers(void)</span></a>
-<a name="219"><span class="lineNum"> 219 </span> : : {</a>
-<a name="220"><span class="lineNum"> 220 </span> : : struct cpu_thread *t;</a>
-<a name="221"><span class="lineNum"> 221 </span> :<span class="lineCov"> 1 : struct trace_info *any = &amp;boot_tracebuf.trace_info;</span></a>
-<a name="222"><span class="lineNum"> 222 </span> : : uint64_t size;</a>
-<a name="223"><span class="lineNum"> 223 </span> : : </a>
-<a name="224"><span class="lineNum"> 224 </span> : : /* Boot the boot trace in the debug descriptor */</a>
-<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 1 : trace_add_desc(any, sizeof(boot_tracebuf), this_cpu()-&gt;pir);</span></a>
-<a name="226"><span class="lineNum"> 226 </span> : : </a>
-<a name="227"><span class="lineNum"> 227 </span> : : /* Allocate a trace buffer for each primary cpu. */</a>
-<a name="228"><span class="lineNum"> 228 </span> :<span class="lineCov"> 5 : for_each_cpu(t) {</span></a>
-<a name="229"><span class="lineNum"> 229 </span> :<span class="lineCov"> 4 : if (t-&gt;is_secondary)</span></a>
-<a name="230"><span class="lineNum"> 230 </span> :<span class="lineCov"> 2 : continue;</span></a>
-<a name="231"><span class="lineNum"> 231 </span> : : </a>
-<a name="232"><span class="lineNum"> 232 </span> : : /* Use a 64K alignment for TCE mapping */</a>
-<a name="233"><span class="lineNum"> 233 </span> :<span class="lineCov"> 2 : size = ALIGN_UP(sizeof(*t-&gt;trace) + tracebuf_extra(), 0x10000);</span></a>
-<a name="234"><span class="lineNum"> 234 </span> :<span class="lineCov"> 2 : t-&gt;trace = local_alloc(t-&gt;chip_id, size, 0x10000);</span></a>
-<a name="235"><span class="lineNum"> 235 </span> :<span class="lineCov"> 2 : if (t-&gt;trace) {</span></a>
-<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 2 : any = t-&gt;trace;</span></a>
-<a name="237"><span class="lineNum"> 237 </span> :<span class="lineCov"> 2 : memset(t-&gt;trace, 0, size);</span></a>
-<a name="238"><span class="lineNum"> 238 </span> :<span class="lineCov"> 2 : init_lock(&amp;t-&gt;trace-&gt;lock);</span></a>
-<a name="239"><span class="lineNum"> 239 </span> :<span class="lineCov"> 2 : t-&gt;trace-&gt;tb.max_size = cpu_to_be32(MAX_SIZE);</span></a>
-<a name="240"><span class="lineNum"> 240 </span> :<span class="lineCov"> 2 : t-&gt;trace-&gt;tb.buf_size = cpu_to_be64(TBUF_SZ);</span></a>
-<a name="241"><span class="lineNum"> 241 </span> :<span class="lineCov"> 2 : trace_add_desc(any, sizeof(t-&gt;trace-&gt;tb) +</span></a>
-<a name="242"><span class="lineNum"> 242 </span> :<span class="lineCov"> 2 : tracebuf_extra(), t-&gt;pir);</span></a>
-<a name="243"><span class="lineNum"> 243 </span> : : } else</a>
-<a name="244"><span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : prerror(&quot;TRACE: cpu 0x%x allocation failed\n&quot;, t-&gt;pir);</span></a>
-<a name="245"><span class="lineNum"> 245 </span> : : }</a>
-<a name="246"><span class="lineNum"> 246 </span> : : </a>
-<a name="247"><span class="lineNum"> 247 </span> : : /* In case any allocations failed, share trace buffers. */</a>
-<a name="248"><span class="lineNum"> 248 </span> :<span class="lineCov"> 5 : for_each_cpu(t) {</span></a>
-<a name="249"><span class="lineNum"> 249 </span> :<span class="lineCov"> 4 : if (!t-&gt;is_secondary &amp;&amp; !t-&gt;trace)</span></a>
-<a name="250"><span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : t-&gt;trace = any;</span></a>
+<a name="21"><span class="lineNum"> 21 </span> : : #include &lt;nvram.h&gt;</a>
+<a name="22"><span class="lineNum"> 22 </span> : : </a>
+<a name="23"><span class="lineNum"> 23 </span> : : #define DEBUG_TRACES</a>
+<a name="24"><span class="lineNum"> 24 </span> : : </a>
+<a name="25"><span class="lineNum"> 25 </span> : : #define MAX_SIZE sizeof(union trace)</a>
+<a name="26"><span class="lineNum"> 26 </span> : : </a>
+<a name="27"><span class="lineNum"> 27 </span> : : /* Smaller trace buffer for early booting */</a>
+<a name="28"><span class="lineNum"> 28 </span> : : #define BOOT_TBUF_SZ 65536</a>
+<a name="29"><span class="lineNum"> 29 </span> : : static struct {</a>
+<a name="30"><span class="lineNum"> 30 </span> : : struct trace_info trace_info;</a>
+<a name="31"><span class="lineNum"> 31 </span> : : char buf[BOOT_TBUF_SZ + MAX_SIZE];</a>
+<a name="32"><span class="lineNum"> 32 </span> : : } boot_tracebuf __section(&quot;.data.boot_trace&quot;);</a>
+<a name="33"><span class="lineNum"> 33 </span> : : </a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineNoCov"> 0 : void init_boot_tracebuf(struct cpu_thread *boot_cpu)</span></a>
+<a name="35"><span class="lineNum"> 35 </span> : : {</a>
+<a name="36"><span class="lineNum"> 36 </span> :<span class="lineNoCov"> 0 : init_lock(&amp;boot_tracebuf.trace_info.lock);</span></a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineNoCov"> 0 : boot_tracebuf.trace_info.tb.buf_size = cpu_to_be64(BOOT_TBUF_SZ);</span></a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineNoCov"> 0 : boot_tracebuf.trace_info.tb.max_size = cpu_to_be32(MAX_SIZE);</span></a>
+<a name="39"><span class="lineNum"> 39 </span> : : </a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineNoCov"> 0 : boot_cpu-&gt;trace = &amp;boot_tracebuf.trace_info;</span></a>
+<a name="41"><span class="lineNum"> 41 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="42"><span class="lineNum"> 42 </span> : : </a>
+<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 4 : static size_t tracebuf_extra(void)</span></a>
+<a name="44"><span class="lineNum"> 44 </span> : : {</a>
+<a name="45"><span class="lineNum"> 45 </span> : : /* We make room for the largest possible record */</a>
+<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 4 : return TBUF_SZ + MAX_SIZE;</span></a>
+<a name="47"><span class="lineNum"> 47 </span> : : }</a>
+<a name="48"><span class="lineNum"> 48 </span> : : </a>
+<a name="49"><span class="lineNum"> 49 </span> : : /* To avoid bloating each entry, repeats are actually specific entries.</a>
+<a name="50"><span class="lineNum"> 50 </span> : : * tb-&gt;last points to the last (non-repeat) entry. */</a>
+<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 6418120 : static bool handle_repeat(struct tracebuf *tb, const union trace *trace)</span></a>
+<a name="52"><span class="lineNum"> 52 </span> : : {</a>
+<a name="53"><span class="lineNum"> 53 </span> : : struct trace_hdr *prev;</a>
+<a name="54"><span class="lineNum"> 54 </span> : : struct trace_repeat *rpt;</a>
+<a name="55"><span class="lineNum"> 55 </span> : : u32 len;</a>
+<a name="56"><span class="lineNum"> 56 </span> : : </a>
+<a name="57"><span class="lineNum"> 57 </span> :<span class="lineCov"> 6418120 : prev = (void *)tb-&gt;buf + be64_to_cpu(tb-&gt;last) % be64_to_cpu(tb-&gt;buf_size);</span></a>
+<a name="58"><span class="lineNum"> 58 </span> : : </a>
+<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 6418120 : if (prev-&gt;type != trace-&gt;hdr.type</span></a>
+<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 3121740 : || prev-&gt;len_div_8 != trace-&gt;hdr.len_div_8</span></a>
+<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 3121740 : || prev-&gt;cpu != trace-&gt;hdr.cpu)</span></a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 3296380 : return false;</span></a>
+<a name="63"><span class="lineNum"> 63 </span> : : </a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 3121740 : len = prev-&gt;len_div_8 &lt;&lt; 3;</span></a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 3121740 : if (memcmp(prev + 1, &amp;trace-&gt;hdr + 1, len - sizeof(*prev)) != 0)</span></a>
+<a name="66"><span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="67"><span class="lineNum"> 67 </span> : : </a>
+<a name="68"><span class="lineNum"> 68 </span> : : /* If they've consumed prev entry, don't repeat. */</a>
+<a name="69"><span class="lineNum"> 69 </span> :<span class="lineCov"> 3121740 : if (be64_to_cpu(tb-&gt;last) &lt; be64_to_cpu(tb-&gt;start))</span></a>
+<a name="70"><span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="71"><span class="lineNum"> 71 </span> : : </a>
+<a name="72"><span class="lineNum"> 72 </span> : : /* OK, it's a duplicate. Do we already have repeat? */</a>
+<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 3121740 : if (be64_to_cpu(tb-&gt;last) + len != be64_to_cpu(tb-&gt;end)) {</span></a>
+<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 1985760 : u64 pos = be64_to_cpu(tb-&gt;last) + len;</span></a>
+<a name="75"><span class="lineNum"> 75 </span> : : /* FIXME: Reader is not protected from seeing this! */</a>
+<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 1985760 : rpt = (void *)tb-&gt;buf + pos % be64_to_cpu(tb-&gt;buf_size);</span></a>
+<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 1985760 : assert(pos + rpt-&gt;len_div_8*8 == be64_to_cpu(tb-&gt;end));</span></a>
+<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 1985760 : assert(rpt-&gt;type == TRACE_REPEAT);</span></a>
+<a name="79"><span class="lineNum"> 79 </span> : : </a>
+<a name="80"><span class="lineNum"> 80 </span> : : /* If this repeat entry is full, don't repeat. */</a>
+<a name="81"><span class="lineNum"> 81 </span> :<span class="lineCov"> 1985760 : if (be16_to_cpu(rpt-&gt;num) == 0xFFFF)</span></a>
+<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 16 : return false;</span></a>
+<a name="83"><span class="lineNum"> 83 </span> : : </a>
+<a name="84"><span class="lineNum"> 84 </span> :<span class="lineCov"> 1985750 : rpt-&gt;num = cpu_to_be16(be16_to_cpu(rpt-&gt;num) + 1);</span></a>
+<a name="85"><span class="lineNum"> 85 </span> :<span class="lineCov"> 1985750 : rpt-&gt;timestamp = trace-&gt;hdr.timestamp;</span></a>
+<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 1985750 : return true;</span></a>
+<a name="87"><span class="lineNum"> 87 </span> : : }</a>
+<a name="88"><span class="lineNum"> 88 </span> : : </a>
+<a name="89"><span class="lineNum"> 89 </span> : : /*</a>
+<a name="90"><span class="lineNum"> 90 </span> : : * Generate repeat entry: it's the smallest possible entry, so we</a>
+<a name="91"><span class="lineNum"> 91 </span> : : * must have eliminated old entries.</a>
+<a name="92"><span class="lineNum"> 92 </span> : : */</a>
+<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 1135980 : assert(trace-&gt;hdr.len_div_8 * 8 &gt;= sizeof(*rpt));</span></a>
+<a name="94"><span class="lineNum"> 94 </span> : : </a>
+<a name="95"><span class="lineNum"> 95 </span> :<span class="lineCov"> 1135980 : rpt = (void *)tb-&gt;buf + be64_to_cpu(tb-&gt;end) % be64_to_cpu(tb-&gt;buf_size);</span></a>
+<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 1135980 : rpt-&gt;timestamp = trace-&gt;hdr.timestamp;</span></a>
+<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 1135980 : rpt-&gt;type = TRACE_REPEAT;</span></a>
+<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 1135980 : rpt-&gt;len_div_8 = sizeof(*rpt) &gt;&gt; 3;</span></a>
+<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 1135980 : rpt-&gt;cpu = trace-&gt;hdr.cpu;</span></a>
+<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 1135980 : rpt-&gt;prev_len = cpu_to_be16(trace-&gt;hdr.len_div_8 &lt;&lt; 3);</span></a>
+<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 1135980 : rpt-&gt;num = cpu_to_be16(1);</span></a>
+<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 1135980 : lwsync(); /* write barrier: complete repeat record before exposing */</span></a>
+<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 1135980 : tb-&gt;end = cpu_to_be64(be64_to_cpu(tb-&gt;end) + sizeof(*rpt));</span></a>
+<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 1135980 : return true;</span></a>
+<a name="105"><span class="lineNum"> 105 </span> : : }</a>
+<a name="106"><span class="lineNum"> 106 </span> : : </a>
+<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 6418120 : void trace_add(union trace *trace, u8 type, u16 len)</span></a>
+<a name="108"><span class="lineNum"> 108 </span> : : {</a>
+<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 6418120 : struct trace_info *ti = this_cpu()-&gt;trace;</span></a>
+<a name="110"><span class="lineNum"> 110 </span> : : unsigned int tsz;</a>
+<a name="111"><span class="lineNum"> 111 </span> : : </a>
+<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 6418120 : trace-&gt;hdr.type = type;</span></a>
+<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 6418120 : trace-&gt;hdr.len_div_8 = (len + 7) &gt;&gt; 3;</span></a>
+<a name="114"><span class="lineNum"> 114 </span> : : </a>
+<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 6418120 : tsz = trace-&gt;hdr.len_div_8 &lt;&lt; 3;</span></a>
+<a name="116"><span class="lineNum"> 116 </span> : : </a>
+<a name="117"><span class="lineNum"> 117 </span> : : #ifdef DEBUG_TRACES</a>
+<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 6418120 : assert(tsz &gt;= sizeof(trace-&gt;hdr));</span></a>
+<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 6418120 : assert(tsz &lt;= sizeof(*trace));</span></a>
+<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 6418120 : assert(trace-&gt;hdr.type != TRACE_REPEAT);</span></a>
+<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 6418120 : assert(trace-&gt;hdr.type != TRACE_OVERFLOW);</span></a>
+<a name="122"><span class="lineNum"> 122 </span> : : #endif</a>
+<a name="123"><span class="lineNum"> 123 </span> : : /* Skip traces not enabled in the debug descriptor */</a>
+<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 6418120 : if (trace-&gt;hdr.type &lt; (8 * sizeof(debug_descriptor.trace_mask)) &amp;&amp;</span></a>
+<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 3997700 : !((1ul &lt;&lt; trace-&gt;hdr.type) &amp; be64_to_cpu(debug_descriptor.trace_mask)))</span></a>
+<a name="126"><span class="lineNum"> 126 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="127"><span class="lineNum"> 127 </span> : : </a>
+<a name="128"><span class="lineNum"> 128 </span> :<span class="lineCov"> 6418120 : trace-&gt;hdr.timestamp = cpu_to_be64(mftb());</span></a>
+<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 6418120 : trace-&gt;hdr.cpu = cpu_to_be16(this_cpu()-&gt;server_no);</span></a>
+<a name="130"><span class="lineNum"> 130 </span> : : </a>
+<a name="131"><span class="lineNum"> 131 </span> :<span class="lineCov"> 6418120 : lock(&amp;ti-&gt;lock);</span></a>
+<a name="132"><span class="lineNum"> 132 </span> : : </a>
+<a name="133"><span class="lineNum"> 133 </span> : : /* Throw away old entries before we overwrite them. */</a>
+<a name="134"><span class="lineNum"> 134 </span> :<span class="lineCov"> 10572500 : while ((be64_to_cpu(ti-&gt;tb.start) + be64_to_cpu(ti-&gt;tb.buf_size))</span></a>
+<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 10572500 : &lt; (be64_to_cpu(ti-&gt;tb.end) + tsz)) {</span></a>
+<a name="136"><span class="lineNum"> 136 </span> : : struct trace_hdr *hdr;</a>
+<a name="137"><span class="lineNum"> 137 </span> : : </a>
+<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 8308770 : hdr = (void *)ti-&gt;tb.buf +</span></a>
+<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 4154380 : be64_to_cpu(ti-&gt;tb.start) % be64_to_cpu(ti-&gt;tb.buf_size);</span></a>
+<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 8308770 : ti-&gt;tb.start = cpu_to_be64(be64_to_cpu(ti-&gt;tb.start) +</span></a>
+<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 4154380 : (hdr-&gt;len_div_8 &lt;&lt; 3));</span></a>
+<a name="142"><span class="lineNum"> 142 </span> : : }</a>
+<a name="143"><span class="lineNum"> 143 </span> : : </a>
+<a name="144"><span class="lineNum"> 144 </span> : : /* Must update -&gt;start before we rewrite new entries. */</a>
+<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 6418120 : lwsync(); /* write barrier */</span></a>
+<a name="146"><span class="lineNum"> 146 </span> : : </a>
+<a name="147"><span class="lineNum"> 147 </span> : : /* Check for duplicates... */</a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 6418120 : if (!handle_repeat(&amp;ti-&gt;tb, trace)) {</span></a>
+<a name="149"><span class="lineNum"> 149 </span> : : /* This may go off end, and that's why ti-&gt;tb.buf is oversize */</a>
+<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 3296390 : memcpy(ti-&gt;tb.buf + be64_to_cpu(ti-&gt;tb.end) % be64_to_cpu(ti-&gt;tb.buf_size),</span></a>
+<a name="151"><span class="lineNum"> 151 </span> : : trace, tsz);</a>
+<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 3296390 : ti-&gt;tb.last = ti-&gt;tb.end;</span></a>
+<a name="153"><span class="lineNum"> 153 </span> :<span class="lineCov"> 3296390 : lwsync(); /* write barrier: write entry before exposing */</span></a>
+<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 3296390 : ti-&gt;tb.end = cpu_to_be64(be64_to_cpu(ti-&gt;tb.end) + tsz);</span></a>
+<a name="155"><span class="lineNum"> 155 </span> : : }</a>
+<a name="156"><span class="lineNum"> 156 </span> :<span class="lineCov"> 6418120 : unlock(&amp;ti-&gt;lock);</span></a>
+<a name="157"><span class="lineNum"> 157 </span> : : }</a>
+<a name="158"><span class="lineNum"> 158 </span> : : </a>
+<a name="159"><span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : void trace_add_dt_props(void)</span></a>
+<a name="160"><span class="lineNum"> 160 </span> : : {</a>
+<a name="161"><span class="lineNum"> 161 </span> :<span class="lineNoCov"> 0 : uint64_t boot_buf_phys = (uint64_t) &amp;boot_tracebuf.trace_info;</span></a>
+<a name="162"><span class="lineNum"> 162 </span> : : struct dt_node *exports, *traces;</a>
+<a name="163"><span class="lineNum"> 163 </span> : : unsigned int i;</a>
+<a name="164"><span class="lineNum"> 164 </span> : : fdt64_t *prop;</a>
+<a name="165"><span class="lineNum"> 165 </span> : : u64 tmask;</a>
+<a name="166"><span class="lineNum"> 166 </span> : : char tname[256];</a>
+<a name="167"><span class="lineNum"> 167 </span> : : </a>
+<a name="168"><span class="lineNum"> 168 </span> :<span class="lineNoCov"> 0 : exports = dt_find_by_path(opal_node, &quot;firmware/exports&quot;);</span></a>
+<a name="169"><span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : if (!exports)</span></a>
+<a name="170"><span class="lineNum"> 170 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="171"><span class="lineNum"> 171 </span> : : </a>
+<a name="172"><span class="lineNum"> 172 </span> : : /*</a>
+<a name="173"><span class="lineNum"> 173 </span> : : * nvram hack to put all the trace buffer exports in the exports</a>
+<a name="174"><span class="lineNum"> 174 </span> : : * node. This is useful if the kernel doesn't also export subnodes.</a>
+<a name="175"><span class="lineNum"> 175 </span> : : */</a>
+<a name="176"><span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : if (nvram_query_safe(&quot;flat-trace-buf&quot;))</span></a>
+<a name="177"><span class="lineNum"> 177 </span> :<span class="lineNoCov"> 0 : traces = exports;</span></a>
+<a name="178"><span class="lineNum"> 178 </span> : : else</a>
+<a name="179"><span class="lineNum"> 179 </span> :<span class="lineNoCov"> 0 : traces = dt_new(exports, &quot;traces&quot;);</span></a>
+<a name="180"><span class="lineNum"> 180 </span> : : </a>
+<a name="181"><span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : prop = malloc(sizeof(u64) * 2 * be32_to_cpu(debug_descriptor.num_traces));</span></a>
+<a name="182"><span class="lineNum"> 182 </span> : : </a>
+<a name="183"><span class="lineNum"> 183 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; be32_to_cpu(debug_descriptor.num_traces); i++) {</span></a>
+<a name="184"><span class="lineNum"> 184 </span> :<span class="lineNoCov"> 0 : uint64_t addr = be64_to_cpu(debug_descriptor.trace_phys[i]);</span></a>
+<a name="185"><span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : uint64_t size = be32_to_cpu(debug_descriptor.trace_size[i]);</span></a>
+<a name="186"><span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : uint32_t pir = be16_to_cpu(debug_descriptor.trace_pir[i]);</span></a>
+<a name="187"><span class="lineNum"> 187 </span> : : </a>
+<a name="188"><span class="lineNum"> 188 </span> :<span class="lineNoCov"> 0 : prop[i * 2] = cpu_to_fdt64(addr);</span></a>
+<a name="189"><span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : prop[i * 2 + 1] = cpu_to_fdt64(size);</span></a>
+<a name="190"><span class="lineNum"> 190 </span> : : </a>
+<a name="191"><span class="lineNum"> 191 </span> :<span class="lineNoCov"> 0 : if (addr == boot_buf_phys)</span></a>
+<a name="192"><span class="lineNum"> 192 </span> :<span class="lineNoCov"> 0 : snprintf(tname, sizeof(tname), &quot;boot-%x&quot;, pir);</span></a>
+<a name="193"><span class="lineNum"> 193 </span> : : else</a>
+<a name="194"><span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : snprintf(tname, sizeof(tname), &quot;trace-%x&quot;, pir);</span></a>
+<a name="195"><span class="lineNum"> 195 </span> : : </a>
+<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64s(traces, tname, addr, size);</span></a>
+<a name="197"><span class="lineNum"> 197 </span> : : }</a>
+<a name="198"><span class="lineNum"> 198 </span> : : </a>
+<a name="199"><span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : dt_add_property(opal_node, &quot;ibm,opal-traces&quot;,</span></a>
+<a name="200"><span class="lineNum"> 200 </span> : : prop, sizeof(u64) * 2 * i);</a>
+<a name="201"><span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : free(prop);</span></a>
+<a name="202"><span class="lineNum"> 202 </span> : : </a>
+<a name="203"><span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : tmask = (uint64_t)&amp;debug_descriptor.trace_mask;</span></a>
+<a name="204"><span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64(opal_node, &quot;ibm,opal-trace-mask&quot;, tmask);</span></a>
+<a name="205"><span class="lineNum"> 205 </span> : : }</a>
+<a name="206"><span class="lineNum"> 206 </span> : : </a>
+<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 3 : static void trace_add_desc(struct trace_info *t, uint64_t size, uint16_t pir)</span></a>
+<a name="208"><span class="lineNum"> 208 </span> : : {</a>
+<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 3 : unsigned int i = be32_to_cpu(debug_descriptor.num_traces);</span></a>
+<a name="210"><span class="lineNum"> 210 </span> : : </a>
+<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 3 : if (i &gt;= DEBUG_DESC_MAX_TRACES) {</span></a>
+<a name="212"><span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : prerror(&quot;TRACE: Debug descriptor trace list full !\n&quot;);</span></a>
+<a name="213"><span class="lineNum"> 213 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="214"><span class="lineNum"> 214 </span> : : }</a>
+<a name="215"><span class="lineNum"> 215 </span> : : </a>
+<a name="216"><span class="lineNum"> 216 </span> :<span class="lineCov"> 3 : debug_descriptor.num_traces = cpu_to_be32(i + 1);</span></a>
+<a name="217"><span class="lineNum"> 217 </span> :<span class="lineCov"> 3 : debug_descriptor.trace_phys[i] = cpu_to_be64((uint64_t)t);</span></a>
+<a name="218"><span class="lineNum"> 218 </span> :<span class="lineCov"> 3 : debug_descriptor.trace_tce[i] = 0; /* populated later */</span></a>
+<a name="219"><span class="lineNum"> 219 </span> :<span class="lineCov"> 3 : debug_descriptor.trace_size[i] = cpu_to_be32(size);</span></a>
+<a name="220"><span class="lineNum"> 220 </span> :<span class="lineCov"> 3 : debug_descriptor.trace_pir[i] = cpu_to_be16(pir);</span></a>
+<a name="221"><span class="lineNum"> 221 </span> : : }</a>
+<a name="222"><span class="lineNum"> 222 </span> : : </a>
+<a name="223"><span class="lineNum"> 223 </span> : : /* Allocate trace buffers once we know memory topology */</a>
+<a name="224"><span class="lineNum"> 224 </span> :<span class="lineCov"> 1 : void init_trace_buffers(void)</span></a>
+<a name="225"><span class="lineNum"> 225 </span> : : {</a>
+<a name="226"><span class="lineNum"> 226 </span> : : struct cpu_thread *t;</a>
+<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 1 : struct trace_info *any = &amp;boot_tracebuf.trace_info;</span></a>
+<a name="228"><span class="lineNum"> 228 </span> : : uint64_t size;</a>
+<a name="229"><span class="lineNum"> 229 </span> : : </a>
+<a name="230"><span class="lineNum"> 230 </span> : : /* Boot the boot trace in the debug descriptor */</a>
+<a name="231"><span class="lineNum"> 231 </span> :<span class="lineCov"> 1 : trace_add_desc(any, sizeof(boot_tracebuf), this_cpu()-&gt;pir);</span></a>
+<a name="232"><span class="lineNum"> 232 </span> : : </a>
+<a name="233"><span class="lineNum"> 233 </span> : : /* Allocate a trace buffer for each primary cpu. */</a>
+<a name="234"><span class="lineNum"> 234 </span> :<span class="lineCov"> 5 : for_each_cpu(t) {</span></a>
+<a name="235"><span class="lineNum"> 235 </span> :<span class="lineCov"> 4 : if (t-&gt;is_secondary)</span></a>
+<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 2 : continue;</span></a>
+<a name="237"><span class="lineNum"> 237 </span> : : </a>
+<a name="238"><span class="lineNum"> 238 </span> : : /* Use a 64K alignment for TCE mapping */</a>
+<a name="239"><span class="lineNum"> 239 </span> :<span class="lineCov"> 2 : size = ALIGN_UP(sizeof(*t-&gt;trace) + tracebuf_extra(), 0x10000);</span></a>
+<a name="240"><span class="lineNum"> 240 </span> :<span class="lineCov"> 2 : t-&gt;trace = local_alloc(t-&gt;chip_id, size, 0x10000);</span></a>
+<a name="241"><span class="lineNum"> 241 </span> :<span class="lineCov"> 2 : if (t-&gt;trace) {</span></a>
+<a name="242"><span class="lineNum"> 242 </span> :<span class="lineCov"> 2 : any = t-&gt;trace;</span></a>
+<a name="243"><span class="lineNum"> 243 </span> :<span class="lineCov"> 2 : memset(t-&gt;trace, 0, size);</span></a>
+<a name="244"><span class="lineNum"> 244 </span> :<span class="lineCov"> 2 : init_lock(&amp;t-&gt;trace-&gt;lock);</span></a>
+<a name="245"><span class="lineNum"> 245 </span> :<span class="lineCov"> 2 : t-&gt;trace-&gt;tb.max_size = cpu_to_be32(MAX_SIZE);</span></a>
+<a name="246"><span class="lineNum"> 246 </span> :<span class="lineCov"> 2 : t-&gt;trace-&gt;tb.buf_size = cpu_to_be64(TBUF_SZ);</span></a>
+<a name="247"><span class="lineNum"> 247 </span> :<span class="lineCov"> 2 : trace_add_desc(any, sizeof(t-&gt;trace-&gt;tb) +</span></a>
+<a name="248"><span class="lineNum"> 248 </span> :<span class="lineCov"> 2 : tracebuf_extra(), t-&gt;pir);</span></a>
+<a name="249"><span class="lineNum"> 249 </span> : : } else</a>
+<a name="250"><span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : prerror(&quot;TRACE: cpu 0x%x allocation failed\n&quot;, t-&gt;pir);</span></a>
<a name="251"><span class="lineNum"> 251 </span> : : }</a>
<a name="252"><span class="lineNum"> 252 </span> : : </a>
-<a name="253"><span class="lineNum"> 253 </span> : : /* And copy those to the secondaries. */</a>
+<a name="253"><span class="lineNum"> 253 </span> : : /* In case any allocations failed, share trace buffers. */</a>
<a name="254"><span class="lineNum"> 254 </span> :<span class="lineCov"> 5 : for_each_cpu(t) {</span></a>
-<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 4 : if (!t-&gt;is_secondary)</span></a>
-<a name="256"><span class="lineNum"> 256 </span> :<span class="lineCov"> 2 : continue;</span></a>
-<a name="257"><span class="lineNum"> 257 </span> :<span class="lineCov"> 2 : t-&gt;trace = t-&gt;primary-&gt;trace;</span></a>
-<a name="258"><span class="lineNum"> 258 </span> : : }</a>
-<a name="259"><span class="lineNum"> 259 </span> : : </a>
-<a name="260"><span class="lineNum"> 260 </span> : : /* Trace node in DT. */</a>
-<a name="261"><span class="lineNum"> 261 </span> :<span class="lineCov"> 1 : trace_add_dt_props();</span></a>
-<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 1 : }</span></a>
+<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 4 : if (!t-&gt;is_secondary &amp;&amp; !t-&gt;trace)</span></a>
+<a name="256"><span class="lineNum"> 256 </span> :<span class="lineNoCov"> 0 : t-&gt;trace = any;</span></a>
+<a name="257"><span class="lineNum"> 257 </span> : : }</a>
+<a name="258"><span class="lineNum"> 258 </span> : : </a>
+<a name="259"><span class="lineNum"> 259 </span> : : /* And copy those to the secondaries. */</a>
+<a name="260"><span class="lineNum"> 260 </span> :<span class="lineCov"> 5 : for_each_cpu(t) {</span></a>
+<a name="261"><span class="lineNum"> 261 </span> :<span class="lineCov"> 4 : if (!t-&gt;is_secondary)</span></a>
+<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 2 : continue;</span></a>
+<a name="263"><span class="lineNum"> 263 </span> :<span class="lineCov"> 2 : t-&gt;trace = t-&gt;primary-&gt;trace;</span></a>
+<a name="264"><span class="lineNum"> 264 </span> : : }</a>
+<a name="265"><span class="lineNum"> 265 </span> :<span class="lineCov"> 1 : }</span></a>
</pre>
</td>
</tr>
diff --git a/coverage-report/core/vpd.c.func-sort-c.html b/coverage-report/core/vpd.c.func-sort-c.html
index 4691600..ac58348 100644
--- a/coverage-report/core/vpd.c.func-sort-c.html
+++ b/coverage-report/core/vpd.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/core/vpd.c.func.html b/coverage-report/core/vpd.c.func.html
index dd512f5..15d556e 100644
--- a/coverage-report/core/vpd.c.func.html
+++ b/coverage-report/core/vpd.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/core/vpd.c.gcov.html b/coverage-report/core/vpd.c.gcov.html
index 21336cb..8a1dc65 100644
--- a/coverage-report/core/vpd.c.gcov.html
+++ b/coverage-report/core/vpd.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/external/ffspart/ccan/endian/endian.h.func-sort-c.html b/coverage-report/external/ffspart/ccan/endian/endian.h.func-sort-c.html
index 5ca16fb..6d41df4 100644
--- a/coverage-report/external/ffspart/ccan/endian/endian.h.func-sort-c.html
+++ b/coverage-report/external/ffspart/ccan/endian/endian.h.func-sort-c.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">50.0 %</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">60.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -69,11 +69,11 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#287">cpu_to_be64</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#295">cpu_to_be64</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#314">be64_to_cpu</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#322">be64_to_cpu</a></td>
<td class="coverFnHi">2268</td>
</tr>
</table>
diff --git a/coverage-report/external/ffspart/ccan/endian/endian.h.func.html b/coverage-report/external/ffspart/ccan/endian/endian.h.func.html
index df54575..5d80ac2 100644
--- a/coverage-report/external/ffspart/ccan/endian/endian.h.func.html
+++ b/coverage-report/external/ffspart/ccan/endian/endian.h.func.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">50.0 %</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">60.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -69,11 +69,11 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="endian.h.func-sort-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#314">be64_to_cpu</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#322">be64_to_cpu</a></td>
<td class="coverFnHi">2268</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#287">cpu_to_be64</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#295">cpu_to_be64</a></td>
<td class="coverFnLo">0</td>
</tr>
</table>
diff --git a/coverage-report/external/ffspart/ccan/endian/endian.h.gcov.html b/coverage-report/external/ffspart/ccan/endian/endian.h.gcov.html
index 5488847..e94b052 100644
--- a/coverage-report/external/ffspart/ccan/endian/endian.h.gcov.html
+++ b/coverage-report/external/ffspart/ccan/endian/endian.h.gcov.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">50.0 %</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">60.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -184,246 +184,254 @@
<a name="113"><span class="lineNum"> 113 </span> : : #elif HAVE_LITTLE_ENDIAN &amp;&amp; HAVE_BIG_ENDIAN</a>
<a name="114"><span class="lineNum"> 114 </span> : : #error &quot;Can't compile for both big and little endian.&quot;</a>
<a name="115"><span class="lineNum"> 115 </span> : : #elif HAVE_LITTLE_ENDIAN</a>
-<a name="116"><span class="lineNum"> 116 </span> : : #define __BYTE_ORDER __LITTLE_ENDIAN</a>
-<a name="117"><span class="lineNum"> 117 </span> : : #elif HAVE_BIG_ENDIAN</a>
-<a name="118"><span class="lineNum"> 118 </span> : : #define __BYTE_ORDER __BIG_ENDIAN</a>
-<a name="119"><span class="lineNum"> 119 </span> : : #endif</a>
-<a name="120"><span class="lineNum"> 120 </span> : : </a>
-<a name="121"><span class="lineNum"> 121 </span> : : </a>
-<a name="122"><span class="lineNum"> 122 </span> : : #ifdef __CHECKER__</a>
-<a name="123"><span class="lineNum"> 123 </span> : : /* sparse needs forcing to remove bitwise attribute from ccan/short_types */</a>
-<a name="124"><span class="lineNum"> 124 </span> : : #define ENDIAN_CAST __attribute__((force))</a>
-<a name="125"><span class="lineNum"> 125 </span> : : #define ENDIAN_TYPE __attribute__((bitwise))</a>
-<a name="126"><span class="lineNum"> 126 </span> : : #else</a>
-<a name="127"><span class="lineNum"> 127 </span> : : #define ENDIAN_CAST</a>
-<a name="128"><span class="lineNum"> 128 </span> : : #define ENDIAN_TYPE</a>
-<a name="129"><span class="lineNum"> 129 </span> : : #endif</a>
-<a name="130"><span class="lineNum"> 130 </span> : : </a>
-<a name="131"><span class="lineNum"> 131 </span> : : typedef uint64_t ENDIAN_TYPE leint64_t;</a>
-<a name="132"><span class="lineNum"> 132 </span> : : typedef uint64_t ENDIAN_TYPE beint64_t;</a>
-<a name="133"><span class="lineNum"> 133 </span> : : typedef uint32_t ENDIAN_TYPE leint32_t;</a>
-<a name="134"><span class="lineNum"> 134 </span> : : typedef uint32_t ENDIAN_TYPE beint32_t;</a>
-<a name="135"><span class="lineNum"> 135 </span> : : typedef uint16_t ENDIAN_TYPE leint16_t;</a>
-<a name="136"><span class="lineNum"> 136 </span> : : typedef uint16_t ENDIAN_TYPE beint16_t;</a>
-<a name="137"><span class="lineNum"> 137 </span> : : </a>
-<a name="138"><span class="lineNum"> 138 </span> : : #if HAVE_LITTLE_ENDIAN</a>
-<a name="139"><span class="lineNum"> 139 </span> : : /**</a>
-<a name="140"><span class="lineNum"> 140 </span> : : * CPU_TO_LE64 - convert a constant uint64_t value to little-endian</a>
-<a name="141"><span class="lineNum"> 141 </span> : : * @native: constant to convert</a>
-<a name="142"><span class="lineNum"> 142 </span> : : */</a>
-<a name="143"><span class="lineNum"> 143 </span> : : #define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)(native))</a>
-<a name="144"><span class="lineNum"> 144 </span> : : </a>
-<a name="145"><span class="lineNum"> 145 </span> : : /**</a>
-<a name="146"><span class="lineNum"> 146 </span> : : * CPU_TO_LE32 - convert a constant uint32_t value to little-endian</a>
-<a name="147"><span class="lineNum"> 147 </span> : : * @native: constant to convert</a>
-<a name="148"><span class="lineNum"> 148 </span> : : */</a>
-<a name="149"><span class="lineNum"> 149 </span> : : #define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)(native))</a>
-<a name="150"><span class="lineNum"> 150 </span> : : </a>
-<a name="151"><span class="lineNum"> 151 </span> : : /**</a>
-<a name="152"><span class="lineNum"> 152 </span> : : * CPU_TO_LE16 - convert a constant uint16_t value to little-endian</a>
-<a name="153"><span class="lineNum"> 153 </span> : : * @native: constant to convert</a>
-<a name="154"><span class="lineNum"> 154 </span> : : */</a>
-<a name="155"><span class="lineNum"> 155 </span> : : #define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)(native))</a>
-<a name="156"><span class="lineNum"> 156 </span> : : </a>
-<a name="157"><span class="lineNum"> 157 </span> : : /**</a>
-<a name="158"><span class="lineNum"> 158 </span> : : * LE64_TO_CPU - convert a little-endian uint64_t constant</a>
-<a name="159"><span class="lineNum"> 159 </span> : : * @le_val: little-endian constant to convert</a>
-<a name="160"><span class="lineNum"> 160 </span> : : */</a>
-<a name="161"><span class="lineNum"> 161 </span> : : #define LE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val))</a>
-<a name="162"><span class="lineNum"> 162 </span> : : </a>
-<a name="163"><span class="lineNum"> 163 </span> : : /**</a>
-<a name="164"><span class="lineNum"> 164 </span> : : * LE32_TO_CPU - convert a little-endian uint32_t constant</a>
-<a name="165"><span class="lineNum"> 165 </span> : : * @le_val: little-endian constant to convert</a>
-<a name="166"><span class="lineNum"> 166 </span> : : */</a>
-<a name="167"><span class="lineNum"> 167 </span> : : #define LE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val))</a>
-<a name="168"><span class="lineNum"> 168 </span> : : </a>
-<a name="169"><span class="lineNum"> 169 </span> : : /**</a>
-<a name="170"><span class="lineNum"> 170 </span> : : * LE16_TO_CPU - convert a little-endian uint16_t constant</a>
-<a name="171"><span class="lineNum"> 171 </span> : : * @le_val: little-endian constant to convert</a>
-<a name="172"><span class="lineNum"> 172 </span> : : */</a>
-<a name="173"><span class="lineNum"> 173 </span> : : #define LE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val))</a>
-<a name="174"><span class="lineNum"> 174 </span> : : </a>
-<a name="175"><span class="lineNum"> 175 </span> : : #else /* ... HAVE_BIG_ENDIAN */</a>
-<a name="176"><span class="lineNum"> 176 </span> : : #define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)BSWAP_64(native))</a>
-<a name="177"><span class="lineNum"> 177 </span> : : #define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)BSWAP_32(native))</a>
-<a name="178"><span class="lineNum"> 178 </span> : : #define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)BSWAP_16(native))</a>
-<a name="179"><span class="lineNum"> 179 </span> : : #define LE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val)</a>
-<a name="180"><span class="lineNum"> 180 </span> : : #define LE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val)</a>
-<a name="181"><span class="lineNum"> 181 </span> : : #define LE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val)</a>
-<a name="182"><span class="lineNum"> 182 </span> : : #endif /* HAVE_BIG_ENDIAN */</a>
-<a name="183"><span class="lineNum"> 183 </span> : : </a>
-<a name="184"><span class="lineNum"> 184 </span> : : #if HAVE_BIG_ENDIAN</a>
-<a name="185"><span class="lineNum"> 185 </span> : : /**</a>
-<a name="186"><span class="lineNum"> 186 </span> : : * CPU_TO_BE64 - convert a constant uint64_t value to big-endian</a>
-<a name="187"><span class="lineNum"> 187 </span> : : * @native: constant to convert</a>
-<a name="188"><span class="lineNum"> 188 </span> : : */</a>
-<a name="189"><span class="lineNum"> 189 </span> : : #define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)(native))</a>
-<a name="190"><span class="lineNum"> 190 </span> : : </a>
-<a name="191"><span class="lineNum"> 191 </span> : : /**</a>
-<a name="192"><span class="lineNum"> 192 </span> : : * CPU_TO_BE32 - convert a constant uint32_t value to big-endian</a>
-<a name="193"><span class="lineNum"> 193 </span> : : * @native: constant to convert</a>
-<a name="194"><span class="lineNum"> 194 </span> : : */</a>
-<a name="195"><span class="lineNum"> 195 </span> : : #define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)(native))</a>
-<a name="196"><span class="lineNum"> 196 </span> : : </a>
-<a name="197"><span class="lineNum"> 197 </span> : : /**</a>
-<a name="198"><span class="lineNum"> 198 </span> : : * CPU_TO_BE16 - convert a constant uint16_t value to big-endian</a>
-<a name="199"><span class="lineNum"> 199 </span> : : * @native: constant to convert</a>
-<a name="200"><span class="lineNum"> 200 </span> : : */</a>
-<a name="201"><span class="lineNum"> 201 </span> : : #define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)(native))</a>
-<a name="202"><span class="lineNum"> 202 </span> : : </a>
-<a name="203"><span class="lineNum"> 203 </span> : : /**</a>
-<a name="204"><span class="lineNum"> 204 </span> : : * BE64_TO_CPU - convert a big-endian uint64_t constant</a>
-<a name="205"><span class="lineNum"> 205 </span> : : * @le_val: big-endian constant to convert</a>
-<a name="206"><span class="lineNum"> 206 </span> : : */</a>
-<a name="207"><span class="lineNum"> 207 </span> : : #define BE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val))</a>
-<a name="208"><span class="lineNum"> 208 </span> : : </a>
-<a name="209"><span class="lineNum"> 209 </span> : : /**</a>
-<a name="210"><span class="lineNum"> 210 </span> : : * BE32_TO_CPU - convert a big-endian uint32_t constant</a>
-<a name="211"><span class="lineNum"> 211 </span> : : * @le_val: big-endian constant to convert</a>
-<a name="212"><span class="lineNum"> 212 </span> : : */</a>
-<a name="213"><span class="lineNum"> 213 </span> : : #define BE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val))</a>
-<a name="214"><span class="lineNum"> 214 </span> : : </a>
-<a name="215"><span class="lineNum"> 215 </span> : : /**</a>
-<a name="216"><span class="lineNum"> 216 </span> : : * BE16_TO_CPU - convert a big-endian uint16_t constant</a>
-<a name="217"><span class="lineNum"> 217 </span> : : * @le_val: big-endian constant to convert</a>
-<a name="218"><span class="lineNum"> 218 </span> : : */</a>
-<a name="219"><span class="lineNum"> 219 </span> : : #define BE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val))</a>
-<a name="220"><span class="lineNum"> 220 </span> : : </a>
-<a name="221"><span class="lineNum"> 221 </span> : : #else /* ... HAVE_LITTLE_ENDIAN */</a>
-<a name="222"><span class="lineNum"> 222 </span> : : #define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)BSWAP_64(native))</a>
-<a name="223"><span class="lineNum"> 223 </span> : : #define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)BSWAP_32(native))</a>
-<a name="224"><span class="lineNum"> 224 </span> : : #define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)BSWAP_16(native))</a>
-<a name="225"><span class="lineNum"> 225 </span> : : #define BE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val)</a>
-<a name="226"><span class="lineNum"> 226 </span> : : #define BE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val)</a>
-<a name="227"><span class="lineNum"> 227 </span> : : #define BE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val)</a>
-<a name="228"><span class="lineNum"> 228 </span> : : #endif /* HAVE_LITTE_ENDIAN */</a>
-<a name="229"><span class="lineNum"> 229 </span> : : </a>
-<a name="230"><span class="lineNum"> 230 </span> : : </a>
-<a name="231"><span class="lineNum"> 231 </span> : : /**</a>
-<a name="232"><span class="lineNum"> 232 </span> : : * cpu_to_le64 - convert a uint64_t value to little-endian</a>
-<a name="233"><span class="lineNum"> 233 </span> : : * @native: value to convert</a>
-<a name="234"><span class="lineNum"> 234 </span> : : */</a>
-<a name="235"><span class="lineNum"> 235 </span> : : static inline leint64_t cpu_to_le64(uint64_t native)</a>
-<a name="236"><span class="lineNum"> 236 </span> : : {</a>
-<a name="237"><span class="lineNum"> 237 </span> : : return CPU_TO_LE64(native);</a>
-<a name="238"><span class="lineNum"> 238 </span> : : }</a>
-<a name="239"><span class="lineNum"> 239 </span> : : </a>
-<a name="240"><span class="lineNum"> 240 </span> : : /**</a>
-<a name="241"><span class="lineNum"> 241 </span> : : * cpu_to_le32 - convert a uint32_t value to little-endian</a>
-<a name="242"><span class="lineNum"> 242 </span> : : * @native: value to convert</a>
-<a name="243"><span class="lineNum"> 243 </span> : : */</a>
-<a name="244"><span class="lineNum"> 244 </span> : : static inline leint32_t cpu_to_le32(uint32_t native)</a>
-<a name="245"><span class="lineNum"> 245 </span> : : {</a>
-<a name="246"><span class="lineNum"> 246 </span> : : return CPU_TO_LE32(native);</a>
-<a name="247"><span class="lineNum"> 247 </span> : : }</a>
-<a name="248"><span class="lineNum"> 248 </span> : : </a>
-<a name="249"><span class="lineNum"> 249 </span> : : /**</a>
-<a name="250"><span class="lineNum"> 250 </span> : : * cpu_to_le16 - convert a uint16_t value to little-endian</a>
-<a name="251"><span class="lineNum"> 251 </span> : : * @native: value to convert</a>
-<a name="252"><span class="lineNum"> 252 </span> : : */</a>
-<a name="253"><span class="lineNum"> 253 </span> : : static inline leint16_t cpu_to_le16(uint16_t native)</a>
-<a name="254"><span class="lineNum"> 254 </span> : : {</a>
-<a name="255"><span class="lineNum"> 255 </span> : : return CPU_TO_LE16(native);</a>
-<a name="256"><span class="lineNum"> 256 </span> : : }</a>
-<a name="257"><span class="lineNum"> 257 </span> : : </a>
-<a name="258"><span class="lineNum"> 258 </span> : : /**</a>
-<a name="259"><span class="lineNum"> 259 </span> : : * le64_to_cpu - convert a little-endian uint64_t value</a>
-<a name="260"><span class="lineNum"> 260 </span> : : * @le_val: little-endian value to convert</a>
-<a name="261"><span class="lineNum"> 261 </span> : : */</a>
-<a name="262"><span class="lineNum"> 262 </span> : : static inline uint64_t le64_to_cpu(leint64_t le_val)</a>
-<a name="263"><span class="lineNum"> 263 </span> : : {</a>
-<a name="264"><span class="lineNum"> 264 </span> : : return LE64_TO_CPU(le_val);</a>
-<a name="265"><span class="lineNum"> 265 </span> : : }</a>
-<a name="266"><span class="lineNum"> 266 </span> : : </a>
-<a name="267"><span class="lineNum"> 267 </span> : : /**</a>
-<a name="268"><span class="lineNum"> 268 </span> : : * le32_to_cpu - convert a little-endian uint32_t value</a>
-<a name="269"><span class="lineNum"> 269 </span> : : * @le_val: little-endian value to convert</a>
-<a name="270"><span class="lineNum"> 270 </span> : : */</a>
-<a name="271"><span class="lineNum"> 271 </span> : : static inline uint32_t le32_to_cpu(leint32_t le_val)</a>
-<a name="272"><span class="lineNum"> 272 </span> : : {</a>
-<a name="273"><span class="lineNum"> 273 </span> : : return LE32_TO_CPU(le_val);</a>
-<a name="274"><span class="lineNum"> 274 </span> : : }</a>
-<a name="275"><span class="lineNum"> 275 </span> : : </a>
-<a name="276"><span class="lineNum"> 276 </span> : : /**</a>
-<a name="277"><span class="lineNum"> 277 </span> : : * le16_to_cpu - convert a little-endian uint16_t value</a>
-<a name="278"><span class="lineNum"> 278 </span> : : * @le_val: little-endian value to convert</a>
-<a name="279"><span class="lineNum"> 279 </span> : : */</a>
-<a name="280"><span class="lineNum"> 280 </span> : : static inline uint16_t le16_to_cpu(leint16_t le_val)</a>
-<a name="281"><span class="lineNum"> 281 </span> : : {</a>
-<a name="282"><span class="lineNum"> 282 </span> : : return LE16_TO_CPU(le_val);</a>
-<a name="283"><span class="lineNum"> 283 </span> : : }</a>
-<a name="284"><span class="lineNum"> 284 </span> : : </a>
-<a name="285"><span class="lineNum"> 285 </span> : : /**</a>
-<a name="286"><span class="lineNum"> 286 </span> : : * cpu_to_be64 - convert a uint64_t value to big endian.</a>
-<a name="287"><span class="lineNum"> 287 </span> : : * @native: value to convert</a>
-<a name="288"><span class="lineNum"> 288 </span> : : */</a>
-<a name="289"><span class="lineNum"> 289 </span> :<span class="lineNoCov"> 0 : static inline beint64_t cpu_to_be64(uint64_t native)</span></a>
-<a name="290"><span class="lineNum"> 290 </span> : : {</a>
-<a name="291"><span class="lineNum"> 291 </span> :<span class="lineNoCov"> 0 : return CPU_TO_BE64(native);</span></a>
-<a name="292"><span class="lineNum"> 292 </span> : : }</a>
-<a name="293"><span class="lineNum"> 293 </span> : : </a>
-<a name="294"><span class="lineNum"> 294 </span> : : /**</a>
-<a name="295"><span class="lineNum"> 295 </span> : : * cpu_to_be32 - convert a uint32_t value to big endian.</a>
-<a name="296"><span class="lineNum"> 296 </span> : : * @native: value to convert</a>
-<a name="297"><span class="lineNum"> 297 </span> : : */</a>
-<a name="298"><span class="lineNum"> 298 </span> :<span class="lineCov"> 40 : static inline beint32_t cpu_to_be32(uint32_t native)</span></a>
-<a name="299"><span class="lineNum"> 299 </span> : : {</a>
-<a name="300"><span class="lineNum"> 300 </span> :<span class="lineCov"> 40 : return CPU_TO_BE32(native);</span></a>
-<a name="301"><span class="lineNum"> 301 </span> : : }</a>
-<a name="302"><span class="lineNum"> 302 </span> : : </a>
-<a name="303"><span class="lineNum"> 303 </span> : : /**</a>
-<a name="304"><span class="lineNum"> 304 </span> : : * cpu_to_be16 - convert a uint16_t value to big endian.</a>
-<a name="305"><span class="lineNum"> 305 </span> : : * @native: value to convert</a>
-<a name="306"><span class="lineNum"> 306 </span> : : */</a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineCov"> 34 : static inline beint16_t cpu_to_be16(uint16_t native)</span></a>
-<a name="308"><span class="lineNum"> 308 </span> : : {</a>
-<a name="309"><span class="lineNum"> 309 </span> :<span class="lineCov"> 34 : return CPU_TO_BE16(native);</span></a>
-<a name="310"><span class="lineNum"> 310 </span> : : }</a>
-<a name="311"><span class="lineNum"> 311 </span> : : </a>
-<a name="312"><span class="lineNum"> 312 </span> : : /**</a>
-<a name="313"><span class="lineNum"> 313 </span> : : * be64_to_cpu - convert a big-endian uint64_t value</a>
-<a name="314"><span class="lineNum"> 314 </span> : : * @be_val: big-endian value to convert</a>
-<a name="315"><span class="lineNum"> 315 </span> : : */</a>
-<a name="316"><span class="lineNum"> 316 </span> :<span class="lineCov"> 2268 : static inline uint64_t be64_to_cpu(beint64_t be_val)</span></a>
-<a name="317"><span class="lineNum"> 317 </span> : : {</a>
-<a name="318"><span class="lineNum"> 318 </span> :<span class="lineCov"> 2268 : return BE64_TO_CPU(be_val);</span></a>
-<a name="319"><span class="lineNum"> 319 </span> : : }</a>
-<a name="320"><span class="lineNum"> 320 </span> : : </a>
-<a name="321"><span class="lineNum"> 321 </span> : : /**</a>
-<a name="322"><span class="lineNum"> 322 </span> : : * be32_to_cpu - convert a big-endian uint32_t value</a>
-<a name="323"><span class="lineNum"> 323 </span> : : * @be_val: big-endian value to convert</a>
-<a name="324"><span class="lineNum"> 324 </span> : : */</a>
-<a name="325"><span class="lineNum"> 325 </span> :<span class="lineNoCov"> 0 : static inline uint32_t be32_to_cpu(beint32_t be_val)</span></a>
-<a name="326"><span class="lineNum"> 326 </span> : : {</a>
-<a name="327"><span class="lineNum"> 327 </span> :<span class="lineNoCov"> 0 : return BE32_TO_CPU(be_val);</span></a>
-<a name="328"><span class="lineNum"> 328 </span> : : }</a>
-<a name="329"><span class="lineNum"> 329 </span> : : </a>
-<a name="330"><span class="lineNum"> 330 </span> : : /**</a>
-<a name="331"><span class="lineNum"> 331 </span> : : * be16_to_cpu - convert a big-endian uint16_t value</a>
-<a name="332"><span class="lineNum"> 332 </span> : : * @be_val: big-endian value to convert</a>
-<a name="333"><span class="lineNum"> 333 </span> : : */</a>
-<a name="334"><span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : static inline uint16_t be16_to_cpu(beint16_t be_val)</span></a>
-<a name="335"><span class="lineNum"> 335 </span> : : {</a>
-<a name="336"><span class="lineNum"> 336 </span> :<span class="lineNoCov"> 0 : return BE16_TO_CPU(be_val);</span></a>
-<a name="337"><span class="lineNum"> 337 </span> : : }</a>
-<a name="338"><span class="lineNum"> 338 </span> : : </a>
-<a name="339"><span class="lineNum"> 339 </span> : : /* Whichever they include first, they get these definitions. */</a>
-<a name="340"><span class="lineNum"> 340 </span> : : #ifdef CCAN_SHORT_TYPES_H</a>
-<a name="341"><span class="lineNum"> 341 </span> : : /**</a>
-<a name="342"><span class="lineNum"> 342 </span> : : * be64/be32/be16 - 64/32/16 bit big-endian representation.</a>
-<a name="343"><span class="lineNum"> 343 </span> : : */</a>
-<a name="344"><span class="lineNum"> 344 </span> : : typedef beint64_t be64;</a>
-<a name="345"><span class="lineNum"> 345 </span> : : typedef beint32_t be32;</a>
-<a name="346"><span class="lineNum"> 346 </span> : : typedef beint16_t be16;</a>
-<a name="347"><span class="lineNum"> 347 </span> : : </a>
-<a name="348"><span class="lineNum"> 348 </span> : : /**</a>
-<a name="349"><span class="lineNum"> 349 </span> : : * le64/le32/le16 - 64/32/16 bit little-endian representation.</a>
-<a name="350"><span class="lineNum"> 350 </span> : : */</a>
-<a name="351"><span class="lineNum"> 351 </span> : : typedef leint64_t le64;</a>
-<a name="352"><span class="lineNum"> 352 </span> : : typedef leint32_t le32;</a>
-<a name="353"><span class="lineNum"> 353 </span> : : typedef leint16_t le16;</a>
-<a name="354"><span class="lineNum"> 354 </span> : : #endif</a>
-<a name="355"><span class="lineNum"> 355 </span> : : #endif /* CCAN_ENDIAN_H */</a>
+<a name="116"><span class="lineNum"> 116 </span> : : #ifndef __BYTE_ORDER</a>
+<a name="117"><span class="lineNum"> 117 </span> : : #define __BYTE_ORDER __LITTLE_ENDIAN</a>
+<a name="118"><span class="lineNum"> 118 </span> : : #elif __BYTE_ORDER != __LITTLE_ENDIAN</a>
+<a name="119"><span class="lineNum"> 119 </span> : : #error &quot;__BYTE_ORDER already defined, but not equal to __LITTLE_ENDIAN&quot;</a>
+<a name="120"><span class="lineNum"> 120 </span> : : #endif</a>
+<a name="121"><span class="lineNum"> 121 </span> : : #elif HAVE_BIG_ENDIAN</a>
+<a name="122"><span class="lineNum"> 122 </span> : : #ifndef __BYTE_ORDER</a>
+<a name="123"><span class="lineNum"> 123 </span> : : #define __BYTE_ORDER __BIG_ENDIAN</a>
+<a name="124"><span class="lineNum"> 124 </span> : : #elif __BYTE_ORDER != __BIG_ENDIAN</a>
+<a name="125"><span class="lineNum"> 125 </span> : : #error &quot;__BYTE_ORDER already defined, but not equal to __BIG_ENDIAN&quot;</a>
+<a name="126"><span class="lineNum"> 126 </span> : : #endif</a>
+<a name="127"><span class="lineNum"> 127 </span> : : #endif</a>
+<a name="128"><span class="lineNum"> 128 </span> : : </a>
+<a name="129"><span class="lineNum"> 129 </span> : : </a>
+<a name="130"><span class="lineNum"> 130 </span> : : #ifdef __CHECKER__</a>
+<a name="131"><span class="lineNum"> 131 </span> : : /* sparse needs forcing to remove bitwise attribute from ccan/short_types */</a>
+<a name="132"><span class="lineNum"> 132 </span> : : #define ENDIAN_CAST __attribute__((force))</a>
+<a name="133"><span class="lineNum"> 133 </span> : : #define ENDIAN_TYPE __attribute__((bitwise))</a>
+<a name="134"><span class="lineNum"> 134 </span> : : #else</a>
+<a name="135"><span class="lineNum"> 135 </span> : : #define ENDIAN_CAST</a>
+<a name="136"><span class="lineNum"> 136 </span> : : #define ENDIAN_TYPE</a>
+<a name="137"><span class="lineNum"> 137 </span> : : #endif</a>
+<a name="138"><span class="lineNum"> 138 </span> : : </a>
+<a name="139"><span class="lineNum"> 139 </span> : : typedef uint64_t ENDIAN_TYPE leint64_t;</a>
+<a name="140"><span class="lineNum"> 140 </span> : : typedef uint64_t ENDIAN_TYPE beint64_t;</a>
+<a name="141"><span class="lineNum"> 141 </span> : : typedef uint32_t ENDIAN_TYPE leint32_t;</a>
+<a name="142"><span class="lineNum"> 142 </span> : : typedef uint32_t ENDIAN_TYPE beint32_t;</a>
+<a name="143"><span class="lineNum"> 143 </span> : : typedef uint16_t ENDIAN_TYPE leint16_t;</a>
+<a name="144"><span class="lineNum"> 144 </span> : : typedef uint16_t ENDIAN_TYPE beint16_t;</a>
+<a name="145"><span class="lineNum"> 145 </span> : : </a>
+<a name="146"><span class="lineNum"> 146 </span> : : #if HAVE_LITTLE_ENDIAN</a>
+<a name="147"><span class="lineNum"> 147 </span> : : /**</a>
+<a name="148"><span class="lineNum"> 148 </span> : : * CPU_TO_LE64 - convert a constant uint64_t value to little-endian</a>
+<a name="149"><span class="lineNum"> 149 </span> : : * @native: constant to convert</a>
+<a name="150"><span class="lineNum"> 150 </span> : : */</a>
+<a name="151"><span class="lineNum"> 151 </span> : : #define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)(native))</a>
+<a name="152"><span class="lineNum"> 152 </span> : : </a>
+<a name="153"><span class="lineNum"> 153 </span> : : /**</a>
+<a name="154"><span class="lineNum"> 154 </span> : : * CPU_TO_LE32 - convert a constant uint32_t value to little-endian</a>
+<a name="155"><span class="lineNum"> 155 </span> : : * @native: constant to convert</a>
+<a name="156"><span class="lineNum"> 156 </span> : : */</a>
+<a name="157"><span class="lineNum"> 157 </span> : : #define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)(native))</a>
+<a name="158"><span class="lineNum"> 158 </span> : : </a>
+<a name="159"><span class="lineNum"> 159 </span> : : /**</a>
+<a name="160"><span class="lineNum"> 160 </span> : : * CPU_TO_LE16 - convert a constant uint16_t value to little-endian</a>
+<a name="161"><span class="lineNum"> 161 </span> : : * @native: constant to convert</a>
+<a name="162"><span class="lineNum"> 162 </span> : : */</a>
+<a name="163"><span class="lineNum"> 163 </span> : : #define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)(native))</a>
+<a name="164"><span class="lineNum"> 164 </span> : : </a>
+<a name="165"><span class="lineNum"> 165 </span> : : /**</a>
+<a name="166"><span class="lineNum"> 166 </span> : : * LE64_TO_CPU - convert a little-endian uint64_t constant</a>
+<a name="167"><span class="lineNum"> 167 </span> : : * @le_val: little-endian constant to convert</a>
+<a name="168"><span class="lineNum"> 168 </span> : : */</a>
+<a name="169"><span class="lineNum"> 169 </span> : : #define LE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val))</a>
+<a name="170"><span class="lineNum"> 170 </span> : : </a>
+<a name="171"><span class="lineNum"> 171 </span> : : /**</a>
+<a name="172"><span class="lineNum"> 172 </span> : : * LE32_TO_CPU - convert a little-endian uint32_t constant</a>
+<a name="173"><span class="lineNum"> 173 </span> : : * @le_val: little-endian constant to convert</a>
+<a name="174"><span class="lineNum"> 174 </span> : : */</a>
+<a name="175"><span class="lineNum"> 175 </span> : : #define LE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val))</a>
+<a name="176"><span class="lineNum"> 176 </span> : : </a>
+<a name="177"><span class="lineNum"> 177 </span> : : /**</a>
+<a name="178"><span class="lineNum"> 178 </span> : : * LE16_TO_CPU - convert a little-endian uint16_t constant</a>
+<a name="179"><span class="lineNum"> 179 </span> : : * @le_val: little-endian constant to convert</a>
+<a name="180"><span class="lineNum"> 180 </span> : : */</a>
+<a name="181"><span class="lineNum"> 181 </span> : : #define LE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val))</a>
+<a name="182"><span class="lineNum"> 182 </span> : : </a>
+<a name="183"><span class="lineNum"> 183 </span> : : #else /* ... HAVE_BIG_ENDIAN */</a>
+<a name="184"><span class="lineNum"> 184 </span> : : #define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)BSWAP_64(native))</a>
+<a name="185"><span class="lineNum"> 185 </span> : : #define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)BSWAP_32(native))</a>
+<a name="186"><span class="lineNum"> 186 </span> : : #define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)BSWAP_16(native))</a>
+<a name="187"><span class="lineNum"> 187 </span> : : #define LE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val)</a>
+<a name="188"><span class="lineNum"> 188 </span> : : #define LE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val)</a>
+<a name="189"><span class="lineNum"> 189 </span> : : #define LE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val)</a>
+<a name="190"><span class="lineNum"> 190 </span> : : #endif /* HAVE_BIG_ENDIAN */</a>
+<a name="191"><span class="lineNum"> 191 </span> : : </a>
+<a name="192"><span class="lineNum"> 192 </span> : : #if HAVE_BIG_ENDIAN</a>
+<a name="193"><span class="lineNum"> 193 </span> : : /**</a>
+<a name="194"><span class="lineNum"> 194 </span> : : * CPU_TO_BE64 - convert a constant uint64_t value to big-endian</a>
+<a name="195"><span class="lineNum"> 195 </span> : : * @native: constant to convert</a>
+<a name="196"><span class="lineNum"> 196 </span> : : */</a>
+<a name="197"><span class="lineNum"> 197 </span> : : #define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)(native))</a>
+<a name="198"><span class="lineNum"> 198 </span> : : </a>
+<a name="199"><span class="lineNum"> 199 </span> : : /**</a>
+<a name="200"><span class="lineNum"> 200 </span> : : * CPU_TO_BE32 - convert a constant uint32_t value to big-endian</a>
+<a name="201"><span class="lineNum"> 201 </span> : : * @native: constant to convert</a>
+<a name="202"><span class="lineNum"> 202 </span> : : */</a>
+<a name="203"><span class="lineNum"> 203 </span> : : #define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)(native))</a>
+<a name="204"><span class="lineNum"> 204 </span> : : </a>
+<a name="205"><span class="lineNum"> 205 </span> : : /**</a>
+<a name="206"><span class="lineNum"> 206 </span> : : * CPU_TO_BE16 - convert a constant uint16_t value to big-endian</a>
+<a name="207"><span class="lineNum"> 207 </span> : : * @native: constant to convert</a>
+<a name="208"><span class="lineNum"> 208 </span> : : */</a>
+<a name="209"><span class="lineNum"> 209 </span> : : #define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)(native))</a>
+<a name="210"><span class="lineNum"> 210 </span> : : </a>
+<a name="211"><span class="lineNum"> 211 </span> : : /**</a>
+<a name="212"><span class="lineNum"> 212 </span> : : * BE64_TO_CPU - convert a big-endian uint64_t constant</a>
+<a name="213"><span class="lineNum"> 213 </span> : : * @le_val: big-endian constant to convert</a>
+<a name="214"><span class="lineNum"> 214 </span> : : */</a>
+<a name="215"><span class="lineNum"> 215 </span> : : #define BE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val))</a>
+<a name="216"><span class="lineNum"> 216 </span> : : </a>
+<a name="217"><span class="lineNum"> 217 </span> : : /**</a>
+<a name="218"><span class="lineNum"> 218 </span> : : * BE32_TO_CPU - convert a big-endian uint32_t constant</a>
+<a name="219"><span class="lineNum"> 219 </span> : : * @le_val: big-endian constant to convert</a>
+<a name="220"><span class="lineNum"> 220 </span> : : */</a>
+<a name="221"><span class="lineNum"> 221 </span> : : #define BE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val))</a>
+<a name="222"><span class="lineNum"> 222 </span> : : </a>
+<a name="223"><span class="lineNum"> 223 </span> : : /**</a>
+<a name="224"><span class="lineNum"> 224 </span> : : * BE16_TO_CPU - convert a big-endian uint16_t constant</a>
+<a name="225"><span class="lineNum"> 225 </span> : : * @le_val: big-endian constant to convert</a>
+<a name="226"><span class="lineNum"> 226 </span> : : */</a>
+<a name="227"><span class="lineNum"> 227 </span> : : #define BE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val))</a>
+<a name="228"><span class="lineNum"> 228 </span> : : </a>
+<a name="229"><span class="lineNum"> 229 </span> : : #else /* ... HAVE_LITTLE_ENDIAN */</a>
+<a name="230"><span class="lineNum"> 230 </span> : : #define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)BSWAP_64(native))</a>
+<a name="231"><span class="lineNum"> 231 </span> : : #define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)BSWAP_32(native))</a>
+<a name="232"><span class="lineNum"> 232 </span> : : #define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)BSWAP_16(native))</a>
+<a name="233"><span class="lineNum"> 233 </span> : : #define BE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val)</a>
+<a name="234"><span class="lineNum"> 234 </span> : : #define BE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val)</a>
+<a name="235"><span class="lineNum"> 235 </span> : : #define BE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val)</a>
+<a name="236"><span class="lineNum"> 236 </span> : : #endif /* HAVE_LITTE_ENDIAN */</a>
+<a name="237"><span class="lineNum"> 237 </span> : : </a>
+<a name="238"><span class="lineNum"> 238 </span> : : </a>
+<a name="239"><span class="lineNum"> 239 </span> : : /**</a>
+<a name="240"><span class="lineNum"> 240 </span> : : * cpu_to_le64 - convert a uint64_t value to little-endian</a>
+<a name="241"><span class="lineNum"> 241 </span> : : * @native: value to convert</a>
+<a name="242"><span class="lineNum"> 242 </span> : : */</a>
+<a name="243"><span class="lineNum"> 243 </span> : : static inline leint64_t cpu_to_le64(uint64_t native)</a>
+<a name="244"><span class="lineNum"> 244 </span> : : {</a>
+<a name="245"><span class="lineNum"> 245 </span> : : return CPU_TO_LE64(native);</a>
+<a name="246"><span class="lineNum"> 246 </span> : : }</a>
+<a name="247"><span class="lineNum"> 247 </span> : : </a>
+<a name="248"><span class="lineNum"> 248 </span> : : /**</a>
+<a name="249"><span class="lineNum"> 249 </span> : : * cpu_to_le32 - convert a uint32_t value to little-endian</a>
+<a name="250"><span class="lineNum"> 250 </span> : : * @native: value to convert</a>
+<a name="251"><span class="lineNum"> 251 </span> : : */</a>
+<a name="252"><span class="lineNum"> 252 </span> : : static inline leint32_t cpu_to_le32(uint32_t native)</a>
+<a name="253"><span class="lineNum"> 253 </span> : : {</a>
+<a name="254"><span class="lineNum"> 254 </span> : : return CPU_TO_LE32(native);</a>
+<a name="255"><span class="lineNum"> 255 </span> : : }</a>
+<a name="256"><span class="lineNum"> 256 </span> : : </a>
+<a name="257"><span class="lineNum"> 257 </span> : : /**</a>
+<a name="258"><span class="lineNum"> 258 </span> : : * cpu_to_le16 - convert a uint16_t value to little-endian</a>
+<a name="259"><span class="lineNum"> 259 </span> : : * @native: value to convert</a>
+<a name="260"><span class="lineNum"> 260 </span> : : */</a>
+<a name="261"><span class="lineNum"> 261 </span> : : static inline leint16_t cpu_to_le16(uint16_t native)</a>
+<a name="262"><span class="lineNum"> 262 </span> : : {</a>
+<a name="263"><span class="lineNum"> 263 </span> : : return CPU_TO_LE16(native);</a>
+<a name="264"><span class="lineNum"> 264 </span> : : }</a>
+<a name="265"><span class="lineNum"> 265 </span> : : </a>
+<a name="266"><span class="lineNum"> 266 </span> : : /**</a>
+<a name="267"><span class="lineNum"> 267 </span> : : * le64_to_cpu - convert a little-endian uint64_t value</a>
+<a name="268"><span class="lineNum"> 268 </span> : : * @le_val: little-endian value to convert</a>
+<a name="269"><span class="lineNum"> 269 </span> : : */</a>
+<a name="270"><span class="lineNum"> 270 </span> : : static inline uint64_t le64_to_cpu(leint64_t le_val)</a>
+<a name="271"><span class="lineNum"> 271 </span> : : {</a>
+<a name="272"><span class="lineNum"> 272 </span> : : return LE64_TO_CPU(le_val);</a>
+<a name="273"><span class="lineNum"> 273 </span> : : }</a>
+<a name="274"><span class="lineNum"> 274 </span> : : </a>
+<a name="275"><span class="lineNum"> 275 </span> : : /**</a>
+<a name="276"><span class="lineNum"> 276 </span> : : * le32_to_cpu - convert a little-endian uint32_t value</a>
+<a name="277"><span class="lineNum"> 277 </span> : : * @le_val: little-endian value to convert</a>
+<a name="278"><span class="lineNum"> 278 </span> : : */</a>
+<a name="279"><span class="lineNum"> 279 </span> : : static inline uint32_t le32_to_cpu(leint32_t le_val)</a>
+<a name="280"><span class="lineNum"> 280 </span> : : {</a>
+<a name="281"><span class="lineNum"> 281 </span> : : return LE32_TO_CPU(le_val);</a>
+<a name="282"><span class="lineNum"> 282 </span> : : }</a>
+<a name="283"><span class="lineNum"> 283 </span> : : </a>
+<a name="284"><span class="lineNum"> 284 </span> : : /**</a>
+<a name="285"><span class="lineNum"> 285 </span> : : * le16_to_cpu - convert a little-endian uint16_t value</a>
+<a name="286"><span class="lineNum"> 286 </span> : : * @le_val: little-endian value to convert</a>
+<a name="287"><span class="lineNum"> 287 </span> : : */</a>
+<a name="288"><span class="lineNum"> 288 </span> : : static inline uint16_t le16_to_cpu(leint16_t le_val)</a>
+<a name="289"><span class="lineNum"> 289 </span> : : {</a>
+<a name="290"><span class="lineNum"> 290 </span> : : return LE16_TO_CPU(le_val);</a>
+<a name="291"><span class="lineNum"> 291 </span> : : }</a>
+<a name="292"><span class="lineNum"> 292 </span> : : </a>
+<a name="293"><span class="lineNum"> 293 </span> : : /**</a>
+<a name="294"><span class="lineNum"> 294 </span> : : * cpu_to_be64 - convert a uint64_t value to big endian.</a>
+<a name="295"><span class="lineNum"> 295 </span> : : * @native: value to convert</a>
+<a name="296"><span class="lineNum"> 296 </span> : : */</a>
+<a name="297"><span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : static inline beint64_t cpu_to_be64(uint64_t native)</span></a>
+<a name="298"><span class="lineNum"> 298 </span> : : {</a>
+<a name="299"><span class="lineNum"> 299 </span> :<span class="lineNoCov"> 0 : return CPU_TO_BE64(native);</span></a>
+<a name="300"><span class="lineNum"> 300 </span> : : }</a>
+<a name="301"><span class="lineNum"> 301 </span> : : </a>
+<a name="302"><span class="lineNum"> 302 </span> : : /**</a>
+<a name="303"><span class="lineNum"> 303 </span> : : * cpu_to_be32 - convert a uint32_t value to big endian.</a>
+<a name="304"><span class="lineNum"> 304 </span> : : * @native: value to convert</a>
+<a name="305"><span class="lineNum"> 305 </span> : : */</a>
+<a name="306"><span class="lineNum"> 306 </span> :<span class="lineCov"> 40 : static inline beint32_t cpu_to_be32(uint32_t native)</span></a>
+<a name="307"><span class="lineNum"> 307 </span> : : {</a>
+<a name="308"><span class="lineNum"> 308 </span> :<span class="lineCov"> 40 : return CPU_TO_BE32(native);</span></a>
+<a name="309"><span class="lineNum"> 309 </span> : : }</a>
+<a name="310"><span class="lineNum"> 310 </span> : : </a>
+<a name="311"><span class="lineNum"> 311 </span> : : /**</a>
+<a name="312"><span class="lineNum"> 312 </span> : : * cpu_to_be16 - convert a uint16_t value to big endian.</a>
+<a name="313"><span class="lineNum"> 313 </span> : : * @native: value to convert</a>
+<a name="314"><span class="lineNum"> 314 </span> : : */</a>
+<a name="315"><span class="lineNum"> 315 </span> :<span class="lineCov"> 34 : static inline beint16_t cpu_to_be16(uint16_t native)</span></a>
+<a name="316"><span class="lineNum"> 316 </span> : : {</a>
+<a name="317"><span class="lineNum"> 317 </span> :<span class="lineCov"> 34 : return CPU_TO_BE16(native);</span></a>
+<a name="318"><span class="lineNum"> 318 </span> : : }</a>
+<a name="319"><span class="lineNum"> 319 </span> : : </a>
+<a name="320"><span class="lineNum"> 320 </span> : : /**</a>
+<a name="321"><span class="lineNum"> 321 </span> : : * be64_to_cpu - convert a big-endian uint64_t value</a>
+<a name="322"><span class="lineNum"> 322 </span> : : * @be_val: big-endian value to convert</a>
+<a name="323"><span class="lineNum"> 323 </span> : : */</a>
+<a name="324"><span class="lineNum"> 324 </span> :<span class="lineCov"> 2268 : static inline uint64_t be64_to_cpu(beint64_t be_val)</span></a>
+<a name="325"><span class="lineNum"> 325 </span> : : {</a>
+<a name="326"><span class="lineNum"> 326 </span> :<span class="lineCov"> 2268 : return BE64_TO_CPU(be_val);</span></a>
+<a name="327"><span class="lineNum"> 327 </span> : : }</a>
+<a name="328"><span class="lineNum"> 328 </span> : : </a>
+<a name="329"><span class="lineNum"> 329 </span> : : /**</a>
+<a name="330"><span class="lineNum"> 330 </span> : : * be32_to_cpu - convert a big-endian uint32_t value</a>
+<a name="331"><span class="lineNum"> 331 </span> : : * @be_val: big-endian value to convert</a>
+<a name="332"><span class="lineNum"> 332 </span> : : */</a>
+<a name="333"><span class="lineNum"> 333 </span> :<span class="lineNoCov"> 0 : static inline uint32_t be32_to_cpu(beint32_t be_val)</span></a>
+<a name="334"><span class="lineNum"> 334 </span> : : {</a>
+<a name="335"><span class="lineNum"> 335 </span> :<span class="lineNoCov"> 0 : return BE32_TO_CPU(be_val);</span></a>
+<a name="336"><span class="lineNum"> 336 </span> : : }</a>
+<a name="337"><span class="lineNum"> 337 </span> : : </a>
+<a name="338"><span class="lineNum"> 338 </span> : : /**</a>
+<a name="339"><span class="lineNum"> 339 </span> : : * be16_to_cpu - convert a big-endian uint16_t value</a>
+<a name="340"><span class="lineNum"> 340 </span> : : * @be_val: big-endian value to convert</a>
+<a name="341"><span class="lineNum"> 341 </span> : : */</a>
+<a name="342"><span class="lineNum"> 342 </span> : : static inline uint16_t be16_to_cpu(beint16_t be_val)</a>
+<a name="343"><span class="lineNum"> 343 </span> : : {</a>
+<a name="344"><span class="lineNum"> 344 </span> : : return BE16_TO_CPU(be_val);</a>
+<a name="345"><span class="lineNum"> 345 </span> : : }</a>
+<a name="346"><span class="lineNum"> 346 </span> : : </a>
+<a name="347"><span class="lineNum"> 347 </span> : : /* Whichever they include first, they get these definitions. */</a>
+<a name="348"><span class="lineNum"> 348 </span> : : #ifdef CCAN_SHORT_TYPES_H</a>
+<a name="349"><span class="lineNum"> 349 </span> : : /**</a>
+<a name="350"><span class="lineNum"> 350 </span> : : * be64/be32/be16 - 64/32/16 bit big-endian representation.</a>
+<a name="351"><span class="lineNum"> 351 </span> : : */</a>
+<a name="352"><span class="lineNum"> 352 </span> : : typedef beint64_t be64;</a>
+<a name="353"><span class="lineNum"> 353 </span> : : typedef beint32_t be32;</a>
+<a name="354"><span class="lineNum"> 354 </span> : : typedef beint16_t be16;</a>
+<a name="355"><span class="lineNum"> 355 </span> : : </a>
+<a name="356"><span class="lineNum"> 356 </span> : : /**</a>
+<a name="357"><span class="lineNum"> 357 </span> : : * le64/le32/le16 - 64/32/16 bit little-endian representation.</a>
+<a name="358"><span class="lineNum"> 358 </span> : : */</a>
+<a name="359"><span class="lineNum"> 359 </span> : : typedef leint64_t le64;</a>
+<a name="360"><span class="lineNum"> 360 </span> : : typedef leint32_t le32;</a>
+<a name="361"><span class="lineNum"> 361 </span> : : typedef leint16_t le16;</a>
+<a name="362"><span class="lineNum"> 362 </span> : : #endif</a>
+<a name="363"><span class="lineNum"> 363 </span> : : #endif /* CCAN_ENDIAN_H */</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/external/ffspart/ccan/endian/index-sort-b.html b/coverage-report/external/ffspart/ccan/endian/index-sort-b.html
index 499ab73..af9f1c9 100644
--- a/coverage-report/external/ffspart/ccan/endian/index-sort-b.html
+++ b/coverage-report/external/ffspart/ccan/endian/index-sort-b.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">50.0 %</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">60.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="endian.h.gcov.html">endian.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=50 height=10 alt="50.0%"><img src="../../../../snow.png" width=50 height=10 alt="50.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=60 height=10 alt="60.0%"><img src="../../../../snow.png" width=40 height=10 alt="60.0%"></td></tr></table>
</td>
- <td class="coverPerLo">50.0&nbsp;%</td>
- <td class="coverNumLo">6 / 12</td>
+ <td class="coverPerLo">60.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 10</td>
<td class="coverPerLo">50.0&nbsp;%</td>
<td class="coverNumLo">1 / 2</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/external/ffspart/ccan/endian/index-sort-f.html b/coverage-report/external/ffspart/ccan/endian/index-sort-f.html
index 56a9a07..22531d5 100644
--- a/coverage-report/external/ffspart/ccan/endian/index-sort-f.html
+++ b/coverage-report/external/ffspart/ccan/endian/index-sort-f.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">50.0 %</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">60.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="endian.h.gcov.html">endian.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=50 height=10 alt="50.0%"><img src="../../../../snow.png" width=50 height=10 alt="50.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=60 height=10 alt="60.0%"><img src="../../../../snow.png" width=40 height=10 alt="60.0%"></td></tr></table>
</td>
- <td class="coverPerLo">50.0&nbsp;%</td>
- <td class="coverNumLo">6 / 12</td>
+ <td class="coverPerLo">60.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 10</td>
<td class="coverPerLo">50.0&nbsp;%</td>
<td class="coverNumLo">1 / 2</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/external/ffspart/ccan/endian/index-sort-l.html b/coverage-report/external/ffspart/ccan/endian/index-sort-l.html
index 37b5f3e..306073b 100644
--- a/coverage-report/external/ffspart/ccan/endian/index-sort-l.html
+++ b/coverage-report/external/ffspart/ccan/endian/index-sort-l.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">50.0 %</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">60.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="endian.h.gcov.html">endian.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=50 height=10 alt="50.0%"><img src="../../../../snow.png" width=50 height=10 alt="50.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=60 height=10 alt="60.0%"><img src="../../../../snow.png" width=40 height=10 alt="60.0%"></td></tr></table>
</td>
- <td class="coverPerLo">50.0&nbsp;%</td>
- <td class="coverNumLo">6 / 12</td>
+ <td class="coverPerLo">60.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 10</td>
<td class="coverPerLo">50.0&nbsp;%</td>
<td class="coverNumLo">1 / 2</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/external/ffspart/ccan/endian/index.html b/coverage-report/external/ffspart/ccan/endian/index.html
index 013e54f..d9d98b3 100644
--- a/coverage-report/external/ffspart/ccan/endian/index.html
+++ b/coverage-report/external/ffspart/ccan/endian/index.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">50.0 %</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">60.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="endian.h.gcov.html">endian.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=50 height=10 alt="50.0%"><img src="../../../../snow.png" width=50 height=10 alt="50.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=60 height=10 alt="60.0%"><img src="../../../../snow.png" width=40 height=10 alt="60.0%"></td></tr></table>
</td>
- <td class="coverPerLo">50.0&nbsp;%</td>
- <td class="coverNumLo">6 / 12</td>
+ <td class="coverPerLo">60.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 10</td>
<td class="coverPerLo">50.0&nbsp;%</td>
<td class="coverNumLo">1 / 2</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/external/ffspart/common/arch_flash_common.c.func-sort-c.html b/coverage-report/external/ffspart/common/arch_flash_common.c.func-sort-c.html
index 16f88ef..4733ef4 100644
--- a/coverage-report/external/ffspart/common/arch_flash_common.c.func-sort-c.html
+++ b/coverage-report/external/ffspart/common/arch_flash_common.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/ffspart/common/arch_flash_common.c.func.html b/coverage-report/external/ffspart/common/arch_flash_common.c.func.html
index 0d6c64a..50a794d 100644
--- a/coverage-report/external/ffspart/common/arch_flash_common.c.func.html
+++ b/coverage-report/external/ffspart/common/arch_flash_common.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/ffspart/common/arch_flash_common.c.gcov.html b/coverage-report/external/ffspart/common/arch_flash_common.c.gcov.html
index 2e1cffb..8cbd4cf 100644
--- a/coverage-report/external/ffspart/common/arch_flash_common.c.gcov.html
+++ b/coverage-report/external/ffspart/common/arch_flash_common.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/ffspart/common/arch_flash_unknown.c.func-sort-c.html b/coverage-report/external/ffspart/common/arch_flash_unknown.c.func-sort-c.html
index e9d296a..5eb09ad 100644
--- a/coverage-report/external/ffspart/common/arch_flash_unknown.c.func-sort-c.html
+++ b/coverage-report/external/ffspart/common/arch_flash_unknown.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/ffspart/common/arch_flash_unknown.c.func.html b/coverage-report/external/ffspart/common/arch_flash_unknown.c.func.html
index 42608ff..859ebb2 100644
--- a/coverage-report/external/ffspart/common/arch_flash_unknown.c.func.html
+++ b/coverage-report/external/ffspart/common/arch_flash_unknown.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/ffspart/common/arch_flash_unknown.c.gcov.html b/coverage-report/external/ffspart/common/arch_flash_unknown.c.gcov.html
index ab5c4b0..c23d158 100644
--- a/coverage-report/external/ffspart/common/arch_flash_unknown.c.gcov.html
+++ b/coverage-report/external/ffspart/common/arch_flash_unknown.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/ffspart/common/index-sort-b.html b/coverage-report/external/ffspart/common/index-sort-b.html
index 9d81610..648b943 100644
--- a/coverage-report/external/ffspart/common/index-sort-b.html
+++ b/coverage-report/external/ffspart/common/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -82,18 +82,6 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="arch_flash_common.c.gcov.html">arch_flash_common.c</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
- </td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 18</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 4</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
<td class="coverFile"><a href="arch_flash_unknown.c.gcov.html">arch_flash_unknown.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=86 height=10 alt="85.7%"><img src="../../../snow.png" width=14 height=10 alt="85.7%"></td></tr></table>
@@ -105,6 +93,18 @@
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
+ <tr>
+ <td class="coverFile"><a href="arch_flash_common.c.gcov.html">arch_flash_common.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
+ </td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 18</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 4</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
</table>
</center>
<br>
diff --git a/coverage-report/external/ffspart/common/index-sort-f.html b/coverage-report/external/ffspart/common/index-sort-f.html
index c4b1cb5..0d58634 100644
--- a/coverage-report/external/ffspart/common/index-sort-f.html
+++ b/coverage-report/external/ffspart/common/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/ffspart/common/index-sort-l.html b/coverage-report/external/ffspart/common/index-sort-l.html
index 56e5561..8d6bf71 100644
--- a/coverage-report/external/ffspart/common/index-sort-l.html
+++ b/coverage-report/external/ffspart/common/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/ffspart/common/index.html b/coverage-report/external/ffspart/common/index.html
index f5aa500..cd7275a 100644
--- a/coverage-report/external/ffspart/common/index.html
+++ b/coverage-report/external/ffspart/common/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/ffspart/ffspart.c.func-sort-c.html b/coverage-report/external/ffspart/ffspart.c.func-sort-c.html
index a7e0771..504bf31 100644
--- a/coverage-report/external/ffspart/ffspart.c.func-sort-c.html
+++ b/coverage-report/external/ffspart/ffspart.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">134</td>
- <td class="headerCovTableEntry">296</td>
- <td class="headerCovTableEntryLo">45.3 %</td>
+ <td class="headerCovTableEntry">135</td>
+ <td class="headerCovTableEntry">295</td>
+ <td class="headerCovTableEntryLo">45.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntryLo">50.0 %</td>
</tr>
<tr>
<td></td>
@@ -84,14 +84,6 @@
<td class="coverFn"><a href="ffspart.c.gcov.html#114">parse_entry</a></td>
<td class="coverFnHi">28</td>
</tr>
- <tr>
- <td class="coverFn"><a href="ffspart.c.gcov.html#50">read_u32</a></td>
- <td class="coverFnHi">56</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="ffspart.c.gcov.html#57">advance_line</a></td>
- <td class="coverFnHi">168</td>
- </tr>
</table>
<br>
</center>
diff --git a/coverage-report/external/ffspart/ffspart.c.func.html b/coverage-report/external/ffspart/ffspart.c.func.html
index 61c1bdc..c214ca1 100644
--- a/coverage-report/external/ffspart/ffspart.c.func.html
+++ b/coverage-report/external/ffspart/ffspart.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">134</td>
- <td class="headerCovTableEntry">296</td>
- <td class="headerCovTableEntryLo">45.3 %</td>
+ <td class="headerCovTableEntry">135</td>
+ <td class="headerCovTableEntry">295</td>
+ <td class="headerCovTableEntryLo">45.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntryLo">50.0 %</td>
</tr>
<tr>
<td></td>
@@ -69,10 +69,6 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="ffspart.c.func-sort-c.html"><img src="../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="ffspart.c.gcov.html#57">advance_line</a></td>
- <td class="coverFnHi">168</td>
- </tr>
- <tr>
<td class="coverFn"><a href="ffspart.c.gcov.html#366">main</a></td>
<td class="coverFnHi">6</td>
</tr>
@@ -88,10 +84,6 @@
<td class="coverFn"><a href="ffspart.c.gcov.html#349">print_help</a></td>
<td class="coverFnLo">0</td>
</tr>
- <tr>
- <td class="coverFn"><a href="ffspart.c.gcov.html#50">read_u32</a></td>
- <td class="coverFnHi">56</td>
- </tr>
</table>
<br>
</center>
diff --git a/coverage-report/external/ffspart/ffspart.c.gcov.html b/coverage-report/external/ffspart/ffspart.c.gcov.html
index f2f17dd..866eacb 100644
--- a/coverage-report/external/ffspart/ffspart.c.gcov.html
+++ b/coverage-report/external/ffspart/ffspart.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">134</td>
- <td class="headerCovTableEntry">296</td>
- <td class="headerCovTableEntryLo">45.3 %</td>
+ <td class="headerCovTableEntry">135</td>
+ <td class="headerCovTableEntry">295</td>
+ <td class="headerCovTableEntryLo">45.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntryLo">50.0 %</td>
</tr>
<tr>
<td></td>
@@ -123,16 +123,16 @@
<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 56 : static int read_u32(const char *input, uint32_t *val)</span></a>
<a name="53"><span class="lineNum"> 53 </span> : : {</a>
<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 56 : char *endptr;</span></a>
-<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 56 : *val = strtoul(input, &amp;endptr, 0);</span></a>
+<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 112 : *val = strtoul(input, &amp;endptr, 0);</span></a>
<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 56 : return (*endptr == SEPARATOR) ? 0 : 1;</span></a>
<a name="57"><span class="lineNum"> 57 </span> : : }</a>
<a name="58"><span class="lineNum"> 58 </span> : : </a>
-<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 168 : static const char *advance_line(const char *input)</span></a>
+<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 196 : static const char *advance_line(const char *input)</span></a>
<a name="60"><span class="lineNum"> 60 </span> : : {</a>
-<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 168 : char *pos = strchr(input, SEPARATOR);</span></a>
-<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 168 : if (!pos)</span></a>
+<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 196 : char *pos = strchr(input, SEPARATOR);</span></a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 196 : if (!pos)</span></a>
<a name="63"><span class="lineNum"> 63 </span> : : return NULL;</a>
-<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 168 : return pos + 1;</span></a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 28 : return pos + 1;</span></a>
<a name="65"><span class="lineNum"> 65 </span> : : }</a>
<a name="66"><span class="lineNum"> 66 </span> : : </a>
<a name="67"><span class="lineNum"> 67 </span> :<span class="lineNoCov"> 0 : static struct ffs_hdr *parse_toc(const char *line, uint32_t block_size,</span></a>
@@ -449,7 +449,7 @@
<a name="378"><span class="lineNum"> 378 </span> :<span class="lineCov"> 30 : int line_number, rc, i;</span></a>
<a name="379"><span class="lineNum"> 379 </span> :<span class="lineCov"> 30 : FILE *in_file;</span></a>
<a name="380"><span class="lineNum"> 380 </span> : : </a>
-<a name="381"><span class="lineNum"> 381 </span> :<span class="lineCov"> 24 : while(1) {</span></a>
+<a name="381"><span class="lineNum"> 381 </span> :<span class="lineCov"> 54 : while(1) {</span></a>
<a name="382"><span class="lineNum"> 382 </span> :<span class="lineCov"> 30 : struct option long_opts[] = {</span></a>
<a name="383"><span class="lineNum"> 383 </span> : : {&quot;allow_empty&quot;, no_argument, NULL, 'e'},</a>
<a name="384"><span class="lineNum"> 384 </span> : : {&quot;block_count&quot;, required_argument, NULL, 'c'},</a>
@@ -484,7 +484,7 @@
<a name="413"><span class="lineNum"> 413 </span> :<span class="lineCov"> 6 : free(pnor);</span></a>
<a name="414"><span class="lineNum"> 414 </span> :<span class="lineCov"> 6 : pnor = strdup(optarg);</span></a>
<a name="415"><span class="lineNum"> 415 </span> :<span class="lineCov"> 6 : if (!pnor)</span></a>
-<a name="416"><span class="lineNum"> 416 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Out of memory!\n&quot;);</span></a>
+<a name="416"><span class="lineNum"> 416 </span> :<span class="lineCov"> 24 : fprintf(stderr, &quot;Out of memory!\n&quot;);</span></a>
<a name="417"><span class="lineNum"> 417 </span> : : break;</a>
<a name="418"><span class="lineNum"> 418 </span> :<span class="lineCov"> 6 : case 's':</span></a>
<a name="419"><span class="lineNum"> 419 </span> :<span class="lineCov"> 6 : block_size = strtoul(optarg, NULL, 0);</span></a>
@@ -600,7 +600,7 @@
<a name="529"><span class="lineNum"> 529 </span> :<span class="lineCov"> 6 : if (rc) {</span></a>
<a name="530"><span class="lineNum"> 530 </span> :<span class="lineNoCov"> 0 : rc = 7;</span></a>
<a name="531"><span class="lineNum"> 531 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Failed to write out TOC values\n&quot;);</span></a>
-<a name="532"><span class="lineNum"> 532 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="532"><span class="lineNum"> 532 </span> : : break;</a>
<a name="533"><span class="lineNum"> 533 </span> : : }</a>
<a name="534"><span class="lineNum"> 534 </span> : : }</a>
<a name="535"><span class="lineNum"> 535 </span> : : }</a>
diff --git a/coverage-report/external/ffspart/index-sort-b.html b/coverage-report/external/ffspart/index-sort-b.html
index 7615ab4..ee011ff 100644
--- a/coverage-report/external/ffspart/index-sort-b.html
+++ b/coverage-report/external/ffspart/index-sort-b.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">134</td>
- <td class="headerCovTableEntry">296</td>
- <td class="headerCovTableEntryLo">45.3 %</td>
+ <td class="headerCovTableEntry">135</td>
+ <td class="headerCovTableEntry">295</td>
+ <td class="headerCovTableEntryLo">45.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntryLo">50.0 %</td>
</tr>
<tr>
<td></td>
@@ -84,12 +84,12 @@
<tr>
<td class="coverFile"><a href="ffspart.c.gcov.html">ffspart.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=45 height=10 alt="45.3%"><img src="../../snow.png" width=55 height=10 alt="45.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=46 height=10 alt="45.8%"><img src="../../snow.png" width=54 height=10 alt="45.8%"></td></tr></table>
</td>
- <td class="coverPerLo">45.3&nbsp;%</td>
- <td class="coverNumLo">134 / 296</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">4 / 6</td>
+ <td class="coverPerLo">45.8&nbsp;%</td>
+ <td class="coverNumLo">135 / 295</td>
+ <td class="coverPerLo">50.0&nbsp;%</td>
+ <td class="coverNumLo">2 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/ffspart/index-sort-f.html b/coverage-report/external/ffspart/index-sort-f.html
index e1a2a61..a2d5912 100644
--- a/coverage-report/external/ffspart/index-sort-f.html
+++ b/coverage-report/external/ffspart/index-sort-f.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">134</td>
- <td class="headerCovTableEntry">296</td>
- <td class="headerCovTableEntryLo">45.3 %</td>
+ <td class="headerCovTableEntry">135</td>
+ <td class="headerCovTableEntry">295</td>
+ <td class="headerCovTableEntryLo">45.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntryLo">50.0 %</td>
</tr>
<tr>
<td></td>
@@ -84,12 +84,12 @@
<tr>
<td class="coverFile"><a href="ffspart.c.gcov.html">ffspart.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=45 height=10 alt="45.3%"><img src="../../snow.png" width=55 height=10 alt="45.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=46 height=10 alt="45.8%"><img src="../../snow.png" width=54 height=10 alt="45.8%"></td></tr></table>
</td>
- <td class="coverPerLo">45.3&nbsp;%</td>
- <td class="coverNumLo">134 / 296</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">4 / 6</td>
+ <td class="coverPerLo">45.8&nbsp;%</td>
+ <td class="coverNumLo">135 / 295</td>
+ <td class="coverPerLo">50.0&nbsp;%</td>
+ <td class="coverNumLo">2 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/ffspart/index-sort-l.html b/coverage-report/external/ffspart/index-sort-l.html
index 349d423..995d4ce 100644
--- a/coverage-report/external/ffspart/index-sort-l.html
+++ b/coverage-report/external/ffspart/index-sort-l.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">134</td>
- <td class="headerCovTableEntry">296</td>
- <td class="headerCovTableEntryLo">45.3 %</td>
+ <td class="headerCovTableEntry">135</td>
+ <td class="headerCovTableEntry">295</td>
+ <td class="headerCovTableEntryLo">45.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntryLo">50.0 %</td>
</tr>
<tr>
<td></td>
@@ -84,12 +84,12 @@
<tr>
<td class="coverFile"><a href="ffspart.c.gcov.html">ffspart.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=45 height=10 alt="45.3%"><img src="../../snow.png" width=55 height=10 alt="45.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=46 height=10 alt="45.8%"><img src="../../snow.png" width=54 height=10 alt="45.8%"></td></tr></table>
</td>
- <td class="coverPerLo">45.3&nbsp;%</td>
- <td class="coverNumLo">134 / 296</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">4 / 6</td>
+ <td class="coverPerLo">45.8&nbsp;%</td>
+ <td class="coverNumLo">135 / 295</td>
+ <td class="coverPerLo">50.0&nbsp;%</td>
+ <td class="coverNumLo">2 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/ffspart/index.html b/coverage-report/external/ffspart/index.html
index 84015c9..47a0000 100644
--- a/coverage-report/external/ffspart/index.html
+++ b/coverage-report/external/ffspart/index.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">134</td>
- <td class="headerCovTableEntry">296</td>
- <td class="headerCovTableEntryLo">45.3 %</td>
+ <td class="headerCovTableEntry">135</td>
+ <td class="headerCovTableEntry">295</td>
+ <td class="headerCovTableEntryLo">45.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntryLo">50.0 %</td>
</tr>
<tr>
<td></td>
@@ -84,12 +84,12 @@
<tr>
<td class="coverFile"><a href="ffspart.c.gcov.html">ffspart.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=45 height=10 alt="45.3%"><img src="../../snow.png" width=55 height=10 alt="45.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=46 height=10 alt="45.8%"><img src="../../snow.png" width=54 height=10 alt="45.8%"></td></tr></table>
</td>
- <td class="coverPerLo">45.3&nbsp;%</td>
- <td class="coverNumLo">134 / 296</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">4 / 6</td>
+ <td class="coverPerLo">45.8&nbsp;%</td>
+ <td class="coverNumLo">135 / 295</td>
+ <td class="coverPerLo">50.0&nbsp;%</td>
+ <td class="coverNumLo">2 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/ffspart/libflash/blocklevel.c.func-sort-c.html b/coverage-report/external/ffspart/libflash/blocklevel.c.func-sort-c.html
index b949cf9..dbfd962 100644
--- a/coverage-report/external/ffspart/libflash/blocklevel.c.func-sort-c.html
+++ b/coverage-report/external/ffspart/libflash/blocklevel.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">98</td>
- <td class="headerCovTableEntry">382</td>
- <td class="headerCovTableEntryLo">25.7 %</td>
+ <td class="headerCovTableEntry">83</td>
+ <td class="headerCovTableEntry">367</td>
+ <td class="headerCovTableEntryLo">22.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntry">14</td>
- <td class="headerCovTableEntryLo">57.1 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">11</td>
+ <td class="headerCovTableEntryLo">54.5 %</td>
</tr>
<tr>
<td></td>
@@ -69,10 +69,6 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#355">blocklevel_flashcmp</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#319">blocklevel_get_info</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -113,14 +109,6 @@
<td class="coverFnHi">34</td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#23">ecc_protected</a></td>
- <td class="coverFnHi">34</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#61">reacquire</a></td>
- <td class="coverFnHi">46</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#68">release</a></td>
<td class="coverFnHi">46</td>
</tr>
diff --git a/coverage-report/external/ffspart/libflash/blocklevel.c.func.html b/coverage-report/external/ffspart/libflash/blocklevel.c.func.html
index b93fcb0..3a36528 100644
--- a/coverage-report/external/ffspart/libflash/blocklevel.c.func.html
+++ b/coverage-report/external/ffspart/libflash/blocklevel.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">98</td>
- <td class="headerCovTableEntry">382</td>
- <td class="headerCovTableEntryLo">25.7 %</td>
+ <td class="headerCovTableEntry">83</td>
+ <td class="headerCovTableEntry">367</td>
+ <td class="headerCovTableEntryLo">22.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntry">14</td>
- <td class="headerCovTableEntryLo">57.1 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">11</td>
+ <td class="headerCovTableEntryLo">54.5 %</td>
</tr>
<tr>
<td></td>
@@ -77,10 +77,6 @@
<td class="coverFnHi">12</td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#355">blocklevel_flashcmp</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#319">blocklevel_get_info</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -109,18 +105,10 @@
<td class="coverFnHi">34</td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#23">ecc_protected</a></td>
- <td class="coverFnHi">34</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#643">insert_bl_prot_range</a></td>
<td class="coverFnHi">20</td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#61">reacquire</a></td>
- <td class="coverFnHi">46</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#68">release</a></td>
<td class="coverFnHi">46</td>
</tr>
diff --git a/coverage-report/external/ffspart/libflash/blocklevel.c.gcov.html b/coverage-report/external/ffspart/libflash/blocklevel.c.gcov.html
index 1a74e87..f5451a8 100644
--- a/coverage-report/external/ffspart/libflash/blocklevel.c.gcov.html
+++ b/coverage-report/external/ffspart/libflash/blocklevel.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">98</td>
- <td class="headerCovTableEntry">382</td>
- <td class="headerCovTableEntryLo">25.7 %</td>
+ <td class="headerCovTableEntry">83</td>
+ <td class="headerCovTableEntry">367</td>
+ <td class="headerCovTableEntryLo">22.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntry">14</td>
- <td class="headerCovTableEntryLo">57.1 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">11</td>
+ <td class="headerCovTableEntryLo">54.5 %</td>
</tr>
<tr>
<td></td>
@@ -93,21 +93,21 @@
<a name="22"><span class="lineNum"> 22 </span> : : * 0 - The region is not ECC protected</a>
<a name="23"><span class="lineNum"> 23 </span> : : * -1 - Partially protected</a>
<a name="24"><span class="lineNum"> 24 </span> : : */</a>
-<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 34 : static int ecc_protected(struct blocklevel_device *bl, uint64_t pos, uint64_t len, uint64_t *start)</span></a>
+<a name="25"><span class="lineNum"> 25 </span> : : static int ecc_protected(struct blocklevel_device *bl, uint64_t pos, uint64_t len, uint64_t *start)</a>
<a name="26"><span class="lineNum"> 26 </span> : : {</a>
-<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 34 : int i;</span></a>
+<a name="27"><span class="lineNum"> 27 </span> : : int i;</a>
<a name="28"><span class="lineNum"> 28 </span> : : </a>
<a name="29"><span class="lineNum"> 29 </span> : : /* Length of 0 is nonsensical so add 1 */</a>
-<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 34 : if (len == 0)</span></a>
+<a name="30"><span class="lineNum"> 30 </span> : : if (len == 0)</a>
<a name="31"><span class="lineNum"> 31 </span> : : len = 1;</a>
<a name="32"><span class="lineNum"> 32 </span> : : </a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 92 : for (i = 0; i &lt; bl-&gt;ecc_prot.n_prot; i++) {</span></a>
+<a name="33"><span class="lineNum"> 33 </span> : : for (i = 0; i &lt; bl-&gt;ecc_prot.n_prot; i++) {</a>
<a name="34"><span class="lineNum"> 34 </span> : : /* Fits entirely within the range */</a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 78 : if (bl-&gt;ecc_prot.prot[i].start &lt;= pos &amp;&amp;</span></a>
-<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 58 : bl-&gt;ecc_prot.prot[i].start + bl-&gt;ecc_prot.prot[i].len &gt;= pos + len) {</span></a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 20 : if (start)</span></a>
-<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 20 : *start = bl-&gt;ecc_prot.prot[i].start;</span></a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 20 : return 1;</span></a>
+<a name="35"><span class="lineNum"> 35 </span> : : if (bl-&gt;ecc_prot.prot[i].start &lt;= pos &amp;&amp;</a>
+<a name="36"><span class="lineNum"> 36 </span> : : bl-&gt;ecc_prot.prot[i].start + bl-&gt;ecc_prot.prot[i].len &gt;= pos + len) {</a>
+<a name="37"><span class="lineNum"> 37 </span> : : if (start)</a>
+<a name="38"><span class="lineNum"> 38 </span> : : *start = bl-&gt;ecc_prot.prot[i].start;</a>
+<a name="39"><span class="lineNum"> 39 </span> : : return 1;</a>
<a name="40"><span class="lineNum"> 40 </span> : : }</a>
<a name="41"><span class="lineNum"> 41 </span> : : </a>
<a name="42"><span class="lineNum"> 42 </span> : : /*</a>
@@ -115,12 +115,12 @@
<a name="44"><span class="lineNum"> 44 </span> : : * contiguous regions are sanely ECC protected so a partial fit</a>
<a name="45"><span class="lineNum"> 45 </span> : : * is no good.</a>
<a name="46"><span class="lineNum"> 46 </span> : : */</a>
-<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 58 : if ((bl-&gt;ecc_prot.prot[i].start &gt;= pos &amp;&amp; bl-&gt;ecc_prot.prot[i].start &lt; pos + len) ||</span></a>
-<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 38 : (bl-&gt;ecc_prot.prot[i].start &lt;= pos &amp;&amp;</span></a>
-<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 38 : bl-&gt;ecc_prot.prot[i].start + bl-&gt;ecc_prot.prot[i].len &gt; pos)) {</span></a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineNoCov"> 0 : if (start)</span></a>
-<a name="51"><span class="lineNum"> 51 </span> :<span class="lineNoCov"> 0 : *start = bl-&gt;ecc_prot.prot[i].start;</span></a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
+<a name="47"><span class="lineNum"> 47 </span> : : if ((bl-&gt;ecc_prot.prot[i].start &gt;= pos &amp;&amp; bl-&gt;ecc_prot.prot[i].start &lt; pos + len) ||</a>
+<a name="48"><span class="lineNum"> 48 </span> : : (bl-&gt;ecc_prot.prot[i].start &lt;= pos &amp;&amp;</a>
+<a name="49"><span class="lineNum"> 49 </span> : : bl-&gt;ecc_prot.prot[i].start + bl-&gt;ecc_prot.prot[i].len &gt; pos)) {</a>
+<a name="50"><span class="lineNum"> 50 </span> : : if (start)</a>
+<a name="51"><span class="lineNum"> 51 </span> : : *start = bl-&gt;ecc_prot.prot[i].start;</a>
+<a name="52"><span class="lineNum"> 52 </span> : : return -1;</a>
<a name="53"><span class="lineNum"> 53 </span> : : }</a>
<a name="54"><span class="lineNum"> 54 </span> : : }</a>
<a name="55"><span class="lineNum"> 55 </span> : : return 0;</a>
@@ -133,7 +133,7 @@
<a name="62"><span class="lineNum"> 62 </span> : : </a>
<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 46 : static int reacquire(struct blocklevel_device *bl)</span></a>
<a name="64"><span class="lineNum"> 64 </span> : : {</a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 46 : if (!bl-&gt;keep_alive &amp;&amp; bl-&gt;reacquire)</span></a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : if (!bl-&gt;keep_alive &amp;&amp; bl-&gt;reacquire)</span></a>
<a name="66"><span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : return bl-&gt;reacquire(bl);</span></a>
<a name="67"><span class="lineNum"> 67 </span> : : return 0;</a>
<a name="68"><span class="lineNum"> 68 </span> : : }</a>
@@ -248,7 +248,7 @@
<a name="177"><span class="lineNum"> 177 </span> : : }</a>
<a name="178"><span class="lineNum"> 178 </span> : : </a>
<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 34 : rc = reacquire(bl);</span></a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 34 : if (rc)</span></a>
+<a name="180"><span class="lineNum"> 180 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
<a name="181"><span class="lineNum"> 181 </span> : : return rc;</a>
<a name="182"><span class="lineNum"> 182 </span> : : </a>
<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 34 : rc = bl-&gt;write(bl, pos, buf, len);</span></a>
@@ -379,7 +379,7 @@
<a name="308"><span class="lineNum"> 308 </span> : : }</a>
<a name="309"><span class="lineNum"> 309 </span> : : </a>
<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 12 : rc = reacquire(bl);</span></a>
-<a name="311"><span class="lineNum"> 311 </span> :<span class="lineCov"> 12 : if (rc)</span></a>
+<a name="311"><span class="lineNum"> 311 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
<a name="312"><span class="lineNum"> 312 </span> : : return rc;</a>
<a name="313"><span class="lineNum"> 313 </span> : : </a>
<a name="314"><span class="lineNum"> 314 </span> :<span class="lineCov"> 12 : rc = bl-&gt;erase(bl, pos, len);</span></a>
diff --git a/coverage-report/external/ffspart/libflash/ecc.c.func-sort-c.html b/coverage-report/external/ffspart/libflash/ecc.c.func-sort-c.html
index 85554f6..26fb5b8 100644
--- a/coverage-report/external/ffspart/libflash/ecc.c.func-sort-c.html
+++ b/coverage-report/external/ffspart/libflash/ecc.c.func-sort-c.html
@@ -37,12 +37,12 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryLo">16.7 %</td>
+ <td class="headerCovTableEntry">5</td>
+ <td class="headerCovTableEntryLo">20.0 %</td>
</tr>
<tr>
<td></td>
@@ -73,10 +73,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="ecc.c.gcov.html#129">eccverify</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="ecc.c.gcov.html#205">memcpy_from_ecc</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/ffspart/libflash/ecc.c.func.html b/coverage-report/external/ffspart/libflash/ecc.c.func.html
index c93cdf6..ae18f61 100644
--- a/coverage-report/external/ffspart/libflash/ecc.c.func.html
+++ b/coverage-report/external/ffspart/libflash/ecc.c.func.html
@@ -37,12 +37,12 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryLo">16.7 %</td>
+ <td class="headerCovTableEntry">5</td>
+ <td class="headerCovTableEntryLo">20.0 %</td>
</tr>
<tr>
<td></td>
@@ -73,10 +73,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="ecc.c.gcov.html#129">eccverify</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="ecc.c.gcov.html#205">memcpy_from_ecc</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/ffspart/libflash/ecc.c.gcov.html b/coverage-report/external/ffspart/libflash/ecc.c.gcov.html
index 5211852..096b4bb 100644
--- a/coverage-report/external/ffspart/libflash/ecc.c.gcov.html
+++ b/coverage-report/external/ffspart/libflash/ecc.c.gcov.html
@@ -37,12 +37,12 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryLo">16.7 %</td>
+ <td class="headerCovTableEntry">5</td>
+ <td class="headerCovTableEntryLo">20.0 %</td>
</tr>
<tr>
<td></td>
diff --git a/coverage-report/external/ffspart/libflash/ecc.h.func-sort-c.html b/coverage-report/external/ffspart/libflash/ecc.h.func-sort-c.html
index 1bfa87b..66c2928 100644
--- a/coverage-report/external/ffspart/libflash/ecc.h.func-sort-c.html
+++ b/coverage-report/external/ffspart/libflash/ecc.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/ffspart/libflash/ecc.h.func.html b/coverage-report/external/ffspart/libflash/ecc.h.func.html
index 64bb02d..a165e7f 100644
--- a/coverage-report/external/ffspart/libflash/ecc.h.func.html
+++ b/coverage-report/external/ffspart/libflash/ecc.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/ffspart/libflash/ecc.h.gcov.html b/coverage-report/external/ffspart/libflash/ecc.h.gcov.html
index ec444d4..eaa1ec9 100644
--- a/coverage-report/external/ffspart/libflash/ecc.h.gcov.html
+++ b/coverage-report/external/ffspart/libflash/ecc.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/ffspart/libflash/file.c.func-sort-c.html b/coverage-report/external/ffspart/libflash/file.c.func-sort-c.html
index ff2312a..4ecce34 100644
--- a/coverage-report/external/ffspart/libflash/file.c.func-sort-c.html
+++ b/coverage-report/external/ffspart/libflash/file.c.func-sort-c.html
@@ -32,17 +32,17 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">71</td>
- <td class="headerCovTableEntry">184</td>
- <td class="headerCovTableEntryLo">38.6 %</td>
+ <td class="headerCovTableEntry">163</td>
+ <td class="headerCovTableEntryLo">43.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntryLo">46.2 %</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryLo">50.0 %</td>
</tr>
<tr>
<td></td>
@@ -85,10 +85,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="file.c.gcov.html#177">get_info_name</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="file.c.gcov.html#122">mtd_erase</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/ffspart/libflash/file.c.func.html b/coverage-report/external/ffspart/libflash/file.c.func.html
index 21dfdd0..2503710 100644
--- a/coverage-report/external/ffspart/libflash/file.c.func.html
+++ b/coverage-report/external/ffspart/libflash/file.c.func.html
@@ -32,17 +32,17 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">71</td>
- <td class="headerCovTableEntry">184</td>
- <td class="headerCovTableEntryLo">38.6 %</td>
+ <td class="headerCovTableEntry">163</td>
+ <td class="headerCovTableEntryLo">43.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntryLo">46.2 %</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryLo">50.0 %</td>
</tr>
<tr>
<td></td>
@@ -109,10 +109,6 @@
<td class="coverFnHi">58</td>
</tr>
<tr>
- <td class="coverFn"><a href="file.c.gcov.html#177">get_info_name</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="file.c.gcov.html#122">mtd_erase</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/ffspart/libflash/file.c.gcov.html b/coverage-report/external/ffspart/libflash/file.c.gcov.html
index ee2cbf5..580c9c1 100644
--- a/coverage-report/external/ffspart/libflash/file.c.gcov.html
+++ b/coverage-report/external/ffspart/libflash/file.c.gcov.html
@@ -32,17 +32,17 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">71</td>
- <td class="headerCovTableEntry">184</td>
- <td class="headerCovTableEntryLo">38.6 %</td>
+ <td class="headerCovTableEntry">163</td>
+ <td class="headerCovTableEntryLo">43.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntryLo">46.2 %</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryLo">50.0 %</td>
</tr>
<tr>
<td></td>
@@ -247,38 +247,38 @@
<a name="176"><span class="lineNum"> 176 </span> : : return 0;</a>
<a name="177"><span class="lineNum"> 177 </span> : : }</a>
<a name="178"><span class="lineNum"> 178 </span> : : </a>
-<a name="179"><span class="lineNum"> 179 </span> :<span class="lineNoCov"> 0 : static int get_info_name(struct file_data *file_data, char **name)</span></a>
+<a name="179"><span class="lineNum"> 179 </span> : : static int get_info_name(struct file_data *file_data, char **name)</a>
<a name="180"><span class="lineNum"> 180 </span> : : {</a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : char *path, *lpath;</span></a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineNoCov"> 0 : int len;</span></a>
-<a name="183"><span class="lineNum"> 183 </span> :<span class="lineNoCov"> 0 : struct stat st;</span></a>
+<a name="181"><span class="lineNum"> 181 </span> : : char *path, *lpath;</a>
+<a name="182"><span class="lineNum"> 182 </span> : : int len;</a>
+<a name="183"><span class="lineNum"> 183 </span> : : struct stat st;</a>
<a name="184"><span class="lineNum"> 184 </span> : : </a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : if (asprintf(&amp;path, &quot;/proc/self/fd/%d&quot;, file_data-&gt;fd) == -1)</span></a>
+<a name="185"><span class="lineNum"> 185 </span> : : if (asprintf(&amp;path, &quot;/proc/self/fd/%d&quot;, file_data-&gt;fd) == -1)</a>
<a name="186"><span class="lineNum"> 186 </span> : : return FLASH_ERR_MALLOC_FAILED;</a>
<a name="187"><span class="lineNum"> 187 </span> : : </a>
-<a name="188"><span class="lineNum"> 188 </span> :<span class="lineNoCov"> 0 : if (lstat(path, &amp;st)) {</span></a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : free(path);</span></a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : return FLASH_ERR_PARM_ERROR;</span></a>
+<a name="188"><span class="lineNum"> 188 </span> : : if (lstat(path, &amp;st)) {</a>
+<a name="189"><span class="lineNum"> 189 </span> : : free(path);</a>
+<a name="190"><span class="lineNum"> 190 </span> : : return FLASH_ERR_PARM_ERROR;</a>
<a name="191"><span class="lineNum"> 191 </span> : : }</a>
<a name="192"><span class="lineNum"> 192 </span> : : </a>
-<a name="193"><span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : lpath = malloc(st.st_size + 1);</span></a>
-<a name="194"><span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : if (!lpath) {</span></a>
-<a name="195"><span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : free(path);</span></a>
-<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : return FLASH_ERR_MALLOC_FAILED;</span></a>
+<a name="193"><span class="lineNum"> 193 </span> : : lpath = malloc(st.st_size + 1);</a>
+<a name="194"><span class="lineNum"> 194 </span> : : if (!lpath) {</a>
+<a name="195"><span class="lineNum"> 195 </span> : : free(path);</a>
+<a name="196"><span class="lineNum"> 196 </span> : : return FLASH_ERR_MALLOC_FAILED;</a>
<a name="197"><span class="lineNum"> 197 </span> : : }</a>
<a name="198"><span class="lineNum"> 198 </span> : : </a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : len = readlink(path, lpath, st.st_size +1);</span></a>
-<a name="200"><span class="lineNum"> 200 </span> :<span class="lineNoCov"> 0 : if (len == -1) {</span></a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : free(path);</span></a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : free(lpath);</span></a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : return FLASH_ERR_PARM_ERROR;</span></a>
+<a name="199"><span class="lineNum"> 199 </span> : : len = readlink(path, lpath, st.st_size +1);</a>
+<a name="200"><span class="lineNum"> 200 </span> : : if (len == -1) {</a>
+<a name="201"><span class="lineNum"> 201 </span> : : free(path);</a>
+<a name="202"><span class="lineNum"> 202 </span> : : free(lpath);</a>
+<a name="203"><span class="lineNum"> 203 </span> : : return FLASH_ERR_PARM_ERROR;</a>
<a name="204"><span class="lineNum"> 204 </span> : : }</a>
-<a name="205"><span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : lpath[len] = '\0';</span></a>
+<a name="205"><span class="lineNum"> 205 </span> : : lpath[len] = '\0';</a>
<a name="206"><span class="lineNum"> 206 </span> : : </a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : *name = lpath;</span></a>
+<a name="207"><span class="lineNum"> 207 </span> : : *name = lpath;</a>
<a name="208"><span class="lineNum"> 208 </span> : : </a>
-<a name="209"><span class="lineNum"> 209 </span> :<span class="lineNoCov"> 0 : free(path);</span></a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
+<a name="209"><span class="lineNum"> 209 </span> : : free(path);</a>
+<a name="210"><span class="lineNum"> 210 </span> : : return 0;</a>
<a name="211"><span class="lineNum"> 211 </span> : : }</a>
<a name="212"><span class="lineNum"> 212 </span> : : </a>
<a name="213"><span class="lineNum"> 213 </span> : : </a>
diff --git a/coverage-report/external/ffspart/libflash/index-sort-b.html b/coverage-report/external/ffspart/libflash/index-sort-b.html
index 2a3b234..3b631d8 100644
--- a/coverage-report/external/ffspart/libflash/index-sort-b.html
+++ b/coverage-report/external/ffspart/libflash/index-sort-b.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">385</td>
- <td class="headerCovTableEntry">1530</td>
- <td class="headerCovTableEntryLo">25.2 %</td>
+ <td class="headerCovTableEntry">371</td>
+ <td class="headerCovTableEntry">1445</td>
+ <td class="headerCovTableEntryLo">25.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">30</td>
- <td class="headerCovTableEntry">85</td>
- <td class="headerCovTableEntryLo">35.3 %</td>
+ <td class="headerCovTableEntry">26</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryLo">36.1 %</td>
</tr>
<tr>
<td></td>
@@ -84,72 +84,72 @@
<tr>
<td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=39 height=10 alt="38.6%"><img src="../../../snow.png" width=61 height=10 alt="38.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=44 height=10 alt="43.6%"><img src="../../../snow.png" width=56 height=10 alt="43.6%"></td></tr></table>
</td>
- <td class="coverPerLo">38.6&nbsp;%</td>
- <td class="coverNumLo">71 / 184</td>
- <td class="coverPerLo">46.2&nbsp;%</td>
- <td class="coverNumLo">6 / 13</td>
+ <td class="coverPerLo">43.6&nbsp;%</td>
+ <td class="coverNumLo">71 / 163</td>
+ <td class="coverPerLo">50.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libflash.c.gcov.html">libflash.c</a></td>
+ <td class="coverFile"><a href="ecc.h.gcov.html">ecc.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 419</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 24</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">8 / 8</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ecc.c.gcov.html">ecc.c</a></td>
+ <td class="coverFile"><a href="libffs.c.gcov.html">libffs.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=14 height=10 alt="14.2%"><img src="../../../snow.png" width=86 height=10 alt="14.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=47 height=10 alt="47.3%"><img src="../../../snow.png" width=53 height=10 alt="47.3%"></td></tr></table>
</td>
- <td class="coverPerLo">14.2&nbsp;%</td>
- <td class="coverNumLo">15 / 106</td>
- <td class="coverPerLo">16.7&nbsp;%</td>
- <td class="coverNumLo">1 / 6</td>
+ <td class="coverPerLo">47.3&nbsp;%</td>
+ <td class="coverNumLo">194 / 410</td>
+ <td class="coverPerLo">54.2&nbsp;%</td>
+ <td class="coverNumLo">13 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ecc.h.gcov.html">ecc.h</a></td>
+ <td class="coverFile"><a href="ecc.c.gcov.html">ecc.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=14 height=10 alt="14.2%"><img src="../../../snow.png" width=86 height=10 alt="14.2%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">8 / 8</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerLo">14.2&nbsp;%</td>
+ <td class="coverNumLo">15 / 106</td>
+ <td class="coverPerLo">20.0&nbsp;%</td>
+ <td class="coverNumLo">1 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
+ <td class="coverFile"><a href="libflash.c.gcov.html">libflash.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=26 height=10 alt="25.7%"><img src="../../../snow.png" width=74 height=10 alt="25.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
- <td class="coverPerLo">25.7&nbsp;%</td>
- <td class="coverNumLo">98 / 382</td>
- <td class="coverPerLo">57.1&nbsp;%</td>
- <td class="coverNumLo">8 / 14</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 391</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libffs.c.gcov.html">libffs.c</a></td>
+ <td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=45 height=10 alt="44.8%"><img src="../../../snow.png" width=55 height=10 alt="44.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=23 height=10 alt="22.6%"><img src="../../../snow.png" width=77 height=10 alt="22.6%"></td></tr></table>
</td>
- <td class="coverPerLo">44.8&nbsp;%</td>
- <td class="coverNumLo">193 / 431</td>
- <td class="coverPerLo">53.6&nbsp;%</td>
- <td class="coverNumLo">15 / 28</td>
+ <td class="coverPerLo">22.6&nbsp;%</td>
+ <td class="coverNumLo">83 / 367</td>
+ <td class="coverPerLo">54.5&nbsp;%</td>
+ <td class="coverNumLo">6 / 11</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/ffspart/libflash/index-sort-f.html b/coverage-report/external/ffspart/libflash/index-sort-f.html
index c7c2df9..879fd7f 100644
--- a/coverage-report/external/ffspart/libflash/index-sort-f.html
+++ b/coverage-report/external/ffspart/libflash/index-sort-f.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">385</td>
- <td class="headerCovTableEntry">1530</td>
- <td class="headerCovTableEntryLo">25.2 %</td>
+ <td class="headerCovTableEntry">371</td>
+ <td class="headerCovTableEntry">1445</td>
+ <td class="headerCovTableEntryLo">25.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">30</td>
- <td class="headerCovTableEntry">85</td>
- <td class="headerCovTableEntryLo">35.3 %</td>
+ <td class="headerCovTableEntry">26</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryLo">36.1 %</td>
</tr>
<tr>
<td></td>
@@ -87,9 +87,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 419</td>
+ <td class="coverNumLo">0 / 391</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 24</td>
+ <td class="coverNumLo">0 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -100,44 +100,44 @@
</td>
<td class="coverPerLo">14.2&nbsp;%</td>
<td class="coverNumLo">15 / 106</td>
- <td class="coverPerLo">16.7&nbsp;%</td>
- <td class="coverNumLo">1 / 6</td>
+ <td class="coverPerLo">20.0&nbsp;%</td>
+ <td class="coverNumLo">1 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=39 height=10 alt="38.6%"><img src="../../../snow.png" width=61 height=10 alt="38.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=44 height=10 alt="43.6%"><img src="../../../snow.png" width=56 height=10 alt="43.6%"></td></tr></table>
</td>
- <td class="coverPerLo">38.6&nbsp;%</td>
- <td class="coverNumLo">71 / 184</td>
- <td class="coverPerLo">46.2&nbsp;%</td>
- <td class="coverNumLo">6 / 13</td>
+ <td class="coverPerLo">43.6&nbsp;%</td>
+ <td class="coverNumLo">71 / 163</td>
+ <td class="coverPerLo">50.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libffs.c.gcov.html">libffs.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=45 height=10 alt="44.8%"><img src="../../../snow.png" width=55 height=10 alt="44.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=47 height=10 alt="47.3%"><img src="../../../snow.png" width=53 height=10 alt="47.3%"></td></tr></table>
</td>
- <td class="coverPerLo">44.8&nbsp;%</td>
- <td class="coverNumLo">193 / 431</td>
- <td class="coverPerLo">53.6&nbsp;%</td>
- <td class="coverNumLo">15 / 28</td>
+ <td class="coverPerLo">47.3&nbsp;%</td>
+ <td class="coverNumLo">194 / 410</td>
+ <td class="coverPerLo">54.2&nbsp;%</td>
+ <td class="coverNumLo">13 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=26 height=10 alt="25.7%"><img src="../../../snow.png" width=74 height=10 alt="25.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=23 height=10 alt="22.6%"><img src="../../../snow.png" width=77 height=10 alt="22.6%"></td></tr></table>
</td>
- <td class="coverPerLo">25.7&nbsp;%</td>
- <td class="coverNumLo">98 / 382</td>
- <td class="coverPerLo">57.1&nbsp;%</td>
- <td class="coverNumLo">8 / 14</td>
+ <td class="coverPerLo">22.6&nbsp;%</td>
+ <td class="coverNumLo">83 / 367</td>
+ <td class="coverPerLo">54.5&nbsp;%</td>
+ <td class="coverNumLo">6 / 11</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/ffspart/libflash/index-sort-l.html b/coverage-report/external/ffspart/libflash/index-sort-l.html
index 5e2db54..7307adc 100644
--- a/coverage-report/external/ffspart/libflash/index-sort-l.html
+++ b/coverage-report/external/ffspart/libflash/index-sort-l.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">385</td>
- <td class="headerCovTableEntry">1530</td>
- <td class="headerCovTableEntryLo">25.2 %</td>
+ <td class="headerCovTableEntry">371</td>
+ <td class="headerCovTableEntry">1445</td>
+ <td class="headerCovTableEntryLo">25.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">30</td>
- <td class="headerCovTableEntry">85</td>
- <td class="headerCovTableEntryLo">35.3 %</td>
+ <td class="headerCovTableEntry">26</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryLo">36.1 %</td>
</tr>
<tr>
<td></td>
@@ -87,9 +87,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 419</td>
+ <td class="coverNumLo">0 / 391</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 24</td>
+ <td class="coverNumLo">0 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -100,44 +100,44 @@
</td>
<td class="coverPerLo">14.2&nbsp;%</td>
<td class="coverNumLo">15 / 106</td>
- <td class="coverPerLo">16.7&nbsp;%</td>
- <td class="coverNumLo">1 / 6</td>
+ <td class="coverPerLo">20.0&nbsp;%</td>
+ <td class="coverNumLo">1 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=26 height=10 alt="25.7%"><img src="../../../snow.png" width=74 height=10 alt="25.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=23 height=10 alt="22.6%"><img src="../../../snow.png" width=77 height=10 alt="22.6%"></td></tr></table>
</td>
- <td class="coverPerLo">25.7&nbsp;%</td>
- <td class="coverNumLo">98 / 382</td>
- <td class="coverPerLo">57.1&nbsp;%</td>
- <td class="coverNumLo">8 / 14</td>
+ <td class="coverPerLo">22.6&nbsp;%</td>
+ <td class="coverNumLo">83 / 367</td>
+ <td class="coverPerLo">54.5&nbsp;%</td>
+ <td class="coverNumLo">6 / 11</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=39 height=10 alt="38.6%"><img src="../../../snow.png" width=61 height=10 alt="38.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=44 height=10 alt="43.6%"><img src="../../../snow.png" width=56 height=10 alt="43.6%"></td></tr></table>
</td>
- <td class="coverPerLo">38.6&nbsp;%</td>
- <td class="coverNumLo">71 / 184</td>
- <td class="coverPerLo">46.2&nbsp;%</td>
- <td class="coverNumLo">6 / 13</td>
+ <td class="coverPerLo">43.6&nbsp;%</td>
+ <td class="coverNumLo">71 / 163</td>
+ <td class="coverPerLo">50.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libffs.c.gcov.html">libffs.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=45 height=10 alt="44.8%"><img src="../../../snow.png" width=55 height=10 alt="44.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=47 height=10 alt="47.3%"><img src="../../../snow.png" width=53 height=10 alt="47.3%"></td></tr></table>
</td>
- <td class="coverPerLo">44.8&nbsp;%</td>
- <td class="coverNumLo">193 / 431</td>
- <td class="coverPerLo">53.6&nbsp;%</td>
- <td class="coverNumLo">15 / 28</td>
+ <td class="coverPerLo">47.3&nbsp;%</td>
+ <td class="coverNumLo">194 / 410</td>
+ <td class="coverPerLo">54.2&nbsp;%</td>
+ <td class="coverNumLo">13 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/ffspart/libflash/index.html b/coverage-report/external/ffspart/libflash/index.html
index 1ccf329..42aefae 100644
--- a/coverage-report/external/ffspart/libflash/index.html
+++ b/coverage-report/external/ffspart/libflash/index.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">385</td>
- <td class="headerCovTableEntry">1530</td>
- <td class="headerCovTableEntryLo">25.2 %</td>
+ <td class="headerCovTableEntry">371</td>
+ <td class="headerCovTableEntry">1445</td>
+ <td class="headerCovTableEntryLo">25.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">30</td>
- <td class="headerCovTableEntry">85</td>
- <td class="headerCovTableEntryLo">35.3 %</td>
+ <td class="headerCovTableEntry">26</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryLo">36.1 %</td>
</tr>
<tr>
<td></td>
@@ -84,12 +84,12 @@
<tr>
<td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=26 height=10 alt="25.7%"><img src="../../../snow.png" width=74 height=10 alt="25.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=23 height=10 alt="22.6%"><img src="../../../snow.png" width=77 height=10 alt="22.6%"></td></tr></table>
</td>
- <td class="coverPerLo">25.7&nbsp;%</td>
- <td class="coverNumLo">98 / 382</td>
- <td class="coverPerLo">57.1&nbsp;%</td>
- <td class="coverNumLo">8 / 14</td>
+ <td class="coverPerLo">22.6&nbsp;%</td>
+ <td class="coverNumLo">83 / 367</td>
+ <td class="coverPerLo">54.5&nbsp;%</td>
+ <td class="coverNumLo">6 / 11</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -100,8 +100,8 @@
</td>
<td class="coverPerLo">14.2&nbsp;%</td>
<td class="coverNumLo">15 / 106</td>
- <td class="coverPerLo">16.7&nbsp;%</td>
- <td class="coverNumLo">1 / 6</td>
+ <td class="coverPerLo">20.0&nbsp;%</td>
+ <td class="coverNumLo">1 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -120,24 +120,24 @@
<tr>
<td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=39 height=10 alt="38.6%"><img src="../../../snow.png" width=61 height=10 alt="38.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=44 height=10 alt="43.6%"><img src="../../../snow.png" width=56 height=10 alt="43.6%"></td></tr></table>
</td>
- <td class="coverPerLo">38.6&nbsp;%</td>
- <td class="coverNumLo">71 / 184</td>
- <td class="coverPerLo">46.2&nbsp;%</td>
- <td class="coverNumLo">6 / 13</td>
+ <td class="coverPerLo">43.6&nbsp;%</td>
+ <td class="coverNumLo">71 / 163</td>
+ <td class="coverPerLo">50.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libffs.c.gcov.html">libffs.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=45 height=10 alt="44.8%"><img src="../../../snow.png" width=55 height=10 alt="44.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=47 height=10 alt="47.3%"><img src="../../../snow.png" width=53 height=10 alt="47.3%"></td></tr></table>
</td>
- <td class="coverPerLo">44.8&nbsp;%</td>
- <td class="coverNumLo">193 / 431</td>
- <td class="coverPerLo">53.6&nbsp;%</td>
- <td class="coverNumLo">15 / 28</td>
+ <td class="coverPerLo">47.3&nbsp;%</td>
+ <td class="coverNumLo">194 / 410</td>
+ <td class="coverPerLo">54.2&nbsp;%</td>
+ <td class="coverNumLo">13 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -147,9 +147,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 419</td>
+ <td class="coverNumLo">0 / 391</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 24</td>
+ <td class="coverNumLo">0 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/ffspart/libflash/libffs.c.func-sort-c.html b/coverage-report/external/ffspart/libflash/libffs.c.func-sort-c.html
index 9e8471b..b008ab4 100644
--- a/coverage-report/external/ffspart/libflash/libffs.c.func-sort-c.html
+++ b/coverage-report/external/ffspart/libflash/libffs.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">193</td>
- <td class="headerCovTableEntry">431</td>
- <td class="headerCovTableEntryLo">44.8 %</td>
+ <td class="headerCovTableEntry">194</td>
+ <td class="headerCovTableEntry">410</td>
+ <td class="headerCovTableEntryLo">47.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">15</td>
- <td class="headerCovTableEntry">28</td>
- <td class="headerCovTableEntryLo">53.6 %</td>
+ <td class="headerCovTableEntry">13</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntryLo">54.2 %</td>
</tr>
<tr>
<td></td>
@@ -81,18 +81,10 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#139">ffs_entry_to_cpu</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#719">ffs_entry_user_get</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#92">ffs_entry_user_to_cpu</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#160">ffs_entry_user_to_string</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -133,11 +125,11 @@
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#51">ffs_num_entries</a></td>
- <td class="coverFnHi">6</td>
+ <td class="coverFn"><a href="libffs.c.gcov.html#547">ffs_entry_add</a></td>
+ <td class="coverFnHi">28</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#547">ffs_entry_add</a></td>
+ <td class="coverFn"><a href="libffs.c.gcov.html#274">ffs_entry_put</a></td>
<td class="coverFnHi">28</td>
</tr>
<tr>
@@ -161,10 +153,6 @@
<td class="coverFnHi">34</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#81">ffs_entry_user_to_flash</a></td>
- <td class="coverFnHi">34</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#430">__hdr_free</a></td>
<td class="coverFnHi">60</td>
</tr>
@@ -173,10 +161,6 @@
<td class="coverFnHi">60</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#274">ffs_entry_put</a></td>
- <td class="coverFnHi">62</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#288">has_ecc</a></td>
<td class="coverFnHi">84</td>
</tr>
diff --git a/coverage-report/external/ffspart/libflash/libffs.c.func.html b/coverage-report/external/ffspart/libflash/libffs.c.func.html
index 2ba4201..4d657a2 100644
--- a/coverage-report/external/ffspart/libflash/libffs.c.func.html
+++ b/coverage-report/external/ffspart/libflash/libffs.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">193</td>
- <td class="headerCovTableEntry">431</td>
- <td class="headerCovTableEntryLo">44.8 %</td>
+ <td class="headerCovTableEntry">194</td>
+ <td class="headerCovTableEntry">410</td>
+ <td class="headerCovTableEntryLo">47.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">15</td>
- <td class="headerCovTableEntry">28</td>
- <td class="headerCovTableEntryLo">53.6 %</td>
+ <td class="headerCovTableEntry">13</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntryLo">54.2 %</td>
</tr>
<tr>
<td></td>
@@ -94,17 +94,13 @@
</tr>
<tr>
<td class="coverFn"><a href="libffs.c.gcov.html#274">ffs_entry_put</a></td>
- <td class="coverFnHi">62</td>
+ <td class="coverFnHi">28</td>
</tr>
<tr>
<td class="coverFn"><a href="libffs.c.gcov.html#750">ffs_entry_set_act_size</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#139">ffs_entry_to_cpu</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#103">ffs_entry_to_flash</a></td>
<td class="coverFnHi">34</td>
</tr>
@@ -117,14 +113,6 @@
<td class="coverFnHi">28</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#92">ffs_entry_user_to_cpu</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#81">ffs_entry_user_to_flash</a></td>
- <td class="coverFnHi">34</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#160">ffs_entry_user_to_string</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -157,10 +145,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#51">ffs_num_entries</a></td>
- <td class="coverFnHi">6</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#477">ffs_part_info</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/ffspart/libflash/libffs.c.gcov.html b/coverage-report/external/ffspart/libflash/libffs.c.gcov.html
index 8909a72..09bb81f 100644
--- a/coverage-report/external/ffspart/libflash/libffs.c.gcov.html
+++ b/coverage-report/external/ffspart/libflash/libffs.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">193</td>
- <td class="headerCovTableEntry">431</td>
- <td class="headerCovTableEntryLo">44.8 %</td>
+ <td class="headerCovTableEntry">194</td>
+ <td class="headerCovTableEntry">410</td>
+ <td class="headerCovTableEntryLo">47.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">15</td>
- <td class="headerCovTableEntry">28</td>
- <td class="headerCovTableEntryLo">53.6 %</td>
+ <td class="headerCovTableEntry">13</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntryLo">54.2 %</td>
</tr>
<tr>
<td></td>
@@ -96,11 +96,11 @@
<a name="25"><span class="lineNum"> 25 </span> : : struct blocklevel_device *bl;</a>
<a name="26"><span class="lineNum"> 26 </span> : : };</a>
<a name="27"><span class="lineNum"> 27 </span> : : </a>
-<a name="28"><span class="lineNum"> 28 </span> :<span class="lineNoCov"> 0 : static uint32_t ffs_checksum(void* data, size_t size)</span></a>
+<a name="28"><span class="lineNum"> 28 </span> : : static uint32_t ffs_checksum(void* data, size_t size)</a>
<a name="29"><span class="lineNum"> 29 </span> : : {</a>
-<a name="30"><span class="lineNum"> 30 </span> :<span class="lineNoCov"> 0 : uint32_t i, csum = 0;</span></a>
+<a name="30"><span class="lineNum"> 30 </span> : : uint32_t i, csum = 0;</a>
<a name="31"><span class="lineNum"> 31 </span> : : </a>
-<a name="32"><span class="lineNum"> 32 </span> :<span class="lineNoCov"> 0 : for (i = csum = 0; i &lt; (size/4); i++)</span></a>
+<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 2360 : for (i = csum = 0; i &lt; (size/4); i++)</span></a>
<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 1160 : csum ^= ((uint32_t *)data)[i];</span></a>
<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 40 : return csum;</span></a>
<a name="35"><span class="lineNum"> 35 </span> : : }</a>
@@ -162,15 +162,15 @@
<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 34 : return 0;</span></a>
<a name="92"><span class="lineNum"> 92 </span> : : }</a>
<a name="93"><span class="lineNum"> 93 </span> : : </a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : static int ffs_entry_user_to_cpu(struct ffs_hdr *hdr __unused,</span></a>
+<a name="94"><span class="lineNum"> 94 </span> : : static int ffs_entry_user_to_cpu(struct ffs_hdr *hdr __unused,</a>
<a name="95"><span class="lineNum"> 95 </span> : : struct ffs_entry_user *dst, struct __ffs_entry_user *src)</a>
<a name="96"><span class="lineNum"> 96 </span> : : {</a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : memset(dst, 0, sizeof(struct ffs_entry_user));</span></a>
-<a name="98"><span class="lineNum"> 98 </span> :<span class="lineNoCov"> 0 : dst-&gt;datainteg = be16_to_cpu(src-&gt;datainteg);</span></a>
-<a name="99"><span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : dst-&gt;vercheck = src-&gt;vercheck;</span></a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : dst-&gt;miscflags = src-&gt;miscflags;</span></a>
+<a name="97"><span class="lineNum"> 97 </span> : : memset(dst, 0, sizeof(struct ffs_entry_user));</a>
+<a name="98"><span class="lineNum"> 98 </span> : : dst-&gt;datainteg = be16_to_cpu(src-&gt;datainteg);</a>
+<a name="99"><span class="lineNum"> 99 </span> : : dst-&gt;vercheck = src-&gt;vercheck;</a>
+<a name="100"><span class="lineNum"> 100 </span> : : dst-&gt;miscflags = src-&gt;miscflags;</a>
<a name="101"><span class="lineNum"> 101 </span> : : </a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
+<a name="102"><span class="lineNum"> 102 </span> : : return 0;</a>
<a name="103"><span class="lineNum"> 103 </span> : : }</a>
<a name="104"><span class="lineNum"> 104 </span> : : </a>
<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 34 : static int ffs_entry_to_flash(struct ffs_hdr *hdr,</span></a>
@@ -209,25 +209,25 @@
<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 34 : return rc;</span></a>
<a name="139"><span class="lineNum"> 139 </span> : : }</a>
<a name="140"><span class="lineNum"> 140 </span> : : </a>
-<a name="141"><span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : static int ffs_entry_to_cpu(struct ffs_hdr *hdr,</span></a>
+<a name="141"><span class="lineNum"> 141 </span> : : static int ffs_entry_to_cpu(struct ffs_hdr *hdr,</a>
<a name="142"><span class="lineNum"> 142 </span> : : struct ffs_entry *dst, struct __ffs_entry *src)</a>
<a name="143"><span class="lineNum"> 143 </span> : : {</a>
-<a name="144"><span class="lineNum"> 144 </span> :<span class="lineNoCov"> 0 : int rc;</span></a>
+<a name="144"><span class="lineNum"> 144 </span> : : int rc;</a>
<a name="145"><span class="lineNum"> 145 </span> : : </a>
-<a name="146"><span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : if (ffs_entry_checksum(src) != 0)</span></a>
+<a name="146"><span class="lineNum"> 146 </span> : : if (ffs_entry_checksum(src) != 0)</a>
<a name="147"><span class="lineNum"> 147 </span> : : return FFS_ERR_BAD_CKSUM;</a>
<a name="148"><span class="lineNum"> 148 </span> : : </a>
-<a name="149"><span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : memcpy(dst-&gt;name, src-&gt;name, sizeof(dst-&gt;name));</span></a>
-<a name="150"><span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : dst-&gt;name[FFS_PART_NAME_MAX] = '\0';</span></a>
-<a name="151"><span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : dst-&gt;base = be32_to_cpu(src-&gt;base) * hdr-&gt;block_size;</span></a>
-<a name="152"><span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : dst-&gt;size = be32_to_cpu(src-&gt;size) * hdr-&gt;block_size;</span></a>
-<a name="153"><span class="lineNum"> 153 </span> :<span class="lineNoCov"> 0 : dst-&gt;actual = be32_to_cpu(src-&gt;actual);</span></a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : dst-&gt;pid = be32_to_cpu(src-&gt;pid);</span></a>
-<a name="155"><span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : dst-&gt;type = be32_to_cpu(src-&gt;type); /* TODO: Check that it is valid? */</span></a>
-<a name="156"><span class="lineNum"> 156 </span> :<span class="lineNoCov"> 0 : dst-&gt;flags = be32_to_cpu(src-&gt;flags);</span></a>
-<a name="157"><span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : rc = ffs_entry_user_to_cpu(hdr, &amp;dst-&gt;user, &amp;src-&gt;user);</span></a>
+<a name="149"><span class="lineNum"> 149 </span> : : memcpy(dst-&gt;name, src-&gt;name, sizeof(dst-&gt;name));</a>
+<a name="150"><span class="lineNum"> 150 </span> : : dst-&gt;name[FFS_PART_NAME_MAX] = '\0';</a>
+<a name="151"><span class="lineNum"> 151 </span> : : dst-&gt;base = be32_to_cpu(src-&gt;base) * hdr-&gt;block_size;</a>
+<a name="152"><span class="lineNum"> 152 </span> : : dst-&gt;size = be32_to_cpu(src-&gt;size) * hdr-&gt;block_size;</a>
+<a name="153"><span class="lineNum"> 153 </span> : : dst-&gt;actual = be32_to_cpu(src-&gt;actual);</a>
+<a name="154"><span class="lineNum"> 154 </span> : : dst-&gt;pid = be32_to_cpu(src-&gt;pid);</a>
+<a name="155"><span class="lineNum"> 155 </span> : : dst-&gt;type = be32_to_cpu(src-&gt;type); /* TODO: Check that it is valid? */</a>
+<a name="156"><span class="lineNum"> 156 </span> : : dst-&gt;flags = be32_to_cpu(src-&gt;flags);</a>
+<a name="157"><span class="lineNum"> 157 </span> : : rc = ffs_entry_user_to_cpu(hdr, &amp;dst-&gt;user, &amp;src-&gt;user);</a>
<a name="158"><span class="lineNum"> 158 </span> : : </a>
-<a name="159"><span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
+<a name="159"><span class="lineNum"> 159 </span> : : return rc;</a>
<a name="160"><span class="lineNum"> 160 </span> : : }</a>
<a name="161"><span class="lineNum"> 161 </span> : : </a>
<a name="162"><span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : char *ffs_entry_user_to_string(struct ffs_entry_user *user)</span></a>
@@ -346,7 +346,7 @@
<a name="275"><span class="lineNum"> 275 </span> : : </a>
<a name="276"><span class="lineNum"> 276 </span> :<span class="lineCov"> 62 : struct ffs_entry *ffs_entry_put(struct ffs_entry *ent)</span></a>
<a name="277"><span class="lineNum"> 277 </span> : : {</a>
-<a name="278"><span class="lineNum"> 278 </span> :<span class="lineCov"> 62 : if (!ent)</span></a>
+<a name="278"><span class="lineNum"> 278 </span> :<span class="lineCov"> 28 : if (!ent)</span></a>
<a name="279"><span class="lineNum"> 279 </span> : : return NULL;</a>
<a name="280"><span class="lineNum"> 280 </span> : : </a>
<a name="281"><span class="lineNum"> 281 </span> :<span class="lineCov"> 62 : ent-&gt;ref--;</span></a>
@@ -508,7 +508,7 @@
<a name="437"><span class="lineNum"> 437 </span> : : return;</a>
<a name="438"><span class="lineNum"> 438 </span> : : </a>
<a name="439"><span class="lineNum"> 439 </span> :<span class="lineCov"> 40 : for (i = 0; i &lt; hdr-&gt;count; i++)</span></a>
-<a name="440"><span class="lineNum"> 440 </span> :<span class="lineCov"> 34 : ffs_entry_put(hdr-&gt;entries[i]);</span></a>
+<a name="440"><span class="lineNum"> 440 </span> :<span class="lineCov"> 68 : ffs_entry_put(hdr-&gt;entries[i]);</span></a>
<a name="441"><span class="lineNum"> 441 </span> :<span class="lineCov"> 6 : free(hdr-&gt;entries);</span></a>
<a name="442"><span class="lineNum"> 442 </span> : : }</a>
<a name="443"><span class="lineNum"> 443 </span> : : </a>
diff --git a/coverage-report/external/ffspart/libflash/libflash.c.func-sort-c.html b/coverage-report/external/ffspart/libflash/libflash.c.func-sort-c.html
index 857d557..a29530c 100644
--- a/coverage-report/external/ffspart/libflash/libflash.c.func-sort-c.html
+++ b/coverage-report/external/ffspart/libflash/libflash.c.func-sort-c.html
@@ -32,16 +32,16 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">419</td>
+ <td class="headerCovTableEntry">391</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">20</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
@@ -73,14 +73,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#183">fl_get_best_erase</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#55">fl_micron_status</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#50">fl_read_stat</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -89,10 +81,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#293">fl_wpage</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#87">fl_wren</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -145,10 +133,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#440">flash_smart_comp</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#465">flash_smart_write</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/ffspart/libflash/libflash.c.func.html b/coverage-report/external/ffspart/libflash/libflash.c.func.html
index 537d9eb..11ec613 100644
--- a/coverage-report/external/ffspart/libflash/libflash.c.func.html
+++ b/coverage-report/external/ffspart/libflash/libflash.c.func.html
@@ -32,16 +32,16 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">419</td>
+ <td class="headerCovTableEntry">391</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">20</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
@@ -73,14 +73,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#183">fl_get_best_erase</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#55">fl_micron_status</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#50">fl_read_stat</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -89,10 +81,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#293">fl_wpage</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#87">fl_wren</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -145,10 +133,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#440">flash_smart_comp</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#465">flash_smart_write</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/ffspart/libflash/libflash.c.gcov.html b/coverage-report/external/ffspart/libflash/libflash.c.gcov.html
index 9b50260..99010f7 100644
--- a/coverage-report/external/ffspart/libflash/libflash.c.gcov.html
+++ b/coverage-report/external/ffspart/libflash/libflash.c.gcov.html
@@ -32,16 +32,16 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">419</td>
+ <td class="headerCovTableEntry">391</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">20</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
@@ -253,36 +253,36 @@
<a name="182"><span class="lineNum"> 182 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
<a name="183"><span class="lineNum"> 183 </span> : : }</a>
<a name="184"><span class="lineNum"> 184 </span> : : </a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : static void fl_get_best_erase(struct flash_chip *c, uint32_t dst, uint32_t size,</span></a>
+<a name="185"><span class="lineNum"> 185 </span> : : static void fl_get_best_erase(struct flash_chip *c, uint32_t dst, uint32_t size,</a>
<a name="186"><span class="lineNum"> 186 </span> : : uint32_t *chunk, uint8_t *cmd)</a>
<a name="187"><span class="lineNum"> 187 </span> : : {</a>
<a name="188"><span class="lineNum"> 188 </span> : : /* Smaller than 32k, use 4k */</a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : if ((dst &amp; 0x7fff) || (size &lt; 0x8000)) {</span></a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : *chunk = 0x1000;</span></a>
-<a name="191"><span class="lineNum"> 191 </span> :<span class="lineNoCov"> 0 : *cmd = CMD_SE;</span></a>
-<a name="192"><span class="lineNum"> 192 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="189"><span class="lineNum"> 189 </span> : : if ((dst &amp; 0x7fff) || (size &lt; 0x8000)) {</a>
+<a name="190"><span class="lineNum"> 190 </span> : : *chunk = 0x1000;</a>
+<a name="191"><span class="lineNum"> 191 </span> : : *cmd = CMD_SE;</a>
+<a name="192"><span class="lineNum"> 192 </span> : : return;</a>
<a name="193"><span class="lineNum"> 193 </span> : : }</a>
<a name="194"><span class="lineNum"> 194 </span> : : /* Smaller than 64k and 32k is supported, use it */</a>
-<a name="195"><span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : if ((c-&gt;info.flags &amp; FL_ERASE_32K) &amp;&amp;</span></a>
-<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : ((dst &amp; 0xffff) || (size &lt; 0x10000))) {</span></a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : *chunk = 0x8000;</span></a>
-<a name="198"><span class="lineNum"> 198 </span> :<span class="lineNoCov"> 0 : *cmd = CMD_BE32K;</span></a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="195"><span class="lineNum"> 195 </span> : : if ((c-&gt;info.flags &amp; FL_ERASE_32K) &amp;&amp;</a>
+<a name="196"><span class="lineNum"> 196 </span> : : ((dst &amp; 0xffff) || (size &lt; 0x10000))) {</a>
+<a name="197"><span class="lineNum"> 197 </span> : : *chunk = 0x8000;</a>
+<a name="198"><span class="lineNum"> 198 </span> : : *cmd = CMD_BE32K;</a>
+<a name="199"><span class="lineNum"> 199 </span> : : return;</a>
<a name="200"><span class="lineNum"> 200 </span> : : }</a>
<a name="201"><span class="lineNum"> 201 </span> : : /* If 64K is not supported, use whatever smaller size is */</a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : if (!(c-&gt;info.flags &amp; FL_ERASE_64K)) {</span></a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : if (c-&gt;info.flags &amp; FL_ERASE_32K) {</span></a>
-<a name="204"><span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : *chunk = 0x8000;</span></a>
-<a name="205"><span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : *cmd = CMD_BE32K;</span></a>
+<a name="202"><span class="lineNum"> 202 </span> : : if (!(c-&gt;info.flags &amp; FL_ERASE_64K)) {</a>
+<a name="203"><span class="lineNum"> 203 </span> : : if (c-&gt;info.flags &amp; FL_ERASE_32K) {</a>
+<a name="204"><span class="lineNum"> 204 </span> : : *chunk = 0x8000;</a>
+<a name="205"><span class="lineNum"> 205 </span> : : *cmd = CMD_BE32K;</a>
<a name="206"><span class="lineNum"> 206 </span> : : } else {</a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : *chunk = 0x1000;</span></a>
-<a name="208"><span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : *cmd = CMD_SE;</span></a>
+<a name="207"><span class="lineNum"> 207 </span> : : *chunk = 0x1000;</a>
+<a name="208"><span class="lineNum"> 208 </span> : : *cmd = CMD_SE;</a>
<a name="209"><span class="lineNum"> 209 </span> : : }</a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="210"><span class="lineNum"> 210 </span> : : return;</a>
<a name="211"><span class="lineNum"> 211 </span> : : }</a>
<a name="212"><span class="lineNum"> 212 </span> : : /* Allright, let's go for 64K */</a>
-<a name="213"><span class="lineNum"> 213 </span> :<span class="lineNoCov"> 0 : *chunk = 0x10000;</span></a>
-<a name="214"><span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : *cmd = CMD_BE;</span></a>
+<a name="213"><span class="lineNum"> 213 </span> : : *chunk = 0x10000;</a>
+<a name="214"><span class="lineNum"> 214 </span> : : *cmd = CMD_BE;</a>
<a name="215"><span class="lineNum"> 215 </span> : : }</a>
<a name="216"><span class="lineNum"> 216 </span> : : </a>
<a name="217"><span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : static int flash_erase(struct blocklevel_device *bl, uint64_t dst, uint64_t size)</span></a>
@@ -363,24 +363,24 @@
<a name="292"><span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : return fl_sync_wait_idle(ct);</span></a>
<a name="293"><span class="lineNum"> 293 </span> : : }</a>
<a name="294"><span class="lineNum"> 294 </span> : : </a>
-<a name="295"><span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : static int fl_wpage(struct flash_chip *c, uint32_t dst, const void *src,</span></a>
+<a name="295"><span class="lineNum"> 295 </span> : : static int fl_wpage(struct flash_chip *c, uint32_t dst, const void *src,</a>
<a name="296"><span class="lineNum"> 296 </span> : : uint32_t size)</a>
<a name="297"><span class="lineNum"> 297 </span> : : {</a>
-<a name="298"><span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : struct spi_flash_ctrl *ct = c-&gt;ctrl;</span></a>
-<a name="299"><span class="lineNum"> 299 </span> :<span class="lineNoCov"> 0 : int rc;</span></a>
+<a name="298"><span class="lineNum"> 298 </span> : : struct spi_flash_ctrl *ct = c-&gt;ctrl;</a>
+<a name="299"><span class="lineNum"> 299 </span> : : int rc;</a>
<a name="300"><span class="lineNum"> 300 </span> : : </a>
-<a name="301"><span class="lineNum"> 301 </span> :<span class="lineNoCov"> 0 : if (size &lt; 1 || size &gt; 0x100)</span></a>
+<a name="301"><span class="lineNum"> 301 </span> : : if (size &lt; 1 || size &gt; 0x100)</a>
<a name="302"><span class="lineNum"> 302 </span> : : return FLASH_ERR_BAD_PAGE_SIZE;</a>
<a name="303"><span class="lineNum"> 303 </span> : : </a>
-<a name="304"><span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : rc = fl_wren(ct);</span></a>
-<a name="305"><span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : if (rc) return rc;</span></a>
+<a name="304"><span class="lineNum"> 304 </span> : : rc = fl_wren(ct);</a>
+<a name="305"><span class="lineNum"> 305 </span> : : if (rc) return rc;</a>
<a name="306"><span class="lineNum"> 306 </span> : : </a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : rc = ct-&gt;cmd_wr(ct, CMD_PP, true, dst, src, size);</span></a>
-<a name="308"><span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
+<a name="307"><span class="lineNum"> 307 </span> : : rc = ct-&gt;cmd_wr(ct, CMD_PP, true, dst, src, size);</a>
+<a name="308"><span class="lineNum"> 308 </span> : : if (rc)</a>
<a name="309"><span class="lineNum"> 309 </span> : : return rc;</a>
<a name="310"><span class="lineNum"> 310 </span> : : </a>
<a name="311"><span class="lineNum"> 311 </span> : : /* Wait for write complete */</a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : return fl_sync_wait_idle(ct);</span></a>
+<a name="312"><span class="lineNum"> 312 </span> : : return fl_sync_wait_idle(ct);</a>
<a name="313"><span class="lineNum"> 313 </span> : : }</a>
<a name="314"><span class="lineNum"> 314 </span> : : </a>
<a name="315"><span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : static int flash_write(struct blocklevel_device *bl, uint32_t dst, const void *src,</span></a>
diff --git a/coverage-report/external/gard/ccan/endian/endian.h.func-sort-c.html b/coverage-report/external/gard/ccan/endian/endian.h.func-sort-c.html
index 2757ead..b2d9ccf 100644
--- a/coverage-report/external/gard/ccan/endian/endian.h.func-sort-c.html
+++ b/coverage-report/external/gard/ccan/endian/endian.h.func-sort-c.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">33.3 %</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">40.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -69,11 +69,11 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#287">cpu_to_be64</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#295">cpu_to_be64</a></td>
<td class="coverFnHi">450</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#314">be64_to_cpu</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#322">be64_to_cpu</a></td>
<td class="coverFnHi">5055</td>
</tr>
</table>
diff --git a/coverage-report/external/gard/ccan/endian/endian.h.func.html b/coverage-report/external/gard/ccan/endian/endian.h.func.html
index 9020f81..07de087 100644
--- a/coverage-report/external/gard/ccan/endian/endian.h.func.html
+++ b/coverage-report/external/gard/ccan/endian/endian.h.func.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">33.3 %</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">40.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -69,11 +69,11 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="endian.h.func-sort-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#314">be64_to_cpu</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#322">be64_to_cpu</a></td>
<td class="coverFnHi">5055</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#287">cpu_to_be64</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#295">cpu_to_be64</a></td>
<td class="coverFnHi">450</td>
</tr>
</table>
diff --git a/coverage-report/external/gard/ccan/endian/endian.h.gcov.html b/coverage-report/external/gard/ccan/endian/endian.h.gcov.html
index d92dc6a..52df723 100644
--- a/coverage-report/external/gard/ccan/endian/endian.h.gcov.html
+++ b/coverage-report/external/gard/ccan/endian/endian.h.gcov.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">33.3 %</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">40.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -184,246 +184,254 @@
<a name="113"><span class="lineNum"> 113 </span> : : #elif HAVE_LITTLE_ENDIAN &amp;&amp; HAVE_BIG_ENDIAN</a>
<a name="114"><span class="lineNum"> 114 </span> : : #error &quot;Can't compile for both big and little endian.&quot;</a>
<a name="115"><span class="lineNum"> 115 </span> : : #elif HAVE_LITTLE_ENDIAN</a>
-<a name="116"><span class="lineNum"> 116 </span> : : #define __BYTE_ORDER __LITTLE_ENDIAN</a>
-<a name="117"><span class="lineNum"> 117 </span> : : #elif HAVE_BIG_ENDIAN</a>
-<a name="118"><span class="lineNum"> 118 </span> : : #define __BYTE_ORDER __BIG_ENDIAN</a>
-<a name="119"><span class="lineNum"> 119 </span> : : #endif</a>
-<a name="120"><span class="lineNum"> 120 </span> : : </a>
-<a name="121"><span class="lineNum"> 121 </span> : : </a>
-<a name="122"><span class="lineNum"> 122 </span> : : #ifdef __CHECKER__</a>
-<a name="123"><span class="lineNum"> 123 </span> : : /* sparse needs forcing to remove bitwise attribute from ccan/short_types */</a>
-<a name="124"><span class="lineNum"> 124 </span> : : #define ENDIAN_CAST __attribute__((force))</a>
-<a name="125"><span class="lineNum"> 125 </span> : : #define ENDIAN_TYPE __attribute__((bitwise))</a>
-<a name="126"><span class="lineNum"> 126 </span> : : #else</a>
-<a name="127"><span class="lineNum"> 127 </span> : : #define ENDIAN_CAST</a>
-<a name="128"><span class="lineNum"> 128 </span> : : #define ENDIAN_TYPE</a>
-<a name="129"><span class="lineNum"> 129 </span> : : #endif</a>
-<a name="130"><span class="lineNum"> 130 </span> : : </a>
-<a name="131"><span class="lineNum"> 131 </span> : : typedef uint64_t ENDIAN_TYPE leint64_t;</a>
-<a name="132"><span class="lineNum"> 132 </span> : : typedef uint64_t ENDIAN_TYPE beint64_t;</a>
-<a name="133"><span class="lineNum"> 133 </span> : : typedef uint32_t ENDIAN_TYPE leint32_t;</a>
-<a name="134"><span class="lineNum"> 134 </span> : : typedef uint32_t ENDIAN_TYPE beint32_t;</a>
-<a name="135"><span class="lineNum"> 135 </span> : : typedef uint16_t ENDIAN_TYPE leint16_t;</a>
-<a name="136"><span class="lineNum"> 136 </span> : : typedef uint16_t ENDIAN_TYPE beint16_t;</a>
-<a name="137"><span class="lineNum"> 137 </span> : : </a>
-<a name="138"><span class="lineNum"> 138 </span> : : #if HAVE_LITTLE_ENDIAN</a>
-<a name="139"><span class="lineNum"> 139 </span> : : /**</a>
-<a name="140"><span class="lineNum"> 140 </span> : : * CPU_TO_LE64 - convert a constant uint64_t value to little-endian</a>
-<a name="141"><span class="lineNum"> 141 </span> : : * @native: constant to convert</a>
-<a name="142"><span class="lineNum"> 142 </span> : : */</a>
-<a name="143"><span class="lineNum"> 143 </span> : : #define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)(native))</a>
-<a name="144"><span class="lineNum"> 144 </span> : : </a>
-<a name="145"><span class="lineNum"> 145 </span> : : /**</a>
-<a name="146"><span class="lineNum"> 146 </span> : : * CPU_TO_LE32 - convert a constant uint32_t value to little-endian</a>
-<a name="147"><span class="lineNum"> 147 </span> : : * @native: constant to convert</a>
-<a name="148"><span class="lineNum"> 148 </span> : : */</a>
-<a name="149"><span class="lineNum"> 149 </span> : : #define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)(native))</a>
-<a name="150"><span class="lineNum"> 150 </span> : : </a>
-<a name="151"><span class="lineNum"> 151 </span> : : /**</a>
-<a name="152"><span class="lineNum"> 152 </span> : : * CPU_TO_LE16 - convert a constant uint16_t value to little-endian</a>
-<a name="153"><span class="lineNum"> 153 </span> : : * @native: constant to convert</a>
-<a name="154"><span class="lineNum"> 154 </span> : : */</a>
-<a name="155"><span class="lineNum"> 155 </span> : : #define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)(native))</a>
-<a name="156"><span class="lineNum"> 156 </span> : : </a>
-<a name="157"><span class="lineNum"> 157 </span> : : /**</a>
-<a name="158"><span class="lineNum"> 158 </span> : : * LE64_TO_CPU - convert a little-endian uint64_t constant</a>
-<a name="159"><span class="lineNum"> 159 </span> : : * @le_val: little-endian constant to convert</a>
-<a name="160"><span class="lineNum"> 160 </span> : : */</a>
-<a name="161"><span class="lineNum"> 161 </span> : : #define LE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val))</a>
-<a name="162"><span class="lineNum"> 162 </span> : : </a>
-<a name="163"><span class="lineNum"> 163 </span> : : /**</a>
-<a name="164"><span class="lineNum"> 164 </span> : : * LE32_TO_CPU - convert a little-endian uint32_t constant</a>
-<a name="165"><span class="lineNum"> 165 </span> : : * @le_val: little-endian constant to convert</a>
-<a name="166"><span class="lineNum"> 166 </span> : : */</a>
-<a name="167"><span class="lineNum"> 167 </span> : : #define LE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val))</a>
-<a name="168"><span class="lineNum"> 168 </span> : : </a>
-<a name="169"><span class="lineNum"> 169 </span> : : /**</a>
-<a name="170"><span class="lineNum"> 170 </span> : : * LE16_TO_CPU - convert a little-endian uint16_t constant</a>
-<a name="171"><span class="lineNum"> 171 </span> : : * @le_val: little-endian constant to convert</a>
-<a name="172"><span class="lineNum"> 172 </span> : : */</a>
-<a name="173"><span class="lineNum"> 173 </span> : : #define LE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val))</a>
-<a name="174"><span class="lineNum"> 174 </span> : : </a>
-<a name="175"><span class="lineNum"> 175 </span> : : #else /* ... HAVE_BIG_ENDIAN */</a>
-<a name="176"><span class="lineNum"> 176 </span> : : #define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)BSWAP_64(native))</a>
-<a name="177"><span class="lineNum"> 177 </span> : : #define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)BSWAP_32(native))</a>
-<a name="178"><span class="lineNum"> 178 </span> : : #define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)BSWAP_16(native))</a>
-<a name="179"><span class="lineNum"> 179 </span> : : #define LE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val)</a>
-<a name="180"><span class="lineNum"> 180 </span> : : #define LE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val)</a>
-<a name="181"><span class="lineNum"> 181 </span> : : #define LE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val)</a>
-<a name="182"><span class="lineNum"> 182 </span> : : #endif /* HAVE_BIG_ENDIAN */</a>
-<a name="183"><span class="lineNum"> 183 </span> : : </a>
-<a name="184"><span class="lineNum"> 184 </span> : : #if HAVE_BIG_ENDIAN</a>
-<a name="185"><span class="lineNum"> 185 </span> : : /**</a>
-<a name="186"><span class="lineNum"> 186 </span> : : * CPU_TO_BE64 - convert a constant uint64_t value to big-endian</a>
-<a name="187"><span class="lineNum"> 187 </span> : : * @native: constant to convert</a>
-<a name="188"><span class="lineNum"> 188 </span> : : */</a>
-<a name="189"><span class="lineNum"> 189 </span> : : #define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)(native))</a>
-<a name="190"><span class="lineNum"> 190 </span> : : </a>
-<a name="191"><span class="lineNum"> 191 </span> : : /**</a>
-<a name="192"><span class="lineNum"> 192 </span> : : * CPU_TO_BE32 - convert a constant uint32_t value to big-endian</a>
-<a name="193"><span class="lineNum"> 193 </span> : : * @native: constant to convert</a>
-<a name="194"><span class="lineNum"> 194 </span> : : */</a>
-<a name="195"><span class="lineNum"> 195 </span> : : #define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)(native))</a>
-<a name="196"><span class="lineNum"> 196 </span> : : </a>
-<a name="197"><span class="lineNum"> 197 </span> : : /**</a>
-<a name="198"><span class="lineNum"> 198 </span> : : * CPU_TO_BE16 - convert a constant uint16_t value to big-endian</a>
-<a name="199"><span class="lineNum"> 199 </span> : : * @native: constant to convert</a>
-<a name="200"><span class="lineNum"> 200 </span> : : */</a>
-<a name="201"><span class="lineNum"> 201 </span> : : #define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)(native))</a>
-<a name="202"><span class="lineNum"> 202 </span> : : </a>
-<a name="203"><span class="lineNum"> 203 </span> : : /**</a>
-<a name="204"><span class="lineNum"> 204 </span> : : * BE64_TO_CPU - convert a big-endian uint64_t constant</a>
-<a name="205"><span class="lineNum"> 205 </span> : : * @le_val: big-endian constant to convert</a>
-<a name="206"><span class="lineNum"> 206 </span> : : */</a>
-<a name="207"><span class="lineNum"> 207 </span> : : #define BE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val))</a>
-<a name="208"><span class="lineNum"> 208 </span> : : </a>
-<a name="209"><span class="lineNum"> 209 </span> : : /**</a>
-<a name="210"><span class="lineNum"> 210 </span> : : * BE32_TO_CPU - convert a big-endian uint32_t constant</a>
-<a name="211"><span class="lineNum"> 211 </span> : : * @le_val: big-endian constant to convert</a>
-<a name="212"><span class="lineNum"> 212 </span> : : */</a>
-<a name="213"><span class="lineNum"> 213 </span> : : #define BE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val))</a>
-<a name="214"><span class="lineNum"> 214 </span> : : </a>
-<a name="215"><span class="lineNum"> 215 </span> : : /**</a>
-<a name="216"><span class="lineNum"> 216 </span> : : * BE16_TO_CPU - convert a big-endian uint16_t constant</a>
-<a name="217"><span class="lineNum"> 217 </span> : : * @le_val: big-endian constant to convert</a>
-<a name="218"><span class="lineNum"> 218 </span> : : */</a>
-<a name="219"><span class="lineNum"> 219 </span> : : #define BE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val))</a>
-<a name="220"><span class="lineNum"> 220 </span> : : </a>
-<a name="221"><span class="lineNum"> 221 </span> : : #else /* ... HAVE_LITTLE_ENDIAN */</a>
-<a name="222"><span class="lineNum"> 222 </span> : : #define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)BSWAP_64(native))</a>
-<a name="223"><span class="lineNum"> 223 </span> : : #define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)BSWAP_32(native))</a>
-<a name="224"><span class="lineNum"> 224 </span> : : #define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)BSWAP_16(native))</a>
-<a name="225"><span class="lineNum"> 225 </span> : : #define BE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val)</a>
-<a name="226"><span class="lineNum"> 226 </span> : : #define BE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val)</a>
-<a name="227"><span class="lineNum"> 227 </span> : : #define BE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val)</a>
-<a name="228"><span class="lineNum"> 228 </span> : : #endif /* HAVE_LITTE_ENDIAN */</a>
-<a name="229"><span class="lineNum"> 229 </span> : : </a>
-<a name="230"><span class="lineNum"> 230 </span> : : </a>
-<a name="231"><span class="lineNum"> 231 </span> : : /**</a>
-<a name="232"><span class="lineNum"> 232 </span> : : * cpu_to_le64 - convert a uint64_t value to little-endian</a>
-<a name="233"><span class="lineNum"> 233 </span> : : * @native: value to convert</a>
-<a name="234"><span class="lineNum"> 234 </span> : : */</a>
-<a name="235"><span class="lineNum"> 235 </span> : : static inline leint64_t cpu_to_le64(uint64_t native)</a>
-<a name="236"><span class="lineNum"> 236 </span> : : {</a>
-<a name="237"><span class="lineNum"> 237 </span> : : return CPU_TO_LE64(native);</a>
-<a name="238"><span class="lineNum"> 238 </span> : : }</a>
-<a name="239"><span class="lineNum"> 239 </span> : : </a>
-<a name="240"><span class="lineNum"> 240 </span> : : /**</a>
-<a name="241"><span class="lineNum"> 241 </span> : : * cpu_to_le32 - convert a uint32_t value to little-endian</a>
-<a name="242"><span class="lineNum"> 242 </span> : : * @native: value to convert</a>
-<a name="243"><span class="lineNum"> 243 </span> : : */</a>
-<a name="244"><span class="lineNum"> 244 </span> : : static inline leint32_t cpu_to_le32(uint32_t native)</a>
-<a name="245"><span class="lineNum"> 245 </span> : : {</a>
-<a name="246"><span class="lineNum"> 246 </span> : : return CPU_TO_LE32(native);</a>
-<a name="247"><span class="lineNum"> 247 </span> : : }</a>
-<a name="248"><span class="lineNum"> 248 </span> : : </a>
-<a name="249"><span class="lineNum"> 249 </span> : : /**</a>
-<a name="250"><span class="lineNum"> 250 </span> : : * cpu_to_le16 - convert a uint16_t value to little-endian</a>
-<a name="251"><span class="lineNum"> 251 </span> : : * @native: value to convert</a>
-<a name="252"><span class="lineNum"> 252 </span> : : */</a>
-<a name="253"><span class="lineNum"> 253 </span> : : static inline leint16_t cpu_to_le16(uint16_t native)</a>
-<a name="254"><span class="lineNum"> 254 </span> : : {</a>
-<a name="255"><span class="lineNum"> 255 </span> : : return CPU_TO_LE16(native);</a>
-<a name="256"><span class="lineNum"> 256 </span> : : }</a>
-<a name="257"><span class="lineNum"> 257 </span> : : </a>
-<a name="258"><span class="lineNum"> 258 </span> : : /**</a>
-<a name="259"><span class="lineNum"> 259 </span> : : * le64_to_cpu - convert a little-endian uint64_t value</a>
-<a name="260"><span class="lineNum"> 260 </span> : : * @le_val: little-endian value to convert</a>
-<a name="261"><span class="lineNum"> 261 </span> : : */</a>
-<a name="262"><span class="lineNum"> 262 </span> : : static inline uint64_t le64_to_cpu(leint64_t le_val)</a>
-<a name="263"><span class="lineNum"> 263 </span> : : {</a>
-<a name="264"><span class="lineNum"> 264 </span> : : return LE64_TO_CPU(le_val);</a>
-<a name="265"><span class="lineNum"> 265 </span> : : }</a>
-<a name="266"><span class="lineNum"> 266 </span> : : </a>
-<a name="267"><span class="lineNum"> 267 </span> : : /**</a>
-<a name="268"><span class="lineNum"> 268 </span> : : * le32_to_cpu - convert a little-endian uint32_t value</a>
-<a name="269"><span class="lineNum"> 269 </span> : : * @le_val: little-endian value to convert</a>
-<a name="270"><span class="lineNum"> 270 </span> : : */</a>
-<a name="271"><span class="lineNum"> 271 </span> : : static inline uint32_t le32_to_cpu(leint32_t le_val)</a>
-<a name="272"><span class="lineNum"> 272 </span> : : {</a>
-<a name="273"><span class="lineNum"> 273 </span> : : return LE32_TO_CPU(le_val);</a>
-<a name="274"><span class="lineNum"> 274 </span> : : }</a>
-<a name="275"><span class="lineNum"> 275 </span> : : </a>
-<a name="276"><span class="lineNum"> 276 </span> : : /**</a>
-<a name="277"><span class="lineNum"> 277 </span> : : * le16_to_cpu - convert a little-endian uint16_t value</a>
-<a name="278"><span class="lineNum"> 278 </span> : : * @le_val: little-endian value to convert</a>
-<a name="279"><span class="lineNum"> 279 </span> : : */</a>
-<a name="280"><span class="lineNum"> 280 </span> : : static inline uint16_t le16_to_cpu(leint16_t le_val)</a>
-<a name="281"><span class="lineNum"> 281 </span> : : {</a>
-<a name="282"><span class="lineNum"> 282 </span> : : return LE16_TO_CPU(le_val);</a>
-<a name="283"><span class="lineNum"> 283 </span> : : }</a>
-<a name="284"><span class="lineNum"> 284 </span> : : </a>
-<a name="285"><span class="lineNum"> 285 </span> : : /**</a>
-<a name="286"><span class="lineNum"> 286 </span> : : * cpu_to_be64 - convert a uint64_t value to big endian.</a>
-<a name="287"><span class="lineNum"> 287 </span> : : * @native: value to convert</a>
-<a name="288"><span class="lineNum"> 288 </span> : : */</a>
-<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 450 : static inline beint64_t cpu_to_be64(uint64_t native)</span></a>
-<a name="290"><span class="lineNum"> 290 </span> : : {</a>
-<a name="291"><span class="lineNum"> 291 </span> :<span class="lineCov"> 450 : return CPU_TO_BE64(native);</span></a>
-<a name="292"><span class="lineNum"> 292 </span> : : }</a>
-<a name="293"><span class="lineNum"> 293 </span> : : </a>
-<a name="294"><span class="lineNum"> 294 </span> : : /**</a>
-<a name="295"><span class="lineNum"> 295 </span> : : * cpu_to_be32 - convert a uint32_t value to big endian.</a>
-<a name="296"><span class="lineNum"> 296 </span> : : * @native: value to convert</a>
-<a name="297"><span class="lineNum"> 297 </span> : : */</a>
-<a name="298"><span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : static inline beint32_t cpu_to_be32(uint32_t native)</span></a>
-<a name="299"><span class="lineNum"> 299 </span> : : {</a>
-<a name="300"><span class="lineNum"> 300 </span> :<span class="lineNoCov"> 0 : return CPU_TO_BE32(native);</span></a>
-<a name="301"><span class="lineNum"> 301 </span> : : }</a>
-<a name="302"><span class="lineNum"> 302 </span> : : </a>
-<a name="303"><span class="lineNum"> 303 </span> : : /**</a>
-<a name="304"><span class="lineNum"> 304 </span> : : * cpu_to_be16 - convert a uint16_t value to big endian.</a>
-<a name="305"><span class="lineNum"> 305 </span> : : * @native: value to convert</a>
-<a name="306"><span class="lineNum"> 306 </span> : : */</a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : static inline beint16_t cpu_to_be16(uint16_t native)</span></a>
-<a name="308"><span class="lineNum"> 308 </span> : : {</a>
-<a name="309"><span class="lineNum"> 309 </span> :<span class="lineNoCov"> 0 : return CPU_TO_BE16(native);</span></a>
-<a name="310"><span class="lineNum"> 310 </span> : : }</a>
-<a name="311"><span class="lineNum"> 311 </span> : : </a>
-<a name="312"><span class="lineNum"> 312 </span> : : /**</a>
-<a name="313"><span class="lineNum"> 313 </span> : : * be64_to_cpu - convert a big-endian uint64_t value</a>
-<a name="314"><span class="lineNum"> 314 </span> : : * @be_val: big-endian value to convert</a>
-<a name="315"><span class="lineNum"> 315 </span> : : */</a>
-<a name="316"><span class="lineNum"> 316 </span> :<span class="lineCov"> 5055 : static inline uint64_t be64_to_cpu(beint64_t be_val)</span></a>
-<a name="317"><span class="lineNum"> 317 </span> : : {</a>
-<a name="318"><span class="lineNum"> 318 </span> :<span class="lineCov"> 5055 : return BE64_TO_CPU(be_val);</span></a>
-<a name="319"><span class="lineNum"> 319 </span> : : }</a>
-<a name="320"><span class="lineNum"> 320 </span> : : </a>
-<a name="321"><span class="lineNum"> 321 </span> : : /**</a>
-<a name="322"><span class="lineNum"> 322 </span> : : * be32_to_cpu - convert a big-endian uint32_t value</a>
-<a name="323"><span class="lineNum"> 323 </span> : : * @be_val: big-endian value to convert</a>
-<a name="324"><span class="lineNum"> 324 </span> : : */</a>
-<a name="325"><span class="lineNum"> 325 </span> :<span class="lineNoCov"> 0 : static inline uint32_t be32_to_cpu(beint32_t be_val)</span></a>
-<a name="326"><span class="lineNum"> 326 </span> : : {</a>
-<a name="327"><span class="lineNum"> 327 </span> :<span class="lineNoCov"> 0 : return BE32_TO_CPU(be_val);</span></a>
-<a name="328"><span class="lineNum"> 328 </span> : : }</a>
-<a name="329"><span class="lineNum"> 329 </span> : : </a>
-<a name="330"><span class="lineNum"> 330 </span> : : /**</a>
-<a name="331"><span class="lineNum"> 331 </span> : : * be16_to_cpu - convert a big-endian uint16_t value</a>
-<a name="332"><span class="lineNum"> 332 </span> : : * @be_val: big-endian value to convert</a>
-<a name="333"><span class="lineNum"> 333 </span> : : */</a>
-<a name="334"><span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : static inline uint16_t be16_to_cpu(beint16_t be_val)</span></a>
-<a name="335"><span class="lineNum"> 335 </span> : : {</a>
-<a name="336"><span class="lineNum"> 336 </span> :<span class="lineNoCov"> 0 : return BE16_TO_CPU(be_val);</span></a>
-<a name="337"><span class="lineNum"> 337 </span> : : }</a>
-<a name="338"><span class="lineNum"> 338 </span> : : </a>
-<a name="339"><span class="lineNum"> 339 </span> : : /* Whichever they include first, they get these definitions. */</a>
-<a name="340"><span class="lineNum"> 340 </span> : : #ifdef CCAN_SHORT_TYPES_H</a>
-<a name="341"><span class="lineNum"> 341 </span> : : /**</a>
-<a name="342"><span class="lineNum"> 342 </span> : : * be64/be32/be16 - 64/32/16 bit big-endian representation.</a>
-<a name="343"><span class="lineNum"> 343 </span> : : */</a>
-<a name="344"><span class="lineNum"> 344 </span> : : typedef beint64_t be64;</a>
-<a name="345"><span class="lineNum"> 345 </span> : : typedef beint32_t be32;</a>
-<a name="346"><span class="lineNum"> 346 </span> : : typedef beint16_t be16;</a>
-<a name="347"><span class="lineNum"> 347 </span> : : </a>
-<a name="348"><span class="lineNum"> 348 </span> : : /**</a>
-<a name="349"><span class="lineNum"> 349 </span> : : * le64/le32/le16 - 64/32/16 bit little-endian representation.</a>
-<a name="350"><span class="lineNum"> 350 </span> : : */</a>
-<a name="351"><span class="lineNum"> 351 </span> : : typedef leint64_t le64;</a>
-<a name="352"><span class="lineNum"> 352 </span> : : typedef leint32_t le32;</a>
-<a name="353"><span class="lineNum"> 353 </span> : : typedef leint16_t le16;</a>
-<a name="354"><span class="lineNum"> 354 </span> : : #endif</a>
-<a name="355"><span class="lineNum"> 355 </span> : : #endif /* CCAN_ENDIAN_H */</a>
+<a name="116"><span class="lineNum"> 116 </span> : : #ifndef __BYTE_ORDER</a>
+<a name="117"><span class="lineNum"> 117 </span> : : #define __BYTE_ORDER __LITTLE_ENDIAN</a>
+<a name="118"><span class="lineNum"> 118 </span> : : #elif __BYTE_ORDER != __LITTLE_ENDIAN</a>
+<a name="119"><span class="lineNum"> 119 </span> : : #error &quot;__BYTE_ORDER already defined, but not equal to __LITTLE_ENDIAN&quot;</a>
+<a name="120"><span class="lineNum"> 120 </span> : : #endif</a>
+<a name="121"><span class="lineNum"> 121 </span> : : #elif HAVE_BIG_ENDIAN</a>
+<a name="122"><span class="lineNum"> 122 </span> : : #ifndef __BYTE_ORDER</a>
+<a name="123"><span class="lineNum"> 123 </span> : : #define __BYTE_ORDER __BIG_ENDIAN</a>
+<a name="124"><span class="lineNum"> 124 </span> : : #elif __BYTE_ORDER != __BIG_ENDIAN</a>
+<a name="125"><span class="lineNum"> 125 </span> : : #error &quot;__BYTE_ORDER already defined, but not equal to __BIG_ENDIAN&quot;</a>
+<a name="126"><span class="lineNum"> 126 </span> : : #endif</a>
+<a name="127"><span class="lineNum"> 127 </span> : : #endif</a>
+<a name="128"><span class="lineNum"> 128 </span> : : </a>
+<a name="129"><span class="lineNum"> 129 </span> : : </a>
+<a name="130"><span class="lineNum"> 130 </span> : : #ifdef __CHECKER__</a>
+<a name="131"><span class="lineNum"> 131 </span> : : /* sparse needs forcing to remove bitwise attribute from ccan/short_types */</a>
+<a name="132"><span class="lineNum"> 132 </span> : : #define ENDIAN_CAST __attribute__((force))</a>
+<a name="133"><span class="lineNum"> 133 </span> : : #define ENDIAN_TYPE __attribute__((bitwise))</a>
+<a name="134"><span class="lineNum"> 134 </span> : : #else</a>
+<a name="135"><span class="lineNum"> 135 </span> : : #define ENDIAN_CAST</a>
+<a name="136"><span class="lineNum"> 136 </span> : : #define ENDIAN_TYPE</a>
+<a name="137"><span class="lineNum"> 137 </span> : : #endif</a>
+<a name="138"><span class="lineNum"> 138 </span> : : </a>
+<a name="139"><span class="lineNum"> 139 </span> : : typedef uint64_t ENDIAN_TYPE leint64_t;</a>
+<a name="140"><span class="lineNum"> 140 </span> : : typedef uint64_t ENDIAN_TYPE beint64_t;</a>
+<a name="141"><span class="lineNum"> 141 </span> : : typedef uint32_t ENDIAN_TYPE leint32_t;</a>
+<a name="142"><span class="lineNum"> 142 </span> : : typedef uint32_t ENDIAN_TYPE beint32_t;</a>
+<a name="143"><span class="lineNum"> 143 </span> : : typedef uint16_t ENDIAN_TYPE leint16_t;</a>
+<a name="144"><span class="lineNum"> 144 </span> : : typedef uint16_t ENDIAN_TYPE beint16_t;</a>
+<a name="145"><span class="lineNum"> 145 </span> : : </a>
+<a name="146"><span class="lineNum"> 146 </span> : : #if HAVE_LITTLE_ENDIAN</a>
+<a name="147"><span class="lineNum"> 147 </span> : : /**</a>
+<a name="148"><span class="lineNum"> 148 </span> : : * CPU_TO_LE64 - convert a constant uint64_t value to little-endian</a>
+<a name="149"><span class="lineNum"> 149 </span> : : * @native: constant to convert</a>
+<a name="150"><span class="lineNum"> 150 </span> : : */</a>
+<a name="151"><span class="lineNum"> 151 </span> : : #define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)(native))</a>
+<a name="152"><span class="lineNum"> 152 </span> : : </a>
+<a name="153"><span class="lineNum"> 153 </span> : : /**</a>
+<a name="154"><span class="lineNum"> 154 </span> : : * CPU_TO_LE32 - convert a constant uint32_t value to little-endian</a>
+<a name="155"><span class="lineNum"> 155 </span> : : * @native: constant to convert</a>
+<a name="156"><span class="lineNum"> 156 </span> : : */</a>
+<a name="157"><span class="lineNum"> 157 </span> : : #define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)(native))</a>
+<a name="158"><span class="lineNum"> 158 </span> : : </a>
+<a name="159"><span class="lineNum"> 159 </span> : : /**</a>
+<a name="160"><span class="lineNum"> 160 </span> : : * CPU_TO_LE16 - convert a constant uint16_t value to little-endian</a>
+<a name="161"><span class="lineNum"> 161 </span> : : * @native: constant to convert</a>
+<a name="162"><span class="lineNum"> 162 </span> : : */</a>
+<a name="163"><span class="lineNum"> 163 </span> : : #define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)(native))</a>
+<a name="164"><span class="lineNum"> 164 </span> : : </a>
+<a name="165"><span class="lineNum"> 165 </span> : : /**</a>
+<a name="166"><span class="lineNum"> 166 </span> : : * LE64_TO_CPU - convert a little-endian uint64_t constant</a>
+<a name="167"><span class="lineNum"> 167 </span> : : * @le_val: little-endian constant to convert</a>
+<a name="168"><span class="lineNum"> 168 </span> : : */</a>
+<a name="169"><span class="lineNum"> 169 </span> : : #define LE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val))</a>
+<a name="170"><span class="lineNum"> 170 </span> : : </a>
+<a name="171"><span class="lineNum"> 171 </span> : : /**</a>
+<a name="172"><span class="lineNum"> 172 </span> : : * LE32_TO_CPU - convert a little-endian uint32_t constant</a>
+<a name="173"><span class="lineNum"> 173 </span> : : * @le_val: little-endian constant to convert</a>
+<a name="174"><span class="lineNum"> 174 </span> : : */</a>
+<a name="175"><span class="lineNum"> 175 </span> : : #define LE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val))</a>
+<a name="176"><span class="lineNum"> 176 </span> : : </a>
+<a name="177"><span class="lineNum"> 177 </span> : : /**</a>
+<a name="178"><span class="lineNum"> 178 </span> : : * LE16_TO_CPU - convert a little-endian uint16_t constant</a>
+<a name="179"><span class="lineNum"> 179 </span> : : * @le_val: little-endian constant to convert</a>
+<a name="180"><span class="lineNum"> 180 </span> : : */</a>
+<a name="181"><span class="lineNum"> 181 </span> : : #define LE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val))</a>
+<a name="182"><span class="lineNum"> 182 </span> : : </a>
+<a name="183"><span class="lineNum"> 183 </span> : : #else /* ... HAVE_BIG_ENDIAN */</a>
+<a name="184"><span class="lineNum"> 184 </span> : : #define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)BSWAP_64(native))</a>
+<a name="185"><span class="lineNum"> 185 </span> : : #define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)BSWAP_32(native))</a>
+<a name="186"><span class="lineNum"> 186 </span> : : #define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)BSWAP_16(native))</a>
+<a name="187"><span class="lineNum"> 187 </span> : : #define LE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val)</a>
+<a name="188"><span class="lineNum"> 188 </span> : : #define LE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val)</a>
+<a name="189"><span class="lineNum"> 189 </span> : : #define LE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val)</a>
+<a name="190"><span class="lineNum"> 190 </span> : : #endif /* HAVE_BIG_ENDIAN */</a>
+<a name="191"><span class="lineNum"> 191 </span> : : </a>
+<a name="192"><span class="lineNum"> 192 </span> : : #if HAVE_BIG_ENDIAN</a>
+<a name="193"><span class="lineNum"> 193 </span> : : /**</a>
+<a name="194"><span class="lineNum"> 194 </span> : : * CPU_TO_BE64 - convert a constant uint64_t value to big-endian</a>
+<a name="195"><span class="lineNum"> 195 </span> : : * @native: constant to convert</a>
+<a name="196"><span class="lineNum"> 196 </span> : : */</a>
+<a name="197"><span class="lineNum"> 197 </span> : : #define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)(native))</a>
+<a name="198"><span class="lineNum"> 198 </span> : : </a>
+<a name="199"><span class="lineNum"> 199 </span> : : /**</a>
+<a name="200"><span class="lineNum"> 200 </span> : : * CPU_TO_BE32 - convert a constant uint32_t value to big-endian</a>
+<a name="201"><span class="lineNum"> 201 </span> : : * @native: constant to convert</a>
+<a name="202"><span class="lineNum"> 202 </span> : : */</a>
+<a name="203"><span class="lineNum"> 203 </span> : : #define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)(native))</a>
+<a name="204"><span class="lineNum"> 204 </span> : : </a>
+<a name="205"><span class="lineNum"> 205 </span> : : /**</a>
+<a name="206"><span class="lineNum"> 206 </span> : : * CPU_TO_BE16 - convert a constant uint16_t value to big-endian</a>
+<a name="207"><span class="lineNum"> 207 </span> : : * @native: constant to convert</a>
+<a name="208"><span class="lineNum"> 208 </span> : : */</a>
+<a name="209"><span class="lineNum"> 209 </span> : : #define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)(native))</a>
+<a name="210"><span class="lineNum"> 210 </span> : : </a>
+<a name="211"><span class="lineNum"> 211 </span> : : /**</a>
+<a name="212"><span class="lineNum"> 212 </span> : : * BE64_TO_CPU - convert a big-endian uint64_t constant</a>
+<a name="213"><span class="lineNum"> 213 </span> : : * @le_val: big-endian constant to convert</a>
+<a name="214"><span class="lineNum"> 214 </span> : : */</a>
+<a name="215"><span class="lineNum"> 215 </span> : : #define BE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val))</a>
+<a name="216"><span class="lineNum"> 216 </span> : : </a>
+<a name="217"><span class="lineNum"> 217 </span> : : /**</a>
+<a name="218"><span class="lineNum"> 218 </span> : : * BE32_TO_CPU - convert a big-endian uint32_t constant</a>
+<a name="219"><span class="lineNum"> 219 </span> : : * @le_val: big-endian constant to convert</a>
+<a name="220"><span class="lineNum"> 220 </span> : : */</a>
+<a name="221"><span class="lineNum"> 221 </span> : : #define BE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val))</a>
+<a name="222"><span class="lineNum"> 222 </span> : : </a>
+<a name="223"><span class="lineNum"> 223 </span> : : /**</a>
+<a name="224"><span class="lineNum"> 224 </span> : : * BE16_TO_CPU - convert a big-endian uint16_t constant</a>
+<a name="225"><span class="lineNum"> 225 </span> : : * @le_val: big-endian constant to convert</a>
+<a name="226"><span class="lineNum"> 226 </span> : : */</a>
+<a name="227"><span class="lineNum"> 227 </span> : : #define BE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val))</a>
+<a name="228"><span class="lineNum"> 228 </span> : : </a>
+<a name="229"><span class="lineNum"> 229 </span> : : #else /* ... HAVE_LITTLE_ENDIAN */</a>
+<a name="230"><span class="lineNum"> 230 </span> : : #define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)BSWAP_64(native))</a>
+<a name="231"><span class="lineNum"> 231 </span> : : #define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)BSWAP_32(native))</a>
+<a name="232"><span class="lineNum"> 232 </span> : : #define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)BSWAP_16(native))</a>
+<a name="233"><span class="lineNum"> 233 </span> : : #define BE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val)</a>
+<a name="234"><span class="lineNum"> 234 </span> : : #define BE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val)</a>
+<a name="235"><span class="lineNum"> 235 </span> : : #define BE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val)</a>
+<a name="236"><span class="lineNum"> 236 </span> : : #endif /* HAVE_LITTE_ENDIAN */</a>
+<a name="237"><span class="lineNum"> 237 </span> : : </a>
+<a name="238"><span class="lineNum"> 238 </span> : : </a>
+<a name="239"><span class="lineNum"> 239 </span> : : /**</a>
+<a name="240"><span class="lineNum"> 240 </span> : : * cpu_to_le64 - convert a uint64_t value to little-endian</a>
+<a name="241"><span class="lineNum"> 241 </span> : : * @native: value to convert</a>
+<a name="242"><span class="lineNum"> 242 </span> : : */</a>
+<a name="243"><span class="lineNum"> 243 </span> : : static inline leint64_t cpu_to_le64(uint64_t native)</a>
+<a name="244"><span class="lineNum"> 244 </span> : : {</a>
+<a name="245"><span class="lineNum"> 245 </span> : : return CPU_TO_LE64(native);</a>
+<a name="246"><span class="lineNum"> 246 </span> : : }</a>
+<a name="247"><span class="lineNum"> 247 </span> : : </a>
+<a name="248"><span class="lineNum"> 248 </span> : : /**</a>
+<a name="249"><span class="lineNum"> 249 </span> : : * cpu_to_le32 - convert a uint32_t value to little-endian</a>
+<a name="250"><span class="lineNum"> 250 </span> : : * @native: value to convert</a>
+<a name="251"><span class="lineNum"> 251 </span> : : */</a>
+<a name="252"><span class="lineNum"> 252 </span> : : static inline leint32_t cpu_to_le32(uint32_t native)</a>
+<a name="253"><span class="lineNum"> 253 </span> : : {</a>
+<a name="254"><span class="lineNum"> 254 </span> : : return CPU_TO_LE32(native);</a>
+<a name="255"><span class="lineNum"> 255 </span> : : }</a>
+<a name="256"><span class="lineNum"> 256 </span> : : </a>
+<a name="257"><span class="lineNum"> 257 </span> : : /**</a>
+<a name="258"><span class="lineNum"> 258 </span> : : * cpu_to_le16 - convert a uint16_t value to little-endian</a>
+<a name="259"><span class="lineNum"> 259 </span> : : * @native: value to convert</a>
+<a name="260"><span class="lineNum"> 260 </span> : : */</a>
+<a name="261"><span class="lineNum"> 261 </span> : : static inline leint16_t cpu_to_le16(uint16_t native)</a>
+<a name="262"><span class="lineNum"> 262 </span> : : {</a>
+<a name="263"><span class="lineNum"> 263 </span> : : return CPU_TO_LE16(native);</a>
+<a name="264"><span class="lineNum"> 264 </span> : : }</a>
+<a name="265"><span class="lineNum"> 265 </span> : : </a>
+<a name="266"><span class="lineNum"> 266 </span> : : /**</a>
+<a name="267"><span class="lineNum"> 267 </span> : : * le64_to_cpu - convert a little-endian uint64_t value</a>
+<a name="268"><span class="lineNum"> 268 </span> : : * @le_val: little-endian value to convert</a>
+<a name="269"><span class="lineNum"> 269 </span> : : */</a>
+<a name="270"><span class="lineNum"> 270 </span> : : static inline uint64_t le64_to_cpu(leint64_t le_val)</a>
+<a name="271"><span class="lineNum"> 271 </span> : : {</a>
+<a name="272"><span class="lineNum"> 272 </span> : : return LE64_TO_CPU(le_val);</a>
+<a name="273"><span class="lineNum"> 273 </span> : : }</a>
+<a name="274"><span class="lineNum"> 274 </span> : : </a>
+<a name="275"><span class="lineNum"> 275 </span> : : /**</a>
+<a name="276"><span class="lineNum"> 276 </span> : : * le32_to_cpu - convert a little-endian uint32_t value</a>
+<a name="277"><span class="lineNum"> 277 </span> : : * @le_val: little-endian value to convert</a>
+<a name="278"><span class="lineNum"> 278 </span> : : */</a>
+<a name="279"><span class="lineNum"> 279 </span> : : static inline uint32_t le32_to_cpu(leint32_t le_val)</a>
+<a name="280"><span class="lineNum"> 280 </span> : : {</a>
+<a name="281"><span class="lineNum"> 281 </span> : : return LE32_TO_CPU(le_val);</a>
+<a name="282"><span class="lineNum"> 282 </span> : : }</a>
+<a name="283"><span class="lineNum"> 283 </span> : : </a>
+<a name="284"><span class="lineNum"> 284 </span> : : /**</a>
+<a name="285"><span class="lineNum"> 285 </span> : : * le16_to_cpu - convert a little-endian uint16_t value</a>
+<a name="286"><span class="lineNum"> 286 </span> : : * @le_val: little-endian value to convert</a>
+<a name="287"><span class="lineNum"> 287 </span> : : */</a>
+<a name="288"><span class="lineNum"> 288 </span> : : static inline uint16_t le16_to_cpu(leint16_t le_val)</a>
+<a name="289"><span class="lineNum"> 289 </span> : : {</a>
+<a name="290"><span class="lineNum"> 290 </span> : : return LE16_TO_CPU(le_val);</a>
+<a name="291"><span class="lineNum"> 291 </span> : : }</a>
+<a name="292"><span class="lineNum"> 292 </span> : : </a>
+<a name="293"><span class="lineNum"> 293 </span> : : /**</a>
+<a name="294"><span class="lineNum"> 294 </span> : : * cpu_to_be64 - convert a uint64_t value to big endian.</a>
+<a name="295"><span class="lineNum"> 295 </span> : : * @native: value to convert</a>
+<a name="296"><span class="lineNum"> 296 </span> : : */</a>
+<a name="297"><span class="lineNum"> 297 </span> :<span class="lineCov"> 450 : static inline beint64_t cpu_to_be64(uint64_t native)</span></a>
+<a name="298"><span class="lineNum"> 298 </span> : : {</a>
+<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 450 : return CPU_TO_BE64(native);</span></a>
+<a name="300"><span class="lineNum"> 300 </span> : : }</a>
+<a name="301"><span class="lineNum"> 301 </span> : : </a>
+<a name="302"><span class="lineNum"> 302 </span> : : /**</a>
+<a name="303"><span class="lineNum"> 303 </span> : : * cpu_to_be32 - convert a uint32_t value to big endian.</a>
+<a name="304"><span class="lineNum"> 304 </span> : : * @native: value to convert</a>
+<a name="305"><span class="lineNum"> 305 </span> : : */</a>
+<a name="306"><span class="lineNum"> 306 </span> :<span class="lineNoCov"> 0 : static inline beint32_t cpu_to_be32(uint32_t native)</span></a>
+<a name="307"><span class="lineNum"> 307 </span> : : {</a>
+<a name="308"><span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : return CPU_TO_BE32(native);</span></a>
+<a name="309"><span class="lineNum"> 309 </span> : : }</a>
+<a name="310"><span class="lineNum"> 310 </span> : : </a>
+<a name="311"><span class="lineNum"> 311 </span> : : /**</a>
+<a name="312"><span class="lineNum"> 312 </span> : : * cpu_to_be16 - convert a uint16_t value to big endian.</a>
+<a name="313"><span class="lineNum"> 313 </span> : : * @native: value to convert</a>
+<a name="314"><span class="lineNum"> 314 </span> : : */</a>
+<a name="315"><span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : static inline beint16_t cpu_to_be16(uint16_t native)</span></a>
+<a name="316"><span class="lineNum"> 316 </span> : : {</a>
+<a name="317"><span class="lineNum"> 317 </span> :<span class="lineNoCov"> 0 : return CPU_TO_BE16(native);</span></a>
+<a name="318"><span class="lineNum"> 318 </span> : : }</a>
+<a name="319"><span class="lineNum"> 319 </span> : : </a>
+<a name="320"><span class="lineNum"> 320 </span> : : /**</a>
+<a name="321"><span class="lineNum"> 321 </span> : : * be64_to_cpu - convert a big-endian uint64_t value</a>
+<a name="322"><span class="lineNum"> 322 </span> : : * @be_val: big-endian value to convert</a>
+<a name="323"><span class="lineNum"> 323 </span> : : */</a>
+<a name="324"><span class="lineNum"> 324 </span> :<span class="lineCov"> 5055 : static inline uint64_t be64_to_cpu(beint64_t be_val)</span></a>
+<a name="325"><span class="lineNum"> 325 </span> : : {</a>
+<a name="326"><span class="lineNum"> 326 </span> :<span class="lineCov"> 5055 : return BE64_TO_CPU(be_val);</span></a>
+<a name="327"><span class="lineNum"> 327 </span> : : }</a>
+<a name="328"><span class="lineNum"> 328 </span> : : </a>
+<a name="329"><span class="lineNum"> 329 </span> : : /**</a>
+<a name="330"><span class="lineNum"> 330 </span> : : * be32_to_cpu - convert a big-endian uint32_t value</a>
+<a name="331"><span class="lineNum"> 331 </span> : : * @be_val: big-endian value to convert</a>
+<a name="332"><span class="lineNum"> 332 </span> : : */</a>
+<a name="333"><span class="lineNum"> 333 </span> :<span class="lineNoCov"> 0 : static inline uint32_t be32_to_cpu(beint32_t be_val)</span></a>
+<a name="334"><span class="lineNum"> 334 </span> : : {</a>
+<a name="335"><span class="lineNum"> 335 </span> :<span class="lineNoCov"> 0 : return BE32_TO_CPU(be_val);</span></a>
+<a name="336"><span class="lineNum"> 336 </span> : : }</a>
+<a name="337"><span class="lineNum"> 337 </span> : : </a>
+<a name="338"><span class="lineNum"> 338 </span> : : /**</a>
+<a name="339"><span class="lineNum"> 339 </span> : : * be16_to_cpu - convert a big-endian uint16_t value</a>
+<a name="340"><span class="lineNum"> 340 </span> : : * @be_val: big-endian value to convert</a>
+<a name="341"><span class="lineNum"> 341 </span> : : */</a>
+<a name="342"><span class="lineNum"> 342 </span> : : static inline uint16_t be16_to_cpu(beint16_t be_val)</a>
+<a name="343"><span class="lineNum"> 343 </span> : : {</a>
+<a name="344"><span class="lineNum"> 344 </span> : : return BE16_TO_CPU(be_val);</a>
+<a name="345"><span class="lineNum"> 345 </span> : : }</a>
+<a name="346"><span class="lineNum"> 346 </span> : : </a>
+<a name="347"><span class="lineNum"> 347 </span> : : /* Whichever they include first, they get these definitions. */</a>
+<a name="348"><span class="lineNum"> 348 </span> : : #ifdef CCAN_SHORT_TYPES_H</a>
+<a name="349"><span class="lineNum"> 349 </span> : : /**</a>
+<a name="350"><span class="lineNum"> 350 </span> : : * be64/be32/be16 - 64/32/16 bit big-endian representation.</a>
+<a name="351"><span class="lineNum"> 351 </span> : : */</a>
+<a name="352"><span class="lineNum"> 352 </span> : : typedef beint64_t be64;</a>
+<a name="353"><span class="lineNum"> 353 </span> : : typedef beint32_t be32;</a>
+<a name="354"><span class="lineNum"> 354 </span> : : typedef beint16_t be16;</a>
+<a name="355"><span class="lineNum"> 355 </span> : : </a>
+<a name="356"><span class="lineNum"> 356 </span> : : /**</a>
+<a name="357"><span class="lineNum"> 357 </span> : : * le64/le32/le16 - 64/32/16 bit little-endian representation.</a>
+<a name="358"><span class="lineNum"> 358 </span> : : */</a>
+<a name="359"><span class="lineNum"> 359 </span> : : typedef leint64_t le64;</a>
+<a name="360"><span class="lineNum"> 360 </span> : : typedef leint32_t le32;</a>
+<a name="361"><span class="lineNum"> 361 </span> : : typedef leint16_t le16;</a>
+<a name="362"><span class="lineNum"> 362 </span> : : #endif</a>
+<a name="363"><span class="lineNum"> 363 </span> : : #endif /* CCAN_ENDIAN_H */</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/external/gard/ccan/endian/index-sort-b.html b/coverage-report/external/gard/ccan/endian/index-sort-b.html
index 86f6b5c..31609b7 100644
--- a/coverage-report/external/gard/ccan/endian/index-sort-b.html
+++ b/coverage-report/external/gard/ccan/endian/index-sort-b.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">33.3 %</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">40.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="endian.h.gcov.html">endian.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=33 height=10 alt="33.3%"><img src="../../../../snow.png" width=67 height=10 alt="33.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=40 height=10 alt="40.0%"><img src="../../../../snow.png" width=60 height=10 alt="40.0%"></td></tr></table>
</td>
- <td class="coverPerLo">33.3&nbsp;%</td>
- <td class="coverNumLo">4 / 12</td>
+ <td class="coverPerLo">40.0&nbsp;%</td>
+ <td class="coverNumLo">4 / 10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/external/gard/ccan/endian/index-sort-f.html b/coverage-report/external/gard/ccan/endian/index-sort-f.html
index 5e744f5..d0233d3 100644
--- a/coverage-report/external/gard/ccan/endian/index-sort-f.html
+++ b/coverage-report/external/gard/ccan/endian/index-sort-f.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">33.3 %</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">40.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="endian.h.gcov.html">endian.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=33 height=10 alt="33.3%"><img src="../../../../snow.png" width=67 height=10 alt="33.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=40 height=10 alt="40.0%"><img src="../../../../snow.png" width=60 height=10 alt="40.0%"></td></tr></table>
</td>
- <td class="coverPerLo">33.3&nbsp;%</td>
- <td class="coverNumLo">4 / 12</td>
+ <td class="coverPerLo">40.0&nbsp;%</td>
+ <td class="coverNumLo">4 / 10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/external/gard/ccan/endian/index-sort-l.html b/coverage-report/external/gard/ccan/endian/index-sort-l.html
index 257face..5a606ce 100644
--- a/coverage-report/external/gard/ccan/endian/index-sort-l.html
+++ b/coverage-report/external/gard/ccan/endian/index-sort-l.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">33.3 %</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">40.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="endian.h.gcov.html">endian.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=33 height=10 alt="33.3%"><img src="../../../../snow.png" width=67 height=10 alt="33.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=40 height=10 alt="40.0%"><img src="../../../../snow.png" width=60 height=10 alt="40.0%"></td></tr></table>
</td>
- <td class="coverPerLo">33.3&nbsp;%</td>
- <td class="coverNumLo">4 / 12</td>
+ <td class="coverPerLo">40.0&nbsp;%</td>
+ <td class="coverNumLo">4 / 10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/external/gard/ccan/endian/index.html b/coverage-report/external/gard/ccan/endian/index.html
index d807cde..e9e5f1b 100644
--- a/coverage-report/external/gard/ccan/endian/index.html
+++ b/coverage-report/external/gard/ccan/endian/index.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">33.3 %</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">40.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="endian.h.gcov.html">endian.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=33 height=10 alt="33.3%"><img src="../../../../snow.png" width=67 height=10 alt="33.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=40 height=10 alt="40.0%"><img src="../../../../snow.png" width=60 height=10 alt="40.0%"></td></tr></table>
</td>
- <td class="coverPerLo">33.3&nbsp;%</td>
- <td class="coverNumLo">4 / 12</td>
+ <td class="coverPerLo">40.0&nbsp;%</td>
+ <td class="coverNumLo">4 / 10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/external/gard/ccan/list/index-sort-b.html b/coverage-report/external/gard/ccan/list/index-sort-b.html
index a553584..bfb8842 100644
--- a/coverage-report/external/gard/ccan/list/index-sort-b.html
+++ b/coverage-report/external/gard/ccan/list/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/gard/ccan/list/index-sort-f.html b/coverage-report/external/gard/ccan/list/index-sort-f.html
index 2964a38..6c3c8d6 100644
--- a/coverage-report/external/gard/ccan/list/index-sort-f.html
+++ b/coverage-report/external/gard/ccan/list/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/gard/ccan/list/index-sort-l.html b/coverage-report/external/gard/ccan/list/index-sort-l.html
index 0bf7ad6..9b757fa 100644
--- a/coverage-report/external/gard/ccan/list/index-sort-l.html
+++ b/coverage-report/external/gard/ccan/list/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/gard/ccan/list/index.html b/coverage-report/external/gard/ccan/list/index.html
index 743cfdc..6524da3 100644
--- a/coverage-report/external/gard/ccan/list/index.html
+++ b/coverage-report/external/gard/ccan/list/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/gard/ccan/list/list.c.func-sort-c.html b/coverage-report/external/gard/ccan/list/list.c.func-sort-c.html
index 8ad67af..4abf213 100644
--- a/coverage-report/external/gard/ccan/list/list.c.func-sort-c.html
+++ b/coverage-report/external/gard/ccan/list/list.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/gard/ccan/list/list.c.func.html b/coverage-report/external/gard/ccan/list/list.c.func.html
index b59c3db..8859bdb 100644
--- a/coverage-report/external/gard/ccan/list/list.c.func.html
+++ b/coverage-report/external/gard/ccan/list/list.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/gard/ccan/list/list.c.gcov.html b/coverage-report/external/gard/ccan/list/list.c.gcov.html
index 4905d1b..0dac3e4 100644
--- a/coverage-report/external/gard/ccan/list/list.c.gcov.html
+++ b/coverage-report/external/gard/ccan/list/list.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/gard/common/arch_flash_common.c.func-sort-c.html b/coverage-report/external/gard/common/arch_flash_common.c.func-sort-c.html
index 13067cf..7afb427 100644
--- a/coverage-report/external/gard/common/arch_flash_common.c.func-sort-c.html
+++ b/coverage-report/external/gard/common/arch_flash_common.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/external/gard/common/arch_flash_common.c.func.html b/coverage-report/external/gard/common/arch_flash_common.c.func.html
index 44ec617..4016a54 100644
--- a/coverage-report/external/gard/common/arch_flash_common.c.func.html
+++ b/coverage-report/external/gard/common/arch_flash_common.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/external/gard/common/arch_flash_common.c.gcov.html b/coverage-report/external/gard/common/arch_flash_common.c.gcov.html
index 775c147..971f9ee 100644
--- a/coverage-report/external/gard/common/arch_flash_common.c.gcov.html
+++ b/coverage-report/external/gard/common/arch_flash_common.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/external/gard/common/arch_flash_unknown.c.func-sort-c.html b/coverage-report/external/gard/common/arch_flash_unknown.c.func-sort-c.html
index d6690bd..9e5bb32 100644
--- a/coverage-report/external/gard/common/arch_flash_unknown.c.func-sort-c.html
+++ b/coverage-report/external/gard/common/arch_flash_unknown.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/external/gard/common/arch_flash_unknown.c.func.html b/coverage-report/external/gard/common/arch_flash_unknown.c.func.html
index 26a688075..3bf89fc 100644
--- a/coverage-report/external/gard/common/arch_flash_unknown.c.func.html
+++ b/coverage-report/external/gard/common/arch_flash_unknown.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/external/gard/common/arch_flash_unknown.c.gcov.html b/coverage-report/external/gard/common/arch_flash_unknown.c.gcov.html
index 0410382..857e7a3 100644
--- a/coverage-report/external/gard/common/arch_flash_unknown.c.gcov.html
+++ b/coverage-report/external/gard/common/arch_flash_unknown.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/external/gard/common/index-sort-b.html b/coverage-report/external/gard/common/index-sort-b.html
index 885e011..aacad6d 100644
--- a/coverage-report/external/gard/common/index-sort-b.html
+++ b/coverage-report/external/gard/common/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/gard/common/index-sort-f.html b/coverage-report/external/gard/common/index-sort-f.html
index ba08e66..1a33ef4 100644
--- a/coverage-report/external/gard/common/index-sort-f.html
+++ b/coverage-report/external/gard/common/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/gard/common/index-sort-l.html b/coverage-report/external/gard/common/index-sort-l.html
index 8382dad..e3ad7e8 100644
--- a/coverage-report/external/gard/common/index-sort-l.html
+++ b/coverage-report/external/gard/common/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/gard/common/index.html b/coverage-report/external/gard/common/index.html
index a6da1f8..4b04d47 100644
--- a/coverage-report/external/gard/common/index.html
+++ b/coverage-report/external/gard/common/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/gard/gard.c.func-sort-c.html b/coverage-report/external/gard/gard.c.func-sort-c.html
index 4a69e43..be21f37 100644
--- a/coverage-report/external/gard/gard.c.func-sort-c.html
+++ b/coverage-report/external/gard/gard.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">326</td>
- <td class="headerCovTableEntry">468</td>
- <td class="headerCovTableEntryLo">69.7 %</td>
+ <td class="headerCovTableEntry">329</td>
+ <td class="headerCovTableEntry">464</td>
+ <td class="headerCovTableEntryLo">70.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">21</td>
<td class="headerCovTableEntry">22</td>
- <td class="headerCovTableEntry">23</td>
- <td class="headerCovTableEntryHi">95.7 %</td>
+ <td class="headerCovTableEntryHi">95.5 %</td>
</tr>
<tr>
<td></td>
@@ -73,71 +73,71 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#766">usage</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#770">usage</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#515">do_show</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#519">do_show</a></td>
<td class="coverFnHi">4</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#589">reset_partition</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#593">reset_partition</a></td>
<td class="coverFnHi">4</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#402">count_records</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#406">count_records</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#532">do_clear_i</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#536">do_clear_i</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#484">do_show_i</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#488">do_show_i</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#616">do_clear</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#620">do_clear</a></td>
<td class="coverFnHi">10</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#346">do_iterate</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#350">do_iterate</a></td>
<td class="coverFnHi">10</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#424">find_longest_path</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#428">find_longest_path</a></td>
<td class="coverFnHi">10</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#413">count_valid_records</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#417">count_valid_records</a></td>
<td class="coverFnHi">14</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#449">do_list</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#453">do_list</a></td>
<td class="coverFnHi">14</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#199">deconfig_reason_str</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#203">deconfig_reason_str</a></td>
<td class="coverFnHi">18</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#639">do_create</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#643">do_create</a></td>
<td class="coverFnHi">18</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#275">parse_path</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#279">parse_path</a></td>
<td class="coverFnHi">18</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#440">draw_ruler</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#444">draw_ruler</a></td>
<td class="coverFnHi">20</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#243">format_path</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#247">format_path</a></td>
<td class="coverFnHi">28</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#701">check_gard_partition</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#705">check_gard_partition</a></td>
<td class="coverFnHi">46</td>
</tr>
<tr>
@@ -145,21 +145,17 @@
<td class="coverFnHi">46</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#807">main</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#813">main</a></td>
<td class="coverFnHi">48</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#185">str_to_target_type</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#189">str_to_target_type</a></td>
<td class="coverFnHi">72</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#377">__gard_next</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#381">__gard_next</a></td>
<td class="coverFnHi">104</td>
</tr>
- <tr>
- <td class="coverFn"><a href="gard.c.gcov.html#174">target_type_to_str</a></td>
- <td class="coverFnHi">194</td>
- </tr>
</table>
<br>
</center>
diff --git a/coverage-report/external/gard/gard.c.func.html b/coverage-report/external/gard/gard.c.func.html
index 278e39b..c7e5624 100644
--- a/coverage-report/external/gard/gard.c.func.html
+++ b/coverage-report/external/gard/gard.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">326</td>
- <td class="headerCovTableEntry">468</td>
- <td class="headerCovTableEntryLo">69.7 %</td>
+ <td class="headerCovTableEntry">329</td>
+ <td class="headerCovTableEntry">464</td>
+ <td class="headerCovTableEntryLo">70.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">21</td>
<td class="headerCovTableEntry">22</td>
- <td class="headerCovTableEntry">23</td>
- <td class="headerCovTableEntryHi">95.7 %</td>
+ <td class="headerCovTableEntryHi">95.5 %</td>
</tr>
<tr>
<td></td>
@@ -69,75 +69,75 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="gard.c.func-sort-c.html"><img src="../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#377">__gard_next</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#381">__gard_next</a></td>
<td class="coverFnHi">104</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#701">check_gard_partition</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#705">check_gard_partition</a></td>
<td class="coverFnHi">46</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#402">count_records</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#406">count_records</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#413">count_valid_records</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#417">count_valid_records</a></td>
<td class="coverFnHi">14</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#199">deconfig_reason_str</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#203">deconfig_reason_str</a></td>
<td class="coverFnHi">18</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#616">do_clear</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#620">do_clear</a></td>
<td class="coverFnHi">10</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#532">do_clear_i</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#536">do_clear_i</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#639">do_create</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#643">do_create</a></td>
<td class="coverFnHi">18</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#346">do_iterate</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#350">do_iterate</a></td>
<td class="coverFnHi">10</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#449">do_list</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#453">do_list</a></td>
<td class="coverFnHi">14</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#515">do_show</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#519">do_show</a></td>
<td class="coverFnHi">4</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#484">do_show_i</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#488">do_show_i</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#440">draw_ruler</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#444">draw_ruler</a></td>
<td class="coverFnHi">20</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#424">find_longest_path</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#428">find_longest_path</a></td>
<td class="coverFnHi">10</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#243">format_path</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#247">format_path</a></td>
<td class="coverFnHi">28</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#807">main</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#813">main</a></td>
<td class="coverFnHi">48</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#275">parse_path</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#279">parse_path</a></td>
<td class="coverFnHi">18</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#589">reset_partition</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#593">reset_partition</a></td>
<td class="coverFnHi">4</td>
</tr>
<tr>
@@ -149,15 +149,11 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#185">str_to_target_type</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#189">str_to_target_type</a></td>
<td class="coverFnHi">72</td>
</tr>
<tr>
- <td class="coverFn"><a href="gard.c.gcov.html#174">target_type_to_str</a></td>
- <td class="coverFnHi">194</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="gard.c.gcov.html#766">usage</a></td>
+ <td class="coverFn"><a href="gard.c.gcov.html#770">usage</a></td>
<td class="coverFnHi">2</td>
</tr>
</table>
diff --git a/coverage-report/external/gard/gard.c.gcov.html b/coverage-report/external/gard/gard.c.gcov.html
index 9647414..3543cfc 100644
--- a/coverage-report/external/gard/gard.c.gcov.html
+++ b/coverage-report/external/gard/gard.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">326</td>
- <td class="headerCovTableEntry">468</td>
- <td class="headerCovTableEntryLo">69.7 %</td>
+ <td class="headerCovTableEntry">329</td>
+ <td class="headerCovTableEntry">464</td>
+ <td class="headerCovTableEntryLo">70.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">21</td>
<td class="headerCovTableEntry">22</td>
- <td class="headerCovTableEntry">23</td>
- <td class="headerCovTableEntryHi">95.7 %</td>
+ <td class="headerCovTableEntryHi">95.5 %</td>
</tr>
<tr>
<td></td>
@@ -135,56 +135,56 @@
<a name="64"><span class="lineNum"> 64 </span> :<span class="lineNoCov"> 0 : switch (rc) {</span></a>
<a name="65"><span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : case FFS_ERR_BAD_MAGIC:</span></a>
<a name="66"><span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;libffs bad magic\n&quot;);</span></a>
-<a name="67"><span class="lineNum"> 67 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="67"><span class="lineNum"> 67 </span> : : break;</a>
<a name="68"><span class="lineNum"> 68 </span> :<span class="lineNoCov"> 0 : case FFS_ERR_BAD_VERSION:</span></a>
<a name="69"><span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;libffs bad version\n&quot;);</span></a>
-<a name="70"><span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="70"><span class="lineNum"> 70 </span> : : break;</a>
<a name="71"><span class="lineNum"> 71 </span> :<span class="lineNoCov"> 0 : case FFS_ERR_BAD_CKSUM:</span></a>
<a name="72"><span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;libffs bad check sum\n&quot;);</span></a>
-<a name="73"><span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="73"><span class="lineNum"> 73 </span> : : break;</a>
<a name="74"><span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : case FFS_ERR_PART_NOT_FOUND:</span></a>
<a name="75"><span class="lineNum"> 75 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;libffs flash partition not found\n&quot;);</span></a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="76"><span class="lineNum"> 76 </span> : : break;</a>
<a name="77"><span class="lineNum"> 77 </span> : : /* ------- */</a>
<a name="78"><span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : case FLASH_ERR_MALLOC_FAILED:</span></a>
<a name="79"><span class="lineNum"> 79 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;libflash malloc failed\n&quot;);</span></a>
-<a name="80"><span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="80"><span class="lineNum"> 80 </span> : : break;</a>
<a name="81"><span class="lineNum"> 81 </span> :<span class="lineNoCov"> 0 : case FLASH_ERR_CHIP_UNKNOWN:</span></a>
<a name="82"><span class="lineNum"> 82 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;libflash unknown flash chip\n&quot;);</span></a>
-<a name="83"><span class="lineNum"> 83 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="83"><span class="lineNum"> 83 </span> : : break;</a>
<a name="84"><span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : case FLASH_ERR_PARM_ERROR:</span></a>
<a name="85"><span class="lineNum"> 85 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;libflash parameter error\n&quot;);</span></a>
-<a name="86"><span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="86"><span class="lineNum"> 86 </span> : : break;</a>
<a name="87"><span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : case FLASH_ERR_ERASE_BOUNDARY:</span></a>
<a name="88"><span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;libflash erase boundary error\n&quot;);</span></a>
-<a name="89"><span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="89"><span class="lineNum"> 89 </span> : : break;</a>
<a name="90"><span class="lineNum"> 90 </span> :<span class="lineNoCov"> 0 : case FLASH_ERR_WREN_TIMEOUT:</span></a>
<a name="91"><span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;libflash WREN timeout\n&quot;);</span></a>
-<a name="92"><span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="92"><span class="lineNum"> 92 </span> : : break;</a>
<a name="93"><span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : case FLASH_ERR_WIP_TIMEOUT:</span></a>
<a name="94"><span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;libflash WIP timeout\n&quot;);</span></a>
-<a name="95"><span class="lineNum"> 95 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="95"><span class="lineNum"> 95 </span> : : break;</a>
<a name="96"><span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : case FLASH_ERR_VERIFY_FAILURE:</span></a>
<a name="97"><span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;libflash verification failure\n&quot;);</span></a>
-<a name="98"><span class="lineNum"> 98 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="98"><span class="lineNum"> 98 </span> : : break;</a>
<a name="99"><span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : case FLASH_ERR_4B_NOT_SUPPORTED:</span></a>
<a name="100"><span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;libflash 4byte mode not supported\n&quot;);</span></a>
-<a name="101"><span class="lineNum"> 101 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="101"><span class="lineNum"> 101 </span> : : break;</a>
<a name="102"><span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : case FLASH_ERR_CTRL_CONFIG_MISMATCH:</span></a>
<a name="103"><span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;libflash control config mismatch\n&quot;);</span></a>
-<a name="104"><span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="104"><span class="lineNum"> 104 </span> : : break;</a>
<a name="105"><span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : case FLASH_ERR_CHIP_ER_NOT_SUPPORTED:</span></a>
<a name="106"><span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;libflash chip not supported\n&quot;);</span></a>
-<a name="107"><span class="lineNum"> 107 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="107"><span class="lineNum"> 107 </span> : : break;</a>
<a name="108"><span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : case FLASH_ERR_CTRL_CMD_UNSUPPORTED:</span></a>
<a name="109"><span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;libflash unsupported control command\n&quot;);</span></a>
-<a name="110"><span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="110"><span class="lineNum"> 110 </span> : : break;</a>
<a name="111"><span class="lineNum"> 111 </span> :<span class="lineNoCov"> 0 : case FLASH_ERR_CTRL_TIMEOUT:</span></a>
<a name="112"><span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;libflash control timeout\n&quot;);</span></a>
-<a name="113"><span class="lineNum"> 113 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="113"><span class="lineNum"> 113 </span> : : break;</a>
<a name="114"><span class="lineNum"> 114 </span> :<span class="lineNoCov"> 0 : case FLASH_ERR_ECC_INVALID:</span></a>
<a name="115"><span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;libflash ecc invalid\n&quot;);</span></a>
-<a name="116"><span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="116"><span class="lineNum"> 116 </span> : : break;</a>
<a name="117"><span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : default:</span></a>
<a name="118"><span class="lineNum"> 118 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;A libflash/libffs error has occurred %d\n&quot;, rc);</span></a>
<a name="119"><span class="lineNum"> 119 </span> : : }</a>
@@ -228,855 +228,864 @@
<a name="157"><span class="lineNum"> 157 </span> : : set_chip_gen(p9_chip_units);</a>
<a name="158"><span class="lineNum"> 158 </span> : : return;</a>
<a name="159"><span class="lineNum"> 159 </span> : : </a>
-<a name="160"><span class="lineNum"> 160 </span> : : default:</a>
-<a name="161"><span class="lineNum"> 161 </span> : : fprintf(stderr, &quot;Unsupported processor (pvr %#x)! Set the processor generation manually with -8 or -9\n&quot;, pvr);</a>
-<a name="162"><span class="lineNum"> 162 </span> : : exit(1);</a>
-<a name="163"><span class="lineNum"> 163 </span> : : }</a>
-<a name="164"><span class="lineNum"> 164 </span> : : }</a>
-<a name="165"><span class="lineNum"> 165 </span> : : #else</a>
-<a name="166"><span class="lineNum"> 166 </span> :<span class="lineCov"> 30 : static void guess_chip_gen(void)</span></a>
-<a name="167"><span class="lineNum"> 167 </span> : : {</a>
-<a name="168"><span class="lineNum"> 168 </span> : : #ifdef ASSUME_P8</a>
-<a name="169"><span class="lineNum"> 169 </span> : : set_chip_gen(p8_chip_units);</a>
-<a name="170"><span class="lineNum"> 170 </span> : : #else</a>
-<a name="171"><span class="lineNum"> 171 </span> :<span class="lineCov"> 30 : set_chip_gen(p9_chip_units);</span></a>
-<a name="172"><span class="lineNum"> 172 </span> : : #endif</a>
-<a name="173"><span class="lineNum"> 173 </span> :<span class="lineCov"> 30 : }</span></a>
-<a name="174"><span class="lineNum"> 174 </span> : : #endif</a>
-<a name="175"><span class="lineNum"> 175 </span> : : </a>
-<a name="176"><span class="lineNum"> 176 </span> :<span class="lineCov"> 194 : static const char *target_type_to_str(int type)</span></a>
-<a name="177"><span class="lineNum"> 177 </span> : : {</a>
-<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 194 : int i;</span></a>
+<a name="160"><span class="lineNum"> 160 </span> : : case 0x0080: /* power10 */</a>
+<a name="161"><span class="lineNum"> 161 </span> : : set_chip_gen(p10_chip_units);</a>
+<a name="162"><span class="lineNum"> 162 </span> : : return;</a>
+<a name="163"><span class="lineNum"> 163 </span> : : </a>
+<a name="164"><span class="lineNum"> 164 </span> : : default:</a>
+<a name="165"><span class="lineNum"> 165 </span> : : fprintf(stderr, &quot;Unsupported processor (pvr %#x)! Set the processor generation manually with -8, -9 or -0\n&quot;, pvr);</a>
+<a name="166"><span class="lineNum"> 166 </span> : : exit(1);</a>
+<a name="167"><span class="lineNum"> 167 </span> : : }</a>
+<a name="168"><span class="lineNum"> 168 </span> : : }</a>
+<a name="169"><span class="lineNum"> 169 </span> : : #else</a>
+<a name="170"><span class="lineNum"> 170 </span> :<span class="lineCov"> 30 : static void guess_chip_gen(void)</span></a>
+<a name="171"><span class="lineNum"> 171 </span> : : {</a>
+<a name="172"><span class="lineNum"> 172 </span> : : #ifdef ASSUME_P8</a>
+<a name="173"><span class="lineNum"> 173 </span> : : set_chip_gen(p8_chip_units);</a>
+<a name="174"><span class="lineNum"> 174 </span> : : #else</a>
+<a name="175"><span class="lineNum"> 175 </span> :<span class="lineCov"> 30 : set_chip_gen(p9_chip_units);</span></a>
+<a name="176"><span class="lineNum"> 176 </span> : : #endif</a>
+<a name="177"><span class="lineNum"> 177 </span> :<span class="lineCov"> 30 : }</span></a>
+<a name="178"><span class="lineNum"> 178 </span> : : #endif</a>
<a name="179"><span class="lineNum"> 179 </span> : : </a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 4658 : for (i = 0; i &lt; chip_unit_count; i++)</span></a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 4658 : if (chip_units[i].type == type)</span></a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 194 : return chip_units[i].desc;</span></a>
+<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 194 : static const char *target_type_to_str(int type)</span></a>
+<a name="181"><span class="lineNum"> 181 </span> : : {</a>
+<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 194 : int i;</span></a>
<a name="183"><span class="lineNum"> 183 </span> : : </a>
-<a name="184"><span class="lineNum"> 184 </span> : : return &quot;UNKNOWN&quot;;</a>
-<a name="185"><span class="lineNum"> 185 </span> : : }</a>
-<a name="186"><span class="lineNum"> 186 </span> : : </a>
-<a name="187"><span class="lineNum"> 187 </span> :<span class="lineCov"> 72 : static int str_to_target_type(const char *path)</span></a>
-<a name="188"><span class="lineNum"> 188 </span> : : {</a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 72 : int i, len;</span></a>
+<a name="184"><span class="lineNum"> 184 </span> :<span class="lineCov"> 4658 : for (i = 0; i &lt; chip_unit_count; i++)</span></a>
+<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 4658 : if (chip_units[i].type == type)</span></a>
+<a name="186"><span class="lineNum"> 186 </span> :<span class="lineCov"> 194 : return chip_units[i].desc;</span></a>
+<a name="187"><span class="lineNum"> 187 </span> : : </a>
+<a name="188"><span class="lineNum"> 188 </span> : : return &quot;UNKNOWN&quot;;</a>
+<a name="189"><span class="lineNum"> 189 </span> : : }</a>
<a name="190"><span class="lineNum"> 190 </span> : : </a>
-<a name="191"><span class="lineNum"> 191 </span> :<span class="lineCov"> 1826 : for (i = 0; i &lt; chip_unit_count; i++) {</span></a>
-<a name="192"><span class="lineNum"> 192 </span> :<span class="lineCov"> 1822 : len = strlen(chip_units[i].desc);</span></a>
-<a name="193"><span class="lineNum"> 193 </span> : : </a>
-<a name="194"><span class="lineNum"> 194 </span> :<span class="lineCov"> 1822 : if (!strncasecmp(chip_units[i].desc, path, len))</span></a>
-<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 68 : return chip_units[i].type; /* match! */</span></a>
-<a name="196"><span class="lineNum"> 196 </span> : : }</a>
+<a name="191"><span class="lineNum"> 191 </span> :<span class="lineCov"> 72 : static int str_to_target_type(const char *path)</span></a>
+<a name="192"><span class="lineNum"> 192 </span> : : {</a>
+<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 72 : int i, len;</span></a>
+<a name="194"><span class="lineNum"> 194 </span> : : </a>
+<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 1826 : for (i = 0; i &lt; chip_unit_count; i++) {</span></a>
+<a name="196"><span class="lineNum"> 196 </span> :<span class="lineCov"> 1822 : len = strlen(chip_units[i].desc);</span></a>
<a name="197"><span class="lineNum"> 197 </span> : : </a>
-<a name="198"><span class="lineNum"> 198 </span> : : return -1;</a>
-<a name="199"><span class="lineNum"> 199 </span> : : }</a>
-<a name="200"><span class="lineNum"> 200 </span> : : </a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 18 : static const char *deconfig_reason_str(enum gard_reason reason)</span></a>
-<a name="202"><span class="lineNum"> 202 </span> : : {</a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 18 : switch (reason) {</span></a>
-<a name="204"><span class="lineNum"> 204 </span> : : case GARD_NO_REASON:</a>
-<a name="205"><span class="lineNum"> 205 </span> : : return &quot;None&quot;;</a>
-<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 10 : case GARD_MANUAL:</span></a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 10 : return &quot;Manual&quot;;</span></a>
-<a name="208"><span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : case GARD_UNRECOVERABLE:</span></a>
-<a name="209"><span class="lineNum"> 209 </span> :<span class="lineNoCov"> 0 : return &quot;Unrecoverable&quot;;</span></a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 2 : case GARD_FATAL:</span></a>
-<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 2 : return &quot;Fatal&quot;;</span></a>
-<a name="212"><span class="lineNum"> 212 </span> :<span class="lineCov"> 6 : case GARD_PREDICTIVE:</span></a>
-<a name="213"><span class="lineNum"> 213 </span> :<span class="lineCov"> 6 : return &quot;Predictive&quot;;</span></a>
-<a name="214"><span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : case GARD_POWER:</span></a>
-<a name="215"><span class="lineNum"> 215 </span> :<span class="lineNoCov"> 0 : return &quot;Power&quot;; // What does this even mean?</span></a>
-<a name="216"><span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : case GARD_HYP:</span></a>
-<a name="217"><span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : return &quot;Hypervisor&quot;;</span></a>
-<a name="218"><span class="lineNum"> 218 </span> :<span class="lineNoCov"> 0 : case GARD_RECONFIG:</span></a>
-<a name="219"><span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : return &quot;Reconfig&quot;;</span></a>
-<a name="220"><span class="lineNum"> 220 </span> :<span class="lineNoCov"> 0 : default:</span></a>
-<a name="221"><span class="lineNum"> 221 </span> :<span class="lineNoCov"> 0 : return &quot;Unknown&quot;;</span></a>
-<a name="222"><span class="lineNum"> 222 </span> : : }</a>
-<a name="223"><span class="lineNum"> 223 </span> : : };</a>
-<a name="224"><span class="lineNum"> 224 </span> : : </a>
-<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 4 : static const char *path_type_to_str(enum path_type t)</span></a>
-<a name="226"><span class="lineNum"> 226 </span> : : {</a>
-<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 4 : switch (t) {</span></a>
-<a name="228"><span class="lineNum"> 228 </span> : : case PATH_NA:</a>
-<a name="229"><span class="lineNum"> 229 </span> : : return &quot;not applicable&quot;;</a>
-<a name="230"><span class="lineNum"> 230 </span> : : case PATH_AFFINITY:</a>
-<a name="231"><span class="lineNum"> 231 </span> : : return &quot;affinity&quot;;</a>
-<a name="232"><span class="lineNum"> 232 </span> : : case PATH_PHYSICAL:</a>
-<a name="233"><span class="lineNum"> 233 </span> : : return &quot;physical&quot;;</a>
-<a name="234"><span class="lineNum"> 234 </span> : : case PATH_DEVICE:</a>
-<a name="235"><span class="lineNum"> 235 </span> : : return &quot;device&quot;;</a>
-<a name="236"><span class="lineNum"> 236 </span> : : case PATH_POWER:</a>
-<a name="237"><span class="lineNum"> 237 </span> : : return &quot;power&quot;;</a>
-<a name="238"><span class="lineNum"> 238 </span> : : }</a>
-<a name="239"><span class="lineNum"> 239 </span> : : return &quot;Unknown&quot;;</a>
-<a name="240"><span class="lineNum"> 240 </span> : : }</a>
-<a name="241"><span class="lineNum"> 241 </span> : : </a>
-<a name="242"><span class="lineNum"> 242 </span> : : /*</a>
-<a name="243"><span class="lineNum"> 243 </span> : : * NB: buffer is assumped to be MAX_PATH_SIZE</a>
-<a name="244"><span class="lineNum"> 244 </span> : : */</a>
-<a name="245"><span class="lineNum"> 245 </span> :<span class="lineCov"> 28 : static char *format_path(struct entity_path *path, char *buffer)</span></a>
-<a name="246"><span class="lineNum"> 246 </span> : : {</a>
-<a name="247"><span class="lineNum"> 247 </span> :<span class="lineCov"> 28 : int elements = path-&gt;type_size &amp; PATH_ELEMENTS_MASK;</span></a>
-<a name="248"><span class="lineNum"> 248 </span> :<span class="lineCov"> 28 : int i, offset = 0;</span></a>
-<a name="249"><span class="lineNum"> 249 </span> : : </a>
-<a name="250"><span class="lineNum"> 250 </span> :<span class="lineCov"> 140 : for (i = 0; i &lt; elements; i++) {</span></a>
-<a name="251"><span class="lineNum"> 251 </span> :<span class="lineCov"> 112 : const struct path_element *e = &amp;path-&gt;path_elements[i];</span></a>
-<a name="252"><span class="lineNum"> 252 </span> : : </a>
-<a name="253"><span class="lineNum"> 253 </span> :<span class="lineCov"> 112 : offset += sprintf(buffer + offset, &quot;/%s%d&quot;,</span></a>
-<a name="254"><span class="lineNum"> 254 </span> :<span class="lineCov"> 112 : target_type_to_str(e-&gt;target_type),</span></a>
-<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 112 : e-&gt;instance);</span></a>
-<a name="256"><span class="lineNum"> 256 </span> : : }</a>
-<a name="257"><span class="lineNum"> 257 </span> : : </a>
-<a name="258"><span class="lineNum"> 258 </span> :<span class="lineCov"> 28 : return buffer;</span></a>
-<a name="259"><span class="lineNum"> 259 </span> : : }</a>
-<a name="260"><span class="lineNum"> 260 </span> : : </a>
-<a name="261"><span class="lineNum"> 261 </span> : : /*</a>
-<a name="262"><span class="lineNum"> 262 </span> : : * parses a Path string into the entity_path structured provided.</a>
-<a name="263"><span class="lineNum"> 263 </span> : : *</a>
-<a name="264"><span class="lineNum"> 264 </span> : : * str - In param, String to parse</a>
-<a name="265"><span class="lineNum"> 265 </span> : : * parsed - Out param, resultant entity_path</a>
-<a name="266"><span class="lineNum"> 266 </span> : : *</a>
-<a name="267"><span class="lineNum"> 267 </span> : : * e.g.</a>
-<a name="268"><span class="lineNum"> 268 </span> : : *</a>
-<a name="269"><span class="lineNum"> 269 </span> : : * &quot;/Sys0/Node0/Proc1&quot; -&gt; {</a>
-<a name="270"><span class="lineNum"> 270 </span> : : * type_size = 0x23,</a>
-<a name="271"><span class="lineNum"> 271 </span> : : *</a>
-<a name="272"><span class="lineNum"> 272 </span> : : * path_element[0] = {0, 0}</a>
-<a name="273"><span class="lineNum"> 273 </span> : : * path_element[1] = {1, 0}</a>
-<a name="274"><span class="lineNum"> 274 </span> : : * path_element[2] = {2, 1}</a>
-<a name="275"><span class="lineNum"> 275 </span> : : * }</a>
-<a name="276"><span class="lineNum"> 276 </span> : : */</a>
-<a name="277"><span class="lineNum"> 277 </span> :<span class="lineCov"> 18 : static int parse_path(const char *str, struct entity_path *parsed)</span></a>
-<a name="278"><span class="lineNum"> 278 </span> : : {</a>
-<a name="279"><span class="lineNum"> 279 </span> :<span class="lineCov"> 18 : int unit_count = 0;</span></a>
-<a name="280"><span class="lineNum"> 280 </span> : : </a>
-<a name="281"><span class="lineNum"> 281 </span> :<span class="lineCov"> 18 : memset(parsed, 0, sizeof(*parsed));</span></a>
-<a name="282"><span class="lineNum"> 282 </span> : : </a>
-<a name="283"><span class="lineNum"> 283 </span> :<span class="lineCov"> 82 : while (*str != '\0') {</span></a>
-<a name="284"><span class="lineNum"> 284 </span> :<span class="lineCov"> 72 : int unit_id = str_to_target_type(++str); /* ++ skips the '/' */</span></a>
-<a name="285"><span class="lineNum"> 285 </span> :<span class="lineCov"> 72 : long instance;</span></a>
-<a name="286"><span class="lineNum"> 286 </span> :<span class="lineCov"> 72 : char *end;</span></a>
-<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 72 : size_t len;</span></a>
-<a name="288"><span class="lineNum"> 288 </span> : : </a>
-<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 72 : if (unit_count &gt; MAX_PATH_ELEMENTS - 1) {</span></a>
-<a name="290"><span class="lineNum"> 290 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;Path has more than 10 components!\n&quot;);</span></a>
-<a name="291"><span class="lineNum"> 291 </span> :<span class="lineCov"> 8 : return -1;</span></a>
-<a name="292"><span class="lineNum"> 292 </span> : : }</a>
-<a name="293"><span class="lineNum"> 293 </span> : : </a>
-<a name="294"><span class="lineNum"> 294 </span> : : /* find the type Id of this component */</a>
-<a name="295"><span class="lineNum"> 295 </span> :<span class="lineCov"> 70 : if (unit_id &lt; 0) { /* unknown unit, bail out */</span></a>
-<a name="296"><span class="lineNum"> 296 </span> :<span class="lineCov"> 4 : fprintf(stderr, &quot;Unknown unit at: '%s'\n&quot;, str);</span></a>
-<a name="297"><span class="lineNum"> 297 </span> :<span class="lineCov"> 4 : return -1;</span></a>
-<a name="298"><span class="lineNum"> 298 </span> : : }</a>
-<a name="299"><span class="lineNum"> 299 </span> : : </a>
-<a name="300"><span class="lineNum"> 300 </span> :<span class="lineCov"> 66 : parsed-&gt;path_elements[unit_count].target_type = unit_id;</span></a>
-<a name="301"><span class="lineNum"> 301 </span> : : </a>
-<a name="302"><span class="lineNum"> 302 </span> : : /* now parse the instance # */</a>
-<a name="303"><span class="lineNum"> 303 </span> :<span class="lineCov"> 66 : len = strlen(target_type_to_str(unit_id));</span></a>
-<a name="304"><span class="lineNum"> 304 </span> :<span class="lineCov"> 66 : instance = strtol(str + len, &amp;end, 10);</span></a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 1822 : if (!strncasecmp(chip_units[i].desc, path, len))</span></a>
+<a name="199"><span class="lineNum"> 199 </span> :<span class="lineCov"> 68 : return chip_units[i].type; /* match! */</span></a>
+<a name="200"><span class="lineNum"> 200 </span> : : }</a>
+<a name="201"><span class="lineNum"> 201 </span> : : </a>
+<a name="202"><span class="lineNum"> 202 </span> : : return -1;</a>
+<a name="203"><span class="lineNum"> 203 </span> : : }</a>
+<a name="204"><span class="lineNum"> 204 </span> : : </a>
+<a name="205"><span class="lineNum"> 205 </span> :<span class="lineCov"> 18 : static const char *deconfig_reason_str(enum gard_reason reason)</span></a>
+<a name="206"><span class="lineNum"> 206 </span> : : {</a>
+<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 18 : switch (reason) {</span></a>
+<a name="208"><span class="lineNum"> 208 </span> : : case GARD_NO_REASON:</a>
+<a name="209"><span class="lineNum"> 209 </span> : : return &quot;None&quot;;</a>
+<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 10 : case GARD_MANUAL:</span></a>
+<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 10 : return &quot;Manual&quot;;</span></a>
+<a name="212"><span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : case GARD_UNRECOVERABLE:</span></a>
+<a name="213"><span class="lineNum"> 213 </span> :<span class="lineNoCov"> 0 : return &quot;Unrecoverable&quot;;</span></a>
+<a name="214"><span class="lineNum"> 214 </span> :<span class="lineCov"> 2 : case GARD_FATAL:</span></a>
+<a name="215"><span class="lineNum"> 215 </span> :<span class="lineCov"> 2 : return &quot;Fatal&quot;;</span></a>
+<a name="216"><span class="lineNum"> 216 </span> :<span class="lineCov"> 6 : case GARD_PREDICTIVE:</span></a>
+<a name="217"><span class="lineNum"> 217 </span> :<span class="lineCov"> 6 : return &quot;Predictive&quot;;</span></a>
+<a name="218"><span class="lineNum"> 218 </span> :<span class="lineNoCov"> 0 : case GARD_POWER:</span></a>
+<a name="219"><span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : return &quot;Power&quot;; // What does this even mean?</span></a>
+<a name="220"><span class="lineNum"> 220 </span> :<span class="lineNoCov"> 0 : case GARD_HYP:</span></a>
+<a name="221"><span class="lineNum"> 221 </span> :<span class="lineNoCov"> 0 : return &quot;Hypervisor&quot;;</span></a>
+<a name="222"><span class="lineNum"> 222 </span> :<span class="lineNoCov"> 0 : case GARD_RECONFIG:</span></a>
+<a name="223"><span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : return &quot;Reconfig&quot;;</span></a>
+<a name="224"><span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="225"><span class="lineNum"> 225 </span> :<span class="lineNoCov"> 0 : return &quot;Unknown&quot;;</span></a>
+<a name="226"><span class="lineNum"> 226 </span> : : }</a>
+<a name="227"><span class="lineNum"> 227 </span> : : };</a>
+<a name="228"><span class="lineNum"> 228 </span> : : </a>
+<a name="229"><span class="lineNum"> 229 </span> :<span class="lineCov"> 4 : static const char *path_type_to_str(enum path_type t)</span></a>
+<a name="230"><span class="lineNum"> 230 </span> : : {</a>
+<a name="231"><span class="lineNum"> 231 </span> :<span class="lineCov"> 4 : switch (t) {</span></a>
+<a name="232"><span class="lineNum"> 232 </span> : : case PATH_NA:</a>
+<a name="233"><span class="lineNum"> 233 </span> : : return &quot;not applicable&quot;;</a>
+<a name="234"><span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : case PATH_AFFINITY:</span></a>
+<a name="235"><span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : return &quot;affinity&quot;;</span></a>
+<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 4 : case PATH_PHYSICAL:</span></a>
+<a name="237"><span class="lineNum"> 237 </span> :<span class="lineCov"> 4 : return &quot;physical&quot;;</span></a>
+<a name="238"><span class="lineNum"> 238 </span> :<span class="lineNoCov"> 0 : case PATH_DEVICE:</span></a>
+<a name="239"><span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : return &quot;device&quot;;</span></a>
+<a name="240"><span class="lineNum"> 240 </span> :<span class="lineNoCov"> 0 : case PATH_POWER:</span></a>
+<a name="241"><span class="lineNum"> 241 </span> :<span class="lineNoCov"> 0 : return &quot;power&quot;;</span></a>
+<a name="242"><span class="lineNum"> 242 </span> : : }</a>
+<a name="243"><span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : return &quot;Unknown&quot;;</span></a>
+<a name="244"><span class="lineNum"> 244 </span> : : }</a>
+<a name="245"><span class="lineNum"> 245 </span> : : </a>
+<a name="246"><span class="lineNum"> 246 </span> : : /*</a>
+<a name="247"><span class="lineNum"> 247 </span> : : * NB: buffer is assumped to be MAX_PATH_SIZE</a>
+<a name="248"><span class="lineNum"> 248 </span> : : */</a>
+<a name="249"><span class="lineNum"> 249 </span> :<span class="lineCov"> 28 : static char *format_path(struct entity_path *path, char *buffer)</span></a>
+<a name="250"><span class="lineNum"> 250 </span> : : {</a>
+<a name="251"><span class="lineNum"> 251 </span> :<span class="lineCov"> 28 : int elements = path-&gt;type_size &amp; PATH_ELEMENTS_MASK;</span></a>
+<a name="252"><span class="lineNum"> 252 </span> :<span class="lineCov"> 28 : int i, offset = 0;</span></a>
+<a name="253"><span class="lineNum"> 253 </span> : : </a>
+<a name="254"><span class="lineNum"> 254 </span> :<span class="lineCov"> 140 : for (i = 0; i &lt; elements; i++) {</span></a>
+<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 112 : const struct path_element *e = &amp;path-&gt;path_elements[i];</span></a>
+<a name="256"><span class="lineNum"> 256 </span> : : </a>
+<a name="257"><span class="lineNum"> 257 </span> :<span class="lineCov"> 112 : offset += sprintf(buffer + offset, &quot;/%s%d&quot;,</span></a>
+<a name="258"><span class="lineNum"> 258 </span> :<span class="lineCov"> 112 : target_type_to_str(e-&gt;target_type),</span></a>
+<a name="259"><span class="lineNum"> 259 </span> :<span class="lineCov"> 112 : e-&gt;instance);</span></a>
+<a name="260"><span class="lineNum"> 260 </span> : : }</a>
+<a name="261"><span class="lineNum"> 261 </span> : : </a>
+<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 28 : return buffer;</span></a>
+<a name="263"><span class="lineNum"> 263 </span> : : }</a>
+<a name="264"><span class="lineNum"> 264 </span> : : </a>
+<a name="265"><span class="lineNum"> 265 </span> : : /*</a>
+<a name="266"><span class="lineNum"> 266 </span> : : * parses a Path string into the entity_path structured provided.</a>
+<a name="267"><span class="lineNum"> 267 </span> : : *</a>
+<a name="268"><span class="lineNum"> 268 </span> : : * str - In param, String to parse</a>
+<a name="269"><span class="lineNum"> 269 </span> : : * parsed - Out param, resultant entity_path</a>
+<a name="270"><span class="lineNum"> 270 </span> : : *</a>
+<a name="271"><span class="lineNum"> 271 </span> : : * e.g.</a>
+<a name="272"><span class="lineNum"> 272 </span> : : *</a>
+<a name="273"><span class="lineNum"> 273 </span> : : * &quot;/Sys0/Node0/Proc1&quot; -&gt; {</a>
+<a name="274"><span class="lineNum"> 274 </span> : : * type_size = 0x23,</a>
+<a name="275"><span class="lineNum"> 275 </span> : : *</a>
+<a name="276"><span class="lineNum"> 276 </span> : : * path_element[0] = {0, 0}</a>
+<a name="277"><span class="lineNum"> 277 </span> : : * path_element[1] = {1, 0}</a>
+<a name="278"><span class="lineNum"> 278 </span> : : * path_element[2] = {2, 1}</a>
+<a name="279"><span class="lineNum"> 279 </span> : : * }</a>
+<a name="280"><span class="lineNum"> 280 </span> : : */</a>
+<a name="281"><span class="lineNum"> 281 </span> :<span class="lineCov"> 18 : static int parse_path(const char *str, struct entity_path *parsed)</span></a>
+<a name="282"><span class="lineNum"> 282 </span> : : {</a>
+<a name="283"><span class="lineNum"> 283 </span> :<span class="lineCov"> 18 : int unit_count = 0;</span></a>
+<a name="284"><span class="lineNum"> 284 </span> : : </a>
+<a name="285"><span class="lineNum"> 285 </span> :<span class="lineCov"> 18 : memset(parsed, 0, sizeof(*parsed));</span></a>
+<a name="286"><span class="lineNum"> 286 </span> : : </a>
+<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 82 : while (*str != '\0') {</span></a>
+<a name="288"><span class="lineNum"> 288 </span> :<span class="lineCov"> 72 : int unit_id = str_to_target_type(++str); /* ++ skips the '/' */</span></a>
+<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 72 : long instance;</span></a>
+<a name="290"><span class="lineNum"> 290 </span> :<span class="lineCov"> 72 : char *end;</span></a>
+<a name="291"><span class="lineNum"> 291 </span> :<span class="lineCov"> 72 : size_t len;</span></a>
+<a name="292"><span class="lineNum"> 292 </span> : : </a>
+<a name="293"><span class="lineNum"> 293 </span> :<span class="lineCov"> 72 : if (unit_count &gt; MAX_PATH_ELEMENTS - 1) {</span></a>
+<a name="294"><span class="lineNum"> 294 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;Path has more than 10 components!\n&quot;);</span></a>
+<a name="295"><span class="lineNum"> 295 </span> :<span class="lineCov"> 8 : return -1;</span></a>
+<a name="296"><span class="lineNum"> 296 </span> : : }</a>
+<a name="297"><span class="lineNum"> 297 </span> : : </a>
+<a name="298"><span class="lineNum"> 298 </span> : : /* find the type Id of this component */</a>
+<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 70 : if (unit_id &lt; 0) { /* unknown unit, bail out */</span></a>
+<a name="300"><span class="lineNum"> 300 </span> :<span class="lineCov"> 4 : fprintf(stderr, &quot;Unknown unit at: '%s'\n&quot;, str);</span></a>
+<a name="301"><span class="lineNum"> 301 </span> :<span class="lineCov"> 4 : return -1;</span></a>
+<a name="302"><span class="lineNum"> 302 </span> : : }</a>
+<a name="303"><span class="lineNum"> 303 </span> : : </a>
+<a name="304"><span class="lineNum"> 304 </span> :<span class="lineCov"> 66 : parsed-&gt;path_elements[unit_count].target_type = unit_id;</span></a>
<a name="305"><span class="lineNum"> 305 </span> : : </a>
-<a name="306"><span class="lineNum"> 306 </span> :<span class="lineCov"> 66 : if (!isdigit(*(str + len))) {</span></a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Missing instance number after '%s'\n&quot;,</span></a>
-<a name="308"><span class="lineNum"> 308 </span> : : str);</a>
-<a name="309"><span class="lineNum"> 309 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
-<a name="310"><span class="lineNum"> 310 </span> : : }</a>
-<a name="311"><span class="lineNum"> 311 </span> : : </a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 66 : if (*end != '\0' &amp;&amp; *end != '/') {</span></a>
-<a name="313"><span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Unable to parse instance after '%s'\n&quot;,</span></a>
-<a name="314"><span class="lineNum"> 314 </span> : : str);</a>
-<a name="315"><span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
-<a name="316"><span class="lineNum"> 316 </span> : : }</a>
-<a name="317"><span class="lineNum"> 317 </span> : : </a>
-<a name="318"><span class="lineNum"> 318 </span> :<span class="lineCov"> 66 : if (instance &gt; 255 || instance &lt; 0) {</span></a>
-<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 2 : fprintf(stderr,</span></a>
-<a name="320"><span class="lineNum"> 320 </span> : : &quot;Instance %ld is invalid. Must be 0 to 255\n&quot;,</a>
-<a name="321"><span class="lineNum"> 321 </span> : : instance);</a>
-<a name="322"><span class="lineNum"> 322 </span> :<span class="lineCov"> 2 : return -1;</span></a>
-<a name="323"><span class="lineNum"> 323 </span> : : }</a>
-<a name="324"><span class="lineNum"> 324 </span> :<span class="lineCov"> 64 : parsed-&gt;path_elements[unit_count].instance = instance;</span></a>
-<a name="325"><span class="lineNum"> 325 </span> : : </a>
-<a name="326"><span class="lineNum"> 326 </span> :<span class="lineCov"> 64 : str = end;</span></a>
-<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 64 : unit_count++;</span></a>
-<a name="328"><span class="lineNum"> 328 </span> : : }</a>
+<a name="306"><span class="lineNum"> 306 </span> : : /* now parse the instance # */</a>
+<a name="307"><span class="lineNum"> 307 </span> :<span class="lineCov"> 66 : len = strlen(target_type_to_str(unit_id));</span></a>
+<a name="308"><span class="lineNum"> 308 </span> :<span class="lineCov"> 66 : instance = strtol(str + len, &amp;end, 10);</span></a>
+<a name="309"><span class="lineNum"> 309 </span> : : </a>
+<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 66 : if (!isdigit(*(str + len))) {</span></a>
+<a name="311"><span class="lineNum"> 311 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Missing instance number after '%s'\n&quot;,</span></a>
+<a name="312"><span class="lineNum"> 312 </span> : : str);</a>
+<a name="313"><span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
+<a name="314"><span class="lineNum"> 314 </span> : : }</a>
+<a name="315"><span class="lineNum"> 315 </span> : : </a>
+<a name="316"><span class="lineNum"> 316 </span> :<span class="lineCov"> 66 : if (*end != '\0' &amp;&amp; *end != '/') {</span></a>
+<a name="317"><span class="lineNum"> 317 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Unable to parse instance after '%s'\n&quot;,</span></a>
+<a name="318"><span class="lineNum"> 318 </span> : : str);</a>
+<a name="319"><span class="lineNum"> 319 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
+<a name="320"><span class="lineNum"> 320 </span> : : }</a>
+<a name="321"><span class="lineNum"> 321 </span> : : </a>
+<a name="322"><span class="lineNum"> 322 </span> :<span class="lineCov"> 66 : if (instance &gt; 255 || instance &lt; 0) {</span></a>
+<a name="323"><span class="lineNum"> 323 </span> :<span class="lineCov"> 2 : fprintf(stderr,</span></a>
+<a name="324"><span class="lineNum"> 324 </span> : : &quot;Instance %ld is invalid. Must be 0 to 255\n&quot;,</a>
+<a name="325"><span class="lineNum"> 325 </span> : : instance);</a>
+<a name="326"><span class="lineNum"> 326 </span> :<span class="lineCov"> 2 : return -1;</span></a>
+<a name="327"><span class="lineNum"> 327 </span> : : }</a>
+<a name="328"><span class="lineNum"> 328 </span> :<span class="lineCov"> 64 : parsed-&gt;path_elements[unit_count].instance = instance;</span></a>
<a name="329"><span class="lineNum"> 329 </span> : : </a>
-<a name="330"><span class="lineNum"> 330 </span> : : /*</a>
-<a name="331"><span class="lineNum"> 331 </span> : : * We assume the path is a physical path because every gard record I've</a>
-<a name="332"><span class="lineNum"> 332 </span> : : * seen so far uses them. We might need to fix this later on, but lets</a>
-<a name="333"><span class="lineNum"> 333 </span> : : * cross the bridge when we have to.</a>
-<a name="334"><span class="lineNum"> 334 </span> : : */</a>
-<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 10 : parsed-&gt;type_size = (unit_count &amp; 0xf) |</span></a>
-<a name="336"><span class="lineNum"> 336 </span> : : (PATH_PHYSICAL &lt;&lt; PATH_TYPE_SHIFT);</a>
-<a name="337"><span class="lineNum"> 337 </span> : : </a>
-<a name="338"><span class="lineNum"> 338 </span> :<span class="lineCov"> 10 : return 0;</span></a>
-<a name="339"><span class="lineNum"> 339 </span> : : }</a>
-<a name="340"><span class="lineNum"> 340 </span> : : </a>
-<a name="341"><span class="lineNum"> 341 </span> : : static struct gard_record blank_record;</a>
-<a name="342"><span class="lineNum"> 342 </span> : : </a>
-<a name="343"><span class="lineNum"> 343 </span> :<span class="lineCov"> 112 : static bool is_valid_record(struct gard_record *g)</span></a>
-<a name="344"><span class="lineNum"> 344 </span> : : {</a>
-<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 112 : return memcmp(&amp;blank_record, g, sizeof(*g));</span></a>
-<a name="346"><span class="lineNum"> 346 </span> : : }</a>
-<a name="347"><span class="lineNum"> 347 </span> : : </a>
-<a name="348"><span class="lineNum"> 348 </span> :<span class="lineCov"> 10 : static int do_iterate(struct gard_ctx *ctx,</span></a>
-<a name="349"><span class="lineNum"> 349 </span> : : int (*func)(struct gard_ctx *ctx, int pos,</a>
-<a name="350"><span class="lineNum"> 350 </span> : : struct gard_record *gard, void *priv),</a>
-<a name="351"><span class="lineNum"> 351 </span> : : void *priv)</a>
-<a name="352"><span class="lineNum"> 352 </span> : : {</a>
-<a name="353"><span class="lineNum"> 353 </span> :<span class="lineCov"> 10 : int rc = 0;</span></a>
-<a name="354"><span class="lineNum"> 354 </span> :<span class="lineCov"> 10 : unsigned int i;</span></a>
-<a name="355"><span class="lineNum"> 355 </span> :<span class="lineCov"> 10 : struct gard_record gard, null_gard;</span></a>
-<a name="356"><span class="lineNum"> 356 </span> : : </a>
-<a name="357"><span class="lineNum"> 357 </span> :<span class="lineCov"> 10 : memset(&amp;null_gard, UINT_MAX, sizeof(gard));</span></a>
-<a name="358"><span class="lineNum"> 358 </span> :<span class="lineCov"> 22 : for (i = 0; i * sizeof(gard) &lt; ctx-&gt;gard_data_len &amp;&amp; rc == 0; i++) {</span></a>
-<a name="359"><span class="lineNum"> 359 </span> :<span class="lineCov"> 22 : memset(&amp;gard, 0, sizeof(gard));</span></a>
+<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 64 : str = end;</span></a>
+<a name="331"><span class="lineNum"> 331 </span> :<span class="lineCov"> 64 : unit_count++;</span></a>
+<a name="332"><span class="lineNum"> 332 </span> : : }</a>
+<a name="333"><span class="lineNum"> 333 </span> : : </a>
+<a name="334"><span class="lineNum"> 334 </span> : : /*</a>
+<a name="335"><span class="lineNum"> 335 </span> : : * We assume the path is a physical path because every gard record I've</a>
+<a name="336"><span class="lineNum"> 336 </span> : : * seen so far uses them. We might need to fix this later on, but lets</a>
+<a name="337"><span class="lineNum"> 337 </span> : : * cross the bridge when we have to.</a>
+<a name="338"><span class="lineNum"> 338 </span> : : */</a>
+<a name="339"><span class="lineNum"> 339 </span> :<span class="lineCov"> 10 : parsed-&gt;type_size = (unit_count &amp; 0xf) |</span></a>
+<a name="340"><span class="lineNum"> 340 </span> : : (PATH_PHYSICAL &lt;&lt; PATH_TYPE_SHIFT);</a>
+<a name="341"><span class="lineNum"> 341 </span> : : </a>
+<a name="342"><span class="lineNum"> 342 </span> :<span class="lineCov"> 10 : return 0;</span></a>
+<a name="343"><span class="lineNum"> 343 </span> : : }</a>
+<a name="344"><span class="lineNum"> 344 </span> : : </a>
+<a name="345"><span class="lineNum"> 345 </span> : : static struct gard_record blank_record;</a>
+<a name="346"><span class="lineNum"> 346 </span> : : </a>
+<a name="347"><span class="lineNum"> 347 </span> :<span class="lineCov"> 112 : static bool is_valid_record(struct gard_record *g)</span></a>
+<a name="348"><span class="lineNum"> 348 </span> : : {</a>
+<a name="349"><span class="lineNum"> 349 </span> :<span class="lineCov"> 112 : return memcmp(&amp;blank_record, g, sizeof(*g));</span></a>
+<a name="350"><span class="lineNum"> 350 </span> : : }</a>
+<a name="351"><span class="lineNum"> 351 </span> : : </a>
+<a name="352"><span class="lineNum"> 352 </span> :<span class="lineCov"> 10 : static int do_iterate(struct gard_ctx *ctx,</span></a>
+<a name="353"><span class="lineNum"> 353 </span> : : int (*func)(struct gard_ctx *ctx, int pos,</a>
+<a name="354"><span class="lineNum"> 354 </span> : : struct gard_record *gard, void *priv),</a>
+<a name="355"><span class="lineNum"> 355 </span> : : void *priv)</a>
+<a name="356"><span class="lineNum"> 356 </span> : : {</a>
+<a name="357"><span class="lineNum"> 357 </span> :<span class="lineCov"> 10 : int rc = 0;</span></a>
+<a name="358"><span class="lineNum"> 358 </span> :<span class="lineCov"> 10 : unsigned int i;</span></a>
+<a name="359"><span class="lineNum"> 359 </span> :<span class="lineCov"> 10 : struct gard_record gard, null_gard;</span></a>
<a name="360"><span class="lineNum"> 360 </span> : : </a>
-<a name="361"><span class="lineNum"> 361 </span> :<span class="lineCov"> 22 : rc = blocklevel_read(ctx-&gt;bl, ctx-&gt;gard_data_pos + (i * sizeof(gard)),</span></a>
-<a name="362"><span class="lineNum"> 362 </span> : : &amp;gard, sizeof(gard));</a>
-<a name="363"><span class="lineNum"> 363 </span> : : /* It isn't super clear what constitutes the end, this should do */</a>
-<a name="364"><span class="lineNum"> 364 </span> :<span class="lineCov"> 22 : if (rc || memcmp(&amp;gard, &amp;null_gard, sizeof(gard)) == 0)</span></a>
-<a name="365"><span class="lineNum"> 365 </span> : : break;</a>
-<a name="366"><span class="lineNum"> 366 </span> : : </a>
-<a name="367"><span class="lineNum"> 367 </span> :<span class="lineCov"> 12 : rc = func(ctx, i, &amp;gard, priv);</span></a>
-<a name="368"><span class="lineNum"> 368 </span> : : }</a>
-<a name="369"><span class="lineNum"> 369 </span> : : </a>
-<a name="370"><span class="lineNum"> 370 </span> :<span class="lineCov"> 10 : return rc;</span></a>
-<a name="371"><span class="lineNum"> 371 </span> : : }</a>
-<a name="372"><span class="lineNum"> 372 </span> : : </a>
-<a name="373"><span class="lineNum"> 373 </span> : : /*</a>
-<a name="374"><span class="lineNum"> 374 </span> : : * read the next guard record into the supplied buffer (gard)</a>
-<a name="375"><span class="lineNum"> 375 </span> : : *</a>
-<a name="376"><span class="lineNum"> 376 </span> : : * returns the record id (nb: 1 based not zero)</a>
-<a name="377"><span class="lineNum"> 377 </span> : : *</a>
-<a name="378"><span class="lineNum"> 378 </span> : : */</a>
-<a name="379"><span class="lineNum"> 379 </span> :<span class="lineCov"> 104 : static int __gard_next(struct gard_ctx *ctx, int pos, struct gard_record *gard, int *rc)</span></a>
-<a name="380"><span class="lineNum"> 380 </span> : : {</a>
-<a name="381"><span class="lineNum"> 381 </span> :<span class="lineCov"> 104 : uint32_t offset = pos * sizeof(*gard);</span></a>
-<a name="382"><span class="lineNum"> 382 </span> : : </a>
-<a name="383"><span class="lineNum"> 383 </span> :<span class="lineCov"> 104 : if (offset &gt; ctx-&gt;gard_data_len) /* too big */</span></a>
-<a name="384"><span class="lineNum"> 384 </span> : : return -1;</a>
-<a name="385"><span class="lineNum"> 385 </span> : : </a>
-<a name="386"><span class="lineNum"> 386 </span> : : /* you lose error handling information, *gruble* */</a>
-<a name="387"><span class="lineNum"> 387 </span> :<span class="lineCov"> 104 : memset(gard, 0, sizeof(*gard));</span></a>
-<a name="388"><span class="lineNum"> 388 </span> :<span class="lineCov"> 104 : *rc = blocklevel_read(ctx-&gt;bl, ctx-&gt;gard_data_pos + offset,</span></a>
-<a name="389"><span class="lineNum"> 389 </span> : : gard, sizeof(*gard));</a>
-<a name="390"><span class="lineNum"> 390 </span> : : </a>
-<a name="391"><span class="lineNum"> 391 </span> :<span class="lineCov"> 104 : if (!is_valid_record(gard))</span></a>
-<a name="392"><span class="lineNum"> 392 </span> : : return -1;</a>
-<a name="393"><span class="lineNum"> 393 </span> : : </a>
-<a name="394"><span class="lineNum"> 394 </span> :<span class="lineCov"> 56 : if (*rc)</span></a>
-<a name="395"><span class="lineNum"> 395 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
-<a name="396"><span class="lineNum"> 396 </span> : : </a>
-<a name="397"><span class="lineNum"> 397 </span> : : return pos;</a>
-<a name="398"><span class="lineNum"> 398 </span> : : }</a>
-<a name="399"><span class="lineNum"> 399 </span> : : </a>
-<a name="400"><span class="lineNum"> 400 </span> : : #define for_each_gard(ctx, pos, gard, rc) \</a>
-<a name="401"><span class="lineNum"> 401 </span> : : for (pos = __gard_next(ctx, 0, gard, rc); \</a>
-<a name="402"><span class="lineNum"> 402 </span> : : pos &gt;= 0; pos = __gard_next(ctx, ++pos, gard, rc))</a>
+<a name="361"><span class="lineNum"> 361 </span> :<span class="lineCov"> 10 : memset(&amp;null_gard, UINT_MAX, sizeof(gard));</span></a>
+<a name="362"><span class="lineNum"> 362 </span> :<span class="lineCov"> 22 : for (i = 0; i * sizeof(gard) &lt; ctx-&gt;gard_data_len &amp;&amp; rc == 0; i++) {</span></a>
+<a name="363"><span class="lineNum"> 363 </span> :<span class="lineCov"> 22 : memset(&amp;gard, 0, sizeof(gard));</span></a>
+<a name="364"><span class="lineNum"> 364 </span> : : </a>
+<a name="365"><span class="lineNum"> 365 </span> :<span class="lineCov"> 22 : rc = blocklevel_read(ctx-&gt;bl, ctx-&gt;gard_data_pos + (i * sizeof(gard)),</span></a>
+<a name="366"><span class="lineNum"> 366 </span> : : &amp;gard, sizeof(gard));</a>
+<a name="367"><span class="lineNum"> 367 </span> : : /* It isn't super clear what constitutes the end, this should do */</a>
+<a name="368"><span class="lineNum"> 368 </span> :<span class="lineCov"> 22 : if (rc || memcmp(&amp;gard, &amp;null_gard, sizeof(gard)) == 0)</span></a>
+<a name="369"><span class="lineNum"> 369 </span> : : break;</a>
+<a name="370"><span class="lineNum"> 370 </span> : : </a>
+<a name="371"><span class="lineNum"> 371 </span> :<span class="lineCov"> 12 : rc = func(ctx, i, &amp;gard, priv);</span></a>
+<a name="372"><span class="lineNum"> 372 </span> : : }</a>
+<a name="373"><span class="lineNum"> 373 </span> : : </a>
+<a name="374"><span class="lineNum"> 374 </span> :<span class="lineCov"> 10 : return rc;</span></a>
+<a name="375"><span class="lineNum"> 375 </span> : : }</a>
+<a name="376"><span class="lineNum"> 376 </span> : : </a>
+<a name="377"><span class="lineNum"> 377 </span> : : /*</a>
+<a name="378"><span class="lineNum"> 378 </span> : : * read the next guard record into the supplied buffer (gard)</a>
+<a name="379"><span class="lineNum"> 379 </span> : : *</a>
+<a name="380"><span class="lineNum"> 380 </span> : : * returns the record id (nb: 1 based not zero)</a>
+<a name="381"><span class="lineNum"> 381 </span> : : *</a>
+<a name="382"><span class="lineNum"> 382 </span> : : */</a>
+<a name="383"><span class="lineNum"> 383 </span> :<span class="lineCov"> 104 : static int __gard_next(struct gard_ctx *ctx, int pos, struct gard_record *gard, int *rc)</span></a>
+<a name="384"><span class="lineNum"> 384 </span> : : {</a>
+<a name="385"><span class="lineNum"> 385 </span> :<span class="lineCov"> 104 : uint32_t offset = pos * sizeof(*gard);</span></a>
+<a name="386"><span class="lineNum"> 386 </span> : : </a>
+<a name="387"><span class="lineNum"> 387 </span> :<span class="lineCov"> 104 : if (offset &gt; ctx-&gt;gard_data_len) /* too big */</span></a>
+<a name="388"><span class="lineNum"> 388 </span> : : return -1;</a>
+<a name="389"><span class="lineNum"> 389 </span> : : </a>
+<a name="390"><span class="lineNum"> 390 </span> : : /* you lose error handling information, *gruble* */</a>
+<a name="391"><span class="lineNum"> 391 </span> :<span class="lineCov"> 104 : memset(gard, 0, sizeof(*gard));</span></a>
+<a name="392"><span class="lineNum"> 392 </span> :<span class="lineCov"> 104 : *rc = blocklevel_read(ctx-&gt;bl, ctx-&gt;gard_data_pos + offset,</span></a>
+<a name="393"><span class="lineNum"> 393 </span> : : gard, sizeof(*gard));</a>
+<a name="394"><span class="lineNum"> 394 </span> : : </a>
+<a name="395"><span class="lineNum"> 395 </span> :<span class="lineCov"> 104 : if (!is_valid_record(gard))</span></a>
+<a name="396"><span class="lineNum"> 396 </span> : : return -1;</a>
+<a name="397"><span class="lineNum"> 397 </span> : : </a>
+<a name="398"><span class="lineNum"> 398 </span> :<span class="lineCov"> 56 : if (*rc)</span></a>
+<a name="399"><span class="lineNum"> 399 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
+<a name="400"><span class="lineNum"> 400 </span> : : </a>
+<a name="401"><span class="lineNum"> 401 </span> : : return pos;</a>
+<a name="402"><span class="lineNum"> 402 </span> : : }</a>
<a name="403"><span class="lineNum"> 403 </span> : : </a>
-<a name="404"><span class="lineNum"> 404 </span> :<span class="lineCov"> 6 : static int count_records(struct gard_ctx *ctx)</span></a>
-<a name="405"><span class="lineNum"> 405 </span> : : {</a>
-<a name="406"><span class="lineNum"> 406 </span> :<span class="lineCov"> 6 : struct gard_record record;</span></a>
-<a name="407"><span class="lineNum"> 407 </span> :<span class="lineCov"> 6 : int rc, pos, count = 0;</span></a>
-<a name="408"><span class="lineNum"> 408 </span> : : </a>
-<a name="409"><span class="lineNum"> 409 </span> :<span class="lineCov"> 14 : for_each_gard(ctx, pos, &amp;record, &amp;rc)</span></a>
-<a name="410"><span class="lineNum"> 410 </span> :<span class="lineCov"> 8 : count++;</span></a>
-<a name="411"><span class="lineNum"> 411 </span> : : </a>
-<a name="412"><span class="lineNum"> 412 </span> :<span class="lineCov"> 6 : return rc ? rc : count;</span></a>
-<a name="413"><span class="lineNum"> 413 </span> : : }</a>
-<a name="414"><span class="lineNum"> 414 </span> : : </a>
-<a name="415"><span class="lineNum"> 415 </span> :<span class="lineCov"> 14 : static int count_valid_records(struct gard_ctx *ctx)</span></a>
-<a name="416"><span class="lineNum"> 416 </span> : : {</a>
-<a name="417"><span class="lineNum"> 417 </span> :<span class="lineCov"> 14 : struct gard_record record;</span></a>
-<a name="418"><span class="lineNum"> 418 </span> :<span class="lineCov"> 14 : int rc, pos, count = 0;</span></a>
-<a name="419"><span class="lineNum"> 419 </span> : : </a>
-<a name="420"><span class="lineNum"> 420 </span> :<span class="lineCov"> 28 : for_each_gard(ctx, pos, &amp;record, &amp;rc)</span></a>
-<a name="421"><span class="lineNum"> 421 </span> :<span class="lineCov"> 14 : count++;</span></a>
-<a name="422"><span class="lineNum"> 422 </span> : : </a>
-<a name="423"><span class="lineNum"> 423 </span> :<span class="lineCov"> 14 : return rc ? rc : count;</span></a>
-<a name="424"><span class="lineNum"> 424 </span> : : }</a>
-<a name="425"><span class="lineNum"> 425 </span> : : </a>
-<a name="426"><span class="lineNum"> 426 </span> :<span class="lineCov"> 10 : static size_t find_longest_path(struct gard_ctx *ctx)</span></a>
-<a name="427"><span class="lineNum"> 427 </span> : : {</a>
-<a name="428"><span class="lineNum"> 428 </span> :<span class="lineCov"> 10 : char scratch[MAX_PATH_SIZE];</span></a>
-<a name="429"><span class="lineNum"> 429 </span> :<span class="lineCov"> 10 : struct gard_record gard;</span></a>
-<a name="430"><span class="lineNum"> 430 </span> :<span class="lineCov"> 10 : size_t len, longest = 0;</span></a>
-<a name="431"><span class="lineNum"> 431 </span> :<span class="lineCov"> 10 : int rc, pos;</span></a>
-<a name="432"><span class="lineNum"> 432 </span> : : </a>
-<a name="433"><span class="lineNum"> 433 </span> :<span class="lineCov"> 24 : for_each_gard(ctx, pos, &amp;gard, &amp;rc) {</span></a>
-<a name="434"><span class="lineNum"> 434 </span> :<span class="lineCov"> 14 : len = strlen(format_path(&amp;gard.target_id, scratch));</span></a>
-<a name="435"><span class="lineNum"> 435 </span> :<span class="lineCov"> 14 : if (len &gt; longest)</span></a>
-<a name="436"><span class="lineNum"> 436 </span> : : longest = len;</a>
-<a name="437"><span class="lineNum"> 437 </span> : : }</a>
-<a name="438"><span class="lineNum"> 438 </span> : : </a>
-<a name="439"><span class="lineNum"> 439 </span> :<span class="lineCov"> 10 : return longest;</span></a>
-<a name="440"><span class="lineNum"> 440 </span> : : }</a>
-<a name="441"><span class="lineNum"> 441 </span> : : </a>
-<a name="442"><span class="lineNum"> 442 </span> :<span class="lineCov"> 20 : static void draw_ruler(char c, int size)</span></a>
-<a name="443"><span class="lineNum"> 443 </span> : : {</a>
-<a name="444"><span class="lineNum"> 444 </span> :<span class="lineCov"> 20 : int i;</span></a>
+<a name="404"><span class="lineNum"> 404 </span> : : #define for_each_gard(ctx, pos, gard, rc) \</a>
+<a name="405"><span class="lineNum"> 405 </span> : : for (pos = __gard_next(ctx, 0, gard, rc); \</a>
+<a name="406"><span class="lineNum"> 406 </span> : : pos &gt;= 0; pos = __gard_next(ctx, ++pos, gard, rc))</a>
+<a name="407"><span class="lineNum"> 407 </span> : : </a>
+<a name="408"><span class="lineNum"> 408 </span> :<span class="lineCov"> 6 : static int count_records(struct gard_ctx *ctx)</span></a>
+<a name="409"><span class="lineNum"> 409 </span> : : {</a>
+<a name="410"><span class="lineNum"> 410 </span> :<span class="lineCov"> 6 : struct gard_record record;</span></a>
+<a name="411"><span class="lineNum"> 411 </span> :<span class="lineCov"> 6 : int rc, pos, count = 0;</span></a>
+<a name="412"><span class="lineNum"> 412 </span> : : </a>
+<a name="413"><span class="lineNum"> 413 </span> :<span class="lineCov"> 14 : for_each_gard(ctx, pos, &amp;record, &amp;rc)</span></a>
+<a name="414"><span class="lineNum"> 414 </span> :<span class="lineCov"> 8 : count++;</span></a>
+<a name="415"><span class="lineNum"> 415 </span> : : </a>
+<a name="416"><span class="lineNum"> 416 </span> :<span class="lineCov"> 6 : return rc ? rc : count;</span></a>
+<a name="417"><span class="lineNum"> 417 </span> : : }</a>
+<a name="418"><span class="lineNum"> 418 </span> : : </a>
+<a name="419"><span class="lineNum"> 419 </span> :<span class="lineCov"> 14 : static int count_valid_records(struct gard_ctx *ctx)</span></a>
+<a name="420"><span class="lineNum"> 420 </span> : : {</a>
+<a name="421"><span class="lineNum"> 421 </span> :<span class="lineCov"> 14 : struct gard_record record;</span></a>
+<a name="422"><span class="lineNum"> 422 </span> :<span class="lineCov"> 14 : int rc, pos, count = 0;</span></a>
+<a name="423"><span class="lineNum"> 423 </span> : : </a>
+<a name="424"><span class="lineNum"> 424 </span> :<span class="lineCov"> 28 : for_each_gard(ctx, pos, &amp;record, &amp;rc)</span></a>
+<a name="425"><span class="lineNum"> 425 </span> :<span class="lineCov"> 14 : count++;</span></a>
+<a name="426"><span class="lineNum"> 426 </span> : : </a>
+<a name="427"><span class="lineNum"> 427 </span> :<span class="lineCov"> 14 : return rc ? rc : count;</span></a>
+<a name="428"><span class="lineNum"> 428 </span> : : }</a>
+<a name="429"><span class="lineNum"> 429 </span> : : </a>
+<a name="430"><span class="lineNum"> 430 </span> :<span class="lineCov"> 10 : static size_t find_longest_path(struct gard_ctx *ctx)</span></a>
+<a name="431"><span class="lineNum"> 431 </span> : : {</a>
+<a name="432"><span class="lineNum"> 432 </span> :<span class="lineCov"> 10 : char scratch[MAX_PATH_SIZE];</span></a>
+<a name="433"><span class="lineNum"> 433 </span> :<span class="lineCov"> 10 : struct gard_record gard;</span></a>
+<a name="434"><span class="lineNum"> 434 </span> :<span class="lineCov"> 10 : size_t len, longest = 0;</span></a>
+<a name="435"><span class="lineNum"> 435 </span> :<span class="lineCov"> 10 : int rc, pos;</span></a>
+<a name="436"><span class="lineNum"> 436 </span> : : </a>
+<a name="437"><span class="lineNum"> 437 </span> :<span class="lineCov"> 24 : for_each_gard(ctx, pos, &amp;gard, &amp;rc) {</span></a>
+<a name="438"><span class="lineNum"> 438 </span> :<span class="lineCov"> 14 : len = strlen(format_path(&amp;gard.target_id, scratch));</span></a>
+<a name="439"><span class="lineNum"> 439 </span> :<span class="lineCov"> 14 : if (len &gt; longest)</span></a>
+<a name="440"><span class="lineNum"> 440 </span> : : longest = len;</a>
+<a name="441"><span class="lineNum"> 441 </span> : : }</a>
+<a name="442"><span class="lineNum"> 442 </span> : : </a>
+<a name="443"><span class="lineNum"> 443 </span> :<span class="lineCov"> 10 : return longest;</span></a>
+<a name="444"><span class="lineNum"> 444 </span> : : }</a>
<a name="445"><span class="lineNum"> 445 </span> : : </a>
-<a name="446"><span class="lineNum"> 446 </span> :<span class="lineCov"> 1580 : for (i = 0; i &lt; size; i++)</span></a>
-<a name="447"><span class="lineNum"> 447 </span> :<span class="lineCov"> 1560 : putchar(c);</span></a>
-<a name="448"><span class="lineNum"> 448 </span> :<span class="lineCov"> 20 : putchar('\n');</span></a>
-<a name="449"><span class="lineNum"> 449 </span> :<span class="lineCov"> 20 : }</span></a>
-<a name="450"><span class="lineNum"> 450 </span> : : </a>
-<a name="451"><span class="lineNum"> 451 </span> :<span class="lineCov"> 14 : static int do_list(struct gard_ctx *ctx, int argc __attribute__((unused)),</span></a>
-<a name="452"><span class="lineNum"> 452 </span> : : char **argv __attribute__((unused)))</a>
-<a name="453"><span class="lineNum"> 453 </span> : : {</a>
-<a name="454"><span class="lineNum"> 454 </span> : : /* This header matches the line formatting above in do_list_i() */</a>
-<a name="455"><span class="lineNum"> 455 </span> :<span class="lineCov"> 14 : const char *header = &quot; ID | Error | Type | Path&quot;;</span></a>
-<a name="456"><span class="lineNum"> 456 </span> :<span class="lineCov"> 14 : size_t ruler_size;</span></a>
-<a name="457"><span class="lineNum"> 457 </span> :<span class="lineCov"> 14 : char scratch[MAX_PATH_SIZE];</span></a>
-<a name="458"><span class="lineNum"> 458 </span> :<span class="lineCov"> 14 : struct gard_record gard;</span></a>
-<a name="459"><span class="lineNum"> 459 </span> :<span class="lineCov"> 14 : int rc = 0, pos;</span></a>
-<a name="460"><span class="lineNum"> 460 </span> : : </a>
-<a name="461"><span class="lineNum"> 461 </span> : : /* No entries */</a>
-<a name="462"><span class="lineNum"> 462 </span> :<span class="lineCov"> 14 : if (count_valid_records(ctx) == 0) {</span></a>
-<a name="463"><span class="lineNum"> 463 </span> :<span class="lineCov"> 4 : printf(&quot;No GARD entries to display\n&quot;);</span></a>
-<a name="464"><span class="lineNum"> 464 </span> :<span class="lineCov"> 4 : return 0;</span></a>
-<a name="465"><span class="lineNum"> 465 </span> : : }</a>
-<a name="466"><span class="lineNum"> 466 </span> : : </a>
-<a name="467"><span class="lineNum"> 467 </span> :<span class="lineCov"> 10 : puts(header);</span></a>
-<a name="468"><span class="lineNum"> 468 </span> : : </a>
-<a name="469"><span class="lineNum"> 469 </span> :<span class="lineCov"> 10 : ruler_size = strlen(header) + find_longest_path(ctx);</span></a>
-<a name="470"><span class="lineNum"> 470 </span> :<span class="lineCov"> 10 : draw_ruler('-', ruler_size);</span></a>
-<a name="471"><span class="lineNum"> 471 </span> : : </a>
-<a name="472"><span class="lineNum"> 472 </span> :<span class="lineCov"> 24 : for_each_gard(ctx, pos, &amp;gard, &amp;rc) {</span></a>
-<a name="473"><span class="lineNum"> 473 </span> :<span class="lineCov"> 14 : printf(&quot; %08x | %08x | %-10s | %s%s\n&quot;,</span></a>
-<a name="474"><span class="lineNum"> 474 </span> : : be32toh(gard.record_id),</a>
-<a name="475"><span class="lineNum"> 475 </span> : : be32toh(gard.errlog_eid),</a>
-<a name="476"><span class="lineNum"> 476 </span> :<span class="lineCov"> 14 : deconfig_reason_str(gard.error_type),</span></a>
-<a name="477"><span class="lineNum"> 477 </span> : : format_path(&amp;gard.target_id, scratch),</a>
-<a name="478"><span class="lineNum"> 478 </span> :<span class="lineCov"> 14 : gard.record_id == 0xffffffff ? &quot; *CLEARED*&quot; : &quot;&quot;);</span></a>
-<a name="479"><span class="lineNum"> 479 </span> : : }</a>
-<a name="480"><span class="lineNum"> 480 </span> : : </a>
-<a name="481"><span class="lineNum"> 481 </span> :<span class="lineCov"> 10 : draw_ruler('=', ruler_size);</span></a>
-<a name="482"><span class="lineNum"> 482 </span> : : </a>
-<a name="483"><span class="lineNum"> 483 </span> :<span class="lineCov"> 10 : return rc;</span></a>
-<a name="484"><span class="lineNum"> 484 </span> : : }</a>
-<a name="485"><span class="lineNum"> 485 </span> : : </a>
-<a name="486"><span class="lineNum"> 486 </span> :<span class="lineCov"> 6 : static int do_show_i(struct gard_ctx *ctx, int pos, struct gard_record *gard, void *priv)</span></a>
-<a name="487"><span class="lineNum"> 487 </span> : : {</a>
-<a name="488"><span class="lineNum"> 488 </span> :<span class="lineCov"> 6 : uint32_t id;</span></a>
+<a name="446"><span class="lineNum"> 446 </span> :<span class="lineCov"> 20 : static void draw_ruler(char c, int size)</span></a>
+<a name="447"><span class="lineNum"> 447 </span> : : {</a>
+<a name="448"><span class="lineNum"> 448 </span> :<span class="lineCov"> 20 : int i;</span></a>
+<a name="449"><span class="lineNum"> 449 </span> : : </a>
+<a name="450"><span class="lineNum"> 450 </span> :<span class="lineCov"> 1580 : for (i = 0; i &lt; size; i++)</span></a>
+<a name="451"><span class="lineNum"> 451 </span> :<span class="lineCov"> 1560 : putchar(c);</span></a>
+<a name="452"><span class="lineNum"> 452 </span> :<span class="lineCov"> 20 : putchar('\n');</span></a>
+<a name="453"><span class="lineNum"> 453 </span> :<span class="lineCov"> 20 : }</span></a>
+<a name="454"><span class="lineNum"> 454 </span> : : </a>
+<a name="455"><span class="lineNum"> 455 </span> :<span class="lineCov"> 14 : static int do_list(struct gard_ctx *ctx, int argc __attribute__((unused)),</span></a>
+<a name="456"><span class="lineNum"> 456 </span> : : char **argv __attribute__((unused)))</a>
+<a name="457"><span class="lineNum"> 457 </span> : : {</a>
+<a name="458"><span class="lineNum"> 458 </span> : : /* This header matches the line formatting above in do_list_i() */</a>
+<a name="459"><span class="lineNum"> 459 </span> :<span class="lineCov"> 14 : const char *header = &quot; ID | Error | Type | Path&quot;;</span></a>
+<a name="460"><span class="lineNum"> 460 </span> :<span class="lineCov"> 14 : size_t ruler_size;</span></a>
+<a name="461"><span class="lineNum"> 461 </span> :<span class="lineCov"> 14 : char scratch[MAX_PATH_SIZE];</span></a>
+<a name="462"><span class="lineNum"> 462 </span> :<span class="lineCov"> 14 : struct gard_record gard;</span></a>
+<a name="463"><span class="lineNum"> 463 </span> :<span class="lineCov"> 14 : int rc = 0, pos;</span></a>
+<a name="464"><span class="lineNum"> 464 </span> : : </a>
+<a name="465"><span class="lineNum"> 465 </span> : : /* No entries */</a>
+<a name="466"><span class="lineNum"> 466 </span> :<span class="lineCov"> 14 : if (count_valid_records(ctx) == 0) {</span></a>
+<a name="467"><span class="lineNum"> 467 </span> :<span class="lineCov"> 4 : printf(&quot;No GARD entries to display\n&quot;);</span></a>
+<a name="468"><span class="lineNum"> 468 </span> :<span class="lineCov"> 4 : return 0;</span></a>
+<a name="469"><span class="lineNum"> 469 </span> : : }</a>
+<a name="470"><span class="lineNum"> 470 </span> : : </a>
+<a name="471"><span class="lineNum"> 471 </span> :<span class="lineCov"> 10 : puts(header);</span></a>
+<a name="472"><span class="lineNum"> 472 </span> : : </a>
+<a name="473"><span class="lineNum"> 473 </span> :<span class="lineCov"> 10 : ruler_size = strlen(header) + find_longest_path(ctx);</span></a>
+<a name="474"><span class="lineNum"> 474 </span> :<span class="lineCov"> 10 : draw_ruler('-', ruler_size);</span></a>
+<a name="475"><span class="lineNum"> 475 </span> : : </a>
+<a name="476"><span class="lineNum"> 476 </span> :<span class="lineCov"> 24 : for_each_gard(ctx, pos, &amp;gard, &amp;rc) {</span></a>
+<a name="477"><span class="lineNum"> 477 </span> :<span class="lineCov"> 28 : printf(&quot; %08x | %08x | %-10s | %s%s\n&quot;,</span></a>
+<a name="478"><span class="lineNum"> 478 </span> : : be32toh(gard.record_id),</a>
+<a name="479"><span class="lineNum"> 479 </span> : : be32toh(gard.errlog_eid),</a>
+<a name="480"><span class="lineNum"> 480 </span> :<span class="lineCov"> 14 : deconfig_reason_str(gard.error_type),</span></a>
+<a name="481"><span class="lineNum"> 481 </span> : : format_path(&amp;gard.target_id, scratch),</a>
+<a name="482"><span class="lineNum"> 482 </span> :<span class="lineCov"> 14 : gard.record_id == 0xffffffff ? &quot; *CLEARED*&quot; : &quot;&quot;);</span></a>
+<a name="483"><span class="lineNum"> 483 </span> : : }</a>
+<a name="484"><span class="lineNum"> 484 </span> : : </a>
+<a name="485"><span class="lineNum"> 485 </span> :<span class="lineCov"> 10 : draw_ruler('=', ruler_size);</span></a>
+<a name="486"><span class="lineNum"> 486 </span> : : </a>
+<a name="487"><span class="lineNum"> 487 </span> :<span class="lineCov"> 10 : return rc;</span></a>
+<a name="488"><span class="lineNum"> 488 </span> : : }</a>
<a name="489"><span class="lineNum"> 489 </span> : : </a>
-<a name="490"><span class="lineNum"> 490 </span> :<span class="lineCov"> 6 : (void)ctx;</span></a>
-<a name="491"><span class="lineNum"> 491 </span> :<span class="lineCov"> 6 : (void)pos;</span></a>
-<a name="492"><span class="lineNum"> 492 </span> : : </a>
-<a name="493"><span class="lineNum"> 493 </span> :<span class="lineCov"> 6 : if (!priv || !gard)</span></a>
-<a name="494"><span class="lineNum"> 494 </span> : : return -1;</a>
-<a name="495"><span class="lineNum"> 495 </span> : : </a>
-<a name="496"><span class="lineNum"> 496 </span> :<span class="lineCov"> 6 : id = *(uint32_t *)priv;</span></a>
-<a name="497"><span class="lineNum"> 497 </span> : : </a>
-<a name="498"><span class="lineNum"> 498 </span> :<span class="lineCov"> 6 : if (be32toh(gard-&gt;record_id) == id) {</span></a>
-<a name="499"><span class="lineNum"> 499 </span> :<span class="lineCov"> 4 : unsigned int count, i;</span></a>
-<a name="500"><span class="lineNum"> 500 </span> : : </a>
-<a name="501"><span class="lineNum"> 501 </span> :<span class="lineCov"> 8 : printf(&quot;Record ID: 0x%08x%s\n&quot;, id, id == 0xffffffff ? &quot; *CLEARED*&quot; : &quot;&quot;);</span></a>
-<a name="502"><span class="lineNum"> 502 </span> :<span class="lineCov"> 4 : printf(&quot;========================\n&quot;);</span></a>
-<a name="503"><span class="lineNum"> 503 </span> :<span class="lineCov"> 4 : printf(&quot;Error ID: 0x%08x\n&quot;, be32toh(gard-&gt;errlog_eid));</span></a>
-<a name="504"><span class="lineNum"> 504 </span> :<span class="lineCov"> 4 : printf(&quot;Error Type: %s (0x%02x)\n&quot;,</span></a>
-<a name="505"><span class="lineNum"> 505 </span> : : deconfig_reason_str(gard-&gt;error_type),</a>
-<a name="506"><span class="lineNum"> 506 </span> :<span class="lineCov"> 4 : gard-&gt;error_type);</span></a>
-<a name="507"><span class="lineNum"> 507 </span> :<span class="lineCov"> 8 : printf(&quot;Path Type: %s\n&quot;, path_type_to_str(gard-&gt;target_id.type_size &gt;&gt; PATH_TYPE_SHIFT));</span></a>
-<a name="508"><span class="lineNum"> 508 </span> :<span class="lineCov"> 4 : count = gard-&gt;target_id.type_size &amp; PATH_ELEMENTS_MASK;</span></a>
-<a name="509"><span class="lineNum"> 509 </span> :<span class="lineCov"> 20 : for (i = 0; i &lt; count &amp;&amp; i &lt; MAX_PATH_ELEMENTS; i++)</span></a>
-<a name="510"><span class="lineNum"> 510 </span> :<span class="lineCov"> 16 : printf(&quot;%*c%s, Instance #%d\n&quot;, i + 1, '&gt;', target_type_to_str(gard-&gt;target_id.path_elements[i].target_type),</span></a>
-<a name="511"><span class="lineNum"> 511 </span> :<span class="lineCov"> 16 : gard-&gt;target_id.path_elements[i].instance);</span></a>
-<a name="512"><span class="lineNum"> 512 </span> : : }</a>
-<a name="513"><span class="lineNum"> 513 </span> : : </a>
-<a name="514"><span class="lineNum"> 514 </span> : : return 0;</a>
-<a name="515"><span class="lineNum"> 515 </span> : : }</a>
-<a name="516"><span class="lineNum"> 516 </span> : : </a>
-<a name="517"><span class="lineNum"> 517 </span> :<span class="lineCov"> 4 : static int do_show(struct gard_ctx *ctx, int argc, char **argv)</span></a>
-<a name="518"><span class="lineNum"> 518 </span> : : {</a>
-<a name="519"><span class="lineNum"> 519 </span> :<span class="lineCov"> 4 : uint32_t id;</span></a>
-<a name="520"><span class="lineNum"> 520 </span> :<span class="lineCov"> 4 : int rc;</span></a>
-<a name="521"><span class="lineNum"> 521 </span> : : </a>
-<a name="522"><span class="lineNum"> 522 </span> :<span class="lineCov"> 4 : if (argc != 2) {</span></a>
-<a name="523"><span class="lineNum"> 523 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;%s option requires a GARD record\n&quot;, argv[0]);</span></a>
-<a name="524"><span class="lineNum"> 524 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
-<a name="525"><span class="lineNum"> 525 </span> : : }</a>
-<a name="526"><span class="lineNum"> 526 </span> : : </a>
-<a name="527"><span class="lineNum"> 527 </span> :<span class="lineCov"> 4 : id = strtoul(argv[1], NULL, 16);</span></a>
-<a name="528"><span class="lineNum"> 528 </span> : : </a>
-<a name="529"><span class="lineNum"> 529 </span> :<span class="lineCov"> 4 : rc = do_iterate(ctx, &amp;do_show_i, &amp;id);</span></a>
+<a name="490"><span class="lineNum"> 490 </span> :<span class="lineCov"> 6 : static int do_show_i(struct gard_ctx *ctx, int pos, struct gard_record *gard, void *priv)</span></a>
+<a name="491"><span class="lineNum"> 491 </span> : : {</a>
+<a name="492"><span class="lineNum"> 492 </span> :<span class="lineCov"> 6 : uint32_t id;</span></a>
+<a name="493"><span class="lineNum"> 493 </span> : : </a>
+<a name="494"><span class="lineNum"> 494 </span> :<span class="lineCov"> 6 : (void)ctx;</span></a>
+<a name="495"><span class="lineNum"> 495 </span> :<span class="lineCov"> 6 : (void)pos;</span></a>
+<a name="496"><span class="lineNum"> 496 </span> : : </a>
+<a name="497"><span class="lineNum"> 497 </span> :<span class="lineCov"> 6 : if (!priv || !gard)</span></a>
+<a name="498"><span class="lineNum"> 498 </span> : : return -1;</a>
+<a name="499"><span class="lineNum"> 499 </span> : : </a>
+<a name="500"><span class="lineNum"> 500 </span> :<span class="lineCov"> 6 : id = *(uint32_t *)priv;</span></a>
+<a name="501"><span class="lineNum"> 501 </span> : : </a>
+<a name="502"><span class="lineNum"> 502 </span> :<span class="lineCov"> 6 : if (be32toh(gard-&gt;record_id) == id) {</span></a>
+<a name="503"><span class="lineNum"> 503 </span> :<span class="lineCov"> 4 : unsigned int count, i;</span></a>
+<a name="504"><span class="lineNum"> 504 </span> : : </a>
+<a name="505"><span class="lineNum"> 505 </span> :<span class="lineCov"> 4 : printf(&quot;Record ID: 0x%08x%s\n&quot;, id, id == 0xffffffff ? &quot; *CLEARED*&quot; : &quot;&quot;);</span></a>
+<a name="506"><span class="lineNum"> 506 </span> :<span class="lineCov"> 4 : printf(&quot;========================\n&quot;);</span></a>
+<a name="507"><span class="lineNum"> 507 </span> :<span class="lineCov"> 4 : printf(&quot;Error ID: 0x%08x\n&quot;, be32toh(gard-&gt;errlog_eid));</span></a>
+<a name="508"><span class="lineNum"> 508 </span> :<span class="lineCov"> 8 : printf(&quot;Error Type: %s (0x%02x)\n&quot;,</span></a>
+<a name="509"><span class="lineNum"> 509 </span> : : deconfig_reason_str(gard-&gt;error_type),</a>
+<a name="510"><span class="lineNum"> 510 </span> :<span class="lineCov"> 4 : gard-&gt;error_type);</span></a>
+<a name="511"><span class="lineNum"> 511 </span> :<span class="lineCov"> 8 : printf(&quot;Path Type: %s\n&quot;, path_type_to_str(gard-&gt;target_id.type_size &gt;&gt; PATH_TYPE_SHIFT));</span></a>
+<a name="512"><span class="lineNum"> 512 </span> :<span class="lineCov"> 4 : count = gard-&gt;target_id.type_size &amp; PATH_ELEMENTS_MASK;</span></a>
+<a name="513"><span class="lineNum"> 513 </span> :<span class="lineCov"> 20 : for (i = 0; i &lt; count &amp;&amp; i &lt; MAX_PATH_ELEMENTS; i++)</span></a>
+<a name="514"><span class="lineNum"> 514 </span> :<span class="lineCov"> 16 : printf(&quot;%*c%s, Instance #%d\n&quot;, i + 1, '&gt;', target_type_to_str(gard-&gt;target_id.path_elements[i].target_type),</span></a>
+<a name="515"><span class="lineNum"> 515 </span> :<span class="lineCov"> 16 : gard-&gt;target_id.path_elements[i].instance);</span></a>
+<a name="516"><span class="lineNum"> 516 </span> : : }</a>
+<a name="517"><span class="lineNum"> 517 </span> : : </a>
+<a name="518"><span class="lineNum"> 518 </span> : : return 0;</a>
+<a name="519"><span class="lineNum"> 519 </span> : : }</a>
+<a name="520"><span class="lineNum"> 520 </span> : : </a>
+<a name="521"><span class="lineNum"> 521 </span> :<span class="lineCov"> 4 : static int do_show(struct gard_ctx *ctx, int argc, char **argv)</span></a>
+<a name="522"><span class="lineNum"> 522 </span> : : {</a>
+<a name="523"><span class="lineNum"> 523 </span> :<span class="lineCov"> 4 : uint32_t id;</span></a>
+<a name="524"><span class="lineNum"> 524 </span> :<span class="lineCov"> 4 : int rc;</span></a>
+<a name="525"><span class="lineNum"> 525 </span> : : </a>
+<a name="526"><span class="lineNum"> 526 </span> :<span class="lineCov"> 4 : if (argc != 2) {</span></a>
+<a name="527"><span class="lineNum"> 527 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;%s option requires a GARD record\n&quot;, argv[0]);</span></a>
+<a name="528"><span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
+<a name="529"><span class="lineNum"> 529 </span> : : }</a>
<a name="530"><span class="lineNum"> 530 </span> : : </a>
-<a name="531"><span class="lineNum"> 531 </span> :<span class="lineCov"> 4 : return rc;</span></a>
-<a name="532"><span class="lineNum"> 532 </span> : : }</a>
-<a name="533"><span class="lineNum"> 533 </span> : : </a>
-<a name="534"><span class="lineNum"> 534 </span> :<span class="lineCov"> 6 : static int do_clear_i(struct gard_ctx *ctx, int pos, struct gard_record *gard, void *priv)</span></a>
-<a name="535"><span class="lineNum"> 535 </span> : : {</a>
-<a name="536"><span class="lineNum"> 536 </span> :<span class="lineCov"> 6 : int largest, rc = 0;</span></a>
-<a name="537"><span class="lineNum"> 537 </span> :<span class="lineCov"> 6 : char *buf;</span></a>
-<a name="538"><span class="lineNum"> 538 </span> :<span class="lineCov"> 6 : struct gard_record null_gard;</span></a>
-<a name="539"><span class="lineNum"> 539 </span> : : </a>
-<a name="540"><span class="lineNum"> 540 </span> :<span class="lineCov"> 6 : if (!gard || !ctx || !priv)</span></a>
-<a name="541"><span class="lineNum"> 541 </span> : : return -1;</a>
-<a name="542"><span class="lineNum"> 542 </span> : : </a>
-<a name="543"><span class="lineNum"> 543 </span> : : /* Not this one */</a>
-<a name="544"><span class="lineNum"> 544 </span> :<span class="lineCov"> 6 : if (be32toh(gard-&gt;record_id) != *(uint32_t *)priv)</span></a>
-<a name="545"><span class="lineNum"> 545 </span> : : return 0;</a>
+<a name="531"><span class="lineNum"> 531 </span> :<span class="lineCov"> 4 : id = strtoul(argv[1], NULL, 16);</span></a>
+<a name="532"><span class="lineNum"> 532 </span> : : </a>
+<a name="533"><span class="lineNum"> 533 </span> :<span class="lineCov"> 4 : rc = do_iterate(ctx, &amp;do_show_i, &amp;id);</span></a>
+<a name="534"><span class="lineNum"> 534 </span> : : </a>
+<a name="535"><span class="lineNum"> 535 </span> :<span class="lineCov"> 4 : return rc;</span></a>
+<a name="536"><span class="lineNum"> 536 </span> : : }</a>
+<a name="537"><span class="lineNum"> 537 </span> : : </a>
+<a name="538"><span class="lineNum"> 538 </span> :<span class="lineCov"> 6 : static int do_clear_i(struct gard_ctx *ctx, int pos, struct gard_record *gard, void *priv)</span></a>
+<a name="539"><span class="lineNum"> 539 </span> : : {</a>
+<a name="540"><span class="lineNum"> 540 </span> :<span class="lineCov"> 6 : int largest, rc = 0;</span></a>
+<a name="541"><span class="lineNum"> 541 </span> :<span class="lineCov"> 6 : char *buf;</span></a>
+<a name="542"><span class="lineNum"> 542 </span> :<span class="lineCov"> 6 : struct gard_record null_gard;</span></a>
+<a name="543"><span class="lineNum"> 543 </span> : : </a>
+<a name="544"><span class="lineNum"> 544 </span> :<span class="lineCov"> 6 : if (!gard || !ctx || !priv)</span></a>
+<a name="545"><span class="lineNum"> 545 </span> : : return -1;</a>
<a name="546"><span class="lineNum"> 546 </span> : : </a>
-<a name="547"><span class="lineNum"> 547 </span> :<span class="lineCov"> 6 : memset(&amp;null_gard, 0xFF, sizeof(null_gard));</span></a>
-<a name="548"><span class="lineNum"> 548 </span> : : </a>
-<a name="549"><span class="lineNum"> 549 </span> :<span class="lineCov"> 6 : largest = count_records(ctx);</span></a>
+<a name="547"><span class="lineNum"> 547 </span> : : /* Not this one */</a>
+<a name="548"><span class="lineNum"> 548 </span> :<span class="lineCov"> 6 : if (be32toh(gard-&gt;record_id) != *(uint32_t *)priv)</span></a>
+<a name="549"><span class="lineNum"> 549 </span> : : return 0;</a>
<a name="550"><span class="lineNum"> 550 </span> : : </a>
-<a name="551"><span class="lineNum"> 551 </span> :<span class="lineCov"> 6 : printf(&quot;Clearing gard record 0x%08x...&quot;, be32toh(gard-&gt;record_id));</span></a>
+<a name="551"><span class="lineNum"> 551 </span> :<span class="lineCov"> 6 : memset(&amp;null_gard, 0xFF, sizeof(null_gard));</span></a>
<a name="552"><span class="lineNum"> 552 </span> : : </a>
-<a name="553"><span class="lineNum"> 553 </span> :<span class="lineCov"> 6 : if (largest &lt; 0 || pos &gt; largest) {</span></a>
-<a name="554"><span class="lineNum"> 554 </span> : : /* Something went horribly wrong */</a>
-<a name="555"><span class="lineNum"> 555 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;largest index out of range %d\n&quot;, largest);</span></a>
-<a name="556"><span class="lineNum"> 556 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
-<a name="557"><span class="lineNum"> 557 </span> : : }</a>
-<a name="558"><span class="lineNum"> 558 </span> : : </a>
-<a name="559"><span class="lineNum"> 559 </span> :<span class="lineCov"> 6 : if (pos &lt; largest) {</span></a>
-<a name="560"><span class="lineNum"> 560 </span> : : /* We're not clearing the last record, shift all the records up */</a>
-<a name="561"><span class="lineNum"> 561 </span> :<span class="lineCov"> 6 : int buf_len = ((largest - pos) * sizeof(struct gard_record));</span></a>
-<a name="562"><span class="lineNum"> 562 </span> :<span class="lineCov"> 6 : int buf_pos = ctx-&gt;gard_data_pos + ((pos + 1) * sizeof(struct gard_record));</span></a>
-<a name="563"><span class="lineNum"> 563 </span> :<span class="lineCov"> 6 : buf = malloc(buf_len);</span></a>
-<a name="564"><span class="lineNum"> 564 </span> :<span class="lineCov"> 6 : if (!buf)</span></a>
-<a name="565"><span class="lineNum"> 565 </span> : : return -ENOMEM;</a>
-<a name="566"><span class="lineNum"> 566 </span> : : </a>
-<a name="567"><span class="lineNum"> 567 </span> :<span class="lineCov"> 6 : rc = blocklevel_read(ctx-&gt;bl, buf_pos, buf, buf_len);</span></a>
-<a name="568"><span class="lineNum"> 568 </span> :<span class="lineCov"> 6 : if (rc) {</span></a>
-<a name="569"><span class="lineNum"> 569 </span> :<span class="lineNoCov"> 0 : free(buf);</span></a>
-<a name="570"><span class="lineNum"> 570 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Couldn't read from flash at 0x%08x for len 0x%08x\n&quot;, buf_pos, buf_len);</span></a>
-<a name="571"><span class="lineNum"> 571 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
-<a name="572"><span class="lineNum"> 572 </span> : : }</a>
-<a name="573"><span class="lineNum"> 573 </span> : : </a>
-<a name="574"><span class="lineNum"> 574 </span> :<span class="lineCov"> 6 : rc = blocklevel_smart_write(ctx-&gt;bl, buf_pos - sizeof(*gard), buf, buf_len);</span></a>
-<a name="575"><span class="lineNum"> 575 </span> :<span class="lineCov"> 6 : free(buf);</span></a>
-<a name="576"><span class="lineNum"> 576 </span> :<span class="lineCov"> 6 : if (rc) {</span></a>
-<a name="577"><span class="lineNum"> 577 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Couldn't write to flash at 0x%08x for len 0x%08x\n&quot;,</span></a>
-<a name="578"><span class="lineNum"> 578 </span> : : buf_pos - (int) sizeof(struct gard_record), buf_len);</a>
-<a name="579"><span class="lineNum"> 579 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
-<a name="580"><span class="lineNum"> 580 </span> : : }</a>
-<a name="581"><span class="lineNum"> 581 </span> : : }</a>
-<a name="582"><span class="lineNum"> 582 </span> : : </a>
-<a name="583"><span class="lineNum"> 583 </span> : : /* Now wipe the last record */</a>
-<a name="584"><span class="lineNum"> 584 </span> :<span class="lineCov"> 6 : rc = blocklevel_smart_write(ctx-&gt;bl, ctx-&gt;gard_data_pos + (largest * sizeof(null_gard)),</span></a>
-<a name="585"><span class="lineNum"> 585 </span> : : &amp;null_gard, sizeof(null_gard));</a>
-<a name="586"><span class="lineNum"> 586 </span> :<span class="lineCov"> 6 : printf(&quot;done\n&quot;);</span></a>
-<a name="587"><span class="lineNum"> 587 </span> : : </a>
-<a name="588"><span class="lineNum"> 588 </span> :<span class="lineCov"> 6 : return rc;</span></a>
-<a name="589"><span class="lineNum"> 589 </span> : : }</a>
-<a name="590"><span class="lineNum"> 590 </span> : : </a>
-<a name="591"><span class="lineNum"> 591 </span> :<span class="lineCov"> 4 : static int reset_partition(struct gard_ctx *ctx)</span></a>
-<a name="592"><span class="lineNum"> 592 </span> : : {</a>
-<a name="593"><span class="lineNum"> 593 </span> :<span class="lineCov"> 4 : int no_ecc_len = (ctx-&gt;gard_data_len / 9) * 8;</span></a>
-<a name="594"><span class="lineNum"> 594 </span> :<span class="lineCov"> 4 : struct gard_record *gard;</span></a>
-<a name="595"><span class="lineNum"> 595 </span> :<span class="lineCov"> 4 : int rc = 0;</span></a>
-<a name="596"><span class="lineNum"> 596 </span> : : </a>
-<a name="597"><span class="lineNum"> 597 </span> :<span class="lineCov"> 4 : gard = malloc(ctx-&gt;gard_data_len);</span></a>
-<a name="598"><span class="lineNum"> 598 </span> :<span class="lineCov"> 4 : if (!gard) {</span></a>
-<a name="599"><span class="lineNum"> 599 </span> : : return FLASH_ERR_MALLOC_FAILED;</a>
-<a name="600"><span class="lineNum"> 600 </span> : : }</a>
-<a name="601"><span class="lineNum"> 601 </span> :<span class="lineCov"> 4 : memset(gard, 0xFF, ctx-&gt;gard_data_len);</span></a>
-<a name="602"><span class="lineNum"> 602 </span> : : </a>
-<a name="603"><span class="lineNum"> 603 </span> :<span class="lineCov"> 4 : rc = blocklevel_smart_erase(ctx-&gt;bl, ctx-&gt;gard_data_pos, ctx-&gt;gard_data_len);</span></a>
-<a name="604"><span class="lineNum"> 604 </span> :<span class="lineCov"> 4 : if (rc) {</span></a>
-<a name="605"><span class="lineNum"> 605 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Couldn't erase the gard partition. Bailing out\n&quot;);</span></a>
-<a name="606"><span class="lineNum"> 606 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="607"><span class="lineNum"> 607 </span> : : }</a>
-<a name="608"><span class="lineNum"> 608 </span> : : </a>
-<a name="609"><span class="lineNum"> 609 </span> :<span class="lineCov"> 4 : rc = blocklevel_write(ctx-&gt;bl, ctx-&gt;gard_data_pos, gard, no_ecc_len);</span></a>
-<a name="610"><span class="lineNum"> 610 </span> :<span class="lineCov"> 4 : if (rc)</span></a>
-<a name="611"><span class="lineNum"> 611 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Couldn't reset the entire gard partition. Bailing out\n&quot;);</span></a>
+<a name="553"><span class="lineNum"> 553 </span> :<span class="lineCov"> 6 : largest = count_records(ctx);</span></a>
+<a name="554"><span class="lineNum"> 554 </span> : : </a>
+<a name="555"><span class="lineNum"> 555 </span> :<span class="lineCov"> 6 : printf(&quot;Clearing gard record 0x%08x...&quot;, be32toh(gard-&gt;record_id));</span></a>
+<a name="556"><span class="lineNum"> 556 </span> : : </a>
+<a name="557"><span class="lineNum"> 557 </span> :<span class="lineCov"> 6 : if (largest &lt; 0 || pos &gt; largest) {</span></a>
+<a name="558"><span class="lineNum"> 558 </span> : : /* Something went horribly wrong */</a>
+<a name="559"><span class="lineNum"> 559 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;largest index out of range %d\n&quot;, largest);</span></a>
+<a name="560"><span class="lineNum"> 560 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
+<a name="561"><span class="lineNum"> 561 </span> : : }</a>
+<a name="562"><span class="lineNum"> 562 </span> : : </a>
+<a name="563"><span class="lineNum"> 563 </span> :<span class="lineCov"> 6 : if (pos &lt; largest) {</span></a>
+<a name="564"><span class="lineNum"> 564 </span> : : /* We're not clearing the last record, shift all the records up */</a>
+<a name="565"><span class="lineNum"> 565 </span> :<span class="lineCov"> 6 : int buf_len = ((largest - pos) * sizeof(struct gard_record));</span></a>
+<a name="566"><span class="lineNum"> 566 </span> :<span class="lineCov"> 6 : int buf_pos = ctx-&gt;gard_data_pos + ((pos + 1) * sizeof(struct gard_record));</span></a>
+<a name="567"><span class="lineNum"> 567 </span> :<span class="lineCov"> 6 : buf = malloc(buf_len);</span></a>
+<a name="568"><span class="lineNum"> 568 </span> :<span class="lineCov"> 6 : if (!buf)</span></a>
+<a name="569"><span class="lineNum"> 569 </span> : : return -ENOMEM;</a>
+<a name="570"><span class="lineNum"> 570 </span> : : </a>
+<a name="571"><span class="lineNum"> 571 </span> :<span class="lineCov"> 6 : rc = blocklevel_read(ctx-&gt;bl, buf_pos, buf, buf_len);</span></a>
+<a name="572"><span class="lineNum"> 572 </span> :<span class="lineCov"> 6 : if (rc) {</span></a>
+<a name="573"><span class="lineNum"> 573 </span> :<span class="lineNoCov"> 0 : free(buf);</span></a>
+<a name="574"><span class="lineNum"> 574 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Couldn't read from flash at 0x%08x for len 0x%08x\n&quot;, buf_pos, buf_len);</span></a>
+<a name="575"><span class="lineNum"> 575 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
+<a name="576"><span class="lineNum"> 576 </span> : : }</a>
+<a name="577"><span class="lineNum"> 577 </span> : : </a>
+<a name="578"><span class="lineNum"> 578 </span> :<span class="lineCov"> 6 : rc = blocklevel_smart_write(ctx-&gt;bl, buf_pos - sizeof(*gard), buf, buf_len);</span></a>
+<a name="579"><span class="lineNum"> 579 </span> :<span class="lineCov"> 6 : free(buf);</span></a>
+<a name="580"><span class="lineNum"> 580 </span> :<span class="lineCov"> 6 : if (rc) {</span></a>
+<a name="581"><span class="lineNum"> 581 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Couldn't write to flash at 0x%08x for len 0x%08x\n&quot;,</span></a>
+<a name="582"><span class="lineNum"> 582 </span> : : buf_pos - (int) sizeof(struct gard_record), buf_len);</a>
+<a name="583"><span class="lineNum"> 583 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
+<a name="584"><span class="lineNum"> 584 </span> : : }</a>
+<a name="585"><span class="lineNum"> 585 </span> : : }</a>
+<a name="586"><span class="lineNum"> 586 </span> : : </a>
+<a name="587"><span class="lineNum"> 587 </span> : : /* Now wipe the last record */</a>
+<a name="588"><span class="lineNum"> 588 </span> :<span class="lineCov"> 6 : rc = blocklevel_smart_write(ctx-&gt;bl, ctx-&gt;gard_data_pos + (largest * sizeof(null_gard)),</span></a>
+<a name="589"><span class="lineNum"> 589 </span> : : &amp;null_gard, sizeof(null_gard));</a>
+<a name="590"><span class="lineNum"> 590 </span> :<span class="lineCov"> 6 : printf(&quot;done\n&quot;);</span></a>
+<a name="591"><span class="lineNum"> 591 </span> : : </a>
+<a name="592"><span class="lineNum"> 592 </span> :<span class="lineCov"> 6 : return rc;</span></a>
+<a name="593"><span class="lineNum"> 593 </span> : : }</a>
+<a name="594"><span class="lineNum"> 594 </span> : : </a>
+<a name="595"><span class="lineNum"> 595 </span> :<span class="lineCov"> 4 : static int reset_partition(struct gard_ctx *ctx)</span></a>
+<a name="596"><span class="lineNum"> 596 </span> : : {</a>
+<a name="597"><span class="lineNum"> 597 </span> :<span class="lineCov"> 4 : int no_ecc_len = (ctx-&gt;gard_data_len / 9) * 8;</span></a>
+<a name="598"><span class="lineNum"> 598 </span> :<span class="lineCov"> 4 : struct gard_record *gard;</span></a>
+<a name="599"><span class="lineNum"> 599 </span> :<span class="lineCov"> 4 : int rc = 0;</span></a>
+<a name="600"><span class="lineNum"> 600 </span> : : </a>
+<a name="601"><span class="lineNum"> 601 </span> :<span class="lineCov"> 4 : gard = malloc(ctx-&gt;gard_data_len);</span></a>
+<a name="602"><span class="lineNum"> 602 </span> :<span class="lineCov"> 4 : if (!gard) {</span></a>
+<a name="603"><span class="lineNum"> 603 </span> : : return FLASH_ERR_MALLOC_FAILED;</a>
+<a name="604"><span class="lineNum"> 604 </span> : : }</a>
+<a name="605"><span class="lineNum"> 605 </span> :<span class="lineCov"> 4 : memset(gard, 0xFF, ctx-&gt;gard_data_len);</span></a>
+<a name="606"><span class="lineNum"> 606 </span> : : </a>
+<a name="607"><span class="lineNum"> 607 </span> :<span class="lineCov"> 4 : rc = blocklevel_smart_erase(ctx-&gt;bl, ctx-&gt;gard_data_pos, ctx-&gt;gard_data_len);</span></a>
+<a name="608"><span class="lineNum"> 608 </span> :<span class="lineCov"> 4 : if (rc) {</span></a>
+<a name="609"><span class="lineNum"> 609 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Couldn't erase the gard partition. Bailing out\n&quot;);</span></a>
+<a name="610"><span class="lineNum"> 610 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="611"><span class="lineNum"> 611 </span> : : }</a>
<a name="612"><span class="lineNum"> 612 </span> : : </a>
-<a name="613"><span class="lineNum"> 613 </span> :<span class="lineCov"> 4 : out:</span></a>
-<a name="614"><span class="lineNum"> 614 </span> :<span class="lineCov"> 4 : free(gard);</span></a>
-<a name="615"><span class="lineNum"> 615 </span> :<span class="lineCov"> 4 : return rc;</span></a>
-<a name="616"><span class="lineNum"> 616 </span> : : }</a>
-<a name="617"><span class="lineNum"> 617 </span> : : </a>
-<a name="618"><span class="lineNum"> 618 </span> :<span class="lineCov"> 10 : static int do_clear(struct gard_ctx *ctx, int argc, char **argv)</span></a>
-<a name="619"><span class="lineNum"> 619 </span> : : {</a>
-<a name="620"><span class="lineNum"> 620 </span> :<span class="lineCov"> 10 : int rc;</span></a>
-<a name="621"><span class="lineNum"> 621 </span> :<span class="lineCov"> 10 : uint32_t id;</span></a>
-<a name="622"><span class="lineNum"> 622 </span> : : </a>
-<a name="623"><span class="lineNum"> 623 </span> :<span class="lineCov"> 10 : if (argc != 2) {</span></a>
-<a name="624"><span class="lineNum"> 624 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;%s option requires a GARD record or 'all'\n&quot;, argv[0]);</span></a>
-<a name="625"><span class="lineNum"> 625 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
-<a name="626"><span class="lineNum"> 626 </span> : : }</a>
-<a name="627"><span class="lineNum"> 627 </span> : : </a>
-<a name="628"><span class="lineNum"> 628 </span> :<span class="lineCov"> 10 : if (strncmp(argv[1], &quot;all&quot;, strlen(&quot;all&quot;)) == 0) {</span></a>
-<a name="629"><span class="lineNum"> 629 </span> :<span class="lineCov"> 4 : printf(&quot;Clearing the entire gard partition...&quot;);</span></a>
-<a name="630"><span class="lineNum"> 630 </span> :<span class="lineCov"> 4 : fflush(stdout);</span></a>
-<a name="631"><span class="lineNum"> 631 </span> :<span class="lineCov"> 4 : rc = reset_partition(ctx);</span></a>
-<a name="632"><span class="lineNum"> 632 </span> :<span class="lineCov"> 4 : printf(&quot;done\n&quot;);</span></a>
-<a name="633"><span class="lineNum"> 633 </span> : : } else {</a>
-<a name="634"><span class="lineNum"> 634 </span> :<span class="lineCov"> 6 : id = strtoul(argv[1], NULL, 16);</span></a>
-<a name="635"><span class="lineNum"> 635 </span> :<span class="lineCov"> 6 : rc = do_iterate(ctx, do_clear_i, &amp;id);</span></a>
-<a name="636"><span class="lineNum"> 636 </span> : : }</a>
-<a name="637"><span class="lineNum"> 637 </span> : : </a>
-<a name="638"><span class="lineNum"> 638 </span> : : return rc;</a>
-<a name="639"><span class="lineNum"> 639 </span> : : }</a>
-<a name="640"><span class="lineNum"> 640 </span> : : </a>
-<a name="641"><span class="lineNum"> 641 </span> :<span class="lineCov"> 18 : static int do_create(struct gard_ctx *ctx, int argc, char **argv)</span></a>
-<a name="642"><span class="lineNum"> 642 </span> : : {</a>
-<a name="643"><span class="lineNum"> 643 </span> :<span class="lineCov"> 18 : int rc, pos, max_id = 0, last_pos = 0;</span></a>
-<a name="644"><span class="lineNum"> 644 </span> :<span class="lineCov"> 18 : struct gard_record gard;</span></a>
-<a name="645"><span class="lineNum"> 645 </span> :<span class="lineCov"> 18 : struct entity_path path;</span></a>
-<a name="646"><span class="lineNum"> 646 </span> : : </a>
-<a name="647"><span class="lineNum"> 647 </span> :<span class="lineCov"> 18 : if (argc &lt; 2) {</span></a>
-<a name="648"><span class="lineNum"> 648 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;create requires path to gard\n&quot;);</span></a>
-<a name="649"><span class="lineNum"> 649 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;e.g.\n&quot;);</span></a>
-<a name="650"><span class="lineNum"> 650 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot; /Sys0/Node0/Proc0\n&quot;);</span></a>
-<a name="651"><span class="lineNum"> 651 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot; /Sys0/Node0/DIMM15\n&quot;);</span></a>
-<a name="652"><span class="lineNum"> 652 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
-<a name="653"><span class="lineNum"> 653 </span> : : }</a>
-<a name="654"><span class="lineNum"> 654 </span> : : </a>
-<a name="655"><span class="lineNum"> 655 </span> :<span class="lineCov"> 18 : if (parse_path(argv[1], &amp;path)) {</span></a>
-<a name="656"><span class="lineNum"> 656 </span> :<span class="lineCov"> 8 : fprintf(stderr, &quot;Unable to parse path\n&quot;);</span></a>
-<a name="657"><span class="lineNum"> 657 </span> :<span class="lineCov"> 8 : return -1;</span></a>
-<a name="658"><span class="lineNum"> 658 </span> : : }</a>
-<a name="659"><span class="lineNum"> 659 </span> : : </a>
-<a name="660"><span class="lineNum"> 660 </span> : : /* check if we already have a gard record applied to this path */</a>
-<a name="661"><span class="lineNum"> 661 </span> :<span class="lineCov"> 14 : for_each_gard(ctx, pos, &amp;gard, &amp;rc) {</span></a>
-<a name="662"><span class="lineNum"> 662 </span> :<span class="lineCov"> 6 : if (!memcmp(&amp;path, &amp;gard.target_id, sizeof(path))) {</span></a>
-<a name="663"><span class="lineNum"> 663 </span> :<span class="lineCov"> 2 : fprintf(stderr,</span></a>
-<a name="664"><span class="lineNum"> 664 </span> : : &quot;Unit %s is already GARDed by record %#08x\n&quot;,</a>
-<a name="665"><span class="lineNum"> 665 </span> : : argv[1], be32toh(gard.record_id));</a>
-<a name="666"><span class="lineNum"> 666 </span> :<span class="lineCov"> 2 : return -1;</span></a>
-<a name="667"><span class="lineNum"> 667 </span> : : }</a>
-<a name="668"><span class="lineNum"> 668 </span> : : </a>
-<a name="669"><span class="lineNum"> 669 </span> : : /*</a>
-<a name="670"><span class="lineNum"> 670 </span> : : * Keep track of the largest record ID seen so far,</a>
-<a name="671"><span class="lineNum"> 671 </span> : : * we'll give the new record the max + 1 to ensure</a>
-<a name="672"><span class="lineNum"> 672 </span> : : * that it's unique</a>
-<a name="673"><span class="lineNum"> 673 </span> : : */</a>
-<a name="674"><span class="lineNum"> 674 </span> :<span class="lineCov"> 4 : if (be32toh(gard.record_id) &gt; max_id)</span></a>
-<a name="675"><span class="lineNum"> 675 </span> :<span class="lineCov"> 4 : max_id = be32toh(gard.record_id);</span></a>
-<a name="676"><span class="lineNum"> 676 </span> : : </a>
-<a name="677"><span class="lineNum"> 677 </span> :<span class="lineCov"> 4 : last_pos++;</span></a>
-<a name="678"><span class="lineNum"> 678 </span> : : }</a>
-<a name="679"><span class="lineNum"> 679 </span> : : </a>
-<a name="680"><span class="lineNum"> 680 </span> : : /* do we have an empty record to write into? */</a>
-<a name="681"><span class="lineNum"> 681 </span> :<span class="lineCov"> 8 : if (!rc &amp;&amp; !is_valid_record(&amp;gard)) {</span></a>
-<a name="682"><span class="lineNum"> 682 </span> :<span class="lineCov"> 8 : int offset = last_pos * sizeof(gard);</span></a>
+<a name="613"><span class="lineNum"> 613 </span> :<span class="lineCov"> 4 : rc = blocklevel_write(ctx-&gt;bl, ctx-&gt;gard_data_pos, gard, no_ecc_len);</span></a>
+<a name="614"><span class="lineNum"> 614 </span> :<span class="lineCov"> 4 : if (rc)</span></a>
+<a name="615"><span class="lineNum"> 615 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Couldn't reset the entire gard partition. Bailing out\n&quot;);</span></a>
+<a name="616"><span class="lineNum"> 616 </span> : : </a>
+<a name="617"><span class="lineNum"> 617 </span> :<span class="lineCov"> 4 : out:</span></a>
+<a name="618"><span class="lineNum"> 618 </span> :<span class="lineCov"> 4 : free(gard);</span></a>
+<a name="619"><span class="lineNum"> 619 </span> :<span class="lineCov"> 4 : return rc;</span></a>
+<a name="620"><span class="lineNum"> 620 </span> : : }</a>
+<a name="621"><span class="lineNum"> 621 </span> : : </a>
+<a name="622"><span class="lineNum"> 622 </span> :<span class="lineCov"> 10 : static int do_clear(struct gard_ctx *ctx, int argc, char **argv)</span></a>
+<a name="623"><span class="lineNum"> 623 </span> : : {</a>
+<a name="624"><span class="lineNum"> 624 </span> :<span class="lineCov"> 10 : int rc;</span></a>
+<a name="625"><span class="lineNum"> 625 </span> :<span class="lineCov"> 10 : uint32_t id;</span></a>
+<a name="626"><span class="lineNum"> 626 </span> : : </a>
+<a name="627"><span class="lineNum"> 627 </span> :<span class="lineCov"> 10 : if (argc != 2) {</span></a>
+<a name="628"><span class="lineNum"> 628 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;%s option requires a GARD record or 'all'\n&quot;, argv[0]);</span></a>
+<a name="629"><span class="lineNum"> 629 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
+<a name="630"><span class="lineNum"> 630 </span> : : }</a>
+<a name="631"><span class="lineNum"> 631 </span> : : </a>
+<a name="632"><span class="lineNum"> 632 </span> :<span class="lineCov"> 10 : if (strncmp(argv[1], &quot;all&quot;, strlen(&quot;all&quot;)) == 0) {</span></a>
+<a name="633"><span class="lineNum"> 633 </span> :<span class="lineCov"> 4 : printf(&quot;Clearing the entire gard partition...&quot;);</span></a>
+<a name="634"><span class="lineNum"> 634 </span> :<span class="lineCov"> 4 : fflush(stdout);</span></a>
+<a name="635"><span class="lineNum"> 635 </span> :<span class="lineCov"> 4 : rc = reset_partition(ctx);</span></a>
+<a name="636"><span class="lineNum"> 636 </span> :<span class="lineCov"> 4 : printf(&quot;done\n&quot;);</span></a>
+<a name="637"><span class="lineNum"> 637 </span> : : } else {</a>
+<a name="638"><span class="lineNum"> 638 </span> :<span class="lineCov"> 6 : id = strtoul(argv[1], NULL, 16);</span></a>
+<a name="639"><span class="lineNum"> 639 </span> :<span class="lineCov"> 6 : rc = do_iterate(ctx, do_clear_i, &amp;id);</span></a>
+<a name="640"><span class="lineNum"> 640 </span> : : }</a>
+<a name="641"><span class="lineNum"> 641 </span> : : </a>
+<a name="642"><span class="lineNum"> 642 </span> : : return rc;</a>
+<a name="643"><span class="lineNum"> 643 </span> : : }</a>
+<a name="644"><span class="lineNum"> 644 </span> : : </a>
+<a name="645"><span class="lineNum"> 645 </span> :<span class="lineCov"> 18 : static int do_create(struct gard_ctx *ctx, int argc, char **argv)</span></a>
+<a name="646"><span class="lineNum"> 646 </span> : : {</a>
+<a name="647"><span class="lineNum"> 647 </span> :<span class="lineCov"> 18 : int rc, pos, max_id = 0, last_pos = 0;</span></a>
+<a name="648"><span class="lineNum"> 648 </span> :<span class="lineCov"> 18 : struct gard_record gard;</span></a>
+<a name="649"><span class="lineNum"> 649 </span> :<span class="lineCov"> 18 : struct entity_path path;</span></a>
+<a name="650"><span class="lineNum"> 650 </span> : : </a>
+<a name="651"><span class="lineNum"> 651 </span> :<span class="lineCov"> 18 : if (argc &lt; 2) {</span></a>
+<a name="652"><span class="lineNum"> 652 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;create requires path to gard\n&quot;);</span></a>
+<a name="653"><span class="lineNum"> 653 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;e.g.\n&quot;);</span></a>
+<a name="654"><span class="lineNum"> 654 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot; /Sys0/Node0/Proc0\n&quot;);</span></a>
+<a name="655"><span class="lineNum"> 655 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot; /Sys0/Node0/DIMM15\n&quot;);</span></a>
+<a name="656"><span class="lineNum"> 656 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
+<a name="657"><span class="lineNum"> 657 </span> : : }</a>
+<a name="658"><span class="lineNum"> 658 </span> : : </a>
+<a name="659"><span class="lineNum"> 659 </span> :<span class="lineCov"> 18 : if (parse_path(argv[1], &amp;path)) {</span></a>
+<a name="660"><span class="lineNum"> 660 </span> :<span class="lineCov"> 8 : fprintf(stderr, &quot;Unable to parse path\n&quot;);</span></a>
+<a name="661"><span class="lineNum"> 661 </span> :<span class="lineCov"> 8 : return -1;</span></a>
+<a name="662"><span class="lineNum"> 662 </span> : : }</a>
+<a name="663"><span class="lineNum"> 663 </span> : : </a>
+<a name="664"><span class="lineNum"> 664 </span> : : /* check if we already have a gard record applied to this path */</a>
+<a name="665"><span class="lineNum"> 665 </span> :<span class="lineCov"> 14 : for_each_gard(ctx, pos, &amp;gard, &amp;rc) {</span></a>
+<a name="666"><span class="lineNum"> 666 </span> :<span class="lineCov"> 6 : if (!memcmp(&amp;path, &amp;gard.target_id, sizeof(path))) {</span></a>
+<a name="667"><span class="lineNum"> 667 </span> :<span class="lineCov"> 2 : fprintf(stderr,</span></a>
+<a name="668"><span class="lineNum"> 668 </span> : : &quot;Unit %s is already GARDed by record %#08x\n&quot;,</a>
+<a name="669"><span class="lineNum"> 669 </span> : : argv[1], be32toh(gard.record_id));</a>
+<a name="670"><span class="lineNum"> 670 </span> :<span class="lineCov"> 2 : return -1;</span></a>
+<a name="671"><span class="lineNum"> 671 </span> : : }</a>
+<a name="672"><span class="lineNum"> 672 </span> : : </a>
+<a name="673"><span class="lineNum"> 673 </span> : : /*</a>
+<a name="674"><span class="lineNum"> 674 </span> : : * Keep track of the largest record ID seen so far,</a>
+<a name="675"><span class="lineNum"> 675 </span> : : * we'll give the new record the max + 1 to ensure</a>
+<a name="676"><span class="lineNum"> 676 </span> : : * that it's unique</a>
+<a name="677"><span class="lineNum"> 677 </span> : : */</a>
+<a name="678"><span class="lineNum"> 678 </span> :<span class="lineCov"> 4 : if (be32toh(gard.record_id) &gt; max_id)</span></a>
+<a name="679"><span class="lineNum"> 679 </span> :<span class="lineCov"> 4 : max_id = be32toh(gard.record_id);</span></a>
+<a name="680"><span class="lineNum"> 680 </span> : : </a>
+<a name="681"><span class="lineNum"> 681 </span> :<span class="lineCov"> 4 : last_pos++;</span></a>
+<a name="682"><span class="lineNum"> 682 </span> : : }</a>
<a name="683"><span class="lineNum"> 683 </span> : : </a>
-<a name="684"><span class="lineNum"> 684 </span> :<span class="lineCov"> 8 : memset(&amp;gard, 0xff, sizeof(gard));</span></a>
-<a name="685"><span class="lineNum"> 685 </span> : : </a>
-<a name="686"><span class="lineNum"> 686 </span> :<span class="lineCov"> 8 : gard.record_id = be32toh(max_id + 1);</span></a>
-<a name="687"><span class="lineNum"> 687 </span> :<span class="lineCov"> 8 : gard.error_type = GARD_MANUAL;</span></a>
-<a name="688"><span class="lineNum"> 688 </span> :<span class="lineCov"> 8 : gard.target_id = path;</span></a>
-<a name="689"><span class="lineNum"> 689 </span> :<span class="lineCov"> 8 : gard.errlog_eid = 0x0;</span></a>
-<a name="690"><span class="lineNum"> 690 </span> : : </a>
-<a name="691"><span class="lineNum"> 691 </span> :<span class="lineCov"> 8 : if (offset &gt; ctx-&gt;gard_data_len - sizeof(gard)) {</span></a>
-<a name="692"><span class="lineNum"> 692 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;No space in GUARD for a new record\n&quot;);</span></a>
-<a name="693"><span class="lineNum"> 693 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
-<a name="694"><span class="lineNum"> 694 </span> : : }</a>
-<a name="695"><span class="lineNum"> 695 </span> : : </a>
-<a name="696"><span class="lineNum"> 696 </span> :<span class="lineCov"> 8 : rc = blocklevel_smart_write(ctx-&gt;bl,</span></a>
-<a name="697"><span class="lineNum"> 697 </span> :<span class="lineCov"> 8 : ctx-&gt;gard_data_pos + offset, &amp;gard, sizeof(gard));</span></a>
-<a name="698"><span class="lineNum"> 698 </span> : : }</a>
+<a name="684"><span class="lineNum"> 684 </span> : : /* do we have an empty record to write into? */</a>
+<a name="685"><span class="lineNum"> 685 </span> :<span class="lineCov"> 8 : if (!rc &amp;&amp; !is_valid_record(&amp;gard)) {</span></a>
+<a name="686"><span class="lineNum"> 686 </span> :<span class="lineCov"> 8 : int offset = last_pos * sizeof(gard);</span></a>
+<a name="687"><span class="lineNum"> 687 </span> : : </a>
+<a name="688"><span class="lineNum"> 688 </span> :<span class="lineCov"> 8 : memset(&amp;gard, 0xff, sizeof(gard));</span></a>
+<a name="689"><span class="lineNum"> 689 </span> : : </a>
+<a name="690"><span class="lineNum"> 690 </span> :<span class="lineCov"> 8 : gard.record_id = be32toh(max_id + 1);</span></a>
+<a name="691"><span class="lineNum"> 691 </span> :<span class="lineCov"> 8 : gard.error_type = GARD_MANUAL;</span></a>
+<a name="692"><span class="lineNum"> 692 </span> :<span class="lineCov"> 8 : gard.target_id = path;</span></a>
+<a name="693"><span class="lineNum"> 693 </span> :<span class="lineCov"> 8 : gard.errlog_eid = 0x0;</span></a>
+<a name="694"><span class="lineNum"> 694 </span> : : </a>
+<a name="695"><span class="lineNum"> 695 </span> :<span class="lineCov"> 8 : if (offset &gt; ctx-&gt;gard_data_len - sizeof(gard)) {</span></a>
+<a name="696"><span class="lineNum"> 696 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;No space in GUARD for a new record\n&quot;);</span></a>
+<a name="697"><span class="lineNum"> 697 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
+<a name="698"><span class="lineNum"> 698 </span> : : }</a>
<a name="699"><span class="lineNum"> 699 </span> : : </a>
-<a name="700"><span class="lineNum"> 700 </span> :<span class="lineCov"> 8 : return rc;</span></a>
-<a name="701"><span class="lineNum"> 701 </span> : : }</a>
-<a name="702"><span class="lineNum"> 702 </span> : : </a>
-<a name="703"><span class="lineNum"> 703 </span> :<span class="lineCov"> 46 : static int check_gard_partition(struct gard_ctx *ctx)</span></a>
-<a name="704"><span class="lineNum"> 704 </span> : : {</a>
-<a name="705"><span class="lineNum"> 705 </span> :<span class="lineCov"> 46 : int rc;</span></a>
-<a name="706"><span class="lineNum"> 706 </span> :<span class="lineCov"> 46 : struct gard_record gard;</span></a>
-<a name="707"><span class="lineNum"> 707 </span> :<span class="lineCov"> 46 : char msg[2];</span></a>
-<a name="708"><span class="lineNum"> 708 </span> : : </a>
-<a name="709"><span class="lineNum"> 709 </span> :<span class="lineCov"> 46 : if (ctx-&gt;gard_data_len == 0 || ctx-&gt;gard_data_len % sizeof(struct gard_record) != 0)</span></a>
-<a name="710"><span class="lineNum"> 710 </span> : : /* Just warn for now */</a>
-<a name="711"><span class="lineNum"> 711 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;The %s partition doesn't appear to be an exact multiple of&quot;</span></a>
-<a name="712"><span class="lineNum"> 712 </span> : : &quot;gard records in size: %zd vs %u (or partition is zero in length)\n&quot;,</a>
-<a name="713"><span class="lineNum"> 713 </span> : : FLASH_GARD_PART, sizeof(struct gard_record), ctx-&gt;gard_data_len);</a>
-<a name="714"><span class="lineNum"> 714 </span> : : </a>
-<a name="715"><span class="lineNum"> 715 </span> : : /*</a>
-<a name="716"><span class="lineNum"> 716 </span> : : * Attempt to read the first record, nothing can really operate if the</a>
-<a name="717"><span class="lineNum"> 717 </span> : : * first record is dead. There (currently) isn't a way to validate more</a>
-<a name="718"><span class="lineNum"> 718 </span> : : * than ECC correctness.</a>
-<a name="719"><span class="lineNum"> 719 </span> : : */</a>
-<a name="720"><span class="lineNum"> 720 </span> :<span class="lineCov"> 46 : rc = blocklevel_read(ctx-&gt;bl, ctx-&gt;gard_data_pos, &amp;gard, sizeof(gard));</span></a>
-<a name="721"><span class="lineNum"> 721 </span> :<span class="lineCov"> 46 : if (rc == FLASH_ERR_ECC_INVALID) {</span></a>
-<a name="722"><span class="lineNum"> 722 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;The data at the GUARD partition does not appear to be valid gard data\n&quot;);</span></a>
-<a name="723"><span class="lineNum"> 723 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Clear the entire GUARD partition? [y/N]\n&quot;);</span></a>
-<a name="724"><span class="lineNum"> 724 </span> :<span class="lineNoCov"> 0 : if (fgets(msg, sizeof(msg), stdin) == NULL) {</span></a>
-<a name="725"><span class="lineNum"> 725 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Couldn't read from standard input\n&quot;);</span></a>
-<a name="726"><span class="lineNum"> 726 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
-<a name="727"><span class="lineNum"> 727 </span> : : }</a>
-<a name="728"><span class="lineNum"> 728 </span> :<span class="lineNoCov"> 0 : if (msg[0] == 'y') {</span></a>
-<a name="729"><span class="lineNum"> 729 </span> :<span class="lineNoCov"> 0 : rc = reset_partition(ctx);</span></a>
-<a name="730"><span class="lineNum"> 730 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
-<a name="731"><span class="lineNum"> 731 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Couldn't reset the GUARD partition. Bailing out\n&quot;);</span></a>
-<a name="732"><span class="lineNum"> 732 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
-<a name="733"><span class="lineNum"> 733 </span> : : }</a>
-<a name="734"><span class="lineNum"> 734 </span> : : }</a>
-<a name="735"><span class="lineNum"> 735 </span> : : /*</a>
-<a name="736"><span class="lineNum"> 736 </span> : : * else leave rc as is so that the main bails out, not going to be</a>
-<a name="737"><span class="lineNum"> 737 </span> : : * able to do sensible anyway</a>
-<a name="738"><span class="lineNum"> 738 </span> : : */</a>
-<a name="739"><span class="lineNum"> 739 </span> : : }</a>
-<a name="740"><span class="lineNum"> 740 </span> : : return rc;</a>
-<a name="741"><span class="lineNum"> 741 </span> : : }</a>
-<a name="742"><span class="lineNum"> 742 </span> : : </a>
-<a name="743"><span class="lineNum"> 743 </span> : : __attribute__ ((unused))</a>
-<a name="744"><span class="lineNum"> 744 </span> : : static int do_nop(struct gard_ctx *ctx, int argc, char **argv)</a>
-<a name="745"><span class="lineNum"> 745 </span> : : {</a>
-<a name="746"><span class="lineNum"> 746 </span> : : (void)ctx;</a>
-<a name="747"><span class="lineNum"> 747 </span> : : (void)argc;</a>
-<a name="748"><span class="lineNum"> 748 </span> : : fprintf(stderr, &quot;Unimplemented action '%s'\n&quot;, argv[0]);</a>
-<a name="749"><span class="lineNum"> 749 </span> : : return EXIT_SUCCESS;</a>
-<a name="750"><span class="lineNum"> 750 </span> : : }</a>
-<a name="751"><span class="lineNum"> 751 </span> : : </a>
-<a name="752"><span class="lineNum"> 752 </span> : : struct {</a>
-<a name="753"><span class="lineNum"> 753 </span> : : const char *name;</a>
-<a name="754"><span class="lineNum"> 754 </span> : : const char *desc;</a>
-<a name="755"><span class="lineNum"> 755 </span> : : int (*fn)(struct gard_ctx *, int, char **);</a>
-<a name="756"><span class="lineNum"> 756 </span> : : } actions[] = {</a>
-<a name="757"><span class="lineNum"> 757 </span> : : { &quot;list&quot;, &quot;List current GARD records&quot;, do_list },</a>
-<a name="758"><span class="lineNum"> 758 </span> : : { &quot;show&quot;, &quot;Show details of a GARD record&quot;, do_show },</a>
-<a name="759"><span class="lineNum"> 759 </span> : : { &quot;clear&quot;, &quot;Clear GARD records&quot;, do_clear },</a>
-<a name="760"><span class="lineNum"> 760 </span> : : { &quot;create&quot;, &quot;Create a GARD record&quot;, do_create },</a>
-<a name="761"><span class="lineNum"> 761 </span> : : };</a>
-<a name="762"><span class="lineNum"> 762 </span> : : </a>
-<a name="763"><span class="lineNum"> 763 </span> :<span class="lineCov"> 2 : static void print_version(void)</span></a>
-<a name="764"><span class="lineNum"> 764 </span> : : {</a>
-<a name="765"><span class="lineNum"> 765 </span> :<span class="lineCov"> 2 : printf(&quot;Open-Power GARD tool %s\n&quot;, version);</span></a>
-<a name="766"><span class="lineNum"> 766 </span> : : }</a>
-<a name="767"><span class="lineNum"> 767 </span> : : </a>
-<a name="768"><span class="lineNum"> 768 </span> :<span class="lineCov"> 2 : static void usage(const char *progname)</span></a>
-<a name="769"><span class="lineNum"> 769 </span> : : {</a>
-<a name="770"><span class="lineNum"> 770 </span> :<span class="lineCov"> 2 : unsigned int i;</span></a>
+<a name="700"><span class="lineNum"> 700 </span> :<span class="lineCov"> 8 : rc = blocklevel_smart_write(ctx-&gt;bl,</span></a>
+<a name="701"><span class="lineNum"> 701 </span> :<span class="lineCov"> 8 : ctx-&gt;gard_data_pos + offset, &amp;gard, sizeof(gard));</span></a>
+<a name="702"><span class="lineNum"> 702 </span> : : }</a>
+<a name="703"><span class="lineNum"> 703 </span> : : </a>
+<a name="704"><span class="lineNum"> 704 </span> :<span class="lineCov"> 8 : return rc;</span></a>
+<a name="705"><span class="lineNum"> 705 </span> : : }</a>
+<a name="706"><span class="lineNum"> 706 </span> : : </a>
+<a name="707"><span class="lineNum"> 707 </span> :<span class="lineCov"> 46 : static int check_gard_partition(struct gard_ctx *ctx)</span></a>
+<a name="708"><span class="lineNum"> 708 </span> : : {</a>
+<a name="709"><span class="lineNum"> 709 </span> :<span class="lineCov"> 46 : int rc;</span></a>
+<a name="710"><span class="lineNum"> 710 </span> :<span class="lineCov"> 46 : struct gard_record gard;</span></a>
+<a name="711"><span class="lineNum"> 711 </span> :<span class="lineCov"> 46 : char msg[2];</span></a>
+<a name="712"><span class="lineNum"> 712 </span> : : </a>
+<a name="713"><span class="lineNum"> 713 </span> :<span class="lineCov"> 46 : if (ctx-&gt;gard_data_len == 0 || ctx-&gt;gard_data_len % sizeof(struct gard_record) != 0)</span></a>
+<a name="714"><span class="lineNum"> 714 </span> : : /* Just warn for now */</a>
+<a name="715"><span class="lineNum"> 715 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;The %s partition doesn't appear to be an exact multiple of&quot;</span></a>
+<a name="716"><span class="lineNum"> 716 </span> : : &quot;gard records in size: %zd vs %u (or partition is zero in length)\n&quot;,</a>
+<a name="717"><span class="lineNum"> 717 </span> : : FLASH_GARD_PART, sizeof(struct gard_record), ctx-&gt;gard_data_len);</a>
+<a name="718"><span class="lineNum"> 718 </span> : : </a>
+<a name="719"><span class="lineNum"> 719 </span> : : /*</a>
+<a name="720"><span class="lineNum"> 720 </span> : : * Attempt to read the first record, nothing can really operate if the</a>
+<a name="721"><span class="lineNum"> 721 </span> : : * first record is dead. There (currently) isn't a way to validate more</a>
+<a name="722"><span class="lineNum"> 722 </span> : : * than ECC correctness.</a>
+<a name="723"><span class="lineNum"> 723 </span> : : */</a>
+<a name="724"><span class="lineNum"> 724 </span> :<span class="lineCov"> 46 : rc = blocklevel_read(ctx-&gt;bl, ctx-&gt;gard_data_pos, &amp;gard, sizeof(gard));</span></a>
+<a name="725"><span class="lineNum"> 725 </span> :<span class="lineCov"> 46 : if (rc == FLASH_ERR_ECC_INVALID) {</span></a>
+<a name="726"><span class="lineNum"> 726 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;The data at the GUARD partition does not appear to be valid gard data\n&quot;);</span></a>
+<a name="727"><span class="lineNum"> 727 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Clear the entire GUARD partition? [y/N]\n&quot;);</span></a>
+<a name="728"><span class="lineNum"> 728 </span> :<span class="lineNoCov"> 0 : if (fgets(msg, sizeof(msg), stdin) == NULL) {</span></a>
+<a name="729"><span class="lineNum"> 729 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Couldn't read from standard input\n&quot;);</span></a>
+<a name="730"><span class="lineNum"> 730 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
+<a name="731"><span class="lineNum"> 731 </span> : : }</a>
+<a name="732"><span class="lineNum"> 732 </span> :<span class="lineNoCov"> 0 : if (msg[0] == 'y') {</span></a>
+<a name="733"><span class="lineNum"> 733 </span> :<span class="lineNoCov"> 0 : rc = reset_partition(ctx);</span></a>
+<a name="734"><span class="lineNum"> 734 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
+<a name="735"><span class="lineNum"> 735 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Couldn't reset the GUARD partition. Bailing out\n&quot;);</span></a>
+<a name="736"><span class="lineNum"> 736 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
+<a name="737"><span class="lineNum"> 737 </span> : : }</a>
+<a name="738"><span class="lineNum"> 738 </span> : : }</a>
+<a name="739"><span class="lineNum"> 739 </span> : : /*</a>
+<a name="740"><span class="lineNum"> 740 </span> : : * else leave rc as is so that the main bails out, not going to be</a>
+<a name="741"><span class="lineNum"> 741 </span> : : * able to do sensible anyway</a>
+<a name="742"><span class="lineNum"> 742 </span> : : */</a>
+<a name="743"><span class="lineNum"> 743 </span> : : }</a>
+<a name="744"><span class="lineNum"> 744 </span> : : return rc;</a>
+<a name="745"><span class="lineNum"> 745 </span> : : }</a>
+<a name="746"><span class="lineNum"> 746 </span> : : </a>
+<a name="747"><span class="lineNum"> 747 </span> : : __attribute__ ((unused))</a>
+<a name="748"><span class="lineNum"> 748 </span> : : static int do_nop(struct gard_ctx *ctx, int argc, char **argv)</a>
+<a name="749"><span class="lineNum"> 749 </span> : : {</a>
+<a name="750"><span class="lineNum"> 750 </span> : : (void)ctx;</a>
+<a name="751"><span class="lineNum"> 751 </span> : : (void)argc;</a>
+<a name="752"><span class="lineNum"> 752 </span> : : fprintf(stderr, &quot;Unimplemented action '%s'\n&quot;, argv[0]);</a>
+<a name="753"><span class="lineNum"> 753 </span> : : return EXIT_SUCCESS;</a>
+<a name="754"><span class="lineNum"> 754 </span> : : }</a>
+<a name="755"><span class="lineNum"> 755 </span> : : </a>
+<a name="756"><span class="lineNum"> 756 </span> : : struct {</a>
+<a name="757"><span class="lineNum"> 757 </span> : : const char *name;</a>
+<a name="758"><span class="lineNum"> 758 </span> : : const char *desc;</a>
+<a name="759"><span class="lineNum"> 759 </span> : : int (*fn)(struct gard_ctx *, int, char **);</a>
+<a name="760"><span class="lineNum"> 760 </span> : : } actions[] = {</a>
+<a name="761"><span class="lineNum"> 761 </span> : : { &quot;list&quot;, &quot;List current GARD records&quot;, do_list },</a>
+<a name="762"><span class="lineNum"> 762 </span> : : { &quot;show&quot;, &quot;Show details of a GARD record&quot;, do_show },</a>
+<a name="763"><span class="lineNum"> 763 </span> : : { &quot;clear&quot;, &quot;Clear GARD records&quot;, do_clear },</a>
+<a name="764"><span class="lineNum"> 764 </span> : : { &quot;create&quot;, &quot;Create a GARD record&quot;, do_create },</a>
+<a name="765"><span class="lineNum"> 765 </span> : : };</a>
+<a name="766"><span class="lineNum"> 766 </span> : : </a>
+<a name="767"><span class="lineNum"> 767 </span> :<span class="lineCov"> 2 : static void print_version(void)</span></a>
+<a name="768"><span class="lineNum"> 768 </span> : : {</a>
+<a name="769"><span class="lineNum"> 769 </span> :<span class="lineCov"> 4 : printf(&quot;Open-Power GARD tool %s\n&quot;, version);</span></a>
+<a name="770"><span class="lineNum"> 770 </span> : : }</a>
<a name="771"><span class="lineNum"> 771 </span> : : </a>
-<a name="772"><span class="lineNum"> 772 </span> :<span class="lineCov"> 2 : print_version();</span></a>
-<a name="773"><span class="lineNum"> 773 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;Usage: %s [-a -e -f &lt;file&gt; -p] &lt;command&gt; [&lt;args&gt;]\n\n&quot;,</span></a>
-<a name="774"><span class="lineNum"> 774 </span> : : progname);</a>
-<a name="775"><span class="lineNum"> 775 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;-8 --p8\n&quot;);</span></a>
-<a name="776"><span class="lineNum"> 776 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;-9 --p9\n\tSet the processor generation\n\n&quot;);</span></a>
-<a name="777"><span class="lineNum"> 777 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;-e --ecc\n\tForce reading/writing with ECC bytes.\n\n&quot;);</span></a>
-<a name="778"><span class="lineNum"> 778 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;-f --file &lt;file&gt;\n\tDon't search for MTD device,&quot;</span></a>
-<a name="779"><span class="lineNum"> 779 </span> : : &quot; read from &lt;file&gt;.\n\n&quot;);</a>
-<a name="780"><span class="lineNum"> 780 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;-p --part\n\tUsed in conjunction with -f to specify&quot;</span></a>
-<a name="781"><span class="lineNum"> 781 </span> : : &quot; that just\n&quot;);</a>
-<a name="782"><span class="lineNum"> 782 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;\tthe GUARD partition is in &lt;file&gt; and libffs\n&quot;);</span></a>
-<a name="783"><span class="lineNum"> 783 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;\tshouldn't be used.\n\n&quot;);</span></a>
-<a name="784"><span class="lineNum"> 784 </span> : : </a>
-<a name="785"><span class="lineNum"> 785 </span> : : </a>
-<a name="786"><span class="lineNum"> 786 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;Where &lt;command&gt; is one of:\n\n&quot;);</span></a>
-<a name="787"><span class="lineNum"> 787 </span> : : </a>
-<a name="788"><span class="lineNum"> 788 </span> :<span class="lineCov"> 12 : for (i = 0; i &lt; ARRAY_SIZE(actions); i++) {</span></a>
-<a name="789"><span class="lineNum"> 789 </span> :<span class="lineCov"> 8 : fprintf(stderr, &quot;\t%-7s\t%s\n&quot;,</span></a>
-<a name="790"><span class="lineNum"> 790 </span> : : actions[i].name, actions[i].desc);</a>
-<a name="791"><span class="lineNum"> 791 </span> : : }</a>
-<a name="792"><span class="lineNum"> 792 </span> :<span class="lineCov"> 2 : }</span></a>
-<a name="793"><span class="lineNum"> 793 </span> : : </a>
-<a name="794"><span class="lineNum"> 794 </span> :<span class="lineCov"> 48 : static bool is_fsp(void)</span></a>
-<a name="795"><span class="lineNum"> 795 </span> : : {</a>
-<a name="796"><span class="lineNum"> 796 </span> :<span class="lineCov"> 48 : return access(FDT_FSP_NODE, F_OK) == 0;</span></a>
-<a name="797"><span class="lineNum"> 797 </span> : : }</a>
+<a name="772"><span class="lineNum"> 772 </span> :<span class="lineCov"> 2 : static void usage(const char *progname)</span></a>
+<a name="773"><span class="lineNum"> 773 </span> : : {</a>
+<a name="774"><span class="lineNum"> 774 </span> :<span class="lineCov"> 2 : unsigned int i;</span></a>
+<a name="775"><span class="lineNum"> 775 </span> : : </a>
+<a name="776"><span class="lineNum"> 776 </span> :<span class="lineCov"> 2 : print_version();</span></a>
+<a name="777"><span class="lineNum"> 777 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;Usage: %s [-a -e -f &lt;file&gt; -p] &lt;command&gt; [&lt;args&gt;]\n\n&quot;,</span></a>
+<a name="778"><span class="lineNum"> 778 </span> : : progname);</a>
+<a name="779"><span class="lineNum"> 779 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;-8 --p8\n&quot;);</span></a>
+<a name="780"><span class="lineNum"> 780 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;-9 --p9\n&quot;);</span></a>
+<a name="781"><span class="lineNum"> 781 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;-0 --p10\n\tSet the processor generation\n\n&quot;);</span></a>
+<a name="782"><span class="lineNum"> 782 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;-e --ecc\n\tForce reading/writing with ECC bytes.\n\n&quot;);</span></a>
+<a name="783"><span class="lineNum"> 783 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;-f --file &lt;file&gt;\n\tDon't search for MTD device,&quot;</span></a>
+<a name="784"><span class="lineNum"> 784 </span> : : &quot; read from &lt;file&gt;.\n\n&quot;);</a>
+<a name="785"><span class="lineNum"> 785 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;-p --part\n\tUsed in conjunction with -f to specify&quot;</span></a>
+<a name="786"><span class="lineNum"> 786 </span> : : &quot; that just\n&quot;);</a>
+<a name="787"><span class="lineNum"> 787 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;\tthe GUARD partition is in &lt;file&gt; and libffs\n&quot;);</span></a>
+<a name="788"><span class="lineNum"> 788 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;\tshouldn't be used.\n\n&quot;);</span></a>
+<a name="789"><span class="lineNum"> 789 </span> : : </a>
+<a name="790"><span class="lineNum"> 790 </span> : : </a>
+<a name="791"><span class="lineNum"> 791 </span> :<span class="lineCov"> 2 : fprintf(stderr, &quot;Where &lt;command&gt; is one of:\n\n&quot;);</span></a>
+<a name="792"><span class="lineNum"> 792 </span> : : </a>
+<a name="793"><span class="lineNum"> 793 </span> :<span class="lineCov"> 12 : for (i = 0; i &lt; ARRAY_SIZE(actions); i++) {</span></a>
+<a name="794"><span class="lineNum"> 794 </span> :<span class="lineCov"> 8 : fprintf(stderr, &quot;\t%-7s\t%s\n&quot;,</span></a>
+<a name="795"><span class="lineNum"> 795 </span> : : actions[i].name, actions[i].desc);</a>
+<a name="796"><span class="lineNum"> 796 </span> : : }</a>
+<a name="797"><span class="lineNum"> 797 </span> :<span class="lineCov"> 2 : }</span></a>
<a name="798"><span class="lineNum"> 798 </span> : : </a>
-<a name="799"><span class="lineNum"> 799 </span> : : static struct option global_options[] = {</a>
-<a name="800"><span class="lineNum"> 800 </span> : : { &quot;file&quot;, required_argument, 0, 'f' },</a>
-<a name="801"><span class="lineNum"> 801 </span> : : { &quot;part&quot;, no_argument, 0, 'p' },</a>
-<a name="802"><span class="lineNum"> 802 </span> : : { &quot;ecc&quot;, no_argument, 0, 'e' },</a>
-<a name="803"><span class="lineNum"> 803 </span> : : { &quot;p8&quot;, no_argument, 0, '8' },</a>
-<a name="804"><span class="lineNum"> 804 </span> : : { &quot;p9&quot;, no_argument, 0, '9' },</a>
-<a name="805"><span class="lineNum"> 805 </span> : : { 0 },</a>
-<a name="806"><span class="lineNum"> 806 </span> : : };</a>
-<a name="807"><span class="lineNum"> 807 </span> : : static const char *global_optstring = &quot;+ef:p89&quot;;</a>
-<a name="808"><span class="lineNum"> 808 </span> : : </a>
-<a name="809"><span class="lineNum"> 809 </span> :<span class="lineCov"> 48 : int main(int argc, char **argv)</span></a>
-<a name="810"><span class="lineNum"> 810 </span> : : {</a>
-<a name="811"><span class="lineNum"> 811 </span> :<span class="lineCov"> 48 : const char *action, *progname;</span></a>
-<a name="812"><span class="lineNum"> 812 </span> :<span class="lineCov"> 48 : char *filename = NULL;</span></a>
-<a name="813"><span class="lineNum"> 813 </span> :<span class="lineCov"> 48 : struct gard_ctx _ctx, *ctx;</span></a>
-<a name="814"><span class="lineNum"> 814 </span> :<span class="lineCov"> 48 : uint64_t bl_size;</span></a>
-<a name="815"><span class="lineNum"> 815 </span> :<span class="lineCov"> 48 : int rc, i = 0;</span></a>
-<a name="816"><span class="lineNum"> 816 </span> :<span class="lineCov"> 48 : bool part = 0;</span></a>
-<a name="817"><span class="lineNum"> 817 </span> :<span class="lineCov"> 48 : bool ecc = 0;</span></a>
-<a name="818"><span class="lineNum"> 818 </span> : : </a>
-<a name="819"><span class="lineNum"> 819 </span> :<span class="lineCov"> 48 : progname = argv[0];</span></a>
-<a name="820"><span class="lineNum"> 820 </span> : : </a>
-<a name="821"><span class="lineNum"> 821 </span> :<span class="lineCov"> 48 : ctx = &amp;_ctx;</span></a>
-<a name="822"><span class="lineNum"> 822 </span> :<span class="lineCov"> 48 : memset(ctx, 0, sizeof(*ctx));</span></a>
-<a name="823"><span class="lineNum"> 823 </span> :<span class="lineCov"> 48 : memset(&amp;blank_record, 0xff, sizeof(blank_record));</span></a>
+<a name="799"><span class="lineNum"> 799 </span> :<span class="lineCov"> 48 : static bool is_fsp(void)</span></a>
+<a name="800"><span class="lineNum"> 800 </span> : : {</a>
+<a name="801"><span class="lineNum"> 801 </span> :<span class="lineCov"> 48 : return access(FDT_FSP_NODE, F_OK) == 0;</span></a>
+<a name="802"><span class="lineNum"> 802 </span> : : }</a>
+<a name="803"><span class="lineNum"> 803 </span> : : </a>
+<a name="804"><span class="lineNum"> 804 </span> : : static struct option global_options[] = {</a>
+<a name="805"><span class="lineNum"> 805 </span> : : { &quot;file&quot;, required_argument, 0, 'f' },</a>
+<a name="806"><span class="lineNum"> 806 </span> : : { &quot;part&quot;, no_argument, 0, 'p' },</a>
+<a name="807"><span class="lineNum"> 807 </span> : : { &quot;ecc&quot;, no_argument, 0, 'e' },</a>
+<a name="808"><span class="lineNum"> 808 </span> : : { &quot;p8&quot;, no_argument, 0, '8' },</a>
+<a name="809"><span class="lineNum"> 809 </span> : : { &quot;p9&quot;, no_argument, 0, '9' },</a>
+<a name="810"><span class="lineNum"> 810 </span> : : { &quot;p10&quot;, no_argument, 0, '0' },</a>
+<a name="811"><span class="lineNum"> 811 </span> : : { 0 },</a>
+<a name="812"><span class="lineNum"> 812 </span> : : };</a>
+<a name="813"><span class="lineNum"> 813 </span> : : static const char *global_optstring = &quot;+ef:p890&quot;;</a>
+<a name="814"><span class="lineNum"> 814 </span> : : </a>
+<a name="815"><span class="lineNum"> 815 </span> :<span class="lineCov"> 48 : int main(int argc, char **argv)</span></a>
+<a name="816"><span class="lineNum"> 816 </span> : : {</a>
+<a name="817"><span class="lineNum"> 817 </span> :<span class="lineCov"> 48 : const char *action, *progname;</span></a>
+<a name="818"><span class="lineNum"> 818 </span> :<span class="lineCov"> 48 : char *filename = NULL;</span></a>
+<a name="819"><span class="lineNum"> 819 </span> :<span class="lineCov"> 48 : struct gard_ctx _ctx, *ctx;</span></a>
+<a name="820"><span class="lineNum"> 820 </span> :<span class="lineCov"> 48 : uint64_t bl_size;</span></a>
+<a name="821"><span class="lineNum"> 821 </span> :<span class="lineCov"> 48 : int rc, i = 0;</span></a>
+<a name="822"><span class="lineNum"> 822 </span> :<span class="lineCov"> 48 : bool part = 0;</span></a>
+<a name="823"><span class="lineNum"> 823 </span> :<span class="lineCov"> 48 : bool ecc = 0;</span></a>
<a name="824"><span class="lineNum"> 824 </span> : : </a>
-<a name="825"><span class="lineNum"> 825 </span> : : /* process global options */</a>
-<a name="826"><span class="lineNum"> 826 </span> :<span class="lineCov"> 202 : for (;;) {</span></a>
-<a name="827"><span class="lineNum"> 827 </span> :<span class="lineCov"> 202 : int c;</span></a>
-<a name="828"><span class="lineNum"> 828 </span> : : </a>
-<a name="829"><span class="lineNum"> 829 </span> :<span class="lineCov"> 202 : c = getopt_long(argc, argv, global_optstring, global_options,</span></a>
-<a name="830"><span class="lineNum"> 830 </span> : : NULL);</a>
-<a name="831"><span class="lineNum"> 831 </span> :<span class="lineCov"> 202 : if (c == -1)</span></a>
-<a name="832"><span class="lineNum"> 832 </span> : : break;</a>
-<a name="833"><span class="lineNum"> 833 </span> :<span class="lineCov"> 154 : switch (c) {</span></a>
-<a name="834"><span class="lineNum"> 834 </span> :<span class="lineCov"> 46 : case 'e':</span></a>
-<a name="835"><span class="lineNum"> 835 </span> :<span class="lineCov"> 46 : ecc = true;</span></a>
-<a name="836"><span class="lineNum"> 836 </span> :<span class="lineCov"> 46 : break;</span></a>
-<a name="837"><span class="lineNum"> 837 </span> :<span class="lineCov"> 46 : case 'f':</span></a>
-<a name="838"><span class="lineNum"> 838 </span> : : /* If they specify -f twice */</a>
-<a name="839"><span class="lineNum"> 839 </span> :<span class="lineCov"> 46 : free(filename);</span></a>
-<a name="840"><span class="lineNum"> 840 </span> : : </a>
-<a name="841"><span class="lineNum"> 841 </span> :<span class="lineCov"> 46 : filename = strdup(optarg);</span></a>
-<a name="842"><span class="lineNum"> 842 </span> :<span class="lineCov"> 46 : if (!filename) {</span></a>
-<a name="843"><span class="lineNum"> 843 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Out of memory\n&quot;);</span></a>
-<a name="844"><span class="lineNum"> 844 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span></a>
-<a name="845"><span class="lineNum"> 845 </span> : : }</a>
-<a name="846"><span class="lineNum"> 846 </span> : : break;</a>
-<a name="847"><span class="lineNum"> 847 </span> :<span class="lineCov"> 46 : case 'p':</span></a>
-<a name="848"><span class="lineNum"> 848 </span> :<span class="lineCov"> 46 : part = true;</span></a>
-<a name="849"><span class="lineNum"> 849 </span> :<span class="lineCov"> 46 : break;</span></a>
-<a name="850"><span class="lineNum"> 850 </span> :<span class="lineCov"> 10 : case '8':</span></a>
-<a name="851"><span class="lineNum"> 851 </span> :<span class="lineCov"> 10 : set_chip_gen(p8_chip_units);</span></a>
-<a name="852"><span class="lineNum"> 852 </span> :<span class="lineCov"> 10 : break;</span></a>
-<a name="853"><span class="lineNum"> 853 </span> :<span class="lineCov"> 6 : case '9':</span></a>
-<a name="854"><span class="lineNum"> 854 </span> :<span class="lineCov"> 6 : set_chip_gen(p9_chip_units);</span></a>
-<a name="855"><span class="lineNum"> 855 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="856"><span class="lineNum"> 856 </span> :<span class="lineNoCov"> 0 : case '?':</span></a>
-<a name="857"><span class="lineNum"> 857 </span> :<span class="lineNoCov"> 0 : usage(progname);</span></a>
-<a name="858"><span class="lineNum"> 858 </span> :<span class="lineNoCov"> 0 : rc = EXIT_FAILURE;</span></a>
-<a name="859"><span class="lineNum"> 859 </span> :<span class="lineNoCov"> 0 : goto out_free;</span></a>
-<a name="860"><span class="lineNum"> 860 </span> : : }</a>
-<a name="861"><span class="lineNum"> 861 </span> : : }</a>
-<a name="862"><span class="lineNum"> 862 </span> : : </a>
-<a name="863"><span class="lineNum"> 863 </span> : : </a>
-<a name="864"><span class="lineNum"> 864 </span> :<span class="lineCov"> 48 : if (is_fsp() &amp;&amp; !filename) {</span></a>
-<a name="865"><span class="lineNum"> 865 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;This is the OpenPower gard tool which does &quot;</span></a>
-<a name="866"><span class="lineNum"> 866 </span> : : &quot;not support FSP systems\n&quot;);</a>
-<a name="867"><span class="lineNum"> 867 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span></a>
-<a name="868"><span class="lineNum"> 868 </span> : : }</a>
-<a name="869"><span class="lineNum"> 869 </span> : : </a>
-<a name="870"><span class="lineNum"> 870 </span> : : </a>
-<a name="871"><span class="lineNum"> 871 </span> : : /*</a>
-<a name="872"><span class="lineNum"> 872 </span> : : * It doesn't make sense to specify that we have the gard partition but</a>
-<a name="873"><span class="lineNum"> 873 </span> : : * read from flash</a>
-<a name="874"><span class="lineNum"> 874 </span> : : */</a>
-<a name="875"><span class="lineNum"> 875 </span> :<span class="lineCov"> 48 : if (part &amp;&amp; !filename) {</span></a>
-<a name="876"><span class="lineNum"> 876 </span> :<span class="lineNoCov"> 0 : usage(progname);</span></a>
-<a name="877"><span class="lineNum"> 877 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;-p only makes sense when used with -f!\n&quot;);</span></a>
-<a name="878"><span class="lineNum"> 878 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span></a>
-<a name="879"><span class="lineNum"> 879 </span> : : }</a>
-<a name="880"><span class="lineNum"> 880 </span> : : </a>
-<a name="881"><span class="lineNum"> 881 </span> : : /* do we have a command? */</a>
-<a name="882"><span class="lineNum"> 882 </span> :<span class="lineCov"> 48 : if (optind == argc) {</span></a>
-<a name="883"><span class="lineNum"> 883 </span> :<span class="lineCov"> 2 : usage(progname);</span></a>
-<a name="884"><span class="lineNum"> 884 </span> :<span class="lineCov"> 2 : rc = EXIT_FAILURE;</span></a>
-<a name="885"><span class="lineNum"> 885 </span> :<span class="lineCov"> 2 : goto out_free;</span></a>
-<a name="886"><span class="lineNum"> 886 </span> : : }</a>
-<a name="887"><span class="lineNum"> 887 </span> : : </a>
-<a name="888"><span class="lineNum"> 888 </span> :<span class="lineCov"> 46 : argc -= optind;</span></a>
-<a name="889"><span class="lineNum"> 889 </span> :<span class="lineCov"> 46 : argv += optind;</span></a>
-<a name="890"><span class="lineNum"> 890 </span> :<span class="lineCov"> 46 : action = argv[0];</span></a>
-<a name="891"><span class="lineNum"> 891 </span> : : </a>
-<a name="892"><span class="lineNum"> 892 </span> : : #ifdef __arm__</a>
-<a name="893"><span class="lineNum"> 893 </span> : : /*</a>
-<a name="894"><span class="lineNum"> 894 </span> : : * HACK: Look for a vPNOR GUARD file if we haven't been given anything</a>
-<a name="895"><span class="lineNum"> 895 </span> : : * explitly. If it exists then we can safely assume that:</a>
-<a name="896"><span class="lineNum"> 896 </span> : : * a) The host is a P9</a>
-<a name="897"><span class="lineNum"> 897 </span> : : * b) The file is ECC protected</a>
-<a name="898"><span class="lineNum"> 898 </span> : : * c) The file is a bare partition.</a>
-<a name="899"><span class="lineNum"> 899 </span> : : *</a>
-<a name="900"><span class="lineNum"> 900 </span> : : * This is a stupid hack, but there's not other sane place for it.</a>
-<a name="901"><span class="lineNum"> 901 </span> : : * arch_init_flash() always looks for a FFS formatted PNOR when</a>
-<a name="902"><span class="lineNum"> 902 </span> : : * filename is NULL</a>
-<a name="903"><span class="lineNum"> 903 </span> : : */</a>
-<a name="904"><span class="lineNum"> 904 </span> : : if (!filename) {</a>
-<a name="905"><span class="lineNum"> 905 </span> : : struct stat buf;</a>
-<a name="906"><span class="lineNum"> 906 </span> : : </a>
-<a name="907"><span class="lineNum"> 907 </span> : : if (!stat(VPNOR_GARD_FILE, &amp;buf)) {</a>
-<a name="908"><span class="lineNum"> 908 </span> : : filename = strdup(VPNOR_GARD_FILE);</a>
-<a name="909"><span class="lineNum"> 909 </span> : : /* BUG: This ignores the command line settings */</a>
-<a name="910"><span class="lineNum"> 910 </span> : : part = true;</a>
-<a name="911"><span class="lineNum"> 911 </span> : : ecc = true;</a>
-<a name="912"><span class="lineNum"> 912 </span> : : } else if (!stat(VPNOR_GARD_DIR, &amp;buf)) {</a>
-<a name="913"><span class="lineNum"> 913 </span> : : printf(VPNOR_GARD_FILE&quot; is missing. Nothing to do\n&quot;);</a>
-<a name="914"><span class="lineNum"> 914 </span> : : return 0;</a>
-<a name="915"><span class="lineNum"> 915 </span> : : }</a>
-<a name="916"><span class="lineNum"> 916 </span> : : }</a>
-<a name="917"><span class="lineNum"> 917 </span> : : #endif</a>
-<a name="918"><span class="lineNum"> 918 </span> : : </a>
-<a name="919"><span class="lineNum"> 919 </span> :<span class="lineCov"> 46 : if (!chip_units)</span></a>
-<a name="920"><span class="lineNum"> 920 </span> :<span class="lineCov"> 30 : guess_chip_gen();</span></a>
-<a name="921"><span class="lineNum"> 921 </span> : : </a>
-<a name="922"><span class="lineNum"> 922 </span> : : /*</a>
-<a name="923"><span class="lineNum"> 923 </span> : : * Force libflash to do flash accesses via the MTD. Direct mode is</a>
-<a name="924"><span class="lineNum"> 924 </span> : : * generally unsafe since it fiddles with the flash controller state</a>
-<a name="925"><span class="lineNum"> 925 </span> : : * underneath the kernel. Anyone who needs direct mode can use pflash</a>
-<a name="926"><span class="lineNum"> 926 </span> : : * instead.</a>
-<a name="927"><span class="lineNum"> 927 </span> : : */</a>
-<a name="928"><span class="lineNum"> 928 </span> :<span class="lineCov"> 46 : arch_flash_access(ctx-&gt;bl, PNOR_MTD);</span></a>
-<a name="929"><span class="lineNum"> 929 </span> : : </a>
-<a name="930"><span class="lineNum"> 930 </span> :<span class="lineCov"> 46 : if (arch_flash_init(&amp;(ctx-&gt;bl), filename, true)) {</span></a>
-<a name="931"><span class="lineNum"> 931 </span> : : /* Can fail for a few ways, most likely couldn't open MTD device */</a>
-<a name="932"><span class="lineNum"> 932 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Can't open %s\n&quot;, filename ? filename : &quot;MTD Device. Are you root?&quot;);</span></a>
-<a name="933"><span class="lineNum"> 933 </span> :<span class="lineNoCov"> 0 : rc = EXIT_FAILURE;</span></a>
-<a name="934"><span class="lineNum"> 934 </span> :<span class="lineNoCov"> 0 : goto out_free;</span></a>
-<a name="935"><span class="lineNum"> 935 </span> : : }</a>
-<a name="936"><span class="lineNum"> 936 </span> : : </a>
-<a name="937"><span class="lineNum"> 937 </span> :<span class="lineCov"> 46 : rc = blocklevel_get_info(ctx-&gt;bl, NULL, &amp;bl_size, NULL);</span></a>
-<a name="938"><span class="lineNum"> 938 </span> :<span class="lineCov"> 46 : if (rc)</span></a>
-<a name="939"><span class="lineNum"> 939 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="940"><span class="lineNum"> 940 </span> : : </a>
-<a name="941"><span class="lineNum"> 941 </span> :<span class="lineCov"> 46 : if (bl_size &gt; UINT_MAX) {</span></a>
-<a name="942"><span class="lineNum"> 942 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;MTD device bigger than %i: size: %&quot; PRIu64 &quot;\n&quot;,</span></a>
-<a name="943"><span class="lineNum"> 943 </span> : : UINT_MAX, bl_size);</a>
-<a name="944"><span class="lineNum"> 944 </span> :<span class="lineNoCov"> 0 : rc = EXIT_FAILURE;</span></a>
-<a name="945"><span class="lineNum"> 945 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="946"><span class="lineNum"> 946 </span> : : }</a>
-<a name="947"><span class="lineNum"> 947 </span> :<span class="lineCov"> 46 : ctx-&gt;f_size = bl_size;</span></a>
-<a name="948"><span class="lineNum"> 948 </span> : : </a>
-<a name="949"><span class="lineNum"> 949 </span> :<span class="lineCov"> 46 : if (!part) {</span></a>
-<a name="950"><span class="lineNum"> 950 </span> :<span class="lineNoCov"> 0 : rc = ffs_init(0, ctx-&gt;f_size, ctx-&gt;bl, &amp;ctx-&gt;ffs, 1);</span></a>
-<a name="951"><span class="lineNum"> 951 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
-<a name="952"><span class="lineNum"> 952 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="953"><span class="lineNum"> 953 </span> : : </a>
-<a name="954"><span class="lineNum"> 954 </span> :<span class="lineNoCov"> 0 : rc = ffs_lookup_part(ctx-&gt;ffs, FLASH_GARD_PART, &amp;ctx-&gt;gard_part_idx);</span></a>
-<a name="955"><span class="lineNum"> 955 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
-<a name="956"><span class="lineNum"> 956 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="825"><span class="lineNum"> 825 </span> :<span class="lineCov"> 48 : progname = argv[0];</span></a>
+<a name="826"><span class="lineNum"> 826 </span> : : </a>
+<a name="827"><span class="lineNum"> 827 </span> :<span class="lineCov"> 48 : ctx = &amp;_ctx;</span></a>
+<a name="828"><span class="lineNum"> 828 </span> :<span class="lineCov"> 48 : memset(ctx, 0, sizeof(*ctx));</span></a>
+<a name="829"><span class="lineNum"> 829 </span> :<span class="lineCov"> 48 : memset(&amp;blank_record, 0xff, sizeof(blank_record));</span></a>
+<a name="830"><span class="lineNum"> 830 </span> : : </a>
+<a name="831"><span class="lineNum"> 831 </span> : : /* process global options */</a>
+<a name="832"><span class="lineNum"> 832 </span> :<span class="lineCov"> 202 : for (;;) {</span></a>
+<a name="833"><span class="lineNum"> 833 </span> :<span class="lineCov"> 202 : int c;</span></a>
+<a name="834"><span class="lineNum"> 834 </span> : : </a>
+<a name="835"><span class="lineNum"> 835 </span> :<span class="lineCov"> 202 : c = getopt_long(argc, argv, global_optstring, global_options,</span></a>
+<a name="836"><span class="lineNum"> 836 </span> : : NULL);</a>
+<a name="837"><span class="lineNum"> 837 </span> :<span class="lineCov"> 202 : if (c == -1)</span></a>
+<a name="838"><span class="lineNum"> 838 </span> : : break;</a>
+<a name="839"><span class="lineNum"> 839 </span> :<span class="lineCov"> 154 : switch (c) {</span></a>
+<a name="840"><span class="lineNum"> 840 </span> :<span class="lineCov"> 46 : case 'e':</span></a>
+<a name="841"><span class="lineNum"> 841 </span> :<span class="lineCov"> 46 : ecc = true;</span></a>
+<a name="842"><span class="lineNum"> 842 </span> :<span class="lineCov"> 46 : break;</span></a>
+<a name="843"><span class="lineNum"> 843 </span> :<span class="lineCov"> 46 : case 'f':</span></a>
+<a name="844"><span class="lineNum"> 844 </span> : : /* If they specify -f twice */</a>
+<a name="845"><span class="lineNum"> 845 </span> :<span class="lineCov"> 46 : free(filename);</span></a>
+<a name="846"><span class="lineNum"> 846 </span> : : </a>
+<a name="847"><span class="lineNum"> 847 </span> :<span class="lineCov"> 46 : filename = strdup(optarg);</span></a>
+<a name="848"><span class="lineNum"> 848 </span> :<span class="lineCov"> 46 : if (!filename) {</span></a>
+<a name="849"><span class="lineNum"> 849 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Out of memory\n&quot;);</span></a>
+<a name="850"><span class="lineNum"> 850 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span></a>
+<a name="851"><span class="lineNum"> 851 </span> : : }</a>
+<a name="852"><span class="lineNum"> 852 </span> : : break;</a>
+<a name="853"><span class="lineNum"> 853 </span> :<span class="lineCov"> 46 : case 'p':</span></a>
+<a name="854"><span class="lineNum"> 854 </span> :<span class="lineCov"> 46 : part = true;</span></a>
+<a name="855"><span class="lineNum"> 855 </span> :<span class="lineCov"> 46 : break;</span></a>
+<a name="856"><span class="lineNum"> 856 </span> :<span class="lineCov"> 10 : case '8':</span></a>
+<a name="857"><span class="lineNum"> 857 </span> :<span class="lineCov"> 10 : set_chip_gen(p8_chip_units);</span></a>
+<a name="858"><span class="lineNum"> 858 </span> :<span class="lineCov"> 10 : break;</span></a>
+<a name="859"><span class="lineNum"> 859 </span> :<span class="lineCov"> 6 : case '9':</span></a>
+<a name="860"><span class="lineNum"> 860 </span> :<span class="lineCov"> 6 : set_chip_gen(p9_chip_units);</span></a>
+<a name="861"><span class="lineNum"> 861 </span> :<span class="lineCov"> 6 : break;</span></a>
+<a name="862"><span class="lineNum"> 862 </span> :<span class="lineNoCov"> 0 : case '0':</span></a>
+<a name="863"><span class="lineNum"> 863 </span> :<span class="lineNoCov"> 0 : set_chip_gen(p10_chip_units);</span></a>
+<a name="864"><span class="lineNum"> 864 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="865"><span class="lineNum"> 865 </span> :<span class="lineNoCov"> 0 : case '?':</span></a>
+<a name="866"><span class="lineNum"> 866 </span> :<span class="lineNoCov"> 0 : usage(progname);</span></a>
+<a name="867"><span class="lineNum"> 867 </span> :<span class="lineNoCov"> 0 : rc = EXIT_FAILURE;</span></a>
+<a name="868"><span class="lineNum"> 868 </span> :<span class="lineNoCov"> 0 : goto out_free;</span></a>
+<a name="869"><span class="lineNum"> 869 </span> : : }</a>
+<a name="870"><span class="lineNum"> 870 </span> : : }</a>
+<a name="871"><span class="lineNum"> 871 </span> : : </a>
+<a name="872"><span class="lineNum"> 872 </span> : : </a>
+<a name="873"><span class="lineNum"> 873 </span> :<span class="lineCov"> 48 : if (is_fsp() &amp;&amp; !filename) {</span></a>
+<a name="874"><span class="lineNum"> 874 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;This is the OpenPower gard tool which does &quot;</span></a>
+<a name="875"><span class="lineNum"> 875 </span> : : &quot;not support FSP systems\n&quot;);</a>
+<a name="876"><span class="lineNum"> 876 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span></a>
+<a name="877"><span class="lineNum"> 877 </span> : : }</a>
+<a name="878"><span class="lineNum"> 878 </span> : : </a>
+<a name="879"><span class="lineNum"> 879 </span> : : </a>
+<a name="880"><span class="lineNum"> 880 </span> : : /*</a>
+<a name="881"><span class="lineNum"> 881 </span> : : * It doesn't make sense to specify that we have the gard partition but</a>
+<a name="882"><span class="lineNum"> 882 </span> : : * read from flash</a>
+<a name="883"><span class="lineNum"> 883 </span> : : */</a>
+<a name="884"><span class="lineNum"> 884 </span> :<span class="lineCov"> 48 : if (part &amp;&amp; !filename) {</span></a>
+<a name="885"><span class="lineNum"> 885 </span> :<span class="lineNoCov"> 0 : usage(progname);</span></a>
+<a name="886"><span class="lineNum"> 886 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;-p only makes sense when used with -f!\n&quot;);</span></a>
+<a name="887"><span class="lineNum"> 887 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span></a>
+<a name="888"><span class="lineNum"> 888 </span> : : }</a>
+<a name="889"><span class="lineNum"> 889 </span> : : </a>
+<a name="890"><span class="lineNum"> 890 </span> : : /* do we have a command? */</a>
+<a name="891"><span class="lineNum"> 891 </span> :<span class="lineCov"> 48 : if (optind == argc) {</span></a>
+<a name="892"><span class="lineNum"> 892 </span> :<span class="lineCov"> 2 : usage(progname);</span></a>
+<a name="893"><span class="lineNum"> 893 </span> :<span class="lineCov"> 2 : rc = EXIT_FAILURE;</span></a>
+<a name="894"><span class="lineNum"> 894 </span> :<span class="lineCov"> 2 : goto out_free;</span></a>
+<a name="895"><span class="lineNum"> 895 </span> : : }</a>
+<a name="896"><span class="lineNum"> 896 </span> : : </a>
+<a name="897"><span class="lineNum"> 897 </span> :<span class="lineCov"> 46 : argc -= optind;</span></a>
+<a name="898"><span class="lineNum"> 898 </span> :<span class="lineCov"> 46 : argv += optind;</span></a>
+<a name="899"><span class="lineNum"> 899 </span> :<span class="lineCov"> 46 : action = argv[0];</span></a>
+<a name="900"><span class="lineNum"> 900 </span> : : </a>
+<a name="901"><span class="lineNum"> 901 </span> : : #ifdef __arm__</a>
+<a name="902"><span class="lineNum"> 902 </span> : : /*</a>
+<a name="903"><span class="lineNum"> 903 </span> : : * HACK: Look for a vPNOR GUARD file if we haven't been given anything</a>
+<a name="904"><span class="lineNum"> 904 </span> : : * explitly. If it exists then we can safely assume that:</a>
+<a name="905"><span class="lineNum"> 905 </span> : : * a) The host is a P9</a>
+<a name="906"><span class="lineNum"> 906 </span> : : * b) The file is ECC protected</a>
+<a name="907"><span class="lineNum"> 907 </span> : : * c) The file is a bare partition.</a>
+<a name="908"><span class="lineNum"> 908 </span> : : *</a>
+<a name="909"><span class="lineNum"> 909 </span> : : * This is a stupid hack, but there's not other sane place for it.</a>
+<a name="910"><span class="lineNum"> 910 </span> : : * arch_init_flash() always looks for a FFS formatted PNOR when</a>
+<a name="911"><span class="lineNum"> 911 </span> : : * filename is NULL</a>
+<a name="912"><span class="lineNum"> 912 </span> : : */</a>
+<a name="913"><span class="lineNum"> 913 </span> : : if (!filename) {</a>
+<a name="914"><span class="lineNum"> 914 </span> : : struct stat buf;</a>
+<a name="915"><span class="lineNum"> 915 </span> : : </a>
+<a name="916"><span class="lineNum"> 916 </span> : : if (!stat(VPNOR_GARD_FILE, &amp;buf)) {</a>
+<a name="917"><span class="lineNum"> 917 </span> : : filename = strdup(VPNOR_GARD_FILE);</a>
+<a name="918"><span class="lineNum"> 918 </span> : : /* BUG: This ignores the command line settings */</a>
+<a name="919"><span class="lineNum"> 919 </span> : : part = true;</a>
+<a name="920"><span class="lineNum"> 920 </span> : : ecc = true;</a>
+<a name="921"><span class="lineNum"> 921 </span> : : } else if (!stat(VPNOR_GARD_DIR, &amp;buf)) {</a>
+<a name="922"><span class="lineNum"> 922 </span> : : printf(VPNOR_GARD_FILE&quot; is missing. Nothing to do\n&quot;);</a>
+<a name="923"><span class="lineNum"> 923 </span> : : return 0;</a>
+<a name="924"><span class="lineNum"> 924 </span> : : }</a>
+<a name="925"><span class="lineNum"> 925 </span> : : }</a>
+<a name="926"><span class="lineNum"> 926 </span> : : #endif</a>
+<a name="927"><span class="lineNum"> 927 </span> : : </a>
+<a name="928"><span class="lineNum"> 928 </span> :<span class="lineCov"> 46 : if (!chip_units)</span></a>
+<a name="929"><span class="lineNum"> 929 </span> :<span class="lineCov"> 30 : guess_chip_gen();</span></a>
+<a name="930"><span class="lineNum"> 930 </span> : : </a>
+<a name="931"><span class="lineNum"> 931 </span> : : /*</a>
+<a name="932"><span class="lineNum"> 932 </span> : : * Force libflash to do flash accesses via the MTD. Direct mode is</a>
+<a name="933"><span class="lineNum"> 933 </span> : : * generally unsafe since it fiddles with the flash controller state</a>
+<a name="934"><span class="lineNum"> 934 </span> : : * underneath the kernel. Anyone who needs direct mode can use pflash</a>
+<a name="935"><span class="lineNum"> 935 </span> : : * instead.</a>
+<a name="936"><span class="lineNum"> 936 </span> : : */</a>
+<a name="937"><span class="lineNum"> 937 </span> :<span class="lineCov"> 46 : arch_flash_access(ctx-&gt;bl, PNOR_MTD);</span></a>
+<a name="938"><span class="lineNum"> 938 </span> : : </a>
+<a name="939"><span class="lineNum"> 939 </span> :<span class="lineCov"> 46 : if (arch_flash_init(&amp;(ctx-&gt;bl), filename, true)) {</span></a>
+<a name="940"><span class="lineNum"> 940 </span> : : /* Can fail for a few ways, most likely couldn't open MTD device */</a>
+<a name="941"><span class="lineNum"> 941 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Can't open %s\n&quot;, filename ? filename : &quot;MTD Device. Are you root?&quot;);</span></a>
+<a name="942"><span class="lineNum"> 942 </span> :<span class="lineNoCov"> 0 : rc = EXIT_FAILURE;</span></a>
+<a name="943"><span class="lineNum"> 943 </span> :<span class="lineNoCov"> 0 : goto out_free;</span></a>
+<a name="944"><span class="lineNum"> 944 </span> : : }</a>
+<a name="945"><span class="lineNum"> 945 </span> : : </a>
+<a name="946"><span class="lineNum"> 946 </span> :<span class="lineCov"> 46 : rc = blocklevel_get_info(ctx-&gt;bl, NULL, &amp;bl_size, NULL);</span></a>
+<a name="947"><span class="lineNum"> 947 </span> :<span class="lineCov"> 46 : if (rc)</span></a>
+<a name="948"><span class="lineNum"> 948 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="949"><span class="lineNum"> 949 </span> : : </a>
+<a name="950"><span class="lineNum"> 950 </span> :<span class="lineCov"> 46 : if (bl_size &gt; UINT_MAX) {</span></a>
+<a name="951"><span class="lineNum"> 951 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;MTD device bigger than %i: size: %&quot; PRIu64 &quot;\n&quot;,</span></a>
+<a name="952"><span class="lineNum"> 952 </span> : : UINT_MAX, bl_size);</a>
+<a name="953"><span class="lineNum"> 953 </span> :<span class="lineNoCov"> 0 : rc = EXIT_FAILURE;</span></a>
+<a name="954"><span class="lineNum"> 954 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="955"><span class="lineNum"> 955 </span> : : }</a>
+<a name="956"><span class="lineNum"> 956 </span> :<span class="lineCov"> 46 : ctx-&gt;f_size = bl_size;</span></a>
<a name="957"><span class="lineNum"> 957 </span> : : </a>
-<a name="958"><span class="lineNum"> 958 </span> :<span class="lineNoCov"> 0 : rc = ffs_part_info(ctx-&gt;ffs, ctx-&gt;gard_part_idx, NULL, &amp;(ctx-&gt;gard_data_pos),</span></a>
-<a name="959"><span class="lineNum"> 959 </span> : : &amp;(ctx-&gt;gard_data_len), NULL, NULL);</a>
+<a name="958"><span class="lineNum"> 958 </span> :<span class="lineCov"> 46 : if (!part) {</span></a>
+<a name="959"><span class="lineNum"> 959 </span> :<span class="lineNoCov"> 0 : rc = ffs_init(0, ctx-&gt;f_size, ctx-&gt;bl, &amp;ctx-&gt;ffs, 1);</span></a>
<a name="960"><span class="lineNum"> 960 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
<a name="961"><span class="lineNum"> 961 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="962"><span class="lineNum"> 962 </span> : : } else {</a>
-<a name="963"><span class="lineNum"> 963 </span> :<span class="lineCov"> 46 : if (ecc) {</span></a>
-<a name="964"><span class="lineNum"> 964 </span> :<span class="lineCov"> 46 : rc = blocklevel_ecc_protect(ctx-&gt;bl, 0, ctx-&gt;f_size);</span></a>
-<a name="965"><span class="lineNum"> 965 </span> :<span class="lineCov"> 46 : if (rc)</span></a>
-<a name="966"><span class="lineNum"> 966 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="967"><span class="lineNum"> 967 </span> : : }</a>
-<a name="968"><span class="lineNum"> 968 </span> : : </a>
-<a name="969"><span class="lineNum"> 969 </span> :<span class="lineCov"> 46 : ctx-&gt;gard_data_pos = 0;</span></a>
-<a name="970"><span class="lineNum"> 970 </span> :<span class="lineCov"> 46 : ctx-&gt;gard_data_len = ctx-&gt;f_size;</span></a>
-<a name="971"><span class="lineNum"> 971 </span> : : }</a>
-<a name="972"><span class="lineNum"> 972 </span> : : </a>
-<a name="973"><span class="lineNum"> 973 </span> :<span class="lineCov"> 46 : rc = check_gard_partition(ctx);</span></a>
-<a name="974"><span class="lineNum"> 974 </span> :<span class="lineCov"> 46 : if (rc) {</span></a>
-<a name="975"><span class="lineNum"> 975 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Does not appear to be sane gard data\n&quot;);</span></a>
-<a name="976"><span class="lineNum"> 976 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="977"><span class="lineNum"> 977 </span> : : }</a>
-<a name="978"><span class="lineNum"> 978 </span> : : </a>
-<a name="979"><span class="lineNum"> 979 </span> :<span class="lineCov"> 124 : for (i = 0; i &lt; ARRAY_SIZE(actions); i++) {</span></a>
-<a name="980"><span class="lineNum"> 980 </span> :<span class="lineCov"> 124 : if (!strcmp(actions[i].name, action)) {</span></a>
-<a name="981"><span class="lineNum"> 981 </span> :<span class="lineCov"> 46 : rc = actions[i].fn(ctx, argc, argv);</span></a>
-<a name="982"><span class="lineNum"> 982 </span> :<span class="lineCov"> 46 : break;</span></a>
-<a name="983"><span class="lineNum"> 983 </span> : : }</a>
-<a name="984"><span class="lineNum"> 984 </span> : : }</a>
-<a name="985"><span class="lineNum"> 985 </span> : : </a>
-<a name="986"><span class="lineNum"> 986 </span> :<span class="lineNoCov"> 0 : out:</span></a>
-<a name="987"><span class="lineNum"> 987 </span> :<span class="lineCov"> 46 : if (ctx-&gt;ffs)</span></a>
-<a name="988"><span class="lineNum"> 988 </span> :<span class="lineNoCov"> 0 : ffs_close(ctx-&gt;ffs);</span></a>
-<a name="989"><span class="lineNum"> 989 </span> : : </a>
-<a name="990"><span class="lineNum"> 990 </span> :<span class="lineCov"> 46 : file_exit_close(ctx-&gt;bl);</span></a>
-<a name="991"><span class="lineNum"> 991 </span> : : </a>
-<a name="992"><span class="lineNum"> 992 </span> :<span class="lineCov"> 46 : if (i == ARRAY_SIZE(actions)) {</span></a>
-<a name="993"><span class="lineNum"> 993 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;%s: '%s' isn't a valid command\n&quot;, progname, action);</span></a>
-<a name="994"><span class="lineNum"> 994 </span> :<span class="lineNoCov"> 0 : usage(progname);</span></a>
-<a name="995"><span class="lineNum"> 995 </span> :<span class="lineNoCov"> 0 : rc = EXIT_FAILURE;</span></a>
-<a name="996"><span class="lineNum"> 996 </span> :<span class="lineNoCov"> 0 : goto out_free;</span></a>
-<a name="997"><span class="lineNum"> 997 </span> : : }</a>
+<a name="962"><span class="lineNum"> 962 </span> : : </a>
+<a name="963"><span class="lineNum"> 963 </span> :<span class="lineNoCov"> 0 : rc = ffs_lookup_part(ctx-&gt;ffs, FLASH_GARD_PART, &amp;ctx-&gt;gard_part_idx);</span></a>
+<a name="964"><span class="lineNum"> 964 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
+<a name="965"><span class="lineNum"> 965 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="966"><span class="lineNum"> 966 </span> : : </a>
+<a name="967"><span class="lineNum"> 967 </span> :<span class="lineNoCov"> 0 : rc = ffs_part_info(ctx-&gt;ffs, ctx-&gt;gard_part_idx, NULL, &amp;(ctx-&gt;gard_data_pos),</span></a>
+<a name="968"><span class="lineNum"> 968 </span> : : &amp;(ctx-&gt;gard_data_len), NULL, NULL);</a>
+<a name="969"><span class="lineNum"> 969 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
+<a name="970"><span class="lineNum"> 970 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="971"><span class="lineNum"> 971 </span> : : } else {</a>
+<a name="972"><span class="lineNum"> 972 </span> :<span class="lineCov"> 46 : if (ecc) {</span></a>
+<a name="973"><span class="lineNum"> 973 </span> :<span class="lineCov"> 46 : rc = blocklevel_ecc_protect(ctx-&gt;bl, 0, ctx-&gt;f_size);</span></a>
+<a name="974"><span class="lineNum"> 974 </span> :<span class="lineCov"> 46 : if (rc)</span></a>
+<a name="975"><span class="lineNum"> 975 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="976"><span class="lineNum"> 976 </span> : : }</a>
+<a name="977"><span class="lineNum"> 977 </span> : : </a>
+<a name="978"><span class="lineNum"> 978 </span> :<span class="lineCov"> 46 : ctx-&gt;gard_data_pos = 0;</span></a>
+<a name="979"><span class="lineNum"> 979 </span> :<span class="lineCov"> 46 : ctx-&gt;gard_data_len = ctx-&gt;f_size;</span></a>
+<a name="980"><span class="lineNum"> 980 </span> : : }</a>
+<a name="981"><span class="lineNum"> 981 </span> : : </a>
+<a name="982"><span class="lineNum"> 982 </span> :<span class="lineCov"> 46 : rc = check_gard_partition(ctx);</span></a>
+<a name="983"><span class="lineNum"> 983 </span> :<span class="lineCov"> 46 : if (rc) {</span></a>
+<a name="984"><span class="lineNum"> 984 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Does not appear to be sane gard data\n&quot;);</span></a>
+<a name="985"><span class="lineNum"> 985 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="986"><span class="lineNum"> 986 </span> : : }</a>
+<a name="987"><span class="lineNum"> 987 </span> : : </a>
+<a name="988"><span class="lineNum"> 988 </span> :<span class="lineCov"> 124 : for (i = 0; i &lt; ARRAY_SIZE(actions); i++) {</span></a>
+<a name="989"><span class="lineNum"> 989 </span> :<span class="lineCov"> 124 : if (!strcmp(actions[i].name, action)) {</span></a>
+<a name="990"><span class="lineNum"> 990 </span> :<span class="lineCov"> 46 : rc = actions[i].fn(ctx, argc, argv);</span></a>
+<a name="991"><span class="lineNum"> 991 </span> :<span class="lineCov"> 46 : break;</span></a>
+<a name="992"><span class="lineNum"> 992 </span> : : }</a>
+<a name="993"><span class="lineNum"> 993 </span> : : }</a>
+<a name="994"><span class="lineNum"> 994 </span> : : </a>
+<a name="995"><span class="lineNum"> 995 </span> :<span class="lineNoCov"> 0 : out:</span></a>
+<a name="996"><span class="lineNum"> 996 </span> :<span class="lineCov"> 46 : if (ctx-&gt;ffs)</span></a>
+<a name="997"><span class="lineNum"> 997 </span> :<span class="lineNoCov"> 0 : ffs_close(ctx-&gt;ffs);</span></a>
<a name="998"><span class="lineNum"> 998 </span> : : </a>
-<a name="999"><span class="lineNum"> 999 </span> :<span class="lineCov"> 46 : if (rc &gt; 0) {</span></a>
-<a name="1000"><span class="lineNum"> 1000 </span> :<span class="lineNoCov"> 0 : show_flash_err(rc);</span></a>
-<a name="1001"><span class="lineNum"> 1001 </span> :<span class="lineNoCov"> 0 : if (filename &amp;&amp; rc == FFS_ERR_BAD_MAGIC)</span></a>
-<a name="1002"><span class="lineNum"> 1002 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Maybe you didn't give a full flash image file?\nDid you mean '--part'?\n&quot;);</span></a>
-<a name="1003"><span class="lineNum"> 1003 </span> : : }</a>
-<a name="1004"><span class="lineNum"> 1004 </span> : : </a>
-<a name="1005"><span class="lineNum"> 1005 </span> :<span class="lineCov"> 46 : out_free:</span></a>
-<a name="1006"><span class="lineNum"> 1006 </span> :<span class="lineCov"> 48 : free(filename);</span></a>
-<a name="1007"><span class="lineNum"> 1007 </span> :<span class="lineCov"> 48 : return rc;</span></a>
-<a name="1008"><span class="lineNum"> 1008 </span> : : }</a>
+<a name="999"><span class="lineNum"> 999 </span> :<span class="lineCov"> 46 : file_exit_close(ctx-&gt;bl);</span></a>
+<a name="1000"><span class="lineNum"> 1000 </span> : : </a>
+<a name="1001"><span class="lineNum"> 1001 </span> :<span class="lineCov"> 46 : if (i == ARRAY_SIZE(actions)) {</span></a>
+<a name="1002"><span class="lineNum"> 1002 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;%s: '%s' isn't a valid command\n&quot;, progname, action);</span></a>
+<a name="1003"><span class="lineNum"> 1003 </span> :<span class="lineNoCov"> 0 : usage(progname);</span></a>
+<a name="1004"><span class="lineNum"> 1004 </span> :<span class="lineNoCov"> 0 : rc = EXIT_FAILURE;</span></a>
+<a name="1005"><span class="lineNum"> 1005 </span> :<span class="lineNoCov"> 0 : goto out_free;</span></a>
+<a name="1006"><span class="lineNum"> 1006 </span> : : }</a>
+<a name="1007"><span class="lineNum"> 1007 </span> : : </a>
+<a name="1008"><span class="lineNum"> 1008 </span> :<span class="lineCov"> 46 : if (rc &gt; 0) {</span></a>
+<a name="1009"><span class="lineNum"> 1009 </span> :<span class="lineNoCov"> 0 : show_flash_err(rc);</span></a>
+<a name="1010"><span class="lineNum"> 1010 </span> :<span class="lineNoCov"> 0 : if (filename &amp;&amp; rc == FFS_ERR_BAD_MAGIC)</span></a>
+<a name="1011"><span class="lineNum"> 1011 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Maybe you didn't give a full flash image file?\nDid you mean '--part'?\n&quot;);</span></a>
+<a name="1012"><span class="lineNum"> 1012 </span> : : }</a>
+<a name="1013"><span class="lineNum"> 1013 </span> : : </a>
+<a name="1014"><span class="lineNum"> 1014 </span> :<span class="lineCov"> 46 : out_free:</span></a>
+<a name="1015"><span class="lineNum"> 1015 </span> :<span class="lineCov"> 48 : free(filename);</span></a>
+<a name="1016"><span class="lineNum"> 1016 </span> :<span class="lineCov"> 48 : return rc;</span></a>
+<a name="1017"><span class="lineNum"> 1017 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/external/gard/index-sort-b.html b/coverage-report/external/gard/index-sort-b.html
index 60b292d..4080f3e 100644
--- a/coverage-report/external/gard/index-sort-b.html
+++ b/coverage-report/external/gard/index-sort-b.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">326</td>
- <td class="headerCovTableEntry">468</td>
- <td class="headerCovTableEntryLo">69.7 %</td>
+ <td class="headerCovTableEntry">329</td>
+ <td class="headerCovTableEntry">464</td>
+ <td class="headerCovTableEntryLo">70.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">21</td>
<td class="headerCovTableEntry">22</td>
- <td class="headerCovTableEntry">23</td>
- <td class="headerCovTableEntryHi">95.7 %</td>
+ <td class="headerCovTableEntryHi">95.5 %</td>
</tr>
<tr>
<td></td>
@@ -84,12 +84,12 @@
<tr>
<td class="coverFile"><a href="gard.c.gcov.html">gard.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=70 height=10 alt="69.7%"><img src="../../snow.png" width=30 height=10 alt="69.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=71 height=10 alt="70.9%"><img src="../../snow.png" width=29 height=10 alt="70.9%"></td></tr></table>
</td>
- <td class="coverPerLo">69.7&nbsp;%</td>
- <td class="coverNumLo">326 / 468</td>
- <td class="coverPerHi">95.7&nbsp;%</td>
- <td class="coverNumHi">22 / 23</td>
+ <td class="coverPerLo">70.9&nbsp;%</td>
+ <td class="coverNumLo">329 / 464</td>
+ <td class="coverPerHi">95.5&nbsp;%</td>
+ <td class="coverNumHi">21 / 22</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/gard/index-sort-f.html b/coverage-report/external/gard/index-sort-f.html
index 9eb1b23..6be4e0a 100644
--- a/coverage-report/external/gard/index-sort-f.html
+++ b/coverage-report/external/gard/index-sort-f.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">326</td>
- <td class="headerCovTableEntry">468</td>
- <td class="headerCovTableEntryLo">69.7 %</td>
+ <td class="headerCovTableEntry">329</td>
+ <td class="headerCovTableEntry">464</td>
+ <td class="headerCovTableEntryLo">70.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">21</td>
<td class="headerCovTableEntry">22</td>
- <td class="headerCovTableEntry">23</td>
- <td class="headerCovTableEntryHi">95.7 %</td>
+ <td class="headerCovTableEntryHi">95.5 %</td>
</tr>
<tr>
<td></td>
@@ -84,12 +84,12 @@
<tr>
<td class="coverFile"><a href="gard.c.gcov.html">gard.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=70 height=10 alt="69.7%"><img src="../../snow.png" width=30 height=10 alt="69.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=71 height=10 alt="70.9%"><img src="../../snow.png" width=29 height=10 alt="70.9%"></td></tr></table>
</td>
- <td class="coverPerLo">69.7&nbsp;%</td>
- <td class="coverNumLo">326 / 468</td>
- <td class="coverPerHi">95.7&nbsp;%</td>
- <td class="coverNumHi">22 / 23</td>
+ <td class="coverPerLo">70.9&nbsp;%</td>
+ <td class="coverNumLo">329 / 464</td>
+ <td class="coverPerHi">95.5&nbsp;%</td>
+ <td class="coverNumHi">21 / 22</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/gard/index-sort-l.html b/coverage-report/external/gard/index-sort-l.html
index 90b57cb..ca07aa3 100644
--- a/coverage-report/external/gard/index-sort-l.html
+++ b/coverage-report/external/gard/index-sort-l.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">326</td>
- <td class="headerCovTableEntry">468</td>
- <td class="headerCovTableEntryLo">69.7 %</td>
+ <td class="headerCovTableEntry">329</td>
+ <td class="headerCovTableEntry">464</td>
+ <td class="headerCovTableEntryLo">70.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">21</td>
<td class="headerCovTableEntry">22</td>
- <td class="headerCovTableEntry">23</td>
- <td class="headerCovTableEntryHi">95.7 %</td>
+ <td class="headerCovTableEntryHi">95.5 %</td>
</tr>
<tr>
<td></td>
@@ -84,12 +84,12 @@
<tr>
<td class="coverFile"><a href="gard.c.gcov.html">gard.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=70 height=10 alt="69.7%"><img src="../../snow.png" width=30 height=10 alt="69.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=71 height=10 alt="70.9%"><img src="../../snow.png" width=29 height=10 alt="70.9%"></td></tr></table>
</td>
- <td class="coverPerLo">69.7&nbsp;%</td>
- <td class="coverNumLo">326 / 468</td>
- <td class="coverPerHi">95.7&nbsp;%</td>
- <td class="coverNumHi">22 / 23</td>
+ <td class="coverPerLo">70.9&nbsp;%</td>
+ <td class="coverNumLo">329 / 464</td>
+ <td class="coverPerHi">95.5&nbsp;%</td>
+ <td class="coverNumHi">21 / 22</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/gard/index.html b/coverage-report/external/gard/index.html
index 969ebcf..67553e1 100644
--- a/coverage-report/external/gard/index.html
+++ b/coverage-report/external/gard/index.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">326</td>
- <td class="headerCovTableEntry">468</td>
- <td class="headerCovTableEntryLo">69.7 %</td>
+ <td class="headerCovTableEntry">329</td>
+ <td class="headerCovTableEntry">464</td>
+ <td class="headerCovTableEntryLo">70.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">21</td>
<td class="headerCovTableEntry">22</td>
- <td class="headerCovTableEntry">23</td>
- <td class="headerCovTableEntryHi">95.7 %</td>
+ <td class="headerCovTableEntryHi">95.5 %</td>
</tr>
<tr>
<td></td>
@@ -84,12 +84,12 @@
<tr>
<td class="coverFile"><a href="gard.c.gcov.html">gard.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=70 height=10 alt="69.7%"><img src="../../snow.png" width=30 height=10 alt="69.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=71 height=10 alt="70.9%"><img src="../../snow.png" width=29 height=10 alt="70.9%"></td></tr></table>
</td>
- <td class="coverPerLo">69.7&nbsp;%</td>
- <td class="coverNumLo">326 / 468</td>
- <td class="coverPerHi">95.7&nbsp;%</td>
- <td class="coverNumHi">22 / 23</td>
+ <td class="coverPerLo">70.9&nbsp;%</td>
+ <td class="coverNumLo">329 / 464</td>
+ <td class="coverPerHi">95.5&nbsp;%</td>
+ <td class="coverNumHi">21 / 22</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/gard/libflash/blocklevel.c.func-sort-c.html b/coverage-report/external/gard/libflash/blocklevel.c.func-sort-c.html
index 48926e5..21104b9 100644
--- a/coverage-report/external/gard/libflash/blocklevel.c.func-sort-c.html
+++ b/coverage-report/external/gard/libflash/blocklevel.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">155</td>
- <td class="headerCovTableEntry">382</td>
- <td class="headerCovTableEntryLo">40.6 %</td>
+ <td class="headerCovTableEntry">141</td>
+ <td class="headerCovTableEntry">367</td>
+ <td class="headerCovTableEntryLo">38.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntry">14</td>
- <td class="headerCovTableEntryHi">92.9 %</td>
+ <td class="headerCovTableEntry">11</td>
+ <td class="headerCovTableEntry">11</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td></td>
@@ -69,10 +69,6 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#355">blocklevel_flashcmp</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#285">blocklevel_erase</a></td>
<td class="coverFnHi">2</td>
</tr>
@@ -113,14 +109,6 @@
<td class="coverFnHi">89</td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#23">ecc_protected</a></td>
- <td class="coverFnHi">101</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#61">reacquire</a></td>
- <td class="coverFnHi">126</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#68">release</a></td>
<td class="coverFnHi">126</td>
</tr>
diff --git a/coverage-report/external/gard/libflash/blocklevel.c.func.html b/coverage-report/external/gard/libflash/blocklevel.c.func.html
index 1a70683..f139682 100644
--- a/coverage-report/external/gard/libflash/blocklevel.c.func.html
+++ b/coverage-report/external/gard/libflash/blocklevel.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">155</td>
- <td class="headerCovTableEntry">382</td>
- <td class="headerCovTableEntryLo">40.6 %</td>
+ <td class="headerCovTableEntry">141</td>
+ <td class="headerCovTableEntry">367</td>
+ <td class="headerCovTableEntryLo">38.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntry">14</td>
- <td class="headerCovTableEntryHi">92.9 %</td>
+ <td class="headerCovTableEntry">11</td>
+ <td class="headerCovTableEntry">11</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td></td>
@@ -77,10 +77,6 @@
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#355">blocklevel_flashcmp</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#319">blocklevel_get_info</a></td>
<td class="coverFnHi">23</td>
</tr>
@@ -109,18 +105,10 @@
<td class="coverFnHi">12</td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#23">ecc_protected</a></td>
- <td class="coverFnHi">101</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#643">insert_bl_prot_range</a></td>
<td class="coverFnHi">23</td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#61">reacquire</a></td>
- <td class="coverFnHi">126</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#68">release</a></td>
<td class="coverFnHi">126</td>
</tr>
diff --git a/coverage-report/external/gard/libflash/blocklevel.c.gcov.html b/coverage-report/external/gard/libflash/blocklevel.c.gcov.html
index 253b3a7..368c290 100644
--- a/coverage-report/external/gard/libflash/blocklevel.c.gcov.html
+++ b/coverage-report/external/gard/libflash/blocklevel.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">155</td>
- <td class="headerCovTableEntry">382</td>
- <td class="headerCovTableEntryLo">40.6 %</td>
+ <td class="headerCovTableEntry">141</td>
+ <td class="headerCovTableEntry">367</td>
+ <td class="headerCovTableEntryLo">38.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntry">14</td>
- <td class="headerCovTableEntryHi">92.9 %</td>
+ <td class="headerCovTableEntry">11</td>
+ <td class="headerCovTableEntry">11</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td></td>
@@ -93,21 +93,21 @@
<a name="22"><span class="lineNum"> 22 </span> : : * 0 - The region is not ECC protected</a>
<a name="23"><span class="lineNum"> 23 </span> : : * -1 - Partially protected</a>
<a name="24"><span class="lineNum"> 24 </span> : : */</a>
-<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 101 : static int ecc_protected(struct blocklevel_device *bl, uint64_t pos, uint64_t len, uint64_t *start)</span></a>
+<a name="25"><span class="lineNum"> 25 </span> : : static int ecc_protected(struct blocklevel_device *bl, uint64_t pos, uint64_t len, uint64_t *start)</a>
<a name="26"><span class="lineNum"> 26 </span> : : {</a>
-<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 101 : int i;</span></a>
+<a name="27"><span class="lineNum"> 27 </span> : : int i;</a>
<a name="28"><span class="lineNum"> 28 </span> : : </a>
<a name="29"><span class="lineNum"> 29 </span> : : /* Length of 0 is nonsensical so add 1 */</a>
-<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 101 : if (len == 0)</span></a>
+<a name="30"><span class="lineNum"> 30 </span> : : if (len == 0)</a>
<a name="31"><span class="lineNum"> 31 </span> : : len = 1;</a>
<a name="32"><span class="lineNum"> 32 </span> : : </a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 101 : for (i = 0; i &lt; bl-&gt;ecc_prot.n_prot; i++) {</span></a>
+<a name="33"><span class="lineNum"> 33 </span> : : for (i = 0; i &lt; bl-&gt;ecc_prot.n_prot; i++) {</a>
<a name="34"><span class="lineNum"> 34 </span> : : /* Fits entirely within the range */</a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 101 : if (bl-&gt;ecc_prot.prot[i].start &lt;= pos &amp;&amp;</span></a>
-<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 101 : bl-&gt;ecc_prot.prot[i].start + bl-&gt;ecc_prot.prot[i].len &gt;= pos + len) {</span></a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 101 : if (start)</span></a>
-<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 101 : *start = bl-&gt;ecc_prot.prot[i].start;</span></a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 101 : return 1;</span></a>
+<a name="35"><span class="lineNum"> 35 </span> : : if (bl-&gt;ecc_prot.prot[i].start &lt;= pos &amp;&amp;</a>
+<a name="36"><span class="lineNum"> 36 </span> : : bl-&gt;ecc_prot.prot[i].start + bl-&gt;ecc_prot.prot[i].len &gt;= pos + len) {</a>
+<a name="37"><span class="lineNum"> 37 </span> : : if (start)</a>
+<a name="38"><span class="lineNum"> 38 </span> : : *start = bl-&gt;ecc_prot.prot[i].start;</a>
+<a name="39"><span class="lineNum"> 39 </span> : : return 1;</a>
<a name="40"><span class="lineNum"> 40 </span> : : }</a>
<a name="41"><span class="lineNum"> 41 </span> : : </a>
<a name="42"><span class="lineNum"> 42 </span> : : /*</a>
@@ -115,12 +115,12 @@
<a name="44"><span class="lineNum"> 44 </span> : : * contiguous regions are sanely ECC protected so a partial fit</a>
<a name="45"><span class="lineNum"> 45 </span> : : * is no good.</a>
<a name="46"><span class="lineNum"> 46 </span> : : */</a>
-<a name="47"><span class="lineNum"> 47 </span> :<span class="lineNoCov"> 0 : if ((bl-&gt;ecc_prot.prot[i].start &gt;= pos &amp;&amp; bl-&gt;ecc_prot.prot[i].start &lt; pos + len) ||</span></a>
-<a name="48"><span class="lineNum"> 48 </span> :<span class="lineNoCov"> 0 : (bl-&gt;ecc_prot.prot[i].start &lt;= pos &amp;&amp;</span></a>
-<a name="49"><span class="lineNum"> 49 </span> :<span class="lineNoCov"> 0 : bl-&gt;ecc_prot.prot[i].start + bl-&gt;ecc_prot.prot[i].len &gt; pos)) {</span></a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineNoCov"> 0 : if (start)</span></a>
-<a name="51"><span class="lineNum"> 51 </span> :<span class="lineNoCov"> 0 : *start = bl-&gt;ecc_prot.prot[i].start;</span></a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
+<a name="47"><span class="lineNum"> 47 </span> : : if ((bl-&gt;ecc_prot.prot[i].start &gt;= pos &amp;&amp; bl-&gt;ecc_prot.prot[i].start &lt; pos + len) ||</a>
+<a name="48"><span class="lineNum"> 48 </span> : : (bl-&gt;ecc_prot.prot[i].start &lt;= pos &amp;&amp;</a>
+<a name="49"><span class="lineNum"> 49 </span> : : bl-&gt;ecc_prot.prot[i].start + bl-&gt;ecc_prot.prot[i].len &gt; pos)) {</a>
+<a name="50"><span class="lineNum"> 50 </span> : : if (start)</a>
+<a name="51"><span class="lineNum"> 51 </span> : : *start = bl-&gt;ecc_prot.prot[i].start;</a>
+<a name="52"><span class="lineNum"> 52 </span> : : return -1;</a>
<a name="53"><span class="lineNum"> 53 </span> : : }</a>
<a name="54"><span class="lineNum"> 54 </span> : : }</a>
<a name="55"><span class="lineNum"> 55 </span> : : return 0;</a>
@@ -133,7 +133,7 @@
<a name="62"><span class="lineNum"> 62 </span> : : </a>
<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 126 : static int reacquire(struct blocklevel_device *bl)</span></a>
<a name="64"><span class="lineNum"> 64 </span> : : {</a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 126 : if (!bl-&gt;keep_alive &amp;&amp; bl-&gt;reacquire)</span></a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : if (!bl-&gt;keep_alive &amp;&amp; bl-&gt;reacquire)</span></a>
<a name="66"><span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : return bl-&gt;reacquire(bl);</span></a>
<a name="67"><span class="lineNum"> 67 </span> : : return 0;</a>
<a name="68"><span class="lineNum"> 68 </span> : : }</a>
@@ -161,7 +161,7 @@
<a name="90"><span class="lineNum"> 90 </span> : : }</a>
<a name="91"><span class="lineNum"> 91 </span> : : </a>
<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 89 : rc = reacquire(bl);</span></a>
-<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 89 : if (rc)</span></a>
+<a name="93"><span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
<a name="94"><span class="lineNum"> 94 </span> : : return rc;</a>
<a name="95"><span class="lineNum"> 95 </span> : : </a>
<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 89 : rc = bl-&gt;read(bl, pos, buf, len);</span></a>
@@ -248,7 +248,7 @@
<a name="177"><span class="lineNum"> 177 </span> : : }</a>
<a name="178"><span class="lineNum"> 178 </span> : : </a>
<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 12 : rc = reacquire(bl);</span></a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 12 : if (rc)</span></a>
+<a name="180"><span class="lineNum"> 180 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
<a name="181"><span class="lineNum"> 181 </span> : : return rc;</a>
<a name="182"><span class="lineNum"> 182 </span> : : </a>
<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 12 : rc = bl-&gt;write(bl, pos, buf, len);</span></a>
@@ -379,7 +379,7 @@
<a name="308"><span class="lineNum"> 308 </span> : : }</a>
<a name="309"><span class="lineNum"> 309 </span> : : </a>
<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 2 : rc = reacquire(bl);</span></a>
-<a name="311"><span class="lineNum"> 311 </span> :<span class="lineCov"> 2 : if (rc)</span></a>
+<a name="311"><span class="lineNum"> 311 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
<a name="312"><span class="lineNum"> 312 </span> : : return rc;</a>
<a name="313"><span class="lineNum"> 313 </span> : : </a>
<a name="314"><span class="lineNum"> 314 </span> :<span class="lineCov"> 2 : rc = bl-&gt;erase(bl, pos, len);</span></a>
@@ -400,7 +400,7 @@
<a name="329"><span class="lineNum"> 329 </span> : : }</a>
<a name="330"><span class="lineNum"> 330 </span> : : </a>
<a name="331"><span class="lineNum"> 331 </span> :<span class="lineCov"> 23 : rc = reacquire(bl);</span></a>
-<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 23 : if (rc)</span></a>
+<a name="332"><span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
<a name="333"><span class="lineNum"> 333 </span> : : return rc;</a>
<a name="334"><span class="lineNum"> 334 </span> : : </a>
<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 23 : rc = bl-&gt;get_info(bl, name, total_size, erase_granule);</span></a>
diff --git a/coverage-report/external/gard/libflash/ecc.c.func-sort-c.html b/coverage-report/external/gard/libflash/ecc.c.func-sort-c.html
index 0405e6d..5cb723e 100644
--- a/coverage-report/external/gard/libflash/ecc.c.func-sort-c.html
+++ b/coverage-report/external/gard/libflash/ecc.c.func-sort-c.html
@@ -37,12 +37,12 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">5</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryMed">83.3 %</td>
+ <td class="headerCovTableEntryMed">80.0 %</td>
</tr>
<tr>
<td></td>
@@ -88,10 +88,6 @@
<td class="coverFn"><a href="ecc.c.gcov.html#143">eccbyte</a></td>
<td class="coverFnHi">450</td>
</tr>
- <tr>
- <td class="coverFn"><a href="ecc.c.gcov.html#129">eccverify</a></td>
- <td class="coverFnHi">450</td>
- </tr>
</table>
<br>
</center>
diff --git a/coverage-report/external/gard/libflash/ecc.c.func.html b/coverage-report/external/gard/libflash/ecc.c.func.html
index ee0fe20..6e61947 100644
--- a/coverage-report/external/gard/libflash/ecc.c.func.html
+++ b/coverage-report/external/gard/libflash/ecc.c.func.html
@@ -37,12 +37,12 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">5</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryMed">83.3 %</td>
+ <td class="headerCovTableEntryMed">80.0 %</td>
</tr>
<tr>
<td></td>
@@ -73,10 +73,6 @@
<td class="coverFnHi">450</td>
</tr>
<tr>
- <td class="coverFn"><a href="ecc.c.gcov.html#129">eccverify</a></td>
- <td class="coverFnHi">450</td>
- </tr>
- <tr>
<td class="coverFn"><a href="ecc.c.gcov.html#205">memcpy_from_ecc</a></td>
<td class="coverFnHi">89</td>
</tr>
diff --git a/coverage-report/external/gard/libflash/ecc.c.gcov.html b/coverage-report/external/gard/libflash/ecc.c.gcov.html
index f6b6ba5..3c52f4b 100644
--- a/coverage-report/external/gard/libflash/ecc.c.gcov.html
+++ b/coverage-report/external/gard/libflash/ecc.c.gcov.html
@@ -37,12 +37,12 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntry">5</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryMed">83.3 %</td>
+ <td class="headerCovTableEntryMed">80.0 %</td>
</tr>
<tr>
<td></td>
@@ -201,7 +201,7 @@
<a name="130"><span class="lineNum"> 130 </span> : : */</a>
<a name="131"><span class="lineNum"> 131 </span> :<span class="lineCov"> 450 : static enum eccbitfields eccverify(uint64_t data, uint8_t ecc)</span></a>
<a name="132"><span class="lineNum"> 132 </span> : : {</a>
-<a name="133"><span class="lineNum"> 133 </span> :<span class="lineCov"> 450 : return syndromematrix[eccgenerate(data) ^ ecc];</span></a>
+<a name="133"><span class="lineNum"> 133 </span> :<span class="lineCov"> 900 : return syndromematrix[eccgenerate(data) ^ ecc];</span></a>
<a name="134"><span class="lineNum"> 134 </span> : : }</a>
<a name="135"><span class="lineNum"> 135 </span> : : </a>
<a name="136"><span class="lineNum"> 136 </span> : : /* IBM bit ordering */</a>
diff --git a/coverage-report/external/gard/libflash/ecc.h.func-sort-c.html b/coverage-report/external/gard/libflash/ecc.h.func-sort-c.html
index 2a56f5a..9e26e7c 100644
--- a/coverage-report/external/gard/libflash/ecc.h.func-sort-c.html
+++ b/coverage-report/external/gard/libflash/ecc.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/gard/libflash/ecc.h.func.html b/coverage-report/external/gard/libflash/ecc.h.func.html
index 81733e6..f837f18 100644
--- a/coverage-report/external/gard/libflash/ecc.h.func.html
+++ b/coverage-report/external/gard/libflash/ecc.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/gard/libflash/ecc.h.gcov.html b/coverage-report/external/gard/libflash/ecc.h.gcov.html
index fc252c0..60f236f 100644
--- a/coverage-report/external/gard/libflash/ecc.h.gcov.html
+++ b/coverage-report/external/gard/libflash/ecc.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/gard/libflash/file.c.func-sort-c.html b/coverage-report/external/gard/libflash/file.c.func-sort-c.html
index f277daa..a47b039 100644
--- a/coverage-report/external/gard/libflash/file.c.func-sort-c.html
+++ b/coverage-report/external/gard/libflash/file.c.func-sort-c.html
@@ -32,17 +32,17 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">90</td>
- <td class="headerCovTableEntry">184</td>
- <td class="headerCovTableEntryLo">48.9 %</td>
+ <td class="headerCovTableEntry">163</td>
+ <td class="headerCovTableEntryLo">55.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntryLo">61.5 %</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryLo">66.7 %</td>
</tr>
<tr>
<td></td>
@@ -77,10 +77,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="file.c.gcov.html#177">get_info_name</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="file.c.gcov.html#122">mtd_erase</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/gard/libflash/file.c.func.html b/coverage-report/external/gard/libflash/file.c.func.html
index 3b522e7..805d8cd 100644
--- a/coverage-report/external/gard/libflash/file.c.func.html
+++ b/coverage-report/external/gard/libflash/file.c.func.html
@@ -32,17 +32,17 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">90</td>
- <td class="headerCovTableEntry">184</td>
- <td class="headerCovTableEntryLo">48.9 %</td>
+ <td class="headerCovTableEntry">163</td>
+ <td class="headerCovTableEntryLo">55.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntryLo">61.5 %</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryLo">66.7 %</td>
</tr>
<tr>
<td></td>
@@ -109,10 +109,6 @@
<td class="coverFnHi">22</td>
</tr>
<tr>
- <td class="coverFn"><a href="file.c.gcov.html#177">get_info_name</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="file.c.gcov.html#122">mtd_erase</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/gard/libflash/file.c.gcov.html b/coverage-report/external/gard/libflash/file.c.gcov.html
index 91460e6..f187936 100644
--- a/coverage-report/external/gard/libflash/file.c.gcov.html
+++ b/coverage-report/external/gard/libflash/file.c.gcov.html
@@ -32,17 +32,17 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">90</td>
- <td class="headerCovTableEntry">184</td>
- <td class="headerCovTableEntryLo">48.9 %</td>
+ <td class="headerCovTableEntry">163</td>
+ <td class="headerCovTableEntryLo">55.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntryLo">61.5 %</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryLo">66.7 %</td>
</tr>
<tr>
<td></td>
@@ -247,38 +247,38 @@
<a name="176"><span class="lineNum"> 176 </span> : : return 0;</a>
<a name="177"><span class="lineNum"> 177 </span> : : }</a>
<a name="178"><span class="lineNum"> 178 </span> : : </a>
-<a name="179"><span class="lineNum"> 179 </span> :<span class="lineNoCov"> 0 : static int get_info_name(struct file_data *file_data, char **name)</span></a>
+<a name="179"><span class="lineNum"> 179 </span> : : static int get_info_name(struct file_data *file_data, char **name)</a>
<a name="180"><span class="lineNum"> 180 </span> : : {</a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : char *path, *lpath;</span></a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineNoCov"> 0 : int len;</span></a>
-<a name="183"><span class="lineNum"> 183 </span> :<span class="lineNoCov"> 0 : struct stat st;</span></a>
+<a name="181"><span class="lineNum"> 181 </span> : : char *path, *lpath;</a>
+<a name="182"><span class="lineNum"> 182 </span> : : int len;</a>
+<a name="183"><span class="lineNum"> 183 </span> : : struct stat st;</a>
<a name="184"><span class="lineNum"> 184 </span> : : </a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : if (asprintf(&amp;path, &quot;/proc/self/fd/%d&quot;, file_data-&gt;fd) == -1)</span></a>
+<a name="185"><span class="lineNum"> 185 </span> : : if (asprintf(&amp;path, &quot;/proc/self/fd/%d&quot;, file_data-&gt;fd) == -1)</a>
<a name="186"><span class="lineNum"> 186 </span> : : return FLASH_ERR_MALLOC_FAILED;</a>
<a name="187"><span class="lineNum"> 187 </span> : : </a>
-<a name="188"><span class="lineNum"> 188 </span> :<span class="lineNoCov"> 0 : if (lstat(path, &amp;st)) {</span></a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : free(path);</span></a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : return FLASH_ERR_PARM_ERROR;</span></a>
+<a name="188"><span class="lineNum"> 188 </span> : : if (lstat(path, &amp;st)) {</a>
+<a name="189"><span class="lineNum"> 189 </span> : : free(path);</a>
+<a name="190"><span class="lineNum"> 190 </span> : : return FLASH_ERR_PARM_ERROR;</a>
<a name="191"><span class="lineNum"> 191 </span> : : }</a>
<a name="192"><span class="lineNum"> 192 </span> : : </a>
-<a name="193"><span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : lpath = malloc(st.st_size + 1);</span></a>
-<a name="194"><span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : if (!lpath) {</span></a>
-<a name="195"><span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : free(path);</span></a>
-<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : return FLASH_ERR_MALLOC_FAILED;</span></a>
+<a name="193"><span class="lineNum"> 193 </span> : : lpath = malloc(st.st_size + 1);</a>
+<a name="194"><span class="lineNum"> 194 </span> : : if (!lpath) {</a>
+<a name="195"><span class="lineNum"> 195 </span> : : free(path);</a>
+<a name="196"><span class="lineNum"> 196 </span> : : return FLASH_ERR_MALLOC_FAILED;</a>
<a name="197"><span class="lineNum"> 197 </span> : : }</a>
<a name="198"><span class="lineNum"> 198 </span> : : </a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : len = readlink(path, lpath, st.st_size +1);</span></a>
-<a name="200"><span class="lineNum"> 200 </span> :<span class="lineNoCov"> 0 : if (len == -1) {</span></a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : free(path);</span></a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : free(lpath);</span></a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : return FLASH_ERR_PARM_ERROR;</span></a>
+<a name="199"><span class="lineNum"> 199 </span> : : len = readlink(path, lpath, st.st_size +1);</a>
+<a name="200"><span class="lineNum"> 200 </span> : : if (len == -1) {</a>
+<a name="201"><span class="lineNum"> 201 </span> : : free(path);</a>
+<a name="202"><span class="lineNum"> 202 </span> : : free(lpath);</a>
+<a name="203"><span class="lineNum"> 203 </span> : : return FLASH_ERR_PARM_ERROR;</a>
<a name="204"><span class="lineNum"> 204 </span> : : }</a>
-<a name="205"><span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : lpath[len] = '\0';</span></a>
+<a name="205"><span class="lineNum"> 205 </span> : : lpath[len] = '\0';</a>
<a name="206"><span class="lineNum"> 206 </span> : : </a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : *name = lpath;</span></a>
+<a name="207"><span class="lineNum"> 207 </span> : : *name = lpath;</a>
<a name="208"><span class="lineNum"> 208 </span> : : </a>
-<a name="209"><span class="lineNum"> 209 </span> :<span class="lineNoCov"> 0 : free(path);</span></a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
+<a name="209"><span class="lineNum"> 209 </span> : : free(path);</a>
+<a name="210"><span class="lineNum"> 210 </span> : : return 0;</a>
<a name="211"><span class="lineNum"> 211 </span> : : }</a>
<a name="212"><span class="lineNum"> 212 </span> : : </a>
<a name="213"><span class="lineNum"> 213 </span> : : </a>
diff --git a/coverage-report/external/gard/libflash/index-sort-b.html b/coverage-report/external/gard/libflash/index-sort-b.html
index 02d1980..eea2f9d 100644
--- a/coverage-report/external/gard/libflash/index-sort-b.html
+++ b/coverage-report/external/gard/libflash/index-sort-b.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">305</td>
- <td class="headerCovTableEntry">1530</td>
- <td class="headerCovTableEntryLo">19.9 %</td>
+ <td class="headerCovTableEntry">291</td>
+ <td class="headerCovTableEntry">1445</td>
+ <td class="headerCovTableEntryLo">20.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">26</td>
- <td class="headerCovTableEntry">85</td>
- <td class="headerCovTableEntryLo">30.6 %</td>
+ <td class="headerCovTableEntry">23</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryLo">31.9 %</td>
</tr>
<tr>
<td></td>
@@ -88,8 +88,8 @@
</td>
<td class="coverPerLo">50.9&nbsp;%</td>
<td class="coverNumLo">54 / 106</td>
- <td class="coverPerMed">83.3&nbsp;%</td>
- <td class="coverNumMed">5 / 6</td>
+ <td class="coverPerMed">80.0&nbsp;%</td>
+ <td class="coverNumMed">4 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -106,26 +106,26 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libffs.c.gcov.html">libffs.c</a></td>
+ <td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=55 height=10 alt="55.2%"><img src="../../../snow.png" width=45 height=10 alt="55.2%"></td></tr></table>
</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 431</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 28</td>
+ <td class="coverPerLo">55.2&nbsp;%</td>
+ <td class="coverNumLo">90 / 163</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">8 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
+ <td class="coverFile"><a href="libffs.c.gcov.html">libffs.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=41 height=10 alt="40.6%"><img src="../../../snow.png" width=59 height=10 alt="40.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
- <td class="coverPerLo">40.6&nbsp;%</td>
- <td class="coverNumLo">155 / 382</td>
- <td class="coverPerHi">92.9&nbsp;%</td>
- <td class="coverNumHi">13 / 14</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 410</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -135,21 +135,21 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 419</td>
+ <td class="coverNumLo">0 / 391</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 24</td>
+ <td class="coverNumLo">0 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
+ <td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=49 height=10 alt="48.9%"><img src="../../../snow.png" width=51 height=10 alt="48.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=38 height=10 alt="38.4%"><img src="../../../snow.png" width=62 height=10 alt="38.4%"></td></tr></table>
</td>
- <td class="coverPerLo">48.9&nbsp;%</td>
- <td class="coverNumLo">90 / 184</td>
- <td class="coverPerLo">61.5&nbsp;%</td>
- <td class="coverNumLo">8 / 13</td>
+ <td class="coverPerLo">38.4&nbsp;%</td>
+ <td class="coverNumLo">141 / 367</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">11 / 11</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/gard/libflash/index-sort-f.html b/coverage-report/external/gard/libflash/index-sort-f.html
index fac46e2..4f0d61a 100644
--- a/coverage-report/external/gard/libflash/index-sort-f.html
+++ b/coverage-report/external/gard/libflash/index-sort-f.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">305</td>
- <td class="headerCovTableEntry">1530</td>
- <td class="headerCovTableEntryLo">19.9 %</td>
+ <td class="headerCovTableEntry">291</td>
+ <td class="headerCovTableEntry">1445</td>
+ <td class="headerCovTableEntryLo">20.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">26</td>
- <td class="headerCovTableEntry">85</td>
- <td class="headerCovTableEntryLo">30.6 %</td>
+ <td class="headerCovTableEntry">23</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryLo">31.9 %</td>
</tr>
<tr>
<td></td>
@@ -87,9 +87,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 419</td>
+ <td class="coverNumLo">0 / 391</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 24</td>
+ <td class="coverNumLo">0 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -99,21 +99,21 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 431</td>
+ <td class="coverNumLo">0 / 410</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 28</td>
+ <td class="coverNumLo">0 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=49 height=10 alt="48.9%"><img src="../../../snow.png" width=51 height=10 alt="48.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=55 height=10 alt="55.2%"><img src="../../../snow.png" width=45 height=10 alt="55.2%"></td></tr></table>
</td>
- <td class="coverPerLo">48.9&nbsp;%</td>
- <td class="coverNumLo">90 / 184</td>
- <td class="coverPerLo">61.5&nbsp;%</td>
- <td class="coverNumLo">8 / 13</td>
+ <td class="coverPerLo">55.2&nbsp;%</td>
+ <td class="coverNumLo">90 / 163</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">8 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -124,20 +124,8 @@
</td>
<td class="coverPerLo">50.9&nbsp;%</td>
<td class="coverNumLo">54 / 106</td>
- <td class="coverPerMed">83.3&nbsp;%</td>
- <td class="coverNumMed">5 / 6</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
- <td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=41 height=10 alt="40.6%"><img src="../../../snow.png" width=59 height=10 alt="40.6%"></td></tr></table>
- </td>
- <td class="coverPerLo">40.6&nbsp;%</td>
- <td class="coverNumLo">155 / 382</td>
- <td class="coverPerHi">92.9&nbsp;%</td>
- <td class="coverNumHi">13 / 14</td>
+ <td class="coverPerMed">80.0&nbsp;%</td>
+ <td class="coverNumMed">4 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -153,6 +141,18 @@
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
+ <tr>
+ <td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=38 height=10 alt="38.4%"><img src="../../../snow.png" width=62 height=10 alt="38.4%"></td></tr></table>
+ </td>
+ <td class="coverPerLo">38.4&nbsp;%</td>
+ <td class="coverNumLo">141 / 367</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">11 / 11</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
</table>
</center>
<br>
diff --git a/coverage-report/external/gard/libflash/index-sort-l.html b/coverage-report/external/gard/libflash/index-sort-l.html
index 720b947..cad7919 100644
--- a/coverage-report/external/gard/libflash/index-sort-l.html
+++ b/coverage-report/external/gard/libflash/index-sort-l.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">305</td>
- <td class="headerCovTableEntry">1530</td>
- <td class="headerCovTableEntryLo">19.9 %</td>
+ <td class="headerCovTableEntry">291</td>
+ <td class="headerCovTableEntry">1445</td>
+ <td class="headerCovTableEntryLo">20.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">26</td>
- <td class="headerCovTableEntry">85</td>
- <td class="headerCovTableEntryLo">30.6 %</td>
+ <td class="headerCovTableEntry">23</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryLo">31.9 %</td>
</tr>
<tr>
<td></td>
@@ -87,9 +87,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 419</td>
+ <td class="coverNumLo">0 / 391</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 24</td>
+ <td class="coverNumLo">0 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -99,45 +99,45 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 431</td>
+ <td class="coverNumLo">0 / 410</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 28</td>
+ <td class="coverNumLo">0 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=41 height=10 alt="40.6%"><img src="../../../snow.png" width=59 height=10 alt="40.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=38 height=10 alt="38.4%"><img src="../../../snow.png" width=62 height=10 alt="38.4%"></td></tr></table>
</td>
- <td class="coverPerLo">40.6&nbsp;%</td>
- <td class="coverNumLo">155 / 382</td>
- <td class="coverPerHi">92.9&nbsp;%</td>
- <td class="coverNumHi">13 / 14</td>
+ <td class="coverPerLo">38.4&nbsp;%</td>
+ <td class="coverNumLo">141 / 367</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">11 / 11</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
+ <td class="coverFile"><a href="ecc.c.gcov.html">ecc.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=49 height=10 alt="48.9%"><img src="../../../snow.png" width=51 height=10 alt="48.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=51 height=10 alt="50.9%"><img src="../../../snow.png" width=49 height=10 alt="50.9%"></td></tr></table>
</td>
- <td class="coverPerLo">48.9&nbsp;%</td>
- <td class="coverNumLo">90 / 184</td>
- <td class="coverPerLo">61.5&nbsp;%</td>
- <td class="coverNumLo">8 / 13</td>
+ <td class="coverPerLo">50.9&nbsp;%</td>
+ <td class="coverNumLo">54 / 106</td>
+ <td class="coverPerMed">80.0&nbsp;%</td>
+ <td class="coverNumMed">4 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ecc.c.gcov.html">ecc.c</a></td>
+ <td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=51 height=10 alt="50.9%"><img src="../../../snow.png" width=49 height=10 alt="50.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=55 height=10 alt="55.2%"><img src="../../../snow.png" width=45 height=10 alt="55.2%"></td></tr></table>
</td>
- <td class="coverPerLo">50.9&nbsp;%</td>
- <td class="coverNumLo">54 / 106</td>
- <td class="coverPerMed">83.3&nbsp;%</td>
- <td class="coverNumMed">5 / 6</td>
+ <td class="coverPerLo">55.2&nbsp;%</td>
+ <td class="coverNumLo">90 / 163</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">8 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/gard/libflash/index.html b/coverage-report/external/gard/libflash/index.html
index 28fc4a8..65d4c2e 100644
--- a/coverage-report/external/gard/libflash/index.html
+++ b/coverage-report/external/gard/libflash/index.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">305</td>
- <td class="headerCovTableEntry">1530</td>
- <td class="headerCovTableEntryLo">19.9 %</td>
+ <td class="headerCovTableEntry">291</td>
+ <td class="headerCovTableEntry">1445</td>
+ <td class="headerCovTableEntryLo">20.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">26</td>
- <td class="headerCovTableEntry">85</td>
- <td class="headerCovTableEntryLo">30.6 %</td>
+ <td class="headerCovTableEntry">23</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryLo">31.9 %</td>
</tr>
<tr>
<td></td>
@@ -84,12 +84,12 @@
<tr>
<td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=41 height=10 alt="40.6%"><img src="../../../snow.png" width=59 height=10 alt="40.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=38 height=10 alt="38.4%"><img src="../../../snow.png" width=62 height=10 alt="38.4%"></td></tr></table>
</td>
- <td class="coverPerLo">40.6&nbsp;%</td>
- <td class="coverNumLo">155 / 382</td>
- <td class="coverPerHi">92.9&nbsp;%</td>
- <td class="coverNumHi">13 / 14</td>
+ <td class="coverPerLo">38.4&nbsp;%</td>
+ <td class="coverNumLo">141 / 367</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">11 / 11</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -100,8 +100,8 @@
</td>
<td class="coverPerLo">50.9&nbsp;%</td>
<td class="coverNumLo">54 / 106</td>
- <td class="coverPerMed">83.3&nbsp;%</td>
- <td class="coverNumMed">5 / 6</td>
+ <td class="coverPerMed">80.0&nbsp;%</td>
+ <td class="coverNumMed">4 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -120,12 +120,12 @@
<tr>
<td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=49 height=10 alt="48.9%"><img src="../../../snow.png" width=51 height=10 alt="48.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=55 height=10 alt="55.2%"><img src="../../../snow.png" width=45 height=10 alt="55.2%"></td></tr></table>
</td>
- <td class="coverPerLo">48.9&nbsp;%</td>
- <td class="coverNumLo">90 / 184</td>
- <td class="coverPerLo">61.5&nbsp;%</td>
- <td class="coverNumLo">8 / 13</td>
+ <td class="coverPerLo">55.2&nbsp;%</td>
+ <td class="coverNumLo">90 / 163</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">8 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -135,9 +135,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 431</td>
+ <td class="coverNumLo">0 / 410</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 28</td>
+ <td class="coverNumLo">0 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -147,9 +147,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 419</td>
+ <td class="coverNumLo">0 / 391</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 24</td>
+ <td class="coverNumLo">0 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/gard/libflash/libffs.c.func-sort-c.html b/coverage-report/external/gard/libflash/libffs.c.func-sort-c.html
index 8f0ee0c..b38f13e 100644
--- a/coverage-report/external/gard/libflash/libffs.c.func-sort-c.html
+++ b/coverage-report/external/gard/libflash/libffs.c.func-sort-c.html
@@ -32,16 +32,16 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">431</td>
+ <td class="headerCovTableEntry">410</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">28</td>
+ <td class="headerCovTableEntry">24</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
@@ -101,10 +101,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#139">ffs_entry_to_cpu</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#103">ffs_entry_to_flash</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -117,14 +113,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#92">ffs_entry_user_to_cpu</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#81">ffs_entry_user_to_flash</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#160">ffs_entry_user_to_string</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -157,10 +145,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#51">ffs_num_entries</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#477">ffs_part_info</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/gard/libflash/libffs.c.func.html b/coverage-report/external/gard/libflash/libffs.c.func.html
index f078001..8f800af 100644
--- a/coverage-report/external/gard/libflash/libffs.c.func.html
+++ b/coverage-report/external/gard/libflash/libffs.c.func.html
@@ -32,16 +32,16 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">431</td>
+ <td class="headerCovTableEntry">410</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">28</td>
+ <td class="headerCovTableEntry">24</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
@@ -101,10 +101,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#139">ffs_entry_to_cpu</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#103">ffs_entry_to_flash</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -117,14 +113,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#92">ffs_entry_user_to_cpu</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#81">ffs_entry_user_to_flash</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#160">ffs_entry_user_to_string</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -157,10 +145,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#51">ffs_num_entries</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#477">ffs_part_info</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/gard/libflash/libffs.c.gcov.html b/coverage-report/external/gard/libflash/libffs.c.gcov.html
index 5f1ec72..704cef0 100644
--- a/coverage-report/external/gard/libflash/libffs.c.gcov.html
+++ b/coverage-report/external/gard/libflash/libffs.c.gcov.html
@@ -32,16 +32,16 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">431</td>
+ <td class="headerCovTableEntry">410</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">28</td>
+ <td class="headerCovTableEntry">24</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
@@ -96,9 +96,9 @@
<a name="25"><span class="lineNum"> 25 </span> : : struct blocklevel_device *bl;</a>
<a name="26"><span class="lineNum"> 26 </span> : : };</a>
<a name="27"><span class="lineNum"> 27 </span> : : </a>
-<a name="28"><span class="lineNum"> 28 </span> :<span class="lineNoCov"> 0 : static uint32_t ffs_checksum(void* data, size_t size)</span></a>
+<a name="28"><span class="lineNum"> 28 </span> : : static uint32_t ffs_checksum(void* data, size_t size)</a>
<a name="29"><span class="lineNum"> 29 </span> : : {</a>
-<a name="30"><span class="lineNum"> 30 </span> :<span class="lineNoCov"> 0 : uint32_t i, csum = 0;</span></a>
+<a name="30"><span class="lineNum"> 30 </span> : : uint32_t i, csum = 0;</a>
<a name="31"><span class="lineNum"> 31 </span> : : </a>
<a name="32"><span class="lineNum"> 32 </span> :<span class="lineNoCov"> 0 : for (i = csum = 0; i &lt; (size/4); i++)</span></a>
<a name="33"><span class="lineNum"> 33 </span> :<span class="lineNoCov"> 0 : csum ^= ((uint32_t *)data)[i];</span></a>
@@ -162,15 +162,15 @@
<a name="91"><span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
<a name="92"><span class="lineNum"> 92 </span> : : }</a>
<a name="93"><span class="lineNum"> 93 </span> : : </a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : static int ffs_entry_user_to_cpu(struct ffs_hdr *hdr __unused,</span></a>
+<a name="94"><span class="lineNum"> 94 </span> : : static int ffs_entry_user_to_cpu(struct ffs_hdr *hdr __unused,</a>
<a name="95"><span class="lineNum"> 95 </span> : : struct ffs_entry_user *dst, struct __ffs_entry_user *src)</a>
<a name="96"><span class="lineNum"> 96 </span> : : {</a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : memset(dst, 0, sizeof(struct ffs_entry_user));</span></a>
-<a name="98"><span class="lineNum"> 98 </span> :<span class="lineNoCov"> 0 : dst-&gt;datainteg = be16_to_cpu(src-&gt;datainteg);</span></a>
-<a name="99"><span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : dst-&gt;vercheck = src-&gt;vercheck;</span></a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : dst-&gt;miscflags = src-&gt;miscflags;</span></a>
+<a name="97"><span class="lineNum"> 97 </span> : : memset(dst, 0, sizeof(struct ffs_entry_user));</a>
+<a name="98"><span class="lineNum"> 98 </span> : : dst-&gt;datainteg = be16_to_cpu(src-&gt;datainteg);</a>
+<a name="99"><span class="lineNum"> 99 </span> : : dst-&gt;vercheck = src-&gt;vercheck;</a>
+<a name="100"><span class="lineNum"> 100 </span> : : dst-&gt;miscflags = src-&gt;miscflags;</a>
<a name="101"><span class="lineNum"> 101 </span> : : </a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
+<a name="102"><span class="lineNum"> 102 </span> : : return 0;</a>
<a name="103"><span class="lineNum"> 103 </span> : : }</a>
<a name="104"><span class="lineNum"> 104 </span> : : </a>
<a name="105"><span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : static int ffs_entry_to_flash(struct ffs_hdr *hdr,</span></a>
@@ -209,25 +209,25 @@
<a name="138"><span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
<a name="139"><span class="lineNum"> 139 </span> : : }</a>
<a name="140"><span class="lineNum"> 140 </span> : : </a>
-<a name="141"><span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : static int ffs_entry_to_cpu(struct ffs_hdr *hdr,</span></a>
+<a name="141"><span class="lineNum"> 141 </span> : : static int ffs_entry_to_cpu(struct ffs_hdr *hdr,</a>
<a name="142"><span class="lineNum"> 142 </span> : : struct ffs_entry *dst, struct __ffs_entry *src)</a>
<a name="143"><span class="lineNum"> 143 </span> : : {</a>
-<a name="144"><span class="lineNum"> 144 </span> :<span class="lineNoCov"> 0 : int rc;</span></a>
+<a name="144"><span class="lineNum"> 144 </span> : : int rc;</a>
<a name="145"><span class="lineNum"> 145 </span> : : </a>
-<a name="146"><span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : if (ffs_entry_checksum(src) != 0)</span></a>
+<a name="146"><span class="lineNum"> 146 </span> : : if (ffs_entry_checksum(src) != 0)</a>
<a name="147"><span class="lineNum"> 147 </span> : : return FFS_ERR_BAD_CKSUM;</a>
<a name="148"><span class="lineNum"> 148 </span> : : </a>
-<a name="149"><span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : memcpy(dst-&gt;name, src-&gt;name, sizeof(dst-&gt;name));</span></a>
-<a name="150"><span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : dst-&gt;name[FFS_PART_NAME_MAX] = '\0';</span></a>
-<a name="151"><span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : dst-&gt;base = be32_to_cpu(src-&gt;base) * hdr-&gt;block_size;</span></a>
-<a name="152"><span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : dst-&gt;size = be32_to_cpu(src-&gt;size) * hdr-&gt;block_size;</span></a>
-<a name="153"><span class="lineNum"> 153 </span> :<span class="lineNoCov"> 0 : dst-&gt;actual = be32_to_cpu(src-&gt;actual);</span></a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : dst-&gt;pid = be32_to_cpu(src-&gt;pid);</span></a>
-<a name="155"><span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : dst-&gt;type = be32_to_cpu(src-&gt;type); /* TODO: Check that it is valid? */</span></a>
-<a name="156"><span class="lineNum"> 156 </span> :<span class="lineNoCov"> 0 : dst-&gt;flags = be32_to_cpu(src-&gt;flags);</span></a>
-<a name="157"><span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : rc = ffs_entry_user_to_cpu(hdr, &amp;dst-&gt;user, &amp;src-&gt;user);</span></a>
+<a name="149"><span class="lineNum"> 149 </span> : : memcpy(dst-&gt;name, src-&gt;name, sizeof(dst-&gt;name));</a>
+<a name="150"><span class="lineNum"> 150 </span> : : dst-&gt;name[FFS_PART_NAME_MAX] = '\0';</a>
+<a name="151"><span class="lineNum"> 151 </span> : : dst-&gt;base = be32_to_cpu(src-&gt;base) * hdr-&gt;block_size;</a>
+<a name="152"><span class="lineNum"> 152 </span> : : dst-&gt;size = be32_to_cpu(src-&gt;size) * hdr-&gt;block_size;</a>
+<a name="153"><span class="lineNum"> 153 </span> : : dst-&gt;actual = be32_to_cpu(src-&gt;actual);</a>
+<a name="154"><span class="lineNum"> 154 </span> : : dst-&gt;pid = be32_to_cpu(src-&gt;pid);</a>
+<a name="155"><span class="lineNum"> 155 </span> : : dst-&gt;type = be32_to_cpu(src-&gt;type); /* TODO: Check that it is valid? */</a>
+<a name="156"><span class="lineNum"> 156 </span> : : dst-&gt;flags = be32_to_cpu(src-&gt;flags);</a>
+<a name="157"><span class="lineNum"> 157 </span> : : rc = ffs_entry_user_to_cpu(hdr, &amp;dst-&gt;user, &amp;src-&gt;user);</a>
<a name="158"><span class="lineNum"> 158 </span> : : </a>
-<a name="159"><span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
+<a name="159"><span class="lineNum"> 159 </span> : : return rc;</a>
<a name="160"><span class="lineNum"> 160 </span> : : }</a>
<a name="161"><span class="lineNum"> 161 </span> : : </a>
<a name="162"><span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : char *ffs_entry_user_to_string(struct ffs_entry_user *user)</span></a>
diff --git a/coverage-report/external/gard/libflash/libflash.c.func-sort-c.html b/coverage-report/external/gard/libflash/libflash.c.func-sort-c.html
index b224d56..5f2b4ac 100644
--- a/coverage-report/external/gard/libflash/libflash.c.func-sort-c.html
+++ b/coverage-report/external/gard/libflash/libflash.c.func-sort-c.html
@@ -32,16 +32,16 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">419</td>
+ <td class="headerCovTableEntry">391</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">20</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
@@ -73,14 +73,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#183">fl_get_best_erase</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#55">fl_micron_status</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#50">fl_read_stat</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -89,10 +81,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#293">fl_wpage</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#87">fl_wren</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -145,10 +133,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#440">flash_smart_comp</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#465">flash_smart_write</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/gard/libflash/libflash.c.func.html b/coverage-report/external/gard/libflash/libflash.c.func.html
index 5b9f010..c47cc08 100644
--- a/coverage-report/external/gard/libflash/libflash.c.func.html
+++ b/coverage-report/external/gard/libflash/libflash.c.func.html
@@ -32,16 +32,16 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">419</td>
+ <td class="headerCovTableEntry">391</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">20</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
@@ -73,14 +73,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#183">fl_get_best_erase</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#55">fl_micron_status</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#50">fl_read_stat</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -89,10 +81,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#293">fl_wpage</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#87">fl_wren</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -145,10 +133,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#440">flash_smart_comp</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#465">flash_smart_write</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/gard/libflash/libflash.c.gcov.html b/coverage-report/external/gard/libflash/libflash.c.gcov.html
index 5444a72..3ccaba9 100644
--- a/coverage-report/external/gard/libflash/libflash.c.gcov.html
+++ b/coverage-report/external/gard/libflash/libflash.c.gcov.html
@@ -32,16 +32,16 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">419</td>
+ <td class="headerCovTableEntry">391</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">20</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
@@ -253,36 +253,36 @@
<a name="182"><span class="lineNum"> 182 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
<a name="183"><span class="lineNum"> 183 </span> : : }</a>
<a name="184"><span class="lineNum"> 184 </span> : : </a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : static void fl_get_best_erase(struct flash_chip *c, uint32_t dst, uint32_t size,</span></a>
+<a name="185"><span class="lineNum"> 185 </span> : : static void fl_get_best_erase(struct flash_chip *c, uint32_t dst, uint32_t size,</a>
<a name="186"><span class="lineNum"> 186 </span> : : uint32_t *chunk, uint8_t *cmd)</a>
<a name="187"><span class="lineNum"> 187 </span> : : {</a>
<a name="188"><span class="lineNum"> 188 </span> : : /* Smaller than 32k, use 4k */</a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : if ((dst &amp; 0x7fff) || (size &lt; 0x8000)) {</span></a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : *chunk = 0x1000;</span></a>
-<a name="191"><span class="lineNum"> 191 </span> :<span class="lineNoCov"> 0 : *cmd = CMD_SE;</span></a>
-<a name="192"><span class="lineNum"> 192 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="189"><span class="lineNum"> 189 </span> : : if ((dst &amp; 0x7fff) || (size &lt; 0x8000)) {</a>
+<a name="190"><span class="lineNum"> 190 </span> : : *chunk = 0x1000;</a>
+<a name="191"><span class="lineNum"> 191 </span> : : *cmd = CMD_SE;</a>
+<a name="192"><span class="lineNum"> 192 </span> : : return;</a>
<a name="193"><span class="lineNum"> 193 </span> : : }</a>
<a name="194"><span class="lineNum"> 194 </span> : : /* Smaller than 64k and 32k is supported, use it */</a>
-<a name="195"><span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : if ((c-&gt;info.flags &amp; FL_ERASE_32K) &amp;&amp;</span></a>
-<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : ((dst &amp; 0xffff) || (size &lt; 0x10000))) {</span></a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : *chunk = 0x8000;</span></a>
-<a name="198"><span class="lineNum"> 198 </span> :<span class="lineNoCov"> 0 : *cmd = CMD_BE32K;</span></a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="195"><span class="lineNum"> 195 </span> : : if ((c-&gt;info.flags &amp; FL_ERASE_32K) &amp;&amp;</a>
+<a name="196"><span class="lineNum"> 196 </span> : : ((dst &amp; 0xffff) || (size &lt; 0x10000))) {</a>
+<a name="197"><span class="lineNum"> 197 </span> : : *chunk = 0x8000;</a>
+<a name="198"><span class="lineNum"> 198 </span> : : *cmd = CMD_BE32K;</a>
+<a name="199"><span class="lineNum"> 199 </span> : : return;</a>
<a name="200"><span class="lineNum"> 200 </span> : : }</a>
<a name="201"><span class="lineNum"> 201 </span> : : /* If 64K is not supported, use whatever smaller size is */</a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : if (!(c-&gt;info.flags &amp; FL_ERASE_64K)) {</span></a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : if (c-&gt;info.flags &amp; FL_ERASE_32K) {</span></a>
-<a name="204"><span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : *chunk = 0x8000;</span></a>
-<a name="205"><span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : *cmd = CMD_BE32K;</span></a>
+<a name="202"><span class="lineNum"> 202 </span> : : if (!(c-&gt;info.flags &amp; FL_ERASE_64K)) {</a>
+<a name="203"><span class="lineNum"> 203 </span> : : if (c-&gt;info.flags &amp; FL_ERASE_32K) {</a>
+<a name="204"><span class="lineNum"> 204 </span> : : *chunk = 0x8000;</a>
+<a name="205"><span class="lineNum"> 205 </span> : : *cmd = CMD_BE32K;</a>
<a name="206"><span class="lineNum"> 206 </span> : : } else {</a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : *chunk = 0x1000;</span></a>
-<a name="208"><span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : *cmd = CMD_SE;</span></a>
+<a name="207"><span class="lineNum"> 207 </span> : : *chunk = 0x1000;</a>
+<a name="208"><span class="lineNum"> 208 </span> : : *cmd = CMD_SE;</a>
<a name="209"><span class="lineNum"> 209 </span> : : }</a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="210"><span class="lineNum"> 210 </span> : : return;</a>
<a name="211"><span class="lineNum"> 211 </span> : : }</a>
<a name="212"><span class="lineNum"> 212 </span> : : /* Allright, let's go for 64K */</a>
-<a name="213"><span class="lineNum"> 213 </span> :<span class="lineNoCov"> 0 : *chunk = 0x10000;</span></a>
-<a name="214"><span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : *cmd = CMD_BE;</span></a>
+<a name="213"><span class="lineNum"> 213 </span> : : *chunk = 0x10000;</a>
+<a name="214"><span class="lineNum"> 214 </span> : : *cmd = CMD_BE;</a>
<a name="215"><span class="lineNum"> 215 </span> : : }</a>
<a name="216"><span class="lineNum"> 216 </span> : : </a>
<a name="217"><span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : static int flash_erase(struct blocklevel_device *bl, uint64_t dst, uint64_t size)</span></a>
@@ -363,24 +363,24 @@
<a name="292"><span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : return fl_sync_wait_idle(ct);</span></a>
<a name="293"><span class="lineNum"> 293 </span> : : }</a>
<a name="294"><span class="lineNum"> 294 </span> : : </a>
-<a name="295"><span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : static int fl_wpage(struct flash_chip *c, uint32_t dst, const void *src,</span></a>
+<a name="295"><span class="lineNum"> 295 </span> : : static int fl_wpage(struct flash_chip *c, uint32_t dst, const void *src,</a>
<a name="296"><span class="lineNum"> 296 </span> : : uint32_t size)</a>
<a name="297"><span class="lineNum"> 297 </span> : : {</a>
-<a name="298"><span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : struct spi_flash_ctrl *ct = c-&gt;ctrl;</span></a>
-<a name="299"><span class="lineNum"> 299 </span> :<span class="lineNoCov"> 0 : int rc;</span></a>
+<a name="298"><span class="lineNum"> 298 </span> : : struct spi_flash_ctrl *ct = c-&gt;ctrl;</a>
+<a name="299"><span class="lineNum"> 299 </span> : : int rc;</a>
<a name="300"><span class="lineNum"> 300 </span> : : </a>
-<a name="301"><span class="lineNum"> 301 </span> :<span class="lineNoCov"> 0 : if (size &lt; 1 || size &gt; 0x100)</span></a>
+<a name="301"><span class="lineNum"> 301 </span> : : if (size &lt; 1 || size &gt; 0x100)</a>
<a name="302"><span class="lineNum"> 302 </span> : : return FLASH_ERR_BAD_PAGE_SIZE;</a>
<a name="303"><span class="lineNum"> 303 </span> : : </a>
-<a name="304"><span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : rc = fl_wren(ct);</span></a>
-<a name="305"><span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : if (rc) return rc;</span></a>
+<a name="304"><span class="lineNum"> 304 </span> : : rc = fl_wren(ct);</a>
+<a name="305"><span class="lineNum"> 305 </span> : : if (rc) return rc;</a>
<a name="306"><span class="lineNum"> 306 </span> : : </a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : rc = ct-&gt;cmd_wr(ct, CMD_PP, true, dst, src, size);</span></a>
-<a name="308"><span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
+<a name="307"><span class="lineNum"> 307 </span> : : rc = ct-&gt;cmd_wr(ct, CMD_PP, true, dst, src, size);</a>
+<a name="308"><span class="lineNum"> 308 </span> : : if (rc)</a>
<a name="309"><span class="lineNum"> 309 </span> : : return rc;</a>
<a name="310"><span class="lineNum"> 310 </span> : : </a>
<a name="311"><span class="lineNum"> 311 </span> : : /* Wait for write complete */</a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : return fl_sync_wait_idle(ct);</span></a>
+<a name="312"><span class="lineNum"> 312 </span> : : return fl_sync_wait_idle(ct);</a>
<a name="313"><span class="lineNum"> 313 </span> : : }</a>
<a name="314"><span class="lineNum"> 314 </span> : : </a>
<a name="315"><span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : static int flash_write(struct blocklevel_device *bl, uint32_t dst, const void *src,</span></a>
diff --git a/coverage-report/external/pflash/ccan/endian/endian.h.func-sort-c.html b/coverage-report/external/pflash/ccan/endian/endian.h.func-sort-c.html
index d0224d4..dc55fa1 100644
--- a/coverage-report/external/pflash/ccan/endian/endian.h.func-sort-c.html
+++ b/coverage-report/external/pflash/ccan/endian/endian.h.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">60.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -69,11 +69,11 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#314">be64_to_cpu</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#322">be64_to_cpu</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#287">cpu_to_be64</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#295">cpu_to_be64</a></td>
<td class="coverFnLo">0</td>
</tr>
</table>
diff --git a/coverage-report/external/pflash/ccan/endian/endian.h.func.html b/coverage-report/external/pflash/ccan/endian/endian.h.func.html
index 2f03811..6952660 100644
--- a/coverage-report/external/pflash/ccan/endian/endian.h.func.html
+++ b/coverage-report/external/pflash/ccan/endian/endian.h.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">60.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -69,11 +69,11 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="endian.h.func-sort-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#314">be64_to_cpu</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#322">be64_to_cpu</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="endian.h.gcov.html#287">cpu_to_be64</a></td>
+ <td class="coverFn"><a href="endian.h.gcov.html#295">cpu_to_be64</a></td>
<td class="coverFnLo">0</td>
</tr>
</table>
diff --git a/coverage-report/external/pflash/ccan/endian/endian.h.gcov.html b/coverage-report/external/pflash/ccan/endian/endian.h.gcov.html
index 79f2888..aa1031c 100644
--- a/coverage-report/external/pflash/ccan/endian/endian.h.gcov.html
+++ b/coverage-report/external/pflash/ccan/endian/endian.h.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">60.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -184,246 +184,254 @@
<a name="113"><span class="lineNum"> 113 </span> : : #elif HAVE_LITTLE_ENDIAN &amp;&amp; HAVE_BIG_ENDIAN</a>
<a name="114"><span class="lineNum"> 114 </span> : : #error &quot;Can't compile for both big and little endian.&quot;</a>
<a name="115"><span class="lineNum"> 115 </span> : : #elif HAVE_LITTLE_ENDIAN</a>
-<a name="116"><span class="lineNum"> 116 </span> : : #define __BYTE_ORDER __LITTLE_ENDIAN</a>
-<a name="117"><span class="lineNum"> 117 </span> : : #elif HAVE_BIG_ENDIAN</a>
-<a name="118"><span class="lineNum"> 118 </span> : : #define __BYTE_ORDER __BIG_ENDIAN</a>
-<a name="119"><span class="lineNum"> 119 </span> : : #endif</a>
-<a name="120"><span class="lineNum"> 120 </span> : : </a>
-<a name="121"><span class="lineNum"> 121 </span> : : </a>
-<a name="122"><span class="lineNum"> 122 </span> : : #ifdef __CHECKER__</a>
-<a name="123"><span class="lineNum"> 123 </span> : : /* sparse needs forcing to remove bitwise attribute from ccan/short_types */</a>
-<a name="124"><span class="lineNum"> 124 </span> : : #define ENDIAN_CAST __attribute__((force))</a>
-<a name="125"><span class="lineNum"> 125 </span> : : #define ENDIAN_TYPE __attribute__((bitwise))</a>
-<a name="126"><span class="lineNum"> 126 </span> : : #else</a>
-<a name="127"><span class="lineNum"> 127 </span> : : #define ENDIAN_CAST</a>
-<a name="128"><span class="lineNum"> 128 </span> : : #define ENDIAN_TYPE</a>
-<a name="129"><span class="lineNum"> 129 </span> : : #endif</a>
-<a name="130"><span class="lineNum"> 130 </span> : : </a>
-<a name="131"><span class="lineNum"> 131 </span> : : typedef uint64_t ENDIAN_TYPE leint64_t;</a>
-<a name="132"><span class="lineNum"> 132 </span> : : typedef uint64_t ENDIAN_TYPE beint64_t;</a>
-<a name="133"><span class="lineNum"> 133 </span> : : typedef uint32_t ENDIAN_TYPE leint32_t;</a>
-<a name="134"><span class="lineNum"> 134 </span> : : typedef uint32_t ENDIAN_TYPE beint32_t;</a>
-<a name="135"><span class="lineNum"> 135 </span> : : typedef uint16_t ENDIAN_TYPE leint16_t;</a>
-<a name="136"><span class="lineNum"> 136 </span> : : typedef uint16_t ENDIAN_TYPE beint16_t;</a>
-<a name="137"><span class="lineNum"> 137 </span> : : </a>
-<a name="138"><span class="lineNum"> 138 </span> : : #if HAVE_LITTLE_ENDIAN</a>
-<a name="139"><span class="lineNum"> 139 </span> : : /**</a>
-<a name="140"><span class="lineNum"> 140 </span> : : * CPU_TO_LE64 - convert a constant uint64_t value to little-endian</a>
-<a name="141"><span class="lineNum"> 141 </span> : : * @native: constant to convert</a>
-<a name="142"><span class="lineNum"> 142 </span> : : */</a>
-<a name="143"><span class="lineNum"> 143 </span> : : #define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)(native))</a>
-<a name="144"><span class="lineNum"> 144 </span> : : </a>
-<a name="145"><span class="lineNum"> 145 </span> : : /**</a>
-<a name="146"><span class="lineNum"> 146 </span> : : * CPU_TO_LE32 - convert a constant uint32_t value to little-endian</a>
-<a name="147"><span class="lineNum"> 147 </span> : : * @native: constant to convert</a>
-<a name="148"><span class="lineNum"> 148 </span> : : */</a>
-<a name="149"><span class="lineNum"> 149 </span> : : #define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)(native))</a>
-<a name="150"><span class="lineNum"> 150 </span> : : </a>
-<a name="151"><span class="lineNum"> 151 </span> : : /**</a>
-<a name="152"><span class="lineNum"> 152 </span> : : * CPU_TO_LE16 - convert a constant uint16_t value to little-endian</a>
-<a name="153"><span class="lineNum"> 153 </span> : : * @native: constant to convert</a>
-<a name="154"><span class="lineNum"> 154 </span> : : */</a>
-<a name="155"><span class="lineNum"> 155 </span> : : #define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)(native))</a>
-<a name="156"><span class="lineNum"> 156 </span> : : </a>
-<a name="157"><span class="lineNum"> 157 </span> : : /**</a>
-<a name="158"><span class="lineNum"> 158 </span> : : * LE64_TO_CPU - convert a little-endian uint64_t constant</a>
-<a name="159"><span class="lineNum"> 159 </span> : : * @le_val: little-endian constant to convert</a>
-<a name="160"><span class="lineNum"> 160 </span> : : */</a>
-<a name="161"><span class="lineNum"> 161 </span> : : #define LE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val))</a>
-<a name="162"><span class="lineNum"> 162 </span> : : </a>
-<a name="163"><span class="lineNum"> 163 </span> : : /**</a>
-<a name="164"><span class="lineNum"> 164 </span> : : * LE32_TO_CPU - convert a little-endian uint32_t constant</a>
-<a name="165"><span class="lineNum"> 165 </span> : : * @le_val: little-endian constant to convert</a>
-<a name="166"><span class="lineNum"> 166 </span> : : */</a>
-<a name="167"><span class="lineNum"> 167 </span> : : #define LE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val))</a>
-<a name="168"><span class="lineNum"> 168 </span> : : </a>
-<a name="169"><span class="lineNum"> 169 </span> : : /**</a>
-<a name="170"><span class="lineNum"> 170 </span> : : * LE16_TO_CPU - convert a little-endian uint16_t constant</a>
-<a name="171"><span class="lineNum"> 171 </span> : : * @le_val: little-endian constant to convert</a>
-<a name="172"><span class="lineNum"> 172 </span> : : */</a>
-<a name="173"><span class="lineNum"> 173 </span> : : #define LE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val))</a>
-<a name="174"><span class="lineNum"> 174 </span> : : </a>
-<a name="175"><span class="lineNum"> 175 </span> : : #else /* ... HAVE_BIG_ENDIAN */</a>
-<a name="176"><span class="lineNum"> 176 </span> : : #define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)BSWAP_64(native))</a>
-<a name="177"><span class="lineNum"> 177 </span> : : #define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)BSWAP_32(native))</a>
-<a name="178"><span class="lineNum"> 178 </span> : : #define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)BSWAP_16(native))</a>
-<a name="179"><span class="lineNum"> 179 </span> : : #define LE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val)</a>
-<a name="180"><span class="lineNum"> 180 </span> : : #define LE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val)</a>
-<a name="181"><span class="lineNum"> 181 </span> : : #define LE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val)</a>
-<a name="182"><span class="lineNum"> 182 </span> : : #endif /* HAVE_BIG_ENDIAN */</a>
-<a name="183"><span class="lineNum"> 183 </span> : : </a>
-<a name="184"><span class="lineNum"> 184 </span> : : #if HAVE_BIG_ENDIAN</a>
-<a name="185"><span class="lineNum"> 185 </span> : : /**</a>
-<a name="186"><span class="lineNum"> 186 </span> : : * CPU_TO_BE64 - convert a constant uint64_t value to big-endian</a>
-<a name="187"><span class="lineNum"> 187 </span> : : * @native: constant to convert</a>
-<a name="188"><span class="lineNum"> 188 </span> : : */</a>
-<a name="189"><span class="lineNum"> 189 </span> : : #define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)(native))</a>
-<a name="190"><span class="lineNum"> 190 </span> : : </a>
-<a name="191"><span class="lineNum"> 191 </span> : : /**</a>
-<a name="192"><span class="lineNum"> 192 </span> : : * CPU_TO_BE32 - convert a constant uint32_t value to big-endian</a>
-<a name="193"><span class="lineNum"> 193 </span> : : * @native: constant to convert</a>
-<a name="194"><span class="lineNum"> 194 </span> : : */</a>
-<a name="195"><span class="lineNum"> 195 </span> : : #define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)(native))</a>
-<a name="196"><span class="lineNum"> 196 </span> : : </a>
-<a name="197"><span class="lineNum"> 197 </span> : : /**</a>
-<a name="198"><span class="lineNum"> 198 </span> : : * CPU_TO_BE16 - convert a constant uint16_t value to big-endian</a>
-<a name="199"><span class="lineNum"> 199 </span> : : * @native: constant to convert</a>
-<a name="200"><span class="lineNum"> 200 </span> : : */</a>
-<a name="201"><span class="lineNum"> 201 </span> : : #define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)(native))</a>
-<a name="202"><span class="lineNum"> 202 </span> : : </a>
-<a name="203"><span class="lineNum"> 203 </span> : : /**</a>
-<a name="204"><span class="lineNum"> 204 </span> : : * BE64_TO_CPU - convert a big-endian uint64_t constant</a>
-<a name="205"><span class="lineNum"> 205 </span> : : * @le_val: big-endian constant to convert</a>
-<a name="206"><span class="lineNum"> 206 </span> : : */</a>
-<a name="207"><span class="lineNum"> 207 </span> : : #define BE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val))</a>
-<a name="208"><span class="lineNum"> 208 </span> : : </a>
-<a name="209"><span class="lineNum"> 209 </span> : : /**</a>
-<a name="210"><span class="lineNum"> 210 </span> : : * BE32_TO_CPU - convert a big-endian uint32_t constant</a>
-<a name="211"><span class="lineNum"> 211 </span> : : * @le_val: big-endian constant to convert</a>
-<a name="212"><span class="lineNum"> 212 </span> : : */</a>
-<a name="213"><span class="lineNum"> 213 </span> : : #define BE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val))</a>
-<a name="214"><span class="lineNum"> 214 </span> : : </a>
-<a name="215"><span class="lineNum"> 215 </span> : : /**</a>
-<a name="216"><span class="lineNum"> 216 </span> : : * BE16_TO_CPU - convert a big-endian uint16_t constant</a>
-<a name="217"><span class="lineNum"> 217 </span> : : * @le_val: big-endian constant to convert</a>
-<a name="218"><span class="lineNum"> 218 </span> : : */</a>
-<a name="219"><span class="lineNum"> 219 </span> : : #define BE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val))</a>
-<a name="220"><span class="lineNum"> 220 </span> : : </a>
-<a name="221"><span class="lineNum"> 221 </span> : : #else /* ... HAVE_LITTLE_ENDIAN */</a>
-<a name="222"><span class="lineNum"> 222 </span> : : #define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)BSWAP_64(native))</a>
-<a name="223"><span class="lineNum"> 223 </span> : : #define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)BSWAP_32(native))</a>
-<a name="224"><span class="lineNum"> 224 </span> : : #define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)BSWAP_16(native))</a>
-<a name="225"><span class="lineNum"> 225 </span> : : #define BE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val)</a>
-<a name="226"><span class="lineNum"> 226 </span> : : #define BE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val)</a>
-<a name="227"><span class="lineNum"> 227 </span> : : #define BE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val)</a>
-<a name="228"><span class="lineNum"> 228 </span> : : #endif /* HAVE_LITTE_ENDIAN */</a>
-<a name="229"><span class="lineNum"> 229 </span> : : </a>
-<a name="230"><span class="lineNum"> 230 </span> : : </a>
-<a name="231"><span class="lineNum"> 231 </span> : : /**</a>
-<a name="232"><span class="lineNum"> 232 </span> : : * cpu_to_le64 - convert a uint64_t value to little-endian</a>
-<a name="233"><span class="lineNum"> 233 </span> : : * @native: value to convert</a>
-<a name="234"><span class="lineNum"> 234 </span> : : */</a>
-<a name="235"><span class="lineNum"> 235 </span> : : static inline leint64_t cpu_to_le64(uint64_t native)</a>
-<a name="236"><span class="lineNum"> 236 </span> : : {</a>
-<a name="237"><span class="lineNum"> 237 </span> : : return CPU_TO_LE64(native);</a>
-<a name="238"><span class="lineNum"> 238 </span> : : }</a>
-<a name="239"><span class="lineNum"> 239 </span> : : </a>
-<a name="240"><span class="lineNum"> 240 </span> : : /**</a>
-<a name="241"><span class="lineNum"> 241 </span> : : * cpu_to_le32 - convert a uint32_t value to little-endian</a>
-<a name="242"><span class="lineNum"> 242 </span> : : * @native: value to convert</a>
-<a name="243"><span class="lineNum"> 243 </span> : : */</a>
-<a name="244"><span class="lineNum"> 244 </span> : : static inline leint32_t cpu_to_le32(uint32_t native)</a>
-<a name="245"><span class="lineNum"> 245 </span> : : {</a>
-<a name="246"><span class="lineNum"> 246 </span> : : return CPU_TO_LE32(native);</a>
-<a name="247"><span class="lineNum"> 247 </span> : : }</a>
-<a name="248"><span class="lineNum"> 248 </span> : : </a>
-<a name="249"><span class="lineNum"> 249 </span> : : /**</a>
-<a name="250"><span class="lineNum"> 250 </span> : : * cpu_to_le16 - convert a uint16_t value to little-endian</a>
-<a name="251"><span class="lineNum"> 251 </span> : : * @native: value to convert</a>
-<a name="252"><span class="lineNum"> 252 </span> : : */</a>
-<a name="253"><span class="lineNum"> 253 </span> : : static inline leint16_t cpu_to_le16(uint16_t native)</a>
-<a name="254"><span class="lineNum"> 254 </span> : : {</a>
-<a name="255"><span class="lineNum"> 255 </span> : : return CPU_TO_LE16(native);</a>
-<a name="256"><span class="lineNum"> 256 </span> : : }</a>
-<a name="257"><span class="lineNum"> 257 </span> : : </a>
-<a name="258"><span class="lineNum"> 258 </span> : : /**</a>
-<a name="259"><span class="lineNum"> 259 </span> : : * le64_to_cpu - convert a little-endian uint64_t value</a>
-<a name="260"><span class="lineNum"> 260 </span> : : * @le_val: little-endian value to convert</a>
-<a name="261"><span class="lineNum"> 261 </span> : : */</a>
-<a name="262"><span class="lineNum"> 262 </span> : : static inline uint64_t le64_to_cpu(leint64_t le_val)</a>
-<a name="263"><span class="lineNum"> 263 </span> : : {</a>
-<a name="264"><span class="lineNum"> 264 </span> : : return LE64_TO_CPU(le_val);</a>
-<a name="265"><span class="lineNum"> 265 </span> : : }</a>
-<a name="266"><span class="lineNum"> 266 </span> : : </a>
-<a name="267"><span class="lineNum"> 267 </span> : : /**</a>
-<a name="268"><span class="lineNum"> 268 </span> : : * le32_to_cpu - convert a little-endian uint32_t value</a>
-<a name="269"><span class="lineNum"> 269 </span> : : * @le_val: little-endian value to convert</a>
-<a name="270"><span class="lineNum"> 270 </span> : : */</a>
-<a name="271"><span class="lineNum"> 271 </span> : : static inline uint32_t le32_to_cpu(leint32_t le_val)</a>
-<a name="272"><span class="lineNum"> 272 </span> : : {</a>
-<a name="273"><span class="lineNum"> 273 </span> : : return LE32_TO_CPU(le_val);</a>
-<a name="274"><span class="lineNum"> 274 </span> : : }</a>
-<a name="275"><span class="lineNum"> 275 </span> : : </a>
-<a name="276"><span class="lineNum"> 276 </span> : : /**</a>
-<a name="277"><span class="lineNum"> 277 </span> : : * le16_to_cpu - convert a little-endian uint16_t value</a>
-<a name="278"><span class="lineNum"> 278 </span> : : * @le_val: little-endian value to convert</a>
-<a name="279"><span class="lineNum"> 279 </span> : : */</a>
-<a name="280"><span class="lineNum"> 280 </span> : : static inline uint16_t le16_to_cpu(leint16_t le_val)</a>
-<a name="281"><span class="lineNum"> 281 </span> : : {</a>
-<a name="282"><span class="lineNum"> 282 </span> : : return LE16_TO_CPU(le_val);</a>
-<a name="283"><span class="lineNum"> 283 </span> : : }</a>
-<a name="284"><span class="lineNum"> 284 </span> : : </a>
-<a name="285"><span class="lineNum"> 285 </span> : : /**</a>
-<a name="286"><span class="lineNum"> 286 </span> : : * cpu_to_be64 - convert a uint64_t value to big endian.</a>
-<a name="287"><span class="lineNum"> 287 </span> : : * @native: value to convert</a>
-<a name="288"><span class="lineNum"> 288 </span> : : */</a>
-<a name="289"><span class="lineNum"> 289 </span> :<span class="lineNoCov"> 0 : static inline beint64_t cpu_to_be64(uint64_t native)</span></a>
-<a name="290"><span class="lineNum"> 290 </span> : : {</a>
-<a name="291"><span class="lineNum"> 291 </span> :<span class="lineNoCov"> 0 : return CPU_TO_BE64(native);</span></a>
-<a name="292"><span class="lineNum"> 292 </span> : : }</a>
-<a name="293"><span class="lineNum"> 293 </span> : : </a>
-<a name="294"><span class="lineNum"> 294 </span> : : /**</a>
-<a name="295"><span class="lineNum"> 295 </span> : : * cpu_to_be32 - convert a uint32_t value to big endian.</a>
-<a name="296"><span class="lineNum"> 296 </span> : : * @native: value to convert</a>
-<a name="297"><span class="lineNum"> 297 </span> : : */</a>
-<a name="298"><span class="lineNum"> 298 </span> :<span class="lineCov"> 1 : static inline beint32_t cpu_to_be32(uint32_t native)</span></a>
-<a name="299"><span class="lineNum"> 299 </span> : : {</a>
-<a name="300"><span class="lineNum"> 300 </span> :<span class="lineCov"> 1 : return CPU_TO_BE32(native);</span></a>
-<a name="301"><span class="lineNum"> 301 </span> : : }</a>
-<a name="302"><span class="lineNum"> 302 </span> : : </a>
-<a name="303"><span class="lineNum"> 303 </span> : : /**</a>
-<a name="304"><span class="lineNum"> 304 </span> : : * cpu_to_be16 - convert a uint16_t value to big endian.</a>
-<a name="305"><span class="lineNum"> 305 </span> : : * @native: value to convert</a>
-<a name="306"><span class="lineNum"> 306 </span> : : */</a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineCov"> 1 : static inline beint16_t cpu_to_be16(uint16_t native)</span></a>
-<a name="308"><span class="lineNum"> 308 </span> : : {</a>
-<a name="309"><span class="lineNum"> 309 </span> :<span class="lineCov"> 1 : return CPU_TO_BE16(native);</span></a>
-<a name="310"><span class="lineNum"> 310 </span> : : }</a>
-<a name="311"><span class="lineNum"> 311 </span> : : </a>
-<a name="312"><span class="lineNum"> 312 </span> : : /**</a>
-<a name="313"><span class="lineNum"> 313 </span> : : * be64_to_cpu - convert a big-endian uint64_t value</a>
-<a name="314"><span class="lineNum"> 314 </span> : : * @be_val: big-endian value to convert</a>
-<a name="315"><span class="lineNum"> 315 </span> : : */</a>
-<a name="316"><span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : static inline uint64_t be64_to_cpu(beint64_t be_val)</span></a>
-<a name="317"><span class="lineNum"> 317 </span> : : {</a>
-<a name="318"><span class="lineNum"> 318 </span> :<span class="lineNoCov"> 0 : return BE64_TO_CPU(be_val);</span></a>
-<a name="319"><span class="lineNum"> 319 </span> : : }</a>
-<a name="320"><span class="lineNum"> 320 </span> : : </a>
-<a name="321"><span class="lineNum"> 321 </span> : : /**</a>
-<a name="322"><span class="lineNum"> 322 </span> : : * be32_to_cpu - convert a big-endian uint32_t value</a>
-<a name="323"><span class="lineNum"> 323 </span> : : * @be_val: big-endian value to convert</a>
-<a name="324"><span class="lineNum"> 324 </span> : : */</a>
-<a name="325"><span class="lineNum"> 325 </span> :<span class="lineCov"> 104 : static inline uint32_t be32_to_cpu(beint32_t be_val)</span></a>
-<a name="326"><span class="lineNum"> 326 </span> : : {</a>
-<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 77 : return BE32_TO_CPU(be_val);</span></a>
-<a name="328"><span class="lineNum"> 328 </span> : : }</a>
-<a name="329"><span class="lineNum"> 329 </span> : : </a>
-<a name="330"><span class="lineNum"> 330 </span> : : /**</a>
-<a name="331"><span class="lineNum"> 331 </span> : : * be16_to_cpu - convert a big-endian uint16_t value</a>
-<a name="332"><span class="lineNum"> 332 </span> : : * @be_val: big-endian value to convert</a>
-<a name="333"><span class="lineNum"> 333 </span> : : */</a>
-<a name="334"><span class="lineNum"> 334 </span> :<span class="lineCov"> 59 : static inline uint16_t be16_to_cpu(beint16_t be_val)</span></a>
-<a name="335"><span class="lineNum"> 335 </span> : : {</a>
-<a name="336"><span class="lineNum"> 336 </span> :<span class="lineCov"> 59 : return BE16_TO_CPU(be_val);</span></a>
-<a name="337"><span class="lineNum"> 337 </span> : : }</a>
-<a name="338"><span class="lineNum"> 338 </span> : : </a>
-<a name="339"><span class="lineNum"> 339 </span> : : /* Whichever they include first, they get these definitions. */</a>
-<a name="340"><span class="lineNum"> 340 </span> : : #ifdef CCAN_SHORT_TYPES_H</a>
-<a name="341"><span class="lineNum"> 341 </span> : : /**</a>
-<a name="342"><span class="lineNum"> 342 </span> : : * be64/be32/be16 - 64/32/16 bit big-endian representation.</a>
-<a name="343"><span class="lineNum"> 343 </span> : : */</a>
-<a name="344"><span class="lineNum"> 344 </span> : : typedef beint64_t be64;</a>
-<a name="345"><span class="lineNum"> 345 </span> : : typedef beint32_t be32;</a>
-<a name="346"><span class="lineNum"> 346 </span> : : typedef beint16_t be16;</a>
-<a name="347"><span class="lineNum"> 347 </span> : : </a>
-<a name="348"><span class="lineNum"> 348 </span> : : /**</a>
-<a name="349"><span class="lineNum"> 349 </span> : : * le64/le32/le16 - 64/32/16 bit little-endian representation.</a>
-<a name="350"><span class="lineNum"> 350 </span> : : */</a>
-<a name="351"><span class="lineNum"> 351 </span> : : typedef leint64_t le64;</a>
-<a name="352"><span class="lineNum"> 352 </span> : : typedef leint32_t le32;</a>
-<a name="353"><span class="lineNum"> 353 </span> : : typedef leint16_t le16;</a>
-<a name="354"><span class="lineNum"> 354 </span> : : #endif</a>
-<a name="355"><span class="lineNum"> 355 </span> : : #endif /* CCAN_ENDIAN_H */</a>
+<a name="116"><span class="lineNum"> 116 </span> : : #ifndef __BYTE_ORDER</a>
+<a name="117"><span class="lineNum"> 117 </span> : : #define __BYTE_ORDER __LITTLE_ENDIAN</a>
+<a name="118"><span class="lineNum"> 118 </span> : : #elif __BYTE_ORDER != __LITTLE_ENDIAN</a>
+<a name="119"><span class="lineNum"> 119 </span> : : #error &quot;__BYTE_ORDER already defined, but not equal to __LITTLE_ENDIAN&quot;</a>
+<a name="120"><span class="lineNum"> 120 </span> : : #endif</a>
+<a name="121"><span class="lineNum"> 121 </span> : : #elif HAVE_BIG_ENDIAN</a>
+<a name="122"><span class="lineNum"> 122 </span> : : #ifndef __BYTE_ORDER</a>
+<a name="123"><span class="lineNum"> 123 </span> : : #define __BYTE_ORDER __BIG_ENDIAN</a>
+<a name="124"><span class="lineNum"> 124 </span> : : #elif __BYTE_ORDER != __BIG_ENDIAN</a>
+<a name="125"><span class="lineNum"> 125 </span> : : #error &quot;__BYTE_ORDER already defined, but not equal to __BIG_ENDIAN&quot;</a>
+<a name="126"><span class="lineNum"> 126 </span> : : #endif</a>
+<a name="127"><span class="lineNum"> 127 </span> : : #endif</a>
+<a name="128"><span class="lineNum"> 128 </span> : : </a>
+<a name="129"><span class="lineNum"> 129 </span> : : </a>
+<a name="130"><span class="lineNum"> 130 </span> : : #ifdef __CHECKER__</a>
+<a name="131"><span class="lineNum"> 131 </span> : : /* sparse needs forcing to remove bitwise attribute from ccan/short_types */</a>
+<a name="132"><span class="lineNum"> 132 </span> : : #define ENDIAN_CAST __attribute__((force))</a>
+<a name="133"><span class="lineNum"> 133 </span> : : #define ENDIAN_TYPE __attribute__((bitwise))</a>
+<a name="134"><span class="lineNum"> 134 </span> : : #else</a>
+<a name="135"><span class="lineNum"> 135 </span> : : #define ENDIAN_CAST</a>
+<a name="136"><span class="lineNum"> 136 </span> : : #define ENDIAN_TYPE</a>
+<a name="137"><span class="lineNum"> 137 </span> : : #endif</a>
+<a name="138"><span class="lineNum"> 138 </span> : : </a>
+<a name="139"><span class="lineNum"> 139 </span> : : typedef uint64_t ENDIAN_TYPE leint64_t;</a>
+<a name="140"><span class="lineNum"> 140 </span> : : typedef uint64_t ENDIAN_TYPE beint64_t;</a>
+<a name="141"><span class="lineNum"> 141 </span> : : typedef uint32_t ENDIAN_TYPE leint32_t;</a>
+<a name="142"><span class="lineNum"> 142 </span> : : typedef uint32_t ENDIAN_TYPE beint32_t;</a>
+<a name="143"><span class="lineNum"> 143 </span> : : typedef uint16_t ENDIAN_TYPE leint16_t;</a>
+<a name="144"><span class="lineNum"> 144 </span> : : typedef uint16_t ENDIAN_TYPE beint16_t;</a>
+<a name="145"><span class="lineNum"> 145 </span> : : </a>
+<a name="146"><span class="lineNum"> 146 </span> : : #if HAVE_LITTLE_ENDIAN</a>
+<a name="147"><span class="lineNum"> 147 </span> : : /**</a>
+<a name="148"><span class="lineNum"> 148 </span> : : * CPU_TO_LE64 - convert a constant uint64_t value to little-endian</a>
+<a name="149"><span class="lineNum"> 149 </span> : : * @native: constant to convert</a>
+<a name="150"><span class="lineNum"> 150 </span> : : */</a>
+<a name="151"><span class="lineNum"> 151 </span> : : #define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)(native))</a>
+<a name="152"><span class="lineNum"> 152 </span> : : </a>
+<a name="153"><span class="lineNum"> 153 </span> : : /**</a>
+<a name="154"><span class="lineNum"> 154 </span> : : * CPU_TO_LE32 - convert a constant uint32_t value to little-endian</a>
+<a name="155"><span class="lineNum"> 155 </span> : : * @native: constant to convert</a>
+<a name="156"><span class="lineNum"> 156 </span> : : */</a>
+<a name="157"><span class="lineNum"> 157 </span> : : #define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)(native))</a>
+<a name="158"><span class="lineNum"> 158 </span> : : </a>
+<a name="159"><span class="lineNum"> 159 </span> : : /**</a>
+<a name="160"><span class="lineNum"> 160 </span> : : * CPU_TO_LE16 - convert a constant uint16_t value to little-endian</a>
+<a name="161"><span class="lineNum"> 161 </span> : : * @native: constant to convert</a>
+<a name="162"><span class="lineNum"> 162 </span> : : */</a>
+<a name="163"><span class="lineNum"> 163 </span> : : #define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)(native))</a>
+<a name="164"><span class="lineNum"> 164 </span> : : </a>
+<a name="165"><span class="lineNum"> 165 </span> : : /**</a>
+<a name="166"><span class="lineNum"> 166 </span> : : * LE64_TO_CPU - convert a little-endian uint64_t constant</a>
+<a name="167"><span class="lineNum"> 167 </span> : : * @le_val: little-endian constant to convert</a>
+<a name="168"><span class="lineNum"> 168 </span> : : */</a>
+<a name="169"><span class="lineNum"> 169 </span> : : #define LE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val))</a>
+<a name="170"><span class="lineNum"> 170 </span> : : </a>
+<a name="171"><span class="lineNum"> 171 </span> : : /**</a>
+<a name="172"><span class="lineNum"> 172 </span> : : * LE32_TO_CPU - convert a little-endian uint32_t constant</a>
+<a name="173"><span class="lineNum"> 173 </span> : : * @le_val: little-endian constant to convert</a>
+<a name="174"><span class="lineNum"> 174 </span> : : */</a>
+<a name="175"><span class="lineNum"> 175 </span> : : #define LE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val))</a>
+<a name="176"><span class="lineNum"> 176 </span> : : </a>
+<a name="177"><span class="lineNum"> 177 </span> : : /**</a>
+<a name="178"><span class="lineNum"> 178 </span> : : * LE16_TO_CPU - convert a little-endian uint16_t constant</a>
+<a name="179"><span class="lineNum"> 179 </span> : : * @le_val: little-endian constant to convert</a>
+<a name="180"><span class="lineNum"> 180 </span> : : */</a>
+<a name="181"><span class="lineNum"> 181 </span> : : #define LE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val))</a>
+<a name="182"><span class="lineNum"> 182 </span> : : </a>
+<a name="183"><span class="lineNum"> 183 </span> : : #else /* ... HAVE_BIG_ENDIAN */</a>
+<a name="184"><span class="lineNum"> 184 </span> : : #define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)BSWAP_64(native))</a>
+<a name="185"><span class="lineNum"> 185 </span> : : #define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)BSWAP_32(native))</a>
+<a name="186"><span class="lineNum"> 186 </span> : : #define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)BSWAP_16(native))</a>
+<a name="187"><span class="lineNum"> 187 </span> : : #define LE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val)</a>
+<a name="188"><span class="lineNum"> 188 </span> : : #define LE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val)</a>
+<a name="189"><span class="lineNum"> 189 </span> : : #define LE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val)</a>
+<a name="190"><span class="lineNum"> 190 </span> : : #endif /* HAVE_BIG_ENDIAN */</a>
+<a name="191"><span class="lineNum"> 191 </span> : : </a>
+<a name="192"><span class="lineNum"> 192 </span> : : #if HAVE_BIG_ENDIAN</a>
+<a name="193"><span class="lineNum"> 193 </span> : : /**</a>
+<a name="194"><span class="lineNum"> 194 </span> : : * CPU_TO_BE64 - convert a constant uint64_t value to big-endian</a>
+<a name="195"><span class="lineNum"> 195 </span> : : * @native: constant to convert</a>
+<a name="196"><span class="lineNum"> 196 </span> : : */</a>
+<a name="197"><span class="lineNum"> 197 </span> : : #define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)(native))</a>
+<a name="198"><span class="lineNum"> 198 </span> : : </a>
+<a name="199"><span class="lineNum"> 199 </span> : : /**</a>
+<a name="200"><span class="lineNum"> 200 </span> : : * CPU_TO_BE32 - convert a constant uint32_t value to big-endian</a>
+<a name="201"><span class="lineNum"> 201 </span> : : * @native: constant to convert</a>
+<a name="202"><span class="lineNum"> 202 </span> : : */</a>
+<a name="203"><span class="lineNum"> 203 </span> : : #define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)(native))</a>
+<a name="204"><span class="lineNum"> 204 </span> : : </a>
+<a name="205"><span class="lineNum"> 205 </span> : : /**</a>
+<a name="206"><span class="lineNum"> 206 </span> : : * CPU_TO_BE16 - convert a constant uint16_t value to big-endian</a>
+<a name="207"><span class="lineNum"> 207 </span> : : * @native: constant to convert</a>
+<a name="208"><span class="lineNum"> 208 </span> : : */</a>
+<a name="209"><span class="lineNum"> 209 </span> : : #define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)(native))</a>
+<a name="210"><span class="lineNum"> 210 </span> : : </a>
+<a name="211"><span class="lineNum"> 211 </span> : : /**</a>
+<a name="212"><span class="lineNum"> 212 </span> : : * BE64_TO_CPU - convert a big-endian uint64_t constant</a>
+<a name="213"><span class="lineNum"> 213 </span> : : * @le_val: big-endian constant to convert</a>
+<a name="214"><span class="lineNum"> 214 </span> : : */</a>
+<a name="215"><span class="lineNum"> 215 </span> : : #define BE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val))</a>
+<a name="216"><span class="lineNum"> 216 </span> : : </a>
+<a name="217"><span class="lineNum"> 217 </span> : : /**</a>
+<a name="218"><span class="lineNum"> 218 </span> : : * BE32_TO_CPU - convert a big-endian uint32_t constant</a>
+<a name="219"><span class="lineNum"> 219 </span> : : * @le_val: big-endian constant to convert</a>
+<a name="220"><span class="lineNum"> 220 </span> : : */</a>
+<a name="221"><span class="lineNum"> 221 </span> : : #define BE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val))</a>
+<a name="222"><span class="lineNum"> 222 </span> : : </a>
+<a name="223"><span class="lineNum"> 223 </span> : : /**</a>
+<a name="224"><span class="lineNum"> 224 </span> : : * BE16_TO_CPU - convert a big-endian uint16_t constant</a>
+<a name="225"><span class="lineNum"> 225 </span> : : * @le_val: big-endian constant to convert</a>
+<a name="226"><span class="lineNum"> 226 </span> : : */</a>
+<a name="227"><span class="lineNum"> 227 </span> : : #define BE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val))</a>
+<a name="228"><span class="lineNum"> 228 </span> : : </a>
+<a name="229"><span class="lineNum"> 229 </span> : : #else /* ... HAVE_LITTLE_ENDIAN */</a>
+<a name="230"><span class="lineNum"> 230 </span> : : #define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)BSWAP_64(native))</a>
+<a name="231"><span class="lineNum"> 231 </span> : : #define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)BSWAP_32(native))</a>
+<a name="232"><span class="lineNum"> 232 </span> : : #define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)BSWAP_16(native))</a>
+<a name="233"><span class="lineNum"> 233 </span> : : #define BE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val)</a>
+<a name="234"><span class="lineNum"> 234 </span> : : #define BE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val)</a>
+<a name="235"><span class="lineNum"> 235 </span> : : #define BE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val)</a>
+<a name="236"><span class="lineNum"> 236 </span> : : #endif /* HAVE_LITTE_ENDIAN */</a>
+<a name="237"><span class="lineNum"> 237 </span> : : </a>
+<a name="238"><span class="lineNum"> 238 </span> : : </a>
+<a name="239"><span class="lineNum"> 239 </span> : : /**</a>
+<a name="240"><span class="lineNum"> 240 </span> : : * cpu_to_le64 - convert a uint64_t value to little-endian</a>
+<a name="241"><span class="lineNum"> 241 </span> : : * @native: value to convert</a>
+<a name="242"><span class="lineNum"> 242 </span> : : */</a>
+<a name="243"><span class="lineNum"> 243 </span> : : static inline leint64_t cpu_to_le64(uint64_t native)</a>
+<a name="244"><span class="lineNum"> 244 </span> : : {</a>
+<a name="245"><span class="lineNum"> 245 </span> : : return CPU_TO_LE64(native);</a>
+<a name="246"><span class="lineNum"> 246 </span> : : }</a>
+<a name="247"><span class="lineNum"> 247 </span> : : </a>
+<a name="248"><span class="lineNum"> 248 </span> : : /**</a>
+<a name="249"><span class="lineNum"> 249 </span> : : * cpu_to_le32 - convert a uint32_t value to little-endian</a>
+<a name="250"><span class="lineNum"> 250 </span> : : * @native: value to convert</a>
+<a name="251"><span class="lineNum"> 251 </span> : : */</a>
+<a name="252"><span class="lineNum"> 252 </span> : : static inline leint32_t cpu_to_le32(uint32_t native)</a>
+<a name="253"><span class="lineNum"> 253 </span> : : {</a>
+<a name="254"><span class="lineNum"> 254 </span> : : return CPU_TO_LE32(native);</a>
+<a name="255"><span class="lineNum"> 255 </span> : : }</a>
+<a name="256"><span class="lineNum"> 256 </span> : : </a>
+<a name="257"><span class="lineNum"> 257 </span> : : /**</a>
+<a name="258"><span class="lineNum"> 258 </span> : : * cpu_to_le16 - convert a uint16_t value to little-endian</a>
+<a name="259"><span class="lineNum"> 259 </span> : : * @native: value to convert</a>
+<a name="260"><span class="lineNum"> 260 </span> : : */</a>
+<a name="261"><span class="lineNum"> 261 </span> : : static inline leint16_t cpu_to_le16(uint16_t native)</a>
+<a name="262"><span class="lineNum"> 262 </span> : : {</a>
+<a name="263"><span class="lineNum"> 263 </span> : : return CPU_TO_LE16(native);</a>
+<a name="264"><span class="lineNum"> 264 </span> : : }</a>
+<a name="265"><span class="lineNum"> 265 </span> : : </a>
+<a name="266"><span class="lineNum"> 266 </span> : : /**</a>
+<a name="267"><span class="lineNum"> 267 </span> : : * le64_to_cpu - convert a little-endian uint64_t value</a>
+<a name="268"><span class="lineNum"> 268 </span> : : * @le_val: little-endian value to convert</a>
+<a name="269"><span class="lineNum"> 269 </span> : : */</a>
+<a name="270"><span class="lineNum"> 270 </span> : : static inline uint64_t le64_to_cpu(leint64_t le_val)</a>
+<a name="271"><span class="lineNum"> 271 </span> : : {</a>
+<a name="272"><span class="lineNum"> 272 </span> : : return LE64_TO_CPU(le_val);</a>
+<a name="273"><span class="lineNum"> 273 </span> : : }</a>
+<a name="274"><span class="lineNum"> 274 </span> : : </a>
+<a name="275"><span class="lineNum"> 275 </span> : : /**</a>
+<a name="276"><span class="lineNum"> 276 </span> : : * le32_to_cpu - convert a little-endian uint32_t value</a>
+<a name="277"><span class="lineNum"> 277 </span> : : * @le_val: little-endian value to convert</a>
+<a name="278"><span class="lineNum"> 278 </span> : : */</a>
+<a name="279"><span class="lineNum"> 279 </span> : : static inline uint32_t le32_to_cpu(leint32_t le_val)</a>
+<a name="280"><span class="lineNum"> 280 </span> : : {</a>
+<a name="281"><span class="lineNum"> 281 </span> : : return LE32_TO_CPU(le_val);</a>
+<a name="282"><span class="lineNum"> 282 </span> : : }</a>
+<a name="283"><span class="lineNum"> 283 </span> : : </a>
+<a name="284"><span class="lineNum"> 284 </span> : : /**</a>
+<a name="285"><span class="lineNum"> 285 </span> : : * le16_to_cpu - convert a little-endian uint16_t value</a>
+<a name="286"><span class="lineNum"> 286 </span> : : * @le_val: little-endian value to convert</a>
+<a name="287"><span class="lineNum"> 287 </span> : : */</a>
+<a name="288"><span class="lineNum"> 288 </span> : : static inline uint16_t le16_to_cpu(leint16_t le_val)</a>
+<a name="289"><span class="lineNum"> 289 </span> : : {</a>
+<a name="290"><span class="lineNum"> 290 </span> : : return LE16_TO_CPU(le_val);</a>
+<a name="291"><span class="lineNum"> 291 </span> : : }</a>
+<a name="292"><span class="lineNum"> 292 </span> : : </a>
+<a name="293"><span class="lineNum"> 293 </span> : : /**</a>
+<a name="294"><span class="lineNum"> 294 </span> : : * cpu_to_be64 - convert a uint64_t value to big endian.</a>
+<a name="295"><span class="lineNum"> 295 </span> : : * @native: value to convert</a>
+<a name="296"><span class="lineNum"> 296 </span> : : */</a>
+<a name="297"><span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : static inline beint64_t cpu_to_be64(uint64_t native)</span></a>
+<a name="298"><span class="lineNum"> 298 </span> : : {</a>
+<a name="299"><span class="lineNum"> 299 </span> :<span class="lineNoCov"> 0 : return CPU_TO_BE64(native);</span></a>
+<a name="300"><span class="lineNum"> 300 </span> : : }</a>
+<a name="301"><span class="lineNum"> 301 </span> : : </a>
+<a name="302"><span class="lineNum"> 302 </span> : : /**</a>
+<a name="303"><span class="lineNum"> 303 </span> : : * cpu_to_be32 - convert a uint32_t value to big endian.</a>
+<a name="304"><span class="lineNum"> 304 </span> : : * @native: value to convert</a>
+<a name="305"><span class="lineNum"> 305 </span> : : */</a>
+<a name="306"><span class="lineNum"> 306 </span> :<span class="lineCov"> 1 : static inline beint32_t cpu_to_be32(uint32_t native)</span></a>
+<a name="307"><span class="lineNum"> 307 </span> : : {</a>
+<a name="308"><span class="lineNum"> 308 </span> :<span class="lineCov"> 1 : return CPU_TO_BE32(native);</span></a>
+<a name="309"><span class="lineNum"> 309 </span> : : }</a>
+<a name="310"><span class="lineNum"> 310 </span> : : </a>
+<a name="311"><span class="lineNum"> 311 </span> : : /**</a>
+<a name="312"><span class="lineNum"> 312 </span> : : * cpu_to_be16 - convert a uint16_t value to big endian.</a>
+<a name="313"><span class="lineNum"> 313 </span> : : * @native: value to convert</a>
+<a name="314"><span class="lineNum"> 314 </span> : : */</a>
+<a name="315"><span class="lineNum"> 315 </span> :<span class="lineCov"> 1 : static inline beint16_t cpu_to_be16(uint16_t native)</span></a>
+<a name="316"><span class="lineNum"> 316 </span> : : {</a>
+<a name="317"><span class="lineNum"> 317 </span> :<span class="lineCov"> 1 : return CPU_TO_BE16(native);</span></a>
+<a name="318"><span class="lineNum"> 318 </span> : : }</a>
+<a name="319"><span class="lineNum"> 319 </span> : : </a>
+<a name="320"><span class="lineNum"> 320 </span> : : /**</a>
+<a name="321"><span class="lineNum"> 321 </span> : : * be64_to_cpu - convert a big-endian uint64_t value</a>
+<a name="322"><span class="lineNum"> 322 </span> : : * @be_val: big-endian value to convert</a>
+<a name="323"><span class="lineNum"> 323 </span> : : */</a>
+<a name="324"><span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : static inline uint64_t be64_to_cpu(beint64_t be_val)</span></a>
+<a name="325"><span class="lineNum"> 325 </span> : : {</a>
+<a name="326"><span class="lineNum"> 326 </span> :<span class="lineNoCov"> 0 : return BE64_TO_CPU(be_val);</span></a>
+<a name="327"><span class="lineNum"> 327 </span> : : }</a>
+<a name="328"><span class="lineNum"> 328 </span> : : </a>
+<a name="329"><span class="lineNum"> 329 </span> : : /**</a>
+<a name="330"><span class="lineNum"> 330 </span> : : * be32_to_cpu - convert a big-endian uint32_t value</a>
+<a name="331"><span class="lineNum"> 331 </span> : : * @be_val: big-endian value to convert</a>
+<a name="332"><span class="lineNum"> 332 </span> : : */</a>
+<a name="333"><span class="lineNum"> 333 </span> :<span class="lineCov"> 45 : static inline uint32_t be32_to_cpu(beint32_t be_val)</span></a>
+<a name="334"><span class="lineNum"> 334 </span> : : {</a>
+<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 18 : return BE32_TO_CPU(be_val);</span></a>
+<a name="336"><span class="lineNum"> 336 </span> : : }</a>
+<a name="337"><span class="lineNum"> 337 </span> : : </a>
+<a name="338"><span class="lineNum"> 338 </span> : : /**</a>
+<a name="339"><span class="lineNum"> 339 </span> : : * be16_to_cpu - convert a big-endian uint16_t value</a>
+<a name="340"><span class="lineNum"> 340 </span> : : * @be_val: big-endian value to convert</a>
+<a name="341"><span class="lineNum"> 341 </span> : : */</a>
+<a name="342"><span class="lineNum"> 342 </span> : : static inline uint16_t be16_to_cpu(beint16_t be_val)</a>
+<a name="343"><span class="lineNum"> 343 </span> : : {</a>
+<a name="344"><span class="lineNum"> 344 </span> : : return BE16_TO_CPU(be_val);</a>
+<a name="345"><span class="lineNum"> 345 </span> : : }</a>
+<a name="346"><span class="lineNum"> 346 </span> : : </a>
+<a name="347"><span class="lineNum"> 347 </span> : : /* Whichever they include first, they get these definitions. */</a>
+<a name="348"><span class="lineNum"> 348 </span> : : #ifdef CCAN_SHORT_TYPES_H</a>
+<a name="349"><span class="lineNum"> 349 </span> : : /**</a>
+<a name="350"><span class="lineNum"> 350 </span> : : * be64/be32/be16 - 64/32/16 bit big-endian representation.</a>
+<a name="351"><span class="lineNum"> 351 </span> : : */</a>
+<a name="352"><span class="lineNum"> 352 </span> : : typedef beint64_t be64;</a>
+<a name="353"><span class="lineNum"> 353 </span> : : typedef beint32_t be32;</a>
+<a name="354"><span class="lineNum"> 354 </span> : : typedef beint16_t be16;</a>
+<a name="355"><span class="lineNum"> 355 </span> : : </a>
+<a name="356"><span class="lineNum"> 356 </span> : : /**</a>
+<a name="357"><span class="lineNum"> 357 </span> : : * le64/le32/le16 - 64/32/16 bit little-endian representation.</a>
+<a name="358"><span class="lineNum"> 358 </span> : : */</a>
+<a name="359"><span class="lineNum"> 359 </span> : : typedef leint64_t le64;</a>
+<a name="360"><span class="lineNum"> 360 </span> : : typedef leint32_t le32;</a>
+<a name="361"><span class="lineNum"> 361 </span> : : typedef leint16_t le16;</a>
+<a name="362"><span class="lineNum"> 362 </span> : : #endif</a>
+<a name="363"><span class="lineNum"> 363 </span> : : #endif /* CCAN_ENDIAN_H */</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/external/pflash/ccan/endian/index-sort-b.html b/coverage-report/external/pflash/ccan/endian/index-sort-b.html
index 0b9b0a3..47e80ae 100644
--- a/coverage-report/external/pflash/ccan/endian/index-sort-b.html
+++ b/coverage-report/external/pflash/ccan/endian/index-sort-b.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">60.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="endian.h.gcov.html">endian.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=67 height=10 alt="66.7%"><img src="../../../../snow.png" width=33 height=10 alt="66.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=60 height=10 alt="60.0%"><img src="../../../../snow.png" width=40 height=10 alt="60.0%"></td></tr></table>
</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">8 / 12</td>
+ <td class="coverPerLo">60.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 10</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumLo">0 / 2</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/external/pflash/ccan/endian/index-sort-f.html b/coverage-report/external/pflash/ccan/endian/index-sort-f.html
index 22ba606..72842d3 100644
--- a/coverage-report/external/pflash/ccan/endian/index-sort-f.html
+++ b/coverage-report/external/pflash/ccan/endian/index-sort-f.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">60.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="endian.h.gcov.html">endian.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=67 height=10 alt="66.7%"><img src="../../../../snow.png" width=33 height=10 alt="66.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=60 height=10 alt="60.0%"><img src="../../../../snow.png" width=40 height=10 alt="60.0%"></td></tr></table>
</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">8 / 12</td>
+ <td class="coverPerLo">60.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 10</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumLo">0 / 2</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/external/pflash/ccan/endian/index-sort-l.html b/coverage-report/external/pflash/ccan/endian/index-sort-l.html
index ab6c249..94fe1ab 100644
--- a/coverage-report/external/pflash/ccan/endian/index-sort-l.html
+++ b/coverage-report/external/pflash/ccan/endian/index-sort-l.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">60.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="endian.h.gcov.html">endian.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=67 height=10 alt="66.7%"><img src="../../../../snow.png" width=33 height=10 alt="66.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=60 height=10 alt="60.0%"><img src="../../../../snow.png" width=40 height=10 alt="60.0%"></td></tr></table>
</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">8 / 12</td>
+ <td class="coverPerLo">60.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 10</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumLo">0 / 2</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/external/pflash/ccan/endian/index.html b/coverage-report/external/pflash/ccan/endian/index.html
index e193097..00ab51e 100644
--- a/coverage-report/external/pflash/ccan/endian/index.html
+++ b/coverage-report/external/pflash/ccan/endian/index.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntry">12</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntryLo">60.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="endian.h.gcov.html">endian.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=67 height=10 alt="66.7%"><img src="../../../../snow.png" width=33 height=10 alt="66.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=60 height=10 alt="60.0%"><img src="../../../../snow.png" width=40 height=10 alt="60.0%"></td></tr></table>
</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">8 / 12</td>
+ <td class="coverPerLo">60.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 10</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumLo">0 / 2</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/external/pflash/ccan/list/index-sort-b.html b/coverage-report/external/pflash/ccan/list/index-sort-b.html
index fc2cca1..2dcc7b9 100644
--- a/coverage-report/external/pflash/ccan/list/index-sort-b.html
+++ b/coverage-report/external/pflash/ccan/list/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/pflash/ccan/list/index-sort-f.html b/coverage-report/external/pflash/ccan/list/index-sort-f.html
index f92111a..5fdd1c5 100644
--- a/coverage-report/external/pflash/ccan/list/index-sort-f.html
+++ b/coverage-report/external/pflash/ccan/list/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/pflash/ccan/list/index-sort-l.html b/coverage-report/external/pflash/ccan/list/index-sort-l.html
index 416eeda..406ee19 100644
--- a/coverage-report/external/pflash/ccan/list/index-sort-l.html
+++ b/coverage-report/external/pflash/ccan/list/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/pflash/ccan/list/index.html b/coverage-report/external/pflash/ccan/list/index.html
index 034bfd0..2e17631 100644
--- a/coverage-report/external/pflash/ccan/list/index.html
+++ b/coverage-report/external/pflash/ccan/list/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/pflash/ccan/list/list.c.func-sort-c.html b/coverage-report/external/pflash/ccan/list/list.c.func-sort-c.html
index b312517..0e0f0fe 100644
--- a/coverage-report/external/pflash/ccan/list/list.c.func-sort-c.html
+++ b/coverage-report/external/pflash/ccan/list/list.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/pflash/ccan/list/list.c.func.html b/coverage-report/external/pflash/ccan/list/list.c.func.html
index c49f01f..b8fdc81 100644
--- a/coverage-report/external/pflash/ccan/list/list.c.func.html
+++ b/coverage-report/external/pflash/ccan/list/list.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/pflash/ccan/list/list.c.gcov.html b/coverage-report/external/pflash/ccan/list/list.c.gcov.html
index 1d8bebf..3b27951 100644
--- a/coverage-report/external/pflash/ccan/list/list.c.gcov.html
+++ b/coverage-report/external/pflash/ccan/list/list.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/pflash/common/arch_flash_common.c.func-sort-c.html b/coverage-report/external/pflash/common/arch_flash_common.c.func-sort-c.html
index 8c8c7b0..b058890 100644
--- a/coverage-report/external/pflash/common/arch_flash_common.c.func-sort-c.html
+++ b/coverage-report/external/pflash/common/arch_flash_common.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/pflash/common/arch_flash_common.c.func.html b/coverage-report/external/pflash/common/arch_flash_common.c.func.html
index aa4ffb0..5b9c04e 100644
--- a/coverage-report/external/pflash/common/arch_flash_common.c.func.html
+++ b/coverage-report/external/pflash/common/arch_flash_common.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/pflash/common/arch_flash_common.c.gcov.html b/coverage-report/external/pflash/common/arch_flash_common.c.gcov.html
index 515d11b..a09dcd5 100644
--- a/coverage-report/external/pflash/common/arch_flash_common.c.gcov.html
+++ b/coverage-report/external/pflash/common/arch_flash_common.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/pflash/common/arch_flash_unknown.c.func-sort-c.html b/coverage-report/external/pflash/common/arch_flash_unknown.c.func-sort-c.html
index 86605f7..e788360 100644
--- a/coverage-report/external/pflash/common/arch_flash_unknown.c.func-sort-c.html
+++ b/coverage-report/external/pflash/common/arch_flash_unknown.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/pflash/common/arch_flash_unknown.c.func.html b/coverage-report/external/pflash/common/arch_flash_unknown.c.func.html
index 9f7fe9c..7dddfa0 100644
--- a/coverage-report/external/pflash/common/arch_flash_unknown.c.func.html
+++ b/coverage-report/external/pflash/common/arch_flash_unknown.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/pflash/common/arch_flash_unknown.c.gcov.html b/coverage-report/external/pflash/common/arch_flash_unknown.c.gcov.html
index f6f0571..1f5ea12 100644
--- a/coverage-report/external/pflash/common/arch_flash_unknown.c.gcov.html
+++ b/coverage-report/external/pflash/common/arch_flash_unknown.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/pflash/common/index-sort-b.html b/coverage-report/external/pflash/common/index-sort-b.html
index b53255d..7f6f7ad 100644
--- a/coverage-report/external/pflash/common/index-sort-b.html
+++ b/coverage-report/external/pflash/common/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/pflash/common/index-sort-f.html b/coverage-report/external/pflash/common/index-sort-f.html
index ff44148..e490b2d 100644
--- a/coverage-report/external/pflash/common/index-sort-f.html
+++ b/coverage-report/external/pflash/common/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/pflash/common/index-sort-l.html b/coverage-report/external/pflash/common/index-sort-l.html
index d6c29d1..4057a50 100644
--- a/coverage-report/external/pflash/common/index-sort-l.html
+++ b/coverage-report/external/pflash/common/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/pflash/common/index.html b/coverage-report/external/pflash/common/index.html
index 64bab8a..d26d9d0 100644
--- a/coverage-report/external/pflash/common/index.html
+++ b/coverage-report/external/pflash/common/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/pflash/index-sort-b.html b/coverage-report/external/pflash/index-sort-b.html
index 2612593..8868aba 100644
--- a/coverage-report/external/pflash/index-sort-b.html
+++ b/coverage-report/external/pflash/index-sort-b.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">485</td>
- <td class="headerCovTableEntry">807</td>
- <td class="headerCovTableEntryLo">60.1 %</td>
+ <td class="headerCovTableEntry">486</td>
+ <td class="headerCovTableEntry">806</td>
+ <td class="headerCovTableEntryLo">60.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">15</td>
@@ -82,26 +82,26 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="pflash.c.gcov.html">pflash.c</a></td>
+ <td class="coverFile"><a href="progress.c.gcov.html">progress.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=59 height=10 alt="59.1%"><img src="../../snow.png" width=41 height=10 alt="59.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../amber.png" width=78 height=10 alt="78.3%"><img src="../../snow.png" width=22 height=10 alt="78.3%"></td></tr></table>
</td>
- <td class="coverPerLo">59.1&nbsp;%</td>
- <td class="coverNumLo">450 / 761</td>
- <td class="coverPerMed">75.0&nbsp;%</td>
- <td class="coverNumMed">12 / 16</td>
+ <td class="coverPerMed">78.3&nbsp;%</td>
+ <td class="coverNumMed">36 / 46</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="progress.c.gcov.html">progress.c</a></td>
+ <td class="coverFile"><a href="pflash.c.gcov.html">pflash.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../amber.png" width=76 height=10 alt="76.1%"><img src="../../snow.png" width=24 height=10 alt="76.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=59 height=10 alt="59.2%"><img src="../../snow.png" width=41 height=10 alt="59.2%"></td></tr></table>
</td>
- <td class="coverPerMed">76.1&nbsp;%</td>
- <td class="coverNumMed">35 / 46</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
+ <td class="coverPerLo">59.2&nbsp;%</td>
+ <td class="coverNumLo">450 / 760</td>
+ <td class="coverPerMed">75.0&nbsp;%</td>
+ <td class="coverNumMed">12 / 16</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/pflash/index-sort-f.html b/coverage-report/external/pflash/index-sort-f.html
index 2055674..9dc58f3 100644
--- a/coverage-report/external/pflash/index-sort-f.html
+++ b/coverage-report/external/pflash/index-sort-f.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">485</td>
- <td class="headerCovTableEntry">807</td>
- <td class="headerCovTableEntryLo">60.1 %</td>
+ <td class="headerCovTableEntry">486</td>
+ <td class="headerCovTableEntry">806</td>
+ <td class="headerCovTableEntryLo">60.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">15</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="pflash.c.gcov.html">pflash.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=59 height=10 alt="59.1%"><img src="../../snow.png" width=41 height=10 alt="59.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=59 height=10 alt="59.2%"><img src="../../snow.png" width=41 height=10 alt="59.2%"></td></tr></table>
</td>
- <td class="coverPerLo">59.1&nbsp;%</td>
- <td class="coverNumLo">450 / 761</td>
+ <td class="coverPerLo">59.2&nbsp;%</td>
+ <td class="coverNumLo">450 / 760</td>
<td class="coverPerMed">75.0&nbsp;%</td>
<td class="coverNumMed">12 / 16</td>
<td class="coverPerHi">-</td>
@@ -96,10 +96,10 @@
<tr>
<td class="coverFile"><a href="progress.c.gcov.html">progress.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../amber.png" width=76 height=10 alt="76.1%"><img src="../../snow.png" width=24 height=10 alt="76.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../amber.png" width=78 height=10 alt="78.3%"><img src="../../snow.png" width=22 height=10 alt="78.3%"></td></tr></table>
</td>
- <td class="coverPerMed">76.1&nbsp;%</td>
- <td class="coverNumMed">35 / 46</td>
+ <td class="coverPerMed">78.3&nbsp;%</td>
+ <td class="coverNumMed">36 / 46</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/external/pflash/index-sort-l.html b/coverage-report/external/pflash/index-sort-l.html
index a34ca7d..25ffd92 100644
--- a/coverage-report/external/pflash/index-sort-l.html
+++ b/coverage-report/external/pflash/index-sort-l.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">485</td>
- <td class="headerCovTableEntry">807</td>
- <td class="headerCovTableEntryLo">60.1 %</td>
+ <td class="headerCovTableEntry">486</td>
+ <td class="headerCovTableEntry">806</td>
+ <td class="headerCovTableEntryLo">60.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">15</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="pflash.c.gcov.html">pflash.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=59 height=10 alt="59.1%"><img src="../../snow.png" width=41 height=10 alt="59.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=59 height=10 alt="59.2%"><img src="../../snow.png" width=41 height=10 alt="59.2%"></td></tr></table>
</td>
- <td class="coverPerLo">59.1&nbsp;%</td>
- <td class="coverNumLo">450 / 761</td>
+ <td class="coverPerLo">59.2&nbsp;%</td>
+ <td class="coverNumLo">450 / 760</td>
<td class="coverPerMed">75.0&nbsp;%</td>
<td class="coverNumMed">12 / 16</td>
<td class="coverPerHi">-</td>
@@ -96,10 +96,10 @@
<tr>
<td class="coverFile"><a href="progress.c.gcov.html">progress.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../amber.png" width=76 height=10 alt="76.1%"><img src="../../snow.png" width=24 height=10 alt="76.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../amber.png" width=78 height=10 alt="78.3%"><img src="../../snow.png" width=22 height=10 alt="78.3%"></td></tr></table>
</td>
- <td class="coverPerMed">76.1&nbsp;%</td>
- <td class="coverNumMed">35 / 46</td>
+ <td class="coverPerMed">78.3&nbsp;%</td>
+ <td class="coverNumMed">36 / 46</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/external/pflash/index.html b/coverage-report/external/pflash/index.html
index 5552b43..f7a0a65 100644
--- a/coverage-report/external/pflash/index.html
+++ b/coverage-report/external/pflash/index.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">485</td>
- <td class="headerCovTableEntry">807</td>
- <td class="headerCovTableEntryLo">60.1 %</td>
+ <td class="headerCovTableEntry">486</td>
+ <td class="headerCovTableEntry">806</td>
+ <td class="headerCovTableEntryLo">60.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">15</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="pflash.c.gcov.html">pflash.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=59 height=10 alt="59.1%"><img src="../../snow.png" width=41 height=10 alt="59.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=59 height=10 alt="59.2%"><img src="../../snow.png" width=41 height=10 alt="59.2%"></td></tr></table>
</td>
- <td class="coverPerLo">59.1&nbsp;%</td>
- <td class="coverNumLo">450 / 761</td>
+ <td class="coverPerLo">59.2&nbsp;%</td>
+ <td class="coverNumLo">450 / 760</td>
<td class="coverPerMed">75.0&nbsp;%</td>
<td class="coverNumMed">12 / 16</td>
<td class="coverPerHi">-</td>
@@ -96,10 +96,10 @@
<tr>
<td class="coverFile"><a href="progress.c.gcov.html">progress.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../amber.png" width=76 height=10 alt="76.1%"><img src="../../snow.png" width=24 height=10 alt="76.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../amber.png" width=78 height=10 alt="78.3%"><img src="../../snow.png" width=22 height=10 alt="78.3%"></td></tr></table>
</td>
- <td class="coverPerMed">76.1&nbsp;%</td>
- <td class="coverNumMed">35 / 46</td>
+ <td class="coverPerMed">78.3&nbsp;%</td>
+ <td class="coverNumMed">36 / 46</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/external/pflash/libflash/blocklevel.c.func-sort-c.html b/coverage-report/external/pflash/libflash/blocklevel.c.func-sort-c.html
index 2c0bf20..6a0c42f 100644
--- a/coverage-report/external/pflash/libflash/blocklevel.c.func-sort-c.html
+++ b/coverage-report/external/pflash/libflash/blocklevel.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">93</td>
- <td class="headerCovTableEntry">382</td>
- <td class="headerCovTableEntryLo">24.3 %</td>
+ <td class="headerCovTableEntry">84</td>
+ <td class="headerCovTableEntry">367</td>
+ <td class="headerCovTableEntryLo">22.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">9</td>
<td class="headerCovTableEntry">11</td>
- <td class="headerCovTableEntry">14</td>
- <td class="headerCovTableEntryMed">78.6 %</td>
+ <td class="headerCovTableEntryMed">81.8 %</td>
</tr>
<tr>
<td></td>
@@ -73,10 +73,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#355">blocklevel_flashcmp</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#643">insert_bl_prot_range</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -105,10 +101,6 @@
<td class="coverFnHi">20</td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#23">ecc_protected</a></td>
- <td class="coverFnHi">21</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#374">blocklevel_smart_erase</a></td>
<td class="coverFnHi">768</td>
</tr>
@@ -117,10 +109,6 @@
<td class="coverFnHi">3328</td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#61">reacquire</a></td>
- <td class="coverFnHi">3369</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#68">release</a></td>
<td class="coverFnHi">3369</td>
</tr>
diff --git a/coverage-report/external/pflash/libflash/blocklevel.c.func.html b/coverage-report/external/pflash/libflash/blocklevel.c.func.html
index 542fc1e..00c5502 100644
--- a/coverage-report/external/pflash/libflash/blocklevel.c.func.html
+++ b/coverage-report/external/pflash/libflash/blocklevel.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">93</td>
- <td class="headerCovTableEntry">382</td>
- <td class="headerCovTableEntryLo">24.3 %</td>
+ <td class="headerCovTableEntry">84</td>
+ <td class="headerCovTableEntry">367</td>
+ <td class="headerCovTableEntryLo">22.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">9</td>
<td class="headerCovTableEntry">11</td>
- <td class="headerCovTableEntry">14</td>
- <td class="headerCovTableEntryMed">78.6 %</td>
+ <td class="headerCovTableEntryMed">81.8 %</td>
</tr>
<tr>
<td></td>
@@ -77,10 +77,6 @@
<td class="coverFnHi">3328</td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#355">blocklevel_flashcmp</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#319">blocklevel_get_info</a></td>
<td class="coverFnHi">20</td>
</tr>
@@ -109,18 +105,10 @@
<td class="coverFnHi">3</td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#23">ecc_protected</a></td>
- <td class="coverFnHi">21</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#643">insert_bl_prot_range</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#61">reacquire</a></td>
- <td class="coverFnHi">3369</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#68">release</a></td>
<td class="coverFnHi">3369</td>
</tr>
diff --git a/coverage-report/external/pflash/libflash/blocklevel.c.gcov.html b/coverage-report/external/pflash/libflash/blocklevel.c.gcov.html
index f903dfb..7568a8f 100644
--- a/coverage-report/external/pflash/libflash/blocklevel.c.gcov.html
+++ b/coverage-report/external/pflash/libflash/blocklevel.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">93</td>
- <td class="headerCovTableEntry">382</td>
- <td class="headerCovTableEntryLo">24.3 %</td>
+ <td class="headerCovTableEntry">84</td>
+ <td class="headerCovTableEntry">367</td>
+ <td class="headerCovTableEntryLo">22.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">9</td>
<td class="headerCovTableEntry">11</td>
- <td class="headerCovTableEntry">14</td>
- <td class="headerCovTableEntryMed">78.6 %</td>
+ <td class="headerCovTableEntryMed">81.8 %</td>
</tr>
<tr>
<td></td>
@@ -93,21 +93,21 @@
<a name="22"><span class="lineNum"> 22 </span> : : * 0 - The region is not ECC protected</a>
<a name="23"><span class="lineNum"> 23 </span> : : * -1 - Partially protected</a>
<a name="24"><span class="lineNum"> 24 </span> : : */</a>
-<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 21 : static int ecc_protected(struct blocklevel_device *bl, uint64_t pos, uint64_t len, uint64_t *start)</span></a>
+<a name="25"><span class="lineNum"> 25 </span> : : static int ecc_protected(struct blocklevel_device *bl, uint64_t pos, uint64_t len, uint64_t *start)</a>
<a name="26"><span class="lineNum"> 26 </span> : : {</a>
-<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 21 : int i;</span></a>
+<a name="27"><span class="lineNum"> 27 </span> : : int i;</a>
<a name="28"><span class="lineNum"> 28 </span> : : </a>
<a name="29"><span class="lineNum"> 29 </span> : : /* Length of 0 is nonsensical so add 1 */</a>
-<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 21 : if (len == 0)</span></a>
+<a name="30"><span class="lineNum"> 30 </span> : : if (len == 0)</a>
<a name="31"><span class="lineNum"> 31 </span> : : len = 1;</a>
<a name="32"><span class="lineNum"> 32 </span> : : </a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 21 : for (i = 0; i &lt; bl-&gt;ecc_prot.n_prot; i++) {</span></a>
+<a name="33"><span class="lineNum"> 33 </span> : : for (i = 0; i &lt; bl-&gt;ecc_prot.n_prot; i++) {</a>
<a name="34"><span class="lineNum"> 34 </span> : : /* Fits entirely within the range */</a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineNoCov"> 0 : if (bl-&gt;ecc_prot.prot[i].start &lt;= pos &amp;&amp;</span></a>
-<a name="36"><span class="lineNum"> 36 </span> :<span class="lineNoCov"> 0 : bl-&gt;ecc_prot.prot[i].start + bl-&gt;ecc_prot.prot[i].len &gt;= pos + len) {</span></a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineNoCov"> 0 : if (start)</span></a>
-<a name="38"><span class="lineNum"> 38 </span> :<span class="lineNoCov"> 0 : *start = bl-&gt;ecc_prot.prot[i].start;</span></a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineNoCov"> 0 : return 1;</span></a>
+<a name="35"><span class="lineNum"> 35 </span> : : if (bl-&gt;ecc_prot.prot[i].start &lt;= pos &amp;&amp;</a>
+<a name="36"><span class="lineNum"> 36 </span> : : bl-&gt;ecc_prot.prot[i].start + bl-&gt;ecc_prot.prot[i].len &gt;= pos + len) {</a>
+<a name="37"><span class="lineNum"> 37 </span> : : if (start)</a>
+<a name="38"><span class="lineNum"> 38 </span> : : *start = bl-&gt;ecc_prot.prot[i].start;</a>
+<a name="39"><span class="lineNum"> 39 </span> : : return 1;</a>
<a name="40"><span class="lineNum"> 40 </span> : : }</a>
<a name="41"><span class="lineNum"> 41 </span> : : </a>
<a name="42"><span class="lineNum"> 42 </span> : : /*</a>
@@ -115,12 +115,12 @@
<a name="44"><span class="lineNum"> 44 </span> : : * contiguous regions are sanely ECC protected so a partial fit</a>
<a name="45"><span class="lineNum"> 45 </span> : : * is no good.</a>
<a name="46"><span class="lineNum"> 46 </span> : : */</a>
-<a name="47"><span class="lineNum"> 47 </span> :<span class="lineNoCov"> 0 : if ((bl-&gt;ecc_prot.prot[i].start &gt;= pos &amp;&amp; bl-&gt;ecc_prot.prot[i].start &lt; pos + len) ||</span></a>
-<a name="48"><span class="lineNum"> 48 </span> :<span class="lineNoCov"> 0 : (bl-&gt;ecc_prot.prot[i].start &lt;= pos &amp;&amp;</span></a>
-<a name="49"><span class="lineNum"> 49 </span> :<span class="lineNoCov"> 0 : bl-&gt;ecc_prot.prot[i].start + bl-&gt;ecc_prot.prot[i].len &gt; pos)) {</span></a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineNoCov"> 0 : if (start)</span></a>
-<a name="51"><span class="lineNum"> 51 </span> :<span class="lineNoCov"> 0 : *start = bl-&gt;ecc_prot.prot[i].start;</span></a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
+<a name="47"><span class="lineNum"> 47 </span> : : if ((bl-&gt;ecc_prot.prot[i].start &gt;= pos &amp;&amp; bl-&gt;ecc_prot.prot[i].start &lt; pos + len) ||</a>
+<a name="48"><span class="lineNum"> 48 </span> : : (bl-&gt;ecc_prot.prot[i].start &lt;= pos &amp;&amp;</a>
+<a name="49"><span class="lineNum"> 49 </span> : : bl-&gt;ecc_prot.prot[i].start + bl-&gt;ecc_prot.prot[i].len &gt; pos)) {</a>
+<a name="50"><span class="lineNum"> 50 </span> : : if (start)</a>
+<a name="51"><span class="lineNum"> 51 </span> : : *start = bl-&gt;ecc_prot.prot[i].start;</a>
+<a name="52"><span class="lineNum"> 52 </span> : : return -1;</a>
<a name="53"><span class="lineNum"> 53 </span> : : }</a>
<a name="54"><span class="lineNum"> 54 </span> : : }</a>
<a name="55"><span class="lineNum"> 55 </span> : : return 0;</a>
@@ -133,7 +133,7 @@
<a name="62"><span class="lineNum"> 62 </span> : : </a>
<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 3369 : static int reacquire(struct blocklevel_device *bl)</span></a>
<a name="64"><span class="lineNum"> 64 </span> : : {</a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 3369 : if (!bl-&gt;keep_alive &amp;&amp; bl-&gt;reacquire)</span></a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : if (!bl-&gt;keep_alive &amp;&amp; bl-&gt;reacquire)</span></a>
<a name="66"><span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : return bl-&gt;reacquire(bl);</span></a>
<a name="67"><span class="lineNum"> 67 </span> : : return 0;</a>
<a name="68"><span class="lineNum"> 68 </span> : : }</a>
@@ -161,7 +161,7 @@
<a name="90"><span class="lineNum"> 90 </span> : : }</a>
<a name="91"><span class="lineNum"> 91 </span> : : </a>
<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 18 : rc = reacquire(bl);</span></a>
-<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 18 : if (rc)</span></a>
+<a name="93"><span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
<a name="94"><span class="lineNum"> 94 </span> : : return rc;</a>
<a name="95"><span class="lineNum"> 95 </span> : : </a>
<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 18 : rc = bl-&gt;read(bl, pos, buf, len);</span></a>
@@ -248,7 +248,7 @@
<a name="177"><span class="lineNum"> 177 </span> : : }</a>
<a name="178"><span class="lineNum"> 178 </span> : : </a>
<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 3 : rc = reacquire(bl);</span></a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 3 : if (rc)</span></a>
+<a name="180"><span class="lineNum"> 180 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
<a name="181"><span class="lineNum"> 181 </span> : : return rc;</a>
<a name="182"><span class="lineNum"> 182 </span> : : </a>
<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 3 : rc = bl-&gt;write(bl, pos, buf, len);</span></a>
@@ -379,7 +379,7 @@
<a name="308"><span class="lineNum"> 308 </span> : : }</a>
<a name="309"><span class="lineNum"> 309 </span> : : </a>
<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 3328 : rc = reacquire(bl);</span></a>
-<a name="311"><span class="lineNum"> 311 </span> :<span class="lineCov"> 3328 : if (rc)</span></a>
+<a name="311"><span class="lineNum"> 311 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
<a name="312"><span class="lineNum"> 312 </span> : : return rc;</a>
<a name="313"><span class="lineNum"> 313 </span> : : </a>
<a name="314"><span class="lineNum"> 314 </span> :<span class="lineCov"> 3328 : rc = bl-&gt;erase(bl, pos, len);</span></a>
@@ -400,7 +400,7 @@
<a name="329"><span class="lineNum"> 329 </span> : : }</a>
<a name="330"><span class="lineNum"> 330 </span> : : </a>
<a name="331"><span class="lineNum"> 331 </span> :<span class="lineCov"> 20 : rc = reacquire(bl);</span></a>
-<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 20 : if (rc)</span></a>
+<a name="332"><span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
<a name="333"><span class="lineNum"> 333 </span> : : return rc;</a>
<a name="334"><span class="lineNum"> 334 </span> : : </a>
<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 20 : rc = bl-&gt;get_info(bl, name, total_size, erase_granule);</span></a>
diff --git a/coverage-report/external/pflash/libflash/ecc.c.func-sort-c.html b/coverage-report/external/pflash/libflash/ecc.c.func-sort-c.html
index 103e783..ddfff34 100644
--- a/coverage-report/external/pflash/libflash/ecc.c.func-sort-c.html
+++ b/coverage-report/external/pflash/libflash/ecc.c.func-sort-c.html
@@ -37,11 +37,11 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
@@ -73,10 +73,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="ecc.c.gcov.html#129">eccverify</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="ecc.c.gcov.html#205">memcpy_from_ecc</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/pflash/libflash/ecc.c.func.html b/coverage-report/external/pflash/libflash/ecc.c.func.html
index 916a60b..621901d 100644
--- a/coverage-report/external/pflash/libflash/ecc.c.func.html
+++ b/coverage-report/external/pflash/libflash/ecc.c.func.html
@@ -37,11 +37,11 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
@@ -73,10 +73,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="ecc.c.gcov.html#129">eccverify</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="ecc.c.gcov.html#205">memcpy_from_ecc</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/pflash/libflash/ecc.c.gcov.html b/coverage-report/external/pflash/libflash/ecc.c.gcov.html
index e456e0b..2c62e68 100644
--- a/coverage-report/external/pflash/libflash/ecc.c.gcov.html
+++ b/coverage-report/external/pflash/libflash/ecc.c.gcov.html
@@ -37,11 +37,11 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">5</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
diff --git a/coverage-report/external/pflash/libflash/ecc.h.func-sort-c.html b/coverage-report/external/pflash/libflash/ecc.h.func-sort-c.html
index bbbd4fe..6db7b59 100644
--- a/coverage-report/external/pflash/libflash/ecc.h.func-sort-c.html
+++ b/coverage-report/external/pflash/libflash/ecc.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/pflash/libflash/ecc.h.func.html b/coverage-report/external/pflash/libflash/ecc.h.func.html
index a88d297..15ac047 100644
--- a/coverage-report/external/pflash/libflash/ecc.h.func.html
+++ b/coverage-report/external/pflash/libflash/ecc.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/pflash/libflash/ecc.h.gcov.html b/coverage-report/external/pflash/libflash/ecc.h.gcov.html
index df2e8d8..30afeb6 100644
--- a/coverage-report/external/pflash/libflash/ecc.h.gcov.html
+++ b/coverage-report/external/pflash/libflash/ecc.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/external/pflash/libflash/file.c.func-sort-c.html b/coverage-report/external/pflash/libflash/file.c.func-sort-c.html
index 7675223..5cd2309 100644
--- a/coverage-report/external/pflash/libflash/file.c.func-sort-c.html
+++ b/coverage-report/external/pflash/libflash/file.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">108</td>
- <td class="headerCovTableEntry">184</td>
- <td class="headerCovTableEntryLo">58.7 %</td>
+ <td class="headerCovTableEntry">94</td>
+ <td class="headerCovTableEntry">163</td>
+ <td class="headerCovTableEntryLo">57.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">9</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntryLo">69.2 %</td>
+ <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryLo">66.7 %</td>
</tr>
<tr>
<td></td>
@@ -101,10 +101,6 @@
<td class="coverFnHi">11</td>
</tr>
<tr>
- <td class="coverFn"><a href="file.c.gcov.html#177">get_info_name</a></td>
- <td class="coverFnHi">11</td>
- </tr>
- <tr>
<td class="coverFn"><a href="file.c.gcov.html#50">file_read</a></td>
<td class="coverFnHi">18</td>
</tr>
diff --git a/coverage-report/external/pflash/libflash/file.c.func.html b/coverage-report/external/pflash/libflash/file.c.func.html
index 22ef5fc..45cc546 100644
--- a/coverage-report/external/pflash/libflash/file.c.func.html
+++ b/coverage-report/external/pflash/libflash/file.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">108</td>
- <td class="headerCovTableEntry">184</td>
- <td class="headerCovTableEntryLo">58.7 %</td>
+ <td class="headerCovTableEntry">94</td>
+ <td class="headerCovTableEntry">163</td>
+ <td class="headerCovTableEntryLo">57.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">9</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntryLo">69.2 %</td>
+ <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryLo">66.7 %</td>
</tr>
<tr>
<td></td>
@@ -109,10 +109,6 @@
<td class="coverFnHi">3331</td>
</tr>
<tr>
- <td class="coverFn"><a href="file.c.gcov.html#177">get_info_name</a></td>
- <td class="coverFnHi">11</td>
- </tr>
- <tr>
<td class="coverFn"><a href="file.c.gcov.html#122">mtd_erase</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/pflash/libflash/file.c.gcov.html b/coverage-report/external/pflash/libflash/file.c.gcov.html
index 7715c67..edf8062 100644
--- a/coverage-report/external/pflash/libflash/file.c.gcov.html
+++ b/coverage-report/external/pflash/libflash/file.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">108</td>
- <td class="headerCovTableEntry">184</td>
- <td class="headerCovTableEntryLo">58.7 %</td>
+ <td class="headerCovTableEntry">94</td>
+ <td class="headerCovTableEntry">163</td>
+ <td class="headerCovTableEntryLo">57.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">9</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntryLo">69.2 %</td>
+ <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryLo">66.7 %</td>
</tr>
<tr>
<td></td>
@@ -247,38 +247,38 @@
<a name="176"><span class="lineNum"> 176 </span> : : return 0;</a>
<a name="177"><span class="lineNum"> 177 </span> : : }</a>
<a name="178"><span class="lineNum"> 178 </span> : : </a>
-<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 11 : static int get_info_name(struct file_data *file_data, char **name)</span></a>
+<a name="179"><span class="lineNum"> 179 </span> : : static int get_info_name(struct file_data *file_data, char **name)</a>
<a name="180"><span class="lineNum"> 180 </span> : : {</a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 11 : char *path, *lpath;</span></a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 11 : int len;</span></a>
-<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 11 : struct stat st;</span></a>
+<a name="181"><span class="lineNum"> 181 </span> : : char *path, *lpath;</a>
+<a name="182"><span class="lineNum"> 182 </span> : : int len;</a>
+<a name="183"><span class="lineNum"> 183 </span> : : struct stat st;</a>
<a name="184"><span class="lineNum"> 184 </span> : : </a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 11 : if (asprintf(&amp;path, &quot;/proc/self/fd/%d&quot;, file_data-&gt;fd) == -1)</span></a>
+<a name="185"><span class="lineNum"> 185 </span> : : if (asprintf(&amp;path, &quot;/proc/self/fd/%d&quot;, file_data-&gt;fd) == -1)</a>
<a name="186"><span class="lineNum"> 186 </span> : : return FLASH_ERR_MALLOC_FAILED;</a>
<a name="187"><span class="lineNum"> 187 </span> : : </a>
-<a name="188"><span class="lineNum"> 188 </span> :<span class="lineCov"> 11 : if (lstat(path, &amp;st)) {</span></a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : free(path);</span></a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : return FLASH_ERR_PARM_ERROR;</span></a>
+<a name="188"><span class="lineNum"> 188 </span> : : if (lstat(path, &amp;st)) {</a>
+<a name="189"><span class="lineNum"> 189 </span> : : free(path);</a>
+<a name="190"><span class="lineNum"> 190 </span> : : return FLASH_ERR_PARM_ERROR;</a>
<a name="191"><span class="lineNum"> 191 </span> : : }</a>
<a name="192"><span class="lineNum"> 192 </span> : : </a>
-<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 11 : lpath = malloc(st.st_size + 1);</span></a>
-<a name="194"><span class="lineNum"> 194 </span> :<span class="lineCov"> 11 : if (!lpath) {</span></a>
-<a name="195"><span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : free(path);</span></a>
-<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : return FLASH_ERR_MALLOC_FAILED;</span></a>
+<a name="193"><span class="lineNum"> 193 </span> : : lpath = malloc(st.st_size + 1);</a>
+<a name="194"><span class="lineNum"> 194 </span> : : if (!lpath) {</a>
+<a name="195"><span class="lineNum"> 195 </span> : : free(path);</a>
+<a name="196"><span class="lineNum"> 196 </span> : : return FLASH_ERR_MALLOC_FAILED;</a>
<a name="197"><span class="lineNum"> 197 </span> : : }</a>
<a name="198"><span class="lineNum"> 198 </span> : : </a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineCov"> 11 : len = readlink(path, lpath, st.st_size +1);</span></a>
-<a name="200"><span class="lineNum"> 200 </span> :<span class="lineCov"> 11 : if (len == -1) {</span></a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : free(path);</span></a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : free(lpath);</span></a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : return FLASH_ERR_PARM_ERROR;</span></a>
+<a name="199"><span class="lineNum"> 199 </span> : : len = readlink(path, lpath, st.st_size +1);</a>
+<a name="200"><span class="lineNum"> 200 </span> : : if (len == -1) {</a>
+<a name="201"><span class="lineNum"> 201 </span> : : free(path);</a>
+<a name="202"><span class="lineNum"> 202 </span> : : free(lpath);</a>
+<a name="203"><span class="lineNum"> 203 </span> : : return FLASH_ERR_PARM_ERROR;</a>
<a name="204"><span class="lineNum"> 204 </span> : : }</a>
-<a name="205"><span class="lineNum"> 205 </span> :<span class="lineCov"> 11 : lpath[len] = '\0';</span></a>
+<a name="205"><span class="lineNum"> 205 </span> : : lpath[len] = '\0';</a>
<a name="206"><span class="lineNum"> 206 </span> : : </a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 11 : *name = lpath;</span></a>
+<a name="207"><span class="lineNum"> 207 </span> : : *name = lpath;</a>
<a name="208"><span class="lineNum"> 208 </span> : : </a>
-<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 11 : free(path);</span></a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 11 : return 0;</span></a>
+<a name="209"><span class="lineNum"> 209 </span> : : free(path);</a>
+<a name="210"><span class="lineNum"> 210 </span> : : return 0;</a>
<a name="211"><span class="lineNum"> 211 </span> : : }</a>
<a name="212"><span class="lineNum"> 212 </span> : : </a>
<a name="213"><span class="lineNum"> 213 </span> : : </a>
diff --git a/coverage-report/external/pflash/libflash/index-sort-b.html b/coverage-report/external/pflash/libflash/index-sort-b.html
index bec0f13..1c62195 100644
--- a/coverage-report/external/pflash/libflash/index-sort-b.html
+++ b/coverage-report/external/pflash/libflash/index-sort-b.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">409</td>
- <td class="headerCovTableEntry">1530</td>
- <td class="headerCovTableEntryLo">26.7 %</td>
+ <td class="headerCovTableEntry">365</td>
+ <td class="headerCovTableEntry">1445</td>
+ <td class="headerCovTableEntryLo">25.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">37</td>
- <td class="headerCovTableEntry">85</td>
- <td class="headerCovTableEntryLo">43.5 %</td>
+ <td class="headerCovTableEntry">31</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryLo">43.1 %</td>
</tr>
<tr>
<td></td>
@@ -82,14 +82,14 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
+ <td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=59 height=10 alt="58.7%"><img src="../../../snow.png" width=41 height=10 alt="58.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=23 height=10 alt="22.9%"><img src="../../../snow.png" width=77 height=10 alt="22.9%"></td></tr></table>
</td>
- <td class="coverPerLo">58.7&nbsp;%</td>
- <td class="coverNumLo">108 / 184</td>
- <td class="coverPerLo">69.2&nbsp;%</td>
- <td class="coverNumLo">9 / 13</td>
+ <td class="coverPerLo">22.9&nbsp;%</td>
+ <td class="coverNumLo">84 / 367</td>
+ <td class="coverPerMed">81.8&nbsp;%</td>
+ <td class="coverNumMed">9 / 11</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -99,57 +99,57 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 419</td>
+ <td class="coverNumLo">0 / 391</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 24</td>
+ <td class="coverNumLo">0 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ecc.c.gcov.html">ecc.c</a></td>
+ <td class="coverFile"><a href="libffs.c.gcov.html">libffs.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=46 height=10 alt="45.6%"><img src="../../../snow.png" width=54 height=10 alt="45.6%"></td></tr></table>
</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 106</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 6</td>
+ <td class="coverPerLo">45.6&nbsp;%</td>
+ <td class="coverNumLo">187 / 410</td>
+ <td class="coverPerLo">58.3&nbsp;%</td>
+ <td class="coverNumLo">14 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libffs.c.gcov.html">libffs.c</a></td>
+ <td class="coverFile"><a href="ecc.h.gcov.html">ecc.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=48 height=10 alt="48.3%"><img src="../../../snow.png" width=52 height=10 alt="48.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
- <td class="coverPerLo">48.3&nbsp;%</td>
- <td class="coverNumLo">208 / 431</td>
- <td class="coverPerLo">60.7&nbsp;%</td>
- <td class="coverNumLo">17 / 28</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 8</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
+ <td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=24 height=10 alt="24.3%"><img src="../../../snow.png" width=76 height=10 alt="24.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=58 height=10 alt="57.7%"><img src="../../../snow.png" width=42 height=10 alt="57.7%"></td></tr></table>
</td>
- <td class="coverPerLo">24.3&nbsp;%</td>
- <td class="coverNumLo">93 / 382</td>
- <td class="coverPerMed">78.6&nbsp;%</td>
- <td class="coverNumMed">11 / 14</td>
+ <td class="coverPerLo">57.7&nbsp;%</td>
+ <td class="coverNumLo">94 / 163</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">8 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ecc.h.gcov.html">ecc.h</a></td>
+ <td class="coverFile"><a href="ecc.c.gcov.html">ecc.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 8</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
+ <td class="coverNumLo">0 / 106</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/pflash/libflash/index-sort-f.html b/coverage-report/external/pflash/libflash/index-sort-f.html
index 10f7495..7294167 100644
--- a/coverage-report/external/pflash/libflash/index-sort-f.html
+++ b/coverage-report/external/pflash/libflash/index-sort-f.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">409</td>
- <td class="headerCovTableEntry">1530</td>
- <td class="headerCovTableEntryLo">26.7 %</td>
+ <td class="headerCovTableEntry">365</td>
+ <td class="headerCovTableEntry">1445</td>
+ <td class="headerCovTableEntryLo">25.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">37</td>
- <td class="headerCovTableEntry">85</td>
- <td class="headerCovTableEntryLo">43.5 %</td>
+ <td class="headerCovTableEntry">31</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryLo">43.1 %</td>
</tr>
<tr>
<td></td>
@@ -89,7 +89,7 @@
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumLo">0 / 106</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 6</td>
+ <td class="coverNumLo">0 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -99,45 +99,45 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 419</td>
+ <td class="coverNumLo">0 / 391</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 24</td>
+ <td class="coverNumLo">0 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libffs.c.gcov.html">libffs.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=48 height=10 alt="48.3%"><img src="../../../snow.png" width=52 height=10 alt="48.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=46 height=10 alt="45.6%"><img src="../../../snow.png" width=54 height=10 alt="45.6%"></td></tr></table>
</td>
- <td class="coverPerLo">48.3&nbsp;%</td>
- <td class="coverNumLo">208 / 431</td>
- <td class="coverPerLo">60.7&nbsp;%</td>
- <td class="coverNumLo">17 / 28</td>
+ <td class="coverPerLo">45.6&nbsp;%</td>
+ <td class="coverNumLo">187 / 410</td>
+ <td class="coverPerLo">58.3&nbsp;%</td>
+ <td class="coverNumLo">14 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=59 height=10 alt="58.7%"><img src="../../../snow.png" width=41 height=10 alt="58.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=58 height=10 alt="57.7%"><img src="../../../snow.png" width=42 height=10 alt="57.7%"></td></tr></table>
</td>
- <td class="coverPerLo">58.7&nbsp;%</td>
- <td class="coverNumLo">108 / 184</td>
- <td class="coverPerLo">69.2&nbsp;%</td>
- <td class="coverNumLo">9 / 13</td>
+ <td class="coverPerLo">57.7&nbsp;%</td>
+ <td class="coverNumLo">94 / 163</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">8 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=24 height=10 alt="24.3%"><img src="../../../snow.png" width=76 height=10 alt="24.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=23 height=10 alt="22.9%"><img src="../../../snow.png" width=77 height=10 alt="22.9%"></td></tr></table>
</td>
- <td class="coverPerLo">24.3&nbsp;%</td>
- <td class="coverNumLo">93 / 382</td>
- <td class="coverPerMed">78.6&nbsp;%</td>
- <td class="coverNumMed">11 / 14</td>
+ <td class="coverPerLo">22.9&nbsp;%</td>
+ <td class="coverNumLo">84 / 367</td>
+ <td class="coverPerMed">81.8&nbsp;%</td>
+ <td class="coverNumMed">9 / 11</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/pflash/libflash/index-sort-l.html b/coverage-report/external/pflash/libflash/index-sort-l.html
index 6758871..6890ca4 100644
--- a/coverage-report/external/pflash/libflash/index-sort-l.html
+++ b/coverage-report/external/pflash/libflash/index-sort-l.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">409</td>
- <td class="headerCovTableEntry">1530</td>
- <td class="headerCovTableEntryLo">26.7 %</td>
+ <td class="headerCovTableEntry">365</td>
+ <td class="headerCovTableEntry">1445</td>
+ <td class="headerCovTableEntryLo">25.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">37</td>
- <td class="headerCovTableEntry">85</td>
- <td class="headerCovTableEntryLo">43.5 %</td>
+ <td class="headerCovTableEntry">31</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryLo">43.1 %</td>
</tr>
<tr>
<td></td>
@@ -101,7 +101,7 @@
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumLo">0 / 106</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 6</td>
+ <td class="coverNumLo">0 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -111,45 +111,45 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 419</td>
+ <td class="coverNumLo">0 / 391</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 24</td>
+ <td class="coverNumLo">0 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=24 height=10 alt="24.3%"><img src="../../../snow.png" width=76 height=10 alt="24.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=23 height=10 alt="22.9%"><img src="../../../snow.png" width=77 height=10 alt="22.9%"></td></tr></table>
</td>
- <td class="coverPerLo">24.3&nbsp;%</td>
- <td class="coverNumLo">93 / 382</td>
- <td class="coverPerMed">78.6&nbsp;%</td>
- <td class="coverNumMed">11 / 14</td>
+ <td class="coverPerLo">22.9&nbsp;%</td>
+ <td class="coverNumLo">84 / 367</td>
+ <td class="coverPerMed">81.8&nbsp;%</td>
+ <td class="coverNumMed">9 / 11</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libffs.c.gcov.html">libffs.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=48 height=10 alt="48.3%"><img src="../../../snow.png" width=52 height=10 alt="48.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=46 height=10 alt="45.6%"><img src="../../../snow.png" width=54 height=10 alt="45.6%"></td></tr></table>
</td>
- <td class="coverPerLo">48.3&nbsp;%</td>
- <td class="coverNumLo">208 / 431</td>
- <td class="coverPerLo">60.7&nbsp;%</td>
- <td class="coverNumLo">17 / 28</td>
+ <td class="coverPerLo">45.6&nbsp;%</td>
+ <td class="coverNumLo">187 / 410</td>
+ <td class="coverPerLo">58.3&nbsp;%</td>
+ <td class="coverNumLo">14 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=59 height=10 alt="58.7%"><img src="../../../snow.png" width=41 height=10 alt="58.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=58 height=10 alt="57.7%"><img src="../../../snow.png" width=42 height=10 alt="57.7%"></td></tr></table>
</td>
- <td class="coverPerLo">58.7&nbsp;%</td>
- <td class="coverNumLo">108 / 184</td>
- <td class="coverPerLo">69.2&nbsp;%</td>
- <td class="coverNumLo">9 / 13</td>
+ <td class="coverPerLo">57.7&nbsp;%</td>
+ <td class="coverNumLo">94 / 163</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">8 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/pflash/libflash/index.html b/coverage-report/external/pflash/libflash/index.html
index 4d737ba..98484ad 100644
--- a/coverage-report/external/pflash/libflash/index.html
+++ b/coverage-report/external/pflash/libflash/index.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">409</td>
- <td class="headerCovTableEntry">1530</td>
- <td class="headerCovTableEntryLo">26.7 %</td>
+ <td class="headerCovTableEntry">365</td>
+ <td class="headerCovTableEntry">1445</td>
+ <td class="headerCovTableEntryLo">25.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">37</td>
- <td class="headerCovTableEntry">85</td>
- <td class="headerCovTableEntryLo">43.5 %</td>
+ <td class="headerCovTableEntry">31</td>
+ <td class="headerCovTableEntry">72</td>
+ <td class="headerCovTableEntryLo">43.1 %</td>
</tr>
<tr>
<td></td>
@@ -84,12 +84,12 @@
<tr>
<td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=24 height=10 alt="24.3%"><img src="../../../snow.png" width=76 height=10 alt="24.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=23 height=10 alt="22.9%"><img src="../../../snow.png" width=77 height=10 alt="22.9%"></td></tr></table>
</td>
- <td class="coverPerLo">24.3&nbsp;%</td>
- <td class="coverNumLo">93 / 382</td>
- <td class="coverPerMed">78.6&nbsp;%</td>
- <td class="coverNumMed">11 / 14</td>
+ <td class="coverPerLo">22.9&nbsp;%</td>
+ <td class="coverNumLo">84 / 367</td>
+ <td class="coverPerMed">81.8&nbsp;%</td>
+ <td class="coverNumMed">9 / 11</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -101,7 +101,7 @@
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumLo">0 / 106</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 6</td>
+ <td class="coverNumLo">0 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -120,24 +120,24 @@
<tr>
<td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=59 height=10 alt="58.7%"><img src="../../../snow.png" width=41 height=10 alt="58.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=58 height=10 alt="57.7%"><img src="../../../snow.png" width=42 height=10 alt="57.7%"></td></tr></table>
</td>
- <td class="coverPerLo">58.7&nbsp;%</td>
- <td class="coverNumLo">108 / 184</td>
- <td class="coverPerLo">69.2&nbsp;%</td>
- <td class="coverNumLo">9 / 13</td>
+ <td class="coverPerLo">57.7&nbsp;%</td>
+ <td class="coverNumLo">94 / 163</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">8 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libffs.c.gcov.html">libffs.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=48 height=10 alt="48.3%"><img src="../../../snow.png" width=52 height=10 alt="48.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=46 height=10 alt="45.6%"><img src="../../../snow.png" width=54 height=10 alt="45.6%"></td></tr></table>
</td>
- <td class="coverPerLo">48.3&nbsp;%</td>
- <td class="coverNumLo">208 / 431</td>
- <td class="coverPerLo">60.7&nbsp;%</td>
- <td class="coverNumLo">17 / 28</td>
+ <td class="coverPerLo">45.6&nbsp;%</td>
+ <td class="coverNumLo">187 / 410</td>
+ <td class="coverPerLo">58.3&nbsp;%</td>
+ <td class="coverNumLo">14 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -147,9 +147,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 419</td>
+ <td class="coverNumLo">0 / 391</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 24</td>
+ <td class="coverNumLo">0 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/external/pflash/libflash/libffs.c.func-sort-c.html b/coverage-report/external/pflash/libflash/libffs.c.func-sort-c.html
index 0013f9e..7ca3117 100644
--- a/coverage-report/external/pflash/libflash/libffs.c.func-sort-c.html
+++ b/coverage-report/external/pflash/libflash/libffs.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">208</td>
- <td class="headerCovTableEntry">431</td>
- <td class="headerCovTableEntryLo">48.3 %</td>
+ <td class="headerCovTableEntry">187</td>
+ <td class="headerCovTableEntry">410</td>
+ <td class="headerCovTableEntryLo">45.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">17</td>
- <td class="headerCovTableEntry">28</td>
- <td class="headerCovTableEntryLo">60.7 %</td>
+ <td class="headerCovTableEntry">14</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntryLo">58.3 %</td>
</tr>
<tr>
<td></td>
@@ -105,10 +105,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#51">ffs_num_entries</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#204">ffs_string_to_entry_user</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -117,10 +113,6 @@
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#81">ffs_entry_user_to_flash</a></td>
- <td class="coverFnHi">1</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#458">ffs_lookup_part</a></td>
<td class="coverFnHi">2</td>
</tr>
@@ -157,6 +149,10 @@
<td class="coverFnHi">10</td>
</tr>
<tr>
+ <td class="coverFn"><a href="libffs.c.gcov.html#274">ffs_entry_put</a></td>
+ <td class="coverFnHi">13</td>
+ </tr>
+ <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#266">ffs_entry_get</a></td>
<td class="coverFnHi">16</td>
</tr>
@@ -168,18 +164,6 @@
<td class="coverFn"><a href="libffs.c.gcov.html#254">has_flag</a></td>
<td class="coverFnHi">36</td>
</tr>
- <tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#139">ffs_entry_to_cpu</a></td>
- <td class="coverFnHi">59</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#92">ffs_entry_user_to_cpu</a></td>
- <td class="coverFnHi">59</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#274">ffs_entry_put</a></td>
- <td class="coverFnHi">72</td>
- </tr>
</table>
<br>
</center>
diff --git a/coverage-report/external/pflash/libflash/libffs.c.func.html b/coverage-report/external/pflash/libflash/libffs.c.func.html
index 19bee5a..fe15339 100644
--- a/coverage-report/external/pflash/libflash/libffs.c.func.html
+++ b/coverage-report/external/pflash/libflash/libffs.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">208</td>
- <td class="headerCovTableEntry">431</td>
- <td class="headerCovTableEntryLo">48.3 %</td>
+ <td class="headerCovTableEntry">187</td>
+ <td class="headerCovTableEntry">410</td>
+ <td class="headerCovTableEntryLo">45.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">17</td>
- <td class="headerCovTableEntry">28</td>
- <td class="headerCovTableEntryLo">60.7 %</td>
+ <td class="headerCovTableEntry">14</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntryLo">58.3 %</td>
</tr>
<tr>
<td></td>
@@ -94,17 +94,13 @@
</tr>
<tr>
<td class="coverFn"><a href="libffs.c.gcov.html#274">ffs_entry_put</a></td>
- <td class="coverFnHi">72</td>
+ <td class="coverFnHi">13</td>
</tr>
<tr>
<td class="coverFn"><a href="libffs.c.gcov.html#750">ffs_entry_set_act_size</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#139">ffs_entry_to_cpu</a></td>
- <td class="coverFnHi">59</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#103">ffs_entry_to_flash</a></td>
<td class="coverFnHi">1</td>
</tr>
@@ -117,14 +113,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#92">ffs_entry_user_to_cpu</a></td>
- <td class="coverFnHi">59</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#81">ffs_entry_user_to_flash</a></td>
- <td class="coverFnHi">1</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#160">ffs_entry_user_to_string</a></td>
<td class="coverFnHi">7</td>
</tr>
@@ -157,10 +145,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#51">ffs_num_entries</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#477">ffs_part_info</a></td>
<td class="coverFnHi">22</td>
</tr>
diff --git a/coverage-report/external/pflash/libflash/libffs.c.gcov.html b/coverage-report/external/pflash/libflash/libffs.c.gcov.html
index 5ef3c03..7879de8 100644
--- a/coverage-report/external/pflash/libflash/libffs.c.gcov.html
+++ b/coverage-report/external/pflash/libflash/libffs.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">208</td>
- <td class="headerCovTableEntry">431</td>
- <td class="headerCovTableEntryLo">48.3 %</td>
+ <td class="headerCovTableEntry">187</td>
+ <td class="headerCovTableEntry">410</td>
+ <td class="headerCovTableEntryLo">45.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">17</td>
- <td class="headerCovTableEntry">28</td>
- <td class="headerCovTableEntryLo">60.7 %</td>
+ <td class="headerCovTableEntry">14</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntryLo">58.3 %</td>
</tr>
<tr>
<td></td>
@@ -96,13 +96,13 @@
<a name="25"><span class="lineNum"> 25 </span> : : struct blocklevel_device *bl;</a>
<a name="26"><span class="lineNum"> 26 </span> : : };</a>
<a name="27"><span class="lineNum"> 27 </span> : : </a>
-<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 59 : static uint32_t ffs_checksum(void* data, size_t size)</span></a>
+<a name="28"><span class="lineNum"> 28 </span> : : static uint32_t ffs_checksum(void* data, size_t size)</a>
<a name="29"><span class="lineNum"> 29 </span> : : {</a>
-<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 59 : uint32_t i, csum = 0;</span></a>
+<a name="30"><span class="lineNum"> 30 </span> : : uint32_t i, csum = 0;</a>
<a name="31"><span class="lineNum"> 31 </span> : : </a>
-<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 1947 : for (i = csum = 0; i &lt; (size/4); i++)</span></a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 2028 : csum ^= ((uint32_t *)data)[i];</span></a>
-<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 69 : return csum;</span></a>
+<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 290 : for (i = csum = 0; i &lt; (size/4); i++)</span></a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 140 : csum ^= ((uint32_t *)data)[i];</span></a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 10 : return csum;</span></a>
<a name="35"><span class="lineNum"> 35 </span> : : }</a>
<a name="36"><span class="lineNum"> 36 </span> : : </a>
<a name="37"><span class="lineNum"> 37 </span> : : /* Helper functions for typesafety and size safety */</a>
@@ -111,7 +111,7 @@
<a name="40"><span class="lineNum"> 40 </span> :<span class="lineNoCov"> 0 : return ffs_checksum(hdr, sizeof(struct __ffs_hdr));</span></a>
<a name="41"><span class="lineNum"> 41 </span> : : }</a>
<a name="42"><span class="lineNum"> 42 </span> : : </a>
-<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 60 : static uint32_t ffs_entry_checksum(struct __ffs_entry *ent)</span></a>
+<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 1 : static uint32_t ffs_entry_checksum(struct __ffs_entry *ent)</span></a>
<a name="44"><span class="lineNum"> 44 </span> : : {</a>
<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 33 : return ffs_checksum(ent, sizeof(struct __ffs_entry));</span></a>
<a name="46"><span class="lineNum"> 46 </span> : : }</a>
@@ -162,15 +162,15 @@
<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 1 : return 0;</span></a>
<a name="92"><span class="lineNum"> 92 </span> : : }</a>
<a name="93"><span class="lineNum"> 93 </span> : : </a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 59 : static int ffs_entry_user_to_cpu(struct ffs_hdr *hdr __unused,</span></a>
+<a name="94"><span class="lineNum"> 94 </span> : : static int ffs_entry_user_to_cpu(struct ffs_hdr *hdr __unused,</a>
<a name="95"><span class="lineNum"> 95 </span> : : struct ffs_entry_user *dst, struct __ffs_entry_user *src)</a>
<a name="96"><span class="lineNum"> 96 </span> : : {</a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 59 : memset(dst, 0, sizeof(struct ffs_entry_user));</span></a>
-<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 59 : dst-&gt;datainteg = be16_to_cpu(src-&gt;datainteg);</span></a>
-<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 59 : dst-&gt;vercheck = src-&gt;vercheck;</span></a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 59 : dst-&gt;miscflags = src-&gt;miscflags;</span></a>
+<a name="97"><span class="lineNum"> 97 </span> : : memset(dst, 0, sizeof(struct ffs_entry_user));</a>
+<a name="98"><span class="lineNum"> 98 </span> : : dst-&gt;datainteg = be16_to_cpu(src-&gt;datainteg);</a>
+<a name="99"><span class="lineNum"> 99 </span> : : dst-&gt;vercheck = src-&gt;vercheck;</a>
+<a name="100"><span class="lineNum"> 100 </span> : : dst-&gt;miscflags = src-&gt;miscflags;</a>
<a name="101"><span class="lineNum"> 101 </span> : : </a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 59 : return 0;</span></a>
+<a name="102"><span class="lineNum"> 102 </span> : : return 0;</a>
<a name="103"><span class="lineNum"> 103 </span> : : }</a>
<a name="104"><span class="lineNum"> 104 </span> : : </a>
<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 1 : static int ffs_entry_to_flash(struct ffs_hdr *hdr,</span></a>
@@ -209,25 +209,25 @@
<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 1 : return rc;</span></a>
<a name="139"><span class="lineNum"> 139 </span> : : }</a>
<a name="140"><span class="lineNum"> 140 </span> : : </a>
-<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 59 : static int ffs_entry_to_cpu(struct ffs_hdr *hdr,</span></a>
+<a name="141"><span class="lineNum"> 141 </span> : : static int ffs_entry_to_cpu(struct ffs_hdr *hdr,</a>
<a name="142"><span class="lineNum"> 142 </span> : : struct ffs_entry *dst, struct __ffs_entry *src)</a>
<a name="143"><span class="lineNum"> 143 </span> : : {</a>
-<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 59 : int rc;</span></a>
+<a name="144"><span class="lineNum"> 144 </span> : : int rc;</a>
<a name="145"><span class="lineNum"> 145 </span> : : </a>
-<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 118 : if (ffs_entry_checksum(src) != 0)</span></a>
+<a name="146"><span class="lineNum"> 146 </span> : : if (ffs_entry_checksum(src) != 0)</a>
<a name="147"><span class="lineNum"> 147 </span> : : return FFS_ERR_BAD_CKSUM;</a>
<a name="148"><span class="lineNum"> 148 </span> : : </a>
-<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 59 : memcpy(dst-&gt;name, src-&gt;name, sizeof(dst-&gt;name));</span></a>
-<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 59 : dst-&gt;name[FFS_PART_NAME_MAX] = '\0';</span></a>
-<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 59 : dst-&gt;base = be32_to_cpu(src-&gt;base) * hdr-&gt;block_size;</span></a>
-<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 59 : dst-&gt;size = be32_to_cpu(src-&gt;size) * hdr-&gt;block_size;</span></a>
-<a name="153"><span class="lineNum"> 153 </span> :<span class="lineCov"> 59 : dst-&gt;actual = be32_to_cpu(src-&gt;actual);</span></a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 59 : dst-&gt;pid = be32_to_cpu(src-&gt;pid);</span></a>
-<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 59 : dst-&gt;type = be32_to_cpu(src-&gt;type); /* TODO: Check that it is valid? */</span></a>
-<a name="156"><span class="lineNum"> 156 </span> :<span class="lineCov"> 59 : dst-&gt;flags = be32_to_cpu(src-&gt;flags);</span></a>
-<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 59 : rc = ffs_entry_user_to_cpu(hdr, &amp;dst-&gt;user, &amp;src-&gt;user);</span></a>
+<a name="149"><span class="lineNum"> 149 </span> : : memcpy(dst-&gt;name, src-&gt;name, sizeof(dst-&gt;name));</a>
+<a name="150"><span class="lineNum"> 150 </span> : : dst-&gt;name[FFS_PART_NAME_MAX] = '\0';</a>
+<a name="151"><span class="lineNum"> 151 </span> : : dst-&gt;base = be32_to_cpu(src-&gt;base) * hdr-&gt;block_size;</a>
+<a name="152"><span class="lineNum"> 152 </span> : : dst-&gt;size = be32_to_cpu(src-&gt;size) * hdr-&gt;block_size;</a>
+<a name="153"><span class="lineNum"> 153 </span> : : dst-&gt;actual = be32_to_cpu(src-&gt;actual);</a>
+<a name="154"><span class="lineNum"> 154 </span> : : dst-&gt;pid = be32_to_cpu(src-&gt;pid);</a>
+<a name="155"><span class="lineNum"> 155 </span> : : dst-&gt;type = be32_to_cpu(src-&gt;type); /* TODO: Check that it is valid? */</a>
+<a name="156"><span class="lineNum"> 156 </span> : : dst-&gt;flags = be32_to_cpu(src-&gt;flags);</a>
+<a name="157"><span class="lineNum"> 157 </span> : : rc = ffs_entry_user_to_cpu(hdr, &amp;dst-&gt;user, &amp;src-&gt;user);</a>
<a name="158"><span class="lineNum"> 158 </span> : : </a>
-<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 59 : return rc;</span></a>
+<a name="159"><span class="lineNum"> 159 </span> : : return rc;</a>
<a name="160"><span class="lineNum"> 160 </span> : : }</a>
<a name="161"><span class="lineNum"> 161 </span> : : </a>
<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 7 : char *ffs_entry_user_to_string(struct ffs_entry_user *user)</span></a>
@@ -346,7 +346,7 @@
<a name="275"><span class="lineNum"> 275 </span> : : </a>
<a name="276"><span class="lineNum"> 276 </span> :<span class="lineCov"> 72 : struct ffs_entry *ffs_entry_put(struct ffs_entry *ent)</span></a>
<a name="277"><span class="lineNum"> 277 </span> : : {</a>
-<a name="278"><span class="lineNum"> 278 </span> :<span class="lineCov"> 72 : if (!ent)</span></a>
+<a name="278"><span class="lineNum"> 278 </span> :<span class="lineCov"> 13 : if (!ent)</span></a>
<a name="279"><span class="lineNum"> 279 </span> : : return NULL;</a>
<a name="280"><span class="lineNum"> 280 </span> : : </a>
<a name="281"><span class="lineNum"> 281 </span> :<span class="lineCov"> 72 : ent-&gt;ref--;</span></a>
@@ -508,7 +508,7 @@
<a name="437"><span class="lineNum"> 437 </span> : : return;</a>
<a name="438"><span class="lineNum"> 438 </span> : : </a>
<a name="439"><span class="lineNum"> 439 </span> :<span class="lineCov"> 68 : for (i = 0; i &lt; hdr-&gt;count; i++)</span></a>
-<a name="440"><span class="lineNum"> 440 </span> :<span class="lineCov"> 59 : ffs_entry_put(hdr-&gt;entries[i]);</span></a>
+<a name="440"><span class="lineNum"> 440 </span> :<span class="lineCov"> 118 : ffs_entry_put(hdr-&gt;entries[i]);</span></a>
<a name="441"><span class="lineNum"> 441 </span> :<span class="lineCov"> 9 : free(hdr-&gt;entries);</span></a>
<a name="442"><span class="lineNum"> 442 </span> : : }</a>
<a name="443"><span class="lineNum"> 443 </span> : : </a>
diff --git a/coverage-report/external/pflash/libflash/libflash.c.func-sort-c.html b/coverage-report/external/pflash/libflash/libflash.c.func-sort-c.html
index 19ab2b8..5efc9b5 100644
--- a/coverage-report/external/pflash/libflash/libflash.c.func-sort-c.html
+++ b/coverage-report/external/pflash/libflash/libflash.c.func-sort-c.html
@@ -32,16 +32,16 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">419</td>
+ <td class="headerCovTableEntry">391</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">20</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
@@ -73,14 +73,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#183">fl_get_best_erase</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#55">fl_micron_status</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#50">fl_read_stat</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -89,10 +81,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#293">fl_wpage</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#87">fl_wren</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -145,10 +133,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#440">flash_smart_comp</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#465">flash_smart_write</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/pflash/libflash/libflash.c.func.html b/coverage-report/external/pflash/libflash/libflash.c.func.html
index 5df2a10..f08acad 100644
--- a/coverage-report/external/pflash/libflash/libflash.c.func.html
+++ b/coverage-report/external/pflash/libflash/libflash.c.func.html
@@ -32,16 +32,16 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">419</td>
+ <td class="headerCovTableEntry">391</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">20</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
@@ -73,14 +73,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#183">fl_get_best_erase</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#55">fl_micron_status</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#50">fl_read_stat</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -89,10 +81,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#293">fl_wpage</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#87">fl_wren</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -145,10 +133,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libflash.c.gcov.html#440">flash_smart_comp</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libflash.c.gcov.html#465">flash_smart_write</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/external/pflash/libflash/libflash.c.gcov.html b/coverage-report/external/pflash/libflash/libflash.c.gcov.html
index 7fa7d1e..dd66a11 100644
--- a/coverage-report/external/pflash/libflash/libflash.c.gcov.html
+++ b/coverage-report/external/pflash/libflash/libflash.c.gcov.html
@@ -32,16 +32,16 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">419</td>
+ <td class="headerCovTableEntry">391</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">20</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
@@ -253,36 +253,36 @@
<a name="182"><span class="lineNum"> 182 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
<a name="183"><span class="lineNum"> 183 </span> : : }</a>
<a name="184"><span class="lineNum"> 184 </span> : : </a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : static void fl_get_best_erase(struct flash_chip *c, uint32_t dst, uint32_t size,</span></a>
+<a name="185"><span class="lineNum"> 185 </span> : : static void fl_get_best_erase(struct flash_chip *c, uint32_t dst, uint32_t size,</a>
<a name="186"><span class="lineNum"> 186 </span> : : uint32_t *chunk, uint8_t *cmd)</a>
<a name="187"><span class="lineNum"> 187 </span> : : {</a>
<a name="188"><span class="lineNum"> 188 </span> : : /* Smaller than 32k, use 4k */</a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : if ((dst &amp; 0x7fff) || (size &lt; 0x8000)) {</span></a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : *chunk = 0x1000;</span></a>
-<a name="191"><span class="lineNum"> 191 </span> :<span class="lineNoCov"> 0 : *cmd = CMD_SE;</span></a>
-<a name="192"><span class="lineNum"> 192 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="189"><span class="lineNum"> 189 </span> : : if ((dst &amp; 0x7fff) || (size &lt; 0x8000)) {</a>
+<a name="190"><span class="lineNum"> 190 </span> : : *chunk = 0x1000;</a>
+<a name="191"><span class="lineNum"> 191 </span> : : *cmd = CMD_SE;</a>
+<a name="192"><span class="lineNum"> 192 </span> : : return;</a>
<a name="193"><span class="lineNum"> 193 </span> : : }</a>
<a name="194"><span class="lineNum"> 194 </span> : : /* Smaller than 64k and 32k is supported, use it */</a>
-<a name="195"><span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : if ((c-&gt;info.flags &amp; FL_ERASE_32K) &amp;&amp;</span></a>
-<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : ((dst &amp; 0xffff) || (size &lt; 0x10000))) {</span></a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : *chunk = 0x8000;</span></a>
-<a name="198"><span class="lineNum"> 198 </span> :<span class="lineNoCov"> 0 : *cmd = CMD_BE32K;</span></a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="195"><span class="lineNum"> 195 </span> : : if ((c-&gt;info.flags &amp; FL_ERASE_32K) &amp;&amp;</a>
+<a name="196"><span class="lineNum"> 196 </span> : : ((dst &amp; 0xffff) || (size &lt; 0x10000))) {</a>
+<a name="197"><span class="lineNum"> 197 </span> : : *chunk = 0x8000;</a>
+<a name="198"><span class="lineNum"> 198 </span> : : *cmd = CMD_BE32K;</a>
+<a name="199"><span class="lineNum"> 199 </span> : : return;</a>
<a name="200"><span class="lineNum"> 200 </span> : : }</a>
<a name="201"><span class="lineNum"> 201 </span> : : /* If 64K is not supported, use whatever smaller size is */</a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : if (!(c-&gt;info.flags &amp; FL_ERASE_64K)) {</span></a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : if (c-&gt;info.flags &amp; FL_ERASE_32K) {</span></a>
-<a name="204"><span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : *chunk = 0x8000;</span></a>
-<a name="205"><span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : *cmd = CMD_BE32K;</span></a>
+<a name="202"><span class="lineNum"> 202 </span> : : if (!(c-&gt;info.flags &amp; FL_ERASE_64K)) {</a>
+<a name="203"><span class="lineNum"> 203 </span> : : if (c-&gt;info.flags &amp; FL_ERASE_32K) {</a>
+<a name="204"><span class="lineNum"> 204 </span> : : *chunk = 0x8000;</a>
+<a name="205"><span class="lineNum"> 205 </span> : : *cmd = CMD_BE32K;</a>
<a name="206"><span class="lineNum"> 206 </span> : : } else {</a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : *chunk = 0x1000;</span></a>
-<a name="208"><span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : *cmd = CMD_SE;</span></a>
+<a name="207"><span class="lineNum"> 207 </span> : : *chunk = 0x1000;</a>
+<a name="208"><span class="lineNum"> 208 </span> : : *cmd = CMD_SE;</a>
<a name="209"><span class="lineNum"> 209 </span> : : }</a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="210"><span class="lineNum"> 210 </span> : : return;</a>
<a name="211"><span class="lineNum"> 211 </span> : : }</a>
<a name="212"><span class="lineNum"> 212 </span> : : /* Allright, let's go for 64K */</a>
-<a name="213"><span class="lineNum"> 213 </span> :<span class="lineNoCov"> 0 : *chunk = 0x10000;</span></a>
-<a name="214"><span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : *cmd = CMD_BE;</span></a>
+<a name="213"><span class="lineNum"> 213 </span> : : *chunk = 0x10000;</a>
+<a name="214"><span class="lineNum"> 214 </span> : : *cmd = CMD_BE;</a>
<a name="215"><span class="lineNum"> 215 </span> : : }</a>
<a name="216"><span class="lineNum"> 216 </span> : : </a>
<a name="217"><span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : static int flash_erase(struct blocklevel_device *bl, uint64_t dst, uint64_t size)</span></a>
@@ -363,24 +363,24 @@
<a name="292"><span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : return fl_sync_wait_idle(ct);</span></a>
<a name="293"><span class="lineNum"> 293 </span> : : }</a>
<a name="294"><span class="lineNum"> 294 </span> : : </a>
-<a name="295"><span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : static int fl_wpage(struct flash_chip *c, uint32_t dst, const void *src,</span></a>
+<a name="295"><span class="lineNum"> 295 </span> : : static int fl_wpage(struct flash_chip *c, uint32_t dst, const void *src,</a>
<a name="296"><span class="lineNum"> 296 </span> : : uint32_t size)</a>
<a name="297"><span class="lineNum"> 297 </span> : : {</a>
-<a name="298"><span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : struct spi_flash_ctrl *ct = c-&gt;ctrl;</span></a>
-<a name="299"><span class="lineNum"> 299 </span> :<span class="lineNoCov"> 0 : int rc;</span></a>
+<a name="298"><span class="lineNum"> 298 </span> : : struct spi_flash_ctrl *ct = c-&gt;ctrl;</a>
+<a name="299"><span class="lineNum"> 299 </span> : : int rc;</a>
<a name="300"><span class="lineNum"> 300 </span> : : </a>
-<a name="301"><span class="lineNum"> 301 </span> :<span class="lineNoCov"> 0 : if (size &lt; 1 || size &gt; 0x100)</span></a>
+<a name="301"><span class="lineNum"> 301 </span> : : if (size &lt; 1 || size &gt; 0x100)</a>
<a name="302"><span class="lineNum"> 302 </span> : : return FLASH_ERR_BAD_PAGE_SIZE;</a>
<a name="303"><span class="lineNum"> 303 </span> : : </a>
-<a name="304"><span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : rc = fl_wren(ct);</span></a>
-<a name="305"><span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : if (rc) return rc;</span></a>
+<a name="304"><span class="lineNum"> 304 </span> : : rc = fl_wren(ct);</a>
+<a name="305"><span class="lineNum"> 305 </span> : : if (rc) return rc;</a>
<a name="306"><span class="lineNum"> 306 </span> : : </a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : rc = ct-&gt;cmd_wr(ct, CMD_PP, true, dst, src, size);</span></a>
-<a name="308"><span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
+<a name="307"><span class="lineNum"> 307 </span> : : rc = ct-&gt;cmd_wr(ct, CMD_PP, true, dst, src, size);</a>
+<a name="308"><span class="lineNum"> 308 </span> : : if (rc)</a>
<a name="309"><span class="lineNum"> 309 </span> : : return rc;</a>
<a name="310"><span class="lineNum"> 310 </span> : : </a>
<a name="311"><span class="lineNum"> 311 </span> : : /* Wait for write complete */</a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : return fl_sync_wait_idle(ct);</span></a>
+<a name="312"><span class="lineNum"> 312 </span> : : return fl_sync_wait_idle(ct);</a>
<a name="313"><span class="lineNum"> 313 </span> : : }</a>
<a name="314"><span class="lineNum"> 314 </span> : : </a>
<a name="315"><span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : static int flash_write(struct blocklevel_device *bl, uint32_t dst, const void *src,</span></a>
diff --git a/coverage-report/external/pflash/pflash.c.func-sort-c.html b/coverage-report/external/pflash/pflash.c.func-sort-c.html
index 2975837..41334b5 100644
--- a/coverage-report/external/pflash/pflash.c.func-sort-c.html
+++ b/coverage-report/external/pflash/pflash.c.func-sort-c.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">450</td>
- <td class="headerCovTableEntry">761</td>
- <td class="headerCovTableEntryLo">59.1 %</td>
+ <td class="headerCovTableEntry">760</td>
+ <td class="headerCovTableEntryLo">59.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">12</td>
diff --git a/coverage-report/external/pflash/pflash.c.func.html b/coverage-report/external/pflash/pflash.c.func.html
index e364864..d3024f6 100644
--- a/coverage-report/external/pflash/pflash.c.func.html
+++ b/coverage-report/external/pflash/pflash.c.func.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">450</td>
- <td class="headerCovTableEntry">761</td>
- <td class="headerCovTableEntryLo">59.1 %</td>
+ <td class="headerCovTableEntry">760</td>
+ <td class="headerCovTableEntryLo">59.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">12</td>
diff --git a/coverage-report/external/pflash/pflash.c.gcov.html b/coverage-report/external/pflash/pflash.c.gcov.html
index 6ef153a..3fca745 100644
--- a/coverage-report/external/pflash/pflash.c.gcov.html
+++ b/coverage-report/external/pflash/pflash.c.gcov.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">450</td>
- <td class="headerCovTableEntry">761</td>
- <td class="headerCovTableEntryLo">59.1 %</td>
+ <td class="headerCovTableEntry">760</td>
+ <td class="headerCovTableEntryLo">59.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">12</td>
@@ -133,7 +133,7 @@
<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 12 : if (!must_confirm)</span></a>
<a name="63"><span class="lineNum"> 63 </span> : : return true;</a>
<a name="64"><span class="lineNum"> 64 </span> : : </a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 8 : printf(&quot;WARNING ! This will modify your %s flash chip content !\n&quot;,</span></a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 16 : printf(&quot;WARNING ! This will modify your %s flash chip content !\n&quot;,</span></a>
<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 8 : bmc_flash ? &quot;BMC&quot; : &quot;HOST&quot;);</span></a>
<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 8 : printf(&quot;Enter \&quot;yes\&quot; to confirm:&quot;);</span></a>
<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 8 : memset(yes, 0, sizeof(yes));</span></a>
@@ -229,9 +229,9 @@
<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 2 : printf(&quot;Flash info:\n&quot;);</span></a>
<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 2 : printf(&quot;-----------\n&quot;);</span></a>
<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 2 : printf(&quot;Name = %s\n&quot;, flash-&gt;name);</span></a>
-<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 2 : printf(&quot;Total size = %&quot; PRIu64 &quot;MB\t Flags E:ECC, P:PRESERVED, R:READONLY, &quot;</span></a>
+<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 4 : printf(&quot;Total size = %&quot; PRIu64 &quot;MB\t Flags E:ECC, P:PRESERVED, R:READONLY, &quot;</span></a>
<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 2 : &quot;B:BACKUP\n&quot;, flash-&gt;total_size &gt;&gt; 20);</span></a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 2 : printf(&quot;Erase granule = %2d%-13sF:REPROVISION, V:VOLATILE, C:CLEARECC\n&quot;,</span></a>
+<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 4 : printf(&quot;Erase granule = %2d%-13sF:REPROVISION, V:VOLATILE, C:CLEARECC\n&quot;,</span></a>
<a name="164"><span class="lineNum"> 164 </span> :<span class="lineCov"> 2 : flash-&gt;erase_granule &gt;&gt; 10, &quot;KB&quot;);</span></a>
<a name="165"><span class="lineNum"> 165 </span> : : </a>
<a name="166"><span class="lineNum"> 166 </span> :<span class="lineCov"> 2 : if (bmc_flash)</span></a>
@@ -587,7 +587,7 @@
<a name="516"><span class="lineNum"> 516 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
<a name="517"><span class="lineNum"> 517 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Flash read error %d for&quot;</span></a>
<a name="518"><span class="lineNum"> 518 </span> : : &quot; chunk at 0x%08x\n&quot;, rc, start);</a>
-<a name="519"><span class="lineNum"> 519 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="519"><span class="lineNum"> 519 </span> : : break;</a>
<a name="520"><span class="lineNum"> 520 </span> : : }</a>
<a name="521"><span class="lineNum"> 521 </span> :<span class="lineNoCov"> 0 : rc = write(fd, file_buf, len);</span></a>
<a name="522"><span class="lineNum"> 522 </span> : : /*</a>
@@ -676,7 +676,7 @@
<a name="605"><span class="lineNum"> 605 </span> : : </a>
<a name="606"><span class="lineNum"> 606 </span> :<span class="lineCov"> 12 : printf(&quot;Flags:\n&quot;);</span></a>
<a name="607"><span class="lineNum"> 607 </span> : : </a>
-<a name="608"><span class="lineNum"> 608 </span> :<span class="lineCov"> 94 : l = asprintf(&amp;flags, &quot;%s%s%s%s%s%s%s&quot;, has_ecc(ent) ? &quot;ECC [E]\n&quot; : &quot;&quot;,</span></a>
+<a name="608"><span class="lineNum"> 608 </span> :<span class="lineCov"> 82 : l = asprintf(&amp;flags, &quot;%s%s%s%s%s%s%s&quot;, has_ecc(ent) ? &quot;ECC [E]\n&quot; : &quot;&quot;,</span></a>
<a name="609"><span class="lineNum"> 609 </span> :<span class="lineCov"> 12 : has_flag(ent, FFS_MISCFLAGS_PRESERVED) ? &quot;PRESERVED [P]\n&quot; : &quot;&quot;,</span></a>
<a name="610"><span class="lineNum"> 610 </span> :<span class="lineCov"> 12 : has_flag(ent, FFS_MISCFLAGS_READONLY) ? &quot;READONLY [R]\n&quot; : &quot;&quot;,</span></a>
<a name="611"><span class="lineNum"> 611 </span> :<span class="lineCov"> 12 : has_flag(ent, FFS_MISCFLAGS_BACKUP) ? &quot;BACKUP [B]\n&quot; : &quot;&quot;,</span></a>
diff --git a/coverage-report/external/pflash/progress.c.func-sort-c.html b/coverage-report/external/pflash/progress.c.func-sort-c.html
index c228464..a69d55b 100644
--- a/coverage-report/external/pflash/progress.c.func-sort-c.html
+++ b/coverage-report/external/pflash/progress.c.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">35</td>
+ <td class="headerCovTableEntry">36</td>
<td class="headerCovTableEntry">46</td>
- <td class="headerCovTableEntryMed">76.1 %</td>
+ <td class="headerCovTableEntryMed">78.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/external/pflash/progress.c.func.html b/coverage-report/external/pflash/progress.c.func.html
index 9fa9e57..11cfb53 100644
--- a/coverage-report/external/pflash/progress.c.func.html
+++ b/coverage-report/external/pflash/progress.c.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">35</td>
+ <td class="headerCovTableEntry">36</td>
<td class="headerCovTableEntry">46</td>
- <td class="headerCovTableEntryMed">76.1 %</td>
+ <td class="headerCovTableEntryMed">78.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/external/pflash/progress.c.gcov.html b/coverage-report/external/pflash/progress.c.gcov.html
index ff8d548..de031eb 100644
--- a/coverage-report/external/pflash/progress.c.gcov.html
+++ b/coverage-report/external/pflash/progress.c.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">35</td>
+ <td class="headerCovTableEntry">36</td>
<td class="headerCovTableEntry">46</td>
- <td class="headerCovTableEntryMed">76.1 %</td>
+ <td class="headerCovTableEntryMed">78.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@@ -147,7 +147,7 @@
<a name="76"><span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : if (rem_sec &lt; 60)</span></a>
<a name="77"><span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : printf(&quot; ETA:%&quot; PRIu64 &quot;s &quot;, rem_sec);</span></a>
<a name="78"><span class="lineNum"> 78 </span> : : else {</a>
-<a name="79"><span class="lineNum"> 79 </span> :<span class="lineNoCov"> 0 : printf(&quot; ETA:%&quot; PRIu64 &quot;:%02&quot; PRIu64 &quot;:%02&quot; PRIu64 &quot; &quot;,</span></a>
+<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 802 : printf(&quot; ETA:%&quot; PRIu64 &quot;:%02&quot; PRIu64 &quot;:%02&quot; PRIu64 &quot; &quot;,</span></a>
<a name="80"><span class="lineNum"> 80 </span> : : rem_sec / 3600,</a>
<a name="81"><span class="lineNum"> 81 </span> :<span class="lineNoCov"> 0 : (rem_sec / 60) % 60,</span></a>
<a name="82"><span class="lineNum"> 82 </span> : : rem_sec % 60);</a>
diff --git a/coverage-report/external/trace/index-sort-b.html b/coverage-report/external/trace/index-sort-b.html
index 81dbc95..4d80b99 100644
--- a/coverage-report/external/trace/index-sort-b.html
+++ b/coverage-report/external/trace/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/trace/index-sort-f.html b/coverage-report/external/trace/index-sort-f.html
index 94603be..18861ed 100644
--- a/coverage-report/external/trace/index-sort-f.html
+++ b/coverage-report/external/trace/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/trace/index-sort-l.html b/coverage-report/external/trace/index-sort-l.html
index 5458afc..aa8c463 100644
--- a/coverage-report/external/trace/index-sort-l.html
+++ b/coverage-report/external/trace/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/trace/index.html b/coverage-report/external/trace/index.html
index a13532b..3f386d5 100644
--- a/coverage-report/external/trace/index.html
+++ b/coverage-report/external/trace/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/external/trace/trace.c.func-sort-c.html b/coverage-report/external/trace/trace.c.func-sort-c.html
index a40c01c..883eb8b 100644
--- a/coverage-report/external/trace/trace.c.func-sort-c.html
+++ b/coverage-report/external/trace/trace.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -69,12 +69,12 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="trace.c.gcov.html#45">trace_get</a></td>
- <td class="coverFnHi">4050209</td>
+ <td class="coverFn"><a href="trace.c.gcov.html#19">trace_empty</a></td>
+ <td class="coverFnHi">4080290</td>
</tr>
<tr>
- <td class="coverFn"><a href="trace.c.gcov.html#19">trace_empty</a></td>
- <td class="coverFnHi">4050213</td>
+ <td class="coverFn"><a href="trace.c.gcov.html#45">trace_get</a></td>
+ <td class="coverFnHi">4080290</td>
</tr>
</table>
<br>
diff --git a/coverage-report/external/trace/trace.c.func.html b/coverage-report/external/trace/trace.c.func.html
index c76ae09..ec172e6 100644
--- a/coverage-report/external/trace/trace.c.func.html
+++ b/coverage-report/external/trace/trace.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -70,11 +70,11 @@
</tr>
<tr>
<td class="coverFn"><a href="trace.c.gcov.html#19">trace_empty</a></td>
- <td class="coverFnHi">4050213</td>
+ <td class="coverFnHi">4080290</td>
</tr>
<tr>
<td class="coverFn"><a href="trace.c.gcov.html#45">trace_get</a></td>
- <td class="coverFnHi">4050209</td>
+ <td class="coverFnHi">4080290</td>
</tr>
</table>
<br>
diff --git a/coverage-report/external/trace/trace.c.gcov.html b/coverage-report/external/trace/trace.c.gcov.html
index cf2d055..fad7786 100644
--- a/coverage-report/external/trace/trace.c.gcov.html
+++ b/coverage-report/external/trace/trace.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -89,95 +89,95 @@
<a name="18"><span class="lineNum"> 18 </span> : : #define rmb()</a>
<a name="19"><span class="lineNum"> 19 </span> : : #endif</a>
<a name="20"><span class="lineNum"> 20 </span> : : </a>
-<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 4050213 : bool trace_empty(const struct trace_reader *tr)</span></a>
+<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 4080290 : bool trace_empty(const struct trace_reader *tr)</span></a>
<a name="22"><span class="lineNum"> 22 </span> : : {</a>
<a name="23"><span class="lineNum"> 23 </span> : : const struct trace_repeat *rep;</a>
<a name="24"><span class="lineNum"> 24 </span> : : </a>
-<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 4050213 : if (tr-&gt;rpos == be64_to_cpu(tr-&gt;tb-&gt;end))</span></a>
-<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 6597 : return true;</span></a>
+<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 4080290 : if (tr-&gt;rpos == be64_to_cpu(tr-&gt;tb-&gt;end))</span></a>
+<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 12545 : return true;</span></a>
<a name="27"><span class="lineNum"> 27 </span> : : </a>
<a name="28"><span class="lineNum"> 28 </span> : : /*</a>
<a name="29"><span class="lineNum"> 29 </span> : : * If we have a single element only, and it's a repeat buffer</a>
<a name="30"><span class="lineNum"> 30 </span> : : * we've already seen every repeat for (yet which may be</a>
<a name="31"><span class="lineNum"> 31 </span> : : * incremented in future), we're also empty.</a>
<a name="32"><span class="lineNum"> 32 </span> : : */</a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 4043616 : rep = (void *)tr-&gt;tb-&gt;buf + tr-&gt;rpos % be64_to_cpu(tr-&gt;tb-&gt;buf_size);</span></a>
-<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 4043616 : if (be64_to_cpu(tr-&gt;tb-&gt;end) != tr-&gt;rpos + sizeof(*rep))</span></a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 1950756 : return false;</span></a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 4067740 : rep = (void *)tr-&gt;tb-&gt;buf + tr-&gt;rpos % be64_to_cpu(tr-&gt;tb-&gt;buf_size);</span></a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 4067740 : if (be64_to_cpu(tr-&gt;tb-&gt;end) != tr-&gt;rpos + sizeof(*rep))</span></a>
+<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 1974870 : return false;</span></a>
<a name="36"><span class="lineNum"> 36 </span> : : </a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 2092860 : if (rep-&gt;type != TRACE_REPEAT)</span></a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 2092870 : if (rep-&gt;type != TRACE_REPEAT)</span></a>
<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 8 : return false;</span></a>
<a name="39"><span class="lineNum"> 39 </span> : : </a>
-<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 2092852 : if (be16_to_cpu(rep-&gt;num) != tr-&gt;last_repeat)</span></a>
-<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 1046427 : return false;</span></a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 2092860 : if (be16_to_cpu(rep-&gt;num) != tr-&gt;last_repeat)</span></a>
+<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 1046430 : return false;</span></a>
<a name="42"><span class="lineNum"> 42 </span> : : </a>
-<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 1046425 : return true;</span></a>
+<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 1046430 : return true;</span></a>
<a name="44"><span class="lineNum"> 44 </span> : : }</a>
<a name="45"><span class="lineNum"> 45 </span> : : </a>
<a name="46"><span class="lineNum"> 46 </span> : : /* You can't read in parallel, so some locking required in caller. */</a>
-<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 4050209 : bool trace_get(union trace *t, struct trace_reader *tr)</span></a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 4080290 : bool trace_get(union trace *t, struct trace_reader *tr)</span></a>
<a name="48"><span class="lineNum"> 48 </span> : : {</a>
<a name="49"><span class="lineNum"> 49 </span> : : u64 start, rpos;</a>
<a name="50"><span class="lineNum"> 50 </span> : : size_t len;</a>
<a name="51"><span class="lineNum"> 51 </span> : : </a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 8100418 : len = sizeof(*t) &lt; be32_to_cpu(tr-&gt;tb-&gt;max_size) ? sizeof(*t) :</span></a>
-<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 4050209 : be32_to_cpu(tr-&gt;tb-&gt;max_size);</span></a>
+<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 8160570 : len = sizeof(*t) &lt; be32_to_cpu(tr-&gt;tb-&gt;max_size) ? sizeof(*t) :</span></a>
+<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 4080290 : be32_to_cpu(tr-&gt;tb-&gt;max_size);</span></a>
<a name="54"><span class="lineNum"> 54 </span> : : </a>
-<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 4050209 : if (trace_empty(tr))</span></a>
-<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 1053018 : return false;</span></a>
+<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 4080290 : if (trace_empty(tr))</span></a>
+<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 1058970 : return false;</span></a>
<a name="57"><span class="lineNum"> 57 </span> : : </a>
-<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 2997191 : again:</span></a>
+<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 3021320 : again:</span></a>
<a name="59"><span class="lineNum"> 59 </span> : : /*</a>
<a name="60"><span class="lineNum"> 60 </span> : : * The actual buffer is slightly larger than tbsize, so this</a>
<a name="61"><span class="lineNum"> 61 </span> : : * memcpy is always valid.</a>
<a name="62"><span class="lineNum"> 62 </span> : : */</a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 3721143 : memcpy(t, tr-&gt;tb-&gt;buf + tr-&gt;rpos % be64_to_cpu(tr-&gt;tb-&gt;buf_size), len);</span></a>
+<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 3735090 : memcpy(t, tr-&gt;tb-&gt;buf + tr-&gt;rpos % be64_to_cpu(tr-&gt;tb-&gt;buf_size), len);</span></a>
<a name="64"><span class="lineNum"> 64 </span> : : </a>
<a name="65"><span class="lineNum"> 65 </span> : : rmb(); /* read barrier, so we read tr-&gt;tb-&gt;start after copying record. */</a>
<a name="66"><span class="lineNum"> 66 </span> : : </a>
-<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 3721143 : start = be64_to_cpu(tr-&gt;tb-&gt;start);</span></a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 3721143 : rpos = tr-&gt;rpos;</span></a>
+<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 3735090 : start = be64_to_cpu(tr-&gt;tb-&gt;start);</span></a>
+<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 3735090 : rpos = tr-&gt;rpos;</span></a>
<a name="69"><span class="lineNum"> 69 </span> : : </a>
<a name="70"><span class="lineNum"> 70 </span> : : /* Now, was that overwritten? */</a>
-<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 3721143 : if (rpos &lt; start) {</span></a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 3735090 : if (rpos &lt; start) {</span></a>
<a name="72"><span class="lineNum"> 72 </span> : : /* Create overflow record. */</a>
-<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 45 : t-&gt;overflow.unused64 = 0;</span></a>
-<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 45 : t-&gt;overflow.type = TRACE_OVERFLOW;</span></a>
-<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 45 : t-&gt;overflow.len_div_8 = sizeof(t-&gt;overflow) / 8;</span></a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 45 : t-&gt;overflow.bytes_missed = cpu_to_be64(start - rpos);</span></a>
-<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 45 : tr-&gt;rpos = start;</span></a>
-<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 45 : return true;</span></a>
+<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 30 : t-&gt;overflow.unused64 = 0;</span></a>
+<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 30 : t-&gt;overflow.type = TRACE_OVERFLOW;</span></a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 30 : t-&gt;overflow.len_div_8 = sizeof(t-&gt;overflow) / 8;</span></a>
+<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 30 : t-&gt;overflow.bytes_missed = cpu_to_be64(start - rpos);</span></a>
+<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 30 : tr-&gt;rpos = start;</span></a>
+<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 30 : return true;</span></a>
<a name="79"><span class="lineNum"> 79 </span> : : }</a>
<a name="80"><span class="lineNum"> 80 </span> : : </a>
<a name="81"><span class="lineNum"> 81 </span> : : /* Repeat entries need special handling */</a>
-<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 3721098 : if (t-&gt;hdr.type == TRACE_REPEAT) {</span></a>
-<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 2494316 : u32 num = be16_to_cpu(t-&gt;repeat.num);</span></a>
+<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 3735060 : if (t-&gt;hdr.type == TRACE_REPEAT) {</span></a>
+<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 2473960 : u32 num = be16_to_cpu(t-&gt;repeat.num);</span></a>
<a name="84"><span class="lineNum"> 84 </span> : : </a>
<a name="85"><span class="lineNum"> 85 </span> : : /* In case we've read some already... */</a>
-<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 2494316 : t-&gt;repeat.num = cpu_to_be16(num - tr-&gt;last_repeat);</span></a>
+<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 2473960 : t-&gt;repeat.num = cpu_to_be16(num - tr-&gt;last_repeat);</span></a>
<a name="87"><span class="lineNum"> 87 </span> : : </a>
<a name="88"><span class="lineNum"> 88 </span> : : /* Record how many repeats we saw this time. */</a>
-<a name="89"><span class="lineNum"> 89 </span> :<span class="lineCov"> 2494316 : tr-&gt;last_repeat = num;</span></a>
+<a name="89"><span class="lineNum"> 89 </span> :<span class="lineCov"> 2473960 : tr-&gt;last_repeat = num;</span></a>
<a name="90"><span class="lineNum"> 90 </span> : : </a>
<a name="91"><span class="lineNum"> 91 </span> : : /* Don't report an empty repeat buffer. */</a>
-<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 2494316 : if (t-&gt;repeat.num == 0) {</span></a>
+<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 2473960 : if (t-&gt;repeat.num == 0) {</span></a>
<a name="93"><span class="lineNum"> 93 </span> : : /*</a>
<a name="94"><span class="lineNum"> 94 </span> : : * This can't be the last buffer, otherwise</a>
<a name="95"><span class="lineNum"> 95 </span> : : * trace_empty would have returned true.</a>
<a name="96"><span class="lineNum"> 96 </span> : : */</a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 723952 : assert(be64_to_cpu(tr-&gt;tb-&gt;end) &gt;</span></a>
+<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 713777 : assert(be64_to_cpu(tr-&gt;tb-&gt;end) &gt;</span></a>
<a name="98"><span class="lineNum"> 98 </span> : : rpos + t-&gt;hdr.len_div_8 * 8);</a>
<a name="99"><span class="lineNum"> 99 </span> : : /* Skip to next entry. */</a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 723952 : tr-&gt;rpos = rpos + t-&gt;hdr.len_div_8 * 8;</span></a>
-<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 723952 : tr-&gt;last_repeat = 0;</span></a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 723952 : goto again;</span></a>
+<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 713777 : tr-&gt;rpos = rpos + t-&gt;hdr.len_div_8 * 8;</span></a>
+<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 713777 : tr-&gt;last_repeat = 0;</span></a>
+<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 713777 : goto again;</span></a>
<a name="103"><span class="lineNum"> 103 </span> : : }</a>
<a name="104"><span class="lineNum"> 104 </span> : : } else {</a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 1226782 : tr-&gt;last_repeat = 0;</span></a>
-<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 1226782 : tr-&gt;rpos = rpos + t-&gt;hdr.len_div_8 * 8;</span></a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 1261100 : tr-&gt;last_repeat = 0;</span></a>
+<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 1261100 : tr-&gt;rpos = rpos + t-&gt;hdr.len_div_8 * 8;</span></a>
<a name="107"><span class="lineNum"> 107 </span> : : }</a>
<a name="108"><span class="lineNum"> 108 </span> : : </a>
-<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 2997146 : return true;</span></a>
+<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 3021280 : return true;</span></a>
<a name="110"><span class="lineNum"> 110 </span> : : }</a>
</pre>
</td>
diff --git a/coverage-report/hdata/cpu-common.c.func-sort-c.html b/coverage-report/hdata/cpu-common.c.func-sort-c.html
index 931866a..03ce153 100644
--- a/coverage-report/hdata/cpu-common.c.func-sort-c.html
+++ b/coverage-report/hdata/cpu-common.c.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">96</td>
- <td class="headerCovTableEntry">139</td>
- <td class="headerCovTableEntryLo">69.1 %</td>
+ <td class="headerCovTableEntry">98</td>
+ <td class="headerCovTableEntry">148</td>
+ <td class="headerCovTableEntryLo">66.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
@@ -69,19 +69,19 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="cpu-common.c.gcov.html#290">find_l2_node</a></td>
+ <td class="coverFn"><a href="cpu-common.c.gcov.html#311">find_l2_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpu-common.c.gcov.html#221">l35_cache_node</a></td>
+ <td class="coverFn"><a href="cpu-common.c.gcov.html#242">l35_cache_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpu-common.c.gcov.html#183">add_core_attr</a></td>
+ <td class="coverFn"><a href="cpu-common.c.gcov.html#204">add_core_attr</a></td>
<td class="coverFnHi">26</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpu-common.c.gcov.html#298">add_core_cache_info</a></td>
+ <td class="coverFn"><a href="cpu-common.c.gcov.html#319">add_core_cache_info</a></td>
<td class="coverFnHi">26</td>
</tr>
<tr>
@@ -89,15 +89,15 @@
<td class="coverFnHi">26</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpu-common.c.gcov.html#267">l2_cache_node</a></td>
+ <td class="coverFn"><a href="cpu-common.c.gcov.html#288">l2_cache_node</a></td>
<td class="coverFnHi">26</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpu-common.c.gcov.html#244">l3_cache_node</a></td>
+ <td class="coverFn"><a href="cpu-common.c.gcov.html#265">l3_cache_node</a></td>
<td class="coverFnHi">26</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpu-common.c.gcov.html#197">create_cache_node</a></td>
+ <td class="coverFn"><a href="cpu-common.c.gcov.html#218">create_cache_node</a></td>
<td class="coverFnHi">52</td>
</tr>
</table>
diff --git a/coverage-report/hdata/cpu-common.c.func.html b/coverage-report/hdata/cpu-common.c.func.html
index 8cf9e7e..50ceb3d 100644
--- a/coverage-report/hdata/cpu-common.c.func.html
+++ b/coverage-report/hdata/cpu-common.c.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">96</td>
- <td class="headerCovTableEntry">139</td>
- <td class="headerCovTableEntryLo">69.1 %</td>
+ <td class="headerCovTableEntry">98</td>
+ <td class="headerCovTableEntry">148</td>
+ <td class="headerCovTableEntryLo">66.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
@@ -69,11 +69,11 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="cpu-common.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="cpu-common.c.gcov.html#183">add_core_attr</a></td>
+ <td class="coverFn"><a href="cpu-common.c.gcov.html#204">add_core_attr</a></td>
<td class="coverFnHi">26</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpu-common.c.gcov.html#298">add_core_cache_info</a></td>
+ <td class="coverFn"><a href="cpu-common.c.gcov.html#319">add_core_cache_info</a></td>
<td class="coverFnHi">26</td>
</tr>
<tr>
@@ -81,23 +81,23 @@
<td class="coverFnHi">26</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpu-common.c.gcov.html#197">create_cache_node</a></td>
+ <td class="coverFn"><a href="cpu-common.c.gcov.html#218">create_cache_node</a></td>
<td class="coverFnHi">52</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpu-common.c.gcov.html#290">find_l2_node</a></td>
+ <td class="coverFn"><a href="cpu-common.c.gcov.html#311">find_l2_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpu-common.c.gcov.html#267">l2_cache_node</a></td>
+ <td class="coverFn"><a href="cpu-common.c.gcov.html#288">l2_cache_node</a></td>
<td class="coverFnHi">26</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpu-common.c.gcov.html#221">l35_cache_node</a></td>
+ <td class="coverFn"><a href="cpu-common.c.gcov.html#242">l35_cache_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="cpu-common.c.gcov.html#244">l3_cache_node</a></td>
+ <td class="coverFn"><a href="cpu-common.c.gcov.html#265">l3_cache_node</a></td>
<td class="coverFnHi">26</td>
</tr>
</table>
diff --git a/coverage-report/hdata/cpu-common.c.gcov.html b/coverage-report/hdata/cpu-common.c.gcov.html
index f978b35..d2688a3 100644
--- a/coverage-report/hdata/cpu-common.c.gcov.html
+++ b/coverage-report/hdata/cpu-common.c.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">96</td>
- <td class="headerCovTableEntry">139</td>
- <td class="headerCovTableEntryLo">69.1 %</td>
+ <td class="headerCovTableEntry">98</td>
+ <td class="headerCovTableEntry">148</td>
+ <td class="headerCovTableEntryLo">66.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
@@ -117,294 +117,315 @@
<a name="46"><span class="lineNum"> 46 </span> : : 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, /* 48 .. 55 */</a>
<a name="47"><span class="lineNum"> 47 </span> : : 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, /* 56 .. 63 */</a>
<a name="48"><span class="lineNum"> 48 </span> : : };</a>
-<a name="49"><span class="lineNum"> 49 </span> : : </a>
-<a name="50"><span class="lineNum"> 50 </span> : : const uint8_t *pa_features;</a>
-<a name="51"><span class="lineNum"> 51 </span> : : size_t pa_features_size;</a>
-<a name="52"><span class="lineNum"> 52 </span> : : </a>
-<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 26 : prlog(PR_INFO, &quot; Cache: I=%u D=%u/%u/%u/%u\n&quot;,</span></a>
-<a name="54"><span class="lineNum"> 54 </span> : : be32_to_cpu(cache-&gt;icache_size_kb),</a>
-<a name="55"><span class="lineNum"> 55 </span> : : be32_to_cpu(cache-&gt;l1_dcache_size_kb),</a>
-<a name="56"><span class="lineNum"> 56 </span> : : be32_to_cpu(cache-&gt;l2_dcache_size_kb),</a>
-<a name="57"><span class="lineNum"> 57 </span> : : be32_to_cpu(cache-&gt;l3_dcache_size_kb),</a>
-<a name="58"><span class="lineNum"> 58 </span> : : be32_to_cpu(cache-&gt;l35_dcache_size_kb));</a>
-<a name="59"><span class="lineNum"> 59 </span> : : </a>
-<a name="60"><span class="lineNum"> 60 </span> : : /* Use the boot CPU PVR to make up a CPU name in the device-tree</a>
-<a name="61"><span class="lineNum"> 61 </span> : : * since the HDAT doesn't seem to tell....</a>
-<a name="62"><span class="lineNum"> 62 </span> : : */</a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 26 : version = mfspr(SPR_PVR);</span></a>
-<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 26 : switch(PVR_TYPE(version)) {</span></a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 26 : case PVR_TYPE_P8E:</span></a>
-<a name="66"><span class="lineNum"> 66 </span> : : case PVR_TYPE_P8:</a>
-<a name="67"><span class="lineNum"> 67 </span> : : case PVR_TYPE_P8NVL:</a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 26 : name = &quot;PowerPC,POWER8&quot;;</span></a>
-<a name="69"><span class="lineNum"> 69 </span> :<span class="lineCov"> 26 : pa_features = pa_features_p8;</span></a>
-<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 26 : pa_features_size = sizeof(pa_features_p8);</span></a>
-<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 26 : break;</span></a>
-<a name="72"><span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : case PVR_TYPE_P9:</span></a>
-<a name="73"><span class="lineNum"> 73 </span> : : case PVR_TYPE_P9P:</a>
-<a name="74"><span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : name = &quot;PowerPC,POWER9&quot;;</span></a>
-<a name="75"><span class="lineNum"> 75 </span> :<span class="lineNoCov"> 0 : if (is_power9n(version) &amp;&amp;</span></a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : (PVR_VERS_MAJ(version) == 2) &amp;&amp;</span></a>
-<a name="77"><span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : (PVR_VERS_MIN(version) == 0)) {</span></a>
-<a name="78"><span class="lineNum"> 78 </span> : : /* P9N DD2.0 */</a>
-<a name="79"><span class="lineNum"> 79 </span> :<span class="lineNoCov"> 0 : pa_features = pa_features_p9n_dd20;</span></a>
-<a name="80"><span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : pa_features_size = sizeof(pa_features_p9n_dd20);</span></a>
-<a name="81"><span class="lineNum"> 81 </span> : : } else {</a>
-<a name="82"><span class="lineNum"> 82 </span> :<span class="lineNoCov"> 0 : pa_features = pa_features_p9;</span></a>
-<a name="83"><span class="lineNum"> 83 </span> :<span class="lineNoCov"> 0 : pa_features_size = sizeof(pa_features_p9);</span></a>
-<a name="84"><span class="lineNum"> 84 </span> : : }</a>
-<a name="85"><span class="lineNum"> 85 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="86"><span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : default:</span></a>
-<a name="87"><span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : name = &quot;PowerPC,Unknown&quot;;</span></a>
-<a name="88"><span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : pa_features = NULL;</span></a>
-<a name="89"><span class="lineNum"> 89 </span> : : }</a>
-<a name="90"><span class="lineNum"> 90 </span> : : </a>
-<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 26 : cpu = dt_new_addr(cpus, name, int_server);</span></a>
-<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 26 : assert(cpu);</span></a>
-<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 26 : dt_add_property_string(cpu, &quot;device_type&quot;, &quot;cpu&quot;);</span></a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 26 : dt_add_property_string(cpu, &quot;status&quot;, okay ? &quot;okay&quot; : &quot;bad&quot;);</span></a>
-<a name="95"><span class="lineNum"> 95 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;reg&quot;, int_server);</span></a>
-<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;cpu-version&quot;, version);</span></a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 26 : dt_add_property(cpu, &quot;64-bit&quot;, NULL, 0);</span></a>
-<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 26 : dt_add_property(cpu, &quot;32-64-bridge&quot;, NULL, 0);</span></a>
-<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 26 : dt_add_property(cpu, &quot;graphics&quot;, NULL, 0);</span></a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 26 : dt_add_property(cpu, &quot;general-purpose&quot;, NULL, 0);</span></a>
-<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,processor-segment-sizes&quot;,</span></a>
-<a name="102"><span class="lineNum"> 102 </span> : : 0x1c, 0x28, 0xffffffff, 0xffffffff);</a>
-<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,processor-page-sizes&quot;,</span></a>
-<a name="104"><span class="lineNum"> 104 </span> : : 0xc, 0x10, 0x18, 0x22);</a>
-<a name="105"><span class="lineNum"> 105 </span> : : </a>
-<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 26 : if (proc_gen == proc_gen_p9)</span></a>
-<a name="107"><span class="lineNum"> 107 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(cpu, &quot;ibm,processor-radix-AP-encodings&quot;,</span></a>
-<a name="108"><span class="lineNum"> 108 </span> : : 0x0000000c, 0xa0000010, 0x20000015, 0x4000001e);</a>
-<a name="109"><span class="lineNum"> 109 </span> : : </a>
-<a name="110"><span class="lineNum"> 110 </span> : : /* HPT segment page size encodings, common to all supported CPUs */</a>
-<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,segment-page-sizes&quot;,</span></a>
-<a name="112"><span class="lineNum"> 112 </span> : : 0x0c, 0x000, 3, 0x0c, 0x0000, /* 4K seg 4k pages */</a>
-<a name="113"><span class="lineNum"> 113 </span> : : 0x10, 0x0007, /* 4K seg 64k pages */</a>
-<a name="114"><span class="lineNum"> 114 </span> : : 0x18, 0x0038, /* 4K seg 16M pages */</a>
-<a name="115"><span class="lineNum"> 115 </span> : : 0x10, 0x110, 2, 0x10, 0x0001, /* 64K seg 64k pages */</a>
-<a name="116"><span class="lineNum"> 116 </span> : : 0x18, 0x0008, /* 64K seg 16M pages */</a>
-<a name="117"><span class="lineNum"> 117 </span> : : 0x18, 0x100, 1, 0x18, 0x0000, /* 16M seg 16M pages */</a>
-<a name="118"><span class="lineNum"> 118 </span> : : 0x22, 0x120, 1, 0x22, 0x0003); /* 16G seg 16G pages */</a>
-<a name="119"><span class="lineNum"> 119 </span> : : </a>
-<a name="120"><span class="lineNum"> 120 </span> : : </a>
-<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 26 : if (pa_features) {</span></a>
-<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 26 : dt_add_property(cpu, &quot;ibm,pa-features&quot;,</span></a>
-<a name="123"><span class="lineNum"> 123 </span> : : pa_features, pa_features_size);</a>
-<a name="124"><span class="lineNum"> 124 </span> : : }</a>
-<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,slb-size&quot;, 0x20);</span></a>
-<a name="126"><span class="lineNum"> 126 </span> : : </a>
-<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,vmx&quot;, 0x2);</span></a>
-<a name="128"><span class="lineNum"> 128 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,dfp&quot;, 0x2);</span></a>
-<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,purr&quot;, 0x1);</span></a>
-<a name="130"><span class="lineNum"> 130 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,spurr&quot;, 0x1);</span></a>
-<a name="131"><span class="lineNum"> 131 </span> : : </a>
-<a name="132"><span class="lineNum"> 132 </span> : : /*</a>
-<a name="133"><span class="lineNum"> 133 </span> : : * Do not create &quot;clock-frequency&quot; if the frequency doesn't</a>
-<a name="134"><span class="lineNum"> 134 </span> : : * fit in a single cell</a>
-<a name="135"><span class="lineNum"> 135 </span> : : */</a>
-<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 26 : freq = ((uint64_t)be32_to_cpu(tb-&gt;actual_clock_speed)) * 1000000ul;</span></a>
-<a name="137"><span class="lineNum"> 137 </span> :<span class="lineCov"> 26 : if (freq &lt;= 0xfffffffful)</span></a>
-<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;clock-frequency&quot;, freq);</span></a>
-<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 26 : dt_add_property_u64(cpu, &quot;ibm,extended-clock-frequency&quot;, freq);</span></a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 26 : const uint8_t pa_features_p10[] = {</span></a>
+<a name="50"><span class="lineNum"> 50 </span> : : 66, 0,</a>
+<a name="51"><span class="lineNum"> 51 </span> : : 0xf6, 0x3f, 0xc7, 0xc0, 0x80, 0xd0, 0x80, 0x00, /* 0 .. 7 */</a>
+<a name="52"><span class="lineNum"> 52 </span> : : 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 8 .. 15 */</a>
+<a name="53"><span class="lineNum"> 53 </span> : : 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, /* 16 .. 23 */</a>
+<a name="54"><span class="lineNum"> 54 </span> : : 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, /* 24 .. 31 */</a>
+<a name="55"><span class="lineNum"> 55 </span> : : 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, /* 32 .. 39 */</a>
+<a name="56"><span class="lineNum"> 56 </span> : : 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, /* 40 .. 47 */</a>
+<a name="57"><span class="lineNum"> 57 </span> : : 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, /* 48 .. 55 */</a>
+<a name="58"><span class="lineNum"> 58 </span> : : 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, /* 56 .. 63 */</a>
+<a name="59"><span class="lineNum"> 59 </span> : : 0x80, 0x00, /* 64 .. 65 */</a>
+<a name="60"><span class="lineNum"> 60 </span> : : };</a>
+<a name="61"><span class="lineNum"> 61 </span> : : </a>
+<a name="62"><span class="lineNum"> 62 </span> : : const uint8_t *pa_features;</a>
+<a name="63"><span class="lineNum"> 63 </span> : : size_t pa_features_size;</a>
+<a name="64"><span class="lineNum"> 64 </span> : : </a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 26 : prlog(PR_INFO, &quot; Cache: I=%u D=%u/%u/%u/%u\n&quot;,</span></a>
+<a name="66"><span class="lineNum"> 66 </span> : : be32_to_cpu(cache-&gt;icache_size_kb),</a>
+<a name="67"><span class="lineNum"> 67 </span> : : be32_to_cpu(cache-&gt;l1_dcache_size_kb),</a>
+<a name="68"><span class="lineNum"> 68 </span> : : be32_to_cpu(cache-&gt;l2_dcache_size_kb),</a>
+<a name="69"><span class="lineNum"> 69 </span> : : be32_to_cpu(cache-&gt;l3_dcache_size_kb),</a>
+<a name="70"><span class="lineNum"> 70 </span> : : be32_to_cpu(cache-&gt;l35_dcache_size_kb));</a>
+<a name="71"><span class="lineNum"> 71 </span> : : </a>
+<a name="72"><span class="lineNum"> 72 </span> : : /* Use the boot CPU PVR to make up a CPU name in the device-tree</a>
+<a name="73"><span class="lineNum"> 73 </span> : : * since the HDAT doesn't seem to tell....</a>
+<a name="74"><span class="lineNum"> 74 </span> : : */</a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 26 : version = mfspr(SPR_PVR);</span></a>
+<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 26 : switch(PVR_TYPE(version)) {</span></a>
+<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 26 : case PVR_TYPE_P8E:</span></a>
+<a name="78"><span class="lineNum"> 78 </span> : : case PVR_TYPE_P8:</a>
+<a name="79"><span class="lineNum"> 79 </span> : : case PVR_TYPE_P8NVL:</a>
+<a name="80"><span class="lineNum"> 80 </span> :<span class="lineCov"> 26 : name = &quot;PowerPC,POWER8&quot;;</span></a>
+<a name="81"><span class="lineNum"> 81 </span> :<span class="lineCov"> 26 : pa_features = pa_features_p8;</span></a>
+<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 26 : pa_features_size = sizeof(pa_features_p8);</span></a>
+<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 26 : break;</span></a>
+<a name="84"><span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : case PVR_TYPE_P9:</span></a>
+<a name="85"><span class="lineNum"> 85 </span> : : case PVR_TYPE_P9P:</a>
+<a name="86"><span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : name = &quot;PowerPC,POWER9&quot;;</span></a>
+<a name="87"><span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : if (is_power9n(version) &amp;&amp;</span></a>
+<a name="88"><span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : (PVR_VERS_MAJ(version) == 2) &amp;&amp;</span></a>
+<a name="89"><span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : (PVR_VERS_MIN(version) == 0)) {</span></a>
+<a name="90"><span class="lineNum"> 90 </span> : : /* P9N DD2.0 */</a>
+<a name="91"><span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : pa_features = pa_features_p9n_dd20;</span></a>
+<a name="92"><span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : pa_features_size = sizeof(pa_features_p9n_dd20);</span></a>
+<a name="93"><span class="lineNum"> 93 </span> : : } else {</a>
+<a name="94"><span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : pa_features = pa_features_p9;</span></a>
+<a name="95"><span class="lineNum"> 95 </span> :<span class="lineNoCov"> 0 : pa_features_size = sizeof(pa_features_p9);</span></a>
+<a name="96"><span class="lineNum"> 96 </span> : : }</a>
+<a name="97"><span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="98"><span class="lineNum"> 98 </span> :<span class="lineNoCov"> 0 : case PVR_TYPE_P10:</span></a>
+<a name="99"><span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : name = &quot;PowerPC,POWER10&quot;;</span></a>
+<a name="100"><span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : pa_features = pa_features_p10;</span></a>
+<a name="101"><span class="lineNum"> 101 </span> :<span class="lineNoCov"> 0 : pa_features_size = sizeof(pa_features_p10);</span></a>
+<a name="102"><span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="103"><span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="104"><span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : name = &quot;PowerPC,Unknown&quot;;</span></a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : pa_features = NULL;</span></a>
+<a name="106"><span class="lineNum"> 106 </span> : : }</a>
+<a name="107"><span class="lineNum"> 107 </span> : : </a>
+<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 26 : cpu = dt_new_addr(cpus, name, int_server);</span></a>
+<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 26 : assert(cpu);</span></a>
+<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 26 : dt_add_property_string(cpu, &quot;device_type&quot;, &quot;cpu&quot;);</span></a>
+<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 26 : dt_add_property_string(cpu, &quot;status&quot;, okay ? &quot;okay&quot; : &quot;bad&quot;);</span></a>
+<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;reg&quot;, int_server);</span></a>
+<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;cpu-version&quot;, version);</span></a>
+<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 26 : dt_add_property(cpu, &quot;64-bit&quot;, NULL, 0);</span></a>
+<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 26 : dt_add_property(cpu, &quot;32-64-bridge&quot;, NULL, 0);</span></a>
+<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 26 : dt_add_property(cpu, &quot;graphics&quot;, NULL, 0);</span></a>
+<a name="117"><span class="lineNum"> 117 </span> :<span class="lineCov"> 26 : dt_add_property(cpu, &quot;general-purpose&quot;, NULL, 0);</span></a>
+<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,processor-segment-sizes&quot;,</span></a>
+<a name="119"><span class="lineNum"> 119 </span> : : 0x1c, 0x28, 0xffffffff, 0xffffffff);</a>
+<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,processor-page-sizes&quot;,</span></a>
+<a name="121"><span class="lineNum"> 121 </span> : : 0xc, 0x10, 0x18, 0x22);</a>
+<a name="122"><span class="lineNum"> 122 </span> : : </a>
+<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 26 : if (proc_gen &gt;= proc_gen_p9)</span></a>
+<a name="124"><span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(cpu, &quot;ibm,processor-radix-AP-encodings&quot;,</span></a>
+<a name="125"><span class="lineNum"> 125 </span> : : 0x0000000c, 0xa0000010, 0x20000015, 0x4000001e);</a>
+<a name="126"><span class="lineNum"> 126 </span> :<span class="lineCov"> 26 : if (proc_gen &gt;= proc_gen_p10) {</span></a>
+<a name="127"><span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(cpu, &quot;ibm,mmu-pid-bits&quot;, 20);</span></a>
+<a name="128"><span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(cpu, &quot;ibm,mmu-lpid-bits&quot;, 12);</span></a>
+<a name="129"><span class="lineNum"> 129 </span> : : }</a>
+<a name="130"><span class="lineNum"> 130 </span> : : </a>
+<a name="131"><span class="lineNum"> 131 </span> : : /* HPT segment page size encodings, common to all supported CPUs */</a>
+<a name="132"><span class="lineNum"> 132 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,segment-page-sizes&quot;,</span></a>
+<a name="133"><span class="lineNum"> 133 </span> : : 0x0c, 0x000, 3, 0x0c, 0x0000, /* 4K seg 4k pages */</a>
+<a name="134"><span class="lineNum"> 134 </span> : : 0x10, 0x0007, /* 4K seg 64k pages */</a>
+<a name="135"><span class="lineNum"> 135 </span> : : 0x18, 0x0038, /* 4K seg 16M pages */</a>
+<a name="136"><span class="lineNum"> 136 </span> : : 0x10, 0x110, 2, 0x10, 0x0001, /* 64K seg 64k pages */</a>
+<a name="137"><span class="lineNum"> 137 </span> : : 0x18, 0x0008, /* 64K seg 16M pages */</a>
+<a name="138"><span class="lineNum"> 138 </span> : : 0x18, 0x100, 1, 0x18, 0x0000, /* 16M seg 16M pages */</a>
+<a name="139"><span class="lineNum"> 139 </span> : : 0x22, 0x120, 1, 0x22, 0x0003); /* 16G seg 16G pages */</a>
<a name="140"><span class="lineNum"> 140 </span> : : </a>
-<a name="141"><span class="lineNum"> 141 </span> : : /* FIXME: Hardcoding is bad. */</a>
-<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;timebase-frequency&quot;, 512000000);</span></a>
-<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,extended-timebase-frequency&quot;,</span></a>
-<a name="144"><span class="lineNum"> 144 </span> : : 0, 512000000);</a>
-<a name="145"><span class="lineNum"> 145 </span> : : </a>
-<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;reservation-granule-size&quot;,</span></a>
-<a name="147"><span class="lineNum"> 147 </span> : : be32_to_cpu(cache-&gt;reservation_size));</a>
-<a name="148"><span class="lineNum"> 148 </span> : : </a>
-<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;d-tlb-size&quot;,</span></a>
-<a name="150"><span class="lineNum"> 150 </span> : : be32_to_cpu(cache-&gt;dtlb_entries));</a>
-<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;i-tlb-size&quot;,</span></a>
-<a name="152"><span class="lineNum"> 152 </span> : : be32_to_cpu(cache-&gt;itlb_entries));</a>
-<a name="153"><span class="lineNum"> 153 </span> : : /* Assume unified TLB */</a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;tlb-size&quot;,</span></a>
-<a name="155"><span class="lineNum"> 155 </span> : : be32_to_cpu(cache-&gt;dtlb_entries));</a>
-<a name="156"><span class="lineNum"> 156 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;d-tlb-sets&quot;,</span></a>
-<a name="157"><span class="lineNum"> 157 </span> : : be32_to_cpu(cache-&gt;dtlb_assoc_sets));</a>
-<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;i-tlb-sets&quot;,</span></a>
-<a name="159"><span class="lineNum"> 159 </span> : : be32_to_cpu(cache-&gt;itlb_assoc_sets));</a>
-<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;tlb-sets&quot;,</span></a>
-<a name="161"><span class="lineNum"> 161 </span> : : be32_to_cpu(cache-&gt;dtlb_assoc_sets));</a>
-<a name="162"><span class="lineNum"> 162 </span> : : </a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;d-cache-block-size&quot;,</span></a>
-<a name="164"><span class="lineNum"> 164 </span> : : be32_to_cpu(cache-&gt;dcache_block_size));</a>
-<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;i-cache-block-size&quot;,</span></a>
-<a name="166"><span class="lineNum"> 166 </span> : : be32_to_cpu(cache-&gt;icache_block_size));</a>
-<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;d-cache-size&quot;,</span></a>
-<a name="168"><span class="lineNum"> 168 </span> : : be32_to_cpu(cache-&gt;l1_dcache_size_kb)*1024);</a>
-<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;i-cache-size&quot;,</span></a>
-<a name="170"><span class="lineNum"> 170 </span> : : be32_to_cpu(cache-&gt;icache_size_kb)*1024);</a>
-<a name="171"><span class="lineNum"> 171 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;i-cache-sets&quot;,</span></a>
-<a name="172"><span class="lineNum"> 172 </span> : : be32_to_cpu(cache-&gt;icache_assoc_sets));</a>
-<a name="173"><span class="lineNum"> 173 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;d-cache-sets&quot;,</span></a>
-<a name="174"><span class="lineNum"> 174 </span> : : be32_to_cpu(cache-&gt;dcache_assoc_sets));</a>
-<a name="175"><span class="lineNum"> 175 </span> : : </a>
-<a name="176"><span class="lineNum"> 176 </span> :<span class="lineCov"> 26 : if (cache-&gt;icache_line_size != cache-&gt;icache_block_size)</span></a>
-<a name="177"><span class="lineNum"> 177 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(cpu, &quot;i-cache-line-size&quot;,</span></a>
-<a name="178"><span class="lineNum"> 178 </span> : : be32_to_cpu(cache-&gt;icache_line_size));</a>
-<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 26 : if (cache-&gt;l1_dcache_line_size != cache-&gt;dcache_block_size)</span></a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(cpu, &quot;d-cache-line-size&quot;,</span></a>
-<a name="181"><span class="lineNum"> 181 </span> : : be32_to_cpu(cache-&gt;l1_dcache_line_size));</a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 26 : return cpu;</span></a>
-<a name="183"><span class="lineNum"> 183 </span> : : }</a>
-<a name="184"><span class="lineNum"> 184 </span> : : </a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 26 : void add_core_attr(struct dt_node *cpu, uint32_t attr)</span></a>
-<a name="186"><span class="lineNum"> 186 </span> : : {</a>
-<a name="187"><span class="lineNum"> 187 </span> :<span class="lineCov"> 26 : if (attr &amp; CPU_ATTR_UNIFIED_PL1)</span></a>
-<a name="188"><span class="lineNum"> 188 </span> :<span class="lineNoCov"> 0 : dt_add_property(cpu, &quot;cache-unified&quot;, NULL, 0);</span></a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 26 : if (attr &amp; CPU_ATTR_SPLIT_TLB)</span></a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : dt_add_property(cpu, &quot;tlb-split&quot;, NULL, 0);</span></a>
-<a name="191"><span class="lineNum"> 191 </span> :<span class="lineCov"> 26 : if (attr &amp; CPU_ATTR_TLBIA)</span></a>
-<a name="192"><span class="lineNum"> 192 </span> :<span class="lineNoCov"> 0 : dt_add_property(cpu, &quot;tlbia&quot;, NULL, 0);</span></a>
-<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 26 : if (attr &amp; CPU_ATTR_PERF_MONITOR)</span></a>
-<a name="194"><span class="lineNum"> 194 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;performance-monitor&quot;, 0, 1);</span></a>
-<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 26 : if (attr &amp; CPU_ATTR_EXTERN_CONT)</span></a>
-<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : dt_add_property(cpu, &quot;external-control&quot;, NULL, 0);</span></a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 26 : }</span></a>
-<a name="198"><span class="lineNum"> 198 </span> : : </a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineCov"> 52 : static struct dt_node *create_cache_node(struct dt_node *cpus,</span></a>
-<a name="200"><span class="lineNum"> 200 </span> : : const struct sppcia_cpu_cache *cache,</a>
-<a name="201"><span class="lineNum"> 201 </span> : : const char *name, uint32_t unit_addr,</a>
-<a name="202"><span class="lineNum"> 202 </span> : : int okay)</a>
-<a name="203"><span class="lineNum"> 203 </span> : : {</a>
-<a name="204"><span class="lineNum"> 204 </span> : : struct dt_node *node;</a>
+<a name="141"><span class="lineNum"> 141 </span> : : </a>
+<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 26 : if (pa_features) {</span></a>
+<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 26 : dt_add_property(cpu, &quot;ibm,pa-features&quot;,</span></a>
+<a name="144"><span class="lineNum"> 144 </span> : : pa_features, pa_features_size);</a>
+<a name="145"><span class="lineNum"> 145 </span> : : }</a>
+<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,slb-size&quot;, 0x20);</span></a>
+<a name="147"><span class="lineNum"> 147 </span> : : </a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,vmx&quot;, 0x2);</span></a>
+<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,dfp&quot;, 0x2);</span></a>
+<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,purr&quot;, 0x1);</span></a>
+<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,spurr&quot;, 0x1);</span></a>
+<a name="152"><span class="lineNum"> 152 </span> : : </a>
+<a name="153"><span class="lineNum"> 153 </span> : : /*</a>
+<a name="154"><span class="lineNum"> 154 </span> : : * Do not create &quot;clock-frequency&quot; if the frequency doesn't</a>
+<a name="155"><span class="lineNum"> 155 </span> : : * fit in a single cell</a>
+<a name="156"><span class="lineNum"> 156 </span> : : */</a>
+<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 26 : freq = ((uint64_t)be32_to_cpu(tb-&gt;actual_clock_speed)) * 1000000ul;</span></a>
+<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 26 : if (freq &lt;= 0xfffffffful)</span></a>
+<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;clock-frequency&quot;, freq);</span></a>
+<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 26 : dt_add_property_u64(cpu, &quot;ibm,extended-clock-frequency&quot;, freq);</span></a>
+<a name="161"><span class="lineNum"> 161 </span> : : </a>
+<a name="162"><span class="lineNum"> 162 </span> : : /* FIXME: Hardcoding is bad. */</a>
+<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;timebase-frequency&quot;, 512000000);</span></a>
+<a name="164"><span class="lineNum"> 164 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,extended-timebase-frequency&quot;,</span></a>
+<a name="165"><span class="lineNum"> 165 </span> : : 0, 512000000);</a>
+<a name="166"><span class="lineNum"> 166 </span> : : </a>
+<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;reservation-granule-size&quot;,</span></a>
+<a name="168"><span class="lineNum"> 168 </span> : : be32_to_cpu(cache-&gt;reservation_size));</a>
+<a name="169"><span class="lineNum"> 169 </span> : : </a>
+<a name="170"><span class="lineNum"> 170 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;d-tlb-size&quot;,</span></a>
+<a name="171"><span class="lineNum"> 171 </span> : : be32_to_cpu(cache-&gt;dtlb_entries));</a>
+<a name="172"><span class="lineNum"> 172 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;i-tlb-size&quot;,</span></a>
+<a name="173"><span class="lineNum"> 173 </span> : : be32_to_cpu(cache-&gt;itlb_entries));</a>
+<a name="174"><span class="lineNum"> 174 </span> : : /* Assume unified TLB */</a>
+<a name="175"><span class="lineNum"> 175 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;tlb-size&quot;,</span></a>
+<a name="176"><span class="lineNum"> 176 </span> : : be32_to_cpu(cache-&gt;dtlb_entries));</a>
+<a name="177"><span class="lineNum"> 177 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;d-tlb-sets&quot;,</span></a>
+<a name="178"><span class="lineNum"> 178 </span> : : be32_to_cpu(cache-&gt;dtlb_assoc_sets));</a>
+<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;i-tlb-sets&quot;,</span></a>
+<a name="180"><span class="lineNum"> 180 </span> : : be32_to_cpu(cache-&gt;itlb_assoc_sets));</a>
+<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;tlb-sets&quot;,</span></a>
+<a name="182"><span class="lineNum"> 182 </span> : : be32_to_cpu(cache-&gt;dtlb_assoc_sets));</a>
+<a name="183"><span class="lineNum"> 183 </span> : : </a>
+<a name="184"><span class="lineNum"> 184 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;d-cache-block-size&quot;,</span></a>
+<a name="185"><span class="lineNum"> 185 </span> : : be32_to_cpu(cache-&gt;dcache_block_size));</a>
+<a name="186"><span class="lineNum"> 186 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;i-cache-block-size&quot;,</span></a>
+<a name="187"><span class="lineNum"> 187 </span> : : be32_to_cpu(cache-&gt;icache_block_size));</a>
+<a name="188"><span class="lineNum"> 188 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;d-cache-size&quot;,</span></a>
+<a name="189"><span class="lineNum"> 189 </span> : : be32_to_cpu(cache-&gt;l1_dcache_size_kb)*1024);</a>
+<a name="190"><span class="lineNum"> 190 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;i-cache-size&quot;,</span></a>
+<a name="191"><span class="lineNum"> 191 </span> : : be32_to_cpu(cache-&gt;icache_size_kb)*1024);</a>
+<a name="192"><span class="lineNum"> 192 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;i-cache-sets&quot;,</span></a>
+<a name="193"><span class="lineNum"> 193 </span> : : be32_to_cpu(cache-&gt;icache_assoc_sets));</a>
+<a name="194"><span class="lineNum"> 194 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;d-cache-sets&quot;,</span></a>
+<a name="195"><span class="lineNum"> 195 </span> : : be32_to_cpu(cache-&gt;dcache_assoc_sets));</a>
+<a name="196"><span class="lineNum"> 196 </span> : : </a>
+<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 26 : if (cache-&gt;icache_line_size != cache-&gt;icache_block_size)</span></a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(cpu, &quot;i-cache-line-size&quot;,</span></a>
+<a name="199"><span class="lineNum"> 199 </span> : : be32_to_cpu(cache-&gt;icache_line_size));</a>
+<a name="200"><span class="lineNum"> 200 </span> :<span class="lineCov"> 26 : if (cache-&gt;l1_dcache_line_size != cache-&gt;dcache_block_size)</span></a>
+<a name="201"><span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(cpu, &quot;d-cache-line-size&quot;,</span></a>
+<a name="202"><span class="lineNum"> 202 </span> : : be32_to_cpu(cache-&gt;l1_dcache_line_size));</a>
+<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 26 : return cpu;</span></a>
+<a name="204"><span class="lineNum"> 204 </span> : : }</a>
<a name="205"><span class="lineNum"> 205 </span> : : </a>
-<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 52 : node = dt_new_addr(cpus, name, unit_addr);</span></a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 52 : assert(node);</span></a>
-<a name="208"><span class="lineNum"> 208 </span> : : </a>
-<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 52 : dt_add_property_string(node, &quot;device_type&quot;, &quot;cache&quot;);</span></a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 52 : dt_add_property_cells(node, &quot;reg&quot;, unit_addr);</span></a>
-<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 52 : dt_add_property_string(node, &quot;status&quot;, okay ? &quot;okay&quot; : &quot;bad&quot;);</span></a>
-<a name="212"><span class="lineNum"> 212 </span> :<span class="lineCov"> 52 : dt_add_property(node, &quot;cache-unified&quot;, NULL, 0);</span></a>
-<a name="213"><span class="lineNum"> 213 </span> : : </a>
-<a name="214"><span class="lineNum"> 214 </span> : : /* Assume cache associavitity sets is same for L2, L3 and L3.5 */</a>
-<a name="215"><span class="lineNum"> 215 </span> :<span class="lineCov"> 52 : dt_add_property_cells(node, &quot;d-cache-sets&quot;,</span></a>
-<a name="216"><span class="lineNum"> 216 </span> : : be32_to_cpu(cache-&gt;l2_cache_assoc_sets));</a>
-<a name="217"><span class="lineNum"> 217 </span> :<span class="lineCov"> 52 : dt_add_property_cells(node, &quot;i-cache-sets&quot;,</span></a>
-<a name="218"><span class="lineNum"> 218 </span> : : be32_to_cpu(cache-&gt;l2_cache_assoc_sets));</a>
+<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 26 : void add_core_attr(struct dt_node *cpu, uint32_t attr)</span></a>
+<a name="207"><span class="lineNum"> 207 </span> : : {</a>
+<a name="208"><span class="lineNum"> 208 </span> :<span class="lineCov"> 26 : if (attr &amp; CPU_ATTR_UNIFIED_PL1)</span></a>
+<a name="209"><span class="lineNum"> 209 </span> :<span class="lineNoCov"> 0 : dt_add_property(cpu, &quot;cache-unified&quot;, NULL, 0);</span></a>
+<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 26 : if (attr &amp; CPU_ATTR_SPLIT_TLB)</span></a>
+<a name="211"><span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : dt_add_property(cpu, &quot;tlb-split&quot;, NULL, 0);</span></a>
+<a name="212"><span class="lineNum"> 212 </span> :<span class="lineCov"> 26 : if (attr &amp; CPU_ATTR_TLBIA)</span></a>
+<a name="213"><span class="lineNum"> 213 </span> :<span class="lineNoCov"> 0 : dt_add_property(cpu, &quot;tlbia&quot;, NULL, 0);</span></a>
+<a name="214"><span class="lineNum"> 214 </span> :<span class="lineCov"> 26 : if (attr &amp; CPU_ATTR_PERF_MONITOR)</span></a>
+<a name="215"><span class="lineNum"> 215 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;performance-monitor&quot;, 0, 1);</span></a>
+<a name="216"><span class="lineNum"> 216 </span> :<span class="lineCov"> 26 : if (attr &amp; CPU_ATTR_EXTERN_CONT)</span></a>
+<a name="217"><span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : dt_add_property(cpu, &quot;external-control&quot;, NULL, 0);</span></a>
+<a name="218"><span class="lineNum"> 218 </span> :<span class="lineCov"> 26 : }</span></a>
<a name="219"><span class="lineNum"> 219 </span> : : </a>
-<a name="220"><span class="lineNum"> 220 </span> :<span class="lineCov"> 52 : return node;</span></a>
-<a name="221"><span class="lineNum"> 221 </span> : : }</a>
-<a name="222"><span class="lineNum"> 222 </span> : : </a>
-<a name="223"><span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : static struct dt_node *l35_cache_node(struct dt_node *cpus,</span></a>
-<a name="224"><span class="lineNum"> 224 </span> : : const struct sppcia_cpu_cache *cache,</a>
-<a name="225"><span class="lineNum"> 225 </span> : : uint32_t unit_addr, int okay)</a>
-<a name="226"><span class="lineNum"> 226 </span> : : {</a>
-<a name="227"><span class="lineNum"> 227 </span> : : struct dt_node *node;</a>
-<a name="228"><span class="lineNum"> 228 </span> : : </a>
-<a name="229"><span class="lineNum"> 229 </span> :<span class="lineNoCov"> 0 : node = create_cache_node(cpus, cache, &quot;l35-cache&quot;, unit_addr, okay);</span></a>
-<a name="230"><span class="lineNum"> 230 </span> : : </a>
-<a name="231"><span class="lineNum"> 231 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;d-cache-size&quot;,</span></a>
-<a name="232"><span class="lineNum"> 232 </span> : : be32_to_cpu(cache-&gt;l35_dcache_size_kb) * 1024);</a>
-<a name="233"><span class="lineNum"> 233 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;i-cache-size&quot;,</span></a>
-<a name="234"><span class="lineNum"> 234 </span> : : be32_to_cpu(cache-&gt;l35_dcache_size_kb) * 1024);</a>
-<a name="235"><span class="lineNum"> 235 </span> : : </a>
-<a name="236"><span class="lineNum"> 236 </span> :<span class="lineNoCov"> 0 : if (cache-&gt;icache_line_size != cache-&gt;icache_block_size)</span></a>
-<a name="237"><span class="lineNum"> 237 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;i-cache-line-size&quot;,</span></a>
-<a name="238"><span class="lineNum"> 238 </span> : : be32_to_cpu(cache-&gt;icache_line_size));</a>
-<a name="239"><span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : if (cache-&gt;l35_cache_line_size != cache-&gt;dcache_block_size)</span></a>
-<a name="240"><span class="lineNum"> 240 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;d-cache-line-size&quot;,</span></a>
-<a name="241"><span class="lineNum"> 241 </span> : : be32_to_cpu(cache-&gt;l35_cache_line_size));</a>
-<a name="242"><span class="lineNum"> 242 </span> : : </a>
-<a name="243"><span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : return node;</span></a>
-<a name="244"><span class="lineNum"> 244 </span> : : }</a>
-<a name="245"><span class="lineNum"> 245 </span> : : </a>
-<a name="246"><span class="lineNum"> 246 </span> :<span class="lineCov"> 26 : static struct dt_node *l3_cache_node(struct dt_node *cpus,</span></a>
-<a name="247"><span class="lineNum"> 247 </span> : : const struct sppcia_cpu_cache *cache,</a>
-<a name="248"><span class="lineNum"> 248 </span> : : uint32_t unit_addr, int okay)</a>
-<a name="249"><span class="lineNum"> 249 </span> : : {</a>
-<a name="250"><span class="lineNum"> 250 </span> : : struct dt_node *node;</a>
+<a name="220"><span class="lineNum"> 220 </span> :<span class="lineCov"> 52 : static struct dt_node *create_cache_node(struct dt_node *cpus,</span></a>
+<a name="221"><span class="lineNum"> 221 </span> : : const struct sppcia_cpu_cache *cache,</a>
+<a name="222"><span class="lineNum"> 222 </span> : : const char *name, uint32_t unit_addr,</a>
+<a name="223"><span class="lineNum"> 223 </span> : : int okay)</a>
+<a name="224"><span class="lineNum"> 224 </span> : : {</a>
+<a name="225"><span class="lineNum"> 225 </span> : : struct dt_node *node;</a>
+<a name="226"><span class="lineNum"> 226 </span> : : </a>
+<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 52 : node = dt_new_addr(cpus, name, unit_addr);</span></a>
+<a name="228"><span class="lineNum"> 228 </span> :<span class="lineCov"> 52 : assert(node);</span></a>
+<a name="229"><span class="lineNum"> 229 </span> : : </a>
+<a name="230"><span class="lineNum"> 230 </span> :<span class="lineCov"> 52 : dt_add_property_string(node, &quot;device_type&quot;, &quot;cache&quot;);</span></a>
+<a name="231"><span class="lineNum"> 231 </span> :<span class="lineCov"> 52 : dt_add_property_cells(node, &quot;reg&quot;, unit_addr);</span></a>
+<a name="232"><span class="lineNum"> 232 </span> :<span class="lineCov"> 52 : dt_add_property_string(node, &quot;status&quot;, okay ? &quot;okay&quot; : &quot;bad&quot;);</span></a>
+<a name="233"><span class="lineNum"> 233 </span> :<span class="lineCov"> 52 : dt_add_property(node, &quot;cache-unified&quot;, NULL, 0);</span></a>
+<a name="234"><span class="lineNum"> 234 </span> : : </a>
+<a name="235"><span class="lineNum"> 235 </span> : : /* Assume cache associavitity sets is same for L2, L3 and L3.5 */</a>
+<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 52 : dt_add_property_cells(node, &quot;d-cache-sets&quot;,</span></a>
+<a name="237"><span class="lineNum"> 237 </span> : : be32_to_cpu(cache-&gt;l2_cache_assoc_sets));</a>
+<a name="238"><span class="lineNum"> 238 </span> :<span class="lineCov"> 52 : dt_add_property_cells(node, &quot;i-cache-sets&quot;,</span></a>
+<a name="239"><span class="lineNum"> 239 </span> : : be32_to_cpu(cache-&gt;l2_cache_assoc_sets));</a>
+<a name="240"><span class="lineNum"> 240 </span> : : </a>
+<a name="241"><span class="lineNum"> 241 </span> :<span class="lineCov"> 52 : return node;</span></a>
+<a name="242"><span class="lineNum"> 242 </span> : : }</a>
+<a name="243"><span class="lineNum"> 243 </span> : : </a>
+<a name="244"><span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : static struct dt_node *l35_cache_node(struct dt_node *cpus,</span></a>
+<a name="245"><span class="lineNum"> 245 </span> : : const struct sppcia_cpu_cache *cache,</a>
+<a name="246"><span class="lineNum"> 246 </span> : : uint32_t unit_addr, int okay)</a>
+<a name="247"><span class="lineNum"> 247 </span> : : {</a>
+<a name="248"><span class="lineNum"> 248 </span> : : struct dt_node *node;</a>
+<a name="249"><span class="lineNum"> 249 </span> : : </a>
+<a name="250"><span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : node = create_cache_node(cpus, cache, &quot;l35-cache&quot;, unit_addr, okay);</span></a>
<a name="251"><span class="lineNum"> 251 </span> : : </a>
-<a name="252"><span class="lineNum"> 252 </span> :<span class="lineCov"> 26 : node = create_cache_node(cpus, cache, &quot;l3-cache&quot;, unit_addr, okay);</span></a>
-<a name="253"><span class="lineNum"> 253 </span> : : </a>
-<a name="254"><span class="lineNum"> 254 </span> :<span class="lineCov"> 26 : dt_add_property_cells(node, &quot;d-cache-size&quot;,</span></a>
-<a name="255"><span class="lineNum"> 255 </span> : : be32_to_cpu(cache-&gt;l3_dcache_size_kb) * 1024);</a>
-<a name="256"><span class="lineNum"> 256 </span> :<span class="lineCov"> 26 : dt_add_property_cells(node, &quot;i-cache-size&quot;,</span></a>
-<a name="257"><span class="lineNum"> 257 </span> : : be32_to_cpu(cache-&gt;l3_dcache_size_kb) * 1024);</a>
-<a name="258"><span class="lineNum"> 258 </span> : : </a>
-<a name="259"><span class="lineNum"> 259 </span> :<span class="lineCov"> 26 : if (cache-&gt;icache_line_size != cache-&gt;icache_block_size)</span></a>
-<a name="260"><span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;i-cache-line-size&quot;,</span></a>
-<a name="261"><span class="lineNum"> 261 </span> : : be32_to_cpu(cache-&gt;icache_line_size));</a>
-<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 26 : if (cache-&gt;l3_line_size != cache-&gt;dcache_block_size)</span></a>
-<a name="263"><span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;d-cache-line-size&quot;,</span></a>
-<a name="264"><span class="lineNum"> 264 </span> : : be32_to_cpu(cache-&gt;l3_line_size));</a>
-<a name="265"><span class="lineNum"> 265 </span> : : </a>
-<a name="266"><span class="lineNum"> 266 </span> :<span class="lineCov"> 26 : return node;</span></a>
-<a name="267"><span class="lineNum"> 267 </span> : : }</a>
-<a name="268"><span class="lineNum"> 268 </span> : : </a>
-<a name="269"><span class="lineNum"> 269 </span> :<span class="lineCov"> 26 : static struct dt_node *l2_cache_node(struct dt_node *cpus,</span></a>
-<a name="270"><span class="lineNum"> 270 </span> : : const struct sppcia_cpu_cache *cache,</a>
-<a name="271"><span class="lineNum"> 271 </span> : : uint32_t unit_addr, int okay)</a>
-<a name="272"><span class="lineNum"> 272 </span> : : {</a>
-<a name="273"><span class="lineNum"> 273 </span> : : struct dt_node *node;</a>
+<a name="252"><span class="lineNum"> 252 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;d-cache-size&quot;,</span></a>
+<a name="253"><span class="lineNum"> 253 </span> : : be32_to_cpu(cache-&gt;l35_dcache_size_kb) * 1024);</a>
+<a name="254"><span class="lineNum"> 254 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;i-cache-size&quot;,</span></a>
+<a name="255"><span class="lineNum"> 255 </span> : : be32_to_cpu(cache-&gt;l35_dcache_size_kb) * 1024);</a>
+<a name="256"><span class="lineNum"> 256 </span> : : </a>
+<a name="257"><span class="lineNum"> 257 </span> :<span class="lineNoCov"> 0 : if (cache-&gt;icache_line_size != cache-&gt;icache_block_size)</span></a>
+<a name="258"><span class="lineNum"> 258 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;i-cache-line-size&quot;,</span></a>
+<a name="259"><span class="lineNum"> 259 </span> : : be32_to_cpu(cache-&gt;icache_line_size));</a>
+<a name="260"><span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : if (cache-&gt;l35_cache_line_size != cache-&gt;dcache_block_size)</span></a>
+<a name="261"><span class="lineNum"> 261 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;d-cache-line-size&quot;,</span></a>
+<a name="262"><span class="lineNum"> 262 </span> : : be32_to_cpu(cache-&gt;l35_cache_line_size));</a>
+<a name="263"><span class="lineNum"> 263 </span> : : </a>
+<a name="264"><span class="lineNum"> 264 </span> :<span class="lineNoCov"> 0 : return node;</span></a>
+<a name="265"><span class="lineNum"> 265 </span> : : }</a>
+<a name="266"><span class="lineNum"> 266 </span> : : </a>
+<a name="267"><span class="lineNum"> 267 </span> :<span class="lineCov"> 26 : static struct dt_node *l3_cache_node(struct dt_node *cpus,</span></a>
+<a name="268"><span class="lineNum"> 268 </span> : : const struct sppcia_cpu_cache *cache,</a>
+<a name="269"><span class="lineNum"> 269 </span> : : uint32_t unit_addr, int okay)</a>
+<a name="270"><span class="lineNum"> 270 </span> : : {</a>
+<a name="271"><span class="lineNum"> 271 </span> : : struct dt_node *node;</a>
+<a name="272"><span class="lineNum"> 272 </span> : : </a>
+<a name="273"><span class="lineNum"> 273 </span> :<span class="lineCov"> 26 : node = create_cache_node(cpus, cache, &quot;l3-cache&quot;, unit_addr, okay);</span></a>
<a name="274"><span class="lineNum"> 274 </span> : : </a>
-<a name="275"><span class="lineNum"> 275 </span> :<span class="lineCov"> 26 : node = create_cache_node(cpus, cache, &quot;l2-cache&quot;, unit_addr, okay);</span></a>
-<a name="276"><span class="lineNum"> 276 </span> : : </a>
-<a name="277"><span class="lineNum"> 277 </span> :<span class="lineCov"> 26 : dt_add_property_cells(node, &quot;d-cache-size&quot;,</span></a>
-<a name="278"><span class="lineNum"> 278 </span> : : be32_to_cpu(cache-&gt;l2_dcache_size_kb) * 1024);</a>
-<a name="279"><span class="lineNum"> 279 </span> :<span class="lineCov"> 26 : dt_add_property_cells(node, &quot;i-cache-size&quot;,</span></a>
-<a name="280"><span class="lineNum"> 280 </span> : : be32_to_cpu(cache-&gt;l2_dcache_size_kb) * 1024);</a>
-<a name="281"><span class="lineNum"> 281 </span> : : </a>
-<a name="282"><span class="lineNum"> 282 </span> :<span class="lineCov"> 26 : if (cache-&gt;icache_line_size != cache-&gt;icache_block_size)</span></a>
-<a name="283"><span class="lineNum"> 283 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;i-cache-line-size&quot;,</span></a>
-<a name="284"><span class="lineNum"> 284 </span> : : be32_to_cpu(cache-&gt;icache_line_size));</a>
-<a name="285"><span class="lineNum"> 285 </span> :<span class="lineCov"> 26 : if (cache-&gt;l2_line_size != cache-&gt;dcache_block_size)</span></a>
-<a name="286"><span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;d-cache-line-size&quot;,</span></a>
-<a name="287"><span class="lineNum"> 287 </span> : : be32_to_cpu(cache-&gt;l2_line_size));</a>
-<a name="288"><span class="lineNum"> 288 </span> : : </a>
-<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 26 : return node;</span></a>
-<a name="290"><span class="lineNum"> 290 </span> : : }</a>
-<a name="291"><span class="lineNum"> 291 </span> : : </a>
-<a name="292"><span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : static struct dt_node *find_l2_node(struct dt_node *cpus, u32 unit_addr)</span></a>
+<a name="275"><span class="lineNum"> 275 </span> :<span class="lineCov"> 26 : dt_add_property_cells(node, &quot;d-cache-size&quot;,</span></a>
+<a name="276"><span class="lineNum"> 276 </span> : : be32_to_cpu(cache-&gt;l3_dcache_size_kb) * 1024);</a>
+<a name="277"><span class="lineNum"> 277 </span> :<span class="lineCov"> 26 : dt_add_property_cells(node, &quot;i-cache-size&quot;,</span></a>
+<a name="278"><span class="lineNum"> 278 </span> : : be32_to_cpu(cache-&gt;l3_dcache_size_kb) * 1024);</a>
+<a name="279"><span class="lineNum"> 279 </span> : : </a>
+<a name="280"><span class="lineNum"> 280 </span> :<span class="lineCov"> 26 : if (cache-&gt;icache_line_size != cache-&gt;icache_block_size)</span></a>
+<a name="281"><span class="lineNum"> 281 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;i-cache-line-size&quot;,</span></a>
+<a name="282"><span class="lineNum"> 282 </span> : : be32_to_cpu(cache-&gt;icache_line_size));</a>
+<a name="283"><span class="lineNum"> 283 </span> :<span class="lineCov"> 26 : if (cache-&gt;l3_line_size != cache-&gt;dcache_block_size)</span></a>
+<a name="284"><span class="lineNum"> 284 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;d-cache-line-size&quot;,</span></a>
+<a name="285"><span class="lineNum"> 285 </span> : : be32_to_cpu(cache-&gt;l3_line_size));</a>
+<a name="286"><span class="lineNum"> 286 </span> : : </a>
+<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 26 : return node;</span></a>
+<a name="288"><span class="lineNum"> 288 </span> : : }</a>
+<a name="289"><span class="lineNum"> 289 </span> : : </a>
+<a name="290"><span class="lineNum"> 290 </span> :<span class="lineCov"> 26 : static struct dt_node *l2_cache_node(struct dt_node *cpus,</span></a>
+<a name="291"><span class="lineNum"> 291 </span> : : const struct sppcia_cpu_cache *cache,</a>
+<a name="292"><span class="lineNum"> 292 </span> : : uint32_t unit_addr, int okay)</a>
<a name="293"><span class="lineNum"> 293 </span> : : {</a>
-<a name="294"><span class="lineNum"> 294 </span> : : char name[32];</a>
+<a name="294"><span class="lineNum"> 294 </span> : : struct dt_node *node;</a>
<a name="295"><span class="lineNum"> 295 </span> : : </a>
-<a name="296"><span class="lineNum"> 296 </span> :<span class="lineNoCov"> 0 : snprintf(name, sizeof(name), &quot;l2-cache@%.08x&quot;, unit_addr);</span></a>
-<a name="297"><span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : return dt_find_by_name(cpus, name);</span></a>
-<a name="298"><span class="lineNum"> 298 </span> : : }</a>
-<a name="299"><span class="lineNum"> 299 </span> : : </a>
-<a name="300"><span class="lineNum"> 300 </span> :<span class="lineCov"> 26 : uint32_t add_core_cache_info(struct dt_node *cpus,</span></a>
-<a name="301"><span class="lineNum"> 301 </span> : : const struct sppcia_cpu_cache *cache,</a>
-<a name="302"><span class="lineNum"> 302 </span> : : uint32_t core_pir, int okay)</a>
-<a name="303"><span class="lineNum"> 303 </span> : : {</a>
-<a name="304"><span class="lineNum"> 304 </span> : : struct dt_node *l2_node, *l3_node, *l35_node;</a>
-<a name="305"><span class="lineNum"> 305 </span> : : uint32_t unit_addr;</a>
-<a name="306"><span class="lineNum"> 306 </span> : : </a>
-<a name="307"><span class="lineNum"> 307 </span> : : /*</a>
-<a name="308"><span class="lineNum"> 308 </span> : : * On P9 the L2 is shared by pairs of SMT=4 cores. We only want</a>
-<a name="309"><span class="lineNum"> 309 </span> : : * to create a cache node for the first of these so we mask off</a>
-<a name="310"><span class="lineNum"> 310 </span> : : * the low PIR bits to get the unit address of the shared cache.</a>
-<a name="311"><span class="lineNum"> 311 </span> : : */</a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 26 : if (proc_gen == proc_gen_p9) {</span></a>
-<a name="313"><span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : core_pir &amp;= ~0x7;</span></a>
-<a name="314"><span class="lineNum"> 314 </span> : : </a>
-<a name="315"><span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : l2_node = find_l2_node(cpus, 0x20 &lt;&lt; 24 | core_pir);</span></a>
-<a name="316"><span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : if (l2_node)</span></a>
-<a name="317"><span class="lineNum"> 317 </span> :<span class="lineNoCov"> 0 : return l2_node-&gt;phandle;</span></a>
-<a name="318"><span class="lineNum"> 318 </span> : : }</a>
-<a name="319"><span class="lineNum"> 319 </span> : : </a>
-<a name="320"><span class="lineNum"> 320 </span> :<span class="lineCov"> 26 : unit_addr = 0x20 &lt;&lt; 24 | core_pir;</span></a>
-<a name="321"><span class="lineNum"> 321 </span> :<span class="lineCov"> 26 : l2_node = l2_cache_node(cpus, cache, unit_addr, okay);</span></a>
-<a name="322"><span class="lineNum"> 322 </span> : : </a>
-<a name="323"><span class="lineNum"> 323 </span> :<span class="lineCov"> 26 : unit_addr = 0x30 &lt;&lt; 24 | core_pir;</span></a>
-<a name="324"><span class="lineNum"> 324 </span> :<span class="lineCov"> 26 : l3_node = l3_cache_node(cpus, cache, unit_addr, okay);</span></a>
-<a name="325"><span class="lineNum"> 325 </span> : : </a>
-<a name="326"><span class="lineNum"> 326 </span> : : /* Represents the next level of cache in the memory hierarchy */</a>
-<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 26 : dt_add_property_cells(l2_node, &quot;l2-cache&quot;, l3_node-&gt;phandle);</span></a>
-<a name="328"><span class="lineNum"> 328 </span> : : </a>
-<a name="329"><span class="lineNum"> 329 </span> :<span class="lineCov"> 26 : if (be32_to_cpu(cache-&gt;l35_dcache_size_kb)) {</span></a>
-<a name="330"><span class="lineNum"> 330 </span> :<span class="lineNoCov"> 0 : unit_addr = 0x35 &lt;&lt; 24 | core_pir;</span></a>
-<a name="331"><span class="lineNum"> 331 </span> :<span class="lineNoCov"> 0 : l35_node = l35_cache_node(cpus, cache, unit_addr, okay);</span></a>
-<a name="332"><span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(l3_node, &quot;l2-cache&quot;, l35_node-&gt;phandle);</span></a>
-<a name="333"><span class="lineNum"> 333 </span> : : }</a>
-<a name="334"><span class="lineNum"> 334 </span> : : </a>
-<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 26 : return l2_node-&gt;phandle;</span></a>
-<a name="336"><span class="lineNum"> 336 </span> : : }</a>
+<a name="296"><span class="lineNum"> 296 </span> :<span class="lineCov"> 26 : node = create_cache_node(cpus, cache, &quot;l2-cache&quot;, unit_addr, okay);</span></a>
+<a name="297"><span class="lineNum"> 297 </span> : : </a>
+<a name="298"><span class="lineNum"> 298 </span> :<span class="lineCov"> 26 : dt_add_property_cells(node, &quot;d-cache-size&quot;,</span></a>
+<a name="299"><span class="lineNum"> 299 </span> : : be32_to_cpu(cache-&gt;l2_dcache_size_kb) * 1024);</a>
+<a name="300"><span class="lineNum"> 300 </span> :<span class="lineCov"> 26 : dt_add_property_cells(node, &quot;i-cache-size&quot;,</span></a>
+<a name="301"><span class="lineNum"> 301 </span> : : be32_to_cpu(cache-&gt;l2_dcache_size_kb) * 1024);</a>
+<a name="302"><span class="lineNum"> 302 </span> : : </a>
+<a name="303"><span class="lineNum"> 303 </span> :<span class="lineCov"> 26 : if (cache-&gt;icache_line_size != cache-&gt;icache_block_size)</span></a>
+<a name="304"><span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;i-cache-line-size&quot;,</span></a>
+<a name="305"><span class="lineNum"> 305 </span> : : be32_to_cpu(cache-&gt;icache_line_size));</a>
+<a name="306"><span class="lineNum"> 306 </span> :<span class="lineCov"> 26 : if (cache-&gt;l2_line_size != cache-&gt;dcache_block_size)</span></a>
+<a name="307"><span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;d-cache-line-size&quot;,</span></a>
+<a name="308"><span class="lineNum"> 308 </span> : : be32_to_cpu(cache-&gt;l2_line_size));</a>
+<a name="309"><span class="lineNum"> 309 </span> : : </a>
+<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 26 : return node;</span></a>
+<a name="311"><span class="lineNum"> 311 </span> : : }</a>
+<a name="312"><span class="lineNum"> 312 </span> : : </a>
+<a name="313"><span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : static struct dt_node *find_l2_node(struct dt_node *cpus, u32 unit_addr)</span></a>
+<a name="314"><span class="lineNum"> 314 </span> : : {</a>
+<a name="315"><span class="lineNum"> 315 </span> : : char name[32];</a>
+<a name="316"><span class="lineNum"> 316 </span> : : </a>
+<a name="317"><span class="lineNum"> 317 </span> :<span class="lineNoCov"> 0 : snprintf(name, sizeof(name), &quot;l2-cache@%.08x&quot;, unit_addr);</span></a>
+<a name="318"><span class="lineNum"> 318 </span> :<span class="lineNoCov"> 0 : return dt_find_by_name(cpus, name);</span></a>
+<a name="319"><span class="lineNum"> 319 </span> : : }</a>
+<a name="320"><span class="lineNum"> 320 </span> : : </a>
+<a name="321"><span class="lineNum"> 321 </span> :<span class="lineCov"> 26 : uint32_t add_core_cache_info(struct dt_node *cpus,</span></a>
+<a name="322"><span class="lineNum"> 322 </span> : : const struct sppcia_cpu_cache *cache,</a>
+<a name="323"><span class="lineNum"> 323 </span> : : uint32_t core_pir, int okay)</a>
+<a name="324"><span class="lineNum"> 324 </span> : : {</a>
+<a name="325"><span class="lineNum"> 325 </span> : : struct dt_node *l2_node, *l3_node, *l35_node;</a>
+<a name="326"><span class="lineNum"> 326 </span> : : uint32_t unit_addr;</a>
+<a name="327"><span class="lineNum"> 327 </span> : : </a>
+<a name="328"><span class="lineNum"> 328 </span> : : /*</a>
+<a name="329"><span class="lineNum"> 329 </span> : : * On P9 the L2 is shared by pairs of SMT=4 cores. We only want</a>
+<a name="330"><span class="lineNum"> 330 </span> : : * to create a cache node for the first of these so we mask off</a>
+<a name="331"><span class="lineNum"> 331 </span> : : * the low PIR bits to get the unit address of the shared cache.</a>
+<a name="332"><span class="lineNum"> 332 </span> : : */</a>
+<a name="333"><span class="lineNum"> 333 </span> :<span class="lineCov"> 26 : if (proc_gen == proc_gen_p9) {</span></a>
+<a name="334"><span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : core_pir &amp;= ~0x7;</span></a>
+<a name="335"><span class="lineNum"> 335 </span> : : </a>
+<a name="336"><span class="lineNum"> 336 </span> :<span class="lineNoCov"> 0 : l2_node = find_l2_node(cpus, 0x20 &lt;&lt; 24 | core_pir);</span></a>
+<a name="337"><span class="lineNum"> 337 </span> :<span class="lineNoCov"> 0 : if (l2_node)</span></a>
+<a name="338"><span class="lineNum"> 338 </span> :<span class="lineNoCov"> 0 : return l2_node-&gt;phandle;</span></a>
+<a name="339"><span class="lineNum"> 339 </span> : : }</a>
+<a name="340"><span class="lineNum"> 340 </span> : : </a>
+<a name="341"><span class="lineNum"> 341 </span> :<span class="lineCov"> 26 : unit_addr = 0x20 &lt;&lt; 24 | core_pir;</span></a>
+<a name="342"><span class="lineNum"> 342 </span> :<span class="lineCov"> 26 : l2_node = l2_cache_node(cpus, cache, unit_addr, okay);</span></a>
+<a name="343"><span class="lineNum"> 343 </span> : : </a>
+<a name="344"><span class="lineNum"> 344 </span> :<span class="lineCov"> 26 : unit_addr = 0x30 &lt;&lt; 24 | core_pir;</span></a>
+<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 26 : l3_node = l3_cache_node(cpus, cache, unit_addr, okay);</span></a>
+<a name="346"><span class="lineNum"> 346 </span> : : </a>
+<a name="347"><span class="lineNum"> 347 </span> : : /* Represents the next level of cache in the memory hierarchy */</a>
+<a name="348"><span class="lineNum"> 348 </span> :<span class="lineCov"> 26 : dt_add_property_cells(l2_node, &quot;l2-cache&quot;, l3_node-&gt;phandle);</span></a>
+<a name="349"><span class="lineNum"> 349 </span> : : </a>
+<a name="350"><span class="lineNum"> 350 </span> :<span class="lineCov"> 26 : if (be32_to_cpu(cache-&gt;l35_dcache_size_kb)) {</span></a>
+<a name="351"><span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : unit_addr = 0x35 &lt;&lt; 24 | core_pir;</span></a>
+<a name="352"><span class="lineNum"> 352 </span> :<span class="lineNoCov"> 0 : l35_node = l35_cache_node(cpus, cache, unit_addr, okay);</span></a>
+<a name="353"><span class="lineNum"> 353 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(l3_node, &quot;l2-cache&quot;, l35_node-&gt;phandle);</span></a>
+<a name="354"><span class="lineNum"> 354 </span> : : }</a>
+<a name="355"><span class="lineNum"> 355 </span> : : </a>
+<a name="356"><span class="lineNum"> 356 </span> :<span class="lineCov"> 26 : return l2_node-&gt;phandle;</span></a>
+<a name="357"><span class="lineNum"> 357 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/hdata/fsp.c.func-sort-c.html b/coverage-report/hdata/fsp.c.func-sort-c.html
index 6c63ff9..f3a041d 100644
--- a/coverage-report/hdata/fsp.c.func-sort-c.html
+++ b/coverage-report/hdata/fsp.c.func-sort-c.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">90</td>
- <td class="headerCovTableEntry">240</td>
- <td class="headerCovTableEntryLo">37.5 %</td>
+ <td class="headerCovTableEntry">245</td>
+ <td class="headerCovTableEntryLo">36.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
@@ -89,7 +89,7 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fsp.c.gcov.html#485">bmc_parse</a></td>
+ <td class="coverFn"><a href="fsp.c.gcov.html#493">bmc_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
@@ -101,7 +101,7 @@
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="fsp.c.gcov.html#506">fsp_parse</a></td>
+ <td class="coverFn"><a href="fsp.c.gcov.html#514">fsp_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
diff --git a/coverage-report/hdata/fsp.c.func.html b/coverage-report/hdata/fsp.c.func.html
index 390a7d7..9402ee5 100644
--- a/coverage-report/hdata/fsp.c.func.html
+++ b/coverage-report/hdata/fsp.c.func.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">90</td>
- <td class="headerCovTableEntry">240</td>
- <td class="headerCovTableEntryLo">37.5 %</td>
+ <td class="headerCovTableEntry">245</td>
+ <td class="headerCovTableEntryLo">36.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
@@ -89,7 +89,7 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fsp.c.gcov.html#485">bmc_parse</a></td>
+ <td class="coverFn"><a href="fsp.c.gcov.html#493">bmc_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
@@ -109,7 +109,7 @@
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="fsp.c.gcov.html#506">fsp_parse</a></td>
+ <td class="coverFn"><a href="fsp.c.gcov.html#514">fsp_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
</table>
diff --git a/coverage-report/hdata/fsp.c.gcov.html b/coverage-report/hdata/fsp.c.gcov.html
index da2e626..a7605e8 100644
--- a/coverage-report/hdata/fsp.c.gcov.html
+++ b/coverage-report/hdata/fsp.c.gcov.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">90</td>
- <td class="headerCovTableEntry">240</td>
- <td class="headerCovTableEntryLo">37.5 %</td>
+ <td class="headerCovTableEntry">245</td>
+ <td class="headerCovTableEntryLo">36.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
@@ -368,7 +368,7 @@
<a name="297"><span class="lineNum"> 297 </span> : : }</a>
<a name="298"><span class="lineNum"> 298 </span> : : </a>
<a name="299"><span class="lineNum"> 299 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(sensor_node,</span></a>
-<a name="300"><span class="lineNum"> 300 </span> : : &quot;ibm,chip-id&quot;, be32_to_cpu(cinfo-&gt;xscom_id));</a>
+<a name="300"><span class="lineNum"> 300 </span> : : &quot;ibm,chip-id&quot;, get_xscom_id(cinfo));</a>
<a name="301"><span class="lineNum"> 301 </span> :<span class="lineNoCov"> 0 : return;</span></a>
<a name="302"><span class="lineNum"> 302 </span> : : }</a>
<a name="303"><span class="lineNum"> 303 </span> : : }</a>
@@ -426,201 +426,209 @@
<a name="355"><span class="lineNum"> 355 </span> :<span class="lineNoCov"> 0 : static void bmc_create_node(const struct HDIF_common_hdr *sp)</span></a>
<a name="356"><span class="lineNum"> 356 </span> : : {</a>
<a name="357"><span class="lineNum"> 357 </span> : : struct dt_node *bmc_node;</a>
-<a name="358"><span class="lineNum"> 358 </span> : : u32 fw_bar, io_bar, mem_bar, internal_bar;</a>
+<a name="358"><span class="lineNum"> 358 </span> : : u32 fw_bar, io_bar, mem_bar, internal_bar, mctp_base;</a>
<a name="359"><span class="lineNum"> 359 </span> : : const struct spss_iopath *iopath;</a>
<a name="360"><span class="lineNum"> 360 </span> : : const struct spss_sp_impl *sp_impl;</a>
<a name="361"><span class="lineNum"> 361 </span> : : struct dt_node *lpcm, *lpc, *n;</a>
<a name="362"><span class="lineNum"> 362 </span> : : u64 lpcm_base, lpcm_end;</a>
<a name="363"><span class="lineNum"> 363 </span> : : uint32_t chip_id;</a>
-<a name="364"><span class="lineNum"> 364 </span> : : int size;</a>
-<a name="365"><span class="lineNum"> 365 </span> : : </a>
-<a name="366"><span class="lineNum"> 366 </span> :<span class="lineNoCov"> 0 : bmc_node = dt_new(dt_root, &quot;bmc&quot;);</span></a>
-<a name="367"><span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : assert(bmc_node);</span></a>
-<a name="368"><span class="lineNum"> 368 </span> : : </a>
-<a name="369"><span class="lineNum"> 369 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(bmc_node, &quot;#address-cells&quot;, 1);</span></a>
-<a name="370"><span class="lineNum"> 370 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(bmc_node, &quot;#size-cells&quot;, 0);</span></a>
-<a name="371"><span class="lineNum"> 371 </span> : : </a>
-<a name="372"><span class="lineNum"> 372 </span> : : /* Add sensor info under /bmc */</a>
-<a name="373"><span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : add_ipmi_sensors(bmc_node);</span></a>
-<a name="374"><span class="lineNum"> 374 </span> : : </a>
-<a name="375"><span class="lineNum"> 375 </span> :<span class="lineNoCov"> 0 : sp_impl = HDIF_get_idata(sp, SPSS_IDATA_SP_IMPL, &amp;size);</span></a>
-<a name="376"><span class="lineNum"> 376 </span> :<span class="lineNoCov"> 0 : if (CHECK_SPPTR(sp_impl) &amp;&amp; (size &gt; 8)) {</span></a>
-<a name="377"><span class="lineNum"> 377 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(bmc_node, &quot;compatible&quot;, sp_impl-&gt;sp_family);</span></a>
-<a name="378"><span class="lineNum"> 378 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;SP Family is %s\n&quot;, sp_impl-&gt;sp_family);</span></a>
-<a name="379"><span class="lineNum"> 379 </span> : : }</a>
-<a name="380"><span class="lineNum"> 380 </span> : : </a>
-<a name="381"><span class="lineNum"> 381 </span> :<span class="lineNoCov"> 0 : iopath = HDIF_get_iarray_item(sp, SPSS_IDATA_SP_IOPATH, 0, NULL);</span></a>
+<a name="364"><span class="lineNum"> 364 </span> : : uint32_t topology_idx;</a>
+<a name="365"><span class="lineNum"> 365 </span> : : int size;</a>
+<a name="366"><span class="lineNum"> 366 </span> : : </a>
+<a name="367"><span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : bmc_node = dt_new(dt_root, &quot;bmc&quot;);</span></a>
+<a name="368"><span class="lineNum"> 368 </span> :<span class="lineNoCov"> 0 : assert(bmc_node);</span></a>
+<a name="369"><span class="lineNum"> 369 </span> : : </a>
+<a name="370"><span class="lineNum"> 370 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(bmc_node, &quot;#address-cells&quot;, 1);</span></a>
+<a name="371"><span class="lineNum"> 371 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(bmc_node, &quot;#size-cells&quot;, 0);</span></a>
+<a name="372"><span class="lineNum"> 372 </span> : : </a>
+<a name="373"><span class="lineNum"> 373 </span> : : /* Add sensor info under /bmc */</a>
+<a name="374"><span class="lineNum"> 374 </span> :<span class="lineNoCov"> 0 : if (proc_gen &lt; proc_gen_p10)</span></a>
+<a name="375"><span class="lineNum"> 375 </span> :<span class="lineNoCov"> 0 : add_ipmi_sensors(bmc_node);</span></a>
+<a name="376"><span class="lineNum"> 376 </span> : : </a>
+<a name="377"><span class="lineNum"> 377 </span> :<span class="lineNoCov"> 0 : sp_impl = HDIF_get_idata(sp, SPSS_IDATA_SP_IMPL, &amp;size);</span></a>
+<a name="378"><span class="lineNum"> 378 </span> :<span class="lineNoCov"> 0 : if (CHECK_SPPTR(sp_impl) &amp;&amp; (size &gt; 8)) {</span></a>
+<a name="379"><span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(bmc_node, &quot;compatible&quot;, sp_impl-&gt;sp_family);</span></a>
+<a name="380"><span class="lineNum"> 380 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;SP Family is %s\n&quot;, sp_impl-&gt;sp_family);</span></a>
+<a name="381"><span class="lineNum"> 381 </span> : : }</a>
<a name="382"><span class="lineNum"> 382 </span> : : </a>
-<a name="383"><span class="lineNum"> 383 </span> :<span class="lineNoCov"> 0 : if (be16_to_cpu(iopath-&gt;iopath_type) != SPSS_IOPATH_TYPE_LPC) {</span></a>
-<a name="384"><span class="lineNum"> 384 </span> :<span class="lineNoCov"> 0 : prerror(&quot;BMC: Non-LPC IOPATH, this is probably broken\n&quot;);</span></a>
-<a name="385"><span class="lineNum"> 385 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="386"><span class="lineNum"> 386 </span> : : }</a>
-<a name="387"><span class="lineNum"> 387 </span> : : </a>
-<a name="388"><span class="lineNum"> 388 </span> : : /*</a>
-<a name="389"><span class="lineNum"> 389 </span> : : * For now we only instantiate the LPC node for the LPC that is used</a>
-<a name="390"><span class="lineNum"> 390 </span> : : * for Host &lt;-&gt; BMC comms. The secondary LPCs can be skipped.</a>
-<a name="391"><span class="lineNum"> 391 </span> : : */</a>
-<a name="392"><span class="lineNum"> 392 </span> :<span class="lineNoCov"> 0 : if (be16_to_cpu(iopath-&gt;lpc.link_status) != LPC_STATUS_ACTIVE)</span></a>
-<a name="393"><span class="lineNum"> 393 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="394"><span class="lineNum"> 394 </span> : : </a>
-<a name="395"><span class="lineNum"> 395 </span> : : #define GB (1024ul * 1024ul * 1024ul)</a>
-<a name="396"><span class="lineNum"> 396 </span> : : /*</a>
-<a name="397"><span class="lineNum"> 397 </span> : : * convert the hdat chip ID the HW chip id so we get the right</a>
-<a name="398"><span class="lineNum"> 398 </span> : : * phys map offset</a>
-<a name="399"><span class="lineNum"> 399 </span> : : */</a>
-<a name="400"><span class="lineNum"> 400 </span> :<span class="lineNoCov"> 0 : chip_id = pcid_to_chip_id(be32_to_cpu(iopath-&gt;lpc.chip_id));</span></a>
-<a name="401"><span class="lineNum"> 401 </span> : : </a>
-<a name="402"><span class="lineNum"> 402 </span> :<span class="lineNoCov"> 0 : phys_map_get(chip_id, LPC_BUS, 0, &amp;lpcm_base, NULL);</span></a>
-<a name="403"><span class="lineNum"> 403 </span> :<span class="lineNoCov"> 0 : lpcm = dt_new_addr(dt_root, &quot;lpcm-opb&quot;, lpcm_base);</span></a>
-<a name="404"><span class="lineNum"> 404 </span> :<span class="lineNoCov"> 0 : assert(lpcm);</span></a>
-<a name="405"><span class="lineNum"> 405 </span> : : </a>
-<a name="406"><span class="lineNum"> 406 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(lpcm, &quot;#address-cells&quot;, 1);</span></a>
-<a name="407"><span class="lineNum"> 407 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(lpcm, &quot;#size-cells&quot;, 1);</span></a>
-<a name="408"><span class="lineNum"> 408 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(lpcm, &quot;compatible&quot;,</span></a>
-<a name="409"><span class="lineNum"> 409 </span> : : &quot;ibm,power9-lpcm-opb&quot;, &quot;simple-bus&quot;);</a>
-<a name="410"><span class="lineNum"> 410 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64s(lpcm, &quot;reg&quot;, lpcm_base, 0x100000000ul);</span></a>
-<a name="411"><span class="lineNum"> 411 </span> : : </a>
-<a name="412"><span class="lineNum"> 412 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(lpcm, &quot;ibm,chip-id&quot;, chip_id);</span></a>
-<a name="413"><span class="lineNum"> 413 </span> : : </a>
-<a name="414"><span class="lineNum"> 414 </span> : : /* Setup the ranges for the MMIO LPC */</a>
-<a name="415"><span class="lineNum"> 415 </span> :<span class="lineNoCov"> 0 : lpcm_end = lpcm_base + 2 * GB;</span></a>
-<a name="416"><span class="lineNum"> 416 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(lpcm, &quot;ranges&quot;,</span></a>
-<a name="417"><span class="lineNum"> 417 </span> : : 0x00000000, hi32(lpcm_base), lo32(lpcm_base), 2 * GB,</a>
-<a name="418"><span class="lineNum"> 418 </span> : : 0x80000000, hi32(lpcm_end), lo32(lpcm_end), 2 * GB);</a>
-<a name="419"><span class="lineNum"> 419 </span> : : </a>
-<a name="420"><span class="lineNum"> 420 </span> : : /*</a>
-<a name="421"><span class="lineNum"> 421 </span> : : * Despite the name the &quot;BAR&quot; values provided through the HDAT are</a>
-<a name="422"><span class="lineNum"> 422 </span> : : * the base addresses themselves rather than the BARs</a>
-<a name="423"><span class="lineNum"> 423 </span> : : */</a>
-<a name="424"><span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : fw_bar = be32_to_cpu(iopath-&gt;lpc.firmware_bar);</span></a>
-<a name="425"><span class="lineNum"> 425 </span> :<span class="lineNoCov"> 0 : mem_bar = be32_to_cpu(iopath-&gt;lpc.memory_bar);</span></a>
-<a name="426"><span class="lineNum"> 426 </span> :<span class="lineNoCov"> 0 : io_bar = be32_to_cpu(iopath-&gt;lpc.io_bar);</span></a>
-<a name="427"><span class="lineNum"> 427 </span> :<span class="lineNoCov"> 0 : internal_bar = be32_to_cpu(iopath-&gt;lpc.internal_bar);</span></a>
-<a name="428"><span class="lineNum"> 428 </span> : : </a>
-<a name="429"><span class="lineNum"> 429 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;LPC: IOPATH chip id = %x\n&quot;, chip_id);</span></a>
-<a name="430"><span class="lineNum"> 430 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;LPC: FW BAR = %#x\n&quot;, fw_bar);</span></a>
-<a name="431"><span class="lineNum"> 431 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;LPC: MEM BAR = %#x\n&quot;, mem_bar);</span></a>
-<a name="432"><span class="lineNum"> 432 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;LPC: IO BAR = %#x\n&quot;, io_bar);</span></a>
-<a name="433"><span class="lineNum"> 433 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;LPC: Internal BAR = %#x\n&quot;, internal_bar);</span></a>
-<a name="434"><span class="lineNum"> 434 </span> : : </a>
-<a name="435"><span class="lineNum"> 435 </span> : : /*</a>
-<a name="436"><span class="lineNum"> 436 </span> : : * The internal address space BAR actually points to the LPC master</a>
-<a name="437"><span class="lineNum"> 437 </span> : : * registers. So we &quot;fix&quot; it by masking off the low bits.</a>
-<a name="438"><span class="lineNum"> 438 </span> : : *</a>
-<a name="439"><span class="lineNum"> 439 </span> : : * XXX: we probably need separate base addresses for all these things</a>
-<a name="440"><span class="lineNum"> 440 </span> : : */</a>
-<a name="441"><span class="lineNum"> 441 </span> :<span class="lineNoCov"> 0 : internal_bar &amp;= 0xf0000000;</span></a>
+<a name="383"><span class="lineNum"> 383 </span> :<span class="lineNoCov"> 0 : iopath = HDIF_get_iarray_item(sp, SPSS_IDATA_SP_IOPATH, 0, NULL);</span></a>
+<a name="384"><span class="lineNum"> 384 </span> : : </a>
+<a name="385"><span class="lineNum"> 385 </span> :<span class="lineNoCov"> 0 : if (be16_to_cpu(iopath-&gt;iopath_type) != SPSS_IOPATH_TYPE_LPC) {</span></a>
+<a name="386"><span class="lineNum"> 386 </span> :<span class="lineNoCov"> 0 : prerror(&quot;BMC: Non-LPC IOPATH, this is probably broken\n&quot;);</span></a>
+<a name="387"><span class="lineNum"> 387 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="388"><span class="lineNum"> 388 </span> : : }</a>
+<a name="389"><span class="lineNum"> 389 </span> : : </a>
+<a name="390"><span class="lineNum"> 390 </span> : : /*</a>
+<a name="391"><span class="lineNum"> 391 </span> : : * For now we only instantiate the LPC node for the LPC that is used</a>
+<a name="392"><span class="lineNum"> 392 </span> : : * for Host &lt;-&gt; BMC comms. The secondary LPCs can be skipped.</a>
+<a name="393"><span class="lineNum"> 393 </span> : : */</a>
+<a name="394"><span class="lineNum"> 394 </span> :<span class="lineNoCov"> 0 : if (be16_to_cpu(iopath-&gt;lpc.link_status) != LPC_STATUS_ACTIVE)</span></a>
+<a name="395"><span class="lineNum"> 395 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="396"><span class="lineNum"> 396 </span> : : </a>
+<a name="397"><span class="lineNum"> 397 </span> : : #define GB (1024ul * 1024ul * 1024ul)</a>
+<a name="398"><span class="lineNum"> 398 </span> : : /*</a>
+<a name="399"><span class="lineNum"> 399 </span> : : * convert the hdat chip ID the HW chip id so we get the right</a>
+<a name="400"><span class="lineNum"> 400 </span> : : * phys map offset</a>
+<a name="401"><span class="lineNum"> 401 </span> : : */</a>
+<a name="402"><span class="lineNum"> 402 </span> :<span class="lineNoCov"> 0 : chip_id = pcid_to_chip_id(be32_to_cpu(iopath-&gt;lpc.chip_id));</span></a>
+<a name="403"><span class="lineNum"> 403 </span> :<span class="lineNoCov"> 0 : topology_idx = pcid_to_topology_idx(be32_to_cpu(iopath-&gt;lpc.chip_id));</span></a>
+<a name="404"><span class="lineNum"> 404 </span> : : </a>
+<a name="405"><span class="lineNum"> 405 </span> :<span class="lineNoCov"> 0 : __phys_map_get(topology_idx, chip_id, LPC_BUS, 0, &amp;lpcm_base, NULL);</span></a>
+<a name="406"><span class="lineNum"> 406 </span> :<span class="lineNoCov"> 0 : lpcm = dt_new_addr(dt_root, &quot;lpcm-opb&quot;, lpcm_base);</span></a>
+<a name="407"><span class="lineNum"> 407 </span> :<span class="lineNoCov"> 0 : assert(lpcm);</span></a>
+<a name="408"><span class="lineNum"> 408 </span> : : </a>
+<a name="409"><span class="lineNum"> 409 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(lpcm, &quot;#address-cells&quot;, 1);</span></a>
+<a name="410"><span class="lineNum"> 410 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(lpcm, &quot;#size-cells&quot;, 1);</span></a>
+<a name="411"><span class="lineNum"> 411 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(lpcm, &quot;compatible&quot;,</span></a>
+<a name="412"><span class="lineNum"> 412 </span> : : &quot;ibm,power9-lpcm-opb&quot;, &quot;simple-bus&quot;);</a>
+<a name="413"><span class="lineNum"> 413 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64s(lpcm, &quot;reg&quot;, lpcm_base, 0x100000000ul);</span></a>
+<a name="414"><span class="lineNum"> 414 </span> : : </a>
+<a name="415"><span class="lineNum"> 415 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(lpcm, &quot;ibm,chip-id&quot;, chip_id);</span></a>
+<a name="416"><span class="lineNum"> 416 </span> : : </a>
+<a name="417"><span class="lineNum"> 417 </span> : : /* Setup the ranges for the MMIO LPC */</a>
+<a name="418"><span class="lineNum"> 418 </span> :<span class="lineNoCov"> 0 : lpcm_end = lpcm_base + 2 * GB;</span></a>
+<a name="419"><span class="lineNum"> 419 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(lpcm, &quot;ranges&quot;,</span></a>
+<a name="420"><span class="lineNum"> 420 </span> : : 0x00000000, hi32(lpcm_base), lo32(lpcm_base), 2 * GB,</a>
+<a name="421"><span class="lineNum"> 421 </span> : : 0x80000000, hi32(lpcm_end), lo32(lpcm_end), 2 * GB);</a>
+<a name="422"><span class="lineNum"> 422 </span> : : </a>
+<a name="423"><span class="lineNum"> 423 </span> : : /*</a>
+<a name="424"><span class="lineNum"> 424 </span> : : * Despite the name the &quot;BAR&quot; values provided through the HDAT are</a>
+<a name="425"><span class="lineNum"> 425 </span> : : * the base addresses themselves rather than the BARs</a>
+<a name="426"><span class="lineNum"> 426 </span> : : */</a>
+<a name="427"><span class="lineNum"> 427 </span> :<span class="lineNoCov"> 0 : fw_bar = be32_to_cpu(iopath-&gt;lpc.firmware_bar);</span></a>
+<a name="428"><span class="lineNum"> 428 </span> :<span class="lineNoCov"> 0 : mem_bar = be32_to_cpu(iopath-&gt;lpc.memory_bar);</span></a>
+<a name="429"><span class="lineNum"> 429 </span> :<span class="lineNoCov"> 0 : io_bar = be32_to_cpu(iopath-&gt;lpc.io_bar);</span></a>
+<a name="430"><span class="lineNum"> 430 </span> :<span class="lineNoCov"> 0 : internal_bar = be32_to_cpu(iopath-&gt;lpc.internal_bar);</span></a>
+<a name="431"><span class="lineNum"> 431 </span> :<span class="lineNoCov"> 0 : mctp_base = be32_to_cpu(iopath-&gt;lpc.mctp_base);</span></a>
+<a name="432"><span class="lineNum"> 432 </span> : : </a>
+<a name="433"><span class="lineNum"> 433 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;LPC: IOPATH chip id = %x\n&quot;, chip_id);</span></a>
+<a name="434"><span class="lineNum"> 434 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;LPC: FW BAR = %#x\n&quot;, fw_bar);</span></a>
+<a name="435"><span class="lineNum"> 435 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;LPC: MEM BAR = %#x\n&quot;, mem_bar);</span></a>
+<a name="436"><span class="lineNum"> 436 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;LPC: IO BAR = %#x\n&quot;, io_bar);</span></a>
+<a name="437"><span class="lineNum"> 437 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;LPC: Internal BAR = %#x\n&quot;, internal_bar);</span></a>
+<a name="438"><span class="lineNum"> 438 </span> :<span class="lineNoCov"> 0 : if (proc_gen &gt;= proc_gen_p10) {</span></a>
+<a name="439"><span class="lineNum"> 439 </span> : : /* MCTP is part of FW BAR */</a>
+<a name="440"><span class="lineNum"> 440 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;LPC: MCTP base = %#x\n&quot;, mctp_base);</span></a>
+<a name="441"><span class="lineNum"> 441 </span> : : }</a>
<a name="442"><span class="lineNum"> 442 </span> : : </a>
-<a name="443"><span class="lineNum"> 443 </span> : : /* Add the various internal bus devices */</a>
-<a name="444"><span class="lineNum"> 444 </span> :<span class="lineNoCov"> 0 : n = dt_new_addr(lpcm, &quot;opb-master&quot;, internal_bar + 0x10000);</span></a>
-<a name="445"><span class="lineNum"> 445 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(n, &quot;compatible&quot;, &quot;ibm,power9-lpcm-opb-master&quot;);</span></a>
-<a name="446"><span class="lineNum"> 446 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(n, &quot;reg&quot;, internal_bar + 0x10000, 0x60);</span></a>
-<a name="447"><span class="lineNum"> 447 </span> : : </a>
-<a name="448"><span class="lineNum"> 448 </span> :<span class="lineNoCov"> 0 : n = dt_new_addr(lpcm, &quot;opb-arbiter&quot;, internal_bar + 0x11000);</span></a>
-<a name="449"><span class="lineNum"> 449 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(n, &quot;compatible&quot;, &quot;ibm,power9-lpcm-opb-arbiter&quot;);</span></a>
-<a name="450"><span class="lineNum"> 450 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(n, &quot;reg&quot;, internal_bar + 0x11000, 0x8);</span></a>
-<a name="451"><span class="lineNum"> 451 </span> : : </a>
-<a name="452"><span class="lineNum"> 452 </span> :<span class="lineNoCov"> 0 : n = dt_new_addr(lpcm, &quot;lpc-controller&quot;, internal_bar + 0x12000);</span></a>
-<a name="453"><span class="lineNum"> 453 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(n, &quot;compatible&quot;, &quot;ibm,power9-lpc-controller&quot;);</span></a>
-<a name="454"><span class="lineNum"> 454 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(n, &quot;reg&quot;, internal_bar + 0x12000, 0x100);</span></a>
+<a name="443"><span class="lineNum"> 443 </span> : : /*</a>
+<a name="444"><span class="lineNum"> 444 </span> : : * The internal address space BAR actually points to the LPC master</a>
+<a name="445"><span class="lineNum"> 445 </span> : : * registers. So we &quot;fix&quot; it by masking off the low bits.</a>
+<a name="446"><span class="lineNum"> 446 </span> : : *</a>
+<a name="447"><span class="lineNum"> 447 </span> : : * XXX: we probably need separate base addresses for all these things</a>
+<a name="448"><span class="lineNum"> 448 </span> : : */</a>
+<a name="449"><span class="lineNum"> 449 </span> :<span class="lineNoCov"> 0 : internal_bar &amp;= 0xf0000000;</span></a>
+<a name="450"><span class="lineNum"> 450 </span> : : </a>
+<a name="451"><span class="lineNum"> 451 </span> : : /* Add the various internal bus devices */</a>
+<a name="452"><span class="lineNum"> 452 </span> :<span class="lineNoCov"> 0 : n = dt_new_addr(lpcm, &quot;opb-master&quot;, internal_bar + 0x10000);</span></a>
+<a name="453"><span class="lineNum"> 453 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(n, &quot;compatible&quot;, &quot;ibm,power9-lpcm-opb-master&quot;);</span></a>
+<a name="454"><span class="lineNum"> 454 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(n, &quot;reg&quot;, internal_bar + 0x10000, 0x60);</span></a>
<a name="455"><span class="lineNum"> 455 </span> : : </a>
-<a name="456"><span class="lineNum"> 456 </span> : : /*</a>
-<a name="457"><span class="lineNum"> 457 </span> : : * FIXME: lpc@0 might not be accurate, but i'm pretty sure</a>
-<a name="458"><span class="lineNum"> 458 </span> : : * lpc@f0000000 isn't right either.</a>
-<a name="459"><span class="lineNum"> 459 </span> : : */</a>
-<a name="460"><span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : lpc = dt_new_addr(lpcm, &quot;lpc&quot;, 0x0);</span></a>
-<a name="461"><span class="lineNum"> 461 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(lpc, &quot;#address-cells&quot;, 2);</span></a>
-<a name="462"><span class="lineNum"> 462 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(lpc, &quot;#size-cells&quot;, 1);</span></a>
-<a name="463"><span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(lpc, &quot;compatible&quot;,</span></a>
-<a name="464"><span class="lineNum"> 464 </span> : : &quot;ibm,power9-lpc&quot;, &quot;ibm,power8-lpc&quot;);</a>
-<a name="465"><span class="lineNum"> 465 </span> : : </a>
-<a name="466"><span class="lineNum"> 466 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(lpc, &quot;ranges&quot;,</span></a>
-<a name="467"><span class="lineNum"> 467 </span> : : 0, 0, mem_bar, 0x10000000, /* MEM space */</a>
-<a name="468"><span class="lineNum"> 468 </span> : : 1, 0, io_bar, 0x00010000, /* IO space */</a>
-<a name="469"><span class="lineNum"> 469 </span> : : /* we don't expose the internal space */</a>
-<a name="470"><span class="lineNum"> 470 </span> : : 3, 0, fw_bar, 0x10000000 /* FW space */</a>
-<a name="471"><span class="lineNum"> 471 </span> : : );</a>
-<a name="472"><span class="lineNum"> 472 </span> : : </a>
-<a name="473"><span class="lineNum"> 473 </span> :<span class="lineNoCov"> 0 : add_uart(iopath, lpc);</span></a>
-<a name="474"><span class="lineNum"> 474 </span> : : </a>
-<a name="475"><span class="lineNum"> 475 </span> : : /* BT device info isn't currently populated */</a>
-<a name="476"><span class="lineNum"> 476 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;LPC: BT [%#&quot;PRIx64&quot;, %#x] sms_int: %u, bmc_int: %u\n&quot;,</span></a>
-<a name="477"><span class="lineNum"> 477 </span> : : iopath-&gt;lpc.bt_base, iopath-&gt;lpc.bt_size,</a>
-<a name="478"><span class="lineNum"> 478 </span> : : iopath-&gt;lpc.bt_sms_int_num, iopath-&gt;lpc.bt_bmc_response_int_num</a>
+<a name="456"><span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : n = dt_new_addr(lpcm, &quot;opb-arbiter&quot;, internal_bar + 0x11000);</span></a>
+<a name="457"><span class="lineNum"> 457 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(n, &quot;compatible&quot;, &quot;ibm,power9-lpcm-opb-arbiter&quot;);</span></a>
+<a name="458"><span class="lineNum"> 458 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(n, &quot;reg&quot;, internal_bar + 0x11000, 0x8);</span></a>
+<a name="459"><span class="lineNum"> 459 </span> : : </a>
+<a name="460"><span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : n = dt_new_addr(lpcm, &quot;lpc-controller&quot;, internal_bar + 0x12000);</span></a>
+<a name="461"><span class="lineNum"> 461 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(n, &quot;compatible&quot;, &quot;ibm,power9-lpc-controller&quot;);</span></a>
+<a name="462"><span class="lineNum"> 462 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(n, &quot;reg&quot;, internal_bar + 0x12000, 0x100);</span></a>
+<a name="463"><span class="lineNum"> 463 </span> : : </a>
+<a name="464"><span class="lineNum"> 464 </span> : : /*</a>
+<a name="465"><span class="lineNum"> 465 </span> : : * FIXME: lpc@0 might not be accurate, but i'm pretty sure</a>
+<a name="466"><span class="lineNum"> 466 </span> : : * lpc@f0000000 isn't right either.</a>
+<a name="467"><span class="lineNum"> 467 </span> : : */</a>
+<a name="468"><span class="lineNum"> 468 </span> :<span class="lineNoCov"> 0 : lpc = dt_new_addr(lpcm, &quot;lpc&quot;, 0x0);</span></a>
+<a name="469"><span class="lineNum"> 469 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(lpc, &quot;#address-cells&quot;, 2);</span></a>
+<a name="470"><span class="lineNum"> 470 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(lpc, &quot;#size-cells&quot;, 1);</span></a>
+<a name="471"><span class="lineNum"> 471 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(lpc, &quot;compatible&quot;,</span></a>
+<a name="472"><span class="lineNum"> 472 </span> : : &quot;ibm,power9-lpc&quot;, &quot;ibm,power8-lpc&quot;);</a>
+<a name="473"><span class="lineNum"> 473 </span> : : </a>
+<a name="474"><span class="lineNum"> 474 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(lpc, &quot;ranges&quot;,</span></a>
+<a name="475"><span class="lineNum"> 475 </span> : : 0, 0, mem_bar, 0x10000000, /* MEM space */</a>
+<a name="476"><span class="lineNum"> 476 </span> : : 1, 0, io_bar, 0x00010000, /* IO space */</a>
+<a name="477"><span class="lineNum"> 477 </span> : : /* we don't expose the internal space */</a>
+<a name="478"><span class="lineNum"> 478 </span> : : 3, 0, fw_bar, 0x10000000 /* FW space */</a>
<a name="479"><span class="lineNum"> 479 </span> : : );</a>
-<a name="480"><span class="lineNum"> 480 </span> : : }</a>
-<a name="481"><span class="lineNum"> 481 </span> : : </a>
-<a name="482"><span class="lineNum"> 482 </span> : : /*</a>
-<a name="483"><span class="lineNum"> 483 </span> : : * Search for and instanciate BMC nodes. This is mostly the same as fsp_parse()</a>
-<a name="484"><span class="lineNum"> 484 </span> : : * below, but it can be called earlier since BMCs don't depend on the psihb</a>
-<a name="485"><span class="lineNum"> 485 </span> : : * nodes being added.</a>
-<a name="486"><span class="lineNum"> 486 </span> : : */</a>
-<a name="487"><span class="lineNum"> 487 </span> :<span class="lineCov"> 2 : void bmc_parse(void)</span></a>
-<a name="488"><span class="lineNum"> 488 </span> : : {</a>
-<a name="489"><span class="lineNum"> 489 </span> :<span class="lineCov"> 2 : bool found = false;</span></a>
-<a name="490"><span class="lineNum"> 490 </span> : : const void *sp;</a>
-<a name="491"><span class="lineNum"> 491 </span> : : int i;</a>
-<a name="492"><span class="lineNum"> 492 </span> : : </a>
-<a name="493"><span class="lineNum"> 493 </span> :<span class="lineCov"> 2 : sp = get_hdif(&amp;spira.ntuples.sp_subsys, SPSS_HDIF_SIG);</span></a>
-<a name="494"><span class="lineNum"> 494 </span> :<span class="lineCov"> 2 : if (!sp)</span></a>
-<a name="495"><span class="lineNum"> 495 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="496"><span class="lineNum"> 496 </span> : : </a>
-<a name="497"><span class="lineNum"> 497 </span> :<span class="lineCov"> 4 : for_each_ntuple_idx(&amp;spira.ntuples.sp_subsys, sp, i, SPSS_HDIF_SIG) {</span></a>
-<a name="498"><span class="lineNum"> 498 </span> :<span class="lineCov"> 2 : if (find_service_proc_type(sp, i) == SP_BMC) {</span></a>
-<a name="499"><span class="lineNum"> 499 </span> :<span class="lineNoCov"> 0 : bmc_create_node(sp);</span></a>
-<a name="500"><span class="lineNum"> 500 </span> :<span class="lineNoCov"> 0 : found = true;</span></a>
-<a name="501"><span class="lineNum"> 501 </span> : : }</a>
-<a name="502"><span class="lineNum"> 502 </span> : : }</a>
-<a name="503"><span class="lineNum"> 503 </span> : : </a>
-<a name="504"><span class="lineNum"> 504 </span> :<span class="lineCov"> 2 : if (found)</span></a>
-<a name="505"><span class="lineNum"> 505 </span> :<span class="lineNoCov"> 0 : early_uart_init();</span></a>
-<a name="506"><span class="lineNum"> 506 </span> : : }</a>
-<a name="507"><span class="lineNum"> 507 </span> : : </a>
-<a name="508"><span class="lineNum"> 508 </span> :<span class="lineCov"> 2 : void fsp_parse(void)</span></a>
-<a name="509"><span class="lineNum"> 509 </span> : : {</a>
-<a name="510"><span class="lineNum"> 510 </span> :<span class="lineCov"> 2 : struct dt_node *fsp_root = NULL, *fsp_node;</span></a>
-<a name="511"><span class="lineNum"> 511 </span> : : const void *sp;</a>
-<a name="512"><span class="lineNum"> 512 </span> : : int index;</a>
-<a name="513"><span class="lineNum"> 513 </span> : : </a>
-<a name="514"><span class="lineNum"> 514 </span> : : /* Find SPSS tuple in SPIRA */</a>
-<a name="515"><span class="lineNum"> 515 </span> :<span class="lineCov"> 2 : sp = get_hdif(&amp;spira.ntuples.sp_subsys, SPSS_HDIF_SIG);</span></a>
-<a name="516"><span class="lineNum"> 516 </span> :<span class="lineCov"> 2 : if (!sp) {</span></a>
-<a name="517"><span class="lineNum"> 517 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;HDAT: No FSP/BMC found!\n&quot;);</span></a>
-<a name="518"><span class="lineNum"> 518 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="519"><span class="lineNum"> 519 </span> : : }</a>
-<a name="520"><span class="lineNum"> 520 </span> : : </a>
-<a name="521"><span class="lineNum"> 521 </span> :<span class="lineCov"> 4 : for_each_ntuple_idx(&amp;spira.ntuples.sp_subsys, sp, index, SPSS_HDIF_SIG) {</span></a>
-<a name="522"><span class="lineNum"> 522 </span> :<span class="lineCov"> 2 : switch (find_service_proc_type(sp, index)) {</span></a>
-<a name="523"><span class="lineNum"> 523 </span> :<span class="lineCov"> 2 : case SP_FSP:</span></a>
-<a name="524"><span class="lineNum"> 524 </span> :<span class="lineCov"> 2 : if (!fsp_root) {</span></a>
-<a name="525"><span class="lineNum"> 525 </span> :<span class="lineCov"> 2 : fsp_root = dt_new(dt_root, &quot;fsps&quot;);</span></a>
-<a name="526"><span class="lineNum"> 526 </span> :<span class="lineCov"> 2 : assert(fsp_root);</span></a>
-<a name="527"><span class="lineNum"> 527 </span> : : </a>
-<a name="528"><span class="lineNum"> 528 </span> :<span class="lineCov"> 2 : dt_add_property_cells(fsp_root,</span></a>
-<a name="529"><span class="lineNum"> 529 </span> : : &quot;#address-cells&quot;, 1);</a>
-<a name="530"><span class="lineNum"> 530 </span> :<span class="lineCov"> 2 : dt_add_property_cells(fsp_root,</span></a>
-<a name="531"><span class="lineNum"> 531 </span> : : &quot;#size-cells&quot;, 0);</a>
-<a name="532"><span class="lineNum"> 532 </span> : : }</a>
-<a name="533"><span class="lineNum"> 533 </span> : : </a>
-<a name="534"><span class="lineNum"> 534 </span> :<span class="lineCov"> 2 : fsp_node = fsp_create_node(sp, index, fsp_root);</span></a>
-<a name="535"><span class="lineNum"> 535 </span> :<span class="lineCov"> 2 : if (fsp_node)</span></a>
-<a name="536"><span class="lineNum"> 536 </span> :<span class="lineCov"> 2 : fsp_create_links(sp, index, fsp_node);</span></a>
-<a name="537"><span class="lineNum"> 537 </span> : : </a>
-<a name="538"><span class="lineNum"> 538 </span> :<span class="lineCov"> 2 : break;</span></a>
-<a name="539"><span class="lineNum"> 539 </span> : : </a>
-<a name="540"><span class="lineNum"> 540 </span> :<span class="lineNoCov"> 0 : case SP_BMC:</span></a>
-<a name="541"><span class="lineNum"> 541 </span> : : /* Handled above */</a>
-<a name="542"><span class="lineNum"> 542 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="543"><span class="lineNum"> 543 </span> : : </a>
-<a name="544"><span class="lineNum"> 544 </span> :<span class="lineNoCov"> 0 : case SP_BAD:</span></a>
-<a name="545"><span class="lineNum"> 545 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="546"><span class="lineNum"> 546 </span> : : </a>
-<a name="547"><span class="lineNum"> 547 </span> :<span class="lineNoCov"> 0 : default:</span></a>
-<a name="548"><span class="lineNum"> 548 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SP #%d: This service processor is not supported\n&quot;, index);</span></a>
-<a name="549"><span class="lineNum"> 549 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="550"><span class="lineNum"> 550 </span> : : }</a>
-<a name="551"><span class="lineNum"> 551 </span> : : }</a>
-<a name="552"><span class="lineNum"> 552 </span> : : }</a>
+<a name="480"><span class="lineNum"> 480 </span> : : </a>
+<a name="481"><span class="lineNum"> 481 </span> :<span class="lineNoCov"> 0 : add_uart(iopath, lpc);</span></a>
+<a name="482"><span class="lineNum"> 482 </span> : : </a>
+<a name="483"><span class="lineNum"> 483 </span> : : /* BT device info isn't currently populated */</a>
+<a name="484"><span class="lineNum"> 484 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;LPC: BT [%#&quot;PRIx64&quot;, %#x] sms_int: %u, bmc_int: %u\n&quot;,</span></a>
+<a name="485"><span class="lineNum"> 485 </span> : : iopath-&gt;lpc.bt_base, iopath-&gt;lpc.bt_size,</a>
+<a name="486"><span class="lineNum"> 486 </span> : : iopath-&gt;lpc.bt_sms_int_num, iopath-&gt;lpc.bt_bmc_response_int_num</a>
+<a name="487"><span class="lineNum"> 487 </span> : : );</a>
+<a name="488"><span class="lineNum"> 488 </span> : : }</a>
+<a name="489"><span class="lineNum"> 489 </span> : : </a>
+<a name="490"><span class="lineNum"> 490 </span> : : /*</a>
+<a name="491"><span class="lineNum"> 491 </span> : : * Search for and instanciate BMC nodes. This is mostly the same as fsp_parse()</a>
+<a name="492"><span class="lineNum"> 492 </span> : : * below, but it can be called earlier since BMCs don't depend on the psihb</a>
+<a name="493"><span class="lineNum"> 493 </span> : : * nodes being added.</a>
+<a name="494"><span class="lineNum"> 494 </span> : : */</a>
+<a name="495"><span class="lineNum"> 495 </span> :<span class="lineCov"> 2 : void bmc_parse(void)</span></a>
+<a name="496"><span class="lineNum"> 496 </span> : : {</a>
+<a name="497"><span class="lineNum"> 497 </span> :<span class="lineCov"> 2 : bool found = false;</span></a>
+<a name="498"><span class="lineNum"> 498 </span> : : const void *sp;</a>
+<a name="499"><span class="lineNum"> 499 </span> : : int i;</a>
+<a name="500"><span class="lineNum"> 500 </span> : : </a>
+<a name="501"><span class="lineNum"> 501 </span> :<span class="lineCov"> 2 : sp = get_hdif(&amp;spira.ntuples.sp_subsys, SPSS_HDIF_SIG);</span></a>
+<a name="502"><span class="lineNum"> 502 </span> :<span class="lineCov"> 2 : if (!sp)</span></a>
+<a name="503"><span class="lineNum"> 503 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="504"><span class="lineNum"> 504 </span> : : </a>
+<a name="505"><span class="lineNum"> 505 </span> :<span class="lineCov"> 4 : for_each_ntuple_idx(&amp;spira.ntuples.sp_subsys, sp, i, SPSS_HDIF_SIG) {</span></a>
+<a name="506"><span class="lineNum"> 506 </span> :<span class="lineCov"> 2 : if (find_service_proc_type(sp, i) == SP_BMC) {</span></a>
+<a name="507"><span class="lineNum"> 507 </span> :<span class="lineNoCov"> 0 : bmc_create_node(sp);</span></a>
+<a name="508"><span class="lineNum"> 508 </span> :<span class="lineNoCov"> 0 : found = true;</span></a>
+<a name="509"><span class="lineNum"> 509 </span> : : }</a>
+<a name="510"><span class="lineNum"> 510 </span> : : }</a>
+<a name="511"><span class="lineNum"> 511 </span> : : </a>
+<a name="512"><span class="lineNum"> 512 </span> :<span class="lineCov"> 2 : if (found)</span></a>
+<a name="513"><span class="lineNum"> 513 </span> :<span class="lineNoCov"> 0 : early_uart_init();</span></a>
+<a name="514"><span class="lineNum"> 514 </span> : : }</a>
+<a name="515"><span class="lineNum"> 515 </span> : : </a>
+<a name="516"><span class="lineNum"> 516 </span> :<span class="lineCov"> 2 : void fsp_parse(void)</span></a>
+<a name="517"><span class="lineNum"> 517 </span> : : {</a>
+<a name="518"><span class="lineNum"> 518 </span> :<span class="lineCov"> 2 : struct dt_node *fsp_root = NULL, *fsp_node;</span></a>
+<a name="519"><span class="lineNum"> 519 </span> : : const void *sp;</a>
+<a name="520"><span class="lineNum"> 520 </span> : : int index;</a>
+<a name="521"><span class="lineNum"> 521 </span> : : </a>
+<a name="522"><span class="lineNum"> 522 </span> : : /* Find SPSS tuple in SPIRA */</a>
+<a name="523"><span class="lineNum"> 523 </span> :<span class="lineCov"> 2 : sp = get_hdif(&amp;spira.ntuples.sp_subsys, SPSS_HDIF_SIG);</span></a>
+<a name="524"><span class="lineNum"> 524 </span> :<span class="lineCov"> 2 : if (!sp) {</span></a>
+<a name="525"><span class="lineNum"> 525 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;HDAT: No FSP/BMC found!\n&quot;);</span></a>
+<a name="526"><span class="lineNum"> 526 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="527"><span class="lineNum"> 527 </span> : : }</a>
+<a name="528"><span class="lineNum"> 528 </span> : : </a>
+<a name="529"><span class="lineNum"> 529 </span> :<span class="lineCov"> 4 : for_each_ntuple_idx(&amp;spira.ntuples.sp_subsys, sp, index, SPSS_HDIF_SIG) {</span></a>
+<a name="530"><span class="lineNum"> 530 </span> :<span class="lineCov"> 2 : switch (find_service_proc_type(sp, index)) {</span></a>
+<a name="531"><span class="lineNum"> 531 </span> :<span class="lineCov"> 2 : case SP_FSP:</span></a>
+<a name="532"><span class="lineNum"> 532 </span> :<span class="lineCov"> 2 : if (!fsp_root) {</span></a>
+<a name="533"><span class="lineNum"> 533 </span> :<span class="lineCov"> 2 : fsp_root = dt_new(dt_root, &quot;fsps&quot;);</span></a>
+<a name="534"><span class="lineNum"> 534 </span> :<span class="lineCov"> 2 : assert(fsp_root);</span></a>
+<a name="535"><span class="lineNum"> 535 </span> : : </a>
+<a name="536"><span class="lineNum"> 536 </span> :<span class="lineCov"> 2 : dt_add_property_cells(fsp_root,</span></a>
+<a name="537"><span class="lineNum"> 537 </span> : : &quot;#address-cells&quot;, 1);</a>
+<a name="538"><span class="lineNum"> 538 </span> :<span class="lineCov"> 2 : dt_add_property_cells(fsp_root,</span></a>
+<a name="539"><span class="lineNum"> 539 </span> : : &quot;#size-cells&quot;, 0);</a>
+<a name="540"><span class="lineNum"> 540 </span> : : }</a>
+<a name="541"><span class="lineNum"> 541 </span> : : </a>
+<a name="542"><span class="lineNum"> 542 </span> :<span class="lineCov"> 2 : fsp_node = fsp_create_node(sp, index, fsp_root);</span></a>
+<a name="543"><span class="lineNum"> 543 </span> :<span class="lineCov"> 2 : if (fsp_node)</span></a>
+<a name="544"><span class="lineNum"> 544 </span> :<span class="lineCov"> 2 : fsp_create_links(sp, index, fsp_node);</span></a>
+<a name="545"><span class="lineNum"> 545 </span> : : </a>
+<a name="546"><span class="lineNum"> 546 </span> :<span class="lineCov"> 2 : break;</span></a>
+<a name="547"><span class="lineNum"> 547 </span> : : </a>
+<a name="548"><span class="lineNum"> 548 </span> :<span class="lineNoCov"> 0 : case SP_BMC:</span></a>
+<a name="549"><span class="lineNum"> 549 </span> : : /* Handled above */</a>
+<a name="550"><span class="lineNum"> 550 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="551"><span class="lineNum"> 551 </span> : : </a>
+<a name="552"><span class="lineNum"> 552 </span> :<span class="lineNoCov"> 0 : case SP_BAD:</span></a>
+<a name="553"><span class="lineNum"> 553 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="554"><span class="lineNum"> 554 </span> : : </a>
+<a name="555"><span class="lineNum"> 555 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="556"><span class="lineNum"> 556 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SP #%d: This service processor is not supported\n&quot;, index);</span></a>
+<a name="557"><span class="lineNum"> 557 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="558"><span class="lineNum"> 558 </span> : : }</a>
+<a name="559"><span class="lineNum"> 559 </span> : : }</a>
+<a name="560"><span class="lineNum"> 560 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/hdata/hdif.c.func-sort-c.html b/coverage-report/hdata/hdif.c.func-sort-c.html
index f3cfb5b..f8da486 100644
--- a/coverage-report/hdata/hdif.c.func-sort-c.html
+++ b/coverage-report/hdata/hdif.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/hdata/hdif.c.func.html b/coverage-report/hdata/hdif.c.func.html
index 4ee0c15..a87f612 100644
--- a/coverage-report/hdata/hdif.c.func.html
+++ b/coverage-report/hdata/hdif.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/hdata/hdif.c.gcov.html b/coverage-report/hdata/hdif.c.gcov.html
index 5ab044c..7b52a43 100644
--- a/coverage-report/hdata/hdif.c.gcov.html
+++ b/coverage-report/hdata/hdif.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/hdata/hdif.h.func-sort-c.html b/coverage-report/hdata/hdif.h.func-sort-c.html
index 719d3db..faf26d3 100644
--- a/coverage-report/hdata/hdif.h.func-sort-c.html
+++ b/coverage-report/hdata/hdif.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/hdata/hdif.h.func.html b/coverage-report/hdata/hdif.h.func.html
index 5af077f..4fd4b35 100644
--- a/coverage-report/hdata/hdif.h.func.html
+++ b/coverage-report/hdata/hdif.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/hdata/hdif.h.gcov.html b/coverage-report/hdata/hdif.h.gcov.html
index 4d78055..3da85ec 100644
--- a/coverage-report/hdata/hdif.h.gcov.html
+++ b/coverage-report/hdata/hdif.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/hdata/hostservices.c.func-sort-c.html b/coverage-report/hdata/hostservices.c.func-sort-c.html
index f22efc2..ed41887 100644
--- a/coverage-report/hdata/hostservices.c.func-sort-c.html
+++ b/coverage-report/hdata/hostservices.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/hdata/hostservices.c.func.html b/coverage-report/hdata/hostservices.c.func.html
index a1dd06b..cd2541f 100644
--- a/coverage-report/hdata/hostservices.c.func.html
+++ b/coverage-report/hdata/hostservices.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/hdata/hostservices.c.gcov.html b/coverage-report/hdata/hostservices.c.gcov.html
index a6c399a..d888bef 100644
--- a/coverage-report/hdata/hostservices.c.gcov.html
+++ b/coverage-report/hdata/hostservices.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/hdata/i2c.c.func-sort-c.html b/coverage-report/hdata/i2c.c.func-sort-c.html
index 07ec7c1..721d295 100644
--- a/coverage-report/hdata/i2c.c.func-sort-c.html
+++ b/coverage-report/hdata/i2c.c.func-sort-c.html
@@ -32,16 +32,16 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">100</td>
+ <td class="headerCovTableEntry">124</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">7</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
@@ -69,27 +69,31 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="i2c.c.gcov.html#61">get_bus_node</a></td>
+ <td class="coverFn"><a href="i2c.c.gcov.html#64">__p8_i2c_add_port_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="i2c.c.gcov.html#31">get_i2cm_node</a></td>
+ <td class="coverFn"><a href="i2c.c.gcov.html#202">get_info</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="i2c.c.gcov.html#160">get_info</a></td>
+ <td class="coverFn"><a href="i2c.c.gcov.html#215">is_zeros</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="i2c.c.gcov.html#173">is_zeros</a></td>
+ <td class="coverFn"><a href="i2c.c.gcov.html#191">map_type</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="i2c.c.gcov.html#149">map_type</a></td>
+ <td class="coverFn"><a href="i2c.c.gcov.html#18">p8_i2c_add_master_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="i2c.c.gcov.html#190">parse_i2c_devs</a></td>
+ <td class="coverFn"><a href="i2c.c.gcov.html#102">p8_i2c_add_port_node</a></td>
+ <td class="coverFnLo">0</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="i2c.c.gcov.html#232">parse_i2c_devs</a></td>
<td class="coverFnLo">0</td>
</tr>
</table>
diff --git a/coverage-report/hdata/i2c.c.func.html b/coverage-report/hdata/i2c.c.func.html
index 5fb2d4f..97c2524 100644
--- a/coverage-report/hdata/i2c.c.func.html
+++ b/coverage-report/hdata/i2c.c.func.html
@@ -32,16 +32,16 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">100</td>
+ <td class="headerCovTableEntry">124</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">7</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
@@ -69,27 +69,31 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="i2c.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="i2c.c.gcov.html#61">get_bus_node</a></td>
+ <td class="coverFn"><a href="i2c.c.gcov.html#64">__p8_i2c_add_port_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="i2c.c.gcov.html#31">get_i2cm_node</a></td>
+ <td class="coverFn"><a href="i2c.c.gcov.html#202">get_info</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="i2c.c.gcov.html#160">get_info</a></td>
+ <td class="coverFn"><a href="i2c.c.gcov.html#215">is_zeros</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="i2c.c.gcov.html#173">is_zeros</a></td>
+ <td class="coverFn"><a href="i2c.c.gcov.html#191">map_type</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="i2c.c.gcov.html#149">map_type</a></td>
+ <td class="coverFn"><a href="i2c.c.gcov.html#18">p8_i2c_add_master_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="i2c.c.gcov.html#190">parse_i2c_devs</a></td>
+ <td class="coverFn"><a href="i2c.c.gcov.html#102">p8_i2c_add_port_node</a></td>
+ <td class="coverFnLo">0</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="i2c.c.gcov.html#232">parse_i2c_devs</a></td>
<td class="coverFnLo">0</td>
</tr>
</table>
diff --git a/coverage-report/hdata/i2c.c.gcov.html b/coverage-report/hdata/i2c.c.gcov.html
index 9c32d88..b78232c 100644
--- a/coverage-report/hdata/i2c.c.gcov.html
+++ b/coverage-report/hdata/i2c.c.gcov.html
@@ -32,16 +32,16 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">100</td>
+ <td class="headerCovTableEntry">124</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">7</td>
<td class="headerCovTableEntryLo">0.0 %</td>
</tr>
<tr>
@@ -78,357 +78,405 @@
<a name="7"><span class="lineNum"> 7 </span> : : #include &lt;interrupts.h&gt;</a>
<a name="8"><span class="lineNum"> 8 </span> : : #include &lt;ccan/str/str.h&gt;</a>
<a name="9"><span class="lineNum"> 9 </span> : : #include &lt;chip.h&gt;</a>
-<a name="10"><span class="lineNum"> 10 </span> : : </a>
-<a name="11"><span class="lineNum"> 11 </span> : : #include &quot;spira.h&quot;</a>
-<a name="12"><span class="lineNum"> 12 </span> : : #include &quot;hdata.h&quot;</a>
-<a name="13"><span class="lineNum"> 13 </span> : : </a>
-<a name="14"><span class="lineNum"> 14 </span> : : struct i2c_dev {</a>
-<a name="15"><span class="lineNum"> 15 </span> : : uint8_t i2cm_engine;</a>
-<a name="16"><span class="lineNum"> 16 </span> : : uint8_t i2cm_port;</a>
-<a name="17"><span class="lineNum"> 17 </span> : : __be16 i2c_bus_freq;</a>
-<a name="18"><span class="lineNum"> 18 </span> : : </a>
-<a name="19"><span class="lineNum"> 19 </span> : : /* i2c slave info */</a>
-<a name="20"><span class="lineNum"> 20 </span> : : uint8_t type;</a>
-<a name="21"><span class="lineNum"> 21 </span> : : uint8_t dev_addr;</a>
-<a name="22"><span class="lineNum"> 22 </span> : : uint8_t dev_port;</a>
-<a name="23"><span class="lineNum"> 23 </span> : : uint8_t __reserved;</a>
+<a name="10"><span class="lineNum"> 10 </span> : : #include &lt;i2c.h&gt;</a>
+<a name="11"><span class="lineNum"> 11 </span> : : </a>
+<a name="12"><span class="lineNum"> 12 </span> : : #include &quot;spira.h&quot;</a>
+<a name="13"><span class="lineNum"> 13 </span> : : #include &quot;hdata.h&quot;</a>
+<a name="14"><span class="lineNum"> 14 </span> : : </a>
+<a name="15"><span class="lineNum"> 15 </span> : : /*</a>
+<a name="16"><span class="lineNum"> 16 </span> : : * These should probably be in hw/p8-i2c.c. However, that would require the HDAT</a>
+<a name="17"><span class="lineNum"> 17 </span> : : * test to #include hw/p8-i2c.c which is probably going to be more trouble than</a>
+<a name="18"><span class="lineNum"> 18 </span> : : * it's worth. So these helpers are here instead.</a>
+<a name="19"><span class="lineNum"> 19 </span> : : */</a>
+<a name="20"><span class="lineNum"> 20 </span> :<span class="lineNoCov"> 0 : struct dt_node *p8_i2c_add_master_node(struct dt_node *xscom, int eng_id)</span></a>
+<a name="21"><span class="lineNum"> 21 </span> : : {</a>
+<a name="22"><span class="lineNum"> 22 </span> : : uint64_t clk, size, xscom_base;</a>
+<a name="23"><span class="lineNum"> 23 </span> : : struct dt_node *i2cm;</a>
<a name="24"><span class="lineNum"> 24 </span> : : </a>
-<a name="25"><span class="lineNum"> 25 </span> : : __be32 purpose;</a>
-<a name="26"><span class="lineNum"> 26 </span> : : __be32 i2c_link;</a>
-<a name="27"><span class="lineNum"> 27 </span> : : __be16 slca_index;</a>
-<a name="28"><span class="lineNum"> 28 </span> : : };</a>
-<a name="29"><span class="lineNum"> 29 </span> : : </a>
-<a name="30"><span class="lineNum"> 30 </span> : : #define P9_I2CM_XSCOM_SIZE 0x1000</a>
-<a name="31"><span class="lineNum"> 31 </span> : : #define P9_I2CM_XSCOM_BASE 0xa0000</a>
-<a name="32"><span class="lineNum"> 32 </span> : : </a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineNoCov"> 0 : static struct dt_node *get_i2cm_node(struct dt_node *xscom, int engine)</span></a>
-<a name="34"><span class="lineNum"> 34 </span> : : {</a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineNoCov"> 0 : uint64_t xscom_base = P9_I2CM_XSCOM_BASE + P9_I2CM_XSCOM_SIZE * (uint64_t)engine;</span></a>
-<a name="36"><span class="lineNum"> 36 </span> : : struct dt_node *i2cm;</a>
-<a name="37"><span class="lineNum"> 37 </span> : : uint64_t freq, clock;</a>
-<a name="38"><span class="lineNum"> 38 </span> : : </a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineNoCov"> 0 : i2cm = dt_find_by_name_addr(xscom, &quot;i2cm&quot;, xscom_base);</span></a>
-<a name="40"><span class="lineNum"> 40 </span> :<span class="lineNoCov"> 0 : if (!i2cm) {</span></a>
-<a name="41"><span class="lineNum"> 41 </span> :<span class="lineNoCov"> 0 : i2cm = dt_new_addr(xscom, &quot;i2cm&quot;, xscom_base);</span></a>
-<a name="42"><span class="lineNum"> 42 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(i2cm, &quot;reg&quot;, xscom_base,</span></a>
-<a name="43"><span class="lineNum"> 43 </span> : : P9_I2CM_XSCOM_SIZE);</a>
-<a name="44"><span class="lineNum"> 44 </span> : : </a>
-<a name="45"><span class="lineNum"> 45 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(i2cm, &quot;compatible&quot;,</span></a>
-<a name="46"><span class="lineNum"> 46 </span> : : &quot;ibm,power8-i2cm&quot;, &quot;ibm,power9-i2cm&quot;);</a>
+<a name="25"><span class="lineNum"> 25 </span> :<span class="lineNoCov"> 0 : dt_for_each_compatible(xscom, i2cm, &quot;ibm,power8-i2cm&quot;)</span></a>
+<a name="26"><span class="lineNum"> 26 </span> :<span class="lineNoCov"> 0 : if (dt_prop_get_u32(i2cm, &quot;chip-engine#&quot;) == eng_id)</span></a>
+<a name="27"><span class="lineNum"> 27 </span> :<span class="lineNoCov"> 0 : return i2cm;</span></a>
+<a name="28"><span class="lineNum"> 28 </span> : : </a>
+<a name="29"><span class="lineNum"> 29 </span> : : /* XXX: Might need to be updated for new chips */</a>
+<a name="30"><span class="lineNum"> 30 </span> :<span class="lineNoCov"> 0 : if (proc_gen &gt;= proc_gen_p9)</span></a>
+<a name="31"><span class="lineNum"> 31 </span> :<span class="lineNoCov"> 0 : size = 0x1000;</span></a>
+<a name="32"><span class="lineNum"> 32 </span> : : else</a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineNoCov"> 0 : size = 0x20;</span></a>
+<a name="34"><span class="lineNum"> 34 </span> : : </a>
+<a name="35"><span class="lineNum"> 35 </span> :<span class="lineNoCov"> 0 : xscom_base = 0xa0000 + size * eng_id;</span></a>
+<a name="36"><span class="lineNum"> 36 </span> : : </a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineNoCov"> 0 : i2cm = dt_new_addr(xscom, &quot;i2cm&quot;, xscom_base);</span></a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineNoCov"> 0 : if (!i2cm)</span></a>
+<a name="39"><span class="lineNum"> 39 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="40"><span class="lineNum"> 40 </span> : : </a>
+<a name="41"><span class="lineNum"> 41 </span> :<span class="lineNoCov"> 0 : if (proc_gen &gt;= proc_gen_p9) {</span></a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(i2cm, &quot;compatible&quot;, &quot;ibm,power8-i2cm&quot;,</span></a>
+<a name="43"><span class="lineNum"> 43 </span> : : &quot;ibm,power9-i2cm&quot;);</a>
+<a name="44"><span class="lineNum"> 44 </span> : : } else {</a>
+<a name="45"><span class="lineNum"> 45 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(i2cm, &quot;compatible&quot;, &quot;ibm,power8-i2cm&quot;);</span></a>
+<a name="46"><span class="lineNum"> 46 </span> : : }</a>
<a name="47"><span class="lineNum"> 47 </span> : : </a>
-<a name="48"><span class="lineNum"> 48 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(i2cm, &quot;#size-cells&quot;, 0);</span></a>
-<a name="49"><span class="lineNum"> 49 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(i2cm, &quot;#address-cells&quot;, 1);</span></a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(i2cm, &quot;chip-engine#&quot;, engine);</span></a>
-<a name="51"><span class="lineNum"> 51 </span> : : </a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineNoCov"> 0 : freq = dt_prop_get_u64_def(xscom, &quot;bus-frequency&quot;, 0);</span></a>
-<a name="53"><span class="lineNum"> 53 </span> :<span class="lineNoCov"> 0 : clock = (u32)(freq / 4);</span></a>
-<a name="54"><span class="lineNum"> 54 </span> :<span class="lineNoCov"> 0 : if (clock)</span></a>
-<a name="55"><span class="lineNum"> 55 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(i2cm, &quot;clock-frequency&quot;, clock);</span></a>
-<a name="56"><span class="lineNum"> 56 </span> : : else</a>
-<a name="57"><span class="lineNum"> 57 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(i2cm, &quot;clock-frequency&quot;, 150000000);</span></a>
-<a name="58"><span class="lineNum"> 58 </span> : : }</a>
-<a name="59"><span class="lineNum"> 59 </span> : : </a>
-<a name="60"><span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : return i2cm;</span></a>
-<a name="61"><span class="lineNum"> 61 </span> : : }</a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(i2cm, &quot;reg&quot;, xscom_base, size);</span></a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(i2cm, &quot;#size-cells&quot;, 0);</span></a>
+<a name="50"><span class="lineNum"> 50 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(i2cm, &quot;#address-cells&quot;, 1);</span></a>
+<a name="51"><span class="lineNum"> 51 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(i2cm, &quot;chip-engine#&quot;, eng_id);</span></a>
+<a name="52"><span class="lineNum"> 52 </span> : : </a>
+<a name="53"><span class="lineNum"> 53 </span> : : /*</a>
+<a name="54"><span class="lineNum"> 54 </span> : : * The i2cm runs at 1/4th the PIB frequency. If we don't know the PIB</a>
+<a name="55"><span class="lineNum"> 55 </span> : : * frequency then pick 150MHz which should be in the right ballpark.</a>
+<a name="56"><span class="lineNum"> 56 </span> : : */</a>
+<a name="57"><span class="lineNum"> 57 </span> :<span class="lineNoCov"> 0 : clk = dt_prop_get_u64_def(xscom, &quot;bus-frequency&quot;, 0);</span></a>
+<a name="58"><span class="lineNum"> 58 </span> :<span class="lineNoCov"> 0 : if (clk)</span></a>
+<a name="59"><span class="lineNum"> 59 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(i2cm, &quot;clock-frequency&quot;, clk / 4);</span></a>
+<a name="60"><span class="lineNum"> 60 </span> : : else</a>
+<a name="61"><span class="lineNum"> 61 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(i2cm, &quot;clock-frequency&quot;, 150000000);</span></a>
<a name="62"><span class="lineNum"> 62 </span> : : </a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : static struct dt_node *get_bus_node(struct dt_node *i2cm, int port, int freq)</span></a>
-<a name="64"><span class="lineNum"> 64 </span> : : {</a>
-<a name="65"><span class="lineNum"> 65 </span> : : struct dt_node *bus;</a>
-<a name="66"><span class="lineNum"> 66 </span> : : </a>
-<a name="67"><span class="lineNum"> 67 </span> :<span class="lineNoCov"> 0 : bus = dt_find_by_name_addr(i2cm, &quot;i2c-bus&quot;, port);</span></a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineNoCov"> 0 : if (!bus) {</span></a>
-<a name="69"><span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : bus = dt_new_addr(i2cm, &quot;i2c-bus&quot;, port);</span></a>
-<a name="70"><span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(bus, &quot;reg&quot;, port);</span></a>
-<a name="71"><span class="lineNum"> 71 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(bus, &quot;#size-cells&quot;, 0);</span></a>
-<a name="72"><span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(bus, &quot;#address-cells&quot;, 1);</span></a>
-<a name="73"><span class="lineNum"> 73 </span> : : </a>
-<a name="74"><span class="lineNum"> 74 </span> : : /* The P9 I2C master is fully compatible with the P8 one */</a>
-<a name="75"><span class="lineNum"> 75 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(bus, &quot;compatible&quot;, &quot;ibm,opal-i2c&quot;,</span></a>
-<a name="76"><span class="lineNum"> 76 </span> : : &quot;ibm,power8-i2c-port&quot;, &quot;ibm,power9-i2c-port&quot;);</a>
-<a name="77"><span class="lineNum"> 77 </span> : : </a>
-<a name="78"><span class="lineNum"> 78 </span> : : /*</a>
-<a name="79"><span class="lineNum"> 79 </span> : : * use the clock frequency as the bus frequency until we</a>
-<a name="80"><span class="lineNum"> 80 </span> : : * have actual devices on the bus. Adding a device will</a>
-<a name="81"><span class="lineNum"> 81 </span> : : * reduce the frequency to something that all devices</a>
-<a name="82"><span class="lineNum"> 82 </span> : : * can tolerate.</a>
-<a name="83"><span class="lineNum"> 83 </span> : : */</a>
-<a name="84"><span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(bus, &quot;bus-frequency&quot;, freq * 1000);</span></a>
-<a name="85"><span class="lineNum"> 85 </span> : : }</a>
-<a name="86"><span class="lineNum"> 86 </span> : : </a>
-<a name="87"><span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : return bus;</span></a>
-<a name="88"><span class="lineNum"> 88 </span> : : }</a>
-<a name="89"><span class="lineNum"> 89 </span> : : </a>
-<a name="90"><span class="lineNum"> 90 </span> : : struct hdat_i2c_type {</a>
-<a name="91"><span class="lineNum"> 91 </span> : : uint32_t id;</a>
-<a name="92"><span class="lineNum"> 92 </span> : : const char *name;</a>
-<a name="93"><span class="lineNum"> 93 </span> : : const char *compat;</a>
-<a name="94"><span class="lineNum"> 94 </span> : : };</a>
-<a name="95"><span class="lineNum"> 95 </span> : : </a>
-<a name="96"><span class="lineNum"> 96 </span> : : static struct hdat_i2c_type hdat_i2c_devs[] = {</a>
-<a name="97"><span class="lineNum"> 97 </span> : : { 0x1, &quot;gpio&quot;, &quot;nxp,pca9551&quot; },</a>
-<a name="98"><span class="lineNum"> 98 </span> : : /* XXX: Please verify that all VPD EEPROMs are of this type */</a>
-<a name="99"><span class="lineNum"> 99 </span> : : { 0x2, &quot;eeprom&quot;, &quot;atmel,24c128&quot; },</a>
-<a name="100"><span class="lineNum"> 100 </span> : : { 0x3, &quot;tpm&quot;, &quot;nuvoton,npct650&quot; },</a>
-<a name="101"><span class="lineNum"> 101 </span> : : { 0x4, &quot;i2c&quot;, NULL }, /* MEX-FPGA */</a>
-<a name="102"><span class="lineNum"> 102 </span> : : { 0x5, &quot;i2c&quot;, NULL }, /* UCX90xx devs for PCI Hotplug */</a>
-<a name="103"><span class="lineNum"> 103 </span> : : { 0x6, &quot;gpio&quot;, &quot;nxp,pca9552&quot; },</a>
-<a name="104"><span class="lineNum"> 104 </span> : : { 0x7, &quot;gpio&quot;, &quot;nxp,pca9553&quot; },</a>
-<a name="105"><span class="lineNum"> 105 </span> : : { 0x8, &quot;gpio&quot;, &quot;nxp,pca9554&quot; },</a>
-<a name="106"><span class="lineNum"> 106 </span> : : { 0x9, &quot;gpio&quot;, &quot;nxp,pca9555&quot; },</a>
-<a name="107"><span class="lineNum"> 107 </span> : : { 0xa, &quot;i2c&quot;, NULL }, /* SMP/OpenCAPI Cable */</a>
-<a name="108"><span class="lineNum"> 108 </span> : : { 0xb, &quot;eeprom&quot;, &quot;atmel,24c256&quot; },</a>
-<a name="109"><span class="lineNum"> 109 </span> : : { 0xc, &quot;i2c&quot;, NULL }, /* Thermal Sensor */</a>
-<a name="110"><span class="lineNum"> 110 </span> : : { 0xd, &quot;eeprom&quot;, &quot;atmel,24c04&quot; },</a>
-<a name="111"><span class="lineNum"> 111 </span> : : { 0xe, &quot;eeprom&quot;, &quot;atmel,24c512&quot; },</a>
-<a name="112"><span class="lineNum"> 112 </span> : : { 0xf, &quot;eeprom&quot;, &quot;atmel,24c32&quot; },</a>
-<a name="113"><span class="lineNum"> 113 </span> : : { 0x10, &quot;eeprom&quot;, &quot;atmel,24c64&quot; },</a>
-<a name="114"><span class="lineNum"> 114 </span> : : { 0x11, &quot;eeprom&quot;, &quot;atmel,24c16&quot; },</a>
-<a name="115"><span class="lineNum"> 115 </span> : : { 0x12, &quot;i2c&quot;, NULL }, /* NVDIA GPU */</a>
-<a name="116"><span class="lineNum"> 116 </span> : : { 0x13, &quot;i2c&quot;, &quot;nxp,lpc11u35&quot; },</a>
-<a name="117"><span class="lineNum"> 117 </span> : : };</a>
-<a name="118"><span class="lineNum"> 118 </span> : : </a>
-<a name="119"><span class="lineNum"> 119 </span> : : struct hdat_i2c_info {</a>
-<a name="120"><span class="lineNum"> 120 </span> : : uint32_t id;</a>
-<a name="121"><span class="lineNum"> 121 </span> : : bool allowed; /* true if the host may use the device */</a>
-<a name="122"><span class="lineNum"> 122 </span> : : const char *label;</a>
-<a name="123"><span class="lineNum"> 123 </span> : : };</a>
-<a name="124"><span class="lineNum"> 124 </span> : : </a>
-<a name="125"><span class="lineNum"> 125 </span> : : static struct hdat_i2c_info hdat_i2c_extra_info[] = {</a>
-<a name="126"><span class="lineNum"> 126 </span> : : { 0x1, false, &quot;led-controller&quot; },</a>
-<a name="127"><span class="lineNum"> 127 </span> : : { 0x2, false, &quot;pci-hotplug-pgood&quot; },</a>
-<a name="128"><span class="lineNum"> 128 </span> : : { 0x3, false, &quot;pci-hotplug-control&quot; },</a>
-<a name="129"><span class="lineNum"> 129 </span> : : { 0x4, true, &quot;tpm&quot; },</a>
-<a name="130"><span class="lineNum"> 130 </span> : : { 0x5, true, &quot;module-vpd&quot; },</a>
-<a name="131"><span class="lineNum"> 131 </span> : : { 0x6, true, &quot;dimm-spd&quot; },</a>
-<a name="132"><span class="lineNum"> 132 </span> : : { 0x7, true, &quot;proc-vpd&quot; },</a>
-<a name="133"><span class="lineNum"> 133 </span> : : { 0x8, false, &quot;sbe-eeprom&quot;},</a>
-<a name="134"><span class="lineNum"> 134 </span> : : { 0x9, true, &quot;planar-vpd&quot; },</a>
-<a name="135"><span class="lineNum"> 135 </span> : : { 0xa, false, &quot;opencapi-topology&quot; },</a>
-<a name="136"><span class="lineNum"> 136 </span> : : { 0xb, false, &quot;opencapi-micro-reset&quot; },</a>
-<a name="137"><span class="lineNum"> 137 </span> : : { 0xc, false, &quot;nvlink-cable&quot; },</a>
-<a name="138"><span class="lineNum"> 138 </span> : : { 0xd, false, &quot;secure-window-open&quot; },</a>
-<a name="139"><span class="lineNum"> 139 </span> : : { 0xe, false, &quot;physical-presence&quot; },</a>
-<a name="140"><span class="lineNum"> 140 </span> : : { 0xf, false, &quot;mex-fpga&quot; },</a>
-<a name="141"><span class="lineNum"> 141 </span> : : { 0x10, false, &quot;thermal-sensor&quot; },</a>
-<a name="142"><span class="lineNum"> 142 </span> : : { 0x11, false, &quot;host-i2c-enable&quot; },</a>
-<a name="143"><span class="lineNum"> 143 </span> : : { 0x12, false, &quot;gpu-config&quot; },</a>
-<a name="144"><span class="lineNum"> 144 </span> : : };</a>
-<a name="145"><span class="lineNum"> 145 </span> : : </a>
-<a name="146"><span class="lineNum"> 146 </span> : : /*</a>
-<a name="147"><span class="lineNum"> 147 </span> : : * this is pretty half-assed, to generate the labels properly we need to look</a>
-<a name="148"><span class="lineNum"> 148 </span> : : * up associated SLCA index and determine what kind of module the device is on</a>
-<a name="149"><span class="lineNum"> 149 </span> : : * and why</a>
-<a name="150"><span class="lineNum"> 150 </span> : : */</a>
-<a name="151"><span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : static struct hdat_i2c_type *map_type(uint32_t type)</span></a>
-<a name="152"><span class="lineNum"> 152 </span> : : {</a>
-<a name="153"><span class="lineNum"> 153 </span> : : int i;</a>
-<a name="154"><span class="lineNum"> 154 </span> : : </a>
-<a name="155"><span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; ARRAY_SIZE(hdat_i2c_devs); i++)</span></a>
-<a name="156"><span class="lineNum"> 156 </span> :<span class="lineNoCov"> 0 : if (hdat_i2c_devs[i].id == type)</span></a>
-<a name="157"><span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : return &amp;hdat_i2c_devs[i];</span></a>
-<a name="158"><span class="lineNum"> 158 </span> : : </a>
-<a name="159"><span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="160"><span class="lineNum"> 160 </span> : : }</a>
-<a name="161"><span class="lineNum"> 161 </span> : : </a>
-<a name="162"><span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : static struct hdat_i2c_info *get_info(uint32_t type)</span></a>
-<a name="163"><span class="lineNum"> 163 </span> : : {</a>
-<a name="164"><span class="lineNum"> 164 </span> : : static struct hdat_i2c_info no_info =</a>
-<a name="165"><span class="lineNum"> 165 </span> : : { .id = 0x0, .allowed = false, .label = &quot;&quot; };</a>
-<a name="166"><span class="lineNum"> 166 </span> : : int i;</a>
-<a name="167"><span class="lineNum"> 167 </span> : : </a>
-<a name="168"><span class="lineNum"> 168 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; ARRAY_SIZE(hdat_i2c_extra_info); i++)</span></a>
-<a name="169"><span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : if (hdat_i2c_extra_info[i].id == type)</span></a>
-<a name="170"><span class="lineNum"> 170 </span> :<span class="lineNoCov"> 0 : return &amp;hdat_i2c_extra_info[i];</span></a>
-<a name="171"><span class="lineNum"> 171 </span> : : </a>
-<a name="172"><span class="lineNum"> 172 </span> :<span class="lineNoCov"> 0 : return &amp;no_info;</span></a>
-<a name="173"><span class="lineNum"> 173 </span> : : }</a>
-<a name="174"><span class="lineNum"> 174 </span> : : </a>
-<a name="175"><span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : static bool is_zeros(const void *p, size_t size)</span></a>
-<a name="176"><span class="lineNum"> 176 </span> : : {</a>
-<a name="177"><span class="lineNum"> 177 </span> :<span class="lineNoCov"> 0 : const char *c = p;</span></a>
-<a name="178"><span class="lineNum"> 178 </span> : : size_t i;</a>
-<a name="179"><span class="lineNum"> 179 </span> : : </a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; size; i++)</span></a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : if (c[i] != 0)</span></a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="183"><span class="lineNum"> 183 </span> : : </a>
-<a name="184"><span class="lineNum"> 184 </span> :<span class="lineNoCov"> 0 : return true;</span></a>
-<a name="185"><span class="lineNum"> 185 </span> : : }</a>
-<a name="186"><span class="lineNum"> 186 </span> : : </a>
-<a name="187"><span class="lineNum"> 187 </span> : : struct host_i2c_hdr {</a>
-<a name="188"><span class="lineNum"> 188 </span> : : const struct HDIF_array_hdr hdr;</a>
-<a name="189"><span class="lineNum"> 189 </span> : : __be32 version;</a>
-<a name="190"><span class="lineNum"> 190 </span> : : } __packed __align(0x4);</a>
-<a name="191"><span class="lineNum"> 191 </span> : : </a>
-<a name="192"><span class="lineNum"> 192 </span> :<span class="lineNoCov"> 0 : int parse_i2c_devs(const struct HDIF_common_hdr *hdr, int idata_index,</span></a>
-<a name="193"><span class="lineNum"> 193 </span> : : struct dt_node *xscom)</a>
+<a name="63"><span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : return i2cm;</span></a>
+<a name="64"><span class="lineNum"> 64 </span> : : }</a>
+<a name="65"><span class="lineNum"> 65 </span> : : </a>
+<a name="66"><span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : struct dt_node *__p8_i2c_add_port_node(struct dt_node *master, int port_id,</span></a>
+<a name="67"><span class="lineNum"> 67 </span> : : uint32_t bus_speed)</a>
+<a name="68"><span class="lineNum"> 68 </span> : : {</a>
+<a name="69"><span class="lineNum"> 69 </span> : : struct dt_node *port;</a>
+<a name="70"><span class="lineNum"> 70 </span> : : uint32_t speed;</a>
+<a name="71"><span class="lineNum"> 71 </span> : : </a>
+<a name="72"><span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : dt_for_each_child(master, port)</span></a>
+<a name="73"><span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : if (dt_prop_get_u32(port, &quot;reg&quot;) == port_id)</span></a>
+<a name="74"><span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : goto check_speed;</span></a>
+<a name="75"><span class="lineNum"> 75 </span> : : </a>
+<a name="76"><span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : port = dt_new_addr(master, &quot;i2c-bus&quot;, port_id);</span></a>
+<a name="77"><span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : if (!port)</span></a>
+<a name="78"><span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="79"><span class="lineNum"> 79 </span> : : </a>
+<a name="80"><span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(port, &quot;reg&quot;, port_id);</span></a>
+<a name="81"><span class="lineNum"> 81 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(port, &quot;#size-cells&quot;, 0);</span></a>
+<a name="82"><span class="lineNum"> 82 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(port, &quot;#address-cells&quot;, 1);</span></a>
+<a name="83"><span class="lineNum"> 83 </span> : : </a>
+<a name="84"><span class="lineNum"> 84 </span> : : /* The P9 I2C master is fully compatible with the P8 one */</a>
+<a name="85"><span class="lineNum"> 85 </span> :<span class="lineNoCov"> 0 : if (proc_gen &gt;= proc_gen_p9) {</span></a>
+<a name="86"><span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(port, &quot;compatible&quot;, &quot;ibm,opal-i2c&quot;,</span></a>
+<a name="87"><span class="lineNum"> 87 </span> : : &quot;ibm,power8-i2c-port&quot;, &quot;ibm,power9-i2c-port&quot;);</a>
+<a name="88"><span class="lineNum"> 88 </span> : : } else {</a>
+<a name="89"><span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(port, &quot;compatible&quot;, &quot;ibm,opal-i2c&quot;,</span></a>
+<a name="90"><span class="lineNum"> 90 </span> : : &quot;ibm,power8-i2c-port&quot;);</a>
+<a name="91"><span class="lineNum"> 91 </span> : : }</a>
+<a name="92"><span class="lineNum"> 92 </span> : : </a>
+<a name="93"><span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : check_speed:</span></a>
+<a name="94"><span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : speed = dt_prop_get_u32_def(port, &quot;bus-frequency&quot;, 0xffffffff);</span></a>
+<a name="95"><span class="lineNum"> 95 </span> :<span class="lineNoCov"> 0 : if (bus_speed &lt; speed) {</span></a>
+<a name="96"><span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : dt_check_del_prop(port, &quot;bus-frequency&quot;);</span></a>
+<a name="97"><span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(port, &quot;bus-frequency&quot;, bus_speed);</span></a>
+<a name="98"><span class="lineNum"> 98 </span> : : }</a>
+<a name="99"><span class="lineNum"> 99 </span> : : </a>
+<a name="100"><span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : return port;</span></a>
+<a name="101"><span class="lineNum"> 101 </span> : : }</a>
+<a name="102"><span class="lineNum"> 102 </span> : : </a>
+<a name="103"><span class="lineNum"> 103 </span> : : </a>
+<a name="104"><span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : struct dt_node *p8_i2c_add_port_node(struct dt_node *xscom, int eng_id,</span></a>
+<a name="105"><span class="lineNum"> 105 </span> : : int port_id, uint32_t bus_freq)</a>
+<a name="106"><span class="lineNum"> 106 </span> : : {</a>
+<a name="107"><span class="lineNum"> 107 </span> : : struct dt_node *i2cm;</a>
+<a name="108"><span class="lineNum"> 108 </span> : : </a>
+<a name="109"><span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : i2cm = p8_i2c_add_master_node(xscom, eng_id);</span></a>
+<a name="110"><span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : if (!i2cm)</span></a>
+<a name="111"><span class="lineNum"> 111 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="112"><span class="lineNum"> 112 </span> : : </a>
+<a name="113"><span class="lineNum"> 113 </span> :<span class="lineNoCov"> 0 : return __p8_i2c_add_port_node(i2cm, port_id, bus_freq);</span></a>
+<a name="114"><span class="lineNum"> 114 </span> : : }</a>
+<a name="115"><span class="lineNum"> 115 </span> : : </a>
+<a name="116"><span class="lineNum"> 116 </span> : : struct i2c_dev {</a>
+<a name="117"><span class="lineNum"> 117 </span> : : uint8_t i2cm_engine;</a>
+<a name="118"><span class="lineNum"> 118 </span> : : uint8_t i2cm_port;</a>
+<a name="119"><span class="lineNum"> 119 </span> : : __be16 i2c_bus_freq;</a>
+<a name="120"><span class="lineNum"> 120 </span> : : </a>
+<a name="121"><span class="lineNum"> 121 </span> : : /* i2c slave info */</a>
+<a name="122"><span class="lineNum"> 122 </span> : : uint8_t type;</a>
+<a name="123"><span class="lineNum"> 123 </span> : : uint8_t dev_addr;</a>
+<a name="124"><span class="lineNum"> 124 </span> : : uint8_t dev_port;</a>
+<a name="125"><span class="lineNum"> 125 </span> : : uint8_t __reserved;</a>
+<a name="126"><span class="lineNum"> 126 </span> : : </a>
+<a name="127"><span class="lineNum"> 127 </span> : : __be32 purpose;</a>
+<a name="128"><span class="lineNum"> 128 </span> : : __be32 i2c_link;</a>
+<a name="129"><span class="lineNum"> 129 </span> : : __be16 slca_index;</a>
+<a name="130"><span class="lineNum"> 130 </span> : : };</a>
+<a name="131"><span class="lineNum"> 131 </span> : : </a>
+<a name="132"><span class="lineNum"> 132 </span> : : struct hdat_i2c_type {</a>
+<a name="133"><span class="lineNum"> 133 </span> : : uint32_t id;</a>
+<a name="134"><span class="lineNum"> 134 </span> : : const char *name;</a>
+<a name="135"><span class="lineNum"> 135 </span> : : const char *compat;</a>
+<a name="136"><span class="lineNum"> 136 </span> : : };</a>
+<a name="137"><span class="lineNum"> 137 </span> : : </a>
+<a name="138"><span class="lineNum"> 138 </span> : : static struct hdat_i2c_type hdat_i2c_devs[] = {</a>
+<a name="139"><span class="lineNum"> 139 </span> : : { 0x1, &quot;gpio&quot;, &quot;nxp,pca9551&quot; },</a>
+<a name="140"><span class="lineNum"> 140 </span> : : /* XXX: Please verify that all VPD EEPROMs are of this type */</a>
+<a name="141"><span class="lineNum"> 141 </span> : : { 0x2, &quot;eeprom&quot;, &quot;atmel,24c128&quot; },</a>
+<a name="142"><span class="lineNum"> 142 </span> : : { 0x3, &quot;tpm&quot;, &quot;nuvoton,npct650&quot; },</a>
+<a name="143"><span class="lineNum"> 143 </span> : : { 0x4, &quot;i2c&quot;, NULL }, /* MEX-FPGA */</a>
+<a name="144"><span class="lineNum"> 144 </span> : : { 0x5, &quot;i2c&quot;, NULL }, /* UCX90xx devs for PCI Hotplug */</a>
+<a name="145"><span class="lineNum"> 145 </span> : : { 0x6, &quot;gpio&quot;, &quot;nxp,pca9552&quot; },</a>
+<a name="146"><span class="lineNum"> 146 </span> : : { 0x7, &quot;gpio&quot;, &quot;nxp,pca9553&quot; },</a>
+<a name="147"><span class="lineNum"> 147 </span> : : { 0x8, &quot;gpio&quot;, &quot;nxp,pca9554&quot; },</a>
+<a name="148"><span class="lineNum"> 148 </span> : : { 0x9, &quot;gpio&quot;, &quot;nxp,pca9555&quot; },</a>
+<a name="149"><span class="lineNum"> 149 </span> : : { 0xa, &quot;i2c&quot;, NULL }, /* SMP/OpenCAPI Cable */</a>
+<a name="150"><span class="lineNum"> 150 </span> : : { 0xb, &quot;eeprom&quot;, &quot;atmel,24c256&quot; },</a>
+<a name="151"><span class="lineNum"> 151 </span> : : { 0xc, &quot;i2c&quot;, NULL }, /* Thermal Sensor */</a>
+<a name="152"><span class="lineNum"> 152 </span> : : { 0xd, &quot;eeprom&quot;, &quot;atmel,24c04&quot; },</a>
+<a name="153"><span class="lineNum"> 153 </span> : : { 0xe, &quot;eeprom&quot;, &quot;atmel,24c512&quot; },</a>
+<a name="154"><span class="lineNum"> 154 </span> : : { 0xf, &quot;eeprom&quot;, &quot;atmel,24c32&quot; },</a>
+<a name="155"><span class="lineNum"> 155 </span> : : { 0x10, &quot;eeprom&quot;, &quot;atmel,24c64&quot; },</a>
+<a name="156"><span class="lineNum"> 156 </span> : : { 0x11, &quot;eeprom&quot;, &quot;atmel,24c16&quot; },</a>
+<a name="157"><span class="lineNum"> 157 </span> : : { 0x12, &quot;i2c&quot;, NULL }, /* NVDIA GPU */</a>
+<a name="158"><span class="lineNum"> 158 </span> : : { 0x13, &quot;i2c&quot;, &quot;nxp,lpc11u35&quot; },</a>
+<a name="159"><span class="lineNum"> 159 </span> : : };</a>
+<a name="160"><span class="lineNum"> 160 </span> : : </a>
+<a name="161"><span class="lineNum"> 161 </span> : : struct hdat_i2c_info {</a>
+<a name="162"><span class="lineNum"> 162 </span> : : uint32_t id;</a>
+<a name="163"><span class="lineNum"> 163 </span> : : bool allowed; /* true if the host may use the device */</a>
+<a name="164"><span class="lineNum"> 164 </span> : : const char *label;</a>
+<a name="165"><span class="lineNum"> 165 </span> : : };</a>
+<a name="166"><span class="lineNum"> 166 </span> : : </a>
+<a name="167"><span class="lineNum"> 167 </span> : : static struct hdat_i2c_info hdat_i2c_extra_info[] = {</a>
+<a name="168"><span class="lineNum"> 168 </span> : : { 0x1, false, &quot;led-controller&quot; },</a>
+<a name="169"><span class="lineNum"> 169 </span> : : { 0x2, false, &quot;pci-hotplug-pgood&quot; },</a>
+<a name="170"><span class="lineNum"> 170 </span> : : { 0x3, false, &quot;pci-hotplug-control&quot; },</a>
+<a name="171"><span class="lineNum"> 171 </span> : : { 0x4, true, &quot;tpm&quot; },</a>
+<a name="172"><span class="lineNum"> 172 </span> : : { 0x5, true, &quot;module-vpd&quot; },</a>
+<a name="173"><span class="lineNum"> 173 </span> : : { 0x6, true, &quot;dimm-spd&quot; },</a>
+<a name="174"><span class="lineNum"> 174 </span> : : { 0x7, true, &quot;proc-vpd&quot; },</a>
+<a name="175"><span class="lineNum"> 175 </span> : : { 0x8, false, &quot;sbe-eeprom&quot;},</a>
+<a name="176"><span class="lineNum"> 176 </span> : : { 0x9, true, &quot;planar-vpd&quot; },</a>
+<a name="177"><span class="lineNum"> 177 </span> : : { 0xa, false, &quot;opencapi-topology&quot; },</a>
+<a name="178"><span class="lineNum"> 178 </span> : : { 0xb, false, &quot;opencapi-micro-reset&quot; },</a>
+<a name="179"><span class="lineNum"> 179 </span> : : { 0xc, false, &quot;nvlink-cable&quot; },</a>
+<a name="180"><span class="lineNum"> 180 </span> : : { 0xd, false, &quot;secure-window-open&quot; },</a>
+<a name="181"><span class="lineNum"> 181 </span> : : { 0xe, false, &quot;physical-presence&quot; },</a>
+<a name="182"><span class="lineNum"> 182 </span> : : { 0xf, false, &quot;mex-fpga&quot; },</a>
+<a name="183"><span class="lineNum"> 183 </span> : : { 0x10, false, &quot;thermal-sensor&quot; },</a>
+<a name="184"><span class="lineNum"> 184 </span> : : { 0x11, false, &quot;host-i2c-enable&quot; },</a>
+<a name="185"><span class="lineNum"> 185 </span> : : { 0x12, false, &quot;gpu-config&quot; },</a>
+<a name="186"><span class="lineNum"> 186 </span> : : };</a>
+<a name="187"><span class="lineNum"> 187 </span> : : </a>
+<a name="188"><span class="lineNum"> 188 </span> : : /*</a>
+<a name="189"><span class="lineNum"> 189 </span> : : * this is pretty half-assed, to generate the labels properly we need to look</a>
+<a name="190"><span class="lineNum"> 190 </span> : : * up associated SLCA index and determine what kind of module the device is on</a>
+<a name="191"><span class="lineNum"> 191 </span> : : * and why</a>
+<a name="192"><span class="lineNum"> 192 </span> : : */</a>
+<a name="193"><span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : static struct hdat_i2c_type *map_type(uint32_t type)</span></a>
<a name="194"><span class="lineNum"> 194 </span> : : {</a>
-<a name="195"><span class="lineNum"> 195 </span> : : struct dt_node *i2cm, *bus, *node;</a>
-<a name="196"><span class="lineNum"> 196 </span> : : const struct hdat_i2c_type *type;</a>
-<a name="197"><span class="lineNum"> 197 </span> : : const struct hdat_i2c_info *info;</a>
-<a name="198"><span class="lineNum"> 198 </span> : : const struct i2c_dev *dev;</a>
-<a name="199"><span class="lineNum"> 199 </span> : : const char *name, *compat;</a>
-<a name="200"><span class="lineNum"> 200 </span> : : const struct host_i2c_hdr *ahdr;</a>
-<a name="201"><span class="lineNum"> 201 </span> : : uint32_t dev_addr;</a>
-<a name="202"><span class="lineNum"> 202 </span> : : uint32_t version;</a>
-<a name="203"><span class="lineNum"> 203 </span> : : uint32_t size;</a>
-<a name="204"><span class="lineNum"> 204 </span> : : uint32_t purpose;</a>
-<a name="205"><span class="lineNum"> 205 </span> : : int i, count;</a>
-<a name="206"><span class="lineNum"> 206 </span> : : </a>
-<a name="207"><span class="lineNum"> 207 </span> : : /*</a>
-<a name="208"><span class="lineNum"> 208 </span> : : * This code makes a few assumptions about XSCOM addrs, etc</a>
-<a name="209"><span class="lineNum"> 209 </span> : : * and will need updating for new processors</a>
-<a name="210"><span class="lineNum"> 210 </span> : : */</a>
-<a name="211"><span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : assert(proc_gen == proc_gen_p9);</span></a>
-<a name="212"><span class="lineNum"> 212 </span> : : </a>
-<a name="213"><span class="lineNum"> 213 </span> : : /*</a>
-<a name="214"><span class="lineNum"> 214 </span> : : * Emit an error if we get a newer version. This is an interim measure</a>
-<a name="215"><span class="lineNum"> 215 </span> : : * until the new version format is finalised.</a>
-<a name="216"><span class="lineNum"> 216 </span> : : */</a>
-<a name="217"><span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : ahdr = HDIF_get_idata(hdr, idata_index, &amp;size);</span></a>
-<a name="218"><span class="lineNum"> 218 </span> :<span class="lineNoCov"> 0 : if (!ahdr || !size)</span></a>
-<a name="219"><span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
-<a name="220"><span class="lineNum"> 220 </span> : : </a>
-<a name="221"><span class="lineNum"> 221 </span> : : /*</a>
-<a name="222"><span class="lineNum"> 222 </span> : : * Some hostboots don't correctly fill the version field. On these</a>
-<a name="223"><span class="lineNum"> 223 </span> : : * the offset from the start of the header to the start of the array</a>
-<a name="224"><span class="lineNum"> 224 </span> : : * is 16 bytes.</a>
-<a name="225"><span class="lineNum"> 225 </span> : : */</a>
-<a name="226"><span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : if (be32_to_cpu(ahdr-&gt;hdr.offset) == 16) {</span></a>
-<a name="227"><span class="lineNum"> 227 </span> :<span class="lineNoCov"> 0 : version = 1;</span></a>
-<a name="228"><span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : prerror(&quot;I2C: HDAT device array has no version! Assuming v1\n&quot;);</span></a>
-<a name="229"><span class="lineNum"> 229 </span> : : } else {</a>
-<a name="230"><span class="lineNum"> 230 </span> :<span class="lineNoCov"> 0 : version = be32_to_cpu(ahdr-&gt;version);</span></a>
-<a name="231"><span class="lineNum"> 231 </span> : : }</a>
-<a name="232"><span class="lineNum"> 232 </span> : : </a>
-<a name="233"><span class="lineNum"> 233 </span> :<span class="lineNoCov"> 0 : if (version == 2) {</span></a>
-<a name="234"><span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;I2C: v%d found, but not supported. Parsing as v1\n&quot;,</span></a>
-<a name="235"><span class="lineNum"> 235 </span> : : version);</a>
-<a name="236"><span class="lineNum"> 236 </span> :<span class="lineNoCov"> 0 : } else if (version &gt; 2) {</span></a>
-<a name="237"><span class="lineNum"> 237 </span> :<span class="lineNoCov"> 0 : prerror(&quot;I2C: v%d found, but not supported! THIS IS A BUG\n&quot;,</span></a>
-<a name="238"><span class="lineNum"> 238 </span> : : version);</a>
-<a name="239"><span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
-<a name="240"><span class="lineNum"> 240 </span> : : }</a>
-<a name="241"><span class="lineNum"> 241 </span> : : </a>
-<a name="242"><span class="lineNum"> 242 </span> :<span class="lineNoCov"> 0 : count = HDIF_get_iarray_size(hdr, idata_index);</span></a>
-<a name="243"><span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; count; i++) {</span></a>
-<a name="244"><span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : dev = HDIF_get_iarray_item(hdr, idata_index, i, &amp;size);</span></a>
-<a name="245"><span class="lineNum"> 245 </span> : : </a>
-<a name="246"><span class="lineNum"> 246 </span> : : /*</a>
-<a name="247"><span class="lineNum"> 247 </span> : : * XXX: Some broken hostboots populate i2c devs with zeros.</a>
-<a name="248"><span class="lineNum"> 248 </span> : : * Workaround them for now.</a>
-<a name="249"><span class="lineNum"> 249 </span> : : */</a>
-<a name="250"><span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : if (is_zeros(dev, size)) {</span></a>
-<a name="251"><span class="lineNum"> 251 </span> :<span class="lineNoCov"> 0 : prerror(&quot;I2C: Ignoring broken i2c dev %d\n&quot;, i);</span></a>
-<a name="252"><span class="lineNum"> 252 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="253"><span class="lineNum"> 253 </span> : : }</a>
+<a name="195"><span class="lineNum"> 195 </span> : : int i;</a>
+<a name="196"><span class="lineNum"> 196 </span> : : </a>
+<a name="197"><span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; ARRAY_SIZE(hdat_i2c_devs); i++)</span></a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineNoCov"> 0 : if (hdat_i2c_devs[i].id == type)</span></a>
+<a name="199"><span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : return &amp;hdat_i2c_devs[i];</span></a>
+<a name="200"><span class="lineNum"> 200 </span> : : </a>
+<a name="201"><span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="202"><span class="lineNum"> 202 </span> : : }</a>
+<a name="203"><span class="lineNum"> 203 </span> : : </a>
+<a name="204"><span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : static struct hdat_i2c_info *get_info(uint32_t type)</span></a>
+<a name="205"><span class="lineNum"> 205 </span> : : {</a>
+<a name="206"><span class="lineNum"> 206 </span> : : static struct hdat_i2c_info no_info =</a>
+<a name="207"><span class="lineNum"> 207 </span> : : { .id = 0x0, .allowed = false, .label = &quot;&quot; };</a>
+<a name="208"><span class="lineNum"> 208 </span> : : int i;</a>
+<a name="209"><span class="lineNum"> 209 </span> : : </a>
+<a name="210"><span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; ARRAY_SIZE(hdat_i2c_extra_info); i++)</span></a>
+<a name="211"><span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : if (hdat_i2c_extra_info[i].id == type)</span></a>
+<a name="212"><span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : return &amp;hdat_i2c_extra_info[i];</span></a>
+<a name="213"><span class="lineNum"> 213 </span> : : </a>
+<a name="214"><span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : return &amp;no_info;</span></a>
+<a name="215"><span class="lineNum"> 215 </span> : : }</a>
+<a name="216"><span class="lineNum"> 216 </span> : : </a>
+<a name="217"><span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : static bool is_zeros(const void *p, size_t size)</span></a>
+<a name="218"><span class="lineNum"> 218 </span> : : {</a>
+<a name="219"><span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : const char *c = p;</span></a>
+<a name="220"><span class="lineNum"> 220 </span> : : size_t i;</a>
+<a name="221"><span class="lineNum"> 221 </span> : : </a>
+<a name="222"><span class="lineNum"> 222 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; size; i++)</span></a>
+<a name="223"><span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : if (c[i] != 0)</span></a>
+<a name="224"><span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="225"><span class="lineNum"> 225 </span> : : </a>
+<a name="226"><span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : return true;</span></a>
+<a name="227"><span class="lineNum"> 227 </span> : : }</a>
+<a name="228"><span class="lineNum"> 228 </span> : : </a>
+<a name="229"><span class="lineNum"> 229 </span> : : struct host_i2c_hdr {</a>
+<a name="230"><span class="lineNum"> 230 </span> : : const struct HDIF_array_hdr hdr;</a>
+<a name="231"><span class="lineNum"> 231 </span> : : __be32 version;</a>
+<a name="232"><span class="lineNum"> 232 </span> : : } __packed __align(0x4);</a>
+<a name="233"><span class="lineNum"> 233 </span> : : </a>
+<a name="234"><span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : int parse_i2c_devs(const struct HDIF_common_hdr *hdr, int idata_index,</span></a>
+<a name="235"><span class="lineNum"> 235 </span> : : struct dt_node *xscom)</a>
+<a name="236"><span class="lineNum"> 236 </span> : : {</a>
+<a name="237"><span class="lineNum"> 237 </span> : : struct dt_node *bus, *node;</a>
+<a name="238"><span class="lineNum"> 238 </span> : : const struct hdat_i2c_type *type;</a>
+<a name="239"><span class="lineNum"> 239 </span> : : const struct hdat_i2c_info *info;</a>
+<a name="240"><span class="lineNum"> 240 </span> : : const struct i2c_dev *dev;</a>
+<a name="241"><span class="lineNum"> 241 </span> : : const char *name, *compat;</a>
+<a name="242"><span class="lineNum"> 242 </span> : : const struct host_i2c_hdr *ahdr;</a>
+<a name="243"><span class="lineNum"> 243 </span> : : uint32_t dev_addr;</a>
+<a name="244"><span class="lineNum"> 244 </span> : : uint32_t version;</a>
+<a name="245"><span class="lineNum"> 245 </span> : : uint32_t size;</a>
+<a name="246"><span class="lineNum"> 246 </span> : : uint32_t purpose;</a>
+<a name="247"><span class="lineNum"> 247 </span> : : int i, count;</a>
+<a name="248"><span class="lineNum"> 248 </span> : : </a>
+<a name="249"><span class="lineNum"> 249 </span> : : /*</a>
+<a name="250"><span class="lineNum"> 250 </span> : : * This code makes a few assumptions about XSCOM addrs, etc</a>
+<a name="251"><span class="lineNum"> 251 </span> : : * and will need updating for new processors</a>
+<a name="252"><span class="lineNum"> 252 </span> : : */</a>
+<a name="253"><span class="lineNum"> 253 </span> :<span class="lineNoCov"> 0 : assert(proc_gen == proc_gen_p9 || proc_gen == proc_gen_p10);</span></a>
<a name="254"><span class="lineNum"> 254 </span> : : </a>
-<a name="255"><span class="lineNum"> 255 </span> : : /*</a>
-<a name="256"><span class="lineNum"> 256 </span> : : * On some systems the CFAM I2C master is represented in the</a>
-<a name="257"><span class="lineNum"> 257 </span> : : * host I2C table as engine 6. There are only 4 (0, 1, 2, 3)</a>
-<a name="258"><span class="lineNum"> 258 </span> : : * engines accessible to the host via XSCOM so filter out</a>
-<a name="259"><span class="lineNum"> 259 </span> : : * engines outside this range so we don't create bogus</a>
-<a name="260"><span class="lineNum"> 260 </span> : : * i2cm@&lt;addr&gt; nodes.</a>
-<a name="261"><span class="lineNum"> 261 </span> : : */</a>
-<a name="262"><span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : if (dev-&gt;i2cm_engine &gt;= 4 &amp;&amp; proc_gen == proc_gen_p9)</span></a>
-<a name="263"><span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="264"><span class="lineNum"> 264 </span> : : </a>
-<a name="265"><span class="lineNum"> 265 </span> :<span class="lineNoCov"> 0 : i2cm = get_i2cm_node(xscom, dev-&gt;i2cm_engine);</span></a>
-<a name="266"><span class="lineNum"> 266 </span> :<span class="lineNoCov"> 0 : bus = get_bus_node(i2cm, dev-&gt;i2cm_port,</span></a>
-<a name="267"><span class="lineNum"> 267 </span> :<span class="lineNoCov"> 0 : be16_to_cpu(dev-&gt;i2c_bus_freq));</span></a>
-<a name="268"><span class="lineNum"> 268 </span> : : </a>
-<a name="269"><span class="lineNum"> 269 </span> : : /*</a>
-<a name="270"><span class="lineNum"> 270 </span> : : * Looks like hostboot gives the address as an 8 bit, left</a>
-<a name="271"><span class="lineNum"> 271 </span> : : * justified quantity (i.e it includes the R/W bit). So we need</a>
-<a name="272"><span class="lineNum"> 272 </span> : : * to strip it off to get an address linux can use.</a>
-<a name="273"><span class="lineNum"> 273 </span> : : */</a>
-<a name="274"><span class="lineNum"> 274 </span> :<span class="lineNoCov"> 0 : dev_addr = dev-&gt;dev_addr &gt;&gt; 1;</span></a>
-<a name="275"><span class="lineNum"> 275 </span> : : </a>
-<a name="276"><span class="lineNum"> 276 </span> :<span class="lineNoCov"> 0 : purpose = be32_to_cpu(dev-&gt;purpose);</span></a>
-<a name="277"><span class="lineNum"> 277 </span> :<span class="lineNoCov"> 0 : type = map_type(dev-&gt;type);</span></a>
-<a name="278"><span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : info = get_info(purpose);</span></a>
-<a name="279"><span class="lineNum"> 279 </span> : : </a>
-<a name="280"><span class="lineNum"> 280 </span> : : /* HACK: Hostboot doesn't export the correct type information</a>
-<a name="281"><span class="lineNum"> 281 </span> : : * for the DIMM SPD EEPROMs. This is a problem because SPD</a>
-<a name="282"><span class="lineNum"> 282 </span> : : * EEPROMs have a different wire protocol to the atmel,24XXXX</a>
-<a name="283"><span class="lineNum"> 283 </span> : : * series. The main difference being that SPD EEPROMs have an</a>
-<a name="284"><span class="lineNum"> 284 </span> : : * 8bit offset rather than a 16bit offset. This means that the</a>
-<a name="285"><span class="lineNum"> 285 </span> : : * driver will send 2 bytes when doing a random read,</a>
-<a name="286"><span class="lineNum"> 286 </span> : : * potentially overwriting part of the SPD information.</a>
-<a name="287"><span class="lineNum"> 287 </span> : : *</a>
-<a name="288"><span class="lineNum"> 288 </span> : : * Just to make things interested the FSP also gets the device</a>
-<a name="289"><span class="lineNum"> 289 </span> : : * type wrong. To work around both just set the device-type to</a>
-<a name="290"><span class="lineNum"> 290 </span> : : * &quot;spd&quot; for anything in the 0x50 to 0x57 range since that's the</a>
-<a name="291"><span class="lineNum"> 291 </span> : : * SPD eeprom range.</a>
-<a name="292"><span class="lineNum"> 292 </span> : : *</a>
-<a name="293"><span class="lineNum"> 293 </span> : : * XXX: Future chips might not use engine 3 for the DIMM buses.</a>
-<a name="294"><span class="lineNum"> 294 </span> : : */</a>
-<a name="295"><span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : if (dev-&gt;i2cm_engine == 3 &amp;&amp; dev_addr &gt;= 0x50</span></a>
-<a name="296"><span class="lineNum"> 296 </span> :<span class="lineNoCov"> 0 : &amp;&amp; dev_addr &lt; 0x58) {</span></a>
-<a name="297"><span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : compat = &quot;spd&quot;;</span></a>
-<a name="298"><span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : name = &quot;eeprom&quot;;</span></a>
-<a name="299"><span class="lineNum"> 299 </span> :<span class="lineNoCov"> 0 : } else if (type) {</span></a>
-<a name="300"><span class="lineNum"> 300 </span> :<span class="lineNoCov"> 0 : compat = type-&gt;compat;</span></a>
-<a name="301"><span class="lineNum"> 301 </span> :<span class="lineNoCov"> 0 : name = type-&gt;name;</span></a>
-<a name="302"><span class="lineNum"> 302 </span> : : } else {</a>
-<a name="303"><span class="lineNum"> 303 </span> :<span class="lineNoCov"> 0 : name = &quot;unknown&quot;;</span></a>
-<a name="304"><span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : compat = NULL;</span></a>
-<a name="305"><span class="lineNum"> 305 </span> : : }</a>
-<a name="306"><span class="lineNum"> 306 </span> : : </a>
-<a name="307"><span class="lineNum"> 307 </span> : : /*</a>
-<a name="308"><span class="lineNum"> 308 </span> : : * An i2c device is unknown if either the i2c device list is</a>
-<a name="309"><span class="lineNum"> 309 </span> : : * outdated or the device is marked as unknown (0xFF) in the</a>
-<a name="310"><span class="lineNum"> 310 </span> : : * hdat. Log both cases to see what/where/why.</a>
-<a name="311"><span class="lineNum"> 311 </span> : : */</a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : if (!type || dev-&gt;type == 0xFF) {</span></a>
-<a name="313"><span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : prlog(PR_NOTICE, &quot;HDAT I2C: found e%dp%d - %s@%x dp:%02x (%#x:%s)\n&quot;,</span></a>
-<a name="314"><span class="lineNum"> 314 </span> : : dev-&gt;i2cm_engine, dev-&gt;i2cm_port, name, dev_addr,</a>
-<a name="315"><span class="lineNum"> 315 </span> : : dev-&gt;dev_port, purpose, info-&gt;label);</a>
-<a name="316"><span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="317"><span class="lineNum"> 317 </span> : : }</a>
-<a name="318"><span class="lineNum"> 318 </span> : : </a>
-<a name="319"><span class="lineNum"> 319 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;HDAT I2C: found e%dp%d - %s@%x dp:%02x (%#x:%s)\n&quot;,</span></a>
-<a name="320"><span class="lineNum"> 320 </span> : : dev-&gt;i2cm_engine, dev-&gt;i2cm_port, name, dev_addr,</a>
-<a name="321"><span class="lineNum"> 321 </span> : : dev-&gt;dev_port, purpose, info-&gt;label);</a>
-<a name="322"><span class="lineNum"> 322 </span> : : </a>
-<a name="323"><span class="lineNum"> 323 </span> : : /*</a>
-<a name="324"><span class="lineNum"> 324 </span> : : * Multi-port device require special handling since we need to</a>
-<a name="325"><span class="lineNum"> 325 </span> : : * generate the device-specific DT bindings. For now we're just</a>
-<a name="326"><span class="lineNum"> 326 </span> : : * going to ignore them since these devices are owned by FW</a>
-<a name="327"><span class="lineNum"> 327 </span> : : * any way.</a>
-<a name="328"><span class="lineNum"> 328 </span> : : */</a>
-<a name="329"><span class="lineNum"> 329 </span> :<span class="lineNoCov"> 0 : if (dev-&gt;dev_port != 0xff)</span></a>
-<a name="330"><span class="lineNum"> 330 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="331"><span class="lineNum"> 331 </span> : : </a>
-<a name="332"><span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : node = dt_new_addr(bus, name, dev_addr);</span></a>
-<a name="333"><span class="lineNum"> 333 </span> :<span class="lineNoCov"> 0 : if (!node)</span></a>
-<a name="334"><span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="335"><span class="lineNum"> 335 </span> : : </a>
-<a name="336"><span class="lineNum"> 336 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;reg&quot;, dev_addr);</span></a>
-<a name="337"><span class="lineNum"> 337 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;link-id&quot;,</span></a>
-<a name="338"><span class="lineNum"> 338 </span> : : be32_to_cpu(dev-&gt;i2c_link));</a>
-<a name="339"><span class="lineNum"> 339 </span> :<span class="lineNoCov"> 0 : if (compat)</span></a>
-<a name="340"><span class="lineNum"> 340 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(node, &quot;compatible&quot;, compat);</span></a>
-<a name="341"><span class="lineNum"> 341 </span> :<span class="lineNoCov"> 0 : if (info-&gt;label)</span></a>
-<a name="342"><span class="lineNum"> 342 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(node, &quot;label&quot;, info-&gt;label);</span></a>
-<a name="343"><span class="lineNum"> 343 </span> :<span class="lineNoCov"> 0 : if (!info-&gt;allowed)</span></a>
-<a name="344"><span class="lineNum"> 344 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(node, &quot;status&quot;, &quot;reserved&quot;);</span></a>
-<a name="345"><span class="lineNum"> 345 </span> : : </a>
-<a name="346"><span class="lineNum"> 346 </span> : : /*</a>
-<a name="347"><span class="lineNum"> 347 </span> : : * Set a default timeout of 2s on the ports with a TPM. This is</a>
-<a name="348"><span class="lineNum"> 348 </span> : : * to work around a bug with certain TPM firmwares that can</a>
-<a name="349"><span class="lineNum"> 349 </span> : : * clock stretch for long periods of time and will lock up</a>
-<a name="350"><span class="lineNum"> 350 </span> : : * until they are power cycled if a STOP condition is sent</a>
-<a name="351"><span class="lineNum"> 351 </span> : : * during this period.</a>
-<a name="352"><span class="lineNum"> 352 </span> : : */</a>
-<a name="353"><span class="lineNum"> 353 </span> :<span class="lineNoCov"> 0 : if (dev-&gt;type == 0x3)</span></a>
-<a name="354"><span class="lineNum"> 354 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(bus, &quot;timeout-ms&quot;, 2000);</span></a>
-<a name="355"><span class="lineNum"> 355 </span> : : </a>
-<a name="356"><span class="lineNum"> 356 </span> : : /* XXX: SLCA index? */</a>
-<a name="357"><span class="lineNum"> 357 </span> : : }</a>
-<a name="358"><span class="lineNum"> 358 </span> : : </a>
-<a name="359"><span class="lineNum"> 359 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
-<a name="360"><span class="lineNum"> 360 </span> : : }</a>
+<a name="255"><span class="lineNum"> 255 </span> : : /*</a>
+<a name="256"><span class="lineNum"> 256 </span> : : * Emit an error if we get a newer version. This is an interim measure</a>
+<a name="257"><span class="lineNum"> 257 </span> : : * until the new version format is finalised.</a>
+<a name="258"><span class="lineNum"> 258 </span> : : */</a>
+<a name="259"><span class="lineNum"> 259 </span> :<span class="lineNoCov"> 0 : ahdr = HDIF_get_idata(hdr, idata_index, &amp;size);</span></a>
+<a name="260"><span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : if (!ahdr || !size)</span></a>
+<a name="261"><span class="lineNum"> 261 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
+<a name="262"><span class="lineNum"> 262 </span> : : </a>
+<a name="263"><span class="lineNum"> 263 </span> : : /*</a>
+<a name="264"><span class="lineNum"> 264 </span> : : * Some hostboots don't correctly fill the version field. On these</a>
+<a name="265"><span class="lineNum"> 265 </span> : : * the offset from the start of the header to the start of the array</a>
+<a name="266"><span class="lineNum"> 266 </span> : : * is 16 bytes.</a>
+<a name="267"><span class="lineNum"> 267 </span> : : */</a>
+<a name="268"><span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : if (be32_to_cpu(ahdr-&gt;hdr.offset) == 16) {</span></a>
+<a name="269"><span class="lineNum"> 269 </span> :<span class="lineNoCov"> 0 : version = 1;</span></a>
+<a name="270"><span class="lineNum"> 270 </span> :<span class="lineNoCov"> 0 : prerror(&quot;I2C: HDAT device array has no version! Assuming v1\n&quot;);</span></a>
+<a name="271"><span class="lineNum"> 271 </span> : : } else {</a>
+<a name="272"><span class="lineNum"> 272 </span> :<span class="lineNoCov"> 0 : version = be32_to_cpu(ahdr-&gt;version);</span></a>
+<a name="273"><span class="lineNum"> 273 </span> : : }</a>
+<a name="274"><span class="lineNum"> 274 </span> : : </a>
+<a name="275"><span class="lineNum"> 275 </span> :<span class="lineNoCov"> 0 : if (version == 2) {</span></a>
+<a name="276"><span class="lineNum"> 276 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;I2C: v%d found, but not supported. Parsing as v1\n&quot;,</span></a>
+<a name="277"><span class="lineNum"> 277 </span> : : version);</a>
+<a name="278"><span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : } else if (version &gt; 2) {</span></a>
+<a name="279"><span class="lineNum"> 279 </span> :<span class="lineNoCov"> 0 : prerror(&quot;I2C: v%d found, but not supported! THIS IS A BUG\n&quot;,</span></a>
+<a name="280"><span class="lineNum"> 280 </span> : : version);</a>
+<a name="281"><span class="lineNum"> 281 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
+<a name="282"><span class="lineNum"> 282 </span> : : }</a>
+<a name="283"><span class="lineNum"> 283 </span> : : </a>
+<a name="284"><span class="lineNum"> 284 </span> :<span class="lineNoCov"> 0 : count = HDIF_get_iarray_size(hdr, idata_index);</span></a>
+<a name="285"><span class="lineNum"> 285 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; count; i++) {</span></a>
+<a name="286"><span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : dev = HDIF_get_iarray_item(hdr, idata_index, i, &amp;size);</span></a>
+<a name="287"><span class="lineNum"> 287 </span> : : </a>
+<a name="288"><span class="lineNum"> 288 </span> : : /*</a>
+<a name="289"><span class="lineNum"> 289 </span> : : * XXX: Some broken hostboots populate i2c devs with zeros.</a>
+<a name="290"><span class="lineNum"> 290 </span> : : * Workaround them for now.</a>
+<a name="291"><span class="lineNum"> 291 </span> : : */</a>
+<a name="292"><span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : if (is_zeros(dev, size)) {</span></a>
+<a name="293"><span class="lineNum"> 293 </span> :<span class="lineNoCov"> 0 : prerror(&quot;I2C: Ignoring broken i2c dev %d\n&quot;, i);</span></a>
+<a name="294"><span class="lineNum"> 294 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="295"><span class="lineNum"> 295 </span> : : }</a>
+<a name="296"><span class="lineNum"> 296 </span> : : </a>
+<a name="297"><span class="lineNum"> 297 </span> : : /*</a>
+<a name="298"><span class="lineNum"> 298 </span> : : * On some systems the CFAM I2C master is represented in the</a>
+<a name="299"><span class="lineNum"> 299 </span> : : * host I2C table as engine 6. There are only 4 (0, 1, 2, 3)</a>
+<a name="300"><span class="lineNum"> 300 </span> : : * engines accessible to the host via XSCOM so filter out</a>
+<a name="301"><span class="lineNum"> 301 </span> : : * engines outside this range so we don't create bogus</a>
+<a name="302"><span class="lineNum"> 302 </span> : : * i2cm@&lt;addr&gt; nodes.</a>
+<a name="303"><span class="lineNum"> 303 </span> : : */</a>
+<a name="304"><span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : if (dev-&gt;i2cm_engine &gt;= 4 &amp;&amp;</span></a>
+<a name="305"><span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : (proc_gen == proc_gen_p9 || proc_gen == proc_gen_p10))</span></a>
+<a name="306"><span class="lineNum"> 306 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="307"><span class="lineNum"> 307 </span> : : </a>
+<a name="308"><span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : bus = p8_i2c_add_port_node(xscom, dev-&gt;i2cm_engine, dev-&gt;i2cm_port,</span></a>
+<a name="309"><span class="lineNum"> 309 </span> :<span class="lineNoCov"> 0 : be16_to_cpu(dev-&gt;i2c_bus_freq) * 1000);</span></a>
+<a name="310"><span class="lineNum"> 310 </span> : : </a>
+<a name="311"><span class="lineNum"> 311 </span> :<span class="lineNoCov"> 0 : if (!bus) {</span></a>
+<a name="312"><span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Unable to add node for e%dp%d under %s\n&quot;,</span></a>
+<a name="313"><span class="lineNum"> 313 </span> : : dev-&gt;i2cm_engine, dev-&gt;i2cm_port, xscom-&gt;name);</a>
+<a name="314"><span class="lineNum"> 314 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="315"><span class="lineNum"> 315 </span> : : }</a>
+<a name="316"><span class="lineNum"> 316 </span> : : </a>
+<a name="317"><span class="lineNum"> 317 </span> : : /*</a>
+<a name="318"><span class="lineNum"> 318 </span> : : * Looks like hostboot gives the address as an 8 bit, left</a>
+<a name="319"><span class="lineNum"> 319 </span> : : * justified quantity (i.e it includes the R/W bit). So we need</a>
+<a name="320"><span class="lineNum"> 320 </span> : : * to strip it off to get an address linux can use.</a>
+<a name="321"><span class="lineNum"> 321 </span> : : */</a>
+<a name="322"><span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : dev_addr = dev-&gt;dev_addr &gt;&gt; 1;</span></a>
+<a name="323"><span class="lineNum"> 323 </span> : : </a>
+<a name="324"><span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : purpose = be32_to_cpu(dev-&gt;purpose);</span></a>
+<a name="325"><span class="lineNum"> 325 </span> :<span class="lineNoCov"> 0 : type = map_type(dev-&gt;type);</span></a>
+<a name="326"><span class="lineNum"> 326 </span> :<span class="lineNoCov"> 0 : info = get_info(purpose);</span></a>
+<a name="327"><span class="lineNum"> 327 </span> : : </a>
+<a name="328"><span class="lineNum"> 328 </span> : : /* HACK: Hostboot doesn't export the correct type information</a>
+<a name="329"><span class="lineNum"> 329 </span> : : * for the DIMM SPD EEPROMs. This is a problem because SPD</a>
+<a name="330"><span class="lineNum"> 330 </span> : : * EEPROMs have a different wire protocol to the atmel,24XXXX</a>
+<a name="331"><span class="lineNum"> 331 </span> : : * series. The main difference being that SPD EEPROMs have an</a>
+<a name="332"><span class="lineNum"> 332 </span> : : * 8bit offset rather than a 16bit offset. This means that the</a>
+<a name="333"><span class="lineNum"> 333 </span> : : * driver will send 2 bytes when doing a random read,</a>
+<a name="334"><span class="lineNum"> 334 </span> : : * potentially overwriting part of the SPD information.</a>
+<a name="335"><span class="lineNum"> 335 </span> : : *</a>
+<a name="336"><span class="lineNum"> 336 </span> : : * Just to make things interested the FSP also gets the device</a>
+<a name="337"><span class="lineNum"> 337 </span> : : * type wrong. To work around both just set the device-type to</a>
+<a name="338"><span class="lineNum"> 338 </span> : : * &quot;spd&quot; for anything in the 0x50 to 0x57 range since that's the</a>
+<a name="339"><span class="lineNum"> 339 </span> : : * SPD eeprom range.</a>
+<a name="340"><span class="lineNum"> 340 </span> : : *</a>
+<a name="341"><span class="lineNum"> 341 </span> : : * XXX: Future chips might not use engine 3 for the DIMM buses.</a>
+<a name="342"><span class="lineNum"> 342 </span> : : */</a>
+<a name="343"><span class="lineNum"> 343 </span> :<span class="lineNoCov"> 0 : if (dev-&gt;i2cm_engine == 3 &amp;&amp; dev_addr &gt;= 0x50</span></a>
+<a name="344"><span class="lineNum"> 344 </span> :<span class="lineNoCov"> 0 : &amp;&amp; dev_addr &lt; 0x58) {</span></a>
+<a name="345"><span class="lineNum"> 345 </span> :<span class="lineNoCov"> 0 : compat = &quot;spd&quot;;</span></a>
+<a name="346"><span class="lineNum"> 346 </span> :<span class="lineNoCov"> 0 : name = &quot;eeprom&quot;;</span></a>
+<a name="347"><span class="lineNum"> 347 </span> :<span class="lineNoCov"> 0 : } else if (type) {</span></a>
+<a name="348"><span class="lineNum"> 348 </span> :<span class="lineNoCov"> 0 : compat = type-&gt;compat;</span></a>
+<a name="349"><span class="lineNum"> 349 </span> :<span class="lineNoCov"> 0 : name = type-&gt;name;</span></a>
+<a name="350"><span class="lineNum"> 350 </span> : : } else {</a>
+<a name="351"><span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : name = &quot;unknown&quot;;</span></a>
+<a name="352"><span class="lineNum"> 352 </span> :<span class="lineNoCov"> 0 : compat = NULL;</span></a>
+<a name="353"><span class="lineNum"> 353 </span> : : }</a>
+<a name="354"><span class="lineNum"> 354 </span> : : </a>
+<a name="355"><span class="lineNum"> 355 </span> : : /*</a>
+<a name="356"><span class="lineNum"> 356 </span> : : * An i2c device is unknown if either the i2c device list is</a>
+<a name="357"><span class="lineNum"> 357 </span> : : * outdated or the device is marked as unknown (0xFF) in the</a>
+<a name="358"><span class="lineNum"> 358 </span> : : * hdat. Log both cases to see what/where/why.</a>
+<a name="359"><span class="lineNum"> 359 </span> : : */</a>
+<a name="360"><span class="lineNum"> 360 </span> :<span class="lineNoCov"> 0 : if (!type || dev-&gt;type == 0xFF) {</span></a>
+<a name="361"><span class="lineNum"> 361 </span> :<span class="lineNoCov"> 0 : prlog(PR_NOTICE, &quot;HDAT I2C: found e%dp%d - %s@%x dp:%02x (%#x:%s)\n&quot;,</span></a>
+<a name="362"><span class="lineNum"> 362 </span> : : dev-&gt;i2cm_engine, dev-&gt;i2cm_port, name, dev_addr,</a>
+<a name="363"><span class="lineNum"> 363 </span> : : dev-&gt;dev_port, purpose, info-&gt;label);</a>
+<a name="364"><span class="lineNum"> 364 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="365"><span class="lineNum"> 365 </span> : : }</a>
+<a name="366"><span class="lineNum"> 366 </span> : : </a>
+<a name="367"><span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;HDAT I2C: found e%dp%d - %s@%x dp:%02x (%#x:%s)\n&quot;,</span></a>
+<a name="368"><span class="lineNum"> 368 </span> : : dev-&gt;i2cm_engine, dev-&gt;i2cm_port, name, dev_addr,</a>
+<a name="369"><span class="lineNum"> 369 </span> : : dev-&gt;dev_port, purpose, info-&gt;label);</a>
+<a name="370"><span class="lineNum"> 370 </span> : : </a>
+<a name="371"><span class="lineNum"> 371 </span> : : /*</a>
+<a name="372"><span class="lineNum"> 372 </span> : : * Multi-port device require special handling since we need to</a>
+<a name="373"><span class="lineNum"> 373 </span> : : * generate the device-specific DT bindings. For now we're just</a>
+<a name="374"><span class="lineNum"> 374 </span> : : * going to ignore them since these devices are owned by FW</a>
+<a name="375"><span class="lineNum"> 375 </span> : : * any way.</a>
+<a name="376"><span class="lineNum"> 376 </span> : : */</a>
+<a name="377"><span class="lineNum"> 377 </span> :<span class="lineNoCov"> 0 : if (dev-&gt;dev_port != 0xff)</span></a>
+<a name="378"><span class="lineNum"> 378 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="379"><span class="lineNum"> 379 </span> : : </a>
+<a name="380"><span class="lineNum"> 380 </span> :<span class="lineNoCov"> 0 : node = dt_new_addr(bus, name, dev_addr);</span></a>
+<a name="381"><span class="lineNum"> 381 </span> :<span class="lineNoCov"> 0 : if (!node)</span></a>
+<a name="382"><span class="lineNum"> 382 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="383"><span class="lineNum"> 383 </span> : : </a>
+<a name="384"><span class="lineNum"> 384 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;reg&quot;, dev_addr);</span></a>
+<a name="385"><span class="lineNum"> 385 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;link-id&quot;,</span></a>
+<a name="386"><span class="lineNum"> 386 </span> : : be32_to_cpu(dev-&gt;i2c_link));</a>
+<a name="387"><span class="lineNum"> 387 </span> :<span class="lineNoCov"> 0 : if (compat)</span></a>
+<a name="388"><span class="lineNum"> 388 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(node, &quot;compatible&quot;, compat);</span></a>
+<a name="389"><span class="lineNum"> 389 </span> :<span class="lineNoCov"> 0 : if (info-&gt;label)</span></a>
+<a name="390"><span class="lineNum"> 390 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(node, &quot;label&quot;, info-&gt;label);</span></a>
+<a name="391"><span class="lineNum"> 391 </span> :<span class="lineNoCov"> 0 : if (!info-&gt;allowed)</span></a>
+<a name="392"><span class="lineNum"> 392 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(node, &quot;status&quot;, &quot;reserved&quot;);</span></a>
+<a name="393"><span class="lineNum"> 393 </span> : : </a>
+<a name="394"><span class="lineNum"> 394 </span> : : /*</a>
+<a name="395"><span class="lineNum"> 395 </span> : : * Set a default timeout of 2s on the ports with a TPM. This is</a>
+<a name="396"><span class="lineNum"> 396 </span> : : * to work around a bug with certain TPM firmwares that can</a>
+<a name="397"><span class="lineNum"> 397 </span> : : * clock stretch for long periods of time and will lock up</a>
+<a name="398"><span class="lineNum"> 398 </span> : : * until they are power cycled if a STOP condition is sent</a>
+<a name="399"><span class="lineNum"> 399 </span> : : * during this period.</a>
+<a name="400"><span class="lineNum"> 400 </span> : : */</a>
+<a name="401"><span class="lineNum"> 401 </span> :<span class="lineNoCov"> 0 : if (dev-&gt;type == 0x3)</span></a>
+<a name="402"><span class="lineNum"> 402 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(bus, &quot;timeout-ms&quot;, 2000);</span></a>
+<a name="403"><span class="lineNum"> 403 </span> : : </a>
+<a name="404"><span class="lineNum"> 404 </span> : : /* XXX: SLCA index? */</a>
+<a name="405"><span class="lineNum"> 405 </span> : : }</a>
+<a name="406"><span class="lineNum"> 406 </span> : : </a>
+<a name="407"><span class="lineNum"> 407 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
+<a name="408"><span class="lineNum"> 408 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/hdata/index-sort-b.html b/coverage-report/hdata/index-sort-b.html
index 85f1928..5bbc29b 100644
--- a/coverage-report/hdata/index-sort-b.html
+++ b/coverage-report/hdata/index-sort-b.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">1237</td>
- <td class="headerCovTableEntry">2675</td>
- <td class="headerCovTableEntryLo">46.2 %</td>
+ <td class="headerCovTableEntry">1247</td>
+ <td class="headerCovTableEntry">2803</td>
+ <td class="headerCovTableEntryLo">44.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">100</td>
- <td class="headerCovTableEntry">147</td>
- <td class="headerCovTableEntryLo">68.0 %</td>
+ <td class="headerCovTableEntry">101</td>
+ <td class="headerCovTableEntry">150</td>
+ <td class="headerCovTableEntryLo">67.3 %</td>
</tr>
<tr>
<td></td>
@@ -82,182 +82,182 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="iohub.c.gcov.html">iohub.c</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=27 height=10 alt="27.4%"><img src="../snow.png" width=73 height=10 alt="27.4%"></td></tr></table>
- </td>
- <td class="coverPerLo">27.4&nbsp;%</td>
- <td class="coverNumLo">100 / 365</td>
- <td class="coverPerLo">40.0&nbsp;%</td>
- <td class="coverNumLo">8 / 20</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
- <td class="coverFile"><a href="hostservices.c.gcov.html">hostservices.c</a></td>
+ <td class="coverFile"><a href="spira.h.gcov.html">spira.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=81 height=10 alt="81.2%"><img src="../snow.png" width=19 height=10 alt="81.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.4%"><img src="../snow.png" width=64 height=10 alt="36.4%"></td></tr></table>
</td>
- <td class="coverPerMed">81.2&nbsp;%</td>
- <td class="coverNumMed">26 / 32</td>
+ <td class="coverPerLo">36.4&nbsp;%</td>
+ <td class="coverNumLo">4 / 11</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="vpd.c.gcov.html">vpd.c</a></td>
+ <td class="coverFile"><a href="memory.c.gcov.html">memory.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=76 height=10 alt="75.8%"><img src="../snow.png" width=24 height=10 alt="75.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.2%"><img src="../snow.png" width=64 height=10 alt="36.2%"></td></tr></table>
</td>
- <td class="coverPerMed">75.8&nbsp;%</td>
- <td class="coverNumMed">207 / 273</td>
- <td class="coverPerMed">89.5&nbsp;%</td>
- <td class="coverNumMed">17 / 19</td>
+ <td class="coverPerLo">36.2&nbsp;%</td>
+ <td class="coverNumLo">152 / 420</td>
+ <td class="coverPerLo">68.4&nbsp;%</td>
+ <td class="coverNumLo">13 / 19</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="slca.c.gcov.html">slca.c</a></td>
+ <td class="coverFile"><a href="vpd-common.c.gcov.html">vpd-common.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=64 height=10 alt="64.3%"><img src="../snow.png" width=36 height=10 alt="64.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="80.0%"><img src="../snow.png" width=20 height=10 alt="80.0%"></td></tr></table>
</td>
- <td class="coverPerLo">64.3&nbsp;%</td>
- <td class="coverNumLo">45 / 70</td>
- <td class="coverPerMed">83.3&nbsp;%</td>
- <td class="coverNumMed">5 / 6</td>
+ <td class="coverPerMed">80.0&nbsp;%</td>
+ <td class="coverNumMed">4 / 5</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="spira.c.gcov.html">spira.c</a></td>
+ <td class="coverFile"><a href="hdif.c.gcov.html">hdif.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=52 height=10 alt="52.1%"><img src="../snow.png" width=48 height=10 alt="52.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=51 height=10 alt="50.5%"><img src="../snow.png" width=49 height=10 alt="50.5%"></td></tr></table>
</td>
- <td class="coverPerLo">52.1&nbsp;%</td>
- <td class="coverNumLo">379 / 728</td>
- <td class="coverPerMed">80.0&nbsp;%</td>
- <td class="coverNumMed">28 / 35</td>
+ <td class="coverPerLo">50.5&nbsp;%</td>
+ <td class="coverNumLo">47 / 93</td>
+ <td class="coverPerMed">85.7&nbsp;%</td>
+ <td class="coverNumMed">6 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="spira.h.gcov.html">spira.h</a></td>
+ <td class="coverFile"><a href="slca.c.gcov.html">slca.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.4%"><img src="../snow.png" width=64 height=10 alt="36.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=64 height=10 alt="64.3%"><img src="../snow.png" width=36 height=10 alt="64.3%"></td></tr></table>
</td>
- <td class="coverPerLo">36.4&nbsp;%</td>
- <td class="coverNumLo">4 / 11</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerLo">64.3&nbsp;%</td>
+ <td class="coverNumLo">45 / 70</td>
+ <td class="coverPerMed">83.3&nbsp;%</td>
+ <td class="coverNumMed">5 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="fsp.c.gcov.html">fsp.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=38 height=10 alt="37.5%"><img src="../snow.png" width=62 height=10 alt="37.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=37 height=10 alt="36.7%"><img src="../snow.png" width=63 height=10 alt="36.7%"></td></tr></table>
</td>
- <td class="coverPerLo">37.5&nbsp;%</td>
- <td class="coverNumLo">90 / 240</td>
+ <td class="coverPerLo">36.7&nbsp;%</td>
+ <td class="coverNumLo">90 / 245</td>
<td class="coverPerLo">54.5&nbsp;%</td>
<td class="coverNumLo">6 / 11</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="tpmrel.c.gcov.html">tpmrel.c</a></td>
+ <td class="coverFile"><a href="i2c.c.gcov.html">i2c.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 92</td>
+ <td class="coverNumLo">0 / 124</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 5</td>
+ <td class="coverNumLo">0 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="hdif.c.gcov.html">hdif.c</a></td>
+ <td class="coverFile"><a href="pcia.c.gcov.html">pcia.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=51 height=10 alt="50.5%"><img src="../snow.png" width=49 height=10 alt="50.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=81 height=10 alt="81.0%"><img src="../snow.png" width=19 height=10 alt="81.0%"></td></tr></table>
</td>
- <td class="coverPerLo">50.5&nbsp;%</td>
- <td class="coverNumLo">47 / 93</td>
- <td class="coverPerMed">85.7&nbsp;%</td>
- <td class="coverNumMed">6 / 7</td>
+ <td class="coverPerMed">81.0&nbsp;%</td>
+ <td class="coverNumMed">85 / 105</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">5 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="vpd-common.c.gcov.html">vpd-common.c</a></td>
+ <td class="coverFile"><a href="cpu-common.c.gcov.html">cpu-common.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="80.0%"><img src="../snow.png" width=20 height=10 alt="80.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=66 height=10 alt="66.2%"><img src="../snow.png" width=34 height=10 alt="66.2%"></td></tr></table>
</td>
- <td class="coverPerMed">80.0&nbsp;%</td>
- <td class="coverNumMed">4 / 5</td>
+ <td class="coverPerLo">66.2&nbsp;%</td>
+ <td class="coverNumLo">98 / 148</td>
+ <td class="coverPerMed">75.0&nbsp;%</td>
+ <td class="coverNumMed">6 / 8</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="hdif.h.gcov.html">hdif.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="cpu-common.c.gcov.html">cpu-common.c</a></td>
+ <td class="coverFile"><a href="tpmrel.c.gcov.html">tpmrel.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=69 height=10 alt="69.1%"><img src="../snow.png" width=31 height=10 alt="69.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
- <td class="coverPerLo">69.1&nbsp;%</td>
- <td class="coverNumLo">96 / 139</td>
- <td class="coverPerMed">75.0&nbsp;%</td>
- <td class="coverNumMed">6 / 8</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 92</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="pcia.c.gcov.html">pcia.c</a></td>
+ <td class="coverFile"><a href="vpd.c.gcov.html">vpd.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=81 height=10 alt="80.8%"><img src="../snow.png" width=19 height=10 alt="80.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=76 height=10 alt="75.8%"><img src="../snow.png" width=24 height=10 alt="75.8%"></td></tr></table>
</td>
- <td class="coverPerMed">80.8&nbsp;%</td>
- <td class="coverNumMed">84 / 104</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">5 / 5</td>
+ <td class="coverPerMed">75.8&nbsp;%</td>
+ <td class="coverNumMed">207 / 273</td>
+ <td class="coverPerMed">89.5&nbsp;%</td>
+ <td class="coverNumMed">17 / 19</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="memory.c.gcov.html">memory.c</a></td>
+ <td class="coverFile"><a href="hostservices.c.gcov.html">hostservices.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.0%"><img src="../snow.png" width=64 height=10 alt="36.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=81 height=10 alt="81.2%"><img src="../snow.png" width=19 height=10 alt="81.2%"></td></tr></table>
</td>
- <td class="coverPerLo">36.0&nbsp;%</td>
- <td class="coverNumLo">151 / 419</td>
- <td class="coverPerLo">68.4&nbsp;%</td>
- <td class="coverNumLo">13 / 19</td>
+ <td class="coverPerMed">81.2&nbsp;%</td>
+ <td class="coverNumMed">26 / 32</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="hdif.h.gcov.html">hdif.h</a></td>
+ <td class="coverFile"><a href="iohub.c.gcov.html">iohub.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=26 height=10 alt="25.8%"><img src="../snow.png" width=74 height=10 alt="25.8%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">4 / 4</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerLo">25.8&nbsp;%</td>
+ <td class="coverNumLo">100 / 388</td>
+ <td class="coverPerLo">40.0&nbsp;%</td>
+ <td class="coverNumLo">8 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="i2c.c.gcov.html">i2c.c</a></td>
+ <td class="coverFile"><a href="spira.c.gcov.html">spira.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=49 height=10 alt="48.5%"><img src="../snow.png" width=51 height=10 alt="48.5%"></td></tr></table>
</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 100</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 6</td>
+ <td class="coverPerLo">48.5&nbsp;%</td>
+ <td class="coverNumLo">385 / 793</td>
+ <td class="coverPerMed">78.4&nbsp;%</td>
+ <td class="coverNumMed">29 / 37</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/hdata/index-sort-f.html b/coverage-report/hdata/index-sort-f.html
index 65f7de6..5dbb135 100644
--- a/coverage-report/hdata/index-sort-f.html
+++ b/coverage-report/hdata/index-sort-f.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">1237</td>
- <td class="headerCovTableEntry">2675</td>
- <td class="headerCovTableEntryLo">46.2 %</td>
+ <td class="headerCovTableEntry">1247</td>
+ <td class="headerCovTableEntry">2803</td>
+ <td class="headerCovTableEntryLo">44.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">100</td>
- <td class="headerCovTableEntry">147</td>
- <td class="headerCovTableEntryLo">68.0 %</td>
+ <td class="headerCovTableEntry">101</td>
+ <td class="headerCovTableEntry">150</td>
+ <td class="headerCovTableEntryLo">67.3 %</td>
</tr>
<tr>
<td></td>
@@ -99,19 +99,19 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 100</td>
+ <td class="coverNumLo">0 / 124</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 6</td>
+ <td class="coverNumLo">0 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="iohub.c.gcov.html">iohub.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=27 height=10 alt="27.4%"><img src="../snow.png" width=73 height=10 alt="27.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=26 height=10 alt="25.8%"><img src="../snow.png" width=74 height=10 alt="25.8%"></td></tr></table>
</td>
- <td class="coverPerLo">27.4&nbsp;%</td>
- <td class="coverNumLo">100 / 365</td>
+ <td class="coverPerLo">25.8&nbsp;%</td>
+ <td class="coverNumLo">100 / 388</td>
<td class="coverPerLo">40.0&nbsp;%</td>
<td class="coverNumLo">8 / 20</td>
<td class="coverPerHi">-</td>
@@ -120,10 +120,10 @@
<tr>
<td class="coverFile"><a href="fsp.c.gcov.html">fsp.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=38 height=10 alt="37.5%"><img src="../snow.png" width=62 height=10 alt="37.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=37 height=10 alt="36.7%"><img src="../snow.png" width=63 height=10 alt="36.7%"></td></tr></table>
</td>
- <td class="coverPerLo">37.5&nbsp;%</td>
- <td class="coverNumLo">90 / 240</td>
+ <td class="coverPerLo">36.7&nbsp;%</td>
+ <td class="coverNumLo">90 / 245</td>
<td class="coverPerLo">54.5&nbsp;%</td>
<td class="coverNumLo">6 / 11</td>
<td class="coverPerHi">-</td>
@@ -132,10 +132,10 @@
<tr>
<td class="coverFile"><a href="memory.c.gcov.html">memory.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.0%"><img src="../snow.png" width=64 height=10 alt="36.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.2%"><img src="../snow.png" width=64 height=10 alt="36.2%"></td></tr></table>
</td>
- <td class="coverPerLo">36.0&nbsp;%</td>
- <td class="coverNumLo">151 / 419</td>
+ <td class="coverPerLo">36.2&nbsp;%</td>
+ <td class="coverNumLo">152 / 420</td>
<td class="coverPerLo">68.4&nbsp;%</td>
<td class="coverNumLo">13 / 19</td>
<td class="coverPerHi">-</td>
@@ -144,10 +144,10 @@
<tr>
<td class="coverFile"><a href="cpu-common.c.gcov.html">cpu-common.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=69 height=10 alt="69.1%"><img src="../snow.png" width=31 height=10 alt="69.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=66 height=10 alt="66.2%"><img src="../snow.png" width=34 height=10 alt="66.2%"></td></tr></table>
</td>
- <td class="coverPerLo">69.1&nbsp;%</td>
- <td class="coverNumLo">96 / 139</td>
+ <td class="coverPerLo">66.2&nbsp;%</td>
+ <td class="coverNumLo">98 / 148</td>
<td class="coverPerMed">75.0&nbsp;%</td>
<td class="coverNumMed">6 / 8</td>
<td class="coverPerHi">-</td>
@@ -156,12 +156,12 @@
<tr>
<td class="coverFile"><a href="spira.c.gcov.html">spira.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=52 height=10 alt="52.1%"><img src="../snow.png" width=48 height=10 alt="52.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=49 height=10 alt="48.5%"><img src="../snow.png" width=51 height=10 alt="48.5%"></td></tr></table>
</td>
- <td class="coverPerLo">52.1&nbsp;%</td>
- <td class="coverNumLo">379 / 728</td>
- <td class="coverPerMed">80.0&nbsp;%</td>
- <td class="coverNumMed">28 / 35</td>
+ <td class="coverPerLo">48.5&nbsp;%</td>
+ <td class="coverNumLo">385 / 793</td>
+ <td class="coverPerMed">78.4&nbsp;%</td>
+ <td class="coverNumMed">29 / 37</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -252,10 +252,10 @@
<tr>
<td class="coverFile"><a href="pcia.c.gcov.html">pcia.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=81 height=10 alt="80.8%"><img src="../snow.png" width=19 height=10 alt="80.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=81 height=10 alt="81.0%"><img src="../snow.png" width=19 height=10 alt="81.0%"></td></tr></table>
</td>
- <td class="coverPerMed">80.8&nbsp;%</td>
- <td class="coverNumMed">84 / 104</td>
+ <td class="coverPerMed">81.0&nbsp;%</td>
+ <td class="coverNumMed">85 / 105</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">5 / 5</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/hdata/index-sort-l.html b/coverage-report/hdata/index-sort-l.html
index d2df0da..1856cd0 100644
--- a/coverage-report/hdata/index-sort-l.html
+++ b/coverage-report/hdata/index-sort-l.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">1237</td>
- <td class="headerCovTableEntry">2675</td>
- <td class="headerCovTableEntryLo">46.2 %</td>
+ <td class="headerCovTableEntry">1247</td>
+ <td class="headerCovTableEntry">2803</td>
+ <td class="headerCovTableEntryLo">44.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">100</td>
- <td class="headerCovTableEntry">147</td>
- <td class="headerCovTableEntryLo">68.0 %</td>
+ <td class="headerCovTableEntry">101</td>
+ <td class="headerCovTableEntry">150</td>
+ <td class="headerCovTableEntryLo">67.3 %</td>
</tr>
<tr>
<td></td>
@@ -99,19 +99,19 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 100</td>
+ <td class="coverNumLo">0 / 124</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 6</td>
+ <td class="coverNumLo">0 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="iohub.c.gcov.html">iohub.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=27 height=10 alt="27.4%"><img src="../snow.png" width=73 height=10 alt="27.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=26 height=10 alt="25.8%"><img src="../snow.png" width=74 height=10 alt="25.8%"></td></tr></table>
</td>
- <td class="coverPerLo">27.4&nbsp;%</td>
- <td class="coverNumLo">100 / 365</td>
+ <td class="coverPerLo">25.8&nbsp;%</td>
+ <td class="coverNumLo">100 / 388</td>
<td class="coverPerLo">40.0&nbsp;%</td>
<td class="coverNumLo">8 / 20</td>
<td class="coverPerHi">-</td>
@@ -120,10 +120,10 @@
<tr>
<td class="coverFile"><a href="memory.c.gcov.html">memory.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.0%"><img src="../snow.png" width=64 height=10 alt="36.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.2%"><img src="../snow.png" width=64 height=10 alt="36.2%"></td></tr></table>
</td>
- <td class="coverPerLo">36.0&nbsp;%</td>
- <td class="coverNumLo">151 / 419</td>
+ <td class="coverPerLo">36.2&nbsp;%</td>
+ <td class="coverNumLo">152 / 420</td>
<td class="coverPerLo">68.4&nbsp;%</td>
<td class="coverNumLo">13 / 19</td>
<td class="coverPerHi">-</td>
@@ -144,36 +144,36 @@
<tr>
<td class="coverFile"><a href="fsp.c.gcov.html">fsp.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=38 height=10 alt="37.5%"><img src="../snow.png" width=62 height=10 alt="37.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=37 height=10 alt="36.7%"><img src="../snow.png" width=63 height=10 alt="36.7%"></td></tr></table>
</td>
- <td class="coverPerLo">37.5&nbsp;%</td>
- <td class="coverNumLo">90 / 240</td>
+ <td class="coverPerLo">36.7&nbsp;%</td>
+ <td class="coverNumLo">90 / 245</td>
<td class="coverPerLo">54.5&nbsp;%</td>
<td class="coverNumLo">6 / 11</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="hdif.c.gcov.html">hdif.c</a></td>
+ <td class="coverFile"><a href="spira.c.gcov.html">spira.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=51 height=10 alt="50.5%"><img src="../snow.png" width=49 height=10 alt="50.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=49 height=10 alt="48.5%"><img src="../snow.png" width=51 height=10 alt="48.5%"></td></tr></table>
</td>
- <td class="coverPerLo">50.5&nbsp;%</td>
- <td class="coverNumLo">47 / 93</td>
- <td class="coverPerMed">85.7&nbsp;%</td>
- <td class="coverNumMed">6 / 7</td>
+ <td class="coverPerLo">48.5&nbsp;%</td>
+ <td class="coverNumLo">385 / 793</td>
+ <td class="coverPerMed">78.4&nbsp;%</td>
+ <td class="coverNumMed">29 / 37</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="spira.c.gcov.html">spira.c</a></td>
+ <td class="coverFile"><a href="hdif.c.gcov.html">hdif.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=52 height=10 alt="52.1%"><img src="../snow.png" width=48 height=10 alt="52.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=51 height=10 alt="50.5%"><img src="../snow.png" width=49 height=10 alt="50.5%"></td></tr></table>
</td>
- <td class="coverPerLo">52.1&nbsp;%</td>
- <td class="coverNumLo">379 / 728</td>
- <td class="coverPerMed">80.0&nbsp;%</td>
- <td class="coverNumMed">28 / 35</td>
+ <td class="coverPerLo">50.5&nbsp;%</td>
+ <td class="coverNumLo">47 / 93</td>
+ <td class="coverPerMed">85.7&nbsp;%</td>
+ <td class="coverNumMed">6 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -192,10 +192,10 @@
<tr>
<td class="coverFile"><a href="cpu-common.c.gcov.html">cpu-common.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=69 height=10 alt="69.1%"><img src="../snow.png" width=31 height=10 alt="69.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=66 height=10 alt="66.2%"><img src="../snow.png" width=34 height=10 alt="66.2%"></td></tr></table>
</td>
- <td class="coverPerLo">69.1&nbsp;%</td>
- <td class="coverNumLo">96 / 139</td>
+ <td class="coverPerLo">66.2&nbsp;%</td>
+ <td class="coverNumLo">98 / 148</td>
<td class="coverPerMed">75.0&nbsp;%</td>
<td class="coverNumMed">6 / 8</td>
<td class="coverPerHi">-</td>
@@ -228,10 +228,10 @@
<tr>
<td class="coverFile"><a href="pcia.c.gcov.html">pcia.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=81 height=10 alt="80.8%"><img src="../snow.png" width=19 height=10 alt="80.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=81 height=10 alt="81.0%"><img src="../snow.png" width=19 height=10 alt="81.0%"></td></tr></table>
</td>
- <td class="coverPerMed">80.8&nbsp;%</td>
- <td class="coverNumMed">84 / 104</td>
+ <td class="coverPerMed">81.0&nbsp;%</td>
+ <td class="coverNumMed">85 / 105</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">5 / 5</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/hdata/index.html b/coverage-report/hdata/index.html
index 4d0db56..521cb91 100644
--- a/coverage-report/hdata/index.html
+++ b/coverage-report/hdata/index.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">1237</td>
- <td class="headerCovTableEntry">2675</td>
- <td class="headerCovTableEntryLo">46.2 %</td>
+ <td class="headerCovTableEntry">1247</td>
+ <td class="headerCovTableEntry">2803</td>
+ <td class="headerCovTableEntryLo">44.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">100</td>
- <td class="headerCovTableEntry">147</td>
- <td class="headerCovTableEntryLo">68.0 %</td>
+ <td class="headerCovTableEntry">101</td>
+ <td class="headerCovTableEntry">150</td>
+ <td class="headerCovTableEntryLo">67.3 %</td>
</tr>
<tr>
<td></td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="cpu-common.c.gcov.html">cpu-common.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=69 height=10 alt="69.1%"><img src="../snow.png" width=31 height=10 alt="69.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=66 height=10 alt="66.2%"><img src="../snow.png" width=34 height=10 alt="66.2%"></td></tr></table>
</td>
- <td class="coverPerLo">69.1&nbsp;%</td>
- <td class="coverNumLo">96 / 139</td>
+ <td class="coverPerLo">66.2&nbsp;%</td>
+ <td class="coverNumLo">98 / 148</td>
<td class="coverPerMed">75.0&nbsp;%</td>
<td class="coverNumMed">6 / 8</td>
<td class="coverPerHi">-</td>
@@ -96,10 +96,10 @@
<tr>
<td class="coverFile"><a href="fsp.c.gcov.html">fsp.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=38 height=10 alt="37.5%"><img src="../snow.png" width=62 height=10 alt="37.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=37 height=10 alt="36.7%"><img src="../snow.png" width=63 height=10 alt="36.7%"></td></tr></table>
</td>
- <td class="coverPerLo">37.5&nbsp;%</td>
- <td class="coverNumLo">90 / 240</td>
+ <td class="coverPerLo">36.7&nbsp;%</td>
+ <td class="coverNumLo">90 / 245</td>
<td class="coverPerLo">54.5&nbsp;%</td>
<td class="coverNumLo">6 / 11</td>
<td class="coverPerHi">-</td>
@@ -147,19 +147,19 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 100</td>
+ <td class="coverNumLo">0 / 124</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 6</td>
+ <td class="coverNumLo">0 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="iohub.c.gcov.html">iohub.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=27 height=10 alt="27.4%"><img src="../snow.png" width=73 height=10 alt="27.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=26 height=10 alt="25.8%"><img src="../snow.png" width=74 height=10 alt="25.8%"></td></tr></table>
</td>
- <td class="coverPerLo">27.4&nbsp;%</td>
- <td class="coverNumLo">100 / 365</td>
+ <td class="coverPerLo">25.8&nbsp;%</td>
+ <td class="coverNumLo">100 / 388</td>
<td class="coverPerLo">40.0&nbsp;%</td>
<td class="coverNumLo">8 / 20</td>
<td class="coverPerHi">-</td>
@@ -168,10 +168,10 @@
<tr>
<td class="coverFile"><a href="memory.c.gcov.html">memory.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.0%"><img src="../snow.png" width=64 height=10 alt="36.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.2%"><img src="../snow.png" width=64 height=10 alt="36.2%"></td></tr></table>
</td>
- <td class="coverPerLo">36.0&nbsp;%</td>
- <td class="coverNumLo">151 / 419</td>
+ <td class="coverPerLo">36.2&nbsp;%</td>
+ <td class="coverNumLo">152 / 420</td>
<td class="coverPerLo">68.4&nbsp;%</td>
<td class="coverNumLo">13 / 19</td>
<td class="coverPerHi">-</td>
@@ -180,10 +180,10 @@
<tr>
<td class="coverFile"><a href="pcia.c.gcov.html">pcia.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=81 height=10 alt="80.8%"><img src="../snow.png" width=19 height=10 alt="80.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=81 height=10 alt="81.0%"><img src="../snow.png" width=19 height=10 alt="81.0%"></td></tr></table>
</td>
- <td class="coverPerMed">80.8&nbsp;%</td>
- <td class="coverNumMed">84 / 104</td>
+ <td class="coverPerMed">81.0&nbsp;%</td>
+ <td class="coverNumMed">85 / 105</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">5 / 5</td>
<td class="coverPerHi">-</td>
@@ -204,12 +204,12 @@
<tr>
<td class="coverFile"><a href="spira.c.gcov.html">spira.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=52 height=10 alt="52.1%"><img src="../snow.png" width=48 height=10 alt="52.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=49 height=10 alt="48.5%"><img src="../snow.png" width=51 height=10 alt="48.5%"></td></tr></table>
</td>
- <td class="coverPerLo">52.1&nbsp;%</td>
- <td class="coverNumLo">379 / 728</td>
- <td class="coverPerMed">80.0&nbsp;%</td>
- <td class="coverNumMed">28 / 35</td>
+ <td class="coverPerLo">48.5&nbsp;%</td>
+ <td class="coverNumLo">385 / 793</td>
+ <td class="coverPerMed">78.4&nbsp;%</td>
+ <td class="coverNumMed">29 / 37</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/hdata/iohub.c.func-sort-c.html b/coverage-report/hdata/iohub.c.func-sort-c.html
index cb34884..bd423ac 100644
--- a/coverage-report/hdata/iohub.c.func-sort-c.html
+++ b/coverage-report/hdata/iohub.c.func-sort-c.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">100</td>
- <td class="headerCovTableEntry">365</td>
- <td class="headerCovTableEntryLo">27.4 %</td>
+ <td class="headerCovTableEntry">388</td>
+ <td class="headerCovTableEntryLo">25.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
@@ -69,7 +69,7 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#348">add_i2c_link</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#381">add_i2c_link</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
@@ -77,51 +77,51 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#361">find_slot_details</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#394">find_slot_details</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#441">find_slot_entry_node</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#474">find_slot_entry_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#680">get_slot_node</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#713">get_slot_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#268">io_add_p9</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#296">io_add_p9</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#191">io_add_phb4</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#207">io_add_phb4</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#501">is_port</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#534">is_port</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#517">parse_one_slot</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#550">parse_one_slot</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#376">parse_slot_details</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#409">parse_slot_details</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#469">st_name</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#502">st_name</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#483">xlate_type</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#516">xlate_type</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#822">io_parse</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#863">io_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#297">io_add_p8_cec_vpd</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#330">io_add_p8_cec_vpd</a></td>
<td class="coverFnHi">3</td>
</tr>
<tr>
@@ -129,15 +129,15 @@
<td class="coverFnHi">3</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#732">io_parse_fru</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#765">io_parse_fru</a></td>
<td class="coverFnHi">3</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#237">io_add_p8</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#264">io_add_p8</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#693">io_parse_slots</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#726">io_parse_slots</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
diff --git a/coverage-report/hdata/iohub.c.func.html b/coverage-report/hdata/iohub.c.func.html
index 7d24cc9..7119ce9 100644
--- a/coverage-report/hdata/iohub.c.func.html
+++ b/coverage-report/hdata/iohub.c.func.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">100</td>
- <td class="headerCovTableEntry">365</td>
- <td class="headerCovTableEntryLo">27.4 %</td>
+ <td class="headerCovTableEntry">388</td>
+ <td class="headerCovTableEntryLo">25.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
@@ -69,7 +69,7 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="iohub.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#348">add_i2c_link</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#381">add_i2c_link</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
@@ -77,27 +77,27 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#361">find_slot_details</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#394">find_slot_details</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#441">find_slot_entry_node</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#474">find_slot_entry_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#680">get_slot_node</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#713">get_slot_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#237">io_add_p8</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#264">io_add_p8</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#297">io_add_p8_cec_vpd</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#330">io_add_p8_cec_vpd</a></td>
<td class="coverFnHi">3</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#268">io_add_p9</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#296">io_add_p9</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
@@ -105,7 +105,7 @@
<td class="coverFnHi">11</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#191">io_add_phb4</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#207">io_add_phb4</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
@@ -117,35 +117,35 @@
<td class="coverFnHi">3</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#822">io_parse</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#863">io_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#732">io_parse_fru</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#765">io_parse_fru</a></td>
<td class="coverFnHi">3</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#693">io_parse_slots</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#726">io_parse_slots</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#501">is_port</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#534">is_port</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#517">parse_one_slot</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#550">parse_one_slot</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#376">parse_slot_details</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#409">parse_slot_details</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#469">st_name</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#502">st_name</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="iohub.c.gcov.html#483">xlate_type</a></td>
+ <td class="coverFn"><a href="iohub.c.gcov.html#516">xlate_type</a></td>
<td class="coverFnLo">0</td>
</tr>
</table>
diff --git a/coverage-report/hdata/iohub.c.gcov.html b/coverage-report/hdata/iohub.c.gcov.html
index 165d8cd..b7651f5 100644
--- a/coverage-report/hdata/iohub.c.gcov.html
+++ b/coverage-report/hdata/iohub.c.gcov.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">100</td>
- <td class="headerCovTableEntry">365</td>
- <td class="headerCovTableEntryLo">27.4 %</td>
+ <td class="headerCovTableEntry">388</td>
+ <td class="headerCovTableEntryLo">25.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
@@ -222,739 +222,780 @@
<a name="151"><span class="lineNum"> 151 </span> : : int phb_index, u8 active_phbs)</a>
<a name="152"><span class="lineNum"> 152 </span> : : {</a>
<a name="153"><span class="lineNum"> 153 </span> : : struct dt_node *stack;</a>
-<a name="154"><span class="lineNum"> 154 </span> : : u64 eq[8];</a>
-<a name="155"><span class="lineNum"> 155 </span> : : u8 *gen4;</a>
-<a name="156"><span class="lineNum"> 156 </span> : : int i;</a>
-<a name="157"><span class="lineNum"> 157 </span> : : </a>
-<a name="158"><span class="lineNum"> 158 </span> :<span class="lineNoCov"> 0 : stack = dt_new_addr(pbcq, &quot;stack&quot;, stack_index);</span></a>
-<a name="159"><span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : assert(stack);</span></a>
-<a name="160"><span class="lineNum"> 160 </span> : : </a>
-<a name="161"><span class="lineNum"> 161 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(stack, &quot;reg&quot;, stack_index);</span></a>
-<a name="162"><span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(stack, &quot;ibm,phb-index&quot;, phb_index);</span></a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(stack, &quot;compatible&quot;, &quot;ibm,power9-phb-stack&quot;);</span></a>
-<a name="164"><span class="lineNum"> 164 </span> : : </a>
-<a name="165"><span class="lineNum"> 165 </span> : : /* XXX: This should probably just return if the PHB is disabled</a>
-<a name="166"><span class="lineNum"> 166 </span> : : * rather than adding the extra properties.</a>
-<a name="167"><span class="lineNum"> 167 </span> : : */</a>
-<a name="168"><span class="lineNum"> 168 </span> : : </a>
-<a name="169"><span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : if (active_phbs &amp; (0x80 &gt;&gt; phb_index))</span></a>
-<a name="170"><span class="lineNum"> 170 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(stack, &quot;status&quot;, &quot;okay&quot;);</span></a>
-<a name="171"><span class="lineNum"> 171 </span> : : else</a>
-<a name="172"><span class="lineNum"> 172 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(stack, &quot;status&quot;, &quot;disabled&quot;);</span></a>
-<a name="173"><span class="lineNum"> 173 </span> : : </a>
-<a name="174"><span class="lineNum"> 174 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; 4; i++) /* gen 3 eq settings */</span></a>
-<a name="175"><span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : eq[i] = be64_to_cpu(hub-&gt;phb_lane_eq[phb_index][i]);</span></a>
-<a name="176"><span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; 4; i++) /* gen 4 eq settings */</span></a>
-<a name="177"><span class="lineNum"> 177 </span> :<span class="lineNoCov"> 0 : eq[i+4] = be64_to_cpu(hub-&gt;phb4_lane_eq[phb_index][i]);</span></a>
-<a name="178"><span class="lineNum"> 178 </span> : : </a>
-<a name="179"><span class="lineNum"> 179 </span> : : /* Lane-eq settings are packed 2 bytes per lane for 16 lanes</a>
-<a name="180"><span class="lineNum"> 180 </span> : : * On P9 DD2, 1 byte per lane is used in the hardware</a>
-<a name="181"><span class="lineNum"> 181 </span> : : */</a>
-<a name="182"><span class="lineNum"> 182 </span> : : </a>
-<a name="183"><span class="lineNum"> 183 </span> : : /* Repack 2 byte lane settings into 1 byte */</a>
-<a name="184"><span class="lineNum"> 184 </span> :<span class="lineNoCov"> 0 : gen4 = (u8 *)&amp;eq[4];</span></a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; 16; i++)</span></a>
-<a name="186"><span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : gen4[i] = gen4[2*i];</span></a>
-<a name="187"><span class="lineNum"> 187 </span> : : </a>
-<a name="188"><span class="lineNum"> 188 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64s(stack, &quot;ibm,lane-eq&quot;, eq[0], eq[1],</span></a>
-<a name="189"><span class="lineNum"> 189 </span> : : eq[2], eq[3], eq[4], eq[5]);</a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : return stack;</span></a>
-<a name="191"><span class="lineNum"> 191 </span> : : }</a>
-<a name="192"><span class="lineNum"> 192 </span> : : </a>
-<a name="193"><span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : static struct dt_node *io_add_phb4(const struct cechub_io_hub *hub,</span></a>
-<a name="194"><span class="lineNum"> 194 </span> : : const struct HDIF_common_hdr *sp_iohubs,</a>
-<a name="195"><span class="lineNum"> 195 </span> : : struct dt_node *xcom,</a>
-<a name="196"><span class="lineNum"> 196 </span> : : unsigned int pec_index,</a>
-<a name="197"><span class="lineNum"> 197 </span> : : int stacks,</a>
-<a name="198"><span class="lineNum"> 198 </span> : : int phb_base)</a>
-<a name="199"><span class="lineNum"> 199 </span> : : {</a>
-<a name="200"><span class="lineNum"> 200 </span> : : struct dt_node *pbcq;</a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : uint8_t active_phb_mask = hub-&gt;fab_br0_pdt;</span></a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : uint32_t pe_xscom = 0x4010c00 + (pec_index * 0x0000400);</span></a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : uint32_t pci_xscom = 0xd010800 + (pec_index * 0x1000000);</span></a>
-<a name="204"><span class="lineNum"> 204 </span> : : int i;</a>
-<a name="205"><span class="lineNum"> 205 </span> : : </a>
-<a name="206"><span class="lineNum"> 206 </span> : : /* Create PBCQ node under xscom */</a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : pbcq = dt_new_addr(xcom, &quot;pbcq&quot;, pe_xscom);</span></a>
-<a name="208"><span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : if (!pbcq)</span></a>
-<a name="209"><span class="lineNum"> 209 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="210"><span class="lineNum"> 210 </span> : : </a>
-<a name="211"><span class="lineNum"> 211 </span> : : /* &quot;reg&quot; property contains (in order) the PE and PCI XSCOM addresses */</a>
-<a name="212"><span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(pbcq, &quot;reg&quot;,</span></a>
-<a name="213"><span class="lineNum"> 213 </span> : : pe_xscom, 0x100,</a>
-<a name="214"><span class="lineNum"> 214 </span> : : pci_xscom, 0x200);</a>
-<a name="215"><span class="lineNum"> 215 </span> : : </a>
-<a name="216"><span class="lineNum"> 216 </span> : : /* The hubs themselves go under the stacks */</a>
-<a name="217"><span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(pbcq, &quot;compatible&quot;, &quot;ibm,power9-pbcq&quot;);</span></a>
-<a name="218"><span class="lineNum"> 218 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(pbcq, &quot;ibm,pec-index&quot;, pec_index);</span></a>
-<a name="219"><span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(pbcq, &quot;#address-cells&quot;, 1);</span></a>
-<a name="220"><span class="lineNum"> 220 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(pbcq, &quot;#size-cells&quot;, 0);</span></a>
-<a name="221"><span class="lineNum"> 221 </span> : : </a>
-<a name="222"><span class="lineNum"> 222 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; stacks; i++)</span></a>
-<a name="223"><span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : add_pec_stack(hub, pbcq, i, phb_base + i, active_phb_mask);</span></a>
-<a name="224"><span class="lineNum"> 224 </span> : : </a>
-<a name="225"><span class="lineNum"> 225 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(pbcq, &quot;ibm,hub-id&quot;, be16_to_cpu(hub-&gt;hub_num));</span></a>
-<a name="226"><span class="lineNum"> 226 </span> : : </a>
-<a name="227"><span class="lineNum"> 227 </span> : : /* The loc code of the PHB itself is different from the base</a>
-<a name="228"><span class="lineNum"> 228 </span> : : * loc code of the slots (It's actually the DCM's loc code).</a>
-<a name="229"><span class="lineNum"> 229 </span> : : */</a>
-<a name="230"><span class="lineNum"> 230 </span> :<span class="lineNoCov"> 0 : io_get_loc_code(sp_iohubs, pbcq, &quot;ibm,loc-code&quot;);</span></a>
-<a name="231"><span class="lineNum"> 231 </span> : : </a>
-<a name="232"><span class="lineNum"> 232 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;CEC: Added PHB4 PBCQ %d with %d stacks\n&quot;,</span></a>
-<a name="233"><span class="lineNum"> 233 </span> : : pec_index, stacks);</a>
-<a name="234"><span class="lineNum"> 234 </span> : : </a>
-<a name="235"><span class="lineNum"> 235 </span> : : /* the actual PHB nodes created later on by skiboot */</a>
-<a name="236"><span class="lineNum"> 236 </span> :<span class="lineNoCov"> 0 : return pbcq;</span></a>
-<a name="237"><span class="lineNum"> 237 </span> : : }</a>
-<a name="238"><span class="lineNum"> 238 </span> : : </a>
-<a name="239"><span class="lineNum"> 239 </span> :<span class="lineCov"> 6 : static struct dt_node *io_add_p8(const struct cechub_io_hub *hub,</span></a>
-<a name="240"><span class="lineNum"> 240 </span> : : const struct HDIF_common_hdr *sp_iohubs)</a>
-<a name="241"><span class="lineNum"> 241 </span> : : {</a>
-<a name="242"><span class="lineNum"> 242 </span> : : struct dt_node *xscom;</a>
-<a name="243"><span class="lineNum"> 243 </span> : : unsigned int i, chip_id;</a>
-<a name="244"><span class="lineNum"> 244 </span> : : </a>
-<a name="245"><span class="lineNum"> 245 </span> :<span class="lineCov"> 6 : chip_id = pcid_to_chip_id(be32_to_cpu(hub-&gt;proc_chip_id));</span></a>
-<a name="246"><span class="lineNum"> 246 </span> : : </a>
-<a name="247"><span class="lineNum"> 247 </span> :<span class="lineCov"> 6 : prlog(PR_INFO, &quot;CEC: HW CHIP=0x%x, HW TOPO=0x%04x\n&quot;, chip_id,</span></a>
-<a name="248"><span class="lineNum"> 248 </span> : : be16_to_cpu(hub-&gt;hw_topology));</a>
-<a name="249"><span class="lineNum"> 249 </span> : : </a>
-<a name="250"><span class="lineNum"> 250 </span> :<span class="lineCov"> 6 : xscom = find_xscom_for_chip(chip_id);</span></a>
-<a name="251"><span class="lineNum"> 251 </span> :<span class="lineCov"> 6 : if (!xscom) {</span></a>
-<a name="252"><span class="lineNum"> 252 </span> :<span class="lineNoCov"> 0 : prerror(&quot;P8: Can't find XSCOM for chip %d\n&quot;, chip_id);</span></a>
-<a name="253"><span class="lineNum"> 253 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="254"><span class="lineNum"> 254 </span> : : }</a>
-<a name="255"><span class="lineNum"> 255 </span> : : </a>
-<a name="256"><span class="lineNum"> 256 </span> : : /* Create PHBs, max 3 */</a>
-<a name="257"><span class="lineNum"> 257 </span> :<span class="lineCov"> 24 : for (i = 0; i &lt; 3; i++) {</span></a>
-<a name="258"><span class="lineNum"> 258 </span> :<span class="lineCov"> 18 : if (hub-&gt;fab_br0_pdt &amp; (0x80 &gt;&gt; i))</span></a>
-<a name="259"><span class="lineNum"> 259 </span> : : /* XSCOM addresses are the same on Murano and Venice */</a>
-<a name="260"><span class="lineNum"> 260 </span> :<span class="lineCov"> 11 : io_add_phb3(hub, sp_iohubs, i, xscom,</span></a>
-<a name="261"><span class="lineNum"> 261 </span> :<span class="lineCov"> 11 : 0x02012000 + (i * 0x400),</span></a>
-<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 11 : 0x09012000 + (i * 0x400),</span></a>
-<a name="263"><span class="lineNum"> 263 </span> :<span class="lineCov"> 11 : 0x09013c00 + (i * 0x40));</span></a>
-<a name="264"><span class="lineNum"> 264 </span> : : }</a>
+<a name="154"><span class="lineNum"> 154 </span> : : const char *compat;</a>
+<a name="155"><span class="lineNum"> 155 </span> : : u64 eq[12];</a>
+<a name="156"><span class="lineNum"> 156 </span> : : u8 *ptr;</a>
+<a name="157"><span class="lineNum"> 157 </span> : : int i;</a>
+<a name="158"><span class="lineNum"> 158 </span> : : </a>
+<a name="159"><span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : stack = dt_new_addr(pbcq, &quot;stack&quot;, stack_index);</span></a>
+<a name="160"><span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : assert(stack);</span></a>
+<a name="161"><span class="lineNum"> 161 </span> : : </a>
+<a name="162"><span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : if (proc_gen == proc_gen_p9)</span></a>
+<a name="163"><span class="lineNum"> 163 </span> :<span class="lineNoCov"> 0 : compat = &quot;ibm,power9-phb-stack&quot;;</span></a>
+<a name="164"><span class="lineNum"> 164 </span> : : else</a>
+<a name="165"><span class="lineNum"> 165 </span> :<span class="lineNoCov"> 0 : compat = &quot;ibm,power10-phb-stack&quot;;</span></a>
+<a name="166"><span class="lineNum"> 166 </span> : : </a>
+<a name="167"><span class="lineNum"> 167 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(stack, &quot;reg&quot;, stack_index);</span></a>
+<a name="168"><span class="lineNum"> 168 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(stack, &quot;ibm,phb-index&quot;, phb_index);</span></a>
+<a name="169"><span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(stack, &quot;compatible&quot;, compat);</span></a>
+<a name="170"><span class="lineNum"> 170 </span> : : </a>
+<a name="171"><span class="lineNum"> 171 </span> : : /* XXX: This should probably just return if the PHB is disabled</a>
+<a name="172"><span class="lineNum"> 172 </span> : : * rather than adding the extra properties.</a>
+<a name="173"><span class="lineNum"> 173 </span> : : */</a>
+<a name="174"><span class="lineNum"> 174 </span> : : </a>
+<a name="175"><span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : if (active_phbs &amp; (0x80 &gt;&gt; phb_index))</span></a>
+<a name="176"><span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(stack, &quot;status&quot;, &quot;okay&quot;);</span></a>
+<a name="177"><span class="lineNum"> 177 </span> : : else</a>
+<a name="178"><span class="lineNum"> 178 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(stack, &quot;status&quot;, &quot;disabled&quot;);</span></a>
+<a name="179"><span class="lineNum"> 179 </span> : : </a>
+<a name="180"><span class="lineNum"> 180 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; 4; i++) /* gen 3 eq settings */</span></a>
+<a name="181"><span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : eq[i] = be64_to_cpu(hub-&gt;phb_lane_eq[phb_index][i]);</span></a>
+<a name="182"><span class="lineNum"> 182 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; 4; i++) /* gen 4 eq settings */</span></a>
+<a name="183"><span class="lineNum"> 183 </span> :<span class="lineNoCov"> 0 : eq[i+4] = be64_to_cpu(hub-&gt;phb4_lane_eq[phb_index][i]);</span></a>
+<a name="184"><span class="lineNum"> 184 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; 4; i++) /* gen 5 eq settings */</span></a>
+<a name="185"><span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : eq[i+8] = be64_to_cpu(hub-&gt;phb5_lane_eq[phb_index][i]);</span></a>
+<a name="186"><span class="lineNum"> 186 </span> : : </a>
+<a name="187"><span class="lineNum"> 187 </span> : : /* Lane-eq settings are packed 2 bytes per lane for 16 lanes</a>
+<a name="188"><span class="lineNum"> 188 </span> : : * On P9 DD2 and P10, 1 byte per lane is used in the hardware</a>
+<a name="189"><span class="lineNum"> 189 </span> : : */</a>
+<a name="190"><span class="lineNum"> 190 </span> : : </a>
+<a name="191"><span class="lineNum"> 191 </span> : : /* Repack 2 byte lane settings into 1 byte for gen 4 &amp; 5 */</a>
+<a name="192"><span class="lineNum"> 192 </span> :<span class="lineNoCov"> 0 : ptr = (u8 *)&amp;eq[4];</span></a>
+<a name="193"><span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; 32; i++)</span></a>
+<a name="194"><span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : ptr[i] = ptr[2*i];</span></a>
+<a name="195"><span class="lineNum"> 195 </span> : : </a>
+<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : if (proc_gen == proc_gen_p9)</span></a>
+<a name="197"><span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64s(stack, &quot;ibm,lane-eq&quot;,</span></a>
+<a name="198"><span class="lineNum"> 198 </span> : : eq[0], eq[1], eq[2], eq[3],</a>
+<a name="199"><span class="lineNum"> 199 </span> : : eq[4], eq[5]);</a>
+<a name="200"><span class="lineNum"> 200 </span> : : else</a>
+<a name="201"><span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64s(stack, &quot;ibm,lane-eq&quot;,</span></a>
+<a name="202"><span class="lineNum"> 202 </span> : : eq[0], eq[1], eq[2], eq[3],</a>
+<a name="203"><span class="lineNum"> 203 </span> : : eq[4], eq[5],</a>
+<a name="204"><span class="lineNum"> 204 </span> : : eq[6], eq[7]);</a>
+<a name="205"><span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : return stack;</span></a>
+<a name="206"><span class="lineNum"> 206 </span> : : }</a>
+<a name="207"><span class="lineNum"> 207 </span> : : </a>
+<a name="208"><span class="lineNum"> 208 </span> : : /* Add PHB4 on p9, PHB5 on p10 */</a>
+<a name="209"><span class="lineNum"> 209 </span> :<span class="lineNoCov"> 0 : static struct dt_node *io_add_phb4(const struct cechub_io_hub *hub,</span></a>
+<a name="210"><span class="lineNum"> 210 </span> : : const struct HDIF_common_hdr *sp_iohubs,</a>
+<a name="211"><span class="lineNum"> 211 </span> : : struct dt_node *xcom,</a>
+<a name="212"><span class="lineNum"> 212 </span> : : unsigned int pec_index,</a>
+<a name="213"><span class="lineNum"> 213 </span> : : int stacks,</a>
+<a name="214"><span class="lineNum"> 214 </span> : : int phb_base)</a>
+<a name="215"><span class="lineNum"> 215 </span> : : {</a>
+<a name="216"><span class="lineNum"> 216 </span> : : struct dt_node *pbcq;</a>
+<a name="217"><span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : uint8_t active_phb_mask = hub-&gt;fab_br0_pdt;</span></a>
+<a name="218"><span class="lineNum"> 218 </span> : : uint32_t pe_xscom;</a>
+<a name="219"><span class="lineNum"> 219 </span> : : uint32_t pci_xscom;</a>
+<a name="220"><span class="lineNum"> 220 </span> : : const char *compat;</a>
+<a name="221"><span class="lineNum"> 221 </span> : : int i;</a>
+<a name="222"><span class="lineNum"> 222 </span> : : </a>
+<a name="223"><span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : if (proc_gen == proc_gen_p9) {</span></a>
+<a name="224"><span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : pe_xscom = 0x4010c00 + (pec_index * 0x0000400);</span></a>
+<a name="225"><span class="lineNum"> 225 </span> :<span class="lineNoCov"> 0 : pci_xscom = 0xd010800 + (pec_index * 0x1000000);</span></a>
+<a name="226"><span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : compat = &quot;ibm,power9-pbcq&quot;;</span></a>
+<a name="227"><span class="lineNum"> 227 </span> : : } else {</a>
+<a name="228"><span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : pe_xscom = 0x3011800 - (pec_index * 0x1000000);</span></a>
+<a name="229"><span class="lineNum"> 229 </span> :<span class="lineNoCov"> 0 : pci_xscom = 0x8010800 + (pec_index * 0x1000000);</span></a>
+<a name="230"><span class="lineNum"> 230 </span> :<span class="lineNoCov"> 0 : compat = &quot;ibm,power10-pbcq&quot;;</span></a>
+<a name="231"><span class="lineNum"> 231 </span> : : }</a>
+<a name="232"><span class="lineNum"> 232 </span> : : </a>
+<a name="233"><span class="lineNum"> 233 </span> : : /* Create PBCQ node under xscom */</a>
+<a name="234"><span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : pbcq = dt_new_addr(xcom, &quot;pbcq&quot;, pe_xscom);</span></a>
+<a name="235"><span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : if (!pbcq)</span></a>
+<a name="236"><span class="lineNum"> 236 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="237"><span class="lineNum"> 237 </span> : : </a>
+<a name="238"><span class="lineNum"> 238 </span> : : /* &quot;reg&quot; property contains (in order) the PE and PCI XSCOM addresses */</a>
+<a name="239"><span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(pbcq, &quot;reg&quot;,</span></a>
+<a name="240"><span class="lineNum"> 240 </span> : : pe_xscom, 0x100,</a>
+<a name="241"><span class="lineNum"> 241 </span> : : pci_xscom, 0x200);</a>
+<a name="242"><span class="lineNum"> 242 </span> : : </a>
+<a name="243"><span class="lineNum"> 243 </span> : : /* The hubs themselves go under the stacks */</a>
+<a name="244"><span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(pbcq, &quot;compatible&quot;, compat);</span></a>
+<a name="245"><span class="lineNum"> 245 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(pbcq, &quot;ibm,pec-index&quot;, pec_index);</span></a>
+<a name="246"><span class="lineNum"> 246 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(pbcq, &quot;#address-cells&quot;, 1);</span></a>
+<a name="247"><span class="lineNum"> 247 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(pbcq, &quot;#size-cells&quot;, 0);</span></a>
+<a name="248"><span class="lineNum"> 248 </span> : : </a>
+<a name="249"><span class="lineNum"> 249 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; stacks; i++)</span></a>
+<a name="250"><span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : add_pec_stack(hub, pbcq, i, phb_base + i, active_phb_mask);</span></a>
+<a name="251"><span class="lineNum"> 251 </span> : : </a>
+<a name="252"><span class="lineNum"> 252 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(pbcq, &quot;ibm,hub-id&quot;, be16_to_cpu(hub-&gt;hub_num));</span></a>
+<a name="253"><span class="lineNum"> 253 </span> : : </a>
+<a name="254"><span class="lineNum"> 254 </span> : : /* The loc code of the PHB itself is different from the base</a>
+<a name="255"><span class="lineNum"> 255 </span> : : * loc code of the slots (It's actually the DCM's loc code).</a>
+<a name="256"><span class="lineNum"> 256 </span> : : */</a>
+<a name="257"><span class="lineNum"> 257 </span> :<span class="lineNoCov"> 0 : io_get_loc_code(sp_iohubs, pbcq, &quot;ibm,loc-code&quot;);</span></a>
+<a name="258"><span class="lineNum"> 258 </span> : : </a>
+<a name="259"><span class="lineNum"> 259 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;CEC: Added PBCQ %d with %d stacks\n&quot;,</span></a>
+<a name="260"><span class="lineNum"> 260 </span> : : pec_index, stacks);</a>
+<a name="261"><span class="lineNum"> 261 </span> : : </a>
+<a name="262"><span class="lineNum"> 262 </span> : : /* the actual PHB nodes created later on by skiboot */</a>
+<a name="263"><span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : return pbcq;</span></a>
+<a name="264"><span class="lineNum"> 264 </span> : : }</a>
<a name="265"><span class="lineNum"> 265 </span> : : </a>
-<a name="266"><span class="lineNum"> 266 </span> : : /* HACK: We return the XSCOM device for the VPD info */</a>
-<a name="267"><span class="lineNum"> 267 </span> :<span class="lineCov"> 6 : return xscom;</span></a>
-<a name="268"><span class="lineNum"> 268 </span> : : }</a>
-<a name="269"><span class="lineNum"> 269 </span> : : </a>
-<a name="270"><span class="lineNum"> 270 </span> :<span class="lineNoCov"> 0 : static struct dt_node *io_add_p9(const struct cechub_io_hub *hub,</span></a>
-<a name="271"><span class="lineNum"> 271 </span> : : const struct HDIF_common_hdr *sp_iohubs)</a>
-<a name="272"><span class="lineNum"> 272 </span> : : {</a>
-<a name="273"><span class="lineNum"> 273 </span> : : struct dt_node *xscom;</a>
-<a name="274"><span class="lineNum"> 274 </span> : : unsigned int chip_id;</a>
-<a name="275"><span class="lineNum"> 275 </span> : : </a>
-<a name="276"><span class="lineNum"> 276 </span> :<span class="lineNoCov"> 0 : chip_id = pcid_to_chip_id(be32_to_cpu(hub-&gt;proc_chip_id));</span></a>
-<a name="277"><span class="lineNum"> 277 </span> : : </a>
-<a name="278"><span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;CEC: HW CHIP=0x%x, HW TOPO=0x%04x\n&quot;, chip_id,</span></a>
-<a name="279"><span class="lineNum"> 279 </span> : : be16_to_cpu(hub-&gt;hw_topology));</a>
-<a name="280"><span class="lineNum"> 280 </span> : : </a>
-<a name="281"><span class="lineNum"> 281 </span> :<span class="lineNoCov"> 0 : xscom = find_xscom_for_chip(chip_id);</span></a>
-<a name="282"><span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : if (!xscom) {</span></a>
-<a name="283"><span class="lineNum"> 283 </span> :<span class="lineNoCov"> 0 : prerror(&quot;P9: Can't find XSCOM for chip %d\n&quot;, chip_id);</span></a>
-<a name="284"><span class="lineNum"> 284 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="285"><span class="lineNum"> 285 </span> : : }</a>
-<a name="286"><span class="lineNum"> 286 </span> : : </a>
-<a name="287"><span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;IOHUB: PHB4 active bridge mask %x\n&quot;,</span></a>
-<a name="288"><span class="lineNum"> 288 </span> : : (u32) hub-&gt;fab_br0_pdt);</a>
-<a name="289"><span class="lineNum"> 289 </span> : : </a>
-<a name="290"><span class="lineNum"> 290 </span> : : /* Create PBCQs */</a>
-<a name="291"><span class="lineNum"> 291 </span> :<span class="lineNoCov"> 0 : io_add_phb4(hub, sp_iohubs, xscom, 0, 1, 0);</span></a>
-<a name="292"><span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : io_add_phb4(hub, sp_iohubs, xscom, 1, 2, 1);</span></a>
-<a name="293"><span class="lineNum"> 293 </span> :<span class="lineNoCov"> 0 : io_add_phb4(hub, sp_iohubs, xscom, 2, 3, 3);</span></a>
-<a name="294"><span class="lineNum"> 294 </span> : : </a>
-<a name="295"><span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : return xscom;</span></a>
-<a name="296"><span class="lineNum"> 296 </span> : : }</a>
-<a name="297"><span class="lineNum"> 297 </span> : : </a>
-<a name="298"><span class="lineNum"> 298 </span> : : </a>
-<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 3 : static void io_add_p8_cec_vpd(const struct HDIF_common_hdr *sp_iohubs)</span></a>
+<a name="266"><span class="lineNum"> 266 </span> :<span class="lineCov"> 6 : static struct dt_node *io_add_p8(const struct cechub_io_hub *hub,</span></a>
+<a name="267"><span class="lineNum"> 267 </span> : : const struct HDIF_common_hdr *sp_iohubs)</a>
+<a name="268"><span class="lineNum"> 268 </span> : : {</a>
+<a name="269"><span class="lineNum"> 269 </span> : : struct dt_node *xscom;</a>
+<a name="270"><span class="lineNum"> 270 </span> : : unsigned int i, chip_id;</a>
+<a name="271"><span class="lineNum"> 271 </span> : : </a>
+<a name="272"><span class="lineNum"> 272 </span> :<span class="lineCov"> 6 : chip_id = pcid_to_chip_id(be32_to_cpu(hub-&gt;proc_chip_id));</span></a>
+<a name="273"><span class="lineNum"> 273 </span> : : </a>
+<a name="274"><span class="lineNum"> 274 </span> :<span class="lineCov"> 6 : prlog(PR_INFO, &quot;CEC: HW CHIP=0x%x, HW TOPO=0x%04x\n&quot;, chip_id,</span></a>
+<a name="275"><span class="lineNum"> 275 </span> : : be16_to_cpu(hub-&gt;hw_topology));</a>
+<a name="276"><span class="lineNum"> 276 </span> : : </a>
+<a name="277"><span class="lineNum"> 277 </span> :<span class="lineCov"> 6 : xscom = find_xscom_for_chip(chip_id);</span></a>
+<a name="278"><span class="lineNum"> 278 </span> :<span class="lineCov"> 6 : if (!xscom) {</span></a>
+<a name="279"><span class="lineNum"> 279 </span> :<span class="lineNoCov"> 0 : prerror(&quot;P8: Can't find XSCOM for chip %d\n&quot;, chip_id);</span></a>
+<a name="280"><span class="lineNum"> 280 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="281"><span class="lineNum"> 281 </span> : : }</a>
+<a name="282"><span class="lineNum"> 282 </span> : : </a>
+<a name="283"><span class="lineNum"> 283 </span> : : /* Create PHBs, max 3 */</a>
+<a name="284"><span class="lineNum"> 284 </span> :<span class="lineCov"> 24 : for (i = 0; i &lt; 3; i++) {</span></a>
+<a name="285"><span class="lineNum"> 285 </span> :<span class="lineCov"> 18 : if (hub-&gt;fab_br0_pdt &amp; (0x80 &gt;&gt; i))</span></a>
+<a name="286"><span class="lineNum"> 286 </span> : : /* XSCOM addresses are the same on Murano and Venice */</a>
+<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 11 : io_add_phb3(hub, sp_iohubs, i, xscom,</span></a>
+<a name="288"><span class="lineNum"> 288 </span> :<span class="lineCov"> 11 : 0x02012000 + (i * 0x400),</span></a>
+<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 11 : 0x09012000 + (i * 0x400),</span></a>
+<a name="290"><span class="lineNum"> 290 </span> :<span class="lineCov"> 11 : 0x09013c00 + (i * 0x40));</span></a>
+<a name="291"><span class="lineNum"> 291 </span> : : }</a>
+<a name="292"><span class="lineNum"> 292 </span> : : </a>
+<a name="293"><span class="lineNum"> 293 </span> : : /* HACK: We return the XSCOM device for the VPD info */</a>
+<a name="294"><span class="lineNum"> 294 </span> :<span class="lineCov"> 6 : return xscom;</span></a>
+<a name="295"><span class="lineNum"> 295 </span> : : }</a>
+<a name="296"><span class="lineNum"> 296 </span> : : </a>
+<a name="297"><span class="lineNum"> 297 </span> : : /* Add PBCQs for p9/p10 */</a>
+<a name="298"><span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : static struct dt_node *io_add_p9(const struct cechub_io_hub *hub,</span></a>
+<a name="299"><span class="lineNum"> 299 </span> : : const struct HDIF_common_hdr *sp_iohubs)</a>
<a name="300"><span class="lineNum"> 300 </span> : : {</a>
-<a name="301"><span class="lineNum"> 301 </span> : : const struct HDIF_child_ptr *iokids;</a>
-<a name="302"><span class="lineNum"> 302 </span> : : const void *iokid; </a>
-<a name="303"><span class="lineNum"> 303 </span> : : const void *kwvpd;</a>
-<a name="304"><span class="lineNum"> 304 </span> : : unsigned int kwvpd_sz;</a>
+<a name="301"><span class="lineNum"> 301 </span> : : struct dt_node *xscom;</a>
+<a name="302"><span class="lineNum"> 302 </span> : : unsigned int chip_id;</a>
+<a name="303"><span class="lineNum"> 303 </span> : : </a>
+<a name="304"><span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : chip_id = pcid_to_chip_id(be32_to_cpu(hub-&gt;proc_chip_id));</span></a>
<a name="305"><span class="lineNum"> 305 </span> : : </a>
-<a name="306"><span class="lineNum"> 306 </span> : : /* P8 LXR0 kept in IO KID Keyword VPD */</a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineCov"> 3 : iokids = HDIF_child_arr(sp_iohubs, CECHUB_CHILD_IO_KIDS);</span></a>
-<a name="308"><span class="lineNum"> 308 </span> :<span class="lineCov"> 3 : if (!CHECK_SPPTR(iokids)) {</span></a>
-<a name="309"><span class="lineNum"> 309 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;CEC: No IOKID child array !\n&quot;);</span></a>
-<a name="310"><span class="lineNum"> 310 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="311"><span class="lineNum"> 311 </span> : : }</a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 3 : if (!iokids-&gt;count) {</span></a>
-<a name="313"><span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;CEC: IOKID count is 0 !\n&quot;);</span></a>
-<a name="314"><span class="lineNum"> 314 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="315"><span class="lineNum"> 315 </span> : : }</a>
-<a name="316"><span class="lineNum"> 316 </span> :<span class="lineCov"> 3 : if (be32_to_cpu(iokids-&gt;count) &gt; 1) {</span></a>
-<a name="317"><span class="lineNum"> 317 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;CEC: WARNING ! More than 1 IO KID !!! (%d)\n&quot;,</span></a>
-<a name="318"><span class="lineNum"> 318 </span> : : be32_to_cpu(iokids-&gt;count));</a>
-<a name="319"><span class="lineNum"> 319 </span> : : /* Ignoring the additional ones */</a>
-<a name="320"><span class="lineNum"> 320 </span> : : }</a>
-<a name="321"><span class="lineNum"> 321 </span> : : </a>
-<a name="322"><span class="lineNum"> 322 </span> :<span class="lineCov"> 3 : iokid = HDIF_child(sp_iohubs, iokids, 0, &quot;IO KID&quot;);</span></a>
-<a name="323"><span class="lineNum"> 323 </span> :<span class="lineCov"> 3 : if (!iokid) {</span></a>
-<a name="324"><span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;CEC: No IO KID structure in child array !\n&quot;);</span></a>
-<a name="325"><span class="lineNum"> 325 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="306"><span class="lineNum"> 306 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;CEC: HW CHIP=0x%x, HW TOPO=0x%04x\n&quot;, chip_id,</span></a>
+<a name="307"><span class="lineNum"> 307 </span> : : be16_to_cpu(hub-&gt;hw_topology));</a>
+<a name="308"><span class="lineNum"> 308 </span> : : </a>
+<a name="309"><span class="lineNum"> 309 </span> :<span class="lineNoCov"> 0 : xscom = find_xscom_for_chip(chip_id);</span></a>
+<a name="310"><span class="lineNum"> 310 </span> :<span class="lineNoCov"> 0 : if (!xscom) {</span></a>
+<a name="311"><span class="lineNum"> 311 </span> :<span class="lineNoCov"> 0 : prerror(&quot;IOHUB: Can't find XSCOM for chip %d\n&quot;, chip_id);</span></a>
+<a name="312"><span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="313"><span class="lineNum"> 313 </span> : : }</a>
+<a name="314"><span class="lineNum"> 314 </span> : : </a>
+<a name="315"><span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;IOHUB: PHB active bridge mask %x\n&quot;,</span></a>
+<a name="316"><span class="lineNum"> 316 </span> : : (u32) hub-&gt;fab_br0_pdt);</a>
+<a name="317"><span class="lineNum"> 317 </span> : : </a>
+<a name="318"><span class="lineNum"> 318 </span> : : /* Create PBCQs */</a>
+<a name="319"><span class="lineNum"> 319 </span> :<span class="lineNoCov"> 0 : if (proc_gen == proc_gen_p9) {</span></a>
+<a name="320"><span class="lineNum"> 320 </span> :<span class="lineNoCov"> 0 : io_add_phb4(hub, sp_iohubs, xscom, 0, 1, 0);</span></a>
+<a name="321"><span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : io_add_phb4(hub, sp_iohubs, xscom, 1, 2, 1);</span></a>
+<a name="322"><span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : io_add_phb4(hub, sp_iohubs, xscom, 2, 3, 3);</span></a>
+<a name="323"><span class="lineNum"> 323 </span> : : } else { /* p10 */</a>
+<a name="324"><span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : io_add_phb4(hub, sp_iohubs, xscom, 0, 3, 0);</span></a>
+<a name="325"><span class="lineNum"> 325 </span> :<span class="lineNoCov"> 0 : io_add_phb4(hub, sp_iohubs, xscom, 1, 3, 3);</span></a>
<a name="326"><span class="lineNum"> 326 </span> : : }</a>
<a name="327"><span class="lineNum"> 327 </span> : : </a>
-<a name="328"><span class="lineNum"> 328 </span> : : /* Grab base location code for slots */</a>
-<a name="329"><span class="lineNum"> 329 </span> :<span class="lineCov"> 3 : io_get_loc_code(iokid, dt_root, &quot;ibm,io-base-loc-code&quot;);</span></a>
+<a name="328"><span class="lineNum"> 328 </span> :<span class="lineNoCov"> 0 : return xscom;</span></a>
+<a name="329"><span class="lineNum"> 329 </span> : : }</a>
<a name="330"><span class="lineNum"> 330 </span> : : </a>
-<a name="331"><span class="lineNum"> 331 </span> :<span class="lineCov"> 3 : kwvpd = HDIF_get_idata(iokid, CECHUB_ASCII_KEYWORD_VPD, &amp;kwvpd_sz);</span></a>
-<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 3 : if (!kwvpd) {</span></a>
-<a name="333"><span class="lineNum"> 333 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;CEC: No VPD entry in IO KID !\n&quot;);</span></a>
-<a name="334"><span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="335"><span class="lineNum"> 335 </span> : : }</a>
-<a name="336"><span class="lineNum"> 336 </span> : : </a>
-<a name="337"><span class="lineNum"> 337 </span> : : /* Grab LX load info */</a>
-<a name="338"><span class="lineNum"> 338 </span> :<span class="lineCov"> 3 : io_get_lx_info(kwvpd, kwvpd_sz, 0, dt_root);</span></a>
-<a name="339"><span class="lineNum"> 339 </span> : : }</a>
-<a name="340"><span class="lineNum"> 340 </span> : : </a>
-<a name="341"><span class="lineNum"> 341 </span> : : /*</a>
-<a name="342"><span class="lineNum"> 342 </span> : : * Assumptions:</a>
-<a name="343"><span class="lineNum"> 343 </span> : : *</a>
-<a name="344"><span class="lineNum"> 344 </span> : : * a) the IOSLOT index is the hub ID -CHECK</a>
-<a name="345"><span class="lineNum"> 345 </span> : : *</a>
-<a name="346"><span class="lineNum"> 346 </span> : : */</a>
-<a name="347"><span class="lineNum"> 347 </span> : : </a>
-<a name="348"><span class="lineNum"> 348 </span> : : static struct dt_node *dt_slots;</a>
-<a name="349"><span class="lineNum"> 349 </span> : : </a>
-<a name="350"><span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : static void add_i2c_link(struct dt_node *node, const char *link_name,</span></a>
-<a name="351"><span class="lineNum"> 351 </span> : : u32 i2c_link)</a>
-<a name="352"><span class="lineNum"> 352 </span> : : {</a>
-<a name="353"><span class="lineNum"> 353 </span> : : /* FIXME: Do something not shit */</a>
-<a name="354"><span class="lineNum"> 354 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, link_name, i2c_link);</span></a>
-<a name="355"><span class="lineNum"> 355 </span> :<span class="lineNoCov"> 0 : }</span></a>
-<a name="356"><span class="lineNum"> 356 </span> : : </a>
-<a name="357"><span class="lineNum"> 357 </span> : : /*</a>
-<a name="358"><span class="lineNum"> 358 </span> : : * the root of the slots node has #address-cells = 2, &lt;hub-index, phb-index&gt;</a>
-<a name="359"><span class="lineNum"> 359 </span> : : * can we ditch hub-index?</a>
-<a name="360"><span class="lineNum"> 360 </span> : : */</a>
-<a name="361"><span class="lineNum"> 361 </span> : : </a>
-<a name="362"><span class="lineNum"> 362 </span> : : </a>
-<a name="363"><span class="lineNum"> 363 </span> :<span class="lineNoCov"> 0 : static const struct slot_map_details *find_slot_details(</span></a>
-<a name="364"><span class="lineNum"> 364 </span> : : const struct HDIF_common_hdr *ioslot, int entry)</a>
-<a name="365"><span class="lineNum"> 365 </span> : : {</a>
-<a name="366"><span class="lineNum"> 366 </span> :<span class="lineNoCov"> 0 : const struct slot_map_details *details = NULL;</span></a>
-<a name="367"><span class="lineNum"> 367 </span> : : const struct HDIF_array_hdr *arr;</a>
-<a name="368"><span class="lineNum"> 368 </span> : : unsigned int i;</a>
+<a name="331"><span class="lineNum"> 331 </span> : : </a>
+<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 3 : static void io_add_p8_cec_vpd(const struct HDIF_common_hdr *sp_iohubs)</span></a>
+<a name="333"><span class="lineNum"> 333 </span> : : {</a>
+<a name="334"><span class="lineNum"> 334 </span> : : const struct HDIF_child_ptr *iokids;</a>
+<a name="335"><span class="lineNum"> 335 </span> : : const void *iokid; </a>
+<a name="336"><span class="lineNum"> 336 </span> : : const void *kwvpd;</a>
+<a name="337"><span class="lineNum"> 337 </span> : : unsigned int kwvpd_sz;</a>
+<a name="338"><span class="lineNum"> 338 </span> : : </a>
+<a name="339"><span class="lineNum"> 339 </span> : : /* P8 LXR0 kept in IO KID Keyword VPD */</a>
+<a name="340"><span class="lineNum"> 340 </span> :<span class="lineCov"> 3 : iokids = HDIF_child_arr(sp_iohubs, CECHUB_CHILD_IO_KIDS);</span></a>
+<a name="341"><span class="lineNum"> 341 </span> :<span class="lineCov"> 3 : if (!CHECK_SPPTR(iokids)) {</span></a>
+<a name="342"><span class="lineNum"> 342 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;CEC: No IOKID child array !\n&quot;);</span></a>
+<a name="343"><span class="lineNum"> 343 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="344"><span class="lineNum"> 344 </span> : : }</a>
+<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 3 : if (!iokids-&gt;count) {</span></a>
+<a name="346"><span class="lineNum"> 346 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;CEC: IOKID count is 0 !\n&quot;);</span></a>
+<a name="347"><span class="lineNum"> 347 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="348"><span class="lineNum"> 348 </span> : : }</a>
+<a name="349"><span class="lineNum"> 349 </span> :<span class="lineCov"> 3 : if (be32_to_cpu(iokids-&gt;count) &gt; 1) {</span></a>
+<a name="350"><span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;CEC: WARNING ! More than 1 IO KID !!! (%d)\n&quot;,</span></a>
+<a name="351"><span class="lineNum"> 351 </span> : : be32_to_cpu(iokids-&gt;count));</a>
+<a name="352"><span class="lineNum"> 352 </span> : : /* Ignoring the additional ones */</a>
+<a name="353"><span class="lineNum"> 353 </span> : : }</a>
+<a name="354"><span class="lineNum"> 354 </span> : : </a>
+<a name="355"><span class="lineNum"> 355 </span> :<span class="lineCov"> 3 : iokid = HDIF_child(sp_iohubs, iokids, 0, &quot;IO KID&quot;);</span></a>
+<a name="356"><span class="lineNum"> 356 </span> :<span class="lineCov"> 3 : if (!iokid) {</span></a>
+<a name="357"><span class="lineNum"> 357 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;CEC: No IO KID structure in child array !\n&quot;);</span></a>
+<a name="358"><span class="lineNum"> 358 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="359"><span class="lineNum"> 359 </span> : : }</a>
+<a name="360"><span class="lineNum"> 360 </span> : : </a>
+<a name="361"><span class="lineNum"> 361 </span> : : /* Grab base location code for slots */</a>
+<a name="362"><span class="lineNum"> 362 </span> :<span class="lineCov"> 3 : io_get_loc_code(iokid, dt_root, &quot;ibm,io-base-loc-code&quot;);</span></a>
+<a name="363"><span class="lineNum"> 363 </span> : : </a>
+<a name="364"><span class="lineNum"> 364 </span> :<span class="lineCov"> 3 : kwvpd = HDIF_get_idata(iokid, CECHUB_ASCII_KEYWORD_VPD, &amp;kwvpd_sz);</span></a>
+<a name="365"><span class="lineNum"> 365 </span> :<span class="lineCov"> 3 : if (!kwvpd) {</span></a>
+<a name="366"><span class="lineNum"> 366 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;CEC: No VPD entry in IO KID !\n&quot;);</span></a>
+<a name="367"><span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="368"><span class="lineNum"> 368 </span> : : }</a>
<a name="369"><span class="lineNum"> 369 </span> : : </a>
-<a name="370"><span class="lineNum"> 370 </span> :<span class="lineNoCov"> 0 : arr = HDIF_get_iarray(ioslot, IOSLOT_IDATA_DETAILS, NULL);</span></a>
-<a name="371"><span class="lineNum"> 371 </span> :<span class="lineNoCov"> 0 : HDIF_iarray_for_each(arr, i, details)</span></a>
-<a name="372"><span class="lineNum"> 372 </span> :<span class="lineNoCov"> 0 : if (be16_to_cpu(details-&gt;entry) == entry)</span></a>
-<a name="373"><span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="374"><span class="lineNum"> 374 </span> : : </a>
-<a name="375"><span class="lineNum"> 375 </span> :<span class="lineNoCov"> 0 : return details;</span></a>
-<a name="376"><span class="lineNum"> 376 </span> : : }</a>
-<a name="377"><span class="lineNum"> 377 </span> : : </a>
-<a name="378"><span class="lineNum"> 378 </span> :<span class="lineNoCov"> 0 : static void parse_slot_details(struct dt_node *slot,</span></a>
-<a name="379"><span class="lineNum"> 379 </span> : : const struct slot_map_details *details)</a>
-<a name="380"><span class="lineNum"> 380 </span> : : {</a>
-<a name="381"><span class="lineNum"> 381 </span> : : u32 slot_caps;</a>
+<a name="370"><span class="lineNum"> 370 </span> : : /* Grab LX load info */</a>
+<a name="371"><span class="lineNum"> 371 </span> :<span class="lineCov"> 3 : io_get_lx_info(kwvpd, kwvpd_sz, 0, dt_root);</span></a>
+<a name="372"><span class="lineNum"> 372 </span> : : }</a>
+<a name="373"><span class="lineNum"> 373 </span> : : </a>
+<a name="374"><span class="lineNum"> 374 </span> : : /*</a>
+<a name="375"><span class="lineNum"> 375 </span> : : * Assumptions:</a>
+<a name="376"><span class="lineNum"> 376 </span> : : *</a>
+<a name="377"><span class="lineNum"> 377 </span> : : * a) the IOSLOT index is the hub ID -CHECK</a>
+<a name="378"><span class="lineNum"> 378 </span> : : *</a>
+<a name="379"><span class="lineNum"> 379 </span> : : */</a>
+<a name="380"><span class="lineNum"> 380 </span> : : </a>
+<a name="381"><span class="lineNum"> 381 </span> : : static struct dt_node *dt_slots;</a>
<a name="382"><span class="lineNum"> 382 </span> : : </a>
-<a name="383"><span class="lineNum"> 383 </span> : : /*</a>
-<a name="384"><span class="lineNum"> 384 </span> : : * generic slot options</a>
-<a name="385"><span class="lineNum"> 385 </span> : : */</a>
-<a name="386"><span class="lineNum"> 386 </span> : : </a>
-<a name="387"><span class="lineNum"> 387 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(slot, &quot;max-power&quot;,</span></a>
-<a name="388"><span class="lineNum"> 388 </span> : : be16_to_cpu(details-&gt;max_power));</a>
+<a name="383"><span class="lineNum"> 383 </span> :<span class="lineNoCov"> 0 : static void add_i2c_link(struct dt_node *node, const char *link_name,</span></a>
+<a name="384"><span class="lineNum"> 384 </span> : : u32 i2c_link)</a>
+<a name="385"><span class="lineNum"> 385 </span> : : {</a>
+<a name="386"><span class="lineNum"> 386 </span> : : /* FIXME: Do something not shit */</a>
+<a name="387"><span class="lineNum"> 387 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, link_name, i2c_link);</span></a>
+<a name="388"><span class="lineNum"> 388 </span> :<span class="lineNoCov"> 0 : }</span></a>
<a name="389"><span class="lineNum"> 389 </span> : : </a>
-<a name="390"><span class="lineNum"> 390 </span> :<span class="lineNoCov"> 0 : if (details-&gt;perst_ctl_type == SLOT_PERST_PHB_OR_SW)</span></a>
-<a name="391"><span class="lineNum"> 391 </span> :<span class="lineNoCov"> 0 : dt_add_property(slot, &quot;pci-perst&quot;, NULL, 0);</span></a>
-<a name="392"><span class="lineNum"> 392 </span> :<span class="lineNoCov"> 0 : else if (details-&gt;perst_ctl_type == SLOT_PERST_SW_GPIO)</span></a>
-<a name="393"><span class="lineNum"> 393 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(slot, &quot;gpio-perst&quot;, details-&gt;perst_gpio);</span></a>
+<a name="390"><span class="lineNum"> 390 </span> : : /*</a>
+<a name="391"><span class="lineNum"> 391 </span> : : * the root of the slots node has #address-cells = 2, &lt;hub-index, phb-index&gt;</a>
+<a name="392"><span class="lineNum"> 392 </span> : : * can we ditch hub-index?</a>
+<a name="393"><span class="lineNum"> 393 </span> : : */</a>
<a name="394"><span class="lineNum"> 394 </span> : : </a>
-<a name="395"><span class="lineNum"> 395 </span> :<span class="lineNoCov"> 0 : if (details-&gt;presence_det_type == SLOT_PRESENCE_PCI)</span></a>
-<a name="396"><span class="lineNum"> 396 </span> :<span class="lineNoCov"> 0 : dt_add_property(slot, &quot;pci-presence-detect&quot;, NULL, 0);</span></a>
-<a name="397"><span class="lineNum"> 397 </span> : : </a>
-<a name="398"><span class="lineNum"> 398 </span> : : /*</a>
-<a name="399"><span class="lineNum"> 399 </span> : : * specific slot capabilities</a>
-<a name="400"><span class="lineNum"> 400 </span> : : */</a>
-<a name="401"><span class="lineNum"> 401 </span> :<span class="lineNoCov"> 0 : slot_caps = be32_to_cpu(details-&gt;slot_caps);</span></a>
+<a name="395"><span class="lineNum"> 395 </span> : : </a>
+<a name="396"><span class="lineNum"> 396 </span> :<span class="lineNoCov"> 0 : static const struct slot_map_details *find_slot_details(</span></a>
+<a name="397"><span class="lineNum"> 397 </span> : : const struct HDIF_common_hdr *ioslot, int entry)</a>
+<a name="398"><span class="lineNum"> 398 </span> : : {</a>
+<a name="399"><span class="lineNum"> 399 </span> :<span class="lineNoCov"> 0 : const struct slot_map_details *details = NULL;</span></a>
+<a name="400"><span class="lineNum"> 400 </span> : : const struct HDIF_array_hdr *arr;</a>
+<a name="401"><span class="lineNum"> 401 </span> : : unsigned int i;</a>
<a name="402"><span class="lineNum"> 402 </span> : : </a>
-<a name="403"><span class="lineNum"> 403 </span> :<span class="lineNoCov"> 0 : if (slot_caps &amp; SLOT_CAP_LSI)</span></a>
-<a name="404"><span class="lineNum"> 404 </span> :<span class="lineNoCov"> 0 : dt_add_property(slot, &quot;lsi&quot;, NULL, 0);</span></a>
-<a name="405"><span class="lineNum"> 405 </span> : : </a>
-<a name="406"><span class="lineNum"> 406 </span> :<span class="lineNoCov"> 0 : if (slot_caps &amp; SLOT_CAP_CAPI) {</span></a>
-<a name="407"><span class="lineNum"> 407 </span> : : /* XXX: should we be more specific here?</a>
-<a name="408"><span class="lineNum"> 408 </span> : : *</a>
-<a name="409"><span class="lineNum"> 409 </span> : : * Also we should double check that this slot</a>
-<a name="410"><span class="lineNum"> 410 </span> : : * is a root connected slot.</a>
-<a name="411"><span class="lineNum"> 411 </span> : : */</a>
-<a name="412"><span class="lineNum"> 412 </span> :<span class="lineNoCov"> 0 : dt_add_property(slot, &quot;capi&quot;, NULL, 0);</span></a>
-<a name="413"><span class="lineNum"> 413 </span> : : }</a>
-<a name="414"><span class="lineNum"> 414 </span> : : </a>
-<a name="415"><span class="lineNum"> 415 </span> :<span class="lineNoCov"> 0 : if (slot_caps &amp; SLOT_CAP_CCARD) {</span></a>
-<a name="416"><span class="lineNum"> 416 </span> :<span class="lineNoCov"> 0 : dt_add_property(slot, &quot;cable-card&quot;, NULL, 0);</span></a>
-<a name="417"><span class="lineNum"> 417 </span> : : </a>
-<a name="418"><span class="lineNum"> 418 </span> :<span class="lineNoCov"> 0 : if (details-&gt;presence_det_type == SLOT_PRESENCE_I2C)</span></a>
-<a name="419"><span class="lineNum"> 419 </span> :<span class="lineNoCov"> 0 : add_i2c_link(slot, &quot;i2c-presence-detect&quot;,</span></a>
-<a name="420"><span class="lineNum"> 420 </span> : : be32_to_cpu(details-&gt;i2c_cable_card));</a>
-<a name="421"><span class="lineNum"> 421 </span> : : }</a>
+<a name="403"><span class="lineNum"> 403 </span> :<span class="lineNoCov"> 0 : arr = HDIF_get_iarray(ioslot, IOSLOT_IDATA_DETAILS, NULL);</span></a>
+<a name="404"><span class="lineNum"> 404 </span> :<span class="lineNoCov"> 0 : HDIF_iarray_for_each(arr, i, details)</span></a>
+<a name="405"><span class="lineNum"> 405 </span> :<span class="lineNoCov"> 0 : if (be16_to_cpu(details-&gt;entry) == entry)</span></a>
+<a name="406"><span class="lineNum"> 406 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="407"><span class="lineNum"> 407 </span> : : </a>
+<a name="408"><span class="lineNum"> 408 </span> :<span class="lineNoCov"> 0 : return details;</span></a>
+<a name="409"><span class="lineNum"> 409 </span> : : }</a>
+<a name="410"><span class="lineNum"> 410 </span> : : </a>
+<a name="411"><span class="lineNum"> 411 </span> :<span class="lineNoCov"> 0 : static void parse_slot_details(struct dt_node *slot,</span></a>
+<a name="412"><span class="lineNum"> 412 </span> : : const struct slot_map_details *details)</a>
+<a name="413"><span class="lineNum"> 413 </span> : : {</a>
+<a name="414"><span class="lineNum"> 414 </span> : : u32 slot_caps;</a>
+<a name="415"><span class="lineNum"> 415 </span> : : </a>
+<a name="416"><span class="lineNum"> 416 </span> : : /*</a>
+<a name="417"><span class="lineNum"> 417 </span> : : * generic slot options</a>
+<a name="418"><span class="lineNum"> 418 </span> : : */</a>
+<a name="419"><span class="lineNum"> 419 </span> : : </a>
+<a name="420"><span class="lineNum"> 420 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(slot, &quot;max-power&quot;,</span></a>
+<a name="421"><span class="lineNum"> 421 </span> : : be16_to_cpu(details-&gt;max_power));</a>
<a name="422"><span class="lineNum"> 422 </span> : : </a>
-<a name="423"><span class="lineNum"> 423 </span> :<span class="lineNoCov"> 0 : if (slot_caps &amp; SLOT_CAP_HOTPLUG) {</span></a>
-<a name="424"><span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : dt_add_property(slot, &quot;hotplug&quot;, NULL, 0);</span></a>
-<a name="425"><span class="lineNum"> 425 </span> : : </a>
-<a name="426"><span class="lineNum"> 426 </span> : : /*</a>
-<a name="427"><span class="lineNum"> 427 </span> : : * Power control should only exist when the slot is hotplug</a>
-<a name="428"><span class="lineNum"> 428 </span> : : * capable</a>
-<a name="429"><span class="lineNum"> 429 </span> : : */</a>
-<a name="430"><span class="lineNum"> 430 </span> :<span class="lineNoCov"> 0 : if (details-&gt;power_ctrl_type == SLOT_PWR_I2C)</span></a>
-<a name="431"><span class="lineNum"> 431 </span> :<span class="lineNoCov"> 0 : add_i2c_link(slot, &quot;i2c-power-ctrl&quot;,</span></a>
-<a name="432"><span class="lineNum"> 432 </span> : : be32_to_cpu(details-&gt;i2c_power_ctl));</a>
-<a name="433"><span class="lineNum"> 433 </span> : : }</a>
-<a name="434"><span class="lineNum"> 434 </span> : : </a>
-<a name="435"><span class="lineNum"> 435 </span> : : /*</a>
-<a name="436"><span class="lineNum"> 436 </span> : : * NB: Additional NVLink specific info is added to this node</a>
-<a name="437"><span class="lineNum"> 437 </span> : : * when the SMP Link structures are parsed later on.</a>
-<a name="438"><span class="lineNum"> 438 </span> : : */</a>
-<a name="439"><span class="lineNum"> 439 </span> :<span class="lineNoCov"> 0 : if (slot_caps &amp; SLOT_CAP_NVLINK)</span></a>
-<a name="440"><span class="lineNum"> 440 </span> :<span class="lineNoCov"> 0 : dt_add_property(slot, &quot;nvlink&quot;, NULL, 0);</span></a>
-<a name="441"><span class="lineNum"> 441 </span> :<span class="lineNoCov"> 0 : }</span></a>
-<a name="442"><span class="lineNum"> 442 </span> : : </a>
-<a name="443"><span class="lineNum"> 443 </span> :<span class="lineNoCov"> 0 : struct dt_node *find_slot_entry_node(struct dt_node *root, u32 entry_id)</span></a>
-<a name="444"><span class="lineNum"> 444 </span> : : {</a>
-<a name="445"><span class="lineNum"> 445 </span> : : struct dt_node *node;</a>
-<a name="446"><span class="lineNum"> 446 </span> : : </a>
-<a name="447"><span class="lineNum"> 447 </span> :<span class="lineNoCov"> 0 : for (node = dt_first(root); node; node = dt_next(root, node)) {</span></a>
-<a name="448"><span class="lineNum"> 448 </span> :<span class="lineNoCov"> 0 : if (!dt_has_node_property(node, DT_PRIVATE &quot;entry_id&quot;, NULL))</span></a>
-<a name="449"><span class="lineNum"> 449 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="423"><span class="lineNum"> 423 </span> :<span class="lineNoCov"> 0 : if (details-&gt;perst_ctl_type == SLOT_PERST_PHB_OR_SW)</span></a>
+<a name="424"><span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : dt_add_property(slot, &quot;pci-perst&quot;, NULL, 0);</span></a>
+<a name="425"><span class="lineNum"> 425 </span> :<span class="lineNoCov"> 0 : else if (details-&gt;perst_ctl_type == SLOT_PERST_SW_GPIO)</span></a>
+<a name="426"><span class="lineNum"> 426 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(slot, &quot;gpio-perst&quot;, details-&gt;perst_gpio);</span></a>
+<a name="427"><span class="lineNum"> 427 </span> : : </a>
+<a name="428"><span class="lineNum"> 428 </span> :<span class="lineNoCov"> 0 : if (details-&gt;presence_det_type == SLOT_PRESENCE_PCI)</span></a>
+<a name="429"><span class="lineNum"> 429 </span> :<span class="lineNoCov"> 0 : dt_add_property(slot, &quot;pci-presence-detect&quot;, NULL, 0);</span></a>
+<a name="430"><span class="lineNum"> 430 </span> : : </a>
+<a name="431"><span class="lineNum"> 431 </span> : : /*</a>
+<a name="432"><span class="lineNum"> 432 </span> : : * specific slot capabilities</a>
+<a name="433"><span class="lineNum"> 433 </span> : : */</a>
+<a name="434"><span class="lineNum"> 434 </span> :<span class="lineNoCov"> 0 : slot_caps = be32_to_cpu(details-&gt;slot_caps);</span></a>
+<a name="435"><span class="lineNum"> 435 </span> : : </a>
+<a name="436"><span class="lineNum"> 436 </span> :<span class="lineNoCov"> 0 : if (slot_caps &amp; SLOT_CAP_LSI)</span></a>
+<a name="437"><span class="lineNum"> 437 </span> :<span class="lineNoCov"> 0 : dt_add_property(slot, &quot;lsi&quot;, NULL, 0);</span></a>
+<a name="438"><span class="lineNum"> 438 </span> : : </a>
+<a name="439"><span class="lineNum"> 439 </span> :<span class="lineNoCov"> 0 : if (slot_caps &amp; SLOT_CAP_CAPI) {</span></a>
+<a name="440"><span class="lineNum"> 440 </span> : : /* XXX: should we be more specific here?</a>
+<a name="441"><span class="lineNum"> 441 </span> : : *</a>
+<a name="442"><span class="lineNum"> 442 </span> : : * Also we should double check that this slot</a>
+<a name="443"><span class="lineNum"> 443 </span> : : * is a root connected slot.</a>
+<a name="444"><span class="lineNum"> 444 </span> : : */</a>
+<a name="445"><span class="lineNum"> 445 </span> :<span class="lineNoCov"> 0 : dt_add_property(slot, &quot;capi&quot;, NULL, 0);</span></a>
+<a name="446"><span class="lineNum"> 446 </span> : : }</a>
+<a name="447"><span class="lineNum"> 447 </span> : : </a>
+<a name="448"><span class="lineNum"> 448 </span> :<span class="lineNoCov"> 0 : if (slot_caps &amp; SLOT_CAP_CCARD) {</span></a>
+<a name="449"><span class="lineNum"> 449 </span> :<span class="lineNoCov"> 0 : dt_add_property(slot, &quot;cable-card&quot;, NULL, 0);</span></a>
<a name="450"><span class="lineNum"> 450 </span> : : </a>
-<a name="451"><span class="lineNum"> 451 </span> :<span class="lineNoCov"> 0 : if (dt_prop_get_u32(node, DT_PRIVATE &quot;entry_id&quot;) == entry_id)</span></a>
-<a name="452"><span class="lineNum"> 452 </span> :<span class="lineNoCov"> 0 : return node;</span></a>
-<a name="453"><span class="lineNum"> 453 </span> : : }</a>
-<a name="454"><span class="lineNum"> 454 </span> : : </a>
-<a name="455"><span class="lineNum"> 455 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="456"><span class="lineNum"> 456 </span> : : }</a>
-<a name="457"><span class="lineNum"> 457 </span> : : </a>
-<a name="458"><span class="lineNum"> 458 </span> : : /*</a>
-<a name="459"><span class="lineNum"> 459 </span> : : * The internal HDAT representation of the various types of slot is kinda</a>
-<a name="460"><span class="lineNum"> 460 </span> : : * dumb, translate it into something more sensible</a>
-<a name="461"><span class="lineNum"> 461 </span> : : */</a>
-<a name="462"><span class="lineNum"> 462 </span> : : enum slot_types {</a>
-<a name="463"><span class="lineNum"> 463 </span> : : st_root,</a>
-<a name="464"><span class="lineNum"> 464 </span> : : st_slot,</a>
-<a name="465"><span class="lineNum"> 465 </span> : : st_rc_slot,</a>
-<a name="466"><span class="lineNum"> 466 </span> : : st_sw_upstream,</a>
-<a name="467"><span class="lineNum"> 467 </span> : : st_sw_downstream,</a>
-<a name="468"><span class="lineNum"> 468 </span> : : st_builtin</a>
-<a name="469"><span class="lineNum"> 469 </span> : : };</a>
-<a name="470"><span class="lineNum"> 470 </span> : : </a>
-<a name="471"><span class="lineNum"> 471 </span> :<span class="lineNoCov"> 0 : static const char *st_name(enum slot_types type)</span></a>
-<a name="472"><span class="lineNum"> 472 </span> : : {</a>
-<a name="473"><span class="lineNum"> 473 </span> :<span class="lineNoCov"> 0 : switch(type) {</span></a>
-<a name="474"><span class="lineNum"> 474 </span> :<span class="lineNoCov"> 0 : case st_root: return &quot;root-complex&quot;;</span></a>
-<a name="475"><span class="lineNum"> 475 </span> :<span class="lineNoCov"> 0 : case st_slot: return &quot;pluggable&quot;;</span></a>
-<a name="476"><span class="lineNum"> 476 </span> :<span class="lineNoCov"> 0 : case st_rc_slot: return &quot;pluggable&quot;; /* differentiate? */</span></a>
-<a name="477"><span class="lineNum"> 477 </span> :<span class="lineNoCov"> 0 : case st_sw_upstream: return &quot;switch-up&quot;;</span></a>
-<a name="478"><span class="lineNum"> 478 </span> :<span class="lineNoCov"> 0 : case st_sw_downstream: return &quot;switch-down&quot;;</span></a>
-<a name="479"><span class="lineNum"> 479 </span> :<span class="lineNoCov"> 0 : case st_builtin: return &quot;builtin&quot;;</span></a>
-<a name="480"><span class="lineNum"> 480 </span> : : }</a>
-<a name="481"><span class="lineNum"> 481 </span> : : </a>
-<a name="482"><span class="lineNum"> 482 </span> :<span class="lineNoCov"> 0 : return &quot;(none)&quot;;</span></a>
-<a name="483"><span class="lineNum"> 483 </span> : : }</a>
-<a name="484"><span class="lineNum"> 484 </span> : : </a>
-<a name="485"><span class="lineNum"> 485 </span> :<span class="lineNoCov"> 0 : static enum slot_types xlate_type(uint8_t type, u32 features)</span></a>
-<a name="486"><span class="lineNum"> 486 </span> : : {</a>
-<a name="487"><span class="lineNum"> 487 </span> :<span class="lineNoCov"> 0 : bool is_slot = features &amp; SLOT_FEAT_SLOT;</span></a>
-<a name="488"><span class="lineNum"> 488 </span> : : </a>
-<a name="489"><span class="lineNum"> 489 </span> :<span class="lineNoCov"> 0 : switch (type) {</span></a>
-<a name="490"><span class="lineNum"> 490 </span> :<span class="lineNoCov"> 0 : case SLOT_TYPE_ROOT_COMPLEX:</span></a>
-<a name="491"><span class="lineNum"> 491 </span> :<span class="lineNoCov"> 0 : return is_slot ? st_rc_slot : st_root;</span></a>
-<a name="492"><span class="lineNum"> 492 </span> :<span class="lineNoCov"> 0 : case SLOT_TYPE_BUILTIN:</span></a>
-<a name="493"><span class="lineNum"> 493 </span> :<span class="lineNoCov"> 0 : return st_builtin;</span></a>
-<a name="494"><span class="lineNum"> 494 </span> :<span class="lineNoCov"> 0 : case SLOT_TYPE_SWITCH_UP:</span></a>
-<a name="495"><span class="lineNum"> 495 </span> :<span class="lineNoCov"> 0 : return st_sw_upstream;</span></a>
-<a name="496"><span class="lineNum"> 496 </span> :<span class="lineNoCov"> 0 : case SLOT_TYPE_SWITCH_DOWN:</span></a>
-<a name="497"><span class="lineNum"> 497 </span> :<span class="lineNoCov"> 0 : return is_slot ? st_slot : st_sw_downstream;</span></a>
-<a name="498"><span class="lineNum"> 498 </span> : : }</a>
-<a name="499"><span class="lineNum"> 499 </span> : : </a>
-<a name="500"><span class="lineNum"> 500 </span> :<span class="lineNoCov"> 0 : return -1; /* shouldn't happen */</span></a>
-<a name="501"><span class="lineNum"> 501 </span> : : }</a>
-<a name="502"><span class="lineNum"> 502 </span> : : </a>
-<a name="503"><span class="lineNum"> 503 </span> :<span class="lineNoCov"> 0 : static bool is_port(struct dt_node *n)</span></a>
-<a name="504"><span class="lineNum"> 504 </span> : : {</a>
-<a name="505"><span class="lineNum"> 505 </span> : : //return dt_node_is_compatible(n, &quot;compatible&quot;, &quot;ibm,pcie-port&quot;);</a>
-<a name="506"><span class="lineNum"> 506 </span> :<span class="lineNoCov"> 0 : return dt_node_is_compatible(n, &quot;ibm,pcie-port&quot;);</span></a>
-<a name="507"><span class="lineNum"> 507 </span> : : }</a>
-<a name="508"><span class="lineNum"> 508 </span> : : </a>
-<a name="509"><span class="lineNum"> 509 </span> : : /* this only works inside parse_one_ioslot() */</a>
-<a name="510"><span class="lineNum"> 510 </span> : : #define SM_LOG(level, fmt, ...) \</a>
-<a name="511"><span class="lineNum"> 511 </span> : : prlog(level, &quot;SLOTMAP: %x:%d:%d &quot; \</a>
-<a name="512"><span class="lineNum"> 512 </span> : : fmt, /* user input */ \</a>
-<a name="513"><span class="lineNum"> 513 </span> : : chip_id, entry-&gt;phb_index, eid, \</a>
-<a name="514"><span class="lineNum"> 514 </span> : : ##__VA_ARGS__ /* user args */)</a>
-<a name="515"><span class="lineNum"> 515 </span> : : </a>
-<a name="516"><span class="lineNum"> 516 </span> : : #define SM_ERR(fmt, ...) SM_LOG(PR_ERR, fmt, ##__VA_ARGS__)</a>
-<a name="517"><span class="lineNum"> 517 </span> : : #define SM_DBG(fmt, ...) SM_LOG(PR_DEBUG, fmt, ##__VA_ARGS__)</a>
-<a name="518"><span class="lineNum"> 518 </span> : : </a>
-<a name="519"><span class="lineNum"> 519 </span> :<span class="lineNoCov"> 0 : static void parse_one_slot(const struct slot_map_entry *entry,</span></a>
-<a name="520"><span class="lineNum"> 520 </span> : : const struct slot_map_details *details, int chip_id)</a>
-<a name="521"><span class="lineNum"> 521 </span> : : {</a>
-<a name="522"><span class="lineNum"> 522 </span> :<span class="lineNoCov"> 0 : struct dt_node *node, *parent = NULL;</span></a>
-<a name="523"><span class="lineNum"> 523 </span> : : u16 eid, pid, vid, did;</a>
-<a name="524"><span class="lineNum"> 524 </span> : : u32 flags;</a>
-<a name="525"><span class="lineNum"> 525 </span> : : int type;</a>
-<a name="526"><span class="lineNum"> 526 </span> : : </a>
-<a name="527"><span class="lineNum"> 527 </span> :<span class="lineNoCov"> 0 : flags = be32_to_cpu(entry-&gt;features);</span></a>
-<a name="528"><span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : type = xlate_type(entry-&gt;type, flags);</span></a>
-<a name="529"><span class="lineNum"> 529 </span> : : </a>
-<a name="530"><span class="lineNum"> 530 </span> :<span class="lineNoCov"> 0 : eid = be16_to_cpu(entry-&gt;entry_id);</span></a>
-<a name="531"><span class="lineNum"> 531 </span> :<span class="lineNoCov"> 0 : pid = be16_to_cpu(entry-&gt;parent_id);</span></a>
+<a name="451"><span class="lineNum"> 451 </span> :<span class="lineNoCov"> 0 : if (details-&gt;presence_det_type == SLOT_PRESENCE_I2C)</span></a>
+<a name="452"><span class="lineNum"> 452 </span> :<span class="lineNoCov"> 0 : add_i2c_link(slot, &quot;i2c-presence-detect&quot;,</span></a>
+<a name="453"><span class="lineNum"> 453 </span> : : be32_to_cpu(details-&gt;i2c_cable_card));</a>
+<a name="454"><span class="lineNum"> 454 </span> : : }</a>
+<a name="455"><span class="lineNum"> 455 </span> : : </a>
+<a name="456"><span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : if (slot_caps &amp; SLOT_CAP_HOTPLUG) {</span></a>
+<a name="457"><span class="lineNum"> 457 </span> :<span class="lineNoCov"> 0 : dt_add_property(slot, &quot;hotplug&quot;, NULL, 0);</span></a>
+<a name="458"><span class="lineNum"> 458 </span> : : </a>
+<a name="459"><span class="lineNum"> 459 </span> : : /*</a>
+<a name="460"><span class="lineNum"> 460 </span> : : * Power control should only exist when the slot is hotplug</a>
+<a name="461"><span class="lineNum"> 461 </span> : : * capable</a>
+<a name="462"><span class="lineNum"> 462 </span> : : */</a>
+<a name="463"><span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : if (details-&gt;power_ctrl_type == SLOT_PWR_I2C)</span></a>
+<a name="464"><span class="lineNum"> 464 </span> :<span class="lineNoCov"> 0 : add_i2c_link(slot, &quot;i2c-power-ctrl&quot;,</span></a>
+<a name="465"><span class="lineNum"> 465 </span> : : be32_to_cpu(details-&gt;i2c_power_ctl));</a>
+<a name="466"><span class="lineNum"> 466 </span> : : }</a>
+<a name="467"><span class="lineNum"> 467 </span> : : </a>
+<a name="468"><span class="lineNum"> 468 </span> : : /*</a>
+<a name="469"><span class="lineNum"> 469 </span> : : * NB: Additional NVLink specific info is added to this node</a>
+<a name="470"><span class="lineNum"> 470 </span> : : * when the SMP Link structures are parsed later on.</a>
+<a name="471"><span class="lineNum"> 471 </span> : : */</a>
+<a name="472"><span class="lineNum"> 472 </span> :<span class="lineNoCov"> 0 : if (slot_caps &amp; SLOT_CAP_NVLINK)</span></a>
+<a name="473"><span class="lineNum"> 473 </span> :<span class="lineNoCov"> 0 : dt_add_property(slot, &quot;nvlink&quot;, NULL, 0);</span></a>
+<a name="474"><span class="lineNum"> 474 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="475"><span class="lineNum"> 475 </span> : : </a>
+<a name="476"><span class="lineNum"> 476 </span> :<span class="lineNoCov"> 0 : struct dt_node *find_slot_entry_node(struct dt_node *root, u32 entry_id)</span></a>
+<a name="477"><span class="lineNum"> 477 </span> : : {</a>
+<a name="478"><span class="lineNum"> 478 </span> : : struct dt_node *node;</a>
+<a name="479"><span class="lineNum"> 479 </span> : : </a>
+<a name="480"><span class="lineNum"> 480 </span> :<span class="lineNoCov"> 0 : for (node = dt_first(root); node; node = dt_next(root, node)) {</span></a>
+<a name="481"><span class="lineNum"> 481 </span> :<span class="lineNoCov"> 0 : if (!dt_has_node_property(node, DT_PRIVATE &quot;entry_id&quot;, NULL))</span></a>
+<a name="482"><span class="lineNum"> 482 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="483"><span class="lineNum"> 483 </span> : : </a>
+<a name="484"><span class="lineNum"> 484 </span> :<span class="lineNoCov"> 0 : if (dt_prop_get_u32(node, DT_PRIVATE &quot;entry_id&quot;) == entry_id)</span></a>
+<a name="485"><span class="lineNum"> 485 </span> :<span class="lineNoCov"> 0 : return node;</span></a>
+<a name="486"><span class="lineNum"> 486 </span> : : }</a>
+<a name="487"><span class="lineNum"> 487 </span> : : </a>
+<a name="488"><span class="lineNum"> 488 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="489"><span class="lineNum"> 489 </span> : : }</a>
+<a name="490"><span class="lineNum"> 490 </span> : : </a>
+<a name="491"><span class="lineNum"> 491 </span> : : /*</a>
+<a name="492"><span class="lineNum"> 492 </span> : : * The internal HDAT representation of the various types of slot is kinda</a>
+<a name="493"><span class="lineNum"> 493 </span> : : * dumb, translate it into something more sensible</a>
+<a name="494"><span class="lineNum"> 494 </span> : : */</a>
+<a name="495"><span class="lineNum"> 495 </span> : : enum slot_types {</a>
+<a name="496"><span class="lineNum"> 496 </span> : : st_root,</a>
+<a name="497"><span class="lineNum"> 497 </span> : : st_slot,</a>
+<a name="498"><span class="lineNum"> 498 </span> : : st_rc_slot,</a>
+<a name="499"><span class="lineNum"> 499 </span> : : st_sw_upstream,</a>
+<a name="500"><span class="lineNum"> 500 </span> : : st_sw_downstream,</a>
+<a name="501"><span class="lineNum"> 501 </span> : : st_builtin</a>
+<a name="502"><span class="lineNum"> 502 </span> : : };</a>
+<a name="503"><span class="lineNum"> 503 </span> : : </a>
+<a name="504"><span class="lineNum"> 504 </span> :<span class="lineNoCov"> 0 : static const char *st_name(enum slot_types type)</span></a>
+<a name="505"><span class="lineNum"> 505 </span> : : {</a>
+<a name="506"><span class="lineNum"> 506 </span> :<span class="lineNoCov"> 0 : switch(type) {</span></a>
+<a name="507"><span class="lineNum"> 507 </span> :<span class="lineNoCov"> 0 : case st_root: return &quot;root-complex&quot;;</span></a>
+<a name="508"><span class="lineNum"> 508 </span> :<span class="lineNoCov"> 0 : case st_slot: return &quot;pluggable&quot;;</span></a>
+<a name="509"><span class="lineNum"> 509 </span> :<span class="lineNoCov"> 0 : case st_rc_slot: return &quot;pluggable&quot;; /* differentiate? */</span></a>
+<a name="510"><span class="lineNum"> 510 </span> :<span class="lineNoCov"> 0 : case st_sw_upstream: return &quot;switch-up&quot;;</span></a>
+<a name="511"><span class="lineNum"> 511 </span> :<span class="lineNoCov"> 0 : case st_sw_downstream: return &quot;switch-down&quot;;</span></a>
+<a name="512"><span class="lineNum"> 512 </span> :<span class="lineNoCov"> 0 : case st_builtin: return &quot;builtin&quot;;</span></a>
+<a name="513"><span class="lineNum"> 513 </span> : : }</a>
+<a name="514"><span class="lineNum"> 514 </span> : : </a>
+<a name="515"><span class="lineNum"> 515 </span> :<span class="lineNoCov"> 0 : return &quot;(none)&quot;;</span></a>
+<a name="516"><span class="lineNum"> 516 </span> : : }</a>
+<a name="517"><span class="lineNum"> 517 </span> : : </a>
+<a name="518"><span class="lineNum"> 518 </span> :<span class="lineNoCov"> 0 : static enum slot_types xlate_type(uint8_t type, u32 features)</span></a>
+<a name="519"><span class="lineNum"> 519 </span> : : {</a>
+<a name="520"><span class="lineNum"> 520 </span> :<span class="lineNoCov"> 0 : bool is_slot = features &amp; SLOT_FEAT_SLOT;</span></a>
+<a name="521"><span class="lineNum"> 521 </span> : : </a>
+<a name="522"><span class="lineNum"> 522 </span> :<span class="lineNoCov"> 0 : switch (type) {</span></a>
+<a name="523"><span class="lineNum"> 523 </span> :<span class="lineNoCov"> 0 : case SLOT_TYPE_ROOT_COMPLEX:</span></a>
+<a name="524"><span class="lineNum"> 524 </span> :<span class="lineNoCov"> 0 : return is_slot ? st_rc_slot : st_root;</span></a>
+<a name="525"><span class="lineNum"> 525 </span> :<span class="lineNoCov"> 0 : case SLOT_TYPE_BUILTIN:</span></a>
+<a name="526"><span class="lineNum"> 526 </span> :<span class="lineNoCov"> 0 : return st_builtin;</span></a>
+<a name="527"><span class="lineNum"> 527 </span> :<span class="lineNoCov"> 0 : case SLOT_TYPE_SWITCH_UP:</span></a>
+<a name="528"><span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : return st_sw_upstream;</span></a>
+<a name="529"><span class="lineNum"> 529 </span> :<span class="lineNoCov"> 0 : case SLOT_TYPE_SWITCH_DOWN:</span></a>
+<a name="530"><span class="lineNum"> 530 </span> :<span class="lineNoCov"> 0 : return is_slot ? st_slot : st_sw_downstream;</span></a>
+<a name="531"><span class="lineNum"> 531 </span> : : }</a>
<a name="532"><span class="lineNum"> 532 </span> : : </a>
-<a name="533"><span class="lineNum"> 533 </span> :<span class="lineNoCov"> 0 : SM_DBG(&quot;%s - eid = %d, pid = %d, name = %8s\n&quot;,</span></a>
-<a name="534"><span class="lineNum"> 534 </span> : : st_name(type), eid, pid,</a>
-<a name="535"><span class="lineNum"> 535 </span> : : strnlen(entry-&gt;name, 8) ? entry-&gt;name : &quot;&quot;);</a>
-<a name="536"><span class="lineNum"> 536 </span> : : </a>
-<a name="537"><span class="lineNum"> 537 </span> : : /* empty slot, ignore it */</a>
-<a name="538"><span class="lineNum"> 538 </span> :<span class="lineNoCov"> 0 : if (eid == 0x0 &amp;&amp; pid == 0x0)</span></a>
-<a name="539"><span class="lineNum"> 539 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="540"><span class="lineNum"> 540 </span> : : </a>
-<a name="541"><span class="lineNum"> 541 </span> :<span class="lineNoCov"> 0 : if (type != st_root &amp;&amp; type != st_rc_slot) {</span></a>
-<a name="542"><span class="lineNum"> 542 </span> :<span class="lineNoCov"> 0 : parent = find_slot_entry_node(dt_slots, pid);</span></a>
-<a name="543"><span class="lineNum"> 543 </span> :<span class="lineNoCov"> 0 : if (!parent) {</span></a>
-<a name="544"><span class="lineNum"> 544 </span> :<span class="lineNoCov"> 0 : SM_ERR(&quot;Unable to find node for parent slot (id = %d)\n&quot;,</span></a>
-<a name="545"><span class="lineNum"> 545 </span> : : pid);</a>
-<a name="546"><span class="lineNum"> 546 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="547"><span class="lineNum"> 547 </span> : : }</a>
-<a name="548"><span class="lineNum"> 548 </span> : : }</a>
-<a name="549"><span class="lineNum"> 549 </span> : : </a>
-<a name="550"><span class="lineNum"> 550 </span> :<span class="lineNoCov"> 0 : switch (type) {</span></a>
-<a name="551"><span class="lineNum"> 551 </span> :<span class="lineNoCov"> 0 : case st_root:</span></a>
-<a name="552"><span class="lineNum"> 552 </span> : : case st_rc_slot:</a>
-<a name="553"><span class="lineNum"> 553 </span> :<span class="lineNoCov"> 0 : node = dt_new_2addr(dt_slots, &quot;root-complex&quot;,</span></a>
-<a name="554"><span class="lineNum"> 554 </span> :<span class="lineNoCov"> 0 : chip_id, entry-&gt;phb_index);</span></a>
-<a name="555"><span class="lineNum"> 555 </span> :<span class="lineNoCov"> 0 : if (!node) {</span></a>
-<a name="556"><span class="lineNum"> 556 </span> :<span class="lineNoCov"> 0 : SM_ERR(&quot;Couldn't add DT node\n&quot;);</span></a>
-<a name="557"><span class="lineNum"> 557 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="558"><span class="lineNum"> 558 </span> : : }</a>
-<a name="559"><span class="lineNum"> 559 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;reg&quot;, chip_id, entry-&gt;phb_index);</span></a>
-<a name="560"><span class="lineNum"> 560 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;#address-cells&quot;, 2);</span></a>
-<a name="561"><span class="lineNum"> 561 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;#size-cells&quot;, 0);</span></a>
-<a name="562"><span class="lineNum"> 562 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(node, &quot;compatible&quot;,</span></a>
-<a name="563"><span class="lineNum"> 563 </span> : : &quot;ibm,pcie-port&quot;, &quot;ibm,pcie-root-port&quot;);</a>
-<a name="564"><span class="lineNum"> 564 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;ibm,chip-id&quot;, chip_id);</span></a>
-<a name="565"><span class="lineNum"> 565 </span> :<span class="lineNoCov"> 0 : parent = node;</span></a>
-<a name="566"><span class="lineNum"> 566 </span> : : </a>
-<a name="567"><span class="lineNum"> 567 </span> : : /*</a>
-<a name="568"><span class="lineNum"> 568 </span> : : * The representation of slots attached directly to the</a>
-<a name="569"><span class="lineNum"> 569 </span> : : * root complex is a bit wierd. If this is just a root</a>
-<a name="570"><span class="lineNum"> 570 </span> : : * complex then stop here, otherwise fall through to create</a>
-<a name="571"><span class="lineNum"> 571 </span> : : * the slot node.</a>
-<a name="572"><span class="lineNum"> 572 </span> : : */</a>
-<a name="573"><span class="lineNum"> 573 </span> :<span class="lineNoCov"> 0 : if (type == st_root)</span></a>
-<a name="574"><span class="lineNum"> 574 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="575"><span class="lineNum"> 575 </span> : : </a>
-<a name="576"><span class="lineNum"> 576 </span> : : /* fallthrough*/</a>
-<a name="577"><span class="lineNum"> 577 </span> : : case st_sw_upstream:</a>
-<a name="578"><span class="lineNum"> 578 </span> : : case st_builtin:</a>
-<a name="579"><span class="lineNum"> 579 </span> : : case st_slot:</a>
-<a name="580"><span class="lineNum"> 580 </span> :<span class="lineNoCov"> 0 : if (!is_port(parent)) {</span></a>
-<a name="581"><span class="lineNum"> 581 </span> :<span class="lineNoCov"> 0 : SM_ERR(&quot;%s connected to %s (%d), should be %s or %s!\n&quot;,</span></a>
-<a name="582"><span class="lineNum"> 582 </span> : : st_name(type), parent-&gt;name, pid,</a>
-<a name="583"><span class="lineNum"> 583 </span> : : st_name(st_root), st_name(st_sw_downstream));</a>
-<a name="584"><span class="lineNum"> 584 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="585"><span class="lineNum"> 585 </span> : : }</a>
-<a name="586"><span class="lineNum"> 586 </span> : : </a>
-<a name="587"><span class="lineNum"> 587 </span> :<span class="lineNoCov"> 0 : vid = (be32_to_cpu(entry-&gt;vendor_id) &amp; 0xffff);</span></a>
-<a name="588"><span class="lineNum"> 588 </span> :<span class="lineNoCov"> 0 : did = (be32_to_cpu(entry-&gt;device_id) &amp; 0xffff);</span></a>
-<a name="589"><span class="lineNum"> 589 </span> : : </a>
-<a name="590"><span class="lineNum"> 590 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;Found %s slot with %x:%x\n&quot;,</span></a>
-<a name="591"><span class="lineNum"> 591 </span> : : st_name(type), vid, did);</a>
-<a name="592"><span class="lineNum"> 592 </span> : : </a>
-<a name="593"><span class="lineNum"> 593 </span> : : /* The VID:DID is only meaningful for builtins and switches */</a>
-<a name="594"><span class="lineNum"> 594 </span> :<span class="lineNoCov"> 0 : if (type == st_sw_upstream &amp;&amp; vid &amp;&amp; did) {</span></a>
-<a name="595"><span class="lineNum"> 595 </span> :<span class="lineNoCov"> 0 : node = dt_new_2addr(parent, st_name(type), vid, did);</span></a>
-<a name="596"><span class="lineNum"> 596 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;reg&quot;, vid, did);</span></a>
-<a name="597"><span class="lineNum"> 597 </span> : : } else {</a>
-<a name="598"><span class="lineNum"> 598 </span> : : /*</a>
-<a name="599"><span class="lineNum"> 599 </span> : : * If we get no vdid then create a &quot;wildcard&quot; slot</a>
-<a name="600"><span class="lineNum"> 600 </span> : : * that matches any device</a>
-<a name="601"><span class="lineNum"> 601 </span> : : */</a>
-<a name="602"><span class="lineNum"> 602 </span> :<span class="lineNoCov"> 0 : node = dt_new(parent, st_name(type));</span></a>
-<a name="603"><span class="lineNum"> 603 </span> : : }</a>
-<a name="604"><span class="lineNum"> 604 </span> : : </a>
-<a name="605"><span class="lineNum"> 605 </span> :<span class="lineNoCov"> 0 : if (type == st_sw_upstream) {</span></a>
-<a name="606"><span class="lineNum"> 606 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;#address-cells&quot;, 1);</span></a>
-<a name="607"><span class="lineNum"> 607 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;#size-cells&quot;, 0);</span></a>
-<a name="608"><span class="lineNum"> 608 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;upstream-port&quot;,</span></a>
-<a name="609"><span class="lineNum"> 609 </span> : : entry-&gt;up_port);</a>
-<a name="610"><span class="lineNum"> 610 </span> : : }</a>
-<a name="611"><span class="lineNum"> 611 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="612"><span class="lineNum"> 612 </span> : : </a>
-<a name="613"><span class="lineNum"> 613 </span> :<span class="lineNoCov"> 0 : case st_sw_downstream: /* slot connected to switch output */</span></a>
-<a name="614"><span class="lineNum"> 614 </span> :<span class="lineNoCov"> 0 : node = dt_new_addr(parent, &quot;down-port&quot;, entry-&gt;down_port);</span></a>
-<a name="615"><span class="lineNum"> 615 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(node, &quot;compatible&quot;,</span></a>
-<a name="616"><span class="lineNum"> 616 </span> : : &quot;ibm,pcie-port&quot;);</a>
-<a name="617"><span class="lineNum"> 617 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;reg&quot;, entry-&gt;down_port);</span></a>
-<a name="618"><span class="lineNum"> 618 </span> : : </a>
-<a name="619"><span class="lineNum"> 619 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="620"><span class="lineNum"> 620 </span> : : </a>
-<a name="621"><span class="lineNum"> 621 </span> :<span class="lineNoCov"> 0 : default:</span></a>
-<a name="622"><span class="lineNum"> 622 </span> :<span class="lineNoCov"> 0 : SM_ERR(&quot;Unknown slot map type %x\n&quot;, entry-&gt;type);</span></a>
-<a name="623"><span class="lineNum"> 623 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="624"><span class="lineNum"> 624 </span> : : }</a>
+<a name="533"><span class="lineNum"> 533 </span> :<span class="lineNoCov"> 0 : return -1; /* shouldn't happen */</span></a>
+<a name="534"><span class="lineNum"> 534 </span> : : }</a>
+<a name="535"><span class="lineNum"> 535 </span> : : </a>
+<a name="536"><span class="lineNum"> 536 </span> :<span class="lineNoCov"> 0 : static bool is_port(struct dt_node *n)</span></a>
+<a name="537"><span class="lineNum"> 537 </span> : : {</a>
+<a name="538"><span class="lineNum"> 538 </span> : : //return dt_node_is_compatible(n, &quot;compatible&quot;, &quot;ibm,pcie-port&quot;);</a>
+<a name="539"><span class="lineNum"> 539 </span> :<span class="lineNoCov"> 0 : return dt_node_is_compatible(n, &quot;ibm,pcie-port&quot;);</span></a>
+<a name="540"><span class="lineNum"> 540 </span> : : }</a>
+<a name="541"><span class="lineNum"> 541 </span> : : </a>
+<a name="542"><span class="lineNum"> 542 </span> : : /* this only works inside parse_one_ioslot() */</a>
+<a name="543"><span class="lineNum"> 543 </span> : : #define SM_LOG(level, fmt, ...) \</a>
+<a name="544"><span class="lineNum"> 544 </span> : : prlog(level, &quot;SLOTMAP: %x:%d:%d &quot; \</a>
+<a name="545"><span class="lineNum"> 545 </span> : : fmt, /* user input */ \</a>
+<a name="546"><span class="lineNum"> 546 </span> : : chip_id, entry-&gt;phb_index, eid, \</a>
+<a name="547"><span class="lineNum"> 547 </span> : : ##__VA_ARGS__ /* user args */)</a>
+<a name="548"><span class="lineNum"> 548 </span> : : </a>
+<a name="549"><span class="lineNum"> 549 </span> : : #define SM_ERR(fmt, ...) SM_LOG(PR_ERR, fmt, ##__VA_ARGS__)</a>
+<a name="550"><span class="lineNum"> 550 </span> : : #define SM_DBG(fmt, ...) SM_LOG(PR_DEBUG, fmt, ##__VA_ARGS__)</a>
+<a name="551"><span class="lineNum"> 551 </span> : : </a>
+<a name="552"><span class="lineNum"> 552 </span> :<span class="lineNoCov"> 0 : static void parse_one_slot(const struct slot_map_entry *entry,</span></a>
+<a name="553"><span class="lineNum"> 553 </span> : : const struct slot_map_details *details, int chip_id)</a>
+<a name="554"><span class="lineNum"> 554 </span> : : {</a>
+<a name="555"><span class="lineNum"> 555 </span> :<span class="lineNoCov"> 0 : struct dt_node *node, *parent = NULL;</span></a>
+<a name="556"><span class="lineNum"> 556 </span> : : u16 eid, pid, vid, did;</a>
+<a name="557"><span class="lineNum"> 557 </span> : : u32 flags;</a>
+<a name="558"><span class="lineNum"> 558 </span> : : int type;</a>
+<a name="559"><span class="lineNum"> 559 </span> : : </a>
+<a name="560"><span class="lineNum"> 560 </span> :<span class="lineNoCov"> 0 : flags = be32_to_cpu(entry-&gt;features);</span></a>
+<a name="561"><span class="lineNum"> 561 </span> :<span class="lineNoCov"> 0 : type = xlate_type(entry-&gt;type, flags);</span></a>
+<a name="562"><span class="lineNum"> 562 </span> : : </a>
+<a name="563"><span class="lineNum"> 563 </span> :<span class="lineNoCov"> 0 : eid = be16_to_cpu(entry-&gt;entry_id);</span></a>
+<a name="564"><span class="lineNum"> 564 </span> :<span class="lineNoCov"> 0 : pid = be16_to_cpu(entry-&gt;parent_id);</span></a>
+<a name="565"><span class="lineNum"> 565 </span> : : </a>
+<a name="566"><span class="lineNum"> 566 </span> :<span class="lineNoCov"> 0 : SM_DBG(&quot;%s - eid = %d, pid = %d, name = %8s\n&quot;,</span></a>
+<a name="567"><span class="lineNum"> 567 </span> : : st_name(type), eid, pid,</a>
+<a name="568"><span class="lineNum"> 568 </span> : : strnlen(entry-&gt;name, 8) ? entry-&gt;name : &quot;&quot;);</a>
+<a name="569"><span class="lineNum"> 569 </span> : : </a>
+<a name="570"><span class="lineNum"> 570 </span> : : /* empty slot, ignore it */</a>
+<a name="571"><span class="lineNum"> 571 </span> :<span class="lineNoCov"> 0 : if (eid == 0x0 &amp;&amp; pid == 0x0)</span></a>
+<a name="572"><span class="lineNum"> 572 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="573"><span class="lineNum"> 573 </span> : : </a>
+<a name="574"><span class="lineNum"> 574 </span> :<span class="lineNoCov"> 0 : if (type != st_root &amp;&amp; type != st_rc_slot) {</span></a>
+<a name="575"><span class="lineNum"> 575 </span> :<span class="lineNoCov"> 0 : parent = find_slot_entry_node(dt_slots, pid);</span></a>
+<a name="576"><span class="lineNum"> 576 </span> :<span class="lineNoCov"> 0 : if (!parent) {</span></a>
+<a name="577"><span class="lineNum"> 577 </span> :<span class="lineNoCov"> 0 : SM_ERR(&quot;Unable to find node for parent slot (id = %d)\n&quot;,</span></a>
+<a name="578"><span class="lineNum"> 578 </span> : : pid);</a>
+<a name="579"><span class="lineNum"> 579 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="580"><span class="lineNum"> 580 </span> : : }</a>
+<a name="581"><span class="lineNum"> 581 </span> : : }</a>
+<a name="582"><span class="lineNum"> 582 </span> : : </a>
+<a name="583"><span class="lineNum"> 583 </span> :<span class="lineNoCov"> 0 : switch (type) {</span></a>
+<a name="584"><span class="lineNum"> 584 </span> :<span class="lineNoCov"> 0 : case st_root:</span></a>
+<a name="585"><span class="lineNum"> 585 </span> : : case st_rc_slot:</a>
+<a name="586"><span class="lineNum"> 586 </span> :<span class="lineNoCov"> 0 : node = dt_new_2addr(dt_slots, &quot;root-complex&quot;,</span></a>
+<a name="587"><span class="lineNum"> 587 </span> :<span class="lineNoCov"> 0 : chip_id, entry-&gt;phb_index);</span></a>
+<a name="588"><span class="lineNum"> 588 </span> :<span class="lineNoCov"> 0 : if (!node) {</span></a>
+<a name="589"><span class="lineNum"> 589 </span> :<span class="lineNoCov"> 0 : SM_ERR(&quot;Couldn't add DT node\n&quot;);</span></a>
+<a name="590"><span class="lineNum"> 590 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="591"><span class="lineNum"> 591 </span> : : }</a>
+<a name="592"><span class="lineNum"> 592 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;reg&quot;, chip_id, entry-&gt;phb_index);</span></a>
+<a name="593"><span class="lineNum"> 593 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;#address-cells&quot;, 2);</span></a>
+<a name="594"><span class="lineNum"> 594 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;#size-cells&quot;, 0);</span></a>
+<a name="595"><span class="lineNum"> 595 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(node, &quot;compatible&quot;,</span></a>
+<a name="596"><span class="lineNum"> 596 </span> : : &quot;ibm,pcie-port&quot;, &quot;ibm,pcie-root-port&quot;);</a>
+<a name="597"><span class="lineNum"> 597 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;ibm,chip-id&quot;, chip_id);</span></a>
+<a name="598"><span class="lineNum"> 598 </span> :<span class="lineNoCov"> 0 : parent = node;</span></a>
+<a name="599"><span class="lineNum"> 599 </span> : : </a>
+<a name="600"><span class="lineNum"> 600 </span> : : /*</a>
+<a name="601"><span class="lineNum"> 601 </span> : : * The representation of slots attached directly to the</a>
+<a name="602"><span class="lineNum"> 602 </span> : : * root complex is a bit wierd. If this is just a root</a>
+<a name="603"><span class="lineNum"> 603 </span> : : * complex then stop here, otherwise fall through to create</a>
+<a name="604"><span class="lineNum"> 604 </span> : : * the slot node.</a>
+<a name="605"><span class="lineNum"> 605 </span> : : */</a>
+<a name="606"><span class="lineNum"> 606 </span> :<span class="lineNoCov"> 0 : if (type == st_root)</span></a>
+<a name="607"><span class="lineNum"> 607 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="608"><span class="lineNum"> 608 </span> : : </a>
+<a name="609"><span class="lineNum"> 609 </span> : : /* fallthrough*/</a>
+<a name="610"><span class="lineNum"> 610 </span> : : case st_sw_upstream:</a>
+<a name="611"><span class="lineNum"> 611 </span> : : case st_builtin:</a>
+<a name="612"><span class="lineNum"> 612 </span> : : case st_slot:</a>
+<a name="613"><span class="lineNum"> 613 </span> :<span class="lineNoCov"> 0 : if (!is_port(parent)) {</span></a>
+<a name="614"><span class="lineNum"> 614 </span> :<span class="lineNoCov"> 0 : SM_ERR(&quot;%s connected to %s (%d), should be %s or %s!\n&quot;,</span></a>
+<a name="615"><span class="lineNum"> 615 </span> : : st_name(type), parent-&gt;name, pid,</a>
+<a name="616"><span class="lineNum"> 616 </span> : : st_name(st_root), st_name(st_sw_downstream));</a>
+<a name="617"><span class="lineNum"> 617 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="618"><span class="lineNum"> 618 </span> : : }</a>
+<a name="619"><span class="lineNum"> 619 </span> : : </a>
+<a name="620"><span class="lineNum"> 620 </span> :<span class="lineNoCov"> 0 : vid = (be32_to_cpu(entry-&gt;vendor_id) &amp; 0xffff);</span></a>
+<a name="621"><span class="lineNum"> 621 </span> :<span class="lineNoCov"> 0 : did = (be32_to_cpu(entry-&gt;device_id) &amp; 0xffff);</span></a>
+<a name="622"><span class="lineNum"> 622 </span> : : </a>
+<a name="623"><span class="lineNum"> 623 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;Found %s slot with %x:%x\n&quot;,</span></a>
+<a name="624"><span class="lineNum"> 624 </span> : : st_name(type), vid, did);</a>
<a name="625"><span class="lineNum"> 625 </span> : : </a>
-<a name="626"><span class="lineNum"> 626 </span> : : /*</a>
-<a name="627"><span class="lineNum"> 627 </span> : : * Now add any generic slot map properties.</a>
-<a name="628"><span class="lineNum"> 628 </span> : : */</a>
-<a name="629"><span class="lineNum"> 629 </span> : : </a>
-<a name="630"><span class="lineNum"> 630 </span> : : /* private since we don't want hdat stuff leaking */</a>
-<a name="631"><span class="lineNum"> 631 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, DT_PRIVATE &quot;entry_id&quot;, eid);</span></a>
-<a name="632"><span class="lineNum"> 632 </span> : : </a>
-<a name="633"><span class="lineNum"> 633 </span> :<span class="lineNoCov"> 0 : if (entry-&gt;mrw_slot_id)</span></a>
-<a name="634"><span class="lineNum"> 634 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;mrw-slot-id&quot;,</span></a>
-<a name="635"><span class="lineNum"> 635 </span> : : be16_to_cpu(entry-&gt;mrw_slot_id));</a>
-<a name="636"><span class="lineNum"> 636 </span> : : </a>
-<a name="637"><span class="lineNum"> 637 </span> :<span class="lineNoCov"> 0 : if (entry-&gt;lane_mask)</span></a>
-<a name="638"><span class="lineNum"> 638 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;lane-mask&quot;,</span></a>
-<a name="639"><span class="lineNum"> 639 </span> : : be16_to_cpu(entry-&gt;lane_mask));</a>
-<a name="640"><span class="lineNum"> 640 </span> : : </a>
-<a name="641"><span class="lineNum"> 641 </span> : : /* what is the difference between this and the lane reverse? */</a>
-<a name="642"><span class="lineNum"> 642 </span> :<span class="lineNoCov"> 0 : if (entry-&gt;lane_reverse)</span></a>
-<a name="643"><span class="lineNum"> 643 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;lanes-reversed&quot;,</span></a>
-<a name="644"><span class="lineNum"> 644 </span> : : be16_to_cpu(entry-&gt;lane_reverse));</a>
+<a name="626"><span class="lineNum"> 626 </span> : : /* The VID:DID is only meaningful for builtins and switches */</a>
+<a name="627"><span class="lineNum"> 627 </span> :<span class="lineNoCov"> 0 : if (type == st_sw_upstream &amp;&amp; vid &amp;&amp; did) {</span></a>
+<a name="628"><span class="lineNum"> 628 </span> :<span class="lineNoCov"> 0 : node = dt_new_2addr(parent, st_name(type), vid, did);</span></a>
+<a name="629"><span class="lineNum"> 629 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;reg&quot;, vid, did);</span></a>
+<a name="630"><span class="lineNum"> 630 </span> : : } else {</a>
+<a name="631"><span class="lineNum"> 631 </span> : : /*</a>
+<a name="632"><span class="lineNum"> 632 </span> : : * If we get no vdid then create a &quot;wildcard&quot; slot</a>
+<a name="633"><span class="lineNum"> 633 </span> : : * that matches any device</a>
+<a name="634"><span class="lineNum"> 634 </span> : : */</a>
+<a name="635"><span class="lineNum"> 635 </span> :<span class="lineNoCov"> 0 : node = dt_new(parent, st_name(type));</span></a>
+<a name="636"><span class="lineNum"> 636 </span> : : }</a>
+<a name="637"><span class="lineNum"> 637 </span> : : </a>
+<a name="638"><span class="lineNum"> 638 </span> :<span class="lineNoCov"> 0 : if (type == st_sw_upstream) {</span></a>
+<a name="639"><span class="lineNum"> 639 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;#address-cells&quot;, 1);</span></a>
+<a name="640"><span class="lineNum"> 640 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;#size-cells&quot;, 0);</span></a>
+<a name="641"><span class="lineNum"> 641 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;upstream-port&quot;,</span></a>
+<a name="642"><span class="lineNum"> 642 </span> : : entry-&gt;up_port);</a>
+<a name="643"><span class="lineNum"> 643 </span> : : }</a>
+<a name="644"><span class="lineNum"> 644 </span> :<span class="lineNoCov"> 0 : break;</span></a>
<a name="645"><span class="lineNum"> 645 </span> : : </a>
-<a name="646"><span class="lineNum"> 646 </span> :<span class="lineNoCov"> 0 : if (strnlen(entry-&gt;name, sizeof(entry-&gt;name))) {</span></a>
-<a name="647"><span class="lineNum"> 647 </span> : : /*</a>
-<a name="648"><span class="lineNum"> 648 </span> : : * HACK: On some platforms (witherspoon) the slot label is</a>
-<a name="649"><span class="lineNum"> 649 </span> : : * applied to the device rather than the pcie downstream port</a>
-<a name="650"><span class="lineNum"> 650 </span> : : * that has the slot under it. Hack around this by moving the</a>
-<a name="651"><span class="lineNum"> 651 </span> : : * slot label up if the parent port doesn't have one.</a>
-<a name="652"><span class="lineNum"> 652 </span> : : */</a>
-<a name="653"><span class="lineNum"> 653 </span> :<span class="lineNoCov"> 0 : if (dt_node_is_compatible(node-&gt;parent, &quot;ibm,pcie-port&quot;) &amp;&amp;</span></a>
-<a name="654"><span class="lineNum"> 654 </span> :<span class="lineNoCov"> 0 : !dt_find_property(node-&gt;parent, &quot;ibm,slot-label&quot;)) {</span></a>
-<a name="655"><span class="lineNum"> 655 </span> :<span class="lineNoCov"> 0 : dt_add_property_nstr(node-&gt;parent, &quot;ibm,slot-label&quot;,</span></a>
-<a name="656"><span class="lineNum"> 656 </span> :<span class="lineNoCov"> 0 : entry-&gt;name, sizeof(entry-&gt;name));</span></a>
-<a name="657"><span class="lineNum"> 657 </span> : : }</a>
+<a name="646"><span class="lineNum"> 646 </span> :<span class="lineNoCov"> 0 : case st_sw_downstream: /* slot connected to switch output */</span></a>
+<a name="647"><span class="lineNum"> 647 </span> :<span class="lineNoCov"> 0 : node = dt_new_addr(parent, &quot;down-port&quot;, entry-&gt;down_port);</span></a>
+<a name="648"><span class="lineNum"> 648 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(node, &quot;compatible&quot;,</span></a>
+<a name="649"><span class="lineNum"> 649 </span> : : &quot;ibm,pcie-port&quot;);</a>
+<a name="650"><span class="lineNum"> 650 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;reg&quot;, entry-&gt;down_port);</span></a>
+<a name="651"><span class="lineNum"> 651 </span> : : </a>
+<a name="652"><span class="lineNum"> 652 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="653"><span class="lineNum"> 653 </span> : : </a>
+<a name="654"><span class="lineNum"> 654 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="655"><span class="lineNum"> 655 </span> :<span class="lineNoCov"> 0 : SM_ERR(&quot;Unknown slot map type %x\n&quot;, entry-&gt;type);</span></a>
+<a name="656"><span class="lineNum"> 656 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="657"><span class="lineNum"> 657 </span> : : }</a>
<a name="658"><span class="lineNum"> 658 </span> : : </a>
-<a name="659"><span class="lineNum"> 659 </span> :<span class="lineNoCov"> 0 : dt_add_property_nstr(node, &quot;ibm,slot-label&quot;,</span></a>
-<a name="660"><span class="lineNum"> 660 </span> :<span class="lineNoCov"> 0 : entry-&gt;name, sizeof(entry-&gt;name));</span></a>
-<a name="661"><span class="lineNum"> 661 </span> : : }</a>
+<a name="659"><span class="lineNum"> 659 </span> : : /*</a>
+<a name="660"><span class="lineNum"> 660 </span> : : * Now add any generic slot map properties.</a>
+<a name="661"><span class="lineNum"> 661 </span> : : */</a>
<a name="662"><span class="lineNum"> 662 </span> : : </a>
-<a name="663"><span class="lineNum"> 663 </span> :<span class="lineNoCov"> 0 : if (entry-&gt;type == st_slot || entry-&gt;type == st_rc_slot)</span></a>
-<a name="664"><span class="lineNum"> 664 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;ibm,pluggable&quot;, NULL, 0);</span></a>
+<a name="663"><span class="lineNum"> 663 </span> : : /* private since we don't want hdat stuff leaking */</a>
+<a name="664"><span class="lineNum"> 664 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, DT_PRIVATE &quot;entry_id&quot;, eid);</span></a>
<a name="665"><span class="lineNum"> 665 </span> : : </a>
-<a name="666"><span class="lineNum"> 666 </span> :<span class="lineNoCov"> 0 : if (details)</span></a>
-<a name="667"><span class="lineNum"> 667 </span> :<span class="lineNoCov"> 0 : parse_slot_details(node, details);</span></a>
-<a name="668"><span class="lineNum"> 668 </span> : : }</a>
+<a name="666"><span class="lineNum"> 666 </span> :<span class="lineNoCov"> 0 : if (entry-&gt;mrw_slot_id)</span></a>
+<a name="667"><span class="lineNum"> 667 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;mrw-slot-id&quot;,</span></a>
+<a name="668"><span class="lineNum"> 668 </span> : : be16_to_cpu(entry-&gt;mrw_slot_id));</a>
<a name="669"><span class="lineNum"> 669 </span> : : </a>
-<a name="670"><span class="lineNum"> 670 </span> : : /*</a>
-<a name="671"><span class="lineNum"> 671 </span> : : * Under the IOHUB structure we have and idata array describing</a>
-<a name="672"><span class="lineNum"> 672 </span> : : * the PHBs under each chip. The IOHUB structure also has a child</a>
-<a name="673"><span class="lineNum"> 673 </span> : : * array called IOSLOT which describes slot map. The i`th element</a>
-<a name="674"><span class="lineNum"> 674 </span> : : * of the IOSLOT array corresponds to the slot map of the i`th</a>
-<a name="675"><span class="lineNum"> 675 </span> : : * element of the iohubs idata array.</a>
-<a name="676"><span class="lineNum"> 676 </span> : : *</a>
-<a name="677"><span class="lineNum"> 677 </span> : : * Probably.</a>
-<a name="678"><span class="lineNum"> 678 </span> : : *</a>
-<a name="679"><span class="lineNum"> 679 </span> : : * Furthermore, arrayarrayarrayarrayarray.</a>
-<a name="680"><span class="lineNum"> 680 </span> : : */</a>
-<a name="681"><span class="lineNum"> 681 </span> : : </a>
-<a name="682"><span class="lineNum"> 682 </span> :<span class="lineNoCov"> 0 : static struct dt_node *get_slot_node(void)</span></a>
-<a name="683"><span class="lineNum"> 683 </span> : : {</a>
-<a name="684"><span class="lineNum"> 684 </span> :<span class="lineNoCov"> 0 : struct dt_node *slots = dt_find_by_name(dt_root, &quot;ibm,pcie-slots&quot;);</span></a>
-<a name="685"><span class="lineNum"> 685 </span> : : </a>
-<a name="686"><span class="lineNum"> 686 </span> :<span class="lineNoCov"> 0 : if (!slots) {</span></a>
-<a name="687"><span class="lineNum"> 687 </span> :<span class="lineNoCov"> 0 : slots = dt_new(dt_root, &quot;ibm,pcie-slots&quot;);</span></a>
-<a name="688"><span class="lineNum"> 688 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(slots, &quot;#address-cells&quot;, 2);</span></a>
-<a name="689"><span class="lineNum"> 689 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(slots, &quot;#size-cells&quot;, 0);</span></a>
-<a name="690"><span class="lineNum"> 690 </span> : : }</a>
+<a name="670"><span class="lineNum"> 670 </span> :<span class="lineNoCov"> 0 : if (entry-&gt;lane_mask)</span></a>
+<a name="671"><span class="lineNum"> 671 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;lane-mask&quot;,</span></a>
+<a name="672"><span class="lineNum"> 672 </span> : : be16_to_cpu(entry-&gt;lane_mask));</a>
+<a name="673"><span class="lineNum"> 673 </span> : : </a>
+<a name="674"><span class="lineNum"> 674 </span> : : /* what is the difference between this and the lane reverse? */</a>
+<a name="675"><span class="lineNum"> 675 </span> :<span class="lineNoCov"> 0 : if (entry-&gt;lane_reverse)</span></a>
+<a name="676"><span class="lineNum"> 676 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;lanes-reversed&quot;,</span></a>
+<a name="677"><span class="lineNum"> 677 </span> : : be16_to_cpu(entry-&gt;lane_reverse));</a>
+<a name="678"><span class="lineNum"> 678 </span> : : </a>
+<a name="679"><span class="lineNum"> 679 </span> :<span class="lineNoCov"> 0 : if (strnlen(entry-&gt;name, sizeof(entry-&gt;name))) {</span></a>
+<a name="680"><span class="lineNum"> 680 </span> : : /*</a>
+<a name="681"><span class="lineNum"> 681 </span> : : * HACK: On some platforms (witherspoon) the slot label is</a>
+<a name="682"><span class="lineNum"> 682 </span> : : * applied to the device rather than the pcie downstream port</a>
+<a name="683"><span class="lineNum"> 683 </span> : : * that has the slot under it. Hack around this by moving the</a>
+<a name="684"><span class="lineNum"> 684 </span> : : * slot label up if the parent port doesn't have one.</a>
+<a name="685"><span class="lineNum"> 685 </span> : : */</a>
+<a name="686"><span class="lineNum"> 686 </span> :<span class="lineNoCov"> 0 : if (dt_node_is_compatible(node-&gt;parent, &quot;ibm,pcie-port&quot;) &amp;&amp;</span></a>
+<a name="687"><span class="lineNum"> 687 </span> :<span class="lineNoCov"> 0 : !dt_find_property(node-&gt;parent, &quot;ibm,slot-label&quot;)) {</span></a>
+<a name="688"><span class="lineNum"> 688 </span> :<span class="lineNoCov"> 0 : dt_add_property_nstr(node-&gt;parent, &quot;ibm,slot-label&quot;,</span></a>
+<a name="689"><span class="lineNum"> 689 </span> :<span class="lineNoCov"> 0 : entry-&gt;name, sizeof(entry-&gt;name));</span></a>
+<a name="690"><span class="lineNum"> 690 </span> : : }</a>
<a name="691"><span class="lineNum"> 691 </span> : : </a>
-<a name="692"><span class="lineNum"> 692 </span> :<span class="lineNoCov"> 0 : return slots;</span></a>
-<a name="693"><span class="lineNum"> 693 </span> : : }</a>
-<a name="694"><span class="lineNum"> 694 </span> : : </a>
-<a name="695"><span class="lineNum"> 695 </span> :<span class="lineCov"> 6 : static void io_parse_slots(const struct HDIF_common_hdr *sp_iohubs, int hub_id)</span></a>
-<a name="696"><span class="lineNum"> 696 </span> : : {</a>
-<a name="697"><span class="lineNum"> 697 </span> : : const struct HDIF_child_ptr *ioslot_arr;</a>
-<a name="698"><span class="lineNum"> 698 </span> : : const struct HDIF_array_hdr *entry_arr;</a>
-<a name="699"><span class="lineNum"> 699 </span> : : const struct HDIF_common_hdr *ioslot;</a>
-<a name="700"><span class="lineNum"> 700 </span> : : const struct slot_map_entry *entry;</a>
-<a name="701"><span class="lineNum"> 701 </span> : : unsigned int i, count;</a>
+<a name="692"><span class="lineNum"> 692 </span> :<span class="lineNoCov"> 0 : dt_add_property_nstr(node, &quot;ibm,slot-label&quot;,</span></a>
+<a name="693"><span class="lineNum"> 693 </span> :<span class="lineNoCov"> 0 : entry-&gt;name, sizeof(entry-&gt;name));</span></a>
+<a name="694"><span class="lineNum"> 694 </span> : : }</a>
+<a name="695"><span class="lineNum"> 695 </span> : : </a>
+<a name="696"><span class="lineNum"> 696 </span> :<span class="lineNoCov"> 0 : if (entry-&gt;type == st_slot || entry-&gt;type == st_rc_slot)</span></a>
+<a name="697"><span class="lineNum"> 697 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;ibm,pluggable&quot;, NULL, 0);</span></a>
+<a name="698"><span class="lineNum"> 698 </span> : : </a>
+<a name="699"><span class="lineNum"> 699 </span> :<span class="lineNoCov"> 0 : if (details)</span></a>
+<a name="700"><span class="lineNum"> 700 </span> :<span class="lineNoCov"> 0 : parse_slot_details(node, details);</span></a>
+<a name="701"><span class="lineNum"> 701 </span> : : }</a>
<a name="702"><span class="lineNum"> 702 </span> : : </a>
-<a name="703"><span class="lineNum"> 703 </span> :<span class="lineCov"> 6 : if (be16_to_cpu(sp_iohubs-&gt;child_count) &lt;= CECHUB_CHILD_IOSLOTS)</span></a>
-<a name="704"><span class="lineNum"> 704 </span> :<span class="lineCov"> 6 : return;</span></a>
-<a name="705"><span class="lineNum"> 705 </span> : : </a>
-<a name="706"><span class="lineNum"> 706 </span> :<span class="lineNoCov"> 0 : ioslot_arr = HDIF_child_arr(sp_iohubs, CECHUB_CHILD_IOSLOTS);</span></a>
-<a name="707"><span class="lineNum"> 707 </span> :<span class="lineNoCov"> 0 : if (!ioslot_arr)</span></a>
-<a name="708"><span class="lineNum"> 708 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="709"><span class="lineNum"> 709 </span> : : </a>
-<a name="710"><span class="lineNum"> 710 </span> :<span class="lineNoCov"> 0 : count = be32_to_cpu(ioslot_arr-&gt;count); /* should only be 1 */</span></a>
-<a name="711"><span class="lineNum"> 711 </span> :<span class="lineNoCov"> 0 : if (!count)</span></a>
-<a name="712"><span class="lineNum"> 712 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="713"><span class="lineNum"> 713 </span> : : </a>
-<a name="714"><span class="lineNum"> 714 </span> :<span class="lineNoCov"> 0 : dt_slots = get_slot_node();</span></a>
-<a name="715"><span class="lineNum"> 715 </span> : : </a>
-<a name="716"><span class="lineNum"> 716 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;CEC: Found slot map for IOHUB %d\n&quot;, hub_id);</span></a>
-<a name="717"><span class="lineNum"> 717 </span> :<span class="lineNoCov"> 0 : if (count &gt; 1)</span></a>
-<a name="718"><span class="lineNum"> 718 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CEC: Multiple IOSLOTs found for IO HUB %d\n&quot;, hub_id);</span></a>
-<a name="719"><span class="lineNum"> 719 </span> : : </a>
-<a name="720"><span class="lineNum"> 720 </span> :<span class="lineNoCov"> 0 : ioslot = HDIF_child(sp_iohubs, ioslot_arr, 0, &quot;IOSLOT&quot;);</span></a>
-<a name="721"><span class="lineNum"> 721 </span> :<span class="lineNoCov"> 0 : if (!ioslot)</span></a>
-<a name="722"><span class="lineNum"> 722 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="723"><span class="lineNum"> 723 </span> : : </a>
-<a name="724"><span class="lineNum"> 724 </span> :<span class="lineNoCov"> 0 : entry_arr = HDIF_get_iarray(ioslot, IOSLOT_IDATA_SLOTMAP, NULL);</span></a>
-<a name="725"><span class="lineNum"> 725 </span> :<span class="lineNoCov"> 0 : HDIF_iarray_for_each(entry_arr, i, entry) {</span></a>
-<a name="726"><span class="lineNum"> 726 </span> : : const struct slot_map_details *details;</a>
+<a name="703"><span class="lineNum"> 703 </span> : : /*</a>
+<a name="704"><span class="lineNum"> 704 </span> : : * Under the IOHUB structure we have and idata array describing</a>
+<a name="705"><span class="lineNum"> 705 </span> : : * the PHBs under each chip. The IOHUB structure also has a child</a>
+<a name="706"><span class="lineNum"> 706 </span> : : * array called IOSLOT which describes slot map. The i`th element</a>
+<a name="707"><span class="lineNum"> 707 </span> : : * of the IOSLOT array corresponds to the slot map of the i`th</a>
+<a name="708"><span class="lineNum"> 708 </span> : : * element of the iohubs idata array.</a>
+<a name="709"><span class="lineNum"> 709 </span> : : *</a>
+<a name="710"><span class="lineNum"> 710 </span> : : * Probably.</a>
+<a name="711"><span class="lineNum"> 711 </span> : : *</a>
+<a name="712"><span class="lineNum"> 712 </span> : : * Furthermore, arrayarrayarrayarrayarray.</a>
+<a name="713"><span class="lineNum"> 713 </span> : : */</a>
+<a name="714"><span class="lineNum"> 714 </span> : : </a>
+<a name="715"><span class="lineNum"> 715 </span> :<span class="lineNoCov"> 0 : static struct dt_node *get_slot_node(void)</span></a>
+<a name="716"><span class="lineNum"> 716 </span> : : {</a>
+<a name="717"><span class="lineNum"> 717 </span> :<span class="lineNoCov"> 0 : struct dt_node *slots = dt_find_by_name(dt_root, &quot;ibm,pcie-slots&quot;);</span></a>
+<a name="718"><span class="lineNum"> 718 </span> : : </a>
+<a name="719"><span class="lineNum"> 719 </span> :<span class="lineNoCov"> 0 : if (!slots) {</span></a>
+<a name="720"><span class="lineNum"> 720 </span> :<span class="lineNoCov"> 0 : slots = dt_new(dt_root, &quot;ibm,pcie-slots&quot;);</span></a>
+<a name="721"><span class="lineNum"> 721 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(slots, &quot;#address-cells&quot;, 2);</span></a>
+<a name="722"><span class="lineNum"> 722 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(slots, &quot;#size-cells&quot;, 0);</span></a>
+<a name="723"><span class="lineNum"> 723 </span> : : }</a>
+<a name="724"><span class="lineNum"> 724 </span> : : </a>
+<a name="725"><span class="lineNum"> 725 </span> :<span class="lineNoCov"> 0 : return slots;</span></a>
+<a name="726"><span class="lineNum"> 726 </span> : : }</a>
<a name="727"><span class="lineNum"> 727 </span> : : </a>
-<a name="728"><span class="lineNum"> 728 </span> :<span class="lineNoCov"> 0 : details = find_slot_details(ioslot,</span></a>
-<a name="729"><span class="lineNum"> 729 </span> :<span class="lineNoCov"> 0 : be16_to_cpu(entry-&gt;entry_id));</span></a>
-<a name="730"><span class="lineNum"> 730 </span> :<span class="lineNoCov"> 0 : parse_one_slot(entry, details, hub_id);</span></a>
-<a name="731"><span class="lineNum"> 731 </span> : : }</a>
-<a name="732"><span class="lineNum"> 732 </span> : : }</a>
-<a name="733"><span class="lineNum"> 733 </span> : : </a>
-<a name="734"><span class="lineNum"> 734 </span> :<span class="lineCov"> 3 : static void io_parse_fru(const void *sp_iohubs)</span></a>
-<a name="735"><span class="lineNum"> 735 </span> : : {</a>
-<a name="736"><span class="lineNum"> 736 </span> : : unsigned int i;</a>
-<a name="737"><span class="lineNum"> 737 </span> : : int count;</a>
+<a name="728"><span class="lineNum"> 728 </span> :<span class="lineCov"> 6 : static void io_parse_slots(const struct HDIF_common_hdr *sp_iohubs, int hub_id)</span></a>
+<a name="729"><span class="lineNum"> 729 </span> : : {</a>
+<a name="730"><span class="lineNum"> 730 </span> : : const struct HDIF_child_ptr *ioslot_arr;</a>
+<a name="731"><span class="lineNum"> 731 </span> : : const struct HDIF_array_hdr *entry_arr;</a>
+<a name="732"><span class="lineNum"> 732 </span> : : const struct HDIF_common_hdr *ioslot;</a>
+<a name="733"><span class="lineNum"> 733 </span> : : const struct slot_map_entry *entry;</a>
+<a name="734"><span class="lineNum"> 734 </span> : : unsigned int i, count;</a>
+<a name="735"><span class="lineNum"> 735 </span> : : </a>
+<a name="736"><span class="lineNum"> 736 </span> :<span class="lineCov"> 6 : if (be16_to_cpu(sp_iohubs-&gt;child_count) &lt;= CECHUB_CHILD_IOSLOTS)</span></a>
+<a name="737"><span class="lineNum"> 737 </span> :<span class="lineCov"> 6 : return;</span></a>
<a name="738"><span class="lineNum"> 738 </span> : : </a>
-<a name="739"><span class="lineNum"> 739 </span> :<span class="lineCov"> 3 : count = HDIF_get_iarray_size(sp_iohubs, CECHUB_FRU_IO_HUBS);</span></a>
-<a name="740"><span class="lineNum"> 740 </span> :<span class="lineCov"> 3 : if (count &lt; 1) {</span></a>
-<a name="741"><span class="lineNum"> 741 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CEC: IO FRU with no chips !\n&quot;);</span></a>
-<a name="742"><span class="lineNum"> 742 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="743"><span class="lineNum"> 743 </span> : : }</a>
-<a name="744"><span class="lineNum"> 744 </span> : : </a>
-<a name="745"><span class="lineNum"> 745 </span> :<span class="lineCov"> 3 : prlog(PR_INFO, &quot;CEC: %d chips in FRU\n&quot;, count);</span></a>
+<a name="739"><span class="lineNum"> 739 </span> :<span class="lineNoCov"> 0 : ioslot_arr = HDIF_child_arr(sp_iohubs, CECHUB_CHILD_IOSLOTS);</span></a>
+<a name="740"><span class="lineNum"> 740 </span> :<span class="lineNoCov"> 0 : if (!ioslot_arr)</span></a>
+<a name="741"><span class="lineNum"> 741 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="742"><span class="lineNum"> 742 </span> : : </a>
+<a name="743"><span class="lineNum"> 743 </span> :<span class="lineNoCov"> 0 : count = be32_to_cpu(ioslot_arr-&gt;count); /* should only be 1 */</span></a>
+<a name="744"><span class="lineNum"> 744 </span> :<span class="lineNoCov"> 0 : if (!count)</span></a>
+<a name="745"><span class="lineNum"> 745 </span> :<span class="lineNoCov"> 0 : return;</span></a>
<a name="746"><span class="lineNum"> 746 </span> : : </a>
-<a name="747"><span class="lineNum"> 747 </span> : : /* Iterate IO hub array */</a>
-<a name="748"><span class="lineNum"> 748 </span> :<span class="lineCov"> 9 : for (i = 0; i &lt; count; i++) {</span></a>
-<a name="749"><span class="lineNum"> 749 </span> : : const struct cechub_io_hub *hub;</a>
-<a name="750"><span class="lineNum"> 750 </span> : : unsigned int size, hub_id;</a>
-<a name="751"><span class="lineNum"> 751 </span> : : uint32_t chip_id;</a>
+<a name="747"><span class="lineNum"> 747 </span> :<span class="lineNoCov"> 0 : dt_slots = get_slot_node();</span></a>
+<a name="748"><span class="lineNum"> 748 </span> : : </a>
+<a name="749"><span class="lineNum"> 749 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;CEC: Found slot map for IOHUB %d\n&quot;, hub_id);</span></a>
+<a name="750"><span class="lineNum"> 750 </span> :<span class="lineNoCov"> 0 : if (count &gt; 1)</span></a>
+<a name="751"><span class="lineNum"> 751 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CEC: Multiple IOSLOTs found for IO HUB %d\n&quot;, hub_id);</span></a>
<a name="752"><span class="lineNum"> 752 </span> : : </a>
-<a name="753"><span class="lineNum"> 753 </span> :<span class="lineCov"> 6 : hub = HDIF_get_iarray_item(sp_iohubs, CECHUB_FRU_IO_HUBS,</span></a>
-<a name="754"><span class="lineNum"> 754 </span> : : i, &amp;size);</a>
-<a name="755"><span class="lineNum"> 755 </span> :<span class="lineCov"> 6 : if (!hub || size &lt; CECHUB_IOHUB_MIN_SIZE) {</span></a>
-<a name="756"><span class="lineNum"> 756 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CEC: IO-HUB Chip %d bad idata\n&quot;, i);</span></a>
-<a name="757"><span class="lineNum"> 757 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="758"><span class="lineNum"> 758 </span> : : }</a>
-<a name="759"><span class="lineNum"> 759 </span> : : </a>
-<a name="760"><span class="lineNum"> 760 </span> :<span class="lineCov"> 6 : switch (hub-&gt;flags &amp; CECHUB_HUB_FLAG_STATE_MASK) {</span></a>
-<a name="761"><span class="lineNum"> 761 </span> :<span class="lineCov"> 6 : case CECHUB_HUB_FLAG_STATE_OK:</span></a>
-<a name="762"><span class="lineNum"> 762 </span> :<span class="lineCov"> 6 : prlog(PR_DEBUG, &quot;CEC: IO Hub Chip #%d OK\n&quot;, i);</span></a>
-<a name="763"><span class="lineNum"> 763 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="764"><span class="lineNum"> 764 </span> :<span class="lineNoCov"> 0 : case CECHUB_HUB_FLAG_STATE_FAILURES:</span></a>
-<a name="765"><span class="lineNum"> 765 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;CEC: IO Hub Chip #%d OK&quot;</span></a>
-<a name="766"><span class="lineNum"> 766 </span> : : &quot; with failures\n&quot;, i);</a>
-<a name="767"><span class="lineNum"> 767 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="768"><span class="lineNum"> 768 </span> :<span class="lineNoCov"> 0 : case CECHUB_HUB_FLAG_STATE_NOT_INST:</span></a>
-<a name="769"><span class="lineNum"> 769 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;CEC: IO Hub Chip #%d&quot;</span></a>
-<a name="770"><span class="lineNum"> 770 </span> : : &quot; Not installed\n&quot;, i);</a>
-<a name="771"><span class="lineNum"> 771 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="772"><span class="lineNum"> 772 </span> :<span class="lineNoCov"> 0 : case CECHUB_HUB_FLAG_STATE_UNUSABLE:</span></a>
-<a name="773"><span class="lineNum"> 773 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;CEC: IO Hub Chip #%d Unusable\n&quot;, i);</span></a>
-<a name="774"><span class="lineNum"> 774 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="775"><span class="lineNum"> 775 </span> : : }</a>
-<a name="776"><span class="lineNum"> 776 </span> : : </a>
-<a name="777"><span class="lineNum"> 777 </span> :<span class="lineCov"> 6 : hub_id = be16_to_cpu(hub-&gt;iohub_id);</span></a>
-<a name="778"><span class="lineNum"> 778 </span> : : </a>
-<a name="779"><span class="lineNum"> 779 </span> : : /* GX BAR assignment */</a>
-<a name="780"><span class="lineNum"> 780 </span> :<span class="lineCov"> 6 : prlog(PR_DEBUG, &quot;CEC: PChip: %d HUB ID: %04x [EC=0x%x]&quot;</span></a>
-<a name="781"><span class="lineNum"> 781 </span> : : &quot; Hub#=%d)\n&quot;,</a>
-<a name="782"><span class="lineNum"> 782 </span> : : be32_to_cpu(hub-&gt;proc_chip_id), hub_id,</a>
-<a name="783"><span class="lineNum"> 783 </span> : : be32_to_cpu(hub-&gt;ec_level), be16_to_cpu(hub-&gt;hub_num));</a>
-<a name="784"><span class="lineNum"> 784 </span> : : </a>
-<a name="785"><span class="lineNum"> 785 </span> :<span class="lineCov"> 6 : switch(hub_id) {</span></a>
-<a name="786"><span class="lineNum"> 786 </span> :<span class="lineCov"> 6 : case CECHUB_HUB_MURANO:</span></a>
-<a name="787"><span class="lineNum"> 787 </span> : : case CECHUB_HUB_MURANO_SEGU:</a>
-<a name="788"><span class="lineNum"> 788 </span> :<span class="lineCov"> 6 : prlog(PR_INFO, &quot;CEC: Murano !\n&quot;);</span></a>
-<a name="789"><span class="lineNum"> 789 </span> :<span class="lineCov"> 6 : io_add_p8(hub, sp_iohubs);</span></a>
-<a name="790"><span class="lineNum"> 790 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="791"><span class="lineNum"> 791 </span> :<span class="lineNoCov"> 0 : case CECHUB_HUB_VENICE_WYATT:</span></a>
-<a name="792"><span class="lineNum"> 792 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;CEC: Venice !\n&quot;);</span></a>
-<a name="793"><span class="lineNum"> 793 </span> :<span class="lineNoCov"> 0 : io_add_p8(hub, sp_iohubs);</span></a>
-<a name="794"><span class="lineNum"> 794 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="795"><span class="lineNum"> 795 </span> :<span class="lineNoCov"> 0 : case CECHUB_HUB_NIMBUS_SFORAZ:</span></a>
-<a name="796"><span class="lineNum"> 796 </span> : : case CECHUB_HUB_NIMBUS_MONZA:</a>
-<a name="797"><span class="lineNum"> 797 </span> : : case CECHUB_HUB_NIMBUS_LAGRANGE:</a>
-<a name="798"><span class="lineNum"> 798 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;CEC: Nimbus !\n&quot;);</span></a>
-<a name="799"><span class="lineNum"> 799 </span> :<span class="lineNoCov"> 0 : io_add_p9(hub, sp_iohubs);</span></a>
+<a name="753"><span class="lineNum"> 753 </span> :<span class="lineNoCov"> 0 : ioslot = HDIF_child(sp_iohubs, ioslot_arr, 0, &quot;IOSLOT&quot;);</span></a>
+<a name="754"><span class="lineNum"> 754 </span> :<span class="lineNoCov"> 0 : if (!ioslot)</span></a>
+<a name="755"><span class="lineNum"> 755 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="756"><span class="lineNum"> 756 </span> : : </a>
+<a name="757"><span class="lineNum"> 757 </span> :<span class="lineNoCov"> 0 : entry_arr = HDIF_get_iarray(ioslot, IOSLOT_IDATA_SLOTMAP, NULL);</span></a>
+<a name="758"><span class="lineNum"> 758 </span> :<span class="lineNoCov"> 0 : HDIF_iarray_for_each(entry_arr, i, entry) {</span></a>
+<a name="759"><span class="lineNum"> 759 </span> : : const struct slot_map_details *details;</a>
+<a name="760"><span class="lineNum"> 760 </span> : : </a>
+<a name="761"><span class="lineNum"> 761 </span> :<span class="lineNoCov"> 0 : details = find_slot_details(ioslot,</span></a>
+<a name="762"><span class="lineNum"> 762 </span> :<span class="lineNoCov"> 0 : be16_to_cpu(entry-&gt;entry_id));</span></a>
+<a name="763"><span class="lineNum"> 763 </span> :<span class="lineNoCov"> 0 : parse_one_slot(entry, details, hub_id);</span></a>
+<a name="764"><span class="lineNum"> 764 </span> : : }</a>
+<a name="765"><span class="lineNum"> 765 </span> : : }</a>
+<a name="766"><span class="lineNum"> 766 </span> : : </a>
+<a name="767"><span class="lineNum"> 767 </span> :<span class="lineCov"> 3 : static void io_parse_fru(const void *sp_iohubs)</span></a>
+<a name="768"><span class="lineNum"> 768 </span> : : {</a>
+<a name="769"><span class="lineNum"> 769 </span> : : unsigned int i;</a>
+<a name="770"><span class="lineNum"> 770 </span> : : int count;</a>
+<a name="771"><span class="lineNum"> 771 </span> : : </a>
+<a name="772"><span class="lineNum"> 772 </span> :<span class="lineCov"> 3 : count = HDIF_get_iarray_size(sp_iohubs, CECHUB_FRU_IO_HUBS);</span></a>
+<a name="773"><span class="lineNum"> 773 </span> :<span class="lineCov"> 3 : if (count &lt; 1) {</span></a>
+<a name="774"><span class="lineNum"> 774 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CEC: IO FRU with no chips !\n&quot;);</span></a>
+<a name="775"><span class="lineNum"> 775 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="776"><span class="lineNum"> 776 </span> : : }</a>
+<a name="777"><span class="lineNum"> 777 </span> : : </a>
+<a name="778"><span class="lineNum"> 778 </span> :<span class="lineCov"> 3 : prlog(PR_INFO, &quot;CEC: %d chips in FRU\n&quot;, count);</span></a>
+<a name="779"><span class="lineNum"> 779 </span> : : </a>
+<a name="780"><span class="lineNum"> 780 </span> : : /* Iterate IO hub array */</a>
+<a name="781"><span class="lineNum"> 781 </span> :<span class="lineCov"> 9 : for (i = 0; i &lt; count; i++) {</span></a>
+<a name="782"><span class="lineNum"> 782 </span> : : const struct cechub_io_hub *hub;</a>
+<a name="783"><span class="lineNum"> 783 </span> : : unsigned int size, hub_id;</a>
+<a name="784"><span class="lineNum"> 784 </span> : : uint32_t chip_id;</a>
+<a name="785"><span class="lineNum"> 785 </span> : : </a>
+<a name="786"><span class="lineNum"> 786 </span> :<span class="lineCov"> 6 : hub = HDIF_get_iarray_item(sp_iohubs, CECHUB_FRU_IO_HUBS,</span></a>
+<a name="787"><span class="lineNum"> 787 </span> : : i, &amp;size);</a>
+<a name="788"><span class="lineNum"> 788 </span> :<span class="lineCov"> 6 : if (!hub || size &lt; CECHUB_IOHUB_MIN_SIZE) {</span></a>
+<a name="789"><span class="lineNum"> 789 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CEC: IO-HUB Chip %d bad idata\n&quot;, i);</span></a>
+<a name="790"><span class="lineNum"> 790 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="791"><span class="lineNum"> 791 </span> : : }</a>
+<a name="792"><span class="lineNum"> 792 </span> : : </a>
+<a name="793"><span class="lineNum"> 793 </span> :<span class="lineCov"> 6 : switch (hub-&gt;flags &amp; CECHUB_HUB_FLAG_STATE_MASK) {</span></a>
+<a name="794"><span class="lineNum"> 794 </span> :<span class="lineCov"> 6 : case CECHUB_HUB_FLAG_STATE_OK:</span></a>
+<a name="795"><span class="lineNum"> 795 </span> :<span class="lineCov"> 6 : prlog(PR_DEBUG, &quot;CEC: IO Hub Chip #%d OK\n&quot;, i);</span></a>
+<a name="796"><span class="lineNum"> 796 </span> :<span class="lineCov"> 6 : break;</span></a>
+<a name="797"><span class="lineNum"> 797 </span> :<span class="lineNoCov"> 0 : case CECHUB_HUB_FLAG_STATE_FAILURES:</span></a>
+<a name="798"><span class="lineNum"> 798 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;CEC: IO Hub Chip #%d OK&quot;</span></a>
+<a name="799"><span class="lineNum"> 799 </span> : : &quot; with failures\n&quot;, i);</a>
<a name="800"><span class="lineNum"> 800 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="801"><span class="lineNum"> 801 </span> :<span class="lineNoCov"> 0 : case CECHUB_HUB_CUMULUS_DUOMO:</span></a>
-<a name="802"><span class="lineNum"> 802 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;CEC: Cumulus !\n&quot;);</span></a>
-<a name="803"><span class="lineNum"> 803 </span> :<span class="lineNoCov"> 0 : io_add_p9(hub, sp_iohubs);</span></a>
-<a name="804"><span class="lineNum"> 804 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="805"><span class="lineNum"> 805 </span> :<span class="lineNoCov"> 0 : case CECHUB_HUB_AXONE_HOPPER:</span></a>
-<a name="806"><span class="lineNum"> 806 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;CEC: Axone !\n&quot;);</span></a>
-<a name="807"><span class="lineNum"> 807 </span> :<span class="lineNoCov"> 0 : io_add_p9(hub, sp_iohubs);</span></a>
-<a name="808"><span class="lineNum"> 808 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="809"><span class="lineNum"> 809 </span> :<span class="lineNoCov"> 0 : default:</span></a>
-<a name="810"><span class="lineNum"> 810 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;CEC: Hub ID 0x%04x unsupported !\n&quot;,</span></a>
-<a name="811"><span class="lineNum"> 811 </span> : : hub_id);</a>
-<a name="812"><span class="lineNum"> 812 </span> : : }</a>
-<a name="813"><span class="lineNum"> 813 </span> : : </a>
-<a name="814"><span class="lineNum"> 814 </span> :<span class="lineCov"> 6 : chip_id = pcid_to_chip_id(be32_to_cpu(hub-&gt;proc_chip_id));</span></a>
-<a name="815"><span class="lineNum"> 815 </span> : : </a>
-<a name="816"><span class="lineNum"> 816 </span> : : /* parse the slot map if we have one */</a>
-<a name="817"><span class="lineNum"> 817 </span> :<span class="lineCov"> 6 : io_parse_slots(sp_iohubs, chip_id);</span></a>
-<a name="818"><span class="lineNum"> 818 </span> : : }</a>
-<a name="819"><span class="lineNum"> 819 </span> : : </a>
-<a name="820"><span class="lineNum"> 820 </span> :<span class="lineCov"> 3 : if (proc_gen == proc_gen_p8 || proc_gen == proc_gen_p9)</span></a>
-<a name="821"><span class="lineNum"> 821 </span> :<span class="lineCov"> 3 : io_add_p8_cec_vpd(sp_iohubs);</span></a>
-<a name="822"><span class="lineNum"> 822 </span> : : }</a>
-<a name="823"><span class="lineNum"> 823 </span> : : </a>
-<a name="824"><span class="lineNum"> 824 </span> :<span class="lineCov"> 2 : void io_parse(void)</span></a>
-<a name="825"><span class="lineNum"> 825 </span> : : {</a>
-<a name="826"><span class="lineNum"> 826 </span> : : const struct HDIF_common_hdr *sp_iohubs;</a>
-<a name="827"><span class="lineNum"> 827 </span> : : unsigned int i, size;</a>
-<a name="828"><span class="lineNum"> 828 </span> : : </a>
-<a name="829"><span class="lineNum"> 829 </span> : : /* Look for IO Hubs */</a>
-<a name="830"><span class="lineNum"> 830 </span> :<span class="lineCov"> 2 : if (!get_hdif(&amp;spira.ntuples.cec_iohub_fru, &quot;IO HUB&quot;)) {</span></a>
-<a name="831"><span class="lineNum"> 831 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CEC: Cannot locate IO Hub FRU data !\n&quot;);</span></a>
-<a name="832"><span class="lineNum"> 832 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="833"><span class="lineNum"> 833 </span> : : }</a>
-<a name="834"><span class="lineNum"> 834 </span> : : </a>
-<a name="835"><span class="lineNum"> 835 </span> : : /*</a>
-<a name="836"><span class="lineNum"> 836 </span> : : * Note about LXRn numbering ...</a>
-<a name="837"><span class="lineNum"> 837 </span> : : *</a>
-<a name="838"><span class="lineNum"> 838 </span> : : * I can't completely make sense of what that is supposed to be, so</a>
-<a name="839"><span class="lineNum"> 839 </span> : : * for now, what we do is look for the first one we can find and</a>
-<a name="840"><span class="lineNum"> 840 </span> : : * increment it for each chip. Works for the machines I have here</a>
-<a name="841"><span class="lineNum"> 841 </span> : : */</a>
-<a name="842"><span class="lineNum"> 842 </span> : : </a>
-<a name="843"><span class="lineNum"> 843 </span> :<span class="lineCov"> 5 : for_each_ntuple_idx(&amp;spira.ntuples.cec_iohub_fru, sp_iohubs, i,</span></a>
-<a name="844"><span class="lineNum"> 844 </span> : : CECHUB_FRU_HDIF_SIG) {</a>
-<a name="845"><span class="lineNum"> 845 </span> : : const struct cechub_hub_fru_id *fru_id_data;</a>
-<a name="846"><span class="lineNum"> 846 </span> : : unsigned int type;</a>
-<a name="847"><span class="lineNum"> 847 </span> : : static const char *typestr[] = {</a>
-<a name="848"><span class="lineNum"> 848 </span> : : &quot;Reservation&quot;,</a>
-<a name="849"><span class="lineNum"> 849 </span> : : &quot;Card&quot;,</a>
-<a name="850"><span class="lineNum"> 850 </span> : : &quot;CPU Card&quot;,</a>
-<a name="851"><span class="lineNum"> 851 </span> : : &quot;Backplane&quot;,</a>
-<a name="852"><span class="lineNum"> 852 </span> : : &quot;Backplane Extension&quot;</a>
-<a name="853"><span class="lineNum"> 853 </span> : : };</a>
-<a name="854"><span class="lineNum"> 854 </span> :<span class="lineCov"> 3 : fru_id_data = HDIF_get_idata(sp_iohubs, CECHUB_FRU_ID_DATA_AREA,</span></a>
-<a name="855"><span class="lineNum"> 855 </span> : : &amp;size);</a>
-<a name="856"><span class="lineNum"> 856 </span> :<span class="lineCov"> 3 : if (!fru_id_data || size &lt; sizeof(struct cechub_hub_fru_id)) {</span></a>
-<a name="857"><span class="lineNum"> 857 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CEC: IO-HUB FRU %d, bad ID data\n&quot;, i);</span></a>
-<a name="858"><span class="lineNum"> 858 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="859"><span class="lineNum"> 859 </span> : : }</a>
-<a name="860"><span class="lineNum"> 860 </span> :<span class="lineCov"> 3 : type = be32_to_cpu(fru_id_data-&gt;card_type);</span></a>
-<a name="861"><span class="lineNum"> 861 </span> : : </a>
-<a name="862"><span class="lineNum"> 862 </span> :<span class="lineCov"> 3 : prlog(PR_INFO, &quot;CEC: HUB FRU %d is %s\n&quot;,</span></a>
-<a name="863"><span class="lineNum"> 863 </span> : : i, type &gt; 4 ? &quot;Unknown&quot; : typestr[type]);</a>
+<a name="801"><span class="lineNum"> 801 </span> :<span class="lineNoCov"> 0 : case CECHUB_HUB_FLAG_STATE_NOT_INST:</span></a>
+<a name="802"><span class="lineNum"> 802 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;CEC: IO Hub Chip #%d&quot;</span></a>
+<a name="803"><span class="lineNum"> 803 </span> : : &quot; Not installed\n&quot;, i);</a>
+<a name="804"><span class="lineNum"> 804 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="805"><span class="lineNum"> 805 </span> :<span class="lineNoCov"> 0 : case CECHUB_HUB_FLAG_STATE_UNUSABLE:</span></a>
+<a name="806"><span class="lineNum"> 806 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;CEC: IO Hub Chip #%d Unusable\n&quot;, i);</span></a>
+<a name="807"><span class="lineNum"> 807 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="808"><span class="lineNum"> 808 </span> : : }</a>
+<a name="809"><span class="lineNum"> 809 </span> : : </a>
+<a name="810"><span class="lineNum"> 810 </span> :<span class="lineCov"> 6 : hub_id = be16_to_cpu(hub-&gt;iohub_id);</span></a>
+<a name="811"><span class="lineNum"> 811 </span> : : </a>
+<a name="812"><span class="lineNum"> 812 </span> : : /* GX BAR assignment */</a>
+<a name="813"><span class="lineNum"> 813 </span> :<span class="lineCov"> 6 : prlog(PR_DEBUG, &quot;CEC: PChip: %d HUB ID: %04x [EC=0x%x]&quot;</span></a>
+<a name="814"><span class="lineNum"> 814 </span> : : &quot; Hub#=%d)\n&quot;,</a>
+<a name="815"><span class="lineNum"> 815 </span> : : be32_to_cpu(hub-&gt;proc_chip_id), hub_id,</a>
+<a name="816"><span class="lineNum"> 816 </span> : : be32_to_cpu(hub-&gt;ec_level), be16_to_cpu(hub-&gt;hub_num));</a>
+<a name="817"><span class="lineNum"> 817 </span> : : </a>
+<a name="818"><span class="lineNum"> 818 </span> :<span class="lineCov"> 6 : switch(hub_id) {</span></a>
+<a name="819"><span class="lineNum"> 819 </span> :<span class="lineCov"> 6 : case CECHUB_HUB_MURANO:</span></a>
+<a name="820"><span class="lineNum"> 820 </span> : : case CECHUB_HUB_MURANO_SEGU:</a>
+<a name="821"><span class="lineNum"> 821 </span> :<span class="lineCov"> 6 : prlog(PR_INFO, &quot;CEC: Murano !\n&quot;);</span></a>
+<a name="822"><span class="lineNum"> 822 </span> :<span class="lineCov"> 6 : io_add_p8(hub, sp_iohubs);</span></a>
+<a name="823"><span class="lineNum"> 823 </span> :<span class="lineCov"> 6 : break;</span></a>
+<a name="824"><span class="lineNum"> 824 </span> :<span class="lineNoCov"> 0 : case CECHUB_HUB_VENICE_WYATT:</span></a>
+<a name="825"><span class="lineNum"> 825 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;CEC: Venice !\n&quot;);</span></a>
+<a name="826"><span class="lineNum"> 826 </span> :<span class="lineNoCov"> 0 : io_add_p8(hub, sp_iohubs);</span></a>
+<a name="827"><span class="lineNum"> 827 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="828"><span class="lineNum"> 828 </span> :<span class="lineNoCov"> 0 : case CECHUB_HUB_NIMBUS_SFORAZ:</span></a>
+<a name="829"><span class="lineNum"> 829 </span> : : case CECHUB_HUB_NIMBUS_MONZA:</a>
+<a name="830"><span class="lineNum"> 830 </span> : : case CECHUB_HUB_NIMBUS_LAGRANGE:</a>
+<a name="831"><span class="lineNum"> 831 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;CEC: Nimbus !\n&quot;);</span></a>
+<a name="832"><span class="lineNum"> 832 </span> :<span class="lineNoCov"> 0 : io_add_p9(hub, sp_iohubs);</span></a>
+<a name="833"><span class="lineNum"> 833 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="834"><span class="lineNum"> 834 </span> :<span class="lineNoCov"> 0 : case CECHUB_HUB_CUMULUS_DUOMO:</span></a>
+<a name="835"><span class="lineNum"> 835 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;CEC: Cumulus !\n&quot;);</span></a>
+<a name="836"><span class="lineNum"> 836 </span> :<span class="lineNoCov"> 0 : io_add_p9(hub, sp_iohubs);</span></a>
+<a name="837"><span class="lineNum"> 837 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="838"><span class="lineNum"> 838 </span> :<span class="lineNoCov"> 0 : case CECHUB_HUB_AXONE_HOPPER:</span></a>
+<a name="839"><span class="lineNum"> 839 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;CEC: Axone !\n&quot;);</span></a>
+<a name="840"><span class="lineNum"> 840 </span> :<span class="lineNoCov"> 0 : io_add_p9(hub, sp_iohubs);</span></a>
+<a name="841"><span class="lineNum"> 841 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="842"><span class="lineNum"> 842 </span> :<span class="lineNoCov"> 0 : case CECHUB_HUB_RAINIER:</span></a>
+<a name="843"><span class="lineNum"> 843 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;CEC: Rainier !\n&quot;);</span></a>
+<a name="844"><span class="lineNum"> 844 </span> :<span class="lineNoCov"> 0 : io_add_p9(hub, sp_iohubs);</span></a>
+<a name="845"><span class="lineNum"> 845 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="846"><span class="lineNum"> 846 </span> :<span class="lineNoCov"> 0 : case CECHUB_HUB_DENALI:</span></a>
+<a name="847"><span class="lineNum"> 847 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;CEC: Denali !\n&quot;);</span></a>
+<a name="848"><span class="lineNum"> 848 </span> :<span class="lineNoCov"> 0 : io_add_p9(hub, sp_iohubs);</span></a>
+<a name="849"><span class="lineNum"> 849 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="850"><span class="lineNum"> 850 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="851"><span class="lineNum"> 851 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;CEC: Hub ID 0x%04x unsupported !\n&quot;,</span></a>
+<a name="852"><span class="lineNum"> 852 </span> : : hub_id);</a>
+<a name="853"><span class="lineNum"> 853 </span> : : }</a>
+<a name="854"><span class="lineNum"> 854 </span> : : </a>
+<a name="855"><span class="lineNum"> 855 </span> :<span class="lineCov"> 6 : chip_id = pcid_to_chip_id(be32_to_cpu(hub-&gt;proc_chip_id));</span></a>
+<a name="856"><span class="lineNum"> 856 </span> : : </a>
+<a name="857"><span class="lineNum"> 857 </span> : : /* parse the slot map if we have one */</a>
+<a name="858"><span class="lineNum"> 858 </span> :<span class="lineCov"> 6 : io_parse_slots(sp_iohubs, chip_id);</span></a>
+<a name="859"><span class="lineNum"> 859 </span> : : }</a>
+<a name="860"><span class="lineNum"> 860 </span> : : </a>
+<a name="861"><span class="lineNum"> 861 </span> :<span class="lineCov"> 3 : if (proc_gen == proc_gen_p8 || proc_gen == proc_gen_p9 || proc_gen == proc_gen_p10)</span></a>
+<a name="862"><span class="lineNum"> 862 </span> :<span class="lineCov"> 3 : io_add_p8_cec_vpd(sp_iohubs);</span></a>
+<a name="863"><span class="lineNum"> 863 </span> : : }</a>
<a name="864"><span class="lineNum"> 864 </span> : : </a>
-<a name="865"><span class="lineNum"> 865 </span> : : /*</a>
-<a name="866"><span class="lineNum"> 866 </span> : : * We currently only handle the backplane (Juno) and</a>
-<a name="867"><span class="lineNum"> 867 </span> : : * processor FRU (P8 machines)</a>
-<a name="868"><span class="lineNum"> 868 </span> : : */</a>
-<a name="869"><span class="lineNum"> 869 </span> :<span class="lineCov"> 3 : if (type != CECHUB_FRU_TYPE_CEC_BKPLANE &amp;&amp;</span></a>
-<a name="870"><span class="lineNum"> 870 </span> : : type != CECHUB_FRU_TYPE_CPU_CARD) {</a>
-<a name="871"><span class="lineNum"> 871 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CEC: Unsupported type\n&quot;);</span></a>
-<a name="872"><span class="lineNum"> 872 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="873"><span class="lineNum"> 873 </span> : : }</a>
-<a name="874"><span class="lineNum"> 874 </span> : : </a>
-<a name="875"><span class="lineNum"> 875 </span> : : /* We don't support Hubs connected to pass-through ports */</a>
-<a name="876"><span class="lineNum"> 876 </span> :<span class="lineCov"> 3 : if (fru_id_data-&gt;flags &amp; (CECHUB_FRU_FLAG_HEADLESS |</span></a>
-<a name="877"><span class="lineNum"> 877 </span> : : CECHUB_FRU_FLAG_PASSTHROUGH)) {</a>
-<a name="878"><span class="lineNum"> 878 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CEC: Headless or Passthrough unsupported\n&quot;);</span></a>
-<a name="879"><span class="lineNum"> 879 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="880"><span class="lineNum"> 880 </span> : : }</a>
-<a name="881"><span class="lineNum"> 881 </span> : : </a>
-<a name="882"><span class="lineNum"> 882 </span> : : /* Ok, we have a reasonable candidate */</a>
-<a name="883"><span class="lineNum"> 883 </span> :<span class="lineCov"> 3 : io_parse_fru(sp_iohubs);</span></a>
-<a name="884"><span class="lineNum"> 884 </span> : : }</a>
-<a name="885"><span class="lineNum"> 885 </span> : : }</a>
-<a name="886"><span class="lineNum"> 886 </span> : : </a>
+<a name="865"><span class="lineNum"> 865 </span> :<span class="lineCov"> 2 : void io_parse(void)</span></a>
+<a name="866"><span class="lineNum"> 866 </span> : : {</a>
+<a name="867"><span class="lineNum"> 867 </span> : : const struct HDIF_common_hdr *sp_iohubs;</a>
+<a name="868"><span class="lineNum"> 868 </span> : : unsigned int i, size;</a>
+<a name="869"><span class="lineNum"> 869 </span> : : </a>
+<a name="870"><span class="lineNum"> 870 </span> : : /* Look for IO Hubs */</a>
+<a name="871"><span class="lineNum"> 871 </span> :<span class="lineCov"> 2 : if (!get_hdif(&amp;spira.ntuples.cec_iohub_fru, &quot;IO HUB&quot;)) {</span></a>
+<a name="872"><span class="lineNum"> 872 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CEC: Cannot locate IO Hub FRU data !\n&quot;);</span></a>
+<a name="873"><span class="lineNum"> 873 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="874"><span class="lineNum"> 874 </span> : : }</a>
+<a name="875"><span class="lineNum"> 875 </span> : : </a>
+<a name="876"><span class="lineNum"> 876 </span> : : /*</a>
+<a name="877"><span class="lineNum"> 877 </span> : : * Note about LXRn numbering ...</a>
+<a name="878"><span class="lineNum"> 878 </span> : : *</a>
+<a name="879"><span class="lineNum"> 879 </span> : : * I can't completely make sense of what that is supposed to be, so</a>
+<a name="880"><span class="lineNum"> 880 </span> : : * for now, what we do is look for the first one we can find and</a>
+<a name="881"><span class="lineNum"> 881 </span> : : * increment it for each chip. Works for the machines I have here</a>
+<a name="882"><span class="lineNum"> 882 </span> : : */</a>
+<a name="883"><span class="lineNum"> 883 </span> : : </a>
+<a name="884"><span class="lineNum"> 884 </span> :<span class="lineCov"> 5 : for_each_ntuple_idx(&amp;spira.ntuples.cec_iohub_fru, sp_iohubs, i,</span></a>
+<a name="885"><span class="lineNum"> 885 </span> : : CECHUB_FRU_HDIF_SIG) {</a>
+<a name="886"><span class="lineNum"> 886 </span> : : const struct cechub_hub_fru_id *fru_id_data;</a>
+<a name="887"><span class="lineNum"> 887 </span> : : unsigned int type;</a>
+<a name="888"><span class="lineNum"> 888 </span> : : static const char *typestr[] = {</a>
+<a name="889"><span class="lineNum"> 889 </span> : : &quot;Reservation&quot;,</a>
+<a name="890"><span class="lineNum"> 890 </span> : : &quot;Card&quot;,</a>
+<a name="891"><span class="lineNum"> 891 </span> : : &quot;CPU Card&quot;,</a>
+<a name="892"><span class="lineNum"> 892 </span> : : &quot;Backplane&quot;,</a>
+<a name="893"><span class="lineNum"> 893 </span> : : &quot;Backplane Extension&quot;</a>
+<a name="894"><span class="lineNum"> 894 </span> : : };</a>
+<a name="895"><span class="lineNum"> 895 </span> :<span class="lineCov"> 3 : fru_id_data = HDIF_get_idata(sp_iohubs, CECHUB_FRU_ID_DATA_AREA,</span></a>
+<a name="896"><span class="lineNum"> 896 </span> : : &amp;size);</a>
+<a name="897"><span class="lineNum"> 897 </span> :<span class="lineCov"> 3 : if (!fru_id_data || size &lt; sizeof(struct cechub_hub_fru_id)) {</span></a>
+<a name="898"><span class="lineNum"> 898 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CEC: IO-HUB FRU %d, bad ID data\n&quot;, i);</span></a>
+<a name="899"><span class="lineNum"> 899 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="900"><span class="lineNum"> 900 </span> : : }</a>
+<a name="901"><span class="lineNum"> 901 </span> :<span class="lineCov"> 3 : type = be32_to_cpu(fru_id_data-&gt;card_type);</span></a>
+<a name="902"><span class="lineNum"> 902 </span> : : </a>
+<a name="903"><span class="lineNum"> 903 </span> :<span class="lineCov"> 3 : prlog(PR_INFO, &quot;CEC: HUB FRU %d is %s\n&quot;,</span></a>
+<a name="904"><span class="lineNum"> 904 </span> : : i, type &gt; 4 ? &quot;Unknown&quot; : typestr[type]);</a>
+<a name="905"><span class="lineNum"> 905 </span> : : </a>
+<a name="906"><span class="lineNum"> 906 </span> : : /*</a>
+<a name="907"><span class="lineNum"> 907 </span> : : * We currently only handle the backplane (Juno) and</a>
+<a name="908"><span class="lineNum"> 908 </span> : : * processor FRU (P8 machines)</a>
+<a name="909"><span class="lineNum"> 909 </span> : : */</a>
+<a name="910"><span class="lineNum"> 910 </span> :<span class="lineCov"> 3 : if (type != CECHUB_FRU_TYPE_CEC_BKPLANE &amp;&amp;</span></a>
+<a name="911"><span class="lineNum"> 911 </span> : : type != CECHUB_FRU_TYPE_CPU_CARD) {</a>
+<a name="912"><span class="lineNum"> 912 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CEC: Unsupported type\n&quot;);</span></a>
+<a name="913"><span class="lineNum"> 913 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="914"><span class="lineNum"> 914 </span> : : }</a>
+<a name="915"><span class="lineNum"> 915 </span> : : </a>
+<a name="916"><span class="lineNum"> 916 </span> : : /* We don't support Hubs connected to pass-through ports */</a>
+<a name="917"><span class="lineNum"> 917 </span> :<span class="lineCov"> 3 : if (fru_id_data-&gt;flags &amp; (CECHUB_FRU_FLAG_HEADLESS |</span></a>
+<a name="918"><span class="lineNum"> 918 </span> : : CECHUB_FRU_FLAG_PASSTHROUGH)) {</a>
+<a name="919"><span class="lineNum"> 919 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CEC: Headless or Passthrough unsupported\n&quot;);</span></a>
+<a name="920"><span class="lineNum"> 920 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="921"><span class="lineNum"> 921 </span> : : }</a>
+<a name="922"><span class="lineNum"> 922 </span> : : </a>
+<a name="923"><span class="lineNum"> 923 </span> : : /* Ok, we have a reasonable candidate */</a>
+<a name="924"><span class="lineNum"> 924 </span> :<span class="lineCov"> 3 : io_parse_fru(sp_iohubs);</span></a>
+<a name="925"><span class="lineNum"> 925 </span> : : }</a>
+<a name="926"><span class="lineNum"> 926 </span> : : }</a>
+<a name="927"><span class="lineNum"> 927 </span> : : </a>
</pre>
</td>
</tr>
diff --git a/coverage-report/hdata/memory.c.func-sort-c.html b/coverage-report/hdata/memory.c.func-sort-c.html
index 39e2576..d3b1983 100644
--- a/coverage-report/hdata/memory.c.func-sort-c.html
+++ b/coverage-report/hdata/memory.c.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">151</td>
- <td class="headerCovTableEntry">419</td>
- <td class="headerCovTableEntryLo">36.0 %</td>
+ <td class="headerCovTableEntry">152</td>
+ <td class="headerCovTableEntry">420</td>
+ <td class="headerCovTableEntryLo">36.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
@@ -69,79 +69,79 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#388">add_dimm_info</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#390">add_dimm_info</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#715">add_hb_reserve_node</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#717">add_hb_reserve_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#461">add_memory_controller_p9n</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#463">add_memory_controller_p9n</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#454">dt_add_mem_reg_property</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#456">dt_add_mem_reg_property</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#116">update_status</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#118">update_status</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#349">vpd_parse_spd</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#351">vpd_parse_spd</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#889">__memory_parse</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#891">__memory_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#749">get_hb_reserved_mem</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#751">get_hb_reserved_mem</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#605">get_msareas</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#607">get_msareas</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#947">memory_parse</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#950">memory_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#836">parse_trace_reservations</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#838">parse_trace_reservations</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#95">append_chip_id</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#97">append_chip_id</a></td>
<td class="coverFnHi">3</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#138">add_address_range</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#140">add_address_range</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#227">add_bus_freq_to_ram_area</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#229">add_bus_freq_to_ram_area</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#210">add_chip_id_to_ram_area</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#212">add_chip_id_to_ram_area</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#506">add_memory_buffer_mmio</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#508">add_memory_buffer_mmio</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#588">add_memory_controller</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#590">add_memory_controller</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#277">add_size_to_ram_area</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#279">add_size_to_ram_area</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#293">vpd_add_ram_area</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#295">vpd_add_ram_area</a></td>
<td class="coverFnHi">6</td>
</tr>
</table>
diff --git a/coverage-report/hdata/memory.c.func.html b/coverage-report/hdata/memory.c.func.html
index 32bab03..9312263 100644
--- a/coverage-report/hdata/memory.c.func.html
+++ b/coverage-report/hdata/memory.c.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">151</td>
- <td class="headerCovTableEntry">419</td>
- <td class="headerCovTableEntryLo">36.0 %</td>
+ <td class="headerCovTableEntry">152</td>
+ <td class="headerCovTableEntry">420</td>
+ <td class="headerCovTableEntryLo">36.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
@@ -69,79 +69,79 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="memory.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#889">__memory_parse</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#891">__memory_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#138">add_address_range</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#140">add_address_range</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#227">add_bus_freq_to_ram_area</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#229">add_bus_freq_to_ram_area</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#210">add_chip_id_to_ram_area</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#212">add_chip_id_to_ram_area</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#388">add_dimm_info</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#390">add_dimm_info</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#715">add_hb_reserve_node</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#717">add_hb_reserve_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#506">add_memory_buffer_mmio</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#508">add_memory_buffer_mmio</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#588">add_memory_controller</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#590">add_memory_controller</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#461">add_memory_controller_p9n</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#463">add_memory_controller_p9n</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#277">add_size_to_ram_area</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#279">add_size_to_ram_area</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#95">append_chip_id</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#97">append_chip_id</a></td>
<td class="coverFnHi">3</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#454">dt_add_mem_reg_property</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#456">dt_add_mem_reg_property</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#749">get_hb_reserved_mem</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#751">get_hb_reserved_mem</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#605">get_msareas</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#607">get_msareas</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#947">memory_parse</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#950">memory_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#836">parse_trace_reservations</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#838">parse_trace_reservations</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#116">update_status</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#118">update_status</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#293">vpd_add_ram_area</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#295">vpd_add_ram_area</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="memory.c.gcov.html#349">vpd_parse_spd</a></td>
+ <td class="coverFn"><a href="memory.c.gcov.html#351">vpd_parse_spd</a></td>
<td class="coverFnLo">0</td>
</tr>
</table>
diff --git a/coverage-report/hdata/memory.c.gcov.html b/coverage-report/hdata/memory.c.gcov.html
index a884321..466543b 100644
--- a/coverage-report/hdata/memory.c.gcov.html
+++ b/coverage-report/hdata/memory.c.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">151</td>
- <td class="headerCovTableEntry">419</td>
- <td class="headerCovTableEntryLo">36.0 %</td>
+ <td class="headerCovTableEntry">152</td>
+ <td class="headerCovTableEntry">420</td>
+ <td class="headerCovTableEntryLo">36.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
@@ -124,907 +124,909 @@
<a name="53"><span class="lineNum"> 53 </span> : : #define PHYS_ATTR_STATUS_SAVE_FAILED 0x02</a>
<a name="54"><span class="lineNum"> 54 </span> : : #define PHYS_ATTR_STATUS_SAVED 0x04</a>
<a name="55"><span class="lineNum"> 55 </span> : : #define PHYS_ATTR_STATUS_NOT_SAVED 0x08</a>
-<a name="56"><span class="lineNum"> 56 </span> : : #define PHYS_ATTR_STATUS_MEM_INVALID 0xff</a>
-<a name="57"><span class="lineNum"> 57 </span> : : </a>
-<a name="58"><span class="lineNum"> 58 </span> : : /* Memory Controller ID for Nimbus P9 systems */</a>
-<a name="59"><span class="lineNum"> 59 </span> : : #define MS_CONTROLLER_MCBIST_ID(id) GETFIELD(PPC_BITMASK32(0, 1), id)</a>
-<a name="60"><span class="lineNum"> 60 </span> : : #define MS_CONTROLLER_MCS_ID(id) GETFIELD(PPC_BITMASK32(4, 7), id)</a>
-<a name="61"><span class="lineNum"> 61 </span> : : #define MS_CONTROLLER_MCA_ID(id) GETFIELD(PPC_BITMASK32(8, 15), id)</a>
-<a name="62"><span class="lineNum"> 62 </span> : : </a>
-<a name="63"><span class="lineNum"> 63 </span> : : /* Memory Controller ID for P9 AXONE systems */</a>
-<a name="64"><span class="lineNum"> 64 </span> : : #define MS_CONTROLLER_MC_ID(id) GETFIELD(PPC_BITMASK32(0, 1), id)</a>
-<a name="65"><span class="lineNum"> 65 </span> : : #define MS_CONTROLLER_MI_ID(id) GETFIELD(PPC_BITMASK32(4, 7), id)</a>
-<a name="66"><span class="lineNum"> 66 </span> : : #define MS_CONTROLLER_MCC_ID(id) GETFIELD(PPC_BITMASK32(8, 15), id)</a>
-<a name="67"><span class="lineNum"> 67 </span> : : #define MS_CONTROLLER_OMI_ID(id) GETFIELD(PPC_BITMASK32(16, 31), id)</a>
-<a name="68"><span class="lineNum"> 68 </span> : : </a>
-<a name="69"><span class="lineNum"> 69 </span> : : struct HDIF_ms_area_id {</a>
-<a name="70"><span class="lineNum"> 70 </span> : : __be16 id;</a>
-<a name="71"><span class="lineNum"> 71 </span> : : #define MS_PTYPE_RISER_CARD 0x8000</a>
-<a name="72"><span class="lineNum"> 72 </span> : : #define MS_PTYPE_MEM_CARD 0x4000</a>
-<a name="73"><span class="lineNum"> 73 </span> : : #define MS_PTYPE_CEC_FRU 0x2000</a>
-<a name="74"><span class="lineNum"> 74 </span> : : #define MS_PTYPE_HYBRID_CARD 0x1000</a>
-<a name="75"><span class="lineNum"> 75 </span> : : __be16 parent_type;</a>
-<a name="76"><span class="lineNum"> 76 </span> : : #define MS_AREA_INSTALLED 0x8000</a>
-<a name="77"><span class="lineNum"> 77 </span> : : #define MS_AREA_FUNCTIONAL 0x4000</a>
-<a name="78"><span class="lineNum"> 78 </span> : : #define MS_AREA_SHARED 0x2000</a>
-<a name="79"><span class="lineNum"> 79 </span> : : __be16 flags;</a>
-<a name="80"><span class="lineNum"> 80 </span> : : __be16 share_id;</a>
-<a name="81"><span class="lineNum"> 81 </span> : : } __packed;</a>
-<a name="82"><span class="lineNum"> 82 </span> : : </a>
-<a name="83"><span class="lineNum"> 83 </span> : : </a>
-<a name="84"><span class="lineNum"> 84 </span> : : // FIXME: it should be 9, current HDATs are broken</a>
-<a name="85"><span class="lineNum"> 85 </span> : : #define MSAREA_IDATA_MMIO_IDX 8</a>
-<a name="86"><span class="lineNum"> 86 </span> : : struct HDIF_ms_area_ocmb_mmio {</a>
-<a name="87"><span class="lineNum"> 87 </span> : : __be64 range_start;</a>
-<a name="88"><span class="lineNum"> 88 </span> : : __be64 range_end;</a>
-<a name="89"><span class="lineNum"> 89 </span> : : __be32 controller_id;</a>
-<a name="90"><span class="lineNum"> 90 </span> : : __be32 proc_chip_id;</a>
-<a name="91"><span class="lineNum"> 91 </span> : : __be64 hbrt_id;</a>
-<a name="92"><span class="lineNum"> 92 </span> : : #define OCMB_SCOM_8BYTE_ACCESS PPC_BIT(0)</a>
-<a name="93"><span class="lineNum"> 93 </span> : : #define OCMB_SCOM_4BYTE_ACCESS PPC_BIT(1)</a>
-<a name="94"><span class="lineNum"> 94 </span> : : __be64 flags;</a>
-<a name="95"><span class="lineNum"> 95 </span> : : } __packed;</a>
-<a name="96"><span class="lineNum"> 96 </span> : : </a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 3 : static void append_chip_id(struct dt_node *mem, u32 id)</span></a>
-<a name="98"><span class="lineNum"> 98 </span> : : {</a>
-<a name="99"><span class="lineNum"> 99 </span> : : struct dt_property *prop;</a>
-<a name="100"><span class="lineNum"> 100 </span> : : size_t len, i;</a>
-<a name="101"><span class="lineNum"> 101 </span> : : </a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 3 : prop = __dt_find_property(mem, &quot;ibm,chip-id&quot;);</span></a>
-<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 3 : if (!prop)</span></a>
-<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 3 : return;</span></a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 3 : len = prop-&gt;len &gt;&gt; 2;</span></a>
-<a name="106"><span class="lineNum"> 106 </span> : : </a>
-<a name="107"><span class="lineNum"> 107 </span> : : /* Check if it exists already */</a>
-<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 3 : for (i = 0; i &lt; len; i++) {</span></a>
-<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 3 : if (dt_property_get_cell(prop, i) == id)</span></a>
-<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 3 : return;</span></a>
-<a name="111"><span class="lineNum"> 111 </span> : : }</a>
-<a name="112"><span class="lineNum"> 112 </span> : : </a>
-<a name="113"><span class="lineNum"> 113 </span> : : /* Add it to the list */</a>
-<a name="114"><span class="lineNum"> 114 </span> :<span class="lineNoCov"> 0 : dt_resize_property(&amp;prop, (len + 1) &lt;&lt; 2);</span></a>
-<a name="115"><span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : dt_property_set_cell(prop, len, id);</span></a>
-<a name="116"><span class="lineNum"> 116 </span> : : }</a>
-<a name="117"><span class="lineNum"> 117 </span> : : </a>
-<a name="118"><span class="lineNum"> 118 </span> :<span class="lineNoCov"> 0 : static void update_status(struct dt_node *mem, uint32_t status)</span></a>
-<a name="119"><span class="lineNum"> 119 </span> : : {</a>
-<a name="120"><span class="lineNum"> 120 </span> :<span class="lineNoCov"> 0 : switch (status) {</span></a>
-<a name="121"><span class="lineNum"> 121 </span> :<span class="lineNoCov"> 0 : case PHYS_ATTR_STATUS_CANT_SAVE:</span></a>
-<a name="122"><span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : if (!dt_find_property(mem, &quot;save-trigged-unarmed&quot;))</span></a>
-<a name="123"><span class="lineNum"> 123 </span> :<span class="lineNoCov"> 0 : dt_add_property(mem, &quot;save-trigger-unarmed&quot;, NULL, 0);</span></a>
-<a name="124"><span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="125"><span class="lineNum"> 125 </span> : : </a>
-<a name="126"><span class="lineNum"> 126 </span> :<span class="lineNoCov"> 0 : case PHYS_ATTR_STATUS_SAVE_FAILED:</span></a>
-<a name="127"><span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : if (!dt_find_property(mem, &quot;save-failed&quot;))</span></a>
-<a name="128"><span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : dt_add_property(mem, &quot;save-failed&quot;, NULL, 0);</span></a>
-<a name="129"><span class="lineNum"> 129 </span> : : </a>
-<a name="130"><span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="56"><span class="lineNum"> 56 </span> : : #define PHYS_ATTR_STATUS_ENCRYPTED 0x10</a>
+<a name="57"><span class="lineNum"> 57 </span> : : #define PHYS_ATTR_STATUS_ERR_DETECTED 0x40</a>
+<a name="58"><span class="lineNum"> 58 </span> : : #define PHYS_ATTR_STATUS_MEM_INVALID 0xff</a>
+<a name="59"><span class="lineNum"> 59 </span> : : </a>
+<a name="60"><span class="lineNum"> 60 </span> : : /* Memory Controller ID for Nimbus P9 systems */</a>
+<a name="61"><span class="lineNum"> 61 </span> : : #define MS_CONTROLLER_MCBIST_ID(id) GETFIELD(PPC_BITMASK32(0, 1), id)</a>
+<a name="62"><span class="lineNum"> 62 </span> : : #define MS_CONTROLLER_MCS_ID(id) GETFIELD(PPC_BITMASK32(4, 7), id)</a>
+<a name="63"><span class="lineNum"> 63 </span> : : #define MS_CONTROLLER_MCA_ID(id) GETFIELD(PPC_BITMASK32(8, 15), id)</a>
+<a name="64"><span class="lineNum"> 64 </span> : : </a>
+<a name="65"><span class="lineNum"> 65 </span> : : /* Memory Controller ID for P9 AXONE systems */</a>
+<a name="66"><span class="lineNum"> 66 </span> : : #define MS_CONTROLLER_MC_ID(id) GETFIELD(PPC_BITMASK32(0, 1), id)</a>
+<a name="67"><span class="lineNum"> 67 </span> : : #define MS_CONTROLLER_MI_ID(id) GETFIELD(PPC_BITMASK32(4, 7), id)</a>
+<a name="68"><span class="lineNum"> 68 </span> : : #define MS_CONTROLLER_MCC_ID(id) GETFIELD(PPC_BITMASK32(8, 15), id)</a>
+<a name="69"><span class="lineNum"> 69 </span> : : #define MS_CONTROLLER_OMI_ID(id) GETFIELD(PPC_BITMASK32(16, 31), id)</a>
+<a name="70"><span class="lineNum"> 70 </span> : : </a>
+<a name="71"><span class="lineNum"> 71 </span> : : struct HDIF_ms_area_id {</a>
+<a name="72"><span class="lineNum"> 72 </span> : : __be16 id;</a>
+<a name="73"><span class="lineNum"> 73 </span> : : #define MS_PTYPE_RISER_CARD 0x8000</a>
+<a name="74"><span class="lineNum"> 74 </span> : : #define MS_PTYPE_MEM_CARD 0x4000</a>
+<a name="75"><span class="lineNum"> 75 </span> : : #define MS_PTYPE_CEC_FRU 0x2000</a>
+<a name="76"><span class="lineNum"> 76 </span> : : #define MS_PTYPE_HYBRID_CARD 0x1000</a>
+<a name="77"><span class="lineNum"> 77 </span> : : __be16 parent_type;</a>
+<a name="78"><span class="lineNum"> 78 </span> : : #define MS_AREA_INSTALLED 0x8000</a>
+<a name="79"><span class="lineNum"> 79 </span> : : #define MS_AREA_FUNCTIONAL 0x4000</a>
+<a name="80"><span class="lineNum"> 80 </span> : : #define MS_AREA_SHARED 0x2000</a>
+<a name="81"><span class="lineNum"> 81 </span> : : __be16 flags;</a>
+<a name="82"><span class="lineNum"> 82 </span> : : __be16 share_id;</a>
+<a name="83"><span class="lineNum"> 83 </span> : : } __packed;</a>
+<a name="84"><span class="lineNum"> 84 </span> : : </a>
+<a name="85"><span class="lineNum"> 85 </span> : : </a>
+<a name="86"><span class="lineNum"> 86 </span> : : // FIXME: it should be 9, current HDATs are broken</a>
+<a name="87"><span class="lineNum"> 87 </span> : : #define MSAREA_IDATA_MMIO_IDX 8</a>
+<a name="88"><span class="lineNum"> 88 </span> : : struct HDIF_ms_area_ocmb_mmio {</a>
+<a name="89"><span class="lineNum"> 89 </span> : : __be64 range_start;</a>
+<a name="90"><span class="lineNum"> 90 </span> : : __be64 range_end;</a>
+<a name="91"><span class="lineNum"> 91 </span> : : __be32 controller_id;</a>
+<a name="92"><span class="lineNum"> 92 </span> : : __be32 proc_chip_id;</a>
+<a name="93"><span class="lineNum"> 93 </span> : : __be64 hbrt_id;</a>
+<a name="94"><span class="lineNum"> 94 </span> : : #define OCMB_SCOM_8BYTE_ACCESS PPC_BIT(0)</a>
+<a name="95"><span class="lineNum"> 95 </span> : : #define OCMB_SCOM_4BYTE_ACCESS PPC_BIT(1)</a>
+<a name="96"><span class="lineNum"> 96 </span> : : __be64 flags;</a>
+<a name="97"><span class="lineNum"> 97 </span> : : } __packed;</a>
+<a name="98"><span class="lineNum"> 98 </span> : : </a>
+<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 3 : static void append_chip_id(struct dt_node *mem, u32 id)</span></a>
+<a name="100"><span class="lineNum"> 100 </span> : : {</a>
+<a name="101"><span class="lineNum"> 101 </span> : : struct dt_property *prop;</a>
+<a name="102"><span class="lineNum"> 102 </span> : : size_t len, i;</a>
+<a name="103"><span class="lineNum"> 103 </span> : : </a>
+<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 3 : prop = __dt_find_property(mem, &quot;ibm,chip-id&quot;);</span></a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 3 : if (!prop)</span></a>
+<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 3 : return;</span></a>
+<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 3 : len = prop-&gt;len &gt;&gt; 2;</span></a>
+<a name="108"><span class="lineNum"> 108 </span> : : </a>
+<a name="109"><span class="lineNum"> 109 </span> : : /* Check if it exists already */</a>
+<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 3 : for (i = 0; i &lt; len; i++) {</span></a>
+<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 3 : if (dt_property_get_cell(prop, i) == id)</span></a>
+<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 3 : return;</span></a>
+<a name="113"><span class="lineNum"> 113 </span> : : }</a>
+<a name="114"><span class="lineNum"> 114 </span> : : </a>
+<a name="115"><span class="lineNum"> 115 </span> : : /* Add it to the list */</a>
+<a name="116"><span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : dt_resize_property(&amp;prop, (len + 1) &lt;&lt; 2);</span></a>
+<a name="117"><span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : dt_property_set_cell(prop, len, id);</span></a>
+<a name="118"><span class="lineNum"> 118 </span> : : }</a>
+<a name="119"><span class="lineNum"> 119 </span> : : </a>
+<a name="120"><span class="lineNum"> 120 </span> :<span class="lineNoCov"> 0 : static void update_status(struct dt_node *mem, uint32_t status)</span></a>
+<a name="121"><span class="lineNum"> 121 </span> : : {</a>
+<a name="122"><span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : switch (status) {</span></a>
+<a name="123"><span class="lineNum"> 123 </span> :<span class="lineNoCov"> 0 : case PHYS_ATTR_STATUS_CANT_SAVE:</span></a>
+<a name="124"><span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : if (!dt_find_property(mem, &quot;save-trigged-unarmed&quot;))</span></a>
+<a name="125"><span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : dt_add_property(mem, &quot;save-trigger-unarmed&quot;, NULL, 0);</span></a>
+<a name="126"><span class="lineNum"> 126 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="127"><span class="lineNum"> 127 </span> : : </a>
+<a name="128"><span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : case PHYS_ATTR_STATUS_SAVE_FAILED:</span></a>
+<a name="129"><span class="lineNum"> 129 </span> :<span class="lineNoCov"> 0 : if (!dt_find_property(mem, &quot;save-failed&quot;))</span></a>
+<a name="130"><span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : dt_add_property(mem, &quot;save-failed&quot;, NULL, 0);</span></a>
<a name="131"><span class="lineNum"> 131 </span> : : </a>
-<a name="132"><span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : case PHYS_ATTR_STATUS_MEM_INVALID:</span></a>
-<a name="133"><span class="lineNum"> 133 </span> :<span class="lineNoCov"> 0 : if (dt_find_property(mem, &quot;save-trigged-unarmed&quot;))</span></a>
-<a name="134"><span class="lineNum"> 134 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(mem, &quot;status&quot;,</span></a>
-<a name="135"><span class="lineNum"> 135 </span> : : &quot;disabled-memory-invalid&quot;);</a>
-<a name="136"><span class="lineNum"> 136 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="137"><span class="lineNum"> 137 </span> : : }</a>
-<a name="138"><span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : }</span></a>
-<a name="139"><span class="lineNum"> 139 </span> : : </a>
-<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 6 : static bool add_address_range(struct dt_node *root,</span></a>
-<a name="141"><span class="lineNum"> 141 </span> : : const struct HDIF_ms_area_id *id,</a>
-<a name="142"><span class="lineNum"> 142 </span> : : const struct HDIF_ms_area_address_range *arange,</a>
-<a name="143"><span class="lineNum"> 143 </span> : : uint32_t mem_type, uint32_t mem_status)</a>
-<a name="144"><span class="lineNum"> 144 </span> : : {</a>
-<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 6 : const char *compat = NULL, *dev_type = NULL, *name = NULL;</span></a>
-<a name="146"><span class="lineNum"> 146 </span> : : struct dt_node *mem;</a>
-<a name="147"><span class="lineNum"> 147 </span> : : u32 chip_id;</a>
-<a name="148"><span class="lineNum"> 148 </span> : : u64 reg[2];</a>
-<a name="149"><span class="lineNum"> 149 </span> : : </a>
-<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 6 : chip_id = pcid_to_chip_id(be32_to_cpu(arange-&gt;chip));</span></a>
+<a name="132"><span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="133"><span class="lineNum"> 133 </span> : : </a>
+<a name="134"><span class="lineNum"> 134 </span> :<span class="lineNoCov"> 0 : case PHYS_ATTR_STATUS_MEM_INVALID:</span></a>
+<a name="135"><span class="lineNum"> 135 </span> :<span class="lineNoCov"> 0 : if (dt_find_property(mem, &quot;save-trigged-unarmed&quot;))</span></a>
+<a name="136"><span class="lineNum"> 136 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(mem, &quot;status&quot;,</span></a>
+<a name="137"><span class="lineNum"> 137 </span> : : &quot;disabled-memory-invalid&quot;);</a>
+<a name="138"><span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="139"><span class="lineNum"> 139 </span> : : }</a>
+<a name="140"><span class="lineNum"> 140 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="141"><span class="lineNum"> 141 </span> : : </a>
+<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 6 : static bool add_address_range(struct dt_node *root,</span></a>
+<a name="143"><span class="lineNum"> 143 </span> : : const struct HDIF_ms_area_id *id,</a>
+<a name="144"><span class="lineNum"> 144 </span> : : const struct HDIF_ms_area_address_range *arange,</a>
+<a name="145"><span class="lineNum"> 145 </span> : : uint32_t mem_type, uint32_t mem_status)</a>
+<a name="146"><span class="lineNum"> 146 </span> : : {</a>
+<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 6 : const char *compat = NULL, *dev_type = NULL, *name = NULL;</span></a>
+<a name="148"><span class="lineNum"> 148 </span> : : struct dt_node *mem;</a>
+<a name="149"><span class="lineNum"> 149 </span> : : u32 chip_id;</a>
+<a name="150"><span class="lineNum"> 150 </span> : : u64 reg[2];</a>
<a name="151"><span class="lineNum"> 151 </span> : : </a>
-<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 6 : prlog(PR_DEBUG, &quot; Range: 0x%016llx..0x%016llx &quot;</span></a>
-<a name="153"><span class="lineNum"> 153 </span> : : &quot;on Chip 0x%x mattr: 0x%x pattr: 0x%x status:0x%x\n&quot;,</a>
-<a name="154"><span class="lineNum"> 154 </span> : : (long long)be64_to_cpu(arange-&gt;start),</a>
-<a name="155"><span class="lineNum"> 155 </span> : : (long long)be64_to_cpu(arange-&gt;end),</a>
-<a name="156"><span class="lineNum"> 156 </span> : : chip_id, be32_to_cpu(arange-&gt;mirror_attr),</a>
-<a name="157"><span class="lineNum"> 157 </span> : : mem_type, mem_status);</a>
-<a name="158"><span class="lineNum"> 158 </span> : : </a>
-<a name="159"><span class="lineNum"> 159 </span> : : /* reg contains start and length */</a>
-<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 6 : reg[0] = cleanup_addr(be64_to_cpu(arange-&gt;start));</span></a>
-<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 6 : reg[1] = cleanup_addr(be64_to_cpu(arange-&gt;end)) - reg[0];</span></a>
-<a name="162"><span class="lineNum"> 162 </span> : : </a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 6 : switch (mem_type) {</span></a>
-<a name="164"><span class="lineNum"> 164 </span> :<span class="lineCov"> 6 : case PHYS_ATTR_TYPE_STD:</span></a>
-<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 6 : name = &quot;memory&quot;;</span></a>
-<a name="166"><span class="lineNum"> 166 </span> :<span class="lineCov"> 6 : dev_type = &quot;memory&quot;;</span></a>
-<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="168"><span class="lineNum"> 168 </span> : : </a>
-<a name="169"><span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : case PHYS_ATTR_TYPE_NVDIMM:</span></a>
-<a name="170"><span class="lineNum"> 170 </span> : : case PHYS_ATTR_TYPE_MRAM:</a>
-<a name="171"><span class="lineNum"> 171 </span> : : case PHYS_ATTR_TYPE_PCM:</a>
-<a name="172"><span class="lineNum"> 172 </span> : : /* fall through */</a>
-<a name="173"><span class="lineNum"> 173 </span> :<span class="lineNoCov"> 0 : name = &quot;nvdimm&quot;;</span></a>
-<a name="174"><span class="lineNum"> 174 </span> :<span class="lineNoCov"> 0 : compat = &quot;pmem-region&quot;;</span></a>
-<a name="175"><span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="176"><span class="lineNum"> 176 </span> : : </a>
-<a name="177"><span class="lineNum"> 177 </span> : : /*</a>
-<a name="178"><span class="lineNum"> 178 </span> : : * Future memory types could be volatile or non-volatile. Bail if don't</a>
-<a name="179"><span class="lineNum"> 179 </span> : : * recognise the type so we don't end up trashing data accidently.</a>
-<a name="180"><span class="lineNum"> 180 </span> : : */</a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : default:</span></a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="183"><span class="lineNum"> 183 </span> : : }</a>
-<a name="184"><span class="lineNum"> 184 </span> : : </a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 6 : if (be16_to_cpu(id-&gt;flags) &amp; MS_AREA_SHARED) {</span></a>
-<a name="186"><span class="lineNum"> 186 </span> :<span class="lineCov"> 6 : mem = dt_find_by_name_addr(dt_root, name, reg[0]);</span></a>
-<a name="187"><span class="lineNum"> 187 </span> :<span class="lineCov"> 6 : if (mem) {</span></a>
-<a name="188"><span class="lineNum"> 188 </span> :<span class="lineCov"> 3 : append_chip_id(mem, chip_id);</span></a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 3 : if (mem_type == PHYS_ATTR_TYPE_NVDIMM)</span></a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : update_status(mem, mem_status);</span></a>
-<a name="191"><span class="lineNum"> 191 </span> :<span class="lineCov"> 3 : return true;</span></a>
-<a name="192"><span class="lineNum"> 192 </span> : : }</a>
-<a name="193"><span class="lineNum"> 193 </span> : : }</a>
-<a name="194"><span class="lineNum"> 194 </span> : : </a>
-<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 3 : mem = dt_new_addr(root, name, reg[0]);</span></a>
-<a name="196"><span class="lineNum"> 196 </span> :<span class="lineCov"> 3 : if (compat)</span></a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(mem, &quot;compatible&quot;, compat);</span></a>
-<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 3 : if (dev_type)</span></a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineCov"> 3 : dt_add_property_string(mem, &quot;device_type&quot;, dev_type);</span></a>
-<a name="200"><span class="lineNum"> 200 </span> : : </a>
-<a name="201"><span class="lineNum"> 201 </span> : : /* add in the nvdimm backup status flags */</a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineCov"> 3 : if (mem_type == PHYS_ATTR_TYPE_NVDIMM)</span></a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : update_status(mem, mem_status);</span></a>
-<a name="204"><span class="lineNum"> 204 </span> : : </a>
-<a name="205"><span class="lineNum"> 205 </span> : : /* common properties */</a>
+<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 6 : chip_id = pcid_to_chip_id(be32_to_cpu(arange-&gt;chip));</span></a>
+<a name="153"><span class="lineNum"> 153 </span> : : </a>
+<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 6 : prlog(PR_DEBUG, &quot; Range: 0x%016llx..0x%016llx &quot;</span></a>
+<a name="155"><span class="lineNum"> 155 </span> : : &quot;on Chip 0x%x mattr: 0x%x pattr: 0x%x status:0x%x\n&quot;,</a>
+<a name="156"><span class="lineNum"> 156 </span> : : (long long)be64_to_cpu(arange-&gt;start),</a>
+<a name="157"><span class="lineNum"> 157 </span> : : (long long)be64_to_cpu(arange-&gt;end),</a>
+<a name="158"><span class="lineNum"> 158 </span> : : chip_id, be32_to_cpu(arange-&gt;mirror_attr),</a>
+<a name="159"><span class="lineNum"> 159 </span> : : mem_type, mem_status);</a>
+<a name="160"><span class="lineNum"> 160 </span> : : </a>
+<a name="161"><span class="lineNum"> 161 </span> : : /* reg contains start and length */</a>
+<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 6 : reg[0] = cleanup_addr(be64_to_cpu(arange-&gt;start));</span></a>
+<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 6 : reg[1] = cleanup_addr(be64_to_cpu(arange-&gt;end)) - reg[0];</span></a>
+<a name="164"><span class="lineNum"> 164 </span> : : </a>
+<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 6 : switch (mem_type) {</span></a>
+<a name="166"><span class="lineNum"> 166 </span> :<span class="lineCov"> 6 : case PHYS_ATTR_TYPE_STD:</span></a>
+<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 6 : name = &quot;memory&quot;;</span></a>
+<a name="168"><span class="lineNum"> 168 </span> :<span class="lineCov"> 6 : dev_type = &quot;memory&quot;;</span></a>
+<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 6 : break;</span></a>
+<a name="170"><span class="lineNum"> 170 </span> : : </a>
+<a name="171"><span class="lineNum"> 171 </span> :<span class="lineNoCov"> 0 : case PHYS_ATTR_TYPE_NVDIMM:</span></a>
+<a name="172"><span class="lineNum"> 172 </span> : : case PHYS_ATTR_TYPE_MRAM:</a>
+<a name="173"><span class="lineNum"> 173 </span> : : case PHYS_ATTR_TYPE_PCM:</a>
+<a name="174"><span class="lineNum"> 174 </span> : : /* fall through */</a>
+<a name="175"><span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : name = &quot;nvdimm&quot;;</span></a>
+<a name="176"><span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : compat = &quot;pmem-region&quot;;</span></a>
+<a name="177"><span class="lineNum"> 177 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="178"><span class="lineNum"> 178 </span> : : </a>
+<a name="179"><span class="lineNum"> 179 </span> : : /*</a>
+<a name="180"><span class="lineNum"> 180 </span> : : * Future memory types could be volatile or non-volatile. Bail if don't</a>
+<a name="181"><span class="lineNum"> 181 </span> : : * recognise the type so we don't end up trashing data accidently.</a>
+<a name="182"><span class="lineNum"> 182 </span> : : */</a>
+<a name="183"><span class="lineNum"> 183 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="184"><span class="lineNum"> 184 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="185"><span class="lineNum"> 185 </span> : : }</a>
+<a name="186"><span class="lineNum"> 186 </span> : : </a>
+<a name="187"><span class="lineNum"> 187 </span> :<span class="lineCov"> 6 : if (be16_to_cpu(id-&gt;flags) &amp; MS_AREA_SHARED) {</span></a>
+<a name="188"><span class="lineNum"> 188 </span> :<span class="lineCov"> 6 : mem = dt_find_by_name_addr(dt_root, name, reg[0]);</span></a>
+<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 6 : if (mem) {</span></a>
+<a name="190"><span class="lineNum"> 190 </span> :<span class="lineCov"> 3 : append_chip_id(mem, chip_id);</span></a>
+<a name="191"><span class="lineNum"> 191 </span> :<span class="lineCov"> 3 : if (mem_type == PHYS_ATTR_TYPE_NVDIMM)</span></a>
+<a name="192"><span class="lineNum"> 192 </span> :<span class="lineNoCov"> 0 : update_status(mem, mem_status);</span></a>
+<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 3 : return true;</span></a>
+<a name="194"><span class="lineNum"> 194 </span> : : }</a>
+<a name="195"><span class="lineNum"> 195 </span> : : }</a>
+<a name="196"><span class="lineNum"> 196 </span> : : </a>
+<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 3 : mem = dt_new_addr(root, name, reg[0]);</span></a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 3 : if (compat)</span></a>
+<a name="199"><span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(mem, &quot;compatible&quot;, compat);</span></a>
+<a name="200"><span class="lineNum"> 200 </span> :<span class="lineCov"> 3 : if (dev_type)</span></a>
+<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 3 : dt_add_property_string(mem, &quot;device_type&quot;, dev_type);</span></a>
+<a name="202"><span class="lineNum"> 202 </span> : : </a>
+<a name="203"><span class="lineNum"> 203 </span> : : /* add in the nvdimm backup status flags */</a>
+<a name="204"><span class="lineNum"> 204 </span> :<span class="lineCov"> 3 : if (mem_type == PHYS_ATTR_TYPE_NVDIMM)</span></a>
+<a name="205"><span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : update_status(mem, mem_status);</span></a>
<a name="206"><span class="lineNum"> 206 </span> : : </a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 3 : dt_add_property_u64s(mem, &quot;reg&quot;, reg[0], reg[1]);</span></a>
-<a name="208"><span class="lineNum"> 208 </span> :<span class="lineCov"> 3 : dt_add_property_cells(mem, &quot;ibm,chip-id&quot;, chip_id);</span></a>
-<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 3 : return true;</span></a>
-<a name="210"><span class="lineNum"> 210 </span> : : }</a>
-<a name="211"><span class="lineNum"> 211 </span> : : </a>
-<a name="212"><span class="lineNum"> 212 </span> :<span class="lineCov"> 6 : static u32 add_chip_id_to_ram_area(const struct HDIF_common_hdr *msarea,</span></a>
-<a name="213"><span class="lineNum"> 213 </span> : : struct dt_node *ram_area)</a>
-<a name="214"><span class="lineNum"> 214 </span> : : {</a>
-<a name="215"><span class="lineNum"> 215 </span> : : const struct HDIF_array_hdr *arr;</a>
-<a name="216"><span class="lineNum"> 216 </span> : : const struct HDIF_ms_area_address_range *arange;</a>
-<a name="217"><span class="lineNum"> 217 </span> : : unsigned int size;</a>
-<a name="218"><span class="lineNum"> 218 </span> : : u32 chip_id;</a>
-<a name="219"><span class="lineNum"> 219 </span> : : </a>
-<a name="220"><span class="lineNum"> 220 </span> : : /* Safe to assume pointers are valid here. */</a>
-<a name="221"><span class="lineNum"> 221 </span> :<span class="lineCov"> 6 : arr = HDIF_get_idata(msarea, 4, &amp;size);</span></a>
-<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 6 : arange = (void *)arr + be32_to_cpu(arr-&gt;offset);</span></a>
-<a name="223"><span class="lineNum"> 223 </span> :<span class="lineCov"> 6 : chip_id = pcid_to_chip_id(be32_to_cpu(arange-&gt;chip));</span></a>
-<a name="224"><span class="lineNum"> 224 </span> :<span class="lineCov"> 6 : dt_add_property_cells(ram_area, &quot;ibm,chip-id&quot;, chip_id);</span></a>
-<a name="225"><span class="lineNum"> 225 </span> : : </a>
-<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 6 : return chip_id;</span></a>
-<a name="227"><span class="lineNum"> 227 </span> : : }</a>
-<a name="228"><span class="lineNum"> 228 </span> : : </a>
-<a name="229"><span class="lineNum"> 229 </span> :<span class="lineCov"> 6 : static void add_bus_freq_to_ram_area(struct dt_node *ram_node, u32 chip_id)</span></a>
-<a name="230"><span class="lineNum"> 230 </span> : : {</a>
-<a name="231"><span class="lineNum"> 231 </span> : : const struct sppcia_cpu_timebase *timebase;</a>
-<a name="232"><span class="lineNum"> 232 </span> :<span class="lineCov"> 6 : bool got_pcia = false;</span></a>
-<a name="233"><span class="lineNum"> 233 </span> : : const void *pcia;</a>
-<a name="234"><span class="lineNum"> 234 </span> : : u64 freq;</a>
-<a name="235"><span class="lineNum"> 235 </span> : : u32 size;</a>
-<a name="236"><span class="lineNum"> 236 </span> : : </a>
-<a name="237"><span class="lineNum"> 237 </span> :<span class="lineCov"> 6 : pcia = get_hdif(&amp;spira.ntuples.pcia, SPPCIA_HDIF_SIG);</span></a>
-<a name="238"><span class="lineNum"> 238 </span> :<span class="lineCov"> 6 : if (!pcia) {</span></a>
-<a name="239"><span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;HDAT: Failed to add memory bus frequency &quot;</span></a>
-<a name="240"><span class="lineNum"> 240 </span> : : &quot;as PCIA does not exist\n&quot;);</a>
-<a name="241"><span class="lineNum"> 241 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="242"><span class="lineNum"> 242 </span> : : }</a>
-<a name="243"><span class="lineNum"> 243 </span> : : </a>
-<a name="244"><span class="lineNum"> 244 </span> :<span class="lineCov"> 26 : for_each_pcia(pcia) {</span></a>
-<a name="245"><span class="lineNum"> 245 </span> : : const struct sppcia_core_unique *id;</a>
-<a name="246"><span class="lineNum"> 246 </span> : : </a>
-<a name="247"><span class="lineNum"> 247 </span> :<span class="lineCov"> 26 : id = HDIF_get_idata(pcia, SPPCIA_IDATA_CORE_UNIQUE, &amp;size);</span></a>
-<a name="248"><span class="lineNum"> 248 </span> :<span class="lineCov"> 26 : if (!id || size &lt; sizeof(*id)) {</span></a>
-<a name="249"><span class="lineNum"> 249 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;HDAT: Bad id size %u @ %p\n&quot;, size, id);</span></a>
-<a name="250"><span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="251"><span class="lineNum"> 251 </span> : : }</a>
-<a name="252"><span class="lineNum"> 252 </span> : : </a>
-<a name="253"><span class="lineNum"> 253 </span> :<span class="lineCov"> 26 : if (chip_id == pcid_to_chip_id(be32_to_cpu(id-&gt;proc_chip_id))) {</span></a>
-<a name="254"><span class="lineNum"> 254 </span> :<span class="lineCov"> 6 : got_pcia = true;</span></a>
-<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="256"><span class="lineNum"> 256 </span> : : }</a>
-<a name="257"><span class="lineNum"> 257 </span> : : }</a>
-<a name="258"><span class="lineNum"> 258 </span> : : </a>
-<a name="259"><span class="lineNum"> 259 </span> :<span class="lineCov"> 6 : if (got_pcia == false)</span></a>
-<a name="260"><span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="261"><span class="lineNum"> 261 </span> : : </a>
-<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 6 : timebase = HDIF_get_idata(pcia, SPPCIA_IDATA_TIMEBASE, &amp;size);</span></a>
-<a name="263"><span class="lineNum"> 263 </span> :<span class="lineCov"> 6 : if (!timebase || size &lt; sizeof(*timebase)) {</span></a>
-<a name="264"><span class="lineNum"> 264 </span> : : /**</a>
-<a name="265"><span class="lineNum"> 265 </span> : : * @fwts-label HDATBadTimebaseSize</a>
-<a name="266"><span class="lineNum"> 266 </span> : : * @fwts-advice HDAT described an invalid size for timebase,</a>
-<a name="267"><span class="lineNum"> 267 </span> : : * which means there's a disagreement between HDAT and OPAL.</a>
-<a name="268"><span class="lineNum"> 268 </span> : : * This is most certainly a firmware bug.</a>
-<a name="269"><span class="lineNum"> 269 </span> : : */</a>
-<a name="270"><span class="lineNum"> 270 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;HDAT: Bad timebase size %u @ %p\n&quot;, size,</span></a>
-<a name="271"><span class="lineNum"> 271 </span> : : timebase);</a>
-<a name="272"><span class="lineNum"> 272 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="273"><span class="lineNum"> 273 </span> : : }</a>
-<a name="274"><span class="lineNum"> 274 </span> : : </a>
-<a name="275"><span class="lineNum"> 275 </span> :<span class="lineCov"> 6 : freq = ((u64)be32_to_cpu(timebase-&gt;memory_bus_frequency)) * 1000000ul;</span></a>
-<a name="276"><span class="lineNum"> 276 </span> :<span class="lineCov"> 6 : dt_add_property_u64(ram_node, &quot;ibm,memory-bus-frequency&quot;, freq);</span></a>
-<a name="277"><span class="lineNum"> 277 </span> : : }</a>
-<a name="278"><span class="lineNum"> 278 </span> : : </a>
-<a name="279"><span class="lineNum"> 279 </span> :<span class="lineCov"> 6 : static void add_size_to_ram_area(struct dt_node *ram_node,</span></a>
-<a name="280"><span class="lineNum"> 280 </span> : : const struct HDIF_common_hdr *ramarea)</a>
-<a name="281"><span class="lineNum"> 281 </span> : : {</a>
-<a name="282"><span class="lineNum"> 282 </span> : : char str[16];</a>
-<a name="283"><span class="lineNum"> 283 </span> : : const struct HDIF_ram_area_size *ram_area_sz;</a>
-<a name="284"><span class="lineNum"> 284 </span> : : </a>
-<a name="285"><span class="lineNum"> 285 </span> : : /* DIMM size */</a>
-<a name="286"><span class="lineNum"> 286 </span> :<span class="lineCov"> 6 : ram_area_sz = HDIF_get_idata(ramarea, 3, NULL);</span></a>
-<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(ram_area_sz))</span></a>
-<a name="288"><span class="lineNum"> 288 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="289"><span class="lineNum"> 289 </span> : : </a>
-<a name="290"><span class="lineNum"> 290 </span> :<span class="lineCov"> 6 : memset(str, 0, 16);</span></a>
-<a name="291"><span class="lineNum"> 291 </span> :<span class="lineCov"> 6 : snprintf(str, 16, &quot;%d&quot;, be32_to_cpu(ram_area_sz-&gt;mb));</span></a>
-<a name="292"><span class="lineNum"> 292 </span> :<span class="lineCov"> 6 : dt_add_property_string(ram_node, &quot;size&quot;, str);</span></a>
-<a name="293"><span class="lineNum"> 293 </span> : : }</a>
-<a name="294"><span class="lineNum"> 294 </span> : : </a>
-<a name="295"><span class="lineNum"> 295 </span> :<span class="lineCov"> 6 : static void vpd_add_ram_area(const struct HDIF_common_hdr *msarea)</span></a>
-<a name="296"><span class="lineNum"> 296 </span> : : {</a>
-<a name="297"><span class="lineNum"> 297 </span> : : unsigned int i;</a>
-<a name="298"><span class="lineNum"> 298 </span> : : unsigned int ram_sz;</a>
-<a name="299"><span class="lineNum"> 299 </span> : : const struct HDIF_common_hdr *ramarea;</a>
-<a name="300"><span class="lineNum"> 300 </span> : : const struct HDIF_child_ptr *ramptr;</a>
-<a name="301"><span class="lineNum"> 301 </span> : : const struct HDIF_ram_area_id *ram_id;</a>
-<a name="302"><span class="lineNum"> 302 </span> : : struct dt_node *ram_node;</a>
-<a name="303"><span class="lineNum"> 303 </span> : : u32 chip_id;</a>
-<a name="304"><span class="lineNum"> 304 </span> : : const void *vpd_blob;</a>
-<a name="305"><span class="lineNum"> 305 </span> : : </a>
-<a name="306"><span class="lineNum"> 306 </span> :<span class="lineCov"> 6 : ramptr = HDIF_child_arr(msarea, 0);</span></a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(ramptr)) {</span></a>
-<a name="308"><span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS AREA: No RAM area at %p\n&quot;, msarea);</span></a>
-<a name="309"><span class="lineNum"> 309 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="310"><span class="lineNum"> 310 </span> : : }</a>
-<a name="311"><span class="lineNum"> 311 </span> : : </a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 12 : for (i = 0; i &lt; be32_to_cpu(ramptr-&gt;count); i++) {</span></a>
-<a name="313"><span class="lineNum"> 313 </span> :<span class="lineCov"> 6 : ramarea = HDIF_child(msarea, ramptr, i, &quot;RAM &quot;);</span></a>
-<a name="314"><span class="lineNum"> 314 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(ramarea))</span></a>
-<a name="315"><span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="316"><span class="lineNum"> 316 </span> : : </a>
-<a name="317"><span class="lineNum"> 317 </span> :<span class="lineCov"> 6 : ram_id = HDIF_get_idata(ramarea, 2, &amp;ram_sz);</span></a>
-<a name="318"><span class="lineNum"> 318 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(ram_id))</span></a>
-<a name="319"><span class="lineNum"> 319 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="320"><span class="lineNum"> 320 </span> : : </a>
-<a name="321"><span class="lineNum"> 321 </span> : : /* Don't add VPD for non-existent RAM */</a>
-<a name="322"><span class="lineNum"> 322 </span> :<span class="lineCov"> 6 : if (!(be16_to_cpu(ram_id-&gt;flags) &amp; RAM_AREA_INSTALLED))</span></a>
-<a name="323"><span class="lineNum"> 323 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="324"><span class="lineNum"> 324 </span> : : </a>
-<a name="325"><span class="lineNum"> 325 </span> :<span class="lineCov"> 6 : ram_node = dt_add_vpd_node(ramarea, 0, 1);</span></a>
-<a name="326"><span class="lineNum"> 326 </span> :<span class="lineCov"> 6 : if (!ram_node)</span></a>
-<a name="327"><span class="lineNum"> 327 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="328"><span class="lineNum"> 328 </span> : : </a>
-<a name="329"><span class="lineNum"> 329 </span> :<span class="lineCov"> 6 : chip_id = add_chip_id_to_ram_area(msarea, ram_node);</span></a>
-<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 6 : add_bus_freq_to_ram_area(ram_node, chip_id);</span></a>
-<a name="331"><span class="lineNum"> 331 </span> : : </a>
-<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 6 : if (ram_sz &gt;= offsetof(struct HDIF_ram_area_id, speed)) {</span></a>
-<a name="333"><span class="lineNum"> 333 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(ram_node, &quot;frequency&quot;,</span></a>
-<a name="334"><span class="lineNum"> 334 </span> : : be32_to_cpu(ram_id-&gt;speed)*1000000);</a>
-<a name="335"><span class="lineNum"> 335 </span> : : }</a>
-<a name="336"><span class="lineNum"> 336 </span> : : </a>
-<a name="337"><span class="lineNum"> 337 </span> :<span class="lineCov"> 6 : vpd_blob = HDIF_get_idata(ramarea, 1, &amp;ram_sz);</span></a>
+<a name="207"><span class="lineNum"> 207 </span> : : /* common properties */</a>
+<a name="208"><span class="lineNum"> 208 </span> : : </a>
+<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 3 : dt_add_property_u64s(mem, &quot;reg&quot;, reg[0], reg[1]);</span></a>
+<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 3 : dt_add_property_cells(mem, &quot;ibm,chip-id&quot;, chip_id);</span></a>
+<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 3 : return true;</span></a>
+<a name="212"><span class="lineNum"> 212 </span> : : }</a>
+<a name="213"><span class="lineNum"> 213 </span> : : </a>
+<a name="214"><span class="lineNum"> 214 </span> :<span class="lineCov"> 6 : static u32 add_chip_id_to_ram_area(const struct HDIF_common_hdr *msarea,</span></a>
+<a name="215"><span class="lineNum"> 215 </span> : : struct dt_node *ram_area)</a>
+<a name="216"><span class="lineNum"> 216 </span> : : {</a>
+<a name="217"><span class="lineNum"> 217 </span> : : const struct HDIF_array_hdr *arr;</a>
+<a name="218"><span class="lineNum"> 218 </span> : : const struct HDIF_ms_area_address_range *arange;</a>
+<a name="219"><span class="lineNum"> 219 </span> : : unsigned int size;</a>
+<a name="220"><span class="lineNum"> 220 </span> : : u32 chip_id;</a>
+<a name="221"><span class="lineNum"> 221 </span> : : </a>
+<a name="222"><span class="lineNum"> 222 </span> : : /* Safe to assume pointers are valid here. */</a>
+<a name="223"><span class="lineNum"> 223 </span> :<span class="lineCov"> 6 : arr = HDIF_get_idata(msarea, 4, &amp;size);</span></a>
+<a name="224"><span class="lineNum"> 224 </span> :<span class="lineCov"> 6 : arange = (void *)arr + be32_to_cpu(arr-&gt;offset);</span></a>
+<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 6 : chip_id = pcid_to_chip_id(be32_to_cpu(arange-&gt;chip));</span></a>
+<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 6 : dt_add_property_cells(ram_area, &quot;ibm,chip-id&quot;, chip_id);</span></a>
+<a name="227"><span class="lineNum"> 227 </span> : : </a>
+<a name="228"><span class="lineNum"> 228 </span> :<span class="lineCov"> 6 : return chip_id;</span></a>
+<a name="229"><span class="lineNum"> 229 </span> : : }</a>
+<a name="230"><span class="lineNum"> 230 </span> : : </a>
+<a name="231"><span class="lineNum"> 231 </span> :<span class="lineCov"> 6 : static void add_bus_freq_to_ram_area(struct dt_node *ram_node, u32 chip_id)</span></a>
+<a name="232"><span class="lineNum"> 232 </span> : : {</a>
+<a name="233"><span class="lineNum"> 233 </span> : : const struct sppcia_cpu_timebase *timebase;</a>
+<a name="234"><span class="lineNum"> 234 </span> :<span class="lineCov"> 6 : bool got_pcia = false;</span></a>
+<a name="235"><span class="lineNum"> 235 </span> : : const void *pcia;</a>
+<a name="236"><span class="lineNum"> 236 </span> : : u64 freq;</a>
+<a name="237"><span class="lineNum"> 237 </span> : : u32 size;</a>
+<a name="238"><span class="lineNum"> 238 </span> : : </a>
+<a name="239"><span class="lineNum"> 239 </span> :<span class="lineCov"> 6 : pcia = get_hdif(&amp;spira.ntuples.pcia, SPPCIA_HDIF_SIG);</span></a>
+<a name="240"><span class="lineNum"> 240 </span> :<span class="lineCov"> 6 : if (!pcia) {</span></a>
+<a name="241"><span class="lineNum"> 241 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;HDAT: Failed to add memory bus frequency &quot;</span></a>
+<a name="242"><span class="lineNum"> 242 </span> : : &quot;as PCIA does not exist\n&quot;);</a>
+<a name="243"><span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="244"><span class="lineNum"> 244 </span> : : }</a>
+<a name="245"><span class="lineNum"> 245 </span> : : </a>
+<a name="246"><span class="lineNum"> 246 </span> :<span class="lineCov"> 26 : for_each_pcia(pcia) {</span></a>
+<a name="247"><span class="lineNum"> 247 </span> : : const struct sppcia_core_unique *id;</a>
+<a name="248"><span class="lineNum"> 248 </span> : : </a>
+<a name="249"><span class="lineNum"> 249 </span> :<span class="lineCov"> 26 : id = HDIF_get_idata(pcia, SPPCIA_IDATA_CORE_UNIQUE, &amp;size);</span></a>
+<a name="250"><span class="lineNum"> 250 </span> :<span class="lineCov"> 26 : if (!id || size &lt; sizeof(*id)) {</span></a>
+<a name="251"><span class="lineNum"> 251 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;HDAT: Bad id size %u @ %p\n&quot;, size, id);</span></a>
+<a name="252"><span class="lineNum"> 252 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="253"><span class="lineNum"> 253 </span> : : }</a>
+<a name="254"><span class="lineNum"> 254 </span> : : </a>
+<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 26 : if (chip_id == pcid_to_chip_id(be32_to_cpu(id-&gt;proc_chip_id))) {</span></a>
+<a name="256"><span class="lineNum"> 256 </span> :<span class="lineCov"> 6 : got_pcia = true;</span></a>
+<a name="257"><span class="lineNum"> 257 </span> :<span class="lineCov"> 6 : break;</span></a>
+<a name="258"><span class="lineNum"> 258 </span> : : }</a>
+<a name="259"><span class="lineNum"> 259 </span> : : }</a>
+<a name="260"><span class="lineNum"> 260 </span> : : </a>
+<a name="261"><span class="lineNum"> 261 </span> :<span class="lineCov"> 6 : if (got_pcia == false)</span></a>
+<a name="262"><span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="263"><span class="lineNum"> 263 </span> : : </a>
+<a name="264"><span class="lineNum"> 264 </span> :<span class="lineCov"> 6 : timebase = HDIF_get_idata(pcia, SPPCIA_IDATA_TIMEBASE, &amp;size);</span></a>
+<a name="265"><span class="lineNum"> 265 </span> :<span class="lineCov"> 6 : if (!timebase || size &lt; sizeof(*timebase)) {</span></a>
+<a name="266"><span class="lineNum"> 266 </span> : : /**</a>
+<a name="267"><span class="lineNum"> 267 </span> : : * @fwts-label HDATBadTimebaseSize</a>
+<a name="268"><span class="lineNum"> 268 </span> : : * @fwts-advice HDAT described an invalid size for timebase,</a>
+<a name="269"><span class="lineNum"> 269 </span> : : * which means there's a disagreement between HDAT and OPAL.</a>
+<a name="270"><span class="lineNum"> 270 </span> : : * This is most certainly a firmware bug.</a>
+<a name="271"><span class="lineNum"> 271 </span> : : */</a>
+<a name="272"><span class="lineNum"> 272 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;HDAT: Bad timebase size %u @ %p\n&quot;, size,</span></a>
+<a name="273"><span class="lineNum"> 273 </span> : : timebase);</a>
+<a name="274"><span class="lineNum"> 274 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="275"><span class="lineNum"> 275 </span> : : }</a>
+<a name="276"><span class="lineNum"> 276 </span> : : </a>
+<a name="277"><span class="lineNum"> 277 </span> :<span class="lineCov"> 6 : freq = ((u64)be32_to_cpu(timebase-&gt;memory_bus_frequency)) * 1000000ul;</span></a>
+<a name="278"><span class="lineNum"> 278 </span> :<span class="lineCov"> 6 : dt_add_property_u64(ram_node, &quot;ibm,memory-bus-frequency&quot;, freq);</span></a>
+<a name="279"><span class="lineNum"> 279 </span> : : }</a>
+<a name="280"><span class="lineNum"> 280 </span> : : </a>
+<a name="281"><span class="lineNum"> 281 </span> :<span class="lineCov"> 6 : static void add_size_to_ram_area(struct dt_node *ram_node,</span></a>
+<a name="282"><span class="lineNum"> 282 </span> : : const struct HDIF_common_hdr *ramarea)</a>
+<a name="283"><span class="lineNum"> 283 </span> : : {</a>
+<a name="284"><span class="lineNum"> 284 </span> : : char str[16];</a>
+<a name="285"><span class="lineNum"> 285 </span> : : const struct HDIF_ram_area_size *ram_area_sz;</a>
+<a name="286"><span class="lineNum"> 286 </span> : : </a>
+<a name="287"><span class="lineNum"> 287 </span> : : /* DIMM size */</a>
+<a name="288"><span class="lineNum"> 288 </span> :<span class="lineCov"> 6 : ram_area_sz = HDIF_get_idata(ramarea, 3, NULL);</span></a>
+<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(ram_area_sz))</span></a>
+<a name="290"><span class="lineNum"> 290 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="291"><span class="lineNum"> 291 </span> : : </a>
+<a name="292"><span class="lineNum"> 292 </span> :<span class="lineCov"> 6 : memset(str, 0, 16);</span></a>
+<a name="293"><span class="lineNum"> 293 </span> :<span class="lineCov"> 6 : snprintf(str, 16, &quot;%d&quot;, be32_to_cpu(ram_area_sz-&gt;mb));</span></a>
+<a name="294"><span class="lineNum"> 294 </span> :<span class="lineCov"> 6 : dt_add_property_string(ram_node, &quot;size&quot;, str);</span></a>
+<a name="295"><span class="lineNum"> 295 </span> : : }</a>
+<a name="296"><span class="lineNum"> 296 </span> : : </a>
+<a name="297"><span class="lineNum"> 297 </span> :<span class="lineCov"> 6 : static void vpd_add_ram_area(const struct HDIF_common_hdr *msarea)</span></a>
+<a name="298"><span class="lineNum"> 298 </span> : : {</a>
+<a name="299"><span class="lineNum"> 299 </span> : : unsigned int i;</a>
+<a name="300"><span class="lineNum"> 300 </span> : : unsigned int ram_sz;</a>
+<a name="301"><span class="lineNum"> 301 </span> : : const struct HDIF_common_hdr *ramarea;</a>
+<a name="302"><span class="lineNum"> 302 </span> : : const struct HDIF_child_ptr *ramptr;</a>
+<a name="303"><span class="lineNum"> 303 </span> : : const struct HDIF_ram_area_id *ram_id;</a>
+<a name="304"><span class="lineNum"> 304 </span> : : struct dt_node *ram_node;</a>
+<a name="305"><span class="lineNum"> 305 </span> : : u32 chip_id;</a>
+<a name="306"><span class="lineNum"> 306 </span> : : const void *vpd_blob;</a>
+<a name="307"><span class="lineNum"> 307 </span> : : </a>
+<a name="308"><span class="lineNum"> 308 </span> :<span class="lineCov"> 6 : ramptr = HDIF_child_arr(msarea, 0);</span></a>
+<a name="309"><span class="lineNum"> 309 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(ramptr)) {</span></a>
+<a name="310"><span class="lineNum"> 310 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS AREA: No RAM area at %p\n&quot;, msarea);</span></a>
+<a name="311"><span class="lineNum"> 311 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="312"><span class="lineNum"> 312 </span> : : }</a>
+<a name="313"><span class="lineNum"> 313 </span> : : </a>
+<a name="314"><span class="lineNum"> 314 </span> :<span class="lineCov"> 12 : for (i = 0; i &lt; be32_to_cpu(ramptr-&gt;count); i++) {</span></a>
+<a name="315"><span class="lineNum"> 315 </span> :<span class="lineCov"> 6 : ramarea = HDIF_child(msarea, ramptr, i, &quot;RAM &quot;);</span></a>
+<a name="316"><span class="lineNum"> 316 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(ramarea))</span></a>
+<a name="317"><span class="lineNum"> 317 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="318"><span class="lineNum"> 318 </span> : : </a>
+<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 6 : ram_id = HDIF_get_idata(ramarea, 2, &amp;ram_sz);</span></a>
+<a name="320"><span class="lineNum"> 320 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(ram_id))</span></a>
+<a name="321"><span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="322"><span class="lineNum"> 322 </span> : : </a>
+<a name="323"><span class="lineNum"> 323 </span> : : /* Don't add VPD for non-existent RAM */</a>
+<a name="324"><span class="lineNum"> 324 </span> :<span class="lineCov"> 6 : if (!(be16_to_cpu(ram_id-&gt;flags) &amp; RAM_AREA_INSTALLED))</span></a>
+<a name="325"><span class="lineNum"> 325 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="326"><span class="lineNum"> 326 </span> : : </a>
+<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 6 : ram_node = dt_add_vpd_node(ramarea, 0, 1);</span></a>
+<a name="328"><span class="lineNum"> 328 </span> :<span class="lineCov"> 6 : if (!ram_node)</span></a>
+<a name="329"><span class="lineNum"> 329 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="330"><span class="lineNum"> 330 </span> : : </a>
+<a name="331"><span class="lineNum"> 331 </span> :<span class="lineCov"> 6 : chip_id = add_chip_id_to_ram_area(msarea, ram_node);</span></a>
+<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 6 : add_bus_freq_to_ram_area(ram_node, chip_id);</span></a>
+<a name="333"><span class="lineNum"> 333 </span> : : </a>
+<a name="334"><span class="lineNum"> 334 </span> :<span class="lineCov"> 6 : if (ram_sz &gt;= offsetof(struct HDIF_ram_area_id, speed)) {</span></a>
+<a name="335"><span class="lineNum"> 335 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(ram_node, &quot;frequency&quot;,</span></a>
+<a name="336"><span class="lineNum"> 336 </span> : : be32_to_cpu(ram_id-&gt;speed)*1000000);</a>
+<a name="337"><span class="lineNum"> 337 </span> : : }</a>
<a name="338"><span class="lineNum"> 338 </span> : : </a>
-<a name="339"><span class="lineNum"> 339 </span> : : /* DIMM size */</a>
-<a name="340"><span class="lineNum"> 340 </span> :<span class="lineCov"> 6 : add_size_to_ram_area(ram_node, ramarea);</span></a>
-<a name="341"><span class="lineNum"> 341 </span> : : /*</a>
-<a name="342"><span class="lineNum"> 342 </span> : : * For direct-attached memory we have a DDR &quot;Serial</a>
-<a name="343"><span class="lineNum"> 343 </span> : : * Presence Detection&quot; blob rather than an IBM keyword</a>
-<a name="344"><span class="lineNum"> 344 </span> : : * blob.</a>
-<a name="345"><span class="lineNum"> 345 </span> : : */</a>
-<a name="346"><span class="lineNum"> 346 </span> :<span class="lineCov"> 6 : if (!vpd_valid(vpd_blob, ram_sz))</span></a>
-<a name="347"><span class="lineNum"> 347 </span> :<span class="lineNoCov"> 0 : dt_add_property(ram_node, &quot;spd&quot;, vpd_blob, ram_sz);</span></a>
-<a name="348"><span class="lineNum"> 348 </span> : : }</a>
-<a name="349"><span class="lineNum"> 349 </span> : : }</a>
-<a name="350"><span class="lineNum"> 350 </span> : : </a>
-<a name="351"><span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : static void vpd_parse_spd(struct dt_node *dimm, const char *spd, u32 size)</span></a>
-<a name="352"><span class="lineNum"> 352 </span> : : {</a>
-<a name="353"><span class="lineNum"> 353 </span> : : __be16 *vendor;</a>
-<a name="354"><span class="lineNum"> 354 </span> : : __be32 *sn;</a>
-<a name="355"><span class="lineNum"> 355 </span> : : </a>
-<a name="356"><span class="lineNum"> 356 </span> : : /* SPD is too small */</a>
-<a name="357"><span class="lineNum"> 357 </span> :<span class="lineNoCov"> 0 : if (size &lt; 512) {</span></a>
-<a name="358"><span class="lineNum"> 358 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;MSVPD: Invalid SPD size. &quot;</span></a>
-<a name="359"><span class="lineNum"> 359 </span> : : &quot;Expected 512 bytes, got %d\n&quot;, size);</a>
-<a name="360"><span class="lineNum"> 360 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="361"><span class="lineNum"> 361 </span> : : }</a>
-<a name="362"><span class="lineNum"> 362 </span> : : </a>
-<a name="363"><span class="lineNum"> 363 </span> : : /* Supports DDR4 format pasing only */</a>
-<a name="364"><span class="lineNum"> 364 </span> :<span class="lineNoCov"> 0 : if (spd[0x2] &lt; 0xc) {</span></a>
-<a name="365"><span class="lineNum"> 365 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING,</span></a>
-<a name="366"><span class="lineNum"> 366 </span> : : &quot;MSVPD: SPD format (%x) not supported\n&quot;, spd[0x2]);</a>
-<a name="367"><span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="368"><span class="lineNum"> 368 </span> : : }</a>
-<a name="369"><span class="lineNum"> 369 </span> : : </a>
-<a name="370"><span class="lineNum"> 370 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dimm, &quot;device_type&quot;, &quot;memory-dimm-ddr4&quot;);</span></a>
+<a name="339"><span class="lineNum"> 339 </span> :<span class="lineCov"> 6 : vpd_blob = HDIF_get_idata(ramarea, 1, &amp;ram_sz);</span></a>
+<a name="340"><span class="lineNum"> 340 </span> : : </a>
+<a name="341"><span class="lineNum"> 341 </span> : : /* DIMM size */</a>
+<a name="342"><span class="lineNum"> 342 </span> :<span class="lineCov"> 6 : add_size_to_ram_area(ram_node, ramarea);</span></a>
+<a name="343"><span class="lineNum"> 343 </span> : : /*</a>
+<a name="344"><span class="lineNum"> 344 </span> : : * For direct-attached memory we have a DDR &quot;Serial</a>
+<a name="345"><span class="lineNum"> 345 </span> : : * Presence Detection&quot; blob rather than an IBM keyword</a>
+<a name="346"><span class="lineNum"> 346 </span> : : * blob.</a>
+<a name="347"><span class="lineNum"> 347 </span> : : */</a>
+<a name="348"><span class="lineNum"> 348 </span> :<span class="lineCov"> 6 : if (!vpd_valid(vpd_blob, ram_sz))</span></a>
+<a name="349"><span class="lineNum"> 349 </span> :<span class="lineNoCov"> 0 : dt_add_property(ram_node, &quot;spd&quot;, vpd_blob, ram_sz);</span></a>
+<a name="350"><span class="lineNum"> 350 </span> : : }</a>
+<a name="351"><span class="lineNum"> 351 </span> : : }</a>
+<a name="352"><span class="lineNum"> 352 </span> : : </a>
+<a name="353"><span class="lineNum"> 353 </span> :<span class="lineNoCov"> 0 : static void vpd_parse_spd(struct dt_node *dimm, const char *spd, u32 size)</span></a>
+<a name="354"><span class="lineNum"> 354 </span> : : {</a>
+<a name="355"><span class="lineNum"> 355 </span> : : __be16 *vendor;</a>
+<a name="356"><span class="lineNum"> 356 </span> : : __be32 *sn;</a>
+<a name="357"><span class="lineNum"> 357 </span> : : </a>
+<a name="358"><span class="lineNum"> 358 </span> : : /* SPD is too small */</a>
+<a name="359"><span class="lineNum"> 359 </span> :<span class="lineNoCov"> 0 : if (size &lt; 512) {</span></a>
+<a name="360"><span class="lineNum"> 360 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;MSVPD: Invalid SPD size. &quot;</span></a>
+<a name="361"><span class="lineNum"> 361 </span> : : &quot;Expected 512 bytes, got %d\n&quot;, size);</a>
+<a name="362"><span class="lineNum"> 362 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="363"><span class="lineNum"> 363 </span> : : }</a>
+<a name="364"><span class="lineNum"> 364 </span> : : </a>
+<a name="365"><span class="lineNum"> 365 </span> : : /* Supports DDR4 format pasing only */</a>
+<a name="366"><span class="lineNum"> 366 </span> :<span class="lineNoCov"> 0 : if (spd[0x2] &lt; 0xc) {</span></a>
+<a name="367"><span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING,</span></a>
+<a name="368"><span class="lineNum"> 368 </span> : : &quot;MSVPD: SPD format (%x) not supported\n&quot;, spd[0x2]);</a>
+<a name="369"><span class="lineNum"> 369 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="370"><span class="lineNum"> 370 </span> : : }</a>
<a name="371"><span class="lineNum"> 371 </span> : : </a>
-<a name="372"><span class="lineNum"> 372 </span> : : /* DRAM device type */</a>
-<a name="373"><span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dimm, &quot;memory-id&quot;, spd[0x2]);</span></a>
-<a name="374"><span class="lineNum"> 374 </span> : : </a>
-<a name="375"><span class="lineNum"> 375 </span> : : /* Module revision code */</a>
-<a name="376"><span class="lineNum"> 376 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dimm, &quot;product-version&quot;, spd[0x15d]);</span></a>
-<a name="377"><span class="lineNum"> 377 </span> : : </a>
-<a name="378"><span class="lineNum"> 378 </span> : : /* Serial number */</a>
-<a name="379"><span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : sn = (__be32 *)&amp;spd[0x145];</span></a>
-<a name="380"><span class="lineNum"> 380 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dimm, &quot;serial-number&quot;, be32_to_cpu(*sn));</span></a>
-<a name="381"><span class="lineNum"> 381 </span> : : </a>
-<a name="382"><span class="lineNum"> 382 </span> : : /* Part number */</a>
-<a name="383"><span class="lineNum"> 383 </span> :<span class="lineNoCov"> 0 : dt_add_property_nstr(dimm, &quot;part-number&quot;, &amp;spd[0x149], 20);</span></a>
-<a name="384"><span class="lineNum"> 384 </span> : : </a>
-<a name="385"><span class="lineNum"> 385 </span> : : /* Module manufacturer ID */</a>
-<a name="386"><span class="lineNum"> 386 </span> :<span class="lineNoCov"> 0 : vendor = (__be16 *)&amp;spd[0x140];</span></a>
-<a name="387"><span class="lineNum"> 387 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dimm, &quot;manufacturer-id&quot;, be16_to_cpu(*vendor));</span></a>
-<a name="388"><span class="lineNum"> 388 </span> : : }</a>
-<a name="389"><span class="lineNum"> 389 </span> : : </a>
-<a name="390"><span class="lineNum"> 390 </span> :<span class="lineNoCov"> 0 : static void add_dimm_info(struct dt_node *parent,</span></a>
-<a name="391"><span class="lineNum"> 391 </span> : : const struct HDIF_common_hdr *msarea)</a>
-<a name="392"><span class="lineNum"> 392 </span> : : {</a>
-<a name="393"><span class="lineNum"> 393 </span> : : unsigned int i, size;</a>
-<a name="394"><span class="lineNum"> 394 </span> : : const struct HDIF_child_ptr *ramptr;</a>
-<a name="395"><span class="lineNum"> 395 </span> : : const struct HDIF_common_hdr *ramarea;</a>
-<a name="396"><span class="lineNum"> 396 </span> : : const struct spira_fru_id *fru_id;</a>
-<a name="397"><span class="lineNum"> 397 </span> : : const struct HDIF_ram_area_id *ram_id;</a>
-<a name="398"><span class="lineNum"> 398 </span> : : const struct HDIF_ram_area_size *ram_area_sz;</a>
-<a name="399"><span class="lineNum"> 399 </span> : : struct dt_node *dimm;</a>
-<a name="400"><span class="lineNum"> 400 </span> : : const void *vpd_blob;</a>
-<a name="401"><span class="lineNum"> 401 </span> : : </a>
-<a name="402"><span class="lineNum"> 402 </span> :<span class="lineNoCov"> 0 : ramptr = HDIF_child_arr(msarea, 0);</span></a>
-<a name="403"><span class="lineNum"> 403 </span> :<span class="lineNoCov"> 0 : if (!CHECK_SPPTR(ramptr)) {</span></a>
-<a name="404"><span class="lineNum"> 404 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS AREA: No RAM area at %p\n&quot;, msarea);</span></a>
-<a name="405"><span class="lineNum"> 405 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="406"><span class="lineNum"> 406 </span> : : }</a>
-<a name="407"><span class="lineNum"> 407 </span> : : </a>
-<a name="408"><span class="lineNum"> 408 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; be32_to_cpu(ramptr-&gt;count); i++) {</span></a>
-<a name="409"><span class="lineNum"> 409 </span> :<span class="lineNoCov"> 0 : ramarea = HDIF_child(msarea, ramptr, i, &quot;RAM &quot;);</span></a>
-<a name="410"><span class="lineNum"> 410 </span> :<span class="lineNoCov"> 0 : if (!CHECK_SPPTR(ramarea))</span></a>
-<a name="411"><span class="lineNum"> 411 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="412"><span class="lineNum"> 412 </span> : : </a>
-<a name="413"><span class="lineNum"> 413 </span> :<span class="lineNoCov"> 0 : fru_id = HDIF_get_idata(ramarea, 0, NULL);</span></a>
-<a name="414"><span class="lineNum"> 414 </span> :<span class="lineNoCov"> 0 : if (!fru_id)</span></a>
-<a name="415"><span class="lineNum"> 415 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="416"><span class="lineNum"> 416 </span> : : </a>
-<a name="417"><span class="lineNum"> 417 </span> : : /* Use Resource ID to add dimm node */</a>
-<a name="418"><span class="lineNum"> 418 </span> :<span class="lineNoCov"> 0 : dimm = dt_find_by_name_addr(parent, &quot;dimm&quot;,</span></a>
-<a name="419"><span class="lineNum"> 419 </span> :<span class="lineNoCov"> 0 : be16_to_cpu(fru_id-&gt;rsrc_id));</span></a>
-<a name="420"><span class="lineNum"> 420 </span> :<span class="lineNoCov"> 0 : if (dimm)</span></a>
-<a name="421"><span class="lineNum"> 421 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="422"><span class="lineNum"> 422 </span> :<span class="lineNoCov"> 0 : dimm= dt_new_addr(parent, &quot;dimm&quot;, be16_to_cpu(fru_id-&gt;rsrc_id));</span></a>
-<a name="423"><span class="lineNum"> 423 </span> :<span class="lineNoCov"> 0 : assert(dimm);</span></a>
-<a name="424"><span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dimm, &quot;reg&quot;, be16_to_cpu(fru_id-&gt;rsrc_id));</span></a>
-<a name="425"><span class="lineNum"> 425 </span> : : </a>
-<a name="426"><span class="lineNum"> 426 </span> : : /* Add location code */</a>
-<a name="427"><span class="lineNum"> 427 </span> :<span class="lineNoCov"> 0 : slca_vpd_add_loc_code(dimm, be16_to_cpu(fru_id-&gt;slca_index));</span></a>
-<a name="428"><span class="lineNum"> 428 </span> : : </a>
-<a name="429"><span class="lineNum"> 429 </span> : : /* DIMM size */</a>
-<a name="430"><span class="lineNum"> 430 </span> :<span class="lineNoCov"> 0 : ram_area_sz = HDIF_get_idata(ramarea, 3, NULL);</span></a>
-<a name="431"><span class="lineNum"> 431 </span> :<span class="lineNoCov"> 0 : if (!CHECK_SPPTR(ram_area_sz))</span></a>
-<a name="432"><span class="lineNum"> 432 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="433"><span class="lineNum"> 433 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dimm, &quot;size&quot;, be32_to_cpu(ram_area_sz-&gt;mb));</span></a>
-<a name="434"><span class="lineNum"> 434 </span> : : </a>
-<a name="435"><span class="lineNum"> 435 </span> : : /* DIMM state */</a>
-<a name="436"><span class="lineNum"> 436 </span> :<span class="lineNoCov"> 0 : ram_id = HDIF_get_idata(ramarea, 2, NULL);</span></a>
-<a name="437"><span class="lineNum"> 437 </span> :<span class="lineNoCov"> 0 : if (!CHECK_SPPTR(ram_id))</span></a>
-<a name="438"><span class="lineNum"> 438 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="439"><span class="lineNum"> 439 </span> : : </a>
-<a name="440"><span class="lineNum"> 440 </span> :<span class="lineNoCov"> 0 : if ((be16_to_cpu(ram_id-&gt;flags) &amp; RAM_AREA_INSTALLED) &amp;&amp;</span></a>
-<a name="441"><span class="lineNum"> 441 </span> :<span class="lineNoCov"> 0 : (be16_to_cpu(ram_id-&gt;flags) &amp; RAM_AREA_FUNCTIONAL))</span></a>
-<a name="442"><span class="lineNum"> 442 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dimm, &quot;status&quot;, &quot;okay&quot;);</span></a>
-<a name="443"><span class="lineNum"> 443 </span> : : else</a>
-<a name="444"><span class="lineNum"> 444 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dimm, &quot;status&quot;, &quot;disabled&quot;);</span></a>
-<a name="445"><span class="lineNum"> 445 </span> : : </a>
-<a name="446"><span class="lineNum"> 446 </span> :<span class="lineNoCov"> 0 : vpd_blob = HDIF_get_idata(ramarea, 1, &amp;size);</span></a>
-<a name="447"><span class="lineNum"> 447 </span> :<span class="lineNoCov"> 0 : if (!CHECK_SPPTR(vpd_blob))</span></a>
-<a name="448"><span class="lineNum"> 448 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="449"><span class="lineNum"> 449 </span> :<span class="lineNoCov"> 0 : if (vpd_valid(vpd_blob, size))</span></a>
-<a name="450"><span class="lineNum"> 450 </span> :<span class="lineNoCov"> 0 : vpd_data_parse(dimm, vpd_blob, size);</span></a>
-<a name="451"><span class="lineNum"> 451 </span> : : else</a>
-<a name="452"><span class="lineNum"> 452 </span> :<span class="lineNoCov"> 0 : vpd_parse_spd(dimm, vpd_blob, size);</span></a>
-<a name="453"><span class="lineNum"> 453 </span> : : }</a>
-<a name="454"><span class="lineNum"> 454 </span> : : }</a>
-<a name="455"><span class="lineNum"> 455 </span> : : </a>
-<a name="456"><span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : static inline void dt_add_mem_reg_property(struct dt_node *node, u64 addr)</span></a>
-<a name="457"><span class="lineNum"> 457 </span> : : {</a>
-<a name="458"><span class="lineNum"> 458 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;#address-cells&quot;, 1);</span></a>
-<a name="459"><span class="lineNum"> 459 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;#size-cells&quot;, 0);</span></a>
-<a name="460"><span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;reg&quot;, addr);</span></a>
-<a name="461"><span class="lineNum"> 461 </span> :<span class="lineNoCov"> 0 : }</span></a>
-<a name="462"><span class="lineNum"> 462 </span> : : </a>
-<a name="463"><span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : static void add_memory_controller_p9n(const struct HDIF_common_hdr *msarea,</span></a>
-<a name="464"><span class="lineNum"> 464 </span> : : const struct HDIF_ms_area_address_range *arange)</a>
-<a name="465"><span class="lineNum"> 465 </span> : : {</a>
-<a name="466"><span class="lineNum"> 466 </span> : : uint32_t chip_id;</a>
-<a name="467"><span class="lineNum"> 467 </span> : : uint32_t controller_id, mcbist_id, mcs_id, mca_id;</a>
-<a name="468"><span class="lineNum"> 468 </span> : : struct dt_node *xscom, *mcbist, *mcs, *mca;</a>
-<a name="469"><span class="lineNum"> 469 </span> : : </a>
-<a name="470"><span class="lineNum"> 470 </span> :<span class="lineNoCov"> 0 : chip_id = pcid_to_chip_id(be32_to_cpu(arange-&gt;chip));</span></a>
-<a name="471"><span class="lineNum"> 471 </span> :<span class="lineNoCov"> 0 : controller_id = be32_to_cpu(arange-&gt;controller_id);</span></a>
-<a name="472"><span class="lineNum"> 472 </span> :<span class="lineNoCov"> 0 : xscom = find_xscom_for_chip(chip_id);</span></a>
-<a name="473"><span class="lineNum"> 473 </span> :<span class="lineNoCov"> 0 : if (!xscom) {</span></a>
-<a name="474"><span class="lineNum"> 474 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING,</span></a>
-<a name="475"><span class="lineNum"> 475 </span> : : &quot;MS AREA: Can't find XSCOM for chip %d\n&quot;, chip_id);</a>
-<a name="476"><span class="lineNum"> 476 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="477"><span class="lineNum"> 477 </span> : : }</a>
-<a name="478"><span class="lineNum"> 478 </span> : : </a>
-<a name="479"><span class="lineNum"> 479 </span> :<span class="lineNoCov"> 0 : mcbist_id = MS_CONTROLLER_MCBIST_ID(controller_id);</span></a>
-<a name="480"><span class="lineNum"> 480 </span> :<span class="lineNoCov"> 0 : mcbist = dt_find_by_name_addr(xscom, &quot;mcbist&quot;, mcbist_id);</span></a>
-<a name="481"><span class="lineNum"> 481 </span> :<span class="lineNoCov"> 0 : if (!mcbist) {</span></a>
-<a name="482"><span class="lineNum"> 482 </span> :<span class="lineNoCov"> 0 : mcbist = dt_new_addr(xscom, &quot;mcbist&quot;, mcbist_id);</span></a>
-<a name="483"><span class="lineNum"> 483 </span> :<span class="lineNoCov"> 0 : assert(mcbist);</span></a>
-<a name="484"><span class="lineNum"> 484 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(mcbist, &quot;#address-cells&quot;, 1);</span></a>
-<a name="485"><span class="lineNum"> 485 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(mcbist, &quot;#size-cells&quot;, 0);</span></a>
-<a name="486"><span class="lineNum"> 486 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(mcbist, &quot;reg&quot;, mcbist_id, 0);</span></a>
-<a name="487"><span class="lineNum"> 487 </span> : : }</a>
-<a name="488"><span class="lineNum"> 488 </span> : : </a>
-<a name="489"><span class="lineNum"> 489 </span> :<span class="lineNoCov"> 0 : mcs_id = MS_CONTROLLER_MCS_ID(controller_id);</span></a>
-<a name="490"><span class="lineNum"> 490 </span> :<span class="lineNoCov"> 0 : mcs = dt_find_by_name_addr(mcbist, &quot;mcs&quot;, mcs_id);</span></a>
-<a name="491"><span class="lineNum"> 491 </span> :<span class="lineNoCov"> 0 : if (!mcs) {</span></a>
-<a name="492"><span class="lineNum"> 492 </span> :<span class="lineNoCov"> 0 : mcs = dt_new_addr(mcbist, &quot;mcs&quot;, mcs_id);</span></a>
-<a name="493"><span class="lineNum"> 493 </span> :<span class="lineNoCov"> 0 : assert(mcs);</span></a>
-<a name="494"><span class="lineNum"> 494 </span> :<span class="lineNoCov"> 0 : dt_add_mem_reg_property(mcs, mcs_id);</span></a>
-<a name="495"><span class="lineNum"> 495 </span> : : }</a>
-<a name="496"><span class="lineNum"> 496 </span> : : </a>
-<a name="497"><span class="lineNum"> 497 </span> :<span class="lineNoCov"> 0 : mca_id = MS_CONTROLLER_MCA_ID(controller_id);</span></a>
-<a name="498"><span class="lineNum"> 498 </span> :<span class="lineNoCov"> 0 : mca = dt_find_by_name_addr(mcs, &quot;mca&quot;, mca_id);</span></a>
-<a name="499"><span class="lineNum"> 499 </span> :<span class="lineNoCov"> 0 : if (!mca) {</span></a>
-<a name="500"><span class="lineNum"> 500 </span> :<span class="lineNoCov"> 0 : mca = dt_new_addr(mcs, &quot;mca&quot;, mca_id);</span></a>
-<a name="501"><span class="lineNum"> 501 </span> :<span class="lineNoCov"> 0 : assert(mca);</span></a>
-<a name="502"><span class="lineNum"> 502 </span> :<span class="lineNoCov"> 0 : dt_add_mem_reg_property(mca, mca_id);</span></a>
-<a name="503"><span class="lineNum"> 503 </span> : : }</a>
-<a name="504"><span class="lineNum"> 504 </span> : : </a>
-<a name="505"><span class="lineNum"> 505 </span> :<span class="lineNoCov"> 0 : add_dimm_info(mca, msarea);</span></a>
-<a name="506"><span class="lineNum"> 506 </span> : : }</a>
-<a name="507"><span class="lineNum"> 507 </span> : : </a>
-<a name="508"><span class="lineNum"> 508 </span> :<span class="lineCov"> 6 : static void add_memory_buffer_mmio(const struct HDIF_common_hdr *msarea)</span></a>
-<a name="509"><span class="lineNum"> 509 </span> : : {</a>
-<a name="510"><span class="lineNum"> 510 </span> : : const struct HDIF_ms_area_ocmb_mmio *mmio;</a>
-<a name="511"><span class="lineNum"> 511 </span> :<span class="lineCov"> 6 : uint64_t min_addr = ~0ull, hbrt_id = 0;</span></a>
-<a name="512"><span class="lineNum"> 512 </span> : : const struct HDIF_array_hdr *array;</a>
-<a name="513"><span class="lineNum"> 513 </span> :<span class="lineCov"> 6 : unsigned int i, count, ranges = 0;</span></a>
-<a name="514"><span class="lineNum"> 514 </span> : : struct dt_node *membuf;</a>
-<a name="515"><span class="lineNum"> 515 </span> : : beint64_t *reg, *flags;</a>
-<a name="516"><span class="lineNum"> 516 </span> : : </a>
-<a name="517"><span class="lineNum"> 517 </span> :<span class="lineCov"> 6 : if (PVR_TYPE(mfspr(SPR_PVR)) != PVR_TYPE_P9P)</span></a>
-<a name="518"><span class="lineNum"> 518 </span> :<span class="lineCov"> 6 : return;</span></a>
-<a name="519"><span class="lineNum"> 519 </span> : : </a>
-<a name="520"><span class="lineNum"> 520 </span> :<span class="lineNoCov"> 0 : if (be16_to_cpu(msarea-&gt;version) &lt; 0x50) {</span></a>
-<a name="521"><span class="lineNum"> 521 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;MS AREA: Inconsistent MSAREA version %x for P9P system&quot;,</span></a>
-<a name="522"><span class="lineNum"> 522 </span> : : be16_to_cpu(msarea-&gt;version));</a>
-<a name="523"><span class="lineNum"> 523 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="524"><span class="lineNum"> 524 </span> : : }</a>
-<a name="525"><span class="lineNum"> 525 </span> : : </a>
-<a name="526"><span class="lineNum"> 526 </span> :<span class="lineNoCov"> 0 : array = HDIF_get_iarray(msarea, MSAREA_IDATA_MMIO_IDX, &amp;count);</span></a>
-<a name="527"><span class="lineNum"> 527 </span> :<span class="lineNoCov"> 0 : if (!array || count &lt;= 0) {</span></a>
-<a name="528"><span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS AREA: No OCMB MMIO array at MS Area %p\n&quot;, msarea);</span></a>
-<a name="529"><span class="lineNum"> 529 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="530"><span class="lineNum"> 530 </span> : : }</a>
-<a name="531"><span class="lineNum"> 531 </span> : : </a>
-<a name="532"><span class="lineNum"> 532 </span> :<span class="lineNoCov"> 0 : reg = zalloc(count * 2 * sizeof(*reg));</span></a>
-<a name="533"><span class="lineNum"> 533 </span> :<span class="lineNoCov"> 0 : flags = zalloc(count * sizeof(*flags));</span></a>
-<a name="534"><span class="lineNum"> 534 </span> : : </a>
-<a name="535"><span class="lineNum"> 535 </span> : : /* grab the hbrt id from the first range. */</a>
-<a name="536"><span class="lineNum"> 536 </span> :<span class="lineNoCov"> 0 : HDIF_iarray_for_each(array, i, mmio) {</span></a>
-<a name="537"><span class="lineNum"> 537 </span> :<span class="lineNoCov"> 0 : hbrt_id = be64_to_cpu(mmio-&gt;hbrt_id);</span></a>
-<a name="538"><span class="lineNum"> 538 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="539"><span class="lineNum"> 539 </span> : : }</a>
-<a name="540"><span class="lineNum"> 540 </span> : : </a>
-<a name="541"><span class="lineNum"> 541 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;Adding memory buffer MMIO ranges for %&quot;PRIx64&quot;\n&quot;,</span></a>
-<a name="542"><span class="lineNum"> 542 </span> : : hbrt_id);</a>
-<a name="543"><span class="lineNum"> 543 </span> : : </a>
-<a name="544"><span class="lineNum"> 544 </span> :<span class="lineNoCov"> 0 : HDIF_iarray_for_each(array, i, mmio) {</span></a>
-<a name="545"><span class="lineNum"> 545 </span> : : uint64_t start, end;</a>
-<a name="546"><span class="lineNum"> 546 </span> : : </a>
-<a name="547"><span class="lineNum"> 547 </span> :<span class="lineNoCov"> 0 : if (hbrt_id != be64_to_cpu(mmio-&gt;hbrt_id)) {</span></a>
-<a name="548"><span class="lineNum"> 548 </span> :<span class="lineNoCov"> 0 : prerror(&quot;HBRT ID mismatch!\n&quot;);</span></a>
-<a name="549"><span class="lineNum"> 549 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="550"><span class="lineNum"> 550 </span> : : }</a>
-<a name="551"><span class="lineNum"> 551 </span> : : </a>
-<a name="552"><span class="lineNum"> 552 </span> :<span class="lineNoCov"> 0 : start = cleanup_addr(be64_to_cpu(mmio-&gt;range_start));</span></a>
-<a name="553"><span class="lineNum"> 553 </span> :<span class="lineNoCov"> 0 : end = cleanup_addr(be64_to_cpu(mmio-&gt;range_end));</span></a>
-<a name="554"><span class="lineNum"> 554 </span> :<span class="lineNoCov"> 0 : if (start &lt; min_addr)</span></a>
-<a name="555"><span class="lineNum"> 555 </span> :<span class="lineNoCov"> 0 : min_addr = start;</span></a>
-<a name="556"><span class="lineNum"> 556 </span> : : </a>
-<a name="557"><span class="lineNum"> 557 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot; %&quot;PRIx64&quot; - [%016&quot;PRIx64&quot;-%016&quot;PRIx64&quot;)\n&quot;,</span></a>
-<a name="558"><span class="lineNum"> 558 </span> : : hbrt_id, start, end);</a>
-<a name="559"><span class="lineNum"> 559 </span> : : </a>
-<a name="560"><span class="lineNum"> 560 </span> :<span class="lineNoCov"> 0 : reg[2 * ranges ] = cpu_to_be64(start);</span></a>
-<a name="561"><span class="lineNum"> 561 </span> :<span class="lineNoCov"> 0 : reg[2 * ranges + 1] = cpu_to_be64(end - start + 1);</span></a>
-<a name="562"><span class="lineNum"> 562 </span> :<span class="lineNoCov"> 0 : flags[ranges] = mmio-&gt;flags; /* both are BE */</span></a>
-<a name="563"><span class="lineNum"> 563 </span> :<span class="lineNoCov"> 0 : ranges++;</span></a>
-<a name="564"><span class="lineNum"> 564 </span> : : }</a>
-<a name="565"><span class="lineNum"> 565 </span> : : </a>
-<a name="566"><span class="lineNum"> 566 </span> :<span class="lineNoCov"> 0 : membuf = dt_find_by_name_addr(dt_root, &quot;memory-buffer&quot;, min_addr);</span></a>
-<a name="567"><span class="lineNum"> 567 </span> :<span class="lineNoCov"> 0 : if (membuf) {</span></a>
-<a name="568"><span class="lineNum"> 568 </span> :<span class="lineNoCov"> 0 : prerror(&quot;attempted to duplicate %s\n&quot;, membuf-&gt;name);</span></a>
-<a name="569"><span class="lineNum"> 569 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="570"><span class="lineNum"> 570 </span> : : }</a>
-<a name="571"><span class="lineNum"> 571 </span> : : </a>
-<a name="572"><span class="lineNum"> 572 </span> :<span class="lineNoCov"> 0 : membuf = dt_new_addr(dt_root, &quot;memory-buffer&quot;, min_addr);</span></a>
-<a name="573"><span class="lineNum"> 573 </span> :<span class="lineNoCov"> 0 : assert(membuf);</span></a>
-<a name="574"><span class="lineNum"> 574 </span> : : </a>
-<a name="575"><span class="lineNum"> 575 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(membuf, &quot;compatible&quot;, &quot;ibm,explorer&quot;);</span></a>
-<a name="576"><span class="lineNum"> 576 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(membuf, &quot;ibm,chip-id&quot;, hbrt_id);</span></a>
-<a name="577"><span class="lineNum"> 577 </span> : : </a>
-<a name="578"><span class="lineNum"> 578 </span> : : /*</a>
-<a name="579"><span class="lineNum"> 579 </span> : : * FIXME: We should probably be sorting the address ranges based</a>
-<a name="580"><span class="lineNum"> 580 </span> : : * on the starting address.</a>
-<a name="581"><span class="lineNum"> 581 </span> : : */</a>
-<a name="582"><span class="lineNum"> 582 </span> :<span class="lineNoCov"> 0 : dt_add_property(membuf, &quot;reg&quot;, reg, sizeof(*reg) * 2 * ranges);</span></a>
-<a name="583"><span class="lineNum"> 583 </span> :<span class="lineNoCov"> 0 : dt_add_property(membuf, &quot;flags&quot;, flags, sizeof(*flags) * ranges);</span></a>
-<a name="584"><span class="lineNum"> 584 </span> : : </a>
-<a name="585"><span class="lineNum"> 585 </span> :<span class="lineNoCov"> 0 : out:</span></a>
-<a name="586"><span class="lineNum"> 586 </span> :<span class="lineNoCov"> 0 : free(flags);</span></a>
-<a name="587"><span class="lineNum"> 587 </span> :<span class="lineNoCov"> 0 : free(reg);</span></a>
-<a name="588"><span class="lineNum"> 588 </span> : : }</a>
-<a name="589"><span class="lineNum"> 589 </span> : : </a>
-<a name="590"><span class="lineNum"> 590 </span> :<span class="lineCov"> 6 : static void add_memory_controller(const struct HDIF_common_hdr *msarea,</span></a>
-<a name="591"><span class="lineNum"> 591 </span> : : const struct HDIF_ms_area_address_range *arange)</a>
-<a name="592"><span class="lineNum"> 592 </span> : : {</a>
-<a name="593"><span class="lineNum"> 593 </span> :<span class="lineCov"> 6 : const uint32_t version = PVR_TYPE(mfspr(SPR_PVR));</span></a>
-<a name="594"><span class="lineNum"> 594 </span> : : /*</a>
-<a name="595"><span class="lineNum"> 595 </span> : : * Memory hierarchy may change between processor version. Presently</a>
-<a name="596"><span class="lineNum"> 596 </span> : : * it's only creating memory hierarchy for P9 (Nimbus) and P9P (Axone).</a>
-<a name="597"><span class="lineNum"> 597 </span> : : */</a>
-<a name="598"><span class="lineNum"> 598 </span> : : </a>
-<a name="599"><span class="lineNum"> 599 </span> :<span class="lineCov"> 6 : if (version == PVR_TYPE_P9)</span></a>
-<a name="600"><span class="lineNum"> 600 </span> :<span class="lineNoCov"> 0 : return add_memory_controller_p9n(msarea, arange);</span></a>
-<a name="601"><span class="lineNum"> 601 </span> :<span class="lineCov"> 6 : else if (version == PVR_TYPE_P9P)</span></a>
-<a name="602"><span class="lineNum"> 602 </span> :<span class="lineNoCov"> 0 : return; //return add_memory_controller_p9p(msarea, arange);</span></a>
-<a name="603"><span class="lineNum"> 603 </span> : : else</a>
-<a name="604"><span class="lineNum"> 604 </span> :<span class="lineCov"> 6 : return;</span></a>
-<a name="605"><span class="lineNum"> 605 </span> : : }</a>
-<a name="606"><span class="lineNum"> 606 </span> : : </a>
-<a name="607"><span class="lineNum"> 607 </span> :<span class="lineCov"> 2 : static void get_msareas(struct dt_node *root,</span></a>
-<a name="608"><span class="lineNum"> 608 </span> : : const struct HDIF_common_hdr *ms_vpd)</a>
-<a name="609"><span class="lineNum"> 609 </span> : : {</a>
-<a name="610"><span class="lineNum"> 610 </span> : : unsigned int i;</a>
-<a name="611"><span class="lineNum"> 611 </span> : : const struct HDIF_child_ptr *msptr;</a>
-<a name="612"><span class="lineNum"> 612 </span> : : </a>
-<a name="613"><span class="lineNum"> 613 </span> : : /* First childptr refers to msareas. */</a>
-<a name="614"><span class="lineNum"> 614 </span> :<span class="lineCov"> 2 : msptr = HDIF_child_arr(ms_vpd, MSVPD_CHILD_MS_AREAS);</span></a>
-<a name="615"><span class="lineNum"> 615 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(msptr)) {</span></a>
-<a name="616"><span class="lineNum"> 616 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: no children at %p\n&quot;, ms_vpd);</span></a>
-<a name="617"><span class="lineNum"> 617 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="618"><span class="lineNum"> 618 </span> : : }</a>
-<a name="619"><span class="lineNum"> 619 </span> : : </a>
-<a name="620"><span class="lineNum"> 620 </span> :<span class="lineCov"> 8 : for (i = 0; i &lt; be32_to_cpu(msptr-&gt;count); i++) {</span></a>
-<a name="621"><span class="lineNum"> 621 </span> : : const struct HDIF_common_hdr *msarea;</a>
-<a name="622"><span class="lineNum"> 622 </span> : : const struct HDIF_array_hdr *arr;</a>
-<a name="623"><span class="lineNum"> 623 </span> : : const struct HDIF_ms_area_address_range *arange;</a>
-<a name="624"><span class="lineNum"> 624 </span> : : const struct HDIF_ms_area_id *id;</a>
-<a name="625"><span class="lineNum"> 625 </span> : : const void *fruid;</a>
-<a name="626"><span class="lineNum"> 626 </span> : : unsigned int size, j, offset;</a>
-<a name="627"><span class="lineNum"> 627 </span> : : u16 flags;</a>
-<a name="628"><span class="lineNum"> 628 </span> : : </a>
-<a name="629"><span class="lineNum"> 629 </span> :<span class="lineCov"> 6 : msarea = HDIF_child(ms_vpd, msptr, i, &quot;MSAREA&quot;);</span></a>
-<a name="630"><span class="lineNum"> 630 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(msarea))</span></a>
-<a name="631"><span class="lineNum"> 631 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="632"><span class="lineNum"> 632 </span> : : </a>
-<a name="633"><span class="lineNum"> 633 </span> :<span class="lineCov"> 6 : id = HDIF_get_idata(msarea, 2, &amp;size);</span></a>
-<a name="634"><span class="lineNum"> 634 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(id))</span></a>
-<a name="635"><span class="lineNum"> 635 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="636"><span class="lineNum"> 636 </span> :<span class="lineCov"> 6 : if (size &lt; sizeof(*id)) {</span></a>
-<a name="637"><span class="lineNum"> 637 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: %p msarea #%i id size too small!\n&quot;,</span></a>
-<a name="638"><span class="lineNum"> 638 </span> : : ms_vpd, i);</a>
-<a name="639"><span class="lineNum"> 639 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="640"><span class="lineNum"> 640 </span> : : }</a>
-<a name="641"><span class="lineNum"> 641 </span> : : </a>
-<a name="642"><span class="lineNum"> 642 </span> :<span class="lineCov"> 6 : flags = be16_to_cpu(id-&gt;flags);</span></a>
-<a name="643"><span class="lineNum"> 643 </span> :<span class="lineCov"> 6 : prlog(PR_DEBUG, &quot;MS VPD: %p, area %i: %s %s %s\n&quot;,</span></a>
-<a name="644"><span class="lineNum"> 644 </span> : : ms_vpd, i,</a>
-<a name="645"><span class="lineNum"> 645 </span> : : flags &amp; MS_AREA_INSTALLED ?</a>
-<a name="646"><span class="lineNum"> 646 </span> : : &quot;installed&quot; : &quot;not installed&quot;,</a>
-<a name="647"><span class="lineNum"> 647 </span> : : flags &amp; MS_AREA_FUNCTIONAL ?</a>
-<a name="648"><span class="lineNum"> 648 </span> : : &quot;functional&quot; : &quot;not functional&quot;,</a>
-<a name="649"><span class="lineNum"> 649 </span> : : flags &amp; MS_AREA_SHARED ?</a>
-<a name="650"><span class="lineNum"> 650 </span> : : &quot;shared&quot; : &quot;not shared&quot;);</a>
-<a name="651"><span class="lineNum"> 651 </span> : : </a>
-<a name="652"><span class="lineNum"> 652 </span> :<span class="lineCov"> 6 : if ((flags &amp; (MS_AREA_INSTALLED|MS_AREA_FUNCTIONAL))</span></a>
-<a name="653"><span class="lineNum"> 653 </span> : : != (MS_AREA_INSTALLED|MS_AREA_FUNCTIONAL))</a>
-<a name="654"><span class="lineNum"> 654 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="655"><span class="lineNum"> 655 </span> : : </a>
-<a name="656"><span class="lineNum"> 656 </span> :<span class="lineCov"> 6 : arr = HDIF_get_idata(msarea, 4, &amp;size);</span></a>
-<a name="657"><span class="lineNum"> 657 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(arr))</span></a>
-<a name="658"><span class="lineNum"> 658 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="659"><span class="lineNum"> 659 </span> : : </a>
-<a name="660"><span class="lineNum"> 660 </span> :<span class="lineCov"> 6 : if (size &lt; sizeof(*arr)) {</span></a>
-<a name="661"><span class="lineNum"> 661 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: %p msarea #%i arr size too small!\n&quot;,</span></a>
-<a name="662"><span class="lineNum"> 662 </span> : : ms_vpd, i);</a>
-<a name="663"><span class="lineNum"> 663 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="664"><span class="lineNum"> 664 </span> : : }</a>
-<a name="665"><span class="lineNum"> 665 </span> : : </a>
-<a name="666"><span class="lineNum"> 666 </span> :<span class="lineCov"> 6 : offset = offsetof(struct HDIF_ms_area_address_range, mirror_start);</span></a>
-<a name="667"><span class="lineNum"> 667 </span> :<span class="lineCov"> 6 : if (be32_to_cpu(arr-&gt;eactsz) &lt; offset) {</span></a>
-<a name="668"><span class="lineNum"> 668 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: %p msarea #%i arange size too small!\n&quot;,</span></a>
-<a name="669"><span class="lineNum"> 669 </span> : : ms_vpd, i);</a>
-<a name="670"><span class="lineNum"> 670 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="671"><span class="lineNum"> 671 </span> : : }</a>
-<a name="672"><span class="lineNum"> 672 </span> : : </a>
-<a name="673"><span class="lineNum"> 673 </span> :<span class="lineCov"> 6 : fruid = HDIF_get_idata(msarea, 0, &amp;size);</span></a>
-<a name="674"><span class="lineNum"> 674 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(fruid))</span></a>
-<a name="675"><span class="lineNum"> 675 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="676"><span class="lineNum"> 676 </span> : : </a>
-<a name="677"><span class="lineNum"> 677 </span> : : /* Add Raiser card VPD */</a>
-<a name="678"><span class="lineNum"> 678 </span> :<span class="lineCov"> 6 : if (be16_to_cpu(id-&gt;parent_type) &amp; MS_PTYPE_RISER_CARD)</span></a>
-<a name="679"><span class="lineNum"> 679 </span> :<span class="lineNoCov"> 0 : dt_add_vpd_node(msarea, 0, 1);</span></a>
-<a name="680"><span class="lineNum"> 680 </span> : : </a>
-<a name="681"><span class="lineNum"> 681 </span> : : /* Add RAM Area VPD */</a>
-<a name="682"><span class="lineNum"> 682 </span> :<span class="lineCov"> 6 : vpd_add_ram_area(msarea);</span></a>
-<a name="683"><span class="lineNum"> 683 </span> : : </a>
-<a name="684"><span class="lineNum"> 684 </span> :<span class="lineCov"> 6 : add_memory_buffer_mmio(msarea);</span></a>
+<a name="372"><span class="lineNum"> 372 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dimm, &quot;device_type&quot;, &quot;memory-dimm-ddr4&quot;);</span></a>
+<a name="373"><span class="lineNum"> 373 </span> : : </a>
+<a name="374"><span class="lineNum"> 374 </span> : : /* DRAM device type */</a>
+<a name="375"><span class="lineNum"> 375 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dimm, &quot;memory-id&quot;, spd[0x2]);</span></a>
+<a name="376"><span class="lineNum"> 376 </span> : : </a>
+<a name="377"><span class="lineNum"> 377 </span> : : /* Module revision code */</a>
+<a name="378"><span class="lineNum"> 378 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dimm, &quot;product-version&quot;, spd[0x15d]);</span></a>
+<a name="379"><span class="lineNum"> 379 </span> : : </a>
+<a name="380"><span class="lineNum"> 380 </span> : : /* Serial number */</a>
+<a name="381"><span class="lineNum"> 381 </span> :<span class="lineNoCov"> 0 : sn = (__be32 *)&amp;spd[0x145];</span></a>
+<a name="382"><span class="lineNum"> 382 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dimm, &quot;serial-number&quot;, be32_to_cpu(*sn));</span></a>
+<a name="383"><span class="lineNum"> 383 </span> : : </a>
+<a name="384"><span class="lineNum"> 384 </span> : : /* Part number */</a>
+<a name="385"><span class="lineNum"> 385 </span> :<span class="lineNoCov"> 0 : dt_add_property_nstr(dimm, &quot;part-number&quot;, &amp;spd[0x149], 20);</span></a>
+<a name="386"><span class="lineNum"> 386 </span> : : </a>
+<a name="387"><span class="lineNum"> 387 </span> : : /* Module manufacturer ID */</a>
+<a name="388"><span class="lineNum"> 388 </span> :<span class="lineNoCov"> 0 : vendor = (__be16 *)&amp;spd[0x140];</span></a>
+<a name="389"><span class="lineNum"> 389 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dimm, &quot;manufacturer-id&quot;, be16_to_cpu(*vendor));</span></a>
+<a name="390"><span class="lineNum"> 390 </span> : : }</a>
+<a name="391"><span class="lineNum"> 391 </span> : : </a>
+<a name="392"><span class="lineNum"> 392 </span> :<span class="lineNoCov"> 0 : static void add_dimm_info(struct dt_node *parent,</span></a>
+<a name="393"><span class="lineNum"> 393 </span> : : const struct HDIF_common_hdr *msarea)</a>
+<a name="394"><span class="lineNum"> 394 </span> : : {</a>
+<a name="395"><span class="lineNum"> 395 </span> : : unsigned int i, size;</a>
+<a name="396"><span class="lineNum"> 396 </span> : : const struct HDIF_child_ptr *ramptr;</a>
+<a name="397"><span class="lineNum"> 397 </span> : : const struct HDIF_common_hdr *ramarea;</a>
+<a name="398"><span class="lineNum"> 398 </span> : : const struct spira_fru_id *fru_id;</a>
+<a name="399"><span class="lineNum"> 399 </span> : : const struct HDIF_ram_area_id *ram_id;</a>
+<a name="400"><span class="lineNum"> 400 </span> : : const struct HDIF_ram_area_size *ram_area_sz;</a>
+<a name="401"><span class="lineNum"> 401 </span> : : struct dt_node *dimm;</a>
+<a name="402"><span class="lineNum"> 402 </span> : : const void *vpd_blob;</a>
+<a name="403"><span class="lineNum"> 403 </span> : : </a>
+<a name="404"><span class="lineNum"> 404 </span> :<span class="lineNoCov"> 0 : ramptr = HDIF_child_arr(msarea, 0);</span></a>
+<a name="405"><span class="lineNum"> 405 </span> :<span class="lineNoCov"> 0 : if (!CHECK_SPPTR(ramptr)) {</span></a>
+<a name="406"><span class="lineNum"> 406 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS AREA: No RAM area at %p\n&quot;, msarea);</span></a>
+<a name="407"><span class="lineNum"> 407 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="408"><span class="lineNum"> 408 </span> : : }</a>
+<a name="409"><span class="lineNum"> 409 </span> : : </a>
+<a name="410"><span class="lineNum"> 410 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; be32_to_cpu(ramptr-&gt;count); i++) {</span></a>
+<a name="411"><span class="lineNum"> 411 </span> :<span class="lineNoCov"> 0 : ramarea = HDIF_child(msarea, ramptr, i, &quot;RAM &quot;);</span></a>
+<a name="412"><span class="lineNum"> 412 </span> :<span class="lineNoCov"> 0 : if (!CHECK_SPPTR(ramarea))</span></a>
+<a name="413"><span class="lineNum"> 413 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="414"><span class="lineNum"> 414 </span> : : </a>
+<a name="415"><span class="lineNum"> 415 </span> :<span class="lineNoCov"> 0 : fru_id = HDIF_get_idata(ramarea, 0, NULL);</span></a>
+<a name="416"><span class="lineNum"> 416 </span> :<span class="lineNoCov"> 0 : if (!fru_id)</span></a>
+<a name="417"><span class="lineNum"> 417 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="418"><span class="lineNum"> 418 </span> : : </a>
+<a name="419"><span class="lineNum"> 419 </span> : : /* Use Resource ID to add dimm node */</a>
+<a name="420"><span class="lineNum"> 420 </span> :<span class="lineNoCov"> 0 : dimm = dt_find_by_name_addr(parent, &quot;dimm&quot;,</span></a>
+<a name="421"><span class="lineNum"> 421 </span> :<span class="lineNoCov"> 0 : be16_to_cpu(fru_id-&gt;rsrc_id));</span></a>
+<a name="422"><span class="lineNum"> 422 </span> :<span class="lineNoCov"> 0 : if (dimm)</span></a>
+<a name="423"><span class="lineNum"> 423 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="424"><span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : dimm= dt_new_addr(parent, &quot;dimm&quot;, be16_to_cpu(fru_id-&gt;rsrc_id));</span></a>
+<a name="425"><span class="lineNum"> 425 </span> :<span class="lineNoCov"> 0 : assert(dimm);</span></a>
+<a name="426"><span class="lineNum"> 426 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dimm, &quot;reg&quot;, be16_to_cpu(fru_id-&gt;rsrc_id));</span></a>
+<a name="427"><span class="lineNum"> 427 </span> : : </a>
+<a name="428"><span class="lineNum"> 428 </span> : : /* Add location code */</a>
+<a name="429"><span class="lineNum"> 429 </span> :<span class="lineNoCov"> 0 : slca_vpd_add_loc_code(dimm, be16_to_cpu(fru_id-&gt;slca_index));</span></a>
+<a name="430"><span class="lineNum"> 430 </span> : : </a>
+<a name="431"><span class="lineNum"> 431 </span> : : /* DIMM size */</a>
+<a name="432"><span class="lineNum"> 432 </span> :<span class="lineNoCov"> 0 : ram_area_sz = HDIF_get_idata(ramarea, 3, NULL);</span></a>
+<a name="433"><span class="lineNum"> 433 </span> :<span class="lineNoCov"> 0 : if (!CHECK_SPPTR(ram_area_sz))</span></a>
+<a name="434"><span class="lineNum"> 434 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="435"><span class="lineNum"> 435 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dimm, &quot;size&quot;, be32_to_cpu(ram_area_sz-&gt;mb));</span></a>
+<a name="436"><span class="lineNum"> 436 </span> : : </a>
+<a name="437"><span class="lineNum"> 437 </span> : : /* DIMM state */</a>
+<a name="438"><span class="lineNum"> 438 </span> :<span class="lineNoCov"> 0 : ram_id = HDIF_get_idata(ramarea, 2, NULL);</span></a>
+<a name="439"><span class="lineNum"> 439 </span> :<span class="lineNoCov"> 0 : if (!CHECK_SPPTR(ram_id))</span></a>
+<a name="440"><span class="lineNum"> 440 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="441"><span class="lineNum"> 441 </span> : : </a>
+<a name="442"><span class="lineNum"> 442 </span> :<span class="lineNoCov"> 0 : if ((be16_to_cpu(ram_id-&gt;flags) &amp; RAM_AREA_INSTALLED) &amp;&amp;</span></a>
+<a name="443"><span class="lineNum"> 443 </span> :<span class="lineNoCov"> 0 : (be16_to_cpu(ram_id-&gt;flags) &amp; RAM_AREA_FUNCTIONAL))</span></a>
+<a name="444"><span class="lineNum"> 444 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dimm, &quot;status&quot;, &quot;okay&quot;);</span></a>
+<a name="445"><span class="lineNum"> 445 </span> : : else</a>
+<a name="446"><span class="lineNum"> 446 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dimm, &quot;status&quot;, &quot;disabled&quot;);</span></a>
+<a name="447"><span class="lineNum"> 447 </span> : : </a>
+<a name="448"><span class="lineNum"> 448 </span> :<span class="lineNoCov"> 0 : vpd_blob = HDIF_get_idata(ramarea, 1, &amp;size);</span></a>
+<a name="449"><span class="lineNum"> 449 </span> :<span class="lineNoCov"> 0 : if (!CHECK_SPPTR(vpd_blob))</span></a>
+<a name="450"><span class="lineNum"> 450 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="451"><span class="lineNum"> 451 </span> :<span class="lineNoCov"> 0 : if (vpd_valid(vpd_blob, size))</span></a>
+<a name="452"><span class="lineNum"> 452 </span> :<span class="lineNoCov"> 0 : vpd_data_parse(dimm, vpd_blob, size);</span></a>
+<a name="453"><span class="lineNum"> 453 </span> : : else</a>
+<a name="454"><span class="lineNum"> 454 </span> :<span class="lineNoCov"> 0 : vpd_parse_spd(dimm, vpd_blob, size);</span></a>
+<a name="455"><span class="lineNum"> 455 </span> : : }</a>
+<a name="456"><span class="lineNum"> 456 </span> : : }</a>
+<a name="457"><span class="lineNum"> 457 </span> : : </a>
+<a name="458"><span class="lineNum"> 458 </span> :<span class="lineNoCov"> 0 : static inline void dt_add_mem_reg_property(struct dt_node *node, u64 addr)</span></a>
+<a name="459"><span class="lineNum"> 459 </span> : : {</a>
+<a name="460"><span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;#address-cells&quot;, 1);</span></a>
+<a name="461"><span class="lineNum"> 461 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;#size-cells&quot;, 0);</span></a>
+<a name="462"><span class="lineNum"> 462 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;reg&quot;, addr);</span></a>
+<a name="463"><span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="464"><span class="lineNum"> 464 </span> : : </a>
+<a name="465"><span class="lineNum"> 465 </span> :<span class="lineNoCov"> 0 : static void add_memory_controller_p9n(const struct HDIF_common_hdr *msarea,</span></a>
+<a name="466"><span class="lineNum"> 466 </span> : : const struct HDIF_ms_area_address_range *arange)</a>
+<a name="467"><span class="lineNum"> 467 </span> : : {</a>
+<a name="468"><span class="lineNum"> 468 </span> : : uint32_t chip_id;</a>
+<a name="469"><span class="lineNum"> 469 </span> : : uint32_t controller_id, mcbist_id, mcs_id, mca_id;</a>
+<a name="470"><span class="lineNum"> 470 </span> : : struct dt_node *xscom, *mcbist, *mcs, *mca;</a>
+<a name="471"><span class="lineNum"> 471 </span> : : </a>
+<a name="472"><span class="lineNum"> 472 </span> :<span class="lineNoCov"> 0 : chip_id = pcid_to_chip_id(be32_to_cpu(arange-&gt;chip));</span></a>
+<a name="473"><span class="lineNum"> 473 </span> :<span class="lineNoCov"> 0 : controller_id = be32_to_cpu(arange-&gt;controller_id);</span></a>
+<a name="474"><span class="lineNum"> 474 </span> :<span class="lineNoCov"> 0 : xscom = find_xscom_for_chip(chip_id);</span></a>
+<a name="475"><span class="lineNum"> 475 </span> :<span class="lineNoCov"> 0 : if (!xscom) {</span></a>
+<a name="476"><span class="lineNum"> 476 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING,</span></a>
+<a name="477"><span class="lineNum"> 477 </span> : : &quot;MS AREA: Can't find XSCOM for chip %d\n&quot;, chip_id);</a>
+<a name="478"><span class="lineNum"> 478 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="479"><span class="lineNum"> 479 </span> : : }</a>
+<a name="480"><span class="lineNum"> 480 </span> : : </a>
+<a name="481"><span class="lineNum"> 481 </span> :<span class="lineNoCov"> 0 : mcbist_id = MS_CONTROLLER_MCBIST_ID(controller_id);</span></a>
+<a name="482"><span class="lineNum"> 482 </span> :<span class="lineNoCov"> 0 : mcbist = dt_find_by_name_addr(xscom, &quot;mcbist&quot;, mcbist_id);</span></a>
+<a name="483"><span class="lineNum"> 483 </span> :<span class="lineNoCov"> 0 : if (!mcbist) {</span></a>
+<a name="484"><span class="lineNum"> 484 </span> :<span class="lineNoCov"> 0 : mcbist = dt_new_addr(xscom, &quot;mcbist&quot;, mcbist_id);</span></a>
+<a name="485"><span class="lineNum"> 485 </span> :<span class="lineNoCov"> 0 : assert(mcbist);</span></a>
+<a name="486"><span class="lineNum"> 486 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(mcbist, &quot;#address-cells&quot;, 1);</span></a>
+<a name="487"><span class="lineNum"> 487 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(mcbist, &quot;#size-cells&quot;, 0);</span></a>
+<a name="488"><span class="lineNum"> 488 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(mcbist, &quot;reg&quot;, mcbist_id, 0);</span></a>
+<a name="489"><span class="lineNum"> 489 </span> : : }</a>
+<a name="490"><span class="lineNum"> 490 </span> : : </a>
+<a name="491"><span class="lineNum"> 491 </span> :<span class="lineNoCov"> 0 : mcs_id = MS_CONTROLLER_MCS_ID(controller_id);</span></a>
+<a name="492"><span class="lineNum"> 492 </span> :<span class="lineNoCov"> 0 : mcs = dt_find_by_name_addr(mcbist, &quot;mcs&quot;, mcs_id);</span></a>
+<a name="493"><span class="lineNum"> 493 </span> :<span class="lineNoCov"> 0 : if (!mcs) {</span></a>
+<a name="494"><span class="lineNum"> 494 </span> :<span class="lineNoCov"> 0 : mcs = dt_new_addr(mcbist, &quot;mcs&quot;, mcs_id);</span></a>
+<a name="495"><span class="lineNum"> 495 </span> :<span class="lineNoCov"> 0 : assert(mcs);</span></a>
+<a name="496"><span class="lineNum"> 496 </span> :<span class="lineNoCov"> 0 : dt_add_mem_reg_property(mcs, mcs_id);</span></a>
+<a name="497"><span class="lineNum"> 497 </span> : : }</a>
+<a name="498"><span class="lineNum"> 498 </span> : : </a>
+<a name="499"><span class="lineNum"> 499 </span> :<span class="lineNoCov"> 0 : mca_id = MS_CONTROLLER_MCA_ID(controller_id);</span></a>
+<a name="500"><span class="lineNum"> 500 </span> :<span class="lineNoCov"> 0 : mca = dt_find_by_name_addr(mcs, &quot;mca&quot;, mca_id);</span></a>
+<a name="501"><span class="lineNum"> 501 </span> :<span class="lineNoCov"> 0 : if (!mca) {</span></a>
+<a name="502"><span class="lineNum"> 502 </span> :<span class="lineNoCov"> 0 : mca = dt_new_addr(mcs, &quot;mca&quot;, mca_id);</span></a>
+<a name="503"><span class="lineNum"> 503 </span> :<span class="lineNoCov"> 0 : assert(mca);</span></a>
+<a name="504"><span class="lineNum"> 504 </span> :<span class="lineNoCov"> 0 : dt_add_mem_reg_property(mca, mca_id);</span></a>
+<a name="505"><span class="lineNum"> 505 </span> : : }</a>
+<a name="506"><span class="lineNum"> 506 </span> : : </a>
+<a name="507"><span class="lineNum"> 507 </span> :<span class="lineNoCov"> 0 : add_dimm_info(mca, msarea);</span></a>
+<a name="508"><span class="lineNum"> 508 </span> : : }</a>
+<a name="509"><span class="lineNum"> 509 </span> : : </a>
+<a name="510"><span class="lineNum"> 510 </span> :<span class="lineCov"> 6 : static void add_memory_buffer_mmio(const struct HDIF_common_hdr *msarea)</span></a>
+<a name="511"><span class="lineNum"> 511 </span> : : {</a>
+<a name="512"><span class="lineNum"> 512 </span> : : const struct HDIF_ms_area_ocmb_mmio *mmio;</a>
+<a name="513"><span class="lineNum"> 513 </span> :<span class="lineCov"> 6 : uint64_t min_addr = ~0ull, hbrt_id = 0;</span></a>
+<a name="514"><span class="lineNum"> 514 </span> : : const struct HDIF_array_hdr *array;</a>
+<a name="515"><span class="lineNum"> 515 </span> :<span class="lineCov"> 6 : unsigned int i, count, ranges = 0;</span></a>
+<a name="516"><span class="lineNum"> 516 </span> : : struct dt_node *membuf;</a>
+<a name="517"><span class="lineNum"> 517 </span> : : beint64_t *reg, *flags;</a>
+<a name="518"><span class="lineNum"> 518 </span> : : </a>
+<a name="519"><span class="lineNum"> 519 </span> :<span class="lineCov"> 6 : if (proc_gen &lt;= proc_gen_p9 &amp;&amp; PVR_TYPE(mfspr(SPR_PVR)) != PVR_TYPE_P9P)</span></a>
+<a name="520"><span class="lineNum"> 520 </span> :<span class="lineCov"> 6 : return;</span></a>
+<a name="521"><span class="lineNum"> 521 </span> : : </a>
+<a name="522"><span class="lineNum"> 522 </span> :<span class="lineNoCov"> 0 : if (be16_to_cpu(msarea-&gt;version) &lt; 0x50) {</span></a>
+<a name="523"><span class="lineNum"> 523 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;MS AREA: Inconsistent MSAREA version %x for P9P system&quot;,</span></a>
+<a name="524"><span class="lineNum"> 524 </span> : : be16_to_cpu(msarea-&gt;version));</a>
+<a name="525"><span class="lineNum"> 525 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="526"><span class="lineNum"> 526 </span> : : }</a>
+<a name="527"><span class="lineNum"> 527 </span> : : </a>
+<a name="528"><span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : array = HDIF_get_iarray(msarea, MSAREA_IDATA_MMIO_IDX, &amp;count);</span></a>
+<a name="529"><span class="lineNum"> 529 </span> :<span class="lineNoCov"> 0 : if (!array || count &lt;= 0) {</span></a>
+<a name="530"><span class="lineNum"> 530 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS AREA: No OCMB MMIO array at MS Area %p\n&quot;, msarea);</span></a>
+<a name="531"><span class="lineNum"> 531 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="532"><span class="lineNum"> 532 </span> : : }</a>
+<a name="533"><span class="lineNum"> 533 </span> : : </a>
+<a name="534"><span class="lineNum"> 534 </span> :<span class="lineNoCov"> 0 : reg = zalloc(count * 2 * sizeof(*reg));</span></a>
+<a name="535"><span class="lineNum"> 535 </span> :<span class="lineNoCov"> 0 : flags = zalloc(count * sizeof(*flags));</span></a>
+<a name="536"><span class="lineNum"> 536 </span> : : </a>
+<a name="537"><span class="lineNum"> 537 </span> : : /* grab the hbrt id from the first range. */</a>
+<a name="538"><span class="lineNum"> 538 </span> :<span class="lineNoCov"> 0 : HDIF_iarray_for_each(array, i, mmio) {</span></a>
+<a name="539"><span class="lineNum"> 539 </span> :<span class="lineNoCov"> 0 : hbrt_id = be64_to_cpu(mmio-&gt;hbrt_id);</span></a>
+<a name="540"><span class="lineNum"> 540 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="541"><span class="lineNum"> 541 </span> : : }</a>
+<a name="542"><span class="lineNum"> 542 </span> : : </a>
+<a name="543"><span class="lineNum"> 543 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;Adding memory buffer MMIO ranges for %&quot;PRIx64&quot;\n&quot;,</span></a>
+<a name="544"><span class="lineNum"> 544 </span> : : hbrt_id);</a>
+<a name="545"><span class="lineNum"> 545 </span> : : </a>
+<a name="546"><span class="lineNum"> 546 </span> :<span class="lineNoCov"> 0 : HDIF_iarray_for_each(array, i, mmio) {</span></a>
+<a name="547"><span class="lineNum"> 547 </span> : : uint64_t start, end;</a>
+<a name="548"><span class="lineNum"> 548 </span> : : </a>
+<a name="549"><span class="lineNum"> 549 </span> :<span class="lineNoCov"> 0 : if (hbrt_id != be64_to_cpu(mmio-&gt;hbrt_id)) {</span></a>
+<a name="550"><span class="lineNum"> 550 </span> :<span class="lineNoCov"> 0 : prerror(&quot;HBRT ID mismatch!\n&quot;);</span></a>
+<a name="551"><span class="lineNum"> 551 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="552"><span class="lineNum"> 552 </span> : : }</a>
+<a name="553"><span class="lineNum"> 553 </span> : : </a>
+<a name="554"><span class="lineNum"> 554 </span> :<span class="lineNoCov"> 0 : start = cleanup_addr(be64_to_cpu(mmio-&gt;range_start));</span></a>
+<a name="555"><span class="lineNum"> 555 </span> :<span class="lineNoCov"> 0 : end = cleanup_addr(be64_to_cpu(mmio-&gt;range_end));</span></a>
+<a name="556"><span class="lineNum"> 556 </span> :<span class="lineNoCov"> 0 : if (start &lt; min_addr)</span></a>
+<a name="557"><span class="lineNum"> 557 </span> :<span class="lineNoCov"> 0 : min_addr = start;</span></a>
+<a name="558"><span class="lineNum"> 558 </span> : : </a>
+<a name="559"><span class="lineNum"> 559 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot; %&quot;PRIx64&quot; - [%016&quot;PRIx64&quot;-%016&quot;PRIx64&quot;)\n&quot;,</span></a>
+<a name="560"><span class="lineNum"> 560 </span> : : hbrt_id, start, end);</a>
+<a name="561"><span class="lineNum"> 561 </span> : : </a>
+<a name="562"><span class="lineNum"> 562 </span> :<span class="lineNoCov"> 0 : reg[2 * ranges ] = cpu_to_be64(start);</span></a>
+<a name="563"><span class="lineNum"> 563 </span> :<span class="lineNoCov"> 0 : reg[2 * ranges + 1] = cpu_to_be64(end - start + 1);</span></a>
+<a name="564"><span class="lineNum"> 564 </span> :<span class="lineNoCov"> 0 : flags[ranges] = mmio-&gt;flags; /* both are BE */</span></a>
+<a name="565"><span class="lineNum"> 565 </span> :<span class="lineNoCov"> 0 : ranges++;</span></a>
+<a name="566"><span class="lineNum"> 566 </span> : : }</a>
+<a name="567"><span class="lineNum"> 567 </span> : : </a>
+<a name="568"><span class="lineNum"> 568 </span> :<span class="lineNoCov"> 0 : membuf = dt_find_by_name_addr(dt_root, &quot;memory-buffer&quot;, min_addr);</span></a>
+<a name="569"><span class="lineNum"> 569 </span> :<span class="lineNoCov"> 0 : if (membuf) {</span></a>
+<a name="570"><span class="lineNum"> 570 </span> :<span class="lineNoCov"> 0 : prerror(&quot;attempted to duplicate %s\n&quot;, membuf-&gt;name);</span></a>
+<a name="571"><span class="lineNum"> 571 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="572"><span class="lineNum"> 572 </span> : : }</a>
+<a name="573"><span class="lineNum"> 573 </span> : : </a>
+<a name="574"><span class="lineNum"> 574 </span> :<span class="lineNoCov"> 0 : membuf = dt_new_addr(dt_root, &quot;memory-buffer&quot;, min_addr);</span></a>
+<a name="575"><span class="lineNum"> 575 </span> :<span class="lineNoCov"> 0 : assert(membuf);</span></a>
+<a name="576"><span class="lineNum"> 576 </span> : : </a>
+<a name="577"><span class="lineNum"> 577 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(membuf, &quot;compatible&quot;, &quot;ibm,explorer&quot;);</span></a>
+<a name="578"><span class="lineNum"> 578 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(membuf, &quot;ibm,chip-id&quot;, hbrt_id);</span></a>
+<a name="579"><span class="lineNum"> 579 </span> : : </a>
+<a name="580"><span class="lineNum"> 580 </span> : : /*</a>
+<a name="581"><span class="lineNum"> 581 </span> : : * FIXME: We should probably be sorting the address ranges based</a>
+<a name="582"><span class="lineNum"> 582 </span> : : * on the starting address.</a>
+<a name="583"><span class="lineNum"> 583 </span> : : */</a>
+<a name="584"><span class="lineNum"> 584 </span> :<span class="lineNoCov"> 0 : dt_add_property(membuf, &quot;reg&quot;, reg, sizeof(*reg) * 2 * ranges);</span></a>
+<a name="585"><span class="lineNum"> 585 </span> :<span class="lineNoCov"> 0 : dt_add_property(membuf, &quot;flags&quot;, flags, sizeof(*flags) * ranges);</span></a>
+<a name="586"><span class="lineNum"> 586 </span> : : </a>
+<a name="587"><span class="lineNum"> 587 </span> :<span class="lineNoCov"> 0 : out:</span></a>
+<a name="588"><span class="lineNum"> 588 </span> :<span class="lineNoCov"> 0 : free(flags);</span></a>
+<a name="589"><span class="lineNum"> 589 </span> :<span class="lineNoCov"> 0 : free(reg);</span></a>
+<a name="590"><span class="lineNum"> 590 </span> : : }</a>
+<a name="591"><span class="lineNum"> 591 </span> : : </a>
+<a name="592"><span class="lineNum"> 592 </span> :<span class="lineCov"> 6 : static void add_memory_controller(const struct HDIF_common_hdr *msarea,</span></a>
+<a name="593"><span class="lineNum"> 593 </span> : : const struct HDIF_ms_area_address_range *arange)</a>
+<a name="594"><span class="lineNum"> 594 </span> : : {</a>
+<a name="595"><span class="lineNum"> 595 </span> :<span class="lineCov"> 6 : const uint32_t version = PVR_TYPE(mfspr(SPR_PVR));</span></a>
+<a name="596"><span class="lineNum"> 596 </span> : : /*</a>
+<a name="597"><span class="lineNum"> 597 </span> : : * Memory hierarchy may change between processor version. Presently</a>
+<a name="598"><span class="lineNum"> 598 </span> : : * it's only creating memory hierarchy for P9 (Nimbus) and P9P (Axone).</a>
+<a name="599"><span class="lineNum"> 599 </span> : : */</a>
+<a name="600"><span class="lineNum"> 600 </span> : : </a>
+<a name="601"><span class="lineNum"> 601 </span> :<span class="lineCov"> 6 : if (version == PVR_TYPE_P9)</span></a>
+<a name="602"><span class="lineNum"> 602 </span> :<span class="lineNoCov"> 0 : return add_memory_controller_p9n(msarea, arange);</span></a>
+<a name="603"><span class="lineNum"> 603 </span> :<span class="lineCov"> 6 : else if (version == PVR_TYPE_P9P)</span></a>
+<a name="604"><span class="lineNum"> 604 </span> :<span class="lineNoCov"> 0 : return; //return add_memory_controller_p9p(msarea, arange);</span></a>
+<a name="605"><span class="lineNum"> 605 </span> : : else</a>
+<a name="606"><span class="lineNum"> 606 </span> :<span class="lineCov"> 6 : return;</span></a>
+<a name="607"><span class="lineNum"> 607 </span> : : }</a>
+<a name="608"><span class="lineNum"> 608 </span> : : </a>
+<a name="609"><span class="lineNum"> 609 </span> :<span class="lineCov"> 2 : static void get_msareas(struct dt_node *root,</span></a>
+<a name="610"><span class="lineNum"> 610 </span> : : const struct HDIF_common_hdr *ms_vpd)</a>
+<a name="611"><span class="lineNum"> 611 </span> : : {</a>
+<a name="612"><span class="lineNum"> 612 </span> : : unsigned int i;</a>
+<a name="613"><span class="lineNum"> 613 </span> : : const struct HDIF_child_ptr *msptr;</a>
+<a name="614"><span class="lineNum"> 614 </span> : : </a>
+<a name="615"><span class="lineNum"> 615 </span> : : /* First childptr refers to msareas. */</a>
+<a name="616"><span class="lineNum"> 616 </span> :<span class="lineCov"> 2 : msptr = HDIF_child_arr(ms_vpd, MSVPD_CHILD_MS_AREAS);</span></a>
+<a name="617"><span class="lineNum"> 617 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(msptr)) {</span></a>
+<a name="618"><span class="lineNum"> 618 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: no children at %p\n&quot;, ms_vpd);</span></a>
+<a name="619"><span class="lineNum"> 619 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="620"><span class="lineNum"> 620 </span> : : }</a>
+<a name="621"><span class="lineNum"> 621 </span> : : </a>
+<a name="622"><span class="lineNum"> 622 </span> :<span class="lineCov"> 8 : for (i = 0; i &lt; be32_to_cpu(msptr-&gt;count); i++) {</span></a>
+<a name="623"><span class="lineNum"> 623 </span> : : const struct HDIF_common_hdr *msarea;</a>
+<a name="624"><span class="lineNum"> 624 </span> : : const struct HDIF_array_hdr *arr;</a>
+<a name="625"><span class="lineNum"> 625 </span> : : const struct HDIF_ms_area_address_range *arange;</a>
+<a name="626"><span class="lineNum"> 626 </span> : : const struct HDIF_ms_area_id *id;</a>
+<a name="627"><span class="lineNum"> 627 </span> : : const void *fruid;</a>
+<a name="628"><span class="lineNum"> 628 </span> : : unsigned int size, j, offset;</a>
+<a name="629"><span class="lineNum"> 629 </span> : : u16 flags;</a>
+<a name="630"><span class="lineNum"> 630 </span> : : </a>
+<a name="631"><span class="lineNum"> 631 </span> :<span class="lineCov"> 6 : msarea = HDIF_child(ms_vpd, msptr, i, &quot;MSAREA&quot;);</span></a>
+<a name="632"><span class="lineNum"> 632 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(msarea))</span></a>
+<a name="633"><span class="lineNum"> 633 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="634"><span class="lineNum"> 634 </span> : : </a>
+<a name="635"><span class="lineNum"> 635 </span> :<span class="lineCov"> 6 : id = HDIF_get_idata(msarea, 2, &amp;size);</span></a>
+<a name="636"><span class="lineNum"> 636 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(id))</span></a>
+<a name="637"><span class="lineNum"> 637 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="638"><span class="lineNum"> 638 </span> :<span class="lineCov"> 6 : if (size &lt; sizeof(*id)) {</span></a>
+<a name="639"><span class="lineNum"> 639 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: %p msarea #%i id size too small!\n&quot;,</span></a>
+<a name="640"><span class="lineNum"> 640 </span> : : ms_vpd, i);</a>
+<a name="641"><span class="lineNum"> 641 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="642"><span class="lineNum"> 642 </span> : : }</a>
+<a name="643"><span class="lineNum"> 643 </span> : : </a>
+<a name="644"><span class="lineNum"> 644 </span> :<span class="lineCov"> 6 : flags = be16_to_cpu(id-&gt;flags);</span></a>
+<a name="645"><span class="lineNum"> 645 </span> :<span class="lineCov"> 6 : prlog(PR_DEBUG, &quot;MS VPD: %p, area %i: %s %s %s\n&quot;,</span></a>
+<a name="646"><span class="lineNum"> 646 </span> : : ms_vpd, i,</a>
+<a name="647"><span class="lineNum"> 647 </span> : : flags &amp; MS_AREA_INSTALLED ?</a>
+<a name="648"><span class="lineNum"> 648 </span> : : &quot;installed&quot; : &quot;not installed&quot;,</a>
+<a name="649"><span class="lineNum"> 649 </span> : : flags &amp; MS_AREA_FUNCTIONAL ?</a>
+<a name="650"><span class="lineNum"> 650 </span> : : &quot;functional&quot; : &quot;not functional&quot;,</a>
+<a name="651"><span class="lineNum"> 651 </span> : : flags &amp; MS_AREA_SHARED ?</a>
+<a name="652"><span class="lineNum"> 652 </span> : : &quot;shared&quot; : &quot;not shared&quot;);</a>
+<a name="653"><span class="lineNum"> 653 </span> : : </a>
+<a name="654"><span class="lineNum"> 654 </span> :<span class="lineCov"> 6 : if ((flags &amp; (MS_AREA_INSTALLED|MS_AREA_FUNCTIONAL))</span></a>
+<a name="655"><span class="lineNum"> 655 </span> : : != (MS_AREA_INSTALLED|MS_AREA_FUNCTIONAL))</a>
+<a name="656"><span class="lineNum"> 656 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="657"><span class="lineNum"> 657 </span> : : </a>
+<a name="658"><span class="lineNum"> 658 </span> :<span class="lineCov"> 6 : arr = HDIF_get_idata(msarea, 4, &amp;size);</span></a>
+<a name="659"><span class="lineNum"> 659 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(arr))</span></a>
+<a name="660"><span class="lineNum"> 660 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="661"><span class="lineNum"> 661 </span> : : </a>
+<a name="662"><span class="lineNum"> 662 </span> :<span class="lineCov"> 6 : if (size &lt; sizeof(*arr)) {</span></a>
+<a name="663"><span class="lineNum"> 663 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: %p msarea #%i arr size too small!\n&quot;,</span></a>
+<a name="664"><span class="lineNum"> 664 </span> : : ms_vpd, i);</a>
+<a name="665"><span class="lineNum"> 665 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="666"><span class="lineNum"> 666 </span> : : }</a>
+<a name="667"><span class="lineNum"> 667 </span> : : </a>
+<a name="668"><span class="lineNum"> 668 </span> :<span class="lineCov"> 6 : offset = offsetof(struct HDIF_ms_area_address_range, mirror_start);</span></a>
+<a name="669"><span class="lineNum"> 669 </span> :<span class="lineCov"> 6 : if (be32_to_cpu(arr-&gt;eactsz) &lt; offset) {</span></a>
+<a name="670"><span class="lineNum"> 670 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: %p msarea #%i arange size too small!\n&quot;,</span></a>
+<a name="671"><span class="lineNum"> 671 </span> : : ms_vpd, i);</a>
+<a name="672"><span class="lineNum"> 672 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="673"><span class="lineNum"> 673 </span> : : }</a>
+<a name="674"><span class="lineNum"> 674 </span> : : </a>
+<a name="675"><span class="lineNum"> 675 </span> :<span class="lineCov"> 6 : fruid = HDIF_get_idata(msarea, 0, &amp;size);</span></a>
+<a name="676"><span class="lineNum"> 676 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(fruid))</span></a>
+<a name="677"><span class="lineNum"> 677 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="678"><span class="lineNum"> 678 </span> : : </a>
+<a name="679"><span class="lineNum"> 679 </span> : : /* Add Raiser card VPD */</a>
+<a name="680"><span class="lineNum"> 680 </span> :<span class="lineCov"> 6 : if (be16_to_cpu(id-&gt;parent_type) &amp; MS_PTYPE_RISER_CARD)</span></a>
+<a name="681"><span class="lineNum"> 681 </span> :<span class="lineNoCov"> 0 : dt_add_vpd_node(msarea, 0, 1);</span></a>
+<a name="682"><span class="lineNum"> 682 </span> : : </a>
+<a name="683"><span class="lineNum"> 683 </span> : : /* Add RAM Area VPD */</a>
+<a name="684"><span class="lineNum"> 684 </span> :<span class="lineCov"> 6 : vpd_add_ram_area(msarea);</span></a>
<a name="685"><span class="lineNum"> 685 </span> : : </a>
-<a name="686"><span class="lineNum"> 686 </span> : : /* This offset is from the arr, not the header! */</a>
-<a name="687"><span class="lineNum"> 687 </span> :<span class="lineCov"> 6 : arange = (void *)arr + be32_to_cpu(arr-&gt;offset);</span></a>
-<a name="688"><span class="lineNum"> 688 </span> :<span class="lineCov"> 12 : for (j = 0; j &lt; be32_to_cpu(arr-&gt;ecnt); j++) {</span></a>
-<a name="689"><span class="lineNum"> 689 </span> :<span class="lineCov"> 6 : uint32_t type = 0, status = 0;</span></a>
-<a name="690"><span class="lineNum"> 690 </span> : : </a>
-<a name="691"><span class="lineNum"> 691 </span> : : /*</a>
-<a name="692"><span class="lineNum"> 692 </span> : : * Check that the required fields are present in this</a>
-<a name="693"><span class="lineNum"> 693 </span> : : * version of the HDAT structure.</a>
-<a name="694"><span class="lineNum"> 694 </span> : : */</a>
-<a name="695"><span class="lineNum"> 695 </span> :<span class="lineCov"> 6 : offset = offsetof(struct HDIF_ms_area_address_range, controller_id);</span></a>
-<a name="696"><span class="lineNum"> 696 </span> :<span class="lineCov"> 6 : if (be32_to_cpu(arr-&gt;eactsz) &gt;= offset)</span></a>
-<a name="697"><span class="lineNum"> 697 </span> :<span class="lineCov"> 6 : add_memory_controller(msarea, arange);</span></a>
-<a name="698"><span class="lineNum"> 698 </span> : : </a>
-<a name="699"><span class="lineNum"> 699 </span> :<span class="lineCov"> 6 : offset = offsetof(struct HDIF_ms_area_address_range, phys_attr);</span></a>
-<a name="700"><span class="lineNum"> 700 </span> :<span class="lineCov"> 6 : if (be32_to_cpu(arr-&gt;eactsz) &gt;= offset) {</span></a>
-<a name="701"><span class="lineNum"> 701 </span> :<span class="lineNoCov"> 0 : uint32_t attr = be32_to_cpu(arange-&gt;phys_attr);</span></a>
-<a name="702"><span class="lineNum"> 702 </span> : : </a>
-<a name="703"><span class="lineNum"> 703 </span> :<span class="lineNoCov"> 0 : type = GETFIELD(PHYS_ATTR_TYPE_MASK, attr);</span></a>
-<a name="704"><span class="lineNum"> 704 </span> :<span class="lineNoCov"> 0 : status = GETFIELD(PHYS_ATTR_STATUS_MASK, attr);</span></a>
-<a name="705"><span class="lineNum"> 705 </span> : : }</a>
-<a name="706"><span class="lineNum"> 706 </span> : : </a>
-<a name="707"><span class="lineNum"> 707 </span> :<span class="lineCov"> 6 : if (!add_address_range(root, id, arange, type, status))</span></a>
-<a name="708"><span class="lineNum"> 708 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Unable to use memory range %d from MSAREA %d\n&quot;, j, i);</span></a>
-<a name="709"><span class="lineNum"> 709 </span> : : </a>
-<a name="710"><span class="lineNum"> 710 </span> :<span class="lineCov"> 6 : arange = (void *)arange + be32_to_cpu(arr-&gt;esize);</span></a>
-<a name="711"><span class="lineNum"> 711 </span> : : }</a>
-<a name="712"><span class="lineNum"> 712 </span> : : }</a>
-<a name="713"><span class="lineNum"> 713 </span> : : }</a>
-<a name="714"><span class="lineNum"> 714 </span> : : </a>
-<a name="715"><span class="lineNum"> 715 </span> : : static struct dt_node *dt_hb_reserves;</a>
+<a name="686"><span class="lineNum"> 686 </span> :<span class="lineCov"> 6 : add_memory_buffer_mmio(msarea);</span></a>
+<a name="687"><span class="lineNum"> 687 </span> : : </a>
+<a name="688"><span class="lineNum"> 688 </span> : : /* This offset is from the arr, not the header! */</a>
+<a name="689"><span class="lineNum"> 689 </span> :<span class="lineCov"> 6 : arange = (void *)arr + be32_to_cpu(arr-&gt;offset);</span></a>
+<a name="690"><span class="lineNum"> 690 </span> :<span class="lineCov"> 12 : for (j = 0; j &lt; be32_to_cpu(arr-&gt;ecnt); j++) {</span></a>
+<a name="691"><span class="lineNum"> 691 </span> :<span class="lineCov"> 6 : uint32_t type = 0, status = 0;</span></a>
+<a name="692"><span class="lineNum"> 692 </span> : : </a>
+<a name="693"><span class="lineNum"> 693 </span> : : /*</a>
+<a name="694"><span class="lineNum"> 694 </span> : : * Check that the required fields are present in this</a>
+<a name="695"><span class="lineNum"> 695 </span> : : * version of the HDAT structure.</a>
+<a name="696"><span class="lineNum"> 696 </span> : : */</a>
+<a name="697"><span class="lineNum"> 697 </span> :<span class="lineCov"> 6 : offset = offsetof(struct HDIF_ms_area_address_range, controller_id);</span></a>
+<a name="698"><span class="lineNum"> 698 </span> :<span class="lineCov"> 6 : if (be32_to_cpu(arr-&gt;eactsz) &gt;= offset)</span></a>
+<a name="699"><span class="lineNum"> 699 </span> :<span class="lineCov"> 6 : add_memory_controller(msarea, arange);</span></a>
+<a name="700"><span class="lineNum"> 700 </span> : : </a>
+<a name="701"><span class="lineNum"> 701 </span> :<span class="lineCov"> 6 : offset = offsetof(struct HDIF_ms_area_address_range, phys_attr);</span></a>
+<a name="702"><span class="lineNum"> 702 </span> :<span class="lineCov"> 6 : if (be32_to_cpu(arr-&gt;eactsz) &gt;= offset) {</span></a>
+<a name="703"><span class="lineNum"> 703 </span> :<span class="lineNoCov"> 0 : uint32_t attr = be32_to_cpu(arange-&gt;phys_attr);</span></a>
+<a name="704"><span class="lineNum"> 704 </span> : : </a>
+<a name="705"><span class="lineNum"> 705 </span> :<span class="lineNoCov"> 0 : type = GETFIELD(PHYS_ATTR_TYPE_MASK, attr);</span></a>
+<a name="706"><span class="lineNum"> 706 </span> :<span class="lineNoCov"> 0 : status = GETFIELD(PHYS_ATTR_STATUS_MASK, attr);</span></a>
+<a name="707"><span class="lineNum"> 707 </span> : : }</a>
+<a name="708"><span class="lineNum"> 708 </span> : : </a>
+<a name="709"><span class="lineNum"> 709 </span> :<span class="lineCov"> 6 : if (!add_address_range(root, id, arange, type, status))</span></a>
+<a name="710"><span class="lineNum"> 710 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Unable to use memory range %d from MSAREA %d\n&quot;, j, i);</span></a>
+<a name="711"><span class="lineNum"> 711 </span> : : </a>
+<a name="712"><span class="lineNum"> 712 </span> :<span class="lineCov"> 6 : arange = (void *)arange + be32_to_cpu(arr-&gt;esize);</span></a>
+<a name="713"><span class="lineNum"> 713 </span> : : }</a>
+<a name="714"><span class="lineNum"> 714 </span> : : }</a>
+<a name="715"><span class="lineNum"> 715 </span> : : }</a>
<a name="716"><span class="lineNum"> 716 </span> : : </a>
-<a name="717"><span class="lineNum"> 717 </span> :<span class="lineNoCov"> 0 : static struct dt_node *add_hb_reserve_node(const char *name, u64 start, u64 end)</span></a>
-<a name="718"><span class="lineNum"> 718 </span> : : {</a>
-<a name="719"><span class="lineNum"> 719 </span> : : /* label size + &quot;ibm,&quot; + NULL */</a>
-<a name="720"><span class="lineNum"> 720 </span> :<span class="lineNoCov"> 0 : char node_name[HB_RESERVE_MEM_LABEL_SIZE + 5] = { 0 };</span></a>
-<a name="721"><span class="lineNum"> 721 </span> : : struct dt_node *node, *hb;</a>
-<a name="722"><span class="lineNum"> 722 </span> : : </a>
-<a name="723"><span class="lineNum"> 723 </span> :<span class="lineNoCov"> 0 : if (!dt_hb_reserves) {</span></a>
-<a name="724"><span class="lineNum"> 724 </span> :<span class="lineNoCov"> 0 : hb = dt_new_check(dt_root, &quot;ibm,hostboot&quot;);</span></a>
-<a name="725"><span class="lineNum"> 725 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(hb, &quot;#size-cells&quot;, 2);</span></a>
-<a name="726"><span class="lineNum"> 726 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(hb, &quot;#address-cells&quot;, 2);</span></a>
-<a name="727"><span class="lineNum"> 727 </span> : : </a>
-<a name="728"><span class="lineNum"> 728 </span> :<span class="lineNoCov"> 0 : dt_hb_reserves = dt_new_check(hb, &quot;reserved-memory&quot;);</span></a>
-<a name="729"><span class="lineNum"> 729 </span> :<span class="lineNoCov"> 0 : dt_add_property(dt_hb_reserves, &quot;ranges&quot;, NULL, 0);</span></a>
-<a name="730"><span class="lineNum"> 730 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dt_hb_reserves, &quot;#size-cells&quot;, 2);</span></a>
-<a name="731"><span class="lineNum"> 731 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dt_hb_reserves, &quot;#address-cells&quot;, 2);</span></a>
-<a name="732"><span class="lineNum"> 732 </span> : : }</a>
-<a name="733"><span class="lineNum"> 733 </span> : : </a>
-<a name="734"><span class="lineNum"> 734 </span> : : /* Add &quot;ibm,&quot; to reserved node name */</a>
-<a name="735"><span class="lineNum"> 735 </span> :<span class="lineNoCov"> 0 : if (strncasecmp(name, &quot;ibm&quot;, 3))</span></a>
-<a name="736"><span class="lineNum"> 736 </span> :<span class="lineNoCov"> 0 : snprintf(node_name, 5, &quot;ibm,&quot;);</span></a>
-<a name="737"><span class="lineNum"> 737 </span> :<span class="lineNoCov"> 0 : strcat(node_name, name);</span></a>
-<a name="738"><span class="lineNum"> 738 </span> : : </a>
-<a name="739"><span class="lineNum"> 739 </span> :<span class="lineNoCov"> 0 : node = dt_new_addr(dt_hb_reserves, node_name, start);</span></a>
-<a name="740"><span class="lineNum"> 740 </span> :<span class="lineNoCov"> 0 : if (!node) {</span></a>
-<a name="741"><span class="lineNum"> 741 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Unable to create node for %s@%llx\n&quot;,</span></a>
-<a name="742"><span class="lineNum"> 742 </span> : : node_name, (unsigned long long) start);</a>
-<a name="743"><span class="lineNum"> 743 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="744"><span class="lineNum"> 744 </span> : : }</a>
-<a name="745"><span class="lineNum"> 745 </span> : : </a>
-<a name="746"><span class="lineNum"> 746 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64s(node, &quot;reg&quot;, start, end - start + 1);</span></a>
+<a name="717"><span class="lineNum"> 717 </span> : : static struct dt_node *dt_hb_reserves;</a>
+<a name="718"><span class="lineNum"> 718 </span> : : </a>
+<a name="719"><span class="lineNum"> 719 </span> :<span class="lineNoCov"> 0 : static struct dt_node *add_hb_reserve_node(const char *name, u64 start, u64 end)</span></a>
+<a name="720"><span class="lineNum"> 720 </span> : : {</a>
+<a name="721"><span class="lineNum"> 721 </span> : : /* label size + &quot;ibm,&quot; + NULL */</a>
+<a name="722"><span class="lineNum"> 722 </span> :<span class="lineNoCov"> 0 : char node_name[HB_RESERVE_MEM_LABEL_SIZE + 5] = { 0 };</span></a>
+<a name="723"><span class="lineNum"> 723 </span> : : struct dt_node *node, *hb;</a>
+<a name="724"><span class="lineNum"> 724 </span> : : </a>
+<a name="725"><span class="lineNum"> 725 </span> :<span class="lineNoCov"> 0 : if (!dt_hb_reserves) {</span></a>
+<a name="726"><span class="lineNum"> 726 </span> :<span class="lineNoCov"> 0 : hb = dt_new_check(dt_root, &quot;ibm,hostboot&quot;);</span></a>
+<a name="727"><span class="lineNum"> 727 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(hb, &quot;#size-cells&quot;, 2);</span></a>
+<a name="728"><span class="lineNum"> 728 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(hb, &quot;#address-cells&quot;, 2);</span></a>
+<a name="729"><span class="lineNum"> 729 </span> : : </a>
+<a name="730"><span class="lineNum"> 730 </span> :<span class="lineNoCov"> 0 : dt_hb_reserves = dt_new_check(hb, &quot;reserved-memory&quot;);</span></a>
+<a name="731"><span class="lineNum"> 731 </span> :<span class="lineNoCov"> 0 : dt_add_property(dt_hb_reserves, &quot;ranges&quot;, NULL, 0);</span></a>
+<a name="732"><span class="lineNum"> 732 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dt_hb_reserves, &quot;#size-cells&quot;, 2);</span></a>
+<a name="733"><span class="lineNum"> 733 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dt_hb_reserves, &quot;#address-cells&quot;, 2);</span></a>
+<a name="734"><span class="lineNum"> 734 </span> : : }</a>
+<a name="735"><span class="lineNum"> 735 </span> : : </a>
+<a name="736"><span class="lineNum"> 736 </span> : : /* Add &quot;ibm,&quot; to reserved node name */</a>
+<a name="737"><span class="lineNum"> 737 </span> :<span class="lineNoCov"> 0 : if (strncasecmp(name, &quot;ibm&quot;, 3))</span></a>
+<a name="738"><span class="lineNum"> 738 </span> :<span class="lineNoCov"> 0 : snprintf(node_name, 5, &quot;ibm,&quot;);</span></a>
+<a name="739"><span class="lineNum"> 739 </span> :<span class="lineNoCov"> 0 : strcat(node_name, name);</span></a>
+<a name="740"><span class="lineNum"> 740 </span> : : </a>
+<a name="741"><span class="lineNum"> 741 </span> :<span class="lineNoCov"> 0 : node = dt_new_addr(dt_hb_reserves, node_name, start);</span></a>
+<a name="742"><span class="lineNum"> 742 </span> :<span class="lineNoCov"> 0 : if (!node) {</span></a>
+<a name="743"><span class="lineNum"> 743 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Unable to create node for %s@%llx\n&quot;,</span></a>
+<a name="744"><span class="lineNum"> 744 </span> : : node_name, (unsigned long long) start);</a>
+<a name="745"><span class="lineNum"> 745 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="746"><span class="lineNum"> 746 </span> : : }</a>
<a name="747"><span class="lineNum"> 747 </span> : : </a>
-<a name="748"><span class="lineNum"> 748 </span> :<span class="lineNoCov"> 0 : return node;</span></a>
-<a name="749"><span class="lineNum"> 749 </span> : : }</a>
-<a name="750"><span class="lineNum"> 750 </span> : : </a>
-<a name="751"><span class="lineNum"> 751 </span> :<span class="lineCov"> 2 : static void get_hb_reserved_mem(struct HDIF_common_hdr *ms_vpd)</span></a>
-<a name="752"><span class="lineNum"> 752 </span> : : {</a>
-<a name="753"><span class="lineNum"> 753 </span> : : const struct msvpd_hb_reserved_mem *hb_resv_mem;</a>
-<a name="754"><span class="lineNum"> 754 </span> : : u64 start_addr, end_addr, label_size;</a>
-<a name="755"><span class="lineNum"> 755 </span> : : struct dt_node *node;</a>
-<a name="756"><span class="lineNum"> 756 </span> : : int count, i;</a>
-<a name="757"><span class="lineNum"> 757 </span> : : char label[HB_RESERVE_MEM_LABEL_SIZE + 1];</a>
-<a name="758"><span class="lineNum"> 758 </span> : : </a>
-<a name="759"><span class="lineNum"> 759 </span> : : /*</a>
-<a name="760"><span class="lineNum"> 760 </span> : : * XXX: Reservation names only exist on P9 and on P7/8 we get the</a>
-<a name="761"><span class="lineNum"> 761 </span> : : * reserved ranges through the hostboot mini-FDT instead.</a>
-<a name="762"><span class="lineNum"> 762 </span> : : */</a>
-<a name="763"><span class="lineNum"> 763 </span> :<span class="lineCov"> 2 : if (proc_gen &lt; proc_gen_p9)</span></a>
-<a name="764"><span class="lineNum"> 764 </span> :<span class="lineCov"> 2 : return;</span></a>
-<a name="765"><span class="lineNum"> 765 </span> : : </a>
-<a name="766"><span class="lineNum"> 766 </span> :<span class="lineNoCov"> 0 : count = HDIF_get_iarray_size(ms_vpd, MSVPD_IDATA_HB_RESERVED_MEM);</span></a>
-<a name="767"><span class="lineNum"> 767 </span> :<span class="lineNoCov"> 0 : if (count &lt;= 0) {</span></a>
-<a name="768"><span class="lineNum"> 768 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: No hostboot reserved memory found\n&quot;);</span></a>
-<a name="769"><span class="lineNum"> 769 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="770"><span class="lineNum"> 770 </span> : : }</a>
-<a name="771"><span class="lineNum"> 771 </span> : : </a>
-<a name="772"><span class="lineNum"> 772 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; count; i++) {</span></a>
-<a name="773"><span class="lineNum"> 773 </span> :<span class="lineNoCov"> 0 : hb_resv_mem = HDIF_get_iarray_item(ms_vpd,</span></a>
-<a name="774"><span class="lineNum"> 774 </span> : : MSVPD_IDATA_HB_RESERVED_MEM,</a>
-<a name="775"><span class="lineNum"> 775 </span> : : i, NULL);</a>
-<a name="776"><span class="lineNum"> 776 </span> :<span class="lineNoCov"> 0 : if (!CHECK_SPPTR(hb_resv_mem))</span></a>
-<a name="777"><span class="lineNum"> 777 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="778"><span class="lineNum"> 778 </span> : : </a>
-<a name="779"><span class="lineNum"> 779 </span> :<span class="lineNoCov"> 0 : label_size = be32_to_cpu(hb_resv_mem-&gt;label_size);</span></a>
-<a name="780"><span class="lineNum"> 780 </span> :<span class="lineNoCov"> 0 : start_addr = be64_to_cpu(hb_resv_mem-&gt;start_addr);</span></a>
-<a name="781"><span class="lineNum"> 781 </span> :<span class="lineNoCov"> 0 : end_addr = be64_to_cpu(hb_resv_mem-&gt;end_addr);</span></a>
-<a name="782"><span class="lineNum"> 782 </span> : : </a>
-<a name="783"><span class="lineNum"> 783 </span> : : /* Zero length regions are a normal, but should be ignored */</a>
-<a name="784"><span class="lineNum"> 784 </span> :<span class="lineNoCov"> 0 : if (start_addr - end_addr == 0) {</span></a>
-<a name="785"><span class="lineNum"> 785 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;MEM: Ignoring zero length range\n&quot;);</span></a>
-<a name="786"><span class="lineNum"> 786 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="787"><span class="lineNum"> 787 </span> : : }</a>
-<a name="788"><span class="lineNum"> 788 </span> : : </a>
-<a name="789"><span class="lineNum"> 789 </span> : : /*</a>
-<a name="790"><span class="lineNum"> 790 </span> : : * Workaround broken HDAT reserve regions which are</a>
-<a name="791"><span class="lineNum"> 791 </span> : : * bigger than 512MB</a>
-<a name="792"><span class="lineNum"> 792 </span> : : */</a>
-<a name="793"><span class="lineNum"> 793 </span> :<span class="lineNoCov"> 0 : if ((end_addr - start_addr) &gt; 0x20000000) {</span></a>
-<a name="794"><span class="lineNum"> 794 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;MEM: Ignoring Bad HDAT reserve: too big\n&quot;);</span></a>
-<a name="795"><span class="lineNum"> 795 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="796"><span class="lineNum"> 796 </span> : : }</a>
-<a name="797"><span class="lineNum"> 797 </span> : : </a>
-<a name="798"><span class="lineNum"> 798 </span> : : /* remove the HRMOR bypass bit */</a>
-<a name="799"><span class="lineNum"> 799 </span> :<span class="lineNoCov"> 0 : start_addr &amp;= ~HRMOR_BIT;</span></a>
-<a name="800"><span class="lineNum"> 800 </span> :<span class="lineNoCov"> 0 : end_addr &amp;= ~HRMOR_BIT;</span></a>
-<a name="801"><span class="lineNum"> 801 </span> :<span class="lineNoCov"> 0 : if (label_size &gt; HB_RESERVE_MEM_LABEL_SIZE)</span></a>
-<a name="802"><span class="lineNum"> 802 </span> :<span class="lineNoCov"> 0 : label_size = HB_RESERVE_MEM_LABEL_SIZE;</span></a>
-<a name="803"><span class="lineNum"> 803 </span> : : </a>
-<a name="804"><span class="lineNum"> 804 </span> :<span class="lineNoCov"> 0 : memset(label, 0, HB_RESERVE_MEM_LABEL_SIZE + 1);</span></a>
-<a name="805"><span class="lineNum"> 805 </span> :<span class="lineNoCov"> 0 : memcpy(label, hb_resv_mem-&gt;label, label_size);</span></a>
-<a name="806"><span class="lineNum"> 806 </span> :<span class="lineNoCov"> 0 : label[label_size] = '\0';</span></a>
-<a name="807"><span class="lineNum"> 807 </span> : : </a>
-<a name="808"><span class="lineNum"> 808 </span> : : /* Unnamed reservations are always broken. Ignore them. */</a>
-<a name="809"><span class="lineNum"> 809 </span> :<span class="lineNoCov"> 0 : if (strlen(label) == 0)</span></a>
-<a name="810"><span class="lineNum"> 810 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="811"><span class="lineNum"> 811 </span> : : </a>
-<a name="812"><span class="lineNum"> 812 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;MEM: Reserve '%s' %#&quot; PRIx64 &quot;-%#&quot; PRIx64 &quot; (type/inst=0x%08x)\n&quot;,</span></a>
-<a name="813"><span class="lineNum"> 813 </span> : : label, start_addr, end_addr, be32_to_cpu(hb_resv_mem-&gt;type_instance));</a>
-<a name="814"><span class="lineNum"> 814 </span> : : </a>
-<a name="815"><span class="lineNum"> 815 </span> :<span class="lineNoCov"> 0 : node = add_hb_reserve_node(label, start_addr, end_addr);</span></a>
-<a name="816"><span class="lineNum"> 816 </span> :<span class="lineNoCov"> 0 : if (!node) {</span></a>
-<a name="817"><span class="lineNum"> 817 </span> :<span class="lineNoCov"> 0 : prerror(&quot;unable to add node?\n&quot;);</span></a>
-<a name="818"><span class="lineNum"> 818 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="819"><span class="lineNum"> 819 </span> : : }</a>
-<a name="820"><span class="lineNum"> 820 </span> : : </a>
-<a name="821"><span class="lineNum"> 821 </span> : : /* the three low bytes of type_instance is the instance data */</a>
-<a name="822"><span class="lineNum"> 822 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;ibm,prd-instance&quot;,</span></a>
-<a name="823"><span class="lineNum"> 823 </span> : : (be32_to_cpu(hb_resv_mem-&gt;type_instance) &amp; 0xffffff));</a>
-<a name="824"><span class="lineNum"> 824 </span> : : </a>
-<a name="825"><span class="lineNum"> 825 </span> : : /*</a>
-<a name="826"><span class="lineNum"> 826 </span> : : * Most reservations are used by HBRT itself so we should leave</a>
-<a name="827"><span class="lineNum"> 827 </span> : : * the label as-is. The exception is hbrt-code-image which is</a>
-<a name="828"><span class="lineNum"> 828 </span> : : * used by opal-prd to locate the HBRT image. Older versions</a>
-<a name="829"><span class="lineNum"> 829 </span> : : * of opal-prd expect this to be &quot;ibm,hbrt-code-image&quot; so make</a>
-<a name="830"><span class="lineNum"> 830 </span> : : * sure the prefix is there.</a>
-<a name="831"><span class="lineNum"> 831 </span> : : */</a>
-<a name="832"><span class="lineNum"> 832 </span> :<span class="lineNoCov"> 0 : if (!strcmp(label, &quot;hbrt-code-image&quot;))</span></a>
-<a name="833"><span class="lineNum"> 833 </span> :<span class="lineNoCov"> 0 : strcpy(label, &quot;ibm,hbrt-code-image&quot;);</span></a>
-<a name="834"><span class="lineNum"> 834 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(node, &quot;ibm,prd-label&quot;, label);</span></a>
-<a name="835"><span class="lineNum"> 835 </span> : : }</a>
-<a name="836"><span class="lineNum"> 836 </span> : : }</a>
-<a name="837"><span class="lineNum"> 837 </span> : : </a>
-<a name="838"><span class="lineNum"> 838 </span> :<span class="lineCov"> 2 : static void parse_trace_reservations(struct HDIF_common_hdr *ms_vpd)</span></a>
-<a name="839"><span class="lineNum"> 839 </span> : : {</a>
-<a name="840"><span class="lineNum"> 840 </span> : : unsigned int size;</a>
-<a name="841"><span class="lineNum"> 841 </span> : : int count, i;</a>
-<a name="842"><span class="lineNum"> 842 </span> : : </a>
-<a name="843"><span class="lineNum"> 843 </span> : : /*</a>
-<a name="844"><span class="lineNum"> 844 </span> : : * The trace arrays are only setup when hostboot is explicitly</a>
-<a name="845"><span class="lineNum"> 845 </span> : : * configured to enable them. We need to check and gracefully handle</a>
-<a name="846"><span class="lineNum"> 846 </span> : : * when they're not present.</a>
-<a name="847"><span class="lineNum"> 847 </span> : : */</a>
-<a name="848"><span class="lineNum"> 848 </span> : : </a>
-<a name="849"><span class="lineNum"> 849 </span> :<span class="lineCov"> 2 : if (!HDIF_get_idata(ms_vpd, MSVPD_IDATA_TRACE_AREAS, &amp;size) || !size) {</span></a>
-<a name="850"><span class="lineNum"> 850 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;MS VPD: No trace areas found\n&quot;);</span></a>
-<a name="851"><span class="lineNum"> 851 </span> :<span class="lineCov"> 2 : return;</span></a>
-<a name="852"><span class="lineNum"> 852 </span> : : }</a>
-<a name="853"><span class="lineNum"> 853 </span> : : </a>
-<a name="854"><span class="lineNum"> 854 </span> :<span class="lineCov"> 2 : count = HDIF_get_iarray_size(ms_vpd, MSVPD_IDATA_TRACE_AREAS);</span></a>
-<a name="855"><span class="lineNum"> 855 </span> :<span class="lineCov"> 2 : if (count &lt;= 0) {</span></a>
-<a name="856"><span class="lineNum"> 856 </span> :<span class="lineCov"> 2 : prlog(PR_DEBUG, &quot;MS VPD: No trace areas found\n&quot;);</span></a>
-<a name="857"><span class="lineNum"> 857 </span> :<span class="lineCov"> 2 : return;</span></a>
-<a name="858"><span class="lineNum"> 858 </span> : : }</a>
-<a name="859"><span class="lineNum"> 859 </span> : : </a>
-<a name="860"><span class="lineNum"> 860 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;MS VPD: Found %d trace areas\n&quot;, count);</span></a>
+<a name="748"><span class="lineNum"> 748 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64s(node, &quot;reg&quot;, start, end - start + 1);</span></a>
+<a name="749"><span class="lineNum"> 749 </span> : : </a>
+<a name="750"><span class="lineNum"> 750 </span> :<span class="lineNoCov"> 0 : return node;</span></a>
+<a name="751"><span class="lineNum"> 751 </span> : : }</a>
+<a name="752"><span class="lineNum"> 752 </span> : : </a>
+<a name="753"><span class="lineNum"> 753 </span> :<span class="lineCov"> 2 : static void get_hb_reserved_mem(struct HDIF_common_hdr *ms_vpd)</span></a>
+<a name="754"><span class="lineNum"> 754 </span> : : {</a>
+<a name="755"><span class="lineNum"> 755 </span> : : const struct msvpd_hb_reserved_mem *hb_resv_mem;</a>
+<a name="756"><span class="lineNum"> 756 </span> : : u64 start_addr, end_addr, label_size;</a>
+<a name="757"><span class="lineNum"> 757 </span> : : struct dt_node *node;</a>
+<a name="758"><span class="lineNum"> 758 </span> : : int count, i;</a>
+<a name="759"><span class="lineNum"> 759 </span> : : char label[HB_RESERVE_MEM_LABEL_SIZE + 1];</a>
+<a name="760"><span class="lineNum"> 760 </span> : : </a>
+<a name="761"><span class="lineNum"> 761 </span> : : /*</a>
+<a name="762"><span class="lineNum"> 762 </span> : : * XXX: Reservation names only exist on P9 and on P7/8 we get the</a>
+<a name="763"><span class="lineNum"> 763 </span> : : * reserved ranges through the hostboot mini-FDT instead.</a>
+<a name="764"><span class="lineNum"> 764 </span> : : */</a>
+<a name="765"><span class="lineNum"> 765 </span> :<span class="lineCov"> 2 : if (proc_gen &lt; proc_gen_p9)</span></a>
+<a name="766"><span class="lineNum"> 766 </span> :<span class="lineCov"> 2 : return;</span></a>
+<a name="767"><span class="lineNum"> 767 </span> : : </a>
+<a name="768"><span class="lineNum"> 768 </span> :<span class="lineNoCov"> 0 : count = HDIF_get_iarray_size(ms_vpd, MSVPD_IDATA_HB_RESERVED_MEM);</span></a>
+<a name="769"><span class="lineNum"> 769 </span> :<span class="lineNoCov"> 0 : if (count &lt;= 0) {</span></a>
+<a name="770"><span class="lineNum"> 770 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: No hostboot reserved memory found\n&quot;);</span></a>
+<a name="771"><span class="lineNum"> 771 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="772"><span class="lineNum"> 772 </span> : : }</a>
+<a name="773"><span class="lineNum"> 773 </span> : : </a>
+<a name="774"><span class="lineNum"> 774 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; count; i++) {</span></a>
+<a name="775"><span class="lineNum"> 775 </span> :<span class="lineNoCov"> 0 : hb_resv_mem = HDIF_get_iarray_item(ms_vpd,</span></a>
+<a name="776"><span class="lineNum"> 776 </span> : : MSVPD_IDATA_HB_RESERVED_MEM,</a>
+<a name="777"><span class="lineNum"> 777 </span> : : i, NULL);</a>
+<a name="778"><span class="lineNum"> 778 </span> :<span class="lineNoCov"> 0 : if (!CHECK_SPPTR(hb_resv_mem))</span></a>
+<a name="779"><span class="lineNum"> 779 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="780"><span class="lineNum"> 780 </span> : : </a>
+<a name="781"><span class="lineNum"> 781 </span> :<span class="lineNoCov"> 0 : label_size = be32_to_cpu(hb_resv_mem-&gt;label_size);</span></a>
+<a name="782"><span class="lineNum"> 782 </span> :<span class="lineNoCov"> 0 : start_addr = be64_to_cpu(hb_resv_mem-&gt;start_addr);</span></a>
+<a name="783"><span class="lineNum"> 783 </span> :<span class="lineNoCov"> 0 : end_addr = be64_to_cpu(hb_resv_mem-&gt;end_addr);</span></a>
+<a name="784"><span class="lineNum"> 784 </span> : : </a>
+<a name="785"><span class="lineNum"> 785 </span> : : /* Zero length regions are a normal, but should be ignored */</a>
+<a name="786"><span class="lineNum"> 786 </span> :<span class="lineNoCov"> 0 : if (start_addr - end_addr == 0) {</span></a>
+<a name="787"><span class="lineNum"> 787 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;MEM: Ignoring zero length range\n&quot;);</span></a>
+<a name="788"><span class="lineNum"> 788 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="789"><span class="lineNum"> 789 </span> : : }</a>
+<a name="790"><span class="lineNum"> 790 </span> : : </a>
+<a name="791"><span class="lineNum"> 791 </span> : : /*</a>
+<a name="792"><span class="lineNum"> 792 </span> : : * Workaround broken HDAT reserve regions which are</a>
+<a name="793"><span class="lineNum"> 793 </span> : : * bigger than 512MB</a>
+<a name="794"><span class="lineNum"> 794 </span> : : */</a>
+<a name="795"><span class="lineNum"> 795 </span> :<span class="lineNoCov"> 0 : if ((end_addr - start_addr) &gt; 0x20000000) {</span></a>
+<a name="796"><span class="lineNum"> 796 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;MEM: Ignoring Bad HDAT reserve: too big\n&quot;);</span></a>
+<a name="797"><span class="lineNum"> 797 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="798"><span class="lineNum"> 798 </span> : : }</a>
+<a name="799"><span class="lineNum"> 799 </span> : : </a>
+<a name="800"><span class="lineNum"> 800 </span> : : /* remove the HRMOR bypass bit */</a>
+<a name="801"><span class="lineNum"> 801 </span> :<span class="lineNoCov"> 0 : start_addr &amp;= ~HRMOR_BIT;</span></a>
+<a name="802"><span class="lineNum"> 802 </span> :<span class="lineNoCov"> 0 : end_addr &amp;= ~HRMOR_BIT;</span></a>
+<a name="803"><span class="lineNum"> 803 </span> :<span class="lineNoCov"> 0 : if (label_size &gt; HB_RESERVE_MEM_LABEL_SIZE)</span></a>
+<a name="804"><span class="lineNum"> 804 </span> :<span class="lineNoCov"> 0 : label_size = HB_RESERVE_MEM_LABEL_SIZE;</span></a>
+<a name="805"><span class="lineNum"> 805 </span> : : </a>
+<a name="806"><span class="lineNum"> 806 </span> :<span class="lineNoCov"> 0 : memset(label, 0, HB_RESERVE_MEM_LABEL_SIZE + 1);</span></a>
+<a name="807"><span class="lineNum"> 807 </span> :<span class="lineNoCov"> 0 : memcpy(label, hb_resv_mem-&gt;label, label_size);</span></a>
+<a name="808"><span class="lineNum"> 808 </span> :<span class="lineNoCov"> 0 : label[label_size] = '\0';</span></a>
+<a name="809"><span class="lineNum"> 809 </span> : : </a>
+<a name="810"><span class="lineNum"> 810 </span> : : /* Unnamed reservations are always broken. Ignore them. */</a>
+<a name="811"><span class="lineNum"> 811 </span> :<span class="lineNoCov"> 0 : if (strlen(label) == 0)</span></a>
+<a name="812"><span class="lineNum"> 812 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="813"><span class="lineNum"> 813 </span> : : </a>
+<a name="814"><span class="lineNum"> 814 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;MEM: Reserve '%s' %#&quot; PRIx64 &quot;-%#&quot; PRIx64 &quot; (type/inst=0x%08x)\n&quot;,</span></a>
+<a name="815"><span class="lineNum"> 815 </span> : : label, start_addr, end_addr, be32_to_cpu(hb_resv_mem-&gt;type_instance));</a>
+<a name="816"><span class="lineNum"> 816 </span> : : </a>
+<a name="817"><span class="lineNum"> 817 </span> :<span class="lineNoCov"> 0 : node = add_hb_reserve_node(label, start_addr, end_addr);</span></a>
+<a name="818"><span class="lineNum"> 818 </span> :<span class="lineNoCov"> 0 : if (!node) {</span></a>
+<a name="819"><span class="lineNum"> 819 </span> :<span class="lineNoCov"> 0 : prerror(&quot;unable to add node?\n&quot;);</span></a>
+<a name="820"><span class="lineNum"> 820 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="821"><span class="lineNum"> 821 </span> : : }</a>
+<a name="822"><span class="lineNum"> 822 </span> : : </a>
+<a name="823"><span class="lineNum"> 823 </span> : : /* the three low bytes of type_instance is the instance data */</a>
+<a name="824"><span class="lineNum"> 824 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;ibm,prd-instance&quot;,</span></a>
+<a name="825"><span class="lineNum"> 825 </span> : : (be32_to_cpu(hb_resv_mem-&gt;type_instance) &amp; 0xffffff));</a>
+<a name="826"><span class="lineNum"> 826 </span> : : </a>
+<a name="827"><span class="lineNum"> 827 </span> : : /*</a>
+<a name="828"><span class="lineNum"> 828 </span> : : * Most reservations are used by HBRT itself so we should leave</a>
+<a name="829"><span class="lineNum"> 829 </span> : : * the label as-is. The exception is hbrt-code-image which is</a>
+<a name="830"><span class="lineNum"> 830 </span> : : * used by opal-prd to locate the HBRT image. Older versions</a>
+<a name="831"><span class="lineNum"> 831 </span> : : * of opal-prd expect this to be &quot;ibm,hbrt-code-image&quot; so make</a>
+<a name="832"><span class="lineNum"> 832 </span> : : * sure the prefix is there.</a>
+<a name="833"><span class="lineNum"> 833 </span> : : */</a>
+<a name="834"><span class="lineNum"> 834 </span> :<span class="lineNoCov"> 0 : if (!strcmp(label, &quot;hbrt-code-image&quot;))</span></a>
+<a name="835"><span class="lineNum"> 835 </span> :<span class="lineNoCov"> 0 : strcpy(label, &quot;ibm,hbrt-code-image&quot;);</span></a>
+<a name="836"><span class="lineNum"> 836 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(node, &quot;ibm,prd-label&quot;, label);</span></a>
+<a name="837"><span class="lineNum"> 837 </span> : : }</a>
+<a name="838"><span class="lineNum"> 838 </span> : : }</a>
+<a name="839"><span class="lineNum"> 839 </span> : : </a>
+<a name="840"><span class="lineNum"> 840 </span> :<span class="lineCov"> 2 : static void parse_trace_reservations(struct HDIF_common_hdr *ms_vpd)</span></a>
+<a name="841"><span class="lineNum"> 841 </span> : : {</a>
+<a name="842"><span class="lineNum"> 842 </span> : : unsigned int size;</a>
+<a name="843"><span class="lineNum"> 843 </span> : : int count, i;</a>
+<a name="844"><span class="lineNum"> 844 </span> : : </a>
+<a name="845"><span class="lineNum"> 845 </span> : : /*</a>
+<a name="846"><span class="lineNum"> 846 </span> : : * The trace arrays are only setup when hostboot is explicitly</a>
+<a name="847"><span class="lineNum"> 847 </span> : : * configured to enable them. We need to check and gracefully handle</a>
+<a name="848"><span class="lineNum"> 848 </span> : : * when they're not present.</a>
+<a name="849"><span class="lineNum"> 849 </span> : : */</a>
+<a name="850"><span class="lineNum"> 850 </span> : : </a>
+<a name="851"><span class="lineNum"> 851 </span> :<span class="lineCov"> 2 : if (!HDIF_get_idata(ms_vpd, MSVPD_IDATA_TRACE_AREAS, &amp;size) || !size) {</span></a>
+<a name="852"><span class="lineNum"> 852 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;MS VPD: No trace areas found\n&quot;);</span></a>
+<a name="853"><span class="lineNum"> 853 </span> :<span class="lineCov"> 2 : return;</span></a>
+<a name="854"><span class="lineNum"> 854 </span> : : }</a>
+<a name="855"><span class="lineNum"> 855 </span> : : </a>
+<a name="856"><span class="lineNum"> 856 </span> :<span class="lineCov"> 2 : count = HDIF_get_iarray_size(ms_vpd, MSVPD_IDATA_TRACE_AREAS);</span></a>
+<a name="857"><span class="lineNum"> 857 </span> :<span class="lineCov"> 2 : if (count &lt;= 0) {</span></a>
+<a name="858"><span class="lineNum"> 858 </span> :<span class="lineCov"> 2 : prlog(PR_DEBUG, &quot;MS VPD: No trace areas found\n&quot;);</span></a>
+<a name="859"><span class="lineNum"> 859 </span> :<span class="lineCov"> 2 : return;</span></a>
+<a name="860"><span class="lineNum"> 860 </span> : : }</a>
<a name="861"><span class="lineNum"> 861 </span> : : </a>
-<a name="862"><span class="lineNum"> 862 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; count; i++) {</span></a>
-<a name="863"><span class="lineNum"> 863 </span> : : const struct msvpd_trace *trace_area;</a>
-<a name="864"><span class="lineNum"> 864 </span> : : struct dt_node *node;</a>
-<a name="865"><span class="lineNum"> 865 </span> : : u64 start, end;</a>
-<a name="866"><span class="lineNum"> 866 </span> : : </a>
-<a name="867"><span class="lineNum"> 867 </span> :<span class="lineNoCov"> 0 : trace_area = HDIF_get_iarray_item(ms_vpd,</span></a>
-<a name="868"><span class="lineNum"> 868 </span> : : MSVPD_IDATA_TRACE_AREAS, i, &amp;size);</a>
-<a name="869"><span class="lineNum"> 869 </span> : : </a>
-<a name="870"><span class="lineNum"> 870 </span> :<span class="lineNoCov"> 0 : if (!trace_area)</span></a>
-<a name="871"><span class="lineNum"> 871 </span> :<span class="lineNoCov"> 0 : return; /* shouldn't happen */</span></a>
-<a name="872"><span class="lineNum"> 872 </span> : : </a>
-<a name="873"><span class="lineNum"> 873 </span> :<span class="lineNoCov"> 0 : start = be64_to_cpu(trace_area-&gt;start) &amp; ~HRMOR_BIT;</span></a>
-<a name="874"><span class="lineNum"> 874 </span> :<span class="lineNoCov"> 0 : end = be64_to_cpu(trace_area-&gt;end) &amp; ~HRMOR_BIT;</span></a>
-<a name="875"><span class="lineNum"> 875 </span> : : </a>
-<a name="876"><span class="lineNum"> 876 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO,</span></a>
-<a name="877"><span class="lineNum"> 877 </span> : : &quot;MS VPD: Trace area: 0x%.16&quot;PRIx64&quot;-0x%.16&quot;PRIx64&quot;\n&quot;,</a>
-<a name="878"><span class="lineNum"> 878 </span> : : start, end);</a>
-<a name="879"><span class="lineNum"> 879 </span> : : </a>
-<a name="880"><span class="lineNum"> 880 </span> :<span class="lineNoCov"> 0 : node = add_hb_reserve_node(&quot;trace-area&quot;, start, end);</span></a>
-<a name="881"><span class="lineNum"> 881 </span> :<span class="lineNoCov"> 0 : if (!node) {</span></a>
-<a name="882"><span class="lineNum"> 882 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MEM: Unable to reserve trace area %p-%p\n&quot;,</span></a>
-<a name="883"><span class="lineNum"> 883 </span> : : (void *) start, (void *) end);</a>
-<a name="884"><span class="lineNum"> 884 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="885"><span class="lineNum"> 885 </span> : : }</a>
-<a name="886"><span class="lineNum"> 886 </span> : : </a>
-<a name="887"><span class="lineNum"> 887 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;no-map&quot;, NULL, 0);</span></a>
-<a name="888"><span class="lineNum"> 888 </span> : : }</a>
-<a name="889"><span class="lineNum"> 889 </span> : : }</a>
-<a name="890"><span class="lineNum"> 890 </span> : : </a>
-<a name="891"><span class="lineNum"> 891 </span> :<span class="lineCov"> 2 : static bool __memory_parse(struct dt_node *root)</span></a>
-<a name="892"><span class="lineNum"> 892 </span> : : {</a>
-<a name="893"><span class="lineNum"> 893 </span> : : struct HDIF_common_hdr *ms_vpd;</a>
-<a name="894"><span class="lineNum"> 894 </span> : : const struct msvpd_ms_addr_config *msac;</a>
-<a name="895"><span class="lineNum"> 895 </span> : : const struct msvpd_total_config_ms *tcms;</a>
-<a name="896"><span class="lineNum"> 896 </span> : : unsigned int size;</a>
-<a name="897"><span class="lineNum"> 897 </span> : : </a>
-<a name="898"><span class="lineNum"> 898 </span> :<span class="lineCov"> 2 : ms_vpd = get_hdif(&amp;spira.ntuples.ms_vpd, MSVPD_HDIF_SIG);</span></a>
-<a name="899"><span class="lineNum"> 899 </span> :<span class="lineCov"> 2 : if (!ms_vpd) {</span></a>
-<a name="900"><span class="lineNum"> 900 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: invalid\n&quot;);</span></a>
-<a name="901"><span class="lineNum"> 901 </span> :<span class="lineNoCov"> 0 : op_display(OP_FATAL, OP_MOD_MEM, 0x0000);</span></a>
-<a name="902"><span class="lineNum"> 902 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="903"><span class="lineNum"> 903 </span> : : }</a>
-<a name="904"><span class="lineNum"> 904 </span> :<span class="lineCov"> 2 : if (be32_to_cpu(spira.ntuples.ms_vpd.act_len) &lt; sizeof(*ms_vpd)) {</span></a>
-<a name="905"><span class="lineNum"> 905 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: invalid size %u\n&quot;,</span></a>
-<a name="906"><span class="lineNum"> 906 </span> : : be32_to_cpu(spira.ntuples.ms_vpd.act_len));</a>
-<a name="907"><span class="lineNum"> 907 </span> :<span class="lineNoCov"> 0 : op_display(OP_FATAL, OP_MOD_MEM, 0x0001);</span></a>
-<a name="908"><span class="lineNum"> 908 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="909"><span class="lineNum"> 909 </span> : : }</a>
-<a name="910"><span class="lineNum"> 910 </span> : : </a>
-<a name="911"><span class="lineNum"> 911 </span> :<span class="lineCov"> 2 : prlog(PR_DEBUG, &quot;MS VPD: is at %p\n&quot;, ms_vpd);</span></a>
+<a name="862"><span class="lineNum"> 862 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;MS VPD: Found %d trace areas\n&quot;, count);</span></a>
+<a name="863"><span class="lineNum"> 863 </span> : : </a>
+<a name="864"><span class="lineNum"> 864 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; count; i++) {</span></a>
+<a name="865"><span class="lineNum"> 865 </span> : : const struct msvpd_trace *trace_area;</a>
+<a name="866"><span class="lineNum"> 866 </span> : : struct dt_node *node;</a>
+<a name="867"><span class="lineNum"> 867 </span> : : u64 start, end;</a>
+<a name="868"><span class="lineNum"> 868 </span> : : </a>
+<a name="869"><span class="lineNum"> 869 </span> :<span class="lineNoCov"> 0 : trace_area = HDIF_get_iarray_item(ms_vpd,</span></a>
+<a name="870"><span class="lineNum"> 870 </span> : : MSVPD_IDATA_TRACE_AREAS, i, &amp;size);</a>
+<a name="871"><span class="lineNum"> 871 </span> : : </a>
+<a name="872"><span class="lineNum"> 872 </span> :<span class="lineNoCov"> 0 : if (!trace_area)</span></a>
+<a name="873"><span class="lineNum"> 873 </span> :<span class="lineNoCov"> 0 : return; /* shouldn't happen */</span></a>
+<a name="874"><span class="lineNum"> 874 </span> : : </a>
+<a name="875"><span class="lineNum"> 875 </span> :<span class="lineNoCov"> 0 : start = be64_to_cpu(trace_area-&gt;start) &amp; ~HRMOR_BIT;</span></a>
+<a name="876"><span class="lineNum"> 876 </span> :<span class="lineNoCov"> 0 : end = be64_to_cpu(trace_area-&gt;end) &amp; ~HRMOR_BIT;</span></a>
+<a name="877"><span class="lineNum"> 877 </span> : : </a>
+<a name="878"><span class="lineNum"> 878 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO,</span></a>
+<a name="879"><span class="lineNum"> 879 </span> : : &quot;MS VPD: Trace area: 0x%.16&quot;PRIx64&quot;-0x%.16&quot;PRIx64&quot;\n&quot;,</a>
+<a name="880"><span class="lineNum"> 880 </span> : : start, end);</a>
+<a name="881"><span class="lineNum"> 881 </span> : : </a>
+<a name="882"><span class="lineNum"> 882 </span> :<span class="lineNoCov"> 0 : node = add_hb_reserve_node(&quot;trace-area&quot;, start, end);</span></a>
+<a name="883"><span class="lineNum"> 883 </span> :<span class="lineNoCov"> 0 : if (!node) {</span></a>
+<a name="884"><span class="lineNum"> 884 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MEM: Unable to reserve trace area %p-%p\n&quot;,</span></a>
+<a name="885"><span class="lineNum"> 885 </span> : : (void *) start, (void *) end);</a>
+<a name="886"><span class="lineNum"> 886 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="887"><span class="lineNum"> 887 </span> : : }</a>
+<a name="888"><span class="lineNum"> 888 </span> : : </a>
+<a name="889"><span class="lineNum"> 889 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;no-map&quot;, NULL, 0);</span></a>
+<a name="890"><span class="lineNum"> 890 </span> : : }</a>
+<a name="891"><span class="lineNum"> 891 </span> : : }</a>
+<a name="892"><span class="lineNum"> 892 </span> : : </a>
+<a name="893"><span class="lineNum"> 893 </span> :<span class="lineCov"> 2 : static bool __memory_parse(struct dt_node *root)</span></a>
+<a name="894"><span class="lineNum"> 894 </span> : : {</a>
+<a name="895"><span class="lineNum"> 895 </span> : : struct HDIF_common_hdr *ms_vpd;</a>
+<a name="896"><span class="lineNum"> 896 </span> : : const struct msvpd_ms_addr_config *msac;</a>
+<a name="897"><span class="lineNum"> 897 </span> : : const struct msvpd_total_config_ms *tcms;</a>
+<a name="898"><span class="lineNum"> 898 </span> : : unsigned int size;</a>
+<a name="899"><span class="lineNum"> 899 </span> : : </a>
+<a name="900"><span class="lineNum"> 900 </span> :<span class="lineCov"> 2 : ms_vpd = get_hdif(&amp;spira.ntuples.ms_vpd, MSVPD_HDIF_SIG);</span></a>
+<a name="901"><span class="lineNum"> 901 </span> :<span class="lineCov"> 2 : if (!ms_vpd) {</span></a>
+<a name="902"><span class="lineNum"> 902 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: invalid\n&quot;);</span></a>
+<a name="903"><span class="lineNum"> 903 </span> :<span class="lineNoCov"> 0 : op_display(OP_FATAL, OP_MOD_MEM, 0x0000);</span></a>
+<a name="904"><span class="lineNum"> 904 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="905"><span class="lineNum"> 905 </span> : : }</a>
+<a name="906"><span class="lineNum"> 906 </span> :<span class="lineCov"> 2 : if (be32_to_cpu(spira.ntuples.ms_vpd.act_len) &lt; sizeof(*ms_vpd)) {</span></a>
+<a name="907"><span class="lineNum"> 907 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: invalid size %u\n&quot;,</span></a>
+<a name="908"><span class="lineNum"> 908 </span> : : be32_to_cpu(spira.ntuples.ms_vpd.act_len));</a>
+<a name="909"><span class="lineNum"> 909 </span> :<span class="lineNoCov"> 0 : op_display(OP_FATAL, OP_MOD_MEM, 0x0001);</span></a>
+<a name="910"><span class="lineNum"> 910 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="911"><span class="lineNum"> 911 </span> : : }</a>
<a name="912"><span class="lineNum"> 912 </span> : : </a>
-<a name="913"><span class="lineNum"> 913 </span> :<span class="lineCov"> 2 : msac = HDIF_get_idata(ms_vpd, MSVPD_IDATA_MS_ADDR_CONFIG, &amp;size);</span></a>
-<a name="914"><span class="lineNum"> 914 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(msac) || size &lt; sizeof(*msac)) {</span></a>
-<a name="915"><span class="lineNum"> 915 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: bad msac size %u @ %p\n&quot;, size, msac);</span></a>
-<a name="916"><span class="lineNum"> 916 </span> :<span class="lineNoCov"> 0 : op_display(OP_FATAL, OP_MOD_MEM, 0x0002);</span></a>
-<a name="917"><span class="lineNum"> 917 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="918"><span class="lineNum"> 918 </span> : : }</a>
-<a name="919"><span class="lineNum"> 919 </span> :<span class="lineCov"> 2 : prlog(PR_DEBUG, &quot;MS VPD: MSAC is at %p\n&quot;, msac);</span></a>
-<a name="920"><span class="lineNum"> 920 </span> : : </a>
-<a name="921"><span class="lineNum"> 921 </span> :<span class="lineCov"> 2 : dt_add_property_u64(dt_root, DT_PRIVATE &quot;maxmem&quot;,</span></a>
-<a name="922"><span class="lineNum"> 922 </span> : : be64_to_cpu(msac-&gt;max_configured_ms_address));</a>
+<a name="913"><span class="lineNum"> 913 </span> :<span class="lineCov"> 2 : prlog(PR_DEBUG, &quot;MS VPD: is at %p\n&quot;, ms_vpd);</span></a>
+<a name="914"><span class="lineNum"> 914 </span> : : </a>
+<a name="915"><span class="lineNum"> 915 </span> :<span class="lineCov"> 2 : msac = HDIF_get_idata(ms_vpd, MSVPD_IDATA_MS_ADDR_CONFIG, &amp;size);</span></a>
+<a name="916"><span class="lineNum"> 916 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(msac) ||</span></a>
+<a name="917"><span class="lineNum"> 917 </span> :<span class="lineCov"> 2 : size &lt; offsetof(struct msvpd_ms_addr_config, max_possible_ms_address)) {</span></a>
+<a name="918"><span class="lineNum"> 918 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: bad msac size %u @ %p\n&quot;, size, msac);</span></a>
+<a name="919"><span class="lineNum"> 919 </span> :<span class="lineNoCov"> 0 : op_display(OP_FATAL, OP_MOD_MEM, 0x0002);</span></a>
+<a name="920"><span class="lineNum"> 920 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="921"><span class="lineNum"> 921 </span> : : }</a>
+<a name="922"><span class="lineNum"> 922 </span> :<span class="lineCov"> 2 : prlog(PR_DEBUG, &quot;MS VPD: MSAC is at %p\n&quot;, msac);</span></a>
<a name="923"><span class="lineNum"> 923 </span> : : </a>
-<a name="924"><span class="lineNum"> 924 </span> :<span class="lineCov"> 2 : tcms = HDIF_get_idata(ms_vpd, MSVPD_IDATA_TOTAL_CONFIG_MS, &amp;size);</span></a>
-<a name="925"><span class="lineNum"> 925 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(tcms) || size &lt; sizeof(*tcms)) {</span></a>
-<a name="926"><span class="lineNum"> 926 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: Bad tcms size %u @ %p\n&quot;, size, tcms);</span></a>
-<a name="927"><span class="lineNum"> 927 </span> :<span class="lineNoCov"> 0 : op_display(OP_FATAL, OP_MOD_MEM, 0x0003);</span></a>
-<a name="928"><span class="lineNum"> 928 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="929"><span class="lineNum"> 929 </span> : : }</a>
-<a name="930"><span class="lineNum"> 930 </span> :<span class="lineCov"> 2 : prlog(PR_DEBUG, &quot;MS VPD: TCMS is at %p\n&quot;, tcms);</span></a>
-<a name="931"><span class="lineNum"> 931 </span> : : </a>
-<a name="932"><span class="lineNum"> 932 </span> :<span class="lineCov"> 2 : prlog(PR_DEBUG, &quot;MS VPD: Maximum configured address: 0x%llx\n&quot;,</span></a>
-<a name="933"><span class="lineNum"> 933 </span> : : (long long)be64_to_cpu(msac-&gt;max_configured_ms_address));</a>
-<a name="934"><span class="lineNum"> 934 </span> :<span class="lineCov"> 2 : prlog(PR_DEBUG, &quot;MS VPD: Maximum possible address: 0x%llx\n&quot;,</span></a>
-<a name="935"><span class="lineNum"> 935 </span> : : (long long)be64_to_cpu(msac-&gt;max_possible_ms_address));</a>
-<a name="936"><span class="lineNum"> 936 </span> : : </a>
-<a name="937"><span class="lineNum"> 937 </span> :<span class="lineCov"> 2 : get_msareas(root, ms_vpd);</span></a>
-<a name="938"><span class="lineNum"> 938 </span> : : </a>
-<a name="939"><span class="lineNum"> 939 </span> :<span class="lineCov"> 2 : get_hb_reserved_mem(ms_vpd);</span></a>
-<a name="940"><span class="lineNum"> 940 </span> : : </a>
-<a name="941"><span class="lineNum"> 941 </span> :<span class="lineCov"> 2 : parse_trace_reservations(ms_vpd);</span></a>
-<a name="942"><span class="lineNum"> 942 </span> : : </a>
-<a name="943"><span class="lineNum"> 943 </span> :<span class="lineCov"> 2 : prlog(PR_INFO, &quot;MS VPD: Total MB of RAM: 0x%llx\n&quot;,</span></a>
-<a name="944"><span class="lineNum"> 944 </span> : : (long long)be64_to_cpu(tcms-&gt;total_in_mb));</a>
+<a name="924"><span class="lineNum"> 924 </span> :<span class="lineCov"> 2 : dt_add_property_u64(dt_root, DT_PRIVATE &quot;maxmem&quot;,</span></a>
+<a name="925"><span class="lineNum"> 925 </span> : : be64_to_cpu(msac-&gt;max_configured_ms_address));</a>
+<a name="926"><span class="lineNum"> 926 </span> : : </a>
+<a name="927"><span class="lineNum"> 927 </span> :<span class="lineCov"> 2 : tcms = HDIF_get_idata(ms_vpd, MSVPD_IDATA_TOTAL_CONFIG_MS, &amp;size);</span></a>
+<a name="928"><span class="lineNum"> 928 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(tcms) || size &lt; sizeof(*tcms)) {</span></a>
+<a name="929"><span class="lineNum"> 929 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: Bad tcms size %u @ %p\n&quot;, size, tcms);</span></a>
+<a name="930"><span class="lineNum"> 930 </span> :<span class="lineNoCov"> 0 : op_display(OP_FATAL, OP_MOD_MEM, 0x0003);</span></a>
+<a name="931"><span class="lineNum"> 931 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="932"><span class="lineNum"> 932 </span> : : }</a>
+<a name="933"><span class="lineNum"> 933 </span> :<span class="lineCov"> 2 : prlog(PR_DEBUG, &quot;MS VPD: TCMS is at %p\n&quot;, tcms);</span></a>
+<a name="934"><span class="lineNum"> 934 </span> : : </a>
+<a name="935"><span class="lineNum"> 935 </span> :<span class="lineCov"> 2 : prlog(PR_DEBUG, &quot;MS VPD: Maximum configured address: 0x%llx\n&quot;,</span></a>
+<a name="936"><span class="lineNum"> 936 </span> : : (long long)be64_to_cpu(msac-&gt;max_configured_ms_address));</a>
+<a name="937"><span class="lineNum"> 937 </span> :<span class="lineCov"> 2 : prlog(PR_DEBUG, &quot;MS VPD: Maximum possible address: 0x%llx\n&quot;,</span></a>
+<a name="938"><span class="lineNum"> 938 </span> : : (long long)be64_to_cpu(msac-&gt;max_possible_ms_address));</a>
+<a name="939"><span class="lineNum"> 939 </span> : : </a>
+<a name="940"><span class="lineNum"> 940 </span> :<span class="lineCov"> 2 : get_msareas(root, ms_vpd);</span></a>
+<a name="941"><span class="lineNum"> 941 </span> : : </a>
+<a name="942"><span class="lineNum"> 942 </span> :<span class="lineCov"> 2 : get_hb_reserved_mem(ms_vpd);</span></a>
+<a name="943"><span class="lineNum"> 943 </span> : : </a>
+<a name="944"><span class="lineNum"> 944 </span> :<span class="lineCov"> 2 : parse_trace_reservations(ms_vpd);</span></a>
<a name="945"><span class="lineNum"> 945 </span> : : </a>
-<a name="946"><span class="lineNum"> 946 </span> :<span class="lineCov"> 2 : return true;</span></a>
-<a name="947"><span class="lineNum"> 947 </span> : : }</a>
+<a name="946"><span class="lineNum"> 946 </span> :<span class="lineCov"> 2 : prlog(PR_INFO, &quot;MS VPD: Total MB of RAM: 0x%llx\n&quot;,</span></a>
+<a name="947"><span class="lineNum"> 947 </span> : : (long long)be64_to_cpu(tcms-&gt;total_in_mb));</a>
<a name="948"><span class="lineNum"> 948 </span> : : </a>
-<a name="949"><span class="lineNum"> 949 </span> :<span class="lineCov"> 2 : void memory_parse(void)</span></a>
-<a name="950"><span class="lineNum"> 950 </span> : : {</a>
-<a name="951"><span class="lineNum"> 951 </span> :<span class="lineCov"> 2 : if (!__memory_parse(dt_root)) {</span></a>
-<a name="952"><span class="lineNum"> 952 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: Failed memory init !\n&quot;);</span></a>
-<a name="953"><span class="lineNum"> 953 </span> :<span class="lineNoCov"> 0 : abort();</span></a>
-<a name="954"><span class="lineNum"> 954 </span> : : }</a>
-<a name="955"><span class="lineNum"> 955 </span> :<span class="lineCov"> 2 : }</span></a>
-<a name="956"><span class="lineNum"> 956 </span> : : </a>
+<a name="949"><span class="lineNum"> 949 </span> :<span class="lineCov"> 2 : return true;</span></a>
+<a name="950"><span class="lineNum"> 950 </span> : : }</a>
+<a name="951"><span class="lineNum"> 951 </span> : : </a>
+<a name="952"><span class="lineNum"> 952 </span> :<span class="lineCov"> 2 : void memory_parse(void)</span></a>
+<a name="953"><span class="lineNum"> 953 </span> : : {</a>
+<a name="954"><span class="lineNum"> 954 </span> :<span class="lineCov"> 2 : if (!__memory_parse(dt_root)) {</span></a>
+<a name="955"><span class="lineNum"> 955 </span> :<span class="lineNoCov"> 0 : prerror(&quot;MS VPD: Failed memory init !\n&quot;);</span></a>
+<a name="956"><span class="lineNum"> 956 </span> :<span class="lineNoCov"> 0 : abort();</span></a>
+<a name="957"><span class="lineNum"> 957 </span> : : }</a>
+<a name="958"><span class="lineNum"> 958 </span> :<span class="lineCov"> 2 : }</span></a>
</pre>
</td>
</tr>
diff --git a/coverage-report/hdata/pcia.c.func-sort-c.html b/coverage-report/hdata/pcia.c.func-sort-c.html
index 1fe3498..7dd5f3b 100644
--- a/coverage-report/hdata/pcia.c.func-sort-c.html
+++ b/coverage-report/hdata/pcia.c.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">84</td>
- <td class="headerCovTableEntry">104</td>
- <td class="headerCovTableEntryMed">80.8 %</td>
+ <td class="headerCovTableEntry">85</td>
+ <td class="headerCovTableEntry">105</td>
+ <td class="headerCovTableEntryMed">81.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
@@ -69,11 +69,11 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="pcia.c.gcov.html#175">pcia_parse</a></td>
+ <td class="coverFn"><a href="pcia.c.gcov.html#176">pcia_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="pcia.c.gcov.html#86">add_core_node</a></td>
+ <td class="coverFn"><a href="pcia.c.gcov.html#87">add_core_node</a></td>
<td class="coverFnHi">26</td>
</tr>
<tr>
diff --git a/coverage-report/hdata/pcia.c.func.html b/coverage-report/hdata/pcia.c.func.html
index 8f4ce3e..9fc0e65 100644
--- a/coverage-report/hdata/pcia.c.func.html
+++ b/coverage-report/hdata/pcia.c.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">84</td>
- <td class="headerCovTableEntry">104</td>
- <td class="headerCovTableEntryMed">80.8 %</td>
+ <td class="headerCovTableEntry">85</td>
+ <td class="headerCovTableEntry">105</td>
+ <td class="headerCovTableEntryMed">81.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
@@ -69,7 +69,7 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="pcia.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="pcia.c.gcov.html#86">add_core_node</a></td>
+ <td class="coverFn"><a href="pcia.c.gcov.html#87">add_core_node</a></td>
<td class="coverFnHi">26</td>
</tr>
<tr>
@@ -85,7 +85,7 @@
<td class="coverFnHi">52</td>
</tr>
<tr>
- <td class="coverFn"><a href="pcia.c.gcov.html#175">pcia_parse</a></td>
+ <td class="coverFn"><a href="pcia.c.gcov.html#176">pcia_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
</table>
diff --git a/coverage-report/hdata/pcia.c.gcov.html b/coverage-report/hdata/pcia.c.gcov.html
index 69a3831..9bfbbe9 100644
--- a/coverage-report/hdata/pcia.c.gcov.html
+++ b/coverage-report/hdata/pcia.c.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">84</td>
- <td class="headerCovTableEntry">104</td>
- <td class="headerCovTableEntryMed">80.8 %</td>
+ <td class="headerCovTableEntry">85</td>
+ <td class="headerCovTableEntry">105</td>
+ <td class="headerCovTableEntryMed">81.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
@@ -149,152 +149,153 @@
<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 26 : dt_add_property_cells(icp, &quot;ibm,interrupt-server-ranges&quot;,</span></a>
<a name="79"><span class="lineNum"> 79 </span> : : irange[0], irange[1]);</a>
<a name="80"><span class="lineNum"> 80 </span> :<span class="lineCov"> 26 : dt_add_property(icp, &quot;interrupt-controller&quot;, NULL, 0);</span></a>
-<a name="81"><span class="lineNum"> 81 </span> :<span class="lineCov"> 26 : dt_add_property(icp, &quot;reg&quot;, reg, rsize);</span></a>
-<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 26 : dt_add_property_cells(icp, &quot;#address-cells&quot;, 0);</span></a>
-<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 26 : dt_add_property_string(icp, &quot;device_type&quot;,</span></a>
-<a name="84"><span class="lineNum"> 84 </span> : : &quot;PowerPC-External-Interrupt-Presentation&quot;);</a>
-<a name="85"><span class="lineNum"> 85 </span> :<span class="lineCov"> 26 : free(reg);</span></a>
-<a name="86"><span class="lineNum"> 86 </span> : : }</a>
-<a name="87"><span class="lineNum"> 87 </span> : : </a>
-<a name="88"><span class="lineNum"> 88 </span> :<span class="lineCov"> 26 : static struct dt_node *add_core_node(struct dt_node *cpus,</span></a>
-<a name="89"><span class="lineNum"> 89 </span> : : const void *pcia,</a>
-<a name="90"><span class="lineNum"> 90 </span> : : const struct sppcia_core_unique *id,</a>
-<a name="91"><span class="lineNum"> 91 </span> : : bool okay)</a>
-<a name="92"><span class="lineNum"> 92 </span> : : {</a>
-<a name="93"><span class="lineNum"> 93 </span> : : const struct sppcia_cpu_thread *t;</a>
-<a name="94"><span class="lineNum"> 94 </span> : : const struct sppcia_cpu_timebase *timebase;</a>
-<a name="95"><span class="lineNum"> 95 </span> : : const struct sppcia_cpu_cache *cache;</a>
-<a name="96"><span class="lineNum"> 96 </span> : : const struct sppcia_cpu_attr *attr;</a>
-<a name="97"><span class="lineNum"> 97 </span> : : struct dt_node *cpu;</a>
-<a name="98"><span class="lineNum"> 98 </span> : : const char *icp_compat;</a>
-<a name="99"><span class="lineNum"> 99 </span> : : u32 i, size, threads, ve_flags, l2_phandle, chip_id;</a>
-<a name="100"><span class="lineNum"> 100 </span> : : __be32 iserv[PCIA_MAX_THREADS];</a>
-<a name="101"><span class="lineNum"> 101 </span> : : </a>
-<a name="102"><span class="lineNum"> 102 </span> : : /* Look for thread 0 */</a>
-<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 26 : t = find_tada(pcia, 0);</span></a>
-<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 26 : if (!t) {</span></a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CORE[%i]: Failed to find thread 0 !\n&quot;,</span></a>
-<a name="106"><span class="lineNum"> 106 </span> : : pcia_index(pcia));</a>
-<a name="107"><span class="lineNum"> 107 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="108"><span class="lineNum"> 108 </span> : : }</a>
-<a name="109"><span class="lineNum"> 109 </span> : : </a>
-<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 26 : ve_flags = be32_to_cpu(id-&gt;verif_exist_flags);</span></a>
-<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 26 : threads = ((ve_flags &amp; CPU_ID_NUM_SECONDARY_THREAD_MASK)</span></a>
-<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 26 : &gt;&gt; CPU_ID_NUM_SECONDARY_THREAD_SHIFT) + 1;</span></a>
-<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 26 : assert(threads &lt;= PCIA_MAX_THREADS);</span></a>
-<a name="114"><span class="lineNum"> 114 </span> : : </a>
-<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 26 : prlog(PR_INFO, &quot;CORE[%i]: PIR=%.8x %s %s(%u threads)\n&quot;,</span></a>
-<a name="116"><span class="lineNum"> 116 </span> : : pcia_index(pcia), be32_to_cpu(t-&gt;pir),</a>
-<a name="117"><span class="lineNum"> 117 </span> : : ve_flags &amp; CPU_ID_PCIA_RESERVED</a>
-<a name="118"><span class="lineNum"> 118 </span> : : ? &quot;**RESERVED**&quot; : cpu_state(ve_flags),</a>
-<a name="119"><span class="lineNum"> 119 </span> : : be32_to_cpu(t-&gt;pir) == boot_cpu-&gt;pir ? &quot;[boot] &quot; : &quot;&quot;, threads);</a>
-<a name="120"><span class="lineNum"> 120 </span> : : </a>
-<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 26 : timebase = HDIF_get_idata(pcia, SPPCIA_IDATA_TIMEBASE, &amp;size);</span></a>
-<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 26 : if (!timebase || size &lt; sizeof(*timebase)) {</span></a>
-<a name="123"><span class="lineNum"> 123 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CORE[%i]: bad timebase size %u @ %p\n&quot;,</span></a>
-<a name="124"><span class="lineNum"> 124 </span> : : pcia_index(pcia), size, timebase);</a>
-<a name="125"><span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="126"><span class="lineNum"> 126 </span> : : }</a>
-<a name="127"><span class="lineNum"> 127 </span> : : </a>
-<a name="128"><span class="lineNum"> 128 </span> :<span class="lineCov"> 26 : cache = HDIF_get_idata(pcia, SPPCIA_IDATA_CPU_CACHE, &amp;size);</span></a>
-<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 26 : if (!cache || size &lt; sizeof(*cache)) {</span></a>
-<a name="130"><span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CORE[%i]: bad cache size %u @ %p\n&quot;,</span></a>
-<a name="131"><span class="lineNum"> 131 </span> : : pcia_index(pcia), size, cache);</a>
-<a name="132"><span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="133"><span class="lineNum"> 133 </span> : : }</a>
-<a name="134"><span class="lineNum"> 134 </span> : : </a>
-<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 26 : cpu = add_core_common(cpus, cache, timebase,</span></a>
-<a name="136"><span class="lineNum"> 136 </span> : : be32_to_cpu(t-&gt;pir), okay);</a>
-<a name="137"><span class="lineNum"> 137 </span> : : </a>
-<a name="138"><span class="lineNum"> 138 </span> : : /* Core attributes */</a>
-<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 26 : attr = HDIF_get_idata(pcia, SPPCIA_IDATA_CPU_ATTR, &amp;size);</span></a>
-<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 26 : if (attr)</span></a>
-<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 26 : add_core_attr(cpu, be32_to_cpu(attr-&gt;attr));</span></a>
-<a name="142"><span class="lineNum"> 142 </span> : : </a>
-<a name="143"><span class="lineNum"> 143 </span> : : /* Add cache info */</a>
-<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 26 : l2_phandle = add_core_cache_info(cpus, cache,</span></a>
-<a name="145"><span class="lineNum"> 145 </span> : : be32_to_cpu(t-&gt;pir), okay);</a>
-<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;l2-cache&quot;, l2_phandle);</span></a>
-<a name="147"><span class="lineNum"> 147 </span> : : </a>
-<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 26 : if (proc_gen == proc_gen_p8)</span></a>
-<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 26 : icp_compat = &quot;IBM,power8-icp&quot;;</span></a>
-<a name="150"><span class="lineNum"> 150 </span> : : </a>
-<a name="151"><span class="lineNum"> 151 </span> : : /* Get HW Chip ID */</a>
-<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 26 : chip_id = pcid_to_chip_id(be32_to_cpu(id-&gt;proc_chip_id));</span></a>
-<a name="153"><span class="lineNum"> 153 </span> : : </a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,pir&quot;, be32_to_cpu(t-&gt;pir));</span></a>
-<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,chip-id&quot;, chip_id);</span></a>
-<a name="156"><span class="lineNum"> 156 </span> : : </a>
-<a name="157"><span class="lineNum"> 157 </span> : : /* Build ibm,ppc-interrupt-server#s with all threads */</a>
-<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 234 : for (i = 0; i &lt; threads; i++) {</span></a>
-<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 208 : t = find_tada(pcia, i);</span></a>
-<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 208 : if (!t) {</span></a>
-<a name="161"><span class="lineNum"> 161 </span> :<span class="lineNoCov"> 0 : threads = i;</span></a>
-<a name="162"><span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="163"><span class="lineNum"> 163 </span> : : }</a>
-<a name="164"><span class="lineNum"> 164 </span> : : </a>
-<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 208 : iserv[i] = t-&gt;pir;</span></a>
-<a name="166"><span class="lineNum"> 166 </span> : : }</a>
-<a name="167"><span class="lineNum"> 167 </span> : : </a>
-<a name="168"><span class="lineNum"> 168 </span> :<span class="lineCov"> 26 : dt_add_property(cpu, &quot;ibm,ppc-interrupt-server#s&quot;, iserv, 4 * threads);</span></a>
-<a name="169"><span class="lineNum"> 169 </span> : : </a>
-<a name="170"><span class="lineNum"> 170 </span> : : /* Add the ICP node for this CPU for P8 */</a>
-<a name="171"><span class="lineNum"> 171 </span> :<span class="lineCov"> 26 : if (proc_gen == proc_gen_p8)</span></a>
-<a name="172"><span class="lineNum"> 172 </span> :<span class="lineCov"> 26 : add_xics_icp(pcia, threads, icp_compat);</span></a>
-<a name="173"><span class="lineNum"> 173 </span> : : </a>
-<a name="174"><span class="lineNum"> 174 </span> :<span class="lineCov"> 26 : return cpu;</span></a>
-<a name="175"><span class="lineNum"> 175 </span> : : }</a>
-<a name="176"><span class="lineNum"> 176 </span> : : </a>
-<a name="177"><span class="lineNum"> 177 </span> :<span class="lineCov"> 2 : bool pcia_parse(void)</span></a>
-<a name="178"><span class="lineNum"> 178 </span> : : {</a>
-<a name="179"><span class="lineNum"> 179 </span> : : const void *pcia;</a>
-<a name="180"><span class="lineNum"> 180 </span> : : struct dt_node *cpus;</a>
-<a name="181"><span class="lineNum"> 181 </span> : : </a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 2 : pcia = get_hdif(&amp;spira.ntuples.pcia, &quot;SPPCIA&quot;);</span></a>
-<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 2 : if (!pcia)</span></a>
-<a name="184"><span class="lineNum"> 184 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="185"><span class="lineNum"> 185 </span> : : </a>
-<a name="186"><span class="lineNum"> 186 </span> :<span class="lineCov"> 2 : prlog(PR_INFO, &quot;Got PCIA !\n&quot;);</span></a>
-<a name="187"><span class="lineNum"> 187 </span> : : </a>
-<a name="188"><span class="lineNum"> 188 </span> :<span class="lineCov"> 2 : cpus = dt_new(dt_root, &quot;cpus&quot;);</span></a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 2 : dt_add_property_cells(cpus, &quot;#address-cells&quot;, 1);</span></a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineCov"> 2 : dt_add_property_cells(cpus, &quot;#size-cells&quot;, 0);</span></a>
-<a name="191"><span class="lineNum"> 191 </span> : : </a>
-<a name="192"><span class="lineNum"> 192 </span> :<span class="lineCov"> 28 : for_each_pcia(pcia) {</span></a>
-<a name="193"><span class="lineNum"> 193 </span> : : const struct sppcia_core_unique *id;</a>
-<a name="194"><span class="lineNum"> 194 </span> : : u32 size, ve_flags;</a>
-<a name="195"><span class="lineNum"> 195 </span> : : bool okay;</a>
-<a name="196"><span class="lineNum"> 196 </span> : : </a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 26 : id = HDIF_get_idata(pcia, SPPCIA_IDATA_CORE_UNIQUE, &amp;size);</span></a>
-<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 26 : if (!id || size &lt; sizeof(*id)) {</span></a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CORE[%i]: bad id size %u @ %p\n&quot;,</span></a>
-<a name="200"><span class="lineNum"> 200 </span> : : pcia_index(pcia), size, id);</a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="202"><span class="lineNum"> 202 </span> : : }</a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 26 : ve_flags = be32_to_cpu(id-&gt;verif_exist_flags);</span></a>
-<a name="204"><span class="lineNum"> 204 </span> : : </a>
-<a name="205"><span class="lineNum"> 205 </span> :<span class="lineCov"> 26 : switch ((ve_flags &amp; CPU_ID_VERIFY_MASK)</span></a>
-<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 26 : &gt;&gt; CPU_ID_VERIFY_SHIFT) {</span></a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 26 : case CPU_ID_VERIFY_USABLE_NO_FAILURES:</span></a>
-<a name="208"><span class="lineNum"> 208 </span> : : case CPU_ID_VERIFY_USABLE_FAILURES:</a>
-<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 26 : okay = true;</span></a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 26 : break;</span></a>
-<a name="211"><span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : default:</span></a>
-<a name="212"><span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : okay = false;</span></a>
-<a name="213"><span class="lineNum"> 213 </span> : : }</a>
-<a name="214"><span class="lineNum"> 214 </span> : : </a>
-<a name="215"><span class="lineNum"> 215 </span> :<span class="lineCov"> 26 : prlog(okay ? PR_INFO : PR_WARNING,</span></a>
-<a name="216"><span class="lineNum"> 216 </span> : : &quot;CORE[%i]: HW_PROC_ID=%i PROC_CHIP_ID=%i EC=0x%x %s\n&quot;,</a>
-<a name="217"><span class="lineNum"> 217 </span> : : pcia_index(pcia), be32_to_cpu(id-&gt;hw_proc_id),</a>
-<a name="218"><span class="lineNum"> 218 </span> : : be32_to_cpu(id-&gt;proc_chip_id),</a>
-<a name="219"><span class="lineNum"> 219 </span> : : be32_to_cpu(id-&gt;chip_ec_level),</a>
-<a name="220"><span class="lineNum"> 220 </span> : : okay ? &quot;OK&quot; : &quot;UNAVAILABLE&quot;);</a>
-<a name="221"><span class="lineNum"> 221 </span> : : </a>
-<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 26 : if (!add_core_node(cpus, pcia, id, okay))</span></a>
-<a name="223"><span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="224"><span class="lineNum"> 224 </span> : : }</a>
-<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 2 : return true;</span></a>
-<a name="226"><span class="lineNum"> 226 </span> : : }</a>
+<a name="81"><span class="lineNum"> 81 </span> :<span class="lineCov"> 26 : dt_add_property_cells(icp, &quot;#interrupt-cells&quot;, 1);</span></a>
+<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 26 : dt_add_property(icp, &quot;reg&quot;, reg, rsize);</span></a>
+<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 26 : dt_add_property_cells(icp, &quot;#address-cells&quot;, 0);</span></a>
+<a name="84"><span class="lineNum"> 84 </span> :<span class="lineCov"> 26 : dt_add_property_string(icp, &quot;device_type&quot;,</span></a>
+<a name="85"><span class="lineNum"> 85 </span> : : &quot;PowerPC-External-Interrupt-Presentation&quot;);</a>
+<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 26 : free(reg);</span></a>
+<a name="87"><span class="lineNum"> 87 </span> : : }</a>
+<a name="88"><span class="lineNum"> 88 </span> : : </a>
+<a name="89"><span class="lineNum"> 89 </span> :<span class="lineCov"> 26 : static struct dt_node *add_core_node(struct dt_node *cpus,</span></a>
+<a name="90"><span class="lineNum"> 90 </span> : : const void *pcia,</a>
+<a name="91"><span class="lineNum"> 91 </span> : : const struct sppcia_core_unique *id,</a>
+<a name="92"><span class="lineNum"> 92 </span> : : bool okay)</a>
+<a name="93"><span class="lineNum"> 93 </span> : : {</a>
+<a name="94"><span class="lineNum"> 94 </span> : : const struct sppcia_cpu_thread *t;</a>
+<a name="95"><span class="lineNum"> 95 </span> : : const struct sppcia_cpu_timebase *timebase;</a>
+<a name="96"><span class="lineNum"> 96 </span> : : const struct sppcia_cpu_cache *cache;</a>
+<a name="97"><span class="lineNum"> 97 </span> : : const struct sppcia_cpu_attr *attr;</a>
+<a name="98"><span class="lineNum"> 98 </span> : : struct dt_node *cpu;</a>
+<a name="99"><span class="lineNum"> 99 </span> : : const char *icp_compat;</a>
+<a name="100"><span class="lineNum"> 100 </span> : : u32 i, size, threads, ve_flags, l2_phandle, chip_id;</a>
+<a name="101"><span class="lineNum"> 101 </span> : : __be32 iserv[PCIA_MAX_THREADS];</a>
+<a name="102"><span class="lineNum"> 102 </span> : : </a>
+<a name="103"><span class="lineNum"> 103 </span> : : /* Look for thread 0 */</a>
+<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 26 : t = find_tada(pcia, 0);</span></a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 26 : if (!t) {</span></a>
+<a name="106"><span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CORE[%i]: Failed to find thread 0 !\n&quot;,</span></a>
+<a name="107"><span class="lineNum"> 107 </span> : : pcia_index(pcia));</a>
+<a name="108"><span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="109"><span class="lineNum"> 109 </span> : : }</a>
+<a name="110"><span class="lineNum"> 110 </span> : : </a>
+<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 26 : ve_flags = be32_to_cpu(id-&gt;verif_exist_flags);</span></a>
+<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 26 : threads = ((ve_flags &amp; CPU_ID_NUM_SECONDARY_THREAD_MASK)</span></a>
+<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 26 : &gt;&gt; CPU_ID_NUM_SECONDARY_THREAD_SHIFT) + 1;</span></a>
+<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 26 : assert(threads &lt;= PCIA_MAX_THREADS);</span></a>
+<a name="115"><span class="lineNum"> 115 </span> : : </a>
+<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 26 : prlog(PR_INFO, &quot;CORE[%i]: PIR=%.8x %s %s(%u threads)\n&quot;,</span></a>
+<a name="117"><span class="lineNum"> 117 </span> : : pcia_index(pcia), be32_to_cpu(t-&gt;pir),</a>
+<a name="118"><span class="lineNum"> 118 </span> : : ve_flags &amp; CPU_ID_PCIA_RESERVED</a>
+<a name="119"><span class="lineNum"> 119 </span> : : ? &quot;**RESERVED**&quot; : cpu_state(ve_flags),</a>
+<a name="120"><span class="lineNum"> 120 </span> : : be32_to_cpu(t-&gt;pir) == boot_cpu-&gt;pir ? &quot;[boot] &quot; : &quot;&quot;, threads);</a>
+<a name="121"><span class="lineNum"> 121 </span> : : </a>
+<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 26 : timebase = HDIF_get_idata(pcia, SPPCIA_IDATA_TIMEBASE, &amp;size);</span></a>
+<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 26 : if (!timebase || size &lt; sizeof(*timebase)) {</span></a>
+<a name="124"><span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CORE[%i]: bad timebase size %u @ %p\n&quot;,</span></a>
+<a name="125"><span class="lineNum"> 125 </span> : : pcia_index(pcia), size, timebase);</a>
+<a name="126"><span class="lineNum"> 126 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="127"><span class="lineNum"> 127 </span> : : }</a>
+<a name="128"><span class="lineNum"> 128 </span> : : </a>
+<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 26 : cache = HDIF_get_idata(pcia, SPPCIA_IDATA_CPU_CACHE, &amp;size);</span></a>
+<a name="130"><span class="lineNum"> 130 </span> :<span class="lineCov"> 26 : if (!cache || size &lt; sizeof(*cache)) {</span></a>
+<a name="131"><span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CORE[%i]: bad cache size %u @ %p\n&quot;,</span></a>
+<a name="132"><span class="lineNum"> 132 </span> : : pcia_index(pcia), size, cache);</a>
+<a name="133"><span class="lineNum"> 133 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="134"><span class="lineNum"> 134 </span> : : }</a>
+<a name="135"><span class="lineNum"> 135 </span> : : </a>
+<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 26 : cpu = add_core_common(cpus, cache, timebase,</span></a>
+<a name="137"><span class="lineNum"> 137 </span> : : be32_to_cpu(t-&gt;pir), okay);</a>
+<a name="138"><span class="lineNum"> 138 </span> : : </a>
+<a name="139"><span class="lineNum"> 139 </span> : : /* Core attributes */</a>
+<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 26 : attr = HDIF_get_idata(pcia, SPPCIA_IDATA_CPU_ATTR, &amp;size);</span></a>
+<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 26 : if (attr)</span></a>
+<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 26 : add_core_attr(cpu, be32_to_cpu(attr-&gt;attr));</span></a>
+<a name="143"><span class="lineNum"> 143 </span> : : </a>
+<a name="144"><span class="lineNum"> 144 </span> : : /* Add cache info */</a>
+<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 26 : l2_phandle = add_core_cache_info(cpus, cache,</span></a>
+<a name="146"><span class="lineNum"> 146 </span> : : be32_to_cpu(t-&gt;pir), okay);</a>
+<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;l2-cache&quot;, l2_phandle);</span></a>
+<a name="148"><span class="lineNum"> 148 </span> : : </a>
+<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 26 : if (proc_gen == proc_gen_p8)</span></a>
+<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 26 : icp_compat = &quot;IBM,power8-icp&quot;;</span></a>
+<a name="151"><span class="lineNum"> 151 </span> : : </a>
+<a name="152"><span class="lineNum"> 152 </span> : : /* Get HW Chip ID */</a>
+<a name="153"><span class="lineNum"> 153 </span> :<span class="lineCov"> 26 : chip_id = pcid_to_chip_id(be32_to_cpu(id-&gt;proc_chip_id));</span></a>
+<a name="154"><span class="lineNum"> 154 </span> : : </a>
+<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,pir&quot;, be32_to_cpu(t-&gt;pir));</span></a>
+<a name="156"><span class="lineNum"> 156 </span> :<span class="lineCov"> 26 : dt_add_property_cells(cpu, &quot;ibm,chip-id&quot;, chip_id);</span></a>
+<a name="157"><span class="lineNum"> 157 </span> : : </a>
+<a name="158"><span class="lineNum"> 158 </span> : : /* Build ibm,ppc-interrupt-server#s with all threads */</a>
+<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 234 : for (i = 0; i &lt; threads; i++) {</span></a>
+<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 208 : t = find_tada(pcia, i);</span></a>
+<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 208 : if (!t) {</span></a>
+<a name="162"><span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : threads = i;</span></a>
+<a name="163"><span class="lineNum"> 163 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="164"><span class="lineNum"> 164 </span> : : }</a>
+<a name="165"><span class="lineNum"> 165 </span> : : </a>
+<a name="166"><span class="lineNum"> 166 </span> :<span class="lineCov"> 208 : iserv[i] = t-&gt;pir;</span></a>
+<a name="167"><span class="lineNum"> 167 </span> : : }</a>
+<a name="168"><span class="lineNum"> 168 </span> : : </a>
+<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 26 : dt_add_property(cpu, &quot;ibm,ppc-interrupt-server#s&quot;, iserv, 4 * threads);</span></a>
+<a name="170"><span class="lineNum"> 170 </span> : : </a>
+<a name="171"><span class="lineNum"> 171 </span> : : /* Add the ICP node for this CPU for P8 */</a>
+<a name="172"><span class="lineNum"> 172 </span> :<span class="lineCov"> 26 : if (proc_gen == proc_gen_p8)</span></a>
+<a name="173"><span class="lineNum"> 173 </span> :<span class="lineCov"> 26 : add_xics_icp(pcia, threads, icp_compat);</span></a>
+<a name="174"><span class="lineNum"> 174 </span> : : </a>
+<a name="175"><span class="lineNum"> 175 </span> :<span class="lineCov"> 26 : return cpu;</span></a>
+<a name="176"><span class="lineNum"> 176 </span> : : }</a>
+<a name="177"><span class="lineNum"> 177 </span> : : </a>
+<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 2 : bool pcia_parse(void)</span></a>
+<a name="179"><span class="lineNum"> 179 </span> : : {</a>
+<a name="180"><span class="lineNum"> 180 </span> : : const void *pcia;</a>
+<a name="181"><span class="lineNum"> 181 </span> : : struct dt_node *cpus;</a>
+<a name="182"><span class="lineNum"> 182 </span> : : </a>
+<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 2 : pcia = get_hdif(&amp;spira.ntuples.pcia, &quot;SPPCIA&quot;);</span></a>
+<a name="184"><span class="lineNum"> 184 </span> :<span class="lineCov"> 2 : if (!pcia)</span></a>
+<a name="185"><span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="186"><span class="lineNum"> 186 </span> : : </a>
+<a name="187"><span class="lineNum"> 187 </span> :<span class="lineCov"> 2 : prlog(PR_INFO, &quot;Got PCIA !\n&quot;);</span></a>
+<a name="188"><span class="lineNum"> 188 </span> : : </a>
+<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 2 : cpus = dt_new(dt_root, &quot;cpus&quot;);</span></a>
+<a name="190"><span class="lineNum"> 190 </span> :<span class="lineCov"> 2 : dt_add_property_cells(cpus, &quot;#address-cells&quot;, 1);</span></a>
+<a name="191"><span class="lineNum"> 191 </span> :<span class="lineCov"> 2 : dt_add_property_cells(cpus, &quot;#size-cells&quot;, 0);</span></a>
+<a name="192"><span class="lineNum"> 192 </span> : : </a>
+<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 28 : for_each_pcia(pcia) {</span></a>
+<a name="194"><span class="lineNum"> 194 </span> : : const struct sppcia_core_unique *id;</a>
+<a name="195"><span class="lineNum"> 195 </span> : : u32 size, ve_flags;</a>
+<a name="196"><span class="lineNum"> 196 </span> : : bool okay;</a>
+<a name="197"><span class="lineNum"> 197 </span> : : </a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 26 : id = HDIF_get_idata(pcia, SPPCIA_IDATA_CORE_UNIQUE, &amp;size);</span></a>
+<a name="199"><span class="lineNum"> 199 </span> :<span class="lineCov"> 26 : if (!id || size &lt; sizeof(*id)) {</span></a>
+<a name="200"><span class="lineNum"> 200 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CORE[%i]: bad id size %u @ %p\n&quot;,</span></a>
+<a name="201"><span class="lineNum"> 201 </span> : : pcia_index(pcia), size, id);</a>
+<a name="202"><span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="203"><span class="lineNum"> 203 </span> : : }</a>
+<a name="204"><span class="lineNum"> 204 </span> :<span class="lineCov"> 26 : ve_flags = be32_to_cpu(id-&gt;verif_exist_flags);</span></a>
+<a name="205"><span class="lineNum"> 205 </span> : : </a>
+<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 26 : switch ((ve_flags &amp; CPU_ID_VERIFY_MASK)</span></a>
+<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 26 : &gt;&gt; CPU_ID_VERIFY_SHIFT) {</span></a>
+<a name="208"><span class="lineNum"> 208 </span> :<span class="lineCov"> 26 : case CPU_ID_VERIFY_USABLE_NO_FAILURES:</span></a>
+<a name="209"><span class="lineNum"> 209 </span> : : case CPU_ID_VERIFY_USABLE_FAILURES:</a>
+<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 26 : okay = true;</span></a>
+<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 26 : break;</span></a>
+<a name="212"><span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="213"><span class="lineNum"> 213 </span> :<span class="lineNoCov"> 0 : okay = false;</span></a>
+<a name="214"><span class="lineNum"> 214 </span> : : }</a>
+<a name="215"><span class="lineNum"> 215 </span> : : </a>
+<a name="216"><span class="lineNum"> 216 </span> :<span class="lineCov"> 26 : prlog(okay ? PR_INFO : PR_WARNING,</span></a>
+<a name="217"><span class="lineNum"> 217 </span> : : &quot;CORE[%i]: HW_PROC_ID=%i PROC_CHIP_ID=%i EC=0x%x %s\n&quot;,</a>
+<a name="218"><span class="lineNum"> 218 </span> : : pcia_index(pcia), be32_to_cpu(id-&gt;hw_proc_id),</a>
+<a name="219"><span class="lineNum"> 219 </span> : : be32_to_cpu(id-&gt;proc_chip_id),</a>
+<a name="220"><span class="lineNum"> 220 </span> : : be32_to_cpu(id-&gt;chip_ec_level),</a>
+<a name="221"><span class="lineNum"> 221 </span> : : okay ? &quot;OK&quot; : &quot;UNAVAILABLE&quot;);</a>
+<a name="222"><span class="lineNum"> 222 </span> : : </a>
+<a name="223"><span class="lineNum"> 223 </span> :<span class="lineCov"> 26 : if (!add_core_node(cpus, pcia, id, okay))</span></a>
+<a name="224"><span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="225"><span class="lineNum"> 225 </span> : : }</a>
+<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 2 : return true;</span></a>
+<a name="227"><span class="lineNum"> 227 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/hdata/slca.c.func-sort-c.html b/coverage-report/hdata/slca.c.func-sort-c.html
index 184d0fb..6d12075 100644
--- a/coverage-report/hdata/slca.c.func-sort-c.html
+++ b/coverage-report/hdata/slca.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
diff --git a/coverage-report/hdata/slca.c.func.html b/coverage-report/hdata/slca.c.func.html
index a77ae90..8f9135f 100644
--- a/coverage-report/hdata/slca.c.func.html
+++ b/coverage-report/hdata/slca.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
diff --git a/coverage-report/hdata/slca.c.gcov.html b/coverage-report/hdata/slca.c.gcov.html
index f7ee502..0b2ea77 100644
--- a/coverage-report/hdata/slca.c.gcov.html
+++ b/coverage-report/hdata/slca.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
diff --git a/coverage-report/hdata/spira.c.func-sort-c.html b/coverage-report/hdata/spira.c.func-sort-c.html
index 796ee7f..d755b09 100644
--- a/coverage-report/hdata/spira.c.func-sort-c.html
+++ b/coverage-report/hdata/spira.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">379</td>
- <td class="headerCovTableEntry">728</td>
- <td class="headerCovTableEntryLo">52.1 %</td>
+ <td class="headerCovTableEntry">385</td>
+ <td class="headerCovTableEntry">793</td>
+ <td class="headerCovTableEntryLo">48.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">28</td>
- <td class="headerCovTableEntry">35</td>
- <td class="headerCovTableEntryMed">80.0 %</td>
+ <td class="headerCovTableEntry">29</td>
+ <td class="headerCovTableEntry">37</td>
+ <td class="headerCovTableEntryMed">78.4 %</td>
</tr>
<tr>
<td></td>
@@ -69,143 +69,151 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#462">add_ecid_data</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#511">add_ecid_data</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1462">add_npu</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1576">add_npu</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1004">add_opal_dump_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1090">add_opal_dump_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#453">add_vas_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#491">add_vas_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#437">add_xive_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#462">add_xive_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#916">dt_init_secureboot_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1002">dt_init_secureboot_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#355">xscom_to_pcrd</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1436">pcid_to_topology_idx</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#776">add_chiptod_new</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#375">xscom_to_pcrd</a></td>
+ <td class="coverFnLo">0</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="spira.c.gcov.html#838">add_chiptod_new</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#748">add_chiptod_old</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#810">add_chiptod_old</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1296">add_iplparams</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1382">add_iplparams</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1244">add_iplparams_features</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1330">add_iplparams_features</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1127">add_iplparams_ipl_params</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1213">add_iplparams_ipl_params</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1221">add_iplparams_platform_dump</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1307">add_iplparams_platform_dump</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1180">add_iplparams_serials</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1266">add_iplparams_serials</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1021">add_iplparams_sys_params</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1107">add_iplparams_sys_params</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#901">add_nmmu</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#964">add_nmmu</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1630">add_npus</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1744">add_npus</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#874">add_nx</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#937">add_nx</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1400">add_stop_levels</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1514">add_stop_levels</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#666">add_xscom</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#725">add_xscom</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#550">add_xscom_sppcrd</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#599">add_xscom_sppcrd</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1351">dt_init_led_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1465">dt_init_led_node</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1668">fixup_spira</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1782">fixup_spira</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1366">hostservices_parse</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1480">hostservices_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#964">opal_dump_add_mpipl_boot</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1050">opal_dump_add_mpipl_boot</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1724">parse_hdat</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1838">parse_hdat</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1711">update_spirah_addr</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1825">update_spirah_addr</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#700">add_chiptod_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#759">add_chiptod_node</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#832">add_nx_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#894">add_nx_node</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#399">add_psihb_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#419">add_psihb_node</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#507">add_xscom_add_pcia_assoc</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#556">add_xscom_add_pcia_assoc</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#289">add_xscom_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#299">add_xscom_node</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#385">find_xscom_for_chip</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#405">find_xscom_for_chip</a></td>
<td class="coverFnHi">18</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1324">pcid_to_chip_id</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1410">pcid_to_chip_id</a></td>
<td class="coverFnHi">79</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#253">__get_hdif</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#290">get_xscom_id</a></td>
+ <td class="coverFnHi">103</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="spira.c.gcov.html#254">__get_hdif</a></td>
<td class="coverFnHi">545</td>
</tr>
</table>
diff --git a/coverage-report/hdata/spira.c.func.html b/coverage-report/hdata/spira.c.func.html
index e74437e..9119311 100644
--- a/coverage-report/hdata/spira.c.func.html
+++ b/coverage-report/hdata/spira.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">379</td>
- <td class="headerCovTableEntry">728</td>
- <td class="headerCovTableEntryLo">52.1 %</td>
+ <td class="headerCovTableEntry">385</td>
+ <td class="headerCovTableEntry">793</td>
+ <td class="headerCovTableEntryLo">48.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">28</td>
- <td class="headerCovTableEntry">35</td>
- <td class="headerCovTableEntryMed">80.0 %</td>
+ <td class="headerCovTableEntry">29</td>
+ <td class="headerCovTableEntry">37</td>
+ <td class="headerCovTableEntryMed">78.4 %</td>
</tr>
<tr>
<td></td>
@@ -69,143 +69,151 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="spira.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#253">__get_hdif</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#254">__get_hdif</a></td>
<td class="coverFnHi">545</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#776">add_chiptod_new</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#838">add_chiptod_new</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#700">add_chiptod_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#759">add_chiptod_node</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#748">add_chiptod_old</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#810">add_chiptod_old</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#462">add_ecid_data</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#511">add_ecid_data</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1296">add_iplparams</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1382">add_iplparams</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1244">add_iplparams_features</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1330">add_iplparams_features</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1127">add_iplparams_ipl_params</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1213">add_iplparams_ipl_params</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1221">add_iplparams_platform_dump</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1307">add_iplparams_platform_dump</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1180">add_iplparams_serials</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1266">add_iplparams_serials</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1021">add_iplparams_sys_params</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1107">add_iplparams_sys_params</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#901">add_nmmu</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#964">add_nmmu</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1462">add_npu</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1576">add_npu</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1630">add_npus</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1744">add_npus</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#874">add_nx</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#937">add_nx</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#832">add_nx_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#894">add_nx_node</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1004">add_opal_dump_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1090">add_opal_dump_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#399">add_psihb_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#419">add_psihb_node</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1400">add_stop_levels</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1514">add_stop_levels</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#453">add_vas_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#491">add_vas_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#437">add_xive_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#462">add_xive_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#666">add_xscom</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#725">add_xscom</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#507">add_xscom_add_pcia_assoc</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#556">add_xscom_add_pcia_assoc</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#289">add_xscom_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#299">add_xscom_node</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#550">add_xscom_sppcrd</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#599">add_xscom_sppcrd</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1351">dt_init_led_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1465">dt_init_led_node</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#916">dt_init_secureboot_node</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1002">dt_init_secureboot_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#385">find_xscom_for_chip</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#405">find_xscom_for_chip</a></td>
<td class="coverFnHi">18</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1668">fixup_spira</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1782">fixup_spira</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1366">hostservices_parse</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#290">get_xscom_id</a></td>
+ <td class="coverFnHi">103</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="spira.c.gcov.html#1480">hostservices_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#964">opal_dump_add_mpipl_boot</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1050">opal_dump_add_mpipl_boot</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1724">parse_hdat</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1838">parse_hdat</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1324">pcid_to_chip_id</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1410">pcid_to_chip_id</a></td>
<td class="coverFnHi">79</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#1711">update_spirah_addr</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#1436">pcid_to_topology_idx</a></td>
+ <td class="coverFnLo">0</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="spira.c.gcov.html#1825">update_spirah_addr</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.c.gcov.html#355">xscom_to_pcrd</a></td>
+ <td class="coverFn"><a href="spira.c.gcov.html#375">xscom_to_pcrd</a></td>
<td class="coverFnLo">0</td>
</tr>
</table>
diff --git a/coverage-report/hdata/spira.c.gcov.html b/coverage-report/hdata/spira.c.gcov.html
index acbf05a..06a2c1c 100644
--- a/coverage-report/hdata/spira.c.gcov.html
+++ b/coverage-report/hdata/spira.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">379</td>
- <td class="headerCovTableEntry">728</td>
- <td class="headerCovTableEntryLo">52.1 %</td>
+ <td class="headerCovTableEntry">385</td>
+ <td class="headerCovTableEntry">793</td>
+ <td class="headerCovTableEntryLo">48.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">28</td>
- <td class="headerCovTableEntry">35</td>
- <td class="headerCovTableEntryMed">80.0 %</td>
+ <td class="headerCovTableEntry">29</td>
+ <td class="headerCovTableEntry">37</td>
+ <td class="headerCovTableEntryMed">78.4 %</td>
</tr>
<tr>
<td></td>
@@ -83,1796 +83,1910 @@
<a name="12"><span class="lineNum"> 12 </span> : : #include &lt;fsp-attn.h&gt;</a>
<a name="13"><span class="lineNum"> 13 </span> : : #include &lt;fsp-leds.h&gt;</a>
<a name="14"><span class="lineNum"> 14 </span> : : #include &lt;skiboot.h&gt;</a>
-<a name="15"><span class="lineNum"> 15 </span> : : </a>
-<a name="16"><span class="lineNum"> 16 </span> : : #include &quot;hdata.h&quot;</a>
-<a name="17"><span class="lineNum"> 17 </span> : : #include &quot;hostservices.h&quot;</a>
-<a name="18"><span class="lineNum"> 18 </span> : : #include &quot;naca.h&quot;</a>
-<a name="19"><span class="lineNum"> 19 </span> : : #include &quot;spira.h&quot;</a>
-<a name="20"><span class="lineNum"> 20 </span> : : </a>
-<a name="21"><span class="lineNum"> 21 </span> : : /* Processor Initialization structure, contains</a>
-<a name="22"><span class="lineNum"> 22 </span> : : * the initial NIA and MSR values for the entry</a>
-<a name="23"><span class="lineNum"> 23 </span> : : * point</a>
-<a name="24"><span class="lineNum"> 24 </span> : : *</a>
-<a name="25"><span class="lineNum"> 25 </span> : : * Note: It appears to be ignoring the entry point</a>
-<a name="26"><span class="lineNum"> 26 </span> : : * and always going to 0x180</a>
-<a name="27"><span class="lineNum"> 27 </span> : : */</a>
-<a name="28"><span class="lineNum"> 28 </span> : : </a>
-<a name="29"><span class="lineNum"> 29 </span> : : static int cpu_type;</a>
-<a name="30"><span class="lineNum"> 30 </span> : : </a>
-<a name="31"><span class="lineNum"> 31 </span> : : extern struct proc_init_data proc_init_data;</a>
-<a name="32"><span class="lineNum"> 32 </span> : : </a>
-<a name="33"><span class="lineNum"> 33 </span> : : __section(&quot;.procin.data&quot;) struct proc_init_data proc_init_data = {</a>
-<a name="34"><span class="lineNum"> 34 </span> : : .hdr = HDIF_SIMPLE_HDR(&quot;PROCIN&quot;, 1, struct proc_init_data),</a>
-<a name="35"><span class="lineNum"> 35 </span> : : .regs_ptr = HDIF_IDATA_PTR(offsetof(struct proc_init_data, regs), 0x10),</a>
-<a name="36"><span class="lineNum"> 36 </span> : : .regs = {</a>
-<a name="37"><span class="lineNum"> 37 </span> : : .nia = CPU_TO_BE64(0x180),</a>
-<a name="38"><span class="lineNum"> 38 </span> : : .msr = CPU_TO_BE64(MSR_SF | MSR_HV),</a>
-<a name="39"><span class="lineNum"> 39 </span> : : },</a>
-<a name="40"><span class="lineNum"> 40 </span> : : };</a>
-<a name="41"><span class="lineNum"> 41 </span> : : </a>
-<a name="42"><span class="lineNum"> 42 </span> : : extern struct cpu_ctl_init_data cpu_ctl_init_data;</a>
-<a name="43"><span class="lineNum"> 43 </span> : : extern struct sp_addr_table cpu_ctl_spat_area;</a>
-<a name="44"><span class="lineNum"> 44 </span> : : extern struct sp_attn_area cpu_ctl_sp_attn_area1;</a>
-<a name="45"><span class="lineNum"> 45 </span> : : extern struct sp_attn_area cpu_ctl_sp_attn_area2;</a>
-<a name="46"><span class="lineNum"> 46 </span> : : extern struct hsr_data_area cpu_ctl_hsr_area;</a>
-<a name="47"><span class="lineNum"> 47 </span> : : </a>
-<a name="48"><span class="lineNum"> 48 </span> : : /*</a>
-<a name="49"><span class="lineNum"> 49 </span> : : * cpuctrl.data begins at CPU_CTL_OFF - cpu_ctl_init_data is located there.</a>
-<a name="50"><span class="lineNum"> 50 </span> : : * + sizeof(struct cpu_ctl_init_data) - cpu_ctl_spat_area</a>
-<a name="51"><span class="lineNum"> 51 </span> : : * + sizeof(struct sp_addr_table) - cpu_ctl_sp_attn_area1</a>
-<a name="52"><span class="lineNum"> 52 </span> : : * + sizeof(struct sp_attn_area) - cpu_ctl_sp_attn_area2</a>
-<a name="53"><span class="lineNum"> 53 </span> : : * + sizeof(struct sp_attn_area) - cpu_ctl_hsr_area</a>
-<a name="54"><span class="lineNum"> 54 </span> : : *</a>
-<a name="55"><span class="lineNum"> 55 </span> : : * Can't use CPU_TO_BE64 directly on the labels as a constant initialiser.</a>
-<a name="56"><span class="lineNum"> 56 </span> : : *</a>
-<a name="57"><span class="lineNum"> 57 </span> : : * CPU_CTL_INIT_DATA_OFF is offset from 0, the others are addressed from the</a>
-<a name="58"><span class="lineNum"> 58 </span> : : * relocated address (+SKIBOOT_BASE)</a>
-<a name="59"><span class="lineNum"> 59 </span> : : */</a>
-<a name="60"><span class="lineNum"> 60 </span> : : #define CPU_CTL_INIT_DATA_OFF (CPU_CTL_OFF)</a>
-<a name="61"><span class="lineNum"> 61 </span> : : #define CPU_CTL_SPAT_AREA_OFF (CPU_CTL_INIT_DATA_OFF + sizeof(struct cpu_ctl_init_data) + SKIBOOT_BASE)</a>
-<a name="62"><span class="lineNum"> 62 </span> : : #define CPU_CTL_SP_ATTN_AREA1_OFF (ALIGN_UP((CPU_CTL_SPAT_AREA_OFF + sizeof(struct sp_addr_table)), ATTN_AREA_SZ))</a>
-<a name="63"><span class="lineNum"> 63 </span> : : #define CPU_CTL_SP_ATTN_AREA2_OFF (CPU_CTL_SP_ATTN_AREA1_OFF + sizeof(struct sp_attn_area))</a>
-<a name="64"><span class="lineNum"> 64 </span> : : #define CPU_CTL_HSR_AREA_OFF (CPU_CTL_SP_ATTN_AREA2_OFF + sizeof(struct sp_attn_area))</a>
-<a name="65"><span class="lineNum"> 65 </span> : : </a>
-<a name="66"><span class="lineNum"> 66 </span> : : __section(&quot;.cpuctrl.data&quot;) struct hsr_data_area cpu_ctl_hsr_area;</a>
-<a name="67"><span class="lineNum"> 67 </span> : : __section(&quot;.cpuctrl.data&quot;) struct sp_attn_area cpu_ctl_sp_attn_area2;</a>
-<a name="68"><span class="lineNum"> 68 </span> : : __section(&quot;.cpuctrl.data&quot;) struct sp_attn_area cpu_ctl_sp_attn_area1;</a>
-<a name="69"><span class="lineNum"> 69 </span> : : __section(&quot;.cpuctrl.data&quot;) struct sp_addr_table cpu_ctl_spat_area;</a>
-<a name="70"><span class="lineNum"> 70 </span> : : </a>
-<a name="71"><span class="lineNum"> 71 </span> : : __section(&quot;.cpuctrl.data&quot;) struct cpu_ctl_init_data cpu_ctl_init_data = {</a>
-<a name="72"><span class="lineNum"> 72 </span> : : .hdr = HDIF_SIMPLE_HDR(CPU_CTL_HDIF_SIG, 2, struct cpu_ctl_init_data),</a>
-<a name="73"><span class="lineNum"> 73 </span> : : .cpu_ctl = HDIF_IDATA_PTR(offsetof(struct cpu_ctl_init_data, cpu_ctl_lt),</a>
-<a name="74"><span class="lineNum"> 74 </span> : : sizeof(struct cpu_ctl_legacy_table)),</a>
-<a name="75"><span class="lineNum"> 75 </span> : : .cpu_ctl_lt = {</a>
-<a name="76"><span class="lineNum"> 76 </span> : : .spat = {</a>
-<a name="77"><span class="lineNum"> 77 </span> : : .addr = CPU_TO_BE64(CPU_CTL_SPAT_AREA_OFF),</a>
-<a name="78"><span class="lineNum"> 78 </span> : : .size = CPU_TO_BE64(sizeof(struct sp_addr_table)),</a>
-<a name="79"><span class="lineNum"> 79 </span> : : },</a>
-<a name="80"><span class="lineNum"> 80 </span> : : .sp_attn_area1 = {</a>
-<a name="81"><span class="lineNum"> 81 </span> : : .addr = CPU_TO_BE64(CPU_CTL_SP_ATTN_AREA1_OFF),</a>
-<a name="82"><span class="lineNum"> 82 </span> : : .size = CPU_TO_BE64(sizeof(struct sp_attn_area)),</a>
-<a name="83"><span class="lineNum"> 83 </span> : : },</a>
-<a name="84"><span class="lineNum"> 84 </span> : : .sp_attn_area2 = {</a>
-<a name="85"><span class="lineNum"> 85 </span> : : .addr = CPU_TO_BE64(CPU_CTL_SP_ATTN_AREA2_OFF),</a>
-<a name="86"><span class="lineNum"> 86 </span> : : .size = CPU_TO_BE64(sizeof(struct sp_attn_area)),</a>
-<a name="87"><span class="lineNum"> 87 </span> : : },</a>
-<a name="88"><span class="lineNum"> 88 </span> : : .hsr_area = {</a>
-<a name="89"><span class="lineNum"> 89 </span> : : .addr = CPU_TO_BE64(CPU_CTL_HSR_AREA_OFF),</a>
-<a name="90"><span class="lineNum"> 90 </span> : : .size = CPU_TO_BE64(sizeof(struct hsr_data_area)),</a>
-<a name="91"><span class="lineNum"> 91 </span> : : },</a>
-<a name="92"><span class="lineNum"> 92 </span> : : },</a>
-<a name="93"><span class="lineNum"> 93 </span> : : };</a>
-<a name="94"><span class="lineNum"> 94 </span> : : </a>
-<a name="95"><span class="lineNum"> 95 </span> : : /* Populate MDST table</a>
-<a name="96"><span class="lineNum"> 96 </span> : : *</a>
-<a name="97"><span class="lineNum"> 97 </span> : : * Note that we only pass sapphire console buffer here so that we can</a>
-<a name="98"><span class="lineNum"> 98 </span> : : * capture early failure logs. Later dump component (fsp_dump_mdst_init)</a>
-<a name="99"><span class="lineNum"> 99 </span> : : * creates new table with all the memory sections we are interested and</a>
-<a name="100"><span class="lineNum"> 100 </span> : : * sends updated table to FSP via MBOX.</a>
-<a name="101"><span class="lineNum"> 101 </span> : : *</a>
-<a name="102"><span class="lineNum"> 102 </span> : : * To help the FSP distinguishing between TCE tokens and actual physical</a>
-<a name="103"><span class="lineNum"> 103 </span> : : * addresses, we set the top bit to 1 on physical addresses</a>
-<a name="104"><span class="lineNum"> 104 </span> : : */</a>
-<a name="105"><span class="lineNum"> 105 </span> : : </a>
-<a name="106"><span class="lineNum"> 106 </span> : : extern struct mdst_table init_mdst_table[];</a>
-<a name="107"><span class="lineNum"> 107 </span> : : </a>
-<a name="108"><span class="lineNum"> 108 </span> : : __section(&quot;.mdst.data&quot;) struct mdst_table init_mdst_table[2] = {</a>
-<a name="109"><span class="lineNum"> 109 </span> : : {</a>
-<a name="110"><span class="lineNum"> 110 </span> : : .addr = CPU_TO_BE64(INMEM_CON_START | HRMOR_BIT),</a>
-<a name="111"><span class="lineNum"> 111 </span> : : .data_region = DUMP_REGION_CONSOLE,</a>
-<a name="112"><span class="lineNum"> 112 </span> : : .dump_type = DUMP_TYPE_SYSDUMP,</a>
-<a name="113"><span class="lineNum"> 113 </span> : : .size = CPU_TO_BE32(INMEM_CON_LEN),</a>
-<a name="114"><span class="lineNum"> 114 </span> : : },</a>
-<a name="115"><span class="lineNum"> 115 </span> : : {</a>
-<a name="116"><span class="lineNum"> 116 </span> : : .addr = CPU_TO_BE64(HBRT_CON_START | HRMOR_BIT),</a>
-<a name="117"><span class="lineNum"> 117 </span> : : .data_region = DUMP_REGION_HBRT_LOG,</a>
-<a name="118"><span class="lineNum"> 118 </span> : : .dump_type = DUMP_TYPE_SYSDUMP,</a>
-<a name="119"><span class="lineNum"> 119 </span> : : .size = CPU_TO_BE32(HBRT_CON_LEN),</a>
-<a name="120"><span class="lineNum"> 120 </span> : : },</a>
-<a name="121"><span class="lineNum"> 121 </span> : : };</a>
-<a name="122"><span class="lineNum"> 122 </span> : : </a>
-<a name="123"><span class="lineNum"> 123 </span> : : /* SP Interface Root Array, aka SPIRA */</a>
-<a name="124"><span class="lineNum"> 124 </span> : : __section(&quot;.spira.data&quot;) struct spira spira = {</a>
-<a name="125"><span class="lineNum"> 125 </span> : : .hdr = HDIF_SIMPLE_HDR(&quot;SPIRA &quot;, SPIRA_VERSION, struct spira),</a>
-<a name="126"><span class="lineNum"> 126 </span> : : .ntuples_ptr = HDIF_IDATA_PTR(offsetof(struct spira, ntuples),</a>
-<a name="127"><span class="lineNum"> 127 </span> : : sizeof(struct spira_ntuples)),</a>
-<a name="128"><span class="lineNum"> 128 </span> : : .ntuples = {</a>
-<a name="129"><span class="lineNum"> 129 </span> : : .array_hdr = {</a>
-<a name="130"><span class="lineNum"> 130 </span> : : .offset = CPU_TO_BE32(HDIF_ARRAY_OFFSET),</a>
-<a name="131"><span class="lineNum"> 131 </span> : : .ecnt = CPU_TO_BE32(SPIRA_NTUPLES_COUNT),</a>
-<a name="132"><span class="lineNum"> 132 </span> : : .esize</a>
-<a name="133"><span class="lineNum"> 133 </span> : : = CPU_TO_BE32(sizeof(struct spira_ntuple)),</a>
-<a name="134"><span class="lineNum"> 134 </span> : : .eactsz = CPU_TO_BE32(0x18),</a>
-<a name="135"><span class="lineNum"> 135 </span> : : },</a>
-<a name="136"><span class="lineNum"> 136 </span> : : /* We only populate some n-tuples */</a>
-<a name="137"><span class="lineNum"> 137 </span> : : .proc_init = {</a>
-<a name="138"><span class="lineNum"> 138 </span> : : .addr = CPU_TO_BE64(PROCIN_OFF),</a>
-<a name="139"><span class="lineNum"> 139 </span> : : .alloc_cnt = CPU_TO_BE16(1),</a>
-<a name="140"><span class="lineNum"> 140 </span> : : .act_cnt = CPU_TO_BE16(1),</a>
-<a name="141"><span class="lineNum"> 141 </span> : : .alloc_len</a>
-<a name="142"><span class="lineNum"> 142 </span> : : = CPU_TO_BE32(sizeof(struct proc_init_data)),</a>
-<a name="143"><span class="lineNum"> 143 </span> : : },</a>
-<a name="144"><span class="lineNum"> 144 </span> : : .heap = {</a>
-<a name="145"><span class="lineNum"> 145 </span> : : .addr = CPU_TO_BE64(SPIRA_HEAP_BASE),</a>
-<a name="146"><span class="lineNum"> 146 </span> : : .alloc_cnt = CPU_TO_BE16(1),</a>
-<a name="147"><span class="lineNum"> 147 </span> : : .alloc_len = CPU_TO_BE32(SPIRA_HEAP_SIZE),</a>
-<a name="148"><span class="lineNum"> 148 </span> : : },</a>
-<a name="149"><span class="lineNum"> 149 </span> : : .mdump_src = {</a>
-<a name="150"><span class="lineNum"> 150 </span> : : .addr = CPU_TO_BE64(MDST_TABLE_OFF),</a>
-<a name="151"><span class="lineNum"> 151 </span> : : .alloc_cnt = CPU_TO_BE16(ARRAY_SIZE(init_mdst_table)),</a>
-<a name="152"><span class="lineNum"> 152 </span> : : .act_cnt = CPU_TO_BE16(ARRAY_SIZE(init_mdst_table)),</a>
-<a name="153"><span class="lineNum"> 153 </span> : : .alloc_len =</a>
-<a name="154"><span class="lineNum"> 154 </span> : : CPU_TO_BE32(sizeof(init_mdst_table)),</a>
-<a name="155"><span class="lineNum"> 155 </span> : : },</a>
-<a name="156"><span class="lineNum"> 156 </span> : : .cpu_ctrl = {</a>
-<a name="157"><span class="lineNum"> 157 </span> : : .addr = CPU_TO_BE64(CPU_CTL_INIT_DATA_OFF),</a>
-<a name="158"><span class="lineNum"> 158 </span> : : .alloc_cnt = CPU_TO_BE16(1),</a>
-<a name="159"><span class="lineNum"> 159 </span> : : .act_cnt = CPU_TO_BE16(1),</a>
-<a name="160"><span class="lineNum"> 160 </span> : : .alloc_len = CPU_TO_BE32(sizeof(cpu_ctl_init_data)),</a>
-<a name="161"><span class="lineNum"> 161 </span> : : },</a>
-<a name="162"><span class="lineNum"> 162 </span> : : },</a>
-<a name="163"><span class="lineNum"> 163 </span> : : };</a>
-<a name="164"><span class="lineNum"> 164 </span> : : </a>
-<a name="165"><span class="lineNum"> 165 </span> : : /* The Hypervisor SPIRA-H Structure */</a>
-<a name="166"><span class="lineNum"> 166 </span> : : __section(&quot;.spirah.data&quot;) struct spirah spirah = {</a>
-<a name="167"><span class="lineNum"> 167 </span> : : .hdr = HDIF_SIMPLE_HDR(SPIRAH_HDIF_SIG, SPIRAH_VERSION, struct spirah),</a>
-<a name="168"><span class="lineNum"> 168 </span> : : .ntuples_ptr = HDIF_IDATA_PTR(offsetof(struct spirah, ntuples),</a>
-<a name="169"><span class="lineNum"> 169 </span> : : sizeof(struct spirah_ntuples)),</a>
-<a name="170"><span class="lineNum"> 170 </span> : : .ntuples = {</a>
-<a name="171"><span class="lineNum"> 171 </span> : : .array_hdr = {</a>
-<a name="172"><span class="lineNum"> 172 </span> : : .offset = CPU_TO_BE32(HDIF_ARRAY_OFFSET),</a>
-<a name="173"><span class="lineNum"> 173 </span> : : .ecnt = CPU_TO_BE32(SPIRAH_NTUPLES_COUNT),</a>
-<a name="174"><span class="lineNum"> 174 </span> : : .esize</a>
-<a name="175"><span class="lineNum"> 175 </span> : : = CPU_TO_BE32(sizeof(struct spira_ntuple)),</a>
-<a name="176"><span class="lineNum"> 176 </span> : : .eactsz = CPU_TO_BE32(0x18),</a>
-<a name="177"><span class="lineNum"> 177 </span> : : },</a>
-<a name="178"><span class="lineNum"> 178 </span> : : /* Host Data Areas */</a>
-<a name="179"><span class="lineNum"> 179 </span> : : .hs_data_area = {</a>
-<a name="180"><span class="lineNum"> 180 </span> : : .addr = CPU_TO_BE64(SPIRA_HEAP_BASE),</a>
-<a name="181"><span class="lineNum"> 181 </span> : : .alloc_cnt = CPU_TO_BE16(1),</a>
-<a name="182"><span class="lineNum"> 182 </span> : : .alloc_len = CPU_TO_BE32(SPIRA_HEAP_SIZE),</a>
-<a name="183"><span class="lineNum"> 183 </span> : : },</a>
-<a name="184"><span class="lineNum"> 184 </span> : : /* We only populate some n-tuples */</a>
-<a name="185"><span class="lineNum"> 185 </span> : : .proc_init = {</a>
-<a name="186"><span class="lineNum"> 186 </span> : : .addr = CPU_TO_BE64(PROCIN_OFF),</a>
-<a name="187"><span class="lineNum"> 187 </span> : : .alloc_cnt = CPU_TO_BE16(1),</a>
-<a name="188"><span class="lineNum"> 188 </span> : : .act_cnt = CPU_TO_BE16(1),</a>
-<a name="189"><span class="lineNum"> 189 </span> : : .alloc_len</a>
-<a name="190"><span class="lineNum"> 190 </span> : : = CPU_TO_BE32(sizeof(struct proc_init_data)),</a>
-<a name="191"><span class="lineNum"> 191 </span> : : },</a>
-<a name="192"><span class="lineNum"> 192 </span> : : .cpu_ctrl = {</a>
-<a name="193"><span class="lineNum"> 193 </span> : : .addr = CPU_TO_BE64(CPU_CTL_INIT_DATA_OFF),</a>
-<a name="194"><span class="lineNum"> 194 </span> : : .alloc_cnt = CPU_TO_BE16(1),</a>
-<a name="195"><span class="lineNum"> 195 </span> : : .act_cnt = CPU_TO_BE16(1),</a>
-<a name="196"><span class="lineNum"> 196 </span> : : .alloc_len =</a>
-<a name="197"><span class="lineNum"> 197 </span> : : CPU_TO_BE32(sizeof(cpu_ctl_init_data)),</a>
-<a name="198"><span class="lineNum"> 198 </span> : : },</a>
-<a name="199"><span class="lineNum"> 199 </span> : : .mdump_src = {</a>
-<a name="200"><span class="lineNum"> 200 </span> : : .addr = CPU_TO_BE64(MDST_TABLE_OFF),</a>
-<a name="201"><span class="lineNum"> 201 </span> : : .alloc_cnt = CPU_TO_BE16(MDST_TABLE_SIZE / sizeof(struct mdst_table)),</a>
-<a name="202"><span class="lineNum"> 202 </span> : : .act_cnt = CPU_TO_BE16(ARRAY_SIZE(init_mdst_table)),</a>
-<a name="203"><span class="lineNum"> 203 </span> : : .alloc_len = CPU_TO_BE32(sizeof(struct mdst_table)),</a>
-<a name="204"><span class="lineNum"> 204 </span> : : .act_len = CPU_TO_BE32(sizeof(struct mdst_table)),</a>
-<a name="205"><span class="lineNum"> 205 </span> : : },</a>
-<a name="206"><span class="lineNum"> 206 </span> : : .mdump_dst = {</a>
-<a name="207"><span class="lineNum"> 207 </span> : : .addr = CPU_TO_BE64(MDDT_TABLE_OFF),</a>
-<a name="208"><span class="lineNum"> 208 </span> : : .alloc_cnt = CPU_TO_BE16(MDDT_TABLE_SIZE / sizeof(struct mddt_table)),</a>
-<a name="209"><span class="lineNum"> 209 </span> : : .act_cnt = CPU_TO_BE16(0),</a>
-<a name="210"><span class="lineNum"> 210 </span> : : .alloc_len = CPU_TO_BE32(sizeof(struct mddt_table)),</a>
-<a name="211"><span class="lineNum"> 211 </span> : : .act_len = CPU_TO_BE32(sizeof(struct mddt_table)),</a>
-<a name="212"><span class="lineNum"> 212 </span> : : },</a>
-<a name="213"><span class="lineNum"> 213 </span> : : .mdump_res = {</a>
-<a name="214"><span class="lineNum"> 214 </span> : : .addr = CPU_TO_BE64(MDRT_TABLE_BASE),</a>
-<a name="215"><span class="lineNum"> 215 </span> : : .alloc_cnt = CPU_TO_BE16(MDRT_TABLE_SIZE / sizeof(struct mdrt_table)),</a>
-<a name="216"><span class="lineNum"> 216 </span> : : /*</a>
-<a name="217"><span class="lineNum"> 217 </span> : : * XXX: Ideally hostboot should use allocated count and</a>
-<a name="218"><span class="lineNum"> 218 </span> : : * length. But looks like hostboot uses actual count</a>
-<a name="219"><span class="lineNum"> 219 </span> : : * and length to get MDRT table size. And post dump</a>
-<a name="220"><span class="lineNum"> 220 </span> : : * hostboot will update act_cnt. Hence update both</a>
-<a name="221"><span class="lineNum"> 221 </span> : : * alloc_cnt and act_cnt.</a>
-<a name="222"><span class="lineNum"> 222 </span> : : */</a>
-<a name="223"><span class="lineNum"> 223 </span> : : .act_cnt = CPU_TO_BE16(MDRT_TABLE_SIZE / sizeof(struct mdrt_table)),</a>
-<a name="224"><span class="lineNum"> 224 </span> : : .alloc_len = CPU_TO_BE32(sizeof(struct mdrt_table)),</a>
-<a name="225"><span class="lineNum"> 225 </span> : : .act_len = CPU_TO_BE32(sizeof(struct mdrt_table)),</a>
-<a name="226"><span class="lineNum"> 226 </span> : : },</a>
-<a name="227"><span class="lineNum"> 227 </span> : : .proc_dump_area = {</a>
-<a name="228"><span class="lineNum"> 228 </span> : : .addr = CPU_TO_BE64(PROC_DUMP_AREA_OFF),</a>
-<a name="229"><span class="lineNum"> 229 </span> : : .alloc_cnt = CPU_TO_BE16(1),</a>
-<a name="230"><span class="lineNum"> 230 </span> : : .act_cnt = CPU_TO_BE16(1),</a>
-<a name="231"><span class="lineNum"> 231 </span> : : .alloc_len = CPU_TO_BE32(sizeof(struct proc_dump_area)),</a>
-<a name="232"><span class="lineNum"> 232 </span> : : .act_len = CPU_TO_BE32(sizeof(struct proc_dump_area)),</a>
-<a name="233"><span class="lineNum"> 233 </span> : : },</a>
-<a name="234"><span class="lineNum"> 234 </span> : : },</a>
-<a name="235"><span class="lineNum"> 235 </span> : : };</a>
-<a name="236"><span class="lineNum"> 236 </span> : : </a>
-<a name="237"><span class="lineNum"> 237 </span> : : /* The service processor SPIRA-S structure */</a>
-<a name="238"><span class="lineNum"> 238 </span> : : struct spiras *spiras;</a>
-<a name="239"><span class="lineNum"> 239 </span> : : </a>
-<a name="240"><span class="lineNum"> 240 </span> : : /* Overridden for testing. */</a>
-<a name="241"><span class="lineNum"> 241 </span> : : #ifndef spira_check_ptr</a>
-<a name="242"><span class="lineNum"> 242 </span> : : bool spira_check_ptr(const void *ptr, const char *file, unsigned int line)</a>
-<a name="243"><span class="lineNum"> 243 </span> : : {</a>
-<a name="244"><span class="lineNum"> 244 </span> : : if (!ptr)</a>
-<a name="245"><span class="lineNum"> 245 </span> : : return false;</a>
-<a name="246"><span class="lineNum"> 246 </span> : : if (((unsigned long)ptr) &gt;= SPIRA_HEAP_BASE &amp;&amp;</a>
-<a name="247"><span class="lineNum"> 247 </span> : : ((unsigned long)ptr) &lt; (SPIRA_HEAP_BASE + SPIRA_HEAP_SIZE))</a>
-<a name="248"><span class="lineNum"> 248 </span> : : return true;</a>
-<a name="249"><span class="lineNum"> 249 </span> : : </a>
-<a name="250"><span class="lineNum"> 250 </span> : : prerror(&quot;SPIRA: Bad pointer %p at %s line %d\n&quot;, ptr, file, line);</a>
-<a name="251"><span class="lineNum"> 251 </span> : : return false;</a>
-<a name="252"><span class="lineNum"> 252 </span> : : }</a>
-<a name="253"><span class="lineNum"> 253 </span> : : #endif</a>
-<a name="254"><span class="lineNum"> 254 </span> : : </a>
-<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 545 : struct HDIF_common_hdr *__get_hdif(struct spira_ntuple *n, const char id[],</span></a>
-<a name="256"><span class="lineNum"> 256 </span> : : const char *file, int line)</a>
-<a name="257"><span class="lineNum"> 257 </span> : : {</a>
-<a name="258"><span class="lineNum"> 258 </span> :<span class="lineCov"> 545 : struct HDIF_common_hdr *h = ntuple_addr(n);</span></a>
-<a name="259"><span class="lineNum"> 259 </span> : : u16 act_cnt, alloc_cnt;</a>
-<a name="260"><span class="lineNum"> 260 </span> : : u32 act_len, alloc_len;</a>
-<a name="261"><span class="lineNum"> 261 </span> : : </a>
-<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 545 : if (!spira_check_ptr(h, file, line))</span></a>
-<a name="263"><span class="lineNum"> 263 </span> :<span class="lineCov"> 6 : return NULL;</span></a>
-<a name="264"><span class="lineNum"> 264 </span> : : </a>
-<a name="265"><span class="lineNum"> 265 </span> :<span class="lineCov"> 539 : act_cnt = be16_to_cpu(n-&gt;act_cnt);</span></a>
-<a name="266"><span class="lineNum"> 266 </span> :<span class="lineCov"> 539 : alloc_cnt = be16_to_cpu(n-&gt;alloc_cnt);</span></a>
-<a name="267"><span class="lineNum"> 267 </span> : : </a>
-<a name="268"><span class="lineNum"> 268 </span> :<span class="lineCov"> 539 : if (act_cnt &gt; alloc_cnt) {</span></a>
-<a name="269"><span class="lineNum"> 269 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SPIRA: bad ntuple, act_cnt &gt; alloc_cnt (%u &gt; %u)\n&quot;,</span></a>
-<a name="270"><span class="lineNum"> 270 </span> : : act_cnt, alloc_cnt);</a>
-<a name="271"><span class="lineNum"> 271 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="272"><span class="lineNum"> 272 </span> : : }</a>
-<a name="273"><span class="lineNum"> 273 </span> : : </a>
-<a name="274"><span class="lineNum"> 274 </span> :<span class="lineCov"> 539 : act_len = be32_to_cpu(n-&gt;act_len);</span></a>
-<a name="275"><span class="lineNum"> 275 </span> :<span class="lineCov"> 539 : alloc_len = be32_to_cpu(n-&gt;alloc_len);</span></a>
-<a name="276"><span class="lineNum"> 276 </span> : : </a>
-<a name="277"><span class="lineNum"> 277 </span> :<span class="lineCov"> 539 : if (act_len &gt; alloc_len) {</span></a>
-<a name="278"><span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SPIRA: bad ntuple, act_len &gt; alloc_len (%u &gt; %u)\n&quot;,</span></a>
-<a name="279"><span class="lineNum"> 279 </span> : : act_len, alloc_len);</a>
-<a name="280"><span class="lineNum"> 280 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="281"><span class="lineNum"> 281 </span> : : }</a>
-<a name="282"><span class="lineNum"> 282 </span> : : </a>
-<a name="283"><span class="lineNum"> 283 </span> :<span class="lineCov"> 539 : if (!HDIF_check(h, id)) {</span></a>
-<a name="284"><span class="lineNum"> 284 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SPIRA: bad tuple %p: expected %s at %s line %d\n&quot;,</span></a>
-<a name="285"><span class="lineNum"> 285 </span> : : h, id, file, line);</a>
-<a name="286"><span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="287"><span class="lineNum"> 287 </span> : : }</a>
-<a name="288"><span class="lineNum"> 288 </span> :<span class="lineCov"> 539 : return h;</span></a>
-<a name="289"><span class="lineNum"> 289 </span> : : }</a>
-<a name="290"><span class="lineNum"> 290 </span> : : </a>
-<a name="291"><span class="lineNum"> 291 </span> :<span class="lineCov"> 6 : static struct dt_node *add_xscom_node(uint64_t base, uint32_t hw_id,</span></a>
-<a name="292"><span class="lineNum"> 292 </span> : : uint32_t proc_chip_id)</a>
+<a name="15"><span class="lineNum"> 15 </span> : : #include &lt;vas.h&gt;</a>
+<a name="16"><span class="lineNum"> 16 </span> : : </a>
+<a name="17"><span class="lineNum"> 17 </span> : : #include &quot;hdata.h&quot;</a>
+<a name="18"><span class="lineNum"> 18 </span> : : #include &quot;hostservices.h&quot;</a>
+<a name="19"><span class="lineNum"> 19 </span> : : #include &quot;naca.h&quot;</a>
+<a name="20"><span class="lineNum"> 20 </span> : : #include &quot;spira.h&quot;</a>
+<a name="21"><span class="lineNum"> 21 </span> : : </a>
+<a name="22"><span class="lineNum"> 22 </span> : : /* Processor Initialization structure, contains</a>
+<a name="23"><span class="lineNum"> 23 </span> : : * the initial NIA and MSR values for the entry</a>
+<a name="24"><span class="lineNum"> 24 </span> : : * point</a>
+<a name="25"><span class="lineNum"> 25 </span> : : *</a>
+<a name="26"><span class="lineNum"> 26 </span> : : * Note: It appears to be ignoring the entry point</a>
+<a name="27"><span class="lineNum"> 27 </span> : : * and always going to 0x180</a>
+<a name="28"><span class="lineNum"> 28 </span> : : */</a>
+<a name="29"><span class="lineNum"> 29 </span> : : </a>
+<a name="30"><span class="lineNum"> 30 </span> : : static int cpu_type;</a>
+<a name="31"><span class="lineNum"> 31 </span> : : </a>
+<a name="32"><span class="lineNum"> 32 </span> : : extern struct proc_init_data proc_init_data;</a>
+<a name="33"><span class="lineNum"> 33 </span> : : </a>
+<a name="34"><span class="lineNum"> 34 </span> : : __section(&quot;.procin.data&quot;) struct proc_init_data proc_init_data = {</a>
+<a name="35"><span class="lineNum"> 35 </span> : : .hdr = HDIF_SIMPLE_HDR(&quot;PROCIN&quot;, 1, struct proc_init_data),</a>
+<a name="36"><span class="lineNum"> 36 </span> : : .regs_ptr = HDIF_IDATA_PTR(offsetof(struct proc_init_data, regs), 0x10),</a>
+<a name="37"><span class="lineNum"> 37 </span> : : .regs = {</a>
+<a name="38"><span class="lineNum"> 38 </span> : : .nia = CPU_TO_BE64(0x180),</a>
+<a name="39"><span class="lineNum"> 39 </span> : : .msr = CPU_TO_BE64(MSR_SF | MSR_HV),</a>
+<a name="40"><span class="lineNum"> 40 </span> : : },</a>
+<a name="41"><span class="lineNum"> 41 </span> : : };</a>
+<a name="42"><span class="lineNum"> 42 </span> : : </a>
+<a name="43"><span class="lineNum"> 43 </span> : : extern struct cpu_ctl_init_data cpu_ctl_init_data;</a>
+<a name="44"><span class="lineNum"> 44 </span> : : extern struct sp_addr_table cpu_ctl_spat_area;</a>
+<a name="45"><span class="lineNum"> 45 </span> : : extern struct sp_attn_area cpu_ctl_sp_attn_area1;</a>
+<a name="46"><span class="lineNum"> 46 </span> : : extern struct sp_attn_area cpu_ctl_sp_attn_area2;</a>
+<a name="47"><span class="lineNum"> 47 </span> : : extern struct hsr_data_area cpu_ctl_hsr_area;</a>
+<a name="48"><span class="lineNum"> 48 </span> : : </a>
+<a name="49"><span class="lineNum"> 49 </span> : : /*</a>
+<a name="50"><span class="lineNum"> 50 </span> : : * cpuctrl.data begins at CPU_CTL_OFF - cpu_ctl_init_data is located there.</a>
+<a name="51"><span class="lineNum"> 51 </span> : : * + sizeof(struct cpu_ctl_init_data) - cpu_ctl_spat_area</a>
+<a name="52"><span class="lineNum"> 52 </span> : : * + sizeof(struct sp_addr_table) - cpu_ctl_sp_attn_area1</a>
+<a name="53"><span class="lineNum"> 53 </span> : : * + sizeof(struct sp_attn_area) - cpu_ctl_sp_attn_area2</a>
+<a name="54"><span class="lineNum"> 54 </span> : : * + sizeof(struct sp_attn_area) - cpu_ctl_hsr_area</a>
+<a name="55"><span class="lineNum"> 55 </span> : : *</a>
+<a name="56"><span class="lineNum"> 56 </span> : : * Can't use CPU_TO_BE64 directly on the labels as a constant initialiser.</a>
+<a name="57"><span class="lineNum"> 57 </span> : : *</a>
+<a name="58"><span class="lineNum"> 58 </span> : : * CPU_CTL_INIT_DATA_OFF is offset from 0, the others are addressed from the</a>
+<a name="59"><span class="lineNum"> 59 </span> : : * relocated address (+SKIBOOT_BASE)</a>
+<a name="60"><span class="lineNum"> 60 </span> : : */</a>
+<a name="61"><span class="lineNum"> 61 </span> : : #define CPU_CTL_INIT_DATA_OFF (CPU_CTL_OFF)</a>
+<a name="62"><span class="lineNum"> 62 </span> : : #define CPU_CTL_SPAT_AREA_OFF (CPU_CTL_INIT_DATA_OFF + sizeof(struct cpu_ctl_init_data) + SKIBOOT_BASE)</a>
+<a name="63"><span class="lineNum"> 63 </span> : : #define CPU_CTL_SP_ATTN_AREA1_OFF (ALIGN_UP((CPU_CTL_SPAT_AREA_OFF + sizeof(struct sp_addr_table)), ATTN_AREA_SZ))</a>
+<a name="64"><span class="lineNum"> 64 </span> : : #define CPU_CTL_SP_ATTN_AREA2_OFF (CPU_CTL_SP_ATTN_AREA1_OFF + sizeof(struct sp_attn_area))</a>
+<a name="65"><span class="lineNum"> 65 </span> : : #define CPU_CTL_HSR_AREA_OFF (CPU_CTL_SP_ATTN_AREA2_OFF + sizeof(struct sp_attn_area))</a>
+<a name="66"><span class="lineNum"> 66 </span> : : </a>
+<a name="67"><span class="lineNum"> 67 </span> : : __section(&quot;.cpuctrl.data&quot;) struct hsr_data_area cpu_ctl_hsr_area;</a>
+<a name="68"><span class="lineNum"> 68 </span> : : __section(&quot;.cpuctrl.data&quot;) struct sp_attn_area cpu_ctl_sp_attn_area2;</a>
+<a name="69"><span class="lineNum"> 69 </span> : : __section(&quot;.cpuctrl.data&quot;) struct sp_attn_area cpu_ctl_sp_attn_area1;</a>
+<a name="70"><span class="lineNum"> 70 </span> : : __section(&quot;.cpuctrl.data&quot;) struct sp_addr_table cpu_ctl_spat_area;</a>
+<a name="71"><span class="lineNum"> 71 </span> : : </a>
+<a name="72"><span class="lineNum"> 72 </span> : : __section(&quot;.cpuctrl.data&quot;) struct cpu_ctl_init_data cpu_ctl_init_data = {</a>
+<a name="73"><span class="lineNum"> 73 </span> : : .hdr = HDIF_SIMPLE_HDR(CPU_CTL_HDIF_SIG, 2, struct cpu_ctl_init_data),</a>
+<a name="74"><span class="lineNum"> 74 </span> : : .cpu_ctl = HDIF_IDATA_PTR(offsetof(struct cpu_ctl_init_data, cpu_ctl_lt),</a>
+<a name="75"><span class="lineNum"> 75 </span> : : sizeof(struct cpu_ctl_legacy_table)),</a>
+<a name="76"><span class="lineNum"> 76 </span> : : .cpu_ctl_lt = {</a>
+<a name="77"><span class="lineNum"> 77 </span> : : .spat = {</a>
+<a name="78"><span class="lineNum"> 78 </span> : : .addr = CPU_TO_BE64(CPU_CTL_SPAT_AREA_OFF),</a>
+<a name="79"><span class="lineNum"> 79 </span> : : .size = CPU_TO_BE64(sizeof(struct sp_addr_table)),</a>
+<a name="80"><span class="lineNum"> 80 </span> : : },</a>
+<a name="81"><span class="lineNum"> 81 </span> : : .sp_attn_area1 = {</a>
+<a name="82"><span class="lineNum"> 82 </span> : : .addr = CPU_TO_BE64(CPU_CTL_SP_ATTN_AREA1_OFF),</a>
+<a name="83"><span class="lineNum"> 83 </span> : : .size = CPU_TO_BE64(sizeof(struct sp_attn_area)),</a>
+<a name="84"><span class="lineNum"> 84 </span> : : },</a>
+<a name="85"><span class="lineNum"> 85 </span> : : .sp_attn_area2 = {</a>
+<a name="86"><span class="lineNum"> 86 </span> : : .addr = CPU_TO_BE64(CPU_CTL_SP_ATTN_AREA2_OFF),</a>
+<a name="87"><span class="lineNum"> 87 </span> : : .size = CPU_TO_BE64(sizeof(struct sp_attn_area)),</a>
+<a name="88"><span class="lineNum"> 88 </span> : : },</a>
+<a name="89"><span class="lineNum"> 89 </span> : : .hsr_area = {</a>
+<a name="90"><span class="lineNum"> 90 </span> : : .addr = CPU_TO_BE64(CPU_CTL_HSR_AREA_OFF),</a>
+<a name="91"><span class="lineNum"> 91 </span> : : .size = CPU_TO_BE64(sizeof(struct hsr_data_area)),</a>
+<a name="92"><span class="lineNum"> 92 </span> : : },</a>
+<a name="93"><span class="lineNum"> 93 </span> : : },</a>
+<a name="94"><span class="lineNum"> 94 </span> : : };</a>
+<a name="95"><span class="lineNum"> 95 </span> : : </a>
+<a name="96"><span class="lineNum"> 96 </span> : : /* Populate MDST table</a>
+<a name="97"><span class="lineNum"> 97 </span> : : *</a>
+<a name="98"><span class="lineNum"> 98 </span> : : * Note that we only pass sapphire console buffer here so that we can</a>
+<a name="99"><span class="lineNum"> 99 </span> : : * capture early failure logs. Later dump component (fsp_dump_mdst_init)</a>
+<a name="100"><span class="lineNum"> 100 </span> : : * creates new table with all the memory sections we are interested and</a>
+<a name="101"><span class="lineNum"> 101 </span> : : * sends updated table to FSP via MBOX.</a>
+<a name="102"><span class="lineNum"> 102 </span> : : *</a>
+<a name="103"><span class="lineNum"> 103 </span> : : * To help the FSP distinguishing between TCE tokens and actual physical</a>
+<a name="104"><span class="lineNum"> 104 </span> : : * addresses, we set the top bit to 1 on physical addresses</a>
+<a name="105"><span class="lineNum"> 105 </span> : : */</a>
+<a name="106"><span class="lineNum"> 106 </span> : : </a>
+<a name="107"><span class="lineNum"> 107 </span> : : extern struct mdst_table init_mdst_table[];</a>
+<a name="108"><span class="lineNum"> 108 </span> : : </a>
+<a name="109"><span class="lineNum"> 109 </span> : : __section(&quot;.mdst.data&quot;) struct mdst_table init_mdst_table[2] = {</a>
+<a name="110"><span class="lineNum"> 110 </span> : : {</a>
+<a name="111"><span class="lineNum"> 111 </span> : : .addr = CPU_TO_BE64(INMEM_CON_START | HRMOR_BIT),</a>
+<a name="112"><span class="lineNum"> 112 </span> : : .data_region = DUMP_REGION_CONSOLE,</a>
+<a name="113"><span class="lineNum"> 113 </span> : : .dump_type = DUMP_TYPE_SYSDUMP,</a>
+<a name="114"><span class="lineNum"> 114 </span> : : .size = CPU_TO_BE32(INMEM_CON_LEN),</a>
+<a name="115"><span class="lineNum"> 115 </span> : : },</a>
+<a name="116"><span class="lineNum"> 116 </span> : : {</a>
+<a name="117"><span class="lineNum"> 117 </span> : : .addr = CPU_TO_BE64(HBRT_CON_START | HRMOR_BIT),</a>
+<a name="118"><span class="lineNum"> 118 </span> : : .data_region = DUMP_REGION_HBRT_LOG,</a>
+<a name="119"><span class="lineNum"> 119 </span> : : .dump_type = DUMP_TYPE_SYSDUMP,</a>
+<a name="120"><span class="lineNum"> 120 </span> : : .size = CPU_TO_BE32(HBRT_CON_LEN),</a>
+<a name="121"><span class="lineNum"> 121 </span> : : },</a>
+<a name="122"><span class="lineNum"> 122 </span> : : };</a>
+<a name="123"><span class="lineNum"> 123 </span> : : </a>
+<a name="124"><span class="lineNum"> 124 </span> : : /* SP Interface Root Array, aka SPIRA */</a>
+<a name="125"><span class="lineNum"> 125 </span> : : __section(&quot;.spira.data&quot;) struct spira spira = {</a>
+<a name="126"><span class="lineNum"> 126 </span> : : .hdr = HDIF_SIMPLE_HDR(&quot;SPIRA &quot;, SPIRA_VERSION, struct spira),</a>
+<a name="127"><span class="lineNum"> 127 </span> : : .ntuples_ptr = HDIF_IDATA_PTR(offsetof(struct spira, ntuples),</a>
+<a name="128"><span class="lineNum"> 128 </span> : : sizeof(struct spira_ntuples)),</a>
+<a name="129"><span class="lineNum"> 129 </span> : : .ntuples = {</a>
+<a name="130"><span class="lineNum"> 130 </span> : : .array_hdr = {</a>
+<a name="131"><span class="lineNum"> 131 </span> : : .offset = CPU_TO_BE32(HDIF_ARRAY_OFFSET),</a>
+<a name="132"><span class="lineNum"> 132 </span> : : .ecnt = CPU_TO_BE32(SPIRA_NTUPLES_COUNT),</a>
+<a name="133"><span class="lineNum"> 133 </span> : : .esize</a>
+<a name="134"><span class="lineNum"> 134 </span> : : = CPU_TO_BE32(sizeof(struct spira_ntuple)),</a>
+<a name="135"><span class="lineNum"> 135 </span> : : .eactsz = CPU_TO_BE32(0x18),</a>
+<a name="136"><span class="lineNum"> 136 </span> : : },</a>
+<a name="137"><span class="lineNum"> 137 </span> : : /* We only populate some n-tuples */</a>
+<a name="138"><span class="lineNum"> 138 </span> : : .proc_init = {</a>
+<a name="139"><span class="lineNum"> 139 </span> : : .addr = CPU_TO_BE64(PROCIN_OFF),</a>
+<a name="140"><span class="lineNum"> 140 </span> : : .alloc_cnt = CPU_TO_BE16(1),</a>
+<a name="141"><span class="lineNum"> 141 </span> : : .act_cnt = CPU_TO_BE16(1),</a>
+<a name="142"><span class="lineNum"> 142 </span> : : .alloc_len</a>
+<a name="143"><span class="lineNum"> 143 </span> : : = CPU_TO_BE32(sizeof(struct proc_init_data)),</a>
+<a name="144"><span class="lineNum"> 144 </span> : : },</a>
+<a name="145"><span class="lineNum"> 145 </span> : : .heap = {</a>
+<a name="146"><span class="lineNum"> 146 </span> : : .addr = CPU_TO_BE64(SPIRA_HEAP_BASE),</a>
+<a name="147"><span class="lineNum"> 147 </span> : : .alloc_cnt = CPU_TO_BE16(1),</a>
+<a name="148"><span class="lineNum"> 148 </span> : : .alloc_len = CPU_TO_BE32(SPIRA_HEAP_SIZE),</a>
+<a name="149"><span class="lineNum"> 149 </span> : : },</a>
+<a name="150"><span class="lineNum"> 150 </span> : : .mdump_src = {</a>
+<a name="151"><span class="lineNum"> 151 </span> : : .addr = CPU_TO_BE64(MDST_TABLE_OFF),</a>
+<a name="152"><span class="lineNum"> 152 </span> : : .alloc_cnt = CPU_TO_BE16(ARRAY_SIZE(init_mdst_table)),</a>
+<a name="153"><span class="lineNum"> 153 </span> : : .act_cnt = CPU_TO_BE16(ARRAY_SIZE(init_mdst_table)),</a>
+<a name="154"><span class="lineNum"> 154 </span> : : .alloc_len =</a>
+<a name="155"><span class="lineNum"> 155 </span> : : CPU_TO_BE32(sizeof(init_mdst_table)),</a>
+<a name="156"><span class="lineNum"> 156 </span> : : },</a>
+<a name="157"><span class="lineNum"> 157 </span> : : .cpu_ctrl = {</a>
+<a name="158"><span class="lineNum"> 158 </span> : : .addr = CPU_TO_BE64(CPU_CTL_INIT_DATA_OFF),</a>
+<a name="159"><span class="lineNum"> 159 </span> : : .alloc_cnt = CPU_TO_BE16(1),</a>
+<a name="160"><span class="lineNum"> 160 </span> : : .act_cnt = CPU_TO_BE16(1),</a>
+<a name="161"><span class="lineNum"> 161 </span> : : .alloc_len = CPU_TO_BE32(sizeof(cpu_ctl_init_data)),</a>
+<a name="162"><span class="lineNum"> 162 </span> : : },</a>
+<a name="163"><span class="lineNum"> 163 </span> : : },</a>
+<a name="164"><span class="lineNum"> 164 </span> : : };</a>
+<a name="165"><span class="lineNum"> 165 </span> : : </a>
+<a name="166"><span class="lineNum"> 166 </span> : : /* The Hypervisor SPIRA-H Structure */</a>
+<a name="167"><span class="lineNum"> 167 </span> : : __section(&quot;.spirah.data&quot;) struct spirah spirah = {</a>
+<a name="168"><span class="lineNum"> 168 </span> : : .hdr = HDIF_SIMPLE_HDR(SPIRAH_HDIF_SIG, SPIRAH_VERSION, struct spirah),</a>
+<a name="169"><span class="lineNum"> 169 </span> : : .ntuples_ptr = HDIF_IDATA_PTR(offsetof(struct spirah, ntuples),</a>
+<a name="170"><span class="lineNum"> 170 </span> : : sizeof(struct spirah_ntuples)),</a>
+<a name="171"><span class="lineNum"> 171 </span> : : .ntuples = {</a>
+<a name="172"><span class="lineNum"> 172 </span> : : .array_hdr = {</a>
+<a name="173"><span class="lineNum"> 173 </span> : : .offset = CPU_TO_BE32(HDIF_ARRAY_OFFSET),</a>
+<a name="174"><span class="lineNum"> 174 </span> : : .ecnt = CPU_TO_BE32(SPIRAH_NTUPLES_COUNT),</a>
+<a name="175"><span class="lineNum"> 175 </span> : : .esize</a>
+<a name="176"><span class="lineNum"> 176 </span> : : = CPU_TO_BE32(sizeof(struct spira_ntuple)),</a>
+<a name="177"><span class="lineNum"> 177 </span> : : .eactsz = CPU_TO_BE32(0x18),</a>
+<a name="178"><span class="lineNum"> 178 </span> : : },</a>
+<a name="179"><span class="lineNum"> 179 </span> : : /* Host Data Areas */</a>
+<a name="180"><span class="lineNum"> 180 </span> : : .hs_data_area = {</a>
+<a name="181"><span class="lineNum"> 181 </span> : : .addr = CPU_TO_BE64(SPIRA_HEAP_BASE),</a>
+<a name="182"><span class="lineNum"> 182 </span> : : .alloc_cnt = CPU_TO_BE16(1),</a>
+<a name="183"><span class="lineNum"> 183 </span> : : .alloc_len = CPU_TO_BE32(SPIRA_HEAP_SIZE),</a>
+<a name="184"><span class="lineNum"> 184 </span> : : },</a>
+<a name="185"><span class="lineNum"> 185 </span> : : /* We only populate some n-tuples */</a>
+<a name="186"><span class="lineNum"> 186 </span> : : .proc_init = {</a>
+<a name="187"><span class="lineNum"> 187 </span> : : .addr = CPU_TO_BE64(PROCIN_OFF),</a>
+<a name="188"><span class="lineNum"> 188 </span> : : .alloc_cnt = CPU_TO_BE16(1),</a>
+<a name="189"><span class="lineNum"> 189 </span> : : .act_cnt = CPU_TO_BE16(1),</a>
+<a name="190"><span class="lineNum"> 190 </span> : : .alloc_len</a>
+<a name="191"><span class="lineNum"> 191 </span> : : = CPU_TO_BE32(sizeof(struct proc_init_data)),</a>
+<a name="192"><span class="lineNum"> 192 </span> : : },</a>
+<a name="193"><span class="lineNum"> 193 </span> : : .cpu_ctrl = {</a>
+<a name="194"><span class="lineNum"> 194 </span> : : .addr = CPU_TO_BE64(CPU_CTL_INIT_DATA_OFF),</a>
+<a name="195"><span class="lineNum"> 195 </span> : : .alloc_cnt = CPU_TO_BE16(1),</a>
+<a name="196"><span class="lineNum"> 196 </span> : : .act_cnt = CPU_TO_BE16(1),</a>
+<a name="197"><span class="lineNum"> 197 </span> : : .alloc_len =</a>
+<a name="198"><span class="lineNum"> 198 </span> : : CPU_TO_BE32(sizeof(cpu_ctl_init_data)),</a>
+<a name="199"><span class="lineNum"> 199 </span> : : },</a>
+<a name="200"><span class="lineNum"> 200 </span> : : .mdump_src = {</a>
+<a name="201"><span class="lineNum"> 201 </span> : : .addr = CPU_TO_BE64(MDST_TABLE_OFF),</a>
+<a name="202"><span class="lineNum"> 202 </span> : : .alloc_cnt = CPU_TO_BE16(MDST_TABLE_SIZE / sizeof(struct mdst_table)),</a>
+<a name="203"><span class="lineNum"> 203 </span> : : .act_cnt = CPU_TO_BE16(ARRAY_SIZE(init_mdst_table)),</a>
+<a name="204"><span class="lineNum"> 204 </span> : : .alloc_len = CPU_TO_BE32(sizeof(struct mdst_table)),</a>
+<a name="205"><span class="lineNum"> 205 </span> : : .act_len = CPU_TO_BE32(sizeof(struct mdst_table)),</a>
+<a name="206"><span class="lineNum"> 206 </span> : : },</a>
+<a name="207"><span class="lineNum"> 207 </span> : : .mdump_dst = {</a>
+<a name="208"><span class="lineNum"> 208 </span> : : .addr = CPU_TO_BE64(MDDT_TABLE_OFF),</a>
+<a name="209"><span class="lineNum"> 209 </span> : : .alloc_cnt = CPU_TO_BE16(MDDT_TABLE_SIZE / sizeof(struct mddt_table)),</a>
+<a name="210"><span class="lineNum"> 210 </span> : : .act_cnt = CPU_TO_BE16(0),</a>
+<a name="211"><span class="lineNum"> 211 </span> : : .alloc_len = CPU_TO_BE32(sizeof(struct mddt_table)),</a>
+<a name="212"><span class="lineNum"> 212 </span> : : .act_len = CPU_TO_BE32(sizeof(struct mddt_table)),</a>
+<a name="213"><span class="lineNum"> 213 </span> : : },</a>
+<a name="214"><span class="lineNum"> 214 </span> : : .mdump_res = {</a>
+<a name="215"><span class="lineNum"> 215 </span> : : .addr = CPU_TO_BE64(MDRT_TABLE_BASE),</a>
+<a name="216"><span class="lineNum"> 216 </span> : : .alloc_cnt = CPU_TO_BE16(MDRT_TABLE_SIZE / sizeof(struct mdrt_table)),</a>
+<a name="217"><span class="lineNum"> 217 </span> : : /*</a>
+<a name="218"><span class="lineNum"> 218 </span> : : * XXX: Ideally hostboot should use allocated count and</a>
+<a name="219"><span class="lineNum"> 219 </span> : : * length. But looks like hostboot uses actual count</a>
+<a name="220"><span class="lineNum"> 220 </span> : : * and length to get MDRT table size. And post dump</a>
+<a name="221"><span class="lineNum"> 221 </span> : : * hostboot will update act_cnt. Hence update both</a>
+<a name="222"><span class="lineNum"> 222 </span> : : * alloc_cnt and act_cnt.</a>
+<a name="223"><span class="lineNum"> 223 </span> : : */</a>
+<a name="224"><span class="lineNum"> 224 </span> : : .act_cnt = CPU_TO_BE16(MDRT_TABLE_SIZE / sizeof(struct mdrt_table)),</a>
+<a name="225"><span class="lineNum"> 225 </span> : : .alloc_len = CPU_TO_BE32(sizeof(struct mdrt_table)),</a>
+<a name="226"><span class="lineNum"> 226 </span> : : .act_len = CPU_TO_BE32(sizeof(struct mdrt_table)),</a>
+<a name="227"><span class="lineNum"> 227 </span> : : },</a>
+<a name="228"><span class="lineNum"> 228 </span> : : .proc_dump_area = {</a>
+<a name="229"><span class="lineNum"> 229 </span> : : .addr = CPU_TO_BE64(PROC_DUMP_AREA_OFF),</a>
+<a name="230"><span class="lineNum"> 230 </span> : : .alloc_cnt = CPU_TO_BE16(1),</a>
+<a name="231"><span class="lineNum"> 231 </span> : : .act_cnt = CPU_TO_BE16(1),</a>
+<a name="232"><span class="lineNum"> 232 </span> : : .alloc_len = CPU_TO_BE32(sizeof(struct proc_dump_area)),</a>
+<a name="233"><span class="lineNum"> 233 </span> : : .act_len = CPU_TO_BE32(sizeof(struct proc_dump_area)),</a>
+<a name="234"><span class="lineNum"> 234 </span> : : },</a>
+<a name="235"><span class="lineNum"> 235 </span> : : },</a>
+<a name="236"><span class="lineNum"> 236 </span> : : };</a>
+<a name="237"><span class="lineNum"> 237 </span> : : </a>
+<a name="238"><span class="lineNum"> 238 </span> : : /* The service processor SPIRA-S structure */</a>
+<a name="239"><span class="lineNum"> 239 </span> : : struct spiras *skiboot_constant_addr spiras;</a>
+<a name="240"><span class="lineNum"> 240 </span> : : </a>
+<a name="241"><span class="lineNum"> 241 </span> : : /* Overridden for testing. */</a>
+<a name="242"><span class="lineNum"> 242 </span> : : #ifndef spira_check_ptr</a>
+<a name="243"><span class="lineNum"> 243 </span> : : bool spira_check_ptr(const void *ptr, const char *file, unsigned int line)</a>
+<a name="244"><span class="lineNum"> 244 </span> : : {</a>
+<a name="245"><span class="lineNum"> 245 </span> : : if (!ptr)</a>
+<a name="246"><span class="lineNum"> 246 </span> : : return false;</a>
+<a name="247"><span class="lineNum"> 247 </span> : : if (((unsigned long)ptr) &gt;= SPIRA_HEAP_BASE &amp;&amp;</a>
+<a name="248"><span class="lineNum"> 248 </span> : : ((unsigned long)ptr) &lt; (SPIRA_HEAP_BASE + SPIRA_HEAP_SIZE))</a>
+<a name="249"><span class="lineNum"> 249 </span> : : return true;</a>
+<a name="250"><span class="lineNum"> 250 </span> : : </a>
+<a name="251"><span class="lineNum"> 251 </span> : : prerror(&quot;SPIRA: Bad pointer %p at %s line %d\n&quot;, ptr, file, line);</a>
+<a name="252"><span class="lineNum"> 252 </span> : : return false;</a>
+<a name="253"><span class="lineNum"> 253 </span> : : }</a>
+<a name="254"><span class="lineNum"> 254 </span> : : #endif</a>
+<a name="255"><span class="lineNum"> 255 </span> : : </a>
+<a name="256"><span class="lineNum"> 256 </span> :<span class="lineCov"> 545 : struct HDIF_common_hdr *__get_hdif(struct spira_ntuple *n, const char id[],</span></a>
+<a name="257"><span class="lineNum"> 257 </span> : : const char *file, int line)</a>
+<a name="258"><span class="lineNum"> 258 </span> : : {</a>
+<a name="259"><span class="lineNum"> 259 </span> :<span class="lineCov"> 545 : struct HDIF_common_hdr *h = ntuple_addr(n);</span></a>
+<a name="260"><span class="lineNum"> 260 </span> : : u16 act_cnt, alloc_cnt;</a>
+<a name="261"><span class="lineNum"> 261 </span> : : u32 act_len, alloc_len;</a>
+<a name="262"><span class="lineNum"> 262 </span> : : </a>
+<a name="263"><span class="lineNum"> 263 </span> :<span class="lineCov"> 545 : if (!spira_check_ptr(h, file, line))</span></a>
+<a name="264"><span class="lineNum"> 264 </span> :<span class="lineCov"> 6 : return NULL;</span></a>
+<a name="265"><span class="lineNum"> 265 </span> : : </a>
+<a name="266"><span class="lineNum"> 266 </span> :<span class="lineCov"> 539 : act_cnt = be16_to_cpu(n-&gt;act_cnt);</span></a>
+<a name="267"><span class="lineNum"> 267 </span> :<span class="lineCov"> 539 : alloc_cnt = be16_to_cpu(n-&gt;alloc_cnt);</span></a>
+<a name="268"><span class="lineNum"> 268 </span> : : </a>
+<a name="269"><span class="lineNum"> 269 </span> :<span class="lineCov"> 539 : if (act_cnt &gt; alloc_cnt) {</span></a>
+<a name="270"><span class="lineNum"> 270 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SPIRA: bad ntuple, act_cnt &gt; alloc_cnt (%u &gt; %u)\n&quot;,</span></a>
+<a name="271"><span class="lineNum"> 271 </span> : : act_cnt, alloc_cnt);</a>
+<a name="272"><span class="lineNum"> 272 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="273"><span class="lineNum"> 273 </span> : : }</a>
+<a name="274"><span class="lineNum"> 274 </span> : : </a>
+<a name="275"><span class="lineNum"> 275 </span> :<span class="lineCov"> 539 : act_len = be32_to_cpu(n-&gt;act_len);</span></a>
+<a name="276"><span class="lineNum"> 276 </span> :<span class="lineCov"> 539 : alloc_len = be32_to_cpu(n-&gt;alloc_len);</span></a>
+<a name="277"><span class="lineNum"> 277 </span> : : </a>
+<a name="278"><span class="lineNum"> 278 </span> :<span class="lineCov"> 539 : if (act_len &gt; alloc_len) {</span></a>
+<a name="279"><span class="lineNum"> 279 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SPIRA: bad ntuple, act_len &gt; alloc_len (%u &gt; %u)\n&quot;,</span></a>
+<a name="280"><span class="lineNum"> 280 </span> : : act_len, alloc_len);</a>
+<a name="281"><span class="lineNum"> 281 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="282"><span class="lineNum"> 282 </span> : : }</a>
+<a name="283"><span class="lineNum"> 283 </span> : : </a>
+<a name="284"><span class="lineNum"> 284 </span> :<span class="lineCov"> 539 : if (!HDIF_check(h, id)) {</span></a>
+<a name="285"><span class="lineNum"> 285 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SPIRA: bad tuple %p: expected %s at %s line %d\n&quot;,</span></a>
+<a name="286"><span class="lineNum"> 286 </span> : : h, id, file, line);</a>
+<a name="287"><span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="288"><span class="lineNum"> 288 </span> : : }</a>
+<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 539 : return h;</span></a>
+<a name="290"><span class="lineNum"> 290 </span> : : }</a>
+<a name="291"><span class="lineNum"> 291 </span> : : </a>
+<a name="292"><span class="lineNum"> 292 </span> :<span class="lineCov"> 103 : uint32_t get_xscom_id(const struct sppcrd_chip_info *cinfo)</span></a>
<a name="293"><span class="lineNum"> 293 </span> : : {</a>
-<a name="294"><span class="lineNum"> 294 </span> : : struct dt_node *node;</a>
-<a name="295"><span class="lineNum"> 295 </span> : : uint64_t addr, size;</a>
-<a name="296"><span class="lineNum"> 296 </span> : : uint64_t freq;</a>
-<a name="297"><span class="lineNum"> 297 </span> : : </a>
-<a name="298"><span class="lineNum"> 298 </span> :<span class="lineCov"> 6 : switch (proc_gen) {</span></a>
-<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 6 : case proc_gen_p8:</span></a>
-<a name="300"><span class="lineNum"> 300 </span> : : /* On P8 all the chip SCOMs share single region */</a>
-<a name="301"><span class="lineNum"> 301 </span> :<span class="lineCov"> 6 : addr = base | ((uint64_t)hw_id &lt;&lt; PPC_BITLSHIFT(28));</span></a>
-<a name="302"><span class="lineNum"> 302 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="303"><span class="lineNum"> 303 </span> :<span class="lineNoCov"> 0 : case proc_gen_p9:</span></a>
-<a name="304"><span class="lineNum"> 304 </span> : : default:</a>
-<a name="305"><span class="lineNum"> 305 </span> : : /* On P9 we need to put the chip ID in the natural powerbus</a>
-<a name="306"><span class="lineNum"> 306 </span> : : * position.</a>
-<a name="307"><span class="lineNum"> 307 </span> : : */</a>
-<a name="308"><span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : addr = base | (((uint64_t)hw_id) &lt;&lt; 42);</span></a>
-<a name="309"><span class="lineNum"> 309 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="310"><span class="lineNum"> 310 </span> : : };</a>
-<a name="311"><span class="lineNum"> 311 </span> : : </a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 6 : size = (u64)1 &lt;&lt; PPC_BITLSHIFT(28);</span></a>
-<a name="313"><span class="lineNum"> 313 </span> : : </a>
-<a name="314"><span class="lineNum"> 314 </span> :<span class="lineCov"> 6 : prlog(PR_INFO, &quot;XSCOM: Found HW ID 0x%x (PCID 0x%x) @ 0x%llx\n&quot;,</span></a>
-<a name="315"><span class="lineNum"> 315 </span> : : hw_id, proc_chip_id, (long long)addr);</a>
-<a name="316"><span class="lineNum"> 316 </span> : : </a>
-<a name="317"><span class="lineNum"> 317 </span> :<span class="lineCov"> 6 : node = dt_new_addr(dt_root, &quot;xscom&quot;, addr);</span></a>
-<a name="318"><span class="lineNum"> 318 </span> :<span class="lineCov"> 6 : assert(node);</span></a>
-<a name="319"><span class="lineNum"> 319 </span> : : </a>
-<a name="320"><span class="lineNum"> 320 </span> :<span class="lineCov"> 6 : dt_add_property_cells(node, &quot;ibm,chip-id&quot;, hw_id);</span></a>
-<a name="321"><span class="lineNum"> 321 </span> :<span class="lineCov"> 6 : dt_add_property_cells(node, &quot;ibm,proc-chip-id&quot;, proc_chip_id);</span></a>
-<a name="322"><span class="lineNum"> 322 </span> :<span class="lineCov"> 6 : dt_add_property_cells(node, &quot;#address-cells&quot;, 1);</span></a>
-<a name="323"><span class="lineNum"> 323 </span> :<span class="lineCov"> 6 : dt_add_property_cells(node, &quot;#size-cells&quot;, 1);</span></a>
-<a name="324"><span class="lineNum"> 324 </span> :<span class="lineCov"> 6 : dt_add_property(node, &quot;scom-controller&quot;, NULL, 0);</span></a>
-<a name="325"><span class="lineNum"> 325 </span> : : </a>
-<a name="326"><span class="lineNum"> 326 </span> :<span class="lineCov"> 6 : switch(proc_gen) {</span></a>
-<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 6 : case proc_gen_p8:</span></a>
-<a name="328"><span class="lineNum"> 328 </span> :<span class="lineCov"> 6 : dt_add_property_strings(node, &quot;compatible&quot;,</span></a>
-<a name="329"><span class="lineNum"> 329 </span> : : &quot;ibm,xscom&quot;, &quot;ibm,power8-xscom&quot;);</a>
-<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="331"><span class="lineNum"> 331 </span> :<span class="lineNoCov"> 0 : case proc_gen_p9:</span></a>
-<a name="332"><span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(node, &quot;compatible&quot;,</span></a>
-<a name="333"><span class="lineNum"> 333 </span> : : &quot;ibm,xscom&quot;, &quot;ibm,power9-xscom&quot;);</a>
-<a name="334"><span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="335"><span class="lineNum"> 335 </span> :<span class="lineNoCov"> 0 : default:</span></a>
-<a name="336"><span class="lineNum"> 336 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(node, &quot;compatible&quot;, &quot;ibm,xscom&quot;);</span></a>
-<a name="337"><span class="lineNum"> 337 </span> : : }</a>
-<a name="338"><span class="lineNum"> 338 </span> :<span class="lineCov"> 6 : dt_add_property_u64s(node, &quot;reg&quot;, addr, size);</span></a>
-<a name="339"><span class="lineNum"> 339 </span> : : </a>
-<a name="340"><span class="lineNum"> 340 </span> : : /*</a>
-<a name="341"><span class="lineNum"> 341 </span> : : * The bus-frequency of the xscom node is actually the PIB/PCB</a>
-<a name="342"><span class="lineNum"> 342 </span> : : * frequency. It is derived from the nest-clock via a 4:1 divider</a>
-<a name="343"><span class="lineNum"> 343 </span> : : */</a>
-<a name="344"><span class="lineNum"> 344 </span> :<span class="lineCov"> 6 : freq = dt_prop_get_u64_def(dt_root, &quot;nest-frequency&quot;, 0);</span></a>
-<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 6 : freq /= 4;</span></a>
-<a name="346"><span class="lineNum"> 346 </span> :<span class="lineCov"> 6 : if (freq)</span></a>
-<a name="347"><span class="lineNum"> 347 </span> :<span class="lineCov"> 6 : dt_add_property_u64(node, &quot;bus-frequency&quot;, freq);</span></a>
-<a name="348"><span class="lineNum"> 348 </span> : : </a>
-<a name="349"><span class="lineNum"> 349 </span> :<span class="lineCov"> 6 : return node;</span></a>
-<a name="350"><span class="lineNum"> 350 </span> : : }</a>
-<a name="351"><span class="lineNum"> 351 </span> : : </a>
-<a name="352"><span class="lineNum"> 352 </span> : : /*</a>
-<a name="353"><span class="lineNum"> 353 </span> : : * Given a xscom@ node this will return a pointer into the SPPCRD</a>
-<a name="354"><span class="lineNum"> 354 </span> : : * structure corresponding to that node</a>
-<a name="355"><span class="lineNum"> 355 </span> : : */</a>
-<a name="356"><span class="lineNum"> 356 </span> : : #define GET_HDIF_HDR -1</a>
-<a name="357"><span class="lineNum"> 357 </span> :<span class="lineNoCov"> 0 : static const void *xscom_to_pcrd(struct dt_node *xscom, int idata_index)</span></a>
-<a name="358"><span class="lineNum"> 358 </span> : : {</a>
-<a name="359"><span class="lineNum"> 359 </span> :<span class="lineNoCov"> 0 : struct spira_ntuple *t = &amp;spira.ntuples.proc_chip;</span></a>
-<a name="360"><span class="lineNum"> 360 </span> : : const struct HDIF_common_hdr *hdif;</a>
-<a name="361"><span class="lineNum"> 361 </span> : : const void *idata;</a>
-<a name="362"><span class="lineNum"> 362 </span> : : unsigned int size;</a>
-<a name="363"><span class="lineNum"> 363 </span> : : uint32_t i;</a>
-<a name="364"><span class="lineNum"> 364 </span> : : void *base;</a>
-<a name="365"><span class="lineNum"> 365 </span> : : </a>
-<a name="366"><span class="lineNum"> 366 </span> :<span class="lineNoCov"> 0 : i = dt_prop_get_u32_def(xscom, DT_PRIVATE &quot;sppcrd-index&quot;, 0xffffffff);</span></a>
-<a name="367"><span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : if (i == 0xffffffff)</span></a>
-<a name="368"><span class="lineNum"> 368 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="369"><span class="lineNum"> 369 </span> : : </a>
-<a name="370"><span class="lineNum"> 370 </span> :<span class="lineNoCov"> 0 : base = get_hdif(t, &quot;SPPCRD&quot;);</span></a>
-<a name="371"><span class="lineNum"> 371 </span> :<span class="lineNoCov"> 0 : assert(base);</span></a>
-<a name="372"><span class="lineNum"> 372 </span> :<span class="lineNoCov"> 0 : assert(i &lt; be16_to_cpu(t-&gt;act_cnt));</span></a>
-<a name="373"><span class="lineNum"> 373 </span> : : </a>
-<a name="374"><span class="lineNum"> 374 </span> :<span class="lineNoCov"> 0 : hdif = base + i * be32_to_cpu(t-&gt;alloc_len);</span></a>
-<a name="375"><span class="lineNum"> 375 </span> :<span class="lineNoCov"> 0 : assert(hdif);</span></a>
-<a name="376"><span class="lineNum"> 376 </span> : : </a>
-<a name="377"><span class="lineNum"> 377 </span> :<span class="lineNoCov"> 0 : if (idata_index == GET_HDIF_HDR)</span></a>
-<a name="378"><span class="lineNum"> 378 </span> :<span class="lineNoCov"> 0 : return hdif;</span></a>
-<a name="379"><span class="lineNum"> 379 </span> : : </a>
-<a name="380"><span class="lineNum"> 380 </span> :<span class="lineNoCov"> 0 : idata = HDIF_get_idata(hdif, idata_index, &amp;size);</span></a>
-<a name="381"><span class="lineNum"> 381 </span> :<span class="lineNoCov"> 0 : if (!idata || !size)</span></a>
-<a name="382"><span class="lineNum"> 382 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="383"><span class="lineNum"> 383 </span> : : </a>
-<a name="384"><span class="lineNum"> 384 </span> :<span class="lineNoCov"> 0 : return idata;</span></a>
-<a name="385"><span class="lineNum"> 385 </span> : : }</a>
-<a name="386"><span class="lineNum"> 386 </span> : : </a>
-<a name="387"><span class="lineNum"> 387 </span> :<span class="lineCov"> 18 : struct dt_node *find_xscom_for_chip(uint32_t chip_id)</span></a>
-<a name="388"><span class="lineNum"> 388 </span> : : {</a>
-<a name="389"><span class="lineNum"> 389 </span> : : struct dt_node *node;</a>
-<a name="390"><span class="lineNum"> 390 </span> : : uint32_t id;</a>
-<a name="391"><span class="lineNum"> 391 </span> : : </a>
-<a name="392"><span class="lineNum"> 392 </span> :<span class="lineCov"> 39 : dt_for_each_compatible(dt_root, node, &quot;ibm,xscom&quot;) {</span></a>
-<a name="393"><span class="lineNum"> 393 </span> :<span class="lineCov"> 39 : id = dt_get_chip_id(node);</span></a>
-<a name="394"><span class="lineNum"> 394 </span> :<span class="lineCov"> 39 : if (id == chip_id)</span></a>
-<a name="395"><span class="lineNum"> 395 </span> :<span class="lineCov"> 18 : return node;</span></a>
-<a name="396"><span class="lineNum"> 396 </span> : : }</a>
-<a name="397"><span class="lineNum"> 397 </span> : : </a>
-<a name="398"><span class="lineNum"> 398 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="399"><span class="lineNum"> 399 </span> : : }</a>
-<a name="400"><span class="lineNum"> 400 </span> : : </a>
-<a name="401"><span class="lineNum"> 401 </span> :<span class="lineCov"> 6 : static void add_psihb_node(struct dt_node *np)</span></a>
-<a name="402"><span class="lineNum"> 402 </span> : : {</a>
-<a name="403"><span class="lineNum"> 403 </span> : : u32 psi_scom, psi_slen;</a>
-<a name="404"><span class="lineNum"> 404 </span> : : const char *psi_comp;</a>
-<a name="405"><span class="lineNum"> 405 </span> : : </a>
-<a name="406"><span class="lineNum"> 406 </span> : : /*</a>
-<a name="407"><span class="lineNum"> 407 </span> : : * We add a few things under XSCOM that aren't added</a>
-<a name="408"><span class="lineNum"> 408 </span> : : * by any other HDAT path</a>
-<a name="409"><span class="lineNum"> 409 </span> : : */</a>
-<a name="410"><span class="lineNum"> 410 </span> : : </a>
-<a name="411"><span class="lineNum"> 411 </span> : : /* PSI host bridge */</a>
-<a name="412"><span class="lineNum"> 412 </span> :<span class="lineCov"> 6 : switch(proc_gen) {</span></a>
-<a name="413"><span class="lineNum"> 413 </span> :<span class="lineCov"> 6 : case proc_gen_p8:</span></a>
-<a name="414"><span class="lineNum"> 414 </span> :<span class="lineCov"> 6 : psi_scom = 0x2010900;</span></a>
-<a name="415"><span class="lineNum"> 415 </span> :<span class="lineCov"> 6 : psi_slen = 0x20;</span></a>
-<a name="416"><span class="lineNum"> 416 </span> :<span class="lineCov"> 6 : psi_comp = &quot;ibm,power8-psihb-x&quot;;</span></a>
-<a name="417"><span class="lineNum"> 417 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="418"><span class="lineNum"> 418 </span> :<span class="lineNoCov"> 0 : case proc_gen_p9:</span></a>
-<a name="419"><span class="lineNum"> 419 </span> :<span class="lineNoCov"> 0 : psi_scom = 0x5012900;</span></a>
-<a name="420"><span class="lineNum"> 420 </span> :<span class="lineNoCov"> 0 : psi_slen = 0x100;</span></a>
-<a name="421"><span class="lineNum"> 421 </span> :<span class="lineNoCov"> 0 : psi_comp = &quot;ibm,power9-psihb-x&quot;;</span></a>
-<a name="422"><span class="lineNum"> 422 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="423"><span class="lineNum"> 423 </span> :<span class="lineNoCov"> 0 : default:</span></a>
-<a name="424"><span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : psi_comp = NULL;</span></a>
-<a name="425"><span class="lineNum"> 425 </span> : : }</a>
-<a name="426"><span class="lineNum"> 426 </span> :<span class="lineCov"> 6 : if (psi_comp) {</span></a>
-<a name="427"><span class="lineNum"> 427 </span> : : struct dt_node *psi_np;</a>
-<a name="428"><span class="lineNum"> 428 </span> : : </a>
-<a name="429"><span class="lineNum"> 429 </span> :<span class="lineCov"> 6 : psi_np = dt_new_addr(np, &quot;psihb&quot;, psi_scom);</span></a>
-<a name="430"><span class="lineNum"> 430 </span> :<span class="lineCov"> 6 : if (!psi_np)</span></a>
-<a name="431"><span class="lineNum"> 431 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="432"><span class="lineNum"> 432 </span> : : </a>
-<a name="433"><span class="lineNum"> 433 </span> :<span class="lineCov"> 6 : dt_add_property_cells(psi_np, &quot;reg&quot;, psi_scom, psi_slen);</span></a>
-<a name="434"><span class="lineNum"> 434 </span> :<span class="lineCov"> 6 : dt_add_property_strings(psi_np, &quot;compatible&quot;, psi_comp,</span></a>
-<a name="435"><span class="lineNum"> 435 </span> : : &quot;ibm,psihb-x&quot;);</a>
-<a name="436"><span class="lineNum"> 436 </span> : : }</a>
-<a name="437"><span class="lineNum"> 437 </span> : : }</a>
-<a name="438"><span class="lineNum"> 438 </span> : : </a>
-<a name="439"><span class="lineNum"> 439 </span> :<span class="lineNoCov"> 0 : static void add_xive_node(struct dt_node *np)</span></a>
-<a name="440"><span class="lineNum"> 440 </span> : : {</a>
-<a name="441"><span class="lineNum"> 441 </span> :<span class="lineNoCov"> 0 : struct dt_node *xive = dt_new_addr(np, &quot;xive&quot;, 0x5013000);</span></a>
-<a name="442"><span class="lineNum"> 442 </span> : : </a>
-<a name="443"><span class="lineNum"> 443 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(xive, &quot;reg&quot;, 0x5013000, 0x300);</span></a>
-<a name="444"><span class="lineNum"> 444 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(xive, &quot;compatible&quot;, &quot;ibm,power9-xive-x&quot;);</span></a>
-<a name="445"><span class="lineNum"> 445 </span> : : </a>
-<a name="446"><span class="lineNum"> 446 </span> : : /* HACK: required for simics */</a>
-<a name="447"><span class="lineNum"> 447 </span> :<span class="lineNoCov"> 0 : dt_add_property(xive, &quot;force-assign-bars&quot;, NULL, 0);</span></a>
-<a name="448"><span class="lineNum"> 448 </span> :<span class="lineNoCov"> 0 : }</span></a>
-<a name="449"><span class="lineNum"> 449 </span> : : </a>
-<a name="450"><span class="lineNum"> 450 </span> : : /*</a>
-<a name="451"><span class="lineNum"> 451 </span> : : * SCOM Base Address from P9 SCOM Assignment spreadsheet</a>
-<a name="452"><span class="lineNum"> 452 </span> : : */</a>
-<a name="453"><span class="lineNum"> 453 </span> : : #define VAS_SCOM_BASE_ADDR 0x03011800</a>
-<a name="454"><span class="lineNum"> 454 </span> : : </a>
-<a name="455"><span class="lineNum"> 455 </span> :<span class="lineNoCov"> 0 : static void add_vas_node(struct dt_node *np, int idx)</span></a>
-<a name="456"><span class="lineNum"> 456 </span> : : {</a>
-<a name="457"><span class="lineNum"> 457 </span> :<span class="lineNoCov"> 0 : struct dt_node *vas = dt_new_addr(np, &quot;vas&quot;, VAS_SCOM_BASE_ADDR);</span></a>
-<a name="458"><span class="lineNum"> 458 </span> : : </a>
-<a name="459"><span class="lineNum"> 459 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(vas, &quot;reg&quot;, VAS_SCOM_BASE_ADDR, 0x300);</span></a>
-<a name="460"><span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(vas, &quot;compatible&quot;, &quot;ibm,power9-vas-x&quot;);</span></a>
-<a name="461"><span class="lineNum"> 461 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(vas, &quot;ibm,vas-id&quot;, idx);</span></a>
-<a name="462"><span class="lineNum"> 462 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="294"><span class="lineNum"> 294 </span> :<span class="lineCov"> 103 : if (proc_gen &lt;= proc_gen_p9)</span></a>
+<a name="295"><span class="lineNum"> 295 </span> :<span class="lineCov"> 103 : return be32_to_cpu(cinfo-&gt;xscom_id);</span></a>
+<a name="296"><span class="lineNum"> 296 </span> : : </a>
+<a name="297"><span class="lineNum"> 297 </span> : : /* On P10 use Processor fabric topology id for chip id */</a>
+<a name="298"><span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : return (uint32_t)(cinfo-&gt;fab_topology_id);</span></a>
+<a name="299"><span class="lineNum"> 299 </span> : : }</a>
+<a name="300"><span class="lineNum"> 300 </span> : : </a>
+<a name="301"><span class="lineNum"> 301 </span> :<span class="lineCov"> 6 : static struct dt_node *add_xscom_node(uint64_t base,</span></a>
+<a name="302"><span class="lineNum"> 302 </span> : : const struct sppcrd_chip_info *cinfo)</a>
+<a name="303"><span class="lineNum"> 303 </span> : : {</a>
+<a name="304"><span class="lineNum"> 304 </span> : : struct dt_node *node;</a>
+<a name="305"><span class="lineNum"> 305 </span> : : uint64_t addr, size;</a>
+<a name="306"><span class="lineNum"> 306 </span> : : uint64_t freq;</a>
+<a name="307"><span class="lineNum"> 307 </span> :<span class="lineCov"> 6 : uint32_t hw_id = get_xscom_id(cinfo);</span></a>
+<a name="308"><span class="lineNum"> 308 </span> :<span class="lineCov"> 6 : uint32_t proc_chip_id = be32_to_cpu(cinfo-&gt;proc_chip_id);</span></a>
+<a name="309"><span class="lineNum"> 309 </span> : : </a>
+<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 6 : switch (proc_gen) {</span></a>
+<a name="311"><span class="lineNum"> 311 </span> :<span class="lineCov"> 6 : case proc_gen_p8:</span></a>
+<a name="312"><span class="lineNum"> 312 </span> : : /* On P8 all the chip SCOMs share single region */</a>
+<a name="313"><span class="lineNum"> 313 </span> :<span class="lineCov"> 6 : addr = base | ((uint64_t)hw_id &lt;&lt; PPC_BITLSHIFT(28));</span></a>
+<a name="314"><span class="lineNum"> 314 </span> :<span class="lineCov"> 6 : break;</span></a>
+<a name="315"><span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : case proc_gen_p9:</span></a>
+<a name="316"><span class="lineNum"> 316 </span> : : /* On P9 we need to put the chip ID in the natural powerbus</a>
+<a name="317"><span class="lineNum"> 317 </span> : : * position.</a>
+<a name="318"><span class="lineNum"> 318 </span> : : */</a>
+<a name="319"><span class="lineNum"> 319 </span> :<span class="lineNoCov"> 0 : addr = base | (((uint64_t)hw_id) &lt;&lt; 42);</span></a>
+<a name="320"><span class="lineNum"> 320 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="321"><span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : case proc_gen_p10:</span></a>
+<a name="322"><span class="lineNum"> 322 </span> : : default:</a>
+<a name="323"><span class="lineNum"> 323 </span> : : /* Use Primary topology table index for xscom address */</a>
+<a name="324"><span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : addr = base | (((uint64_t)cinfo-&gt;topology_id_table[cinfo-&gt;primary_topology_loc]) &lt;&lt; 44);</span></a>
+<a name="325"><span class="lineNum"> 325 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="326"><span class="lineNum"> 326 </span> : : };</a>
+<a name="327"><span class="lineNum"> 327 </span> : : </a>
+<a name="328"><span class="lineNum"> 328 </span> :<span class="lineCov"> 6 : size = (u64)1 &lt;&lt; PPC_BITLSHIFT(28);</span></a>
+<a name="329"><span class="lineNum"> 329 </span> : : </a>
+<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 6 : prlog(PR_INFO, &quot;XSCOM: Found HW ID 0x%x (PCID 0x%x) @ 0x%llx\n&quot;,</span></a>
+<a name="331"><span class="lineNum"> 331 </span> : : hw_id, proc_chip_id, (long long)addr);</a>
+<a name="332"><span class="lineNum"> 332 </span> : : </a>
+<a name="333"><span class="lineNum"> 333 </span> :<span class="lineCov"> 6 : node = dt_new_addr(dt_root, &quot;xscom&quot;, addr);</span></a>
+<a name="334"><span class="lineNum"> 334 </span> :<span class="lineCov"> 6 : assert(node);</span></a>
+<a name="335"><span class="lineNum"> 335 </span> : : </a>
+<a name="336"><span class="lineNum"> 336 </span> :<span class="lineCov"> 6 : dt_add_property_cells(node, &quot;ibm,chip-id&quot;, hw_id);</span></a>
+<a name="337"><span class="lineNum"> 337 </span> :<span class="lineCov"> 6 : dt_add_property_cells(node, &quot;ibm,proc-chip-id&quot;, proc_chip_id);</span></a>
+<a name="338"><span class="lineNum"> 338 </span> :<span class="lineCov"> 6 : dt_add_property_cells(node, &quot;#address-cells&quot;, 1);</span></a>
+<a name="339"><span class="lineNum"> 339 </span> :<span class="lineCov"> 6 : dt_add_property_cells(node, &quot;#size-cells&quot;, 1);</span></a>
+<a name="340"><span class="lineNum"> 340 </span> :<span class="lineCov"> 6 : dt_add_property(node, &quot;scom-controller&quot;, NULL, 0);</span></a>
+<a name="341"><span class="lineNum"> 341 </span> : : </a>
+<a name="342"><span class="lineNum"> 342 </span> :<span class="lineCov"> 6 : switch(proc_gen) {</span></a>
+<a name="343"><span class="lineNum"> 343 </span> :<span class="lineCov"> 6 : case proc_gen_p8:</span></a>
+<a name="344"><span class="lineNum"> 344 </span> :<span class="lineCov"> 6 : dt_add_property_strings(node, &quot;compatible&quot;,</span></a>
+<a name="345"><span class="lineNum"> 345 </span> : : &quot;ibm,xscom&quot;, &quot;ibm,power8-xscom&quot;);</a>
+<a name="346"><span class="lineNum"> 346 </span> :<span class="lineCov"> 6 : break;</span></a>
+<a name="347"><span class="lineNum"> 347 </span> :<span class="lineNoCov"> 0 : case proc_gen_p9:</span></a>
+<a name="348"><span class="lineNum"> 348 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(node, &quot;compatible&quot;,</span></a>
+<a name="349"><span class="lineNum"> 349 </span> : : &quot;ibm,xscom&quot;, &quot;ibm,power9-xscom&quot;);</a>
+<a name="350"><span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="351"><span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : case proc_gen_p10:</span></a>
+<a name="352"><span class="lineNum"> 352 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(node, &quot;compatible&quot;,</span></a>
+<a name="353"><span class="lineNum"> 353 </span> : : &quot;ibm,xscom&quot;, &quot;ibm,power10-xscom&quot;);</a>
+<a name="354"><span class="lineNum"> 354 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="355"><span class="lineNum"> 355 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="356"><span class="lineNum"> 356 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(node, &quot;compatible&quot;, &quot;ibm,xscom&quot;);</span></a>
+<a name="357"><span class="lineNum"> 357 </span> : : }</a>
+<a name="358"><span class="lineNum"> 358 </span> :<span class="lineCov"> 6 : dt_add_property_u64s(node, &quot;reg&quot;, addr, size);</span></a>
+<a name="359"><span class="lineNum"> 359 </span> : : </a>
+<a name="360"><span class="lineNum"> 360 </span> : : /*</a>
+<a name="361"><span class="lineNum"> 361 </span> : : * The bus-frequency of the xscom node is actually the PIB/PCB</a>
+<a name="362"><span class="lineNum"> 362 </span> : : * frequency. It is derived from the nest-clock via a 4:1 divider</a>
+<a name="363"><span class="lineNum"> 363 </span> : : */</a>
+<a name="364"><span class="lineNum"> 364 </span> :<span class="lineCov"> 6 : freq = dt_prop_get_u64_def(dt_root, &quot;nest-frequency&quot;, 0);</span></a>
+<a name="365"><span class="lineNum"> 365 </span> :<span class="lineCov"> 6 : freq /= 4;</span></a>
+<a name="366"><span class="lineNum"> 366 </span> :<span class="lineCov"> 6 : if (freq)</span></a>
+<a name="367"><span class="lineNum"> 367 </span> :<span class="lineCov"> 6 : dt_add_property_u64(node, &quot;bus-frequency&quot;, freq);</span></a>
+<a name="368"><span class="lineNum"> 368 </span> : : </a>
+<a name="369"><span class="lineNum"> 369 </span> :<span class="lineCov"> 6 : return node;</span></a>
+<a name="370"><span class="lineNum"> 370 </span> : : }</a>
+<a name="371"><span class="lineNum"> 371 </span> : : </a>
+<a name="372"><span class="lineNum"> 372 </span> : : /*</a>
+<a name="373"><span class="lineNum"> 373 </span> : : * Given a xscom@ node this will return a pointer into the SPPCRD</a>
+<a name="374"><span class="lineNum"> 374 </span> : : * structure corresponding to that node</a>
+<a name="375"><span class="lineNum"> 375 </span> : : */</a>
+<a name="376"><span class="lineNum"> 376 </span> : : #define GET_HDIF_HDR -1</a>
+<a name="377"><span class="lineNum"> 377 </span> :<span class="lineNoCov"> 0 : static const void *xscom_to_pcrd(struct dt_node *xscom, int idata_index)</span></a>
+<a name="378"><span class="lineNum"> 378 </span> : : {</a>
+<a name="379"><span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : struct spira_ntuple *t = &amp;spira.ntuples.proc_chip;</span></a>
+<a name="380"><span class="lineNum"> 380 </span> : : const struct HDIF_common_hdr *hdif;</a>
+<a name="381"><span class="lineNum"> 381 </span> : : const void *idata;</a>
+<a name="382"><span class="lineNum"> 382 </span> : : unsigned int size;</a>
+<a name="383"><span class="lineNum"> 383 </span> : : uint32_t i;</a>
+<a name="384"><span class="lineNum"> 384 </span> : : void *base;</a>
+<a name="385"><span class="lineNum"> 385 </span> : : </a>
+<a name="386"><span class="lineNum"> 386 </span> :<span class="lineNoCov"> 0 : i = dt_prop_get_u32_def(xscom, DT_PRIVATE &quot;sppcrd-index&quot;, 0xffffffff);</span></a>
+<a name="387"><span class="lineNum"> 387 </span> :<span class="lineNoCov"> 0 : if (i == 0xffffffff)</span></a>
+<a name="388"><span class="lineNum"> 388 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="389"><span class="lineNum"> 389 </span> : : </a>
+<a name="390"><span class="lineNum"> 390 </span> :<span class="lineNoCov"> 0 : base = get_hdif(t, &quot;SPPCRD&quot;);</span></a>
+<a name="391"><span class="lineNum"> 391 </span> :<span class="lineNoCov"> 0 : assert(base);</span></a>
+<a name="392"><span class="lineNum"> 392 </span> :<span class="lineNoCov"> 0 : assert(i &lt; be16_to_cpu(t-&gt;act_cnt));</span></a>
+<a name="393"><span class="lineNum"> 393 </span> : : </a>
+<a name="394"><span class="lineNum"> 394 </span> :<span class="lineNoCov"> 0 : hdif = base + i * be32_to_cpu(t-&gt;alloc_len);</span></a>
+<a name="395"><span class="lineNum"> 395 </span> :<span class="lineNoCov"> 0 : assert(hdif);</span></a>
+<a name="396"><span class="lineNum"> 396 </span> : : </a>
+<a name="397"><span class="lineNum"> 397 </span> :<span class="lineNoCov"> 0 : if (idata_index == GET_HDIF_HDR)</span></a>
+<a name="398"><span class="lineNum"> 398 </span> :<span class="lineNoCov"> 0 : return hdif;</span></a>
+<a name="399"><span class="lineNum"> 399 </span> : : </a>
+<a name="400"><span class="lineNum"> 400 </span> :<span class="lineNoCov"> 0 : idata = HDIF_get_idata(hdif, idata_index, &amp;size);</span></a>
+<a name="401"><span class="lineNum"> 401 </span> :<span class="lineNoCov"> 0 : if (!idata || !size)</span></a>
+<a name="402"><span class="lineNum"> 402 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="403"><span class="lineNum"> 403 </span> : : </a>
+<a name="404"><span class="lineNum"> 404 </span> :<span class="lineNoCov"> 0 : return idata;</span></a>
+<a name="405"><span class="lineNum"> 405 </span> : : }</a>
+<a name="406"><span class="lineNum"> 406 </span> : : </a>
+<a name="407"><span class="lineNum"> 407 </span> :<span class="lineCov"> 18 : struct dt_node *find_xscom_for_chip(uint32_t chip_id)</span></a>
+<a name="408"><span class="lineNum"> 408 </span> : : {</a>
+<a name="409"><span class="lineNum"> 409 </span> : : struct dt_node *node;</a>
+<a name="410"><span class="lineNum"> 410 </span> : : uint32_t id;</a>
+<a name="411"><span class="lineNum"> 411 </span> : : </a>
+<a name="412"><span class="lineNum"> 412 </span> :<span class="lineCov"> 39 : dt_for_each_compatible(dt_root, node, &quot;ibm,xscom&quot;) {</span></a>
+<a name="413"><span class="lineNum"> 413 </span> :<span class="lineCov"> 39 : id = dt_get_chip_id(node);</span></a>
+<a name="414"><span class="lineNum"> 414 </span> :<span class="lineCov"> 39 : if (id == chip_id)</span></a>
+<a name="415"><span class="lineNum"> 415 </span> :<span class="lineCov"> 18 : return node;</span></a>
+<a name="416"><span class="lineNum"> 416 </span> : : }</a>
+<a name="417"><span class="lineNum"> 417 </span> : : </a>
+<a name="418"><span class="lineNum"> 418 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="419"><span class="lineNum"> 419 </span> : : }</a>
+<a name="420"><span class="lineNum"> 420 </span> : : </a>
+<a name="421"><span class="lineNum"> 421 </span> :<span class="lineCov"> 6 : static void add_psihb_node(struct dt_node *np)</span></a>
+<a name="422"><span class="lineNum"> 422 </span> : : {</a>
+<a name="423"><span class="lineNum"> 423 </span> : : u32 psi_scom, psi_slen;</a>
+<a name="424"><span class="lineNum"> 424 </span> : : const char *psi_comp;</a>
+<a name="425"><span class="lineNum"> 425 </span> : : </a>
+<a name="426"><span class="lineNum"> 426 </span> : : /*</a>
+<a name="427"><span class="lineNum"> 427 </span> : : * We add a few things under XSCOM that aren't added</a>
+<a name="428"><span class="lineNum"> 428 </span> : : * by any other HDAT path</a>
+<a name="429"><span class="lineNum"> 429 </span> : : */</a>
+<a name="430"><span class="lineNum"> 430 </span> : : </a>
+<a name="431"><span class="lineNum"> 431 </span> : : /* PSI host bridge */</a>
+<a name="432"><span class="lineNum"> 432 </span> :<span class="lineCov"> 6 : switch(proc_gen) {</span></a>
+<a name="433"><span class="lineNum"> 433 </span> :<span class="lineCov"> 6 : case proc_gen_p8:</span></a>
+<a name="434"><span class="lineNum"> 434 </span> :<span class="lineCov"> 6 : psi_scom = 0x2010900;</span></a>
+<a name="435"><span class="lineNum"> 435 </span> :<span class="lineCov"> 6 : psi_slen = 0x20;</span></a>
+<a name="436"><span class="lineNum"> 436 </span> :<span class="lineCov"> 6 : psi_comp = &quot;ibm,power8-psihb-x&quot;;</span></a>
+<a name="437"><span class="lineNum"> 437 </span> :<span class="lineCov"> 6 : break;</span></a>
+<a name="438"><span class="lineNum"> 438 </span> :<span class="lineNoCov"> 0 : case proc_gen_p9:</span></a>
+<a name="439"><span class="lineNum"> 439 </span> :<span class="lineNoCov"> 0 : psi_scom = 0x5012900;</span></a>
+<a name="440"><span class="lineNum"> 440 </span> :<span class="lineNoCov"> 0 : psi_slen = 0x100;</span></a>
+<a name="441"><span class="lineNum"> 441 </span> :<span class="lineNoCov"> 0 : psi_comp = &quot;ibm,power9-psihb-x&quot;;</span></a>
+<a name="442"><span class="lineNum"> 442 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="443"><span class="lineNum"> 443 </span> :<span class="lineNoCov"> 0 : case proc_gen_p10:</span></a>
+<a name="444"><span class="lineNum"> 444 </span> :<span class="lineNoCov"> 0 : psi_scom = 0x3011d00;</span></a>
+<a name="445"><span class="lineNum"> 445 </span> :<span class="lineNoCov"> 0 : psi_slen = 0x100;</span></a>
+<a name="446"><span class="lineNum"> 446 </span> :<span class="lineNoCov"> 0 : psi_comp = &quot;ibm,power10-psihb-x&quot;;</span></a>
+<a name="447"><span class="lineNum"> 447 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="448"><span class="lineNum"> 448 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="449"><span class="lineNum"> 449 </span> :<span class="lineNoCov"> 0 : psi_comp = NULL;</span></a>
+<a name="450"><span class="lineNum"> 450 </span> : : }</a>
+<a name="451"><span class="lineNum"> 451 </span> :<span class="lineCov"> 6 : if (psi_comp) {</span></a>
+<a name="452"><span class="lineNum"> 452 </span> : : struct dt_node *psi_np;</a>
+<a name="453"><span class="lineNum"> 453 </span> : : </a>
+<a name="454"><span class="lineNum"> 454 </span> :<span class="lineCov"> 6 : psi_np = dt_new_addr(np, &quot;psihb&quot;, psi_scom);</span></a>
+<a name="455"><span class="lineNum"> 455 </span> :<span class="lineCov"> 6 : if (!psi_np)</span></a>
+<a name="456"><span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="457"><span class="lineNum"> 457 </span> : : </a>
+<a name="458"><span class="lineNum"> 458 </span> :<span class="lineCov"> 6 : dt_add_property_cells(psi_np, &quot;reg&quot;, psi_scom, psi_slen);</span></a>
+<a name="459"><span class="lineNum"> 459 </span> :<span class="lineCov"> 6 : dt_add_property_strings(psi_np, &quot;compatible&quot;, psi_comp,</span></a>
+<a name="460"><span class="lineNum"> 460 </span> : : &quot;ibm,psihb-x&quot;);</a>
+<a name="461"><span class="lineNum"> 461 </span> : : }</a>
+<a name="462"><span class="lineNum"> 462 </span> : : }</a>
<a name="463"><span class="lineNum"> 463 </span> : : </a>
-<a name="464"><span class="lineNum"> 464 </span> :<span class="lineNoCov"> 0 : static void add_ecid_data(const struct HDIF_common_hdr *hdr,</span></a>
-<a name="465"><span class="lineNum"> 465 </span> : : struct dt_node *xscom)</a>
-<a name="466"><span class="lineNum"> 466 </span> : : {</a>
-<a name="467"><span class="lineNum"> 467 </span> : : char wafer_id[11];</a>
-<a name="468"><span class="lineNum"> 468 </span> : : uint8_t tmp;</a>
-<a name="469"><span class="lineNum"> 469 </span> : : int i;</a>
-<a name="470"><span class="lineNum"> 470 </span> :<span class="lineNoCov"> 0 : uint32_t size = 0;</span></a>
-<a name="471"><span class="lineNum"> 471 </span> : : struct sppcrd_ecid *ecid;</a>
-<a name="472"><span class="lineNum"> 472 </span> : : const struct HDIF_array_hdr *ec_hdr;</a>
-<a name="473"><span class="lineNum"> 473 </span> : : </a>
-<a name="474"><span class="lineNum"> 474 </span> :<span class="lineNoCov"> 0 : ec_hdr = HDIF_get_idata(hdr, SPPCRD_IDATA_EC_LEVEL, &amp;size);</span></a>
-<a name="475"><span class="lineNum"> 475 </span> :<span class="lineNoCov"> 0 : if (!ec_hdr || !size)</span></a>
-<a name="476"><span class="lineNum"> 476 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="477"><span class="lineNum"> 477 </span> : : </a>
-<a name="478"><span class="lineNum"> 478 </span> :<span class="lineNoCov"> 0 : ecid = (void *)ec_hdr + be32_to_cpu(ec_hdr-&gt;offset);</span></a>
-<a name="479"><span class="lineNum"> 479 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64s(xscom, &quot;ecid&quot;, be64_to_cpu(ecid-&gt;low),</span></a>
-<a name="480"><span class="lineNum"> 480 </span> : : be64_to_cpu(ecid-&gt;high));</a>
-<a name="481"><span class="lineNum"> 481 </span> : : </a>
-<a name="482"><span class="lineNum"> 482 </span> : : /*</a>
-<a name="483"><span class="lineNum"> 483 </span> : : * bits 4:63 of ECID data contains wafter ID data (ten 6 bit fields</a>
-<a name="484"><span class="lineNum"> 484 </span> : : * each containing a code).</a>
-<a name="485"><span class="lineNum"> 485 </span> : : */</a>
-<a name="486"><span class="lineNum"> 486 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; 10; i++) {</span></a>
-<a name="487"><span class="lineNum"> 487 </span> :<span class="lineNoCov"> 0 : tmp = (u8)((be64_to_cpu(ecid-&gt;low) &gt;&gt; (i * 6)) &amp; 0x3f);</span></a>
-<a name="488"><span class="lineNum"> 488 </span> :<span class="lineNoCov"> 0 : if (tmp &lt;= 9)</span></a>
-<a name="489"><span class="lineNum"> 489 </span> :<span class="lineNoCov"> 0 : wafer_id[9 - i] = tmp + '0';</span></a>
-<a name="490"><span class="lineNum"> 490 </span> :<span class="lineNoCov"> 0 : else if (tmp &gt;= 0xA &amp;&amp; tmp &lt;= 0x23)</span></a>
-<a name="491"><span class="lineNum"> 491 </span> :<span class="lineNoCov"> 0 : wafer_id[9 - i] = tmp + '0' + 7;</span></a>
-<a name="492"><span class="lineNum"> 492 </span> :<span class="lineNoCov"> 0 : else if (tmp == 0x3D)</span></a>
-<a name="493"><span class="lineNum"> 493 </span> :<span class="lineNoCov"> 0 : wafer_id[9 - i] = '-';</span></a>
-<a name="494"><span class="lineNum"> 494 </span> :<span class="lineNoCov"> 0 : else if (tmp == 0x3E)</span></a>
-<a name="495"><span class="lineNum"> 495 </span> :<span class="lineNoCov"> 0 : wafer_id[9 - i] = '.';</span></a>
-<a name="496"><span class="lineNum"> 496 </span> :<span class="lineNoCov"> 0 : else if (tmp == 0x3F)</span></a>
-<a name="497"><span class="lineNum"> 497 </span> :<span class="lineNoCov"> 0 : wafer_id[9 - i] = ' ';</span></a>
-<a name="498"><span class="lineNum"> 498 </span> : : else /* Unknown code */</a>
-<a name="499"><span class="lineNum"> 499 </span> :<span class="lineNoCov"> 0 : wafer_id[9 - i] = tmp + '0';</span></a>
-<a name="500"><span class="lineNum"> 500 </span> : : }</a>
-<a name="501"><span class="lineNum"> 501 </span> :<span class="lineNoCov"> 0 : wafer_id[10] = '\0';</span></a>
-<a name="502"><span class="lineNum"> 502 </span> :<span class="lineNoCov"> 0 : dt_add_property_nstr(xscom, &quot;wafer-id&quot;, wafer_id, 10);</span></a>
-<a name="503"><span class="lineNum"> 503 </span> : : </a>
-<a name="504"><span class="lineNum"> 504 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(xscom, &quot;wafer-location&quot;,</span></a>
-<a name="505"><span class="lineNum"> 505 </span> : : (u32)((be64_to_cpu(ecid-&gt;high) &gt;&gt; 56) &amp; 0xff),</a>
-<a name="506"><span class="lineNum"> 506 </span> : : (u32)((be64_to_cpu(ecid-&gt;high) &gt;&gt; 48) &amp; 0xff));</a>
-<a name="507"><span class="lineNum"> 507 </span> : : }</a>
-<a name="508"><span class="lineNum"> 508 </span> : : </a>
-<a name="509"><span class="lineNum"> 509 </span> :<span class="lineCov"> 6 : static void add_xscom_add_pcia_assoc(struct dt_node *np, uint32_t pcid)</span></a>
-<a name="510"><span class="lineNum"> 510 </span> : : {</a>
-<a name="511"><span class="lineNum"> 511 </span> : : const struct HDIF_common_hdr *hdr;</a>
-<a name="512"><span class="lineNum"> 512 </span> : : u32 size;</a>
-<a name="513"><span class="lineNum"> 513 </span> : : </a>
-<a name="514"><span class="lineNum"> 514 </span> : : </a>
-<a name="515"><span class="lineNum"> 515 </span> : : /*</a>
-<a name="516"><span class="lineNum"> 516 </span> : : * The SPPCRD doesn't contain all the affinity data, we have</a>
-<a name="517"><span class="lineNum"> 517 </span> : : * to dig it out of a core. I assume this is so that node</a>
-<a name="518"><span class="lineNum"> 518 </span> : : * affinity can be different for groups of cores within the</a>
-<a name="519"><span class="lineNum"> 519 </span> : : * chip, but for now we are going to ignore that</a>
-<a name="520"><span class="lineNum"> 520 </span> : : */</a>
-<a name="521"><span class="lineNum"> 521 </span> :<span class="lineCov"> 6 : hdr = get_hdif(&amp;spira.ntuples.pcia, SPPCIA_HDIF_SIG);</span></a>
-<a name="522"><span class="lineNum"> 522 </span> :<span class="lineCov"> 6 : if (!hdr)</span></a>
-<a name="523"><span class="lineNum"> 523 </span> :<span class="lineCov"> 6 : return;</span></a>
-<a name="524"><span class="lineNum"> 524 </span> : : </a>
-<a name="525"><span class="lineNum"> 525 </span> :<span class="lineCov"> 39 : for_each_pcia(hdr) {</span></a>
-<a name="526"><span class="lineNum"> 526 </span> : : const struct sppcia_core_unique *id;</a>
-<a name="527"><span class="lineNum"> 527 </span> : : </a>
-<a name="528"><span class="lineNum"> 528 </span> :<span class="lineCov"> 39 : id = HDIF_get_idata(hdr, SPPCIA_IDATA_CORE_UNIQUE, &amp;size);</span></a>
-<a name="529"><span class="lineNum"> 529 </span> :<span class="lineCov"> 39 : if (!id || size &lt; sizeof(*id))</span></a>
-<a name="530"><span class="lineNum"> 530 </span> :<span class="lineCov"> 33 : continue;</span></a>
-<a name="531"><span class="lineNum"> 531 </span> : : </a>
-<a name="532"><span class="lineNum"> 532 </span> :<span class="lineCov"> 39 : if (be32_to_cpu(id-&gt;proc_chip_id) != pcid)</span></a>
-<a name="533"><span class="lineNum"> 533 </span> :<span class="lineCov"> 33 : continue;</span></a>
-<a name="534"><span class="lineNum"> 534 </span> : : </a>
-<a name="535"><span class="lineNum"> 535 </span> :<span class="lineCov"> 6 : dt_add_property_cells(np, &quot;ibm,ccm-node-id&quot;,</span></a>
-<a name="536"><span class="lineNum"> 536 </span> : : be32_to_cpu(id-&gt;ccm_node_id));</a>
-<a name="537"><span class="lineNum"> 537 </span> :<span class="lineCov"> 6 : dt_add_property_cells(np, &quot;ibm,hw-card-id&quot;,</span></a>
-<a name="538"><span class="lineNum"> 538 </span> : : be32_to_cpu(id-&gt;hw_card_id));</a>
-<a name="539"><span class="lineNum"> 539 </span> :<span class="lineCov"> 6 : dt_add_property_cells(np, &quot;ibm,hw-module-id&quot;,</span></a>
-<a name="540"><span class="lineNum"> 540 </span> : : be32_to_cpu(id-&gt;hw_module_id));</a>
-<a name="541"><span class="lineNum"> 541 </span> :<span class="lineCov"> 6 : if (!dt_find_property(np, &quot;ibm,dbob-id&quot;))</span></a>
-<a name="542"><span class="lineNum"> 542 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(np, &quot;ibm,dbob-id&quot;,</span></a>
-<a name="543"><span class="lineNum"> 543 </span> : : be32_to_cpu(id-&gt;drawer_book_octant_blade_id));</a>
-<a name="544"><span class="lineNum"> 544 </span> :<span class="lineCov"> 6 : if (proc_gen &lt; proc_gen_p9) {</span></a>
-<a name="545"><span class="lineNum"> 545 </span> :<span class="lineCov"> 6 : dt_add_property_cells(np, &quot;ibm,mem-interleave-scope&quot;,</span></a>
-<a name="546"><span class="lineNum"> 546 </span> : : be32_to_cpu(id-&gt;memory_interleaving_scope));</a>
-<a name="547"><span class="lineNum"> 547 </span> : : }</a>
-<a name="548"><span class="lineNum"> 548 </span> :<span class="lineCov"> 6 : return;</span></a>
+<a name="464"><span class="lineNum"> 464 </span> :<span class="lineNoCov"> 0 : static void add_xive_node(struct dt_node *np)</span></a>
+<a name="465"><span class="lineNum"> 465 </span> : : {</a>
+<a name="466"><span class="lineNum"> 466 </span> : : struct dt_node *xive;</a>
+<a name="467"><span class="lineNum"> 467 </span> : : const char *comp;</a>
+<a name="468"><span class="lineNum"> 468 </span> : : u32 scom, slen;</a>
+<a name="469"><span class="lineNum"> 469 </span> : : </a>
+<a name="470"><span class="lineNum"> 470 </span> :<span class="lineNoCov"> 0 : switch (proc_gen) {</span></a>
+<a name="471"><span class="lineNum"> 471 </span> :<span class="lineNoCov"> 0 : case proc_gen_p9:</span></a>
+<a name="472"><span class="lineNum"> 472 </span> :<span class="lineNoCov"> 0 : scom = 0x5013000;</span></a>
+<a name="473"><span class="lineNum"> 473 </span> :<span class="lineNoCov"> 0 : slen = 0x300;</span></a>
+<a name="474"><span class="lineNum"> 474 </span> :<span class="lineNoCov"> 0 : comp = &quot;ibm,power9-xive-x&quot;;</span></a>
+<a name="475"><span class="lineNum"> 475 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="476"><span class="lineNum"> 476 </span> :<span class="lineNoCov"> 0 : case proc_gen_p10:</span></a>
+<a name="477"><span class="lineNum"> 477 </span> :<span class="lineNoCov"> 0 : scom = 0x2010800;</span></a>
+<a name="478"><span class="lineNum"> 478 </span> :<span class="lineNoCov"> 0 : slen = 0x400;</span></a>
+<a name="479"><span class="lineNum"> 479 </span> :<span class="lineNoCov"> 0 : comp = &quot;ibm,power10-xive-x&quot;;</span></a>
+<a name="480"><span class="lineNum"> 480 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="481"><span class="lineNum"> 481 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="482"><span class="lineNum"> 482 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="483"><span class="lineNum"> 483 </span> : : }</a>
+<a name="484"><span class="lineNum"> 484 </span> : : </a>
+<a name="485"><span class="lineNum"> 485 </span> :<span class="lineNoCov"> 0 : xive = dt_new_addr(np, &quot;xive&quot;, scom);</span></a>
+<a name="486"><span class="lineNum"> 486 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(xive, &quot;reg&quot;, scom, slen);</span></a>
+<a name="487"><span class="lineNum"> 487 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(xive, &quot;compatible&quot;, comp);</span></a>
+<a name="488"><span class="lineNum"> 488 </span> : : </a>
+<a name="489"><span class="lineNum"> 489 </span> : : /* HACK: required for simics */</a>
+<a name="490"><span class="lineNum"> 490 </span> :<span class="lineNoCov"> 0 : dt_add_property(xive, &quot;force-assign-bars&quot;, NULL, 0);</span></a>
+<a name="491"><span class="lineNum"> 491 </span> : : }</a>
+<a name="492"><span class="lineNum"> 492 </span> : : </a>
+<a name="493"><span class="lineNum"> 493 </span> :<span class="lineNoCov"> 0 : static void add_vas_node(struct dt_node *np, int idx)</span></a>
+<a name="494"><span class="lineNum"> 494 </span> : : {</a>
+<a name="495"><span class="lineNum"> 495 </span> : : struct dt_node *vas;</a>
+<a name="496"><span class="lineNum"> 496 </span> : : const char *comp;</a>
+<a name="497"><span class="lineNum"> 497 </span> : : uint64_t base_addr;</a>
+<a name="498"><span class="lineNum"> 498 </span> : : </a>
+<a name="499"><span class="lineNum"> 499 </span> :<span class="lineNoCov"> 0 : if (proc_gen == proc_gen_p9) {</span></a>
+<a name="500"><span class="lineNum"> 500 </span> :<span class="lineNoCov"> 0 : base_addr = P9_VAS_SCOM_BASE_ADDR;</span></a>
+<a name="501"><span class="lineNum"> 501 </span> :<span class="lineNoCov"> 0 : comp = &quot;ibm,power9-vas-x&quot;;</span></a>
+<a name="502"><span class="lineNum"> 502 </span> : : } else {</a>
+<a name="503"><span class="lineNum"> 503 </span> :<span class="lineNoCov"> 0 : base_addr = VAS_SCOM_BASE_ADDR;</span></a>
+<a name="504"><span class="lineNum"> 504 </span> :<span class="lineNoCov"> 0 : comp = &quot;ibm,power10-vas-x&quot;;</span></a>
+<a name="505"><span class="lineNum"> 505 </span> : : }</a>
+<a name="506"><span class="lineNum"> 506 </span> : : </a>
+<a name="507"><span class="lineNum"> 507 </span> :<span class="lineNoCov"> 0 : vas = dt_new_addr(np, &quot;vas&quot;, base_addr);</span></a>
+<a name="508"><span class="lineNum"> 508 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(vas, &quot;reg&quot;, base_addr, 0x300);</span></a>
+<a name="509"><span class="lineNum"> 509 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(vas, &quot;compatible&quot;, comp);</span></a>
+<a name="510"><span class="lineNum"> 510 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(vas, &quot;ibm,vas-id&quot;, idx);</span></a>
+<a name="511"><span class="lineNum"> 511 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="512"><span class="lineNum"> 512 </span> : : </a>
+<a name="513"><span class="lineNum"> 513 </span> :<span class="lineNoCov"> 0 : static void add_ecid_data(const struct HDIF_common_hdr *hdr,</span></a>
+<a name="514"><span class="lineNum"> 514 </span> : : struct dt_node *xscom)</a>
+<a name="515"><span class="lineNum"> 515 </span> : : {</a>
+<a name="516"><span class="lineNum"> 516 </span> : : char wafer_id[11];</a>
+<a name="517"><span class="lineNum"> 517 </span> : : uint8_t tmp;</a>
+<a name="518"><span class="lineNum"> 518 </span> : : int i;</a>
+<a name="519"><span class="lineNum"> 519 </span> :<span class="lineNoCov"> 0 : uint32_t size = 0;</span></a>
+<a name="520"><span class="lineNum"> 520 </span> : : struct sppcrd_ecid *ecid;</a>
+<a name="521"><span class="lineNum"> 521 </span> : : const struct HDIF_array_hdr *ec_hdr;</a>
+<a name="522"><span class="lineNum"> 522 </span> : : </a>
+<a name="523"><span class="lineNum"> 523 </span> :<span class="lineNoCov"> 0 : ec_hdr = HDIF_get_idata(hdr, SPPCRD_IDATA_EC_LEVEL, &amp;size);</span></a>
+<a name="524"><span class="lineNum"> 524 </span> :<span class="lineNoCov"> 0 : if (!ec_hdr || !size)</span></a>
+<a name="525"><span class="lineNum"> 525 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="526"><span class="lineNum"> 526 </span> : : </a>
+<a name="527"><span class="lineNum"> 527 </span> :<span class="lineNoCov"> 0 : ecid = (void *)ec_hdr + be32_to_cpu(ec_hdr-&gt;offset);</span></a>
+<a name="528"><span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64s(xscom, &quot;ecid&quot;, be64_to_cpu(ecid-&gt;low),</span></a>
+<a name="529"><span class="lineNum"> 529 </span> : : be64_to_cpu(ecid-&gt;high));</a>
+<a name="530"><span class="lineNum"> 530 </span> : : </a>
+<a name="531"><span class="lineNum"> 531 </span> : : /*</a>
+<a name="532"><span class="lineNum"> 532 </span> : : * bits 4:63 of ECID data contains wafter ID data (ten 6 bit fields</a>
+<a name="533"><span class="lineNum"> 533 </span> : : * each containing a code).</a>
+<a name="534"><span class="lineNum"> 534 </span> : : */</a>
+<a name="535"><span class="lineNum"> 535 </span> :<span class="lineNoCov"> 0 : for (i = 0; i &lt; 10; i++) {</span></a>
+<a name="536"><span class="lineNum"> 536 </span> :<span class="lineNoCov"> 0 : tmp = (u8)((be64_to_cpu(ecid-&gt;low) &gt;&gt; (i * 6)) &amp; 0x3f);</span></a>
+<a name="537"><span class="lineNum"> 537 </span> :<span class="lineNoCov"> 0 : if (tmp &lt;= 9)</span></a>
+<a name="538"><span class="lineNum"> 538 </span> :<span class="lineNoCov"> 0 : wafer_id[9 - i] = tmp + '0';</span></a>
+<a name="539"><span class="lineNum"> 539 </span> :<span class="lineNoCov"> 0 : else if (tmp &gt;= 0xA &amp;&amp; tmp &lt;= 0x23)</span></a>
+<a name="540"><span class="lineNum"> 540 </span> :<span class="lineNoCov"> 0 : wafer_id[9 - i] = tmp + '0' + 7;</span></a>
+<a name="541"><span class="lineNum"> 541 </span> :<span class="lineNoCov"> 0 : else if (tmp == 0x3D)</span></a>
+<a name="542"><span class="lineNum"> 542 </span> :<span class="lineNoCov"> 0 : wafer_id[9 - i] = '-';</span></a>
+<a name="543"><span class="lineNum"> 543 </span> :<span class="lineNoCov"> 0 : else if (tmp == 0x3E)</span></a>
+<a name="544"><span class="lineNum"> 544 </span> :<span class="lineNoCov"> 0 : wafer_id[9 - i] = '.';</span></a>
+<a name="545"><span class="lineNum"> 545 </span> :<span class="lineNoCov"> 0 : else if (tmp == 0x3F)</span></a>
+<a name="546"><span class="lineNum"> 546 </span> :<span class="lineNoCov"> 0 : wafer_id[9 - i] = ' ';</span></a>
+<a name="547"><span class="lineNum"> 547 </span> : : else /* Unknown code */</a>
+<a name="548"><span class="lineNum"> 548 </span> :<span class="lineNoCov"> 0 : wafer_id[9 - i] = tmp + '0';</span></a>
<a name="549"><span class="lineNum"> 549 </span> : : }</a>
-<a name="550"><span class="lineNum"> 550 </span> : : }</a>
-<a name="551"><span class="lineNum"> 551 </span> : : </a>
-<a name="552"><span class="lineNum"> 552 </span> :<span class="lineCov"> 2 : static bool add_xscom_sppcrd(uint64_t xscom_base)</span></a>
-<a name="553"><span class="lineNum"> 553 </span> : : {</a>
-<a name="554"><span class="lineNum"> 554 </span> : : const struct HDIF_common_hdr *hdif;</a>
-<a name="555"><span class="lineNum"> 555 </span> : : unsigned int i, vpd_sz;</a>
-<a name="556"><span class="lineNum"> 556 </span> : : const void *vpd;</a>
-<a name="557"><span class="lineNum"> 557 </span> : : struct dt_node *np, *vpd_node;</a>
-<a name="558"><span class="lineNum"> 558 </span> : : </a>
-<a name="559"><span class="lineNum"> 559 </span> :<span class="lineCov"> 66 : for_each_ntuple_idx(&amp;spira.ntuples.proc_chip, hdif, i,</span></a>
-<a name="560"><span class="lineNum"> 560 </span> : : SPPCRD_HDIF_SIG) {</a>
-<a name="561"><span class="lineNum"> 561 </span> : : const struct sppcrd_chip_info *cinfo;</a>
-<a name="562"><span class="lineNum"> 562 </span> :<span class="lineCov"> 64 : const struct spira_fru_id *fru_id = NULL;</span></a>
-<a name="563"><span class="lineNum"> 563 </span> : : unsigned int csize;</a>
-<a name="564"><span class="lineNum"> 564 </span> : : u32 ve, version;</a>
-<a name="565"><span class="lineNum"> 565 </span> : : </a>
-<a name="566"><span class="lineNum"> 566 </span> :<span class="lineCov"> 64 : cinfo = HDIF_get_idata(hdif, SPPCRD_IDATA_CHIP_INFO, &amp;csize);</span></a>
-<a name="567"><span class="lineNum"> 567 </span> :<span class="lineCov"> 64 : if (!CHECK_SPPTR(cinfo)) {</span></a>
-<a name="568"><span class="lineNum"> 568 </span> :<span class="lineNoCov"> 0 : prerror(&quot;XSCOM: Bad ChipID data %d\n&quot;, i);</span></a>
-<a name="569"><span class="lineNum"> 569 </span> :<span class="lineCov"> 58 : continue;</span></a>
-<a name="570"><span class="lineNum"> 570 </span> : : }</a>
-<a name="571"><span class="lineNum"> 571 </span> : : </a>
-<a name="572"><span class="lineNum"> 572 </span> :<span class="lineCov"> 64 : ve = be32_to_cpu(cinfo-&gt;verif_exist_flags) &amp; CHIP_VERIFY_MASK;</span></a>
-<a name="573"><span class="lineNum"> 573 </span> :<span class="lineCov"> 64 : ve &gt;&gt;= CHIP_VERIFY_SHIFT;</span></a>
-<a name="574"><span class="lineNum"> 574 </span> :<span class="lineCov"> 64 : if (ve == CHIP_VERIFY_NOT_INSTALLED ||</span></a>
-<a name="575"><span class="lineNum"> 575 </span> : : ve == CHIP_VERIFY_UNUSABLE)</a>
-<a name="576"><span class="lineNum"> 576 </span> :<span class="lineCov"> 58 : continue;</span></a>
-<a name="577"><span class="lineNum"> 577 </span> : : </a>
-<a name="578"><span class="lineNum"> 578 </span> : : /* Create the XSCOM node */</a>
-<a name="579"><span class="lineNum"> 579 </span> :<span class="lineCov"> 6 : np = add_xscom_node(xscom_base,</span></a>
-<a name="580"><span class="lineNum"> 580 </span> : : be32_to_cpu(cinfo-&gt;xscom_id),</a>
-<a name="581"><span class="lineNum"> 581 </span> : : be32_to_cpu(cinfo-&gt;proc_chip_id));</a>
-<a name="582"><span class="lineNum"> 582 </span> :<span class="lineCov"> 6 : if (!np)</span></a>
-<a name="583"><span class="lineNum"> 583 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="584"><span class="lineNum"> 584 </span> : : </a>
-<a name="585"><span class="lineNum"> 585 </span> : : </a>
-<a name="586"><span class="lineNum"> 586 </span> :<span class="lineCov"> 6 : dt_add_property_cells(np, DT_PRIVATE &quot;sppcrd-index&quot;, i);</span></a>
-<a name="587"><span class="lineNum"> 587 </span> : : </a>
-<a name="588"><span class="lineNum"> 588 </span> :<span class="lineCov"> 6 : version = be16_to_cpu(hdif-&gt;version);</span></a>
-<a name="589"><span class="lineNum"> 589 </span> : : </a>
-<a name="590"><span class="lineNum"> 590 </span> : : /* Version 0A has additional OCC related stuff */</a>
-<a name="591"><span class="lineNum"> 591 </span> :<span class="lineCov"> 6 : if (version &gt;= 0x000a) {</span></a>
-<a name="592"><span class="lineNum"> 592 </span> :<span class="lineCov"> 6 : if (!dt_find_property(np, &quot;ibm,dbob-id&quot;))</span></a>
-<a name="593"><span class="lineNum"> 593 </span> :<span class="lineCov"> 6 : dt_add_property_cells(np, &quot;ibm,dbob-id&quot;,</span></a>
-<a name="594"><span class="lineNum"> 594 </span> : : be32_to_cpu(cinfo-&gt;dbob_id));</a>
-<a name="595"><span class="lineNum"> 595 </span> :<span class="lineCov"> 6 : dt_add_property_cells(np, &quot;ibm,occ-functional-state&quot;,</span></a>
-<a name="596"><span class="lineNum"> 596 </span> : : be32_to_cpu(cinfo-&gt;occ_state));</a>
-<a name="597"><span class="lineNum"> 597 </span> : : }</a>
-<a name="598"><span class="lineNum"> 598 </span> : : </a>
-<a name="599"><span class="lineNum"> 599 </span> : : /* Add chip VPD */</a>
-<a name="600"><span class="lineNum"> 600 </span> :<span class="lineCov"> 6 : vpd_node = dt_add_vpd_node(hdif, SPPCRD_IDATA_FRU_ID,</span></a>
-<a name="601"><span class="lineNum"> 601 </span> : : SPPCRD_IDATA_KW_VPD);</a>
-<a name="602"><span class="lineNum"> 602 </span> :<span class="lineCov"> 6 : if (vpd_node)</span></a>
-<a name="603"><span class="lineNum"> 603 </span> :<span class="lineCov"> 6 : dt_add_property_cells(vpd_node, &quot;ibm,chip-id&quot;,</span></a>
-<a name="604"><span class="lineNum"> 604 </span> : : be32_to_cpu(cinfo-&gt;xscom_id));</a>
-<a name="605"><span class="lineNum"> 605 </span> : : </a>
-<a name="606"><span class="lineNum"> 606 </span> :<span class="lineCov"> 6 : fru_id = HDIF_get_idata(hdif, SPPCRD_IDATA_FRU_ID, NULL);</span></a>
-<a name="607"><span class="lineNum"> 607 </span> :<span class="lineCov"> 6 : if (fru_id)</span></a>
-<a name="608"><span class="lineNum"> 608 </span> :<span class="lineCov"> 6 : slca_vpd_add_loc_code(np, be16_to_cpu(fru_id-&gt;slca_index));</span></a>
-<a name="609"><span class="lineNum"> 609 </span> : : </a>
-<a name="610"><span class="lineNum"> 610 </span> : : /* Add module VPD on version A and later */</a>
-<a name="611"><span class="lineNum"> 611 </span> :<span class="lineCov"> 6 : if (version &gt;= 0x000a) {</span></a>
-<a name="612"><span class="lineNum"> 612 </span> :<span class="lineCov"> 6 : vpd = HDIF_get_idata(hdif, SPPCRD_IDATA_MODULE_VPD,</span></a>
-<a name="613"><span class="lineNum"> 613 </span> : : &amp;vpd_sz);</a>
-<a name="614"><span class="lineNum"> 614 </span> :<span class="lineCov"> 6 : if (CHECK_SPPTR(vpd)) {</span></a>
-<a name="615"><span class="lineNum"> 615 </span> :<span class="lineCov"> 6 : dt_add_property(np, &quot;ibm,module-vpd&quot;, vpd,</span></a>
-<a name="616"><span class="lineNum"> 616 </span> : : vpd_sz);</a>
-<a name="617"><span class="lineNum"> 617 </span> :<span class="lineCov"> 6 : vpd_data_parse(np, vpd, vpd_sz);</span></a>
-<a name="618"><span class="lineNum"> 618 </span> :<span class="lineCov"> 6 : if (vpd_node)</span></a>
-<a name="619"><span class="lineNum"> 619 </span> :<span class="lineCov"> 6 : dt_add_proc_vendor(vpd_node, vpd, vpd_sz);</span></a>
-<a name="620"><span class="lineNum"> 620 </span> : : }</a>
-<a name="621"><span class="lineNum"> 621 </span> : : }</a>
-<a name="622"><span class="lineNum"> 622 </span> : : </a>
-<a name="623"><span class="lineNum"> 623 </span> : : /*</a>
-<a name="624"><span class="lineNum"> 624 </span> : : * Extract additional associativity information from</a>
-<a name="625"><span class="lineNum"> 625 </span> : : * the core data. Pick one core on that chip</a>
-<a name="626"><span class="lineNum"> 626 </span> : : */</a>
-<a name="627"><span class="lineNum"> 627 </span> :<span class="lineCov"> 6 : add_xscom_add_pcia_assoc(np, be32_to_cpu(cinfo-&gt;proc_chip_id));</span></a>
-<a name="628"><span class="lineNum"> 628 </span> : : </a>
-<a name="629"><span class="lineNum"> 629 </span> : : /* Add PSI Host bridge */</a>
-<a name="630"><span class="lineNum"> 630 </span> :<span class="lineCov"> 6 : add_psihb_node(np);</span></a>
+<a name="550"><span class="lineNum"> 550 </span> :<span class="lineNoCov"> 0 : wafer_id[10] = '\0';</span></a>
+<a name="551"><span class="lineNum"> 551 </span> :<span class="lineNoCov"> 0 : dt_add_property_nstr(xscom, &quot;wafer-id&quot;, wafer_id, 10);</span></a>
+<a name="552"><span class="lineNum"> 552 </span> : : </a>
+<a name="553"><span class="lineNum"> 553 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(xscom, &quot;wafer-location&quot;,</span></a>
+<a name="554"><span class="lineNum"> 554 </span> : : (u32)((be64_to_cpu(ecid-&gt;high) &gt;&gt; 56) &amp; 0xff),</a>
+<a name="555"><span class="lineNum"> 555 </span> : : (u32)((be64_to_cpu(ecid-&gt;high) &gt;&gt; 48) &amp; 0xff));</a>
+<a name="556"><span class="lineNum"> 556 </span> : : }</a>
+<a name="557"><span class="lineNum"> 557 </span> : : </a>
+<a name="558"><span class="lineNum"> 558 </span> :<span class="lineCov"> 6 : static void add_xscom_add_pcia_assoc(struct dt_node *np, uint32_t pcid)</span></a>
+<a name="559"><span class="lineNum"> 559 </span> : : {</a>
+<a name="560"><span class="lineNum"> 560 </span> : : const struct HDIF_common_hdr *hdr;</a>
+<a name="561"><span class="lineNum"> 561 </span> : : u32 size;</a>
+<a name="562"><span class="lineNum"> 562 </span> : : </a>
+<a name="563"><span class="lineNum"> 563 </span> : : </a>
+<a name="564"><span class="lineNum"> 564 </span> : : /*</a>
+<a name="565"><span class="lineNum"> 565 </span> : : * The SPPCRD doesn't contain all the affinity data, we have</a>
+<a name="566"><span class="lineNum"> 566 </span> : : * to dig it out of a core. I assume this is so that node</a>
+<a name="567"><span class="lineNum"> 567 </span> : : * affinity can be different for groups of cores within the</a>
+<a name="568"><span class="lineNum"> 568 </span> : : * chip, but for now we are going to ignore that</a>
+<a name="569"><span class="lineNum"> 569 </span> : : */</a>
+<a name="570"><span class="lineNum"> 570 </span> :<span class="lineCov"> 6 : hdr = get_hdif(&amp;spira.ntuples.pcia, SPPCIA_HDIF_SIG);</span></a>
+<a name="571"><span class="lineNum"> 571 </span> :<span class="lineCov"> 6 : if (!hdr)</span></a>
+<a name="572"><span class="lineNum"> 572 </span> :<span class="lineCov"> 6 : return;</span></a>
+<a name="573"><span class="lineNum"> 573 </span> : : </a>
+<a name="574"><span class="lineNum"> 574 </span> :<span class="lineCov"> 39 : for_each_pcia(hdr) {</span></a>
+<a name="575"><span class="lineNum"> 575 </span> : : const struct sppcia_core_unique *id;</a>
+<a name="576"><span class="lineNum"> 576 </span> : : </a>
+<a name="577"><span class="lineNum"> 577 </span> :<span class="lineCov"> 39 : id = HDIF_get_idata(hdr, SPPCIA_IDATA_CORE_UNIQUE, &amp;size);</span></a>
+<a name="578"><span class="lineNum"> 578 </span> :<span class="lineCov"> 39 : if (!id || size &lt; sizeof(*id))</span></a>
+<a name="579"><span class="lineNum"> 579 </span> :<span class="lineCov"> 33 : continue;</span></a>
+<a name="580"><span class="lineNum"> 580 </span> : : </a>
+<a name="581"><span class="lineNum"> 581 </span> :<span class="lineCov"> 39 : if (be32_to_cpu(id-&gt;proc_chip_id) != pcid)</span></a>
+<a name="582"><span class="lineNum"> 582 </span> :<span class="lineCov"> 33 : continue;</span></a>
+<a name="583"><span class="lineNum"> 583 </span> : : </a>
+<a name="584"><span class="lineNum"> 584 </span> :<span class="lineCov"> 6 : dt_add_property_cells(np, &quot;ibm,ccm-node-id&quot;,</span></a>
+<a name="585"><span class="lineNum"> 585 </span> : : be32_to_cpu(id-&gt;ccm_node_id));</a>
+<a name="586"><span class="lineNum"> 586 </span> :<span class="lineCov"> 6 : dt_add_property_cells(np, &quot;ibm,hw-card-id&quot;,</span></a>
+<a name="587"><span class="lineNum"> 587 </span> : : be32_to_cpu(id-&gt;hw_card_id));</a>
+<a name="588"><span class="lineNum"> 588 </span> :<span class="lineCov"> 6 : dt_add_property_cells(np, &quot;ibm,hw-module-id&quot;,</span></a>
+<a name="589"><span class="lineNum"> 589 </span> : : be32_to_cpu(id-&gt;hw_module_id));</a>
+<a name="590"><span class="lineNum"> 590 </span> :<span class="lineCov"> 6 : if (!dt_find_property(np, &quot;ibm,dbob-id&quot;))</span></a>
+<a name="591"><span class="lineNum"> 591 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(np, &quot;ibm,dbob-id&quot;,</span></a>
+<a name="592"><span class="lineNum"> 592 </span> : : be32_to_cpu(id-&gt;drawer_book_octant_blade_id));</a>
+<a name="593"><span class="lineNum"> 593 </span> :<span class="lineCov"> 6 : if (proc_gen &lt; proc_gen_p9) {</span></a>
+<a name="594"><span class="lineNum"> 594 </span> :<span class="lineCov"> 6 : dt_add_property_cells(np, &quot;ibm,mem-interleave-scope&quot;,</span></a>
+<a name="595"><span class="lineNum"> 595 </span> : : be32_to_cpu(id-&gt;memory_interleaving_scope));</a>
+<a name="596"><span class="lineNum"> 596 </span> : : }</a>
+<a name="597"><span class="lineNum"> 597 </span> :<span class="lineCov"> 6 : return;</span></a>
+<a name="598"><span class="lineNum"> 598 </span> : : }</a>
+<a name="599"><span class="lineNum"> 599 </span> : : }</a>
+<a name="600"><span class="lineNum"> 600 </span> : : </a>
+<a name="601"><span class="lineNum"> 601 </span> :<span class="lineCov"> 2 : static bool add_xscom_sppcrd(uint64_t xscom_base)</span></a>
+<a name="602"><span class="lineNum"> 602 </span> : : {</a>
+<a name="603"><span class="lineNum"> 603 </span> : : const struct HDIF_common_hdr *hdif;</a>
+<a name="604"><span class="lineNum"> 604 </span> : : unsigned int i, vpd_sz;</a>
+<a name="605"><span class="lineNum"> 605 </span> : : const void *vpd;</a>
+<a name="606"><span class="lineNum"> 606 </span> : : struct dt_node *np, *vpd_node;</a>
+<a name="607"><span class="lineNum"> 607 </span> : : </a>
+<a name="608"><span class="lineNum"> 608 </span> :<span class="lineCov"> 66 : for_each_ntuple_idx(&amp;spira.ntuples.proc_chip, hdif, i,</span></a>
+<a name="609"><span class="lineNum"> 609 </span> : : SPPCRD_HDIF_SIG) {</a>
+<a name="610"><span class="lineNum"> 610 </span> : : const struct sppcrd_chip_info *cinfo;</a>
+<a name="611"><span class="lineNum"> 611 </span> :<span class="lineCov"> 64 : const struct spira_fru_id *fru_id = NULL;</span></a>
+<a name="612"><span class="lineNum"> 612 </span> : : unsigned int csize;</a>
+<a name="613"><span class="lineNum"> 613 </span> : : u32 ve, version;</a>
+<a name="614"><span class="lineNum"> 614 </span> : : </a>
+<a name="615"><span class="lineNum"> 615 </span> :<span class="lineCov"> 64 : cinfo = HDIF_get_idata(hdif, SPPCRD_IDATA_CHIP_INFO, &amp;csize);</span></a>
+<a name="616"><span class="lineNum"> 616 </span> :<span class="lineCov"> 64 : if (!CHECK_SPPTR(cinfo)) {</span></a>
+<a name="617"><span class="lineNum"> 617 </span> :<span class="lineNoCov"> 0 : prerror(&quot;XSCOM: Bad ChipID data %d\n&quot;, i);</span></a>
+<a name="618"><span class="lineNum"> 618 </span> :<span class="lineCov"> 58 : continue;</span></a>
+<a name="619"><span class="lineNum"> 619 </span> : : }</a>
+<a name="620"><span class="lineNum"> 620 </span> : : </a>
+<a name="621"><span class="lineNum"> 621 </span> :<span class="lineCov"> 64 : ve = be32_to_cpu(cinfo-&gt;verif_exist_flags) &amp; CHIP_VERIFY_MASK;</span></a>
+<a name="622"><span class="lineNum"> 622 </span> :<span class="lineCov"> 64 : ve &gt;&gt;= CHIP_VERIFY_SHIFT;</span></a>
+<a name="623"><span class="lineNum"> 623 </span> :<span class="lineCov"> 64 : if (ve == CHIP_VERIFY_NOT_INSTALLED ||</span></a>
+<a name="624"><span class="lineNum"> 624 </span> : : ve == CHIP_VERIFY_UNUSABLE)</a>
+<a name="625"><span class="lineNum"> 625 </span> :<span class="lineCov"> 58 : continue;</span></a>
+<a name="626"><span class="lineNum"> 626 </span> : : </a>
+<a name="627"><span class="lineNum"> 627 </span> : : /* Create the XSCOM node */</a>
+<a name="628"><span class="lineNum"> 628 </span> :<span class="lineCov"> 6 : np = add_xscom_node(xscom_base, cinfo);</span></a>
+<a name="629"><span class="lineNum"> 629 </span> :<span class="lineCov"> 6 : if (!np)</span></a>
+<a name="630"><span class="lineNum"> 630 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
<a name="631"><span class="lineNum"> 631 </span> : : </a>
-<a name="632"><span class="lineNum"> 632 </span> :<span class="lineCov"> 6 : if (proc_gen &gt;= proc_gen_p9) {</span></a>
-<a name="633"><span class="lineNum"> 633 </span> :<span class="lineNoCov"> 0 : add_xive_node(np);</span></a>
-<a name="634"><span class="lineNum"> 634 </span> :<span class="lineNoCov"> 0 : parse_i2c_devs(hdif, SPPCRD_IDATA_HOST_I2C, np);</span></a>
-<a name="635"><span class="lineNum"> 635 </span> :<span class="lineNoCov"> 0 : add_vas_node(np, i);</span></a>
-<a name="636"><span class="lineNum"> 636 </span> :<span class="lineNoCov"> 0 : add_ecid_data(hdif, np);</span></a>
-<a name="637"><span class="lineNum"> 637 </span> : : </a>
-<a name="638"><span class="lineNum"> 638 </span> :<span class="lineNoCov"> 0 : if (be32_to_cpu(cinfo-&gt;verif_exist_flags) &amp; CHIP_VERIFY_MASTER_PROC)</span></a>
-<a name="639"><span class="lineNum"> 639 </span> :<span class="lineNoCov"> 0 : dt_add_property(np, &quot;primary&quot;, NULL, 0);</span></a>
-<a name="640"><span class="lineNum"> 640 </span> : : }</a>
-<a name="641"><span class="lineNum"> 641 </span> : : </a>
-<a name="642"><span class="lineNum"> 642 </span> : : /*</a>
-<a name="643"><span class="lineNum"> 643 </span> : : * Add sw checkstop scom address (ibm,sw-checkstop-fir)</a>
-<a name="644"><span class="lineNum"> 644 </span> : : *</a>
-<a name="645"><span class="lineNum"> 645 </span> : : * The latest HDAT versions have sw checkstop scom address</a>
-<a name="646"><span class="lineNum"> 646 </span> : : * info. But not sure from which version onwards (at least</a>
-<a name="647"><span class="lineNum"> 647 </span> : : * HDAT spec do not mention that explicitly). Hence use the</a>
-<a name="648"><span class="lineNum"> 648 </span> : : * sppcrd struct size returned by HDIF_get_idata to figure out</a>
-<a name="649"><span class="lineNum"> 649 </span> : : * whether it contains sw checkstop scom address info. Also</a>
-<a name="650"><span class="lineNum"> 650 </span> : : * check if sw_xstop_fir_scom address is non-zero.</a>
-<a name="651"><span class="lineNum"> 651 </span> : : */</a>
-<a name="652"><span class="lineNum"> 652 </span> :<span class="lineCov"> 6 : if ((csize &gt;= (offsetof(struct sppcrd_chip_info,</span></a>
-<a name="653"><span class="lineNum"> 653 </span> :<span class="lineNoCov"> 0 : sw_xstop_fir_bitpos) + 1)) &amp;&amp;</span></a>
-<a name="654"><span class="lineNum"> 654 </span> :<span class="lineNoCov"> 0 : cinfo-&gt;sw_xstop_fir_scom) {</span></a>
-<a name="655"><span class="lineNum"> 655 </span> :<span class="lineNoCov"> 0 : uint8_t fir_bit = cinfo-&gt;sw_xstop_fir_bitpos;</span></a>
+<a name="632"><span class="lineNum"> 632 </span> : : </a>
+<a name="633"><span class="lineNum"> 633 </span> :<span class="lineCov"> 6 : dt_add_property_cells(np, DT_PRIVATE &quot;sppcrd-index&quot;, i);</span></a>
+<a name="634"><span class="lineNum"> 634 </span> : : </a>
+<a name="635"><span class="lineNum"> 635 </span> :<span class="lineCov"> 6 : version = be16_to_cpu(hdif-&gt;version);</span></a>
+<a name="636"><span class="lineNum"> 636 </span> : : </a>
+<a name="637"><span class="lineNum"> 637 </span> : : /* Version 0A has additional OCC related stuff */</a>
+<a name="638"><span class="lineNum"> 638 </span> :<span class="lineCov"> 6 : if (version &gt;= 0x000a) {</span></a>
+<a name="639"><span class="lineNum"> 639 </span> :<span class="lineCov"> 6 : if (!dt_find_property(np, &quot;ibm,dbob-id&quot;))</span></a>
+<a name="640"><span class="lineNum"> 640 </span> :<span class="lineCov"> 6 : dt_add_property_cells(np, &quot;ibm,dbob-id&quot;,</span></a>
+<a name="641"><span class="lineNum"> 641 </span> : : be32_to_cpu(cinfo-&gt;dbob_id));</a>
+<a name="642"><span class="lineNum"> 642 </span> :<span class="lineCov"> 6 : dt_add_property_cells(np, &quot;ibm,occ-functional-state&quot;,</span></a>
+<a name="643"><span class="lineNum"> 643 </span> : : be32_to_cpu(cinfo-&gt;occ_state));</a>
+<a name="644"><span class="lineNum"> 644 </span> : : }</a>
+<a name="645"><span class="lineNum"> 645 </span> : : </a>
+<a name="646"><span class="lineNum"> 646 </span> : : /* Add chip VPD */</a>
+<a name="647"><span class="lineNum"> 647 </span> :<span class="lineCov"> 6 : vpd_node = dt_add_vpd_node(hdif, SPPCRD_IDATA_FRU_ID,</span></a>
+<a name="648"><span class="lineNum"> 648 </span> : : SPPCRD_IDATA_KW_VPD);</a>
+<a name="649"><span class="lineNum"> 649 </span> :<span class="lineCov"> 6 : if (vpd_node)</span></a>
+<a name="650"><span class="lineNum"> 650 </span> :<span class="lineCov"> 6 : dt_add_property_cells(vpd_node, &quot;ibm,chip-id&quot;,</span></a>
+<a name="651"><span class="lineNum"> 651 </span> : : get_xscom_id(cinfo));</a>
+<a name="652"><span class="lineNum"> 652 </span> : : </a>
+<a name="653"><span class="lineNum"> 653 </span> :<span class="lineCov"> 6 : fru_id = HDIF_get_idata(hdif, SPPCRD_IDATA_FRU_ID, NULL);</span></a>
+<a name="654"><span class="lineNum"> 654 </span> :<span class="lineCov"> 6 : if (fru_id)</span></a>
+<a name="655"><span class="lineNum"> 655 </span> :<span class="lineCov"> 6 : slca_vpd_add_loc_code(np, be16_to_cpu(fru_id-&gt;slca_index));</span></a>
<a name="656"><span class="lineNum"> 656 </span> : : </a>
-<a name="657"><span class="lineNum"> 657 </span> :<span class="lineNoCov"> 0 : if (!dt_find_property(dt_root, &quot;ibm,sw-checkstop-fir&quot;))</span></a>
-<a name="658"><span class="lineNum"> 658 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dt_root,</span></a>
-<a name="659"><span class="lineNum"> 659 </span> : : &quot;ibm,sw-checkstop-fir&quot;,</a>
-<a name="660"><span class="lineNum"> 660 </span> : : be32_to_cpu(cinfo-&gt;sw_xstop_fir_scom),</a>
-<a name="661"><span class="lineNum"> 661 </span> : : fir_bit);</a>
-<a name="662"><span class="lineNum"> 662 </span> : : }</a>
-<a name="663"><span class="lineNum"> 663 </span> : : }</a>
-<a name="664"><span class="lineNum"> 664 </span> : : </a>
-<a name="665"><span class="lineNum"> 665 </span> :<span class="lineCov"> 2 : return i &gt; 0;</span></a>
-<a name="666"><span class="lineNum"> 666 </span> : : }</a>
-<a name="667"><span class="lineNum"> 667 </span> : : </a>
-<a name="668"><span class="lineNum"> 668 </span> :<span class="lineCov"> 2 : static void add_xscom(void)</span></a>
-<a name="669"><span class="lineNum"> 669 </span> : : {</a>
-<a name="670"><span class="lineNum"> 670 </span> : : const void *ms_vpd;</a>
-<a name="671"><span class="lineNum"> 671 </span> : : const struct msvpd_pmover_bsr_synchro *pmbs;</a>
-<a name="672"><span class="lineNum"> 672 </span> : : unsigned int size;</a>
-<a name="673"><span class="lineNum"> 673 </span> : : uint64_t xscom_base;</a>
-<a name="674"><span class="lineNum"> 674 </span> : : </a>
-<a name="675"><span class="lineNum"> 675 </span> :<span class="lineCov"> 2 : ms_vpd = get_hdif(&amp;spira.ntuples.ms_vpd, MSVPD_HDIF_SIG);</span></a>
-<a name="676"><span class="lineNum"> 676 </span> :<span class="lineCov"> 2 : if (!ms_vpd) {</span></a>
-<a name="677"><span class="lineNum"> 677 </span> :<span class="lineNoCov"> 0 : prerror(&quot;XSCOM: Can't find MS VPD\n&quot;);</span></a>
-<a name="678"><span class="lineNum"> 678 </span> :<span class="lineCov"> 2 : return;</span></a>
-<a name="679"><span class="lineNum"> 679 </span> : : }</a>
-<a name="680"><span class="lineNum"> 680 </span> : : </a>
-<a name="681"><span class="lineNum"> 681 </span> :<span class="lineCov"> 2 : pmbs = HDIF_get_idata(ms_vpd, MSVPD_IDATA_PMOVER_SYNCHRO, &amp;size);</span></a>
-<a name="682"><span class="lineNum"> 682 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(pmbs) || size &lt; sizeof(*pmbs)) {</span></a>
-<a name="683"><span class="lineNum"> 683 </span> :<span class="lineNoCov"> 0 : prerror(&quot;XSCOM: absent or bad PMBS size %u @ %p\n&quot;, size, pmbs);</span></a>
-<a name="684"><span class="lineNum"> 684 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="685"><span class="lineNum"> 685 </span> : : }</a>
-<a name="686"><span class="lineNum"> 686 </span> : : </a>
-<a name="687"><span class="lineNum"> 687 </span> :<span class="lineCov"> 2 : if (!(be32_to_cpu(pmbs-&gt;flags) &amp; MSVPD_PMS_FLAG_XSCOMBASE_VALID)) {</span></a>
-<a name="688"><span class="lineNum"> 688 </span> :<span class="lineNoCov"> 0 : prerror(&quot;XSCOM: No XSCOM base in PMBS, using default\n&quot;);</span></a>
-<a name="689"><span class="lineNum"> 689 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="690"><span class="lineNum"> 690 </span> : : }</a>
-<a name="691"><span class="lineNum"> 691 </span> : : </a>
-<a name="692"><span class="lineNum"> 692 </span> :<span class="lineCov"> 2 : xscom_base = be64_to_cpu(pmbs-&gt;xscom_addr);</span></a>
-<a name="693"><span class="lineNum"> 693 </span> : : </a>
-<a name="694"><span class="lineNum"> 694 </span> : : /* Get rid of the top bits */</a>
-<a name="695"><span class="lineNum"> 695 </span> :<span class="lineCov"> 2 : xscom_base = cleanup_addr(xscom_base);</span></a>
-<a name="696"><span class="lineNum"> 696 </span> : : </a>
-<a name="697"><span class="lineNum"> 697 </span> : : /* First, try the new proc_chip ntuples for chip data */</a>
-<a name="698"><span class="lineNum"> 698 </span> :<span class="lineCov"> 2 : if (add_xscom_sppcrd(xscom_base))</span></a>
-<a name="699"><span class="lineNum"> 699 </span> :<span class="lineCov"> 2 : return;</span></a>
-<a name="700"><span class="lineNum"> 700 </span> : : }</a>
-<a name="701"><span class="lineNum"> 701 </span> : : </a>
-<a name="702"><span class="lineNum"> 702 </span> :<span class="lineCov"> 6 : static void add_chiptod_node(unsigned int chip_id, int flags)</span></a>
-<a name="703"><span class="lineNum"> 703 </span> : : {</a>
-<a name="704"><span class="lineNum"> 704 </span> : : struct dt_node *node, *xscom_node;</a>
-<a name="705"><span class="lineNum"> 705 </span> : : const char *compat_str;</a>
-<a name="706"><span class="lineNum"> 706 </span> : : uint32_t addr, len;</a>
-<a name="707"><span class="lineNum"> 707 </span> : : </a>
-<a name="708"><span class="lineNum"> 708 </span> :<span class="lineCov"> 6 : if ((flags &amp; CHIPTOD_ID_FLAGS_STATUS_MASK) !=</span></a>
-<a name="709"><span class="lineNum"> 709 </span> : : CHIPTOD_ID_FLAGS_STATUS_OK)</a>
-<a name="710"><span class="lineNum"> 710 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="711"><span class="lineNum"> 711 </span> : : </a>
-<a name="712"><span class="lineNum"> 712 </span> :<span class="lineCov"> 6 : xscom_node = find_xscom_for_chip(chip_id);</span></a>
-<a name="713"><span class="lineNum"> 713 </span> :<span class="lineCov"> 6 : if (!xscom_node) {</span></a>
-<a name="714"><span class="lineNum"> 714 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CHIPTOD: No xscom for chiptod %d?\n&quot;, chip_id);</span></a>
-<a name="715"><span class="lineNum"> 715 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="716"><span class="lineNum"> 716 </span> : : }</a>
-<a name="717"><span class="lineNum"> 717 </span> : : </a>
-<a name="718"><span class="lineNum"> 718 </span> :<span class="lineCov"> 6 : addr = 0x40000;</span></a>
-<a name="719"><span class="lineNum"> 719 </span> :<span class="lineCov"> 6 : len = 0x34;</span></a>
-<a name="720"><span class="lineNum"> 720 </span> : : </a>
-<a name="721"><span class="lineNum"> 721 </span> :<span class="lineCov"> 6 : switch(proc_gen) {</span></a>
-<a name="722"><span class="lineNum"> 722 </span> :<span class="lineCov"> 6 : case proc_gen_p8:</span></a>
-<a name="723"><span class="lineNum"> 723 </span> :<span class="lineCov"> 6 : compat_str = &quot;ibm,power8-chiptod&quot;;</span></a>
-<a name="724"><span class="lineNum"> 724 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="725"><span class="lineNum"> 725 </span> :<span class="lineNoCov"> 0 : case proc_gen_p9:</span></a>
-<a name="726"><span class="lineNum"> 726 </span> :<span class="lineNoCov"> 0 : compat_str = &quot;ibm,power9-chiptod&quot;;</span></a>
-<a name="727"><span class="lineNum"> 727 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="728"><span class="lineNum"> 728 </span> :<span class="lineNoCov"> 0 : default:</span></a>
-<a name="729"><span class="lineNum"> 729 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="730"><span class="lineNum"> 730 </span> : : }</a>
-<a name="731"><span class="lineNum"> 731 </span> : : </a>
-<a name="732"><span class="lineNum"> 732 </span> :<span class="lineCov"> 6 : prlog(PR_DEBUG, &quot;CHIPTOD: Found on chip 0x%x %s\n&quot;, chip_id,</span></a>
-<a name="733"><span class="lineNum"> 733 </span> : : (flags &amp; CHIPTOD_ID_FLAGS_PRIMARY) ? &quot;[primary]&quot; :</a>
-<a name="734"><span class="lineNum"> 734 </span> : : ((flags &amp; CHIPTOD_ID_FLAGS_SECONDARY) ? &quot;[secondary]&quot; : &quot;&quot;));</a>
-<a name="735"><span class="lineNum"> 735 </span> : : </a>
-<a name="736"><span class="lineNum"> 736 </span> :<span class="lineCov"> 6 : node = dt_new_addr(xscom_node, &quot;chiptod&quot;, addr);</span></a>
-<a name="737"><span class="lineNum"> 737 </span> :<span class="lineCov"> 6 : if (!node)</span></a>
-<a name="738"><span class="lineNum"> 738 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="657"><span class="lineNum"> 657 </span> : : /* Add module VPD on version A and later */</a>
+<a name="658"><span class="lineNum"> 658 </span> :<span class="lineCov"> 6 : if (version &gt;= 0x000a) {</span></a>
+<a name="659"><span class="lineNum"> 659 </span> :<span class="lineCov"> 6 : vpd = HDIF_get_idata(hdif, SPPCRD_IDATA_MODULE_VPD,</span></a>
+<a name="660"><span class="lineNum"> 660 </span> : : &amp;vpd_sz);</a>
+<a name="661"><span class="lineNum"> 661 </span> :<span class="lineCov"> 6 : if (CHECK_SPPTR(vpd)) {</span></a>
+<a name="662"><span class="lineNum"> 662 </span> :<span class="lineCov"> 6 : dt_add_property(np, &quot;ibm,module-vpd&quot;, vpd,</span></a>
+<a name="663"><span class="lineNum"> 663 </span> : : vpd_sz);</a>
+<a name="664"><span class="lineNum"> 664 </span> :<span class="lineCov"> 6 : vpd_data_parse(np, vpd, vpd_sz);</span></a>
+<a name="665"><span class="lineNum"> 665 </span> :<span class="lineCov"> 6 : if (vpd_node)</span></a>
+<a name="666"><span class="lineNum"> 666 </span> :<span class="lineCov"> 6 : dt_add_proc_vendor(vpd_node, vpd, vpd_sz);</span></a>
+<a name="667"><span class="lineNum"> 667 </span> : : }</a>
+<a name="668"><span class="lineNum"> 668 </span> : : }</a>
+<a name="669"><span class="lineNum"> 669 </span> : : </a>
+<a name="670"><span class="lineNum"> 670 </span> : : /*</a>
+<a name="671"><span class="lineNum"> 671 </span> : : * Extract additional associativity information from</a>
+<a name="672"><span class="lineNum"> 672 </span> : : * the core data. Pick one core on that chip</a>
+<a name="673"><span class="lineNum"> 673 </span> : : */</a>
+<a name="674"><span class="lineNum"> 674 </span> :<span class="lineCov"> 6 : add_xscom_add_pcia_assoc(np, be32_to_cpu(cinfo-&gt;proc_chip_id));</span></a>
+<a name="675"><span class="lineNum"> 675 </span> : : </a>
+<a name="676"><span class="lineNum"> 676 </span> : : /* Add PSI Host bridge */</a>
+<a name="677"><span class="lineNum"> 677 </span> :<span class="lineCov"> 6 : add_psihb_node(np);</span></a>
+<a name="678"><span class="lineNum"> 678 </span> : : </a>
+<a name="679"><span class="lineNum"> 679 </span> :<span class="lineCov"> 6 : if (proc_gen &gt;= proc_gen_p9) {</span></a>
+<a name="680"><span class="lineNum"> 680 </span> :<span class="lineNoCov"> 0 : add_xive_node(np);</span></a>
+<a name="681"><span class="lineNum"> 681 </span> :<span class="lineNoCov"> 0 : parse_i2c_devs(hdif, SPPCRD_IDATA_HOST_I2C, np);</span></a>
+<a name="682"><span class="lineNum"> 682 </span> :<span class="lineNoCov"> 0 : add_vas_node(np, i);</span></a>
+<a name="683"><span class="lineNum"> 683 </span> :<span class="lineNoCov"> 0 : add_ecid_data(hdif, np);</span></a>
+<a name="684"><span class="lineNum"> 684 </span> : : </a>
+<a name="685"><span class="lineNum"> 685 </span> :<span class="lineNoCov"> 0 : if (be32_to_cpu(cinfo-&gt;verif_exist_flags) &amp; CHIP_VERIFY_MASTER_PROC)</span></a>
+<a name="686"><span class="lineNum"> 686 </span> :<span class="lineNoCov"> 0 : dt_add_property(np, &quot;primary&quot;, NULL, 0);</span></a>
+<a name="687"><span class="lineNum"> 687 </span> : : }</a>
+<a name="688"><span class="lineNum"> 688 </span> : : </a>
+<a name="689"><span class="lineNum"> 689 </span> : : /*</a>
+<a name="690"><span class="lineNum"> 690 </span> : : * Add sw checkstop scom address (ibm,sw-checkstop-fir)</a>
+<a name="691"><span class="lineNum"> 691 </span> : : *</a>
+<a name="692"><span class="lineNum"> 692 </span> : : * The latest HDAT versions have sw checkstop scom address</a>
+<a name="693"><span class="lineNum"> 693 </span> : : * info. But not sure from which version onwards (at least</a>
+<a name="694"><span class="lineNum"> 694 </span> : : * HDAT spec do not mention that explicitly). Hence use the</a>
+<a name="695"><span class="lineNum"> 695 </span> : : * sppcrd struct size returned by HDIF_get_idata to figure out</a>
+<a name="696"><span class="lineNum"> 696 </span> : : * whether it contains sw checkstop scom address info. Also</a>
+<a name="697"><span class="lineNum"> 697 </span> : : * check if sw_xstop_fir_scom address is non-zero.</a>
+<a name="698"><span class="lineNum"> 698 </span> : : */</a>
+<a name="699"><span class="lineNum"> 699 </span> :<span class="lineCov"> 6 : if ((csize &gt;= (offsetof(struct sppcrd_chip_info,</span></a>
+<a name="700"><span class="lineNum"> 700 </span> :<span class="lineNoCov"> 0 : sw_xstop_fir_bitpos) + 1)) &amp;&amp;</span></a>
+<a name="701"><span class="lineNum"> 701 </span> :<span class="lineNoCov"> 0 : cinfo-&gt;sw_xstop_fir_scom) {</span></a>
+<a name="702"><span class="lineNum"> 702 </span> :<span class="lineNoCov"> 0 : uint8_t fir_bit = cinfo-&gt;sw_xstop_fir_bitpos;</span></a>
+<a name="703"><span class="lineNum"> 703 </span> : : </a>
+<a name="704"><span class="lineNum"> 704 </span> :<span class="lineNoCov"> 0 : if (!dt_find_property(dt_root, &quot;ibm,sw-checkstop-fir&quot;))</span></a>
+<a name="705"><span class="lineNum"> 705 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dt_root,</span></a>
+<a name="706"><span class="lineNum"> 706 </span> : : &quot;ibm,sw-checkstop-fir&quot;,</a>
+<a name="707"><span class="lineNum"> 707 </span> : : be32_to_cpu(cinfo-&gt;sw_xstop_fir_scom),</a>
+<a name="708"><span class="lineNum"> 708 </span> : : fir_bit);</a>
+<a name="709"><span class="lineNum"> 709 </span> : : }</a>
+<a name="710"><span class="lineNum"> 710 </span> : : </a>
+<a name="711"><span class="lineNum"> 711 </span> :<span class="lineCov"> 6 : if (proc_gen &gt;= proc_gen_p10) {</span></a>
+<a name="712"><span class="lineNum"> 712 </span> :<span class="lineNoCov"> 0 : uint8_t primary_loc = cinfo-&gt;primary_topology_loc;</span></a>
+<a name="713"><span class="lineNum"> 713 </span> : : </a>
+<a name="714"><span class="lineNum"> 714 </span> :<span class="lineNoCov"> 0 : if (primary_loc &gt;= CHIP_MAX_TOPOLOGY_ENTRIES) {</span></a>
+<a name="715"><span class="lineNum"> 715 </span> :<span class="lineNoCov"> 0 : prerror(&quot;XSCOM: Invalid primary topology index %d\n&quot;,</span></a>
+<a name="716"><span class="lineNum"> 716 </span> : : primary_loc);</a>
+<a name="717"><span class="lineNum"> 717 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="718"><span class="lineNum"> 718 </span> : : }</a>
+<a name="719"><span class="lineNum"> 719 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(np, &quot;ibm,primary-topology-index&quot;,</span></a>
+<a name="720"><span class="lineNum"> 720 </span> : : cinfo-&gt;topology_id_table[primary_loc]);</a>
+<a name="721"><span class="lineNum"> 721 </span> : : }</a>
+<a name="722"><span class="lineNum"> 722 </span> : : }</a>
+<a name="723"><span class="lineNum"> 723 </span> : : </a>
+<a name="724"><span class="lineNum"> 724 </span> :<span class="lineCov"> 2 : return i &gt; 0;</span></a>
+<a name="725"><span class="lineNum"> 725 </span> : : }</a>
+<a name="726"><span class="lineNum"> 726 </span> : : </a>
+<a name="727"><span class="lineNum"> 727 </span> :<span class="lineCov"> 2 : static void add_xscom(void)</span></a>
+<a name="728"><span class="lineNum"> 728 </span> : : {</a>
+<a name="729"><span class="lineNum"> 729 </span> : : const void *ms_vpd;</a>
+<a name="730"><span class="lineNum"> 730 </span> : : const struct msvpd_pmover_bsr_synchro *pmbs;</a>
+<a name="731"><span class="lineNum"> 731 </span> : : unsigned int size;</a>
+<a name="732"><span class="lineNum"> 732 </span> : : uint64_t xscom_base;</a>
+<a name="733"><span class="lineNum"> 733 </span> : : </a>
+<a name="734"><span class="lineNum"> 734 </span> :<span class="lineCov"> 2 : ms_vpd = get_hdif(&amp;spira.ntuples.ms_vpd, MSVPD_HDIF_SIG);</span></a>
+<a name="735"><span class="lineNum"> 735 </span> :<span class="lineCov"> 2 : if (!ms_vpd) {</span></a>
+<a name="736"><span class="lineNum"> 736 </span> :<span class="lineNoCov"> 0 : prerror(&quot;XSCOM: Can't find MS VPD\n&quot;);</span></a>
+<a name="737"><span class="lineNum"> 737 </span> :<span class="lineCov"> 2 : return;</span></a>
+<a name="738"><span class="lineNum"> 738 </span> : : }</a>
<a name="739"><span class="lineNum"> 739 </span> : : </a>
-<a name="740"><span class="lineNum"> 740 </span> :<span class="lineCov"> 6 : dt_add_property_cells(node, &quot;reg&quot;, addr, len);</span></a>
-<a name="741"><span class="lineNum"> 741 </span> :<span class="lineCov"> 6 : dt_add_property_strings(node, &quot;compatible&quot;, &quot;ibm,power-chiptod&quot;,</span></a>
-<a name="742"><span class="lineNum"> 742 </span> : : compat_str);</a>
-<a name="743"><span class="lineNum"> 743 </span> : : </a>
-<a name="744"><span class="lineNum"> 744 </span> :<span class="lineCov"> 6 : if (flags &amp; CHIPTOD_ID_FLAGS_PRIMARY)</span></a>
-<a name="745"><span class="lineNum"> 745 </span> :<span class="lineCov"> 2 : dt_add_property(node, &quot;primary&quot;, NULL, 0);</span></a>
-<a name="746"><span class="lineNum"> 746 </span> :<span class="lineCov"> 6 : if (flags &amp; CHIPTOD_ID_FLAGS_SECONDARY)</span></a>
-<a name="747"><span class="lineNum"> 747 </span> :<span class="lineCov"> 2 : dt_add_property(node, &quot;secondary&quot;, NULL, 0);</span></a>
-<a name="748"><span class="lineNum"> 748 </span> : : }</a>
-<a name="749"><span class="lineNum"> 749 </span> : : </a>
-<a name="750"><span class="lineNum"> 750 </span> :<span class="lineCov"> 2 : static bool add_chiptod_old(void)</span></a>
-<a name="751"><span class="lineNum"> 751 </span> : : {</a>
-<a name="752"><span class="lineNum"> 752 </span> : : const void *hdif;</a>
-<a name="753"><span class="lineNum"> 753 </span> : : unsigned int i;</a>
-<a name="754"><span class="lineNum"> 754 </span> :<span class="lineCov"> 2 : bool found = false;</span></a>
+<a name="740"><span class="lineNum"> 740 </span> :<span class="lineCov"> 2 : pmbs = HDIF_get_idata(ms_vpd, MSVPD_IDATA_PMOVER_SYNCHRO, &amp;size);</span></a>
+<a name="741"><span class="lineNum"> 741 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(pmbs) || size &lt; sizeof(*pmbs)) {</span></a>
+<a name="742"><span class="lineNum"> 742 </span> :<span class="lineNoCov"> 0 : prerror(&quot;XSCOM: absent or bad PMBS size %u @ %p\n&quot;, size, pmbs);</span></a>
+<a name="743"><span class="lineNum"> 743 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="744"><span class="lineNum"> 744 </span> : : }</a>
+<a name="745"><span class="lineNum"> 745 </span> : : </a>
+<a name="746"><span class="lineNum"> 746 </span> :<span class="lineCov"> 2 : if (!(be32_to_cpu(pmbs-&gt;flags) &amp; MSVPD_PMS_FLAG_XSCOMBASE_VALID)) {</span></a>
+<a name="747"><span class="lineNum"> 747 </span> :<span class="lineNoCov"> 0 : prerror(&quot;XSCOM: No XSCOM base in PMBS, using default\n&quot;);</span></a>
+<a name="748"><span class="lineNum"> 748 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="749"><span class="lineNum"> 749 </span> : : }</a>
+<a name="750"><span class="lineNum"> 750 </span> : : </a>
+<a name="751"><span class="lineNum"> 751 </span> :<span class="lineCov"> 2 : xscom_base = be64_to_cpu(pmbs-&gt;xscom_addr);</span></a>
+<a name="752"><span class="lineNum"> 752 </span> : : </a>
+<a name="753"><span class="lineNum"> 753 </span> : : /* Get rid of the top bits */</a>
+<a name="754"><span class="lineNum"> 754 </span> :<span class="lineCov"> 2 : xscom_base = cleanup_addr(xscom_base);</span></a>
<a name="755"><span class="lineNum"> 755 </span> : : </a>
-<a name="756"><span class="lineNum"> 756 </span> : : /*</a>
-<a name="757"><span class="lineNum"> 757 </span> : : * Locate chiptod ID structures in SPIRA</a>
-<a name="758"><span class="lineNum"> 758 </span> : : */</a>
-<a name="759"><span class="lineNum"> 759 </span> :<span class="lineCov"> 2 : if (!get_hdif(&amp;spira.ntuples.chip_tod, &quot;TOD &quot;))</span></a>
-<a name="760"><span class="lineNum"> 760 </span> :<span class="lineCov"> 2 : return found;</span></a>
-<a name="761"><span class="lineNum"> 761 </span> : : </a>
-<a name="762"><span class="lineNum"> 762 </span> :<span class="lineNoCov"> 0 : for_each_ntuple_idx(&amp;spira.ntuples.chip_tod, hdif, i, &quot;TOD &quot;) {</span></a>
-<a name="763"><span class="lineNum"> 763 </span> : : const struct chiptod_chipid *id;</a>
-<a name="764"><span class="lineNum"> 764 </span> : : </a>
-<a name="765"><span class="lineNum"> 765 </span> :<span class="lineNoCov"> 0 : id = HDIF_get_idata(hdif, CHIPTOD_IDATA_CHIPID, NULL);</span></a>
-<a name="766"><span class="lineNum"> 766 </span> :<span class="lineNoCov"> 0 : if (!CHECK_SPPTR(id)) {</span></a>
-<a name="767"><span class="lineNum"> 767 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CHIPTOD: Bad ChipID data %d\n&quot;, i);</span></a>
-<a name="768"><span class="lineNum"> 768 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="769"><span class="lineNum"> 769 </span> : : }</a>
+<a name="756"><span class="lineNum"> 756 </span> : : /* First, try the new proc_chip ntuples for chip data */</a>
+<a name="757"><span class="lineNum"> 757 </span> :<span class="lineCov"> 2 : if (add_xscom_sppcrd(xscom_base))</span></a>
+<a name="758"><span class="lineNum"> 758 </span> :<span class="lineCov"> 2 : return;</span></a>
+<a name="759"><span class="lineNum"> 759 </span> : : }</a>
+<a name="760"><span class="lineNum"> 760 </span> : : </a>
+<a name="761"><span class="lineNum"> 761 </span> :<span class="lineCov"> 6 : static void add_chiptod_node(unsigned int chip_id, int flags)</span></a>
+<a name="762"><span class="lineNum"> 762 </span> : : {</a>
+<a name="763"><span class="lineNum"> 763 </span> : : struct dt_node *node, *xscom_node;</a>
+<a name="764"><span class="lineNum"> 764 </span> : : const char *compat_str;</a>
+<a name="765"><span class="lineNum"> 765 </span> : : uint32_t addr, len;</a>
+<a name="766"><span class="lineNum"> 766 </span> : : </a>
+<a name="767"><span class="lineNum"> 767 </span> :<span class="lineCov"> 6 : if ((flags &amp; CHIPTOD_ID_FLAGS_STATUS_MASK) !=</span></a>
+<a name="768"><span class="lineNum"> 768 </span> : : CHIPTOD_ID_FLAGS_STATUS_OK)</a>
+<a name="769"><span class="lineNum"> 769 </span> :<span class="lineNoCov"> 0 : return;</span></a>
<a name="770"><span class="lineNum"> 770 </span> : : </a>
-<a name="771"><span class="lineNum"> 771 </span> :<span class="lineNoCov"> 0 : add_chiptod_node(pcid_to_chip_id(be32_to_cpu(id-&gt;chip_id)),</span></a>
-<a name="772"><span class="lineNum"> 772 </span> :<span class="lineNoCov"> 0 : be32_to_cpu(id-&gt;flags));</span></a>
-<a name="773"><span class="lineNum"> 773 </span> :<span class="lineNoCov"> 0 : found = true;</span></a>
-<a name="774"><span class="lineNum"> 774 </span> : : }</a>
-<a name="775"><span class="lineNum"> 775 </span> :<span class="lineNoCov"> 0 : return found;</span></a>
-<a name="776"><span class="lineNum"> 776 </span> : : }</a>
-<a name="777"><span class="lineNum"> 777 </span> : : </a>
-<a name="778"><span class="lineNum"> 778 </span> :<span class="lineCov"> 2 : static bool add_chiptod_new(void)</span></a>
-<a name="779"><span class="lineNum"> 779 </span> : : {</a>
-<a name="780"><span class="lineNum"> 780 </span> : : const void *hdif;</a>
-<a name="781"><span class="lineNum"> 781 </span> : : unsigned int i;</a>
-<a name="782"><span class="lineNum"> 782 </span> :<span class="lineCov"> 2 : bool found = false;</span></a>
-<a name="783"><span class="lineNum"> 783 </span> : : </a>
-<a name="784"><span class="lineNum"> 784 </span> : : /*</a>
-<a name="785"><span class="lineNum"> 785 </span> : : * Locate Proc Chip ID structures in SPIRA</a>
-<a name="786"><span class="lineNum"> 786 </span> : : */</a>
-<a name="787"><span class="lineNum"> 787 </span> :<span class="lineCov"> 2 : if (!get_hdif(&amp;spira.ntuples.proc_chip, SPPCRD_HDIF_SIG))</span></a>
-<a name="788"><span class="lineNum"> 788 </span> :<span class="lineNoCov"> 0 : return found;</span></a>
-<a name="789"><span class="lineNum"> 789 </span> : : </a>
-<a name="790"><span class="lineNum"> 790 </span> :<span class="lineCov"> 66 : for_each_ntuple_idx(&amp;spira.ntuples.proc_chip, hdif, i,</span></a>
-<a name="791"><span class="lineNum"> 791 </span> : : SPPCRD_HDIF_SIG) {</a>
-<a name="792"><span class="lineNum"> 792 </span> : : const struct sppcrd_chip_info *cinfo;</a>
-<a name="793"><span class="lineNum"> 793 </span> : : const struct sppcrd_chip_tod *tinfo;</a>
-<a name="794"><span class="lineNum"> 794 </span> : : unsigned int size;</a>
-<a name="795"><span class="lineNum"> 795 </span> : : u32 ve, flags;</a>
-<a name="796"><span class="lineNum"> 796 </span> : : </a>
-<a name="797"><span class="lineNum"> 797 </span> :<span class="lineCov"> 64 : cinfo = HDIF_get_idata(hdif, SPPCRD_IDATA_CHIP_INFO, NULL);</span></a>
-<a name="798"><span class="lineNum"> 798 </span> :<span class="lineCov"> 64 : if (!CHECK_SPPTR(cinfo)) {</span></a>
-<a name="799"><span class="lineNum"> 799 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CHIPTOD: Bad ChipID data %d\n&quot;, i);</span></a>
-<a name="800"><span class="lineNum"> 800 </span> :<span class="lineCov"> 58 : continue;</span></a>
-<a name="801"><span class="lineNum"> 801 </span> : : }</a>
-<a name="802"><span class="lineNum"> 802 </span> : : </a>
-<a name="803"><span class="lineNum"> 803 </span> :<span class="lineCov"> 64 : ve = be32_to_cpu(cinfo-&gt;verif_exist_flags) &amp; CHIP_VERIFY_MASK;</span></a>
-<a name="804"><span class="lineNum"> 804 </span> :<span class="lineCov"> 64 : ve &gt;&gt;= CHIP_VERIFY_SHIFT;</span></a>
-<a name="805"><span class="lineNum"> 805 </span> :<span class="lineCov"> 64 : if (ve == CHIP_VERIFY_NOT_INSTALLED ||</span></a>
-<a name="806"><span class="lineNum"> 806 </span> : : ve == CHIP_VERIFY_UNUSABLE)</a>
-<a name="807"><span class="lineNum"> 807 </span> :<span class="lineCov"> 58 : continue;</span></a>
-<a name="808"><span class="lineNum"> 808 </span> : : </a>
-<a name="809"><span class="lineNum"> 809 </span> :<span class="lineCov"> 6 : tinfo = HDIF_get_idata(hdif, SPPCRD_IDATA_CHIP_TOD, &amp;size);</span></a>
-<a name="810"><span class="lineNum"> 810 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(tinfo)) {</span></a>
-<a name="811"><span class="lineNum"> 811 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CHIPTOD: Bad TOD data %d\n&quot;, i);</span></a>
-<a name="812"><span class="lineNum"> 812 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="813"><span class="lineNum"> 813 </span> : : }</a>
-<a name="814"><span class="lineNum"> 814 </span> : : </a>
-<a name="815"><span class="lineNum"> 815 </span> :<span class="lineCov"> 6 : flags = be32_to_cpu(tinfo-&gt;flags);</span></a>
-<a name="816"><span class="lineNum"> 816 </span> : : </a>
-<a name="817"><span class="lineNum"> 817 </span> : : /* The FSP may strip the chiptod info from HDAT; if we find</a>
-<a name="818"><span class="lineNum"> 818 </span> : : * a zero-ed out entry, assume that the chiptod is</a>
-<a name="819"><span class="lineNum"> 819 </span> : : * present, but we don't have any primary/secondary info. In</a>
-<a name="820"><span class="lineNum"> 820 </span> : : * this case, pick chip zero as the master.</a>
-<a name="821"><span class="lineNum"> 821 </span> : : */</a>
-<a name="822"><span class="lineNum"> 822 </span> :<span class="lineCov"> 6 : if (!size) {</span></a>
-<a name="823"><span class="lineNum"> 823 </span> :<span class="lineNoCov"> 0 : flags = CHIPTOD_ID_FLAGS_STATUS_OK;</span></a>
-<a name="824"><span class="lineNum"> 824 </span> :<span class="lineNoCov"> 0 : if (be32_to_cpu(cinfo-&gt;xscom_id) == 0x0)</span></a>
-<a name="825"><span class="lineNum"> 825 </span> :<span class="lineNoCov"> 0 : flags |= CHIPTOD_ID_FLAGS_PRIMARY;</span></a>
-<a name="826"><span class="lineNum"> 826 </span> : : }</a>
-<a name="827"><span class="lineNum"> 827 </span> : : </a>
-<a name="828"><span class="lineNum"> 828 </span> :<span class="lineCov"> 6 : add_chiptod_node(be32_to_cpu(cinfo-&gt;xscom_id), flags);</span></a>
-<a name="829"><span class="lineNum"> 829 </span> :<span class="lineCov"> 6 : found = true;</span></a>
-<a name="830"><span class="lineNum"> 830 </span> : : }</a>
-<a name="831"><span class="lineNum"> 831 </span> :<span class="lineCov"> 2 : return found;</span></a>
-<a name="832"><span class="lineNum"> 832 </span> : : }</a>
-<a name="833"><span class="lineNum"> 833 </span> : : </a>
-<a name="834"><span class="lineNum"> 834 </span> :<span class="lineCov"> 6 : static void add_nx_node(u32 gcid)</span></a>
-<a name="835"><span class="lineNum"> 835 </span> : : {</a>
-<a name="836"><span class="lineNum"> 836 </span> : : struct dt_node *nx;</a>
-<a name="837"><span class="lineNum"> 837 </span> : : u32 addr;</a>
-<a name="838"><span class="lineNum"> 838 </span> : : u32 size;</a>
-<a name="839"><span class="lineNum"> 839 </span> : : struct dt_node *xscom;</a>
-<a name="840"><span class="lineNum"> 840 </span> : : </a>
-<a name="841"><span class="lineNum"> 841 </span> :<span class="lineCov"> 6 : xscom = find_xscom_for_chip(gcid);</span></a>
-<a name="842"><span class="lineNum"> 842 </span> :<span class="lineCov"> 6 : if (xscom == NULL) {</span></a>
-<a name="843"><span class="lineNum"> 843 </span> :<span class="lineNoCov"> 0 : prerror(&quot;NX%d: did not found xscom node.\n&quot;, gcid);</span></a>
-<a name="844"><span class="lineNum"> 844 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="845"><span class="lineNum"> 845 </span> : : }</a>
-<a name="846"><span class="lineNum"> 846 </span> : : </a>
-<a name="847"><span class="lineNum"> 847 </span> : : /*</a>
-<a name="848"><span class="lineNum"> 848 </span> : : * The NX register space is relatively self contained on P7+ but</a>
-<a name="849"><span class="lineNum"> 849 </span> : : * a bit more messy on P8. However it's all contained within the</a>
-<a name="850"><span class="lineNum"> 850 </span> : : * PB chiplet port 1 so we'll stick to that in the &quot;reg&quot; property</a>
-<a name="851"><span class="lineNum"> 851 </span> : : * and let the NX &quot;driver&quot; deal with the details.</a>
-<a name="852"><span class="lineNum"> 852 </span> : : */</a>
-<a name="853"><span class="lineNum"> 853 </span> :<span class="lineCov"> 6 : addr = 0x2010000;</span></a>
-<a name="854"><span class="lineNum"> 854 </span> :<span class="lineCov"> 6 : size = 0x0004000;</span></a>
-<a name="855"><span class="lineNum"> 855 </span> : : </a>
-<a name="856"><span class="lineNum"> 856 </span> :<span class="lineCov"> 6 : nx = dt_new_addr(xscom, &quot;nx&quot;, addr);</span></a>
-<a name="857"><span class="lineNum"> 857 </span> :<span class="lineCov"> 6 : if (!nx)</span></a>
-<a name="858"><span class="lineNum"> 858 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="859"><span class="lineNum"> 859 </span> : : </a>
-<a name="860"><span class="lineNum"> 860 </span> :<span class="lineCov"> 6 : switch (proc_gen) {</span></a>
-<a name="861"><span class="lineNum"> 861 </span> :<span class="lineCov"> 6 : case proc_gen_p8:</span></a>
-<a name="862"><span class="lineNum"> 862 </span> :<span class="lineCov"> 6 : dt_add_property_strings(nx, &quot;compatible&quot;, &quot;ibm,power-nx&quot;,</span></a>
-<a name="863"><span class="lineNum"> 863 </span> : : &quot;ibm,power8-nx&quot;);</a>
-<a name="864"><span class="lineNum"> 864 </span> :<span class="lineCov"> 6 : break;</span></a>
-<a name="865"><span class="lineNum"> 865 </span> :<span class="lineNoCov"> 0 : case proc_gen_p9:</span></a>
-<a name="866"><span class="lineNum"> 866 </span> : : /* POWER9 NX is not software compatible with P8 NX */</a>
-<a name="867"><span class="lineNum"> 867 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(nx, &quot;compatible&quot;, &quot;ibm,power9-nx&quot;);</span></a>
-<a name="868"><span class="lineNum"> 868 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="869"><span class="lineNum"> 869 </span> :<span class="lineNoCov"> 0 : default:</span></a>
-<a name="870"><span class="lineNum"> 870 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="871"><span class="lineNum"> 871 </span> : : }</a>
-<a name="872"><span class="lineNum"> 872 </span> : : </a>
-<a name="873"><span class="lineNum"> 873 </span> :<span class="lineCov"> 6 : dt_add_property_cells(nx, &quot;reg&quot;, addr, size);</span></a>
-<a name="874"><span class="lineNum"> 874 </span> : : }</a>
-<a name="875"><span class="lineNum"> 875 </span> : : </a>
-<a name="876"><span class="lineNum"> 876 </span> :<span class="lineCov"> 2 : static void add_nx(void)</span></a>
-<a name="877"><span class="lineNum"> 877 </span> : : {</a>
-<a name="878"><span class="lineNum"> 878 </span> : : unsigned int i;</a>
-<a name="879"><span class="lineNum"> 879 </span> : : void *hdif;</a>
-<a name="880"><span class="lineNum"> 880 </span> : : </a>
-<a name="881"><span class="lineNum"> 881 </span> :<span class="lineCov"> 66 : for_each_ntuple_idx(&amp;spira.ntuples.proc_chip, hdif, i,</span></a>
-<a name="882"><span class="lineNum"> 882 </span> : : SPPCRD_HDIF_SIG) {</a>
-<a name="883"><span class="lineNum"> 883 </span> : : const struct sppcrd_chip_info *cinfo;</a>
-<a name="884"><span class="lineNum"> 884 </span> : : u32 ve;</a>
-<a name="885"><span class="lineNum"> 885 </span> : : </a>
-<a name="886"><span class="lineNum"> 886 </span> :<span class="lineCov"> 64 : cinfo = HDIF_get_idata(hdif, SPPCRD_IDATA_CHIP_INFO, NULL);</span></a>
-<a name="887"><span class="lineNum"> 887 </span> :<span class="lineCov"> 64 : if (!CHECK_SPPTR(cinfo)) {</span></a>
-<a name="888"><span class="lineNum"> 888 </span> :<span class="lineNoCov"> 0 : prerror(&quot;NX: Bad ChipID data %d\n&quot;, i);</span></a>
-<a name="889"><span class="lineNum"> 889 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="890"><span class="lineNum"> 890 </span> : : }</a>
-<a name="891"><span class="lineNum"> 891 </span> : : </a>
-<a name="892"><span class="lineNum"> 892 </span> :<span class="lineCov"> 64 : ve = be32_to_cpu(cinfo-&gt;verif_exist_flags) &amp; CHIP_VERIFY_MASK;</span></a>
-<a name="893"><span class="lineNum"> 893 </span> :<span class="lineCov"> 64 : ve &gt;&gt;= CHIP_VERIFY_SHIFT;</span></a>
-<a name="894"><span class="lineNum"> 894 </span> :<span class="lineCov"> 64 : if (ve == CHIP_VERIFY_NOT_INSTALLED ||</span></a>
-<a name="895"><span class="lineNum"> 895 </span> : : ve == CHIP_VERIFY_UNUSABLE)</a>
-<a name="896"><span class="lineNum"> 896 </span> :<span class="lineCov"> 58 : continue;</span></a>
-<a name="897"><span class="lineNum"> 897 </span> : : </a>
-<a name="898"><span class="lineNum"> 898 </span> :<span class="lineCov"> 6 : if (cinfo-&gt;nx_state)</span></a>
-<a name="899"><span class="lineNum"> 899 </span> :<span class="lineCov"> 6 : add_nx_node(be32_to_cpu(cinfo-&gt;xscom_id));</span></a>
-<a name="900"><span class="lineNum"> 900 </span> : : }</a>
-<a name="901"><span class="lineNum"> 901 </span> :<span class="lineCov"> 2 : }</span></a>
+<a name="771"><span class="lineNum"> 771 </span> :<span class="lineCov"> 6 : xscom_node = find_xscom_for_chip(chip_id);</span></a>
+<a name="772"><span class="lineNum"> 772 </span> :<span class="lineCov"> 6 : if (!xscom_node) {</span></a>
+<a name="773"><span class="lineNum"> 773 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CHIPTOD: No xscom for chiptod %d?\n&quot;, chip_id);</span></a>
+<a name="774"><span class="lineNum"> 774 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="775"><span class="lineNum"> 775 </span> : : }</a>
+<a name="776"><span class="lineNum"> 776 </span> : : </a>
+<a name="777"><span class="lineNum"> 777 </span> :<span class="lineCov"> 6 : addr = 0x40000;</span></a>
+<a name="778"><span class="lineNum"> 778 </span> :<span class="lineCov"> 6 : len = 0x34;</span></a>
+<a name="779"><span class="lineNum"> 779 </span> : : </a>
+<a name="780"><span class="lineNum"> 780 </span> :<span class="lineCov"> 6 : switch(proc_gen) {</span></a>
+<a name="781"><span class="lineNum"> 781 </span> :<span class="lineCov"> 6 : case proc_gen_p8:</span></a>
+<a name="782"><span class="lineNum"> 782 </span> :<span class="lineCov"> 6 : compat_str = &quot;ibm,power8-chiptod&quot;;</span></a>
+<a name="783"><span class="lineNum"> 783 </span> :<span class="lineCov"> 6 : break;</span></a>
+<a name="784"><span class="lineNum"> 784 </span> :<span class="lineNoCov"> 0 : case proc_gen_p9:</span></a>
+<a name="785"><span class="lineNum"> 785 </span> :<span class="lineNoCov"> 0 : compat_str = &quot;ibm,power9-chiptod&quot;;</span></a>
+<a name="786"><span class="lineNum"> 786 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="787"><span class="lineNum"> 787 </span> :<span class="lineNoCov"> 0 : case proc_gen_p10:</span></a>
+<a name="788"><span class="lineNum"> 788 </span> :<span class="lineNoCov"> 0 : compat_str = &quot;ibm,power10-chiptod&quot;;</span></a>
+<a name="789"><span class="lineNum"> 789 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="790"><span class="lineNum"> 790 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="791"><span class="lineNum"> 791 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="792"><span class="lineNum"> 792 </span> : : }</a>
+<a name="793"><span class="lineNum"> 793 </span> : : </a>
+<a name="794"><span class="lineNum"> 794 </span> :<span class="lineCov"> 6 : prlog(PR_DEBUG, &quot;CHIPTOD: Found on chip 0x%x %s\n&quot;, chip_id,</span></a>
+<a name="795"><span class="lineNum"> 795 </span> : : (flags &amp; CHIPTOD_ID_FLAGS_PRIMARY) ? &quot;[primary]&quot; :</a>
+<a name="796"><span class="lineNum"> 796 </span> : : ((flags &amp; CHIPTOD_ID_FLAGS_SECONDARY) ? &quot;[secondary]&quot; : &quot;&quot;));</a>
+<a name="797"><span class="lineNum"> 797 </span> : : </a>
+<a name="798"><span class="lineNum"> 798 </span> :<span class="lineCov"> 6 : node = dt_new_addr(xscom_node, &quot;chiptod&quot;, addr);</span></a>
+<a name="799"><span class="lineNum"> 799 </span> :<span class="lineCov"> 6 : if (!node)</span></a>
+<a name="800"><span class="lineNum"> 800 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="801"><span class="lineNum"> 801 </span> : : </a>
+<a name="802"><span class="lineNum"> 802 </span> :<span class="lineCov"> 6 : dt_add_property_cells(node, &quot;reg&quot;, addr, len);</span></a>
+<a name="803"><span class="lineNum"> 803 </span> :<span class="lineCov"> 6 : dt_add_property_strings(node, &quot;compatible&quot;, &quot;ibm,power-chiptod&quot;,</span></a>
+<a name="804"><span class="lineNum"> 804 </span> : : compat_str);</a>
+<a name="805"><span class="lineNum"> 805 </span> : : </a>
+<a name="806"><span class="lineNum"> 806 </span> :<span class="lineCov"> 6 : if (flags &amp; CHIPTOD_ID_FLAGS_PRIMARY)</span></a>
+<a name="807"><span class="lineNum"> 807 </span> :<span class="lineCov"> 2 : dt_add_property(node, &quot;primary&quot;, NULL, 0);</span></a>
+<a name="808"><span class="lineNum"> 808 </span> :<span class="lineCov"> 6 : if (flags &amp; CHIPTOD_ID_FLAGS_SECONDARY)</span></a>
+<a name="809"><span class="lineNum"> 809 </span> :<span class="lineCov"> 2 : dt_add_property(node, &quot;secondary&quot;, NULL, 0);</span></a>
+<a name="810"><span class="lineNum"> 810 </span> : : }</a>
+<a name="811"><span class="lineNum"> 811 </span> : : </a>
+<a name="812"><span class="lineNum"> 812 </span> :<span class="lineCov"> 2 : static bool add_chiptod_old(void)</span></a>
+<a name="813"><span class="lineNum"> 813 </span> : : {</a>
+<a name="814"><span class="lineNum"> 814 </span> : : const void *hdif;</a>
+<a name="815"><span class="lineNum"> 815 </span> : : unsigned int i;</a>
+<a name="816"><span class="lineNum"> 816 </span> :<span class="lineCov"> 2 : bool found = false;</span></a>
+<a name="817"><span class="lineNum"> 817 </span> : : </a>
+<a name="818"><span class="lineNum"> 818 </span> : : /*</a>
+<a name="819"><span class="lineNum"> 819 </span> : : * Locate chiptod ID structures in SPIRA</a>
+<a name="820"><span class="lineNum"> 820 </span> : : */</a>
+<a name="821"><span class="lineNum"> 821 </span> :<span class="lineCov"> 2 : if (!get_hdif(&amp;spira.ntuples.chip_tod, &quot;TOD &quot;))</span></a>
+<a name="822"><span class="lineNum"> 822 </span> :<span class="lineCov"> 2 : return found;</span></a>
+<a name="823"><span class="lineNum"> 823 </span> : : </a>
+<a name="824"><span class="lineNum"> 824 </span> :<span class="lineNoCov"> 0 : for_each_ntuple_idx(&amp;spira.ntuples.chip_tod, hdif, i, &quot;TOD &quot;) {</span></a>
+<a name="825"><span class="lineNum"> 825 </span> : : const struct chiptod_chipid *id;</a>
+<a name="826"><span class="lineNum"> 826 </span> : : </a>
+<a name="827"><span class="lineNum"> 827 </span> :<span class="lineNoCov"> 0 : id = HDIF_get_idata(hdif, CHIPTOD_IDATA_CHIPID, NULL);</span></a>
+<a name="828"><span class="lineNum"> 828 </span> :<span class="lineNoCov"> 0 : if (!CHECK_SPPTR(id)) {</span></a>
+<a name="829"><span class="lineNum"> 829 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CHIPTOD: Bad ChipID data %d\n&quot;, i);</span></a>
+<a name="830"><span class="lineNum"> 830 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="831"><span class="lineNum"> 831 </span> : : }</a>
+<a name="832"><span class="lineNum"> 832 </span> : : </a>
+<a name="833"><span class="lineNum"> 833 </span> :<span class="lineNoCov"> 0 : add_chiptod_node(pcid_to_chip_id(be32_to_cpu(id-&gt;chip_id)),</span></a>
+<a name="834"><span class="lineNum"> 834 </span> :<span class="lineNoCov"> 0 : be32_to_cpu(id-&gt;flags));</span></a>
+<a name="835"><span class="lineNum"> 835 </span> :<span class="lineNoCov"> 0 : found = true;</span></a>
+<a name="836"><span class="lineNum"> 836 </span> : : }</a>
+<a name="837"><span class="lineNum"> 837 </span> :<span class="lineNoCov"> 0 : return found;</span></a>
+<a name="838"><span class="lineNum"> 838 </span> : : }</a>
+<a name="839"><span class="lineNum"> 839 </span> : : </a>
+<a name="840"><span class="lineNum"> 840 </span> :<span class="lineCov"> 2 : static bool add_chiptod_new(void)</span></a>
+<a name="841"><span class="lineNum"> 841 </span> : : {</a>
+<a name="842"><span class="lineNum"> 842 </span> : : const void *hdif;</a>
+<a name="843"><span class="lineNum"> 843 </span> : : unsigned int i;</a>
+<a name="844"><span class="lineNum"> 844 </span> :<span class="lineCov"> 2 : bool found = false;</span></a>
+<a name="845"><span class="lineNum"> 845 </span> : : </a>
+<a name="846"><span class="lineNum"> 846 </span> : : /*</a>
+<a name="847"><span class="lineNum"> 847 </span> : : * Locate Proc Chip ID structures in SPIRA</a>
+<a name="848"><span class="lineNum"> 848 </span> : : */</a>
+<a name="849"><span class="lineNum"> 849 </span> :<span class="lineCov"> 2 : if (!get_hdif(&amp;spira.ntuples.proc_chip, SPPCRD_HDIF_SIG))</span></a>
+<a name="850"><span class="lineNum"> 850 </span> :<span class="lineNoCov"> 0 : return found;</span></a>
+<a name="851"><span class="lineNum"> 851 </span> : : </a>
+<a name="852"><span class="lineNum"> 852 </span> :<span class="lineCov"> 66 : for_each_ntuple_idx(&amp;spira.ntuples.proc_chip, hdif, i,</span></a>
+<a name="853"><span class="lineNum"> 853 </span> : : SPPCRD_HDIF_SIG) {</a>
+<a name="854"><span class="lineNum"> 854 </span> : : const struct sppcrd_chip_info *cinfo;</a>
+<a name="855"><span class="lineNum"> 855 </span> : : const struct sppcrd_chip_tod *tinfo;</a>
+<a name="856"><span class="lineNum"> 856 </span> : : unsigned int size;</a>
+<a name="857"><span class="lineNum"> 857 </span> : : u32 ve, flags;</a>
+<a name="858"><span class="lineNum"> 858 </span> : : </a>
+<a name="859"><span class="lineNum"> 859 </span> :<span class="lineCov"> 64 : cinfo = HDIF_get_idata(hdif, SPPCRD_IDATA_CHIP_INFO, NULL);</span></a>
+<a name="860"><span class="lineNum"> 860 </span> :<span class="lineCov"> 64 : if (!CHECK_SPPTR(cinfo)) {</span></a>
+<a name="861"><span class="lineNum"> 861 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CHIPTOD: Bad ChipID data %d\n&quot;, i);</span></a>
+<a name="862"><span class="lineNum"> 862 </span> :<span class="lineCov"> 58 : continue;</span></a>
+<a name="863"><span class="lineNum"> 863 </span> : : }</a>
+<a name="864"><span class="lineNum"> 864 </span> : : </a>
+<a name="865"><span class="lineNum"> 865 </span> :<span class="lineCov"> 64 : ve = be32_to_cpu(cinfo-&gt;verif_exist_flags) &amp; CHIP_VERIFY_MASK;</span></a>
+<a name="866"><span class="lineNum"> 866 </span> :<span class="lineCov"> 64 : ve &gt;&gt;= CHIP_VERIFY_SHIFT;</span></a>
+<a name="867"><span class="lineNum"> 867 </span> :<span class="lineCov"> 64 : if (ve == CHIP_VERIFY_NOT_INSTALLED ||</span></a>
+<a name="868"><span class="lineNum"> 868 </span> : : ve == CHIP_VERIFY_UNUSABLE)</a>
+<a name="869"><span class="lineNum"> 869 </span> :<span class="lineCov"> 58 : continue;</span></a>
+<a name="870"><span class="lineNum"> 870 </span> : : </a>
+<a name="871"><span class="lineNum"> 871 </span> :<span class="lineCov"> 6 : tinfo = HDIF_get_idata(hdif, SPPCRD_IDATA_CHIP_TOD, &amp;size);</span></a>
+<a name="872"><span class="lineNum"> 872 </span> :<span class="lineCov"> 6 : if (!CHECK_SPPTR(tinfo)) {</span></a>
+<a name="873"><span class="lineNum"> 873 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CHIPTOD: Bad TOD data %d\n&quot;, i);</span></a>
+<a name="874"><span class="lineNum"> 874 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="875"><span class="lineNum"> 875 </span> : : }</a>
+<a name="876"><span class="lineNum"> 876 </span> : : </a>
+<a name="877"><span class="lineNum"> 877 </span> :<span class="lineCov"> 6 : flags = be32_to_cpu(tinfo-&gt;flags);</span></a>
+<a name="878"><span class="lineNum"> 878 </span> : : </a>
+<a name="879"><span class="lineNum"> 879 </span> : : /* The FSP may strip the chiptod info from HDAT; if we find</a>
+<a name="880"><span class="lineNum"> 880 </span> : : * a zero-ed out entry, assume that the chiptod is</a>
+<a name="881"><span class="lineNum"> 881 </span> : : * present, but we don't have any primary/secondary info. In</a>
+<a name="882"><span class="lineNum"> 882 </span> : : * this case, pick chip zero as the master.</a>
+<a name="883"><span class="lineNum"> 883 </span> : : */</a>
+<a name="884"><span class="lineNum"> 884 </span> :<span class="lineCov"> 6 : if (!size) {</span></a>
+<a name="885"><span class="lineNum"> 885 </span> :<span class="lineNoCov"> 0 : flags = CHIPTOD_ID_FLAGS_STATUS_OK;</span></a>
+<a name="886"><span class="lineNum"> 886 </span> :<span class="lineNoCov"> 0 : if (be32_to_cpu(cinfo-&gt;xscom_id) == 0x0)</span></a>
+<a name="887"><span class="lineNum"> 887 </span> :<span class="lineNoCov"> 0 : flags |= CHIPTOD_ID_FLAGS_PRIMARY;</span></a>
+<a name="888"><span class="lineNum"> 888 </span> : : }</a>
+<a name="889"><span class="lineNum"> 889 </span> : : </a>
+<a name="890"><span class="lineNum"> 890 </span> :<span class="lineCov"> 6 : add_chiptod_node(get_xscom_id(cinfo), flags);</span></a>
+<a name="891"><span class="lineNum"> 891 </span> :<span class="lineCov"> 6 : found = true;</span></a>
+<a name="892"><span class="lineNum"> 892 </span> : : }</a>
+<a name="893"><span class="lineNum"> 893 </span> :<span class="lineCov"> 2 : return found;</span></a>
+<a name="894"><span class="lineNum"> 894 </span> : : }</a>
+<a name="895"><span class="lineNum"> 895 </span> : : </a>
+<a name="896"><span class="lineNum"> 896 </span> :<span class="lineCov"> 6 : static void add_nx_node(u32 gcid)</span></a>
+<a name="897"><span class="lineNum"> 897 </span> : : {</a>
+<a name="898"><span class="lineNum"> 898 </span> : : struct dt_node *nx;</a>
+<a name="899"><span class="lineNum"> 899 </span> : : u32 addr;</a>
+<a name="900"><span class="lineNum"> 900 </span> : : u32 size;</a>
+<a name="901"><span class="lineNum"> 901 </span> : : struct dt_node *xscom;</a>
<a name="902"><span class="lineNum"> 902 </span> : : </a>
-<a name="903"><span class="lineNum"> 903 </span> :<span class="lineCov"> 2 : static void add_nmmu(void)</span></a>
-<a name="904"><span class="lineNum"> 904 </span> : : {</a>
-<a name="905"><span class="lineNum"> 905 </span> : : struct dt_node *xscom, *nmmu;</a>
-<a name="906"><span class="lineNum"> 906 </span> : : </a>
-<a name="907"><span class="lineNum"> 907 </span> : : /* Nest MMU only exists on POWER9 */</a>
-<a name="908"><span class="lineNum"> 908 </span> :<span class="lineCov"> 2 : if (proc_gen != proc_gen_p9)</span></a>
-<a name="909"><span class="lineNum"> 909 </span> :<span class="lineCov"> 2 : return;</span></a>
-<a name="910"><span class="lineNum"> 910 </span> : : </a>
-<a name="911"><span class="lineNum"> 911 </span> :<span class="lineNoCov"> 0 : dt_for_each_compatible(dt_root, xscom, &quot;ibm,xscom&quot;) {</span></a>
-<a name="912"><span class="lineNum"> 912 </span> :<span class="lineNoCov"> 0 : nmmu = dt_new_addr(xscom, &quot;nmmu&quot;, 0x5012c40);</span></a>
-<a name="913"><span class="lineNum"> 913 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(nmmu, &quot;compatible&quot;, &quot;ibm,power9-nest-mmu&quot;);</span></a>
-<a name="914"><span class="lineNum"> 914 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(nmmu, &quot;reg&quot;, 0x5012c40, 0x20);</span></a>
-<a name="915"><span class="lineNum"> 915 </span> : : }</a>
-<a name="916"><span class="lineNum"> 916 </span> : : }</a>
+<a name="903"><span class="lineNum"> 903 </span> :<span class="lineCov"> 6 : xscom = find_xscom_for_chip(gcid);</span></a>
+<a name="904"><span class="lineNum"> 904 </span> :<span class="lineCov"> 6 : if (xscom == NULL) {</span></a>
+<a name="905"><span class="lineNum"> 905 </span> :<span class="lineNoCov"> 0 : prerror(&quot;NX%d: did not found xscom node.\n&quot;, gcid);</span></a>
+<a name="906"><span class="lineNum"> 906 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="907"><span class="lineNum"> 907 </span> : : }</a>
+<a name="908"><span class="lineNum"> 908 </span> : : </a>
+<a name="909"><span class="lineNum"> 909 </span> : : /*</a>
+<a name="910"><span class="lineNum"> 910 </span> : : * The NX register space is relatively self contained on P7+ but</a>
+<a name="911"><span class="lineNum"> 911 </span> : : * a bit more messy on P8. However it's all contained within the</a>
+<a name="912"><span class="lineNum"> 912 </span> : : * PB chiplet port 1 so we'll stick to that in the &quot;reg&quot; property</a>
+<a name="913"><span class="lineNum"> 913 </span> : : * and let the NX &quot;driver&quot; deal with the details.</a>
+<a name="914"><span class="lineNum"> 914 </span> : : */</a>
+<a name="915"><span class="lineNum"> 915 </span> :<span class="lineCov"> 6 : addr = 0x2010000;</span></a>
+<a name="916"><span class="lineNum"> 916 </span> :<span class="lineCov"> 6 : size = 0x0004000;</span></a>
<a name="917"><span class="lineNum"> 917 </span> : : </a>
-<a name="918"><span class="lineNum"> 918 </span> :<span class="lineNoCov"> 0 : static void dt_init_secureboot_node(const struct iplparams_sysparams *sysparams)</span></a>
-<a name="919"><span class="lineNum"> 919 </span> : : {</a>
-<a name="920"><span class="lineNum"> 920 </span> : : struct dt_node *node;</a>
-<a name="921"><span class="lineNum"> 921 </span> : : u16 sys_sec_setting;</a>
-<a name="922"><span class="lineNum"> 922 </span> : : u16 hw_key_hash_size;</a>
-<a name="923"><span class="lineNum"> 923 </span> : : u16 host_fw_key_clear;</a>
-<a name="924"><span class="lineNum"> 924 </span> : : </a>
-<a name="925"><span class="lineNum"> 925 </span> :<span class="lineNoCov"> 0 : node = dt_new(dt_root, &quot;ibm,secureboot&quot;);</span></a>
-<a name="926"><span class="lineNum"> 926 </span> :<span class="lineNoCov"> 0 : assert(node);</span></a>
-<a name="927"><span class="lineNum"> 927 </span> : : </a>
-<a name="928"><span class="lineNum"> 928 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(node, &quot;compatible&quot;,</span></a>
-<a name="929"><span class="lineNum"> 929 </span> : : &quot;ibm,secureboot&quot;, &quot;ibm,secureboot-v2&quot;);</a>
-<a name="930"><span class="lineNum"> 930 </span> : : </a>
-<a name="931"><span class="lineNum"> 931 </span> :<span class="lineNoCov"> 0 : sys_sec_setting = be16_to_cpu(sysparams-&gt;sys_sec_setting);</span></a>
-<a name="932"><span class="lineNum"> 932 </span> :<span class="lineNoCov"> 0 : if (sys_sec_setting &amp; SEC_CONTAINER_SIG_CHECKING)</span></a>
-<a name="933"><span class="lineNum"> 933 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;secure-enabled&quot;, NULL, 0);</span></a>
-<a name="934"><span class="lineNum"> 934 </span> :<span class="lineNoCov"> 0 : if (sys_sec_setting &amp; SEC_HASHES_EXTENDED_TO_TPM)</span></a>
-<a name="935"><span class="lineNum"> 935 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;trusted-enabled&quot;, NULL, 0);</span></a>
-<a name="936"><span class="lineNum"> 936 </span> :<span class="lineNoCov"> 0 : if (sys_sec_setting &amp; PHYSICAL_PRESENCE_ASSERTED)</span></a>
-<a name="937"><span class="lineNum"> 937 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;physical-presence-asserted&quot;, NULL, 0);</span></a>
+<a name="918"><span class="lineNum"> 918 </span> :<span class="lineCov"> 6 : nx = dt_new_addr(xscom, &quot;nx&quot;, addr);</span></a>
+<a name="919"><span class="lineNum"> 919 </span> :<span class="lineCov"> 6 : if (!nx)</span></a>
+<a name="920"><span class="lineNum"> 920 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="921"><span class="lineNum"> 921 </span> : : </a>
+<a name="922"><span class="lineNum"> 922 </span> :<span class="lineCov"> 6 : switch (proc_gen) {</span></a>
+<a name="923"><span class="lineNum"> 923 </span> :<span class="lineCov"> 6 : case proc_gen_p8:</span></a>
+<a name="924"><span class="lineNum"> 924 </span> :<span class="lineCov"> 6 : dt_add_property_strings(nx, &quot;compatible&quot;, &quot;ibm,power-nx&quot;,</span></a>
+<a name="925"><span class="lineNum"> 925 </span> : : &quot;ibm,power8-nx&quot;);</a>
+<a name="926"><span class="lineNum"> 926 </span> :<span class="lineCov"> 6 : break;</span></a>
+<a name="927"><span class="lineNum"> 927 </span> :<span class="lineNoCov"> 0 : case proc_gen_p9:</span></a>
+<a name="928"><span class="lineNum"> 928 </span> : : case proc_gen_p10:</a>
+<a name="929"><span class="lineNum"> 929 </span> : : /* POWER9 NX is not software compatible with P8 NX */</a>
+<a name="930"><span class="lineNum"> 930 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(nx, &quot;compatible&quot;, &quot;ibm,power9-nx&quot;);</span></a>
+<a name="931"><span class="lineNum"> 931 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="932"><span class="lineNum"> 932 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="933"><span class="lineNum"> 933 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="934"><span class="lineNum"> 934 </span> : : }</a>
+<a name="935"><span class="lineNum"> 935 </span> : : </a>
+<a name="936"><span class="lineNum"> 936 </span> :<span class="lineCov"> 6 : dt_add_property_cells(nx, &quot;reg&quot;, addr, size);</span></a>
+<a name="937"><span class="lineNum"> 937 </span> : : }</a>
<a name="938"><span class="lineNum"> 938 </span> : : </a>
-<a name="939"><span class="lineNum"> 939 </span> :<span class="lineNoCov"> 0 : host_fw_key_clear = be16_to_cpu(sysparams-&gt;host_fw_key_clear);</span></a>
-<a name="940"><span class="lineNum"> 940 </span> :<span class="lineNoCov"> 0 : if (host_fw_key_clear &amp; KEY_CLEAR_OS_KEYS)</span></a>
-<a name="941"><span class="lineNum"> 941 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;clear-os-keys&quot;, NULL, 0);</span></a>
-<a name="942"><span class="lineNum"> 942 </span> :<span class="lineNoCov"> 0 : if (host_fw_key_clear &amp; KEY_CLEAR_MFG)</span></a>
-<a name="943"><span class="lineNum"> 943 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;clear-mfg-keys&quot;, NULL, 0);</span></a>
-<a name="944"><span class="lineNum"> 944 </span> :<span class="lineNoCov"> 0 : if (host_fw_key_clear &amp; KEY_CLEAR_ALL)</span></a>
-<a name="945"><span class="lineNum"> 945 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;clear-all-keys&quot;, NULL, 0);</span></a>
-<a name="946"><span class="lineNum"> 946 </span> : : </a>
-<a name="947"><span class="lineNum"> 947 </span> :<span class="lineNoCov"> 0 : hw_key_hash_size = be16_to_cpu(sysparams-&gt;hw_key_hash_size);</span></a>
+<a name="939"><span class="lineNum"> 939 </span> :<span class="lineCov"> 2 : static void add_nx(void)</span></a>
+<a name="940"><span class="lineNum"> 940 </span> : : {</a>
+<a name="941"><span class="lineNum"> 941 </span> : : unsigned int i;</a>
+<a name="942"><span class="lineNum"> 942 </span> : : void *hdif;</a>
+<a name="943"><span class="lineNum"> 943 </span> : : </a>
+<a name="944"><span class="lineNum"> 944 </span> :<span class="lineCov"> 66 : for_each_ntuple_idx(&amp;spira.ntuples.proc_chip, hdif, i,</span></a>
+<a name="945"><span class="lineNum"> 945 </span> : : SPPCRD_HDIF_SIG) {</a>
+<a name="946"><span class="lineNum"> 946 </span> : : const struct sppcrd_chip_info *cinfo;</a>
+<a name="947"><span class="lineNum"> 947 </span> : : u32 ve;</a>
<a name="948"><span class="lineNum"> 948 </span> : : </a>
-<a name="949"><span class="lineNum"> 949 </span> : : /* Prevent hw-key-hash buffer overflow by truncating hw-key-hash-size if</a>
-<a name="950"><span class="lineNum"> 950 </span> : : * it is bigger than the hw-key-hash buffer.</a>
-<a name="951"><span class="lineNum"> 951 </span> : : * Secure boot will be enforced later in skiboot, if the hw-key-hash-size</a>
-<a name="952"><span class="lineNum"> 952 </span> : : * was not supposed to be SYSPARAMS_HW_KEY_HASH_MAX.</a>
-<a name="953"><span class="lineNum"> 953 </span> : : */</a>
-<a name="954"><span class="lineNum"> 954 </span> :<span class="lineNoCov"> 0 : if (hw_key_hash_size &gt; SYSPARAMS_HW_KEY_HASH_MAX) {</span></a>
-<a name="955"><span class="lineNum"> 955 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;IPLPARAMS: hw-key-hash-size=%d too big, &quot;</span></a>
-<a name="956"><span class="lineNum"> 956 </span> : : &quot;truncating to %d\n&quot;, hw_key_hash_size,</a>
-<a name="957"><span class="lineNum"> 957 </span> : : SYSPARAMS_HW_KEY_HASH_MAX);</a>
-<a name="958"><span class="lineNum"> 958 </span> :<span class="lineNoCov"> 0 : hw_key_hash_size = SYSPARAMS_HW_KEY_HASH_MAX;</span></a>
-<a name="959"><span class="lineNum"> 959 </span> : : }</a>
+<a name="949"><span class="lineNum"> 949 </span> :<span class="lineCov"> 64 : cinfo = HDIF_get_idata(hdif, SPPCRD_IDATA_CHIP_INFO, NULL);</span></a>
+<a name="950"><span class="lineNum"> 950 </span> :<span class="lineCov"> 64 : if (!CHECK_SPPTR(cinfo)) {</span></a>
+<a name="951"><span class="lineNum"> 951 </span> :<span class="lineNoCov"> 0 : prerror(&quot;NX: Bad ChipID data %d\n&quot;, i);</span></a>
+<a name="952"><span class="lineNum"> 952 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="953"><span class="lineNum"> 953 </span> : : }</a>
+<a name="954"><span class="lineNum"> 954 </span> : : </a>
+<a name="955"><span class="lineNum"> 955 </span> :<span class="lineCov"> 64 : ve = be32_to_cpu(cinfo-&gt;verif_exist_flags) &amp; CHIP_VERIFY_MASK;</span></a>
+<a name="956"><span class="lineNum"> 956 </span> :<span class="lineCov"> 64 : ve &gt;&gt;= CHIP_VERIFY_SHIFT;</span></a>
+<a name="957"><span class="lineNum"> 957 </span> :<span class="lineCov"> 64 : if (ve == CHIP_VERIFY_NOT_INSTALLED ||</span></a>
+<a name="958"><span class="lineNum"> 958 </span> : : ve == CHIP_VERIFY_UNUSABLE)</a>
+<a name="959"><span class="lineNum"> 959 </span> :<span class="lineCov"> 58 : continue;</span></a>
<a name="960"><span class="lineNum"> 960 </span> : : </a>
-<a name="961"><span class="lineNum"> 961 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;hw-key-hash&quot;, sysparams-&gt;hw_key_hash,</span></a>
-<a name="962"><span class="lineNum"> 962 </span> : : hw_key_hash_size);</a>
-<a name="963"><span class="lineNum"> 963 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;hw-key-hash-size&quot;, hw_key_hash_size);</span></a>
-<a name="964"><span class="lineNum"> 964 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="961"><span class="lineNum"> 961 </span> :<span class="lineCov"> 6 : if (cinfo-&gt;nx_state)</span></a>
+<a name="962"><span class="lineNum"> 962 </span> :<span class="lineCov"> 6 : add_nx_node(get_xscom_id(cinfo));</span></a>
+<a name="963"><span class="lineNum"> 963 </span> : : }</a>
+<a name="964"><span class="lineNum"> 964 </span> :<span class="lineCov"> 2 : }</span></a>
<a name="965"><span class="lineNum"> 965 </span> : : </a>
-<a name="966"><span class="lineNum"> 966 </span> :<span class="lineCov"> 2 : static void opal_dump_add_mpipl_boot(const struct iplparams_iplparams *p)</span></a>
+<a name="966"><span class="lineNum"> 966 </span> :<span class="lineCov"> 2 : static void add_nmmu(void)</span></a>
<a name="967"><span class="lineNum"> 967 </span> : : {</a>
-<a name="968"><span class="lineNum"> 968 </span> :<span class="lineCov"> 2 : u32 mdrt_cnt = be16_to_cpu(spira.ntuples.mdump_res.act_cnt);</span></a>
-<a name="969"><span class="lineNum"> 969 </span> :<span class="lineCov"> 2 : u32 mdrt_max_cnt = MDRT_TABLE_SIZE / sizeof(struct mdrt_table);</span></a>
-<a name="970"><span class="lineNum"> 970 </span> : : struct dt_node *dump_node;</a>
+<a name="968"><span class="lineNum"> 968 </span> : : struct dt_node *xscom, *nmmu;</a>
+<a name="969"><span class="lineNum"> 969 </span> : : u32 scom1, scom2;</a>
+<a name="970"><span class="lineNum"> 970 </span> : : u32 chip_id;</a>
<a name="971"><span class="lineNum"> 971 </span> : : </a>
-<a name="972"><span class="lineNum"> 972 </span> :<span class="lineCov"> 2 : dump_node = dt_find_by_path(opal_node, &quot;dump&quot;);</span></a>
-<a name="973"><span class="lineNum"> 973 </span> :<span class="lineCov"> 2 : if (!dump_node)</span></a>
+<a name="972"><span class="lineNum"> 972 </span> : : /* Nest MMU only exists on POWER9 or later */</a>
+<a name="973"><span class="lineNum"> 973 </span> :<span class="lineCov"> 2 : if (proc_gen &lt; proc_gen_p9)</span></a>
<a name="974"><span class="lineNum"> 974 </span> :<span class="lineCov"> 2 : return;</span></a>
<a name="975"><span class="lineNum"> 975 </span> : : </a>
-<a name="976"><span class="lineNum"> 976 </span> : : /* Check boot params to detect MPIPL boot or not */</a>
-<a name="977"><span class="lineNum"> 977 </span> :<span class="lineNoCov"> 0 : if (p-&gt;cec_ipl_maj_type != IPLPARAMS_MAJ_TYPE_REIPL)</span></a>
-<a name="978"><span class="lineNum"> 978 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="979"><span class="lineNum"> 979 </span> : : </a>
-<a name="980"><span class="lineNum"> 980 </span> : : /*</a>
-<a name="981"><span class="lineNum"> 981 </span> : : * On FSP system we get minor type as post dump IPL and on BMC system</a>
-<a name="982"><span class="lineNum"> 982 </span> : : * we get platform reboot. Hence lets check for both values.</a>
-<a name="983"><span class="lineNum"> 983 </span> : : */</a>
-<a name="984"><span class="lineNum"> 984 </span> :<span class="lineNoCov"> 0 : if (p-&gt;cec_ipl_min_type != IPLPARAMS_MIN_TYPE_POST_DUMP &amp;&amp;</span></a>
-<a name="985"><span class="lineNum"> 985 </span> :<span class="lineNoCov"> 0 : p-&gt;cec_ipl_min_type != IPLPARAMS_MIN_TYPE_PLAT_REBOOT) {</span></a>
-<a name="986"><span class="lineNum"> 986 </span> :<span class="lineNoCov"> 0 : prlog(PR_NOTICE, &quot;DUMP: Non MPIPL reboot &quot;</span></a>
-<a name="987"><span class="lineNum"> 987 </span> : : &quot;[minor type = 0x%x]\n&quot;, p-&gt;cec_ipl_min_type);</a>
-<a name="988"><span class="lineNum"> 988 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="989"><span class="lineNum"> 989 </span> : : }</a>
-<a name="990"><span class="lineNum"> 990 </span> : : </a>
-<a name="991"><span class="lineNum"> 991 </span> :<span class="lineNoCov"> 0 : if (be16_to_cpu(p-&gt;cec_ipl_attrib) != IPLPARAMS_ATTRIB_MEM_PRESERVE) {</span></a>
-<a name="992"><span class="lineNum"> 992 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;DUMP: Memory not preserved\n&quot;);</span></a>
-<a name="993"><span class="lineNum"> 993 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="994"><span class="lineNum"> 994 </span> : : }</a>
-<a name="995"><span class="lineNum"> 995 </span> : : </a>
-<a name="996"><span class="lineNum"> 996 </span> :<span class="lineNoCov"> 0 : if (mdrt_cnt == 0 || mdrt_cnt &gt;= mdrt_max_cnt) {</span></a>
-<a name="997"><span class="lineNum"> 997 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;DUMP: Invalid MDRT count : %x\n&quot;, mdrt_cnt);</span></a>
-<a name="998"><span class="lineNum"> 998 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="999"><span class="lineNum"> 999 </span> : : }</a>
-<a name="1000"><span class="lineNum"> 1000 </span> : : </a>
-<a name="1001"><span class="lineNum"> 1001 </span> :<span class="lineNoCov"> 0 : prlog(PR_NOTICE, &quot;DUMP: Dump found, MDRT count = 0x%x\n&quot;, mdrt_cnt);</span></a>
-<a name="1002"><span class="lineNum"> 1002 </span> : : </a>
-<a name="1003"><span class="lineNum"> 1003 </span> :<span class="lineNoCov"> 0 : dt_add_property(dump_node, &quot;mpipl-boot&quot;, NULL, 0);</span></a>
-<a name="1004"><span class="lineNum"> 1004 </span> : : }</a>
-<a name="1005"><span class="lineNum"> 1005 </span> : : </a>
-<a name="1006"><span class="lineNum"> 1006 </span> :<span class="lineNoCov"> 0 : static void add_opal_dump_node(void)</span></a>
-<a name="1007"><span class="lineNum"> 1007 </span> : : {</a>
-<a name="1008"><span class="lineNum"> 1008 </span> : : __be64 fw_load_area[4];</a>
-<a name="1009"><span class="lineNum"> 1009 </span> : : struct dt_node *node;</a>
+<a name="976"><span class="lineNum"> 976 </span> :<span class="lineNoCov"> 0 : if (proc_gen == proc_gen_p10) {</span></a>
+<a name="977"><span class="lineNum"> 977 </span> :<span class="lineNoCov"> 0 : scom1 = 0x2010c40;</span></a>
+<a name="978"><span class="lineNum"> 978 </span> :<span class="lineNoCov"> 0 : scom2 = 0x3010c40;</span></a>
+<a name="979"><span class="lineNum"> 979 </span> : : } else</a>
+<a name="980"><span class="lineNum"> 980 </span> :<span class="lineNoCov"> 0 : scom1 = 0x5012c40;</span></a>
+<a name="981"><span class="lineNum"> 981 </span> : : </a>
+<a name="982"><span class="lineNum"> 982 </span> :<span class="lineNoCov"> 0 : dt_for_each_compatible(dt_root, xscom, &quot;ibm,xscom&quot;) {</span></a>
+<a name="983"><span class="lineNum"> 983 </span> :<span class="lineNoCov"> 0 : nmmu = dt_new_addr(xscom, &quot;nmmu&quot;, scom1);</span></a>
+<a name="984"><span class="lineNum"> 984 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(nmmu, &quot;compatible&quot;, &quot;ibm,power9-nest-mmu&quot;);</span></a>
+<a name="985"><span class="lineNum"> 985 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(nmmu, &quot;reg&quot;, scom1, 0x20);</span></a>
+<a name="986"><span class="lineNum"> 986 </span> : : </a>
+<a name="987"><span class="lineNum"> 987 </span> : : /*</a>
+<a name="988"><span class="lineNum"> 988 </span> : : * P10 has a second nMMU, a.k.a &quot;south&quot; nMMU.</a>
+<a name="989"><span class="lineNum"> 989 </span> : : * It exists only on P1 and P3</a>
+<a name="990"><span class="lineNum"> 990 </span> : : */</a>
+<a name="991"><span class="lineNum"> 991 </span> :<span class="lineNoCov"> 0 : if (proc_gen == proc_gen_p10) {</span></a>
+<a name="992"><span class="lineNum"> 992 </span> : : </a>
+<a name="993"><span class="lineNum"> 993 </span> :<span class="lineNoCov"> 0 : chip_id = __dt_get_chip_id(xscom);</span></a>
+<a name="994"><span class="lineNum"> 994 </span> :<span class="lineNoCov"> 0 : if (chip_id != 2 &amp;&amp; chip_id != 6)</span></a>
+<a name="995"><span class="lineNum"> 995 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="996"><span class="lineNum"> 996 </span> : : </a>
+<a name="997"><span class="lineNum"> 997 </span> :<span class="lineNoCov"> 0 : nmmu = dt_new_addr(xscom, &quot;nmmu&quot;, scom2);</span></a>
+<a name="998"><span class="lineNum"> 998 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(nmmu, &quot;compatible&quot;, &quot;ibm,power9-nest-mmu&quot;);</span></a>
+<a name="999"><span class="lineNum"> 999 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(nmmu, &quot;reg&quot;, scom2, 0x20);</span></a>
+<a name="1000"><span class="lineNum"> 1000 </span> : : }</a>
+<a name="1001"><span class="lineNum"> 1001 </span> : : }</a>
+<a name="1002"><span class="lineNum"> 1002 </span> : : }</a>
+<a name="1003"><span class="lineNum"> 1003 </span> : : </a>
+<a name="1004"><span class="lineNum"> 1004 </span> :<span class="lineNoCov"> 0 : static void dt_init_secureboot_node(const struct iplparams_sysparams *sysparams)</span></a>
+<a name="1005"><span class="lineNum"> 1005 </span> : : {</a>
+<a name="1006"><span class="lineNum"> 1006 </span> : : struct dt_node *node;</a>
+<a name="1007"><span class="lineNum"> 1007 </span> : : u16 sys_sec_setting;</a>
+<a name="1008"><span class="lineNum"> 1008 </span> : : u16 hw_key_hash_size;</a>
+<a name="1009"><span class="lineNum"> 1009 </span> : : u16 host_fw_key_clear;</a>
<a name="1010"><span class="lineNum"> 1010 </span> : : </a>
-<a name="1011"><span class="lineNum"> 1011 </span> :<span class="lineNoCov"> 0 : opal_node = dt_new_check(dt_root, &quot;ibm,opal&quot;);</span></a>
-<a name="1012"><span class="lineNum"> 1012 </span> :<span class="lineNoCov"> 0 : node = dt_new(opal_node, &quot;dump&quot;);</span></a>
-<a name="1013"><span class="lineNum"> 1013 </span> :<span class="lineNoCov"> 0 : assert(node);</span></a>
-<a name="1014"><span class="lineNum"> 1014 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(node, &quot;compatible&quot;, &quot;ibm,opal-dump&quot;);</span></a>
-<a name="1015"><span class="lineNum"> 1015 </span> : : </a>
-<a name="1016"><span class="lineNum"> 1016 </span> :<span class="lineNoCov"> 0 : fw_load_area[0] = cpu_to_be64((u64)KERNEL_LOAD_BASE);</span></a>
-<a name="1017"><span class="lineNum"> 1017 </span> :<span class="lineNoCov"> 0 : fw_load_area[1] = cpu_to_be64(KERNEL_LOAD_SIZE);</span></a>
-<a name="1018"><span class="lineNum"> 1018 </span> :<span class="lineNoCov"> 0 : fw_load_area[2] = cpu_to_be64((u64)INITRAMFS_LOAD_BASE);</span></a>
-<a name="1019"><span class="lineNum"> 1019 </span> :<span class="lineNoCov"> 0 : fw_load_area[3] = cpu_to_be64(INITRAMFS_LOAD_SIZE);</span></a>
-<a name="1020"><span class="lineNum"> 1020 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;fw-load-area&quot;, fw_load_area, sizeof(fw_load_area));</span></a>
-<a name="1021"><span class="lineNum"> 1021 </span> :<span class="lineNoCov"> 0 : }</span></a>
-<a name="1022"><span class="lineNum"> 1022 </span> : : </a>
-<a name="1023"><span class="lineNum"> 1023 </span> :<span class="lineCov"> 2 : static void add_iplparams_sys_params(const void *iplp, struct dt_node *node)</span></a>
-<a name="1024"><span class="lineNum"> 1024 </span> : : {</a>
-<a name="1025"><span class="lineNum"> 1025 </span> : : const struct iplparams_sysparams *p;</a>
-<a name="1026"><span class="lineNum"> 1026 </span> :<span class="lineCov"> 2 : const struct HDIF_common_hdr *hdif = iplp;</span></a>
-<a name="1027"><span class="lineNum"> 1027 </span> :<span class="lineCov"> 2 : u16 version = be16_to_cpu(hdif-&gt;version);</span></a>
-<a name="1028"><span class="lineNum"> 1028 </span> :<span class="lineCov"> 2 : const char *vendor = NULL;</span></a>
-<a name="1029"><span class="lineNum"> 1029 </span> : : u32 sys_attributes;</a>
-<a name="1030"><span class="lineNum"> 1030 </span> : : u64 bus_speed;</a>
-<a name="1031"><span class="lineNum"> 1031 </span> : : </a>
-<a name="1032"><span class="lineNum"> 1032 </span> :<span class="lineCov"> 2 : p = HDIF_get_idata(iplp, IPLPARAMS_SYSPARAMS, NULL);</span></a>
-<a name="1033"><span class="lineNum"> 1033 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(p)) {</span></a>
-<a name="1034"><span class="lineNum"> 1034 </span> :<span class="lineNoCov"> 0 : prerror(&quot;IPLPARAMS: No SYS Parameters\n&quot;);</span></a>
-<a name="1035"><span class="lineNum"> 1035 </span> : : /* Create a generic compatible property */</a>
-<a name="1036"><span class="lineNum"> 1036 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dt_root, &quot;compatible&quot;, &quot;ibm,powernv&quot;);</span></a>
-<a name="1037"><span class="lineNum"> 1037 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="1038"><span class="lineNum"> 1038 </span> : : }</a>
-<a name="1039"><span class="lineNum"> 1039 </span> : : </a>
-<a name="1040"><span class="lineNum"> 1040 </span> :<span class="lineCov"> 2 : node = dt_new(node, &quot;sys-params&quot;);</span></a>
-<a name="1041"><span class="lineNum"> 1041 </span> :<span class="lineCov"> 2 : assert(node);</span></a>
-<a name="1042"><span class="lineNum"> 1042 </span> :<span class="lineCov"> 2 : dt_add_property_cells(node, &quot;#address-cells&quot;, 0);</span></a>
-<a name="1043"><span class="lineNum"> 1043 </span> :<span class="lineCov"> 2 : dt_add_property_cells(node, &quot;#size-cells&quot;, 0);</span></a>
-<a name="1044"><span class="lineNum"> 1044 </span> : : </a>
-<a name="1045"><span class="lineNum"> 1045 </span> :<span class="lineCov"> 2 : dt_add_property_nstr(node, &quot;ibm,sys-model&quot;, p-&gt;sys_model, 4);</span></a>
+<a name="1011"><span class="lineNum"> 1011 </span> :<span class="lineNoCov"> 0 : node = dt_new(dt_root, &quot;ibm,secureboot&quot;);</span></a>
+<a name="1012"><span class="lineNum"> 1012 </span> :<span class="lineNoCov"> 0 : assert(node);</span></a>
+<a name="1013"><span class="lineNum"> 1013 </span> : : </a>
+<a name="1014"><span class="lineNum"> 1014 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(node, &quot;compatible&quot;,</span></a>
+<a name="1015"><span class="lineNum"> 1015 </span> : : &quot;ibm,secureboot&quot;, &quot;ibm,secureboot-v2&quot;);</a>
+<a name="1016"><span class="lineNum"> 1016 </span> : : </a>
+<a name="1017"><span class="lineNum"> 1017 </span> :<span class="lineNoCov"> 0 : sys_sec_setting = be16_to_cpu(sysparams-&gt;sys_sec_setting);</span></a>
+<a name="1018"><span class="lineNum"> 1018 </span> :<span class="lineNoCov"> 0 : if (sys_sec_setting &amp; SEC_CONTAINER_SIG_CHECKING)</span></a>
+<a name="1019"><span class="lineNum"> 1019 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;secure-enabled&quot;, NULL, 0);</span></a>
+<a name="1020"><span class="lineNum"> 1020 </span> :<span class="lineNoCov"> 0 : if (sys_sec_setting &amp; SEC_HASHES_EXTENDED_TO_TPM)</span></a>
+<a name="1021"><span class="lineNum"> 1021 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;trusted-enabled&quot;, NULL, 0);</span></a>
+<a name="1022"><span class="lineNum"> 1022 </span> :<span class="lineNoCov"> 0 : if (sys_sec_setting &amp; PHYSICAL_PRESENCE_ASSERTED)</span></a>
+<a name="1023"><span class="lineNum"> 1023 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;physical-presence-asserted&quot;, NULL, 0);</span></a>
+<a name="1024"><span class="lineNum"> 1024 </span> : : </a>
+<a name="1025"><span class="lineNum"> 1025 </span> :<span class="lineNoCov"> 0 : host_fw_key_clear = be16_to_cpu(sysparams-&gt;host_fw_key_clear);</span></a>
+<a name="1026"><span class="lineNum"> 1026 </span> :<span class="lineNoCov"> 0 : if (host_fw_key_clear &amp; KEY_CLEAR_OS_KEYS)</span></a>
+<a name="1027"><span class="lineNum"> 1027 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;clear-os-keys&quot;, NULL, 0);</span></a>
+<a name="1028"><span class="lineNum"> 1028 </span> :<span class="lineNoCov"> 0 : if (host_fw_key_clear &amp; KEY_CLEAR_MFG)</span></a>
+<a name="1029"><span class="lineNum"> 1029 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;clear-mfg-keys&quot;, NULL, 0);</span></a>
+<a name="1030"><span class="lineNum"> 1030 </span> :<span class="lineNoCov"> 0 : if (host_fw_key_clear &amp; KEY_CLEAR_ALL)</span></a>
+<a name="1031"><span class="lineNum"> 1031 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;clear-all-keys&quot;, NULL, 0);</span></a>
+<a name="1032"><span class="lineNum"> 1032 </span> : : </a>
+<a name="1033"><span class="lineNum"> 1033 </span> :<span class="lineNoCov"> 0 : hw_key_hash_size = be16_to_cpu(sysparams-&gt;hw_key_hash_size);</span></a>
+<a name="1034"><span class="lineNum"> 1034 </span> : : </a>
+<a name="1035"><span class="lineNum"> 1035 </span> : : /* Prevent hw-key-hash buffer overflow by truncating hw-key-hash-size if</a>
+<a name="1036"><span class="lineNum"> 1036 </span> : : * it is bigger than the hw-key-hash buffer.</a>
+<a name="1037"><span class="lineNum"> 1037 </span> : : * Secure boot will be enforced later in skiboot, if the hw-key-hash-size</a>
+<a name="1038"><span class="lineNum"> 1038 </span> : : * was not supposed to be SYSPARAMS_HW_KEY_HASH_MAX.</a>
+<a name="1039"><span class="lineNum"> 1039 </span> : : */</a>
+<a name="1040"><span class="lineNum"> 1040 </span> :<span class="lineNoCov"> 0 : if (hw_key_hash_size &gt; SYSPARAMS_HW_KEY_HASH_MAX) {</span></a>
+<a name="1041"><span class="lineNum"> 1041 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;IPLPARAMS: hw-key-hash-size=%d too big, &quot;</span></a>
+<a name="1042"><span class="lineNum"> 1042 </span> : : &quot;truncating to %d\n&quot;, hw_key_hash_size,</a>
+<a name="1043"><span class="lineNum"> 1043 </span> : : SYSPARAMS_HW_KEY_HASH_MAX);</a>
+<a name="1044"><span class="lineNum"> 1044 </span> :<span class="lineNoCov"> 0 : hw_key_hash_size = SYSPARAMS_HW_KEY_HASH_MAX;</span></a>
+<a name="1045"><span class="lineNum"> 1045 </span> : : }</a>
<a name="1046"><span class="lineNum"> 1046 </span> : : </a>
-<a name="1047"><span class="lineNum"> 1047 </span> : : /*</a>
-<a name="1048"><span class="lineNum"> 1048 </span> : : * Compatible has up to three entries:</a>
-<a name="1049"><span class="lineNum"> 1049 </span> : : * &quot;ibm,powernv&quot;, the system family and system type.</a>
-<a name="1050"><span class="lineNum"> 1050 </span> : : *</a>
-<a name="1051"><span class="lineNum"> 1051 </span> : : * On P9 and above the family and type strings come from the HDAT</a>
-<a name="1052"><span class="lineNum"> 1052 </span> : : * directly. On P8 we find it from the system ID numbers.</a>
-<a name="1053"><span class="lineNum"> 1053 </span> : : */</a>
-<a name="1054"><span class="lineNum"> 1054 </span> :<span class="lineCov"> 2 : if (proc_gen &gt;= proc_gen_p9) {</span></a>
-<a name="1055"><span class="lineNum"> 1055 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(dt_root, &quot;compatible&quot;, &quot;ibm,powernv&quot;,</span></a>
-<a name="1056"><span class="lineNum"> 1056 </span> : : p-&gt;sys_family_str, p-&gt;sys_type_str);</a>
+<a name="1047"><span class="lineNum"> 1047 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;hw-key-hash&quot;, sysparams-&gt;hw_key_hash,</span></a>
+<a name="1048"><span class="lineNum"> 1048 </span> : : hw_key_hash_size);</a>
+<a name="1049"><span class="lineNum"> 1049 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;hw-key-hash-size&quot;, hw_key_hash_size);</span></a>
+<a name="1050"><span class="lineNum"> 1050 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="1051"><span class="lineNum"> 1051 </span> : : </a>
+<a name="1052"><span class="lineNum"> 1052 </span> :<span class="lineCov"> 2 : static void opal_dump_add_mpipl_boot(const struct iplparams_iplparams *p)</span></a>
+<a name="1053"><span class="lineNum"> 1053 </span> : : {</a>
+<a name="1054"><span class="lineNum"> 1054 </span> :<span class="lineCov"> 2 : u32 mdrt_cnt = be16_to_cpu(spira.ntuples.mdump_res.act_cnt);</span></a>
+<a name="1055"><span class="lineNum"> 1055 </span> :<span class="lineCov"> 2 : u32 mdrt_max_cnt = MDRT_TABLE_SIZE / sizeof(struct mdrt_table);</span></a>
+<a name="1056"><span class="lineNum"> 1056 </span> : : struct dt_node *dump_node;</a>
<a name="1057"><span class="lineNum"> 1057 </span> : : </a>
-<a name="1058"><span class="lineNum"> 1058 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;IPLPARAMS: v0x70 Platform family/type: %s/%s\n&quot;,</span></a>
-<a name="1059"><span class="lineNum"> 1059 </span> : : p-&gt;sys_family_str, p-&gt;sys_type_str);</a>
-<a name="1060"><span class="lineNum"> 1060 </span> : : } else {</a>
-<a name="1061"><span class="lineNum"> 1061 </span> :<span class="lineCov"> 2 : u32 sys_type = be32_to_cpu(p-&gt;system_type);</span></a>
-<a name="1062"><span class="lineNum"> 1062 </span> : : const char *sys_family;</a>
-<a name="1063"><span class="lineNum"> 1063 </span> : : </a>
-<a name="1064"><span class="lineNum"> 1064 </span> :<span class="lineCov"> 2 : switch (sys_type &gt;&gt; 28) {</span></a>
-<a name="1065"><span class="lineNum"> 1065 </span> :<span class="lineNoCov"> 0 : case 0:</span></a>
-<a name="1066"><span class="lineNum"> 1066 </span> :<span class="lineNoCov"> 0 : sys_family = &quot;ibm,squadrons&quot;;</span></a>
-<a name="1067"><span class="lineNum"> 1067 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="1068"><span class="lineNum"> 1068 </span> :<span class="lineNoCov"> 0 : case 1:</span></a>
-<a name="1069"><span class="lineNum"> 1069 </span> :<span class="lineNoCov"> 0 : sys_family = &quot;ibm,eclipz&quot;;</span></a>
-<a name="1070"><span class="lineNum"> 1070 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="1071"><span class="lineNum"> 1071 </span> :<span class="lineNoCov"> 0 : case 2:</span></a>
-<a name="1072"><span class="lineNum"> 1072 </span> :<span class="lineNoCov"> 0 : sys_family = &quot;ibm,apollo&quot;;</span></a>
-<a name="1073"><span class="lineNum"> 1073 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="1074"><span class="lineNum"> 1074 </span> :<span class="lineCov"> 2 : case 3:</span></a>
-<a name="1075"><span class="lineNum"> 1075 </span> :<span class="lineCov"> 2 : sys_family = &quot;ibm,firenze&quot;;</span></a>
-<a name="1076"><span class="lineNum"> 1076 </span> :<span class="lineCov"> 2 : break;</span></a>
-<a name="1077"><span class="lineNum"> 1077 </span> :<span class="lineNoCov"> 0 : default:</span></a>
-<a name="1078"><span class="lineNum"> 1078 </span> :<span class="lineNoCov"> 0 : sys_family = NULL;</span></a>
-<a name="1079"><span class="lineNum"> 1079 </span> :<span class="lineNoCov"> 0 : prerror(&quot;IPLPARAMS: Unknown system family\n&quot;);</span></a>
-<a name="1080"><span class="lineNum"> 1080 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="1081"><span class="lineNum"> 1081 </span> : : }</a>
-<a name="1082"><span class="lineNum"> 1082 </span> : : </a>
-<a name="1083"><span class="lineNum"> 1083 </span> :<span class="lineCov"> 2 : dt_add_property_strings(dt_root, &quot;compatible&quot;, &quot;ibm,powernv&quot;,</span></a>
-<a name="1084"><span class="lineNum"> 1084 </span> : : sys_family);</a>
-<a name="1085"><span class="lineNum"> 1085 </span> :<span class="lineCov"> 2 : prlog(PR_INFO,</span></a>
-<a name="1086"><span class="lineNum"> 1086 </span> : : &quot;IPLPARAMS: Legacy platform family: %s&quot;</a>
-<a name="1087"><span class="lineNum"> 1087 </span> : : &quot; (sys_type=0x%08x)\n&quot;, sys_family, sys_type);</a>
-<a name="1088"><span class="lineNum"> 1088 </span> : : }</a>
-<a name="1089"><span class="lineNum"> 1089 </span> : : </a>
-<a name="1090"><span class="lineNum"> 1090 </span> : : /* Grab nest frequency when available */</a>
-<a name="1091"><span class="lineNum"> 1091 </span> :<span class="lineCov"> 2 : if (version &gt;= 0x005b) {</span></a>
-<a name="1092"><span class="lineNum"> 1092 </span> :<span class="lineCov"> 2 : u64 freq = be32_to_cpu(p-&gt;nest_freq_mhz);</span></a>
-<a name="1093"><span class="lineNum"> 1093 </span> : : </a>
-<a name="1094"><span class="lineNum"> 1094 </span> :<span class="lineCov"> 2 : freq *= 1000000;</span></a>
-<a name="1095"><span class="lineNum"> 1095 </span> :<span class="lineCov"> 2 : dt_add_property_u64(dt_root, &quot;nest-frequency&quot;, freq);</span></a>
-<a name="1096"><span class="lineNum"> 1096 </span> : : }</a>
-<a name="1097"><span class="lineNum"> 1097 </span> : : </a>
-<a name="1098"><span class="lineNum"> 1098 </span> : : /* Grab ABC bus speed */</a>
-<a name="1099"><span class="lineNum"> 1099 </span> :<span class="lineCov"> 2 : bus_speed = be32_to_cpu(p-&gt;abc_bus_speed);</span></a>
-<a name="1100"><span class="lineNum"> 1100 </span> :<span class="lineCov"> 2 : if (bus_speed)</span></a>
-<a name="1101"><span class="lineNum"> 1101 </span> :<span class="lineCov"> 2 : dt_add_property_u64(node, &quot;abc-bus-freq-mhz&quot;, bus_speed);</span></a>
-<a name="1102"><span class="lineNum"> 1102 </span> : : </a>
-<a name="1103"><span class="lineNum"> 1103 </span> : : /* Grab WXYZ bus speed */</a>
-<a name="1104"><span class="lineNum"> 1104 </span> :<span class="lineCov"> 2 : bus_speed = be32_to_cpu(p-&gt;wxyz_bus_speed);</span></a>
-<a name="1105"><span class="lineNum"> 1105 </span> :<span class="lineCov"> 2 : if (bus_speed)</span></a>
-<a name="1106"><span class="lineNum"> 1106 </span> :<span class="lineCov"> 2 : dt_add_property_u64(node, &quot;wxyz-bus-freq-mhz&quot;, bus_speed);</span></a>
-<a name="1107"><span class="lineNum"> 1107 </span> : : </a>
-<a name="1108"><span class="lineNum"> 1108 </span> :<span class="lineCov"> 2 : if (version &gt;= 0x5f)</span></a>
-<a name="1109"><span class="lineNum"> 1109 </span> :<span class="lineCov"> 1 : vendor = p-&gt;sys_vendor;</span></a>
-<a name="1110"><span class="lineNum"> 1110 </span> : : </a>
-<a name="1111"><span class="lineNum"> 1111 </span> : : /* Workaround a bug where we have NULL vendor */</a>
-<a name="1112"><span class="lineNum"> 1112 </span> :<span class="lineCov"> 2 : if (!vendor || vendor[0] == '\0')</span></a>
-<a name="1113"><span class="lineNum"> 1113 </span> :<span class="lineCov"> 2 : vendor = &quot;IBM&quot;;</span></a>
-<a name="1114"><span class="lineNum"> 1114 </span> : : </a>
-<a name="1115"><span class="lineNum"> 1115 </span> :<span class="lineCov"> 2 : dt_add_property_string(dt_root, &quot;vendor&quot;, vendor);</span></a>
-<a name="1116"><span class="lineNum"> 1116 </span> : : </a>
-<a name="1117"><span class="lineNum"> 1117 </span> :<span class="lineCov"> 2 : sys_attributes = be32_to_cpu(p-&gt;sys_attributes);</span></a>
-<a name="1118"><span class="lineNum"> 1118 </span> :<span class="lineCov"> 2 : if (sys_attributes &amp; SYS_ATTR_RISK_LEVEL)</span></a>
-<a name="1119"><span class="lineNum"> 1119 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;elevated-risk-level&quot;, NULL, 0);</span></a>
-<a name="1120"><span class="lineNum"> 1120 </span> : : </a>
-<a name="1121"><span class="lineNum"> 1121 </span> : : /* Populate OPAL dump node */</a>
-<a name="1122"><span class="lineNum"> 1122 </span> :<span class="lineCov"> 2 : if (sys_attributes &amp; SYS_ATTR_MPIPL_SUPPORTED)</span></a>
-<a name="1123"><span class="lineNum"> 1123 </span> :<span class="lineNoCov"> 0 : add_opal_dump_node();</span></a>
-<a name="1124"><span class="lineNum"> 1124 </span> : : </a>
-<a name="1125"><span class="lineNum"> 1125 </span> :<span class="lineCov"> 2 : if (version &gt;= 0x60 &amp;&amp; proc_gen &gt;= proc_gen_p9)</span></a>
-<a name="1126"><span class="lineNum"> 1126 </span> :<span class="lineNoCov"> 0 : dt_init_secureboot_node(p);</span></a>
-<a name="1127"><span class="lineNum"> 1127 </span> : : }</a>
-<a name="1128"><span class="lineNum"> 1128 </span> : : </a>
-<a name="1129"><span class="lineNum"> 1129 </span> :<span class="lineCov"> 2 : static void add_iplparams_ipl_params(const void *iplp, struct dt_node *node)</span></a>
-<a name="1130"><span class="lineNum"> 1130 </span> : : {</a>
-<a name="1131"><span class="lineNum"> 1131 </span> : : const struct iplparams_iplparams *p;</a>
-<a name="1132"><span class="lineNum"> 1132 </span> : : struct dt_node *led_node;</a>
-<a name="1133"><span class="lineNum"> 1133 </span> : : </a>
-<a name="1134"><span class="lineNum"> 1134 </span> :<span class="lineCov"> 2 : p = HDIF_get_idata(iplp, IPLPARAMS_IPLPARAMS, NULL);</span></a>
-<a name="1135"><span class="lineNum"> 1135 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(p)) {</span></a>
-<a name="1136"><span class="lineNum"> 1136 </span> :<span class="lineNoCov"> 0 : prerror(&quot;IPLPARAMS: No IPL Parameters\n&quot;);</span></a>
-<a name="1137"><span class="lineNum"> 1137 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="1138"><span class="lineNum"> 1138 </span> : : }</a>
-<a name="1139"><span class="lineNum"> 1139 </span> : : </a>
-<a name="1140"><span class="lineNum"> 1140 </span> :<span class="lineCov"> 2 : node = dt_new(node, &quot;ipl-params&quot;);</span></a>
-<a name="1141"><span class="lineNum"> 1141 </span> :<span class="lineCov"> 2 : assert(node);</span></a>
-<a name="1142"><span class="lineNum"> 1142 </span> :<span class="lineCov"> 2 : dt_add_property_cells(node, &quot;#address-cells&quot;, 0);</span></a>
-<a name="1143"><span class="lineNum"> 1143 </span> :<span class="lineCov"> 2 : dt_add_property_cells(node, &quot;#size-cells&quot;, 0);</span></a>
-<a name="1144"><span class="lineNum"> 1144 </span> : : </a>
-<a name="1145"><span class="lineNum"> 1145 </span> : : /* On an ASM initiated factory reset, this bit will be set</a>
-<a name="1146"><span class="lineNum"> 1146 </span> : : * and the FSP expects the firmware to reset the PCI bus</a>
-<a name="1147"><span class="lineNum"> 1147 </span> : : * numbers and respond with a Power Down (CE,4D,02) message</a>
-<a name="1148"><span class="lineNum"> 1148 </span> : : */</a>
-<a name="1149"><span class="lineNum"> 1149 </span> :<span class="lineCov"> 2 : if (be32_to_cpu(p-&gt;other_attrib) &amp; IPLPARAMS_OATTR_RST_PCI_BUSNO)</span></a>
-<a name="1150"><span class="lineNum"> 1150 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;pci-busno-reset-ipl&quot;, 1);</span></a>
-<a name="1151"><span class="lineNum"> 1151 </span> :<span class="lineCov"> 2 : dt_add_property_strings(node, &quot;cec-ipl-side&quot;,</span></a>
-<a name="1152"><span class="lineNum"> 1152 </span> : : (p-&gt;ipl_side &amp; IPLPARAMS_CEC_FW_IPL_SIDE_TEMP) ?</a>
-<a name="1153"><span class="lineNum"> 1153 </span> : : &quot;temp&quot; : &quot;perm&quot;);</a>
-<a name="1154"><span class="lineNum"> 1154 </span> :<span class="lineCov"> 2 : if (proc_gen &gt;= proc_gen_p9) {</span></a>
-<a name="1155"><span class="lineNum"> 1155 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(node, &quot;sp-ipl-side&quot;,</span></a>
-<a name="1156"><span class="lineNum"> 1156 </span> : : (p-&gt;ipl_side &amp; IPLPARAMS_FSP_FW_IPL_SIDE_TEMP) ?</a>
-<a name="1157"><span class="lineNum"> 1157 </span> : : &quot;temp&quot; : &quot;perm&quot;);</a>
-<a name="1158"><span class="lineNum"> 1158 </span> : : } else {</a>
-<a name="1159"><span class="lineNum"> 1159 </span> :<span class="lineCov"> 2 : dt_add_property_strings(node, &quot;fsp-ipl-side&quot;,</span></a>
-<a name="1160"><span class="lineNum"> 1160 </span> : : (p-&gt;ipl_side &amp; IPLPARAMS_FSP_FW_IPL_SIDE_TEMP) ?</a>
-<a name="1161"><span class="lineNum"> 1161 </span> : : &quot;temp&quot; : &quot;perm&quot;);</a>
-<a name="1162"><span class="lineNum"> 1162 </span> : : }</a>
-<a name="1163"><span class="lineNum"> 1163 </span> :<span class="lineCov"> 2 : dt_add_property_cells(node, &quot;os-ipl-mode&quot;, p-&gt;os_ipl_mode);</span></a>
-<a name="1164"><span class="lineNum"> 1164 </span> :<span class="lineCov"> 2 : dt_add_property_strings(node, &quot;cec-major-type&quot;,</span></a>
-<a name="1165"><span class="lineNum"> 1165 </span> : : p-&gt;cec_ipl_maj_type ? &quot;hot&quot; : &quot;cold&quot;);</a>
-<a name="1166"><span class="lineNum"> 1166 </span> : : </a>
-<a name="1167"><span class="lineNum"> 1167 </span> : : /* Add LED type info under '/ibm,opal/led' node */</a>
-<a name="1168"><span class="lineNum"> 1168 </span> :<span class="lineCov"> 2 : led_node = dt_find_by_path(opal_node, DT_PROPERTY_LED_NODE);</span></a>
-<a name="1169"><span class="lineNum"> 1169 </span> :<span class="lineCov"> 2 : assert(led_node);</span></a>
-<a name="1170"><span class="lineNum"> 1170 </span> : : </a>
-<a name="1171"><span class="lineNum"> 1171 </span> :<span class="lineCov"> 2 : if (be32_to_cpu(p-&gt;other_attrib) &amp; IPLPARAMS_OATRR_LIGHT_PATH)</span></a>
-<a name="1172"><span class="lineNum"> 1172 </span> :<span class="lineCov"> 2 : dt_add_property_strings(led_node, DT_PROPERTY_LED_MODE,</span></a>
-<a name="1173"><span class="lineNum"> 1173 </span> : : LED_MODE_LIGHT_PATH);</a>
-<a name="1174"><span class="lineNum"> 1174 </span> : : else</a>
-<a name="1175"><span class="lineNum"> 1175 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(led_node, DT_PROPERTY_LED_MODE,</span></a>
-<a name="1176"><span class="lineNum"> 1176 </span> : : LED_MODE_GUIDING_LIGHT);</a>
-<a name="1177"><span class="lineNum"> 1177 </span> : : </a>
-<a name="1178"><span class="lineNum"> 1178 </span> : : /* Populate opal dump result table */</a>
-<a name="1179"><span class="lineNum"> 1179 </span> :<span class="lineCov"> 2 : opal_dump_add_mpipl_boot(p);</span></a>
-<a name="1180"><span class="lineNum"> 1180 </span> : : }</a>
-<a name="1181"><span class="lineNum"> 1181 </span> : : </a>
-<a name="1182"><span class="lineNum"> 1182 </span> :<span class="lineCov"> 2 : static void add_iplparams_serials(const void *iplp, struct dt_node *node)</span></a>
-<a name="1183"><span class="lineNum"> 1183 </span> : : {</a>
-<a name="1184"><span class="lineNum"> 1184 </span> : : const struct iplparms_serial *ipser;</a>
-<a name="1185"><span class="lineNum"> 1185 </span> : : struct dt_node *ser_node;</a>
-<a name="1186"><span class="lineNum"> 1186 </span> : : int count, i;</a>
-<a name="1187"><span class="lineNum"> 1187 </span> : : </a>
-<a name="1188"><span class="lineNum"> 1188 </span> :<span class="lineCov"> 2 : count = HDIF_get_iarray_size(iplp, IPLPARMS_IDATA_SERIAL);</span></a>
-<a name="1189"><span class="lineNum"> 1189 </span> :<span class="lineCov"> 2 : if (count &lt;= 0)</span></a>
-<a name="1190"><span class="lineNum"> 1190 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="1191"><span class="lineNum"> 1191 </span> :<span class="lineCov"> 2 : prlog(PR_INFO, &quot;IPLPARAMS: %d serial ports in array\n&quot;, count);</span></a>
-<a name="1192"><span class="lineNum"> 1192 </span> : : </a>
-<a name="1193"><span class="lineNum"> 1193 </span> :<span class="lineCov"> 2 : node = dt_new(node, &quot;fsp-serial&quot;);</span></a>
-<a name="1194"><span class="lineNum"> 1194 </span> :<span class="lineCov"> 2 : assert(node);</span></a>
-<a name="1195"><span class="lineNum"> 1195 </span> :<span class="lineCov"> 2 : dt_add_property_cells(node, &quot;#address-cells&quot;, 1);</span></a>
-<a name="1196"><span class="lineNum"> 1196 </span> :<span class="lineCov"> 2 : dt_add_property_cells(node, &quot;#size-cells&quot;, 0);</span></a>
-<a name="1197"><span class="lineNum"> 1197 </span> : : </a>
-<a name="1198"><span class="lineNum"> 1198 </span> :<span class="lineCov"> 4 : for (i = 0; i &lt; count; i++) {</span></a>
-<a name="1199"><span class="lineNum"> 1199 </span> : : u16 rsrc_id;</a>
-<a name="1200"><span class="lineNum"> 1200 </span> :<span class="lineCov"> 2 : ipser = HDIF_get_iarray_item(iplp, IPLPARMS_IDATA_SERIAL,</span></a>
-<a name="1201"><span class="lineNum"> 1201 </span> : : i, NULL);</a>
-<a name="1202"><span class="lineNum"> 1202 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(ipser))</span></a>
-<a name="1203"><span class="lineNum"> 1203 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="1204"><span class="lineNum"> 1204 </span> :<span class="lineCov"> 2 : rsrc_id = be16_to_cpu(ipser-&gt;rsrc_id);</span></a>
-<a name="1205"><span class="lineNum"> 1205 </span> :<span class="lineCov"> 2 : prlog(PR_INFO, &quot;IPLPARAMS: Serial %d rsrc: %04x loc: %s\n&quot;,</span></a>
-<a name="1206"><span class="lineNum"> 1206 </span> : : i, rsrc_id, ipser-&gt;loc_code);</a>
-<a name="1207"><span class="lineNum"> 1207 </span> :<span class="lineCov"> 2 : ser_node = dt_new_addr(node, &quot;serial&quot;, rsrc_id);</span></a>
-<a name="1208"><span class="lineNum"> 1208 </span> :<span class="lineCov"> 2 : if (!ser_node)</span></a>
-<a name="1209"><span class="lineNum"> 1209 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="1058"><span class="lineNum"> 1058 </span> :<span class="lineCov"> 2 : dump_node = dt_find_by_path(opal_node, &quot;dump&quot;);</span></a>
+<a name="1059"><span class="lineNum"> 1059 </span> :<span class="lineCov"> 2 : if (!dump_node)</span></a>
+<a name="1060"><span class="lineNum"> 1060 </span> :<span class="lineCov"> 2 : return;</span></a>
+<a name="1061"><span class="lineNum"> 1061 </span> : : </a>
+<a name="1062"><span class="lineNum"> 1062 </span> : : /* Check boot params to detect MPIPL boot or not */</a>
+<a name="1063"><span class="lineNum"> 1063 </span> :<span class="lineNoCov"> 0 : if (p-&gt;cec_ipl_maj_type != IPLPARAMS_MAJ_TYPE_REIPL)</span></a>
+<a name="1064"><span class="lineNum"> 1064 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="1065"><span class="lineNum"> 1065 </span> : : </a>
+<a name="1066"><span class="lineNum"> 1066 </span> : : /*</a>
+<a name="1067"><span class="lineNum"> 1067 </span> : : * On FSP system we get minor type as post dump IPL and on BMC system</a>
+<a name="1068"><span class="lineNum"> 1068 </span> : : * we get platform reboot. Hence lets check for both values.</a>
+<a name="1069"><span class="lineNum"> 1069 </span> : : */</a>
+<a name="1070"><span class="lineNum"> 1070 </span> :<span class="lineNoCov"> 0 : if (p-&gt;cec_ipl_min_type != IPLPARAMS_MIN_TYPE_POST_DUMP &amp;&amp;</span></a>
+<a name="1071"><span class="lineNum"> 1071 </span> :<span class="lineNoCov"> 0 : p-&gt;cec_ipl_min_type != IPLPARAMS_MIN_TYPE_PLAT_REBOOT) {</span></a>
+<a name="1072"><span class="lineNum"> 1072 </span> :<span class="lineNoCov"> 0 : prlog(PR_NOTICE, &quot;DUMP: Non MPIPL reboot &quot;</span></a>
+<a name="1073"><span class="lineNum"> 1073 </span> : : &quot;[minor type = 0x%x]\n&quot;, p-&gt;cec_ipl_min_type);</a>
+<a name="1074"><span class="lineNum"> 1074 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="1075"><span class="lineNum"> 1075 </span> : : }</a>
+<a name="1076"><span class="lineNum"> 1076 </span> : : </a>
+<a name="1077"><span class="lineNum"> 1077 </span> :<span class="lineNoCov"> 0 : if (be16_to_cpu(p-&gt;cec_ipl_attrib) != IPLPARAMS_ATTRIB_MEM_PRESERVE) {</span></a>
+<a name="1078"><span class="lineNum"> 1078 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;DUMP: Memory not preserved\n&quot;);</span></a>
+<a name="1079"><span class="lineNum"> 1079 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="1080"><span class="lineNum"> 1080 </span> : : }</a>
+<a name="1081"><span class="lineNum"> 1081 </span> : : </a>
+<a name="1082"><span class="lineNum"> 1082 </span> :<span class="lineNoCov"> 0 : if (mdrt_cnt == 0 || mdrt_cnt &gt;= mdrt_max_cnt) {</span></a>
+<a name="1083"><span class="lineNum"> 1083 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;DUMP: Invalid MDRT count : %x\n&quot;, mdrt_cnt);</span></a>
+<a name="1084"><span class="lineNum"> 1084 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="1085"><span class="lineNum"> 1085 </span> : : }</a>
+<a name="1086"><span class="lineNum"> 1086 </span> : : </a>
+<a name="1087"><span class="lineNum"> 1087 </span> :<span class="lineNoCov"> 0 : prlog(PR_NOTICE, &quot;DUMP: Dump found, MDRT count = 0x%x\n&quot;, mdrt_cnt);</span></a>
+<a name="1088"><span class="lineNum"> 1088 </span> : : </a>
+<a name="1089"><span class="lineNum"> 1089 </span> :<span class="lineNoCov"> 0 : dt_add_property(dump_node, &quot;mpipl-boot&quot;, NULL, 0);</span></a>
+<a name="1090"><span class="lineNum"> 1090 </span> : : }</a>
+<a name="1091"><span class="lineNum"> 1091 </span> : : </a>
+<a name="1092"><span class="lineNum"> 1092 </span> :<span class="lineNoCov"> 0 : static void add_opal_dump_node(void)</span></a>
+<a name="1093"><span class="lineNum"> 1093 </span> : : {</a>
+<a name="1094"><span class="lineNum"> 1094 </span> : : __be64 fw_load_area[4];</a>
+<a name="1095"><span class="lineNum"> 1095 </span> : : struct dt_node *node;</a>
+<a name="1096"><span class="lineNum"> 1096 </span> : : </a>
+<a name="1097"><span class="lineNum"> 1097 </span> :<span class="lineNoCov"> 0 : opal_node = dt_new_check(dt_root, &quot;ibm,opal&quot;);</span></a>
+<a name="1098"><span class="lineNum"> 1098 </span> :<span class="lineNoCov"> 0 : node = dt_new(opal_node, &quot;dump&quot;);</span></a>
+<a name="1099"><span class="lineNum"> 1099 </span> :<span class="lineNoCov"> 0 : assert(node);</span></a>
+<a name="1100"><span class="lineNum"> 1100 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(node, &quot;compatible&quot;, &quot;ibm,opal-dump&quot;);</span></a>
+<a name="1101"><span class="lineNum"> 1101 </span> : : </a>
+<a name="1102"><span class="lineNum"> 1102 </span> :<span class="lineNoCov"> 0 : fw_load_area[0] = cpu_to_be64((u64)KERNEL_LOAD_BASE);</span></a>
+<a name="1103"><span class="lineNum"> 1103 </span> :<span class="lineNoCov"> 0 : fw_load_area[1] = cpu_to_be64(KERNEL_LOAD_SIZE);</span></a>
+<a name="1104"><span class="lineNum"> 1104 </span> :<span class="lineNoCov"> 0 : fw_load_area[2] = cpu_to_be64((u64)INITRAMFS_LOAD_BASE);</span></a>
+<a name="1105"><span class="lineNum"> 1105 </span> :<span class="lineNoCov"> 0 : fw_load_area[3] = cpu_to_be64(INITRAMFS_LOAD_SIZE);</span></a>
+<a name="1106"><span class="lineNum"> 1106 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;fw-load-area&quot;, fw_load_area, sizeof(fw_load_area));</span></a>
+<a name="1107"><span class="lineNum"> 1107 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="1108"><span class="lineNum"> 1108 </span> : : </a>
+<a name="1109"><span class="lineNum"> 1109 </span> :<span class="lineCov"> 2 : static void add_iplparams_sys_params(const void *iplp, struct dt_node *node)</span></a>
+<a name="1110"><span class="lineNum"> 1110 </span> : : {</a>
+<a name="1111"><span class="lineNum"> 1111 </span> : : const struct iplparams_sysparams *p;</a>
+<a name="1112"><span class="lineNum"> 1112 </span> :<span class="lineCov"> 2 : const struct HDIF_common_hdr *hdif = iplp;</span></a>
+<a name="1113"><span class="lineNum"> 1113 </span> :<span class="lineCov"> 2 : u16 version = be16_to_cpu(hdif-&gt;version);</span></a>
+<a name="1114"><span class="lineNum"> 1114 </span> :<span class="lineCov"> 2 : const char *vendor = NULL;</span></a>
+<a name="1115"><span class="lineNum"> 1115 </span> : : u32 sys_attributes;</a>
+<a name="1116"><span class="lineNum"> 1116 </span> : : u64 bus_speed;</a>
+<a name="1117"><span class="lineNum"> 1117 </span> : : </a>
+<a name="1118"><span class="lineNum"> 1118 </span> :<span class="lineCov"> 2 : p = HDIF_get_idata(iplp, IPLPARAMS_SYSPARAMS, NULL);</span></a>
+<a name="1119"><span class="lineNum"> 1119 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(p)) {</span></a>
+<a name="1120"><span class="lineNum"> 1120 </span> :<span class="lineNoCov"> 0 : prerror(&quot;IPLPARAMS: No SYS Parameters\n&quot;);</span></a>
+<a name="1121"><span class="lineNum"> 1121 </span> : : /* Create a generic compatible property */</a>
+<a name="1122"><span class="lineNum"> 1122 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dt_root, &quot;compatible&quot;, &quot;ibm,powernv&quot;);</span></a>
+<a name="1123"><span class="lineNum"> 1123 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="1124"><span class="lineNum"> 1124 </span> : : }</a>
+<a name="1125"><span class="lineNum"> 1125 </span> : : </a>
+<a name="1126"><span class="lineNum"> 1126 </span> :<span class="lineCov"> 2 : node = dt_new(node, &quot;sys-params&quot;);</span></a>
+<a name="1127"><span class="lineNum"> 1127 </span> :<span class="lineCov"> 2 : assert(node);</span></a>
+<a name="1128"><span class="lineNum"> 1128 </span> :<span class="lineCov"> 2 : dt_add_property_cells(node, &quot;#address-cells&quot;, 0);</span></a>
+<a name="1129"><span class="lineNum"> 1129 </span> :<span class="lineCov"> 2 : dt_add_property_cells(node, &quot;#size-cells&quot;, 0);</span></a>
+<a name="1130"><span class="lineNum"> 1130 </span> : : </a>
+<a name="1131"><span class="lineNum"> 1131 </span> :<span class="lineCov"> 2 : dt_add_property_nstr(node, &quot;ibm,sys-model&quot;, p-&gt;sys_model, 4);</span></a>
+<a name="1132"><span class="lineNum"> 1132 </span> : : </a>
+<a name="1133"><span class="lineNum"> 1133 </span> : : /*</a>
+<a name="1134"><span class="lineNum"> 1134 </span> : : * Compatible has up to three entries:</a>
+<a name="1135"><span class="lineNum"> 1135 </span> : : * &quot;ibm,powernv&quot;, the system family and system type.</a>
+<a name="1136"><span class="lineNum"> 1136 </span> : : *</a>
+<a name="1137"><span class="lineNum"> 1137 </span> : : * On P9 and above the family and type strings come from the HDAT</a>
+<a name="1138"><span class="lineNum"> 1138 </span> : : * directly. On P8 we find it from the system ID numbers.</a>
+<a name="1139"><span class="lineNum"> 1139 </span> : : */</a>
+<a name="1140"><span class="lineNum"> 1140 </span> :<span class="lineCov"> 2 : if (proc_gen &gt;= proc_gen_p9) {</span></a>
+<a name="1141"><span class="lineNum"> 1141 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(dt_root, &quot;compatible&quot;, &quot;ibm,powernv&quot;,</span></a>
+<a name="1142"><span class="lineNum"> 1142 </span> : : p-&gt;sys_family_str, p-&gt;sys_type_str);</a>
+<a name="1143"><span class="lineNum"> 1143 </span> : : </a>
+<a name="1144"><span class="lineNum"> 1144 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;IPLPARAMS: v0x70 Platform family/type: %s/%s\n&quot;,</span></a>
+<a name="1145"><span class="lineNum"> 1145 </span> : : p-&gt;sys_family_str, p-&gt;sys_type_str);</a>
+<a name="1146"><span class="lineNum"> 1146 </span> : : } else {</a>
+<a name="1147"><span class="lineNum"> 1147 </span> :<span class="lineCov"> 2 : u32 sys_type = be32_to_cpu(p-&gt;system_type);</span></a>
+<a name="1148"><span class="lineNum"> 1148 </span> : : const char *sys_family;</a>
+<a name="1149"><span class="lineNum"> 1149 </span> : : </a>
+<a name="1150"><span class="lineNum"> 1150 </span> :<span class="lineCov"> 2 : switch (sys_type &gt;&gt; 28) {</span></a>
+<a name="1151"><span class="lineNum"> 1151 </span> :<span class="lineNoCov"> 0 : case 0:</span></a>
+<a name="1152"><span class="lineNum"> 1152 </span> :<span class="lineNoCov"> 0 : sys_family = &quot;ibm,squadrons&quot;;</span></a>
+<a name="1153"><span class="lineNum"> 1153 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="1154"><span class="lineNum"> 1154 </span> :<span class="lineNoCov"> 0 : case 1:</span></a>
+<a name="1155"><span class="lineNum"> 1155 </span> :<span class="lineNoCov"> 0 : sys_family = &quot;ibm,eclipz&quot;;</span></a>
+<a name="1156"><span class="lineNum"> 1156 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="1157"><span class="lineNum"> 1157 </span> :<span class="lineNoCov"> 0 : case 2:</span></a>
+<a name="1158"><span class="lineNum"> 1158 </span> :<span class="lineNoCov"> 0 : sys_family = &quot;ibm,apollo&quot;;</span></a>
+<a name="1159"><span class="lineNum"> 1159 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="1160"><span class="lineNum"> 1160 </span> :<span class="lineCov"> 2 : case 3:</span></a>
+<a name="1161"><span class="lineNum"> 1161 </span> :<span class="lineCov"> 2 : sys_family = &quot;ibm,firenze&quot;;</span></a>
+<a name="1162"><span class="lineNum"> 1162 </span> :<span class="lineCov"> 2 : break;</span></a>
+<a name="1163"><span class="lineNum"> 1163 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="1164"><span class="lineNum"> 1164 </span> :<span class="lineNoCov"> 0 : sys_family = NULL;</span></a>
+<a name="1165"><span class="lineNum"> 1165 </span> :<span class="lineNoCov"> 0 : prerror(&quot;IPLPARAMS: Unknown system family\n&quot;);</span></a>
+<a name="1166"><span class="lineNum"> 1166 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="1167"><span class="lineNum"> 1167 </span> : : }</a>
+<a name="1168"><span class="lineNum"> 1168 </span> : : </a>
+<a name="1169"><span class="lineNum"> 1169 </span> :<span class="lineCov"> 2 : dt_add_property_strings(dt_root, &quot;compatible&quot;, &quot;ibm,powernv&quot;,</span></a>
+<a name="1170"><span class="lineNum"> 1170 </span> : : sys_family);</a>
+<a name="1171"><span class="lineNum"> 1171 </span> :<span class="lineCov"> 2 : prlog(PR_INFO,</span></a>
+<a name="1172"><span class="lineNum"> 1172 </span> : : &quot;IPLPARAMS: Legacy platform family: %s&quot;</a>
+<a name="1173"><span class="lineNum"> 1173 </span> : : &quot; (sys_type=0x%08x)\n&quot;, sys_family, sys_type);</a>
+<a name="1174"><span class="lineNum"> 1174 </span> : : }</a>
+<a name="1175"><span class="lineNum"> 1175 </span> : : </a>
+<a name="1176"><span class="lineNum"> 1176 </span> : : /* Grab nest frequency when available */</a>
+<a name="1177"><span class="lineNum"> 1177 </span> :<span class="lineCov"> 2 : if (version &gt;= 0x005b) {</span></a>
+<a name="1178"><span class="lineNum"> 1178 </span> :<span class="lineCov"> 2 : u64 freq = be32_to_cpu(p-&gt;nest_freq_mhz);</span></a>
+<a name="1179"><span class="lineNum"> 1179 </span> : : </a>
+<a name="1180"><span class="lineNum"> 1180 </span> :<span class="lineCov"> 2 : freq *= 1000000;</span></a>
+<a name="1181"><span class="lineNum"> 1181 </span> :<span class="lineCov"> 2 : dt_add_property_u64(dt_root, &quot;nest-frequency&quot;, freq);</span></a>
+<a name="1182"><span class="lineNum"> 1182 </span> : : }</a>
+<a name="1183"><span class="lineNum"> 1183 </span> : : </a>
+<a name="1184"><span class="lineNum"> 1184 </span> : : /* Grab ABC bus speed */</a>
+<a name="1185"><span class="lineNum"> 1185 </span> :<span class="lineCov"> 2 : bus_speed = be32_to_cpu(p-&gt;abc_bus_speed);</span></a>
+<a name="1186"><span class="lineNum"> 1186 </span> :<span class="lineCov"> 2 : if (bus_speed)</span></a>
+<a name="1187"><span class="lineNum"> 1187 </span> :<span class="lineCov"> 2 : dt_add_property_u64(node, &quot;abc-bus-freq-mhz&quot;, bus_speed);</span></a>
+<a name="1188"><span class="lineNum"> 1188 </span> : : </a>
+<a name="1189"><span class="lineNum"> 1189 </span> : : /* Grab WXYZ bus speed */</a>
+<a name="1190"><span class="lineNum"> 1190 </span> :<span class="lineCov"> 2 : bus_speed = be32_to_cpu(p-&gt;wxyz_bus_speed);</span></a>
+<a name="1191"><span class="lineNum"> 1191 </span> :<span class="lineCov"> 2 : if (bus_speed)</span></a>
+<a name="1192"><span class="lineNum"> 1192 </span> :<span class="lineCov"> 2 : dt_add_property_u64(node, &quot;wxyz-bus-freq-mhz&quot;, bus_speed);</span></a>
+<a name="1193"><span class="lineNum"> 1193 </span> : : </a>
+<a name="1194"><span class="lineNum"> 1194 </span> :<span class="lineCov"> 2 : if (version &gt;= 0x5f)</span></a>
+<a name="1195"><span class="lineNum"> 1195 </span> :<span class="lineCov"> 1 : vendor = p-&gt;sys_vendor;</span></a>
+<a name="1196"><span class="lineNum"> 1196 </span> : : </a>
+<a name="1197"><span class="lineNum"> 1197 </span> : : /* Workaround a bug where we have NULL vendor */</a>
+<a name="1198"><span class="lineNum"> 1198 </span> :<span class="lineCov"> 2 : if (!vendor || vendor[0] == '\0')</span></a>
+<a name="1199"><span class="lineNum"> 1199 </span> :<span class="lineCov"> 2 : vendor = &quot;IBM&quot;;</span></a>
+<a name="1200"><span class="lineNum"> 1200 </span> : : </a>
+<a name="1201"><span class="lineNum"> 1201 </span> :<span class="lineCov"> 2 : dt_add_property_string(dt_root, &quot;vendor&quot;, vendor);</span></a>
+<a name="1202"><span class="lineNum"> 1202 </span> : : </a>
+<a name="1203"><span class="lineNum"> 1203 </span> :<span class="lineCov"> 2 : sys_attributes = be32_to_cpu(p-&gt;sys_attributes);</span></a>
+<a name="1204"><span class="lineNum"> 1204 </span> :<span class="lineCov"> 2 : if (sys_attributes &amp; SYS_ATTR_RISK_LEVEL)</span></a>
+<a name="1205"><span class="lineNum"> 1205 </span> :<span class="lineNoCov"> 0 : dt_add_property(node, &quot;elevated-risk-level&quot;, NULL, 0);</span></a>
+<a name="1206"><span class="lineNum"> 1206 </span> : : </a>
+<a name="1207"><span class="lineNum"> 1207 </span> : : /* Populate OPAL dump node */</a>
+<a name="1208"><span class="lineNum"> 1208 </span> :<span class="lineCov"> 2 : if (sys_attributes &amp; SYS_ATTR_MPIPL_SUPPORTED)</span></a>
+<a name="1209"><span class="lineNum"> 1209 </span> :<span class="lineNoCov"> 0 : add_opal_dump_node();</span></a>
<a name="1210"><span class="lineNum"> 1210 </span> : : </a>
-<a name="1211"><span class="lineNum"> 1211 </span> :<span class="lineCov"> 2 : dt_add_property_cells(ser_node, &quot;reg&quot;, rsrc_id);</span></a>
-<a name="1212"><span class="lineNum"> 1212 </span> :<span class="lineCov"> 2 : dt_add_property_nstr(ser_node, &quot;ibm,loc-code&quot;,</span></a>
-<a name="1213"><span class="lineNum"> 1213 </span> :<span class="lineCov"> 2 : ipser-&gt;loc_code, LOC_CODE_SIZE);</span></a>
-<a name="1214"><span class="lineNum"> 1214 </span> :<span class="lineCov"> 2 : dt_add_property_string(ser_node, &quot;compatible&quot;,</span></a>
-<a name="1215"><span class="lineNum"> 1215 </span> : : &quot;ibm,fsp-serial&quot;);</a>
-<a name="1216"><span class="lineNum"> 1216 </span> : : /* XXX handle CALLHOME flag ? */</a>
-<a name="1217"><span class="lineNum"> 1217 </span> : : }</a>
-<a name="1218"><span class="lineNum"> 1218 </span> : : }</a>
+<a name="1211"><span class="lineNum"> 1211 </span> :<span class="lineCov"> 2 : if (version &gt;= 0x60 &amp;&amp; proc_gen &gt;= proc_gen_p9)</span></a>
+<a name="1212"><span class="lineNum"> 1212 </span> :<span class="lineNoCov"> 0 : dt_init_secureboot_node(p);</span></a>
+<a name="1213"><span class="lineNum"> 1213 </span> : : }</a>
+<a name="1214"><span class="lineNum"> 1214 </span> : : </a>
+<a name="1215"><span class="lineNum"> 1215 </span> :<span class="lineCov"> 2 : static void add_iplparams_ipl_params(const void *iplp, struct dt_node *node)</span></a>
+<a name="1216"><span class="lineNum"> 1216 </span> : : {</a>
+<a name="1217"><span class="lineNum"> 1217 </span> : : const struct iplparams_iplparams *p;</a>
+<a name="1218"><span class="lineNum"> 1218 </span> : : struct dt_node *led_node;</a>
<a name="1219"><span class="lineNum"> 1219 </span> : : </a>
-<a name="1220"><span class="lineNum"> 1220 </span> : : /*</a>
-<a name="1221"><span class="lineNum"> 1221 </span> : : * Check for platform dump, if present populate DT</a>
-<a name="1222"><span class="lineNum"> 1222 </span> : : */</a>
-<a name="1223"><span class="lineNum"> 1223 </span> :<span class="lineCov"> 2 : static void add_iplparams_platform_dump(const void *iplp, struct dt_node *node)</span></a>
-<a name="1224"><span class="lineNum"> 1224 </span> : : {</a>
-<a name="1225"><span class="lineNum"> 1225 </span> : : const struct iplparams_dump *ipl_dump;</a>
-<a name="1226"><span class="lineNum"> 1226 </span> : : </a>
-<a name="1227"><span class="lineNum"> 1227 </span> :<span class="lineCov"> 2 : ipl_dump = HDIF_get_idata(iplp, IPLPARAMS_PLATFORM_DUMP, NULL);</span></a>
-<a name="1228"><span class="lineNum"> 1228 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(ipl_dump))</span></a>
-<a name="1229"><span class="lineNum"> 1229 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="1220"><span class="lineNum"> 1220 </span> :<span class="lineCov"> 2 : p = HDIF_get_idata(iplp, IPLPARAMS_IPLPARAMS, NULL);</span></a>
+<a name="1221"><span class="lineNum"> 1221 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(p)) {</span></a>
+<a name="1222"><span class="lineNum"> 1222 </span> :<span class="lineNoCov"> 0 : prerror(&quot;IPLPARAMS: No IPL Parameters\n&quot;);</span></a>
+<a name="1223"><span class="lineNum"> 1223 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="1224"><span class="lineNum"> 1224 </span> : : }</a>
+<a name="1225"><span class="lineNum"> 1225 </span> : : </a>
+<a name="1226"><span class="lineNum"> 1226 </span> :<span class="lineCov"> 2 : node = dt_new(node, &quot;ipl-params&quot;);</span></a>
+<a name="1227"><span class="lineNum"> 1227 </span> :<span class="lineCov"> 2 : assert(node);</span></a>
+<a name="1228"><span class="lineNum"> 1228 </span> :<span class="lineCov"> 2 : dt_add_property_cells(node, &quot;#address-cells&quot;, 0);</span></a>
+<a name="1229"><span class="lineNum"> 1229 </span> :<span class="lineCov"> 2 : dt_add_property_cells(node, &quot;#size-cells&quot;, 0);</span></a>
<a name="1230"><span class="lineNum"> 1230 </span> : : </a>
-<a name="1231"><span class="lineNum"> 1231 </span> :<span class="lineCov"> 2 : node = dt_new(node, &quot;platform-dump&quot;);</span></a>
-<a name="1232"><span class="lineNum"> 1232 </span> :<span class="lineCov"> 2 : assert(node);</span></a>
-<a name="1233"><span class="lineNum"> 1233 </span> : : </a>
-<a name="1234"><span class="lineNum"> 1234 </span> :<span class="lineCov"> 2 : if (be32_to_cpu(ipl_dump-&gt;dump_id)) {</span></a>
-<a name="1235"><span class="lineNum"> 1235 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;dump-id&quot;,</span></a>
-<a name="1236"><span class="lineNum"> 1236 </span> : : be32_to_cpu(ipl_dump-&gt;dump_id));</a>
-<a name="1237"><span class="lineNum"> 1237 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64(node, &quot;total-size&quot;,</span></a>
-<a name="1238"><span class="lineNum"> 1238 </span> : : be64_to_cpu(ipl_dump-&gt;act_dump_sz));</a>
-<a name="1239"><span class="lineNum"> 1239 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64(node, &quot;hw-dump-size&quot;,</span></a>
-<a name="1240"><span class="lineNum"> 1240 </span> :<span class="lineNoCov"> 0 : be32_to_cpu(ipl_dump-&gt;act_hw_dump_sz));</span></a>
-<a name="1241"><span class="lineNum"> 1241 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;plog-id&quot;,</span></a>
-<a name="1242"><span class="lineNum"> 1242 </span> : : be32_to_cpu(ipl_dump-&gt;plid));</a>
-<a name="1243"><span class="lineNum"> 1243 </span> : : }</a>
-<a name="1244"><span class="lineNum"> 1244 </span> : : }</a>
-<a name="1245"><span class="lineNum"> 1245 </span> : : </a>
-<a name="1246"><span class="lineNum"> 1246 </span> :<span class="lineCov"> 2 : static void add_iplparams_features(const struct HDIF_common_hdr *iplp)</span></a>
-<a name="1247"><span class="lineNum"> 1247 </span> : : {</a>
-<a name="1248"><span class="lineNum"> 1248 </span> : : const struct iplparams_feature *feature;</a>
-<a name="1249"><span class="lineNum"> 1249 </span> : : const struct HDIF_array_hdr *array;</a>
-<a name="1250"><span class="lineNum"> 1250 </span> : : struct dt_node *fw_features;</a>
-<a name="1251"><span class="lineNum"> 1251 </span> : : unsigned int count, i;</a>
-<a name="1252"><span class="lineNum"> 1252 </span> : : char name[65];</a>
-<a name="1253"><span class="lineNum"> 1253 </span> : : </a>
-<a name="1254"><span class="lineNum"> 1254 </span> :<span class="lineCov"> 2 : array = HDIF_get_iarray(iplp, IPLPARAMS_FEATURES, &amp;count);</span></a>
-<a name="1255"><span class="lineNum"> 1255 </span> :<span class="lineCov"> 2 : if (!array || !count)</span></a>
-<a name="1256"><span class="lineNum"> 1256 </span> :<span class="lineCov"> 2 : return;</span></a>
-<a name="1257"><span class="lineNum"> 1257 </span> : : </a>
-<a name="1258"><span class="lineNum"> 1258 </span> :<span class="lineNoCov"> 0 : opal_node = dt_new_check(dt_root, &quot;ibm,opal&quot;);</span></a>
-<a name="1259"><span class="lineNum"> 1259 </span> :<span class="lineNoCov"> 0 : fw_features = dt_new(opal_node, &quot;fw-features&quot;);</span></a>
-<a name="1260"><span class="lineNum"> 1260 </span> :<span class="lineNoCov"> 0 : if (!fw_features)</span></a>
-<a name="1261"><span class="lineNum"> 1261 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="1262"><span class="lineNum"> 1262 </span> : : </a>
-<a name="1263"><span class="lineNum"> 1263 </span> :<span class="lineNoCov"> 0 : HDIF_iarray_for_each(array, i, feature) {</span></a>
-<a name="1264"><span class="lineNum"> 1264 </span> : : struct dt_node *n;</a>
-<a name="1265"><span class="lineNum"> 1265 </span> : : uint64_t flags;</a>
-<a name="1266"><span class="lineNum"> 1266 </span> : : </a>
-<a name="1267"><span class="lineNum"> 1267 </span> : : /* the name field isn't necessarily null terminated */</a>
-<a name="1268"><span class="lineNum"> 1268 </span> : : BUILD_ASSERT(sizeof(name) &gt; sizeof(feature-&gt;name));</a>
-<a name="1269"><span class="lineNum"> 1269 </span> :<span class="lineNoCov"> 0 : strncpy(name, feature-&gt;name, sizeof(name)-1);</span></a>
-<a name="1270"><span class="lineNum"> 1270 </span> :<span class="lineNoCov"> 0 : name[sizeof(name)-1] = '\0';</span></a>
-<a name="1271"><span class="lineNum"> 1271 </span> :<span class="lineNoCov"> 0 : flags = be64_to_cpu(feature-&gt;flags);</span></a>
-<a name="1272"><span class="lineNum"> 1272 </span> : : </a>
-<a name="1273"><span class="lineNum"> 1273 </span> :<span class="lineNoCov"> 0 : if (strlen(name) == 0) {</span></a>
-<a name="1274"><span class="lineNum"> 1274 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;IPLPARAMS: FW feature name is NULL\n&quot;);</span></a>
-<a name="1275"><span class="lineNum"> 1275 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="1276"><span class="lineNum"> 1276 </span> : : }</a>
-<a name="1277"><span class="lineNum"> 1277 </span> : : </a>
-<a name="1278"><span class="lineNum"> 1278 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;IPLPARAMS: FW feature %s = %016&quot;PRIx64&quot;\n&quot;,</span></a>
-<a name="1279"><span class="lineNum"> 1279 </span> : : name, flags);</a>
-<a name="1280"><span class="lineNum"> 1280 </span> : : </a>
-<a name="1281"><span class="lineNum"> 1281 </span> : : /* get rid of tm-suspend-mode-enabled being disabled */</a>
-<a name="1282"><span class="lineNum"> 1282 </span> :<span class="lineNoCov"> 0 : if (strcmp(name, &quot;tm-suspend-mode-enabled&quot;) == 0)</span></a>
-<a name="1283"><span class="lineNum"> 1283 </span> :<span class="lineNoCov"> 0 : strcpy(name, &quot;tm-suspend-mode&quot;);</span></a>
-<a name="1284"><span class="lineNum"> 1284 </span> : : </a>
-<a name="1285"><span class="lineNum"> 1285 </span> :<span class="lineNoCov"> 0 : n = dt_new(fw_features, name);</span></a>
-<a name="1286"><span class="lineNum"> 1286 </span> : : </a>
-<a name="1287"><span class="lineNum"> 1287 </span> : : /*</a>
-<a name="1288"><span class="lineNum"> 1288 </span> : : * This is a bit overkill, but we'll want seperate properties</a>
-<a name="1289"><span class="lineNum"> 1289 </span> : : * for each flag bit(s).</a>
-<a name="1290"><span class="lineNum"> 1290 </span> : : */</a>
-<a name="1291"><span class="lineNum"> 1291 </span> :<span class="lineNoCov"> 0 : if (flags &amp; PPC_BIT(0))</span></a>
-<a name="1292"><span class="lineNum"> 1292 </span> :<span class="lineNoCov"> 0 : dt_add_property(n, &quot;enabled&quot;, NULL, 0);</span></a>
-<a name="1293"><span class="lineNum"> 1293 </span> : : else</a>
-<a name="1294"><span class="lineNum"> 1294 </span> :<span class="lineNoCov"> 0 : dt_add_property(n, &quot;disabled&quot;, NULL, 0);</span></a>
-<a name="1295"><span class="lineNum"> 1295 </span> : : }</a>
-<a name="1296"><span class="lineNum"> 1296 </span> : : }</a>
-<a name="1297"><span class="lineNum"> 1297 </span> : : </a>
-<a name="1298"><span class="lineNum"> 1298 </span> :<span class="lineCov"> 2 : static void add_iplparams(void)</span></a>
-<a name="1299"><span class="lineNum"> 1299 </span> : : {</a>
-<a name="1300"><span class="lineNum"> 1300 </span> : : struct dt_node *iplp_node;</a>
-<a name="1301"><span class="lineNum"> 1301 </span> : : const void *ipl_parms;</a>
-<a name="1302"><span class="lineNum"> 1302 </span> : : </a>
-<a name="1303"><span class="lineNum"> 1303 </span> :<span class="lineCov"> 2 : ipl_parms = get_hdif(&amp;spira.ntuples.ipl_parms, &quot;IPLPMS&quot;);</span></a>
-<a name="1304"><span class="lineNum"> 1304 </span> :<span class="lineCov"> 2 : if (!ipl_parms) {</span></a>
-<a name="1305"><span class="lineNum"> 1305 </span> :<span class="lineNoCov"> 0 : prerror(&quot;IPLPARAMS: Cannot find IPL Parms in SPIRA\n&quot;);</span></a>
-<a name="1306"><span class="lineNum"> 1306 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="1307"><span class="lineNum"> 1307 </span> : : }</a>
-<a name="1308"><span class="lineNum"> 1308 </span> : : </a>
-<a name="1309"><span class="lineNum"> 1309 </span> :<span class="lineCov"> 2 : iplp_node = dt_new(dt_root, &quot;ipl-params&quot;);</span></a>
-<a name="1310"><span class="lineNum"> 1310 </span> :<span class="lineCov"> 2 : assert(iplp_node);</span></a>
-<a name="1311"><span class="lineNum"> 1311 </span> :<span class="lineCov"> 2 : dt_add_property_cells(iplp_node, &quot;#address-cells&quot;, 0);</span></a>
-<a name="1312"><span class="lineNum"> 1312 </span> :<span class="lineCov"> 2 : dt_add_property_cells(iplp_node, &quot;#size-cells&quot;, 0);</span></a>
-<a name="1313"><span class="lineNum"> 1313 </span> : : </a>
-<a name="1314"><span class="lineNum"> 1314 </span> :<span class="lineCov"> 2 : add_iplparams_sys_params(ipl_parms, iplp_node);</span></a>
-<a name="1315"><span class="lineNum"> 1315 </span> :<span class="lineCov"> 2 : add_iplparams_ipl_params(ipl_parms, iplp_node);</span></a>
-<a name="1316"><span class="lineNum"> 1316 </span> :<span class="lineCov"> 2 : add_iplparams_serials(ipl_parms, iplp_node);</span></a>
-<a name="1317"><span class="lineNum"> 1317 </span> :<span class="lineCov"> 2 : add_iplparams_platform_dump(ipl_parms, iplp_node);</span></a>
-<a name="1318"><span class="lineNum"> 1318 </span> :<span class="lineCov"> 2 : add_iplparams_features(ipl_parms);</span></a>
-<a name="1319"><span class="lineNum"> 1319 </span> : : }</a>
-<a name="1320"><span class="lineNum"> 1320 </span> : : </a>
-<a name="1321"><span class="lineNum"> 1321 </span> : : /* Various structure contain a &quot;proc_chip_id&quot; which is an arbitrary</a>
-<a name="1322"><span class="lineNum"> 1322 </span> : : * numbering used by HDAT to reference chips, which doesn't correspond</a>
-<a name="1323"><span class="lineNum"> 1323 </span> : : * to the HW IDs. We want to use the HW IDs everywhere in the DT so</a>
-<a name="1324"><span class="lineNum"> 1324 </span> : : * we convert using this.</a>
-<a name="1325"><span class="lineNum"> 1325 </span> : : */</a>
-<a name="1326"><span class="lineNum"> 1326 </span> :<span class="lineCov"> 79 : uint32_t pcid_to_chip_id(uint32_t proc_chip_id)</span></a>
-<a name="1327"><span class="lineNum"> 1327 </span> : : {</a>
-<a name="1328"><span class="lineNum"> 1328 </span> : : unsigned int i;</a>
-<a name="1329"><span class="lineNum"> 1329 </span> : : const void *hdif;</a>
-<a name="1330"><span class="lineNum"> 1330 </span> : : </a>
-<a name="1331"><span class="lineNum"> 1331 </span> : : /* First, try the proc_chip ntuples for chip data */</a>
-<a name="1332"><span class="lineNum"> 1332 </span> :<span class="lineCov"> 150 : for_each_ntuple_idx(&amp;spira.ntuples.proc_chip, hdif, i,</span></a>
-<a name="1333"><span class="lineNum"> 1333 </span> : : SPPCRD_HDIF_SIG) {</a>
-<a name="1334"><span class="lineNum"> 1334 </span> : : const struct sppcrd_chip_info *cinfo;</a>
-<a name="1335"><span class="lineNum"> 1335 </span> : : </a>
-<a name="1336"><span class="lineNum"> 1336 </span> :<span class="lineCov"> 150 : cinfo = HDIF_get_idata(hdif, SPPCRD_IDATA_CHIP_INFO,</span></a>
-<a name="1337"><span class="lineNum"> 1337 </span> : : NULL);</a>
-<a name="1338"><span class="lineNum"> 1338 </span> :<span class="lineCov"> 150 : if (!CHECK_SPPTR(cinfo)) {</span></a>
-<a name="1339"><span class="lineNum"> 1339 </span> :<span class="lineNoCov"> 0 : prerror(&quot;XSCOM: Bad ChipID data %d\n&quot;, i);</span></a>
-<a name="1340"><span class="lineNum"> 1340 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="1341"><span class="lineNum"> 1341 </span> : : }</a>
-<a name="1342"><span class="lineNum"> 1342 </span> :<span class="lineCov"> 150 : if (proc_chip_id == be32_to_cpu(cinfo-&gt;proc_chip_id))</span></a>
-<a name="1343"><span class="lineNum"> 1343 </span> :<span class="lineCov"> 79 : return be32_to_cpu(cinfo-&gt;xscom_id);</span></a>
-<a name="1344"><span class="lineNum"> 1344 </span> : : }</a>
-<a name="1345"><span class="lineNum"> 1345 </span> : : </a>
-<a name="1346"><span class="lineNum"> 1346 </span> : : /* Not found, what to do ? Assert ? For now return a number</a>
-<a name="1347"><span class="lineNum"> 1347 </span> : : * guaranteed to not exist</a>
-<a name="1348"><span class="lineNum"> 1348 </span> : : */</a>
-<a name="1349"><span class="lineNum"> 1349 </span> :<span class="lineNoCov"> 0 : return (uint32_t)-1;</span></a>
-<a name="1350"><span class="lineNum"> 1350 </span> : : }</a>
-<a name="1351"><span class="lineNum"> 1351 </span> : : </a>
-<a name="1352"><span class="lineNum"> 1352 </span> : : /* Create '/ibm,opal/led' node */</a>
-<a name="1353"><span class="lineNum"> 1353 </span> :<span class="lineCov"> 2 : static void dt_init_led_node(void)</span></a>
-<a name="1354"><span class="lineNum"> 1354 </span> : : {</a>
-<a name="1355"><span class="lineNum"> 1355 </span> : : struct dt_node *led_node;</a>
-<a name="1356"><span class="lineNum"> 1356 </span> : : </a>
-<a name="1357"><span class="lineNum"> 1357 </span> : : /* Create /ibm,opal node, if its not created already */</a>
-<a name="1358"><span class="lineNum"> 1358 </span> :<span class="lineCov"> 2 : if (!opal_node) {</span></a>
-<a name="1359"><span class="lineNum"> 1359 </span> :<span class="lineCov"> 2 : opal_node = dt_new(dt_root, &quot;ibm,opal&quot;);</span></a>
-<a name="1360"><span class="lineNum"> 1360 </span> :<span class="lineCov"> 2 : assert(opal_node);</span></a>
-<a name="1361"><span class="lineNum"> 1361 </span> : : }</a>
-<a name="1362"><span class="lineNum"> 1362 </span> : : </a>
-<a name="1363"><span class="lineNum"> 1363 </span> : : /* Crete LED parent node */</a>
-<a name="1364"><span class="lineNum"> 1364 </span> :<span class="lineCov"> 2 : led_node = dt_new(opal_node, DT_PROPERTY_LED_NODE);</span></a>
-<a name="1365"><span class="lineNum"> 1365 </span> :<span class="lineCov"> 2 : assert(led_node);</span></a>
-<a name="1366"><span class="lineNum"> 1366 </span> :<span class="lineCov"> 2 : }</span></a>
-<a name="1367"><span class="lineNum"> 1367 </span> : : </a>
-<a name="1368"><span class="lineNum"> 1368 </span> :<span class="lineCov"> 2 : static void hostservices_parse(void)</span></a>
-<a name="1369"><span class="lineNum"> 1369 </span> : : {</a>
-<a name="1370"><span class="lineNum"> 1370 </span> : : struct HDIF_common_hdr *hs_hdr;</a>
-<a name="1371"><span class="lineNum"> 1371 </span> : : const void *dt_blob;</a>
-<a name="1372"><span class="lineNum"> 1372 </span> : : unsigned int size;</a>
-<a name="1373"><span class="lineNum"> 1373 </span> : : unsigned int ntuples_size;</a>
-<a name="1374"><span class="lineNum"> 1374 </span> : : </a>
-<a name="1375"><span class="lineNum"> 1375 </span> : : /* Deprecated on P9 */</a>
-<a name="1376"><span class="lineNum"> 1376 </span> :<span class="lineCov"> 2 : if (proc_gen &gt;= proc_gen_p9)</span></a>
-<a name="1377"><span class="lineNum"> 1377 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="1378"><span class="lineNum"> 1378 </span> : : </a>
-<a name="1379"><span class="lineNum"> 1379 </span> :<span class="lineCov"> 2 : ntuples_size = sizeof(struct HDIF_array_hdr) + </span></a>
-<a name="1380"><span class="lineNum"> 1380 </span> :<span class="lineCov"> 2 : be32_to_cpu(spira.ntuples.array_hdr.ecnt) *</span></a>
-<a name="1381"><span class="lineNum"> 1381 </span> : : sizeof(struct spira_ntuple);</a>
-<a name="1382"><span class="lineNum"> 1382 </span> : : </a>
-<a name="1383"><span class="lineNum"> 1383 </span> :<span class="lineCov"> 2 : if (offsetof(struct spira_ntuples, hs_data) &gt;= ntuples_size) {</span></a>
-<a name="1384"><span class="lineNum"> 1384 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SPIRA: No host services data found\n&quot;);</span></a>
-<a name="1385"><span class="lineNum"> 1385 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="1386"><span class="lineNum"> 1386 </span> : : }</a>
-<a name="1387"><span class="lineNum"> 1387 </span> : : </a>
-<a name="1388"><span class="lineNum"> 1388 </span> :<span class="lineCov"> 2 : hs_hdr = get_hdif(&amp;spira.ntuples.hs_data, HSERV_HDIF_SIG);</span></a>
-<a name="1389"><span class="lineNum"> 1389 </span> :<span class="lineCov"> 2 : if (!hs_hdr) {</span></a>
-<a name="1390"><span class="lineNum"> 1390 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SPIRA: No host services data found\n&quot;);</span></a>
-<a name="1391"><span class="lineNum"> 1391 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="1392"><span class="lineNum"> 1392 </span> : : }</a>
-<a name="1393"><span class="lineNum"> 1393 </span> : : </a>
-<a name="1394"><span class="lineNum"> 1394 </span> :<span class="lineCov"> 2 : dt_blob = HDIF_get_idata(hs_hdr, 0, &amp;size);</span></a>
-<a name="1395"><span class="lineNum"> 1395 </span> :<span class="lineCov"> 2 : if (!dt_blob) {</span></a>
-<a name="1396"><span class="lineNum"> 1396 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SPIRA: No host services idata found\n&quot;);</span></a>
-<a name="1397"><span class="lineNum"> 1397 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="1398"><span class="lineNum"> 1398 </span> : : }</a>
-<a name="1399"><span class="lineNum"> 1399 </span> :<span class="lineCov"> 2 : hservices_from_hdat(dt_blob, size);</span></a>
-<a name="1400"><span class="lineNum"> 1400 </span> : : }</a>
-<a name="1401"><span class="lineNum"> 1401 </span> : : </a>
-<a name="1402"><span class="lineNum"> 1402 </span> :<span class="lineCov"> 2 : static void add_stop_levels(void)</span></a>
-<a name="1403"><span class="lineNum"> 1403 </span> : : {</a>
-<a name="1404"><span class="lineNum"> 1404 </span> :<span class="lineCov"> 2 : struct spira_ntuple *t = &amp;spira.ntuples.proc_chip;</span></a>
-<a name="1405"><span class="lineNum"> 1405 </span> : : struct HDIF_common_hdr *hdif;</a>
-<a name="1406"><span class="lineNum"> 1406 </span> :<span class="lineCov"> 2 : u32 stop_levels = ~0;</span></a>
-<a name="1407"><span class="lineNum"> 1407 </span> :<span class="lineCov"> 2 : bool valid = false;</span></a>
-<a name="1408"><span class="lineNum"> 1408 </span> : : int i;</a>
-<a name="1409"><span class="lineNum"> 1409 </span> : : </a>
-<a name="1410"><span class="lineNum"> 1410 </span> :<span class="lineCov"> 2 : if (proc_gen &lt; proc_gen_p9)</span></a>
-<a name="1411"><span class="lineNum"> 1411 </span> :<span class="lineCov"> 2 : return;</span></a>
-<a name="1412"><span class="lineNum"> 1412 </span> : : </a>
-<a name="1413"><span class="lineNum"> 1413 </span> : : /*</a>
-<a name="1414"><span class="lineNum"> 1414 </span> : : * OPAL only exports a single set of flags to indicate the supported</a>
-<a name="1415"><span class="lineNum"> 1415 </span> : : * STOP modes while the HDAT descibes the support top levels *per chip*</a>
-<a name="1416"><span class="lineNum"> 1416 </span> : : * We parse the list of chips to find a common set of STOP levels to</a>
-<a name="1417"><span class="lineNum"> 1417 </span> : : * export.</a>
-<a name="1418"><span class="lineNum"> 1418 </span> : : */</a>
-<a name="1419"><span class="lineNum"> 1419 </span> :<span class="lineNoCov"> 0 : for_each_ntuple_idx(t, hdif, i, SPPCRD_HDIF_SIG) {</span></a>
-<a name="1420"><span class="lineNum"> 1420 </span> : : unsigned int size;</a>
-<a name="1421"><span class="lineNum"> 1421 </span> : : const struct sppcrd_chip_info *cinfo =</a>
-<a name="1422"><span class="lineNum"> 1422 </span> :<span class="lineNoCov"> 0 : HDIF_get_idata(hdif, SPPCRD_IDATA_CHIP_INFO, &amp;size);</span></a>
-<a name="1423"><span class="lineNum"> 1423 </span> : : u32 ve, chip_levels;</a>
-<a name="1424"><span class="lineNum"> 1424 </span> : : </a>
-<a name="1425"><span class="lineNum"> 1425 </span> :<span class="lineNoCov"> 0 : if (!cinfo)</span></a>
+<a name="1231"><span class="lineNum"> 1231 </span> : : /* On an ASM initiated factory reset, this bit will be set</a>
+<a name="1232"><span class="lineNum"> 1232 </span> : : * and the FSP expects the firmware to reset the PCI bus</a>
+<a name="1233"><span class="lineNum"> 1233 </span> : : * numbers and respond with a Power Down (CE,4D,02) message</a>
+<a name="1234"><span class="lineNum"> 1234 </span> : : */</a>
+<a name="1235"><span class="lineNum"> 1235 </span> :<span class="lineCov"> 2 : if (be32_to_cpu(p-&gt;other_attrib) &amp; IPLPARAMS_OATTR_RST_PCI_BUSNO)</span></a>
+<a name="1236"><span class="lineNum"> 1236 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;pci-busno-reset-ipl&quot;, 1);</span></a>
+<a name="1237"><span class="lineNum"> 1237 </span> :<span class="lineCov"> 2 : dt_add_property_strings(node, &quot;cec-ipl-side&quot;,</span></a>
+<a name="1238"><span class="lineNum"> 1238 </span> : : (p-&gt;ipl_side &amp; IPLPARAMS_CEC_FW_IPL_SIDE_TEMP) ?</a>
+<a name="1239"><span class="lineNum"> 1239 </span> : : &quot;temp&quot; : &quot;perm&quot;);</a>
+<a name="1240"><span class="lineNum"> 1240 </span> :<span class="lineCov"> 2 : if (proc_gen &gt;= proc_gen_p9) {</span></a>
+<a name="1241"><span class="lineNum"> 1241 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(node, &quot;sp-ipl-side&quot;,</span></a>
+<a name="1242"><span class="lineNum"> 1242 </span> : : (p-&gt;ipl_side &amp; IPLPARAMS_FSP_FW_IPL_SIDE_TEMP) ?</a>
+<a name="1243"><span class="lineNum"> 1243 </span> : : &quot;temp&quot; : &quot;perm&quot;);</a>
+<a name="1244"><span class="lineNum"> 1244 </span> : : } else {</a>
+<a name="1245"><span class="lineNum"> 1245 </span> :<span class="lineCov"> 2 : dt_add_property_strings(node, &quot;fsp-ipl-side&quot;,</span></a>
+<a name="1246"><span class="lineNum"> 1246 </span> : : (p-&gt;ipl_side &amp; IPLPARAMS_FSP_FW_IPL_SIDE_TEMP) ?</a>
+<a name="1247"><span class="lineNum"> 1247 </span> : : &quot;temp&quot; : &quot;perm&quot;);</a>
+<a name="1248"><span class="lineNum"> 1248 </span> : : }</a>
+<a name="1249"><span class="lineNum"> 1249 </span> :<span class="lineCov"> 2 : dt_add_property_cells(node, &quot;os-ipl-mode&quot;, p-&gt;os_ipl_mode);</span></a>
+<a name="1250"><span class="lineNum"> 1250 </span> :<span class="lineCov"> 2 : dt_add_property_strings(node, &quot;cec-major-type&quot;,</span></a>
+<a name="1251"><span class="lineNum"> 1251 </span> : : p-&gt;cec_ipl_maj_type ? &quot;hot&quot; : &quot;cold&quot;);</a>
+<a name="1252"><span class="lineNum"> 1252 </span> : : </a>
+<a name="1253"><span class="lineNum"> 1253 </span> : : /* Add LED type info under '/ibm,opal/led' node */</a>
+<a name="1254"><span class="lineNum"> 1254 </span> :<span class="lineCov"> 2 : led_node = dt_find_by_path(opal_node, DT_PROPERTY_LED_NODE);</span></a>
+<a name="1255"><span class="lineNum"> 1255 </span> :<span class="lineCov"> 2 : assert(led_node);</span></a>
+<a name="1256"><span class="lineNum"> 1256 </span> : : </a>
+<a name="1257"><span class="lineNum"> 1257 </span> :<span class="lineCov"> 2 : if (be32_to_cpu(p-&gt;other_attrib) &amp; IPLPARAMS_OATRR_LIGHT_PATH)</span></a>
+<a name="1258"><span class="lineNum"> 1258 </span> :<span class="lineCov"> 2 : dt_add_property_strings(led_node, DT_PROPERTY_LED_MODE,</span></a>
+<a name="1259"><span class="lineNum"> 1259 </span> : : LED_MODE_LIGHT_PATH);</a>
+<a name="1260"><span class="lineNum"> 1260 </span> : : else</a>
+<a name="1261"><span class="lineNum"> 1261 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(led_node, DT_PROPERTY_LED_MODE,</span></a>
+<a name="1262"><span class="lineNum"> 1262 </span> : : LED_MODE_GUIDING_LIGHT);</a>
+<a name="1263"><span class="lineNum"> 1263 </span> : : </a>
+<a name="1264"><span class="lineNum"> 1264 </span> : : /* Populate opal dump result table */</a>
+<a name="1265"><span class="lineNum"> 1265 </span> :<span class="lineCov"> 2 : opal_dump_add_mpipl_boot(p);</span></a>
+<a name="1266"><span class="lineNum"> 1266 </span> : : }</a>
+<a name="1267"><span class="lineNum"> 1267 </span> : : </a>
+<a name="1268"><span class="lineNum"> 1268 </span> :<span class="lineCov"> 2 : static void add_iplparams_serials(const void *iplp, struct dt_node *node)</span></a>
+<a name="1269"><span class="lineNum"> 1269 </span> : : {</a>
+<a name="1270"><span class="lineNum"> 1270 </span> : : const struct iplparms_serial *ipser;</a>
+<a name="1271"><span class="lineNum"> 1271 </span> : : struct dt_node *ser_node;</a>
+<a name="1272"><span class="lineNum"> 1272 </span> : : int count, i;</a>
+<a name="1273"><span class="lineNum"> 1273 </span> : : </a>
+<a name="1274"><span class="lineNum"> 1274 </span> :<span class="lineCov"> 2 : count = HDIF_get_iarray_size(iplp, IPLPARMS_IDATA_SERIAL);</span></a>
+<a name="1275"><span class="lineNum"> 1275 </span> :<span class="lineCov"> 2 : if (count &lt;= 0)</span></a>
+<a name="1276"><span class="lineNum"> 1276 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="1277"><span class="lineNum"> 1277 </span> :<span class="lineCov"> 2 : prlog(PR_INFO, &quot;IPLPARAMS: %d serial ports in array\n&quot;, count);</span></a>
+<a name="1278"><span class="lineNum"> 1278 </span> : : </a>
+<a name="1279"><span class="lineNum"> 1279 </span> :<span class="lineCov"> 2 : node = dt_new(node, &quot;fsp-serial&quot;);</span></a>
+<a name="1280"><span class="lineNum"> 1280 </span> :<span class="lineCov"> 2 : assert(node);</span></a>
+<a name="1281"><span class="lineNum"> 1281 </span> :<span class="lineCov"> 2 : dt_add_property_cells(node, &quot;#address-cells&quot;, 1);</span></a>
+<a name="1282"><span class="lineNum"> 1282 </span> :<span class="lineCov"> 2 : dt_add_property_cells(node, &quot;#size-cells&quot;, 0);</span></a>
+<a name="1283"><span class="lineNum"> 1283 </span> : : </a>
+<a name="1284"><span class="lineNum"> 1284 </span> :<span class="lineCov"> 4 : for (i = 0; i &lt; count; i++) {</span></a>
+<a name="1285"><span class="lineNum"> 1285 </span> : : u16 rsrc_id;</a>
+<a name="1286"><span class="lineNum"> 1286 </span> :<span class="lineCov"> 2 : ipser = HDIF_get_iarray_item(iplp, IPLPARMS_IDATA_SERIAL,</span></a>
+<a name="1287"><span class="lineNum"> 1287 </span> : : i, NULL);</a>
+<a name="1288"><span class="lineNum"> 1288 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(ipser))</span></a>
+<a name="1289"><span class="lineNum"> 1289 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="1290"><span class="lineNum"> 1290 </span> :<span class="lineCov"> 2 : rsrc_id = be16_to_cpu(ipser-&gt;rsrc_id);</span></a>
+<a name="1291"><span class="lineNum"> 1291 </span> :<span class="lineCov"> 2 : prlog(PR_INFO, &quot;IPLPARAMS: Serial %d rsrc: %04x loc: %s\n&quot;,</span></a>
+<a name="1292"><span class="lineNum"> 1292 </span> : : i, rsrc_id, ipser-&gt;loc_code);</a>
+<a name="1293"><span class="lineNum"> 1293 </span> :<span class="lineCov"> 2 : ser_node = dt_new_addr(node, &quot;serial&quot;, rsrc_id);</span></a>
+<a name="1294"><span class="lineNum"> 1294 </span> :<span class="lineCov"> 2 : if (!ser_node)</span></a>
+<a name="1295"><span class="lineNum"> 1295 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="1296"><span class="lineNum"> 1296 </span> : : </a>
+<a name="1297"><span class="lineNum"> 1297 </span> :<span class="lineCov"> 2 : dt_add_property_cells(ser_node, &quot;reg&quot;, rsrc_id);</span></a>
+<a name="1298"><span class="lineNum"> 1298 </span> :<span class="lineCov"> 2 : dt_add_property_nstr(ser_node, &quot;ibm,loc-code&quot;,</span></a>
+<a name="1299"><span class="lineNum"> 1299 </span> :<span class="lineCov"> 2 : ipser-&gt;loc_code, LOC_CODE_SIZE);</span></a>
+<a name="1300"><span class="lineNum"> 1300 </span> :<span class="lineCov"> 2 : dt_add_property_string(ser_node, &quot;compatible&quot;,</span></a>
+<a name="1301"><span class="lineNum"> 1301 </span> : : &quot;ibm,fsp-serial&quot;);</a>
+<a name="1302"><span class="lineNum"> 1302 </span> : : /* XXX handle CALLHOME flag ? */</a>
+<a name="1303"><span class="lineNum"> 1303 </span> : : }</a>
+<a name="1304"><span class="lineNum"> 1304 </span> : : }</a>
+<a name="1305"><span class="lineNum"> 1305 </span> : : </a>
+<a name="1306"><span class="lineNum"> 1306 </span> : : /*</a>
+<a name="1307"><span class="lineNum"> 1307 </span> : : * Check for platform dump, if present populate DT</a>
+<a name="1308"><span class="lineNum"> 1308 </span> : : */</a>
+<a name="1309"><span class="lineNum"> 1309 </span> :<span class="lineCov"> 2 : static void add_iplparams_platform_dump(const void *iplp, struct dt_node *node)</span></a>
+<a name="1310"><span class="lineNum"> 1310 </span> : : {</a>
+<a name="1311"><span class="lineNum"> 1311 </span> : : const struct iplparams_dump *ipl_dump;</a>
+<a name="1312"><span class="lineNum"> 1312 </span> : : </a>
+<a name="1313"><span class="lineNum"> 1313 </span> :<span class="lineCov"> 2 : ipl_dump = HDIF_get_idata(iplp, IPLPARAMS_PLATFORM_DUMP, NULL);</span></a>
+<a name="1314"><span class="lineNum"> 1314 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(ipl_dump))</span></a>
+<a name="1315"><span class="lineNum"> 1315 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="1316"><span class="lineNum"> 1316 </span> : : </a>
+<a name="1317"><span class="lineNum"> 1317 </span> :<span class="lineCov"> 2 : node = dt_new(node, &quot;platform-dump&quot;);</span></a>
+<a name="1318"><span class="lineNum"> 1318 </span> :<span class="lineCov"> 2 : assert(node);</span></a>
+<a name="1319"><span class="lineNum"> 1319 </span> : : </a>
+<a name="1320"><span class="lineNum"> 1320 </span> :<span class="lineCov"> 2 : if (be32_to_cpu(ipl_dump-&gt;dump_id)) {</span></a>
+<a name="1321"><span class="lineNum"> 1321 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;dump-id&quot;,</span></a>
+<a name="1322"><span class="lineNum"> 1322 </span> : : be32_to_cpu(ipl_dump-&gt;dump_id));</a>
+<a name="1323"><span class="lineNum"> 1323 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64(node, &quot;total-size&quot;,</span></a>
+<a name="1324"><span class="lineNum"> 1324 </span> : : be64_to_cpu(ipl_dump-&gt;act_dump_sz));</a>
+<a name="1325"><span class="lineNum"> 1325 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64(node, &quot;hw-dump-size&quot;,</span></a>
+<a name="1326"><span class="lineNum"> 1326 </span> :<span class="lineNoCov"> 0 : be32_to_cpu(ipl_dump-&gt;act_hw_dump_sz));</span></a>
+<a name="1327"><span class="lineNum"> 1327 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;plog-id&quot;,</span></a>
+<a name="1328"><span class="lineNum"> 1328 </span> : : be32_to_cpu(ipl_dump-&gt;plid));</a>
+<a name="1329"><span class="lineNum"> 1329 </span> : : }</a>
+<a name="1330"><span class="lineNum"> 1330 </span> : : }</a>
+<a name="1331"><span class="lineNum"> 1331 </span> : : </a>
+<a name="1332"><span class="lineNum"> 1332 </span> :<span class="lineCov"> 2 : static void add_iplparams_features(const struct HDIF_common_hdr *iplp)</span></a>
+<a name="1333"><span class="lineNum"> 1333 </span> : : {</a>
+<a name="1334"><span class="lineNum"> 1334 </span> : : const struct iplparams_feature *feature;</a>
+<a name="1335"><span class="lineNum"> 1335 </span> : : const struct HDIF_array_hdr *array;</a>
+<a name="1336"><span class="lineNum"> 1336 </span> : : struct dt_node *fw_features;</a>
+<a name="1337"><span class="lineNum"> 1337 </span> : : unsigned int count, i;</a>
+<a name="1338"><span class="lineNum"> 1338 </span> : : char name[65];</a>
+<a name="1339"><span class="lineNum"> 1339 </span> : : </a>
+<a name="1340"><span class="lineNum"> 1340 </span> :<span class="lineCov"> 2 : array = HDIF_get_iarray(iplp, IPLPARAMS_FEATURES, &amp;count);</span></a>
+<a name="1341"><span class="lineNum"> 1341 </span> :<span class="lineCov"> 2 : if (!array || !count)</span></a>
+<a name="1342"><span class="lineNum"> 1342 </span> :<span class="lineCov"> 2 : return;</span></a>
+<a name="1343"><span class="lineNum"> 1343 </span> : : </a>
+<a name="1344"><span class="lineNum"> 1344 </span> :<span class="lineNoCov"> 0 : opal_node = dt_new_check(dt_root, &quot;ibm,opal&quot;);</span></a>
+<a name="1345"><span class="lineNum"> 1345 </span> :<span class="lineNoCov"> 0 : fw_features = dt_new(opal_node, &quot;fw-features&quot;);</span></a>
+<a name="1346"><span class="lineNum"> 1346 </span> :<span class="lineNoCov"> 0 : if (!fw_features)</span></a>
+<a name="1347"><span class="lineNum"> 1347 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="1348"><span class="lineNum"> 1348 </span> : : </a>
+<a name="1349"><span class="lineNum"> 1349 </span> :<span class="lineNoCov"> 0 : HDIF_iarray_for_each(array, i, feature) {</span></a>
+<a name="1350"><span class="lineNum"> 1350 </span> : : struct dt_node *n;</a>
+<a name="1351"><span class="lineNum"> 1351 </span> : : uint64_t flags;</a>
+<a name="1352"><span class="lineNum"> 1352 </span> : : </a>
+<a name="1353"><span class="lineNum"> 1353 </span> : : /* the name field isn't necessarily null terminated */</a>
+<a name="1354"><span class="lineNum"> 1354 </span> : : BUILD_ASSERT(sizeof(name) &gt; sizeof(feature-&gt;name));</a>
+<a name="1355"><span class="lineNum"> 1355 </span> :<span class="lineNoCov"> 0 : strncpy(name, feature-&gt;name, sizeof(name)-1);</span></a>
+<a name="1356"><span class="lineNum"> 1356 </span> :<span class="lineNoCov"> 0 : name[sizeof(name)-1] = '\0';</span></a>
+<a name="1357"><span class="lineNum"> 1357 </span> :<span class="lineNoCov"> 0 : flags = be64_to_cpu(feature-&gt;flags);</span></a>
+<a name="1358"><span class="lineNum"> 1358 </span> : : </a>
+<a name="1359"><span class="lineNum"> 1359 </span> :<span class="lineNoCov"> 0 : if (strlen(name) == 0) {</span></a>
+<a name="1360"><span class="lineNum"> 1360 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;IPLPARAMS: FW feature name is NULL\n&quot;);</span></a>
+<a name="1361"><span class="lineNum"> 1361 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="1362"><span class="lineNum"> 1362 </span> : : }</a>
+<a name="1363"><span class="lineNum"> 1363 </span> : : </a>
+<a name="1364"><span class="lineNum"> 1364 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;IPLPARAMS: FW feature %s = %016&quot;PRIx64&quot;\n&quot;,</span></a>
+<a name="1365"><span class="lineNum"> 1365 </span> : : name, flags);</a>
+<a name="1366"><span class="lineNum"> 1366 </span> : : </a>
+<a name="1367"><span class="lineNum"> 1367 </span> : : /* get rid of tm-suspend-mode-enabled being disabled */</a>
+<a name="1368"><span class="lineNum"> 1368 </span> :<span class="lineNoCov"> 0 : if (strcmp(name, &quot;tm-suspend-mode-enabled&quot;) == 0)</span></a>
+<a name="1369"><span class="lineNum"> 1369 </span> :<span class="lineNoCov"> 0 : strcpy(name, &quot;tm-suspend-mode&quot;);</span></a>
+<a name="1370"><span class="lineNum"> 1370 </span> : : </a>
+<a name="1371"><span class="lineNum"> 1371 </span> :<span class="lineNoCov"> 0 : n = dt_new(fw_features, name);</span></a>
+<a name="1372"><span class="lineNum"> 1372 </span> : : </a>
+<a name="1373"><span class="lineNum"> 1373 </span> : : /*</a>
+<a name="1374"><span class="lineNum"> 1374 </span> : : * This is a bit overkill, but we'll want seperate properties</a>
+<a name="1375"><span class="lineNum"> 1375 </span> : : * for each flag bit(s).</a>
+<a name="1376"><span class="lineNum"> 1376 </span> : : */</a>
+<a name="1377"><span class="lineNum"> 1377 </span> :<span class="lineNoCov"> 0 : if (flags &amp; PPC_BIT(0))</span></a>
+<a name="1378"><span class="lineNum"> 1378 </span> :<span class="lineNoCov"> 0 : dt_add_property(n, &quot;enabled&quot;, NULL, 0);</span></a>
+<a name="1379"><span class="lineNum"> 1379 </span> : : else</a>
+<a name="1380"><span class="lineNum"> 1380 </span> :<span class="lineNoCov"> 0 : dt_add_property(n, &quot;disabled&quot;, NULL, 0);</span></a>
+<a name="1381"><span class="lineNum"> 1381 </span> : : }</a>
+<a name="1382"><span class="lineNum"> 1382 </span> : : }</a>
+<a name="1383"><span class="lineNum"> 1383 </span> : : </a>
+<a name="1384"><span class="lineNum"> 1384 </span> :<span class="lineCov"> 2 : static void add_iplparams(void)</span></a>
+<a name="1385"><span class="lineNum"> 1385 </span> : : {</a>
+<a name="1386"><span class="lineNum"> 1386 </span> : : struct dt_node *iplp_node;</a>
+<a name="1387"><span class="lineNum"> 1387 </span> : : const void *ipl_parms;</a>
+<a name="1388"><span class="lineNum"> 1388 </span> : : </a>
+<a name="1389"><span class="lineNum"> 1389 </span> :<span class="lineCov"> 2 : ipl_parms = get_hdif(&amp;spira.ntuples.ipl_parms, &quot;IPLPMS&quot;);</span></a>
+<a name="1390"><span class="lineNum"> 1390 </span> :<span class="lineCov"> 2 : if (!ipl_parms) {</span></a>
+<a name="1391"><span class="lineNum"> 1391 </span> :<span class="lineNoCov"> 0 : prerror(&quot;IPLPARAMS: Cannot find IPL Parms in SPIRA\n&quot;);</span></a>
+<a name="1392"><span class="lineNum"> 1392 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="1393"><span class="lineNum"> 1393 </span> : : }</a>
+<a name="1394"><span class="lineNum"> 1394 </span> : : </a>
+<a name="1395"><span class="lineNum"> 1395 </span> :<span class="lineCov"> 2 : iplp_node = dt_new(dt_root, &quot;ipl-params&quot;);</span></a>
+<a name="1396"><span class="lineNum"> 1396 </span> :<span class="lineCov"> 2 : assert(iplp_node);</span></a>
+<a name="1397"><span class="lineNum"> 1397 </span> :<span class="lineCov"> 2 : dt_add_property_cells(iplp_node, &quot;#address-cells&quot;, 0);</span></a>
+<a name="1398"><span class="lineNum"> 1398 </span> :<span class="lineCov"> 2 : dt_add_property_cells(iplp_node, &quot;#size-cells&quot;, 0);</span></a>
+<a name="1399"><span class="lineNum"> 1399 </span> : : </a>
+<a name="1400"><span class="lineNum"> 1400 </span> :<span class="lineCov"> 2 : add_iplparams_sys_params(ipl_parms, iplp_node);</span></a>
+<a name="1401"><span class="lineNum"> 1401 </span> :<span class="lineCov"> 2 : add_iplparams_ipl_params(ipl_parms, iplp_node);</span></a>
+<a name="1402"><span class="lineNum"> 1402 </span> :<span class="lineCov"> 2 : add_iplparams_serials(ipl_parms, iplp_node);</span></a>
+<a name="1403"><span class="lineNum"> 1403 </span> :<span class="lineCov"> 2 : add_iplparams_platform_dump(ipl_parms, iplp_node);</span></a>
+<a name="1404"><span class="lineNum"> 1404 </span> :<span class="lineCov"> 2 : add_iplparams_features(ipl_parms);</span></a>
+<a name="1405"><span class="lineNum"> 1405 </span> : : }</a>
+<a name="1406"><span class="lineNum"> 1406 </span> : : </a>
+<a name="1407"><span class="lineNum"> 1407 </span> : : /* Various structure contain a &quot;proc_chip_id&quot; which is an arbitrary</a>
+<a name="1408"><span class="lineNum"> 1408 </span> : : * numbering used by HDAT to reference chips, which doesn't correspond</a>
+<a name="1409"><span class="lineNum"> 1409 </span> : : * to the HW IDs. We want to use the HW IDs everywhere in the DT so</a>
+<a name="1410"><span class="lineNum"> 1410 </span> : : * we convert using this.</a>
+<a name="1411"><span class="lineNum"> 1411 </span> : : */</a>
+<a name="1412"><span class="lineNum"> 1412 </span> :<span class="lineCov"> 79 : uint32_t pcid_to_chip_id(uint32_t proc_chip_id)</span></a>
+<a name="1413"><span class="lineNum"> 1413 </span> : : {</a>
+<a name="1414"><span class="lineNum"> 1414 </span> : : unsigned int i;</a>
+<a name="1415"><span class="lineNum"> 1415 </span> : : const void *hdif;</a>
+<a name="1416"><span class="lineNum"> 1416 </span> : : </a>
+<a name="1417"><span class="lineNum"> 1417 </span> : : /* First, try the proc_chip ntuples for chip data */</a>
+<a name="1418"><span class="lineNum"> 1418 </span> :<span class="lineCov"> 150 : for_each_ntuple_idx(&amp;spira.ntuples.proc_chip, hdif, i,</span></a>
+<a name="1419"><span class="lineNum"> 1419 </span> : : SPPCRD_HDIF_SIG) {</a>
+<a name="1420"><span class="lineNum"> 1420 </span> : : const struct sppcrd_chip_info *cinfo;</a>
+<a name="1421"><span class="lineNum"> 1421 </span> : : </a>
+<a name="1422"><span class="lineNum"> 1422 </span> :<span class="lineCov"> 150 : cinfo = HDIF_get_idata(hdif, SPPCRD_IDATA_CHIP_INFO,</span></a>
+<a name="1423"><span class="lineNum"> 1423 </span> : : NULL);</a>
+<a name="1424"><span class="lineNum"> 1424 </span> :<span class="lineCov"> 150 : if (!CHECK_SPPTR(cinfo)) {</span></a>
+<a name="1425"><span class="lineNum"> 1425 </span> :<span class="lineNoCov"> 0 : prerror(&quot;XSCOM: Bad ChipID data %d\n&quot;, i);</span></a>
<a name="1426"><span class="lineNum"> 1426 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="1427"><span class="lineNum"> 1427 </span> : : </a>
-<a name="1428"><span class="lineNum"> 1428 </span> : : /*</a>
-<a name="1429"><span class="lineNum"> 1429 </span> : : * If the chip info field is too small then assume we have no</a>
-<a name="1430"><span class="lineNum"> 1430 </span> : : * STOP level information.</a>
-<a name="1431"><span class="lineNum"> 1431 </span> : : */</a>
-<a name="1432"><span class="lineNum"> 1432 </span> :<span class="lineNoCov"> 0 : if (size &lt; 0x44) {</span></a>
-<a name="1433"><span class="lineNum"> 1433 </span> :<span class="lineNoCov"> 0 : stop_levels = 0;</span></a>
-<a name="1434"><span class="lineNum"> 1434 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="1435"><span class="lineNum"> 1435 </span> : : }</a>
-<a name="1436"><span class="lineNum"> 1436 </span> : : </a>
-<a name="1437"><span class="lineNum"> 1437 </span> :<span class="lineNoCov"> 0 : ve = be32_to_cpu(cinfo-&gt;verif_exist_flags) &amp; CPU_ID_VERIFY_MASK;</span></a>
-<a name="1438"><span class="lineNum"> 1438 </span> :<span class="lineNoCov"> 0 : ve &gt;&gt;= CPU_ID_VERIFY_SHIFT;</span></a>
-<a name="1439"><span class="lineNum"> 1439 </span> :<span class="lineNoCov"> 0 : if (ve == CHIP_VERIFY_NOT_INSTALLED ||</span></a>
-<a name="1440"><span class="lineNum"> 1440 </span> : : ve == CHIP_VERIFY_UNUSABLE)</a>
-<a name="1441"><span class="lineNum"> 1441 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="1427"><span class="lineNum"> 1427 </span> : : }</a>
+<a name="1428"><span class="lineNum"> 1428 </span> :<span class="lineCov"> 150 : if (proc_chip_id == be32_to_cpu(cinfo-&gt;proc_chip_id))</span></a>
+<a name="1429"><span class="lineNum"> 1429 </span> :<span class="lineCov"> 79 : return get_xscom_id(cinfo);</span></a>
+<a name="1430"><span class="lineNum"> 1430 </span> : : }</a>
+<a name="1431"><span class="lineNum"> 1431 </span> : : </a>
+<a name="1432"><span class="lineNum"> 1432 </span> : : /* Not found, what to do ? Assert ? For now return a number</a>
+<a name="1433"><span class="lineNum"> 1433 </span> : : * guaranteed to not exist</a>
+<a name="1434"><span class="lineNum"> 1434 </span> : : */</a>
+<a name="1435"><span class="lineNum"> 1435 </span> :<span class="lineNoCov"> 0 : return (uint32_t)-1;</span></a>
+<a name="1436"><span class="lineNum"> 1436 </span> : : }</a>
+<a name="1437"><span class="lineNum"> 1437 </span> : : </a>
+<a name="1438"><span class="lineNum"> 1438 </span> :<span class="lineNoCov"> 0 : uint32_t pcid_to_topology_idx(uint32_t proc_chip_id)</span></a>
+<a name="1439"><span class="lineNum"> 1439 </span> : : {</a>
+<a name="1440"><span class="lineNum"> 1440 </span> : : unsigned int i;</a>
+<a name="1441"><span class="lineNum"> 1441 </span> : : const void *hdif;</a>
<a name="1442"><span class="lineNum"> 1442 </span> : : </a>
-<a name="1443"><span class="lineNum"> 1443 </span> :<span class="lineNoCov"> 0 : chip_levels = be32_to_cpu(cinfo-&gt;stop_levels);</span></a>
-<a name="1444"><span class="lineNum"> 1444 </span> : : </a>
-<a name="1445"><span class="lineNum"> 1445 </span> :<span class="lineNoCov"> 0 : prlog(PR_INSANE, &quot;CHIP[%x] supported STOP mask 0x%.8x\n&quot;,</span></a>
-<a name="1446"><span class="lineNum"> 1446 </span> : : be32_to_cpu(cinfo-&gt;proc_chip_id), chip_levels);</a>
+<a name="1443"><span class="lineNum"> 1443 </span> : : /* First, try the proc_chip ntuples for chip data */</a>
+<a name="1444"><span class="lineNum"> 1444 </span> :<span class="lineNoCov"> 0 : for_each_ntuple_idx(&amp;spira.ntuples.proc_chip, hdif, i,</span></a>
+<a name="1445"><span class="lineNum"> 1445 </span> : : SPPCRD_HDIF_SIG) {</a>
+<a name="1446"><span class="lineNum"> 1446 </span> : : const struct sppcrd_chip_info *cinfo;</a>
<a name="1447"><span class="lineNum"> 1447 </span> : : </a>
-<a name="1448"><span class="lineNum"> 1448 </span> :<span class="lineNoCov"> 0 : stop_levels &amp;= chip_levels;</span></a>
-<a name="1449"><span class="lineNum"> 1449 </span> :<span class="lineNoCov"> 0 : valid = true;</span></a>
-<a name="1450"><span class="lineNum"> 1450 </span> : : }</a>
-<a name="1451"><span class="lineNum"> 1451 </span> : : </a>
-<a name="1452"><span class="lineNum"> 1452 </span> :<span class="lineNoCov"> 0 : if (!valid)</span></a>
-<a name="1453"><span class="lineNum"> 1453 </span> :<span class="lineNoCov"> 0 : stop_levels = 0;</span></a>
-<a name="1454"><span class="lineNum"> 1454 </span> : : </a>
-<a name="1455"><span class="lineNum"> 1455 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dt_new_check(opal_node, &quot;power-mgt&quot;),</span></a>
-<a name="1456"><span class="lineNum"> 1456 </span> : : &quot;ibm,enabled-stop-levels&quot;, stop_levels);</a>
-<a name="1457"><span class="lineNum"> 1457 </span> : : }</a>
-<a name="1458"><span class="lineNum"> 1458 </span> : : </a>
-<a name="1459"><span class="lineNum"> 1459 </span> : : #define NPU_BASE 0x5011000</a>
-<a name="1460"><span class="lineNum"> 1460 </span> : : #define NPU_SIZE 0x2c</a>
-<a name="1461"><span class="lineNum"> 1461 </span> : : #define NPU_INDIRECT0 0x8000000009010c3fULL</a>
-<a name="1462"><span class="lineNum"> 1462 </span> : : #define NPU_INDIRECT1 0x800000000c010c3fULL</a>
-<a name="1463"><span class="lineNum"> 1463 </span> : : </a>
-<a name="1464"><span class="lineNum"> 1464 </span> :<span class="lineNoCov"> 0 : static void add_npu(struct dt_node *xscom, const struct HDIF_array_hdr *links,</span></a>
-<a name="1465"><span class="lineNum"> 1465 </span> : : int npu_index)</a>
-<a name="1466"><span class="lineNum"> 1466 </span> : : {</a>
-<a name="1467"><span class="lineNum"> 1467 </span> : : const struct sppcrd_smp_link *link;</a>
-<a name="1468"><span class="lineNum"> 1468 </span> : : struct dt_node *npu;</a>
-<a name="1469"><span class="lineNum"> 1469 </span> : : int group_target[6]; /* Tracks the PCI slot targeted each link group */</a>
-<a name="1470"><span class="lineNum"> 1470 </span> :<span class="lineNoCov"> 0 : int group_count = 0;</span></a>
-<a name="1471"><span class="lineNum"> 1471 </span> :<span class="lineNoCov"> 0 : int link_count = 0;</span></a>
-<a name="1472"><span class="lineNum"> 1472 </span> : : uint32_t size, chip_id;</a>
-<a name="1473"><span class="lineNum"> 1473 </span> : : int i;</a>
-<a name="1474"><span class="lineNum"> 1474 </span> : : </a>
-<a name="1475"><span class="lineNum"> 1475 </span> :<span class="lineNoCov"> 0 : size = be32_to_cpu(links-&gt;esize);</span></a>
-<a name="1476"><span class="lineNum"> 1476 </span> :<span class="lineNoCov"> 0 : chip_id = dt_get_chip_id(xscom);</span></a>
-<a name="1477"><span class="lineNum"> 1477 </span> : : </a>
-<a name="1478"><span class="lineNum"> 1478 </span> :<span class="lineNoCov"> 0 : memset(group_target, 0, sizeof(group_target));</span></a>
-<a name="1479"><span class="lineNum"> 1479 </span> : : </a>
-<a name="1480"><span class="lineNum"> 1480 </span> :<span class="lineNoCov"> 0 : npu = dt_new_addr(xscom, &quot;npu&quot;, NPU_BASE);</span></a>
-<a name="1481"><span class="lineNum"> 1481 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(npu, &quot;reg&quot;, NPU_BASE, NPU_SIZE);</span></a>
-<a name="1482"><span class="lineNum"> 1482 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(npu, &quot;#size-cells&quot;, 0);</span></a>
-<a name="1483"><span class="lineNum"> 1483 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(npu, &quot;#address-cells&quot;, 1);</span></a>
-<a name="1484"><span class="lineNum"> 1484 </span> : : </a>
-<a name="1485"><span class="lineNum"> 1485 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(npu, &quot;compatible&quot;, &quot;ibm,power9-npu&quot;);</span></a>
-<a name="1486"><span class="lineNum"> 1486 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(npu, &quot;ibm,npu-index&quot;, npu_index);</span></a>
-<a name="1487"><span class="lineNum"> 1487 </span> : : </a>
-<a name="1488"><span class="lineNum"> 1488 </span> :<span class="lineNoCov"> 0 : HDIF_iarray_for_each(links, i, link) {</span></a>
-<a name="1489"><span class="lineNum"> 1489 </span> :<span class="lineNoCov"> 0 : uint16_t slot_id = be16_to_cpu(link-&gt;pci_slot_idx);</span></a>
-<a name="1490"><span class="lineNum"> 1490 </span> :<span class="lineNoCov"> 0 : uint32_t link_id = be32_to_cpu(link-&gt;link_id);</span></a>
-<a name="1491"><span class="lineNum"> 1491 </span> :<span class="lineNoCov"> 0 : uint64_t speed = 0, nvlink_speed = 0;</span></a>
-<a name="1492"><span class="lineNum"> 1492 </span> : : struct dt_node *node;</a>
-<a name="1493"><span class="lineNum"> 1493 </span> : : </a>
-<a name="1494"><span class="lineNum"> 1494 </span> : : /*</a>
-<a name="1495"><span class="lineNum"> 1495 </span> : : * Only add a link node if this link is targeted at a</a>
-<a name="1496"><span class="lineNum"> 1496 </span> : : * GPU device.</a>
-<a name="1497"><span class="lineNum"> 1497 </span> : : *</a>
-<a name="1498"><span class="lineNum"> 1498 </span> : : * If we ever activate it for an opencapi device, we</a>
-<a name="1499"><span class="lineNum"> 1499 </span> : : * should revisit the link definitions hard-coded</a>
-<a name="1500"><span class="lineNum"> 1500 </span> : : * on ZZ.</a>
-<a name="1501"><span class="lineNum"> 1501 </span> : : */</a>
-<a name="1502"><span class="lineNum"> 1502 </span> :<span class="lineNoCov"> 0 : if (be32_to_cpu(link-&gt;usage) != SMP_LINK_USE_GPU)</span></a>
-<a name="1503"><span class="lineNum"> 1503 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="1504"><span class="lineNum"> 1504 </span> : : </a>
-<a name="1505"><span class="lineNum"> 1505 </span> : : /*</a>
-<a name="1506"><span class="lineNum"> 1506 </span> : : * XXX: The link_id that we get from HDAT is essentially an</a>
-<a name="1507"><span class="lineNum"> 1507 </span> : : * arbitrary ID number so we can't use it as the reg for the</a>
-<a name="1508"><span class="lineNum"> 1508 </span> : : * link node.</a>
-<a name="1509"><span class="lineNum"> 1509 </span> : : *</a>
-<a name="1510"><span class="lineNum"> 1510 </span> : : * a) There's a 1-1 mapping between entries in the SMP link</a>
-<a name="1511"><span class="lineNum"> 1511 </span> : : * structure and the NPU links.</a>
-<a name="1512"><span class="lineNum"> 1512 </span> : : *</a>
-<a name="1513"><span class="lineNum"> 1513 </span> : : * b) The SMP link array contains them in ascending order.</a>
-<a name="1514"><span class="lineNum"> 1514 </span> : : *</a>
-<a name="1515"><span class="lineNum"> 1515 </span> : : * We have some assurances that b) is correct, but if we get</a>
-<a name="1516"><span class="lineNum"> 1516 </span> : : * broken link numbering it's something to watch for.</a>
-<a name="1517"><span class="lineNum"> 1517 </span> : : *</a>
-<a name="1518"><span class="lineNum"> 1518 </span> : : * If we every have actual A-Bus (SMP) link info in here</a>
-<a name="1519"><span class="lineNum"> 1519 </span> : : * this is going to break.</a>
-<a name="1520"><span class="lineNum"> 1520 </span> : : */</a>
-<a name="1521"><span class="lineNum"> 1521 </span> : : </a>
-<a name="1522"><span class="lineNum"> 1522 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;NPU: %04x:%d: Link (%d) targets slot %u\n&quot;,</span></a>
-<a name="1523"><span class="lineNum"> 1523 </span> : : chip_id, link_count, link_count, slot_id);</a>
-<a name="1524"><span class="lineNum"> 1524 </span> : : </a>
-<a name="1525"><span class="lineNum"> 1525 </span> :<span class="lineNoCov"> 0 : if (link_count &gt;= 6) {</span></a>
-<a name="1526"><span class="lineNum"> 1526 </span> :<span class="lineNoCov"> 0 : prerror(&quot;NPU: %04x:%d: Ignoring extra link (max 6)\n&quot;,</span></a>
-<a name="1527"><span class="lineNum"> 1527 </span> : : chip_id, link_count);</a>
-<a name="1528"><span class="lineNum"> 1528 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="1529"><span class="lineNum"> 1529 </span> : : }</a>
-<a name="1530"><span class="lineNum"> 1530 </span> : : </a>
-<a name="1531"><span class="lineNum"> 1531 </span> :<span class="lineNoCov"> 0 : node = dt_new_addr(npu, &quot;link&quot;, link_count);</span></a>
-<a name="1532"><span class="lineNum"> 1532 </span> :<span class="lineNoCov"> 0 : if (!node) {</span></a>
-<a name="1533"><span class="lineNum"> 1533 </span> :<span class="lineNoCov"> 0 : prerror(&quot;NPU: %04x:%d: Creating link node failed\n&quot;,</span></a>
-<a name="1534"><span class="lineNum"> 1534 </span> : : chip_id, link_count);</a>
-<a name="1535"><span class="lineNum"> 1535 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="1536"><span class="lineNum"> 1536 </span> : : }</a>
-<a name="1537"><span class="lineNum"> 1537 </span> : : </a>
-<a name="1538"><span class="lineNum"> 1538 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(node, &quot;compatible&quot;, &quot;ibm,npu-link&quot;);</span></a>
-<a name="1539"><span class="lineNum"> 1539 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;reg&quot;, link_count);</span></a>
-<a name="1540"><span class="lineNum"> 1540 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;ibm,npu-link-index&quot;, link_count);</span></a>
-<a name="1541"><span class="lineNum"> 1541 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;ibm,workbook-link-id&quot;, link_id);</span></a>
-<a name="1542"><span class="lineNum"> 1542 </span> : : </a>
-<a name="1543"><span class="lineNum"> 1543 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64s(node, &quot;ibm,npu-phy&quot;,</span></a>
-<a name="1544"><span class="lineNum"> 1544 </span> : : link_count &lt; 3 ? NPU_INDIRECT0 : NPU_INDIRECT1);</a>
-<a name="1545"><span class="lineNum"> 1545 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;ibm,npu-lane-mask&quot;,</span></a>
-<a name="1546"><span class="lineNum"> 1546 </span> : : be32_to_cpu(link-&gt;lane_mask));</a>
-<a name="1547"><span class="lineNum"> 1547 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;ibm,npu-brick-id&quot;,</span></a>
-<a name="1548"><span class="lineNum"> 1548 </span> : : be32_to_cpu(link-&gt;brick_id));</a>
-<a name="1549"><span class="lineNum"> 1549 </span> : : </a>
-<a name="1550"><span class="lineNum"> 1550 </span> :<span class="lineNoCov"> 0 : link_count++;</span></a>
-<a name="1551"><span class="lineNum"> 1551 </span> : : </a>
-<a name="1552"><span class="lineNum"> 1552 </span> : : /*</a>
-<a name="1553"><span class="lineNum"> 1553 </span> : : * Add the group details if this is an NVlink.</a>
-<a name="1554"><span class="lineNum"> 1554 </span> : : *</a>
-<a name="1555"><span class="lineNum"> 1555 </span> : : * TODO: Cable card stuff.</a>
-<a name="1556"><span class="lineNum"> 1556 </span> : : */</a>
-<a name="1557"><span class="lineNum"> 1557 </span> :<span class="lineNoCov"> 0 : if (slot_id) {</span></a>
-<a name="1558"><span class="lineNum"> 1558 </span> : : struct dt_node *slot;</a>
-<a name="1559"><span class="lineNum"> 1559 </span> : : const char *name;</a>
-<a name="1560"><span class="lineNum"> 1560 </span> : : int group;</a>
+<a name="1448"><span class="lineNum"> 1448 </span> :<span class="lineNoCov"> 0 : cinfo = HDIF_get_idata(hdif, SPPCRD_IDATA_CHIP_INFO, NULL);</span></a>
+<a name="1449"><span class="lineNum"> 1449 </span> :<span class="lineNoCov"> 0 : if (!CHECK_SPPTR(cinfo)) {</span></a>
+<a name="1450"><span class="lineNum"> 1450 </span> :<span class="lineNoCov"> 0 : prerror(&quot;XSCOM: Bad ChipID data %d\n&quot;, i);</span></a>
+<a name="1451"><span class="lineNum"> 1451 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="1452"><span class="lineNum"> 1452 </span> : : }</a>
+<a name="1453"><span class="lineNum"> 1453 </span> :<span class="lineNoCov"> 0 : if (proc_chip_id == be32_to_cpu(cinfo-&gt;proc_chip_id)) {</span></a>
+<a name="1454"><span class="lineNum"> 1454 </span> :<span class="lineNoCov"> 0 : if (proc_gen &lt;= proc_gen_p9)</span></a>
+<a name="1455"><span class="lineNum"> 1455 </span> :<span class="lineNoCov"> 0 : return get_xscom_id(cinfo);</span></a>
+<a name="1456"><span class="lineNum"> 1456 </span> : : else</a>
+<a name="1457"><span class="lineNum"> 1457 </span> :<span class="lineNoCov"> 0 : return ((u32)cinfo-&gt;topology_id_table[cinfo-&gt;primary_topology_loc]);</span></a>
+<a name="1458"><span class="lineNum"> 1458 </span> : : }</a>
+<a name="1459"><span class="lineNum"> 1459 </span> : : }</a>
+<a name="1460"><span class="lineNum"> 1460 </span> : : </a>
+<a name="1461"><span class="lineNum"> 1461 </span> : : /* Not found, what to do ? Assert ? For now return a number</a>
+<a name="1462"><span class="lineNum"> 1462 </span> : : * guaranteed to not exist</a>
+<a name="1463"><span class="lineNum"> 1463 </span> : : */</a>
+<a name="1464"><span class="lineNum"> 1464 </span> :<span class="lineNoCov"> 0 : return (uint32_t)-1;</span></a>
+<a name="1465"><span class="lineNum"> 1465 </span> : : }</a>
+<a name="1466"><span class="lineNum"> 1466 </span> : : /* Create '/ibm,opal/led' node */</a>
+<a name="1467"><span class="lineNum"> 1467 </span> :<span class="lineCov"> 2 : static void dt_init_led_node(void)</span></a>
+<a name="1468"><span class="lineNum"> 1468 </span> : : {</a>
+<a name="1469"><span class="lineNum"> 1469 </span> : : struct dt_node *led_node;</a>
+<a name="1470"><span class="lineNum"> 1470 </span> : : </a>
+<a name="1471"><span class="lineNum"> 1471 </span> : : /* Create /ibm,opal node, if its not created already */</a>
+<a name="1472"><span class="lineNum"> 1472 </span> :<span class="lineCov"> 2 : if (!opal_node) {</span></a>
+<a name="1473"><span class="lineNum"> 1473 </span> :<span class="lineCov"> 2 : opal_node = dt_new(dt_root, &quot;ibm,opal&quot;);</span></a>
+<a name="1474"><span class="lineNum"> 1474 </span> :<span class="lineCov"> 2 : assert(opal_node);</span></a>
+<a name="1475"><span class="lineNum"> 1475 </span> : : }</a>
+<a name="1476"><span class="lineNum"> 1476 </span> : : </a>
+<a name="1477"><span class="lineNum"> 1477 </span> : : /* Crete LED parent node */</a>
+<a name="1478"><span class="lineNum"> 1478 </span> :<span class="lineCov"> 2 : led_node = dt_new(opal_node, DT_PROPERTY_LED_NODE);</span></a>
+<a name="1479"><span class="lineNum"> 1479 </span> :<span class="lineCov"> 2 : assert(led_node);</span></a>
+<a name="1480"><span class="lineNum"> 1480 </span> :<span class="lineCov"> 2 : }</span></a>
+<a name="1481"><span class="lineNum"> 1481 </span> : : </a>
+<a name="1482"><span class="lineNum"> 1482 </span> :<span class="lineCov"> 2 : static void hostservices_parse(void)</span></a>
+<a name="1483"><span class="lineNum"> 1483 </span> : : {</a>
+<a name="1484"><span class="lineNum"> 1484 </span> : : struct HDIF_common_hdr *hs_hdr;</a>
+<a name="1485"><span class="lineNum"> 1485 </span> : : const void *dt_blob;</a>
+<a name="1486"><span class="lineNum"> 1486 </span> : : unsigned int size;</a>
+<a name="1487"><span class="lineNum"> 1487 </span> : : unsigned int ntuples_size;</a>
+<a name="1488"><span class="lineNum"> 1488 </span> : : </a>
+<a name="1489"><span class="lineNum"> 1489 </span> : : /* Deprecated on P9 */</a>
+<a name="1490"><span class="lineNum"> 1490 </span> :<span class="lineCov"> 2 : if (proc_gen &gt;= proc_gen_p9)</span></a>
+<a name="1491"><span class="lineNum"> 1491 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="1492"><span class="lineNum"> 1492 </span> : : </a>
+<a name="1493"><span class="lineNum"> 1493 </span> :<span class="lineCov"> 2 : ntuples_size = sizeof(struct HDIF_array_hdr) + </span></a>
+<a name="1494"><span class="lineNum"> 1494 </span> :<span class="lineCov"> 2 : be32_to_cpu(spira.ntuples.array_hdr.ecnt) *</span></a>
+<a name="1495"><span class="lineNum"> 1495 </span> : : sizeof(struct spira_ntuple);</a>
+<a name="1496"><span class="lineNum"> 1496 </span> : : </a>
+<a name="1497"><span class="lineNum"> 1497 </span> :<span class="lineCov"> 2 : if (offsetof(struct spira_ntuples, hs_data) &gt;= ntuples_size) {</span></a>
+<a name="1498"><span class="lineNum"> 1498 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SPIRA: No host services data found\n&quot;);</span></a>
+<a name="1499"><span class="lineNum"> 1499 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="1500"><span class="lineNum"> 1500 </span> : : }</a>
+<a name="1501"><span class="lineNum"> 1501 </span> : : </a>
+<a name="1502"><span class="lineNum"> 1502 </span> :<span class="lineCov"> 2 : hs_hdr = get_hdif(&amp;spira.ntuples.hs_data, HSERV_HDIF_SIG);</span></a>
+<a name="1503"><span class="lineNum"> 1503 </span> :<span class="lineCov"> 2 : if (!hs_hdr) {</span></a>
+<a name="1504"><span class="lineNum"> 1504 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SPIRA: No host services data found\n&quot;);</span></a>
+<a name="1505"><span class="lineNum"> 1505 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="1506"><span class="lineNum"> 1506 </span> : : }</a>
+<a name="1507"><span class="lineNum"> 1507 </span> : : </a>
+<a name="1508"><span class="lineNum"> 1508 </span> :<span class="lineCov"> 2 : dt_blob = HDIF_get_idata(hs_hdr, 0, &amp;size);</span></a>
+<a name="1509"><span class="lineNum"> 1509 </span> :<span class="lineCov"> 2 : if (!dt_blob) {</span></a>
+<a name="1510"><span class="lineNum"> 1510 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SPIRA: No host services idata found\n&quot;);</span></a>
+<a name="1511"><span class="lineNum"> 1511 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="1512"><span class="lineNum"> 1512 </span> : : }</a>
+<a name="1513"><span class="lineNum"> 1513 </span> :<span class="lineCov"> 2 : hservices_from_hdat(dt_blob, size);</span></a>
+<a name="1514"><span class="lineNum"> 1514 </span> : : }</a>
+<a name="1515"><span class="lineNum"> 1515 </span> : : </a>
+<a name="1516"><span class="lineNum"> 1516 </span> :<span class="lineCov"> 2 : static void add_stop_levels(void)</span></a>
+<a name="1517"><span class="lineNum"> 1517 </span> : : {</a>
+<a name="1518"><span class="lineNum"> 1518 </span> :<span class="lineCov"> 2 : struct spira_ntuple *t = &amp;spira.ntuples.proc_chip;</span></a>
+<a name="1519"><span class="lineNum"> 1519 </span> : : struct HDIF_common_hdr *hdif;</a>
+<a name="1520"><span class="lineNum"> 1520 </span> :<span class="lineCov"> 2 : u32 stop_levels = ~0;</span></a>
+<a name="1521"><span class="lineNum"> 1521 </span> :<span class="lineCov"> 2 : bool valid = false;</span></a>
+<a name="1522"><span class="lineNum"> 1522 </span> : : int i;</a>
+<a name="1523"><span class="lineNum"> 1523 </span> : : </a>
+<a name="1524"><span class="lineNum"> 1524 </span> :<span class="lineCov"> 2 : if (proc_gen &lt; proc_gen_p9)</span></a>
+<a name="1525"><span class="lineNum"> 1525 </span> :<span class="lineCov"> 2 : return;</span></a>
+<a name="1526"><span class="lineNum"> 1526 </span> : : </a>
+<a name="1527"><span class="lineNum"> 1527 </span> : : /*</a>
+<a name="1528"><span class="lineNum"> 1528 </span> : : * OPAL only exports a single set of flags to indicate the supported</a>
+<a name="1529"><span class="lineNum"> 1529 </span> : : * STOP modes while the HDAT descibes the support top levels *per chip*</a>
+<a name="1530"><span class="lineNum"> 1530 </span> : : * We parse the list of chips to find a common set of STOP levels to</a>
+<a name="1531"><span class="lineNum"> 1531 </span> : : * export.</a>
+<a name="1532"><span class="lineNum"> 1532 </span> : : */</a>
+<a name="1533"><span class="lineNum"> 1533 </span> :<span class="lineNoCov"> 0 : for_each_ntuple_idx(t, hdif, i, SPPCRD_HDIF_SIG) {</span></a>
+<a name="1534"><span class="lineNum"> 1534 </span> : : unsigned int size;</a>
+<a name="1535"><span class="lineNum"> 1535 </span> : : const struct sppcrd_chip_info *cinfo =</a>
+<a name="1536"><span class="lineNum"> 1536 </span> :<span class="lineNoCov"> 0 : HDIF_get_idata(hdif, SPPCRD_IDATA_CHIP_INFO, &amp;size);</span></a>
+<a name="1537"><span class="lineNum"> 1537 </span> : : u32 ve, chip_levels;</a>
+<a name="1538"><span class="lineNum"> 1538 </span> : : </a>
+<a name="1539"><span class="lineNum"> 1539 </span> :<span class="lineNoCov"> 0 : if (!cinfo)</span></a>
+<a name="1540"><span class="lineNum"> 1540 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="1541"><span class="lineNum"> 1541 </span> : : </a>
+<a name="1542"><span class="lineNum"> 1542 </span> : : /*</a>
+<a name="1543"><span class="lineNum"> 1543 </span> : : * If the chip info field is too small then assume we have no</a>
+<a name="1544"><span class="lineNum"> 1544 </span> : : * STOP level information.</a>
+<a name="1545"><span class="lineNum"> 1545 </span> : : */</a>
+<a name="1546"><span class="lineNum"> 1546 </span> :<span class="lineNoCov"> 0 : if (size &lt; 0x44) {</span></a>
+<a name="1547"><span class="lineNum"> 1547 </span> :<span class="lineNoCov"> 0 : stop_levels = 0;</span></a>
+<a name="1548"><span class="lineNum"> 1548 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="1549"><span class="lineNum"> 1549 </span> : : }</a>
+<a name="1550"><span class="lineNum"> 1550 </span> : : </a>
+<a name="1551"><span class="lineNum"> 1551 </span> :<span class="lineNoCov"> 0 : ve = be32_to_cpu(cinfo-&gt;verif_exist_flags) &amp; CPU_ID_VERIFY_MASK;</span></a>
+<a name="1552"><span class="lineNum"> 1552 </span> :<span class="lineNoCov"> 0 : ve &gt;&gt;= CPU_ID_VERIFY_SHIFT;</span></a>
+<a name="1553"><span class="lineNum"> 1553 </span> :<span class="lineNoCov"> 0 : if (ve == CHIP_VERIFY_NOT_INSTALLED ||</span></a>
+<a name="1554"><span class="lineNum"> 1554 </span> : : ve == CHIP_VERIFY_UNUSABLE)</a>
+<a name="1555"><span class="lineNum"> 1555 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="1556"><span class="lineNum"> 1556 </span> : : </a>
+<a name="1557"><span class="lineNum"> 1557 </span> :<span class="lineNoCov"> 0 : chip_levels = be32_to_cpu(cinfo-&gt;stop_levels);</span></a>
+<a name="1558"><span class="lineNum"> 1558 </span> : : </a>
+<a name="1559"><span class="lineNum"> 1559 </span> :<span class="lineNoCov"> 0 : prlog(PR_INSANE, &quot;CHIP[%x] supported STOP mask 0x%.8x\n&quot;,</span></a>
+<a name="1560"><span class="lineNum"> 1560 </span> : : be32_to_cpu(cinfo-&gt;proc_chip_id), chip_levels);</a>
<a name="1561"><span class="lineNum"> 1561 </span> : : </a>
-<a name="1562"><span class="lineNum"> 1562 </span> : : /*</a>
-<a name="1563"><span class="lineNum"> 1563 </span> : : * Search the existing groups for one targeting</a>
-<a name="1564"><span class="lineNum"> 1564 </span> : : * this PCI slot</a>
-<a name="1565"><span class="lineNum"> 1565 </span> : : */</a>
-<a name="1566"><span class="lineNum"> 1566 </span> :<span class="lineNoCov"> 0 : for (group = 0; group &lt; group_count; group++)</span></a>
-<a name="1567"><span class="lineNum"> 1567 </span> :<span class="lineNoCov"> 0 : if (group_target[group] == slot_id)</span></a>
-<a name="1568"><span class="lineNum"> 1568 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="1569"><span class="lineNum"> 1569 </span> : : </a>
-<a name="1570"><span class="lineNum"> 1570 </span> : : /* no group, make a new one */</a>
-<a name="1571"><span class="lineNum"> 1571 </span> :<span class="lineNoCov"> 0 : if (group == group_count) {</span></a>
-<a name="1572"><span class="lineNum"> 1572 </span> :<span class="lineNoCov"> 0 : group_target[group] = slot_id;</span></a>
-<a name="1573"><span class="lineNum"> 1573 </span> :<span class="lineNoCov"> 0 : group_count++;</span></a>
-<a name="1574"><span class="lineNum"> 1574 </span> : : }</a>
-<a name="1575"><span class="lineNum"> 1575 </span> : : </a>
-<a name="1576"><span class="lineNum"> 1576 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;ibm,npu-group-id&quot;, group);</span></a>
+<a name="1562"><span class="lineNum"> 1562 </span> :<span class="lineNoCov"> 0 : stop_levels &amp;= chip_levels;</span></a>
+<a name="1563"><span class="lineNum"> 1563 </span> :<span class="lineNoCov"> 0 : valid = true;</span></a>
+<a name="1564"><span class="lineNum"> 1564 </span> : : }</a>
+<a name="1565"><span class="lineNum"> 1565 </span> : : </a>
+<a name="1566"><span class="lineNum"> 1566 </span> :<span class="lineNoCov"> 0 : if (!valid)</span></a>
+<a name="1567"><span class="lineNum"> 1567 </span> :<span class="lineNoCov"> 0 : stop_levels = 0;</span></a>
+<a name="1568"><span class="lineNum"> 1568 </span> : : </a>
+<a name="1569"><span class="lineNum"> 1569 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(dt_new_check(opal_node, &quot;power-mgt&quot;),</span></a>
+<a name="1570"><span class="lineNum"> 1570 </span> : : &quot;ibm,enabled-stop-levels&quot;, stop_levels);</a>
+<a name="1571"><span class="lineNum"> 1571 </span> : : }</a>
+<a name="1572"><span class="lineNum"> 1572 </span> : : </a>
+<a name="1573"><span class="lineNum"> 1573 </span> : : #define NPU_BASE 0x5011000</a>
+<a name="1574"><span class="lineNum"> 1574 </span> : : #define NPU_SIZE 0x2c</a>
+<a name="1575"><span class="lineNum"> 1575 </span> : : #define NPU_INDIRECT0 0x8000000009010c3fULL</a>
+<a name="1576"><span class="lineNum"> 1576 </span> : : #define NPU_INDIRECT1 0x800000000c010c3fULL</a>
<a name="1577"><span class="lineNum"> 1577 </span> : : </a>
-<a name="1578"><span class="lineNum"> 1578 </span> :<span class="lineNoCov"> 0 : slot = find_slot_entry_node(dt_root, slot_id);</span></a>
-<a name="1579"><span class="lineNum"> 1579 </span> :<span class="lineNoCov"> 0 : if (!slot) {</span></a>
-<a name="1580"><span class="lineNum"> 1580 </span> :<span class="lineNoCov"> 0 : prerror(&quot;NPU: %04x:%d: Unable find node for targeted PCIe slot\n&quot;,</span></a>
-<a name="1581"><span class="lineNum"> 1581 </span> : : chip_id, link_count - 1);</a>
-<a name="1582"><span class="lineNum"> 1582 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="1583"><span class="lineNum"> 1583 </span> : : }</a>
-<a name="1584"><span class="lineNum"> 1584 </span> : : </a>
-<a name="1585"><span class="lineNum"> 1585 </span> : : /*</a>
-<a name="1586"><span class="lineNum"> 1586 </span> : : * The slot_id points to a node that indicates that</a>
-<a name="1587"><span class="lineNum"> 1587 </span> : : * this GPU should appear under the slot. Grab the</a>
-<a name="1588"><span class="lineNum"> 1588 </span> : : * slot-label from the parent node that represents</a>
-<a name="1589"><span class="lineNum"> 1589 </span> : : * the actual slot.</a>
-<a name="1590"><span class="lineNum"> 1590 </span> : : */</a>
-<a name="1591"><span class="lineNum"> 1591 </span> :<span class="lineNoCov"> 0 : name = dt_prop_get_def(slot-&gt;parent, &quot;ibm,slot-label&quot;,</span></a>
-<a name="1592"><span class="lineNum"> 1592 </span> : : (char *)&quot;&lt;SLOT NAME MISSING&gt;&quot;);</a>
+<a name="1578"><span class="lineNum"> 1578 </span> :<span class="lineNoCov"> 0 : static void add_npu(struct dt_node *xscom, const struct HDIF_array_hdr *links,</span></a>
+<a name="1579"><span class="lineNum"> 1579 </span> : : int npu_index)</a>
+<a name="1580"><span class="lineNum"> 1580 </span> : : {</a>
+<a name="1581"><span class="lineNum"> 1581 </span> : : const struct sppcrd_smp_link *link;</a>
+<a name="1582"><span class="lineNum"> 1582 </span> : : struct dt_node *npu;</a>
+<a name="1583"><span class="lineNum"> 1583 </span> : : int group_target[6]; /* Tracks the PCI slot targeted each link group */</a>
+<a name="1584"><span class="lineNum"> 1584 </span> :<span class="lineNoCov"> 0 : int group_count = 0;</span></a>
+<a name="1585"><span class="lineNum"> 1585 </span> :<span class="lineNoCov"> 0 : int link_count = 0;</span></a>
+<a name="1586"><span class="lineNum"> 1586 </span> : : uint32_t size, chip_id;</a>
+<a name="1587"><span class="lineNum"> 1587 </span> : : int i;</a>
+<a name="1588"><span class="lineNum"> 1588 </span> : : </a>
+<a name="1589"><span class="lineNum"> 1589 </span> :<span class="lineNoCov"> 0 : size = be32_to_cpu(links-&gt;esize);</span></a>
+<a name="1590"><span class="lineNum"> 1590 </span> :<span class="lineNoCov"> 0 : chip_id = dt_get_chip_id(xscom);</span></a>
+<a name="1591"><span class="lineNum"> 1591 </span> : : </a>
+<a name="1592"><span class="lineNum"> 1592 </span> :<span class="lineNoCov"> 0 : memset(group_target, 0, sizeof(group_target));</span></a>
<a name="1593"><span class="lineNum"> 1593 </span> : : </a>
-<a name="1594"><span class="lineNum"> 1594 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;NPU: %04x:%d: Target slot %s\n&quot;,</span></a>
-<a name="1595"><span class="lineNum"> 1595 </span> : : chip_id, link_count - 1, name);</a>
-<a name="1596"><span class="lineNum"> 1596 </span> : : </a>
-<a name="1597"><span class="lineNum"> 1597 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(node, &quot;ibm,slot-label&quot;, name);</span></a>
-<a name="1598"><span class="lineNum"> 1598 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;ibm,pcie-slot&quot;,</span></a>
-<a name="1599"><span class="lineNum"> 1599 </span> : : slot-&gt;phandle);</a>
-<a name="1600"><span class="lineNum"> 1600 </span> : : }</a>
+<a name="1594"><span class="lineNum"> 1594 </span> :<span class="lineNoCov"> 0 : npu = dt_new_addr(xscom, &quot;npu&quot;, NPU_BASE);</span></a>
+<a name="1595"><span class="lineNum"> 1595 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(npu, &quot;reg&quot;, NPU_BASE, NPU_SIZE);</span></a>
+<a name="1596"><span class="lineNum"> 1596 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(npu, &quot;#size-cells&quot;, 0);</span></a>
+<a name="1597"><span class="lineNum"> 1597 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(npu, &quot;#address-cells&quot;, 1);</span></a>
+<a name="1598"><span class="lineNum"> 1598 </span> : : </a>
+<a name="1599"><span class="lineNum"> 1599 </span> :<span class="lineNoCov"> 0 : dt_add_property_strings(npu, &quot;compatible&quot;, &quot;ibm,power9-npu&quot;);</span></a>
+<a name="1600"><span class="lineNum"> 1600 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(npu, &quot;ibm,npu-index&quot;, npu_index);</span></a>
<a name="1601"><span class="lineNum"> 1601 </span> : : </a>
-<a name="1602"><span class="lineNum"> 1602 </span> : : /* Newer fields which might not be populated */</a>
-<a name="1603"><span class="lineNum"> 1603 </span> :<span class="lineNoCov"> 0 : if (size &lt;= 0x24)</span></a>
-<a name="1604"><span class="lineNum"> 1604 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="1605"><span class="lineNum"> 1605 </span> : : </a>
-<a name="1606"><span class="lineNum"> 1606 </span> :<span class="lineNoCov"> 0 : switch (link-&gt;link_speed) {</span></a>
-<a name="1607"><span class="lineNum"> 1607 </span> :<span class="lineNoCov"> 0 : case 0: /* 20Gbps */</span></a>
-<a name="1608"><span class="lineNum"> 1608 </span> :<span class="lineNoCov"> 0 : speed = 20000000000ul;</span></a>
-<a name="1609"><span class="lineNum"> 1609 </span> :<span class="lineNoCov"> 0 : nvlink_speed = 0x3;</span></a>
-<a name="1610"><span class="lineNum"> 1610 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="1611"><span class="lineNum"> 1611 </span> :<span class="lineNoCov"> 0 : case 1: /* 25Gbps */</span></a>
-<a name="1612"><span class="lineNum"> 1612 </span> :<span class="lineNoCov"> 0 : speed = 25000000000ul;</span></a>
-<a name="1613"><span class="lineNum"> 1613 </span> :<span class="lineNoCov"> 0 : nvlink_speed = 0x9;</span></a>
-<a name="1614"><span class="lineNum"> 1614 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="1615"><span class="lineNum"> 1615 </span> :<span class="lineNoCov"> 0 : case 2: /* 25.78125 Gbps */</span></a>
-<a name="1616"><span class="lineNum"> 1616 </span> :<span class="lineNoCov"> 0 : nvlink_speed = 0x8;</span></a>
-<a name="1617"><span class="lineNum"> 1617 </span> :<span class="lineNoCov"> 0 : speed = 25781250000ul;</span></a>
-<a name="1618"><span class="lineNum"> 1618 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="1619"><span class="lineNum"> 1619 </span> : : }</a>
-<a name="1620"><span class="lineNum"> 1620 </span> : : </a>
-<a name="1621"><span class="lineNum"> 1621 </span> : : /* ibm,link-speed is in bps and nvidia,link-speed is ~magic~ */</a>
-<a name="1622"><span class="lineNum"> 1622 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64s(node, &quot;ibm,link-speed&quot;, speed);</span></a>
-<a name="1623"><span class="lineNum"> 1623 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;nvidia,link-speed&quot;, nvlink_speed);</span></a>
-<a name="1624"><span class="lineNum"> 1624 </span> : : </a>
-<a name="1625"><span class="lineNum"> 1625 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, DT_PRIVATE &quot;occ-flag-pos&quot;,</span></a>
-<a name="1626"><span class="lineNum"> 1626 </span> : : PPC_BIT(link-&gt;occ_flag_bit));</a>
-<a name="1627"><span class="lineNum"> 1627 </span> : : }</a>
-<a name="1628"><span class="lineNum"> 1628 </span> : : </a>
-<a name="1629"><span class="lineNum"> 1629 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(npu, &quot;ibm,npu-links&quot;, link_count);</span></a>
-<a name="1630"><span class="lineNum"> 1630 </span> :<span class="lineNoCov"> 0 : }</span></a>
-<a name="1631"><span class="lineNum"> 1631 </span> : : </a>
-<a name="1632"><span class="lineNum"> 1632 </span> :<span class="lineCov"> 2 : static void add_npus(void)</span></a>
-<a name="1633"><span class="lineNum"> 1633 </span> : : {</a>
-<a name="1634"><span class="lineNum"> 1634 </span> : : struct dt_node *xscom;</a>
-<a name="1635"><span class="lineNum"> 1635 </span> :<span class="lineCov"> 2 : int npu_index = 0;</span></a>
-<a name="1636"><span class="lineNum"> 1636 </span> : : </a>
-<a name="1637"><span class="lineNum"> 1637 </span> : : /* Only consult HDAT for npu2 */</a>
-<a name="1638"><span class="lineNum"> 1638 </span> :<span class="lineCov"> 2 : if (cpu_type != PVR_TYPE_P9)</span></a>
-<a name="1639"><span class="lineNum"> 1639 </span> :<span class="lineCov"> 2 : return;</span></a>
-<a name="1640"><span class="lineNum"> 1640 </span> : : </a>
-<a name="1641"><span class="lineNum"> 1641 </span> :<span class="lineNoCov"> 0 : dt_for_each_compatible(dt_root, xscom, &quot;ibm,xscom&quot;) {</span></a>
-<a name="1642"><span class="lineNum"> 1642 </span> : : const struct HDIF_array_hdr *links;</a>
-<a name="1643"><span class="lineNum"> 1643 </span> : : </a>
-<a name="1644"><span class="lineNum"> 1644 </span> :<span class="lineNoCov"> 0 : links = xscom_to_pcrd(xscom, SPPCRD_IDATA_SMP_LINK);</span></a>
-<a name="1645"><span class="lineNum"> 1645 </span> :<span class="lineNoCov"> 0 : if (!links) {</span></a>
-<a name="1646"><span class="lineNum"> 1646 </span> :<span class="lineNoCov"> 0 : prerror(&quot;NPU: Unable to find matching SPPCRD for %s\n&quot;,</span></a>
-<a name="1647"><span class="lineNum"> 1647 </span> : : xscom-&gt;name);</a>
-<a name="1648"><span class="lineNum"> 1648 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="1649"><span class="lineNum"> 1649 </span> : : }</a>
-<a name="1650"><span class="lineNum"> 1650 </span> : : </a>
-<a name="1651"><span class="lineNum"> 1651 </span> : : /* should never happen, but stranger things have */</a>
-<a name="1652"><span class="lineNum"> 1652 </span> :<span class="lineNoCov"> 0 : if (!dt_find_by_name(dt_root, &quot;ibm,pcie-slots&quot;)) {</span></a>
-<a name="1653"><span class="lineNum"> 1653 </span> :<span class="lineNoCov"> 0 : prerror(&quot;PCIe slot information missing, can't add npu&quot;);</span></a>
-<a name="1654"><span class="lineNum"> 1654 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="1655"><span class="lineNum"> 1655 </span> : : }</a>
+<a name="1602"><span class="lineNum"> 1602 </span> :<span class="lineNoCov"> 0 : HDIF_iarray_for_each(links, i, link) {</span></a>
+<a name="1603"><span class="lineNum"> 1603 </span> :<span class="lineNoCov"> 0 : uint16_t slot_id = be16_to_cpu(link-&gt;pci_slot_idx);</span></a>
+<a name="1604"><span class="lineNum"> 1604 </span> :<span class="lineNoCov"> 0 : uint32_t link_id = be32_to_cpu(link-&gt;link_id);</span></a>
+<a name="1605"><span class="lineNum"> 1605 </span> :<span class="lineNoCov"> 0 : uint64_t speed = 0, nvlink_speed = 0;</span></a>
+<a name="1606"><span class="lineNum"> 1606 </span> : : struct dt_node *node;</a>
+<a name="1607"><span class="lineNum"> 1607 </span> : : </a>
+<a name="1608"><span class="lineNum"> 1608 </span> : : /*</a>
+<a name="1609"><span class="lineNum"> 1609 </span> : : * Only add a link node if this link is targeted at a</a>
+<a name="1610"><span class="lineNum"> 1610 </span> : : * GPU device.</a>
+<a name="1611"><span class="lineNum"> 1611 </span> : : *</a>
+<a name="1612"><span class="lineNum"> 1612 </span> : : * If we ever activate it for an opencapi device, we</a>
+<a name="1613"><span class="lineNum"> 1613 </span> : : * should revisit the link definitions hard-coded</a>
+<a name="1614"><span class="lineNum"> 1614 </span> : : * on ZZ.</a>
+<a name="1615"><span class="lineNum"> 1615 </span> : : */</a>
+<a name="1616"><span class="lineNum"> 1616 </span> :<span class="lineNoCov"> 0 : if (be32_to_cpu(link-&gt;usage) != SMP_LINK_USE_GPU)</span></a>
+<a name="1617"><span class="lineNum"> 1617 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="1618"><span class="lineNum"> 1618 </span> : : </a>
+<a name="1619"><span class="lineNum"> 1619 </span> : : /*</a>
+<a name="1620"><span class="lineNum"> 1620 </span> : : * XXX: The link_id that we get from HDAT is essentially an</a>
+<a name="1621"><span class="lineNum"> 1621 </span> : : * arbitrary ID number so we can't use it as the reg for the</a>
+<a name="1622"><span class="lineNum"> 1622 </span> : : * link node.</a>
+<a name="1623"><span class="lineNum"> 1623 </span> : : *</a>
+<a name="1624"><span class="lineNum"> 1624 </span> : : * a) There's a 1-1 mapping between entries in the SMP link</a>
+<a name="1625"><span class="lineNum"> 1625 </span> : : * structure and the NPU links.</a>
+<a name="1626"><span class="lineNum"> 1626 </span> : : *</a>
+<a name="1627"><span class="lineNum"> 1627 </span> : : * b) The SMP link array contains them in ascending order.</a>
+<a name="1628"><span class="lineNum"> 1628 </span> : : *</a>
+<a name="1629"><span class="lineNum"> 1629 </span> : : * We have some assurances that b) is correct, but if we get</a>
+<a name="1630"><span class="lineNum"> 1630 </span> : : * broken link numbering it's something to watch for.</a>
+<a name="1631"><span class="lineNum"> 1631 </span> : : *</a>
+<a name="1632"><span class="lineNum"> 1632 </span> : : * If we every have actual A-Bus (SMP) link info in here</a>
+<a name="1633"><span class="lineNum"> 1633 </span> : : * this is going to break.</a>
+<a name="1634"><span class="lineNum"> 1634 </span> : : */</a>
+<a name="1635"><span class="lineNum"> 1635 </span> : : </a>
+<a name="1636"><span class="lineNum"> 1636 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;NPU: %04x:%d: Link (%d) targets slot %u\n&quot;,</span></a>
+<a name="1637"><span class="lineNum"> 1637 </span> : : chip_id, link_count, link_count, slot_id);</a>
+<a name="1638"><span class="lineNum"> 1638 </span> : : </a>
+<a name="1639"><span class="lineNum"> 1639 </span> :<span class="lineNoCov"> 0 : if (link_count &gt;= 6) {</span></a>
+<a name="1640"><span class="lineNum"> 1640 </span> :<span class="lineNoCov"> 0 : prerror(&quot;NPU: %04x:%d: Ignoring extra link (max 6)\n&quot;,</span></a>
+<a name="1641"><span class="lineNum"> 1641 </span> : : chip_id, link_count);</a>
+<a name="1642"><span class="lineNum"> 1642 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="1643"><span class="lineNum"> 1643 </span> : : }</a>
+<a name="1644"><span class="lineNum"> 1644 </span> : : </a>
+<a name="1645"><span class="lineNum"> 1645 </span> :<span class="lineNoCov"> 0 : node = dt_new_addr(npu, &quot;link&quot;, link_count);</span></a>
+<a name="1646"><span class="lineNum"> 1646 </span> :<span class="lineNoCov"> 0 : if (!node) {</span></a>
+<a name="1647"><span class="lineNum"> 1647 </span> :<span class="lineNoCov"> 0 : prerror(&quot;NPU: %04x:%d: Creating link node failed\n&quot;,</span></a>
+<a name="1648"><span class="lineNum"> 1648 </span> : : chip_id, link_count);</a>
+<a name="1649"><span class="lineNum"> 1649 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="1650"><span class="lineNum"> 1650 </span> : : }</a>
+<a name="1651"><span class="lineNum"> 1651 </span> : : </a>
+<a name="1652"><span class="lineNum"> 1652 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(node, &quot;compatible&quot;, &quot;ibm,npu-link&quot;);</span></a>
+<a name="1653"><span class="lineNum"> 1653 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;reg&quot;, link_count);</span></a>
+<a name="1654"><span class="lineNum"> 1654 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;ibm,npu-link-index&quot;, link_count);</span></a>
+<a name="1655"><span class="lineNum"> 1655 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;ibm,workbook-link-id&quot;, link_id);</span></a>
<a name="1656"><span class="lineNum"> 1656 </span> : : </a>
-<a name="1657"><span class="lineNum"> 1657 </span> : : /* some hostboots will give us an empty array */</a>
-<a name="1658"><span class="lineNum"> 1658 </span> :<span class="lineNoCov"> 0 : if (be32_to_cpu(links-&gt;ecnt))</span></a>
-<a name="1659"><span class="lineNum"> 1659 </span> :<span class="lineNoCov"> 0 : add_npu(xscom, links, npu_index++);</span></a>
-<a name="1660"><span class="lineNum"> 1660 </span> : : }</a>
-<a name="1661"><span class="lineNum"> 1661 </span> : : }</a>
-<a name="1662"><span class="lineNum"> 1662 </span> : : </a>
-<a name="1663"><span class="lineNum"> 1663 </span> : : /*</a>
-<a name="1664"><span class="lineNum"> 1664 </span> : : * Legacy SPIRA is being deprecated and we have new SPIRA-H/S structures.</a>
-<a name="1665"><span class="lineNum"> 1665 </span> : : * But on older system (p7?) we will continue to get legacy SPIRA.</a>
-<a name="1666"><span class="lineNum"> 1666 </span> : : *</a>
-<a name="1667"><span class="lineNum"> 1667 </span> : : * SPIRA-S is initialized and provided by FSP. We use SPIRA-S signature</a>
-<a name="1668"><span class="lineNum"> 1668 </span> : : * to identify supported format. Also if required adjust spira pointer.</a>
-<a name="1669"><span class="lineNum"> 1669 </span> : : */</a>
-<a name="1670"><span class="lineNum"> 1670 </span> :<span class="lineCov"> 2 : static void fixup_spira(void)</span></a>
-<a name="1671"><span class="lineNum"> 1671 </span> : : {</a>
-<a name="1672"><span class="lineNum"> 1672 </span> : : #if !defined(TEST)</a>
-<a name="1673"><span class="lineNum"> 1673 </span> : : spiras = (struct spiras *)SPIRA_HEAP_BASE;</a>
-<a name="1674"><span class="lineNum"> 1674 </span> : : #endif</a>
+<a name="1657"><span class="lineNum"> 1657 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64s(node, &quot;ibm,npu-phy&quot;,</span></a>
+<a name="1658"><span class="lineNum"> 1658 </span> : : link_count &lt; 3 ? NPU_INDIRECT0 : NPU_INDIRECT1);</a>
+<a name="1659"><span class="lineNum"> 1659 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;ibm,npu-lane-mask&quot;,</span></a>
+<a name="1660"><span class="lineNum"> 1660 </span> : : be32_to_cpu(link-&gt;lane_mask));</a>
+<a name="1661"><span class="lineNum"> 1661 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;ibm,npu-brick-id&quot;,</span></a>
+<a name="1662"><span class="lineNum"> 1662 </span> : : be32_to_cpu(link-&gt;brick_id));</a>
+<a name="1663"><span class="lineNum"> 1663 </span> : : </a>
+<a name="1664"><span class="lineNum"> 1664 </span> :<span class="lineNoCov"> 0 : link_count++;</span></a>
+<a name="1665"><span class="lineNum"> 1665 </span> : : </a>
+<a name="1666"><span class="lineNum"> 1666 </span> : : /*</a>
+<a name="1667"><span class="lineNum"> 1667 </span> : : * Add the group details if this is an NVlink.</a>
+<a name="1668"><span class="lineNum"> 1668 </span> : : *</a>
+<a name="1669"><span class="lineNum"> 1669 </span> : : * TODO: Cable card stuff.</a>
+<a name="1670"><span class="lineNum"> 1670 </span> : : */</a>
+<a name="1671"><span class="lineNum"> 1671 </span> :<span class="lineNoCov"> 0 : if (slot_id) {</span></a>
+<a name="1672"><span class="lineNum"> 1672 </span> : : struct dt_node *slot;</a>
+<a name="1673"><span class="lineNum"> 1673 </span> : : const char *name;</a>
+<a name="1674"><span class="lineNum"> 1674 </span> : : int group;</a>
<a name="1675"><span class="lineNum"> 1675 </span> : : </a>
-<a name="1676"><span class="lineNum"> 1676 </span> : : /* Validate SPIRA-S signature */</a>
-<a name="1677"><span class="lineNum"> 1677 </span> :<span class="lineCov"> 2 : if (!spiras)</span></a>
-<a name="1678"><span class="lineNum"> 1678 </span> :<span class="lineCov"> 1 : return;</span></a>
-<a name="1679"><span class="lineNum"> 1679 </span> :<span class="lineCov"> 1 : if (!HDIF_check(&amp;spiras-&gt;hdr, SPIRAS_HDIF_SIG))</span></a>
-<a name="1680"><span class="lineNum"> 1680 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="1681"><span class="lineNum"> 1681 </span> : : </a>
-<a name="1682"><span class="lineNum"> 1682 </span> :<span class="lineCov"> 1 : prlog(PR_DEBUG, &quot;SPIRA-S found.\n&quot;);</span></a>
+<a name="1676"><span class="lineNum"> 1676 </span> : : /*</a>
+<a name="1677"><span class="lineNum"> 1677 </span> : : * Search the existing groups for one targeting</a>
+<a name="1678"><span class="lineNum"> 1678 </span> : : * this PCI slot</a>
+<a name="1679"><span class="lineNum"> 1679 </span> : : */</a>
+<a name="1680"><span class="lineNum"> 1680 </span> :<span class="lineNoCov"> 0 : for (group = 0; group &lt; group_count; group++)</span></a>
+<a name="1681"><span class="lineNum"> 1681 </span> :<span class="lineNoCov"> 0 : if (group_target[group] == slot_id)</span></a>
+<a name="1682"><span class="lineNum"> 1682 </span> :<span class="lineNoCov"> 0 : break;</span></a>
<a name="1683"><span class="lineNum"> 1683 </span> : : </a>
-<a name="1684"><span class="lineNum"> 1684 </span> :<span class="lineCov"> 1 : spira.ntuples.sp_subsys = spiras-&gt;ntuples.sp_subsys;</span></a>
-<a name="1685"><span class="lineNum"> 1685 </span> :<span class="lineCov"> 1 : spira.ntuples.ipl_parms = spiras-&gt;ntuples.ipl_parms;</span></a>
-<a name="1686"><span class="lineNum"> 1686 </span> :<span class="lineCov"> 1 : spira.ntuples.nt_enclosure_vpd = spiras-&gt;ntuples.nt_enclosure_vpd;</span></a>
-<a name="1687"><span class="lineNum"> 1687 </span> :<span class="lineCov"> 1 : spira.ntuples.slca = spiras-&gt;ntuples.slca;</span></a>
-<a name="1688"><span class="lineNum"> 1688 </span> :<span class="lineCov"> 1 : spira.ntuples.backplane_vpd = spiras-&gt;ntuples.backplane_vpd;</span></a>
-<a name="1689"><span class="lineNum"> 1689 </span> :<span class="lineCov"> 1 : spira.ntuples.system_vpd = spiras-&gt;ntuples.system_vpd;</span></a>
-<a name="1690"><span class="lineNum"> 1690 </span> :<span class="lineCov"> 1 : spira.ntuples.proc_init = spirah.ntuples.proc_init;</span></a>
-<a name="1691"><span class="lineNum"> 1691 </span> :<span class="lineCov"> 1 : spira.ntuples.clock_vpd = spiras-&gt;ntuples.clock_vpd;</span></a>
-<a name="1692"><span class="lineNum"> 1692 </span> :<span class="lineCov"> 1 : spira.ntuples.anchor_vpd = spiras-&gt;ntuples.anchor_vpd;</span></a>
-<a name="1693"><span class="lineNum"> 1693 </span> :<span class="lineCov"> 1 : spira.ntuples.op_panel_vpd = spiras-&gt;ntuples.op_panel_vpd;</span></a>
-<a name="1694"><span class="lineNum"> 1694 </span> :<span class="lineCov"> 1 : spira.ntuples.misc_cec_fru_vpd = spiras-&gt;ntuples.misc_cec_fru_vpd;</span></a>
-<a name="1695"><span class="lineNum"> 1695 </span> :<span class="lineCov"> 1 : spira.ntuples.ms_vpd = spiras-&gt;ntuples.ms_vpd;</span></a>
-<a name="1696"><span class="lineNum"> 1696 </span> :<span class="lineCov"> 1 : spira.ntuples.cec_iohub_fru = spiras-&gt;ntuples.cec_iohub_fru;</span></a>
-<a name="1697"><span class="lineNum"> 1697 </span> :<span class="lineCov"> 1 : spira.ntuples.cpu_ctrl = spirah.ntuples.cpu_ctrl;</span></a>
-<a name="1698"><span class="lineNum"> 1698 </span> :<span class="lineCov"> 1 : spira.ntuples.mdump_src = spirah.ntuples.mdump_src;</span></a>
-<a name="1699"><span class="lineNum"> 1699 </span> :<span class="lineCov"> 1 : spira.ntuples.mdump_dst = spirah.ntuples.mdump_dst;</span></a>
-<a name="1700"><span class="lineNum"> 1700 </span> :<span class="lineCov"> 1 : spira.ntuples.mdump_res = spirah.ntuples.mdump_res;</span></a>
-<a name="1701"><span class="lineNum"> 1701 </span> :<span class="lineCov"> 1 : spira.ntuples.proc_dump_area = spirah.ntuples.proc_dump_area;</span></a>
-<a name="1702"><span class="lineNum"> 1702 </span> :<span class="lineCov"> 1 : spira.ntuples.pcia = spiras-&gt;ntuples.pcia;</span></a>
-<a name="1703"><span class="lineNum"> 1703 </span> :<span class="lineCov"> 1 : spira.ntuples.proc_chip = spiras-&gt;ntuples.proc_chip;</span></a>
-<a name="1704"><span class="lineNum"> 1704 </span> :<span class="lineCov"> 1 : spira.ntuples.hs_data = spiras-&gt;ntuples.hs_data;</span></a>
-<a name="1705"><span class="lineNum"> 1705 </span> :<span class="lineCov"> 1 : spira.ntuples.ipmi_sensor = spiras-&gt;ntuples.ipmi_sensor;</span></a>
-<a name="1706"><span class="lineNum"> 1706 </span> :<span class="lineCov"> 1 : spira.ntuples.node_stb_data = spiras-&gt;ntuples.node_stb_data;</span></a>
-<a name="1707"><span class="lineNum"> 1707 </span> : : }</a>
-<a name="1708"><span class="lineNum"> 1708 </span> : : </a>
-<a name="1709"><span class="lineNum"> 1709 </span> : : /*</a>
-<a name="1710"><span class="lineNum"> 1710 </span> : : * All the data structure addresses are relative to payload base. Hence adjust</a>
-<a name="1711"><span class="lineNum"> 1711 </span> : : * structures that are needed to capture OPAL dump during MPIPL.</a>
-<a name="1712"><span class="lineNum"> 1712 </span> : : */</a>
-<a name="1713"><span class="lineNum"> 1713 </span> :<span class="lineCov"> 2 : static void update_spirah_addr(void)</span></a>
-<a name="1714"><span class="lineNum"> 1714 </span> : : {</a>
-<a name="1715"><span class="lineNum"> 1715 </span> : : #if !defined(TEST)</a>
-<a name="1716"><span class="lineNum"> 1716 </span> : : if (proc_gen &lt; proc_gen_p9)</a>
-<a name="1717"><span class="lineNum"> 1717 </span> : : return;</a>
-<a name="1718"><span class="lineNum"> 1718 </span> : : </a>
-<a name="1719"><span class="lineNum"> 1719 </span> : : naca.spirah_addr = CPU_TO_BE64(SPIRAH_OFF);</a>
-<a name="1720"><span class="lineNum"> 1720 </span> : : naca.spira_addr = CPU_TO_BE64(SPIRA_OFF);</a>
-<a name="1721"><span class="lineNum"> 1721 </span> : : spirah.ntuples.hs_data_area.addr = CPU_TO_BE64(SPIRA_HEAP_BASE - SKIBOOT_BASE);</a>
-<a name="1722"><span class="lineNum"> 1722 </span> : : spirah.ntuples.mdump_res.addr = CPU_TO_BE64(MDRT_TABLE_BASE - SKIBOOT_BASE);</a>
-<a name="1723"><span class="lineNum"> 1723 </span> : : #endif</a>
-<a name="1724"><span class="lineNum"> 1724 </span> :<span class="lineCov"> 2 : }</span></a>
-<a name="1725"><span class="lineNum"> 1725 </span> : : </a>
-<a name="1726"><span class="lineNum"> 1726 </span> :<span class="lineCov"> 2 : int parse_hdat(bool is_opal)</span></a>
-<a name="1727"><span class="lineNum"> 1727 </span> : : {</a>
-<a name="1728"><span class="lineNum"> 1728 </span> :<span class="lineCov"> 2 : cpu_type = PVR_TYPE(mfspr(SPR_PVR));</span></a>
-<a name="1729"><span class="lineNum"> 1729 </span> : : </a>
-<a name="1730"><span class="lineNum"> 1730 </span> :<span class="lineCov"> 2 : prlog(PR_DEBUG, &quot;Parsing HDAT...\n&quot;);</span></a>
-<a name="1731"><span class="lineNum"> 1731 </span> : : </a>
-<a name="1732"><span class="lineNum"> 1732 </span> :<span class="lineCov"> 2 : fixup_spira();</span></a>
-<a name="1733"><span class="lineNum"> 1733 </span> : : </a>
-<a name="1734"><span class="lineNum"> 1734 </span> :<span class="lineCov"> 2 : update_spirah_addr();</span></a>
-<a name="1735"><span class="lineNum"> 1735 </span> : : </a>
-<a name="1736"><span class="lineNum"> 1736 </span> : : /*</a>
-<a name="1737"><span class="lineNum"> 1737 </span> : : * Basic DT root stuff</a>
-<a name="1738"><span class="lineNum"> 1738 </span> : : */</a>
-<a name="1739"><span class="lineNum"> 1739 </span> :<span class="lineCov"> 2 : dt_add_property_cells(dt_root, &quot;#address-cells&quot;, 2);</span></a>
-<a name="1740"><span class="lineNum"> 1740 </span> :<span class="lineCov"> 2 : dt_add_property_cells(dt_root, &quot;#size-cells&quot;, 2);</span></a>
-<a name="1741"><span class="lineNum"> 1741 </span> : : </a>
-<a name="1742"><span class="lineNum"> 1742 </span> :<span class="lineCov"> 2 : if (proc_gen &lt; proc_gen_p9)</span></a>
-<a name="1743"><span class="lineNum"> 1743 </span> :<span class="lineCov"> 2 : dt_add_property_string(dt_root, &quot;lid-type&quot;, is_opal ? &quot;opal&quot; : &quot;phyp&quot;);</span></a>
-<a name="1744"><span class="lineNum"> 1744 </span> : : </a>
-<a name="1745"><span class="lineNum"> 1745 </span> : : /* Add any BMCs and enable the LPC UART */</a>
-<a name="1746"><span class="lineNum"> 1746 </span> :<span class="lineCov"> 2 : bmc_parse();</span></a>
-<a name="1747"><span class="lineNum"> 1747 </span> : : </a>
-<a name="1748"><span class="lineNum"> 1748 </span> : : /* Create and populate /vpd node */</a>
-<a name="1749"><span class="lineNum"> 1749 </span> :<span class="lineCov"> 2 : dt_init_vpd_node();</span></a>
+<a name="1684"><span class="lineNum"> 1684 </span> : : /* no group, make a new one */</a>
+<a name="1685"><span class="lineNum"> 1685 </span> :<span class="lineNoCov"> 0 : if (group == group_count) {</span></a>
+<a name="1686"><span class="lineNum"> 1686 </span> :<span class="lineNoCov"> 0 : group_target[group] = slot_id;</span></a>
+<a name="1687"><span class="lineNum"> 1687 </span> :<span class="lineNoCov"> 0 : group_count++;</span></a>
+<a name="1688"><span class="lineNum"> 1688 </span> : : }</a>
+<a name="1689"><span class="lineNum"> 1689 </span> : : </a>
+<a name="1690"><span class="lineNum"> 1690 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;ibm,npu-group-id&quot;, group);</span></a>
+<a name="1691"><span class="lineNum"> 1691 </span> : : </a>
+<a name="1692"><span class="lineNum"> 1692 </span> :<span class="lineNoCov"> 0 : slot = find_slot_entry_node(dt_root, slot_id);</span></a>
+<a name="1693"><span class="lineNum"> 1693 </span> :<span class="lineNoCov"> 0 : if (!slot) {</span></a>
+<a name="1694"><span class="lineNum"> 1694 </span> :<span class="lineNoCov"> 0 : prerror(&quot;NPU: %04x:%d: Unable find node for targeted PCIe slot\n&quot;,</span></a>
+<a name="1695"><span class="lineNum"> 1695 </span> : : chip_id, link_count - 1);</a>
+<a name="1696"><span class="lineNum"> 1696 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="1697"><span class="lineNum"> 1697 </span> : : }</a>
+<a name="1698"><span class="lineNum"> 1698 </span> : : </a>
+<a name="1699"><span class="lineNum"> 1699 </span> : : /*</a>
+<a name="1700"><span class="lineNum"> 1700 </span> : : * The slot_id points to a node that indicates that</a>
+<a name="1701"><span class="lineNum"> 1701 </span> : : * this GPU should appear under the slot. Grab the</a>
+<a name="1702"><span class="lineNum"> 1702 </span> : : * slot-label from the parent node that represents</a>
+<a name="1703"><span class="lineNum"> 1703 </span> : : * the actual slot.</a>
+<a name="1704"><span class="lineNum"> 1704 </span> : : */</a>
+<a name="1705"><span class="lineNum"> 1705 </span> :<span class="lineNoCov"> 0 : name = dt_prop_get_def(slot-&gt;parent, &quot;ibm,slot-label&quot;,</span></a>
+<a name="1706"><span class="lineNum"> 1706 </span> : : (char *)&quot;&lt;SLOT NAME MISSING&gt;&quot;);</a>
+<a name="1707"><span class="lineNum"> 1707 </span> : : </a>
+<a name="1708"><span class="lineNum"> 1708 </span> :<span class="lineNoCov"> 0 : prlog(PR_DEBUG, &quot;NPU: %04x:%d: Target slot %s\n&quot;,</span></a>
+<a name="1709"><span class="lineNum"> 1709 </span> : : chip_id, link_count - 1, name);</a>
+<a name="1710"><span class="lineNum"> 1710 </span> : : </a>
+<a name="1711"><span class="lineNum"> 1711 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(node, &quot;ibm,slot-label&quot;, name);</span></a>
+<a name="1712"><span class="lineNum"> 1712 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;ibm,pcie-slot&quot;,</span></a>
+<a name="1713"><span class="lineNum"> 1713 </span> : : slot-&gt;phandle);</a>
+<a name="1714"><span class="lineNum"> 1714 </span> : : }</a>
+<a name="1715"><span class="lineNum"> 1715 </span> : : </a>
+<a name="1716"><span class="lineNum"> 1716 </span> : : /* Newer fields which might not be populated */</a>
+<a name="1717"><span class="lineNum"> 1717 </span> :<span class="lineNoCov"> 0 : if (size &lt;= 0x24)</span></a>
+<a name="1718"><span class="lineNum"> 1718 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="1719"><span class="lineNum"> 1719 </span> : : </a>
+<a name="1720"><span class="lineNum"> 1720 </span> :<span class="lineNoCov"> 0 : switch (link-&gt;link_speed) {</span></a>
+<a name="1721"><span class="lineNum"> 1721 </span> :<span class="lineNoCov"> 0 : case 0: /* 20Gbps */</span></a>
+<a name="1722"><span class="lineNum"> 1722 </span> :<span class="lineNoCov"> 0 : speed = 20000000000ul;</span></a>
+<a name="1723"><span class="lineNum"> 1723 </span> :<span class="lineNoCov"> 0 : nvlink_speed = 0x3;</span></a>
+<a name="1724"><span class="lineNum"> 1724 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="1725"><span class="lineNum"> 1725 </span> :<span class="lineNoCov"> 0 : case 1: /* 25Gbps */</span></a>
+<a name="1726"><span class="lineNum"> 1726 </span> :<span class="lineNoCov"> 0 : speed = 25000000000ul;</span></a>
+<a name="1727"><span class="lineNum"> 1727 </span> :<span class="lineNoCov"> 0 : nvlink_speed = 0x9;</span></a>
+<a name="1728"><span class="lineNum"> 1728 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="1729"><span class="lineNum"> 1729 </span> :<span class="lineNoCov"> 0 : case 2: /* 25.78125 Gbps */</span></a>
+<a name="1730"><span class="lineNum"> 1730 </span> :<span class="lineNoCov"> 0 : nvlink_speed = 0x8;</span></a>
+<a name="1731"><span class="lineNum"> 1731 </span> :<span class="lineNoCov"> 0 : speed = 25781250000ul;</span></a>
+<a name="1732"><span class="lineNum"> 1732 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="1733"><span class="lineNum"> 1733 </span> : : }</a>
+<a name="1734"><span class="lineNum"> 1734 </span> : : </a>
+<a name="1735"><span class="lineNum"> 1735 </span> : : /* ibm,link-speed is in bps and nvidia,link-speed is ~magic~ */</a>
+<a name="1736"><span class="lineNum"> 1736 </span> :<span class="lineNoCov"> 0 : dt_add_property_u64s(node, &quot;ibm,link-speed&quot;, speed);</span></a>
+<a name="1737"><span class="lineNum"> 1737 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, &quot;nvidia,link-speed&quot;, nvlink_speed);</span></a>
+<a name="1738"><span class="lineNum"> 1738 </span> : : </a>
+<a name="1739"><span class="lineNum"> 1739 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(node, DT_PRIVATE &quot;occ-flag-pos&quot;,</span></a>
+<a name="1740"><span class="lineNum"> 1740 </span> : : PPC_BIT(link-&gt;occ_flag_bit));</a>
+<a name="1741"><span class="lineNum"> 1741 </span> : : }</a>
+<a name="1742"><span class="lineNum"> 1742 </span> : : </a>
+<a name="1743"><span class="lineNum"> 1743 </span> :<span class="lineNoCov"> 0 : dt_add_property_cells(npu, &quot;ibm,npu-links&quot;, link_count);</span></a>
+<a name="1744"><span class="lineNum"> 1744 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="1745"><span class="lineNum"> 1745 </span> : : </a>
+<a name="1746"><span class="lineNum"> 1746 </span> :<span class="lineCov"> 2 : static void add_npus(void)</span></a>
+<a name="1747"><span class="lineNum"> 1747 </span> : : {</a>
+<a name="1748"><span class="lineNum"> 1748 </span> : : struct dt_node *xscom;</a>
+<a name="1749"><span class="lineNum"> 1749 </span> :<span class="lineCov"> 2 : int npu_index = 0;</span></a>
<a name="1750"><span class="lineNum"> 1750 </span> : : </a>
-<a name="1751"><span class="lineNum"> 1751 </span> : : /* Create /ibm,opal/led node */</a>
-<a name="1752"><span class="lineNum"> 1752 </span> :<span class="lineCov"> 2 : dt_init_led_node();</span></a>
-<a name="1753"><span class="lineNum"> 1753 </span> : : </a>
-<a name="1754"><span class="lineNum"> 1754 </span> : : /* Parse PCIA */</a>
-<a name="1755"><span class="lineNum"> 1755 </span> :<span class="lineCov"> 2 : if (!pcia_parse())</span></a>
-<a name="1756"><span class="lineNum"> 1756 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
+<a name="1751"><span class="lineNum"> 1751 </span> : : /* Only consult HDAT for npu2 */</a>
+<a name="1752"><span class="lineNum"> 1752 </span> :<span class="lineCov"> 2 : if (cpu_type != PVR_TYPE_P9)</span></a>
+<a name="1753"><span class="lineNum"> 1753 </span> :<span class="lineCov"> 2 : return;</span></a>
+<a name="1754"><span class="lineNum"> 1754 </span> : : </a>
+<a name="1755"><span class="lineNum"> 1755 </span> :<span class="lineNoCov"> 0 : dt_for_each_compatible(dt_root, xscom, &quot;ibm,xscom&quot;) {</span></a>
+<a name="1756"><span class="lineNum"> 1756 </span> : : const struct HDIF_array_hdr *links;</a>
<a name="1757"><span class="lineNum"> 1757 </span> : : </a>
-<a name="1758"><span class="lineNum"> 1758 </span> : : /* IPL params */</a>
-<a name="1759"><span class="lineNum"> 1759 </span> :<span class="lineCov"> 2 : add_iplparams();</span></a>
-<a name="1760"><span class="lineNum"> 1760 </span> : : </a>
-<a name="1761"><span class="lineNum"> 1761 </span> : : /* Add XSCOM node (must be before chiptod, IO and FSP) */</a>
-<a name="1762"><span class="lineNum"> 1762 </span> :<span class="lineCov"> 2 : add_xscom();</span></a>
-<a name="1763"><span class="lineNum"> 1763 </span> : : </a>
-<a name="1764"><span class="lineNum"> 1764 </span> : : /* Parse MS VPD */</a>
-<a name="1765"><span class="lineNum"> 1765 </span> :<span class="lineCov"> 2 : memory_parse();</span></a>
-<a name="1766"><span class="lineNum"> 1766 </span> : : </a>
-<a name="1767"><span class="lineNum"> 1767 </span> : : /* Add any FSPs */</a>
-<a name="1768"><span class="lineNum"> 1768 </span> :<span class="lineCov"> 2 : fsp_parse();</span></a>
-<a name="1769"><span class="lineNum"> 1769 </span> : : </a>
-<a name="1770"><span class="lineNum"> 1770 </span> : : /* Add ChipTOD's */</a>
-<a name="1771"><span class="lineNum"> 1771 </span> :<span class="lineCov"> 2 : if (!add_chiptod_old() &amp;&amp; !add_chiptod_new())</span></a>
-<a name="1772"><span class="lineNum"> 1772 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CHIPTOD: No ChipTOD found !\n&quot;);</span></a>
-<a name="1773"><span class="lineNum"> 1773 </span> : : </a>
-<a name="1774"><span class="lineNum"> 1774 </span> : : /* Add NX */</a>
-<a name="1775"><span class="lineNum"> 1775 </span> :<span class="lineCov"> 2 : add_nx();</span></a>
+<a name="1758"><span class="lineNum"> 1758 </span> :<span class="lineNoCov"> 0 : links = xscom_to_pcrd(xscom, SPPCRD_IDATA_SMP_LINK);</span></a>
+<a name="1759"><span class="lineNum"> 1759 </span> :<span class="lineNoCov"> 0 : if (!links) {</span></a>
+<a name="1760"><span class="lineNum"> 1760 </span> :<span class="lineNoCov"> 0 : prerror(&quot;NPU: Unable to find matching SPPCRD for %s\n&quot;,</span></a>
+<a name="1761"><span class="lineNum"> 1761 </span> : : xscom-&gt;name);</a>
+<a name="1762"><span class="lineNum"> 1762 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="1763"><span class="lineNum"> 1763 </span> : : }</a>
+<a name="1764"><span class="lineNum"> 1764 </span> : : </a>
+<a name="1765"><span class="lineNum"> 1765 </span> : : /* should never happen, but stranger things have */</a>
+<a name="1766"><span class="lineNum"> 1766 </span> :<span class="lineNoCov"> 0 : if (!dt_find_by_name(dt_root, &quot;ibm,pcie-slots&quot;)) {</span></a>
+<a name="1767"><span class="lineNum"> 1767 </span> :<span class="lineNoCov"> 0 : prerror(&quot;PCIe slot information missing, can't add npu&quot;);</span></a>
+<a name="1768"><span class="lineNum"> 1768 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="1769"><span class="lineNum"> 1769 </span> : : }</a>
+<a name="1770"><span class="lineNum"> 1770 </span> : : </a>
+<a name="1771"><span class="lineNum"> 1771 </span> : : /* some hostboots will give us an empty array */</a>
+<a name="1772"><span class="lineNum"> 1772 </span> :<span class="lineNoCov"> 0 : if (be32_to_cpu(links-&gt;ecnt))</span></a>
+<a name="1773"><span class="lineNum"> 1773 </span> :<span class="lineNoCov"> 0 : add_npu(xscom, links, npu_index++);</span></a>
+<a name="1774"><span class="lineNum"> 1774 </span> : : }</a>
+<a name="1775"><span class="lineNum"> 1775 </span> : : }</a>
<a name="1776"><span class="lineNum"> 1776 </span> : : </a>
-<a name="1777"><span class="lineNum"> 1777 </span> : : /* Add nest mmu */</a>
-<a name="1778"><span class="lineNum"> 1778 </span> :<span class="lineCov"> 2 : add_nmmu();</span></a>
-<a name="1779"><span class="lineNum"> 1779 </span> : : </a>
-<a name="1780"><span class="lineNum"> 1780 </span> : : /* Add IO HUBs and/or PHBs */</a>
-<a name="1781"><span class="lineNum"> 1781 </span> :<span class="lineCov"> 2 : io_parse();</span></a>
-<a name="1782"><span class="lineNum"> 1782 </span> : : </a>
-<a name="1783"><span class="lineNum"> 1783 </span> : : /* Add NPU nodes */</a>
-<a name="1784"><span class="lineNum"> 1784 </span> :<span class="lineCov"> 2 : add_npus();</span></a>
-<a name="1785"><span class="lineNum"> 1785 </span> : : </a>
-<a name="1786"><span class="lineNum"> 1786 </span> : : /* Parse VPD */</a>
-<a name="1787"><span class="lineNum"> 1787 </span> :<span class="lineCov"> 2 : vpd_parse();</span></a>
-<a name="1788"><span class="lineNum"> 1788 </span> : : </a>
-<a name="1789"><span class="lineNum"> 1789 </span> : : /* Host services information. */</a>
-<a name="1790"><span class="lineNum"> 1790 </span> :<span class="lineCov"> 2 : hostservices_parse();</span></a>
-<a name="1791"><span class="lineNum"> 1791 </span> : : </a>
-<a name="1792"><span class="lineNum"> 1792 </span> : : /* Parse System Attention Indicator inforamtion */</a>
-<a name="1793"><span class="lineNum"> 1793 </span> :<span class="lineCov"> 2 : slca_dt_add_sai_node();</span></a>
-<a name="1794"><span class="lineNum"> 1794 </span> : : </a>
-<a name="1795"><span class="lineNum"> 1795 </span> :<span class="lineCov"> 2 : add_stop_levels();</span></a>
-<a name="1796"><span class="lineNum"> 1796 </span> : : </a>
-<a name="1797"><span class="lineNum"> 1797 </span> : : /* Parse node secure and trusted boot data */</a>
-<a name="1798"><span class="lineNum"> 1798 </span> :<span class="lineCov"> 2 : if (proc_gen &gt;= proc_gen_p9)</span></a>
-<a name="1799"><span class="lineNum"> 1799 </span> :<span class="lineNoCov"> 0 : node_stb_parse();</span></a>
-<a name="1800"><span class="lineNum"> 1800 </span> : : </a>
-<a name="1801"><span class="lineNum"> 1801 </span> :<span class="lineCov"> 2 : prlog(PR_DEBUG, &quot;Parsing HDAT...done\n&quot;);</span></a>
-<a name="1802"><span class="lineNum"> 1802 </span> : : </a>
-<a name="1803"><span class="lineNum"> 1803 </span> :<span class="lineCov"> 2 : return 0;</span></a>
-<a name="1804"><span class="lineNum"> 1804 </span> : : }</a>
+<a name="1777"><span class="lineNum"> 1777 </span> : : /*</a>
+<a name="1778"><span class="lineNum"> 1778 </span> : : * Legacy SPIRA is being deprecated and we have new SPIRA-H/S structures.</a>
+<a name="1779"><span class="lineNum"> 1779 </span> : : * But on older system (p7?) we will continue to get legacy SPIRA.</a>
+<a name="1780"><span class="lineNum"> 1780 </span> : : *</a>
+<a name="1781"><span class="lineNum"> 1781 </span> : : * SPIRA-S is initialized and provided by FSP. We use SPIRA-S signature</a>
+<a name="1782"><span class="lineNum"> 1782 </span> : : * to identify supported format. Also if required adjust spira pointer.</a>
+<a name="1783"><span class="lineNum"> 1783 </span> : : */</a>
+<a name="1784"><span class="lineNum"> 1784 </span> :<span class="lineCov"> 2 : static void fixup_spira(void)</span></a>
+<a name="1785"><span class="lineNum"> 1785 </span> : : {</a>
+<a name="1786"><span class="lineNum"> 1786 </span> : : #if !defined(TEST)</a>
+<a name="1787"><span class="lineNum"> 1787 </span> : : spiras = (struct spiras *)SPIRA_HEAP_BASE;</a>
+<a name="1788"><span class="lineNum"> 1788 </span> : : #endif</a>
+<a name="1789"><span class="lineNum"> 1789 </span> : : </a>
+<a name="1790"><span class="lineNum"> 1790 </span> : : /* Validate SPIRA-S signature */</a>
+<a name="1791"><span class="lineNum"> 1791 </span> :<span class="lineCov"> 2 : if (!spiras)</span></a>
+<a name="1792"><span class="lineNum"> 1792 </span> :<span class="lineCov"> 1 : return;</span></a>
+<a name="1793"><span class="lineNum"> 1793 </span> :<span class="lineCov"> 1 : if (!HDIF_check(&amp;spiras-&gt;hdr, SPIRAS_HDIF_SIG))</span></a>
+<a name="1794"><span class="lineNum"> 1794 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="1795"><span class="lineNum"> 1795 </span> : : </a>
+<a name="1796"><span class="lineNum"> 1796 </span> :<span class="lineCov"> 1 : prlog(PR_DEBUG, &quot;SPIRA-S found.\n&quot;);</span></a>
+<a name="1797"><span class="lineNum"> 1797 </span> : : </a>
+<a name="1798"><span class="lineNum"> 1798 </span> :<span class="lineCov"> 1 : spira.ntuples.sp_subsys = spiras-&gt;ntuples.sp_subsys;</span></a>
+<a name="1799"><span class="lineNum"> 1799 </span> :<span class="lineCov"> 1 : spira.ntuples.ipl_parms = spiras-&gt;ntuples.ipl_parms;</span></a>
+<a name="1800"><span class="lineNum"> 1800 </span> :<span class="lineCov"> 1 : spira.ntuples.nt_enclosure_vpd = spiras-&gt;ntuples.nt_enclosure_vpd;</span></a>
+<a name="1801"><span class="lineNum"> 1801 </span> :<span class="lineCov"> 1 : spira.ntuples.slca = spiras-&gt;ntuples.slca;</span></a>
+<a name="1802"><span class="lineNum"> 1802 </span> :<span class="lineCov"> 1 : spira.ntuples.backplane_vpd = spiras-&gt;ntuples.backplane_vpd;</span></a>
+<a name="1803"><span class="lineNum"> 1803 </span> :<span class="lineCov"> 1 : spira.ntuples.system_vpd = spiras-&gt;ntuples.system_vpd;</span></a>
+<a name="1804"><span class="lineNum"> 1804 </span> :<span class="lineCov"> 1 : spira.ntuples.proc_init = spirah.ntuples.proc_init;</span></a>
+<a name="1805"><span class="lineNum"> 1805 </span> :<span class="lineCov"> 1 : spira.ntuples.clock_vpd = spiras-&gt;ntuples.clock_vpd;</span></a>
+<a name="1806"><span class="lineNum"> 1806 </span> :<span class="lineCov"> 1 : spira.ntuples.anchor_vpd = spiras-&gt;ntuples.anchor_vpd;</span></a>
+<a name="1807"><span class="lineNum"> 1807 </span> :<span class="lineCov"> 1 : spira.ntuples.op_panel_vpd = spiras-&gt;ntuples.op_panel_vpd;</span></a>
+<a name="1808"><span class="lineNum"> 1808 </span> :<span class="lineCov"> 1 : spira.ntuples.misc_cec_fru_vpd = spiras-&gt;ntuples.misc_cec_fru_vpd;</span></a>
+<a name="1809"><span class="lineNum"> 1809 </span> :<span class="lineCov"> 1 : spira.ntuples.ms_vpd = spiras-&gt;ntuples.ms_vpd;</span></a>
+<a name="1810"><span class="lineNum"> 1810 </span> :<span class="lineCov"> 1 : spira.ntuples.cec_iohub_fru = spiras-&gt;ntuples.cec_iohub_fru;</span></a>
+<a name="1811"><span class="lineNum"> 1811 </span> :<span class="lineCov"> 1 : spira.ntuples.cpu_ctrl = spirah.ntuples.cpu_ctrl;</span></a>
+<a name="1812"><span class="lineNum"> 1812 </span> :<span class="lineCov"> 1 : spira.ntuples.mdump_src = spirah.ntuples.mdump_src;</span></a>
+<a name="1813"><span class="lineNum"> 1813 </span> :<span class="lineCov"> 1 : spira.ntuples.mdump_dst = spirah.ntuples.mdump_dst;</span></a>
+<a name="1814"><span class="lineNum"> 1814 </span> :<span class="lineCov"> 1 : spira.ntuples.mdump_res = spirah.ntuples.mdump_res;</span></a>
+<a name="1815"><span class="lineNum"> 1815 </span> :<span class="lineCov"> 1 : spira.ntuples.proc_dump_area = spirah.ntuples.proc_dump_area;</span></a>
+<a name="1816"><span class="lineNum"> 1816 </span> :<span class="lineCov"> 1 : spira.ntuples.pcia = spiras-&gt;ntuples.pcia;</span></a>
+<a name="1817"><span class="lineNum"> 1817 </span> :<span class="lineCov"> 1 : spira.ntuples.proc_chip = spiras-&gt;ntuples.proc_chip;</span></a>
+<a name="1818"><span class="lineNum"> 1818 </span> :<span class="lineCov"> 1 : spira.ntuples.hs_data = spiras-&gt;ntuples.hs_data;</span></a>
+<a name="1819"><span class="lineNum"> 1819 </span> :<span class="lineCov"> 1 : spira.ntuples.ipmi_sensor = spiras-&gt;ntuples.ipmi_sensor;</span></a>
+<a name="1820"><span class="lineNum"> 1820 </span> :<span class="lineCov"> 1 : spira.ntuples.node_stb_data = spiras-&gt;ntuples.node_stb_data;</span></a>
+<a name="1821"><span class="lineNum"> 1821 </span> : : }</a>
+<a name="1822"><span class="lineNum"> 1822 </span> : : </a>
+<a name="1823"><span class="lineNum"> 1823 </span> : : /*</a>
+<a name="1824"><span class="lineNum"> 1824 </span> : : * All the data structure addresses are relative to payload base. Hence adjust</a>
+<a name="1825"><span class="lineNum"> 1825 </span> : : * structures that are needed to capture OPAL dump during MPIPL.</a>
+<a name="1826"><span class="lineNum"> 1826 </span> : : */</a>
+<a name="1827"><span class="lineNum"> 1827 </span> :<span class="lineCov"> 2 : static void update_spirah_addr(void)</span></a>
+<a name="1828"><span class="lineNum"> 1828 </span> : : {</a>
+<a name="1829"><span class="lineNum"> 1829 </span> : : #if !defined(TEST)</a>
+<a name="1830"><span class="lineNum"> 1830 </span> : : if (proc_gen &lt; proc_gen_p9)</a>
+<a name="1831"><span class="lineNum"> 1831 </span> : : return;</a>
+<a name="1832"><span class="lineNum"> 1832 </span> : : </a>
+<a name="1833"><span class="lineNum"> 1833 </span> : : naca.spirah_addr = CPU_TO_BE64(SPIRAH_OFF);</a>
+<a name="1834"><span class="lineNum"> 1834 </span> : : naca.spira_addr = CPU_TO_BE64(SPIRA_OFF);</a>
+<a name="1835"><span class="lineNum"> 1835 </span> : : spirah.ntuples.hs_data_area.addr = CPU_TO_BE64(SPIRA_HEAP_BASE - SKIBOOT_BASE);</a>
+<a name="1836"><span class="lineNum"> 1836 </span> : : spirah.ntuples.mdump_res.addr = CPU_TO_BE64(MDRT_TABLE_BASE - SKIBOOT_BASE);</a>
+<a name="1837"><span class="lineNum"> 1837 </span> : : #endif</a>
+<a name="1838"><span class="lineNum"> 1838 </span> :<span class="lineCov"> 2 : }</span></a>
+<a name="1839"><span class="lineNum"> 1839 </span> : : </a>
+<a name="1840"><span class="lineNum"> 1840 </span> :<span class="lineCov"> 2 : int parse_hdat(bool is_opal)</span></a>
+<a name="1841"><span class="lineNum"> 1841 </span> : : {</a>
+<a name="1842"><span class="lineNum"> 1842 </span> :<span class="lineCov"> 2 : cpu_type = PVR_TYPE(mfspr(SPR_PVR));</span></a>
+<a name="1843"><span class="lineNum"> 1843 </span> : : </a>
+<a name="1844"><span class="lineNum"> 1844 </span> :<span class="lineCov"> 2 : prlog(PR_DEBUG, &quot;Parsing HDAT...\n&quot;);</span></a>
+<a name="1845"><span class="lineNum"> 1845 </span> : : </a>
+<a name="1846"><span class="lineNum"> 1846 </span> :<span class="lineCov"> 2 : fixup_spira();</span></a>
+<a name="1847"><span class="lineNum"> 1847 </span> : : </a>
+<a name="1848"><span class="lineNum"> 1848 </span> :<span class="lineCov"> 2 : update_spirah_addr();</span></a>
+<a name="1849"><span class="lineNum"> 1849 </span> : : </a>
+<a name="1850"><span class="lineNum"> 1850 </span> : : /*</a>
+<a name="1851"><span class="lineNum"> 1851 </span> : : * Basic DT root stuff</a>
+<a name="1852"><span class="lineNum"> 1852 </span> : : */</a>
+<a name="1853"><span class="lineNum"> 1853 </span> :<span class="lineCov"> 2 : dt_add_property_cells(dt_root, &quot;#address-cells&quot;, 2);</span></a>
+<a name="1854"><span class="lineNum"> 1854 </span> :<span class="lineCov"> 2 : dt_add_property_cells(dt_root, &quot;#size-cells&quot;, 2);</span></a>
+<a name="1855"><span class="lineNum"> 1855 </span> : : </a>
+<a name="1856"><span class="lineNum"> 1856 </span> :<span class="lineCov"> 2 : if (proc_gen &lt; proc_gen_p9)</span></a>
+<a name="1857"><span class="lineNum"> 1857 </span> :<span class="lineCov"> 2 : dt_add_property_string(dt_root, &quot;lid-type&quot;, is_opal ? &quot;opal&quot; : &quot;phyp&quot;);</span></a>
+<a name="1858"><span class="lineNum"> 1858 </span> : : </a>
+<a name="1859"><span class="lineNum"> 1859 </span> : : /* Add any BMCs and enable the LPC UART */</a>
+<a name="1860"><span class="lineNum"> 1860 </span> :<span class="lineCov"> 2 : bmc_parse();</span></a>
+<a name="1861"><span class="lineNum"> 1861 </span> : : </a>
+<a name="1862"><span class="lineNum"> 1862 </span> : : /* Create and populate /vpd node */</a>
+<a name="1863"><span class="lineNum"> 1863 </span> :<span class="lineCov"> 2 : dt_init_vpd_node();</span></a>
+<a name="1864"><span class="lineNum"> 1864 </span> : : </a>
+<a name="1865"><span class="lineNum"> 1865 </span> : : /* Create /ibm,opal/led node */</a>
+<a name="1866"><span class="lineNum"> 1866 </span> :<span class="lineCov"> 2 : dt_init_led_node();</span></a>
+<a name="1867"><span class="lineNum"> 1867 </span> : : </a>
+<a name="1868"><span class="lineNum"> 1868 </span> : : /* Parse PCIA */</a>
+<a name="1869"><span class="lineNum"> 1869 </span> :<span class="lineCov"> 2 : if (!pcia_parse())</span></a>
+<a name="1870"><span class="lineNum"> 1870 </span> :<span class="lineNoCov"> 0 : return -1;</span></a>
+<a name="1871"><span class="lineNum"> 1871 </span> : : </a>
+<a name="1872"><span class="lineNum"> 1872 </span> : : /* IPL params */</a>
+<a name="1873"><span class="lineNum"> 1873 </span> :<span class="lineCov"> 2 : add_iplparams();</span></a>
+<a name="1874"><span class="lineNum"> 1874 </span> : : </a>
+<a name="1875"><span class="lineNum"> 1875 </span> : : /* Add XSCOM node (must be before chiptod, IO and FSP) */</a>
+<a name="1876"><span class="lineNum"> 1876 </span> :<span class="lineCov"> 2 : add_xscom();</span></a>
+<a name="1877"><span class="lineNum"> 1877 </span> : : </a>
+<a name="1878"><span class="lineNum"> 1878 </span> : : /* Parse MS VPD */</a>
+<a name="1879"><span class="lineNum"> 1879 </span> :<span class="lineCov"> 2 : memory_parse();</span></a>
+<a name="1880"><span class="lineNum"> 1880 </span> : : </a>
+<a name="1881"><span class="lineNum"> 1881 </span> : : /* Add any FSPs */</a>
+<a name="1882"><span class="lineNum"> 1882 </span> :<span class="lineCov"> 2 : fsp_parse();</span></a>
+<a name="1883"><span class="lineNum"> 1883 </span> : : </a>
+<a name="1884"><span class="lineNum"> 1884 </span> : : /* Add ChipTOD's */</a>
+<a name="1885"><span class="lineNum"> 1885 </span> :<span class="lineCov"> 2 : if (!add_chiptod_old() &amp;&amp; !add_chiptod_new())</span></a>
+<a name="1886"><span class="lineNum"> 1886 </span> :<span class="lineNoCov"> 0 : prerror(&quot;CHIPTOD: No ChipTOD found !\n&quot;);</span></a>
+<a name="1887"><span class="lineNum"> 1887 </span> : : </a>
+<a name="1888"><span class="lineNum"> 1888 </span> : : /* Add NX */</a>
+<a name="1889"><span class="lineNum"> 1889 </span> :<span class="lineCov"> 2 : add_nx();</span></a>
+<a name="1890"><span class="lineNum"> 1890 </span> : : </a>
+<a name="1891"><span class="lineNum"> 1891 </span> : : /* Add nest mmu */</a>
+<a name="1892"><span class="lineNum"> 1892 </span> :<span class="lineCov"> 2 : add_nmmu();</span></a>
+<a name="1893"><span class="lineNum"> 1893 </span> : : </a>
+<a name="1894"><span class="lineNum"> 1894 </span> : : /* Add IO HUBs and/or PHBs */</a>
+<a name="1895"><span class="lineNum"> 1895 </span> :<span class="lineCov"> 2 : io_parse();</span></a>
+<a name="1896"><span class="lineNum"> 1896 </span> : : </a>
+<a name="1897"><span class="lineNum"> 1897 </span> : : /* Add NPU nodes */</a>
+<a name="1898"><span class="lineNum"> 1898 </span> :<span class="lineCov"> 2 : add_npus();</span></a>
+<a name="1899"><span class="lineNum"> 1899 </span> : : </a>
+<a name="1900"><span class="lineNum"> 1900 </span> : : /* Parse VPD */</a>
+<a name="1901"><span class="lineNum"> 1901 </span> :<span class="lineCov"> 2 : vpd_parse();</span></a>
+<a name="1902"><span class="lineNum"> 1902 </span> : : </a>
+<a name="1903"><span class="lineNum"> 1903 </span> : : /* Host services information. */</a>
+<a name="1904"><span class="lineNum"> 1904 </span> :<span class="lineCov"> 2 : hostservices_parse();</span></a>
+<a name="1905"><span class="lineNum"> 1905 </span> : : </a>
+<a name="1906"><span class="lineNum"> 1906 </span> : : /* Parse System Attention Indicator inforamtion */</a>
+<a name="1907"><span class="lineNum"> 1907 </span> :<span class="lineCov"> 2 : slca_dt_add_sai_node();</span></a>
+<a name="1908"><span class="lineNum"> 1908 </span> : : </a>
+<a name="1909"><span class="lineNum"> 1909 </span> :<span class="lineCov"> 2 : add_stop_levels();</span></a>
+<a name="1910"><span class="lineNum"> 1910 </span> : : </a>
+<a name="1911"><span class="lineNum"> 1911 </span> : : /* Parse node secure and trusted boot data */</a>
+<a name="1912"><span class="lineNum"> 1912 </span> :<span class="lineCov"> 2 : if (proc_gen &gt;= proc_gen_p9)</span></a>
+<a name="1913"><span class="lineNum"> 1913 </span> :<span class="lineNoCov"> 0 : node_stb_parse();</span></a>
+<a name="1914"><span class="lineNum"> 1914 </span> : : </a>
+<a name="1915"><span class="lineNum"> 1915 </span> :<span class="lineCov"> 2 : prlog(PR_DEBUG, &quot;Parsing HDAT...done\n&quot;);</span></a>
+<a name="1916"><span class="lineNum"> 1916 </span> : : </a>
+<a name="1917"><span class="lineNum"> 1917 </span> :<span class="lineCov"> 2 : return 0;</span></a>
+<a name="1918"><span class="lineNum"> 1918 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/hdata/spira.h.func-sort-c.html b/coverage-report/hdata/spira.h.func-sort-c.html
index bec8dcf..7f099ee 100644
--- a/coverage-report/hdata/spira.h.func-sort-c.html
+++ b/coverage-report/hdata/spira.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -69,7 +69,7 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.h.gcov.html#1220">cpu_state</a></td>
+ <td class="coverFn"><a href="spira.h.gcov.html#1249">cpu_state</a></td>
<td class="coverFnHi">26</td>
</tr>
</table>
diff --git a/coverage-report/hdata/spira.h.func.html b/coverage-report/hdata/spira.h.func.html
index f26e84c..39c8219 100644
--- a/coverage-report/hdata/spira.h.func.html
+++ b/coverage-report/hdata/spira.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -69,7 +69,7 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="spira.h.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="spira.h.gcov.html#1220">cpu_state</a></td>
+ <td class="coverFn"><a href="spira.h.gcov.html#1249">cpu_state</a></td>
<td class="coverFnHi">26</td>
</tr>
</table>
diff --git a/coverage-report/hdata/spira.h.gcov.html b/coverage-report/hdata/spira.h.gcov.html
index 128389c..b090f94 100644
--- a/coverage-report/hdata/spira.h.gcov.html
+++ b/coverage-report/hdata/spira.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -221,7 +221,7 @@
<a name="150"><span class="lineNum"> 150 </span> : : u8 reserved[0x180];</a>
<a name="151"><span class="lineNum"> 151 </span> : : } __packed __align(0x100);</a>
<a name="152"><span class="lineNum"> 152 </span> : : </a>
-<a name="153"><span class="lineNum"> 153 </span> : : extern struct spiras *spiras;</a>
+<a name="153"><span class="lineNum"> 153 </span> : : extern struct spiras *skiboot_constant_addr spiras;</a>
<a name="154"><span class="lineNum"> 154 </span> : : </a>
<a name="155"><span class="lineNum"> 155 </span> : : </a>
<a name="156"><span class="lineNum"> 156 </span> : : /* This macro can be used to check the validity of a pointer returned</a>
@@ -375,7 +375,7 @@
<a name="304"><span class="lineNum"> 304 </span> : : __be32 firmware_bar;</a>
<a name="305"><span class="lineNum"> 305 </span> : : __be32 internal_bar;</a>
<a name="306"><span class="lineNum"> 306 </span> : : </a>
-<a name="307"><span class="lineNum"> 307 </span> : : __be32 reserved2;</a>
+<a name="307"><span class="lineNum"> 307 </span> : : __be32 mctp_base;</a>
<a name="308"><span class="lineNum"> 308 </span> : : </a>
<a name="309"><span class="lineNum"> 309 </span> : : __be64 uart_base;</a>
<a name="310"><span class="lineNum"> 310 </span> : : __be32 uart_size;</a>
@@ -387,924 +387,953 @@
<a name="316"><span class="lineNum"> 316 </span> : : #define UART_INT_LVL_LOW 0x1</a>
<a name="317"><span class="lineNum"> 317 </span> : : #define UART_INT_RISING 0x2</a>
<a name="318"><span class="lineNum"> 318 </span> : : #define UART_INT_LVL_HIGH 0x3</a>
-<a name="319"><span class="lineNum"> 319 </span> : : uint8_t reserved3[2];</a>
-<a name="320"><span class="lineNum"> 320 </span> : : </a>
-<a name="321"><span class="lineNum"> 321 </span> : : __be64 bt_base;</a>
-<a name="322"><span class="lineNum"> 322 </span> : : __be32 bt_size;</a>
-<a name="323"><span class="lineNum"> 323 </span> : : uint8_t bt_sms_int_num;</a>
-<a name="324"><span class="lineNum"> 324 </span> : : uint8_t bt_bmc_response_int_num;</a>
-<a name="325"><span class="lineNum"> 325 </span> : : uint8_t reserved4[2];</a>
-<a name="326"><span class="lineNum"> 326 </span> : : } __packed lpc;</a>
-<a name="327"><span class="lineNum"> 327 </span> : : };</a>
-<a name="328"><span class="lineNum"> 328 </span> : : } __packed;</a>
-<a name="329"><span class="lineNum"> 329 </span> : : </a>
-<a name="330"><span class="lineNum"> 330 </span> : : /*</a>
-<a name="331"><span class="lineNum"> 331 </span> : : * IPL Parms structure</a>
-<a name="332"><span class="lineNum"> 332 </span> : : *</a>
-<a name="333"><span class="lineNum"> 333 </span> : : */</a>
-<a name="334"><span class="lineNum"> 334 </span> : : </a>
-<a name="335"><span class="lineNum"> 335 </span> : : /* Idata index 0: System Parameters */</a>
-<a name="336"><span class="lineNum"> 336 </span> : : #define IPLPARAMS_SYSPARAMS 0</a>
-<a name="337"><span class="lineNum"> 337 </span> : : </a>
-<a name="338"><span class="lineNum"> 338 </span> : : struct iplparams_sysparams {</a>
-<a name="339"><span class="lineNum"> 339 </span> : : char sys_model[4];</a>
-<a name="340"><span class="lineNum"> 340 </span> : : char cpu_feature_code[4];</a>
-<a name="341"><span class="lineNum"> 341 </span> : : __be32 effective_pvr;</a>
-<a name="342"><span class="lineNum"> 342 </span> : : __be32 system_type;</a>
-<a name="343"><span class="lineNum"> 343 </span> : : uint8_t num_lpar_oct[8];</a>
-<a name="344"><span class="lineNum"> 344 </span> : : __be32 abc_bus_speed;</a>
-<a name="345"><span class="lineNum"> 345 </span> : : __be32 wxyz_bus_speed;</a>
-<a name="346"><span class="lineNum"> 346 </span> : : __be32 sys_eco_mode;</a>
-<a name="347"><span class="lineNum"> 347 </span> : : #define SYS_ATTR_MULTIPLE_TPM PPC_BIT32(0)</a>
-<a name="348"><span class="lineNum"> 348 </span> : : #define SYS_ATTR_RISK_LEVEL PPC_BIT32(3)</a>
-<a name="349"><span class="lineNum"> 349 </span> : : #define SYS_ATTR_MPIPL_SUPPORTED PPC_BIT32(5)</a>
-<a name="350"><span class="lineNum"> 350 </span> : : __be32 sys_attributes;</a>
-<a name="351"><span class="lineNum"> 351 </span> : : __be32 mem_scrubbing;</a>
-<a name="352"><span class="lineNum"> 352 </span> : : __be16 cur_spl_value;</a>
-<a name="353"><span class="lineNum"> 353 </span> : : uint8_t pump_mode; /* Reserved */</a>
-<a name="354"><span class="lineNum"> 354 </span> : : uint8_t use_pore_sleep;</a>
-<a name="355"><span class="lineNum"> 355 </span> : : __be32 pore_image_size; /* Reserved */</a>
-<a name="356"><span class="lineNum"> 356 </span> : : uint8_t vtpm_enabled;</a>
-<a name="357"><span class="lineNum"> 357 </span> : : uint8_t hw_page_table_size; /* &gt;= 0x59 */</a>
-<a name="358"><span class="lineNum"> 358 </span> : : __be16 hv_disp_wheel; /* &gt;= 0x58 */</a>
-<a name="359"><span class="lineNum"> 359 </span> : : __be32 nest_freq_mhz; /* &gt;= 0x5b */</a>
-<a name="360"><span class="lineNum"> 360 </span> : : uint8_t split_core_mode; /* &gt;= 0x5c */</a>
-<a name="361"><span class="lineNum"> 361 </span> : : uint8_t reserved[1];</a>
-<a name="362"><span class="lineNum"> 362 </span> : : #define KEY_CLEAR_ALL PPC_BIT16(0)</a>
-<a name="363"><span class="lineNum"> 363 </span> : : #define KEY_CLEAR_OS_KEYS PPC_BIT16(1)</a>
-<a name="364"><span class="lineNum"> 364 </span> : : #define KEY_CLEAR_MFG PPC_BIT16(7)</a>
-<a name="365"><span class="lineNum"> 365 </span> : : __be16 host_fw_key_clear;</a>
-<a name="366"><span class="lineNum"> 366 </span> : : uint8_t sys_vendor[64]; /* &gt;= 0x5f */</a>
-<a name="367"><span class="lineNum"> 367 </span> : : #define SEC_CONTAINER_SIG_CHECKING PPC_BIT16(0)</a>
-<a name="368"><span class="lineNum"> 368 </span> : : #define SEC_HASHES_EXTENDED_TO_TPM PPC_BIT16(1)</a>
-<a name="369"><span class="lineNum"> 369 </span> : : #define PHYSICAL_PRESENCE_ASSERTED PPC_BIT16(3)</a>
-<a name="370"><span class="lineNum"> 370 </span> : : __be16 sys_sec_setting; /* &gt;= 0x60 */</a>
-<a name="371"><span class="lineNum"> 371 </span> : : __be16 tpm_config_bit; /* &gt;= 0x60 */</a>
-<a name="372"><span class="lineNum"> 372 </span> : : __be16 tpm_drawer; /* &gt;= 0x60 */</a>
-<a name="373"><span class="lineNum"> 373 </span> : : __be16 hw_key_hash_size; /* &gt;= 0x60 */</a>
-<a name="374"><span class="lineNum"> 374 </span> : : #define SYSPARAMS_HW_KEY_HASH_MAX 64</a>
-<a name="375"><span class="lineNum"> 375 </span> : : uint8_t hw_key_hash[SYSPARAMS_HW_KEY_HASH_MAX]; /* &gt;= 0x60 */</a>
-<a name="376"><span class="lineNum"> 376 </span> : : uint8_t sys_family_str[64]; /* vendor,name */</a>
-<a name="377"><span class="lineNum"> 377 </span> : : uint8_t sys_type_str[64]; /* vendor,type */</a>
-<a name="378"><span class="lineNum"> 378 </span> : : } __packed;</a>
-<a name="379"><span class="lineNum"> 379 </span> : : </a>
-<a name="380"><span class="lineNum"> 380 </span> : : /* Idata index 1: IPL parameters */</a>
-<a name="381"><span class="lineNum"> 381 </span> : : #define IPLPARAMS_IPLPARAMS 1</a>
-<a name="382"><span class="lineNum"> 382 </span> : : </a>
-<a name="383"><span class="lineNum"> 383 </span> : : struct iplparams_iplparams {</a>
-<a name="384"><span class="lineNum"> 384 </span> : : uint8_t reserved;</a>
-<a name="385"><span class="lineNum"> 385 </span> : : uint8_t hv_ipl_dest;</a>
-<a name="386"><span class="lineNum"> 386 </span> : : uint8_t ipl_side;</a>
-<a name="387"><span class="lineNum"> 387 </span> : : #define IPLPARAMS_CEC_FW_IPL_SIDE_TEMP 0x10</a>
-<a name="388"><span class="lineNum"> 388 </span> : : #define IPLPARAMS_FSP_FW_IPL_SIDE_TEMP 0x01</a>
-<a name="389"><span class="lineNum"> 389 </span> : : uint8_t ipl_speed;</a>
-<a name="390"><span class="lineNum"> 390 </span> : : __be16 cec_ipl_attrib;</a>
-<a name="391"><span class="lineNum"> 391 </span> : : #define IPLPARAMS_ATTRIB_MEM_PRESERVE PPC_BIT16(2)</a>
-<a name="392"><span class="lineNum"> 392 </span> : : uint8_t cec_ipl_maj_type;</a>
-<a name="393"><span class="lineNum"> 393 </span> : : #define IPLPARAMS_MAJ_TYPE_REIPL 0x1</a>
-<a name="394"><span class="lineNum"> 394 </span> : : uint8_t cec_ipl_min_type;</a>
-<a name="395"><span class="lineNum"> 395 </span> : : #define IPLPARAMS_MIN_TYPE_POST_DUMP 0xc</a>
-<a name="396"><span class="lineNum"> 396 </span> : : #define IPLPARAMS_MIN_TYPE_PLAT_REBOOT 0xd</a>
-<a name="397"><span class="lineNum"> 397 </span> : : uint8_t os_ipl_mode;</a>
-<a name="398"><span class="lineNum"> 398 </span> : : uint8_t keylock_pos;</a>
-<a name="399"><span class="lineNum"> 399 </span> : : uint8_t lmb_size;</a>
-<a name="400"><span class="lineNum"> 400 </span> : : uint8_t deprecated;</a>
-<a name="401"><span class="lineNum"> 401 </span> : : __be32 max_hsl_opticonnect;</a>
-<a name="402"><span class="lineNum"> 402 </span> : : __be32 other_attrib;</a>
-<a name="403"><span class="lineNum"> 403 </span> : : #define IPLPARAMS_OATTR_RST_PCI_BUSNO 0x08000000</a>
-<a name="404"><span class="lineNum"> 404 </span> : : #define IPLPARAMS_OATTR_CLEAR_NVRAM 0x04000000</a>
-<a name="405"><span class="lineNum"> 405 </span> : : #define IPLPARAMS_OATRR_LIGHT_PATH 0x00000004</a>
-<a name="406"><span class="lineNum"> 406 </span> : : __be16 huge_page_count;</a>
-<a name="407"><span class="lineNum"> 407 </span> : : uint8_t huge_page_size;</a>
-<a name="408"><span class="lineNum"> 408 </span> : : #define IPLPARAMS_HUGE_PG_SIZE_16G 0</a>
-<a name="409"><span class="lineNum"> 409 </span> : : uint8_t num_vlan_switches;</a>
-<a name="410"><span class="lineNum"> 410 </span> : : __be32 reserved2;</a>
-<a name="411"><span class="lineNum"> 411 </span> : : __be32 enlarge_io; /* &gt;= 0x5a */</a>
-<a name="412"><span class="lineNum"> 412 </span> : : uint8_t core_config;</a>
-<a name="413"><span class="lineNum"> 413 </span> : : #define IPLPARAMS_CORE_NORMAL 0x00</a>
-<a name="414"><span class="lineNum"> 414 </span> : : #define IPLPARAMS_CORE_FUSE 0x01</a>
-<a name="415"><span class="lineNum"> 415 </span> : : } __packed;</a>
-<a name="416"><span class="lineNum"> 416 </span> : : </a>
-<a name="417"><span class="lineNum"> 417 </span> : : /* Idata index 4: Platform Dump Descriptor */</a>
-<a name="418"><span class="lineNum"> 418 </span> : : #define IPLPARAMS_PLATFORM_DUMP 4</a>
-<a name="419"><span class="lineNum"> 419 </span> : : </a>
-<a name="420"><span class="lineNum"> 420 </span> : : struct iplparams_dump {</a>
-<a name="421"><span class="lineNum"> 421 </span> : : __be16 flags;</a>
-<a name="422"><span class="lineNum"> 422 </span> : : uint8_t reserved1;</a>
-<a name="423"><span class="lineNum"> 423 </span> : : uint8_t policy;</a>
-<a name="424"><span class="lineNum"> 424 </span> : : #define HYP_DUMP_POLICY_NORMAL 0x00</a>
-<a name="425"><span class="lineNum"> 425 </span> : : __be32 dump_id;</a>
-<a name="426"><span class="lineNum"> 426 </span> : : __be64 reserved2;</a>
-<a name="427"><span class="lineNum"> 427 </span> : : __be64 act_dump_sz;</a>
-<a name="428"><span class="lineNum"> 428 </span> : : __be32 max_hw_dump_sz;</a>
-<a name="429"><span class="lineNum"> 429 </span> : : __be32 act_hw_dump_sz;</a>
-<a name="430"><span class="lineNum"> 430 </span> : : __be32 max_sp_dump_sz;</a>
-<a name="431"><span class="lineNum"> 431 </span> : : __be32 plid;</a>
-<a name="432"><span class="lineNum"> 432 </span> : : } __packed;</a>
+<a name="319"><span class="lineNum"> 319 </span> : : uint8_t uart_valid;</a>
+<a name="320"><span class="lineNum"> 320 </span> : : uint8_t reserved3;</a>
+<a name="321"><span class="lineNum"> 321 </span> : : </a>
+<a name="322"><span class="lineNum"> 322 </span> : : __be64 bt_base;</a>
+<a name="323"><span class="lineNum"> 323 </span> : : __be32 bt_size;</a>
+<a name="324"><span class="lineNum"> 324 </span> : : uint8_t bt_sms_int_num;</a>
+<a name="325"><span class="lineNum"> 325 </span> : : uint8_t bt_bmc_response_int_num;</a>
+<a name="326"><span class="lineNum"> 326 </span> : : uint8_t reserved4[2];</a>
+<a name="327"><span class="lineNum"> 327 </span> : : </a>
+<a name="328"><span class="lineNum"> 328 </span> : : __be16 kcs_data_reg_addr;</a>
+<a name="329"><span class="lineNum"> 329 </span> : : __be16 kcs_status_reg_addr;</a>
+<a name="330"><span class="lineNum"> 330 </span> : : uint8_t kcs_int_number;</a>
+<a name="331"><span class="lineNum"> 331 </span> : : </a>
+<a name="332"><span class="lineNum"> 332 </span> : : __be64 uart2_base;</a>
+<a name="333"><span class="lineNum"> 333 </span> : : __be32 uart2_size;</a>
+<a name="334"><span class="lineNum"> 334 </span> : : __be32 uart2_clk; /* UART baud clock in Hz */</a>
+<a name="335"><span class="lineNum"> 335 </span> : : __be32 uart2_baud; /* UART baud rate */</a>
+<a name="336"><span class="lineNum"> 336 </span> : : uint8_t uart2_int_number;</a>
+<a name="337"><span class="lineNum"> 337 </span> : : uint8_t uart2_int_type;</a>
+<a name="338"><span class="lineNum"> 338 </span> : : uint8_t uart2_valid;</a>
+<a name="339"><span class="lineNum"> 339 </span> : : uint8_t reserved5;</a>
+<a name="340"><span class="lineNum"> 340 </span> : : } __packed lpc;</a>
+<a name="341"><span class="lineNum"> 341 </span> : : };</a>
+<a name="342"><span class="lineNum"> 342 </span> : : } __packed;</a>
+<a name="343"><span class="lineNum"> 343 </span> : : </a>
+<a name="344"><span class="lineNum"> 344 </span> : : /*</a>
+<a name="345"><span class="lineNum"> 345 </span> : : * IPL Parms structure</a>
+<a name="346"><span class="lineNum"> 346 </span> : : *</a>
+<a name="347"><span class="lineNum"> 347 </span> : : */</a>
+<a name="348"><span class="lineNum"> 348 </span> : : </a>
+<a name="349"><span class="lineNum"> 349 </span> : : /* Idata index 0: System Parameters */</a>
+<a name="350"><span class="lineNum"> 350 </span> : : #define IPLPARAMS_SYSPARAMS 0</a>
+<a name="351"><span class="lineNum"> 351 </span> : : </a>
+<a name="352"><span class="lineNum"> 352 </span> : : struct iplparams_sysparams {</a>
+<a name="353"><span class="lineNum"> 353 </span> : : char sys_model[4];</a>
+<a name="354"><span class="lineNum"> 354 </span> : : char cpu_feature_code[4];</a>
+<a name="355"><span class="lineNum"> 355 </span> : : __be32 effective_pvr;</a>
+<a name="356"><span class="lineNum"> 356 </span> : : __be32 system_type;</a>
+<a name="357"><span class="lineNum"> 357 </span> : : uint8_t num_lpar_oct[8];</a>
+<a name="358"><span class="lineNum"> 358 </span> : : __be32 abc_bus_speed;</a>
+<a name="359"><span class="lineNum"> 359 </span> : : __be32 wxyz_bus_speed;</a>
+<a name="360"><span class="lineNum"> 360 </span> : : __be32 sys_eco_mode;</a>
+<a name="361"><span class="lineNum"> 361 </span> : : #define SYS_ATTR_MULTIPLE_TPM PPC_BIT32(0)</a>
+<a name="362"><span class="lineNum"> 362 </span> : : #define SYS_ATTR_RISK_LEVEL PPC_BIT32(3)</a>
+<a name="363"><span class="lineNum"> 363 </span> : : #define SYS_ATTR_MPIPL_SUPPORTED PPC_BIT32(5)</a>
+<a name="364"><span class="lineNum"> 364 </span> : : __be32 sys_attributes;</a>
+<a name="365"><span class="lineNum"> 365 </span> : : __be32 mem_scrubbing;</a>
+<a name="366"><span class="lineNum"> 366 </span> : : __be16 cur_spl_value;</a>
+<a name="367"><span class="lineNum"> 367 </span> : : uint8_t pump_mode; /* Reserved */</a>
+<a name="368"><span class="lineNum"> 368 </span> : : uint8_t use_pore_sleep;</a>
+<a name="369"><span class="lineNum"> 369 </span> : : __be32 pore_image_size; /* Reserved */</a>
+<a name="370"><span class="lineNum"> 370 </span> : : uint8_t vtpm_enabled;</a>
+<a name="371"><span class="lineNum"> 371 </span> : : uint8_t hw_page_table_size; /* &gt;= 0x59 */</a>
+<a name="372"><span class="lineNum"> 372 </span> : : __be16 hv_disp_wheel; /* &gt;= 0x58 */</a>
+<a name="373"><span class="lineNum"> 373 </span> : : __be32 nest_freq_mhz; /* &gt;= 0x5b */</a>
+<a name="374"><span class="lineNum"> 374 </span> : : uint8_t split_core_mode; /* &gt;= 0x5c */</a>
+<a name="375"><span class="lineNum"> 375 </span> : : uint8_t reserved[1];</a>
+<a name="376"><span class="lineNum"> 376 </span> : : #define KEY_CLEAR_ALL PPC_BIT16(0)</a>
+<a name="377"><span class="lineNum"> 377 </span> : : #define KEY_CLEAR_OS_KEYS PPC_BIT16(1)</a>
+<a name="378"><span class="lineNum"> 378 </span> : : #define KEY_CLEAR_MFG PPC_BIT16(7)</a>
+<a name="379"><span class="lineNum"> 379 </span> : : __be16 host_fw_key_clear;</a>
+<a name="380"><span class="lineNum"> 380 </span> : : uint8_t sys_vendor[64]; /* &gt;= 0x5f */</a>
+<a name="381"><span class="lineNum"> 381 </span> : : #define SEC_CONTAINER_SIG_CHECKING PPC_BIT16(0)</a>
+<a name="382"><span class="lineNum"> 382 </span> : : #define SEC_HASHES_EXTENDED_TO_TPM PPC_BIT16(1)</a>
+<a name="383"><span class="lineNum"> 383 </span> : : #define PHYSICAL_PRESENCE_ASSERTED PPC_BIT16(3)</a>
+<a name="384"><span class="lineNum"> 384 </span> : : __be16 sys_sec_setting; /* &gt;= 0x60 */</a>
+<a name="385"><span class="lineNum"> 385 </span> : : __be16 tpm_config_bit; /* &gt;= 0x60 */</a>
+<a name="386"><span class="lineNum"> 386 </span> : : __be16 tpm_drawer; /* &gt;= 0x60 */</a>
+<a name="387"><span class="lineNum"> 387 </span> : : __be16 hw_key_hash_size; /* &gt;= 0x60 */</a>
+<a name="388"><span class="lineNum"> 388 </span> : : #define SYSPARAMS_HW_KEY_HASH_MAX 64</a>
+<a name="389"><span class="lineNum"> 389 </span> : : uint8_t hw_key_hash[SYSPARAMS_HW_KEY_HASH_MAX]; /* &gt;= 0x60 */</a>
+<a name="390"><span class="lineNum"> 390 </span> : : uint8_t sys_family_str[64]; /* vendor,name */</a>
+<a name="391"><span class="lineNum"> 391 </span> : : uint8_t sys_type_str[64]; /* vendor,type */</a>
+<a name="392"><span class="lineNum"> 392 </span> : : } __packed;</a>
+<a name="393"><span class="lineNum"> 393 </span> : : </a>
+<a name="394"><span class="lineNum"> 394 </span> : : /* Idata index 1: IPL parameters */</a>
+<a name="395"><span class="lineNum"> 395 </span> : : #define IPLPARAMS_IPLPARAMS 1</a>
+<a name="396"><span class="lineNum"> 396 </span> : : </a>
+<a name="397"><span class="lineNum"> 397 </span> : : struct iplparams_iplparams {</a>
+<a name="398"><span class="lineNum"> 398 </span> : : uint8_t reserved;</a>
+<a name="399"><span class="lineNum"> 399 </span> : : uint8_t hv_ipl_dest;</a>
+<a name="400"><span class="lineNum"> 400 </span> : : uint8_t ipl_side;</a>
+<a name="401"><span class="lineNum"> 401 </span> : : #define IPLPARAMS_CEC_FW_IPL_SIDE_TEMP 0x10</a>
+<a name="402"><span class="lineNum"> 402 </span> : : #define IPLPARAMS_FSP_FW_IPL_SIDE_TEMP 0x01</a>
+<a name="403"><span class="lineNum"> 403 </span> : : uint8_t ipl_speed;</a>
+<a name="404"><span class="lineNum"> 404 </span> : : __be16 cec_ipl_attrib;</a>
+<a name="405"><span class="lineNum"> 405 </span> : : #define IPLPARAMS_ATTRIB_MEM_PRESERVE PPC_BIT16(2)</a>
+<a name="406"><span class="lineNum"> 406 </span> : : uint8_t cec_ipl_maj_type;</a>
+<a name="407"><span class="lineNum"> 407 </span> : : #define IPLPARAMS_MAJ_TYPE_REIPL 0x1</a>
+<a name="408"><span class="lineNum"> 408 </span> : : uint8_t cec_ipl_min_type;</a>
+<a name="409"><span class="lineNum"> 409 </span> : : #define IPLPARAMS_MIN_TYPE_POST_DUMP 0xc</a>
+<a name="410"><span class="lineNum"> 410 </span> : : #define IPLPARAMS_MIN_TYPE_PLAT_REBOOT 0xd</a>
+<a name="411"><span class="lineNum"> 411 </span> : : uint8_t os_ipl_mode;</a>
+<a name="412"><span class="lineNum"> 412 </span> : : uint8_t keylock_pos;</a>
+<a name="413"><span class="lineNum"> 413 </span> : : uint8_t lmb_size;</a>
+<a name="414"><span class="lineNum"> 414 </span> : : uint8_t deprecated;</a>
+<a name="415"><span class="lineNum"> 415 </span> : : __be32 max_hsl_opticonnect;</a>
+<a name="416"><span class="lineNum"> 416 </span> : : __be32 other_attrib;</a>
+<a name="417"><span class="lineNum"> 417 </span> : : #define IPLPARAMS_OATTR_RST_PCI_BUSNO 0x08000000</a>
+<a name="418"><span class="lineNum"> 418 </span> : : #define IPLPARAMS_OATTR_CLEAR_NVRAM 0x04000000</a>
+<a name="419"><span class="lineNum"> 419 </span> : : #define IPLPARAMS_OATRR_LIGHT_PATH 0x00000004</a>
+<a name="420"><span class="lineNum"> 420 </span> : : __be16 huge_page_count;</a>
+<a name="421"><span class="lineNum"> 421 </span> : : uint8_t huge_page_size;</a>
+<a name="422"><span class="lineNum"> 422 </span> : : #define IPLPARAMS_HUGE_PG_SIZE_16G 0</a>
+<a name="423"><span class="lineNum"> 423 </span> : : uint8_t num_vlan_switches;</a>
+<a name="424"><span class="lineNum"> 424 </span> : : __be32 reserved2;</a>
+<a name="425"><span class="lineNum"> 425 </span> : : __be32 enlarge_io; /* &gt;= 0x5a */</a>
+<a name="426"><span class="lineNum"> 426 </span> : : uint8_t core_config;</a>
+<a name="427"><span class="lineNum"> 427 </span> : : #define IPLPARAMS_CORE_NORMAL 0x00</a>
+<a name="428"><span class="lineNum"> 428 </span> : : #define IPLPARAMS_CORE_FUSE 0x01</a>
+<a name="429"><span class="lineNum"> 429 </span> : : } __packed;</a>
+<a name="430"><span class="lineNum"> 430 </span> : : </a>
+<a name="431"><span class="lineNum"> 431 </span> : : /* Idata index 4: Platform Dump Descriptor */</a>
+<a name="432"><span class="lineNum"> 432 </span> : : #define IPLPARAMS_PLATFORM_DUMP 4</a>
<a name="433"><span class="lineNum"> 433 </span> : : </a>
-<a name="434"><span class="lineNum"> 434 </span> : : /* Idata index 8: serial ports */</a>
-<a name="435"><span class="lineNum"> 435 </span> : : #define IPLPARMS_IDATA_SERIAL 8</a>
-<a name="436"><span class="lineNum"> 436 </span> : : </a>
-<a name="437"><span class="lineNum"> 437 </span> : : /* An HDIF array of serial descriptions */</a>
-<a name="438"><span class="lineNum"> 438 </span> : : struct iplparms_serial {</a>
-<a name="439"><span class="lineNum"> 439 </span> : : uint8_t loc_code[LOC_CODE_SIZE];</a>
-<a name="440"><span class="lineNum"> 440 </span> : : __be16 rsrc_id;</a>
-<a name="441"><span class="lineNum"> 441 </span> : : __be16 flags;</a>
-<a name="442"><span class="lineNum"> 442 </span> : : #define PLPARMS_SERIAL_FLAGS_CALLHOME 0x8000</a>
-<a name="443"><span class="lineNum"> 443 </span> : : } __packed;</a>
-<a name="444"><span class="lineNum"> 444 </span> : : </a>
-<a name="445"><span class="lineNum"> 445 </span> : : /* Idata index 9: FW features */</a>
-<a name="446"><span class="lineNum"> 446 </span> : : #define IPLPARAMS_FEATURES 9</a>
-<a name="447"><span class="lineNum"> 447 </span> : : struct iplparams_feature {</a>
-<a name="448"><span class="lineNum"> 448 </span> : : char name[64];</a>
-<a name="449"><span class="lineNum"> 449 </span> : : __be64 flags;</a>
-<a name="450"><span class="lineNum"> 450 </span> : : } __packed;</a>
-<a name="451"><span class="lineNum"> 451 </span> : : </a>
-<a name="452"><span class="lineNum"> 452 </span> : : /*</a>
-<a name="453"><span class="lineNum"> 453 </span> : : * Chip TOD structure</a>
-<a name="454"><span class="lineNum"> 454 </span> : : *</a>
-<a name="455"><span class="lineNum"> 455 </span> : : * This is an array of 32 entries (I assume per possible chip)</a>
-<a name="456"><span class="lineNum"> 456 </span> : : */</a>
-<a name="457"><span class="lineNum"> 457 </span> : : </a>
-<a name="458"><span class="lineNum"> 458 </span> : : /* Idata index 0: Chip ID data (array) */</a>
-<a name="459"><span class="lineNum"> 459 </span> : : #define CHIPTOD_IDATA_CHIPID 0</a>
-<a name="460"><span class="lineNum"> 460 </span> : : </a>
-<a name="461"><span class="lineNum"> 461 </span> : : struct chiptod_chipid {</a>
-<a name="462"><span class="lineNum"> 462 </span> : : __be32 chip_id;</a>
-<a name="463"><span class="lineNum"> 463 </span> : : __be32 flags;</a>
-<a name="464"><span class="lineNum"> 464 </span> : : #define CHIPTOD_ID_FLAGS_PRIMARY 0x02</a>
-<a name="465"><span class="lineNum"> 465 </span> : : #define CHIPTOD_ID_FLAGS_SECONDARY 0x01</a>
-<a name="466"><span class="lineNum"> 466 </span> : : #define CHIPTOD_ID_FLAGS_STATUS_MASK 0x0c</a>
-<a name="467"><span class="lineNum"> 467 </span> : : #define CHIPTOD_ID_FLAGS_STATUS_OK 0x04</a>
-<a name="468"><span class="lineNum"> 468 </span> : : #define CHIPTOD_ID_FLAGS_STATUS_NOK 0x08</a>
-<a name="469"><span class="lineNum"> 469 </span> : : } __packed;</a>
-<a name="470"><span class="lineNum"> 470 </span> : : </a>
-<a name="471"><span class="lineNum"> 471 </span> : : /* Idata index 0: Chip Initialization data */</a>
-<a name="472"><span class="lineNum"> 472 </span> : : #define CHIPTOD_IDATA_CHIPINIT 1</a>
-<a name="473"><span class="lineNum"> 473 </span> : : </a>
-<a name="474"><span class="lineNum"> 474 </span> : : struct chiptod_chipinit {</a>
-<a name="475"><span class="lineNum"> 475 </span> : : __be32 ctrl_reg_internal;</a>
-<a name="476"><span class="lineNum"> 476 </span> : : __be32 tod_ctrl_reg;</a>
-<a name="477"><span class="lineNum"> 477 </span> : : } __packed;</a>
-<a name="478"><span class="lineNum"> 478 </span> : : </a>
-<a name="479"><span class="lineNum"> 479 </span> : : /*</a>
-<a name="480"><span class="lineNum"> 480 </span> : : * MS VPD - Memory Description Tree</a>
-<a name="481"><span class="lineNum"> 481 </span> : : *</a>
-<a name="482"><span class="lineNum"> 482 </span> : : * One such structure pointing to the various memory arrays</a>
-<a name="483"><span class="lineNum"> 483 </span> : : * along with other infos about the BCRs, Page Mover, XSCOM,...</a>
-<a name="484"><span class="lineNum"> 484 </span> : : */</a>
-<a name="485"><span class="lineNum"> 485 </span> : : #define MSVPD_HDIF_SIG &quot;MS VPD&quot;</a>
-<a name="486"><span class="lineNum"> 486 </span> : : </a>
-<a name="487"><span class="lineNum"> 487 </span> : : /* Idata index 0: Mainstore address config */</a>
-<a name="488"><span class="lineNum"> 488 </span> : : #define MSVPD_IDATA_MS_ADDR_CONFIG 0</a>
-<a name="489"><span class="lineNum"> 489 </span> : : </a>
-<a name="490"><span class="lineNum"> 490 </span> : : /* Mainstore Address Configuration */</a>
-<a name="491"><span class="lineNum"> 491 </span> : : struct msvpd_ms_addr_config {</a>
-<a name="492"><span class="lineNum"> 492 </span> : : __be64 max_configured_ms_address;</a>
-<a name="493"><span class="lineNum"> 493 </span> : : __be64 max_possible_ms_address;</a>
-<a name="494"><span class="lineNum"> 494 </span> : : __be32 deprecated;</a>
-<a name="495"><span class="lineNum"> 495 </span> : : __be64 mirrorable_memory_starting_address;</a>
-<a name="496"><span class="lineNum"> 496 </span> : : } __packed;</a>
-<a name="497"><span class="lineNum"> 497 </span> : : </a>
-<a name="498"><span class="lineNum"> 498 </span> : : /* Idata index 1: Total configured mainstore */</a>
-<a name="499"><span class="lineNum"> 499 </span> : : #define MSVPD_IDATA_TOTAL_CONFIG_MS 1</a>
+<a name="434"><span class="lineNum"> 434 </span> : : struct iplparams_dump {</a>
+<a name="435"><span class="lineNum"> 435 </span> : : __be16 flags;</a>
+<a name="436"><span class="lineNum"> 436 </span> : : uint8_t reserved1;</a>
+<a name="437"><span class="lineNum"> 437 </span> : : uint8_t policy;</a>
+<a name="438"><span class="lineNum"> 438 </span> : : #define HYP_DUMP_POLICY_NORMAL 0x00</a>
+<a name="439"><span class="lineNum"> 439 </span> : : __be32 dump_id;</a>
+<a name="440"><span class="lineNum"> 440 </span> : : __be64 reserved2;</a>
+<a name="441"><span class="lineNum"> 441 </span> : : __be64 act_dump_sz;</a>
+<a name="442"><span class="lineNum"> 442 </span> : : __be32 max_hw_dump_sz;</a>
+<a name="443"><span class="lineNum"> 443 </span> : : __be32 act_hw_dump_sz;</a>
+<a name="444"><span class="lineNum"> 444 </span> : : __be32 max_sp_dump_sz;</a>
+<a name="445"><span class="lineNum"> 445 </span> : : __be32 plid;</a>
+<a name="446"><span class="lineNum"> 446 </span> : : } __packed;</a>
+<a name="447"><span class="lineNum"> 447 </span> : : </a>
+<a name="448"><span class="lineNum"> 448 </span> : : /* Idata index 8: serial ports */</a>
+<a name="449"><span class="lineNum"> 449 </span> : : #define IPLPARMS_IDATA_SERIAL 8</a>
+<a name="450"><span class="lineNum"> 450 </span> : : </a>
+<a name="451"><span class="lineNum"> 451 </span> : : /* An HDIF array of serial descriptions */</a>
+<a name="452"><span class="lineNum"> 452 </span> : : struct iplparms_serial {</a>
+<a name="453"><span class="lineNum"> 453 </span> : : uint8_t loc_code[LOC_CODE_SIZE];</a>
+<a name="454"><span class="lineNum"> 454 </span> : : __be16 rsrc_id;</a>
+<a name="455"><span class="lineNum"> 455 </span> : : __be16 flags;</a>
+<a name="456"><span class="lineNum"> 456 </span> : : #define PLPARMS_SERIAL_FLAGS_CALLHOME 0x8000</a>
+<a name="457"><span class="lineNum"> 457 </span> : : } __packed;</a>
+<a name="458"><span class="lineNum"> 458 </span> : : </a>
+<a name="459"><span class="lineNum"> 459 </span> : : /* Idata index 9: FW features */</a>
+<a name="460"><span class="lineNum"> 460 </span> : : #define IPLPARAMS_FEATURES 9</a>
+<a name="461"><span class="lineNum"> 461 </span> : : struct iplparams_feature {</a>
+<a name="462"><span class="lineNum"> 462 </span> : : char name[64];</a>
+<a name="463"><span class="lineNum"> 463 </span> : : __be64 flags;</a>
+<a name="464"><span class="lineNum"> 464 </span> : : } __packed;</a>
+<a name="465"><span class="lineNum"> 465 </span> : : </a>
+<a name="466"><span class="lineNum"> 466 </span> : : /*</a>
+<a name="467"><span class="lineNum"> 467 </span> : : * Chip TOD structure</a>
+<a name="468"><span class="lineNum"> 468 </span> : : *</a>
+<a name="469"><span class="lineNum"> 469 </span> : : * This is an array of 32 entries (I assume per possible chip)</a>
+<a name="470"><span class="lineNum"> 470 </span> : : */</a>
+<a name="471"><span class="lineNum"> 471 </span> : : </a>
+<a name="472"><span class="lineNum"> 472 </span> : : /* Idata index 0: Chip ID data (array) */</a>
+<a name="473"><span class="lineNum"> 473 </span> : : #define CHIPTOD_IDATA_CHIPID 0</a>
+<a name="474"><span class="lineNum"> 474 </span> : : </a>
+<a name="475"><span class="lineNum"> 475 </span> : : struct chiptod_chipid {</a>
+<a name="476"><span class="lineNum"> 476 </span> : : __be32 chip_id;</a>
+<a name="477"><span class="lineNum"> 477 </span> : : __be32 flags;</a>
+<a name="478"><span class="lineNum"> 478 </span> : : #define CHIPTOD_ID_FLAGS_PRIMARY 0x02</a>
+<a name="479"><span class="lineNum"> 479 </span> : : #define CHIPTOD_ID_FLAGS_SECONDARY 0x01</a>
+<a name="480"><span class="lineNum"> 480 </span> : : #define CHIPTOD_ID_FLAGS_STATUS_MASK 0x0c</a>
+<a name="481"><span class="lineNum"> 481 </span> : : #define CHIPTOD_ID_FLAGS_STATUS_OK 0x04</a>
+<a name="482"><span class="lineNum"> 482 </span> : : #define CHIPTOD_ID_FLAGS_STATUS_NOK 0x08</a>
+<a name="483"><span class="lineNum"> 483 </span> : : } __packed;</a>
+<a name="484"><span class="lineNum"> 484 </span> : : </a>
+<a name="485"><span class="lineNum"> 485 </span> : : /* Idata index 0: Chip Initialization data */</a>
+<a name="486"><span class="lineNum"> 486 </span> : : #define CHIPTOD_IDATA_CHIPINIT 1</a>
+<a name="487"><span class="lineNum"> 487 </span> : : </a>
+<a name="488"><span class="lineNum"> 488 </span> : : struct chiptod_chipinit {</a>
+<a name="489"><span class="lineNum"> 489 </span> : : __be32 ctrl_reg_internal;</a>
+<a name="490"><span class="lineNum"> 490 </span> : : __be32 tod_ctrl_reg;</a>
+<a name="491"><span class="lineNum"> 491 </span> : : } __packed;</a>
+<a name="492"><span class="lineNum"> 492 </span> : : </a>
+<a name="493"><span class="lineNum"> 493 </span> : : /*</a>
+<a name="494"><span class="lineNum"> 494 </span> : : * MS VPD - Memory Description Tree</a>
+<a name="495"><span class="lineNum"> 495 </span> : : *</a>
+<a name="496"><span class="lineNum"> 496 </span> : : * One such structure pointing to the various memory arrays</a>
+<a name="497"><span class="lineNum"> 497 </span> : : * along with other infos about the BCRs, Page Mover, XSCOM,...</a>
+<a name="498"><span class="lineNum"> 498 </span> : : */</a>
+<a name="499"><span class="lineNum"> 499 </span> : : #define MSVPD_HDIF_SIG &quot;MS VPD&quot;</a>
<a name="500"><span class="lineNum"> 500 </span> : : </a>
-<a name="501"><span class="lineNum"> 501 </span> : : struct msvpd_total_config_ms {</a>
-<a name="502"><span class="lineNum"> 502 </span> : : __be64 total_in_mb;</a>
-<a name="503"><span class="lineNum"> 503 </span> : : } __packed;</a>
-<a name="504"><span class="lineNum"> 504 </span> : : </a>
-<a name="505"><span class="lineNum"> 505 </span> : : /* Idata index 2: Page mover and sync structure */</a>
-<a name="506"><span class="lineNum"> 506 </span> : : #define MSVPD_IDATA_PMOVER_SYNCHRO 2</a>
-<a name="507"><span class="lineNum"> 507 </span> : : </a>
-<a name="508"><span class="lineNum"> 508 </span> : : struct msvpd_pmover_bsr_synchro {</a>
-<a name="509"><span class="lineNum"> 509 </span> : : __be32 flags;</a>
-<a name="510"><span class="lineNum"> 510 </span> : : #define MSVPD_PMS_FLAG_HWLOCK_EN 0x80000000</a>
-<a name="511"><span class="lineNum"> 511 </span> : : #define MSVPD_PMS_FLAG_PMOVER_EN 0x40000000</a>
-<a name="512"><span class="lineNum"> 512 </span> : : #define MSVPD_PMS_FLAG_BSR_EN 0x20000000</a>
-<a name="513"><span class="lineNum"> 513 </span> : : #define MSVPD_PMS_FLAG_XSCOMBASE_VALID 0x10000000</a>
-<a name="514"><span class="lineNum"> 514 </span> : : __be32 hwlocks_per_page;</a>
-<a name="515"><span class="lineNum"> 515 </span> : : __be64 hwlock_addr;</a>
-<a name="516"><span class="lineNum"> 516 </span> : : __be64 pmover_addr;</a>
-<a name="517"><span class="lineNum"> 517 </span> : : __be64 bsr_addr;</a>
-<a name="518"><span class="lineNum"> 518 </span> : : __be64 xscom_addr;</a>
-<a name="519"><span class="lineNum"> 519 </span> : : } __packed;</a>
-<a name="520"><span class="lineNum"> 520 </span> : : </a>
-<a name="521"><span class="lineNum"> 521 </span> : : /* Idata index 3: Memory Trace Array */</a>
-<a name="522"><span class="lineNum"> 522 </span> : : #define MSVPD_IDATA_TRACE_AREAS 3</a>
-<a name="523"><span class="lineNum"> 523 </span> : : struct msvpd_trace {</a>
-<a name="524"><span class="lineNum"> 524 </span> : : __be64 start, end;</a>
-<a name="525"><span class="lineNum"> 525 </span> : : char reserved[16];</a>
-<a name="526"><span class="lineNum"> 526 </span> : : };</a>
-<a name="527"><span class="lineNum"> 527 </span> : : </a>
-<a name="528"><span class="lineNum"> 528 </span> : : /* Idata index 4: UE Address Array */</a>
-<a name="529"><span class="lineNum"> 529 </span> : : </a>
-<a name="530"><span class="lineNum"> 530 </span> : : /* Idata index 5: Hostboot reserved memory address range */</a>
-<a name="531"><span class="lineNum"> 531 </span> : : #define MSVPD_IDATA_HB_RESERVED_MEM 5</a>
-<a name="532"><span class="lineNum"> 532 </span> : : #define HB_RESERVE_MEM_LABEL_SIZE 64</a>
-<a name="533"><span class="lineNum"> 533 </span> : : struct msvpd_hb_reserved_mem {</a>
-<a name="534"><span class="lineNum"> 534 </span> : : #define MSVPD_HBRMEM_RANGE_TYPE PPC_BITMASK32(0,7)</a>
-<a name="535"><span class="lineNum"> 535 </span> : : #define HBRMEM_CONTAINER_VERIFICATION_CODE 0x3</a>
-<a name="536"><span class="lineNum"> 536 </span> : : __be32 type_instance;</a>
-<a name="537"><span class="lineNum"> 537 </span> : : __be64 start_addr;</a>
-<a name="538"><span class="lineNum"> 538 </span> : : __be64 end_addr;</a>
-<a name="539"><span class="lineNum"> 539 </span> : : __be32 label_size;</a>
-<a name="540"><span class="lineNum"> 540 </span> : : uint8_t label[HB_RESERVE_MEM_LABEL_SIZE];</a>
-<a name="541"><span class="lineNum"> 541 </span> : : uint8_t rw_perms;</a>
-<a name="542"><span class="lineNum"> 542 </span> : : #define HB_RESERVE_READABLE 0x80</a>
-<a name="543"><span class="lineNum"> 543 </span> : : #define HB_RESERVE_WRITEABLE 0x40</a>
-<a name="544"><span class="lineNum"> 544 </span> : : uint8_t reserved[7];</a>
-<a name="545"><span class="lineNum"> 545 </span> : : } __packed;</a>
-<a name="546"><span class="lineNum"> 546 </span> : : </a>
-<a name="547"><span class="lineNum"> 547 </span> : : /* Child index 0: MS area child structure */</a>
-<a name="548"><span class="lineNum"> 548 </span> : : #define MSVPD_CHILD_MS_AREAS 0</a>
-<a name="549"><span class="lineNum"> 549 </span> : : </a>
-<a name="550"><span class="lineNum"> 550 </span> : : /*</a>
-<a name="551"><span class="lineNum"> 551 </span> : : * CEC I/O Hub FRU</a>
-<a name="552"><span class="lineNum"> 552 </span> : : *</a>
-<a name="553"><span class="lineNum"> 553 </span> : : * This is an array of CEC Hub FRU HDIF structures</a>
-<a name="554"><span class="lineNum"> 554 </span> : : *</a>
-<a name="555"><span class="lineNum"> 555 </span> : : * Each of these has some idata pointers to generic info about the</a>
-<a name="556"><span class="lineNum"> 556 </span> : : * hub and a possible child pointer for daughter card.</a>
-<a name="557"><span class="lineNum"> 557 </span> : : *</a>
-<a name="558"><span class="lineNum"> 558 </span> : : * Actual ports are in the SLCA and need to be cross referenced</a>
-<a name="559"><span class="lineNum"> 559 </span> : : *</a>
-<a name="560"><span class="lineNum"> 560 </span> : : * Note that slots meant for the addition of GX+ adapters that</a>
-<a name="561"><span class="lineNum"> 561 </span> : : * are currently unpopulated but support hotplug will have a</a>
-<a name="562"><span class="lineNum"> 562 </span> : : * minimum &quot;placeholder&quot; entry, which will be fully populated</a>
-<a name="563"><span class="lineNum"> 563 </span> : : * when the array is rebuild during concurrent maintenance.</a>
-<a name="564"><span class="lineNum"> 564 </span> : : * This &quot;placeholder&quot; is called a &quot;reservation&quot;.</a>
-<a name="565"><span class="lineNum"> 565 </span> : : *</a>
-<a name="566"><span class="lineNum"> 566 </span> : : * WARNING: The array rebuild by concurrent maintenance is not</a>
-<a name="567"><span class="lineNum"> 567 </span> : : * guaranteed to be in the same order as the IPL array, not is</a>
-<a name="568"><span class="lineNum"> 568 </span> : : * the order stable between concurrent maintenance operations.</a>
+<a name="501"><span class="lineNum"> 501 </span> : : /* Idata index 0: Mainstore address config */</a>
+<a name="502"><span class="lineNum"> 502 </span> : : #define MSVPD_IDATA_MS_ADDR_CONFIG 0</a>
+<a name="503"><span class="lineNum"> 503 </span> : : </a>
+<a name="504"><span class="lineNum"> 504 </span> : : /* Mainstore Address Configuration */</a>
+<a name="505"><span class="lineNum"> 505 </span> : : struct msvpd_ms_addr_config {</a>
+<a name="506"><span class="lineNum"> 506 </span> : : __be64 max_configured_ms_address;</a>
+<a name="507"><span class="lineNum"> 507 </span> : : __be64 max_possible_ms_address;</a>
+<a name="508"><span class="lineNum"> 508 </span> : : __be32 deprecated;</a>
+<a name="509"><span class="lineNum"> 509 </span> : : __be64 mirrorable_memory_starting_address;</a>
+<a name="510"><span class="lineNum"> 510 </span> : : __be64 hrmor_stash_loc_address;</a>
+<a name="511"><span class="lineNum"> 511 </span> : : } __packed;</a>
+<a name="512"><span class="lineNum"> 512 </span> : : </a>
+<a name="513"><span class="lineNum"> 513 </span> : : /* Idata index 1: Total configured mainstore */</a>
+<a name="514"><span class="lineNum"> 514 </span> : : #define MSVPD_IDATA_TOTAL_CONFIG_MS 1</a>
+<a name="515"><span class="lineNum"> 515 </span> : : </a>
+<a name="516"><span class="lineNum"> 516 </span> : : struct msvpd_total_config_ms {</a>
+<a name="517"><span class="lineNum"> 517 </span> : : __be64 total_in_mb;</a>
+<a name="518"><span class="lineNum"> 518 </span> : : } __packed;</a>
+<a name="519"><span class="lineNum"> 519 </span> : : </a>
+<a name="520"><span class="lineNum"> 520 </span> : : /* Idata index 2: Page mover and sync structure */</a>
+<a name="521"><span class="lineNum"> 521 </span> : : #define MSVPD_IDATA_PMOVER_SYNCHRO 2</a>
+<a name="522"><span class="lineNum"> 522 </span> : : </a>
+<a name="523"><span class="lineNum"> 523 </span> : : struct msvpd_pmover_bsr_synchro {</a>
+<a name="524"><span class="lineNum"> 524 </span> : : __be32 flags;</a>
+<a name="525"><span class="lineNum"> 525 </span> : : #define MSVPD_PMS_FLAG_HWLOCK_EN 0x80000000</a>
+<a name="526"><span class="lineNum"> 526 </span> : : #define MSVPD_PMS_FLAG_PMOVER_EN 0x40000000</a>
+<a name="527"><span class="lineNum"> 527 </span> : : #define MSVPD_PMS_FLAG_BSR_EN 0x20000000</a>
+<a name="528"><span class="lineNum"> 528 </span> : : #define MSVPD_PMS_FLAG_XSCOMBASE_VALID 0x10000000</a>
+<a name="529"><span class="lineNum"> 529 </span> : : __be32 hwlocks_per_page;</a>
+<a name="530"><span class="lineNum"> 530 </span> : : __be64 hwlock_addr;</a>
+<a name="531"><span class="lineNum"> 531 </span> : : __be64 pmover_addr;</a>
+<a name="532"><span class="lineNum"> 532 </span> : : __be64 bsr_addr;</a>
+<a name="533"><span class="lineNum"> 533 </span> : : __be64 xscom_addr;</a>
+<a name="534"><span class="lineNum"> 534 </span> : : } __packed;</a>
+<a name="535"><span class="lineNum"> 535 </span> : : </a>
+<a name="536"><span class="lineNum"> 536 </span> : : /* Idata index 3: Memory Trace Array */</a>
+<a name="537"><span class="lineNum"> 537 </span> : : #define MSVPD_IDATA_TRACE_AREAS 3</a>
+<a name="538"><span class="lineNum"> 538 </span> : : struct msvpd_trace {</a>
+<a name="539"><span class="lineNum"> 539 </span> : : __be64 start, end;</a>
+<a name="540"><span class="lineNum"> 540 </span> : : char reserved[16];</a>
+<a name="541"><span class="lineNum"> 541 </span> : : };</a>
+<a name="542"><span class="lineNum"> 542 </span> : : </a>
+<a name="543"><span class="lineNum"> 543 </span> : : /* Idata index 4: UE Address Array */</a>
+<a name="544"><span class="lineNum"> 544 </span> : : </a>
+<a name="545"><span class="lineNum"> 545 </span> : : /* Idata index 5: Hostboot reserved memory address range */</a>
+<a name="546"><span class="lineNum"> 546 </span> : : #define MSVPD_IDATA_HB_RESERVED_MEM 5</a>
+<a name="547"><span class="lineNum"> 547 </span> : : #define HB_RESERVE_MEM_LABEL_SIZE 64</a>
+<a name="548"><span class="lineNum"> 548 </span> : : struct msvpd_hb_reserved_mem {</a>
+<a name="549"><span class="lineNum"> 549 </span> : : #define MSVPD_HBRMEM_RANGE_TYPE PPC_BITMASK32(0,7)</a>
+<a name="550"><span class="lineNum"> 550 </span> : : #define HBRMEM_CONTAINER_VERIFICATION_CODE 0x3</a>
+<a name="551"><span class="lineNum"> 551 </span> : : __be32 type_instance;</a>
+<a name="552"><span class="lineNum"> 552 </span> : : __be64 start_addr;</a>
+<a name="553"><span class="lineNum"> 553 </span> : : __be64 end_addr;</a>
+<a name="554"><span class="lineNum"> 554 </span> : : __be32 label_size;</a>
+<a name="555"><span class="lineNum"> 555 </span> : : uint8_t label[HB_RESERVE_MEM_LABEL_SIZE];</a>
+<a name="556"><span class="lineNum"> 556 </span> : : uint8_t rw_perms;</a>
+<a name="557"><span class="lineNum"> 557 </span> : : #define HB_RESERVE_READABLE 0x80</a>
+<a name="558"><span class="lineNum"> 558 </span> : : #define HB_RESERVE_WRITEABLE 0x40</a>
+<a name="559"><span class="lineNum"> 559 </span> : : uint8_t reserved[7];</a>
+<a name="560"><span class="lineNum"> 560 </span> : : } __packed;</a>
+<a name="561"><span class="lineNum"> 561 </span> : : </a>
+<a name="562"><span class="lineNum"> 562 </span> : : /* Child index 0: MS area child structure */</a>
+<a name="563"><span class="lineNum"> 563 </span> : : #define MSVPD_CHILD_MS_AREAS 0</a>
+<a name="564"><span class="lineNum"> 564 </span> : : </a>
+<a name="565"><span class="lineNum"> 565 </span> : : /*</a>
+<a name="566"><span class="lineNum"> 566 </span> : : * CEC I/O Hub FRU</a>
+<a name="567"><span class="lineNum"> 567 </span> : : *</a>
+<a name="568"><span class="lineNum"> 568 </span> : : * This is an array of CEC Hub FRU HDIF structures</a>
<a name="569"><span class="lineNum"> 569 </span> : : *</a>
-<a name="570"><span class="lineNum"> 570 </span> : : * There's also a child pointer to daughter card structures but</a>
-<a name="571"><span class="lineNum"> 571 </span> : : * we aren't going to handle that just yet.</a>
-<a name="572"><span class="lineNum"> 572 </span> : : */</a>
-<a name="573"><span class="lineNum"> 573 </span> : : #define CECHUB_FRU_HDIF_SIG &quot;IO HUB&quot;</a>
-<a name="574"><span class="lineNum"> 574 </span> : : #define IOKID_FRU_HDIF_SIG &quot;IO KID&quot;</a>
-<a name="575"><span class="lineNum"> 575 </span> : : #define IOSLOT_FRU_HDIF_SIG &quot;IOSLOT&quot;</a>
-<a name="576"><span class="lineNum"> 576 </span> : : </a>
-<a name="577"><span class="lineNum"> 577 </span> : : /* Idata index 0: FRU ID data</a>
-<a name="578"><span class="lineNum"> 578 </span> : : *</a>
-<a name="579"><span class="lineNum"> 579 </span> : : * This is a generic struct spira_fru_id defined above</a>
-<a name="580"><span class="lineNum"> 580 </span> : : */</a>
-<a name="581"><span class="lineNum"> 581 </span> : : #define CECHUB_FRU_ID_DATA 0</a>
-<a name="582"><span class="lineNum"> 582 </span> : : </a>
-<a name="583"><span class="lineNum"> 583 </span> : : /* Idata index 1: ASCII Keyword VPD */</a>
-<a name="584"><span class="lineNum"> 584 </span> : : #define CECHUB_ASCII_KEYWORD_VPD 1</a>
-<a name="585"><span class="lineNum"> 585 </span> : : </a>
-<a name="586"><span class="lineNum"> 586 </span> : : /* Idata index 2: Hub FRU ID data area */</a>
-<a name="587"><span class="lineNum"> 587 </span> : : #define CECHUB_FRU_ID_DATA_AREA 2</a>
-<a name="588"><span class="lineNum"> 588 </span> : : </a>
-<a name="589"><span class="lineNum"> 589 </span> : : struct cechub_hub_fru_id {</a>
-<a name="590"><span class="lineNum"> 590 </span> : : __be32 card_type;</a>
-<a name="591"><span class="lineNum"> 591 </span> : : #define CECHUB_FRU_TYPE_IOHUB_RSRV 0</a>
-<a name="592"><span class="lineNum"> 592 </span> : : #define CECHUB_FRU_TYPE_IOHUB_CARD 1</a>
-<a name="593"><span class="lineNum"> 593 </span> : : #define CECHUB_FRU_TYPE_CPU_CARD 2</a>
-<a name="594"><span class="lineNum"> 594 </span> : : #define CECHUB_FRU_TYPE_CEC_BKPLANE 3</a>
-<a name="595"><span class="lineNum"> 595 </span> : : #define CECHUB_FRU_TYPE_BKPLANE_EXT 4</a>
-<a name="596"><span class="lineNum"> 596 </span> : : __be32 unused;</a>
-<a name="597"><span class="lineNum"> 597 </span> : : __be16 total_chips;</a>
-<a name="598"><span class="lineNum"> 598 </span> : : uint8_t flags;</a>
-<a name="599"><span class="lineNum"> 599 </span> : : #define CECHUB_FRU_FLAG_HEADLESS 0x80 /* not connected to CPU */</a>
-<a name="600"><span class="lineNum"> 600 </span> : : #define CECHUB_FRU_FLAG_PASSTHROUGH 0x40 /* connected to passhtrough</a>
-<a name="601"><span class="lineNum"> 601 </span> : : port of another hub */</a>
-<a name="602"><span class="lineNum"> 602 </span> : : uint8_t reserved;</a>
-<a name="603"><span class="lineNum"> 603 </span> : : __be16 parent_hub_id; /* chip instance number of the</a>
-<a name="604"><span class="lineNum"> 604 </span> : : hub that contains the passthrough</a>
-<a name="605"><span class="lineNum"> 605 </span> : : port this one is connected to */</a>
-<a name="606"><span class="lineNum"> 606 </span> : : __be16 reserved2;</a>
-<a name="607"><span class="lineNum"> 607 </span> : : } __packed;</a>
-<a name="608"><span class="lineNum"> 608 </span> : : </a>
-<a name="609"><span class="lineNum"> 609 </span> : : </a>
-<a name="610"><span class="lineNum"> 610 </span> : : /* Idata index 3: IO HUB array */</a>
-<a name="611"><span class="lineNum"> 611 </span> : : </a>
-<a name="612"><span class="lineNum"> 612 </span> : : #define CECHUB_FRU_IO_HUBS 3</a>
-<a name="613"><span class="lineNum"> 613 </span> : : </a>
-<a name="614"><span class="lineNum"> 614 </span> : : /* This is an HDIF array of IO Hub structures */</a>
-<a name="615"><span class="lineNum"> 615 </span> : : struct cechub_io_hub {</a>
-<a name="616"><span class="lineNum"> 616 </span> : : __be64 fmtc_address;</a>
-<a name="617"><span class="lineNum"> 617 </span> : : __be32 fmtc_tce_size;</a>
-<a name="618"><span class="lineNum"> 618 </span> : : __be16 hub_num; /* unique hub number (I/O Hub ID) */</a>
-<a name="619"><span class="lineNum"> 619 </span> : : uint8_t flags;</a>
-<a name="620"><span class="lineNum"> 620 </span> : : #define CECHUB_HUB_FLAG_STATE_MASK 0xc0</a>
-<a name="621"><span class="lineNum"> 621 </span> : : #define CECHUB_HUB_FLAG_STATE_OK 0x00</a>
-<a name="622"><span class="lineNum"> 622 </span> : : #define CECHUB_HUB_FLAG_STATE_FAILURES 0x40</a>
-<a name="623"><span class="lineNum"> 623 </span> : : #define CECHUB_HUB_FLAG_STATE_NOT_INST 0x80</a>
-<a name="624"><span class="lineNum"> 624 </span> : : #define CECHUB_HUB_FLAG_STATE_UNUSABLE 0xc0</a>
-<a name="625"><span class="lineNum"> 625 </span> : : #define CECHUB_HUB_FLAG_MASTER_HUB 0x20 /* HDAT &lt; v9.x only */</a>
-<a name="626"><span class="lineNum"> 626 </span> : : #define CECHUB_HUB_FLAG_GARD_MASK_VALID 0x08 /* HDAT &lt; v9.x only */</a>
-<a name="627"><span class="lineNum"> 627 </span> : : #define CECHUB_HUB_FLAG_SWITCH_MASK_PDT 0x04 /* HDAT &lt; v9.x only */</a>
-<a name="628"><span class="lineNum"> 628 </span> : : #define CECHUB_HUB_FLAG_FAB_BR0_PDT 0x02 /* HDAT &lt; v9.x only */</a>
-<a name="629"><span class="lineNum"> 629 </span> : : #define CECHUB_HUB_FLAG_FAB_BR1_PDT 0x01 /* HDAT &lt; v9.x only */</a>
-<a name="630"><span class="lineNum"> 630 </span> : : uint8_t nr_ports; /* HDAT &lt; v9.x only */</a>
-<a name="631"><span class="lineNum"> 631 </span> : : uint8_t fab_br0_pdt; /* p5ioc2 PCI-X or P8 PHB3's */</a>
-<a name="632"><span class="lineNum"> 632 </span> : : #define CECHUB_HUB_FAB_BR0_PDT_PHB0 0x80</a>
-<a name="633"><span class="lineNum"> 633 </span> : : #define CECHUB_HUB_FAB_BR0_PDT_PHB1 0x40</a>
-<a name="634"><span class="lineNum"> 634 </span> : : #define CECHUB_HUB_FAB_BR0_PDT_PHB2 0x20</a>
-<a name="635"><span class="lineNum"> 635 </span> : : #define CECHUB_HUB_FAB_BR0_PDT_PHB3 0x10</a>
-<a name="636"><span class="lineNum"> 636 </span> : : #define CECHUB_HUB_FAB_BR0_PDT_PHB4 0x08</a>
-<a name="637"><span class="lineNum"> 637 </span> : : #define CECHUB_HUB_FAB_BR0_PDT_PHB5 0x04</a>
-<a name="638"><span class="lineNum"> 638 </span> : : uint8_t fab_br1_pdt; /* p5ioc2 &amp; p7ioc PCI-E */</a>
-<a name="639"><span class="lineNum"> 639 </span> : : #define CECHUB_HUB_FAB_BR1_PDT_PHB0 0x80</a>
-<a name="640"><span class="lineNum"> 640 </span> : : #define CECHUB_HUB_FAB_BR1_PDT_PHB1 0x40</a>
-<a name="641"><span class="lineNum"> 641 </span> : : #define CECHUB_HUB_FAB_BR1_PDT_PHB2 0x20</a>
-<a name="642"><span class="lineNum"> 642 </span> : : #define CECHUB_HUB_FAB_BR1_PDT_PHB3 0x10</a>
-<a name="643"><span class="lineNum"> 643 </span> : : #define CECHUB_HUB_FAB_BR1_PDT_PHB4 0x08 /* p7ioc only */</a>
-<a name="644"><span class="lineNum"> 644 </span> : : #define CECHUB_HUB_FAB_BR1_PDT_PHB5 0x04 /* p7ioc only */</a>
-<a name="645"><span class="lineNum"> 645 </span> : : __be16 iohub_id; /* the type of hub */</a>
-<a name="646"><span class="lineNum"> 646 </span> : : #define CECHUB_HUB_MURANO 0x20ef /* Murano from spec */</a>
-<a name="647"><span class="lineNum"> 647 </span> : : #define CECHUB_HUB_MURANO_SEGU 0x0001 /* Murano+Seguso from spec */</a>
-<a name="648"><span class="lineNum"> 648 </span> : : #define CECHUB_HUB_VENICE_WYATT 0x0010 /* Venice+Wyatt from spec */</a>
-<a name="649"><span class="lineNum"> 649 </span> : : #define CECHUB_HUB_NIMBUS_SFORAZ 0x0020 /* Nimbus+sforaz from spec */</a>
-<a name="650"><span class="lineNum"> 650 </span> : : #define CECHUB_HUB_NIMBUS_MONZA 0x0021 /* Nimbus+monza from spec */</a>
-<a name="651"><span class="lineNum"> 651 </span> : : #define CECHUB_HUB_NIMBUS_LAGRANGE 0x0022 /* Nimbus+lagrange from spec */</a>
-<a name="652"><span class="lineNum"> 652 </span> : : #define CECHUB_HUB_CUMULUS_DUOMO 0x0030 /* cumulus+duomo from spec */</a>
-<a name="653"><span class="lineNum"> 653 </span> : : #define CECHUB_HUB_AXONE_HOPPER 0x0040 /* axone+hopper */</a>
-<a name="654"><span class="lineNum"> 654 </span> : : __be32 ec_level;</a>
-<a name="655"><span class="lineNum"> 655 </span> : : __be32 aff_dom2; /* HDAT &lt; v9.x only */</a>
-<a name="656"><span class="lineNum"> 656 </span> : : __be32 aff_dom3; /* HDAT &lt; v9.x only */</a>
-<a name="657"><span class="lineNum"> 657 </span> : : __be64 reserved;</a>
-<a name="658"><span class="lineNum"> 658 </span> : : __be32 proc_chip_id;</a>
-<a name="659"><span class="lineNum"> 659 </span> : : </a>
-<a name="660"><span class="lineNum"> 660 </span> : : union {</a>
-<a name="661"><span class="lineNum"> 661 </span> : : /* HDAT &lt; v9.x */</a>
-<a name="662"><span class="lineNum"> 662 </span> : : struct {</a>
-<a name="663"><span class="lineNum"> 663 </span> : : __be32 gx_index; /* GX bus index on cpu */</a>
-<a name="664"><span class="lineNum"> 664 </span> : : __be32 buid_ext; /* BUID Extension */</a>
-<a name="665"><span class="lineNum"> 665 </span> : : __be32 xscom_chip_id; /* TORRENT ONLY */</a>
-<a name="666"><span class="lineNum"> 666 </span> : : };</a>
-<a name="667"><span class="lineNum"> 667 </span> : : /* HDAT &gt;= v9.x */</a>
-<a name="668"><span class="lineNum"> 668 </span> : : struct {</a>
-<a name="669"><span class="lineNum"> 669 </span> : : __be32 reserved1;</a>
-<a name="670"><span class="lineNum"> 670 </span> : : __be32 reserved2;</a>
-<a name="671"><span class="lineNum"> 671 </span> : : __be16 reserved3;</a>
-<a name="672"><span class="lineNum"> 672 </span> : : __be16 hw_topology;</a>
-<a name="673"><span class="lineNum"> 673 </span> : : };</a>
-<a name="674"><span class="lineNum"> 674 </span> : : };</a>
-<a name="675"><span class="lineNum"> 675 </span> : : __be32 mrid;</a>
-<a name="676"><span class="lineNum"> 676 </span> : : __be32 mem_map_vers;</a>
+<a name="570"><span class="lineNum"> 570 </span> : : * Each of these has some idata pointers to generic info about the</a>
+<a name="571"><span class="lineNum"> 571 </span> : : * hub and a possible child pointer for daughter card.</a>
+<a name="572"><span class="lineNum"> 572 </span> : : *</a>
+<a name="573"><span class="lineNum"> 573 </span> : : * Actual ports are in the SLCA and need to be cross referenced</a>
+<a name="574"><span class="lineNum"> 574 </span> : : *</a>
+<a name="575"><span class="lineNum"> 575 </span> : : * Note that slots meant for the addition of GX+ adapters that</a>
+<a name="576"><span class="lineNum"> 576 </span> : : * are currently unpopulated but support hotplug will have a</a>
+<a name="577"><span class="lineNum"> 577 </span> : : * minimum &quot;placeholder&quot; entry, which will be fully populated</a>
+<a name="578"><span class="lineNum"> 578 </span> : : * when the array is rebuild during concurrent maintenance.</a>
+<a name="579"><span class="lineNum"> 579 </span> : : * This &quot;placeholder&quot; is called a &quot;reservation&quot;.</a>
+<a name="580"><span class="lineNum"> 580 </span> : : *</a>
+<a name="581"><span class="lineNum"> 581 </span> : : * WARNING: The array rebuild by concurrent maintenance is not</a>
+<a name="582"><span class="lineNum"> 582 </span> : : * guaranteed to be in the same order as the IPL array, not is</a>
+<a name="583"><span class="lineNum"> 583 </span> : : * the order stable between concurrent maintenance operations.</a>
+<a name="584"><span class="lineNum"> 584 </span> : : *</a>
+<a name="585"><span class="lineNum"> 585 </span> : : * There's also a child pointer to daughter card structures but</a>
+<a name="586"><span class="lineNum"> 586 </span> : : * we aren't going to handle that just yet.</a>
+<a name="587"><span class="lineNum"> 587 </span> : : */</a>
+<a name="588"><span class="lineNum"> 588 </span> : : #define CECHUB_FRU_HDIF_SIG &quot;IO HUB&quot;</a>
+<a name="589"><span class="lineNum"> 589 </span> : : #define IOKID_FRU_HDIF_SIG &quot;IO KID&quot;</a>
+<a name="590"><span class="lineNum"> 590 </span> : : #define IOSLOT_FRU_HDIF_SIG &quot;IOSLOT&quot;</a>
+<a name="591"><span class="lineNum"> 591 </span> : : </a>
+<a name="592"><span class="lineNum"> 592 </span> : : /* Idata index 0: FRU ID data</a>
+<a name="593"><span class="lineNum"> 593 </span> : : *</a>
+<a name="594"><span class="lineNum"> 594 </span> : : * This is a generic struct spira_fru_id defined above</a>
+<a name="595"><span class="lineNum"> 595 </span> : : */</a>
+<a name="596"><span class="lineNum"> 596 </span> : : #define CECHUB_FRU_ID_DATA 0</a>
+<a name="597"><span class="lineNum"> 597 </span> : : </a>
+<a name="598"><span class="lineNum"> 598 </span> : : /* Idata index 1: ASCII Keyword VPD */</a>
+<a name="599"><span class="lineNum"> 599 </span> : : #define CECHUB_ASCII_KEYWORD_VPD 1</a>
+<a name="600"><span class="lineNum"> 600 </span> : : </a>
+<a name="601"><span class="lineNum"> 601 </span> : : /* Idata index 2: Hub FRU ID data area */</a>
+<a name="602"><span class="lineNum"> 602 </span> : : #define CECHUB_FRU_ID_DATA_AREA 2</a>
+<a name="603"><span class="lineNum"> 603 </span> : : </a>
+<a name="604"><span class="lineNum"> 604 </span> : : struct cechub_hub_fru_id {</a>
+<a name="605"><span class="lineNum"> 605 </span> : : __be32 card_type;</a>
+<a name="606"><span class="lineNum"> 606 </span> : : #define CECHUB_FRU_TYPE_IOHUB_RSRV 0</a>
+<a name="607"><span class="lineNum"> 607 </span> : : #define CECHUB_FRU_TYPE_IOHUB_CARD 1</a>
+<a name="608"><span class="lineNum"> 608 </span> : : #define CECHUB_FRU_TYPE_CPU_CARD 2</a>
+<a name="609"><span class="lineNum"> 609 </span> : : #define CECHUB_FRU_TYPE_CEC_BKPLANE 3</a>
+<a name="610"><span class="lineNum"> 610 </span> : : #define CECHUB_FRU_TYPE_BKPLANE_EXT 4</a>
+<a name="611"><span class="lineNum"> 611 </span> : : __be32 unused;</a>
+<a name="612"><span class="lineNum"> 612 </span> : : __be16 total_chips;</a>
+<a name="613"><span class="lineNum"> 613 </span> : : uint8_t flags;</a>
+<a name="614"><span class="lineNum"> 614 </span> : : #define CECHUB_FRU_FLAG_HEADLESS 0x80 /* not connected to CPU */</a>
+<a name="615"><span class="lineNum"> 615 </span> : : #define CECHUB_FRU_FLAG_PASSTHROUGH 0x40 /* connected to passhtrough</a>
+<a name="616"><span class="lineNum"> 616 </span> : : port of another hub */</a>
+<a name="617"><span class="lineNum"> 617 </span> : : uint8_t reserved;</a>
+<a name="618"><span class="lineNum"> 618 </span> : : __be16 parent_hub_id; /* chip instance number of the</a>
+<a name="619"><span class="lineNum"> 619 </span> : : hub that contains the passthrough</a>
+<a name="620"><span class="lineNum"> 620 </span> : : port this one is connected to */</a>
+<a name="621"><span class="lineNum"> 621 </span> : : __be16 reserved2;</a>
+<a name="622"><span class="lineNum"> 622 </span> : : } __packed;</a>
+<a name="623"><span class="lineNum"> 623 </span> : : </a>
+<a name="624"><span class="lineNum"> 624 </span> : : </a>
+<a name="625"><span class="lineNum"> 625 </span> : : /* Idata index 3: IO HUB array */</a>
+<a name="626"><span class="lineNum"> 626 </span> : : </a>
+<a name="627"><span class="lineNum"> 627 </span> : : #define CECHUB_FRU_IO_HUBS 3</a>
+<a name="628"><span class="lineNum"> 628 </span> : : </a>
+<a name="629"><span class="lineNum"> 629 </span> : : /* This is an HDIF array of IO Hub structures */</a>
+<a name="630"><span class="lineNum"> 630 </span> : : struct cechub_io_hub {</a>
+<a name="631"><span class="lineNum"> 631 </span> : : __be64 fmtc_address;</a>
+<a name="632"><span class="lineNum"> 632 </span> : : __be32 fmtc_tce_size;</a>
+<a name="633"><span class="lineNum"> 633 </span> : : __be16 hub_num; /* unique hub number (I/O Hub ID) */</a>
+<a name="634"><span class="lineNum"> 634 </span> : : uint8_t flags;</a>
+<a name="635"><span class="lineNum"> 635 </span> : : #define CECHUB_HUB_FLAG_STATE_MASK 0xc0</a>
+<a name="636"><span class="lineNum"> 636 </span> : : #define CECHUB_HUB_FLAG_STATE_OK 0x00</a>
+<a name="637"><span class="lineNum"> 637 </span> : : #define CECHUB_HUB_FLAG_STATE_FAILURES 0x40</a>
+<a name="638"><span class="lineNum"> 638 </span> : : #define CECHUB_HUB_FLAG_STATE_NOT_INST 0x80</a>
+<a name="639"><span class="lineNum"> 639 </span> : : #define CECHUB_HUB_FLAG_STATE_UNUSABLE 0xc0</a>
+<a name="640"><span class="lineNum"> 640 </span> : : #define CECHUB_HUB_FLAG_MASTER_HUB 0x20 /* HDAT &lt; v9.x only */</a>
+<a name="641"><span class="lineNum"> 641 </span> : : #define CECHUB_HUB_FLAG_GARD_MASK_VALID 0x08 /* HDAT &lt; v9.x only */</a>
+<a name="642"><span class="lineNum"> 642 </span> : : #define CECHUB_HUB_FLAG_SWITCH_MASK_PDT 0x04 /* HDAT &lt; v9.x only */</a>
+<a name="643"><span class="lineNum"> 643 </span> : : #define CECHUB_HUB_FLAG_FAB_BR0_PDT 0x02 /* HDAT &lt; v9.x only */</a>
+<a name="644"><span class="lineNum"> 644 </span> : : #define CECHUB_HUB_FLAG_FAB_BR1_PDT 0x01 /* HDAT &lt; v9.x only */</a>
+<a name="645"><span class="lineNum"> 645 </span> : : uint8_t nr_ports; /* HDAT &lt; v9.x only */</a>
+<a name="646"><span class="lineNum"> 646 </span> : : uint8_t fab_br0_pdt; /* p5ioc2 PCI-X or P8 PHB3's */</a>
+<a name="647"><span class="lineNum"> 647 </span> : : #define CECHUB_HUB_FAB_BR0_PDT_PHB0 0x80</a>
+<a name="648"><span class="lineNum"> 648 </span> : : #define CECHUB_HUB_FAB_BR0_PDT_PHB1 0x40</a>
+<a name="649"><span class="lineNum"> 649 </span> : : #define CECHUB_HUB_FAB_BR0_PDT_PHB2 0x20</a>
+<a name="650"><span class="lineNum"> 650 </span> : : #define CECHUB_HUB_FAB_BR0_PDT_PHB3 0x10</a>
+<a name="651"><span class="lineNum"> 651 </span> : : #define CECHUB_HUB_FAB_BR0_PDT_PHB4 0x08</a>
+<a name="652"><span class="lineNum"> 652 </span> : : #define CECHUB_HUB_FAB_BR0_PDT_PHB5 0x04</a>
+<a name="653"><span class="lineNum"> 653 </span> : : uint8_t fab_br1_pdt; /* p5ioc2 &amp; p7ioc PCI-E */</a>
+<a name="654"><span class="lineNum"> 654 </span> : : #define CECHUB_HUB_FAB_BR1_PDT_PHB0 0x80</a>
+<a name="655"><span class="lineNum"> 655 </span> : : #define CECHUB_HUB_FAB_BR1_PDT_PHB1 0x40</a>
+<a name="656"><span class="lineNum"> 656 </span> : : #define CECHUB_HUB_FAB_BR1_PDT_PHB2 0x20</a>
+<a name="657"><span class="lineNum"> 657 </span> : : #define CECHUB_HUB_FAB_BR1_PDT_PHB3 0x10</a>
+<a name="658"><span class="lineNum"> 658 </span> : : #define CECHUB_HUB_FAB_BR1_PDT_PHB4 0x08 /* p7ioc only */</a>
+<a name="659"><span class="lineNum"> 659 </span> : : #define CECHUB_HUB_FAB_BR1_PDT_PHB5 0x04 /* p7ioc only */</a>
+<a name="660"><span class="lineNum"> 660 </span> : : __be16 iohub_id; /* the type of hub */</a>
+<a name="661"><span class="lineNum"> 661 </span> : : #define CECHUB_HUB_MURANO 0x20ef /* Murano from spec */</a>
+<a name="662"><span class="lineNum"> 662 </span> : : #define CECHUB_HUB_MURANO_SEGU 0x0001 /* Murano+Seguso from spec */</a>
+<a name="663"><span class="lineNum"> 663 </span> : : #define CECHUB_HUB_VENICE_WYATT 0x0010 /* Venice+Wyatt from spec */</a>
+<a name="664"><span class="lineNum"> 664 </span> : : #define CECHUB_HUB_NIMBUS_SFORAZ 0x0020 /* Nimbus+sforaz from spec */</a>
+<a name="665"><span class="lineNum"> 665 </span> : : #define CECHUB_HUB_NIMBUS_MONZA 0x0021 /* Nimbus+monza from spec */</a>
+<a name="666"><span class="lineNum"> 666 </span> : : #define CECHUB_HUB_NIMBUS_LAGRANGE 0x0022 /* Nimbus+lagrange from spec */</a>
+<a name="667"><span class="lineNum"> 667 </span> : : #define CECHUB_HUB_CUMULUS_DUOMO 0x0030 /* cumulus+duomo from spec */</a>
+<a name="668"><span class="lineNum"> 668 </span> : : #define CECHUB_HUB_AXONE_HOPPER 0x0040 /* axone+hopper */</a>
+<a name="669"><span class="lineNum"> 669 </span> : : #define CECHUB_HUB_RAINIER 0x0050</a>
+<a name="670"><span class="lineNum"> 670 </span> : : #define CECHUB_HUB_DENALI 0x0051</a>
+<a name="671"><span class="lineNum"> 671 </span> : : __be32 ec_level;</a>
+<a name="672"><span class="lineNum"> 672 </span> : : __be32 aff_dom2; /* HDAT &lt; v9.x only */</a>
+<a name="673"><span class="lineNum"> 673 </span> : : __be32 aff_dom3; /* HDAT &lt; v9.x only */</a>
+<a name="674"><span class="lineNum"> 674 </span> : : __be64 reserved;</a>
+<a name="675"><span class="lineNum"> 675 </span> : : __be32 proc_chip_id;</a>
+<a name="676"><span class="lineNum"> 676 </span> : : </a>
<a name="677"><span class="lineNum"> 677 </span> : : union {</a>
<a name="678"><span class="lineNum"> 678 </span> : : /* HDAT &lt; v9.x */</a>
<a name="679"><span class="lineNum"> 679 </span> : : struct {</a>
-<a name="680"><span class="lineNum"> 680 </span> : : __be64 gx_ctrl_bar0;</a>
-<a name="681"><span class="lineNum"> 681 </span> : : __be64 gx_ctrl_bar1;</a>
-<a name="682"><span class="lineNum"> 682 </span> : : __be64 gx_ctrl_bar2;</a>
-<a name="683"><span class="lineNum"> 683 </span> : : __be64 gx_ctrl_bar3;</a>
-<a name="684"><span class="lineNum"> 684 </span> : : __be64 gx_ctrl_bar4;</a>
-<a name="685"><span class="lineNum"> 685 </span> : : __be32 sw_mask_pdt;</a>
-<a name="686"><span class="lineNum"> 686 </span> : : __be16 gard_mask;</a>
-<a name="687"><span class="lineNum"> 687 </span> : : __be16 gx_bus_speed; /* Version 0x58 */</a>
-<a name="688"><span class="lineNum"> 688 </span> : : };</a>
-<a name="689"><span class="lineNum"> 689 </span> : : </a>
-<a name="690"><span class="lineNum"> 690 </span> : : /* HDAT &gt;= v9.x, HDIF version 0x6A adds phb_lane_eq with four</a>
-<a name="691"><span class="lineNum"> 691 </span> : : * words per PHB (4 PHBs).</a>
-<a name="692"><span class="lineNum"> 692 </span> : : *</a>
-<a name="693"><span class="lineNum"> 693 </span> : : * HDAT &gt;= 10.x, HDIF version 0x7A adds space for another two</a>
-<a name="694"><span class="lineNum"> 694 </span> : : * two PHBs (6 total) and the gen4 EQ values.</a>
-<a name="695"><span class="lineNum"> 695 </span> : : */</a>
+<a name="680"><span class="lineNum"> 680 </span> : : __be32 gx_index; /* GX bus index on cpu */</a>
+<a name="681"><span class="lineNum"> 681 </span> : : __be32 buid_ext; /* BUID Extension */</a>
+<a name="682"><span class="lineNum"> 682 </span> : : __be32 xscom_chip_id; /* TORRENT ONLY */</a>
+<a name="683"><span class="lineNum"> 683 </span> : : };</a>
+<a name="684"><span class="lineNum"> 684 </span> : : /* HDAT &gt;= v9.x */</a>
+<a name="685"><span class="lineNum"> 685 </span> : : struct {</a>
+<a name="686"><span class="lineNum"> 686 </span> : : __be32 reserved1;</a>
+<a name="687"><span class="lineNum"> 687 </span> : : __be32 reserved2;</a>
+<a name="688"><span class="lineNum"> 688 </span> : : __be16 reserved3;</a>
+<a name="689"><span class="lineNum"> 689 </span> : : __be16 hw_topology;</a>
+<a name="690"><span class="lineNum"> 690 </span> : : };</a>
+<a name="691"><span class="lineNum"> 691 </span> : : };</a>
+<a name="692"><span class="lineNum"> 692 </span> : : __be32 mrid;</a>
+<a name="693"><span class="lineNum"> 693 </span> : : __be32 mem_map_vers;</a>
+<a name="694"><span class="lineNum"> 694 </span> : : union {</a>
+<a name="695"><span class="lineNum"> 695 </span> : : /* HDAT &lt; v9.x */</a>
<a name="696"><span class="lineNum"> 696 </span> : : struct {</a>
-<a name="697"><span class="lineNum"> 697 </span> : : /* Gen 3 PHB eq values, 6 PHBs */</a>
-<a name="698"><span class="lineNum"> 698 </span> : : __be64 phb_lane_eq[6][4];</a>
-<a name="699"><span class="lineNum"> 699 </span> : : </a>
-<a name="700"><span class="lineNum"> 700 </span> : : /* Gen 4 PHB eq values */</a>
-<a name="701"><span class="lineNum"> 701 </span> : : __be64 phb4_lane_eq[6][4];</a>
-<a name="702"><span class="lineNum"> 702 </span> : : };</a>
-<a name="703"><span class="lineNum"> 703 </span> : : };</a>
-<a name="704"><span class="lineNum"> 704 </span> : : } __packed;</a>
-<a name="705"><span class="lineNum"> 705 </span> : : </a>
-<a name="706"><span class="lineNum"> 706 </span> : : /* We support structures as small as 0x68 bytes */</a>
-<a name="707"><span class="lineNum"> 707 </span> : : #define CECHUB_IOHUB_MIN_SIZE 0x68</a>
-<a name="708"><span class="lineNum"> 708 </span> : : </a>
-<a name="709"><span class="lineNum"> 709 </span> : : /* Child index 0: IO Daugther Card */</a>
-<a name="710"><span class="lineNum"> 710 </span> : : #define CECHUB_CHILD_IO_KIDS 0</a>
-<a name="711"><span class="lineNum"> 711 </span> : : </a>
-<a name="712"><span class="lineNum"> 712 </span> : : /* Child index 1: PCIe Slot Mapping Information */</a>
-<a name="713"><span class="lineNum"> 713 </span> : : #define CECHUB_CHILD_IOSLOTS 1</a>
-<a name="714"><span class="lineNum"> 714 </span> : : </a>
-<a name="715"><span class="lineNum"> 715 </span> : : #define IOSLOT_IDATA_SLOTMAP 0</a>
-<a name="716"><span class="lineNum"> 716 </span> : : </a>
-<a name="717"><span class="lineNum"> 717 </span> : : struct slot_map_entry {</a>
-<a name="718"><span class="lineNum"> 718 </span> : : __be16 entry_id;</a>
-<a name="719"><span class="lineNum"> 719 </span> : : __be16 parent_id;</a>
-<a name="720"><span class="lineNum"> 720 </span> : : uint8_t phb_index; /* only valid for ROOT and SWITCH_UP */</a>
-<a name="721"><span class="lineNum"> 721 </span> : : </a>
-<a name="722"><span class="lineNum"> 722 </span> : : uint8_t type;</a>
-<a name="723"><span class="lineNum"> 723 </span> : : #define SLOT_TYPE_ROOT_COMPLEX 0x0</a>
-<a name="724"><span class="lineNum"> 724 </span> : : #define SLOT_TYPE_SWITCH_UP 0x1</a>
-<a name="725"><span class="lineNum"> 725 </span> : : #define SLOT_TYPE_SWITCH_DOWN 0x2</a>
-<a name="726"><span class="lineNum"> 726 </span> : : #define SLOT_TYPE_BUILTIN 0x3</a>
-<a name="727"><span class="lineNum"> 727 </span> : : </a>
-<a name="728"><span class="lineNum"> 728 </span> : : uint8_t lane_swapped;</a>
-<a name="729"><span class="lineNum"> 729 </span> : : uint8_t reserved;</a>
-<a name="730"><span class="lineNum"> 730 </span> : : __be16 lane_mask;</a>
-<a name="731"><span class="lineNum"> 731 </span> : : __be16 lane_reverse;</a>
-<a name="732"><span class="lineNum"> 732 </span> : : </a>
-<a name="733"><span class="lineNum"> 733 </span> : : /* what can I do with this? reference something under/vpd/ ? */</a>
-<a name="734"><span class="lineNum"> 734 </span> : : __be16 slca_idx;</a>
-<a name="735"><span class="lineNum"> 735 </span> : : </a>
-<a name="736"><span class="lineNum"> 736 </span> : : __be16 mrw_slot_id;</a>
+<a name="697"><span class="lineNum"> 697 </span> : : __be64 gx_ctrl_bar0;</a>
+<a name="698"><span class="lineNum"> 698 </span> : : __be64 gx_ctrl_bar1;</a>
+<a name="699"><span class="lineNum"> 699 </span> : : __be64 gx_ctrl_bar2;</a>
+<a name="700"><span class="lineNum"> 700 </span> : : __be64 gx_ctrl_bar3;</a>
+<a name="701"><span class="lineNum"> 701 </span> : : __be64 gx_ctrl_bar4;</a>
+<a name="702"><span class="lineNum"> 702 </span> : : __be32 sw_mask_pdt;</a>
+<a name="703"><span class="lineNum"> 703 </span> : : __be16 gard_mask;</a>
+<a name="704"><span class="lineNum"> 704 </span> : : __be16 gx_bus_speed; /* Version 0x58 */</a>
+<a name="705"><span class="lineNum"> 705 </span> : : };</a>
+<a name="706"><span class="lineNum"> 706 </span> : : </a>
+<a name="707"><span class="lineNum"> 707 </span> : : /* HDAT &gt;= v9.x, HDIF version 0x6A adds phb_lane_eq with four</a>
+<a name="708"><span class="lineNum"> 708 </span> : : * words per PHB (4 PHBs).</a>
+<a name="709"><span class="lineNum"> 709 </span> : : *</a>
+<a name="710"><span class="lineNum"> 710 </span> : : * HDAT &gt;= 10.x, HDIF version 0x7A adds space for another</a>
+<a name="711"><span class="lineNum"> 711 </span> : : * two PHBs (6 total) and the gen4 EQ values.</a>
+<a name="712"><span class="lineNum"> 712 </span> : : *</a>
+<a name="713"><span class="lineNum"> 713 </span> : : * HDAT &gt;= 10.5x, HDIF version 0x8B adds space for the</a>
+<a name="714"><span class="lineNum"> 714 </span> : : * gen5 EQ values.</a>
+<a name="715"><span class="lineNum"> 715 </span> : : */</a>
+<a name="716"><span class="lineNum"> 716 </span> : : struct {</a>
+<a name="717"><span class="lineNum"> 717 </span> : : /* Gen 3 PHB eq values, 6 PHBs */</a>
+<a name="718"><span class="lineNum"> 718 </span> : : __be64 phb_lane_eq[6][4];</a>
+<a name="719"><span class="lineNum"> 719 </span> : : </a>
+<a name="720"><span class="lineNum"> 720 </span> : : /* Gen 4 PHB eq values */</a>
+<a name="721"><span class="lineNum"> 721 </span> : : __be64 phb4_lane_eq[6][4];</a>
+<a name="722"><span class="lineNum"> 722 </span> : : </a>
+<a name="723"><span class="lineNum"> 723 </span> : : /* Gen 5 PHB eq values */</a>
+<a name="724"><span class="lineNum"> 724 </span> : : __be64 phb5_lane_eq[6][4];</a>
+<a name="725"><span class="lineNum"> 725 </span> : : };</a>
+<a name="726"><span class="lineNum"> 726 </span> : : };</a>
+<a name="727"><span class="lineNum"> 727 </span> : : } __packed;</a>
+<a name="728"><span class="lineNum"> 728 </span> : : </a>
+<a name="729"><span class="lineNum"> 729 </span> : : /* We support structures as small as 0x68 bytes */</a>
+<a name="730"><span class="lineNum"> 730 </span> : : #define CECHUB_IOHUB_MIN_SIZE 0x68</a>
+<a name="731"><span class="lineNum"> 731 </span> : : </a>
+<a name="732"><span class="lineNum"> 732 </span> : : /* Child index 0: IO Daugther Card */</a>
+<a name="733"><span class="lineNum"> 733 </span> : : #define CECHUB_CHILD_IO_KIDS 0</a>
+<a name="734"><span class="lineNum"> 734 </span> : : </a>
+<a name="735"><span class="lineNum"> 735 </span> : : /* Child index 1: PCIe Slot Mapping Information */</a>
+<a name="736"><span class="lineNum"> 736 </span> : : #define CECHUB_CHILD_IOSLOTS 1</a>
<a name="737"><span class="lineNum"> 737 </span> : : </a>
-<a name="738"><span class="lineNum"> 738 </span> : : __be32 features;</a>
-<a name="739"><span class="lineNum"> 739 </span> : : #define SLOT_FEAT_SLOT 0x1</a>
-<a name="740"><span class="lineNum"> 740 </span> : : </a>
-<a name="741"><span class="lineNum"> 741 </span> : : uint8_t up_port;</a>
-<a name="742"><span class="lineNum"> 742 </span> : : uint8_t down_port; /* the switch port this device is attached to */</a>
-<a name="743"><span class="lineNum"> 743 </span> : : </a>
-<a name="744"><span class="lineNum"> 744 </span> : : __be32 vendor_id;</a>
-<a name="745"><span class="lineNum"> 745 </span> : : __be32 device_id;</a>
-<a name="746"><span class="lineNum"> 746 </span> : : __be32 sub_vendor_id;</a>
-<a name="747"><span class="lineNum"> 747 </span> : : __be32 sub_device_id;</a>
-<a name="748"><span class="lineNum"> 748 </span> : : char name[8];</a>
-<a name="749"><span class="lineNum"> 749 </span> : : } __packed;</a>
+<a name="738"><span class="lineNum"> 738 </span> : : #define IOSLOT_IDATA_SLOTMAP 0</a>
+<a name="739"><span class="lineNum"> 739 </span> : : </a>
+<a name="740"><span class="lineNum"> 740 </span> : : struct slot_map_entry {</a>
+<a name="741"><span class="lineNum"> 741 </span> : : __be16 entry_id;</a>
+<a name="742"><span class="lineNum"> 742 </span> : : __be16 parent_id;</a>
+<a name="743"><span class="lineNum"> 743 </span> : : uint8_t phb_index; /* only valid for ROOT and SWITCH_UP */</a>
+<a name="744"><span class="lineNum"> 744 </span> : : </a>
+<a name="745"><span class="lineNum"> 745 </span> : : uint8_t type;</a>
+<a name="746"><span class="lineNum"> 746 </span> : : #define SLOT_TYPE_ROOT_COMPLEX 0x0</a>
+<a name="747"><span class="lineNum"> 747 </span> : : #define SLOT_TYPE_SWITCH_UP 0x1</a>
+<a name="748"><span class="lineNum"> 748 </span> : : #define SLOT_TYPE_SWITCH_DOWN 0x2</a>
+<a name="749"><span class="lineNum"> 749 </span> : : #define SLOT_TYPE_BUILTIN 0x3</a>
<a name="750"><span class="lineNum"> 750 </span> : : </a>
-<a name="751"><span class="lineNum"> 751 </span> : : #define IOSLOT_IDATA_DETAILS 1</a>
-<a name="752"><span class="lineNum"> 752 </span> : : </a>
-<a name="753"><span class="lineNum"> 753 </span> : : struct slot_map_details {</a>
-<a name="754"><span class="lineNum"> 754 </span> : : __be16 entry;</a>
+<a name="751"><span class="lineNum"> 751 </span> : : uint8_t lane_swapped;</a>
+<a name="752"><span class="lineNum"> 752 </span> : : uint8_t reserved;</a>
+<a name="753"><span class="lineNum"> 753 </span> : : __be16 lane_mask;</a>
+<a name="754"><span class="lineNum"> 754 </span> : : __be16 lane_reverse;</a>
<a name="755"><span class="lineNum"> 755 </span> : : </a>
-<a name="756"><span class="lineNum"> 756 </span> : : /* Phyp junk, ignore */</a>
-<a name="757"><span class="lineNum"> 757 </span> : : uint8_t mgc_load_source;</a>
-<a name="758"><span class="lineNum"> 758 </span> : : uint8_t hddw_order;</a>
-<a name="759"><span class="lineNum"> 759 </span> : : __be16 mmio_size_32; /* In MB */</a>
-<a name="760"><span class="lineNum"> 760 </span> : : __be16 mmio_size_64;</a>
-<a name="761"><span class="lineNum"> 761 </span> : : __be16 dma_size_32;</a>
-<a name="762"><span class="lineNum"> 762 </span> : : __be16 dma_size_64;</a>
+<a name="756"><span class="lineNum"> 756 </span> : : /* what can I do with this? reference something under/vpd/ ? */</a>
+<a name="757"><span class="lineNum"> 757 </span> : : __be16 slca_idx;</a>
+<a name="758"><span class="lineNum"> 758 </span> : : </a>
+<a name="759"><span class="lineNum"> 759 </span> : : __be16 mrw_slot_id;</a>
+<a name="760"><span class="lineNum"> 760 </span> : : </a>
+<a name="761"><span class="lineNum"> 761 </span> : : __be32 features;</a>
+<a name="762"><span class="lineNum"> 762 </span> : : #define SLOT_FEAT_SLOT 0x1</a>
<a name="763"><span class="lineNum"> 763 </span> : : </a>
-<a name="764"><span class="lineNum"> 764 </span> : : uint8_t power_ctrl_type; /* slot power control source */</a>
-<a name="765"><span class="lineNum"> 765 </span> : : #define SLOT_PWR_NONE 0x0</a>
-<a name="766"><span class="lineNum"> 766 </span> : : #define SLOT_PWR_I2C 0x1</a>
-<a name="767"><span class="lineNum"> 767 </span> : : </a>
-<a name="768"><span class="lineNum"> 768 </span> : : uint8_t presence_det_type; /* slot presence detect source */</a>
-<a name="769"><span class="lineNum"> 769 </span> : : #define SLOT_PRESENCE_NONE 0x0</a>
-<a name="770"><span class="lineNum"> 770 </span> : : #define SLOT_PRESENCE_PCI 0x1</a>
-<a name="771"><span class="lineNum"> 771 </span> : : #define SLOT_PRESENCE_I2C 0x2</a>
-<a name="772"><span class="lineNum"> 772 </span> : : </a>
-<a name="773"><span class="lineNum"> 773 </span> : : uint8_t perst_ctl_type; /* slot PERST source */</a>
-<a name="774"><span class="lineNum"> 774 </span> : : #define SLOT_PERST_NONE 0x0</a>
-<a name="775"><span class="lineNum"> 775 </span> : : #define SLOT_PERST_PHB_OR_SW 0x1</a>
-<a name="776"><span class="lineNum"> 776 </span> : : #define SLOT_PERST_SW_GPIO 0x2</a>
-<a name="777"><span class="lineNum"> 777 </span> : : uint8_t perst_gpio;</a>
+<a name="764"><span class="lineNum"> 764 </span> : : uint8_t up_port;</a>
+<a name="765"><span class="lineNum"> 765 </span> : : uint8_t down_port; /* the switch port this device is attached to */</a>
+<a name="766"><span class="lineNum"> 766 </span> : : </a>
+<a name="767"><span class="lineNum"> 767 </span> : : __be32 vendor_id;</a>
+<a name="768"><span class="lineNum"> 768 </span> : : __be32 device_id;</a>
+<a name="769"><span class="lineNum"> 769 </span> : : __be32 sub_vendor_id;</a>
+<a name="770"><span class="lineNum"> 770 </span> : : __be32 sub_device_id;</a>
+<a name="771"><span class="lineNum"> 771 </span> : : char name[8];</a>
+<a name="772"><span class="lineNum"> 772 </span> : : } __packed;</a>
+<a name="773"><span class="lineNum"> 773 </span> : : </a>
+<a name="774"><span class="lineNum"> 774 </span> : : #define IOSLOT_IDATA_DETAILS 1</a>
+<a name="775"><span class="lineNum"> 775 </span> : : </a>
+<a name="776"><span class="lineNum"> 776 </span> : : struct slot_map_details {</a>
+<a name="777"><span class="lineNum"> 777 </span> : : __be16 entry;</a>
<a name="778"><span class="lineNum"> 778 </span> : : </a>
-<a name="779"><span class="lineNum"> 779 </span> : : __be16 max_power; /* in W? */</a>
-<a name="780"><span class="lineNum"> 780 </span> : : </a>
-<a name="781"><span class="lineNum"> 781 </span> : : __be32 slot_caps;</a>
-<a name="782"><span class="lineNum"> 782 </span> : : #define SLOT_CAP_LSI 0x01 /* phyp junk? */</a>
-<a name="783"><span class="lineNum"> 783 </span> : : #define SLOT_CAP_CAPI 0x02</a>
-<a name="784"><span class="lineNum"> 784 </span> : : #define SLOT_CAP_CCARD 0x04</a>
-<a name="785"><span class="lineNum"> 785 </span> : : #define SLOT_CAP_HOTPLUG 0x08</a>
-<a name="786"><span class="lineNum"> 786 </span> : : #define SLOT_CAP_SRIOV 0x10 /* phyp junk */</a>
-<a name="787"><span class="lineNum"> 787 </span> : : #define SLOT_CAP_ELLOCO 0x20 /* why is this seperate from the nvlink cap? */</a>
-<a name="788"><span class="lineNum"> 788 </span> : : #define SLOT_CAP_NVLINK 0x30</a>
-<a name="789"><span class="lineNum"> 789 </span> : : </a>
-<a name="790"><span class="lineNum"> 790 </span> : : __be16 reserved1;</a>
-<a name="791"><span class="lineNum"> 791 </span> : : </a>
-<a name="792"><span class="lineNum"> 792 </span> : : /* I2C Link IDs */</a>
-<a name="793"><span class="lineNum"> 793 </span> : : __be32 i2c_power_ctl;</a>
-<a name="794"><span class="lineNum"> 794 </span> : : __be32 i2c_pgood;</a>
-<a name="795"><span class="lineNum"> 795 </span> : : __be32 i2c_cable_card; /* opencapi presence detect? */</a>
-<a name="796"><span class="lineNum"> 796 </span> : : __be32 i2c_mex_fpga;</a>
-<a name="797"><span class="lineNum"> 797 </span> : : };</a>
-<a name="798"><span class="lineNum"> 798 </span> : : </a>
-<a name="799"><span class="lineNum"> 799 </span> : : /*</a>
-<a name="800"><span class="lineNum"> 800 </span> : : * IO KID is a dauther card structure</a>
-<a name="801"><span class="lineNum"> 801 </span> : : */</a>
-<a name="802"><span class="lineNum"> 802 </span> : : #define IOKID_FRU_ID_DATA 0</a>
-<a name="803"><span class="lineNum"> 803 </span> : : #define IOKID_KW_VPD 1</a>
-<a name="804"><span class="lineNum"> 804 </span> : : </a>
-<a name="805"><span class="lineNum"> 805 </span> : : /*</a>
-<a name="806"><span class="lineNum"> 806 </span> : : * CPU Controls Legacy Structure</a>
-<a name="807"><span class="lineNum"> 807 </span> : : */</a>
-<a name="808"><span class="lineNum"> 808 </span> : : struct cpu_ctl_legacy {</a>
-<a name="809"><span class="lineNum"> 809 </span> : : __be64 addr;</a>
-<a name="810"><span class="lineNum"> 810 </span> : : __be64 size;</a>
-<a name="811"><span class="lineNum"> 811 </span> : : } __packed;</a>
+<a name="779"><span class="lineNum"> 779 </span> : : /* Phyp junk, ignore */</a>
+<a name="780"><span class="lineNum"> 780 </span> : : uint8_t mgc_load_source;</a>
+<a name="781"><span class="lineNum"> 781 </span> : : uint8_t hddw_order;</a>
+<a name="782"><span class="lineNum"> 782 </span> : : __be16 mmio_size_32; /* In MB */</a>
+<a name="783"><span class="lineNum"> 783 </span> : : __be16 mmio_size_64;</a>
+<a name="784"><span class="lineNum"> 784 </span> : : __be16 dma_size_32;</a>
+<a name="785"><span class="lineNum"> 785 </span> : : __be16 dma_size_64;</a>
+<a name="786"><span class="lineNum"> 786 </span> : : </a>
+<a name="787"><span class="lineNum"> 787 </span> : : uint8_t power_ctrl_type; /* slot power control source */</a>
+<a name="788"><span class="lineNum"> 788 </span> : : #define SLOT_PWR_NONE 0x0</a>
+<a name="789"><span class="lineNum"> 789 </span> : : #define SLOT_PWR_I2C 0x1</a>
+<a name="790"><span class="lineNum"> 790 </span> : : </a>
+<a name="791"><span class="lineNum"> 791 </span> : : uint8_t presence_det_type; /* slot presence detect source */</a>
+<a name="792"><span class="lineNum"> 792 </span> : : #define SLOT_PRESENCE_NONE 0x0</a>
+<a name="793"><span class="lineNum"> 793 </span> : : #define SLOT_PRESENCE_PCI 0x1</a>
+<a name="794"><span class="lineNum"> 794 </span> : : #define SLOT_PRESENCE_I2C 0x2</a>
+<a name="795"><span class="lineNum"> 795 </span> : : </a>
+<a name="796"><span class="lineNum"> 796 </span> : : uint8_t perst_ctl_type; /* slot PERST source */</a>
+<a name="797"><span class="lineNum"> 797 </span> : : #define SLOT_PERST_NONE 0x0</a>
+<a name="798"><span class="lineNum"> 798 </span> : : #define SLOT_PERST_PHB_OR_SW 0x1</a>
+<a name="799"><span class="lineNum"> 799 </span> : : #define SLOT_PERST_SW_GPIO 0x2</a>
+<a name="800"><span class="lineNum"> 800 </span> : : uint8_t perst_gpio;</a>
+<a name="801"><span class="lineNum"> 801 </span> : : </a>
+<a name="802"><span class="lineNum"> 802 </span> : : __be16 max_power; /* in W? */</a>
+<a name="803"><span class="lineNum"> 803 </span> : : </a>
+<a name="804"><span class="lineNum"> 804 </span> : : __be32 slot_caps;</a>
+<a name="805"><span class="lineNum"> 805 </span> : : #define SLOT_CAP_LSI 0x01 /* phyp junk? */</a>
+<a name="806"><span class="lineNum"> 806 </span> : : #define SLOT_CAP_CAPI 0x02</a>
+<a name="807"><span class="lineNum"> 807 </span> : : #define SLOT_CAP_CCARD 0x04</a>
+<a name="808"><span class="lineNum"> 808 </span> : : #define SLOT_CAP_HOTPLUG 0x08</a>
+<a name="809"><span class="lineNum"> 809 </span> : : #define SLOT_CAP_SRIOV 0x10 /* phyp junk */</a>
+<a name="810"><span class="lineNum"> 810 </span> : : #define SLOT_CAP_ELLOCO 0x20 /* why is this seperate from the nvlink cap? */</a>
+<a name="811"><span class="lineNum"> 811 </span> : : #define SLOT_CAP_NVLINK 0x30</a>
<a name="812"><span class="lineNum"> 812 </span> : : </a>
-<a name="813"><span class="lineNum"> 813 </span> : : /*</a>
-<a name="814"><span class="lineNum"> 814 </span> : : * CPU Control Legacy table</a>
-<a name="815"><span class="lineNum"> 815 </span> : : *</a>
-<a name="816"><span class="lineNum"> 816 </span> : : * Format of this table is defined in FIPS PHYP Attn spec.</a>
-<a name="817"><span class="lineNum"> 817 </span> : : */</a>
-<a name="818"><span class="lineNum"> 818 </span> : : struct cpu_ctl_legacy_table {</a>
-<a name="819"><span class="lineNum"> 819 </span> : : struct cpu_ctl_legacy spat;</a>
-<a name="820"><span class="lineNum"> 820 </span> : : struct cpu_ctl_legacy sp_attn_area1;</a>
-<a name="821"><span class="lineNum"> 821 </span> : : struct cpu_ctl_legacy sp_attn_area2;</a>
-<a name="822"><span class="lineNum"> 822 </span> : : struct cpu_ctl_legacy hsr_area;</a>
-<a name="823"><span class="lineNum"> 823 </span> : : struct cpu_ctl_legacy reserved[12];</a>
-<a name="824"><span class="lineNum"> 824 </span> : : } __packed;</a>
-<a name="825"><span class="lineNum"> 825 </span> : : </a>
-<a name="826"><span class="lineNum"> 826 </span> : : /*</a>
-<a name="827"><span class="lineNum"> 827 </span> : : * CPU Controls Header Structure</a>
-<a name="828"><span class="lineNum"> 828 </span> : : */</a>
-<a name="829"><span class="lineNum"> 829 </span> : : #define CPU_CTL_HDIF_SIG &quot;CPUCTL&quot;</a>
-<a name="830"><span class="lineNum"> 830 </span> : : struct cpu_ctl_init_data {</a>
-<a name="831"><span class="lineNum"> 831 </span> : : struct HDIF_common_hdr hdr;</a>
-<a name="832"><span class="lineNum"> 832 </span> : : struct HDIF_idata_ptr cpu_ctl;</a>
-<a name="833"><span class="lineNum"> 833 </span> : : uint8_t reserved[8];</a>
-<a name="834"><span class="lineNum"> 834 </span> : : struct cpu_ctl_legacy_table cpu_ctl_lt;</a>
-<a name="835"><span class="lineNum"> 835 </span> : : } __packed __align(0x10);</a>
-<a name="836"><span class="lineNum"> 836 </span> : : </a>
-<a name="837"><span class="lineNum"> 837 </span> : : /*</a>
-<a name="838"><span class="lineNum"> 838 </span> : : * Slot Location Code Array (aka SLCA)</a>
-<a name="839"><span class="lineNum"> 839 </span> : : *</a>
-<a name="840"><span class="lineNum"> 840 </span> : : * This is a pile of location codes referenced by various other</a>
-<a name="841"><span class="lineNum"> 841 </span> : : * structures such as the IO Hubs for things on the CEC. Not</a>
-<a name="842"><span class="lineNum"> 842 </span> : : * everything in there is a physical port. The SLCA is actually</a>
-<a name="843"><span class="lineNum"> 843 </span> : : * a tree which represent the topology of the system.</a>
-<a name="844"><span class="lineNum"> 844 </span> : : *</a>
-<a name="845"><span class="lineNum"> 845 </span> : : * The tree works as follow: A parent has a pointer to the first</a>
-<a name="846"><span class="lineNum"> 846 </span> : : * child. A child has a pointer to its parent. Siblings are</a>
-<a name="847"><span class="lineNum"> 847 </span> : : * consecutive entries.</a>
-<a name="848"><span class="lineNum"> 848 </span> : : *</a>
-<a name="849"><span class="lineNum"> 849 </span> : : * Note: If we ever support concurrent maintenance... this is</a>
-<a name="850"><span class="lineNum"> 850 </span> : : * completely rebuilt, invalidating all indices, though other</a>
-<a name="851"><span class="lineNum"> 851 </span> : : * structures that may reference SLCA by index will be rebuilt</a>
-<a name="852"><span class="lineNum"> 852 </span> : : * as well.</a>
-<a name="853"><span class="lineNum"> 853 </span> : : *</a>
-<a name="854"><span class="lineNum"> 854 </span> : : * Note that a lot of that stuff is based on VPD documentation</a>
-<a name="855"><span class="lineNum"> 855 </span> : : * such as the identification keywords. I will list the ones</a>
-<a name="856"><span class="lineNum"> 856 </span> : : * I manage to figure out without the doc separately.</a>
-<a name="857"><span class="lineNum"> 857 </span> : : */</a>
-<a name="858"><span class="lineNum"> 858 </span> : : #define SLCA_HDIF_SIG &quot;SLCA &quot;</a>
+<a name="813"><span class="lineNum"> 813 </span> : : __be16 reserved1;</a>
+<a name="814"><span class="lineNum"> 814 </span> : : </a>
+<a name="815"><span class="lineNum"> 815 </span> : : /* I2C Link IDs */</a>
+<a name="816"><span class="lineNum"> 816 </span> : : __be32 i2c_power_ctl;</a>
+<a name="817"><span class="lineNum"> 817 </span> : : __be32 i2c_pgood;</a>
+<a name="818"><span class="lineNum"> 818 </span> : : __be32 i2c_cable_card; /* opencapi presence detect? */</a>
+<a name="819"><span class="lineNum"> 819 </span> : : __be32 i2c_mex_fpga;</a>
+<a name="820"><span class="lineNum"> 820 </span> : : };</a>
+<a name="821"><span class="lineNum"> 821 </span> : : </a>
+<a name="822"><span class="lineNum"> 822 </span> : : /*</a>
+<a name="823"><span class="lineNum"> 823 </span> : : * IO KID is a dauther card structure</a>
+<a name="824"><span class="lineNum"> 824 </span> : : */</a>
+<a name="825"><span class="lineNum"> 825 </span> : : #define IOKID_FRU_ID_DATA 0</a>
+<a name="826"><span class="lineNum"> 826 </span> : : #define IOKID_KW_VPD 1</a>
+<a name="827"><span class="lineNum"> 827 </span> : : </a>
+<a name="828"><span class="lineNum"> 828 </span> : : /*</a>
+<a name="829"><span class="lineNum"> 829 </span> : : * CPU Controls Legacy Structure</a>
+<a name="830"><span class="lineNum"> 830 </span> : : */</a>
+<a name="831"><span class="lineNum"> 831 </span> : : struct cpu_ctl_legacy {</a>
+<a name="832"><span class="lineNum"> 832 </span> : : __be64 addr;</a>
+<a name="833"><span class="lineNum"> 833 </span> : : __be64 size;</a>
+<a name="834"><span class="lineNum"> 834 </span> : : } __packed;</a>
+<a name="835"><span class="lineNum"> 835 </span> : : </a>
+<a name="836"><span class="lineNum"> 836 </span> : : /*</a>
+<a name="837"><span class="lineNum"> 837 </span> : : * CPU Control Legacy table</a>
+<a name="838"><span class="lineNum"> 838 </span> : : *</a>
+<a name="839"><span class="lineNum"> 839 </span> : : * Format of this table is defined in FIPS PHYP Attn spec.</a>
+<a name="840"><span class="lineNum"> 840 </span> : : */</a>
+<a name="841"><span class="lineNum"> 841 </span> : : struct cpu_ctl_legacy_table {</a>
+<a name="842"><span class="lineNum"> 842 </span> : : struct cpu_ctl_legacy spat;</a>
+<a name="843"><span class="lineNum"> 843 </span> : : struct cpu_ctl_legacy sp_attn_area1;</a>
+<a name="844"><span class="lineNum"> 844 </span> : : struct cpu_ctl_legacy sp_attn_area2;</a>
+<a name="845"><span class="lineNum"> 845 </span> : : struct cpu_ctl_legacy hsr_area;</a>
+<a name="846"><span class="lineNum"> 846 </span> : : struct cpu_ctl_legacy reserved[12];</a>
+<a name="847"><span class="lineNum"> 847 </span> : : } __packed;</a>
+<a name="848"><span class="lineNum"> 848 </span> : : </a>
+<a name="849"><span class="lineNum"> 849 </span> : : /*</a>
+<a name="850"><span class="lineNum"> 850 </span> : : * CPU Controls Header Structure</a>
+<a name="851"><span class="lineNum"> 851 </span> : : */</a>
+<a name="852"><span class="lineNum"> 852 </span> : : #define CPU_CTL_HDIF_SIG &quot;CPUCTL&quot;</a>
+<a name="853"><span class="lineNum"> 853 </span> : : struct cpu_ctl_init_data {</a>
+<a name="854"><span class="lineNum"> 854 </span> : : struct HDIF_common_hdr hdr;</a>
+<a name="855"><span class="lineNum"> 855 </span> : : struct HDIF_idata_ptr cpu_ctl;</a>
+<a name="856"><span class="lineNum"> 856 </span> : : uint8_t reserved[8];</a>
+<a name="857"><span class="lineNum"> 857 </span> : : struct cpu_ctl_legacy_table cpu_ctl_lt;</a>
+<a name="858"><span class="lineNum"> 858 </span> : : } __packed __align(0x10);</a>
<a name="859"><span class="lineNum"> 859 </span> : : </a>
-<a name="860"><span class="lineNum"> 860 </span> : : /* Idata index 0 : SLCA root pointer</a>
-<a name="861"><span class="lineNum"> 861 </span> : : *</a>
-<a name="862"><span class="lineNum"> 862 </span> : : * The SLCA array is an HDIF array of all the entries. The tree</a>
-<a name="863"><span class="lineNum"> 863 </span> : : * structure is based on indices inside the entries and order of</a>
-<a name="864"><span class="lineNum"> 864 </span> : : * the entries</a>
-<a name="865"><span class="lineNum"> 865 </span> : : */</a>
-<a name="866"><span class="lineNum"> 866 </span> : : #define SLCA_IDATA_ARRAY 0</a>
-<a name="867"><span class="lineNum"> 867 </span> : : </a>
-<a name="868"><span class="lineNum"> 868 </span> : : #define SLCA_ROOT_INDEX 0</a>
-<a name="869"><span class="lineNum"> 869 </span> : : </a>
-<a name="870"><span class="lineNum"> 870 </span> : : /* Note: An &quot;index&quot; (or idx) is always an index into the SLCA array</a>
-<a name="871"><span class="lineNum"> 871 </span> : : * and &quot;id&quot; is a reference to some other object.</a>
-<a name="872"><span class="lineNum"> 872 </span> : : */</a>
-<a name="873"><span class="lineNum"> 873 </span> : : struct slca_entry {</a>
-<a name="874"><span class="lineNum"> 874 </span> : : __be16 my_index; /* redundant, useful */</a>
-<a name="875"><span class="lineNum"> 875 </span> : : __be16 rsrc_id; /* formerly VPD port number */</a>
-<a name="876"><span class="lineNum"> 876 </span> : : uint8_t fru_id[2]; /* ASCII VPD ID */</a>
-<a name="877"><span class="lineNum"> 877 </span> : : #define SLCA_ROOT_VPD_ID VPD_ID('V','V')</a>
-<a name="878"><span class="lineNum"> 878 </span> : : #define SLCA_SYSTEM_VPD_ID VPD_ID('S','V')</a>
-<a name="879"><span class="lineNum"> 879 </span> : : #define SLCA_SAI_INDICATOR_ID VPD_ID('S','A')</a>
-<a name="880"><span class="lineNum"> 880 </span> : : __be16 parent_index; /* Parent entry index */</a>
-<a name="881"><span class="lineNum"> 881 </span> : : uint8_t flags;</a>
-<a name="882"><span class="lineNum"> 882 </span> : : #define SLCA_FLAG_NON_FUNCTIONAL 0x02 /* For redundant entries */</a>
-<a name="883"><span class="lineNum"> 883 </span> : : #define SLCA_FLAG_IMBEDDED 0x01 /* not set =&gt; pluggable */</a>
-<a name="884"><span class="lineNum"> 884 </span> : : uint8_t old_nr_child; /* Legacy: Nr of children */</a>
-<a name="885"><span class="lineNum"> 885 </span> : : __be16 child_index; /* First child index */</a>
-<a name="886"><span class="lineNum"> 886 </span> : : __be16 child_rsrc_id; /* Resource ID of first child */</a>
-<a name="887"><span class="lineNum"> 887 </span> : : uint8_t loc_code_allen; /* Alloc len of loc code */</a>
-<a name="888"><span class="lineNum"> 888 </span> : : uint8_t loc_code_len; /* Loc code len */</a>
-<a name="889"><span class="lineNum"> 889 </span> : : uint8_t loc_code[LOC_CODE_SIZE]; /* NULL terminated (thus max 79 chr) */</a>
-<a name="890"><span class="lineNum"> 890 </span> : : __be16 first_dup_idx; /* First redundant resource index */</a>
-<a name="891"><span class="lineNum"> 891 </span> : : uint8_t nr_dups; /* Number of redundant entries */</a>
-<a name="892"><span class="lineNum"> 892 </span> : : uint8_t reserved;</a>
-<a name="893"><span class="lineNum"> 893 </span> : : __be16 nr_child; /* New version */</a>
-<a name="894"><span class="lineNum"> 894 </span> : : uint8_t install_indic; /* Installed indicator */</a>
-<a name="895"><span class="lineNum"> 895 </span> : : #define SLCA_INSTALL_NO_HW_PDT 1 /* No HW presence detect */</a>
-<a name="896"><span class="lineNum"> 896 </span> : : #define SLCA_INSTALL_INSTALLED 2</a>
-<a name="897"><span class="lineNum"> 897 </span> : : #define SLCA_INSTALL_NOT_INSTALLED 3</a>
-<a name="898"><span class="lineNum"> 898 </span> : : uint8_t vpd_collected;</a>
-<a name="899"><span class="lineNum"> 899 </span> : : #define SLCA_VPD_COLLECTED 2</a>
-<a name="900"><span class="lineNum"> 900 </span> : : #define SLCA_VPD_NOT_COLLECTED 3</a>
-<a name="901"><span class="lineNum"> 901 </span> : : } __packed;</a>
-<a name="902"><span class="lineNum"> 902 </span> : : </a>
-<a name="903"><span class="lineNum"> 903 </span> : : /*</a>
-<a name="904"><span class="lineNum"> 904 </span> : : * System VPD</a>
-<a name="905"><span class="lineNum"> 905 </span> : : */</a>
-<a name="906"><span class="lineNum"> 906 </span> : : #define SYSVPD_HDIF_SIG &quot;SYSVPD&quot;</a>
-<a name="907"><span class="lineNum"> 907 </span> : : </a>
-<a name="908"><span class="lineNum"> 908 </span> : : /* Idata index 0 : FRU ID Data */</a>
-<a name="909"><span class="lineNum"> 909 </span> : : #define SYSVPD_IDATA_FRU_ID 0</a>
-<a name="910"><span class="lineNum"> 910 </span> : : </a>
-<a name="911"><span class="lineNum"> 911 </span> : : /* Idata index 1 : Keyword VPD */</a>
-<a name="912"><span class="lineNum"> 912 </span> : : #define SYSVPD_IDATA_KW_VPD 1</a>
-<a name="913"><span class="lineNum"> 913 </span> : : </a>
-<a name="914"><span class="lineNum"> 914 </span> : : /* Idata index 2 : Operational status */</a>
-<a name="915"><span class="lineNum"> 915 </span> : : #define SYSVPD_IDATA_OP_STATUS 2</a>
-<a name="916"><span class="lineNum"> 916 </span> : : </a>
-<a name="917"><span class="lineNum"> 917 </span> : : /*</a>
-<a name="918"><span class="lineNum"> 918 </span> : : * FRU keyword VPD structure</a>
-<a name="919"><span class="lineNum"> 919 </span> : : */</a>
-<a name="920"><span class="lineNum"> 920 </span> : : #define FRUVPD_HDIF_SIG &quot;FRUVPD&quot;</a>
-<a name="921"><span class="lineNum"> 921 </span> : : </a>
-<a name="922"><span class="lineNum"> 922 </span> : : /* Idata index 0 : FRU ID Data */</a>
-<a name="923"><span class="lineNum"> 923 </span> : : #define FRUVPD_IDATA_FRU_ID 0</a>
-<a name="924"><span class="lineNum"> 924 </span> : : </a>
-<a name="925"><span class="lineNum"> 925 </span> : : /* Idata index 1 : Keyword VPD */</a>
-<a name="926"><span class="lineNum"> 926 </span> : : #define FRUVPD_IDATA_KW_VPD 1</a>
-<a name="927"><span class="lineNum"> 927 </span> : : </a>
-<a name="928"><span class="lineNum"> 928 </span> : : /* Idata index 2 : Operational status */</a>
-<a name="929"><span class="lineNum"> 929 </span> : : #define FRUVPD_IDATA_OP_STATUS 2</a>
+<a name="860"><span class="lineNum"> 860 </span> : : /*</a>
+<a name="861"><span class="lineNum"> 861 </span> : : * Slot Location Code Array (aka SLCA)</a>
+<a name="862"><span class="lineNum"> 862 </span> : : *</a>
+<a name="863"><span class="lineNum"> 863 </span> : : * This is a pile of location codes referenced by various other</a>
+<a name="864"><span class="lineNum"> 864 </span> : : * structures such as the IO Hubs for things on the CEC. Not</a>
+<a name="865"><span class="lineNum"> 865 </span> : : * everything in there is a physical port. The SLCA is actually</a>
+<a name="866"><span class="lineNum"> 866 </span> : : * a tree which represent the topology of the system.</a>
+<a name="867"><span class="lineNum"> 867 </span> : : *</a>
+<a name="868"><span class="lineNum"> 868 </span> : : * The tree works as follow: A parent has a pointer to the first</a>
+<a name="869"><span class="lineNum"> 869 </span> : : * child. A child has a pointer to its parent. Siblings are</a>
+<a name="870"><span class="lineNum"> 870 </span> : : * consecutive entries.</a>
+<a name="871"><span class="lineNum"> 871 </span> : : *</a>
+<a name="872"><span class="lineNum"> 872 </span> : : * Note: If we ever support concurrent maintenance... this is</a>
+<a name="873"><span class="lineNum"> 873 </span> : : * completely rebuilt, invalidating all indices, though other</a>
+<a name="874"><span class="lineNum"> 874 </span> : : * structures that may reference SLCA by index will be rebuilt</a>
+<a name="875"><span class="lineNum"> 875 </span> : : * as well.</a>
+<a name="876"><span class="lineNum"> 876 </span> : : *</a>
+<a name="877"><span class="lineNum"> 877 </span> : : * Note that a lot of that stuff is based on VPD documentation</a>
+<a name="878"><span class="lineNum"> 878 </span> : : * such as the identification keywords. I will list the ones</a>
+<a name="879"><span class="lineNum"> 879 </span> : : * I manage to figure out without the doc separately.</a>
+<a name="880"><span class="lineNum"> 880 </span> : : */</a>
+<a name="881"><span class="lineNum"> 881 </span> : : #define SLCA_HDIF_SIG &quot;SLCA &quot;</a>
+<a name="882"><span class="lineNum"> 882 </span> : : </a>
+<a name="883"><span class="lineNum"> 883 </span> : : /* Idata index 0 : SLCA root pointer</a>
+<a name="884"><span class="lineNum"> 884 </span> : : *</a>
+<a name="885"><span class="lineNum"> 885 </span> : : * The SLCA array is an HDIF array of all the entries. The tree</a>
+<a name="886"><span class="lineNum"> 886 </span> : : * structure is based on indices inside the entries and order of</a>
+<a name="887"><span class="lineNum"> 887 </span> : : * the entries</a>
+<a name="888"><span class="lineNum"> 888 </span> : : */</a>
+<a name="889"><span class="lineNum"> 889 </span> : : #define SLCA_IDATA_ARRAY 0</a>
+<a name="890"><span class="lineNum"> 890 </span> : : </a>
+<a name="891"><span class="lineNum"> 891 </span> : : #define SLCA_ROOT_INDEX 0</a>
+<a name="892"><span class="lineNum"> 892 </span> : : </a>
+<a name="893"><span class="lineNum"> 893 </span> : : /* Note: An &quot;index&quot; (or idx) is always an index into the SLCA array</a>
+<a name="894"><span class="lineNum"> 894 </span> : : * and &quot;id&quot; is a reference to some other object.</a>
+<a name="895"><span class="lineNum"> 895 </span> : : */</a>
+<a name="896"><span class="lineNum"> 896 </span> : : struct slca_entry {</a>
+<a name="897"><span class="lineNum"> 897 </span> : : __be16 my_index; /* redundant, useful */</a>
+<a name="898"><span class="lineNum"> 898 </span> : : __be16 rsrc_id; /* formerly VPD port number */</a>
+<a name="899"><span class="lineNum"> 899 </span> : : uint8_t fru_id[2]; /* ASCII VPD ID */</a>
+<a name="900"><span class="lineNum"> 900 </span> : : #define SLCA_ROOT_VPD_ID VPD_ID('V','V')</a>
+<a name="901"><span class="lineNum"> 901 </span> : : #define SLCA_SYSTEM_VPD_ID VPD_ID('S','V')</a>
+<a name="902"><span class="lineNum"> 902 </span> : : #define SLCA_SAI_INDICATOR_ID VPD_ID('S','A')</a>
+<a name="903"><span class="lineNum"> 903 </span> : : __be16 parent_index; /* Parent entry index */</a>
+<a name="904"><span class="lineNum"> 904 </span> : : uint8_t flags;</a>
+<a name="905"><span class="lineNum"> 905 </span> : : #define SLCA_FLAG_NON_FUNCTIONAL 0x02 /* For redundant entries */</a>
+<a name="906"><span class="lineNum"> 906 </span> : : #define SLCA_FLAG_IMBEDDED 0x01 /* not set =&gt; pluggable */</a>
+<a name="907"><span class="lineNum"> 907 </span> : : uint8_t old_nr_child; /* Legacy: Nr of children */</a>
+<a name="908"><span class="lineNum"> 908 </span> : : __be16 child_index; /* First child index */</a>
+<a name="909"><span class="lineNum"> 909 </span> : : __be16 child_rsrc_id; /* Resource ID of first child */</a>
+<a name="910"><span class="lineNum"> 910 </span> : : uint8_t loc_code_allen; /* Alloc len of loc code */</a>
+<a name="911"><span class="lineNum"> 911 </span> : : uint8_t loc_code_len; /* Loc code len */</a>
+<a name="912"><span class="lineNum"> 912 </span> : : uint8_t loc_code[LOC_CODE_SIZE]; /* NULL terminated (thus max 79 chr) */</a>
+<a name="913"><span class="lineNum"> 913 </span> : : __be16 first_dup_idx; /* First redundant resource index */</a>
+<a name="914"><span class="lineNum"> 914 </span> : : uint8_t nr_dups; /* Number of redundant entries */</a>
+<a name="915"><span class="lineNum"> 915 </span> : : uint8_t reserved;</a>
+<a name="916"><span class="lineNum"> 916 </span> : : __be16 nr_child; /* New version */</a>
+<a name="917"><span class="lineNum"> 917 </span> : : uint8_t install_indic; /* Installed indicator */</a>
+<a name="918"><span class="lineNum"> 918 </span> : : #define SLCA_INSTALL_NO_HW_PDT 1 /* No HW presence detect */</a>
+<a name="919"><span class="lineNum"> 919 </span> : : #define SLCA_INSTALL_INSTALLED 2</a>
+<a name="920"><span class="lineNum"> 920 </span> : : #define SLCA_INSTALL_NOT_INSTALLED 3</a>
+<a name="921"><span class="lineNum"> 921 </span> : : uint8_t vpd_collected;</a>
+<a name="922"><span class="lineNum"> 922 </span> : : #define SLCA_VPD_COLLECTED 2</a>
+<a name="923"><span class="lineNum"> 923 </span> : : #define SLCA_VPD_NOT_COLLECTED 3</a>
+<a name="924"><span class="lineNum"> 924 </span> : : } __packed;</a>
+<a name="925"><span class="lineNum"> 925 </span> : : </a>
+<a name="926"><span class="lineNum"> 926 </span> : : /*</a>
+<a name="927"><span class="lineNum"> 927 </span> : : * System VPD</a>
+<a name="928"><span class="lineNum"> 928 </span> : : */</a>
+<a name="929"><span class="lineNum"> 929 </span> : : #define SYSVPD_HDIF_SIG &quot;SYSVPD&quot;</a>
<a name="930"><span class="lineNum"> 930 </span> : : </a>
-<a name="931"><span class="lineNum"> 931 </span> : : </a>
-<a name="932"><span class="lineNum"> 932 </span> : : /*</a>
-<a name="933"><span class="lineNum"> 933 </span> : : * SPPCIA structure. The SPIRA contain an array of these, one</a>
-<a name="934"><span class="lineNum"> 934 </span> : : * per processor core</a>
-<a name="935"><span class="lineNum"> 935 </span> : : */</a>
-<a name="936"><span class="lineNum"> 936 </span> : : #define SPPCIA_HDIF_SIG &quot;SPPCIA&quot;</a>
-<a name="937"><span class="lineNum"> 937 </span> : : </a>
-<a name="938"><span class="lineNum"> 938 </span> : : /* Idata index 0 : Core unique data */</a>
-<a name="939"><span class="lineNum"> 939 </span> : : #define SPPCIA_IDATA_CORE_UNIQUE 0</a>
-<a name="940"><span class="lineNum"> 940 </span> : : </a>
-<a name="941"><span class="lineNum"> 941 </span> : : struct sppcia_core_unique {</a>
-<a name="942"><span class="lineNum"> 942 </span> : : __be32 reserved;</a>
-<a name="943"><span class="lineNum"> 943 </span> : : __be32 proc_fru_id;</a>
-<a name="944"><span class="lineNum"> 944 </span> : : __be32 hw_proc_id;</a>
-<a name="945"><span class="lineNum"> 945 </span> : : #define CPU_ID_VERIFY_MASK 0xC0000000</a>
-<a name="946"><span class="lineNum"> 946 </span> : : #define CPU_ID_VERIFY_SHIFT 30</a>
-<a name="947"><span class="lineNum"> 947 </span> : : #define CPU_ID_VERIFY_USABLE_NO_FAILURES 0</a>
-<a name="948"><span class="lineNum"> 948 </span> : : #define CPU_ID_VERIFY_USABLE_FAILURES 1</a>
-<a name="949"><span class="lineNum"> 949 </span> : : #define CPU_ID_VERIFY_NOT_INSTALLED 2</a>
-<a name="950"><span class="lineNum"> 950 </span> : : #define CPU_ID_VERIFY_UNUSABLE 3</a>
-<a name="951"><span class="lineNum"> 951 </span> : : #define CPU_ID_SECONDARY_THREAD 0x20000000</a>
-<a name="952"><span class="lineNum"> 952 </span> : : #define CPU_ID_PCIA_RESERVED 0x10000000</a>
-<a name="953"><span class="lineNum"> 953 </span> : : #define CPU_ID_NUM_SECONDARY_THREAD_MASK 0x00FF0000</a>
-<a name="954"><span class="lineNum"> 954 </span> : : #define CPU_ID_NUM_SECONDARY_THREAD_SHIFT 16</a>
-<a name="955"><span class="lineNum"> 955 </span> : : __be32 verif_exist_flags;</a>
-<a name="956"><span class="lineNum"> 956 </span> : : __be32 chip_ec_level;</a>
-<a name="957"><span class="lineNum"> 957 </span> : : __be32 proc_chip_id;</a>
-<a name="958"><span class="lineNum"> 958 </span> : : __be32 reserved2;</a>
-<a name="959"><span class="lineNum"> 959 </span> : : __be32 reserved3;</a>
-<a name="960"><span class="lineNum"> 960 </span> : : __be32 reserved4;</a>
-<a name="961"><span class="lineNum"> 961 </span> : : __be32 hw_module_id;</a>
-<a name="962"><span class="lineNum"> 962 </span> : : __be64 reserved5;</a>
-<a name="963"><span class="lineNum"> 963 </span> : : __be32 reserved6;</a>
-<a name="964"><span class="lineNum"> 964 </span> : : __be32 reserved7;</a>
-<a name="965"><span class="lineNum"> 965 </span> : : __be32 reserved8;</a>
-<a name="966"><span class="lineNum"> 966 </span> : : __be32 ccm_node_id;</a>
-<a name="967"><span class="lineNum"> 967 </span> : : __be32 hw_card_id;</a>
-<a name="968"><span class="lineNum"> 968 </span> : : __be32 internal_drawer_node_id;</a>
-<a name="969"><span class="lineNum"> 969 </span> : : __be32 drawer_book_octant_blade_id;</a>
-<a name="970"><span class="lineNum"> 970 </span> : : __be32 memory_interleaving_scope;</a>
-<a name="971"><span class="lineNum"> 971 </span> : : __be32 lco_target;</a>
-<a name="972"><span class="lineNum"> 972 </span> : : __be32 reserved9;</a>
-<a name="973"><span class="lineNum"> 973 </span> : : } __packed;</a>
-<a name="974"><span class="lineNum"> 974 </span> : : </a>
-<a name="975"><span class="lineNum"> 975 </span> : : /* Idata index 1 : CPU Time base structure */</a>
-<a name="976"><span class="lineNum"> 976 </span> : : #define SPPCIA_IDATA_TIMEBASE 1</a>
-<a name="977"><span class="lineNum"> 977 </span> : : </a>
-<a name="978"><span class="lineNum"> 978 </span> : : struct sppcia_cpu_timebase {</a>
-<a name="979"><span class="lineNum"> 979 </span> : : __be32 cycle_time;</a>
-<a name="980"><span class="lineNum"> 980 </span> : : __be32 time_base;</a>
-<a name="981"><span class="lineNum"> 981 </span> : : __be32 actual_clock_speed;</a>
-<a name="982"><span class="lineNum"> 982 </span> : : __be32 memory_bus_frequency;</a>
-<a name="983"><span class="lineNum"> 983 </span> : : } __packed;</a>
-<a name="984"><span class="lineNum"> 984 </span> : : </a>
-<a name="985"><span class="lineNum"> 985 </span> : : /* Idata index 2 : CPU Cache Size Structure */</a>
-<a name="986"><span class="lineNum"> 986 </span> : : #define SPPCIA_IDATA_CPU_CACHE 2</a>
-<a name="987"><span class="lineNum"> 987 </span> : : </a>
-<a name="988"><span class="lineNum"> 988 </span> : : struct sppcia_cpu_cache {</a>
-<a name="989"><span class="lineNum"> 989 </span> : : __be32 icache_size_kb;</a>
-<a name="990"><span class="lineNum"> 990 </span> : : __be32 icache_line_size;</a>
-<a name="991"><span class="lineNum"> 991 </span> : : __be32 l1_dcache_size_kb;</a>
-<a name="992"><span class="lineNum"> 992 </span> : : __be32 l1_dcache_line_size;</a>
-<a name="993"><span class="lineNum"> 993 </span> : : __be32 l2_dcache_size_kb;</a>
-<a name="994"><span class="lineNum"> 994 </span> : : __be32 l2_line_size;</a>
-<a name="995"><span class="lineNum"> 995 </span> : : __be32 l3_dcache_size_kb;</a>
-<a name="996"><span class="lineNum"> 996 </span> : : __be32 l3_line_size;</a>
-<a name="997"><span class="lineNum"> 997 </span> : : __be32 dcache_block_size;</a>
-<a name="998"><span class="lineNum"> 998 </span> : : __be32 icache_block_size;</a>
-<a name="999"><span class="lineNum"> 999 </span> : : __be32 dcache_assoc_sets;</a>
-<a name="1000"><span class="lineNum"> 1000 </span> : : __be32 icache_assoc_sets;</a>
-<a name="1001"><span class="lineNum"> 1001 </span> : : __be32 dtlb_entries;</a>
-<a name="1002"><span class="lineNum"> 1002 </span> : : __be32 dtlb_assoc_sets;</a>
-<a name="1003"><span class="lineNum"> 1003 </span> : : __be32 itlb_entries;</a>
-<a name="1004"><span class="lineNum"> 1004 </span> : : __be32 itlb_assoc_sets;</a>
-<a name="1005"><span class="lineNum"> 1005 </span> : : __be32 reservation_size;</a>
-<a name="1006"><span class="lineNum"> 1006 </span> : : __be32 l2_cache_assoc_sets;</a>
-<a name="1007"><span class="lineNum"> 1007 </span> : : __be32 l35_dcache_size_kb;</a>
-<a name="1008"><span class="lineNum"> 1008 </span> : : __be32 l35_cache_line_size;</a>
-<a name="1009"><span class="lineNum"> 1009 </span> : : } __packed;</a>
+<a name="931"><span class="lineNum"> 931 </span> : : /* Idata index 0 : FRU ID Data */</a>
+<a name="932"><span class="lineNum"> 932 </span> : : #define SYSVPD_IDATA_FRU_ID 0</a>
+<a name="933"><span class="lineNum"> 933 </span> : : </a>
+<a name="934"><span class="lineNum"> 934 </span> : : /* Idata index 1 : Keyword VPD */</a>
+<a name="935"><span class="lineNum"> 935 </span> : : #define SYSVPD_IDATA_KW_VPD 1</a>
+<a name="936"><span class="lineNum"> 936 </span> : : </a>
+<a name="937"><span class="lineNum"> 937 </span> : : /* Idata index 2 : Operational status */</a>
+<a name="938"><span class="lineNum"> 938 </span> : : #define SYSVPD_IDATA_OP_STATUS 2</a>
+<a name="939"><span class="lineNum"> 939 </span> : : </a>
+<a name="940"><span class="lineNum"> 940 </span> : : /*</a>
+<a name="941"><span class="lineNum"> 941 </span> : : * FRU keyword VPD structure</a>
+<a name="942"><span class="lineNum"> 942 </span> : : */</a>
+<a name="943"><span class="lineNum"> 943 </span> : : #define FRUVPD_HDIF_SIG &quot;FRUVPD&quot;</a>
+<a name="944"><span class="lineNum"> 944 </span> : : </a>
+<a name="945"><span class="lineNum"> 945 </span> : : /* Idata index 0 : FRU ID Data */</a>
+<a name="946"><span class="lineNum"> 946 </span> : : #define FRUVPD_IDATA_FRU_ID 0</a>
+<a name="947"><span class="lineNum"> 947 </span> : : </a>
+<a name="948"><span class="lineNum"> 948 </span> : : /* Idata index 1 : Keyword VPD */</a>
+<a name="949"><span class="lineNum"> 949 </span> : : #define FRUVPD_IDATA_KW_VPD 1</a>
+<a name="950"><span class="lineNum"> 950 </span> : : </a>
+<a name="951"><span class="lineNum"> 951 </span> : : /* Idata index 2 : Operational status */</a>
+<a name="952"><span class="lineNum"> 952 </span> : : #define FRUVPD_IDATA_OP_STATUS 2</a>
+<a name="953"><span class="lineNum"> 953 </span> : : </a>
+<a name="954"><span class="lineNum"> 954 </span> : : </a>
+<a name="955"><span class="lineNum"> 955 </span> : : /*</a>
+<a name="956"><span class="lineNum"> 956 </span> : : * SPPCIA structure. The SPIRA contain an array of these, one</a>
+<a name="957"><span class="lineNum"> 957 </span> : : * per processor core</a>
+<a name="958"><span class="lineNum"> 958 </span> : : */</a>
+<a name="959"><span class="lineNum"> 959 </span> : : #define SPPCIA_HDIF_SIG &quot;SPPCIA&quot;</a>
+<a name="960"><span class="lineNum"> 960 </span> : : </a>
+<a name="961"><span class="lineNum"> 961 </span> : : /* Idata index 0 : Core unique data */</a>
+<a name="962"><span class="lineNum"> 962 </span> : : #define SPPCIA_IDATA_CORE_UNIQUE 0</a>
+<a name="963"><span class="lineNum"> 963 </span> : : </a>
+<a name="964"><span class="lineNum"> 964 </span> : : struct sppcia_core_unique {</a>
+<a name="965"><span class="lineNum"> 965 </span> : : __be32 reserved;</a>
+<a name="966"><span class="lineNum"> 966 </span> : : __be32 proc_fru_id;</a>
+<a name="967"><span class="lineNum"> 967 </span> : : __be32 hw_proc_id;</a>
+<a name="968"><span class="lineNum"> 968 </span> : : #define CPU_ID_VERIFY_MASK 0xC0000000</a>
+<a name="969"><span class="lineNum"> 969 </span> : : #define CPU_ID_VERIFY_SHIFT 30</a>
+<a name="970"><span class="lineNum"> 970 </span> : : #define CPU_ID_VERIFY_USABLE_NO_FAILURES 0</a>
+<a name="971"><span class="lineNum"> 971 </span> : : #define CPU_ID_VERIFY_USABLE_FAILURES 1</a>
+<a name="972"><span class="lineNum"> 972 </span> : : #define CPU_ID_VERIFY_NOT_INSTALLED 2</a>
+<a name="973"><span class="lineNum"> 973 </span> : : #define CPU_ID_VERIFY_UNUSABLE 3</a>
+<a name="974"><span class="lineNum"> 974 </span> : : #define CPU_ID_SECONDARY_THREAD 0x20000000</a>
+<a name="975"><span class="lineNum"> 975 </span> : : #define CPU_ID_PCIA_RESERVED 0x10000000</a>
+<a name="976"><span class="lineNum"> 976 </span> : : #define CPU_ID_NUM_SECONDARY_THREAD_MASK 0x00FF0000</a>
+<a name="977"><span class="lineNum"> 977 </span> : : #define CPU_ID_NUM_SECONDARY_THREAD_SHIFT 16</a>
+<a name="978"><span class="lineNum"> 978 </span> : : __be32 verif_exist_flags;</a>
+<a name="979"><span class="lineNum"> 979 </span> : : __be32 chip_ec_level;</a>
+<a name="980"><span class="lineNum"> 980 </span> : : __be32 proc_chip_id;</a>
+<a name="981"><span class="lineNum"> 981 </span> : : __be32 reserved2;</a>
+<a name="982"><span class="lineNum"> 982 </span> : : __be32 reserved3;</a>
+<a name="983"><span class="lineNum"> 983 </span> : : __be32 reserved4;</a>
+<a name="984"><span class="lineNum"> 984 </span> : : __be32 hw_module_id;</a>
+<a name="985"><span class="lineNum"> 985 </span> : : __be64 reserved5;</a>
+<a name="986"><span class="lineNum"> 986 </span> : : __be32 reserved6;</a>
+<a name="987"><span class="lineNum"> 987 </span> : : __be32 reserved7;</a>
+<a name="988"><span class="lineNum"> 988 </span> : : __be32 reserved8;</a>
+<a name="989"><span class="lineNum"> 989 </span> : : __be32 ccm_node_id;</a>
+<a name="990"><span class="lineNum"> 990 </span> : : __be32 hw_card_id;</a>
+<a name="991"><span class="lineNum"> 991 </span> : : __be32 internal_drawer_node_id;</a>
+<a name="992"><span class="lineNum"> 992 </span> : : __be32 drawer_book_octant_blade_id;</a>
+<a name="993"><span class="lineNum"> 993 </span> : : __be32 memory_interleaving_scope;</a>
+<a name="994"><span class="lineNum"> 994 </span> : : __be32 lco_target;</a>
+<a name="995"><span class="lineNum"> 995 </span> : : __be32 reserved9;</a>
+<a name="996"><span class="lineNum"> 996 </span> : : } __packed;</a>
+<a name="997"><span class="lineNum"> 997 </span> : : </a>
+<a name="998"><span class="lineNum"> 998 </span> : : /* Idata index 1 : CPU Time base structure */</a>
+<a name="999"><span class="lineNum"> 999 </span> : : #define SPPCIA_IDATA_TIMEBASE 1</a>
+<a name="1000"><span class="lineNum"> 1000 </span> : : </a>
+<a name="1001"><span class="lineNum"> 1001 </span> : : struct sppcia_cpu_timebase {</a>
+<a name="1002"><span class="lineNum"> 1002 </span> : : __be32 cycle_time;</a>
+<a name="1003"><span class="lineNum"> 1003 </span> : : __be32 time_base;</a>
+<a name="1004"><span class="lineNum"> 1004 </span> : : __be32 actual_clock_speed;</a>
+<a name="1005"><span class="lineNum"> 1005 </span> : : __be32 memory_bus_frequency;</a>
+<a name="1006"><span class="lineNum"> 1006 </span> : : } __packed;</a>
+<a name="1007"><span class="lineNum"> 1007 </span> : : </a>
+<a name="1008"><span class="lineNum"> 1008 </span> : : /* Idata index 2 : CPU Cache Size Structure */</a>
+<a name="1009"><span class="lineNum"> 1009 </span> : : #define SPPCIA_IDATA_CPU_CACHE 2</a>
<a name="1010"><span class="lineNum"> 1010 </span> : : </a>
-<a name="1011"><span class="lineNum"> 1011 </span> : : </a>
-<a name="1012"><span class="lineNum"> 1012 </span> : : /* Idata index 3 : Thread Array Data</a>
-<a name="1013"><span class="lineNum"> 1013 </span> : : *</a>
-<a name="1014"><span class="lineNum"> 1014 </span> : : * HDIF array of</a>
-<a name="1015"><span class="lineNum"> 1015 </span> : : */</a>
-<a name="1016"><span class="lineNum"> 1016 </span> : : #define SPPCIA_IDATA_THREAD_ARRAY 3</a>
-<a name="1017"><span class="lineNum"> 1017 </span> : : </a>
-<a name="1018"><span class="lineNum"> 1018 </span> : : struct sppcia_cpu_thread {</a>
-<a name="1019"><span class="lineNum"> 1019 </span> : : __be32 proc_int_line;</a>
-<a name="1020"><span class="lineNum"> 1020 </span> : : __be32 phys_thread_id;</a>
-<a name="1021"><span class="lineNum"> 1021 </span> : : __be64 ibase;</a>
-<a name="1022"><span class="lineNum"> 1022 </span> : : __be32 pir;</a>
-<a name="1023"><span class="lineNum"> 1023 </span> : : } __packed;</a>
-<a name="1024"><span class="lineNum"> 1024 </span> : : </a>
-<a name="1025"><span class="lineNum"> 1025 </span> : : /* Idata index 4 : CPU Attributes */</a>
-<a name="1026"><span class="lineNum"> 1026 </span> : : #define SPPCIA_IDATA_CPU_ATTR 4</a>
-<a name="1027"><span class="lineNum"> 1027 </span> : : </a>
-<a name="1028"><span class="lineNum"> 1028 </span> : : struct sppcia_cpu_attr {</a>
-<a name="1029"><span class="lineNum"> 1029 </span> : : #define CPU_ATTR_UNIFIED_PL1 0x80</a>
-<a name="1030"><span class="lineNum"> 1030 </span> : : #define CPU_ATTR_SPLIT_TLB 0x40</a>
-<a name="1031"><span class="lineNum"> 1031 </span> : : #define CPU_ATTR_TLBIA 0x20</a>
-<a name="1032"><span class="lineNum"> 1032 </span> : : #define CPU_ATTR_PERF_MONITOR 0x10</a>
-<a name="1033"><span class="lineNum"> 1033 </span> : : #define CPU_ATTR_EXTERN_CONT 0x02</a>
-<a name="1034"><span class="lineNum"> 1034 </span> : : __be32 attr;</a>
-<a name="1035"><span class="lineNum"> 1035 </span> : : } __packed;</a>
-<a name="1036"><span class="lineNum"> 1036 </span> : : </a>
-<a name="1037"><span class="lineNum"> 1037 </span> : : /*</a>
-<a name="1038"><span class="lineNum"> 1038 </span> : : * Processor Chip Related Data. The SPIRA contain an array of these, one</a>
-<a name="1039"><span class="lineNum"> 1039 </span> : : * per chip</a>
-<a name="1040"><span class="lineNum"> 1040 </span> : : */</a>
-<a name="1041"><span class="lineNum"> 1041 </span> : : #define SPPCRD_HDIF_SIG &quot;SPPCRD&quot;</a>
-<a name="1042"><span class="lineNum"> 1042 </span> : : </a>
-<a name="1043"><span class="lineNum"> 1043 </span> : : /* Idata index 0 : Chip info */</a>
-<a name="1044"><span class="lineNum"> 1044 </span> : : #define SPPCRD_IDATA_CHIP_INFO 0</a>
-<a name="1045"><span class="lineNum"> 1045 </span> : : </a>
-<a name="1046"><span class="lineNum"> 1046 </span> : : struct sppcrd_chip_info {</a>
-<a name="1047"><span class="lineNum"> 1047 </span> : : __be32 proc_chip_id;</a>
-<a name="1048"><span class="lineNum"> 1048 </span> : : __be32 verif_exist_flags;</a>
-<a name="1049"><span class="lineNum"> 1049 </span> : : #define CHIP_VERIFY_MASK 0xC0000000</a>
-<a name="1050"><span class="lineNum"> 1050 </span> : : #define CHIP_VERIFY_SHIFT 30</a>
-<a name="1051"><span class="lineNum"> 1051 </span> : : #define CHIP_VERIFY_USABLE_NO_FAILURES 0</a>
-<a name="1052"><span class="lineNum"> 1052 </span> : : #define CHIP_VERIFY_USABLE_FAILURES 1</a>
-<a name="1053"><span class="lineNum"> 1053 </span> : : #define CHIP_VERIFY_NOT_INSTALLED 2</a>
-<a name="1054"><span class="lineNum"> 1054 </span> : : #define CHIP_VERIFY_UNUSABLE 3</a>
-<a name="1055"><span class="lineNum"> 1055 </span> : : #define CHIP_VERIFY_MASTER_PROC PPC_BIT32(4)</a>
-<a name="1056"><span class="lineNum"> 1056 </span> : : __be32 nx_state;</a>
-<a name="1057"><span class="lineNum"> 1057 </span> : : __be32 pore_state;</a>
-<a name="1058"><span class="lineNum"> 1058 </span> : : __be32 xscom_id;</a>
-<a name="1059"><span class="lineNum"> 1059 </span> : : /* Version 0xA */</a>
-<a name="1060"><span class="lineNum"> 1060 </span> : : __be32 reserved;</a>
-<a name="1061"><span class="lineNum"> 1061 </span> : : __be32 dbob_id;</a>
-<a name="1062"><span class="lineNum"> 1062 </span> : : __be32 occ_state;</a>
-<a name="1063"><span class="lineNum"> 1063 </span> : : /* Version 0xC - none of these are used */</a>
-<a name="1064"><span class="lineNum"> 1064 </span> : : __be32 processor_fru_id;</a>
-<a name="1065"><span class="lineNum"> 1065 </span> : : __be32 chip_ec_level;</a>
-<a name="1066"><span class="lineNum"> 1066 </span> : : __be32 hw_module_id;</a>
-<a name="1067"><span class="lineNum"> 1067 </span> : : __be32 hw_card_id;</a>
-<a name="1068"><span class="lineNum"> 1068 </span> : : __be32 internal_drawer_nid;</a>
-<a name="1069"><span class="lineNum"> 1069 </span> : : __be32 ccm_nid;</a>
-<a name="1070"><span class="lineNum"> 1070 </span> : : /* Version 0xD */</a>
-<a name="1071"><span class="lineNum"> 1071 </span> : : __be32 capp0_func_state;</a>
-<a name="1072"><span class="lineNum"> 1072 </span> : : /* Version 0xE */</a>
-<a name="1073"><span class="lineNum"> 1073 </span> : : __be32 capp1_func_state;</a>
-<a name="1074"><span class="lineNum"> 1074 </span> : : /* *possibly* from Version 0x20 - check spec */</a>
-<a name="1075"><span class="lineNum"> 1075 </span> : : __be32 stop_levels;</a>
-<a name="1076"><span class="lineNum"> 1076 </span> : : /* From latest version (possibly 0x21 and later) */</a>
-<a name="1077"><span class="lineNum"> 1077 </span> : : __be32 sw_xstop_fir_scom;</a>
-<a name="1078"><span class="lineNum"> 1078 </span> : : uint8_t sw_xstop_fir_bitpos;</a>
-<a name="1079"><span class="lineNum"> 1079 </span> : : uint8_t reserved_1[3];</a>
-<a name="1080"><span class="lineNum"> 1080 </span> : : } __packed;</a>
-<a name="1081"><span class="lineNum"> 1081 </span> : : </a>
-<a name="1082"><span class="lineNum"> 1082 </span> : : /* Idata index 1 : Chip TOD */</a>
-<a name="1083"><span class="lineNum"> 1083 </span> : : #define SPPCRD_IDATA_CHIP_TOD 1</a>
-<a name="1084"><span class="lineNum"> 1084 </span> : : </a>
-<a name="1085"><span class="lineNum"> 1085 </span> : : struct sppcrd_chip_tod {</a>
-<a name="1086"><span class="lineNum"> 1086 </span> : : __be32 flags;</a>
-<a name="1087"><span class="lineNum"> 1087 </span> : : /* CHIPTOD_ID_... values */</a>
-<a name="1088"><span class="lineNum"> 1088 </span> : : __be32 ctrl_reg_internal;</a>
-<a name="1089"><span class="lineNum"> 1089 </span> : : __be32 tod_ctrl_reg;</a>
-<a name="1090"><span class="lineNum"> 1090 </span> : : } __packed;</a>
-<a name="1091"><span class="lineNum"> 1091 </span> : : </a>
-<a name="1092"><span class="lineNum"> 1092 </span> : : /* Idata index 2 : FRU ID */</a>
-<a name="1093"><span class="lineNum"> 1093 </span> : : #define SPPCRD_IDATA_FRU_ID 2</a>
-<a name="1094"><span class="lineNum"> 1094 </span> : : </a>
-<a name="1095"><span class="lineNum"> 1095 </span> : : /* Idata index 3 : ASCII Keyword data */</a>
-<a name="1096"><span class="lineNum"> 1096 </span> : : #define SPPCRD_IDATA_KW_VPD 3</a>
-<a name="1097"><span class="lineNum"> 1097 </span> : : </a>
-<a name="1098"><span class="lineNum"> 1098 </span> : : /* Idata index 4 : Module VPD */</a>
-<a name="1099"><span class="lineNum"> 1099 </span> : : #define SPPCRD_IDATA_MODULE_VPD 4</a>
-<a name="1100"><span class="lineNum"> 1100 </span> : : </a>
-<a name="1101"><span class="lineNum"> 1101 </span> : : /* Idata index 5 : Chip attached I2C devices */</a>
-<a name="1102"><span class="lineNum"> 1102 </span> : : #define SPPCRD_IDATA_HOST_I2C 5</a>
-<a name="1103"><span class="lineNum"> 1103 </span> : : </a>
-<a name="1104"><span class="lineNum"> 1104 </span> : : /* Idata index 5 : Chip attached I2C devices */</a>
-<a name="1105"><span class="lineNum"> 1105 </span> : : #define SPPCRD_IDATA_PNOR 6</a>
-<a name="1106"><span class="lineNum"> 1106 </span> : : </a>
-<a name="1107"><span class="lineNum"> 1107 </span> : : /* Idata index 6 : OpenCAPI/NVlink info */</a>
-<a name="1108"><span class="lineNum"> 1108 </span> : : #define SPPCRD_IDATA_SMP_LINK 7</a>
-<a name="1109"><span class="lineNum"> 1109 </span> : : struct sppcrd_smp_link {</a>
-<a name="1110"><span class="lineNum"> 1110 </span> : : __be32 link_id;</a>
-<a name="1111"><span class="lineNum"> 1111 </span> : : __be32 usage;</a>
-<a name="1112"><span class="lineNum"> 1112 </span> : : #define SMP_LINK_USE_NONE 0</a>
-<a name="1113"><span class="lineNum"> 1113 </span> : : #define SMP_LINK_USE_GPU 1</a>
-<a name="1114"><span class="lineNum"> 1114 </span> : : #define SMP_LINK_USE_OPENCAPI 2</a>
-<a name="1115"><span class="lineNum"> 1115 </span> : : #define SMP_LINK_USE_INTERPOSER 3</a>
-<a name="1116"><span class="lineNum"> 1116 </span> : : #define SMP_LINK_USE_DRAWER 4</a>
-<a name="1117"><span class="lineNum"> 1117 </span> : : #define SMP_LINK_USE_D2D 5 /* GPU to GPU */</a>
-<a name="1118"><span class="lineNum"> 1118 </span> : : __be32 brick_id;</a>
-<a name="1119"><span class="lineNum"> 1119 </span> : : __be32 lane_mask;</a>
+<a name="1011"><span class="lineNum"> 1011 </span> : : struct sppcia_cpu_cache {</a>
+<a name="1012"><span class="lineNum"> 1012 </span> : : __be32 icache_size_kb;</a>
+<a name="1013"><span class="lineNum"> 1013 </span> : : __be32 icache_line_size;</a>
+<a name="1014"><span class="lineNum"> 1014 </span> : : __be32 l1_dcache_size_kb;</a>
+<a name="1015"><span class="lineNum"> 1015 </span> : : __be32 l1_dcache_line_size;</a>
+<a name="1016"><span class="lineNum"> 1016 </span> : : __be32 l2_dcache_size_kb;</a>
+<a name="1017"><span class="lineNum"> 1017 </span> : : __be32 l2_line_size;</a>
+<a name="1018"><span class="lineNum"> 1018 </span> : : __be32 l3_dcache_size_kb;</a>
+<a name="1019"><span class="lineNum"> 1019 </span> : : __be32 l3_line_size;</a>
+<a name="1020"><span class="lineNum"> 1020 </span> : : __be32 dcache_block_size;</a>
+<a name="1021"><span class="lineNum"> 1021 </span> : : __be32 icache_block_size;</a>
+<a name="1022"><span class="lineNum"> 1022 </span> : : __be32 dcache_assoc_sets;</a>
+<a name="1023"><span class="lineNum"> 1023 </span> : : __be32 icache_assoc_sets;</a>
+<a name="1024"><span class="lineNum"> 1024 </span> : : __be32 dtlb_entries;</a>
+<a name="1025"><span class="lineNum"> 1025 </span> : : __be32 dtlb_assoc_sets;</a>
+<a name="1026"><span class="lineNum"> 1026 </span> : : __be32 itlb_entries;</a>
+<a name="1027"><span class="lineNum"> 1027 </span> : : __be32 itlb_assoc_sets;</a>
+<a name="1028"><span class="lineNum"> 1028 </span> : : __be32 reservation_size;</a>
+<a name="1029"><span class="lineNum"> 1029 </span> : : __be32 l2_cache_assoc_sets;</a>
+<a name="1030"><span class="lineNum"> 1030 </span> : : __be32 l35_dcache_size_kb;</a>
+<a name="1031"><span class="lineNum"> 1031 </span> : : __be32 l35_cache_line_size;</a>
+<a name="1032"><span class="lineNum"> 1032 </span> : : } __packed;</a>
+<a name="1033"><span class="lineNum"> 1033 </span> : : </a>
+<a name="1034"><span class="lineNum"> 1034 </span> : : </a>
+<a name="1035"><span class="lineNum"> 1035 </span> : : /* Idata index 3 : Thread Array Data</a>
+<a name="1036"><span class="lineNum"> 1036 </span> : : *</a>
+<a name="1037"><span class="lineNum"> 1037 </span> : : * HDIF array of</a>
+<a name="1038"><span class="lineNum"> 1038 </span> : : */</a>
+<a name="1039"><span class="lineNum"> 1039 </span> : : #define SPPCIA_IDATA_THREAD_ARRAY 3</a>
+<a name="1040"><span class="lineNum"> 1040 </span> : : </a>
+<a name="1041"><span class="lineNum"> 1041 </span> : : struct sppcia_cpu_thread {</a>
+<a name="1042"><span class="lineNum"> 1042 </span> : : __be32 proc_int_line;</a>
+<a name="1043"><span class="lineNum"> 1043 </span> : : __be32 phys_thread_id;</a>
+<a name="1044"><span class="lineNum"> 1044 </span> : : __be64 ibase;</a>
+<a name="1045"><span class="lineNum"> 1045 </span> : : __be32 pir;</a>
+<a name="1046"><span class="lineNum"> 1046 </span> : : } __packed;</a>
+<a name="1047"><span class="lineNum"> 1047 </span> : : </a>
+<a name="1048"><span class="lineNum"> 1048 </span> : : /* Idata index 4 : CPU Attributes */</a>
+<a name="1049"><span class="lineNum"> 1049 </span> : : #define SPPCIA_IDATA_CPU_ATTR 4</a>
+<a name="1050"><span class="lineNum"> 1050 </span> : : </a>
+<a name="1051"><span class="lineNum"> 1051 </span> : : struct sppcia_cpu_attr {</a>
+<a name="1052"><span class="lineNum"> 1052 </span> : : #define CPU_ATTR_UNIFIED_PL1 0x80</a>
+<a name="1053"><span class="lineNum"> 1053 </span> : : #define CPU_ATTR_SPLIT_TLB 0x40</a>
+<a name="1054"><span class="lineNum"> 1054 </span> : : #define CPU_ATTR_TLBIA 0x20</a>
+<a name="1055"><span class="lineNum"> 1055 </span> : : #define CPU_ATTR_PERF_MONITOR 0x10</a>
+<a name="1056"><span class="lineNum"> 1056 </span> : : #define CPU_ATTR_EXTERN_CONT 0x02</a>
+<a name="1057"><span class="lineNum"> 1057 </span> : : __be32 attr;</a>
+<a name="1058"><span class="lineNum"> 1058 </span> : : } __packed;</a>
+<a name="1059"><span class="lineNum"> 1059 </span> : : </a>
+<a name="1060"><span class="lineNum"> 1060 </span> : : /*</a>
+<a name="1061"><span class="lineNum"> 1061 </span> : : * Processor Chip Related Data. The SPIRA contain an array of these, one</a>
+<a name="1062"><span class="lineNum"> 1062 </span> : : * per chip</a>
+<a name="1063"><span class="lineNum"> 1063 </span> : : */</a>
+<a name="1064"><span class="lineNum"> 1064 </span> : : #define SPPCRD_HDIF_SIG &quot;SPPCRD&quot;</a>
+<a name="1065"><span class="lineNum"> 1065 </span> : : </a>
+<a name="1066"><span class="lineNum"> 1066 </span> : : /* Idata index 0 : Chip info */</a>
+<a name="1067"><span class="lineNum"> 1067 </span> : : #define SPPCRD_IDATA_CHIP_INFO 0</a>
+<a name="1068"><span class="lineNum"> 1068 </span> : : </a>
+<a name="1069"><span class="lineNum"> 1069 </span> : : struct sppcrd_chip_info {</a>
+<a name="1070"><span class="lineNum"> 1070 </span> : : __be32 proc_chip_id;</a>
+<a name="1071"><span class="lineNum"> 1071 </span> : : __be32 verif_exist_flags;</a>
+<a name="1072"><span class="lineNum"> 1072 </span> : : #define CHIP_VERIFY_MASK 0xC0000000</a>
+<a name="1073"><span class="lineNum"> 1073 </span> : : #define CHIP_VERIFY_SHIFT 30</a>
+<a name="1074"><span class="lineNum"> 1074 </span> : : #define CHIP_VERIFY_USABLE_NO_FAILURES 0</a>
+<a name="1075"><span class="lineNum"> 1075 </span> : : #define CHIP_VERIFY_USABLE_FAILURES 1</a>
+<a name="1076"><span class="lineNum"> 1076 </span> : : #define CHIP_VERIFY_NOT_INSTALLED 2</a>
+<a name="1077"><span class="lineNum"> 1077 </span> : : #define CHIP_VERIFY_UNUSABLE 3</a>
+<a name="1078"><span class="lineNum"> 1078 </span> : : #define CHIP_VERIFY_MASTER_PROC PPC_BIT32(4)</a>
+<a name="1079"><span class="lineNum"> 1079 </span> : : __be32 nx_state;</a>
+<a name="1080"><span class="lineNum"> 1080 </span> : : __be32 pore_state;</a>
+<a name="1081"><span class="lineNum"> 1081 </span> : : __be32 xscom_id;</a>
+<a name="1082"><span class="lineNum"> 1082 </span> : : /* Version 0xA */</a>
+<a name="1083"><span class="lineNum"> 1083 </span> : : __be32 reserved;</a>
+<a name="1084"><span class="lineNum"> 1084 </span> : : __be32 dbob_id;</a>
+<a name="1085"><span class="lineNum"> 1085 </span> : : __be32 occ_state;</a>
+<a name="1086"><span class="lineNum"> 1086 </span> : : /* Version 0xC - none of these are used */</a>
+<a name="1087"><span class="lineNum"> 1087 </span> : : __be32 processor_fru_id;</a>
+<a name="1088"><span class="lineNum"> 1088 </span> : : __be32 chip_ec_level;</a>
+<a name="1089"><span class="lineNum"> 1089 </span> : : __be32 hw_module_id;</a>
+<a name="1090"><span class="lineNum"> 1090 </span> : : __be32 hw_card_id;</a>
+<a name="1091"><span class="lineNum"> 1091 </span> : : __be32 internal_drawer_nid;</a>
+<a name="1092"><span class="lineNum"> 1092 </span> : : __be32 ccm_nid;</a>
+<a name="1093"><span class="lineNum"> 1093 </span> : : /* Version 0xD */</a>
+<a name="1094"><span class="lineNum"> 1094 </span> : : __be32 capp0_func_state;</a>
+<a name="1095"><span class="lineNum"> 1095 </span> : : /* Version 0xE */</a>
+<a name="1096"><span class="lineNum"> 1096 </span> : : __be32 capp1_func_state;</a>
+<a name="1097"><span class="lineNum"> 1097 </span> : : /* *possibly* from Version 0x20 - check spec */</a>
+<a name="1098"><span class="lineNum"> 1098 </span> : : __be32 stop_levels;</a>
+<a name="1099"><span class="lineNum"> 1099 </span> : : /* From latest version (possibly 0x21 and later) */</a>
+<a name="1100"><span class="lineNum"> 1100 </span> : : __be32 sw_xstop_fir_scom;</a>
+<a name="1101"><span class="lineNum"> 1101 </span> : : uint8_t sw_xstop_fir_bitpos;</a>
+<a name="1102"><span class="lineNum"> 1102 </span> : : /* Latest version for P10 */</a>
+<a name="1103"><span class="lineNum"> 1103 </span> : : #define CHIP_MAX_TOPOLOGY_ENTRIES 32</a>
+<a name="1104"><span class="lineNum"> 1104 </span> : : uint8_t topology_id_table[CHIP_MAX_TOPOLOGY_ENTRIES];</a>
+<a name="1105"><span class="lineNum"> 1105 </span> : : uint8_t primary_topology_loc; /* Index in topology_id_table */</a>
+<a name="1106"><span class="lineNum"> 1106 </span> : : __be32 abc_bus_speed; /* SMP A */</a>
+<a name="1107"><span class="lineNum"> 1107 </span> : : __be32 wxyz_bus_speed; /* SMP X */</a>
+<a name="1108"><span class="lineNum"> 1108 </span> : : uint8_t fab_topology_id;/* topology id associated with the chip. */</a>
+<a name="1109"><span class="lineNum"> 1109 </span> : : } __packed;</a>
+<a name="1110"><span class="lineNum"> 1110 </span> : : </a>
+<a name="1111"><span class="lineNum"> 1111 </span> : : /* Idata index 1 : Chip TOD */</a>
+<a name="1112"><span class="lineNum"> 1112 </span> : : #define SPPCRD_IDATA_CHIP_TOD 1</a>
+<a name="1113"><span class="lineNum"> 1113 </span> : : </a>
+<a name="1114"><span class="lineNum"> 1114 </span> : : struct sppcrd_chip_tod {</a>
+<a name="1115"><span class="lineNum"> 1115 </span> : : __be32 flags;</a>
+<a name="1116"><span class="lineNum"> 1116 </span> : : /* CHIPTOD_ID_... values */</a>
+<a name="1117"><span class="lineNum"> 1117 </span> : : __be32 ctrl_reg_internal;</a>
+<a name="1118"><span class="lineNum"> 1118 </span> : : __be32 tod_ctrl_reg;</a>
+<a name="1119"><span class="lineNum"> 1119 </span> : : } __packed;</a>
<a name="1120"><span class="lineNum"> 1120 </span> : : </a>
-<a name="1121"><span class="lineNum"> 1121 </span> : : /* bonded pci slots (mostly a NVLink thing) */</a>
-<a name="1122"><span class="lineNum"> 1122 </span> : : __be16 pci_slot_idx;</a>
-<a name="1123"><span class="lineNum"> 1123 </span> : : __be16 pci_sideband_slot_idx;</a>
-<a name="1124"><span class="lineNum"> 1124 </span> : : </a>
-<a name="1125"><span class="lineNum"> 1125 </span> : : __be16 slca_idx; /* SLCA index of the *external* port */</a>
-<a name="1126"><span class="lineNum"> 1126 </span> : : __be16 reserved;</a>
-<a name="1127"><span class="lineNum"> 1127 </span> : : </a>
-<a name="1128"><span class="lineNum"> 1128 </span> : : /* nvlink/ocapi detection devices */</a>
-<a name="1129"><span class="lineNum"> 1129 </span> : : __be32 i2c_link_cable;</a>
-<a name="1130"><span class="lineNum"> 1130 </span> : : __be32 i2c_presence;</a>
-<a name="1131"><span class="lineNum"> 1131 </span> : : __be32 i2c_micro;</a>
-<a name="1132"><span class="lineNum"> 1132 </span> : : uint8_t link_speed;</a>
-<a name="1133"><span class="lineNum"> 1133 </span> : : uint8_t occ_flag_bit;</a>
-<a name="1134"><span class="lineNum"> 1134 </span> : : __be16 gpu_slca;</a>
-<a name="1135"><span class="lineNum"> 1135 </span> : : } __packed;</a>
-<a name="1136"><span class="lineNum"> 1136 </span> : : </a>
-<a name="1137"><span class="lineNum"> 1137 </span> : : /* Idata index 8 : chip EC Level array */</a>
-<a name="1138"><span class="lineNum"> 1138 </span> : : #define SPPCRD_IDATA_EC_LEVEL 8</a>
-<a name="1139"><span class="lineNum"> 1139 </span> : : </a>
-<a name="1140"><span class="lineNum"> 1140 </span> : : struct sppcrd_ecid {</a>
-<a name="1141"><span class="lineNum"> 1141 </span> : : __be32 chip_id;</a>
-<a name="1142"><span class="lineNum"> 1142 </span> : : __be32 ec_level;</a>
-<a name="1143"><span class="lineNum"> 1143 </span> : : __be64 low; /* Processor ECID bit 0-63 */</a>
-<a name="1144"><span class="lineNum"> 1144 </span> : : __be64 high; /* Processor ECID bit 64-127 */</a>
-<a name="1145"><span class="lineNum"> 1145 </span> : : } __packed;</a>
-<a name="1146"><span class="lineNum"> 1146 </span> : : </a>
-<a name="1147"><span class="lineNum"> 1147 </span> : : /*</a>
-<a name="1148"><span class="lineNum"> 1148 </span> : : * Host Services Data.</a>
-<a name="1149"><span class="lineNum"> 1149 </span> : : */</a>
-<a name="1150"><span class="lineNum"> 1150 </span> : : #define HSERV_HDIF_SIG &quot;HOSTSR&quot;</a>
-<a name="1151"><span class="lineNum"> 1151 </span> : : </a>
-<a name="1152"><span class="lineNum"> 1152 </span> : : /* Idata index 0 : System attribute data */</a>
-<a name="1153"><span class="lineNum"> 1153 </span> : : #define HSERV_IDATA_SYS_ATTR 0</a>
-<a name="1154"><span class="lineNum"> 1154 </span> : : </a>
-<a name="1155"><span class="lineNum"> 1155 </span> : : /* IPMI sensors mapping data */</a>
-<a name="1156"><span class="lineNum"> 1156 </span> : : #define IPMI_SENSORS_HDIF_SIG &quot;FRUSE &quot;</a>
-<a name="1157"><span class="lineNum"> 1157 </span> : : </a>
-<a name="1158"><span class="lineNum"> 1158 </span> : : /* Idata index 0 : Sensor mapping data */</a>
-<a name="1159"><span class="lineNum"> 1159 </span> : : #define IPMI_SENSORS_IDATA_SENSORS 0</a>
-<a name="1160"><span class="lineNum"> 1160 </span> : : </a>
-<a name="1161"><span class="lineNum"> 1161 </span> : : struct ipmi_sensors_data {</a>
-<a name="1162"><span class="lineNum"> 1162 </span> : : __be32 slca_index;</a>
-<a name="1163"><span class="lineNum"> 1163 </span> : : uint8_t type;</a>
-<a name="1164"><span class="lineNum"> 1164 </span> : : uint8_t id;</a>
-<a name="1165"><span class="lineNum"> 1165 </span> : : uint8_t entity_id;</a>
-<a name="1166"><span class="lineNum"> 1166 </span> : : uint8_t reserved;</a>
-<a name="1167"><span class="lineNum"> 1167 </span> : : } __packed;</a>
+<a name="1121"><span class="lineNum"> 1121 </span> : : /* Idata index 2 : FRU ID */</a>
+<a name="1122"><span class="lineNum"> 1122 </span> : : #define SPPCRD_IDATA_FRU_ID 2</a>
+<a name="1123"><span class="lineNum"> 1123 </span> : : </a>
+<a name="1124"><span class="lineNum"> 1124 </span> : : /* Idata index 3 : ASCII Keyword data */</a>
+<a name="1125"><span class="lineNum"> 1125 </span> : : #define SPPCRD_IDATA_KW_VPD 3</a>
+<a name="1126"><span class="lineNum"> 1126 </span> : : </a>
+<a name="1127"><span class="lineNum"> 1127 </span> : : /* Idata index 4 : Module VPD */</a>
+<a name="1128"><span class="lineNum"> 1128 </span> : : #define SPPCRD_IDATA_MODULE_VPD 4</a>
+<a name="1129"><span class="lineNum"> 1129 </span> : : </a>
+<a name="1130"><span class="lineNum"> 1130 </span> : : /* Idata index 5 : Chip attached I2C devices */</a>
+<a name="1131"><span class="lineNum"> 1131 </span> : : #define SPPCRD_IDATA_HOST_I2C 5</a>
+<a name="1132"><span class="lineNum"> 1132 </span> : : </a>
+<a name="1133"><span class="lineNum"> 1133 </span> : : /* Idata index 5 : Chip attached I2C devices */</a>
+<a name="1134"><span class="lineNum"> 1134 </span> : : #define SPPCRD_IDATA_PNOR 6</a>
+<a name="1135"><span class="lineNum"> 1135 </span> : : </a>
+<a name="1136"><span class="lineNum"> 1136 </span> : : /* Idata index 6 : OpenCAPI/NVlink info */</a>
+<a name="1137"><span class="lineNum"> 1137 </span> : : #define SPPCRD_IDATA_SMP_LINK 7</a>
+<a name="1138"><span class="lineNum"> 1138 </span> : : struct sppcrd_smp_link {</a>
+<a name="1139"><span class="lineNum"> 1139 </span> : : __be32 link_id;</a>
+<a name="1140"><span class="lineNum"> 1140 </span> : : __be32 usage;</a>
+<a name="1141"><span class="lineNum"> 1141 </span> : : #define SMP_LINK_USE_NONE 0</a>
+<a name="1142"><span class="lineNum"> 1142 </span> : : #define SMP_LINK_USE_GPU 1</a>
+<a name="1143"><span class="lineNum"> 1143 </span> : : #define SMP_LINK_USE_OPENCAPI 2</a>
+<a name="1144"><span class="lineNum"> 1144 </span> : : #define SMP_LINK_USE_INTERPOSER 3</a>
+<a name="1145"><span class="lineNum"> 1145 </span> : : #define SMP_LINK_USE_DRAWER 4</a>
+<a name="1146"><span class="lineNum"> 1146 </span> : : #define SMP_LINK_USE_D2D 5 /* GPU to GPU */</a>
+<a name="1147"><span class="lineNum"> 1147 </span> : : __be32 brick_id;</a>
+<a name="1148"><span class="lineNum"> 1148 </span> : : __be32 lane_mask;</a>
+<a name="1149"><span class="lineNum"> 1149 </span> : : </a>
+<a name="1150"><span class="lineNum"> 1150 </span> : : /* bonded pci slots (mostly a NVLink thing) */</a>
+<a name="1151"><span class="lineNum"> 1151 </span> : : __be16 pci_slot_idx;</a>
+<a name="1152"><span class="lineNum"> 1152 </span> : : __be16 pci_sideband_slot_idx;</a>
+<a name="1153"><span class="lineNum"> 1153 </span> : : </a>
+<a name="1154"><span class="lineNum"> 1154 </span> : : __be16 slca_idx; /* SLCA index of the *external* port */</a>
+<a name="1155"><span class="lineNum"> 1155 </span> : : __be16 opt_id;</a>
+<a name="1156"><span class="lineNum"> 1156 </span> : : </a>
+<a name="1157"><span class="lineNum"> 1157 </span> : : /* nvlink/ocapi detection devices */</a>
+<a name="1158"><span class="lineNum"> 1158 </span> : : __be32 i2c_link_cable;</a>
+<a name="1159"><span class="lineNum"> 1159 </span> : : __be32 i2c_presence;</a>
+<a name="1160"><span class="lineNum"> 1160 </span> : : __be32 i2c_micro;</a>
+<a name="1161"><span class="lineNum"> 1161 </span> : : uint8_t link_speed;</a>
+<a name="1162"><span class="lineNum"> 1162 </span> : : uint8_t occ_flag_bit;</a>
+<a name="1163"><span class="lineNum"> 1163 </span> : : __be16 gpu_slca;</a>
+<a name="1164"><span class="lineNum"> 1164 </span> : : } __packed;</a>
+<a name="1165"><span class="lineNum"> 1165 </span> : : </a>
+<a name="1166"><span class="lineNum"> 1166 </span> : : /* Idata index 8 : chip EC Level array */</a>
+<a name="1167"><span class="lineNum"> 1167 </span> : : #define SPPCRD_IDATA_EC_LEVEL 8</a>
<a name="1168"><span class="lineNum"> 1168 </span> : : </a>
-<a name="1169"><span class="lineNum"> 1169 </span> : : struct ipmi_sensors {</a>
-<a name="1170"><span class="lineNum"> 1170 </span> : : __be32 count;</a>
-<a name="1171"><span class="lineNum"> 1171 </span> : : struct ipmi_sensors_data data[];</a>
-<a name="1172"><span class="lineNum"> 1172 </span> : : } __packed;</a>
-<a name="1173"><span class="lineNum"> 1173 </span> : : </a>
-<a name="1174"><span class="lineNum"> 1174 </span> : : /* Idata index 1 : LED - sensors ID mapping data */</a>
-<a name="1175"><span class="lineNum"> 1175 </span> : : #define IPMI_SENSORS_IDATA_LED 1</a>
-<a name="1176"><span class="lineNum"> 1176 </span> : : </a>
-<a name="1177"><span class="lineNum"> 1177 </span> : : /*</a>
-<a name="1178"><span class="lineNum"> 1178 </span> : : * Node Secure and Trusted Boot Related Data</a>
-<a name="1179"><span class="lineNum"> 1179 </span> : : */</a>
-<a name="1180"><span class="lineNum"> 1180 </span> : : #define STB_HDIF_SIG &quot;TPMREL&quot;</a>
-<a name="1181"><span class="lineNum"> 1181 </span> : : </a>
-<a name="1182"><span class="lineNum"> 1182 </span> : : /*</a>
-<a name="1183"><span class="lineNum"> 1183 </span> : : * Idata index 0 : Secure Boot and TPM Instance Info</a>
-<a name="1184"><span class="lineNum"> 1184 </span> : : *</a>
-<a name="1185"><span class="lineNum"> 1185 </span> : : * There can be multiple entries with each entry corresponding to</a>
-<a name="1186"><span class="lineNum"> 1186 </span> : : * a master processor that has a TPM device</a>
-<a name="1187"><span class="lineNum"> 1187 </span> : : */</a>
-<a name="1188"><span class="lineNum"> 1188 </span> : : #define TPMREL_IDATA_SECUREBOOT_TPM_INFO 0</a>
+<a name="1169"><span class="lineNum"> 1169 </span> : : struct sppcrd_ecid {</a>
+<a name="1170"><span class="lineNum"> 1170 </span> : : __be32 chip_id;</a>
+<a name="1171"><span class="lineNum"> 1171 </span> : : __be32 ec_level;</a>
+<a name="1172"><span class="lineNum"> 1172 </span> : : __be64 low; /* Processor ECID bit 0-63 */</a>
+<a name="1173"><span class="lineNum"> 1173 </span> : : __be64 high; /* Processor ECID bit 64-127 */</a>
+<a name="1174"><span class="lineNum"> 1174 </span> : : } __packed;</a>
+<a name="1175"><span class="lineNum"> 1175 </span> : : </a>
+<a name="1176"><span class="lineNum"> 1176 </span> : : /*</a>
+<a name="1177"><span class="lineNum"> 1177 </span> : : * Host Services Data.</a>
+<a name="1178"><span class="lineNum"> 1178 </span> : : */</a>
+<a name="1179"><span class="lineNum"> 1179 </span> : : #define HSERV_HDIF_SIG &quot;HOSTSR&quot;</a>
+<a name="1180"><span class="lineNum"> 1180 </span> : : </a>
+<a name="1181"><span class="lineNum"> 1181 </span> : : /* Idata index 0 : System attribute data */</a>
+<a name="1182"><span class="lineNum"> 1182 </span> : : #define HSERV_IDATA_SYS_ATTR 0</a>
+<a name="1183"><span class="lineNum"> 1183 </span> : : </a>
+<a name="1184"><span class="lineNum"> 1184 </span> : : /* IPMI sensors mapping data */</a>
+<a name="1185"><span class="lineNum"> 1185 </span> : : #define IPMI_SENSORS_HDIF_SIG &quot;FRUSE &quot;</a>
+<a name="1186"><span class="lineNum"> 1186 </span> : : </a>
+<a name="1187"><span class="lineNum"> 1187 </span> : : /* Idata index 0 : Sensor mapping data */</a>
+<a name="1188"><span class="lineNum"> 1188 </span> : : #define IPMI_SENSORS_IDATA_SENSORS 0</a>
<a name="1189"><span class="lineNum"> 1189 </span> : : </a>
-<a name="1190"><span class="lineNum"> 1190 </span> : : struct secureboot_tpm_info {</a>
-<a name="1191"><span class="lineNum"> 1191 </span> : : __be32 chip_id;</a>
-<a name="1192"><span class="lineNum"> 1192 </span> : : __be32 dbob_id;</a>
-<a name="1193"><span class="lineNum"> 1193 </span> : : uint8_t locality1;</a>
-<a name="1194"><span class="lineNum"> 1194 </span> : : uint8_t locality2;</a>
-<a name="1195"><span class="lineNum"> 1195 </span> : : uint8_t locality3;</a>
-<a name="1196"><span class="lineNum"> 1196 </span> : : uint8_t locality4;</a>
-<a name="1197"><span class="lineNum"> 1197 </span> : : #define TPM_PRESENT_AND_FUNCTIONAL 0x01</a>
-<a name="1198"><span class="lineNum"> 1198 </span> : : #define TPM_PRESENT_AND_NOT_FUNCTIONAL 0x02</a>
-<a name="1199"><span class="lineNum"> 1199 </span> : : #define TPM_NOT_PRESENT 0x03</a>
-<a name="1200"><span class="lineNum"> 1200 </span> : : uint8_t tpm_status;</a>
-<a name="1201"><span class="lineNum"> 1201 </span> : : uint8_t reserved[3];</a>
-<a name="1202"><span class="lineNum"> 1202 </span> : : /* zero indicates no tpm log data */</a>
-<a name="1203"><span class="lineNum"> 1203 </span> : : __be32 srtm_log_offset;</a>
-<a name="1204"><span class="lineNum"> 1204 </span> : : __be32 srtm_log_size;</a>
-<a name="1205"><span class="lineNum"> 1205 </span> : : /* zero indicates no tpm log data */</a>
-<a name="1206"><span class="lineNum"> 1206 </span> : : __be32 drtm_log_offset;</a>
-<a name="1207"><span class="lineNum"> 1207 </span> : : __be32 drtm_log_size;</a>
-<a name="1208"><span class="lineNum"> 1208 </span> : : } __packed;</a>
-<a name="1209"><span class="lineNum"> 1209 </span> : : </a>
-<a name="1210"><span class="lineNum"> 1210 </span> : : /* Idata index 2: Hash and Verification Function Offsets Array */</a>
-<a name="1211"><span class="lineNum"> 1211 </span> : : #define TPMREL_IDATA_HASH_VERIF_OFFSETS 2</a>
-<a name="1212"><span class="lineNum"> 1212 </span> : : </a>
-<a name="1213"><span class="lineNum"> 1213 </span> : : struct hash_and_verification {</a>
-<a name="1214"><span class="lineNum"> 1214 </span> : : #define TPMREL_HV_SHA512 0x00</a>
-<a name="1215"><span class="lineNum"> 1215 </span> : : #define TPMREL_HV_VERIFY 0x01</a>
-<a name="1216"><span class="lineNum"> 1216 </span> : : __be32 type;</a>
-<a name="1217"><span class="lineNum"> 1217 </span> : : __be32 version;</a>
-<a name="1218"><span class="lineNum"> 1218 </span> : : __be32 dbob_id;</a>
-<a name="1219"><span class="lineNum"> 1219 </span> : : __be32 offset;</a>
-<a name="1220"><span class="lineNum"> 1220 </span> : : } __packed;</a>
-<a name="1221"><span class="lineNum"> 1221 </span> : : </a>
-<a name="1222"><span class="lineNum"> 1222 </span> :<span class="lineCov"> 26 : static inline const char *cpu_state(u32 flags)</span></a>
-<a name="1223"><span class="lineNum"> 1223 </span> : : {</a>
-<a name="1224"><span class="lineNum"> 1224 </span> :<span class="lineCov"> 26 : switch ((flags &amp; CPU_ID_VERIFY_MASK) &gt;&gt; CPU_ID_VERIFY_SHIFT) {</span></a>
-<a name="1225"><span class="lineNum"> 1225 </span> :<span class="lineCov"> 26 : case CPU_ID_VERIFY_USABLE_NO_FAILURES:</span></a>
-<a name="1226"><span class="lineNum"> 1226 </span> :<span class="lineCov"> 26 : return &quot;OK&quot;;</span></a>
-<a name="1227"><span class="lineNum"> 1227 </span> :<span class="lineNoCov"> 0 : case CPU_ID_VERIFY_USABLE_FAILURES:</span></a>
-<a name="1228"><span class="lineNum"> 1228 </span> :<span class="lineNoCov"> 0 : return &quot;FAILURES&quot;;</span></a>
-<a name="1229"><span class="lineNum"> 1229 </span> :<span class="lineNoCov"> 0 : case CPU_ID_VERIFY_NOT_INSTALLED:</span></a>
-<a name="1230"><span class="lineNum"> 1230 </span> :<span class="lineNoCov"> 0 : return &quot;NOT-INSTALLED&quot;;</span></a>
-<a name="1231"><span class="lineNum"> 1231 </span> :<span class="lineNoCov"> 0 : case CPU_ID_VERIFY_UNUSABLE:</span></a>
-<a name="1232"><span class="lineNum"> 1232 </span> :<span class="lineNoCov"> 0 : return &quot;UNUSABLE&quot;;</span></a>
-<a name="1233"><span class="lineNum"> 1233 </span> : : }</a>
-<a name="1234"><span class="lineNum"> 1234 </span> :<span class="lineNoCov"> 0 : return &quot;**UNKNOWN**&quot;;</span></a>
-<a name="1235"><span class="lineNum"> 1235 </span> : : }</a>
-<a name="1236"><span class="lineNum"> 1236 </span> : : #endif /* __SPIRA_H */</a>
+<a name="1190"><span class="lineNum"> 1190 </span> : : struct ipmi_sensors_data {</a>
+<a name="1191"><span class="lineNum"> 1191 </span> : : __be32 slca_index;</a>
+<a name="1192"><span class="lineNum"> 1192 </span> : : uint8_t type;</a>
+<a name="1193"><span class="lineNum"> 1193 </span> : : uint8_t id;</a>
+<a name="1194"><span class="lineNum"> 1194 </span> : : uint8_t entity_id;</a>
+<a name="1195"><span class="lineNum"> 1195 </span> : : uint8_t reserved;</a>
+<a name="1196"><span class="lineNum"> 1196 </span> : : } __packed;</a>
+<a name="1197"><span class="lineNum"> 1197 </span> : : </a>
+<a name="1198"><span class="lineNum"> 1198 </span> : : struct ipmi_sensors {</a>
+<a name="1199"><span class="lineNum"> 1199 </span> : : __be32 count;</a>
+<a name="1200"><span class="lineNum"> 1200 </span> : : struct ipmi_sensors_data data[];</a>
+<a name="1201"><span class="lineNum"> 1201 </span> : : } __packed;</a>
+<a name="1202"><span class="lineNum"> 1202 </span> : : </a>
+<a name="1203"><span class="lineNum"> 1203 </span> : : /* Idata index 1 : LED - sensors ID mapping data */</a>
+<a name="1204"><span class="lineNum"> 1204 </span> : : #define IPMI_SENSORS_IDATA_LED 1</a>
+<a name="1205"><span class="lineNum"> 1205 </span> : : </a>
+<a name="1206"><span class="lineNum"> 1206 </span> : : /*</a>
+<a name="1207"><span class="lineNum"> 1207 </span> : : * Node Secure and Trusted Boot Related Data</a>
+<a name="1208"><span class="lineNum"> 1208 </span> : : */</a>
+<a name="1209"><span class="lineNum"> 1209 </span> : : #define STB_HDIF_SIG &quot;TPMREL&quot;</a>
+<a name="1210"><span class="lineNum"> 1210 </span> : : </a>
+<a name="1211"><span class="lineNum"> 1211 </span> : : /*</a>
+<a name="1212"><span class="lineNum"> 1212 </span> : : * Idata index 0 : Secure Boot and TPM Instance Info</a>
+<a name="1213"><span class="lineNum"> 1213 </span> : : *</a>
+<a name="1214"><span class="lineNum"> 1214 </span> : : * There can be multiple entries with each entry corresponding to</a>
+<a name="1215"><span class="lineNum"> 1215 </span> : : * a master processor that has a TPM device</a>
+<a name="1216"><span class="lineNum"> 1216 </span> : : */</a>
+<a name="1217"><span class="lineNum"> 1217 </span> : : #define TPMREL_IDATA_SECUREBOOT_TPM_INFO 0</a>
+<a name="1218"><span class="lineNum"> 1218 </span> : : </a>
+<a name="1219"><span class="lineNum"> 1219 </span> : : struct secureboot_tpm_info {</a>
+<a name="1220"><span class="lineNum"> 1220 </span> : : __be32 chip_id;</a>
+<a name="1221"><span class="lineNum"> 1221 </span> : : __be32 dbob_id;</a>
+<a name="1222"><span class="lineNum"> 1222 </span> : : uint8_t locality1;</a>
+<a name="1223"><span class="lineNum"> 1223 </span> : : uint8_t locality2;</a>
+<a name="1224"><span class="lineNum"> 1224 </span> : : uint8_t locality3;</a>
+<a name="1225"><span class="lineNum"> 1225 </span> : : uint8_t locality4;</a>
+<a name="1226"><span class="lineNum"> 1226 </span> : : #define TPM_PRESENT_AND_FUNCTIONAL 0x01</a>
+<a name="1227"><span class="lineNum"> 1227 </span> : : #define TPM_PRESENT_AND_NOT_FUNCTIONAL 0x02</a>
+<a name="1228"><span class="lineNum"> 1228 </span> : : #define TPM_NOT_PRESENT 0x03</a>
+<a name="1229"><span class="lineNum"> 1229 </span> : : uint8_t tpm_status;</a>
+<a name="1230"><span class="lineNum"> 1230 </span> : : uint8_t reserved[3];</a>
+<a name="1231"><span class="lineNum"> 1231 </span> : : /* zero indicates no tpm log data */</a>
+<a name="1232"><span class="lineNum"> 1232 </span> : : __be32 srtm_log_offset;</a>
+<a name="1233"><span class="lineNum"> 1233 </span> : : __be32 srtm_log_size;</a>
+<a name="1234"><span class="lineNum"> 1234 </span> : : /* zero indicates no tpm log data */</a>
+<a name="1235"><span class="lineNum"> 1235 </span> : : __be32 drtm_log_offset;</a>
+<a name="1236"><span class="lineNum"> 1236 </span> : : __be32 drtm_log_size;</a>
+<a name="1237"><span class="lineNum"> 1237 </span> : : } __packed;</a>
+<a name="1238"><span class="lineNum"> 1238 </span> : : </a>
+<a name="1239"><span class="lineNum"> 1239 </span> : : /* Idata index 2: Hash and Verification Function Offsets Array */</a>
+<a name="1240"><span class="lineNum"> 1240 </span> : : #define TPMREL_IDATA_HASH_VERIF_OFFSETS 2</a>
+<a name="1241"><span class="lineNum"> 1241 </span> : : </a>
+<a name="1242"><span class="lineNum"> 1242 </span> : : struct hash_and_verification {</a>
+<a name="1243"><span class="lineNum"> 1243 </span> : : #define TPMREL_HV_SHA512 0x00</a>
+<a name="1244"><span class="lineNum"> 1244 </span> : : #define TPMREL_HV_VERIFY 0x01</a>
+<a name="1245"><span class="lineNum"> 1245 </span> : : __be32 type;</a>
+<a name="1246"><span class="lineNum"> 1246 </span> : : __be32 version;</a>
+<a name="1247"><span class="lineNum"> 1247 </span> : : __be32 dbob_id;</a>
+<a name="1248"><span class="lineNum"> 1248 </span> : : __be32 offset;</a>
+<a name="1249"><span class="lineNum"> 1249 </span> : : } __packed;</a>
+<a name="1250"><span class="lineNum"> 1250 </span> : : </a>
+<a name="1251"><span class="lineNum"> 1251 </span> :<span class="lineCov"> 26 : static inline const char *cpu_state(u32 flags)</span></a>
+<a name="1252"><span class="lineNum"> 1252 </span> : : {</a>
+<a name="1253"><span class="lineNum"> 1253 </span> :<span class="lineCov"> 26 : switch ((flags &amp; CPU_ID_VERIFY_MASK) &gt;&gt; CPU_ID_VERIFY_SHIFT) {</span></a>
+<a name="1254"><span class="lineNum"> 1254 </span> :<span class="lineCov"> 26 : case CPU_ID_VERIFY_USABLE_NO_FAILURES:</span></a>
+<a name="1255"><span class="lineNum"> 1255 </span> :<span class="lineCov"> 26 : return &quot;OK&quot;;</span></a>
+<a name="1256"><span class="lineNum"> 1256 </span> :<span class="lineNoCov"> 0 : case CPU_ID_VERIFY_USABLE_FAILURES:</span></a>
+<a name="1257"><span class="lineNum"> 1257 </span> :<span class="lineNoCov"> 0 : return &quot;FAILURES&quot;;</span></a>
+<a name="1258"><span class="lineNum"> 1258 </span> :<span class="lineNoCov"> 0 : case CPU_ID_VERIFY_NOT_INSTALLED:</span></a>
+<a name="1259"><span class="lineNum"> 1259 </span> :<span class="lineNoCov"> 0 : return &quot;NOT-INSTALLED&quot;;</span></a>
+<a name="1260"><span class="lineNum"> 1260 </span> :<span class="lineNoCov"> 0 : case CPU_ID_VERIFY_UNUSABLE:</span></a>
+<a name="1261"><span class="lineNum"> 1261 </span> :<span class="lineNoCov"> 0 : return &quot;UNUSABLE&quot;;</span></a>
+<a name="1262"><span class="lineNum"> 1262 </span> : : }</a>
+<a name="1263"><span class="lineNum"> 1263 </span> :<span class="lineNoCov"> 0 : return &quot;**UNKNOWN**&quot;;</span></a>
+<a name="1264"><span class="lineNum"> 1264 </span> : : }</a>
+<a name="1265"><span class="lineNum"> 1265 </span> : : #endif /* __SPIRA_H */</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/hdata/test/hdata_to_dt.c.func-sort-c.html b/coverage-report/hdata/test/hdata_to_dt.c.func-sort-c.html
index 6ceeb29..5d272e2 100644
--- a/coverage-report/hdata/test/hdata_to_dt.c.func-sort-c.html
+++ b/coverage-report/hdata/test/hdata_to_dt.c.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">104</td>
- <td class="headerCovTableEntry">163</td>
- <td class="headerCovTableEntryLo">63.8 %</td>
+ <td class="headerCovTableEntry">105</td>
+ <td class="headerCovTableEntry">168</td>
+ <td class="headerCovTableEntryLo">62.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
@@ -69,23 +69,23 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#109">add_ics_node</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#111">add_ics_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#90">cpu_queue_job</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#92">cpu_queue_job</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#167">fsp_present</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#169">fsp_present</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#115">is_power9n</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#117">is_power9n</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#172">op_display</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#174">op_display</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
@@ -93,35 +93,35 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#264">dump_hdata_fdt</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#266">dump_hdata_fdt</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#295">main</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#297">main</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#213">undefined_bytes</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#215">undefined_bytes</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#218">hash_prop</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#220">hash_prop</a></td>
<td class="coverFnHi">8</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#103">mfspr</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#105">mfspr</a></td>
<td class="coverFnHi">40</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#234">squash_blobs</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#236">squash_blobs</a></td>
<td class="coverFnHi">236</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#196">ntuple_addr</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#198">ntuple_addr</a></td>
<td class="coverFnHi">638</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#185">spira_check_ptr</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#187">spira_check_ptr</a></td>
<td class="coverFnHi">1007</td>
</tr>
</table>
diff --git a/coverage-report/hdata/test/hdata_to_dt.c.func.html b/coverage-report/hdata/test/hdata_to_dt.c.func.html
index 50fa7f2..766bc15 100644
--- a/coverage-report/hdata/test/hdata_to_dt.c.func.html
+++ b/coverage-report/hdata/test/hdata_to_dt.c.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">104</td>
- <td class="headerCovTableEntry">163</td>
- <td class="headerCovTableEntryLo">63.8 %</td>
+ <td class="headerCovTableEntry">105</td>
+ <td class="headerCovTableEntry">168</td>
+ <td class="headerCovTableEntryLo">62.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
@@ -69,51 +69,51 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="hdata_to_dt.c.func-sort-c.html"><img src="../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#109">add_ics_node</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#111">add_ics_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#90">cpu_queue_job</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#92">cpu_queue_job</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#264">dump_hdata_fdt</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#266">dump_hdata_fdt</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#167">fsp_present</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#169">fsp_present</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#218">hash_prop</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#220">hash_prop</a></td>
<td class="coverFnHi">8</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#115">is_power9n</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#117">is_power9n</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#295">main</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#297">main</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#103">mfspr</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#105">mfspr</a></td>
<td class="coverFnHi">40</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#196">ntuple_addr</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#198">ntuple_addr</a></td>
<td class="coverFnHi">638</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#172">op_display</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#174">op_display</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#185">spira_check_ptr</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#187">spira_check_ptr</a></td>
<td class="coverFnHi">1007</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#234">squash_blobs</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#236">squash_blobs</a></td>
<td class="coverFnHi">236</td>
</tr>
<tr>
@@ -121,7 +121,7 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#213">undefined_bytes</a></td>
+ <td class="coverFn"><a href="hdata_to_dt.c.gcov.html#215">undefined_bytes</a></td>
<td class="coverFnHi">2</td>
</tr>
</table>
diff --git a/coverage-report/hdata/test/hdata_to_dt.c.gcov.html b/coverage-report/hdata/test/hdata_to_dt.c.gcov.html
index ab49816..75b14bd 100644
--- a/coverage-report/hdata/test/hdata_to_dt.c.gcov.html
+++ b/coverage-report/hdata/test/hdata_to_dt.c.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">104</td>
- <td class="headerCovTableEntry">163</td>
- <td class="headerCovTableEntryLo">63.8 %</td>
+ <td class="headerCovTableEntry">105</td>
+ <td class="headerCovTableEntry">168</td>
+ <td class="headerCovTableEntryLo">62.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
@@ -73,7 +73,7 @@
<a name="2"><span class="lineNum"> 2 </span> : : /*</a>
<a name="3"><span class="lineNum"> 3 </span> : : * Given a hdata dump, output the device tree.</a>
<a name="4"><span class="lineNum"> 4 </span> : : *</a>
-<a name="5"><span class="lineNum"> 5 </span> : : * Copyright 2013-2019 IBM Corp.</a>
+<a name="5"><span class="lineNum"> 5 </span> : : * Copyright 2013-2020 IBM Corp.</a>
<a name="6"><span class="lineNum"> 6 </span> : : */</a>
<a name="7"><span class="lineNum"> 7 </span> : : </a>
<a name="8"><span class="lineNum"> 8 </span> : : #include &lt;sys/types.h&gt;</a>
@@ -134,376 +134,386 @@
<a name="63"><span class="lineNum"> 63 </span> : : #define PVR_TYPE_P8NVL 0x004c</a>
<a name="64"><span class="lineNum"> 64 </span> : : #define PVR_TYPE_P9 0x004e</a>
<a name="65"><span class="lineNum"> 65 </span> : : #define PVR_TYPE_P9P 0x004f</a>
-<a name="66"><span class="lineNum"> 66 </span> : : #define PVR_P8E 0x004b0201</a>
-<a name="67"><span class="lineNum"> 67 </span> : : #define PVR_P8 0x004d0200</a>
-<a name="68"><span class="lineNum"> 68 </span> : : #define PVR_P8NVL 0x004c0100</a>
-<a name="69"><span class="lineNum"> 69 </span> : : #define PVR_P9 0x004e0200</a>
-<a name="70"><span class="lineNum"> 70 </span> : : #define PVR_P9P 0x004f0100</a>
-<a name="71"><span class="lineNum"> 71 </span> : : </a>
-<a name="72"><span class="lineNum"> 72 </span> : : #define SPR_PVR 0x11f /* RO: Processor version register */</a>
+<a name="66"><span class="lineNum"> 66 </span> : : #define PVR_TYPE_P10 0x0080</a>
+<a name="67"><span class="lineNum"> 67 </span> : : #define PVR_P8E 0x004b0201</a>
+<a name="68"><span class="lineNum"> 68 </span> : : #define PVR_P8 0x004d0200</a>
+<a name="69"><span class="lineNum"> 69 </span> : : #define PVR_P8NVL 0x004c0100</a>
+<a name="70"><span class="lineNum"> 70 </span> : : #define PVR_P9 0x004e0200</a>
+<a name="71"><span class="lineNum"> 71 </span> : : #define PVR_P9P 0x004f0100</a>
+<a name="72"><span class="lineNum"> 72 </span> : : #define PVR_P10 0x00800100</a>
<a name="73"><span class="lineNum"> 73 </span> : : </a>
-<a name="74"><span class="lineNum"> 74 </span> : : #define MSR_SF 0x8000000000000000ULL</a>
-<a name="75"><span class="lineNum"> 75 </span> : : #define MSR_HV 0x1000000000000000ULL</a>
-<a name="76"><span class="lineNum"> 76 </span> : : </a>
-<a name="77"><span class="lineNum"> 77 </span> : : #define __CPU_H</a>
-<a name="78"><span class="lineNum"> 78 </span> : : struct cpu_thread {</a>
-<a name="79"><span class="lineNum"> 79 </span> : : uint32_t pir;</a>
-<a name="80"><span class="lineNum"> 80 </span> : : uint32_t chip_id;</a>
-<a name="81"><span class="lineNum"> 81 </span> : : bool is_fused_core;</a>
-<a name="82"><span class="lineNum"> 82 </span> : : };</a>
-<a name="83"><span class="lineNum"> 83 </span> : : struct cpu_job *__cpu_queue_job(struct cpu_thread *cpu,</a>
-<a name="84"><span class="lineNum"> 84 </span> : : const char *name,</a>
-<a name="85"><span class="lineNum"> 85 </span> : : void (*func)(void *data), void *data,</a>
-<a name="86"><span class="lineNum"> 86 </span> : : bool no_return);</a>
-<a name="87"><span class="lineNum"> 87 </span> : : void cpu_wait_job(struct cpu_job *job, bool free_it);</a>
-<a name="88"><span class="lineNum"> 88 </span> : : void cpu_process_local_jobs(void);</a>
-<a name="89"><span class="lineNum"> 89 </span> : : struct cpu_job *cpu_queue_job_on_node(uint32_t chip_id,</a>
-<a name="90"><span class="lineNum"> 90 </span> : : const char *name,</a>
-<a name="91"><span class="lineNum"> 91 </span> : : void (*func)(void *data), void *data);</a>
-<a name="92"><span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : static inline struct cpu_job *cpu_queue_job(struct cpu_thread *cpu,</span></a>
-<a name="93"><span class="lineNum"> 93 </span> : : const char *name,</a>
-<a name="94"><span class="lineNum"> 94 </span> : : void (*func)(void *data),</a>
-<a name="95"><span class="lineNum"> 95 </span> : : void *data)</a>
-<a name="96"><span class="lineNum"> 96 </span> : : {</a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : return __cpu_queue_job(cpu, name, func, data, false);</span></a>
-<a name="98"><span class="lineNum"> 98 </span> : : }</a>
-<a name="99"><span class="lineNum"> 99 </span> : : </a>
-<a name="100"><span class="lineNum"> 100 </span> : : struct cpu_thread __boot_cpu, *boot_cpu = &amp;__boot_cpu;</a>
-<a name="101"><span class="lineNum"> 101 </span> : : static unsigned long fake_pvr = PVR_P8;</a>
-<a name="102"><span class="lineNum"> 102 </span> : : </a>
-<a name="103"><span class="lineNum"> 103 </span> : : unsigned int cpu_thread_count = 8;</a>
+<a name="74"><span class="lineNum"> 74 </span> : : #define SPR_PVR 0x11f /* RO: Processor version register */</a>
+<a name="75"><span class="lineNum"> 75 </span> : : </a>
+<a name="76"><span class="lineNum"> 76 </span> : : #define MSR_SF 0x8000000000000000ULL</a>
+<a name="77"><span class="lineNum"> 77 </span> : : #define MSR_HV 0x1000000000000000ULL</a>
+<a name="78"><span class="lineNum"> 78 </span> : : </a>
+<a name="79"><span class="lineNum"> 79 </span> : : #define __CPU_H</a>
+<a name="80"><span class="lineNum"> 80 </span> : : struct cpu_thread {</a>
+<a name="81"><span class="lineNum"> 81 </span> : : uint32_t pir;</a>
+<a name="82"><span class="lineNum"> 82 </span> : : uint32_t chip_id;</a>
+<a name="83"><span class="lineNum"> 83 </span> : : bool is_fused_core;</a>
+<a name="84"><span class="lineNum"> 84 </span> : : };</a>
+<a name="85"><span class="lineNum"> 85 </span> : : struct cpu_job *__cpu_queue_job(struct cpu_thread *cpu,</a>
+<a name="86"><span class="lineNum"> 86 </span> : : const char *name,</a>
+<a name="87"><span class="lineNum"> 87 </span> : : void (*func)(void *data), void *data,</a>
+<a name="88"><span class="lineNum"> 88 </span> : : bool no_return);</a>
+<a name="89"><span class="lineNum"> 89 </span> : : void cpu_wait_job(struct cpu_job *job, bool free_it);</a>
+<a name="90"><span class="lineNum"> 90 </span> : : void cpu_process_local_jobs(void);</a>
+<a name="91"><span class="lineNum"> 91 </span> : : struct cpu_job *cpu_queue_job_on_node(uint32_t chip_id,</a>
+<a name="92"><span class="lineNum"> 92 </span> : : const char *name,</a>
+<a name="93"><span class="lineNum"> 93 </span> : : void (*func)(void *data), void *data);</a>
+<a name="94"><span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : static inline struct cpu_job *cpu_queue_job(struct cpu_thread *cpu,</span></a>
+<a name="95"><span class="lineNum"> 95 </span> : : const char *name,</a>
+<a name="96"><span class="lineNum"> 96 </span> : : void (*func)(void *data),</a>
+<a name="97"><span class="lineNum"> 97 </span> : : void *data)</a>
+<a name="98"><span class="lineNum"> 98 </span> : : {</a>
+<a name="99"><span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : return __cpu_queue_job(cpu, name, func, data, false);</span></a>
+<a name="100"><span class="lineNum"> 100 </span> : : }</a>
+<a name="101"><span class="lineNum"> 101 </span> : : </a>
+<a name="102"><span class="lineNum"> 102 </span> : : struct cpu_thread __boot_cpu, *boot_cpu = &amp;__boot_cpu;</a>
+<a name="103"><span class="lineNum"> 103 </span> : : static unsigned long fake_pvr = PVR_P8;</a>
<a name="104"><span class="lineNum"> 104 </span> : : </a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 40 : static inline unsigned long mfspr(unsigned int spr)</span></a>
-<a name="106"><span class="lineNum"> 106 </span> : : {</a>
-<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 40 : assert(spr == SPR_PVR);</span></a>
-<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 40 : return fake_pvr;</span></a>
-<a name="109"><span class="lineNum"> 109 </span> : : }</a>
-<a name="110"><span class="lineNum"> 110 </span> : : </a>
-<a name="111"><span class="lineNum"> 111 </span> :<span class="lineNoCov"> 0 : struct dt_node *add_ics_node(void)</span></a>
-<a name="112"><span class="lineNum"> 112 </span> : : {</a>
-<a name="113"><span class="lineNum"> 113 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="114"><span class="lineNum"> 114 </span> : : }</a>
-<a name="115"><span class="lineNum"> 115 </span> : : </a>
-<a name="116"><span class="lineNum"> 116 </span> : : // Copied from processor.h:</a>
-<a name="117"><span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : static inline bool is_power9n(uint32_t version)</span></a>
-<a name="118"><span class="lineNum"> 118 </span> : : {</a>
-<a name="119"><span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : if (PVR_TYPE(version) != PVR_TYPE_P9)</span></a>
-<a name="120"><span class="lineNum"> 120 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="121"><span class="lineNum"> 121 </span> : : /*</a>
-<a name="122"><span class="lineNum"> 122 </span> : : * Bit 13 tells us:</a>
-<a name="123"><span class="lineNum"> 123 </span> : : * 0 = Scale out (aka Nimbus)</a>
-<a name="124"><span class="lineNum"> 124 </span> : : * 1 = Scale up (aka Cumulus)</a>
-<a name="125"><span class="lineNum"> 125 </span> : : */</a>
-<a name="126"><span class="lineNum"> 126 </span> :<span class="lineNoCov"> 0 : if ((version &gt;&gt; 13) &amp; 1)</span></a>
-<a name="127"><span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="128"><span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : return true;</span></a>
-<a name="129"><span class="lineNum"> 129 </span> : : }</a>
-<a name="130"><span class="lineNum"> 130 </span> : : </a>
-<a name="131"><span class="lineNum"> 131 </span> : : #include &lt;config.h&gt;</a>
-<a name="132"><span class="lineNum"> 132 </span> : : #include &lt;bitutils.h&gt;</a>
-<a name="133"><span class="lineNum"> 133 </span> : : </a>
-<a name="134"><span class="lineNum"> 134 </span> : : /* Your pointers won't be correct, that's OK. */</a>
-<a name="135"><span class="lineNum"> 135 </span> : : #define spira_check_ptr spira_check_ptr</a>
-<a name="136"><span class="lineNum"> 136 </span> : : </a>
-<a name="137"><span class="lineNum"> 137 </span> : : static bool spira_check_ptr(const void *ptr, const char *file, unsigned int line);</a>
+<a name="105"><span class="lineNum"> 105 </span> : : unsigned int cpu_thread_count = 8;</a>
+<a name="106"><span class="lineNum"> 106 </span> : : </a>
+<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 40 : static inline unsigned long mfspr(unsigned int spr)</span></a>
+<a name="108"><span class="lineNum"> 108 </span> : : {</a>
+<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 40 : assert(spr == SPR_PVR);</span></a>
+<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 40 : return fake_pvr;</span></a>
+<a name="111"><span class="lineNum"> 111 </span> : : }</a>
+<a name="112"><span class="lineNum"> 112 </span> : : </a>
+<a name="113"><span class="lineNum"> 113 </span> :<span class="lineNoCov"> 0 : struct dt_node *add_ics_node(void)</span></a>
+<a name="114"><span class="lineNum"> 114 </span> : : {</a>
+<a name="115"><span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="116"><span class="lineNum"> 116 </span> : : }</a>
+<a name="117"><span class="lineNum"> 117 </span> : : </a>
+<a name="118"><span class="lineNum"> 118 </span> : : // Copied from processor.h:</a>
+<a name="119"><span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : static inline bool is_power9n(uint32_t version)</span></a>
+<a name="120"><span class="lineNum"> 120 </span> : : {</a>
+<a name="121"><span class="lineNum"> 121 </span> :<span class="lineNoCov"> 0 : if (PVR_TYPE(version) != PVR_TYPE_P9)</span></a>
+<a name="122"><span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="123"><span class="lineNum"> 123 </span> : : /*</a>
+<a name="124"><span class="lineNum"> 124 </span> : : * Bit 13 tells us:</a>
+<a name="125"><span class="lineNum"> 125 </span> : : * 0 = Scale out (aka Nimbus)</a>
+<a name="126"><span class="lineNum"> 126 </span> : : * 1 = Scale up (aka Cumulus)</a>
+<a name="127"><span class="lineNum"> 127 </span> : : */</a>
+<a name="128"><span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : if ((version &gt;&gt; 13) &amp; 1)</span></a>
+<a name="129"><span class="lineNum"> 129 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="130"><span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : return true;</span></a>
+<a name="131"><span class="lineNum"> 131 </span> : : }</a>
+<a name="132"><span class="lineNum"> 132 </span> : : </a>
+<a name="133"><span class="lineNum"> 133 </span> : : #include &lt;config.h&gt;</a>
+<a name="134"><span class="lineNum"> 134 </span> : : #include &lt;bitutils.h&gt;</a>
+<a name="135"><span class="lineNum"> 135 </span> : : </a>
+<a name="136"><span class="lineNum"> 136 </span> : : /* Your pointers won't be correct, that's OK. */</a>
+<a name="137"><span class="lineNum"> 137 </span> : : #define spira_check_ptr spira_check_ptr</a>
<a name="138"><span class="lineNum"> 138 </span> : : </a>
-<a name="139"><span class="lineNum"> 139 </span> : : /* should probably check this */</a>
-<a name="140"><span class="lineNum"> 140 </span> : : #define BITS_PER_LONG 64</a>
-<a name="141"><span class="lineNum"> 141 </span> : : /* not used, just needs to exist */</a>
-<a name="142"><span class="lineNum"> 142 </span> : : #define cpu_max_pir 0x7</a>
-<a name="143"><span class="lineNum"> 143 </span> : : </a>
-<a name="144"><span class="lineNum"> 144 </span> : : #include &quot;../cpu-common.c&quot;</a>
-<a name="145"><span class="lineNum"> 145 </span> : : #include &quot;../fsp.c&quot;</a>
-<a name="146"><span class="lineNum"> 146 </span> : : #include &quot;../hdif.c&quot;</a>
-<a name="147"><span class="lineNum"> 147 </span> : : #include &quot;../iohub.c&quot;</a>
-<a name="148"><span class="lineNum"> 148 </span> : : #include &quot;../memory.c&quot;</a>
-<a name="149"><span class="lineNum"> 149 </span> : : #include &quot;../pcia.c&quot;</a>
-<a name="150"><span class="lineNum"> 150 </span> : : #include &quot;../spira.c&quot;</a>
-<a name="151"><span class="lineNum"> 151 </span> : : #include &quot;../vpd.c&quot;</a>
-<a name="152"><span class="lineNum"> 152 </span> : : #include &quot;../vpd-common.c&quot;</a>
-<a name="153"><span class="lineNum"> 153 </span> : : #include &quot;../slca.c&quot;</a>
-<a name="154"><span class="lineNum"> 154 </span> : : #include &quot;../hostservices.c&quot;</a>
-<a name="155"><span class="lineNum"> 155 </span> : : #include &quot;../i2c.c&quot;</a>
-<a name="156"><span class="lineNum"> 156 </span> : : #include &quot;../tpmrel.c&quot;</a>
-<a name="157"><span class="lineNum"> 157 </span> : : #include &quot;../../core/vpd.c&quot;</a>
-<a name="158"><span class="lineNum"> 158 </span> : : #include &quot;../../core/device.c&quot;</a>
-<a name="159"><span class="lineNum"> 159 </span> : : #include &quot;../../core/chip.c&quot;</a>
-<a name="160"><span class="lineNum"> 160 </span> : : #include &quot;../../test/dt_common.c&quot;</a>
-<a name="161"><span class="lineNum"> 161 </span> : : #include &quot;../../core/fdt.c&quot;</a>
-<a name="162"><span class="lineNum"> 162 </span> : : #include &quot;../../hw/phys-map.c&quot;</a>
-<a name="163"><span class="lineNum"> 163 </span> : : #include &quot;../../core/mem_region.c&quot;</a>
-<a name="164"><span class="lineNum"> 164 </span> : : </a>
-<a name="165"><span class="lineNum"> 165 </span> : : #include &lt;err.h&gt;</a>
+<a name="139"><span class="lineNum"> 139 </span> : : static bool spira_check_ptr(const void *ptr, const char *file, unsigned int line);</a>
+<a name="140"><span class="lineNum"> 140 </span> : : </a>
+<a name="141"><span class="lineNum"> 141 </span> : : /* should probably check this */</a>
+<a name="142"><span class="lineNum"> 142 </span> : : #define BITS_PER_LONG 64</a>
+<a name="143"><span class="lineNum"> 143 </span> : : /* not used, just needs to exist */</a>
+<a name="144"><span class="lineNum"> 144 </span> : : #define cpu_max_pir 0x7</a>
+<a name="145"><span class="lineNum"> 145 </span> : : </a>
+<a name="146"><span class="lineNum"> 146 </span> : : #include &quot;../cpu-common.c&quot;</a>
+<a name="147"><span class="lineNum"> 147 </span> : : #include &quot;../fsp.c&quot;</a>
+<a name="148"><span class="lineNum"> 148 </span> : : #include &quot;../hdif.c&quot;</a>
+<a name="149"><span class="lineNum"> 149 </span> : : #include &quot;../iohub.c&quot;</a>
+<a name="150"><span class="lineNum"> 150 </span> : : #include &quot;../memory.c&quot;</a>
+<a name="151"><span class="lineNum"> 151 </span> : : #include &quot;../pcia.c&quot;</a>
+<a name="152"><span class="lineNum"> 152 </span> : : #include &quot;../spira.c&quot;</a>
+<a name="153"><span class="lineNum"> 153 </span> : : #include &quot;../vpd.c&quot;</a>
+<a name="154"><span class="lineNum"> 154 </span> : : #include &quot;../vpd-common.c&quot;</a>
+<a name="155"><span class="lineNum"> 155 </span> : : #include &quot;../slca.c&quot;</a>
+<a name="156"><span class="lineNum"> 156 </span> : : #include &quot;../hostservices.c&quot;</a>
+<a name="157"><span class="lineNum"> 157 </span> : : #include &quot;../i2c.c&quot;</a>
+<a name="158"><span class="lineNum"> 158 </span> : : #include &quot;../tpmrel.c&quot;</a>
+<a name="159"><span class="lineNum"> 159 </span> : : #include &quot;../../core/vpd.c&quot;</a>
+<a name="160"><span class="lineNum"> 160 </span> : : #include &quot;../../core/device.c&quot;</a>
+<a name="161"><span class="lineNum"> 161 </span> : : #include &quot;../../core/chip.c&quot;</a>
+<a name="162"><span class="lineNum"> 162 </span> : : #include &quot;../../test/dt_common.c&quot;</a>
+<a name="163"><span class="lineNum"> 163 </span> : : #include &quot;../../core/fdt.c&quot;</a>
+<a name="164"><span class="lineNum"> 164 </span> : : #include &quot;../../hw/phys-map.c&quot;</a>
+<a name="165"><span class="lineNum"> 165 </span> : : #include &quot;../../core/mem_region.c&quot;</a>
<a name="166"><span class="lineNum"> 166 </span> : : </a>
-<a name="167"><span class="lineNum"> 167 </span> : : #include &lt;op-panel.h&gt;</a>
+<a name="167"><span class="lineNum"> 167 </span> : : #include &lt;err.h&gt;</a>
<a name="168"><span class="lineNum"> 168 </span> : : </a>
-<a name="169"><span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : bool fsp_present()</span></a>
-<a name="170"><span class="lineNum"> 170 </span> : : {</a>
-<a name="171"><span class="lineNum"> 171 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="172"><span class="lineNum"> 172 </span> : : }</a>
-<a name="173"><span class="lineNum"> 173 </span> : : </a>
-<a name="174"><span class="lineNum"> 174 </span> :<span class="lineNoCov"> 0 : void op_display(enum op_severity s, enum op_module m, uint16_t code)</span></a>
-<a name="175"><span class="lineNum"> 175 </span> : : {</a>
-<a name="176"><span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;op_panel Severity: 0x%x (%s), module %x, %x\n&quot;,</span></a>
-<a name="177"><span class="lineNum"> 177 </span> : : s, (s == OP_FATAL) ? &quot;FATAL&quot; : &quot;non-fatal&quot;,</a>
-<a name="178"><span class="lineNum"> 178 </span> : : m, code);</a>
-<a name="179"><span class="lineNum"> 179 </span> :<span class="lineNoCov"> 0 : if (s == OP_FATAL)</span></a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span></a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : }</span></a>
-<a name="182"><span class="lineNum"> 182 </span> : : </a>
-<a name="183"><span class="lineNum"> 183 </span> : : char __rodata_start[1], __rodata_end[1];</a>
+<a name="169"><span class="lineNum"> 169 </span> : : #include &lt;op-panel.h&gt;</a>
+<a name="170"><span class="lineNum"> 170 </span> : : </a>
+<a name="171"><span class="lineNum"> 171 </span> :<span class="lineNoCov"> 0 : bool fsp_present()</span></a>
+<a name="172"><span class="lineNum"> 172 </span> : : {</a>
+<a name="173"><span class="lineNum"> 173 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="174"><span class="lineNum"> 174 </span> : : }</a>
+<a name="175"><span class="lineNum"> 175 </span> : : </a>
+<a name="176"><span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : void op_display(enum op_severity s, enum op_module m, uint16_t code)</span></a>
+<a name="177"><span class="lineNum"> 177 </span> : : {</a>
+<a name="178"><span class="lineNum"> 178 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;op_panel Severity: 0x%x (%s), module %x, %x\n&quot;,</span></a>
+<a name="179"><span class="lineNum"> 179 </span> : : s, (s == OP_FATAL) ? &quot;FATAL&quot; : &quot;non-fatal&quot;,</a>
+<a name="180"><span class="lineNum"> 180 </span> : : m, code);</a>
+<a name="181"><span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : if (s == OP_FATAL)</span></a>
+<a name="182"><span class="lineNum"> 182 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span></a>
+<a name="183"><span class="lineNum"> 183 </span> :<span class="lineNoCov"> 0 : }</span></a>
<a name="184"><span class="lineNum"> 184 </span> : : </a>
-<a name="185"><span class="lineNum"> 185 </span> : : enum proc_gen proc_gen = proc_gen_p8;</a>
+<a name="185"><span class="lineNum"> 185 </span> : : char __rodata_start[1], __rodata_end[1];</a>
<a name="186"><span class="lineNum"> 186 </span> : : </a>
-<a name="187"><span class="lineNum"> 187 </span> :<span class="lineCov"> 1007 : static bool spira_check_ptr(const void *ptr, const char *file, unsigned int line)</span></a>
-<a name="188"><span class="lineNum"> 188 </span> : : {</a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 1007 : if (!ptr)</span></a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineCov"> 6 : return false;</span></a>
-<a name="191"><span class="lineNum"> 191 </span> : : /* we fake the SPIRA pointer as it's relative to where it was loaded</a>
-<a name="192"><span class="lineNum"> 192 </span> : : * on real hardware */</a>
-<a name="193"><span class="lineNum"> 193 </span> : : (void)file;</a>
-<a name="194"><span class="lineNum"> 194 </span> : : (void)line;</a>
-<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 1001 : return true;</span></a>
-<a name="196"><span class="lineNum"> 196 </span> : : }</a>
-<a name="197"><span class="lineNum"> 197 </span> : : </a>
-<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 638 : static void *ntuple_addr(const struct spira_ntuple *n)</span></a>
-<a name="199"><span class="lineNum"> 199 </span> : : {</a>
-<a name="200"><span class="lineNum"> 200 </span> :<span class="lineCov"> 638 : uint64_t addr = be64_to_cpu(n-&gt;addr);</span></a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 638 : if (n-&gt;addr == 0)</span></a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineCov"> 6 : return NULL;</span></a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 632 : if (addr &lt; base_addr) {</span></a>
-<a name="204"><span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;assert failed: addr &gt;= base_addr (%&quot;PRIu64&quot; &gt;= %&quot;PRIu64&quot;)\n&quot;, addr, base_addr);</span></a>
-<a name="205"><span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span></a>
-<a name="206"><span class="lineNum"> 206 </span> : : }</a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 632 : if (addr &gt;= base_addr + spira_heap_size) {</span></a>
-<a name="208"><span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;assert failed: addr not in spira_heap\n&quot;);</span></a>
-<a name="209"><span class="lineNum"> 209 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span></a>
-<a name="210"><span class="lineNum"> 210 </span> : : }</a>
-<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 632 : return spira_heap + ((unsigned long)addr - base_addr);</span></a>
-<a name="212"><span class="lineNum"> 212 </span> : : }</a>
-<a name="213"><span class="lineNum"> 213 </span> : : </a>
-<a name="214"><span class="lineNum"> 214 </span> : : /* Make sure valgrind knows these are undefined bytes. */</a>
-<a name="215"><span class="lineNum"> 215 </span> :<span class="lineCov"> 2 : static void undefined_bytes(void *p, size_t len)</span></a>
-<a name="216"><span class="lineNum"> 216 </span> : : {</a>
-<a name="217"><span class="lineNum"> 217 </span> : : VALGRIND_MAKE_MEM_UNDEFINED(p, len);</a>
-<a name="218"><span class="lineNum"> 218 </span> :<span class="lineCov"> 2 : }</span></a>
-<a name="219"><span class="lineNum"> 219 </span> : : </a>
-<a name="220"><span class="lineNum"> 220 </span> :<span class="lineCov"> 8 : static u32 hash_prop(const struct dt_property *p)</span></a>
-<a name="221"><span class="lineNum"> 221 </span> : : {</a>
-<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 8 : u32 i, hash = 0;</span></a>
-<a name="223"><span class="lineNum"> 223 </span> : : </a>
-<a name="224"><span class="lineNum"> 224 </span> : : /* a stupid checksum */</a>
-<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 401416 : for (i = 0; i &lt; p-&gt;len; i++)</span></a>
-<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 401408 : hash += (((signed char)p-&gt;prop[i] &amp; ~0x10) + 1) * i;</span></a>
-<a name="227"><span class="lineNum"> 227 </span> : : </a>
-<a name="228"><span class="lineNum"> 228 </span> :<span class="lineCov"> 8 : return hash;</span></a>
-<a name="229"><span class="lineNum"> 229 </span> : : }</a>
-<a name="230"><span class="lineNum"> 230 </span> : : </a>
-<a name="231"><span class="lineNum"> 231 </span> : : /*</a>
-<a name="232"><span class="lineNum"> 232 </span> : : * This filters out VPD blobs and other annoyances from the devicetree output.</a>
-<a name="233"><span class="lineNum"> 233 </span> : : * We don't actually care about the contents of the blob, we just want to make</a>
-<a name="234"><span class="lineNum"> 234 </span> : : * sure it's there and that we aren't accidently corrupting the contents.</a>
-<a name="235"><span class="lineNum"> 235 </span> : : */</a>
-<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 236 : static void squash_blobs(struct dt_node *root)</span></a>
-<a name="237"><span class="lineNum"> 237 </span> : : {</a>
-<a name="238"><span class="lineNum"> 238 </span> : : struct dt_node *n;</a>
-<a name="239"><span class="lineNum"> 239 </span> : : struct dt_property *p;</a>
-<a name="240"><span class="lineNum"> 240 </span> : : </a>
-<a name="241"><span class="lineNum"> 241 </span> :<span class="lineCov"> 2793 : list_for_each(&amp;root-&gt;properties, p, list) {</span></a>
-<a name="242"><span class="lineNum"> 242 </span> :<span class="lineCov"> 2557 : if (strstarts(p-&gt;name, DT_PRIVATE))</span></a>
-<a name="243"><span class="lineNum"> 243 </span> :<span class="lineCov"> 8 : continue;</span></a>
-<a name="244"><span class="lineNum"> 244 </span> : : </a>
-<a name="245"><span class="lineNum"> 245 </span> : : /*</a>
-<a name="246"><span class="lineNum"> 246 </span> : : * Consider any property larger than 512 bytes a blob that can</a>
-<a name="247"><span class="lineNum"> 247 </span> : : * be removed. This number was picked out of thin in so don't</a>
-<a name="248"><span class="lineNum"> 248 </span> : : * feel bad about changing it.</a>
-<a name="249"><span class="lineNum"> 249 </span> : : */</a>
-<a name="250"><span class="lineNum"> 250 </span> :<span class="lineCov"> 2549 : if (p-&gt;len &gt; 512) {</span></a>
-<a name="251"><span class="lineNum"> 251 </span> :<span class="lineCov"> 8 : u32 hash = hash_prop(p);</span></a>
-<a name="252"><span class="lineNum"> 252 </span> :<span class="lineCov"> 8 : u32 *val = (u32 *) p-&gt;prop;</span></a>
-<a name="253"><span class="lineNum"> 253 </span> : : </a>
-<a name="254"><span class="lineNum"> 254 </span> : : /* Add a sentinel so we know it was truncated */</a>
-<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 8 : val[0] = cpu_to_be32(0xcafebeef);</span></a>
-<a name="256"><span class="lineNum"> 256 </span> :<span class="lineCov"> 8 : val[1] = cpu_to_be32(p-&gt;len);</span></a>
-<a name="257"><span class="lineNum"> 257 </span> :<span class="lineCov"> 8 : val[2] = cpu_to_be32(hash);</span></a>
-<a name="258"><span class="lineNum"> 258 </span> :<span class="lineCov"> 8 : p-&gt;len = 3 * sizeof(u32);</span></a>
-<a name="259"><span class="lineNum"> 259 </span> : : }</a>
-<a name="260"><span class="lineNum"> 260 </span> : : }</a>
-<a name="261"><span class="lineNum"> 261 </span> : : </a>
-<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 470 : list_for_each(&amp;root-&gt;children, n, list)</span></a>
-<a name="263"><span class="lineNum"> 263 </span> :<span class="lineCov"> 234 : squash_blobs(n);</span></a>
-<a name="264"><span class="lineNum"> 264 </span> :<span class="lineCov"> 236 : }</span></a>
-<a name="265"><span class="lineNum"> 265 </span> : : </a>
-<a name="266"><span class="lineNum"> 266 </span> :<span class="lineCov"> 2 : static void dump_hdata_fdt(struct dt_node *root)</span></a>
-<a name="267"><span class="lineNum"> 267 </span> : : {</a>
-<a name="268"><span class="lineNum"> 268 </span> : : struct dt_node *n;</a>
-<a name="269"><span class="lineNum"> 269 </span> : : void *fdt_blob;</a>
-<a name="270"><span class="lineNum"> 270 </span> : : </a>
-<a name="271"><span class="lineNum"> 271 </span> : : /* delete some properties that hardcode pointers */</a>
-<a name="272"><span class="lineNum"> 272 </span> :<span class="lineCov"> 236 : dt_for_each_node(dt_root, n) {</span></a>
-<a name="273"><span class="lineNum"> 273 </span> : : struct dt_property *base;</a>
-<a name="274"><span class="lineNum"> 274 </span> : : </a>
-<a name="275"><span class="lineNum"> 275 </span> : : /*</a>
-<a name="276"><span class="lineNum"> 276 </span> : : * sml-base is a raw pointer into the HDAT area so it changes</a>
-<a name="277"><span class="lineNum"> 277 </span> : : * on each execution of hdata_to_dt. Work around this by</a>
-<a name="278"><span class="lineNum"> 278 </span> : : * zeroing it.</a>
-<a name="279"><span class="lineNum"> 279 </span> : : */</a>
-<a name="280"><span class="lineNum"> 280 </span> :<span class="lineCov"> 234 : base = __dt_find_property(n, &quot;linux,sml-base&quot;);</span></a>
-<a name="281"><span class="lineNum"> 281 </span> :<span class="lineCov"> 234 : if (base)</span></a>
-<a name="282"><span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : memset(base-&gt;prop, 0, base-&gt;len);</span></a>
-<a name="283"><span class="lineNum"> 283 </span> : : }</a>
-<a name="284"><span class="lineNum"> 284 </span> : : </a>
-<a name="285"><span class="lineNum"> 285 </span> :<span class="lineCov"> 2 : fdt_blob = create_dtb(root, false);</span></a>
+<a name="187"><span class="lineNum"> 187 </span> : : enum proc_gen proc_gen = proc_gen_p8;</a>
+<a name="188"><span class="lineNum"> 188 </span> : : </a>
+<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 1007 : static bool spira_check_ptr(const void *ptr, const char *file, unsigned int line)</span></a>
+<a name="190"><span class="lineNum"> 190 </span> : : {</a>
+<a name="191"><span class="lineNum"> 191 </span> :<span class="lineCov"> 1007 : if (!ptr)</span></a>
+<a name="192"><span class="lineNum"> 192 </span> :<span class="lineCov"> 6 : return false;</span></a>
+<a name="193"><span class="lineNum"> 193 </span> : : /* we fake the SPIRA pointer as it's relative to where it was loaded</a>
+<a name="194"><span class="lineNum"> 194 </span> : : * on real hardware */</a>
+<a name="195"><span class="lineNum"> 195 </span> : : (void)file;</a>
+<a name="196"><span class="lineNum"> 196 </span> : : (void)line;</a>
+<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 1001 : return true;</span></a>
+<a name="198"><span class="lineNum"> 198 </span> : : }</a>
+<a name="199"><span class="lineNum"> 199 </span> : : </a>
+<a name="200"><span class="lineNum"> 200 </span> :<span class="lineCov"> 638 : static void *ntuple_addr(const struct spira_ntuple *n)</span></a>
+<a name="201"><span class="lineNum"> 201 </span> : : {</a>
+<a name="202"><span class="lineNum"> 202 </span> :<span class="lineCov"> 638 : uint64_t addr = be64_to_cpu(n-&gt;addr);</span></a>
+<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 638 : if (n-&gt;addr == 0)</span></a>
+<a name="204"><span class="lineNum"> 204 </span> :<span class="lineCov"> 6 : return NULL;</span></a>
+<a name="205"><span class="lineNum"> 205 </span> :<span class="lineCov"> 632 : if (addr &lt; base_addr) {</span></a>
+<a name="206"><span class="lineNum"> 206 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;assert failed: addr &gt;= base_addr (%&quot;PRIu64&quot; &gt;= %&quot;PRIu64&quot;)\n&quot;, addr, base_addr);</span></a>
+<a name="207"><span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span></a>
+<a name="208"><span class="lineNum"> 208 </span> : : }</a>
+<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 632 : if (addr &gt;= base_addr + spira_heap_size) {</span></a>
+<a name="210"><span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;assert failed: addr not in spira_heap\n&quot;);</span></a>
+<a name="211"><span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span></a>
+<a name="212"><span class="lineNum"> 212 </span> : : }</a>
+<a name="213"><span class="lineNum"> 213 </span> :<span class="lineCov"> 632 : return spira_heap + ((unsigned long)addr - base_addr);</span></a>
+<a name="214"><span class="lineNum"> 214 </span> : : }</a>
+<a name="215"><span class="lineNum"> 215 </span> : : </a>
+<a name="216"><span class="lineNum"> 216 </span> : : /* Make sure valgrind knows these are undefined bytes. */</a>
+<a name="217"><span class="lineNum"> 217 </span> :<span class="lineCov"> 2 : static void undefined_bytes(void *p, size_t len)</span></a>
+<a name="218"><span class="lineNum"> 218 </span> : : {</a>
+<a name="219"><span class="lineNum"> 219 </span> : : VALGRIND_MAKE_MEM_UNDEFINED(p, len);</a>
+<a name="220"><span class="lineNum"> 220 </span> :<span class="lineCov"> 2 : }</span></a>
+<a name="221"><span class="lineNum"> 221 </span> : : </a>
+<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 8 : static u32 hash_prop(const struct dt_property *p)</span></a>
+<a name="223"><span class="lineNum"> 223 </span> : : {</a>
+<a name="224"><span class="lineNum"> 224 </span> :<span class="lineCov"> 8 : u32 i, hash = 0;</span></a>
+<a name="225"><span class="lineNum"> 225 </span> : : </a>
+<a name="226"><span class="lineNum"> 226 </span> : : /* a stupid checksum */</a>
+<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 401416 : for (i = 0; i &lt; p-&gt;len; i++)</span></a>
+<a name="228"><span class="lineNum"> 228 </span> :<span class="lineCov"> 401408 : hash += (((signed char)p-&gt;prop[i] &amp; ~0x10) + 1) * i;</span></a>
+<a name="229"><span class="lineNum"> 229 </span> : : </a>
+<a name="230"><span class="lineNum"> 230 </span> :<span class="lineCov"> 8 : return hash;</span></a>
+<a name="231"><span class="lineNum"> 231 </span> : : }</a>
+<a name="232"><span class="lineNum"> 232 </span> : : </a>
+<a name="233"><span class="lineNum"> 233 </span> : : /*</a>
+<a name="234"><span class="lineNum"> 234 </span> : : * This filters out VPD blobs and other annoyances from the devicetree output.</a>
+<a name="235"><span class="lineNum"> 235 </span> : : * We don't actually care about the contents of the blob, we just want to make</a>
+<a name="236"><span class="lineNum"> 236 </span> : : * sure it's there and that we aren't accidently corrupting the contents.</a>
+<a name="237"><span class="lineNum"> 237 </span> : : */</a>
+<a name="238"><span class="lineNum"> 238 </span> :<span class="lineCov"> 236 : static void squash_blobs(struct dt_node *root)</span></a>
+<a name="239"><span class="lineNum"> 239 </span> : : {</a>
+<a name="240"><span class="lineNum"> 240 </span> : : struct dt_node *n;</a>
+<a name="241"><span class="lineNum"> 241 </span> : : struct dt_property *p;</a>
+<a name="242"><span class="lineNum"> 242 </span> : : </a>
+<a name="243"><span class="lineNum"> 243 </span> :<span class="lineCov"> 2819 : list_for_each(&amp;root-&gt;properties, p, list) {</span></a>
+<a name="244"><span class="lineNum"> 244 </span> :<span class="lineCov"> 2583 : if (strstarts(p-&gt;name, DT_PRIVATE))</span></a>
+<a name="245"><span class="lineNum"> 245 </span> :<span class="lineCov"> 8 : continue;</span></a>
+<a name="246"><span class="lineNum"> 246 </span> : : </a>
+<a name="247"><span class="lineNum"> 247 </span> : : /*</a>
+<a name="248"><span class="lineNum"> 248 </span> : : * Consider any property larger than 512 bytes a blob that can</a>
+<a name="249"><span class="lineNum"> 249 </span> : : * be removed. This number was picked out of thin in so don't</a>
+<a name="250"><span class="lineNum"> 250 </span> : : * feel bad about changing it.</a>
+<a name="251"><span class="lineNum"> 251 </span> : : */</a>
+<a name="252"><span class="lineNum"> 252 </span> :<span class="lineCov"> 2575 : if (p-&gt;len &gt; 512) {</span></a>
+<a name="253"><span class="lineNum"> 253 </span> :<span class="lineCov"> 8 : u32 hash = hash_prop(p);</span></a>
+<a name="254"><span class="lineNum"> 254 </span> :<span class="lineCov"> 8 : u32 *val = (u32 *) p-&gt;prop;</span></a>
+<a name="255"><span class="lineNum"> 255 </span> : : </a>
+<a name="256"><span class="lineNum"> 256 </span> : : /* Add a sentinel so we know it was truncated */</a>
+<a name="257"><span class="lineNum"> 257 </span> :<span class="lineCov"> 8 : val[0] = cpu_to_be32(0xcafebeef);</span></a>
+<a name="258"><span class="lineNum"> 258 </span> :<span class="lineCov"> 8 : val[1] = cpu_to_be32(p-&gt;len);</span></a>
+<a name="259"><span class="lineNum"> 259 </span> :<span class="lineCov"> 8 : val[2] = cpu_to_be32(hash);</span></a>
+<a name="260"><span class="lineNum"> 260 </span> :<span class="lineCov"> 8 : p-&gt;len = 3 * sizeof(u32);</span></a>
+<a name="261"><span class="lineNum"> 261 </span> : : }</a>
+<a name="262"><span class="lineNum"> 262 </span> : : }</a>
+<a name="263"><span class="lineNum"> 263 </span> : : </a>
+<a name="264"><span class="lineNum"> 264 </span> :<span class="lineCov"> 470 : list_for_each(&amp;root-&gt;children, n, list)</span></a>
+<a name="265"><span class="lineNum"> 265 </span> :<span class="lineCov"> 234 : squash_blobs(n);</span></a>
+<a name="266"><span class="lineNum"> 266 </span> :<span class="lineCov"> 236 : }</span></a>
+<a name="267"><span class="lineNum"> 267 </span> : : </a>
+<a name="268"><span class="lineNum"> 268 </span> :<span class="lineCov"> 2 : static void dump_hdata_fdt(struct dt_node *root)</span></a>
+<a name="269"><span class="lineNum"> 269 </span> : : {</a>
+<a name="270"><span class="lineNum"> 270 </span> : : struct dt_node *n;</a>
+<a name="271"><span class="lineNum"> 271 </span> : : void *fdt_blob;</a>
+<a name="272"><span class="lineNum"> 272 </span> : : </a>
+<a name="273"><span class="lineNum"> 273 </span> : : /* delete some properties that hardcode pointers */</a>
+<a name="274"><span class="lineNum"> 274 </span> :<span class="lineCov"> 236 : dt_for_each_node(dt_root, n) {</span></a>
+<a name="275"><span class="lineNum"> 275 </span> : : struct dt_property *base;</a>
+<a name="276"><span class="lineNum"> 276 </span> : : </a>
+<a name="277"><span class="lineNum"> 277 </span> : : /*</a>
+<a name="278"><span class="lineNum"> 278 </span> : : * sml-base is a raw pointer into the HDAT area so it changes</a>
+<a name="279"><span class="lineNum"> 279 </span> : : * on each execution of hdata_to_dt. Work around this by</a>
+<a name="280"><span class="lineNum"> 280 </span> : : * zeroing it.</a>
+<a name="281"><span class="lineNum"> 281 </span> : : */</a>
+<a name="282"><span class="lineNum"> 282 </span> :<span class="lineCov"> 234 : base = __dt_find_property(n, &quot;linux,sml-base&quot;);</span></a>
+<a name="283"><span class="lineNum"> 283 </span> :<span class="lineCov"> 234 : if (base)</span></a>
+<a name="284"><span class="lineNum"> 284 </span> :<span class="lineNoCov"> 0 : memset(base-&gt;prop, 0, base-&gt;len);</span></a>
+<a name="285"><span class="lineNum"> 285 </span> : : }</a>
<a name="286"><span class="lineNum"> 286 </span> : : </a>
-<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 2 : if (!fdt_blob) {</span></a>
-<a name="288"><span class="lineNum"> 288 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Unable to make flattened DT, no FDT written\n&quot;);</span></a>
-<a name="289"><span class="lineNum"> 289 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="290"><span class="lineNum"> 290 </span> : : }</a>
-<a name="291"><span class="lineNum"> 291 </span> : : </a>
-<a name="292"><span class="lineNum"> 292 </span> :<span class="lineCov"> 2 : fwrite(fdt_blob, fdt_totalsize(fdt_blob), 1, stdout);</span></a>
+<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 2 : fdt_blob = create_dtb(root, false);</span></a>
+<a name="288"><span class="lineNum"> 288 </span> : : </a>
+<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 2 : if (!fdt_blob) {</span></a>
+<a name="290"><span class="lineNum"> 290 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Unable to make flattened DT, no FDT written\n&quot;);</span></a>
+<a name="291"><span class="lineNum"> 291 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="292"><span class="lineNum"> 292 </span> : : }</a>
<a name="293"><span class="lineNum"> 293 </span> : : </a>
-<a name="294"><span class="lineNum"> 294 </span> :<span class="lineCov"> 2 : free(fdt_blob);</span></a>
-<a name="295"><span class="lineNum"> 295 </span> : : }</a>
-<a name="296"><span class="lineNum"> 296 </span> : : </a>
-<a name="297"><span class="lineNum"> 297 </span> :<span class="lineCov"> 2 : int main(int argc, char *argv[])</span></a>
-<a name="298"><span class="lineNum"> 298 </span> : : {</a>
-<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 2 : int fd, r, i = 0, opt_count = 0;</span></a>
-<a name="300"><span class="lineNum"> 300 </span> :<span class="lineCov"> 2 : bool verbose = false, quiet = false, new_spira = false, blobs = false;</span></a>
-<a name="301"><span class="lineNum"> 301 </span> : : </a>
-<a name="302"><span class="lineNum"> 302 </span> :<span class="lineCov"> 9 : while (argv[++i]) {</span></a>
-<a name="303"><span class="lineNum"> 303 </span> :<span class="lineCov"> 7 : if (strcmp(argv[i], &quot;-v&quot;) == 0) {</span></a>
-<a name="304"><span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : verbose = true;</span></a>
-<a name="305"><span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : opt_count++;</span></a>
-<a name="306"><span class="lineNum"> 306 </span> :<span class="lineCov"> 7 : } else if (strcmp(argv[i], &quot;-q&quot;) == 0) {</span></a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : quiet = true;</span></a>
-<a name="308"><span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : opt_count++;</span></a>
-<a name="309"><span class="lineNum"> 309 </span> :<span class="lineCov"> 7 : } else if (strcmp(argv[i], &quot;-s&quot;) == 0) {</span></a>
-<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 1 : new_spira = true;</span></a>
-<a name="311"><span class="lineNum"> 311 </span> :<span class="lineCov"> 1 : opt_count++;</span></a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 6 : } else if (strcmp(argv[i], &quot;-b&quot;) == 0) {</span></a>
-<a name="313"><span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : blobs = true;</span></a>
-<a name="314"><span class="lineNum"> 314 </span> :<span class="lineNoCov"> 0 : opt_count++;</span></a>
-<a name="315"><span class="lineNum"> 315 </span> :<span class="lineCov"> 6 : } else if (strcmp(argv[i], &quot;-8E&quot;) == 0) {</span></a>
-<a name="316"><span class="lineNum"> 316 </span> :<span class="lineCov"> 2 : fake_pvr = PVR_P8E;</span></a>
-<a name="317"><span class="lineNum"> 317 </span> :<span class="lineCov"> 2 : proc_gen = proc_gen_p8;</span></a>
-<a name="318"><span class="lineNum"> 318 </span> :<span class="lineCov"> 2 : opt_count++;</span></a>
-<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 4 : } else if (strcmp(argv[i], &quot;-8&quot;) == 0) {</span></a>
-<a name="320"><span class="lineNum"> 320 </span> :<span class="lineNoCov"> 0 : fake_pvr = PVR_P8;</span></a>
-<a name="321"><span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : proc_gen = proc_gen_p8;</span></a>
-<a name="322"><span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : opt_count++;</span></a>
-<a name="323"><span class="lineNum"> 323 </span> :<span class="lineCov"> 4 : } else if (strcmp(argv[i], &quot;-9&quot;) == 0) {</span></a>
-<a name="324"><span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : fake_pvr = PVR_P9;</span></a>
-<a name="325"><span class="lineNum"> 325 </span> :<span class="lineNoCov"> 0 : proc_gen = proc_gen_p9;</span></a>
-<a name="326"><span class="lineNum"> 326 </span> :<span class="lineNoCov"> 0 : opt_count++;</span></a>
-<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 4 : } else if (strcmp(argv[i], &quot;-9P&quot;) == 0) {</span></a>
-<a name="328"><span class="lineNum"> 328 </span> :<span class="lineNoCov"> 0 : fake_pvr = PVR_P9P;</span></a>
-<a name="329"><span class="lineNum"> 329 </span> :<span class="lineNoCov"> 0 : proc_gen = proc_gen_p9;</span></a>
-<a name="330"><span class="lineNum"> 330 </span> :<span class="lineNoCov"> 0 : opt_count++;</span></a>
-<a name="331"><span class="lineNum"> 331 </span> : : }</a>
-<a name="332"><span class="lineNum"> 332 </span> : : }</a>
-<a name="333"><span class="lineNum"> 333 </span> : : </a>
-<a name="334"><span class="lineNum"> 334 </span> :<span class="lineCov"> 2 : argc -= opt_count;</span></a>
-<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 2 : argv += opt_count;</span></a>
-<a name="336"><span class="lineNum"> 336 </span> :<span class="lineCov"> 2 : if (argc != 3) {</span></a>
-<a name="337"><span class="lineNum"> 337 </span> :<span class="lineNoCov"> 0 : errx(1, &quot;Converts HDAT dumps to DTB.\n&quot;</span></a>
-<a name="338"><span class="lineNum"> 338 </span> : : &quot;\n&quot;</a>
-<a name="339"><span class="lineNum"> 339 </span> : : &quot;Usage:\n&quot;</a>
-<a name="340"><span class="lineNum"> 340 </span> : : &quot; hdata &lt;opts&gt; &lt;spira-dump&gt; &lt;heap-dump&gt;\n&quot;</a>
-<a name="341"><span class="lineNum"> 341 </span> : : &quot; hdata &lt;opts&gt; -s &lt;spirah-dump&gt; &lt;spiras-dump&gt;\n&quot;</a>
-<a name="342"><span class="lineNum"> 342 </span> : : &quot;Options: \n&quot;</a>
-<a name="343"><span class="lineNum"> 343 </span> : : &quot; -v Verbose\n&quot;</a>
-<a name="344"><span class="lineNum"> 344 </span> : : &quot; -q Quiet mode\n&quot;</a>
-<a name="345"><span class="lineNum"> 345 </span> : : &quot; -b Keep blobs in the output\n&quot;</a>
-<a name="346"><span class="lineNum"> 346 </span> : : &quot;\n&quot;</a>
-<a name="347"><span class="lineNum"> 347 </span> : : &quot; -8 Force PVR to POWER8\n&quot;</a>
-<a name="348"><span class="lineNum"> 348 </span> : : &quot; -8E Force PVR to POWER8E\n&quot;</a>
-<a name="349"><span class="lineNum"> 349 </span> : : &quot; -9 Force PVR to POWER9 (nimbus)\n&quot;</a>
-<a name="350"><span class="lineNum"> 350 </span> : : &quot;\n&quot;</a>
-<a name="351"><span class="lineNum"> 351 </span> : : &quot;When no PVR is specified -8 is assumed&quot;</a>
+<a name="294"><span class="lineNum"> 294 </span> :<span class="lineCov"> 2 : fwrite(fdt_blob, fdt_totalsize(fdt_blob), 1, stdout);</span></a>
+<a name="295"><span class="lineNum"> 295 </span> : : </a>
+<a name="296"><span class="lineNum"> 296 </span> :<span class="lineCov"> 2 : free(fdt_blob);</span></a>
+<a name="297"><span class="lineNum"> 297 </span> : : }</a>
+<a name="298"><span class="lineNum"> 298 </span> : : </a>
+<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 2 : int main(int argc, char *argv[])</span></a>
+<a name="300"><span class="lineNum"> 300 </span> : : {</a>
+<a name="301"><span class="lineNum"> 301 </span> :<span class="lineCov"> 2 : int fd, r, i = 0, opt_count = 0;</span></a>
+<a name="302"><span class="lineNum"> 302 </span> :<span class="lineCov"> 2 : bool verbose = false, quiet = false, new_spira = false, blobs = false;</span></a>
+<a name="303"><span class="lineNum"> 303 </span> : : </a>
+<a name="304"><span class="lineNum"> 304 </span> :<span class="lineCov"> 9 : while (argv[++i]) {</span></a>
+<a name="305"><span class="lineNum"> 305 </span> :<span class="lineCov"> 7 : if (strcmp(argv[i], &quot;-v&quot;) == 0) {</span></a>
+<a name="306"><span class="lineNum"> 306 </span> :<span class="lineNoCov"> 0 : verbose = true;</span></a>
+<a name="307"><span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : opt_count++;</span></a>
+<a name="308"><span class="lineNum"> 308 </span> :<span class="lineCov"> 7 : } else if (strcmp(argv[i], &quot;-q&quot;) == 0) {</span></a>
+<a name="309"><span class="lineNum"> 309 </span> :<span class="lineNoCov"> 0 : quiet = true;</span></a>
+<a name="310"><span class="lineNum"> 310 </span> :<span class="lineNoCov"> 0 : opt_count++;</span></a>
+<a name="311"><span class="lineNum"> 311 </span> :<span class="lineCov"> 7 : } else if (strcmp(argv[i], &quot;-s&quot;) == 0) {</span></a>
+<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 1 : new_spira = true;</span></a>
+<a name="313"><span class="lineNum"> 313 </span> :<span class="lineCov"> 1 : opt_count++;</span></a>
+<a name="314"><span class="lineNum"> 314 </span> :<span class="lineCov"> 6 : } else if (strcmp(argv[i], &quot;-b&quot;) == 0) {</span></a>
+<a name="315"><span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : blobs = true;</span></a>
+<a name="316"><span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : opt_count++;</span></a>
+<a name="317"><span class="lineNum"> 317 </span> :<span class="lineCov"> 6 : } else if (strcmp(argv[i], &quot;-8E&quot;) == 0) {</span></a>
+<a name="318"><span class="lineNum"> 318 </span> :<span class="lineCov"> 2 : fake_pvr = PVR_P8E;</span></a>
+<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 2 : proc_gen = proc_gen_p8;</span></a>
+<a name="320"><span class="lineNum"> 320 </span> :<span class="lineCov"> 2 : opt_count++;</span></a>
+<a name="321"><span class="lineNum"> 321 </span> :<span class="lineCov"> 4 : } else if (strcmp(argv[i], &quot;-8&quot;) == 0) {</span></a>
+<a name="322"><span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : fake_pvr = PVR_P8;</span></a>
+<a name="323"><span class="lineNum"> 323 </span> :<span class="lineNoCov"> 0 : proc_gen = proc_gen_p8;</span></a>
+<a name="324"><span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : opt_count++;</span></a>
+<a name="325"><span class="lineNum"> 325 </span> :<span class="lineCov"> 4 : } else if (strcmp(argv[i], &quot;-9&quot;) == 0) {</span></a>
+<a name="326"><span class="lineNum"> 326 </span> :<span class="lineNoCov"> 0 : fake_pvr = PVR_P9;</span></a>
+<a name="327"><span class="lineNum"> 327 </span> :<span class="lineNoCov"> 0 : proc_gen = proc_gen_p9;</span></a>
+<a name="328"><span class="lineNum"> 328 </span> :<span class="lineNoCov"> 0 : opt_count++;</span></a>
+<a name="329"><span class="lineNum"> 329 </span> :<span class="lineCov"> 4 : } else if (strcmp(argv[i], &quot;-9P&quot;) == 0) {</span></a>
+<a name="330"><span class="lineNum"> 330 </span> :<span class="lineNoCov"> 0 : fake_pvr = PVR_P9P;</span></a>
+<a name="331"><span class="lineNum"> 331 </span> :<span class="lineNoCov"> 0 : proc_gen = proc_gen_p9;</span></a>
+<a name="332"><span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : opt_count++;</span></a>
+<a name="333"><span class="lineNum"> 333 </span> :<span class="lineCov"> 4 : } else if (strcmp(argv[i], &quot;-10&quot;) == 0) {</span></a>
+<a name="334"><span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : fake_pvr = PVR_P10;</span></a>
+<a name="335"><span class="lineNum"> 335 </span> :<span class="lineNoCov"> 0 : proc_gen = proc_gen_p10;</span></a>
+<a name="336"><span class="lineNum"> 336 </span> :<span class="lineNoCov"> 0 : opt_count++;</span></a>
+<a name="337"><span class="lineNum"> 337 </span> : : }</a>
+<a name="338"><span class="lineNum"> 338 </span> : : }</a>
+<a name="339"><span class="lineNum"> 339 </span> : : </a>
+<a name="340"><span class="lineNum"> 340 </span> :<span class="lineCov"> 2 : argc -= opt_count;</span></a>
+<a name="341"><span class="lineNum"> 341 </span> :<span class="lineCov"> 2 : argv += opt_count;</span></a>
+<a name="342"><span class="lineNum"> 342 </span> :<span class="lineCov"> 2 : if (argc != 3) {</span></a>
+<a name="343"><span class="lineNum"> 343 </span> :<span class="lineNoCov"> 0 : errx(1, &quot;Converts HDAT dumps to DTB.\n&quot;</span></a>
+<a name="344"><span class="lineNum"> 344 </span> : : &quot;\n&quot;</a>
+<a name="345"><span class="lineNum"> 345 </span> : : &quot;Usage:\n&quot;</a>
+<a name="346"><span class="lineNum"> 346 </span> : : &quot; hdata &lt;opts&gt; &lt;spira-dump&gt; &lt;heap-dump&gt;\n&quot;</a>
+<a name="347"><span class="lineNum"> 347 </span> : : &quot; hdata &lt;opts&gt; -s &lt;spirah-dump&gt; &lt;spiras-dump&gt;\n&quot;</a>
+<a name="348"><span class="lineNum"> 348 </span> : : &quot;Options: \n&quot;</a>
+<a name="349"><span class="lineNum"> 349 </span> : : &quot; -v Verbose\n&quot;</a>
+<a name="350"><span class="lineNum"> 350 </span> : : &quot; -q Quiet mode\n&quot;</a>
+<a name="351"><span class="lineNum"> 351 </span> : : &quot; -b Keep blobs in the output\n&quot;</a>
<a name="352"><span class="lineNum"> 352 </span> : : &quot;\n&quot;</a>
-<a name="353"><span class="lineNum"> 353 </span> : : &quot;Pipe to 'dtc -I dtb -O dts' for human readable output\n&quot;);</a>
-<a name="354"><span class="lineNum"> 354 </span> : : }</a>
-<a name="355"><span class="lineNum"> 355 </span> : : </a>
-<a name="356"><span class="lineNum"> 356 </span> :<span class="lineCov"> 2 : phys_map_init(fake_pvr);</span></a>
-<a name="357"><span class="lineNum"> 357 </span> : : </a>
-<a name="358"><span class="lineNum"> 358 </span> : : /* Copy in spira dump (assumes little has changed!). */</a>
-<a name="359"><span class="lineNum"> 359 </span> :<span class="lineCov"> 2 : if (new_spira) {</span></a>
-<a name="360"><span class="lineNum"> 360 </span> :<span class="lineCov"> 1 : fd = open(argv[1], O_RDONLY);</span></a>
-<a name="361"><span class="lineNum"> 361 </span> :<span class="lineCov"> 1 : if (fd &lt; 0)</span></a>
-<a name="362"><span class="lineNum"> 362 </span> :<span class="lineNoCov"> 0 : err(1, &quot;opening %s&quot;, argv[1]);</span></a>
-<a name="363"><span class="lineNum"> 363 </span> :<span class="lineCov"> 1 : r = read(fd, &amp;spirah, sizeof(spirah));</span></a>
-<a name="364"><span class="lineNum"> 364 </span> :<span class="lineCov"> 1 : if (r &lt; sizeof(spirah.hdr))</span></a>
-<a name="365"><span class="lineNum"> 365 </span> :<span class="lineNoCov"> 0 : err(1, &quot;reading %s gave %i&quot;, argv[1], r);</span></a>
-<a name="366"><span class="lineNum"> 366 </span> :<span class="lineCov"> 1 : if (verbose)</span></a>
-<a name="367"><span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : printf(&quot;verbose: read spirah %u bytes\n&quot;, r);</span></a>
-<a name="368"><span class="lineNum"> 368 </span> :<span class="lineCov"> 1 : close(fd);</span></a>
-<a name="369"><span class="lineNum"> 369 </span> : : </a>
-<a name="370"><span class="lineNum"> 370 </span> :<span class="lineCov"> 1 : undefined_bytes((void *)&amp;spirah + r, sizeof(spirah) - r);</span></a>
-<a name="371"><span class="lineNum"> 371 </span> : : </a>
-<a name="372"><span class="lineNum"> 372 </span> :<span class="lineCov"> 1 : base_addr = be64_to_cpu(spirah.ntuples.hs_data_area.addr);</span></a>
-<a name="373"><span class="lineNum"> 373 </span> : : } else {</a>
-<a name="374"><span class="lineNum"> 374 </span> :<span class="lineCov"> 1 : fd = open(argv[1], O_RDONLY);</span></a>
-<a name="375"><span class="lineNum"> 375 </span> :<span class="lineCov"> 1 : if (fd &lt; 0)</span></a>
-<a name="376"><span class="lineNum"> 376 </span> :<span class="lineNoCov"> 0 : err(1, &quot;opening %s&quot;, argv[1]);</span></a>
-<a name="377"><span class="lineNum"> 377 </span> :<span class="lineCov"> 1 : r = read(fd, &amp;spira, sizeof(spira));</span></a>
-<a name="378"><span class="lineNum"> 378 </span> :<span class="lineCov"> 1 : if (r &lt; sizeof(spira.hdr))</span></a>
-<a name="379"><span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : err(1, &quot;reading %s gave %i&quot;, argv[1], r);</span></a>
-<a name="380"><span class="lineNum"> 380 </span> :<span class="lineCov"> 1 : if (verbose)</span></a>
-<a name="381"><span class="lineNum"> 381 </span> :<span class="lineNoCov"> 0 : printf(&quot;verbose: read spira %u bytes\n&quot;, r);</span></a>
-<a name="382"><span class="lineNum"> 382 </span> :<span class="lineCov"> 1 : close(fd);</span></a>
-<a name="383"><span class="lineNum"> 383 </span> : : </a>
-<a name="384"><span class="lineNum"> 384 </span> :<span class="lineCov"> 1 : undefined_bytes((void *)&amp;spira + r, sizeof(spira) - r);</span></a>
-<a name="385"><span class="lineNum"> 385 </span> : : </a>
-<a name="386"><span class="lineNum"> 386 </span> :<span class="lineCov"> 1 : base_addr = be64_to_cpu(spira.ntuples.heap.addr);</span></a>
-<a name="387"><span class="lineNum"> 387 </span> : : }</a>
-<a name="388"><span class="lineNum"> 388 </span> : : </a>
-<a name="389"><span class="lineNum"> 389 </span> :<span class="lineCov"> 2 : if (!base_addr)</span></a>
-<a name="390"><span class="lineNum"> 390 </span> :<span class="lineNoCov"> 0 : errx(1, &quot;Invalid base addr&quot;);</span></a>
-<a name="391"><span class="lineNum"> 391 </span> :<span class="lineCov"> 2 : if (verbose)</span></a>
-<a name="392"><span class="lineNum"> 392 </span> :<span class="lineNoCov"> 0 : printf(&quot;verbose: map.base_addr = %llx\n&quot;, (long long)base_addr);</span></a>
+<a name="353"><span class="lineNum"> 353 </span> : : &quot; -8 Force PVR to POWER8\n&quot;</a>
+<a name="354"><span class="lineNum"> 354 </span> : : &quot; -8E Force PVR to POWER8E\n&quot;</a>
+<a name="355"><span class="lineNum"> 355 </span> : : &quot; -9 Force PVR to POWER9 (nimbus)\n&quot;</a>
+<a name="356"><span class="lineNum"> 356 </span> : : &quot; -9P Force PVR to POWER9P (Axone)\n&quot;</a>
+<a name="357"><span class="lineNum"> 357 </span> : : &quot; -10 Force PVR to POWER10\n&quot;</a>
+<a name="358"><span class="lineNum"> 358 </span> : : &quot;\n&quot;</a>
+<a name="359"><span class="lineNum"> 359 </span> : : &quot;When no PVR is specified -8 is assumed&quot;</a>
+<a name="360"><span class="lineNum"> 360 </span> : : &quot;\n&quot;</a>
+<a name="361"><span class="lineNum"> 361 </span> : : &quot;Pipe to 'dtc -I dtb -O dts' for human readable output\n&quot;);</a>
+<a name="362"><span class="lineNum"> 362 </span> : : }</a>
+<a name="363"><span class="lineNum"> 363 </span> : : </a>
+<a name="364"><span class="lineNum"> 364 </span> : : /* We don't have phys mapping for P8 */</a>
+<a name="365"><span class="lineNum"> 365 </span> :<span class="lineCov"> 2 : if (proc_gen != proc_gen_p8)</span></a>
+<a name="366"><span class="lineNum"> 366 </span> :<span class="lineNoCov"> 0 : phys_map_init(fake_pvr);</span></a>
+<a name="367"><span class="lineNum"> 367 </span> : : </a>
+<a name="368"><span class="lineNum"> 368 </span> : : /* Copy in spira dump (assumes little has changed!). */</a>
+<a name="369"><span class="lineNum"> 369 </span> :<span class="lineCov"> 2 : if (new_spira) {</span></a>
+<a name="370"><span class="lineNum"> 370 </span> :<span class="lineCov"> 1 : fd = open(argv[1], O_RDONLY);</span></a>
+<a name="371"><span class="lineNum"> 371 </span> :<span class="lineCov"> 1 : if (fd &lt; 0)</span></a>
+<a name="372"><span class="lineNum"> 372 </span> :<span class="lineNoCov"> 0 : err(1, &quot;opening %s&quot;, argv[1]);</span></a>
+<a name="373"><span class="lineNum"> 373 </span> :<span class="lineCov"> 1 : r = read(fd, &amp;spirah, sizeof(spirah));</span></a>
+<a name="374"><span class="lineNum"> 374 </span> :<span class="lineCov"> 1 : if (r &lt; sizeof(spirah.hdr))</span></a>
+<a name="375"><span class="lineNum"> 375 </span> :<span class="lineNoCov"> 0 : err(1, &quot;reading %s gave %i&quot;, argv[1], r);</span></a>
+<a name="376"><span class="lineNum"> 376 </span> :<span class="lineCov"> 1 : if (verbose)</span></a>
+<a name="377"><span class="lineNum"> 377 </span> :<span class="lineNoCov"> 0 : printf(&quot;verbose: read spirah %u bytes\n&quot;, r);</span></a>
+<a name="378"><span class="lineNum"> 378 </span> :<span class="lineCov"> 1 : close(fd);</span></a>
+<a name="379"><span class="lineNum"> 379 </span> : : </a>
+<a name="380"><span class="lineNum"> 380 </span> :<span class="lineCov"> 1 : undefined_bytes((void *)&amp;spirah + r, sizeof(spirah) - r);</span></a>
+<a name="381"><span class="lineNum"> 381 </span> : : </a>
+<a name="382"><span class="lineNum"> 382 </span> :<span class="lineCov"> 1 : base_addr = be64_to_cpu(spirah.ntuples.hs_data_area.addr);</span></a>
+<a name="383"><span class="lineNum"> 383 </span> : : } else {</a>
+<a name="384"><span class="lineNum"> 384 </span> :<span class="lineCov"> 1 : fd = open(argv[1], O_RDONLY);</span></a>
+<a name="385"><span class="lineNum"> 385 </span> :<span class="lineCov"> 1 : if (fd &lt; 0)</span></a>
+<a name="386"><span class="lineNum"> 386 </span> :<span class="lineNoCov"> 0 : err(1, &quot;opening %s&quot;, argv[1]);</span></a>
+<a name="387"><span class="lineNum"> 387 </span> :<span class="lineCov"> 1 : r = read(fd, &amp;spira, sizeof(spira));</span></a>
+<a name="388"><span class="lineNum"> 388 </span> :<span class="lineCov"> 1 : if (r &lt; sizeof(spira.hdr))</span></a>
+<a name="389"><span class="lineNum"> 389 </span> :<span class="lineNoCov"> 0 : err(1, &quot;reading %s gave %i&quot;, argv[1], r);</span></a>
+<a name="390"><span class="lineNum"> 390 </span> :<span class="lineCov"> 1 : if (verbose)</span></a>
+<a name="391"><span class="lineNum"> 391 </span> :<span class="lineNoCov"> 0 : printf(&quot;verbose: read spira %u bytes\n&quot;, r);</span></a>
+<a name="392"><span class="lineNum"> 392 </span> :<span class="lineCov"> 1 : close(fd);</span></a>
<a name="393"><span class="lineNum"> 393 </span> : : </a>
-<a name="394"><span class="lineNum"> 394 </span> :<span class="lineCov"> 2 : fd = open(argv[2], O_RDONLY);</span></a>
-<a name="395"><span class="lineNum"> 395 </span> :<span class="lineCov"> 2 : if (fd &lt; 0)</span></a>
-<a name="396"><span class="lineNum"> 396 </span> :<span class="lineNoCov"> 0 : err(1, &quot;opening %s&quot;, argv[2]);</span></a>
-<a name="397"><span class="lineNum"> 397 </span> :<span class="lineCov"> 2 : spira_heap_size = lseek(fd, 0, SEEK_END);</span></a>
-<a name="398"><span class="lineNum"> 398 </span> :<span class="lineCov"> 2 : if (spira_heap_size &lt; 0)</span></a>
-<a name="399"><span class="lineNum"> 399 </span> :<span class="lineNoCov"> 0 : err(1, &quot;lseek on %s&quot;, argv[2]);</span></a>
-<a name="400"><span class="lineNum"> 400 </span> :<span class="lineCov"> 2 : spira_heap = mmap(NULL, spira_heap_size, PROT_READ, MAP_SHARED, fd, 0);</span></a>
-<a name="401"><span class="lineNum"> 401 </span> :<span class="lineCov"> 2 : if (spira_heap == MAP_FAILED)</span></a>
-<a name="402"><span class="lineNum"> 402 </span> :<span class="lineNoCov"> 0 : err(1, &quot;mmaping %s&quot;, argv[3]);</span></a>
-<a name="403"><span class="lineNum"> 403 </span> :<span class="lineCov"> 2 : if (verbose)</span></a>
-<a name="404"><span class="lineNum"> 404 </span> :<span class="lineNoCov"> 0 : printf(&quot;verbose: mapped %zu at %p\n&quot;,</span></a>
-<a name="405"><span class="lineNum"> 405 </span> : : spira_heap_size, spira_heap);</a>
-<a name="406"><span class="lineNum"> 406 </span> :<span class="lineCov"> 2 : close(fd);</span></a>
-<a name="407"><span class="lineNum"> 407 </span> : : </a>
-<a name="408"><span class="lineNum"> 408 </span> :<span class="lineCov"> 2 : if (new_spira)</span></a>
-<a name="409"><span class="lineNum"> 409 </span> :<span class="lineCov"> 1 : spiras = (struct spiras *)spira_heap;</span></a>
-<a name="410"><span class="lineNum"> 410 </span> : : </a>
-<a name="411"><span class="lineNum"> 411 </span> :<span class="lineCov"> 2 : if (quiet) {</span></a>
-<a name="412"><span class="lineNum"> 412 </span> :<span class="lineNoCov"> 0 : fclose(stdout);</span></a>
-<a name="413"><span class="lineNum"> 413 </span> :<span class="lineNoCov"> 0 : fclose(stderr);</span></a>
-<a name="414"><span class="lineNum"> 414 </span> : : }</a>
-<a name="415"><span class="lineNum"> 415 </span> : : </a>
-<a name="416"><span class="lineNum"> 416 </span> :<span class="lineCov"> 2 : dt_root = dt_new_root(&quot;&quot;);</span></a>
+<a name="394"><span class="lineNum"> 394 </span> :<span class="lineCov"> 1 : undefined_bytes((void *)&amp;spira + r, sizeof(spira) - r);</span></a>
+<a name="395"><span class="lineNum"> 395 </span> : : </a>
+<a name="396"><span class="lineNum"> 396 </span> :<span class="lineCov"> 1 : base_addr = be64_to_cpu(spira.ntuples.heap.addr);</span></a>
+<a name="397"><span class="lineNum"> 397 </span> : : }</a>
+<a name="398"><span class="lineNum"> 398 </span> : : </a>
+<a name="399"><span class="lineNum"> 399 </span> :<span class="lineCov"> 2 : if (!base_addr)</span></a>
+<a name="400"><span class="lineNum"> 400 </span> :<span class="lineNoCov"> 0 : errx(1, &quot;Invalid base addr&quot;);</span></a>
+<a name="401"><span class="lineNum"> 401 </span> :<span class="lineCov"> 2 : if (verbose)</span></a>
+<a name="402"><span class="lineNum"> 402 </span> :<span class="lineNoCov"> 0 : printf(&quot;verbose: map.base_addr = %llx\n&quot;, (long long)base_addr);</span></a>
+<a name="403"><span class="lineNum"> 403 </span> : : </a>
+<a name="404"><span class="lineNum"> 404 </span> :<span class="lineCov"> 2 : fd = open(argv[2], O_RDONLY);</span></a>
+<a name="405"><span class="lineNum"> 405 </span> :<span class="lineCov"> 2 : if (fd &lt; 0)</span></a>
+<a name="406"><span class="lineNum"> 406 </span> :<span class="lineNoCov"> 0 : err(1, &quot;opening %s&quot;, argv[2]);</span></a>
+<a name="407"><span class="lineNum"> 407 </span> :<span class="lineCov"> 2 : spira_heap_size = lseek(fd, 0, SEEK_END);</span></a>
+<a name="408"><span class="lineNum"> 408 </span> :<span class="lineCov"> 2 : if (spira_heap_size &lt; 0)</span></a>
+<a name="409"><span class="lineNum"> 409 </span> :<span class="lineNoCov"> 0 : err(1, &quot;lseek on %s&quot;, argv[2]);</span></a>
+<a name="410"><span class="lineNum"> 410 </span> :<span class="lineCov"> 2 : spira_heap = mmap(NULL, spira_heap_size, PROT_READ, MAP_SHARED, fd, 0);</span></a>
+<a name="411"><span class="lineNum"> 411 </span> :<span class="lineCov"> 2 : if (spira_heap == MAP_FAILED)</span></a>
+<a name="412"><span class="lineNum"> 412 </span> :<span class="lineNoCov"> 0 : err(1, &quot;mmaping %s&quot;, argv[3]);</span></a>
+<a name="413"><span class="lineNum"> 413 </span> :<span class="lineCov"> 2 : if (verbose)</span></a>
+<a name="414"><span class="lineNum"> 414 </span> :<span class="lineNoCov"> 0 : printf(&quot;verbose: mapped %zu at %p\n&quot;,</span></a>
+<a name="415"><span class="lineNum"> 415 </span> : : spira_heap_size, spira_heap);</a>
+<a name="416"><span class="lineNum"> 416 </span> :<span class="lineCov"> 2 : close(fd);</span></a>
<a name="417"><span class="lineNum"> 417 </span> : : </a>
-<a name="418"><span class="lineNum"> 418 </span> :<span class="lineCov"> 2 : if(parse_hdat(false) &lt; 0) {</span></a>
-<a name="419"><span class="lineNum"> 419 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;FATAL ERROR parsing HDAT\n&quot;);</span></a>
-<a name="420"><span class="lineNum"> 420 </span> :<span class="lineNoCov"> 0 : dt_free(dt_root);</span></a>
-<a name="421"><span class="lineNum"> 421 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span></a>
-<a name="422"><span class="lineNum"> 422 </span> : : }</a>
-<a name="423"><span class="lineNum"> 423 </span> : : </a>
-<a name="424"><span class="lineNum"> 424 </span> :<span class="lineCov"> 2 : mem_region_init();</span></a>
-<a name="425"><span class="lineNum"> 425 </span> :<span class="lineCov"> 2 : mem_region_release_unused();</span></a>
-<a name="426"><span class="lineNum"> 426 </span> : : </a>
-<a name="427"><span class="lineNum"> 427 </span> :<span class="lineCov"> 2 : if (!blobs)</span></a>
-<a name="428"><span class="lineNum"> 428 </span> :<span class="lineCov"> 2 : squash_blobs(dt_root);</span></a>
-<a name="429"><span class="lineNum"> 429 </span> : : </a>
-<a name="430"><span class="lineNum"> 430 </span> :<span class="lineCov"> 2 : if (!quiet)</span></a>
-<a name="431"><span class="lineNum"> 431 </span> :<span class="lineCov"> 2 : dump_hdata_fdt(dt_root);</span></a>
-<a name="432"><span class="lineNum"> 432 </span> : : </a>
-<a name="433"><span class="lineNum"> 433 </span> :<span class="lineCov"> 2 : dt_free(dt_root);</span></a>
-<a name="434"><span class="lineNum"> 434 </span> :<span class="lineCov"> 2 : return 0;</span></a>
-<a name="435"><span class="lineNum"> 435 </span> : : }</a>
+<a name="418"><span class="lineNum"> 418 </span> :<span class="lineCov"> 2 : if (new_spira)</span></a>
+<a name="419"><span class="lineNum"> 419 </span> :<span class="lineCov"> 1 : spiras = (struct spiras *)spira_heap;</span></a>
+<a name="420"><span class="lineNum"> 420 </span> : : </a>
+<a name="421"><span class="lineNum"> 421 </span> :<span class="lineCov"> 2 : if (quiet) {</span></a>
+<a name="422"><span class="lineNum"> 422 </span> :<span class="lineNoCov"> 0 : fclose(stdout);</span></a>
+<a name="423"><span class="lineNum"> 423 </span> :<span class="lineNoCov"> 0 : fclose(stderr);</span></a>
+<a name="424"><span class="lineNum"> 424 </span> : : }</a>
+<a name="425"><span class="lineNum"> 425 </span> : : </a>
+<a name="426"><span class="lineNum"> 426 </span> :<span class="lineCov"> 2 : dt_root = dt_new_root(&quot;&quot;);</span></a>
+<a name="427"><span class="lineNum"> 427 </span> : : </a>
+<a name="428"><span class="lineNum"> 428 </span> :<span class="lineCov"> 2 : if(parse_hdat(false) &lt; 0) {</span></a>
+<a name="429"><span class="lineNum"> 429 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;FATAL ERROR parsing HDAT\n&quot;);</span></a>
+<a name="430"><span class="lineNum"> 430 </span> :<span class="lineNoCov"> 0 : dt_free(dt_root);</span></a>
+<a name="431"><span class="lineNum"> 431 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span></a>
+<a name="432"><span class="lineNum"> 432 </span> : : }</a>
+<a name="433"><span class="lineNum"> 433 </span> : : </a>
+<a name="434"><span class="lineNum"> 434 </span> :<span class="lineCov"> 2 : mem_region_init();</span></a>
+<a name="435"><span class="lineNum"> 435 </span> :<span class="lineCov"> 2 : mem_region_release_unused();</span></a>
+<a name="436"><span class="lineNum"> 436 </span> : : </a>
+<a name="437"><span class="lineNum"> 437 </span> :<span class="lineCov"> 2 : if (!blobs)</span></a>
+<a name="438"><span class="lineNum"> 438 </span> :<span class="lineCov"> 2 : squash_blobs(dt_root);</span></a>
+<a name="439"><span class="lineNum"> 439 </span> : : </a>
+<a name="440"><span class="lineNum"> 440 </span> :<span class="lineCov"> 2 : if (!quiet)</span></a>
+<a name="441"><span class="lineNum"> 441 </span> :<span class="lineCov"> 2 : dump_hdata_fdt(dt_root);</span></a>
+<a name="442"><span class="lineNum"> 442 </span> : : </a>
+<a name="443"><span class="lineNum"> 443 </span> :<span class="lineCov"> 2 : dt_free(dt_root);</span></a>
+<a name="444"><span class="lineNum"> 444 </span> :<span class="lineCov"> 2 : return 0;</span></a>
+<a name="445"><span class="lineNum"> 445 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/hdata/test/index-sort-b.html b/coverage-report/hdata/test/index-sort-b.html
index 6842e2c..10fcb19 100644
--- a/coverage-report/hdata/test/index-sort-b.html
+++ b/coverage-report/hdata/test/index-sort-b.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">104</td>
- <td class="headerCovTableEntry">163</td>
- <td class="headerCovTableEntryLo">63.8 %</td>
+ <td class="headerCovTableEntry">105</td>
+ <td class="headerCovTableEntry">168</td>
+ <td class="headerCovTableEntryLo">62.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="hdata_to_dt.c.gcov.html">hdata_to_dt.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=64 height=10 alt="63.8%"><img src="../../snow.png" width=36 height=10 alt="63.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=62 height=10 alt="62.5%"><img src="../../snow.png" width=38 height=10 alt="62.5%"></td></tr></table>
</td>
- <td class="coverPerLo">63.8&nbsp;%</td>
- <td class="coverNumLo">104 / 163</td>
+ <td class="coverPerLo">62.5&nbsp;%</td>
+ <td class="coverNumLo">105 / 168</td>
<td class="coverPerLo">57.1&nbsp;%</td>
<td class="coverNumLo">8 / 14</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/hdata/test/index-sort-f.html b/coverage-report/hdata/test/index-sort-f.html
index 93724e1..cab53d3 100644
--- a/coverage-report/hdata/test/index-sort-f.html
+++ b/coverage-report/hdata/test/index-sort-f.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">104</td>
- <td class="headerCovTableEntry">163</td>
- <td class="headerCovTableEntryLo">63.8 %</td>
+ <td class="headerCovTableEntry">105</td>
+ <td class="headerCovTableEntry">168</td>
+ <td class="headerCovTableEntryLo">62.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="hdata_to_dt.c.gcov.html">hdata_to_dt.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=64 height=10 alt="63.8%"><img src="../../snow.png" width=36 height=10 alt="63.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=62 height=10 alt="62.5%"><img src="../../snow.png" width=38 height=10 alt="62.5%"></td></tr></table>
</td>
- <td class="coverPerLo">63.8&nbsp;%</td>
- <td class="coverNumLo">104 / 163</td>
+ <td class="coverPerLo">62.5&nbsp;%</td>
+ <td class="coverNumLo">105 / 168</td>
<td class="coverPerLo">57.1&nbsp;%</td>
<td class="coverNumLo">8 / 14</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/hdata/test/index-sort-l.html b/coverage-report/hdata/test/index-sort-l.html
index fdfc2fe..2c57ba3 100644
--- a/coverage-report/hdata/test/index-sort-l.html
+++ b/coverage-report/hdata/test/index-sort-l.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">104</td>
- <td class="headerCovTableEntry">163</td>
- <td class="headerCovTableEntryLo">63.8 %</td>
+ <td class="headerCovTableEntry">105</td>
+ <td class="headerCovTableEntry">168</td>
+ <td class="headerCovTableEntryLo">62.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="hdata_to_dt.c.gcov.html">hdata_to_dt.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=64 height=10 alt="63.8%"><img src="../../snow.png" width=36 height=10 alt="63.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=62 height=10 alt="62.5%"><img src="../../snow.png" width=38 height=10 alt="62.5%"></td></tr></table>
</td>
- <td class="coverPerLo">63.8&nbsp;%</td>
- <td class="coverNumLo">104 / 163</td>
+ <td class="coverPerLo">62.5&nbsp;%</td>
+ <td class="coverNumLo">105 / 168</td>
<td class="coverPerLo">57.1&nbsp;%</td>
<td class="coverNumLo">8 / 14</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/hdata/test/index.html b/coverage-report/hdata/test/index.html
index 32d505f..1721a23 100644
--- a/coverage-report/hdata/test/index.html
+++ b/coverage-report/hdata/test/index.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">104</td>
- <td class="headerCovTableEntry">163</td>
- <td class="headerCovTableEntryLo">63.8 %</td>
+ <td class="headerCovTableEntry">105</td>
+ <td class="headerCovTableEntry">168</td>
+ <td class="headerCovTableEntryLo">62.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="hdata_to_dt.c.gcov.html">hdata_to_dt.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=64 height=10 alt="63.8%"><img src="../../snow.png" width=36 height=10 alt="63.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=62 height=10 alt="62.5%"><img src="../../snow.png" width=38 height=10 alt="62.5%"></td></tr></table>
</td>
- <td class="coverPerLo">63.8&nbsp;%</td>
- <td class="coverNumLo">104 / 163</td>
+ <td class="coverPerLo">62.5&nbsp;%</td>
+ <td class="coverNumLo">105 / 168</td>
<td class="coverPerLo">57.1&nbsp;%</td>
<td class="coverNumLo">8 / 14</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/hdata/tpmrel.c.func-sort-c.html b/coverage-report/hdata/tpmrel.c.func-sort-c.html
index f4dfb06..8d11a32 100644
--- a/coverage-report/hdata/tpmrel.c.func-sort-c.html
+++ b/coverage-report/hdata/tpmrel.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/hdata/tpmrel.c.func.html b/coverage-report/hdata/tpmrel.c.func.html
index 8a8b2b2..92d8ca0 100644
--- a/coverage-report/hdata/tpmrel.c.func.html
+++ b/coverage-report/hdata/tpmrel.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/hdata/tpmrel.c.gcov.html b/coverage-report/hdata/tpmrel.c.gcov.html
index 224400e..e9a9947 100644
--- a/coverage-report/hdata/tpmrel.c.gcov.html
+++ b/coverage-report/hdata/tpmrel.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/hdata/vpd-common.c.func-sort-c.html b/coverage-report/hdata/vpd-common.c.func-sort-c.html
index bed52a1..a39ed99 100644
--- a/coverage-report/hdata/vpd-common.c.func-sort-c.html
+++ b/coverage-report/hdata/vpd-common.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/hdata/vpd-common.c.func.html b/coverage-report/hdata/vpd-common.c.func.html
index 9ab289d..012fb7a 100644
--- a/coverage-report/hdata/vpd-common.c.func.html
+++ b/coverage-report/hdata/vpd-common.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/hdata/vpd-common.c.gcov.html b/coverage-report/hdata/vpd-common.c.gcov.html
index f475a8c..aff3e13 100644
--- a/coverage-report/hdata/vpd-common.c.gcov.html
+++ b/coverage-report/hdata/vpd-common.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/hdata/vpd.c.func-sort-c.html b/coverage-report/hdata/vpd.c.func-sort-c.html
index 04677a9..c95316b 100644
--- a/coverage-report/hdata/vpd.c.func-sort-c.html
+++ b/coverage-report/hdata/vpd.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">17</td>
@@ -69,79 +69,79 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#573">sysvpd_parse_opp</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#574">sysvpd_parse_opp</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#257">vpd_opfr_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#258">vpd_opfr_parse</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#541">dt_add_model_name</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#542">dt_add_model_name</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#407">dt_init_vpd_node</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#408">dt_init_vpd_node</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#677">iohub_vpd_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#678">iohub_vpd_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#618">sysvpd_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#619">sysvpd_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#592">sysvpd_parse_legacy</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#593">sysvpd_parse_legacy</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#724">vpd_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#725">vpd_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#655">iokid_vpd_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#656">iokid_vpd_parse</a></td>
<td class="coverFnHi">3</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#241">dt_add_proc_vendor</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#242">dt_add_proc_vendor</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#294">vpd_vrml_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#295">vpd_vrml_parse</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#711">_vpd_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#712">_vpd_parse</a></td>
<td class="coverFnHi">14</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#201">card_info_lookup</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#202">card_info_lookup</a></td>
<td class="coverFnHi">24</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#313">vpd_vini_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#314">vpd_vini_parse</a></td>
<td class="coverFnHi">24</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#491">dt_add_vpd_node</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#492">dt_add_vpd_node</a></td>
<td class="coverFnHi">27</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#396">vpd_data_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#397">vpd_data_parse</a></td>
<td class="coverFnHi">30</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#387">valid_child_entry</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#388">valid_child_entry</a></td>
<td class="coverFnHi">139</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#187">vpd_map_name</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#188">vpd_map_name</a></td>
<td class="coverFnHi">157</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#212">dt_add_prop_sanitize_val</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#213">dt_add_prop_sanitize_val</a></td>
<td class="coverFnHi">218</td>
</tr>
</table>
diff --git a/coverage-report/hdata/vpd.c.func.html b/coverage-report/hdata/vpd.c.func.html
index 55b2c42..c7258b6 100644
--- a/coverage-report/hdata/vpd.c.func.html
+++ b/coverage-report/hdata/vpd.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">17</td>
@@ -69,79 +69,79 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="vpd.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#711">_vpd_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#712">_vpd_parse</a></td>
<td class="coverFnHi">14</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#201">card_info_lookup</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#202">card_info_lookup</a></td>
<td class="coverFnHi">24</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#541">dt_add_model_name</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#542">dt_add_model_name</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#241">dt_add_proc_vendor</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#242">dt_add_proc_vendor</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#212">dt_add_prop_sanitize_val</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#213">dt_add_prop_sanitize_val</a></td>
<td class="coverFnHi">218</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#491">dt_add_vpd_node</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#492">dt_add_vpd_node</a></td>
<td class="coverFnHi">27</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#407">dt_init_vpd_node</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#408">dt_init_vpd_node</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#677">iohub_vpd_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#678">iohub_vpd_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#655">iokid_vpd_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#656">iokid_vpd_parse</a></td>
<td class="coverFnHi">3</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#618">sysvpd_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#619">sysvpd_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#592">sysvpd_parse_legacy</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#593">sysvpd_parse_legacy</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#573">sysvpd_parse_opp</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#574">sysvpd_parse_opp</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#387">valid_child_entry</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#388">valid_child_entry</a></td>
<td class="coverFnHi">139</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#396">vpd_data_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#397">vpd_data_parse</a></td>
<td class="coverFnHi">30</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#187">vpd_map_name</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#188">vpd_map_name</a></td>
<td class="coverFnHi">157</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#257">vpd_opfr_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#258">vpd_opfr_parse</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#724">vpd_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#725">vpd_parse</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#313">vpd_vini_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#314">vpd_vini_parse</a></td>
<td class="coverFnHi">24</td>
</tr>
<tr>
- <td class="coverFn"><a href="vpd.c.gcov.html#294">vpd_vrml_parse</a></td>
+ <td class="coverFn"><a href="vpd.c.gcov.html#295">vpd_vrml_parse</a></td>
<td class="coverFnHi">6</td>
</tr>
</table>
diff --git a/coverage-report/hdata/vpd.c.gcov.html b/coverage-report/hdata/vpd.c.gcov.html
index 4edc50c..b5f121b 100644
--- a/coverage-report/hdata/vpd.c.gcov.html
+++ b/coverage-report/hdata/vpd.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">17</td>
@@ -176,665 +176,666 @@
<a name="105"><span class="lineNum"> 105 </span> : : {&quot;EV&quot;, &quot;enclosure&quot;},</a>
<a name="106"><span class="lineNum"> 106 </span> : : </a>
<a name="107"><span class="lineNum"> 107 </span> : : {&quot;FM&quot;, &quot;frame&quot;},</a>
-<a name="108"><span class="lineNum"> 108 </span> : : </a>
-<a name="109"><span class="lineNum"> 109 </span> : : {&quot;HB&quot;, &quot;host-rio-pci-card&quot;},</a>
-<a name="110"><span class="lineNum"> 110 </span> : : {&quot;HD&quot;, &quot;high-speed-card&quot;},</a>
-<a name="111"><span class="lineNum"> 111 </span> : : {&quot;HM&quot;, &quot;hmc-connector&quot;},</a>
-<a name="112"><span class="lineNum"> 112 </span> : : </a>
-<a name="113"><span class="lineNum"> 113 </span> : : {&quot;IB&quot;, &quot;io-backplane&quot;},</a>
-<a name="114"><span class="lineNum"> 114 </span> : : {&quot;IC&quot;, &quot;io-card&quot;},</a>
-<a name="115"><span class="lineNum"> 115 </span> : : {&quot;ID&quot;, &quot;ide-connector&quot;},</a>
-<a name="116"><span class="lineNum"> 116 </span> : : {&quot;II&quot;, &quot;io-drawer-led&quot;},</a>
-<a name="117"><span class="lineNum"> 117 </span> : : {&quot;IP&quot;, &quot;interplane-card&quot;},</a>
-<a name="118"><span class="lineNum"> 118 </span> : : {&quot;IS&quot;, &quot;smp-vbus-cable&quot;},</a>
-<a name="119"><span class="lineNum"> 119 </span> : : {&quot;IT&quot;, &quot;enclosure-cable&quot;},</a>
-<a name="120"><span class="lineNum"> 120 </span> : : {&quot;IV&quot;, &quot;io-enclosure&quot;},</a>
-<a name="121"><span class="lineNum"> 121 </span> : : </a>
-<a name="122"><span class="lineNum"> 122 </span> : : {&quot;KV&quot;, &quot;keyboard-led&quot;},</a>
-<a name="123"><span class="lineNum"> 123 </span> : : </a>
-<a name="124"><span class="lineNum"> 124 </span> : : {&quot;L2&quot;, &quot;l2-cache-module&quot;},</a>
-<a name="125"><span class="lineNum"> 125 </span> : : {&quot;L3&quot;, &quot;l3-cache-module&quot;},</a>
-<a name="126"><span class="lineNum"> 126 </span> : : {&quot;LC&quot;, &quot;squadrons-light-connector&quot;},</a>
-<a name="127"><span class="lineNum"> 127 </span> : : {&quot;LR&quot;, &quot;p7ih-connector&quot;},</a>
-<a name="128"><span class="lineNum"> 128 </span> : : {&quot;LO&quot;, &quot;system-locate-led&quot;},</a>
-<a name="129"><span class="lineNum"> 129 </span> : : {&quot;LT&quot;, &quot;squadrons-light-strip&quot;},</a>
-<a name="130"><span class="lineNum"> 130 </span> : : </a>
-<a name="131"><span class="lineNum"> 131 </span> : : {&quot;MB&quot;, &quot;media-backplane&quot;},</a>
-<a name="132"><span class="lineNum"> 132 </span> : : {&quot;ME&quot;, &quot;map-extension&quot;},</a>
-<a name="133"><span class="lineNum"> 133 </span> : : {&quot;MM&quot;, &quot;mip-meter&quot;},</a>
-<a name="134"><span class="lineNum"> 134 </span> : : {&quot;MS&quot;, &quot;ms-dimm&quot;},</a>
-<a name="135"><span class="lineNum"> 135 </span> : : </a>
-<a name="136"><span class="lineNum"> 136 </span> : : {&quot;NB&quot;, &quot;nvram-battery&quot;},</a>
-<a name="137"><span class="lineNum"> 137 </span> : : {&quot;NC&quot;, &quot;sp-node-controller&quot;},</a>
-<a name="138"><span class="lineNum"> 138 </span> : : {&quot;ND&quot;, &quot;numa-dimm&quot;},</a>
-<a name="139"><span class="lineNum"> 139 </span> : : </a>
-<a name="140"><span class="lineNum"> 140 </span> : : {&quot;OD&quot;, &quot;cuod-card&quot;},</a>
-<a name="141"><span class="lineNum"> 141 </span> : : {&quot;OP&quot;, &quot;op-panel&quot;},</a>
-<a name="142"><span class="lineNum"> 142 </span> : : {&quot;OS&quot;, &quot;oscillator&quot;},</a>
-<a name="143"><span class="lineNum"> 143 </span> : : </a>
-<a name="144"><span class="lineNum"> 144 </span> : : {&quot;P2&quot;, &quot;ioc&quot;},</a>
-<a name="145"><span class="lineNum"> 145 </span> : : {&quot;P5&quot;, &quot;ioc-bridge&quot;},</a>
-<a name="146"><span class="lineNum"> 146 </span> : : {&quot;PB&quot;, &quot;io-drawer-backplane&quot;},</a>
-<a name="147"><span class="lineNum"> 147 </span> : : {&quot;PC&quot;, &quot;power-capacitor&quot;},</a>
-<a name="148"><span class="lineNum"> 148 </span> : : {&quot;PD&quot;, &quot;processor-card&quot;},</a>
-<a name="149"><span class="lineNum"> 149 </span> : : {&quot;PF&quot;, &quot;processor&quot;},</a>
-<a name="150"><span class="lineNum"> 150 </span> : : {&quot;PI&quot;, &quot;ioc-phb&quot;},</a>
-<a name="151"><span class="lineNum"> 151 </span> : : {&quot;PO&quot;, &quot;spcn&quot;},</a>
-<a name="152"><span class="lineNum"> 152 </span> : : {&quot;PN&quot;, &quot;spcn-connector&quot;},</a>
-<a name="153"><span class="lineNum"> 153 </span> : : {&quot;PR&quot;, &quot;pci-riser-card&quot;},</a>
-<a name="154"><span class="lineNum"> 154 </span> : : {&quot;PS&quot;, &quot;power-supply&quot;},</a>
-<a name="155"><span class="lineNum"> 155 </span> : : {&quot;PT&quot;, &quot;pass-through-card&quot;},</a>
-<a name="156"><span class="lineNum"> 156 </span> : : {&quot;PX&quot;, &quot;psc-sync-card&quot;},</a>
-<a name="157"><span class="lineNum"> 157 </span> : : {&quot;PW&quot;, &quot;power-connector&quot;},</a>
-<a name="158"><span class="lineNum"> 158 </span> : : </a>
-<a name="159"><span class="lineNum"> 159 </span> : : {&quot;RG&quot;, &quot;regulator&quot;},</a>
-<a name="160"><span class="lineNum"> 160 </span> : : {&quot;RI&quot;, &quot;riser&quot;},</a>
-<a name="161"><span class="lineNum"> 161 </span> : : {&quot;RK&quot;, &quot;rack-indicator&quot;},</a>
-<a name="162"><span class="lineNum"> 162 </span> : : {&quot;RW&quot;, &quot;riscwatch-connector&quot;},</a>
-<a name="163"><span class="lineNum"> 163 </span> : : </a>
-<a name="164"><span class="lineNum"> 164 </span> : : {&quot;SA&quot;, &quot;sys-attn-led&quot;},</a>
-<a name="165"><span class="lineNum"> 165 </span> : : {&quot;SB&quot;, &quot;backup-sysvpd&quot;},</a>
-<a name="166"><span class="lineNum"> 166 </span> : : {&quot;SC&quot;, &quot;scsi-connector&quot;},</a>
-<a name="167"><span class="lineNum"> 167 </span> : : {&quot;SD&quot;, &quot;sas-connector&quot;},</a>
-<a name="168"><span class="lineNum"> 168 </span> : : {&quot;SI&quot;, &quot;scsi-ide-converter&quot;},</a>
-<a name="169"><span class="lineNum"> 169 </span> : : {&quot;SL&quot;, &quot;phb-slot&quot;},</a>
-<a name="170"><span class="lineNum"> 170 </span> : : {&quot;SN&quot;, &quot;smp-cable-connector&quot;},</a>
-<a name="171"><span class="lineNum"> 171 </span> : : {&quot;SP&quot;, &quot;service-processor&quot;},</a>
-<a name="172"><span class="lineNum"> 172 </span> : : {&quot;SR&quot;, &quot;service-card&quot;},</a>
-<a name="173"><span class="lineNum"> 173 </span> : : {&quot;SS&quot;, &quot;soft-switch&quot;},</a>
-<a name="174"><span class="lineNum"> 174 </span> : : {&quot;SV&quot;, &quot;system-vpd&quot;},</a>
-<a name="175"><span class="lineNum"> 175 </span> : : {&quot;SY&quot;, &quot;legacy-sysvpd&quot;},</a>
-<a name="176"><span class="lineNum"> 176 </span> : : </a>
-<a name="177"><span class="lineNum"> 177 </span> : : {&quot;TD&quot;, &quot;tod-clock&quot;},</a>
-<a name="178"><span class="lineNum"> 178 </span> : : {&quot;TI&quot;, &quot;torrent-pcie-phb&quot;},</a>
-<a name="179"><span class="lineNum"> 179 </span> : : {&quot;TL&quot;, &quot;torrent-riser&quot;},</a>
-<a name="180"><span class="lineNum"> 180 </span> : : {&quot;TM&quot;, &quot;thermal-sensor&quot;},</a>
-<a name="181"><span class="lineNum"> 181 </span> : : {&quot;TP&quot;, &quot;tpmd-adapter&quot;},</a>
-<a name="182"><span class="lineNum"> 182 </span> : : {&quot;TR&quot;, &quot;torrent-bridge&quot;},</a>
-<a name="183"><span class="lineNum"> 183 </span> : : </a>
-<a name="184"><span class="lineNum"> 184 </span> : : {&quot;VV&quot;, &quot;root-node-vpd&quot;},</a>
-<a name="185"><span class="lineNum"> 185 </span> : : </a>
-<a name="186"><span class="lineNum"> 186 </span> : : {&quot;WD&quot;, &quot;water_device&quot;},</a>
-<a name="187"><span class="lineNum"> 187 </span> : : };</a>
-<a name="188"><span class="lineNum"> 188 </span> : : </a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 157 : static const char *vpd_map_name(const char *vpd_name)</span></a>
-<a name="190"><span class="lineNum"> 190 </span> : : {</a>
-<a name="191"><span class="lineNum"> 191 </span> : : int i;</a>
-<a name="192"><span class="lineNum"> 192 </span> : : </a>
-<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 5382 : for (i = 0; i &lt; ARRAY_SIZE(vpd_key_table); i++)</span></a>
-<a name="194"><span class="lineNum"> 194 </span> :<span class="lineCov"> 5382 : if (!strcmp(vpd_key_table[i].keyword, vpd_name))</span></a>
-<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 157 : return vpd_key_table[i].description;</span></a>
-<a name="196"><span class="lineNum"> 196 </span> : : </a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;VPD: Could not map FRU ID %s to a known name\n&quot;,</span></a>
-<a name="198"><span class="lineNum"> 198 </span> : : vpd_name);</a>
-<a name="199"><span class="lineNum"> 199 </span> : : </a>
-<a name="200"><span class="lineNum"> 200 </span> :<span class="lineNoCov"> 0 : return &quot;Unknown&quot;;</span></a>
-<a name="201"><span class="lineNum"> 201 </span> : : }</a>
-<a name="202"><span class="lineNum"> 202 </span> : : </a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 24 : static const struct card_info *card_info_lookup(char *ccin)</span></a>
-<a name="204"><span class="lineNum"> 204 </span> : : {</a>
-<a name="205"><span class="lineNum"> 205 </span> : : int i;</a>
-<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 474 : for(i = 0; i &lt; ARRAY_SIZE(card_table); i++)</span></a>
-<a name="207"><span class="lineNum"> 207 </span> : : /* CCIN is always 4 bytes in size */</a>
-<a name="208"><span class="lineNum"> 208 </span> :<span class="lineCov"> 466 : if (!strncmp(card_table[i].ccin, ccin, 4))</span></a>
-<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 16 : return &amp;card_table[i];</span></a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 8 : return NULL;</span></a>
-<a name="211"><span class="lineNum"> 211 </span> : : }</a>
-<a name="212"><span class="lineNum"> 212 </span> : : </a>
-<a name="213"><span class="lineNum"> 213 </span> : : /* Discard trailing spaces and populate device tree */</a>
-<a name="214"><span class="lineNum"> 214 </span> :<span class="lineCov"> 218 : static struct dt_property *dt_add_prop_sanitize_val(struct dt_node *node,</span></a>
-<a name="215"><span class="lineNum"> 215 </span> : : const char *name, const char *val, int vlen)</a>
-<a name="216"><span class="lineNum"> 216 </span> : : {</a>
-<a name="217"><span class="lineNum"> 217 </span> :<span class="lineCov"> 218 : char *prop = zalloc(vlen + 1);</span></a>
-<a name="218"><span class="lineNum"> 218 </span> : : int i;</a>
-<a name="219"><span class="lineNum"> 219 </span> :<span class="lineCov"> 218 : struct dt_property *p = NULL;</span></a>
-<a name="220"><span class="lineNum"> 220 </span> : : </a>
-<a name="221"><span class="lineNum"> 221 </span> :<span class="lineCov"> 218 : if (!prop)</span></a>
-<a name="222"><span class="lineNum"> 222 </span> :<span class="lineNoCov"> 0 : return p;</span></a>
-<a name="223"><span class="lineNum"> 223 </span> : : </a>
-<a name="224"><span class="lineNum"> 224 </span> :<span class="lineCov"> 218 : memcpy(prop, val, vlen);</span></a>
-<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 226 : for (i = vlen - 1; i &gt;= 0; i--) {</span></a>
-<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 226 : if (prop[i] != 0x20) {</span></a>
-<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 218 : prop[i + 1] = '\0';</span></a>
-<a name="228"><span class="lineNum"> 228 </span> :<span class="lineCov"> 218 : break;</span></a>
-<a name="229"><span class="lineNum"> 229 </span> : : }</a>
-<a name="230"><span class="lineNum"> 230 </span> : : }</a>
-<a name="231"><span class="lineNum"> 231 </span> : : </a>
-<a name="232"><span class="lineNum"> 232 </span> :<span class="lineCov"> 218 : if (i &gt;= 0 &amp;&amp; !dt_find_property(node, name))</span></a>
-<a name="233"><span class="lineNum"> 233 </span> :<span class="lineCov"> 218 : p = dt_add_property_string(node, name, prop);</span></a>
-<a name="234"><span class="lineNum"> 234 </span> : : </a>
-<a name="235"><span class="lineNum"> 235 </span> :<span class="lineCov"> 218 : free(prop);</span></a>
-<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 218 : return p;</span></a>
-<a name="237"><span class="lineNum"> 237 </span> : : }</a>
-<a name="238"><span class="lineNum"> 238 </span> : : </a>
-<a name="239"><span class="lineNum"> 239 </span> : : /*</a>
-<a name="240"><span class="lineNum"> 240 </span> : : * OpenPower system does not provide processor vendor name under FRU VPD.</a>
-<a name="241"><span class="lineNum"> 241 </span> : : * Parse processor module VPD to get vendor detail</a>
-<a name="242"><span class="lineNum"> 242 </span> : : */</a>
-<a name="243"><span class="lineNum"> 243 </span> :<span class="lineCov"> 6 : void dt_add_proc_vendor(struct dt_node *proc_node,</span></a>
-<a name="244"><span class="lineNum"> 244 </span> : : const void *mvpd, unsigned int mvpd_sz)</a>
-<a name="245"><span class="lineNum"> 245 </span> : : {</a>
-<a name="246"><span class="lineNum"> 246 </span> : : const void *kw;</a>
-<a name="247"><span class="lineNum"> 247 </span> : : uint8_t sz;</a>
-<a name="248"><span class="lineNum"> 248 </span> : : </a>
-<a name="249"><span class="lineNum"> 249 </span> :<span class="lineCov"> 6 : kw = vpd_find(mvpd, mvpd_sz, &quot;VINI&quot;, &quot;VN&quot;, &amp;sz);</span></a>
-<a name="250"><span class="lineNum"> 250 </span> :<span class="lineCov"> 6 : if (kw)</span></a>
-<a name="251"><span class="lineNum"> 251 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(proc_node, &quot;vendor&quot;, kw, sz);</span></a>
-<a name="252"><span class="lineNum"> 252 </span> :<span class="lineCov"> 6 : }</span></a>
-<a name="253"><span class="lineNum"> 253 </span> : : </a>
-<a name="254"><span class="lineNum"> 254 </span> : : /*</a>
-<a name="255"><span class="lineNum"> 255 </span> : : * For OpenPOWER, we only decipher OPFR records. While OP HDAT have VINI</a>
-<a name="256"><span class="lineNum"> 256 </span> : : * records too, populating the fields in there is optional. Also, there</a>
-<a name="257"><span class="lineNum"> 257 </span> : : * is an overlap in the fields contained therein.</a>
-<a name="258"><span class="lineNum"> 258 </span> : : */</a>
-<a name="259"><span class="lineNum"> 259 </span> :<span class="lineNoCov"> 0 : static void vpd_opfr_parse(struct dt_node *node,</span></a>
-<a name="260"><span class="lineNum"> 260 </span> : : const void *fruvpd, unsigned int fruvpd_sz)</a>
-<a name="261"><span class="lineNum"> 261 </span> : : {</a>
-<a name="262"><span class="lineNum"> 262 </span> : : const void *kw;</a>
-<a name="263"><span class="lineNum"> 263 </span> : : uint8_t sz;</a>
-<a name="264"><span class="lineNum"> 264 </span> : : </a>
-<a name="265"><span class="lineNum"> 265 </span> : : /* Vendor Name */</a>
-<a name="266"><span class="lineNum"> 266 </span> :<span class="lineNoCov"> 0 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;OPFR&quot;, &quot;VN&quot;, &amp;sz);</span></a>
-<a name="267"><span class="lineNum"> 267 </span> :<span class="lineNoCov"> 0 : if (kw)</span></a>
-<a name="268"><span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(node, &quot;vendor&quot;, kw, sz);</span></a>
-<a name="269"><span class="lineNum"> 269 </span> : : </a>
-<a name="270"><span class="lineNum"> 270 </span> : : /* FRU Description */</a>
-<a name="271"><span class="lineNum"> 271 </span> :<span class="lineNoCov"> 0 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;OPFR&quot;, &quot;DR&quot;, &amp;sz);</span></a>
-<a name="272"><span class="lineNum"> 272 </span> :<span class="lineNoCov"> 0 : if (kw)</span></a>
-<a name="273"><span class="lineNum"> 273 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(node, &quot;description&quot;, kw, sz);</span></a>
-<a name="274"><span class="lineNum"> 274 </span> : : </a>
-<a name="275"><span class="lineNum"> 275 </span> : : /* Part number */</a>
-<a name="276"><span class="lineNum"> 276 </span> :<span class="lineNoCov"> 0 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;OPFR&quot;, &quot;VP&quot;, &amp;sz);</span></a>
-<a name="277"><span class="lineNum"> 277 </span> :<span class="lineNoCov"> 0 : if (kw)</span></a>
-<a name="278"><span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(node, &quot;part-number&quot;, kw, sz);</span></a>
-<a name="279"><span class="lineNum"> 279 </span> : : </a>
-<a name="280"><span class="lineNum"> 280 </span> : : /* Serial number */</a>
-<a name="281"><span class="lineNum"> 281 </span> :<span class="lineNoCov"> 0 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;OPFR&quot;, &quot;VS&quot;, &amp;sz);</span></a>
-<a name="282"><span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : if (kw)</span></a>
-<a name="283"><span class="lineNum"> 283 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(node, &quot;serial-number&quot;, kw, sz);</span></a>
-<a name="284"><span class="lineNum"> 284 </span> : : </a>
-<a name="285"><span class="lineNum"> 285 </span> : : /* Build date in BCD */</a>
-<a name="286"><span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;OPFR&quot;, &quot;MB&quot;, &amp;sz);</span></a>
-<a name="287"><span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : if (kw)</span></a>
-<a name="288"><span class="lineNum"> 288 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(node, &quot;build-date&quot;, kw, sz);</span></a>
-<a name="289"><span class="lineNum"> 289 </span> : : </a>
-<a name="290"><span class="lineNum"> 290 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="291"><span class="lineNum"> 291 </span> : : }</a>
-<a name="292"><span class="lineNum"> 292 </span> : : </a>
-<a name="293"><span class="lineNum"> 293 </span> : : /*</a>
-<a name="294"><span class="lineNum"> 294 </span> : : * For CPUs, parse the VRML data.</a>
-<a name="295"><span class="lineNum"> 295 </span> : : */</a>
-<a name="296"><span class="lineNum"> 296 </span> :<span class="lineCov"> 6 : static void vpd_vrml_parse(struct dt_node *node,</span></a>
-<a name="297"><span class="lineNum"> 297 </span> : : const void *fruvpd, unsigned int fruvpd_sz)</a>
-<a name="298"><span class="lineNum"> 298 </span> : : {</a>
-<a name="299"><span class="lineNum"> 299 </span> : : const void *kw;</a>
-<a name="300"><span class="lineNum"> 300 </span> : : uint8_t sz;</a>
-<a name="301"><span class="lineNum"> 301 </span> : : </a>
-<a name="302"><span class="lineNum"> 302 </span> : : /* Part number */</a>
-<a name="303"><span class="lineNum"> 303 </span> :<span class="lineCov"> 6 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VRML&quot;, &quot;PN&quot;, &amp;sz);</span></a>
-<a name="304"><span class="lineNum"> 304 </span> :<span class="lineCov"> 6 : if (kw)</span></a>
-<a name="305"><span class="lineNum"> 305 </span> :<span class="lineCov"> 6 : dt_add_prop_sanitize_val(node, &quot;part-number&quot;, kw, sz);</span></a>
-<a name="306"><span class="lineNum"> 306 </span> : : </a>
-<a name="307"><span class="lineNum"> 307 </span> : : /* Serial number */</a>
-<a name="308"><span class="lineNum"> 308 </span> :<span class="lineCov"> 6 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VRML&quot;, &quot;SN&quot;, &amp;sz);</span></a>
-<a name="309"><span class="lineNum"> 309 </span> :<span class="lineCov"> 6 : if (kw)</span></a>
-<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 6 : dt_add_prop_sanitize_val(node, &quot;serial-number&quot;, kw, sz);</span></a>
-<a name="311"><span class="lineNum"> 311 </span> : : </a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 6 : return;</span></a>
-<a name="313"><span class="lineNum"> 313 </span> : : }</a>
-<a name="314"><span class="lineNum"> 314 </span> : : </a>
-<a name="315"><span class="lineNum"> 315 </span> :<span class="lineCov"> 24 : static void vpd_vini_parse(struct dt_node *node,</span></a>
-<a name="316"><span class="lineNum"> 316 </span> : : const void *fruvpd, unsigned int fruvpd_sz)</a>
-<a name="317"><span class="lineNum"> 317 </span> : : {</a>
-<a name="318"><span class="lineNum"> 318 </span> : : const void *kw;</a>
-<a name="319"><span class="lineNum"> 319 </span> : : const char *desc;</a>
-<a name="320"><span class="lineNum"> 320 </span> : : uint8_t sz;</a>
-<a name="321"><span class="lineNum"> 321 </span> : : const struct card_info *cinfo;</a>
-<a name="322"><span class="lineNum"> 322 </span> : : </a>
-<a name="323"><span class="lineNum"> 323 </span> : : /* FRU Stocking Part Number */</a>
-<a name="324"><span class="lineNum"> 324 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;FN&quot;, &amp;sz);</span></a>
-<a name="325"><span class="lineNum"> 325 </span> :<span class="lineCov"> 24 : if (kw)</span></a>
-<a name="326"><span class="lineNum"> 326 </span> :<span class="lineCov"> 24 : dt_add_prop_sanitize_val(node, &quot;fru-number&quot;, kw, sz);</span></a>
-<a name="327"><span class="lineNum"> 327 </span> : : </a>
-<a name="328"><span class="lineNum"> 328 </span> : : /* Serial Number */</a>
-<a name="329"><span class="lineNum"> 329 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;SN&quot;, &amp;sz);</span></a>
-<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 24 : if (kw)</span></a>
-<a name="331"><span class="lineNum"> 331 </span> :<span class="lineCov"> 24 : dt_add_prop_sanitize_val(node, &quot;serial-number&quot;, kw, sz);</span></a>
-<a name="332"><span class="lineNum"> 332 </span> : : </a>
-<a name="333"><span class="lineNum"> 333 </span> : : /* Part Number */</a>
-<a name="334"><span class="lineNum"> 334 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;PN&quot;, &amp;sz);</span></a>
-<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 24 : if (kw)</span></a>
-<a name="336"><span class="lineNum"> 336 </span> :<span class="lineCov"> 24 : dt_add_prop_sanitize_val(node, &quot;part-number&quot;, kw, sz);</span></a>
-<a name="337"><span class="lineNum"> 337 </span> : : </a>
-<a name="338"><span class="lineNum"> 338 </span> : : /* Vendor Name */</a>
-<a name="339"><span class="lineNum"> 339 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;VN&quot;, &amp;sz);</span></a>
-<a name="340"><span class="lineNum"> 340 </span> :<span class="lineCov"> 24 : if (kw)</span></a>
-<a name="341"><span class="lineNum"> 341 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(node, &quot;vendor&quot;, kw, sz);</span></a>
-<a name="342"><span class="lineNum"> 342 </span> : : </a>
-<a name="343"><span class="lineNum"> 343 </span> : : /* CCIN Extension */</a>
-<a name="344"><span class="lineNum"> 344 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;CE&quot;, &amp;sz);</span></a>
-<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 24 : if (kw)</span></a>
-<a name="346"><span class="lineNum"> 346 </span> :<span class="lineCov"> 24 : dt_add_prop_sanitize_val(node, &quot;ccin-extension&quot;, kw, sz);</span></a>
-<a name="347"><span class="lineNum"> 347 </span> : : </a>
-<a name="348"><span class="lineNum"> 348 </span> : : /* HW Version info */</a>
-<a name="349"><span class="lineNum"> 349 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;HW&quot;, &amp;sz);</span></a>
-<a name="350"><span class="lineNum"> 350 </span> :<span class="lineCov"> 24 : if (kw)</span></a>
-<a name="351"><span class="lineNum"> 351 </span> :<span class="lineCov"> 24 : dt_add_prop_sanitize_val(node, &quot;hw-version&quot;, kw, sz);</span></a>
-<a name="352"><span class="lineNum"> 352 </span> : : </a>
-<a name="353"><span class="lineNum"> 353 </span> : : /* Card type info */</a>
-<a name="354"><span class="lineNum"> 354 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;CT&quot;, &amp;sz);</span></a>
-<a name="355"><span class="lineNum"> 355 </span> :<span class="lineCov"> 24 : if (kw)</span></a>
-<a name="356"><span class="lineNum"> 356 </span> :<span class="lineCov"> 24 : dt_add_prop_sanitize_val(node, &quot;card-type&quot;, kw, sz);</span></a>
-<a name="357"><span class="lineNum"> 357 </span> : : </a>
-<a name="358"><span class="lineNum"> 358 </span> : : /* HW characteristics info */</a>
-<a name="359"><span class="lineNum"> 359 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;B3&quot;, &amp;sz);</span></a>
-<a name="360"><span class="lineNum"> 360 </span> :<span class="lineCov"> 24 : if (kw)</span></a>
-<a name="361"><span class="lineNum"> 361 </span> :<span class="lineCov"> 24 : dt_add_prop_sanitize_val(node, &quot;hw-characteristics&quot;, kw, sz);</span></a>
-<a name="362"><span class="lineNum"> 362 </span> : : </a>
-<a name="363"><span class="lineNum"> 363 </span> : : /* Customer Card Identification Number (CCIN) */</a>
-<a name="364"><span class="lineNum"> 364 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;CC&quot;, &amp;sz);</span></a>
-<a name="365"><span class="lineNum"> 365 </span> :<span class="lineCov"> 24 : if (kw) {</span></a>
-<a name="366"><span class="lineNum"> 366 </span> :<span class="lineCov"> 24 : dt_add_prop_sanitize_val(node, &quot;ccin&quot;, kw, sz);</span></a>
-<a name="367"><span class="lineNum"> 367 </span> : : </a>
-<a name="368"><span class="lineNum"> 368 </span> :<span class="lineCov"> 24 : cinfo = card_info_lookup((char *)kw);</span></a>
-<a name="369"><span class="lineNum"> 369 </span> :<span class="lineCov"> 24 : if (cinfo) {</span></a>
-<a name="370"><span class="lineNum"> 370 </span> :<span class="lineCov"> 16 : dt_add_property_string(node,</span></a>
-<a name="371"><span class="lineNum"> 371 </span> : : &quot;description&quot;, cinfo-&gt;description);</a>
-<a name="372"><span class="lineNum"> 372 </span> : : } else {</a>
-<a name="373"><span class="lineNum"> 373 </span> :<span class="lineCov"> 8 : desc = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;DR&quot;, &amp;sz);</span></a>
-<a name="374"><span class="lineNum"> 374 </span> :<span class="lineCov"> 8 : if (desc) {</span></a>
-<a name="375"><span class="lineNum"> 375 </span> :<span class="lineCov"> 8 : dt_add_prop_sanitize_val(node,</span></a>
-<a name="376"><span class="lineNum"> 376 </span> : : &quot;description&quot;, desc, sz);</a>
-<a name="377"><span class="lineNum"> 377 </span> : : } else {</a>
-<a name="378"><span class="lineNum"> 378 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(node, &quot;description&quot;, &quot;Unknown&quot;);</span></a>
-<a name="379"><span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING,</span></a>
-<a name="380"><span class="lineNum"> 380 </span> : : &quot;VPD: CCIN desc not available for: %s\n&quot;,</a>
-<a name="381"><span class="lineNum"> 381 </span> : : (char*)kw);</a>
-<a name="382"><span class="lineNum"> 382 </span> : : }</a>
-<a name="383"><span class="lineNum"> 383 </span> : : }</a>
-<a name="384"><span class="lineNum"> 384 </span> : : }</a>
-<a name="385"><span class="lineNum"> 385 </span> : : </a>
-<a name="386"><span class="lineNum"> 386 </span> :<span class="lineCov"> 24 : return;</span></a>
-<a name="387"><span class="lineNum"> 387 </span> : : }</a>
-<a name="388"><span class="lineNum"> 388 </span> : : </a>
-<a name="389"><span class="lineNum"> 389 </span> :<span class="lineCov"> 139 : static bool valid_child_entry(const struct slca_entry *entry)</span></a>
-<a name="390"><span class="lineNum"> 390 </span> : : {</a>
-<a name="391"><span class="lineNum"> 391 </span> :<span class="lineCov"> 139 : if ((entry-&gt;install_indic == SLCA_INSTALL_INSTALLED) &amp;&amp;</span></a>
-<a name="392"><span class="lineNum"> 392 </span> :<span class="lineCov"> 66 : (entry-&gt;vpd_collected == SLCA_VPD_COLLECTED))</span></a>
-<a name="393"><span class="lineNum"> 393 </span> :<span class="lineCov"> 66 : return true;</span></a>
-<a name="394"><span class="lineNum"> 394 </span> : : </a>
-<a name="395"><span class="lineNum"> 395 </span> :<span class="lineCov"> 73 : return false;</span></a>
-<a name="396"><span class="lineNum"> 396 </span> : : }</a>
-<a name="397"><span class="lineNum"> 397 </span> : : </a>
-<a name="398"><span class="lineNum"> 398 </span> :<span class="lineCov"> 30 : void vpd_data_parse(struct dt_node *node, const void *fruvpd, u32 fruvpd_sz)</span></a>
-<a name="399"><span class="lineNum"> 399 </span> : : {</a>
-<a name="400"><span class="lineNum"> 400 </span> :<span class="lineCov"> 30 : if (vpd_find_record(fruvpd, fruvpd_sz, &quot;OPFR&quot;, NULL))</span></a>
-<a name="401"><span class="lineNum"> 401 </span> :<span class="lineNoCov"> 0 : vpd_opfr_parse(node, fruvpd, fruvpd_sz);</span></a>
-<a name="402"><span class="lineNum"> 402 </span> :<span class="lineCov"> 30 : else if (vpd_find_record(fruvpd, fruvpd_sz, &quot;VRML&quot;, NULL))</span></a>
-<a name="403"><span class="lineNum"> 403 </span> :<span class="lineCov"> 6 : vpd_vrml_parse(node, fruvpd, fruvpd_sz);</span></a>
-<a name="404"><span class="lineNum"> 404 </span> : : else</a>
-<a name="405"><span class="lineNum"> 405 </span> :<span class="lineCov"> 24 : vpd_vini_parse(node, fruvpd, fruvpd_sz);</span></a>
-<a name="406"><span class="lineNum"> 406 </span> :<span class="lineCov"> 30 : }</span></a>
-<a name="407"><span class="lineNum"> 407 </span> : : </a>
-<a name="408"><span class="lineNum"> 408 </span> : : /* Create the /vpd node and add its children */</a>
-<a name="409"><span class="lineNum"> 409 </span> :<span class="lineCov"> 2 : void dt_init_vpd_node(void)</span></a>
-<a name="410"><span class="lineNum"> 410 </span> : : {</a>
-<a name="411"><span class="lineNum"> 411 </span> : : const char *name, *p_name;</a>
-<a name="412"><span class="lineNum"> 412 </span> : : int count, index;</a>
-<a name="413"><span class="lineNum"> 413 </span> : : uint64_t addr, p_addr;</a>
-<a name="414"><span class="lineNum"> 414 </span> : : struct dt_node *dt_vpd;</a>
-<a name="415"><span class="lineNum"> 415 </span> : : struct HDIF_common_hdr *slca_hdr;</a>
-<a name="416"><span class="lineNum"> 416 </span> : : struct dt_node *parent, *node;</a>
-<a name="417"><span class="lineNum"> 417 </span> : : const struct slca_entry *entry, *p_entry;</a>
-<a name="418"><span class="lineNum"> 418 </span> : : </a>
-<a name="419"><span class="lineNum"> 419 </span> :<span class="lineCov"> 2 : dt_vpd = dt_new(dt_root, &quot;vpd&quot;);</span></a>
-<a name="420"><span class="lineNum"> 420 </span> :<span class="lineCov"> 2 : assert(dt_vpd);</span></a>
-<a name="421"><span class="lineNum"> 421 </span> :<span class="lineCov"> 2 : dt_add_property_string(dt_vpd, &quot;compatible&quot;, &quot;ibm,opal-v3-vpd&quot;);</span></a>
-<a name="422"><span class="lineNum"> 422 </span> :<span class="lineCov"> 2 : dt_add_property_cells(dt_vpd, &quot;#size-cells&quot;, 0);</span></a>
-<a name="423"><span class="lineNum"> 423 </span> :<span class="lineCov"> 2 : dt_add_property_cells(dt_vpd, &quot;#address-cells&quot;, 1);</span></a>
-<a name="424"><span class="lineNum"> 424 </span> : : </a>
-<a name="425"><span class="lineNum"> 425 </span> :<span class="lineCov"> 2 : slca_hdr = get_hdif(&amp;spira.ntuples.slca, SLCA_HDIF_SIG);</span></a>
-<a name="426"><span class="lineNum"> 426 </span> :<span class="lineCov"> 2 : if (!slca_hdr) {</span></a>
-<a name="427"><span class="lineNum"> 427 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SLCA Invalid\n&quot;);</span></a>
-<a name="428"><span class="lineNum"> 428 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="429"><span class="lineNum"> 429 </span> : : }</a>
-<a name="430"><span class="lineNum"> 430 </span> : : </a>
-<a name="431"><span class="lineNum"> 431 </span> :<span class="lineCov"> 2 : count = HDIF_get_iarray_size(slca_hdr, SLCA_IDATA_ARRAY);</span></a>
-<a name="432"><span class="lineNum"> 432 </span> :<span class="lineCov"> 2 : if (count &lt; 0) {</span></a>
-<a name="433"><span class="lineNum"> 433 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SLCA: Can't find SLCA array size!\n&quot;);</span></a>
-<a name="434"><span class="lineNum"> 434 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="435"><span class="lineNum"> 435 </span> : : }</a>
-<a name="436"><span class="lineNum"> 436 </span> : : </a>
-<a name="437"><span class="lineNum"> 437 </span> :<span class="lineCov"> 141 : for (index = 0; index &lt; count; index++) {</span></a>
-<a name="438"><span class="lineNum"> 438 </span> : : /* Get SLCA entry */</a>
-<a name="439"><span class="lineNum"> 439 </span> :<span class="lineCov"> 139 : entry = slca_get_entry(index);</span></a>
-<a name="440"><span class="lineNum"> 440 </span> :<span class="lineCov"> 139 : if (!entry)</span></a>
-<a name="441"><span class="lineNum"> 441 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
-<a name="442"><span class="lineNum"> 442 </span> : : </a>
-<a name="443"><span class="lineNum"> 443 </span> : : /*</a>
-<a name="444"><span class="lineNum"> 444 </span> : : * A child entry is valid if all of the following criteria is met</a>
-<a name="445"><span class="lineNum"> 445 </span> : : * a. SLCA_INSTALL_INSTALLED is set in s_entry-&gt;install_indic</a>
-<a name="446"><span class="lineNum"> 446 </span> : : * b. SLCA_VPD_COLLECTED is set in s_entry-&gt;vpd_collected</a>
-<a name="447"><span class="lineNum"> 447 </span> : : * c. The SLCA is not a duplicate entry.</a>
-<a name="448"><span class="lineNum"> 448 </span> : : */</a>
-<a name="449"><span class="lineNum"> 449 </span> :<span class="lineCov"> 139 : if (!valid_child_entry(entry))</span></a>
-<a name="450"><span class="lineNum"> 450 </span> :<span class="lineCov"> 73 : goto next_entry;</span></a>
-<a name="451"><span class="lineNum"> 451 </span> : : </a>
-<a name="452"><span class="lineNum"> 452 </span> :<span class="lineCov"> 66 : name = vpd_map_name(entry-&gt;fru_id);</span></a>
-<a name="453"><span class="lineNum"> 453 </span> :<span class="lineCov"> 66 : addr = be16_to_cpu(entry-&gt;rsrc_id);</span></a>
-<a name="454"><span class="lineNum"> 454 </span> : : /* Check node is already created or not */</a>
-<a name="455"><span class="lineNum"> 455 </span> :<span class="lineCov"> 66 : if (dt_find_by_name_addr(dt_vpd, name, addr))</span></a>
-<a name="456"><span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : goto next_entry;</span></a>
-<a name="457"><span class="lineNum"> 457 </span> : : </a>
-<a name="458"><span class="lineNum"> 458 </span> : : /* Get parent node */</a>
-<a name="459"><span class="lineNum"> 459 </span> :<span class="lineCov"> 66 : if (index == SLCA_ROOT_INDEX) {</span></a>
-<a name="460"><span class="lineNum"> 460 </span> :<span class="lineCov"> 2 : parent = dt_vpd;</span></a>
-<a name="461"><span class="lineNum"> 461 </span> : : } else {</a>
-<a name="462"><span class="lineNum"> 462 </span> :<span class="lineCov"> 64 : p_entry = slca_get_entry(be16_to_cpu(entry-&gt;parent_index));</span></a>
-<a name="463"><span class="lineNum"> 463 </span> :<span class="lineCov"> 64 : if (!p_entry)</span></a>
-<a name="464"><span class="lineNum"> 464 </span> :<span class="lineNoCov"> 0 : goto next_entry;</span></a>
-<a name="465"><span class="lineNum"> 465 </span> :<span class="lineCov"> 64 : p_name = vpd_map_name(p_entry-&gt;fru_id);</span></a>
-<a name="466"><span class="lineNum"> 466 </span> :<span class="lineCov"> 64 : p_addr = be16_to_cpu(p_entry-&gt;rsrc_id);</span></a>
-<a name="467"><span class="lineNum"> 467 </span> :<span class="lineCov"> 64 : parent = dt_find_by_name_addr(dt_vpd, p_name, p_addr);</span></a>
-<a name="468"><span class="lineNum"> 468 </span> : : }</a>
-<a name="469"><span class="lineNum"> 469 </span> :<span class="lineCov"> 66 : if (!parent)</span></a>
-<a name="470"><span class="lineNum"> 470 </span> :<span class="lineNoCov"> 0 : goto next_entry;</span></a>
-<a name="471"><span class="lineNum"> 471 </span> : : </a>
-<a name="472"><span class="lineNum"> 472 </span> :<span class="lineCov"> 66 : node = dt_new_addr(parent, name, addr);</span></a>
-<a name="473"><span class="lineNum"> 473 </span> :<span class="lineCov"> 66 : if (!node) {</span></a>
-<a name="474"><span class="lineNum"> 474 </span> :<span class="lineNoCov"> 0 : prerror(&quot;VPD: Creating node at %s@%&quot;PRIx64&quot; failed\n&quot;,</span></a>
-<a name="475"><span class="lineNum"> 475 </span> : : name, addr);</a>
-<a name="476"><span class="lineNum"> 476 </span> :<span class="lineNoCov"> 0 : goto next_entry;</span></a>
-<a name="477"><span class="lineNum"> 477 </span> : : }</a>
-<a name="478"><span class="lineNum"> 478 </span> : : </a>
-<a name="479"><span class="lineNum"> 479 </span> : : /* Add location code */</a>
-<a name="480"><span class="lineNum"> 480 </span> :<span class="lineCov"> 66 : slca_vpd_add_loc_code(node, be16_to_cpu(entry-&gt;my_index));</span></a>
-<a name="481"><span class="lineNum"> 481 </span> : : /* Add FRU label */</a>
-<a name="482"><span class="lineNum"> 482 </span> :<span class="lineCov"> 66 : dt_add_property(node, &quot;fru-type&quot;, entry-&gt;fru_id, 2);</span></a>
-<a name="483"><span class="lineNum"> 483 </span> :<span class="lineCov"> 66 : dt_add_property_cells(node, &quot;reg&quot;, addr);</span></a>
-<a name="484"><span class="lineNum"> 484 </span> :<span class="lineCov"> 66 : dt_add_property_cells(node, &quot;#size-cells&quot;, 0);</span></a>
-<a name="485"><span class="lineNum"> 485 </span> :<span class="lineCov"> 66 : dt_add_property_cells(node, &quot;#address-cells&quot;, 1);</span></a>
-<a name="486"><span class="lineNum"> 486 </span> : : </a>
-<a name="487"><span class="lineNum"> 487 </span> :<span class="lineCov"> 139 : next_entry:</span></a>
-<a name="488"><span class="lineNum"> 488 </span> : : /* Skip dups -- dups are contiguous */</a>
-<a name="489"><span class="lineNum"> 489 </span> :<span class="lineCov"> 139 : index += entry-&gt;nr_dups;</span></a>
-<a name="490"><span class="lineNum"> 490 </span> : : }</a>
-<a name="491"><span class="lineNum"> 491 </span> : : }</a>
-<a name="492"><span class="lineNum"> 492 </span> : : </a>
-<a name="493"><span class="lineNum"> 493 </span> :<span class="lineCov"> 27 : struct dt_node *dt_add_vpd_node(const struct HDIF_common_hdr *hdr,</span></a>
-<a name="494"><span class="lineNum"> 494 </span> : : int indx_fru, int indx_vpd)</a>
-<a name="495"><span class="lineNum"> 495 </span> : : {</a>
-<a name="496"><span class="lineNum"> 496 </span> : : const struct spira_fru_id *fru_id;</a>
-<a name="497"><span class="lineNum"> 497 </span> : : unsigned int fruvpd_sz, fru_id_sz;</a>
-<a name="498"><span class="lineNum"> 498 </span> : : const struct slca_entry *entry;</a>
-<a name="499"><span class="lineNum"> 499 </span> : : struct dt_node *dt_vpd, *node;</a>
-<a name="500"><span class="lineNum"> 500 </span> : : const void *fruvpd;</a>
-<a name="501"><span class="lineNum"> 501 </span> : : const char *name;</a>
-<a name="502"><span class="lineNum"> 502 </span> : : uint64_t addr;</a>
-<a name="503"><span class="lineNum"> 503 </span> : : </a>
-<a name="504"><span class="lineNum"> 504 </span> :<span class="lineCov"> 27 : fru_id = HDIF_get_idata(hdr, indx_fru, &amp;fru_id_sz);</span></a>
-<a name="505"><span class="lineNum"> 505 </span> :<span class="lineCov"> 27 : if (!fru_id)</span></a>
-<a name="506"><span class="lineNum"> 506 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="507"><span class="lineNum"> 507 </span> : : </a>
-<a name="508"><span class="lineNum"> 508 </span> :<span class="lineCov"> 27 : fruvpd = HDIF_get_idata(hdr, indx_vpd, &amp;fruvpd_sz);</span></a>
-<a name="509"><span class="lineNum"> 509 </span> :<span class="lineCov"> 27 : if (!CHECK_SPPTR(fruvpd))</span></a>
-<a name="510"><span class="lineNum"> 510 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="511"><span class="lineNum"> 511 </span> : : </a>
-<a name="512"><span class="lineNum"> 512 </span> :<span class="lineCov"> 27 : dt_vpd = dt_find_by_path(dt_root, &quot;/vpd&quot;);</span></a>
-<a name="513"><span class="lineNum"> 513 </span> :<span class="lineCov"> 27 : if (!dt_vpd)</span></a>
-<a name="514"><span class="lineNum"> 514 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="515"><span class="lineNum"> 515 </span> : : </a>
-<a name="516"><span class="lineNum"> 516 </span> :<span class="lineCov"> 27 : entry = slca_get_entry(be16_to_cpu(fru_id-&gt;slca_index));</span></a>
-<a name="517"><span class="lineNum"> 517 </span> :<span class="lineCov"> 27 : if (!entry)</span></a>
-<a name="518"><span class="lineNum"> 518 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="519"><span class="lineNum"> 519 </span> : : </a>
-<a name="520"><span class="lineNum"> 520 </span> :<span class="lineCov"> 27 : name = vpd_map_name(entry-&gt;fru_id);</span></a>
-<a name="521"><span class="lineNum"> 521 </span> :<span class="lineCov"> 27 : addr = be16_to_cpu(entry-&gt;rsrc_id);</span></a>
-<a name="522"><span class="lineNum"> 522 </span> : : /* Get the node already created */</a>
-<a name="523"><span class="lineNum"> 523 </span> :<span class="lineCov"> 27 : node = dt_find_by_name_addr(dt_vpd, name, addr);</span></a>
-<a name="524"><span class="lineNum"> 524 </span> : : /*</a>
-<a name="525"><span class="lineNum"> 525 </span> : : * It is unlikely that node not found because vpd nodes have the</a>
-<a name="526"><span class="lineNum"> 526 </span> : : * corresponding slca entry which we would have used to populate the vpd</a>
-<a name="527"><span class="lineNum"> 527 </span> : : * tree during the 'first' pass above so that we just need to perform</a>
-<a name="528"><span class="lineNum"> 528 </span> : : * VINI parse and add the vpd data..</a>
-<a name="529"><span class="lineNum"> 529 </span> : : */</a>
-<a name="530"><span class="lineNum"> 530 </span> :<span class="lineCov"> 27 : if (!node)</span></a>
-<a name="531"><span class="lineNum"> 531 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="532"><span class="lineNum"> 532 </span> : : </a>
-<a name="533"><span class="lineNum"> 533 </span> : : /* Parse VPD fields, ensure that it has not been added already */</a>
-<a name="534"><span class="lineNum"> 534 </span> :<span class="lineCov"> 27 : if (vpd_valid(fruvpd, fruvpd_sz)</span></a>
-<a name="535"><span class="lineNum"> 535 </span> :<span class="lineCov"> 27 : &amp;&amp; !dt_find_property(node, &quot;ibm,vpd&quot;)) {</span></a>
-<a name="536"><span class="lineNum"> 536 </span> :<span class="lineCov"> 24 : dt_add_property(node, &quot;ibm,vpd&quot;, fruvpd, fruvpd_sz);</span></a>
-<a name="537"><span class="lineNum"> 537 </span> :<span class="lineCov"> 24 : vpd_data_parse(node, fruvpd, fruvpd_sz);</span></a>
-<a name="538"><span class="lineNum"> 538 </span> : : }</a>
-<a name="539"><span class="lineNum"> 539 </span> : : </a>
-<a name="540"><span class="lineNum"> 540 </span> :<span class="lineCov"> 27 : return node;</span></a>
-<a name="541"><span class="lineNum"> 541 </span> : : }</a>
-<a name="542"><span class="lineNum"> 542 </span> : : </a>
-<a name="543"><span class="lineNum"> 543 </span> :<span class="lineCov"> 2 : static void dt_add_model_name(void)</span></a>
-<a name="544"><span class="lineNum"> 544 </span> : : {</a>
-<a name="545"><span class="lineNum"> 545 </span> :<span class="lineCov"> 2 : const char *model_name = NULL;</span></a>
-<a name="546"><span class="lineNum"> 546 </span> : : const struct machine_info *mi;</a>
-<a name="547"><span class="lineNum"> 547 </span> : : const struct iplparams_sysparams *p;</a>
-<a name="548"><span class="lineNum"> 548 </span> : : const struct HDIF_common_hdr *iplp;</a>
-<a name="549"><span class="lineNum"> 549 </span> : : const struct dt_property *model;</a>
-<a name="550"><span class="lineNum"> 550 </span> : : </a>
-<a name="551"><span class="lineNum"> 551 </span> :<span class="lineCov"> 2 : model = dt_find_property(dt_root, &quot;model&quot;);</span></a>
-<a name="552"><span class="lineNum"> 552 </span> : : </a>
-<a name="553"><span class="lineNum"> 553 </span> :<span class="lineCov"> 2 : iplp = get_hdif(&amp;spira.ntuples.ipl_parms, &quot;IPLPMS&quot;);</span></a>
-<a name="554"><span class="lineNum"> 554 </span> :<span class="lineCov"> 2 : if (!iplp)</span></a>
-<a name="555"><span class="lineNum"> 555 </span> :<span class="lineNoCov"> 0 : goto def_model;</span></a>
-<a name="556"><span class="lineNum"> 556 </span> : : </a>
-<a name="557"><span class="lineNum"> 557 </span> :<span class="lineCov"> 2 : p = HDIF_get_idata(iplp, IPLPARAMS_SYSPARAMS, NULL);</span></a>
-<a name="558"><span class="lineNum"> 558 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(p))</span></a>
-<a name="559"><span class="lineNum"> 559 </span> :<span class="lineNoCov"> 0 : goto def_model;</span></a>
-<a name="560"><span class="lineNum"> 560 </span> : : </a>
-<a name="561"><span class="lineNum"> 561 </span> :<span class="lineCov"> 2 : if (be16_to_cpu(iplp-&gt;version) &gt;= 0x60)</span></a>
-<a name="562"><span class="lineNum"> 562 </span> :<span class="lineNoCov"> 0 : model_name = p-&gt;sys_type_str;</span></a>
-<a name="563"><span class="lineNum"> 563 </span> : : </a>
-<a name="564"><span class="lineNum"> 564 </span> :<span class="lineCov"> 2 : def_model:</span></a>
-<a name="565"><span class="lineNum"> 565 </span> :<span class="lineCov"> 2 : if ((!model_name || model_name[0] == '\0') &amp;&amp; model) {</span></a>
-<a name="566"><span class="lineNum"> 566 </span> :<span class="lineCov"> 2 : mi = machine_info_lookup(model-&gt;prop);</span></a>
-<a name="567"><span class="lineNum"> 567 </span> :<span class="lineCov"> 2 : if (mi)</span></a>
-<a name="568"><span class="lineNum"> 568 </span> :<span class="lineCov"> 2 : model_name = mi-&gt;name;</span></a>
-<a name="569"><span class="lineNum"> 569 </span> : : }</a>
-<a name="570"><span class="lineNum"> 570 </span> : : </a>
-<a name="571"><span class="lineNum"> 571 </span> :<span class="lineCov"> 2 : if(model_name)</span></a>
-<a name="572"><span class="lineNum"> 572 </span> :<span class="lineCov"> 2 : dt_add_property_string(dt_root, &quot;model-name&quot;, model_name);</span></a>
-<a name="573"><span class="lineNum"> 573 </span> :<span class="lineCov"> 2 : }</span></a>
-<a name="574"><span class="lineNum"> 574 </span> : : </a>
-<a name="575"><span class="lineNum"> 575 </span> :<span class="lineNoCov"> 0 : static void sysvpd_parse_opp(const void *sysvpd, unsigned int sysvpd_sz)</span></a>
-<a name="576"><span class="lineNum"> 576 </span> : : {</a>
-<a name="577"><span class="lineNum"> 577 </span> : : const char *v;</a>
-<a name="578"><span class="lineNum"> 578 </span> : : uint8_t sz;</a>
-<a name="579"><span class="lineNum"> 579 </span> : : </a>
-<a name="580"><span class="lineNum"> 580 </span> :<span class="lineNoCov"> 0 : v = vpd_find(sysvpd, sysvpd_sz, &quot;OSYS&quot;, &quot;MM&quot;, &amp;sz);</span></a>
-<a name="581"><span class="lineNum"> 581 </span> :<span class="lineNoCov"> 0 : if (v)</span></a>
-<a name="582"><span class="lineNum"> 582 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(dt_root, &quot;model&quot;, v, sz);</span></a>
-<a name="583"><span class="lineNum"> 583 </span> : : else</a>
-<a name="584"><span class="lineNum"> 584 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dt_root, &quot;model&quot;, &quot;Unknown&quot;);</span></a>
-<a name="585"><span class="lineNum"> 585 </span> : : </a>
-<a name="586"><span class="lineNum"> 586 </span> :<span class="lineNoCov"> 0 : v = vpd_find(sysvpd, sysvpd_sz, &quot;OSYS&quot;, &quot;SS&quot;, &amp;sz);</span></a>
-<a name="587"><span class="lineNum"> 587 </span> :<span class="lineNoCov"> 0 : if (v)</span></a>
-<a name="588"><span class="lineNum"> 588 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(dt_root, &quot;system-id&quot;, v, sz);</span></a>
-<a name="589"><span class="lineNum"> 589 </span> : : else</a>
-<a name="590"><span class="lineNum"> 590 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dt_root, &quot;system-id&quot;, &quot;Unknown&quot;);</span></a>
-<a name="591"><span class="lineNum"> 591 </span> :<span class="lineNoCov"> 0 : }</span></a>
-<a name="592"><span class="lineNum"> 592 </span> : : </a>
+<a name="108"><span class="lineNum"> 108 </span> : : {&quot;FN&quot;, &quot;fru-stocking-part-number&quot;},</a>
+<a name="109"><span class="lineNum"> 109 </span> : : </a>
+<a name="110"><span class="lineNum"> 110 </span> : : {&quot;HB&quot;, &quot;host-rio-pci-card&quot;},</a>
+<a name="111"><span class="lineNum"> 111 </span> : : {&quot;HD&quot;, &quot;high-speed-card&quot;},</a>
+<a name="112"><span class="lineNum"> 112 </span> : : {&quot;HM&quot;, &quot;hmc-connector&quot;},</a>
+<a name="113"><span class="lineNum"> 113 </span> : : </a>
+<a name="114"><span class="lineNum"> 114 </span> : : {&quot;IB&quot;, &quot;io-backplane&quot;},</a>
+<a name="115"><span class="lineNum"> 115 </span> : : {&quot;IC&quot;, &quot;io-card&quot;},</a>
+<a name="116"><span class="lineNum"> 116 </span> : : {&quot;ID&quot;, &quot;ide-connector&quot;},</a>
+<a name="117"><span class="lineNum"> 117 </span> : : {&quot;II&quot;, &quot;io-drawer-led&quot;},</a>
+<a name="118"><span class="lineNum"> 118 </span> : : {&quot;IP&quot;, &quot;interplane-card&quot;},</a>
+<a name="119"><span class="lineNum"> 119 </span> : : {&quot;IS&quot;, &quot;smp-vbus-cable&quot;},</a>
+<a name="120"><span class="lineNum"> 120 </span> : : {&quot;IT&quot;, &quot;enclosure-cable&quot;},</a>
+<a name="121"><span class="lineNum"> 121 </span> : : {&quot;IV&quot;, &quot;io-enclosure&quot;},</a>
+<a name="122"><span class="lineNum"> 122 </span> : : </a>
+<a name="123"><span class="lineNum"> 123 </span> : : {&quot;KV&quot;, &quot;keyboard-led&quot;},</a>
+<a name="124"><span class="lineNum"> 124 </span> : : </a>
+<a name="125"><span class="lineNum"> 125 </span> : : {&quot;L2&quot;, &quot;l2-cache-module&quot;},</a>
+<a name="126"><span class="lineNum"> 126 </span> : : {&quot;L3&quot;, &quot;l3-cache-module&quot;},</a>
+<a name="127"><span class="lineNum"> 127 </span> : : {&quot;LC&quot;, &quot;squadrons-light-connector&quot;},</a>
+<a name="128"><span class="lineNum"> 128 </span> : : {&quot;LR&quot;, &quot;p7ih-connector&quot;},</a>
+<a name="129"><span class="lineNum"> 129 </span> : : {&quot;LO&quot;, &quot;system-locate-led&quot;},</a>
+<a name="130"><span class="lineNum"> 130 </span> : : {&quot;LT&quot;, &quot;squadrons-light-strip&quot;},</a>
+<a name="131"><span class="lineNum"> 131 </span> : : </a>
+<a name="132"><span class="lineNum"> 132 </span> : : {&quot;MB&quot;, &quot;media-backplane&quot;},</a>
+<a name="133"><span class="lineNum"> 133 </span> : : {&quot;ME&quot;, &quot;map-extension&quot;},</a>
+<a name="134"><span class="lineNum"> 134 </span> : : {&quot;MM&quot;, &quot;mip-meter&quot;},</a>
+<a name="135"><span class="lineNum"> 135 </span> : : {&quot;MS&quot;, &quot;ms-dimm&quot;},</a>
+<a name="136"><span class="lineNum"> 136 </span> : : </a>
+<a name="137"><span class="lineNum"> 137 </span> : : {&quot;NB&quot;, &quot;nvram-battery&quot;},</a>
+<a name="138"><span class="lineNum"> 138 </span> : : {&quot;NC&quot;, &quot;sp-node-controller&quot;},</a>
+<a name="139"><span class="lineNum"> 139 </span> : : {&quot;ND&quot;, &quot;numa-dimm&quot;},</a>
+<a name="140"><span class="lineNum"> 140 </span> : : </a>
+<a name="141"><span class="lineNum"> 141 </span> : : {&quot;OD&quot;, &quot;cuod-card&quot;},</a>
+<a name="142"><span class="lineNum"> 142 </span> : : {&quot;OP&quot;, &quot;op-panel&quot;},</a>
+<a name="143"><span class="lineNum"> 143 </span> : : {&quot;OS&quot;, &quot;oscillator&quot;},</a>
+<a name="144"><span class="lineNum"> 144 </span> : : </a>
+<a name="145"><span class="lineNum"> 145 </span> : : {&quot;P2&quot;, &quot;ioc&quot;},</a>
+<a name="146"><span class="lineNum"> 146 </span> : : {&quot;P5&quot;, &quot;ioc-bridge&quot;},</a>
+<a name="147"><span class="lineNum"> 147 </span> : : {&quot;PB&quot;, &quot;io-drawer-backplane&quot;},</a>
+<a name="148"><span class="lineNum"> 148 </span> : : {&quot;PC&quot;, &quot;power-capacitor&quot;},</a>
+<a name="149"><span class="lineNum"> 149 </span> : : {&quot;PD&quot;, &quot;processor-card&quot;},</a>
+<a name="150"><span class="lineNum"> 150 </span> : : {&quot;PF&quot;, &quot;processor&quot;},</a>
+<a name="151"><span class="lineNum"> 151 </span> : : {&quot;PI&quot;, &quot;ioc-phb&quot;},</a>
+<a name="152"><span class="lineNum"> 152 </span> : : {&quot;PO&quot;, &quot;spcn&quot;},</a>
+<a name="153"><span class="lineNum"> 153 </span> : : {&quot;PN&quot;, &quot;spcn-connector&quot;},</a>
+<a name="154"><span class="lineNum"> 154 </span> : : {&quot;PR&quot;, &quot;pci-riser-card&quot;},</a>
+<a name="155"><span class="lineNum"> 155 </span> : : {&quot;PS&quot;, &quot;power-supply&quot;},</a>
+<a name="156"><span class="lineNum"> 156 </span> : : {&quot;PT&quot;, &quot;pass-through-card&quot;},</a>
+<a name="157"><span class="lineNum"> 157 </span> : : {&quot;PX&quot;, &quot;psc-sync-card&quot;},</a>
+<a name="158"><span class="lineNum"> 158 </span> : : {&quot;PW&quot;, &quot;power-connector&quot;},</a>
+<a name="159"><span class="lineNum"> 159 </span> : : </a>
+<a name="160"><span class="lineNum"> 160 </span> : : {&quot;RG&quot;, &quot;regulator&quot;},</a>
+<a name="161"><span class="lineNum"> 161 </span> : : {&quot;RI&quot;, &quot;riser&quot;},</a>
+<a name="162"><span class="lineNum"> 162 </span> : : {&quot;RK&quot;, &quot;rack-indicator&quot;},</a>
+<a name="163"><span class="lineNum"> 163 </span> : : {&quot;RW&quot;, &quot;riscwatch-connector&quot;},</a>
+<a name="164"><span class="lineNum"> 164 </span> : : </a>
+<a name="165"><span class="lineNum"> 165 </span> : : {&quot;SA&quot;, &quot;sys-attn-led&quot;},</a>
+<a name="166"><span class="lineNum"> 166 </span> : : {&quot;SB&quot;, &quot;backup-sysvpd&quot;},</a>
+<a name="167"><span class="lineNum"> 167 </span> : : {&quot;SC&quot;, &quot;scsi-connector&quot;},</a>
+<a name="168"><span class="lineNum"> 168 </span> : : {&quot;SD&quot;, &quot;sas-connector&quot;},</a>
+<a name="169"><span class="lineNum"> 169 </span> : : {&quot;SI&quot;, &quot;scsi-ide-converter&quot;},</a>
+<a name="170"><span class="lineNum"> 170 </span> : : {&quot;SL&quot;, &quot;phb-slot&quot;},</a>
+<a name="171"><span class="lineNum"> 171 </span> : : {&quot;SN&quot;, &quot;smp-cable-connector&quot;},</a>
+<a name="172"><span class="lineNum"> 172 </span> : : {&quot;SP&quot;, &quot;service-processor&quot;},</a>
+<a name="173"><span class="lineNum"> 173 </span> : : {&quot;SR&quot;, &quot;service-card&quot;},</a>
+<a name="174"><span class="lineNum"> 174 </span> : : {&quot;SS&quot;, &quot;soft-switch&quot;},</a>
+<a name="175"><span class="lineNum"> 175 </span> : : {&quot;SV&quot;, &quot;system-vpd&quot;},</a>
+<a name="176"><span class="lineNum"> 176 </span> : : {&quot;SY&quot;, &quot;legacy-sysvpd&quot;},</a>
+<a name="177"><span class="lineNum"> 177 </span> : : </a>
+<a name="178"><span class="lineNum"> 178 </span> : : {&quot;TD&quot;, &quot;tod-clock&quot;},</a>
+<a name="179"><span class="lineNum"> 179 </span> : : {&quot;TI&quot;, &quot;torrent-pcie-phb&quot;},</a>
+<a name="180"><span class="lineNum"> 180 </span> : : {&quot;TL&quot;, &quot;torrent-riser&quot;},</a>
+<a name="181"><span class="lineNum"> 181 </span> : : {&quot;TM&quot;, &quot;thermal-sensor&quot;},</a>
+<a name="182"><span class="lineNum"> 182 </span> : : {&quot;TP&quot;, &quot;tpmd-adapter&quot;},</a>
+<a name="183"><span class="lineNum"> 183 </span> : : {&quot;TR&quot;, &quot;torrent-bridge&quot;},</a>
+<a name="184"><span class="lineNum"> 184 </span> : : </a>
+<a name="185"><span class="lineNum"> 185 </span> : : {&quot;VV&quot;, &quot;root-node-vpd&quot;},</a>
+<a name="186"><span class="lineNum"> 186 </span> : : </a>
+<a name="187"><span class="lineNum"> 187 </span> : : {&quot;WD&quot;, &quot;water_device&quot;},</a>
+<a name="188"><span class="lineNum"> 188 </span> : : };</a>
+<a name="189"><span class="lineNum"> 189 </span> : : </a>
+<a name="190"><span class="lineNum"> 190 </span> :<span class="lineCov"> 157 : static const char *vpd_map_name(const char *vpd_name)</span></a>
+<a name="191"><span class="lineNum"> 191 </span> : : {</a>
+<a name="192"><span class="lineNum"> 192 </span> : : int i;</a>
+<a name="193"><span class="lineNum"> 193 </span> : : </a>
+<a name="194"><span class="lineNum"> 194 </span> :<span class="lineCov"> 5430 : for (i = 0; i &lt; ARRAY_SIZE(vpd_key_table); i++)</span></a>
+<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 5430 : if (!strcmp(vpd_key_table[i].keyword, vpd_name))</span></a>
+<a name="196"><span class="lineNum"> 196 </span> :<span class="lineCov"> 157 : return vpd_key_table[i].description;</span></a>
+<a name="197"><span class="lineNum"> 197 </span> : : </a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING, &quot;VPD: Could not map FRU ID %s to a known name\n&quot;,</span></a>
+<a name="199"><span class="lineNum"> 199 </span> : : vpd_name);</a>
+<a name="200"><span class="lineNum"> 200 </span> : : </a>
+<a name="201"><span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : return &quot;Unknown&quot;;</span></a>
+<a name="202"><span class="lineNum"> 202 </span> : : }</a>
+<a name="203"><span class="lineNum"> 203 </span> : : </a>
+<a name="204"><span class="lineNum"> 204 </span> :<span class="lineCov"> 24 : static const struct card_info *card_info_lookup(char *ccin)</span></a>
+<a name="205"><span class="lineNum"> 205 </span> : : {</a>
+<a name="206"><span class="lineNum"> 206 </span> : : int i;</a>
+<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 474 : for(i = 0; i &lt; ARRAY_SIZE(card_table); i++)</span></a>
+<a name="208"><span class="lineNum"> 208 </span> : : /* CCIN is always 4 bytes in size */</a>
+<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 466 : if (!strncmp(card_table[i].ccin, ccin, 4))</span></a>
+<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 16 : return &amp;card_table[i];</span></a>
+<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 8 : return NULL;</span></a>
+<a name="212"><span class="lineNum"> 212 </span> : : }</a>
+<a name="213"><span class="lineNum"> 213 </span> : : </a>
+<a name="214"><span class="lineNum"> 214 </span> : : /* Discard trailing spaces and populate device tree */</a>
+<a name="215"><span class="lineNum"> 215 </span> :<span class="lineCov"> 218 : static struct dt_property *dt_add_prop_sanitize_val(struct dt_node *node,</span></a>
+<a name="216"><span class="lineNum"> 216 </span> : : const char *name, const char *val, int vlen)</a>
+<a name="217"><span class="lineNum"> 217 </span> : : {</a>
+<a name="218"><span class="lineNum"> 218 </span> :<span class="lineCov"> 218 : char *prop = zalloc(vlen + 1);</span></a>
+<a name="219"><span class="lineNum"> 219 </span> : : int i;</a>
+<a name="220"><span class="lineNum"> 220 </span> :<span class="lineCov"> 218 : struct dt_property *p = NULL;</span></a>
+<a name="221"><span class="lineNum"> 221 </span> : : </a>
+<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 218 : if (!prop)</span></a>
+<a name="223"><span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : return p;</span></a>
+<a name="224"><span class="lineNum"> 224 </span> : : </a>
+<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 218 : memcpy(prop, val, vlen);</span></a>
+<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 226 : for (i = vlen - 1; i &gt;= 0; i--) {</span></a>
+<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 226 : if (prop[i] != 0x20) {</span></a>
+<a name="228"><span class="lineNum"> 228 </span> :<span class="lineCov"> 218 : prop[i + 1] = '\0';</span></a>
+<a name="229"><span class="lineNum"> 229 </span> :<span class="lineCov"> 218 : break;</span></a>
+<a name="230"><span class="lineNum"> 230 </span> : : }</a>
+<a name="231"><span class="lineNum"> 231 </span> : : }</a>
+<a name="232"><span class="lineNum"> 232 </span> : : </a>
+<a name="233"><span class="lineNum"> 233 </span> :<span class="lineCov"> 218 : if (i &gt;= 0 &amp;&amp; !dt_find_property(node, name))</span></a>
+<a name="234"><span class="lineNum"> 234 </span> :<span class="lineCov"> 218 : p = dt_add_property_string(node, name, prop);</span></a>
+<a name="235"><span class="lineNum"> 235 </span> : : </a>
+<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 218 : free(prop);</span></a>
+<a name="237"><span class="lineNum"> 237 </span> :<span class="lineCov"> 218 : return p;</span></a>
+<a name="238"><span class="lineNum"> 238 </span> : : }</a>
+<a name="239"><span class="lineNum"> 239 </span> : : </a>
+<a name="240"><span class="lineNum"> 240 </span> : : /*</a>
+<a name="241"><span class="lineNum"> 241 </span> : : * OpenPower system does not provide processor vendor name under FRU VPD.</a>
+<a name="242"><span class="lineNum"> 242 </span> : : * Parse processor module VPD to get vendor detail</a>
+<a name="243"><span class="lineNum"> 243 </span> : : */</a>
+<a name="244"><span class="lineNum"> 244 </span> :<span class="lineCov"> 6 : void dt_add_proc_vendor(struct dt_node *proc_node,</span></a>
+<a name="245"><span class="lineNum"> 245 </span> : : const void *mvpd, unsigned int mvpd_sz)</a>
+<a name="246"><span class="lineNum"> 246 </span> : : {</a>
+<a name="247"><span class="lineNum"> 247 </span> : : const void *kw;</a>
+<a name="248"><span class="lineNum"> 248 </span> : : uint8_t sz;</a>
+<a name="249"><span class="lineNum"> 249 </span> : : </a>
+<a name="250"><span class="lineNum"> 250 </span> :<span class="lineCov"> 6 : kw = vpd_find(mvpd, mvpd_sz, &quot;VINI&quot;, &quot;VN&quot;, &amp;sz);</span></a>
+<a name="251"><span class="lineNum"> 251 </span> :<span class="lineCov"> 6 : if (kw)</span></a>
+<a name="252"><span class="lineNum"> 252 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(proc_node, &quot;vendor&quot;, kw, sz);</span></a>
+<a name="253"><span class="lineNum"> 253 </span> :<span class="lineCov"> 6 : }</span></a>
+<a name="254"><span class="lineNum"> 254 </span> : : </a>
+<a name="255"><span class="lineNum"> 255 </span> : : /*</a>
+<a name="256"><span class="lineNum"> 256 </span> : : * For OpenPOWER, we only decipher OPFR records. While OP HDAT have VINI</a>
+<a name="257"><span class="lineNum"> 257 </span> : : * records too, populating the fields in there is optional. Also, there</a>
+<a name="258"><span class="lineNum"> 258 </span> : : * is an overlap in the fields contained therein.</a>
+<a name="259"><span class="lineNum"> 259 </span> : : */</a>
+<a name="260"><span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : static void vpd_opfr_parse(struct dt_node *node,</span></a>
+<a name="261"><span class="lineNum"> 261 </span> : : const void *fruvpd, unsigned int fruvpd_sz)</a>
+<a name="262"><span class="lineNum"> 262 </span> : : {</a>
+<a name="263"><span class="lineNum"> 263 </span> : : const void *kw;</a>
+<a name="264"><span class="lineNum"> 264 </span> : : uint8_t sz;</a>
+<a name="265"><span class="lineNum"> 265 </span> : : </a>
+<a name="266"><span class="lineNum"> 266 </span> : : /* Vendor Name */</a>
+<a name="267"><span class="lineNum"> 267 </span> :<span class="lineNoCov"> 0 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;OPFR&quot;, &quot;VN&quot;, &amp;sz);</span></a>
+<a name="268"><span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : if (kw)</span></a>
+<a name="269"><span class="lineNum"> 269 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(node, &quot;vendor&quot;, kw, sz);</span></a>
+<a name="270"><span class="lineNum"> 270 </span> : : </a>
+<a name="271"><span class="lineNum"> 271 </span> : : /* FRU Description */</a>
+<a name="272"><span class="lineNum"> 272 </span> :<span class="lineNoCov"> 0 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;OPFR&quot;, &quot;DR&quot;, &amp;sz);</span></a>
+<a name="273"><span class="lineNum"> 273 </span> :<span class="lineNoCov"> 0 : if (kw)</span></a>
+<a name="274"><span class="lineNum"> 274 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(node, &quot;description&quot;, kw, sz);</span></a>
+<a name="275"><span class="lineNum"> 275 </span> : : </a>
+<a name="276"><span class="lineNum"> 276 </span> : : /* Part number */</a>
+<a name="277"><span class="lineNum"> 277 </span> :<span class="lineNoCov"> 0 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;OPFR&quot;, &quot;VP&quot;, &amp;sz);</span></a>
+<a name="278"><span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : if (kw)</span></a>
+<a name="279"><span class="lineNum"> 279 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(node, &quot;part-number&quot;, kw, sz);</span></a>
+<a name="280"><span class="lineNum"> 280 </span> : : </a>
+<a name="281"><span class="lineNum"> 281 </span> : : /* Serial number */</a>
+<a name="282"><span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;OPFR&quot;, &quot;VS&quot;, &amp;sz);</span></a>
+<a name="283"><span class="lineNum"> 283 </span> :<span class="lineNoCov"> 0 : if (kw)</span></a>
+<a name="284"><span class="lineNum"> 284 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(node, &quot;serial-number&quot;, kw, sz);</span></a>
+<a name="285"><span class="lineNum"> 285 </span> : : </a>
+<a name="286"><span class="lineNum"> 286 </span> : : /* Build date in BCD */</a>
+<a name="287"><span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;OPFR&quot;, &quot;MB&quot;, &amp;sz);</span></a>
+<a name="288"><span class="lineNum"> 288 </span> :<span class="lineNoCov"> 0 : if (kw)</span></a>
+<a name="289"><span class="lineNum"> 289 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(node, &quot;build-date&quot;, kw, sz);</span></a>
+<a name="290"><span class="lineNum"> 290 </span> : : </a>
+<a name="291"><span class="lineNum"> 291 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="292"><span class="lineNum"> 292 </span> : : }</a>
+<a name="293"><span class="lineNum"> 293 </span> : : </a>
+<a name="294"><span class="lineNum"> 294 </span> : : /*</a>
+<a name="295"><span class="lineNum"> 295 </span> : : * For CPUs, parse the VRML data.</a>
+<a name="296"><span class="lineNum"> 296 </span> : : */</a>
+<a name="297"><span class="lineNum"> 297 </span> :<span class="lineCov"> 6 : static void vpd_vrml_parse(struct dt_node *node,</span></a>
+<a name="298"><span class="lineNum"> 298 </span> : : const void *fruvpd, unsigned int fruvpd_sz)</a>
+<a name="299"><span class="lineNum"> 299 </span> : : {</a>
+<a name="300"><span class="lineNum"> 300 </span> : : const void *kw;</a>
+<a name="301"><span class="lineNum"> 301 </span> : : uint8_t sz;</a>
+<a name="302"><span class="lineNum"> 302 </span> : : </a>
+<a name="303"><span class="lineNum"> 303 </span> : : /* Part number */</a>
+<a name="304"><span class="lineNum"> 304 </span> :<span class="lineCov"> 6 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VRML&quot;, &quot;PN&quot;, &amp;sz);</span></a>
+<a name="305"><span class="lineNum"> 305 </span> :<span class="lineCov"> 6 : if (kw)</span></a>
+<a name="306"><span class="lineNum"> 306 </span> :<span class="lineCov"> 6 : dt_add_prop_sanitize_val(node, &quot;part-number&quot;, kw, sz);</span></a>
+<a name="307"><span class="lineNum"> 307 </span> : : </a>
+<a name="308"><span class="lineNum"> 308 </span> : : /* Serial number */</a>
+<a name="309"><span class="lineNum"> 309 </span> :<span class="lineCov"> 6 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VRML&quot;, &quot;SN&quot;, &amp;sz);</span></a>
+<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 6 : if (kw)</span></a>
+<a name="311"><span class="lineNum"> 311 </span> :<span class="lineCov"> 6 : dt_add_prop_sanitize_val(node, &quot;serial-number&quot;, kw, sz);</span></a>
+<a name="312"><span class="lineNum"> 312 </span> : : </a>
+<a name="313"><span class="lineNum"> 313 </span> :<span class="lineCov"> 6 : return;</span></a>
+<a name="314"><span class="lineNum"> 314 </span> : : }</a>
+<a name="315"><span class="lineNum"> 315 </span> : : </a>
+<a name="316"><span class="lineNum"> 316 </span> :<span class="lineCov"> 24 : static void vpd_vini_parse(struct dt_node *node,</span></a>
+<a name="317"><span class="lineNum"> 317 </span> : : const void *fruvpd, unsigned int fruvpd_sz)</a>
+<a name="318"><span class="lineNum"> 318 </span> : : {</a>
+<a name="319"><span class="lineNum"> 319 </span> : : const void *kw;</a>
+<a name="320"><span class="lineNum"> 320 </span> : : const char *desc;</a>
+<a name="321"><span class="lineNum"> 321 </span> : : uint8_t sz;</a>
+<a name="322"><span class="lineNum"> 322 </span> : : const struct card_info *cinfo;</a>
+<a name="323"><span class="lineNum"> 323 </span> : : </a>
+<a name="324"><span class="lineNum"> 324 </span> : : /* FRU Stocking Part Number */</a>
+<a name="325"><span class="lineNum"> 325 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;FN&quot;, &amp;sz);</span></a>
+<a name="326"><span class="lineNum"> 326 </span> :<span class="lineCov"> 24 : if (kw)</span></a>
+<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 24 : dt_add_prop_sanitize_val(node, &quot;fru-number&quot;, kw, sz);</span></a>
+<a name="328"><span class="lineNum"> 328 </span> : : </a>
+<a name="329"><span class="lineNum"> 329 </span> : : /* Serial Number */</a>
+<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;SN&quot;, &amp;sz);</span></a>
+<a name="331"><span class="lineNum"> 331 </span> :<span class="lineCov"> 24 : if (kw)</span></a>
+<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 24 : dt_add_prop_sanitize_val(node, &quot;serial-number&quot;, kw, sz);</span></a>
+<a name="333"><span class="lineNum"> 333 </span> : : </a>
+<a name="334"><span class="lineNum"> 334 </span> : : /* Part Number */</a>
+<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;PN&quot;, &amp;sz);</span></a>
+<a name="336"><span class="lineNum"> 336 </span> :<span class="lineCov"> 24 : if (kw)</span></a>
+<a name="337"><span class="lineNum"> 337 </span> :<span class="lineCov"> 24 : dt_add_prop_sanitize_val(node, &quot;part-number&quot;, kw, sz);</span></a>
+<a name="338"><span class="lineNum"> 338 </span> : : </a>
+<a name="339"><span class="lineNum"> 339 </span> : : /* Vendor Name */</a>
+<a name="340"><span class="lineNum"> 340 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;VN&quot;, &amp;sz);</span></a>
+<a name="341"><span class="lineNum"> 341 </span> :<span class="lineCov"> 24 : if (kw)</span></a>
+<a name="342"><span class="lineNum"> 342 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(node, &quot;vendor&quot;, kw, sz);</span></a>
+<a name="343"><span class="lineNum"> 343 </span> : : </a>
+<a name="344"><span class="lineNum"> 344 </span> : : /* CCIN Extension */</a>
+<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;CE&quot;, &amp;sz);</span></a>
+<a name="346"><span class="lineNum"> 346 </span> :<span class="lineCov"> 24 : if (kw)</span></a>
+<a name="347"><span class="lineNum"> 347 </span> :<span class="lineCov"> 24 : dt_add_prop_sanitize_val(node, &quot;ccin-extension&quot;, kw, sz);</span></a>
+<a name="348"><span class="lineNum"> 348 </span> : : </a>
+<a name="349"><span class="lineNum"> 349 </span> : : /* HW Version info */</a>
+<a name="350"><span class="lineNum"> 350 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;HW&quot;, &amp;sz);</span></a>
+<a name="351"><span class="lineNum"> 351 </span> :<span class="lineCov"> 24 : if (kw)</span></a>
+<a name="352"><span class="lineNum"> 352 </span> :<span class="lineCov"> 24 : dt_add_prop_sanitize_val(node, &quot;hw-version&quot;, kw, sz);</span></a>
+<a name="353"><span class="lineNum"> 353 </span> : : </a>
+<a name="354"><span class="lineNum"> 354 </span> : : /* Card type info */</a>
+<a name="355"><span class="lineNum"> 355 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;CT&quot;, &amp;sz);</span></a>
+<a name="356"><span class="lineNum"> 356 </span> :<span class="lineCov"> 24 : if (kw)</span></a>
+<a name="357"><span class="lineNum"> 357 </span> :<span class="lineCov"> 24 : dt_add_prop_sanitize_val(node, &quot;card-type&quot;, kw, sz);</span></a>
+<a name="358"><span class="lineNum"> 358 </span> : : </a>
+<a name="359"><span class="lineNum"> 359 </span> : : /* HW characteristics info */</a>
+<a name="360"><span class="lineNum"> 360 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;B3&quot;, &amp;sz);</span></a>
+<a name="361"><span class="lineNum"> 361 </span> :<span class="lineCov"> 24 : if (kw)</span></a>
+<a name="362"><span class="lineNum"> 362 </span> :<span class="lineCov"> 24 : dt_add_prop_sanitize_val(node, &quot;hw-characteristics&quot;, kw, sz);</span></a>
+<a name="363"><span class="lineNum"> 363 </span> : : </a>
+<a name="364"><span class="lineNum"> 364 </span> : : /* Customer Card Identification Number (CCIN) */</a>
+<a name="365"><span class="lineNum"> 365 </span> :<span class="lineCov"> 24 : kw = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;CC&quot;, &amp;sz);</span></a>
+<a name="366"><span class="lineNum"> 366 </span> :<span class="lineCov"> 24 : if (kw) {</span></a>
+<a name="367"><span class="lineNum"> 367 </span> :<span class="lineCov"> 24 : dt_add_prop_sanitize_val(node, &quot;ccin&quot;, kw, sz);</span></a>
+<a name="368"><span class="lineNum"> 368 </span> : : </a>
+<a name="369"><span class="lineNum"> 369 </span> :<span class="lineCov"> 24 : cinfo = card_info_lookup((char *)kw);</span></a>
+<a name="370"><span class="lineNum"> 370 </span> :<span class="lineCov"> 24 : if (cinfo) {</span></a>
+<a name="371"><span class="lineNum"> 371 </span> :<span class="lineCov"> 16 : dt_add_property_string(node,</span></a>
+<a name="372"><span class="lineNum"> 372 </span> : : &quot;description&quot;, cinfo-&gt;description);</a>
+<a name="373"><span class="lineNum"> 373 </span> : : } else {</a>
+<a name="374"><span class="lineNum"> 374 </span> :<span class="lineCov"> 8 : desc = vpd_find(fruvpd, fruvpd_sz, &quot;VINI&quot;, &quot;DR&quot;, &amp;sz);</span></a>
+<a name="375"><span class="lineNum"> 375 </span> :<span class="lineCov"> 8 : if (desc) {</span></a>
+<a name="376"><span class="lineNum"> 376 </span> :<span class="lineCov"> 8 : dt_add_prop_sanitize_val(node,</span></a>
+<a name="377"><span class="lineNum"> 377 </span> : : &quot;description&quot;, desc, sz);</a>
+<a name="378"><span class="lineNum"> 378 </span> : : } else {</a>
+<a name="379"><span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(node, &quot;description&quot;, &quot;Unknown&quot;);</span></a>
+<a name="380"><span class="lineNum"> 380 </span> :<span class="lineNoCov"> 0 : prlog(PR_WARNING,</span></a>
+<a name="381"><span class="lineNum"> 381 </span> : : &quot;VPD: CCIN desc not available for: %s\n&quot;,</a>
+<a name="382"><span class="lineNum"> 382 </span> : : (char*)kw);</a>
+<a name="383"><span class="lineNum"> 383 </span> : : }</a>
+<a name="384"><span class="lineNum"> 384 </span> : : }</a>
+<a name="385"><span class="lineNum"> 385 </span> : : }</a>
+<a name="386"><span class="lineNum"> 386 </span> : : </a>
+<a name="387"><span class="lineNum"> 387 </span> :<span class="lineCov"> 24 : return;</span></a>
+<a name="388"><span class="lineNum"> 388 </span> : : }</a>
+<a name="389"><span class="lineNum"> 389 </span> : : </a>
+<a name="390"><span class="lineNum"> 390 </span> :<span class="lineCov"> 139 : static bool valid_child_entry(const struct slca_entry *entry)</span></a>
+<a name="391"><span class="lineNum"> 391 </span> : : {</a>
+<a name="392"><span class="lineNum"> 392 </span> :<span class="lineCov"> 139 : if ((entry-&gt;install_indic == SLCA_INSTALL_INSTALLED) &amp;&amp;</span></a>
+<a name="393"><span class="lineNum"> 393 </span> :<span class="lineCov"> 66 : (entry-&gt;vpd_collected == SLCA_VPD_COLLECTED))</span></a>
+<a name="394"><span class="lineNum"> 394 </span> :<span class="lineCov"> 66 : return true;</span></a>
+<a name="395"><span class="lineNum"> 395 </span> : : </a>
+<a name="396"><span class="lineNum"> 396 </span> :<span class="lineCov"> 73 : return false;</span></a>
+<a name="397"><span class="lineNum"> 397 </span> : : }</a>
+<a name="398"><span class="lineNum"> 398 </span> : : </a>
+<a name="399"><span class="lineNum"> 399 </span> :<span class="lineCov"> 30 : void vpd_data_parse(struct dt_node *node, const void *fruvpd, u32 fruvpd_sz)</span></a>
+<a name="400"><span class="lineNum"> 400 </span> : : {</a>
+<a name="401"><span class="lineNum"> 401 </span> :<span class="lineCov"> 30 : if (vpd_find_record(fruvpd, fruvpd_sz, &quot;OPFR&quot;, NULL))</span></a>
+<a name="402"><span class="lineNum"> 402 </span> :<span class="lineNoCov"> 0 : vpd_opfr_parse(node, fruvpd, fruvpd_sz);</span></a>
+<a name="403"><span class="lineNum"> 403 </span> :<span class="lineCov"> 30 : else if (vpd_find_record(fruvpd, fruvpd_sz, &quot;VRML&quot;, NULL))</span></a>
+<a name="404"><span class="lineNum"> 404 </span> :<span class="lineCov"> 6 : vpd_vrml_parse(node, fruvpd, fruvpd_sz);</span></a>
+<a name="405"><span class="lineNum"> 405 </span> : : else</a>
+<a name="406"><span class="lineNum"> 406 </span> :<span class="lineCov"> 24 : vpd_vini_parse(node, fruvpd, fruvpd_sz);</span></a>
+<a name="407"><span class="lineNum"> 407 </span> :<span class="lineCov"> 30 : }</span></a>
+<a name="408"><span class="lineNum"> 408 </span> : : </a>
+<a name="409"><span class="lineNum"> 409 </span> : : /* Create the /vpd node and add its children */</a>
+<a name="410"><span class="lineNum"> 410 </span> :<span class="lineCov"> 2 : void dt_init_vpd_node(void)</span></a>
+<a name="411"><span class="lineNum"> 411 </span> : : {</a>
+<a name="412"><span class="lineNum"> 412 </span> : : const char *name, *p_name;</a>
+<a name="413"><span class="lineNum"> 413 </span> : : int count, index;</a>
+<a name="414"><span class="lineNum"> 414 </span> : : uint64_t addr, p_addr;</a>
+<a name="415"><span class="lineNum"> 415 </span> : : struct dt_node *dt_vpd;</a>
+<a name="416"><span class="lineNum"> 416 </span> : : struct HDIF_common_hdr *slca_hdr;</a>
+<a name="417"><span class="lineNum"> 417 </span> : : struct dt_node *parent, *node;</a>
+<a name="418"><span class="lineNum"> 418 </span> : : const struct slca_entry *entry, *p_entry;</a>
+<a name="419"><span class="lineNum"> 419 </span> : : </a>
+<a name="420"><span class="lineNum"> 420 </span> :<span class="lineCov"> 2 : dt_vpd = dt_new(dt_root, &quot;vpd&quot;);</span></a>
+<a name="421"><span class="lineNum"> 421 </span> :<span class="lineCov"> 2 : assert(dt_vpd);</span></a>
+<a name="422"><span class="lineNum"> 422 </span> :<span class="lineCov"> 2 : dt_add_property_string(dt_vpd, &quot;compatible&quot;, &quot;ibm,opal-v3-vpd&quot;);</span></a>
+<a name="423"><span class="lineNum"> 423 </span> :<span class="lineCov"> 2 : dt_add_property_cells(dt_vpd, &quot;#size-cells&quot;, 0);</span></a>
+<a name="424"><span class="lineNum"> 424 </span> :<span class="lineCov"> 2 : dt_add_property_cells(dt_vpd, &quot;#address-cells&quot;, 1);</span></a>
+<a name="425"><span class="lineNum"> 425 </span> : : </a>
+<a name="426"><span class="lineNum"> 426 </span> :<span class="lineCov"> 2 : slca_hdr = get_hdif(&amp;spira.ntuples.slca, SLCA_HDIF_SIG);</span></a>
+<a name="427"><span class="lineNum"> 427 </span> :<span class="lineCov"> 2 : if (!slca_hdr) {</span></a>
+<a name="428"><span class="lineNum"> 428 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SLCA Invalid\n&quot;);</span></a>
+<a name="429"><span class="lineNum"> 429 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="430"><span class="lineNum"> 430 </span> : : }</a>
+<a name="431"><span class="lineNum"> 431 </span> : : </a>
+<a name="432"><span class="lineNum"> 432 </span> :<span class="lineCov"> 2 : count = HDIF_get_iarray_size(slca_hdr, SLCA_IDATA_ARRAY);</span></a>
+<a name="433"><span class="lineNum"> 433 </span> :<span class="lineCov"> 2 : if (count &lt; 0) {</span></a>
+<a name="434"><span class="lineNum"> 434 </span> :<span class="lineNoCov"> 0 : prerror(&quot;SLCA: Can't find SLCA array size!\n&quot;);</span></a>
+<a name="435"><span class="lineNum"> 435 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="436"><span class="lineNum"> 436 </span> : : }</a>
+<a name="437"><span class="lineNum"> 437 </span> : : </a>
+<a name="438"><span class="lineNum"> 438 </span> :<span class="lineCov"> 141 : for (index = 0; index &lt; count; index++) {</span></a>
+<a name="439"><span class="lineNum"> 439 </span> : : /* Get SLCA entry */</a>
+<a name="440"><span class="lineNum"> 440 </span> :<span class="lineCov"> 139 : entry = slca_get_entry(index);</span></a>
+<a name="441"><span class="lineNum"> 441 </span> :<span class="lineCov"> 139 : if (!entry)</span></a>
+<a name="442"><span class="lineNum"> 442 </span> :<span class="lineNoCov"> 0 : continue;</span></a>
+<a name="443"><span class="lineNum"> 443 </span> : : </a>
+<a name="444"><span class="lineNum"> 444 </span> : : /*</a>
+<a name="445"><span class="lineNum"> 445 </span> : : * A child entry is valid if all of the following criteria is met</a>
+<a name="446"><span class="lineNum"> 446 </span> : : * a. SLCA_INSTALL_INSTALLED is set in s_entry-&gt;install_indic</a>
+<a name="447"><span class="lineNum"> 447 </span> : : * b. SLCA_VPD_COLLECTED is set in s_entry-&gt;vpd_collected</a>
+<a name="448"><span class="lineNum"> 448 </span> : : * c. The SLCA is not a duplicate entry.</a>
+<a name="449"><span class="lineNum"> 449 </span> : : */</a>
+<a name="450"><span class="lineNum"> 450 </span> :<span class="lineCov"> 139 : if (!valid_child_entry(entry))</span></a>
+<a name="451"><span class="lineNum"> 451 </span> :<span class="lineCov"> 73 : goto next_entry;</span></a>
+<a name="452"><span class="lineNum"> 452 </span> : : </a>
+<a name="453"><span class="lineNum"> 453 </span> :<span class="lineCov"> 66 : name = vpd_map_name(entry-&gt;fru_id);</span></a>
+<a name="454"><span class="lineNum"> 454 </span> :<span class="lineCov"> 66 : addr = be16_to_cpu(entry-&gt;rsrc_id);</span></a>
+<a name="455"><span class="lineNum"> 455 </span> : : /* Check node is already created or not */</a>
+<a name="456"><span class="lineNum"> 456 </span> :<span class="lineCov"> 66 : if (dt_find_by_name_addr(dt_vpd, name, addr))</span></a>
+<a name="457"><span class="lineNum"> 457 </span> :<span class="lineNoCov"> 0 : goto next_entry;</span></a>
+<a name="458"><span class="lineNum"> 458 </span> : : </a>
+<a name="459"><span class="lineNum"> 459 </span> : : /* Get parent node */</a>
+<a name="460"><span class="lineNum"> 460 </span> :<span class="lineCov"> 66 : if (index == SLCA_ROOT_INDEX) {</span></a>
+<a name="461"><span class="lineNum"> 461 </span> :<span class="lineCov"> 2 : parent = dt_vpd;</span></a>
+<a name="462"><span class="lineNum"> 462 </span> : : } else {</a>
+<a name="463"><span class="lineNum"> 463 </span> :<span class="lineCov"> 64 : p_entry = slca_get_entry(be16_to_cpu(entry-&gt;parent_index));</span></a>
+<a name="464"><span class="lineNum"> 464 </span> :<span class="lineCov"> 64 : if (!p_entry)</span></a>
+<a name="465"><span class="lineNum"> 465 </span> :<span class="lineNoCov"> 0 : goto next_entry;</span></a>
+<a name="466"><span class="lineNum"> 466 </span> :<span class="lineCov"> 64 : p_name = vpd_map_name(p_entry-&gt;fru_id);</span></a>
+<a name="467"><span class="lineNum"> 467 </span> :<span class="lineCov"> 64 : p_addr = be16_to_cpu(p_entry-&gt;rsrc_id);</span></a>
+<a name="468"><span class="lineNum"> 468 </span> :<span class="lineCov"> 64 : parent = dt_find_by_name_addr(dt_vpd, p_name, p_addr);</span></a>
+<a name="469"><span class="lineNum"> 469 </span> : : }</a>
+<a name="470"><span class="lineNum"> 470 </span> :<span class="lineCov"> 66 : if (!parent)</span></a>
+<a name="471"><span class="lineNum"> 471 </span> :<span class="lineNoCov"> 0 : goto next_entry;</span></a>
+<a name="472"><span class="lineNum"> 472 </span> : : </a>
+<a name="473"><span class="lineNum"> 473 </span> :<span class="lineCov"> 66 : node = dt_new_addr(parent, name, addr);</span></a>
+<a name="474"><span class="lineNum"> 474 </span> :<span class="lineCov"> 66 : if (!node) {</span></a>
+<a name="475"><span class="lineNum"> 475 </span> :<span class="lineNoCov"> 0 : prerror(&quot;VPD: Creating node at %s@%&quot;PRIx64&quot; failed\n&quot;,</span></a>
+<a name="476"><span class="lineNum"> 476 </span> : : name, addr);</a>
+<a name="477"><span class="lineNum"> 477 </span> :<span class="lineNoCov"> 0 : goto next_entry;</span></a>
+<a name="478"><span class="lineNum"> 478 </span> : : }</a>
+<a name="479"><span class="lineNum"> 479 </span> : : </a>
+<a name="480"><span class="lineNum"> 480 </span> : : /* Add location code */</a>
+<a name="481"><span class="lineNum"> 481 </span> :<span class="lineCov"> 66 : slca_vpd_add_loc_code(node, be16_to_cpu(entry-&gt;my_index));</span></a>
+<a name="482"><span class="lineNum"> 482 </span> : : /* Add FRU label */</a>
+<a name="483"><span class="lineNum"> 483 </span> :<span class="lineCov"> 66 : dt_add_property(node, &quot;fru-type&quot;, entry-&gt;fru_id, 2);</span></a>
+<a name="484"><span class="lineNum"> 484 </span> :<span class="lineCov"> 66 : dt_add_property_cells(node, &quot;reg&quot;, addr);</span></a>
+<a name="485"><span class="lineNum"> 485 </span> :<span class="lineCov"> 66 : dt_add_property_cells(node, &quot;#size-cells&quot;, 0);</span></a>
+<a name="486"><span class="lineNum"> 486 </span> :<span class="lineCov"> 66 : dt_add_property_cells(node, &quot;#address-cells&quot;, 1);</span></a>
+<a name="487"><span class="lineNum"> 487 </span> : : </a>
+<a name="488"><span class="lineNum"> 488 </span> :<span class="lineCov"> 139 : next_entry:</span></a>
+<a name="489"><span class="lineNum"> 489 </span> : : /* Skip dups -- dups are contiguous */</a>
+<a name="490"><span class="lineNum"> 490 </span> :<span class="lineCov"> 139 : index += entry-&gt;nr_dups;</span></a>
+<a name="491"><span class="lineNum"> 491 </span> : : }</a>
+<a name="492"><span class="lineNum"> 492 </span> : : }</a>
+<a name="493"><span class="lineNum"> 493 </span> : : </a>
+<a name="494"><span class="lineNum"> 494 </span> :<span class="lineCov"> 27 : struct dt_node *dt_add_vpd_node(const struct HDIF_common_hdr *hdr,</span></a>
+<a name="495"><span class="lineNum"> 495 </span> : : int indx_fru, int indx_vpd)</a>
+<a name="496"><span class="lineNum"> 496 </span> : : {</a>
+<a name="497"><span class="lineNum"> 497 </span> : : const struct spira_fru_id *fru_id;</a>
+<a name="498"><span class="lineNum"> 498 </span> : : unsigned int fruvpd_sz, fru_id_sz;</a>
+<a name="499"><span class="lineNum"> 499 </span> : : const struct slca_entry *entry;</a>
+<a name="500"><span class="lineNum"> 500 </span> : : struct dt_node *dt_vpd, *node;</a>
+<a name="501"><span class="lineNum"> 501 </span> : : const void *fruvpd;</a>
+<a name="502"><span class="lineNum"> 502 </span> : : const char *name;</a>
+<a name="503"><span class="lineNum"> 503 </span> : : uint64_t addr;</a>
+<a name="504"><span class="lineNum"> 504 </span> : : </a>
+<a name="505"><span class="lineNum"> 505 </span> :<span class="lineCov"> 27 : fru_id = HDIF_get_idata(hdr, indx_fru, &amp;fru_id_sz);</span></a>
+<a name="506"><span class="lineNum"> 506 </span> :<span class="lineCov"> 27 : if (!fru_id)</span></a>
+<a name="507"><span class="lineNum"> 507 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="508"><span class="lineNum"> 508 </span> : : </a>
+<a name="509"><span class="lineNum"> 509 </span> :<span class="lineCov"> 27 : fruvpd = HDIF_get_idata(hdr, indx_vpd, &amp;fruvpd_sz);</span></a>
+<a name="510"><span class="lineNum"> 510 </span> :<span class="lineCov"> 27 : if (!CHECK_SPPTR(fruvpd))</span></a>
+<a name="511"><span class="lineNum"> 511 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="512"><span class="lineNum"> 512 </span> : : </a>
+<a name="513"><span class="lineNum"> 513 </span> :<span class="lineCov"> 27 : dt_vpd = dt_find_by_path(dt_root, &quot;/vpd&quot;);</span></a>
+<a name="514"><span class="lineNum"> 514 </span> :<span class="lineCov"> 27 : if (!dt_vpd)</span></a>
+<a name="515"><span class="lineNum"> 515 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="516"><span class="lineNum"> 516 </span> : : </a>
+<a name="517"><span class="lineNum"> 517 </span> :<span class="lineCov"> 27 : entry = slca_get_entry(be16_to_cpu(fru_id-&gt;slca_index));</span></a>
+<a name="518"><span class="lineNum"> 518 </span> :<span class="lineCov"> 27 : if (!entry)</span></a>
+<a name="519"><span class="lineNum"> 519 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="520"><span class="lineNum"> 520 </span> : : </a>
+<a name="521"><span class="lineNum"> 521 </span> :<span class="lineCov"> 27 : name = vpd_map_name(entry-&gt;fru_id);</span></a>
+<a name="522"><span class="lineNum"> 522 </span> :<span class="lineCov"> 27 : addr = be16_to_cpu(entry-&gt;rsrc_id);</span></a>
+<a name="523"><span class="lineNum"> 523 </span> : : /* Get the node already created */</a>
+<a name="524"><span class="lineNum"> 524 </span> :<span class="lineCov"> 27 : node = dt_find_by_name_addr(dt_vpd, name, addr);</span></a>
+<a name="525"><span class="lineNum"> 525 </span> : : /*</a>
+<a name="526"><span class="lineNum"> 526 </span> : : * It is unlikely that node not found because vpd nodes have the</a>
+<a name="527"><span class="lineNum"> 527 </span> : : * corresponding slca entry which we would have used to populate the vpd</a>
+<a name="528"><span class="lineNum"> 528 </span> : : * tree during the 'first' pass above so that we just need to perform</a>
+<a name="529"><span class="lineNum"> 529 </span> : : * VINI parse and add the vpd data..</a>
+<a name="530"><span class="lineNum"> 530 </span> : : */</a>
+<a name="531"><span class="lineNum"> 531 </span> :<span class="lineCov"> 27 : if (!node)</span></a>
+<a name="532"><span class="lineNum"> 532 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="533"><span class="lineNum"> 533 </span> : : </a>
+<a name="534"><span class="lineNum"> 534 </span> : : /* Parse VPD fields, ensure that it has not been added already */</a>
+<a name="535"><span class="lineNum"> 535 </span> :<span class="lineCov"> 27 : if (vpd_valid(fruvpd, fruvpd_sz)</span></a>
+<a name="536"><span class="lineNum"> 536 </span> :<span class="lineCov"> 27 : &amp;&amp; !dt_find_property(node, &quot;ibm,vpd&quot;)) {</span></a>
+<a name="537"><span class="lineNum"> 537 </span> :<span class="lineCov"> 24 : dt_add_property(node, &quot;ibm,vpd&quot;, fruvpd, fruvpd_sz);</span></a>
+<a name="538"><span class="lineNum"> 538 </span> :<span class="lineCov"> 24 : vpd_data_parse(node, fruvpd, fruvpd_sz);</span></a>
+<a name="539"><span class="lineNum"> 539 </span> : : }</a>
+<a name="540"><span class="lineNum"> 540 </span> : : </a>
+<a name="541"><span class="lineNum"> 541 </span> :<span class="lineCov"> 27 : return node;</span></a>
+<a name="542"><span class="lineNum"> 542 </span> : : }</a>
+<a name="543"><span class="lineNum"> 543 </span> : : </a>
+<a name="544"><span class="lineNum"> 544 </span> :<span class="lineCov"> 2 : static void dt_add_model_name(void)</span></a>
+<a name="545"><span class="lineNum"> 545 </span> : : {</a>
+<a name="546"><span class="lineNum"> 546 </span> :<span class="lineCov"> 2 : const char *model_name = NULL;</span></a>
+<a name="547"><span class="lineNum"> 547 </span> : : const struct machine_info *mi;</a>
+<a name="548"><span class="lineNum"> 548 </span> : : const struct iplparams_sysparams *p;</a>
+<a name="549"><span class="lineNum"> 549 </span> : : const struct HDIF_common_hdr *iplp;</a>
+<a name="550"><span class="lineNum"> 550 </span> : : const struct dt_property *model;</a>
+<a name="551"><span class="lineNum"> 551 </span> : : </a>
+<a name="552"><span class="lineNum"> 552 </span> :<span class="lineCov"> 2 : model = dt_find_property(dt_root, &quot;model&quot;);</span></a>
+<a name="553"><span class="lineNum"> 553 </span> : : </a>
+<a name="554"><span class="lineNum"> 554 </span> :<span class="lineCov"> 2 : iplp = get_hdif(&amp;spira.ntuples.ipl_parms, &quot;IPLPMS&quot;);</span></a>
+<a name="555"><span class="lineNum"> 555 </span> :<span class="lineCov"> 2 : if (!iplp)</span></a>
+<a name="556"><span class="lineNum"> 556 </span> :<span class="lineNoCov"> 0 : goto def_model;</span></a>
+<a name="557"><span class="lineNum"> 557 </span> : : </a>
+<a name="558"><span class="lineNum"> 558 </span> :<span class="lineCov"> 2 : p = HDIF_get_idata(iplp, IPLPARAMS_SYSPARAMS, NULL);</span></a>
+<a name="559"><span class="lineNum"> 559 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(p))</span></a>
+<a name="560"><span class="lineNum"> 560 </span> :<span class="lineNoCov"> 0 : goto def_model;</span></a>
+<a name="561"><span class="lineNum"> 561 </span> : : </a>
+<a name="562"><span class="lineNum"> 562 </span> :<span class="lineCov"> 2 : if (be16_to_cpu(iplp-&gt;version) &gt;= 0x60)</span></a>
+<a name="563"><span class="lineNum"> 563 </span> :<span class="lineNoCov"> 0 : model_name = p-&gt;sys_type_str;</span></a>
+<a name="564"><span class="lineNum"> 564 </span> : : </a>
+<a name="565"><span class="lineNum"> 565 </span> :<span class="lineCov"> 2 : def_model:</span></a>
+<a name="566"><span class="lineNum"> 566 </span> :<span class="lineCov"> 2 : if ((!model_name || model_name[0] == '\0') &amp;&amp; model) {</span></a>
+<a name="567"><span class="lineNum"> 567 </span> :<span class="lineCov"> 2 : mi = machine_info_lookup(model-&gt;prop);</span></a>
+<a name="568"><span class="lineNum"> 568 </span> :<span class="lineCov"> 2 : if (mi)</span></a>
+<a name="569"><span class="lineNum"> 569 </span> :<span class="lineCov"> 2 : model_name = mi-&gt;name;</span></a>
+<a name="570"><span class="lineNum"> 570 </span> : : }</a>
+<a name="571"><span class="lineNum"> 571 </span> : : </a>
+<a name="572"><span class="lineNum"> 572 </span> :<span class="lineCov"> 2 : if(model_name)</span></a>
+<a name="573"><span class="lineNum"> 573 </span> :<span class="lineCov"> 2 : dt_add_property_string(dt_root, &quot;model-name&quot;, model_name);</span></a>
+<a name="574"><span class="lineNum"> 574 </span> :<span class="lineCov"> 2 : }</span></a>
+<a name="575"><span class="lineNum"> 575 </span> : : </a>
+<a name="576"><span class="lineNum"> 576 </span> :<span class="lineNoCov"> 0 : static void sysvpd_parse_opp(const void *sysvpd, unsigned int sysvpd_sz)</span></a>
+<a name="577"><span class="lineNum"> 577 </span> : : {</a>
+<a name="578"><span class="lineNum"> 578 </span> : : const char *v;</a>
+<a name="579"><span class="lineNum"> 579 </span> : : uint8_t sz;</a>
+<a name="580"><span class="lineNum"> 580 </span> : : </a>
+<a name="581"><span class="lineNum"> 581 </span> :<span class="lineNoCov"> 0 : v = vpd_find(sysvpd, sysvpd_sz, &quot;OSYS&quot;, &quot;MM&quot;, &amp;sz);</span></a>
+<a name="582"><span class="lineNum"> 582 </span> :<span class="lineNoCov"> 0 : if (v)</span></a>
+<a name="583"><span class="lineNum"> 583 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(dt_root, &quot;model&quot;, v, sz);</span></a>
+<a name="584"><span class="lineNum"> 584 </span> : : else</a>
+<a name="585"><span class="lineNum"> 585 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dt_root, &quot;model&quot;, &quot;Unknown&quot;);</span></a>
+<a name="586"><span class="lineNum"> 586 </span> : : </a>
+<a name="587"><span class="lineNum"> 587 </span> :<span class="lineNoCov"> 0 : v = vpd_find(sysvpd, sysvpd_sz, &quot;OSYS&quot;, &quot;SS&quot;, &amp;sz);</span></a>
+<a name="588"><span class="lineNum"> 588 </span> :<span class="lineNoCov"> 0 : if (v)</span></a>
+<a name="589"><span class="lineNum"> 589 </span> :<span class="lineNoCov"> 0 : dt_add_prop_sanitize_val(dt_root, &quot;system-id&quot;, v, sz);</span></a>
+<a name="590"><span class="lineNum"> 590 </span> : : else</a>
+<a name="591"><span class="lineNum"> 591 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dt_root, &quot;system-id&quot;, &quot;Unknown&quot;);</span></a>
+<a name="592"><span class="lineNum"> 592 </span> :<span class="lineNoCov"> 0 : }</span></a>
<a name="593"><span class="lineNum"> 593 </span> : : </a>
-<a name="594"><span class="lineNum"> 594 </span> :<span class="lineCov"> 2 : static void sysvpd_parse_legacy(const void *sysvpd, unsigned int sysvpd_sz)</span></a>
-<a name="595"><span class="lineNum"> 595 </span> : : {</a>
-<a name="596"><span class="lineNum"> 596 </span> : : const char *model;</a>
-<a name="597"><span class="lineNum"> 597 </span> : : const char *system_id;</a>
-<a name="598"><span class="lineNum"> 598 </span> : : const char *brand;</a>
-<a name="599"><span class="lineNum"> 599 </span> : : uint8_t sz;</a>
-<a name="600"><span class="lineNum"> 600 </span> : : </a>
-<a name="601"><span class="lineNum"> 601 </span> :<span class="lineCov"> 2 : model = vpd_find(sysvpd, sysvpd_sz, &quot;VSYS&quot;, &quot;TM&quot;, &amp;sz);</span></a>
-<a name="602"><span class="lineNum"> 602 </span> :<span class="lineCov"> 2 : if (model)</span></a>
-<a name="603"><span class="lineNum"> 603 </span> :<span class="lineCov"> 2 : dt_add_prop_sanitize_val(dt_root, &quot;model&quot;, model, sz);</span></a>
-<a name="604"><span class="lineNum"> 604 </span> : : else</a>
-<a name="605"><span class="lineNum"> 605 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dt_root, &quot;model&quot;, &quot;Unknown&quot;);</span></a>
-<a name="606"><span class="lineNum"> 606 </span> : : </a>
-<a name="607"><span class="lineNum"> 607 </span> :<span class="lineCov"> 2 : system_id = vpd_find(sysvpd, sysvpd_sz, &quot;VSYS&quot;, &quot;SE&quot;, &amp;sz);</span></a>
-<a name="608"><span class="lineNum"> 608 </span> :<span class="lineCov"> 2 : if (system_id)</span></a>
-<a name="609"><span class="lineNum"> 609 </span> :<span class="lineCov"> 2 : dt_add_prop_sanitize_val(dt_root, &quot;system-id&quot;, system_id, sz);</span></a>
-<a name="610"><span class="lineNum"> 610 </span> : : else</a>
-<a name="611"><span class="lineNum"> 611 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dt_root, &quot;system-id&quot;, &quot;Unknown&quot;);</span></a>
-<a name="612"><span class="lineNum"> 612 </span> : : </a>
-<a name="613"><span class="lineNum"> 613 </span> :<span class="lineCov"> 2 : brand = vpd_find(sysvpd, sysvpd_sz, &quot;VSYS&quot;, &quot;BR&quot;, &amp;sz);</span></a>
-<a name="614"><span class="lineNum"> 614 </span> :<span class="lineCov"> 2 : if (brand)</span></a>
-<a name="615"><span class="lineNum"> 615 </span> :<span class="lineCov"> 2 : dt_add_prop_sanitize_val(dt_root, &quot;system-brand&quot;, brand, sz);</span></a>
-<a name="616"><span class="lineNum"> 616 </span> : : else</a>
-<a name="617"><span class="lineNum"> 617 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dt_root, &quot;brand&quot;, &quot;Unknown&quot;);</span></a>
-<a name="618"><span class="lineNum"> 618 </span> :<span class="lineCov"> 2 : }</span></a>
-<a name="619"><span class="lineNum"> 619 </span> : : </a>
-<a name="620"><span class="lineNum"> 620 </span> :<span class="lineCov"> 2 : static void sysvpd_parse(void)</span></a>
-<a name="621"><span class="lineNum"> 621 </span> : : {</a>
-<a name="622"><span class="lineNum"> 622 </span> : : const void *sysvpd;</a>
-<a name="623"><span class="lineNum"> 623 </span> : : unsigned int sysvpd_sz;</a>
-<a name="624"><span class="lineNum"> 624 </span> : : unsigned int fru_id_sz;</a>
-<a name="625"><span class="lineNum"> 625 </span> : : struct dt_node *dt_vpd;</a>
-<a name="626"><span class="lineNum"> 626 </span> : : const struct spira_fru_id *fru_id;</a>
-<a name="627"><span class="lineNum"> 627 </span> : : struct HDIF_common_hdr *sysvpd_hdr;</a>
-<a name="628"><span class="lineNum"> 628 </span> : : </a>
-<a name="629"><span class="lineNum"> 629 </span> :<span class="lineCov"> 2 : sysvpd_hdr = get_hdif(&amp;spira.ntuples.system_vpd, SYSVPD_HDIF_SIG);</span></a>
-<a name="630"><span class="lineNum"> 630 </span> :<span class="lineCov"> 2 : if (!sysvpd_hdr)</span></a>
-<a name="631"><span class="lineNum"> 631 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="632"><span class="lineNum"> 632 </span> : : </a>
-<a name="633"><span class="lineNum"> 633 </span> :<span class="lineCov"> 2 : fru_id = HDIF_get_idata(sysvpd_hdr, SYSVPD_IDATA_FRU_ID, &amp;fru_id_sz);</span></a>
-<a name="634"><span class="lineNum"> 634 </span> :<span class="lineCov"> 2 : if (!fru_id)</span></a>
-<a name="635"><span class="lineNum"> 635 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="636"><span class="lineNum"> 636 </span> : : </a>
-<a name="637"><span class="lineNum"> 637 </span> :<span class="lineCov"> 2 : sysvpd = HDIF_get_idata(sysvpd_hdr, SYSVPD_IDATA_KW_VPD, &amp;sysvpd_sz);</span></a>
-<a name="638"><span class="lineNum"> 638 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(sysvpd))</span></a>
-<a name="639"><span class="lineNum"> 639 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="640"><span class="lineNum"> 640 </span> : : </a>
-<a name="641"><span class="lineNum"> 641 </span> : : /* Add system VPD */</a>
-<a name="642"><span class="lineNum"> 642 </span> :<span class="lineCov"> 2 : dt_vpd = dt_find_by_path(dt_root, &quot;/vpd&quot;);</span></a>
-<a name="643"><span class="lineNum"> 643 </span> :<span class="lineCov"> 2 : if (dt_vpd) {</span></a>
-<a name="644"><span class="lineNum"> 644 </span> :<span class="lineCov"> 2 : dt_add_property(dt_vpd, &quot;ibm,vpd&quot;, sysvpd, sysvpd_sz);</span></a>
-<a name="645"><span class="lineNum"> 645 </span> :<span class="lineCov"> 2 : slca_vpd_add_loc_code(dt_vpd, be16_to_cpu(fru_id-&gt;slca_index));</span></a>
-<a name="646"><span class="lineNum"> 646 </span> : : }</a>
-<a name="647"><span class="lineNum"> 647 </span> : : </a>
-<a name="648"><span class="lineNum"> 648 </span> : : /* Look for the new OpenPower &quot;OSYS&quot; first */</a>
-<a name="649"><span class="lineNum"> 649 </span> :<span class="lineCov"> 2 : if (vpd_find_record(sysvpd, sysvpd_sz, &quot;OSYS&quot;, NULL))</span></a>
-<a name="650"><span class="lineNum"> 650 </span> :<span class="lineNoCov"> 0 : sysvpd_parse_opp(sysvpd, sysvpd_sz);</span></a>
-<a name="651"><span class="lineNum"> 651 </span> : : else</a>
-<a name="652"><span class="lineNum"> 652 </span> :<span class="lineCov"> 2 : sysvpd_parse_legacy(sysvpd, sysvpd_sz);</span></a>
-<a name="653"><span class="lineNum"> 653 </span> : : </a>
-<a name="654"><span class="lineNum"> 654 </span> :<span class="lineCov"> 2 : dt_add_model_name();</span></a>
-<a name="655"><span class="lineNum"> 655 </span> : : }</a>
-<a name="656"><span class="lineNum"> 656 </span> : : </a>
-<a name="657"><span class="lineNum"> 657 </span> :<span class="lineCov"> 3 : static void iokid_vpd_parse(const struct HDIF_common_hdr *iohub_hdr)</span></a>
-<a name="658"><span class="lineNum"> 658 </span> : : {</a>
-<a name="659"><span class="lineNum"> 659 </span> : : const struct HDIF_child_ptr *iokids;</a>
-<a name="660"><span class="lineNum"> 660 </span> : : const struct HDIF_common_hdr *iokid;</a>
-<a name="661"><span class="lineNum"> 661 </span> : : unsigned int i;</a>
-<a name="662"><span class="lineNum"> 662 </span> : : </a>
-<a name="663"><span class="lineNum"> 663 </span> :<span class="lineCov"> 3 : iokids = HDIF_child_arr(iohub_hdr, CECHUB_CHILD_IO_KIDS);</span></a>
-<a name="664"><span class="lineNum"> 664 </span> :<span class="lineCov"> 3 : if (!CHECK_SPPTR(iokids)) {</span></a>
-<a name="665"><span class="lineNum"> 665 </span> :<span class="lineNoCov"> 0 : prerror(&quot;VPD: No IOKID child array\n&quot;);</span></a>
-<a name="666"><span class="lineNum"> 666 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="667"><span class="lineNum"> 667 </span> : : }</a>
-<a name="668"><span class="lineNum"> 668 </span> : : </a>
-<a name="669"><span class="lineNum"> 669 </span> :<span class="lineCov"> 6 : for (i = 0; i &lt; be32_to_cpu(iokids-&gt;count); i++) {</span></a>
-<a name="670"><span class="lineNum"> 670 </span> :<span class="lineCov"> 3 : iokid = HDIF_child(iohub_hdr, iokids, i,</span></a>
-<a name="671"><span class="lineNum"> 671 </span> : : IOKID_FRU_HDIF_SIG);</a>
-<a name="672"><span class="lineNum"> 672 </span> : : /* IO KID VPD structure layout is similar to FRUVPD */</a>
-<a name="673"><span class="lineNum"> 673 </span> :<span class="lineCov"> 3 : if (iokid)</span></a>
-<a name="674"><span class="lineNum"> 674 </span> :<span class="lineCov"> 3 : dt_add_vpd_node(iokid,</span></a>
-<a name="675"><span class="lineNum"> 675 </span> : : FRUVPD_IDATA_FRU_ID, FRUVPD_IDATA_KW_VPD);</a>
-<a name="676"><span class="lineNum"> 676 </span> : : }</a>
-<a name="677"><span class="lineNum"> 677 </span> : : }</a>
-<a name="678"><span class="lineNum"> 678 </span> : : </a>
-<a name="679"><span class="lineNum"> 679 </span> :<span class="lineCov"> 2 : static void iohub_vpd_parse(void)</span></a>
-<a name="680"><span class="lineNum"> 680 </span> : : {</a>
-<a name="681"><span class="lineNum"> 681 </span> : : const struct HDIF_common_hdr *iohub_hdr;</a>
-<a name="682"><span class="lineNum"> 682 </span> : : const struct cechub_hub_fru_id *fru_id_data;</a>
-<a name="683"><span class="lineNum"> 683 </span> : : unsigned int i, vpd_sz, fru_id_sz;</a>
-<a name="684"><span class="lineNum"> 684 </span> : : </a>
-<a name="685"><span class="lineNum"> 685 </span> :<span class="lineCov"> 2 : if (!get_hdif(&amp;spira.ntuples.cec_iohub_fru, CECHUB_FRU_HDIF_SIG)) {</span></a>
-<a name="686"><span class="lineNum"> 686 </span> :<span class="lineNoCov"> 0 : prerror(&quot;VPD: Could not find IO HUB FRU data\n&quot;);</span></a>
-<a name="687"><span class="lineNum"> 687 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="688"><span class="lineNum"> 688 </span> : : }</a>
-<a name="689"><span class="lineNum"> 689 </span> : : </a>
-<a name="690"><span class="lineNum"> 690 </span> :<span class="lineCov"> 5 : for_each_ntuple_idx(&amp;spira.ntuples.cec_iohub_fru, iohub_hdr,</span></a>
-<a name="691"><span class="lineNum"> 691 </span> : : i, CECHUB_FRU_HDIF_SIG) {</a>
-<a name="692"><span class="lineNum"> 692 </span> : : </a>
-<a name="693"><span class="lineNum"> 693 </span> :<span class="lineCov"> 3 : fru_id_data = HDIF_get_idata(iohub_hdr,</span></a>
-<a name="694"><span class="lineNum"> 694 </span> : : CECHUB_FRU_ID_DATA_AREA,</a>
-<a name="695"><span class="lineNum"> 695 </span> : : &amp;fru_id_sz);</a>
-<a name="696"><span class="lineNum"> 696 </span> : : </a>
-<a name="697"><span class="lineNum"> 697 </span> : : /* P8, IO HUB is on processor card and we have a</a>
-<a name="698"><span class="lineNum"> 698 </span> : : * daughter card array</a>
-<a name="699"><span class="lineNum"> 699 </span> : : */</a>
-<a name="700"><span class="lineNum"> 700 </span> :<span class="lineCov"> 6 : if (fru_id_data &amp;&amp;</span></a>
-<a name="701"><span class="lineNum"> 701 </span> :<span class="lineCov"> 3 : be32_to_cpu(fru_id_data-&gt;card_type) == CECHUB_FRU_TYPE_CPU_CARD) {</span></a>
-<a name="702"><span class="lineNum"> 702 </span> :<span class="lineCov"> 3 : iokid_vpd_parse(iohub_hdr);</span></a>
-<a name="703"><span class="lineNum"> 703 </span> :<span class="lineCov"> 3 : continue;</span></a>
-<a name="704"><span class="lineNum"> 704 </span> : : }</a>
-<a name="705"><span class="lineNum"> 705 </span> : : </a>
-<a name="706"><span class="lineNum"> 706 </span> :<span class="lineNoCov"> 0 : if (HDIF_get_idata(iohub_hdr,</span></a>
-<a name="707"><span class="lineNum"> 707 </span> : : CECHUB_ASCII_KEYWORD_VPD, &amp;vpd_sz))</a>
-<a name="708"><span class="lineNum"> 708 </span> :<span class="lineNoCov"> 0 : dt_add_vpd_node(iohub_hdr, CECHUB_FRU_ID_DATA,</span></a>
-<a name="709"><span class="lineNum"> 709 </span> : : CECHUB_ASCII_KEYWORD_VPD);</a>
-<a name="710"><span class="lineNum"> 710 </span> : : }</a>
-<a name="711"><span class="lineNum"> 711 </span> : : }</a>
-<a name="712"><span class="lineNum"> 712 </span> : : </a>
-<a name="713"><span class="lineNum"> 713 </span> :<span class="lineCov"> 14 : static void _vpd_parse(struct spira_ntuple tuple)</span></a>
-<a name="714"><span class="lineNum"> 714 </span> : : {</a>
-<a name="715"><span class="lineNum"> 715 </span> : : const struct HDIF_common_hdr *fruvpd_hdr;</a>
-<a name="716"><span class="lineNum"> 716 </span> : : unsigned int i;</a>
-<a name="717"><span class="lineNum"> 717 </span> : : </a>
-<a name="718"><span class="lineNum"> 718 </span> :<span class="lineCov"> 14 : if (!get_hdif(&amp;tuple, FRUVPD_HDIF_SIG))</span></a>
-<a name="719"><span class="lineNum"> 719 </span> :<span class="lineCov"> 4 : return;</span></a>
-<a name="720"><span class="lineNum"> 720 </span> : : </a>
-<a name="721"><span class="lineNum"> 721 </span> :<span class="lineCov"> 20 : for_each_ntuple_idx(&amp;tuple, fruvpd_hdr, i, FRUVPD_HDIF_SIG)</span></a>
-<a name="722"><span class="lineNum"> 722 </span> :<span class="lineCov"> 10 : dt_add_vpd_node(fruvpd_hdr,</span></a>
-<a name="723"><span class="lineNum"> 723 </span> : : FRUVPD_IDATA_FRU_ID, FRUVPD_IDATA_KW_VPD);</a>
-<a name="724"><span class="lineNum"> 724 </span> : : }</a>
-<a name="725"><span class="lineNum"> 725 </span> : : </a>
-<a name="726"><span class="lineNum"> 726 </span> :<span class="lineCov"> 2 : void vpd_parse(void)</span></a>
-<a name="727"><span class="lineNum"> 727 </span> : : {</a>
-<a name="728"><span class="lineNum"> 728 </span> : : const struct HDIF_common_hdr *fruvpd_hdr;</a>
-<a name="729"><span class="lineNum"> 729 </span> : : </a>
-<a name="730"><span class="lineNum"> 730 </span> : : /* System VPD uses the VSYS record, so its special */</a>
-<a name="731"><span class="lineNum"> 731 </span> :<span class="lineCov"> 2 : sysvpd_parse();</span></a>
-<a name="732"><span class="lineNum"> 732 </span> : : </a>
-<a name="733"><span class="lineNum"> 733 </span> : : /* Enclosure */</a>
-<a name="734"><span class="lineNum"> 734 </span> :<span class="lineCov"> 2 : _vpd_parse(spira.ntuples.nt_enclosure_vpd);</span></a>
-<a name="735"><span class="lineNum"> 735 </span> : : </a>
-<a name="736"><span class="lineNum"> 736 </span> : : /* Backplane */</a>
-<a name="737"><span class="lineNum"> 737 </span> :<span class="lineCov"> 2 : _vpd_parse(spira.ntuples.backplane_vpd);</span></a>
-<a name="738"><span class="lineNum"> 738 </span> : : </a>
-<a name="739"><span class="lineNum"> 739 </span> : : /* clock card -- does this use the FRUVPD sig? */</a>
-<a name="740"><span class="lineNum"> 740 </span> :<span class="lineCov"> 2 : _vpd_parse(spira.ntuples.clock_vpd);</span></a>
-<a name="741"><span class="lineNum"> 741 </span> : : </a>
-<a name="742"><span class="lineNum"> 742 </span> : : /* Anchor card */</a>
-<a name="743"><span class="lineNum"> 743 </span> :<span class="lineCov"> 2 : _vpd_parse(spira.ntuples.anchor_vpd);</span></a>
-<a name="744"><span class="lineNum"> 744 </span> : : </a>
-<a name="745"><span class="lineNum"> 745 </span> : : /* Op panel -- does this use the FRUVPD sig? */</a>
-<a name="746"><span class="lineNum"> 746 </span> :<span class="lineCov"> 2 : _vpd_parse(spira.ntuples.op_panel_vpd);</span></a>
-<a name="747"><span class="lineNum"> 747 </span> : : </a>
-<a name="748"><span class="lineNum"> 748 </span> : : /* External cache FRU vpd -- does this use the FRUVPD sig? */</a>
-<a name="749"><span class="lineNum"> 749 </span> :<span class="lineCov"> 2 : _vpd_parse(spira.ntuples.ext_cache_fru_vpd);</span></a>
-<a name="750"><span class="lineNum"> 750 </span> : : </a>
-<a name="751"><span class="lineNum"> 751 </span> : : /* Misc CEC FRU */</a>
-<a name="752"><span class="lineNum"> 752 </span> :<span class="lineCov"> 2 : _vpd_parse(spira.ntuples.misc_cec_fru_vpd);</span></a>
-<a name="753"><span class="lineNum"> 753 </span> : : </a>
-<a name="754"><span class="lineNum"> 754 </span> : : /* CEC IO HUB FRU */</a>
-<a name="755"><span class="lineNum"> 755 </span> :<span class="lineCov"> 2 : iohub_vpd_parse();</span></a>
-<a name="756"><span class="lineNum"> 756 </span> : : </a>
-<a name="757"><span class="lineNum"> 757 </span> : : /*</a>
-<a name="758"><span class="lineNum"> 758 </span> : : * SP subsystem -- while the rest of the SPINFO structure is</a>
-<a name="759"><span class="lineNum"> 759 </span> : : * different, the FRU ID data and pointer pair to keyword VPD</a>
-<a name="760"><span class="lineNum"> 760 </span> : : * are the same offset as a FRUVPD entry. So reuse it</a>
-<a name="761"><span class="lineNum"> 761 </span> : : */</a>
-<a name="762"><span class="lineNum"> 762 </span> :<span class="lineCov"> 2 : fruvpd_hdr = get_hdif(&amp;spira.ntuples.sp_subsys, SPSS_HDIF_SIG);</span></a>
-<a name="763"><span class="lineNum"> 763 </span> :<span class="lineCov"> 2 : if (fruvpd_hdr)</span></a>
-<a name="764"><span class="lineNum"> 764 </span> :<span class="lineCov"> 2 : dt_add_vpd_node(fruvpd_hdr,</span></a>
-<a name="765"><span class="lineNum"> 765 </span> : : FRUVPD_IDATA_FRU_ID, FRUVPD_IDATA_KW_VPD);</a>
-<a name="766"><span class="lineNum"> 766 </span> :<span class="lineCov"> 2 : }</span></a>
+<a name="594"><span class="lineNum"> 594 </span> : : </a>
+<a name="595"><span class="lineNum"> 595 </span> :<span class="lineCov"> 2 : static void sysvpd_parse_legacy(const void *sysvpd, unsigned int sysvpd_sz)</span></a>
+<a name="596"><span class="lineNum"> 596 </span> : : {</a>
+<a name="597"><span class="lineNum"> 597 </span> : : const char *model;</a>
+<a name="598"><span class="lineNum"> 598 </span> : : const char *system_id;</a>
+<a name="599"><span class="lineNum"> 599 </span> : : const char *brand;</a>
+<a name="600"><span class="lineNum"> 600 </span> : : uint8_t sz;</a>
+<a name="601"><span class="lineNum"> 601 </span> : : </a>
+<a name="602"><span class="lineNum"> 602 </span> :<span class="lineCov"> 2 : model = vpd_find(sysvpd, sysvpd_sz, &quot;VSYS&quot;, &quot;TM&quot;, &amp;sz);</span></a>
+<a name="603"><span class="lineNum"> 603 </span> :<span class="lineCov"> 2 : if (model)</span></a>
+<a name="604"><span class="lineNum"> 604 </span> :<span class="lineCov"> 2 : dt_add_prop_sanitize_val(dt_root, &quot;model&quot;, model, sz);</span></a>
+<a name="605"><span class="lineNum"> 605 </span> : : else</a>
+<a name="606"><span class="lineNum"> 606 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dt_root, &quot;model&quot;, &quot;Unknown&quot;);</span></a>
+<a name="607"><span class="lineNum"> 607 </span> : : </a>
+<a name="608"><span class="lineNum"> 608 </span> :<span class="lineCov"> 2 : system_id = vpd_find(sysvpd, sysvpd_sz, &quot;VSYS&quot;, &quot;SE&quot;, &amp;sz);</span></a>
+<a name="609"><span class="lineNum"> 609 </span> :<span class="lineCov"> 2 : if (system_id)</span></a>
+<a name="610"><span class="lineNum"> 610 </span> :<span class="lineCov"> 2 : dt_add_prop_sanitize_val(dt_root, &quot;system-id&quot;, system_id, sz);</span></a>
+<a name="611"><span class="lineNum"> 611 </span> : : else</a>
+<a name="612"><span class="lineNum"> 612 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dt_root, &quot;system-id&quot;, &quot;Unknown&quot;);</span></a>
+<a name="613"><span class="lineNum"> 613 </span> : : </a>
+<a name="614"><span class="lineNum"> 614 </span> :<span class="lineCov"> 2 : brand = vpd_find(sysvpd, sysvpd_sz, &quot;VSYS&quot;, &quot;BR&quot;, &amp;sz);</span></a>
+<a name="615"><span class="lineNum"> 615 </span> :<span class="lineCov"> 2 : if (brand)</span></a>
+<a name="616"><span class="lineNum"> 616 </span> :<span class="lineCov"> 2 : dt_add_prop_sanitize_val(dt_root, &quot;system-brand&quot;, brand, sz);</span></a>
+<a name="617"><span class="lineNum"> 617 </span> : : else</a>
+<a name="618"><span class="lineNum"> 618 </span> :<span class="lineNoCov"> 0 : dt_add_property_string(dt_root, &quot;brand&quot;, &quot;Unknown&quot;);</span></a>
+<a name="619"><span class="lineNum"> 619 </span> :<span class="lineCov"> 2 : }</span></a>
+<a name="620"><span class="lineNum"> 620 </span> : : </a>
+<a name="621"><span class="lineNum"> 621 </span> :<span class="lineCov"> 2 : static void sysvpd_parse(void)</span></a>
+<a name="622"><span class="lineNum"> 622 </span> : : {</a>
+<a name="623"><span class="lineNum"> 623 </span> : : const void *sysvpd;</a>
+<a name="624"><span class="lineNum"> 624 </span> : : unsigned int sysvpd_sz;</a>
+<a name="625"><span class="lineNum"> 625 </span> : : unsigned int fru_id_sz;</a>
+<a name="626"><span class="lineNum"> 626 </span> : : struct dt_node *dt_vpd;</a>
+<a name="627"><span class="lineNum"> 627 </span> : : const struct spira_fru_id *fru_id;</a>
+<a name="628"><span class="lineNum"> 628 </span> : : struct HDIF_common_hdr *sysvpd_hdr;</a>
+<a name="629"><span class="lineNum"> 629 </span> : : </a>
+<a name="630"><span class="lineNum"> 630 </span> :<span class="lineCov"> 2 : sysvpd_hdr = get_hdif(&amp;spira.ntuples.system_vpd, SYSVPD_HDIF_SIG);</span></a>
+<a name="631"><span class="lineNum"> 631 </span> :<span class="lineCov"> 2 : if (!sysvpd_hdr)</span></a>
+<a name="632"><span class="lineNum"> 632 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="633"><span class="lineNum"> 633 </span> : : </a>
+<a name="634"><span class="lineNum"> 634 </span> :<span class="lineCov"> 2 : fru_id = HDIF_get_idata(sysvpd_hdr, SYSVPD_IDATA_FRU_ID, &amp;fru_id_sz);</span></a>
+<a name="635"><span class="lineNum"> 635 </span> :<span class="lineCov"> 2 : if (!fru_id)</span></a>
+<a name="636"><span class="lineNum"> 636 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="637"><span class="lineNum"> 637 </span> : : </a>
+<a name="638"><span class="lineNum"> 638 </span> :<span class="lineCov"> 2 : sysvpd = HDIF_get_idata(sysvpd_hdr, SYSVPD_IDATA_KW_VPD, &amp;sysvpd_sz);</span></a>
+<a name="639"><span class="lineNum"> 639 </span> :<span class="lineCov"> 2 : if (!CHECK_SPPTR(sysvpd))</span></a>
+<a name="640"><span class="lineNum"> 640 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="641"><span class="lineNum"> 641 </span> : : </a>
+<a name="642"><span class="lineNum"> 642 </span> : : /* Add system VPD */</a>
+<a name="643"><span class="lineNum"> 643 </span> :<span class="lineCov"> 2 : dt_vpd = dt_find_by_path(dt_root, &quot;/vpd&quot;);</span></a>
+<a name="644"><span class="lineNum"> 644 </span> :<span class="lineCov"> 2 : if (dt_vpd) {</span></a>
+<a name="645"><span class="lineNum"> 645 </span> :<span class="lineCov"> 2 : dt_add_property(dt_vpd, &quot;ibm,vpd&quot;, sysvpd, sysvpd_sz);</span></a>
+<a name="646"><span class="lineNum"> 646 </span> :<span class="lineCov"> 2 : slca_vpd_add_loc_code(dt_vpd, be16_to_cpu(fru_id-&gt;slca_index));</span></a>
+<a name="647"><span class="lineNum"> 647 </span> : : }</a>
+<a name="648"><span class="lineNum"> 648 </span> : : </a>
+<a name="649"><span class="lineNum"> 649 </span> : : /* Look for the new OpenPower &quot;OSYS&quot; first */</a>
+<a name="650"><span class="lineNum"> 650 </span> :<span class="lineCov"> 2 : if (vpd_find_record(sysvpd, sysvpd_sz, &quot;OSYS&quot;, NULL))</span></a>
+<a name="651"><span class="lineNum"> 651 </span> :<span class="lineNoCov"> 0 : sysvpd_parse_opp(sysvpd, sysvpd_sz);</span></a>
+<a name="652"><span class="lineNum"> 652 </span> : : else</a>
+<a name="653"><span class="lineNum"> 653 </span> :<span class="lineCov"> 2 : sysvpd_parse_legacy(sysvpd, sysvpd_sz);</span></a>
+<a name="654"><span class="lineNum"> 654 </span> : : </a>
+<a name="655"><span class="lineNum"> 655 </span> :<span class="lineCov"> 2 : dt_add_model_name();</span></a>
+<a name="656"><span class="lineNum"> 656 </span> : : }</a>
+<a name="657"><span class="lineNum"> 657 </span> : : </a>
+<a name="658"><span class="lineNum"> 658 </span> :<span class="lineCov"> 3 : static void iokid_vpd_parse(const struct HDIF_common_hdr *iohub_hdr)</span></a>
+<a name="659"><span class="lineNum"> 659 </span> : : {</a>
+<a name="660"><span class="lineNum"> 660 </span> : : const struct HDIF_child_ptr *iokids;</a>
+<a name="661"><span class="lineNum"> 661 </span> : : const struct HDIF_common_hdr *iokid;</a>
+<a name="662"><span class="lineNum"> 662 </span> : : unsigned int i;</a>
+<a name="663"><span class="lineNum"> 663 </span> : : </a>
+<a name="664"><span class="lineNum"> 664 </span> :<span class="lineCov"> 3 : iokids = HDIF_child_arr(iohub_hdr, CECHUB_CHILD_IO_KIDS);</span></a>
+<a name="665"><span class="lineNum"> 665 </span> :<span class="lineCov"> 3 : if (!CHECK_SPPTR(iokids)) {</span></a>
+<a name="666"><span class="lineNum"> 666 </span> :<span class="lineNoCov"> 0 : prerror(&quot;VPD: No IOKID child array\n&quot;);</span></a>
+<a name="667"><span class="lineNum"> 667 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="668"><span class="lineNum"> 668 </span> : : }</a>
+<a name="669"><span class="lineNum"> 669 </span> : : </a>
+<a name="670"><span class="lineNum"> 670 </span> :<span class="lineCov"> 6 : for (i = 0; i &lt; be32_to_cpu(iokids-&gt;count); i++) {</span></a>
+<a name="671"><span class="lineNum"> 671 </span> :<span class="lineCov"> 3 : iokid = HDIF_child(iohub_hdr, iokids, i,</span></a>
+<a name="672"><span class="lineNum"> 672 </span> : : IOKID_FRU_HDIF_SIG);</a>
+<a name="673"><span class="lineNum"> 673 </span> : : /* IO KID VPD structure layout is similar to FRUVPD */</a>
+<a name="674"><span class="lineNum"> 674 </span> :<span class="lineCov"> 3 : if (iokid)</span></a>
+<a name="675"><span class="lineNum"> 675 </span> :<span class="lineCov"> 3 : dt_add_vpd_node(iokid,</span></a>
+<a name="676"><span class="lineNum"> 676 </span> : : FRUVPD_IDATA_FRU_ID, FRUVPD_IDATA_KW_VPD);</a>
+<a name="677"><span class="lineNum"> 677 </span> : : }</a>
+<a name="678"><span class="lineNum"> 678 </span> : : }</a>
+<a name="679"><span class="lineNum"> 679 </span> : : </a>
+<a name="680"><span class="lineNum"> 680 </span> :<span class="lineCov"> 2 : static void iohub_vpd_parse(void)</span></a>
+<a name="681"><span class="lineNum"> 681 </span> : : {</a>
+<a name="682"><span class="lineNum"> 682 </span> : : const struct HDIF_common_hdr *iohub_hdr;</a>
+<a name="683"><span class="lineNum"> 683 </span> : : const struct cechub_hub_fru_id *fru_id_data;</a>
+<a name="684"><span class="lineNum"> 684 </span> : : unsigned int i, vpd_sz, fru_id_sz;</a>
+<a name="685"><span class="lineNum"> 685 </span> : : </a>
+<a name="686"><span class="lineNum"> 686 </span> :<span class="lineCov"> 2 : if (!get_hdif(&amp;spira.ntuples.cec_iohub_fru, CECHUB_FRU_HDIF_SIG)) {</span></a>
+<a name="687"><span class="lineNum"> 687 </span> :<span class="lineNoCov"> 0 : prerror(&quot;VPD: Could not find IO HUB FRU data\n&quot;);</span></a>
+<a name="688"><span class="lineNum"> 688 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="689"><span class="lineNum"> 689 </span> : : }</a>
+<a name="690"><span class="lineNum"> 690 </span> : : </a>
+<a name="691"><span class="lineNum"> 691 </span> :<span class="lineCov"> 5 : for_each_ntuple_idx(&amp;spira.ntuples.cec_iohub_fru, iohub_hdr,</span></a>
+<a name="692"><span class="lineNum"> 692 </span> : : i, CECHUB_FRU_HDIF_SIG) {</a>
+<a name="693"><span class="lineNum"> 693 </span> : : </a>
+<a name="694"><span class="lineNum"> 694 </span> :<span class="lineCov"> 3 : fru_id_data = HDIF_get_idata(iohub_hdr,</span></a>
+<a name="695"><span class="lineNum"> 695 </span> : : CECHUB_FRU_ID_DATA_AREA,</a>
+<a name="696"><span class="lineNum"> 696 </span> : : &amp;fru_id_sz);</a>
+<a name="697"><span class="lineNum"> 697 </span> : : </a>
+<a name="698"><span class="lineNum"> 698 </span> : : /* P8, IO HUB is on processor card and we have a</a>
+<a name="699"><span class="lineNum"> 699 </span> : : * daughter card array</a>
+<a name="700"><span class="lineNum"> 700 </span> : : */</a>
+<a name="701"><span class="lineNum"> 701 </span> :<span class="lineCov"> 6 : if (fru_id_data &amp;&amp;</span></a>
+<a name="702"><span class="lineNum"> 702 </span> :<span class="lineCov"> 3 : be32_to_cpu(fru_id_data-&gt;card_type) == CECHUB_FRU_TYPE_CPU_CARD) {</span></a>
+<a name="703"><span class="lineNum"> 703 </span> :<span class="lineCov"> 3 : iokid_vpd_parse(iohub_hdr);</span></a>
+<a name="704"><span class="lineNum"> 704 </span> :<span class="lineCov"> 3 : continue;</span></a>
+<a name="705"><span class="lineNum"> 705 </span> : : }</a>
+<a name="706"><span class="lineNum"> 706 </span> : : </a>
+<a name="707"><span class="lineNum"> 707 </span> :<span class="lineNoCov"> 0 : if (HDIF_get_idata(iohub_hdr,</span></a>
+<a name="708"><span class="lineNum"> 708 </span> : : CECHUB_ASCII_KEYWORD_VPD, &amp;vpd_sz))</a>
+<a name="709"><span class="lineNum"> 709 </span> :<span class="lineNoCov"> 0 : dt_add_vpd_node(iohub_hdr, CECHUB_FRU_ID_DATA,</span></a>
+<a name="710"><span class="lineNum"> 710 </span> : : CECHUB_ASCII_KEYWORD_VPD);</a>
+<a name="711"><span class="lineNum"> 711 </span> : : }</a>
+<a name="712"><span class="lineNum"> 712 </span> : : }</a>
+<a name="713"><span class="lineNum"> 713 </span> : : </a>
+<a name="714"><span class="lineNum"> 714 </span> :<span class="lineCov"> 14 : static void _vpd_parse(struct spira_ntuple tuple)</span></a>
+<a name="715"><span class="lineNum"> 715 </span> : : {</a>
+<a name="716"><span class="lineNum"> 716 </span> : : const struct HDIF_common_hdr *fruvpd_hdr;</a>
+<a name="717"><span class="lineNum"> 717 </span> : : unsigned int i;</a>
+<a name="718"><span class="lineNum"> 718 </span> : : </a>
+<a name="719"><span class="lineNum"> 719 </span> :<span class="lineCov"> 14 : if (!get_hdif(&amp;tuple, FRUVPD_HDIF_SIG))</span></a>
+<a name="720"><span class="lineNum"> 720 </span> :<span class="lineCov"> 4 : return;</span></a>
+<a name="721"><span class="lineNum"> 721 </span> : : </a>
+<a name="722"><span class="lineNum"> 722 </span> :<span class="lineCov"> 20 : for_each_ntuple_idx(&amp;tuple, fruvpd_hdr, i, FRUVPD_HDIF_SIG)</span></a>
+<a name="723"><span class="lineNum"> 723 </span> :<span class="lineCov"> 10 : dt_add_vpd_node(fruvpd_hdr,</span></a>
+<a name="724"><span class="lineNum"> 724 </span> : : FRUVPD_IDATA_FRU_ID, FRUVPD_IDATA_KW_VPD);</a>
+<a name="725"><span class="lineNum"> 725 </span> : : }</a>
+<a name="726"><span class="lineNum"> 726 </span> : : </a>
+<a name="727"><span class="lineNum"> 727 </span> :<span class="lineCov"> 2 : void vpd_parse(void)</span></a>
+<a name="728"><span class="lineNum"> 728 </span> : : {</a>
+<a name="729"><span class="lineNum"> 729 </span> : : const struct HDIF_common_hdr *fruvpd_hdr;</a>
+<a name="730"><span class="lineNum"> 730 </span> : : </a>
+<a name="731"><span class="lineNum"> 731 </span> : : /* System VPD uses the VSYS record, so its special */</a>
+<a name="732"><span class="lineNum"> 732 </span> :<span class="lineCov"> 2 : sysvpd_parse();</span></a>
+<a name="733"><span class="lineNum"> 733 </span> : : </a>
+<a name="734"><span class="lineNum"> 734 </span> : : /* Enclosure */</a>
+<a name="735"><span class="lineNum"> 735 </span> :<span class="lineCov"> 2 : _vpd_parse(spira.ntuples.nt_enclosure_vpd);</span></a>
+<a name="736"><span class="lineNum"> 736 </span> : : </a>
+<a name="737"><span class="lineNum"> 737 </span> : : /* Backplane */</a>
+<a name="738"><span class="lineNum"> 738 </span> :<span class="lineCov"> 2 : _vpd_parse(spira.ntuples.backplane_vpd);</span></a>
+<a name="739"><span class="lineNum"> 739 </span> : : </a>
+<a name="740"><span class="lineNum"> 740 </span> : : /* clock card -- does this use the FRUVPD sig? */</a>
+<a name="741"><span class="lineNum"> 741 </span> :<span class="lineCov"> 2 : _vpd_parse(spira.ntuples.clock_vpd);</span></a>
+<a name="742"><span class="lineNum"> 742 </span> : : </a>
+<a name="743"><span class="lineNum"> 743 </span> : : /* Anchor card */</a>
+<a name="744"><span class="lineNum"> 744 </span> :<span class="lineCov"> 2 : _vpd_parse(spira.ntuples.anchor_vpd);</span></a>
+<a name="745"><span class="lineNum"> 745 </span> : : </a>
+<a name="746"><span class="lineNum"> 746 </span> : : /* Op panel -- does this use the FRUVPD sig? */</a>
+<a name="747"><span class="lineNum"> 747 </span> :<span class="lineCov"> 2 : _vpd_parse(spira.ntuples.op_panel_vpd);</span></a>
+<a name="748"><span class="lineNum"> 748 </span> : : </a>
+<a name="749"><span class="lineNum"> 749 </span> : : /* External cache FRU vpd -- does this use the FRUVPD sig? */</a>
+<a name="750"><span class="lineNum"> 750 </span> :<span class="lineCov"> 2 : _vpd_parse(spira.ntuples.ext_cache_fru_vpd);</span></a>
+<a name="751"><span class="lineNum"> 751 </span> : : </a>
+<a name="752"><span class="lineNum"> 752 </span> : : /* Misc CEC FRU */</a>
+<a name="753"><span class="lineNum"> 753 </span> :<span class="lineCov"> 2 : _vpd_parse(spira.ntuples.misc_cec_fru_vpd);</span></a>
+<a name="754"><span class="lineNum"> 754 </span> : : </a>
+<a name="755"><span class="lineNum"> 755 </span> : : /* CEC IO HUB FRU */</a>
+<a name="756"><span class="lineNum"> 756 </span> :<span class="lineCov"> 2 : iohub_vpd_parse();</span></a>
+<a name="757"><span class="lineNum"> 757 </span> : : </a>
+<a name="758"><span class="lineNum"> 758 </span> : : /*</a>
+<a name="759"><span class="lineNum"> 759 </span> : : * SP subsystem -- while the rest of the SPINFO structure is</a>
+<a name="760"><span class="lineNum"> 760 </span> : : * different, the FRU ID data and pointer pair to keyword VPD</a>
+<a name="761"><span class="lineNum"> 761 </span> : : * are the same offset as a FRUVPD entry. So reuse it</a>
+<a name="762"><span class="lineNum"> 762 </span> : : */</a>
+<a name="763"><span class="lineNum"> 763 </span> :<span class="lineCov"> 2 : fruvpd_hdr = get_hdif(&amp;spira.ntuples.sp_subsys, SPSS_HDIF_SIG);</span></a>
+<a name="764"><span class="lineNum"> 764 </span> :<span class="lineCov"> 2 : if (fruvpd_hdr)</span></a>
+<a name="765"><span class="lineNum"> 765 </span> :<span class="lineCov"> 2 : dt_add_vpd_node(fruvpd_hdr,</span></a>
+<a name="766"><span class="lineNum"> 766 </span> : : FRUVPD_IDATA_FRU_ID, FRUVPD_IDATA_KW_VPD);</a>
+<a name="767"><span class="lineNum"> 767 </span> :<span class="lineCov"> 2 : }</span></a>
</pre>
</td>
</tr>
diff --git a/coverage-report/hw/index-sort-b.html b/coverage-report/hw/index-sort-b.html
index eafb6a9..e7f0df2 100644
--- a/coverage-report/hw/index-sort-b.html
+++ b/coverage-report/hw/index-sort-b.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">113</td>
- <td class="headerCovTableEntry">119</td>
- <td class="headerCovTableEntryHi">95.0 %</td>
+ <td class="headerCovTableEntry">115</td>
+ <td class="headerCovTableEntry">127</td>
+ <td class="headerCovTableEntryHi">90.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
+ <td class="headerCovTableEntry">7</td>
+ <td class="headerCovTableEntryMed">85.7 %</td>
</tr>
<tr>
<td></td>
@@ -96,12 +96,12 @@
<tr>
<td class="coverFile"><a href="phys-map.c.gcov.html">phys-map.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=88 height=10 alt="87.8%"><img src="../snow.png" width=12 height=10 alt="87.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="77.6%"><img src="../snow.png" width=22 height=10 alt="77.6%"></td></tr></table>
</td>
- <td class="coverPerMed">87.8&nbsp;%</td>
- <td class="coverNumMed">36 / 41</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
+ <td class="coverPerMed">77.6&nbsp;%</td>
+ <td class="coverNumMed">38 / 49</td>
+ <td class="coverPerMed">75.0&nbsp;%</td>
+ <td class="coverNumMed">3 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/hw/index-sort-f.html b/coverage-report/hw/index-sort-f.html
index 458abc4..a8aadb8 100644
--- a/coverage-report/hw/index-sort-f.html
+++ b/coverage-report/hw/index-sort-f.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">113</td>
- <td class="headerCovTableEntry">119</td>
- <td class="headerCovTableEntryHi">95.0 %</td>
+ <td class="headerCovTableEntry">115</td>
+ <td class="headerCovTableEntry">127</td>
+ <td class="headerCovTableEntryHi">90.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
+ <td class="headerCovTableEntry">7</td>
+ <td class="headerCovTableEntryMed">85.7 %</td>
</tr>
<tr>
<td></td>
@@ -82,24 +82,24 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="lpc-port80h.c.gcov.html">lpc-port80h.c</a></td>
+ <td class="coverFile"><a href="phys-map.c.gcov.html">phys-map.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="98.7%"><img src="../snow.png" width=1 height=10 alt="98.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="77.6%"><img src="../snow.png" width=22 height=10 alt="77.6%"></td></tr></table>
</td>
- <td class="coverPerHi">98.7&nbsp;%</td>
- <td class="coverNumHi">77 / 78</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
+ <td class="coverPerMed">77.6&nbsp;%</td>
+ <td class="coverNumMed">38 / 49</td>
+ <td class="coverPerMed">75.0&nbsp;%</td>
+ <td class="coverNumMed">3 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="phys-map.c.gcov.html">phys-map.c</a></td>
+ <td class="coverFile"><a href="lpc-port80h.c.gcov.html">lpc-port80h.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=88 height=10 alt="87.8%"><img src="../snow.png" width=12 height=10 alt="87.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="98.7%"><img src="../snow.png" width=1 height=10 alt="98.7%"></td></tr></table>
</td>
- <td class="coverPerMed">87.8&nbsp;%</td>
- <td class="coverNumMed">36 / 41</td>
+ <td class="coverPerHi">98.7&nbsp;%</td>
+ <td class="coverNumHi">77 / 78</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/hw/index-sort-l.html b/coverage-report/hw/index-sort-l.html
index 5c617e9..b96a24c 100644
--- a/coverage-report/hw/index-sort-l.html
+++ b/coverage-report/hw/index-sort-l.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">113</td>
- <td class="headerCovTableEntry">119</td>
- <td class="headerCovTableEntryHi">95.0 %</td>
+ <td class="headerCovTableEntry">115</td>
+ <td class="headerCovTableEntry">127</td>
+ <td class="headerCovTableEntryHi">90.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
+ <td class="headerCovTableEntry">7</td>
+ <td class="headerCovTableEntryMed">85.7 %</td>
</tr>
<tr>
<td></td>
@@ -84,12 +84,12 @@
<tr>
<td class="coverFile"><a href="phys-map.c.gcov.html">phys-map.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=88 height=10 alt="87.8%"><img src="../snow.png" width=12 height=10 alt="87.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="77.6%"><img src="../snow.png" width=22 height=10 alt="77.6%"></td></tr></table>
</td>
- <td class="coverPerMed">87.8&nbsp;%</td>
- <td class="coverNumMed">36 / 41</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
+ <td class="coverPerMed">77.6&nbsp;%</td>
+ <td class="coverNumMed">38 / 49</td>
+ <td class="coverPerMed">75.0&nbsp;%</td>
+ <td class="coverNumMed">3 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/hw/index.html b/coverage-report/hw/index.html
index 23f8643..9967eeb 100644
--- a/coverage-report/hw/index.html
+++ b/coverage-report/hw/index.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">113</td>
- <td class="headerCovTableEntry">119</td>
- <td class="headerCovTableEntryHi">95.0 %</td>
+ <td class="headerCovTableEntry">115</td>
+ <td class="headerCovTableEntry">127</td>
+ <td class="headerCovTableEntryHi">90.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
+ <td class="headerCovTableEntry">7</td>
+ <td class="headerCovTableEntryMed">85.7 %</td>
</tr>
<tr>
<td></td>
@@ -96,12 +96,12 @@
<tr>
<td class="coverFile"><a href="phys-map.c.gcov.html">phys-map.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=88 height=10 alt="87.8%"><img src="../snow.png" width=12 height=10 alt="87.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="77.6%"><img src="../snow.png" width=22 height=10 alt="77.6%"></td></tr></table>
</td>
- <td class="coverPerMed">87.8&nbsp;%</td>
- <td class="coverNumMed">36 / 41</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
+ <td class="coverPerMed">77.6&nbsp;%</td>
+ <td class="coverNumMed">38 / 49</td>
+ <td class="coverPerMed">75.0&nbsp;%</td>
+ <td class="coverNumMed">3 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/hw/ipmi/index-sort-b.html b/coverage-report/hw/ipmi/index-sort-b.html
index a282437..ec65d0e 100644
--- a/coverage-report/hw/ipmi/index-sort-b.html
+++ b/coverage-report/hw/ipmi/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/hw/ipmi/index-sort-f.html b/coverage-report/hw/ipmi/index-sort-f.html
index 987633e..a148bd0 100644
--- a/coverage-report/hw/ipmi/index-sort-f.html
+++ b/coverage-report/hw/ipmi/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/hw/ipmi/index-sort-l.html b/coverage-report/hw/ipmi/index-sort-l.html
index 20e1ec3..98953d8 100644
--- a/coverage-report/hw/ipmi/index-sort-l.html
+++ b/coverage-report/hw/ipmi/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/hw/ipmi/index.html b/coverage-report/hw/ipmi/index.html
index b09d4da..0396ad9 100644
--- a/coverage-report/hw/ipmi/index.html
+++ b/coverage-report/hw/ipmi/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/hw/ipmi/ipmi-fru.c.func-sort-c.html b/coverage-report/hw/ipmi/ipmi-fru.c.func-sort-c.html
index 4d72d1e..bec5dc9 100644
--- a/coverage-report/hw/ipmi/ipmi-fru.c.func-sort-c.html
+++ b/coverage-report/hw/ipmi/ipmi-fru.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/hw/ipmi/ipmi-fru.c.func.html b/coverage-report/hw/ipmi/ipmi-fru.c.func.html
index 2e2268f..2dd5a9c 100644
--- a/coverage-report/hw/ipmi/ipmi-fru.c.func.html
+++ b/coverage-report/hw/ipmi/ipmi-fru.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/hw/ipmi/ipmi-fru.c.gcov.html b/coverage-report/hw/ipmi/ipmi-fru.c.gcov.html
index 6da67b5..1122ac6 100644
--- a/coverage-report/hw/ipmi/ipmi-fru.c.gcov.html
+++ b/coverage-report/hw/ipmi/ipmi-fru.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/hw/ipmi/test/index-sort-b.html b/coverage-report/hw/ipmi/test/index-sort-b.html
index d9a237a..0f26776 100644
--- a/coverage-report/hw/ipmi/test/index-sort-b.html
+++ b/coverage-report/hw/ipmi/test/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/hw/ipmi/test/index-sort-f.html b/coverage-report/hw/ipmi/test/index-sort-f.html
index a0b8ed7..c95354e 100644
--- a/coverage-report/hw/ipmi/test/index-sort-f.html
+++ b/coverage-report/hw/ipmi/test/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/hw/ipmi/test/index-sort-l.html b/coverage-report/hw/ipmi/test/index-sort-l.html
index acfd52e..4acd3b7 100644
--- a/coverage-report/hw/ipmi/test/index-sort-l.html
+++ b/coverage-report/hw/ipmi/test/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/hw/ipmi/test/index.html b/coverage-report/hw/ipmi/test/index.html
index b53ef5a..5629964 100644
--- a/coverage-report/hw/ipmi/test/index.html
+++ b/coverage-report/hw/ipmi/test/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/hw/ipmi/test/run-fru.c.func-sort-c.html b/coverage-report/hw/ipmi/test/run-fru.c.func-sort-c.html
index c656170..dedbf60 100644
--- a/coverage-report/hw/ipmi/test/run-fru.c.func-sort-c.html
+++ b/coverage-report/hw/ipmi/test/run-fru.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/hw/ipmi/test/run-fru.c.func.html b/coverage-report/hw/ipmi/test/run-fru.c.func.html
index 6b163f6..eaa47ef 100644
--- a/coverage-report/hw/ipmi/test/run-fru.c.func.html
+++ b/coverage-report/hw/ipmi/test/run-fru.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/hw/ipmi/test/run-fru.c.gcov.html b/coverage-report/hw/ipmi/test/run-fru.c.gcov.html
index bc92321..f848adf 100644
--- a/coverage-report/hw/ipmi/test/run-fru.c.gcov.html
+++ b/coverage-report/hw/ipmi/test/run-fru.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/hw/lpc-port80h.c.func-sort-c.html b/coverage-report/hw/lpc-port80h.c.func-sort-c.html
index d8b7081..8adda98 100644
--- a/coverage-report/hw/lpc-port80h.c.func-sort-c.html
+++ b/coverage-report/hw/lpc-port80h.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@@ -69,15 +69,15 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="lpc-port80h.c.gcov.html#156">op_display_lpc</a></td>
+ <td class="coverFn"><a href="lpc-port80h.c.gcov.html#157">op_display_lpc</a></td>
<td class="coverFnHi">16</td>
</tr>
<tr>
- <td class="coverFn"><a href="lpc-port80h.c.gcov.html#30">op_display_to_port80</a></td>
+ <td class="coverFn"><a href="lpc-port80h.c.gcov.html#31">op_display_to_port80</a></td>
<td class="coverFnHi">16</td>
</tr>
<tr>
- <td class="coverFn"><a href="lpc-port80h.c.gcov.html#103">op_display_to_port8x</a></td>
+ <td class="coverFn"><a href="lpc-port80h.c.gcov.html#104">op_display_to_port8x</a></td>
<td class="coverFnHi">16</td>
</tr>
</table>
diff --git a/coverage-report/hw/lpc-port80h.c.func.html b/coverage-report/hw/lpc-port80h.c.func.html
index 9371b3a..044f187 100644
--- a/coverage-report/hw/lpc-port80h.c.func.html
+++ b/coverage-report/hw/lpc-port80h.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@@ -69,15 +69,15 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="lpc-port80h.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="lpc-port80h.c.gcov.html#156">op_display_lpc</a></td>
+ <td class="coverFn"><a href="lpc-port80h.c.gcov.html#157">op_display_lpc</a></td>
<td class="coverFnHi">16</td>
</tr>
<tr>
- <td class="coverFn"><a href="lpc-port80h.c.gcov.html#30">op_display_to_port80</a></td>
+ <td class="coverFn"><a href="lpc-port80h.c.gcov.html#31">op_display_to_port80</a></td>
<td class="coverFnHi">16</td>
</tr>
<tr>
- <td class="coverFn"><a href="lpc-port80h.c.gcov.html#103">op_display_to_port8x</a></td>
+ <td class="coverFn"><a href="lpc-port80h.c.gcov.html#104">op_display_to_port8x</a></td>
<td class="coverFnHi">16</td>
</tr>
</table>
diff --git a/coverage-report/hw/lpc-port80h.c.gcov.html b/coverage-report/hw/lpc-port80h.c.gcov.html
index ecb3f9e..b487e3d 100644
--- a/coverage-report/hw/lpc-port80h.c.gcov.html
+++ b/coverage-report/hw/lpc-port80h.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@@ -78,170 +78,171 @@
<a name="7"><span class="lineNum"> 7 </span> : : </a>
<a name="8"><span class="lineNum"> 8 </span> : : #define pr_fmt(fmt) &quot;Port80h: &quot; fmt</a>
<a name="9"><span class="lineNum"> 9 </span> : : </a>
-<a name="10"><span class="lineNum"> 10 </span> : : #include &lt;lpc.h&gt;</a>
-<a name="11"><span class="lineNum"> 11 </span> : : #include &lt;op-panel.h&gt;</a>
-<a name="12"><span class="lineNum"> 12 </span> : : #include &lt;chip.h&gt;</a>
-<a name="13"><span class="lineNum"> 13 </span> : : </a>
-<a name="14"><span class="lineNum"> 14 </span> : : /*</a>
-<a name="15"><span class="lineNum"> 15 </span> : : * Convert our detailed op_display() call into 1 byte for LPC port 80h</a>
-<a name="16"><span class="lineNum"> 16 </span> : : *</a>
-<a name="17"><span class="lineNum"> 17 </span> : : * Our layout looks like this:</a>
-<a name="18"><span class="lineNum"> 18 </span> : : * MSB (bit 7): 1 = Comes from OPAL</a>
-<a name="19"><span class="lineNum"> 19 </span> : : * bit 6 : 0 = OP_MOD_INIT (the main one), 1 = (see bit 5)</a>
-<a name="20"><span class="lineNum"> 20 </span> : : * bit 5432 : (if bit 6=0, low nibble of op-panel code)</a>
-<a name="21"><span class="lineNum"> 21 </span> : : * bit 5432 : (if bit 6=1, other OP_MOD_ values in bits 54:</a>
-<a name="22"><span class="lineNum"> 22 </span> : : * 00b=OP_MOD_CPU, 01b=OP_MOD_LOCK,</a>
-<a name="23"><span class="lineNum"> 23 </span> : : * 10b=OP_MOD_MEM, 11b=OP_MOD_CHIPTOD</a>
-<a name="24"><span class="lineNum"> 24 </span> : : * bits 0,1 from code in bits 32)</a>
-<a name="25"><span class="lineNum"> 25 </span> : : *</a>
-<a name="26"><span class="lineNum"> 26 </span> : : * bit 1,0: 00b=OP_LOG, 10b=OP_WARN, 01b=OP_ERROR, 11b=OP_FATAL</a>
-<a name="27"><span class="lineNum"> 27 </span> : : * i.e. bit 0 indicates ERROR or FATAL.</a>
-<a name="28"><span class="lineNum"> 28 </span> : : *</a>
-<a name="29"><span class="lineNum"> 29 </span> : : * If port 80h number has the MSB and LSB set, then you died in OPAL.</a>
-<a name="30"><span class="lineNum"> 30 </span> : : * Any *odd* number with the MSB set (i.e. &gt; 0x80) indicates error.</a>
-<a name="31"><span class="lineNum"> 31 </span> : : */</a>
-<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 16 : static inline uint8_t op_display_to_port80(uint8_t last_value, enum op_severity s, enum op_module m, uint16_t c)</span></a>
-<a name="33"><span class="lineNum"> 33 </span> : : {</a>
-<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 16 : uint8_t r = 0x80; /* Start with top bit set indicating in OPAL */</span></a>
-<a name="35"><span class="lineNum"> 35 </span> : : </a>
-<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 16 : switch(m) {</span></a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 7 : case OP_MOD_INIT:</span></a>
-<a name="38"><span class="lineNum"> 38 </span> : : /* bit 6 is zero */</a>
-<a name="39"><span class="lineNum"> 39 </span> : : /* bits 5432 have low nibble of c */</a>
-<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 7 : r |= (c &amp; 0x0f) &lt;&lt; 2;</span></a>
-<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 7 : break;</span></a>
-<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 1 : case OP_MOD_CPU:</span></a>
-<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 1 : r |= 0x40 | (c &amp; 0x03) &lt;&lt; 2;</span></a>
-<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 1 : break;</span></a>
-<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 2 : case OP_MOD_LOCK:</span></a>
-<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 2 : r |= 0x50 | (c &amp; 0x03) &lt;&lt; 2;</span></a>
-<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 2 : break;</span></a>
-<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 2 : case OP_MOD_MEM:</span></a>
-<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 2 : r |= 0x60 | (c &amp; 0x03) &lt;&lt; 2;</span></a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 2 : break;</span></a>
-<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 1 : case OP_MOD_CHIPTOD:</span></a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 1 : r |= 0x70 | (c &amp; 0x03) &lt;&lt; 2;</span></a>
-<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 1 : break;</span></a>
-<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 1 : case OP_MOD_CORE:</span></a>
-<a name="55"><span class="lineNum"> 55 </span> : : /*</a>
-<a name="56"><span class="lineNum"> 56 </span> : : * Only current OP_MOD_CORE is where we're OP_FATAL,</a>
-<a name="57"><span class="lineNum"> 57 </span> : : * So let's go for the last value set and tweak the</a>
-<a name="58"><span class="lineNum"> 58 </span> : : * bits for OP_FATAL.</a>
-<a name="59"><span class="lineNum"> 59 </span> : : */</a>
-<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 1 : r = last_value &amp; 0xFC;</span></a>
-<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 1 : break;</span></a>
-<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 2 : case OP_MOD_FSP:</span></a>
-<a name="63"><span class="lineNum"> 63 </span> : : case OP_MOD_FSPCON:</a>
-<a name="64"><span class="lineNum"> 64 </span> : : /* Should never be hit, port80h only used on non-FSP! */</a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 2 : break;</span></a>
-<a name="66"><span class="lineNum"> 66 </span> : : }</a>
-<a name="67"><span class="lineNum"> 67 </span> : : </a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 16 : switch(s) {</span></a>
-<a name="69"><span class="lineNum"> 69 </span> :<span class="lineCov"> 7 : case OP_LOG:</span></a>
-<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 7 : break;</span></a>
-<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 3 : case OP_WARN:</span></a>
-<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 3 : r |= 0x02;</span></a>
-<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 3 : break;</span></a>
-<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 1 : case OP_ERROR:</span></a>
-<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 1 : r |= 0x01;</span></a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 1 : break;</span></a>
-<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 5 : case OP_FATAL:</span></a>
-<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 5 : r |= 0x03;</span></a>
-<a name="79"><span class="lineNum"> 79 </span> : : }</a>
-<a name="80"><span class="lineNum"> 80 </span> : : </a>
-<a name="81"><span class="lineNum"> 81 </span> :<span class="lineCov"> 16 : return r;</span></a>
-<a name="82"><span class="lineNum"> 82 </span> : : }</a>
-<a name="83"><span class="lineNum"> 83 </span> : : </a>
-<a name="84"><span class="lineNum"> 84 </span> : : /*</a>
-<a name="85"><span class="lineNum"> 85 </span> : : * Convert our detailed op_display() call into 2 bytes for LPC port 81h and 82h</a>
-<a name="86"><span class="lineNum"> 86 </span> : : *</a>
-<a name="87"><span class="lineNum"> 87 </span> : : * This looks pretty similar to our port80 code.</a>
-<a name="88"><span class="lineNum"> 88 </span> : : * Notably we now have more bits to throw progress into.</a>
-<a name="89"><span class="lineNum"> 89 </span> : : *</a>
-<a name="90"><span class="lineNum"> 90 </span> : : * Our layout looks like this:</a>
-<a name="91"><span class="lineNum"> 91 </span> : : * MSB (bit 15): 1 = Comes from OPAL</a>
-<a name="92"><span class="lineNum"> 92 </span> : : * bit 14 : 0 = OP_MOD_INIT (the main one), 1 = (see bit 13)</a>
-<a name="93"><span class="lineNum"> 93 </span> : : * bits 13-2 : (if bit 6=0, low 12 bits of op-panel code)</a>
-<a name="94"><span class="lineNum"> 94 </span> : : * bit 13,12 : (if bit 6=1, other OP_MOD_ values in bits 13 and 12:</a>
-<a name="95"><span class="lineNum"> 95 </span> : : * 00b=OP_MOD_CPU, 01b=OP_MOD_LOCK,</a>
-<a name="96"><span class="lineNum"> 96 </span> : : * 10b=OP_MOD_MEM, 11b=OP_MOD_CHIPTOD)</a>
-<a name="97"><span class="lineNum"> 97 </span> : : * and bits 11-2 are low 10 bits of op-panel code)</a>
-<a name="98"><span class="lineNum"> 98 </span> : : *</a>
-<a name="99"><span class="lineNum"> 99 </span> : : * bit 1,0: 00b=OP_LOG, 10b=OP_WARN, 01b=OP_ERROR, 11b=OP_FATAL</a>
-<a name="100"><span class="lineNum"> 100 </span> : : * i.e. bit 0 indicates ERROR or FATAL.</a>
-<a name="101"><span class="lineNum"> 101 </span> : : *</a>
-<a name="102"><span class="lineNum"> 102 </span> : : * If port 80h number has the MSB and LSB set, then you died in OPAL.</a>
-<a name="103"><span class="lineNum"> 103 </span> : : * Any *odd* number with the MSB set (i.e. &gt; 0x80) indicates error.</a>
-<a name="104"><span class="lineNum"> 104 </span> : : */</a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 16 : static inline uint16_t op_display_to_port8x(uint16_t last_value, enum op_severity s, enum op_module m, uint16_t c)</span></a>
-<a name="106"><span class="lineNum"> 106 </span> : : {</a>
-<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 16 : uint16_t r = 0x8000; /* Start with top bit set indicating in OPAL */</span></a>
-<a name="108"><span class="lineNum"> 108 </span> : : </a>
-<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 16 : switch(m) {</span></a>
-<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 7 : case OP_MOD_INIT:</span></a>
-<a name="111"><span class="lineNum"> 111 </span> : : /* bit 6 is zero */</a>
-<a name="112"><span class="lineNum"> 112 </span> : : /* bits 13 through 2 have low 12 bits of c */</a>
-<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 7 : r |= (c &amp; 0xFFF) &lt;&lt; 2;</span></a>
-<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 7 : break;</span></a>
-<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 1 : case OP_MOD_CPU:</span></a>
-<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 1 : r |= 0x4000 | (c &amp; 0x03FF) &lt;&lt; 2;</span></a>
-<a name="117"><span class="lineNum"> 117 </span> :<span class="lineCov"> 1 : break;</span></a>
-<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 2 : case OP_MOD_LOCK:</span></a>
-<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 2 : r |= 0x5000 | (c &amp; 0x03FF) &lt;&lt; 2;</span></a>
-<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 2 : break;</span></a>
-<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 2 : case OP_MOD_MEM:</span></a>
-<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 2 : r |= 0x6000 | (c &amp; 0x03FF) &lt;&lt; 2;</span></a>
-<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 2 : break;</span></a>
-<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 1 : case OP_MOD_CHIPTOD:</span></a>
-<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 1 : r |= 0x7000 | (c &amp; 0x03FF) &lt;&lt; 2;</span></a>
-<a name="126"><span class="lineNum"> 126 </span> :<span class="lineCov"> 1 : break;</span></a>
-<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 1 : case OP_MOD_CORE:</span></a>
-<a name="128"><span class="lineNum"> 128 </span> : : /*</a>
-<a name="129"><span class="lineNum"> 129 </span> : : * Only current OP_MOD_CORE is where we're OP_FATAL,</a>
-<a name="130"><span class="lineNum"> 130 </span> : : * So let's go for the last value set and tweak the</a>
-<a name="131"><span class="lineNum"> 131 </span> : : * bits for OP_FATAL.</a>
-<a name="132"><span class="lineNum"> 132 </span> : : */</a>
-<a name="133"><span class="lineNum"> 133 </span> :<span class="lineCov"> 1 : r = last_value &amp; 0xFFFC;</span></a>
-<a name="134"><span class="lineNum"> 134 </span> :<span class="lineCov"> 1 : break;</span></a>
-<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 2 : case OP_MOD_FSP:</span></a>
-<a name="136"><span class="lineNum"> 136 </span> : : case OP_MOD_FSPCON:</a>
-<a name="137"><span class="lineNum"> 137 </span> : : /* Should never be hit, port80h only used on non-FSP! */</a>
-<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 2 : break;</span></a>
-<a name="139"><span class="lineNum"> 139 </span> : : }</a>
-<a name="140"><span class="lineNum"> 140 </span> : : </a>
-<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 16 : switch(s) {</span></a>
-<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 7 : case OP_LOG:</span></a>
-<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 7 : break;</span></a>
-<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 3 : case OP_WARN:</span></a>
-<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 3 : r |= 0x02;</span></a>
-<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 3 : break;</span></a>
-<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 1 : case OP_ERROR:</span></a>
-<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 1 : r |= 0x01;</span></a>
-<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 1 : break;</span></a>
-<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 5 : case OP_FATAL:</span></a>
-<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 5 : r |= 0x03;</span></a>
-<a name="152"><span class="lineNum"> 152 </span> : : }</a>
-<a name="153"><span class="lineNum"> 153 </span> : : </a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 16 : return r;</span></a>
-<a name="155"><span class="lineNum"> 155 </span> : : }</a>
-<a name="156"><span class="lineNum"> 156 </span> : : </a>
+<a name="10"><span class="lineNum"> 10 </span> : : #include &lt;opal-api.h&gt;</a>
+<a name="11"><span class="lineNum"> 11 </span> : : #include &lt;lpc.h&gt;</a>
+<a name="12"><span class="lineNum"> 12 </span> : : #include &lt;op-panel.h&gt;</a>
+<a name="13"><span class="lineNum"> 13 </span> : : #include &lt;chip.h&gt;</a>
+<a name="14"><span class="lineNum"> 14 </span> : : </a>
+<a name="15"><span class="lineNum"> 15 </span> : : /*</a>
+<a name="16"><span class="lineNum"> 16 </span> : : * Convert our detailed op_display() call into 1 byte for LPC port 80h</a>
+<a name="17"><span class="lineNum"> 17 </span> : : *</a>
+<a name="18"><span class="lineNum"> 18 </span> : : * Our layout looks like this:</a>
+<a name="19"><span class="lineNum"> 19 </span> : : * MSB (bit 7): 1 = Comes from OPAL</a>
+<a name="20"><span class="lineNum"> 20 </span> : : * bit 6 : 0 = OP_MOD_INIT (the main one), 1 = (see bit 5)</a>
+<a name="21"><span class="lineNum"> 21 </span> : : * bit 5432 : (if bit 6=0, low nibble of op-panel code)</a>
+<a name="22"><span class="lineNum"> 22 </span> : : * bit 5432 : (if bit 6=1, other OP_MOD_ values in bits 54:</a>
+<a name="23"><span class="lineNum"> 23 </span> : : * 00b=OP_MOD_CPU, 01b=OP_MOD_LOCK,</a>
+<a name="24"><span class="lineNum"> 24 </span> : : * 10b=OP_MOD_MEM, 11b=OP_MOD_CHIPTOD</a>
+<a name="25"><span class="lineNum"> 25 </span> : : * bits 0,1 from code in bits 32)</a>
+<a name="26"><span class="lineNum"> 26 </span> : : *</a>
+<a name="27"><span class="lineNum"> 27 </span> : : * bit 1,0: 00b=OP_LOG, 10b=OP_WARN, 01b=OP_ERROR, 11b=OP_FATAL</a>
+<a name="28"><span class="lineNum"> 28 </span> : : * i.e. bit 0 indicates ERROR or FATAL.</a>
+<a name="29"><span class="lineNum"> 29 </span> : : *</a>
+<a name="30"><span class="lineNum"> 30 </span> : : * If port 80h number has the MSB and LSB set, then you died in OPAL.</a>
+<a name="31"><span class="lineNum"> 31 </span> : : * Any *odd* number with the MSB set (i.e. &gt; 0x80) indicates error.</a>
+<a name="32"><span class="lineNum"> 32 </span> : : */</a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 16 : static inline uint8_t op_display_to_port80(uint8_t last_value, enum op_severity s, enum op_module m, uint16_t c)</span></a>
+<a name="34"><span class="lineNum"> 34 </span> : : {</a>
+<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 16 : uint8_t r = 0x80; /* Start with top bit set indicating in OPAL */</span></a>
+<a name="36"><span class="lineNum"> 36 </span> : : </a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 16 : switch(m) {</span></a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 7 : case OP_MOD_INIT:</span></a>
+<a name="39"><span class="lineNum"> 39 </span> : : /* bit 6 is zero */</a>
+<a name="40"><span class="lineNum"> 40 </span> : : /* bits 5432 have low nibble of c */</a>
+<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 7 : r |= (c &amp; 0x0f) &lt;&lt; 2;</span></a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 7 : break;</span></a>
+<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 1 : case OP_MOD_CPU:</span></a>
+<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 1 : r |= 0x40 | (c &amp; 0x03) &lt;&lt; 2;</span></a>
+<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 1 : break;</span></a>
+<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 2 : case OP_MOD_LOCK:</span></a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 2 : r |= 0x50 | (c &amp; 0x03) &lt;&lt; 2;</span></a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 2 : break;</span></a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 2 : case OP_MOD_MEM:</span></a>
+<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 2 : r |= 0x60 | (c &amp; 0x03) &lt;&lt; 2;</span></a>
+<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 2 : break;</span></a>
+<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 1 : case OP_MOD_CHIPTOD:</span></a>
+<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 1 : r |= 0x70 | (c &amp; 0x03) &lt;&lt; 2;</span></a>
+<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 1 : break;</span></a>
+<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 1 : case OP_MOD_CORE:</span></a>
+<a name="56"><span class="lineNum"> 56 </span> : : /*</a>
+<a name="57"><span class="lineNum"> 57 </span> : : * Only current OP_MOD_CORE is where we're OP_FATAL,</a>
+<a name="58"><span class="lineNum"> 58 </span> : : * So let's go for the last value set and tweak the</a>
+<a name="59"><span class="lineNum"> 59 </span> : : * bits for OP_FATAL.</a>
+<a name="60"><span class="lineNum"> 60 </span> : : */</a>
+<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 1 : r = last_value &amp; 0xFC;</span></a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 1 : break;</span></a>
+<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 2 : case OP_MOD_FSP:</span></a>
+<a name="64"><span class="lineNum"> 64 </span> : : case OP_MOD_FSPCON:</a>
+<a name="65"><span class="lineNum"> 65 </span> : : /* Should never be hit, port80h only used on non-FSP! */</a>
+<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 2 : break;</span></a>
+<a name="67"><span class="lineNum"> 67 </span> : : }</a>
+<a name="68"><span class="lineNum"> 68 </span> : : </a>
+<a name="69"><span class="lineNum"> 69 </span> :<span class="lineCov"> 16 : switch(s) {</span></a>
+<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 7 : case OP_LOG:</span></a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 7 : break;</span></a>
+<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 3 : case OP_WARN:</span></a>
+<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 3 : r |= 0x02;</span></a>
+<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 3 : break;</span></a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 1 : case OP_ERROR:</span></a>
+<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 1 : r |= 0x01;</span></a>
+<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 1 : break;</span></a>
+<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 5 : case OP_FATAL:</span></a>
+<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 5 : r |= 0x03;</span></a>
+<a name="80"><span class="lineNum"> 80 </span> : : }</a>
+<a name="81"><span class="lineNum"> 81 </span> : : </a>
+<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 16 : return r;</span></a>
+<a name="83"><span class="lineNum"> 83 </span> : : }</a>
+<a name="84"><span class="lineNum"> 84 </span> : : </a>
+<a name="85"><span class="lineNum"> 85 </span> : : /*</a>
+<a name="86"><span class="lineNum"> 86 </span> : : * Convert our detailed op_display() call into 2 bytes for LPC port 81h and 82h</a>
+<a name="87"><span class="lineNum"> 87 </span> : : *</a>
+<a name="88"><span class="lineNum"> 88 </span> : : * This looks pretty similar to our port80 code.</a>
+<a name="89"><span class="lineNum"> 89 </span> : : * Notably we now have more bits to throw progress into.</a>
+<a name="90"><span class="lineNum"> 90 </span> : : *</a>
+<a name="91"><span class="lineNum"> 91 </span> : : * Our layout looks like this:</a>
+<a name="92"><span class="lineNum"> 92 </span> : : * MSB (bit 15): 1 = Comes from OPAL</a>
+<a name="93"><span class="lineNum"> 93 </span> : : * bit 14 : 0 = OP_MOD_INIT (the main one), 1 = (see bit 13)</a>
+<a name="94"><span class="lineNum"> 94 </span> : : * bits 13-2 : (if bit 6=0, low 12 bits of op-panel code)</a>
+<a name="95"><span class="lineNum"> 95 </span> : : * bit 13,12 : (if bit 6=1, other OP_MOD_ values in bits 13 and 12:</a>
+<a name="96"><span class="lineNum"> 96 </span> : : * 00b=OP_MOD_CPU, 01b=OP_MOD_LOCK,</a>
+<a name="97"><span class="lineNum"> 97 </span> : : * 10b=OP_MOD_MEM, 11b=OP_MOD_CHIPTOD)</a>
+<a name="98"><span class="lineNum"> 98 </span> : : * and bits 11-2 are low 10 bits of op-panel code)</a>
+<a name="99"><span class="lineNum"> 99 </span> : : *</a>
+<a name="100"><span class="lineNum"> 100 </span> : : * bit 1,0: 00b=OP_LOG, 10b=OP_WARN, 01b=OP_ERROR, 11b=OP_FATAL</a>
+<a name="101"><span class="lineNum"> 101 </span> : : * i.e. bit 0 indicates ERROR or FATAL.</a>
+<a name="102"><span class="lineNum"> 102 </span> : : *</a>
+<a name="103"><span class="lineNum"> 103 </span> : : * If port 80h number has the MSB and LSB set, then you died in OPAL.</a>
+<a name="104"><span class="lineNum"> 104 </span> : : * Any *odd* number with the MSB set (i.e. &gt; 0x80) indicates error.</a>
+<a name="105"><span class="lineNum"> 105 </span> : : */</a>
+<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 16 : static inline uint16_t op_display_to_port8x(uint16_t last_value, enum op_severity s, enum op_module m, uint16_t c)</span></a>
+<a name="107"><span class="lineNum"> 107 </span> : : {</a>
+<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 16 : uint16_t r = 0x8000; /* Start with top bit set indicating in OPAL */</span></a>
+<a name="109"><span class="lineNum"> 109 </span> : : </a>
+<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 16 : switch(m) {</span></a>
+<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 7 : case OP_MOD_INIT:</span></a>
+<a name="112"><span class="lineNum"> 112 </span> : : /* bit 6 is zero */</a>
+<a name="113"><span class="lineNum"> 113 </span> : : /* bits 13 through 2 have low 12 bits of c */</a>
+<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 7 : r |= (c &amp; 0xFFF) &lt;&lt; 2;</span></a>
+<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 7 : break;</span></a>
+<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 1 : case OP_MOD_CPU:</span></a>
+<a name="117"><span class="lineNum"> 117 </span> :<span class="lineCov"> 1 : r |= 0x4000 | (c &amp; 0x03FF) &lt;&lt; 2;</span></a>
+<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 1 : break;</span></a>
+<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 2 : case OP_MOD_LOCK:</span></a>
+<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 2 : r |= 0x5000 | (c &amp; 0x03FF) &lt;&lt; 2;</span></a>
+<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 2 : break;</span></a>
+<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 2 : case OP_MOD_MEM:</span></a>
+<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 2 : r |= 0x6000 | (c &amp; 0x03FF) &lt;&lt; 2;</span></a>
+<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 2 : break;</span></a>
+<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 1 : case OP_MOD_CHIPTOD:</span></a>
+<a name="126"><span class="lineNum"> 126 </span> :<span class="lineCov"> 1 : r |= 0x7000 | (c &amp; 0x03FF) &lt;&lt; 2;</span></a>
+<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 1 : break;</span></a>
+<a name="128"><span class="lineNum"> 128 </span> :<span class="lineCov"> 1 : case OP_MOD_CORE:</span></a>
+<a name="129"><span class="lineNum"> 129 </span> : : /*</a>
+<a name="130"><span class="lineNum"> 130 </span> : : * Only current OP_MOD_CORE is where we're OP_FATAL,</a>
+<a name="131"><span class="lineNum"> 131 </span> : : * So let's go for the last value set and tweak the</a>
+<a name="132"><span class="lineNum"> 132 </span> : : * bits for OP_FATAL.</a>
+<a name="133"><span class="lineNum"> 133 </span> : : */</a>
+<a name="134"><span class="lineNum"> 134 </span> :<span class="lineCov"> 1 : r = last_value &amp; 0xFFFC;</span></a>
+<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 1 : break;</span></a>
+<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 2 : case OP_MOD_FSP:</span></a>
+<a name="137"><span class="lineNum"> 137 </span> : : case OP_MOD_FSPCON:</a>
+<a name="138"><span class="lineNum"> 138 </span> : : /* Should never be hit, port80h only used on non-FSP! */</a>
+<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 2 : break;</span></a>
+<a name="140"><span class="lineNum"> 140 </span> : : }</a>
+<a name="141"><span class="lineNum"> 141 </span> : : </a>
+<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 16 : switch(s) {</span></a>
+<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 7 : case OP_LOG:</span></a>
+<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 7 : break;</span></a>
+<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 3 : case OP_WARN:</span></a>
+<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 3 : r |= 0x02;</span></a>
+<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 3 : break;</span></a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 1 : case OP_ERROR:</span></a>
+<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 1 : r |= 0x01;</span></a>
+<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 1 : break;</span></a>
+<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 5 : case OP_FATAL:</span></a>
+<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 5 : r |= 0x03;</span></a>
+<a name="153"><span class="lineNum"> 153 </span> : : }</a>
+<a name="154"><span class="lineNum"> 154 </span> : : </a>
+<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 16 : return r;</span></a>
+<a name="156"><span class="lineNum"> 156 </span> : : }</a>
<a name="157"><span class="lineNum"> 157 </span> : : </a>
-<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 16 : void op_display_lpc(enum op_severity s, enum op_module m, uint16_t c)</span></a>
-<a name="159"><span class="lineNum"> 159 </span> : : {</a>
-<a name="160"><span class="lineNum"> 160 </span> : : static uint8_t port80_val = 0x80;</a>
-<a name="161"><span class="lineNum"> 161 </span> : : static uint16_t port8x_val = 0x8000;</a>
-<a name="162"><span class="lineNum"> 162 </span> : : </a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 16 : if (chip_quirk(QUIRK_SIMICS))</span></a>
-<a name="164"><span class="lineNum"> 164 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="165"><span class="lineNum"> 165 </span> : : </a>
-<a name="166"><span class="lineNum"> 166 </span> :<span class="lineCov"> 16 : port80_val = op_display_to_port80(port80_val, s, m, c);</span></a>
-<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 16 : port8x_val = op_display_to_port8x(port8x_val, s, m, c);</span></a>
-<a name="168"><span class="lineNum"> 168 </span> : : </a>
-<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 16 : lpc_probe_write(OPAL_LPC_IO, 0x80, port80_val, 1);</span></a>
-<a name="170"><span class="lineNum"> 170 </span> :<span class="lineCov"> 16 : lpc_probe_write(OPAL_LPC_IO, 0x81, port8x_val &gt;&gt; 8, 1);</span></a>
-<a name="171"><span class="lineNum"> 171 </span> :<span class="lineCov"> 16 : lpc_probe_write(OPAL_LPC_IO, 0x82, port8x_val &amp; 0xff, 1);</span></a>
-<a name="172"><span class="lineNum"> 172 </span> : : }</a>
-<a name="173"><span class="lineNum"> 173 </span> : : </a>
+<a name="158"><span class="lineNum"> 158 </span> : : </a>
+<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 16 : void op_display_lpc(enum op_severity s, enum op_module m, uint16_t c)</span></a>
+<a name="160"><span class="lineNum"> 160 </span> : : {</a>
+<a name="161"><span class="lineNum"> 161 </span> : : static uint8_t port80_val = 0x80;</a>
+<a name="162"><span class="lineNum"> 162 </span> : : static uint16_t port8x_val = 0x8000;</a>
+<a name="163"><span class="lineNum"> 163 </span> : : </a>
+<a name="164"><span class="lineNum"> 164 </span> :<span class="lineCov"> 16 : if (chip_quirk(QUIRK_SIMICS))</span></a>
+<a name="165"><span class="lineNum"> 165 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="166"><span class="lineNum"> 166 </span> : : </a>
+<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 16 : port80_val = op_display_to_port80(port80_val, s, m, c);</span></a>
+<a name="168"><span class="lineNum"> 168 </span> :<span class="lineCov"> 16 : port8x_val = op_display_to_port8x(port8x_val, s, m, c);</span></a>
+<a name="169"><span class="lineNum"> 169 </span> : : </a>
+<a name="170"><span class="lineNum"> 170 </span> :<span class="lineCov"> 16 : lpc_probe_write(OPAL_LPC_IO, 0x80, port80_val, 1);</span></a>
+<a name="171"><span class="lineNum"> 171 </span> :<span class="lineCov"> 16 : lpc_probe_write(OPAL_LPC_IO, 0x81, port8x_val &gt;&gt; 8, 1);</span></a>
+<a name="172"><span class="lineNum"> 172 </span> :<span class="lineCov"> 16 : lpc_probe_write(OPAL_LPC_IO, 0x82, port8x_val &amp; 0xff, 1);</span></a>
+<a name="173"><span class="lineNum"> 173 </span> : : }</a>
+<a name="174"><span class="lineNum"> 174 </span> : : </a>
</pre>
</td>
</tr>
diff --git a/coverage-report/hw/phys-map.c.func-sort-c.html b/coverage-report/hw/phys-map.c.func-sort-c.html
index ded9213..b6cce5a 100644
--- a/coverage-report/hw/phys-map.c.func-sort-c.html
+++ b/coverage-report/hw/phys-map.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">36</td>
- <td class="headerCovTableEntry">41</td>
- <td class="headerCovTableEntryMed">87.8 %</td>
+ <td class="headerCovTableEntry">38</td>
+ <td class="headerCovTableEntry">49</td>
+ <td class="headerCovTableEntryMed">77.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
- <td class="headerCovTableEntry">3</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
+ <td class="headerCovTableEntry">4</td>
+ <td class="headerCovTableEntryMed">75.0 %</td>
</tr>
<tr>
<td></td>
@@ -69,16 +69,20 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="phys-map.c.gcov.html#323">phys_map_init</a></td>
- <td class="coverFnHi">4</td>
+ <td class="coverFn"><a href="phys-map.c.gcov.html#454">phys_map_get</a></td>
+ <td class="coverFnLo">0</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="phys-map.c.gcov.html#468">phys_map_init</a></td>
+ <td class="coverFnHi">3</td>
</tr>
<tr>
- <td class="coverFn"><a href="phys-map.c.gcov.html#278">phys_map_get</a></td>
- <td class="coverFnHi">185</td>
+ <td class="coverFn"><a href="phys-map.c.gcov.html#409">__phys_map_get</a></td>
+ <td class="coverFnHi">280</td>
</tr>
<tr>
- <td class="coverFn"><a href="phys-map.c.gcov.html#267">phys_map_entry_null</a></td>
- <td class="coverFnHi">9392</td>
+ <td class="coverFn"><a href="phys-map.c.gcov.html#398">phys_map_entry_null</a></td>
+ <td class="coverFnHi">14240</td>
</tr>
</table>
<br>
diff --git a/coverage-report/hw/phys-map.c.func.html b/coverage-report/hw/phys-map.c.func.html
index a573558..0ff79e9 100644
--- a/coverage-report/hw/phys-map.c.func.html
+++ b/coverage-report/hw/phys-map.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">36</td>
- <td class="headerCovTableEntry">41</td>
- <td class="headerCovTableEntryMed">87.8 %</td>
+ <td class="headerCovTableEntry">38</td>
+ <td class="headerCovTableEntry">49</td>
+ <td class="headerCovTableEntryMed">77.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
- <td class="headerCovTableEntry">3</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
+ <td class="headerCovTableEntry">4</td>
+ <td class="headerCovTableEntryMed">75.0 %</td>
</tr>
<tr>
<td></td>
@@ -69,16 +69,20 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="phys-map.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="phys-map.c.gcov.html#267">phys_map_entry_null</a></td>
- <td class="coverFnHi">9392</td>
+ <td class="coverFn"><a href="phys-map.c.gcov.html#409">__phys_map_get</a></td>
+ <td class="coverFnHi">280</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="phys-map.c.gcov.html#398">phys_map_entry_null</a></td>
+ <td class="coverFnHi">14240</td>
</tr>
<tr>
- <td class="coverFn"><a href="phys-map.c.gcov.html#278">phys_map_get</a></td>
- <td class="coverFnHi">185</td>
+ <td class="coverFn"><a href="phys-map.c.gcov.html#454">phys_map_get</a></td>
+ <td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="phys-map.c.gcov.html#323">phys_map_init</a></td>
- <td class="coverFnHi">4</td>
+ <td class="coverFn"><a href="phys-map.c.gcov.html#468">phys_map_init</a></td>
+ <td class="coverFnHi">3</td>
</tr>
</table>
<br>
diff --git a/coverage-report/hw/phys-map.c.gcov.html b/coverage-report/hw/phys-map.c.gcov.html
index 60c3f81..b870e0a 100644
--- a/coverage-report/hw/phys-map.c.gcov.html
+++ b/coverage-report/hw/phys-map.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">36</td>
- <td class="headerCovTableEntry">41</td>
- <td class="headerCovTableEntryMed">87.8 %</td>
+ <td class="headerCovTableEntry">38</td>
+ <td class="headerCovTableEntry">49</td>
+ <td class="headerCovTableEntryMed">77.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
- <td class="headerCovTableEntry">3</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
+ <td class="headerCovTableEntry">4</td>
+ <td class="headerCovTableEntryMed">75.0 %</td>
</tr>
<tr>
<td></td>
@@ -97,324 +97,471 @@
<a name="26"><span class="lineNum"> 26 </span> : : </a>
<a name="27"><span class="lineNum"> 27 </span> : : static const struct phys_map_info *phys_map;</a>
<a name="28"><span class="lineNum"> 28 </span> : : </a>
-<a name="29"><span class="lineNum"> 29 </span> : : static const struct phys_map_entry phys_map_table_nimbus[] = {</a>
-<a name="30"><span class="lineNum"> 30 </span> : : </a>
-<a name="31"><span class="lineNum"> 31 </span> : : /* System memory upto 4TB minus GPU memory */</a>
-<a name="32"><span class="lineNum"> 32 </span> : : { SYSTEM_MEM, 0, 0x0000000000000000ull, 0x0000034000000000ull },</a>
-<a name="33"><span class="lineNum"> 33 </span> : : /* GPU memory from 4TB - 128GB*GPU */</a>
-<a name="34"><span class="lineNum"> 34 </span> : : { GPU_MEM_4T_DOWN, 5, 0x0000034000000000ull, 0x0000002000000000ull },</a>
-<a name="35"><span class="lineNum"> 35 </span> : : { GPU_MEM_4T_DOWN, 4, 0x0000036000000000ull, 0x0000002000000000ull },</a>
-<a name="36"><span class="lineNum"> 36 </span> : : { GPU_MEM_4T_DOWN, 3, 0x0000038000000000ull, 0x0000002000000000ull },</a>
-<a name="37"><span class="lineNum"> 37 </span> : : { GPU_MEM_4T_DOWN, 2, 0x000003a000000000ull, 0x0000002000000000ull },</a>
-<a name="38"><span class="lineNum"> 38 </span> : : { GPU_MEM_4T_DOWN, 1, 0x000003c000000000ull, 0x0000002000000000ull },</a>
-<a name="39"><span class="lineNum"> 39 </span> : : { GPU_MEM_4T_DOWN, 0, 0x000003e000000000ull, 0x0000002000000000ull },</a>
-<a name="40"><span class="lineNum"> 40 </span> : : /* GPU memory from 4TB + 128GB*GPU. 4 GPUs only */</a>
-<a name="41"><span class="lineNum"> 41 </span> : : { GPU_MEM_4T_UP, 0, 0x0000040000000000ull, 0x0000002000000000ull },</a>
-<a name="42"><span class="lineNum"> 42 </span> : : { GPU_MEM_4T_UP, 1, 0x0000042000000000ull, 0x0000002000000000ull },</a>
-<a name="43"><span class="lineNum"> 43 </span> : : { GPU_MEM_4T_UP, 2, 0x0000044000000000ull, 0x0000002000000000ull },</a>
-<a name="44"><span class="lineNum"> 44 </span> : : { GPU_MEM_4T_UP, 3, 0x0000046000000000ull, 0x0000002000000000ull },</a>
-<a name="45"><span class="lineNum"> 45 </span> : : </a>
-<a name="46"><span class="lineNum"> 46 </span> : : /*</a>
-<a name="47"><span class="lineNum"> 47 </span> : : * OpenCAPI LPC Memory</a>
-<a name="48"><span class="lineNum"> 48 </span> : : *</a>
-<a name="49"><span class="lineNum"> 49 </span> : : * With chip address extension enabled, we allocate 4TB ranges</a>
-<a name="50"><span class="lineNum"> 50 </span> : : * (in the second non-mirrored region) for each OpenCAPI link</a>
-<a name="51"><span class="lineNum"> 51 </span> : : * by varying the upper 2 bits of the group ID.</a>
-<a name="52"><span class="lineNum"> 52 </span> : : *</a>
-<a name="53"><span class="lineNum"> 53 </span> : : * We don't currently support &gt;4TB ranges.</a>
-<a name="54"><span class="lineNum"> 54 </span> : : */</a>
-<a name="55"><span class="lineNum"> 55 </span> : : { OCAPI_MEM, 0, 0x0002000000000000ull, 0x0000040000000000ull },</a>
-<a name="56"><span class="lineNum"> 56 </span> : : { OCAPI_MEM, 1, 0x0002800000000000ull, 0x0000040000000000ull },</a>
-<a name="57"><span class="lineNum"> 57 </span> : : { OCAPI_MEM, 2, 0x0003000000000000ull, 0x0000040000000000ull },</a>
-<a name="58"><span class="lineNum"> 58 </span> : : { OCAPI_MEM, 3, 0x0003800000000000ull, 0x0000040000000000ull },</a>
-<a name="59"><span class="lineNum"> 59 </span> : : </a>
-<a name="60"><span class="lineNum"> 60 </span> : : /* 0 TB offset @ MMIO 0x0006000000000000ull */</a>
-<a name="61"><span class="lineNum"> 61 </span> : : { PHB4_64BIT_MMIO, 0, 0x0006000000000000ull, 0x0000004000000000ull },</a>
-<a name="62"><span class="lineNum"> 62 </span> : : { PHB4_64BIT_MMIO, 1, 0x0006004000000000ull, 0x0000004000000000ull },</a>
-<a name="63"><span class="lineNum"> 63 </span> : : { PHB4_64BIT_MMIO, 2, 0x0006008000000000ull, 0x0000004000000000ull },</a>
-<a name="64"><span class="lineNum"> 64 </span> : : { PHB4_32BIT_MMIO, 0, 0x000600c000000000ull, 0x0000000080000000ull },</a>
-<a name="65"><span class="lineNum"> 65 </span> : : { PHB4_32BIT_MMIO, 1, 0x000600c080000000ull, 0x0000000080000000ull },</a>
-<a name="66"><span class="lineNum"> 66 </span> : : { PHB4_32BIT_MMIO, 2, 0x000600c100000000ull, 0x0000000080000000ull },</a>
-<a name="67"><span class="lineNum"> 67 </span> : : { PHB4_32BIT_MMIO, 3, 0x000600c180000000ull, 0x0000000080000000ull },</a>
-<a name="68"><span class="lineNum"> 68 </span> : : { PHB4_32BIT_MMIO, 4, 0x000600c200000000ull, 0x0000000080000000ull },</a>
-<a name="69"><span class="lineNum"> 69 </span> : : { PHB4_32BIT_MMIO, 5, 0x000600c280000000ull, 0x0000000080000000ull },</a>
-<a name="70"><span class="lineNum"> 70 </span> : : { PHB4_XIVE_ESB , 0, 0x000600c300000000ull, 0x0000000020000000ull },</a>
-<a name="71"><span class="lineNum"> 71 </span> : : { PHB4_XIVE_ESB , 1, 0x000600c320000000ull, 0x0000000020000000ull },</a>
-<a name="72"><span class="lineNum"> 72 </span> : : { PHB4_XIVE_ESB , 2, 0x000600c340000000ull, 0x0000000020000000ull },</a>
-<a name="73"><span class="lineNum"> 73 </span> : : { PHB4_XIVE_ESB , 3, 0x000600c360000000ull, 0x0000000020000000ull },</a>
-<a name="74"><span class="lineNum"> 74 </span> : : { PHB4_XIVE_ESB , 4, 0x000600c380000000ull, 0x0000000020000000ull },</a>
-<a name="75"><span class="lineNum"> 75 </span> : : { PHB4_XIVE_ESB , 5, 0x000600c3a0000000ull, 0x0000000020000000ull },</a>
-<a name="76"><span class="lineNum"> 76 </span> : : { PHB4_REG_SPC , 0, 0x000600c3c0000000ull, 0x0000000000100000ull },</a>
-<a name="77"><span class="lineNum"> 77 </span> : : { PHB4_REG_SPC , 1, 0x000600c3c0100000ull, 0x0000000000100000ull },</a>
-<a name="78"><span class="lineNum"> 78 </span> : : { PHB4_REG_SPC , 2, 0x000600c3c0200000ull, 0x0000000000100000ull },</a>
-<a name="79"><span class="lineNum"> 79 </span> : : { PHB4_REG_SPC , 3, 0x000600c3c0300000ull, 0x0000000000100000ull },</a>
-<a name="80"><span class="lineNum"> 80 </span> : : { PHB4_REG_SPC , 4, 0x000600c3c0400000ull, 0x0000000000100000ull },</a>
-<a name="81"><span class="lineNum"> 81 </span> : : { PHB4_REG_SPC , 5, 0x000600c3c0500000ull, 0x0000000000100000ull },</a>
-<a name="82"><span class="lineNum"> 82 </span> : : { RESV , 0, 0x000600c3c0600000ull, 0x0000000c3fa00000ull },</a>
-<a name="83"><span class="lineNum"> 83 </span> : : { NPU_OCAPI_MMIO , 0, 0x000600d000000000ull, 0x0000000800000000ull },</a>
-<a name="84"><span class="lineNum"> 84 </span> : : { NPU_OCAPI_MMIO , 1, 0x000600d800000000ull, 0x0000000800000000ull },</a>
-<a name="85"><span class="lineNum"> 85 </span> : : { NPU_OCAPI_MMIO , 2, 0x000600e000000000ull, 0x0000000800000000ull },</a>
-<a name="86"><span class="lineNum"> 86 </span> : : { NPU_OCAPI_MMIO , 3, 0x000600e800000000ull, 0x0000000800000000ull },</a>
-<a name="87"><span class="lineNum"> 87 </span> : : { NPU_OCAPI_MMIO , 4, 0x000600f000000000ull, 0x0000000800000000ull },</a>
-<a name="88"><span class="lineNum"> 88 </span> : : { NPU_OCAPI_MMIO , 5, 0x000600f800000000ull, 0x0000000800000000ull },</a>
+<a name="29"><span class="lineNum"> 29 </span> : : static const struct phys_map_entry phys_map_table_p10[] = {</a>
+<a name="30"><span class="lineNum"> 30 </span> : : /* System memory upto 4TB minus GPU memory */</a>
+<a name="31"><span class="lineNum"> 31 </span> : : { SYSTEM_MEM, 0, 0x0000000000000000ull, 0x0000034000000000ull },</a>
+<a name="32"><span class="lineNum"> 32 </span> : : </a>
+<a name="33"><span class="lineNum"> 33 </span> : : /* Configure OpenCapi memory as before with the old chips.</a>
+<a name="34"><span class="lineNum"> 34 </span> : : * Keep in mind that we would need to rework this by allocating</a>
+<a name="35"><span class="lineNum"> 35 </span> : : * a new topology id.</a>
+<a name="36"><span class="lineNum"> 36 </span> : : */</a>
+<a name="37"><span class="lineNum"> 37 </span> : : { OCAPI_MEM, 0, 0x0002000000000000ull, 0x0000040000000000ull },</a>
+<a name="38"><span class="lineNum"> 38 </span> : : { OCAPI_MEM, 1, 0x0002040000000000ull, 0x0000040000000000ull },</a>
+<a name="39"><span class="lineNum"> 39 </span> : : </a>
+<a name="40"><span class="lineNum"> 40 </span> : : /* 0 TB offset @ MMIO 0x0006000000000000ull */</a>
+<a name="41"><span class="lineNum"> 41 </span> : : { PHB5_64BIT_MMIO, 0, 0x0006000000000000ull, 0x0000004000000000ull },</a>
+<a name="42"><span class="lineNum"> 42 </span> : : { PHB5_64BIT_MMIO, 1, 0x0006004000000000ull, 0x0000004000000000ull },</a>
+<a name="43"><span class="lineNum"> 43 </span> : : { PHB5_64BIT_MMIO, 2, 0x0006008000000000ull, 0x0000004000000000ull },</a>
+<a name="44"><span class="lineNum"> 44 </span> : : { PHB5_32BIT_MMIO, 0, 0x000600c000000000ull, 0x0000000080000000ull },</a>
+<a name="45"><span class="lineNum"> 45 </span> : : { PHB5_32BIT_MMIO, 1, 0x000600c080000000ull, 0x0000000080000000ull },</a>
+<a name="46"><span class="lineNum"> 46 </span> : : { PHB5_32BIT_MMIO, 2, 0x000600c100000000ull, 0x0000000080000000ull },</a>
+<a name="47"><span class="lineNum"> 47 </span> : : { PHB5_32BIT_MMIO, 3, 0x000600c180000000ull, 0x0000000080000000ull },</a>
+<a name="48"><span class="lineNum"> 48 </span> : : { PHB5_32BIT_MMIO, 4, 0x000600c200000000ull, 0x0000000080000000ull },</a>
+<a name="49"><span class="lineNum"> 49 </span> : : { PHB5_32BIT_MMIO, 5, 0x000600c280000000ull, 0x0000000080000000ull },</a>
+<a name="50"><span class="lineNum"> 50 </span> : : { PHB5_XIVE_ESB , 0, 0x000600c300000000ull, 0x0000000020000000ull },</a>
+<a name="51"><span class="lineNum"> 51 </span> : : { PHB5_XIVE_ESB , 1, 0x000600c320000000ull, 0x0000000020000000ull },</a>
+<a name="52"><span class="lineNum"> 52 </span> : : { PHB5_XIVE_ESB , 2, 0x000600c340000000ull, 0x0000000020000000ull },</a>
+<a name="53"><span class="lineNum"> 53 </span> : : { PHB5_XIVE_ESB , 3, 0x000600c360000000ull, 0x0000000020000000ull },</a>
+<a name="54"><span class="lineNum"> 54 </span> : : { PHB5_XIVE_ESB , 4, 0x000600c380000000ull, 0x0000000020000000ull },</a>
+<a name="55"><span class="lineNum"> 55 </span> : : { PHB5_XIVE_ESB , 5, 0x000600c3a0000000ull, 0x0000000020000000ull },</a>
+<a name="56"><span class="lineNum"> 56 </span> : : { PHB5_REG_SPC , 0, 0x000600c3c0000000ull, 0x0000000000100000ull },</a>
+<a name="57"><span class="lineNum"> 57 </span> : : { PHB5_REG_SPC , 1, 0x000600c3c0100000ull, 0x0000000000100000ull },</a>
+<a name="58"><span class="lineNum"> 58 </span> : : { PHB5_REG_SPC , 2, 0x000600c3c0200000ull, 0x0000000000100000ull },</a>
+<a name="59"><span class="lineNum"> 59 </span> : : { PHB5_REG_SPC , 3, 0x000600c3c0300000ull, 0x0000000000100000ull },</a>
+<a name="60"><span class="lineNum"> 60 </span> : : { PHB5_REG_SPC , 4, 0x000600c3c0400000ull, 0x0000000000100000ull },</a>
+<a name="61"><span class="lineNum"> 61 </span> : : { PHB5_REG_SPC , 5, 0x000600c3c0500000ull, 0x0000000000100000ull },</a>
+<a name="62"><span class="lineNum"> 62 </span> : : { RESV , 0, 0x000600c3c0600000ull, 0x0000003c3fa00000ull },</a>
+<a name="63"><span class="lineNum"> 63 </span> : : </a>
+<a name="64"><span class="lineNum"> 64 </span> : : /* 1 TB offset */</a>
+<a name="65"><span class="lineNum"> 65 </span> : : { RESV , 1, 0x0006010000000000ull, 0x0000010000000000ull },</a>
+<a name="66"><span class="lineNum"> 66 </span> : : </a>
+<a name="67"><span class="lineNum"> 67 </span> : : /* 2 TB offset */</a>
+<a name="68"><span class="lineNum"> 68 </span> : : { PHB5_64BIT_MMIO, 3, 0x0006020000000000ull, 0x0000004000000000ull },</a>
+<a name="69"><span class="lineNum"> 69 </span> : : { PHB5_64BIT_MMIO, 4, 0x0006024000000000ull, 0x0000004000000000ull },</a>
+<a name="70"><span class="lineNum"> 70 </span> : : { PHB5_64BIT_MMIO, 5, 0x0006028000000000ull, 0x0000004000000000ull },</a>
+<a name="71"><span class="lineNum"> 71 </span> : : { RESV , 2, 0x000602c000000000ull, 0x0000004000000000ull },</a>
+<a name="72"><span class="lineNum"> 72 </span> : : </a>
+<a name="73"><span class="lineNum"> 73 </span> : : /* 3 TB offset */</a>
+<a name="74"><span class="lineNum"> 74 </span> : : { LPC_BUS , 0, 0x0006030000000000ull, 0x0000000100000000ull },</a>
+<a name="75"><span class="lineNum"> 75 </span> : : { FSP_MMIO , 0, 0x0006030100000000ull, 0x0000000100000000ull },</a>
+<a name="76"><span class="lineNum"> 76 </span> : : { XIVE_IC , 0, 0x0006030200000000ull, 0x0000000002000000ull },</a>
+<a name="77"><span class="lineNum"> 77 </span> : : { PSIHB_ESB , 0, 0x0006030202000000ull, 0x0000000000100000ull },</a>
+<a name="78"><span class="lineNum"> 78 </span> : : { RESV , 3, 0x0006030202100000ull, 0x0000000000f00000ull },</a>
+<a name="79"><span class="lineNum"> 79 </span> : : { PSIHB_REG , 0, 0x0006030203000000ull, 0x0000000000100000ull },</a>
+<a name="80"><span class="lineNum"> 80 </span> : : { RESV , 4, 0x0006030203100000ull, 0x0000000000080000ull },</a>
+<a name="81"><span class="lineNum"> 81 </span> : : { XIVE_TM , 0, 0x0006030203180000ull, 0x0000000000040000ull },</a>
+<a name="82"><span class="lineNum"> 82 </span> : : { RESV , 5, 0x00060302031c0000ull, 0x0000000000010000ull },</a>
+<a name="83"><span class="lineNum"> 83 </span> : : { NX_RNG , 0, 0x00060302031d0000ull, 0x0000000000010000ull },</a>
+<a name="84"><span class="lineNum"> 84 </span> : : { RESV , 6, 0x00060302031e0000ull, 0x0000000004e20000ull },</a>
+<a name="85"><span class="lineNum"> 85 </span> : : { XIVE_NVC , 0, 0x0006030208000000ull, 0x0000000008000000ull },</a>
+<a name="86"><span class="lineNum"> 86 </span> : : { RESV , 7, 0x0006030210000000ull, 0x00000000ee000000ull },</a>
+<a name="87"><span class="lineNum"> 87 </span> : : { VAS_HYP_WIN , 0, 0x00060302fe000000ull, 0x0000000002000000ull },</a>
+<a name="88"><span class="lineNum"> 88 </span> : : { VAS_USER_WIN , 0, 0x0006030300000000ull, 0x0000000100000000ull },</a>
<a name="89"><span class="lineNum"> 89 </span> : : </a>
-<a name="90"><span class="lineNum"> 90 </span> : : /* 1 TB offset @ MMIO 0x0006000000000000ull */</a>
-<a name="91"><span class="lineNum"> 91 </span> : : { XIVE_VC , 0, 0x0006010000000000ull, 0x0000008000000000ull },</a>
-<a name="92"><span class="lineNum"> 92 </span> : : { XIVE_PC , 0, 0x0006018000000000ull, 0x0000001000000000ull },</a>
-<a name="93"><span class="lineNum"> 93 </span> : : { VAS_USER_WIN , 0, 0x0006019000000000ull, 0x0000000100000000ull },</a>
-<a name="94"><span class="lineNum"> 94 </span> : : { VAS_HYP_WIN , 0, 0x0006019100000000ull, 0x0000000002000000ull },</a>
-<a name="95"><span class="lineNum"> 95 </span> : : { RESV , 1, 0x0006019102000000ull, 0x000000001e000000ull },</a>
-<a name="96"><span class="lineNum"> 96 </span> : : { OCAB_XIVE_ESB , 0, 0x0006019120000000ull, 0x0000000020000000ull },</a>
-<a name="97"><span class="lineNum"> 97 </span> : : { RESV , 3, 0x0006019140000000ull, 0x0000006ec0000000ull },</a>
-<a name="98"><span class="lineNum"> 98 </span> : : </a>
-<a name="99"><span class="lineNum"> 99 </span> : : /* 2 TB offset @ MMIO 0x0006000000000000ull */</a>
-<a name="100"><span class="lineNum"> 100 </span> : : { PHB4_64BIT_MMIO, 3, 0x0006020000000000ull, 0x0000004000000000ull },</a>
-<a name="101"><span class="lineNum"> 101 </span> : : { PHB4_64BIT_MMIO, 4, 0x0006024000000000ull, 0x0000004000000000ull },</a>
-<a name="102"><span class="lineNum"> 102 </span> : : { PHB4_64BIT_MMIO, 5, 0x0006028000000000ull, 0x0000004000000000ull },</a>
-<a name="103"><span class="lineNum"> 103 </span> : : { RESV , 4, 0x000602c000000000ull, 0x0000004000000000ull },</a>
-<a name="104"><span class="lineNum"> 104 </span> : : </a>
-<a name="105"><span class="lineNum"> 105 </span> : : /* 3 TB offset @ MMIO 0x0006000000000000ull */</a>
-<a name="106"><span class="lineNum"> 106 </span> : : { LPC_BUS , 0, 0x0006030000000000ull, 0x0000000100000000ull },</a>
-<a name="107"><span class="lineNum"> 107 </span> : : { FSP_MMIO , 0, 0x0006030100000000ull, 0x0000000100000000ull },</a>
-<a name="108"><span class="lineNum"> 108 </span> : : { NPU_REGS , 0, 0x0006030200000000ull, 0x0000000001000000ull },</a>
-<a name="109"><span class="lineNum"> 109 </span> : : { NPU_USR , 0, 0x0006030201000000ull, 0x0000000000200000ull },</a>
-<a name="110"><span class="lineNum"> 110 </span> : : { NPU_PHY , 0, 0x0006030201200000ull, 0x0000000000200000ull },</a>
-<a name="111"><span class="lineNum"> 111 </span> : : { NPU_PHY , 1, 0x0006030201400000ull, 0x0000000000200000ull },</a>
-<a name="112"><span class="lineNum"> 112 </span> : : { NPU_NTL , 0, 0x0006030201600000ull, 0x0000000000020000ull },</a>
-<a name="113"><span class="lineNum"> 113 </span> : : { NPU_NTL , 1, 0x0006030201620000ull, 0x0000000000020000ull },</a>
-<a name="114"><span class="lineNum"> 114 </span> : : { NPU_NTL , 2, 0x0006030201640000ull, 0x0000000000020000ull },</a>
-<a name="115"><span class="lineNum"> 115 </span> : : { NPU_NTL , 3, 0x0006030201660000ull, 0x0000000000020000ull },</a>
-<a name="116"><span class="lineNum"> 116 </span> : : { NPU_NTL , 4, 0x0006030201680000ull, 0x0000000000020000ull },</a>
-<a name="117"><span class="lineNum"> 117 </span> : : { NPU_NTL , 5, 0x00060302016a0000ull, 0x0000000000020000ull },</a>
-<a name="118"><span class="lineNum"> 118 </span> : : { NPU_GENID , 0, 0x00060302016c0000ull, 0x0000000000020000ull },</a>
-<a name="119"><span class="lineNum"> 119 </span> : : { NPU_GENID , 1, 0x00060302016e0000ull, 0x0000000000020000ull },</a>
-<a name="120"><span class="lineNum"> 120 </span> : : { NPU_GENID , 2, 0x0006030201700000ull, 0x0000000000020000ull },</a>
-<a name="121"><span class="lineNum"> 121 </span> : : { RESV , 5, 0x0006030201720000ull, 0x00000000018e0000ull },</a>
-<a name="122"><span class="lineNum"> 122 </span> : : { PSIHB_REG , 0, 0x0006030203000000ull, 0x0000000000100000ull },</a>
-<a name="123"><span class="lineNum"> 123 </span> : : { XIVE_IC , 0, 0x0006030203100000ull, 0x0000000000080000ull },</a>
-<a name="124"><span class="lineNum"> 124 </span> : : { XIVE_TM , 0, 0x0006030203180000ull, 0x0000000000040000ull },</a>
-<a name="125"><span class="lineNum"> 125 </span> : : { PSIHB_ESB , 0, 0x00060302031c0000ull, 0x0000000000010000ull },</a>
-<a name="126"><span class="lineNum"> 126 </span> : : { NX_RNG , 0, 0x00060302031d0000ull, 0x0000000000010000ull },</a>
-<a name="127"><span class="lineNum"> 127 </span> : : { RESV , 6, 0x00060302031e0000ull, 0x000000001ce20000ull },</a>
-<a name="128"><span class="lineNum"> 128 </span> : : { CENTAUR_SCOM , 0, 0x0006030220000000ull, 0x0000000020000000ull },</a>
-<a name="129"><span class="lineNum"> 129 </span> : : { RESV , 7, 0x0006030240000000ull, 0x000000f9c0000000ull },</a>
-<a name="130"><span class="lineNum"> 130 </span> : : { XSCOM , 0, 0x000603fc00000000ull, 0x0000000400000000ull },</a>
-<a name="131"><span class="lineNum"> 131 </span> : : </a>
-<a name="132"><span class="lineNum"> 132 </span> : : /* NULL entry at end */</a>
-<a name="133"><span class="lineNum"> 133 </span> : : { NULL_MAP, 0, 0, 0 },</a>
-<a name="134"><span class="lineNum"> 134 </span> : : };</a>
-<a name="135"><span class="lineNum"> 135 </span> : : </a>
-<a name="136"><span class="lineNum"> 136 </span> : : static const struct phys_map_info phys_map_nimbus = {</a>
-<a name="137"><span class="lineNum"> 137 </span> : : .chip_select_shift = 42,</a>
-<a name="138"><span class="lineNum"> 138 </span> : : .table = phys_map_table_nimbus,</a>
-<a name="139"><span class="lineNum"> 139 </span> : : };</a>
-<a name="140"><span class="lineNum"> 140 </span> : : </a>
-<a name="141"><span class="lineNum"> 141 </span> : : static const struct phys_map_entry phys_map_table_axone[] = {</a>
-<a name="142"><span class="lineNum"> 142 </span> : : </a>
-<a name="143"><span class="lineNum"> 143 </span> : : /* System memory up to 4TB minus GPU memory */</a>
-<a name="144"><span class="lineNum"> 144 </span> : : { SYSTEM_MEM, 0, 0x0000000000000000ull, 0x0000034000000000ull },</a>
-<a name="145"><span class="lineNum"> 145 </span> : : /* GPU memory from 4TB - 128GB*GPU */</a>
-<a name="146"><span class="lineNum"> 146 </span> : : { GPU_MEM_4T_DOWN, 5, 0x0000034000000000ull, 0x0000002000000000ull },</a>
-<a name="147"><span class="lineNum"> 147 </span> : : { GPU_MEM_4T_DOWN, 4, 0x0000036000000000ull, 0x0000002000000000ull },</a>
-<a name="148"><span class="lineNum"> 148 </span> : : { GPU_MEM_4T_DOWN, 3, 0x0000038000000000ull, 0x0000002000000000ull },</a>
-<a name="149"><span class="lineNum"> 149 </span> : : { GPU_MEM_4T_DOWN, 2, 0x000003a000000000ull, 0x0000002000000000ull },</a>
-<a name="150"><span class="lineNum"> 150 </span> : : { GPU_MEM_4T_DOWN, 1, 0x000003c000000000ull, 0x0000002000000000ull },</a>
-<a name="151"><span class="lineNum"> 151 </span> : : { GPU_MEM_4T_DOWN, 0, 0x000003e000000000ull, 0x0000002000000000ull },</a>
-<a name="152"><span class="lineNum"> 152 </span> : : </a>
-<a name="153"><span class="lineNum"> 153 </span> : : /* 0 TB offset @ MMIO 0x0006000000000000ull */</a>
-<a name="154"><span class="lineNum"> 154 </span> : : { PHB4_64BIT_MMIO, 0, 0x0006000000000000ull, 0x0000004000000000ull },</a>
-<a name="155"><span class="lineNum"> 155 </span> : : { PHB4_64BIT_MMIO, 1, 0x0006004000000000ull, 0x0000004000000000ull },</a>
-<a name="156"><span class="lineNum"> 156 </span> : : { PHB4_64BIT_MMIO, 2, 0x0006008000000000ull, 0x0000004000000000ull },</a>
-<a name="157"><span class="lineNum"> 157 </span> : : { PHB4_32BIT_MMIO, 0, 0x000600c000000000ull, 0x0000000080000000ull },</a>
-<a name="158"><span class="lineNum"> 158 </span> : : { PHB4_32BIT_MMIO, 1, 0x000600c080000000ull, 0x0000000080000000ull },</a>
-<a name="159"><span class="lineNum"> 159 </span> : : { PHB4_32BIT_MMIO, 2, 0x000600c100000000ull, 0x0000000080000000ull },</a>
-<a name="160"><span class="lineNum"> 160 </span> : : { PHB4_32BIT_MMIO, 3, 0x000600c180000000ull, 0x0000000080000000ull },</a>
-<a name="161"><span class="lineNum"> 161 </span> : : { PHB4_32BIT_MMIO, 4, 0x000600c200000000ull, 0x0000000080000000ull },</a>
-<a name="162"><span class="lineNum"> 162 </span> : : { PHB4_32BIT_MMIO, 5, 0x000600c280000000ull, 0x0000000080000000ull },</a>
-<a name="163"><span class="lineNum"> 163 </span> : : { PHB4_XIVE_ESB, 0, 0x000600c300000000ull, 0x0000000020000000ull },</a>
-<a name="164"><span class="lineNum"> 164 </span> : : { PHB4_XIVE_ESB, 1, 0x000600c320000000ull, 0x0000000020000000ull },</a>
-<a name="165"><span class="lineNum"> 165 </span> : : { PHB4_XIVE_ESB, 2, 0x000600c340000000ull, 0x0000000020000000ull },</a>
-<a name="166"><span class="lineNum"> 166 </span> : : { PHB4_XIVE_ESB, 3, 0x000600c360000000ull, 0x0000000020000000ull },</a>
-<a name="167"><span class="lineNum"> 167 </span> : : { PHB4_XIVE_ESB, 4, 0x000600c380000000ull, 0x0000000020000000ull },</a>
-<a name="168"><span class="lineNum"> 168 </span> : : { PHB4_XIVE_ESB, 5, 0x000600c3a0000000ull, 0x0000000020000000ull },</a>
-<a name="169"><span class="lineNum"> 169 </span> : : { PHB4_REG_SPC, 0, 0x000600c3c0000000ull, 0x0000000000100000ull },</a>
-<a name="170"><span class="lineNum"> 170 </span> : : { PHB4_REG_SPC, 1, 0x000600c3c0100000ull, 0x0000000000100000ull },</a>
-<a name="171"><span class="lineNum"> 171 </span> : : { PHB4_REG_SPC, 2, 0x000600c3c0200000ull, 0x0000000000100000ull },</a>
-<a name="172"><span class="lineNum"> 172 </span> : : { PHB4_REG_SPC, 3, 0x000600c3c0300000ull, 0x0000000000100000ull },</a>
-<a name="173"><span class="lineNum"> 173 </span> : : { PHB4_REG_SPC, 4, 0x000600c3c0400000ull, 0x0000000000100000ull },</a>
-<a name="174"><span class="lineNum"> 174 </span> : : { PHB4_REG_SPC, 5, 0x000600c3c0500000ull, 0x0000000000100000ull },</a>
-<a name="175"><span class="lineNum"> 175 </span> : : { RESV, 0, 0x000600c3c0600000ull, 0x0000000c3fa00000ull },</a>
-<a name="176"><span class="lineNum"> 176 </span> : : { NPU_OCAPI_MMIO, 0, 0x000600d000000000ull, 0x0000000800000000ull },</a>
-<a name="177"><span class="lineNum"> 177 </span> : : { NPU_OCAPI_MMIO, 1, 0x000600d800000000ull, 0x0000000800000000ull },</a>
-<a name="178"><span class="lineNum"> 178 </span> : : { NPU_OCAPI_MMIO, 2, 0x000600e000000000ull, 0x0000000800000000ull },</a>
-<a name="179"><span class="lineNum"> 179 </span> : : { NPU_OCAPI_MMIO, 3, 0x000600e800000000ull, 0x0000000800000000ull },</a>
-<a name="180"><span class="lineNum"> 180 </span> : : { NPU_OCAPI_MMIO, 4, 0x000600f000000000ull, 0x0000000800000000ull },</a>
-<a name="181"><span class="lineNum"> 181 </span> : : { NPU_OCAPI_MMIO, 5, 0x000600f800000000ull, 0x0000000800000000ull },</a>
-<a name="182"><span class="lineNum"> 182 </span> : : </a>
-<a name="183"><span class="lineNum"> 183 </span> : : /* 1 TB offset @ MMIO 0x0006000000000000ull */</a>
-<a name="184"><span class="lineNum"> 184 </span> : : { XIVE_VC, 0, 0x0006010000000000ull, 0x0000008000000000ull },</a>
-<a name="185"><span class="lineNum"> 185 </span> : : { XIVE_PC, 0, 0x0006018000000000ull, 0x0000004000000000ull },</a>
-<a name="186"><span class="lineNum"> 186 </span> : : { VAS_USER_WIN, 0, 0x000601c000000000ull, 0x0000000100000000ull },</a>
-<a name="187"><span class="lineNum"> 187 </span> : : { VAS_HYP_WIN, 0, 0x000601c100000000ull, 0x0000000002000000ull },</a>
-<a name="188"><span class="lineNum"> 188 </span> : : { RESV, 1, 0x000601c102000000ull, 0x0000003efe000000ull },</a>
-<a name="189"><span class="lineNum"> 189 </span> : : </a>
-<a name="190"><span class="lineNum"> 190 </span> : : /* 2 TB offset @ MMIO 0x0006000000000000ull */</a>
-<a name="191"><span class="lineNum"> 191 </span> : : { PHB4_64BIT_MMIO, 3, 0x0006020000000000ull, 0x0000004000000000ull },</a>
-<a name="192"><span class="lineNum"> 192 </span> : : { PHB4_64BIT_MMIO, 4, 0x0006024000000000ull, 0x0000004000000000ull },</a>
-<a name="193"><span class="lineNum"> 193 </span> : : { PHB4_64BIT_MMIO, 5, 0x0006028000000000ull, 0x0000004000000000ull },</a>
-<a name="194"><span class="lineNum"> 194 </span> : : { RESV, 2, 0x000602c000000000ull, 0x0000004000000000ull },</a>
-<a name="195"><span class="lineNum"> 195 </span> : : </a>
-<a name="196"><span class="lineNum"> 196 </span> : : /* 3 TB offset @ MMIO 0x0006000000000000ull */</a>
-<a name="197"><span class="lineNum"> 197 </span> : : { LPC_BUS, 0, 0x0006030000000000ull, 0x0000000100000000ull },</a>
-<a name="198"><span class="lineNum"> 198 </span> : : { FSP_MMIO, 0, 0x0006030100000000ull, 0x0000000100000000ull },</a>
-<a name="199"><span class="lineNum"> 199 </span> : : { RESV, 3, 0x0006030200000000ull, 0x0000000003000000ull },</a>
-<a name="200"><span class="lineNum"> 200 </span> : : { PSIHB_REG, 0, 0x0006030203000000ull, 0x0000000000100000ull },</a>
-<a name="201"><span class="lineNum"> 201 </span> : : { XIVE_IC, 0, 0x0006030203100000ull, 0x0000000000080000ull },</a>
-<a name="202"><span class="lineNum"> 202 </span> : : { XIVE_TM, 0, 0x0006030203180000ull, 0x0000000000040000ull },</a>
-<a name="203"><span class="lineNum"> 203 </span> : : { PSIHB_ESB, 0, 0x00060302031c0000ull, 0x0000000000010000ull },</a>
-<a name="204"><span class="lineNum"> 204 </span> : : { NX_RNG, 0, 0x00060302031d0000ull, 0x0000000000010000ull },</a>
-<a name="205"><span class="lineNum"> 205 </span> : : { RESV, 4, 0x00060302031e0000ull, 0x00000001fce20000ull },</a>
-<a name="206"><span class="lineNum"> 206 </span> : : { MC_OCMB_CFG, 0, 0x0006030400000000ull, 0x0000000080000000ull },</a>
-<a name="207"><span class="lineNum"> 207 </span> : : { MC_OCMB_CFG, 1, 0x0006030480000000ull, 0x0000000080000000ull },</a>
-<a name="208"><span class="lineNum"> 208 </span> : : { MC_OCMB_MMIO, 0, 0x0006030500000000ull, 0x0000000080000000ull },</a>
-<a name="209"><span class="lineNum"> 209 </span> : : { MC_OCMB_MMIO, 1, 0x0006030580000000ull, 0x0000000080000000ull },</a>
-<a name="210"><span class="lineNum"> 210 </span> : : { MC_OCMB_CFG, 2, 0x0006030600000000ull, 0x0000000080000000ull },</a>
-<a name="211"><span class="lineNum"> 211 </span> : : { MC_OCMB_CFG, 3, 0x0006030680000000ull, 0x0000000080000000ull },</a>
-<a name="212"><span class="lineNum"> 212 </span> : : { MC_OCMB_MMIO, 2, 0x0006030700000000ull, 0x0000000080000000ull },</a>
-<a name="213"><span class="lineNum"> 213 </span> : : { MC_OCMB_MMIO, 3, 0x0006030780000000ull, 0x0000000080000000ull },</a>
-<a name="214"><span class="lineNum"> 214 </span> : : { MC_OCMB_CFG, 4, 0x0006030800000000ull, 0x0000000080000000ull },</a>
-<a name="215"><span class="lineNum"> 215 </span> : : { MC_OCMB_CFG, 5, 0x0006030880000000ull, 0x0000000080000000ull },</a>
-<a name="216"><span class="lineNum"> 216 </span> : : { MC_OCMB_MMIO, 4, 0x0006030900000000ull, 0x0000000080000000ull },</a>
-<a name="217"><span class="lineNum"> 217 </span> : : { MC_OCMB_MMIO, 5, 0x0006030980000000ull, 0x0000000080000000ull },</a>
-<a name="218"><span class="lineNum"> 218 </span> : : { MC_OCMB_CFG, 6, 0x0006030a00000000ull, 0x0000000080000000ull },</a>
-<a name="219"><span class="lineNum"> 219 </span> : : { MC_OCMB_CFG, 7, 0x0006030a80000000ull, 0x0000000080000000ull },</a>
-<a name="220"><span class="lineNum"> 220 </span> : : { MC_OCMB_MMIO, 6, 0x0006030b00000000ull, 0x0000000080000000ull },</a>
-<a name="221"><span class="lineNum"> 221 </span> : : { MC_OCMB_MMIO, 7, 0x0006030b80000000ull, 0x0000000080000000ull },</a>
-<a name="222"><span class="lineNum"> 222 </span> : : { MC_OCMB_CFG, 8, 0x0006030c00000000ull, 0x0000000080000000ull },</a>
-<a name="223"><span class="lineNum"> 223 </span> : : { MC_OCMB_CFG, 9, 0x0006030c80000000ull, 0x0000000080000000ull },</a>
-<a name="224"><span class="lineNum"> 224 </span> : : { MC_OCMB_MMIO, 8, 0x0006030d00000000ull, 0x0000000080000000ull },</a>
-<a name="225"><span class="lineNum"> 225 </span> : : { MC_OCMB_MMIO, 9, 0x0006030d80000000ull, 0x0000000080000000ull },</a>
-<a name="226"><span class="lineNum"> 226 </span> : : { MC_OCMB_CFG, 10, 0x0006030e00000000ull, 0x0000000080000000ull },</a>
-<a name="227"><span class="lineNum"> 227 </span> : : { MC_OCMB_CFG, 11, 0x0006030e80000000ull, 0x0000000080000000ull },</a>
-<a name="228"><span class="lineNum"> 228 </span> : : { MC_OCMB_MMIO, 10, 0x0006030f00000000ull, 0x0000000080000000ull },</a>
-<a name="229"><span class="lineNum"> 229 </span> : : { MC_OCMB_MMIO, 11, 0x0006030f80000000ull, 0x0000000080000000ull },</a>
-<a name="230"><span class="lineNum"> 230 </span> : : { MC_OCMB_CFG, 12, 0x0006031000000000ull, 0x0000000080000000ull },</a>
-<a name="231"><span class="lineNum"> 231 </span> : : { MC_OCMB_CFG, 13, 0x0006031080000000ull, 0x0000000080000000ull },</a>
-<a name="232"><span class="lineNum"> 232 </span> : : { MC_OCMB_MMIO, 12, 0x0006031100000000ull, 0x0000000080000000ull },</a>
-<a name="233"><span class="lineNum"> 233 </span> : : { MC_OCMB_MMIO, 13, 0x0006031180000000ull, 0x0000000080000000ull },</a>
-<a name="234"><span class="lineNum"> 234 </span> : : { MC_OCMB_CFG, 14, 0x0006031200000000ull, 0x0000000080000000ull },</a>
-<a name="235"><span class="lineNum"> 235 </span> : : { MC_OCMB_CFG, 15, 0x0006031280000000ull, 0x0000000080000000ull },</a>
-<a name="236"><span class="lineNum"> 236 </span> : : { MC_OCMB_MMIO, 14, 0x0006031300000000ull, 0x0000000080000000ull },</a>
-<a name="237"><span class="lineNum"> 237 </span> : : { MC_OCMB_MMIO, 15, 0x0006031380000000ull, 0x0000000080000000ull },</a>
-<a name="238"><span class="lineNum"> 238 </span> : : { RESV, 5, 0x0006031400000000ull, 0x000000d800000000ull },</a>
-<a name="239"><span class="lineNum"> 239 </span> : : { NPU_REGS, 0, 0x000603ec00000000ull, 0x0000000001000000ull },</a>
-<a name="240"><span class="lineNum"> 240 </span> : : { NPU_REGS, 1, 0x000603ec01000000ull, 0x0000000001000000ull },</a>
-<a name="241"><span class="lineNum"> 241 </span> : : { NPU_REGS, 2, 0x000603ec02000000ull, 0x0000000001000000ull },</a>
-<a name="242"><span class="lineNum"> 242 </span> : : { NPU_NTL, 0, 0x000603ec03000000ull, 0x0000000000020000ull },</a>
-<a name="243"><span class="lineNum"> 243 </span> : : { NPU_NTL, 1, 0x000603ec03020000ull, 0x0000000000020000ull },</a>
-<a name="244"><span class="lineNum"> 244 </span> : : { NPU_NTL, 2, 0x000603ec03040000ull, 0x0000000000020000ull },</a>
-<a name="245"><span class="lineNum"> 245 </span> : : { NPU_NTL, 3, 0x000603ec03060000ull, 0x0000000000020000ull },</a>
-<a name="246"><span class="lineNum"> 246 </span> : : { NPU_GENID, 0, 0x000603ec03080000ull, 0x0000000000080000ull },</a>
-<a name="247"><span class="lineNum"> 247 </span> : : { NPU_NTL, 4, 0x000603ec03100000ull, 0x0000000000020000ull },</a>
-<a name="248"><span class="lineNum"> 248 </span> : : { NPU_NTL, 5, 0x000603ec03120000ull, 0x0000000000020000ull },</a>
-<a name="249"><span class="lineNum"> 249 </span> : : { NPU_NTL, 6, 0x000603ec03140000ull, 0x0000000000020000ull },</a>
-<a name="250"><span class="lineNum"> 250 </span> : : { NPU_NTL, 7, 0x000603ec03160000ull, 0x0000000000020000ull },</a>
-<a name="251"><span class="lineNum"> 251 </span> : : { NPU_GENID, 1, 0x000603ec03180000ull, 0x0000000000080000ull },</a>
-<a name="252"><span class="lineNum"> 252 </span> : : { NPU_NTL, 8, 0x000603ec03200000ull, 0x0000000000020000ull },</a>
-<a name="253"><span class="lineNum"> 253 </span> : : { NPU_NTL, 9, 0x000603ec03220000ull, 0x0000000000020000ull },</a>
-<a name="254"><span class="lineNum"> 254 </span> : : { NPU_NTL, 10, 0x000603ec03240000ull, 0x0000000000020000ull },</a>
-<a name="255"><span class="lineNum"> 255 </span> : : { NPU_NTL, 11, 0x000603ec03260000ull, 0x0000000000020000ull },</a>
-<a name="256"><span class="lineNum"> 256 </span> : : { NPU_GENID, 2, 0x000603ec03280000ull, 0x0000000000080000ull },</a>
-<a name="257"><span class="lineNum"> 257 </span> : : { RESV, 6, 0x000603ec03300000ull, 0x0000000ffcd00000ull },</a>
-<a name="258"><span class="lineNum"> 258 </span> : : { XSCOM, 0, 0x000603fc00000000ull, 0x0000000400000000ull },</a>
-<a name="259"><span class="lineNum"> 259 </span> : : </a>
-<a name="260"><span class="lineNum"> 260 </span> : : /* NULL entry at end */</a>
-<a name="261"><span class="lineNum"> 261 </span> : : { NULL_MAP, 0, 0, 0 },</a>
-<a name="262"><span class="lineNum"> 262 </span> : : };</a>
-<a name="263"><span class="lineNum"> 263 </span> : : </a>
-<a name="264"><span class="lineNum"> 264 </span> : : static const struct phys_map_info phys_map_axone = {</a>
-<a name="265"><span class="lineNum"> 265 </span> : : .chip_select_shift = 42,</a>
-<a name="266"><span class="lineNum"> 266 </span> : : .table = phys_map_table_axone,</a>
-<a name="267"><span class="lineNum"> 267 </span> : : };</a>
+<a name="90"><span class="lineNum"> 90 </span> : : /* TODO: MC, OCMB */</a>
+<a name="91"><span class="lineNum"> 91 </span> : : { RESV , 8, 0x0006030400000000ull, 0x0000008400000000ull },</a>
+<a name="92"><span class="lineNum"> 92 </span> : : { PAU_OCAPI_MMIO , 0, 0x0006038800000000ull, 0x0000000800000000ull },</a>
+<a name="93"><span class="lineNum"> 93 </span> : : { PAU_OCAPI_MMIO , 1, 0x0006039000000000ull, 0x0000000800000000ull },</a>
+<a name="94"><span class="lineNum"> 94 </span> : : { PAU_OCAPI_MMIO , 2, 0x0006039800000000ull, 0x0000000800000000ull },</a>
+<a name="95"><span class="lineNum"> 95 </span> : : { PAU_OCAPI_MMIO , 3, 0x000603a000000000ull, 0x0000000800000000ull },</a>
+<a name="96"><span class="lineNum"> 96 </span> : : { PAU_OCAPI_MMIO , 4, 0x000603a800000000ull, 0x0000000800000000ull },</a>
+<a name="97"><span class="lineNum"> 97 </span> : : { PAU_OCAPI_MMIO , 5, 0x000603b000000000ull, 0x0000000800000000ull },</a>
+<a name="98"><span class="lineNum"> 98 </span> : : { PAU_OCAPI_MMIO , 6, 0x000603b800000000ull, 0x0000000800000000ull },</a>
+<a name="99"><span class="lineNum"> 99 </span> : : { PAU_OCAPI_MMIO , 7, 0x000603c000000000ull, 0x0000000800000000ull },</a>
+<a name="100"><span class="lineNum"> 100 </span> : : { PAU_OCAPI_MMIO , 8, 0x000603c800000000ull, 0x0000000800000000ull },</a>
+<a name="101"><span class="lineNum"> 101 </span> : : { PAU_OCAPI_MMIO , 9, 0x000603d000000000ull, 0x0000000800000000ull },</a>
+<a name="102"><span class="lineNum"> 102 </span> : : { PAU_OCAPI_MMIO ,10, 0x000603d800000000ull, 0x0000000800000000ull },</a>
+<a name="103"><span class="lineNum"> 103 </span> : : { PAU_OCAPI_MMIO ,11, 0x000603e000000000ull, 0x0000000800000000ull },</a>
+<a name="104"><span class="lineNum"> 104 </span> : : { PAU_REGS , 0, 0x000603e800000000ull, 0x0000000001000000ull },</a>
+<a name="105"><span class="lineNum"> 105 </span> : : { PAU_REGS , 1, 0x000603e801000000ull, 0x0000000001000000ull },</a>
+<a name="106"><span class="lineNum"> 106 </span> : : { PAU_REGS , 2, 0x000603e802000000ull, 0x0000000001000000ull },</a>
+<a name="107"><span class="lineNum"> 107 </span> : : { PAU_REGS , 3, 0x000603e803000000ull, 0x0000000001000000ull },</a>
+<a name="108"><span class="lineNum"> 108 </span> : : { PAU_REGS , 4, 0x000603e804000000ull, 0x0000000001000000ull },</a>
+<a name="109"><span class="lineNum"> 109 </span> : : { PAU_REGS , 5, 0x000603e805000000ull, 0x0000000001000000ull },</a>
+<a name="110"><span class="lineNum"> 110 </span> : : { RESV , 9, 0x000603e806000000ull, 0x0000000000040000ull },</a>
+<a name="111"><span class="lineNum"> 111 </span> : : { PAU_NTL , 0, 0x000603e806040000ull, 0x0000000000020000ull },</a>
+<a name="112"><span class="lineNum"> 112 </span> : : { PAU_NTL , 1, 0x000603e806060000ull, 0x0000000000020000ull },</a>
+<a name="113"><span class="lineNum"> 113 </span> : : { PAU_GENID , 0, 0x000603e806080000ull, 0x0000000000080000ull },</a>
+<a name="114"><span class="lineNum"> 114 </span> : : { RESV ,10, 0x000603e806100000ull, 0x0000000000040000ull },</a>
+<a name="115"><span class="lineNum"> 115 </span> : : { PAU_NTL , 2, 0x000603e806140000ull, 0x0000000000020000ull },</a>
+<a name="116"><span class="lineNum"> 116 </span> : : { PAU_NTL , 3, 0x000603e806160000ull, 0x0000000000020000ull },</a>
+<a name="117"><span class="lineNum"> 117 </span> : : { PAU_GENID , 1, 0x000603e806180000ull, 0x0000000000080000ull },</a>
+<a name="118"><span class="lineNum"> 118 </span> : : { RESV ,11, 0x000603e806200000ull, 0x0000000000040000ull },</a>
+<a name="119"><span class="lineNum"> 119 </span> : : { PAU_NTL , 4, 0x000603e806240000ull, 0x0000000000020000ull },</a>
+<a name="120"><span class="lineNum"> 120 </span> : : { PAU_NTL , 5, 0x000603e806260000ull, 0x0000000000020000ull },</a>
+<a name="121"><span class="lineNum"> 121 </span> : : { PAU_GENID , 2, 0x000603e806280000ull, 0x0000000000080000ull },</a>
+<a name="122"><span class="lineNum"> 122 </span> : : { RESV ,12, 0x000603e806300000ull, 0x0000000000040000ull },</a>
+<a name="123"><span class="lineNum"> 123 </span> : : { PAU_NTL , 6, 0x000603e806340000ull, 0x0000000000020000ull },</a>
+<a name="124"><span class="lineNum"> 124 </span> : : { PAU_NTL , 7, 0x000603e806360000ull, 0x0000000000020000ull },</a>
+<a name="125"><span class="lineNum"> 125 </span> : : { PAU_GENID , 3, 0x000603e806380000ull, 0x0000000000080000ull },</a>
+<a name="126"><span class="lineNum"> 126 </span> : : { RESV ,13, 0x000603e806400000ull, 0x0000000000040000ull },</a>
+<a name="127"><span class="lineNum"> 127 </span> : : { PAU_NTL , 8, 0x000603e806440000ull, 0x0000000000020000ull },</a>
+<a name="128"><span class="lineNum"> 128 </span> : : { PAU_NTL , 9, 0x000603e806460000ull, 0x0000000000020000ull },</a>
+<a name="129"><span class="lineNum"> 129 </span> : : { PAU_GENID , 4, 0x000603e806480000ull, 0x0000000000080000ull },</a>
+<a name="130"><span class="lineNum"> 130 </span> : : { RESV ,14, 0x000603e806500000ull, 0x0000000000040000ull },</a>
+<a name="131"><span class="lineNum"> 131 </span> : : { PAU_NTL ,10, 0x000603e806540000ull, 0x0000000000020000ull },</a>
+<a name="132"><span class="lineNum"> 132 </span> : : { PAU_NTL ,11, 0x000603e806560000ull, 0x0000000000020000ull },</a>
+<a name="133"><span class="lineNum"> 133 </span> : : { PAU_GENID , 5, 0x000603e806580000ull, 0x0000000000080000ull },</a>
+<a name="134"><span class="lineNum"> 134 </span> : : { RESV ,15, 0x000603e806600000ull, 0x00000013F9A00000ull },</a>
+<a name="135"><span class="lineNum"> 135 </span> : : { XSCOM , 0, 0x000603fc00000000ull, 0x0000000400000000ull },</a>
+<a name="136"><span class="lineNum"> 136 </span> : : </a>
+<a name="137"><span class="lineNum"> 137 </span> : : /* 4 TB offset */</a>
+<a name="138"><span class="lineNum"> 138 </span> : : { XIVE_NVPG , 0, 0x0006040000000000ull, 0x0000010000000000ull },</a>
+<a name="139"><span class="lineNum"> 139 </span> : : </a>
+<a name="140"><span class="lineNum"> 140 </span> : : /* 5 - 7 TB offset */</a>
+<a name="141"><span class="lineNum"> 141 </span> : : /* for P10 the END and ESB regions are separate in the MMIO</a>
+<a name="142"><span class="lineNum"> 142 </span> : : * table */</a>
+<a name="143"><span class="lineNum"> 143 </span> : : { XIVE_ESB , 0, 0x0006050000000000ull, 0x0000010000000000ull },</a>
+<a name="144"><span class="lineNum"> 144 </span> : : { XIVE_END , 0, 0x0006060000000000ull, 0x0000020000000000ull },</a>
+<a name="145"><span class="lineNum"> 145 </span> : : </a>
+<a name="146"><span class="lineNum"> 146 </span> : : /* 8 - 13 TB offset */</a>
+<a name="147"><span class="lineNum"> 147 </span> : : { RESV ,16, 0x0006080000000000ull, 0x0000060000000000ull },</a>
+<a name="148"><span class="lineNum"> 148 </span> : : </a>
+<a name="149"><span class="lineNum"> 149 </span> : : /* 14 TB offset */</a>
+<a name="150"><span class="lineNum"> 150 </span> : : { RESV ,17, 0x00060e0000000000ull, 0x0000008000000000ull },</a>
+<a name="151"><span class="lineNum"> 151 </span> : : </a>
+<a name="152"><span class="lineNum"> 152 </span> : : { NULL_MAP, 0, 0, 0 },</a>
+<a name="153"><span class="lineNum"> 153 </span> : : };</a>
+<a name="154"><span class="lineNum"> 154 </span> : : </a>
+<a name="155"><span class="lineNum"> 155 </span> : : static const struct phys_map_entry phys_map_table_nimbus[] = {</a>
+<a name="156"><span class="lineNum"> 156 </span> : : </a>
+<a name="157"><span class="lineNum"> 157 </span> : : /* System memory upto 4TB minus GPU memory */</a>
+<a name="158"><span class="lineNum"> 158 </span> : : { SYSTEM_MEM, 0, 0x0000000000000000ull, 0x0000034000000000ull },</a>
+<a name="159"><span class="lineNum"> 159 </span> : : /* GPU memory from 4TB - 128GB*GPU */</a>
+<a name="160"><span class="lineNum"> 160 </span> : : { GPU_MEM_4T_DOWN, 5, 0x0000034000000000ull, 0x0000002000000000ull },</a>
+<a name="161"><span class="lineNum"> 161 </span> : : { GPU_MEM_4T_DOWN, 4, 0x0000036000000000ull, 0x0000002000000000ull },</a>
+<a name="162"><span class="lineNum"> 162 </span> : : { GPU_MEM_4T_DOWN, 3, 0x0000038000000000ull, 0x0000002000000000ull },</a>
+<a name="163"><span class="lineNum"> 163 </span> : : { GPU_MEM_4T_DOWN, 2, 0x000003a000000000ull, 0x0000002000000000ull },</a>
+<a name="164"><span class="lineNum"> 164 </span> : : { GPU_MEM_4T_DOWN, 1, 0x000003c000000000ull, 0x0000002000000000ull },</a>
+<a name="165"><span class="lineNum"> 165 </span> : : { GPU_MEM_4T_DOWN, 0, 0x000003e000000000ull, 0x0000002000000000ull },</a>
+<a name="166"><span class="lineNum"> 166 </span> : : /* GPU memory from 4TB + 128GB*GPU. 4 GPUs only */</a>
+<a name="167"><span class="lineNum"> 167 </span> : : { GPU_MEM_4T_UP, 0, 0x0000040000000000ull, 0x0000002000000000ull },</a>
+<a name="168"><span class="lineNum"> 168 </span> : : { GPU_MEM_4T_UP, 1, 0x0000042000000000ull, 0x0000002000000000ull },</a>
+<a name="169"><span class="lineNum"> 169 </span> : : { GPU_MEM_4T_UP, 2, 0x0000044000000000ull, 0x0000002000000000ull },</a>
+<a name="170"><span class="lineNum"> 170 </span> : : { GPU_MEM_4T_UP, 3, 0x0000046000000000ull, 0x0000002000000000ull },</a>
+<a name="171"><span class="lineNum"> 171 </span> : : </a>
+<a name="172"><span class="lineNum"> 172 </span> : : /*</a>
+<a name="173"><span class="lineNum"> 173 </span> : : * OpenCAPI LPC Memory</a>
+<a name="174"><span class="lineNum"> 174 </span> : : *</a>
+<a name="175"><span class="lineNum"> 175 </span> : : * With chip address extension enabled, we allocate 4TB ranges</a>
+<a name="176"><span class="lineNum"> 176 </span> : : * (in the second non-mirrored region) for each OpenCAPI link</a>
+<a name="177"><span class="lineNum"> 177 </span> : : * by varying the upper 2 bits of the group ID.</a>
+<a name="178"><span class="lineNum"> 178 </span> : : *</a>
+<a name="179"><span class="lineNum"> 179 </span> : : * We don't currently support &gt;4TB ranges.</a>
+<a name="180"><span class="lineNum"> 180 </span> : : */</a>
+<a name="181"><span class="lineNum"> 181 </span> : : { OCAPI_MEM, 0, 0x0002000000000000ull, 0x0000040000000000ull },</a>
+<a name="182"><span class="lineNum"> 182 </span> : : { OCAPI_MEM, 1, 0x0002800000000000ull, 0x0000040000000000ull },</a>
+<a name="183"><span class="lineNum"> 183 </span> : : { OCAPI_MEM, 2, 0x0003000000000000ull, 0x0000040000000000ull },</a>
+<a name="184"><span class="lineNum"> 184 </span> : : { OCAPI_MEM, 3, 0x0003800000000000ull, 0x0000040000000000ull },</a>
+<a name="185"><span class="lineNum"> 185 </span> : : </a>
+<a name="186"><span class="lineNum"> 186 </span> : : /* 0 TB offset @ MMIO 0x0006000000000000ull */</a>
+<a name="187"><span class="lineNum"> 187 </span> : : { PHB4_64BIT_MMIO, 0, 0x0006000000000000ull, 0x0000004000000000ull },</a>
+<a name="188"><span class="lineNum"> 188 </span> : : { PHB4_64BIT_MMIO, 1, 0x0006004000000000ull, 0x0000004000000000ull },</a>
+<a name="189"><span class="lineNum"> 189 </span> : : { PHB4_64BIT_MMIO, 2, 0x0006008000000000ull, 0x0000004000000000ull },</a>
+<a name="190"><span class="lineNum"> 190 </span> : : { PHB4_32BIT_MMIO, 0, 0x000600c000000000ull, 0x0000000080000000ull },</a>
+<a name="191"><span class="lineNum"> 191 </span> : : { PHB4_32BIT_MMIO, 1, 0x000600c080000000ull, 0x0000000080000000ull },</a>
+<a name="192"><span class="lineNum"> 192 </span> : : { PHB4_32BIT_MMIO, 2, 0x000600c100000000ull, 0x0000000080000000ull },</a>
+<a name="193"><span class="lineNum"> 193 </span> : : { PHB4_32BIT_MMIO, 3, 0x000600c180000000ull, 0x0000000080000000ull },</a>
+<a name="194"><span class="lineNum"> 194 </span> : : { PHB4_32BIT_MMIO, 4, 0x000600c200000000ull, 0x0000000080000000ull },</a>
+<a name="195"><span class="lineNum"> 195 </span> : : { PHB4_32BIT_MMIO, 5, 0x000600c280000000ull, 0x0000000080000000ull },</a>
+<a name="196"><span class="lineNum"> 196 </span> : : { PHB4_XIVE_ESB , 0, 0x000600c300000000ull, 0x0000000020000000ull },</a>
+<a name="197"><span class="lineNum"> 197 </span> : : { PHB4_XIVE_ESB , 1, 0x000600c320000000ull, 0x0000000020000000ull },</a>
+<a name="198"><span class="lineNum"> 198 </span> : : { PHB4_XIVE_ESB , 2, 0x000600c340000000ull, 0x0000000020000000ull },</a>
+<a name="199"><span class="lineNum"> 199 </span> : : { PHB4_XIVE_ESB , 3, 0x000600c360000000ull, 0x0000000020000000ull },</a>
+<a name="200"><span class="lineNum"> 200 </span> : : { PHB4_XIVE_ESB , 4, 0x000600c380000000ull, 0x0000000020000000ull },</a>
+<a name="201"><span class="lineNum"> 201 </span> : : { PHB4_XIVE_ESB , 5, 0x000600c3a0000000ull, 0x0000000020000000ull },</a>
+<a name="202"><span class="lineNum"> 202 </span> : : { PHB4_REG_SPC , 0, 0x000600c3c0000000ull, 0x0000000000100000ull },</a>
+<a name="203"><span class="lineNum"> 203 </span> : : { PHB4_REG_SPC , 1, 0x000600c3c0100000ull, 0x0000000000100000ull },</a>
+<a name="204"><span class="lineNum"> 204 </span> : : { PHB4_REG_SPC , 2, 0x000600c3c0200000ull, 0x0000000000100000ull },</a>
+<a name="205"><span class="lineNum"> 205 </span> : : { PHB4_REG_SPC , 3, 0x000600c3c0300000ull, 0x0000000000100000ull },</a>
+<a name="206"><span class="lineNum"> 206 </span> : : { PHB4_REG_SPC , 4, 0x000600c3c0400000ull, 0x0000000000100000ull },</a>
+<a name="207"><span class="lineNum"> 207 </span> : : { PHB4_REG_SPC , 5, 0x000600c3c0500000ull, 0x0000000000100000ull },</a>
+<a name="208"><span class="lineNum"> 208 </span> : : { RESV , 0, 0x000600c3c0600000ull, 0x0000000c3fa00000ull },</a>
+<a name="209"><span class="lineNum"> 209 </span> : : { NPU_OCAPI_MMIO , 0, 0x000600d000000000ull, 0x0000000800000000ull },</a>
+<a name="210"><span class="lineNum"> 210 </span> : : { NPU_OCAPI_MMIO , 1, 0x000600d800000000ull, 0x0000000800000000ull },</a>
+<a name="211"><span class="lineNum"> 211 </span> : : { NPU_OCAPI_MMIO , 2, 0x000600e000000000ull, 0x0000000800000000ull },</a>
+<a name="212"><span class="lineNum"> 212 </span> : : { NPU_OCAPI_MMIO , 3, 0x000600e800000000ull, 0x0000000800000000ull },</a>
+<a name="213"><span class="lineNum"> 213 </span> : : { NPU_OCAPI_MMIO , 4, 0x000600f000000000ull, 0x0000000800000000ull },</a>
+<a name="214"><span class="lineNum"> 214 </span> : : { NPU_OCAPI_MMIO , 5, 0x000600f800000000ull, 0x0000000800000000ull },</a>
+<a name="215"><span class="lineNum"> 215 </span> : : </a>
+<a name="216"><span class="lineNum"> 216 </span> : : /* 1 TB offset @ MMIO 0x0006000000000000ull */</a>
+<a name="217"><span class="lineNum"> 217 </span> : : { XIVE_VC , 0, 0x0006010000000000ull, 0x0000008000000000ull },</a>
+<a name="218"><span class="lineNum"> 218 </span> : : { XIVE_PC , 0, 0x0006018000000000ull, 0x0000001000000000ull },</a>
+<a name="219"><span class="lineNum"> 219 </span> : : { VAS_USER_WIN , 0, 0x0006019000000000ull, 0x0000000100000000ull },</a>
+<a name="220"><span class="lineNum"> 220 </span> : : { VAS_HYP_WIN , 0, 0x0006019100000000ull, 0x0000000002000000ull },</a>
+<a name="221"><span class="lineNum"> 221 </span> : : { RESV , 1, 0x0006019102000000ull, 0x000000001e000000ull },</a>
+<a name="222"><span class="lineNum"> 222 </span> : : { OCAB_XIVE_ESB , 0, 0x0006019120000000ull, 0x0000000020000000ull },</a>
+<a name="223"><span class="lineNum"> 223 </span> : : { RESV , 3, 0x0006019140000000ull, 0x0000006ec0000000ull },</a>
+<a name="224"><span class="lineNum"> 224 </span> : : </a>
+<a name="225"><span class="lineNum"> 225 </span> : : /* 2 TB offset @ MMIO 0x0006000000000000ull */</a>
+<a name="226"><span class="lineNum"> 226 </span> : : { PHB4_64BIT_MMIO, 3, 0x0006020000000000ull, 0x0000004000000000ull },</a>
+<a name="227"><span class="lineNum"> 227 </span> : : { PHB4_64BIT_MMIO, 4, 0x0006024000000000ull, 0x0000004000000000ull },</a>
+<a name="228"><span class="lineNum"> 228 </span> : : { PHB4_64BIT_MMIO, 5, 0x0006028000000000ull, 0x0000004000000000ull },</a>
+<a name="229"><span class="lineNum"> 229 </span> : : { RESV , 4, 0x000602c000000000ull, 0x0000004000000000ull },</a>
+<a name="230"><span class="lineNum"> 230 </span> : : </a>
+<a name="231"><span class="lineNum"> 231 </span> : : /* 3 TB offset @ MMIO 0x0006000000000000ull */</a>
+<a name="232"><span class="lineNum"> 232 </span> : : { LPC_BUS , 0, 0x0006030000000000ull, 0x0000000100000000ull },</a>
+<a name="233"><span class="lineNum"> 233 </span> : : { FSP_MMIO , 0, 0x0006030100000000ull, 0x0000000100000000ull },</a>
+<a name="234"><span class="lineNum"> 234 </span> : : { NPU_REGS , 0, 0x0006030200000000ull, 0x0000000001000000ull },</a>
+<a name="235"><span class="lineNum"> 235 </span> : : { NPU_USR , 0, 0x0006030201000000ull, 0x0000000000200000ull },</a>
+<a name="236"><span class="lineNum"> 236 </span> : : { NPU_PHY , 0, 0x0006030201200000ull, 0x0000000000200000ull },</a>
+<a name="237"><span class="lineNum"> 237 </span> : : { NPU_PHY , 1, 0x0006030201400000ull, 0x0000000000200000ull },</a>
+<a name="238"><span class="lineNum"> 238 </span> : : { NPU_NTL , 0, 0x0006030201600000ull, 0x0000000000020000ull },</a>
+<a name="239"><span class="lineNum"> 239 </span> : : { NPU_NTL , 1, 0x0006030201620000ull, 0x0000000000020000ull },</a>
+<a name="240"><span class="lineNum"> 240 </span> : : { NPU_NTL , 2, 0x0006030201640000ull, 0x0000000000020000ull },</a>
+<a name="241"><span class="lineNum"> 241 </span> : : { NPU_NTL , 3, 0x0006030201660000ull, 0x0000000000020000ull },</a>
+<a name="242"><span class="lineNum"> 242 </span> : : { NPU_NTL , 4, 0x0006030201680000ull, 0x0000000000020000ull },</a>
+<a name="243"><span class="lineNum"> 243 </span> : : { NPU_NTL , 5, 0x00060302016a0000ull, 0x0000000000020000ull },</a>
+<a name="244"><span class="lineNum"> 244 </span> : : { NPU_GENID , 0, 0x00060302016c0000ull, 0x0000000000020000ull },</a>
+<a name="245"><span class="lineNum"> 245 </span> : : { NPU_GENID , 1, 0x00060302016e0000ull, 0x0000000000020000ull },</a>
+<a name="246"><span class="lineNum"> 246 </span> : : { NPU_GENID , 2, 0x0006030201700000ull, 0x0000000000020000ull },</a>
+<a name="247"><span class="lineNum"> 247 </span> : : { RESV , 5, 0x0006030201720000ull, 0x00000000018e0000ull },</a>
+<a name="248"><span class="lineNum"> 248 </span> : : { PSIHB_REG , 0, 0x0006030203000000ull, 0x0000000000100000ull },</a>
+<a name="249"><span class="lineNum"> 249 </span> : : { XIVE_IC , 0, 0x0006030203100000ull, 0x0000000000080000ull },</a>
+<a name="250"><span class="lineNum"> 250 </span> : : { XIVE_TM , 0, 0x0006030203180000ull, 0x0000000000040000ull },</a>
+<a name="251"><span class="lineNum"> 251 </span> : : { PSIHB_ESB , 0, 0x00060302031c0000ull, 0x0000000000010000ull },</a>
+<a name="252"><span class="lineNum"> 252 </span> : : { NX_RNG , 0, 0x00060302031d0000ull, 0x0000000000010000ull },</a>
+<a name="253"><span class="lineNum"> 253 </span> : : { RESV , 6, 0x00060302031e0000ull, 0x000000001ce20000ull },</a>
+<a name="254"><span class="lineNum"> 254 </span> : : { CENTAUR_SCOM , 0, 0x0006030220000000ull, 0x0000000020000000ull },</a>
+<a name="255"><span class="lineNum"> 255 </span> : : { RESV , 7, 0x0006030240000000ull, 0x000000f9c0000000ull },</a>
+<a name="256"><span class="lineNum"> 256 </span> : : { XSCOM , 0, 0x000603fc00000000ull, 0x0000000400000000ull },</a>
+<a name="257"><span class="lineNum"> 257 </span> : : </a>
+<a name="258"><span class="lineNum"> 258 </span> : : /* NULL entry at end */</a>
+<a name="259"><span class="lineNum"> 259 </span> : : { NULL_MAP, 0, 0, 0 },</a>
+<a name="260"><span class="lineNum"> 260 </span> : : };</a>
+<a name="261"><span class="lineNum"> 261 </span> : : </a>
+<a name="262"><span class="lineNum"> 262 </span> : : static const struct phys_map_info phys_map_nimbus = {</a>
+<a name="263"><span class="lineNum"> 263 </span> : : .chip_select_shift = 42,</a>
+<a name="264"><span class="lineNum"> 264 </span> : : .table = phys_map_table_nimbus,</a>
+<a name="265"><span class="lineNum"> 265 </span> : : };</a>
+<a name="266"><span class="lineNum"> 266 </span> : : </a>
+<a name="267"><span class="lineNum"> 267 </span> : : static const struct phys_map_entry phys_map_table_axone[] = {</a>
<a name="268"><span class="lineNum"> 268 </span> : : </a>
-<a name="269"><span class="lineNum"> 269 </span> :<span class="lineCov"> 9392 : static inline bool phys_map_entry_null(const struct phys_map_entry *e)</span></a>
-<a name="270"><span class="lineNum"> 270 </span> : : {</a>
-<a name="271"><span class="lineNum"> 271 </span> :<span class="lineCov"> 9392 : if (e-&gt;type == NULL_MAP)</span></a>
-<a name="272"><span class="lineNum"> 272 </span> :<span class="lineCov"> 6 : return true;</span></a>
-<a name="273"><span class="lineNum"> 273 </span> :<span class="lineCov"> 9386 : return false;</span></a>
-<a name="274"><span class="lineNum"> 274 </span> : : }</a>
-<a name="275"><span class="lineNum"> 275 </span> : : </a>
-<a name="276"><span class="lineNum"> 276 </span> : : </a>
-<a name="277"><span class="lineNum"> 277 </span> : : /* This crashes skiboot on error as any bad calls here are almost</a>
-<a name="278"><span class="lineNum"> 278 </span> : : * certainly a developer error</a>
-<a name="279"><span class="lineNum"> 279 </span> : : */</a>
-<a name="280"><span class="lineNum"> 280 </span> :<span class="lineCov"> 185 : void phys_map_get(uint64_t gcid, enum phys_map_type type,</span></a>
-<a name="281"><span class="lineNum"> 281 </span> : : int index, uint64_t *addr, uint64_t *size) {</a>
-<a name="282"><span class="lineNum"> 282 </span> : : const struct phys_map_entry *e;</a>
-<a name="283"><span class="lineNum"> 283 </span> : : uint64_t a;</a>
-<a name="284"><span class="lineNum"> 284 </span> : : </a>
-<a name="285"><span class="lineNum"> 285 </span> :<span class="lineCov"> 185 : if (!phys_map)</span></a>
-<a name="286"><span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="287"><span class="lineNum"> 287 </span> : : </a>
-<a name="288"><span class="lineNum"> 288 </span> : : /* Find entry in table */</a>
-<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 8831 : for (e = phys_map-&gt;table; ; e++) {</span></a>
-<a name="290"><span class="lineNum"> 290 </span> : : </a>
-<a name="291"><span class="lineNum"> 291 </span> : : /* End of table */</a>
-<a name="292"><span class="lineNum"> 292 </span> :<span class="lineCov"> 8831 : if (phys_map_entry_null(e))</span></a>
-<a name="293"><span class="lineNum"> 293 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="294"><span class="lineNum"> 294 </span> : : </a>
-<a name="295"><span class="lineNum"> 295 </span> : : /* Is this our entry? */</a>
-<a name="296"><span class="lineNum"> 296 </span> :<span class="lineCov"> 8831 : if (e-&gt;type != type)</span></a>
-<a name="297"><span class="lineNum"> 297 </span> :<span class="lineCov"> 8081 : continue;</span></a>
-<a name="298"><span class="lineNum"> 298 </span> :<span class="lineCov"> 750 : if (e-&gt;index != index)</span></a>
-<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 565 : continue;</span></a>
-<a name="300"><span class="lineNum"> 300 </span> : : </a>
-<a name="301"><span class="lineNum"> 301 </span> : : /* Found entry! */</a>
-<a name="302"><span class="lineNum"> 302 </span> :<span class="lineCov"> 185 : break;</span></a>
-<a name="303"><span class="lineNum"> 303 </span> : : }</a>
-<a name="304"><span class="lineNum"> 304 </span> :<span class="lineCov"> 185 : a = e-&gt;addr;</span></a>
-<a name="305"><span class="lineNum"> 305 </span> :<span class="lineCov"> 185 : a += gcid &lt;&lt; phys_map-&gt;chip_select_shift;</span></a>
-<a name="306"><span class="lineNum"> 306 </span> : : </a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineCov"> 185 : if (addr)</span></a>
-<a name="308"><span class="lineNum"> 308 </span> :<span class="lineCov"> 185 : *addr = a;</span></a>
-<a name="309"><span class="lineNum"> 309 </span> :<span class="lineCov"> 185 : if (size)</span></a>
-<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 185 : *size = e-&gt;size;</span></a>
-<a name="311"><span class="lineNum"> 311 </span> : : </a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 185 : prlog(PR_TRACE, &quot;Assigning BAR [%&quot;PRIx64&quot;] type:%02i index:%x &quot;</span></a>
-<a name="313"><span class="lineNum"> 313 </span> : : &quot;0x%016&quot;PRIx64&quot; for 0x%016&quot;PRIx64&quot;\n&quot;,</a>
-<a name="314"><span class="lineNum"> 314 </span> : : gcid, type, index, a, e-&gt;size);</a>
+<a name="269"><span class="lineNum"> 269 </span> : : /* System memory up to 4TB minus GPU memory */</a>
+<a name="270"><span class="lineNum"> 270 </span> : : { SYSTEM_MEM, 0, 0x0000000000000000ull, 0x0000034000000000ull },</a>
+<a name="271"><span class="lineNum"> 271 </span> : : /* GPU memory from 4TB - 128GB*GPU */</a>
+<a name="272"><span class="lineNum"> 272 </span> : : { GPU_MEM_4T_DOWN, 5, 0x0000034000000000ull, 0x0000002000000000ull },</a>
+<a name="273"><span class="lineNum"> 273 </span> : : { GPU_MEM_4T_DOWN, 4, 0x0000036000000000ull, 0x0000002000000000ull },</a>
+<a name="274"><span class="lineNum"> 274 </span> : : { GPU_MEM_4T_DOWN, 3, 0x0000038000000000ull, 0x0000002000000000ull },</a>
+<a name="275"><span class="lineNum"> 275 </span> : : { GPU_MEM_4T_DOWN, 2, 0x000003a000000000ull, 0x0000002000000000ull },</a>
+<a name="276"><span class="lineNum"> 276 </span> : : { GPU_MEM_4T_DOWN, 1, 0x000003c000000000ull, 0x0000002000000000ull },</a>
+<a name="277"><span class="lineNum"> 277 </span> : : { GPU_MEM_4T_DOWN, 0, 0x000003e000000000ull, 0x0000002000000000ull },</a>
+<a name="278"><span class="lineNum"> 278 </span> : : </a>
+<a name="279"><span class="lineNum"> 279 </span> : : /* 0 TB offset @ MMIO 0x0006000000000000ull */</a>
+<a name="280"><span class="lineNum"> 280 </span> : : { PHB4_64BIT_MMIO, 0, 0x0006000000000000ull, 0x0000004000000000ull },</a>
+<a name="281"><span class="lineNum"> 281 </span> : : { PHB4_64BIT_MMIO, 1, 0x0006004000000000ull, 0x0000004000000000ull },</a>
+<a name="282"><span class="lineNum"> 282 </span> : : { PHB4_64BIT_MMIO, 2, 0x0006008000000000ull, 0x0000004000000000ull },</a>
+<a name="283"><span class="lineNum"> 283 </span> : : { PHB4_32BIT_MMIO, 0, 0x000600c000000000ull, 0x0000000080000000ull },</a>
+<a name="284"><span class="lineNum"> 284 </span> : : { PHB4_32BIT_MMIO, 1, 0x000600c080000000ull, 0x0000000080000000ull },</a>
+<a name="285"><span class="lineNum"> 285 </span> : : { PHB4_32BIT_MMIO, 2, 0x000600c100000000ull, 0x0000000080000000ull },</a>
+<a name="286"><span class="lineNum"> 286 </span> : : { PHB4_32BIT_MMIO, 3, 0x000600c180000000ull, 0x0000000080000000ull },</a>
+<a name="287"><span class="lineNum"> 287 </span> : : { PHB4_32BIT_MMIO, 4, 0x000600c200000000ull, 0x0000000080000000ull },</a>
+<a name="288"><span class="lineNum"> 288 </span> : : { PHB4_32BIT_MMIO, 5, 0x000600c280000000ull, 0x0000000080000000ull },</a>
+<a name="289"><span class="lineNum"> 289 </span> : : { PHB4_XIVE_ESB, 0, 0x000600c300000000ull, 0x0000000020000000ull },</a>
+<a name="290"><span class="lineNum"> 290 </span> : : { PHB4_XIVE_ESB, 1, 0x000600c320000000ull, 0x0000000020000000ull },</a>
+<a name="291"><span class="lineNum"> 291 </span> : : { PHB4_XIVE_ESB, 2, 0x000600c340000000ull, 0x0000000020000000ull },</a>
+<a name="292"><span class="lineNum"> 292 </span> : : { PHB4_XIVE_ESB, 3, 0x000600c360000000ull, 0x0000000020000000ull },</a>
+<a name="293"><span class="lineNum"> 293 </span> : : { PHB4_XIVE_ESB, 4, 0x000600c380000000ull, 0x0000000020000000ull },</a>
+<a name="294"><span class="lineNum"> 294 </span> : : { PHB4_XIVE_ESB, 5, 0x000600c3a0000000ull, 0x0000000020000000ull },</a>
+<a name="295"><span class="lineNum"> 295 </span> : : { PHB4_REG_SPC, 0, 0x000600c3c0000000ull, 0x0000000000100000ull },</a>
+<a name="296"><span class="lineNum"> 296 </span> : : { PHB4_REG_SPC, 1, 0x000600c3c0100000ull, 0x0000000000100000ull },</a>
+<a name="297"><span class="lineNum"> 297 </span> : : { PHB4_REG_SPC, 2, 0x000600c3c0200000ull, 0x0000000000100000ull },</a>
+<a name="298"><span class="lineNum"> 298 </span> : : { PHB4_REG_SPC, 3, 0x000600c3c0300000ull, 0x0000000000100000ull },</a>
+<a name="299"><span class="lineNum"> 299 </span> : : { PHB4_REG_SPC, 4, 0x000600c3c0400000ull, 0x0000000000100000ull },</a>
+<a name="300"><span class="lineNum"> 300 </span> : : { PHB4_REG_SPC, 5, 0x000600c3c0500000ull, 0x0000000000100000ull },</a>
+<a name="301"><span class="lineNum"> 301 </span> : : { RESV, 0, 0x000600c3c0600000ull, 0x0000000c3fa00000ull },</a>
+<a name="302"><span class="lineNum"> 302 </span> : : { NPU_OCAPI_MMIO, 0, 0x000600d000000000ull, 0x0000000800000000ull },</a>
+<a name="303"><span class="lineNum"> 303 </span> : : { NPU_OCAPI_MMIO, 1, 0x000600d800000000ull, 0x0000000800000000ull },</a>
+<a name="304"><span class="lineNum"> 304 </span> : : { NPU_OCAPI_MMIO, 2, 0x000600e000000000ull, 0x0000000800000000ull },</a>
+<a name="305"><span class="lineNum"> 305 </span> : : { NPU_OCAPI_MMIO, 3, 0x000600e800000000ull, 0x0000000800000000ull },</a>
+<a name="306"><span class="lineNum"> 306 </span> : : { NPU_OCAPI_MMIO, 4, 0x000600f000000000ull, 0x0000000800000000ull },</a>
+<a name="307"><span class="lineNum"> 307 </span> : : { NPU_OCAPI_MMIO, 5, 0x000600f800000000ull, 0x0000000800000000ull },</a>
+<a name="308"><span class="lineNum"> 308 </span> : : </a>
+<a name="309"><span class="lineNum"> 309 </span> : : /* 1 TB offset @ MMIO 0x0006000000000000ull */</a>
+<a name="310"><span class="lineNum"> 310 </span> : : { XIVE_VC, 0, 0x0006010000000000ull, 0x0000008000000000ull },</a>
+<a name="311"><span class="lineNum"> 311 </span> : : { XIVE_PC, 0, 0x0006018000000000ull, 0x0000004000000000ull },</a>
+<a name="312"><span class="lineNum"> 312 </span> : : { VAS_USER_WIN, 0, 0x000601c000000000ull, 0x0000000100000000ull },</a>
+<a name="313"><span class="lineNum"> 313 </span> : : { VAS_HYP_WIN, 0, 0x000601c100000000ull, 0x0000000002000000ull },</a>
+<a name="314"><span class="lineNum"> 314 </span> : : { RESV, 1, 0x000601c102000000ull, 0x0000003efe000000ull },</a>
<a name="315"><span class="lineNum"> 315 </span> : : </a>
-<a name="316"><span class="lineNum"> 316 </span> :<span class="lineCov"> 185 : return;</span></a>
-<a name="317"><span class="lineNum"> 317 </span> : : </a>
-<a name="318"><span class="lineNum"> 318 </span> :<span class="lineNoCov"> 0 : error:</span></a>
-<a name="319"><span class="lineNum"> 319 </span> : : /* Something has gone really wrong */</a>
-<a name="320"><span class="lineNum"> 320 </span> :<span class="lineNoCov"> 0 : prlog(PR_EMERG, &quot;ERROR: Failed to lookup BAR type:%i index:%i\n&quot;,</span></a>
-<a name="321"><span class="lineNum"> 321 </span> : : type, index);</a>
-<a name="322"><span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : assert(0);</span></a>
-<a name="323"><span class="lineNum"> 323 </span> : : }</a>
-<a name="324"><span class="lineNum"> 324 </span> : : </a>
-<a name="325"><span class="lineNum"> 325 </span> :<span class="lineCov"> 4 : void phys_map_init(unsigned long pvr)</span></a>
-<a name="326"><span class="lineNum"> 326 </span> : : {</a>
-<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 4 : const char *name = &quot;unused&quot;;</span></a>
-<a name="328"><span class="lineNum"> 328 </span> : : </a>
-<a name="329"><span class="lineNum"> 329 </span> :<span class="lineCov"> 4 : phys_map = NULL;</span></a>
-<a name="330"><span class="lineNum"> 330 </span> : : </a>
-<a name="331"><span class="lineNum"> 331 </span> :<span class="lineCov"> 4 : if (proc_gen == proc_gen_p9) {</span></a>
-<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 2 : switch(PVR_TYPE(pvr)) {</span></a>
-<a name="333"><span class="lineNum"> 333 </span> :<span class="lineCov"> 1 : case PVR_TYPE_P9P:</span></a>
-<a name="334"><span class="lineNum"> 334 </span> :<span class="lineCov"> 1 : name = &quot;axone&quot;;</span></a>
-<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 1 : phys_map = &amp;phys_map_axone;</span></a>
-<a name="336"><span class="lineNum"> 336 </span> :<span class="lineCov"> 1 : break;</span></a>
-<a name="337"><span class="lineNum"> 337 </span> :<span class="lineCov"> 1 : default:</span></a>
-<a name="338"><span class="lineNum"> 338 </span> :<span class="lineCov"> 1 : name = &quot;nimbus&quot;;</span></a>
-<a name="339"><span class="lineNum"> 339 </span> :<span class="lineCov"> 1 : phys_map = &amp;phys_map_nimbus;</span></a>
-<a name="340"><span class="lineNum"> 340 </span> : : }</a>
-<a name="341"><span class="lineNum"> 341 </span> :<span class="lineCov"> 2 : }</span></a>
-<a name="342"><span class="lineNum"> 342 </span> : : </a>
-<a name="343"><span class="lineNum"> 343 </span> :<span class="lineCov"> 4 : prlog(PR_DEBUG, &quot;Assigning physical memory map table for %s\n&quot;, name);</span></a>
-<a name="344"><span class="lineNum"> 344 </span> : : </a>
-<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 4 : }</span></a>
-<a name="346"><span class="lineNum"> 346 </span> : : </a>
+<a name="316"><span class="lineNum"> 316 </span> : : /* 2 TB offset @ MMIO 0x0006000000000000ull */</a>
+<a name="317"><span class="lineNum"> 317 </span> : : { PHB4_64BIT_MMIO, 3, 0x0006020000000000ull, 0x0000004000000000ull },</a>
+<a name="318"><span class="lineNum"> 318 </span> : : { PHB4_64BIT_MMIO, 4, 0x0006024000000000ull, 0x0000004000000000ull },</a>
+<a name="319"><span class="lineNum"> 319 </span> : : { PHB4_64BIT_MMIO, 5, 0x0006028000000000ull, 0x0000004000000000ull },</a>
+<a name="320"><span class="lineNum"> 320 </span> : : { RESV, 2, 0x000602c000000000ull, 0x0000004000000000ull },</a>
+<a name="321"><span class="lineNum"> 321 </span> : : </a>
+<a name="322"><span class="lineNum"> 322 </span> : : /* 3 TB offset @ MMIO 0x0006000000000000ull */</a>
+<a name="323"><span class="lineNum"> 323 </span> : : { LPC_BUS, 0, 0x0006030000000000ull, 0x0000000100000000ull },</a>
+<a name="324"><span class="lineNum"> 324 </span> : : { FSP_MMIO, 0, 0x0006030100000000ull, 0x0000000100000000ull },</a>
+<a name="325"><span class="lineNum"> 325 </span> : : { RESV, 3, 0x0006030200000000ull, 0x0000000003000000ull },</a>
+<a name="326"><span class="lineNum"> 326 </span> : : { PSIHB_REG, 0, 0x0006030203000000ull, 0x0000000000100000ull },</a>
+<a name="327"><span class="lineNum"> 327 </span> : : { XIVE_IC, 0, 0x0006030203100000ull, 0x0000000000080000ull },</a>
+<a name="328"><span class="lineNum"> 328 </span> : : { XIVE_TM, 0, 0x0006030203180000ull, 0x0000000000040000ull },</a>
+<a name="329"><span class="lineNum"> 329 </span> : : { PSIHB_ESB, 0, 0x00060302031c0000ull, 0x0000000000010000ull },</a>
+<a name="330"><span class="lineNum"> 330 </span> : : { NX_RNG, 0, 0x00060302031d0000ull, 0x0000000000010000ull },</a>
+<a name="331"><span class="lineNum"> 331 </span> : : { RESV, 4, 0x00060302031e0000ull, 0x00000001fce20000ull },</a>
+<a name="332"><span class="lineNum"> 332 </span> : : { MC_OCMB_CFG, 0, 0x0006030400000000ull, 0x0000000080000000ull },</a>
+<a name="333"><span class="lineNum"> 333 </span> : : { MC_OCMB_CFG, 1, 0x0006030480000000ull, 0x0000000080000000ull },</a>
+<a name="334"><span class="lineNum"> 334 </span> : : { MC_OCMB_MMIO, 0, 0x0006030500000000ull, 0x0000000080000000ull },</a>
+<a name="335"><span class="lineNum"> 335 </span> : : { MC_OCMB_MMIO, 1, 0x0006030580000000ull, 0x0000000080000000ull },</a>
+<a name="336"><span class="lineNum"> 336 </span> : : { MC_OCMB_CFG, 2, 0x0006030600000000ull, 0x0000000080000000ull },</a>
+<a name="337"><span class="lineNum"> 337 </span> : : { MC_OCMB_CFG, 3, 0x0006030680000000ull, 0x0000000080000000ull },</a>
+<a name="338"><span class="lineNum"> 338 </span> : : { MC_OCMB_MMIO, 2, 0x0006030700000000ull, 0x0000000080000000ull },</a>
+<a name="339"><span class="lineNum"> 339 </span> : : { MC_OCMB_MMIO, 3, 0x0006030780000000ull, 0x0000000080000000ull },</a>
+<a name="340"><span class="lineNum"> 340 </span> : : { MC_OCMB_CFG, 4, 0x0006030800000000ull, 0x0000000080000000ull },</a>
+<a name="341"><span class="lineNum"> 341 </span> : : { MC_OCMB_CFG, 5, 0x0006030880000000ull, 0x0000000080000000ull },</a>
+<a name="342"><span class="lineNum"> 342 </span> : : { MC_OCMB_MMIO, 4, 0x0006030900000000ull, 0x0000000080000000ull },</a>
+<a name="343"><span class="lineNum"> 343 </span> : : { MC_OCMB_MMIO, 5, 0x0006030980000000ull, 0x0000000080000000ull },</a>
+<a name="344"><span class="lineNum"> 344 </span> : : { MC_OCMB_CFG, 6, 0x0006030a00000000ull, 0x0000000080000000ull },</a>
+<a name="345"><span class="lineNum"> 345 </span> : : { MC_OCMB_CFG, 7, 0x0006030a80000000ull, 0x0000000080000000ull },</a>
+<a name="346"><span class="lineNum"> 346 </span> : : { MC_OCMB_MMIO, 6, 0x0006030b00000000ull, 0x0000000080000000ull },</a>
+<a name="347"><span class="lineNum"> 347 </span> : : { MC_OCMB_MMIO, 7, 0x0006030b80000000ull, 0x0000000080000000ull },</a>
+<a name="348"><span class="lineNum"> 348 </span> : : { MC_OCMB_CFG, 8, 0x0006030c00000000ull, 0x0000000080000000ull },</a>
+<a name="349"><span class="lineNum"> 349 </span> : : { MC_OCMB_CFG, 9, 0x0006030c80000000ull, 0x0000000080000000ull },</a>
+<a name="350"><span class="lineNum"> 350 </span> : : { MC_OCMB_MMIO, 8, 0x0006030d00000000ull, 0x0000000080000000ull },</a>
+<a name="351"><span class="lineNum"> 351 </span> : : { MC_OCMB_MMIO, 9, 0x0006030d80000000ull, 0x0000000080000000ull },</a>
+<a name="352"><span class="lineNum"> 352 </span> : : { MC_OCMB_CFG, 10, 0x0006030e00000000ull, 0x0000000080000000ull },</a>
+<a name="353"><span class="lineNum"> 353 </span> : : { MC_OCMB_CFG, 11, 0x0006030e80000000ull, 0x0000000080000000ull },</a>
+<a name="354"><span class="lineNum"> 354 </span> : : { MC_OCMB_MMIO, 10, 0x0006030f00000000ull, 0x0000000080000000ull },</a>
+<a name="355"><span class="lineNum"> 355 </span> : : { MC_OCMB_MMIO, 11, 0x0006030f80000000ull, 0x0000000080000000ull },</a>
+<a name="356"><span class="lineNum"> 356 </span> : : { MC_OCMB_CFG, 12, 0x0006031000000000ull, 0x0000000080000000ull },</a>
+<a name="357"><span class="lineNum"> 357 </span> : : { MC_OCMB_CFG, 13, 0x0006031080000000ull, 0x0000000080000000ull },</a>
+<a name="358"><span class="lineNum"> 358 </span> : : { MC_OCMB_MMIO, 12, 0x0006031100000000ull, 0x0000000080000000ull },</a>
+<a name="359"><span class="lineNum"> 359 </span> : : { MC_OCMB_MMIO, 13, 0x0006031180000000ull, 0x0000000080000000ull },</a>
+<a name="360"><span class="lineNum"> 360 </span> : : { MC_OCMB_CFG, 14, 0x0006031200000000ull, 0x0000000080000000ull },</a>
+<a name="361"><span class="lineNum"> 361 </span> : : { MC_OCMB_CFG, 15, 0x0006031280000000ull, 0x0000000080000000ull },</a>
+<a name="362"><span class="lineNum"> 362 </span> : : { MC_OCMB_MMIO, 14, 0x0006031300000000ull, 0x0000000080000000ull },</a>
+<a name="363"><span class="lineNum"> 363 </span> : : { MC_OCMB_MMIO, 15, 0x0006031380000000ull, 0x0000000080000000ull },</a>
+<a name="364"><span class="lineNum"> 364 </span> : : { RESV, 5, 0x0006031400000000ull, 0x000000d800000000ull },</a>
+<a name="365"><span class="lineNum"> 365 </span> : : { NPU_REGS, 0, 0x000603ec00000000ull, 0x0000000001000000ull },</a>
+<a name="366"><span class="lineNum"> 366 </span> : : { NPU_REGS, 1, 0x000603ec01000000ull, 0x0000000001000000ull },</a>
+<a name="367"><span class="lineNum"> 367 </span> : : { NPU_REGS, 2, 0x000603ec02000000ull, 0x0000000001000000ull },</a>
+<a name="368"><span class="lineNum"> 368 </span> : : { NPU_NTL, 0, 0x000603ec03000000ull, 0x0000000000020000ull },</a>
+<a name="369"><span class="lineNum"> 369 </span> : : { NPU_NTL, 1, 0x000603ec03020000ull, 0x0000000000020000ull },</a>
+<a name="370"><span class="lineNum"> 370 </span> : : { NPU_NTL, 2, 0x000603ec03040000ull, 0x0000000000020000ull },</a>
+<a name="371"><span class="lineNum"> 371 </span> : : { NPU_NTL, 3, 0x000603ec03060000ull, 0x0000000000020000ull },</a>
+<a name="372"><span class="lineNum"> 372 </span> : : { NPU_GENID, 0, 0x000603ec03080000ull, 0x0000000000080000ull },</a>
+<a name="373"><span class="lineNum"> 373 </span> : : { NPU_NTL, 4, 0x000603ec03100000ull, 0x0000000000020000ull },</a>
+<a name="374"><span class="lineNum"> 374 </span> : : { NPU_NTL, 5, 0x000603ec03120000ull, 0x0000000000020000ull },</a>
+<a name="375"><span class="lineNum"> 375 </span> : : { NPU_NTL, 6, 0x000603ec03140000ull, 0x0000000000020000ull },</a>
+<a name="376"><span class="lineNum"> 376 </span> : : { NPU_NTL, 7, 0x000603ec03160000ull, 0x0000000000020000ull },</a>
+<a name="377"><span class="lineNum"> 377 </span> : : { NPU_GENID, 1, 0x000603ec03180000ull, 0x0000000000080000ull },</a>
+<a name="378"><span class="lineNum"> 378 </span> : : { NPU_NTL, 8, 0x000603ec03200000ull, 0x0000000000020000ull },</a>
+<a name="379"><span class="lineNum"> 379 </span> : : { NPU_NTL, 9, 0x000603ec03220000ull, 0x0000000000020000ull },</a>
+<a name="380"><span class="lineNum"> 380 </span> : : { NPU_NTL, 10, 0x000603ec03240000ull, 0x0000000000020000ull },</a>
+<a name="381"><span class="lineNum"> 381 </span> : : { NPU_NTL, 11, 0x000603ec03260000ull, 0x0000000000020000ull },</a>
+<a name="382"><span class="lineNum"> 382 </span> : : { NPU_GENID, 2, 0x000603ec03280000ull, 0x0000000000080000ull },</a>
+<a name="383"><span class="lineNum"> 383 </span> : : { RESV, 6, 0x000603ec03300000ull, 0x0000000ffcd00000ull },</a>
+<a name="384"><span class="lineNum"> 384 </span> : : { XSCOM, 0, 0x000603fc00000000ull, 0x0000000400000000ull },</a>
+<a name="385"><span class="lineNum"> 385 </span> : : </a>
+<a name="386"><span class="lineNum"> 386 </span> : : /* NULL entry at end */</a>
+<a name="387"><span class="lineNum"> 387 </span> : : { NULL_MAP, 0, 0, 0 },</a>
+<a name="388"><span class="lineNum"> 388 </span> : : };</a>
+<a name="389"><span class="lineNum"> 389 </span> : : </a>
+<a name="390"><span class="lineNum"> 390 </span> : : static const struct phys_map_info phys_map_axone = {</a>
+<a name="391"><span class="lineNum"> 391 </span> : : .chip_select_shift = 42,</a>
+<a name="392"><span class="lineNum"> 392 </span> : : .table = phys_map_table_axone,</a>
+<a name="393"><span class="lineNum"> 393 </span> : : };</a>
+<a name="394"><span class="lineNum"> 394 </span> : : </a>
+<a name="395"><span class="lineNum"> 395 </span> : : static const struct phys_map_info phys_map_p10 = {</a>
+<a name="396"><span class="lineNum"> 396 </span> : : .chip_select_shift = 44,</a>
+<a name="397"><span class="lineNum"> 397 </span> : : .table = phys_map_table_p10,</a>
+<a name="398"><span class="lineNum"> 398 </span> : : };</a>
+<a name="399"><span class="lineNum"> 399 </span> : : </a>
+<a name="400"><span class="lineNum"> 400 </span> :<span class="lineCov"> 14240 : static inline bool phys_map_entry_null(const struct phys_map_entry *e)</span></a>
+<a name="401"><span class="lineNum"> 401 </span> : : {</a>
+<a name="402"><span class="lineNum"> 402 </span> :<span class="lineCov"> 14240 : if (e-&gt;type == NULL_MAP)</span></a>
+<a name="403"><span class="lineNum"> 403 </span> :<span class="lineCov"> 9 : return true;</span></a>
+<a name="404"><span class="lineNum"> 404 </span> :<span class="lineCov"> 14231 : return false;</span></a>
+<a name="405"><span class="lineNum"> 405 </span> : : }</a>
+<a name="406"><span class="lineNum"> 406 </span> : : </a>
+<a name="407"><span class="lineNum"> 407 </span> : : </a>
+<a name="408"><span class="lineNum"> 408 </span> : : /* This crashes skiboot on error as any bad calls here are almost</a>
+<a name="409"><span class="lineNum"> 409 </span> : : * certainly a developer error</a>
+<a name="410"><span class="lineNum"> 410 </span> : : */</a>
+<a name="411"><span class="lineNum"> 411 </span> :<span class="lineCov"> 280 : void __phys_map_get(uint64_t topology_idx, uint64_t gcid, enum phys_map_type type,</span></a>
+<a name="412"><span class="lineNum"> 412 </span> : : int index, uint64_t *addr, uint64_t *size) {</a>
+<a name="413"><span class="lineNum"> 413 </span> : : const struct phys_map_entry *e;</a>
+<a name="414"><span class="lineNum"> 414 </span> : : uint64_t a;</a>
+<a name="415"><span class="lineNum"> 415 </span> : : </a>
+<a name="416"><span class="lineNum"> 416 </span> :<span class="lineCov"> 280 : if (!phys_map)</span></a>
+<a name="417"><span class="lineNum"> 417 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="418"><span class="lineNum"> 418 </span> : : </a>
+<a name="419"><span class="lineNum"> 419 </span> : : /* Find entry in table */</a>
+<a name="420"><span class="lineNum"> 420 </span> :<span class="lineCov"> 13391 : for (e = phys_map-&gt;table; ; e++) {</span></a>
+<a name="421"><span class="lineNum"> 421 </span> : : </a>
+<a name="422"><span class="lineNum"> 422 </span> : : /* End of table */</a>
+<a name="423"><span class="lineNum"> 423 </span> :<span class="lineCov"> 13391 : if (phys_map_entry_null(e))</span></a>
+<a name="424"><span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="425"><span class="lineNum"> 425 </span> : : </a>
+<a name="426"><span class="lineNum"> 426 </span> : : /* Is this our entry? */</a>
+<a name="427"><span class="lineNum"> 427 </span> :<span class="lineCov"> 13391 : if (e-&gt;type != type)</span></a>
+<a name="428"><span class="lineNum"> 428 </span> :<span class="lineCov"> 12170 : continue;</span></a>
+<a name="429"><span class="lineNum"> 429 </span> :<span class="lineCov"> 1221 : if (e-&gt;index != index)</span></a>
+<a name="430"><span class="lineNum"> 430 </span> :<span class="lineCov"> 941 : continue;</span></a>
+<a name="431"><span class="lineNum"> 431 </span> : : </a>
+<a name="432"><span class="lineNum"> 432 </span> : : /* Found entry! */</a>
+<a name="433"><span class="lineNum"> 433 </span> :<span class="lineCov"> 280 : break;</span></a>
+<a name="434"><span class="lineNum"> 434 </span> : : }</a>
+<a name="435"><span class="lineNum"> 435 </span> :<span class="lineCov"> 280 : a = e-&gt;addr;</span></a>
+<a name="436"><span class="lineNum"> 436 </span> :<span class="lineCov"> 280 : a += topology_idx &lt;&lt; (phys_map-&gt;chip_select_shift);</span></a>
+<a name="437"><span class="lineNum"> 437 </span> : : </a>
+<a name="438"><span class="lineNum"> 438 </span> :<span class="lineCov"> 280 : if (addr)</span></a>
+<a name="439"><span class="lineNum"> 439 </span> :<span class="lineCov"> 280 : *addr = a;</span></a>
+<a name="440"><span class="lineNum"> 440 </span> :<span class="lineCov"> 280 : if (size)</span></a>
+<a name="441"><span class="lineNum"> 441 </span> :<span class="lineCov"> 280 : *size = e-&gt;size;</span></a>
+<a name="442"><span class="lineNum"> 442 </span> : : </a>
+<a name="443"><span class="lineNum"> 443 </span> :<span class="lineCov"> 280 : prlog(PR_TRACE, &quot;Assigning BAR [%&quot;PRIx64&quot;] type:%02i index:%x &quot;</span></a>
+<a name="444"><span class="lineNum"> 444 </span> : : &quot;0x%016&quot;PRIx64&quot; for 0x%016&quot;PRIx64&quot;\n&quot;,</a>
+<a name="445"><span class="lineNum"> 445 </span> : : gcid, type, index, a, e-&gt;size);</a>
+<a name="446"><span class="lineNum"> 446 </span> : : </a>
+<a name="447"><span class="lineNum"> 447 </span> :<span class="lineCov"> 280 : return;</span></a>
+<a name="448"><span class="lineNum"> 448 </span> : : </a>
+<a name="449"><span class="lineNum"> 449 </span> :<span class="lineNoCov"> 0 : error:</span></a>
+<a name="450"><span class="lineNum"> 450 </span> : : /* Something has gone really wrong */</a>
+<a name="451"><span class="lineNum"> 451 </span> :<span class="lineNoCov"> 0 : prlog(PR_EMERG, &quot;ERROR: Failed to lookup BAR type:%i index:%i\n&quot;,</span></a>
+<a name="452"><span class="lineNum"> 452 </span> : : type, index);</a>
+<a name="453"><span class="lineNum"> 453 </span> :<span class="lineNoCov"> 0 : assert(0);</span></a>
+<a name="454"><span class="lineNum"> 454 </span> : : }</a>
+<a name="455"><span class="lineNum"> 455 </span> : : </a>
+<a name="456"><span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : void phys_map_get(uint64_t gcid, enum phys_map_type type,</span></a>
+<a name="457"><span class="lineNum"> 457 </span> : : int index, uint64_t *addr, uint64_t *size)</a>
+<a name="458"><span class="lineNum"> 458 </span> : : {</a>
+<a name="459"><span class="lineNum"> 459 </span> : : struct proc_chip *chip;</a>
+<a name="460"><span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : uint64_t topology_idx = gcid;</span></a>
+<a name="461"><span class="lineNum"> 461 </span> : : </a>
+<a name="462"><span class="lineNum"> 462 </span> :<span class="lineNoCov"> 0 : if (proc_gen &gt;= proc_gen_p10) {</span></a>
+<a name="463"><span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : chip = get_chip(gcid);</span></a>
+<a name="464"><span class="lineNum"> 464 </span> :<span class="lineNoCov"> 0 : topology_idx = chip-&gt;primary_topology;</span></a>
+<a name="465"><span class="lineNum"> 465 </span> : : }</a>
+<a name="466"><span class="lineNum"> 466 </span> : : </a>
+<a name="467"><span class="lineNum"> 467 </span> :<span class="lineNoCov"> 0 : return __phys_map_get(topology_idx, gcid, type, index, addr, size);</span></a>
+<a name="468"><span class="lineNum"> 468 </span> : : }</a>
+<a name="469"><span class="lineNum"> 469 </span> : : </a>
+<a name="470"><span class="lineNum"> 470 </span> :<span class="lineCov"> 3 : void phys_map_init(unsigned long pvr)</span></a>
+<a name="471"><span class="lineNum"> 471 </span> : : {</a>
+<a name="472"><span class="lineNum"> 472 </span> :<span class="lineCov"> 3 : const char *name = &quot;unused&quot;;</span></a>
+<a name="473"><span class="lineNum"> 473 </span> : : </a>
+<a name="474"><span class="lineNum"> 474 </span> :<span class="lineCov"> 3 : phys_map = NULL;</span></a>
+<a name="475"><span class="lineNum"> 475 </span> : : </a>
+<a name="476"><span class="lineNum"> 476 </span> :<span class="lineCov"> 3 : if (proc_gen == proc_gen_p9) {</span></a>
+<a name="477"><span class="lineNum"> 477 </span> :<span class="lineCov"> 2 : switch(PVR_TYPE(pvr)) {</span></a>
+<a name="478"><span class="lineNum"> 478 </span> :<span class="lineCov"> 1 : case PVR_TYPE_P9P:</span></a>
+<a name="479"><span class="lineNum"> 479 </span> :<span class="lineCov"> 1 : name = &quot;axone&quot;;</span></a>
+<a name="480"><span class="lineNum"> 480 </span> :<span class="lineCov"> 1 : phys_map = &amp;phys_map_axone;</span></a>
+<a name="481"><span class="lineNum"> 481 </span> :<span class="lineCov"> 1 : break;</span></a>
+<a name="482"><span class="lineNum"> 482 </span> :<span class="lineCov"> 1 : default:</span></a>
+<a name="483"><span class="lineNum"> 483 </span> :<span class="lineCov"> 1 : name = &quot;nimbus&quot;;</span></a>
+<a name="484"><span class="lineNum"> 484 </span> :<span class="lineCov"> 1 : phys_map = &amp;phys_map_nimbus;</span></a>
+<a name="485"><span class="lineNum"> 485 </span> : : }</a>
+<a name="486"><span class="lineNum"> 486 </span> :<span class="lineCov"> 1 : } else if (proc_gen == proc_gen_p10) {</span></a>
+<a name="487"><span class="lineNum"> 487 </span> :<span class="lineCov"> 1 : name = &quot;p10&quot;;</span></a>
+<a name="488"><span class="lineNum"> 488 </span> :<span class="lineCov"> 1 : phys_map = &amp;phys_map_p10;</span></a>
+<a name="489"><span class="lineNum"> 489 </span> : : }</a>
+<a name="490"><span class="lineNum"> 490 </span> : : </a>
+<a name="491"><span class="lineNum"> 491 </span> :<span class="lineCov"> 3 : prlog(PR_DEBUG, &quot;Assigning physical memory map table for %s\n&quot;, name);</span></a>
+<a name="492"><span class="lineNum"> 492 </span> : : </a>
+<a name="493"><span class="lineNum"> 493 </span> :<span class="lineCov"> 3 : }</span></a>
</pre>
</td>
</tr>
diff --git a/coverage-report/hw/test/index-sort-b.html b/coverage-report/hw/test/index-sort-b.html
index a452b57..b247a71 100644
--- a/coverage-report/hw/test/index-sort-b.html
+++ b/coverage-report/hw/test/index-sort-b.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">117</td>
- <td class="headerCovTableEntry">153</td>
- <td class="headerCovTableEntryMed">76.5 %</td>
+ <td class="headerCovTableEntry">123</td>
+ <td class="headerCovTableEntry">164</td>
+ <td class="headerCovTableEntryMed">75.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">7</td>
- <td class="headerCovTableEntryMed">85.7 %</td>
+ <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntryMed">75.0 %</td>
</tr>
<tr>
<td></td>
@@ -82,18 +82,6 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="phys-map-test.c.gcov.html">phys-map-test.c</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=61 height=10 alt="61.3%"><img src="../../snow.png" width=39 height=10 alt="61.3%"></td></tr></table>
- </td>
- <td class="coverPerLo">61.3&nbsp;%</td>
- <td class="coverNumLo">57 / 93</td>
- <td class="coverPerMed">80.0&nbsp;%</td>
- <td class="coverNumMed">4 / 5</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
<td class="coverFile"><a href="run-port80h.c.gcov.html">run-port80h.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
@@ -105,6 +93,18 @@
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
+ <tr>
+ <td class="coverFile"><a href="phys-map-test.c.gcov.html">phys-map-test.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=61 height=10 alt="60.6%"><img src="../../snow.png" width=39 height=10 alt="60.6%"></td></tr></table>
+ </td>
+ <td class="coverPerLo">60.6&nbsp;%</td>
+ <td class="coverNumLo">63 / 104</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">4 / 6</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
</table>
</center>
<br>
diff --git a/coverage-report/hw/test/index-sort-f.html b/coverage-report/hw/test/index-sort-f.html
index 88e8e1d..d71fde3 100644
--- a/coverage-report/hw/test/index-sort-f.html
+++ b/coverage-report/hw/test/index-sort-f.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">117</td>
- <td class="headerCovTableEntry">153</td>
- <td class="headerCovTableEntryMed">76.5 %</td>
+ <td class="headerCovTableEntry">123</td>
+ <td class="headerCovTableEntry">164</td>
+ <td class="headerCovTableEntryMed">75.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">7</td>
- <td class="headerCovTableEntryMed">85.7 %</td>
+ <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntryMed">75.0 %</td>
</tr>
<tr>
<td></td>
@@ -84,12 +84,12 @@
<tr>
<td class="coverFile"><a href="phys-map-test.c.gcov.html">phys-map-test.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=61 height=10 alt="61.3%"><img src="../../snow.png" width=39 height=10 alt="61.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=61 height=10 alt="60.6%"><img src="../../snow.png" width=39 height=10 alt="60.6%"></td></tr></table>
</td>
- <td class="coverPerLo">61.3&nbsp;%</td>
- <td class="coverNumLo">57 / 93</td>
- <td class="coverPerMed">80.0&nbsp;%</td>
- <td class="coverNumMed">4 / 5</td>
+ <td class="coverPerLo">60.6&nbsp;%</td>
+ <td class="coverNumLo">63 / 104</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">4 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/hw/test/index-sort-l.html b/coverage-report/hw/test/index-sort-l.html
index 553bdaa..1d16c90 100644
--- a/coverage-report/hw/test/index-sort-l.html
+++ b/coverage-report/hw/test/index-sort-l.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">117</td>
- <td class="headerCovTableEntry">153</td>
- <td class="headerCovTableEntryMed">76.5 %</td>
+ <td class="headerCovTableEntry">123</td>
+ <td class="headerCovTableEntry">164</td>
+ <td class="headerCovTableEntryMed">75.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">7</td>
- <td class="headerCovTableEntryMed">85.7 %</td>
+ <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntryMed">75.0 %</td>
</tr>
<tr>
<td></td>
@@ -84,12 +84,12 @@
<tr>
<td class="coverFile"><a href="phys-map-test.c.gcov.html">phys-map-test.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=61 height=10 alt="61.3%"><img src="../../snow.png" width=39 height=10 alt="61.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=61 height=10 alt="60.6%"><img src="../../snow.png" width=39 height=10 alt="60.6%"></td></tr></table>
</td>
- <td class="coverPerLo">61.3&nbsp;%</td>
- <td class="coverNumLo">57 / 93</td>
- <td class="coverPerMed">80.0&nbsp;%</td>
- <td class="coverNumMed">4 / 5</td>
+ <td class="coverPerLo">60.6&nbsp;%</td>
+ <td class="coverNumLo">63 / 104</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">4 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/hw/test/index.html b/coverage-report/hw/test/index.html
index a211c2b..4940f97 100644
--- a/coverage-report/hw/test/index.html
+++ b/coverage-report/hw/test/index.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">117</td>
- <td class="headerCovTableEntry">153</td>
- <td class="headerCovTableEntryMed">76.5 %</td>
+ <td class="headerCovTableEntry">123</td>
+ <td class="headerCovTableEntry">164</td>
+ <td class="headerCovTableEntryMed">75.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">7</td>
- <td class="headerCovTableEntryMed">85.7 %</td>
+ <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntryMed">75.0 %</td>
</tr>
<tr>
<td></td>
@@ -84,12 +84,12 @@
<tr>
<td class="coverFile"><a href="phys-map-test.c.gcov.html">phys-map-test.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=61 height=10 alt="61.3%"><img src="../../snow.png" width=39 height=10 alt="61.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=61 height=10 alt="60.6%"><img src="../../snow.png" width=39 height=10 alt="60.6%"></td></tr></table>
</td>
- <td class="coverPerLo">61.3&nbsp;%</td>
- <td class="coverNumLo">57 / 93</td>
- <td class="coverPerMed">80.0&nbsp;%</td>
- <td class="coverNumMed">4 / 5</td>
+ <td class="coverPerLo">60.6&nbsp;%</td>
+ <td class="coverNumLo">63 / 104</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">4 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/hw/test/phys-map-test.c.func-sort-c.html b/coverage-report/hw/test/phys-map-test.c.func-sort-c.html
index 1deddf6..7b8d814 100644
--- a/coverage-report/hw/test/phys-map-test.c.func-sort-c.html
+++ b/coverage-report/hw/test/phys-map-test.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">57</td>
- <td class="headerCovTableEntry">93</td>
- <td class="headerCovTableEntryLo">61.3 %</td>
+ <td class="headerCovTableEntry">63</td>
+ <td class="headerCovTableEntry">104</td>
+ <td class="headerCovTableEntryLo">60.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">5</td>
- <td class="headerCovTableEntryMed">80.0 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntryLo">66.7 %</td>
</tr>
<tr>
<td></td>
@@ -69,24 +69,28 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
+ <td class="coverFn"><a href="phys-map-test.c.gcov.html#80">get_chip</a></td>
+ <td class="coverFnLo">0</td>
+ </tr>
+ <tr>
<td class="coverFn"><a href="phys-map-test.c.gcov.html#11">print_entry</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="phys-map-test.c.gcov.html#170">main</a></td>
+ <td class="coverFn"><a href="phys-map-test.c.gcov.html#176">main</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="phys-map-test.c.gcov.html#80">check_map_call</a></td>
- <td class="coverFnHi">2</td>
+ <td class="coverFn"><a href="phys-map-test.c.gcov.html#85">check_map_call</a></td>
+ <td class="coverFnHi">3</td>
</tr>
<tr>
<td class="coverFn"><a href="phys-map-test.c.gcov.html#18">check_table_directly</a></td>
- <td class="coverFnHi">2</td>
+ <td class="coverFnHi">3</td>
</tr>
<tr>
<td class="coverFn"><a href="phys-map-test.c.gcov.html#65">map_call_entry_null</a></td>
- <td class="coverFnHi">9016</td>
+ <td class="coverFnHi">13671</td>
</tr>
</table>
<br>
diff --git a/coverage-report/hw/test/phys-map-test.c.func.html b/coverage-report/hw/test/phys-map-test.c.func.html
index fb75bce..64f10f4 100644
--- a/coverage-report/hw/test/phys-map-test.c.func.html
+++ b/coverage-report/hw/test/phys-map-test.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">57</td>
- <td class="headerCovTableEntry">93</td>
- <td class="headerCovTableEntryLo">61.3 %</td>
+ <td class="headerCovTableEntry">63</td>
+ <td class="headerCovTableEntry">104</td>
+ <td class="headerCovTableEntryLo">60.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">5</td>
- <td class="headerCovTableEntryMed">80.0 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntryLo">66.7 %</td>
</tr>
<tr>
<td></td>
@@ -69,20 +69,24 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="phys-map-test.c.func-sort-c.html"><img src="../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="phys-map-test.c.gcov.html#80">check_map_call</a></td>
- <td class="coverFnHi">2</td>
+ <td class="coverFn"><a href="phys-map-test.c.gcov.html#85">check_map_call</a></td>
+ <td class="coverFnHi">3</td>
</tr>
<tr>
<td class="coverFn"><a href="phys-map-test.c.gcov.html#18">check_table_directly</a></td>
- <td class="coverFnHi">2</td>
+ <td class="coverFnHi">3</td>
</tr>
<tr>
- <td class="coverFn"><a href="phys-map-test.c.gcov.html#170">main</a></td>
+ <td class="coverFn"><a href="phys-map-test.c.gcov.html#80">get_chip</a></td>
+ <td class="coverFnLo">0</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="phys-map-test.c.gcov.html#176">main</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
<td class="coverFn"><a href="phys-map-test.c.gcov.html#65">map_call_entry_null</a></td>
- <td class="coverFnHi">9016</td>
+ <td class="coverFnHi">13671</td>
</tr>
<tr>
<td class="coverFn"><a href="phys-map-test.c.gcov.html#11">print_entry</a></td>
diff --git a/coverage-report/hw/test/phys-map-test.c.gcov.html b/coverage-report/hw/test/phys-map-test.c.gcov.html
index eba9148..add0239 100644
--- a/coverage-report/hw/test/phys-map-test.c.gcov.html
+++ b/coverage-report/hw/test/phys-map-test.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">57</td>
- <td class="headerCovTableEntry">93</td>
- <td class="headerCovTableEntryLo">61.3 %</td>
+ <td class="headerCovTableEntry">63</td>
+ <td class="headerCovTableEntry">104</td>
+ <td class="headerCovTableEntryLo">60.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">5</td>
- <td class="headerCovTableEntryMed">80.0 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntryLo">66.7 %</td>
</tr>
<tr>
<td></td>
@@ -88,35 +88,35 @@
<a name="17"><span class="lineNum"> 17 </span> :<span class="lineNoCov"> 0 : }</span></a>
<a name="18"><span class="lineNum"> 18 </span> : : </a>
<a name="19"><span class="lineNum"> 19 </span> : : /* Check table directly for overlaps */</a>
-<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 2 : static void check_table_directly(void)</span></a>
+<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 3 : static void check_table_directly(void)</span></a>
<a name="21"><span class="lineNum"> 21 </span> : : {</a>
<a name="22"><span class="lineNum"> 22 </span> : : const struct phys_map_entry *e, *prev;</a>
<a name="23"><span class="lineNum"> 23 </span> : : uint64_t start, end, pstart, pend;</a>
<a name="24"><span class="lineNum"> 24 </span> : : bool passed;</a>
<a name="25"><span class="lineNum"> 25 </span> : : </a>
<a name="26"><span class="lineNum"> 26 </span> : : /* Loop over table entries ... */</a>
-<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 187 : for (e = phys_map-&gt;table; !phys_map_entry_null(e); e++) {</span></a>
+<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 283 : for (e = phys_map-&gt;table; !phys_map_entry_null(e); e++) {</span></a>
<a name="28"><span class="lineNum"> 28 </span> : : </a>
-<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 185 : start = e-&gt;addr;</span></a>
-<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 185 : end = e-&gt;addr + e-&gt;size;</span></a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 280 : start = e-&gt;addr;</span></a>
+<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 280 : end = e-&gt;addr + e-&gt;size;</span></a>
<a name="31"><span class="lineNum"> 31 </span> : : /* ... see if they overlap with previous entries */</a>
-<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 8831 : for (prev = phys_map-&gt;table; prev != e; prev++) {</span></a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 8646 : passed = true;</span></a>
+<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 13391 : for (prev = phys_map-&gt;table; prev != e; prev++) {</span></a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 13111 : passed = true;</span></a>
<a name="34"><span class="lineNum"> 34 </span> : : /* Check for overlaping regions */</a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 8646 : pstart = prev-&gt;addr;</span></a>
-<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 8646 : pend = prev-&gt;addr + prev-&gt;size;</span></a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 8646 : if ((start &gt; pstart) &amp;&amp; (start &lt; pend))</span></a>
+<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 13111 : pstart = prev-&gt;addr;</span></a>
+<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 13111 : pend = prev-&gt;addr + prev-&gt;size;</span></a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 13111 : if ((start &gt; pstart) &amp;&amp; (start &lt; pend))</span></a>
<a name="38"><span class="lineNum"> 38 </span> :<span class="lineNoCov"> 0 : passed = false;</span></a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 8646 : if ((end &gt; pstart) &amp;&amp; (end &lt; pend))</span></a>
+<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 13111 : if ((end &gt; pstart) &amp;&amp; (end &lt; pend))</span></a>
<a name="40"><span class="lineNum"> 40 </span> :<span class="lineNoCov"> 0 : passed = false;</span></a>
<a name="41"><span class="lineNum"> 41 </span> : : </a>
<a name="42"><span class="lineNum"> 42 </span> : : /* Check for duplicate entries */</a>
-<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 8646 : if ((e-&gt;type == prev-&gt;type) &amp;&amp;</span></a>
-<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 565 : (e-&gt;index == prev-&gt;index))</span></a>
+<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 13111 : if ((e-&gt;type == prev-&gt;type) &amp;&amp;</span></a>
+<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 941 : (e-&gt;index == prev-&gt;index))</span></a>
<a name="45"><span class="lineNum"> 45 </span> :<span class="lineNoCov"> 0 : passed = false;</span></a>
<a name="46"><span class="lineNum"> 46 </span> : : </a>
-<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 8646 : if (passed)</span></a>
-<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 8646 : continue;</span></a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 13111 : if (passed)</span></a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 13111 : continue;</span></a>
<a name="49"><span class="lineNum"> 49 </span> : : </a>
<a name="50"><span class="lineNum"> 50 </span> :<span class="lineNoCov"> 0 : printf(&quot;Phys map direct test FAILED: Entry overlaps\n&quot;);</span></a>
<a name="51"><span class="lineNum"> 51 </span> :<span class="lineNoCov"> 0 : printf(&quot;First: &quot;);</span></a>
@@ -128,19 +128,19 @@
<a name="57"><span class="lineNum"> 57 </span> :<span class="lineNoCov"> 0 : assert(0);</span></a>
<a name="58"><span class="lineNum"> 58 </span> : : }</a>
<a name="59"><span class="lineNum"> 59 </span> : : }</a>
-<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 2 : }</span></a>
+<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 3 : }</span></a>
<a name="61"><span class="lineNum"> 61 </span> : : </a>
<a name="62"><span class="lineNum"> 62 </span> : : struct map_call_entry {</a>
<a name="63"><span class="lineNum"> 63 </span> : : uint64_t start;</a>
<a name="64"><span class="lineNum"> 64 </span> : : uint64_t end;</a>
<a name="65"><span class="lineNum"> 65 </span> : : };</a>
<a name="66"><span class="lineNum"> 66 </span> : : </a>
-<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 9016 : static inline bool map_call_entry_null(const struct map_call_entry *t)</span></a>
+<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 13671 : static inline bool map_call_entry_null(const struct map_call_entry *t)</span></a>
<a name="68"><span class="lineNum"> 68 </span> : : {</a>
-<a name="69"><span class="lineNum"> 69 </span> :<span class="lineCov"> 9016 : if ((t-&gt;start == 0) &amp;&amp;</span></a>
-<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 187 : (t-&gt;end == 0))</span></a>
-<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 187 : return true;</span></a>
-<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 8829 : return false;</span></a>
+<a name="69"><span class="lineNum"> 69 </span> :<span class="lineCov"> 13671 : if ((t-&gt;start == 0) &amp;&amp;</span></a>
+<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 283 : (t-&gt;end == 0))</span></a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 283 : return true;</span></a>
+<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 13388 : return false;</span></a>
<a name="73"><span class="lineNum"> 73 </span> : : }</a>
<a name="74"><span class="lineNum"> 74 </span> : : </a>
<a name="75"><span class="lineNum"> 75 </span> : : /* Check calls to map to see if they overlap.</a>
@@ -150,111 +150,128 @@
<a name="79"><span class="lineNum"> 79 </span> : : /* Pick a chip ID, any ID. */</a>
<a name="80"><span class="lineNum"> 80 </span> : : #define FAKE_CHIP_ID 8</a>
<a name="81"><span class="lineNum"> 81 </span> : : </a>
-<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 2 : static void check_map_call(void)</span></a>
+<a name="82"><span class="lineNum"> 82 </span> :<span class="lineNoCov"> 0 : struct proc_chip *get_chip(uint32_t chip_id __unused)</span></a>
<a name="83"><span class="lineNum"> 83 </span> : : {</a>
-<a name="84"><span class="lineNum"> 84 </span> : : uint64_t start, size, end;</a>
-<a name="85"><span class="lineNum"> 85 </span> : : const struct phys_map_entry *e;</a>
-<a name="86"><span class="lineNum"> 86 </span> : : struct map_call_entry *tbl, *t, *tnext;</a>
-<a name="87"><span class="lineNum"> 87 </span> :<span class="lineCov"> 2 : int tbl_size = 0;</span></a>
-<a name="88"><span class="lineNum"> 88 </span> : : bool passed;</a>
-<a name="89"><span class="lineNum"> 89 </span> : : </a>
-<a name="90"><span class="lineNum"> 90 </span> :<span class="lineCov"> 187 : for (e = phys_map-&gt;table; !phys_map_entry_null(e); e++)</span></a>
-<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 185 : tbl_size++;</span></a>
-<a name="92"><span class="lineNum"> 92 </span> : : </a>
-<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 2 : tbl_size++; /* allow for null entry at end */</span></a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 2 : tbl_size *= sizeof(struct map_call_entry);</span></a>
-<a name="95"><span class="lineNum"> 95 </span> :<span class="lineCov"> 2 : tbl = malloc(tbl_size);</span></a>
-<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 2 : assert(tbl != NULL);</span></a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 2 : memset(tbl, 0, tbl_size);</span></a>
-<a name="98"><span class="lineNum"> 98 </span> : : </a>
-<a name="99"><span class="lineNum"> 99 </span> : : /* Loop over table entries ... */</a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 187 : for (e = phys_map-&gt;table; !phys_map_entry_null(e); e++) {</span></a>
-<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 185 : phys_map_get(FAKE_CHIP_ID, e-&gt;type, e-&gt;index, &amp;start, &amp;size);</span></a>
-<a name="102"><span class="lineNum"> 102 </span> : : </a>
-<a name="103"><span class="lineNum"> 103 </span> : : /* Check for alignment */</a>
-<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 185 : if ((e-&gt;type != SYSTEM_MEM) &amp;&amp; (e-&gt;type != RESV)) {</span></a>
-<a name="105"><span class="lineNum"> 105 </span> : : /* Size is power of 2? */</a>
-<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 169 : assert(__builtin_popcountl(size) == 1);</span></a>
-<a name="107"><span class="lineNum"> 107 </span> : : /* Start is aligned to size? */</a>
-<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 169 : assert((start % size) == 0);</span></a>
-<a name="109"><span class="lineNum"> 109 </span> : : }</a>
-<a name="110"><span class="lineNum"> 110 </span> : : </a>
-<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 185 : end = start + size;</span></a>
-<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 8831 : for (t = tbl; !map_call_entry_null(t); t++) {</span></a>
-<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 8646 : passed = true;</span></a>
-<a name="114"><span class="lineNum"> 114 </span> : : </a>
-<a name="115"><span class="lineNum"> 115 </span> : : /* Check for overlaping regions */</a>
-<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 8646 : if ((start &gt; t-&gt;start) &amp;&amp; (start &lt; t-&gt;end))</span></a>
-<a name="117"><span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : passed = false;</span></a>
-<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 8646 : if ((end &gt; t-&gt;start) &amp;&amp; (end &lt; t-&gt;end))</span></a>
-<a name="119"><span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : passed = false;</span></a>
-<a name="120"><span class="lineNum"> 120 </span> : : </a>
-<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 8646 : if (passed)</span></a>
-<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 8646 : continue;</span></a>
-<a name="123"><span class="lineNum"> 123 </span> : : </a>
-<a name="124"><span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : printf(&quot;Phys map call test FAILED: Entry overlaps\n&quot;);</span></a>
-<a name="125"><span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : printf(&quot;First: addr:%016lx size:%016lx\n&quot;,</span></a>
-<a name="126"><span class="lineNum"> 126 </span> :<span class="lineNoCov"> 0 : t-&gt;start, t-&gt;end - t-&gt;start);</span></a>
-<a name="127"><span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : printf(&quot;Second: addr:%016lx size:%016lx\n &quot;,</span></a>
-<a name="128"><span class="lineNum"> 128 </span> : : start, size);</a>
-<a name="129"><span class="lineNum"> 129 </span> :<span class="lineNoCov"> 0 : print_entry(e);</span></a>
-<a name="130"><span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : printf(&quot;\n&quot;);</span></a>
-<a name="131"><span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : assert(0);</span></a>
-<a name="132"><span class="lineNum"> 132 </span> : : }</a>
-<a name="133"><span class="lineNum"> 133 </span> : : /* Insert entry at end of table */</a>
-<a name="134"><span class="lineNum"> 134 </span> :<span class="lineCov"> 185 : t-&gt;start = start;</span></a>
-<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 185 : t-&gt;end = end;</span></a>
-<a name="136"><span class="lineNum"> 136 </span> : : }</a>
-<a name="137"><span class="lineNum"> 137 </span> : : </a>
-<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 185 : for (t = tbl; !map_call_entry_null(t + 1); t++) {</span></a>
-<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 183 : tnext = t + 1;</span></a>
-<a name="140"><span class="lineNum"> 140 </span> : : /* Make sure the table is sorted */</a>
-<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 183 : if (t-&gt;start &gt; tnext-&gt;start) {</span></a>
-<a name="142"><span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : printf(&quot;Phys map test FAILED: Entry not sorted\n&quot;);</span></a>
-<a name="143"><span class="lineNum"> 143 </span> :<span class="lineNoCov"> 0 : printf(&quot;First: addr:%016lx size:%016lx\n&quot;,</span></a>
-<a name="144"><span class="lineNum"> 144 </span> :<span class="lineNoCov"> 0 : t-&gt;start, t-&gt;end - t-&gt;start);</span></a>
-<a name="145"><span class="lineNum"> 145 </span> :<span class="lineNoCov"> 0 : printf(&quot;Second: addr:%016lx size:%016lx\n&quot;,</span></a>
-<a name="146"><span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : tnext-&gt;start, tnext-&gt;end - tnext-&gt;start);</span></a>
-<a name="147"><span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : assert(0);</span></a>
-<a name="148"><span class="lineNum"> 148 </span> : : }</a>
-<a name="149"><span class="lineNum"> 149 </span> : : </a>
-<a name="150"><span class="lineNum"> 150 </span> : : /* Look for holes in the table in MMIO region */</a>
-<a name="151"><span class="lineNum"> 151 </span> : : /* We assume over 1PB is MMIO. */</a>
-<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 183 : if ((t-&gt;end != tnext-&gt;start) &amp;&amp;</span></a>
-<a name="153"><span class="lineNum"> 153 </span> :<span class="lineCov"> 6 : (t-&gt;start &gt; 0x0004000000000000)) {</span></a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : printf(&quot;Phys map test FAILED: Hole in map\n&quot;);</span></a>
-<a name="155"><span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : printf(&quot;First: addr:%016lx size:%016lx\n&quot;,</span></a>
-<a name="156"><span class="lineNum"> 156 </span> :<span class="lineNoCov"> 0 : t-&gt;start, t-&gt;end - t-&gt;start);</span></a>
-<a name="157"><span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : printf(&quot;Second: addr:%016lx size:%016lx\n&quot;,</span></a>
-<a name="158"><span class="lineNum"> 158 </span> :<span class="lineNoCov"> 0 : tnext-&gt;start, tnext-&gt;end - tnext-&gt;start);</span></a>
-<a name="159"><span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : assert(0);</span></a>
-<a name="160"><span class="lineNum"> 160 </span> : : }</a>
-<a name="161"><span class="lineNum"> 161 </span> : : }</a>
-<a name="162"><span class="lineNum"> 162 </span> : : </a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 2 : free(tbl);</span></a>
-<a name="164"><span class="lineNum"> 164 </span> :<span class="lineCov"> 2 : }</span></a>
-<a name="165"><span class="lineNum"> 165 </span> : : </a>
-<a name="166"><span class="lineNum"> 166 </span> : : /* Fake PVR definitions. See include/processor.h */</a>
-<a name="167"><span class="lineNum"> 167 </span> : : unsigned long fake_pvr[] = {</a>
-<a name="168"><span class="lineNum"> 168 </span> : : 0x004e0200, /* PVR_P9 */</a>
-<a name="169"><span class="lineNum"> 169 </span> : : 0x004f0100, /* PVR_P9P */</a>
-<a name="170"><span class="lineNum"> 170 </span> : : };</a>
-<a name="171"><span class="lineNum"> 171 </span> : : </a>
-<a name="172"><span class="lineNum"> 172 </span> :<span class="lineCov"> 1 : int main(void)</span></a>
-<a name="173"><span class="lineNum"> 173 </span> : : {</a>
-<a name="174"><span class="lineNum"> 174 </span> : : /* Fake we are POWER9 */</a>
-<a name="175"><span class="lineNum"> 175 </span> :<span class="lineCov"> 1 : proc_gen = proc_gen_p9;</span></a>
-<a name="176"><span class="lineNum"> 176 </span> : : </a>
-<a name="177"><span class="lineNum"> 177 </span> :<span class="lineCov"> 3 : for (int i = 0; i &lt; ARRAY_SIZE(fake_pvr); i++) {</span></a>
-<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 2 : phys_map_init(fake_pvr[i]);</span></a>
-<a name="179"><span class="lineNum"> 179 </span> : : </a>
-<a name="180"><span class="lineNum"> 180 </span> : : /* Run tests */</a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 2 : check_table_directly();</span></a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 2 : check_map_call();</span></a>
-<a name="183"><span class="lineNum"> 183 </span> : : }</a>
-<a name="184"><span class="lineNum"> 184 </span> : : </a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 1 : return(0);</span></a>
-<a name="186"><span class="lineNum"> 186 </span> : : }</a>
+<a name="84"><span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="85"><span class="lineNum"> 85 </span> : : }</a>
+<a name="86"><span class="lineNum"> 86 </span> : : </a>
+<a name="87"><span class="lineNum"> 87 </span> :<span class="lineCov"> 3 : static void check_map_call(void)</span></a>
+<a name="88"><span class="lineNum"> 88 </span> : : {</a>
+<a name="89"><span class="lineNum"> 89 </span> : : uint64_t start, size, end;</a>
+<a name="90"><span class="lineNum"> 90 </span> : : const struct phys_map_entry *e;</a>
+<a name="91"><span class="lineNum"> 91 </span> : : struct map_call_entry *tbl, *t, *tnext;</a>
+<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 3 : int tbl_size = 0;</span></a>
+<a name="93"><span class="lineNum"> 93 </span> : : bool passed;</a>
+<a name="94"><span class="lineNum"> 94 </span> : : </a>
+<a name="95"><span class="lineNum"> 95 </span> :<span class="lineCov"> 283 : for (e = phys_map-&gt;table; !phys_map_entry_null(e); e++)</span></a>
+<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 280 : tbl_size++;</span></a>
+<a name="97"><span class="lineNum"> 97 </span> : : </a>
+<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 3 : tbl_size++; /* allow for null entry at end */</span></a>
+<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 3 : tbl_size *= sizeof(struct map_call_entry);</span></a>
+<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 3 : tbl = malloc(tbl_size);</span></a>
+<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 3 : assert(tbl != NULL);</span></a>
+<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 3 : memset(tbl, 0, tbl_size);</span></a>
+<a name="103"><span class="lineNum"> 103 </span> : : </a>
+<a name="104"><span class="lineNum"> 104 </span> : : /* Loop over table entries ... */</a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 283 : for (e = phys_map-&gt;table; !phys_map_entry_null(e); e++) {</span></a>
+<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 280 : __phys_map_get(FAKE_CHIP_ID, FAKE_CHIP_ID, e-&gt;type, e-&gt;index, &amp;start, &amp;size);</span></a>
+<a name="107"><span class="lineNum"> 107 </span> : : </a>
+<a name="108"><span class="lineNum"> 108 </span> : : /* Check for alignment */</a>
+<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 280 : if ((e-&gt;type != SYSTEM_MEM) &amp;&amp; (e-&gt;type != RESV)) {</span></a>
+<a name="110"><span class="lineNum"> 110 </span> : : /* Size is power of 2? */</a>
+<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 245 : assert(__builtin_popcountl(size) == 1);</span></a>
+<a name="112"><span class="lineNum"> 112 </span> : : /* Start is aligned to size? */</a>
+<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 245 : assert((start % size) == 0);</span></a>
+<a name="114"><span class="lineNum"> 114 </span> : : }</a>
+<a name="115"><span class="lineNum"> 115 </span> : : </a>
+<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 280 : end = start + size;</span></a>
+<a name="117"><span class="lineNum"> 117 </span> :<span class="lineCov"> 13391 : for (t = tbl; !map_call_entry_null(t); t++) {</span></a>
+<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 13111 : passed = true;</span></a>
+<a name="119"><span class="lineNum"> 119 </span> : : </a>
+<a name="120"><span class="lineNum"> 120 </span> : : /* Check for overlaping regions */</a>
+<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 13111 : if ((start &gt; t-&gt;start) &amp;&amp; (start &lt; t-&gt;end))</span></a>
+<a name="122"><span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : passed = false;</span></a>
+<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 13111 : if ((end &gt; t-&gt;start) &amp;&amp; (end &lt; t-&gt;end))</span></a>
+<a name="124"><span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : passed = false;</span></a>
+<a name="125"><span class="lineNum"> 125 </span> : : </a>
+<a name="126"><span class="lineNum"> 126 </span> :<span class="lineCov"> 13111 : if (passed)</span></a>
+<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 13111 : continue;</span></a>
+<a name="128"><span class="lineNum"> 128 </span> : : </a>
+<a name="129"><span class="lineNum"> 129 </span> :<span class="lineNoCov"> 0 : printf(&quot;Phys map call test FAILED: Entry overlaps\n&quot;);</span></a>
+<a name="130"><span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : printf(&quot;First: addr:%016lx size:%016lx\n&quot;,</span></a>
+<a name="131"><span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : t-&gt;start, t-&gt;end - t-&gt;start);</span></a>
+<a name="132"><span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : printf(&quot;Second: addr:%016lx size:%016lx\n &quot;,</span></a>
+<a name="133"><span class="lineNum"> 133 </span> : : start, size);</a>
+<a name="134"><span class="lineNum"> 134 </span> :<span class="lineNoCov"> 0 : print_entry(e);</span></a>
+<a name="135"><span class="lineNum"> 135 </span> :<span class="lineNoCov"> 0 : printf(&quot;\n&quot;);</span></a>
+<a name="136"><span class="lineNum"> 136 </span> :<span class="lineNoCov"> 0 : assert(0);</span></a>
+<a name="137"><span class="lineNum"> 137 </span> : : }</a>
+<a name="138"><span class="lineNum"> 138 </span> : : /* Insert entry at end of table */</a>
+<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 280 : t-&gt;start = start;</span></a>
+<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 280 : t-&gt;end = end;</span></a>
+<a name="141"><span class="lineNum"> 141 </span> : : }</a>
+<a name="142"><span class="lineNum"> 142 </span> : : </a>
+<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 280 : for (t = tbl; !map_call_entry_null(t + 1); t++) {</span></a>
+<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 277 : tnext = t + 1;</span></a>
+<a name="145"><span class="lineNum"> 145 </span> : : /* Make sure the table is sorted */</a>
+<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 277 : if (t-&gt;start &gt; tnext-&gt;start) {</span></a>
+<a name="147"><span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : printf(&quot;Phys map test FAILED: Entry not sorted\n&quot;);</span></a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : printf(&quot;First: addr:%016lx size:%016lx\n&quot;,</span></a>
+<a name="149"><span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : t-&gt;start, t-&gt;end - t-&gt;start);</span></a>
+<a name="150"><span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : printf(&quot;Second: addr:%016lx size:%016lx\n&quot;,</span></a>
+<a name="151"><span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : tnext-&gt;start, tnext-&gt;end - tnext-&gt;start);</span></a>
+<a name="152"><span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : assert(0);</span></a>
+<a name="153"><span class="lineNum"> 153 </span> : : }</a>
+<a name="154"><span class="lineNum"> 154 </span> : : </a>
+<a name="155"><span class="lineNum"> 155 </span> : : /* Look for holes in the table in MMIO region */</a>
+<a name="156"><span class="lineNum"> 156 </span> : : /* We assume over 1PB is MMIO. */</a>
+<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 277 : if ((t-&gt;end != tnext-&gt;start) &amp;&amp;</span></a>
+<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 8 : (t-&gt;start &gt; 0x0004000000000000)) {</span></a>
+<a name="159"><span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : printf(&quot;Phys map test FAILED: Hole in map\n&quot;);</span></a>
+<a name="160"><span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : printf(&quot;First: addr:%016lx size:%016lx\n&quot;,</span></a>
+<a name="161"><span class="lineNum"> 161 </span> :<span class="lineNoCov"> 0 : t-&gt;start, t-&gt;end - t-&gt;start);</span></a>
+<a name="162"><span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : printf(&quot;Second: addr:%016lx size:%016lx\n&quot;,</span></a>
+<a name="163"><span class="lineNum"> 163 </span> :<span class="lineNoCov"> 0 : tnext-&gt;start, tnext-&gt;end - tnext-&gt;start);</span></a>
+<a name="164"><span class="lineNum"> 164 </span> :<span class="lineNoCov"> 0 : assert(0);</span></a>
+<a name="165"><span class="lineNum"> 165 </span> : : }</a>
+<a name="166"><span class="lineNum"> 166 </span> : : }</a>
+<a name="167"><span class="lineNum"> 167 </span> : : </a>
+<a name="168"><span class="lineNum"> 168 </span> :<span class="lineCov"> 3 : free(tbl);</span></a>
+<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 3 : }</span></a>
+<a name="170"><span class="lineNum"> 170 </span> : : </a>
+<a name="171"><span class="lineNum"> 171 </span> : : /* Fake PVR definitions. See include/processor.h */</a>
+<a name="172"><span class="lineNum"> 172 </span> : : unsigned long fake_pvr[] = {</a>
+<a name="173"><span class="lineNum"> 173 </span> : : 0x004e0200, /* PVR_P9 */</a>
+<a name="174"><span class="lineNum"> 174 </span> : : 0x004f0100, /* PVR_P9P */</a>
+<a name="175"><span class="lineNum"> 175 </span> : : 0x00800100, /* PVR_P10 */</a>
+<a name="176"><span class="lineNum"> 176 </span> : : };</a>
+<a name="177"><span class="lineNum"> 177 </span> : : </a>
+<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 1 : int main(void)</span></a>
+<a name="179"><span class="lineNum"> 179 </span> : : {</a>
+<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 4 : for (int i = 0; i &lt; ARRAY_SIZE(fake_pvr); i++) {</span></a>
+<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 3 : switch(PVR_TYPE(fake_pvr[i])) {</span></a>
+<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 2 : case PVR_TYPE_P9:</span></a>
+<a name="183"><span class="lineNum"> 183 </span> : : case PVR_TYPE_P9P:</a>
+<a name="184"><span class="lineNum"> 184 </span> :<span class="lineCov"> 2 : proc_gen = proc_gen_p9;</span></a>
+<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 2 : break;</span></a>
+<a name="186"><span class="lineNum"> 186 </span> :<span class="lineCov"> 1 : case PVR_TYPE_P10:</span></a>
+<a name="187"><span class="lineNum"> 187 </span> :<span class="lineCov"> 1 : proc_gen = proc_gen_p10;</span></a>
+<a name="188"><span class="lineNum"> 188 </span> :<span class="lineCov"> 1 : break;</span></a>
+<a name="189"><span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="190"><span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : printf(&quot;Unknown PVR 0x%lx\n&quot;, fake_pvr[i]);</span></a>
+<a name="191"><span class="lineNum"> 191 </span> :<span class="lineNoCov"> 0 : return 1;</span></a>
+<a name="192"><span class="lineNum"> 192 </span> : : break;</a>
+<a name="193"><span class="lineNum"> 193 </span> : : }</a>
+<a name="194"><span class="lineNum"> 194 </span> : : </a>
+<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 3 : phys_map_init(fake_pvr[i]);</span></a>
+<a name="196"><span class="lineNum"> 196 </span> : : </a>
+<a name="197"><span class="lineNum"> 197 </span> : : /* Run tests */</a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 3 : check_table_directly();</span></a>
+<a name="199"><span class="lineNum"> 199 </span> :<span class="lineCov"> 3 : check_map_call();</span></a>
+<a name="200"><span class="lineNum"> 200 </span> : : }</a>
+<a name="201"><span class="lineNum"> 201 </span> : : </a>
+<a name="202"><span class="lineNum"> 202 </span> :<span class="lineCov"> 1 : return(0);</span></a>
+<a name="203"><span class="lineNum"> 203 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/hw/test/run-port80h.c.func-sort-c.html b/coverage-report/hw/test/run-port80h.c.func-sort-c.html
index 299a2a4..b7a1305 100644
--- a/coverage-report/hw/test/run-port80h.c.func-sort-c.html
+++ b/coverage-report/hw/test/run-port80h.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/hw/test/run-port80h.c.func.html b/coverage-report/hw/test/run-port80h.c.func.html
index f3db94e..a24ef0b 100644
--- a/coverage-report/hw/test/run-port80h.c.func.html
+++ b/coverage-report/hw/test/run-port80h.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/hw/test/run-port80h.c.gcov.html b/coverage-report/hw/test/run-port80h.c.gcov.html
index 6f68f5a..fbf4e8e 100644
--- a/coverage-report/hw/test/run-port80h.c.gcov.html
+++ b/coverage-report/hw/test/run-port80h.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/include/bitmap.h.func-sort-c.html b/coverage-report/include/bitmap.h.func-sort-c.html
index 737deeb..3ff6165 100644
--- a/coverage-report/include/bitmap.h.func-sort-c.html
+++ b/coverage-report/include/bitmap.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/include/bitmap.h.func.html b/coverage-report/include/bitmap.h.func.html
index e507248..8f70915 100644
--- a/coverage-report/include/bitmap.h.func.html
+++ b/coverage-report/include/bitmap.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/include/bitmap.h.gcov.html b/coverage-report/include/bitmap.h.gcov.html
index 42d6e06..b300c02 100644
--- a/coverage-report/include/bitmap.h.gcov.html
+++ b/coverage-report/include/bitmap.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/include/chip.h.func-sort-c.html b/coverage-report/include/chip.h.func-sort-c.html
index 63f091e..9072b43 100644
--- a/coverage-report/include/chip.h.func-sort-c.html
+++ b/coverage-report/include/chip.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -69,7 +69,7 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="chip.h.gcov.html#142">chip_quirk</a></td>
+ <td class="coverFn"><a href="chip.h.gcov.html#192">chip_quirk</a></td>
<td class="coverFnHi">38</td>
</tr>
</table>
diff --git a/coverage-report/include/chip.h.func.html b/coverage-report/include/chip.h.func.html
index d0a23d2..6fd8b19 100644
--- a/coverage-report/include/chip.h.func.html
+++ b/coverage-report/include/chip.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -69,7 +69,7 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="chip.h.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="chip.h.gcov.html#142">chip_quirk</a></td>
+ <td class="coverFn"><a href="chip.h.gcov.html#192">chip_quirk</a></td>
<td class="coverFnHi">38</td>
</tr>
</table>
diff --git a/coverage-report/include/chip.h.gcov.html b/coverage-report/include/chip.h.gcov.html
index 9992e72..2206af4 100644
--- a/coverage-report/include/chip.h.gcov.html
+++ b/coverage-report/include/chip.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -171,184 +171,237 @@
<a name="100"><span class="lineNum"> 100 </span> : : </a>
<a name="101"><span class="lineNum"> 101 </span> : : #define P9_PIRFUSED2NORMALTHREADID(pir) (((pir) &gt;&gt; 1) &amp; 0x3)</a>
<a name="102"><span class="lineNum"> 102 </span> : : </a>
-<a name="103"><span class="lineNum"> 103 </span> : : /* P9 specific ones mostly used by XIVE */</a>
-<a name="104"><span class="lineNum"> 104 </span> : : #define P9_PIR2LOCALCPU(pir) ((pir) &amp; 0xff)</a>
-<a name="105"><span class="lineNum"> 105 </span> : : #define P9_PIRFROMLOCALCPU(chip, cpu) (((chip) &lt;&lt; 8) | (cpu))</a>
+<a name="103"><span class="lineNum"> 103 </span> : : #define P10_PIR2FUSEDCOREID(pir) P9_PIR2FUSEDCOREID(pir)</a>
+<a name="104"><span class="lineNum"> 104 </span> : : #define P10_PIRFUSED2NORMALCOREID(pir) P9_PIRFUSED2NORMALCOREID(pir)</a>
+<a name="105"><span class="lineNum"> 105 </span> : : #define P10_PIRFUSED2NORMALTHREADID(pir) P9_PIRFUSED2NORMALTHREADID(pir)</a>
<a name="106"><span class="lineNum"> 106 </span> : : </a>
-<a name="107"><span class="lineNum"> 107 </span> : : </a>
-<a name="108"><span class="lineNum"> 108 </span> : : struct dt_node;</a>
-<a name="109"><span class="lineNum"> 109 </span> : : struct centaur_chip;</a>
-<a name="110"><span class="lineNum"> 110 </span> : : struct mfsi;</a>
-<a name="111"><span class="lineNum"> 111 </span> : : struct xive;</a>
-<a name="112"><span class="lineNum"> 112 </span> : : struct lpcm;</a>
-<a name="113"><span class="lineNum"> 113 </span> : : struct vas;</a>
-<a name="114"><span class="lineNum"> 114 </span> : : struct p9_sbe;</a>
-<a name="115"><span class="lineNum"> 115 </span> : : struct p9_dio;</a>
-<a name="116"><span class="lineNum"> 116 </span> : : </a>
-<a name="117"><span class="lineNum"> 117 </span> : : /* Chip type */</a>
-<a name="118"><span class="lineNum"> 118 </span> : : enum proc_chip_type {</a>
-<a name="119"><span class="lineNum"> 119 </span> : : PROC_CHIP_UNKNOWN,</a>
-<a name="120"><span class="lineNum"> 120 </span> : : PROC_CHIP_P8_MURANO,</a>
-<a name="121"><span class="lineNum"> 121 </span> : : PROC_CHIP_P8_VENICE,</a>
-<a name="122"><span class="lineNum"> 122 </span> : : PROC_CHIP_P8_NAPLES,</a>
-<a name="123"><span class="lineNum"> 123 </span> : : PROC_CHIP_P9_NIMBUS,</a>
-<a name="124"><span class="lineNum"> 124 </span> : : PROC_CHIP_P9_CUMULUS,</a>
-<a name="125"><span class="lineNum"> 125 </span> : : PROC_CHIP_P9P,</a>
-<a name="126"><span class="lineNum"> 126 </span> : : };</a>
-<a name="127"><span class="lineNum"> 127 </span> : : </a>
-<a name="128"><span class="lineNum"> 128 </span> : : /* Simulator quirks */</a>
-<a name="129"><span class="lineNum"> 129 </span> : : enum proc_chip_quirks {</a>
-<a name="130"><span class="lineNum"> 130 </span> : : QUIRK_NO_CHIPTOD = 0x00000001,</a>
-<a name="131"><span class="lineNum"> 131 </span> : : QUIRK_MAMBO_CALLOUTS = 0x00000002,</a>
-<a name="132"><span class="lineNum"> 132 </span> : : QUIRK_NO_F000F = 0x00000004,</a>
-<a name="133"><span class="lineNum"> 133 </span> : : QUIRK_NO_PBA = 0x00000008,</a>
-<a name="134"><span class="lineNum"> 134 </span> : : QUIRK_NO_OCC_IRQ = 0x00000010,</a>
-<a name="135"><span class="lineNum"> 135 </span> : : QUIRK_SIMICS = 0x00000020,</a>
-<a name="136"><span class="lineNum"> 136 </span> : : QUIRK_SLOW_SIM = 0x00000040,</a>
-<a name="137"><span class="lineNum"> 137 </span> : : QUIRK_NO_DIRECT_CTL = 0x00000080,</a>
-<a name="138"><span class="lineNum"> 138 </span> : : QUIRK_NO_RNG = 0x00000100,</a>
-<a name="139"><span class="lineNum"> 139 </span> : : QUIRK_QEMU = 0x00000200,</a>
-<a name="140"><span class="lineNum"> 140 </span> : : };</a>
-<a name="141"><span class="lineNum"> 141 </span> : : </a>
-<a name="142"><span class="lineNum"> 142 </span> : : extern enum proc_chip_quirks proc_chip_quirks;</a>
+<a name="107"><span class="lineNum"> 107 </span> : : /* P9 specific ones mostly used by XIVE */</a>
+<a name="108"><span class="lineNum"> 108 </span> : : #define P9_PIR2LOCALCPU(pir) ((pir) &amp; 0xff)</a>
+<a name="109"><span class="lineNum"> 109 </span> : : #define P9_PIRFROMLOCALCPU(chip, cpu) (((chip) &lt;&lt; 8) | (cpu))</a>
+<a name="110"><span class="lineNum"> 110 </span> : : </a>
+<a name="111"><span class="lineNum"> 111 </span> : : /*</a>
+<a name="112"><span class="lineNum"> 112 </span> : : * P10 PIR</a>
+<a name="113"><span class="lineNum"> 113 </span> : : * -------</a>
+<a name="114"><span class="lineNum"> 114 </span> : : *</a>
+<a name="115"><span class="lineNum"> 115 </span> : : * PIR layout:</a>
+<a name="116"><span class="lineNum"> 116 </span> : : *</a>
+<a name="117"><span class="lineNum"> 117 </span> : : * | 49| 50| 51| 52| 53| 54| 55| 56| 57| 58| 59| 60| 61| 62| 63|</a>
+<a name="118"><span class="lineNum"> 118 </span> : : * |Spare ID |Topology ID |Sp. |Quad ID |Core ID |Thread ID|</a>
+<a name="119"><span class="lineNum"> 119 </span> : : *</a>
+<a name="120"><span class="lineNum"> 120 </span> : : * Bit 56 is a spare quad ID. In big-core mode, thread ID extends to bit 61.</a>
+<a name="121"><span class="lineNum"> 121 </span> : : *</a>
+<a name="122"><span class="lineNum"> 122 </span> : : * P10 GCID</a>
+<a name="123"><span class="lineNum"> 123 </span> : : * --------</a>
+<a name="124"><span class="lineNum"> 124 </span> : : *</a>
+<a name="125"><span class="lineNum"> 125 </span> : : * - Global chip ID is also called Topology ID.</a>
+<a name="126"><span class="lineNum"> 126 </span> : : * - Node ID is called Group ID (? XXX P10).</a>
+<a name="127"><span class="lineNum"> 127 </span> : : *</a>
+<a name="128"><span class="lineNum"> 128 </span> : : * Global chip ID is a 4 bit number.</a>
+<a name="129"><span class="lineNum"> 129 </span> : : *</a>
+<a name="130"><span class="lineNum"> 130 </span> : : * There is a topology mode bit that can be 0 or 1, which changes GCID mapping.</a>
+<a name="131"><span class="lineNum"> 131 </span> : : *</a>
+<a name="132"><span class="lineNum"> 132 </span> : : * Topology mode 0:</a>
+<a name="133"><span class="lineNum"> 133 </span> : : * NodeID ChipID</a>
+<a name="134"><span class="lineNum"> 134 </span> : : * | | |</a>
+<a name="135"><span class="lineNum"> 135 </span> : : * |____|____|____|____|</a>
+<a name="136"><span class="lineNum"> 136 </span> : : *</a>
+<a name="137"><span class="lineNum"> 137 </span> : : * Topology mode 1:</a>
+<a name="138"><span class="lineNum"> 138 </span> : : * NodeID ChipID</a>
+<a name="139"><span class="lineNum"> 139 </span> : : * | | |</a>
+<a name="140"><span class="lineNum"> 140 </span> : : * |____|____|____|____|</a>
+<a name="141"><span class="lineNum"> 141 </span> : : */</a>
+<a name="142"><span class="lineNum"> 142 </span> : : #define P10_PIR2GCID(pir) (((pir) &gt;&gt; 8) &amp; 0xf)</a>
<a name="143"><span class="lineNum"> 143 </span> : : </a>
-<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 38 : static inline bool chip_quirk(unsigned int q)</span></a>
-<a name="145"><span class="lineNum"> 145 </span> : : {</a>
-<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 38 : return !!(proc_chip_quirks &amp; q);</span></a>
-<a name="147"><span class="lineNum"> 147 </span> : : }</a>
-<a name="148"><span class="lineNum"> 148 </span> : : </a>
-<a name="149"><span class="lineNum"> 149 </span> : : #define MAX_CHIPS (1 &lt;&lt; 6) /* 6-bit chip ID */</a>
-<a name="150"><span class="lineNum"> 150 </span> : : </a>
-<a name="151"><span class="lineNum"> 151 </span> : : /*</a>
-<a name="152"><span class="lineNum"> 152 </span> : : * For each chip in the system, we maintain this structure</a>
-<a name="153"><span class="lineNum"> 153 </span> : : *</a>
-<a name="154"><span class="lineNum"> 154 </span> : : * This contains fields used by different modules including</a>
-<a name="155"><span class="lineNum"> 155 </span> : : * modules in hw/ but is handy to keep per-chip data</a>
-<a name="156"><span class="lineNum"> 156 </span> : : */</a>
-<a name="157"><span class="lineNum"> 157 </span> : : struct proc_chip {</a>
-<a name="158"><span class="lineNum"> 158 </span> : : uint32_t id; /* HW Chip ID (GCID) */</a>
-<a name="159"><span class="lineNum"> 159 </span> : : struct dt_node *devnode; /* &quot;xscom&quot; chip node */</a>
-<a name="160"><span class="lineNum"> 160 </span> : : </a>
-<a name="161"><span class="lineNum"> 161 </span> : : /* These are only initialized after xcom_init */</a>
-<a name="162"><span class="lineNum"> 162 </span> : : enum proc_chip_type type;</a>
-<a name="163"><span class="lineNum"> 163 </span> : : uint32_t ec_level; /* 0xMm (DD1.0 = 0x10) */</a>
-<a name="164"><span class="lineNum"> 164 </span> : : uint8_t ec_rev; /* sub-revision */</a>
-<a name="165"><span class="lineNum"> 165 </span> : : </a>
-<a name="166"><span class="lineNum"> 166 </span> : : /* Those two values are only populated on machines with an FSP</a>
-<a name="167"><span class="lineNum"> 167 </span> : : * dbob_id = Drawer/Block/Octant/Blade (DBOBID)</a>
-<a name="168"><span class="lineNum"> 168 </span> : : * pcid = HDAT processor_chip_id</a>
-<a name="169"><span class="lineNum"> 169 </span> : : */</a>
-<a name="170"><span class="lineNum"> 170 </span> : : uint32_t dbob_id;</a>
-<a name="171"><span class="lineNum"> 171 </span> : : uint32_t pcid;</a>
-<a name="172"><span class="lineNum"> 172 </span> : : </a>
-<a name="173"><span class="lineNum"> 173 </span> : : /* If we expect to have an OCC (i.e. P8) and it is functional,</a>
-<a name="174"><span class="lineNum"> 174 </span> : : * set TRUE. If something has told us it is not, set FALSE and</a>
-<a name="175"><span class="lineNum"> 175 </span> : : * we can not wait for OCCs to init. This is only going to be</a>
-<a name="176"><span class="lineNum"> 176 </span> : : * FALSE in a simulator that doesn't simulate OCCs. */</a>
-<a name="177"><span class="lineNum"> 177 </span> : : bool occ_functional;</a>
-<a name="178"><span class="lineNum"> 178 </span> : : </a>
-<a name="179"><span class="lineNum"> 179 </span> : : /* Used by hw/xscom.c */</a>
-<a name="180"><span class="lineNum"> 180 </span> : : uint64_t xscom_base;</a>
-<a name="181"><span class="lineNum"> 181 </span> : : </a>
-<a name="182"><span class="lineNum"> 182 </span> : : /* Used by hw/lpc.c */</a>
-<a name="183"><span class="lineNum"> 183 </span> : : struct lpcm *lpc;</a>
-<a name="184"><span class="lineNum"> 184 </span> : : </a>
-<a name="185"><span class="lineNum"> 185 </span> : : /* Used by hw/slw.c */</a>
-<a name="186"><span class="lineNum"> 186 </span> : : uint64_t slw_base;</a>
-<a name="187"><span class="lineNum"> 187 </span> : : uint64_t slw_bar_size;</a>
-<a name="188"><span class="lineNum"> 188 </span> : : uint64_t slw_image_size;</a>
-<a name="189"><span class="lineNum"> 189 </span> : : </a>
-<a name="190"><span class="lineNum"> 190 </span> : : /* Used by hw/homer.c */</a>
-<a name="191"><span class="lineNum"> 191 </span> : : uint64_t homer_base;</a>
-<a name="192"><span class="lineNum"> 192 </span> : : uint64_t homer_size;</a>
-<a name="193"><span class="lineNum"> 193 </span> : : uint64_t occ_common_base;</a>
-<a name="194"><span class="lineNum"> 194 </span> : : uint64_t occ_common_size;</a>
-<a name="195"><span class="lineNum"> 195 </span> : : uint8_t throttle;</a>
-<a name="196"><span class="lineNum"> 196 </span> : : </a>
-<a name="197"><span class="lineNum"> 197 </span> : : /* Must hold capi_lock to change */</a>
-<a name="198"><span class="lineNum"> 198 </span> : : uint8_t capp_phb3_attached_mask;</a>
-<a name="199"><span class="lineNum"> 199 </span> : : uint8_t capp_ucode_loaded;</a>
+<a name="144"><span class="lineNum"> 144 </span> : : #define P10_PIR2COREID(pir) (((pir) &gt;&gt; 2) &amp; 0x3f)</a>
+<a name="145"><span class="lineNum"> 145 </span> : : </a>
+<a name="146"><span class="lineNum"> 146 </span> : : #define P10_PIR2THREADID(pir) ((pir) &amp; 0x3)</a>
+<a name="147"><span class="lineNum"> 147 </span> : : </a>
+<a name="148"><span class="lineNum"> 148 </span> : : // XXX P10 These depend on the topology mode, how to get that (system type?)</a>
+<a name="149"><span class="lineNum"> 149 </span> : : #define P10_GCID2NODEID(gcid, mode) ((mode) == 0 ? ((gcid) &gt;&gt; 1) &amp; 0x7 : ((gcid) &gt;&gt; 2) &amp; 0x3)</a>
+<a name="150"><span class="lineNum"> 150 </span> : : #define P10_GCID2CHIPID(gcid, mode) ((mode) == 0 ? (gcid) &amp; 0x1 : (gcid) &amp; 0x3)</a>
+<a name="151"><span class="lineNum"> 151 </span> : : </a>
+<a name="152"><span class="lineNum"> 152 </span> : : /* P10 specific ones mostly used by XIVE */</a>
+<a name="153"><span class="lineNum"> 153 </span> : : #define P10_PIR2LOCALCPU(pir) ((pir) &amp; 0xff)</a>
+<a name="154"><span class="lineNum"> 154 </span> : : #define P10_PIRFROMLOCALCPU(chip, cpu) (((chip) &lt;&lt; 8) | (cpu))</a>
+<a name="155"><span class="lineNum"> 155 </span> : : </a>
+<a name="156"><span class="lineNum"> 156 </span> : : struct dt_node;</a>
+<a name="157"><span class="lineNum"> 157 </span> : : struct centaur_chip;</a>
+<a name="158"><span class="lineNum"> 158 </span> : : struct mfsi;</a>
+<a name="159"><span class="lineNum"> 159 </span> : : struct xive;</a>
+<a name="160"><span class="lineNum"> 160 </span> : : struct lpcm;</a>
+<a name="161"><span class="lineNum"> 161 </span> : : struct vas;</a>
+<a name="162"><span class="lineNum"> 162 </span> : : struct p9_sbe;</a>
+<a name="163"><span class="lineNum"> 163 </span> : : struct p9_dio;</a>
+<a name="164"><span class="lineNum"> 164 </span> : : </a>
+<a name="165"><span class="lineNum"> 165 </span> : : /* Chip type */</a>
+<a name="166"><span class="lineNum"> 166 </span> : : enum proc_chip_type {</a>
+<a name="167"><span class="lineNum"> 167 </span> : : PROC_CHIP_UNKNOWN,</a>
+<a name="168"><span class="lineNum"> 168 </span> : : PROC_CHIP_P8_MURANO,</a>
+<a name="169"><span class="lineNum"> 169 </span> : : PROC_CHIP_P8_VENICE,</a>
+<a name="170"><span class="lineNum"> 170 </span> : : PROC_CHIP_P8_NAPLES,</a>
+<a name="171"><span class="lineNum"> 171 </span> : : PROC_CHIP_P9_NIMBUS,</a>
+<a name="172"><span class="lineNum"> 172 </span> : : PROC_CHIP_P9_CUMULUS,</a>
+<a name="173"><span class="lineNum"> 173 </span> : : PROC_CHIP_P9P,</a>
+<a name="174"><span class="lineNum"> 174 </span> : : PROC_CHIP_P10,</a>
+<a name="175"><span class="lineNum"> 175 </span> : : };</a>
+<a name="176"><span class="lineNum"> 176 </span> : : </a>
+<a name="177"><span class="lineNum"> 177 </span> : : /* Simulator quirks */</a>
+<a name="178"><span class="lineNum"> 178 </span> : : enum proc_chip_quirks {</a>
+<a name="179"><span class="lineNum"> 179 </span> : : QUIRK_NO_CHIPTOD = 0x00000001,</a>
+<a name="180"><span class="lineNum"> 180 </span> : : QUIRK_MAMBO_CALLOUTS = 0x00000002,</a>
+<a name="181"><span class="lineNum"> 181 </span> : : QUIRK_NO_F000F = 0x00000004,</a>
+<a name="182"><span class="lineNum"> 182 </span> : : QUIRK_NO_PBA = 0x00000008,</a>
+<a name="183"><span class="lineNum"> 183 </span> : : QUIRK_NO_OCC_IRQ = 0x00000010,</a>
+<a name="184"><span class="lineNum"> 184 </span> : : QUIRK_SIMICS = 0x00000020,</a>
+<a name="185"><span class="lineNum"> 185 </span> : : QUIRK_SLOW_SIM = 0x00000040,</a>
+<a name="186"><span class="lineNum"> 186 </span> : : QUIRK_NO_DIRECT_CTL = 0x00000080,</a>
+<a name="187"><span class="lineNum"> 187 </span> : : QUIRK_NO_RNG = 0x00000100,</a>
+<a name="188"><span class="lineNum"> 188 </span> : : QUIRK_QEMU = 0x00000200,</a>
+<a name="189"><span class="lineNum"> 189 </span> : : QUIRK_AWAN = 0x00000400,</a>
+<a name="190"><span class="lineNum"> 190 </span> : : };</a>
+<a name="191"><span class="lineNum"> 191 </span> : : </a>
+<a name="192"><span class="lineNum"> 192 </span> : : extern enum proc_chip_quirks proc_chip_quirks;</a>
+<a name="193"><span class="lineNum"> 193 </span> : : </a>
+<a name="194"><span class="lineNum"> 194 </span> :<span class="lineCov"> 38 : static inline bool chip_quirk(unsigned int q)</span></a>
+<a name="195"><span class="lineNum"> 195 </span> : : {</a>
+<a name="196"><span class="lineNum"> 196 </span> :<span class="lineCov"> 38 : return !!(proc_chip_quirks &amp; q);</span></a>
+<a name="197"><span class="lineNum"> 197 </span> : : }</a>
+<a name="198"><span class="lineNum"> 198 </span> : : </a>
+<a name="199"><span class="lineNum"> 199 </span> : : #define MAX_CHIPS (1 &lt;&lt; 6) /* 6-bit chip ID */</a>
<a name="200"><span class="lineNum"> 200 </span> : : </a>
-<a name="201"><span class="lineNum"> 201 </span> : : /* Used by hw/centaur.c */</a>
-<a name="202"><span class="lineNum"> 202 </span> : : struct centaur_chip *centaurs;</a>
-<a name="203"><span class="lineNum"> 203 </span> : : </a>
-<a name="204"><span class="lineNum"> 204 </span> : : /* Used by hw/p8-i2c.c */</a>
-<a name="205"><span class="lineNum"> 205 </span> : : struct list_head i2cms;</a>
-<a name="206"><span class="lineNum"> 206 </span> : : </a>
-<a name="207"><span class="lineNum"> 207 </span> : : /* Used by hw/psi.c */</a>
-<a name="208"><span class="lineNum"> 208 </span> : : struct psi *psi;</a>
-<a name="209"><span class="lineNum"> 209 </span> : : </a>
-<a name="210"><span class="lineNum"> 210 </span> : : /* Used by hw/fsi-master.c */</a>
-<a name="211"><span class="lineNum"> 211 </span> : : struct mfsi *fsi_masters;</a>
-<a name="212"><span class="lineNum"> 212 </span> : : </a>
-<a name="213"><span class="lineNum"> 213 </span> : : /* Used by hw/xive.c */</a>
-<a name="214"><span class="lineNum"> 214 </span> : : struct xive *xive;</a>
+<a name="201"><span class="lineNum"> 201 </span> : : /*</a>
+<a name="202"><span class="lineNum"> 202 </span> : : * For each chip in the system, we maintain this structure</a>
+<a name="203"><span class="lineNum"> 203 </span> : : *</a>
+<a name="204"><span class="lineNum"> 204 </span> : : * This contains fields used by different modules including</a>
+<a name="205"><span class="lineNum"> 205 </span> : : * modules in hw/ but is handy to keep per-chip data</a>
+<a name="206"><span class="lineNum"> 206 </span> : : */</a>
+<a name="207"><span class="lineNum"> 207 </span> : : struct proc_chip {</a>
+<a name="208"><span class="lineNum"> 208 </span> : : uint32_t id; /* HW Chip ID (GCID) */</a>
+<a name="209"><span class="lineNum"> 209 </span> : : struct dt_node *devnode; /* &quot;xscom&quot; chip node */</a>
+<a name="210"><span class="lineNum"> 210 </span> : : </a>
+<a name="211"><span class="lineNum"> 211 </span> : : /* These are only initialized after xcom_init */</a>
+<a name="212"><span class="lineNum"> 212 </span> : : enum proc_chip_type type;</a>
+<a name="213"><span class="lineNum"> 213 </span> : : uint32_t ec_level; /* 0xMm (DD1.0 = 0x10) */</a>
+<a name="214"><span class="lineNum"> 214 </span> : : uint8_t ec_rev; /* sub-revision */</a>
<a name="215"><span class="lineNum"> 215 </span> : : </a>
-<a name="216"><span class="lineNum"> 216 </span> : : struct vas *vas;</a>
-<a name="217"><span class="lineNum"> 217 </span> : : </a>
-<a name="218"><span class="lineNum"> 218 </span> : : /* Used by hw/nx-compress.c */</a>
-<a name="219"><span class="lineNum"> 219 </span> : : uint64_t nx_base;</a>
-<a name="220"><span class="lineNum"> 220 </span> : : /* location code of this chip */</a>
-<a name="221"><span class="lineNum"> 221 </span> : : const uint8_t *loc_code;</a>
+<a name="216"><span class="lineNum"> 216 </span> : : /* Those two values are only populated on machines with an FSP</a>
+<a name="217"><span class="lineNum"> 217 </span> : : * dbob_id = Drawer/Block/Octant/Blade (DBOBID)</a>
+<a name="218"><span class="lineNum"> 218 </span> : : * pcid = HDAT processor_chip_id</a>
+<a name="219"><span class="lineNum"> 219 </span> : : */</a>
+<a name="220"><span class="lineNum"> 220 </span> : : uint32_t dbob_id;</a>
+<a name="221"><span class="lineNum"> 221 </span> : : uint32_t pcid;</a>
<a name="222"><span class="lineNum"> 222 </span> : : </a>
-<a name="223"><span class="lineNum"> 223 </span> : : /* Used by hw/sbe-p9.c */</a>
-<a name="224"><span class="lineNum"> 224 </span> : : struct p9_sbe *sbe;</a>
-<a name="225"><span class="lineNum"> 225 </span> : : </a>
-<a name="226"><span class="lineNum"> 226 </span> : : /* Used by hw/dio-p9.c */</a>
-<a name="227"><span class="lineNum"> 227 </span> : : struct p9_dio *dio;</a>
+<a name="223"><span class="lineNum"> 223 </span> : : /* If we expect to have an OCC (i.e. P8) and it is functional,</a>
+<a name="224"><span class="lineNum"> 224 </span> : : * set TRUE. If something has told us it is not, set FALSE and</a>
+<a name="225"><span class="lineNum"> 225 </span> : : * we can not wait for OCCs to init. This is only going to be</a>
+<a name="226"><span class="lineNum"> 226 </span> : : * FALSE in a simulator that doesn't simulate OCCs. */</a>
+<a name="227"><span class="lineNum"> 227 </span> : : bool occ_functional;</a>
<a name="228"><span class="lineNum"> 228 </span> : : </a>
-<a name="229"><span class="lineNum"> 229 </span> : : /* Used during OCC init */</a>
-<a name="230"><span class="lineNum"> 230 </span> : : bool ex_present;</a>
-<a name="231"><span class="lineNum"> 231 </span> : : };</a>
-<a name="232"><span class="lineNum"> 232 </span> : : </a>
-<a name="233"><span class="lineNum"> 233 </span> : : extern uint32_t pir_to_chip_id(uint32_t pir);</a>
+<a name="229"><span class="lineNum"> 229 </span> : : /* Used by hw/xscom.c */</a>
+<a name="230"><span class="lineNum"> 230 </span> : : uint64_t xscom_base;</a>
+<a name="231"><span class="lineNum"> 231 </span> : : </a>
+<a name="232"><span class="lineNum"> 232 </span> : : /* Used by hw/lpc.c */</a>
+<a name="233"><span class="lineNum"> 233 </span> : : struct lpcm *lpc;</a>
<a name="234"><span class="lineNum"> 234 </span> : : </a>
-<a name="235"><span class="lineNum"> 235 </span> : : /*</a>
-<a name="236"><span class="lineNum"> 236 </span> : : * Note: In P9 fused-core mode, these will return the &quot;normal&quot;</a>
-<a name="237"><span class="lineNum"> 237 </span> : : * core ID and thread ID (ie, thread ID 0..3)</a>
-<a name="238"><span class="lineNum"> 238 </span> : : */</a>
-<a name="239"><span class="lineNum"> 239 </span> : : extern uint32_t pir_to_core_id(uint32_t pir);</a>
-<a name="240"><span class="lineNum"> 240 </span> : : extern uint32_t pir_to_thread_id(uint32_t pir);</a>
-<a name="241"><span class="lineNum"> 241 </span> : : </a>
-<a name="242"><span class="lineNum"> 242 </span> : : /* In P9 fused core mode, this is the &quot;fused&quot; core ID, in</a>
-<a name="243"><span class="lineNum"> 243 </span> : : * normal core mode or P8, this is the same as pir_to_core_id</a>
-<a name="244"><span class="lineNum"> 244 </span> : : */</a>
-<a name="245"><span class="lineNum"> 245 </span> : : extern uint32_t pir_to_fused_core_id(uint32_t pir);</a>
+<a name="235"><span class="lineNum"> 235 </span> : : /* Used by hw/slw.c */</a>
+<a name="236"><span class="lineNum"> 236 </span> : : uint64_t slw_base;</a>
+<a name="237"><span class="lineNum"> 237 </span> : : uint64_t slw_bar_size;</a>
+<a name="238"><span class="lineNum"> 238 </span> : : uint64_t slw_image_size;</a>
+<a name="239"><span class="lineNum"> 239 </span> : : </a>
+<a name="240"><span class="lineNum"> 240 </span> : : /* Used by hw/homer.c */</a>
+<a name="241"><span class="lineNum"> 241 </span> : : uint64_t homer_base;</a>
+<a name="242"><span class="lineNum"> 242 </span> : : uint64_t homer_size;</a>
+<a name="243"><span class="lineNum"> 243 </span> : : uint64_t occ_common_base;</a>
+<a name="244"><span class="lineNum"> 244 </span> : : uint64_t occ_common_size;</a>
+<a name="245"><span class="lineNum"> 245 </span> : : uint8_t throttle;</a>
<a name="246"><span class="lineNum"> 246 </span> : : </a>
-<a name="247"><span class="lineNum"> 247 </span> : : extern struct proc_chip *next_chip(struct proc_chip *chip);</a>
-<a name="248"><span class="lineNum"> 248 </span> : : </a>
-<a name="249"><span class="lineNum"> 249 </span> : : #define for_each_chip(__c) for (__c=next_chip(NULL); __c; __c=next_chip(__c))</a>
+<a name="247"><span class="lineNum"> 247 </span> : : /* Must hold capi_lock to change */</a>
+<a name="248"><span class="lineNum"> 248 </span> : : uint8_t capp_phb3_attached_mask;</a>
+<a name="249"><span class="lineNum"> 249 </span> : : uint8_t capp_ucode_loaded;</a>
<a name="250"><span class="lineNum"> 250 </span> : : </a>
-<a name="251"><span class="lineNum"> 251 </span> : : extern struct proc_chip *get_chip(uint32_t chip_id);</a>
-<a name="252"><span class="lineNum"> 252 </span> : : </a>
-<a name="253"><span class="lineNum"> 253 </span> : : extern void init_chips(void);</a>
-<a name="254"><span class="lineNum"> 254 </span> : : </a>
-<a name="255"><span class="lineNum"> 255 </span> : : /* helper to get number of chips in the system */</a>
-<a name="256"><span class="lineNum"> 256 </span> : : static inline int nr_chips(void)</a>
-<a name="257"><span class="lineNum"> 257 </span> : : {</a>
-<a name="258"><span class="lineNum"> 258 </span> : : struct proc_chip *chip;</a>
-<a name="259"><span class="lineNum"> 259 </span> : : int nr_chips = 0;</a>
-<a name="260"><span class="lineNum"> 260 </span> : : </a>
-<a name="261"><span class="lineNum"> 261 </span> : : for_each_chip(chip)</a>
-<a name="262"><span class="lineNum"> 262 </span> : : nr_chips++;</a>
-<a name="263"><span class="lineNum"> 263 </span> : : </a>
-<a name="264"><span class="lineNum"> 264 </span> : : return nr_chips;</a>
-<a name="265"><span class="lineNum"> 265 </span> : : }</a>
-<a name="266"><span class="lineNum"> 266 </span> : : </a>
-<a name="267"><span class="lineNum"> 267 </span> : : /* helper to get location code of a chip */</a>
-<a name="268"><span class="lineNum"> 268 </span> : : static inline const char *chip_loc_code(uint32_t chip_id)</a>
-<a name="269"><span class="lineNum"> 269 </span> : : {</a>
-<a name="270"><span class="lineNum"> 270 </span> : : struct proc_chip *chip;</a>
-<a name="271"><span class="lineNum"> 271 </span> : : </a>
-<a name="272"><span class="lineNum"> 272 </span> : : chip = get_chip(chip_id);</a>
-<a name="273"><span class="lineNum"> 273 </span> : : if (!chip)</a>
-<a name="274"><span class="lineNum"> 274 </span> : : return NULL;</a>
+<a name="251"><span class="lineNum"> 251 </span> : : /* Used by hw/centaur.c */</a>
+<a name="252"><span class="lineNum"> 252 </span> : : struct centaur_chip *centaurs;</a>
+<a name="253"><span class="lineNum"> 253 </span> : : </a>
+<a name="254"><span class="lineNum"> 254 </span> : : /* Used by hw/p8-i2c.c */</a>
+<a name="255"><span class="lineNum"> 255 </span> : : struct list_head i2cms;</a>
+<a name="256"><span class="lineNum"> 256 </span> : : </a>
+<a name="257"><span class="lineNum"> 257 </span> : : /* Used by hw/psi.c */</a>
+<a name="258"><span class="lineNum"> 258 </span> : : struct psi *psi;</a>
+<a name="259"><span class="lineNum"> 259 </span> : : </a>
+<a name="260"><span class="lineNum"> 260 </span> : : /* Used by hw/fsi-master.c */</a>
+<a name="261"><span class="lineNum"> 261 </span> : : struct mfsi *fsi_masters;</a>
+<a name="262"><span class="lineNum"> 262 </span> : : </a>
+<a name="263"><span class="lineNum"> 263 </span> : : /* Used by hw/xive.c */</a>
+<a name="264"><span class="lineNum"> 264 </span> : : struct xive *xive;</a>
+<a name="265"><span class="lineNum"> 265 </span> : : </a>
+<a name="266"><span class="lineNum"> 266 </span> : : struct vas *vas;</a>
+<a name="267"><span class="lineNum"> 267 </span> : : </a>
+<a name="268"><span class="lineNum"> 268 </span> : : /* Used by hw/nx-compress.c */</a>
+<a name="269"><span class="lineNum"> 269 </span> : : uint64_t nx_base;</a>
+<a name="270"><span class="lineNum"> 270 </span> : : /* location code of this chip */</a>
+<a name="271"><span class="lineNum"> 271 </span> : : const uint8_t *loc_code;</a>
+<a name="272"><span class="lineNum"> 272 </span> : : </a>
+<a name="273"><span class="lineNum"> 273 </span> : : /* Used by hw/sbe-p9.c */</a>
+<a name="274"><span class="lineNum"> 274 </span> : : struct p9_sbe *sbe;</a>
<a name="275"><span class="lineNum"> 275 </span> : : </a>
-<a name="276"><span class="lineNum"> 276 </span> : : return chip-&gt;loc_code;</a>
-<a name="277"><span class="lineNum"> 277 </span> : : }</a>
+<a name="276"><span class="lineNum"> 276 </span> : : /* Used by hw/dio-p9.c */</a>
+<a name="277"><span class="lineNum"> 277 </span> : : struct p9_dio *dio;</a>
<a name="278"><span class="lineNum"> 278 </span> : : </a>
-<a name="279"><span class="lineNum"> 279 </span> : : #endif /* __CHIP_H */</a>
-<a name="280"><span class="lineNum"> 280 </span> : : </a>
+<a name="279"><span class="lineNum"> 279 </span> : : /* Used during OCC init */</a>
+<a name="280"><span class="lineNum"> 280 </span> : : bool ex_present;</a>
+<a name="281"><span class="lineNum"> 281 </span> : : </a>
+<a name="282"><span class="lineNum"> 282 </span> : : /* Used by hw/vas.c on p10 */</a>
+<a name="283"><span class="lineNum"> 283 </span> : : uint32_t primary_topology;</a>
+<a name="284"><span class="lineNum"> 284 </span> : : };</a>
+<a name="285"><span class="lineNum"> 285 </span> : : </a>
+<a name="286"><span class="lineNum"> 286 </span> : : extern uint32_t pir_to_chip_id(uint32_t pir);</a>
+<a name="287"><span class="lineNum"> 287 </span> : : </a>
+<a name="288"><span class="lineNum"> 288 </span> : : /*</a>
+<a name="289"><span class="lineNum"> 289 </span> : : * Note: In P9 fused-core mode, these will return the &quot;normal&quot;</a>
+<a name="290"><span class="lineNum"> 290 </span> : : * core ID and thread ID (ie, thread ID 0..3)</a>
+<a name="291"><span class="lineNum"> 291 </span> : : */</a>
+<a name="292"><span class="lineNum"> 292 </span> : : extern uint32_t pir_to_core_id(uint32_t pir);</a>
+<a name="293"><span class="lineNum"> 293 </span> : : extern uint32_t pir_to_thread_id(uint32_t pir);</a>
+<a name="294"><span class="lineNum"> 294 </span> : : </a>
+<a name="295"><span class="lineNum"> 295 </span> : : /* In P9 fused core mode, this is the &quot;fused&quot; core ID, in</a>
+<a name="296"><span class="lineNum"> 296 </span> : : * normal core mode or P8, this is the same as pir_to_core_id</a>
+<a name="297"><span class="lineNum"> 297 </span> : : */</a>
+<a name="298"><span class="lineNum"> 298 </span> : : extern uint32_t pir_to_fused_core_id(uint32_t pir);</a>
+<a name="299"><span class="lineNum"> 299 </span> : : </a>
+<a name="300"><span class="lineNum"> 300 </span> : : extern struct proc_chip *next_chip(struct proc_chip *chip);</a>
+<a name="301"><span class="lineNum"> 301 </span> : : </a>
+<a name="302"><span class="lineNum"> 302 </span> : : #define for_each_chip(__c) for (__c=next_chip(NULL); __c; __c=next_chip(__c))</a>
+<a name="303"><span class="lineNum"> 303 </span> : : </a>
+<a name="304"><span class="lineNum"> 304 </span> : : extern struct proc_chip *get_chip(uint32_t chip_id);</a>
+<a name="305"><span class="lineNum"> 305 </span> : : </a>
+<a name="306"><span class="lineNum"> 306 </span> : : extern void init_chips(void);</a>
+<a name="307"><span class="lineNum"> 307 </span> : : </a>
+<a name="308"><span class="lineNum"> 308 </span> : : /* helper to get number of chips in the system */</a>
+<a name="309"><span class="lineNum"> 309 </span> : : static inline int nr_chips(void)</a>
+<a name="310"><span class="lineNum"> 310 </span> : : {</a>
+<a name="311"><span class="lineNum"> 311 </span> : : struct proc_chip *chip;</a>
+<a name="312"><span class="lineNum"> 312 </span> : : int nr_chips = 0;</a>
+<a name="313"><span class="lineNum"> 313 </span> : : </a>
+<a name="314"><span class="lineNum"> 314 </span> : : for_each_chip(chip)</a>
+<a name="315"><span class="lineNum"> 315 </span> : : nr_chips++;</a>
+<a name="316"><span class="lineNum"> 316 </span> : : </a>
+<a name="317"><span class="lineNum"> 317 </span> : : return nr_chips;</a>
+<a name="318"><span class="lineNum"> 318 </span> : : }</a>
+<a name="319"><span class="lineNum"> 319 </span> : : </a>
+<a name="320"><span class="lineNum"> 320 </span> : : /* helper to get location code of a chip */</a>
+<a name="321"><span class="lineNum"> 321 </span> : : static inline const char *chip_loc_code(uint32_t chip_id)</a>
+<a name="322"><span class="lineNum"> 322 </span> : : {</a>
+<a name="323"><span class="lineNum"> 323 </span> : : struct proc_chip *chip;</a>
+<a name="324"><span class="lineNum"> 324 </span> : : </a>
+<a name="325"><span class="lineNum"> 325 </span> : : chip = get_chip(chip_id);</a>
+<a name="326"><span class="lineNum"> 326 </span> : : if (!chip)</a>
+<a name="327"><span class="lineNum"> 327 </span> : : return NULL;</a>
+<a name="328"><span class="lineNum"> 328 </span> : : </a>
+<a name="329"><span class="lineNum"> 329 </span> : : return chip-&gt;loc_code;</a>
+<a name="330"><span class="lineNum"> 330 </span> : : }</a>
+<a name="331"><span class="lineNum"> 331 </span> : : </a>
+<a name="332"><span class="lineNum"> 332 </span> : : #endif /* __CHIP_H */</a>
+<a name="333"><span class="lineNum"> 333 </span> : : </a>
</pre>
</td>
</tr>
diff --git a/coverage-report/include/compiler.h.func-sort-c.html b/coverage-report/include/compiler.h.func-sort-c.html
index 247c9e8..ec316e3 100644
--- a/coverage-report/include/compiler.h.func-sort-c.html
+++ b/coverage-report/include/compiler.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/include/compiler.h.func.html b/coverage-report/include/compiler.h.func.html
index 73d2711..e664a02 100644
--- a/coverage-report/include/compiler.h.func.html
+++ b/coverage-report/include/compiler.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/include/compiler.h.gcov.html b/coverage-report/include/compiler.h.gcov.html
index 461935a..253a5fd 100644
--- a/coverage-report/include/compiler.h.gcov.html
+++ b/coverage-report/include/compiler.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -109,7 +109,19 @@
<a name="38"><span class="lineNum"> 38 </span> : : #define __tostr(x) #x</a>
<a name="39"><span class="lineNum"> 39 </span> : : #define tostr(x) __tostr(x)</a>
<a name="40"><span class="lineNum"> 40 </span> : : </a>
-<a name="41"><span class="lineNum"> 41 </span> : : #endif /* __COMPILER_H */</a>
+<a name="41"><span class="lineNum"> 41 </span> : : </a>
+<a name="42"><span class="lineNum"> 42 </span> : : #if __GNUC__ &gt;= 11</a>
+<a name="43"><span class="lineNum"> 43 </span> : : /* Compiler workaround to avoid compiler optimization warnings</a>
+<a name="44"><span class="lineNum"> 44 </span> : : * when assigning constant address to pointer and using memory</a>
+<a name="45"><span class="lineNum"> 45 </span> : : * functions such as memcpy and memset</a>
+<a name="46"><span class="lineNum"> 46 </span> : : */</a>
+<a name="47"><span class="lineNum"> 47 </span> : : #define skiboot_constant_addr volatile</a>
+<a name="48"><span class="lineNum"> 48 </span> : : #else</a>
+<a name="49"><span class="lineNum"> 49 </span> : : #define skiboot_constant_addr</a>
+<a name="50"><span class="lineNum"> 50 </span> : : #endif</a>
+<a name="51"><span class="lineNum"> 51 </span> : : </a>
+<a name="52"><span class="lineNum"> 52 </span> : : </a>
+<a name="53"><span class="lineNum"> 53 </span> : : #endif /* __COMPILER_H */</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/include/device.h.func-sort-c.html b/coverage-report/include/device.h.func-sort-c.html
index 3ecce1c..dd48977 100644
--- a/coverage-report/include/device.h.func-sort-c.html
+++ b/coverage-report/include/device.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@@ -78,11 +78,11 @@
</tr>
<tr>
<td class="coverFn"><a href="device.h.gcov.html#116">dt_add_property_u64</a></td>
- <td class="coverFnHi">47</td>
+ <td class="coverFnHi">46</td>
</tr>
<tr>
<td class="coverFn"><a href="device.h.gcov.html#60">new_phandle</a></td>
- <td class="coverFnHi">892</td>
+ <td class="coverFnHi">891</td>
</tr>
</table>
<br>
diff --git a/coverage-report/include/device.h.func.html b/coverage-report/include/device.h.func.html
index 942148a..f3abf6e 100644
--- a/coverage-report/include/device.h.func.html
+++ b/coverage-report/include/device.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@@ -70,7 +70,7 @@
</tr>
<tr>
<td class="coverFn"><a href="device.h.gcov.html#116">dt_add_property_u64</a></td>
- <td class="coverFnHi">47</td>
+ <td class="coverFnHi">46</td>
</tr>
<tr>
<td class="coverFn"><a href="device.h.gcov.html#50">get_last_phandle</a></td>
@@ -78,7 +78,7 @@
</tr>
<tr>
<td class="coverFn"><a href="device.h.gcov.html#60">new_phandle</a></td>
- <td class="coverFnHi">892</td>
+ <td class="coverFnHi">891</td>
</tr>
<tr>
<td class="coverFn"><a href="device.h.gcov.html#55">set_last_phandle</a></td>
diff --git a/coverage-report/include/device.h.gcov.html b/coverage-report/include/device.h.gcov.html
index f79adcc..5616aca 100644
--- a/coverage-report/include/device.h.gcov.html
+++ b/coverage-report/include/device.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@@ -130,9 +130,9 @@
<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 7 : last_phandle = phandle;</span></a>
<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 7 : }</span></a>
<a name="61"><span class="lineNum"> 61 </span> : : </a>
-<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 892 : static inline u32 new_phandle(void)</span></a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 891 : static inline u32 new_phandle(void)</span></a>
<a name="63"><span class="lineNum"> 63 </span> : : {</a>
-<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 892 : return ++last_phandle;</span></a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 891 : return ++last_phandle;</span></a>
<a name="65"><span class="lineNum"> 65 </span> : : }</a>
<a name="66"><span class="lineNum"> 66 </span> : : </a>
<a name="67"><span class="lineNum"> 67 </span> : : /* Add a child node. */</a>
@@ -186,10 +186,10 @@
<a name="115"><span class="lineNum"> 115 </span> : : const char *name,</a>
<a name="116"><span class="lineNum"> 116 </span> : : int count, ...);</a>
<a name="117"><span class="lineNum"> 117 </span> : : </a>
-<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 47 : static inline struct dt_property *dt_add_property_u64(struct dt_node *node,</span></a>
+<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 46 : static inline struct dt_property *dt_add_property_u64(struct dt_node *node,</span></a>
<a name="119"><span class="lineNum"> 119 </span> : : const char *name, u64 val)</a>
<a name="120"><span class="lineNum"> 120 </span> : : {</a>
-<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 47 : return dt_add_property_cells(node, name, (u32)(val &gt;&gt; 32),</span></a>
+<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 46 : return dt_add_property_cells(node, name, (u32)(val &gt;&gt; 32),</span></a>
<a name="122"><span class="lineNum"> 122 </span> : : (u32)(val &amp; 0xffffffffUL));</a>
<a name="123"><span class="lineNum"> 123 </span> : : }</a>
<a name="124"><span class="lineNum"> 124 </span> : : </a>
diff --git a/coverage-report/include/index-sort-b.html b/coverage-report/include/index-sort-b.html
index cc1ed66..cc5d734 100644
--- a/coverage-report/include/index-sort-b.html
+++ b/coverage-report/include/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">24</td>
@@ -94,6 +94,18 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="pci.h.gcov.html">pci.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
+ </td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 2</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 1</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="time-utils.h.gcov.html">time-utils.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
@@ -106,38 +118,38 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="lock.h.gcov.html">lock.h</a></td>
+ <td class="coverFile"><a href="processor.h.gcov.html">processor.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=33 height=10 alt="33.3%"><img src="../snow.png" width=67 height=10 alt="33.3%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerLo">33.3&nbsp;%</td>
+ <td class="coverNumLo">4 / 12</td>
+ <td class="coverPerLo">50.0&nbsp;%</td>
+ <td class="coverNumLo">1 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="opal-internal.h.gcov.html">opal-internal.h</a></td>
+ <td class="coverFile"><a href="skiboot.h.gcov.html">skiboot.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">8 / 8</td>
+ <td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="skiboot.h.gcov.html">skiboot.h</a></td>
+ <td class="coverFile"><a href="opal-internal.h.gcov.html">opal-internal.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">4 / 4</td>
+ <td class="coverNumHi">8 / 8</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -166,50 +178,38 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="bitmap.h.gcov.html">bitmap.h</a></td>
+ <td class="coverFile"><a href="timebase.h.gcov.html">timebase.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">8 / 8</td>
+ <td class="coverNumHi">18 / 18</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
- <td class="coverFile"><a href="processor.h.gcov.html">processor.h</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=33 height=10 alt="33.3%"><img src="../snow.png" width=67 height=10 alt="33.3%"></td></tr></table>
- </td>
- <td class="coverPerLo">33.3&nbsp;%</td>
- <td class="coverNumLo">4 / 12</td>
- <td class="coverPerLo">50.0&nbsp;%</td>
- <td class="coverNumLo">1 / 2</td>
+ <td class="coverNumHi">8 / 8</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="pci.h.gcov.html">pci.h</a></td>
+ <td class="coverFile"><a href="lock.h.gcov.html">lock.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 2</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 1</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">3 / 3</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="timebase.h.gcov.html">timebase.h</a></td>
+ <td class="coverFile"><a href="bitmap.h.gcov.html">bitmap.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">18 / 18</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">8 / 8</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/include/index-sort-f.html b/coverage-report/include/index-sort-f.html
index 19a72ef..cd16487 100644
--- a/coverage-report/include/index-sort-f.html
+++ b/coverage-report/include/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">24</td>
@@ -118,36 +118,36 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="lock.h.gcov.html">lock.h</a></td>
+ <td class="coverFile"><a href="opal-internal.h.gcov.html">opal-internal.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
+ <td class="coverNumHi">8 / 8</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="opal-internal.h.gcov.html">opal-internal.h</a></td>
+ <td class="coverFile"><a href="chip.h.gcov.html">chip.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">8 / 8</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="chip.h.gcov.html">chip.h</a></td>
+ <td class="coverFile"><a href="lock.h.gcov.html">lock.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/include/index-sort-l.html b/coverage-report/include/index-sort-l.html
index 410292a..f80cde0 100644
--- a/coverage-report/include/index-sort-l.html
+++ b/coverage-report/include/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">24</td>
diff --git a/coverage-report/include/index.html b/coverage-report/include/index.html
index ae64a83..e79abc0 100644
--- a/coverage-report/include/index.html
+++ b/coverage-report/include/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">24</td>
diff --git a/coverage-report/include/lock.h.func-sort-c.html b/coverage-report/include/lock.h.func-sort-c.html
index 051cd27..b1b7741 100644
--- a/coverage-report/include/lock.h.func-sort-c.html
+++ b/coverage-report/include/lock.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -70,7 +70,7 @@
</tr>
<tr>
<td class="coverFn"><a href="lock.h.gcov.html#70">init_lock</a></td>
- <td class="coverFnHi">159</td>
+ <td class="coverFnHi">164</td>
</tr>
</table>
<br>
diff --git a/coverage-report/include/lock.h.func.html b/coverage-report/include/lock.h.func.html
index 4488f15..9afb341 100644
--- a/coverage-report/include/lock.h.func.html
+++ b/coverage-report/include/lock.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -70,7 +70,7 @@
</tr>
<tr>
<td class="coverFn"><a href="lock.h.gcov.html#70">init_lock</a></td>
- <td class="coverFnHi">159</td>
+ <td class="coverFnHi">164</td>
</tr>
</table>
<br>
diff --git a/coverage-report/include/lock.h.gcov.html b/coverage-report/include/lock.h.gcov.html
index 14af695..8115900 100644
--- a/coverage-report/include/lock.h.gcov.html
+++ b/coverage-report/include/lock.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -140,10 +140,10 @@
<a name="69"><span class="lineNum"> 69 </span> : : </a>
<a name="70"><span class="lineNum"> 70 </span> : : extern bool bust_locks;</a>
<a name="71"><span class="lineNum"> 71 </span> : : </a>
-<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 159 : static inline void init_lock(struct lock *l)</span></a>
+<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 164 : static inline void init_lock(struct lock *l)</span></a>
<a name="73"><span class="lineNum"> 73 </span> : : {</a>
-<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 159 : *l = (struct lock)LOCK_UNLOCKED;</span></a>
-<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 159 : }</span></a>
+<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 164 : *l = (struct lock)LOCK_UNLOCKED;</span></a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 164 : }</span></a>
<a name="76"><span class="lineNum"> 76 </span> : : </a>
<a name="77"><span class="lineNum"> 77 </span> : : #define LOCK_CALLER __FILE__ &quot;:&quot; stringify(__LINE__)</a>
<a name="78"><span class="lineNum"> 78 </span> : : </a>
diff --git a/coverage-report/include/opal-internal.h.func-sort-c.html b/coverage-report/include/opal-internal.h.func-sort-c.html
index 2ea83e9..b60f4be 100644
--- a/coverage-report/include/opal-internal.h.func-sort-c.html
+++ b/coverage-report/include/opal-internal.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/include/opal-internal.h.func.html b/coverage-report/include/opal-internal.h.func.html
index 25d9b27..c770c99 100644
--- a/coverage-report/include/opal-internal.h.func.html
+++ b/coverage-report/include/opal-internal.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/include/opal-internal.h.gcov.html b/coverage-report/include/opal-internal.h.gcov.html
index cb1354e..9ca895d 100644
--- a/coverage-report/include/opal-internal.h.gcov.html
+++ b/coverage-report/include/opal-internal.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/include/pci.h.func-sort-c.html b/coverage-report/include/pci.h.func-sort-c.html
index e4cf179..206ef06 100644
--- a/coverage-report/include/pci.h.func-sort-c.html
+++ b/coverage-report/include/pci.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/include/pci.h.func.html b/coverage-report/include/pci.h.func.html
index 313891f..1e2eaf8 100644
--- a/coverage-report/include/pci.h.func.html
+++ b/coverage-report/include/pci.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/include/pci.h.gcov.html b/coverage-report/include/pci.h.gcov.html
index e372c42..a60cf69 100644
--- a/coverage-report/include/pci.h.gcov.html
+++ b/coverage-report/include/pci.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -423,7 +423,7 @@
<a name="352"><span class="lineNum"> 352 </span> : : phb_type_pcie_v4,</a>
<a name="353"><span class="lineNum"> 353 </span> : : phb_type_npu_v2,</a>
<a name="354"><span class="lineNum"> 354 </span> : : phb_type_npu_v2_opencapi,</a>
-<a name="355"><span class="lineNum"> 355 </span> : : phb_type_npu_v3,</a>
+<a name="355"><span class="lineNum"> 355 </span> : : phb_type_pau_opencapi,</a>
<a name="356"><span class="lineNum"> 356 </span> : : };</a>
<a name="357"><span class="lineNum"> 357 </span> : : </a>
<a name="358"><span class="lineNum"> 358 </span> : : /* Generic PCI NVRAM flags */</a>
diff --git a/coverage-report/include/processor.h.func-sort-c.html b/coverage-report/include/processor.h.func-sort-c.html
index 2630253..85ba3a4 100644
--- a/coverage-report/include/processor.h.func-sort-c.html
+++ b/coverage-report/include/processor.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -69,11 +69,11 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="processor.h.gcov.html#249">is_power9c</a></td>
+ <td class="coverFn"><a href="processor.h.gcov.html#272">is_power9c</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="processor.h.gcov.html#221">is_power9n</a></td>
+ <td class="coverFn"><a href="processor.h.gcov.html#238">is_power9n</a></td>
<td class="coverFnHi">4</td>
</tr>
</table>
diff --git a/coverage-report/include/processor.h.func.html b/coverage-report/include/processor.h.func.html
index e2fbb2c..44dfbeb 100644
--- a/coverage-report/include/processor.h.func.html
+++ b/coverage-report/include/processor.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -69,11 +69,11 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="processor.h.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="processor.h.gcov.html#249">is_power9c</a></td>
+ <td class="coverFn"><a href="processor.h.gcov.html#272">is_power9c</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="processor.h.gcov.html#221">is_power9n</a></td>
+ <td class="coverFn"><a href="processor.h.gcov.html#238">is_power9n</a></td>
<td class="coverFnHi">4</td>
</tr>
</table>
diff --git a/coverage-report/include/processor.h.gcov.html b/coverage-report/include/processor.h.gcov.html
index dabae75..57c620f 100644
--- a/coverage-report/include/processor.h.gcov.html
+++ b/coverage-report/include/processor.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -98,396 +98,419 @@
<a name="27"><span class="lineNum"> 27 </span> : : #define MSR_LE PPC_BIT(63) /* Little Endian */</a>
<a name="28"><span class="lineNum"> 28 </span> : : </a>
<a name="29"><span class="lineNum"> 29 </span> : : /* PIR */</a>
-<a name="30"><span class="lineNum"> 30 </span> : : #define SPR_PIR_P9_MASK 0x7fff /* Mask of implemented bits */</a>
-<a name="31"><span class="lineNum"> 31 </span> : : #define SPR_PIR_P8_MASK 0x1fff /* Mask of implemented bits */</a>
-<a name="32"><span class="lineNum"> 32 </span> : : </a>
-<a name="33"><span class="lineNum"> 33 </span> : : /* SPR register definitions */</a>
-<a name="34"><span class="lineNum"> 34 </span> : : #define SPR_DSCR 0x011 /* RW: Data stream control reg */</a>
-<a name="35"><span class="lineNum"> 35 </span> : : #define SPR_DSISR 0x012 /* RW: Data storage interrupt status reg */</a>
-<a name="36"><span class="lineNum"> 36 </span> : : #define SPR_DAR 0x013 /* RW: Data address reg */</a>
-<a name="37"><span class="lineNum"> 37 </span> : : #define SPR_DEC 0x016 /* RW: Decrement Register */</a>
-<a name="38"><span class="lineNum"> 38 </span> : : #define SPR_SDR1 0x019</a>
-<a name="39"><span class="lineNum"> 39 </span> : : #define SPR_SRR0 0x01a /* RW: Exception save/restore reg 0 */</a>
-<a name="40"><span class="lineNum"> 40 </span> : : #define SPR_SRR1 0x01b /* RW: Exception save/restore reg 1 */</a>
-<a name="41"><span class="lineNum"> 41 </span> : : #define SPR_CFAR 0x01c /* RW: Come From Address Register */</a>
-<a name="42"><span class="lineNum"> 42 </span> : : #define SPR_AMR 0x01d /* RW: Authority Mask Register */</a>
-<a name="43"><span class="lineNum"> 43 </span> : : #define SPR_IAMR 0x03d /* RW: Instruction Authority Mask Register */</a>
-<a name="44"><span class="lineNum"> 44 </span> : : #define SPR_RPR 0x0ba /* RW: Relative Priority Register */</a>
-<a name="45"><span class="lineNum"> 45 </span> : : #define SPR_TBRL 0x10c /* RO: Timebase low */</a>
-<a name="46"><span class="lineNum"> 46 </span> : : #define SPR_TBRU 0x10d /* RO: Timebase high */</a>
-<a name="47"><span class="lineNum"> 47 </span> : : #define SPR_SPRC 0x114 /* RW: Access to uArch SPRs (ex SCOMC) */</a>
-<a name="48"><span class="lineNum"> 48 </span> : : #define SPR_SPRD 0x115 /* RW: Access to uArch SPRs (ex SCOMD) */</a>
-<a name="49"><span class="lineNum"> 49 </span> : : #define SPR_SCOMC 0x114 /* RW: SCOM Control - old name of SPRC */</a>
-<a name="50"><span class="lineNum"> 50 </span> : : #define SPR_SCOMD 0x115 /* RW: SCOM Data - old name of SPRD */</a>
-<a name="51"><span class="lineNum"> 51 </span> : : #define SPR_TBWL 0x11c /* RW: Timebase low */</a>
-<a name="52"><span class="lineNum"> 52 </span> : : #define SPR_TBWU 0x11d /* RW: Timebase high */</a>
-<a name="53"><span class="lineNum"> 53 </span> : : #define SPR_TBU40 0x11e /* RW: Timebase Upper 40 bit */</a>
-<a name="54"><span class="lineNum"> 54 </span> : : #define SPR_PVR 0x11f /* RO: Processor version register */</a>
-<a name="55"><span class="lineNum"> 55 </span> : : #define SPR_HSPRG0 0x130 /* RW: Hypervisor scratch 0 */</a>
-<a name="56"><span class="lineNum"> 56 </span> : : #define SPR_HSPRG1 0x131 /* RW: Hypervisor scratch 1 */</a>
-<a name="57"><span class="lineNum"> 57 </span> : : #define SPR_SPURR 0x134 /* RW: Scaled Processor Utilization Resource */</a>
-<a name="58"><span class="lineNum"> 58 </span> : : #define SPR_PURR 0x135 /* RW: Processor Utilization Resource reg */</a>
-<a name="59"><span class="lineNum"> 59 </span> : : #define SPR_HDEC 0x136 /* RW: Hypervisor Decrementer */</a>
-<a name="60"><span class="lineNum"> 60 </span> : : #define SPR_HRMOR 0x139 /* RW: Hypervisor Real Mode Offset reg */</a>
-<a name="61"><span class="lineNum"> 61 </span> : : #define SPR_HSRR0 0x13a /* RW: HV Exception save/restore reg 0 */</a>
-<a name="62"><span class="lineNum"> 62 </span> : : #define SPR_HSRR1 0x13b /* RW: HV Exception save/restore reg 1 */</a>
-<a name="63"><span class="lineNum"> 63 </span> : : #define SPR_TFMR 0x13d</a>
-<a name="64"><span class="lineNum"> 64 </span> : : #define SPR_LPCR 0x13e</a>
-<a name="65"><span class="lineNum"> 65 </span> : : #define SPR_HMER 0x150 /* Hypervisor Maintenance Exception */</a>
-<a name="66"><span class="lineNum"> 66 </span> : : #define SPR_HMEER 0x151 /* HMER interrupt enable mask */</a>
-<a name="67"><span class="lineNum"> 67 </span> : : #define SPR_PCR 0x152</a>
-<a name="68"><span class="lineNum"> 68 </span> : : #define SPR_AMOR 0x15d</a>
-<a name="69"><span class="lineNum"> 69 </span> : : #define SPR_USRR0 0x1fa /* RW: Ultravisor Save/Restore Register 0 */</a>
-<a name="70"><span class="lineNum"> 70 </span> : : #define SPR_USRR1 0x1fb /* RW: Ultravisor Save/Restore Register 1 */</a>
-<a name="71"><span class="lineNum"> 71 </span> : : #define SPR_SMFCTRL 0x1ff /* RW: Secure Memory Facility Control */</a>
-<a name="72"><span class="lineNum"> 72 </span> : : #define SPR_PSSCR 0x357 /* RW: Stop status and control (ISA 3) */</a>
-<a name="73"><span class="lineNum"> 73 </span> : : #define SPR_TSCR 0x399</a>
-<a name="74"><span class="lineNum"> 74 </span> : : #define SPR_HID0 0x3f0</a>
-<a name="75"><span class="lineNum"> 75 </span> : : #define SPR_HID1 0x3f1</a>
-<a name="76"><span class="lineNum"> 76 </span> : : #define SPR_HID2 0x3f8</a>
-<a name="77"><span class="lineNum"> 77 </span> : : #define SPR_HID4 0x3f4</a>
-<a name="78"><span class="lineNum"> 78 </span> : : #define SPR_HID5 0x3f6</a>
-<a name="79"><span class="lineNum"> 79 </span> : : #define SPR_PIR 0x3ff /* RO: Processor Identification */</a>
-<a name="80"><span class="lineNum"> 80 </span> : : </a>
-<a name="81"><span class="lineNum"> 81 </span> : : /* Bits in SRR1 */</a>
+<a name="30"><span class="lineNum"> 30 </span> : : #define SPR_PIR_P10_MASK 0x7fff /* Mask of implemented bits */</a>
+<a name="31"><span class="lineNum"> 31 </span> : : #define SPR_PIR_P9_MASK 0x7fff /* Mask of implemented bits */</a>
+<a name="32"><span class="lineNum"> 32 </span> : : #define SPR_PIR_P8_MASK 0x1fff /* Mask of implemented bits */</a>
+<a name="33"><span class="lineNum"> 33 </span> : : </a>
+<a name="34"><span class="lineNum"> 34 </span> : : /* SPR register definitions */</a>
+<a name="35"><span class="lineNum"> 35 </span> : : #define SPR_DSCR 0x011 /* RW: Data stream control reg */</a>
+<a name="36"><span class="lineNum"> 36 </span> : : #define SPR_DSISR 0x012 /* RW: Data storage interrupt status reg */</a>
+<a name="37"><span class="lineNum"> 37 </span> : : #define SPR_DAR 0x013 /* RW: Data address reg */</a>
+<a name="38"><span class="lineNum"> 38 </span> : : #define SPR_DEC 0x016 /* RW: Decrement Register */</a>
+<a name="39"><span class="lineNum"> 39 </span> : : #define SPR_SDR1 0x019</a>
+<a name="40"><span class="lineNum"> 40 </span> : : #define SPR_SRR0 0x01a /* RW: Exception save/restore reg 0 */</a>
+<a name="41"><span class="lineNum"> 41 </span> : : #define SPR_SRR1 0x01b /* RW: Exception save/restore reg 1 */</a>
+<a name="42"><span class="lineNum"> 42 </span> : : #define SPR_CFAR 0x01c /* RW: Come From Address Register */</a>
+<a name="43"><span class="lineNum"> 43 </span> : : #define SPR_AMR 0x01d /* RW: Authority Mask Register */</a>
+<a name="44"><span class="lineNum"> 44 </span> : : #define SPR_IAMR 0x03d /* RW: Instruction Authority Mask Register */</a>
+<a name="45"><span class="lineNum"> 45 </span> : : #define SPR_RPR 0x0ba /* RW: Relative Priority Register */</a>
+<a name="46"><span class="lineNum"> 46 </span> : : #define SPR_TBRL 0x10c /* RO: Timebase low */</a>
+<a name="47"><span class="lineNum"> 47 </span> : : #define SPR_TBRU 0x10d /* RO: Timebase high */</a>
+<a name="48"><span class="lineNum"> 48 </span> : : #define SPR_SPRC 0x114 /* RW: Access to uArch SPRs (ex SCOMC) */</a>
+<a name="49"><span class="lineNum"> 49 </span> : : #define SPR_SPRD 0x115 /* RW: Access to uArch SPRs (ex SCOMD) */</a>
+<a name="50"><span class="lineNum"> 50 </span> : : #define SPR_SCOMC 0x114 /* RW: SCOM Control - old name of SPRC */</a>
+<a name="51"><span class="lineNum"> 51 </span> : : #define SPR_SCOMD 0x115 /* RW: SCOM Data - old name of SPRD */</a>
+<a name="52"><span class="lineNum"> 52 </span> : : #define SPR_TBWL 0x11c /* RW: Timebase low */</a>
+<a name="53"><span class="lineNum"> 53 </span> : : #define SPR_TBWU 0x11d /* RW: Timebase high */</a>
+<a name="54"><span class="lineNum"> 54 </span> : : #define SPR_TBU40 0x11e /* RW: Timebase Upper 40 bit */</a>
+<a name="55"><span class="lineNum"> 55 </span> : : #define SPR_PVR 0x11f /* RO: Processor version register */</a>
+<a name="56"><span class="lineNum"> 56 </span> : : #define SPR_HSPRG0 0x130 /* RW: Hypervisor scratch 0 */</a>
+<a name="57"><span class="lineNum"> 57 </span> : : #define SPR_HSPRG1 0x131 /* RW: Hypervisor scratch 1 */</a>
+<a name="58"><span class="lineNum"> 58 </span> : : #define SPR_SPURR 0x134 /* RW: Scaled Processor Utilization Resource */</a>
+<a name="59"><span class="lineNum"> 59 </span> : : #define SPR_PURR 0x135 /* RW: Processor Utilization Resource reg */</a>
+<a name="60"><span class="lineNum"> 60 </span> : : #define SPR_HDEC 0x136 /* RW: Hypervisor Decrementer */</a>
+<a name="61"><span class="lineNum"> 61 </span> : : #define SPR_HRMOR 0x139 /* RW: Hypervisor Real Mode Offset reg */</a>
+<a name="62"><span class="lineNum"> 62 </span> : : #define SPR_HSRR0 0x13a /* RW: HV Exception save/restore reg 0 */</a>
+<a name="63"><span class="lineNum"> 63 </span> : : #define SPR_HSRR1 0x13b /* RW: HV Exception save/restore reg 1 */</a>
+<a name="64"><span class="lineNum"> 64 </span> : : #define SPR_TFMR 0x13d</a>
+<a name="65"><span class="lineNum"> 65 </span> : : #define SPR_LPCR 0x13e</a>
+<a name="66"><span class="lineNum"> 66 </span> : : #define SPR_HMER 0x150 /* Hypervisor Maintenance Exception */</a>
+<a name="67"><span class="lineNum"> 67 </span> : : #define SPR_HMEER 0x151 /* HMER interrupt enable mask */</a>
+<a name="68"><span class="lineNum"> 68 </span> : : #define SPR_PCR 0x152</a>
+<a name="69"><span class="lineNum"> 69 </span> : : #define SPR_AMOR 0x15d</a>
+<a name="70"><span class="lineNum"> 70 </span> : : #define SPR_USRR0 0x1fa /* RW: Ultravisor Save/Restore Register 0 */</a>
+<a name="71"><span class="lineNum"> 71 </span> : : #define SPR_USRR1 0x1fb /* RW: Ultravisor Save/Restore Register 1 */</a>
+<a name="72"><span class="lineNum"> 72 </span> : : #define SPR_SMFCTRL 0x1ff /* RW: Secure Memory Facility Control */</a>
+<a name="73"><span class="lineNum"> 73 </span> : : #define SPR_PSSCR 0x357 /* RW: Stop status and control (ISA 3) */</a>
+<a name="74"><span class="lineNum"> 74 </span> : : #define SPR_PPR32 0x382</a>
+<a name="75"><span class="lineNum"> 75 </span> : : #define SPR_TSCR 0x399</a>
+<a name="76"><span class="lineNum"> 76 </span> : : #define SPR_HID0 0x3f0</a>
+<a name="77"><span class="lineNum"> 77 </span> : : #define SPR_HID1 0x3f1</a>
+<a name="78"><span class="lineNum"> 78 </span> : : #define SPR_HID2 0x3f8</a>
+<a name="79"><span class="lineNum"> 79 </span> : : #define SPR_HID4 0x3f4</a>
+<a name="80"><span class="lineNum"> 80 </span> : : #define SPR_HID5 0x3f6</a>
+<a name="81"><span class="lineNum"> 81 </span> : : #define SPR_PIR 0x3ff /* RO: Processor Identification */</a>
<a name="82"><span class="lineNum"> 82 </span> : : </a>
-<a name="83"><span class="lineNum"> 83 </span> : : #define SPR_SRR1_PM_WAKE_MASK 0x3c0000 /* PM wake reason for P8/9 */</a>
-<a name="84"><span class="lineNum"> 84 </span> : : #define SPR_SRR1_PM_WAKE_SRESET 0x100000</a>
-<a name="85"><span class="lineNum"> 85 </span> : : #define SPR_SRR1_PM_WAKE_MCE 0x3c0000 /* Use reserved value for MCE */</a>
-<a name="86"><span class="lineNum"> 86 </span> : : </a>
-<a name="87"><span class="lineNum"> 87 </span> : : /* Bits in LPCR */</a>
+<a name="83"><span class="lineNum"> 83 </span> : : /* Bits in SRR1 */</a>
+<a name="84"><span class="lineNum"> 84 </span> : : </a>
+<a name="85"><span class="lineNum"> 85 </span> : : #define SPR_SRR1_PM_WAKE_MASK 0x3c0000 /* PM wake reason for P8/9 */</a>
+<a name="86"><span class="lineNum"> 86 </span> : : #define SPR_SRR1_PM_WAKE_SRESET 0x100000</a>
+<a name="87"><span class="lineNum"> 87 </span> : : #define SPR_SRR1_PM_WAKE_MCE 0x3c0000 /* Use reserved value for MCE */</a>
<a name="88"><span class="lineNum"> 88 </span> : : </a>
-<a name="89"><span class="lineNum"> 89 </span> : : /* Powersave Exit Cause Enable is different on each generation */</a>
-<a name="90"><span class="lineNum"> 90 </span> : : #define SPR_LPCR_P8_PECE PPC_BITMASK(47,51)</a>
-<a name="91"><span class="lineNum"> 91 </span> : : #define SPR_LPCR_P8_PECE0 PPC_BIT(47) /* Wake on priv doorbell */</a>
-<a name="92"><span class="lineNum"> 92 </span> : : #define SPR_LPCR_P8_PECE1 PPC_BIT(48) /* Wake on hv doorbell */</a>
-<a name="93"><span class="lineNum"> 93 </span> : : #define SPR_LPCR_P8_PECE2 PPC_BIT(49) /* Wake on external interrupts */</a>
-<a name="94"><span class="lineNum"> 94 </span> : : #define SPR_LPCR_P8_PECE3 PPC_BIT(50) /* Wake on decrementer */</a>
-<a name="95"><span class="lineNum"> 95 </span> : : #define SPR_LPCR_P8_PECE4 PPC_BIT(51) /* Wake on MCs, HMIs, etc... */</a>
-<a name="96"><span class="lineNum"> 96 </span> : : </a>
-<a name="97"><span class="lineNum"> 97 </span> : : #define SPR_LPCR_P9_PECE (PPC_BITMASK(47,51) | PPC_BITMASK(17,17))</a>
-<a name="98"><span class="lineNum"> 98 </span> : : #define SPR_LPCR_P9_PECEU0 PPC_BIT(17) /* Wake on HVI */</a>
-<a name="99"><span class="lineNum"> 99 </span> : : #define SPR_LPCR_P9_PECEL0 PPC_BIT(47) /* Wake on priv doorbell */</a>
-<a name="100"><span class="lineNum"> 100 </span> : : #define SPR_LPCR_P9_PECEL1 PPC_BIT(48) /* Wake on hv doorbell */</a>
-<a name="101"><span class="lineNum"> 101 </span> : : #define SPR_LPCR_P9_PECEL2 PPC_BIT(49) /* Wake on external interrupts */</a>
-<a name="102"><span class="lineNum"> 102 </span> : : #define SPR_LPCR_P9_PECEL3 PPC_BIT(50) /* Wake on decrementer */</a>
-<a name="103"><span class="lineNum"> 103 </span> : : #define SPR_LPCR_P9_PECEL4 PPC_BIT(51) /* Wake on MCs, HMIs, etc... */</a>
-<a name="104"><span class="lineNum"> 104 </span> : : #define SPR_LPCR_P9_LD PPC_BIT(46) /* Large decrementer mode bit */</a>
-<a name="105"><span class="lineNum"> 105 </span> : : </a>
-<a name="106"><span class="lineNum"> 106 </span> : : </a>
-<a name="107"><span class="lineNum"> 107 </span> : : /* Bits in TFMR - control bits */</a>
-<a name="108"><span class="lineNum"> 108 </span> : : #define SPR_TFMR_MAX_CYC_BET_STEPS PPC_BITMASK(0,7)</a>
-<a name="109"><span class="lineNum"> 109 </span> : : #define SPR_TFMR_N_CLKS_PER_STEP PPC_BITMASK(8,9)</a>
-<a name="110"><span class="lineNum"> 110 </span> : : #define SPR_TFMR_MASK_HMI PPC_BIT(10)</a>
-<a name="111"><span class="lineNum"> 111 </span> : : #define SPR_TFMR_SYNC_BIT_SEL PPC_BITMASK(11,13)</a>
-<a name="112"><span class="lineNum"> 112 </span> : : #define SPR_TFMR_TB_ECLIPZ PPC_BIT(14)</a>
-<a name="113"><span class="lineNum"> 113 </span> : : #define SPR_TFMR_LOAD_TOD_MOD PPC_BIT(16)</a>
-<a name="114"><span class="lineNum"> 114 </span> : : #define SPR_TFMR_MOVE_CHIP_TOD_TO_TB PPC_BIT(18)</a>
-<a name="115"><span class="lineNum"> 115 </span> : : #define SPR_TFMR_CLEAR_TB_ERRORS PPC_BIT(24)</a>
-<a name="116"><span class="lineNum"> 116 </span> : : /* Bits in TFMR - thread indep. status bits */</a>
-<a name="117"><span class="lineNum"> 117 </span> : : #define SPR_TFMR_HDEC_PARITY_ERROR PPC_BIT(26)</a>
-<a name="118"><span class="lineNum"> 118 </span> : : #define SPR_TFMR_TBST_CORRUPT PPC_BIT(27)</a>
-<a name="119"><span class="lineNum"> 119 </span> : : #define SPR_TFMR_TBST_ENCODED PPC_BITMASK(28,31)</a>
-<a name="120"><span class="lineNum"> 120 </span> : : #define SPR_TFMR_TBST_LAST PPC_BITMASK(32,35)</a>
-<a name="121"><span class="lineNum"> 121 </span> : : #define SPR_TFMR_TB_ENABLED PPC_BIT(40)</a>
-<a name="122"><span class="lineNum"> 122 </span> : : #define SPR_TFMR_TB_VALID PPC_BIT(41)</a>
-<a name="123"><span class="lineNum"> 123 </span> : : #define SPR_TFMR_TB_SYNC_OCCURED PPC_BIT(42)</a>
-<a name="124"><span class="lineNum"> 124 </span> : : #define SPR_TFMR_TB_MISSING_SYNC PPC_BIT(43)</a>
-<a name="125"><span class="lineNum"> 125 </span> : : #define SPR_TFMR_TB_MISSING_STEP PPC_BIT(44)</a>
-<a name="126"><span class="lineNum"> 126 </span> : : #define SPR_TFMR_TB_RESIDUE_ERR PPC_BIT(45)</a>
-<a name="127"><span class="lineNum"> 127 </span> : : #define SPR_TFMR_FW_CONTROL_ERR PPC_BIT(46)</a>
-<a name="128"><span class="lineNum"> 128 </span> : : #define SPR_TFMR_CHIP_TOD_STATUS PPC_BITMASK(47,50)</a>
-<a name="129"><span class="lineNum"> 129 </span> : : #define SPR_TFMR_CHIP_TOD_INTERRUPT PPC_BIT(51)</a>
-<a name="130"><span class="lineNum"> 130 </span> : : #define SPR_TFMR_CHIP_TOD_TIMEOUT PPC_BIT(54)</a>
-<a name="131"><span class="lineNum"> 131 </span> : : #define SPR_TFMR_CHIP_TOD_PARITY_ERR PPC_BIT(56)</a>
-<a name="132"><span class="lineNum"> 132 </span> : : /* Bits in TFMR - thread specific. status bits */</a>
-<a name="133"><span class="lineNum"> 133 </span> : : #define SPR_TFMR_PURR_PARITY_ERR PPC_BIT(57)</a>
-<a name="134"><span class="lineNum"> 134 </span> : : #define SPR_TFMR_SPURR_PARITY_ERR PPC_BIT(58)</a>
-<a name="135"><span class="lineNum"> 135 </span> : : #define SPR_TFMR_DEC_PARITY_ERR PPC_BIT(59)</a>
-<a name="136"><span class="lineNum"> 136 </span> : : #define SPR_TFMR_TFMR_CORRUPT PPC_BIT(60)</a>
-<a name="137"><span class="lineNum"> 137 </span> : : #define SPR_TFMR_PURR_OVERFLOW PPC_BIT(61)</a>
-<a name="138"><span class="lineNum"> 138 </span> : : #define SPR_TFMR_SPURR_OVERFLOW PPC_BIT(62)</a>
-<a name="139"><span class="lineNum"> 139 </span> : : </a>
-<a name="140"><span class="lineNum"> 140 </span> : : /* Bits in HMER/HMEER */</a>
-<a name="141"><span class="lineNum"> 141 </span> : : #define SPR_HMER_MALFUNCTION_ALERT PPC_BIT(0)</a>
-<a name="142"><span class="lineNum"> 142 </span> : : #define SPR_HMER_PROC_RECV_DONE PPC_BIT(2)</a>
-<a name="143"><span class="lineNum"> 143 </span> : : #define SPR_HMER_PROC_RECV_ERROR_MASKED PPC_BIT(3)</a>
-<a name="144"><span class="lineNum"> 144 </span> : : #define SPR_HMER_TFAC_ERROR PPC_BIT(4)</a>
-<a name="145"><span class="lineNum"> 145 </span> : : #define SPR_HMER_TFMR_PARITY_ERROR PPC_BIT(5)</a>
-<a name="146"><span class="lineNum"> 146 </span> : : #define SPR_HMER_XSCOM_FAIL PPC_BIT(8)</a>
-<a name="147"><span class="lineNum"> 147 </span> : : #define SPR_HMER_XSCOM_DONE PPC_BIT(9)</a>
-<a name="148"><span class="lineNum"> 148 </span> : : #define SPR_HMER_PROC_RECV_AGAIN PPC_BIT(11)</a>
-<a name="149"><span class="lineNum"> 149 </span> : : #define SPR_HMER_WARN_RISE PPC_BIT(14)</a>
-<a name="150"><span class="lineNum"> 150 </span> : : #define SPR_HMER_WARN_FALL PPC_BIT(15)</a>
-<a name="151"><span class="lineNum"> 151 </span> : : #define SPR_HMER_SCOM_FIR_HMI PPC_BIT(16)</a>
-<a name="152"><span class="lineNum"> 152 </span> : : #define SPR_HMER_TRIG_FIR_HMI PPC_BIT(17)</a>
-<a name="153"><span class="lineNum"> 153 </span> : : #define SPR_HMER_HYP_RESOURCE_ERR PPC_BIT(20)</a>
-<a name="154"><span class="lineNum"> 154 </span> : : #define SPR_HMER_XSCOM_STATUS PPC_BITMASK(21,23)</a>
-<a name="155"><span class="lineNum"> 155 </span> : : </a>
-<a name="156"><span class="lineNum"> 156 </span> : : /*</a>
-<a name="157"><span class="lineNum"> 157 </span> : : * HMEER: initial bits for HMI interrupt enable mask.</a>
-<a name="158"><span class="lineNum"> 158 </span> : : * Per Dave Larson, never enable 8,9,21-23</a>
-<a name="159"><span class="lineNum"> 159 </span> : : */</a>
-<a name="160"><span class="lineNum"> 160 </span> : : #define SPR_HMEER_HMI_ENABLE_MASK (SPR_HMER_MALFUNCTION_ALERT |\</a>
-<a name="161"><span class="lineNum"> 161 </span> : : SPR_HMER_HYP_RESOURCE_ERR |\</a>
-<a name="162"><span class="lineNum"> 162 </span> : : SPR_HMER_PROC_RECV_DONE |\</a>
-<a name="163"><span class="lineNum"> 163 </span> : : SPR_HMER_PROC_RECV_ERROR_MASKED |\</a>
-<a name="164"><span class="lineNum"> 164 </span> : : SPR_HMER_TFAC_ERROR |\</a>
-<a name="165"><span class="lineNum"> 165 </span> : : SPR_HMER_TFMR_PARITY_ERROR |\</a>
-<a name="166"><span class="lineNum"> 166 </span> : : SPR_HMER_PROC_RECV_AGAIN)</a>
-<a name="167"><span class="lineNum"> 167 </span> : : </a>
-<a name="168"><span class="lineNum"> 168 </span> : : /* Bits in HID0 */</a>
-<a name="169"><span class="lineNum"> 169 </span> : : #define SPR_HID0_POWER8_4LPARMODE PPC_BIT(2)</a>
-<a name="170"><span class="lineNum"> 170 </span> : : #define SPR_HID0_POWER8_2LPARMODE PPC_BIT(6)</a>
-<a name="171"><span class="lineNum"> 171 </span> : : #define SPR_HID0_POWER8_DYNLPARDIS PPC_BIT(15)</a>
-<a name="172"><span class="lineNum"> 172 </span> : : #define SPR_HID0_POWER8_HILE PPC_BIT(19)</a>
-<a name="173"><span class="lineNum"> 173 </span> : : #define SPR_HID0_POWER9_HILE PPC_BIT(4)</a>
-<a name="174"><span class="lineNum"> 174 </span> : : #define SPR_HID0_POWER8_ENABLE_ATTN PPC_BIT(31)</a>
-<a name="175"><span class="lineNum"> 175 </span> : : #define SPR_HID0_POWER9_ENABLE_ATTN (PPC_BIT(2) | PPC_BIT(3))</a>
-<a name="176"><span class="lineNum"> 176 </span> : : #define SPR_HID0_POWER9_RADIX PPC_BIT(8)</a>
-<a name="177"><span class="lineNum"> 177 </span> : : </a>
-<a name="178"><span class="lineNum"> 178 </span> : : /* PVR bits */</a>
-<a name="179"><span class="lineNum"> 179 </span> : : #define SPR_PVR_TYPE 0xffff0000</a>
-<a name="180"><span class="lineNum"> 180 </span> : : #define SPR_PVR_CHIP_TYPE 0x0000f000</a>
-<a name="181"><span class="lineNum"> 181 </span> : : #define SPR_PVR_VERS_MAJ 0x00000f00</a>
-<a name="182"><span class="lineNum"> 182 </span> : : #define SPR_PVR_VERS_MIN 0x000000ff</a>
-<a name="183"><span class="lineNum"> 183 </span> : : </a>
-<a name="184"><span class="lineNum"> 184 </span> : : #define PVR_TYPE(_pvr) GETFIELD(SPR_PVR_TYPE, _pvr)</a>
-<a name="185"><span class="lineNum"> 185 </span> : : #define PVR_CHIP_TYPE(_pvr) GETFIELD(SPR_PVR_CHIP_TYPE, _pvr)</a>
-<a name="186"><span class="lineNum"> 186 </span> : : #define PVR_VERS_MAJ(_pvr) GETFIELD(SPR_PVR_VERS_MAJ, _pvr)</a>
-<a name="187"><span class="lineNum"> 187 </span> : : #define PVR_VERS_MIN(_pvr) GETFIELD(SPR_PVR_VERS_MIN, _pvr)</a>
-<a name="188"><span class="lineNum"> 188 </span> : : </a>
-<a name="189"><span class="lineNum"> 189 </span> : : /* PVR definitions */</a>
-<a name="190"><span class="lineNum"> 190 </span> : : #define PVR_TYPE_P8E 0x004b /* Murano */</a>
-<a name="191"><span class="lineNum"> 191 </span> : : #define PVR_TYPE_P8 0x004d /* Venice */</a>
-<a name="192"><span class="lineNum"> 192 </span> : : #define PVR_TYPE_P8NVL 0x004c /* Naples */</a>
-<a name="193"><span class="lineNum"> 193 </span> : : #define PVR_TYPE_P9 0x004e</a>
-<a name="194"><span class="lineNum"> 194 </span> : : #define PVR_TYPE_P9P 0x004f /* Axone */</a>
-<a name="195"><span class="lineNum"> 195 </span> : : </a>
-<a name="196"><span class="lineNum"> 196 </span> : : #ifdef __ASSEMBLY__</a>
-<a name="197"><span class="lineNum"> 197 </span> : : </a>
-<a name="198"><span class="lineNum"> 198 </span> : : /* Thread priority control opcodes */</a>
-<a name="199"><span class="lineNum"> 199 </span> : : #define smt_low or 1,1,1</a>
-<a name="200"><span class="lineNum"> 200 </span> : : #define smt_medium or 2,2,2</a>
-<a name="201"><span class="lineNum"> 201 </span> : : #define smt_high or 3,3,3</a>
-<a name="202"><span class="lineNum"> 202 </span> : : #define smt_medium_high or 5,5,5</a>
-<a name="203"><span class="lineNum"> 203 </span> : : #define smt_medium_low or 6,6,6</a>
-<a name="204"><span class="lineNum"> 204 </span> : : #define smt_extra_high or 7,7,7</a>
-<a name="205"><span class="lineNum"> 205 </span> : : #define smt_very_low or 31,31,31</a>
-<a name="206"><span class="lineNum"> 206 </span> : : #define smt_lowest smt_low ; smt_very_low</a>
-<a name="207"><span class="lineNum"> 207 </span> : : </a>
-<a name="208"><span class="lineNum"> 208 </span> : : #else /* __ASSEMBLY__ */</a>
-<a name="209"><span class="lineNum"> 209 </span> : : </a>
-<a name="210"><span class="lineNum"> 210 </span> : : #include &lt;ccan/str/str.h&gt;</a>
-<a name="211"><span class="lineNum"> 211 </span> : : #include &lt;compiler.h&gt;</a>
-<a name="212"><span class="lineNum"> 212 </span> : : #include &lt;stdbool.h&gt;</a>
-<a name="213"><span class="lineNum"> 213 </span> : : #include &lt;stdint.h&gt;</a>
+<a name="89"><span class="lineNum"> 89 </span> : : /* Bits in LPCR */</a>
+<a name="90"><span class="lineNum"> 90 </span> : : </a>
+<a name="91"><span class="lineNum"> 91 </span> : : /* Powersave Exit Cause Enable is different on each generation */</a>
+<a name="92"><span class="lineNum"> 92 </span> : : #define SPR_LPCR_P8_PECE PPC_BITMASK(47,51)</a>
+<a name="93"><span class="lineNum"> 93 </span> : : #define SPR_LPCR_P8_PECE0 PPC_BIT(47) /* Wake on priv doorbell */</a>
+<a name="94"><span class="lineNum"> 94 </span> : : #define SPR_LPCR_P8_PECE1 PPC_BIT(48) /* Wake on hv doorbell */</a>
+<a name="95"><span class="lineNum"> 95 </span> : : #define SPR_LPCR_P8_PECE2 PPC_BIT(49) /* Wake on external interrupts */</a>
+<a name="96"><span class="lineNum"> 96 </span> : : #define SPR_LPCR_P8_PECE3 PPC_BIT(50) /* Wake on decrementer */</a>
+<a name="97"><span class="lineNum"> 97 </span> : : #define SPR_LPCR_P8_PECE4 PPC_BIT(51) /* Wake on MCs, HMIs, etc... */</a>
+<a name="98"><span class="lineNum"> 98 </span> : : </a>
+<a name="99"><span class="lineNum"> 99 </span> : : #define SPR_LPCR_P9_PECE (PPC_BITMASK(47,51) | PPC_BITMASK(17,17))</a>
+<a name="100"><span class="lineNum"> 100 </span> : : #define SPR_LPCR_P9_PECEU0 PPC_BIT(17) /* Wake on HVI */</a>
+<a name="101"><span class="lineNum"> 101 </span> : : #define SPR_LPCR_P9_PECEL0 PPC_BIT(47) /* Wake on priv doorbell */</a>
+<a name="102"><span class="lineNum"> 102 </span> : : #define SPR_LPCR_P9_PECEL1 PPC_BIT(48) /* Wake on hv doorbell */</a>
+<a name="103"><span class="lineNum"> 103 </span> : : #define SPR_LPCR_P9_PECEL2 PPC_BIT(49) /* Wake on external interrupts */</a>
+<a name="104"><span class="lineNum"> 104 </span> : : #define SPR_LPCR_P9_PECEL3 PPC_BIT(50) /* Wake on decrementer */</a>
+<a name="105"><span class="lineNum"> 105 </span> : : #define SPR_LPCR_P9_PECEL4 PPC_BIT(51) /* Wake on MCs, HMIs, etc... */</a>
+<a name="106"><span class="lineNum"> 106 </span> : : #define SPR_LPCR_P9_LD PPC_BIT(46) /* Large decrementer mode bit */</a>
+<a name="107"><span class="lineNum"> 107 </span> : : </a>
+<a name="108"><span class="lineNum"> 108 </span> : : </a>
+<a name="109"><span class="lineNum"> 109 </span> : : /* Bits in TFMR - control bits */</a>
+<a name="110"><span class="lineNum"> 110 </span> : : #define SPR_TFMR_MAX_CYC_BET_STEPS PPC_BITMASK(0,7)</a>
+<a name="111"><span class="lineNum"> 111 </span> : : #define SPR_TFMR_N_CLKS_PER_STEP PPC_BITMASK(8,9)</a>
+<a name="112"><span class="lineNum"> 112 </span> : : #define SPR_TFMR_MASK_HMI PPC_BIT(10)</a>
+<a name="113"><span class="lineNum"> 113 </span> : : #define SPR_TFMR_SYNC_BIT_SEL PPC_BITMASK(11,13)</a>
+<a name="114"><span class="lineNum"> 114 </span> : : #define SPR_TFMR_TB_ECLIPZ PPC_BIT(14)</a>
+<a name="115"><span class="lineNum"> 115 </span> : : #define SPR_TFMR_LOAD_TOD_MOD PPC_BIT(16)</a>
+<a name="116"><span class="lineNum"> 116 </span> : : #define SPR_TFMR_MOVE_CHIP_TOD_TO_TB PPC_BIT(18)</a>
+<a name="117"><span class="lineNum"> 117 </span> : : #define SPR_TFMR_CLEAR_TB_ERRORS PPC_BIT(24)</a>
+<a name="118"><span class="lineNum"> 118 </span> : : /* Bits in TFMR - thread indep. status bits */</a>
+<a name="119"><span class="lineNum"> 119 </span> : : #define SPR_TFMR_TFAC_XFER_ERROR PPC_BIT(25)</a>
+<a name="120"><span class="lineNum"> 120 </span> : : #define SPR_TFMR_HDEC_PARITY_ERROR PPC_BIT(26)</a>
+<a name="121"><span class="lineNum"> 121 </span> : : #define SPR_TFMR_TBST_CORRUPT PPC_BIT(27)</a>
+<a name="122"><span class="lineNum"> 122 </span> : : #define SPR_TFMR_TBST_ENCODED PPC_BITMASK(28,31)</a>
+<a name="123"><span class="lineNum"> 123 </span> : : #define SPR_TFMR_TBST_LAST PPC_BITMASK(32,35)</a>
+<a name="124"><span class="lineNum"> 124 </span> : : #define SPR_TFMR_TB_ENABLED PPC_BIT(40)</a>
+<a name="125"><span class="lineNum"> 125 </span> : : #define SPR_TFMR_TB_VALID PPC_BIT(41)</a>
+<a name="126"><span class="lineNum"> 126 </span> : : #define SPR_TFMR_TB_SYNC_OCCURED PPC_BIT(42)</a>
+<a name="127"><span class="lineNum"> 127 </span> : : #define SPR_TFMR_TB_MISSING_SYNC PPC_BIT(43)</a>
+<a name="128"><span class="lineNum"> 128 </span> : : #define SPR_TFMR_TB_MISSING_STEP PPC_BIT(44)</a>
+<a name="129"><span class="lineNum"> 129 </span> : : #define SPR_TFMR_TB_RESIDUE_ERR PPC_BIT(45)</a>
+<a name="130"><span class="lineNum"> 130 </span> : : #define SPR_TFMR_FW_CONTROL_ERR PPC_BIT(46)</a>
+<a name="131"><span class="lineNum"> 131 </span> : : #define SPR_TFMR_CHIP_TOD_STATUS PPC_BITMASK(47,50)</a>
+<a name="132"><span class="lineNum"> 132 </span> : : #define SPR_TFMR_CHIP_TOD_INTERRUPT PPC_BIT(51)</a>
+<a name="133"><span class="lineNum"> 133 </span> : : #define SPR_TFMR_CHIP_TOD_TIMEOUT PPC_BIT(54)</a>
+<a name="134"><span class="lineNum"> 134 </span> : : #define SPR_TFMR_CHIP_TOD_PARITY_ERR PPC_BIT(56)</a>
+<a name="135"><span class="lineNum"> 135 </span> : : /* Bits in TFMR - thread specific. status bits */</a>
+<a name="136"><span class="lineNum"> 136 </span> : : #define SPR_TFMR_PURR_PARITY_ERR PPC_BIT(57)</a>
+<a name="137"><span class="lineNum"> 137 </span> : : #define SPR_TFMR_SPURR_PARITY_ERR PPC_BIT(58)</a>
+<a name="138"><span class="lineNum"> 138 </span> : : #define SPR_TFMR_DEC_PARITY_ERR PPC_BIT(59)</a>
+<a name="139"><span class="lineNum"> 139 </span> : : #define SPR_TFMR_TFMR_CORRUPT PPC_BIT(60)</a>
+<a name="140"><span class="lineNum"> 140 </span> : : #define SPR_TFMR_PURR_OVERFLOW PPC_BIT(61)</a>
+<a name="141"><span class="lineNum"> 141 </span> : : #define SPR_TFMR_SPURR_OVERFLOW PPC_BIT(62)</a>
+<a name="142"><span class="lineNum"> 142 </span> : : </a>
+<a name="143"><span class="lineNum"> 143 </span> : : /* Bits in HMER/HMEER */</a>
+<a name="144"><span class="lineNum"> 144 </span> : : #define SPR_HMER_MALFUNCTION_ALERT PPC_BIT(0)</a>
+<a name="145"><span class="lineNum"> 145 </span> : : #define SPR_HMER_PROC_RECV_DONE PPC_BIT(2)</a>
+<a name="146"><span class="lineNum"> 146 </span> : : #define SPR_HMER_PROC_RECV_ERROR_MASKED PPC_BIT(3) /* Not P10 */</a>
+<a name="147"><span class="lineNum"> 147 </span> : : #define SPR_HMER_TFAC_ERROR PPC_BIT(4)</a>
+<a name="148"><span class="lineNum"> 148 </span> : : #define SPR_HMER_TFMR_PARITY_ERROR PPC_BIT(5) /* P9 */</a>
+<a name="149"><span class="lineNum"> 149 </span> : : #define SPR_HMER_TFAC_SHADOW_XFER_ERROR PPC_BIT(5) /* P10 */</a>
+<a name="150"><span class="lineNum"> 150 </span> : : #define SPR_HMER_SPURR_SCALE_LIMIT PPC_BIT(6) /* P10 */</a>
+<a name="151"><span class="lineNum"> 151 </span> : : #define SPR_HMER_XSCOM_FAIL PPC_BIT(8)</a>
+<a name="152"><span class="lineNum"> 152 </span> : : #define SPR_HMER_XSCOM_DONE PPC_BIT(9)</a>
+<a name="153"><span class="lineNum"> 153 </span> : : #define SPR_HMER_PROC_RECV_AGAIN PPC_BIT(11)</a>
+<a name="154"><span class="lineNum"> 154 </span> : : #define SPR_HMER_WARN_RISE PPC_BIT(14) /* Not P10 */</a>
+<a name="155"><span class="lineNum"> 155 </span> : : #define SPR_HMER_WARN_FALL PPC_BIT(15) /* Not P10 */</a>
+<a name="156"><span class="lineNum"> 156 </span> : : #define SPR_HMER_SCOM_FIR_HMI PPC_BIT(16)</a>
+<a name="157"><span class="lineNum"> 157 </span> : : #define SPR_HMER_TRIG_FIR_HMI PPC_BIT(17) /* Not P10 */</a>
+<a name="158"><span class="lineNum"> 158 </span> : : #define SPR_HMER_THD_WAKE_BLOCKED_TM_SUSPEND PPC_BIT(17) /* Not P10 */</a>
+<a name="159"><span class="lineNum"> 159 </span> : : #define SPR_HMER_P10_TRIG_FIR_HMI PPC_BIT(18)</a>
+<a name="160"><span class="lineNum"> 160 </span> : : #define SPR_HMER_HYP_RESOURCE_ERR PPC_BIT(20) /* Not P10 */</a>
+<a name="161"><span class="lineNum"> 161 </span> : : #define SPR_HMER_XSCOM_STATUS PPC_BITMASK(21,23)</a>
+<a name="162"><span class="lineNum"> 162 </span> : : </a>
+<a name="163"><span class="lineNum"> 163 </span> : : /*</a>
+<a name="164"><span class="lineNum"> 164 </span> : : * HMEER: initial bits for HMI interrupt enable mask.</a>
+<a name="165"><span class="lineNum"> 165 </span> : : * Per Dave Larson, never enable 8,9,21-23</a>
+<a name="166"><span class="lineNum"> 166 </span> : : */</a>
+<a name="167"><span class="lineNum"> 167 </span> : : #define SPR_HMEER_HMI_ENABLE_MASK (SPR_HMER_MALFUNCTION_ALERT |\</a>
+<a name="168"><span class="lineNum"> 168 </span> : : SPR_HMER_HYP_RESOURCE_ERR |\</a>
+<a name="169"><span class="lineNum"> 169 </span> : : SPR_HMER_PROC_RECV_DONE |\</a>
+<a name="170"><span class="lineNum"> 170 </span> : : SPR_HMER_PROC_RECV_ERROR_MASKED |\</a>
+<a name="171"><span class="lineNum"> 171 </span> : : SPR_HMER_TFAC_ERROR |\</a>
+<a name="172"><span class="lineNum"> 172 </span> : : SPR_HMER_TFMR_PARITY_ERROR |\</a>
+<a name="173"><span class="lineNum"> 173 </span> : : SPR_HMER_PROC_RECV_AGAIN)</a>
+<a name="174"><span class="lineNum"> 174 </span> : : </a>
+<a name="175"><span class="lineNum"> 175 </span> : : #define SPR_HMEER_P10_HMI_ENABLE_MASK (SPR_HMER_MALFUNCTION_ALERT |\</a>
+<a name="176"><span class="lineNum"> 176 </span> : : SPR_HMER_PROC_RECV_DONE |\</a>
+<a name="177"><span class="lineNum"> 177 </span> : : SPR_HMER_TFAC_ERROR |\</a>
+<a name="178"><span class="lineNum"> 178 </span> : : SPR_HMER_TFAC_SHADOW_XFER_ERROR |\</a>
+<a name="179"><span class="lineNum"> 179 </span> : : SPR_HMER_SPURR_SCALE_LIMIT |\</a>
+<a name="180"><span class="lineNum"> 180 </span> : : SPR_HMER_PROC_RECV_AGAIN)</a>
+<a name="181"><span class="lineNum"> 181 </span> : : </a>
+<a name="182"><span class="lineNum"> 182 </span> : : /* Bits in HID0 */</a>
+<a name="183"><span class="lineNum"> 183 </span> : : #define SPR_HID0_POWER8_4LPARMODE PPC_BIT(2)</a>
+<a name="184"><span class="lineNum"> 184 </span> : : #define SPR_HID0_POWER8_2LPARMODE PPC_BIT(6)</a>
+<a name="185"><span class="lineNum"> 185 </span> : : #define SPR_HID0_POWER8_DYNLPARDIS PPC_BIT(15)</a>
+<a name="186"><span class="lineNum"> 186 </span> : : #define SPR_HID0_POWER8_HILE PPC_BIT(19)</a>
+<a name="187"><span class="lineNum"> 187 </span> : : #define SPR_HID0_POWER9_HILE PPC_BIT(4)</a>
+<a name="188"><span class="lineNum"> 188 </span> : : #define SPR_HID0_POWER10_HILE PPC_BIT(4)</a>
+<a name="189"><span class="lineNum"> 189 </span> : : #define SPR_HID0_POWER8_ENABLE_ATTN PPC_BIT(31)</a>
+<a name="190"><span class="lineNum"> 190 </span> : : #define SPR_HID0_POWER9_ENABLE_ATTN (PPC_BIT(2) | PPC_BIT(3))</a>
+<a name="191"><span class="lineNum"> 191 </span> : : #define SPR_HID0_POWER10_ENABLE_ATTN (PPC_BIT(2) | PPC_BIT(3))</a>
+<a name="192"><span class="lineNum"> 192 </span> : : #define SPR_HID0_POWER9_RADIX PPC_BIT(8)</a>
+<a name="193"><span class="lineNum"> 193 </span> : : </a>
+<a name="194"><span class="lineNum"> 194 </span> : : /* PVR bits */</a>
+<a name="195"><span class="lineNum"> 195 </span> : : #define SPR_PVR_TYPE 0xffff0000</a>
+<a name="196"><span class="lineNum"> 196 </span> : : #define SPR_PVR_CHIP_TYPE 0x0000f000</a>
+<a name="197"><span class="lineNum"> 197 </span> : : #define SPR_PVR_VERS_MAJ 0x00000f00</a>
+<a name="198"><span class="lineNum"> 198 </span> : : #define SPR_PVR_VERS_MIN 0x000000ff</a>
+<a name="199"><span class="lineNum"> 199 </span> : : </a>
+<a name="200"><span class="lineNum"> 200 </span> : : #define PVR_TYPE(_pvr) GETFIELD(SPR_PVR_TYPE, _pvr)</a>
+<a name="201"><span class="lineNum"> 201 </span> : : #define PVR_CHIP_TYPE(_pvr) GETFIELD(SPR_PVR_CHIP_TYPE, _pvr)</a>
+<a name="202"><span class="lineNum"> 202 </span> : : #define PVR_VERS_MAJ(_pvr) GETFIELD(SPR_PVR_VERS_MAJ, _pvr)</a>
+<a name="203"><span class="lineNum"> 203 </span> : : #define PVR_VERS_MIN(_pvr) GETFIELD(SPR_PVR_VERS_MIN, _pvr)</a>
+<a name="204"><span class="lineNum"> 204 </span> : : </a>
+<a name="205"><span class="lineNum"> 205 </span> : : /* PVR definitions */</a>
+<a name="206"><span class="lineNum"> 206 </span> : : #define PVR_TYPE_P8E 0x004b /* Murano */</a>
+<a name="207"><span class="lineNum"> 207 </span> : : #define PVR_TYPE_P8 0x004d /* Venice */</a>
+<a name="208"><span class="lineNum"> 208 </span> : : #define PVR_TYPE_P8NVL 0x004c /* Naples */</a>
+<a name="209"><span class="lineNum"> 209 </span> : : #define PVR_TYPE_P9 0x004e</a>
+<a name="210"><span class="lineNum"> 210 </span> : : #define PVR_TYPE_P9P 0x004f /* Axone */</a>
+<a name="211"><span class="lineNum"> 211 </span> : : #define PVR_TYPE_P10 0x0080</a>
+<a name="212"><span class="lineNum"> 212 </span> : : </a>
+<a name="213"><span class="lineNum"> 213 </span> : : #ifdef __ASSEMBLY__</a>
<a name="214"><span class="lineNum"> 214 </span> : : </a>
-<a name="215"><span class="lineNum"> 215 </span> : : #define PPC_INST_NOP 0x60000000UL</a>
-<a name="216"><span class="lineNum"> 216 </span> : : #define PPC_INST_TRAP 0x7fe00008UL</a>
-<a name="217"><span class="lineNum"> 217 </span> : : </a>
-<a name="218"><span class="lineNum"> 218 </span> : : #define RB(b) (((b) &amp; 0x1f) &lt;&lt; 11)</a>
-<a name="219"><span class="lineNum"> 219 </span> : : #define MSGSND(b) stringify(.long 0x7c00019c | RB(b))</a>
-<a name="220"><span class="lineNum"> 220 </span> : : #define MSGCLR(b) stringify(.long 0x7c0001dc | RB(b))</a>
-<a name="221"><span class="lineNum"> 221 </span> : : #define MSGSYNC stringify(.long 0x7c0006ec)</a>
-<a name="222"><span class="lineNum"> 222 </span> : : </a>
-<a name="223"><span class="lineNum"> 223 </span> :<span class="lineCov"> 4 : static inline bool is_power9n(uint32_t version)</span></a>
-<a name="224"><span class="lineNum"> 224 </span> : : {</a>
-<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 4 : if (PVR_TYPE(version) != PVR_TYPE_P9)</span></a>
-<a name="226"><span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="227"><span class="lineNum"> 227 </span> : : /*</a>
-<a name="228"><span class="lineNum"> 228 </span> : : * Bit 13 tells us:</a>
-<a name="229"><span class="lineNum"> 229 </span> : : * 0 = Scale out (aka Nimbus)</a>
-<a name="230"><span class="lineNum"> 230 </span> : : * 1 = Scale up (aka Cumulus)</a>
-<a name="231"><span class="lineNum"> 231 </span> : : */</a>
-<a name="232"><span class="lineNum"> 232 </span> :<span class="lineCov"> 4 : if ((version &gt;&gt; 13) &amp; 1)</span></a>
-<a name="233"><span class="lineNum"> 233 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="234"><span class="lineNum"> 234 </span> :<span class="lineCov"> 4 : return true;</span></a>
-<a name="235"><span class="lineNum"> 235 </span> : : }</a>
-<a name="236"><span class="lineNum"> 236 </span> : : </a>
-<a name="237"><span class="lineNum"> 237 </span> : : static inline bool is_fused_core(uint32_t version)</a>
-<a name="238"><span class="lineNum"> 238 </span> : : {</a>
-<a name="239"><span class="lineNum"> 239 </span> : : if (PVR_TYPE(version) != PVR_TYPE_P9)</a>
-<a name="240"><span class="lineNum"> 240 </span> : : return false;</a>
-<a name="241"><span class="lineNum"> 241 </span> : : </a>
-<a name="242"><span class="lineNum"> 242 </span> : : switch(PVR_CHIP_TYPE(version)) {</a>
-<a name="243"><span class="lineNum"> 243 </span> : : case 0:</a>
-<a name="244"><span class="lineNum"> 244 </span> : : case 2:</a>
-<a name="245"><span class="lineNum"> 245 </span> : : return true;</a>
-<a name="246"><span class="lineNum"> 246 </span> : : default:</a>
-<a name="247"><span class="lineNum"> 247 </span> : : return false;</a>
-<a name="248"><span class="lineNum"> 248 </span> : : }</a>
-<a name="249"><span class="lineNum"> 249 </span> : : }</a>
-<a name="250"><span class="lineNum"> 250 </span> : : </a>
-<a name="251"><span class="lineNum"> 251 </span> :<span class="lineNoCov"> 0 : static inline bool is_power9c(uint32_t version) </span></a>
-<a name="252"><span class="lineNum"> 252 </span> : : {</a>
+<a name="215"><span class="lineNum"> 215 </span> : : /* Thread priority control opcodes */</a>
+<a name="216"><span class="lineNum"> 216 </span> : : #define smt_low or 1,1,1</a>
+<a name="217"><span class="lineNum"> 217 </span> : : #define smt_medium or 2,2,2</a>
+<a name="218"><span class="lineNum"> 218 </span> : : #define smt_high or 3,3,3</a>
+<a name="219"><span class="lineNum"> 219 </span> : : #define smt_medium_high or 5,5,5</a>
+<a name="220"><span class="lineNum"> 220 </span> : : #define smt_medium_low or 6,6,6</a>
+<a name="221"><span class="lineNum"> 221 </span> : : #define smt_extra_high or 7,7,7</a>
+<a name="222"><span class="lineNum"> 222 </span> : : #define smt_very_low or 31,31,31</a>
+<a name="223"><span class="lineNum"> 223 </span> : : #define smt_lowest smt_low ; smt_very_low</a>
+<a name="224"><span class="lineNum"> 224 </span> : : </a>
+<a name="225"><span class="lineNum"> 225 </span> : : #else /* __ASSEMBLY__ */</a>
+<a name="226"><span class="lineNum"> 226 </span> : : </a>
+<a name="227"><span class="lineNum"> 227 </span> : : #include &lt;ccan/str/str.h&gt;</a>
+<a name="228"><span class="lineNum"> 228 </span> : : #include &lt;compiler.h&gt;</a>
+<a name="229"><span class="lineNum"> 229 </span> : : #include &lt;stdbool.h&gt;</a>
+<a name="230"><span class="lineNum"> 230 </span> : : #include &lt;stdint.h&gt;</a>
+<a name="231"><span class="lineNum"> 231 </span> : : </a>
+<a name="232"><span class="lineNum"> 232 </span> : : #define PPC_INST_NOP 0x60000000UL</a>
+<a name="233"><span class="lineNum"> 233 </span> : : #define PPC_INST_TRAP 0x7fe00008UL</a>
+<a name="234"><span class="lineNum"> 234 </span> : : </a>
+<a name="235"><span class="lineNum"> 235 </span> : : #define RB(b) (((b) &amp; 0x1f) &lt;&lt; 11)</a>
+<a name="236"><span class="lineNum"> 236 </span> : : #define MSGSND(b) stringify(.long 0x7c00019c | RB(b))</a>
+<a name="237"><span class="lineNum"> 237 </span> : : #define MSGCLR(b) stringify(.long 0x7c0001dc | RB(b))</a>
+<a name="238"><span class="lineNum"> 238 </span> : : #define MSGSYNC stringify(.long 0x7c0006ec)</a>
+<a name="239"><span class="lineNum"> 239 </span> : : </a>
+<a name="240"><span class="lineNum"> 240 </span> :<span class="lineCov"> 4 : static inline bool is_power9n(uint32_t version)</span></a>
+<a name="241"><span class="lineNum"> 241 </span> : : {</a>
+<a name="242"><span class="lineNum"> 242 </span> :<span class="lineCov"> 4 : if (PVR_TYPE(version) != PVR_TYPE_P9)</span></a>
+<a name="243"><span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="244"><span class="lineNum"> 244 </span> : : /*</a>
+<a name="245"><span class="lineNum"> 245 </span> : : * Bit 13 tells us:</a>
+<a name="246"><span class="lineNum"> 246 </span> : : * 0 = Scale out (aka Nimbus)</a>
+<a name="247"><span class="lineNum"> 247 </span> : : * 1 = Scale up (aka Cumulus)</a>
+<a name="248"><span class="lineNum"> 248 </span> : : */</a>
+<a name="249"><span class="lineNum"> 249 </span> :<span class="lineCov"> 4 : if ((version &gt;&gt; 13) &amp; 1)</span></a>
+<a name="250"><span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="251"><span class="lineNum"> 251 </span> :<span class="lineCov"> 4 : return true;</span></a>
+<a name="252"><span class="lineNum"> 252 </span> : : }</a>
<a name="253"><span class="lineNum"> 253 </span> : : </a>
-<a name="254"><span class="lineNum"> 254 </span> :<span class="lineNoCov"> 0 : if (PVR_TYPE(version) != PVR_TYPE_P9)</span></a>
-<a name="255"><span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="256"><span class="lineNum"> 256 </span> : : /*</a>
-<a name="257"><span class="lineNum"> 257 </span> : : * Bit 13 tells us:</a>
-<a name="258"><span class="lineNum"> 258 </span> : : * 0 = Scale out (aka Nimbus)</a>
-<a name="259"><span class="lineNum"> 259 </span> : : * 1 = Scale up (aka Cumulus)</a>
-<a name="260"><span class="lineNum"> 260 </span> : : */</a>
-<a name="261"><span class="lineNum"> 261 </span> :<span class="lineNoCov"> 0 : if (!((version &gt;&gt; 13) &amp; 1))</span></a>
-<a name="262"><span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="263"><span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : return true;</span></a>
-<a name="264"><span class="lineNum"> 264 </span> : : }</a>
-<a name="265"><span class="lineNum"> 265 </span> : : </a>
-<a name="266"><span class="lineNum"> 266 </span> : : #ifndef __TEST__</a>
-<a name="267"><span class="lineNum"> 267 </span> : : </a>
-<a name="268"><span class="lineNum"> 268 </span> : : /* POWER9 and above only */</a>
-<a name="269"><span class="lineNum"> 269 </span> : : static inline void flush_erat(void)</a>
-<a name="270"><span class="lineNum"> 270 </span> : : {</a>
-<a name="271"><span class="lineNum"> 271 </span> : : asm volatile(&quot;slbia 7&quot;);</a>
+<a name="254"><span class="lineNum"> 254 </span> : : static inline bool is_fused_core(uint32_t version)</a>
+<a name="255"><span class="lineNum"> 255 </span> : : {</a>
+<a name="256"><span class="lineNum"> 256 </span> : : if (PVR_TYPE(version) == PVR_TYPE_P9) {</a>
+<a name="257"><span class="lineNum"> 257 </span> : : switch(PVR_CHIP_TYPE(version)) {</a>
+<a name="258"><span class="lineNum"> 258 </span> : : case 0:</a>
+<a name="259"><span class="lineNum"> 259 </span> : : case 2:</a>
+<a name="260"><span class="lineNum"> 260 </span> : : return true;</a>
+<a name="261"><span class="lineNum"> 261 </span> : : default:</a>
+<a name="262"><span class="lineNum"> 262 </span> : : return false;</a>
+<a name="263"><span class="lineNum"> 263 </span> : : }</a>
+<a name="264"><span class="lineNum"> 264 </span> : : </a>
+<a name="265"><span class="lineNum"> 265 </span> : : } else if(PVR_TYPE(version) == PVR_TYPE_P10) {</a>
+<a name="266"><span class="lineNum"> 266 </span> : : if(PVR_CHIP_TYPE(version) &amp; 0x01)</a>
+<a name="267"><span class="lineNum"> 267 </span> : : return false;</a>
+<a name="268"><span class="lineNum"> 268 </span> : : else</a>
+<a name="269"><span class="lineNum"> 269 </span> : : return true;</a>
+<a name="270"><span class="lineNum"> 270 </span> : : } else</a>
+<a name="271"><span class="lineNum"> 271 </span> : : return false;</a>
<a name="272"><span class="lineNum"> 272 </span> : : }</a>
<a name="273"><span class="lineNum"> 273 </span> : : </a>
-<a name="274"><span class="lineNum"> 274 </span> : : /*</a>
-<a name="275"><span class="lineNum"> 275 </span> : : * SMT priority</a>
-<a name="276"><span class="lineNum"> 276 </span> : : */</a>
-<a name="277"><span class="lineNum"> 277 </span> : : </a>
-<a name="278"><span class="lineNum"> 278 </span> : : static inline void smt_low(void) { asm volatile(&quot;or 1,1,1&quot;); }</a>
-<a name="279"><span class="lineNum"> 279 </span> : : static inline void smt_medium(void) { asm volatile(&quot;or 2,2,2&quot;); }</a>
-<a name="280"><span class="lineNum"> 280 </span> : : static inline void smt_high(void) { asm volatile(&quot;or 3,3,3&quot;); }</a>
-<a name="281"><span class="lineNum"> 281 </span> : : static inline void smt_medium_high(void){ asm volatile(&quot;or 5,5,5&quot;); }</a>
-<a name="282"><span class="lineNum"> 282 </span> : : static inline void smt_medium_low(void) { asm volatile(&quot;or 6,6,6&quot;); }</a>
-<a name="283"><span class="lineNum"> 283 </span> : : static inline void smt_extra_high(void) { asm volatile(&quot;or 7,7,7&quot;); }</a>
-<a name="284"><span class="lineNum"> 284 </span> : : static inline void smt_very_low(void) { asm volatile(&quot;or 31,31,31&quot;); }</a>
-<a name="285"><span class="lineNum"> 285 </span> : : static inline void smt_lowest(void) { smt_low(); smt_very_low(); }</a>
-<a name="286"><span class="lineNum"> 286 </span> : : </a>
-<a name="287"><span class="lineNum"> 287 </span> : : /*</a>
-<a name="288"><span class="lineNum"> 288 </span> : : * SPR access functions</a>
-<a name="289"><span class="lineNum"> 289 </span> : : */</a>
+<a name="274"><span class="lineNum"> 274 </span> :<span class="lineNoCov"> 0 : static inline bool is_power9c(uint32_t version) </span></a>
+<a name="275"><span class="lineNum"> 275 </span> : : {</a>
+<a name="276"><span class="lineNum"> 276 </span> : : </a>
+<a name="277"><span class="lineNum"> 277 </span> :<span class="lineNoCov"> 0 : if (PVR_TYPE(version) != PVR_TYPE_P9)</span></a>
+<a name="278"><span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="279"><span class="lineNum"> 279 </span> : : /*</a>
+<a name="280"><span class="lineNum"> 280 </span> : : * Bit 13 tells us:</a>
+<a name="281"><span class="lineNum"> 281 </span> : : * 0 = Scale out (aka Nimbus)</a>
+<a name="282"><span class="lineNum"> 282 </span> : : * 1 = Scale up (aka Cumulus)</a>
+<a name="283"><span class="lineNum"> 283 </span> : : */</a>
+<a name="284"><span class="lineNum"> 284 </span> :<span class="lineNoCov"> 0 : if (!((version &gt;&gt; 13) &amp; 1))</span></a>
+<a name="285"><span class="lineNum"> 285 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="286"><span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : return true;</span></a>
+<a name="287"><span class="lineNum"> 287 </span> : : }</a>
+<a name="288"><span class="lineNum"> 288 </span> : : </a>
+<a name="289"><span class="lineNum"> 289 </span> : : #ifndef __TEST__</a>
<a name="290"><span class="lineNum"> 290 </span> : : </a>
-<a name="291"><span class="lineNum"> 291 </span> : : static inline unsigned long mfmsr(void)</a>
-<a name="292"><span class="lineNum"> 292 </span> : : {</a>
-<a name="293"><span class="lineNum"> 293 </span> : : unsigned long val;</a>
-<a name="294"><span class="lineNum"> 294 </span> : : </a>
-<a name="295"><span class="lineNum"> 295 </span> : : asm volatile(&quot;mfmsr %0&quot; : &quot;=r&quot;(val) : : &quot;memory&quot;);</a>
-<a name="296"><span class="lineNum"> 296 </span> : : return val;</a>
-<a name="297"><span class="lineNum"> 297 </span> : : }</a>
-<a name="298"><span class="lineNum"> 298 </span> : : </a>
-<a name="299"><span class="lineNum"> 299 </span> : : static inline void mtmsr(unsigned long val)</a>
-<a name="300"><span class="lineNum"> 300 </span> : : {</a>
-<a name="301"><span class="lineNum"> 301 </span> : : asm volatile(&quot;mtmsr %0&quot; : : &quot;r&quot;(val) : &quot;memory&quot;);</a>
-<a name="302"><span class="lineNum"> 302 </span> : : }</a>
-<a name="303"><span class="lineNum"> 303 </span> : : </a>
-<a name="304"><span class="lineNum"> 304 </span> : : static inline void mtmsrd(unsigned long val, int l)</a>
-<a name="305"><span class="lineNum"> 305 </span> : : {</a>
-<a name="306"><span class="lineNum"> 306 </span> : : asm volatile(&quot;mtmsrd %0,%1&quot; : : &quot;r&quot;(val), &quot;i&quot;(l) : &quot;memory&quot;);</a>
-<a name="307"><span class="lineNum"> 307 </span> : : }</a>
-<a name="308"><span class="lineNum"> 308 </span> : : </a>
-<a name="309"><span class="lineNum"> 309 </span> : : static inline __attribute__((always_inline))</a>
-<a name="310"><span class="lineNum"> 310 </span> : : unsigned long mfspr(const unsigned int spr)</a>
-<a name="311"><span class="lineNum"> 311 </span> : : {</a>
-<a name="312"><span class="lineNum"> 312 </span> : : unsigned long val;</a>
+<a name="291"><span class="lineNum"> 291 </span> : : /* POWER9 and above only */</a>
+<a name="292"><span class="lineNum"> 292 </span> : : static inline void flush_erat(void)</a>
+<a name="293"><span class="lineNum"> 293 </span> : : {</a>
+<a name="294"><span class="lineNum"> 294 </span> : : asm volatile(&quot;slbia 7&quot;);</a>
+<a name="295"><span class="lineNum"> 295 </span> : : }</a>
+<a name="296"><span class="lineNum"> 296 </span> : : </a>
+<a name="297"><span class="lineNum"> 297 </span> : : /*</a>
+<a name="298"><span class="lineNum"> 298 </span> : : * SMT priority</a>
+<a name="299"><span class="lineNum"> 299 </span> : : */</a>
+<a name="300"><span class="lineNum"> 300 </span> : : </a>
+<a name="301"><span class="lineNum"> 301 </span> : : static inline void smt_low(void) { asm volatile(&quot;or 1,1,1&quot;); }</a>
+<a name="302"><span class="lineNum"> 302 </span> : : static inline void smt_medium(void) { asm volatile(&quot;or 2,2,2&quot;); }</a>
+<a name="303"><span class="lineNum"> 303 </span> : : static inline void smt_high(void) { asm volatile(&quot;or 3,3,3&quot;); }</a>
+<a name="304"><span class="lineNum"> 304 </span> : : static inline void smt_medium_high(void){ asm volatile(&quot;or 5,5,5&quot;); }</a>
+<a name="305"><span class="lineNum"> 305 </span> : : static inline void smt_medium_low(void) { asm volatile(&quot;or 6,6,6&quot;); }</a>
+<a name="306"><span class="lineNum"> 306 </span> : : static inline void smt_extra_high(void) { asm volatile(&quot;or 7,7,7&quot;); }</a>
+<a name="307"><span class="lineNum"> 307 </span> : : static inline void smt_very_low(void) { asm volatile(&quot;or 31,31,31&quot;); }</a>
+<a name="308"><span class="lineNum"> 308 </span> : : static inline void smt_lowest(void) { smt_low(); smt_very_low(); }</a>
+<a name="309"><span class="lineNum"> 309 </span> : : </a>
+<a name="310"><span class="lineNum"> 310 </span> : : /*</a>
+<a name="311"><span class="lineNum"> 311 </span> : : * SPR access functions</a>
+<a name="312"><span class="lineNum"> 312 </span> : : */</a>
<a name="313"><span class="lineNum"> 313 </span> : : </a>
-<a name="314"><span class="lineNum"> 314 </span> : : asm volatile(&quot;mfspr %0,%1&quot; : &quot;=r&quot;(val) : &quot;i&quot;(spr) : &quot;memory&quot;);</a>
-<a name="315"><span class="lineNum"> 315 </span> : : return val;</a>
-<a name="316"><span class="lineNum"> 316 </span> : : }</a>
-<a name="317"><span class="lineNum"> 317 </span> : : </a>
-<a name="318"><span class="lineNum"> 318 </span> : : static inline __attribute__((always_inline))</a>
-<a name="319"><span class="lineNum"> 319 </span> : : void mtspr(const unsigned int spr, unsigned long val)</a>
-<a name="320"><span class="lineNum"> 320 </span> : : {</a>
-<a name="321"><span class="lineNum"> 321 </span> : : asm volatile(&quot;mtspr %0,%1&quot; : : &quot;i&quot;(spr), &quot;r&quot;(val) : &quot;memory&quot;);</a>
-<a name="322"><span class="lineNum"> 322 </span> : : }</a>
-<a name="323"><span class="lineNum"> 323 </span> : : </a>
-<a name="324"><span class="lineNum"> 324 </span> : : /* Helpers for special sequences needed by some registers */</a>
-<a name="325"><span class="lineNum"> 325 </span> : : extern void set_hid0(unsigned long hid0);</a>
-<a name="326"><span class="lineNum"> 326 </span> : : extern void trigger_attn(void);</a>
-<a name="327"><span class="lineNum"> 327 </span> : : </a>
-<a name="328"><span class="lineNum"> 328 </span> : : /*</a>
-<a name="329"><span class="lineNum"> 329 </span> : : * Barriers</a>
-<a name="330"><span class="lineNum"> 330 </span> : : */</a>
+<a name="314"><span class="lineNum"> 314 </span> : : static inline unsigned long mfmsr(void)</a>
+<a name="315"><span class="lineNum"> 315 </span> : : {</a>
+<a name="316"><span class="lineNum"> 316 </span> : : unsigned long val;</a>
+<a name="317"><span class="lineNum"> 317 </span> : : </a>
+<a name="318"><span class="lineNum"> 318 </span> : : asm volatile(&quot;mfmsr %0&quot; : &quot;=r&quot;(val) : : &quot;memory&quot;);</a>
+<a name="319"><span class="lineNum"> 319 </span> : : return val;</a>
+<a name="320"><span class="lineNum"> 320 </span> : : }</a>
+<a name="321"><span class="lineNum"> 321 </span> : : </a>
+<a name="322"><span class="lineNum"> 322 </span> : : static inline void mtmsr(unsigned long val)</a>
+<a name="323"><span class="lineNum"> 323 </span> : : {</a>
+<a name="324"><span class="lineNum"> 324 </span> : : asm volatile(&quot;mtmsr %0&quot; : : &quot;r&quot;(val) : &quot;memory&quot;);</a>
+<a name="325"><span class="lineNum"> 325 </span> : : }</a>
+<a name="326"><span class="lineNum"> 326 </span> : : </a>
+<a name="327"><span class="lineNum"> 327 </span> : : static inline void mtmsrd(unsigned long val, int l)</a>
+<a name="328"><span class="lineNum"> 328 </span> : : {</a>
+<a name="329"><span class="lineNum"> 329 </span> : : asm volatile(&quot;mtmsrd %0,%1&quot; : : &quot;r&quot;(val), &quot;i&quot;(l) : &quot;memory&quot;);</a>
+<a name="330"><span class="lineNum"> 330 </span> : : }</a>
<a name="331"><span class="lineNum"> 331 </span> : : </a>
-<a name="332"><span class="lineNum"> 332 </span> : : static inline void eieio(void)</a>
-<a name="333"><span class="lineNum"> 333 </span> : : {</a>
-<a name="334"><span class="lineNum"> 334 </span> : : asm volatile(&quot;eieio&quot; : : : &quot;memory&quot;);</a>
-<a name="335"><span class="lineNum"> 335 </span> : : }</a>
+<a name="332"><span class="lineNum"> 332 </span> : : static inline __attribute__((always_inline))</a>
+<a name="333"><span class="lineNum"> 333 </span> : : unsigned long mfspr(const unsigned int spr)</a>
+<a name="334"><span class="lineNum"> 334 </span> : : {</a>
+<a name="335"><span class="lineNum"> 335 </span> : : unsigned long val;</a>
<a name="336"><span class="lineNum"> 336 </span> : : </a>
-<a name="337"><span class="lineNum"> 337 </span> : : static inline void sync(void)</a>
-<a name="338"><span class="lineNum"> 338 </span> : : {</a>
-<a name="339"><span class="lineNum"> 339 </span> : : asm volatile(&quot;sync&quot; : : : &quot;memory&quot;);</a>
-<a name="340"><span class="lineNum"> 340 </span> : : }</a>
-<a name="341"><span class="lineNum"> 341 </span> : : </a>
-<a name="342"><span class="lineNum"> 342 </span> : : static inline void lwsync(void)</a>
+<a name="337"><span class="lineNum"> 337 </span> : : asm volatile(&quot;mfspr %0,%1&quot; : &quot;=r&quot;(val) : &quot;i&quot;(spr) : &quot;memory&quot;);</a>
+<a name="338"><span class="lineNum"> 338 </span> : : return val;</a>
+<a name="339"><span class="lineNum"> 339 </span> : : }</a>
+<a name="340"><span class="lineNum"> 340 </span> : : </a>
+<a name="341"><span class="lineNum"> 341 </span> : : static inline __attribute__((always_inline))</a>
+<a name="342"><span class="lineNum"> 342 </span> : : void mtspr(const unsigned int spr, unsigned long val)</a>
<a name="343"><span class="lineNum"> 343 </span> : : {</a>
-<a name="344"><span class="lineNum"> 344 </span> : : asm volatile(&quot;lwsync&quot; : : : &quot;memory&quot;);</a>
+<a name="344"><span class="lineNum"> 344 </span> : : asm volatile(&quot;mtspr %0,%1&quot; : : &quot;i&quot;(spr), &quot;r&quot;(val) : &quot;memory&quot;);</a>
<a name="345"><span class="lineNum"> 345 </span> : : }</a>
<a name="346"><span class="lineNum"> 346 </span> : : </a>
-<a name="347"><span class="lineNum"> 347 </span> : : static inline void isync(void)</a>
-<a name="348"><span class="lineNum"> 348 </span> : : {</a>
-<a name="349"><span class="lineNum"> 349 </span> : : asm volatile(&quot;isync&quot; : : : &quot;memory&quot;);</a>
-<a name="350"><span class="lineNum"> 350 </span> : : }</a>
-<a name="351"><span class="lineNum"> 351 </span> : : </a>
-<a name="352"><span class="lineNum"> 352 </span> : : </a>
-<a name="353"><span class="lineNum"> 353 </span> : : /*</a>
-<a name="354"><span class="lineNum"> 354 </span> : : * Cache sync</a>
-<a name="355"><span class="lineNum"> 355 </span> : : */</a>
-<a name="356"><span class="lineNum"> 356 </span> : : static inline void sync_icache(void)</a>
-<a name="357"><span class="lineNum"> 357 </span> : : {</a>
-<a name="358"><span class="lineNum"> 358 </span> : : asm volatile(&quot;sync; icbi 0,%0; sync; isync&quot; : : &quot;r&quot; (0) : &quot;memory&quot;);</a>
-<a name="359"><span class="lineNum"> 359 </span> : : }</a>
-<a name="360"><span class="lineNum"> 360 </span> : : </a>
-<a name="361"><span class="lineNum"> 361 </span> : : /*</a>
-<a name="362"><span class="lineNum"> 362 </span> : : * Doorbells</a>
-<a name="363"><span class="lineNum"> 363 </span> : : */</a>
-<a name="364"><span class="lineNum"> 364 </span> : : static inline void msgclr(void)</a>
-<a name="365"><span class="lineNum"> 365 </span> : : {</a>
-<a name="366"><span class="lineNum"> 366 </span> : : uint64_t rb = (0x05 &lt;&lt; (63-36));</a>
-<a name="367"><span class="lineNum"> 367 </span> : : asm volatile(MSGCLR(%0) : : &quot;r&quot;(rb));</a>
+<a name="347"><span class="lineNum"> 347 </span> : : /* Helpers for special sequences needed by some registers */</a>
+<a name="348"><span class="lineNum"> 348 </span> : : extern void set_hid0(unsigned long hid0);</a>
+<a name="349"><span class="lineNum"> 349 </span> : : extern void trigger_attn(void);</a>
+<a name="350"><span class="lineNum"> 350 </span> : : </a>
+<a name="351"><span class="lineNum"> 351 </span> : : /*</a>
+<a name="352"><span class="lineNum"> 352 </span> : : * Barriers</a>
+<a name="353"><span class="lineNum"> 353 </span> : : */</a>
+<a name="354"><span class="lineNum"> 354 </span> : : </a>
+<a name="355"><span class="lineNum"> 355 </span> : : static inline void eieio(void)</a>
+<a name="356"><span class="lineNum"> 356 </span> : : {</a>
+<a name="357"><span class="lineNum"> 357 </span> : : asm volatile(&quot;eieio&quot; : : : &quot;memory&quot;);</a>
+<a name="358"><span class="lineNum"> 358 </span> : : }</a>
+<a name="359"><span class="lineNum"> 359 </span> : : </a>
+<a name="360"><span class="lineNum"> 360 </span> : : static inline void sync(void)</a>
+<a name="361"><span class="lineNum"> 361 </span> : : {</a>
+<a name="362"><span class="lineNum"> 362 </span> : : asm volatile(&quot;sync&quot; : : : &quot;memory&quot;);</a>
+<a name="363"><span class="lineNum"> 363 </span> : : }</a>
+<a name="364"><span class="lineNum"> 364 </span> : : </a>
+<a name="365"><span class="lineNum"> 365 </span> : : static inline void lwsync(void)</a>
+<a name="366"><span class="lineNum"> 366 </span> : : {</a>
+<a name="367"><span class="lineNum"> 367 </span> : : asm volatile(&quot;lwsync&quot; : : : &quot;memory&quot;);</a>
<a name="368"><span class="lineNum"> 368 </span> : : }</a>
<a name="369"><span class="lineNum"> 369 </span> : : </a>
-<a name="370"><span class="lineNum"> 370 </span> : : static inline void p9_dbell_receive(void)</a>
+<a name="370"><span class="lineNum"> 370 </span> : : static inline void isync(void)</a>
<a name="371"><span class="lineNum"> 371 </span> : : {</a>
-<a name="372"><span class="lineNum"> 372 </span> : : uint64_t rb = (0x05 &lt;&lt; (63-36));</a>
-<a name="373"><span class="lineNum"> 373 </span> : : asm volatile(MSGCLR(%0) &quot;;&quot;</a>
-<a name="374"><span class="lineNum"> 374 </span> : : MSGSYNC &quot;;&quot;</a>
-<a name="375"><span class="lineNum"> 375 </span> : : &quot;lwsync&quot;</a>
-<a name="376"><span class="lineNum"> 376 </span> : : : : &quot;r&quot;(rb));</a>
-<a name="377"><span class="lineNum"> 377 </span> : : }</a>
-<a name="378"><span class="lineNum"> 378 </span> : : </a>
-<a name="379"><span class="lineNum"> 379 </span> : : static inline void p9_dbell_send(uint32_t pir)</a>
+<a name="372"><span class="lineNum"> 372 </span> : : asm volatile(&quot;isync&quot; : : : &quot;memory&quot;);</a>
+<a name="373"><span class="lineNum"> 373 </span> : : }</a>
+<a name="374"><span class="lineNum"> 374 </span> : : </a>
+<a name="375"><span class="lineNum"> 375 </span> : : </a>
+<a name="376"><span class="lineNum"> 376 </span> : : /*</a>
+<a name="377"><span class="lineNum"> 377 </span> : : * Cache sync</a>
+<a name="378"><span class="lineNum"> 378 </span> : : */</a>
+<a name="379"><span class="lineNum"> 379 </span> : : static inline void sync_icache(void)</a>
<a name="380"><span class="lineNum"> 380 </span> : : {</a>
-<a name="381"><span class="lineNum"> 381 </span> : : uint64_t rb = (0x05 &lt;&lt; (63-36)) | pir;</a>
-<a name="382"><span class="lineNum"> 382 </span> : : asm volatile(&quot;sync ;&quot;</a>
-<a name="383"><span class="lineNum"> 383 </span> : : MSGSND(%0)</a>
-<a name="384"><span class="lineNum"> 384 </span> : : : : &quot;r&quot;(rb));</a>
-<a name="385"><span class="lineNum"> 385 </span> : : }</a>
-<a name="386"><span class="lineNum"> 386 </span> : : </a>
-<a name="387"><span class="lineNum"> 387 </span> : : /*</a>
-<a name="388"><span class="lineNum"> 388 </span> : : * Byteswap load/stores</a>
-<a name="389"><span class="lineNum"> 389 </span> : : */</a>
-<a name="390"><span class="lineNum"> 390 </span> : : </a>
-<a name="391"><span class="lineNum"> 391 </span> : : static inline uint16_t ld_le16(const uint16_t *addr)</a>
-<a name="392"><span class="lineNum"> 392 </span> : : {</a>
-<a name="393"><span class="lineNum"> 393 </span> : : uint16_t val;</a>
-<a name="394"><span class="lineNum"> 394 </span> : : asm volatile(&quot;lhbrx %0,0,%1&quot; : &quot;=r&quot;(val) : &quot;r&quot;(addr), &quot;m&quot;(*addr));</a>
-<a name="395"><span class="lineNum"> 395 </span> : : return val;</a>
-<a name="396"><span class="lineNum"> 396 </span> : : }</a>
-<a name="397"><span class="lineNum"> 397 </span> : : </a>
-<a name="398"><span class="lineNum"> 398 </span> : : static inline uint32_t ld_le32(const uint32_t *addr)</a>
-<a name="399"><span class="lineNum"> 399 </span> : : {</a>
-<a name="400"><span class="lineNum"> 400 </span> : : uint32_t val;</a>
-<a name="401"><span class="lineNum"> 401 </span> : : asm volatile(&quot;lwbrx %0,0,%1&quot; : &quot;=r&quot;(val) : &quot;r&quot;(addr), &quot;m&quot;(*addr));</a>
-<a name="402"><span class="lineNum"> 402 </span> : : return val;</a>
-<a name="403"><span class="lineNum"> 403 </span> : : }</a>
-<a name="404"><span class="lineNum"> 404 </span> : : </a>
-<a name="405"><span class="lineNum"> 405 </span> : : static inline void st_le16(uint16_t *addr, uint16_t val)</a>
-<a name="406"><span class="lineNum"> 406 </span> : : {</a>
-<a name="407"><span class="lineNum"> 407 </span> : : asm volatile(&quot;sthbrx %0,0,%1&quot; : : &quot;r&quot;(val), &quot;r&quot;(addr), &quot;m&quot;(*addr));</a>
+<a name="381"><span class="lineNum"> 381 </span> : : asm volatile(&quot;sync; icbi 0,%0; sync; isync&quot; : : &quot;r&quot; (0) : &quot;memory&quot;);</a>
+<a name="382"><span class="lineNum"> 382 </span> : : }</a>
+<a name="383"><span class="lineNum"> 383 </span> : : </a>
+<a name="384"><span class="lineNum"> 384 </span> : : /*</a>
+<a name="385"><span class="lineNum"> 385 </span> : : * Doorbells</a>
+<a name="386"><span class="lineNum"> 386 </span> : : */</a>
+<a name="387"><span class="lineNum"> 387 </span> : : static inline void msgclr(void)</a>
+<a name="388"><span class="lineNum"> 388 </span> : : {</a>
+<a name="389"><span class="lineNum"> 389 </span> : : uint64_t rb = (0x05 &lt;&lt; (63-36));</a>
+<a name="390"><span class="lineNum"> 390 </span> : : asm volatile(MSGCLR(%0) : : &quot;r&quot;(rb));</a>
+<a name="391"><span class="lineNum"> 391 </span> : : }</a>
+<a name="392"><span class="lineNum"> 392 </span> : : </a>
+<a name="393"><span class="lineNum"> 393 </span> : : static inline void p9_dbell_receive(void)</a>
+<a name="394"><span class="lineNum"> 394 </span> : : {</a>
+<a name="395"><span class="lineNum"> 395 </span> : : uint64_t rb = (0x05 &lt;&lt; (63-36));</a>
+<a name="396"><span class="lineNum"> 396 </span> : : asm volatile(MSGCLR(%0) &quot;;&quot;</a>
+<a name="397"><span class="lineNum"> 397 </span> : : MSGSYNC &quot;;&quot;</a>
+<a name="398"><span class="lineNum"> 398 </span> : : &quot;lwsync&quot;</a>
+<a name="399"><span class="lineNum"> 399 </span> : : : : &quot;r&quot;(rb));</a>
+<a name="400"><span class="lineNum"> 400 </span> : : }</a>
+<a name="401"><span class="lineNum"> 401 </span> : : </a>
+<a name="402"><span class="lineNum"> 402 </span> : : static inline void p9_dbell_send(uint32_t pir)</a>
+<a name="403"><span class="lineNum"> 403 </span> : : {</a>
+<a name="404"><span class="lineNum"> 404 </span> : : uint64_t rb = (0x05 &lt;&lt; (63-36)) | pir;</a>
+<a name="405"><span class="lineNum"> 405 </span> : : asm volatile(&quot;sync ;&quot;</a>
+<a name="406"><span class="lineNum"> 406 </span> : : MSGSND(%0)</a>
+<a name="407"><span class="lineNum"> 407 </span> : : : : &quot;r&quot;(rb));</a>
<a name="408"><span class="lineNum"> 408 </span> : : }</a>
<a name="409"><span class="lineNum"> 409 </span> : : </a>
-<a name="410"><span class="lineNum"> 410 </span> : : static inline void st_le32(uint32_t *addr, uint32_t val)</a>
-<a name="411"><span class="lineNum"> 411 </span> : : {</a>
-<a name="412"><span class="lineNum"> 412 </span> : : asm volatile(&quot;stwbrx %0,0,%1&quot; : : &quot;r&quot;(val), &quot;r&quot;(addr), &quot;m&quot;(*addr));</a>
-<a name="413"><span class="lineNum"> 413 </span> : : }</a>
-<a name="414"><span class="lineNum"> 414 </span> : : </a>
-<a name="415"><span class="lineNum"> 415 </span> : : #endif /* __TEST__ */</a>
-<a name="416"><span class="lineNum"> 416 </span> : : </a>
-<a name="417"><span class="lineNum"> 417 </span> : : #endif /* __ASSEMBLY__ */</a>
-<a name="418"><span class="lineNum"> 418 </span> : : </a>
-<a name="419"><span class="lineNum"> 419 </span> : : #endif /* __PROCESSOR_H */</a>
+<a name="410"><span class="lineNum"> 410 </span> : : /*</a>
+<a name="411"><span class="lineNum"> 411 </span> : : * Byteswap load/stores</a>
+<a name="412"><span class="lineNum"> 412 </span> : : */</a>
+<a name="413"><span class="lineNum"> 413 </span> : : </a>
+<a name="414"><span class="lineNum"> 414 </span> : : static inline uint16_t ld_le16(const uint16_t *addr)</a>
+<a name="415"><span class="lineNum"> 415 </span> : : {</a>
+<a name="416"><span class="lineNum"> 416 </span> : : uint16_t val;</a>
+<a name="417"><span class="lineNum"> 417 </span> : : asm volatile(&quot;lhbrx %0,0,%1&quot; : &quot;=r&quot;(val) : &quot;r&quot;(addr), &quot;m&quot;(*addr));</a>
+<a name="418"><span class="lineNum"> 418 </span> : : return val;</a>
+<a name="419"><span class="lineNum"> 419 </span> : : }</a>
+<a name="420"><span class="lineNum"> 420 </span> : : </a>
+<a name="421"><span class="lineNum"> 421 </span> : : static inline uint32_t ld_le32(const uint32_t *addr)</a>
+<a name="422"><span class="lineNum"> 422 </span> : : {</a>
+<a name="423"><span class="lineNum"> 423 </span> : : uint32_t val;</a>
+<a name="424"><span class="lineNum"> 424 </span> : : asm volatile(&quot;lwbrx %0,0,%1&quot; : &quot;=r&quot;(val) : &quot;r&quot;(addr), &quot;m&quot;(*addr));</a>
+<a name="425"><span class="lineNum"> 425 </span> : : return val;</a>
+<a name="426"><span class="lineNum"> 426 </span> : : }</a>
+<a name="427"><span class="lineNum"> 427 </span> : : </a>
+<a name="428"><span class="lineNum"> 428 </span> : : static inline void st_le16(uint16_t *addr, uint16_t val)</a>
+<a name="429"><span class="lineNum"> 429 </span> : : {</a>
+<a name="430"><span class="lineNum"> 430 </span> : : asm volatile(&quot;sthbrx %0,0,%1&quot; : : &quot;r&quot;(val), &quot;r&quot;(addr), &quot;m&quot;(*addr));</a>
+<a name="431"><span class="lineNum"> 431 </span> : : }</a>
+<a name="432"><span class="lineNum"> 432 </span> : : </a>
+<a name="433"><span class="lineNum"> 433 </span> : : static inline void st_le32(uint32_t *addr, uint32_t val)</a>
+<a name="434"><span class="lineNum"> 434 </span> : : {</a>
+<a name="435"><span class="lineNum"> 435 </span> : : asm volatile(&quot;stwbrx %0,0,%1&quot; : : &quot;r&quot;(val), &quot;r&quot;(addr), &quot;m&quot;(*addr));</a>
+<a name="436"><span class="lineNum"> 436 </span> : : }</a>
+<a name="437"><span class="lineNum"> 437 </span> : : </a>
+<a name="438"><span class="lineNum"> 438 </span> : : #endif /* __TEST__ */</a>
+<a name="439"><span class="lineNum"> 439 </span> : : </a>
+<a name="440"><span class="lineNum"> 440 </span> : : #endif /* __ASSEMBLY__ */</a>
+<a name="441"><span class="lineNum"> 441 </span> : : </a>
+<a name="442"><span class="lineNum"> 442 </span> : : #endif /* __PROCESSOR_H */</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/include/skiboot.h.func-sort-c.html b/coverage-report/include/skiboot.h.func-sort-c.html
index 9254ba3..10bbcc2 100644
--- a/coverage-report/include/skiboot.h.func-sort-c.html
+++ b/coverage-report/include/skiboot.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -69,12 +69,12 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="skiboot.h.gcov.html#151">cleanup_addr</a></td>
+ <td class="coverFn"><a href="skiboot.h.gcov.html#154">cleanup_addr</a></td>
<td class="coverFnHi">222</td>
</tr>
<tr>
- <td class="coverFn"><a href="skiboot.h.gcov.html#48">is_rodata</a></td>
- <td class="coverFnHi">5784</td>
+ <td class="coverFn"><a href="skiboot.h.gcov.html#50">is_rodata</a></td>
+ <td class="coverFnHi">5830</td>
</tr>
</table>
<br>
diff --git a/coverage-report/include/skiboot.h.func.html b/coverage-report/include/skiboot.h.func.html
index 8f968b2..e45a266 100644
--- a/coverage-report/include/skiboot.h.func.html
+++ b/coverage-report/include/skiboot.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -69,12 +69,12 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="skiboot.h.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="skiboot.h.gcov.html#151">cleanup_addr</a></td>
+ <td class="coverFn"><a href="skiboot.h.gcov.html#154">cleanup_addr</a></td>
<td class="coverFnHi">222</td>
</tr>
<tr>
- <td class="coverFn"><a href="skiboot.h.gcov.html#48">is_rodata</a></td>
- <td class="coverFnHi">5784</td>
+ <td class="coverFn"><a href="skiboot.h.gcov.html#50">is_rodata</a></td>
+ <td class="coverFnHi">5830</td>
</tr>
</table>
<br>
diff --git a/coverage-report/include/skiboot.h.gcov.html b/coverage-report/include/skiboot.h.gcov.html
index 75d3cf2..eaefbe7 100644
--- a/coverage-report/include/skiboot.h.gcov.html
+++ b/coverage-report/include/skiboot.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@@ -70,353 +70,374 @@
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
<a name="1"><span class="lineNum"> 1 </span> : : // SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later</a>
-<a name="2"><span class="lineNum"> 2 </span> : : /* Copyright 2013-2019 IBM Corp. */</a>
-<a name="3"><span class="lineNum"> 3 </span> : : </a>
-<a name="4"><span class="lineNum"> 4 </span> : : #ifndef __SKIBOOT_H</a>
-<a name="5"><span class="lineNum"> 5 </span> : : #define __SKIBOOT_H</a>
-<a name="6"><span class="lineNum"> 6 </span> : : </a>
-<a name="7"><span class="lineNum"> 7 </span> : : #include &lt;compiler.h&gt;</a>
-<a name="8"><span class="lineNum"> 8 </span> : : #include &lt;stdint.h&gt;</a>
-<a name="9"><span class="lineNum"> 9 </span> : : #include &lt;stdbool.h&gt;</a>
-<a name="10"><span class="lineNum"> 10 </span> : : #include &lt;string.h&gt;</a>
-<a name="11"><span class="lineNum"> 11 </span> : : #include &lt;stdlib.h&gt;</a>
-<a name="12"><span class="lineNum"> 12 </span> : : #include &lt;stdio.h&gt;</a>
-<a name="13"><span class="lineNum"> 13 </span> : : #include &lt;assert.h&gt;</a>
-<a name="14"><span class="lineNum"> 14 </span> : : #include &lt;errno.h&gt;</a>
-<a name="15"><span class="lineNum"> 15 </span> : : #include &lt;bitutils.h&gt;</a>
-<a name="16"><span class="lineNum"> 16 </span> : : #include &lt;types.h&gt;</a>
-<a name="17"><span class="lineNum"> 17 </span> : : </a>
-<a name="18"><span class="lineNum"> 18 </span> : : #include &lt;ccan/container_of/container_of.h&gt;</a>
-<a name="19"><span class="lineNum"> 19 </span> : : #include &lt;ccan/list/list.h&gt;</a>
-<a name="20"><span class="lineNum"> 20 </span> : : #include &lt;ccan/short_types/short_types.h&gt;</a>
-<a name="21"><span class="lineNum"> 21 </span> : : #include &lt;ccan/build_assert/build_assert.h&gt;</a>
-<a name="22"><span class="lineNum"> 22 </span> : : #include &lt;ccan/array_size/array_size.h&gt;</a>
-<a name="23"><span class="lineNum"> 23 </span> : : #include &lt;ccan/endian/endian.h&gt;</a>
-<a name="24"><span class="lineNum"> 24 </span> : : #include &lt;ccan/str/str.h&gt;</a>
-<a name="25"><span class="lineNum"> 25 </span> : : </a>
-<a name="26"><span class="lineNum"> 26 </span> : : #include &lt;libflash/blocklevel.h&gt;</a>
+<a name="2"><span class="lineNum"> 2 </span> : : /* Copyright 2013-2019 IBM Corp.</a>
+<a name="3"><span class="lineNum"> 3 </span> : : * Copyright 2021 Stewart Smith</a>
+<a name="4"><span class="lineNum"> 4 </span> : : */</a>
+<a name="5"><span class="lineNum"> 5 </span> : : </a>
+<a name="6"><span class="lineNum"> 6 </span> : : #ifndef __SKIBOOT_H</a>
+<a name="7"><span class="lineNum"> 7 </span> : : #define __SKIBOOT_H</a>
+<a name="8"><span class="lineNum"> 8 </span> : : </a>
+<a name="9"><span class="lineNum"> 9 </span> : : #include &lt;compiler.h&gt;</a>
+<a name="10"><span class="lineNum"> 10 </span> : : #include &lt;stdint.h&gt;</a>
+<a name="11"><span class="lineNum"> 11 </span> : : #include &lt;stdbool.h&gt;</a>
+<a name="12"><span class="lineNum"> 12 </span> : : #include &lt;string.h&gt;</a>
+<a name="13"><span class="lineNum"> 13 </span> : : #include &lt;stdlib.h&gt;</a>
+<a name="14"><span class="lineNum"> 14 </span> : : #include &lt;stdio.h&gt;</a>
+<a name="15"><span class="lineNum"> 15 </span> : : #include &lt;assert.h&gt;</a>
+<a name="16"><span class="lineNum"> 16 </span> : : #include &lt;errno.h&gt;</a>
+<a name="17"><span class="lineNum"> 17 </span> : : #include &lt;bitutils.h&gt;</a>
+<a name="18"><span class="lineNum"> 18 </span> : : #include &lt;types.h&gt;</a>
+<a name="19"><span class="lineNum"> 19 </span> : : </a>
+<a name="20"><span class="lineNum"> 20 </span> : : #include &lt;ccan/container_of/container_of.h&gt;</a>
+<a name="21"><span class="lineNum"> 21 </span> : : #include &lt;ccan/list/list.h&gt;</a>
+<a name="22"><span class="lineNum"> 22 </span> : : #include &lt;ccan/short_types/short_types.h&gt;</a>
+<a name="23"><span class="lineNum"> 23 </span> : : #include &lt;ccan/build_assert/build_assert.h&gt;</a>
+<a name="24"><span class="lineNum"> 24 </span> : : #include &lt;ccan/array_size/array_size.h&gt;</a>
+<a name="25"><span class="lineNum"> 25 </span> : : #include &lt;ccan/endian/endian.h&gt;</a>
+<a name="26"><span class="lineNum"> 26 </span> : : #include &lt;ccan/str/str.h&gt;</a>
<a name="27"><span class="lineNum"> 27 </span> : : </a>
-<a name="28"><span class="lineNum"> 28 </span> : : #include &lt;mem-map.h&gt;</a>
-<a name="29"><span class="lineNum"> 29 </span> : : #include &lt;op-panel.h&gt;</a>
-<a name="30"><span class="lineNum"> 30 </span> : : #include &lt;platform.h&gt;</a>
-<a name="31"><span class="lineNum"> 31 </span> : : </a>
-<a name="32"><span class="lineNum"> 32 </span> : : /* Special ELF sections */</a>
-<a name="33"><span class="lineNum"> 33 </span> : : #define __force_data __section(&quot;.force.data&quot;)</a>
-<a name="34"><span class="lineNum"> 34 </span> : : </a>
-<a name="35"><span class="lineNum"> 35 </span> : : struct mem_region;</a>
-<a name="36"><span class="lineNum"> 36 </span> : : extern struct mem_region *mem_region_next(struct mem_region *region);</a>
-<a name="37"><span class="lineNum"> 37 </span> : : </a>
-<a name="38"><span class="lineNum"> 38 </span> : : /* Misc linker script symbols */</a>
-<a name="39"><span class="lineNum"> 39 </span> : : extern char _start[];</a>
-<a name="40"><span class="lineNum"> 40 </span> : : extern char _head_end[];</a>
-<a name="41"><span class="lineNum"> 41 </span> : : extern char _stext[];</a>
-<a name="42"><span class="lineNum"> 42 </span> : : extern char _etext[];</a>
-<a name="43"><span class="lineNum"> 43 </span> : : extern char __sym_map_end[];</a>
-<a name="44"><span class="lineNum"> 44 </span> : : extern char _romem_end[];</a>
-<a name="45"><span class="lineNum"> 45 </span> : : </a>
-<a name="46"><span class="lineNum"> 46 </span> : : #ifndef __TESTING__</a>
-<a name="47"><span class="lineNum"> 47 </span> : : /* Readonly section start and end. */</a>
-<a name="48"><span class="lineNum"> 48 </span> : : extern char __rodata_start[], __rodata_end[];</a>
-<a name="49"><span class="lineNum"> 49 </span> : : </a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 5784 : static inline bool is_rodata(const void *p)</span></a>
-<a name="51"><span class="lineNum"> 51 </span> : : {</a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 5784 : return ((const char *)p &gt;= __rodata_start &amp;&amp; (const char *)p &lt; __rodata_end);</span></a>
-<a name="53"><span class="lineNum"> 53 </span> : : }</a>
-<a name="54"><span class="lineNum"> 54 </span> : : #else</a>
-<a name="55"><span class="lineNum"> 55 </span> : : static inline bool is_rodata(const void *p)</a>
-<a name="56"><span class="lineNum"> 56 </span> : : {</a>
-<a name="57"><span class="lineNum"> 57 </span> : : return false;</a>
-<a name="58"><span class="lineNum"> 58 </span> : : }</a>
-<a name="59"><span class="lineNum"> 59 </span> : : #endif</a>
-<a name="60"><span class="lineNum"> 60 </span> : : </a>
-<a name="61"><span class="lineNum"> 61 </span> : : /* Console logging</a>
-<a name="62"><span class="lineNum"> 62 </span> : : * Update console_get_level() if you add here</a>
-<a name="63"><span class="lineNum"> 63 </span> : : */</a>
-<a name="64"><span class="lineNum"> 64 </span> : : #define PR_EMERG 0</a>
-<a name="65"><span class="lineNum"> 65 </span> : : #define PR_ALERT 1</a>
-<a name="66"><span class="lineNum"> 66 </span> : : #define PR_CRIT 2</a>
-<a name="67"><span class="lineNum"> 67 </span> : : #define PR_ERR 3</a>
-<a name="68"><span class="lineNum"> 68 </span> : : #define PR_WARNING 4</a>
-<a name="69"><span class="lineNum"> 69 </span> : : #define PR_NOTICE 5</a>
-<a name="70"><span class="lineNum"> 70 </span> : : #define PR_PRINTF PR_NOTICE</a>
-<a name="71"><span class="lineNum"> 71 </span> : : #define PR_INFO 6</a>
-<a name="72"><span class="lineNum"> 72 </span> : : #define PR_DEBUG 7</a>
-<a name="73"><span class="lineNum"> 73 </span> : : #define PR_TRACE 8</a>
-<a name="74"><span class="lineNum"> 74 </span> : : #define PR_INSANE 9</a>
-<a name="75"><span class="lineNum"> 75 </span> : : </a>
-<a name="76"><span class="lineNum"> 76 </span> : : #ifndef pr_fmt</a>
-<a name="77"><span class="lineNum"> 77 </span> : : #define pr_fmt(fmt) fmt</a>
-<a name="78"><span class="lineNum"> 78 </span> : : #endif</a>
-<a name="79"><span class="lineNum"> 79 </span> : : </a>
-<a name="80"><span class="lineNum"> 80 </span> : : void _prlog(int log_level, const char* fmt, ...) __attribute__((format (printf, 2, 3)));</a>
-<a name="81"><span class="lineNum"> 81 </span> : : #define prlog(l, f, ...) do { _prlog(l, pr_fmt(f), ##__VA_ARGS__); } while(0)</a>
-<a name="82"><span class="lineNum"> 82 </span> : : #define prerror(fmt...) do { prlog(PR_ERR, fmt); } while(0)</a>
-<a name="83"><span class="lineNum"> 83 </span> : : #define prlog_once(arg, ...) \</a>
-<a name="84"><span class="lineNum"> 84 </span> : : ({ \</a>
-<a name="85"><span class="lineNum"> 85 </span> : : static bool __prlog_once = false; \</a>
-<a name="86"><span class="lineNum"> 86 </span> : : if (!__prlog_once) { \</a>
-<a name="87"><span class="lineNum"> 87 </span> : : __prlog_once = true; \</a>
-<a name="88"><span class="lineNum"> 88 </span> : : prlog(arg, ##__VA_ARGS__); \</a>
-<a name="89"><span class="lineNum"> 89 </span> : : } \</a>
-<a name="90"><span class="lineNum"> 90 </span> : : })</a>
-<a name="91"><span class="lineNum"> 91 </span> : : </a>
-<a name="92"><span class="lineNum"> 92 </span> : : /* Location codes -- at most 80 chars with null termination */</a>
-<a name="93"><span class="lineNum"> 93 </span> : : #define LOC_CODE_SIZE 80</a>
-<a name="94"><span class="lineNum"> 94 </span> : : </a>
-<a name="95"><span class="lineNum"> 95 </span> : : /* Processor generation */</a>
-<a name="96"><span class="lineNum"> 96 </span> : : enum proc_gen {</a>
-<a name="97"><span class="lineNum"> 97 </span> : : proc_gen_unknown,</a>
-<a name="98"><span class="lineNum"> 98 </span> : : proc_gen_p8,</a>
-<a name="99"><span class="lineNum"> 99 </span> : : proc_gen_p9,</a>
-<a name="100"><span class="lineNum"> 100 </span> : : };</a>
-<a name="101"><span class="lineNum"> 101 </span> : : extern enum proc_gen proc_gen;</a>
-<a name="102"><span class="lineNum"> 102 </span> : : </a>
-<a name="103"><span class="lineNum"> 103 </span> : : extern unsigned int pcie_max_link_speed;</a>
-<a name="104"><span class="lineNum"> 104 </span> : : </a>
-<a name="105"><span class="lineNum"> 105 </span> : : /* Convert a 4-bit number to a hex char */</a>
-<a name="106"><span class="lineNum"> 106 </span> : : extern char __attrconst tohex(uint8_t nibble);</a>
+<a name="28"><span class="lineNum"> 28 </span> : : #include &lt;libflash/blocklevel.h&gt;</a>
+<a name="29"><span class="lineNum"> 29 </span> : : </a>
+<a name="30"><span class="lineNum"> 30 </span> : : #include &lt;mem-map.h&gt;</a>
+<a name="31"><span class="lineNum"> 31 </span> : : #include &lt;op-panel.h&gt;</a>
+<a name="32"><span class="lineNum"> 32 </span> : : #include &lt;platform.h&gt;</a>
+<a name="33"><span class="lineNum"> 33 </span> : : </a>
+<a name="34"><span class="lineNum"> 34 </span> : : /* Special ELF sections */</a>
+<a name="35"><span class="lineNum"> 35 </span> : : #define __force_data __section(&quot;.force.data&quot;)</a>
+<a name="36"><span class="lineNum"> 36 </span> : : </a>
+<a name="37"><span class="lineNum"> 37 </span> : : struct mem_region;</a>
+<a name="38"><span class="lineNum"> 38 </span> : : extern struct mem_region *mem_region_next(struct mem_region *region);</a>
+<a name="39"><span class="lineNum"> 39 </span> : : </a>
+<a name="40"><span class="lineNum"> 40 </span> : : /* Misc linker script symbols */</a>
+<a name="41"><span class="lineNum"> 41 </span> : : extern char _start[];</a>
+<a name="42"><span class="lineNum"> 42 </span> : : extern char _head_end[];</a>
+<a name="43"><span class="lineNum"> 43 </span> : : extern char _stext[];</a>
+<a name="44"><span class="lineNum"> 44 </span> : : extern char _etext[];</a>
+<a name="45"><span class="lineNum"> 45 </span> : : extern char __sym_map_end[];</a>
+<a name="46"><span class="lineNum"> 46 </span> : : extern char _romem_end[];</a>
+<a name="47"><span class="lineNum"> 47 </span> : : </a>
+<a name="48"><span class="lineNum"> 48 </span> : : #ifndef __TESTING__</a>
+<a name="49"><span class="lineNum"> 49 </span> : : /* Readonly section start and end. */</a>
+<a name="50"><span class="lineNum"> 50 </span> : : extern char __rodata_start[], __rodata_end[];</a>
+<a name="51"><span class="lineNum"> 51 </span> : : </a>
+<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 5830 : static inline bool is_rodata(const void *p)</span></a>
+<a name="53"><span class="lineNum"> 53 </span> : : {</a>
+<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 5830 : return ((const char *)p &gt;= __rodata_start &amp;&amp; (const char *)p &lt; __rodata_end);</span></a>
+<a name="55"><span class="lineNum"> 55 </span> : : }</a>
+<a name="56"><span class="lineNum"> 56 </span> : : #else</a>
+<a name="57"><span class="lineNum"> 57 </span> : : static inline bool is_rodata(const void *p)</a>
+<a name="58"><span class="lineNum"> 58 </span> : : {</a>
+<a name="59"><span class="lineNum"> 59 </span> : : return false;</a>
+<a name="60"><span class="lineNum"> 60 </span> : : }</a>
+<a name="61"><span class="lineNum"> 61 </span> : : #endif</a>
+<a name="62"><span class="lineNum"> 62 </span> : : </a>
+<a name="63"><span class="lineNum"> 63 </span> : : /* Console logging</a>
+<a name="64"><span class="lineNum"> 64 </span> : : * Update console_get_level() if you add here</a>
+<a name="65"><span class="lineNum"> 65 </span> : : */</a>
+<a name="66"><span class="lineNum"> 66 </span> : : #define PR_EMERG 0</a>
+<a name="67"><span class="lineNum"> 67 </span> : : #define PR_ALERT 1</a>
+<a name="68"><span class="lineNum"> 68 </span> : : #define PR_CRIT 2</a>
+<a name="69"><span class="lineNum"> 69 </span> : : #define PR_ERR 3</a>
+<a name="70"><span class="lineNum"> 70 </span> : : #define PR_WARNING 4</a>
+<a name="71"><span class="lineNum"> 71 </span> : : #define PR_NOTICE 5</a>
+<a name="72"><span class="lineNum"> 72 </span> : : #define PR_PRINTF PR_NOTICE</a>
+<a name="73"><span class="lineNum"> 73 </span> : : #define PR_INFO 6</a>
+<a name="74"><span class="lineNum"> 74 </span> : : #define PR_DEBUG 7</a>
+<a name="75"><span class="lineNum"> 75 </span> : : #define PR_TRACE 8</a>
+<a name="76"><span class="lineNum"> 76 </span> : : #define PR_INSANE 9</a>
+<a name="77"><span class="lineNum"> 77 </span> : : </a>
+<a name="78"><span class="lineNum"> 78 </span> : : #ifndef pr_fmt</a>
+<a name="79"><span class="lineNum"> 79 </span> : : #define pr_fmt(fmt) fmt</a>
+<a name="80"><span class="lineNum"> 80 </span> : : #endif</a>
+<a name="81"><span class="lineNum"> 81 </span> : : </a>
+<a name="82"><span class="lineNum"> 82 </span> : : void _prlog(int log_level, const char* fmt, ...) __attribute__((format (printf, 2, 3)));</a>
+<a name="83"><span class="lineNum"> 83 </span> : : #define prlog(l, f, ...) do { _prlog(l, pr_fmt(f), ##__VA_ARGS__); } while(0)</a>
+<a name="84"><span class="lineNum"> 84 </span> : : #define prerror(fmt...) do { prlog(PR_ERR, fmt); } while(0)</a>
+<a name="85"><span class="lineNum"> 85 </span> : : #define prlog_once(arg, ...) \</a>
+<a name="86"><span class="lineNum"> 86 </span> : : ({ \</a>
+<a name="87"><span class="lineNum"> 87 </span> : : static bool __prlog_once = false; \</a>
+<a name="88"><span class="lineNum"> 88 </span> : : if (!__prlog_once) { \</a>
+<a name="89"><span class="lineNum"> 89 </span> : : __prlog_once = true; \</a>
+<a name="90"><span class="lineNum"> 90 </span> : : prlog(arg, ##__VA_ARGS__); \</a>
+<a name="91"><span class="lineNum"> 91 </span> : : } \</a>
+<a name="92"><span class="lineNum"> 92 </span> : : })</a>
+<a name="93"><span class="lineNum"> 93 </span> : : </a>
+<a name="94"><span class="lineNum"> 94 </span> : : /* Location codes -- at most 80 chars with null termination */</a>
+<a name="95"><span class="lineNum"> 95 </span> : : #define LOC_CODE_SIZE 80</a>
+<a name="96"><span class="lineNum"> 96 </span> : : </a>
+<a name="97"><span class="lineNum"> 97 </span> : : /* Processor generation */</a>
+<a name="98"><span class="lineNum"> 98 </span> : : enum proc_gen {</a>
+<a name="99"><span class="lineNum"> 99 </span> : : proc_gen_unknown,</a>
+<a name="100"><span class="lineNum"> 100 </span> : : proc_gen_p8,</a>
+<a name="101"><span class="lineNum"> 101 </span> : : proc_gen_p9,</a>
+<a name="102"><span class="lineNum"> 102 </span> : : proc_gen_p10,</a>
+<a name="103"><span class="lineNum"> 103 </span> : : };</a>
+<a name="104"><span class="lineNum"> 104 </span> : : extern enum proc_gen proc_gen;</a>
+<a name="105"><span class="lineNum"> 105 </span> : : </a>
+<a name="106"><span class="lineNum"> 106 </span> : : extern unsigned int pcie_max_link_speed;</a>
<a name="107"><span class="lineNum"> 107 </span> : : </a>
-<a name="108"><span class="lineNum"> 108 </span> : : #ifndef __TEST__</a>
-<a name="109"><span class="lineNum"> 109 </span> : : /* Bit position of the most significant 1-bit (LSB=0, MSB=63) */</a>
-<a name="110"><span class="lineNum"> 110 </span> : : static inline int ilog2(unsigned long val)</a>
-<a name="111"><span class="lineNum"> 111 </span> : : {</a>
-<a name="112"><span class="lineNum"> 112 </span> : : int left_zeros;</a>
-<a name="113"><span class="lineNum"> 113 </span> : : </a>
-<a name="114"><span class="lineNum"> 114 </span> : : asm volatile (&quot;cntlzd %0,%1&quot; : &quot;=r&quot; (left_zeros) : &quot;r&quot; (val));</a>
-<a name="115"><span class="lineNum"> 115 </span> : : </a>
-<a name="116"><span class="lineNum"> 116 </span> : : return 63 - left_zeros;</a>
-<a name="117"><span class="lineNum"> 117 </span> : : }</a>
+<a name="108"><span class="lineNum"> 108 </span> : : /* Convert a 4-bit number to a hex char */</a>
+<a name="109"><span class="lineNum"> 109 </span> : : extern char __attrconst tohex(uint8_t nibble);</a>
+<a name="110"><span class="lineNum"> 110 </span> : : </a>
+<a name="111"><span class="lineNum"> 111 </span> : : #ifndef __TEST__</a>
+<a name="112"><span class="lineNum"> 112 </span> : : /* Bit position of the most significant 1-bit (LSB=0, MSB=63) */</a>
+<a name="113"><span class="lineNum"> 113 </span> : : static inline int ilog2(unsigned long val)</a>
+<a name="114"><span class="lineNum"> 114 </span> : : {</a>
+<a name="115"><span class="lineNum"> 115 </span> : : int left_zeros;</a>
+<a name="116"><span class="lineNum"> 116 </span> : : </a>
+<a name="117"><span class="lineNum"> 117 </span> : : asm volatile (&quot;cntlzd %0,%1&quot; : &quot;=r&quot; (left_zeros) : &quot;r&quot; (val));</a>
<a name="118"><span class="lineNum"> 118 </span> : : </a>
-<a name="119"><span class="lineNum"> 119 </span> : : static inline bool is_pow2(unsigned long val)</a>
-<a name="120"><span class="lineNum"> 120 </span> : : {</a>
-<a name="121"><span class="lineNum"> 121 </span> : : return val == (1ul &lt;&lt; ilog2(val));</a>
-<a name="122"><span class="lineNum"> 122 </span> : : }</a>
-<a name="123"><span class="lineNum"> 123 </span> : : #endif</a>
-<a name="124"><span class="lineNum"> 124 </span> : : </a>
-<a name="125"><span class="lineNum"> 125 </span> : : #define lo32(x) ((x) &amp; 0xffffffff)</a>
-<a name="126"><span class="lineNum"> 126 </span> : : #define hi32(x) (((x) &gt;&gt; 32) &amp; 0xffffffff)</a>
+<a name="119"><span class="lineNum"> 119 </span> : : return 63 - left_zeros;</a>
+<a name="120"><span class="lineNum"> 120 </span> : : }</a>
+<a name="121"><span class="lineNum"> 121 </span> : : </a>
+<a name="122"><span class="lineNum"> 122 </span> : : static inline bool is_pow2(unsigned long val)</a>
+<a name="123"><span class="lineNum"> 123 </span> : : {</a>
+<a name="124"><span class="lineNum"> 124 </span> : : return val == (1ul &lt;&lt; ilog2(val));</a>
+<a name="125"><span class="lineNum"> 125 </span> : : }</a>
+<a name="126"><span class="lineNum"> 126 </span> : : #endif</a>
<a name="127"><span class="lineNum"> 127 </span> : : </a>
-<a name="128"><span class="lineNum"> 128 </span> : : /* WARNING: _a *MUST* be a power of two */</a>
-<a name="129"><span class="lineNum"> 129 </span> : : #define ALIGN_UP(_v, _a) (((_v) + (_a) - 1) &amp; ~((_a) - 1))</a>
-<a name="130"><span class="lineNum"> 130 </span> : : #define ALIGN_DOWN(_v, _a) ((_v) &amp; ~((_a) - 1))</a>
-<a name="131"><span class="lineNum"> 131 </span> : : </a>
-<a name="132"><span class="lineNum"> 132 </span> : : /* TCE alignment */</a>
-<a name="133"><span class="lineNum"> 133 </span> : : #define TCE_SHIFT 12</a>
-<a name="134"><span class="lineNum"> 134 </span> : : #define TCE_PSIZE (1ul &lt;&lt; 12)</a>
-<a name="135"><span class="lineNum"> 135 </span> : : #define TCE_MASK (TCE_PSIZE - 1)</a>
-<a name="136"><span class="lineNum"> 136 </span> : : </a>
-<a name="137"><span class="lineNum"> 137 </span> : : /* Not the greatest variants but will do for now ... */</a>
-<a name="138"><span class="lineNum"> 138 </span> : : #define MIN(a, b) ((a) &lt; (b) ? (a) : (b))</a>
-<a name="139"><span class="lineNum"> 139 </span> : : #define MAX(a, b) ((a) &gt; (b) ? (a) : (b))</a>
-<a name="140"><span class="lineNum"> 140 </span> : : </a>
-<a name="141"><span class="lineNum"> 141 </span> : : /* PCI Geographical Addressing */</a>
-<a name="142"><span class="lineNum"> 142 </span> : : #define PCI_BUS_NUM(bdfn) (((bdfn) &gt;&gt; 8) &amp; 0xff)</a>
-<a name="143"><span class="lineNum"> 143 </span> : : #define PCI_DEV(bdfn) (((bdfn) &gt;&gt; 3) &amp; 0x1f)</a>
-<a name="144"><span class="lineNum"> 144 </span> : : #define PCI_FUNC(bdfn) ((bdfn) &amp; 0x07)</a>
-<a name="145"><span class="lineNum"> 145 </span> : : </a>
-<a name="146"><span class="lineNum"> 146 </span> : : /*</a>
-<a name="147"><span class="lineNum"> 147 </span> : : * To help the FSP to distinguish between physical address and TCE mapped address.</a>
-<a name="148"><span class="lineNum"> 148 </span> : : * Also to help hostboot to distinguish physical and relative address.</a>
-<a name="149"><span class="lineNum"> 149 </span> : : */</a>
-<a name="150"><span class="lineNum"> 150 </span> : : #define HRMOR_BIT (1ul &lt;&lt; 63)</a>
-<a name="151"><span class="lineNum"> 151 </span> : : </a>
-<a name="152"><span class="lineNum"> 152 </span> : : /* Clean the stray high bit which the FSP inserts: we only have 52 bits real */</a>
-<a name="153"><span class="lineNum"> 153 </span> :<span class="lineCov"> 222 : static inline u64 cleanup_addr(u64 addr)</span></a>
-<a name="154"><span class="lineNum"> 154 </span> : : {</a>
-<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 222 : return addr &amp; ((1ULL &lt;&lt; 52) - 1);</span></a>
-<a name="156"><span class="lineNum"> 156 </span> : : }</a>
-<a name="157"><span class="lineNum"> 157 </span> : : </a>
-<a name="158"><span class="lineNum"> 158 </span> : : /* Start the kernel */</a>
-<a name="159"><span class="lineNum"> 159 </span> : : extern void start_kernel(uint64_t entry, void* fdt,</a>
-<a name="160"><span class="lineNum"> 160 </span> : : uint64_t mem_top) __noreturn;</a>
-<a name="161"><span class="lineNum"> 161 </span> : : extern void start_kernel32(uint64_t entry, void* fdt,</a>
-<a name="162"><span class="lineNum"> 162 </span> : : uint64_t mem_top) __noreturn;</a>
-<a name="163"><span class="lineNum"> 163 </span> : : extern void start_kernel_secondary(uint64_t entry) __noreturn;</a>
-<a name="164"><span class="lineNum"> 164 </span> : : </a>
-<a name="165"><span class="lineNum"> 165 </span> : : /* Get description of machine from HDAT and create device-tree */</a>
-<a name="166"><span class="lineNum"> 166 </span> : : extern int parse_hdat(bool is_opal);</a>
+<a name="128"><span class="lineNum"> 128 </span> : : #define lo32(x) ((x) &amp; 0xffffffff)</a>
+<a name="129"><span class="lineNum"> 129 </span> : : #define hi32(x) (((x) &gt;&gt; 32) &amp; 0xffffffff)</a>
+<a name="130"><span class="lineNum"> 130 </span> : : </a>
+<a name="131"><span class="lineNum"> 131 </span> : : /* WARNING: _a *MUST* be a power of two */</a>
+<a name="132"><span class="lineNum"> 132 </span> : : #define ALIGN_UP(_v, _a) (((_v) + (_a) - 1) &amp; ~((_a) - 1))</a>
+<a name="133"><span class="lineNum"> 133 </span> : : #define ALIGN_DOWN(_v, _a) ((_v) &amp; ~((_a) - 1))</a>
+<a name="134"><span class="lineNum"> 134 </span> : : </a>
+<a name="135"><span class="lineNum"> 135 </span> : : /* TCE alignment */</a>
+<a name="136"><span class="lineNum"> 136 </span> : : #define TCE_SHIFT 12</a>
+<a name="137"><span class="lineNum"> 137 </span> : : #define TCE_PSIZE (1ul &lt;&lt; 12)</a>
+<a name="138"><span class="lineNum"> 138 </span> : : #define TCE_MASK (TCE_PSIZE - 1)</a>
+<a name="139"><span class="lineNum"> 139 </span> : : </a>
+<a name="140"><span class="lineNum"> 140 </span> : : /* Not the greatest variants but will do for now ... */</a>
+<a name="141"><span class="lineNum"> 141 </span> : : #define MIN(a, b) ((a) &lt; (b) ? (a) : (b))</a>
+<a name="142"><span class="lineNum"> 142 </span> : : #define MAX(a, b) ((a) &gt; (b) ? (a) : (b))</a>
+<a name="143"><span class="lineNum"> 143 </span> : : </a>
+<a name="144"><span class="lineNum"> 144 </span> : : /* PCI Geographical Addressing */</a>
+<a name="145"><span class="lineNum"> 145 </span> : : #define PCI_BUS_NUM(bdfn) (((bdfn) &gt;&gt; 8) &amp; 0xff)</a>
+<a name="146"><span class="lineNum"> 146 </span> : : #define PCI_DEV(bdfn) (((bdfn) &gt;&gt; 3) &amp; 0x1f)</a>
+<a name="147"><span class="lineNum"> 147 </span> : : #define PCI_FUNC(bdfn) ((bdfn) &amp; 0x07)</a>
+<a name="148"><span class="lineNum"> 148 </span> : : </a>
+<a name="149"><span class="lineNum"> 149 </span> : : /*</a>
+<a name="150"><span class="lineNum"> 150 </span> : : * To help the FSP to distinguish between physical address and TCE mapped address.</a>
+<a name="151"><span class="lineNum"> 151 </span> : : * Also to help hostboot to distinguish physical and relative address.</a>
+<a name="152"><span class="lineNum"> 152 </span> : : */</a>
+<a name="153"><span class="lineNum"> 153 </span> : : #define HRMOR_BIT (1ul &lt;&lt; 63)</a>
+<a name="154"><span class="lineNum"> 154 </span> : : </a>
+<a name="155"><span class="lineNum"> 155 </span> : : /* Clean the stray high bit which the FSP inserts: we only have 52 bits real */</a>
+<a name="156"><span class="lineNum"> 156 </span> :<span class="lineCov"> 222 : static inline u64 cleanup_addr(u64 addr)</span></a>
+<a name="157"><span class="lineNum"> 157 </span> : : {</a>
+<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 222 : return addr &amp; ((1ULL &lt;&lt; 52) - 1);</span></a>
+<a name="159"><span class="lineNum"> 159 </span> : : }</a>
+<a name="160"><span class="lineNum"> 160 </span> : : </a>
+<a name="161"><span class="lineNum"> 161 </span> : : /* Start the kernel */</a>
+<a name="162"><span class="lineNum"> 162 </span> : : extern void start_kernel(uint64_t entry, void* fdt,</a>
+<a name="163"><span class="lineNum"> 163 </span> : : uint64_t mem_top) __noreturn;</a>
+<a name="164"><span class="lineNum"> 164 </span> : : extern void start_kernel32(uint64_t entry, void* fdt,</a>
+<a name="165"><span class="lineNum"> 165 </span> : : uint64_t mem_top) __noreturn;</a>
+<a name="166"><span class="lineNum"> 166 </span> : : extern void start_kernel_secondary(uint64_t entry) __noreturn;</a>
<a name="167"><span class="lineNum"> 167 </span> : : </a>
-<a name="168"><span class="lineNum"> 168 </span> : : struct dt_node;</a>
-<a name="169"><span class="lineNum"> 169 </span> : : </a>
-<a name="170"><span class="lineNum"> 170 </span> : : /* Add /cpus/features node for boot environment that passes an fdt */</a>
-<a name="171"><span class="lineNum"> 171 </span> : : extern void dt_add_cpufeatures(struct dt_node *root);</a>
+<a name="168"><span class="lineNum"> 168 </span> : : /* Re-set r16 register with CPU pointer, based on stack (r1) value */</a>
+<a name="169"><span class="lineNum"> 169 </span> : : extern void restore_cpu_ptr_r16(void);</a>
+<a name="170"><span class="lineNum"> 170 </span> : : /* Set r16 register with value in 'r16' parameter */</a>
+<a name="171"><span class="lineNum"> 171 </span> : : extern void set_cpu_ptr_r16(uint64_t r16);</a>
<a name="172"><span class="lineNum"> 172 </span> : : </a>
-<a name="173"><span class="lineNum"> 173 </span> : : /* Root of device tree. */</a>
-<a name="174"><span class="lineNum"> 174 </span> : : extern struct dt_node *dt_root;</a>
+<a name="173"><span class="lineNum"> 173 </span> : : /* Get description of machine from HDAT and create device-tree */</a>
+<a name="174"><span class="lineNum"> 174 </span> : : extern int parse_hdat(bool is_opal);</a>
<a name="175"><span class="lineNum"> 175 </span> : : </a>
-<a name="176"><span class="lineNum"> 176 </span> : : /* Full skiboot version number (possibly includes gitid). */</a>
-<a name="177"><span class="lineNum"> 177 </span> : : extern const char version[];</a>
-<a name="178"><span class="lineNum"> 178 </span> : : </a>
-<a name="179"><span class="lineNum"> 179 </span> : : /* Debug support */</a>
-<a name="180"><span class="lineNum"> 180 </span> : : extern char __sym_map_start[];</a>
-<a name="181"><span class="lineNum"> 181 </span> : : extern char __sym_map_end[];</a>
-<a name="182"><span class="lineNum"> 182 </span> : : extern size_t snprintf_symbol(char *buf, size_t len, uint64_t addr);</a>
+<a name="176"><span class="lineNum"> 176 </span> : : struct dt_node;</a>
+<a name="177"><span class="lineNum"> 177 </span> : : </a>
+<a name="178"><span class="lineNum"> 178 </span> : : /* Add /cpus/features node for boot environment that passes an fdt */</a>
+<a name="179"><span class="lineNum"> 179 </span> : : extern void dt_add_cpufeatures(struct dt_node *root);</a>
+<a name="180"><span class="lineNum"> 180 </span> : : </a>
+<a name="181"><span class="lineNum"> 181 </span> : : /* Root of device tree. */</a>
+<a name="182"><span class="lineNum"> 182 </span> : : extern struct dt_node *dt_root;</a>
<a name="183"><span class="lineNum"> 183 </span> : : </a>
-<a name="184"><span class="lineNum"> 184 </span> : : /* Direct controls */</a>
-<a name="185"><span class="lineNum"> 185 </span> : : extern void direct_controls_init(void);</a>
-<a name="186"><span class="lineNum"> 186 </span> : : extern int64_t opal_signal_system_reset(int cpu_nr);</a>
-<a name="187"><span class="lineNum"> 187 </span> : : </a>
-<a name="188"><span class="lineNum"> 188 </span> : : /* Fast reboot support */</a>
-<a name="189"><span class="lineNum"> 189 </span> : : extern void disable_fast_reboot(const char *reason);</a>
-<a name="190"><span class="lineNum"> 190 </span> : : extern void add_fast_reboot_dt_entries(void);</a>
-<a name="191"><span class="lineNum"> 191 </span> : : extern void fast_reboot(void);</a>
-<a name="192"><span class="lineNum"> 192 </span> : : extern void __noreturn __secondary_cpu_entry(void);</a>
-<a name="193"><span class="lineNum"> 193 </span> : : extern void __noreturn load_and_boot_kernel(bool is_reboot);</a>
-<a name="194"><span class="lineNum"> 194 </span> : : extern void cleanup_local_tlb(void);</a>
-<a name="195"><span class="lineNum"> 195 </span> : : extern void cleanup_global_tlb(void);</a>
-<a name="196"><span class="lineNum"> 196 </span> : : extern void init_shared_sprs(void);</a>
-<a name="197"><span class="lineNum"> 197 </span> : : extern void init_replicated_sprs(void);</a>
-<a name="198"><span class="lineNum"> 198 </span> : : extern bool start_preload_kernel(void);</a>
-<a name="199"><span class="lineNum"> 199 </span> : : extern void copy_exception_vectors(void);</a>
-<a name="200"><span class="lineNum"> 200 </span> : : extern void copy_sreset_vector(void);</a>
-<a name="201"><span class="lineNum"> 201 </span> : : extern void copy_sreset_vector_fast_reboot(void);</a>
-<a name="202"><span class="lineNum"> 202 </span> : : extern void patch_traps(bool enable);</a>
-<a name="203"><span class="lineNum"> 203 </span> : : </a>
-<a name="204"><span class="lineNum"> 204 </span> : : /* Various probe routines, to replace with an initcall system */</a>
-<a name="205"><span class="lineNum"> 205 </span> : : extern void probe_phb3(void);</a>
-<a name="206"><span class="lineNum"> 206 </span> : : extern void probe_phb4(void);</a>
-<a name="207"><span class="lineNum"> 207 </span> : : extern int preload_capp_ucode(void);</a>
-<a name="208"><span class="lineNum"> 208 </span> : : extern void preload_io_vpd(void);</a>
-<a name="209"><span class="lineNum"> 209 </span> : : extern void probe_npu(void);</a>
-<a name="210"><span class="lineNum"> 210 </span> : : extern void probe_npu2(void);</a>
-<a name="211"><span class="lineNum"> 211 </span> : : extern void probe_npu3(void);</a>
-<a name="212"><span class="lineNum"> 212 </span> : : extern void uart_init(void);</a>
-<a name="213"><span class="lineNum"> 213 </span> : : extern void mbox_init(void);</a>
-<a name="214"><span class="lineNum"> 214 </span> : : extern void early_uart_init(void);</a>
-<a name="215"><span class="lineNum"> 215 </span> : : extern void homer_init(void);</a>
-<a name="216"><span class="lineNum"> 216 </span> : : extern void slw_init(void);</a>
-<a name="217"><span class="lineNum"> 217 </span> : : extern void add_cpu_idle_state_properties(void);</a>
-<a name="218"><span class="lineNum"> 218 </span> : : extern void lpc_rtc_init(void);</a>
-<a name="219"><span class="lineNum"> 219 </span> : : </a>
-<a name="220"><span class="lineNum"> 220 </span> : : /* flash support */</a>
-<a name="221"><span class="lineNum"> 221 </span> : : struct flash_chip;</a>
-<a name="222"><span class="lineNum"> 222 </span> : : extern int flash_register(struct blocklevel_device *bl);</a>
-<a name="223"><span class="lineNum"> 223 </span> : : extern int flash_start_preload_resource(enum resource_id id, uint32_t subid,</a>
-<a name="224"><span class="lineNum"> 224 </span> : : void *buf, size_t *len);</a>
-<a name="225"><span class="lineNum"> 225 </span> : : extern int flash_resource_loaded(enum resource_id id, uint32_t idx);</a>
-<a name="226"><span class="lineNum"> 226 </span> : : extern bool flash_reserve(void);</a>
-<a name="227"><span class="lineNum"> 227 </span> : : extern void flash_release(void);</a>
-<a name="228"><span class="lineNum"> 228 </span> : : extern bool flash_unregister(void);</a>
-<a name="229"><span class="lineNum"> 229 </span> : : #define FLASH_SUBPART_ALIGNMENT 0x1000</a>
-<a name="230"><span class="lineNum"> 230 </span> : : #define FLASH_SUBPART_HEADER_SIZE FLASH_SUBPART_ALIGNMENT</a>
-<a name="231"><span class="lineNum"> 231 </span> : : extern int flash_subpart_info(void *part_header, uint32_t header_len,</a>
-<a name="232"><span class="lineNum"> 232 </span> : : uint32_t part_size, uint32_t *part_actual,</a>
-<a name="233"><span class="lineNum"> 233 </span> : : uint32_t subid, uint32_t *offset,</a>
-<a name="234"><span class="lineNum"> 234 </span> : : uint32_t *size);</a>
-<a name="235"><span class="lineNum"> 235 </span> : : extern void flash_fw_version_preload(void);</a>
-<a name="236"><span class="lineNum"> 236 </span> : : extern void flash_dt_add_fw_version(void);</a>
-<a name="237"><span class="lineNum"> 237 </span> : : extern const char *flash_map_resource_name(enum resource_id id);</a>
-<a name="238"><span class="lineNum"> 238 </span> : : extern int flash_secboot_info(uint32_t *total_size);</a>
-<a name="239"><span class="lineNum"> 239 </span> : : extern int flash_secboot_read(void *dst, uint32_t src, uint32_t len);</a>
-<a name="240"><span class="lineNum"> 240 </span> : : extern int flash_secboot_write(uint32_t dst, void *src, uint32_t len);</a>
-<a name="241"><span class="lineNum"> 241 </span> : : </a>
-<a name="242"><span class="lineNum"> 242 </span> : : /*</a>
-<a name="243"><span class="lineNum"> 243 </span> : : * Decompression routines</a>
-<a name="244"><span class="lineNum"> 244 </span> : : *</a>
-<a name="245"><span class="lineNum"> 245 </span> : : * The below structure members are needed for the xz library routines,</a>
-<a name="246"><span class="lineNum"> 246 </span> : : * src: Source address (The compressed binary)</a>
-<a name="247"><span class="lineNum"> 247 </span> : : * src_size: Source size</a>
-<a name="248"><span class="lineNum"> 248 </span> : : * dst: Destination address (The memory area where the `src` will be</a>
-<a name="249"><span class="lineNum"> 249 </span> : : * decompressed)</a>
-<a name="250"><span class="lineNum"> 250 </span> : : * dst_size: Destination size</a>
-<a name="251"><span class="lineNum"> 251 </span> : : */</a>
-<a name="252"><span class="lineNum"> 252 </span> : : struct xz_decompress {</a>
-<a name="253"><span class="lineNum"> 253 </span> : : void *dst;</a>
-<a name="254"><span class="lineNum"> 254 </span> : : void *src;</a>
-<a name="255"><span class="lineNum"> 255 </span> : : size_t dst_size;</a>
-<a name="256"><span class="lineNum"> 256 </span> : : size_t src_size;</a>
-<a name="257"><span class="lineNum"> 257 </span> : : /* The status of the decompress process:</a>
-<a name="258"><span class="lineNum"> 258 </span> : : - OPAL_PARTIAL: if the job is in progress</a>
-<a name="259"><span class="lineNum"> 259 </span> : : - OPAL_SUCCESS: if the job is successful</a>
-<a name="260"><span class="lineNum"> 260 </span> : : - OPAL_NO_MEM: memory allocation failure</a>
-<a name="261"><span class="lineNum"> 261 </span> : : - OPAL_PARAMETER: If any of the above (src, dst..) are invalid or</a>
-<a name="262"><span class="lineNum"> 262 </span> : : if xz decompress fails. In which case the caller should check the</a>
-<a name="263"><span class="lineNum"> 263 </span> : : xz_error for failure reason.</a>
-<a name="264"><span class="lineNum"> 264 </span> : : */</a>
-<a name="265"><span class="lineNum"> 265 </span> : : int status;</a>
-<a name="266"><span class="lineNum"> 266 </span> : : int xz_error;</a>
-<a name="267"><span class="lineNum"> 267 </span> : : /* The decompression job, this will be freed if the caller uses</a>
-<a name="268"><span class="lineNum"> 268 </span> : : * `wait_xz_decompression` function, in any other case its the</a>
-<a name="269"><span class="lineNum"> 269 </span> : : * responsibility of caller to free the allocation job. */</a>
-<a name="270"><span class="lineNum"> 270 </span> : : struct cpu_job *job;</a>
-<a name="271"><span class="lineNum"> 271 </span> : : };</a>
-<a name="272"><span class="lineNum"> 272 </span> : : </a>
-<a name="273"><span class="lineNum"> 273 </span> : : extern void xz_start_decompress(struct xz_decompress *);</a>
-<a name="274"><span class="lineNum"> 274 </span> : : extern void wait_xz_decompress(struct xz_decompress *);</a>
-<a name="275"><span class="lineNum"> 275 </span> : : </a>
-<a name="276"><span class="lineNum"> 276 </span> : : /* NVRAM support */</a>
-<a name="277"><span class="lineNum"> 277 </span> : : extern void nvram_init(void);</a>
-<a name="278"><span class="lineNum"> 278 </span> : : extern void nvram_read_complete(bool success);</a>
-<a name="279"><span class="lineNum"> 279 </span> : : </a>
-<a name="280"><span class="lineNum"> 280 </span> : : /* UART stuff */</a>
-<a name="281"><span class="lineNum"> 281 </span> : : enum {</a>
-<a name="282"><span class="lineNum"> 282 </span> : : UART_CONSOLE_OPAL,</a>
-<a name="283"><span class="lineNum"> 283 </span> : : UART_CONSOLE_OS</a>
-<a name="284"><span class="lineNum"> 284 </span> : : };</a>
-<a name="285"><span class="lineNum"> 285 </span> : : extern void uart_set_console_policy(int policy);</a>
-<a name="286"><span class="lineNum"> 286 </span> : : extern bool uart_enabled(void);</a>
-<a name="287"><span class="lineNum"> 287 </span> : : </a>
-<a name="288"><span class="lineNum"> 288 </span> : : /* PRD */</a>
-<a name="289"><span class="lineNum"> 289 </span> : : extern void prd_psi_interrupt(uint32_t proc);</a>
-<a name="290"><span class="lineNum"> 290 </span> : : extern void prd_tmgt_interrupt(uint32_t proc);</a>
-<a name="291"><span class="lineNum"> 291 </span> : : extern void prd_occ_reset(uint32_t proc);</a>
-<a name="292"><span class="lineNum"> 292 </span> : : extern void prd_sbe_passthrough(uint32_t proc);</a>
-<a name="293"><span class="lineNum"> 293 </span> : : extern void prd_init(void);</a>
-<a name="294"><span class="lineNum"> 294 </span> : : extern void prd_register_reserved_memory(void);</a>
-<a name="295"><span class="lineNum"> 295 </span> : : extern void prd_fsp_occ_reset(uint32_t proc);</a>
-<a name="296"><span class="lineNum"> 296 </span> : : extern void prd_fsp_occ_load_start(u32 proc);</a>
-<a name="297"><span class="lineNum"> 297 </span> : : extern void prd_fw_resp_fsp_response(int status);</a>
-<a name="298"><span class="lineNum"> 298 </span> : : extern int prd_hbrt_fsp_msg_notify(void *data, u32 dsize);</a>
-<a name="299"><span class="lineNum"> 299 </span> : : </a>
-<a name="300"><span class="lineNum"> 300 </span> : : /* Flatten device-tree */</a>
-<a name="301"><span class="lineNum"> 301 </span> : : extern void *create_dtb(const struct dt_node *root, bool exclusive);</a>
-<a name="302"><span class="lineNum"> 302 </span> : : </a>
-<a name="303"><span class="lineNum"> 303 </span> : : /* Track failure in Wakup engine */</a>
-<a name="304"><span class="lineNum"> 304 </span> : : enum wakeup_engine_states {</a>
-<a name="305"><span class="lineNum"> 305 </span> : : WAKEUP_ENGINE_NOT_PRESENT,</a>
-<a name="306"><span class="lineNum"> 306 </span> : : WAKEUP_ENGINE_PRESENT,</a>
-<a name="307"><span class="lineNum"> 307 </span> : : WAKEUP_ENGINE_FAILED</a>
-<a name="308"><span class="lineNum"> 308 </span> : : };</a>
-<a name="309"><span class="lineNum"> 309 </span> : : extern enum wakeup_engine_states wakeup_engine_state;</a>
-<a name="310"><span class="lineNum"> 310 </span> : : extern bool has_deep_states;</a>
-<a name="311"><span class="lineNum"> 311 </span> : : extern void nx_p9_rng_late_init(void);</a>
-<a name="312"><span class="lineNum"> 312 </span> : : </a>
-<a name="313"><span class="lineNum"> 313 </span> : : </a>
-<a name="314"><span class="lineNum"> 314 </span> : : </a>
-<a name="315"><span class="lineNum"> 315 </span> : : /* SLW reinit function for switching core settings */</a>
-<a name="316"><span class="lineNum"> 316 </span> : : extern int64_t slw_reinit(uint64_t flags);</a>
+<a name="184"><span class="lineNum"> 184 </span> : : /* Full skiboot version number (possibly includes gitid). */</a>
+<a name="185"><span class="lineNum"> 185 </span> : : extern const char version[];</a>
+<a name="186"><span class="lineNum"> 186 </span> : : </a>
+<a name="187"><span class="lineNum"> 187 </span> : : /* Debug support */</a>
+<a name="188"><span class="lineNum"> 188 </span> : : extern char __sym_map_start[];</a>
+<a name="189"><span class="lineNum"> 189 </span> : : extern char __sym_map_end[];</a>
+<a name="190"><span class="lineNum"> 190 </span> : : extern size_t snprintf_symbol(char *buf, size_t len, uint64_t addr);</a>
+<a name="191"><span class="lineNum"> 191 </span> : : </a>
+<a name="192"><span class="lineNum"> 192 </span> : : /* Direct controls */</a>
+<a name="193"><span class="lineNum"> 193 </span> : : extern void direct_controls_init(void);</a>
+<a name="194"><span class="lineNum"> 194 </span> : : extern int64_t opal_signal_system_reset(int cpu_nr);</a>
+<a name="195"><span class="lineNum"> 195 </span> : : </a>
+<a name="196"><span class="lineNum"> 196 </span> : : /* Fast reboot support */</a>
+<a name="197"><span class="lineNum"> 197 </span> : : extern void disable_fast_reboot(const char *reason);</a>
+<a name="198"><span class="lineNum"> 198 </span> : : extern void add_fast_reboot_dt_entries(void);</a>
+<a name="199"><span class="lineNum"> 199 </span> : : extern void fast_reboot(void);</a>
+<a name="200"><span class="lineNum"> 200 </span> : : extern void __noreturn __secondary_cpu_entry(void);</a>
+<a name="201"><span class="lineNum"> 201 </span> : : extern void __noreturn load_and_boot_kernel(bool is_reboot);</a>
+<a name="202"><span class="lineNum"> 202 </span> : : extern void cleanup_local_tlb(void);</a>
+<a name="203"><span class="lineNum"> 203 </span> : : extern void cleanup_global_tlb(void);</a>
+<a name="204"><span class="lineNum"> 204 </span> : : extern void init_shared_sprs(void);</a>
+<a name="205"><span class="lineNum"> 205 </span> : : extern void init_replicated_sprs(void);</a>
+<a name="206"><span class="lineNum"> 206 </span> : : extern bool start_preload_kernel(void);</a>
+<a name="207"><span class="lineNum"> 207 </span> : : extern void copy_exception_vectors(void);</a>
+<a name="208"><span class="lineNum"> 208 </span> : : extern void copy_sreset_vector(void);</a>
+<a name="209"><span class="lineNum"> 209 </span> : : extern void copy_sreset_vector_fast_reboot(void);</a>
+<a name="210"><span class="lineNum"> 210 </span> : : extern void patch_traps(bool enable);</a>
+<a name="211"><span class="lineNum"> 211 </span> : : </a>
+<a name="212"><span class="lineNum"> 212 </span> : : /* Various probe routines, to replace with an initcall system */</a>
+<a name="213"><span class="lineNum"> 213 </span> : : extern int preload_capp_ucode(void);</a>
+<a name="214"><span class="lineNum"> 214 </span> : : extern void preload_io_vpd(void);</a>
+<a name="215"><span class="lineNum"> 215 </span> : : extern void uart_init(void);</a>
+<a name="216"><span class="lineNum"> 216 </span> : : extern void mbox_init(void);</a>
+<a name="217"><span class="lineNum"> 217 </span> : : extern void early_uart_init(void);</a>
+<a name="218"><span class="lineNum"> 218 </span> : : extern void homer_init(void);</a>
+<a name="219"><span class="lineNum"> 219 </span> : : extern void add_cpu_idle_state_properties(void);</a>
+<a name="220"><span class="lineNum"> 220 </span> : : extern void lpc_rtc_init(void);</a>
+<a name="221"><span class="lineNum"> 221 </span> : : </a>
+<a name="222"><span class="lineNum"> 222 </span> : : /* flash support */</a>
+<a name="223"><span class="lineNum"> 223 </span> : : struct flash_chip;</a>
+<a name="224"><span class="lineNum"> 224 </span> : : extern int flash_register(struct blocklevel_device *bl);</a>
+<a name="225"><span class="lineNum"> 225 </span> : : extern int flash_start_preload_resource(enum resource_id id, uint32_t subid,</a>
+<a name="226"><span class="lineNum"> 226 </span> : : void *buf, size_t *len);</a>
+<a name="227"><span class="lineNum"> 227 </span> : : extern int flash_resource_loaded(enum resource_id id, uint32_t idx);</a>
+<a name="228"><span class="lineNum"> 228 </span> : : extern bool flash_reserve(void);</a>
+<a name="229"><span class="lineNum"> 229 </span> : : extern void flash_release(void);</a>
+<a name="230"><span class="lineNum"> 230 </span> : : extern bool flash_unregister(void);</a>
+<a name="231"><span class="lineNum"> 231 </span> : : #define FLASH_SUBPART_ALIGNMENT 0x1000</a>
+<a name="232"><span class="lineNum"> 232 </span> : : #define FLASH_SUBPART_HEADER_SIZE FLASH_SUBPART_ALIGNMENT</a>
+<a name="233"><span class="lineNum"> 233 </span> : : extern int flash_subpart_info(void *part_header, uint32_t header_len,</a>
+<a name="234"><span class="lineNum"> 234 </span> : : uint32_t part_size, uint32_t *part_actual,</a>
+<a name="235"><span class="lineNum"> 235 </span> : : uint32_t subid, uint32_t *offset,</a>
+<a name="236"><span class="lineNum"> 236 </span> : : uint32_t *size);</a>
+<a name="237"><span class="lineNum"> 237 </span> : : extern void flash_fw_version_preload(void);</a>
+<a name="238"><span class="lineNum"> 238 </span> : : extern void flash_dt_add_fw_version(void);</a>
+<a name="239"><span class="lineNum"> 239 </span> : : extern const char *flash_map_resource_name(enum resource_id id);</a>
+<a name="240"><span class="lineNum"> 240 </span> : : extern int flash_secboot_info(uint32_t *total_size);</a>
+<a name="241"><span class="lineNum"> 241 </span> : : extern int flash_secboot_read(void *dst, uint32_t src, uint32_t len);</a>
+<a name="242"><span class="lineNum"> 242 </span> : : extern int flash_secboot_write(uint32_t dst, void *src, uint32_t len);</a>
+<a name="243"><span class="lineNum"> 243 </span> : : </a>
+<a name="244"><span class="lineNum"> 244 </span> : : /*</a>
+<a name="245"><span class="lineNum"> 245 </span> : : * Decompression routines</a>
+<a name="246"><span class="lineNum"> 246 </span> : : *</a>
+<a name="247"><span class="lineNum"> 247 </span> : : * The below structure members are needed for the xz library routines,</a>
+<a name="248"><span class="lineNum"> 248 </span> : : * src: Source address (The compressed binary)</a>
+<a name="249"><span class="lineNum"> 249 </span> : : * src_size: Source size</a>
+<a name="250"><span class="lineNum"> 250 </span> : : * dst: Destination address (The memory area where the `src` will be</a>
+<a name="251"><span class="lineNum"> 251 </span> : : * decompressed)</a>
+<a name="252"><span class="lineNum"> 252 </span> : : * dst_size: Destination size</a>
+<a name="253"><span class="lineNum"> 253 </span> : : */</a>
+<a name="254"><span class="lineNum"> 254 </span> : : struct xz_decompress {</a>
+<a name="255"><span class="lineNum"> 255 </span> : : void *dst;</a>
+<a name="256"><span class="lineNum"> 256 </span> : : void *src;</a>
+<a name="257"><span class="lineNum"> 257 </span> : : size_t dst_size;</a>
+<a name="258"><span class="lineNum"> 258 </span> : : size_t src_size;</a>
+<a name="259"><span class="lineNum"> 259 </span> : : /* The status of the decompress process:</a>
+<a name="260"><span class="lineNum"> 260 </span> : : - OPAL_PARTIAL: if the job is in progress</a>
+<a name="261"><span class="lineNum"> 261 </span> : : - OPAL_SUCCESS: if the job is successful</a>
+<a name="262"><span class="lineNum"> 262 </span> : : - OPAL_NO_MEM: memory allocation failure</a>
+<a name="263"><span class="lineNum"> 263 </span> : : - OPAL_PARAMETER: If any of the above (src, dst..) are invalid or</a>
+<a name="264"><span class="lineNum"> 264 </span> : : if xz decompress fails. In which case the caller should check the</a>
+<a name="265"><span class="lineNum"> 265 </span> : : xz_error for failure reason.</a>
+<a name="266"><span class="lineNum"> 266 </span> : : */</a>
+<a name="267"><span class="lineNum"> 267 </span> : : int status;</a>
+<a name="268"><span class="lineNum"> 268 </span> : : int xz_error;</a>
+<a name="269"><span class="lineNum"> 269 </span> : : /* The decompression job, this will be freed if the caller uses</a>
+<a name="270"><span class="lineNum"> 270 </span> : : * `wait_xz_decompression` function, in any other case its the</a>
+<a name="271"><span class="lineNum"> 271 </span> : : * responsibility of caller to free the allocation job. */</a>
+<a name="272"><span class="lineNum"> 272 </span> : : struct cpu_job *job;</a>
+<a name="273"><span class="lineNum"> 273 </span> : : };</a>
+<a name="274"><span class="lineNum"> 274 </span> : : </a>
+<a name="275"><span class="lineNum"> 275 </span> : : extern void xz_start_decompress(struct xz_decompress *);</a>
+<a name="276"><span class="lineNum"> 276 </span> : : extern void wait_xz_decompress(struct xz_decompress *);</a>
+<a name="277"><span class="lineNum"> 277 </span> : : </a>
+<a name="278"><span class="lineNum"> 278 </span> : : /* NVRAM support */</a>
+<a name="279"><span class="lineNum"> 279 </span> : : extern void nvram_init(void);</a>
+<a name="280"><span class="lineNum"> 280 </span> : : extern void nvram_read_complete(bool success);</a>
+<a name="281"><span class="lineNum"> 281 </span> : : </a>
+<a name="282"><span class="lineNum"> 282 </span> : : /* UART stuff */</a>
+<a name="283"><span class="lineNum"> 283 </span> : : enum {</a>
+<a name="284"><span class="lineNum"> 284 </span> : : UART_CONSOLE_OPAL,</a>
+<a name="285"><span class="lineNum"> 285 </span> : : UART_CONSOLE_OS</a>
+<a name="286"><span class="lineNum"> 286 </span> : : };</a>
+<a name="287"><span class="lineNum"> 287 </span> : : extern void uart_set_console_policy(int policy);</a>
+<a name="288"><span class="lineNum"> 288 </span> : : extern bool uart_enabled(void);</a>
+<a name="289"><span class="lineNum"> 289 </span> : : </a>
+<a name="290"><span class="lineNum"> 290 </span> : : /* PRD */</a>
+<a name="291"><span class="lineNum"> 291 </span> : : extern void prd_psi_interrupt(uint32_t proc);</a>
+<a name="292"><span class="lineNum"> 292 </span> : : extern void prd_tmgt_interrupt(uint32_t proc);</a>
+<a name="293"><span class="lineNum"> 293 </span> : : extern void prd_occ_reset(uint32_t proc);</a>
+<a name="294"><span class="lineNum"> 294 </span> : : extern void prd_sbe_passthrough(uint32_t proc);</a>
+<a name="295"><span class="lineNum"> 295 </span> : : extern void prd_init(void);</a>
+<a name="296"><span class="lineNum"> 296 </span> : : extern void prd_register_reserved_memory(void);</a>
+<a name="297"><span class="lineNum"> 297 </span> : : extern void prd_fsp_occ_reset(uint32_t proc);</a>
+<a name="298"><span class="lineNum"> 298 </span> : : extern void prd_fsp_occ_load_start(u32 proc);</a>
+<a name="299"><span class="lineNum"> 299 </span> : : extern void prd_fw_resp_fsp_response(int status);</a>
+<a name="300"><span class="lineNum"> 300 </span> : : extern int prd_hbrt_fsp_msg_notify(void *data, u32 dsize);</a>
+<a name="301"><span class="lineNum"> 301 </span> : : </a>
+<a name="302"><span class="lineNum"> 302 </span> : : /* Flatten device-tree */</a>
+<a name="303"><span class="lineNum"> 303 </span> : : extern void *create_dtb(const struct dt_node *root, bool exclusive);</a>
+<a name="304"><span class="lineNum"> 304 </span> : : </a>
+<a name="305"><span class="lineNum"> 305 </span> : : extern void nx_p9_rng_late_init(void);</a>
+<a name="306"><span class="lineNum"> 306 </span> : : </a>
+<a name="307"><span class="lineNum"> 307 </span> : : extern void fast_sleep_exit(void);</a>
+<a name="308"><span class="lineNum"> 308 </span> : : </a>
+<a name="309"><span class="lineNum"> 309 </span> : : /* Fallback fake RTC */</a>
+<a name="310"><span class="lineNum"> 310 </span> : : extern void fake_rtc_init(void);</a>
+<a name="311"><span class="lineNum"> 311 </span> : : </a>
+<a name="312"><span class="lineNum"> 312 </span> : : /* Exceptions */</a>
+<a name="313"><span class="lineNum"> 313 </span> : : struct stack_frame;</a>
+<a name="314"><span class="lineNum"> 314 </span> : : extern void exception_entry(struct stack_frame *stack);</a>
+<a name="315"><span class="lineNum"> 315 </span> : : extern void exception_entry_pm_sreset(void);</a>
+<a name="316"><span class="lineNum"> 316 </span> : : extern void __noreturn exception_entry_pm_mce(void);</a>
<a name="317"><span class="lineNum"> 317 </span> : : </a>
-<a name="318"><span class="lineNum"> 318 </span> : : /* Patch SPR in SLW image */</a>
-<a name="319"><span class="lineNum"> 319 </span> : : extern int64_t opal_slw_set_reg(uint64_t cpu_pir, uint64_t sprn, uint64_t val);</a>
-<a name="320"><span class="lineNum"> 320 </span> : : </a>
-<a name="321"><span class="lineNum"> 321 </span> : : extern void fast_sleep_exit(void);</a>
-<a name="322"><span class="lineNum"> 322 </span> : : </a>
-<a name="323"><span class="lineNum"> 323 </span> : : /* Fallback fake RTC */</a>
-<a name="324"><span class="lineNum"> 324 </span> : : extern void fake_rtc_init(void);</a>
-<a name="325"><span class="lineNum"> 325 </span> : : </a>
-<a name="326"><span class="lineNum"> 326 </span> : : /* Exceptions */</a>
-<a name="327"><span class="lineNum"> 327 </span> : : struct stack_frame;</a>
-<a name="328"><span class="lineNum"> 328 </span> : : extern void exception_entry(struct stack_frame *stack);</a>
-<a name="329"><span class="lineNum"> 329 </span> : : extern void exception_entry_pm_sreset(void);</a>
-<a name="330"><span class="lineNum"> 330 </span> : : extern void __noreturn exception_entry_pm_mce(void);</a>
-<a name="331"><span class="lineNum"> 331 </span> : : </a>
-<a name="332"><span class="lineNum"> 332 </span> : : /* Assembly in head.S */</a>
-<a name="333"><span class="lineNum"> 333 </span> : : extern void disable_machine_check(void);</a>
-<a name="334"><span class="lineNum"> 334 </span> : : extern void enable_machine_check(void);</a>
-<a name="335"><span class="lineNum"> 335 </span> : : extern unsigned int enter_p8_pm_state(bool winkle);</a>
-<a name="336"><span class="lineNum"> 336 </span> : : extern unsigned int enter_p9_pm_state(uint64_t psscr);</a>
-<a name="337"><span class="lineNum"> 337 </span> : : extern void enter_p9_pm_lite_state(uint64_t psscr);</a>
-<a name="338"><span class="lineNum"> 338 </span> : : extern uint32_t reset_patch_start;</a>
-<a name="339"><span class="lineNum"> 339 </span> : : extern uint32_t reset_patch_end;</a>
-<a name="340"><span class="lineNum"> 340 </span> : : extern uint32_t reset_fast_reboot_patch_start;</a>
-<a name="341"><span class="lineNum"> 341 </span> : : extern uint32_t reset_fast_reboot_patch_end;</a>
-<a name="342"><span class="lineNum"> 342 </span> : : </a>
-<a name="343"><span class="lineNum"> 343 </span> : : /* Fallback fake NVRAM */</a>
-<a name="344"><span class="lineNum"> 344 </span> : : extern int fake_nvram_info(uint32_t *total_size);</a>
-<a name="345"><span class="lineNum"> 345 </span> : : extern int fake_nvram_start_read(void *dst, uint32_t src, uint32_t len);</a>
-<a name="346"><span class="lineNum"> 346 </span> : : extern int fake_nvram_write(uint32_t offset, void *src, uint32_t size);</a>
-<a name="347"><span class="lineNum"> 347 </span> : : </a>
-<a name="348"><span class="lineNum"> 348 </span> : : #endif /* __SKIBOOT_H */</a>
+<a name="318"><span class="lineNum"> 318 </span> : : /* Assembly in head.S */</a>
+<a name="319"><span class="lineNum"> 319 </span> : : extern void disable_machine_check(void);</a>
+<a name="320"><span class="lineNum"> 320 </span> : : extern void enable_machine_check(void);</a>
+<a name="321"><span class="lineNum"> 321 </span> : : extern unsigned int enter_p8_pm_state(bool winkle);</a>
+<a name="322"><span class="lineNum"> 322 </span> : : extern unsigned int enter_p9_pm_state(uint64_t psscr);</a>
+<a name="323"><span class="lineNum"> 323 </span> : : extern void enter_p9_pm_lite_state(uint64_t psscr);</a>
+<a name="324"><span class="lineNum"> 324 </span> : : extern uint32_t reset_patch_start;</a>
+<a name="325"><span class="lineNum"> 325 </span> : : extern uint32_t reset_patch_end;</a>
+<a name="326"><span class="lineNum"> 326 </span> : : extern uint32_t reset_fast_reboot_patch_start;</a>
+<a name="327"><span class="lineNum"> 327 </span> : : extern uint32_t reset_fast_reboot_patch_end;</a>
+<a name="328"><span class="lineNum"> 328 </span> : : </a>
+<a name="329"><span class="lineNum"> 329 </span> : : /* Fallback fake NVRAM */</a>
+<a name="330"><span class="lineNum"> 330 </span> : : extern int fake_nvram_info(uint32_t *total_size);</a>
+<a name="331"><span class="lineNum"> 331 </span> : : extern int fake_nvram_start_read(void *dst, uint32_t src, uint32_t len);</a>
+<a name="332"><span class="lineNum"> 332 </span> : : extern int fake_nvram_write(uint32_t offset, void *src, uint32_t size);</a>
+<a name="333"><span class="lineNum"> 333 </span> : : </a>
+<a name="334"><span class="lineNum"> 334 </span> : : /*</a>
+<a name="335"><span class="lineNum"> 335 </span> : : * A bunch of hardware needs to be probed, sometimes in a particular order.</a>
+<a name="336"><span class="lineNum"> 336 </span> : : * Very simple dependency graph, with a even simpler way to resolve it.</a>
+<a name="337"><span class="lineNum"> 337 </span> : : * But it means we can now at link time choose what hardware we support.</a>
+<a name="338"><span class="lineNum"> 338 </span> : : * This struct should not be defined directly but with the macros.</a>
+<a name="339"><span class="lineNum"> 339 </span> : : */</a>
+<a name="340"><span class="lineNum"> 340 </span> : : struct hwprobe {</a>
+<a name="341"><span class="lineNum"> 341 </span> : : const char *name;</a>
+<a name="342"><span class="lineNum"> 342 </span> : : void (*probe)(void);</a>
+<a name="343"><span class="lineNum"> 343 </span> : : </a>
+<a name="344"><span class="lineNum"> 344 </span> : : bool probed;</a>
+<a name="345"><span class="lineNum"> 345 </span> : : </a>
+<a name="346"><span class="lineNum"> 346 </span> : : /* NULL or NULL-terminated array of strings */</a>
+<a name="347"><span class="lineNum"> 347 </span> : : const char **deps;</a>
+<a name="348"><span class="lineNum"> 348 </span> : : };</a>
+<a name="349"><span class="lineNum"> 349 </span> : : </a>
+<a name="350"><span class="lineNum"> 350 </span> : : #define DEFINE_HWPROBE(__name, __probe) \</a>
+<a name="351"><span class="lineNum"> 351 </span> : : static const struct hwprobe __used __section(&quot;.hwprobes&quot;) hwprobe_##__name = { \</a>
+<a name="352"><span class="lineNum"> 352 </span> : : .name = #__name, \</a>
+<a name="353"><span class="lineNum"> 353 </span> : : .probe = __probe, \</a>
+<a name="354"><span class="lineNum"> 354 </span> : : .deps = NULL, \</a>
+<a name="355"><span class="lineNum"> 355 </span> : : }</a>
+<a name="356"><span class="lineNum"> 356 </span> : : </a>
+<a name="357"><span class="lineNum"> 357 </span> : : #define DEFINE_HWPROBE_DEPS(__name, __probe, ...) \</a>
+<a name="358"><span class="lineNum"> 358 </span> : : static const struct hwprobe __used __section(&quot;.hwprobes&quot;) hwprobe_##__name = { \</a>
+<a name="359"><span class="lineNum"> 359 </span> : : .name = #__name, \</a>
+<a name="360"><span class="lineNum"> 360 </span> : : .probe = __probe, \</a>
+<a name="361"><span class="lineNum"> 361 </span> : : .deps = (const char *[]){ __VA_ARGS__, NULL}, \</a>
+<a name="362"><span class="lineNum"> 362 </span> : : }</a>
+<a name="363"><span class="lineNum"> 363 </span> : : </a>
+<a name="364"><span class="lineNum"> 364 </span> : : extern struct hwprobe __hwprobes_start;</a>
+<a name="365"><span class="lineNum"> 365 </span> : : extern struct hwprobe __hwprobes_end;</a>
+<a name="366"><span class="lineNum"> 366 </span> : : </a>
+<a name="367"><span class="lineNum"> 367 </span> : : extern void probe_hardware(void);</a>
+<a name="368"><span class="lineNum"> 368 </span> : : </a>
+<a name="369"><span class="lineNum"> 369 </span> : : #endif /* __SKIBOOT_H */</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/include/time-utils.h.func-sort-c.html b/coverage-report/include/time-utils.h.func-sort-c.html
index 3487e64..79324aa 100644
--- a/coverage-report/include/time-utils.h.func-sort-c.html
+++ b/coverage-report/include/time-utils.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/include/time-utils.h.func.html b/coverage-report/include/time-utils.h.func.html
index 7e7e7df..7f0c2d4 100644
--- a/coverage-report/include/time-utils.h.func.html
+++ b/coverage-report/include/time-utils.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/include/time-utils.h.gcov.html b/coverage-report/include/time-utils.h.gcov.html
index 37936bd..0bac026 100644
--- a/coverage-report/include/time-utils.h.gcov.html
+++ b/coverage-report/include/time-utils.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/include/timebase.h.func-sort-c.html b/coverage-report/include/timebase.h.func-sort-c.html
index 257af9b..9f9955d 100644
--- a/coverage-report/include/timebase.h.func-sort-c.html
+++ b/coverage-report/include/timebase.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
diff --git a/coverage-report/include/timebase.h.func.html b/coverage-report/include/timebase.h.func.html
index 1f04e24..ffd98a0 100644
--- a/coverage-report/include/timebase.h.func.html
+++ b/coverage-report/include/timebase.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
diff --git a/coverage-report/include/timebase.h.gcov.html b/coverage-report/include/timebase.h.gcov.html
index 15d9219..3d488fc 100644
--- a/coverage-report/include/timebase.h.gcov.html
+++ b/coverage-report/include/timebase.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
diff --git a/coverage-report/index-sort-b.html b/coverage-report/index-sort-b.html
index aaef702..c0e5c20 100644
--- a/coverage-report/index-sort-b.html
+++ b/coverage-report/index-sort-b.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">14185</td>
- <td class="headerCovTableEntry">23224</td>
- <td class="headerCovTableEntryLo">61.1 %</td>
+ <td class="headerCovTableEntry">14494</td>
+ <td class="headerCovTableEntry">23488</td>
+ <td class="headerCovTableEntryLo">61.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">1157</td>
- <td class="headerCovTableEntry">1572</td>
- <td class="headerCovTableEntryLo">73.6 %</td>
+ <td class="headerCovTableEntry">1152</td>
+ <td class="headerCovTableEntry">1546</td>
+ <td class="headerCovTableEntryLo">74.5 %</td>
</tr>
<tr>
<td></td>
@@ -82,391 +82,403 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="libflash/test/index.html">libflash/test</a></td>
+ <td class="coverFile"><a href="libc/stdio/index.html">libc/stdio</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=74 height=10 alt="73.9%"><img src="snow.png" width=26 height=10 alt="73.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=98 height=10 alt="97.5%"><img src="snow.png" width=2 height=10 alt="97.5%"></td></tr></table>
</td>
- <td class="coverPerLo">73.9&nbsp;%</td>
- <td class="coverNumLo">1368 / 1851</td>
- <td class="coverPerHi">95.2&nbsp;%</td>
- <td class="coverNumHi">119 / 125</td>
+ <td class="coverPerHi">97.5&nbsp;%</td>
+ <td class="coverNumHi">159 / 163</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">8 / 8</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="external/pflash/index.html">external/pflash</a></td>
+ <td class="coverFile"><a href="ccan/str/index.html">ccan/str</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="60.1%"><img src="snow.png" width=40 height=10 alt="60.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerLo">60.1&nbsp;%</td>
- <td class="coverNumLo">485 / 807</td>
- <td class="coverPerMed">78.9&nbsp;%</td>
- <td class="coverNumMed">15 / 19</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">10 / 10</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libstb/secvar/test/index.html">libstb/secvar/test</a></td>
+ <td class="coverFile"><a href="libstb/secvar/storage/index.html">libstb/secvar/storage</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="99.5%"><img src="snow.png" width=1 height=10 alt="99.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=45 height=10 alt="44.7%"><img src="snow.png" width=55 height=10 alt="44.7%"></td></tr></table>
</td>
- <td class="coverPerHi">99.5&nbsp;%</td>
- <td class="coverNumHi">580 / 583</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">22 / 22</td>
+ <td class="coverPerLo">44.7&nbsp;%</td>
+ <td class="coverNumLo">196 / 438</td>
+ <td class="coverPerLo">64.3&nbsp;%</td>
+ <td class="coverNumLo">18 / 28</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="external/gard/index.html">external/gard</a></td>
+ <td class="coverFile"><a href="external/ffspart/ccan/endian/index.html">external/ffspart/ccan/endian</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=70 height=10 alt="69.7%"><img src="snow.png" width=30 height=10 alt="69.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="60.0%"><img src="snow.png" width=40 height=10 alt="60.0%"></td></tr></table>
</td>
- <td class="coverPerLo">69.7&nbsp;%</td>
- <td class="coverNumLo">326 / 468</td>
- <td class="coverPerHi">95.7&nbsp;%</td>
- <td class="coverNumHi">22 / 23</td>
+ <td class="coverPerLo">60.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 10</td>
+ <td class="coverPerLo">50.0&nbsp;%</td>
+ <td class="coverNumLo">1 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/endian/test/index.html">ccan/endian/test</a></td>
+ <td class="coverFile"><a href="libflash/test/index.html">libflash/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=74 height=10 alt="73.9%"><img src="snow.png" width=26 height=10 alt="73.9%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">73 / 73</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerLo">73.9&nbsp;%</td>
+ <td class="coverNumLo">1368 / 1851</td>
+ <td class="coverPerHi">95.2&nbsp;%</td>
+ <td class="coverNumHi">119 / 125</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/str/index.html">ccan/str</a></td>
+ <td class="coverFile"><a href="libstb/secvar/test/index.html">libstb/secvar/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="99.6%"><img src="snow.png" width=1 height=10 alt="99.6%"></td></tr></table>
</td>
+ <td class="coverPerHi">99.6&nbsp;%</td>
+ <td class="coverNumHi">687 / 690</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">10 / 10</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverNumHi">24 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/heap/index.html">ccan/heap</a></td>
+ <td class="coverFile"><a href="external/ffspart/libflash/index.html">external/ffspart/libflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="95.3%"><img src="snow.png" width=5 height=10 alt="95.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=26 height=10 alt="25.7%"><img src="snow.png" width=74 height=10 alt="25.7%"></td></tr></table>
</td>
- <td class="coverPerHi">95.3&nbsp;%</td>
- <td class="coverNumHi">61 / 64</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">8 / 8</td>
+ <td class="coverPerLo">25.7&nbsp;%</td>
+ <td class="coverNumLo">371 / 1445</td>
+ <td class="coverPerLo">36.1&nbsp;%</td>
+ <td class="coverNumLo">26 / 72</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="external/ffspart/ccan/endian/index.html">external/ffspart/ccan/endian</a></td>
+ <td class="coverFile"><a href="libstb/secvar/backend/index.html">libstb/secvar/backend</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=50 height=10 alt="50.0%"><img src="snow.png" width=50 height=10 alt="50.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=85 height=10 alt="84.7%"><img src="snow.png" width=15 height=10 alt="84.7%"></td></tr></table>
</td>
- <td class="coverPerLo">50.0&nbsp;%</td>
- <td class="coverNumLo">6 / 12</td>
- <td class="coverPerLo">50.0&nbsp;%</td>
- <td class="coverNumLo">1 / 2</td>
+ <td class="coverPerMed">84.7&nbsp;%</td>
+ <td class="coverNumMed">455 / 537</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">24 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libstb/secvar/storage/index.html">libstb/secvar/storage</a></td>
+ <td class="coverFile"><a href="ccan/check_type/test/index.html">ccan/check_type/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=47 height=10 alt="47.2%"><img src="snow.png" width=53 height=10 alt="47.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerLo">47.2&nbsp;%</td>
- <td class="coverNumLo">201 / 426</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">18 / 27</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">5 / 5</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libc/index.html">libc</a></td>
+ <td class="coverFile"><a href="ccan/str/test/index.html">ccan/str/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">66 / 66</td>
+ <td class="coverNumHi">81 / 81</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">5 / 5</td>
+ <td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/short_types/test/index.html">ccan/short_types/test</a></td>
+ <td class="coverFile"><a href="external/pflash/ccan/endian/index.html">external/pflash/ccan/endian</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="60.0%"><img src="snow.png" width=40 height=10 alt="60.0%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">4 / 4</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerLo">60.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 10</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="include/index.html">include</a></td>
+ <td class="coverFile"><a href="external/gard/libflash/index.html">external/gard/libflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=83 height=10 alt="82.9%"><img src="snow.png" width=17 height=10 alt="82.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=20 height=10 alt="20.1%"><img src="snow.png" width=80 height=10 alt="20.1%"></td></tr></table>
</td>
- <td class="coverPerMed">82.9&nbsp;%</td>
- <td class="coverNumMed">63 / 76</td>
- <td class="coverPerMed">88.9&nbsp;%</td>
- <td class="coverNumMed">24 / 27</td>
+ <td class="coverPerLo">20.1&nbsp;%</td>
+ <td class="coverNumLo">291 / 1445</td>
+ <td class="coverPerLo">31.9&nbsp;%</td>
+ <td class="coverNumLo">23 / 72</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/container_of/test/index.html">ccan/container_of/test</a></td>
+ <td class="coverFile"><a href="libstb/secvar/index.html">libstb/secvar</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=89 height=10 alt="89.5%"><img src="snow.png" width=11 height=10 alt="89.5%"></td></tr></table>
</td>
+ <td class="coverPerMed">89.5&nbsp;%</td>
+ <td class="coverNumMed">153 / 171</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverNumHi">12 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="external/pflash/ccan/list/index.html">external/pflash/ccan/list</a></td>
+ <td class="coverFile"><a href="external/gard/index.html">external/gard</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=71 height=10 alt="70.9%"><img src="snow.png" width=29 height=10 alt="70.9%"></td></tr></table>
</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 17</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 3</td>
+ <td class="coverPerLo">70.9&nbsp;%</td>
+ <td class="coverNumLo">329 / 464</td>
+ <td class="coverPerHi">95.5&nbsp;%</td>
+ <td class="coverNumHi">21 / 22</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libc/stdlib/index.html">libc/stdlib</a></td>
+ <td class="coverFile"><a href="libflash/index.html">libflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="94.8%"><img src="snow.png" width=5 height=10 alt="94.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=66 height=10 alt="66.3%"><img src="snow.png" width=34 height=10 alt="66.3%"></td></tr></table>
</td>
- <td class="coverPerHi">94.8&nbsp;%</td>
- <td class="coverNumHi">73 / 77</td>
- <td class="coverPerMed">80.0&nbsp;%</td>
- <td class="coverNumMed">4 / 5</td>
+ <td class="coverPerLo">66.3&nbsp;%</td>
+ <td class="coverNumLo">1697 / 2559</td>
+ <td class="coverPerMed">84.9&nbsp;%</td>
+ <td class="coverNumMed">141 / 166</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libstb/index.html">libstb</a></td>
+ <td class="coverFile"><a href="hw/test/index.html">hw/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=15 height=10 alt="14.9%"><img src="snow.png" width=85 height=10 alt="14.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=75 height=10 alt="75.0%"><img src="snow.png" width=25 height=10 alt="75.0%"></td></tr></table>
</td>
- <td class="coverPerLo">14.9&nbsp;%</td>
- <td class="coverNumLo">7 / 47</td>
- <td class="coverPerLo">16.7&nbsp;%</td>
- <td class="coverNumLo">1 / 6</td>
+ <td class="coverPerMed">75.0&nbsp;%</td>
+ <td class="coverNumMed">123 / 164</td>
+ <td class="coverPerMed">75.0&nbsp;%</td>
+ <td class="coverNumMed">6 / 8</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="hw/ipmi/index.html">hw/ipmi</a></td>
+ <td class="coverFile"><a href="ccan/list/index.html">ccan/list</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=65 height=10 alt="64.6%"><img src="snow.png" width=35 height=10 alt="64.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="99.1%"><img src="snow.png" width=1 height=10 alt="99.1%"></td></tr></table>
</td>
- <td class="coverPerLo">64.6&nbsp;%</td>
- <td class="coverNumLo">64 / 99</td>
- <td class="coverPerLo">57.1&nbsp;%</td>
- <td class="coverNumLo">4 / 7</td>
+ <td class="coverPerHi">99.1&nbsp;%</td>
+ <td class="coverNumHi">114 / 115</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">23 / 23</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/heap/test/index.html">ccan/heap/test</a></td>
+ <td class="coverFile"><a href="usr/include/x86_64-linux-gnu/bits/index.html">/usr/include/x86_64-linux-gnu/bits</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=76 height=10 alt="75.7%"><img src="snow.png" width=24 height=10 alt="75.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="94.9%"><img src="snow.png" width=5 height=10 alt="94.9%"></td></tr></table>
</td>
- <td class="coverPerMed">75.7&nbsp;%</td>
- <td class="coverNumMed">53 / 70</td>
+ <td class="coverPerHi">94.9&nbsp;%</td>
+ <td class="coverNumHi">37 / 39</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">7 / 7</td>
+ <td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="external/pflash/ccan/endian/index.html">external/pflash/ccan/endian</a></td>
+ <td class="coverFile"><a href="external/trace/index.html">external/trace</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=67 height=10 alt="66.7%"><img src="snow.png" width=33 height=10 alt="66.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">8 / 12</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 2</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">39 / 39</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="hw/test/index.html">hw/test</a></td>
+ <td class="coverFile"><a href="ccan/heap/index.html">ccan/heap</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=76 height=10 alt="76.5%"><img src="snow.png" width=24 height=10 alt="76.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="95.3%"><img src="snow.png" width=5 height=10 alt="95.3%"></td></tr></table>
</td>
- <td class="coverPerMed">76.5&nbsp;%</td>
- <td class="coverNumMed">117 / 153</td>
- <td class="coverPerMed">85.7&nbsp;%</td>
- <td class="coverNumMed">6 / 7</td>
+ <td class="coverPerHi">95.3&nbsp;%</td>
+ <td class="coverNumHi">61 / 64</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">8 / 8</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libstb/crypto/pkcs7/index.html">libstb/crypto/pkcs7</a></td>
+ <td class="coverFile"><a href="external/pflash/index.html">external/pflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=73 height=10 alt="73.4%"><img src="snow.png" width=27 height=10 alt="73.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="60.3%"><img src="snow.png" width=40 height=10 alt="60.3%"></td></tr></table>
</td>
- <td class="coverPerLo">73.4&nbsp;%</td>
- <td class="coverNumLo">163 / 222</td>
- <td class="coverPerHi">92.9&nbsp;%</td>
- <td class="coverNumHi">13 / 14</td>
+ <td class="coverPerLo">60.3&nbsp;%</td>
+ <td class="coverNumLo">486 / 806</td>
+ <td class="coverPerMed">78.9&nbsp;%</td>
+ <td class="coverNumMed">15 / 19</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="external/gard/ccan/endian/index.html">external/gard/ccan/endian</a></td>
+ <td class="coverFile"><a href="libstb/index.html">libstb</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=15 height=10 alt="14.9%"><img src="snow.png" width=85 height=10 alt="14.9%"></td></tr></table>
+ </td>
+ <td class="coverPerLo">14.9&nbsp;%</td>
+ <td class="coverNumLo">7 / 47</td>
+ <td class="coverPerLo">16.7&nbsp;%</td>
+ <td class="coverNumLo">1 / 6</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="external/pflash/common/index.html">external/pflash/common</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=33 height=10 alt="33.3%"><img src="snow.png" width=67 height=10 alt="33.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=38 height=10 alt="37.5%"><img src="snow.png" width=62 height=10 alt="37.5%"></td></tr></table>
</td>
+ <td class="coverPerLo">37.5&nbsp;%</td>
+ <td class="coverNumLo">12 / 32</td>
<td class="coverPerLo">33.3&nbsp;%</td>
- <td class="coverNumLo">4 / 12</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverNumLo">2 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/endian/index.html">ccan/endian</a></td>
+ <td class="coverFile"><a href="ccan/container_of/test/index.html">ccan/container_of/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">30 / 30</td>
+ <td class="coverNumHi">13 / 13</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">15 / 15</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="core/index.html">core</a></td>
+ <td class="coverFile"><a href="include/index.html">include</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=75 height=10 alt="74.6%"><img src="snow.png" width=25 height=10 alt="74.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=83 height=10 alt="82.9%"><img src="snow.png" width=17 height=10 alt="82.9%"></td></tr></table>
</td>
- <td class="coverPerLo">74.6&nbsp;%</td>
- <td class="coverNumLo">2002 / 2683</td>
- <td class="coverPerMed">81.9&nbsp;%</td>
- <td class="coverNumMed">186 / 227</td>
+ <td class="coverPerMed">82.9&nbsp;%</td>
+ <td class="coverNumMed">63 / 76</td>
+ <td class="coverPerMed">88.9&nbsp;%</td>
+ <td class="coverNumMed">24 / 27</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libstb/secvar/backend/index.html">libstb/secvar/backend</a></td>
+ <td class="coverFile"><a href="hw/index.html">hw</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=82 height=10 alt="82.0%"><img src="snow.png" width=18 height=10 alt="82.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=91 height=10 alt="90.6%"><img src="snow.png" width=9 height=10 alt="90.6%"></td></tr></table>
</td>
- <td class="coverPerMed">82.0&nbsp;%</td>
- <td class="coverNumMed">423 / 516</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">24 / 24</td>
+ <td class="coverPerHi">90.6&nbsp;%</td>
+ <td class="coverNumHi">115 / 127</td>
+ <td class="coverPerMed">85.7&nbsp;%</td>
+ <td class="coverNumMed">6 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="usr/include/bits/index.html">/usr/include/bits</a></td>
+ <td class="coverFile"><a href="ccan/container_of/index.html">ccan/container_of</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libc/test/index.html">libc/test</a></td>
+ <td class="coverFile"><a href="hw/ipmi/test/index.html">hw/ipmi/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=98 height=10 alt="98.4%"><img src="snow.png" width=2 height=10 alt="98.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=71 height=10 alt="71.4%"><img src="snow.png" width=29 height=10 alt="71.4%"></td></tr></table>
</td>
- <td class="coverPerHi">98.4&nbsp;%</td>
- <td class="coverNumHi">377 / 383</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">31 / 31</td>
+ <td class="coverPerLo">71.4&nbsp;%</td>
+ <td class="coverNumLo">25 / 35</td>
+ <td class="coverPerLo">16.7&nbsp;%</td>
+ <td class="coverNumLo">1 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libflash/index.html">libflash</a></td>
+ <td class="coverFile"><a href="core/index.html">core</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=67 height=10 alt="66.6%"><img src="snow.png" width=33 height=10 alt="66.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=73 height=10 alt="73.1%"><img src="snow.png" width=27 height=10 alt="73.1%"></td></tr></table>
</td>
- <td class="coverPerLo">66.6&nbsp;%</td>
- <td class="coverNumLo">1733 / 2603</td>
- <td class="coverPerMed">84.8&nbsp;%</td>
- <td class="coverNumMed">145 / 171</td>
+ <td class="coverPerLo">73.1&nbsp;%</td>
+ <td class="coverNumLo">1979 / 2706</td>
+ <td class="coverPerMed">81.5&nbsp;%</td>
+ <td class="coverNumMed">185 / 227</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libfdt/index.html">libfdt</a></td>
+ <td class="coverFile"><a href="external/pflash/ccan/list/index.html">external/pflash/ccan/list</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=31 height=10 alt="31.0%"><img src="snow.png" width=69 height=10 alt="31.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
- <td class="coverPerLo">31.0&nbsp;%</td>
- <td class="coverNumLo">262 / 845</td>
- <td class="coverPerLo">48.4&nbsp;%</td>
- <td class="coverNumLo">46 / 95</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 17</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="external/gard/libflash/index.html">external/gard/libflash</a></td>
+ <td class="coverFile"><a href="core/test/index.html">core/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=20 height=10 alt="19.9%"><img src="snow.png" width=80 height=10 alt="19.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=97 height=10 alt="97.1%"><img src="snow.png" width=3 height=10 alt="97.1%"></td></tr></table>
</td>
- <td class="coverPerLo">19.9&nbsp;%</td>
- <td class="coverNumLo">305 / 1530</td>
- <td class="coverPerLo">30.6&nbsp;%</td>
- <td class="coverNumLo">26 / 85</td>
+ <td class="coverPerHi">97.1&nbsp;%</td>
+ <td class="coverNumHi">1846 / 1901</td>
+ <td class="coverPerMed">89.0&nbsp;%</td>
+ <td class="coverNumMed">138 / 155</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libstb/test/index.html">libstb/test</a></td>
+ <td class="coverFile"><a href="hdata/test/index.html">hdata/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=62 height=10 alt="62.5%"><img src="snow.png" width=38 height=10 alt="62.5%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerLo">62.5&nbsp;%</td>
+ <td class="coverNumLo">105 / 168</td>
+ <td class="coverPerLo">57.1&nbsp;%</td>
+ <td class="coverNumLo">8 / 14</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="external/pflash/libflash/index.html">external/pflash/libflash</a></td>
+ <td class="coverFile"><a href="ccan/endian/index.html">ccan/endian</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=27 height=10 alt="26.7%"><img src="snow.png" width=73 height=10 alt="26.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerLo">26.7&nbsp;%</td>
- <td class="coverNumLo">409 / 1530</td>
- <td class="coverPerLo">43.5&nbsp;%</td>
- <td class="coverNumLo">37 / 85</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">24 / 24</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">12 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="external/pflash/common/index.html">external/pflash/common</a></td>
+ <td class="coverFile"><a href="external/gard/common/index.html">external/gard/common</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=38 height=10 alt="37.5%"><img src="snow.png" width=62 height=10 alt="37.5%"></td></tr></table>
</td>
@@ -478,158 +490,134 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="external/ffspart/index.html">external/ffspart</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=45 height=10 alt="45.3%"><img src="snow.png" width=55 height=10 alt="45.3%"></td></tr></table>
- </td>
- <td class="coverPerLo">45.3&nbsp;%</td>
- <td class="coverNumLo">134 / 296</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">4 / 6</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
- <td class="coverFile"><a href="ccan/list/test/index.html">ccan/list/test</a></td>
+ <td class="coverFile"><a href="external/gard/ccan/list/index.html">external/gard/ccan/list</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=98 height=10 alt="98.1%"><img src="snow.png" width=2 height=10 alt="98.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
- <td class="coverPerHi">98.1&nbsp;%</td>
- <td class="coverNumHi">310 / 316</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">8 / 8</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 17</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/str/test/index.html">ccan/str/test</a></td>
+ <td class="coverFile"><a href="libc/stdlib/index.html">libc/stdlib</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="94.8%"><img src="snow.png" width=5 height=10 alt="94.8%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">84 / 84</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
+ <td class="coverPerHi">94.8&nbsp;%</td>
+ <td class="coverNumHi">73 / 77</td>
+ <td class="coverPerMed">80.0&nbsp;%</td>
+ <td class="coverNumMed">4 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="hdata/index.html">hdata</a></td>
+ <td class="coverFile"><a href="test/index.html">test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=46 height=10 alt="46.2%"><img src="snow.png" width=54 height=10 alt="46.2%"></td></tr></table>
</td>
<td class="coverPerLo">46.2&nbsp;%</td>
- <td class="coverNumLo">1237 / 2675</td>
- <td class="coverPerLo">68.0&nbsp;%</td>
- <td class="coverNumLo">100 / 147</td>
+ <td class="coverNumLo">12 / 26</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">2 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/check_type/test/index.html">ccan/check_type/test</a></td>
+ <td class="coverFile"><a href="ccan/array_size/test/index.html">ccan/array_size/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">5 / 5</td>
+ <td class="coverNumHi">6 / 6</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="external/gard/common/index.html">external/gard/common</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=38 height=10 alt="37.5%"><img src="snow.png" width=62 height=10 alt="37.5%"></td></tr></table>
- </td>
- <td class="coverPerLo">37.5&nbsp;%</td>
- <td class="coverNumLo">12 / 32</td>
- <td class="coverPerLo">33.3&nbsp;%</td>
- <td class="coverNumLo">2 / 6</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
- <td class="coverFile"><a href="external/ffspart/libflash/index.html">external/ffspart/libflash</a></td>
+ <td class="coverFile"><a href="external/ffspart/index.html">external/ffspart</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=25 height=10 alt="25.2%"><img src="snow.png" width=75 height=10 alt="25.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=46 height=10 alt="45.8%"><img src="snow.png" width=54 height=10 alt="45.8%"></td></tr></table>
</td>
- <td class="coverPerLo">25.2&nbsp;%</td>
- <td class="coverNumLo">385 / 1530</td>
- <td class="coverPerLo">35.3&nbsp;%</td>
- <td class="coverNumLo">30 / 85</td>
+ <td class="coverPerLo">45.8&nbsp;%</td>
+ <td class="coverNumLo">135 / 295</td>
+ <td class="coverPerLo">50.0&nbsp;%</td>
+ <td class="coverNumLo">2 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libc/stdio/index.html">libc/stdio</a></td>
+ <td class="coverFile"><a href="ccan/short_types/test/index.html">ccan/short_types/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=98 height=10 alt="97.5%"><img src="snow.png" width=2 height=10 alt="97.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerHi">97.5&nbsp;%</td>
- <td class="coverNumHi">159 / 163</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">8 / 8</td>
+ <td class="coverNumHi">4 / 4</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="hdata/test/index.html">hdata/test</a></td>
+ <td class="coverFile"><a href="hw/ipmi/index.html">hw/ipmi</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=64 height=10 alt="63.8%"><img src="snow.png" width=36 height=10 alt="63.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=65 height=10 alt="64.6%"><img src="snow.png" width=35 height=10 alt="64.6%"></td></tr></table>
</td>
- <td class="coverPerLo">63.8&nbsp;%</td>
- <td class="coverNumLo">104 / 163</td>
+ <td class="coverPerLo">64.6&nbsp;%</td>
+ <td class="coverNumLo">64 / 99</td>
<td class="coverPerLo">57.1&nbsp;%</td>
- <td class="coverNumLo">8 / 14</td>
+ <td class="coverNumLo">4 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libc/ctype/index.html">libc/ctype</a></td>
+ <td class="coverFile"><a href="libc/string/index.html">libc/string</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=71 height=10 alt="71.4%"><img src="snow.png" width=29 height=10 alt="71.4%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">24 / 24</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverPerLo">71.4&nbsp;%</td>
+ <td class="coverNumLo">120 / 168</td>
+ <td class="coverPerMed">77.8&nbsp;%</td>
+ <td class="coverNumMed">14 / 18</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/build_assert/test/index.html">ccan/build_assert/test</a></td>
+ <td class="coverFile"><a href="external/gard/ccan/endian/index.html">external/gard/ccan/endian</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=40 height=10 alt="40.0%"><img src="snow.png" width=60 height=10 alt="40.0%"></td></tr></table>
</td>
+ <td class="coverPerLo">40.0&nbsp;%</td>
+ <td class="coverNumLo">4 / 10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="core/test/index.html">core/test</a></td>
+ <td class="coverFile"><a href="ccan/list/test/index.html">ccan/list/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=97 height=10 alt="97.1%"><img src="snow.png" width=3 height=10 alt="97.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="98.7%"><img src="snow.png" width=1 height=10 alt="98.7%"></td></tr></table>
</td>
- <td class="coverPerHi">97.1&nbsp;%</td>
- <td class="coverNumHi">1844 / 1899</td>
- <td class="coverPerMed">89.0&nbsp;%</td>
- <td class="coverNumMed">137 / 154</td>
+ <td class="coverPerHi">98.7&nbsp;%</td>
+ <td class="coverNumHi">514 / 521</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">14 / 14</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="hw/index.html">hw</a></td>
+ <td class="coverFile"><a href="ccan/heap/test/index.html">ccan/heap/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="95.0%"><img src="snow.png" width=5 height=10 alt="95.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=76 height=10 alt="76.4%"><img src="snow.png" width=24 height=10 alt="76.4%"></td></tr></table>
</td>
- <td class="coverPerHi">95.0&nbsp;%</td>
- <td class="coverNumHi">113 / 119</td>
+ <td class="coverPerMed">76.4&nbsp;%</td>
+ <td class="coverNumMed">55 / 72</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -646,110 +634,134 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="hw/ipmi/test/index.html">hw/ipmi/test</a></td>
+ <td class="coverFile"><a href="libc/index.html">libc</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=71 height=10 alt="71.4%"><img src="snow.png" width=29 height=10 alt="71.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerLo">71.4&nbsp;%</td>
- <td class="coverNumLo">25 / 35</td>
- <td class="coverPerLo">16.7&nbsp;%</td>
- <td class="coverNumLo">1 / 6</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">66 / 66</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">5 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="external/gard/ccan/list/index.html">external/gard/ccan/list</a></td>
+ <td class="coverFile"><a href="hdata/index.html">hdata</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=44 height=10 alt="44.5%"><img src="snow.png" width=56 height=10 alt="44.5%"></td></tr></table>
</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 17</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 3</td>
+ <td class="coverPerLo">44.5&nbsp;%</td>
+ <td class="coverNumLo">1247 / 2803</td>
+ <td class="coverPerLo">67.3&nbsp;%</td>
+ <td class="coverNumLo">101 / 150</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/array_size/test/index.html">ccan/array_size/test</a></td>
+ <td class="coverFile"><a href="ccan/build_assert/test/index.html">ccan/build_assert/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/list/index.html">ccan/list</a></td>
+ <td class="coverFile"><a href="usr/include/x86_64-linux-gnu/sys/index.html">/usr/include/x86_64-linux-gnu/sys</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="98.9%"><img src="snow.png" width=1 height=10 alt="98.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerHi">98.9&nbsp;%</td>
- <td class="coverNumHi">90 / 91</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">18 / 18</td>
+ <td class="coverNumHi">4 / 4</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libc/string/index.html">libc/string</a></td>
+ <td class="coverFile"><a href="libc/ctype/index.html">libc/ctype</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=71 height=10 alt="71.4%"><img src="snow.png" width=29 height=10 alt="71.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerLo">71.4&nbsp;%</td>
- <td class="coverNumLo">120 / 168</td>
- <td class="coverPerMed">77.8&nbsp;%</td>
- <td class="coverNumMed">14 / 18</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">24 / 24</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">6 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libstb/secvar/index.html">libstb/secvar</a></td>
+ <td class="coverFile"><a href="ccan/endian/test/index.html">ccan/endian/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=89 height=10 alt="89.5%"><img src="snow.png" width=11 height=10 alt="89.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerMed">89.5&nbsp;%</td>
- <td class="coverNumMed">153 / 171</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">12 / 12</td>
+ <td class="coverNumHi">73 / 73</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="test/index.html">test</a></td>
+ <td class="coverFile"><a href="libstb/test/index.html">libstb/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=46 height=10 alt="46.2%"><img src="snow.png" width=54 height=10 alt="46.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerLo">46.2&nbsp;%</td>
- <td class="coverNumLo">12 / 26</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">2 / 3</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">9 / 9</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="usr/include/sys/index.html">/usr/include/sys</a></td>
+ <td class="coverFile"><a href="external/pflash/libflash/index.html">external/pflash/libflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=25 height=10 alt="25.3%"><img src="snow.png" width=75 height=10 alt="25.3%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverPerLo">25.3&nbsp;%</td>
+ <td class="coverNumLo">365 / 1445</td>
+ <td class="coverPerLo">43.1&nbsp;%</td>
+ <td class="coverNumLo">31 / 72</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="libfdt/index.html">libfdt</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=34 height=10 alt="33.6%"><img src="snow.png" width=66 height=10 alt="33.6%"></td></tr></table>
+ </td>
+ <td class="coverPerLo">33.6&nbsp;%</td>
+ <td class="coverNumLo">283 / 843</td>
+ <td class="coverPerLo">49.0&nbsp;%</td>
+ <td class="coverNumLo">47 / 96</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="external/trace/index.html">external/trace</a></td>
+ <td class="coverFile"><a href="libc/test/index.html">libc/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=98 height=10 alt="98.4%"><img src="snow.png" width=2 height=10 alt="98.4%"></td></tr></table>
</td>
+ <td class="coverPerHi">98.4&nbsp;%</td>
+ <td class="coverNumHi">377 / 383</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">39 / 39</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverNumHi">31 / 31</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="libstb/crypto/pkcs7/index.html">libstb/crypto/pkcs7</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=75 height=10 alt="75.3%"><img src="snow.png" width=25 height=10 alt="75.3%"></td></tr></table>
+ </td>
+ <td class="coverPerMed">75.3&nbsp;%</td>
+ <td class="coverNumMed">168 / 223</td>
+ <td class="coverPerHi">92.9&nbsp;%</td>
+ <td class="coverNumHi">13 / 14</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/index-sort-f.html b/coverage-report/index-sort-f.html
index 4286497..59b49d1 100644
--- a/coverage-report/index-sort-f.html
+++ b/coverage-report/index-sort-f.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">14185</td>
- <td class="headerCovTableEntry">23224</td>
- <td class="headerCovTableEntryLo">61.1 %</td>
+ <td class="headerCovTableEntry">14494</td>
+ <td class="headerCovTableEntry">23488</td>
+ <td class="headerCovTableEntryLo">61.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">1157</td>
- <td class="headerCovTableEntry">1572</td>
- <td class="headerCovTableEntryLo">73.6 %</td>
+ <td class="headerCovTableEntry">1152</td>
+ <td class="headerCovTableEntry">1546</td>
+ <td class="headerCovTableEntryLo">74.5 %</td>
</tr>
<tr>
<td></td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="external/pflash/ccan/endian/index.html">external/pflash/ccan/endian</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=67 height=10 alt="66.7%"><img src="snow.png" width=33 height=10 alt="66.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="60.0%"><img src="snow.png" width=40 height=10 alt="60.0%"></td></tr></table>
</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">8 / 12</td>
+ <td class="coverPerLo">60.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 10</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumLo">0 / 2</td>
<td class="coverPerHi">-</td>
@@ -144,12 +144,12 @@
<tr>
<td class="coverFile"><a href="external/gard/libflash/index.html">external/gard/libflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=20 height=10 alt="19.9%"><img src="snow.png" width=80 height=10 alt="19.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=20 height=10 alt="20.1%"><img src="snow.png" width=80 height=10 alt="20.1%"></td></tr></table>
</td>
- <td class="coverPerLo">19.9&nbsp;%</td>
- <td class="coverNumLo">305 / 1530</td>
- <td class="coverPerLo">30.6&nbsp;%</td>
- <td class="coverNumLo">26 / 85</td>
+ <td class="coverPerLo">20.1&nbsp;%</td>
+ <td class="coverNumLo">291 / 1445</td>
+ <td class="coverPerLo">31.9&nbsp;%</td>
+ <td class="coverNumLo">23 / 72</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -192,52 +192,64 @@
<tr>
<td class="coverFile"><a href="external/ffspart/libflash/index.html">external/ffspart/libflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=25 height=10 alt="25.2%"><img src="snow.png" width=75 height=10 alt="25.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=26 height=10 alt="25.7%"><img src="snow.png" width=74 height=10 alt="25.7%"></td></tr></table>
</td>
- <td class="coverPerLo">25.2&nbsp;%</td>
- <td class="coverNumLo">385 / 1530</td>
- <td class="coverPerLo">35.3&nbsp;%</td>
- <td class="coverNumLo">30 / 85</td>
+ <td class="coverPerLo">25.7&nbsp;%</td>
+ <td class="coverNumLo">371 / 1445</td>
+ <td class="coverPerLo">36.1&nbsp;%</td>
+ <td class="coverNumLo">26 / 72</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="external/pflash/libflash/index.html">external/pflash/libflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=27 height=10 alt="26.7%"><img src="snow.png" width=73 height=10 alt="26.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=25 height=10 alt="25.3%"><img src="snow.png" width=75 height=10 alt="25.3%"></td></tr></table>
</td>
- <td class="coverPerLo">26.7&nbsp;%</td>
- <td class="coverNumLo">409 / 1530</td>
- <td class="coverPerLo">43.5&nbsp;%</td>
- <td class="coverNumLo">37 / 85</td>
+ <td class="coverPerLo">25.3&nbsp;%</td>
+ <td class="coverNumLo">365 / 1445</td>
+ <td class="coverPerLo">43.1&nbsp;%</td>
+ <td class="coverNumLo">31 / 72</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libfdt/index.html">libfdt</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=31 height=10 alt="31.0%"><img src="snow.png" width=69 height=10 alt="31.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=34 height=10 alt="33.6%"><img src="snow.png" width=66 height=10 alt="33.6%"></td></tr></table>
</td>
- <td class="coverPerLo">31.0&nbsp;%</td>
- <td class="coverNumLo">262 / 845</td>
- <td class="coverPerLo">48.4&nbsp;%</td>
- <td class="coverNumLo">46 / 95</td>
+ <td class="coverPerLo">33.6&nbsp;%</td>
+ <td class="coverNumLo">283 / 843</td>
+ <td class="coverPerLo">49.0&nbsp;%</td>
+ <td class="coverNumLo">47 / 96</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="external/ffspart/ccan/endian/index.html">external/ffspart/ccan/endian</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=50 height=10 alt="50.0%"><img src="snow.png" width=50 height=10 alt="50.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="60.0%"><img src="snow.png" width=40 height=10 alt="60.0%"></td></tr></table>
</td>
- <td class="coverPerLo">50.0&nbsp;%</td>
- <td class="coverNumLo">6 / 12</td>
+ <td class="coverPerLo">60.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 10</td>
<td class="coverPerLo">50.0&nbsp;%</td>
<td class="coverNumLo">1 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="external/ffspart/index.html">external/ffspart</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=46 height=10 alt="45.8%"><img src="snow.png" width=54 height=10 alt="45.8%"></td></tr></table>
+ </td>
+ <td class="coverPerLo">45.8&nbsp;%</td>
+ <td class="coverNumLo">135 / 295</td>
+ <td class="coverPerLo">50.0&nbsp;%</td>
+ <td class="coverNumLo">2 / 4</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="hw/ipmi/index.html">hw/ipmi</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=65 height=10 alt="64.6%"><img src="snow.png" width=35 height=10 alt="64.6%"></td></tr></table>
@@ -252,60 +264,60 @@
<tr>
<td class="coverFile"><a href="hdata/test/index.html">hdata/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=64 height=10 alt="63.8%"><img src="snow.png" width=36 height=10 alt="63.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=62 height=10 alt="62.5%"><img src="snow.png" width=38 height=10 alt="62.5%"></td></tr></table>
</td>
- <td class="coverPerLo">63.8&nbsp;%</td>
- <td class="coverNumLo">104 / 163</td>
+ <td class="coverPerLo">62.5&nbsp;%</td>
+ <td class="coverNumLo">105 / 168</td>
<td class="coverPerLo">57.1&nbsp;%</td>
<td class="coverNumLo">8 / 14</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="test/index.html">test</a></td>
+ <td class="coverFile"><a href="libstb/secvar/storage/index.html">libstb/secvar/storage</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=46 height=10 alt="46.2%"><img src="snow.png" width=54 height=10 alt="46.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=45 height=10 alt="44.7%"><img src="snow.png" width=55 height=10 alt="44.7%"></td></tr></table>
</td>
- <td class="coverPerLo">46.2&nbsp;%</td>
- <td class="coverNumLo">12 / 26</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">2 / 3</td>
+ <td class="coverPerLo">44.7&nbsp;%</td>
+ <td class="coverNumLo">196 / 438</td>
+ <td class="coverPerLo">64.3&nbsp;%</td>
+ <td class="coverNumLo">18 / 28</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="external/ffspart/index.html">external/ffspart</a></td>
+ <td class="coverFile"><a href="test/index.html">test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=45 height=10 alt="45.3%"><img src="snow.png" width=55 height=10 alt="45.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=46 height=10 alt="46.2%"><img src="snow.png" width=54 height=10 alt="46.2%"></td></tr></table>
</td>
- <td class="coverPerLo">45.3&nbsp;%</td>
- <td class="coverNumLo">134 / 296</td>
+ <td class="coverPerLo">46.2&nbsp;%</td>
+ <td class="coverNumLo">12 / 26</td>
<td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">4 / 6</td>
+ <td class="coverNumLo">2 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libstb/secvar/storage/index.html">libstb/secvar/storage</a></td>
+ <td class="coverFile"><a href="hdata/index.html">hdata</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=47 height=10 alt="47.2%"><img src="snow.png" width=53 height=10 alt="47.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=44 height=10 alt="44.5%"><img src="snow.png" width=56 height=10 alt="44.5%"></td></tr></table>
</td>
- <td class="coverPerLo">47.2&nbsp;%</td>
- <td class="coverNumLo">201 / 426</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">18 / 27</td>
+ <td class="coverPerLo">44.5&nbsp;%</td>
+ <td class="coverNumLo">1247 / 2803</td>
+ <td class="coverPerLo">67.3&nbsp;%</td>
+ <td class="coverNumLo">101 / 150</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="hdata/index.html">hdata</a></td>
+ <td class="coverFile"><a href="hw/test/index.html">hw/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=46 height=10 alt="46.2%"><img src="snow.png" width=54 height=10 alt="46.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=75 height=10 alt="75.0%"><img src="snow.png" width=25 height=10 alt="75.0%"></td></tr></table>
</td>
- <td class="coverPerLo">46.2&nbsp;%</td>
- <td class="coverNumLo">1237 / 2675</td>
- <td class="coverPerLo">68.0&nbsp;%</td>
- <td class="coverNumLo">100 / 147</td>
+ <td class="coverPerMed">75.0&nbsp;%</td>
+ <td class="coverNumMed">123 / 164</td>
+ <td class="coverPerMed">75.0&nbsp;%</td>
+ <td class="coverNumMed">6 / 8</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -324,10 +336,10 @@
<tr>
<td class="coverFile"><a href="external/pflash/index.html">external/pflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="60.1%"><img src="snow.png" width=40 height=10 alt="60.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="60.3%"><img src="snow.png" width=40 height=10 alt="60.3%"></td></tr></table>
</td>
- <td class="coverPerLo">60.1&nbsp;%</td>
- <td class="coverNumLo">485 / 807</td>
+ <td class="coverPerLo">60.3&nbsp;%</td>
+ <td class="coverNumLo">486 / 806</td>
<td class="coverPerMed">78.9&nbsp;%</td>
<td class="coverNumMed">15 / 19</td>
<td class="coverPerHi">-</td>
@@ -348,34 +360,34 @@
<tr>
<td class="coverFile"><a href="core/index.html">core</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=75 height=10 alt="74.6%"><img src="snow.png" width=25 height=10 alt="74.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=73 height=10 alt="73.1%"><img src="snow.png" width=27 height=10 alt="73.1%"></td></tr></table>
</td>
- <td class="coverPerLo">74.6&nbsp;%</td>
- <td class="coverNumLo">2002 / 2683</td>
- <td class="coverPerMed">81.9&nbsp;%</td>
- <td class="coverNumMed">186 / 227</td>
+ <td class="coverPerLo">73.1&nbsp;%</td>
+ <td class="coverNumLo">1979 / 2706</td>
+ <td class="coverPerMed">81.5&nbsp;%</td>
+ <td class="coverNumMed">185 / 227</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libflash/index.html">libflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=67 height=10 alt="66.6%"><img src="snow.png" width=33 height=10 alt="66.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=66 height=10 alt="66.3%"><img src="snow.png" width=34 height=10 alt="66.3%"></td></tr></table>
</td>
- <td class="coverPerLo">66.6&nbsp;%</td>
- <td class="coverNumLo">1733 / 2603</td>
- <td class="coverPerMed">84.8&nbsp;%</td>
- <td class="coverNumMed">145 / 171</td>
+ <td class="coverPerLo">66.3&nbsp;%</td>
+ <td class="coverNumLo">1697 / 2559</td>
+ <td class="coverPerMed">84.9&nbsp;%</td>
+ <td class="coverNumMed">141 / 166</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="hw/test/index.html">hw/test</a></td>
+ <td class="coverFile"><a href="hw/index.html">hw</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=76 height=10 alt="76.5%"><img src="snow.png" width=24 height=10 alt="76.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=91 height=10 alt="90.6%"><img src="snow.png" width=9 height=10 alt="90.6%"></td></tr></table>
</td>
- <td class="coverPerMed">76.5&nbsp;%</td>
- <td class="coverNumMed">117 / 153</td>
+ <td class="coverPerHi">90.6&nbsp;%</td>
+ <td class="coverNumHi">115 / 127</td>
<td class="coverPerMed">85.7&nbsp;%</td>
<td class="coverNumMed">6 / 7</td>
<td class="coverPerHi">-</td>
@@ -399,19 +411,19 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=97 height=10 alt="97.1%"><img src="snow.png" width=3 height=10 alt="97.1%"></td></tr></table>
</td>
<td class="coverPerHi">97.1&nbsp;%</td>
- <td class="coverNumHi">1844 / 1899</td>
+ <td class="coverNumHi">1846 / 1901</td>
<td class="coverPerMed">89.0&nbsp;%</td>
- <td class="coverNumMed">137 / 154</td>
+ <td class="coverNumMed">138 / 155</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libstb/crypto/pkcs7/index.html">libstb/crypto/pkcs7</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=73 height=10 alt="73.4%"><img src="snow.png" width=27 height=10 alt="73.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=75 height=10 alt="75.3%"><img src="snow.png" width=25 height=10 alt="75.3%"></td></tr></table>
</td>
- <td class="coverPerLo">73.4&nbsp;%</td>
- <td class="coverNumLo">163 / 222</td>
+ <td class="coverPerMed">75.3&nbsp;%</td>
+ <td class="coverNumMed">168 / 223</td>
<td class="coverPerHi">92.9&nbsp;%</td>
<td class="coverNumHi">13 / 14</td>
<td class="coverPerHi">-</td>
@@ -432,34 +444,34 @@
<tr>
<td class="coverFile"><a href="external/gard/index.html">external/gard</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=70 height=10 alt="69.7%"><img src="snow.png" width=30 height=10 alt="69.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=71 height=10 alt="70.9%"><img src="snow.png" width=29 height=10 alt="70.9%"></td></tr></table>
</td>
- <td class="coverPerLo">69.7&nbsp;%</td>
- <td class="coverNumLo">326 / 468</td>
- <td class="coverPerHi">95.7&nbsp;%</td>
- <td class="coverNumHi">22 / 23</td>
+ <td class="coverPerLo">70.9&nbsp;%</td>
+ <td class="coverNumLo">329 / 464</td>
+ <td class="coverPerHi">95.5&nbsp;%</td>
+ <td class="coverNumHi">21 / 22</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="usr/include/sys/index.html">/usr/include/sys</a></td>
+ <td class="coverFile"><a href="usr/include/x86_64-linux-gnu/sys/index.html">/usr/include/x86_64-linux-gnu/sys</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/endian/test/index.html">ccan/endian/test</a></td>
+ <td class="coverFile"><a href="ccan/check_type/test/index.html">ccan/check_type/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">73 / 73</td>
+ <td class="coverNumHi">5 / 5</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
@@ -471,67 +483,67 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
+ <td class="coverNumHi">13 / 13</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="usr/include/bits/index.html">/usr/include/bits</a></td>
+ <td class="coverFile"><a href="ccan/container_of/index.html">ccan/container_of</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libstb/test/index.html">libstb/test</a></td>
+ <td class="coverFile"><a href="ccan/array_size/test/index.html">ccan/array_size/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
+ <td class="coverNumHi">6 / 6</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/check_type/test/index.html">ccan/check_type/test</a></td>
+ <td class="coverFile"><a href="ccan/build_assert/test/index.html">ccan/build_assert/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">5 / 5</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/build_assert/test/index.html">ccan/build_assert/test</a></td>
+ <td class="coverFile"><a href="ccan/endian/test/index.html">ccan/endian/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverNumHi">73 / 73</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/array_size/test/index.html">ccan/array_size/test</a></td>
+ <td class="coverFile"><a href="libstb/test/index.html">libstb/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">9 / 9</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
@@ -550,6 +562,18 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="external/trace/index.html">external/trace</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">39 / 39</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="ccan/short_types/test/index.html">ccan/short_types/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
@@ -564,34 +588,34 @@
<tr>
<td class="coverFile"><a href="external/gard/ccan/endian/index.html">external/gard/ccan/endian</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=33 height=10 alt="33.3%"><img src="snow.png" width=67 height=10 alt="33.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=40 height=10 alt="40.0%"><img src="snow.png" width=60 height=10 alt="40.0%"></td></tr></table>
</td>
- <td class="coverPerLo">33.3&nbsp;%</td>
- <td class="coverNumLo">4 / 12</td>
+ <td class="coverPerLo">40.0&nbsp;%</td>
+ <td class="coverNumLo">4 / 10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="external/trace/index.html">external/trace</a></td>
+ <td class="coverFile"><a href="ccan/str/test/index.html">ccan/str/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">39 / 39</td>
+ <td class="coverNumHi">81 / 81</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/str/test/index.html">ccan/str/test</a></td>
+ <td class="coverFile"><a href="usr/include/x86_64-linux-gnu/bits/index.html">/usr/include/x86_64-linux-gnu/bits</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="94.9%"><img src="snow.png" width=5 height=10 alt="94.9%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">84 / 84</td>
+ <td class="coverPerHi">94.9&nbsp;%</td>
+ <td class="coverNumHi">37 / 39</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
@@ -622,26 +646,26 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="hw/index.html">hw</a></td>
+ <td class="coverFile"><a href="ccan/heap/test/index.html">ccan/heap/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="95.0%"><img src="snow.png" width=5 height=10 alt="95.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=76 height=10 alt="76.4%"><img src="snow.png" width=24 height=10 alt="76.4%"></td></tr></table>
</td>
- <td class="coverPerHi">95.0&nbsp;%</td>
- <td class="coverNumHi">113 / 119</td>
+ <td class="coverPerMed">76.4&nbsp;%</td>
+ <td class="coverNumMed">55 / 72</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/heap/test/index.html">ccan/heap/test</a></td>
+ <td class="coverFile"><a href="libc/stdio/index.html">libc/stdio</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=76 height=10 alt="75.7%"><img src="snow.png" width=24 height=10 alt="75.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=98 height=10 alt="97.5%"><img src="snow.png" width=2 height=10 alt="97.5%"></td></tr></table>
</td>
- <td class="coverPerMed">75.7&nbsp;%</td>
- <td class="coverNumMed">53 / 70</td>
+ <td class="coverPerHi">97.5&nbsp;%</td>
+ <td class="coverNumHi">159 / 163</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">7 / 7</td>
+ <td class="coverNumHi">8 / 8</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -658,84 +682,72 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/list/test/index.html">ccan/list/test</a></td>
+ <td class="coverFile"><a href="libstb/secvar/index.html">libstb/secvar</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=98 height=10 alt="98.1%"><img src="snow.png" width=2 height=10 alt="98.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=89 height=10 alt="89.5%"><img src="snow.png" width=11 height=10 alt="89.5%"></td></tr></table>
</td>
- <td class="coverPerHi">98.1&nbsp;%</td>
- <td class="coverNumHi">310 / 316</td>
+ <td class="coverPerMed">89.5&nbsp;%</td>
+ <td class="coverNumMed">153 / 171</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">8 / 8</td>
+ <td class="coverNumHi">12 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libc/stdio/index.html">libc/stdio</a></td>
+ <td class="coverFile"><a href="ccan/endian/index.html">ccan/endian</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=98 height=10 alt="97.5%"><img src="snow.png" width=2 height=10 alt="97.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerHi">97.5&nbsp;%</td>
- <td class="coverNumHi">159 / 163</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">8 / 8</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
- <td class="coverFile"><a href="libstb/secvar/index.html">libstb/secvar</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=89 height=10 alt="89.5%"><img src="snow.png" width=11 height=10 alt="89.5%"></td></tr></table>
- </td>
- <td class="coverPerMed">89.5&nbsp;%</td>
- <td class="coverNumMed">153 / 171</td>
+ <td class="coverNumHi">24 / 24</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">12 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/endian/index.html">ccan/endian</a></td>
+ <td class="coverFile"><a href="ccan/list/test/index.html">ccan/list/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="98.7%"><img src="snow.png" width=1 height=10 alt="98.7%"></td></tr></table>
</td>
+ <td class="coverPerHi">98.7&nbsp;%</td>
+ <td class="coverNumHi">514 / 521</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">30 / 30</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">15 / 15</td>
+ <td class="coverNumHi">14 / 14</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="ccan/list/index.html">ccan/list</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="98.9%"><img src="snow.png" width=1 height=10 alt="98.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="99.1%"><img src="snow.png" width=1 height=10 alt="99.1%"></td></tr></table>
</td>
- <td class="coverPerHi">98.9&nbsp;%</td>
- <td class="coverNumHi">90 / 91</td>
+ <td class="coverPerHi">99.1&nbsp;%</td>
+ <td class="coverNumHi">114 / 115</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">18 / 18</td>
+ <td class="coverNumHi">23 / 23</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libstb/secvar/test/index.html">libstb/secvar/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="99.5%"><img src="snow.png" width=1 height=10 alt="99.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="99.6%"><img src="snow.png" width=1 height=10 alt="99.6%"></td></tr></table>
</td>
- <td class="coverPerHi">99.5&nbsp;%</td>
- <td class="coverNumHi">580 / 583</td>
+ <td class="coverPerHi">99.6&nbsp;%</td>
+ <td class="coverNumHi">687 / 690</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">22 / 22</td>
+ <td class="coverNumHi">24 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libstb/secvar/backend/index.html">libstb/secvar/backend</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=82 height=10 alt="82.0%"><img src="snow.png" width=18 height=10 alt="82.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=85 height=10 alt="84.7%"><img src="snow.png" width=15 height=10 alt="84.7%"></td></tr></table>
</td>
- <td class="coverPerMed">82.0&nbsp;%</td>
- <td class="coverNumMed">423 / 516</td>
+ <td class="coverPerMed">84.7&nbsp;%</td>
+ <td class="coverNumMed">455 / 537</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">24 / 24</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/index-sort-l.html b/coverage-report/index-sort-l.html
index a46b814..bcedf2c 100644
--- a/coverage-report/index-sort-l.html
+++ b/coverage-report/index-sort-l.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">14185</td>
- <td class="headerCovTableEntry">23224</td>
- <td class="headerCovTableEntryLo">61.1 %</td>
+ <td class="headerCovTableEntry">14494</td>
+ <td class="headerCovTableEntry">23488</td>
+ <td class="headerCovTableEntryLo">61.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">1157</td>
- <td class="headerCovTableEntry">1572</td>
- <td class="headerCovTableEntryLo">73.6 %</td>
+ <td class="headerCovTableEntry">1152</td>
+ <td class="headerCovTableEntry">1546</td>
+ <td class="headerCovTableEntryLo">74.5 %</td>
</tr>
<tr>
<td></td>
@@ -120,60 +120,48 @@
<tr>
<td class="coverFile"><a href="external/gard/libflash/index.html">external/gard/libflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=20 height=10 alt="19.9%"><img src="snow.png" width=80 height=10 alt="19.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=20 height=10 alt="20.1%"><img src="snow.png" width=80 height=10 alt="20.1%"></td></tr></table>
</td>
- <td class="coverPerLo">19.9&nbsp;%</td>
- <td class="coverNumLo">305 / 1530</td>
- <td class="coverPerLo">30.6&nbsp;%</td>
- <td class="coverNumLo">26 / 85</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
- <td class="coverFile"><a href="external/ffspart/libflash/index.html">external/ffspart/libflash</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=25 height=10 alt="25.2%"><img src="snow.png" width=75 height=10 alt="25.2%"></td></tr></table>
- </td>
- <td class="coverPerLo">25.2&nbsp;%</td>
- <td class="coverNumLo">385 / 1530</td>
- <td class="coverPerLo">35.3&nbsp;%</td>
- <td class="coverNumLo">30 / 85</td>
+ <td class="coverPerLo">20.1&nbsp;%</td>
+ <td class="coverNumLo">291 / 1445</td>
+ <td class="coverPerLo">31.9&nbsp;%</td>
+ <td class="coverNumLo">23 / 72</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="external/pflash/libflash/index.html">external/pflash/libflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=27 height=10 alt="26.7%"><img src="snow.png" width=73 height=10 alt="26.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=25 height=10 alt="25.3%"><img src="snow.png" width=75 height=10 alt="25.3%"></td></tr></table>
</td>
- <td class="coverPerLo">26.7&nbsp;%</td>
- <td class="coverNumLo">409 / 1530</td>
- <td class="coverPerLo">43.5&nbsp;%</td>
- <td class="coverNumLo">37 / 85</td>
+ <td class="coverPerLo">25.3&nbsp;%</td>
+ <td class="coverNumLo">365 / 1445</td>
+ <td class="coverPerLo">43.1&nbsp;%</td>
+ <td class="coverNumLo">31 / 72</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libfdt/index.html">libfdt</a></td>
+ <td class="coverFile"><a href="external/ffspart/libflash/index.html">external/ffspart/libflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=31 height=10 alt="31.0%"><img src="snow.png" width=69 height=10 alt="31.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=26 height=10 alt="25.7%"><img src="snow.png" width=74 height=10 alt="25.7%"></td></tr></table>
</td>
- <td class="coverPerLo">31.0&nbsp;%</td>
- <td class="coverNumLo">262 / 845</td>
- <td class="coverPerLo">48.4&nbsp;%</td>
- <td class="coverNumLo">46 / 95</td>
+ <td class="coverPerLo">25.7&nbsp;%</td>
+ <td class="coverNumLo">371 / 1445</td>
+ <td class="coverPerLo">36.1&nbsp;%</td>
+ <td class="coverNumLo">26 / 72</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="external/gard/ccan/endian/index.html">external/gard/ccan/endian</a></td>
+ <td class="coverFile"><a href="libfdt/index.html">libfdt</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=33 height=10 alt="33.3%"><img src="snow.png" width=67 height=10 alt="33.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=34 height=10 alt="33.6%"><img src="snow.png" width=66 height=10 alt="33.6%"></td></tr></table>
</td>
- <td class="coverPerLo">33.3&nbsp;%</td>
- <td class="coverNumLo">4 / 12</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerLo">33.6&nbsp;%</td>
+ <td class="coverNumLo">283 / 843</td>
+ <td class="coverPerLo">49.0&nbsp;%</td>
+ <td class="coverNumLo">47 / 96</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -214,72 +202,96 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="external/ffspart/index.html">external/ffspart</a></td>
+ <td class="coverFile"><a href="external/gard/ccan/endian/index.html">external/gard/ccan/endian</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=45 height=10 alt="45.3%"><img src="snow.png" width=55 height=10 alt="45.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=40 height=10 alt="40.0%"><img src="snow.png" width=60 height=10 alt="40.0%"></td></tr></table>
</td>
- <td class="coverPerLo">45.3&nbsp;%</td>
- <td class="coverNumLo">134 / 296</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">4 / 6</td>
+ <td class="coverPerLo">40.0&nbsp;%</td>
+ <td class="coverNumLo">4 / 10</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="test/index.html">test</a></td>
+ <td class="coverFile"><a href="hdata/index.html">hdata</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=46 height=10 alt="46.2%"><img src="snow.png" width=54 height=10 alt="46.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=44 height=10 alt="44.5%"><img src="snow.png" width=56 height=10 alt="44.5%"></td></tr></table>
</td>
- <td class="coverPerLo">46.2&nbsp;%</td>
- <td class="coverNumLo">12 / 26</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">2 / 3</td>
+ <td class="coverPerLo">44.5&nbsp;%</td>
+ <td class="coverNumLo">1247 / 2803</td>
+ <td class="coverPerLo">67.3&nbsp;%</td>
+ <td class="coverNumLo">101 / 150</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="hdata/index.html">hdata</a></td>
+ <td class="coverFile"><a href="libstb/secvar/storage/index.html">libstb/secvar/storage</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=46 height=10 alt="46.2%"><img src="snow.png" width=54 height=10 alt="46.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=45 height=10 alt="44.7%"><img src="snow.png" width=55 height=10 alt="44.7%"></td></tr></table>
</td>
- <td class="coverPerLo">46.2&nbsp;%</td>
- <td class="coverNumLo">1237 / 2675</td>
- <td class="coverPerLo">68.0&nbsp;%</td>
- <td class="coverNumLo">100 / 147</td>
+ <td class="coverPerLo">44.7&nbsp;%</td>
+ <td class="coverNumLo">196 / 438</td>
+ <td class="coverPerLo">64.3&nbsp;%</td>
+ <td class="coverNumLo">18 / 28</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libstb/secvar/storage/index.html">libstb/secvar/storage</a></td>
+ <td class="coverFile"><a href="external/ffspart/index.html">external/ffspart</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=47 height=10 alt="47.2%"><img src="snow.png" width=53 height=10 alt="47.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=46 height=10 alt="45.8%"><img src="snow.png" width=54 height=10 alt="45.8%"></td></tr></table>
</td>
- <td class="coverPerLo">47.2&nbsp;%</td>
- <td class="coverNumLo">201 / 426</td>
+ <td class="coverPerLo">45.8&nbsp;%</td>
+ <td class="coverNumLo">135 / 295</td>
+ <td class="coverPerLo">50.0&nbsp;%</td>
+ <td class="coverNumLo">2 / 4</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="test/index.html">test</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=46 height=10 alt="46.2%"><img src="snow.png" width=54 height=10 alt="46.2%"></td></tr></table>
+ </td>
+ <td class="coverPerLo">46.2&nbsp;%</td>
+ <td class="coverNumLo">12 / 26</td>
<td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">18 / 27</td>
+ <td class="coverNumLo">2 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="external/ffspart/ccan/endian/index.html">external/ffspart/ccan/endian</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=50 height=10 alt="50.0%"><img src="snow.png" width=50 height=10 alt="50.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="60.0%"><img src="snow.png" width=40 height=10 alt="60.0%"></td></tr></table>
</td>
- <td class="coverPerLo">50.0&nbsp;%</td>
- <td class="coverNumLo">6 / 12</td>
+ <td class="coverPerLo">60.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 10</td>
<td class="coverPerLo">50.0&nbsp;%</td>
<td class="coverNumLo">1 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="external/pflash/ccan/endian/index.html">external/pflash/ccan/endian</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="60.0%"><img src="snow.png" width=40 height=10 alt="60.0%"></td></tr></table>
+ </td>
+ <td class="coverPerLo">60.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 10</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 2</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="external/pflash/index.html">external/pflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="60.1%"><img src="snow.png" width=40 height=10 alt="60.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="60.3%"><img src="snow.png" width=40 height=10 alt="60.3%"></td></tr></table>
</td>
- <td class="coverPerLo">60.1&nbsp;%</td>
- <td class="coverNumLo">485 / 807</td>
+ <td class="coverPerLo">60.3&nbsp;%</td>
+ <td class="coverNumLo">486 / 806</td>
<td class="coverPerMed">78.9&nbsp;%</td>
<td class="coverNumMed">15 / 19</td>
<td class="coverPerHi">-</td>
@@ -288,10 +300,10 @@
<tr>
<td class="coverFile"><a href="hdata/test/index.html">hdata/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=64 height=10 alt="63.8%"><img src="snow.png" width=36 height=10 alt="63.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=62 height=10 alt="62.5%"><img src="snow.png" width=38 height=10 alt="62.5%"></td></tr></table>
</td>
- <td class="coverPerLo">63.8&nbsp;%</td>
- <td class="coverNumLo">104 / 163</td>
+ <td class="coverPerLo">62.5&nbsp;%</td>
+ <td class="coverNumLo">105 / 168</td>
<td class="coverPerLo">57.1&nbsp;%</td>
<td class="coverNumLo">8 / 14</td>
<td class="coverPerHi">-</td>
@@ -312,36 +324,24 @@
<tr>
<td class="coverFile"><a href="libflash/index.html">libflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=67 height=10 alt="66.6%"><img src="snow.png" width=33 height=10 alt="66.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=66 height=10 alt="66.3%"><img src="snow.png" width=34 height=10 alt="66.3%"></td></tr></table>
</td>
- <td class="coverPerLo">66.6&nbsp;%</td>
- <td class="coverNumLo">1733 / 2603</td>
- <td class="coverPerMed">84.8&nbsp;%</td>
- <td class="coverNumMed">145 / 171</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
- <td class="coverFile"><a href="external/pflash/ccan/endian/index.html">external/pflash/ccan/endian</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=67 height=10 alt="66.7%"><img src="snow.png" width=33 height=10 alt="66.7%"></td></tr></table>
- </td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">8 / 12</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 2</td>
+ <td class="coverPerLo">66.3&nbsp;%</td>
+ <td class="coverNumLo">1697 / 2559</td>
+ <td class="coverPerMed">84.9&nbsp;%</td>
+ <td class="coverNumMed">141 / 166</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="external/gard/index.html">external/gard</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=70 height=10 alt="69.7%"><img src="snow.png" width=30 height=10 alt="69.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=71 height=10 alt="70.9%"><img src="snow.png" width=29 height=10 alt="70.9%"></td></tr></table>
</td>
- <td class="coverPerLo">69.7&nbsp;%</td>
- <td class="coverNumLo">326 / 468</td>
- <td class="coverPerHi">95.7&nbsp;%</td>
- <td class="coverNumHi">22 / 23</td>
+ <td class="coverPerLo">70.9&nbsp;%</td>
+ <td class="coverNumLo">329 / 464</td>
+ <td class="coverPerHi">95.5&nbsp;%</td>
+ <td class="coverNumHi">21 / 22</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -370,14 +370,14 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libstb/crypto/pkcs7/index.html">libstb/crypto/pkcs7</a></td>
+ <td class="coverFile"><a href="core/index.html">core</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=73 height=10 alt="73.4%"><img src="snow.png" width=27 height=10 alt="73.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=73 height=10 alt="73.1%"><img src="snow.png" width=27 height=10 alt="73.1%"></td></tr></table>
</td>
- <td class="coverPerLo">73.4&nbsp;%</td>
- <td class="coverNumLo">163 / 222</td>
- <td class="coverPerHi">92.9&nbsp;%</td>
- <td class="coverNumHi">13 / 14</td>
+ <td class="coverPerLo">73.1&nbsp;%</td>
+ <td class="coverNumLo">1979 / 2706</td>
+ <td class="coverPerMed">81.5&nbsp;%</td>
+ <td class="coverNumMed">185 / 227</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -394,50 +394,38 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="core/index.html">core</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=75 height=10 alt="74.6%"><img src="snow.png" width=25 height=10 alt="74.6%"></td></tr></table>
- </td>
- <td class="coverPerLo">74.6&nbsp;%</td>
- <td class="coverNumLo">2002 / 2683</td>
- <td class="coverPerMed">81.9&nbsp;%</td>
- <td class="coverNumMed">186 / 227</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
- <td class="coverFile"><a href="ccan/heap/test/index.html">ccan/heap/test</a></td>
+ <td class="coverFile"><a href="hw/test/index.html">hw/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=76 height=10 alt="75.7%"><img src="snow.png" width=24 height=10 alt="75.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=75 height=10 alt="75.0%"><img src="snow.png" width=25 height=10 alt="75.0%"></td></tr></table>
</td>
- <td class="coverPerMed">75.7&nbsp;%</td>
- <td class="coverNumMed">53 / 70</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">7 / 7</td>
+ <td class="coverPerMed">75.0&nbsp;%</td>
+ <td class="coverNumMed">123 / 164</td>
+ <td class="coverPerMed">75.0&nbsp;%</td>
+ <td class="coverNumMed">6 / 8</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="hw/test/index.html">hw/test</a></td>
+ <td class="coverFile"><a href="libstb/crypto/pkcs7/index.html">libstb/crypto/pkcs7</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=76 height=10 alt="76.5%"><img src="snow.png" width=24 height=10 alt="76.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=75 height=10 alt="75.3%"><img src="snow.png" width=25 height=10 alt="75.3%"></td></tr></table>
</td>
- <td class="coverPerMed">76.5&nbsp;%</td>
- <td class="coverNumMed">117 / 153</td>
- <td class="coverPerMed">85.7&nbsp;%</td>
- <td class="coverNumMed">6 / 7</td>
+ <td class="coverPerMed">75.3&nbsp;%</td>
+ <td class="coverNumMed">168 / 223</td>
+ <td class="coverPerHi">92.9&nbsp;%</td>
+ <td class="coverNumHi">13 / 14</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libstb/secvar/backend/index.html">libstb/secvar/backend</a></td>
+ <td class="coverFile"><a href="ccan/heap/test/index.html">ccan/heap/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=82 height=10 alt="82.0%"><img src="snow.png" width=18 height=10 alt="82.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=76 height=10 alt="76.4%"><img src="snow.png" width=24 height=10 alt="76.4%"></td></tr></table>
</td>
- <td class="coverPerMed">82.0&nbsp;%</td>
- <td class="coverNumMed">423 / 516</td>
+ <td class="coverPerMed">76.4&nbsp;%</td>
+ <td class="coverNumMed">55 / 72</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">24 / 24</td>
+ <td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -454,6 +442,18 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="libstb/secvar/backend/index.html">libstb/secvar/backend</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=85 height=10 alt="84.7%"><img src="snow.png" width=15 height=10 alt="84.7%"></td></tr></table>
+ </td>
+ <td class="coverPerMed">84.7&nbsp;%</td>
+ <td class="coverNumMed">455 / 537</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">24 / 24</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="libstb/secvar/index.html">libstb/secvar</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=89 height=10 alt="89.5%"><img src="snow.png" width=11 height=10 alt="89.5%"></td></tr></table>
@@ -466,26 +466,38 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libc/stdlib/index.html">libc/stdlib</a></td>
+ <td class="coverFile"><a href="hw/index.html">hw</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="94.8%"><img src="snow.png" width=5 height=10 alt="94.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=91 height=10 alt="90.6%"><img src="snow.png" width=9 height=10 alt="90.6%"></td></tr></table>
</td>
- <td class="coverPerHi">94.8&nbsp;%</td>
- <td class="coverNumHi">73 / 77</td>
- <td class="coverPerMed">80.0&nbsp;%</td>
- <td class="coverNumMed">4 / 5</td>
+ <td class="coverPerHi">90.6&nbsp;%</td>
+ <td class="coverNumHi">115 / 127</td>
+ <td class="coverPerMed">85.7&nbsp;%</td>
+ <td class="coverNumMed">6 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="hw/index.html">hw</a></td>
+ <td class="coverFile"><a href="usr/include/x86_64-linux-gnu/bits/index.html">/usr/include/x86_64-linux-gnu/bits</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="95.0%"><img src="snow.png" width=5 height=10 alt="95.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="94.9%"><img src="snow.png" width=5 height=10 alt="94.9%"></td></tr></table>
</td>
- <td class="coverPerHi">95.0&nbsp;%</td>
- <td class="coverNumHi">113 / 119</td>
+ <td class="coverPerHi">94.9&nbsp;%</td>
+ <td class="coverNumHi">37 / 39</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">3 / 3</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="libc/stdlib/index.html">libc/stdlib</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="94.8%"><img src="snow.png" width=5 height=10 alt="94.8%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">94.8&nbsp;%</td>
+ <td class="coverNumHi">73 / 77</td>
+ <td class="coverPerMed">80.0&nbsp;%</td>
+ <td class="coverNumMed">4 / 5</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -507,9 +519,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=97 height=10 alt="97.1%"><img src="snow.png" width=3 height=10 alt="97.1%"></td></tr></table>
</td>
<td class="coverPerHi">97.1&nbsp;%</td>
- <td class="coverNumHi">1844 / 1899</td>
+ <td class="coverNumHi">1846 / 1901</td>
<td class="coverPerMed">89.0&nbsp;%</td>
- <td class="coverNumMed">137 / 154</td>
+ <td class="coverNumMed">138 / 155</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -526,55 +538,55 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/list/test/index.html">ccan/list/test</a></td>
+ <td class="coverFile"><a href="libc/test/index.html">libc/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=98 height=10 alt="98.1%"><img src="snow.png" width=2 height=10 alt="98.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=98 height=10 alt="98.4%"><img src="snow.png" width=2 height=10 alt="98.4%"></td></tr></table>
</td>
- <td class="coverPerHi">98.1&nbsp;%</td>
- <td class="coverNumHi">310 / 316</td>
+ <td class="coverPerHi">98.4&nbsp;%</td>
+ <td class="coverNumHi">377 / 383</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">8 / 8</td>
+ <td class="coverNumHi">31 / 31</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libc/test/index.html">libc/test</a></td>
+ <td class="coverFile"><a href="ccan/list/test/index.html">ccan/list/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=98 height=10 alt="98.4%"><img src="snow.png" width=2 height=10 alt="98.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="98.7%"><img src="snow.png" width=1 height=10 alt="98.7%"></td></tr></table>
</td>
- <td class="coverPerHi">98.4&nbsp;%</td>
- <td class="coverNumHi">377 / 383</td>
+ <td class="coverPerHi">98.7&nbsp;%</td>
+ <td class="coverNumHi">514 / 521</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">31 / 31</td>
+ <td class="coverNumHi">14 / 14</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="ccan/list/index.html">ccan/list</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="98.9%"><img src="snow.png" width=1 height=10 alt="98.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="99.1%"><img src="snow.png" width=1 height=10 alt="99.1%"></td></tr></table>
</td>
- <td class="coverPerHi">98.9&nbsp;%</td>
- <td class="coverNumHi">90 / 91</td>
+ <td class="coverPerHi">99.1&nbsp;%</td>
+ <td class="coverNumHi">114 / 115</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">18 / 18</td>
+ <td class="coverNumHi">23 / 23</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libstb/secvar/test/index.html">libstb/secvar/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="99.5%"><img src="snow.png" width=1 height=10 alt="99.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="99.6%"><img src="snow.png" width=1 height=10 alt="99.6%"></td></tr></table>
</td>
- <td class="coverPerHi">99.5&nbsp;%</td>
- <td class="coverNumHi">580 / 583</td>
+ <td class="coverPerHi">99.6&nbsp;%</td>
+ <td class="coverNumHi">687 / 690</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">22 / 22</td>
+ <td class="coverNumHi">24 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/build_assert/test/index.html">ccan/build_assert/test</a></td>
+ <td class="coverFile"><a href="ccan/container_of/index.html">ccan/container_of</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -586,67 +598,67 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/short_types/test/index.html">ccan/short_types/test</a></td>
+ <td class="coverFile"><a href="ccan/build_assert/test/index.html">ccan/build_assert/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">4 / 4</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/check_type/test/index.html">ccan/check_type/test</a></td>
+ <td class="coverFile"><a href="ccan/short_types/test/index.html">ccan/short_types/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">5 / 5</td>
+ <td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="usr/include/bits/index.html">/usr/include/bits</a></td>
+ <td class="coverFile"><a href="usr/include/x86_64-linux-gnu/sys/index.html">/usr/include/x86_64-linux-gnu/sys</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverNumHi">4 / 4</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/array_size/test/index.html">ccan/array_size/test</a></td>
+ <td class="coverFile"><a href="ccan/check_type/test/index.html">ccan/check_type/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">5 / 5</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="usr/include/sys/index.html">/usr/include/sys</a></td>
+ <td class="coverFile"><a href="ccan/array_size/test/index.html">ccan/array_size/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">6 / 6</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/container_of/test/index.html">ccan/container_of/test</a></td>
+ <td class="coverFile"><a href="libstb/test/index.html">libstb/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -658,50 +670,50 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libstb/test/index.html">libstb/test</a></td>
+ <td class="coverFile"><a href="ccan/str/index.html">ccan/str</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
+ <td class="coverNumHi">10 / 10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/str/index.html">ccan/str</a></td>
+ <td class="coverFile"><a href="ccan/container_of/test/index.html">ccan/container_of/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">10 / 10</td>
+ <td class="coverNumHi">13 / 13</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libc/ctype/index.html">libc/ctype</a></td>
+ <td class="coverFile"><a href="ccan/endian/index.html">ccan/endian</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">24 / 24</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">12 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ccan/endian/index.html">ccan/endian</a></td>
+ <td class="coverFile"><a href="libc/ctype/index.html">libc/ctype</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">30 / 30</td>
+ <td class="coverNumHi">24 / 24</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">15 / 15</td>
+ <td class="coverNumHi">6 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -747,7 +759,7 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">84 / 84</td>
+ <td class="coverNumHi">81 / 81</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/index.html b/coverage-report/index.html
index 3fb1a8a..2f109cd 100644
--- a/coverage-report/index.html
+++ b/coverage-report/index.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">14185</td>
- <td class="headerCovTableEntry">23224</td>
- <td class="headerCovTableEntryLo">61.1 %</td>
+ <td class="headerCovTableEntry">14494</td>
+ <td class="headerCovTableEntry">23488</td>
+ <td class="headerCovTableEntryLo">61.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">1157</td>
- <td class="headerCovTableEntry">1572</td>
- <td class="headerCovTableEntryLo">73.6 %</td>
+ <td class="headerCovTableEntry">1152</td>
+ <td class="headerCovTableEntry">1546</td>
+ <td class="headerCovTableEntryLo">74.5 %</td>
</tr>
<tr>
<td></td>
@@ -82,24 +82,24 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="usr/include/bits/index.html">/usr/include/bits</a></td>
+ <td class="coverFile"><a href="usr/include/x86_64-linux-gnu/bits/index.html">/usr/include/x86_64-linux-gnu/bits</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="94.9%"><img src="snow.png" width=5 height=10 alt="94.9%"></td></tr></table>
</td>
+ <td class="coverPerHi">94.9&nbsp;%</td>
+ <td class="coverNumHi">37 / 39</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="usr/include/sys/index.html">/usr/include/sys</a></td>
+ <td class="coverFile"><a href="usr/include/x86_64-linux-gnu/sys/index.html">/usr/include/x86_64-linux-gnu/sys</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
<td class="coverPerHi">-</td>
@@ -142,12 +142,24 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="ccan/container_of/index.html">ccan/container_of</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="ccan/container_of/test/index.html">ccan/container_of/test</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
+ <td class="coverNumHi">13 / 13</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
@@ -159,9 +171,9 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">30 / 30</td>
+ <td class="coverNumHi">24 / 24</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">15 / 15</td>
+ <td class="coverNumHi">12 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -192,10 +204,10 @@
<tr>
<td class="coverFile"><a href="ccan/heap/test/index.html">ccan/heap/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=76 height=10 alt="75.7%"><img src="snow.png" width=24 height=10 alt="75.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=76 height=10 alt="76.4%"><img src="snow.png" width=24 height=10 alt="76.4%"></td></tr></table>
</td>
- <td class="coverPerMed">75.7&nbsp;%</td>
- <td class="coverNumMed">53 / 70</td>
+ <td class="coverPerMed">76.4&nbsp;%</td>
+ <td class="coverNumMed">55 / 72</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
@@ -204,24 +216,24 @@
<tr>
<td class="coverFile"><a href="ccan/list/index.html">ccan/list</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="98.9%"><img src="snow.png" width=1 height=10 alt="98.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="99.1%"><img src="snow.png" width=1 height=10 alt="99.1%"></td></tr></table>
</td>
- <td class="coverPerHi">98.9&nbsp;%</td>
- <td class="coverNumHi">90 / 91</td>
+ <td class="coverPerHi">99.1&nbsp;%</td>
+ <td class="coverNumHi">114 / 115</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">18 / 18</td>
+ <td class="coverNumHi">23 / 23</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="ccan/list/test/index.html">ccan/list/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=98 height=10 alt="98.1%"><img src="snow.png" width=2 height=10 alt="98.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="98.7%"><img src="snow.png" width=1 height=10 alt="98.7%"></td></tr></table>
</td>
- <td class="coverPerHi">98.1&nbsp;%</td>
- <td class="coverNumHi">310 / 316</td>
+ <td class="coverPerHi">98.7&nbsp;%</td>
+ <td class="coverNumHi">514 / 521</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">8 / 8</td>
+ <td class="coverNumHi">14 / 14</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -255,7 +267,7 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">84 / 84</td>
+ <td class="coverNumHi">81 / 81</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
@@ -264,12 +276,12 @@
<tr>
<td class="coverFile"><a href="core/index.html">core</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=75 height=10 alt="74.6%"><img src="snow.png" width=25 height=10 alt="74.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=73 height=10 alt="73.1%"><img src="snow.png" width=27 height=10 alt="73.1%"></td></tr></table>
</td>
- <td class="coverPerLo">74.6&nbsp;%</td>
- <td class="coverNumLo">2002 / 2683</td>
- <td class="coverPerMed">81.9&nbsp;%</td>
- <td class="coverNumMed">186 / 227</td>
+ <td class="coverPerLo">73.1&nbsp;%</td>
+ <td class="coverNumLo">1979 / 2706</td>
+ <td class="coverPerMed">81.5&nbsp;%</td>
+ <td class="coverNumMed">185 / 227</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -279,31 +291,31 @@
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=97 height=10 alt="97.1%"><img src="snow.png" width=3 height=10 alt="97.1%"></td></tr></table>
</td>
<td class="coverPerHi">97.1&nbsp;%</td>
- <td class="coverNumHi">1844 / 1899</td>
+ <td class="coverNumHi">1846 / 1901</td>
<td class="coverPerMed">89.0&nbsp;%</td>
- <td class="coverNumMed">137 / 154</td>
+ <td class="coverNumMed">138 / 155</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="external/ffspart/index.html">external/ffspart</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=45 height=10 alt="45.3%"><img src="snow.png" width=55 height=10 alt="45.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=46 height=10 alt="45.8%"><img src="snow.png" width=54 height=10 alt="45.8%"></td></tr></table>
</td>
- <td class="coverPerLo">45.3&nbsp;%</td>
- <td class="coverNumLo">134 / 296</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">4 / 6</td>
+ <td class="coverPerLo">45.8&nbsp;%</td>
+ <td class="coverNumLo">135 / 295</td>
+ <td class="coverPerLo">50.0&nbsp;%</td>
+ <td class="coverNumLo">2 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="external/ffspart/ccan/endian/index.html">external/ffspart/ccan/endian</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=50 height=10 alt="50.0%"><img src="snow.png" width=50 height=10 alt="50.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="60.0%"><img src="snow.png" width=40 height=10 alt="60.0%"></td></tr></table>
</td>
- <td class="coverPerLo">50.0&nbsp;%</td>
- <td class="coverNumLo">6 / 12</td>
+ <td class="coverPerLo">60.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 10</td>
<td class="coverPerLo">50.0&nbsp;%</td>
<td class="coverNumLo">1 / 2</td>
<td class="coverPerHi">-</td>
@@ -324,34 +336,34 @@
<tr>
<td class="coverFile"><a href="external/ffspart/libflash/index.html">external/ffspart/libflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=25 height=10 alt="25.2%"><img src="snow.png" width=75 height=10 alt="25.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=26 height=10 alt="25.7%"><img src="snow.png" width=74 height=10 alt="25.7%"></td></tr></table>
</td>
- <td class="coverPerLo">25.2&nbsp;%</td>
- <td class="coverNumLo">385 / 1530</td>
- <td class="coverPerLo">35.3&nbsp;%</td>
- <td class="coverNumLo">30 / 85</td>
+ <td class="coverPerLo">25.7&nbsp;%</td>
+ <td class="coverNumLo">371 / 1445</td>
+ <td class="coverPerLo">36.1&nbsp;%</td>
+ <td class="coverNumLo">26 / 72</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="external/gard/index.html">external/gard</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=70 height=10 alt="69.7%"><img src="snow.png" width=30 height=10 alt="69.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=71 height=10 alt="70.9%"><img src="snow.png" width=29 height=10 alt="70.9%"></td></tr></table>
</td>
- <td class="coverPerLo">69.7&nbsp;%</td>
- <td class="coverNumLo">326 / 468</td>
- <td class="coverPerHi">95.7&nbsp;%</td>
- <td class="coverNumHi">22 / 23</td>
+ <td class="coverPerLo">70.9&nbsp;%</td>
+ <td class="coverNumLo">329 / 464</td>
+ <td class="coverPerHi">95.5&nbsp;%</td>
+ <td class="coverNumHi">21 / 22</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="external/gard/ccan/endian/index.html">external/gard/ccan/endian</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=33 height=10 alt="33.3%"><img src="snow.png" width=67 height=10 alt="33.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=40 height=10 alt="40.0%"><img src="snow.png" width=60 height=10 alt="40.0%"></td></tr></table>
</td>
- <td class="coverPerLo">33.3&nbsp;%</td>
- <td class="coverNumLo">4 / 12</td>
+ <td class="coverPerLo">40.0&nbsp;%</td>
+ <td class="coverNumLo">4 / 10</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
@@ -384,22 +396,22 @@
<tr>
<td class="coverFile"><a href="external/gard/libflash/index.html">external/gard/libflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=20 height=10 alt="19.9%"><img src="snow.png" width=80 height=10 alt="19.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=20 height=10 alt="20.1%"><img src="snow.png" width=80 height=10 alt="20.1%"></td></tr></table>
</td>
- <td class="coverPerLo">19.9&nbsp;%</td>
- <td class="coverNumLo">305 / 1530</td>
- <td class="coverPerLo">30.6&nbsp;%</td>
- <td class="coverNumLo">26 / 85</td>
+ <td class="coverPerLo">20.1&nbsp;%</td>
+ <td class="coverNumLo">291 / 1445</td>
+ <td class="coverPerLo">31.9&nbsp;%</td>
+ <td class="coverNumLo">23 / 72</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="external/pflash/index.html">external/pflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="60.1%"><img src="snow.png" width=40 height=10 alt="60.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="60.3%"><img src="snow.png" width=40 height=10 alt="60.3%"></td></tr></table>
</td>
- <td class="coverPerLo">60.1&nbsp;%</td>
- <td class="coverNumLo">485 / 807</td>
+ <td class="coverPerLo">60.3&nbsp;%</td>
+ <td class="coverNumLo">486 / 806</td>
<td class="coverPerMed">78.9&nbsp;%</td>
<td class="coverNumMed">15 / 19</td>
<td class="coverPerHi">-</td>
@@ -408,10 +420,10 @@
<tr>
<td class="coverFile"><a href="external/pflash/ccan/endian/index.html">external/pflash/ccan/endian</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=67 height=10 alt="66.7%"><img src="snow.png" width=33 height=10 alt="66.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="60.0%"><img src="snow.png" width=40 height=10 alt="60.0%"></td></tr></table>
</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">8 / 12</td>
+ <td class="coverPerLo">60.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 10</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumLo">0 / 2</td>
<td class="coverPerHi">-</td>
@@ -444,12 +456,12 @@
<tr>
<td class="coverFile"><a href="external/pflash/libflash/index.html">external/pflash/libflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=27 height=10 alt="26.7%"><img src="snow.png" width=73 height=10 alt="26.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=25 height=10 alt="25.3%"><img src="snow.png" width=75 height=10 alt="25.3%"></td></tr></table>
</td>
- <td class="coverPerLo">26.7&nbsp;%</td>
- <td class="coverNumLo">409 / 1530</td>
- <td class="coverPerLo">43.5&nbsp;%</td>
- <td class="coverNumLo">37 / 85</td>
+ <td class="coverPerLo">25.3&nbsp;%</td>
+ <td class="coverNumLo">365 / 1445</td>
+ <td class="coverPerLo">43.1&nbsp;%</td>
+ <td class="coverNumLo">31 / 72</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -468,22 +480,22 @@
<tr>
<td class="coverFile"><a href="hdata/index.html">hdata</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=46 height=10 alt="46.2%"><img src="snow.png" width=54 height=10 alt="46.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=44 height=10 alt="44.5%"><img src="snow.png" width=56 height=10 alt="44.5%"></td></tr></table>
</td>
- <td class="coverPerLo">46.2&nbsp;%</td>
- <td class="coverNumLo">1237 / 2675</td>
- <td class="coverPerLo">68.0&nbsp;%</td>
- <td class="coverNumLo">100 / 147</td>
+ <td class="coverPerLo">44.5&nbsp;%</td>
+ <td class="coverNumLo">1247 / 2803</td>
+ <td class="coverPerLo">67.3&nbsp;%</td>
+ <td class="coverNumLo">101 / 150</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="hdata/test/index.html">hdata/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=64 height=10 alt="63.8%"><img src="snow.png" width=36 height=10 alt="63.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=62 height=10 alt="62.5%"><img src="snow.png" width=38 height=10 alt="62.5%"></td></tr></table>
</td>
- <td class="coverPerLo">63.8&nbsp;%</td>
- <td class="coverNumLo">104 / 163</td>
+ <td class="coverPerLo">62.5&nbsp;%</td>
+ <td class="coverNumLo">105 / 168</td>
<td class="coverPerLo">57.1&nbsp;%</td>
<td class="coverNumLo">8 / 14</td>
<td class="coverPerHi">-</td>
@@ -492,12 +504,12 @@
<tr>
<td class="coverFile"><a href="hw/index.html">hw</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=95 height=10 alt="95.0%"><img src="snow.png" width=5 height=10 alt="95.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=91 height=10 alt="90.6%"><img src="snow.png" width=9 height=10 alt="90.6%"></td></tr></table>
</td>
- <td class="coverPerHi">95.0&nbsp;%</td>
- <td class="coverNumHi">113 / 119</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverPerHi">90.6&nbsp;%</td>
+ <td class="coverNumHi">115 / 127</td>
+ <td class="coverPerMed">85.7&nbsp;%</td>
+ <td class="coverNumMed">6 / 7</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -528,12 +540,12 @@
<tr>
<td class="coverFile"><a href="hw/test/index.html">hw/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=76 height=10 alt="76.5%"><img src="snow.png" width=24 height=10 alt="76.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=75 height=10 alt="75.0%"><img src="snow.png" width=25 height=10 alt="75.0%"></td></tr></table>
</td>
- <td class="coverPerMed">76.5&nbsp;%</td>
- <td class="coverNumMed">117 / 153</td>
- <td class="coverPerMed">85.7&nbsp;%</td>
- <td class="coverNumMed">6 / 7</td>
+ <td class="coverPerMed">75.0&nbsp;%</td>
+ <td class="coverNumMed">123 / 164</td>
+ <td class="coverPerMed">75.0&nbsp;%</td>
+ <td class="coverNumMed">6 / 8</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -624,24 +636,24 @@
<tr>
<td class="coverFile"><a href="libfdt/index.html">libfdt</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=31 height=10 alt="31.0%"><img src="snow.png" width=69 height=10 alt="31.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=34 height=10 alt="33.6%"><img src="snow.png" width=66 height=10 alt="33.6%"></td></tr></table>
</td>
- <td class="coverPerLo">31.0&nbsp;%</td>
- <td class="coverNumLo">262 / 845</td>
- <td class="coverPerLo">48.4&nbsp;%</td>
- <td class="coverNumLo">46 / 95</td>
+ <td class="coverPerLo">33.6&nbsp;%</td>
+ <td class="coverNumLo">283 / 843</td>
+ <td class="coverPerLo">49.0&nbsp;%</td>
+ <td class="coverNumLo">47 / 96</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libflash/index.html">libflash</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=67 height=10 alt="66.6%"><img src="snow.png" width=33 height=10 alt="66.6%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=66 height=10 alt="66.3%"><img src="snow.png" width=34 height=10 alt="66.3%"></td></tr></table>
</td>
- <td class="coverPerLo">66.6&nbsp;%</td>
- <td class="coverNumLo">1733 / 2603</td>
- <td class="coverPerMed">84.8&nbsp;%</td>
- <td class="coverNumMed">145 / 171</td>
+ <td class="coverPerLo">66.3&nbsp;%</td>
+ <td class="coverNumLo">1697 / 2559</td>
+ <td class="coverPerMed">84.9&nbsp;%</td>
+ <td class="coverNumMed">141 / 166</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -672,10 +684,10 @@
<tr>
<td class="coverFile"><a href="libstb/crypto/pkcs7/index.html">libstb/crypto/pkcs7</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=73 height=10 alt="73.4%"><img src="snow.png" width=27 height=10 alt="73.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=75 height=10 alt="75.3%"><img src="snow.png" width=25 height=10 alt="75.3%"></td></tr></table>
</td>
- <td class="coverPerLo">73.4&nbsp;%</td>
- <td class="coverNumLo">163 / 222</td>
+ <td class="coverPerMed">75.3&nbsp;%</td>
+ <td class="coverNumMed">168 / 223</td>
<td class="coverPerHi">92.9&nbsp;%</td>
<td class="coverNumHi">13 / 14</td>
<td class="coverPerHi">-</td>
@@ -696,10 +708,10 @@
<tr>
<td class="coverFile"><a href="libstb/secvar/backend/index.html">libstb/secvar/backend</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=82 height=10 alt="82.0%"><img src="snow.png" width=18 height=10 alt="82.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="amber.png" width=85 height=10 alt="84.7%"><img src="snow.png" width=15 height=10 alt="84.7%"></td></tr></table>
</td>
- <td class="coverPerMed">82.0&nbsp;%</td>
- <td class="coverNumMed">423 / 516</td>
+ <td class="coverPerMed">84.7&nbsp;%</td>
+ <td class="coverNumMed">455 / 537</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">24 / 24</td>
<td class="coverPerHi">-</td>
@@ -708,24 +720,24 @@
<tr>
<td class="coverFile"><a href="libstb/secvar/storage/index.html">libstb/secvar/storage</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=47 height=10 alt="47.2%"><img src="snow.png" width=53 height=10 alt="47.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=45 height=10 alt="44.7%"><img src="snow.png" width=55 height=10 alt="44.7%"></td></tr></table>
</td>
- <td class="coverPerLo">47.2&nbsp;%</td>
- <td class="coverNumLo">201 / 426</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">18 / 27</td>
+ <td class="coverPerLo">44.7&nbsp;%</td>
+ <td class="coverNumLo">196 / 438</td>
+ <td class="coverPerLo">64.3&nbsp;%</td>
+ <td class="coverNumLo">18 / 28</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libstb/secvar/test/index.html">libstb/secvar/test</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="99.5%"><img src="snow.png" width=1 height=10 alt="99.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="emerald.png" width=99 height=10 alt="99.6%"><img src="snow.png" width=1 height=10 alt="99.6%"></td></tr></table>
</td>
- <td class="coverPerHi">99.5&nbsp;%</td>
- <td class="coverNumHi">580 / 583</td>
+ <td class="coverPerHi">99.6&nbsp;%</td>
+ <td class="coverNumHi">687 / 690</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">22 / 22</td>
+ <td class="coverNumHi">24 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/libc/ctype/index-sort-b.html b/coverage-report/libc/ctype/index-sort-b.html
index 09fcef6..628474c 100644
--- a/coverage-report/libc/ctype/index-sort-b.html
+++ b/coverage-report/libc/ctype/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
@@ -82,7 +82,7 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="isxdigit.c.gcov.html">isxdigit.c</a></td>
+ <td class="coverFile"><a href="toupper.c.gcov.html">toupper.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -94,36 +94,36 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="toupper.c.gcov.html">toupper.c</a></td>
+ <td class="coverFile"><a href="tolower.c.gcov.html">tolower.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">4 / 4</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="isprint.c.gcov.html">isprint.c</a></td>
+ <td class="coverFile"><a href="isspace.c.gcov.html">isspace.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverNumHi">6 / 6</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="isspace.c.gcov.html">isspace.c</a></td>
+ <td class="coverFile"><a href="isxdigit.c.gcov.html">isxdigit.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
@@ -142,7 +142,7 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="tolower.c.gcov.html">tolower.c</a></td>
+ <td class="coverFile"><a href="isprint.c.gcov.html">isprint.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
diff --git a/coverage-report/libc/ctype/index-sort-f.html b/coverage-report/libc/ctype/index-sort-f.html
index 1c5aa84..cd48c90 100644
--- a/coverage-report/libc/ctype/index-sort-f.html
+++ b/coverage-report/libc/ctype/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
@@ -82,7 +82,7 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="isxdigit.c.gcov.html">isxdigit.c</a></td>
+ <td class="coverFile"><a href="toupper.c.gcov.html">toupper.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -94,36 +94,36 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="toupper.c.gcov.html">toupper.c</a></td>
+ <td class="coverFile"><a href="tolower.c.gcov.html">tolower.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">4 / 4</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="isprint.c.gcov.html">isprint.c</a></td>
+ <td class="coverFile"><a href="isspace.c.gcov.html">isspace.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverNumHi">6 / 6</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="isspace.c.gcov.html">isspace.c</a></td>
+ <td class="coverFile"><a href="isxdigit.c.gcov.html">isxdigit.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
@@ -142,7 +142,7 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="tolower.c.gcov.html">tolower.c</a></td>
+ <td class="coverFile"><a href="isprint.c.gcov.html">isprint.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
diff --git a/coverage-report/libc/ctype/index-sort-l.html b/coverage-report/libc/ctype/index-sort-l.html
index 1f0cab0..39f7ead 100644
--- a/coverage-report/libc/ctype/index-sort-l.html
+++ b/coverage-report/libc/ctype/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
@@ -82,7 +82,7 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="isprint.c.gcov.html">isprint.c</a></td>
+ <td class="coverFile"><a href="tolower.c.gcov.html">tolower.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -94,7 +94,7 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="tolower.c.gcov.html">tolower.c</a></td>
+ <td class="coverFile"><a href="isprint.c.gcov.html">isprint.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -106,7 +106,7 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="isxdigit.c.gcov.html">isxdigit.c</a></td>
+ <td class="coverFile"><a href="toupper.c.gcov.html">toupper.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -118,7 +118,7 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="toupper.c.gcov.html">toupper.c</a></td>
+ <td class="coverFile"><a href="isxdigit.c.gcov.html">isxdigit.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
diff --git a/coverage-report/libc/ctype/index.html b/coverage-report/libc/ctype/index.html
index 205491e..3f4d28f 100644
--- a/coverage-report/libc/ctype/index.html
+++ b/coverage-report/libc/ctype/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/libc/ctype/isdigit.c.func-sort-c.html b/coverage-report/libc/ctype/isdigit.c.func-sort-c.html
index 1eaa26a..745e94c 100644
--- a/coverage-report/libc/ctype/isdigit.c.func-sort-c.html
+++ b/coverage-report/libc/ctype/isdigit.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/ctype/isdigit.c.func.html b/coverage-report/libc/ctype/isdigit.c.func.html
index 172f695..8fb994c 100644
--- a/coverage-report/libc/ctype/isdigit.c.func.html
+++ b/coverage-report/libc/ctype/isdigit.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/ctype/isdigit.c.gcov.html b/coverage-report/libc/ctype/isdigit.c.gcov.html
index b7e40bd..4a97ebf 100644
--- a/coverage-report/libc/ctype/isdigit.c.gcov.html
+++ b/coverage-report/libc/ctype/isdigit.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/ctype/isprint.c.func-sort-c.html b/coverage-report/libc/ctype/isprint.c.func-sort-c.html
index 9c79409..07d88b3 100644
--- a/coverage-report/libc/ctype/isprint.c.func-sort-c.html
+++ b/coverage-report/libc/ctype/isprint.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/ctype/isprint.c.func.html b/coverage-report/libc/ctype/isprint.c.func.html
index 752af35..f599d9d 100644
--- a/coverage-report/libc/ctype/isprint.c.func.html
+++ b/coverage-report/libc/ctype/isprint.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/ctype/isprint.c.gcov.html b/coverage-report/libc/ctype/isprint.c.gcov.html
index c0e24d8..5fb9b55 100644
--- a/coverage-report/libc/ctype/isprint.c.gcov.html
+++ b/coverage-report/libc/ctype/isprint.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/ctype/isspace.c.func-sort-c.html b/coverage-report/libc/ctype/isspace.c.func-sort-c.html
index 93b71df..a765fe1 100644
--- a/coverage-report/libc/ctype/isspace.c.func-sort-c.html
+++ b/coverage-report/libc/ctype/isspace.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/ctype/isspace.c.func.html b/coverage-report/libc/ctype/isspace.c.func.html
index 62e57b9..3ab39f3 100644
--- a/coverage-report/libc/ctype/isspace.c.func.html
+++ b/coverage-report/libc/ctype/isspace.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/ctype/isspace.c.gcov.html b/coverage-report/libc/ctype/isspace.c.gcov.html
index 2556424..010ed42 100644
--- a/coverage-report/libc/ctype/isspace.c.gcov.html
+++ b/coverage-report/libc/ctype/isspace.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/ctype/isxdigit.c.func-sort-c.html b/coverage-report/libc/ctype/isxdigit.c.func-sort-c.html
index f0fae00..29cc717 100644
--- a/coverage-report/libc/ctype/isxdigit.c.func-sort-c.html
+++ b/coverage-report/libc/ctype/isxdigit.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/ctype/isxdigit.c.func.html b/coverage-report/libc/ctype/isxdigit.c.func.html
index 0bcfa92..1be08f5 100644
--- a/coverage-report/libc/ctype/isxdigit.c.func.html
+++ b/coverage-report/libc/ctype/isxdigit.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/ctype/isxdigit.c.gcov.html b/coverage-report/libc/ctype/isxdigit.c.gcov.html
index 61a1218..7dc985b 100644
--- a/coverage-report/libc/ctype/isxdigit.c.gcov.html
+++ b/coverage-report/libc/ctype/isxdigit.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/ctype/tolower.c.func-sort-c.html b/coverage-report/libc/ctype/tolower.c.func-sort-c.html
index 19f74ee..4d559dd 100644
--- a/coverage-report/libc/ctype/tolower.c.func-sort-c.html
+++ b/coverage-report/libc/ctype/tolower.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/ctype/tolower.c.func.html b/coverage-report/libc/ctype/tolower.c.func.html
index 485fd52..4fffca7 100644
--- a/coverage-report/libc/ctype/tolower.c.func.html
+++ b/coverage-report/libc/ctype/tolower.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/ctype/tolower.c.gcov.html b/coverage-report/libc/ctype/tolower.c.gcov.html
index 796b5a2..9e08f18 100644
--- a/coverage-report/libc/ctype/tolower.c.gcov.html
+++ b/coverage-report/libc/ctype/tolower.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/ctype/toupper.c.func-sort-c.html b/coverage-report/libc/ctype/toupper.c.func-sort-c.html
index a4834de..f690e3a 100644
--- a/coverage-report/libc/ctype/toupper.c.func-sort-c.html
+++ b/coverage-report/libc/ctype/toupper.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/ctype/toupper.c.func.html b/coverage-report/libc/ctype/toupper.c.func.html
index f2b32a2..7f5107f 100644
--- a/coverage-report/libc/ctype/toupper.c.func.html
+++ b/coverage-report/libc/ctype/toupper.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/ctype/toupper.c.gcov.html b/coverage-report/libc/ctype/toupper.c.gcov.html
index 789093b..2ee03e7 100644
--- a/coverage-report/libc/ctype/toupper.c.gcov.html
+++ b/coverage-report/libc/ctype/toupper.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/index-sort-b.html b/coverage-report/libc/index-sort-b.html
index cd08fce..54d6655 100644
--- a/coverage-report/libc/index-sort-b.html
+++ b/coverage-report/libc/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
diff --git a/coverage-report/libc/index-sort-f.html b/coverage-report/libc/index-sort-f.html
index 6a5941e..4bc9f3b 100644
--- a/coverage-report/libc/index-sort-f.html
+++ b/coverage-report/libc/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
diff --git a/coverage-report/libc/index-sort-l.html b/coverage-report/libc/index-sort-l.html
index 618fd03..a7c3d3e 100644
--- a/coverage-report/libc/index-sort-l.html
+++ b/coverage-report/libc/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
diff --git a/coverage-report/libc/index.html b/coverage-report/libc/index.html
index f968d60..fb0eb1b 100644
--- a/coverage-report/libc/index.html
+++ b/coverage-report/libc/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
diff --git a/coverage-report/libc/stdio/index-sort-b.html b/coverage-report/libc/stdio/index-sort-b.html
index 93c50ff..cb737ce 100644
--- a/coverage-report/libc/stdio/index-sort-b.html
+++ b/coverage-report/libc/stdio/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
diff --git a/coverage-report/libc/stdio/index-sort-f.html b/coverage-report/libc/stdio/index-sort-f.html
index fadd4c9..26c405f 100644
--- a/coverage-report/libc/stdio/index-sort-f.html
+++ b/coverage-report/libc/stdio/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
diff --git a/coverage-report/libc/stdio/index-sort-l.html b/coverage-report/libc/stdio/index-sort-l.html
index 6bfa596..e6763f7 100644
--- a/coverage-report/libc/stdio/index-sort-l.html
+++ b/coverage-report/libc/stdio/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
diff --git a/coverage-report/libc/stdio/index.html b/coverage-report/libc/stdio/index.html
index fa123a0..c84ba5b 100644
--- a/coverage-report/libc/stdio/index.html
+++ b/coverage-report/libc/stdio/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
diff --git a/coverage-report/libc/stdio/snprintf.c.func-sort-c.html b/coverage-report/libc/stdio/snprintf.c.func-sort-c.html
index 39067a5..bec1e97 100644
--- a/coverage-report/libc/stdio/snprintf.c.func-sort-c.html
+++ b/coverage-report/libc/stdio/snprintf.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/stdio/snprintf.c.func.html b/coverage-report/libc/stdio/snprintf.c.func.html
index e457496..c18f89b 100644
--- a/coverage-report/libc/stdio/snprintf.c.func.html
+++ b/coverage-report/libc/stdio/snprintf.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/stdio/snprintf.c.gcov.html b/coverage-report/libc/stdio/snprintf.c.gcov.html
index 0ce545d..df0647d 100644
--- a/coverage-report/libc/stdio/snprintf.c.gcov.html
+++ b/coverage-report/libc/stdio/snprintf.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/stdio/vsnprintf.c.func-sort-c.html b/coverage-report/libc/stdio/vsnprintf.c.func-sort-c.html
index 9a34ad7..1406a80 100644
--- a/coverage-report/libc/stdio/vsnprintf.c.func-sort-c.html
+++ b/coverage-report/libc/stdio/vsnprintf.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
diff --git a/coverage-report/libc/stdio/vsnprintf.c.func.html b/coverage-report/libc/stdio/vsnprintf.c.func.html
index f9e2f3b..a156f3f 100644
--- a/coverage-report/libc/stdio/vsnprintf.c.func.html
+++ b/coverage-report/libc/stdio/vsnprintf.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
diff --git a/coverage-report/libc/stdio/vsnprintf.c.gcov.html b/coverage-report/libc/stdio/vsnprintf.c.gcov.html
index c4972cf..1af9b25 100644
--- a/coverage-report/libc/stdio/vsnprintf.c.gcov.html
+++ b/coverage-report/libc/stdio/vsnprintf.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@@ -131,9 +131,9 @@
<a name="60"><span class="lineNum"> 60 </span> : : {</a>
<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 3932 : int i = 0;</span></a>
<a name="62"><span class="lineNum"> 62 </span> : : </a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 13144 : while (value &gt; 0) {</span></a>
-<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 9212 : value /= base;</span></a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 9212 : i++;</span></a>
+<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 13244 : while (value &gt; 0) {</span></a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 9312 : value /= base;</span></a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 9312 : i++;</span></a>
<a name="66"><span class="lineNum"> 66 </span> : : }</a>
<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 3932 : if (i == 0)</span></a>
<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 64 : i = 1;</span></a>
@@ -158,13 +158,13 @@
<a name="87"><span class="lineNum"> 87 </span> :<span class="lineCov"> 75 : return 0;</span></a>
<a name="88"><span class="lineNum"> 88 </span> : : </a>
<a name="89"><span class="lineNum"> 89 </span> : : do {</a>
-<a name="90"><span class="lineNum"> 90 </span> :<span class="lineCov"> 3068 : c = zeichen[value % base];</span></a>
-<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 3068 : if (upper)</span></a>
+<a name="90"><span class="lineNum"> 90 </span> :<span class="lineCov"> 3118 : c = zeichen[value % base];</span></a>
+<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 3118 : if (upper)</span></a>
<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 360 : c = toupper(c);</span></a>
<a name="93"><span class="lineNum"> 93 </span> : : </a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 3068 : (*buffer)[--i] = c;</span></a>
-<a name="95"><span class="lineNum"> 95 </span> :<span class="lineCov"> 3068 : value /= base;</span></a>
-<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 3068 : } while(value);</span></a>
+<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 3118 : (*buffer)[--i] = c;</span></a>
+<a name="95"><span class="lineNum"> 95 </span> :<span class="lineCov"> 3118 : value /= base;</span></a>
+<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 3118 : } while(value);</span></a>
<a name="97"><span class="lineNum"> 97 </span> : : </a>
<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 616 : *buffer += len;</span></a>
<a name="99"><span class="lineNum"> 99 </span> : : </a>
diff --git a/coverage-report/libc/stdlib/atoi.c.func-sort-c.html b/coverage-report/libc/stdlib/atoi.c.func-sort-c.html
index d133090..189d16a 100644
--- a/coverage-report/libc/stdlib/atoi.c.func-sort-c.html
+++ b/coverage-report/libc/stdlib/atoi.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/stdlib/atoi.c.func.html b/coverage-report/libc/stdlib/atoi.c.func.html
index 5caa602..5796974 100644
--- a/coverage-report/libc/stdlib/atoi.c.func.html
+++ b/coverage-report/libc/stdlib/atoi.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/stdlib/atoi.c.gcov.html b/coverage-report/libc/stdlib/atoi.c.gcov.html
index 6825579..db3ba87 100644
--- a/coverage-report/libc/stdlib/atoi.c.gcov.html
+++ b/coverage-report/libc/stdlib/atoi.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/stdlib/atol.c.func-sort-c.html b/coverage-report/libc/stdlib/atol.c.func-sort-c.html
index f450ac0..3d5e5ee 100644
--- a/coverage-report/libc/stdlib/atol.c.func-sort-c.html
+++ b/coverage-report/libc/stdlib/atol.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/stdlib/atol.c.func.html b/coverage-report/libc/stdlib/atol.c.func.html
index d88636a..a25b0af 100644
--- a/coverage-report/libc/stdlib/atol.c.func.html
+++ b/coverage-report/libc/stdlib/atol.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/stdlib/atol.c.gcov.html b/coverage-report/libc/stdlib/atol.c.gcov.html
index 345a921..6f6e325 100644
--- a/coverage-report/libc/stdlib/atol.c.gcov.html
+++ b/coverage-report/libc/stdlib/atol.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/stdlib/index-sort-b.html b/coverage-report/libc/stdlib/index-sort-b.html
index 030b9f2..2dd94d5 100644
--- a/coverage-report/libc/stdlib/index-sort-b.html
+++ b/coverage-report/libc/stdlib/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@@ -94,31 +94,31 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strtoul.c.gcov.html">strtoul.c</a></td>
+ <td class="coverFile"><a href="strtol.c.gcov.html">strtol.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=97 height=10 alt="97.4%"><img src="../../snow.png" width=3 height=10 alt="97.4%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">32 / 32</td>
+ <td class="coverPerHi">97.4&nbsp;%</td>
+ <td class="coverNumHi">37 / 38</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="atoi.c.gcov.html">atoi.c</a></td>
+ <td class="coverFile"><a href="strtoul.c.gcov.html">strtoul.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverNumHi">32 / 32</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="atol.c.gcov.html">atol.c</a></td>
+ <td class="coverFile"><a href="atoi.c.gcov.html">atoi.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -130,12 +130,12 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strtol.c.gcov.html">strtol.c</a></td>
+ <td class="coverFile"><a href="atol.c.gcov.html">atol.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=97 height=10 alt="97.4%"><img src="../../snow.png" width=3 height=10 alt="97.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerHi">97.4&nbsp;%</td>
- <td class="coverNumHi">37 / 38</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/libc/stdlib/index-sort-f.html b/coverage-report/libc/stdlib/index-sort-f.html
index 7d569b2..b42b164 100644
--- a/coverage-report/libc/stdlib/index-sort-f.html
+++ b/coverage-report/libc/stdlib/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@@ -94,31 +94,31 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strtoul.c.gcov.html">strtoul.c</a></td>
+ <td class="coverFile"><a href="strtol.c.gcov.html">strtol.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=97 height=10 alt="97.4%"><img src="../../snow.png" width=3 height=10 alt="97.4%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">32 / 32</td>
+ <td class="coverPerHi">97.4&nbsp;%</td>
+ <td class="coverNumHi">37 / 38</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="atoi.c.gcov.html">atoi.c</a></td>
+ <td class="coverFile"><a href="strtoul.c.gcov.html">strtoul.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverNumHi">32 / 32</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="atol.c.gcov.html">atol.c</a></td>
+ <td class="coverFile"><a href="atoi.c.gcov.html">atoi.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -130,12 +130,12 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strtol.c.gcov.html">strtol.c</a></td>
+ <td class="coverFile"><a href="atol.c.gcov.html">atol.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=97 height=10 alt="97.4%"><img src="../../snow.png" width=3 height=10 alt="97.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerHi">97.4&nbsp;%</td>
- <td class="coverNumHi">37 / 38</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/libc/stdlib/index-sort-l.html b/coverage-report/libc/stdlib/index-sort-l.html
index 9950775..9ec89c2 100644
--- a/coverage-report/libc/stdlib/index-sort-l.html
+++ b/coverage-report/libc/stdlib/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/libc/stdlib/index.html b/coverage-report/libc/stdlib/index.html
index 3190119..eca5e04 100644
--- a/coverage-report/libc/stdlib/index.html
+++ b/coverage-report/libc/stdlib/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/libc/stdlib/rand.c.func-sort-c.html b/coverage-report/libc/stdlib/rand.c.func-sort-c.html
index a2fd7d0..fc823ca 100644
--- a/coverage-report/libc/stdlib/rand.c.func-sort-c.html
+++ b/coverage-report/libc/stdlib/rand.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/libc/stdlib/rand.c.func.html b/coverage-report/libc/stdlib/rand.c.func.html
index 468d6d2..8aa9e9c 100644
--- a/coverage-report/libc/stdlib/rand.c.func.html
+++ b/coverage-report/libc/stdlib/rand.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/libc/stdlib/rand.c.gcov.html b/coverage-report/libc/stdlib/rand.c.gcov.html
index 8c3caeb..4f3806b 100644
--- a/coverage-report/libc/stdlib/rand.c.gcov.html
+++ b/coverage-report/libc/stdlib/rand.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/libc/stdlib/strtol.c.func-sort-c.html b/coverage-report/libc/stdlib/strtol.c.func-sort-c.html
index e0fab8e..6d5e667 100644
--- a/coverage-report/libc/stdlib/strtol.c.func-sort-c.html
+++ b/coverage-report/libc/stdlib/strtol.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/stdlib/strtol.c.func.html b/coverage-report/libc/stdlib/strtol.c.func.html
index 33ce317..d8141b1 100644
--- a/coverage-report/libc/stdlib/strtol.c.func.html
+++ b/coverage-report/libc/stdlib/strtol.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/stdlib/strtol.c.gcov.html b/coverage-report/libc/stdlib/strtol.c.gcov.html
index 22e3aac..a45187c 100644
--- a/coverage-report/libc/stdlib/strtol.c.gcov.html
+++ b/coverage-report/libc/stdlib/strtol.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/stdlib/strtoul.c.func-sort-c.html b/coverage-report/libc/stdlib/strtoul.c.func-sort-c.html
index 40f6936..fe2d51c 100644
--- a/coverage-report/libc/stdlib/strtoul.c.func-sort-c.html
+++ b/coverage-report/libc/stdlib/strtoul.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/stdlib/strtoul.c.func.html b/coverage-report/libc/stdlib/strtoul.c.func.html
index 60dc796..505dc1d 100644
--- a/coverage-report/libc/stdlib/strtoul.c.func.html
+++ b/coverage-report/libc/stdlib/strtoul.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/stdlib/strtoul.c.gcov.html b/coverage-report/libc/stdlib/strtoul.c.gcov.html
index c292246..789cf50 100644
--- a/coverage-report/libc/stdlib/strtoul.c.gcov.html
+++ b/coverage-report/libc/stdlib/strtoul.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/index-sort-b.html b/coverage-report/libc/string/index-sort-b.html
index 1d30af0..22ef6cf 100644
--- a/coverage-report/libc/string/index-sort-b.html
+++ b/coverage-report/libc/string/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">14</td>
@@ -82,79 +82,67 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="memcpy.c.gcov.html">memcpy.c</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
- </td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">13 / 13</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
- <td class="coverFile"><a href="strncmp.c.gcov.html">strncmp.c</a></td>
+ <td class="coverFile"><a href="strstr.c.gcov.html">strstr.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 9</td>
+ <td class="coverNumLo">0 / 11</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumLo">0 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strncpy.c.gcov.html">strncpy.c</a></td>
+ <td class="coverFile"><a href="strlen.c.gcov.html">strlen.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=46 height=10 alt="46.2%"><img src="../../snow.png" width=54 height=10 alt="46.2%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerLo">46.2&nbsp;%</td>
+ <td class="coverNumLo">6 / 13</td>
+ <td class="coverPerLo">50.0&nbsp;%</td>
+ <td class="coverNumLo">1 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strdup.c.gcov.html">strdup.c</a></td>
+ <td class="coverFile"><a href="strncasecmp.c.gcov.html">strncasecmp.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">5 / 5</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
+ <td class="coverNumHi">9 / 9</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strstr.c.gcov.html">strstr.c</a></td>
+ <td class="coverFile"><a href="strncmp.c.gcov.html">strncmp.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 11</td>
+ <td class="coverNumLo">0 / 9</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumLo">0 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strncasecmp.c.gcov.html">strncasecmp.c</a></td>
+ <td class="coverFile"><a href="strchr.c.gcov.html">strchr.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
+ <td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strcasecmp.c.gcov.html">strcasecmp.c</a></td>
+ <td class="coverFile"><a href="strcmp.c.gcov.html">strcmp.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -166,31 +154,43 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strcpy.c.gcov.html">strcpy.c</a></td>
+ <td class="coverFile"><a href="memcpy.c.gcov.html">memcpy.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">5 / 5</td>
+ <td class="coverNumHi">13 / 13</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strrchr.c.gcov.html">strrchr.c</a></td>
+ <td class="coverFile"><a href="strcat.c.gcov.html">strcat.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">8 / 8</td>
+ <td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="memmove.c.gcov.html">memmove.c</a></td>
+ <td class="coverFile"><a href="strdup.c.gcov.html">strdup.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">5 / 5</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="memchr.c.gcov.html">memchr.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -202,55 +202,55 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strcat.c.gcov.html">strcat.c</a></td>
+ <td class="coverFile"><a href="memcmp.c.gcov.html">memcmp.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">4 / 4</td>
+ <td class="coverNumHi">9 / 9</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strchr.c.gcov.html">strchr.c</a></td>
+ <td class="coverFile"><a href="strncpy.c.gcov.html">strncpy.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">7 / 7</td>
+ <td class="coverNumHi">9 / 9</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="memcmp.c.gcov.html">memcmp.c</a></td>
+ <td class="coverFile"><a href="strcpy.c.gcov.html">strcpy.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
+ <td class="coverNumHi">5 / 5</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="memset.c.gcov.html">memset.c</a></td>
+ <td class="coverFile"><a href="memmove.c.gcov.html">memmove.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">15 / 15</td>
+ <td class="coverNumHi">8 / 8</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="memchr.c.gcov.html">memchr.c</a></td>
+ <td class="coverFile"><a href="strrchr.c.gcov.html">strrchr.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -262,19 +262,19 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strlen.c.gcov.html">strlen.c</a></td>
+ <td class="coverFile"><a href="memset.c.gcov.html">memset.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=46 height=10 alt="46.2%"><img src="../../snow.png" width=54 height=10 alt="46.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerLo">46.2&nbsp;%</td>
- <td class="coverNumLo">6 / 13</td>
- <td class="coverPerLo">50.0&nbsp;%</td>
- <td class="coverNumLo">1 / 2</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">15 / 15</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strcmp.c.gcov.html">strcmp.c</a></td>
+ <td class="coverFile"><a href="strcasecmp.c.gcov.html">strcasecmp.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
diff --git a/coverage-report/libc/string/index-sort-f.html b/coverage-report/libc/string/index-sort-f.html
index 5b34848..10cca37 100644
--- a/coverage-report/libc/string/index-sort-f.html
+++ b/coverage-report/libc/string/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">14</td>
@@ -82,24 +82,24 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="strncmp.c.gcov.html">strncmp.c</a></td>
+ <td class="coverFile"><a href="strstr.c.gcov.html">strstr.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 9</td>
+ <td class="coverNumLo">0 / 11</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumLo">0 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strstr.c.gcov.html">strstr.c</a></td>
+ <td class="coverFile"><a href="strncmp.c.gcov.html">strncmp.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
<td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 11</td>
+ <td class="coverNumLo">0 / 9</td>
<td class="coverPerLo">0.0&nbsp;%</td>
<td class="coverNumLo">0 / 1</td>
<td class="coverPerHi">-</td>
@@ -142,67 +142,67 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="memcpy.c.gcov.html">memcpy.c</a></td>
+ <td class="coverFile"><a href="strncasecmp.c.gcov.html">strncasecmp.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">13 / 13</td>
+ <td class="coverNumHi">9 / 9</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strncpy.c.gcov.html">strncpy.c</a></td>
+ <td class="coverFile"><a href="strchr.c.gcov.html">strchr.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
+ <td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strncasecmp.c.gcov.html">strncasecmp.c</a></td>
+ <td class="coverFile"><a href="strcmp.c.gcov.html">strcmp.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
+ <td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strcasecmp.c.gcov.html">strcasecmp.c</a></td>
+ <td class="coverFile"><a href="memcpy.c.gcov.html">memcpy.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">7 / 7</td>
+ <td class="coverNumHi">13 / 13</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strcpy.c.gcov.html">strcpy.c</a></td>
+ <td class="coverFile"><a href="strcat.c.gcov.html">strcat.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">5 / 5</td>
+ <td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strrchr.c.gcov.html">strrchr.c</a></td>
+ <td class="coverFile"><a href="memchr.c.gcov.html">memchr.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -214,79 +214,79 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="memmove.c.gcov.html">memmove.c</a></td>
+ <td class="coverFile"><a href="memcmp.c.gcov.html">memcmp.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">8 / 8</td>
+ <td class="coverNumHi">9 / 9</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strcat.c.gcov.html">strcat.c</a></td>
+ <td class="coverFile"><a href="strncpy.c.gcov.html">strncpy.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">4 / 4</td>
+ <td class="coverNumHi">9 / 9</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strchr.c.gcov.html">strchr.c</a></td>
+ <td class="coverFile"><a href="strcpy.c.gcov.html">strcpy.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">7 / 7</td>
+ <td class="coverNumHi">5 / 5</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="memcmp.c.gcov.html">memcmp.c</a></td>
+ <td class="coverFile"><a href="memmove.c.gcov.html">memmove.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">9 / 9</td>
+ <td class="coverNumHi">8 / 8</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="memset.c.gcov.html">memset.c</a></td>
+ <td class="coverFile"><a href="strrchr.c.gcov.html">strrchr.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">15 / 15</td>
+ <td class="coverNumHi">8 / 8</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="memchr.c.gcov.html">memchr.c</a></td>
+ <td class="coverFile"><a href="memset.c.gcov.html">memset.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">8 / 8</td>
+ <td class="coverNumHi">15 / 15</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strcmp.c.gcov.html">strcmp.c</a></td>
+ <td class="coverFile"><a href="strcasecmp.c.gcov.html">strcasecmp.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
diff --git a/coverage-report/libc/string/index-sort-l.html b/coverage-report/libc/string/index-sort-l.html
index afdc700..0c6191a 100644
--- a/coverage-report/libc/string/index-sort-l.html
+++ b/coverage-report/libc/string/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">14</td>
@@ -166,7 +166,7 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strcasecmp.c.gcov.html">strcasecmp.c</a></td>
+ <td class="coverFile"><a href="strchr.c.gcov.html">strchr.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -178,7 +178,7 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strchr.c.gcov.html">strchr.c</a></td>
+ <td class="coverFile"><a href="strcmp.c.gcov.html">strcmp.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -190,7 +190,7 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strcmp.c.gcov.html">strcmp.c</a></td>
+ <td class="coverFile"><a href="strcasecmp.c.gcov.html">strcasecmp.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -202,7 +202,7 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strrchr.c.gcov.html">strrchr.c</a></td>
+ <td class="coverFile"><a href="memchr.c.gcov.html">memchr.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -226,7 +226,7 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="memchr.c.gcov.html">memchr.c</a></td>
+ <td class="coverFile"><a href="strrchr.c.gcov.html">strrchr.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -238,7 +238,7 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strncpy.c.gcov.html">strncpy.c</a></td>
+ <td class="coverFile"><a href="strncasecmp.c.gcov.html">strncasecmp.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -250,7 +250,7 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="strncasecmp.c.gcov.html">strncasecmp.c</a></td>
+ <td class="coverFile"><a href="memcmp.c.gcov.html">memcmp.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@@ -262,7 +262,7 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="memcmp.c.gcov.html">memcmp.c</a></td>
+ <td class="coverFile"><a href="strncpy.c.gcov.html">strncpy.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
diff --git a/coverage-report/libc/string/index.html b/coverage-report/libc/string/index.html
index 93c4c9f..3e4acd4 100644
--- a/coverage-report/libc/string/index.html
+++ b/coverage-report/libc/string/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">14</td>
diff --git a/coverage-report/libc/string/memchr.c.func-sort-c.html b/coverage-report/libc/string/memchr.c.func-sort-c.html
index d0a3791..c3c7a06 100644
--- a/coverage-report/libc/string/memchr.c.func-sort-c.html
+++ b/coverage-report/libc/string/memchr.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/memchr.c.func.html b/coverage-report/libc/string/memchr.c.func.html
index 8e2924a..da35bdf 100644
--- a/coverage-report/libc/string/memchr.c.func.html
+++ b/coverage-report/libc/string/memchr.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/memchr.c.gcov.html b/coverage-report/libc/string/memchr.c.gcov.html
index 152839d..691c10d 100644
--- a/coverage-report/libc/string/memchr.c.gcov.html
+++ b/coverage-report/libc/string/memchr.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/memcmp.c.func-sort-c.html b/coverage-report/libc/string/memcmp.c.func-sort-c.html
index 0c36cd9..69c49f6 100644
--- a/coverage-report/libc/string/memcmp.c.func-sort-c.html
+++ b/coverage-report/libc/string/memcmp.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/memcmp.c.func.html b/coverage-report/libc/string/memcmp.c.func.html
index 75ab9c0..91b0ed6 100644
--- a/coverage-report/libc/string/memcmp.c.func.html
+++ b/coverage-report/libc/string/memcmp.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/memcmp.c.gcov.html b/coverage-report/libc/string/memcmp.c.gcov.html
index 593383c..fcba8b1 100644
--- a/coverage-report/libc/string/memcmp.c.gcov.html
+++ b/coverage-report/libc/string/memcmp.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/memcpy.c.func-sort-c.html b/coverage-report/libc/string/memcpy.c.func-sort-c.html
index 2d6ec2b..9e00b3a 100644
--- a/coverage-report/libc/string/memcpy.c.func-sort-c.html
+++ b/coverage-report/libc/string/memcpy.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/memcpy.c.func.html b/coverage-report/libc/string/memcpy.c.func.html
index 9f0c647..45ac677 100644
--- a/coverage-report/libc/string/memcpy.c.func.html
+++ b/coverage-report/libc/string/memcpy.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/memcpy.c.gcov.html b/coverage-report/libc/string/memcpy.c.gcov.html
index 2045d07..e6e710d 100644
--- a/coverage-report/libc/string/memcpy.c.gcov.html
+++ b/coverage-report/libc/string/memcpy.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/memmove.c.func-sort-c.html b/coverage-report/libc/string/memmove.c.func-sort-c.html
index 6ec52d1..06c1723 100644
--- a/coverage-report/libc/string/memmove.c.func-sort-c.html
+++ b/coverage-report/libc/string/memmove.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/memmove.c.func.html b/coverage-report/libc/string/memmove.c.func.html
index 7f4698c..7f40844 100644
--- a/coverage-report/libc/string/memmove.c.func.html
+++ b/coverage-report/libc/string/memmove.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/memmove.c.gcov.html b/coverage-report/libc/string/memmove.c.gcov.html
index 4554880..4e0539d 100644
--- a/coverage-report/libc/string/memmove.c.gcov.html
+++ b/coverage-report/libc/string/memmove.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/memset.c.func-sort-c.html b/coverage-report/libc/string/memset.c.func-sort-c.html
index 9b0131c..e228971 100644
--- a/coverage-report/libc/string/memset.c.func-sort-c.html
+++ b/coverage-report/libc/string/memset.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/memset.c.func.html b/coverage-report/libc/string/memset.c.func.html
index 54ee051..f8ec461 100644
--- a/coverage-report/libc/string/memset.c.func.html
+++ b/coverage-report/libc/string/memset.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/memset.c.gcov.html b/coverage-report/libc/string/memset.c.gcov.html
index 6219a59..846cd49 100644
--- a/coverage-report/libc/string/memset.c.gcov.html
+++ b/coverage-report/libc/string/memset.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strcasecmp.c.func-sort-c.html b/coverage-report/libc/string/strcasecmp.c.func-sort-c.html
index 9215591..6d5735c 100644
--- a/coverage-report/libc/string/strcasecmp.c.func-sort-c.html
+++ b/coverage-report/libc/string/strcasecmp.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strcasecmp.c.func.html b/coverage-report/libc/string/strcasecmp.c.func.html
index c3e1d01..8f14cdc 100644
--- a/coverage-report/libc/string/strcasecmp.c.func.html
+++ b/coverage-report/libc/string/strcasecmp.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strcasecmp.c.gcov.html b/coverage-report/libc/string/strcasecmp.c.gcov.html
index d4d8aa1..3780083 100644
--- a/coverage-report/libc/string/strcasecmp.c.gcov.html
+++ b/coverage-report/libc/string/strcasecmp.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strcat.c.func-sort-c.html b/coverage-report/libc/string/strcat.c.func-sort-c.html
index 0c50137..9c52fc8 100644
--- a/coverage-report/libc/string/strcat.c.func-sort-c.html
+++ b/coverage-report/libc/string/strcat.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strcat.c.func.html b/coverage-report/libc/string/strcat.c.func.html
index eb4733f..89fd864 100644
--- a/coverage-report/libc/string/strcat.c.func.html
+++ b/coverage-report/libc/string/strcat.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strcat.c.gcov.html b/coverage-report/libc/string/strcat.c.gcov.html
index 3a84b26..e678561 100644
--- a/coverage-report/libc/string/strcat.c.gcov.html
+++ b/coverage-report/libc/string/strcat.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strchr.c.func-sort-c.html b/coverage-report/libc/string/strchr.c.func-sort-c.html
index 3cc5017..38d6553 100644
--- a/coverage-report/libc/string/strchr.c.func-sort-c.html
+++ b/coverage-report/libc/string/strchr.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strchr.c.func.html b/coverage-report/libc/string/strchr.c.func.html
index c62b207..0e1802a 100644
--- a/coverage-report/libc/string/strchr.c.func.html
+++ b/coverage-report/libc/string/strchr.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strchr.c.gcov.html b/coverage-report/libc/string/strchr.c.gcov.html
index 838fc4f..3d80d2e 100644
--- a/coverage-report/libc/string/strchr.c.gcov.html
+++ b/coverage-report/libc/string/strchr.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strcmp.c.func-sort-c.html b/coverage-report/libc/string/strcmp.c.func-sort-c.html
index 6760941..7ec3037 100644
--- a/coverage-report/libc/string/strcmp.c.func-sort-c.html
+++ b/coverage-report/libc/string/strcmp.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strcmp.c.func.html b/coverage-report/libc/string/strcmp.c.func.html
index ac81f53..9e9baef 100644
--- a/coverage-report/libc/string/strcmp.c.func.html
+++ b/coverage-report/libc/string/strcmp.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strcmp.c.gcov.html b/coverage-report/libc/string/strcmp.c.gcov.html
index 813bbdd..811f8f9 100644
--- a/coverage-report/libc/string/strcmp.c.gcov.html
+++ b/coverage-report/libc/string/strcmp.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strcpy.c.func-sort-c.html b/coverage-report/libc/string/strcpy.c.func-sort-c.html
index d10432a..f5438a6 100644
--- a/coverage-report/libc/string/strcpy.c.func-sort-c.html
+++ b/coverage-report/libc/string/strcpy.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strcpy.c.func.html b/coverage-report/libc/string/strcpy.c.func.html
index 7bdbe5d..00c8705 100644
--- a/coverage-report/libc/string/strcpy.c.func.html
+++ b/coverage-report/libc/string/strcpy.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strcpy.c.gcov.html b/coverage-report/libc/string/strcpy.c.gcov.html
index a4127bf..6884a5c 100644
--- a/coverage-report/libc/string/strcpy.c.gcov.html
+++ b/coverage-report/libc/string/strcpy.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strdup.c.func-sort-c.html b/coverage-report/libc/string/strdup.c.func-sort-c.html
index 9ad73cd..934a435 100644
--- a/coverage-report/libc/string/strdup.c.func-sort-c.html
+++ b/coverage-report/libc/string/strdup.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/libc/string/strdup.c.func.html b/coverage-report/libc/string/strdup.c.func.html
index 1b241d0..255ba84 100644
--- a/coverage-report/libc/string/strdup.c.func.html
+++ b/coverage-report/libc/string/strdup.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/libc/string/strdup.c.gcov.html b/coverage-report/libc/string/strdup.c.gcov.html
index 90539cd..d1b9faf 100644
--- a/coverage-report/libc/string/strdup.c.gcov.html
+++ b/coverage-report/libc/string/strdup.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/libc/string/strlen.c.func-sort-c.html b/coverage-report/libc/string/strlen.c.func-sort-c.html
index 3ed413a..fa51288 100644
--- a/coverage-report/libc/string/strlen.c.func-sort-c.html
+++ b/coverage-report/libc/string/strlen.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -74,7 +74,7 @@
</tr>
<tr>
<td class="coverFn"><a href="strlen.c.gcov.html#14">strlen</a></td>
- <td class="coverFnHi">75</td>
+ <td class="coverFnHi">65</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libc/string/strlen.c.func.html b/coverage-report/libc/string/strlen.c.func.html
index 7b1a4ac..12aa4da 100644
--- a/coverage-report/libc/string/strlen.c.func.html
+++ b/coverage-report/libc/string/strlen.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -70,7 +70,7 @@
</tr>
<tr>
<td class="coverFn"><a href="strlen.c.gcov.html#14">strlen</a></td>
- <td class="coverFnHi">75</td>
+ <td class="coverFnHi">65</td>
</tr>
<tr>
<td class="coverFn"><a href="strlen.c.gcov.html#27">strnlen</a></td>
diff --git a/coverage-report/libc/string/strlen.c.gcov.html b/coverage-report/libc/string/strlen.c.gcov.html
index bc7583e..47f8f0c 100644
--- a/coverage-report/libc/string/strlen.c.gcov.html
+++ b/coverage-report/libc/string/strlen.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@@ -84,16 +84,16 @@
<a name="13"><span class="lineNum"> 13 </span> : : #include &lt;stddef.h&gt;</a>
<a name="14"><span class="lineNum"> 14 </span> : : </a>
<a name="15"><span class="lineNum"> 15 </span> : : size_t strlen(const char *s);</a>
-<a name="16"><span class="lineNum"> 16 </span> :<span class="lineCov"> 75 : size_t strlen(const char *s)</span></a>
+<a name="16"><span class="lineNum"> 16 </span> :<span class="lineCov"> 65 : size_t strlen(const char *s)</span></a>
<a name="17"><span class="lineNum"> 17 </span> : : {</a>
-<a name="18"><span class="lineNum"> 18 </span> :<span class="lineCov"> 75 : size_t len = 0;</span></a>
+<a name="18"><span class="lineNum"> 18 </span> :<span class="lineCov"> 65 : size_t len = 0;</span></a>
<a name="19"><span class="lineNum"> 19 </span> : : </a>
-<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 845 : while (*s != 0) {</span></a>
-<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 770 : len += 1;</span></a>
-<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 770 : s += 1;</span></a>
+<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 825 : while (*s != 0) {</span></a>
+<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 760 : len += 1;</span></a>
+<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 760 : s += 1;</span></a>
<a name="23"><span class="lineNum"> 23 </span> : : }</a>
<a name="24"><span class="lineNum"> 24 </span> : : </a>
-<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 75 : return len;</span></a>
+<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 65 : return len;</span></a>
<a name="26"><span class="lineNum"> 26 </span> : : }</a>
<a name="27"><span class="lineNum"> 27 </span> : : </a>
<a name="28"><span class="lineNum"> 28 </span> : : size_t strnlen(const char *s, size_t n);</a>
diff --git a/coverage-report/libc/string/strncasecmp.c.func-sort-c.html b/coverage-report/libc/string/strncasecmp.c.func-sort-c.html
index 3eadd46..40e3c1c 100644
--- a/coverage-report/libc/string/strncasecmp.c.func-sort-c.html
+++ b/coverage-report/libc/string/strncasecmp.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strncasecmp.c.func.html b/coverage-report/libc/string/strncasecmp.c.func.html
index 8904ead..745fe25 100644
--- a/coverage-report/libc/string/strncasecmp.c.func.html
+++ b/coverage-report/libc/string/strncasecmp.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strncasecmp.c.gcov.html b/coverage-report/libc/string/strncasecmp.c.gcov.html
index 79baccc..344a566 100644
--- a/coverage-report/libc/string/strncasecmp.c.gcov.html
+++ b/coverage-report/libc/string/strncasecmp.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strncmp.c.func-sort-c.html b/coverage-report/libc/string/strncmp.c.func-sort-c.html
index 43692cf..ed47029 100644
--- a/coverage-report/libc/string/strncmp.c.func-sort-c.html
+++ b/coverage-report/libc/string/strncmp.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/libc/string/strncmp.c.func.html b/coverage-report/libc/string/strncmp.c.func.html
index 9fcb59e..294ac04 100644
--- a/coverage-report/libc/string/strncmp.c.func.html
+++ b/coverage-report/libc/string/strncmp.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/libc/string/strncmp.c.gcov.html b/coverage-report/libc/string/strncmp.c.gcov.html
index 928a14e..21fe4a6 100644
--- a/coverage-report/libc/string/strncmp.c.gcov.html
+++ b/coverage-report/libc/string/strncmp.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/libc/string/strncpy.c.func-sort-c.html b/coverage-report/libc/string/strncpy.c.func-sort-c.html
index 8d16340..c71a0b2 100644
--- a/coverage-report/libc/string/strncpy.c.func-sort-c.html
+++ b/coverage-report/libc/string/strncpy.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strncpy.c.func.html b/coverage-report/libc/string/strncpy.c.func.html
index 4117a84..4ddce10 100644
--- a/coverage-report/libc/string/strncpy.c.func.html
+++ b/coverage-report/libc/string/strncpy.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strncpy.c.gcov.html b/coverage-report/libc/string/strncpy.c.gcov.html
index d6949db..cd46c28 100644
--- a/coverage-report/libc/string/strncpy.c.gcov.html
+++ b/coverage-report/libc/string/strncpy.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strrchr.c.func-sort-c.html b/coverage-report/libc/string/strrchr.c.func-sort-c.html
index eddda20..ca9beb9 100644
--- a/coverage-report/libc/string/strrchr.c.func-sort-c.html
+++ b/coverage-report/libc/string/strrchr.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strrchr.c.func.html b/coverage-report/libc/string/strrchr.c.func.html
index 935b9c7..9140c22 100644
--- a/coverage-report/libc/string/strrchr.c.func.html
+++ b/coverage-report/libc/string/strrchr.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strrchr.c.gcov.html b/coverage-report/libc/string/strrchr.c.gcov.html
index be60723..3e9ff78 100644
--- a/coverage-report/libc/string/strrchr.c.gcov.html
+++ b/coverage-report/libc/string/strrchr.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/string/strstr.c.func-sort-c.html b/coverage-report/libc/string/strstr.c.func-sort-c.html
index 1e79b05..cd8d224 100644
--- a/coverage-report/libc/string/strstr.c.func-sort-c.html
+++ b/coverage-report/libc/string/strstr.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/libc/string/strstr.c.func.html b/coverage-report/libc/string/strstr.c.func.html
index 7bf5353..4ea42e0 100644
--- a/coverage-report/libc/string/strstr.c.func.html
+++ b/coverage-report/libc/string/strstr.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/libc/string/strstr.c.gcov.html b/coverage-report/libc/string/strstr.c.gcov.html
index 1e03ec9..e0b79af 100644
--- a/coverage-report/libc/string/strstr.c.gcov.html
+++ b/coverage-report/libc/string/strstr.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/libc/string/strtok.c.func-sort-c.html b/coverage-report/libc/string/strtok.c.func-sort-c.html
index 4ecfb8d..ca5293e 100644
--- a/coverage-report/libc/string/strtok.c.func-sort-c.html
+++ b/coverage-report/libc/string/strtok.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/libc/string/strtok.c.func.html b/coverage-report/libc/string/strtok.c.func.html
index 954e18b..9cd6ff7 100644
--- a/coverage-report/libc/string/strtok.c.func.html
+++ b/coverage-report/libc/string/strtok.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/libc/string/strtok.c.gcov.html b/coverage-report/libc/string/strtok.c.gcov.html
index 50c6287..8a3609e 100644
--- a/coverage-report/libc/string/strtok.c.gcov.html
+++ b/coverage-report/libc/string/strtok.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
diff --git a/coverage-report/libc/test/index-sort-b.html b/coverage-report/libc/test/index-sort-b.html
index 5b3f50f..74dab47 100644
--- a/coverage-report/libc/test/index-sort-b.html
+++ b/coverage-report/libc/test/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">31</td>
@@ -82,18 +82,6 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="run-snprintf.c.gcov.html">run-snprintf.c</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=98 height=10 alt="98.0%"><img src="../../snow.png" width=2 height=10 alt="98.0%"></td></tr></table>
- </td>
- <td class="coverPerHi">98.0&nbsp;%</td>
- <td class="coverNumHi">146 / 149</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">10 / 10</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
<td class="coverFile"><a href="run-ctype.c.gcov.html">run-ctype.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
@@ -106,14 +94,14 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-stdlib.c.gcov.html">run-stdlib.c</a></td>
+ <td class="coverFile"><a href="run-snprintf-test.c.gcov.html">run-snprintf-test.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=91 height=10 alt="90.9%"><img src="../../snow.png" width=9 height=10 alt="90.9%"></td></tr></table>
</td>
+ <td class="coverPerHi">90.9&nbsp;%</td>
+ <td class="coverNumHi">10 / 11</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">41 / 41</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -130,6 +118,18 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="run-snprintf.c.gcov.html">run-snprintf.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=98 height=10 alt="98.0%"><img src="../../snow.png" width=2 height=10 alt="98.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">98.0&nbsp;%</td>
+ <td class="coverNumHi">146 / 149</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">10 / 10</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="run-memops.c.gcov.html">run-memops.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
@@ -142,38 +142,38 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-ctype-test.c.gcov.html">run-ctype-test.c</a></td>
+ <td class="coverFile"><a href="run-stdlib.c.gcov.html">run-stdlib.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">12 / 12</td>
+ <td class="coverNumHi">41 / 41</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-snprintf-test.c.gcov.html">run-snprintf-test.c</a></td>
+ <td class="coverFile"><a href="run-time.c.gcov.html">run-time.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=91 height=10 alt="90.9%"><img src="../../snow.png" width=9 height=10 alt="90.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerHi">90.9&nbsp;%</td>
- <td class="coverNumHi">10 / 11</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverNumHi">39 / 39</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-time.c.gcov.html">run-time.c</a></td>
+ <td class="coverFile"><a href="run-ctype-test.c.gcov.html">run-ctype-test.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">39 / 39</td>
+ <td class="coverNumHi">12 / 12</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverNumHi">6 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/libc/test/index-sort-f.html b/coverage-report/libc/test/index-sort-f.html
index 72f5791..9e6f403 100644
--- a/coverage-report/libc/test/index-sort-f.html
+++ b/coverage-report/libc/test/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">31</td>
@@ -94,24 +94,24 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-stdlib.c.gcov.html">run-stdlib.c</a></td>
+ <td class="coverFile"><a href="run-memops.c.gcov.html">run-memops.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">41 / 41</td>
+ <td class="coverNumHi">53 / 53</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="run-memops.c.gcov.html">run-memops.c</a></td>
+ <td class="coverFile"><a href="run-stdlib.c.gcov.html">run-stdlib.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">53 / 53</td>
+ <td class="coverNumHi">41 / 41</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/libc/test/index-sort-l.html b/coverage-report/libc/test/index-sort-l.html
index 8822b60..610b9a2 100644
--- a/coverage-report/libc/test/index-sort-l.html
+++ b/coverage-report/libc/test/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">31</td>
diff --git a/coverage-report/libc/test/index.html b/coverage-report/libc/test/index.html
index b9b61a5..ae7e046 100644
--- a/coverage-report/libc/test/index.html
+++ b/coverage-report/libc/test/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">31</td>
diff --git a/coverage-report/libc/test/run-ctype-test.c.func-sort-c.html b/coverage-report/libc/test/run-ctype-test.c.func-sort-c.html
index 7dd20b6..d1834bc 100644
--- a/coverage-report/libc/test/run-ctype-test.c.func-sort-c.html
+++ b/coverage-report/libc/test/run-ctype-test.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/libc/test/run-ctype-test.c.func.html b/coverage-report/libc/test/run-ctype-test.c.func.html
index af14a06..163a43e 100644
--- a/coverage-report/libc/test/run-ctype-test.c.func.html
+++ b/coverage-report/libc/test/run-ctype-test.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/libc/test/run-ctype-test.c.gcov.html b/coverage-report/libc/test/run-ctype-test.c.gcov.html
index a5dcf86..10ecb2c 100644
--- a/coverage-report/libc/test/run-ctype-test.c.gcov.html
+++ b/coverage-report/libc/test/run-ctype-test.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/libc/test/run-ctype.c.func-sort-c.html b/coverage-report/libc/test/run-ctype.c.func-sort-c.html
index b1c41dc..587a4e3 100644
--- a/coverage-report/libc/test/run-ctype.c.func-sort-c.html
+++ b/coverage-report/libc/test/run-ctype.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/test/run-ctype.c.func.html b/coverage-report/libc/test/run-ctype.c.func.html
index e3cbff5..11d0d58 100644
--- a/coverage-report/libc/test/run-ctype.c.func.html
+++ b/coverage-report/libc/test/run-ctype.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/test/run-ctype.c.gcov.html b/coverage-report/libc/test/run-ctype.c.gcov.html
index cd94217..d66f62a 100644
--- a/coverage-report/libc/test/run-ctype.c.gcov.html
+++ b/coverage-report/libc/test/run-ctype.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/test/run-memops-test.c.func-sort-c.html b/coverage-report/libc/test/run-memops-test.c.func-sort-c.html
index 079edac..286ad6a 100644
--- a/coverage-report/libc/test/run-memops-test.c.func-sort-c.html
+++ b/coverage-report/libc/test/run-memops-test.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
diff --git a/coverage-report/libc/test/run-memops-test.c.func.html b/coverage-report/libc/test/run-memops-test.c.func.html
index 7378cd8..23ad60d 100644
--- a/coverage-report/libc/test/run-memops-test.c.func.html
+++ b/coverage-report/libc/test/run-memops-test.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
diff --git a/coverage-report/libc/test/run-memops-test.c.gcov.html b/coverage-report/libc/test/run-memops-test.c.gcov.html
index 34676ab..6739c64 100644
--- a/coverage-report/libc/test/run-memops-test.c.gcov.html
+++ b/coverage-report/libc/test/run-memops-test.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
diff --git a/coverage-report/libc/test/run-memops.c.func-sort-c.html b/coverage-report/libc/test/run-memops.c.func-sort-c.html
index 84e5a64..8b568fb 100644
--- a/coverage-report/libc/test/run-memops.c.func-sort-c.html
+++ b/coverage-report/libc/test/run-memops.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/test/run-memops.c.func.html b/coverage-report/libc/test/run-memops.c.func.html
index 69bc4f3..b7db33b 100644
--- a/coverage-report/libc/test/run-memops.c.func.html
+++ b/coverage-report/libc/test/run-memops.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/test/run-memops.c.gcov.html b/coverage-report/libc/test/run-memops.c.gcov.html
index 2a0c6a1..8760570 100644
--- a/coverage-report/libc/test/run-memops.c.gcov.html
+++ b/coverage-report/libc/test/run-memops.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/test/run-snprintf-test.c.func-sort-c.html b/coverage-report/libc/test/run-snprintf-test.c.func-sort-c.html
index 51647fa..3d47c82 100644
--- a/coverage-report/libc/test/run-snprintf-test.c.func-sort-c.html
+++ b/coverage-report/libc/test/run-snprintf-test.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/libc/test/run-snprintf-test.c.func.html b/coverage-report/libc/test/run-snprintf-test.c.func.html
index 2f0c039..e4cae18 100644
--- a/coverage-report/libc/test/run-snprintf-test.c.func.html
+++ b/coverage-report/libc/test/run-snprintf-test.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/libc/test/run-snprintf-test.c.gcov.html b/coverage-report/libc/test/run-snprintf-test.c.gcov.html
index 1cc43ea..eb170a0 100644
--- a/coverage-report/libc/test/run-snprintf-test.c.gcov.html
+++ b/coverage-report/libc/test/run-snprintf-test.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/libc/test/run-snprintf.c.func-sort-c.html b/coverage-report/libc/test/run-snprintf.c.func-sort-c.html
index 892dad2..483886c 100644
--- a/coverage-report/libc/test/run-snprintf.c.func-sort-c.html
+++ b/coverage-report/libc/test/run-snprintf.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
diff --git a/coverage-report/libc/test/run-snprintf.c.func.html b/coverage-report/libc/test/run-snprintf.c.func.html
index 09fd127..234e0d2 100644
--- a/coverage-report/libc/test/run-snprintf.c.func.html
+++ b/coverage-report/libc/test/run-snprintf.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
diff --git a/coverage-report/libc/test/run-snprintf.c.gcov.html b/coverage-report/libc/test/run-snprintf.c.gcov.html
index 4b74c3e..d6f5d9c 100644
--- a/coverage-report/libc/test/run-snprintf.c.gcov.html
+++ b/coverage-report/libc/test/run-snprintf.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
diff --git a/coverage-report/libc/test/run-stdlib.c.func-sort-c.html b/coverage-report/libc/test/run-stdlib.c.func-sort-c.html
index e5788af..333f88e 100644
--- a/coverage-report/libc/test/run-stdlib.c.func-sort-c.html
+++ b/coverage-report/libc/test/run-stdlib.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/test/run-stdlib.c.func.html b/coverage-report/libc/test/run-stdlib.c.func.html
index 8af5eba..206c372 100644
--- a/coverage-report/libc/test/run-stdlib.c.func.html
+++ b/coverage-report/libc/test/run-stdlib.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/test/run-stdlib.c.gcov.html b/coverage-report/libc/test/run-stdlib.c.gcov.html
index f6b2ccd..26bc62a 100644
--- a/coverage-report/libc/test/run-stdlib.c.gcov.html
+++ b/coverage-report/libc/test/run-stdlib.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/test/run-time.c.func-sort-c.html b/coverage-report/libc/test/run-time.c.func-sort-c.html
index 6985ca7..775e535 100644
--- a/coverage-report/libc/test/run-time.c.func-sort-c.html
+++ b/coverage-report/libc/test/run-time.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/test/run-time.c.func.html b/coverage-report/libc/test/run-time.c.func.html
index 6286047..f0c7f79 100644
--- a/coverage-report/libc/test/run-time.c.func.html
+++ b/coverage-report/libc/test/run-time.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/test/run-time.c.gcov.html b/coverage-report/libc/test/run-time.c.gcov.html
index a88fc36..e83e4be 100644
--- a/coverage-report/libc/test/run-time.c.gcov.html
+++ b/coverage-report/libc/test/run-time.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libc/time.c.func-sort-c.html b/coverage-report/libc/time.c.func-sort-c.html
index 1ab9b98..9dea8a9 100644
--- a/coverage-report/libc/time.c.func-sort-c.html
+++ b/coverage-report/libc/time.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
diff --git a/coverage-report/libc/time.c.func.html b/coverage-report/libc/time.c.func.html
index 9f3c485..5b49b0c 100644
--- a/coverage-report/libc/time.c.func.html
+++ b/coverage-report/libc/time.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
diff --git a/coverage-report/libc/time.c.gcov.html b/coverage-report/libc/time.c.gcov.html
index e7cac93..6418cf4 100644
--- a/coverage-report/libc/time.c.gcov.html
+++ b/coverage-report/libc/time.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
diff --git a/coverage-report/libfdt/fdt.c.func-sort-c.html b/coverage-report/libfdt/fdt.c.func-sort-c.html
index f622afa..0add885 100644
--- a/coverage-report/libfdt/fdt.c.func-sort-c.html
+++ b/coverage-report/libfdt/fdt.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">77</td>
- <td class="headerCovTableEntry">159</td>
- <td class="headerCovTableEntryLo">48.4 %</td>
+ <td class="headerCovTableEntry">94</td>
+ <td class="headerCovTableEntry">186</td>
+ <td class="headerCovTableEntryLo">50.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">9</td>
- <td class="headerCovTableEntry">14</td>
- <td class="headerCovTableEntryLo">64.3 %</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntry">15</td>
+ <td class="headerCovTableEntryLo">66.7 %</td>
</tr>
<tr>
<td></td>
@@ -69,60 +69,64 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#231">fdt_check_prop_offset_</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#229">fdt_check_prop_offset_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#280">fdt_first_subnode</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#281">fdt_first_subnode</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#320">fdt_move</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#321">fdt_move</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#240">fdt_next_node</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#241">fdt_next_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#291">fdt_next_subnode</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#292">fdt_next_subnode</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#111">fdt_check_header</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#87">fdt_check_header</a></td>
<td class="coverFnHi">11</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#97">fdt_header_size_</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#81">fdt_header_size</a></td>
<td class="coverFnHi">11</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#222">fdt_check_node_offset_</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#67">fdt_header_size_</a></td>
+ <td class="coverFnHi">11</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="fdt.c.gcov.html#217">fdt_check_node_offset_</a></td>
<td class="coverFnHi">16</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#85">check_block_</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#55">check_block_</a></td>
<td class="coverFnHi">22</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#61">fdt_ro_probe_</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#16">fdt_ro_probe_</a></td>
<td class="coverFnHi">45</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#80">check_off_</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#50">check_off_</a></td>
<td class="coverFnHi">55</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#308">fdt_find_string_</a></td>
- <td class="coverFnHi">2785</td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#309">fdt_find_string_</a></td>
+ <td class="coverFnHi">2811</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#169">fdt_next_tag</a></td>
- <td class="coverFnHi">3329</td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#163">fdt_next_tag</a></td>
+ <td class="coverFnHi">3355</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#152">fdt_offset_ptr</a></td>
- <td class="coverFnHi">14237</td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#141">fdt_offset_ptr</a></td>
+ <td class="coverFnHi">14315</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libfdt/fdt.c.func.html b/coverage-report/libfdt/fdt.c.func.html
index b5fda50..2d5f670 100644
--- a/coverage-report/libfdt/fdt.c.func.html
+++ b/coverage-report/libfdt/fdt.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">77</td>
- <td class="headerCovTableEntry">159</td>
- <td class="headerCovTableEntryLo">48.4 %</td>
+ <td class="headerCovTableEntry">94</td>
+ <td class="headerCovTableEntry">186</td>
+ <td class="headerCovTableEntryLo">50.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">9</td>
- <td class="headerCovTableEntry">14</td>
- <td class="headerCovTableEntryLo">64.3 %</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntry">15</td>
+ <td class="headerCovTableEntryLo">66.7 %</td>
</tr>
<tr>
<td></td>
@@ -69,59 +69,63 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fdt.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#85">check_block_</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#55">check_block_</a></td>
<td class="coverFnHi">22</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#80">check_off_</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#50">check_off_</a></td>
<td class="coverFnHi">55</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#111">fdt_check_header</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#87">fdt_check_header</a></td>
<td class="coverFnHi">11</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#222">fdt_check_node_offset_</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#217">fdt_check_node_offset_</a></td>
<td class="coverFnHi">16</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#231">fdt_check_prop_offset_</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#229">fdt_check_prop_offset_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#308">fdt_find_string_</a></td>
- <td class="coverFnHi">2785</td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#309">fdt_find_string_</a></td>
+ <td class="coverFnHi">2811</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#280">fdt_first_subnode</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#281">fdt_first_subnode</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#97">fdt_header_size_</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#81">fdt_header_size</a></td>
<td class="coverFnHi">11</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#320">fdt_move</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#67">fdt_header_size_</a></td>
+ <td class="coverFnHi">11</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="fdt.c.gcov.html#321">fdt_move</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#240">fdt_next_node</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#241">fdt_next_node</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#291">fdt_next_subnode</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#292">fdt_next_subnode</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#169">fdt_next_tag</a></td>
- <td class="coverFnHi">3329</td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#163">fdt_next_tag</a></td>
+ <td class="coverFnHi">3355</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#152">fdt_offset_ptr</a></td>
- <td class="coverFnHi">14237</td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#141">fdt_offset_ptr</a></td>
+ <td class="coverFnHi">14315</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt.c.gcov.html#61">fdt_ro_probe_</a></td>
+ <td class="coverFn"><a href="fdt.c.gcov.html#16">fdt_ro_probe_</a></td>
<td class="coverFnHi">45</td>
</tr>
</table>
diff --git a/coverage-report/libfdt/fdt.c.gcov.html b/coverage-report/libfdt/fdt.c.gcov.html
index f8390b5..cfc200f 100644
--- a/coverage-report/libfdt/fdt.c.gcov.html
+++ b/coverage-report/libfdt/fdt.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">77</td>
- <td class="headerCovTableEntry">159</td>
- <td class="headerCovTableEntryLo">48.4 %</td>
+ <td class="headerCovTableEntry">94</td>
+ <td class="headerCovTableEntry">186</td>
+ <td class="headerCovTableEntryLo">50.5 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">9</td>
- <td class="headerCovTableEntry">14</td>
- <td class="headerCovTableEntryLo">64.3 %</td>
+ <td class="headerCovTableEntry">10</td>
+ <td class="headerCovTableEntry">15</td>
+ <td class="headerCovTableEntryLo">66.7 %</td>
</tr>
<tr>
<td></td>
@@ -69,337 +69,341 @@
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
-<a name="1"><span class="lineNum"> 1 </span> : : /*</a>
-<a name="2"><span class="lineNum"> 2 </span> : : * libfdt - Flat Device Tree manipulation</a>
-<a name="3"><span class="lineNum"> 3 </span> : : * Copyright (C) 2006 David Gibson, IBM Corporation.</a>
-<a name="4"><span class="lineNum"> 4 </span> : : *</a>
-<a name="5"><span class="lineNum"> 5 </span> : : * libfdt is dual licensed: you can use it either under the terms of</a>
-<a name="6"><span class="lineNum"> 6 </span> : : * the GPL, or the BSD license, at your option.</a>
-<a name="7"><span class="lineNum"> 7 </span> : : *</a>
-<a name="8"><span class="lineNum"> 8 </span> : : * a) This library is free software; you can redistribute it and/or</a>
-<a name="9"><span class="lineNum"> 9 </span> : : * modify it under the terms of the GNU General Public License as</a>
-<a name="10"><span class="lineNum"> 10 </span> : : * published by the Free Software Foundation; either version 2 of the</a>
-<a name="11"><span class="lineNum"> 11 </span> : : * License, or (at your option) any later version.</a>
-<a name="12"><span class="lineNum"> 12 </span> : : *</a>
-<a name="13"><span class="lineNum"> 13 </span> : : * This library is distributed in the hope that it will be useful,</a>
-<a name="14"><span class="lineNum"> 14 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of</a>
-<a name="15"><span class="lineNum"> 15 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</a>
-<a name="16"><span class="lineNum"> 16 </span> : : * GNU General Public License for more details.</a>
-<a name="17"><span class="lineNum"> 17 </span> : : *</a>
-<a name="18"><span class="lineNum"> 18 </span> : : * You should have received a copy of the GNU General Public</a>
-<a name="19"><span class="lineNum"> 19 </span> : : * License along with this library; if not, write to the Free</a>
-<a name="20"><span class="lineNum"> 20 </span> : : * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,</a>
-<a name="21"><span class="lineNum"> 21 </span> : : * MA 02110-1301 USA</a>
-<a name="22"><span class="lineNum"> 22 </span> : : *</a>
-<a name="23"><span class="lineNum"> 23 </span> : : * Alternatively,</a>
-<a name="24"><span class="lineNum"> 24 </span> : : *</a>
-<a name="25"><span class="lineNum"> 25 </span> : : * b) Redistribution and use in source and binary forms, with or</a>
-<a name="26"><span class="lineNum"> 26 </span> : : * without modification, are permitted provided that the following</a>
-<a name="27"><span class="lineNum"> 27 </span> : : * conditions are met:</a>
-<a name="28"><span class="lineNum"> 28 </span> : : *</a>
-<a name="29"><span class="lineNum"> 29 </span> : : * 1. Redistributions of source code must retain the above</a>
-<a name="30"><span class="lineNum"> 30 </span> : : * copyright notice, this list of conditions and the following</a>
-<a name="31"><span class="lineNum"> 31 </span> : : * disclaimer.</a>
-<a name="32"><span class="lineNum"> 32 </span> : : * 2. Redistributions in binary form must reproduce the above</a>
-<a name="33"><span class="lineNum"> 33 </span> : : * copyright notice, this list of conditions and the following</a>
-<a name="34"><span class="lineNum"> 34 </span> : : * disclaimer in the documentation and/or other materials</a>
-<a name="35"><span class="lineNum"> 35 </span> : : * provided with the distribution.</a>
-<a name="36"><span class="lineNum"> 36 </span> : : *</a>
-<a name="37"><span class="lineNum"> 37 </span> : : * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND</a>
-<a name="38"><span class="lineNum"> 38 </span> : : * CONTRIBUTORS &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES,</a>
-<a name="39"><span class="lineNum"> 39 </span> : : * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</a>
-<a name="40"><span class="lineNum"> 40 </span> : : * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE</a>
-<a name="41"><span class="lineNum"> 41 </span> : : * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR</a>
-<a name="42"><span class="lineNum"> 42 </span> : : * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</a>
-<a name="43"><span class="lineNum"> 43 </span> : : * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT</a>
-<a name="44"><span class="lineNum"> 44 </span> : : * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;</a>
-<a name="45"><span class="lineNum"> 45 </span> : : * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</a>
-<a name="46"><span class="lineNum"> 46 </span> : : * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</a>
-<a name="47"><span class="lineNum"> 47 </span> : : * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR</a>
-<a name="48"><span class="lineNum"> 48 </span> : : * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,</a>
-<a name="49"><span class="lineNum"> 49 </span> : : * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</a>
-<a name="50"><span class="lineNum"> 50 </span> : : */</a>
-<a name="51"><span class="lineNum"> 51 </span> : : #include &quot;libfdt_env.h&quot;</a>
-<a name="52"><span class="lineNum"> 52 </span> : : </a>
-<a name="53"><span class="lineNum"> 53 </span> : : #include &lt;fdt.h&gt;</a>
-<a name="54"><span class="lineNum"> 54 </span> : : #include &lt;libfdt.h&gt;</a>
-<a name="55"><span class="lineNum"> 55 </span> : : </a>
-<a name="56"><span class="lineNum"> 56 </span> : : #include &quot;libfdt_internal.h&quot;</a>
-<a name="57"><span class="lineNum"> 57 </span> : : </a>
-<a name="58"><span class="lineNum"> 58 </span> : : /*</a>
-<a name="59"><span class="lineNum"> 59 </span> : : * Minimal sanity check for a read-only tree. fdt_ro_probe_() checks</a>
-<a name="60"><span class="lineNum"> 60 </span> : : * that the given buffer contains what appears to be a flattened</a>
-<a name="61"><span class="lineNum"> 61 </span> : : * device tree with sane information in its header.</a>
-<a name="62"><span class="lineNum"> 62 </span> : : */</a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 45 : int fdt_ro_probe_(const void *fdt)</span></a>
-<a name="64"><span class="lineNum"> 64 </span> : : {</a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 45 : if (fdt_magic(fdt) == FDT_MAGIC) {</span></a>
-<a name="66"><span class="lineNum"> 66 </span> : : /* Complete tree */</a>
-<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 45 : if (fdt_version(fdt) &lt; FDT_FIRST_SUPPORTED_VERSION)</span></a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADVERSION;</span></a>
-<a name="69"><span class="lineNum"> 69 </span> :<span class="lineCov"> 45 : if (fdt_last_comp_version(fdt) &gt; FDT_LAST_SUPPORTED_VERSION)</span></a>
-<a name="70"><span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADVERSION;</span></a>
-<a name="71"><span class="lineNum"> 71 </span> :<span class="lineNoCov"> 0 : } else if (fdt_magic(fdt) == FDT_SW_MAGIC) {</span></a>
-<a name="72"><span class="lineNum"> 72 </span> : : /* Unfinished sequential-write blob */</a>
-<a name="73"><span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : if (fdt_size_dt_struct(fdt) == 0)</span></a>
-<a name="74"><span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADSTATE;</span></a>
-<a name="75"><span class="lineNum"> 75 </span> : : } else {</a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADMAGIC;</span></a>
-<a name="77"><span class="lineNum"> 77 </span> : : }</a>
-<a name="78"><span class="lineNum"> 78 </span> : : </a>
-<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 45 : return 0;</span></a>
-<a name="80"><span class="lineNum"> 80 </span> : : }</a>
-<a name="81"><span class="lineNum"> 81 </span> : : </a>
-<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 55 : static int check_off_(uint32_t hdrsize, uint32_t totalsize, uint32_t off)</span></a>
-<a name="83"><span class="lineNum"> 83 </span> : : {</a>
-<a name="84"><span class="lineNum"> 84 </span> :<span class="lineCov"> 55 : return (off &gt;= hdrsize) &amp;&amp; (off &lt;= totalsize);</span></a>
-<a name="85"><span class="lineNum"> 85 </span> : : }</a>
-<a name="86"><span class="lineNum"> 86 </span> : : </a>
-<a name="87"><span class="lineNum"> 87 </span> :<span class="lineCov"> 22 : static int check_block_(uint32_t hdrsize, uint32_t totalsize,</span></a>
-<a name="88"><span class="lineNum"> 88 </span> : : uint32_t base, uint32_t size)</a>
-<a name="89"><span class="lineNum"> 89 </span> : : {</a>
-<a name="90"><span class="lineNum"> 90 </span> :<span class="lineCov"> 22 : if (!check_off_(hdrsize, totalsize, base))</span></a>
-<a name="91"><span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : return 0; /* block start out of bounds */</span></a>
-<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 22 : if ((base + size) &lt; base)</span></a>
-<a name="93"><span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : return 0; /* overflow */</span></a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 22 : if (!check_off_(hdrsize, totalsize, base + size))</span></a>
-<a name="95"><span class="lineNum"> 95 </span> :<span class="lineNoCov"> 0 : return 0; /* block end out of bounds */</span></a>
-<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 22 : return 1;</span></a>
-<a name="97"><span class="lineNum"> 97 </span> : : }</a>
-<a name="98"><span class="lineNum"> 98 </span> : : </a>
-<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 11 : size_t fdt_header_size_(uint32_t version)</span></a>
-<a name="100"><span class="lineNum"> 100 </span> : : {</a>
-<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 11 : if (version &lt;= 1)</span></a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : return FDT_V1_SIZE;</span></a>
-<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 11 : else if (version &lt;= 2)</span></a>
-<a name="104"><span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : return FDT_V2_SIZE;</span></a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 11 : else if (version &lt;= 3)</span></a>
-<a name="106"><span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : return FDT_V3_SIZE;</span></a>
-<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 11 : else if (version &lt;= 16)</span></a>
-<a name="108"><span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : return FDT_V16_SIZE;</span></a>
-<a name="109"><span class="lineNum"> 109 </span> : : else</a>
-<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 11 : return FDT_V17_SIZE;</span></a>
-<a name="111"><span class="lineNum"> 111 </span> : : }</a>
-<a name="112"><span class="lineNum"> 112 </span> : : </a>
-<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 11 : int fdt_check_header(const void *fdt)</span></a>
-<a name="114"><span class="lineNum"> 114 </span> : : {</a>
-<a name="115"><span class="lineNum"> 115 </span> : : size_t hdrsize;</a>
-<a name="116"><span class="lineNum"> 116 </span> : : </a>
-<a name="117"><span class="lineNum"> 117 </span> :<span class="lineCov"> 11 : if (fdt_magic(fdt) != FDT_MAGIC)</span></a>
-<a name="118"><span class="lineNum"> 118 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADMAGIC;</span></a>
-<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 11 : hdrsize = fdt_header_size(fdt);</span></a>
-<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 11 : if ((fdt_version(fdt) &lt; FDT_FIRST_SUPPORTED_VERSION)</span></a>
-<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 11 : || (fdt_last_comp_version(fdt) &gt; FDT_LAST_SUPPORTED_VERSION))</span></a>
-<a name="122"><span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADVERSION;</span></a>
-<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 11 : if (fdt_version(fdt) &lt; fdt_last_comp_version(fdt))</span></a>
-<a name="124"><span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADVERSION;</span></a>
-<a name="125"><span class="lineNum"> 125 </span> : : </a>
-<a name="126"><span class="lineNum"> 126 </span> :<span class="lineCov"> 11 : if ((fdt_totalsize(fdt) &lt; hdrsize)</span></a>
-<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 11 : || (fdt_totalsize(fdt) &gt; INT_MAX))</span></a>
-<a name="128"><span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_TRUNCATED;</span></a>
-<a name="129"><span class="lineNum"> 129 </span> : : </a>
-<a name="130"><span class="lineNum"> 130 </span> : : /* Bounds check memrsv block */</a>
-<a name="131"><span class="lineNum"> 131 </span> :<span class="lineCov"> 11 : if (!check_off_(hdrsize, fdt_totalsize(fdt), fdt_off_mem_rsvmap(fdt)))</span></a>
-<a name="132"><span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_TRUNCATED;</span></a>
-<a name="133"><span class="lineNum"> 133 </span> : : </a>
-<a name="134"><span class="lineNum"> 134 </span> : : /* Bounds check structure block */</a>
-<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 11 : if (fdt_version(fdt) &lt; 17) {</span></a>
-<a name="136"><span class="lineNum"> 136 </span> :<span class="lineNoCov"> 0 : if (!check_off_(hdrsize, fdt_totalsize(fdt),</span></a>
-<a name="137"><span class="lineNum"> 137 </span> : : fdt_off_dt_struct(fdt)))</a>
-<a name="138"><span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_TRUNCATED;</span></a>
-<a name="139"><span class="lineNum"> 139 </span> : : } else {</a>
-<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 11 : if (!check_block_(hdrsize, fdt_totalsize(fdt),</span></a>
-<a name="141"><span class="lineNum"> 141 </span> : : fdt_off_dt_struct(fdt),</a>
-<a name="142"><span class="lineNum"> 142 </span> : : fdt_size_dt_struct(fdt)))</a>
-<a name="143"><span class="lineNum"> 143 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_TRUNCATED;</span></a>
-<a name="144"><span class="lineNum"> 144 </span> : : }</a>
-<a name="145"><span class="lineNum"> 145 </span> : : </a>
-<a name="146"><span class="lineNum"> 146 </span> : : /* Bounds check strings block */</a>
-<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 11 : if (!check_block_(hdrsize, fdt_totalsize(fdt),</span></a>
-<a name="148"><span class="lineNum"> 148 </span> : : fdt_off_dt_strings(fdt), fdt_size_dt_strings(fdt)))</a>
-<a name="149"><span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_TRUNCATED;</span></a>
+<a name="1"><span class="lineNum"> 1 </span> : : // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)</a>
+<a name="2"><span class="lineNum"> 2 </span> : : /*</a>
+<a name="3"><span class="lineNum"> 3 </span> : : * libfdt - Flat Device Tree manipulation</a>
+<a name="4"><span class="lineNum"> 4 </span> : : * Copyright (C) 2006 David Gibson, IBM Corporation.</a>
+<a name="5"><span class="lineNum"> 5 </span> : : */</a>
+<a name="6"><span class="lineNum"> 6 </span> : : #include &quot;libfdt_env.h&quot;</a>
+<a name="7"><span class="lineNum"> 7 </span> : : </a>
+<a name="8"><span class="lineNum"> 8 </span> : : #include &lt;fdt.h&gt;</a>
+<a name="9"><span class="lineNum"> 9 </span> : : #include &lt;libfdt.h&gt;</a>
+<a name="10"><span class="lineNum"> 10 </span> : : </a>
+<a name="11"><span class="lineNum"> 11 </span> : : #include &quot;libfdt_internal.h&quot;</a>
+<a name="12"><span class="lineNum"> 12 </span> : : </a>
+<a name="13"><span class="lineNum"> 13 </span> : : /*</a>
+<a name="14"><span class="lineNum"> 14 </span> : : * Minimal sanity check for a read-only tree. fdt_ro_probe_() checks</a>
+<a name="15"><span class="lineNum"> 15 </span> : : * that the given buffer contains what appears to be a flattened</a>
+<a name="16"><span class="lineNum"> 16 </span> : : * device tree with sane information in its header.</a>
+<a name="17"><span class="lineNum"> 17 </span> : : */</a>
+<a name="18"><span class="lineNum"> 18 </span> :<span class="lineCov"> 45 : int32_t fdt_ro_probe_(const void *fdt)</span></a>
+<a name="19"><span class="lineNum"> 19 </span> : : {</a>
+<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 45 : uint32_t totalsize = fdt_totalsize(fdt);</span></a>
+<a name="21"><span class="lineNum"> 21 </span> : : </a>
+<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 45 : if (can_assume(VALID_DTB))</span></a>
+<a name="23"><span class="lineNum"> 23 </span> :<span class="lineNoCov"> 0 : return totalsize;</span></a>
+<a name="24"><span class="lineNum"> 24 </span> : : </a>
+<a name="25"><span class="lineNum"> 25 </span> : : /* The device tree must be at an 8-byte aligned address */</a>
+<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 45 : if ((uintptr_t)fdt &amp; 7)</span></a>
+<a name="27"><span class="lineNum"> 27 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_ALIGNMENT;</span></a>
+<a name="28"><span class="lineNum"> 28 </span> : : </a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 45 : if (fdt_magic(fdt) == FDT_MAGIC) {</span></a>
+<a name="30"><span class="lineNum"> 30 </span> : : /* Complete tree */</a>
+<a name="31"><span class="lineNum"> 31 </span> :<span class="lineCov"> 45 : if (!can_assume(LATEST)) {</span></a>
+<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 45 : if (fdt_version(fdt) &lt; FDT_FIRST_SUPPORTED_VERSION)</span></a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADVERSION;</span></a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 45 : if (fdt_last_comp_version(fdt) &gt;</span></a>
+<a name="35"><span class="lineNum"> 35 </span> : : FDT_LAST_SUPPORTED_VERSION)</a>
+<a name="36"><span class="lineNum"> 36 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADVERSION;</span></a>
+<a name="37"><span class="lineNum"> 37 </span> : : }</a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineNoCov"> 0 : } else if (fdt_magic(fdt) == FDT_SW_MAGIC) {</span></a>
+<a name="39"><span class="lineNum"> 39 </span> : : /* Unfinished sequential-write blob */</a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineNoCov"> 0 : if (!can_assume(VALID_INPUT) &amp;&amp; fdt_size_dt_struct(fdt) == 0)</span></a>
+<a name="41"><span class="lineNum"> 41 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADSTATE;</span></a>
+<a name="42"><span class="lineNum"> 42 </span> : : } else {</a>
+<a name="43"><span class="lineNum"> 43 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADMAGIC;</span></a>
+<a name="44"><span class="lineNum"> 44 </span> : : }</a>
+<a name="45"><span class="lineNum"> 45 </span> : : </a>
+<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 45 : if (totalsize &lt; INT32_MAX)</span></a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 45 : return totalsize;</span></a>
+<a name="48"><span class="lineNum"> 48 </span> : : else</a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_TRUNCATED;</span></a>
+<a name="50"><span class="lineNum"> 50 </span> : : }</a>
+<a name="51"><span class="lineNum"> 51 </span> : : </a>
+<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 55 : static int check_off_(uint32_t hdrsize, uint32_t totalsize, uint32_t off)</span></a>
+<a name="53"><span class="lineNum"> 53 </span> : : {</a>
+<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 55 : return (off &gt;= hdrsize) &amp;&amp; (off &lt;= totalsize);</span></a>
+<a name="55"><span class="lineNum"> 55 </span> : : }</a>
+<a name="56"><span class="lineNum"> 56 </span> : : </a>
+<a name="57"><span class="lineNum"> 57 </span> :<span class="lineCov"> 22 : static int check_block_(uint32_t hdrsize, uint32_t totalsize,</span></a>
+<a name="58"><span class="lineNum"> 58 </span> : : uint32_t base, uint32_t size)</a>
+<a name="59"><span class="lineNum"> 59 </span> : : {</a>
+<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 22 : if (!check_off_(hdrsize, totalsize, base))</span></a>
+<a name="61"><span class="lineNum"> 61 </span> :<span class="lineNoCov"> 0 : return 0; /* block start out of bounds */</span></a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 22 : if ((base + size) &lt; base)</span></a>
+<a name="63"><span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : return 0; /* overflow */</span></a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 22 : if (!check_off_(hdrsize, totalsize, base + size))</span></a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : return 0; /* block end out of bounds */</span></a>
+<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 22 : return 1;</span></a>
+<a name="67"><span class="lineNum"> 67 </span> : : }</a>
+<a name="68"><span class="lineNum"> 68 </span> : : </a>
+<a name="69"><span class="lineNum"> 69 </span> :<span class="lineCov"> 11 : size_t fdt_header_size_(uint32_t version)</span></a>
+<a name="70"><span class="lineNum"> 70 </span> : : {</a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 11 : if (version &lt;= 1)</span></a>
+<a name="72"><span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : return FDT_V1_SIZE;</span></a>
+<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 11 : else if (version &lt;= 2)</span></a>
+<a name="74"><span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : return FDT_V2_SIZE;</span></a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 11 : else if (version &lt;= 3)</span></a>
+<a name="76"><span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : return FDT_V3_SIZE;</span></a>
+<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 11 : else if (version &lt;= 16)</span></a>
+<a name="78"><span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : return FDT_V16_SIZE;</span></a>
+<a name="79"><span class="lineNum"> 79 </span> : : else</a>
+<a name="80"><span class="lineNum"> 80 </span> :<span class="lineCov"> 11 : return FDT_V17_SIZE;</span></a>
+<a name="81"><span class="lineNum"> 81 </span> : : }</a>
+<a name="82"><span class="lineNum"> 82 </span> : : </a>
+<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 11 : size_t fdt_header_size(const void *fdt)</span></a>
+<a name="84"><span class="lineNum"> 84 </span> : : {</a>
+<a name="85"><span class="lineNum"> 85 </span> :<span class="lineCov"> 22 : return can_assume(LATEST) ? FDT_V17_SIZE :</span></a>
+<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 11 : fdt_header_size_(fdt_version(fdt));</span></a>
+<a name="87"><span class="lineNum"> 87 </span> : : }</a>
+<a name="88"><span class="lineNum"> 88 </span> : : </a>
+<a name="89"><span class="lineNum"> 89 </span> :<span class="lineCov"> 11 : int fdt_check_header(const void *fdt)</span></a>
+<a name="90"><span class="lineNum"> 90 </span> : : {</a>
+<a name="91"><span class="lineNum"> 91 </span> : : size_t hdrsize;</a>
+<a name="92"><span class="lineNum"> 92 </span> : : </a>
+<a name="93"><span class="lineNum"> 93 </span> : : /* The device tree must be at an 8-byte aligned address */</a>
+<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 11 : if ((uintptr_t)fdt &amp; 7)</span></a>
+<a name="95"><span class="lineNum"> 95 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_ALIGNMENT;</span></a>
+<a name="96"><span class="lineNum"> 96 </span> : : </a>
+<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 11 : if (fdt_magic(fdt) != FDT_MAGIC)</span></a>
+<a name="98"><span class="lineNum"> 98 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADMAGIC;</span></a>
+<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 11 : if (!can_assume(LATEST)) {</span></a>
+<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 11 : if ((fdt_version(fdt) &lt; FDT_FIRST_SUPPORTED_VERSION)</span></a>
+<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 11 : || (fdt_last_comp_version(fdt) &gt;</span></a>
+<a name="102"><span class="lineNum"> 102 </span> : : FDT_LAST_SUPPORTED_VERSION))</a>
+<a name="103"><span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADVERSION;</span></a>
+<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 11 : if (fdt_version(fdt) &lt; fdt_last_comp_version(fdt))</span></a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADVERSION;</span></a>
+<a name="106"><span class="lineNum"> 106 </span> : : }</a>
+<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 11 : hdrsize = fdt_header_size(fdt);</span></a>
+<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 11 : if (!can_assume(VALID_DTB)) {</span></a>
+<a name="109"><span class="lineNum"> 109 </span> : : </a>
+<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 11 : if ((fdt_totalsize(fdt) &lt; hdrsize)</span></a>
+<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 11 : || (fdt_totalsize(fdt) &gt; INT_MAX))</span></a>
+<a name="112"><span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_TRUNCATED;</span></a>
+<a name="113"><span class="lineNum"> 113 </span> : : </a>
+<a name="114"><span class="lineNum"> 114 </span> : : /* Bounds check memrsv block */</a>
+<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 11 : if (!check_off_(hdrsize, fdt_totalsize(fdt),</span></a>
+<a name="116"><span class="lineNum"> 116 </span> : : fdt_off_mem_rsvmap(fdt)))</a>
+<a name="117"><span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_TRUNCATED;</span></a>
+<a name="118"><span class="lineNum"> 118 </span> : : }</a>
+<a name="119"><span class="lineNum"> 119 </span> : : </a>
+<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 11 : if (!can_assume(VALID_DTB)) {</span></a>
+<a name="121"><span class="lineNum"> 121 </span> : : /* Bounds check structure block */</a>
+<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 11 : if (!can_assume(LATEST) &amp;&amp; fdt_version(fdt) &lt; 17) {</span></a>
+<a name="123"><span class="lineNum"> 123 </span> :<span class="lineNoCov"> 0 : if (!check_off_(hdrsize, fdt_totalsize(fdt),</span></a>
+<a name="124"><span class="lineNum"> 124 </span> : : fdt_off_dt_struct(fdt)))</a>
+<a name="125"><span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_TRUNCATED;</span></a>
+<a name="126"><span class="lineNum"> 126 </span> : : } else {</a>
+<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 11 : if (!check_block_(hdrsize, fdt_totalsize(fdt),</span></a>
+<a name="128"><span class="lineNum"> 128 </span> : : fdt_off_dt_struct(fdt),</a>
+<a name="129"><span class="lineNum"> 129 </span> : : fdt_size_dt_struct(fdt)))</a>
+<a name="130"><span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_TRUNCATED;</span></a>
+<a name="131"><span class="lineNum"> 131 </span> : : }</a>
+<a name="132"><span class="lineNum"> 132 </span> : : </a>
+<a name="133"><span class="lineNum"> 133 </span> : : /* Bounds check strings block */</a>
+<a name="134"><span class="lineNum"> 134 </span> :<span class="lineCov"> 11 : if (!check_block_(hdrsize, fdt_totalsize(fdt),</span></a>
+<a name="135"><span class="lineNum"> 135 </span> : : fdt_off_dt_strings(fdt),</a>
+<a name="136"><span class="lineNum"> 136 </span> : : fdt_size_dt_strings(fdt)))</a>
+<a name="137"><span class="lineNum"> 137 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_TRUNCATED;</span></a>
+<a name="138"><span class="lineNum"> 138 </span> : : }</a>
+<a name="139"><span class="lineNum"> 139 </span> : : </a>
+<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 11 : return 0;</span></a>
+<a name="141"><span class="lineNum"> 141 </span> : : }</a>
+<a name="142"><span class="lineNum"> 142 </span> : : </a>
+<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 14315 : const void *fdt_offset_ptr(const void *fdt, int offset, unsigned int len)</span></a>
+<a name="144"><span class="lineNum"> 144 </span> : : {</a>
+<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 14315 : unsigned int uoffset = offset;</span></a>
+<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 14315 : unsigned int absoffset = offset + fdt_off_dt_struct(fdt);</span></a>
+<a name="147"><span class="lineNum"> 147 </span> : : </a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 14315 : if (offset &lt; 0)</span></a>
+<a name="149"><span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
<a name="150"><span class="lineNum"> 150 </span> : : </a>
-<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 11 : return 0;</span></a>
-<a name="152"><span class="lineNum"> 152 </span> : : }</a>
-<a name="153"><span class="lineNum"> 153 </span> : : </a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 14237 : const void *fdt_offset_ptr(const void *fdt, int offset, unsigned int len)</span></a>
-<a name="155"><span class="lineNum"> 155 </span> : : {</a>
-<a name="156"><span class="lineNum"> 156 </span> :<span class="lineCov"> 14237 : unsigned absoffset = offset + fdt_off_dt_struct(fdt);</span></a>
-<a name="157"><span class="lineNum"> 157 </span> : : </a>
-<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 14237 : if ((absoffset &lt; offset)</span></a>
-<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 14237 : || ((absoffset + len) &lt; absoffset)</span></a>
-<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 14237 : || (absoffset + len) &gt; fdt_totalsize(fdt))</span></a>
-<a name="161"><span class="lineNum"> 161 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="162"><span class="lineNum"> 162 </span> : : </a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 14237 : if (fdt_version(fdt) &gt;= 0x11)</span></a>
-<a name="164"><span class="lineNum"> 164 </span> :<span class="lineCov"> 14237 : if (((offset + len) &lt; offset)</span></a>
-<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 14237 : || ((offset + len) &gt; fdt_size_dt_struct(fdt)))</span></a>
-<a name="166"><span class="lineNum"> 166 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="167"><span class="lineNum"> 167 </span> : : </a>
-<a name="168"><span class="lineNum"> 168 </span> :<span class="lineCov"> 14237 : return fdt_offset_ptr_(fdt, offset);</span></a>
-<a name="169"><span class="lineNum"> 169 </span> : : }</a>
-<a name="170"><span class="lineNum"> 170 </span> : : </a>
-<a name="171"><span class="lineNum"> 171 </span> :<span class="lineCov"> 3329 : uint32_t fdt_next_tag(const void *fdt, int startoffset, int *nextoffset)</span></a>
-<a name="172"><span class="lineNum"> 172 </span> : : {</a>
-<a name="173"><span class="lineNum"> 173 </span> : : const fdt32_t *tagp, *lenp;</a>
-<a name="174"><span class="lineNum"> 174 </span> : : uint32_t tag;</a>
-<a name="175"><span class="lineNum"> 175 </span> :<span class="lineCov"> 3329 : int offset = startoffset;</span></a>
-<a name="176"><span class="lineNum"> 176 </span> : : const char *p;</a>
-<a name="177"><span class="lineNum"> 177 </span> : : </a>
-<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 3329 : *nextoffset = -FDT_ERR_TRUNCATED;</span></a>
-<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 3329 : tagp = fdt_offset_ptr(fdt, offset, FDT_TAGSIZE);</span></a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 3329 : if (!tagp)</span></a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : return FDT_END; /* premature end */</span></a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 3329 : tag = fdt32_to_cpu(*tagp);</span></a>
-<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 3329 : offset += FDT_TAGSIZE;</span></a>
-<a name="184"><span class="lineNum"> 184 </span> : : </a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 3329 : *nextoffset = -FDT_ERR_BADSTRUCTURE;</span></a>
-<a name="186"><span class="lineNum"> 186 </span> :<span class="lineCov"> 3329 : switch (tag) {</span></a>
-<a name="187"><span class="lineNum"> 187 </span> :<span class="lineCov"> 4756 : case FDT_BEGIN_NODE:</span></a>
-<a name="188"><span class="lineNum"> 188 </span> : : /* skip name */</a>
-<a name="189"><span class="lineNum"> 189 </span> : : do {</a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineCov"> 4756 : p = fdt_offset_ptr(fdt, offset++, 1);</span></a>
-<a name="191"><span class="lineNum"> 191 </span> :<span class="lineCov"> 4756 : } while (p &amp;&amp; (*p != '\0'));</span></a>
-<a name="192"><span class="lineNum"> 192 </span> :<span class="lineCov"> 259 : if (!p)</span></a>
+<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 14315 : if (!can_assume(VALID_INPUT))</span></a>
+<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 14315 : if ((absoffset &lt; uoffset)</span></a>
+<a name="153"><span class="lineNum"> 153 </span> :<span class="lineCov"> 14315 : || ((absoffset + len) &lt; absoffset)</span></a>
+<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 14315 : || (absoffset + len) &gt; fdt_totalsize(fdt))</span></a>
+<a name="155"><span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="156"><span class="lineNum"> 156 </span> : : </a>
+<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 14315 : if (can_assume(LATEST) || fdt_version(fdt) &gt;= 0x11)</span></a>
+<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 14315 : if (((uoffset + len) &lt; uoffset)</span></a>
+<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 14315 : || ((offset + len) &gt; fdt_size_dt_struct(fdt)))</span></a>
+<a name="160"><span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="161"><span class="lineNum"> 161 </span> : : </a>
+<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 14315 : return fdt_offset_ptr_(fdt, offset);</span></a>
+<a name="163"><span class="lineNum"> 163 </span> : : }</a>
+<a name="164"><span class="lineNum"> 164 </span> : : </a>
+<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 3355 : uint32_t fdt_next_tag(const void *fdt, int startoffset, int *nextoffset)</span></a>
+<a name="166"><span class="lineNum"> 166 </span> : : {</a>
+<a name="167"><span class="lineNum"> 167 </span> : : const fdt32_t *tagp, *lenp;</a>
+<a name="168"><span class="lineNum"> 168 </span> : : uint32_t tag;</a>
+<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 3355 : int offset = startoffset;</span></a>
+<a name="170"><span class="lineNum"> 170 </span> : : const char *p;</a>
+<a name="171"><span class="lineNum"> 171 </span> : : </a>
+<a name="172"><span class="lineNum"> 172 </span> :<span class="lineCov"> 3355 : *nextoffset = -FDT_ERR_TRUNCATED;</span></a>
+<a name="173"><span class="lineNum"> 173 </span> :<span class="lineCov"> 3355 : tagp = fdt_offset_ptr(fdt, offset, FDT_TAGSIZE);</span></a>
+<a name="174"><span class="lineNum"> 174 </span> :<span class="lineCov"> 3355 : if (!can_assume(VALID_DTB) &amp;&amp; !tagp)</span></a>
+<a name="175"><span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : return FDT_END; /* premature end */</span></a>
+<a name="176"><span class="lineNum"> 176 </span> :<span class="lineCov"> 3355 : tag = fdt32_to_cpu(*tagp);</span></a>
+<a name="177"><span class="lineNum"> 177 </span> :<span class="lineCov"> 3355 : offset += FDT_TAGSIZE;</span></a>
+<a name="178"><span class="lineNum"> 178 </span> : : </a>
+<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 3355 : *nextoffset = -FDT_ERR_BADSTRUCTURE;</span></a>
+<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 3355 : switch (tag) {</span></a>
+<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 4756 : case FDT_BEGIN_NODE:</span></a>
+<a name="182"><span class="lineNum"> 182 </span> : : /* skip name */</a>
+<a name="183"><span class="lineNum"> 183 </span> : : do {</a>
+<a name="184"><span class="lineNum"> 184 </span> :<span class="lineCov"> 4756 : p = fdt_offset_ptr(fdt, offset++, 1);</span></a>
+<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 4756 : } while (p &amp;&amp; (*p != '\0'));</span></a>
+<a name="186"><span class="lineNum"> 186 </span> :<span class="lineCov"> 259 : if (!can_assume(VALID_DTB) &amp;&amp; !p)</span></a>
+<a name="187"><span class="lineNum"> 187 </span> :<span class="lineNoCov"> 0 : return FDT_END; /* premature end */</span></a>
+<a name="188"><span class="lineNum"> 188 </span> :<span class="lineCov"> 259 : break;</span></a>
+<a name="189"><span class="lineNum"> 189 </span> : : </a>
+<a name="190"><span class="lineNum"> 190 </span> :<span class="lineCov"> 2849 : case FDT_PROP:</span></a>
+<a name="191"><span class="lineNum"> 191 </span> :<span class="lineCov"> 2849 : lenp = fdt_offset_ptr(fdt, offset, sizeof(*lenp));</span></a>
+<a name="192"><span class="lineNum"> 192 </span> :<span class="lineCov"> 2849 : if (!can_assume(VALID_DTB) &amp;&amp; !lenp)</span></a>
<a name="193"><span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : return FDT_END; /* premature end */</span></a>
-<a name="194"><span class="lineNum"> 194 </span> :<span class="lineCov"> 259 : break;</span></a>
-<a name="195"><span class="lineNum"> 195 </span> : : </a>
-<a name="196"><span class="lineNum"> 196 </span> :<span class="lineCov"> 2823 : case FDT_PROP:</span></a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 2823 : lenp = fdt_offset_ptr(fdt, offset, sizeof(*lenp));</span></a>
-<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 2823 : if (!lenp)</span></a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : return FDT_END; /* premature end */</span></a>
-<a name="200"><span class="lineNum"> 200 </span> : : /* skip-name offset, length and value */</a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 2823 : offset += sizeof(struct fdt_property) - FDT_TAGSIZE</span></a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineCov"> 2823 : + fdt32_to_cpu(*lenp);</span></a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 2823 : if (fdt_version(fdt) &lt; 0x10 &amp;&amp; fdt32_to_cpu(*lenp) &gt;= 8 &amp;&amp;</span></a>
-<a name="204"><span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : ((offset - fdt32_to_cpu(*lenp)) % 8) != 0)</span></a>
-<a name="205"><span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : offset += 4;</span></a>
-<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 2823 : break;</span></a>
+<a name="194"><span class="lineNum"> 194 </span> : : /* skip-name offset, length and value */</a>
+<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 2849 : offset += sizeof(struct fdt_property) - FDT_TAGSIZE</span></a>
+<a name="196"><span class="lineNum"> 196 </span> :<span class="lineCov"> 2849 : + fdt32_to_cpu(*lenp);</span></a>
+<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 5698 : if (!can_assume(LATEST) &amp;&amp;</span></a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 2849 : fdt_version(fdt) &lt; 0x10 &amp;&amp; fdt32_to_cpu(*lenp) &gt;= 8 &amp;&amp;</span></a>
+<a name="199"><span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : ((offset - fdt32_to_cpu(*lenp)) % 8) != 0)</span></a>
+<a name="200"><span class="lineNum"> 200 </span> :<span class="lineNoCov"> 0 : offset += 4;</span></a>
+<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 2849 : break;</span></a>
+<a name="202"><span class="lineNum"> 202 </span> : : </a>
+<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 247 : case FDT_END:</span></a>
+<a name="204"><span class="lineNum"> 204 </span> : : case FDT_END_NODE:</a>
+<a name="205"><span class="lineNum"> 205 </span> : : case FDT_NOP:</a>
+<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 247 : break;</span></a>
<a name="207"><span class="lineNum"> 207 </span> : : </a>
-<a name="208"><span class="lineNum"> 208 </span> :<span class="lineCov"> 247 : case FDT_END:</span></a>
-<a name="209"><span class="lineNum"> 209 </span> : : case FDT_END_NODE:</a>
-<a name="210"><span class="lineNum"> 210 </span> : : case FDT_NOP:</a>
-<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 247 : break;</span></a>
-<a name="212"><span class="lineNum"> 212 </span> : : </a>
-<a name="213"><span class="lineNum"> 213 </span> :<span class="lineNoCov"> 0 : default:</span></a>
-<a name="214"><span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : return FDT_END;</span></a>
-<a name="215"><span class="lineNum"> 215 </span> : : }</a>
-<a name="216"><span class="lineNum"> 216 </span> : : </a>
-<a name="217"><span class="lineNum"> 217 </span> :<span class="lineCov"> 3329 : if (!fdt_offset_ptr(fdt, startoffset, offset - startoffset))</span></a>
-<a name="218"><span class="lineNum"> 218 </span> :<span class="lineNoCov"> 0 : return FDT_END; /* premature end */</span></a>
-<a name="219"><span class="lineNum"> 219 </span> : : </a>
-<a name="220"><span class="lineNum"> 220 </span> :<span class="lineCov"> 3329 : *nextoffset = FDT_TAGALIGN(offset);</span></a>
-<a name="221"><span class="lineNum"> 221 </span> :<span class="lineCov"> 3329 : return tag;</span></a>
-<a name="222"><span class="lineNum"> 222 </span> : : }</a>
-<a name="223"><span class="lineNum"> 223 </span> : : </a>
-<a name="224"><span class="lineNum"> 224 </span> :<span class="lineCov"> 16 : int fdt_check_node_offset_(const void *fdt, int offset)</span></a>
-<a name="225"><span class="lineNum"> 225 </span> : : {</a>
-<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 16 : if ((offset &lt; 0) || (offset % FDT_TAGSIZE)</span></a>
-<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 16 : || (fdt_next_tag(fdt, offset, &amp;offset) != FDT_BEGIN_NODE))</span></a>
-<a name="228"><span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADOFFSET;</span></a>
-<a name="229"><span class="lineNum"> 229 </span> : : </a>
-<a name="230"><span class="lineNum"> 230 </span> :<span class="lineCov"> 16 : return offset;</span></a>
-<a name="231"><span class="lineNum"> 231 </span> : : }</a>
-<a name="232"><span class="lineNum"> 232 </span> : : </a>
-<a name="233"><span class="lineNum"> 233 </span> :<span class="lineNoCov"> 0 : int fdt_check_prop_offset_(const void *fdt, int offset)</span></a>
-<a name="234"><span class="lineNum"> 234 </span> : : {</a>
-<a name="235"><span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : if ((offset &lt; 0) || (offset % FDT_TAGSIZE)</span></a>
-<a name="236"><span class="lineNum"> 236 </span> :<span class="lineNoCov"> 0 : || (fdt_next_tag(fdt, offset, &amp;offset) != FDT_PROP))</span></a>
-<a name="237"><span class="lineNum"> 237 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADOFFSET;</span></a>
-<a name="238"><span class="lineNum"> 238 </span> : : </a>
-<a name="239"><span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
-<a name="240"><span class="lineNum"> 240 </span> : : }</a>
-<a name="241"><span class="lineNum"> 241 </span> : : </a>
-<a name="242"><span class="lineNum"> 242 </span> :<span class="lineNoCov"> 0 : int fdt_next_node(const void *fdt, int offset, int *depth)</span></a>
-<a name="243"><span class="lineNum"> 243 </span> : : {</a>
-<a name="244"><span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : int nextoffset = 0;</span></a>
-<a name="245"><span class="lineNum"> 245 </span> : : uint32_t tag;</a>
-<a name="246"><span class="lineNum"> 246 </span> : : </a>
-<a name="247"><span class="lineNum"> 247 </span> :<span class="lineNoCov"> 0 : if (offset &gt;= 0)</span></a>
-<a name="248"><span class="lineNum"> 248 </span> :<span class="lineNoCov"> 0 : if ((nextoffset = fdt_check_node_offset_(fdt, offset)) &lt; 0)</span></a>
-<a name="249"><span class="lineNum"> 249 </span> :<span class="lineNoCov"> 0 : return nextoffset;</span></a>
-<a name="250"><span class="lineNum"> 250 </span> : : </a>
-<a name="251"><span class="lineNum"> 251 </span> : : do {</a>
-<a name="252"><span class="lineNum"> 252 </span> :<span class="lineNoCov"> 0 : offset = nextoffset;</span></a>
-<a name="253"><span class="lineNum"> 253 </span> :<span class="lineNoCov"> 0 : tag = fdt_next_tag(fdt, offset, &amp;nextoffset);</span></a>
-<a name="254"><span class="lineNum"> 254 </span> : : </a>
-<a name="255"><span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : switch (tag) {</span></a>
-<a name="256"><span class="lineNum"> 256 </span> :<span class="lineNoCov"> 0 : case FDT_PROP:</span></a>
-<a name="257"><span class="lineNum"> 257 </span> : : case FDT_NOP:</a>
-<a name="258"><span class="lineNum"> 258 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="259"><span class="lineNum"> 259 </span> : : </a>
-<a name="260"><span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : case FDT_BEGIN_NODE:</span></a>
-<a name="261"><span class="lineNum"> 261 </span> :<span class="lineNoCov"> 0 : if (depth)</span></a>
-<a name="262"><span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : (*depth)++;</span></a>
-<a name="263"><span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="264"><span class="lineNum"> 264 </span> : : </a>
-<a name="265"><span class="lineNum"> 265 </span> :<span class="lineNoCov"> 0 : case FDT_END_NODE:</span></a>
-<a name="266"><span class="lineNum"> 266 </span> :<span class="lineNoCov"> 0 : if (depth &amp;&amp; ((--(*depth)) &lt; 0))</span></a>
-<a name="267"><span class="lineNum"> 267 </span> :<span class="lineNoCov"> 0 : return nextoffset;</span></a>
-<a name="268"><span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="269"><span class="lineNum"> 269 </span> : : </a>
-<a name="270"><span class="lineNum"> 270 </span> :<span class="lineNoCov"> 0 : case FDT_END:</span></a>
-<a name="271"><span class="lineNum"> 271 </span> :<span class="lineNoCov"> 0 : if ((nextoffset &gt;= 0)</span></a>
-<a name="272"><span class="lineNum"> 272 </span> :<span class="lineNoCov"> 0 : || ((nextoffset == -FDT_ERR_TRUNCATED) &amp;&amp; !depth))</span></a>
-<a name="273"><span class="lineNum"> 273 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOTFOUND;</span></a>
-<a name="274"><span class="lineNum"> 274 </span> : : else</a>
-<a name="275"><span class="lineNum"> 275 </span> :<span class="lineNoCov"> 0 : return nextoffset;</span></a>
-<a name="276"><span class="lineNum"> 276 </span> : : }</a>
-<a name="277"><span class="lineNum"> 277 </span> :<span class="lineNoCov"> 0 : } while (tag != FDT_BEGIN_NODE);</span></a>
-<a name="278"><span class="lineNum"> 278 </span> : : </a>
-<a name="279"><span class="lineNum"> 279 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
-<a name="280"><span class="lineNum"> 280 </span> : : }</a>
-<a name="281"><span class="lineNum"> 281 </span> : : </a>
-<a name="282"><span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : int fdt_first_subnode(const void *fdt, int offset)</span></a>
-<a name="283"><span class="lineNum"> 283 </span> : : {</a>
-<a name="284"><span class="lineNum"> 284 </span> :<span class="lineNoCov"> 0 : int depth = 0;</span></a>
-<a name="285"><span class="lineNum"> 285 </span> : : </a>
-<a name="286"><span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, &amp;depth);</span></a>
-<a name="287"><span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : if (offset &lt; 0 || depth != 1)</span></a>
-<a name="288"><span class="lineNum"> 288 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOTFOUND;</span></a>
-<a name="289"><span class="lineNum"> 289 </span> : : </a>
-<a name="290"><span class="lineNum"> 290 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
-<a name="291"><span class="lineNum"> 291 </span> : : }</a>
-<a name="292"><span class="lineNum"> 292 </span> : : </a>
-<a name="293"><span class="lineNum"> 293 </span> :<span class="lineNoCov"> 0 : int fdt_next_subnode(const void *fdt, int offset)</span></a>
-<a name="294"><span class="lineNum"> 294 </span> : : {</a>
-<a name="295"><span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : int depth = 1;</span></a>
-<a name="296"><span class="lineNum"> 296 </span> : : </a>
-<a name="297"><span class="lineNum"> 297 </span> : : /*</a>
-<a name="298"><span class="lineNum"> 298 </span> : : * With respect to the parent, the depth of the next subnode will be</a>
-<a name="299"><span class="lineNum"> 299 </span> : : * the same as the last.</a>
-<a name="300"><span class="lineNum"> 300 </span> : : */</a>
-<a name="301"><span class="lineNum"> 301 </span> : : do {</a>
-<a name="302"><span class="lineNum"> 302 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, &amp;depth);</span></a>
-<a name="303"><span class="lineNum"> 303 </span> :<span class="lineNoCov"> 0 : if (offset &lt; 0 || depth &lt; 1)</span></a>
-<a name="304"><span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOTFOUND;</span></a>
-<a name="305"><span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : } while (depth &gt; 1);</span></a>
-<a name="306"><span class="lineNum"> 306 </span> : : </a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
-<a name="308"><span class="lineNum"> 308 </span> : : }</a>
-<a name="309"><span class="lineNum"> 309 </span> : : </a>
-<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 2785 : const char *fdt_find_string_(const char *strtab, int tabsize, const char *s)</span></a>
-<a name="311"><span class="lineNum"> 311 </span> : : {</a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 2785 : int len = strlen(s) + 1;</span></a>
-<a name="313"><span class="lineNum"> 313 </span> :<span class="lineCov"> 2785 : const char *last = strtab + tabsize - len;</span></a>
-<a name="314"><span class="lineNum"> 314 </span> : : const char *p;</a>
-<a name="315"><span class="lineNum"> 315 </span> : : </a>
-<a name="316"><span class="lineNum"> 316 </span> :<span class="lineCov"> 1231128 : for (p = strtab; p &lt;= last; p++)</span></a>
-<a name="317"><span class="lineNum"> 317 </span> :<span class="lineCov"> 1230932 : if (memcmp(p, s, len) == 0)</span></a>
-<a name="318"><span class="lineNum"> 318 </span> :<span class="lineCov"> 2589 : return p;</span></a>
-<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 196 : return NULL;</span></a>
-<a name="320"><span class="lineNum"> 320 </span> : : }</a>
-<a name="321"><span class="lineNum"> 321 </span> : : </a>
-<a name="322"><span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : int fdt_move(const void *fdt, void *buf, int bufsize)</span></a>
-<a name="323"><span class="lineNum"> 323 </span> : : {</a>
-<a name="324"><span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
-<a name="325"><span class="lineNum"> 325 </span> : : </a>
-<a name="326"><span class="lineNum"> 326 </span> :<span class="lineNoCov"> 0 : if (fdt_totalsize(fdt) &gt; bufsize)</span></a>
-<a name="327"><span class="lineNum"> 327 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
-<a name="328"><span class="lineNum"> 328 </span> : : </a>
-<a name="329"><span class="lineNum"> 329 </span> :<span class="lineNoCov"> 0 : memmove(buf, fdt, fdt_totalsize(fdt));</span></a>
-<a name="330"><span class="lineNum"> 330 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
-<a name="331"><span class="lineNum"> 331 </span> : : }</a>
+<a name="208"><span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="209"><span class="lineNum"> 209 </span> :<span class="lineNoCov"> 0 : return FDT_END;</span></a>
+<a name="210"><span class="lineNum"> 210 </span> : : }</a>
+<a name="211"><span class="lineNum"> 211 </span> : : </a>
+<a name="212"><span class="lineNum"> 212 </span> :<span class="lineCov"> 3355 : if (!fdt_offset_ptr(fdt, startoffset, offset - startoffset))</span></a>
+<a name="213"><span class="lineNum"> 213 </span> :<span class="lineNoCov"> 0 : return FDT_END; /* premature end */</span></a>
+<a name="214"><span class="lineNum"> 214 </span> : : </a>
+<a name="215"><span class="lineNum"> 215 </span> :<span class="lineCov"> 3355 : *nextoffset = FDT_TAGALIGN(offset);</span></a>
+<a name="216"><span class="lineNum"> 216 </span> :<span class="lineCov"> 3355 : return tag;</span></a>
+<a name="217"><span class="lineNum"> 217 </span> : : }</a>
+<a name="218"><span class="lineNum"> 218 </span> : : </a>
+<a name="219"><span class="lineNum"> 219 </span> :<span class="lineCov"> 16 : int fdt_check_node_offset_(const void *fdt, int offset)</span></a>
+<a name="220"><span class="lineNum"> 220 </span> : : {</a>
+<a name="221"><span class="lineNum"> 221 </span> :<span class="lineCov"> 16 : if (!can_assume(VALID_INPUT)</span></a>
+<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 16 : &amp;&amp; ((offset &lt; 0) || (offset % FDT_TAGSIZE)))</span></a>
+<a name="223"><span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADOFFSET;</span></a>
+<a name="224"><span class="lineNum"> 224 </span> : : </a>
+<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 16 : if (fdt_next_tag(fdt, offset, &amp;offset) != FDT_BEGIN_NODE)</span></a>
+<a name="226"><span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADOFFSET;</span></a>
+<a name="227"><span class="lineNum"> 227 </span> : : </a>
+<a name="228"><span class="lineNum"> 228 </span> :<span class="lineCov"> 16 : return offset;</span></a>
+<a name="229"><span class="lineNum"> 229 </span> : : }</a>
+<a name="230"><span class="lineNum"> 230 </span> : : </a>
+<a name="231"><span class="lineNum"> 231 </span> :<span class="lineNoCov"> 0 : int fdt_check_prop_offset_(const void *fdt, int offset)</span></a>
+<a name="232"><span class="lineNum"> 232 </span> : : {</a>
+<a name="233"><span class="lineNum"> 233 </span> :<span class="lineNoCov"> 0 : if (!can_assume(VALID_INPUT)</span></a>
+<a name="234"><span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : &amp;&amp; ((offset &lt; 0) || (offset % FDT_TAGSIZE)))</span></a>
+<a name="235"><span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADOFFSET;</span></a>
+<a name="236"><span class="lineNum"> 236 </span> : : </a>
+<a name="237"><span class="lineNum"> 237 </span> :<span class="lineNoCov"> 0 : if (fdt_next_tag(fdt, offset, &amp;offset) != FDT_PROP)</span></a>
+<a name="238"><span class="lineNum"> 238 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADOFFSET;</span></a>
+<a name="239"><span class="lineNum"> 239 </span> : : </a>
+<a name="240"><span class="lineNum"> 240 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
+<a name="241"><span class="lineNum"> 241 </span> : : }</a>
+<a name="242"><span class="lineNum"> 242 </span> : : </a>
+<a name="243"><span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : int fdt_next_node(const void *fdt, int offset, int *depth)</span></a>
+<a name="244"><span class="lineNum"> 244 </span> : : {</a>
+<a name="245"><span class="lineNum"> 245 </span> :<span class="lineNoCov"> 0 : int nextoffset = 0;</span></a>
+<a name="246"><span class="lineNum"> 246 </span> : : uint32_t tag;</a>
+<a name="247"><span class="lineNum"> 247 </span> : : </a>
+<a name="248"><span class="lineNum"> 248 </span> :<span class="lineNoCov"> 0 : if (offset &gt;= 0)</span></a>
+<a name="249"><span class="lineNum"> 249 </span> :<span class="lineNoCov"> 0 : if ((nextoffset = fdt_check_node_offset_(fdt, offset)) &lt; 0)</span></a>
+<a name="250"><span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : return nextoffset;</span></a>
+<a name="251"><span class="lineNum"> 251 </span> : : </a>
+<a name="252"><span class="lineNum"> 252 </span> : : do {</a>
+<a name="253"><span class="lineNum"> 253 </span> :<span class="lineNoCov"> 0 : offset = nextoffset;</span></a>
+<a name="254"><span class="lineNum"> 254 </span> :<span class="lineNoCov"> 0 : tag = fdt_next_tag(fdt, offset, &amp;nextoffset);</span></a>
+<a name="255"><span class="lineNum"> 255 </span> : : </a>
+<a name="256"><span class="lineNum"> 256 </span> :<span class="lineNoCov"> 0 : switch (tag) {</span></a>
+<a name="257"><span class="lineNum"> 257 </span> :<span class="lineNoCov"> 0 : case FDT_PROP:</span></a>
+<a name="258"><span class="lineNum"> 258 </span> : : case FDT_NOP:</a>
+<a name="259"><span class="lineNum"> 259 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="260"><span class="lineNum"> 260 </span> : : </a>
+<a name="261"><span class="lineNum"> 261 </span> :<span class="lineNoCov"> 0 : case FDT_BEGIN_NODE:</span></a>
+<a name="262"><span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : if (depth)</span></a>
+<a name="263"><span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : (*depth)++;</span></a>
+<a name="264"><span class="lineNum"> 264 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="265"><span class="lineNum"> 265 </span> : : </a>
+<a name="266"><span class="lineNum"> 266 </span> :<span class="lineNoCov"> 0 : case FDT_END_NODE:</span></a>
+<a name="267"><span class="lineNum"> 267 </span> :<span class="lineNoCov"> 0 : if (depth &amp;&amp; ((--(*depth)) &lt; 0))</span></a>
+<a name="268"><span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : return nextoffset;</span></a>
+<a name="269"><span class="lineNum"> 269 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="270"><span class="lineNum"> 270 </span> : : </a>
+<a name="271"><span class="lineNum"> 271 </span> :<span class="lineNoCov"> 0 : case FDT_END:</span></a>
+<a name="272"><span class="lineNum"> 272 </span> :<span class="lineNoCov"> 0 : if ((nextoffset &gt;= 0)</span></a>
+<a name="273"><span class="lineNum"> 273 </span> :<span class="lineNoCov"> 0 : || ((nextoffset == -FDT_ERR_TRUNCATED) &amp;&amp; !depth))</span></a>
+<a name="274"><span class="lineNum"> 274 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOTFOUND;</span></a>
+<a name="275"><span class="lineNum"> 275 </span> : : else</a>
+<a name="276"><span class="lineNum"> 276 </span> :<span class="lineNoCov"> 0 : return nextoffset;</span></a>
+<a name="277"><span class="lineNum"> 277 </span> : : }</a>
+<a name="278"><span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : } while (tag != FDT_BEGIN_NODE);</span></a>
+<a name="279"><span class="lineNum"> 279 </span> : : </a>
+<a name="280"><span class="lineNum"> 280 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
+<a name="281"><span class="lineNum"> 281 </span> : : }</a>
+<a name="282"><span class="lineNum"> 282 </span> : : </a>
+<a name="283"><span class="lineNum"> 283 </span> :<span class="lineNoCov"> 0 : int fdt_first_subnode(const void *fdt, int offset)</span></a>
+<a name="284"><span class="lineNum"> 284 </span> : : {</a>
+<a name="285"><span class="lineNum"> 285 </span> :<span class="lineNoCov"> 0 : int depth = 0;</span></a>
+<a name="286"><span class="lineNum"> 286 </span> : : </a>
+<a name="287"><span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, &amp;depth);</span></a>
+<a name="288"><span class="lineNum"> 288 </span> :<span class="lineNoCov"> 0 : if (offset &lt; 0 || depth != 1)</span></a>
+<a name="289"><span class="lineNum"> 289 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOTFOUND;</span></a>
+<a name="290"><span class="lineNum"> 290 </span> : : </a>
+<a name="291"><span class="lineNum"> 291 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
+<a name="292"><span class="lineNum"> 292 </span> : : }</a>
+<a name="293"><span class="lineNum"> 293 </span> : : </a>
+<a name="294"><span class="lineNum"> 294 </span> :<span class="lineNoCov"> 0 : int fdt_next_subnode(const void *fdt, int offset)</span></a>
+<a name="295"><span class="lineNum"> 295 </span> : : {</a>
+<a name="296"><span class="lineNum"> 296 </span> :<span class="lineNoCov"> 0 : int depth = 1;</span></a>
+<a name="297"><span class="lineNum"> 297 </span> : : </a>
+<a name="298"><span class="lineNum"> 298 </span> : : /*</a>
+<a name="299"><span class="lineNum"> 299 </span> : : * With respect to the parent, the depth of the next subnode will be</a>
+<a name="300"><span class="lineNum"> 300 </span> : : * the same as the last.</a>
+<a name="301"><span class="lineNum"> 301 </span> : : */</a>
+<a name="302"><span class="lineNum"> 302 </span> : : do {</a>
+<a name="303"><span class="lineNum"> 303 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, &amp;depth);</span></a>
+<a name="304"><span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : if (offset &lt; 0 || depth &lt; 1)</span></a>
+<a name="305"><span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOTFOUND;</span></a>
+<a name="306"><span class="lineNum"> 306 </span> :<span class="lineNoCov"> 0 : } while (depth &gt; 1);</span></a>
+<a name="307"><span class="lineNum"> 307 </span> : : </a>
+<a name="308"><span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
+<a name="309"><span class="lineNum"> 309 </span> : : }</a>
+<a name="310"><span class="lineNum"> 310 </span> : : </a>
+<a name="311"><span class="lineNum"> 311 </span> :<span class="lineCov"> 2811 : const char *fdt_find_string_(const char *strtab, int tabsize, const char *s)</span></a>
+<a name="312"><span class="lineNum"> 312 </span> : : {</a>
+<a name="313"><span class="lineNum"> 313 </span> :<span class="lineCov"> 2811 : int len = strlen(s) + 1;</span></a>
+<a name="314"><span class="lineNum"> 314 </span> :<span class="lineCov"> 2811 : const char *last = strtab + tabsize - len;</span></a>
+<a name="315"><span class="lineNum"> 315 </span> : : const char *p;</a>
+<a name="316"><span class="lineNum"> 316 </span> : : </a>
+<a name="317"><span class="lineNum"> 317 </span> :<span class="lineCov"> 1245330 : for (p = strtab; p &lt;= last; p++)</span></a>
+<a name="318"><span class="lineNum"> 318 </span> :<span class="lineCov"> 1245130 : if (memcmp(p, s, len) == 0)</span></a>
+<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 2613 : return p;</span></a>
+<a name="320"><span class="lineNum"> 320 </span> :<span class="lineCov"> 198 : return NULL;</span></a>
+<a name="321"><span class="lineNum"> 321 </span> : : }</a>
+<a name="322"><span class="lineNum"> 322 </span> : : </a>
+<a name="323"><span class="lineNum"> 323 </span> :<span class="lineNoCov"> 0 : int fdt_move(const void *fdt, void *buf, int bufsize)</span></a>
+<a name="324"><span class="lineNum"> 324 </span> : : {</a>
+<a name="325"><span class="lineNum"> 325 </span> :<span class="lineNoCov"> 0 : if (!can_assume(VALID_INPUT) &amp;&amp; bufsize &lt; 0)</span></a>
+<a name="326"><span class="lineNum"> 326 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
+<a name="327"><span class="lineNum"> 327 </span> : : </a>
+<a name="328"><span class="lineNum"> 328 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
+<a name="329"><span class="lineNum"> 329 </span> : : </a>
+<a name="330"><span class="lineNum"> 330 </span> :<span class="lineNoCov"> 0 : if (fdt_totalsize(fdt) &gt; (unsigned int)bufsize)</span></a>
+<a name="331"><span class="lineNum"> 331 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
+<a name="332"><span class="lineNum"> 332 </span> : : </a>
+<a name="333"><span class="lineNum"> 333 </span> :<span class="lineNoCov"> 0 : memmove(buf, fdt, fdt_totalsize(fdt));</span></a>
+<a name="334"><span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
+<a name="335"><span class="lineNum"> 335 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/libfdt/fdt_ro.c.func-sort-c.html b/coverage-report/libfdt/fdt_ro.c.func-sort-c.html
index 5eccc46..fda96d1 100644
--- a/coverage-report/libfdt/fdt_ro.c.func-sort-c.html
+++ b/coverage-report/libfdt/fdt_ro.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">27</td>
- <td class="headerCovTableEntry">455</td>
- <td class="headerCovTableEntryLo">5.9 %</td>
+ <td class="headerCovTableEntry">29</td>
+ <td class="headerCovTableEntry">427</td>
+ <td class="headerCovTableEntryLo">6.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
- <td class="headerCovTableEntry">41</td>
- <td class="headerCovTableEntryLo">7.3 %</td>
+ <td class="headerCovTableEntry">40</td>
+ <td class="headerCovTableEntryLo">7.5 %</td>
</tr>
<tr>
<td></td>
@@ -69,167 +69,163 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#879">fdt_check_full</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#112">fdt_find_max_phandle</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#145">fdt_find_max_phandle</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#336">fdt_first_property_offset</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#366">fdt_first_property_offset</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#140">fdt_generate_phandle</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#173">fdt_generate_phandle</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#535">fdt_get_alias</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#558">fdt_get_alias</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#523">fdt_get_alias_namelen</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#546">fdt_get_alias_namelen</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#173">fdt_get_mem_rsv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#203">fdt_get_mem_rsv</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#540">fdt_get_path</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#563">fdt_get_path</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#506">fdt_get_phandle</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#529">fdt_get_phandle</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#441">fdt_get_property</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#469">fdt_get_property</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#376">fdt_get_property_by_offset</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#405">fdt_get_property_by_offset</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#354">fdt_get_property_by_offset_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#384">fdt_get_property_by_offset_</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#423">fdt_get_property_namelen</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#451">fdt_get_property_namelen</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#392">fdt_get_property_namelen_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#421">fdt_get_property_namelen_</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#500">fdt_getprop</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#523">fdt_getprop</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#467">fdt_getprop_by_offset</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#495">fdt_getprop_by_offset</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#449">fdt_getprop_namelen</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#477">fdt_getprop_namelen</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#158">fdt_mem_rsv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#191">fdt_mem_rsv</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#346">fdt_next_property_offset</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#376">fdt_next_property_offset</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#821">fdt_node_check_compatible</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#841">fdt_node_check_compatible</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#630">fdt_node_depth</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#651">fdt_node_depth</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#834">fdt_node_offset_by_compatible</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#854">fdt_node_offset_by_compatible</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#679">fdt_node_offset_by_phandle</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#699">fdt_node_offset_by_phandle</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#652">fdt_node_offset_by_prop_value</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#672">fdt_node_offset_by_prop_value</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#11">fdt_nodename_eq_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#56">fdt_nodename_eq_</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#187">fdt_num_mem_rsv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#217">fdt_num_mem_rsv</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#642">fdt_parent_offset</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#662">fdt_parent_offset</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#293">fdt_path_offset</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#323">fdt_path_offset</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#248">fdt_path_offset_namelen</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#278">fdt_path_offset_namelen</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#103">fdt_string_eq_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#136">fdt_string_eq_</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#704">fdt_stringlist_contains</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#724">fdt_stringlist_contains</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#721">fdt_stringlist_count</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#741">fdt_stringlist_count</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#776">fdt_stringlist_get</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#796">fdt_stringlist_get</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#746">fdt_stringlist_search</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#766">fdt_stringlist_search</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#242">fdt_subnode_offset</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#272">fdt_subnode_offset</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#223">fdt_subnode_offset_namelen</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#253">fdt_subnode_offset_namelen</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#592">fdt_supernode_atdepth_offset</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#615">fdt_supernode_atdepth_offset</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#199">nextprop_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#229">nextprop_</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#328">fdt_get_name</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#298">fdt_get_name</a></td>
<td class="coverFnHi">7</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#77">fdt_get_string</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#32">fdt_get_string</a></td>
<td class="coverFnHi">38</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#131">fdt_string</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#98">fdt_string</a></td>
<td class="coverFnHi">38</td>
</tr>
</table>
diff --git a/coverage-report/libfdt/fdt_ro.c.func.html b/coverage-report/libfdt/fdt_ro.c.func.html
index 2ce8969..183e912 100644
--- a/coverage-report/libfdt/fdt_ro.c.func.html
+++ b/coverage-report/libfdt/fdt_ro.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">27</td>
- <td class="headerCovTableEntry">455</td>
- <td class="headerCovTableEntryLo">5.9 %</td>
+ <td class="headerCovTableEntry">29</td>
+ <td class="headerCovTableEntry">427</td>
+ <td class="headerCovTableEntryLo">6.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
- <td class="headerCovTableEntry">41</td>
- <td class="headerCovTableEntryLo">7.3 %</td>
+ <td class="headerCovTableEntry">40</td>
+ <td class="headerCovTableEntryLo">7.5 %</td>
</tr>
<tr>
<td></td>
@@ -69,167 +69,163 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fdt_ro.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#879">fdt_check_full</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#112">fdt_find_max_phandle</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#145">fdt_find_max_phandle</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#336">fdt_first_property_offset</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#366">fdt_first_property_offset</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#140">fdt_generate_phandle</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#173">fdt_generate_phandle</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#535">fdt_get_alias</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#558">fdt_get_alias</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#523">fdt_get_alias_namelen</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#546">fdt_get_alias_namelen</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#173">fdt_get_mem_rsv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#203">fdt_get_mem_rsv</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#328">fdt_get_name</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#298">fdt_get_name</a></td>
<td class="coverFnHi">7</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#563">fdt_get_path</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#540">fdt_get_path</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#529">fdt_get_phandle</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#506">fdt_get_phandle</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#469">fdt_get_property</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#441">fdt_get_property</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#405">fdt_get_property_by_offset</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#376">fdt_get_property_by_offset</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#384">fdt_get_property_by_offset_</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#354">fdt_get_property_by_offset_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#451">fdt_get_property_namelen</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#423">fdt_get_property_namelen</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#421">fdt_get_property_namelen_</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#392">fdt_get_property_namelen_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#77">fdt_get_string</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#32">fdt_get_string</a></td>
<td class="coverFnHi">38</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#523">fdt_getprop</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#500">fdt_getprop</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#495">fdt_getprop_by_offset</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#467">fdt_getprop_by_offset</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#477">fdt_getprop_namelen</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#449">fdt_getprop_namelen</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#191">fdt_mem_rsv</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#158">fdt_mem_rsv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#376">fdt_next_property_offset</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#346">fdt_next_property_offset</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#841">fdt_node_check_compatible</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#821">fdt_node_check_compatible</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#651">fdt_node_depth</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#630">fdt_node_depth</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#854">fdt_node_offset_by_compatible</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#834">fdt_node_offset_by_compatible</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#699">fdt_node_offset_by_phandle</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#679">fdt_node_offset_by_phandle</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#672">fdt_node_offset_by_prop_value</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#652">fdt_node_offset_by_prop_value</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#56">fdt_nodename_eq_</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#11">fdt_nodename_eq_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#217">fdt_num_mem_rsv</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#187">fdt_num_mem_rsv</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#662">fdt_parent_offset</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#642">fdt_parent_offset</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#323">fdt_path_offset</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#293">fdt_path_offset</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#278">fdt_path_offset_namelen</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#248">fdt_path_offset_namelen</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#131">fdt_string</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#98">fdt_string</a></td>
<td class="coverFnHi">38</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#136">fdt_string_eq_</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#103">fdt_string_eq_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#724">fdt_stringlist_contains</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#704">fdt_stringlist_contains</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#741">fdt_stringlist_count</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#721">fdt_stringlist_count</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#796">fdt_stringlist_get</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#776">fdt_stringlist_get</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#766">fdt_stringlist_search</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#746">fdt_stringlist_search</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#272">fdt_subnode_offset</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#242">fdt_subnode_offset</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#253">fdt_subnode_offset_namelen</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#223">fdt_subnode_offset_namelen</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#615">fdt_supernode_atdepth_offset</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#592">fdt_supernode_atdepth_offset</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_ro.c.gcov.html#229">nextprop_</a></td>
+ <td class="coverFn"><a href="fdt_ro.c.gcov.html#199">nextprop_</a></td>
<td class="coverFnLo">0</td>
</tr>
</table>
diff --git a/coverage-report/libfdt/fdt_ro.c.gcov.html b/coverage-report/libfdt/fdt_ro.c.gcov.html
index 7884055..4f760c8 100644
--- a/coverage-report/libfdt/fdt_ro.c.gcov.html
+++ b/coverage-report/libfdt/fdt_ro.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">27</td>
- <td class="headerCovTableEntry">455</td>
- <td class="headerCovTableEntryLo">5.9 %</td>
+ <td class="headerCovTableEntry">29</td>
+ <td class="headerCovTableEntry">427</td>
+ <td class="headerCovTableEntryLo">6.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
- <td class="headerCovTableEntry">41</td>
- <td class="headerCovTableEntryLo">7.3 %</td>
+ <td class="headerCovTableEntry">40</td>
+ <td class="headerCovTableEntryLo">7.5 %</td>
</tr>
<tr>
<td></td>
@@ -69,948 +69,865 @@
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
-<a name="1"><span class="lineNum"> 1 </span> : : /*</a>
-<a name="2"><span class="lineNum"> 2 </span> : : * libfdt - Flat Device Tree manipulation</a>
-<a name="3"><span class="lineNum"> 3 </span> : : * Copyright (C) 2006 David Gibson, IBM Corporation.</a>
-<a name="4"><span class="lineNum"> 4 </span> : : *</a>
-<a name="5"><span class="lineNum"> 5 </span> : : * libfdt is dual licensed: you can use it either under the terms of</a>
-<a name="6"><span class="lineNum"> 6 </span> : : * the GPL, or the BSD license, at your option.</a>
-<a name="7"><span class="lineNum"> 7 </span> : : *</a>
-<a name="8"><span class="lineNum"> 8 </span> : : * a) This library is free software; you can redistribute it and/or</a>
-<a name="9"><span class="lineNum"> 9 </span> : : * modify it under the terms of the GNU General Public License as</a>
-<a name="10"><span class="lineNum"> 10 </span> : : * published by the Free Software Foundation; either version 2 of the</a>
-<a name="11"><span class="lineNum"> 11 </span> : : * License, or (at your option) any later version.</a>
-<a name="12"><span class="lineNum"> 12 </span> : : *</a>
-<a name="13"><span class="lineNum"> 13 </span> : : * This library is distributed in the hope that it will be useful,</a>
-<a name="14"><span class="lineNum"> 14 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of</a>
-<a name="15"><span class="lineNum"> 15 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</a>
-<a name="16"><span class="lineNum"> 16 </span> : : * GNU General Public License for more details.</a>
-<a name="17"><span class="lineNum"> 17 </span> : : *</a>
-<a name="18"><span class="lineNum"> 18 </span> : : * You should have received a copy of the GNU General Public</a>
-<a name="19"><span class="lineNum"> 19 </span> : : * License along with this library; if not, write to the Free</a>
-<a name="20"><span class="lineNum"> 20 </span> : : * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,</a>
-<a name="21"><span class="lineNum"> 21 </span> : : * MA 02110-1301 USA</a>
-<a name="22"><span class="lineNum"> 22 </span> : : *</a>
-<a name="23"><span class="lineNum"> 23 </span> : : * Alternatively,</a>
-<a name="24"><span class="lineNum"> 24 </span> : : *</a>
-<a name="25"><span class="lineNum"> 25 </span> : : * b) Redistribution and use in source and binary forms, with or</a>
-<a name="26"><span class="lineNum"> 26 </span> : : * without modification, are permitted provided that the following</a>
-<a name="27"><span class="lineNum"> 27 </span> : : * conditions are met:</a>
-<a name="28"><span class="lineNum"> 28 </span> : : *</a>
-<a name="29"><span class="lineNum"> 29 </span> : : * 1. Redistributions of source code must retain the above</a>
-<a name="30"><span class="lineNum"> 30 </span> : : * copyright notice, this list of conditions and the following</a>
-<a name="31"><span class="lineNum"> 31 </span> : : * disclaimer.</a>
-<a name="32"><span class="lineNum"> 32 </span> : : * 2. Redistributions in binary form must reproduce the above</a>
-<a name="33"><span class="lineNum"> 33 </span> : : * copyright notice, this list of conditions and the following</a>
-<a name="34"><span class="lineNum"> 34 </span> : : * disclaimer in the documentation and/or other materials</a>
-<a name="35"><span class="lineNum"> 35 </span> : : * provided with the distribution.</a>
-<a name="36"><span class="lineNum"> 36 </span> : : *</a>
-<a name="37"><span class="lineNum"> 37 </span> : : * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND</a>
-<a name="38"><span class="lineNum"> 38 </span> : : * CONTRIBUTORS &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES,</a>
-<a name="39"><span class="lineNum"> 39 </span> : : * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</a>
-<a name="40"><span class="lineNum"> 40 </span> : : * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE</a>
-<a name="41"><span class="lineNum"> 41 </span> : : * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR</a>
-<a name="42"><span class="lineNum"> 42 </span> : : * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</a>
-<a name="43"><span class="lineNum"> 43 </span> : : * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT</a>
-<a name="44"><span class="lineNum"> 44 </span> : : * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;</a>
-<a name="45"><span class="lineNum"> 45 </span> : : * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</a>
-<a name="46"><span class="lineNum"> 46 </span> : : * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</a>
-<a name="47"><span class="lineNum"> 47 </span> : : * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR</a>
-<a name="48"><span class="lineNum"> 48 </span> : : * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,</a>
-<a name="49"><span class="lineNum"> 49 </span> : : * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</a>
-<a name="50"><span class="lineNum"> 50 </span> : : */</a>
-<a name="51"><span class="lineNum"> 51 </span> : : #include &quot;libfdt_env.h&quot;</a>
-<a name="52"><span class="lineNum"> 52 </span> : : </a>
-<a name="53"><span class="lineNum"> 53 </span> : : #include &lt;fdt.h&gt;</a>
-<a name="54"><span class="lineNum"> 54 </span> : : #include &lt;libfdt.h&gt;</a>
-<a name="55"><span class="lineNum"> 55 </span> : : </a>
-<a name="56"><span class="lineNum"> 56 </span> : : #include &quot;libfdt_internal.h&quot;</a>
-<a name="57"><span class="lineNum"> 57 </span> : : </a>
-<a name="58"><span class="lineNum"> 58 </span> :<span class="lineNoCov"> 0 : static int fdt_nodename_eq_(const void *fdt, int offset,</span></a>
-<a name="59"><span class="lineNum"> 59 </span> : : const char *s, int len)</a>
-<a name="60"><span class="lineNum"> 60 </span> : : {</a>
-<a name="61"><span class="lineNum"> 61 </span> : : int olen;</a>
-<a name="62"><span class="lineNum"> 62 </span> :<span class="lineNoCov"> 0 : const char *p = fdt_get_name(fdt, offset, &amp;olen);</span></a>
-<a name="63"><span class="lineNum"> 63 </span> : : </a>
-<a name="64"><span class="lineNum"> 64 </span> :<span class="lineNoCov"> 0 : if (!p || olen &lt; len)</span></a>
-<a name="65"><span class="lineNum"> 65 </span> : : /* short match */</a>
-<a name="66"><span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
-<a name="67"><span class="lineNum"> 67 </span> : : </a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineNoCov"> 0 : if (memcmp(p, s, len) != 0)</span></a>
-<a name="69"><span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
-<a name="70"><span class="lineNum"> 70 </span> : : </a>
-<a name="71"><span class="lineNum"> 71 </span> :<span class="lineNoCov"> 0 : if (p[len] == '\0')</span></a>
-<a name="72"><span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : return 1;</span></a>
-<a name="73"><span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : else if (!memchr(s, '@', len) &amp;&amp; (p[len] == '@'))</span></a>
-<a name="74"><span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : return 1;</span></a>
-<a name="75"><span class="lineNum"> 75 </span> : : else</a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
-<a name="77"><span class="lineNum"> 77 </span> : : }</a>
-<a name="78"><span class="lineNum"> 78 </span> : : </a>
-<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 38 : const char *fdt_get_string(const void *fdt, int stroffset, int *lenp)</span></a>
-<a name="80"><span class="lineNum"> 80 </span> : : {</a>
-<a name="81"><span class="lineNum"> 81 </span> :<span class="lineCov"> 38 : uint32_t absoffset = stroffset + fdt_off_dt_strings(fdt);</span></a>
-<a name="82"><span class="lineNum"> 82 </span> : : size_t len;</a>
-<a name="83"><span class="lineNum"> 83 </span> : : int err;</a>
-<a name="84"><span class="lineNum"> 84 </span> : : const char *s, *n;</a>
-<a name="85"><span class="lineNum"> 85 </span> : : </a>
-<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 38 : err = fdt_ro_probe_(fdt);</span></a>
-<a name="87"><span class="lineNum"> 87 </span> :<span class="lineCov"> 38 : if (err != 0)</span></a>
-<a name="88"><span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
+<a name="1"><span class="lineNum"> 1 </span> : : // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)</a>
+<a name="2"><span class="lineNum"> 2 </span> : : /*</a>
+<a name="3"><span class="lineNum"> 3 </span> : : * libfdt - Flat Device Tree manipulation</a>
+<a name="4"><span class="lineNum"> 4 </span> : : * Copyright (C) 2006 David Gibson, IBM Corporation.</a>
+<a name="5"><span class="lineNum"> 5 </span> : : */</a>
+<a name="6"><span class="lineNum"> 6 </span> : : #include &quot;libfdt_env.h&quot;</a>
+<a name="7"><span class="lineNum"> 7 </span> : : </a>
+<a name="8"><span class="lineNum"> 8 </span> : : #include &lt;fdt.h&gt;</a>
+<a name="9"><span class="lineNum"> 9 </span> : : #include &lt;libfdt.h&gt;</a>
+<a name="10"><span class="lineNum"> 10 </span> : : </a>
+<a name="11"><span class="lineNum"> 11 </span> : : #include &quot;libfdt_internal.h&quot;</a>
+<a name="12"><span class="lineNum"> 12 </span> : : </a>
+<a name="13"><span class="lineNum"> 13 </span> :<span class="lineNoCov"> 0 : static int fdt_nodename_eq_(const void *fdt, int offset,</span></a>
+<a name="14"><span class="lineNum"> 14 </span> : : const char *s, int len)</a>
+<a name="15"><span class="lineNum"> 15 </span> : : {</a>
+<a name="16"><span class="lineNum"> 16 </span> : : int olen;</a>
+<a name="17"><span class="lineNum"> 17 </span> :<span class="lineNoCov"> 0 : const char *p = fdt_get_name(fdt, offset, &amp;olen);</span></a>
+<a name="18"><span class="lineNum"> 18 </span> : : </a>
+<a name="19"><span class="lineNum"> 19 </span> :<span class="lineNoCov"> 0 : if (!p || olen &lt; len)</span></a>
+<a name="20"><span class="lineNum"> 20 </span> : : /* short match */</a>
+<a name="21"><span class="lineNum"> 21 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
+<a name="22"><span class="lineNum"> 22 </span> : : </a>
+<a name="23"><span class="lineNum"> 23 </span> :<span class="lineNoCov"> 0 : if (memcmp(p, s, len) != 0)</span></a>
+<a name="24"><span class="lineNum"> 24 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
+<a name="25"><span class="lineNum"> 25 </span> : : </a>
+<a name="26"><span class="lineNum"> 26 </span> :<span class="lineNoCov"> 0 : if (p[len] == '\0')</span></a>
+<a name="27"><span class="lineNum"> 27 </span> :<span class="lineNoCov"> 0 : return 1;</span></a>
+<a name="28"><span class="lineNum"> 28 </span> :<span class="lineNoCov"> 0 : else if (!memchr(s, '@', len) &amp;&amp; (p[len] == '@'))</span></a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineNoCov"> 0 : return 1;</span></a>
+<a name="30"><span class="lineNum"> 30 </span> : : else</a>
+<a name="31"><span class="lineNum"> 31 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
+<a name="32"><span class="lineNum"> 32 </span> : : }</a>
+<a name="33"><span class="lineNum"> 33 </span> : : </a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 38 : const char *fdt_get_string(const void *fdt, int stroffset, int *lenp)</span></a>
+<a name="35"><span class="lineNum"> 35 </span> : : {</a>
+<a name="36"><span class="lineNum"> 36 </span> : : int32_t totalsize;</a>
+<a name="37"><span class="lineNum"> 37 </span> : : uint32_t absoffset;</a>
+<a name="38"><span class="lineNum"> 38 </span> : : size_t len;</a>
+<a name="39"><span class="lineNum"> 39 </span> : : int err;</a>
+<a name="40"><span class="lineNum"> 40 </span> : : const char *s, *n;</a>
+<a name="41"><span class="lineNum"> 41 </span> : : </a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 38 : if (can_assume(VALID_INPUT)) {</span></a>
+<a name="43"><span class="lineNum"> 43 </span> :<span class="lineNoCov"> 0 : s = (const char *)fdt + fdt_off_dt_strings(fdt) + stroffset;</span></a>
+<a name="44"><span class="lineNum"> 44 </span> : : </a>
+<a name="45"><span class="lineNum"> 45 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
+<a name="46"><span class="lineNum"> 46 </span> :<span class="lineNoCov"> 0 : *lenp = strlen(s);</span></a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineNoCov"> 0 : return s;</span></a>
+<a name="48"><span class="lineNum"> 48 </span> : : }</a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 38 : totalsize = fdt_ro_probe_(fdt);</span></a>
+<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 38 : err = totalsize;</span></a>
+<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 38 : if (totalsize &lt; 0)</span></a>
+<a name="52"><span class="lineNum"> 52 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
+<a name="53"><span class="lineNum"> 53 </span> : : </a>
+<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 38 : err = -FDT_ERR_BADOFFSET;</span></a>
+<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 38 : absoffset = stroffset + fdt_off_dt_strings(fdt);</span></a>
+<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 38 : if (absoffset &gt;= (unsigned)totalsize)</span></a>
+<a name="57"><span class="lineNum"> 57 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
+<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 38 : len = totalsize - absoffset;</span></a>
+<a name="59"><span class="lineNum"> 59 </span> : : </a>
+<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 38 : if (fdt_magic(fdt) == FDT_MAGIC) {</span></a>
+<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 38 : if (stroffset &lt; 0)</span></a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
+<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 38 : if (can_assume(LATEST) || fdt_version(fdt) &gt;= 17) {</span></a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 38 : if ((unsigned)stroffset &gt;= fdt_size_dt_strings(fdt))</span></a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
+<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 38 : if ((fdt_size_dt_strings(fdt) - stroffset) &lt; len)</span></a>
+<a name="67"><span class="lineNum"> 67 </span> :<span class="lineNoCov"> 0 : len = fdt_size_dt_strings(fdt) - stroffset;</span></a>
+<a name="68"><span class="lineNum"> 68 </span> : : }</a>
+<a name="69"><span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : } else if (fdt_magic(fdt) == FDT_SW_MAGIC) {</span></a>
+<a name="70"><span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : unsigned int sw_stroffset = -stroffset;</span></a>
+<a name="71"><span class="lineNum"> 71 </span> : : </a>
+<a name="72"><span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : if ((stroffset &gt;= 0) ||</span></a>
+<a name="73"><span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : (sw_stroffset &gt; fdt_size_dt_strings(fdt)))</span></a>
+<a name="74"><span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineNoCov"> 0 : if (sw_stroffset &lt; len)</span></a>
+<a name="76"><span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : len = sw_stroffset;</span></a>
+<a name="77"><span class="lineNum"> 77 </span> : : } else {</a>
+<a name="78"><span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : err = -FDT_ERR_INTERNAL;</span></a>
+<a name="79"><span class="lineNum"> 79 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
+<a name="80"><span class="lineNum"> 80 </span> : : }</a>
+<a name="81"><span class="lineNum"> 81 </span> : : </a>
+<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 38 : s = (const char *)fdt + absoffset;</span></a>
+<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 38 : n = memchr(s, '\0', len);</span></a>
+<a name="84"><span class="lineNum"> 84 </span> :<span class="lineCov"> 38 : if (!n) {</span></a>
+<a name="85"><span class="lineNum"> 85 </span> : : /* missing terminating NULL */</a>
+<a name="86"><span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : err = -FDT_ERR_TRUNCATED;</span></a>
+<a name="87"><span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
+<a name="88"><span class="lineNum"> 88 </span> : : }</a>
<a name="89"><span class="lineNum"> 89 </span> : : </a>
-<a name="90"><span class="lineNum"> 90 </span> :<span class="lineCov"> 38 : err = -FDT_ERR_BADOFFSET;</span></a>
-<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 38 : if (absoffset &gt;= fdt_totalsize(fdt))</span></a>
-<a name="92"><span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
-<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 38 : len = fdt_totalsize(fdt) - absoffset;</span></a>
-<a name="94"><span class="lineNum"> 94 </span> : : </a>
-<a name="95"><span class="lineNum"> 95 </span> :<span class="lineCov"> 38 : if (fdt_magic(fdt) == FDT_MAGIC) {</span></a>
-<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 38 : if (stroffset &lt; 0)</span></a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
-<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 38 : if (fdt_version(fdt) &gt;= 17) {</span></a>
-<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 38 : if (stroffset &gt;= fdt_size_dt_strings(fdt))</span></a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
-<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 38 : if ((fdt_size_dt_strings(fdt) - stroffset) &lt; len)</span></a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : len = fdt_size_dt_strings(fdt) - stroffset;</span></a>
-<a name="103"><span class="lineNum"> 103 </span> : : }</a>
-<a name="104"><span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : } else if (fdt_magic(fdt) == FDT_SW_MAGIC) {</span></a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : if ((stroffset &gt;= 0)</span></a>
-<a name="106"><span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : || (stroffset &lt; -fdt_size_dt_strings(fdt)))</span></a>
-<a name="107"><span class="lineNum"> 107 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
-<a name="108"><span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : if ((-stroffset) &lt; len)</span></a>
-<a name="109"><span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : len = -stroffset;</span></a>
-<a name="110"><span class="lineNum"> 110 </span> : : } else {</a>
-<a name="111"><span class="lineNum"> 111 </span> :<span class="lineNoCov"> 0 : err = -FDT_ERR_INTERNAL;</span></a>
-<a name="112"><span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
-<a name="113"><span class="lineNum"> 113 </span> : : }</a>
-<a name="114"><span class="lineNum"> 114 </span> : : </a>
-<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 38 : s = (const char *)fdt + absoffset;</span></a>
-<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 38 : n = memchr(s, '\0', len);</span></a>
-<a name="117"><span class="lineNum"> 117 </span> :<span class="lineCov"> 38 : if (!n) {</span></a>
-<a name="118"><span class="lineNum"> 118 </span> : : /* missing terminating NULL */</a>
-<a name="119"><span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : err = -FDT_ERR_TRUNCATED;</span></a>
-<a name="120"><span class="lineNum"> 120 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
-<a name="121"><span class="lineNum"> 121 </span> : : }</a>
-<a name="122"><span class="lineNum"> 122 </span> : : </a>
-<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 38 : if (lenp)</span></a>
-<a name="124"><span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : *lenp = n - s;</span></a>
-<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 38 : return s;</span></a>
+<a name="90"><span class="lineNum"> 90 </span> :<span class="lineCov"> 38 : if (lenp)</span></a>
+<a name="91"><span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : *lenp = n - s;</span></a>
+<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 38 : return s;</span></a>
+<a name="93"><span class="lineNum"> 93 </span> : : </a>
+<a name="94"><span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : fail:</span></a>
+<a name="95"><span class="lineNum"> 95 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
+<a name="96"><span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : *lenp = err;</span></a>
+<a name="97"><span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="98"><span class="lineNum"> 98 </span> : : }</a>
+<a name="99"><span class="lineNum"> 99 </span> : : </a>
+<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 38 : const char *fdt_string(const void *fdt, int stroffset)</span></a>
+<a name="101"><span class="lineNum"> 101 </span> : : {</a>
+<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 38 : return fdt_get_string(fdt, stroffset, NULL);</span></a>
+<a name="103"><span class="lineNum"> 103 </span> : : }</a>
+<a name="104"><span class="lineNum"> 104 </span> : : </a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : static int fdt_string_eq_(const void *fdt, int stroffset,</span></a>
+<a name="106"><span class="lineNum"> 106 </span> : : const char *s, int len)</a>
+<a name="107"><span class="lineNum"> 107 </span> : : {</a>
+<a name="108"><span class="lineNum"> 108 </span> : : int slen;</a>
+<a name="109"><span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : const char *p = fdt_get_string(fdt, stroffset, &amp;slen);</span></a>
+<a name="110"><span class="lineNum"> 110 </span> : : </a>
+<a name="111"><span class="lineNum"> 111 </span> :<span class="lineNoCov"> 0 : return p &amp;&amp; (slen == len) &amp;&amp; (memcmp(p, s, len) == 0);</span></a>
+<a name="112"><span class="lineNum"> 112 </span> : : }</a>
+<a name="113"><span class="lineNum"> 113 </span> : : </a>
+<a name="114"><span class="lineNum"> 114 </span> :<span class="lineNoCov"> 0 : int fdt_find_max_phandle(const void *fdt, uint32_t *phandle)</span></a>
+<a name="115"><span class="lineNum"> 115 </span> : : {</a>
+<a name="116"><span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : uint32_t max = 0;</span></a>
+<a name="117"><span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : int offset = -1;</span></a>
+<a name="118"><span class="lineNum"> 118 </span> : : </a>
+<a name="119"><span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : while (true) {</span></a>
+<a name="120"><span class="lineNum"> 120 </span> : : uint32_t value;</a>
+<a name="121"><span class="lineNum"> 121 </span> : : </a>
+<a name="122"><span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, NULL);</span></a>
+<a name="123"><span class="lineNum"> 123 </span> :<span class="lineNoCov"> 0 : if (offset &lt; 0) {</span></a>
+<a name="124"><span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : if (offset == -FDT_ERR_NOTFOUND)</span></a>
+<a name="125"><span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : break;</span></a>
<a name="126"><span class="lineNum"> 126 </span> : : </a>
-<a name="127"><span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : fail:</span></a>
-<a name="128"><span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
-<a name="129"><span class="lineNum"> 129 </span> :<span class="lineNoCov"> 0 : *lenp = err;</span></a>
-<a name="130"><span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="131"><span class="lineNum"> 131 </span> : : }</a>
-<a name="132"><span class="lineNum"> 132 </span> : : </a>
-<a name="133"><span class="lineNum"> 133 </span> :<span class="lineCov"> 38 : const char *fdt_string(const void *fdt, int stroffset)</span></a>
-<a name="134"><span class="lineNum"> 134 </span> : : {</a>
-<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 38 : return fdt_get_string(fdt, stroffset, NULL);</span></a>
-<a name="136"><span class="lineNum"> 136 </span> : : }</a>
-<a name="137"><span class="lineNum"> 137 </span> : : </a>
-<a name="138"><span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : static int fdt_string_eq_(const void *fdt, int stroffset,</span></a>
-<a name="139"><span class="lineNum"> 139 </span> : : const char *s, int len)</a>
-<a name="140"><span class="lineNum"> 140 </span> : : {</a>
-<a name="141"><span class="lineNum"> 141 </span> : : int slen;</a>
-<a name="142"><span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : const char *p = fdt_get_string(fdt, stroffset, &amp;slen);</span></a>
-<a name="143"><span class="lineNum"> 143 </span> : : </a>
-<a name="144"><span class="lineNum"> 144 </span> :<span class="lineNoCov"> 0 : return p &amp;&amp; (slen == len) &amp;&amp; (memcmp(p, s, len) == 0);</span></a>
-<a name="145"><span class="lineNum"> 145 </span> : : }</a>
+<a name="127"><span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
+<a name="128"><span class="lineNum"> 128 </span> : : }</a>
+<a name="129"><span class="lineNum"> 129 </span> : : </a>
+<a name="130"><span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : value = fdt_get_phandle(fdt, offset);</span></a>
+<a name="131"><span class="lineNum"> 131 </span> : : </a>
+<a name="132"><span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : if (value &gt; max)</span></a>
+<a name="133"><span class="lineNum"> 133 </span> :<span class="lineNoCov"> 0 : max = value;</span></a>
+<a name="134"><span class="lineNum"> 134 </span> : : }</a>
+<a name="135"><span class="lineNum"> 135 </span> : : </a>
+<a name="136"><span class="lineNum"> 136 </span> :<span class="lineNoCov"> 0 : if (phandle)</span></a>
+<a name="137"><span class="lineNum"> 137 </span> :<span class="lineNoCov"> 0 : *phandle = max;</span></a>
+<a name="138"><span class="lineNum"> 138 </span> : : </a>
+<a name="139"><span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
+<a name="140"><span class="lineNum"> 140 </span> : : }</a>
+<a name="141"><span class="lineNum"> 141 </span> : : </a>
+<a name="142"><span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : int fdt_generate_phandle(const void *fdt, uint32_t *phandle)</span></a>
+<a name="143"><span class="lineNum"> 143 </span> : : {</a>
+<a name="144"><span class="lineNum"> 144 </span> : : uint32_t max;</a>
+<a name="145"><span class="lineNum"> 145 </span> : : int err;</a>
<a name="146"><span class="lineNum"> 146 </span> : : </a>
-<a name="147"><span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : int fdt_find_max_phandle(const void *fdt, uint32_t *phandle)</span></a>
-<a name="148"><span class="lineNum"> 148 </span> : : {</a>
-<a name="149"><span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : uint32_t max = 0;</span></a>
-<a name="150"><span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : int offset = -1;</span></a>
-<a name="151"><span class="lineNum"> 151 </span> : : </a>
-<a name="152"><span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : while (true) {</span></a>
-<a name="153"><span class="lineNum"> 153 </span> : : uint32_t value;</a>
-<a name="154"><span class="lineNum"> 154 </span> : : </a>
-<a name="155"><span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, NULL);</span></a>
-<a name="156"><span class="lineNum"> 156 </span> :<span class="lineNoCov"> 0 : if (offset &lt; 0) {</span></a>
-<a name="157"><span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : if (offset == -FDT_ERR_NOTFOUND)</span></a>
-<a name="158"><span class="lineNum"> 158 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="147"><span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : err = fdt_find_max_phandle(fdt, &amp;max);</span></a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : if (err &lt; 0)</span></a>
+<a name="149"><span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : return err;</span></a>
+<a name="150"><span class="lineNum"> 150 </span> : : </a>
+<a name="151"><span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : if (max == FDT_MAX_PHANDLE)</span></a>
+<a name="152"><span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOPHANDLES;</span></a>
+<a name="153"><span class="lineNum"> 153 </span> : : </a>
+<a name="154"><span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : if (phandle)</span></a>
+<a name="155"><span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : *phandle = max + 1;</span></a>
+<a name="156"><span class="lineNum"> 156 </span> : : </a>
+<a name="157"><span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
+<a name="158"><span class="lineNum"> 158 </span> : : }</a>
<a name="159"><span class="lineNum"> 159 </span> : : </a>
-<a name="160"><span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
-<a name="161"><span class="lineNum"> 161 </span> : : }</a>
-<a name="162"><span class="lineNum"> 162 </span> : : </a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineNoCov"> 0 : value = fdt_get_phandle(fdt, offset);</span></a>
+<a name="160"><span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : static const struct fdt_reserve_entry *fdt_mem_rsv(const void *fdt, int n)</span></a>
+<a name="161"><span class="lineNum"> 161 </span> : : {</a>
+<a name="162"><span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : unsigned int offset = n * sizeof(struct fdt_reserve_entry);</span></a>
+<a name="163"><span class="lineNum"> 163 </span> :<span class="lineNoCov"> 0 : unsigned int absoffset = fdt_off_mem_rsvmap(fdt) + offset;</span></a>
<a name="164"><span class="lineNum"> 164 </span> : : </a>
-<a name="165"><span class="lineNum"> 165 </span> :<span class="lineNoCov"> 0 : if (value &gt; max)</span></a>
-<a name="166"><span class="lineNum"> 166 </span> :<span class="lineNoCov"> 0 : max = value;</span></a>
-<a name="167"><span class="lineNum"> 167 </span> : : }</a>
-<a name="168"><span class="lineNum"> 168 </span> : : </a>
-<a name="169"><span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : if (phandle)</span></a>
-<a name="170"><span class="lineNum"> 170 </span> :<span class="lineNoCov"> 0 : *phandle = max;</span></a>
-<a name="171"><span class="lineNum"> 171 </span> : : </a>
-<a name="172"><span class="lineNum"> 172 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
+<a name="165"><span class="lineNum"> 165 </span> :<span class="lineNoCov"> 0 : if (!can_assume(VALID_INPUT)) {</span></a>
+<a name="166"><span class="lineNum"> 166 </span> :<span class="lineNoCov"> 0 : if (absoffset &lt; fdt_off_mem_rsvmap(fdt))</span></a>
+<a name="167"><span class="lineNum"> 167 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="168"><span class="lineNum"> 168 </span> :<span class="lineNoCov"> 0 : if (absoffset &gt; fdt_totalsize(fdt) -</span></a>
+<a name="169"><span class="lineNum"> 169 </span> : : sizeof(struct fdt_reserve_entry))</a>
+<a name="170"><span class="lineNum"> 170 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="171"><span class="lineNum"> 171 </span> : : }</a>
+<a name="172"><span class="lineNum"> 172 </span> :<span class="lineNoCov"> 0 : return fdt_mem_rsv_(fdt, n);</span></a>
<a name="173"><span class="lineNum"> 173 </span> : : }</a>
<a name="174"><span class="lineNum"> 174 </span> : : </a>
-<a name="175"><span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : int fdt_generate_phandle(const void *fdt, uint32_t *phandle)</span></a>
+<a name="175"><span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : int fdt_get_mem_rsv(const void *fdt, int n, uint64_t *address, uint64_t *size)</span></a>
<a name="176"><span class="lineNum"> 176 </span> : : {</a>
-<a name="177"><span class="lineNum"> 177 </span> : : uint32_t max;</a>
-<a name="178"><span class="lineNum"> 178 </span> : : int err;</a>
-<a name="179"><span class="lineNum"> 179 </span> : : </a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineNoCov"> 0 : err = fdt_find_max_phandle(fdt, &amp;max);</span></a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : if (err &lt; 0)</span></a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineNoCov"> 0 : return err;</span></a>
+<a name="177"><span class="lineNum"> 177 </span> : : const struct fdt_reserve_entry *re;</a>
+<a name="178"><span class="lineNum"> 178 </span> : : </a>
+<a name="179"><span class="lineNum"> 179 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
+<a name="180"><span class="lineNum"> 180 </span> :<span class="lineNoCov"> 0 : re = fdt_mem_rsv(fdt, n);</span></a>
+<a name="181"><span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : if (!can_assume(VALID_INPUT) &amp;&amp; !re)</span></a>
+<a name="182"><span class="lineNum"> 182 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADOFFSET;</span></a>
<a name="183"><span class="lineNum"> 183 </span> : : </a>
-<a name="184"><span class="lineNum"> 184 </span> :<span class="lineNoCov"> 0 : if (max == FDT_MAX_PHANDLE)</span></a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOPHANDLES;</span></a>
-<a name="186"><span class="lineNum"> 186 </span> : : </a>
-<a name="187"><span class="lineNum"> 187 </span> :<span class="lineNoCov"> 0 : if (phandle)</span></a>
-<a name="188"><span class="lineNum"> 188 </span> :<span class="lineNoCov"> 0 : *phandle = max + 1;</span></a>
-<a name="189"><span class="lineNum"> 189 </span> : : </a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
-<a name="191"><span class="lineNum"> 191 </span> : : }</a>
-<a name="192"><span class="lineNum"> 192 </span> : : </a>
-<a name="193"><span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : static const struct fdt_reserve_entry *fdt_mem_rsv(const void *fdt, int n)</span></a>
-<a name="194"><span class="lineNum"> 194 </span> : : {</a>
-<a name="195"><span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : int offset = n * sizeof(struct fdt_reserve_entry);</span></a>
-<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : int absoffset = fdt_off_mem_rsvmap(fdt) + offset;</span></a>
-<a name="197"><span class="lineNum"> 197 </span> : : </a>
-<a name="198"><span class="lineNum"> 198 </span> :<span class="lineNoCov"> 0 : if (absoffset &lt; fdt_off_mem_rsvmap(fdt))</span></a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="200"><span class="lineNum"> 200 </span> :<span class="lineNoCov"> 0 : if (absoffset &gt; fdt_totalsize(fdt) - sizeof(struct fdt_reserve_entry))</span></a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : return fdt_mem_rsv_(fdt, n);</span></a>
-<a name="203"><span class="lineNum"> 203 </span> : : }</a>
-<a name="204"><span class="lineNum"> 204 </span> : : </a>
-<a name="205"><span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : int fdt_get_mem_rsv(const void *fdt, int n, uint64_t *address, uint64_t *size)</span></a>
-<a name="206"><span class="lineNum"> 206 </span> : : {</a>
-<a name="207"><span class="lineNum"> 207 </span> : : const struct fdt_reserve_entry *re;</a>
+<a name="184"><span class="lineNum"> 184 </span> :<span class="lineNoCov"> 0 : *address = fdt64_ld_(&amp;re-&gt;address);</span></a>
+<a name="185"><span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : *size = fdt64_ld_(&amp;re-&gt;size);</span></a>
+<a name="186"><span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
+<a name="187"><span class="lineNum"> 187 </span> : : }</a>
+<a name="188"><span class="lineNum"> 188 </span> : : </a>
+<a name="189"><span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : int fdt_num_mem_rsv(const void *fdt)</span></a>
+<a name="190"><span class="lineNum"> 190 </span> : : {</a>
+<a name="191"><span class="lineNum"> 191 </span> : : int i;</a>
+<a name="192"><span class="lineNum"> 192 </span> : : const struct fdt_reserve_entry *re;</a>
+<a name="193"><span class="lineNum"> 193 </span> : : </a>
+<a name="194"><span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : for (i = 0; (re = fdt_mem_rsv(fdt, i)) != NULL; i++) {</span></a>
+<a name="195"><span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : if (fdt64_ld_(&amp;re-&gt;size) == 0)</span></a>
+<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : return i;</span></a>
+<a name="197"><span class="lineNum"> 197 </span> : : }</a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_TRUNCATED;</span></a>
+<a name="199"><span class="lineNum"> 199 </span> : : }</a>
+<a name="200"><span class="lineNum"> 200 </span> : : </a>
+<a name="201"><span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : static int nextprop_(const void *fdt, int offset)</span></a>
+<a name="202"><span class="lineNum"> 202 </span> : : {</a>
+<a name="203"><span class="lineNum"> 203 </span> : : uint32_t tag;</a>
+<a name="204"><span class="lineNum"> 204 </span> : : int nextoffset;</a>
+<a name="205"><span class="lineNum"> 205 </span> : : </a>
+<a name="206"><span class="lineNum"> 206 </span> : : do {</a>
+<a name="207"><span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : tag = fdt_next_tag(fdt, offset, &amp;nextoffset);</span></a>
<a name="208"><span class="lineNum"> 208 </span> : : </a>
-<a name="209"><span class="lineNum"> 209 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : re = fdt_mem_rsv(fdt, n);</span></a>
-<a name="211"><span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : if (!re)</span></a>
-<a name="212"><span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADOFFSET;</span></a>
-<a name="213"><span class="lineNum"> 213 </span> : : </a>
-<a name="214"><span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : *address = fdt64_ld(&amp;re-&gt;address);</span></a>
-<a name="215"><span class="lineNum"> 215 </span> :<span class="lineNoCov"> 0 : *size = fdt64_ld(&amp;re-&gt;size);</span></a>
-<a name="216"><span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
-<a name="217"><span class="lineNum"> 217 </span> : : }</a>
-<a name="218"><span class="lineNum"> 218 </span> : : </a>
-<a name="219"><span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : int fdt_num_mem_rsv(const void *fdt)</span></a>
-<a name="220"><span class="lineNum"> 220 </span> : : {</a>
-<a name="221"><span class="lineNum"> 221 </span> : : int i;</a>
-<a name="222"><span class="lineNum"> 222 </span> : : const struct fdt_reserve_entry *re;</a>
-<a name="223"><span class="lineNum"> 223 </span> : : </a>
-<a name="224"><span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : for (i = 0; (re = fdt_mem_rsv(fdt, i)) != NULL; i++) {</span></a>
-<a name="225"><span class="lineNum"> 225 </span> :<span class="lineNoCov"> 0 : if (fdt64_ld(&amp;re-&gt;size) == 0)</span></a>
-<a name="226"><span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : return i;</span></a>
-<a name="227"><span class="lineNum"> 227 </span> : : }</a>
-<a name="228"><span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_TRUNCATED;</span></a>
-<a name="229"><span class="lineNum"> 229 </span> : : }</a>
-<a name="230"><span class="lineNum"> 230 </span> : : </a>
-<a name="231"><span class="lineNum"> 231 </span> :<span class="lineNoCov"> 0 : static int nextprop_(const void *fdt, int offset)</span></a>
-<a name="232"><span class="lineNum"> 232 </span> : : {</a>
-<a name="233"><span class="lineNum"> 233 </span> : : uint32_t tag;</a>
-<a name="234"><span class="lineNum"> 234 </span> : : int nextoffset;</a>
-<a name="235"><span class="lineNum"> 235 </span> : : </a>
-<a name="236"><span class="lineNum"> 236 </span> : : do {</a>
-<a name="237"><span class="lineNum"> 237 </span> :<span class="lineNoCov"> 0 : tag = fdt_next_tag(fdt, offset, &amp;nextoffset);</span></a>
+<a name="209"><span class="lineNum"> 209 </span> :<span class="lineNoCov"> 0 : switch (tag) {</span></a>
+<a name="210"><span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : case FDT_END:</span></a>
+<a name="211"><span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : if (nextoffset &gt;= 0)</span></a>
+<a name="212"><span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADSTRUCTURE;</span></a>
+<a name="213"><span class="lineNum"> 213 </span> : : else</a>
+<a name="214"><span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : return nextoffset;</span></a>
+<a name="215"><span class="lineNum"> 215 </span> : : </a>
+<a name="216"><span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : case FDT_PROP:</span></a>
+<a name="217"><span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
+<a name="218"><span class="lineNum"> 218 </span> : : }</a>
+<a name="219"><span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : offset = nextoffset;</span></a>
+<a name="220"><span class="lineNum"> 220 </span> :<span class="lineNoCov"> 0 : } while (tag == FDT_NOP);</span></a>
+<a name="221"><span class="lineNum"> 221 </span> : : </a>
+<a name="222"><span class="lineNum"> 222 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOTFOUND;</span></a>
+<a name="223"><span class="lineNum"> 223 </span> : : }</a>
+<a name="224"><span class="lineNum"> 224 </span> : : </a>
+<a name="225"><span class="lineNum"> 225 </span> :<span class="lineNoCov"> 0 : int fdt_subnode_offset_namelen(const void *fdt, int offset,</span></a>
+<a name="226"><span class="lineNum"> 226 </span> : : const char *name, int namelen)</a>
+<a name="227"><span class="lineNum"> 227 </span> : : {</a>
+<a name="228"><span class="lineNum"> 228 </span> : : int depth;</a>
+<a name="229"><span class="lineNum"> 229 </span> : : </a>
+<a name="230"><span class="lineNum"> 230 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
+<a name="231"><span class="lineNum"> 231 </span> : : </a>
+<a name="232"><span class="lineNum"> 232 </span> :<span class="lineNoCov"> 0 : for (depth = 0;</span></a>
+<a name="233"><span class="lineNum"> 233 </span> :<span class="lineNoCov"> 0 : (offset &gt;= 0) &amp;&amp; (depth &gt;= 0);</span></a>
+<a name="234"><span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, &amp;depth))</span></a>
+<a name="235"><span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : if ((depth == 1)</span></a>
+<a name="236"><span class="lineNum"> 236 </span> :<span class="lineNoCov"> 0 : &amp;&amp; fdt_nodename_eq_(fdt, offset, name, namelen))</span></a>
+<a name="237"><span class="lineNum"> 237 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
<a name="238"><span class="lineNum"> 238 </span> : : </a>
-<a name="239"><span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : switch (tag) {</span></a>
-<a name="240"><span class="lineNum"> 240 </span> :<span class="lineNoCov"> 0 : case FDT_END:</span></a>
-<a name="241"><span class="lineNum"> 241 </span> :<span class="lineNoCov"> 0 : if (nextoffset &gt;= 0)</span></a>
-<a name="242"><span class="lineNum"> 242 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADSTRUCTURE;</span></a>
-<a name="243"><span class="lineNum"> 243 </span> : : else</a>
-<a name="244"><span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : return nextoffset;</span></a>
-<a name="245"><span class="lineNum"> 245 </span> : : </a>
-<a name="246"><span class="lineNum"> 246 </span> :<span class="lineNoCov"> 0 : case FDT_PROP:</span></a>
-<a name="247"><span class="lineNum"> 247 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
-<a name="248"><span class="lineNum"> 248 </span> : : }</a>
-<a name="249"><span class="lineNum"> 249 </span> :<span class="lineNoCov"> 0 : offset = nextoffset;</span></a>
-<a name="250"><span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : } while (tag == FDT_NOP);</span></a>
-<a name="251"><span class="lineNum"> 251 </span> : : </a>
-<a name="252"><span class="lineNum"> 252 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOTFOUND;</span></a>
-<a name="253"><span class="lineNum"> 253 </span> : : }</a>
-<a name="254"><span class="lineNum"> 254 </span> : : </a>
-<a name="255"><span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : int fdt_subnode_offset_namelen(const void *fdt, int offset,</span></a>
-<a name="256"><span class="lineNum"> 256 </span> : : const char *name, int namelen)</a>
-<a name="257"><span class="lineNum"> 257 </span> : : {</a>
-<a name="258"><span class="lineNum"> 258 </span> : : int depth;</a>
-<a name="259"><span class="lineNum"> 259 </span> : : </a>
-<a name="260"><span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
+<a name="239"><span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : if (depth &lt; 0)</span></a>
+<a name="240"><span class="lineNum"> 240 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOTFOUND;</span></a>
+<a name="241"><span class="lineNum"> 241 </span> :<span class="lineNoCov"> 0 : return offset; /* error */</span></a>
+<a name="242"><span class="lineNum"> 242 </span> : : }</a>
+<a name="243"><span class="lineNum"> 243 </span> : : </a>
+<a name="244"><span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : int fdt_subnode_offset(const void *fdt, int parentoffset,</span></a>
+<a name="245"><span class="lineNum"> 245 </span> : : const char *name)</a>
+<a name="246"><span class="lineNum"> 246 </span> : : {</a>
+<a name="247"><span class="lineNum"> 247 </span> :<span class="lineNoCov"> 0 : return fdt_subnode_offset_namelen(fdt, parentoffset, name, strlen(name));</span></a>
+<a name="248"><span class="lineNum"> 248 </span> : : }</a>
+<a name="249"><span class="lineNum"> 249 </span> : : </a>
+<a name="250"><span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : int fdt_path_offset_namelen(const void *fdt, const char *path, int namelen)</span></a>
+<a name="251"><span class="lineNum"> 251 </span> : : {</a>
+<a name="252"><span class="lineNum"> 252 </span> :<span class="lineNoCov"> 0 : const char *end = path + namelen;</span></a>
+<a name="253"><span class="lineNum"> 253 </span> :<span class="lineNoCov"> 0 : const char *p = path;</span></a>
+<a name="254"><span class="lineNum"> 254 </span> :<span class="lineNoCov"> 0 : int offset = 0;</span></a>
+<a name="255"><span class="lineNum"> 255 </span> : : </a>
+<a name="256"><span class="lineNum"> 256 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
+<a name="257"><span class="lineNum"> 257 </span> : : </a>
+<a name="258"><span class="lineNum"> 258 </span> : : /* see if we have an alias */</a>
+<a name="259"><span class="lineNum"> 259 </span> :<span class="lineNoCov"> 0 : if (*path != '/') {</span></a>
+<a name="260"><span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : const char *q = memchr(path, '/', end - p);</span></a>
<a name="261"><span class="lineNum"> 261 </span> : : </a>
-<a name="262"><span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : for (depth = 0;</span></a>
-<a name="263"><span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : (offset &gt;= 0) &amp;&amp; (depth &gt;= 0);</span></a>
-<a name="264"><span class="lineNum"> 264 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, &amp;depth))</span></a>
-<a name="265"><span class="lineNum"> 265 </span> :<span class="lineNoCov"> 0 : if ((depth == 1)</span></a>
-<a name="266"><span class="lineNum"> 266 </span> :<span class="lineNoCov"> 0 : &amp;&amp; fdt_nodename_eq_(fdt, offset, name, namelen))</span></a>
-<a name="267"><span class="lineNum"> 267 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
-<a name="268"><span class="lineNum"> 268 </span> : : </a>
-<a name="269"><span class="lineNum"> 269 </span> :<span class="lineNoCov"> 0 : if (depth &lt; 0)</span></a>
-<a name="270"><span class="lineNum"> 270 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOTFOUND;</span></a>
-<a name="271"><span class="lineNum"> 271 </span> :<span class="lineNoCov"> 0 : return offset; /* error */</span></a>
-<a name="272"><span class="lineNum"> 272 </span> : : }</a>
-<a name="273"><span class="lineNum"> 273 </span> : : </a>
-<a name="274"><span class="lineNum"> 274 </span> :<span class="lineNoCov"> 0 : int fdt_subnode_offset(const void *fdt, int parentoffset,</span></a>
-<a name="275"><span class="lineNum"> 275 </span> : : const char *name)</a>
-<a name="276"><span class="lineNum"> 276 </span> : : {</a>
-<a name="277"><span class="lineNum"> 277 </span> :<span class="lineNoCov"> 0 : return fdt_subnode_offset_namelen(fdt, parentoffset, name, strlen(name));</span></a>
-<a name="278"><span class="lineNum"> 278 </span> : : }</a>
-<a name="279"><span class="lineNum"> 279 </span> : : </a>
-<a name="280"><span class="lineNum"> 280 </span> :<span class="lineNoCov"> 0 : int fdt_path_offset_namelen(const void *fdt, const char *path, int namelen)</span></a>
-<a name="281"><span class="lineNum"> 281 </span> : : {</a>
-<a name="282"><span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : const char *end = path + namelen;</span></a>
-<a name="283"><span class="lineNum"> 283 </span> :<span class="lineNoCov"> 0 : const char *p = path;</span></a>
-<a name="284"><span class="lineNum"> 284 </span> :<span class="lineNoCov"> 0 : int offset = 0;</span></a>
-<a name="285"><span class="lineNum"> 285 </span> : : </a>
-<a name="286"><span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
-<a name="287"><span class="lineNum"> 287 </span> : : </a>
-<a name="288"><span class="lineNum"> 288 </span> : : /* see if we have an alias */</a>
-<a name="289"><span class="lineNum"> 289 </span> :<span class="lineNoCov"> 0 : if (*path != '/') {</span></a>
-<a name="290"><span class="lineNum"> 290 </span> :<span class="lineNoCov"> 0 : const char *q = memchr(path, '/', end - p);</span></a>
+<a name="262"><span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : if (!q)</span></a>
+<a name="263"><span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : q = end;</span></a>
+<a name="264"><span class="lineNum"> 264 </span> : : </a>
+<a name="265"><span class="lineNum"> 265 </span> :<span class="lineNoCov"> 0 : p = fdt_get_alias_namelen(fdt, p, q - p);</span></a>
+<a name="266"><span class="lineNum"> 266 </span> :<span class="lineNoCov"> 0 : if (!p)</span></a>
+<a name="267"><span class="lineNum"> 267 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADPATH;</span></a>
+<a name="268"><span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : offset = fdt_path_offset(fdt, p);</span></a>
+<a name="269"><span class="lineNum"> 269 </span> : : </a>
+<a name="270"><span class="lineNum"> 270 </span> :<span class="lineNoCov"> 0 : p = q;</span></a>
+<a name="271"><span class="lineNum"> 271 </span> : : }</a>
+<a name="272"><span class="lineNum"> 272 </span> : : </a>
+<a name="273"><span class="lineNum"> 273 </span> :<span class="lineNoCov"> 0 : while (p &lt; end) {</span></a>
+<a name="274"><span class="lineNum"> 274 </span> : : const char *q;</a>
+<a name="275"><span class="lineNum"> 275 </span> : : </a>
+<a name="276"><span class="lineNum"> 276 </span> :<span class="lineNoCov"> 0 : while (*p == '/') {</span></a>
+<a name="277"><span class="lineNum"> 277 </span> :<span class="lineNoCov"> 0 : p++;</span></a>
+<a name="278"><span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : if (p == end)</span></a>
+<a name="279"><span class="lineNum"> 279 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
+<a name="280"><span class="lineNum"> 280 </span> : : }</a>
+<a name="281"><span class="lineNum"> 281 </span> :<span class="lineNoCov"> 0 : q = memchr(p, '/', end - p);</span></a>
+<a name="282"><span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : if (! q)</span></a>
+<a name="283"><span class="lineNum"> 283 </span> :<span class="lineNoCov"> 0 : q = end;</span></a>
+<a name="284"><span class="lineNum"> 284 </span> : : </a>
+<a name="285"><span class="lineNum"> 285 </span> :<span class="lineNoCov"> 0 : offset = fdt_subnode_offset_namelen(fdt, offset, p, q-p);</span></a>
+<a name="286"><span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : if (offset &lt; 0)</span></a>
+<a name="287"><span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
+<a name="288"><span class="lineNum"> 288 </span> : : </a>
+<a name="289"><span class="lineNum"> 289 </span> :<span class="lineNoCov"> 0 : p = q;</span></a>
+<a name="290"><span class="lineNum"> 290 </span> : : }</a>
<a name="291"><span class="lineNum"> 291 </span> : : </a>
-<a name="292"><span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : if (!q)</span></a>
-<a name="293"><span class="lineNum"> 293 </span> :<span class="lineNoCov"> 0 : q = end;</span></a>
+<a name="292"><span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
+<a name="293"><span class="lineNum"> 293 </span> : : }</a>
<a name="294"><span class="lineNum"> 294 </span> : : </a>
-<a name="295"><span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : p = fdt_get_alias_namelen(fdt, p, q - p);</span></a>
-<a name="296"><span class="lineNum"> 296 </span> :<span class="lineNoCov"> 0 : if (!p)</span></a>
-<a name="297"><span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADPATH;</span></a>
-<a name="298"><span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : offset = fdt_path_offset(fdt, p);</span></a>
+<a name="295"><span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : int fdt_path_offset(const void *fdt, const char *path)</span></a>
+<a name="296"><span class="lineNum"> 296 </span> : : {</a>
+<a name="297"><span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : return fdt_path_offset_namelen(fdt, path, strlen(path));</span></a>
+<a name="298"><span class="lineNum"> 298 </span> : : }</a>
<a name="299"><span class="lineNum"> 299 </span> : : </a>
-<a name="300"><span class="lineNum"> 300 </span> :<span class="lineNoCov"> 0 : p = q;</span></a>
-<a name="301"><span class="lineNum"> 301 </span> : : }</a>
-<a name="302"><span class="lineNum"> 302 </span> : : </a>
-<a name="303"><span class="lineNum"> 303 </span> :<span class="lineNoCov"> 0 : while (p &lt; end) {</span></a>
-<a name="304"><span class="lineNum"> 304 </span> : : const char *q;</a>
+<a name="300"><span class="lineNum"> 300 </span> :<span class="lineCov"> 7 : const char *fdt_get_name(const void *fdt, int nodeoffset, int *len)</span></a>
+<a name="301"><span class="lineNum"> 301 </span> : : {</a>
+<a name="302"><span class="lineNum"> 302 </span> :<span class="lineCov"> 7 : const struct fdt_node_header *nh = fdt_offset_ptr_(fdt, nodeoffset);</span></a>
+<a name="303"><span class="lineNum"> 303 </span> : : const char *nameptr;</a>
+<a name="304"><span class="lineNum"> 304 </span> : : int err;</a>
<a name="305"><span class="lineNum"> 305 </span> : : </a>
-<a name="306"><span class="lineNum"> 306 </span> :<span class="lineNoCov"> 0 : while (*p == '/') {</span></a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : p++;</span></a>
-<a name="308"><span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : if (p == end)</span></a>
-<a name="309"><span class="lineNum"> 309 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
-<a name="310"><span class="lineNum"> 310 </span> : : }</a>
-<a name="311"><span class="lineNum"> 311 </span> :<span class="lineNoCov"> 0 : q = memchr(p, '/', end - p);</span></a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : if (! q)</span></a>
-<a name="313"><span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : q = end;</span></a>
-<a name="314"><span class="lineNum"> 314 </span> : : </a>
-<a name="315"><span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : offset = fdt_subnode_offset_namelen(fdt, offset, p, q-p);</span></a>
-<a name="316"><span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : if (offset &lt; 0)</span></a>
-<a name="317"><span class="lineNum"> 317 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
-<a name="318"><span class="lineNum"> 318 </span> : : </a>
-<a name="319"><span class="lineNum"> 319 </span> :<span class="lineNoCov"> 0 : p = q;</span></a>
-<a name="320"><span class="lineNum"> 320 </span> : : }</a>
-<a name="321"><span class="lineNum"> 321 </span> : : </a>
-<a name="322"><span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
-<a name="323"><span class="lineNum"> 323 </span> : : }</a>
-<a name="324"><span class="lineNum"> 324 </span> : : </a>
-<a name="325"><span class="lineNum"> 325 </span> :<span class="lineNoCov"> 0 : int fdt_path_offset(const void *fdt, const char *path)</span></a>
-<a name="326"><span class="lineNum"> 326 </span> : : {</a>
-<a name="327"><span class="lineNum"> 327 </span> :<span class="lineNoCov"> 0 : return fdt_path_offset_namelen(fdt, path, strlen(path));</span></a>
-<a name="328"><span class="lineNum"> 328 </span> : : }</a>
+<a name="306"><span class="lineNum"> 306 </span> :<span class="lineCov"> 7 : if (((err = fdt_ro_probe_(fdt)) &lt; 0)</span></a>
+<a name="307"><span class="lineNum"> 307 </span> :<span class="lineCov"> 7 : || ((err = fdt_check_node_offset_(fdt, nodeoffset)) &lt; 0))</span></a>
+<a name="308"><span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
+<a name="309"><span class="lineNum"> 309 </span> : : </a>
+<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 7 : nameptr = nh-&gt;name;</span></a>
+<a name="311"><span class="lineNum"> 311 </span> : : </a>
+<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 7 : if (!can_assume(LATEST) &amp;&amp; fdt_version(fdt) &lt; 0x10) {</span></a>
+<a name="313"><span class="lineNum"> 313 </span> : : /*</a>
+<a name="314"><span class="lineNum"> 314 </span> : : * For old FDT versions, match the naming conventions of V16:</a>
+<a name="315"><span class="lineNum"> 315 </span> : : * give only the leaf name (after all /). The actual tree</a>
+<a name="316"><span class="lineNum"> 316 </span> : : * contents are loosely checked.</a>
+<a name="317"><span class="lineNum"> 317 </span> : : */</a>
+<a name="318"><span class="lineNum"> 318 </span> : : const char *leaf;</a>
+<a name="319"><span class="lineNum"> 319 </span> :<span class="lineNoCov"> 0 : leaf = strrchr(nameptr, '/');</span></a>
+<a name="320"><span class="lineNum"> 320 </span> :<span class="lineNoCov"> 0 : if (leaf == NULL) {</span></a>
+<a name="321"><span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : err = -FDT_ERR_BADSTRUCTURE;</span></a>
+<a name="322"><span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
+<a name="323"><span class="lineNum"> 323 </span> : : }</a>
+<a name="324"><span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : nameptr = leaf+1;</span></a>
+<a name="325"><span class="lineNum"> 325 </span> : : }</a>
+<a name="326"><span class="lineNum"> 326 </span> : : </a>
+<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 7 : if (len)</span></a>
+<a name="328"><span class="lineNum"> 328 </span> :<span class="lineNoCov"> 0 : *len = strlen(nameptr);</span></a>
<a name="329"><span class="lineNum"> 329 </span> : : </a>
-<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 7 : const char *fdt_get_name(const void *fdt, int nodeoffset, int *len)</span></a>
-<a name="331"><span class="lineNum"> 331 </span> : : {</a>
-<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 7 : const struct fdt_node_header *nh = fdt_offset_ptr_(fdt, nodeoffset);</span></a>
-<a name="333"><span class="lineNum"> 333 </span> : : const char *nameptr;</a>
-<a name="334"><span class="lineNum"> 334 </span> : : int err;</a>
-<a name="335"><span class="lineNum"> 335 </span> : : </a>
-<a name="336"><span class="lineNum"> 336 </span> :<span class="lineCov"> 7 : if (((err = fdt_ro_probe_(fdt)) != 0)</span></a>
-<a name="337"><span class="lineNum"> 337 </span> :<span class="lineCov"> 7 : || ((err = fdt_check_node_offset_(fdt, nodeoffset)) &lt; 0))</span></a>
-<a name="338"><span class="lineNum"> 338 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
-<a name="339"><span class="lineNum"> 339 </span> : : </a>
-<a name="340"><span class="lineNum"> 340 </span> :<span class="lineCov"> 7 : nameptr = nh-&gt;name;</span></a>
+<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 7 : return nameptr;</span></a>
+<a name="331"><span class="lineNum"> 331 </span> : : </a>
+<a name="332"><span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : fail:</span></a>
+<a name="333"><span class="lineNum"> 333 </span> :<span class="lineNoCov"> 0 : if (len)</span></a>
+<a name="334"><span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : *len = err;</span></a>
+<a name="335"><span class="lineNum"> 335 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="336"><span class="lineNum"> 336 </span> : : }</a>
+<a name="337"><span class="lineNum"> 337 </span> : : </a>
+<a name="338"><span class="lineNum"> 338 </span> :<span class="lineNoCov"> 0 : int fdt_first_property_offset(const void *fdt, int nodeoffset)</span></a>
+<a name="339"><span class="lineNum"> 339 </span> : : {</a>
+<a name="340"><span class="lineNum"> 340 </span> : : int offset;</a>
<a name="341"><span class="lineNum"> 341 </span> : : </a>
-<a name="342"><span class="lineNum"> 342 </span> :<span class="lineCov"> 7 : if (fdt_version(fdt) &lt; 0x10) {</span></a>
-<a name="343"><span class="lineNum"> 343 </span> : : /*</a>
-<a name="344"><span class="lineNum"> 344 </span> : : * For old FDT versions, match the naming conventions of V16:</a>
-<a name="345"><span class="lineNum"> 345 </span> : : * give only the leaf name (after all /). The actual tree</a>
-<a name="346"><span class="lineNum"> 346 </span> : : * contents are loosely checked.</a>
-<a name="347"><span class="lineNum"> 347 </span> : : */</a>
-<a name="348"><span class="lineNum"> 348 </span> : : const char *leaf;</a>
-<a name="349"><span class="lineNum"> 349 </span> :<span class="lineNoCov"> 0 : leaf = strrchr(nameptr, '/');</span></a>
-<a name="350"><span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : if (leaf == NULL) {</span></a>
-<a name="351"><span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : err = -FDT_ERR_BADSTRUCTURE;</span></a>
-<a name="352"><span class="lineNum"> 352 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
-<a name="353"><span class="lineNum"> 353 </span> : : }</a>
-<a name="354"><span class="lineNum"> 354 </span> :<span class="lineNoCov"> 0 : nameptr = leaf+1;</span></a>
-<a name="355"><span class="lineNum"> 355 </span> : : }</a>
-<a name="356"><span class="lineNum"> 356 </span> : : </a>
-<a name="357"><span class="lineNum"> 357 </span> :<span class="lineCov"> 7 : if (len)</span></a>
-<a name="358"><span class="lineNum"> 358 </span> :<span class="lineNoCov"> 0 : *len = strlen(nameptr);</span></a>
-<a name="359"><span class="lineNum"> 359 </span> : : </a>
-<a name="360"><span class="lineNum"> 360 </span> :<span class="lineCov"> 7 : return nameptr;</span></a>
-<a name="361"><span class="lineNum"> 361 </span> : : </a>
-<a name="362"><span class="lineNum"> 362 </span> :<span class="lineNoCov"> 0 : fail:</span></a>
-<a name="363"><span class="lineNum"> 363 </span> :<span class="lineNoCov"> 0 : if (len)</span></a>
-<a name="364"><span class="lineNum"> 364 </span> :<span class="lineNoCov"> 0 : *len = err;</span></a>
-<a name="365"><span class="lineNum"> 365 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="366"><span class="lineNum"> 366 </span> : : }</a>
-<a name="367"><span class="lineNum"> 367 </span> : : </a>
-<a name="368"><span class="lineNum"> 368 </span> :<span class="lineNoCov"> 0 : int fdt_first_property_offset(const void *fdt, int nodeoffset)</span></a>
-<a name="369"><span class="lineNum"> 369 </span> : : {</a>
-<a name="370"><span class="lineNum"> 370 </span> : : int offset;</a>
+<a name="342"><span class="lineNum"> 342 </span> :<span class="lineNoCov"> 0 : if ((offset = fdt_check_node_offset_(fdt, nodeoffset)) &lt; 0)</span></a>
+<a name="343"><span class="lineNum"> 343 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
+<a name="344"><span class="lineNum"> 344 </span> : : </a>
+<a name="345"><span class="lineNum"> 345 </span> :<span class="lineNoCov"> 0 : return nextprop_(fdt, offset);</span></a>
+<a name="346"><span class="lineNum"> 346 </span> : : }</a>
+<a name="347"><span class="lineNum"> 347 </span> : : </a>
+<a name="348"><span class="lineNum"> 348 </span> :<span class="lineNoCov"> 0 : int fdt_next_property_offset(const void *fdt, int offset)</span></a>
+<a name="349"><span class="lineNum"> 349 </span> : : {</a>
+<a name="350"><span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : if ((offset = fdt_check_prop_offset_(fdt, offset)) &lt; 0)</span></a>
+<a name="351"><span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
+<a name="352"><span class="lineNum"> 352 </span> : : </a>
+<a name="353"><span class="lineNum"> 353 </span> :<span class="lineNoCov"> 0 : return nextprop_(fdt, offset);</span></a>
+<a name="354"><span class="lineNum"> 354 </span> : : }</a>
+<a name="355"><span class="lineNum"> 355 </span> : : </a>
+<a name="356"><span class="lineNum"> 356 </span> :<span class="lineNoCov"> 0 : static const struct fdt_property *fdt_get_property_by_offset_(const void *fdt,</span></a>
+<a name="357"><span class="lineNum"> 357 </span> : : int offset,</a>
+<a name="358"><span class="lineNum"> 358 </span> : : int *lenp)</a>
+<a name="359"><span class="lineNum"> 359 </span> : : {</a>
+<a name="360"><span class="lineNum"> 360 </span> : : int err;</a>
+<a name="361"><span class="lineNum"> 361 </span> : : const struct fdt_property *prop;</a>
+<a name="362"><span class="lineNum"> 362 </span> : : </a>
+<a name="363"><span class="lineNum"> 363 </span> :<span class="lineNoCov"> 0 : if (!can_assume(VALID_INPUT) &amp;&amp;</span></a>
+<a name="364"><span class="lineNum"> 364 </span> :<span class="lineNoCov"> 0 : (err = fdt_check_prop_offset_(fdt, offset)) &lt; 0) {</span></a>
+<a name="365"><span class="lineNum"> 365 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
+<a name="366"><span class="lineNum"> 366 </span> :<span class="lineNoCov"> 0 : *lenp = err;</span></a>
+<a name="367"><span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="368"><span class="lineNum"> 368 </span> : : }</a>
+<a name="369"><span class="lineNum"> 369 </span> : : </a>
+<a name="370"><span class="lineNum"> 370 </span> :<span class="lineNoCov"> 0 : prop = fdt_offset_ptr_(fdt, offset);</span></a>
<a name="371"><span class="lineNum"> 371 </span> : : </a>
-<a name="372"><span class="lineNum"> 372 </span> :<span class="lineNoCov"> 0 : if ((offset = fdt_check_node_offset_(fdt, nodeoffset)) &lt; 0)</span></a>
-<a name="373"><span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
+<a name="372"><span class="lineNum"> 372 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
+<a name="373"><span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : *lenp = fdt32_ld_(&amp;prop-&gt;len);</span></a>
<a name="374"><span class="lineNum"> 374 </span> : : </a>
-<a name="375"><span class="lineNum"> 375 </span> :<span class="lineNoCov"> 0 : return nextprop_(fdt, offset);</span></a>
+<a name="375"><span class="lineNum"> 375 </span> :<span class="lineNoCov"> 0 : return prop;</span></a>
<a name="376"><span class="lineNum"> 376 </span> : : }</a>
<a name="377"><span class="lineNum"> 377 </span> : : </a>
-<a name="378"><span class="lineNum"> 378 </span> :<span class="lineNoCov"> 0 : int fdt_next_property_offset(const void *fdt, int offset)</span></a>
-<a name="379"><span class="lineNum"> 379 </span> : : {</a>
-<a name="380"><span class="lineNum"> 380 </span> :<span class="lineNoCov"> 0 : if ((offset = fdt_check_prop_offset_(fdt, offset)) &lt; 0)</span></a>
-<a name="381"><span class="lineNum"> 381 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
-<a name="382"><span class="lineNum"> 382 </span> : : </a>
-<a name="383"><span class="lineNum"> 383 </span> :<span class="lineNoCov"> 0 : return nextprop_(fdt, offset);</span></a>
-<a name="384"><span class="lineNum"> 384 </span> : : }</a>
-<a name="385"><span class="lineNum"> 385 </span> : : </a>
-<a name="386"><span class="lineNum"> 386 </span> :<span class="lineNoCov"> 0 : static const struct fdt_property *fdt_get_property_by_offset_(const void *fdt,</span></a>
-<a name="387"><span class="lineNum"> 387 </span> : : int offset,</a>
-<a name="388"><span class="lineNum"> 388 </span> : : int *lenp)</a>
-<a name="389"><span class="lineNum"> 389 </span> : : {</a>
-<a name="390"><span class="lineNum"> 390 </span> : : int err;</a>
-<a name="391"><span class="lineNum"> 391 </span> : : const struct fdt_property *prop;</a>
-<a name="392"><span class="lineNum"> 392 </span> : : </a>
-<a name="393"><span class="lineNum"> 393 </span> :<span class="lineNoCov"> 0 : if ((err = fdt_check_prop_offset_(fdt, offset)) &lt; 0) {</span></a>
-<a name="394"><span class="lineNum"> 394 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
-<a name="395"><span class="lineNum"> 395 </span> :<span class="lineNoCov"> 0 : *lenp = err;</span></a>
-<a name="396"><span class="lineNum"> 396 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="397"><span class="lineNum"> 397 </span> : : }</a>
-<a name="398"><span class="lineNum"> 398 </span> : : </a>
-<a name="399"><span class="lineNum"> 399 </span> :<span class="lineNoCov"> 0 : prop = fdt_offset_ptr_(fdt, offset);</span></a>
-<a name="400"><span class="lineNum"> 400 </span> : : </a>
-<a name="401"><span class="lineNum"> 401 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
-<a name="402"><span class="lineNum"> 402 </span> :<span class="lineNoCov"> 0 : *lenp = fdt32_ld(&amp;prop-&gt;len);</span></a>
-<a name="403"><span class="lineNum"> 403 </span> : : </a>
-<a name="404"><span class="lineNum"> 404 </span> :<span class="lineNoCov"> 0 : return prop;</span></a>
-<a name="405"><span class="lineNum"> 405 </span> : : }</a>
-<a name="406"><span class="lineNum"> 406 </span> : : </a>
-<a name="407"><span class="lineNum"> 407 </span> :<span class="lineNoCov"> 0 : const struct fdt_property *fdt_get_property_by_offset(const void *fdt,</span></a>
-<a name="408"><span class="lineNum"> 408 </span> : : int offset,</a>
-<a name="409"><span class="lineNum"> 409 </span> : : int *lenp)</a>
-<a name="410"><span class="lineNum"> 410 </span> : : {</a>
-<a name="411"><span class="lineNum"> 411 </span> : : /* Prior to version 16, properties may need realignment</a>
-<a name="412"><span class="lineNum"> 412 </span> : : * and this API does not work. fdt_getprop_*() will, however. */</a>
-<a name="413"><span class="lineNum"> 413 </span> : : </a>
-<a name="414"><span class="lineNum"> 414 </span> :<span class="lineNoCov"> 0 : if (fdt_version(fdt) &lt; 0x10) {</span></a>
-<a name="415"><span class="lineNum"> 415 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
-<a name="416"><span class="lineNum"> 416 </span> :<span class="lineNoCov"> 0 : *lenp = -FDT_ERR_BADVERSION;</span></a>
-<a name="417"><span class="lineNum"> 417 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="418"><span class="lineNum"> 418 </span> : : }</a>
-<a name="419"><span class="lineNum"> 419 </span> : : </a>
-<a name="420"><span class="lineNum"> 420 </span> :<span class="lineNoCov"> 0 : return fdt_get_property_by_offset_(fdt, offset, lenp);</span></a>
-<a name="421"><span class="lineNum"> 421 </span> : : }</a>
-<a name="422"><span class="lineNum"> 422 </span> : : </a>
-<a name="423"><span class="lineNum"> 423 </span> :<span class="lineNoCov"> 0 : static const struct fdt_property *fdt_get_property_namelen_(const void *fdt,</span></a>
-<a name="424"><span class="lineNum"> 424 </span> : : int offset,</a>
-<a name="425"><span class="lineNum"> 425 </span> : : const char *name,</a>
-<a name="426"><span class="lineNum"> 426 </span> : : int namelen,</a>
-<a name="427"><span class="lineNum"> 427 </span> : : int *lenp,</a>
-<a name="428"><span class="lineNum"> 428 </span> : : int *poffset)</a>
+<a name="378"><span class="lineNum"> 378 </span> :<span class="lineNoCov"> 0 : const struct fdt_property *fdt_get_property_by_offset(const void *fdt,</span></a>
+<a name="379"><span class="lineNum"> 379 </span> : : int offset,</a>
+<a name="380"><span class="lineNum"> 380 </span> : : int *lenp)</a>
+<a name="381"><span class="lineNum"> 381 </span> : : {</a>
+<a name="382"><span class="lineNum"> 382 </span> : : /* Prior to version 16, properties may need realignment</a>
+<a name="383"><span class="lineNum"> 383 </span> : : * and this API does not work. fdt_getprop_*() will, however. */</a>
+<a name="384"><span class="lineNum"> 384 </span> : : </a>
+<a name="385"><span class="lineNum"> 385 </span> :<span class="lineNoCov"> 0 : if (!can_assume(LATEST) &amp;&amp; fdt_version(fdt) &lt; 0x10) {</span></a>
+<a name="386"><span class="lineNum"> 386 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
+<a name="387"><span class="lineNum"> 387 </span> :<span class="lineNoCov"> 0 : *lenp = -FDT_ERR_BADVERSION;</span></a>
+<a name="388"><span class="lineNum"> 388 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="389"><span class="lineNum"> 389 </span> : : }</a>
+<a name="390"><span class="lineNum"> 390 </span> : : </a>
+<a name="391"><span class="lineNum"> 391 </span> :<span class="lineNoCov"> 0 : return fdt_get_property_by_offset_(fdt, offset, lenp);</span></a>
+<a name="392"><span class="lineNum"> 392 </span> : : }</a>
+<a name="393"><span class="lineNum"> 393 </span> : : </a>
+<a name="394"><span class="lineNum"> 394 </span> :<span class="lineNoCov"> 0 : static const struct fdt_property *fdt_get_property_namelen_(const void *fdt,</span></a>
+<a name="395"><span class="lineNum"> 395 </span> : : int offset,</a>
+<a name="396"><span class="lineNum"> 396 </span> : : const char *name,</a>
+<a name="397"><span class="lineNum"> 397 </span> : : int namelen,</a>
+<a name="398"><span class="lineNum"> 398 </span> : : int *lenp,</a>
+<a name="399"><span class="lineNum"> 399 </span> : : int *poffset)</a>
+<a name="400"><span class="lineNum"> 400 </span> : : {</a>
+<a name="401"><span class="lineNum"> 401 </span> :<span class="lineNoCov"> 0 : for (offset = fdt_first_property_offset(fdt, offset);</span></a>
+<a name="402"><span class="lineNum"> 402 </span> : : (offset &gt;= 0);</a>
+<a name="403"><span class="lineNum"> 403 </span> :<span class="lineNoCov"> 0 : (offset = fdt_next_property_offset(fdt, offset))) {</span></a>
+<a name="404"><span class="lineNum"> 404 </span> : : const struct fdt_property *prop;</a>
+<a name="405"><span class="lineNum"> 405 </span> : : </a>
+<a name="406"><span class="lineNum"> 406 </span> :<span class="lineNoCov"> 0 : prop = fdt_get_property_by_offset_(fdt, offset, lenp);</span></a>
+<a name="407"><span class="lineNum"> 407 </span> :<span class="lineNoCov"> 0 : if (!can_assume(LIBFDT_FLAWLESS) &amp;&amp; !prop) {</span></a>
+<a name="408"><span class="lineNum"> 408 </span> :<span class="lineNoCov"> 0 : offset = -FDT_ERR_INTERNAL;</span></a>
+<a name="409"><span class="lineNum"> 409 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="410"><span class="lineNum"> 410 </span> : : }</a>
+<a name="411"><span class="lineNum"> 411 </span> :<span class="lineNoCov"> 0 : if (fdt_string_eq_(fdt, fdt32_ld_(&amp;prop-&gt;nameoff),</span></a>
+<a name="412"><span class="lineNum"> 412 </span> : : name, namelen)) {</a>
+<a name="413"><span class="lineNum"> 413 </span> :<span class="lineNoCov"> 0 : if (poffset)</span></a>
+<a name="414"><span class="lineNum"> 414 </span> :<span class="lineNoCov"> 0 : *poffset = offset;</span></a>
+<a name="415"><span class="lineNum"> 415 </span> :<span class="lineNoCov"> 0 : return prop;</span></a>
+<a name="416"><span class="lineNum"> 416 </span> : : }</a>
+<a name="417"><span class="lineNum"> 417 </span> : : }</a>
+<a name="418"><span class="lineNum"> 418 </span> : : </a>
+<a name="419"><span class="lineNum"> 419 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
+<a name="420"><span class="lineNum"> 420 </span> :<span class="lineNoCov"> 0 : *lenp = offset;</span></a>
+<a name="421"><span class="lineNum"> 421 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="422"><span class="lineNum"> 422 </span> : : }</a>
+<a name="423"><span class="lineNum"> 423 </span> : : </a>
+<a name="424"><span class="lineNum"> 424 </span> : : </a>
+<a name="425"><span class="lineNum"> 425 </span> :<span class="lineNoCov"> 0 : const struct fdt_property *fdt_get_property_namelen(const void *fdt,</span></a>
+<a name="426"><span class="lineNum"> 426 </span> : : int offset,</a>
+<a name="427"><span class="lineNum"> 427 </span> : : const char *name,</a>
+<a name="428"><span class="lineNum"> 428 </span> : : int namelen, int *lenp)</a>
<a name="429"><span class="lineNum"> 429 </span> : : {</a>
-<a name="430"><span class="lineNum"> 430 </span> :<span class="lineNoCov"> 0 : for (offset = fdt_first_property_offset(fdt, offset);</span></a>
-<a name="431"><span class="lineNum"> 431 </span> : : (offset &gt;= 0);</a>
-<a name="432"><span class="lineNum"> 432 </span> :<span class="lineNoCov"> 0 : (offset = fdt_next_property_offset(fdt, offset))) {</span></a>
-<a name="433"><span class="lineNum"> 433 </span> : : const struct fdt_property *prop;</a>
-<a name="434"><span class="lineNum"> 434 </span> : : </a>
-<a name="435"><span class="lineNum"> 435 </span> :<span class="lineNoCov"> 0 : if (!(prop = fdt_get_property_by_offset_(fdt, offset, lenp))) {</span></a>
-<a name="436"><span class="lineNum"> 436 </span> :<span class="lineNoCov"> 0 : offset = -FDT_ERR_INTERNAL;</span></a>
-<a name="437"><span class="lineNum"> 437 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="438"><span class="lineNum"> 438 </span> : : }</a>
-<a name="439"><span class="lineNum"> 439 </span> :<span class="lineNoCov"> 0 : if (fdt_string_eq_(fdt, fdt32_ld(&amp;prop-&gt;nameoff),</span></a>
-<a name="440"><span class="lineNum"> 440 </span> : : name, namelen)) {</a>
-<a name="441"><span class="lineNum"> 441 </span> :<span class="lineNoCov"> 0 : if (poffset)</span></a>
-<a name="442"><span class="lineNum"> 442 </span> :<span class="lineNoCov"> 0 : *poffset = offset;</span></a>
-<a name="443"><span class="lineNum"> 443 </span> :<span class="lineNoCov"> 0 : return prop;</span></a>
-<a name="444"><span class="lineNum"> 444 </span> : : }</a>
-<a name="445"><span class="lineNum"> 445 </span> : : }</a>
-<a name="446"><span class="lineNum"> 446 </span> : : </a>
-<a name="447"><span class="lineNum"> 447 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
-<a name="448"><span class="lineNum"> 448 </span> :<span class="lineNoCov"> 0 : *lenp = offset;</span></a>
-<a name="449"><span class="lineNum"> 449 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="450"><span class="lineNum"> 450 </span> : : }</a>
-<a name="451"><span class="lineNum"> 451 </span> : : </a>
-<a name="452"><span class="lineNum"> 452 </span> : : </a>
-<a name="453"><span class="lineNum"> 453 </span> :<span class="lineNoCov"> 0 : const struct fdt_property *fdt_get_property_namelen(const void *fdt,</span></a>
-<a name="454"><span class="lineNum"> 454 </span> : : int offset,</a>
-<a name="455"><span class="lineNum"> 455 </span> : : const char *name,</a>
-<a name="456"><span class="lineNum"> 456 </span> : : int namelen, int *lenp)</a>
-<a name="457"><span class="lineNum"> 457 </span> : : {</a>
-<a name="458"><span class="lineNum"> 458 </span> : : /* Prior to version 16, properties may need realignment</a>
-<a name="459"><span class="lineNum"> 459 </span> : : * and this API does not work. fdt_getprop_*() will, however. */</a>
-<a name="460"><span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : if (fdt_version(fdt) &lt; 0x10) {</span></a>
-<a name="461"><span class="lineNum"> 461 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
-<a name="462"><span class="lineNum"> 462 </span> :<span class="lineNoCov"> 0 : *lenp = -FDT_ERR_BADVERSION;</span></a>
-<a name="463"><span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="464"><span class="lineNum"> 464 </span> : : }</a>
-<a name="465"><span class="lineNum"> 465 </span> : : </a>
-<a name="466"><span class="lineNum"> 466 </span> :<span class="lineNoCov"> 0 : return fdt_get_property_namelen_(fdt, offset, name, namelen, lenp,</span></a>
-<a name="467"><span class="lineNum"> 467 </span> : : NULL);</a>
-<a name="468"><span class="lineNum"> 468 </span> : : }</a>
-<a name="469"><span class="lineNum"> 469 </span> : : </a>
-<a name="470"><span class="lineNum"> 470 </span> : : </a>
-<a name="471"><span class="lineNum"> 471 </span> :<span class="lineNoCov"> 0 : const struct fdt_property *fdt_get_property(const void *fdt,</span></a>
-<a name="472"><span class="lineNum"> 472 </span> : : int nodeoffset,</a>
-<a name="473"><span class="lineNum"> 473 </span> : : const char *name, int *lenp)</a>
-<a name="474"><span class="lineNum"> 474 </span> : : {</a>
-<a name="475"><span class="lineNum"> 475 </span> :<span class="lineNoCov"> 0 : return fdt_get_property_namelen(fdt, nodeoffset, name,</span></a>
-<a name="476"><span class="lineNum"> 476 </span> :<span class="lineNoCov"> 0 : strlen(name), lenp);</span></a>
-<a name="477"><span class="lineNum"> 477 </span> : : }</a>
-<a name="478"><span class="lineNum"> 478 </span> : : </a>
-<a name="479"><span class="lineNum"> 479 </span> :<span class="lineNoCov"> 0 : const void *fdt_getprop_namelen(const void *fdt, int nodeoffset,</span></a>
-<a name="480"><span class="lineNum"> 480 </span> : : const char *name, int namelen, int *lenp)</a>
-<a name="481"><span class="lineNum"> 481 </span> : : {</a>
-<a name="482"><span class="lineNum"> 482 </span> : : int poffset;</a>
-<a name="483"><span class="lineNum"> 483 </span> : : const struct fdt_property *prop;</a>
-<a name="484"><span class="lineNum"> 484 </span> : : </a>
-<a name="485"><span class="lineNum"> 485 </span> :<span class="lineNoCov"> 0 : prop = fdt_get_property_namelen_(fdt, nodeoffset, name, namelen, lenp,</span></a>
-<a name="486"><span class="lineNum"> 486 </span> : : &amp;poffset);</a>
-<a name="487"><span class="lineNum"> 487 </span> :<span class="lineNoCov"> 0 : if (!prop)</span></a>
-<a name="488"><span class="lineNum"> 488 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="489"><span class="lineNum"> 489 </span> : : </a>
-<a name="490"><span class="lineNum"> 490 </span> : : /* Handle realignment */</a>
-<a name="491"><span class="lineNum"> 491 </span> :<span class="lineNoCov"> 0 : if (fdt_version(fdt) &lt; 0x10 &amp;&amp; (poffset + sizeof(*prop)) % 8 &amp;&amp;</span></a>
-<a name="492"><span class="lineNum"> 492 </span> :<span class="lineNoCov"> 0 : fdt32_ld(&amp;prop-&gt;len) &gt;= 8)</span></a>
-<a name="493"><span class="lineNum"> 493 </span> :<span class="lineNoCov"> 0 : return prop-&gt;data + 4;</span></a>
-<a name="494"><span class="lineNum"> 494 </span> :<span class="lineNoCov"> 0 : return prop-&gt;data;</span></a>
-<a name="495"><span class="lineNum"> 495 </span> : : }</a>
-<a name="496"><span class="lineNum"> 496 </span> : : </a>
-<a name="497"><span class="lineNum"> 497 </span> :<span class="lineNoCov"> 0 : const void *fdt_getprop_by_offset(const void *fdt, int offset,</span></a>
-<a name="498"><span class="lineNum"> 498 </span> : : const char **namep, int *lenp)</a>
-<a name="499"><span class="lineNum"> 499 </span> : : {</a>
-<a name="500"><span class="lineNum"> 500 </span> : : const struct fdt_property *prop;</a>
+<a name="430"><span class="lineNum"> 430 </span> : : /* Prior to version 16, properties may need realignment</a>
+<a name="431"><span class="lineNum"> 431 </span> : : * and this API does not work. fdt_getprop_*() will, however. */</a>
+<a name="432"><span class="lineNum"> 432 </span> :<span class="lineNoCov"> 0 : if (!can_assume(LATEST) &amp;&amp; fdt_version(fdt) &lt; 0x10) {</span></a>
+<a name="433"><span class="lineNum"> 433 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
+<a name="434"><span class="lineNum"> 434 </span> :<span class="lineNoCov"> 0 : *lenp = -FDT_ERR_BADVERSION;</span></a>
+<a name="435"><span class="lineNum"> 435 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="436"><span class="lineNum"> 436 </span> : : }</a>
+<a name="437"><span class="lineNum"> 437 </span> : : </a>
+<a name="438"><span class="lineNum"> 438 </span> :<span class="lineNoCov"> 0 : return fdt_get_property_namelen_(fdt, offset, name, namelen, lenp,</span></a>
+<a name="439"><span class="lineNum"> 439 </span> : : NULL);</a>
+<a name="440"><span class="lineNum"> 440 </span> : : }</a>
+<a name="441"><span class="lineNum"> 441 </span> : : </a>
+<a name="442"><span class="lineNum"> 442 </span> : : </a>
+<a name="443"><span class="lineNum"> 443 </span> :<span class="lineNoCov"> 0 : const struct fdt_property *fdt_get_property(const void *fdt,</span></a>
+<a name="444"><span class="lineNum"> 444 </span> : : int nodeoffset,</a>
+<a name="445"><span class="lineNum"> 445 </span> : : const char *name, int *lenp)</a>
+<a name="446"><span class="lineNum"> 446 </span> : : {</a>
+<a name="447"><span class="lineNum"> 447 </span> :<span class="lineNoCov"> 0 : return fdt_get_property_namelen(fdt, nodeoffset, name,</span></a>
+<a name="448"><span class="lineNum"> 448 </span> :<span class="lineNoCov"> 0 : strlen(name), lenp);</span></a>
+<a name="449"><span class="lineNum"> 449 </span> : : }</a>
+<a name="450"><span class="lineNum"> 450 </span> : : </a>
+<a name="451"><span class="lineNum"> 451 </span> :<span class="lineNoCov"> 0 : const void *fdt_getprop_namelen(const void *fdt, int nodeoffset,</span></a>
+<a name="452"><span class="lineNum"> 452 </span> : : const char *name, int namelen, int *lenp)</a>
+<a name="453"><span class="lineNum"> 453 </span> : : {</a>
+<a name="454"><span class="lineNum"> 454 </span> : : int poffset;</a>
+<a name="455"><span class="lineNum"> 455 </span> : : const struct fdt_property *prop;</a>
+<a name="456"><span class="lineNum"> 456 </span> : : </a>
+<a name="457"><span class="lineNum"> 457 </span> :<span class="lineNoCov"> 0 : prop = fdt_get_property_namelen_(fdt, nodeoffset, name, namelen, lenp,</span></a>
+<a name="458"><span class="lineNum"> 458 </span> : : &amp;poffset);</a>
+<a name="459"><span class="lineNum"> 459 </span> :<span class="lineNoCov"> 0 : if (!prop)</span></a>
+<a name="460"><span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="461"><span class="lineNum"> 461 </span> : : </a>
+<a name="462"><span class="lineNum"> 462 </span> : : /* Handle realignment */</a>
+<a name="463"><span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : if (!can_assume(LATEST) &amp;&amp; fdt_version(fdt) &lt; 0x10 &amp;&amp;</span></a>
+<a name="464"><span class="lineNum"> 464 </span> :<span class="lineNoCov"> 0 : (poffset + sizeof(*prop)) % 8 &amp;&amp; fdt32_ld_(&amp;prop-&gt;len) &gt;= 8)</span></a>
+<a name="465"><span class="lineNum"> 465 </span> :<span class="lineNoCov"> 0 : return prop-&gt;data + 4;</span></a>
+<a name="466"><span class="lineNum"> 466 </span> :<span class="lineNoCov"> 0 : return prop-&gt;data;</span></a>
+<a name="467"><span class="lineNum"> 467 </span> : : }</a>
+<a name="468"><span class="lineNum"> 468 </span> : : </a>
+<a name="469"><span class="lineNum"> 469 </span> :<span class="lineNoCov"> 0 : const void *fdt_getprop_by_offset(const void *fdt, int offset,</span></a>
+<a name="470"><span class="lineNum"> 470 </span> : : const char **namep, int *lenp)</a>
+<a name="471"><span class="lineNum"> 471 </span> : : {</a>
+<a name="472"><span class="lineNum"> 472 </span> : : const struct fdt_property *prop;</a>
+<a name="473"><span class="lineNum"> 473 </span> : : </a>
+<a name="474"><span class="lineNum"> 474 </span> :<span class="lineNoCov"> 0 : prop = fdt_get_property_by_offset_(fdt, offset, lenp);</span></a>
+<a name="475"><span class="lineNum"> 475 </span> :<span class="lineNoCov"> 0 : if (!prop)</span></a>
+<a name="476"><span class="lineNum"> 476 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="477"><span class="lineNum"> 477 </span> :<span class="lineNoCov"> 0 : if (namep) {</span></a>
+<a name="478"><span class="lineNum"> 478 </span> : : const char *name;</a>
+<a name="479"><span class="lineNum"> 479 </span> : : int namelen;</a>
+<a name="480"><span class="lineNum"> 480 </span> : : </a>
+<a name="481"><span class="lineNum"> 481 </span> :<span class="lineNoCov"> 0 : if (!can_assume(VALID_INPUT)) {</span></a>
+<a name="482"><span class="lineNum"> 482 </span> :<span class="lineNoCov"> 0 : name = fdt_get_string(fdt, fdt32_ld_(&amp;prop-&gt;nameoff),</span></a>
+<a name="483"><span class="lineNum"> 483 </span> : : &amp;namelen);</a>
+<a name="484"><span class="lineNum"> 484 </span> :<span class="lineNoCov"> 0 : if (!name) {</span></a>
+<a name="485"><span class="lineNum"> 485 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
+<a name="486"><span class="lineNum"> 486 </span> :<span class="lineNoCov"> 0 : *lenp = namelen;</span></a>
+<a name="487"><span class="lineNum"> 487 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="488"><span class="lineNum"> 488 </span> : : }</a>
+<a name="489"><span class="lineNum"> 489 </span> :<span class="lineNoCov"> 0 : *namep = name;</span></a>
+<a name="490"><span class="lineNum"> 490 </span> : : } else {</a>
+<a name="491"><span class="lineNum"> 491 </span> :<span class="lineNoCov"> 0 : *namep = fdt_string(fdt, fdt32_ld_(&amp;prop-&gt;nameoff));</span></a>
+<a name="492"><span class="lineNum"> 492 </span> : : }</a>
+<a name="493"><span class="lineNum"> 493 </span> : : }</a>
+<a name="494"><span class="lineNum"> 494 </span> : : </a>
+<a name="495"><span class="lineNum"> 495 </span> : : /* Handle realignment */</a>
+<a name="496"><span class="lineNum"> 496 </span> :<span class="lineNoCov"> 0 : if (!can_assume(LATEST) &amp;&amp; fdt_version(fdt) &lt; 0x10 &amp;&amp;</span></a>
+<a name="497"><span class="lineNum"> 497 </span> :<span class="lineNoCov"> 0 : (offset + sizeof(*prop)) % 8 &amp;&amp; fdt32_ld_(&amp;prop-&gt;len) &gt;= 8)</span></a>
+<a name="498"><span class="lineNum"> 498 </span> :<span class="lineNoCov"> 0 : return prop-&gt;data + 4;</span></a>
+<a name="499"><span class="lineNum"> 499 </span> :<span class="lineNoCov"> 0 : return prop-&gt;data;</span></a>
+<a name="500"><span class="lineNum"> 500 </span> : : }</a>
<a name="501"><span class="lineNum"> 501 </span> : : </a>
-<a name="502"><span class="lineNum"> 502 </span> :<span class="lineNoCov"> 0 : prop = fdt_get_property_by_offset_(fdt, offset, lenp);</span></a>
-<a name="503"><span class="lineNum"> 503 </span> :<span class="lineNoCov"> 0 : if (!prop)</span></a>
-<a name="504"><span class="lineNum"> 504 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="505"><span class="lineNum"> 505 </span> :<span class="lineNoCov"> 0 : if (namep) {</span></a>
-<a name="506"><span class="lineNum"> 506 </span> : : const char *name;</a>
-<a name="507"><span class="lineNum"> 507 </span> : : int namelen;</a>
-<a name="508"><span class="lineNum"> 508 </span> :<span class="lineNoCov"> 0 : name = fdt_get_string(fdt, fdt32_ld(&amp;prop-&gt;nameoff),</span></a>
-<a name="509"><span class="lineNum"> 509 </span> : : &amp;namelen);</a>
-<a name="510"><span class="lineNum"> 510 </span> :<span class="lineNoCov"> 0 : if (!name) {</span></a>
-<a name="511"><span class="lineNum"> 511 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
-<a name="512"><span class="lineNum"> 512 </span> :<span class="lineNoCov"> 0 : *lenp = namelen;</span></a>
-<a name="513"><span class="lineNum"> 513 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="514"><span class="lineNum"> 514 </span> : : }</a>
-<a name="515"><span class="lineNum"> 515 </span> :<span class="lineNoCov"> 0 : *namep = name;</span></a>
-<a name="516"><span class="lineNum"> 516 </span> : : }</a>
-<a name="517"><span class="lineNum"> 517 </span> : : </a>
-<a name="518"><span class="lineNum"> 518 </span> : : /* Handle realignment */</a>
-<a name="519"><span class="lineNum"> 519 </span> :<span class="lineNoCov"> 0 : if (fdt_version(fdt) &lt; 0x10 &amp;&amp; (offset + sizeof(*prop)) % 8 &amp;&amp;</span></a>
-<a name="520"><span class="lineNum"> 520 </span> :<span class="lineNoCov"> 0 : fdt32_ld(&amp;prop-&gt;len) &gt;= 8)</span></a>
-<a name="521"><span class="lineNum"> 521 </span> :<span class="lineNoCov"> 0 : return prop-&gt;data + 4;</span></a>
-<a name="522"><span class="lineNum"> 522 </span> :<span class="lineNoCov"> 0 : return prop-&gt;data;</span></a>
+<a name="502"><span class="lineNum"> 502 </span> :<span class="lineNoCov"> 0 : const void *fdt_getprop(const void *fdt, int nodeoffset,</span></a>
+<a name="503"><span class="lineNum"> 503 </span> : : const char *name, int *lenp)</a>
+<a name="504"><span class="lineNum"> 504 </span> : : {</a>
+<a name="505"><span class="lineNum"> 505 </span> :<span class="lineNoCov"> 0 : return fdt_getprop_namelen(fdt, nodeoffset, name, strlen(name), lenp);</span></a>
+<a name="506"><span class="lineNum"> 506 </span> : : }</a>
+<a name="507"><span class="lineNum"> 507 </span> : : </a>
+<a name="508"><span class="lineNum"> 508 </span> :<span class="lineNoCov"> 0 : uint32_t fdt_get_phandle(const void *fdt, int nodeoffset)</span></a>
+<a name="509"><span class="lineNum"> 509 </span> : : {</a>
+<a name="510"><span class="lineNum"> 510 </span> : : const fdt32_t *php;</a>
+<a name="511"><span class="lineNum"> 511 </span> : : int len;</a>
+<a name="512"><span class="lineNum"> 512 </span> : : </a>
+<a name="513"><span class="lineNum"> 513 </span> : : /* FIXME: This is a bit sub-optimal, since we potentially scan</a>
+<a name="514"><span class="lineNum"> 514 </span> : : * over all the properties twice. */</a>
+<a name="515"><span class="lineNum"> 515 </span> :<span class="lineNoCov"> 0 : php = fdt_getprop(fdt, nodeoffset, &quot;phandle&quot;, &amp;len);</span></a>
+<a name="516"><span class="lineNum"> 516 </span> :<span class="lineNoCov"> 0 : if (!php || (len != sizeof(*php))) {</span></a>
+<a name="517"><span class="lineNum"> 517 </span> :<span class="lineNoCov"> 0 : php = fdt_getprop(fdt, nodeoffset, &quot;linux,phandle&quot;, &amp;len);</span></a>
+<a name="518"><span class="lineNum"> 518 </span> :<span class="lineNoCov"> 0 : if (!php || (len != sizeof(*php)))</span></a>
+<a name="519"><span class="lineNum"> 519 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
+<a name="520"><span class="lineNum"> 520 </span> : : }</a>
+<a name="521"><span class="lineNum"> 521 </span> : : </a>
+<a name="522"><span class="lineNum"> 522 </span> :<span class="lineNoCov"> 0 : return fdt32_ld_(php);</span></a>
<a name="523"><span class="lineNum"> 523 </span> : : }</a>
<a name="524"><span class="lineNum"> 524 </span> : : </a>
-<a name="525"><span class="lineNum"> 525 </span> :<span class="lineNoCov"> 0 : const void *fdt_getprop(const void *fdt, int nodeoffset,</span></a>
-<a name="526"><span class="lineNum"> 526 </span> : : const char *name, int *lenp)</a>
+<a name="525"><span class="lineNum"> 525 </span> :<span class="lineNoCov"> 0 : const char *fdt_get_alias_namelen(const void *fdt,</span></a>
+<a name="526"><span class="lineNum"> 526 </span> : : const char *name, int namelen)</a>
<a name="527"><span class="lineNum"> 527 </span> : : {</a>
-<a name="528"><span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : return fdt_getprop_namelen(fdt, nodeoffset, name, strlen(name), lenp);</span></a>
-<a name="529"><span class="lineNum"> 529 </span> : : }</a>
-<a name="530"><span class="lineNum"> 530 </span> : : </a>
-<a name="531"><span class="lineNum"> 531 </span> :<span class="lineNoCov"> 0 : uint32_t fdt_get_phandle(const void *fdt, int nodeoffset)</span></a>
-<a name="532"><span class="lineNum"> 532 </span> : : {</a>
-<a name="533"><span class="lineNum"> 533 </span> : : const fdt32_t *php;</a>
-<a name="534"><span class="lineNum"> 534 </span> : : int len;</a>
-<a name="535"><span class="lineNum"> 535 </span> : : </a>
-<a name="536"><span class="lineNum"> 536 </span> : : /* FIXME: This is a bit sub-optimal, since we potentially scan</a>
-<a name="537"><span class="lineNum"> 537 </span> : : * over all the properties twice. */</a>
-<a name="538"><span class="lineNum"> 538 </span> :<span class="lineNoCov"> 0 : php = fdt_getprop(fdt, nodeoffset, &quot;phandle&quot;, &amp;len);</span></a>
-<a name="539"><span class="lineNum"> 539 </span> :<span class="lineNoCov"> 0 : if (!php || (len != sizeof(*php))) {</span></a>
-<a name="540"><span class="lineNum"> 540 </span> :<span class="lineNoCov"> 0 : php = fdt_getprop(fdt, nodeoffset, &quot;linux,phandle&quot;, &amp;len);</span></a>
-<a name="541"><span class="lineNum"> 541 </span> :<span class="lineNoCov"> 0 : if (!php || (len != sizeof(*php)))</span></a>
-<a name="542"><span class="lineNum"> 542 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
-<a name="543"><span class="lineNum"> 543 </span> : : }</a>
-<a name="544"><span class="lineNum"> 544 </span> : : </a>
-<a name="545"><span class="lineNum"> 545 </span> :<span class="lineNoCov"> 0 : return fdt32_ld(php);</span></a>
-<a name="546"><span class="lineNum"> 546 </span> : : }</a>
+<a name="528"><span class="lineNum"> 528 </span> : : int aliasoffset;</a>
+<a name="529"><span class="lineNum"> 529 </span> : : </a>
+<a name="530"><span class="lineNum"> 530 </span> :<span class="lineNoCov"> 0 : aliasoffset = fdt_path_offset(fdt, &quot;/aliases&quot;);</span></a>
+<a name="531"><span class="lineNum"> 531 </span> :<span class="lineNoCov"> 0 : if (aliasoffset &lt; 0)</span></a>
+<a name="532"><span class="lineNum"> 532 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="533"><span class="lineNum"> 533 </span> : : </a>
+<a name="534"><span class="lineNum"> 534 </span> :<span class="lineNoCov"> 0 : return fdt_getprop_namelen(fdt, aliasoffset, name, namelen, NULL);</span></a>
+<a name="535"><span class="lineNum"> 535 </span> : : }</a>
+<a name="536"><span class="lineNum"> 536 </span> : : </a>
+<a name="537"><span class="lineNum"> 537 </span> :<span class="lineNoCov"> 0 : const char *fdt_get_alias(const void *fdt, const char *name)</span></a>
+<a name="538"><span class="lineNum"> 538 </span> : : {</a>
+<a name="539"><span class="lineNum"> 539 </span> :<span class="lineNoCov"> 0 : return fdt_get_alias_namelen(fdt, name, strlen(name));</span></a>
+<a name="540"><span class="lineNum"> 540 </span> : : }</a>
+<a name="541"><span class="lineNum"> 541 </span> : : </a>
+<a name="542"><span class="lineNum"> 542 </span> :<span class="lineNoCov"> 0 : int fdt_get_path(const void *fdt, int nodeoffset, char *buf, int buflen)</span></a>
+<a name="543"><span class="lineNum"> 543 </span> : : {</a>
+<a name="544"><span class="lineNum"> 544 </span> :<span class="lineNoCov"> 0 : int pdepth = 0, p = 0;</span></a>
+<a name="545"><span class="lineNum"> 545 </span> : : int offset, depth, namelen;</a>
+<a name="546"><span class="lineNum"> 546 </span> : : const char *name;</a>
<a name="547"><span class="lineNum"> 547 </span> : : </a>
-<a name="548"><span class="lineNum"> 548 </span> :<span class="lineNoCov"> 0 : const char *fdt_get_alias_namelen(const void *fdt,</span></a>
-<a name="549"><span class="lineNum"> 549 </span> : : const char *name, int namelen)</a>
-<a name="550"><span class="lineNum"> 550 </span> : : {</a>
-<a name="551"><span class="lineNum"> 551 </span> : : int aliasoffset;</a>
+<a name="548"><span class="lineNum"> 548 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
+<a name="549"><span class="lineNum"> 549 </span> : : </a>
+<a name="550"><span class="lineNum"> 550 </span> :<span class="lineNoCov"> 0 : if (buflen &lt; 2)</span></a>
+<a name="551"><span class="lineNum"> 551 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
<a name="552"><span class="lineNum"> 552 </span> : : </a>
-<a name="553"><span class="lineNum"> 553 </span> :<span class="lineNoCov"> 0 : aliasoffset = fdt_path_offset(fdt, &quot;/aliases&quot;);</span></a>
-<a name="554"><span class="lineNum"> 554 </span> :<span class="lineNoCov"> 0 : if (aliasoffset &lt; 0)</span></a>
-<a name="555"><span class="lineNum"> 555 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="556"><span class="lineNum"> 556 </span> : : </a>
-<a name="557"><span class="lineNum"> 557 </span> :<span class="lineNoCov"> 0 : return fdt_getprop_namelen(fdt, aliasoffset, name, namelen, NULL);</span></a>
-<a name="558"><span class="lineNum"> 558 </span> : : }</a>
-<a name="559"><span class="lineNum"> 559 </span> : : </a>
-<a name="560"><span class="lineNum"> 560 </span> :<span class="lineNoCov"> 0 : const char *fdt_get_alias(const void *fdt, const char *name)</span></a>
-<a name="561"><span class="lineNum"> 561 </span> : : {</a>
-<a name="562"><span class="lineNum"> 562 </span> :<span class="lineNoCov"> 0 : return fdt_get_alias_namelen(fdt, name, strlen(name));</span></a>
-<a name="563"><span class="lineNum"> 563 </span> : : }</a>
-<a name="564"><span class="lineNum"> 564 </span> : : </a>
-<a name="565"><span class="lineNum"> 565 </span> :<span class="lineNoCov"> 0 : int fdt_get_path(const void *fdt, int nodeoffset, char *buf, int buflen)</span></a>
-<a name="566"><span class="lineNum"> 566 </span> : : {</a>
-<a name="567"><span class="lineNum"> 567 </span> :<span class="lineNoCov"> 0 : int pdepth = 0, p = 0;</span></a>
-<a name="568"><span class="lineNum"> 568 </span> : : int offset, depth, namelen;</a>
-<a name="569"><span class="lineNum"> 569 </span> : : const char *name;</a>
-<a name="570"><span class="lineNum"> 570 </span> : : </a>
-<a name="571"><span class="lineNum"> 571 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
-<a name="572"><span class="lineNum"> 572 </span> : : </a>
-<a name="573"><span class="lineNum"> 573 </span> :<span class="lineNoCov"> 0 : if (buflen &lt; 2)</span></a>
-<a name="574"><span class="lineNum"> 574 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
-<a name="575"><span class="lineNum"> 575 </span> : : </a>
-<a name="576"><span class="lineNum"> 576 </span> :<span class="lineNoCov"> 0 : for (offset = 0, depth = 0;</span></a>
-<a name="577"><span class="lineNum"> 577 </span> :<span class="lineNoCov"> 0 : (offset &gt;= 0) &amp;&amp; (offset &lt;= nodeoffset);</span></a>
-<a name="578"><span class="lineNum"> 578 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, &amp;depth)) {</span></a>
-<a name="579"><span class="lineNum"> 579 </span> :<span class="lineNoCov"> 0 : while (pdepth &gt; depth) {</span></a>
-<a name="580"><span class="lineNum"> 580 </span> : : do {</a>
-<a name="581"><span class="lineNum"> 581 </span> :<span class="lineNoCov"> 0 : p--;</span></a>
-<a name="582"><span class="lineNum"> 582 </span> :<span class="lineNoCov"> 0 : } while (buf[p-1] != '/');</span></a>
-<a name="583"><span class="lineNum"> 583 </span> :<span class="lineNoCov"> 0 : pdepth--;</span></a>
-<a name="584"><span class="lineNum"> 584 </span> : : }</a>
+<a name="553"><span class="lineNum"> 553 </span> :<span class="lineNoCov"> 0 : for (offset = 0, depth = 0;</span></a>
+<a name="554"><span class="lineNum"> 554 </span> :<span class="lineNoCov"> 0 : (offset &gt;= 0) &amp;&amp; (offset &lt;= nodeoffset);</span></a>
+<a name="555"><span class="lineNum"> 555 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, &amp;depth)) {</span></a>
+<a name="556"><span class="lineNum"> 556 </span> :<span class="lineNoCov"> 0 : while (pdepth &gt; depth) {</span></a>
+<a name="557"><span class="lineNum"> 557 </span> : : do {</a>
+<a name="558"><span class="lineNum"> 558 </span> :<span class="lineNoCov"> 0 : p--;</span></a>
+<a name="559"><span class="lineNum"> 559 </span> :<span class="lineNoCov"> 0 : } while (buf[p-1] != '/');</span></a>
+<a name="560"><span class="lineNum"> 560 </span> :<span class="lineNoCov"> 0 : pdepth--;</span></a>
+<a name="561"><span class="lineNum"> 561 </span> : : }</a>
+<a name="562"><span class="lineNum"> 562 </span> : : </a>
+<a name="563"><span class="lineNum"> 563 </span> :<span class="lineNoCov"> 0 : if (pdepth &gt;= depth) {</span></a>
+<a name="564"><span class="lineNum"> 564 </span> :<span class="lineNoCov"> 0 : name = fdt_get_name(fdt, offset, &amp;namelen);</span></a>
+<a name="565"><span class="lineNum"> 565 </span> :<span class="lineNoCov"> 0 : if (!name)</span></a>
+<a name="566"><span class="lineNum"> 566 </span> :<span class="lineNoCov"> 0 : return namelen;</span></a>
+<a name="567"><span class="lineNum"> 567 </span> :<span class="lineNoCov"> 0 : if ((p + namelen + 1) &lt;= buflen) {</span></a>
+<a name="568"><span class="lineNum"> 568 </span> :<span class="lineNoCov"> 0 : memcpy(buf + p, name, namelen);</span></a>
+<a name="569"><span class="lineNum"> 569 </span> :<span class="lineNoCov"> 0 : p += namelen;</span></a>
+<a name="570"><span class="lineNum"> 570 </span> :<span class="lineNoCov"> 0 : buf[p++] = '/';</span></a>
+<a name="571"><span class="lineNum"> 571 </span> :<span class="lineNoCov"> 0 : pdepth++;</span></a>
+<a name="572"><span class="lineNum"> 572 </span> : : }</a>
+<a name="573"><span class="lineNum"> 573 </span> : : }</a>
+<a name="574"><span class="lineNum"> 574 </span> : : </a>
+<a name="575"><span class="lineNum"> 575 </span> :<span class="lineNoCov"> 0 : if (offset == nodeoffset) {</span></a>
+<a name="576"><span class="lineNum"> 576 </span> :<span class="lineNoCov"> 0 : if (pdepth &lt; (depth + 1))</span></a>
+<a name="577"><span class="lineNum"> 577 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
+<a name="578"><span class="lineNum"> 578 </span> : : </a>
+<a name="579"><span class="lineNum"> 579 </span> :<span class="lineNoCov"> 0 : if (p &gt; 1) /* special case so that root path is &quot;/&quot;, not &quot;&quot; */</span></a>
+<a name="580"><span class="lineNum"> 580 </span> :<span class="lineNoCov"> 0 : p--;</span></a>
+<a name="581"><span class="lineNum"> 581 </span> :<span class="lineNoCov"> 0 : buf[p] = '\0';</span></a>
+<a name="582"><span class="lineNum"> 582 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
+<a name="583"><span class="lineNum"> 583 </span> : : }</a>
+<a name="584"><span class="lineNum"> 584 </span> : : }</a>
<a name="585"><span class="lineNum"> 585 </span> : : </a>
-<a name="586"><span class="lineNum"> 586 </span> :<span class="lineNoCov"> 0 : if (pdepth &gt;= depth) {</span></a>
-<a name="587"><span class="lineNum"> 587 </span> :<span class="lineNoCov"> 0 : name = fdt_get_name(fdt, offset, &amp;namelen);</span></a>
-<a name="588"><span class="lineNum"> 588 </span> :<span class="lineNoCov"> 0 : if (!name)</span></a>
-<a name="589"><span class="lineNum"> 589 </span> :<span class="lineNoCov"> 0 : return namelen;</span></a>
-<a name="590"><span class="lineNum"> 590 </span> :<span class="lineNoCov"> 0 : if ((p + namelen + 1) &lt;= buflen) {</span></a>
-<a name="591"><span class="lineNum"> 591 </span> :<span class="lineNoCov"> 0 : memcpy(buf + p, name, namelen);</span></a>
-<a name="592"><span class="lineNum"> 592 </span> :<span class="lineNoCov"> 0 : p += namelen;</span></a>
-<a name="593"><span class="lineNum"> 593 </span> :<span class="lineNoCov"> 0 : buf[p++] = '/';</span></a>
-<a name="594"><span class="lineNum"> 594 </span> :<span class="lineNoCov"> 0 : pdepth++;</span></a>
-<a name="595"><span class="lineNum"> 595 </span> : : }</a>
-<a name="596"><span class="lineNum"> 596 </span> : : }</a>
-<a name="597"><span class="lineNum"> 597 </span> : : </a>
-<a name="598"><span class="lineNum"> 598 </span> :<span class="lineNoCov"> 0 : if (offset == nodeoffset) {</span></a>
-<a name="599"><span class="lineNum"> 599 </span> :<span class="lineNoCov"> 0 : if (pdepth &lt; (depth + 1))</span></a>
-<a name="600"><span class="lineNum"> 600 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
+<a name="586"><span class="lineNum"> 586 </span> :<span class="lineNoCov"> 0 : if ((offset == -FDT_ERR_NOTFOUND) || (offset &gt;= 0))</span></a>
+<a name="587"><span class="lineNum"> 587 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADOFFSET;</span></a>
+<a name="588"><span class="lineNum"> 588 </span> :<span class="lineNoCov"> 0 : else if (offset == -FDT_ERR_BADOFFSET)</span></a>
+<a name="589"><span class="lineNum"> 589 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADSTRUCTURE;</span></a>
+<a name="590"><span class="lineNum"> 590 </span> : : </a>
+<a name="591"><span class="lineNum"> 591 </span> :<span class="lineNoCov"> 0 : return offset; /* error from fdt_next_node() */</span></a>
+<a name="592"><span class="lineNum"> 592 </span> : : }</a>
+<a name="593"><span class="lineNum"> 593 </span> : : </a>
+<a name="594"><span class="lineNum"> 594 </span> :<span class="lineNoCov"> 0 : int fdt_supernode_atdepth_offset(const void *fdt, int nodeoffset,</span></a>
+<a name="595"><span class="lineNum"> 595 </span> : : int supernodedepth, int *nodedepth)</a>
+<a name="596"><span class="lineNum"> 596 </span> : : {</a>
+<a name="597"><span class="lineNum"> 597 </span> : : int offset, depth;</a>
+<a name="598"><span class="lineNum"> 598 </span> :<span class="lineNoCov"> 0 : int supernodeoffset = -FDT_ERR_INTERNAL;</span></a>
+<a name="599"><span class="lineNum"> 599 </span> : : </a>
+<a name="600"><span class="lineNum"> 600 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
<a name="601"><span class="lineNum"> 601 </span> : : </a>
-<a name="602"><span class="lineNum"> 602 </span> :<span class="lineNoCov"> 0 : if (p &gt; 1) /* special case so that root path is &quot;/&quot;, not &quot;&quot; */</span></a>
-<a name="603"><span class="lineNum"> 603 </span> :<span class="lineNoCov"> 0 : p--;</span></a>
-<a name="604"><span class="lineNum"> 604 </span> :<span class="lineNoCov"> 0 : buf[p] = '\0';</span></a>
-<a name="605"><span class="lineNum"> 605 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
-<a name="606"><span class="lineNum"> 606 </span> : : }</a>
-<a name="607"><span class="lineNum"> 607 </span> : : }</a>
-<a name="608"><span class="lineNum"> 608 </span> : : </a>
-<a name="609"><span class="lineNum"> 609 </span> :<span class="lineNoCov"> 0 : if ((offset == -FDT_ERR_NOTFOUND) || (offset &gt;= 0))</span></a>
-<a name="610"><span class="lineNum"> 610 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADOFFSET;</span></a>
-<a name="611"><span class="lineNum"> 611 </span> :<span class="lineNoCov"> 0 : else if (offset == -FDT_ERR_BADOFFSET)</span></a>
-<a name="612"><span class="lineNum"> 612 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADSTRUCTURE;</span></a>
-<a name="613"><span class="lineNum"> 613 </span> : : </a>
-<a name="614"><span class="lineNum"> 614 </span> :<span class="lineNoCov"> 0 : return offset; /* error from fdt_next_node() */</span></a>
-<a name="615"><span class="lineNum"> 615 </span> : : }</a>
-<a name="616"><span class="lineNum"> 616 </span> : : </a>
-<a name="617"><span class="lineNum"> 617 </span> :<span class="lineNoCov"> 0 : int fdt_supernode_atdepth_offset(const void *fdt, int nodeoffset,</span></a>
-<a name="618"><span class="lineNum"> 618 </span> : : int supernodedepth, int *nodedepth)</a>
-<a name="619"><span class="lineNum"> 619 </span> : : {</a>
-<a name="620"><span class="lineNum"> 620 </span> : : int offset, depth;</a>
-<a name="621"><span class="lineNum"> 621 </span> :<span class="lineNoCov"> 0 : int supernodeoffset = -FDT_ERR_INTERNAL;</span></a>
-<a name="622"><span class="lineNum"> 622 </span> : : </a>
-<a name="623"><span class="lineNum"> 623 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
-<a name="624"><span class="lineNum"> 624 </span> : : </a>
-<a name="625"><span class="lineNum"> 625 </span> :<span class="lineNoCov"> 0 : if (supernodedepth &lt; 0)</span></a>
-<a name="626"><span class="lineNum"> 626 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOTFOUND;</span></a>
-<a name="627"><span class="lineNum"> 627 </span> : : </a>
-<a name="628"><span class="lineNum"> 628 </span> :<span class="lineNoCov"> 0 : for (offset = 0, depth = 0;</span></a>
-<a name="629"><span class="lineNum"> 629 </span> :<span class="lineNoCov"> 0 : (offset &gt;= 0) &amp;&amp; (offset &lt;= nodeoffset);</span></a>
-<a name="630"><span class="lineNum"> 630 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, &amp;depth)) {</span></a>
-<a name="631"><span class="lineNum"> 631 </span> :<span class="lineNoCov"> 0 : if (depth == supernodedepth)</span></a>
-<a name="632"><span class="lineNum"> 632 </span> :<span class="lineNoCov"> 0 : supernodeoffset = offset;</span></a>
-<a name="633"><span class="lineNum"> 633 </span> : : </a>
-<a name="634"><span class="lineNum"> 634 </span> :<span class="lineNoCov"> 0 : if (offset == nodeoffset) {</span></a>
-<a name="635"><span class="lineNum"> 635 </span> :<span class="lineNoCov"> 0 : if (nodedepth)</span></a>
-<a name="636"><span class="lineNum"> 636 </span> :<span class="lineNoCov"> 0 : *nodedepth = depth;</span></a>
-<a name="637"><span class="lineNum"> 637 </span> : : </a>
-<a name="638"><span class="lineNum"> 638 </span> :<span class="lineNoCov"> 0 : if (supernodedepth &gt; depth)</span></a>
-<a name="639"><span class="lineNum"> 639 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOTFOUND;</span></a>
-<a name="640"><span class="lineNum"> 640 </span> : : else</a>
-<a name="641"><span class="lineNum"> 641 </span> :<span class="lineNoCov"> 0 : return supernodeoffset;</span></a>
-<a name="642"><span class="lineNum"> 642 </span> : : }</a>
-<a name="643"><span class="lineNum"> 643 </span> : : }</a>
-<a name="644"><span class="lineNum"> 644 </span> : : </a>
-<a name="645"><span class="lineNum"> 645 </span> :<span class="lineNoCov"> 0 : if ((offset == -FDT_ERR_NOTFOUND) || (offset &gt;= 0))</span></a>
-<a name="646"><span class="lineNum"> 646 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADOFFSET;</span></a>
-<a name="647"><span class="lineNum"> 647 </span> :<span class="lineNoCov"> 0 : else if (offset == -FDT_ERR_BADOFFSET)</span></a>
-<a name="648"><span class="lineNum"> 648 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADSTRUCTURE;</span></a>
-<a name="649"><span class="lineNum"> 649 </span> : : </a>
-<a name="650"><span class="lineNum"> 650 </span> :<span class="lineNoCov"> 0 : return offset; /* error from fdt_next_node() */</span></a>
-<a name="651"><span class="lineNum"> 651 </span> : : }</a>
-<a name="652"><span class="lineNum"> 652 </span> : : </a>
-<a name="653"><span class="lineNum"> 653 </span> :<span class="lineNoCov"> 0 : int fdt_node_depth(const void *fdt, int nodeoffset)</span></a>
-<a name="654"><span class="lineNum"> 654 </span> : : {</a>
-<a name="655"><span class="lineNum"> 655 </span> : : int nodedepth;</a>
-<a name="656"><span class="lineNum"> 656 </span> : : int err;</a>
-<a name="657"><span class="lineNum"> 657 </span> : : </a>
-<a name="658"><span class="lineNum"> 658 </span> :<span class="lineNoCov"> 0 : err = fdt_supernode_atdepth_offset(fdt, nodeoffset, 0, &amp;nodedepth);</span></a>
-<a name="659"><span class="lineNum"> 659 </span> :<span class="lineNoCov"> 0 : if (err)</span></a>
-<a name="660"><span class="lineNum"> 660 </span> :<span class="lineNoCov"> 0 : return (err &lt; 0) ? err : -FDT_ERR_INTERNAL;</span></a>
-<a name="661"><span class="lineNum"> 661 </span> :<span class="lineNoCov"> 0 : return nodedepth;</span></a>
-<a name="662"><span class="lineNum"> 662 </span> : : }</a>
+<a name="602"><span class="lineNum"> 602 </span> :<span class="lineNoCov"> 0 : if (supernodedepth &lt; 0)</span></a>
+<a name="603"><span class="lineNum"> 603 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOTFOUND;</span></a>
+<a name="604"><span class="lineNum"> 604 </span> : : </a>
+<a name="605"><span class="lineNum"> 605 </span> :<span class="lineNoCov"> 0 : for (offset = 0, depth = 0;</span></a>
+<a name="606"><span class="lineNum"> 606 </span> :<span class="lineNoCov"> 0 : (offset &gt;= 0) &amp;&amp; (offset &lt;= nodeoffset);</span></a>
+<a name="607"><span class="lineNum"> 607 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, &amp;depth)) {</span></a>
+<a name="608"><span class="lineNum"> 608 </span> :<span class="lineNoCov"> 0 : if (depth == supernodedepth)</span></a>
+<a name="609"><span class="lineNum"> 609 </span> :<span class="lineNoCov"> 0 : supernodeoffset = offset;</span></a>
+<a name="610"><span class="lineNum"> 610 </span> : : </a>
+<a name="611"><span class="lineNum"> 611 </span> :<span class="lineNoCov"> 0 : if (offset == nodeoffset) {</span></a>
+<a name="612"><span class="lineNum"> 612 </span> :<span class="lineNoCov"> 0 : if (nodedepth)</span></a>
+<a name="613"><span class="lineNum"> 613 </span> :<span class="lineNoCov"> 0 : *nodedepth = depth;</span></a>
+<a name="614"><span class="lineNum"> 614 </span> : : </a>
+<a name="615"><span class="lineNum"> 615 </span> :<span class="lineNoCov"> 0 : if (supernodedepth &gt; depth)</span></a>
+<a name="616"><span class="lineNum"> 616 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOTFOUND;</span></a>
+<a name="617"><span class="lineNum"> 617 </span> : : else</a>
+<a name="618"><span class="lineNum"> 618 </span> :<span class="lineNoCov"> 0 : return supernodeoffset;</span></a>
+<a name="619"><span class="lineNum"> 619 </span> : : }</a>
+<a name="620"><span class="lineNum"> 620 </span> : : }</a>
+<a name="621"><span class="lineNum"> 621 </span> : : </a>
+<a name="622"><span class="lineNum"> 622 </span> :<span class="lineNoCov"> 0 : if (!can_assume(VALID_INPUT)) {</span></a>
+<a name="623"><span class="lineNum"> 623 </span> :<span class="lineNoCov"> 0 : if ((offset == -FDT_ERR_NOTFOUND) || (offset &gt;= 0))</span></a>
+<a name="624"><span class="lineNum"> 624 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADOFFSET;</span></a>
+<a name="625"><span class="lineNum"> 625 </span> :<span class="lineNoCov"> 0 : else if (offset == -FDT_ERR_BADOFFSET)</span></a>
+<a name="626"><span class="lineNum"> 626 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADSTRUCTURE;</span></a>
+<a name="627"><span class="lineNum"> 627 </span> : : }</a>
+<a name="628"><span class="lineNum"> 628 </span> : : </a>
+<a name="629"><span class="lineNum"> 629 </span> :<span class="lineNoCov"> 0 : return offset; /* error from fdt_next_node() */</span></a>
+<a name="630"><span class="lineNum"> 630 </span> : : }</a>
+<a name="631"><span class="lineNum"> 631 </span> : : </a>
+<a name="632"><span class="lineNum"> 632 </span> :<span class="lineNoCov"> 0 : int fdt_node_depth(const void *fdt, int nodeoffset)</span></a>
+<a name="633"><span class="lineNum"> 633 </span> : : {</a>
+<a name="634"><span class="lineNum"> 634 </span> : : int nodedepth;</a>
+<a name="635"><span class="lineNum"> 635 </span> : : int err;</a>
+<a name="636"><span class="lineNum"> 636 </span> : : </a>
+<a name="637"><span class="lineNum"> 637 </span> :<span class="lineNoCov"> 0 : err = fdt_supernode_atdepth_offset(fdt, nodeoffset, 0, &amp;nodedepth);</span></a>
+<a name="638"><span class="lineNum"> 638 </span> :<span class="lineNoCov"> 0 : if (err)</span></a>
+<a name="639"><span class="lineNum"> 639 </span> :<span class="lineNoCov"> 0 : return (can_assume(LIBFDT_FLAWLESS) || err &lt; 0) ? err :</span></a>
+<a name="640"><span class="lineNum"> 640 </span> : : -FDT_ERR_INTERNAL;</a>
+<a name="641"><span class="lineNum"> 641 </span> :<span class="lineNoCov"> 0 : return nodedepth;</span></a>
+<a name="642"><span class="lineNum"> 642 </span> : : }</a>
+<a name="643"><span class="lineNum"> 643 </span> : : </a>
+<a name="644"><span class="lineNum"> 644 </span> :<span class="lineNoCov"> 0 : int fdt_parent_offset(const void *fdt, int nodeoffset)</span></a>
+<a name="645"><span class="lineNum"> 645 </span> : : {</a>
+<a name="646"><span class="lineNum"> 646 </span> :<span class="lineNoCov"> 0 : int nodedepth = fdt_node_depth(fdt, nodeoffset);</span></a>
+<a name="647"><span class="lineNum"> 647 </span> : : </a>
+<a name="648"><span class="lineNum"> 648 </span> :<span class="lineNoCov"> 0 : if (nodedepth &lt; 0)</span></a>
+<a name="649"><span class="lineNum"> 649 </span> :<span class="lineNoCov"> 0 : return nodedepth;</span></a>
+<a name="650"><span class="lineNum"> 650 </span> :<span class="lineNoCov"> 0 : return fdt_supernode_atdepth_offset(fdt, nodeoffset,</span></a>
+<a name="651"><span class="lineNum"> 651 </span> : : nodedepth - 1, NULL);</a>
+<a name="652"><span class="lineNum"> 652 </span> : : }</a>
+<a name="653"><span class="lineNum"> 653 </span> : : </a>
+<a name="654"><span class="lineNum"> 654 </span> :<span class="lineNoCov"> 0 : int fdt_node_offset_by_prop_value(const void *fdt, int startoffset,</span></a>
+<a name="655"><span class="lineNum"> 655 </span> : : const char *propname,</a>
+<a name="656"><span class="lineNum"> 656 </span> : : const void *propval, int proplen)</a>
+<a name="657"><span class="lineNum"> 657 </span> : : {</a>
+<a name="658"><span class="lineNum"> 658 </span> : : int offset;</a>
+<a name="659"><span class="lineNum"> 659 </span> : : const void *val;</a>
+<a name="660"><span class="lineNum"> 660 </span> : : int len;</a>
+<a name="661"><span class="lineNum"> 661 </span> : : </a>
+<a name="662"><span class="lineNum"> 662 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
<a name="663"><span class="lineNum"> 663 </span> : : </a>
-<a name="664"><span class="lineNum"> 664 </span> :<span class="lineNoCov"> 0 : int fdt_parent_offset(const void *fdt, int nodeoffset)</span></a>
-<a name="665"><span class="lineNum"> 665 </span> : : {</a>
-<a name="666"><span class="lineNum"> 666 </span> :<span class="lineNoCov"> 0 : int nodedepth = fdt_node_depth(fdt, nodeoffset);</span></a>
-<a name="667"><span class="lineNum"> 667 </span> : : </a>
-<a name="668"><span class="lineNum"> 668 </span> :<span class="lineNoCov"> 0 : if (nodedepth &lt; 0)</span></a>
-<a name="669"><span class="lineNum"> 669 </span> :<span class="lineNoCov"> 0 : return nodedepth;</span></a>
-<a name="670"><span class="lineNum"> 670 </span> :<span class="lineNoCov"> 0 : return fdt_supernode_atdepth_offset(fdt, nodeoffset,</span></a>
-<a name="671"><span class="lineNum"> 671 </span> : : nodedepth - 1, NULL);</a>
-<a name="672"><span class="lineNum"> 672 </span> : : }</a>
-<a name="673"><span class="lineNum"> 673 </span> : : </a>
-<a name="674"><span class="lineNum"> 674 </span> :<span class="lineNoCov"> 0 : int fdt_node_offset_by_prop_value(const void *fdt, int startoffset,</span></a>
-<a name="675"><span class="lineNum"> 675 </span> : : const char *propname,</a>
-<a name="676"><span class="lineNum"> 676 </span> : : const void *propval, int proplen)</a>
-<a name="677"><span class="lineNum"> 677 </span> : : {</a>
-<a name="678"><span class="lineNum"> 678 </span> : : int offset;</a>
-<a name="679"><span class="lineNum"> 679 </span> : : const void *val;</a>
-<a name="680"><span class="lineNum"> 680 </span> : : int len;</a>
-<a name="681"><span class="lineNum"> 681 </span> : : </a>
-<a name="682"><span class="lineNum"> 682 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
-<a name="683"><span class="lineNum"> 683 </span> : : </a>
-<a name="684"><span class="lineNum"> 684 </span> : : /* FIXME: The algorithm here is pretty horrible: we scan each</a>
-<a name="685"><span class="lineNum"> 685 </span> : : * property of a node in fdt_getprop(), then if that didn't</a>
-<a name="686"><span class="lineNum"> 686 </span> : : * find what we want, we scan over them again making our way</a>
-<a name="687"><span class="lineNum"> 687 </span> : : * to the next node. Still it's the easiest to implement</a>
-<a name="688"><span class="lineNum"> 688 </span> : : * approach; performance can come later. */</a>
-<a name="689"><span class="lineNum"> 689 </span> :<span class="lineNoCov"> 0 : for (offset = fdt_next_node(fdt, startoffset, NULL);</span></a>
-<a name="690"><span class="lineNum"> 690 </span> : : offset &gt;= 0;</a>
-<a name="691"><span class="lineNum"> 691 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, NULL)) {</span></a>
-<a name="692"><span class="lineNum"> 692 </span> :<span class="lineNoCov"> 0 : val = fdt_getprop(fdt, offset, propname, &amp;len);</span></a>
-<a name="693"><span class="lineNum"> 693 </span> :<span class="lineNoCov"> 0 : if (val &amp;&amp; (len == proplen)</span></a>
-<a name="694"><span class="lineNum"> 694 </span> :<span class="lineNoCov"> 0 : &amp;&amp; (memcmp(val, propval, len) == 0))</span></a>
-<a name="695"><span class="lineNum"> 695 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
-<a name="696"><span class="lineNum"> 696 </span> : : }</a>
-<a name="697"><span class="lineNum"> 697 </span> : : </a>
-<a name="698"><span class="lineNum"> 698 </span> :<span class="lineNoCov"> 0 : return offset; /* error from fdt_next_node() */</span></a>
-<a name="699"><span class="lineNum"> 699 </span> : : }</a>
-<a name="700"><span class="lineNum"> 700 </span> : : </a>
-<a name="701"><span class="lineNum"> 701 </span> :<span class="lineNoCov"> 0 : int fdt_node_offset_by_phandle(const void *fdt, uint32_t phandle)</span></a>
-<a name="702"><span class="lineNum"> 702 </span> : : {</a>
-<a name="703"><span class="lineNum"> 703 </span> : : int offset;</a>
-<a name="704"><span class="lineNum"> 704 </span> : : </a>
-<a name="705"><span class="lineNum"> 705 </span> :<span class="lineNoCov"> 0 : if ((phandle == 0) || (phandle == -1))</span></a>
-<a name="706"><span class="lineNum"> 706 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADPHANDLE;</span></a>
-<a name="707"><span class="lineNum"> 707 </span> : : </a>
-<a name="708"><span class="lineNum"> 708 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
-<a name="709"><span class="lineNum"> 709 </span> : : </a>
-<a name="710"><span class="lineNum"> 710 </span> : : /* FIXME: The algorithm here is pretty horrible: we</a>
-<a name="711"><span class="lineNum"> 711 </span> : : * potentially scan each property of a node in</a>
-<a name="712"><span class="lineNum"> 712 </span> : : * fdt_get_phandle(), then if that didn't find what</a>
-<a name="713"><span class="lineNum"> 713 </span> : : * we want, we scan over them again making our way to the next</a>
-<a name="714"><span class="lineNum"> 714 </span> : : * node. Still it's the easiest to implement approach;</a>
-<a name="715"><span class="lineNum"> 715 </span> : : * performance can come later. */</a>
-<a name="716"><span class="lineNum"> 716 </span> :<span class="lineNoCov"> 0 : for (offset = fdt_next_node(fdt, -1, NULL);</span></a>
-<a name="717"><span class="lineNum"> 717 </span> : : offset &gt;= 0;</a>
-<a name="718"><span class="lineNum"> 718 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, NULL)) {</span></a>
-<a name="719"><span class="lineNum"> 719 </span> :<span class="lineNoCov"> 0 : if (fdt_get_phandle(fdt, offset) == phandle)</span></a>
-<a name="720"><span class="lineNum"> 720 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
-<a name="721"><span class="lineNum"> 721 </span> : : }</a>
+<a name="664"><span class="lineNum"> 664 </span> : : /* FIXME: The algorithm here is pretty horrible: we scan each</a>
+<a name="665"><span class="lineNum"> 665 </span> : : * property of a node in fdt_getprop(), then if that didn't</a>
+<a name="666"><span class="lineNum"> 666 </span> : : * find what we want, we scan over them again making our way</a>
+<a name="667"><span class="lineNum"> 667 </span> : : * to the next node. Still it's the easiest to implement</a>
+<a name="668"><span class="lineNum"> 668 </span> : : * approach; performance can come later. */</a>
+<a name="669"><span class="lineNum"> 669 </span> :<span class="lineNoCov"> 0 : for (offset = fdt_next_node(fdt, startoffset, NULL);</span></a>
+<a name="670"><span class="lineNum"> 670 </span> : : offset &gt;= 0;</a>
+<a name="671"><span class="lineNum"> 671 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, NULL)) {</span></a>
+<a name="672"><span class="lineNum"> 672 </span> :<span class="lineNoCov"> 0 : val = fdt_getprop(fdt, offset, propname, &amp;len);</span></a>
+<a name="673"><span class="lineNum"> 673 </span> :<span class="lineNoCov"> 0 : if (val &amp;&amp; (len == proplen)</span></a>
+<a name="674"><span class="lineNum"> 674 </span> :<span class="lineNoCov"> 0 : &amp;&amp; (memcmp(val, propval, len) == 0))</span></a>
+<a name="675"><span class="lineNum"> 675 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
+<a name="676"><span class="lineNum"> 676 </span> : : }</a>
+<a name="677"><span class="lineNum"> 677 </span> : : </a>
+<a name="678"><span class="lineNum"> 678 </span> :<span class="lineNoCov"> 0 : return offset; /* error from fdt_next_node() */</span></a>
+<a name="679"><span class="lineNum"> 679 </span> : : }</a>
+<a name="680"><span class="lineNum"> 680 </span> : : </a>
+<a name="681"><span class="lineNum"> 681 </span> :<span class="lineNoCov"> 0 : int fdt_node_offset_by_phandle(const void *fdt, uint32_t phandle)</span></a>
+<a name="682"><span class="lineNum"> 682 </span> : : {</a>
+<a name="683"><span class="lineNum"> 683 </span> : : int offset;</a>
+<a name="684"><span class="lineNum"> 684 </span> : : </a>
+<a name="685"><span class="lineNum"> 685 </span> :<span class="lineNoCov"> 0 : if ((phandle == 0) || (phandle == ~0U))</span></a>
+<a name="686"><span class="lineNum"> 686 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADPHANDLE;</span></a>
+<a name="687"><span class="lineNum"> 687 </span> : : </a>
+<a name="688"><span class="lineNum"> 688 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
+<a name="689"><span class="lineNum"> 689 </span> : : </a>
+<a name="690"><span class="lineNum"> 690 </span> : : /* FIXME: The algorithm here is pretty horrible: we</a>
+<a name="691"><span class="lineNum"> 691 </span> : : * potentially scan each property of a node in</a>
+<a name="692"><span class="lineNum"> 692 </span> : : * fdt_get_phandle(), then if that didn't find what</a>
+<a name="693"><span class="lineNum"> 693 </span> : : * we want, we scan over them again making our way to the next</a>
+<a name="694"><span class="lineNum"> 694 </span> : : * node. Still it's the easiest to implement approach;</a>
+<a name="695"><span class="lineNum"> 695 </span> : : * performance can come later. */</a>
+<a name="696"><span class="lineNum"> 696 </span> :<span class="lineNoCov"> 0 : for (offset = fdt_next_node(fdt, -1, NULL);</span></a>
+<a name="697"><span class="lineNum"> 697 </span> : : offset &gt;= 0;</a>
+<a name="698"><span class="lineNum"> 698 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, NULL)) {</span></a>
+<a name="699"><span class="lineNum"> 699 </span> :<span class="lineNoCov"> 0 : if (fdt_get_phandle(fdt, offset) == phandle)</span></a>
+<a name="700"><span class="lineNum"> 700 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
+<a name="701"><span class="lineNum"> 701 </span> : : }</a>
+<a name="702"><span class="lineNum"> 702 </span> : : </a>
+<a name="703"><span class="lineNum"> 703 </span> :<span class="lineNoCov"> 0 : return offset; /* error from fdt_next_node() */</span></a>
+<a name="704"><span class="lineNum"> 704 </span> : : }</a>
+<a name="705"><span class="lineNum"> 705 </span> : : </a>
+<a name="706"><span class="lineNum"> 706 </span> :<span class="lineNoCov"> 0 : int fdt_stringlist_contains(const char *strlist, int listlen, const char *str)</span></a>
+<a name="707"><span class="lineNum"> 707 </span> : : {</a>
+<a name="708"><span class="lineNum"> 708 </span> :<span class="lineNoCov"> 0 : int len = strlen(str);</span></a>
+<a name="709"><span class="lineNum"> 709 </span> : : const char *p;</a>
+<a name="710"><span class="lineNum"> 710 </span> : : </a>
+<a name="711"><span class="lineNum"> 711 </span> :<span class="lineNoCov"> 0 : while (listlen &gt;= len) {</span></a>
+<a name="712"><span class="lineNum"> 712 </span> :<span class="lineNoCov"> 0 : if (memcmp(str, strlist, len+1) == 0)</span></a>
+<a name="713"><span class="lineNum"> 713 </span> :<span class="lineNoCov"> 0 : return 1;</span></a>
+<a name="714"><span class="lineNum"> 714 </span> :<span class="lineNoCov"> 0 : p = memchr(strlist, '\0', listlen);</span></a>
+<a name="715"><span class="lineNum"> 715 </span> :<span class="lineNoCov"> 0 : if (!p)</span></a>
+<a name="716"><span class="lineNum"> 716 </span> :<span class="lineNoCov"> 0 : return 0; /* malformed strlist.. */</span></a>
+<a name="717"><span class="lineNum"> 717 </span> :<span class="lineNoCov"> 0 : listlen -= (p-strlist) + 1;</span></a>
+<a name="718"><span class="lineNum"> 718 </span> :<span class="lineNoCov"> 0 : strlist = p + 1;</span></a>
+<a name="719"><span class="lineNum"> 719 </span> : : }</a>
+<a name="720"><span class="lineNum"> 720 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
+<a name="721"><span class="lineNum"> 721 </span> : : }</a>
<a name="722"><span class="lineNum"> 722 </span> : : </a>
-<a name="723"><span class="lineNum"> 723 </span> :<span class="lineNoCov"> 0 : return offset; /* error from fdt_next_node() */</span></a>
-<a name="724"><span class="lineNum"> 724 </span> : : }</a>
-<a name="725"><span class="lineNum"> 725 </span> : : </a>
-<a name="726"><span class="lineNum"> 726 </span> :<span class="lineNoCov"> 0 : int fdt_stringlist_contains(const char *strlist, int listlen, const char *str)</span></a>
-<a name="727"><span class="lineNum"> 727 </span> : : {</a>
-<a name="728"><span class="lineNum"> 728 </span> :<span class="lineNoCov"> 0 : int len = strlen(str);</span></a>
-<a name="729"><span class="lineNum"> 729 </span> : : const char *p;</a>
-<a name="730"><span class="lineNum"> 730 </span> : : </a>
-<a name="731"><span class="lineNum"> 731 </span> :<span class="lineNoCov"> 0 : while (listlen &gt;= len) {</span></a>
-<a name="732"><span class="lineNum"> 732 </span> :<span class="lineNoCov"> 0 : if (memcmp(str, strlist, len+1) == 0)</span></a>
-<a name="733"><span class="lineNum"> 733 </span> :<span class="lineNoCov"> 0 : return 1;</span></a>
-<a name="734"><span class="lineNum"> 734 </span> :<span class="lineNoCov"> 0 : p = memchr(strlist, '\0', listlen);</span></a>
-<a name="735"><span class="lineNum"> 735 </span> :<span class="lineNoCov"> 0 : if (!p)</span></a>
-<a name="736"><span class="lineNum"> 736 </span> :<span class="lineNoCov"> 0 : return 0; /* malformed strlist.. */</span></a>
-<a name="737"><span class="lineNum"> 737 </span> :<span class="lineNoCov"> 0 : listlen -= (p-strlist) + 1;</span></a>
-<a name="738"><span class="lineNum"> 738 </span> :<span class="lineNoCov"> 0 : strlist = p + 1;</span></a>
-<a name="739"><span class="lineNum"> 739 </span> : : }</a>
-<a name="740"><span class="lineNum"> 740 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
-<a name="741"><span class="lineNum"> 741 </span> : : }</a>
-<a name="742"><span class="lineNum"> 742 </span> : : </a>
-<a name="743"><span class="lineNum"> 743 </span> :<span class="lineNoCov"> 0 : int fdt_stringlist_count(const void *fdt, int nodeoffset, const char *property)</span></a>
-<a name="744"><span class="lineNum"> 744 </span> : : {</a>
-<a name="745"><span class="lineNum"> 745 </span> : : const char *list, *end;</a>
-<a name="746"><span class="lineNum"> 746 </span> :<span class="lineNoCov"> 0 : int length, count = 0;</span></a>
+<a name="723"><span class="lineNum"> 723 </span> :<span class="lineNoCov"> 0 : int fdt_stringlist_count(const void *fdt, int nodeoffset, const char *property)</span></a>
+<a name="724"><span class="lineNum"> 724 </span> : : {</a>
+<a name="725"><span class="lineNum"> 725 </span> : : const char *list, *end;</a>
+<a name="726"><span class="lineNum"> 726 </span> :<span class="lineNoCov"> 0 : int length, count = 0;</span></a>
+<a name="727"><span class="lineNum"> 727 </span> : : </a>
+<a name="728"><span class="lineNum"> 728 </span> :<span class="lineNoCov"> 0 : list = fdt_getprop(fdt, nodeoffset, property, &amp;length);</span></a>
+<a name="729"><span class="lineNum"> 729 </span> :<span class="lineNoCov"> 0 : if (!list)</span></a>
+<a name="730"><span class="lineNum"> 730 </span> :<span class="lineNoCov"> 0 : return length;</span></a>
+<a name="731"><span class="lineNum"> 731 </span> : : </a>
+<a name="732"><span class="lineNum"> 732 </span> :<span class="lineNoCov"> 0 : end = list + length;</span></a>
+<a name="733"><span class="lineNum"> 733 </span> : : </a>
+<a name="734"><span class="lineNum"> 734 </span> :<span class="lineNoCov"> 0 : while (list &lt; end) {</span></a>
+<a name="735"><span class="lineNum"> 735 </span> :<span class="lineNoCov"> 0 : length = strnlen(list, end - list) + 1;</span></a>
+<a name="736"><span class="lineNum"> 736 </span> : : </a>
+<a name="737"><span class="lineNum"> 737 </span> : : /* Abort if the last string isn't properly NUL-terminated. */</a>
+<a name="738"><span class="lineNum"> 738 </span> :<span class="lineNoCov"> 0 : if (list + length &gt; end)</span></a>
+<a name="739"><span class="lineNum"> 739 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADVALUE;</span></a>
+<a name="740"><span class="lineNum"> 740 </span> : : </a>
+<a name="741"><span class="lineNum"> 741 </span> :<span class="lineNoCov"> 0 : list += length;</span></a>
+<a name="742"><span class="lineNum"> 742 </span> :<span class="lineNoCov"> 0 : count++;</span></a>
+<a name="743"><span class="lineNum"> 743 </span> : : }</a>
+<a name="744"><span class="lineNum"> 744 </span> : : </a>
+<a name="745"><span class="lineNum"> 745 </span> :<span class="lineNoCov"> 0 : return count;</span></a>
+<a name="746"><span class="lineNum"> 746 </span> : : }</a>
<a name="747"><span class="lineNum"> 747 </span> : : </a>
-<a name="748"><span class="lineNum"> 748 </span> :<span class="lineNoCov"> 0 : list = fdt_getprop(fdt, nodeoffset, property, &amp;length);</span></a>
-<a name="749"><span class="lineNum"> 749 </span> :<span class="lineNoCov"> 0 : if (!list)</span></a>
-<a name="750"><span class="lineNum"> 750 </span> :<span class="lineNoCov"> 0 : return length;</span></a>
-<a name="751"><span class="lineNum"> 751 </span> : : </a>
-<a name="752"><span class="lineNum"> 752 </span> :<span class="lineNoCov"> 0 : end = list + length;</span></a>
+<a name="748"><span class="lineNum"> 748 </span> :<span class="lineNoCov"> 0 : int fdt_stringlist_search(const void *fdt, int nodeoffset, const char *property,</span></a>
+<a name="749"><span class="lineNum"> 749 </span> : : const char *string)</a>
+<a name="750"><span class="lineNum"> 750 </span> : : {</a>
+<a name="751"><span class="lineNum"> 751 </span> :<span class="lineNoCov"> 0 : int length, len, idx = 0;</span></a>
+<a name="752"><span class="lineNum"> 752 </span> : : const char *list, *end;</a>
<a name="753"><span class="lineNum"> 753 </span> : : </a>
-<a name="754"><span class="lineNum"> 754 </span> :<span class="lineNoCov"> 0 : while (list &lt; end) {</span></a>
-<a name="755"><span class="lineNum"> 755 </span> :<span class="lineNoCov"> 0 : length = strnlen(list, end - list) + 1;</span></a>
-<a name="756"><span class="lineNum"> 756 </span> : : </a>
-<a name="757"><span class="lineNum"> 757 </span> : : /* Abort if the last string isn't properly NUL-terminated. */</a>
-<a name="758"><span class="lineNum"> 758 </span> :<span class="lineNoCov"> 0 : if (list + length &gt; end)</span></a>
-<a name="759"><span class="lineNum"> 759 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADVALUE;</span></a>
+<a name="754"><span class="lineNum"> 754 </span> :<span class="lineNoCov"> 0 : list = fdt_getprop(fdt, nodeoffset, property, &amp;length);</span></a>
+<a name="755"><span class="lineNum"> 755 </span> :<span class="lineNoCov"> 0 : if (!list)</span></a>
+<a name="756"><span class="lineNum"> 756 </span> :<span class="lineNoCov"> 0 : return length;</span></a>
+<a name="757"><span class="lineNum"> 757 </span> : : </a>
+<a name="758"><span class="lineNum"> 758 </span> :<span class="lineNoCov"> 0 : len = strlen(string) + 1;</span></a>
+<a name="759"><span class="lineNum"> 759 </span> :<span class="lineNoCov"> 0 : end = list + length;</span></a>
<a name="760"><span class="lineNum"> 760 </span> : : </a>
-<a name="761"><span class="lineNum"> 761 </span> :<span class="lineNoCov"> 0 : list += length;</span></a>
-<a name="762"><span class="lineNum"> 762 </span> :<span class="lineNoCov"> 0 : count++;</span></a>
-<a name="763"><span class="lineNum"> 763 </span> : : }</a>
-<a name="764"><span class="lineNum"> 764 </span> : : </a>
-<a name="765"><span class="lineNum"> 765 </span> :<span class="lineNoCov"> 0 : return count;</span></a>
-<a name="766"><span class="lineNum"> 766 </span> : : }</a>
+<a name="761"><span class="lineNum"> 761 </span> :<span class="lineNoCov"> 0 : while (list &lt; end) {</span></a>
+<a name="762"><span class="lineNum"> 762 </span> :<span class="lineNoCov"> 0 : length = strnlen(list, end - list) + 1;</span></a>
+<a name="763"><span class="lineNum"> 763 </span> : : </a>
+<a name="764"><span class="lineNum"> 764 </span> : : /* Abort if the last string isn't properly NUL-terminated. */</a>
+<a name="765"><span class="lineNum"> 765 </span> :<span class="lineNoCov"> 0 : if (list + length &gt; end)</span></a>
+<a name="766"><span class="lineNum"> 766 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADVALUE;</span></a>
<a name="767"><span class="lineNum"> 767 </span> : : </a>
-<a name="768"><span class="lineNum"> 768 </span> :<span class="lineNoCov"> 0 : int fdt_stringlist_search(const void *fdt, int nodeoffset, const char *property,</span></a>
-<a name="769"><span class="lineNum"> 769 </span> : : const char *string)</a>
-<a name="770"><span class="lineNum"> 770 </span> : : {</a>
-<a name="771"><span class="lineNum"> 771 </span> :<span class="lineNoCov"> 0 : int length, len, idx = 0;</span></a>
-<a name="772"><span class="lineNum"> 772 </span> : : const char *list, *end;</a>
-<a name="773"><span class="lineNum"> 773 </span> : : </a>
-<a name="774"><span class="lineNum"> 774 </span> :<span class="lineNoCov"> 0 : list = fdt_getprop(fdt, nodeoffset, property, &amp;length);</span></a>
-<a name="775"><span class="lineNum"> 775 </span> :<span class="lineNoCov"> 0 : if (!list)</span></a>
-<a name="776"><span class="lineNum"> 776 </span> :<span class="lineNoCov"> 0 : return length;</span></a>
+<a name="768"><span class="lineNum"> 768 </span> :<span class="lineNoCov"> 0 : if (length == len &amp;&amp; memcmp(list, string, length) == 0)</span></a>
+<a name="769"><span class="lineNum"> 769 </span> :<span class="lineNoCov"> 0 : return idx;</span></a>
+<a name="770"><span class="lineNum"> 770 </span> : : </a>
+<a name="771"><span class="lineNum"> 771 </span> :<span class="lineNoCov"> 0 : list += length;</span></a>
+<a name="772"><span class="lineNum"> 772 </span> :<span class="lineNoCov"> 0 : idx++;</span></a>
+<a name="773"><span class="lineNum"> 773 </span> : : }</a>
+<a name="774"><span class="lineNum"> 774 </span> : : </a>
+<a name="775"><span class="lineNum"> 775 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOTFOUND;</span></a>
+<a name="776"><span class="lineNum"> 776 </span> : : }</a>
<a name="777"><span class="lineNum"> 777 </span> : : </a>
-<a name="778"><span class="lineNum"> 778 </span> :<span class="lineNoCov"> 0 : len = strlen(string) + 1;</span></a>
-<a name="779"><span class="lineNum"> 779 </span> :<span class="lineNoCov"> 0 : end = list + length;</span></a>
-<a name="780"><span class="lineNum"> 780 </span> : : </a>
-<a name="781"><span class="lineNum"> 781 </span> :<span class="lineNoCov"> 0 : while (list &lt; end) {</span></a>
-<a name="782"><span class="lineNum"> 782 </span> :<span class="lineNoCov"> 0 : length = strnlen(list, end - list) + 1;</span></a>
-<a name="783"><span class="lineNum"> 783 </span> : : </a>
-<a name="784"><span class="lineNum"> 784 </span> : : /* Abort if the last string isn't properly NUL-terminated. */</a>
-<a name="785"><span class="lineNum"> 785 </span> :<span class="lineNoCov"> 0 : if (list + length &gt; end)</span></a>
-<a name="786"><span class="lineNum"> 786 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADVALUE;</span></a>
-<a name="787"><span class="lineNum"> 787 </span> : : </a>
-<a name="788"><span class="lineNum"> 788 </span> :<span class="lineNoCov"> 0 : if (length == len &amp;&amp; memcmp(list, string, length) == 0)</span></a>
-<a name="789"><span class="lineNum"> 789 </span> :<span class="lineNoCov"> 0 : return idx;</span></a>
-<a name="790"><span class="lineNum"> 790 </span> : : </a>
-<a name="791"><span class="lineNum"> 791 </span> :<span class="lineNoCov"> 0 : list += length;</span></a>
-<a name="792"><span class="lineNum"> 792 </span> :<span class="lineNoCov"> 0 : idx++;</span></a>
-<a name="793"><span class="lineNum"> 793 </span> : : }</a>
+<a name="778"><span class="lineNum"> 778 </span> :<span class="lineNoCov"> 0 : const char *fdt_stringlist_get(const void *fdt, int nodeoffset,</span></a>
+<a name="779"><span class="lineNum"> 779 </span> : : const char *property, int idx,</a>
+<a name="780"><span class="lineNum"> 780 </span> : : int *lenp)</a>
+<a name="781"><span class="lineNum"> 781 </span> : : {</a>
+<a name="782"><span class="lineNum"> 782 </span> : : const char *list, *end;</a>
+<a name="783"><span class="lineNum"> 783 </span> : : int length;</a>
+<a name="784"><span class="lineNum"> 784 </span> : : </a>
+<a name="785"><span class="lineNum"> 785 </span> :<span class="lineNoCov"> 0 : list = fdt_getprop(fdt, nodeoffset, property, &amp;length);</span></a>
+<a name="786"><span class="lineNum"> 786 </span> :<span class="lineNoCov"> 0 : if (!list) {</span></a>
+<a name="787"><span class="lineNum"> 787 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
+<a name="788"><span class="lineNum"> 788 </span> :<span class="lineNoCov"> 0 : *lenp = length;</span></a>
+<a name="789"><span class="lineNum"> 789 </span> : : </a>
+<a name="790"><span class="lineNum"> 790 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="791"><span class="lineNum"> 791 </span> : : }</a>
+<a name="792"><span class="lineNum"> 792 </span> : : </a>
+<a name="793"><span class="lineNum"> 793 </span> :<span class="lineNoCov"> 0 : end = list + length;</span></a>
<a name="794"><span class="lineNum"> 794 </span> : : </a>
-<a name="795"><span class="lineNum"> 795 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOTFOUND;</span></a>
-<a name="796"><span class="lineNum"> 796 </span> : : }</a>
+<a name="795"><span class="lineNum"> 795 </span> :<span class="lineNoCov"> 0 : while (list &lt; end) {</span></a>
+<a name="796"><span class="lineNum"> 796 </span> :<span class="lineNoCov"> 0 : length = strnlen(list, end - list) + 1;</span></a>
<a name="797"><span class="lineNum"> 797 </span> : : </a>
-<a name="798"><span class="lineNum"> 798 </span> :<span class="lineNoCov"> 0 : const char *fdt_stringlist_get(const void *fdt, int nodeoffset,</span></a>
-<a name="799"><span class="lineNum"> 799 </span> : : const char *property, int idx,</a>
-<a name="800"><span class="lineNum"> 800 </span> : : int *lenp)</a>
-<a name="801"><span class="lineNum"> 801 </span> : : {</a>
-<a name="802"><span class="lineNum"> 802 </span> : : const char *list, *end;</a>
-<a name="803"><span class="lineNum"> 803 </span> : : int length;</a>
-<a name="804"><span class="lineNum"> 804 </span> : : </a>
-<a name="805"><span class="lineNum"> 805 </span> :<span class="lineNoCov"> 0 : list = fdt_getprop(fdt, nodeoffset, property, &amp;length);</span></a>
-<a name="806"><span class="lineNum"> 806 </span> :<span class="lineNoCov"> 0 : if (!list) {</span></a>
-<a name="807"><span class="lineNum"> 807 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
-<a name="808"><span class="lineNum"> 808 </span> :<span class="lineNoCov"> 0 : *lenp = length;</span></a>
+<a name="798"><span class="lineNum"> 798 </span> : : /* Abort if the last string isn't properly NUL-terminated. */</a>
+<a name="799"><span class="lineNum"> 799 </span> :<span class="lineNoCov"> 0 : if (list + length &gt; end) {</span></a>
+<a name="800"><span class="lineNum"> 800 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
+<a name="801"><span class="lineNum"> 801 </span> :<span class="lineNoCov"> 0 : *lenp = -FDT_ERR_BADVALUE;</span></a>
+<a name="802"><span class="lineNum"> 802 </span> : : </a>
+<a name="803"><span class="lineNum"> 803 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="804"><span class="lineNum"> 804 </span> : : }</a>
+<a name="805"><span class="lineNum"> 805 </span> : : </a>
+<a name="806"><span class="lineNum"> 806 </span> :<span class="lineNoCov"> 0 : if (idx == 0) {</span></a>
+<a name="807"><span class="lineNum"> 807 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
+<a name="808"><span class="lineNum"> 808 </span> :<span class="lineNoCov"> 0 : *lenp = length - 1;</span></a>
<a name="809"><span class="lineNum"> 809 </span> : : </a>
-<a name="810"><span class="lineNum"> 810 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="811"><span class="lineNum"> 811 </span> : : }</a>
+<a name="810"><span class="lineNum"> 810 </span> :<span class="lineNoCov"> 0 : return list;</span></a>
+<a name="811"><span class="lineNum"> 811 </span> : : }</a>
<a name="812"><span class="lineNum"> 812 </span> : : </a>
-<a name="813"><span class="lineNum"> 813 </span> :<span class="lineNoCov"> 0 : end = list + length;</span></a>
-<a name="814"><span class="lineNum"> 814 </span> : : </a>
-<a name="815"><span class="lineNum"> 815 </span> :<span class="lineNoCov"> 0 : while (list &lt; end) {</span></a>
-<a name="816"><span class="lineNum"> 816 </span> :<span class="lineNoCov"> 0 : length = strnlen(list, end - list) + 1;</span></a>
-<a name="817"><span class="lineNum"> 817 </span> : : </a>
-<a name="818"><span class="lineNum"> 818 </span> : : /* Abort if the last string isn't properly NUL-terminated. */</a>
-<a name="819"><span class="lineNum"> 819 </span> :<span class="lineNoCov"> 0 : if (list + length &gt; end) {</span></a>
-<a name="820"><span class="lineNum"> 820 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
-<a name="821"><span class="lineNum"> 821 </span> :<span class="lineNoCov"> 0 : *lenp = -FDT_ERR_BADVALUE;</span></a>
+<a name="813"><span class="lineNum"> 813 </span> :<span class="lineNoCov"> 0 : list += length;</span></a>
+<a name="814"><span class="lineNum"> 814 </span> :<span class="lineNoCov"> 0 : idx--;</span></a>
+<a name="815"><span class="lineNum"> 815 </span> : : }</a>
+<a name="816"><span class="lineNum"> 816 </span> : : </a>
+<a name="817"><span class="lineNum"> 817 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
+<a name="818"><span class="lineNum"> 818 </span> :<span class="lineNoCov"> 0 : *lenp = -FDT_ERR_NOTFOUND;</span></a>
+<a name="819"><span class="lineNum"> 819 </span> : : </a>
+<a name="820"><span class="lineNum"> 820 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="821"><span class="lineNum"> 821 </span> : : }</a>
<a name="822"><span class="lineNum"> 822 </span> : : </a>
-<a name="823"><span class="lineNum"> 823 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="824"><span class="lineNum"> 824 </span> : : }</a>
-<a name="825"><span class="lineNum"> 825 </span> : : </a>
-<a name="826"><span class="lineNum"> 826 </span> :<span class="lineNoCov"> 0 : if (idx == 0) {</span></a>
-<a name="827"><span class="lineNum"> 827 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
-<a name="828"><span class="lineNum"> 828 </span> :<span class="lineNoCov"> 0 : *lenp = length - 1;</span></a>
-<a name="829"><span class="lineNum"> 829 </span> : : </a>
-<a name="830"><span class="lineNum"> 830 </span> :<span class="lineNoCov"> 0 : return list;</span></a>
-<a name="831"><span class="lineNum"> 831 </span> : : }</a>
+<a name="823"><span class="lineNum"> 823 </span> :<span class="lineNoCov"> 0 : int fdt_node_check_compatible(const void *fdt, int nodeoffset,</span></a>
+<a name="824"><span class="lineNum"> 824 </span> : : const char *compatible)</a>
+<a name="825"><span class="lineNum"> 825 </span> : : {</a>
+<a name="826"><span class="lineNum"> 826 </span> : : const void *prop;</a>
+<a name="827"><span class="lineNum"> 827 </span> : : int len;</a>
+<a name="828"><span class="lineNum"> 828 </span> : : </a>
+<a name="829"><span class="lineNum"> 829 </span> :<span class="lineNoCov"> 0 : prop = fdt_getprop(fdt, nodeoffset, &quot;compatible&quot;, &amp;len);</span></a>
+<a name="830"><span class="lineNum"> 830 </span> :<span class="lineNoCov"> 0 : if (!prop)</span></a>
+<a name="831"><span class="lineNum"> 831 </span> :<span class="lineNoCov"> 0 : return len;</span></a>
<a name="832"><span class="lineNum"> 832 </span> : : </a>
-<a name="833"><span class="lineNum"> 833 </span> :<span class="lineNoCov"> 0 : list += length;</span></a>
-<a name="834"><span class="lineNum"> 834 </span> :<span class="lineNoCov"> 0 : idx--;</span></a>
-<a name="835"><span class="lineNum"> 835 </span> : : }</a>
-<a name="836"><span class="lineNum"> 836 </span> : : </a>
-<a name="837"><span class="lineNum"> 837 </span> :<span class="lineNoCov"> 0 : if (lenp)</span></a>
-<a name="838"><span class="lineNum"> 838 </span> :<span class="lineNoCov"> 0 : *lenp = -FDT_ERR_NOTFOUND;</span></a>
-<a name="839"><span class="lineNum"> 839 </span> : : </a>
-<a name="840"><span class="lineNum"> 840 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="841"><span class="lineNum"> 841 </span> : : }</a>
+<a name="833"><span class="lineNum"> 833 </span> :<span class="lineNoCov"> 0 : return !fdt_stringlist_contains(prop, len, compatible);</span></a>
+<a name="834"><span class="lineNum"> 834 </span> : : }</a>
+<a name="835"><span class="lineNum"> 835 </span> : : </a>
+<a name="836"><span class="lineNum"> 836 </span> :<span class="lineNoCov"> 0 : int fdt_node_offset_by_compatible(const void *fdt, int startoffset,</span></a>
+<a name="837"><span class="lineNum"> 837 </span> : : const char *compatible)</a>
+<a name="838"><span class="lineNum"> 838 </span> : : {</a>
+<a name="839"><span class="lineNum"> 839 </span> : : int offset, err;</a>
+<a name="840"><span class="lineNum"> 840 </span> : : </a>
+<a name="841"><span class="lineNum"> 841 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
<a name="842"><span class="lineNum"> 842 </span> : : </a>
-<a name="843"><span class="lineNum"> 843 </span> :<span class="lineNoCov"> 0 : int fdt_node_check_compatible(const void *fdt, int nodeoffset,</span></a>
-<a name="844"><span class="lineNum"> 844 </span> : : const char *compatible)</a>
-<a name="845"><span class="lineNum"> 845 </span> : : {</a>
-<a name="846"><span class="lineNum"> 846 </span> : : const void *prop;</a>
-<a name="847"><span class="lineNum"> 847 </span> : : int len;</a>
-<a name="848"><span class="lineNum"> 848 </span> : : </a>
-<a name="849"><span class="lineNum"> 849 </span> :<span class="lineNoCov"> 0 : prop = fdt_getprop(fdt, nodeoffset, &quot;compatible&quot;, &amp;len);</span></a>
-<a name="850"><span class="lineNum"> 850 </span> :<span class="lineNoCov"> 0 : if (!prop)</span></a>
-<a name="851"><span class="lineNum"> 851 </span> :<span class="lineNoCov"> 0 : return len;</span></a>
-<a name="852"><span class="lineNum"> 852 </span> : : </a>
-<a name="853"><span class="lineNum"> 853 </span> :<span class="lineNoCov"> 0 : return !fdt_stringlist_contains(prop, len, compatible);</span></a>
-<a name="854"><span class="lineNum"> 854 </span> : : }</a>
-<a name="855"><span class="lineNum"> 855 </span> : : </a>
-<a name="856"><span class="lineNum"> 856 </span> :<span class="lineNoCov"> 0 : int fdt_node_offset_by_compatible(const void *fdt, int startoffset,</span></a>
-<a name="857"><span class="lineNum"> 857 </span> : : const char *compatible)</a>
-<a name="858"><span class="lineNum"> 858 </span> : : {</a>
-<a name="859"><span class="lineNum"> 859 </span> : : int offset, err;</a>
-<a name="860"><span class="lineNum"> 860 </span> : : </a>
-<a name="861"><span class="lineNum"> 861 </span> :<span class="lineNoCov"> 0 : FDT_RO_PROBE(fdt);</span></a>
-<a name="862"><span class="lineNum"> 862 </span> : : </a>
-<a name="863"><span class="lineNum"> 863 </span> : : /* FIXME: The algorithm here is pretty horrible: we scan each</a>
-<a name="864"><span class="lineNum"> 864 </span> : : * property of a node in fdt_node_check_compatible(), then if</a>
-<a name="865"><span class="lineNum"> 865 </span> : : * that didn't find what we want, we scan over them again</a>
-<a name="866"><span class="lineNum"> 866 </span> : : * making our way to the next node. Still it's the easiest to</a>
-<a name="867"><span class="lineNum"> 867 </span> : : * implement approach; performance can come later. */</a>
-<a name="868"><span class="lineNum"> 868 </span> :<span class="lineNoCov"> 0 : for (offset = fdt_next_node(fdt, startoffset, NULL);</span></a>
-<a name="869"><span class="lineNum"> 869 </span> : : offset &gt;= 0;</a>
-<a name="870"><span class="lineNum"> 870 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, NULL)) {</span></a>
-<a name="871"><span class="lineNum"> 871 </span> :<span class="lineNoCov"> 0 : err = fdt_node_check_compatible(fdt, offset, compatible);</span></a>
-<a name="872"><span class="lineNum"> 872 </span> :<span class="lineNoCov"> 0 : if ((err &lt; 0) &amp;&amp; (err != -FDT_ERR_NOTFOUND))</span></a>
-<a name="873"><span class="lineNum"> 873 </span> :<span class="lineNoCov"> 0 : return err;</span></a>
-<a name="874"><span class="lineNum"> 874 </span> :<span class="lineNoCov"> 0 : else if (err == 0)</span></a>
-<a name="875"><span class="lineNum"> 875 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
-<a name="876"><span class="lineNum"> 876 </span> : : }</a>
-<a name="877"><span class="lineNum"> 877 </span> : : </a>
-<a name="878"><span class="lineNum"> 878 </span> :<span class="lineNoCov"> 0 : return offset; /* error from fdt_next_node() */</span></a>
-<a name="879"><span class="lineNum"> 879 </span> : : }</a>
-<a name="880"><span class="lineNum"> 880 </span> : : </a>
-<a name="881"><span class="lineNum"> 881 </span> :<span class="lineNoCov"> 0 : int fdt_check_full(const void *fdt, size_t bufsize)</span></a>
-<a name="882"><span class="lineNum"> 882 </span> : : {</a>
-<a name="883"><span class="lineNum"> 883 </span> : : int err;</a>
-<a name="884"><span class="lineNum"> 884 </span> : : int num_memrsv;</a>
-<a name="885"><span class="lineNum"> 885 </span> :<span class="lineNoCov"> 0 : int offset, nextoffset = 0;</span></a>
-<a name="886"><span class="lineNum"> 886 </span> : : uint32_t tag;</a>
-<a name="887"><span class="lineNum"> 887 </span> :<span class="lineNoCov"> 0 : unsigned depth = 0;</span></a>
-<a name="888"><span class="lineNum"> 888 </span> : : const void *prop;</a>
-<a name="889"><span class="lineNum"> 889 </span> : : const char *propname;</a>
-<a name="890"><span class="lineNum"> 890 </span> : : </a>
-<a name="891"><span class="lineNum"> 891 </span> :<span class="lineNoCov"> 0 : if (bufsize &lt; FDT_V1_SIZE)</span></a>
-<a name="892"><span class="lineNum"> 892 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_TRUNCATED;</span></a>
-<a name="893"><span class="lineNum"> 893 </span> :<span class="lineNoCov"> 0 : err = fdt_check_header(fdt);</span></a>
-<a name="894"><span class="lineNum"> 894 </span> :<span class="lineNoCov"> 0 : if (err != 0)</span></a>
-<a name="895"><span class="lineNum"> 895 </span> :<span class="lineNoCov"> 0 : return err;</span></a>
-<a name="896"><span class="lineNum"> 896 </span> :<span class="lineNoCov"> 0 : if (bufsize &lt; fdt_totalsize(fdt))</span></a>
-<a name="897"><span class="lineNum"> 897 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_TRUNCATED;</span></a>
-<a name="898"><span class="lineNum"> 898 </span> : : </a>
-<a name="899"><span class="lineNum"> 899 </span> :<span class="lineNoCov"> 0 : num_memrsv = fdt_num_mem_rsv(fdt);</span></a>
-<a name="900"><span class="lineNum"> 900 </span> :<span class="lineNoCov"> 0 : if (num_memrsv &lt; 0)</span></a>
-<a name="901"><span class="lineNum"> 901 </span> :<span class="lineNoCov"> 0 : return num_memrsv;</span></a>
-<a name="902"><span class="lineNum"> 902 </span> : : </a>
-<a name="903"><span class="lineNum"> 903 </span> : : while (1) {</a>
-<a name="904"><span class="lineNum"> 904 </span> :<span class="lineNoCov"> 0 : offset = nextoffset;</span></a>
-<a name="905"><span class="lineNum"> 905 </span> :<span class="lineNoCov"> 0 : tag = fdt_next_tag(fdt, offset, &amp;nextoffset);</span></a>
-<a name="906"><span class="lineNum"> 906 </span> : : </a>
-<a name="907"><span class="lineNum"> 907 </span> :<span class="lineNoCov"> 0 : if (nextoffset &lt; 0)</span></a>
-<a name="908"><span class="lineNum"> 908 </span> :<span class="lineNoCov"> 0 : return nextoffset;</span></a>
-<a name="909"><span class="lineNum"> 909 </span> : : </a>
-<a name="910"><span class="lineNum"> 910 </span> :<span class="lineNoCov"> 0 : switch (tag) {</span></a>
-<a name="911"><span class="lineNum"> 911 </span> :<span class="lineNoCov"> 0 : case FDT_NOP:</span></a>
-<a name="912"><span class="lineNum"> 912 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="913"><span class="lineNum"> 913 </span> : : </a>
-<a name="914"><span class="lineNum"> 914 </span> :<span class="lineNoCov"> 0 : case FDT_END:</span></a>
-<a name="915"><span class="lineNum"> 915 </span> :<span class="lineNoCov"> 0 : if (depth != 0)</span></a>
-<a name="916"><span class="lineNum"> 916 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADSTRUCTURE;</span></a>
-<a name="917"><span class="lineNum"> 917 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
-<a name="918"><span class="lineNum"> 918 </span> : : </a>
-<a name="919"><span class="lineNum"> 919 </span> :<span class="lineNoCov"> 0 : case FDT_BEGIN_NODE:</span></a>
-<a name="920"><span class="lineNum"> 920 </span> :<span class="lineNoCov"> 0 : depth++;</span></a>
-<a name="921"><span class="lineNum"> 921 </span> :<span class="lineNoCov"> 0 : if (depth &gt; INT_MAX)</span></a>
-<a name="922"><span class="lineNum"> 922 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADSTRUCTURE;</span></a>
-<a name="923"><span class="lineNum"> 923 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="924"><span class="lineNum"> 924 </span> : : </a>
-<a name="925"><span class="lineNum"> 925 </span> :<span class="lineNoCov"> 0 : case FDT_END_NODE:</span></a>
-<a name="926"><span class="lineNum"> 926 </span> :<span class="lineNoCov"> 0 : if (depth == 0)</span></a>
-<a name="927"><span class="lineNum"> 927 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADSTRUCTURE;</span></a>
-<a name="928"><span class="lineNum"> 928 </span> :<span class="lineNoCov"> 0 : depth--;</span></a>
-<a name="929"><span class="lineNum"> 929 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="930"><span class="lineNum"> 930 </span> : : </a>
-<a name="931"><span class="lineNum"> 931 </span> :<span class="lineNoCov"> 0 : case FDT_PROP:</span></a>
-<a name="932"><span class="lineNum"> 932 </span> :<span class="lineNoCov"> 0 : prop = fdt_getprop_by_offset(fdt, offset, &amp;propname,</span></a>
-<a name="933"><span class="lineNum"> 933 </span> : : &amp;err);</a>
-<a name="934"><span class="lineNum"> 934 </span> :<span class="lineNoCov"> 0 : if (!prop)</span></a>
-<a name="935"><span class="lineNum"> 935 </span> :<span class="lineNoCov"> 0 : return err;</span></a>
-<a name="936"><span class="lineNum"> 936 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="937"><span class="lineNum"> 937 </span> : : </a>
-<a name="938"><span class="lineNum"> 938 </span> :<span class="lineNoCov"> 0 : default:</span></a>
-<a name="939"><span class="lineNum"> 939 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_INTERNAL;</span></a>
-<a name="940"><span class="lineNum"> 940 </span> : : }</a>
-<a name="941"><span class="lineNum"> 941 </span> : : }</a>
-<a name="942"><span class="lineNum"> 942 </span> : : }</a>
+<a name="843"><span class="lineNum"> 843 </span> : : /* FIXME: The algorithm here is pretty horrible: we scan each</a>
+<a name="844"><span class="lineNum"> 844 </span> : : * property of a node in fdt_node_check_compatible(), then if</a>
+<a name="845"><span class="lineNum"> 845 </span> : : * that didn't find what we want, we scan over them again</a>
+<a name="846"><span class="lineNum"> 846 </span> : : * making our way to the next node. Still it's the easiest to</a>
+<a name="847"><span class="lineNum"> 847 </span> : : * implement approach; performance can come later. */</a>
+<a name="848"><span class="lineNum"> 848 </span> :<span class="lineNoCov"> 0 : for (offset = fdt_next_node(fdt, startoffset, NULL);</span></a>
+<a name="849"><span class="lineNum"> 849 </span> : : offset &gt;= 0;</a>
+<a name="850"><span class="lineNum"> 850 </span> :<span class="lineNoCov"> 0 : offset = fdt_next_node(fdt, offset, NULL)) {</span></a>
+<a name="851"><span class="lineNum"> 851 </span> :<span class="lineNoCov"> 0 : err = fdt_node_check_compatible(fdt, offset, compatible);</span></a>
+<a name="852"><span class="lineNum"> 852 </span> :<span class="lineNoCov"> 0 : if ((err &lt; 0) &amp;&amp; (err != -FDT_ERR_NOTFOUND))</span></a>
+<a name="853"><span class="lineNum"> 853 </span> :<span class="lineNoCov"> 0 : return err;</span></a>
+<a name="854"><span class="lineNum"> 854 </span> :<span class="lineNoCov"> 0 : else if (err == 0)</span></a>
+<a name="855"><span class="lineNum"> 855 </span> :<span class="lineNoCov"> 0 : return offset;</span></a>
+<a name="856"><span class="lineNum"> 856 </span> : : }</a>
+<a name="857"><span class="lineNum"> 857 </span> : : </a>
+<a name="858"><span class="lineNum"> 858 </span> :<span class="lineNoCov"> 0 : return offset; /* error from fdt_next_node() */</span></a>
+<a name="859"><span class="lineNum"> 859 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/libfdt/fdt_strerror.c.func-sort-c.html b/coverage-report/libfdt/fdt_strerror.c.func-sort-c.html
index 60a871b..9859e7a 100644
--- a/coverage-report/libfdt/fdt_strerror.c.func-sort-c.html
+++ b/coverage-report/libfdt/fdt_strerror.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -69,7 +69,7 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_strerror.c.gcov.html#87">fdt_strerror</a></td>
+ <td class="coverFn"><a href="fdt_strerror.c.gcov.html#44">fdt_strerror</a></td>
<td class="coverFnLo">0</td>
</tr>
</table>
diff --git a/coverage-report/libfdt/fdt_strerror.c.func.html b/coverage-report/libfdt/fdt_strerror.c.func.html
index 321cc3f..e49b5b3 100644
--- a/coverage-report/libfdt/fdt_strerror.c.func.html
+++ b/coverage-report/libfdt/fdt_strerror.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -69,7 +69,7 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fdt_strerror.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_strerror.c.gcov.html#87">fdt_strerror</a></td>
+ <td class="coverFn"><a href="fdt_strerror.c.gcov.html#44">fdt_strerror</a></td>
<td class="coverFnLo">0</td>
</tr>
</table>
diff --git a/coverage-report/libfdt/fdt_strerror.c.gcov.html b/coverage-report/libfdt/fdt_strerror.c.gcov.html
index e6f6c6f..9cbdf8f 100644
--- a/coverage-report/libfdt/fdt_strerror.c.gcov.html
+++ b/coverage-report/libfdt/fdt_strerror.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -69,109 +69,66 @@
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
-<a name="1"><span class="lineNum"> 1 </span> : : /*</a>
-<a name="2"><span class="lineNum"> 2 </span> : : * libfdt - Flat Device Tree manipulation</a>
-<a name="3"><span class="lineNum"> 3 </span> : : * Copyright (C) 2006 David Gibson, IBM Corporation.</a>
-<a name="4"><span class="lineNum"> 4 </span> : : *</a>
-<a name="5"><span class="lineNum"> 5 </span> : : * libfdt is dual licensed: you can use it either under the terms of</a>
-<a name="6"><span class="lineNum"> 6 </span> : : * the GPL, or the BSD license, at your option.</a>
-<a name="7"><span class="lineNum"> 7 </span> : : *</a>
-<a name="8"><span class="lineNum"> 8 </span> : : * a) This library is free software; you can redistribute it and/or</a>
-<a name="9"><span class="lineNum"> 9 </span> : : * modify it under the terms of the GNU General Public License as</a>
-<a name="10"><span class="lineNum"> 10 </span> : : * published by the Free Software Foundation; either version 2 of the</a>
-<a name="11"><span class="lineNum"> 11 </span> : : * License, or (at your option) any later version.</a>
-<a name="12"><span class="lineNum"> 12 </span> : : *</a>
-<a name="13"><span class="lineNum"> 13 </span> : : * This library is distributed in the hope that it will be useful,</a>
-<a name="14"><span class="lineNum"> 14 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of</a>
-<a name="15"><span class="lineNum"> 15 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</a>
-<a name="16"><span class="lineNum"> 16 </span> : : * GNU General Public License for more details.</a>
-<a name="17"><span class="lineNum"> 17 </span> : : *</a>
-<a name="18"><span class="lineNum"> 18 </span> : : * You should have received a copy of the GNU General Public</a>
-<a name="19"><span class="lineNum"> 19 </span> : : * License along with this library; if not, write to the Free</a>
-<a name="20"><span class="lineNum"> 20 </span> : : * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,</a>
-<a name="21"><span class="lineNum"> 21 </span> : : * MA 02110-1301 USA</a>
-<a name="22"><span class="lineNum"> 22 </span> : : *</a>
-<a name="23"><span class="lineNum"> 23 </span> : : * Alternatively,</a>
-<a name="24"><span class="lineNum"> 24 </span> : : *</a>
-<a name="25"><span class="lineNum"> 25 </span> : : * b) Redistribution and use in source and binary forms, with or</a>
-<a name="26"><span class="lineNum"> 26 </span> : : * without modification, are permitted provided that the following</a>
-<a name="27"><span class="lineNum"> 27 </span> : : * conditions are met:</a>
-<a name="28"><span class="lineNum"> 28 </span> : : *</a>
-<a name="29"><span class="lineNum"> 29 </span> : : * 1. Redistributions of source code must retain the above</a>
-<a name="30"><span class="lineNum"> 30 </span> : : * copyright notice, this list of conditions and the following</a>
-<a name="31"><span class="lineNum"> 31 </span> : : * disclaimer.</a>
-<a name="32"><span class="lineNum"> 32 </span> : : * 2. Redistributions in binary form must reproduce the above</a>
-<a name="33"><span class="lineNum"> 33 </span> : : * copyright notice, this list of conditions and the following</a>
-<a name="34"><span class="lineNum"> 34 </span> : : * disclaimer in the documentation and/or other materials</a>
-<a name="35"><span class="lineNum"> 35 </span> : : * provided with the distribution.</a>
-<a name="36"><span class="lineNum"> 36 </span> : : *</a>
-<a name="37"><span class="lineNum"> 37 </span> : : * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND</a>
-<a name="38"><span class="lineNum"> 38 </span> : : * CONTRIBUTORS &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES,</a>
-<a name="39"><span class="lineNum"> 39 </span> : : * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</a>
-<a name="40"><span class="lineNum"> 40 </span> : : * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE</a>
-<a name="41"><span class="lineNum"> 41 </span> : : * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR</a>
-<a name="42"><span class="lineNum"> 42 </span> : : * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</a>
-<a name="43"><span class="lineNum"> 43 </span> : : * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT</a>
-<a name="44"><span class="lineNum"> 44 </span> : : * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;</a>
-<a name="45"><span class="lineNum"> 45 </span> : : * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</a>
-<a name="46"><span class="lineNum"> 46 </span> : : * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</a>
-<a name="47"><span class="lineNum"> 47 </span> : : * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR</a>
-<a name="48"><span class="lineNum"> 48 </span> : : * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,</a>
-<a name="49"><span class="lineNum"> 49 </span> : : * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</a>
-<a name="50"><span class="lineNum"> 50 </span> : : */</a>
-<a name="51"><span class="lineNum"> 51 </span> : : #include &quot;libfdt_env.h&quot;</a>
-<a name="52"><span class="lineNum"> 52 </span> : : </a>
-<a name="53"><span class="lineNum"> 53 </span> : : #include &lt;fdt.h&gt;</a>
-<a name="54"><span class="lineNum"> 54 </span> : : #include &lt;libfdt.h&gt;</a>
-<a name="55"><span class="lineNum"> 55 </span> : : </a>
-<a name="56"><span class="lineNum"> 56 </span> : : #include &quot;libfdt_internal.h&quot;</a>
-<a name="57"><span class="lineNum"> 57 </span> : : </a>
-<a name="58"><span class="lineNum"> 58 </span> : : struct fdt_errtabent {</a>
-<a name="59"><span class="lineNum"> 59 </span> : : const char *str;</a>
-<a name="60"><span class="lineNum"> 60 </span> : : };</a>
-<a name="61"><span class="lineNum"> 61 </span> : : </a>
-<a name="62"><span class="lineNum"> 62 </span> : : #define FDT_ERRTABENT(val) \</a>
-<a name="63"><span class="lineNum"> 63 </span> : : [(val)] = { .str = #val, }</a>
-<a name="64"><span class="lineNum"> 64 </span> : : </a>
-<a name="65"><span class="lineNum"> 65 </span> : : static struct fdt_errtabent fdt_errtable[] = {</a>
-<a name="66"><span class="lineNum"> 66 </span> : : FDT_ERRTABENT(FDT_ERR_NOTFOUND),</a>
-<a name="67"><span class="lineNum"> 67 </span> : : FDT_ERRTABENT(FDT_ERR_EXISTS),</a>
-<a name="68"><span class="lineNum"> 68 </span> : : FDT_ERRTABENT(FDT_ERR_NOSPACE),</a>
-<a name="69"><span class="lineNum"> 69 </span> : : </a>
-<a name="70"><span class="lineNum"> 70 </span> : : FDT_ERRTABENT(FDT_ERR_BADOFFSET),</a>
-<a name="71"><span class="lineNum"> 71 </span> : : FDT_ERRTABENT(FDT_ERR_BADPATH),</a>
-<a name="72"><span class="lineNum"> 72 </span> : : FDT_ERRTABENT(FDT_ERR_BADPHANDLE),</a>
-<a name="73"><span class="lineNum"> 73 </span> : : FDT_ERRTABENT(FDT_ERR_BADSTATE),</a>
-<a name="74"><span class="lineNum"> 74 </span> : : </a>
-<a name="75"><span class="lineNum"> 75 </span> : : FDT_ERRTABENT(FDT_ERR_TRUNCATED),</a>
-<a name="76"><span class="lineNum"> 76 </span> : : FDT_ERRTABENT(FDT_ERR_BADMAGIC),</a>
-<a name="77"><span class="lineNum"> 77 </span> : : FDT_ERRTABENT(FDT_ERR_BADVERSION),</a>
-<a name="78"><span class="lineNum"> 78 </span> : : FDT_ERRTABENT(FDT_ERR_BADSTRUCTURE),</a>
-<a name="79"><span class="lineNum"> 79 </span> : : FDT_ERRTABENT(FDT_ERR_BADLAYOUT),</a>
-<a name="80"><span class="lineNum"> 80 </span> : : FDT_ERRTABENT(FDT_ERR_INTERNAL),</a>
-<a name="81"><span class="lineNum"> 81 </span> : : FDT_ERRTABENT(FDT_ERR_BADNCELLS),</a>
-<a name="82"><span class="lineNum"> 82 </span> : : FDT_ERRTABENT(FDT_ERR_BADVALUE),</a>
-<a name="83"><span class="lineNum"> 83 </span> : : FDT_ERRTABENT(FDT_ERR_BADOVERLAY),</a>
-<a name="84"><span class="lineNum"> 84 </span> : : FDT_ERRTABENT(FDT_ERR_NOPHANDLES),</a>
-<a name="85"><span class="lineNum"> 85 </span> : : FDT_ERRTABENT(FDT_ERR_BADFLAGS),</a>
-<a name="86"><span class="lineNum"> 86 </span> : : };</a>
-<a name="87"><span class="lineNum"> 87 </span> : : #define FDT_ERRTABSIZE (sizeof(fdt_errtable) / sizeof(fdt_errtable[0]))</a>
-<a name="88"><span class="lineNum"> 88 </span> : : </a>
-<a name="89"><span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : const char *fdt_strerror(int errval)</span></a>
-<a name="90"><span class="lineNum"> 90 </span> : : {</a>
-<a name="91"><span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : if (errval &gt; 0)</span></a>
-<a name="92"><span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : return &quot;&lt;valid offset/length&gt;&quot;;</span></a>
-<a name="93"><span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : else if (errval == 0)</span></a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : return &quot;&lt;no error&gt;&quot;;</span></a>
-<a name="95"><span class="lineNum"> 95 </span> :<span class="lineNoCov"> 0 : else if (errval &gt; -FDT_ERRTABSIZE) {</span></a>
-<a name="96"><span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : const char *s = fdt_errtable[-errval].str;</span></a>
-<a name="97"><span class="lineNum"> 97 </span> : : </a>
-<a name="98"><span class="lineNum"> 98 </span> :<span class="lineNoCov"> 0 : if (s)</span></a>
-<a name="99"><span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : return s;</span></a>
-<a name="100"><span class="lineNum"> 100 </span> : : }</a>
-<a name="101"><span class="lineNum"> 101 </span> : : </a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : return &quot;&lt;unknown error&gt;&quot;;</span></a>
-<a name="103"><span class="lineNum"> 103 </span> : : }</a>
+<a name="1"><span class="lineNum"> 1 </span> : : // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)</a>
+<a name="2"><span class="lineNum"> 2 </span> : : /*</a>
+<a name="3"><span class="lineNum"> 3 </span> : : * libfdt - Flat Device Tree manipulation</a>
+<a name="4"><span class="lineNum"> 4 </span> : : * Copyright (C) 2006 David Gibson, IBM Corporation.</a>
+<a name="5"><span class="lineNum"> 5 </span> : : * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</a>
+<a name="6"><span class="lineNum"> 6 </span> : : */</a>
+<a name="7"><span class="lineNum"> 7 </span> : : #include &quot;libfdt_env.h&quot;</a>
+<a name="8"><span class="lineNum"> 8 </span> : : </a>
+<a name="9"><span class="lineNum"> 9 </span> : : #include &lt;fdt.h&gt;</a>
+<a name="10"><span class="lineNum"> 10 </span> : : #include &lt;libfdt.h&gt;</a>
+<a name="11"><span class="lineNum"> 11 </span> : : </a>
+<a name="12"><span class="lineNum"> 12 </span> : : #include &quot;libfdt_internal.h&quot;</a>
+<a name="13"><span class="lineNum"> 13 </span> : : </a>
+<a name="14"><span class="lineNum"> 14 </span> : : struct fdt_errtabent {</a>
+<a name="15"><span class="lineNum"> 15 </span> : : const char *str;</a>
+<a name="16"><span class="lineNum"> 16 </span> : : };</a>
+<a name="17"><span class="lineNum"> 17 </span> : : </a>
+<a name="18"><span class="lineNum"> 18 </span> : : #define FDT_ERRTABENT(val) \</a>
+<a name="19"><span class="lineNum"> 19 </span> : : [(val)] = { .str = #val, }</a>
+<a name="20"><span class="lineNum"> 20 </span> : : </a>
+<a name="21"><span class="lineNum"> 21 </span> : : static struct fdt_errtabent fdt_errtable[] = {</a>
+<a name="22"><span class="lineNum"> 22 </span> : : FDT_ERRTABENT(FDT_ERR_NOTFOUND),</a>
+<a name="23"><span class="lineNum"> 23 </span> : : FDT_ERRTABENT(FDT_ERR_EXISTS),</a>
+<a name="24"><span class="lineNum"> 24 </span> : : FDT_ERRTABENT(FDT_ERR_NOSPACE),</a>
+<a name="25"><span class="lineNum"> 25 </span> : : </a>
+<a name="26"><span class="lineNum"> 26 </span> : : FDT_ERRTABENT(FDT_ERR_BADOFFSET),</a>
+<a name="27"><span class="lineNum"> 27 </span> : : FDT_ERRTABENT(FDT_ERR_BADPATH),</a>
+<a name="28"><span class="lineNum"> 28 </span> : : FDT_ERRTABENT(FDT_ERR_BADPHANDLE),</a>
+<a name="29"><span class="lineNum"> 29 </span> : : FDT_ERRTABENT(FDT_ERR_BADSTATE),</a>
+<a name="30"><span class="lineNum"> 30 </span> : : </a>
+<a name="31"><span class="lineNum"> 31 </span> : : FDT_ERRTABENT(FDT_ERR_TRUNCATED),</a>
+<a name="32"><span class="lineNum"> 32 </span> : : FDT_ERRTABENT(FDT_ERR_BADMAGIC),</a>
+<a name="33"><span class="lineNum"> 33 </span> : : FDT_ERRTABENT(FDT_ERR_BADVERSION),</a>
+<a name="34"><span class="lineNum"> 34 </span> : : FDT_ERRTABENT(FDT_ERR_BADSTRUCTURE),</a>
+<a name="35"><span class="lineNum"> 35 </span> : : FDT_ERRTABENT(FDT_ERR_BADLAYOUT),</a>
+<a name="36"><span class="lineNum"> 36 </span> : : FDT_ERRTABENT(FDT_ERR_INTERNAL),</a>
+<a name="37"><span class="lineNum"> 37 </span> : : FDT_ERRTABENT(FDT_ERR_BADNCELLS),</a>
+<a name="38"><span class="lineNum"> 38 </span> : : FDT_ERRTABENT(FDT_ERR_BADVALUE),</a>
+<a name="39"><span class="lineNum"> 39 </span> : : FDT_ERRTABENT(FDT_ERR_BADOVERLAY),</a>
+<a name="40"><span class="lineNum"> 40 </span> : : FDT_ERRTABENT(FDT_ERR_NOPHANDLES),</a>
+<a name="41"><span class="lineNum"> 41 </span> : : FDT_ERRTABENT(FDT_ERR_BADFLAGS),</a>
+<a name="42"><span class="lineNum"> 42 </span> : : FDT_ERRTABENT(FDT_ERR_ALIGNMENT),</a>
+<a name="43"><span class="lineNum"> 43 </span> : : };</a>
+<a name="44"><span class="lineNum"> 44 </span> : : #define FDT_ERRTABSIZE ((int)(sizeof(fdt_errtable) / sizeof(fdt_errtable[0])))</a>
+<a name="45"><span class="lineNum"> 45 </span> : : </a>
+<a name="46"><span class="lineNum"> 46 </span> :<span class="lineNoCov"> 0 : const char *fdt_strerror(int errval)</span></a>
+<a name="47"><span class="lineNum"> 47 </span> : : {</a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineNoCov"> 0 : if (errval &gt; 0)</span></a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineNoCov"> 0 : return &quot;&lt;valid offset/length&gt;&quot;;</span></a>
+<a name="50"><span class="lineNum"> 50 </span> :<span class="lineNoCov"> 0 : else if (errval == 0)</span></a>
+<a name="51"><span class="lineNum"> 51 </span> :<span class="lineNoCov"> 0 : return &quot;&lt;no error&gt;&quot;;</span></a>
+<a name="52"><span class="lineNum"> 52 </span> :<span class="lineNoCov"> 0 : else if (-errval &lt; FDT_ERRTABSIZE) {</span></a>
+<a name="53"><span class="lineNum"> 53 </span> :<span class="lineNoCov"> 0 : const char *s = fdt_errtable[-errval].str;</span></a>
+<a name="54"><span class="lineNum"> 54 </span> : : </a>
+<a name="55"><span class="lineNum"> 55 </span> :<span class="lineNoCov"> 0 : if (s)</span></a>
+<a name="56"><span class="lineNum"> 56 </span> :<span class="lineNoCov"> 0 : return s;</span></a>
+<a name="57"><span class="lineNum"> 57 </span> : : }</a>
+<a name="58"><span class="lineNum"> 58 </span> : : </a>
+<a name="59"><span class="lineNum"> 59 </span> :<span class="lineNoCov"> 0 : return &quot;&lt;unknown error&gt;&quot;;</span></a>
+<a name="60"><span class="lineNum"> 60 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/libfdt/fdt_sw.c.func-sort-c.html b/coverage-report/libfdt/fdt_sw.c.func-sort-c.html
index 8962880..c33cebc 100644
--- a/coverage-report/libfdt/fdt_sw.c.func-sort-c.html
+++ b/coverage-report/libfdt/fdt_sw.c.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">124</td>
- <td class="headerCovTableEntry">173</td>
- <td class="headerCovTableEntryLo">71.7 %</td>
+ <td class="headerCovTableEntry">126</td>
+ <td class="headerCovTableEntry">178</td>
+ <td class="headerCovTableEntryLo">70.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">15</td>
@@ -69,76 +69,76 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#182">fdt_create</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#141">fdt_create</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#303">fdt_del_last_string_</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#266">fdt_del_last_string_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#187">fdt_resize</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#146">fdt_resize</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#148">fdt_create_with_flags</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#107">fdt_create_with_flags</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#372">fdt_finish</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#335">fdt_finish</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#243">fdt_finish_reservemap</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#206">fdt_finish_reservemap</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#223">fdt_add_reservemap_entry</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#186">fdt_add_reservemap_entry</a></td>
<td class="coverFnHi">8</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#78">fdt_sw_probe_memrsv_</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#36">fdt_sw_probe_memrsv_</a></td>
<td class="coverFnHi">8</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#285">fdt_add_string_</a></td>
- <td class="coverFnHi">196</td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#248">fdt_add_string_</a></td>
+ <td class="coverFnHi">198</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#254">fdt_begin_node</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#217">fdt_begin_node</a></td>
<td class="coverFnHi">236</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#271">fdt_end_node</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#234">fdt_end_node</a></td>
<td class="coverFnHi">236</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#311">fdt_find_add_string_</a></td>
- <td class="coverFnHi">2785</td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#274">fdt_find_add_string_</a></td>
+ <td class="coverFnHi">2811</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#360">fdt_property</a></td>
- <td class="coverFnHi">2785</td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#323">fdt_property</a></td>
+ <td class="coverFnHi">2811</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#328">fdt_property_placeholder</a></td>
- <td class="coverFnHi">2785</td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#291">fdt_property_placeholder</a></td>
+ <td class="coverFnHi">2811</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#122">sw_flags</a></td>
- <td class="coverFnHi">2785</td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#81">sw_flags</a></td>
+ <td class="coverFnHi">2811</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#133">fdt_grab_space_</a></td>
- <td class="coverFnHi">3259</td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#92">fdt_grab_space_</a></td>
+ <td class="coverFnHi">3285</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#104">fdt_sw_probe_struct_</a></td>
- <td class="coverFnHi">3259</td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#62">fdt_sw_probe_struct_</a></td>
+ <td class="coverFnHi">3285</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#56">fdt_sw_probe_</a></td>
- <td class="coverFnHi">3267</td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#11">fdt_sw_probe_</a></td>
+ <td class="coverFnHi">3293</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libfdt/fdt_sw.c.func.html b/coverage-report/libfdt/fdt_sw.c.func.html
index f4be3a1..40b81d6 100644
--- a/coverage-report/libfdt/fdt_sw.c.func.html
+++ b/coverage-report/libfdt/fdt_sw.c.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">124</td>
- <td class="headerCovTableEntry">173</td>
- <td class="headerCovTableEntryLo">71.7 %</td>
+ <td class="headerCovTableEntry">126</td>
+ <td class="headerCovTableEntry">178</td>
+ <td class="headerCovTableEntryLo">70.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">15</td>
@@ -69,76 +69,76 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fdt_sw.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#223">fdt_add_reservemap_entry</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#186">fdt_add_reservemap_entry</a></td>
<td class="coverFnHi">8</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#285">fdt_add_string_</a></td>
- <td class="coverFnHi">196</td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#248">fdt_add_string_</a></td>
+ <td class="coverFnHi">198</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#254">fdt_begin_node</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#217">fdt_begin_node</a></td>
<td class="coverFnHi">236</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#182">fdt_create</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#141">fdt_create</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#148">fdt_create_with_flags</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#107">fdt_create_with_flags</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#303">fdt_del_last_string_</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#266">fdt_del_last_string_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#271">fdt_end_node</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#234">fdt_end_node</a></td>
<td class="coverFnHi">236</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#311">fdt_find_add_string_</a></td>
- <td class="coverFnHi">2785</td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#274">fdt_find_add_string_</a></td>
+ <td class="coverFnHi">2811</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#372">fdt_finish</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#335">fdt_finish</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#243">fdt_finish_reservemap</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#206">fdt_finish_reservemap</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#133">fdt_grab_space_</a></td>
- <td class="coverFnHi">3259</td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#92">fdt_grab_space_</a></td>
+ <td class="coverFnHi">3285</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#360">fdt_property</a></td>
- <td class="coverFnHi">2785</td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#323">fdt_property</a></td>
+ <td class="coverFnHi">2811</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#328">fdt_property_placeholder</a></td>
- <td class="coverFnHi">2785</td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#291">fdt_property_placeholder</a></td>
+ <td class="coverFnHi">2811</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#187">fdt_resize</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#146">fdt_resize</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#56">fdt_sw_probe_</a></td>
- <td class="coverFnHi">3267</td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#11">fdt_sw_probe_</a></td>
+ <td class="coverFnHi">3293</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#78">fdt_sw_probe_memrsv_</a></td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#36">fdt_sw_probe_memrsv_</a></td>
<td class="coverFnHi">8</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#104">fdt_sw_probe_struct_</a></td>
- <td class="coverFnHi">3259</td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#62">fdt_sw_probe_struct_</a></td>
+ <td class="coverFnHi">3285</td>
</tr>
<tr>
- <td class="coverFn"><a href="fdt_sw.c.gcov.html#122">sw_flags</a></td>
- <td class="coverFnHi">2785</td>
+ <td class="coverFn"><a href="fdt_sw.c.gcov.html#81">sw_flags</a></td>
+ <td class="coverFnHi">2811</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libfdt/fdt_sw.c.gcov.html b/coverage-report/libfdt/fdt_sw.c.gcov.html
index 2c1b34e..e518fa5 100644
--- a/coverage-report/libfdt/fdt_sw.c.gcov.html
+++ b/coverage-report/libfdt/fdt_sw.c.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">124</td>
- <td class="headerCovTableEntry">173</td>
- <td class="headerCovTableEntryLo">71.7 %</td>
+ <td class="headerCovTableEntry">126</td>
+ <td class="headerCovTableEntry">178</td>
+ <td class="headerCovTableEntryLo">70.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">15</td>
@@ -69,427 +69,390 @@
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
-<a name="1"><span class="lineNum"> 1 </span> : : /*</a>
-<a name="2"><span class="lineNum"> 2 </span> : : * libfdt - Flat Device Tree manipulation</a>
-<a name="3"><span class="lineNum"> 3 </span> : : * Copyright (C) 2006 David Gibson, IBM Corporation.</a>
-<a name="4"><span class="lineNum"> 4 </span> : : *</a>
-<a name="5"><span class="lineNum"> 5 </span> : : * libfdt is dual licensed: you can use it either under the terms of</a>
-<a name="6"><span class="lineNum"> 6 </span> : : * the GPL, or the BSD license, at your option.</a>
-<a name="7"><span class="lineNum"> 7 </span> : : *</a>
-<a name="8"><span class="lineNum"> 8 </span> : : * a) This library is free software; you can redistribute it and/or</a>
-<a name="9"><span class="lineNum"> 9 </span> : : * modify it under the terms of the GNU General Public License as</a>
-<a name="10"><span class="lineNum"> 10 </span> : : * published by the Free Software Foundation; either version 2 of the</a>
-<a name="11"><span class="lineNum"> 11 </span> : : * License, or (at your option) any later version.</a>
-<a name="12"><span class="lineNum"> 12 </span> : : *</a>
-<a name="13"><span class="lineNum"> 13 </span> : : * This library is distributed in the hope that it will be useful,</a>
-<a name="14"><span class="lineNum"> 14 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of</a>
-<a name="15"><span class="lineNum"> 15 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</a>
-<a name="16"><span class="lineNum"> 16 </span> : : * GNU General Public License for more details.</a>
-<a name="17"><span class="lineNum"> 17 </span> : : *</a>
-<a name="18"><span class="lineNum"> 18 </span> : : * You should have received a copy of the GNU General Public</a>
-<a name="19"><span class="lineNum"> 19 </span> : : * License along with this library; if not, write to the Free</a>
-<a name="20"><span class="lineNum"> 20 </span> : : * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,</a>
-<a name="21"><span class="lineNum"> 21 </span> : : * MA 02110-1301 USA</a>
-<a name="22"><span class="lineNum"> 22 </span> : : *</a>
-<a name="23"><span class="lineNum"> 23 </span> : : * Alternatively,</a>
-<a name="24"><span class="lineNum"> 24 </span> : : *</a>
-<a name="25"><span class="lineNum"> 25 </span> : : * b) Redistribution and use in source and binary forms, with or</a>
-<a name="26"><span class="lineNum"> 26 </span> : : * without modification, are permitted provided that the following</a>
-<a name="27"><span class="lineNum"> 27 </span> : : * conditions are met:</a>
-<a name="28"><span class="lineNum"> 28 </span> : : *</a>
-<a name="29"><span class="lineNum"> 29 </span> : : * 1. Redistributions of source code must retain the above</a>
-<a name="30"><span class="lineNum"> 30 </span> : : * copyright notice, this list of conditions and the following</a>
-<a name="31"><span class="lineNum"> 31 </span> : : * disclaimer.</a>
-<a name="32"><span class="lineNum"> 32 </span> : : * 2. Redistributions in binary form must reproduce the above</a>
-<a name="33"><span class="lineNum"> 33 </span> : : * copyright notice, this list of conditions and the following</a>
-<a name="34"><span class="lineNum"> 34 </span> : : * disclaimer in the documentation and/or other materials</a>
-<a name="35"><span class="lineNum"> 35 </span> : : * provided with the distribution.</a>
-<a name="36"><span class="lineNum"> 36 </span> : : *</a>
-<a name="37"><span class="lineNum"> 37 </span> : : * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND</a>
-<a name="38"><span class="lineNum"> 38 </span> : : * CONTRIBUTORS &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES,</a>
-<a name="39"><span class="lineNum"> 39 </span> : : * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</a>
-<a name="40"><span class="lineNum"> 40 </span> : : * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE</a>
-<a name="41"><span class="lineNum"> 41 </span> : : * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR</a>
-<a name="42"><span class="lineNum"> 42 </span> : : * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</a>
-<a name="43"><span class="lineNum"> 43 </span> : : * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT</a>
-<a name="44"><span class="lineNum"> 44 </span> : : * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;</a>
-<a name="45"><span class="lineNum"> 45 </span> : : * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</a>
-<a name="46"><span class="lineNum"> 46 </span> : : * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</a>
-<a name="47"><span class="lineNum"> 47 </span> : : * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR</a>
-<a name="48"><span class="lineNum"> 48 </span> : : * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,</a>
-<a name="49"><span class="lineNum"> 49 </span> : : * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</a>
-<a name="50"><span class="lineNum"> 50 </span> : : */</a>
-<a name="51"><span class="lineNum"> 51 </span> : : #include &quot;libfdt_env.h&quot;</a>
-<a name="52"><span class="lineNum"> 52 </span> : : </a>
-<a name="53"><span class="lineNum"> 53 </span> : : #include &lt;fdt.h&gt;</a>
-<a name="54"><span class="lineNum"> 54 </span> : : #include &lt;libfdt.h&gt;</a>
+<a name="1"><span class="lineNum"> 1 </span> : : // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)</a>
+<a name="2"><span class="lineNum"> 2 </span> : : /*</a>
+<a name="3"><span class="lineNum"> 3 </span> : : * libfdt - Flat Device Tree manipulation</a>
+<a name="4"><span class="lineNum"> 4 </span> : : * Copyright (C) 2006 David Gibson, IBM Corporation.</a>
+<a name="5"><span class="lineNum"> 5 </span> : : */</a>
+<a name="6"><span class="lineNum"> 6 </span> : : #include &quot;libfdt_env.h&quot;</a>
+<a name="7"><span class="lineNum"> 7 </span> : : </a>
+<a name="8"><span class="lineNum"> 8 </span> : : #include &lt;fdt.h&gt;</a>
+<a name="9"><span class="lineNum"> 9 </span> : : #include &lt;libfdt.h&gt;</a>
+<a name="10"><span class="lineNum"> 10 </span> : : </a>
+<a name="11"><span class="lineNum"> 11 </span> : : #include &quot;libfdt_internal.h&quot;</a>
+<a name="12"><span class="lineNum"> 12 </span> : : </a>
+<a name="13"><span class="lineNum"> 13 </span> :<span class="lineCov"> 3293 : static int fdt_sw_probe_(void *fdt)</span></a>
+<a name="14"><span class="lineNum"> 14 </span> : : {</a>
+<a name="15"><span class="lineNum"> 15 </span> :<span class="lineCov"> 3293 : if (!can_assume(VALID_INPUT)) {</span></a>
+<a name="16"><span class="lineNum"> 16 </span> :<span class="lineCov"> 3293 : if (fdt_magic(fdt) == FDT_MAGIC)</span></a>
+<a name="17"><span class="lineNum"> 17 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADSTATE;</span></a>
+<a name="18"><span class="lineNum"> 18 </span> :<span class="lineCov"> 3293 : else if (fdt_magic(fdt) != FDT_SW_MAGIC)</span></a>
+<a name="19"><span class="lineNum"> 19 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADMAGIC;</span></a>
+<a name="20"><span class="lineNum"> 20 </span> : : }</a>
+<a name="21"><span class="lineNum"> 21 </span> : : </a>
+<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 3293 : return 0;</span></a>
+<a name="23"><span class="lineNum"> 23 </span> : : }</a>
+<a name="24"><span class="lineNum"> 24 </span> : : </a>
+<a name="25"><span class="lineNum"> 25 </span> : : #define FDT_SW_PROBE(fdt) \</a>
+<a name="26"><span class="lineNum"> 26 </span> : : { \</a>
+<a name="27"><span class="lineNum"> 27 </span> : : int err; \</a>
+<a name="28"><span class="lineNum"> 28 </span> : : if ((err = fdt_sw_probe_(fdt)) != 0) \</a>
+<a name="29"><span class="lineNum"> 29 </span> : : return err; \</a>
+<a name="30"><span class="lineNum"> 30 </span> : : }</a>
+<a name="31"><span class="lineNum"> 31 </span> : : </a>
+<a name="32"><span class="lineNum"> 32 </span> : : /* 'memrsv' state: Initial state after fdt_create()</a>
+<a name="33"><span class="lineNum"> 33 </span> : : *</a>
+<a name="34"><span class="lineNum"> 34 </span> : : * Allowed functions:</a>
+<a name="35"><span class="lineNum"> 35 </span> : : * fdt_add_reservemap_entry()</a>
+<a name="36"><span class="lineNum"> 36 </span> : : * fdt_finish_reservemap() [moves to 'struct' state]</a>
+<a name="37"><span class="lineNum"> 37 </span> : : */</a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 8 : static int fdt_sw_probe_memrsv_(void *fdt)</span></a>
+<a name="39"><span class="lineNum"> 39 </span> : : {</a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 8 : int err = fdt_sw_probe_(fdt);</span></a>
+<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 8 : if (err)</span></a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineNoCov"> 0 : return err;</span></a>
+<a name="43"><span class="lineNum"> 43 </span> : : </a>
+<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 8 : if (!can_assume(VALID_INPUT) &amp;&amp; fdt_off_dt_strings(fdt) != 0)</span></a>
+<a name="45"><span class="lineNum"> 45 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADSTATE;</span></a>
+<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 8 : return 0;</span></a>
+<a name="47"><span class="lineNum"> 47 </span> : : }</a>
+<a name="48"><span class="lineNum"> 48 </span> : : </a>
+<a name="49"><span class="lineNum"> 49 </span> : : #define FDT_SW_PROBE_MEMRSV(fdt) \</a>
+<a name="50"><span class="lineNum"> 50 </span> : : { \</a>
+<a name="51"><span class="lineNum"> 51 </span> : : int err; \</a>
+<a name="52"><span class="lineNum"> 52 </span> : : if ((err = fdt_sw_probe_memrsv_(fdt)) != 0) \</a>
+<a name="53"><span class="lineNum"> 53 </span> : : return err; \</a>
+<a name="54"><span class="lineNum"> 54 </span> : : }</a>
<a name="55"><span class="lineNum"> 55 </span> : : </a>
-<a name="56"><span class="lineNum"> 56 </span> : : #include &quot;libfdt_internal.h&quot;</a>
-<a name="57"><span class="lineNum"> 57 </span> : : </a>
-<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 3267 : static int fdt_sw_probe_(void *fdt)</span></a>
-<a name="59"><span class="lineNum"> 59 </span> : : {</a>
-<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 3267 : if (fdt_magic(fdt) == FDT_MAGIC)</span></a>
-<a name="61"><span class="lineNum"> 61 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADSTATE;</span></a>
-<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 3267 : else if (fdt_magic(fdt) != FDT_SW_MAGIC)</span></a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADMAGIC;</span></a>
-<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 3267 : return 0;</span></a>
-<a name="65"><span class="lineNum"> 65 </span> : : }</a>
-<a name="66"><span class="lineNum"> 66 </span> : : </a>
-<a name="67"><span class="lineNum"> 67 </span> : : #define FDT_SW_PROBE(fdt) \</a>
-<a name="68"><span class="lineNum"> 68 </span> : : { \</a>
-<a name="69"><span class="lineNum"> 69 </span> : : int err; \</a>
-<a name="70"><span class="lineNum"> 70 </span> : : if ((err = fdt_sw_probe_(fdt)) != 0) \</a>
-<a name="71"><span class="lineNum"> 71 </span> : : return err; \</a>
-<a name="72"><span class="lineNum"> 72 </span> : : }</a>
-<a name="73"><span class="lineNum"> 73 </span> : : </a>
-<a name="74"><span class="lineNum"> 74 </span> : : /* 'memrsv' state: Initial state after fdt_create()</a>
-<a name="75"><span class="lineNum"> 75 </span> : : *</a>
-<a name="76"><span class="lineNum"> 76 </span> : : * Allowed functions:</a>
-<a name="77"><span class="lineNum"> 77 </span> : : * fdt_add_reservmap_entry()</a>
-<a name="78"><span class="lineNum"> 78 </span> : : * fdt_finish_reservemap() [moves to 'struct' state]</a>
-<a name="79"><span class="lineNum"> 79 </span> : : */</a>
-<a name="80"><span class="lineNum"> 80 </span> :<span class="lineCov"> 8 : static int fdt_sw_probe_memrsv_(void *fdt)</span></a>
-<a name="81"><span class="lineNum"> 81 </span> : : {</a>
-<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 8 : int err = fdt_sw_probe_(fdt);</span></a>
-<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 8 : if (err)</span></a>
-<a name="84"><span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : return err;</span></a>
-<a name="85"><span class="lineNum"> 85 </span> : : </a>
-<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 8 : if (fdt_off_dt_strings(fdt) != 0)</span></a>
-<a name="87"><span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADSTATE;</span></a>
-<a name="88"><span class="lineNum"> 88 </span> :<span class="lineCov"> 8 : return 0;</span></a>
-<a name="89"><span class="lineNum"> 89 </span> : : }</a>
-<a name="90"><span class="lineNum"> 90 </span> : : </a>
-<a name="91"><span class="lineNum"> 91 </span> : : #define FDT_SW_PROBE_MEMRSV(fdt) \</a>
-<a name="92"><span class="lineNum"> 92 </span> : : { \</a>
-<a name="93"><span class="lineNum"> 93 </span> : : int err; \</a>
-<a name="94"><span class="lineNum"> 94 </span> : : if ((err = fdt_sw_probe_memrsv_(fdt)) != 0) \</a>
-<a name="95"><span class="lineNum"> 95 </span> : : return err; \</a>
-<a name="96"><span class="lineNum"> 96 </span> : : }</a>
-<a name="97"><span class="lineNum"> 97 </span> : : </a>
-<a name="98"><span class="lineNum"> 98 </span> : : /* 'struct' state: Enter this state after fdt_finish_reservemap()</a>
-<a name="99"><span class="lineNum"> 99 </span> : : *</a>
-<a name="100"><span class="lineNum"> 100 </span> : : * Allowed functions:</a>
-<a name="101"><span class="lineNum"> 101 </span> : : * fdt_begin_node()</a>
-<a name="102"><span class="lineNum"> 102 </span> : : * fdt_end_node()</a>
-<a name="103"><span class="lineNum"> 103 </span> : : * fdt_property*()</a>
-<a name="104"><span class="lineNum"> 104 </span> : : * fdt_finish() [moves to 'complete' state]</a>
-<a name="105"><span class="lineNum"> 105 </span> : : */</a>
-<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 3259 : static int fdt_sw_probe_struct_(void *fdt)</span></a>
-<a name="107"><span class="lineNum"> 107 </span> : : {</a>
-<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 3259 : int err = fdt_sw_probe_(fdt);</span></a>
-<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 3259 : if (err)</span></a>
-<a name="110"><span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : return err;</span></a>
-<a name="111"><span class="lineNum"> 111 </span> : : </a>
-<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 3259 : if (fdt_off_dt_strings(fdt) != fdt_totalsize(fdt))</span></a>
-<a name="113"><span class="lineNum"> 113 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADSTATE;</span></a>
-<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 3259 : return 0;</span></a>
-<a name="115"><span class="lineNum"> 115 </span> : : }</a>
-<a name="116"><span class="lineNum"> 116 </span> : : </a>
-<a name="117"><span class="lineNum"> 117 </span> : : #define FDT_SW_PROBE_STRUCT(fdt) \</a>
-<a name="118"><span class="lineNum"> 118 </span> : : { \</a>
-<a name="119"><span class="lineNum"> 119 </span> : : int err; \</a>
-<a name="120"><span class="lineNum"> 120 </span> : : if ((err = fdt_sw_probe_struct_(fdt)) != 0) \</a>
-<a name="121"><span class="lineNum"> 121 </span> : : return err; \</a>
-<a name="122"><span class="lineNum"> 122 </span> : : }</a>
-<a name="123"><span class="lineNum"> 123 </span> : : </a>
-<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 2785 : static inline uint32_t sw_flags(void *fdt)</span></a>
-<a name="125"><span class="lineNum"> 125 </span> : : {</a>
-<a name="126"><span class="lineNum"> 126 </span> : : /* assert: (fdt_magic(fdt) == FDT_SW_MAGIC) */</a>
-<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 2785 : return fdt_last_comp_version(fdt);</span></a>
-<a name="128"><span class="lineNum"> 128 </span> : : }</a>
-<a name="129"><span class="lineNum"> 129 </span> : : </a>
-<a name="130"><span class="lineNum"> 130 </span> : : /* 'complete' state: Enter this state after fdt_finish()</a>
-<a name="131"><span class="lineNum"> 131 </span> : : *</a>
-<a name="132"><span class="lineNum"> 132 </span> : : * Allowed functions: none</a>
-<a name="133"><span class="lineNum"> 133 </span> : : */</a>
-<a name="134"><span class="lineNum"> 134 </span> : : </a>
-<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 3259 : static void *fdt_grab_space_(void *fdt, size_t len)</span></a>
-<a name="136"><span class="lineNum"> 136 </span> : : {</a>
-<a name="137"><span class="lineNum"> 137 </span> :<span class="lineCov"> 3259 : int offset = fdt_size_dt_struct(fdt);</span></a>
-<a name="138"><span class="lineNum"> 138 </span> : : int spaceleft;</a>
+<a name="56"><span class="lineNum"> 56 </span> : : /* 'struct' state: Enter this state after fdt_finish_reservemap()</a>
+<a name="57"><span class="lineNum"> 57 </span> : : *</a>
+<a name="58"><span class="lineNum"> 58 </span> : : * Allowed functions:</a>
+<a name="59"><span class="lineNum"> 59 </span> : : * fdt_begin_node()</a>
+<a name="60"><span class="lineNum"> 60 </span> : : * fdt_end_node()</a>
+<a name="61"><span class="lineNum"> 61 </span> : : * fdt_property*()</a>
+<a name="62"><span class="lineNum"> 62 </span> : : * fdt_finish() [moves to 'complete' state]</a>
+<a name="63"><span class="lineNum"> 63 </span> : : */</a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 3285 : static int fdt_sw_probe_struct_(void *fdt)</span></a>
+<a name="65"><span class="lineNum"> 65 </span> : : {</a>
+<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 3285 : int err = fdt_sw_probe_(fdt);</span></a>
+<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 3285 : if (err)</span></a>
+<a name="68"><span class="lineNum"> 68 </span> :<span class="lineNoCov"> 0 : return err;</span></a>
+<a name="69"><span class="lineNum"> 69 </span> : : </a>
+<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 6570 : if (!can_assume(VALID_INPUT) &amp;&amp;</span></a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 3285 : fdt_off_dt_strings(fdt) != fdt_totalsize(fdt))</span></a>
+<a name="72"><span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADSTATE;</span></a>
+<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 3285 : return 0;</span></a>
+<a name="74"><span class="lineNum"> 74 </span> : : }</a>
+<a name="75"><span class="lineNum"> 75 </span> : : </a>
+<a name="76"><span class="lineNum"> 76 </span> : : #define FDT_SW_PROBE_STRUCT(fdt) \</a>
+<a name="77"><span class="lineNum"> 77 </span> : : { \</a>
+<a name="78"><span class="lineNum"> 78 </span> : : int err; \</a>
+<a name="79"><span class="lineNum"> 79 </span> : : if ((err = fdt_sw_probe_struct_(fdt)) != 0) \</a>
+<a name="80"><span class="lineNum"> 80 </span> : : return err; \</a>
+<a name="81"><span class="lineNum"> 81 </span> : : }</a>
+<a name="82"><span class="lineNum"> 82 </span> : : </a>
+<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 2811 : static inline uint32_t sw_flags(void *fdt)</span></a>
+<a name="84"><span class="lineNum"> 84 </span> : : {</a>
+<a name="85"><span class="lineNum"> 85 </span> : : /* assert: (fdt_magic(fdt) == FDT_SW_MAGIC) */</a>
+<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 2811 : return fdt_last_comp_version(fdt);</span></a>
+<a name="87"><span class="lineNum"> 87 </span> : : }</a>
+<a name="88"><span class="lineNum"> 88 </span> : : </a>
+<a name="89"><span class="lineNum"> 89 </span> : : /* 'complete' state: Enter this state after fdt_finish()</a>
+<a name="90"><span class="lineNum"> 90 </span> : : *</a>
+<a name="91"><span class="lineNum"> 91 </span> : : * Allowed functions: none</a>
+<a name="92"><span class="lineNum"> 92 </span> : : */</a>
+<a name="93"><span class="lineNum"> 93 </span> : : </a>
+<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 3285 : static void *fdt_grab_space_(void *fdt, size_t len)</span></a>
+<a name="95"><span class="lineNum"> 95 </span> : : {</a>
+<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 3285 : unsigned int offset = fdt_size_dt_struct(fdt);</span></a>
+<a name="97"><span class="lineNum"> 97 </span> : : unsigned int spaceleft;</a>
+<a name="98"><span class="lineNum"> 98 </span> : : </a>
+<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 3285 : spaceleft = fdt_totalsize(fdt) - fdt_off_dt_struct(fdt)</span></a>
+<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 3285 : - fdt_size_dt_strings(fdt);</span></a>
+<a name="101"><span class="lineNum"> 101 </span> : : </a>
+<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 3285 : if ((offset + len &lt; offset) || (offset + len &gt; spaceleft))</span></a>
+<a name="103"><span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="104"><span class="lineNum"> 104 </span> : : </a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 3285 : fdt_set_size_dt_struct(fdt, offset + len);</span></a>
+<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 3285 : return fdt_offset_ptr_w_(fdt, offset);</span></a>
+<a name="107"><span class="lineNum"> 107 </span> : : }</a>
+<a name="108"><span class="lineNum"> 108 </span> : : </a>
+<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 2 : int fdt_create_with_flags(void *buf, int bufsize, uint32_t flags)</span></a>
+<a name="110"><span class="lineNum"> 110 </span> : : {</a>
+<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 2 : const int hdrsize = FDT_ALIGN(sizeof(struct fdt_header),</span></a>
+<a name="112"><span class="lineNum"> 112 </span> : : sizeof(struct fdt_reserve_entry));</a>
+<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 2 : void *fdt = buf;</span></a>
+<a name="114"><span class="lineNum"> 114 </span> : : </a>
+<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 2 : if (bufsize &lt; hdrsize)</span></a>
+<a name="116"><span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
+<a name="117"><span class="lineNum"> 117 </span> : : </a>
+<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 2 : if (flags &amp; ~FDT_CREATE_FLAGS_ALL)</span></a>
+<a name="119"><span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADFLAGS;</span></a>
+<a name="120"><span class="lineNum"> 120 </span> : : </a>
+<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 2 : memset(buf, 0, bufsize);</span></a>
+<a name="122"><span class="lineNum"> 122 </span> : : </a>
+<a name="123"><span class="lineNum"> 123 </span> : : /*</a>
+<a name="124"><span class="lineNum"> 124 </span> : : * magic and last_comp_version keep intermediate state during the fdt</a>
+<a name="125"><span class="lineNum"> 125 </span> : : * creation process, which is replaced with the proper FDT format by</a>
+<a name="126"><span class="lineNum"> 126 </span> : : * fdt_finish().</a>
+<a name="127"><span class="lineNum"> 127 </span> : : *</a>
+<a name="128"><span class="lineNum"> 128 </span> : : * flags should be accessed with sw_flags().</a>
+<a name="129"><span class="lineNum"> 129 </span> : : */</a>
+<a name="130"><span class="lineNum"> 130 </span> :<span class="lineCov"> 2 : fdt_set_magic(fdt, FDT_SW_MAGIC);</span></a>
+<a name="131"><span class="lineNum"> 131 </span> :<span class="lineCov"> 2 : fdt_set_version(fdt, FDT_LAST_SUPPORTED_VERSION);</span></a>
+<a name="132"><span class="lineNum"> 132 </span> :<span class="lineCov"> 2 : fdt_set_last_comp_version(fdt, flags);</span></a>
+<a name="133"><span class="lineNum"> 133 </span> : : </a>
+<a name="134"><span class="lineNum"> 134 </span> :<span class="lineCov"> 2 : fdt_set_totalsize(fdt, bufsize);</span></a>
+<a name="135"><span class="lineNum"> 135 </span> : : </a>
+<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 2 : fdt_set_off_mem_rsvmap(fdt, hdrsize);</span></a>
+<a name="137"><span class="lineNum"> 137 </span> :<span class="lineCov"> 2 : fdt_set_off_dt_struct(fdt, fdt_off_mem_rsvmap(fdt));</span></a>
+<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 2 : fdt_set_off_dt_strings(fdt, 0);</span></a>
<a name="139"><span class="lineNum"> 139 </span> : : </a>
-<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 3259 : spaceleft = fdt_totalsize(fdt) - fdt_off_dt_struct(fdt)</span></a>
-<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 3259 : - fdt_size_dt_strings(fdt);</span></a>
+<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 2 : return 0;</span></a>
+<a name="141"><span class="lineNum"> 141 </span> : : }</a>
<a name="142"><span class="lineNum"> 142 </span> : : </a>
-<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 3259 : if ((offset + len &lt; offset) || (offset + len &gt; spaceleft))</span></a>
-<a name="144"><span class="lineNum"> 144 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="145"><span class="lineNum"> 145 </span> : : </a>
-<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 3259 : fdt_set_size_dt_struct(fdt, offset + len);</span></a>
-<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 3259 : return fdt_offset_ptr_w_(fdt, offset);</span></a>
-<a name="148"><span class="lineNum"> 148 </span> : : }</a>
-<a name="149"><span class="lineNum"> 149 </span> : : </a>
-<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 2 : int fdt_create_with_flags(void *buf, int bufsize, uint32_t flags)</span></a>
-<a name="151"><span class="lineNum"> 151 </span> : : {</a>
-<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 2 : const size_t hdrsize = FDT_ALIGN(sizeof(struct fdt_header),</span></a>
-<a name="153"><span class="lineNum"> 153 </span> : : sizeof(struct fdt_reserve_entry));</a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 2 : void *fdt = buf;</span></a>
-<a name="155"><span class="lineNum"> 155 </span> : : </a>
-<a name="156"><span class="lineNum"> 156 </span> :<span class="lineCov"> 2 : if (bufsize &lt; hdrsize)</span></a>
-<a name="157"><span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
-<a name="158"><span class="lineNum"> 158 </span> : : </a>
-<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 2 : if (flags &amp; ~FDT_CREATE_FLAGS_ALL)</span></a>
-<a name="160"><span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_BADFLAGS;</span></a>
-<a name="161"><span class="lineNum"> 161 </span> : : </a>
-<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 2 : memset(buf, 0, bufsize);</span></a>
-<a name="163"><span class="lineNum"> 163 </span> : : </a>
-<a name="164"><span class="lineNum"> 164 </span> : : /*</a>
-<a name="165"><span class="lineNum"> 165 </span> : : * magic and last_comp_version keep intermediate state during the fdt</a>
-<a name="166"><span class="lineNum"> 166 </span> : : * creation process, which is replaced with the proper FDT format by</a>
-<a name="167"><span class="lineNum"> 167 </span> : : * fdt_finish().</a>
-<a name="168"><span class="lineNum"> 168 </span> : : *</a>
-<a name="169"><span class="lineNum"> 169 </span> : : * flags should be accessed with sw_flags().</a>
-<a name="170"><span class="lineNum"> 170 </span> : : */</a>
-<a name="171"><span class="lineNum"> 171 </span> :<span class="lineCov"> 2 : fdt_set_magic(fdt, FDT_SW_MAGIC);</span></a>
-<a name="172"><span class="lineNum"> 172 </span> :<span class="lineCov"> 2 : fdt_set_version(fdt, FDT_LAST_SUPPORTED_VERSION);</span></a>
-<a name="173"><span class="lineNum"> 173 </span> :<span class="lineCov"> 2 : fdt_set_last_comp_version(fdt, flags);</span></a>
-<a name="174"><span class="lineNum"> 174 </span> : : </a>
-<a name="175"><span class="lineNum"> 175 </span> :<span class="lineCov"> 2 : fdt_set_totalsize(fdt, bufsize);</span></a>
-<a name="176"><span class="lineNum"> 176 </span> : : </a>
-<a name="177"><span class="lineNum"> 177 </span> :<span class="lineCov"> 2 : fdt_set_off_mem_rsvmap(fdt, hdrsize);</span></a>
-<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 2 : fdt_set_off_dt_struct(fdt, fdt_off_mem_rsvmap(fdt));</span></a>
-<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 2 : fdt_set_off_dt_strings(fdt, 0);</span></a>
+<a name="143"><span class="lineNum"> 143 </span> :<span class="lineNoCov"> 0 : int fdt_create(void *buf, int bufsize)</span></a>
+<a name="144"><span class="lineNum"> 144 </span> : : {</a>
+<a name="145"><span class="lineNum"> 145 </span> :<span class="lineNoCov"> 0 : return fdt_create_with_flags(buf, bufsize, 0);</span></a>
+<a name="146"><span class="lineNum"> 146 </span> : : }</a>
+<a name="147"><span class="lineNum"> 147 </span> : : </a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : int fdt_resize(void *fdt, void *buf, int bufsize)</span></a>
+<a name="149"><span class="lineNum"> 149 </span> : : {</a>
+<a name="150"><span class="lineNum"> 150 </span> : : size_t headsize, tailsize;</a>
+<a name="151"><span class="lineNum"> 151 </span> : : char *oldtail, *newtail;</a>
+<a name="152"><span class="lineNum"> 152 </span> : : </a>
+<a name="153"><span class="lineNum"> 153 </span> :<span class="lineNoCov"> 0 : FDT_SW_PROBE(fdt);</span></a>
+<a name="154"><span class="lineNum"> 154 </span> : : </a>
+<a name="155"><span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : if (bufsize &lt; 0)</span></a>
+<a name="156"><span class="lineNum"> 156 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
+<a name="157"><span class="lineNum"> 157 </span> : : </a>
+<a name="158"><span class="lineNum"> 158 </span> :<span class="lineNoCov"> 0 : headsize = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);</span></a>
+<a name="159"><span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : tailsize = fdt_size_dt_strings(fdt);</span></a>
+<a name="160"><span class="lineNum"> 160 </span> : : </a>
+<a name="161"><span class="lineNum"> 161 </span> :<span class="lineNoCov"> 0 : if (!can_assume(VALID_DTB) &amp;&amp;</span></a>
+<a name="162"><span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : headsize + tailsize &gt; fdt_totalsize(fdt))</span></a>
+<a name="163"><span class="lineNum"> 163 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_INTERNAL;</span></a>
+<a name="164"><span class="lineNum"> 164 </span> : : </a>
+<a name="165"><span class="lineNum"> 165 </span> :<span class="lineNoCov"> 0 : if ((headsize + tailsize) &gt; (unsigned)bufsize)</span></a>
+<a name="166"><span class="lineNum"> 166 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
+<a name="167"><span class="lineNum"> 167 </span> : : </a>
+<a name="168"><span class="lineNum"> 168 </span> :<span class="lineNoCov"> 0 : oldtail = (char *)fdt + fdt_totalsize(fdt) - tailsize;</span></a>
+<a name="169"><span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : newtail = (char *)buf + bufsize - tailsize;</span></a>
+<a name="170"><span class="lineNum"> 170 </span> : : </a>
+<a name="171"><span class="lineNum"> 171 </span> : : /* Two cases to avoid clobbering data if the old and new</a>
+<a name="172"><span class="lineNum"> 172 </span> : : * buffers partially overlap */</a>
+<a name="173"><span class="lineNum"> 173 </span> :<span class="lineNoCov"> 0 : if (buf &lt;= fdt) {</span></a>
+<a name="174"><span class="lineNum"> 174 </span> :<span class="lineNoCov"> 0 : memmove(buf, fdt, headsize);</span></a>
+<a name="175"><span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : memmove(newtail, oldtail, tailsize);</span></a>
+<a name="176"><span class="lineNum"> 176 </span> : : } else {</a>
+<a name="177"><span class="lineNum"> 177 </span> :<span class="lineNoCov"> 0 : memmove(newtail, oldtail, tailsize);</span></a>
+<a name="178"><span class="lineNum"> 178 </span> :<span class="lineNoCov"> 0 : memmove(buf, fdt, headsize);</span></a>
+<a name="179"><span class="lineNum"> 179 </span> : : }</a>
<a name="180"><span class="lineNum"> 180 </span> : : </a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 2 : return 0;</span></a>
-<a name="182"><span class="lineNum"> 182 </span> : : }</a>
-<a name="183"><span class="lineNum"> 183 </span> : : </a>
-<a name="184"><span class="lineNum"> 184 </span> :<span class="lineNoCov"> 0 : int fdt_create(void *buf, int bufsize)</span></a>
-<a name="185"><span class="lineNum"> 185 </span> : : {</a>
-<a name="186"><span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : return fdt_create_with_flags(buf, bufsize, 0);</span></a>
-<a name="187"><span class="lineNum"> 187 </span> : : }</a>
-<a name="188"><span class="lineNum"> 188 </span> : : </a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : int fdt_resize(void *fdt, void *buf, int bufsize)</span></a>
-<a name="190"><span class="lineNum"> 190 </span> : : {</a>
-<a name="191"><span class="lineNum"> 191 </span> : : size_t headsize, tailsize;</a>
-<a name="192"><span class="lineNum"> 192 </span> : : char *oldtail, *newtail;</a>
-<a name="193"><span class="lineNum"> 193 </span> : : </a>
-<a name="194"><span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : FDT_SW_PROBE(fdt);</span></a>
-<a name="195"><span class="lineNum"> 195 </span> : : </a>
-<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : headsize = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);</span></a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : tailsize = fdt_size_dt_strings(fdt);</span></a>
+<a name="181"><span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : fdt_set_totalsize(buf, bufsize);</span></a>
+<a name="182"><span class="lineNum"> 182 </span> :<span class="lineNoCov"> 0 : if (fdt_off_dt_strings(buf))</span></a>
+<a name="183"><span class="lineNum"> 183 </span> :<span class="lineNoCov"> 0 : fdt_set_off_dt_strings(buf, bufsize);</span></a>
+<a name="184"><span class="lineNum"> 184 </span> : : </a>
+<a name="185"><span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
+<a name="186"><span class="lineNum"> 186 </span> : : }</a>
+<a name="187"><span class="lineNum"> 187 </span> : : </a>
+<a name="188"><span class="lineNum"> 188 </span> :<span class="lineCov"> 8 : int fdt_add_reservemap_entry(void *fdt, uint64_t addr, uint64_t size)</span></a>
+<a name="189"><span class="lineNum"> 189 </span> : : {</a>
+<a name="190"><span class="lineNum"> 190 </span> : : struct fdt_reserve_entry *re;</a>
+<a name="191"><span class="lineNum"> 191 </span> : : int offset;</a>
+<a name="192"><span class="lineNum"> 192 </span> : : </a>
+<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 8 : FDT_SW_PROBE_MEMRSV(fdt);</span></a>
+<a name="194"><span class="lineNum"> 194 </span> : : </a>
+<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 8 : offset = fdt_off_dt_struct(fdt);</span></a>
+<a name="196"><span class="lineNum"> 196 </span> :<span class="lineCov"> 8 : if ((offset + sizeof(*re)) &gt; fdt_totalsize(fdt))</span></a>
+<a name="197"><span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
<a name="198"><span class="lineNum"> 198 </span> : : </a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : if ((headsize + tailsize) &gt; fdt_totalsize(fdt))</span></a>
-<a name="200"><span class="lineNum"> 200 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_INTERNAL;</span></a>
-<a name="201"><span class="lineNum"> 201 </span> : : </a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : if ((headsize + tailsize) &gt; bufsize)</span></a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
+<a name="199"><span class="lineNum"> 199 </span> :<span class="lineCov"> 8 : re = (struct fdt_reserve_entry *)((char *)fdt + offset);</span></a>
+<a name="200"><span class="lineNum"> 200 </span> :<span class="lineCov"> 8 : re-&gt;address = cpu_to_fdt64(addr);</span></a>
+<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 8 : re-&gt;size = cpu_to_fdt64(size);</span></a>
+<a name="202"><span class="lineNum"> 202 </span> : : </a>
+<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 8 : fdt_set_off_dt_struct(fdt, offset + sizeof(*re));</span></a>
<a name="204"><span class="lineNum"> 204 </span> : : </a>
-<a name="205"><span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : oldtail = (char *)fdt + fdt_totalsize(fdt) - tailsize;</span></a>
-<a name="206"><span class="lineNum"> 206 </span> :<span class="lineNoCov"> 0 : newtail = (char *)buf + bufsize - tailsize;</span></a>
+<a name="205"><span class="lineNum"> 205 </span> :<span class="lineCov"> 8 : return 0;</span></a>
+<a name="206"><span class="lineNum"> 206 </span> : : }</a>
<a name="207"><span class="lineNum"> 207 </span> : : </a>
-<a name="208"><span class="lineNum"> 208 </span> : : /* Two cases to avoid clobbering data if the old and new</a>
-<a name="209"><span class="lineNum"> 209 </span> : : * buffers partially overlap */</a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : if (buf &lt;= fdt) {</span></a>
-<a name="211"><span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : memmove(buf, fdt, headsize);</span></a>
-<a name="212"><span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : memmove(newtail, oldtail, tailsize);</span></a>
-<a name="213"><span class="lineNum"> 213 </span> : : } else {</a>
-<a name="214"><span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : memmove(newtail, oldtail, tailsize);</span></a>
-<a name="215"><span class="lineNum"> 215 </span> :<span class="lineNoCov"> 0 : memmove(buf, fdt, headsize);</span></a>
-<a name="216"><span class="lineNum"> 216 </span> : : }</a>
-<a name="217"><span class="lineNum"> 217 </span> : : </a>
-<a name="218"><span class="lineNum"> 218 </span> :<span class="lineNoCov"> 0 : fdt_set_totalsize(buf, bufsize);</span></a>
-<a name="219"><span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : if (fdt_off_dt_strings(buf))</span></a>
-<a name="220"><span class="lineNum"> 220 </span> :<span class="lineNoCov"> 0 : fdt_set_off_dt_strings(buf, bufsize);</span></a>
-<a name="221"><span class="lineNum"> 221 </span> : : </a>
-<a name="222"><span class="lineNum"> 222 </span> :<span class="lineNoCov"> 0 : return 0;</span></a>
-<a name="223"><span class="lineNum"> 223 </span> : : }</a>
-<a name="224"><span class="lineNum"> 224 </span> : : </a>
-<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 8 : int fdt_add_reservemap_entry(void *fdt, uint64_t addr, uint64_t size)</span></a>
-<a name="226"><span class="lineNum"> 226 </span> : : {</a>
-<a name="227"><span class="lineNum"> 227 </span> : : struct fdt_reserve_entry *re;</a>
-<a name="228"><span class="lineNum"> 228 </span> : : int offset;</a>
-<a name="229"><span class="lineNum"> 229 </span> : : </a>
-<a name="230"><span class="lineNum"> 230 </span> :<span class="lineCov"> 8 : FDT_SW_PROBE_MEMRSV(fdt);</span></a>
-<a name="231"><span class="lineNum"> 231 </span> : : </a>
-<a name="232"><span class="lineNum"> 232 </span> :<span class="lineCov"> 8 : offset = fdt_off_dt_struct(fdt);</span></a>
-<a name="233"><span class="lineNum"> 233 </span> :<span class="lineCov"> 8 : if ((offset + sizeof(*re)) &gt; fdt_totalsize(fdt))</span></a>
-<a name="234"><span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
+<a name="208"><span class="lineNum"> 208 </span> :<span class="lineCov"> 2 : int fdt_finish_reservemap(void *fdt)</span></a>
+<a name="209"><span class="lineNum"> 209 </span> : : {</a>
+<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 2 : int err = fdt_add_reservemap_entry(fdt, 0, 0);</span></a>
+<a name="211"><span class="lineNum"> 211 </span> : : </a>
+<a name="212"><span class="lineNum"> 212 </span> :<span class="lineCov"> 2 : if (err)</span></a>
+<a name="213"><span class="lineNum"> 213 </span> :<span class="lineNoCov"> 0 : return err;</span></a>
+<a name="214"><span class="lineNum"> 214 </span> : : </a>
+<a name="215"><span class="lineNum"> 215 </span> :<span class="lineCov"> 2 : fdt_set_off_dt_strings(fdt, fdt_totalsize(fdt));</span></a>
+<a name="216"><span class="lineNum"> 216 </span> :<span class="lineCov"> 2 : return 0;</span></a>
+<a name="217"><span class="lineNum"> 217 </span> : : }</a>
+<a name="218"><span class="lineNum"> 218 </span> : : </a>
+<a name="219"><span class="lineNum"> 219 </span> :<span class="lineCov"> 236 : int fdt_begin_node(void *fdt, const char *name)</span></a>
+<a name="220"><span class="lineNum"> 220 </span> : : {</a>
+<a name="221"><span class="lineNum"> 221 </span> : : struct fdt_node_header *nh;</a>
+<a name="222"><span class="lineNum"> 222 </span> : : int namelen;</a>
+<a name="223"><span class="lineNum"> 223 </span> : : </a>
+<a name="224"><span class="lineNum"> 224 </span> :<span class="lineCov"> 236 : FDT_SW_PROBE_STRUCT(fdt);</span></a>
+<a name="225"><span class="lineNum"> 225 </span> : : </a>
+<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 236 : namelen = strlen(name) + 1;</span></a>
+<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 236 : nh = fdt_grab_space_(fdt, sizeof(*nh) + FDT_TAGALIGN(namelen));</span></a>
+<a name="228"><span class="lineNum"> 228 </span> :<span class="lineCov"> 236 : if (! nh)</span></a>
+<a name="229"><span class="lineNum"> 229 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
+<a name="230"><span class="lineNum"> 230 </span> : : </a>
+<a name="231"><span class="lineNum"> 231 </span> :<span class="lineCov"> 236 : nh-&gt;tag = cpu_to_fdt32(FDT_BEGIN_NODE);</span></a>
+<a name="232"><span class="lineNum"> 232 </span> :<span class="lineCov"> 236 : memcpy(nh-&gt;name, name, namelen);</span></a>
+<a name="233"><span class="lineNum"> 233 </span> :<span class="lineCov"> 236 : return 0;</span></a>
+<a name="234"><span class="lineNum"> 234 </span> : : }</a>
<a name="235"><span class="lineNum"> 235 </span> : : </a>
-<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 8 : re = (struct fdt_reserve_entry *)((char *)fdt + offset);</span></a>
-<a name="237"><span class="lineNum"> 237 </span> :<span class="lineCov"> 8 : re-&gt;address = cpu_to_fdt64(addr);</span></a>
-<a name="238"><span class="lineNum"> 238 </span> :<span class="lineCov"> 8 : re-&gt;size = cpu_to_fdt64(size);</span></a>
+<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 236 : int fdt_end_node(void *fdt)</span></a>
+<a name="237"><span class="lineNum"> 237 </span> : : {</a>
+<a name="238"><span class="lineNum"> 238 </span> : : fdt32_t *en;</a>
<a name="239"><span class="lineNum"> 239 </span> : : </a>
-<a name="240"><span class="lineNum"> 240 </span> :<span class="lineCov"> 8 : fdt_set_off_dt_struct(fdt, offset + sizeof(*re));</span></a>
+<a name="240"><span class="lineNum"> 240 </span> :<span class="lineCov"> 236 : FDT_SW_PROBE_STRUCT(fdt);</span></a>
<a name="241"><span class="lineNum"> 241 </span> : : </a>
-<a name="242"><span class="lineNum"> 242 </span> :<span class="lineCov"> 8 : return 0;</span></a>
-<a name="243"><span class="lineNum"> 243 </span> : : }</a>
-<a name="244"><span class="lineNum"> 244 </span> : : </a>
-<a name="245"><span class="lineNum"> 245 </span> :<span class="lineCov"> 2 : int fdt_finish_reservemap(void *fdt)</span></a>
-<a name="246"><span class="lineNum"> 246 </span> : : {</a>
-<a name="247"><span class="lineNum"> 247 </span> :<span class="lineCov"> 2 : int err = fdt_add_reservemap_entry(fdt, 0, 0);</span></a>
-<a name="248"><span class="lineNum"> 248 </span> : : </a>
-<a name="249"><span class="lineNum"> 249 </span> :<span class="lineCov"> 2 : if (err)</span></a>
-<a name="250"><span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : return err;</span></a>
-<a name="251"><span class="lineNum"> 251 </span> : : </a>
-<a name="252"><span class="lineNum"> 252 </span> :<span class="lineCov"> 2 : fdt_set_off_dt_strings(fdt, fdt_totalsize(fdt));</span></a>
-<a name="253"><span class="lineNum"> 253 </span> :<span class="lineCov"> 2 : return 0;</span></a>
-<a name="254"><span class="lineNum"> 254 </span> : : }</a>
-<a name="255"><span class="lineNum"> 255 </span> : : </a>
-<a name="256"><span class="lineNum"> 256 </span> :<span class="lineCov"> 236 : int fdt_begin_node(void *fdt, const char *name)</span></a>
-<a name="257"><span class="lineNum"> 257 </span> : : {</a>
-<a name="258"><span class="lineNum"> 258 </span> : : struct fdt_node_header *nh;</a>
-<a name="259"><span class="lineNum"> 259 </span> : : int namelen;</a>
-<a name="260"><span class="lineNum"> 260 </span> : : </a>
-<a name="261"><span class="lineNum"> 261 </span> :<span class="lineCov"> 236 : FDT_SW_PROBE_STRUCT(fdt);</span></a>
-<a name="262"><span class="lineNum"> 262 </span> : : </a>
-<a name="263"><span class="lineNum"> 263 </span> :<span class="lineCov"> 236 : namelen = strlen(name) + 1;</span></a>
-<a name="264"><span class="lineNum"> 264 </span> :<span class="lineCov"> 236 : nh = fdt_grab_space_(fdt, sizeof(*nh) + FDT_TAGALIGN(namelen));</span></a>
-<a name="265"><span class="lineNum"> 265 </span> :<span class="lineCov"> 236 : if (! nh)</span></a>
-<a name="266"><span class="lineNum"> 266 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
-<a name="267"><span class="lineNum"> 267 </span> : : </a>
-<a name="268"><span class="lineNum"> 268 </span> :<span class="lineCov"> 236 : nh-&gt;tag = cpu_to_fdt32(FDT_BEGIN_NODE);</span></a>
-<a name="269"><span class="lineNum"> 269 </span> :<span class="lineCov"> 236 : memcpy(nh-&gt;name, name, namelen);</span></a>
-<a name="270"><span class="lineNum"> 270 </span> :<span class="lineCov"> 236 : return 0;</span></a>
-<a name="271"><span class="lineNum"> 271 </span> : : }</a>
+<a name="242"><span class="lineNum"> 242 </span> :<span class="lineCov"> 236 : en = fdt_grab_space_(fdt, FDT_TAGSIZE);</span></a>
+<a name="243"><span class="lineNum"> 243 </span> :<span class="lineCov"> 236 : if (! en)</span></a>
+<a name="244"><span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
+<a name="245"><span class="lineNum"> 245 </span> : : </a>
+<a name="246"><span class="lineNum"> 246 </span> :<span class="lineCov"> 236 : *en = cpu_to_fdt32(FDT_END_NODE);</span></a>
+<a name="247"><span class="lineNum"> 247 </span> :<span class="lineCov"> 236 : return 0;</span></a>
+<a name="248"><span class="lineNum"> 248 </span> : : }</a>
+<a name="249"><span class="lineNum"> 249 </span> : : </a>
+<a name="250"><span class="lineNum"> 250 </span> :<span class="lineCov"> 198 : static int fdt_add_string_(void *fdt, const char *s)</span></a>
+<a name="251"><span class="lineNum"> 251 </span> : : {</a>
+<a name="252"><span class="lineNum"> 252 </span> :<span class="lineCov"> 198 : char *strtab = (char *)fdt + fdt_totalsize(fdt);</span></a>
+<a name="253"><span class="lineNum"> 253 </span> :<span class="lineCov"> 198 : unsigned int strtabsize = fdt_size_dt_strings(fdt);</span></a>
+<a name="254"><span class="lineNum"> 254 </span> :<span class="lineCov"> 198 : unsigned int len = strlen(s) + 1;</span></a>
+<a name="255"><span class="lineNum"> 255 </span> : : unsigned int struct_top, offset;</a>
+<a name="256"><span class="lineNum"> 256 </span> : : </a>
+<a name="257"><span class="lineNum"> 257 </span> :<span class="lineCov"> 198 : offset = strtabsize + len;</span></a>
+<a name="258"><span class="lineNum"> 258 </span> :<span class="lineCov"> 198 : struct_top = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);</span></a>
+<a name="259"><span class="lineNum"> 259 </span> :<span class="lineCov"> 198 : if (fdt_totalsize(fdt) - offset &lt; struct_top)</span></a>
+<a name="260"><span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : return 0; /* no more room :( */</span></a>
+<a name="261"><span class="lineNum"> 261 </span> : : </a>
+<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 198 : memcpy(strtab - offset, s, len);</span></a>
+<a name="263"><span class="lineNum"> 263 </span> :<span class="lineCov"> 198 : fdt_set_size_dt_strings(fdt, strtabsize + len);</span></a>
+<a name="264"><span class="lineNum"> 264 </span> :<span class="lineCov"> 198 : return -offset;</span></a>
+<a name="265"><span class="lineNum"> 265 </span> : : }</a>
+<a name="266"><span class="lineNum"> 266 </span> : : </a>
+<a name="267"><span class="lineNum"> 267 </span> : : /* Must only be used to roll back in case of error */</a>
+<a name="268"><span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : static void fdt_del_last_string_(void *fdt, const char *s)</span></a>
+<a name="269"><span class="lineNum"> 269 </span> : : {</a>
+<a name="270"><span class="lineNum"> 270 </span> :<span class="lineNoCov"> 0 : int strtabsize = fdt_size_dt_strings(fdt);</span></a>
+<a name="271"><span class="lineNum"> 271 </span> :<span class="lineNoCov"> 0 : int len = strlen(s) + 1;</span></a>
<a name="272"><span class="lineNum"> 272 </span> : : </a>
-<a name="273"><span class="lineNum"> 273 </span> :<span class="lineCov"> 236 : int fdt_end_node(void *fdt)</span></a>
-<a name="274"><span class="lineNum"> 274 </span> : : {</a>
-<a name="275"><span class="lineNum"> 275 </span> : : fdt32_t *en;</a>
-<a name="276"><span class="lineNum"> 276 </span> : : </a>
-<a name="277"><span class="lineNum"> 277 </span> :<span class="lineCov"> 236 : FDT_SW_PROBE_STRUCT(fdt);</span></a>
-<a name="278"><span class="lineNum"> 278 </span> : : </a>
-<a name="279"><span class="lineNum"> 279 </span> :<span class="lineCov"> 236 : en = fdt_grab_space_(fdt, FDT_TAGSIZE);</span></a>
-<a name="280"><span class="lineNum"> 280 </span> :<span class="lineCov"> 236 : if (! en)</span></a>
-<a name="281"><span class="lineNum"> 281 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
-<a name="282"><span class="lineNum"> 282 </span> : : </a>
-<a name="283"><span class="lineNum"> 283 </span> :<span class="lineCov"> 236 : *en = cpu_to_fdt32(FDT_END_NODE);</span></a>
-<a name="284"><span class="lineNum"> 284 </span> :<span class="lineCov"> 236 : return 0;</span></a>
-<a name="285"><span class="lineNum"> 285 </span> : : }</a>
-<a name="286"><span class="lineNum"> 286 </span> : : </a>
-<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 196 : static int fdt_add_string_(void *fdt, const char *s)</span></a>
-<a name="288"><span class="lineNum"> 288 </span> : : {</a>
-<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 196 : char *strtab = (char *)fdt + fdt_totalsize(fdt);</span></a>
-<a name="290"><span class="lineNum"> 290 </span> :<span class="lineCov"> 196 : int strtabsize = fdt_size_dt_strings(fdt);</span></a>
-<a name="291"><span class="lineNum"> 291 </span> :<span class="lineCov"> 196 : int len = strlen(s) + 1;</span></a>
-<a name="292"><span class="lineNum"> 292 </span> : : int struct_top, offset;</a>
-<a name="293"><span class="lineNum"> 293 </span> : : </a>
-<a name="294"><span class="lineNum"> 294 </span> :<span class="lineCov"> 196 : offset = -strtabsize - len;</span></a>
-<a name="295"><span class="lineNum"> 295 </span> :<span class="lineCov"> 196 : struct_top = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);</span></a>
-<a name="296"><span class="lineNum"> 296 </span> :<span class="lineCov"> 196 : if (fdt_totalsize(fdt) + offset &lt; struct_top)</span></a>
-<a name="297"><span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : return 0; /* no more room :( */</span></a>
+<a name="273"><span class="lineNum"> 273 </span> :<span class="lineNoCov"> 0 : fdt_set_size_dt_strings(fdt, strtabsize - len);</span></a>
+<a name="274"><span class="lineNum"> 274 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="275"><span class="lineNum"> 275 </span> : : </a>
+<a name="276"><span class="lineNum"> 276 </span> :<span class="lineCov"> 2811 : static int fdt_find_add_string_(void *fdt, const char *s, int *allocated)</span></a>
+<a name="277"><span class="lineNum"> 277 </span> : : {</a>
+<a name="278"><span class="lineNum"> 278 </span> :<span class="lineCov"> 2811 : char *strtab = (char *)fdt + fdt_totalsize(fdt);</span></a>
+<a name="279"><span class="lineNum"> 279 </span> :<span class="lineCov"> 2811 : int strtabsize = fdt_size_dt_strings(fdt);</span></a>
+<a name="280"><span class="lineNum"> 280 </span> : : const char *p;</a>
+<a name="281"><span class="lineNum"> 281 </span> : : </a>
+<a name="282"><span class="lineNum"> 282 </span> :<span class="lineCov"> 2811 : *allocated = 0;</span></a>
+<a name="283"><span class="lineNum"> 283 </span> : : </a>
+<a name="284"><span class="lineNum"> 284 </span> :<span class="lineCov"> 2811 : p = fdt_find_string_(strtab - strtabsize, strtabsize, s);</span></a>
+<a name="285"><span class="lineNum"> 285 </span> :<span class="lineCov"> 2811 : if (p)</span></a>
+<a name="286"><span class="lineNum"> 286 </span> :<span class="lineCov"> 2613 : return p - strtab;</span></a>
+<a name="287"><span class="lineNum"> 287 </span> : : </a>
+<a name="288"><span class="lineNum"> 288 </span> :<span class="lineCov"> 198 : *allocated = 1;</span></a>
+<a name="289"><span class="lineNum"> 289 </span> : : </a>
+<a name="290"><span class="lineNum"> 290 </span> :<span class="lineCov"> 198 : return fdt_add_string_(fdt, s);</span></a>
+<a name="291"><span class="lineNum"> 291 </span> : : }</a>
+<a name="292"><span class="lineNum"> 292 </span> : : </a>
+<a name="293"><span class="lineNum"> 293 </span> :<span class="lineCov"> 2811 : int fdt_property_placeholder(void *fdt, const char *name, int len, void **valp)</span></a>
+<a name="294"><span class="lineNum"> 294 </span> : : {</a>
+<a name="295"><span class="lineNum"> 295 </span> : : struct fdt_property *prop;</a>
+<a name="296"><span class="lineNum"> 296 </span> : : int nameoff;</a>
+<a name="297"><span class="lineNum"> 297 </span> : : int allocated;</a>
<a name="298"><span class="lineNum"> 298 </span> : : </a>
-<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 196 : memcpy(strtab + offset, s, len);</span></a>
-<a name="300"><span class="lineNum"> 300 </span> :<span class="lineCov"> 196 : fdt_set_size_dt_strings(fdt, strtabsize + len);</span></a>
-<a name="301"><span class="lineNum"> 301 </span> :<span class="lineCov"> 196 : return offset;</span></a>
-<a name="302"><span class="lineNum"> 302 </span> : : }</a>
-<a name="303"><span class="lineNum"> 303 </span> : : </a>
-<a name="304"><span class="lineNum"> 304 </span> : : /* Must only be used to roll back in case of error */</a>
-<a name="305"><span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : static void fdt_del_last_string_(void *fdt, const char *s)</span></a>
-<a name="306"><span class="lineNum"> 306 </span> : : {</a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : int strtabsize = fdt_size_dt_strings(fdt);</span></a>
-<a name="308"><span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : int len = strlen(s) + 1;</span></a>
-<a name="309"><span class="lineNum"> 309 </span> : : </a>
-<a name="310"><span class="lineNum"> 310 </span> :<span class="lineNoCov"> 0 : fdt_set_size_dt_strings(fdt, strtabsize - len);</span></a>
-<a name="311"><span class="lineNum"> 311 </span> :<span class="lineNoCov"> 0 : }</span></a>
-<a name="312"><span class="lineNum"> 312 </span> : : </a>
-<a name="313"><span class="lineNum"> 313 </span> :<span class="lineCov"> 2785 : static int fdt_find_add_string_(void *fdt, const char *s, int *allocated)</span></a>
-<a name="314"><span class="lineNum"> 314 </span> : : {</a>
-<a name="315"><span class="lineNum"> 315 </span> :<span class="lineCov"> 2785 : char *strtab = (char *)fdt + fdt_totalsize(fdt);</span></a>
-<a name="316"><span class="lineNum"> 316 </span> :<span class="lineCov"> 2785 : int strtabsize = fdt_size_dt_strings(fdt);</span></a>
-<a name="317"><span class="lineNum"> 317 </span> : : const char *p;</a>
-<a name="318"><span class="lineNum"> 318 </span> : : </a>
-<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 2785 : *allocated = 0;</span></a>
-<a name="320"><span class="lineNum"> 320 </span> : : </a>
-<a name="321"><span class="lineNum"> 321 </span> :<span class="lineCov"> 2785 : p = fdt_find_string_(strtab - strtabsize, strtabsize, s);</span></a>
-<a name="322"><span class="lineNum"> 322 </span> :<span class="lineCov"> 2785 : if (p)</span></a>
-<a name="323"><span class="lineNum"> 323 </span> :<span class="lineCov"> 2589 : return p - strtab;</span></a>
+<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 2811 : FDT_SW_PROBE_STRUCT(fdt);</span></a>
+<a name="300"><span class="lineNum"> 300 </span> : : </a>
+<a name="301"><span class="lineNum"> 301 </span> : : /* String de-duplication can be slow, _NO_NAME_DEDUP skips it */</a>
+<a name="302"><span class="lineNum"> 302 </span> :<span class="lineCov"> 2811 : if (sw_flags(fdt) &amp; FDT_CREATE_FLAG_NO_NAME_DEDUP) {</span></a>
+<a name="303"><span class="lineNum"> 303 </span> :<span class="lineNoCov"> 0 : allocated = 1;</span></a>
+<a name="304"><span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : nameoff = fdt_add_string_(fdt, name);</span></a>
+<a name="305"><span class="lineNum"> 305 </span> : : } else {</a>
+<a name="306"><span class="lineNum"> 306 </span> :<span class="lineCov"> 2811 : nameoff = fdt_find_add_string_(fdt, name, &amp;allocated);</span></a>
+<a name="307"><span class="lineNum"> 307 </span> : : }</a>
+<a name="308"><span class="lineNum"> 308 </span> :<span class="lineCov"> 2811 : if (nameoff == 0)</span></a>
+<a name="309"><span class="lineNum"> 309 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
+<a name="310"><span class="lineNum"> 310 </span> : : </a>
+<a name="311"><span class="lineNum"> 311 </span> :<span class="lineCov"> 2811 : prop = fdt_grab_space_(fdt, sizeof(*prop) + FDT_TAGALIGN(len));</span></a>
+<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 2811 : if (! prop) {</span></a>
+<a name="313"><span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : if (allocated)</span></a>
+<a name="314"><span class="lineNum"> 314 </span> :<span class="lineNoCov"> 0 : fdt_del_last_string_(fdt, name);</span></a>
+<a name="315"><span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
+<a name="316"><span class="lineNum"> 316 </span> : : }</a>
+<a name="317"><span class="lineNum"> 317 </span> : : </a>
+<a name="318"><span class="lineNum"> 318 </span> :<span class="lineCov"> 2811 : prop-&gt;tag = cpu_to_fdt32(FDT_PROP);</span></a>
+<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 2811 : prop-&gt;nameoff = cpu_to_fdt32(nameoff);</span></a>
+<a name="320"><span class="lineNum"> 320 </span> :<span class="lineCov"> 2811 : prop-&gt;len = cpu_to_fdt32(len);</span></a>
+<a name="321"><span class="lineNum"> 321 </span> :<span class="lineCov"> 2811 : *valp = prop-&gt;data;</span></a>
+<a name="322"><span class="lineNum"> 322 </span> :<span class="lineCov"> 2811 : return 0;</span></a>
+<a name="323"><span class="lineNum"> 323 </span> : : }</a>
<a name="324"><span class="lineNum"> 324 </span> : : </a>
-<a name="325"><span class="lineNum"> 325 </span> :<span class="lineCov"> 196 : *allocated = 1;</span></a>
-<a name="326"><span class="lineNum"> 326 </span> : : </a>
-<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 196 : return fdt_add_string_(fdt, s);</span></a>
-<a name="328"><span class="lineNum"> 328 </span> : : }</a>
+<a name="325"><span class="lineNum"> 325 </span> :<span class="lineCov"> 2811 : int fdt_property(void *fdt, const char *name, const void *val, int len)</span></a>
+<a name="326"><span class="lineNum"> 326 </span> : : {</a>
+<a name="327"><span class="lineNum"> 327 </span> : : void *ptr;</a>
+<a name="328"><span class="lineNum"> 328 </span> : : int ret;</a>
<a name="329"><span class="lineNum"> 329 </span> : : </a>
-<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 2785 : int fdt_property_placeholder(void *fdt, const char *name, int len, void **valp)</span></a>
-<a name="331"><span class="lineNum"> 331 </span> : : {</a>
-<a name="332"><span class="lineNum"> 332 </span> : : struct fdt_property *prop;</a>
-<a name="333"><span class="lineNum"> 333 </span> : : int nameoff;</a>
-<a name="334"><span class="lineNum"> 334 </span> : : int allocated;</a>
-<a name="335"><span class="lineNum"> 335 </span> : : </a>
-<a name="336"><span class="lineNum"> 336 </span> :<span class="lineCov"> 2785 : FDT_SW_PROBE_STRUCT(fdt);</span></a>
-<a name="337"><span class="lineNum"> 337 </span> : : </a>
-<a name="338"><span class="lineNum"> 338 </span> : : /* String de-duplication can be slow, _NO_NAME_DEDUP skips it */</a>
-<a name="339"><span class="lineNum"> 339 </span> :<span class="lineCov"> 2785 : if (sw_flags(fdt) &amp; FDT_CREATE_FLAG_NO_NAME_DEDUP) {</span></a>
-<a name="340"><span class="lineNum"> 340 </span> :<span class="lineNoCov"> 0 : allocated = 1;</span></a>
-<a name="341"><span class="lineNum"> 341 </span> :<span class="lineNoCov"> 0 : nameoff = fdt_add_string_(fdt, name);</span></a>
-<a name="342"><span class="lineNum"> 342 </span> : : } else {</a>
-<a name="343"><span class="lineNum"> 343 </span> :<span class="lineCov"> 2785 : nameoff = fdt_find_add_string_(fdt, name, &amp;allocated);</span></a>
-<a name="344"><span class="lineNum"> 344 </span> : : }</a>
-<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 2785 : if (nameoff == 0)</span></a>
-<a name="346"><span class="lineNum"> 346 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
-<a name="347"><span class="lineNum"> 347 </span> : : </a>
-<a name="348"><span class="lineNum"> 348 </span> :<span class="lineCov"> 2785 : prop = fdt_grab_space_(fdt, sizeof(*prop) + FDT_TAGALIGN(len));</span></a>
-<a name="349"><span class="lineNum"> 349 </span> :<span class="lineCov"> 2785 : if (! prop) {</span></a>
-<a name="350"><span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : if (allocated)</span></a>
-<a name="351"><span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : fdt_del_last_string_(fdt, name);</span></a>
-<a name="352"><span class="lineNum"> 352 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
-<a name="353"><span class="lineNum"> 353 </span> : : }</a>
-<a name="354"><span class="lineNum"> 354 </span> : : </a>
-<a name="355"><span class="lineNum"> 355 </span> :<span class="lineCov"> 2785 : prop-&gt;tag = cpu_to_fdt32(FDT_PROP);</span></a>
-<a name="356"><span class="lineNum"> 356 </span> :<span class="lineCov"> 2785 : prop-&gt;nameoff = cpu_to_fdt32(nameoff);</span></a>
-<a name="357"><span class="lineNum"> 357 </span> :<span class="lineCov"> 2785 : prop-&gt;len = cpu_to_fdt32(len);</span></a>
-<a name="358"><span class="lineNum"> 358 </span> :<span class="lineCov"> 2785 : *valp = prop-&gt;data;</span></a>
-<a name="359"><span class="lineNum"> 359 </span> :<span class="lineCov"> 2785 : return 0;</span></a>
-<a name="360"><span class="lineNum"> 360 </span> : : }</a>
-<a name="361"><span class="lineNum"> 361 </span> : : </a>
-<a name="362"><span class="lineNum"> 362 </span> :<span class="lineCov"> 2785 : int fdt_property(void *fdt, const char *name, const void *val, int len)</span></a>
-<a name="363"><span class="lineNum"> 363 </span> : : {</a>
-<a name="364"><span class="lineNum"> 364 </span> : : void *ptr;</a>
-<a name="365"><span class="lineNum"> 365 </span> : : int ret;</a>
+<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 2811 : ret = fdt_property_placeholder(fdt, name, len, &amp;ptr);</span></a>
+<a name="331"><span class="lineNum"> 331 </span> :<span class="lineCov"> 2811 : if (ret)</span></a>
+<a name="332"><span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : return ret;</span></a>
+<a name="333"><span class="lineNum"> 333 </span> :<span class="lineCov"> 2811 : memcpy(ptr, val, len);</span></a>
+<a name="334"><span class="lineNum"> 334 </span> :<span class="lineCov"> 2811 : return 0;</span></a>
+<a name="335"><span class="lineNum"> 335 </span> : : }</a>
+<a name="336"><span class="lineNum"> 336 </span> : : </a>
+<a name="337"><span class="lineNum"> 337 </span> :<span class="lineCov"> 2 : int fdt_finish(void *fdt)</span></a>
+<a name="338"><span class="lineNum"> 338 </span> : : {</a>
+<a name="339"><span class="lineNum"> 339 </span> :<span class="lineCov"> 2 : char *p = (char *)fdt;</span></a>
+<a name="340"><span class="lineNum"> 340 </span> : : fdt32_t *end;</a>
+<a name="341"><span class="lineNum"> 341 </span> : : int oldstroffset, newstroffset;</a>
+<a name="342"><span class="lineNum"> 342 </span> : : uint32_t tag;</a>
+<a name="343"><span class="lineNum"> 343 </span> : : int offset, nextoffset;</a>
+<a name="344"><span class="lineNum"> 344 </span> : : </a>
+<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 2 : FDT_SW_PROBE_STRUCT(fdt);</span></a>
+<a name="346"><span class="lineNum"> 346 </span> : : </a>
+<a name="347"><span class="lineNum"> 347 </span> : : /* Add terminator */</a>
+<a name="348"><span class="lineNum"> 348 </span> :<span class="lineCov"> 2 : end = fdt_grab_space_(fdt, sizeof(*end));</span></a>
+<a name="349"><span class="lineNum"> 349 </span> :<span class="lineCov"> 2 : if (! end)</span></a>
+<a name="350"><span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
+<a name="351"><span class="lineNum"> 351 </span> :<span class="lineCov"> 2 : *end = cpu_to_fdt32(FDT_END);</span></a>
+<a name="352"><span class="lineNum"> 352 </span> : : </a>
+<a name="353"><span class="lineNum"> 353 </span> : : /* Relocate the string table */</a>
+<a name="354"><span class="lineNum"> 354 </span> :<span class="lineCov"> 2 : oldstroffset = fdt_totalsize(fdt) - fdt_size_dt_strings(fdt);</span></a>
+<a name="355"><span class="lineNum"> 355 </span> :<span class="lineCov"> 2 : newstroffset = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);</span></a>
+<a name="356"><span class="lineNum"> 356 </span> :<span class="lineCov"> 2 : memmove(p + newstroffset, p + oldstroffset, fdt_size_dt_strings(fdt));</span></a>
+<a name="357"><span class="lineNum"> 357 </span> :<span class="lineCov"> 2 : fdt_set_off_dt_strings(fdt, newstroffset);</span></a>
+<a name="358"><span class="lineNum"> 358 </span> : : </a>
+<a name="359"><span class="lineNum"> 359 </span> : : /* Walk the structure, correcting string offsets */</a>
+<a name="360"><span class="lineNum"> 360 </span> :<span class="lineCov"> 2 : offset = 0;</span></a>
+<a name="361"><span class="lineNum"> 361 </span> :<span class="lineCov"> 3285 : while ((tag = fdt_next_tag(fdt, offset, &amp;nextoffset)) != FDT_END) {</span></a>
+<a name="362"><span class="lineNum"> 362 </span> :<span class="lineCov"> 3283 : if (tag == FDT_PROP) {</span></a>
+<a name="363"><span class="lineNum"> 363 </span> : : struct fdt_property *prop =</a>
+<a name="364"><span class="lineNum"> 364 </span> :<span class="lineCov"> 2811 : fdt_offset_ptr_w_(fdt, offset);</span></a>
+<a name="365"><span class="lineNum"> 365 </span> : : int nameoff;</a>
<a name="366"><span class="lineNum"> 366 </span> : : </a>
-<a name="367"><span class="lineNum"> 367 </span> :<span class="lineCov"> 2785 : ret = fdt_property_placeholder(fdt, name, len, &amp;ptr);</span></a>
-<a name="368"><span class="lineNum"> 368 </span> :<span class="lineCov"> 2785 : if (ret)</span></a>
-<a name="369"><span class="lineNum"> 369 </span> :<span class="lineNoCov"> 0 : return ret;</span></a>
-<a name="370"><span class="lineNum"> 370 </span> :<span class="lineCov"> 2785 : memcpy(ptr, val, len);</span></a>
-<a name="371"><span class="lineNum"> 371 </span> :<span class="lineCov"> 2785 : return 0;</span></a>
-<a name="372"><span class="lineNum"> 372 </span> : : }</a>
-<a name="373"><span class="lineNum"> 373 </span> : : </a>
-<a name="374"><span class="lineNum"> 374 </span> :<span class="lineCov"> 2 : int fdt_finish(void *fdt)</span></a>
-<a name="375"><span class="lineNum"> 375 </span> : : {</a>
-<a name="376"><span class="lineNum"> 376 </span> :<span class="lineCov"> 2 : char *p = (char *)fdt;</span></a>
-<a name="377"><span class="lineNum"> 377 </span> : : fdt32_t *end;</a>
-<a name="378"><span class="lineNum"> 378 </span> : : int oldstroffset, newstroffset;</a>
-<a name="379"><span class="lineNum"> 379 </span> : : uint32_t tag;</a>
-<a name="380"><span class="lineNum"> 380 </span> : : int offset, nextoffset;</a>
-<a name="381"><span class="lineNum"> 381 </span> : : </a>
-<a name="382"><span class="lineNum"> 382 </span> :<span class="lineCov"> 2 : FDT_SW_PROBE_STRUCT(fdt);</span></a>
-<a name="383"><span class="lineNum"> 383 </span> : : </a>
-<a name="384"><span class="lineNum"> 384 </span> : : /* Add terminator */</a>
-<a name="385"><span class="lineNum"> 385 </span> :<span class="lineCov"> 2 : end = fdt_grab_space_(fdt, sizeof(*end));</span></a>
-<a name="386"><span class="lineNum"> 386 </span> :<span class="lineCov"> 2 : if (! end)</span></a>
-<a name="387"><span class="lineNum"> 387 </span> :<span class="lineNoCov"> 0 : return -FDT_ERR_NOSPACE;</span></a>
-<a name="388"><span class="lineNum"> 388 </span> :<span class="lineCov"> 2 : *end = cpu_to_fdt32(FDT_END);</span></a>
-<a name="389"><span class="lineNum"> 389 </span> : : </a>
-<a name="390"><span class="lineNum"> 390 </span> : : /* Relocate the string table */</a>
-<a name="391"><span class="lineNum"> 391 </span> :<span class="lineCov"> 2 : oldstroffset = fdt_totalsize(fdt) - fdt_size_dt_strings(fdt);</span></a>
-<a name="392"><span class="lineNum"> 392 </span> :<span class="lineCov"> 2 : newstroffset = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);</span></a>
-<a name="393"><span class="lineNum"> 393 </span> :<span class="lineCov"> 2 : memmove(p + newstroffset, p + oldstroffset, fdt_size_dt_strings(fdt));</span></a>
-<a name="394"><span class="lineNum"> 394 </span> :<span class="lineCov"> 2 : fdt_set_off_dt_strings(fdt, newstroffset);</span></a>
-<a name="395"><span class="lineNum"> 395 </span> : : </a>
-<a name="396"><span class="lineNum"> 396 </span> : : /* Walk the structure, correcting string offsets */</a>
-<a name="397"><span class="lineNum"> 397 </span> :<span class="lineCov"> 2 : offset = 0;</span></a>
-<a name="398"><span class="lineNum"> 398 </span> :<span class="lineCov"> 3259 : while ((tag = fdt_next_tag(fdt, offset, &amp;nextoffset)) != FDT_END) {</span></a>
-<a name="399"><span class="lineNum"> 399 </span> :<span class="lineCov"> 3257 : if (tag == FDT_PROP) {</span></a>
-<a name="400"><span class="lineNum"> 400 </span> : : struct fdt_property *prop =</a>
-<a name="401"><span class="lineNum"> 401 </span> :<span class="lineCov"> 2785 : fdt_offset_ptr_w_(fdt, offset);</span></a>
-<a name="402"><span class="lineNum"> 402 </span> : : int nameoff;</a>
-<a name="403"><span class="lineNum"> 403 </span> : : </a>
-<a name="404"><span class="lineNum"> 404 </span> :<span class="lineCov"> 2785 : nameoff = fdt32_to_cpu(prop-&gt;nameoff);</span></a>
-<a name="405"><span class="lineNum"> 405 </span> :<span class="lineCov"> 2785 : nameoff += fdt_size_dt_strings(fdt);</span></a>
-<a name="406"><span class="lineNum"> 406 </span> :<span class="lineCov"> 2785 : prop-&gt;nameoff = cpu_to_fdt32(nameoff);</span></a>
-<a name="407"><span class="lineNum"> 407 </span> : : }</a>
-<a name="408"><span class="lineNum"> 408 </span> :<span class="lineCov"> 3257 : offset = nextoffset;</span></a>
-<a name="409"><span class="lineNum"> 409 </span> : : }</a>
-<a name="410"><span class="lineNum"> 410 </span> :<span class="lineCov"> 2 : if (nextoffset &lt; 0)</span></a>
-<a name="411"><span class="lineNum"> 411 </span> :<span class="lineNoCov"> 0 : return nextoffset;</span></a>
-<a name="412"><span class="lineNum"> 412 </span> : : </a>
-<a name="413"><span class="lineNum"> 413 </span> : : /* Finally, adjust the header */</a>
-<a name="414"><span class="lineNum"> 414 </span> :<span class="lineCov"> 2 : fdt_set_totalsize(fdt, newstroffset + fdt_size_dt_strings(fdt));</span></a>
-<a name="415"><span class="lineNum"> 415 </span> : : </a>
-<a name="416"><span class="lineNum"> 416 </span> : : /* And fix up fields that were keeping intermediate state. */</a>
-<a name="417"><span class="lineNum"> 417 </span> :<span class="lineCov"> 2 : fdt_set_last_comp_version(fdt, FDT_FIRST_SUPPORTED_VERSION);</span></a>
-<a name="418"><span class="lineNum"> 418 </span> :<span class="lineCov"> 2 : fdt_set_magic(fdt, FDT_MAGIC);</span></a>
-<a name="419"><span class="lineNum"> 419 </span> : : </a>
-<a name="420"><span class="lineNum"> 420 </span> :<span class="lineCov"> 2 : return 0;</span></a>
-<a name="421"><span class="lineNum"> 421 </span> : : }</a>
+<a name="367"><span class="lineNum"> 367 </span> :<span class="lineCov"> 2811 : nameoff = fdt32_to_cpu(prop-&gt;nameoff);</span></a>
+<a name="368"><span class="lineNum"> 368 </span> :<span class="lineCov"> 2811 : nameoff += fdt_size_dt_strings(fdt);</span></a>
+<a name="369"><span class="lineNum"> 369 </span> :<span class="lineCov"> 2811 : prop-&gt;nameoff = cpu_to_fdt32(nameoff);</span></a>
+<a name="370"><span class="lineNum"> 370 </span> : : }</a>
+<a name="371"><span class="lineNum"> 371 </span> :<span class="lineCov"> 3283 : offset = nextoffset;</span></a>
+<a name="372"><span class="lineNum"> 372 </span> : : }</a>
+<a name="373"><span class="lineNum"> 373 </span> :<span class="lineCov"> 2 : if (nextoffset &lt; 0)</span></a>
+<a name="374"><span class="lineNum"> 374 </span> :<span class="lineNoCov"> 0 : return nextoffset;</span></a>
+<a name="375"><span class="lineNum"> 375 </span> : : </a>
+<a name="376"><span class="lineNum"> 376 </span> : : /* Finally, adjust the header */</a>
+<a name="377"><span class="lineNum"> 377 </span> :<span class="lineCov"> 2 : fdt_set_totalsize(fdt, newstroffset + fdt_size_dt_strings(fdt));</span></a>
+<a name="378"><span class="lineNum"> 378 </span> : : </a>
+<a name="379"><span class="lineNum"> 379 </span> : : /* And fix up fields that were keeping intermediate state. */</a>
+<a name="380"><span class="lineNum"> 380 </span> :<span class="lineCov"> 2 : fdt_set_last_comp_version(fdt, FDT_LAST_COMPATIBLE_VERSION);</span></a>
+<a name="381"><span class="lineNum"> 381 </span> :<span class="lineCov"> 2 : fdt_set_magic(fdt, FDT_MAGIC);</span></a>
+<a name="382"><span class="lineNum"> 382 </span> : : </a>
+<a name="383"><span class="lineNum"> 383 </span> :<span class="lineCov"> 2 : return 0;</span></a>
+<a name="384"><span class="lineNum"> 384 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/libfdt/index-sort-b.html b/coverage-report/libfdt/index-sort-b.html
index 5da8282..6555c60 100644
--- a/coverage-report/libfdt/index-sort-b.html
+++ b/coverage-report/libfdt/index-sort-b.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">262</td>
- <td class="headerCovTableEntry">845</td>
- <td class="headerCovTableEntryLo">31.0 %</td>
+ <td class="headerCovTableEntry">283</td>
+ <td class="headerCovTableEntry">843</td>
+ <td class="headerCovTableEntryLo">33.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">46</td>
- <td class="headerCovTableEntry">95</td>
- <td class="headerCovTableEntryLo">48.4 %</td>
+ <td class="headerCovTableEntry">47</td>
+ <td class="headerCovTableEntry">96</td>
+ <td class="headerCovTableEntryLo">49.0 %</td>
</tr>
<tr>
<td></td>
@@ -82,86 +82,86 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="fdt.c.gcov.html">fdt.c</a></td>
+ <td class="coverFile"><a href="libfdt_internal.h.gcov.html">libfdt_internal.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=48 height=10 alt="48.4%"><img src="../snow.png" width=52 height=10 alt="48.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=43 height=10 alt="42.9%"><img src="../snow.png" width=57 height=10 alt="42.9%"></td></tr></table>
</td>
- <td class="coverPerLo">48.4&nbsp;%</td>
- <td class="coverNumLo">77 / 159</td>
- <td class="coverPerLo">64.3&nbsp;%</td>
- <td class="coverNumLo">9 / 14</td>
+ <td class="coverPerLo">42.9&nbsp;%</td>
+ <td class="coverNumLo">6 / 14</td>
+ <td class="coverPerLo">50.0&nbsp;%</td>
+ <td class="coverNumLo">3 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libfdt.h.gcov.html">libfdt.h</a></td>
+ <td class="coverFile"><a href="libfdt_env.h.gcov.html">libfdt_env.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=69 height=10 alt="68.8%"><img src="../snow.png" width=31 height=10 alt="68.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerLo">68.8&nbsp;%</td>
- <td class="coverNumLo">22 / 32</td>
- <td class="coverPerHi">92.9&nbsp;%</td>
- <td class="coverNumHi">13 / 14</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">8 / 8</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="fdt_ro.c.gcov.html">fdt_ro.c</a></td>
+ <td class="coverFile"><a href="fdt_strerror.c.gcov.html">fdt_strerror.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=6 height=10 alt="5.9%"><img src="../snow.png" width=94 height=10 alt="5.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
</td>
- <td class="coverPerLo">5.9&nbsp;%</td>
- <td class="coverNumLo">27 / 455</td>
- <td class="coverPerLo">7.3&nbsp;%</td>
- <td class="coverNumLo">3 / 41</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 10</td>
+ <td class="coverPerLo">0.0&nbsp;%</td>
+ <td class="coverNumLo">0 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libfdt_env.h.gcov.html">libfdt_env.h</a></td>
+ <td class="coverFile"><a href="fdt_sw.c.gcov.html">fdt_sw.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="70.8%"><img src="../snow.png" width=29 height=10 alt="70.8%"></td></tr></table>
</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">8 / 8</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">4 / 4</td>
+ <td class="coverPerLo">70.8&nbsp;%</td>
+ <td class="coverNumLo">126 / 178</td>
+ <td class="coverPerMed">83.3&nbsp;%</td>
+ <td class="coverNumMed">15 / 18</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libfdt_internal.h.gcov.html">libfdt_internal.h</a></td>
+ <td class="coverFile"><a href="fdt_ro.c.gcov.html">fdt_ro.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=50 height=10 alt="50.0%"><img src="../snow.png" width=50 height=10 alt="50.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=7 height=10 alt="6.8%"><img src="../snow.png" width=93 height=10 alt="6.8%"></td></tr></table>
</td>
- <td class="coverPerLo">50.0&nbsp;%</td>
- <td class="coverNumLo">4 / 8</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">2 / 3</td>
+ <td class="coverPerLo">6.8&nbsp;%</td>
+ <td class="coverNumLo">29 / 427</td>
+ <td class="coverPerLo">7.5&nbsp;%</td>
+ <td class="coverNumLo">3 / 40</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="fdt_strerror.c.gcov.html">fdt_strerror.c</a></td>
+ <td class="coverFile"><a href="fdt.c.gcov.html">fdt.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=51 height=10 alt="50.5%"><img src="../snow.png" width=49 height=10 alt="50.5%"></td></tr></table>
</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 10</td>
- <td class="coverPerLo">0.0&nbsp;%</td>
- <td class="coverNumLo">0 / 1</td>
+ <td class="coverPerLo">50.5&nbsp;%</td>
+ <td class="coverNumLo">94 / 186</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">10 / 15</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="fdt_sw.c.gcov.html">fdt_sw.c</a></td>
+ <td class="coverFile"><a href="libfdt.h.gcov.html">libfdt.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=72 height=10 alt="71.7%"><img src="../snow.png" width=28 height=10 alt="71.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerLo">71.7&nbsp;%</td>
- <td class="coverNumLo">124 / 173</td>
- <td class="coverPerMed">83.3&nbsp;%</td>
- <td class="coverNumMed">15 / 18</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">20 / 20</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">12 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/libfdt/index-sort-f.html b/coverage-report/libfdt/index-sort-f.html
index 84b43c7..b85c2ae 100644
--- a/coverage-report/libfdt/index-sort-f.html
+++ b/coverage-report/libfdt/index-sort-f.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">262</td>
- <td class="headerCovTableEntry">845</td>
- <td class="headerCovTableEntryLo">31.0 %</td>
+ <td class="headerCovTableEntry">283</td>
+ <td class="headerCovTableEntry">843</td>
+ <td class="headerCovTableEntryLo">33.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">46</td>
- <td class="headerCovTableEntry">95</td>
- <td class="headerCovTableEntryLo">48.4 %</td>
+ <td class="headerCovTableEntry">47</td>
+ <td class="headerCovTableEntry">96</td>
+ <td class="headerCovTableEntryLo">49.0 %</td>
</tr>
<tr>
<td></td>
@@ -96,72 +96,72 @@
<tr>
<td class="coverFile"><a href="fdt_ro.c.gcov.html">fdt_ro.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=6 height=10 alt="5.9%"><img src="../snow.png" width=94 height=10 alt="5.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=7 height=10 alt="6.8%"><img src="../snow.png" width=93 height=10 alt="6.8%"></td></tr></table>
</td>
- <td class="coverPerLo">5.9&nbsp;%</td>
- <td class="coverNumLo">27 / 455</td>
- <td class="coverPerLo">7.3&nbsp;%</td>
- <td class="coverNumLo">3 / 41</td>
+ <td class="coverPerLo">6.8&nbsp;%</td>
+ <td class="coverNumLo">29 / 427</td>
+ <td class="coverPerLo">7.5&nbsp;%</td>
+ <td class="coverNumLo">3 / 40</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="fdt.c.gcov.html">fdt.c</a></td>
+ <td class="coverFile"><a href="libfdt_internal.h.gcov.html">libfdt_internal.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=48 height=10 alt="48.4%"><img src="../snow.png" width=52 height=10 alt="48.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=43 height=10 alt="42.9%"><img src="../snow.png" width=57 height=10 alt="42.9%"></td></tr></table>
</td>
- <td class="coverPerLo">48.4&nbsp;%</td>
- <td class="coverNumLo">77 / 159</td>
- <td class="coverPerLo">64.3&nbsp;%</td>
- <td class="coverNumLo">9 / 14</td>
+ <td class="coverPerLo">42.9&nbsp;%</td>
+ <td class="coverNumLo">6 / 14</td>
+ <td class="coverPerLo">50.0&nbsp;%</td>
+ <td class="coverNumLo">3 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libfdt_internal.h.gcov.html">libfdt_internal.h</a></td>
+ <td class="coverFile"><a href="fdt.c.gcov.html">fdt.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=50 height=10 alt="50.0%"><img src="../snow.png" width=50 height=10 alt="50.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=51 height=10 alt="50.5%"><img src="../snow.png" width=49 height=10 alt="50.5%"></td></tr></table>
</td>
- <td class="coverPerLo">50.0&nbsp;%</td>
- <td class="coverNumLo">4 / 8</td>
+ <td class="coverPerLo">50.5&nbsp;%</td>
+ <td class="coverNumLo">94 / 186</td>
<td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">2 / 3</td>
+ <td class="coverNumLo">10 / 15</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="fdt_sw.c.gcov.html">fdt_sw.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=72 height=10 alt="71.7%"><img src="../snow.png" width=28 height=10 alt="71.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="70.8%"><img src="../snow.png" width=29 height=10 alt="70.8%"></td></tr></table>
</td>
- <td class="coverPerLo">71.7&nbsp;%</td>
- <td class="coverNumLo">124 / 173</td>
+ <td class="coverPerLo">70.8&nbsp;%</td>
+ <td class="coverNumLo">126 / 178</td>
<td class="coverPerMed">83.3&nbsp;%</td>
<td class="coverNumMed">15 / 18</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libfdt.h.gcov.html">libfdt.h</a></td>
+ <td class="coverFile"><a href="libfdt_env.h.gcov.html">libfdt_env.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=69 height=10 alt="68.8%"><img src="../snow.png" width=31 height=10 alt="68.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerLo">68.8&nbsp;%</td>
- <td class="coverNumLo">22 / 32</td>
- <td class="coverPerHi">92.9&nbsp;%</td>
- <td class="coverNumHi">13 / 14</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">8 / 8</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libfdt_env.h.gcov.html">libfdt_env.h</a></td>
+ <td class="coverFile"><a href="libfdt.h.gcov.html">libfdt.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">8 / 8</td>
+ <td class="coverNumHi">20 / 20</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">4 / 4</td>
+ <td class="coverNumHi">12 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/libfdt/index-sort-l.html b/coverage-report/libfdt/index-sort-l.html
index c4a3081..48e3c6e 100644
--- a/coverage-report/libfdt/index-sort-l.html
+++ b/coverage-report/libfdt/index-sort-l.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">262</td>
- <td class="headerCovTableEntry">845</td>
- <td class="headerCovTableEntryLo">31.0 %</td>
+ <td class="headerCovTableEntry">283</td>
+ <td class="headerCovTableEntry">843</td>
+ <td class="headerCovTableEntryLo">33.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">46</td>
- <td class="headerCovTableEntry">95</td>
- <td class="headerCovTableEntryLo">48.4 %</td>
+ <td class="headerCovTableEntry">47</td>
+ <td class="headerCovTableEntry">96</td>
+ <td class="headerCovTableEntryLo">49.0 %</td>
</tr>
<tr>
<td></td>
@@ -96,58 +96,46 @@
<tr>
<td class="coverFile"><a href="fdt_ro.c.gcov.html">fdt_ro.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=6 height=10 alt="5.9%"><img src="../snow.png" width=94 height=10 alt="5.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=7 height=10 alt="6.8%"><img src="../snow.png" width=93 height=10 alt="6.8%"></td></tr></table>
</td>
- <td class="coverPerLo">5.9&nbsp;%</td>
- <td class="coverNumLo">27 / 455</td>
- <td class="coverPerLo">7.3&nbsp;%</td>
- <td class="coverNumLo">3 / 41</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
- <td class="coverFile"><a href="fdt.c.gcov.html">fdt.c</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=48 height=10 alt="48.4%"><img src="../snow.png" width=52 height=10 alt="48.4%"></td></tr></table>
- </td>
- <td class="coverPerLo">48.4&nbsp;%</td>
- <td class="coverNumLo">77 / 159</td>
- <td class="coverPerLo">64.3&nbsp;%</td>
- <td class="coverNumLo">9 / 14</td>
+ <td class="coverPerLo">6.8&nbsp;%</td>
+ <td class="coverNumLo">29 / 427</td>
+ <td class="coverPerLo">7.5&nbsp;%</td>
+ <td class="coverNumLo">3 / 40</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libfdt_internal.h.gcov.html">libfdt_internal.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=50 height=10 alt="50.0%"><img src="../snow.png" width=50 height=10 alt="50.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=43 height=10 alt="42.9%"><img src="../snow.png" width=57 height=10 alt="42.9%"></td></tr></table>
</td>
+ <td class="coverPerLo">42.9&nbsp;%</td>
+ <td class="coverNumLo">6 / 14</td>
<td class="coverPerLo">50.0&nbsp;%</td>
- <td class="coverNumLo">4 / 8</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">2 / 3</td>
+ <td class="coverNumLo">3 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="libfdt.h.gcov.html">libfdt.h</a></td>
+ <td class="coverFile"><a href="fdt.c.gcov.html">fdt.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=69 height=10 alt="68.8%"><img src="../snow.png" width=31 height=10 alt="68.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=51 height=10 alt="50.5%"><img src="../snow.png" width=49 height=10 alt="50.5%"></td></tr></table>
</td>
- <td class="coverPerLo">68.8&nbsp;%</td>
- <td class="coverNumLo">22 / 32</td>
- <td class="coverPerHi">92.9&nbsp;%</td>
- <td class="coverNumHi">13 / 14</td>
+ <td class="coverPerLo">50.5&nbsp;%</td>
+ <td class="coverNumLo">94 / 186</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">10 / 15</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="fdt_sw.c.gcov.html">fdt_sw.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=72 height=10 alt="71.7%"><img src="../snow.png" width=28 height=10 alt="71.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="70.8%"><img src="../snow.png" width=29 height=10 alt="70.8%"></td></tr></table>
</td>
- <td class="coverPerLo">71.7&nbsp;%</td>
- <td class="coverNumLo">124 / 173</td>
+ <td class="coverPerLo">70.8&nbsp;%</td>
+ <td class="coverNumLo">126 / 178</td>
<td class="coverPerMed">83.3&nbsp;%</td>
<td class="coverNumMed">15 / 18</td>
<td class="coverPerHi">-</td>
@@ -165,6 +153,18 @@
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
+ <tr>
+ <td class="coverFile"><a href="libfdt.h.gcov.html">libfdt.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">20 / 20</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">12 / 12</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
</table>
</center>
<br>
diff --git a/coverage-report/libfdt/index.html b/coverage-report/libfdt/index.html
index 9c81267..9245f85 100644
--- a/coverage-report/libfdt/index.html
+++ b/coverage-report/libfdt/index.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">262</td>
- <td class="headerCovTableEntry">845</td>
- <td class="headerCovTableEntryLo">31.0 %</td>
+ <td class="headerCovTableEntry">283</td>
+ <td class="headerCovTableEntry">843</td>
+ <td class="headerCovTableEntryLo">33.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">46</td>
- <td class="headerCovTableEntry">95</td>
- <td class="headerCovTableEntryLo">48.4 %</td>
+ <td class="headerCovTableEntry">47</td>
+ <td class="headerCovTableEntry">96</td>
+ <td class="headerCovTableEntryLo">49.0 %</td>
</tr>
<tr>
<td></td>
@@ -84,24 +84,24 @@
<tr>
<td class="coverFile"><a href="fdt.c.gcov.html">fdt.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=48 height=10 alt="48.4%"><img src="../snow.png" width=52 height=10 alt="48.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=51 height=10 alt="50.5%"><img src="../snow.png" width=49 height=10 alt="50.5%"></td></tr></table>
</td>
- <td class="coverPerLo">48.4&nbsp;%</td>
- <td class="coverNumLo">77 / 159</td>
- <td class="coverPerLo">64.3&nbsp;%</td>
- <td class="coverNumLo">9 / 14</td>
+ <td class="coverPerLo">50.5&nbsp;%</td>
+ <td class="coverNumLo">94 / 186</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">10 / 15</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="fdt_ro.c.gcov.html">fdt_ro.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=6 height=10 alt="5.9%"><img src="../snow.png" width=94 height=10 alt="5.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=7 height=10 alt="6.8%"><img src="../snow.png" width=93 height=10 alt="6.8%"></td></tr></table>
</td>
- <td class="coverPerLo">5.9&nbsp;%</td>
- <td class="coverNumLo">27 / 455</td>
- <td class="coverPerLo">7.3&nbsp;%</td>
- <td class="coverNumLo">3 / 41</td>
+ <td class="coverPerLo">6.8&nbsp;%</td>
+ <td class="coverNumLo">29 / 427</td>
+ <td class="coverPerLo">7.5&nbsp;%</td>
+ <td class="coverNumLo">3 / 40</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -120,10 +120,10 @@
<tr>
<td class="coverFile"><a href="fdt_sw.c.gcov.html">fdt_sw.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=72 height=10 alt="71.7%"><img src="../snow.png" width=28 height=10 alt="71.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="70.8%"><img src="../snow.png" width=29 height=10 alt="70.8%"></td></tr></table>
</td>
- <td class="coverPerLo">71.7&nbsp;%</td>
- <td class="coverNumLo">124 / 173</td>
+ <td class="coverPerLo">70.8&nbsp;%</td>
+ <td class="coverNumLo">126 / 178</td>
<td class="coverPerMed">83.3&nbsp;%</td>
<td class="coverNumMed">15 / 18</td>
<td class="coverPerHi">-</td>
@@ -132,12 +132,12 @@
<tr>
<td class="coverFile"><a href="libfdt.h.gcov.html">libfdt.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=69 height=10 alt="68.8%"><img src="../snow.png" width=31 height=10 alt="68.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerLo">68.8&nbsp;%</td>
- <td class="coverNumLo">22 / 32</td>
- <td class="coverPerHi">92.9&nbsp;%</td>
- <td class="coverNumHi">13 / 14</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">20 / 20</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">12 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -156,12 +156,12 @@
<tr>
<td class="coverFile"><a href="libfdt_internal.h.gcov.html">libfdt_internal.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=50 height=10 alt="50.0%"><img src="../snow.png" width=50 height=10 alt="50.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=43 height=10 alt="42.9%"><img src="../snow.png" width=57 height=10 alt="42.9%"></td></tr></table>
</td>
+ <td class="coverPerLo">42.9&nbsp;%</td>
+ <td class="coverNumLo">6 / 14</td>
<td class="coverPerLo">50.0&nbsp;%</td>
- <td class="coverNumLo">4 / 8</td>
- <td class="coverPerLo">66.7&nbsp;%</td>
- <td class="coverNumLo">2 / 3</td>
+ <td class="coverNumLo">3 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/libfdt/libfdt.h.func-sort-c.html b/coverage-report/libfdt/libfdt.h.func-sort-c.html
index e47273a..bd1e722 100644
--- a/coverage-report/libfdt/libfdt.h.func-sort-c.html
+++ b/coverage-report/libfdt/libfdt.h.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">22</td>
- <td class="headerCovTableEntry">32</td>
- <td class="headerCovTableEntryLo">68.8 %</td>
+ <td class="headerCovTableEntry">20</td>
+ <td class="headerCovTableEntry">20</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntry">14</td>
- <td class="headerCovTableEntryHi">92.9 %</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td></td>
@@ -69,60 +69,52 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#190">fdt64_ld</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#300">fdt_set_off_mem_rsvmap</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#268">fdt_set_off_mem_rsvmap</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#301">fdt_set_version</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#269">fdt_set_version</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#302">fdt_set_last_comp_version</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#270">fdt_set_last_comp_version</a></td>
<td class="coverFnHi">4</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#296">fdt_set_magic</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#264">fdt_set_magic</a></td>
<td class="coverFnHi">4</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#297">fdt_set_totalsize</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#265">fdt_set_totalsize</a></td>
<td class="coverFnHi">4</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#299">fdt_set_off_dt_strings</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#267">fdt_set_off_dt_strings</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#298">fdt_set_off_dt_struct</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#266">fdt_set_off_dt_struct</a></td>
<td class="coverFnHi">10</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#313">fdt_header_size</a></td>
- <td class="coverFnHi">11</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#304">fdt_set_size_dt_strings</a></td>
- <td class="coverFnHi">196</td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#272">fdt_set_size_dt_strings</a></td>
+ <td class="coverFnHi">198</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#1490">fdt_property_cell</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#1483">fdt_property_cell</a></td>
<td class="coverFnHi">236</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#1478">fdt_property_u32</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#1471">fdt_property_u32</a></td>
<td class="coverFnHi">236</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#305">fdt_set_size_dt_struct</a></td>
- <td class="coverFnHi">3259</td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#273">fdt_set_size_dt_struct</a></td>
+ <td class="coverFnHi">3285</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#170">fdt32_ld</a></td>
- <td class="coverFnHi">118942</td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#139">fdt32_ld</a></td>
+ <td class="coverFnHi">119701</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libfdt/libfdt.h.func.html b/coverage-report/libfdt/libfdt.h.func.html
index bc6deeb..4960793 100644
--- a/coverage-report/libfdt/libfdt.h.func.html
+++ b/coverage-report/libfdt/libfdt.h.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">22</td>
- <td class="headerCovTableEntry">32</td>
- <td class="headerCovTableEntryLo">68.8 %</td>
+ <td class="headerCovTableEntry">20</td>
+ <td class="headerCovTableEntry">20</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntry">14</td>
- <td class="headerCovTableEntryHi">92.9 %</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td></td>
@@ -69,59 +69,51 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="libfdt.h.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#170">fdt32_ld</a></td>
- <td class="coverFnHi">118942</td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#139">fdt32_ld</a></td>
+ <td class="coverFnHi">119701</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#190">fdt64_ld</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#313">fdt_header_size</a></td>
- <td class="coverFnHi">11</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#1490">fdt_property_cell</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#1483">fdt_property_cell</a></td>
<td class="coverFnHi">236</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#1478">fdt_property_u32</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#1471">fdt_property_u32</a></td>
<td class="coverFnHi">236</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#302">fdt_set_last_comp_version</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#270">fdt_set_last_comp_version</a></td>
<td class="coverFnHi">4</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#296">fdt_set_magic</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#264">fdt_set_magic</a></td>
<td class="coverFnHi">4</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#299">fdt_set_off_dt_strings</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#267">fdt_set_off_dt_strings</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#298">fdt_set_off_dt_struct</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#266">fdt_set_off_dt_struct</a></td>
<td class="coverFnHi">10</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#300">fdt_set_off_mem_rsvmap</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#268">fdt_set_off_mem_rsvmap</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#304">fdt_set_size_dt_strings</a></td>
- <td class="coverFnHi">196</td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#272">fdt_set_size_dt_strings</a></td>
+ <td class="coverFnHi">198</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#305">fdt_set_size_dt_struct</a></td>
- <td class="coverFnHi">3259</td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#273">fdt_set_size_dt_struct</a></td>
+ <td class="coverFnHi">3285</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#297">fdt_set_totalsize</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#265">fdt_set_totalsize</a></td>
<td class="coverFnHi">4</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt.h.gcov.html#301">fdt_set_version</a></td>
+ <td class="coverFn"><a href="libfdt.h.gcov.html#269">fdt_set_version</a></td>
<td class="coverFnHi">2</td>
</tr>
</table>
diff --git a/coverage-report/libfdt/libfdt.h.gcov.html b/coverage-report/libfdt/libfdt.h.gcov.html
index 6de54f2..7a95771 100644
--- a/coverage-report/libfdt/libfdt.h.gcov.html
+++ b/coverage-report/libfdt/libfdt.h.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">22</td>
- <td class="headerCovTableEntry">32</td>
- <td class="headerCovTableEntryLo">68.8 %</td>
+ <td class="headerCovTableEntry">20</td>
+ <td class="headerCovTableEntry">20</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntry">14</td>
- <td class="headerCovTableEntryHi">92.9 %</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td></td>
@@ -69,1741 +69,1741 @@
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
-<a name="1"><span class="lineNum"> 1 </span> : : #ifndef LIBFDT_H</a>
-<a name="2"><span class="lineNum"> 2 </span> : : #define LIBFDT_H</a>
-<a name="3"><span class="lineNum"> 3 </span> : : /*</a>
-<a name="4"><span class="lineNum"> 4 </span> : : * libfdt - Flat Device Tree manipulation</a>
-<a name="5"><span class="lineNum"> 5 </span> : : * Copyright (C) 2006 David Gibson, IBM Corporation.</a>
-<a name="6"><span class="lineNum"> 6 </span> : : *</a>
-<a name="7"><span class="lineNum"> 7 </span> : : * libfdt is dual licensed: you can use it either under the terms of</a>
-<a name="8"><span class="lineNum"> 8 </span> : : * the GPL, or the BSD license, at your option.</a>
-<a name="9"><span class="lineNum"> 9 </span> : : *</a>
-<a name="10"><span class="lineNum"> 10 </span> : : * a) This library is free software; you can redistribute it and/or</a>
-<a name="11"><span class="lineNum"> 11 </span> : : * modify it under the terms of the GNU General Public License as</a>
-<a name="12"><span class="lineNum"> 12 </span> : : * published by the Free Software Foundation; either version 2 of the</a>
-<a name="13"><span class="lineNum"> 13 </span> : : * License, or (at your option) any later version.</a>
-<a name="14"><span class="lineNum"> 14 </span> : : *</a>
-<a name="15"><span class="lineNum"> 15 </span> : : * This library is distributed in the hope that it will be useful,</a>
-<a name="16"><span class="lineNum"> 16 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of</a>
-<a name="17"><span class="lineNum"> 17 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</a>
-<a name="18"><span class="lineNum"> 18 </span> : : * GNU General Public License for more details.</a>
-<a name="19"><span class="lineNum"> 19 </span> : : *</a>
-<a name="20"><span class="lineNum"> 20 </span> : : * You should have received a copy of the GNU General Public</a>
-<a name="21"><span class="lineNum"> 21 </span> : : * License along with this library; if not, write to the Free</a>
-<a name="22"><span class="lineNum"> 22 </span> : : * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,</a>
-<a name="23"><span class="lineNum"> 23 </span> : : * MA 02110-1301 USA</a>
-<a name="24"><span class="lineNum"> 24 </span> : : *</a>
-<a name="25"><span class="lineNum"> 25 </span> : : * Alternatively,</a>
-<a name="26"><span class="lineNum"> 26 </span> : : *</a>
-<a name="27"><span class="lineNum"> 27 </span> : : * b) Redistribution and use in source and binary forms, with or</a>
-<a name="28"><span class="lineNum"> 28 </span> : : * without modification, are permitted provided that the following</a>
-<a name="29"><span class="lineNum"> 29 </span> : : * conditions are met:</a>
-<a name="30"><span class="lineNum"> 30 </span> : : *</a>
-<a name="31"><span class="lineNum"> 31 </span> : : * 1. Redistributions of source code must retain the above</a>
-<a name="32"><span class="lineNum"> 32 </span> : : * copyright notice, this list of conditions and the following</a>
-<a name="33"><span class="lineNum"> 33 </span> : : * disclaimer.</a>
-<a name="34"><span class="lineNum"> 34 </span> : : * 2. Redistributions in binary form must reproduce the above</a>
-<a name="35"><span class="lineNum"> 35 </span> : : * copyright notice, this list of conditions and the following</a>
-<a name="36"><span class="lineNum"> 36 </span> : : * disclaimer in the documentation and/or other materials</a>
-<a name="37"><span class="lineNum"> 37 </span> : : * provided with the distribution.</a>
-<a name="38"><span class="lineNum"> 38 </span> : : *</a>
-<a name="39"><span class="lineNum"> 39 </span> : : * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND</a>
-<a name="40"><span class="lineNum"> 40 </span> : : * CONTRIBUTORS &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES,</a>
-<a name="41"><span class="lineNum"> 41 </span> : : * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</a>
-<a name="42"><span class="lineNum"> 42 </span> : : * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE</a>
-<a name="43"><span class="lineNum"> 43 </span> : : * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR</a>
-<a name="44"><span class="lineNum"> 44 </span> : : * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</a>
-<a name="45"><span class="lineNum"> 45 </span> : : * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT</a>
-<a name="46"><span class="lineNum"> 46 </span> : : * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;</a>
-<a name="47"><span class="lineNum"> 47 </span> : : * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</a>
-<a name="48"><span class="lineNum"> 48 </span> : : * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</a>
-<a name="49"><span class="lineNum"> 49 </span> : : * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR</a>
-<a name="50"><span class="lineNum"> 50 </span> : : * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,</a>
-<a name="51"><span class="lineNum"> 51 </span> : : * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</a>
-<a name="52"><span class="lineNum"> 52 </span> : : */</a>
-<a name="53"><span class="lineNum"> 53 </span> : : </a>
-<a name="54"><span class="lineNum"> 54 </span> : : #include &lt;libfdt_env.h&gt;</a>
-<a name="55"><span class="lineNum"> 55 </span> : : #include &lt;fdt.h&gt;</a>
-<a name="56"><span class="lineNum"> 56 </span> : : </a>
-<a name="57"><span class="lineNum"> 57 </span> : : #define FDT_FIRST_SUPPORTED_VERSION 0x02</a>
-<a name="58"><span class="lineNum"> 58 </span> : : #define FDT_LAST_SUPPORTED_VERSION 0x11</a>
-<a name="59"><span class="lineNum"> 59 </span> : : </a>
-<a name="60"><span class="lineNum"> 60 </span> : : /* Error codes: informative error codes */</a>
-<a name="61"><span class="lineNum"> 61 </span> : : #define FDT_ERR_NOTFOUND 1</a>
-<a name="62"><span class="lineNum"> 62 </span> : : /* FDT_ERR_NOTFOUND: The requested node or property does not exist */</a>
-<a name="63"><span class="lineNum"> 63 </span> : : #define FDT_ERR_EXISTS 2</a>
-<a name="64"><span class="lineNum"> 64 </span> : : /* FDT_ERR_EXISTS: Attempted to create a node or property which</a>
-<a name="65"><span class="lineNum"> 65 </span> : : * already exists */</a>
-<a name="66"><span class="lineNum"> 66 </span> : : #define FDT_ERR_NOSPACE 3</a>
-<a name="67"><span class="lineNum"> 67 </span> : : /* FDT_ERR_NOSPACE: Operation needed to expand the device</a>
-<a name="68"><span class="lineNum"> 68 </span> : : * tree, but its buffer did not have sufficient space to</a>
-<a name="69"><span class="lineNum"> 69 </span> : : * contain the expanded tree. Use fdt_open_into() to move the</a>
-<a name="70"><span class="lineNum"> 70 </span> : : * device tree to a buffer with more space. */</a>
-<a name="71"><span class="lineNum"> 71 </span> : : </a>
-<a name="72"><span class="lineNum"> 72 </span> : : /* Error codes: codes for bad parameters */</a>
-<a name="73"><span class="lineNum"> 73 </span> : : #define FDT_ERR_BADOFFSET 4</a>
-<a name="74"><span class="lineNum"> 74 </span> : : /* FDT_ERR_BADOFFSET: Function was passed a structure block</a>
-<a name="75"><span class="lineNum"> 75 </span> : : * offset which is out-of-bounds, or which points to an</a>
-<a name="76"><span class="lineNum"> 76 </span> : : * unsuitable part of the structure for the operation. */</a>
-<a name="77"><span class="lineNum"> 77 </span> : : #define FDT_ERR_BADPATH 5</a>
-<a name="78"><span class="lineNum"> 78 </span> : : /* FDT_ERR_BADPATH: Function was passed a badly formatted path</a>
-<a name="79"><span class="lineNum"> 79 </span> : : * (e.g. missing a leading / for a function which requires an</a>
-<a name="80"><span class="lineNum"> 80 </span> : : * absolute path) */</a>
-<a name="81"><span class="lineNum"> 81 </span> : : #define FDT_ERR_BADPHANDLE 6</a>
-<a name="82"><span class="lineNum"> 82 </span> : : /* FDT_ERR_BADPHANDLE: Function was passed an invalid phandle.</a>
-<a name="83"><span class="lineNum"> 83 </span> : : * This can be caused either by an invalid phandle property</a>
-<a name="84"><span class="lineNum"> 84 </span> : : * length, or the phandle value was either 0 or -1, which are</a>
-<a name="85"><span class="lineNum"> 85 </span> : : * not permitted. */</a>
-<a name="86"><span class="lineNum"> 86 </span> : : #define FDT_ERR_BADSTATE 7</a>
-<a name="87"><span class="lineNum"> 87 </span> : : /* FDT_ERR_BADSTATE: Function was passed an incomplete device</a>
-<a name="88"><span class="lineNum"> 88 </span> : : * tree created by the sequential-write functions, which is</a>
-<a name="89"><span class="lineNum"> 89 </span> : : * not sufficiently complete for the requested operation. */</a>
-<a name="90"><span class="lineNum"> 90 </span> : : </a>
-<a name="91"><span class="lineNum"> 91 </span> : : /* Error codes: codes for bad device tree blobs */</a>
-<a name="92"><span class="lineNum"> 92 </span> : : #define FDT_ERR_TRUNCATED 8</a>
-<a name="93"><span class="lineNum"> 93 </span> : : /* FDT_ERR_TRUNCATED: FDT or a sub-block is improperly</a>
-<a name="94"><span class="lineNum"> 94 </span> : : * terminated (overflows, goes outside allowed bounds, or</a>
-<a name="95"><span class="lineNum"> 95 </span> : : * isn't properly terminated). */</a>
-<a name="96"><span class="lineNum"> 96 </span> : : #define FDT_ERR_BADMAGIC 9</a>
-<a name="97"><span class="lineNum"> 97 </span> : : /* FDT_ERR_BADMAGIC: Given &quot;device tree&quot; appears not to be a</a>
-<a name="98"><span class="lineNum"> 98 </span> : : * device tree at all - it is missing the flattened device</a>
-<a name="99"><span class="lineNum"> 99 </span> : : * tree magic number. */</a>
-<a name="100"><span class="lineNum"> 100 </span> : : #define FDT_ERR_BADVERSION 10</a>
-<a name="101"><span class="lineNum"> 101 </span> : : /* FDT_ERR_BADVERSION: Given device tree has a version which</a>
-<a name="102"><span class="lineNum"> 102 </span> : : * can't be handled by the requested operation. For</a>
-<a name="103"><span class="lineNum"> 103 </span> : : * read-write functions, this may mean that fdt_open_into() is</a>
-<a name="104"><span class="lineNum"> 104 </span> : : * required to convert the tree to the expected version. */</a>
-<a name="105"><span class="lineNum"> 105 </span> : : #define FDT_ERR_BADSTRUCTURE 11</a>
-<a name="106"><span class="lineNum"> 106 </span> : : /* FDT_ERR_BADSTRUCTURE: Given device tree has a corrupt</a>
-<a name="107"><span class="lineNum"> 107 </span> : : * structure block or other serious error (e.g. misnested</a>
-<a name="108"><span class="lineNum"> 108 </span> : : * nodes, or subnodes preceding properties). */</a>
-<a name="109"><span class="lineNum"> 109 </span> : : #define FDT_ERR_BADLAYOUT 12</a>
-<a name="110"><span class="lineNum"> 110 </span> : : /* FDT_ERR_BADLAYOUT: For read-write functions, the given</a>
-<a name="111"><span class="lineNum"> 111 </span> : : * device tree has it's sub-blocks in an order that the</a>
-<a name="112"><span class="lineNum"> 112 </span> : : * function can't handle (memory reserve map, then structure,</a>
-<a name="113"><span class="lineNum"> 113 </span> : : * then strings). Use fdt_open_into() to reorganize the tree</a>
-<a name="114"><span class="lineNum"> 114 </span> : : * into a form suitable for the read-write operations. */</a>
-<a name="115"><span class="lineNum"> 115 </span> : : </a>
-<a name="116"><span class="lineNum"> 116 </span> : : /* &quot;Can't happen&quot; error indicating a bug in libfdt */</a>
-<a name="117"><span class="lineNum"> 117 </span> : : #define FDT_ERR_INTERNAL 13</a>
-<a name="118"><span class="lineNum"> 118 </span> : : /* FDT_ERR_INTERNAL: libfdt has failed an internal assertion.</a>
-<a name="119"><span class="lineNum"> 119 </span> : : * Should never be returned, if it is, it indicates a bug in</a>
-<a name="120"><span class="lineNum"> 120 </span> : : * libfdt itself. */</a>
-<a name="121"><span class="lineNum"> 121 </span> : : </a>
-<a name="122"><span class="lineNum"> 122 </span> : : /* Errors in device tree content */</a>
-<a name="123"><span class="lineNum"> 123 </span> : : #define FDT_ERR_BADNCELLS 14</a>
-<a name="124"><span class="lineNum"> 124 </span> : : /* FDT_ERR_BADNCELLS: Device tree has a #address-cells, #size-cells</a>
-<a name="125"><span class="lineNum"> 125 </span> : : * or similar property with a bad format or value */</a>
+<a name="1"><span class="lineNum"> 1 </span> : : /* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */</a>
+<a name="2"><span class="lineNum"> 2 </span> : : #ifndef LIBFDT_H</a>
+<a name="3"><span class="lineNum"> 3 </span> : : #define LIBFDT_H</a>
+<a name="4"><span class="lineNum"> 4 </span> : : /*</a>
+<a name="5"><span class="lineNum"> 5 </span> : : * libfdt - Flat Device Tree manipulation</a>
+<a name="6"><span class="lineNum"> 6 </span> : : * Copyright (C) 2006 David Gibson, IBM Corporation.</a>
+<a name="7"><span class="lineNum"> 7 </span> : : */</a>
+<a name="8"><span class="lineNum"> 8 </span> : : </a>
+<a name="9"><span class="lineNum"> 9 </span> : : #include &lt;libfdt_env.h&gt;</a>
+<a name="10"><span class="lineNum"> 10 </span> : : #include &lt;fdt.h&gt;</a>
+<a name="11"><span class="lineNum"> 11 </span> : : </a>
+<a name="12"><span class="lineNum"> 12 </span> : : #ifdef __cplusplus</a>
+<a name="13"><span class="lineNum"> 13 </span> : : extern &quot;C&quot; {</a>
+<a name="14"><span class="lineNum"> 14 </span> : : #endif</a>
+<a name="15"><span class="lineNum"> 15 </span> : : </a>
+<a name="16"><span class="lineNum"> 16 </span> : : #define FDT_FIRST_SUPPORTED_VERSION 0x02</a>
+<a name="17"><span class="lineNum"> 17 </span> : : #define FDT_LAST_COMPATIBLE_VERSION 0x10</a>
+<a name="18"><span class="lineNum"> 18 </span> : : #define FDT_LAST_SUPPORTED_VERSION 0x11</a>
+<a name="19"><span class="lineNum"> 19 </span> : : </a>
+<a name="20"><span class="lineNum"> 20 </span> : : /* Error codes: informative error codes */</a>
+<a name="21"><span class="lineNum"> 21 </span> : : #define FDT_ERR_NOTFOUND 1</a>
+<a name="22"><span class="lineNum"> 22 </span> : : /* FDT_ERR_NOTFOUND: The requested node or property does not exist */</a>
+<a name="23"><span class="lineNum"> 23 </span> : : #define FDT_ERR_EXISTS 2</a>
+<a name="24"><span class="lineNum"> 24 </span> : : /* FDT_ERR_EXISTS: Attempted to create a node or property which</a>
+<a name="25"><span class="lineNum"> 25 </span> : : * already exists */</a>
+<a name="26"><span class="lineNum"> 26 </span> : : #define FDT_ERR_NOSPACE 3</a>
+<a name="27"><span class="lineNum"> 27 </span> : : /* FDT_ERR_NOSPACE: Operation needed to expand the device</a>
+<a name="28"><span class="lineNum"> 28 </span> : : * tree, but its buffer did not have sufficient space to</a>
+<a name="29"><span class="lineNum"> 29 </span> : : * contain the expanded tree. Use fdt_open_into() to move the</a>
+<a name="30"><span class="lineNum"> 30 </span> : : * device tree to a buffer with more space. */</a>
+<a name="31"><span class="lineNum"> 31 </span> : : </a>
+<a name="32"><span class="lineNum"> 32 </span> : : /* Error codes: codes for bad parameters */</a>
+<a name="33"><span class="lineNum"> 33 </span> : : #define FDT_ERR_BADOFFSET 4</a>
+<a name="34"><span class="lineNum"> 34 </span> : : /* FDT_ERR_BADOFFSET: Function was passed a structure block</a>
+<a name="35"><span class="lineNum"> 35 </span> : : * offset which is out-of-bounds, or which points to an</a>
+<a name="36"><span class="lineNum"> 36 </span> : : * unsuitable part of the structure for the operation. */</a>
+<a name="37"><span class="lineNum"> 37 </span> : : #define FDT_ERR_BADPATH 5</a>
+<a name="38"><span class="lineNum"> 38 </span> : : /* FDT_ERR_BADPATH: Function was passed a badly formatted path</a>
+<a name="39"><span class="lineNum"> 39 </span> : : * (e.g. missing a leading / for a function which requires an</a>
+<a name="40"><span class="lineNum"> 40 </span> : : * absolute path) */</a>
+<a name="41"><span class="lineNum"> 41 </span> : : #define FDT_ERR_BADPHANDLE 6</a>
+<a name="42"><span class="lineNum"> 42 </span> : : /* FDT_ERR_BADPHANDLE: Function was passed an invalid phandle.</a>
+<a name="43"><span class="lineNum"> 43 </span> : : * This can be caused either by an invalid phandle property</a>
+<a name="44"><span class="lineNum"> 44 </span> : : * length, or the phandle value was either 0 or -1, which are</a>
+<a name="45"><span class="lineNum"> 45 </span> : : * not permitted. */</a>
+<a name="46"><span class="lineNum"> 46 </span> : : #define FDT_ERR_BADSTATE 7</a>
+<a name="47"><span class="lineNum"> 47 </span> : : /* FDT_ERR_BADSTATE: Function was passed an incomplete device</a>
+<a name="48"><span class="lineNum"> 48 </span> : : * tree created by the sequential-write functions, which is</a>
+<a name="49"><span class="lineNum"> 49 </span> : : * not sufficiently complete for the requested operation. */</a>
+<a name="50"><span class="lineNum"> 50 </span> : : </a>
+<a name="51"><span class="lineNum"> 51 </span> : : /* Error codes: codes for bad device tree blobs */</a>
+<a name="52"><span class="lineNum"> 52 </span> : : #define FDT_ERR_TRUNCATED 8</a>
+<a name="53"><span class="lineNum"> 53 </span> : : /* FDT_ERR_TRUNCATED: FDT or a sub-block is improperly</a>
+<a name="54"><span class="lineNum"> 54 </span> : : * terminated (overflows, goes outside allowed bounds, or</a>
+<a name="55"><span class="lineNum"> 55 </span> : : * isn't properly terminated). */</a>
+<a name="56"><span class="lineNum"> 56 </span> : : #define FDT_ERR_BADMAGIC 9</a>
+<a name="57"><span class="lineNum"> 57 </span> : : /* FDT_ERR_BADMAGIC: Given &quot;device tree&quot; appears not to be a</a>
+<a name="58"><span class="lineNum"> 58 </span> : : * device tree at all - it is missing the flattened device</a>
+<a name="59"><span class="lineNum"> 59 </span> : : * tree magic number. */</a>
+<a name="60"><span class="lineNum"> 60 </span> : : #define FDT_ERR_BADVERSION 10</a>
+<a name="61"><span class="lineNum"> 61 </span> : : /* FDT_ERR_BADVERSION: Given device tree has a version which</a>
+<a name="62"><span class="lineNum"> 62 </span> : : * can't be handled by the requested operation. For</a>
+<a name="63"><span class="lineNum"> 63 </span> : : * read-write functions, this may mean that fdt_open_into() is</a>
+<a name="64"><span class="lineNum"> 64 </span> : : * required to convert the tree to the expected version. */</a>
+<a name="65"><span class="lineNum"> 65 </span> : : #define FDT_ERR_BADSTRUCTURE 11</a>
+<a name="66"><span class="lineNum"> 66 </span> : : /* FDT_ERR_BADSTRUCTURE: Given device tree has a corrupt</a>
+<a name="67"><span class="lineNum"> 67 </span> : : * structure block or other serious error (e.g. misnested</a>
+<a name="68"><span class="lineNum"> 68 </span> : : * nodes, or subnodes preceding properties). */</a>
+<a name="69"><span class="lineNum"> 69 </span> : : #define FDT_ERR_BADLAYOUT 12</a>
+<a name="70"><span class="lineNum"> 70 </span> : : /* FDT_ERR_BADLAYOUT: For read-write functions, the given</a>
+<a name="71"><span class="lineNum"> 71 </span> : : * device tree has it's sub-blocks in an order that the</a>
+<a name="72"><span class="lineNum"> 72 </span> : : * function can't handle (memory reserve map, then structure,</a>
+<a name="73"><span class="lineNum"> 73 </span> : : * then strings). Use fdt_open_into() to reorganize the tree</a>
+<a name="74"><span class="lineNum"> 74 </span> : : * into a form suitable for the read-write operations. */</a>
+<a name="75"><span class="lineNum"> 75 </span> : : </a>
+<a name="76"><span class="lineNum"> 76 </span> : : /* &quot;Can't happen&quot; error indicating a bug in libfdt */</a>
+<a name="77"><span class="lineNum"> 77 </span> : : #define FDT_ERR_INTERNAL 13</a>
+<a name="78"><span class="lineNum"> 78 </span> : : /* FDT_ERR_INTERNAL: libfdt has failed an internal assertion.</a>
+<a name="79"><span class="lineNum"> 79 </span> : : * Should never be returned, if it is, it indicates a bug in</a>
+<a name="80"><span class="lineNum"> 80 </span> : : * libfdt itself. */</a>
+<a name="81"><span class="lineNum"> 81 </span> : : </a>
+<a name="82"><span class="lineNum"> 82 </span> : : /* Errors in device tree content */</a>
+<a name="83"><span class="lineNum"> 83 </span> : : #define FDT_ERR_BADNCELLS 14</a>
+<a name="84"><span class="lineNum"> 84 </span> : : /* FDT_ERR_BADNCELLS: Device tree has a #address-cells, #size-cells</a>
+<a name="85"><span class="lineNum"> 85 </span> : : * or similar property with a bad format or value */</a>
+<a name="86"><span class="lineNum"> 86 </span> : : </a>
+<a name="87"><span class="lineNum"> 87 </span> : : #define FDT_ERR_BADVALUE 15</a>
+<a name="88"><span class="lineNum"> 88 </span> : : /* FDT_ERR_BADVALUE: Device tree has a property with an unexpected</a>
+<a name="89"><span class="lineNum"> 89 </span> : : * value. For example: a property expected to contain a string list</a>
+<a name="90"><span class="lineNum"> 90 </span> : : * is not NUL-terminated within the length of its value. */</a>
+<a name="91"><span class="lineNum"> 91 </span> : : </a>
+<a name="92"><span class="lineNum"> 92 </span> : : #define FDT_ERR_BADOVERLAY 16</a>
+<a name="93"><span class="lineNum"> 93 </span> : : /* FDT_ERR_BADOVERLAY: The device tree overlay, while</a>
+<a name="94"><span class="lineNum"> 94 </span> : : * correctly structured, cannot be applied due to some</a>
+<a name="95"><span class="lineNum"> 95 </span> : : * unexpected or missing value, property or node. */</a>
+<a name="96"><span class="lineNum"> 96 </span> : : </a>
+<a name="97"><span class="lineNum"> 97 </span> : : #define FDT_ERR_NOPHANDLES 17</a>
+<a name="98"><span class="lineNum"> 98 </span> : : /* FDT_ERR_NOPHANDLES: The device tree doesn't have any</a>
+<a name="99"><span class="lineNum"> 99 </span> : : * phandle available anymore without causing an overflow */</a>
+<a name="100"><span class="lineNum"> 100 </span> : : </a>
+<a name="101"><span class="lineNum"> 101 </span> : : #define FDT_ERR_BADFLAGS 18</a>
+<a name="102"><span class="lineNum"> 102 </span> : : /* FDT_ERR_BADFLAGS: The function was passed a flags field that</a>
+<a name="103"><span class="lineNum"> 103 </span> : : * contains invalid flags or an invalid combination of flags. */</a>
+<a name="104"><span class="lineNum"> 104 </span> : : </a>
+<a name="105"><span class="lineNum"> 105 </span> : : #define FDT_ERR_ALIGNMENT 19</a>
+<a name="106"><span class="lineNum"> 106 </span> : : /* FDT_ERR_ALIGNMENT: The device tree base address is not 8-byte</a>
+<a name="107"><span class="lineNum"> 107 </span> : : * aligned. */</a>
+<a name="108"><span class="lineNum"> 108 </span> : : </a>
+<a name="109"><span class="lineNum"> 109 </span> : : #define FDT_ERR_MAX 19</a>
+<a name="110"><span class="lineNum"> 110 </span> : : </a>
+<a name="111"><span class="lineNum"> 111 </span> : : /* constants */</a>
+<a name="112"><span class="lineNum"> 112 </span> : : #define FDT_MAX_PHANDLE 0xfffffffe</a>
+<a name="113"><span class="lineNum"> 113 </span> : : /* Valid values for phandles range from 1 to 2^32-2. */</a>
+<a name="114"><span class="lineNum"> 114 </span> : : </a>
+<a name="115"><span class="lineNum"> 115 </span> : : /**********************************************************************/</a>
+<a name="116"><span class="lineNum"> 116 </span> : : /* Low-level functions (you probably don't need these) */</a>
+<a name="117"><span class="lineNum"> 117 </span> : : /**********************************************************************/</a>
+<a name="118"><span class="lineNum"> 118 </span> : : </a>
+<a name="119"><span class="lineNum"> 119 </span> : : #ifndef SWIG /* This function is not useful in Python */</a>
+<a name="120"><span class="lineNum"> 120 </span> : : const void *fdt_offset_ptr(const void *fdt, int offset, unsigned int checklen);</a>
+<a name="121"><span class="lineNum"> 121 </span> : : #endif</a>
+<a name="122"><span class="lineNum"> 122 </span> : : static inline void *fdt_offset_ptr_w(void *fdt, int offset, int checklen)</a>
+<a name="123"><span class="lineNum"> 123 </span> : : {</a>
+<a name="124"><span class="lineNum"> 124 </span> : : return (void *)(uintptr_t)fdt_offset_ptr(fdt, offset, checklen);</a>
+<a name="125"><span class="lineNum"> 125 </span> : : }</a>
<a name="126"><span class="lineNum"> 126 </span> : : </a>
-<a name="127"><span class="lineNum"> 127 </span> : : #define FDT_ERR_BADVALUE 15</a>
-<a name="128"><span class="lineNum"> 128 </span> : : /* FDT_ERR_BADVALUE: Device tree has a property with an unexpected</a>
-<a name="129"><span class="lineNum"> 129 </span> : : * value. For example: a property expected to contain a string list</a>
-<a name="130"><span class="lineNum"> 130 </span> : : * is not NUL-terminated within the length of its value. */</a>
-<a name="131"><span class="lineNum"> 131 </span> : : </a>
-<a name="132"><span class="lineNum"> 132 </span> : : #define FDT_ERR_BADOVERLAY 16</a>
-<a name="133"><span class="lineNum"> 133 </span> : : /* FDT_ERR_BADOVERLAY: The device tree overlay, while</a>
-<a name="134"><span class="lineNum"> 134 </span> : : * correctly structured, cannot be applied due to some</a>
-<a name="135"><span class="lineNum"> 135 </span> : : * unexpected or missing value, property or node. */</a>
-<a name="136"><span class="lineNum"> 136 </span> : : </a>
-<a name="137"><span class="lineNum"> 137 </span> : : #define FDT_ERR_NOPHANDLES 17</a>
-<a name="138"><span class="lineNum"> 138 </span> : : /* FDT_ERR_NOPHANDLES: The device tree doesn't have any</a>
-<a name="139"><span class="lineNum"> 139 </span> : : * phandle available anymore without causing an overflow */</a>
+<a name="127"><span class="lineNum"> 127 </span> : : uint32_t fdt_next_tag(const void *fdt, int offset, int *nextoffset);</a>
+<a name="128"><span class="lineNum"> 128 </span> : : </a>
+<a name="129"><span class="lineNum"> 129 </span> : : /*</a>
+<a name="130"><span class="lineNum"> 130 </span> : : * External helpers to access words from a device tree blob. They're built</a>
+<a name="131"><span class="lineNum"> 131 </span> : : * to work even with unaligned pointers on platforms (such as ARMv5) that don't</a>
+<a name="132"><span class="lineNum"> 132 </span> : : * like unaligned loads and stores.</a>
+<a name="133"><span class="lineNum"> 133 </span> : : */</a>
+<a name="134"><span class="lineNum"> 134 </span> : : static inline uint16_t fdt16_ld(const fdt16_t *p)</a>
+<a name="135"><span class="lineNum"> 135 </span> : : {</a>
+<a name="136"><span class="lineNum"> 136 </span> : : const uint8_t *bp = (const uint8_t *)p;</a>
+<a name="137"><span class="lineNum"> 137 </span> : : </a>
+<a name="138"><span class="lineNum"> 138 </span> : : return ((uint16_t)bp[0] &lt;&lt; 8) | bp[1];</a>
+<a name="139"><span class="lineNum"> 139 </span> : : }</a>
<a name="140"><span class="lineNum"> 140 </span> : : </a>
-<a name="141"><span class="lineNum"> 141 </span> : : #define FDT_ERR_BADFLAGS 18</a>
-<a name="142"><span class="lineNum"> 142 </span> : : /* FDT_ERR_BADFLAGS: The function was passed a flags field that</a>
-<a name="143"><span class="lineNum"> 143 </span> : : * contains invalid flags or an invalid combination of flags. */</a>
+<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 119701 : static inline uint32_t fdt32_ld(const fdt32_t *p)</span></a>
+<a name="142"><span class="lineNum"> 142 </span> : : {</a>
+<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 119701 : const uint8_t *bp = (const uint8_t *)p;</span></a>
<a name="144"><span class="lineNum"> 144 </span> : : </a>
-<a name="145"><span class="lineNum"> 145 </span> : : #define FDT_ERR_MAX 18</a>
-<a name="146"><span class="lineNum"> 146 </span> : : </a>
-<a name="147"><span class="lineNum"> 147 </span> : : /* constants */</a>
-<a name="148"><span class="lineNum"> 148 </span> : : #define FDT_MAX_PHANDLE 0xfffffffe</a>
-<a name="149"><span class="lineNum"> 149 </span> : : /* Valid values for phandles range from 1 to 2^32-2. */</a>
+<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 119701 : return ((uint32_t)bp[0] &lt;&lt; 24)</span></a>
+<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 119701 : | ((uint32_t)bp[1] &lt;&lt; 16)</span></a>
+<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 119701 : | ((uint32_t)bp[2] &lt;&lt; 8)</span></a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 119701 : | bp[3];</span></a>
+<a name="149"><span class="lineNum"> 149 </span> : : }</a>
<a name="150"><span class="lineNum"> 150 </span> : : </a>
-<a name="151"><span class="lineNum"> 151 </span> : : /**********************************************************************/</a>
-<a name="152"><span class="lineNum"> 152 </span> : : /* Low-level functions (you probably don't need these) */</a>
-<a name="153"><span class="lineNum"> 153 </span> : : /**********************************************************************/</a>
+<a name="151"><span class="lineNum"> 151 </span> : : static inline void fdt32_st(void *property, uint32_t value)</a>
+<a name="152"><span class="lineNum"> 152 </span> : : {</a>
+<a name="153"><span class="lineNum"> 153 </span> : : uint8_t *bp = (uint8_t *)property;</a>
<a name="154"><span class="lineNum"> 154 </span> : : </a>
-<a name="155"><span class="lineNum"> 155 </span> : : #ifndef SWIG /* This function is not useful in Python */</a>
-<a name="156"><span class="lineNum"> 156 </span> : : const void *fdt_offset_ptr(const void *fdt, int offset, unsigned int checklen);</a>
-<a name="157"><span class="lineNum"> 157 </span> : : #endif</a>
-<a name="158"><span class="lineNum"> 158 </span> : : static inline void *fdt_offset_ptr_w(void *fdt, int offset, int checklen)</a>
-<a name="159"><span class="lineNum"> 159 </span> : : {</a>
-<a name="160"><span class="lineNum"> 160 </span> : : return (void *)(uintptr_t)fdt_offset_ptr(fdt, offset, checklen);</a>
-<a name="161"><span class="lineNum"> 161 </span> : : }</a>
-<a name="162"><span class="lineNum"> 162 </span> : : </a>
-<a name="163"><span class="lineNum"> 163 </span> : : uint32_t fdt_next_tag(const void *fdt, int offset, int *nextoffset);</a>
+<a name="155"><span class="lineNum"> 155 </span> : : bp[0] = value &gt;&gt; 24;</a>
+<a name="156"><span class="lineNum"> 156 </span> : : bp[1] = (value &gt;&gt; 16) &amp; 0xff;</a>
+<a name="157"><span class="lineNum"> 157 </span> : : bp[2] = (value &gt;&gt; 8) &amp; 0xff;</a>
+<a name="158"><span class="lineNum"> 158 </span> : : bp[3] = value &amp; 0xff;</a>
+<a name="159"><span class="lineNum"> 159 </span> : : }</a>
+<a name="160"><span class="lineNum"> 160 </span> : : </a>
+<a name="161"><span class="lineNum"> 161 </span> : : static inline uint64_t fdt64_ld(const fdt64_t *p)</a>
+<a name="162"><span class="lineNum"> 162 </span> : : {</a>
+<a name="163"><span class="lineNum"> 163 </span> : : const uint8_t *bp = (const uint8_t *)p;</a>
<a name="164"><span class="lineNum"> 164 </span> : : </a>
-<a name="165"><span class="lineNum"> 165 </span> : : /*</a>
-<a name="166"><span class="lineNum"> 166 </span> : : * Alignment helpers:</a>
-<a name="167"><span class="lineNum"> 167 </span> : : * These helpers access words from a device tree blob. They're</a>
-<a name="168"><span class="lineNum"> 168 </span> : : * built to work even with unaligned pointers on platforms (ike</a>
-<a name="169"><span class="lineNum"> 169 </span> : : * ARM) that don't like unaligned loads and stores</a>
-<a name="170"><span class="lineNum"> 170 </span> : : */</a>
-<a name="171"><span class="lineNum"> 171 </span> : : </a>
-<a name="172"><span class="lineNum"> 172 </span> :<span class="lineCov"> 118942 : static inline uint32_t fdt32_ld(const fdt32_t *p)</span></a>
-<a name="173"><span class="lineNum"> 173 </span> : : {</a>
-<a name="174"><span class="lineNum"> 174 </span> :<span class="lineCov"> 118942 : const uint8_t *bp = (const uint8_t *)p;</span></a>
-<a name="175"><span class="lineNum"> 175 </span> : : </a>
-<a name="176"><span class="lineNum"> 176 </span> :<span class="lineCov"> 118942 : return ((uint32_t)bp[0] &lt;&lt; 24)</span></a>
-<a name="177"><span class="lineNum"> 177 </span> :<span class="lineCov"> 118942 : | ((uint32_t)bp[1] &lt;&lt; 16)</span></a>
-<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 118942 : | ((uint32_t)bp[2] &lt;&lt; 8)</span></a>
-<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 118942 : | bp[3];</span></a>
-<a name="180"><span class="lineNum"> 180 </span> : : }</a>
-<a name="181"><span class="lineNum"> 181 </span> : : </a>
-<a name="182"><span class="lineNum"> 182 </span> : : static inline void fdt32_st(void *property, uint32_t value)</a>
-<a name="183"><span class="lineNum"> 183 </span> : : {</a>
-<a name="184"><span class="lineNum"> 184 </span> : : uint8_t *bp = property;</a>
-<a name="185"><span class="lineNum"> 185 </span> : : </a>
-<a name="186"><span class="lineNum"> 186 </span> : : bp[0] = value &gt;&gt; 24;</a>
-<a name="187"><span class="lineNum"> 187 </span> : : bp[1] = (value &gt;&gt; 16) &amp; 0xff;</a>
-<a name="188"><span class="lineNum"> 188 </span> : : bp[2] = (value &gt;&gt; 8) &amp; 0xff;</a>
-<a name="189"><span class="lineNum"> 189 </span> : : bp[3] = value &amp; 0xff;</a>
-<a name="190"><span class="lineNum"> 190 </span> : : }</a>
-<a name="191"><span class="lineNum"> 191 </span> : : </a>
-<a name="192"><span class="lineNum"> 192 </span> :<span class="lineNoCov"> 0 : static inline uint64_t fdt64_ld(const fdt64_t *p)</span></a>
-<a name="193"><span class="lineNum"> 193 </span> : : {</a>
-<a name="194"><span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : const uint8_t *bp = (const uint8_t *)p;</span></a>
-<a name="195"><span class="lineNum"> 195 </span> : : </a>
-<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : return ((uint64_t)bp[0] &lt;&lt; 56)</span></a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : | ((uint64_t)bp[1] &lt;&lt; 48)</span></a>
-<a name="198"><span class="lineNum"> 198 </span> :<span class="lineNoCov"> 0 : | ((uint64_t)bp[2] &lt;&lt; 40)</span></a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : | ((uint64_t)bp[3] &lt;&lt; 32)</span></a>
-<a name="200"><span class="lineNum"> 200 </span> :<span class="lineNoCov"> 0 : | ((uint64_t)bp[4] &lt;&lt; 24)</span></a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : | ((uint64_t)bp[5] &lt;&lt; 16)</span></a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : | ((uint64_t)bp[6] &lt;&lt; 8)</span></a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : | bp[7];</span></a>
-<a name="204"><span class="lineNum"> 204 </span> : : }</a>
-<a name="205"><span class="lineNum"> 205 </span> : : </a>
-<a name="206"><span class="lineNum"> 206 </span> : : static inline void fdt64_st(void *property, uint64_t value)</a>
-<a name="207"><span class="lineNum"> 207 </span> : : {</a>
-<a name="208"><span class="lineNum"> 208 </span> : : uint8_t *bp = property;</a>
-<a name="209"><span class="lineNum"> 209 </span> : : </a>
-<a name="210"><span class="lineNum"> 210 </span> : : bp[0] = value &gt;&gt; 56;</a>
-<a name="211"><span class="lineNum"> 211 </span> : : bp[1] = (value &gt;&gt; 48) &amp; 0xff;</a>
-<a name="212"><span class="lineNum"> 212 </span> : : bp[2] = (value &gt;&gt; 40) &amp; 0xff;</a>
-<a name="213"><span class="lineNum"> 213 </span> : : bp[3] = (value &gt;&gt; 32) &amp; 0xff;</a>
-<a name="214"><span class="lineNum"> 214 </span> : : bp[4] = (value &gt;&gt; 24) &amp; 0xff;</a>
-<a name="215"><span class="lineNum"> 215 </span> : : bp[5] = (value &gt;&gt; 16) &amp; 0xff;</a>
-<a name="216"><span class="lineNum"> 216 </span> : : bp[6] = (value &gt;&gt; 8) &amp; 0xff;</a>
-<a name="217"><span class="lineNum"> 217 </span> : : bp[7] = value &amp; 0xff;</a>
-<a name="218"><span class="lineNum"> 218 </span> : : }</a>
-<a name="219"><span class="lineNum"> 219 </span> : : </a>
-<a name="220"><span class="lineNum"> 220 </span> : : /**********************************************************************/</a>
-<a name="221"><span class="lineNum"> 221 </span> : : /* Traversal functions */</a>
-<a name="222"><span class="lineNum"> 222 </span> : : /**********************************************************************/</a>
-<a name="223"><span class="lineNum"> 223 </span> : : </a>
-<a name="224"><span class="lineNum"> 224 </span> : : int fdt_next_node(const void *fdt, int offset, int *depth);</a>
-<a name="225"><span class="lineNum"> 225 </span> : : </a>
-<a name="226"><span class="lineNum"> 226 </span> : : /**</a>
-<a name="227"><span class="lineNum"> 227 </span> : : * fdt_first_subnode() - get offset of first direct subnode</a>
-<a name="228"><span class="lineNum"> 228 </span> : : *</a>
-<a name="229"><span class="lineNum"> 229 </span> : : * @fdt: FDT blob</a>
-<a name="230"><span class="lineNum"> 230 </span> : : * @offset: Offset of node to check</a>
-<a name="231"><span class="lineNum"> 231 </span> : : * @return offset of first subnode, or -FDT_ERR_NOTFOUND if there is none</a>
-<a name="232"><span class="lineNum"> 232 </span> : : */</a>
-<a name="233"><span class="lineNum"> 233 </span> : : int fdt_first_subnode(const void *fdt, int offset);</a>
-<a name="234"><span class="lineNum"> 234 </span> : : </a>
-<a name="235"><span class="lineNum"> 235 </span> : : /**</a>
-<a name="236"><span class="lineNum"> 236 </span> : : * fdt_next_subnode() - get offset of next direct subnode</a>
-<a name="237"><span class="lineNum"> 237 </span> : : *</a>
-<a name="238"><span class="lineNum"> 238 </span> : : * After first calling fdt_first_subnode(), call this function repeatedly to</a>
-<a name="239"><span class="lineNum"> 239 </span> : : * get direct subnodes of a parent node.</a>
-<a name="240"><span class="lineNum"> 240 </span> : : *</a>
-<a name="241"><span class="lineNum"> 241 </span> : : * @fdt: FDT blob</a>
-<a name="242"><span class="lineNum"> 242 </span> : : * @offset: Offset of previous subnode</a>
-<a name="243"><span class="lineNum"> 243 </span> : : * @return offset of next subnode, or -FDT_ERR_NOTFOUND if there are no more</a>
-<a name="244"><span class="lineNum"> 244 </span> : : * subnodes</a>
-<a name="245"><span class="lineNum"> 245 </span> : : */</a>
-<a name="246"><span class="lineNum"> 246 </span> : : int fdt_next_subnode(const void *fdt, int offset);</a>
-<a name="247"><span class="lineNum"> 247 </span> : : </a>
-<a name="248"><span class="lineNum"> 248 </span> : : /**</a>
-<a name="249"><span class="lineNum"> 249 </span> : : * fdt_for_each_subnode - iterate over all subnodes of a parent</a>
-<a name="250"><span class="lineNum"> 250 </span> : : *</a>
-<a name="251"><span class="lineNum"> 251 </span> : : * @node: child node (int, lvalue)</a>
-<a name="252"><span class="lineNum"> 252 </span> : : * @fdt: FDT blob (const void *)</a>
-<a name="253"><span class="lineNum"> 253 </span> : : * @parent: parent node (int)</a>
-<a name="254"><span class="lineNum"> 254 </span> : : *</a>
-<a name="255"><span class="lineNum"> 255 </span> : : * This is actually a wrapper around a for loop and would be used like so:</a>
-<a name="256"><span class="lineNum"> 256 </span> : : *</a>
-<a name="257"><span class="lineNum"> 257 </span> : : * fdt_for_each_subnode(node, fdt, parent) {</a>
-<a name="258"><span class="lineNum"> 258 </span> : : * Use node</a>
-<a name="259"><span class="lineNum"> 259 </span> : : * ...</a>
-<a name="260"><span class="lineNum"> 260 </span> : : * }</a>
-<a name="261"><span class="lineNum"> 261 </span> : : *</a>
-<a name="262"><span class="lineNum"> 262 </span> : : * if ((node &lt; 0) &amp;&amp; (node != -FDT_ERR_NOTFOUND)) {</a>
-<a name="263"><span class="lineNum"> 263 </span> : : * Error handling</a>
-<a name="264"><span class="lineNum"> 264 </span> : : * }</a>
-<a name="265"><span class="lineNum"> 265 </span> : : *</a>
-<a name="266"><span class="lineNum"> 266 </span> : : * Note that this is implemented as a macro and @node is used as</a>
-<a name="267"><span class="lineNum"> 267 </span> : : * iterator in the loop. The parent variable be constant or even a</a>
-<a name="268"><span class="lineNum"> 268 </span> : : * literal.</a>
-<a name="269"><span class="lineNum"> 269 </span> : : *</a>
-<a name="270"><span class="lineNum"> 270 </span> : : */</a>
-<a name="271"><span class="lineNum"> 271 </span> : : #define fdt_for_each_subnode(node, fdt, parent) \</a>
-<a name="272"><span class="lineNum"> 272 </span> : : for (node = fdt_first_subnode(fdt, parent); \</a>
-<a name="273"><span class="lineNum"> 273 </span> : : node &gt;= 0; \</a>
-<a name="274"><span class="lineNum"> 274 </span> : : node = fdt_next_subnode(fdt, node))</a>
-<a name="275"><span class="lineNum"> 275 </span> : : </a>
-<a name="276"><span class="lineNum"> 276 </span> : : /**********************************************************************/</a>
-<a name="277"><span class="lineNum"> 277 </span> : : /* General functions */</a>
-<a name="278"><span class="lineNum"> 278 </span> : : /**********************************************************************/</a>
-<a name="279"><span class="lineNum"> 279 </span> : : #define fdt_get_header(fdt, field) \</a>
-<a name="280"><span class="lineNum"> 280 </span> : : (fdt32_ld(&amp;((const struct fdt_header *)(fdt))-&gt;field))</a>
-<a name="281"><span class="lineNum"> 281 </span> : : #define fdt_magic(fdt) (fdt_get_header(fdt, magic))</a>
-<a name="282"><span class="lineNum"> 282 </span> : : #define fdt_totalsize(fdt) (fdt_get_header(fdt, totalsize))</a>
-<a name="283"><span class="lineNum"> 283 </span> : : #define fdt_off_dt_struct(fdt) (fdt_get_header(fdt, off_dt_struct))</a>
-<a name="284"><span class="lineNum"> 284 </span> : : #define fdt_off_dt_strings(fdt) (fdt_get_header(fdt, off_dt_strings))</a>
-<a name="285"><span class="lineNum"> 285 </span> : : #define fdt_off_mem_rsvmap(fdt) (fdt_get_header(fdt, off_mem_rsvmap))</a>
-<a name="286"><span class="lineNum"> 286 </span> : : #define fdt_version(fdt) (fdt_get_header(fdt, version))</a>
-<a name="287"><span class="lineNum"> 287 </span> : : #define fdt_last_comp_version(fdt) (fdt_get_header(fdt, last_comp_version))</a>
-<a name="288"><span class="lineNum"> 288 </span> : : #define fdt_boot_cpuid_phys(fdt) (fdt_get_header(fdt, boot_cpuid_phys))</a>
-<a name="289"><span class="lineNum"> 289 </span> : : #define fdt_size_dt_strings(fdt) (fdt_get_header(fdt, size_dt_strings))</a>
-<a name="290"><span class="lineNum"> 290 </span> : : #define fdt_size_dt_struct(fdt) (fdt_get_header(fdt, size_dt_struct))</a>
-<a name="291"><span class="lineNum"> 291 </span> : : </a>
-<a name="292"><span class="lineNum"> 292 </span> : : #define fdt_set_hdr_(name) \</a>
-<a name="293"><span class="lineNum"> 293 </span> : : static inline void fdt_set_##name(void *fdt, uint32_t val) \</a>
-<a name="294"><span class="lineNum"> 294 </span> : : { \</a>
-<a name="295"><span class="lineNum"> 295 </span> : : struct fdt_header *fdth = (struct fdt_header *)fdt; \</a>
-<a name="296"><span class="lineNum"> 296 </span> : : fdth-&gt;name = cpu_to_fdt32(val); \</a>
-<a name="297"><span class="lineNum"> 297 </span> : : }</a>
-<a name="298"><span class="lineNum"> 298 </span> :<span class="lineCov"> 4 : fdt_set_hdr_(magic);</span></a>
-<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 4 : fdt_set_hdr_(totalsize);</span></a>
-<a name="300"><span class="lineNum"> 300 </span> :<span class="lineCov"> 10 : fdt_set_hdr_(off_dt_struct);</span></a>
-<a name="301"><span class="lineNum"> 301 </span> :<span class="lineCov"> 6 : fdt_set_hdr_(off_dt_strings);</span></a>
-<a name="302"><span class="lineNum"> 302 </span> :<span class="lineCov"> 2 : fdt_set_hdr_(off_mem_rsvmap);</span></a>
-<a name="303"><span class="lineNum"> 303 </span> :<span class="lineCov"> 2 : fdt_set_hdr_(version);</span></a>
-<a name="304"><span class="lineNum"> 304 </span> :<span class="lineCov"> 4 : fdt_set_hdr_(last_comp_version);</span></a>
-<a name="305"><span class="lineNum"> 305 </span> : : fdt_set_hdr_(boot_cpuid_phys);</a>
-<a name="306"><span class="lineNum"> 306 </span> :<span class="lineCov"> 196 : fdt_set_hdr_(size_dt_strings);</span></a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineCov"> 3259 : fdt_set_hdr_(size_dt_struct);</span></a>
-<a name="308"><span class="lineNum"> 308 </span> : : #undef fdt_set_hdr_</a>
-<a name="309"><span class="lineNum"> 309 </span> : : </a>
-<a name="310"><span class="lineNum"> 310 </span> : : /**</a>
-<a name="311"><span class="lineNum"> 311 </span> : : * fdt_header_size - return the size of the tree's header</a>
-<a name="312"><span class="lineNum"> 312 </span> : : * @fdt: pointer to a flattened device tree</a>
-<a name="313"><span class="lineNum"> 313 </span> : : */</a>
-<a name="314"><span class="lineNum"> 314 </span> : : size_t fdt_header_size_(uint32_t version);</a>
-<a name="315"><span class="lineNum"> 315 </span> :<span class="lineCov"> 11 : static inline size_t fdt_header_size(const void *fdt)</span></a>
-<a name="316"><span class="lineNum"> 316 </span> : : {</a>
-<a name="317"><span class="lineNum"> 317 </span> :<span class="lineCov"> 11 : return fdt_header_size_(fdt_version(fdt));</span></a>
-<a name="318"><span class="lineNum"> 318 </span> : : }</a>
-<a name="319"><span class="lineNum"> 319 </span> : : </a>
-<a name="320"><span class="lineNum"> 320 </span> : : /**</a>
-<a name="321"><span class="lineNum"> 321 </span> : : * fdt_check_header - sanity check a device tree header</a>
-<a name="322"><span class="lineNum"> 322 </span> : : </a>
-<a name="323"><span class="lineNum"> 323 </span> : : * @fdt: pointer to data which might be a flattened device tree</a>
-<a name="324"><span class="lineNum"> 324 </span> : : *</a>
-<a name="325"><span class="lineNum"> 325 </span> : : * fdt_check_header() checks that the given buffer contains what</a>
-<a name="326"><span class="lineNum"> 326 </span> : : * appears to be a flattened device tree, and that the header contains</a>
-<a name="327"><span class="lineNum"> 327 </span> : : * valid information (to the extent that can be determined from the</a>
-<a name="328"><span class="lineNum"> 328 </span> : : * header alone).</a>
-<a name="329"><span class="lineNum"> 329 </span> : : *</a>
-<a name="330"><span class="lineNum"> 330 </span> : : * returns:</a>
-<a name="331"><span class="lineNum"> 331 </span> : : * 0, if the buffer appears to contain a valid device tree</a>
-<a name="332"><span class="lineNum"> 332 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="333"><span class="lineNum"> 333 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="334"><span class="lineNum"> 334 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="335"><span class="lineNum"> 335 </span> : : * -FDT_ERR_TRUNCATED, standard meanings, as above</a>
-<a name="336"><span class="lineNum"> 336 </span> : : */</a>
-<a name="337"><span class="lineNum"> 337 </span> : : int fdt_check_header(const void *fdt);</a>
+<a name="165"><span class="lineNum"> 165 </span> : : return ((uint64_t)bp[0] &lt;&lt; 56)</a>
+<a name="166"><span class="lineNum"> 166 </span> : : | ((uint64_t)bp[1] &lt;&lt; 48)</a>
+<a name="167"><span class="lineNum"> 167 </span> : : | ((uint64_t)bp[2] &lt;&lt; 40)</a>
+<a name="168"><span class="lineNum"> 168 </span> : : | ((uint64_t)bp[3] &lt;&lt; 32)</a>
+<a name="169"><span class="lineNum"> 169 </span> : : | ((uint64_t)bp[4] &lt;&lt; 24)</a>
+<a name="170"><span class="lineNum"> 170 </span> : : | ((uint64_t)bp[5] &lt;&lt; 16)</a>
+<a name="171"><span class="lineNum"> 171 </span> : : | ((uint64_t)bp[6] &lt;&lt; 8)</a>
+<a name="172"><span class="lineNum"> 172 </span> : : | bp[7];</a>
+<a name="173"><span class="lineNum"> 173 </span> : : }</a>
+<a name="174"><span class="lineNum"> 174 </span> : : </a>
+<a name="175"><span class="lineNum"> 175 </span> : : static inline void fdt64_st(void *property, uint64_t value)</a>
+<a name="176"><span class="lineNum"> 176 </span> : : {</a>
+<a name="177"><span class="lineNum"> 177 </span> : : uint8_t *bp = (uint8_t *)property;</a>
+<a name="178"><span class="lineNum"> 178 </span> : : </a>
+<a name="179"><span class="lineNum"> 179 </span> : : bp[0] = value &gt;&gt; 56;</a>
+<a name="180"><span class="lineNum"> 180 </span> : : bp[1] = (value &gt;&gt; 48) &amp; 0xff;</a>
+<a name="181"><span class="lineNum"> 181 </span> : : bp[2] = (value &gt;&gt; 40) &amp; 0xff;</a>
+<a name="182"><span class="lineNum"> 182 </span> : : bp[3] = (value &gt;&gt; 32) &amp; 0xff;</a>
+<a name="183"><span class="lineNum"> 183 </span> : : bp[4] = (value &gt;&gt; 24) &amp; 0xff;</a>
+<a name="184"><span class="lineNum"> 184 </span> : : bp[5] = (value &gt;&gt; 16) &amp; 0xff;</a>
+<a name="185"><span class="lineNum"> 185 </span> : : bp[6] = (value &gt;&gt; 8) &amp; 0xff;</a>
+<a name="186"><span class="lineNum"> 186 </span> : : bp[7] = value &amp; 0xff;</a>
+<a name="187"><span class="lineNum"> 187 </span> : : }</a>
+<a name="188"><span class="lineNum"> 188 </span> : : </a>
+<a name="189"><span class="lineNum"> 189 </span> : : /**********************************************************************/</a>
+<a name="190"><span class="lineNum"> 190 </span> : : /* Traversal functions */</a>
+<a name="191"><span class="lineNum"> 191 </span> : : /**********************************************************************/</a>
+<a name="192"><span class="lineNum"> 192 </span> : : </a>
+<a name="193"><span class="lineNum"> 193 </span> : : int fdt_next_node(const void *fdt, int offset, int *depth);</a>
+<a name="194"><span class="lineNum"> 194 </span> : : </a>
+<a name="195"><span class="lineNum"> 195 </span> : : /**</a>
+<a name="196"><span class="lineNum"> 196 </span> : : * fdt_first_subnode() - get offset of first direct subnode</a>
+<a name="197"><span class="lineNum"> 197 </span> : : * @fdt: FDT blob</a>
+<a name="198"><span class="lineNum"> 198 </span> : : * @offset: Offset of node to check</a>
+<a name="199"><span class="lineNum"> 199 </span> : : *</a>
+<a name="200"><span class="lineNum"> 200 </span> : : * Return: offset of first subnode, or -FDT_ERR_NOTFOUND if there is none</a>
+<a name="201"><span class="lineNum"> 201 </span> : : */</a>
+<a name="202"><span class="lineNum"> 202 </span> : : int fdt_first_subnode(const void *fdt, int offset);</a>
+<a name="203"><span class="lineNum"> 203 </span> : : </a>
+<a name="204"><span class="lineNum"> 204 </span> : : /**</a>
+<a name="205"><span class="lineNum"> 205 </span> : : * fdt_next_subnode() - get offset of next direct subnode</a>
+<a name="206"><span class="lineNum"> 206 </span> : : * @fdt: FDT blob</a>
+<a name="207"><span class="lineNum"> 207 </span> : : * @offset: Offset of previous subnode</a>
+<a name="208"><span class="lineNum"> 208 </span> : : *</a>
+<a name="209"><span class="lineNum"> 209 </span> : : * After first calling fdt_first_subnode(), call this function repeatedly to</a>
+<a name="210"><span class="lineNum"> 210 </span> : : * get direct subnodes of a parent node.</a>
+<a name="211"><span class="lineNum"> 211 </span> : : *</a>
+<a name="212"><span class="lineNum"> 212 </span> : : * Return: offset of next subnode, or -FDT_ERR_NOTFOUND if there are no more</a>
+<a name="213"><span class="lineNum"> 213 </span> : : * subnodes</a>
+<a name="214"><span class="lineNum"> 214 </span> : : */</a>
+<a name="215"><span class="lineNum"> 215 </span> : : int fdt_next_subnode(const void *fdt, int offset);</a>
+<a name="216"><span class="lineNum"> 216 </span> : : </a>
+<a name="217"><span class="lineNum"> 217 </span> : : /**</a>
+<a name="218"><span class="lineNum"> 218 </span> : : * fdt_for_each_subnode - iterate over all subnodes of a parent</a>
+<a name="219"><span class="lineNum"> 219 </span> : : *</a>
+<a name="220"><span class="lineNum"> 220 </span> : : * @node: child node (int, lvalue)</a>
+<a name="221"><span class="lineNum"> 221 </span> : : * @fdt: FDT blob (const void *)</a>
+<a name="222"><span class="lineNum"> 222 </span> : : * @parent: parent node (int)</a>
+<a name="223"><span class="lineNum"> 223 </span> : : *</a>
+<a name="224"><span class="lineNum"> 224 </span> : : * This is actually a wrapper around a for loop and would be used like so:</a>
+<a name="225"><span class="lineNum"> 225 </span> : : *</a>
+<a name="226"><span class="lineNum"> 226 </span> : : * fdt_for_each_subnode(node, fdt, parent) {</a>
+<a name="227"><span class="lineNum"> 227 </span> : : * Use node</a>
+<a name="228"><span class="lineNum"> 228 </span> : : * ...</a>
+<a name="229"><span class="lineNum"> 229 </span> : : * }</a>
+<a name="230"><span class="lineNum"> 230 </span> : : *</a>
+<a name="231"><span class="lineNum"> 231 </span> : : * if ((node &lt; 0) &amp;&amp; (node != -FDT_ERR_NOTFOUND)) {</a>
+<a name="232"><span class="lineNum"> 232 </span> : : * Error handling</a>
+<a name="233"><span class="lineNum"> 233 </span> : : * }</a>
+<a name="234"><span class="lineNum"> 234 </span> : : *</a>
+<a name="235"><span class="lineNum"> 235 </span> : : * Note that this is implemented as a macro and @node is used as</a>
+<a name="236"><span class="lineNum"> 236 </span> : : * iterator in the loop. The parent variable be constant or even a</a>
+<a name="237"><span class="lineNum"> 237 </span> : : * literal.</a>
+<a name="238"><span class="lineNum"> 238 </span> : : */</a>
+<a name="239"><span class="lineNum"> 239 </span> : : #define fdt_for_each_subnode(node, fdt, parent) \</a>
+<a name="240"><span class="lineNum"> 240 </span> : : for (node = fdt_first_subnode(fdt, parent); \</a>
+<a name="241"><span class="lineNum"> 241 </span> : : node &gt;= 0; \</a>
+<a name="242"><span class="lineNum"> 242 </span> : : node = fdt_next_subnode(fdt, node))</a>
+<a name="243"><span class="lineNum"> 243 </span> : : </a>
+<a name="244"><span class="lineNum"> 244 </span> : : /**********************************************************************/</a>
+<a name="245"><span class="lineNum"> 245 </span> : : /* General functions */</a>
+<a name="246"><span class="lineNum"> 246 </span> : : /**********************************************************************/</a>
+<a name="247"><span class="lineNum"> 247 </span> : : #define fdt_get_header(fdt, field) \</a>
+<a name="248"><span class="lineNum"> 248 </span> : : (fdt32_ld(&amp;((const struct fdt_header *)(fdt))-&gt;field))</a>
+<a name="249"><span class="lineNum"> 249 </span> : : #define fdt_magic(fdt) (fdt_get_header(fdt, magic))</a>
+<a name="250"><span class="lineNum"> 250 </span> : : #define fdt_totalsize(fdt) (fdt_get_header(fdt, totalsize))</a>
+<a name="251"><span class="lineNum"> 251 </span> : : #define fdt_off_dt_struct(fdt) (fdt_get_header(fdt, off_dt_struct))</a>
+<a name="252"><span class="lineNum"> 252 </span> : : #define fdt_off_dt_strings(fdt) (fdt_get_header(fdt, off_dt_strings))</a>
+<a name="253"><span class="lineNum"> 253 </span> : : #define fdt_off_mem_rsvmap(fdt) (fdt_get_header(fdt, off_mem_rsvmap))</a>
+<a name="254"><span class="lineNum"> 254 </span> : : #define fdt_version(fdt) (fdt_get_header(fdt, version))</a>
+<a name="255"><span class="lineNum"> 255 </span> : : #define fdt_last_comp_version(fdt) (fdt_get_header(fdt, last_comp_version))</a>
+<a name="256"><span class="lineNum"> 256 </span> : : #define fdt_boot_cpuid_phys(fdt) (fdt_get_header(fdt, boot_cpuid_phys))</a>
+<a name="257"><span class="lineNum"> 257 </span> : : #define fdt_size_dt_strings(fdt) (fdt_get_header(fdt, size_dt_strings))</a>
+<a name="258"><span class="lineNum"> 258 </span> : : #define fdt_size_dt_struct(fdt) (fdt_get_header(fdt, size_dt_struct))</a>
+<a name="259"><span class="lineNum"> 259 </span> : : </a>
+<a name="260"><span class="lineNum"> 260 </span> : : #define fdt_set_hdr_(name) \</a>
+<a name="261"><span class="lineNum"> 261 </span> : : static inline void fdt_set_##name(void *fdt, uint32_t val) \</a>
+<a name="262"><span class="lineNum"> 262 </span> : : { \</a>
+<a name="263"><span class="lineNum"> 263 </span> : : struct fdt_header *fdth = (struct fdt_header *)fdt; \</a>
+<a name="264"><span class="lineNum"> 264 </span> : : fdth-&gt;name = cpu_to_fdt32(val); \</a>
+<a name="265"><span class="lineNum"> 265 </span> : : }</a>
+<a name="266"><span class="lineNum"> 266 </span> :<span class="lineCov"> 4 : fdt_set_hdr_(magic);</span></a>
+<a name="267"><span class="lineNum"> 267 </span> :<span class="lineCov"> 4 : fdt_set_hdr_(totalsize);</span></a>
+<a name="268"><span class="lineNum"> 268 </span> :<span class="lineCov"> 10 : fdt_set_hdr_(off_dt_struct);</span></a>
+<a name="269"><span class="lineNum"> 269 </span> :<span class="lineCov"> 6 : fdt_set_hdr_(off_dt_strings);</span></a>
+<a name="270"><span class="lineNum"> 270 </span> :<span class="lineCov"> 2 : fdt_set_hdr_(off_mem_rsvmap);</span></a>
+<a name="271"><span class="lineNum"> 271 </span> :<span class="lineCov"> 2 : fdt_set_hdr_(version);</span></a>
+<a name="272"><span class="lineNum"> 272 </span> :<span class="lineCov"> 4 : fdt_set_hdr_(last_comp_version);</span></a>
+<a name="273"><span class="lineNum"> 273 </span> : : fdt_set_hdr_(boot_cpuid_phys);</a>
+<a name="274"><span class="lineNum"> 274 </span> :<span class="lineCov"> 198 : fdt_set_hdr_(size_dt_strings);</span></a>
+<a name="275"><span class="lineNum"> 275 </span> :<span class="lineCov"> 3285 : fdt_set_hdr_(size_dt_struct);</span></a>
+<a name="276"><span class="lineNum"> 276 </span> : : #undef fdt_set_hdr_</a>
+<a name="277"><span class="lineNum"> 277 </span> : : </a>
+<a name="278"><span class="lineNum"> 278 </span> : : /**</a>
+<a name="279"><span class="lineNum"> 279 </span> : : * fdt_header_size - return the size of the tree's header</a>
+<a name="280"><span class="lineNum"> 280 </span> : : * @fdt: pointer to a flattened device tree</a>
+<a name="281"><span class="lineNum"> 281 </span> : : *</a>
+<a name="282"><span class="lineNum"> 282 </span> : : * Return: size of DTB header in bytes</a>
+<a name="283"><span class="lineNum"> 283 </span> : : */</a>
+<a name="284"><span class="lineNum"> 284 </span> : : size_t fdt_header_size(const void *fdt);</a>
+<a name="285"><span class="lineNum"> 285 </span> : : </a>
+<a name="286"><span class="lineNum"> 286 </span> : : /**</a>
+<a name="287"><span class="lineNum"> 287 </span> : : * fdt_header_size_ - internal function to get header size from a version number</a>
+<a name="288"><span class="lineNum"> 288 </span> : : * @version: devicetree version number</a>
+<a name="289"><span class="lineNum"> 289 </span> : : *</a>
+<a name="290"><span class="lineNum"> 290 </span> : : * Return: size of DTB header in bytes</a>
+<a name="291"><span class="lineNum"> 291 </span> : : */</a>
+<a name="292"><span class="lineNum"> 292 </span> : : size_t fdt_header_size_(uint32_t version);</a>
+<a name="293"><span class="lineNum"> 293 </span> : : </a>
+<a name="294"><span class="lineNum"> 294 </span> : : /**</a>
+<a name="295"><span class="lineNum"> 295 </span> : : * fdt_check_header - sanity check a device tree header</a>
+<a name="296"><span class="lineNum"> 296 </span> : : * @fdt: pointer to data which might be a flattened device tree</a>
+<a name="297"><span class="lineNum"> 297 </span> : : *</a>
+<a name="298"><span class="lineNum"> 298 </span> : : * fdt_check_header() checks that the given buffer contains what</a>
+<a name="299"><span class="lineNum"> 299 </span> : : * appears to be a flattened device tree, and that the header contains</a>
+<a name="300"><span class="lineNum"> 300 </span> : : * valid information (to the extent that can be determined from the</a>
+<a name="301"><span class="lineNum"> 301 </span> : : * header alone).</a>
+<a name="302"><span class="lineNum"> 302 </span> : : *</a>
+<a name="303"><span class="lineNum"> 303 </span> : : * returns:</a>
+<a name="304"><span class="lineNum"> 304 </span> : : * 0, if the buffer appears to contain a valid device tree</a>
+<a name="305"><span class="lineNum"> 305 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="306"><span class="lineNum"> 306 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="307"><span class="lineNum"> 307 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="308"><span class="lineNum"> 308 </span> : : * -FDT_ERR_TRUNCATED, standard meanings, as above</a>
+<a name="309"><span class="lineNum"> 309 </span> : : */</a>
+<a name="310"><span class="lineNum"> 310 </span> : : int fdt_check_header(const void *fdt);</a>
+<a name="311"><span class="lineNum"> 311 </span> : : </a>
+<a name="312"><span class="lineNum"> 312 </span> : : /**</a>
+<a name="313"><span class="lineNum"> 313 </span> : : * fdt_move - move a device tree around in memory</a>
+<a name="314"><span class="lineNum"> 314 </span> : : * @fdt: pointer to the device tree to move</a>
+<a name="315"><span class="lineNum"> 315 </span> : : * @buf: pointer to memory where the device is to be moved</a>
+<a name="316"><span class="lineNum"> 316 </span> : : * @bufsize: size of the memory space at buf</a>
+<a name="317"><span class="lineNum"> 317 </span> : : *</a>
+<a name="318"><span class="lineNum"> 318 </span> : : * fdt_move() relocates, if possible, the device tree blob located at</a>
+<a name="319"><span class="lineNum"> 319 </span> : : * fdt to the buffer at buf of size bufsize. The buffer may overlap</a>
+<a name="320"><span class="lineNum"> 320 </span> : : * with the existing device tree blob at fdt. Therefore,</a>
+<a name="321"><span class="lineNum"> 321 </span> : : * fdt_move(fdt, fdt, fdt_totalsize(fdt))</a>
+<a name="322"><span class="lineNum"> 322 </span> : : * should always succeed.</a>
+<a name="323"><span class="lineNum"> 323 </span> : : *</a>
+<a name="324"><span class="lineNum"> 324 </span> : : * returns:</a>
+<a name="325"><span class="lineNum"> 325 </span> : : * 0, on success</a>
+<a name="326"><span class="lineNum"> 326 </span> : : * -FDT_ERR_NOSPACE, bufsize is insufficient to contain the device tree</a>
+<a name="327"><span class="lineNum"> 327 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="328"><span class="lineNum"> 328 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="329"><span class="lineNum"> 329 </span> : : * -FDT_ERR_BADSTATE, standard meanings</a>
+<a name="330"><span class="lineNum"> 330 </span> : : */</a>
+<a name="331"><span class="lineNum"> 331 </span> : : int fdt_move(const void *fdt, void *buf, int bufsize);</a>
+<a name="332"><span class="lineNum"> 332 </span> : : </a>
+<a name="333"><span class="lineNum"> 333 </span> : : /**********************************************************************/</a>
+<a name="334"><span class="lineNum"> 334 </span> : : /* Read-only functions */</a>
+<a name="335"><span class="lineNum"> 335 </span> : : /**********************************************************************/</a>
+<a name="336"><span class="lineNum"> 336 </span> : : </a>
+<a name="337"><span class="lineNum"> 337 </span> : : int fdt_check_full(const void *fdt, size_t bufsize);</a>
<a name="338"><span class="lineNum"> 338 </span> : : </a>
<a name="339"><span class="lineNum"> 339 </span> : : /**</a>
-<a name="340"><span class="lineNum"> 340 </span> : : * fdt_move - move a device tree around in memory</a>
-<a name="341"><span class="lineNum"> 341 </span> : : * @fdt: pointer to the device tree to move</a>
-<a name="342"><span class="lineNum"> 342 </span> : : * @buf: pointer to memory where the device is to be moved</a>
-<a name="343"><span class="lineNum"> 343 </span> : : * @bufsize: size of the memory space at buf</a>
+<a name="340"><span class="lineNum"> 340 </span> : : * fdt_get_string - retrieve a string from the strings block of a device tree</a>
+<a name="341"><span class="lineNum"> 341 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="342"><span class="lineNum"> 342 </span> : : * @stroffset: offset of the string within the strings block (native endian)</a>
+<a name="343"><span class="lineNum"> 343 </span> : : * @lenp: optional pointer to return the string's length</a>
<a name="344"><span class="lineNum"> 344 </span> : : *</a>
-<a name="345"><span class="lineNum"> 345 </span> : : * fdt_move() relocates, if possible, the device tree blob located at</a>
-<a name="346"><span class="lineNum"> 346 </span> : : * fdt to the buffer at buf of size bufsize. The buffer may overlap</a>
-<a name="347"><span class="lineNum"> 347 </span> : : * with the existing device tree blob at fdt. Therefore,</a>
-<a name="348"><span class="lineNum"> 348 </span> : : * fdt_move(fdt, fdt, fdt_totalsize(fdt))</a>
-<a name="349"><span class="lineNum"> 349 </span> : : * should always succeed.</a>
-<a name="350"><span class="lineNum"> 350 </span> : : *</a>
-<a name="351"><span class="lineNum"> 351 </span> : : * returns:</a>
-<a name="352"><span class="lineNum"> 352 </span> : : * 0, on success</a>
-<a name="353"><span class="lineNum"> 353 </span> : : * -FDT_ERR_NOSPACE, bufsize is insufficient to contain the device tree</a>
-<a name="354"><span class="lineNum"> 354 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="355"><span class="lineNum"> 355 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="356"><span class="lineNum"> 356 </span> : : * -FDT_ERR_BADSTATE, standard meanings</a>
-<a name="357"><span class="lineNum"> 357 </span> : : */</a>
-<a name="358"><span class="lineNum"> 358 </span> : : int fdt_move(const void *fdt, void *buf, int bufsize);</a>
-<a name="359"><span class="lineNum"> 359 </span> : : </a>
-<a name="360"><span class="lineNum"> 360 </span> : : /**********************************************************************/</a>
-<a name="361"><span class="lineNum"> 361 </span> : : /* Read-only functions */</a>
-<a name="362"><span class="lineNum"> 362 </span> : : /**********************************************************************/</a>
-<a name="363"><span class="lineNum"> 363 </span> : : </a>
-<a name="364"><span class="lineNum"> 364 </span> : : int fdt_check_full(const void *fdt, size_t bufsize);</a>
-<a name="365"><span class="lineNum"> 365 </span> : : </a>
-<a name="366"><span class="lineNum"> 366 </span> : : /**</a>
-<a name="367"><span class="lineNum"> 367 </span> : : * fdt_get_string - retrieve a string from the strings block of a device tree</a>
-<a name="368"><span class="lineNum"> 368 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="369"><span class="lineNum"> 369 </span> : : * @stroffset: offset of the string within the strings block (native endian)</a>
-<a name="370"><span class="lineNum"> 370 </span> : : * @lenp: optional pointer to return the string's length</a>
-<a name="371"><span class="lineNum"> 371 </span> : : *</a>
-<a name="372"><span class="lineNum"> 372 </span> : : * fdt_get_string() retrieves a pointer to a single string from the</a>
-<a name="373"><span class="lineNum"> 373 </span> : : * strings block of the device tree blob at fdt, and optionally also</a>
-<a name="374"><span class="lineNum"> 374 </span> : : * returns the string's length in *lenp.</a>
-<a name="375"><span class="lineNum"> 375 </span> : : *</a>
-<a name="376"><span class="lineNum"> 376 </span> : : * returns:</a>
-<a name="377"><span class="lineNum"> 377 </span> : : * a pointer to the string, on success</a>
-<a name="378"><span class="lineNum"> 378 </span> : : * NULL, if stroffset is out of bounds, or doesn't point to a valid string</a>
-<a name="379"><span class="lineNum"> 379 </span> : : */</a>
-<a name="380"><span class="lineNum"> 380 </span> : : const char *fdt_get_string(const void *fdt, int stroffset, int *lenp);</a>
-<a name="381"><span class="lineNum"> 381 </span> : : </a>
-<a name="382"><span class="lineNum"> 382 </span> : : /**</a>
-<a name="383"><span class="lineNum"> 383 </span> : : * fdt_string - retrieve a string from the strings block of a device tree</a>
-<a name="384"><span class="lineNum"> 384 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="385"><span class="lineNum"> 385 </span> : : * @stroffset: offset of the string within the strings block (native endian)</a>
+<a name="345"><span class="lineNum"> 345 </span> : : * fdt_get_string() retrieves a pointer to a single string from the</a>
+<a name="346"><span class="lineNum"> 346 </span> : : * strings block of the device tree blob at fdt, and optionally also</a>
+<a name="347"><span class="lineNum"> 347 </span> : : * returns the string's length in *lenp.</a>
+<a name="348"><span class="lineNum"> 348 </span> : : *</a>
+<a name="349"><span class="lineNum"> 349 </span> : : * returns:</a>
+<a name="350"><span class="lineNum"> 350 </span> : : * a pointer to the string, on success</a>
+<a name="351"><span class="lineNum"> 351 </span> : : * NULL, if stroffset is out of bounds, or doesn't point to a valid string</a>
+<a name="352"><span class="lineNum"> 352 </span> : : */</a>
+<a name="353"><span class="lineNum"> 353 </span> : : const char *fdt_get_string(const void *fdt, int stroffset, int *lenp);</a>
+<a name="354"><span class="lineNum"> 354 </span> : : </a>
+<a name="355"><span class="lineNum"> 355 </span> : : /**</a>
+<a name="356"><span class="lineNum"> 356 </span> : : * fdt_string - retrieve a string from the strings block of a device tree</a>
+<a name="357"><span class="lineNum"> 357 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="358"><span class="lineNum"> 358 </span> : : * @stroffset: offset of the string within the strings block (native endian)</a>
+<a name="359"><span class="lineNum"> 359 </span> : : *</a>
+<a name="360"><span class="lineNum"> 360 </span> : : * fdt_string() retrieves a pointer to a single string from the</a>
+<a name="361"><span class="lineNum"> 361 </span> : : * strings block of the device tree blob at fdt.</a>
+<a name="362"><span class="lineNum"> 362 </span> : : *</a>
+<a name="363"><span class="lineNum"> 363 </span> : : * returns:</a>
+<a name="364"><span class="lineNum"> 364 </span> : : * a pointer to the string, on success</a>
+<a name="365"><span class="lineNum"> 365 </span> : : * NULL, if stroffset is out of bounds, or doesn't point to a valid string</a>
+<a name="366"><span class="lineNum"> 366 </span> : : */</a>
+<a name="367"><span class="lineNum"> 367 </span> : : const char *fdt_string(const void *fdt, int stroffset);</a>
+<a name="368"><span class="lineNum"> 368 </span> : : </a>
+<a name="369"><span class="lineNum"> 369 </span> : : /**</a>
+<a name="370"><span class="lineNum"> 370 </span> : : * fdt_find_max_phandle - find and return the highest phandle in a tree</a>
+<a name="371"><span class="lineNum"> 371 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="372"><span class="lineNum"> 372 </span> : : * @phandle: return location for the highest phandle value found in the tree</a>
+<a name="373"><span class="lineNum"> 373 </span> : : *</a>
+<a name="374"><span class="lineNum"> 374 </span> : : * fdt_find_max_phandle() finds the highest phandle value in the given device</a>
+<a name="375"><span class="lineNum"> 375 </span> : : * tree. The value returned in @phandle is only valid if the function returns</a>
+<a name="376"><span class="lineNum"> 376 </span> : : * success.</a>
+<a name="377"><span class="lineNum"> 377 </span> : : *</a>
+<a name="378"><span class="lineNum"> 378 </span> : : * returns:</a>
+<a name="379"><span class="lineNum"> 379 </span> : : * 0 on success or a negative error code on failure</a>
+<a name="380"><span class="lineNum"> 380 </span> : : */</a>
+<a name="381"><span class="lineNum"> 381 </span> : : int fdt_find_max_phandle(const void *fdt, uint32_t *phandle);</a>
+<a name="382"><span class="lineNum"> 382 </span> : : </a>
+<a name="383"><span class="lineNum"> 383 </span> : : /**</a>
+<a name="384"><span class="lineNum"> 384 </span> : : * fdt_get_max_phandle - retrieves the highest phandle in a tree</a>
+<a name="385"><span class="lineNum"> 385 </span> : : * @fdt: pointer to the device tree blob</a>
<a name="386"><span class="lineNum"> 386 </span> : : *</a>
-<a name="387"><span class="lineNum"> 387 </span> : : * fdt_string() retrieves a pointer to a single string from the</a>
-<a name="388"><span class="lineNum"> 388 </span> : : * strings block of the device tree blob at fdt.</a>
-<a name="389"><span class="lineNum"> 389 </span> : : *</a>
-<a name="390"><span class="lineNum"> 390 </span> : : * returns:</a>
-<a name="391"><span class="lineNum"> 391 </span> : : * a pointer to the string, on success</a>
-<a name="392"><span class="lineNum"> 392 </span> : : * NULL, if stroffset is out of bounds, or doesn't point to a valid string</a>
-<a name="393"><span class="lineNum"> 393 </span> : : */</a>
-<a name="394"><span class="lineNum"> 394 </span> : : const char *fdt_string(const void *fdt, int stroffset);</a>
-<a name="395"><span class="lineNum"> 395 </span> : : </a>
-<a name="396"><span class="lineNum"> 396 </span> : : /**</a>
-<a name="397"><span class="lineNum"> 397 </span> : : * fdt_find_max_phandle - find and return the highest phandle in a tree</a>
-<a name="398"><span class="lineNum"> 398 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="399"><span class="lineNum"> 399 </span> : : * @phandle: return location for the highest phandle value found in the tree</a>
-<a name="400"><span class="lineNum"> 400 </span> : : *</a>
-<a name="401"><span class="lineNum"> 401 </span> : : * fdt_find_max_phandle() finds the highest phandle value in the given device</a>
-<a name="402"><span class="lineNum"> 402 </span> : : * tree. The value returned in @phandle is only valid if the function returns</a>
-<a name="403"><span class="lineNum"> 403 </span> : : * success.</a>
-<a name="404"><span class="lineNum"> 404 </span> : : *</a>
-<a name="405"><span class="lineNum"> 405 </span> : : * returns:</a>
-<a name="406"><span class="lineNum"> 406 </span> : : * 0 on success or a negative error code on failure</a>
-<a name="407"><span class="lineNum"> 407 </span> : : */</a>
-<a name="408"><span class="lineNum"> 408 </span> : : int fdt_find_max_phandle(const void *fdt, uint32_t *phandle);</a>
+<a name="387"><span class="lineNum"> 387 </span> : : * fdt_get_max_phandle retrieves the highest phandle in the given</a>
+<a name="388"><span class="lineNum"> 388 </span> : : * device tree. This will ignore badly formatted phandles, or phandles</a>
+<a name="389"><span class="lineNum"> 389 </span> : : * with a value of 0 or -1.</a>
+<a name="390"><span class="lineNum"> 390 </span> : : *</a>
+<a name="391"><span class="lineNum"> 391 </span> : : * This function is deprecated in favour of fdt_find_max_phandle().</a>
+<a name="392"><span class="lineNum"> 392 </span> : : *</a>
+<a name="393"><span class="lineNum"> 393 </span> : : * returns:</a>
+<a name="394"><span class="lineNum"> 394 </span> : : * the highest phandle on success</a>
+<a name="395"><span class="lineNum"> 395 </span> : : * 0, if no phandle was found in the device tree</a>
+<a name="396"><span class="lineNum"> 396 </span> : : * -1, if an error occurred</a>
+<a name="397"><span class="lineNum"> 397 </span> : : */</a>
+<a name="398"><span class="lineNum"> 398 </span> : : static inline uint32_t fdt_get_max_phandle(const void *fdt)</a>
+<a name="399"><span class="lineNum"> 399 </span> : : {</a>
+<a name="400"><span class="lineNum"> 400 </span> : : uint32_t phandle;</a>
+<a name="401"><span class="lineNum"> 401 </span> : : int err;</a>
+<a name="402"><span class="lineNum"> 402 </span> : : </a>
+<a name="403"><span class="lineNum"> 403 </span> : : err = fdt_find_max_phandle(fdt, &amp;phandle);</a>
+<a name="404"><span class="lineNum"> 404 </span> : : if (err &lt; 0)</a>
+<a name="405"><span class="lineNum"> 405 </span> : : return (uint32_t)-1;</a>
+<a name="406"><span class="lineNum"> 406 </span> : : </a>
+<a name="407"><span class="lineNum"> 407 </span> : : return phandle;</a>
+<a name="408"><span class="lineNum"> 408 </span> : : }</a>
<a name="409"><span class="lineNum"> 409 </span> : : </a>
<a name="410"><span class="lineNum"> 410 </span> : : /**</a>
-<a name="411"><span class="lineNum"> 411 </span> : : * fdt_get_max_phandle - retrieves the highest phandle in a tree</a>
+<a name="411"><span class="lineNum"> 411 </span> : : * fdt_generate_phandle - return a new, unused phandle for a device tree blob</a>
<a name="412"><span class="lineNum"> 412 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="413"><span class="lineNum"> 413 </span> : : *</a>
-<a name="414"><span class="lineNum"> 414 </span> : : * fdt_get_max_phandle retrieves the highest phandle in the given</a>
-<a name="415"><span class="lineNum"> 415 </span> : : * device tree. This will ignore badly formatted phandles, or phandles</a>
-<a name="416"><span class="lineNum"> 416 </span> : : * with a value of 0 or -1.</a>
-<a name="417"><span class="lineNum"> 417 </span> : : *</a>
-<a name="418"><span class="lineNum"> 418 </span> : : * This function is deprecated in favour of fdt_find_max_phandle().</a>
+<a name="413"><span class="lineNum"> 413 </span> : : * @phandle: return location for the new phandle</a>
+<a name="414"><span class="lineNum"> 414 </span> : : *</a>
+<a name="415"><span class="lineNum"> 415 </span> : : * Walks the device tree blob and looks for the highest phandle value. On</a>
+<a name="416"><span class="lineNum"> 416 </span> : : * success, the new, unused phandle value (one higher than the previously</a>
+<a name="417"><span class="lineNum"> 417 </span> : : * highest phandle value in the device tree blob) will be returned in the</a>
+<a name="418"><span class="lineNum"> 418 </span> : : * @phandle parameter.</a>
<a name="419"><span class="lineNum"> 419 </span> : : *</a>
-<a name="420"><span class="lineNum"> 420 </span> : : * returns:</a>
-<a name="421"><span class="lineNum"> 421 </span> : : * the highest phandle on success</a>
-<a name="422"><span class="lineNum"> 422 </span> : : * 0, if no phandle was found in the device tree</a>
-<a name="423"><span class="lineNum"> 423 </span> : : * -1, if an error occurred</a>
-<a name="424"><span class="lineNum"> 424 </span> : : */</a>
-<a name="425"><span class="lineNum"> 425 </span> : : static inline uint32_t fdt_get_max_phandle(const void *fdt)</a>
-<a name="426"><span class="lineNum"> 426 </span> : : {</a>
-<a name="427"><span class="lineNum"> 427 </span> : : uint32_t phandle;</a>
-<a name="428"><span class="lineNum"> 428 </span> : : int err;</a>
-<a name="429"><span class="lineNum"> 429 </span> : : </a>
-<a name="430"><span class="lineNum"> 430 </span> : : err = fdt_find_max_phandle(fdt, &amp;phandle);</a>
-<a name="431"><span class="lineNum"> 431 </span> : : if (err &lt; 0)</a>
-<a name="432"><span class="lineNum"> 432 </span> : : return (uint32_t)-1;</a>
-<a name="433"><span class="lineNum"> 433 </span> : : </a>
-<a name="434"><span class="lineNum"> 434 </span> : : return phandle;</a>
-<a name="435"><span class="lineNum"> 435 </span> : : }</a>
+<a name="420"><span class="lineNum"> 420 </span> : : * Return: 0 on success or a negative error-code on failure</a>
+<a name="421"><span class="lineNum"> 421 </span> : : */</a>
+<a name="422"><span class="lineNum"> 422 </span> : : int fdt_generate_phandle(const void *fdt, uint32_t *phandle);</a>
+<a name="423"><span class="lineNum"> 423 </span> : : </a>
+<a name="424"><span class="lineNum"> 424 </span> : : /**</a>
+<a name="425"><span class="lineNum"> 425 </span> : : * fdt_num_mem_rsv - retrieve the number of memory reserve map entries</a>
+<a name="426"><span class="lineNum"> 426 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="427"><span class="lineNum"> 427 </span> : : *</a>
+<a name="428"><span class="lineNum"> 428 </span> : : * Returns the number of entries in the device tree blob's memory</a>
+<a name="429"><span class="lineNum"> 429 </span> : : * reservation map. This does not include the terminating 0,0 entry</a>
+<a name="430"><span class="lineNum"> 430 </span> : : * or any other (0,0) entries reserved for expansion.</a>
+<a name="431"><span class="lineNum"> 431 </span> : : *</a>
+<a name="432"><span class="lineNum"> 432 </span> : : * returns:</a>
+<a name="433"><span class="lineNum"> 433 </span> : : * the number of entries</a>
+<a name="434"><span class="lineNum"> 434 </span> : : */</a>
+<a name="435"><span class="lineNum"> 435 </span> : : int fdt_num_mem_rsv(const void *fdt);</a>
<a name="436"><span class="lineNum"> 436 </span> : : </a>
<a name="437"><span class="lineNum"> 437 </span> : : /**</a>
-<a name="438"><span class="lineNum"> 438 </span> : : * fdt_generate_phandle - return a new, unused phandle for a device tree blob</a>
+<a name="438"><span class="lineNum"> 438 </span> : : * fdt_get_mem_rsv - retrieve one memory reserve map entry</a>
<a name="439"><span class="lineNum"> 439 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="440"><span class="lineNum"> 440 </span> : : * @phandle: return location for the new phandle</a>
-<a name="441"><span class="lineNum"> 441 </span> : : *</a>
-<a name="442"><span class="lineNum"> 442 </span> : : * Walks the device tree blob and looks for the highest phandle value. On</a>
-<a name="443"><span class="lineNum"> 443 </span> : : * success, the new, unused phandle value (one higher than the previously</a>
-<a name="444"><span class="lineNum"> 444 </span> : : * highest phandle value in the device tree blob) will be returned in the</a>
-<a name="445"><span class="lineNum"> 445 </span> : : * @phandle parameter.</a>
-<a name="446"><span class="lineNum"> 446 </span> : : *</a>
-<a name="447"><span class="lineNum"> 447 </span> : : * Returns:</a>
-<a name="448"><span class="lineNum"> 448 </span> : : * 0 on success or a negative error-code on failure</a>
-<a name="449"><span class="lineNum"> 449 </span> : : */</a>
-<a name="450"><span class="lineNum"> 450 </span> : : int fdt_generate_phandle(const void *fdt, uint32_t *phandle);</a>
-<a name="451"><span class="lineNum"> 451 </span> : : </a>
-<a name="452"><span class="lineNum"> 452 </span> : : /**</a>
-<a name="453"><span class="lineNum"> 453 </span> : : * fdt_num_mem_rsv - retrieve the number of memory reserve map entries</a>
-<a name="454"><span class="lineNum"> 454 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="455"><span class="lineNum"> 455 </span> : : *</a>
-<a name="456"><span class="lineNum"> 456 </span> : : * Returns the number of entries in the device tree blob's memory</a>
-<a name="457"><span class="lineNum"> 457 </span> : : * reservation map. This does not include the terminating 0,0 entry</a>
-<a name="458"><span class="lineNum"> 458 </span> : : * or any other (0,0) entries reserved for expansion.</a>
-<a name="459"><span class="lineNum"> 459 </span> : : *</a>
-<a name="460"><span class="lineNum"> 460 </span> : : * returns:</a>
-<a name="461"><span class="lineNum"> 461 </span> : : * the number of entries</a>
-<a name="462"><span class="lineNum"> 462 </span> : : */</a>
-<a name="463"><span class="lineNum"> 463 </span> : : int fdt_num_mem_rsv(const void *fdt);</a>
-<a name="464"><span class="lineNum"> 464 </span> : : </a>
-<a name="465"><span class="lineNum"> 465 </span> : : /**</a>
-<a name="466"><span class="lineNum"> 466 </span> : : * fdt_get_mem_rsv - retrieve one memory reserve map entry</a>
-<a name="467"><span class="lineNum"> 467 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="468"><span class="lineNum"> 468 </span> : : * @address, @size: pointers to 64-bit variables</a>
-<a name="469"><span class="lineNum"> 469 </span> : : *</a>
-<a name="470"><span class="lineNum"> 470 </span> : : * On success, *address and *size will contain the address and size of</a>
-<a name="471"><span class="lineNum"> 471 </span> : : * the n-th reserve map entry from the device tree blob, in</a>
-<a name="472"><span class="lineNum"> 472 </span> : : * native-endian format.</a>
-<a name="473"><span class="lineNum"> 473 </span> : : *</a>
-<a name="474"><span class="lineNum"> 474 </span> : : * returns:</a>
-<a name="475"><span class="lineNum"> 475 </span> : : * 0, on success</a>
-<a name="476"><span class="lineNum"> 476 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="477"><span class="lineNum"> 477 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="478"><span class="lineNum"> 478 </span> : : * -FDT_ERR_BADSTATE, standard meanings</a>
-<a name="479"><span class="lineNum"> 479 </span> : : */</a>
-<a name="480"><span class="lineNum"> 480 </span> : : int fdt_get_mem_rsv(const void *fdt, int n, uint64_t *address, uint64_t *size);</a>
-<a name="481"><span class="lineNum"> 481 </span> : : </a>
-<a name="482"><span class="lineNum"> 482 </span> : : /**</a>
-<a name="483"><span class="lineNum"> 483 </span> : : * fdt_subnode_offset_namelen - find a subnode based on substring</a>
-<a name="484"><span class="lineNum"> 484 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="485"><span class="lineNum"> 485 </span> : : * @parentoffset: structure block offset of a node</a>
-<a name="486"><span class="lineNum"> 486 </span> : : * @name: name of the subnode to locate</a>
-<a name="487"><span class="lineNum"> 487 </span> : : * @namelen: number of characters of name to consider</a>
-<a name="488"><span class="lineNum"> 488 </span> : : *</a>
-<a name="489"><span class="lineNum"> 489 </span> : : * Identical to fdt_subnode_offset(), but only examine the first</a>
-<a name="490"><span class="lineNum"> 490 </span> : : * namelen characters of name for matching the subnode name. This is</a>
-<a name="491"><span class="lineNum"> 491 </span> : : * useful for finding subnodes based on a portion of a larger string,</a>
-<a name="492"><span class="lineNum"> 492 </span> : : * such as a full path.</a>
-<a name="493"><span class="lineNum"> 493 </span> : : */</a>
-<a name="494"><span class="lineNum"> 494 </span> : : #ifndef SWIG /* Not available in Python */</a>
-<a name="495"><span class="lineNum"> 495 </span> : : int fdt_subnode_offset_namelen(const void *fdt, int parentoffset,</a>
-<a name="496"><span class="lineNum"> 496 </span> : : const char *name, int namelen);</a>
-<a name="497"><span class="lineNum"> 497 </span> : : #endif</a>
-<a name="498"><span class="lineNum"> 498 </span> : : /**</a>
-<a name="499"><span class="lineNum"> 499 </span> : : * fdt_subnode_offset - find a subnode of a given node</a>
-<a name="500"><span class="lineNum"> 500 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="501"><span class="lineNum"> 501 </span> : : * @parentoffset: structure block offset of a node</a>
-<a name="502"><span class="lineNum"> 502 </span> : : * @name: name of the subnode to locate</a>
-<a name="503"><span class="lineNum"> 503 </span> : : *</a>
-<a name="504"><span class="lineNum"> 504 </span> : : * fdt_subnode_offset() finds a subnode of the node at structure block</a>
-<a name="505"><span class="lineNum"> 505 </span> : : * offset parentoffset with the given name. name may include a unit</a>
-<a name="506"><span class="lineNum"> 506 </span> : : * address, in which case fdt_subnode_offset() will find the subnode</a>
-<a name="507"><span class="lineNum"> 507 </span> : : * with that unit address, or the unit address may be omitted, in</a>
-<a name="508"><span class="lineNum"> 508 </span> : : * which case fdt_subnode_offset() will find an arbitrary subnode</a>
-<a name="509"><span class="lineNum"> 509 </span> : : * whose name excluding unit address matches the given name.</a>
-<a name="510"><span class="lineNum"> 510 </span> : : *</a>
-<a name="511"><span class="lineNum"> 511 </span> : : * returns:</a>
-<a name="512"><span class="lineNum"> 512 </span> : : * structure block offset of the requested subnode (&gt;=0), on success</a>
-<a name="513"><span class="lineNum"> 513 </span> : : * -FDT_ERR_NOTFOUND, if the requested subnode does not exist</a>
-<a name="514"><span class="lineNum"> 514 </span> : : * -FDT_ERR_BADOFFSET, if parentoffset did not point to an FDT_BEGIN_NODE</a>
-<a name="515"><span class="lineNum"> 515 </span> : : * tag</a>
-<a name="516"><span class="lineNum"> 516 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="517"><span class="lineNum"> 517 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="518"><span class="lineNum"> 518 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="519"><span class="lineNum"> 519 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="520"><span class="lineNum"> 520 </span> : : * -FDT_ERR_TRUNCATED, standard meanings.</a>
-<a name="521"><span class="lineNum"> 521 </span> : : */</a>
-<a name="522"><span class="lineNum"> 522 </span> : : int fdt_subnode_offset(const void *fdt, int parentoffset, const char *name);</a>
-<a name="523"><span class="lineNum"> 523 </span> : : </a>
-<a name="524"><span class="lineNum"> 524 </span> : : /**</a>
-<a name="525"><span class="lineNum"> 525 </span> : : * fdt_path_offset_namelen - find a tree node by its full path</a>
-<a name="526"><span class="lineNum"> 526 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="527"><span class="lineNum"> 527 </span> : : * @path: full path of the node to locate</a>
-<a name="528"><span class="lineNum"> 528 </span> : : * @namelen: number of characters of path to consider</a>
-<a name="529"><span class="lineNum"> 529 </span> : : *</a>
-<a name="530"><span class="lineNum"> 530 </span> : : * Identical to fdt_path_offset(), but only consider the first namelen</a>
-<a name="531"><span class="lineNum"> 531 </span> : : * characters of path as the path name.</a>
-<a name="532"><span class="lineNum"> 532 </span> : : */</a>
-<a name="533"><span class="lineNum"> 533 </span> : : #ifndef SWIG /* Not available in Python */</a>
-<a name="534"><span class="lineNum"> 534 </span> : : int fdt_path_offset_namelen(const void *fdt, const char *path, int namelen);</a>
-<a name="535"><span class="lineNum"> 535 </span> : : #endif</a>
-<a name="536"><span class="lineNum"> 536 </span> : : </a>
-<a name="537"><span class="lineNum"> 537 </span> : : /**</a>
-<a name="538"><span class="lineNum"> 538 </span> : : * fdt_path_offset - find a tree node by its full path</a>
-<a name="539"><span class="lineNum"> 539 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="540"><span class="lineNum"> 540 </span> : : * @path: full path of the node to locate</a>
-<a name="541"><span class="lineNum"> 541 </span> : : *</a>
-<a name="542"><span class="lineNum"> 542 </span> : : * fdt_path_offset() finds a node of a given path in the device tree.</a>
-<a name="543"><span class="lineNum"> 543 </span> : : * Each path component may omit the unit address portion, but the</a>
-<a name="544"><span class="lineNum"> 544 </span> : : * results of this are undefined if any such path component is</a>
-<a name="545"><span class="lineNum"> 545 </span> : : * ambiguous (that is if there are multiple nodes at the relevant</a>
-<a name="546"><span class="lineNum"> 546 </span> : : * level matching the given component, differentiated only by unit</a>
-<a name="547"><span class="lineNum"> 547 </span> : : * address).</a>
-<a name="548"><span class="lineNum"> 548 </span> : : *</a>
-<a name="549"><span class="lineNum"> 549 </span> : : * returns:</a>
-<a name="550"><span class="lineNum"> 550 </span> : : * structure block offset of the node with the requested path (&gt;=0), on</a>
-<a name="551"><span class="lineNum"> 551 </span> : : * success</a>
-<a name="552"><span class="lineNum"> 552 </span> : : * -FDT_ERR_BADPATH, given path does not begin with '/' or is invalid</a>
-<a name="553"><span class="lineNum"> 553 </span> : : * -FDT_ERR_NOTFOUND, if the requested node does not exist</a>
-<a name="554"><span class="lineNum"> 554 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="555"><span class="lineNum"> 555 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="556"><span class="lineNum"> 556 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="557"><span class="lineNum"> 557 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="558"><span class="lineNum"> 558 </span> : : * -FDT_ERR_TRUNCATED, standard meanings.</a>
-<a name="559"><span class="lineNum"> 559 </span> : : */</a>
-<a name="560"><span class="lineNum"> 560 </span> : : int fdt_path_offset(const void *fdt, const char *path);</a>
-<a name="561"><span class="lineNum"> 561 </span> : : </a>
-<a name="562"><span class="lineNum"> 562 </span> : : /**</a>
-<a name="563"><span class="lineNum"> 563 </span> : : * fdt_get_name - retrieve the name of a given node</a>
-<a name="564"><span class="lineNum"> 564 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="565"><span class="lineNum"> 565 </span> : : * @nodeoffset: structure block offset of the starting node</a>
-<a name="566"><span class="lineNum"> 566 </span> : : * @lenp: pointer to an integer variable (will be overwritten) or NULL</a>
-<a name="567"><span class="lineNum"> 567 </span> : : *</a>
-<a name="568"><span class="lineNum"> 568 </span> : : * fdt_get_name() retrieves the name (including unit address) of the</a>
-<a name="569"><span class="lineNum"> 569 </span> : : * device tree node at structure block offset nodeoffset. If lenp is</a>
-<a name="570"><span class="lineNum"> 570 </span> : : * non-NULL, the length of this name is also returned, in the integer</a>
-<a name="571"><span class="lineNum"> 571 </span> : : * pointed to by lenp.</a>
+<a name="440"><span class="lineNum"> 440 </span> : : * @n: index of reserve map entry</a>
+<a name="441"><span class="lineNum"> 441 </span> : : * @address: pointer to 64-bit variable to hold the start address</a>
+<a name="442"><span class="lineNum"> 442 </span> : : * @size: pointer to 64-bit variable to hold the size of the entry</a>
+<a name="443"><span class="lineNum"> 443 </span> : : *</a>
+<a name="444"><span class="lineNum"> 444 </span> : : * On success, @address and @size will contain the address and size of</a>
+<a name="445"><span class="lineNum"> 445 </span> : : * the n-th reserve map entry from the device tree blob, in</a>
+<a name="446"><span class="lineNum"> 446 </span> : : * native-endian format.</a>
+<a name="447"><span class="lineNum"> 447 </span> : : *</a>
+<a name="448"><span class="lineNum"> 448 </span> : : * returns:</a>
+<a name="449"><span class="lineNum"> 449 </span> : : * 0, on success</a>
+<a name="450"><span class="lineNum"> 450 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="451"><span class="lineNum"> 451 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="452"><span class="lineNum"> 452 </span> : : * -FDT_ERR_BADSTATE, standard meanings</a>
+<a name="453"><span class="lineNum"> 453 </span> : : */</a>
+<a name="454"><span class="lineNum"> 454 </span> : : int fdt_get_mem_rsv(const void *fdt, int n, uint64_t *address, uint64_t *size);</a>
+<a name="455"><span class="lineNum"> 455 </span> : : </a>
+<a name="456"><span class="lineNum"> 456 </span> : : /**</a>
+<a name="457"><span class="lineNum"> 457 </span> : : * fdt_subnode_offset_namelen - find a subnode based on substring</a>
+<a name="458"><span class="lineNum"> 458 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="459"><span class="lineNum"> 459 </span> : : * @parentoffset: structure block offset of a node</a>
+<a name="460"><span class="lineNum"> 460 </span> : : * @name: name of the subnode to locate</a>
+<a name="461"><span class="lineNum"> 461 </span> : : * @namelen: number of characters of name to consider</a>
+<a name="462"><span class="lineNum"> 462 </span> : : *</a>
+<a name="463"><span class="lineNum"> 463 </span> : : * Identical to fdt_subnode_offset(), but only examine the first</a>
+<a name="464"><span class="lineNum"> 464 </span> : : * namelen characters of name for matching the subnode name. This is</a>
+<a name="465"><span class="lineNum"> 465 </span> : : * useful for finding subnodes based on a portion of a larger string,</a>
+<a name="466"><span class="lineNum"> 466 </span> : : * such as a full path.</a>
+<a name="467"><span class="lineNum"> 467 </span> : : *</a>
+<a name="468"><span class="lineNum"> 468 </span> : : * Return: offset of the subnode or -FDT_ERR_NOTFOUND if name not found.</a>
+<a name="469"><span class="lineNum"> 469 </span> : : */</a>
+<a name="470"><span class="lineNum"> 470 </span> : : #ifndef SWIG /* Not available in Python */</a>
+<a name="471"><span class="lineNum"> 471 </span> : : int fdt_subnode_offset_namelen(const void *fdt, int parentoffset,</a>
+<a name="472"><span class="lineNum"> 472 </span> : : const char *name, int namelen);</a>
+<a name="473"><span class="lineNum"> 473 </span> : : #endif</a>
+<a name="474"><span class="lineNum"> 474 </span> : : /**</a>
+<a name="475"><span class="lineNum"> 475 </span> : : * fdt_subnode_offset - find a subnode of a given node</a>
+<a name="476"><span class="lineNum"> 476 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="477"><span class="lineNum"> 477 </span> : : * @parentoffset: structure block offset of a node</a>
+<a name="478"><span class="lineNum"> 478 </span> : : * @name: name of the subnode to locate</a>
+<a name="479"><span class="lineNum"> 479 </span> : : *</a>
+<a name="480"><span class="lineNum"> 480 </span> : : * fdt_subnode_offset() finds a subnode of the node at structure block</a>
+<a name="481"><span class="lineNum"> 481 </span> : : * offset parentoffset with the given name. name may include a unit</a>
+<a name="482"><span class="lineNum"> 482 </span> : : * address, in which case fdt_subnode_offset() will find the subnode</a>
+<a name="483"><span class="lineNum"> 483 </span> : : * with that unit address, or the unit address may be omitted, in</a>
+<a name="484"><span class="lineNum"> 484 </span> : : * which case fdt_subnode_offset() will find an arbitrary subnode</a>
+<a name="485"><span class="lineNum"> 485 </span> : : * whose name excluding unit address matches the given name.</a>
+<a name="486"><span class="lineNum"> 486 </span> : : *</a>
+<a name="487"><span class="lineNum"> 487 </span> : : * returns:</a>
+<a name="488"><span class="lineNum"> 488 </span> : : * structure block offset of the requested subnode (&gt;=0), on success</a>
+<a name="489"><span class="lineNum"> 489 </span> : : * -FDT_ERR_NOTFOUND, if the requested subnode does not exist</a>
+<a name="490"><span class="lineNum"> 490 </span> : : * -FDT_ERR_BADOFFSET, if parentoffset did not point to an FDT_BEGIN_NODE</a>
+<a name="491"><span class="lineNum"> 491 </span> : : * tag</a>
+<a name="492"><span class="lineNum"> 492 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="493"><span class="lineNum"> 493 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="494"><span class="lineNum"> 494 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="495"><span class="lineNum"> 495 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="496"><span class="lineNum"> 496 </span> : : * -FDT_ERR_TRUNCATED, standard meanings.</a>
+<a name="497"><span class="lineNum"> 497 </span> : : */</a>
+<a name="498"><span class="lineNum"> 498 </span> : : int fdt_subnode_offset(const void *fdt, int parentoffset, const char *name);</a>
+<a name="499"><span class="lineNum"> 499 </span> : : </a>
+<a name="500"><span class="lineNum"> 500 </span> : : /**</a>
+<a name="501"><span class="lineNum"> 501 </span> : : * fdt_path_offset_namelen - find a tree node by its full path</a>
+<a name="502"><span class="lineNum"> 502 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="503"><span class="lineNum"> 503 </span> : : * @path: full path of the node to locate</a>
+<a name="504"><span class="lineNum"> 504 </span> : : * @namelen: number of characters of path to consider</a>
+<a name="505"><span class="lineNum"> 505 </span> : : *</a>
+<a name="506"><span class="lineNum"> 506 </span> : : * Identical to fdt_path_offset(), but only consider the first namelen</a>
+<a name="507"><span class="lineNum"> 507 </span> : : * characters of path as the path name.</a>
+<a name="508"><span class="lineNum"> 508 </span> : : *</a>
+<a name="509"><span class="lineNum"> 509 </span> : : * Return: offset of the node or negative libfdt error value otherwise</a>
+<a name="510"><span class="lineNum"> 510 </span> : : */</a>
+<a name="511"><span class="lineNum"> 511 </span> : : #ifndef SWIG /* Not available in Python */</a>
+<a name="512"><span class="lineNum"> 512 </span> : : int fdt_path_offset_namelen(const void *fdt, const char *path, int namelen);</a>
+<a name="513"><span class="lineNum"> 513 </span> : : #endif</a>
+<a name="514"><span class="lineNum"> 514 </span> : : </a>
+<a name="515"><span class="lineNum"> 515 </span> : : /**</a>
+<a name="516"><span class="lineNum"> 516 </span> : : * fdt_path_offset - find a tree node by its full path</a>
+<a name="517"><span class="lineNum"> 517 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="518"><span class="lineNum"> 518 </span> : : * @path: full path of the node to locate</a>
+<a name="519"><span class="lineNum"> 519 </span> : : *</a>
+<a name="520"><span class="lineNum"> 520 </span> : : * fdt_path_offset() finds a node of a given path in the device tree.</a>
+<a name="521"><span class="lineNum"> 521 </span> : : * Each path component may omit the unit address portion, but the</a>
+<a name="522"><span class="lineNum"> 522 </span> : : * results of this are undefined if any such path component is</a>
+<a name="523"><span class="lineNum"> 523 </span> : : * ambiguous (that is if there are multiple nodes at the relevant</a>
+<a name="524"><span class="lineNum"> 524 </span> : : * level matching the given component, differentiated only by unit</a>
+<a name="525"><span class="lineNum"> 525 </span> : : * address).</a>
+<a name="526"><span class="lineNum"> 526 </span> : : *</a>
+<a name="527"><span class="lineNum"> 527 </span> : : * returns:</a>
+<a name="528"><span class="lineNum"> 528 </span> : : * structure block offset of the node with the requested path (&gt;=0), on</a>
+<a name="529"><span class="lineNum"> 529 </span> : : * success</a>
+<a name="530"><span class="lineNum"> 530 </span> : : * -FDT_ERR_BADPATH, given path does not begin with '/' or is invalid</a>
+<a name="531"><span class="lineNum"> 531 </span> : : * -FDT_ERR_NOTFOUND, if the requested node does not exist</a>
+<a name="532"><span class="lineNum"> 532 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="533"><span class="lineNum"> 533 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="534"><span class="lineNum"> 534 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="535"><span class="lineNum"> 535 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="536"><span class="lineNum"> 536 </span> : : * -FDT_ERR_TRUNCATED, standard meanings.</a>
+<a name="537"><span class="lineNum"> 537 </span> : : */</a>
+<a name="538"><span class="lineNum"> 538 </span> : : int fdt_path_offset(const void *fdt, const char *path);</a>
+<a name="539"><span class="lineNum"> 539 </span> : : </a>
+<a name="540"><span class="lineNum"> 540 </span> : : /**</a>
+<a name="541"><span class="lineNum"> 541 </span> : : * fdt_get_name - retrieve the name of a given node</a>
+<a name="542"><span class="lineNum"> 542 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="543"><span class="lineNum"> 543 </span> : : * @nodeoffset: structure block offset of the starting node</a>
+<a name="544"><span class="lineNum"> 544 </span> : : * @lenp: pointer to an integer variable (will be overwritten) or NULL</a>
+<a name="545"><span class="lineNum"> 545 </span> : : *</a>
+<a name="546"><span class="lineNum"> 546 </span> : : * fdt_get_name() retrieves the name (including unit address) of the</a>
+<a name="547"><span class="lineNum"> 547 </span> : : * device tree node at structure block offset nodeoffset. If lenp is</a>
+<a name="548"><span class="lineNum"> 548 </span> : : * non-NULL, the length of this name is also returned, in the integer</a>
+<a name="549"><span class="lineNum"> 549 </span> : : * pointed to by lenp.</a>
+<a name="550"><span class="lineNum"> 550 </span> : : *</a>
+<a name="551"><span class="lineNum"> 551 </span> : : * returns:</a>
+<a name="552"><span class="lineNum"> 552 </span> : : * pointer to the node's name, on success</a>
+<a name="553"><span class="lineNum"> 553 </span> : : * If lenp is non-NULL, *lenp contains the length of that name</a>
+<a name="554"><span class="lineNum"> 554 </span> : : * (&gt;=0)</a>
+<a name="555"><span class="lineNum"> 555 </span> : : * NULL, on error</a>
+<a name="556"><span class="lineNum"> 556 </span> : : * if lenp is non-NULL *lenp contains an error code (&lt;0):</a>
+<a name="557"><span class="lineNum"> 557 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE</a>
+<a name="558"><span class="lineNum"> 558 </span> : : * tag</a>
+<a name="559"><span class="lineNum"> 559 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="560"><span class="lineNum"> 560 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="561"><span class="lineNum"> 561 </span> : : * -FDT_ERR_BADSTATE, standard meanings</a>
+<a name="562"><span class="lineNum"> 562 </span> : : */</a>
+<a name="563"><span class="lineNum"> 563 </span> : : const char *fdt_get_name(const void *fdt, int nodeoffset, int *lenp);</a>
+<a name="564"><span class="lineNum"> 564 </span> : : </a>
+<a name="565"><span class="lineNum"> 565 </span> : : /**</a>
+<a name="566"><span class="lineNum"> 566 </span> : : * fdt_first_property_offset - find the offset of a node's first property</a>
+<a name="567"><span class="lineNum"> 567 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="568"><span class="lineNum"> 568 </span> : : * @nodeoffset: structure block offset of a node</a>
+<a name="569"><span class="lineNum"> 569 </span> : : *</a>
+<a name="570"><span class="lineNum"> 570 </span> : : * fdt_first_property_offset() finds the first property of the node at</a>
+<a name="571"><span class="lineNum"> 571 </span> : : * the given structure block offset.</a>
<a name="572"><span class="lineNum"> 572 </span> : : *</a>
<a name="573"><span class="lineNum"> 573 </span> : : * returns:</a>
-<a name="574"><span class="lineNum"> 574 </span> : : * pointer to the node's name, on success</a>
-<a name="575"><span class="lineNum"> 575 </span> : : * If lenp is non-NULL, *lenp contains the length of that name</a>
-<a name="576"><span class="lineNum"> 576 </span> : : * (&gt;=0)</a>
-<a name="577"><span class="lineNum"> 577 </span> : : * NULL, on error</a>
-<a name="578"><span class="lineNum"> 578 </span> : : * if lenp is non-NULL *lenp contains an error code (&lt;0):</a>
-<a name="579"><span class="lineNum"> 579 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE</a>
-<a name="580"><span class="lineNum"> 580 </span> : : * tag</a>
-<a name="581"><span class="lineNum"> 581 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="582"><span class="lineNum"> 582 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="583"><span class="lineNum"> 583 </span> : : * -FDT_ERR_BADSTATE, standard meanings</a>
-<a name="584"><span class="lineNum"> 584 </span> : : */</a>
-<a name="585"><span class="lineNum"> 585 </span> : : const char *fdt_get_name(const void *fdt, int nodeoffset, int *lenp);</a>
-<a name="586"><span class="lineNum"> 586 </span> : : </a>
-<a name="587"><span class="lineNum"> 587 </span> : : /**</a>
-<a name="588"><span class="lineNum"> 588 </span> : : * fdt_first_property_offset - find the offset of a node's first property</a>
-<a name="589"><span class="lineNum"> 589 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="590"><span class="lineNum"> 590 </span> : : * @nodeoffset: structure block offset of a node</a>
-<a name="591"><span class="lineNum"> 591 </span> : : *</a>
-<a name="592"><span class="lineNum"> 592 </span> : : * fdt_first_property_offset() finds the first property of the node at</a>
-<a name="593"><span class="lineNum"> 593 </span> : : * the given structure block offset.</a>
-<a name="594"><span class="lineNum"> 594 </span> : : *</a>
-<a name="595"><span class="lineNum"> 595 </span> : : * returns:</a>
-<a name="596"><span class="lineNum"> 596 </span> : : * structure block offset of the property (&gt;=0), on success</a>
-<a name="597"><span class="lineNum"> 597 </span> : : * -FDT_ERR_NOTFOUND, if the requested node has no properties</a>
-<a name="598"><span class="lineNum"> 598 </span> : : * -FDT_ERR_BADOFFSET, if nodeoffset did not point to an FDT_BEGIN_NODE tag</a>
-<a name="599"><span class="lineNum"> 599 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="600"><span class="lineNum"> 600 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="601"><span class="lineNum"> 601 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="602"><span class="lineNum"> 602 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="603"><span class="lineNum"> 603 </span> : : * -FDT_ERR_TRUNCATED, standard meanings.</a>
-<a name="604"><span class="lineNum"> 604 </span> : : */</a>
-<a name="605"><span class="lineNum"> 605 </span> : : int fdt_first_property_offset(const void *fdt, int nodeoffset);</a>
-<a name="606"><span class="lineNum"> 606 </span> : : </a>
-<a name="607"><span class="lineNum"> 607 </span> : : /**</a>
-<a name="608"><span class="lineNum"> 608 </span> : : * fdt_next_property_offset - step through a node's properties</a>
-<a name="609"><span class="lineNum"> 609 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="610"><span class="lineNum"> 610 </span> : : * @offset: structure block offset of a property</a>
-<a name="611"><span class="lineNum"> 611 </span> : : *</a>
-<a name="612"><span class="lineNum"> 612 </span> : : * fdt_next_property_offset() finds the property immediately after the</a>
-<a name="613"><span class="lineNum"> 613 </span> : : * one at the given structure block offset. This will be a property</a>
-<a name="614"><span class="lineNum"> 614 </span> : : * of the same node as the given property.</a>
-<a name="615"><span class="lineNum"> 615 </span> : : *</a>
-<a name="616"><span class="lineNum"> 616 </span> : : * returns:</a>
-<a name="617"><span class="lineNum"> 617 </span> : : * structure block offset of the next property (&gt;=0), on success</a>
-<a name="618"><span class="lineNum"> 618 </span> : : * -FDT_ERR_NOTFOUND, if the given property is the last in its node</a>
-<a name="619"><span class="lineNum"> 619 </span> : : * -FDT_ERR_BADOFFSET, if nodeoffset did not point to an FDT_PROP tag</a>
-<a name="620"><span class="lineNum"> 620 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="621"><span class="lineNum"> 621 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="622"><span class="lineNum"> 622 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="623"><span class="lineNum"> 623 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="624"><span class="lineNum"> 624 </span> : : * -FDT_ERR_TRUNCATED, standard meanings.</a>
-<a name="625"><span class="lineNum"> 625 </span> : : */</a>
-<a name="626"><span class="lineNum"> 626 </span> : : int fdt_next_property_offset(const void *fdt, int offset);</a>
-<a name="627"><span class="lineNum"> 627 </span> : : </a>
-<a name="628"><span class="lineNum"> 628 </span> : : /**</a>
-<a name="629"><span class="lineNum"> 629 </span> : : * fdt_for_each_property_offset - iterate over all properties of a node</a>
-<a name="630"><span class="lineNum"> 630 </span> : : *</a>
-<a name="631"><span class="lineNum"> 631 </span> : : * @property_offset: property offset (int, lvalue)</a>
-<a name="632"><span class="lineNum"> 632 </span> : : * @fdt: FDT blob (const void *)</a>
-<a name="633"><span class="lineNum"> 633 </span> : : * @node: node offset (int)</a>
-<a name="634"><span class="lineNum"> 634 </span> : : *</a>
-<a name="635"><span class="lineNum"> 635 </span> : : * This is actually a wrapper around a for loop and would be used like so:</a>
-<a name="636"><span class="lineNum"> 636 </span> : : *</a>
-<a name="637"><span class="lineNum"> 637 </span> : : * fdt_for_each_property_offset(property, fdt, node) {</a>
-<a name="638"><span class="lineNum"> 638 </span> : : * Use property</a>
-<a name="639"><span class="lineNum"> 639 </span> : : * ...</a>
-<a name="640"><span class="lineNum"> 640 </span> : : * }</a>
-<a name="641"><span class="lineNum"> 641 </span> : : *</a>
-<a name="642"><span class="lineNum"> 642 </span> : : * if ((property &lt; 0) &amp;&amp; (property != -FDT_ERR_NOTFOUND)) {</a>
-<a name="643"><span class="lineNum"> 643 </span> : : * Error handling</a>
-<a name="644"><span class="lineNum"> 644 </span> : : * }</a>
-<a name="645"><span class="lineNum"> 645 </span> : : *</a>
-<a name="646"><span class="lineNum"> 646 </span> : : * Note that this is implemented as a macro and property is used as</a>
-<a name="647"><span class="lineNum"> 647 </span> : : * iterator in the loop. The node variable can be constant or even a</a>
-<a name="648"><span class="lineNum"> 648 </span> : : * literal.</a>
-<a name="649"><span class="lineNum"> 649 </span> : : */</a>
-<a name="650"><span class="lineNum"> 650 </span> : : #define fdt_for_each_property_offset(property, fdt, node) \</a>
-<a name="651"><span class="lineNum"> 651 </span> : : for (property = fdt_first_property_offset(fdt, node); \</a>
-<a name="652"><span class="lineNum"> 652 </span> : : property &gt;= 0; \</a>
-<a name="653"><span class="lineNum"> 653 </span> : : property = fdt_next_property_offset(fdt, property))</a>
-<a name="654"><span class="lineNum"> 654 </span> : : </a>
-<a name="655"><span class="lineNum"> 655 </span> : : /**</a>
-<a name="656"><span class="lineNum"> 656 </span> : : * fdt_get_property_by_offset - retrieve the property at a given offset</a>
-<a name="657"><span class="lineNum"> 657 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="658"><span class="lineNum"> 658 </span> : : * @offset: offset of the property to retrieve</a>
-<a name="659"><span class="lineNum"> 659 </span> : : * @lenp: pointer to an integer variable (will be overwritten) or NULL</a>
-<a name="660"><span class="lineNum"> 660 </span> : : *</a>
-<a name="661"><span class="lineNum"> 661 </span> : : * fdt_get_property_by_offset() retrieves a pointer to the</a>
-<a name="662"><span class="lineNum"> 662 </span> : : * fdt_property structure within the device tree blob at the given</a>
-<a name="663"><span class="lineNum"> 663 </span> : : * offset. If lenp is non-NULL, the length of the property value is</a>
-<a name="664"><span class="lineNum"> 664 </span> : : * also returned, in the integer pointed to by lenp.</a>
-<a name="665"><span class="lineNum"> 665 </span> : : *</a>
-<a name="666"><span class="lineNum"> 666 </span> : : * Note that this code only works on device tree versions &gt;= 16. fdt_getprop()</a>
-<a name="667"><span class="lineNum"> 667 </span> : : * works on all versions.</a>
-<a name="668"><span class="lineNum"> 668 </span> : : *</a>
-<a name="669"><span class="lineNum"> 669 </span> : : * returns:</a>
-<a name="670"><span class="lineNum"> 670 </span> : : * pointer to the structure representing the property</a>
-<a name="671"><span class="lineNum"> 671 </span> : : * if lenp is non-NULL, *lenp contains the length of the property</a>
-<a name="672"><span class="lineNum"> 672 </span> : : * value (&gt;=0)</a>
-<a name="673"><span class="lineNum"> 673 </span> : : * NULL, on error</a>
-<a name="674"><span class="lineNum"> 674 </span> : : * if lenp is non-NULL, *lenp contains an error code (&lt;0):</a>
-<a name="675"><span class="lineNum"> 675 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_PROP tag</a>
-<a name="676"><span class="lineNum"> 676 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="677"><span class="lineNum"> 677 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="678"><span class="lineNum"> 678 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="679"><span class="lineNum"> 679 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="680"><span class="lineNum"> 680 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="681"><span class="lineNum"> 681 </span> : : */</a>
-<a name="682"><span class="lineNum"> 682 </span> : : const struct fdt_property *fdt_get_property_by_offset(const void *fdt,</a>
-<a name="683"><span class="lineNum"> 683 </span> : : int offset,</a>
-<a name="684"><span class="lineNum"> 684 </span> : : int *lenp);</a>
-<a name="685"><span class="lineNum"> 685 </span> : : </a>
-<a name="686"><span class="lineNum"> 686 </span> : : /**</a>
-<a name="687"><span class="lineNum"> 687 </span> : : * fdt_get_property_namelen - find a property based on substring</a>
-<a name="688"><span class="lineNum"> 688 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="689"><span class="lineNum"> 689 </span> : : * @nodeoffset: offset of the node whose property to find</a>
-<a name="690"><span class="lineNum"> 690 </span> : : * @name: name of the property to find</a>
-<a name="691"><span class="lineNum"> 691 </span> : : * @namelen: number of characters of name to consider</a>
-<a name="692"><span class="lineNum"> 692 </span> : : * @lenp: pointer to an integer variable (will be overwritten) or NULL</a>
-<a name="693"><span class="lineNum"> 693 </span> : : *</a>
-<a name="694"><span class="lineNum"> 694 </span> : : * Identical to fdt_get_property(), but only examine the first namelen</a>
-<a name="695"><span class="lineNum"> 695 </span> : : * characters of name for matching the property name.</a>
-<a name="696"><span class="lineNum"> 696 </span> : : */</a>
-<a name="697"><span class="lineNum"> 697 </span> : : #ifndef SWIG /* Not available in Python */</a>
-<a name="698"><span class="lineNum"> 698 </span> : : const struct fdt_property *fdt_get_property_namelen(const void *fdt,</a>
-<a name="699"><span class="lineNum"> 699 </span> : : int nodeoffset,</a>
-<a name="700"><span class="lineNum"> 700 </span> : : const char *name,</a>
-<a name="701"><span class="lineNum"> 701 </span> : : int namelen, int *lenp);</a>
-<a name="702"><span class="lineNum"> 702 </span> : : #endif</a>
-<a name="703"><span class="lineNum"> 703 </span> : : </a>
-<a name="704"><span class="lineNum"> 704 </span> : : /**</a>
-<a name="705"><span class="lineNum"> 705 </span> : : * fdt_get_property - find a given property in a given node</a>
-<a name="706"><span class="lineNum"> 706 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="707"><span class="lineNum"> 707 </span> : : * @nodeoffset: offset of the node whose property to find</a>
-<a name="708"><span class="lineNum"> 708 </span> : : * @name: name of the property to find</a>
-<a name="709"><span class="lineNum"> 709 </span> : : * @lenp: pointer to an integer variable (will be overwritten) or NULL</a>
-<a name="710"><span class="lineNum"> 710 </span> : : *</a>
-<a name="711"><span class="lineNum"> 711 </span> : : * fdt_get_property() retrieves a pointer to the fdt_property</a>
-<a name="712"><span class="lineNum"> 712 </span> : : * structure within the device tree blob corresponding to the property</a>
-<a name="713"><span class="lineNum"> 713 </span> : : * named 'name' of the node at offset nodeoffset. If lenp is</a>
-<a name="714"><span class="lineNum"> 714 </span> : : * non-NULL, the length of the property value is also returned, in the</a>
-<a name="715"><span class="lineNum"> 715 </span> : : * integer pointed to by lenp.</a>
-<a name="716"><span class="lineNum"> 716 </span> : : *</a>
-<a name="717"><span class="lineNum"> 717 </span> : : * returns:</a>
-<a name="718"><span class="lineNum"> 718 </span> : : * pointer to the structure representing the property</a>
-<a name="719"><span class="lineNum"> 719 </span> : : * if lenp is non-NULL, *lenp contains the length of the property</a>
-<a name="720"><span class="lineNum"> 720 </span> : : * value (&gt;=0)</a>
-<a name="721"><span class="lineNum"> 721 </span> : : * NULL, on error</a>
-<a name="722"><span class="lineNum"> 722 </span> : : * if lenp is non-NULL, *lenp contains an error code (&lt;0):</a>
-<a name="723"><span class="lineNum"> 723 </span> : : * -FDT_ERR_NOTFOUND, node does not have named property</a>
-<a name="724"><span class="lineNum"> 724 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE</a>
-<a name="725"><span class="lineNum"> 725 </span> : : * tag</a>
-<a name="726"><span class="lineNum"> 726 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="727"><span class="lineNum"> 727 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="728"><span class="lineNum"> 728 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="729"><span class="lineNum"> 729 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="730"><span class="lineNum"> 730 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="731"><span class="lineNum"> 731 </span> : : */</a>
-<a name="732"><span class="lineNum"> 732 </span> : : const struct fdt_property *fdt_get_property(const void *fdt, int nodeoffset,</a>
-<a name="733"><span class="lineNum"> 733 </span> : : const char *name, int *lenp);</a>
-<a name="734"><span class="lineNum"> 734 </span> : : static inline struct fdt_property *fdt_get_property_w(void *fdt, int nodeoffset,</a>
-<a name="735"><span class="lineNum"> 735 </span> : : const char *name,</a>
-<a name="736"><span class="lineNum"> 736 </span> : : int *lenp)</a>
-<a name="737"><span class="lineNum"> 737 </span> : : {</a>
-<a name="738"><span class="lineNum"> 738 </span> : : return (struct fdt_property *)(uintptr_t)</a>
-<a name="739"><span class="lineNum"> 739 </span> : : fdt_get_property(fdt, nodeoffset, name, lenp);</a>
-<a name="740"><span class="lineNum"> 740 </span> : : }</a>
-<a name="741"><span class="lineNum"> 741 </span> : : </a>
-<a name="742"><span class="lineNum"> 742 </span> : : /**</a>
-<a name="743"><span class="lineNum"> 743 </span> : : * fdt_getprop_by_offset - retrieve the value of a property at a given offset</a>
-<a name="744"><span class="lineNum"> 744 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="745"><span class="lineNum"> 745 </span> : : * @offset: offset of the property to read</a>
-<a name="746"><span class="lineNum"> 746 </span> : : * @namep: pointer to a string variable (will be overwritten) or NULL</a>
-<a name="747"><span class="lineNum"> 747 </span> : : * @lenp: pointer to an integer variable (will be overwritten) or NULL</a>
-<a name="748"><span class="lineNum"> 748 </span> : : *</a>
-<a name="749"><span class="lineNum"> 749 </span> : : * fdt_getprop_by_offset() retrieves a pointer to the value of the</a>
-<a name="750"><span class="lineNum"> 750 </span> : : * property at structure block offset 'offset' (this will be a pointer</a>
-<a name="751"><span class="lineNum"> 751 </span> : : * to within the device blob itself, not a copy of the value). If</a>
-<a name="752"><span class="lineNum"> 752 </span> : : * lenp is non-NULL, the length of the property value is also</a>
-<a name="753"><span class="lineNum"> 753 </span> : : * returned, in the integer pointed to by lenp. If namep is non-NULL,</a>
-<a name="754"><span class="lineNum"> 754 </span> : : * the property's namne will also be returned in the char * pointed to</a>
-<a name="755"><span class="lineNum"> 755 </span> : : * by namep (this will be a pointer to within the device tree's string</a>
-<a name="756"><span class="lineNum"> 756 </span> : : * block, not a new copy of the name).</a>
-<a name="757"><span class="lineNum"> 757 </span> : : *</a>
-<a name="758"><span class="lineNum"> 758 </span> : : * returns:</a>
-<a name="759"><span class="lineNum"> 759 </span> : : * pointer to the property's value</a>
-<a name="760"><span class="lineNum"> 760 </span> : : * if lenp is non-NULL, *lenp contains the length of the property</a>
-<a name="761"><span class="lineNum"> 761 </span> : : * value (&gt;=0)</a>
-<a name="762"><span class="lineNum"> 762 </span> : : * if namep is non-NULL *namep contiains a pointer to the property</a>
-<a name="763"><span class="lineNum"> 763 </span> : : * name.</a>
-<a name="764"><span class="lineNum"> 764 </span> : : * NULL, on error</a>
-<a name="765"><span class="lineNum"> 765 </span> : : * if lenp is non-NULL, *lenp contains an error code (&lt;0):</a>
-<a name="766"><span class="lineNum"> 766 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_PROP tag</a>
-<a name="767"><span class="lineNum"> 767 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="768"><span class="lineNum"> 768 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="769"><span class="lineNum"> 769 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="770"><span class="lineNum"> 770 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="771"><span class="lineNum"> 771 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="772"><span class="lineNum"> 772 </span> : : */</a>
-<a name="773"><span class="lineNum"> 773 </span> : : #ifndef SWIG /* This function is not useful in Python */</a>
-<a name="774"><span class="lineNum"> 774 </span> : : const void *fdt_getprop_by_offset(const void *fdt, int offset,</a>
-<a name="775"><span class="lineNum"> 775 </span> : : const char **namep, int *lenp);</a>
-<a name="776"><span class="lineNum"> 776 </span> : : #endif</a>
-<a name="777"><span class="lineNum"> 777 </span> : : </a>
-<a name="778"><span class="lineNum"> 778 </span> : : /**</a>
-<a name="779"><span class="lineNum"> 779 </span> : : * fdt_getprop_namelen - get property value based on substring</a>
-<a name="780"><span class="lineNum"> 780 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="781"><span class="lineNum"> 781 </span> : : * @nodeoffset: offset of the node whose property to find</a>
-<a name="782"><span class="lineNum"> 782 </span> : : * @name: name of the property to find</a>
-<a name="783"><span class="lineNum"> 783 </span> : : * @namelen: number of characters of name to consider</a>
-<a name="784"><span class="lineNum"> 784 </span> : : * @lenp: pointer to an integer variable (will be overwritten) or NULL</a>
-<a name="785"><span class="lineNum"> 785 </span> : : *</a>
-<a name="786"><span class="lineNum"> 786 </span> : : * Identical to fdt_getprop(), but only examine the first namelen</a>
-<a name="787"><span class="lineNum"> 787 </span> : : * characters of name for matching the property name.</a>
-<a name="788"><span class="lineNum"> 788 </span> : : */</a>
-<a name="789"><span class="lineNum"> 789 </span> : : #ifndef SWIG /* Not available in Python */</a>
-<a name="790"><span class="lineNum"> 790 </span> : : const void *fdt_getprop_namelen(const void *fdt, int nodeoffset,</a>
-<a name="791"><span class="lineNum"> 791 </span> : : const char *name, int namelen, int *lenp);</a>
-<a name="792"><span class="lineNum"> 792 </span> : : static inline void *fdt_getprop_namelen_w(void *fdt, int nodeoffset,</a>
-<a name="793"><span class="lineNum"> 793 </span> : : const char *name, int namelen,</a>
-<a name="794"><span class="lineNum"> 794 </span> : : int *lenp)</a>
-<a name="795"><span class="lineNum"> 795 </span> : : {</a>
-<a name="796"><span class="lineNum"> 796 </span> : : return (void *)(uintptr_t)fdt_getprop_namelen(fdt, nodeoffset, name,</a>
-<a name="797"><span class="lineNum"> 797 </span> : : namelen, lenp);</a>
-<a name="798"><span class="lineNum"> 798 </span> : : }</a>
-<a name="799"><span class="lineNum"> 799 </span> : : #endif</a>
-<a name="800"><span class="lineNum"> 800 </span> : : </a>
-<a name="801"><span class="lineNum"> 801 </span> : : /**</a>
-<a name="802"><span class="lineNum"> 802 </span> : : * fdt_getprop - retrieve the value of a given property</a>
-<a name="803"><span class="lineNum"> 803 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="804"><span class="lineNum"> 804 </span> : : * @nodeoffset: offset of the node whose property to find</a>
-<a name="805"><span class="lineNum"> 805 </span> : : * @name: name of the property to find</a>
-<a name="806"><span class="lineNum"> 806 </span> : : * @lenp: pointer to an integer variable (will be overwritten) or NULL</a>
-<a name="807"><span class="lineNum"> 807 </span> : : *</a>
-<a name="808"><span class="lineNum"> 808 </span> : : * fdt_getprop() retrieves a pointer to the value of the property</a>
-<a name="809"><span class="lineNum"> 809 </span> : : * named 'name' of the node at offset nodeoffset (this will be a</a>
-<a name="810"><span class="lineNum"> 810 </span> : : * pointer to within the device blob itself, not a copy of the value).</a>
-<a name="811"><span class="lineNum"> 811 </span> : : * If lenp is non-NULL, the length of the property value is also</a>
-<a name="812"><span class="lineNum"> 812 </span> : : * returned, in the integer pointed to by lenp.</a>
-<a name="813"><span class="lineNum"> 813 </span> : : *</a>
-<a name="814"><span class="lineNum"> 814 </span> : : * returns:</a>
-<a name="815"><span class="lineNum"> 815 </span> : : * pointer to the property's value</a>
-<a name="816"><span class="lineNum"> 816 </span> : : * if lenp is non-NULL, *lenp contains the length of the property</a>
-<a name="817"><span class="lineNum"> 817 </span> : : * value (&gt;=0)</a>
-<a name="818"><span class="lineNum"> 818 </span> : : * NULL, on error</a>
-<a name="819"><span class="lineNum"> 819 </span> : : * if lenp is non-NULL, *lenp contains an error code (&lt;0):</a>
-<a name="820"><span class="lineNum"> 820 </span> : : * -FDT_ERR_NOTFOUND, node does not have named property</a>
-<a name="821"><span class="lineNum"> 821 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE</a>
-<a name="822"><span class="lineNum"> 822 </span> : : * tag</a>
-<a name="823"><span class="lineNum"> 823 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="824"><span class="lineNum"> 824 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="825"><span class="lineNum"> 825 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="826"><span class="lineNum"> 826 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="827"><span class="lineNum"> 827 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="828"><span class="lineNum"> 828 </span> : : */</a>
-<a name="829"><span class="lineNum"> 829 </span> : : const void *fdt_getprop(const void *fdt, int nodeoffset,</a>
-<a name="830"><span class="lineNum"> 830 </span> : : const char *name, int *lenp);</a>
-<a name="831"><span class="lineNum"> 831 </span> : : static inline void *fdt_getprop_w(void *fdt, int nodeoffset,</a>
-<a name="832"><span class="lineNum"> 832 </span> : : const char *name, int *lenp)</a>
-<a name="833"><span class="lineNum"> 833 </span> : : {</a>
-<a name="834"><span class="lineNum"> 834 </span> : : return (void *)(uintptr_t)fdt_getprop(fdt, nodeoffset, name, lenp);</a>
-<a name="835"><span class="lineNum"> 835 </span> : : }</a>
-<a name="836"><span class="lineNum"> 836 </span> : : </a>
-<a name="837"><span class="lineNum"> 837 </span> : : /**</a>
-<a name="838"><span class="lineNum"> 838 </span> : : * fdt_get_phandle - retrieve the phandle of a given node</a>
-<a name="839"><span class="lineNum"> 839 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="840"><span class="lineNum"> 840 </span> : : * @nodeoffset: structure block offset of the node</a>
-<a name="841"><span class="lineNum"> 841 </span> : : *</a>
-<a name="842"><span class="lineNum"> 842 </span> : : * fdt_get_phandle() retrieves the phandle of the device tree node at</a>
-<a name="843"><span class="lineNum"> 843 </span> : : * structure block offset nodeoffset.</a>
-<a name="844"><span class="lineNum"> 844 </span> : : *</a>
-<a name="845"><span class="lineNum"> 845 </span> : : * returns:</a>
-<a name="846"><span class="lineNum"> 846 </span> : : * the phandle of the node at nodeoffset, on success (!= 0, != -1)</a>
-<a name="847"><span class="lineNum"> 847 </span> : : * 0, if the node has no phandle, or another error occurs</a>
-<a name="848"><span class="lineNum"> 848 </span> : : */</a>
-<a name="849"><span class="lineNum"> 849 </span> : : uint32_t fdt_get_phandle(const void *fdt, int nodeoffset);</a>
+<a name="574"><span class="lineNum"> 574 </span> : : * structure block offset of the property (&gt;=0), on success</a>
+<a name="575"><span class="lineNum"> 575 </span> : : * -FDT_ERR_NOTFOUND, if the requested node has no properties</a>
+<a name="576"><span class="lineNum"> 576 </span> : : * -FDT_ERR_BADOFFSET, if nodeoffset did not point to an FDT_BEGIN_NODE tag</a>
+<a name="577"><span class="lineNum"> 577 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="578"><span class="lineNum"> 578 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="579"><span class="lineNum"> 579 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="580"><span class="lineNum"> 580 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="581"><span class="lineNum"> 581 </span> : : * -FDT_ERR_TRUNCATED, standard meanings.</a>
+<a name="582"><span class="lineNum"> 582 </span> : : */</a>
+<a name="583"><span class="lineNum"> 583 </span> : : int fdt_first_property_offset(const void *fdt, int nodeoffset);</a>
+<a name="584"><span class="lineNum"> 584 </span> : : </a>
+<a name="585"><span class="lineNum"> 585 </span> : : /**</a>
+<a name="586"><span class="lineNum"> 586 </span> : : * fdt_next_property_offset - step through a node's properties</a>
+<a name="587"><span class="lineNum"> 587 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="588"><span class="lineNum"> 588 </span> : : * @offset: structure block offset of a property</a>
+<a name="589"><span class="lineNum"> 589 </span> : : *</a>
+<a name="590"><span class="lineNum"> 590 </span> : : * fdt_next_property_offset() finds the property immediately after the</a>
+<a name="591"><span class="lineNum"> 591 </span> : : * one at the given structure block offset. This will be a property</a>
+<a name="592"><span class="lineNum"> 592 </span> : : * of the same node as the given property.</a>
+<a name="593"><span class="lineNum"> 593 </span> : : *</a>
+<a name="594"><span class="lineNum"> 594 </span> : : * returns:</a>
+<a name="595"><span class="lineNum"> 595 </span> : : * structure block offset of the next property (&gt;=0), on success</a>
+<a name="596"><span class="lineNum"> 596 </span> : : * -FDT_ERR_NOTFOUND, if the given property is the last in its node</a>
+<a name="597"><span class="lineNum"> 597 </span> : : * -FDT_ERR_BADOFFSET, if nodeoffset did not point to an FDT_PROP tag</a>
+<a name="598"><span class="lineNum"> 598 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="599"><span class="lineNum"> 599 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="600"><span class="lineNum"> 600 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="601"><span class="lineNum"> 601 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="602"><span class="lineNum"> 602 </span> : : * -FDT_ERR_TRUNCATED, standard meanings.</a>
+<a name="603"><span class="lineNum"> 603 </span> : : */</a>
+<a name="604"><span class="lineNum"> 604 </span> : : int fdt_next_property_offset(const void *fdt, int offset);</a>
+<a name="605"><span class="lineNum"> 605 </span> : : </a>
+<a name="606"><span class="lineNum"> 606 </span> : : /**</a>
+<a name="607"><span class="lineNum"> 607 </span> : : * fdt_for_each_property_offset - iterate over all properties of a node</a>
+<a name="608"><span class="lineNum"> 608 </span> : : *</a>
+<a name="609"><span class="lineNum"> 609 </span> : : * @property: property offset (int, lvalue)</a>
+<a name="610"><span class="lineNum"> 610 </span> : : * @fdt: FDT blob (const void *)</a>
+<a name="611"><span class="lineNum"> 611 </span> : : * @node: node offset (int)</a>
+<a name="612"><span class="lineNum"> 612 </span> : : *</a>
+<a name="613"><span class="lineNum"> 613 </span> : : * This is actually a wrapper around a for loop and would be used like so:</a>
+<a name="614"><span class="lineNum"> 614 </span> : : *</a>
+<a name="615"><span class="lineNum"> 615 </span> : : * fdt_for_each_property_offset(property, fdt, node) {</a>
+<a name="616"><span class="lineNum"> 616 </span> : : * Use property</a>
+<a name="617"><span class="lineNum"> 617 </span> : : * ...</a>
+<a name="618"><span class="lineNum"> 618 </span> : : * }</a>
+<a name="619"><span class="lineNum"> 619 </span> : : *</a>
+<a name="620"><span class="lineNum"> 620 </span> : : * if ((property &lt; 0) &amp;&amp; (property != -FDT_ERR_NOTFOUND)) {</a>
+<a name="621"><span class="lineNum"> 621 </span> : : * Error handling</a>
+<a name="622"><span class="lineNum"> 622 </span> : : * }</a>
+<a name="623"><span class="lineNum"> 623 </span> : : *</a>
+<a name="624"><span class="lineNum"> 624 </span> : : * Note that this is implemented as a macro and property is used as</a>
+<a name="625"><span class="lineNum"> 625 </span> : : * iterator in the loop. The node variable can be constant or even a</a>
+<a name="626"><span class="lineNum"> 626 </span> : : * literal.</a>
+<a name="627"><span class="lineNum"> 627 </span> : : */</a>
+<a name="628"><span class="lineNum"> 628 </span> : : #define fdt_for_each_property_offset(property, fdt, node) \</a>
+<a name="629"><span class="lineNum"> 629 </span> : : for (property = fdt_first_property_offset(fdt, node); \</a>
+<a name="630"><span class="lineNum"> 630 </span> : : property &gt;= 0; \</a>
+<a name="631"><span class="lineNum"> 631 </span> : : property = fdt_next_property_offset(fdt, property))</a>
+<a name="632"><span class="lineNum"> 632 </span> : : </a>
+<a name="633"><span class="lineNum"> 633 </span> : : /**</a>
+<a name="634"><span class="lineNum"> 634 </span> : : * fdt_get_property_by_offset - retrieve the property at a given offset</a>
+<a name="635"><span class="lineNum"> 635 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="636"><span class="lineNum"> 636 </span> : : * @offset: offset of the property to retrieve</a>
+<a name="637"><span class="lineNum"> 637 </span> : : * @lenp: pointer to an integer variable (will be overwritten) or NULL</a>
+<a name="638"><span class="lineNum"> 638 </span> : : *</a>
+<a name="639"><span class="lineNum"> 639 </span> : : * fdt_get_property_by_offset() retrieves a pointer to the</a>
+<a name="640"><span class="lineNum"> 640 </span> : : * fdt_property structure within the device tree blob at the given</a>
+<a name="641"><span class="lineNum"> 641 </span> : : * offset. If lenp is non-NULL, the length of the property value is</a>
+<a name="642"><span class="lineNum"> 642 </span> : : * also returned, in the integer pointed to by lenp.</a>
+<a name="643"><span class="lineNum"> 643 </span> : : *</a>
+<a name="644"><span class="lineNum"> 644 </span> : : * Note that this code only works on device tree versions &gt;= 16. fdt_getprop()</a>
+<a name="645"><span class="lineNum"> 645 </span> : : * works on all versions.</a>
+<a name="646"><span class="lineNum"> 646 </span> : : *</a>
+<a name="647"><span class="lineNum"> 647 </span> : : * returns:</a>
+<a name="648"><span class="lineNum"> 648 </span> : : * pointer to the structure representing the property</a>
+<a name="649"><span class="lineNum"> 649 </span> : : * if lenp is non-NULL, *lenp contains the length of the property</a>
+<a name="650"><span class="lineNum"> 650 </span> : : * value (&gt;=0)</a>
+<a name="651"><span class="lineNum"> 651 </span> : : * NULL, on error</a>
+<a name="652"><span class="lineNum"> 652 </span> : : * if lenp is non-NULL, *lenp contains an error code (&lt;0):</a>
+<a name="653"><span class="lineNum"> 653 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_PROP tag</a>
+<a name="654"><span class="lineNum"> 654 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="655"><span class="lineNum"> 655 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="656"><span class="lineNum"> 656 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="657"><span class="lineNum"> 657 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="658"><span class="lineNum"> 658 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="659"><span class="lineNum"> 659 </span> : : */</a>
+<a name="660"><span class="lineNum"> 660 </span> : : const struct fdt_property *fdt_get_property_by_offset(const void *fdt,</a>
+<a name="661"><span class="lineNum"> 661 </span> : : int offset,</a>
+<a name="662"><span class="lineNum"> 662 </span> : : int *lenp);</a>
+<a name="663"><span class="lineNum"> 663 </span> : : </a>
+<a name="664"><span class="lineNum"> 664 </span> : : /**</a>
+<a name="665"><span class="lineNum"> 665 </span> : : * fdt_get_property_namelen - find a property based on substring</a>
+<a name="666"><span class="lineNum"> 666 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="667"><span class="lineNum"> 667 </span> : : * @nodeoffset: offset of the node whose property to find</a>
+<a name="668"><span class="lineNum"> 668 </span> : : * @name: name of the property to find</a>
+<a name="669"><span class="lineNum"> 669 </span> : : * @namelen: number of characters of name to consider</a>
+<a name="670"><span class="lineNum"> 670 </span> : : * @lenp: pointer to an integer variable (will be overwritten) or NULL</a>
+<a name="671"><span class="lineNum"> 671 </span> : : *</a>
+<a name="672"><span class="lineNum"> 672 </span> : : * Identical to fdt_get_property(), but only examine the first namelen</a>
+<a name="673"><span class="lineNum"> 673 </span> : : * characters of name for matching the property name.</a>
+<a name="674"><span class="lineNum"> 674 </span> : : *</a>
+<a name="675"><span class="lineNum"> 675 </span> : : * Return: pointer to the structure representing the property, or NULL</a>
+<a name="676"><span class="lineNum"> 676 </span> : : * if not found</a>
+<a name="677"><span class="lineNum"> 677 </span> : : */</a>
+<a name="678"><span class="lineNum"> 678 </span> : : #ifndef SWIG /* Not available in Python */</a>
+<a name="679"><span class="lineNum"> 679 </span> : : const struct fdt_property *fdt_get_property_namelen(const void *fdt,</a>
+<a name="680"><span class="lineNum"> 680 </span> : : int nodeoffset,</a>
+<a name="681"><span class="lineNum"> 681 </span> : : const char *name,</a>
+<a name="682"><span class="lineNum"> 682 </span> : : int namelen, int *lenp);</a>
+<a name="683"><span class="lineNum"> 683 </span> : : #endif</a>
+<a name="684"><span class="lineNum"> 684 </span> : : </a>
+<a name="685"><span class="lineNum"> 685 </span> : : /**</a>
+<a name="686"><span class="lineNum"> 686 </span> : : * fdt_get_property - find a given property in a given node</a>
+<a name="687"><span class="lineNum"> 687 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="688"><span class="lineNum"> 688 </span> : : * @nodeoffset: offset of the node whose property to find</a>
+<a name="689"><span class="lineNum"> 689 </span> : : * @name: name of the property to find</a>
+<a name="690"><span class="lineNum"> 690 </span> : : * @lenp: pointer to an integer variable (will be overwritten) or NULL</a>
+<a name="691"><span class="lineNum"> 691 </span> : : *</a>
+<a name="692"><span class="lineNum"> 692 </span> : : * fdt_get_property() retrieves a pointer to the fdt_property</a>
+<a name="693"><span class="lineNum"> 693 </span> : : * structure within the device tree blob corresponding to the property</a>
+<a name="694"><span class="lineNum"> 694 </span> : : * named 'name' of the node at offset nodeoffset. If lenp is</a>
+<a name="695"><span class="lineNum"> 695 </span> : : * non-NULL, the length of the property value is also returned, in the</a>
+<a name="696"><span class="lineNum"> 696 </span> : : * integer pointed to by lenp.</a>
+<a name="697"><span class="lineNum"> 697 </span> : : *</a>
+<a name="698"><span class="lineNum"> 698 </span> : : * returns:</a>
+<a name="699"><span class="lineNum"> 699 </span> : : * pointer to the structure representing the property</a>
+<a name="700"><span class="lineNum"> 700 </span> : : * if lenp is non-NULL, *lenp contains the length of the property</a>
+<a name="701"><span class="lineNum"> 701 </span> : : * value (&gt;=0)</a>
+<a name="702"><span class="lineNum"> 702 </span> : : * NULL, on error</a>
+<a name="703"><span class="lineNum"> 703 </span> : : * if lenp is non-NULL, *lenp contains an error code (&lt;0):</a>
+<a name="704"><span class="lineNum"> 704 </span> : : * -FDT_ERR_NOTFOUND, node does not have named property</a>
+<a name="705"><span class="lineNum"> 705 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE</a>
+<a name="706"><span class="lineNum"> 706 </span> : : * tag</a>
+<a name="707"><span class="lineNum"> 707 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="708"><span class="lineNum"> 708 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="709"><span class="lineNum"> 709 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="710"><span class="lineNum"> 710 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="711"><span class="lineNum"> 711 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="712"><span class="lineNum"> 712 </span> : : */</a>
+<a name="713"><span class="lineNum"> 713 </span> : : const struct fdt_property *fdt_get_property(const void *fdt, int nodeoffset,</a>
+<a name="714"><span class="lineNum"> 714 </span> : : const char *name, int *lenp);</a>
+<a name="715"><span class="lineNum"> 715 </span> : : static inline struct fdt_property *fdt_get_property_w(void *fdt, int nodeoffset,</a>
+<a name="716"><span class="lineNum"> 716 </span> : : const char *name,</a>
+<a name="717"><span class="lineNum"> 717 </span> : : int *lenp)</a>
+<a name="718"><span class="lineNum"> 718 </span> : : {</a>
+<a name="719"><span class="lineNum"> 719 </span> : : return (struct fdt_property *)(uintptr_t)</a>
+<a name="720"><span class="lineNum"> 720 </span> : : fdt_get_property(fdt, nodeoffset, name, lenp);</a>
+<a name="721"><span class="lineNum"> 721 </span> : : }</a>
+<a name="722"><span class="lineNum"> 722 </span> : : </a>
+<a name="723"><span class="lineNum"> 723 </span> : : /**</a>
+<a name="724"><span class="lineNum"> 724 </span> : : * fdt_getprop_by_offset - retrieve the value of a property at a given offset</a>
+<a name="725"><span class="lineNum"> 725 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="726"><span class="lineNum"> 726 </span> : : * @offset: offset of the property to read</a>
+<a name="727"><span class="lineNum"> 727 </span> : : * @namep: pointer to a string variable (will be overwritten) or NULL</a>
+<a name="728"><span class="lineNum"> 728 </span> : : * @lenp: pointer to an integer variable (will be overwritten) or NULL</a>
+<a name="729"><span class="lineNum"> 729 </span> : : *</a>
+<a name="730"><span class="lineNum"> 730 </span> : : * fdt_getprop_by_offset() retrieves a pointer to the value of the</a>
+<a name="731"><span class="lineNum"> 731 </span> : : * property at structure block offset 'offset' (this will be a pointer</a>
+<a name="732"><span class="lineNum"> 732 </span> : : * to within the device blob itself, not a copy of the value). If</a>
+<a name="733"><span class="lineNum"> 733 </span> : : * lenp is non-NULL, the length of the property value is also</a>
+<a name="734"><span class="lineNum"> 734 </span> : : * returned, in the integer pointed to by lenp. If namep is non-NULL,</a>
+<a name="735"><span class="lineNum"> 735 </span> : : * the property's namne will also be returned in the char * pointed to</a>
+<a name="736"><span class="lineNum"> 736 </span> : : * by namep (this will be a pointer to within the device tree's string</a>
+<a name="737"><span class="lineNum"> 737 </span> : : * block, not a new copy of the name).</a>
+<a name="738"><span class="lineNum"> 738 </span> : : *</a>
+<a name="739"><span class="lineNum"> 739 </span> : : * returns:</a>
+<a name="740"><span class="lineNum"> 740 </span> : : * pointer to the property's value</a>
+<a name="741"><span class="lineNum"> 741 </span> : : * if lenp is non-NULL, *lenp contains the length of the property</a>
+<a name="742"><span class="lineNum"> 742 </span> : : * value (&gt;=0)</a>
+<a name="743"><span class="lineNum"> 743 </span> : : * if namep is non-NULL *namep contiains a pointer to the property</a>
+<a name="744"><span class="lineNum"> 744 </span> : : * name.</a>
+<a name="745"><span class="lineNum"> 745 </span> : : * NULL, on error</a>
+<a name="746"><span class="lineNum"> 746 </span> : : * if lenp is non-NULL, *lenp contains an error code (&lt;0):</a>
+<a name="747"><span class="lineNum"> 747 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_PROP tag</a>
+<a name="748"><span class="lineNum"> 748 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="749"><span class="lineNum"> 749 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="750"><span class="lineNum"> 750 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="751"><span class="lineNum"> 751 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="752"><span class="lineNum"> 752 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="753"><span class="lineNum"> 753 </span> : : */</a>
+<a name="754"><span class="lineNum"> 754 </span> : : #ifndef SWIG /* This function is not useful in Python */</a>
+<a name="755"><span class="lineNum"> 755 </span> : : const void *fdt_getprop_by_offset(const void *fdt, int offset,</a>
+<a name="756"><span class="lineNum"> 756 </span> : : const char **namep, int *lenp);</a>
+<a name="757"><span class="lineNum"> 757 </span> : : #endif</a>
+<a name="758"><span class="lineNum"> 758 </span> : : </a>
+<a name="759"><span class="lineNum"> 759 </span> : : /**</a>
+<a name="760"><span class="lineNum"> 760 </span> : : * fdt_getprop_namelen - get property value based on substring</a>
+<a name="761"><span class="lineNum"> 761 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="762"><span class="lineNum"> 762 </span> : : * @nodeoffset: offset of the node whose property to find</a>
+<a name="763"><span class="lineNum"> 763 </span> : : * @name: name of the property to find</a>
+<a name="764"><span class="lineNum"> 764 </span> : : * @namelen: number of characters of name to consider</a>
+<a name="765"><span class="lineNum"> 765 </span> : : * @lenp: pointer to an integer variable (will be overwritten) or NULL</a>
+<a name="766"><span class="lineNum"> 766 </span> : : *</a>
+<a name="767"><span class="lineNum"> 767 </span> : : * Identical to fdt_getprop(), but only examine the first namelen</a>
+<a name="768"><span class="lineNum"> 768 </span> : : * characters of name for matching the property name.</a>
+<a name="769"><span class="lineNum"> 769 </span> : : *</a>
+<a name="770"><span class="lineNum"> 770 </span> : : * Return: pointer to the property's value or NULL on error</a>
+<a name="771"><span class="lineNum"> 771 </span> : : */</a>
+<a name="772"><span class="lineNum"> 772 </span> : : #ifndef SWIG /* Not available in Python */</a>
+<a name="773"><span class="lineNum"> 773 </span> : : const void *fdt_getprop_namelen(const void *fdt, int nodeoffset,</a>
+<a name="774"><span class="lineNum"> 774 </span> : : const char *name, int namelen, int *lenp);</a>
+<a name="775"><span class="lineNum"> 775 </span> : : static inline void *fdt_getprop_namelen_w(void *fdt, int nodeoffset,</a>
+<a name="776"><span class="lineNum"> 776 </span> : : const char *name, int namelen,</a>
+<a name="777"><span class="lineNum"> 777 </span> : : int *lenp)</a>
+<a name="778"><span class="lineNum"> 778 </span> : : {</a>
+<a name="779"><span class="lineNum"> 779 </span> : : return (void *)(uintptr_t)fdt_getprop_namelen(fdt, nodeoffset, name,</a>
+<a name="780"><span class="lineNum"> 780 </span> : : namelen, lenp);</a>
+<a name="781"><span class="lineNum"> 781 </span> : : }</a>
+<a name="782"><span class="lineNum"> 782 </span> : : #endif</a>
+<a name="783"><span class="lineNum"> 783 </span> : : </a>
+<a name="784"><span class="lineNum"> 784 </span> : : /**</a>
+<a name="785"><span class="lineNum"> 785 </span> : : * fdt_getprop - retrieve the value of a given property</a>
+<a name="786"><span class="lineNum"> 786 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="787"><span class="lineNum"> 787 </span> : : * @nodeoffset: offset of the node whose property to find</a>
+<a name="788"><span class="lineNum"> 788 </span> : : * @name: name of the property to find</a>
+<a name="789"><span class="lineNum"> 789 </span> : : * @lenp: pointer to an integer variable (will be overwritten) or NULL</a>
+<a name="790"><span class="lineNum"> 790 </span> : : *</a>
+<a name="791"><span class="lineNum"> 791 </span> : : * fdt_getprop() retrieves a pointer to the value of the property</a>
+<a name="792"><span class="lineNum"> 792 </span> : : * named @name of the node at offset @nodeoffset (this will be a</a>
+<a name="793"><span class="lineNum"> 793 </span> : : * pointer to within the device blob itself, not a copy of the value).</a>
+<a name="794"><span class="lineNum"> 794 </span> : : * If @lenp is non-NULL, the length of the property value is also</a>
+<a name="795"><span class="lineNum"> 795 </span> : : * returned, in the integer pointed to by @lenp.</a>
+<a name="796"><span class="lineNum"> 796 </span> : : *</a>
+<a name="797"><span class="lineNum"> 797 </span> : : * returns:</a>
+<a name="798"><span class="lineNum"> 798 </span> : : * pointer to the property's value</a>
+<a name="799"><span class="lineNum"> 799 </span> : : * if lenp is non-NULL, *lenp contains the length of the property</a>
+<a name="800"><span class="lineNum"> 800 </span> : : * value (&gt;=0)</a>
+<a name="801"><span class="lineNum"> 801 </span> : : * NULL, on error</a>
+<a name="802"><span class="lineNum"> 802 </span> : : * if lenp is non-NULL, *lenp contains an error code (&lt;0):</a>
+<a name="803"><span class="lineNum"> 803 </span> : : * -FDT_ERR_NOTFOUND, node does not have named property</a>
+<a name="804"><span class="lineNum"> 804 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE</a>
+<a name="805"><span class="lineNum"> 805 </span> : : * tag</a>
+<a name="806"><span class="lineNum"> 806 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="807"><span class="lineNum"> 807 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="808"><span class="lineNum"> 808 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="809"><span class="lineNum"> 809 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="810"><span class="lineNum"> 810 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="811"><span class="lineNum"> 811 </span> : : */</a>
+<a name="812"><span class="lineNum"> 812 </span> : : const void *fdt_getprop(const void *fdt, int nodeoffset,</a>
+<a name="813"><span class="lineNum"> 813 </span> : : const char *name, int *lenp);</a>
+<a name="814"><span class="lineNum"> 814 </span> : : static inline void *fdt_getprop_w(void *fdt, int nodeoffset,</a>
+<a name="815"><span class="lineNum"> 815 </span> : : const char *name, int *lenp)</a>
+<a name="816"><span class="lineNum"> 816 </span> : : {</a>
+<a name="817"><span class="lineNum"> 817 </span> : : return (void *)(uintptr_t)fdt_getprop(fdt, nodeoffset, name, lenp);</a>
+<a name="818"><span class="lineNum"> 818 </span> : : }</a>
+<a name="819"><span class="lineNum"> 819 </span> : : </a>
+<a name="820"><span class="lineNum"> 820 </span> : : /**</a>
+<a name="821"><span class="lineNum"> 821 </span> : : * fdt_get_phandle - retrieve the phandle of a given node</a>
+<a name="822"><span class="lineNum"> 822 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="823"><span class="lineNum"> 823 </span> : : * @nodeoffset: structure block offset of the node</a>
+<a name="824"><span class="lineNum"> 824 </span> : : *</a>
+<a name="825"><span class="lineNum"> 825 </span> : : * fdt_get_phandle() retrieves the phandle of the device tree node at</a>
+<a name="826"><span class="lineNum"> 826 </span> : : * structure block offset nodeoffset.</a>
+<a name="827"><span class="lineNum"> 827 </span> : : *</a>
+<a name="828"><span class="lineNum"> 828 </span> : : * returns:</a>
+<a name="829"><span class="lineNum"> 829 </span> : : * the phandle of the node at nodeoffset, on success (!= 0, != -1)</a>
+<a name="830"><span class="lineNum"> 830 </span> : : * 0, if the node has no phandle, or another error occurs</a>
+<a name="831"><span class="lineNum"> 831 </span> : : */</a>
+<a name="832"><span class="lineNum"> 832 </span> : : uint32_t fdt_get_phandle(const void *fdt, int nodeoffset);</a>
+<a name="833"><span class="lineNum"> 833 </span> : : </a>
+<a name="834"><span class="lineNum"> 834 </span> : : /**</a>
+<a name="835"><span class="lineNum"> 835 </span> : : * fdt_get_alias_namelen - get alias based on substring</a>
+<a name="836"><span class="lineNum"> 836 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="837"><span class="lineNum"> 837 </span> : : * @name: name of the alias th look up</a>
+<a name="838"><span class="lineNum"> 838 </span> : : * @namelen: number of characters of name to consider</a>
+<a name="839"><span class="lineNum"> 839 </span> : : *</a>
+<a name="840"><span class="lineNum"> 840 </span> : : * Identical to fdt_get_alias(), but only examine the first @namelen</a>
+<a name="841"><span class="lineNum"> 841 </span> : : * characters of @name for matching the alias name.</a>
+<a name="842"><span class="lineNum"> 842 </span> : : *</a>
+<a name="843"><span class="lineNum"> 843 </span> : : * Return: a pointer to the expansion of the alias named @name, if it exists,</a>
+<a name="844"><span class="lineNum"> 844 </span> : : * NULL otherwise</a>
+<a name="845"><span class="lineNum"> 845 </span> : : */</a>
+<a name="846"><span class="lineNum"> 846 </span> : : #ifndef SWIG /* Not available in Python */</a>
+<a name="847"><span class="lineNum"> 847 </span> : : const char *fdt_get_alias_namelen(const void *fdt,</a>
+<a name="848"><span class="lineNum"> 848 </span> : : const char *name, int namelen);</a>
+<a name="849"><span class="lineNum"> 849 </span> : : #endif</a>
<a name="850"><span class="lineNum"> 850 </span> : : </a>
<a name="851"><span class="lineNum"> 851 </span> : : /**</a>
-<a name="852"><span class="lineNum"> 852 </span> : : * fdt_get_alias_namelen - get alias based on substring</a>
+<a name="852"><span class="lineNum"> 852 </span> : : * fdt_get_alias - retrieve the path referenced by a given alias</a>
<a name="853"><span class="lineNum"> 853 </span> : : * @fdt: pointer to the device tree blob</a>
<a name="854"><span class="lineNum"> 854 </span> : : * @name: name of the alias th look up</a>
-<a name="855"><span class="lineNum"> 855 </span> : : * @namelen: number of characters of name to consider</a>
-<a name="856"><span class="lineNum"> 856 </span> : : *</a>
-<a name="857"><span class="lineNum"> 857 </span> : : * Identical to fdt_get_alias(), but only examine the first namelen</a>
-<a name="858"><span class="lineNum"> 858 </span> : : * characters of name for matching the alias name.</a>
-<a name="859"><span class="lineNum"> 859 </span> : : */</a>
-<a name="860"><span class="lineNum"> 860 </span> : : #ifndef SWIG /* Not available in Python */</a>
-<a name="861"><span class="lineNum"> 861 </span> : : const char *fdt_get_alias_namelen(const void *fdt,</a>
-<a name="862"><span class="lineNum"> 862 </span> : : const char *name, int namelen);</a>
-<a name="863"><span class="lineNum"> 863 </span> : : #endif</a>
+<a name="855"><span class="lineNum"> 855 </span> : : *</a>
+<a name="856"><span class="lineNum"> 856 </span> : : * fdt_get_alias() retrieves the value of a given alias. That is, the</a>
+<a name="857"><span class="lineNum"> 857 </span> : : * value of the property named @name in the node /aliases.</a>
+<a name="858"><span class="lineNum"> 858 </span> : : *</a>
+<a name="859"><span class="lineNum"> 859 </span> : : * returns:</a>
+<a name="860"><span class="lineNum"> 860 </span> : : * a pointer to the expansion of the alias named 'name', if it exists</a>
+<a name="861"><span class="lineNum"> 861 </span> : : * NULL, if the given alias or the /aliases node does not exist</a>
+<a name="862"><span class="lineNum"> 862 </span> : : */</a>
+<a name="863"><span class="lineNum"> 863 </span> : : const char *fdt_get_alias(const void *fdt, const char *name);</a>
<a name="864"><span class="lineNum"> 864 </span> : : </a>
<a name="865"><span class="lineNum"> 865 </span> : : /**</a>
-<a name="866"><span class="lineNum"> 866 </span> : : * fdt_get_alias - retrieve the path referenced by a given alias</a>
+<a name="866"><span class="lineNum"> 866 </span> : : * fdt_get_path - determine the full path of a node</a>
<a name="867"><span class="lineNum"> 867 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="868"><span class="lineNum"> 868 </span> : : * @name: name of the alias th look up</a>
-<a name="869"><span class="lineNum"> 869 </span> : : *</a>
-<a name="870"><span class="lineNum"> 870 </span> : : * fdt_get_alias() retrieves the value of a given alias. That is, the</a>
-<a name="871"><span class="lineNum"> 871 </span> : : * value of the property named 'name' in the node /aliases.</a>
-<a name="872"><span class="lineNum"> 872 </span> : : *</a>
-<a name="873"><span class="lineNum"> 873 </span> : : * returns:</a>
-<a name="874"><span class="lineNum"> 874 </span> : : * a pointer to the expansion of the alias named 'name', if it exists</a>
-<a name="875"><span class="lineNum"> 875 </span> : : * NULL, if the given alias or the /aliases node does not exist</a>
-<a name="876"><span class="lineNum"> 876 </span> : : */</a>
-<a name="877"><span class="lineNum"> 877 </span> : : const char *fdt_get_alias(const void *fdt, const char *name);</a>
-<a name="878"><span class="lineNum"> 878 </span> : : </a>
-<a name="879"><span class="lineNum"> 879 </span> : : /**</a>
-<a name="880"><span class="lineNum"> 880 </span> : : * fdt_get_path - determine the full path of a node</a>
-<a name="881"><span class="lineNum"> 881 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="882"><span class="lineNum"> 882 </span> : : * @nodeoffset: offset of the node whose path to find</a>
-<a name="883"><span class="lineNum"> 883 </span> : : * @buf: character buffer to contain the returned path (will be overwritten)</a>
-<a name="884"><span class="lineNum"> 884 </span> : : * @buflen: size of the character buffer at buf</a>
-<a name="885"><span class="lineNum"> 885 </span> : : *</a>
-<a name="886"><span class="lineNum"> 886 </span> : : * fdt_get_path() computes the full path of the node at offset</a>
-<a name="887"><span class="lineNum"> 887 </span> : : * nodeoffset, and records that path in the buffer at buf.</a>
-<a name="888"><span class="lineNum"> 888 </span> : : *</a>
-<a name="889"><span class="lineNum"> 889 </span> : : * NOTE: This function is expensive, as it must scan the device tree</a>
-<a name="890"><span class="lineNum"> 890 </span> : : * structure from the start to nodeoffset.</a>
-<a name="891"><span class="lineNum"> 891 </span> : : *</a>
-<a name="892"><span class="lineNum"> 892 </span> : : * returns:</a>
-<a name="893"><span class="lineNum"> 893 </span> : : * 0, on success</a>
-<a name="894"><span class="lineNum"> 894 </span> : : * buf contains the absolute path of the node at</a>
-<a name="895"><span class="lineNum"> 895 </span> : : * nodeoffset, as a NUL-terminated string.</a>
-<a name="896"><span class="lineNum"> 896 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag</a>
-<a name="897"><span class="lineNum"> 897 </span> : : * -FDT_ERR_NOSPACE, the path of the given node is longer than (bufsize-1)</a>
-<a name="898"><span class="lineNum"> 898 </span> : : * characters and will not fit in the given buffer.</a>
-<a name="899"><span class="lineNum"> 899 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="900"><span class="lineNum"> 900 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="901"><span class="lineNum"> 901 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="902"><span class="lineNum"> 902 </span> : : * -FDT_ERR_BADSTRUCTURE, standard meanings</a>
-<a name="903"><span class="lineNum"> 903 </span> : : */</a>
-<a name="904"><span class="lineNum"> 904 </span> : : int fdt_get_path(const void *fdt, int nodeoffset, char *buf, int buflen);</a>
-<a name="905"><span class="lineNum"> 905 </span> : : </a>
-<a name="906"><span class="lineNum"> 906 </span> : : /**</a>
-<a name="907"><span class="lineNum"> 907 </span> : : * fdt_supernode_atdepth_offset - find a specific ancestor of a node</a>
-<a name="908"><span class="lineNum"> 908 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="909"><span class="lineNum"> 909 </span> : : * @nodeoffset: offset of the node whose parent to find</a>
-<a name="910"><span class="lineNum"> 910 </span> : : * @supernodedepth: depth of the ancestor to find</a>
-<a name="911"><span class="lineNum"> 911 </span> : : * @nodedepth: pointer to an integer variable (will be overwritten) or NULL</a>
-<a name="912"><span class="lineNum"> 912 </span> : : *</a>
-<a name="913"><span class="lineNum"> 913 </span> : : * fdt_supernode_atdepth_offset() finds an ancestor of the given node</a>
-<a name="914"><span class="lineNum"> 914 </span> : : * at a specific depth from the root (where the root itself has depth</a>
-<a name="915"><span class="lineNum"> 915 </span> : : * 0, its immediate subnodes depth 1 and so forth). So</a>
-<a name="916"><span class="lineNum"> 916 </span> : : * fdt_supernode_atdepth_offset(fdt, nodeoffset, 0, NULL);</a>
-<a name="917"><span class="lineNum"> 917 </span> : : * will always return 0, the offset of the root node. If the node at</a>
-<a name="918"><span class="lineNum"> 918 </span> : : * nodeoffset has depth D, then:</a>
-<a name="919"><span class="lineNum"> 919 </span> : : * fdt_supernode_atdepth_offset(fdt, nodeoffset, D, NULL);</a>
-<a name="920"><span class="lineNum"> 920 </span> : : * will return nodeoffset itself.</a>
-<a name="921"><span class="lineNum"> 921 </span> : : *</a>
-<a name="922"><span class="lineNum"> 922 </span> : : * NOTE: This function is expensive, as it must scan the device tree</a>
-<a name="923"><span class="lineNum"> 923 </span> : : * structure from the start to nodeoffset.</a>
-<a name="924"><span class="lineNum"> 924 </span> : : *</a>
-<a name="925"><span class="lineNum"> 925 </span> : : * returns:</a>
-<a name="926"><span class="lineNum"> 926 </span> : : * structure block offset of the node at node offset's ancestor</a>
-<a name="927"><span class="lineNum"> 927 </span> : : * of depth supernodedepth (&gt;=0), on success</a>
-<a name="928"><span class="lineNum"> 928 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag</a>
-<a name="929"><span class="lineNum"> 929 </span> : : * -FDT_ERR_NOTFOUND, supernodedepth was greater than the depth of</a>
-<a name="930"><span class="lineNum"> 930 </span> : : * nodeoffset</a>
-<a name="931"><span class="lineNum"> 931 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="932"><span class="lineNum"> 932 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="933"><span class="lineNum"> 933 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="934"><span class="lineNum"> 934 </span> : : * -FDT_ERR_BADSTRUCTURE, standard meanings</a>
-<a name="935"><span class="lineNum"> 935 </span> : : */</a>
-<a name="936"><span class="lineNum"> 936 </span> : : int fdt_supernode_atdepth_offset(const void *fdt, int nodeoffset,</a>
-<a name="937"><span class="lineNum"> 937 </span> : : int supernodedepth, int *nodedepth);</a>
-<a name="938"><span class="lineNum"> 938 </span> : : </a>
-<a name="939"><span class="lineNum"> 939 </span> : : /**</a>
-<a name="940"><span class="lineNum"> 940 </span> : : * fdt_node_depth - find the depth of a given node</a>
-<a name="941"><span class="lineNum"> 941 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="942"><span class="lineNum"> 942 </span> : : * @nodeoffset: offset of the node whose parent to find</a>
-<a name="943"><span class="lineNum"> 943 </span> : : *</a>
-<a name="944"><span class="lineNum"> 944 </span> : : * fdt_node_depth() finds the depth of a given node. The root node</a>
-<a name="945"><span class="lineNum"> 945 </span> : : * has depth 0, its immediate subnodes depth 1 and so forth.</a>
-<a name="946"><span class="lineNum"> 946 </span> : : *</a>
-<a name="947"><span class="lineNum"> 947 </span> : : * NOTE: This function is expensive, as it must scan the device tree</a>
-<a name="948"><span class="lineNum"> 948 </span> : : * structure from the start to nodeoffset.</a>
-<a name="949"><span class="lineNum"> 949 </span> : : *</a>
-<a name="950"><span class="lineNum"> 950 </span> : : * returns:</a>
-<a name="951"><span class="lineNum"> 951 </span> : : * depth of the node at nodeoffset (&gt;=0), on success</a>
-<a name="952"><span class="lineNum"> 952 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag</a>
-<a name="953"><span class="lineNum"> 953 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="954"><span class="lineNum"> 954 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="955"><span class="lineNum"> 955 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="956"><span class="lineNum"> 956 </span> : : * -FDT_ERR_BADSTRUCTURE, standard meanings</a>
-<a name="957"><span class="lineNum"> 957 </span> : : */</a>
-<a name="958"><span class="lineNum"> 958 </span> : : int fdt_node_depth(const void *fdt, int nodeoffset);</a>
-<a name="959"><span class="lineNum"> 959 </span> : : </a>
-<a name="960"><span class="lineNum"> 960 </span> : : /**</a>
-<a name="961"><span class="lineNum"> 961 </span> : : * fdt_parent_offset - find the parent of a given node</a>
-<a name="962"><span class="lineNum"> 962 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="963"><span class="lineNum"> 963 </span> : : * @nodeoffset: offset of the node whose parent to find</a>
-<a name="964"><span class="lineNum"> 964 </span> : : *</a>
-<a name="965"><span class="lineNum"> 965 </span> : : * fdt_parent_offset() locates the parent node of a given node (that</a>
-<a name="966"><span class="lineNum"> 966 </span> : : * is, it finds the offset of the node which contains the node at</a>
-<a name="967"><span class="lineNum"> 967 </span> : : * nodeoffset as a subnode).</a>
-<a name="968"><span class="lineNum"> 968 </span> : : *</a>
-<a name="969"><span class="lineNum"> 969 </span> : : * NOTE: This function is expensive, as it must scan the device tree</a>
-<a name="970"><span class="lineNum"> 970 </span> : : * structure from the start to nodeoffset, *twice*.</a>
-<a name="971"><span class="lineNum"> 971 </span> : : *</a>
-<a name="972"><span class="lineNum"> 972 </span> : : * returns:</a>
-<a name="973"><span class="lineNum"> 973 </span> : : * structure block offset of the parent of the node at nodeoffset</a>
-<a name="974"><span class="lineNum"> 974 </span> : : * (&gt;=0), on success</a>
-<a name="975"><span class="lineNum"> 975 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag</a>
-<a name="976"><span class="lineNum"> 976 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="977"><span class="lineNum"> 977 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="978"><span class="lineNum"> 978 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="979"><span class="lineNum"> 979 </span> : : * -FDT_ERR_BADSTRUCTURE, standard meanings</a>
-<a name="980"><span class="lineNum"> 980 </span> : : */</a>
-<a name="981"><span class="lineNum"> 981 </span> : : int fdt_parent_offset(const void *fdt, int nodeoffset);</a>
-<a name="982"><span class="lineNum"> 982 </span> : : </a>
-<a name="983"><span class="lineNum"> 983 </span> : : /**</a>
-<a name="984"><span class="lineNum"> 984 </span> : : * fdt_node_offset_by_prop_value - find nodes with a given property value</a>
-<a name="985"><span class="lineNum"> 985 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="986"><span class="lineNum"> 986 </span> : : * @startoffset: only find nodes after this offset</a>
-<a name="987"><span class="lineNum"> 987 </span> : : * @propname: property name to check</a>
-<a name="988"><span class="lineNum"> 988 </span> : : * @propval: property value to search for</a>
-<a name="989"><span class="lineNum"> 989 </span> : : * @proplen: length of the value in propval</a>
-<a name="990"><span class="lineNum"> 990 </span> : : *</a>
-<a name="991"><span class="lineNum"> 991 </span> : : * fdt_node_offset_by_prop_value() returns the offset of the first</a>
-<a name="992"><span class="lineNum"> 992 </span> : : * node after startoffset, which has a property named propname whose</a>
-<a name="993"><span class="lineNum"> 993 </span> : : * value is of length proplen and has value equal to propval; or if</a>
-<a name="994"><span class="lineNum"> 994 </span> : : * startoffset is -1, the very first such node in the tree.</a>
+<a name="868"><span class="lineNum"> 868 </span> : : * @nodeoffset: offset of the node whose path to find</a>
+<a name="869"><span class="lineNum"> 869 </span> : : * @buf: character buffer to contain the returned path (will be overwritten)</a>
+<a name="870"><span class="lineNum"> 870 </span> : : * @buflen: size of the character buffer at buf</a>
+<a name="871"><span class="lineNum"> 871 </span> : : *</a>
+<a name="872"><span class="lineNum"> 872 </span> : : * fdt_get_path() computes the full path of the node at offset</a>
+<a name="873"><span class="lineNum"> 873 </span> : : * nodeoffset, and records that path in the buffer at buf.</a>
+<a name="874"><span class="lineNum"> 874 </span> : : *</a>
+<a name="875"><span class="lineNum"> 875 </span> : : * NOTE: This function is expensive, as it must scan the device tree</a>
+<a name="876"><span class="lineNum"> 876 </span> : : * structure from the start to nodeoffset.</a>
+<a name="877"><span class="lineNum"> 877 </span> : : *</a>
+<a name="878"><span class="lineNum"> 878 </span> : : * returns:</a>
+<a name="879"><span class="lineNum"> 879 </span> : : * 0, on success</a>
+<a name="880"><span class="lineNum"> 880 </span> : : * buf contains the absolute path of the node at</a>
+<a name="881"><span class="lineNum"> 881 </span> : : * nodeoffset, as a NUL-terminated string.</a>
+<a name="882"><span class="lineNum"> 882 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag</a>
+<a name="883"><span class="lineNum"> 883 </span> : : * -FDT_ERR_NOSPACE, the path of the given node is longer than (bufsize-1)</a>
+<a name="884"><span class="lineNum"> 884 </span> : : * characters and will not fit in the given buffer.</a>
+<a name="885"><span class="lineNum"> 885 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="886"><span class="lineNum"> 886 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="887"><span class="lineNum"> 887 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="888"><span class="lineNum"> 888 </span> : : * -FDT_ERR_BADSTRUCTURE, standard meanings</a>
+<a name="889"><span class="lineNum"> 889 </span> : : */</a>
+<a name="890"><span class="lineNum"> 890 </span> : : int fdt_get_path(const void *fdt, int nodeoffset, char *buf, int buflen);</a>
+<a name="891"><span class="lineNum"> 891 </span> : : </a>
+<a name="892"><span class="lineNum"> 892 </span> : : /**</a>
+<a name="893"><span class="lineNum"> 893 </span> : : * fdt_supernode_atdepth_offset - find a specific ancestor of a node</a>
+<a name="894"><span class="lineNum"> 894 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="895"><span class="lineNum"> 895 </span> : : * @nodeoffset: offset of the node whose parent to find</a>
+<a name="896"><span class="lineNum"> 896 </span> : : * @supernodedepth: depth of the ancestor to find</a>
+<a name="897"><span class="lineNum"> 897 </span> : : * @nodedepth: pointer to an integer variable (will be overwritten) or NULL</a>
+<a name="898"><span class="lineNum"> 898 </span> : : *</a>
+<a name="899"><span class="lineNum"> 899 </span> : : * fdt_supernode_atdepth_offset() finds an ancestor of the given node</a>
+<a name="900"><span class="lineNum"> 900 </span> : : * at a specific depth from the root (where the root itself has depth</a>
+<a name="901"><span class="lineNum"> 901 </span> : : * 0, its immediate subnodes depth 1 and so forth). So</a>
+<a name="902"><span class="lineNum"> 902 </span> : : * fdt_supernode_atdepth_offset(fdt, nodeoffset, 0, NULL);</a>
+<a name="903"><span class="lineNum"> 903 </span> : : * will always return 0, the offset of the root node. If the node at</a>
+<a name="904"><span class="lineNum"> 904 </span> : : * nodeoffset has depth D, then:</a>
+<a name="905"><span class="lineNum"> 905 </span> : : * fdt_supernode_atdepth_offset(fdt, nodeoffset, D, NULL);</a>
+<a name="906"><span class="lineNum"> 906 </span> : : * will return nodeoffset itself.</a>
+<a name="907"><span class="lineNum"> 907 </span> : : *</a>
+<a name="908"><span class="lineNum"> 908 </span> : : * NOTE: This function is expensive, as it must scan the device tree</a>
+<a name="909"><span class="lineNum"> 909 </span> : : * structure from the start to nodeoffset.</a>
+<a name="910"><span class="lineNum"> 910 </span> : : *</a>
+<a name="911"><span class="lineNum"> 911 </span> : : * returns:</a>
+<a name="912"><span class="lineNum"> 912 </span> : : * structure block offset of the node at node offset's ancestor</a>
+<a name="913"><span class="lineNum"> 913 </span> : : * of depth supernodedepth (&gt;=0), on success</a>
+<a name="914"><span class="lineNum"> 914 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag</a>
+<a name="915"><span class="lineNum"> 915 </span> : : * -FDT_ERR_NOTFOUND, supernodedepth was greater than the depth of</a>
+<a name="916"><span class="lineNum"> 916 </span> : : * nodeoffset</a>
+<a name="917"><span class="lineNum"> 917 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="918"><span class="lineNum"> 918 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="919"><span class="lineNum"> 919 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="920"><span class="lineNum"> 920 </span> : : * -FDT_ERR_BADSTRUCTURE, standard meanings</a>
+<a name="921"><span class="lineNum"> 921 </span> : : */</a>
+<a name="922"><span class="lineNum"> 922 </span> : : int fdt_supernode_atdepth_offset(const void *fdt, int nodeoffset,</a>
+<a name="923"><span class="lineNum"> 923 </span> : : int supernodedepth, int *nodedepth);</a>
+<a name="924"><span class="lineNum"> 924 </span> : : </a>
+<a name="925"><span class="lineNum"> 925 </span> : : /**</a>
+<a name="926"><span class="lineNum"> 926 </span> : : * fdt_node_depth - find the depth of a given node</a>
+<a name="927"><span class="lineNum"> 927 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="928"><span class="lineNum"> 928 </span> : : * @nodeoffset: offset of the node whose parent to find</a>
+<a name="929"><span class="lineNum"> 929 </span> : : *</a>
+<a name="930"><span class="lineNum"> 930 </span> : : * fdt_node_depth() finds the depth of a given node. The root node</a>
+<a name="931"><span class="lineNum"> 931 </span> : : * has depth 0, its immediate subnodes depth 1 and so forth.</a>
+<a name="932"><span class="lineNum"> 932 </span> : : *</a>
+<a name="933"><span class="lineNum"> 933 </span> : : * NOTE: This function is expensive, as it must scan the device tree</a>
+<a name="934"><span class="lineNum"> 934 </span> : : * structure from the start to nodeoffset.</a>
+<a name="935"><span class="lineNum"> 935 </span> : : *</a>
+<a name="936"><span class="lineNum"> 936 </span> : : * returns:</a>
+<a name="937"><span class="lineNum"> 937 </span> : : * depth of the node at nodeoffset (&gt;=0), on success</a>
+<a name="938"><span class="lineNum"> 938 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag</a>
+<a name="939"><span class="lineNum"> 939 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="940"><span class="lineNum"> 940 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="941"><span class="lineNum"> 941 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="942"><span class="lineNum"> 942 </span> : : * -FDT_ERR_BADSTRUCTURE, standard meanings</a>
+<a name="943"><span class="lineNum"> 943 </span> : : */</a>
+<a name="944"><span class="lineNum"> 944 </span> : : int fdt_node_depth(const void *fdt, int nodeoffset);</a>
+<a name="945"><span class="lineNum"> 945 </span> : : </a>
+<a name="946"><span class="lineNum"> 946 </span> : : /**</a>
+<a name="947"><span class="lineNum"> 947 </span> : : * fdt_parent_offset - find the parent of a given node</a>
+<a name="948"><span class="lineNum"> 948 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="949"><span class="lineNum"> 949 </span> : : * @nodeoffset: offset of the node whose parent to find</a>
+<a name="950"><span class="lineNum"> 950 </span> : : *</a>
+<a name="951"><span class="lineNum"> 951 </span> : : * fdt_parent_offset() locates the parent node of a given node (that</a>
+<a name="952"><span class="lineNum"> 952 </span> : : * is, it finds the offset of the node which contains the node at</a>
+<a name="953"><span class="lineNum"> 953 </span> : : * nodeoffset as a subnode).</a>
+<a name="954"><span class="lineNum"> 954 </span> : : *</a>
+<a name="955"><span class="lineNum"> 955 </span> : : * NOTE: This function is expensive, as it must scan the device tree</a>
+<a name="956"><span class="lineNum"> 956 </span> : : * structure from the start to nodeoffset, *twice*.</a>
+<a name="957"><span class="lineNum"> 957 </span> : : *</a>
+<a name="958"><span class="lineNum"> 958 </span> : : * returns:</a>
+<a name="959"><span class="lineNum"> 959 </span> : : * structure block offset of the parent of the node at nodeoffset</a>
+<a name="960"><span class="lineNum"> 960 </span> : : * (&gt;=0), on success</a>
+<a name="961"><span class="lineNum"> 961 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag</a>
+<a name="962"><span class="lineNum"> 962 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="963"><span class="lineNum"> 963 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="964"><span class="lineNum"> 964 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="965"><span class="lineNum"> 965 </span> : : * -FDT_ERR_BADSTRUCTURE, standard meanings</a>
+<a name="966"><span class="lineNum"> 966 </span> : : */</a>
+<a name="967"><span class="lineNum"> 967 </span> : : int fdt_parent_offset(const void *fdt, int nodeoffset);</a>
+<a name="968"><span class="lineNum"> 968 </span> : : </a>
+<a name="969"><span class="lineNum"> 969 </span> : : /**</a>
+<a name="970"><span class="lineNum"> 970 </span> : : * fdt_node_offset_by_prop_value - find nodes with a given property value</a>
+<a name="971"><span class="lineNum"> 971 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="972"><span class="lineNum"> 972 </span> : : * @startoffset: only find nodes after this offset</a>
+<a name="973"><span class="lineNum"> 973 </span> : : * @propname: property name to check</a>
+<a name="974"><span class="lineNum"> 974 </span> : : * @propval: property value to search for</a>
+<a name="975"><span class="lineNum"> 975 </span> : : * @proplen: length of the value in propval</a>
+<a name="976"><span class="lineNum"> 976 </span> : : *</a>
+<a name="977"><span class="lineNum"> 977 </span> : : * fdt_node_offset_by_prop_value() returns the offset of the first</a>
+<a name="978"><span class="lineNum"> 978 </span> : : * node after startoffset, which has a property named propname whose</a>
+<a name="979"><span class="lineNum"> 979 </span> : : * value is of length proplen and has value equal to propval; or if</a>
+<a name="980"><span class="lineNum"> 980 </span> : : * startoffset is -1, the very first such node in the tree.</a>
+<a name="981"><span class="lineNum"> 981 </span> : : *</a>
+<a name="982"><span class="lineNum"> 982 </span> : : * To iterate through all nodes matching the criterion, the following</a>
+<a name="983"><span class="lineNum"> 983 </span> : : * idiom can be used:</a>
+<a name="984"><span class="lineNum"> 984 </span> : : * offset = fdt_node_offset_by_prop_value(fdt, -1, propname,</a>
+<a name="985"><span class="lineNum"> 985 </span> : : * propval, proplen);</a>
+<a name="986"><span class="lineNum"> 986 </span> : : * while (offset != -FDT_ERR_NOTFOUND) {</a>
+<a name="987"><span class="lineNum"> 987 </span> : : * // other code here</a>
+<a name="988"><span class="lineNum"> 988 </span> : : * offset = fdt_node_offset_by_prop_value(fdt, offset, propname,</a>
+<a name="989"><span class="lineNum"> 989 </span> : : * propval, proplen);</a>
+<a name="990"><span class="lineNum"> 990 </span> : : * }</a>
+<a name="991"><span class="lineNum"> 991 </span> : : *</a>
+<a name="992"><span class="lineNum"> 992 </span> : : * Note the -1 in the first call to the function, if 0 is used here</a>
+<a name="993"><span class="lineNum"> 993 </span> : : * instead, the function will never locate the root node, even if it</a>
+<a name="994"><span class="lineNum"> 994 </span> : : * matches the criterion.</a>
<a name="995"><span class="lineNum"> 995 </span> : : *</a>
-<a name="996"><span class="lineNum"> 996 </span> : : * To iterate through all nodes matching the criterion, the following</a>
-<a name="997"><span class="lineNum"> 997 </span> : : * idiom can be used:</a>
-<a name="998"><span class="lineNum"> 998 </span> : : * offset = fdt_node_offset_by_prop_value(fdt, -1, propname,</a>
-<a name="999"><span class="lineNum"> 999 </span> : : * propval, proplen);</a>
-<a name="1000"><span class="lineNum"> 1000 </span> : : * while (offset != -FDT_ERR_NOTFOUND) {</a>
-<a name="1001"><span class="lineNum"> 1001 </span> : : * // other code here</a>
-<a name="1002"><span class="lineNum"> 1002 </span> : : * offset = fdt_node_offset_by_prop_value(fdt, offset, propname,</a>
-<a name="1003"><span class="lineNum"> 1003 </span> : : * propval, proplen);</a>
-<a name="1004"><span class="lineNum"> 1004 </span> : : * }</a>
-<a name="1005"><span class="lineNum"> 1005 </span> : : *</a>
-<a name="1006"><span class="lineNum"> 1006 </span> : : * Note the -1 in the first call to the function, if 0 is used here</a>
-<a name="1007"><span class="lineNum"> 1007 </span> : : * instead, the function will never locate the root node, even if it</a>
-<a name="1008"><span class="lineNum"> 1008 </span> : : * matches the criterion.</a>
-<a name="1009"><span class="lineNum"> 1009 </span> : : *</a>
-<a name="1010"><span class="lineNum"> 1010 </span> : : * returns:</a>
-<a name="1011"><span class="lineNum"> 1011 </span> : : * structure block offset of the located node (&gt;= 0, &gt;startoffset),</a>
-<a name="1012"><span class="lineNum"> 1012 </span> : : * on success</a>
-<a name="1013"><span class="lineNum"> 1013 </span> : : * -FDT_ERR_NOTFOUND, no node matching the criterion exists in the</a>
-<a name="1014"><span class="lineNum"> 1014 </span> : : * tree after startoffset</a>
-<a name="1015"><span class="lineNum"> 1015 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag</a>
-<a name="1016"><span class="lineNum"> 1016 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1017"><span class="lineNum"> 1017 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1018"><span class="lineNum"> 1018 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1019"><span class="lineNum"> 1019 </span> : : * -FDT_ERR_BADSTRUCTURE, standard meanings</a>
-<a name="1020"><span class="lineNum"> 1020 </span> : : */</a>
-<a name="1021"><span class="lineNum"> 1021 </span> : : int fdt_node_offset_by_prop_value(const void *fdt, int startoffset,</a>
-<a name="1022"><span class="lineNum"> 1022 </span> : : const char *propname,</a>
-<a name="1023"><span class="lineNum"> 1023 </span> : : const void *propval, int proplen);</a>
-<a name="1024"><span class="lineNum"> 1024 </span> : : </a>
-<a name="1025"><span class="lineNum"> 1025 </span> : : /**</a>
-<a name="1026"><span class="lineNum"> 1026 </span> : : * fdt_node_offset_by_phandle - find the node with a given phandle</a>
-<a name="1027"><span class="lineNum"> 1027 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1028"><span class="lineNum"> 1028 </span> : : * @phandle: phandle value</a>
-<a name="1029"><span class="lineNum"> 1029 </span> : : *</a>
-<a name="1030"><span class="lineNum"> 1030 </span> : : * fdt_node_offset_by_phandle() returns the offset of the node</a>
-<a name="1031"><span class="lineNum"> 1031 </span> : : * which has the given phandle value. If there is more than one node</a>
-<a name="1032"><span class="lineNum"> 1032 </span> : : * in the tree with the given phandle (an invalid tree), results are</a>
-<a name="1033"><span class="lineNum"> 1033 </span> : : * undefined.</a>
-<a name="1034"><span class="lineNum"> 1034 </span> : : *</a>
-<a name="1035"><span class="lineNum"> 1035 </span> : : * returns:</a>
-<a name="1036"><span class="lineNum"> 1036 </span> : : * structure block offset of the located node (&gt;= 0), on success</a>
-<a name="1037"><span class="lineNum"> 1037 </span> : : * -FDT_ERR_NOTFOUND, no node with that phandle exists</a>
-<a name="1038"><span class="lineNum"> 1038 </span> : : * -FDT_ERR_BADPHANDLE, given phandle value was invalid (0 or -1)</a>
-<a name="1039"><span class="lineNum"> 1039 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1040"><span class="lineNum"> 1040 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1041"><span class="lineNum"> 1041 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1042"><span class="lineNum"> 1042 </span> : : * -FDT_ERR_BADSTRUCTURE, standard meanings</a>
-<a name="1043"><span class="lineNum"> 1043 </span> : : */</a>
-<a name="1044"><span class="lineNum"> 1044 </span> : : int fdt_node_offset_by_phandle(const void *fdt, uint32_t phandle);</a>
-<a name="1045"><span class="lineNum"> 1045 </span> : : </a>
-<a name="1046"><span class="lineNum"> 1046 </span> : : /**</a>
-<a name="1047"><span class="lineNum"> 1047 </span> : : * fdt_node_check_compatible: check a node's compatible property</a>
-<a name="1048"><span class="lineNum"> 1048 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1049"><span class="lineNum"> 1049 </span> : : * @nodeoffset: offset of a tree node</a>
-<a name="1050"><span class="lineNum"> 1050 </span> : : * @compatible: string to match against</a>
-<a name="1051"><span class="lineNum"> 1051 </span> : : *</a>
-<a name="1052"><span class="lineNum"> 1052 </span> : : *</a>
-<a name="1053"><span class="lineNum"> 1053 </span> : : * fdt_node_check_compatible() returns 0 if the given node contains a</a>
-<a name="1054"><span class="lineNum"> 1054 </span> : : * 'compatible' property with the given string as one of its elements,</a>
-<a name="1055"><span class="lineNum"> 1055 </span> : : * it returns non-zero otherwise, or on error.</a>
-<a name="1056"><span class="lineNum"> 1056 </span> : : *</a>
-<a name="1057"><span class="lineNum"> 1057 </span> : : * returns:</a>
-<a name="1058"><span class="lineNum"> 1058 </span> : : * 0, if the node has a 'compatible' property listing the given string</a>
-<a name="1059"><span class="lineNum"> 1059 </span> : : * 1, if the node has a 'compatible' property, but it does not list</a>
-<a name="1060"><span class="lineNum"> 1060 </span> : : * the given string</a>
-<a name="1061"><span class="lineNum"> 1061 </span> : : * -FDT_ERR_NOTFOUND, if the given node has no 'compatible' property</a>
-<a name="1062"><span class="lineNum"> 1062 </span> : : * -FDT_ERR_BADOFFSET, if nodeoffset does not refer to a BEGIN_NODE tag</a>
-<a name="1063"><span class="lineNum"> 1063 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1064"><span class="lineNum"> 1064 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1065"><span class="lineNum"> 1065 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1066"><span class="lineNum"> 1066 </span> : : * -FDT_ERR_BADSTRUCTURE, standard meanings</a>
-<a name="1067"><span class="lineNum"> 1067 </span> : : */</a>
-<a name="1068"><span class="lineNum"> 1068 </span> : : int fdt_node_check_compatible(const void *fdt, int nodeoffset,</a>
-<a name="1069"><span class="lineNum"> 1069 </span> : : const char *compatible);</a>
-<a name="1070"><span class="lineNum"> 1070 </span> : : </a>
-<a name="1071"><span class="lineNum"> 1071 </span> : : /**</a>
-<a name="1072"><span class="lineNum"> 1072 </span> : : * fdt_node_offset_by_compatible - find nodes with a given 'compatible' value</a>
-<a name="1073"><span class="lineNum"> 1073 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1074"><span class="lineNum"> 1074 </span> : : * @startoffset: only find nodes after this offset</a>
-<a name="1075"><span class="lineNum"> 1075 </span> : : * @compatible: 'compatible' string to match against</a>
-<a name="1076"><span class="lineNum"> 1076 </span> : : *</a>
-<a name="1077"><span class="lineNum"> 1077 </span> : : * fdt_node_offset_by_compatible() returns the offset of the first</a>
-<a name="1078"><span class="lineNum"> 1078 </span> : : * node after startoffset, which has a 'compatible' property which</a>
-<a name="1079"><span class="lineNum"> 1079 </span> : : * lists the given compatible string; or if startoffset is -1, the</a>
-<a name="1080"><span class="lineNum"> 1080 </span> : : * very first such node in the tree.</a>
-<a name="1081"><span class="lineNum"> 1081 </span> : : *</a>
-<a name="1082"><span class="lineNum"> 1082 </span> : : * To iterate through all nodes matching the criterion, the following</a>
-<a name="1083"><span class="lineNum"> 1083 </span> : : * idiom can be used:</a>
-<a name="1084"><span class="lineNum"> 1084 </span> : : * offset = fdt_node_offset_by_compatible(fdt, -1, compatible);</a>
-<a name="1085"><span class="lineNum"> 1085 </span> : : * while (offset != -FDT_ERR_NOTFOUND) {</a>
-<a name="1086"><span class="lineNum"> 1086 </span> : : * // other code here</a>
-<a name="1087"><span class="lineNum"> 1087 </span> : : * offset = fdt_node_offset_by_compatible(fdt, offset, compatible);</a>
-<a name="1088"><span class="lineNum"> 1088 </span> : : * }</a>
-<a name="1089"><span class="lineNum"> 1089 </span> : : *</a>
-<a name="1090"><span class="lineNum"> 1090 </span> : : * Note the -1 in the first call to the function, if 0 is used here</a>
-<a name="1091"><span class="lineNum"> 1091 </span> : : * instead, the function will never locate the root node, even if it</a>
-<a name="1092"><span class="lineNum"> 1092 </span> : : * matches the criterion.</a>
-<a name="1093"><span class="lineNum"> 1093 </span> : : *</a>
-<a name="1094"><span class="lineNum"> 1094 </span> : : * returns:</a>
-<a name="1095"><span class="lineNum"> 1095 </span> : : * structure block offset of the located node (&gt;= 0, &gt;startoffset),</a>
-<a name="1096"><span class="lineNum"> 1096 </span> : : * on success</a>
-<a name="1097"><span class="lineNum"> 1097 </span> : : * -FDT_ERR_NOTFOUND, no node matching the criterion exists in the</a>
-<a name="1098"><span class="lineNum"> 1098 </span> : : * tree after startoffset</a>
-<a name="1099"><span class="lineNum"> 1099 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag</a>
-<a name="1100"><span class="lineNum"> 1100 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1101"><span class="lineNum"> 1101 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1102"><span class="lineNum"> 1102 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1103"><span class="lineNum"> 1103 </span> : : * -FDT_ERR_BADSTRUCTURE, standard meanings</a>
+<a name="996"><span class="lineNum"> 996 </span> : : * returns:</a>
+<a name="997"><span class="lineNum"> 997 </span> : : * structure block offset of the located node (&gt;= 0, &gt;startoffset),</a>
+<a name="998"><span class="lineNum"> 998 </span> : : * on success</a>
+<a name="999"><span class="lineNum"> 999 </span> : : * -FDT_ERR_NOTFOUND, no node matching the criterion exists in the</a>
+<a name="1000"><span class="lineNum"> 1000 </span> : : * tree after startoffset</a>
+<a name="1001"><span class="lineNum"> 1001 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag</a>
+<a name="1002"><span class="lineNum"> 1002 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1003"><span class="lineNum"> 1003 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1004"><span class="lineNum"> 1004 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1005"><span class="lineNum"> 1005 </span> : : * -FDT_ERR_BADSTRUCTURE, standard meanings</a>
+<a name="1006"><span class="lineNum"> 1006 </span> : : */</a>
+<a name="1007"><span class="lineNum"> 1007 </span> : : int fdt_node_offset_by_prop_value(const void *fdt, int startoffset,</a>
+<a name="1008"><span class="lineNum"> 1008 </span> : : const char *propname,</a>
+<a name="1009"><span class="lineNum"> 1009 </span> : : const void *propval, int proplen);</a>
+<a name="1010"><span class="lineNum"> 1010 </span> : : </a>
+<a name="1011"><span class="lineNum"> 1011 </span> : : /**</a>
+<a name="1012"><span class="lineNum"> 1012 </span> : : * fdt_node_offset_by_phandle - find the node with a given phandle</a>
+<a name="1013"><span class="lineNum"> 1013 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1014"><span class="lineNum"> 1014 </span> : : * @phandle: phandle value</a>
+<a name="1015"><span class="lineNum"> 1015 </span> : : *</a>
+<a name="1016"><span class="lineNum"> 1016 </span> : : * fdt_node_offset_by_phandle() returns the offset of the node</a>
+<a name="1017"><span class="lineNum"> 1017 </span> : : * which has the given phandle value. If there is more than one node</a>
+<a name="1018"><span class="lineNum"> 1018 </span> : : * in the tree with the given phandle (an invalid tree), results are</a>
+<a name="1019"><span class="lineNum"> 1019 </span> : : * undefined.</a>
+<a name="1020"><span class="lineNum"> 1020 </span> : : *</a>
+<a name="1021"><span class="lineNum"> 1021 </span> : : * returns:</a>
+<a name="1022"><span class="lineNum"> 1022 </span> : : * structure block offset of the located node (&gt;= 0), on success</a>
+<a name="1023"><span class="lineNum"> 1023 </span> : : * -FDT_ERR_NOTFOUND, no node with that phandle exists</a>
+<a name="1024"><span class="lineNum"> 1024 </span> : : * -FDT_ERR_BADPHANDLE, given phandle value was invalid (0 or -1)</a>
+<a name="1025"><span class="lineNum"> 1025 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1026"><span class="lineNum"> 1026 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1027"><span class="lineNum"> 1027 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1028"><span class="lineNum"> 1028 </span> : : * -FDT_ERR_BADSTRUCTURE, standard meanings</a>
+<a name="1029"><span class="lineNum"> 1029 </span> : : */</a>
+<a name="1030"><span class="lineNum"> 1030 </span> : : int fdt_node_offset_by_phandle(const void *fdt, uint32_t phandle);</a>
+<a name="1031"><span class="lineNum"> 1031 </span> : : </a>
+<a name="1032"><span class="lineNum"> 1032 </span> : : /**</a>
+<a name="1033"><span class="lineNum"> 1033 </span> : : * fdt_node_check_compatible - check a node's compatible property</a>
+<a name="1034"><span class="lineNum"> 1034 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1035"><span class="lineNum"> 1035 </span> : : * @nodeoffset: offset of a tree node</a>
+<a name="1036"><span class="lineNum"> 1036 </span> : : * @compatible: string to match against</a>
+<a name="1037"><span class="lineNum"> 1037 </span> : : *</a>
+<a name="1038"><span class="lineNum"> 1038 </span> : : * fdt_node_check_compatible() returns 0 if the given node contains a</a>
+<a name="1039"><span class="lineNum"> 1039 </span> : : * @compatible property with the given string as one of its elements,</a>
+<a name="1040"><span class="lineNum"> 1040 </span> : : * it returns non-zero otherwise, or on error.</a>
+<a name="1041"><span class="lineNum"> 1041 </span> : : *</a>
+<a name="1042"><span class="lineNum"> 1042 </span> : : * returns:</a>
+<a name="1043"><span class="lineNum"> 1043 </span> : : * 0, if the node has a 'compatible' property listing the given string</a>
+<a name="1044"><span class="lineNum"> 1044 </span> : : * 1, if the node has a 'compatible' property, but it does not list</a>
+<a name="1045"><span class="lineNum"> 1045 </span> : : * the given string</a>
+<a name="1046"><span class="lineNum"> 1046 </span> : : * -FDT_ERR_NOTFOUND, if the given node has no 'compatible' property</a>
+<a name="1047"><span class="lineNum"> 1047 </span> : : * -FDT_ERR_BADOFFSET, if nodeoffset does not refer to a BEGIN_NODE tag</a>
+<a name="1048"><span class="lineNum"> 1048 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1049"><span class="lineNum"> 1049 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1050"><span class="lineNum"> 1050 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1051"><span class="lineNum"> 1051 </span> : : * -FDT_ERR_BADSTRUCTURE, standard meanings</a>
+<a name="1052"><span class="lineNum"> 1052 </span> : : */</a>
+<a name="1053"><span class="lineNum"> 1053 </span> : : int fdt_node_check_compatible(const void *fdt, int nodeoffset,</a>
+<a name="1054"><span class="lineNum"> 1054 </span> : : const char *compatible);</a>
+<a name="1055"><span class="lineNum"> 1055 </span> : : </a>
+<a name="1056"><span class="lineNum"> 1056 </span> : : /**</a>
+<a name="1057"><span class="lineNum"> 1057 </span> : : * fdt_node_offset_by_compatible - find nodes with a given 'compatible' value</a>
+<a name="1058"><span class="lineNum"> 1058 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1059"><span class="lineNum"> 1059 </span> : : * @startoffset: only find nodes after this offset</a>
+<a name="1060"><span class="lineNum"> 1060 </span> : : * @compatible: 'compatible' string to match against</a>
+<a name="1061"><span class="lineNum"> 1061 </span> : : *</a>
+<a name="1062"><span class="lineNum"> 1062 </span> : : * fdt_node_offset_by_compatible() returns the offset of the first</a>
+<a name="1063"><span class="lineNum"> 1063 </span> : : * node after startoffset, which has a 'compatible' property which</a>
+<a name="1064"><span class="lineNum"> 1064 </span> : : * lists the given compatible string; or if startoffset is -1, the</a>
+<a name="1065"><span class="lineNum"> 1065 </span> : : * very first such node in the tree.</a>
+<a name="1066"><span class="lineNum"> 1066 </span> : : *</a>
+<a name="1067"><span class="lineNum"> 1067 </span> : : * To iterate through all nodes matching the criterion, the following</a>
+<a name="1068"><span class="lineNum"> 1068 </span> : : * idiom can be used:</a>
+<a name="1069"><span class="lineNum"> 1069 </span> : : * offset = fdt_node_offset_by_compatible(fdt, -1, compatible);</a>
+<a name="1070"><span class="lineNum"> 1070 </span> : : * while (offset != -FDT_ERR_NOTFOUND) {</a>
+<a name="1071"><span class="lineNum"> 1071 </span> : : * // other code here</a>
+<a name="1072"><span class="lineNum"> 1072 </span> : : * offset = fdt_node_offset_by_compatible(fdt, offset, compatible);</a>
+<a name="1073"><span class="lineNum"> 1073 </span> : : * }</a>
+<a name="1074"><span class="lineNum"> 1074 </span> : : *</a>
+<a name="1075"><span class="lineNum"> 1075 </span> : : * Note the -1 in the first call to the function, if 0 is used here</a>
+<a name="1076"><span class="lineNum"> 1076 </span> : : * instead, the function will never locate the root node, even if it</a>
+<a name="1077"><span class="lineNum"> 1077 </span> : : * matches the criterion.</a>
+<a name="1078"><span class="lineNum"> 1078 </span> : : *</a>
+<a name="1079"><span class="lineNum"> 1079 </span> : : * returns:</a>
+<a name="1080"><span class="lineNum"> 1080 </span> : : * structure block offset of the located node (&gt;= 0, &gt;startoffset),</a>
+<a name="1081"><span class="lineNum"> 1081 </span> : : * on success</a>
+<a name="1082"><span class="lineNum"> 1082 </span> : : * -FDT_ERR_NOTFOUND, no node matching the criterion exists in the</a>
+<a name="1083"><span class="lineNum"> 1083 </span> : : * tree after startoffset</a>
+<a name="1084"><span class="lineNum"> 1084 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset does not refer to a BEGIN_NODE tag</a>
+<a name="1085"><span class="lineNum"> 1085 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1086"><span class="lineNum"> 1086 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1087"><span class="lineNum"> 1087 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1088"><span class="lineNum"> 1088 </span> : : * -FDT_ERR_BADSTRUCTURE, standard meanings</a>
+<a name="1089"><span class="lineNum"> 1089 </span> : : */</a>
+<a name="1090"><span class="lineNum"> 1090 </span> : : int fdt_node_offset_by_compatible(const void *fdt, int startoffset,</a>
+<a name="1091"><span class="lineNum"> 1091 </span> : : const char *compatible);</a>
+<a name="1092"><span class="lineNum"> 1092 </span> : : </a>
+<a name="1093"><span class="lineNum"> 1093 </span> : : /**</a>
+<a name="1094"><span class="lineNum"> 1094 </span> : : * fdt_stringlist_contains - check a string list property for a string</a>
+<a name="1095"><span class="lineNum"> 1095 </span> : : * @strlist: Property containing a list of strings to check</a>
+<a name="1096"><span class="lineNum"> 1096 </span> : : * @listlen: Length of property</a>
+<a name="1097"><span class="lineNum"> 1097 </span> : : * @str: String to search for</a>
+<a name="1098"><span class="lineNum"> 1098 </span> : : *</a>
+<a name="1099"><span class="lineNum"> 1099 </span> : : * This is a utility function provided for convenience. The list contains</a>
+<a name="1100"><span class="lineNum"> 1100 </span> : : * one or more strings, each terminated by \0, as is found in a device tree</a>
+<a name="1101"><span class="lineNum"> 1101 </span> : : * &quot;compatible&quot; property.</a>
+<a name="1102"><span class="lineNum"> 1102 </span> : : *</a>
+<a name="1103"><span class="lineNum"> 1103 </span> : : * Return: 1 if the string is found in the list, 0 not found, or invalid list</a>
<a name="1104"><span class="lineNum"> 1104 </span> : : */</a>
-<a name="1105"><span class="lineNum"> 1105 </span> : : int fdt_node_offset_by_compatible(const void *fdt, int startoffset,</a>
-<a name="1106"><span class="lineNum"> 1106 </span> : : const char *compatible);</a>
-<a name="1107"><span class="lineNum"> 1107 </span> : : </a>
-<a name="1108"><span class="lineNum"> 1108 </span> : : /**</a>
-<a name="1109"><span class="lineNum"> 1109 </span> : : * fdt_stringlist_contains - check a string list property for a string</a>
-<a name="1110"><span class="lineNum"> 1110 </span> : : * @strlist: Property containing a list of strings to check</a>
-<a name="1111"><span class="lineNum"> 1111 </span> : : * @listlen: Length of property</a>
-<a name="1112"><span class="lineNum"> 1112 </span> : : * @str: String to search for</a>
-<a name="1113"><span class="lineNum"> 1113 </span> : : *</a>
-<a name="1114"><span class="lineNum"> 1114 </span> : : * This is a utility function provided for convenience. The list contains</a>
-<a name="1115"><span class="lineNum"> 1115 </span> : : * one or more strings, each terminated by \0, as is found in a device tree</a>
-<a name="1116"><span class="lineNum"> 1116 </span> : : * &quot;compatible&quot; property.</a>
-<a name="1117"><span class="lineNum"> 1117 </span> : : *</a>
-<a name="1118"><span class="lineNum"> 1118 </span> : : * @return: 1 if the string is found in the list, 0 not found, or invalid list</a>
-<a name="1119"><span class="lineNum"> 1119 </span> : : */</a>
-<a name="1120"><span class="lineNum"> 1120 </span> : : int fdt_stringlist_contains(const char *strlist, int listlen, const char *str);</a>
-<a name="1121"><span class="lineNum"> 1121 </span> : : </a>
-<a name="1122"><span class="lineNum"> 1122 </span> : : /**</a>
-<a name="1123"><span class="lineNum"> 1123 </span> : : * fdt_stringlist_count - count the number of strings in a string list</a>
-<a name="1124"><span class="lineNum"> 1124 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1125"><span class="lineNum"> 1125 </span> : : * @nodeoffset: offset of a tree node</a>
-<a name="1126"><span class="lineNum"> 1126 </span> : : * @property: name of the property containing the string list</a>
-<a name="1127"><span class="lineNum"> 1127 </span> : : * @return:</a>
-<a name="1128"><span class="lineNum"> 1128 </span> : : * the number of strings in the given property</a>
-<a name="1129"><span class="lineNum"> 1129 </span> : : * -FDT_ERR_BADVALUE if the property value is not NUL-terminated</a>
-<a name="1130"><span class="lineNum"> 1130 </span> : : * -FDT_ERR_NOTFOUND if the property does not exist</a>
-<a name="1131"><span class="lineNum"> 1131 </span> : : */</a>
-<a name="1132"><span class="lineNum"> 1132 </span> : : int fdt_stringlist_count(const void *fdt, int nodeoffset, const char *property);</a>
-<a name="1133"><span class="lineNum"> 1133 </span> : : </a>
-<a name="1134"><span class="lineNum"> 1134 </span> : : /**</a>
-<a name="1135"><span class="lineNum"> 1135 </span> : : * fdt_stringlist_search - find a string in a string list and return its index</a>
-<a name="1136"><span class="lineNum"> 1136 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1137"><span class="lineNum"> 1137 </span> : : * @nodeoffset: offset of a tree node</a>
-<a name="1138"><span class="lineNum"> 1138 </span> : : * @property: name of the property containing the string list</a>
-<a name="1139"><span class="lineNum"> 1139 </span> : : * @string: string to look up in the string list</a>
-<a name="1140"><span class="lineNum"> 1140 </span> : : *</a>
-<a name="1141"><span class="lineNum"> 1141 </span> : : * Note that it is possible for this function to succeed on property values</a>
-<a name="1142"><span class="lineNum"> 1142 </span> : : * that are not NUL-terminated. That's because the function will stop after</a>
-<a name="1143"><span class="lineNum"> 1143 </span> : : * finding the first occurrence of @string. This can for example happen with</a>
-<a name="1144"><span class="lineNum"> 1144 </span> : : * small-valued cell properties, such as #address-cells, when searching for</a>
-<a name="1145"><span class="lineNum"> 1145 </span> : : * the empty string.</a>
-<a name="1146"><span class="lineNum"> 1146 </span> : : *</a>
-<a name="1147"><span class="lineNum"> 1147 </span> : : * @return:</a>
-<a name="1148"><span class="lineNum"> 1148 </span> : : * the index of the string in the list of strings</a>
-<a name="1149"><span class="lineNum"> 1149 </span> : : * -FDT_ERR_BADVALUE if the property value is not NUL-terminated</a>
-<a name="1150"><span class="lineNum"> 1150 </span> : : * -FDT_ERR_NOTFOUND if the property does not exist or does not contain</a>
-<a name="1151"><span class="lineNum"> 1151 </span> : : * the given string</a>
-<a name="1152"><span class="lineNum"> 1152 </span> : : */</a>
-<a name="1153"><span class="lineNum"> 1153 </span> : : int fdt_stringlist_search(const void *fdt, int nodeoffset, const char *property,</a>
-<a name="1154"><span class="lineNum"> 1154 </span> : : const char *string);</a>
-<a name="1155"><span class="lineNum"> 1155 </span> : : </a>
-<a name="1156"><span class="lineNum"> 1156 </span> : : /**</a>
-<a name="1157"><span class="lineNum"> 1157 </span> : : * fdt_stringlist_get() - obtain the string at a given index in a string list</a>
-<a name="1158"><span class="lineNum"> 1158 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1159"><span class="lineNum"> 1159 </span> : : * @nodeoffset: offset of a tree node</a>
-<a name="1160"><span class="lineNum"> 1160 </span> : : * @property: name of the property containing the string list</a>
-<a name="1161"><span class="lineNum"> 1161 </span> : : * @index: index of the string to return</a>
-<a name="1162"><span class="lineNum"> 1162 </span> : : * @lenp: return location for the string length or an error code on failure</a>
-<a name="1163"><span class="lineNum"> 1163 </span> : : *</a>
-<a name="1164"><span class="lineNum"> 1164 </span> : : * Note that this will successfully extract strings from properties with</a>
-<a name="1165"><span class="lineNum"> 1165 </span> : : * non-NUL-terminated values. For example on small-valued cell properties</a>
-<a name="1166"><span class="lineNum"> 1166 </span> : : * this function will return the empty string.</a>
-<a name="1167"><span class="lineNum"> 1167 </span> : : *</a>
-<a name="1168"><span class="lineNum"> 1168 </span> : : * If non-NULL, the length of the string (on success) or a negative error-code</a>
-<a name="1169"><span class="lineNum"> 1169 </span> : : * (on failure) will be stored in the integer pointer to by lenp.</a>
-<a name="1170"><span class="lineNum"> 1170 </span> : : *</a>
-<a name="1171"><span class="lineNum"> 1171 </span> : : * @return:</a>
-<a name="1172"><span class="lineNum"> 1172 </span> : : * A pointer to the string at the given index in the string list or NULL on</a>
-<a name="1173"><span class="lineNum"> 1173 </span> : : * failure. On success the length of the string will be stored in the memory</a>
-<a name="1174"><span class="lineNum"> 1174 </span> : : * location pointed to by the lenp parameter, if non-NULL. On failure one of</a>
-<a name="1175"><span class="lineNum"> 1175 </span> : : * the following negative error codes will be returned in the lenp parameter</a>
-<a name="1176"><span class="lineNum"> 1176 </span> : : * (if non-NULL):</a>
-<a name="1177"><span class="lineNum"> 1177 </span> : : * -FDT_ERR_BADVALUE if the property value is not NUL-terminated</a>
-<a name="1178"><span class="lineNum"> 1178 </span> : : * -FDT_ERR_NOTFOUND if the property does not exist</a>
-<a name="1179"><span class="lineNum"> 1179 </span> : : */</a>
-<a name="1180"><span class="lineNum"> 1180 </span> : : const char *fdt_stringlist_get(const void *fdt, int nodeoffset,</a>
-<a name="1181"><span class="lineNum"> 1181 </span> : : const char *property, int index,</a>
-<a name="1182"><span class="lineNum"> 1182 </span> : : int *lenp);</a>
-<a name="1183"><span class="lineNum"> 1183 </span> : : </a>
-<a name="1184"><span class="lineNum"> 1184 </span> : : /**********************************************************************/</a>
-<a name="1185"><span class="lineNum"> 1185 </span> : : /* Read-only functions (addressing related) */</a>
-<a name="1186"><span class="lineNum"> 1186 </span> : : /**********************************************************************/</a>
-<a name="1187"><span class="lineNum"> 1187 </span> : : </a>
-<a name="1188"><span class="lineNum"> 1188 </span> : : /**</a>
-<a name="1189"><span class="lineNum"> 1189 </span> : : * FDT_MAX_NCELLS - maximum value for #address-cells and #size-cells</a>
-<a name="1190"><span class="lineNum"> 1190 </span> : : *</a>
-<a name="1191"><span class="lineNum"> 1191 </span> : : * This is the maximum value for #address-cells, #size-cells and</a>
-<a name="1192"><span class="lineNum"> 1192 </span> : : * similar properties that will be processed by libfdt. IEE1275</a>
-<a name="1193"><span class="lineNum"> 1193 </span> : : * requires that OF implementations handle values up to 4.</a>
-<a name="1194"><span class="lineNum"> 1194 </span> : : * Implementations may support larger values, but in practice higher</a>
-<a name="1195"><span class="lineNum"> 1195 </span> : : * values aren't used.</a>
-<a name="1196"><span class="lineNum"> 1196 </span> : : */</a>
-<a name="1197"><span class="lineNum"> 1197 </span> : : #define FDT_MAX_NCELLS 4</a>
-<a name="1198"><span class="lineNum"> 1198 </span> : : </a>
-<a name="1199"><span class="lineNum"> 1199 </span> : : /**</a>
-<a name="1200"><span class="lineNum"> 1200 </span> : : * fdt_address_cells - retrieve address size for a bus represented in the tree</a>
-<a name="1201"><span class="lineNum"> 1201 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1202"><span class="lineNum"> 1202 </span> : : * @nodeoffset: offset of the node to find the address size for</a>
-<a name="1203"><span class="lineNum"> 1203 </span> : : *</a>
-<a name="1204"><span class="lineNum"> 1204 </span> : : * When the node has a valid #address-cells property, returns its value.</a>
-<a name="1205"><span class="lineNum"> 1205 </span> : : *</a>
-<a name="1206"><span class="lineNum"> 1206 </span> : : * returns:</a>
-<a name="1207"><span class="lineNum"> 1207 </span> : : * 0 &lt;= n &lt; FDT_MAX_NCELLS, on success</a>
-<a name="1208"><span class="lineNum"> 1208 </span> : : * 2, if the node has no #address-cells property</a>
-<a name="1209"><span class="lineNum"> 1209 </span> : : * -FDT_ERR_BADNCELLS, if the node has a badly formatted or invalid</a>
-<a name="1210"><span class="lineNum"> 1210 </span> : : * #address-cells property</a>
-<a name="1211"><span class="lineNum"> 1211 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1212"><span class="lineNum"> 1212 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1213"><span class="lineNum"> 1213 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1214"><span class="lineNum"> 1214 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="1215"><span class="lineNum"> 1215 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="1216"><span class="lineNum"> 1216 </span> : : */</a>
-<a name="1217"><span class="lineNum"> 1217 </span> : : int fdt_address_cells(const void *fdt, int nodeoffset);</a>
-<a name="1218"><span class="lineNum"> 1218 </span> : : </a>
-<a name="1219"><span class="lineNum"> 1219 </span> : : /**</a>
-<a name="1220"><span class="lineNum"> 1220 </span> : : * fdt_size_cells - retrieve address range size for a bus represented in the</a>
-<a name="1221"><span class="lineNum"> 1221 </span> : : * tree</a>
-<a name="1222"><span class="lineNum"> 1222 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1223"><span class="lineNum"> 1223 </span> : : * @nodeoffset: offset of the node to find the address range size for</a>
-<a name="1224"><span class="lineNum"> 1224 </span> : : *</a>
-<a name="1225"><span class="lineNum"> 1225 </span> : : * When the node has a valid #size-cells property, returns its value.</a>
-<a name="1226"><span class="lineNum"> 1226 </span> : : *</a>
-<a name="1227"><span class="lineNum"> 1227 </span> : : * returns:</a>
-<a name="1228"><span class="lineNum"> 1228 </span> : : * 0 &lt;= n &lt; FDT_MAX_NCELLS, on success</a>
-<a name="1229"><span class="lineNum"> 1229 </span> : : * 1, if the node has no #size-cells property</a>
-<a name="1230"><span class="lineNum"> 1230 </span> : : * -FDT_ERR_BADNCELLS, if the node has a badly formatted or invalid</a>
-<a name="1231"><span class="lineNum"> 1231 </span> : : * #size-cells property</a>
-<a name="1232"><span class="lineNum"> 1232 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1233"><span class="lineNum"> 1233 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1234"><span class="lineNum"> 1234 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1235"><span class="lineNum"> 1235 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="1236"><span class="lineNum"> 1236 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="1237"><span class="lineNum"> 1237 </span> : : */</a>
-<a name="1238"><span class="lineNum"> 1238 </span> : : int fdt_size_cells(const void *fdt, int nodeoffset);</a>
-<a name="1239"><span class="lineNum"> 1239 </span> : : </a>
-<a name="1240"><span class="lineNum"> 1240 </span> : : </a>
-<a name="1241"><span class="lineNum"> 1241 </span> : : /**********************************************************************/</a>
-<a name="1242"><span class="lineNum"> 1242 </span> : : /* Write-in-place functions */</a>
-<a name="1243"><span class="lineNum"> 1243 </span> : : /**********************************************************************/</a>
-<a name="1244"><span class="lineNum"> 1244 </span> : : </a>
-<a name="1245"><span class="lineNum"> 1245 </span> : : /**</a>
-<a name="1246"><span class="lineNum"> 1246 </span> : : * fdt_setprop_inplace_namelen_partial - change a property's value,</a>
-<a name="1247"><span class="lineNum"> 1247 </span> : : * but not its size</a>
-<a name="1248"><span class="lineNum"> 1248 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1249"><span class="lineNum"> 1249 </span> : : * @nodeoffset: offset of the node whose property to change</a>
-<a name="1250"><span class="lineNum"> 1250 </span> : : * @name: name of the property to change</a>
-<a name="1251"><span class="lineNum"> 1251 </span> : : * @namelen: number of characters of name to consider</a>
-<a name="1252"><span class="lineNum"> 1252 </span> : : * @idx: index of the property to change in the array</a>
-<a name="1253"><span class="lineNum"> 1253 </span> : : * @val: pointer to data to replace the property value with</a>
-<a name="1254"><span class="lineNum"> 1254 </span> : : * @len: length of the property value</a>
-<a name="1255"><span class="lineNum"> 1255 </span> : : *</a>
-<a name="1256"><span class="lineNum"> 1256 </span> : : * Identical to fdt_setprop_inplace(), but modifies the given property</a>
-<a name="1257"><span class="lineNum"> 1257 </span> : : * starting from the given index, and using only the first characters</a>
-<a name="1258"><span class="lineNum"> 1258 </span> : : * of the name. It is useful when you want to manipulate only one value of</a>
-<a name="1259"><span class="lineNum"> 1259 </span> : : * an array and you have a string that doesn't end with \0.</a>
-<a name="1260"><span class="lineNum"> 1260 </span> : : */</a>
-<a name="1261"><span class="lineNum"> 1261 </span> : : #ifndef SWIG /* Not available in Python */</a>
-<a name="1262"><span class="lineNum"> 1262 </span> : : int fdt_setprop_inplace_namelen_partial(void *fdt, int nodeoffset,</a>
-<a name="1263"><span class="lineNum"> 1263 </span> : : const char *name, int namelen,</a>
-<a name="1264"><span class="lineNum"> 1264 </span> : : uint32_t idx, const void *val,</a>
-<a name="1265"><span class="lineNum"> 1265 </span> : : int len);</a>
-<a name="1266"><span class="lineNum"> 1266 </span> : : #endif</a>
-<a name="1267"><span class="lineNum"> 1267 </span> : : </a>
-<a name="1268"><span class="lineNum"> 1268 </span> : : /**</a>
-<a name="1269"><span class="lineNum"> 1269 </span> : : * fdt_setprop_inplace - change a property's value, but not its size</a>
-<a name="1270"><span class="lineNum"> 1270 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1271"><span class="lineNum"> 1271 </span> : : * @nodeoffset: offset of the node whose property to change</a>
-<a name="1272"><span class="lineNum"> 1272 </span> : : * @name: name of the property to change</a>
-<a name="1273"><span class="lineNum"> 1273 </span> : : * @val: pointer to data to replace the property value with</a>
-<a name="1274"><span class="lineNum"> 1274 </span> : : * @len: length of the property value</a>
-<a name="1275"><span class="lineNum"> 1275 </span> : : *</a>
-<a name="1276"><span class="lineNum"> 1276 </span> : : * fdt_setprop_inplace() replaces the value of a given property with</a>
-<a name="1277"><span class="lineNum"> 1277 </span> : : * the data in val, of length len. This function cannot change the</a>
-<a name="1278"><span class="lineNum"> 1278 </span> : : * size of a property, and so will only work if len is equal to the</a>
-<a name="1279"><span class="lineNum"> 1279 </span> : : * current length of the property.</a>
-<a name="1280"><span class="lineNum"> 1280 </span> : : *</a>
-<a name="1281"><span class="lineNum"> 1281 </span> : : * This function will alter only the bytes in the blob which contain</a>
-<a name="1282"><span class="lineNum"> 1282 </span> : : * the given property value, and will not alter or move any other part</a>
-<a name="1283"><span class="lineNum"> 1283 </span> : : * of the tree.</a>
-<a name="1284"><span class="lineNum"> 1284 </span> : : *</a>
-<a name="1285"><span class="lineNum"> 1285 </span> : : * returns:</a>
-<a name="1286"><span class="lineNum"> 1286 </span> : : * 0, on success</a>
-<a name="1287"><span class="lineNum"> 1287 </span> : : * -FDT_ERR_NOSPACE, if len is not equal to the property's current length</a>
-<a name="1288"><span class="lineNum"> 1288 </span> : : * -FDT_ERR_NOTFOUND, node does not have the named property</a>
-<a name="1289"><span class="lineNum"> 1289 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
-<a name="1290"><span class="lineNum"> 1290 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1291"><span class="lineNum"> 1291 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1292"><span class="lineNum"> 1292 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1293"><span class="lineNum"> 1293 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="1294"><span class="lineNum"> 1294 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="1295"><span class="lineNum"> 1295 </span> : : */</a>
-<a name="1296"><span class="lineNum"> 1296 </span> : : #ifndef SWIG /* Not available in Python */</a>
-<a name="1297"><span class="lineNum"> 1297 </span> : : int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,</a>
-<a name="1298"><span class="lineNum"> 1298 </span> : : const void *val, int len);</a>
-<a name="1299"><span class="lineNum"> 1299 </span> : : #endif</a>
-<a name="1300"><span class="lineNum"> 1300 </span> : : </a>
-<a name="1301"><span class="lineNum"> 1301 </span> : : /**</a>
-<a name="1302"><span class="lineNum"> 1302 </span> : : * fdt_setprop_inplace_u32 - change the value of a 32-bit integer property</a>
-<a name="1303"><span class="lineNum"> 1303 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1304"><span class="lineNum"> 1304 </span> : : * @nodeoffset: offset of the node whose property to change</a>
-<a name="1305"><span class="lineNum"> 1305 </span> : : * @name: name of the property to change</a>
-<a name="1306"><span class="lineNum"> 1306 </span> : : * @val: 32-bit integer value to replace the property with</a>
-<a name="1307"><span class="lineNum"> 1307 </span> : : *</a>
-<a name="1308"><span class="lineNum"> 1308 </span> : : * fdt_setprop_inplace_u32() replaces the value of a given property</a>
-<a name="1309"><span class="lineNum"> 1309 </span> : : * with the 32-bit integer value in val, converting val to big-endian</a>
-<a name="1310"><span class="lineNum"> 1310 </span> : : * if necessary. This function cannot change the size of a property,</a>
-<a name="1311"><span class="lineNum"> 1311 </span> : : * and so will only work if the property already exists and has length</a>
-<a name="1312"><span class="lineNum"> 1312 </span> : : * 4.</a>
-<a name="1313"><span class="lineNum"> 1313 </span> : : *</a>
-<a name="1314"><span class="lineNum"> 1314 </span> : : * This function will alter only the bytes in the blob which contain</a>
-<a name="1315"><span class="lineNum"> 1315 </span> : : * the given property value, and will not alter or move any other part</a>
-<a name="1316"><span class="lineNum"> 1316 </span> : : * of the tree.</a>
-<a name="1317"><span class="lineNum"> 1317 </span> : : *</a>
-<a name="1318"><span class="lineNum"> 1318 </span> : : * returns:</a>
-<a name="1319"><span class="lineNum"> 1319 </span> : : * 0, on success</a>
-<a name="1320"><span class="lineNum"> 1320 </span> : : * -FDT_ERR_NOSPACE, if the property's length is not equal to 4</a>
-<a name="1321"><span class="lineNum"> 1321 </span> : : * -FDT_ERR_NOTFOUND, node does not have the named property</a>
-<a name="1322"><span class="lineNum"> 1322 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
-<a name="1323"><span class="lineNum"> 1323 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1324"><span class="lineNum"> 1324 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1325"><span class="lineNum"> 1325 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1326"><span class="lineNum"> 1326 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="1327"><span class="lineNum"> 1327 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="1328"><span class="lineNum"> 1328 </span> : : */</a>
-<a name="1329"><span class="lineNum"> 1329 </span> : : static inline int fdt_setprop_inplace_u32(void *fdt, int nodeoffset,</a>
-<a name="1330"><span class="lineNum"> 1330 </span> : : const char *name, uint32_t val)</a>
-<a name="1331"><span class="lineNum"> 1331 </span> : : {</a>
-<a name="1332"><span class="lineNum"> 1332 </span> : : fdt32_t tmp = cpu_to_fdt32(val);</a>
-<a name="1333"><span class="lineNum"> 1333 </span> : : return fdt_setprop_inplace(fdt, nodeoffset, name, &amp;tmp, sizeof(tmp));</a>
-<a name="1334"><span class="lineNum"> 1334 </span> : : }</a>
-<a name="1335"><span class="lineNum"> 1335 </span> : : </a>
-<a name="1336"><span class="lineNum"> 1336 </span> : : /**</a>
-<a name="1337"><span class="lineNum"> 1337 </span> : : * fdt_setprop_inplace_u64 - change the value of a 64-bit integer property</a>
-<a name="1338"><span class="lineNum"> 1338 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1339"><span class="lineNum"> 1339 </span> : : * @nodeoffset: offset of the node whose property to change</a>
-<a name="1340"><span class="lineNum"> 1340 </span> : : * @name: name of the property to change</a>
-<a name="1341"><span class="lineNum"> 1341 </span> : : * @val: 64-bit integer value to replace the property with</a>
-<a name="1342"><span class="lineNum"> 1342 </span> : : *</a>
-<a name="1343"><span class="lineNum"> 1343 </span> : : * fdt_setprop_inplace_u64() replaces the value of a given property</a>
-<a name="1344"><span class="lineNum"> 1344 </span> : : * with the 64-bit integer value in val, converting val to big-endian</a>
-<a name="1345"><span class="lineNum"> 1345 </span> : : * if necessary. This function cannot change the size of a property,</a>
-<a name="1346"><span class="lineNum"> 1346 </span> : : * and so will only work if the property already exists and has length</a>
-<a name="1347"><span class="lineNum"> 1347 </span> : : * 8.</a>
-<a name="1348"><span class="lineNum"> 1348 </span> : : *</a>
-<a name="1349"><span class="lineNum"> 1349 </span> : : * This function will alter only the bytes in the blob which contain</a>
-<a name="1350"><span class="lineNum"> 1350 </span> : : * the given property value, and will not alter or move any other part</a>
-<a name="1351"><span class="lineNum"> 1351 </span> : : * of the tree.</a>
-<a name="1352"><span class="lineNum"> 1352 </span> : : *</a>
-<a name="1353"><span class="lineNum"> 1353 </span> : : * returns:</a>
-<a name="1354"><span class="lineNum"> 1354 </span> : : * 0, on success</a>
-<a name="1355"><span class="lineNum"> 1355 </span> : : * -FDT_ERR_NOSPACE, if the property's length is not equal to 8</a>
-<a name="1356"><span class="lineNum"> 1356 </span> : : * -FDT_ERR_NOTFOUND, node does not have the named property</a>
-<a name="1357"><span class="lineNum"> 1357 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
-<a name="1358"><span class="lineNum"> 1358 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1359"><span class="lineNum"> 1359 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1360"><span class="lineNum"> 1360 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1361"><span class="lineNum"> 1361 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="1362"><span class="lineNum"> 1362 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="1363"><span class="lineNum"> 1363 </span> : : */</a>
-<a name="1364"><span class="lineNum"> 1364 </span> : : static inline int fdt_setprop_inplace_u64(void *fdt, int nodeoffset,</a>
-<a name="1365"><span class="lineNum"> 1365 </span> : : const char *name, uint64_t val)</a>
-<a name="1366"><span class="lineNum"> 1366 </span> : : {</a>
-<a name="1367"><span class="lineNum"> 1367 </span> : : fdt64_t tmp = cpu_to_fdt64(val);</a>
-<a name="1368"><span class="lineNum"> 1368 </span> : : return fdt_setprop_inplace(fdt, nodeoffset, name, &amp;tmp, sizeof(tmp));</a>
-<a name="1369"><span class="lineNum"> 1369 </span> : : }</a>
-<a name="1370"><span class="lineNum"> 1370 </span> : : </a>
-<a name="1371"><span class="lineNum"> 1371 </span> : : /**</a>
-<a name="1372"><span class="lineNum"> 1372 </span> : : * fdt_setprop_inplace_cell - change the value of a single-cell property</a>
-<a name="1373"><span class="lineNum"> 1373 </span> : : *</a>
-<a name="1374"><span class="lineNum"> 1374 </span> : : * This is an alternative name for fdt_setprop_inplace_u32()</a>
-<a name="1375"><span class="lineNum"> 1375 </span> : : */</a>
-<a name="1376"><span class="lineNum"> 1376 </span> : : static inline int fdt_setprop_inplace_cell(void *fdt, int nodeoffset,</a>
-<a name="1377"><span class="lineNum"> 1377 </span> : : const char *name, uint32_t val)</a>
-<a name="1378"><span class="lineNum"> 1378 </span> : : {</a>
-<a name="1379"><span class="lineNum"> 1379 </span> : : return fdt_setprop_inplace_u32(fdt, nodeoffset, name, val);</a>
-<a name="1380"><span class="lineNum"> 1380 </span> : : }</a>
-<a name="1381"><span class="lineNum"> 1381 </span> : : </a>
-<a name="1382"><span class="lineNum"> 1382 </span> : : /**</a>
-<a name="1383"><span class="lineNum"> 1383 </span> : : * fdt_nop_property - replace a property with nop tags</a>
-<a name="1384"><span class="lineNum"> 1384 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1385"><span class="lineNum"> 1385 </span> : : * @nodeoffset: offset of the node whose property to nop</a>
-<a name="1386"><span class="lineNum"> 1386 </span> : : * @name: name of the property to nop</a>
-<a name="1387"><span class="lineNum"> 1387 </span> : : *</a>
-<a name="1388"><span class="lineNum"> 1388 </span> : : * fdt_nop_property() will replace a given property's representation</a>
-<a name="1389"><span class="lineNum"> 1389 </span> : : * in the blob with FDT_NOP tags, effectively removing it from the</a>
-<a name="1390"><span class="lineNum"> 1390 </span> : : * tree.</a>
-<a name="1391"><span class="lineNum"> 1391 </span> : : *</a>
-<a name="1392"><span class="lineNum"> 1392 </span> : : * This function will alter only the bytes in the blob which contain</a>
-<a name="1393"><span class="lineNum"> 1393 </span> : : * the property, and will not alter or move any other part of the</a>
-<a name="1394"><span class="lineNum"> 1394 </span> : : * tree.</a>
-<a name="1395"><span class="lineNum"> 1395 </span> : : *</a>
-<a name="1396"><span class="lineNum"> 1396 </span> : : * returns:</a>
-<a name="1397"><span class="lineNum"> 1397 </span> : : * 0, on success</a>
-<a name="1398"><span class="lineNum"> 1398 </span> : : * -FDT_ERR_NOTFOUND, node does not have the named property</a>
-<a name="1399"><span class="lineNum"> 1399 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
-<a name="1400"><span class="lineNum"> 1400 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1401"><span class="lineNum"> 1401 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1402"><span class="lineNum"> 1402 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1403"><span class="lineNum"> 1403 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="1404"><span class="lineNum"> 1404 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="1405"><span class="lineNum"> 1405 </span> : : */</a>
-<a name="1406"><span class="lineNum"> 1406 </span> : : int fdt_nop_property(void *fdt, int nodeoffset, const char *name);</a>
-<a name="1407"><span class="lineNum"> 1407 </span> : : </a>
-<a name="1408"><span class="lineNum"> 1408 </span> : : /**</a>
-<a name="1409"><span class="lineNum"> 1409 </span> : : * fdt_nop_node - replace a node (subtree) with nop tags</a>
-<a name="1410"><span class="lineNum"> 1410 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1411"><span class="lineNum"> 1411 </span> : : * @nodeoffset: offset of the node to nop</a>
-<a name="1412"><span class="lineNum"> 1412 </span> : : *</a>
-<a name="1413"><span class="lineNum"> 1413 </span> : : * fdt_nop_node() will replace a given node's representation in the</a>
-<a name="1414"><span class="lineNum"> 1414 </span> : : * blob, including all its subnodes, if any, with FDT_NOP tags,</a>
-<a name="1415"><span class="lineNum"> 1415 </span> : : * effectively removing it from the tree.</a>
-<a name="1416"><span class="lineNum"> 1416 </span> : : *</a>
-<a name="1417"><span class="lineNum"> 1417 </span> : : * This function will alter only the bytes in the blob which contain</a>
-<a name="1418"><span class="lineNum"> 1418 </span> : : * the node and its properties and subnodes, and will not alter or</a>
-<a name="1419"><span class="lineNum"> 1419 </span> : : * move any other part of the tree.</a>
-<a name="1420"><span class="lineNum"> 1420 </span> : : *</a>
-<a name="1421"><span class="lineNum"> 1421 </span> : : * returns:</a>
-<a name="1422"><span class="lineNum"> 1422 </span> : : * 0, on success</a>
-<a name="1423"><span class="lineNum"> 1423 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
-<a name="1424"><span class="lineNum"> 1424 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1425"><span class="lineNum"> 1425 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1426"><span class="lineNum"> 1426 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1427"><span class="lineNum"> 1427 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="1428"><span class="lineNum"> 1428 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="1429"><span class="lineNum"> 1429 </span> : : */</a>
-<a name="1430"><span class="lineNum"> 1430 </span> : : int fdt_nop_node(void *fdt, int nodeoffset);</a>
-<a name="1431"><span class="lineNum"> 1431 </span> : : </a>
-<a name="1432"><span class="lineNum"> 1432 </span> : : /**********************************************************************/</a>
-<a name="1433"><span class="lineNum"> 1433 </span> : : /* Sequential write functions */</a>
-<a name="1434"><span class="lineNum"> 1434 </span> : : /**********************************************************************/</a>
-<a name="1435"><span class="lineNum"> 1435 </span> : : </a>
-<a name="1436"><span class="lineNum"> 1436 </span> : : /* fdt_create_with_flags flags */</a>
-<a name="1437"><span class="lineNum"> 1437 </span> : : #define FDT_CREATE_FLAG_NO_NAME_DEDUP 0x1</a>
-<a name="1438"><span class="lineNum"> 1438 </span> : : /* FDT_CREATE_FLAG_NO_NAME_DEDUP: Do not try to de-duplicate property</a>
-<a name="1439"><span class="lineNum"> 1439 </span> : : * names in the fdt. This can result in faster creation times, but</a>
-<a name="1440"><span class="lineNum"> 1440 </span> : : * a larger fdt. */</a>
-<a name="1441"><span class="lineNum"> 1441 </span> : : </a>
-<a name="1442"><span class="lineNum"> 1442 </span> : : #define FDT_CREATE_FLAGS_ALL (FDT_CREATE_FLAG_NO_NAME_DEDUP)</a>
-<a name="1443"><span class="lineNum"> 1443 </span> : : </a>
-<a name="1444"><span class="lineNum"> 1444 </span> : : /**</a>
-<a name="1445"><span class="lineNum"> 1445 </span> : : * fdt_create_with_flags - begin creation of a new fdt</a>
-<a name="1446"><span class="lineNum"> 1446 </span> : : * @fdt: pointer to memory allocated where fdt will be created</a>
-<a name="1447"><span class="lineNum"> 1447 </span> : : * @bufsize: size of the memory space at fdt</a>
-<a name="1448"><span class="lineNum"> 1448 </span> : : * @flags: a valid combination of FDT_CREATE_FLAG_ flags, or 0.</a>
-<a name="1449"><span class="lineNum"> 1449 </span> : : *</a>
-<a name="1450"><span class="lineNum"> 1450 </span> : : * fdt_create_with_flags() begins the process of creating a new fdt with</a>
-<a name="1451"><span class="lineNum"> 1451 </span> : : * the sequential write interface.</a>
-<a name="1452"><span class="lineNum"> 1452 </span> : : *</a>
-<a name="1453"><span class="lineNum"> 1453 </span> : : * fdt creation process must end with fdt_finished() to produce a valid fdt.</a>
-<a name="1454"><span class="lineNum"> 1454 </span> : : *</a>
-<a name="1455"><span class="lineNum"> 1455 </span> : : * returns:</a>
-<a name="1456"><span class="lineNum"> 1456 </span> : : * 0, on success</a>
-<a name="1457"><span class="lineNum"> 1457 </span> : : * -FDT_ERR_NOSPACE, bufsize is insufficient for a minimal fdt</a>
-<a name="1458"><span class="lineNum"> 1458 </span> : : * -FDT_ERR_BADFLAGS, flags is not valid</a>
-<a name="1459"><span class="lineNum"> 1459 </span> : : */</a>
-<a name="1460"><span class="lineNum"> 1460 </span> : : int fdt_create_with_flags(void *buf, int bufsize, uint32_t flags);</a>
-<a name="1461"><span class="lineNum"> 1461 </span> : : </a>
-<a name="1462"><span class="lineNum"> 1462 </span> : : /**</a>
-<a name="1463"><span class="lineNum"> 1463 </span> : : * fdt_create - begin creation of a new fdt</a>
-<a name="1464"><span class="lineNum"> 1464 </span> : : * @fdt: pointer to memory allocated where fdt will be created</a>
-<a name="1465"><span class="lineNum"> 1465 </span> : : * @bufsize: size of the memory space at fdt</a>
-<a name="1466"><span class="lineNum"> 1466 </span> : : *</a>
-<a name="1467"><span class="lineNum"> 1467 </span> : : * fdt_create() is equivalent to fdt_create_with_flags() with flags=0.</a>
-<a name="1468"><span class="lineNum"> 1468 </span> : : *</a>
-<a name="1469"><span class="lineNum"> 1469 </span> : : * returns:</a>
-<a name="1470"><span class="lineNum"> 1470 </span> : : * 0, on success</a>
-<a name="1471"><span class="lineNum"> 1471 </span> : : * -FDT_ERR_NOSPACE, bufsize is insufficient for a minimal fdt</a>
-<a name="1472"><span class="lineNum"> 1472 </span> : : */</a>
-<a name="1473"><span class="lineNum"> 1473 </span> : : int fdt_create(void *buf, int bufsize);</a>
-<a name="1474"><span class="lineNum"> 1474 </span> : : </a>
-<a name="1475"><span class="lineNum"> 1475 </span> : : int fdt_resize(void *fdt, void *buf, int bufsize);</a>
-<a name="1476"><span class="lineNum"> 1476 </span> : : int fdt_add_reservemap_entry(void *fdt, uint64_t addr, uint64_t size);</a>
-<a name="1477"><span class="lineNum"> 1477 </span> : : int fdt_finish_reservemap(void *fdt);</a>
-<a name="1478"><span class="lineNum"> 1478 </span> : : int fdt_begin_node(void *fdt, const char *name);</a>
-<a name="1479"><span class="lineNum"> 1479 </span> : : int fdt_property(void *fdt, const char *name, const void *val, int len);</a>
-<a name="1480"><span class="lineNum"> 1480 </span> :<span class="lineCov"> 236 : static inline int fdt_property_u32(void *fdt, const char *name, uint32_t val)</span></a>
-<a name="1481"><span class="lineNum"> 1481 </span> : : {</a>
-<a name="1482"><span class="lineNum"> 1482 </span> :<span class="lineCov"> 236 : fdt32_t tmp = cpu_to_fdt32(val);</span></a>
-<a name="1483"><span class="lineNum"> 1483 </span> :<span class="lineCov"> 236 : return fdt_property(fdt, name, &amp;tmp, sizeof(tmp));</span></a>
-<a name="1484"><span class="lineNum"> 1484 </span> : : }</a>
-<a name="1485"><span class="lineNum"> 1485 </span> : : static inline int fdt_property_u64(void *fdt, const char *name, uint64_t val)</a>
+<a name="1105"><span class="lineNum"> 1105 </span> : : int fdt_stringlist_contains(const char *strlist, int listlen, const char *str);</a>
+<a name="1106"><span class="lineNum"> 1106 </span> : : </a>
+<a name="1107"><span class="lineNum"> 1107 </span> : : /**</a>
+<a name="1108"><span class="lineNum"> 1108 </span> : : * fdt_stringlist_count - count the number of strings in a string list</a>
+<a name="1109"><span class="lineNum"> 1109 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1110"><span class="lineNum"> 1110 </span> : : * @nodeoffset: offset of a tree node</a>
+<a name="1111"><span class="lineNum"> 1111 </span> : : * @property: name of the property containing the string list</a>
+<a name="1112"><span class="lineNum"> 1112 </span> : : *</a>
+<a name="1113"><span class="lineNum"> 1113 </span> : : * Return:</a>
+<a name="1114"><span class="lineNum"> 1114 </span> : : * the number of strings in the given property</a>
+<a name="1115"><span class="lineNum"> 1115 </span> : : * -FDT_ERR_BADVALUE if the property value is not NUL-terminated</a>
+<a name="1116"><span class="lineNum"> 1116 </span> : : * -FDT_ERR_NOTFOUND if the property does not exist</a>
+<a name="1117"><span class="lineNum"> 1117 </span> : : */</a>
+<a name="1118"><span class="lineNum"> 1118 </span> : : int fdt_stringlist_count(const void *fdt, int nodeoffset, const char *property);</a>
+<a name="1119"><span class="lineNum"> 1119 </span> : : </a>
+<a name="1120"><span class="lineNum"> 1120 </span> : : /**</a>
+<a name="1121"><span class="lineNum"> 1121 </span> : : * fdt_stringlist_search - find a string in a string list and return its index</a>
+<a name="1122"><span class="lineNum"> 1122 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1123"><span class="lineNum"> 1123 </span> : : * @nodeoffset: offset of a tree node</a>
+<a name="1124"><span class="lineNum"> 1124 </span> : : * @property: name of the property containing the string list</a>
+<a name="1125"><span class="lineNum"> 1125 </span> : : * @string: string to look up in the string list</a>
+<a name="1126"><span class="lineNum"> 1126 </span> : : *</a>
+<a name="1127"><span class="lineNum"> 1127 </span> : : * Note that it is possible for this function to succeed on property values</a>
+<a name="1128"><span class="lineNum"> 1128 </span> : : * that are not NUL-terminated. That's because the function will stop after</a>
+<a name="1129"><span class="lineNum"> 1129 </span> : : * finding the first occurrence of @string. This can for example happen with</a>
+<a name="1130"><span class="lineNum"> 1130 </span> : : * small-valued cell properties, such as #address-cells, when searching for</a>
+<a name="1131"><span class="lineNum"> 1131 </span> : : * the empty string.</a>
+<a name="1132"><span class="lineNum"> 1132 </span> : : *</a>
+<a name="1133"><span class="lineNum"> 1133 </span> : : * return:</a>
+<a name="1134"><span class="lineNum"> 1134 </span> : : * the index of the string in the list of strings</a>
+<a name="1135"><span class="lineNum"> 1135 </span> : : * -FDT_ERR_BADVALUE if the property value is not NUL-terminated</a>
+<a name="1136"><span class="lineNum"> 1136 </span> : : * -FDT_ERR_NOTFOUND if the property does not exist or does not contain</a>
+<a name="1137"><span class="lineNum"> 1137 </span> : : * the given string</a>
+<a name="1138"><span class="lineNum"> 1138 </span> : : */</a>
+<a name="1139"><span class="lineNum"> 1139 </span> : : int fdt_stringlist_search(const void *fdt, int nodeoffset, const char *property,</a>
+<a name="1140"><span class="lineNum"> 1140 </span> : : const char *string);</a>
+<a name="1141"><span class="lineNum"> 1141 </span> : : </a>
+<a name="1142"><span class="lineNum"> 1142 </span> : : /**</a>
+<a name="1143"><span class="lineNum"> 1143 </span> : : * fdt_stringlist_get() - obtain the string at a given index in a string list</a>
+<a name="1144"><span class="lineNum"> 1144 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1145"><span class="lineNum"> 1145 </span> : : * @nodeoffset: offset of a tree node</a>
+<a name="1146"><span class="lineNum"> 1146 </span> : : * @property: name of the property containing the string list</a>
+<a name="1147"><span class="lineNum"> 1147 </span> : : * @index: index of the string to return</a>
+<a name="1148"><span class="lineNum"> 1148 </span> : : * @lenp: return location for the string length or an error code on failure</a>
+<a name="1149"><span class="lineNum"> 1149 </span> : : *</a>
+<a name="1150"><span class="lineNum"> 1150 </span> : : * Note that this will successfully extract strings from properties with</a>
+<a name="1151"><span class="lineNum"> 1151 </span> : : * non-NUL-terminated values. For example on small-valued cell properties</a>
+<a name="1152"><span class="lineNum"> 1152 </span> : : * this function will return the empty string.</a>
+<a name="1153"><span class="lineNum"> 1153 </span> : : *</a>
+<a name="1154"><span class="lineNum"> 1154 </span> : : * If non-NULL, the length of the string (on success) or a negative error-code</a>
+<a name="1155"><span class="lineNum"> 1155 </span> : : * (on failure) will be stored in the integer pointer to by lenp.</a>
+<a name="1156"><span class="lineNum"> 1156 </span> : : *</a>
+<a name="1157"><span class="lineNum"> 1157 </span> : : * Return:</a>
+<a name="1158"><span class="lineNum"> 1158 </span> : : * A pointer to the string at the given index in the string list or NULL on</a>
+<a name="1159"><span class="lineNum"> 1159 </span> : : * failure. On success the length of the string will be stored in the memory</a>
+<a name="1160"><span class="lineNum"> 1160 </span> : : * location pointed to by the lenp parameter, if non-NULL. On failure one of</a>
+<a name="1161"><span class="lineNum"> 1161 </span> : : * the following negative error codes will be returned in the lenp parameter</a>
+<a name="1162"><span class="lineNum"> 1162 </span> : : * (if non-NULL):</a>
+<a name="1163"><span class="lineNum"> 1163 </span> : : * -FDT_ERR_BADVALUE if the property value is not NUL-terminated</a>
+<a name="1164"><span class="lineNum"> 1164 </span> : : * -FDT_ERR_NOTFOUND if the property does not exist</a>
+<a name="1165"><span class="lineNum"> 1165 </span> : : */</a>
+<a name="1166"><span class="lineNum"> 1166 </span> : : const char *fdt_stringlist_get(const void *fdt, int nodeoffset,</a>
+<a name="1167"><span class="lineNum"> 1167 </span> : : const char *property, int index,</a>
+<a name="1168"><span class="lineNum"> 1168 </span> : : int *lenp);</a>
+<a name="1169"><span class="lineNum"> 1169 </span> : : </a>
+<a name="1170"><span class="lineNum"> 1170 </span> : : /**********************************************************************/</a>
+<a name="1171"><span class="lineNum"> 1171 </span> : : /* Read-only functions (addressing related) */</a>
+<a name="1172"><span class="lineNum"> 1172 </span> : : /**********************************************************************/</a>
+<a name="1173"><span class="lineNum"> 1173 </span> : : </a>
+<a name="1174"><span class="lineNum"> 1174 </span> : : /**</a>
+<a name="1175"><span class="lineNum"> 1175 </span> : : * FDT_MAX_NCELLS - maximum value for #address-cells and #size-cells</a>
+<a name="1176"><span class="lineNum"> 1176 </span> : : *</a>
+<a name="1177"><span class="lineNum"> 1177 </span> : : * This is the maximum value for #address-cells, #size-cells and</a>
+<a name="1178"><span class="lineNum"> 1178 </span> : : * similar properties that will be processed by libfdt. IEE1275</a>
+<a name="1179"><span class="lineNum"> 1179 </span> : : * requires that OF implementations handle values up to 4.</a>
+<a name="1180"><span class="lineNum"> 1180 </span> : : * Implementations may support larger values, but in practice higher</a>
+<a name="1181"><span class="lineNum"> 1181 </span> : : * values aren't used.</a>
+<a name="1182"><span class="lineNum"> 1182 </span> : : */</a>
+<a name="1183"><span class="lineNum"> 1183 </span> : : #define FDT_MAX_NCELLS 4</a>
+<a name="1184"><span class="lineNum"> 1184 </span> : : </a>
+<a name="1185"><span class="lineNum"> 1185 </span> : : /**</a>
+<a name="1186"><span class="lineNum"> 1186 </span> : : * fdt_address_cells - retrieve address size for a bus represented in the tree</a>
+<a name="1187"><span class="lineNum"> 1187 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1188"><span class="lineNum"> 1188 </span> : : * @nodeoffset: offset of the node to find the address size for</a>
+<a name="1189"><span class="lineNum"> 1189 </span> : : *</a>
+<a name="1190"><span class="lineNum"> 1190 </span> : : * When the node has a valid #address-cells property, returns its value.</a>
+<a name="1191"><span class="lineNum"> 1191 </span> : : *</a>
+<a name="1192"><span class="lineNum"> 1192 </span> : : * returns:</a>
+<a name="1193"><span class="lineNum"> 1193 </span> : : * 0 &lt;= n &lt; FDT_MAX_NCELLS, on success</a>
+<a name="1194"><span class="lineNum"> 1194 </span> : : * 2, if the node has no #address-cells property</a>
+<a name="1195"><span class="lineNum"> 1195 </span> : : * -FDT_ERR_BADNCELLS, if the node has a badly formatted or invalid</a>
+<a name="1196"><span class="lineNum"> 1196 </span> : : * #address-cells property</a>
+<a name="1197"><span class="lineNum"> 1197 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1198"><span class="lineNum"> 1198 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1199"><span class="lineNum"> 1199 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1200"><span class="lineNum"> 1200 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="1201"><span class="lineNum"> 1201 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="1202"><span class="lineNum"> 1202 </span> : : */</a>
+<a name="1203"><span class="lineNum"> 1203 </span> : : int fdt_address_cells(const void *fdt, int nodeoffset);</a>
+<a name="1204"><span class="lineNum"> 1204 </span> : : </a>
+<a name="1205"><span class="lineNum"> 1205 </span> : : /**</a>
+<a name="1206"><span class="lineNum"> 1206 </span> : : * fdt_size_cells - retrieve address range size for a bus represented in the</a>
+<a name="1207"><span class="lineNum"> 1207 </span> : : * tree</a>
+<a name="1208"><span class="lineNum"> 1208 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1209"><span class="lineNum"> 1209 </span> : : * @nodeoffset: offset of the node to find the address range size for</a>
+<a name="1210"><span class="lineNum"> 1210 </span> : : *</a>
+<a name="1211"><span class="lineNum"> 1211 </span> : : * When the node has a valid #size-cells property, returns its value.</a>
+<a name="1212"><span class="lineNum"> 1212 </span> : : *</a>
+<a name="1213"><span class="lineNum"> 1213 </span> : : * returns:</a>
+<a name="1214"><span class="lineNum"> 1214 </span> : : * 0 &lt;= n &lt; FDT_MAX_NCELLS, on success</a>
+<a name="1215"><span class="lineNum"> 1215 </span> : : * 1, if the node has no #size-cells property</a>
+<a name="1216"><span class="lineNum"> 1216 </span> : : * -FDT_ERR_BADNCELLS, if the node has a badly formatted or invalid</a>
+<a name="1217"><span class="lineNum"> 1217 </span> : : * #size-cells property</a>
+<a name="1218"><span class="lineNum"> 1218 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1219"><span class="lineNum"> 1219 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1220"><span class="lineNum"> 1220 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1221"><span class="lineNum"> 1221 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="1222"><span class="lineNum"> 1222 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="1223"><span class="lineNum"> 1223 </span> : : */</a>
+<a name="1224"><span class="lineNum"> 1224 </span> : : int fdt_size_cells(const void *fdt, int nodeoffset);</a>
+<a name="1225"><span class="lineNum"> 1225 </span> : : </a>
+<a name="1226"><span class="lineNum"> 1226 </span> : : </a>
+<a name="1227"><span class="lineNum"> 1227 </span> : : /**********************************************************************/</a>
+<a name="1228"><span class="lineNum"> 1228 </span> : : /* Write-in-place functions */</a>
+<a name="1229"><span class="lineNum"> 1229 </span> : : /**********************************************************************/</a>
+<a name="1230"><span class="lineNum"> 1230 </span> : : </a>
+<a name="1231"><span class="lineNum"> 1231 </span> : : /**</a>
+<a name="1232"><span class="lineNum"> 1232 </span> : : * fdt_setprop_inplace_namelen_partial - change a property's value,</a>
+<a name="1233"><span class="lineNum"> 1233 </span> : : * but not its size</a>
+<a name="1234"><span class="lineNum"> 1234 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1235"><span class="lineNum"> 1235 </span> : : * @nodeoffset: offset of the node whose property to change</a>
+<a name="1236"><span class="lineNum"> 1236 </span> : : * @name: name of the property to change</a>
+<a name="1237"><span class="lineNum"> 1237 </span> : : * @namelen: number of characters of name to consider</a>
+<a name="1238"><span class="lineNum"> 1238 </span> : : * @idx: index of the property to change in the array</a>
+<a name="1239"><span class="lineNum"> 1239 </span> : : * @val: pointer to data to replace the property value with</a>
+<a name="1240"><span class="lineNum"> 1240 </span> : : * @len: length of the property value</a>
+<a name="1241"><span class="lineNum"> 1241 </span> : : *</a>
+<a name="1242"><span class="lineNum"> 1242 </span> : : * Identical to fdt_setprop_inplace(), but modifies the given property</a>
+<a name="1243"><span class="lineNum"> 1243 </span> : : * starting from the given index, and using only the first characters</a>
+<a name="1244"><span class="lineNum"> 1244 </span> : : * of the name. It is useful when you want to manipulate only one value of</a>
+<a name="1245"><span class="lineNum"> 1245 </span> : : * an array and you have a string that doesn't end with \0.</a>
+<a name="1246"><span class="lineNum"> 1246 </span> : : *</a>
+<a name="1247"><span class="lineNum"> 1247 </span> : : * Return: 0 on success, negative libfdt error value otherwise</a>
+<a name="1248"><span class="lineNum"> 1248 </span> : : */</a>
+<a name="1249"><span class="lineNum"> 1249 </span> : : #ifndef SWIG /* Not available in Python */</a>
+<a name="1250"><span class="lineNum"> 1250 </span> : : int fdt_setprop_inplace_namelen_partial(void *fdt, int nodeoffset,</a>
+<a name="1251"><span class="lineNum"> 1251 </span> : : const char *name, int namelen,</a>
+<a name="1252"><span class="lineNum"> 1252 </span> : : uint32_t idx, const void *val,</a>
+<a name="1253"><span class="lineNum"> 1253 </span> : : int len);</a>
+<a name="1254"><span class="lineNum"> 1254 </span> : : #endif</a>
+<a name="1255"><span class="lineNum"> 1255 </span> : : </a>
+<a name="1256"><span class="lineNum"> 1256 </span> : : /**</a>
+<a name="1257"><span class="lineNum"> 1257 </span> : : * fdt_setprop_inplace - change a property's value, but not its size</a>
+<a name="1258"><span class="lineNum"> 1258 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1259"><span class="lineNum"> 1259 </span> : : * @nodeoffset: offset of the node whose property to change</a>
+<a name="1260"><span class="lineNum"> 1260 </span> : : * @name: name of the property to change</a>
+<a name="1261"><span class="lineNum"> 1261 </span> : : * @val: pointer to data to replace the property value with</a>
+<a name="1262"><span class="lineNum"> 1262 </span> : : * @len: length of the property value</a>
+<a name="1263"><span class="lineNum"> 1263 </span> : : *</a>
+<a name="1264"><span class="lineNum"> 1264 </span> : : * fdt_setprop_inplace() replaces the value of a given property with</a>
+<a name="1265"><span class="lineNum"> 1265 </span> : : * the data in val, of length len. This function cannot change the</a>
+<a name="1266"><span class="lineNum"> 1266 </span> : : * size of a property, and so will only work if len is equal to the</a>
+<a name="1267"><span class="lineNum"> 1267 </span> : : * current length of the property.</a>
+<a name="1268"><span class="lineNum"> 1268 </span> : : *</a>
+<a name="1269"><span class="lineNum"> 1269 </span> : : * This function will alter only the bytes in the blob which contain</a>
+<a name="1270"><span class="lineNum"> 1270 </span> : : * the given property value, and will not alter or move any other part</a>
+<a name="1271"><span class="lineNum"> 1271 </span> : : * of the tree.</a>
+<a name="1272"><span class="lineNum"> 1272 </span> : : *</a>
+<a name="1273"><span class="lineNum"> 1273 </span> : : * returns:</a>
+<a name="1274"><span class="lineNum"> 1274 </span> : : * 0, on success</a>
+<a name="1275"><span class="lineNum"> 1275 </span> : : * -FDT_ERR_NOSPACE, if len is not equal to the property's current length</a>
+<a name="1276"><span class="lineNum"> 1276 </span> : : * -FDT_ERR_NOTFOUND, node does not have the named property</a>
+<a name="1277"><span class="lineNum"> 1277 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
+<a name="1278"><span class="lineNum"> 1278 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1279"><span class="lineNum"> 1279 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1280"><span class="lineNum"> 1280 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1281"><span class="lineNum"> 1281 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="1282"><span class="lineNum"> 1282 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="1283"><span class="lineNum"> 1283 </span> : : */</a>
+<a name="1284"><span class="lineNum"> 1284 </span> : : #ifndef SWIG /* Not available in Python */</a>
+<a name="1285"><span class="lineNum"> 1285 </span> : : int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,</a>
+<a name="1286"><span class="lineNum"> 1286 </span> : : const void *val, int len);</a>
+<a name="1287"><span class="lineNum"> 1287 </span> : : #endif</a>
+<a name="1288"><span class="lineNum"> 1288 </span> : : </a>
+<a name="1289"><span class="lineNum"> 1289 </span> : : /**</a>
+<a name="1290"><span class="lineNum"> 1290 </span> : : * fdt_setprop_inplace_u32 - change the value of a 32-bit integer property</a>
+<a name="1291"><span class="lineNum"> 1291 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1292"><span class="lineNum"> 1292 </span> : : * @nodeoffset: offset of the node whose property to change</a>
+<a name="1293"><span class="lineNum"> 1293 </span> : : * @name: name of the property to change</a>
+<a name="1294"><span class="lineNum"> 1294 </span> : : * @val: 32-bit integer value to replace the property with</a>
+<a name="1295"><span class="lineNum"> 1295 </span> : : *</a>
+<a name="1296"><span class="lineNum"> 1296 </span> : : * fdt_setprop_inplace_u32() replaces the value of a given property</a>
+<a name="1297"><span class="lineNum"> 1297 </span> : : * with the 32-bit integer value in val, converting val to big-endian</a>
+<a name="1298"><span class="lineNum"> 1298 </span> : : * if necessary. This function cannot change the size of a property,</a>
+<a name="1299"><span class="lineNum"> 1299 </span> : : * and so will only work if the property already exists and has length</a>
+<a name="1300"><span class="lineNum"> 1300 </span> : : * 4.</a>
+<a name="1301"><span class="lineNum"> 1301 </span> : : *</a>
+<a name="1302"><span class="lineNum"> 1302 </span> : : * This function will alter only the bytes in the blob which contain</a>
+<a name="1303"><span class="lineNum"> 1303 </span> : : * the given property value, and will not alter or move any other part</a>
+<a name="1304"><span class="lineNum"> 1304 </span> : : * of the tree.</a>
+<a name="1305"><span class="lineNum"> 1305 </span> : : *</a>
+<a name="1306"><span class="lineNum"> 1306 </span> : : * returns:</a>
+<a name="1307"><span class="lineNum"> 1307 </span> : : * 0, on success</a>
+<a name="1308"><span class="lineNum"> 1308 </span> : : * -FDT_ERR_NOSPACE, if the property's length is not equal to 4</a>
+<a name="1309"><span class="lineNum"> 1309 </span> : : * -FDT_ERR_NOTFOUND, node does not have the named property</a>
+<a name="1310"><span class="lineNum"> 1310 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
+<a name="1311"><span class="lineNum"> 1311 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1312"><span class="lineNum"> 1312 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1313"><span class="lineNum"> 1313 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1314"><span class="lineNum"> 1314 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="1315"><span class="lineNum"> 1315 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="1316"><span class="lineNum"> 1316 </span> : : */</a>
+<a name="1317"><span class="lineNum"> 1317 </span> : : static inline int fdt_setprop_inplace_u32(void *fdt, int nodeoffset,</a>
+<a name="1318"><span class="lineNum"> 1318 </span> : : const char *name, uint32_t val)</a>
+<a name="1319"><span class="lineNum"> 1319 </span> : : {</a>
+<a name="1320"><span class="lineNum"> 1320 </span> : : fdt32_t tmp = cpu_to_fdt32(val);</a>
+<a name="1321"><span class="lineNum"> 1321 </span> : : return fdt_setprop_inplace(fdt, nodeoffset, name, &amp;tmp, sizeof(tmp));</a>
+<a name="1322"><span class="lineNum"> 1322 </span> : : }</a>
+<a name="1323"><span class="lineNum"> 1323 </span> : : </a>
+<a name="1324"><span class="lineNum"> 1324 </span> : : /**</a>
+<a name="1325"><span class="lineNum"> 1325 </span> : : * fdt_setprop_inplace_u64 - change the value of a 64-bit integer property</a>
+<a name="1326"><span class="lineNum"> 1326 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1327"><span class="lineNum"> 1327 </span> : : * @nodeoffset: offset of the node whose property to change</a>
+<a name="1328"><span class="lineNum"> 1328 </span> : : * @name: name of the property to change</a>
+<a name="1329"><span class="lineNum"> 1329 </span> : : * @val: 64-bit integer value to replace the property with</a>
+<a name="1330"><span class="lineNum"> 1330 </span> : : *</a>
+<a name="1331"><span class="lineNum"> 1331 </span> : : * fdt_setprop_inplace_u64() replaces the value of a given property</a>
+<a name="1332"><span class="lineNum"> 1332 </span> : : * with the 64-bit integer value in val, converting val to big-endian</a>
+<a name="1333"><span class="lineNum"> 1333 </span> : : * if necessary. This function cannot change the size of a property,</a>
+<a name="1334"><span class="lineNum"> 1334 </span> : : * and so will only work if the property already exists and has length</a>
+<a name="1335"><span class="lineNum"> 1335 </span> : : * 8.</a>
+<a name="1336"><span class="lineNum"> 1336 </span> : : *</a>
+<a name="1337"><span class="lineNum"> 1337 </span> : : * This function will alter only the bytes in the blob which contain</a>
+<a name="1338"><span class="lineNum"> 1338 </span> : : * the given property value, and will not alter or move any other part</a>
+<a name="1339"><span class="lineNum"> 1339 </span> : : * of the tree.</a>
+<a name="1340"><span class="lineNum"> 1340 </span> : : *</a>
+<a name="1341"><span class="lineNum"> 1341 </span> : : * returns:</a>
+<a name="1342"><span class="lineNum"> 1342 </span> : : * 0, on success</a>
+<a name="1343"><span class="lineNum"> 1343 </span> : : * -FDT_ERR_NOSPACE, if the property's length is not equal to 8</a>
+<a name="1344"><span class="lineNum"> 1344 </span> : : * -FDT_ERR_NOTFOUND, node does not have the named property</a>
+<a name="1345"><span class="lineNum"> 1345 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
+<a name="1346"><span class="lineNum"> 1346 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1347"><span class="lineNum"> 1347 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1348"><span class="lineNum"> 1348 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1349"><span class="lineNum"> 1349 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="1350"><span class="lineNum"> 1350 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="1351"><span class="lineNum"> 1351 </span> : : */</a>
+<a name="1352"><span class="lineNum"> 1352 </span> : : static inline int fdt_setprop_inplace_u64(void *fdt, int nodeoffset,</a>
+<a name="1353"><span class="lineNum"> 1353 </span> : : const char *name, uint64_t val)</a>
+<a name="1354"><span class="lineNum"> 1354 </span> : : {</a>
+<a name="1355"><span class="lineNum"> 1355 </span> : : fdt64_t tmp = cpu_to_fdt64(val);</a>
+<a name="1356"><span class="lineNum"> 1356 </span> : : return fdt_setprop_inplace(fdt, nodeoffset, name, &amp;tmp, sizeof(tmp));</a>
+<a name="1357"><span class="lineNum"> 1357 </span> : : }</a>
+<a name="1358"><span class="lineNum"> 1358 </span> : : </a>
+<a name="1359"><span class="lineNum"> 1359 </span> : : /**</a>
+<a name="1360"><span class="lineNum"> 1360 </span> : : * fdt_setprop_inplace_cell - change the value of a single-cell property</a>
+<a name="1361"><span class="lineNum"> 1361 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1362"><span class="lineNum"> 1362 </span> : : * @nodeoffset: offset of the node containing the property</a>
+<a name="1363"><span class="lineNum"> 1363 </span> : : * @name: name of the property to change the value of</a>
+<a name="1364"><span class="lineNum"> 1364 </span> : : * @val: new value of the 32-bit cell</a>
+<a name="1365"><span class="lineNum"> 1365 </span> : : *</a>
+<a name="1366"><span class="lineNum"> 1366 </span> : : * This is an alternative name for fdt_setprop_inplace_u32()</a>
+<a name="1367"><span class="lineNum"> 1367 </span> : : * Return: 0 on success, negative libfdt error number otherwise.</a>
+<a name="1368"><span class="lineNum"> 1368 </span> : : */</a>
+<a name="1369"><span class="lineNum"> 1369 </span> : : static inline int fdt_setprop_inplace_cell(void *fdt, int nodeoffset,</a>
+<a name="1370"><span class="lineNum"> 1370 </span> : : const char *name, uint32_t val)</a>
+<a name="1371"><span class="lineNum"> 1371 </span> : : {</a>
+<a name="1372"><span class="lineNum"> 1372 </span> : : return fdt_setprop_inplace_u32(fdt, nodeoffset, name, val);</a>
+<a name="1373"><span class="lineNum"> 1373 </span> : : }</a>
+<a name="1374"><span class="lineNum"> 1374 </span> : : </a>
+<a name="1375"><span class="lineNum"> 1375 </span> : : /**</a>
+<a name="1376"><span class="lineNum"> 1376 </span> : : * fdt_nop_property - replace a property with nop tags</a>
+<a name="1377"><span class="lineNum"> 1377 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1378"><span class="lineNum"> 1378 </span> : : * @nodeoffset: offset of the node whose property to nop</a>
+<a name="1379"><span class="lineNum"> 1379 </span> : : * @name: name of the property to nop</a>
+<a name="1380"><span class="lineNum"> 1380 </span> : : *</a>
+<a name="1381"><span class="lineNum"> 1381 </span> : : * fdt_nop_property() will replace a given property's representation</a>
+<a name="1382"><span class="lineNum"> 1382 </span> : : * in the blob with FDT_NOP tags, effectively removing it from the</a>
+<a name="1383"><span class="lineNum"> 1383 </span> : : * tree.</a>
+<a name="1384"><span class="lineNum"> 1384 </span> : : *</a>
+<a name="1385"><span class="lineNum"> 1385 </span> : : * This function will alter only the bytes in the blob which contain</a>
+<a name="1386"><span class="lineNum"> 1386 </span> : : * the property, and will not alter or move any other part of the</a>
+<a name="1387"><span class="lineNum"> 1387 </span> : : * tree.</a>
+<a name="1388"><span class="lineNum"> 1388 </span> : : *</a>
+<a name="1389"><span class="lineNum"> 1389 </span> : : * returns:</a>
+<a name="1390"><span class="lineNum"> 1390 </span> : : * 0, on success</a>
+<a name="1391"><span class="lineNum"> 1391 </span> : : * -FDT_ERR_NOTFOUND, node does not have the named property</a>
+<a name="1392"><span class="lineNum"> 1392 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
+<a name="1393"><span class="lineNum"> 1393 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1394"><span class="lineNum"> 1394 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1395"><span class="lineNum"> 1395 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1396"><span class="lineNum"> 1396 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="1397"><span class="lineNum"> 1397 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="1398"><span class="lineNum"> 1398 </span> : : */</a>
+<a name="1399"><span class="lineNum"> 1399 </span> : : int fdt_nop_property(void *fdt, int nodeoffset, const char *name);</a>
+<a name="1400"><span class="lineNum"> 1400 </span> : : </a>
+<a name="1401"><span class="lineNum"> 1401 </span> : : /**</a>
+<a name="1402"><span class="lineNum"> 1402 </span> : : * fdt_nop_node - replace a node (subtree) with nop tags</a>
+<a name="1403"><span class="lineNum"> 1403 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1404"><span class="lineNum"> 1404 </span> : : * @nodeoffset: offset of the node to nop</a>
+<a name="1405"><span class="lineNum"> 1405 </span> : : *</a>
+<a name="1406"><span class="lineNum"> 1406 </span> : : * fdt_nop_node() will replace a given node's representation in the</a>
+<a name="1407"><span class="lineNum"> 1407 </span> : : * blob, including all its subnodes, if any, with FDT_NOP tags,</a>
+<a name="1408"><span class="lineNum"> 1408 </span> : : * effectively removing it from the tree.</a>
+<a name="1409"><span class="lineNum"> 1409 </span> : : *</a>
+<a name="1410"><span class="lineNum"> 1410 </span> : : * This function will alter only the bytes in the blob which contain</a>
+<a name="1411"><span class="lineNum"> 1411 </span> : : * the node and its properties and subnodes, and will not alter or</a>
+<a name="1412"><span class="lineNum"> 1412 </span> : : * move any other part of the tree.</a>
+<a name="1413"><span class="lineNum"> 1413 </span> : : *</a>
+<a name="1414"><span class="lineNum"> 1414 </span> : : * returns:</a>
+<a name="1415"><span class="lineNum"> 1415 </span> : : * 0, on success</a>
+<a name="1416"><span class="lineNum"> 1416 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
+<a name="1417"><span class="lineNum"> 1417 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1418"><span class="lineNum"> 1418 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1419"><span class="lineNum"> 1419 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1420"><span class="lineNum"> 1420 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="1421"><span class="lineNum"> 1421 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="1422"><span class="lineNum"> 1422 </span> : : */</a>
+<a name="1423"><span class="lineNum"> 1423 </span> : : int fdt_nop_node(void *fdt, int nodeoffset);</a>
+<a name="1424"><span class="lineNum"> 1424 </span> : : </a>
+<a name="1425"><span class="lineNum"> 1425 </span> : : /**********************************************************************/</a>
+<a name="1426"><span class="lineNum"> 1426 </span> : : /* Sequential write functions */</a>
+<a name="1427"><span class="lineNum"> 1427 </span> : : /**********************************************************************/</a>
+<a name="1428"><span class="lineNum"> 1428 </span> : : </a>
+<a name="1429"><span class="lineNum"> 1429 </span> : : /* fdt_create_with_flags flags */</a>
+<a name="1430"><span class="lineNum"> 1430 </span> : : #define FDT_CREATE_FLAG_NO_NAME_DEDUP 0x1</a>
+<a name="1431"><span class="lineNum"> 1431 </span> : : /* FDT_CREATE_FLAG_NO_NAME_DEDUP: Do not try to de-duplicate property</a>
+<a name="1432"><span class="lineNum"> 1432 </span> : : * names in the fdt. This can result in faster creation times, but</a>
+<a name="1433"><span class="lineNum"> 1433 </span> : : * a larger fdt. */</a>
+<a name="1434"><span class="lineNum"> 1434 </span> : : </a>
+<a name="1435"><span class="lineNum"> 1435 </span> : : #define FDT_CREATE_FLAGS_ALL (FDT_CREATE_FLAG_NO_NAME_DEDUP)</a>
+<a name="1436"><span class="lineNum"> 1436 </span> : : </a>
+<a name="1437"><span class="lineNum"> 1437 </span> : : /**</a>
+<a name="1438"><span class="lineNum"> 1438 </span> : : * fdt_create_with_flags - begin creation of a new fdt</a>
+<a name="1439"><span class="lineNum"> 1439 </span> : : * @buf: pointer to memory allocated where fdt will be created</a>
+<a name="1440"><span class="lineNum"> 1440 </span> : : * @bufsize: size of the memory space at fdt</a>
+<a name="1441"><span class="lineNum"> 1441 </span> : : * @flags: a valid combination of FDT_CREATE_FLAG_ flags, or 0.</a>
+<a name="1442"><span class="lineNum"> 1442 </span> : : *</a>
+<a name="1443"><span class="lineNum"> 1443 </span> : : * fdt_create_with_flags() begins the process of creating a new fdt with</a>
+<a name="1444"><span class="lineNum"> 1444 </span> : : * the sequential write interface.</a>
+<a name="1445"><span class="lineNum"> 1445 </span> : : *</a>
+<a name="1446"><span class="lineNum"> 1446 </span> : : * fdt creation process must end with fdt_finished() to produce a valid fdt.</a>
+<a name="1447"><span class="lineNum"> 1447 </span> : : *</a>
+<a name="1448"><span class="lineNum"> 1448 </span> : : * returns:</a>
+<a name="1449"><span class="lineNum"> 1449 </span> : : * 0, on success</a>
+<a name="1450"><span class="lineNum"> 1450 </span> : : * -FDT_ERR_NOSPACE, bufsize is insufficient for a minimal fdt</a>
+<a name="1451"><span class="lineNum"> 1451 </span> : : * -FDT_ERR_BADFLAGS, flags is not valid</a>
+<a name="1452"><span class="lineNum"> 1452 </span> : : */</a>
+<a name="1453"><span class="lineNum"> 1453 </span> : : int fdt_create_with_flags(void *buf, int bufsize, uint32_t flags);</a>
+<a name="1454"><span class="lineNum"> 1454 </span> : : </a>
+<a name="1455"><span class="lineNum"> 1455 </span> : : /**</a>
+<a name="1456"><span class="lineNum"> 1456 </span> : : * fdt_create - begin creation of a new fdt</a>
+<a name="1457"><span class="lineNum"> 1457 </span> : : * @buf: pointer to memory allocated where fdt will be created</a>
+<a name="1458"><span class="lineNum"> 1458 </span> : : * @bufsize: size of the memory space at fdt</a>
+<a name="1459"><span class="lineNum"> 1459 </span> : : *</a>
+<a name="1460"><span class="lineNum"> 1460 </span> : : * fdt_create() is equivalent to fdt_create_with_flags() with flags=0.</a>
+<a name="1461"><span class="lineNum"> 1461 </span> : : *</a>
+<a name="1462"><span class="lineNum"> 1462 </span> : : * returns:</a>
+<a name="1463"><span class="lineNum"> 1463 </span> : : * 0, on success</a>
+<a name="1464"><span class="lineNum"> 1464 </span> : : * -FDT_ERR_NOSPACE, bufsize is insufficient for a minimal fdt</a>
+<a name="1465"><span class="lineNum"> 1465 </span> : : */</a>
+<a name="1466"><span class="lineNum"> 1466 </span> : : int fdt_create(void *buf, int bufsize);</a>
+<a name="1467"><span class="lineNum"> 1467 </span> : : </a>
+<a name="1468"><span class="lineNum"> 1468 </span> : : int fdt_resize(void *fdt, void *buf, int bufsize);</a>
+<a name="1469"><span class="lineNum"> 1469 </span> : : int fdt_add_reservemap_entry(void *fdt, uint64_t addr, uint64_t size);</a>
+<a name="1470"><span class="lineNum"> 1470 </span> : : int fdt_finish_reservemap(void *fdt);</a>
+<a name="1471"><span class="lineNum"> 1471 </span> : : int fdt_begin_node(void *fdt, const char *name);</a>
+<a name="1472"><span class="lineNum"> 1472 </span> : : int fdt_property(void *fdt, const char *name, const void *val, int len);</a>
+<a name="1473"><span class="lineNum"> 1473 </span> :<span class="lineCov"> 236 : static inline int fdt_property_u32(void *fdt, const char *name, uint32_t val)</span></a>
+<a name="1474"><span class="lineNum"> 1474 </span> : : {</a>
+<a name="1475"><span class="lineNum"> 1475 </span> :<span class="lineCov"> 236 : fdt32_t tmp = cpu_to_fdt32(val);</span></a>
+<a name="1476"><span class="lineNum"> 1476 </span> :<span class="lineCov"> 236 : return fdt_property(fdt, name, &amp;tmp, sizeof(tmp));</span></a>
+<a name="1477"><span class="lineNum"> 1477 </span> : : }</a>
+<a name="1478"><span class="lineNum"> 1478 </span> : : static inline int fdt_property_u64(void *fdt, const char *name, uint64_t val)</a>
+<a name="1479"><span class="lineNum"> 1479 </span> : : {</a>
+<a name="1480"><span class="lineNum"> 1480 </span> : : fdt64_t tmp = cpu_to_fdt64(val);</a>
+<a name="1481"><span class="lineNum"> 1481 </span> : : return fdt_property(fdt, name, &amp;tmp, sizeof(tmp));</a>
+<a name="1482"><span class="lineNum"> 1482 </span> : : }</a>
+<a name="1483"><span class="lineNum"> 1483 </span> : : </a>
+<a name="1484"><span class="lineNum"> 1484 </span> : : #ifndef SWIG /* Not available in Python */</a>
+<a name="1485"><span class="lineNum"> 1485 </span> :<span class="lineCov"> 236 : static inline int fdt_property_cell(void *fdt, const char *name, uint32_t val)</span></a>
<a name="1486"><span class="lineNum"> 1486 </span> : : {</a>
-<a name="1487"><span class="lineNum"> 1487 </span> : : fdt64_t tmp = cpu_to_fdt64(val);</a>
-<a name="1488"><span class="lineNum"> 1488 </span> : : return fdt_property(fdt, name, &amp;tmp, sizeof(tmp));</a>
-<a name="1489"><span class="lineNum"> 1489 </span> : : }</a>
+<a name="1487"><span class="lineNum"> 1487 </span> :<span class="lineCov"> 236 : return fdt_property_u32(fdt, name, val);</span></a>
+<a name="1488"><span class="lineNum"> 1488 </span> : : }</a>
+<a name="1489"><span class="lineNum"> 1489 </span> : : #endif</a>
<a name="1490"><span class="lineNum"> 1490 </span> : : </a>
-<a name="1491"><span class="lineNum"> 1491 </span> : : #ifndef SWIG /* Not available in Python */</a>
-<a name="1492"><span class="lineNum"> 1492 </span> :<span class="lineCov"> 236 : static inline int fdt_property_cell(void *fdt, const char *name, uint32_t val)</span></a>
-<a name="1493"><span class="lineNum"> 1493 </span> : : {</a>
-<a name="1494"><span class="lineNum"> 1494 </span> :<span class="lineCov"> 236 : return fdt_property_u32(fdt, name, val);</span></a>
-<a name="1495"><span class="lineNum"> 1495 </span> : : }</a>
-<a name="1496"><span class="lineNum"> 1496 </span> : : #endif</a>
-<a name="1497"><span class="lineNum"> 1497 </span> : : </a>
-<a name="1498"><span class="lineNum"> 1498 </span> : : /**</a>
-<a name="1499"><span class="lineNum"> 1499 </span> : : * fdt_property_placeholder - add a new property and return a ptr to its value</a>
-<a name="1500"><span class="lineNum"> 1500 </span> : : *</a>
-<a name="1501"><span class="lineNum"> 1501 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1502"><span class="lineNum"> 1502 </span> : : * @name: name of property to add</a>
-<a name="1503"><span class="lineNum"> 1503 </span> : : * @len: length of property value in bytes</a>
-<a name="1504"><span class="lineNum"> 1504 </span> : : * @valp: returns a pointer to where where the value should be placed</a>
-<a name="1505"><span class="lineNum"> 1505 </span> : : *</a>
-<a name="1506"><span class="lineNum"> 1506 </span> : : * returns:</a>
-<a name="1507"><span class="lineNum"> 1507 </span> : : * 0, on success</a>
-<a name="1508"><span class="lineNum"> 1508 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1509"><span class="lineNum"> 1509 </span> : : * -FDT_ERR_NOSPACE, standard meanings</a>
-<a name="1510"><span class="lineNum"> 1510 </span> : : */</a>
-<a name="1511"><span class="lineNum"> 1511 </span> : : int fdt_property_placeholder(void *fdt, const char *name, int len, void **valp);</a>
-<a name="1512"><span class="lineNum"> 1512 </span> : : </a>
-<a name="1513"><span class="lineNum"> 1513 </span> : : #define fdt_property_string(fdt, name, str) \</a>
-<a name="1514"><span class="lineNum"> 1514 </span> : : fdt_property(fdt, name, str, strlen(str)+1)</a>
-<a name="1515"><span class="lineNum"> 1515 </span> : : int fdt_end_node(void *fdt);</a>
-<a name="1516"><span class="lineNum"> 1516 </span> : : int fdt_finish(void *fdt);</a>
-<a name="1517"><span class="lineNum"> 1517 </span> : : </a>
-<a name="1518"><span class="lineNum"> 1518 </span> : : /**********************************************************************/</a>
-<a name="1519"><span class="lineNum"> 1519 </span> : : /* Read-write functions */</a>
-<a name="1520"><span class="lineNum"> 1520 </span> : : /**********************************************************************/</a>
-<a name="1521"><span class="lineNum"> 1521 </span> : : </a>
-<a name="1522"><span class="lineNum"> 1522 </span> : : int fdt_create_empty_tree(void *buf, int bufsize);</a>
-<a name="1523"><span class="lineNum"> 1523 </span> : : int fdt_open_into(const void *fdt, void *buf, int bufsize);</a>
-<a name="1524"><span class="lineNum"> 1524 </span> : : int fdt_pack(void *fdt);</a>
-<a name="1525"><span class="lineNum"> 1525 </span> : : </a>
-<a name="1526"><span class="lineNum"> 1526 </span> : : /**</a>
-<a name="1527"><span class="lineNum"> 1527 </span> : : * fdt_add_mem_rsv - add one memory reserve map entry</a>
-<a name="1528"><span class="lineNum"> 1528 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1529"><span class="lineNum"> 1529 </span> : : * @address, @size: 64-bit values (native endian)</a>
+<a name="1491"><span class="lineNum"> 1491 </span> : : /**</a>
+<a name="1492"><span class="lineNum"> 1492 </span> : : * fdt_property_placeholder - add a new property and return a ptr to its value</a>
+<a name="1493"><span class="lineNum"> 1493 </span> : : *</a>
+<a name="1494"><span class="lineNum"> 1494 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1495"><span class="lineNum"> 1495 </span> : : * @name: name of property to add</a>
+<a name="1496"><span class="lineNum"> 1496 </span> : : * @len: length of property value in bytes</a>
+<a name="1497"><span class="lineNum"> 1497 </span> : : * @valp: returns a pointer to where where the value should be placed</a>
+<a name="1498"><span class="lineNum"> 1498 </span> : : *</a>
+<a name="1499"><span class="lineNum"> 1499 </span> : : * returns:</a>
+<a name="1500"><span class="lineNum"> 1500 </span> : : * 0, on success</a>
+<a name="1501"><span class="lineNum"> 1501 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1502"><span class="lineNum"> 1502 </span> : : * -FDT_ERR_NOSPACE, standard meanings</a>
+<a name="1503"><span class="lineNum"> 1503 </span> : : */</a>
+<a name="1504"><span class="lineNum"> 1504 </span> : : int fdt_property_placeholder(void *fdt, const char *name, int len, void **valp);</a>
+<a name="1505"><span class="lineNum"> 1505 </span> : : </a>
+<a name="1506"><span class="lineNum"> 1506 </span> : : #define fdt_property_string(fdt, name, str) \</a>
+<a name="1507"><span class="lineNum"> 1507 </span> : : fdt_property(fdt, name, str, strlen(str)+1)</a>
+<a name="1508"><span class="lineNum"> 1508 </span> : : int fdt_end_node(void *fdt);</a>
+<a name="1509"><span class="lineNum"> 1509 </span> : : int fdt_finish(void *fdt);</a>
+<a name="1510"><span class="lineNum"> 1510 </span> : : </a>
+<a name="1511"><span class="lineNum"> 1511 </span> : : /**********************************************************************/</a>
+<a name="1512"><span class="lineNum"> 1512 </span> : : /* Read-write functions */</a>
+<a name="1513"><span class="lineNum"> 1513 </span> : : /**********************************************************************/</a>
+<a name="1514"><span class="lineNum"> 1514 </span> : : </a>
+<a name="1515"><span class="lineNum"> 1515 </span> : : int fdt_create_empty_tree(void *buf, int bufsize);</a>
+<a name="1516"><span class="lineNum"> 1516 </span> : : int fdt_open_into(const void *fdt, void *buf, int bufsize);</a>
+<a name="1517"><span class="lineNum"> 1517 </span> : : int fdt_pack(void *fdt);</a>
+<a name="1518"><span class="lineNum"> 1518 </span> : : </a>
+<a name="1519"><span class="lineNum"> 1519 </span> : : /**</a>
+<a name="1520"><span class="lineNum"> 1520 </span> : : * fdt_add_mem_rsv - add one memory reserve map entry</a>
+<a name="1521"><span class="lineNum"> 1521 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1522"><span class="lineNum"> 1522 </span> : : * @address: 64-bit start address of the reserve map entry</a>
+<a name="1523"><span class="lineNum"> 1523 </span> : : * @size: 64-bit size of the reserved region</a>
+<a name="1524"><span class="lineNum"> 1524 </span> : : *</a>
+<a name="1525"><span class="lineNum"> 1525 </span> : : * Adds a reserve map entry to the given blob reserving a region at</a>
+<a name="1526"><span class="lineNum"> 1526 </span> : : * address address of length size.</a>
+<a name="1527"><span class="lineNum"> 1527 </span> : : *</a>
+<a name="1528"><span class="lineNum"> 1528 </span> : : * This function will insert data into the reserve map and will</a>
+<a name="1529"><span class="lineNum"> 1529 </span> : : * therefore change the indexes of some entries in the table.</a>
<a name="1530"><span class="lineNum"> 1530 </span> : : *</a>
-<a name="1531"><span class="lineNum"> 1531 </span> : : * Adds a reserve map entry to the given blob reserving a region at</a>
-<a name="1532"><span class="lineNum"> 1532 </span> : : * address address of length size.</a>
-<a name="1533"><span class="lineNum"> 1533 </span> : : *</a>
-<a name="1534"><span class="lineNum"> 1534 </span> : : * This function will insert data into the reserve map and will</a>
-<a name="1535"><span class="lineNum"> 1535 </span> : : * therefore change the indexes of some entries in the table.</a>
-<a name="1536"><span class="lineNum"> 1536 </span> : : *</a>
-<a name="1537"><span class="lineNum"> 1537 </span> : : * returns:</a>
-<a name="1538"><span class="lineNum"> 1538 </span> : : * 0, on success</a>
-<a name="1539"><span class="lineNum"> 1539 </span> : : * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to</a>
-<a name="1540"><span class="lineNum"> 1540 </span> : : * contain the new reservation entry</a>
-<a name="1541"><span class="lineNum"> 1541 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1542"><span class="lineNum"> 1542 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1543"><span class="lineNum"> 1543 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1544"><span class="lineNum"> 1544 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="1545"><span class="lineNum"> 1545 </span> : : * -FDT_ERR_BADLAYOUT,</a>
-<a name="1546"><span class="lineNum"> 1546 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="1547"><span class="lineNum"> 1547 </span> : : */</a>
-<a name="1548"><span class="lineNum"> 1548 </span> : : int fdt_add_mem_rsv(void *fdt, uint64_t address, uint64_t size);</a>
-<a name="1549"><span class="lineNum"> 1549 </span> : : </a>
-<a name="1550"><span class="lineNum"> 1550 </span> : : /**</a>
-<a name="1551"><span class="lineNum"> 1551 </span> : : * fdt_del_mem_rsv - remove a memory reserve map entry</a>
-<a name="1552"><span class="lineNum"> 1552 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1553"><span class="lineNum"> 1553 </span> : : * @n: entry to remove</a>
+<a name="1531"><span class="lineNum"> 1531 </span> : : * returns:</a>
+<a name="1532"><span class="lineNum"> 1532 </span> : : * 0, on success</a>
+<a name="1533"><span class="lineNum"> 1533 </span> : : * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to</a>
+<a name="1534"><span class="lineNum"> 1534 </span> : : * contain the new reservation entry</a>
+<a name="1535"><span class="lineNum"> 1535 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1536"><span class="lineNum"> 1536 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1537"><span class="lineNum"> 1537 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1538"><span class="lineNum"> 1538 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="1539"><span class="lineNum"> 1539 </span> : : * -FDT_ERR_BADLAYOUT,</a>
+<a name="1540"><span class="lineNum"> 1540 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="1541"><span class="lineNum"> 1541 </span> : : */</a>
+<a name="1542"><span class="lineNum"> 1542 </span> : : int fdt_add_mem_rsv(void *fdt, uint64_t address, uint64_t size);</a>
+<a name="1543"><span class="lineNum"> 1543 </span> : : </a>
+<a name="1544"><span class="lineNum"> 1544 </span> : : /**</a>
+<a name="1545"><span class="lineNum"> 1545 </span> : : * fdt_del_mem_rsv - remove a memory reserve map entry</a>
+<a name="1546"><span class="lineNum"> 1546 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1547"><span class="lineNum"> 1547 </span> : : * @n: entry to remove</a>
+<a name="1548"><span class="lineNum"> 1548 </span> : : *</a>
+<a name="1549"><span class="lineNum"> 1549 </span> : : * fdt_del_mem_rsv() removes the n-th memory reserve map entry from</a>
+<a name="1550"><span class="lineNum"> 1550 </span> : : * the blob.</a>
+<a name="1551"><span class="lineNum"> 1551 </span> : : *</a>
+<a name="1552"><span class="lineNum"> 1552 </span> : : * This function will delete data from the reservation table and will</a>
+<a name="1553"><span class="lineNum"> 1553 </span> : : * therefore change the indexes of some entries in the table.</a>
<a name="1554"><span class="lineNum"> 1554 </span> : : *</a>
-<a name="1555"><span class="lineNum"> 1555 </span> : : * fdt_del_mem_rsv() removes the n-th memory reserve map entry from</a>
-<a name="1556"><span class="lineNum"> 1556 </span> : : * the blob.</a>
-<a name="1557"><span class="lineNum"> 1557 </span> : : *</a>
-<a name="1558"><span class="lineNum"> 1558 </span> : : * This function will delete data from the reservation table and will</a>
-<a name="1559"><span class="lineNum"> 1559 </span> : : * therefore change the indexes of some entries in the table.</a>
-<a name="1560"><span class="lineNum"> 1560 </span> : : *</a>
-<a name="1561"><span class="lineNum"> 1561 </span> : : * returns:</a>
-<a name="1562"><span class="lineNum"> 1562 </span> : : * 0, on success</a>
-<a name="1563"><span class="lineNum"> 1563 </span> : : * -FDT_ERR_NOTFOUND, there is no entry of the given index (i.e. there</a>
-<a name="1564"><span class="lineNum"> 1564 </span> : : * are less than n+1 reserve map entries)</a>
-<a name="1565"><span class="lineNum"> 1565 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1566"><span class="lineNum"> 1566 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1567"><span class="lineNum"> 1567 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1568"><span class="lineNum"> 1568 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="1569"><span class="lineNum"> 1569 </span> : : * -FDT_ERR_BADLAYOUT,</a>
-<a name="1570"><span class="lineNum"> 1570 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="1571"><span class="lineNum"> 1571 </span> : : */</a>
-<a name="1572"><span class="lineNum"> 1572 </span> : : int fdt_del_mem_rsv(void *fdt, int n);</a>
-<a name="1573"><span class="lineNum"> 1573 </span> : : </a>
-<a name="1574"><span class="lineNum"> 1574 </span> : : /**</a>
-<a name="1575"><span class="lineNum"> 1575 </span> : : * fdt_set_name - change the name of a given node</a>
-<a name="1576"><span class="lineNum"> 1576 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1577"><span class="lineNum"> 1577 </span> : : * @nodeoffset: structure block offset of a node</a>
-<a name="1578"><span class="lineNum"> 1578 </span> : : * @name: name to give the node</a>
+<a name="1555"><span class="lineNum"> 1555 </span> : : * returns:</a>
+<a name="1556"><span class="lineNum"> 1556 </span> : : * 0, on success</a>
+<a name="1557"><span class="lineNum"> 1557 </span> : : * -FDT_ERR_NOTFOUND, there is no entry of the given index (i.e. there</a>
+<a name="1558"><span class="lineNum"> 1558 </span> : : * are less than n+1 reserve map entries)</a>
+<a name="1559"><span class="lineNum"> 1559 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1560"><span class="lineNum"> 1560 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1561"><span class="lineNum"> 1561 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1562"><span class="lineNum"> 1562 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="1563"><span class="lineNum"> 1563 </span> : : * -FDT_ERR_BADLAYOUT,</a>
+<a name="1564"><span class="lineNum"> 1564 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="1565"><span class="lineNum"> 1565 </span> : : */</a>
+<a name="1566"><span class="lineNum"> 1566 </span> : : int fdt_del_mem_rsv(void *fdt, int n);</a>
+<a name="1567"><span class="lineNum"> 1567 </span> : : </a>
+<a name="1568"><span class="lineNum"> 1568 </span> : : /**</a>
+<a name="1569"><span class="lineNum"> 1569 </span> : : * fdt_set_name - change the name of a given node</a>
+<a name="1570"><span class="lineNum"> 1570 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1571"><span class="lineNum"> 1571 </span> : : * @nodeoffset: structure block offset of a node</a>
+<a name="1572"><span class="lineNum"> 1572 </span> : : * @name: name to give the node</a>
+<a name="1573"><span class="lineNum"> 1573 </span> : : *</a>
+<a name="1574"><span class="lineNum"> 1574 </span> : : * fdt_set_name() replaces the name (including unit address, if any)</a>
+<a name="1575"><span class="lineNum"> 1575 </span> : : * of the given node with the given string. NOTE: this function can't</a>
+<a name="1576"><span class="lineNum"> 1576 </span> : : * efficiently check if the new name is unique amongst the given</a>
+<a name="1577"><span class="lineNum"> 1577 </span> : : * node's siblings; results are undefined if this function is invoked</a>
+<a name="1578"><span class="lineNum"> 1578 </span> : : * with a name equal to one of the given node's siblings.</a>
<a name="1579"><span class="lineNum"> 1579 </span> : : *</a>
-<a name="1580"><span class="lineNum"> 1580 </span> : : * fdt_set_name() replaces the name (including unit address, if any)</a>
-<a name="1581"><span class="lineNum"> 1581 </span> : : * of the given node with the given string. NOTE: this function can't</a>
-<a name="1582"><span class="lineNum"> 1582 </span> : : * efficiently check if the new name is unique amongst the given</a>
-<a name="1583"><span class="lineNum"> 1583 </span> : : * node's siblings; results are undefined if this function is invoked</a>
-<a name="1584"><span class="lineNum"> 1584 </span> : : * with a name equal to one of the given node's siblings.</a>
-<a name="1585"><span class="lineNum"> 1585 </span> : : *</a>
-<a name="1586"><span class="lineNum"> 1586 </span> : : * This function may insert or delete data from the blob, and will</a>
-<a name="1587"><span class="lineNum"> 1587 </span> : : * therefore change the offsets of some existing nodes.</a>
-<a name="1588"><span class="lineNum"> 1588 </span> : : *</a>
-<a name="1589"><span class="lineNum"> 1589 </span> : : * returns:</a>
-<a name="1590"><span class="lineNum"> 1590 </span> : : * 0, on success</a>
-<a name="1591"><span class="lineNum"> 1591 </span> : : * -FDT_ERR_NOSPACE, there is insufficient free space in the blob</a>
-<a name="1592"><span class="lineNum"> 1592 </span> : : * to contain the new name</a>
-<a name="1593"><span class="lineNum"> 1593 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
-<a name="1594"><span class="lineNum"> 1594 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1595"><span class="lineNum"> 1595 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1596"><span class="lineNum"> 1596 </span> : : * -FDT_ERR_BADSTATE, standard meanings</a>
-<a name="1597"><span class="lineNum"> 1597 </span> : : */</a>
-<a name="1598"><span class="lineNum"> 1598 </span> : : int fdt_set_name(void *fdt, int nodeoffset, const char *name);</a>
-<a name="1599"><span class="lineNum"> 1599 </span> : : </a>
-<a name="1600"><span class="lineNum"> 1600 </span> : : /**</a>
-<a name="1601"><span class="lineNum"> 1601 </span> : : * fdt_setprop - create or change a property</a>
-<a name="1602"><span class="lineNum"> 1602 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1603"><span class="lineNum"> 1603 </span> : : * @nodeoffset: offset of the node whose property to change</a>
-<a name="1604"><span class="lineNum"> 1604 </span> : : * @name: name of the property to change</a>
-<a name="1605"><span class="lineNum"> 1605 </span> : : * @val: pointer to data to set the property value to</a>
-<a name="1606"><span class="lineNum"> 1606 </span> : : * @len: length of the property value</a>
-<a name="1607"><span class="lineNum"> 1607 </span> : : *</a>
-<a name="1608"><span class="lineNum"> 1608 </span> : : * fdt_setprop() sets the value of the named property in the given</a>
-<a name="1609"><span class="lineNum"> 1609 </span> : : * node to the given value and length, creating the property if it</a>
-<a name="1610"><span class="lineNum"> 1610 </span> : : * does not already exist.</a>
-<a name="1611"><span class="lineNum"> 1611 </span> : : *</a>
-<a name="1612"><span class="lineNum"> 1612 </span> : : * This function may insert or delete data from the blob, and will</a>
-<a name="1613"><span class="lineNum"> 1613 </span> : : * therefore change the offsets of some existing nodes.</a>
-<a name="1614"><span class="lineNum"> 1614 </span> : : *</a>
-<a name="1615"><span class="lineNum"> 1615 </span> : : * returns:</a>
-<a name="1616"><span class="lineNum"> 1616 </span> : : * 0, on success</a>
-<a name="1617"><span class="lineNum"> 1617 </span> : : * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to</a>
-<a name="1618"><span class="lineNum"> 1618 </span> : : * contain the new property value</a>
-<a name="1619"><span class="lineNum"> 1619 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
-<a name="1620"><span class="lineNum"> 1620 </span> : : * -FDT_ERR_BADLAYOUT,</a>
-<a name="1621"><span class="lineNum"> 1621 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1622"><span class="lineNum"> 1622 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1623"><span class="lineNum"> 1623 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1624"><span class="lineNum"> 1624 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="1625"><span class="lineNum"> 1625 </span> : : * -FDT_ERR_BADLAYOUT,</a>
-<a name="1626"><span class="lineNum"> 1626 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="1627"><span class="lineNum"> 1627 </span> : : */</a>
-<a name="1628"><span class="lineNum"> 1628 </span> : : int fdt_setprop(void *fdt, int nodeoffset, const char *name,</a>
-<a name="1629"><span class="lineNum"> 1629 </span> : : const void *val, int len);</a>
-<a name="1630"><span class="lineNum"> 1630 </span> : : </a>
-<a name="1631"><span class="lineNum"> 1631 </span> : : /**</a>
-<a name="1632"><span class="lineNum"> 1632 </span> : : * fdt_setprop_placeholder - allocate space for a property</a>
-<a name="1633"><span class="lineNum"> 1633 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1634"><span class="lineNum"> 1634 </span> : : * @nodeoffset: offset of the node whose property to change</a>
-<a name="1635"><span class="lineNum"> 1635 </span> : : * @name: name of the property to change</a>
-<a name="1636"><span class="lineNum"> 1636 </span> : : * @len: length of the property value</a>
-<a name="1637"><span class="lineNum"> 1637 </span> : : * @prop_data: return pointer to property data</a>
-<a name="1638"><span class="lineNum"> 1638 </span> : : *</a>
-<a name="1639"><span class="lineNum"> 1639 </span> : : * fdt_setprop_placeholer() allocates the named property in the given node.</a>
-<a name="1640"><span class="lineNum"> 1640 </span> : : * If the property exists it is resized. In either case a pointer to the</a>
-<a name="1641"><span class="lineNum"> 1641 </span> : : * property data is returned.</a>
-<a name="1642"><span class="lineNum"> 1642 </span> : : *</a>
-<a name="1643"><span class="lineNum"> 1643 </span> : : * This function may insert or delete data from the blob, and will</a>
-<a name="1644"><span class="lineNum"> 1644 </span> : : * therefore change the offsets of some existing nodes.</a>
-<a name="1645"><span class="lineNum"> 1645 </span> : : *</a>
-<a name="1646"><span class="lineNum"> 1646 </span> : : * returns:</a>
-<a name="1647"><span class="lineNum"> 1647 </span> : : * 0, on success</a>
-<a name="1648"><span class="lineNum"> 1648 </span> : : * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to</a>
-<a name="1649"><span class="lineNum"> 1649 </span> : : * contain the new property value</a>
-<a name="1650"><span class="lineNum"> 1650 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
-<a name="1651"><span class="lineNum"> 1651 </span> : : * -FDT_ERR_BADLAYOUT,</a>
-<a name="1652"><span class="lineNum"> 1652 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1653"><span class="lineNum"> 1653 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1654"><span class="lineNum"> 1654 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1655"><span class="lineNum"> 1655 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="1656"><span class="lineNum"> 1656 </span> : : * -FDT_ERR_BADLAYOUT,</a>
-<a name="1657"><span class="lineNum"> 1657 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="1658"><span class="lineNum"> 1658 </span> : : */</a>
-<a name="1659"><span class="lineNum"> 1659 </span> : : int fdt_setprop_placeholder(void *fdt, int nodeoffset, const char *name,</a>
-<a name="1660"><span class="lineNum"> 1660 </span> : : int len, void **prop_data);</a>
-<a name="1661"><span class="lineNum"> 1661 </span> : : </a>
-<a name="1662"><span class="lineNum"> 1662 </span> : : /**</a>
-<a name="1663"><span class="lineNum"> 1663 </span> : : * fdt_setprop_u32 - set a property to a 32-bit integer</a>
-<a name="1664"><span class="lineNum"> 1664 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1665"><span class="lineNum"> 1665 </span> : : * @nodeoffset: offset of the node whose property to change</a>
-<a name="1666"><span class="lineNum"> 1666 </span> : : * @name: name of the property to change</a>
-<a name="1667"><span class="lineNum"> 1667 </span> : : * @val: 32-bit integer value for the property (native endian)</a>
-<a name="1668"><span class="lineNum"> 1668 </span> : : *</a>
-<a name="1669"><span class="lineNum"> 1669 </span> : : * fdt_setprop_u32() sets the value of the named property in the given</a>
-<a name="1670"><span class="lineNum"> 1670 </span> : : * node to the given 32-bit integer value (converting to big-endian if</a>
-<a name="1671"><span class="lineNum"> 1671 </span> : : * necessary), or creates a new property with that value if it does</a>
-<a name="1672"><span class="lineNum"> 1672 </span> : : * not already exist.</a>
-<a name="1673"><span class="lineNum"> 1673 </span> : : *</a>
-<a name="1674"><span class="lineNum"> 1674 </span> : : * This function may insert or delete data from the blob, and will</a>
-<a name="1675"><span class="lineNum"> 1675 </span> : : * therefore change the offsets of some existing nodes.</a>
-<a name="1676"><span class="lineNum"> 1676 </span> : : *</a>
-<a name="1677"><span class="lineNum"> 1677 </span> : : * returns:</a>
-<a name="1678"><span class="lineNum"> 1678 </span> : : * 0, on success</a>
-<a name="1679"><span class="lineNum"> 1679 </span> : : * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to</a>
-<a name="1680"><span class="lineNum"> 1680 </span> : : * contain the new property value</a>
-<a name="1681"><span class="lineNum"> 1681 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
-<a name="1682"><span class="lineNum"> 1682 </span> : : * -FDT_ERR_BADLAYOUT,</a>
-<a name="1683"><span class="lineNum"> 1683 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1684"><span class="lineNum"> 1684 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1685"><span class="lineNum"> 1685 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1686"><span class="lineNum"> 1686 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="1687"><span class="lineNum"> 1687 </span> : : * -FDT_ERR_BADLAYOUT,</a>
-<a name="1688"><span class="lineNum"> 1688 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="1689"><span class="lineNum"> 1689 </span> : : */</a>
-<a name="1690"><span class="lineNum"> 1690 </span> : : static inline int fdt_setprop_u32(void *fdt, int nodeoffset, const char *name,</a>
-<a name="1691"><span class="lineNum"> 1691 </span> : : uint32_t val)</a>
-<a name="1692"><span class="lineNum"> 1692 </span> : : {</a>
-<a name="1693"><span class="lineNum"> 1693 </span> : : fdt32_t tmp = cpu_to_fdt32(val);</a>
-<a name="1694"><span class="lineNum"> 1694 </span> : : return fdt_setprop(fdt, nodeoffset, name, &amp;tmp, sizeof(tmp));</a>
-<a name="1695"><span class="lineNum"> 1695 </span> : : }</a>
-<a name="1696"><span class="lineNum"> 1696 </span> : : </a>
-<a name="1697"><span class="lineNum"> 1697 </span> : : /**</a>
-<a name="1698"><span class="lineNum"> 1698 </span> : : * fdt_setprop_u64 - set a property to a 64-bit integer</a>
-<a name="1699"><span class="lineNum"> 1699 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1700"><span class="lineNum"> 1700 </span> : : * @nodeoffset: offset of the node whose property to change</a>
-<a name="1701"><span class="lineNum"> 1701 </span> : : * @name: name of the property to change</a>
-<a name="1702"><span class="lineNum"> 1702 </span> : : * @val: 64-bit integer value for the property (native endian)</a>
-<a name="1703"><span class="lineNum"> 1703 </span> : : *</a>
-<a name="1704"><span class="lineNum"> 1704 </span> : : * fdt_setprop_u64() sets the value of the named property in the given</a>
-<a name="1705"><span class="lineNum"> 1705 </span> : : * node to the given 64-bit integer value (converting to big-endian if</a>
-<a name="1706"><span class="lineNum"> 1706 </span> : : * necessary), or creates a new property with that value if it does</a>
-<a name="1707"><span class="lineNum"> 1707 </span> : : * not already exist.</a>
-<a name="1708"><span class="lineNum"> 1708 </span> : : *</a>
-<a name="1709"><span class="lineNum"> 1709 </span> : : * This function may insert or delete data from the blob, and will</a>
-<a name="1710"><span class="lineNum"> 1710 </span> : : * therefore change the offsets of some existing nodes.</a>
-<a name="1711"><span class="lineNum"> 1711 </span> : : *</a>
-<a name="1712"><span class="lineNum"> 1712 </span> : : * returns:</a>
-<a name="1713"><span class="lineNum"> 1713 </span> : : * 0, on success</a>
-<a name="1714"><span class="lineNum"> 1714 </span> : : * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to</a>
-<a name="1715"><span class="lineNum"> 1715 </span> : : * contain the new property value</a>
-<a name="1716"><span class="lineNum"> 1716 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
-<a name="1717"><span class="lineNum"> 1717 </span> : : * -FDT_ERR_BADLAYOUT,</a>
-<a name="1718"><span class="lineNum"> 1718 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1719"><span class="lineNum"> 1719 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1720"><span class="lineNum"> 1720 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1721"><span class="lineNum"> 1721 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="1722"><span class="lineNum"> 1722 </span> : : * -FDT_ERR_BADLAYOUT,</a>
-<a name="1723"><span class="lineNum"> 1723 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="1724"><span class="lineNum"> 1724 </span> : : */</a>
-<a name="1725"><span class="lineNum"> 1725 </span> : : static inline int fdt_setprop_u64(void *fdt, int nodeoffset, const char *name,</a>
-<a name="1726"><span class="lineNum"> 1726 </span> : : uint64_t val)</a>
-<a name="1727"><span class="lineNum"> 1727 </span> : : {</a>
-<a name="1728"><span class="lineNum"> 1728 </span> : : fdt64_t tmp = cpu_to_fdt64(val);</a>
-<a name="1729"><span class="lineNum"> 1729 </span> : : return fdt_setprop(fdt, nodeoffset, name, &amp;tmp, sizeof(tmp));</a>
-<a name="1730"><span class="lineNum"> 1730 </span> : : }</a>
-<a name="1731"><span class="lineNum"> 1731 </span> : : </a>
-<a name="1732"><span class="lineNum"> 1732 </span> : : /**</a>
-<a name="1733"><span class="lineNum"> 1733 </span> : : * fdt_setprop_cell - set a property to a single cell value</a>
+<a name="1580"><span class="lineNum"> 1580 </span> : : * This function may insert or delete data from the blob, and will</a>
+<a name="1581"><span class="lineNum"> 1581 </span> : : * therefore change the offsets of some existing nodes.</a>
+<a name="1582"><span class="lineNum"> 1582 </span> : : *</a>
+<a name="1583"><span class="lineNum"> 1583 </span> : : * returns:</a>
+<a name="1584"><span class="lineNum"> 1584 </span> : : * 0, on success</a>
+<a name="1585"><span class="lineNum"> 1585 </span> : : * -FDT_ERR_NOSPACE, there is insufficient free space in the blob</a>
+<a name="1586"><span class="lineNum"> 1586 </span> : : * to contain the new name</a>
+<a name="1587"><span class="lineNum"> 1587 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
+<a name="1588"><span class="lineNum"> 1588 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1589"><span class="lineNum"> 1589 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1590"><span class="lineNum"> 1590 </span> : : * -FDT_ERR_BADSTATE, standard meanings</a>
+<a name="1591"><span class="lineNum"> 1591 </span> : : */</a>
+<a name="1592"><span class="lineNum"> 1592 </span> : : int fdt_set_name(void *fdt, int nodeoffset, const char *name);</a>
+<a name="1593"><span class="lineNum"> 1593 </span> : : </a>
+<a name="1594"><span class="lineNum"> 1594 </span> : : /**</a>
+<a name="1595"><span class="lineNum"> 1595 </span> : : * fdt_setprop - create or change a property</a>
+<a name="1596"><span class="lineNum"> 1596 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1597"><span class="lineNum"> 1597 </span> : : * @nodeoffset: offset of the node whose property to change</a>
+<a name="1598"><span class="lineNum"> 1598 </span> : : * @name: name of the property to change</a>
+<a name="1599"><span class="lineNum"> 1599 </span> : : * @val: pointer to data to set the property value to</a>
+<a name="1600"><span class="lineNum"> 1600 </span> : : * @len: length of the property value</a>
+<a name="1601"><span class="lineNum"> 1601 </span> : : *</a>
+<a name="1602"><span class="lineNum"> 1602 </span> : : * fdt_setprop() sets the value of the named property in the given</a>
+<a name="1603"><span class="lineNum"> 1603 </span> : : * node to the given value and length, creating the property if it</a>
+<a name="1604"><span class="lineNum"> 1604 </span> : : * does not already exist.</a>
+<a name="1605"><span class="lineNum"> 1605 </span> : : *</a>
+<a name="1606"><span class="lineNum"> 1606 </span> : : * This function may insert or delete data from the blob, and will</a>
+<a name="1607"><span class="lineNum"> 1607 </span> : : * therefore change the offsets of some existing nodes.</a>
+<a name="1608"><span class="lineNum"> 1608 </span> : : *</a>
+<a name="1609"><span class="lineNum"> 1609 </span> : : * returns:</a>
+<a name="1610"><span class="lineNum"> 1610 </span> : : * 0, on success</a>
+<a name="1611"><span class="lineNum"> 1611 </span> : : * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to</a>
+<a name="1612"><span class="lineNum"> 1612 </span> : : * contain the new property value</a>
+<a name="1613"><span class="lineNum"> 1613 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
+<a name="1614"><span class="lineNum"> 1614 </span> : : * -FDT_ERR_BADLAYOUT,</a>
+<a name="1615"><span class="lineNum"> 1615 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1616"><span class="lineNum"> 1616 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1617"><span class="lineNum"> 1617 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1618"><span class="lineNum"> 1618 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="1619"><span class="lineNum"> 1619 </span> : : * -FDT_ERR_BADLAYOUT,</a>
+<a name="1620"><span class="lineNum"> 1620 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="1621"><span class="lineNum"> 1621 </span> : : */</a>
+<a name="1622"><span class="lineNum"> 1622 </span> : : int fdt_setprop(void *fdt, int nodeoffset, const char *name,</a>
+<a name="1623"><span class="lineNum"> 1623 </span> : : const void *val, int len);</a>
+<a name="1624"><span class="lineNum"> 1624 </span> : : </a>
+<a name="1625"><span class="lineNum"> 1625 </span> : : /**</a>
+<a name="1626"><span class="lineNum"> 1626 </span> : : * fdt_setprop_placeholder - allocate space for a property</a>
+<a name="1627"><span class="lineNum"> 1627 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1628"><span class="lineNum"> 1628 </span> : : * @nodeoffset: offset of the node whose property to change</a>
+<a name="1629"><span class="lineNum"> 1629 </span> : : * @name: name of the property to change</a>
+<a name="1630"><span class="lineNum"> 1630 </span> : : * @len: length of the property value</a>
+<a name="1631"><span class="lineNum"> 1631 </span> : : * @prop_data: return pointer to property data</a>
+<a name="1632"><span class="lineNum"> 1632 </span> : : *</a>
+<a name="1633"><span class="lineNum"> 1633 </span> : : * fdt_setprop_placeholer() allocates the named property in the given node.</a>
+<a name="1634"><span class="lineNum"> 1634 </span> : : * If the property exists it is resized. In either case a pointer to the</a>
+<a name="1635"><span class="lineNum"> 1635 </span> : : * property data is returned.</a>
+<a name="1636"><span class="lineNum"> 1636 </span> : : *</a>
+<a name="1637"><span class="lineNum"> 1637 </span> : : * This function may insert or delete data from the blob, and will</a>
+<a name="1638"><span class="lineNum"> 1638 </span> : : * therefore change the offsets of some existing nodes.</a>
+<a name="1639"><span class="lineNum"> 1639 </span> : : *</a>
+<a name="1640"><span class="lineNum"> 1640 </span> : : * returns:</a>
+<a name="1641"><span class="lineNum"> 1641 </span> : : * 0, on success</a>
+<a name="1642"><span class="lineNum"> 1642 </span> : : * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to</a>
+<a name="1643"><span class="lineNum"> 1643 </span> : : * contain the new property value</a>
+<a name="1644"><span class="lineNum"> 1644 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
+<a name="1645"><span class="lineNum"> 1645 </span> : : * -FDT_ERR_BADLAYOUT,</a>
+<a name="1646"><span class="lineNum"> 1646 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1647"><span class="lineNum"> 1647 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1648"><span class="lineNum"> 1648 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1649"><span class="lineNum"> 1649 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="1650"><span class="lineNum"> 1650 </span> : : * -FDT_ERR_BADLAYOUT,</a>
+<a name="1651"><span class="lineNum"> 1651 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="1652"><span class="lineNum"> 1652 </span> : : */</a>
+<a name="1653"><span class="lineNum"> 1653 </span> : : int fdt_setprop_placeholder(void *fdt, int nodeoffset, const char *name,</a>
+<a name="1654"><span class="lineNum"> 1654 </span> : : int len, void **prop_data);</a>
+<a name="1655"><span class="lineNum"> 1655 </span> : : </a>
+<a name="1656"><span class="lineNum"> 1656 </span> : : /**</a>
+<a name="1657"><span class="lineNum"> 1657 </span> : : * fdt_setprop_u32 - set a property to a 32-bit integer</a>
+<a name="1658"><span class="lineNum"> 1658 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1659"><span class="lineNum"> 1659 </span> : : * @nodeoffset: offset of the node whose property to change</a>
+<a name="1660"><span class="lineNum"> 1660 </span> : : * @name: name of the property to change</a>
+<a name="1661"><span class="lineNum"> 1661 </span> : : * @val: 32-bit integer value for the property (native endian)</a>
+<a name="1662"><span class="lineNum"> 1662 </span> : : *</a>
+<a name="1663"><span class="lineNum"> 1663 </span> : : * fdt_setprop_u32() sets the value of the named property in the given</a>
+<a name="1664"><span class="lineNum"> 1664 </span> : : * node to the given 32-bit integer value (converting to big-endian if</a>
+<a name="1665"><span class="lineNum"> 1665 </span> : : * necessary), or creates a new property with that value if it does</a>
+<a name="1666"><span class="lineNum"> 1666 </span> : : * not already exist.</a>
+<a name="1667"><span class="lineNum"> 1667 </span> : : *</a>
+<a name="1668"><span class="lineNum"> 1668 </span> : : * This function may insert or delete data from the blob, and will</a>
+<a name="1669"><span class="lineNum"> 1669 </span> : : * therefore change the offsets of some existing nodes.</a>
+<a name="1670"><span class="lineNum"> 1670 </span> : : *</a>
+<a name="1671"><span class="lineNum"> 1671 </span> : : * returns:</a>
+<a name="1672"><span class="lineNum"> 1672 </span> : : * 0, on success</a>
+<a name="1673"><span class="lineNum"> 1673 </span> : : * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to</a>
+<a name="1674"><span class="lineNum"> 1674 </span> : : * contain the new property value</a>
+<a name="1675"><span class="lineNum"> 1675 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
+<a name="1676"><span class="lineNum"> 1676 </span> : : * -FDT_ERR_BADLAYOUT,</a>
+<a name="1677"><span class="lineNum"> 1677 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1678"><span class="lineNum"> 1678 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1679"><span class="lineNum"> 1679 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1680"><span class="lineNum"> 1680 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="1681"><span class="lineNum"> 1681 </span> : : * -FDT_ERR_BADLAYOUT,</a>
+<a name="1682"><span class="lineNum"> 1682 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="1683"><span class="lineNum"> 1683 </span> : : */</a>
+<a name="1684"><span class="lineNum"> 1684 </span> : : static inline int fdt_setprop_u32(void *fdt, int nodeoffset, const char *name,</a>
+<a name="1685"><span class="lineNum"> 1685 </span> : : uint32_t val)</a>
+<a name="1686"><span class="lineNum"> 1686 </span> : : {</a>
+<a name="1687"><span class="lineNum"> 1687 </span> : : fdt32_t tmp = cpu_to_fdt32(val);</a>
+<a name="1688"><span class="lineNum"> 1688 </span> : : return fdt_setprop(fdt, nodeoffset, name, &amp;tmp, sizeof(tmp));</a>
+<a name="1689"><span class="lineNum"> 1689 </span> : : }</a>
+<a name="1690"><span class="lineNum"> 1690 </span> : : </a>
+<a name="1691"><span class="lineNum"> 1691 </span> : : /**</a>
+<a name="1692"><span class="lineNum"> 1692 </span> : : * fdt_setprop_u64 - set a property to a 64-bit integer</a>
+<a name="1693"><span class="lineNum"> 1693 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1694"><span class="lineNum"> 1694 </span> : : * @nodeoffset: offset of the node whose property to change</a>
+<a name="1695"><span class="lineNum"> 1695 </span> : : * @name: name of the property to change</a>
+<a name="1696"><span class="lineNum"> 1696 </span> : : * @val: 64-bit integer value for the property (native endian)</a>
+<a name="1697"><span class="lineNum"> 1697 </span> : : *</a>
+<a name="1698"><span class="lineNum"> 1698 </span> : : * fdt_setprop_u64() sets the value of the named property in the given</a>
+<a name="1699"><span class="lineNum"> 1699 </span> : : * node to the given 64-bit integer value (converting to big-endian if</a>
+<a name="1700"><span class="lineNum"> 1700 </span> : : * necessary), or creates a new property with that value if it does</a>
+<a name="1701"><span class="lineNum"> 1701 </span> : : * not already exist.</a>
+<a name="1702"><span class="lineNum"> 1702 </span> : : *</a>
+<a name="1703"><span class="lineNum"> 1703 </span> : : * This function may insert or delete data from the blob, and will</a>
+<a name="1704"><span class="lineNum"> 1704 </span> : : * therefore change the offsets of some existing nodes.</a>
+<a name="1705"><span class="lineNum"> 1705 </span> : : *</a>
+<a name="1706"><span class="lineNum"> 1706 </span> : : * returns:</a>
+<a name="1707"><span class="lineNum"> 1707 </span> : : * 0, on success</a>
+<a name="1708"><span class="lineNum"> 1708 </span> : : * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to</a>
+<a name="1709"><span class="lineNum"> 1709 </span> : : * contain the new property value</a>
+<a name="1710"><span class="lineNum"> 1710 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
+<a name="1711"><span class="lineNum"> 1711 </span> : : * -FDT_ERR_BADLAYOUT,</a>
+<a name="1712"><span class="lineNum"> 1712 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1713"><span class="lineNum"> 1713 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1714"><span class="lineNum"> 1714 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1715"><span class="lineNum"> 1715 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="1716"><span class="lineNum"> 1716 </span> : : * -FDT_ERR_BADLAYOUT,</a>
+<a name="1717"><span class="lineNum"> 1717 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="1718"><span class="lineNum"> 1718 </span> : : */</a>
+<a name="1719"><span class="lineNum"> 1719 </span> : : static inline int fdt_setprop_u64(void *fdt, int nodeoffset, const char *name,</a>
+<a name="1720"><span class="lineNum"> 1720 </span> : : uint64_t val)</a>
+<a name="1721"><span class="lineNum"> 1721 </span> : : {</a>
+<a name="1722"><span class="lineNum"> 1722 </span> : : fdt64_t tmp = cpu_to_fdt64(val);</a>
+<a name="1723"><span class="lineNum"> 1723 </span> : : return fdt_setprop(fdt, nodeoffset, name, &amp;tmp, sizeof(tmp));</a>
+<a name="1724"><span class="lineNum"> 1724 </span> : : }</a>
+<a name="1725"><span class="lineNum"> 1725 </span> : : </a>
+<a name="1726"><span class="lineNum"> 1726 </span> : : /**</a>
+<a name="1727"><span class="lineNum"> 1727 </span> : : * fdt_setprop_cell - set a property to a single cell value</a>
+<a name="1728"><span class="lineNum"> 1728 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1729"><span class="lineNum"> 1729 </span> : : * @nodeoffset: offset of the node whose property to change</a>
+<a name="1730"><span class="lineNum"> 1730 </span> : : * @name: name of the property to change</a>
+<a name="1731"><span class="lineNum"> 1731 </span> : : * @val: 32-bit integer value for the property (native endian)</a>
+<a name="1732"><span class="lineNum"> 1732 </span> : : *</a>
+<a name="1733"><span class="lineNum"> 1733 </span> : : * This is an alternative name for fdt_setprop_u32()</a>
<a name="1734"><span class="lineNum"> 1734 </span> : : *</a>
-<a name="1735"><span class="lineNum"> 1735 </span> : : * This is an alternative name for fdt_setprop_u32()</a>
+<a name="1735"><span class="lineNum"> 1735 </span> : : * Return: 0 on success, negative libfdt error value otherwise.</a>
<a name="1736"><span class="lineNum"> 1736 </span> : : */</a>
<a name="1737"><span class="lineNum"> 1737 </span> : : static inline int fdt_setprop_cell(void *fdt, int nodeoffset, const char *name,</a>
<a name="1738"><span class="lineNum"> 1738 </span> : : uint32_t val)</a>
@@ -1974,217 +1974,248 @@
<a name="1903"><span class="lineNum"> 1903 </span> : : </a>
<a name="1904"><span class="lineNum"> 1904 </span> : : /**</a>
<a name="1905"><span class="lineNum"> 1905 </span> : : * fdt_appendprop_cell - append a single cell value to a property</a>
-<a name="1906"><span class="lineNum"> 1906 </span> : : *</a>
-<a name="1907"><span class="lineNum"> 1907 </span> : : * This is an alternative name for fdt_appendprop_u32()</a>
-<a name="1908"><span class="lineNum"> 1908 </span> : : */</a>
-<a name="1909"><span class="lineNum"> 1909 </span> : : static inline int fdt_appendprop_cell(void *fdt, int nodeoffset,</a>
-<a name="1910"><span class="lineNum"> 1910 </span> : : const char *name, uint32_t val)</a>
-<a name="1911"><span class="lineNum"> 1911 </span> : : {</a>
-<a name="1912"><span class="lineNum"> 1912 </span> : : return fdt_appendprop_u32(fdt, nodeoffset, name, val);</a>
-<a name="1913"><span class="lineNum"> 1913 </span> : : }</a>
-<a name="1914"><span class="lineNum"> 1914 </span> : : </a>
-<a name="1915"><span class="lineNum"> 1915 </span> : : /**</a>
-<a name="1916"><span class="lineNum"> 1916 </span> : : * fdt_appendprop_string - append a string to a property</a>
-<a name="1917"><span class="lineNum"> 1917 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1918"><span class="lineNum"> 1918 </span> : : * @nodeoffset: offset of the node whose property to change</a>
-<a name="1919"><span class="lineNum"> 1919 </span> : : * @name: name of the property to change</a>
-<a name="1920"><span class="lineNum"> 1920 </span> : : * @str: string value to append to the property</a>
-<a name="1921"><span class="lineNum"> 1921 </span> : : *</a>
-<a name="1922"><span class="lineNum"> 1922 </span> : : * fdt_appendprop_string() appends the given string to the value of</a>
-<a name="1923"><span class="lineNum"> 1923 </span> : : * the named property in the given node, or creates a new property</a>
-<a name="1924"><span class="lineNum"> 1924 </span> : : * with that value if it does not already exist.</a>
-<a name="1925"><span class="lineNum"> 1925 </span> : : *</a>
-<a name="1926"><span class="lineNum"> 1926 </span> : : * This function may insert data into the blob, and will therefore</a>
-<a name="1927"><span class="lineNum"> 1927 </span> : : * change the offsets of some existing nodes.</a>
-<a name="1928"><span class="lineNum"> 1928 </span> : : *</a>
-<a name="1929"><span class="lineNum"> 1929 </span> : : * returns:</a>
-<a name="1930"><span class="lineNum"> 1930 </span> : : * 0, on success</a>
-<a name="1931"><span class="lineNum"> 1931 </span> : : * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to</a>
-<a name="1932"><span class="lineNum"> 1932 </span> : : * contain the new property value</a>
-<a name="1933"><span class="lineNum"> 1933 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
-<a name="1934"><span class="lineNum"> 1934 </span> : : * -FDT_ERR_BADLAYOUT,</a>
-<a name="1935"><span class="lineNum"> 1935 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1936"><span class="lineNum"> 1936 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1937"><span class="lineNum"> 1937 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1938"><span class="lineNum"> 1938 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="1939"><span class="lineNum"> 1939 </span> : : * -FDT_ERR_BADLAYOUT,</a>
-<a name="1940"><span class="lineNum"> 1940 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="1941"><span class="lineNum"> 1941 </span> : : */</a>
-<a name="1942"><span class="lineNum"> 1942 </span> : : #define fdt_appendprop_string(fdt, nodeoffset, name, str) \</a>
-<a name="1943"><span class="lineNum"> 1943 </span> : : fdt_appendprop((fdt), (nodeoffset), (name), (str), strlen(str)+1)</a>
-<a name="1944"><span class="lineNum"> 1944 </span> : : </a>
-<a name="1945"><span class="lineNum"> 1945 </span> : : /**</a>
-<a name="1946"><span class="lineNum"> 1946 </span> : : * fdt_appendprop_addrrange - append a address range property</a>
-<a name="1947"><span class="lineNum"> 1947 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1948"><span class="lineNum"> 1948 </span> : : * @parent: offset of the parent node</a>
-<a name="1949"><span class="lineNum"> 1949 </span> : : * @nodeoffset: offset of the node to add a property at</a>
-<a name="1950"><span class="lineNum"> 1950 </span> : : * @name: name of property</a>
-<a name="1951"><span class="lineNum"> 1951 </span> : : * @addr: start address of a given range</a>
-<a name="1952"><span class="lineNum"> 1952 </span> : : * @size: size of a given range</a>
-<a name="1953"><span class="lineNum"> 1953 </span> : : *</a>
-<a name="1954"><span class="lineNum"> 1954 </span> : : * fdt_appendprop_addrrange() appends an address range value (start</a>
-<a name="1955"><span class="lineNum"> 1955 </span> : : * address and size) to the value of the named property in the given</a>
-<a name="1956"><span class="lineNum"> 1956 </span> : : * node, or creates a new property with that value if it does not</a>
-<a name="1957"><span class="lineNum"> 1957 </span> : : * already exist.</a>
-<a name="1958"><span class="lineNum"> 1958 </span> : : * If &quot;name&quot; is not specified, a default &quot;reg&quot; is used.</a>
-<a name="1959"><span class="lineNum"> 1959 </span> : : * Cell sizes are determined by parent's #address-cells and #size-cells.</a>
-<a name="1960"><span class="lineNum"> 1960 </span> : : *</a>
-<a name="1961"><span class="lineNum"> 1961 </span> : : * This function may insert data into the blob, and will therefore</a>
-<a name="1962"><span class="lineNum"> 1962 </span> : : * change the offsets of some existing nodes.</a>
-<a name="1963"><span class="lineNum"> 1963 </span> : : *</a>
-<a name="1964"><span class="lineNum"> 1964 </span> : : * returns:</a>
-<a name="1965"><span class="lineNum"> 1965 </span> : : * 0, on success</a>
-<a name="1966"><span class="lineNum"> 1966 </span> : : * -FDT_ERR_BADLAYOUT,</a>
-<a name="1967"><span class="lineNum"> 1967 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1968"><span class="lineNum"> 1968 </span> : : * -FDT_ERR_BADNCELLS, if the node has a badly formatted or invalid</a>
-<a name="1969"><span class="lineNum"> 1969 </span> : : * #address-cells property</a>
-<a name="1970"><span class="lineNum"> 1970 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
-<a name="1971"><span class="lineNum"> 1971 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="1972"><span class="lineNum"> 1972 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="1973"><span class="lineNum"> 1973 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="1974"><span class="lineNum"> 1974 </span> : : * -FDT_ERR_BADVALUE, addr or size doesn't fit to respective cells size</a>
-<a name="1975"><span class="lineNum"> 1975 </span> : : * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to</a>
-<a name="1976"><span class="lineNum"> 1976 </span> : : * contain a new property</a>
-<a name="1977"><span class="lineNum"> 1977 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="1978"><span class="lineNum"> 1978 </span> : : */</a>
-<a name="1979"><span class="lineNum"> 1979 </span> : : int fdt_appendprop_addrrange(void *fdt, int parent, int nodeoffset,</a>
-<a name="1980"><span class="lineNum"> 1980 </span> : : const char *name, uint64_t addr, uint64_t size);</a>
-<a name="1981"><span class="lineNum"> 1981 </span> : : </a>
-<a name="1982"><span class="lineNum"> 1982 </span> : : /**</a>
-<a name="1983"><span class="lineNum"> 1983 </span> : : * fdt_delprop - delete a property</a>
-<a name="1984"><span class="lineNum"> 1984 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="1985"><span class="lineNum"> 1985 </span> : : * @nodeoffset: offset of the node whose property to nop</a>
-<a name="1986"><span class="lineNum"> 1986 </span> : : * @name: name of the property to nop</a>
-<a name="1987"><span class="lineNum"> 1987 </span> : : *</a>
-<a name="1988"><span class="lineNum"> 1988 </span> : : * fdt_del_property() will delete the given property.</a>
-<a name="1989"><span class="lineNum"> 1989 </span> : : *</a>
-<a name="1990"><span class="lineNum"> 1990 </span> : : * This function will delete data from the blob, and will therefore</a>
-<a name="1991"><span class="lineNum"> 1991 </span> : : * change the offsets of some existing nodes.</a>
-<a name="1992"><span class="lineNum"> 1992 </span> : : *</a>
-<a name="1993"><span class="lineNum"> 1993 </span> : : * returns:</a>
-<a name="1994"><span class="lineNum"> 1994 </span> : : * 0, on success</a>
-<a name="1995"><span class="lineNum"> 1995 </span> : : * -FDT_ERR_NOTFOUND, node does not have the named property</a>
-<a name="1996"><span class="lineNum"> 1996 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
-<a name="1997"><span class="lineNum"> 1997 </span> : : * -FDT_ERR_BADLAYOUT,</a>
-<a name="1998"><span class="lineNum"> 1998 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="1999"><span class="lineNum"> 1999 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="2000"><span class="lineNum"> 2000 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="2001"><span class="lineNum"> 2001 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="2002"><span class="lineNum"> 2002 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="2003"><span class="lineNum"> 2003 </span> : : */</a>
-<a name="2004"><span class="lineNum"> 2004 </span> : : int fdt_delprop(void *fdt, int nodeoffset, const char *name);</a>
-<a name="2005"><span class="lineNum"> 2005 </span> : : </a>
-<a name="2006"><span class="lineNum"> 2006 </span> : : /**</a>
-<a name="2007"><span class="lineNum"> 2007 </span> : : * fdt_add_subnode_namelen - creates a new node based on substring</a>
-<a name="2008"><span class="lineNum"> 2008 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="2009"><span class="lineNum"> 2009 </span> : : * @parentoffset: structure block offset of a node</a>
-<a name="2010"><span class="lineNum"> 2010 </span> : : * @name: name of the subnode to locate</a>
-<a name="2011"><span class="lineNum"> 2011 </span> : : * @namelen: number of characters of name to consider</a>
-<a name="2012"><span class="lineNum"> 2012 </span> : : *</a>
-<a name="2013"><span class="lineNum"> 2013 </span> : : * Identical to fdt_add_subnode(), but use only the first namelen</a>
-<a name="2014"><span class="lineNum"> 2014 </span> : : * characters of name as the name of the new node. This is useful for</a>
-<a name="2015"><span class="lineNum"> 2015 </span> : : * creating subnodes based on a portion of a larger string, such as a</a>
-<a name="2016"><span class="lineNum"> 2016 </span> : : * full path.</a>
-<a name="2017"><span class="lineNum"> 2017 </span> : : */</a>
-<a name="2018"><span class="lineNum"> 2018 </span> : : #ifndef SWIG /* Not available in Python */</a>
-<a name="2019"><span class="lineNum"> 2019 </span> : : int fdt_add_subnode_namelen(void *fdt, int parentoffset,</a>
-<a name="2020"><span class="lineNum"> 2020 </span> : : const char *name, int namelen);</a>
-<a name="2021"><span class="lineNum"> 2021 </span> : : #endif</a>
-<a name="2022"><span class="lineNum"> 2022 </span> : : </a>
-<a name="2023"><span class="lineNum"> 2023 </span> : : /**</a>
-<a name="2024"><span class="lineNum"> 2024 </span> : : * fdt_add_subnode - creates a new node</a>
-<a name="2025"><span class="lineNum"> 2025 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="2026"><span class="lineNum"> 2026 </span> : : * @parentoffset: structure block offset of a node</a>
-<a name="2027"><span class="lineNum"> 2027 </span> : : * @name: name of the subnode to locate</a>
-<a name="2028"><span class="lineNum"> 2028 </span> : : *</a>
-<a name="2029"><span class="lineNum"> 2029 </span> : : * fdt_add_subnode() creates a new node as a subnode of the node at</a>
-<a name="2030"><span class="lineNum"> 2030 </span> : : * structure block offset parentoffset, with the given name (which</a>
-<a name="2031"><span class="lineNum"> 2031 </span> : : * should include the unit address, if any).</a>
-<a name="2032"><span class="lineNum"> 2032 </span> : : *</a>
-<a name="2033"><span class="lineNum"> 2033 </span> : : * This function will insert data into the blob, and will therefore</a>
-<a name="2034"><span class="lineNum"> 2034 </span> : : * change the offsets of some existing nodes.</a>
-<a name="2035"><span class="lineNum"> 2035 </span> : : </a>
-<a name="2036"><span class="lineNum"> 2036 </span> : : * returns:</a>
-<a name="2037"><span class="lineNum"> 2037 </span> : : * structure block offset of the created nodeequested subnode (&gt;=0), on</a>
-<a name="2038"><span class="lineNum"> 2038 </span> : : * success</a>
-<a name="2039"><span class="lineNum"> 2039 </span> : : * -FDT_ERR_NOTFOUND, if the requested subnode does not exist</a>
-<a name="2040"><span class="lineNum"> 2040 </span> : : * -FDT_ERR_BADOFFSET, if parentoffset did not point to an FDT_BEGIN_NODE</a>
-<a name="2041"><span class="lineNum"> 2041 </span> : : * tag</a>
-<a name="2042"><span class="lineNum"> 2042 </span> : : * -FDT_ERR_EXISTS, if the node at parentoffset already has a subnode of</a>
-<a name="2043"><span class="lineNum"> 2043 </span> : : * the given name</a>
-<a name="2044"><span class="lineNum"> 2044 </span> : : * -FDT_ERR_NOSPACE, if there is insufficient free space in the</a>
-<a name="2045"><span class="lineNum"> 2045 </span> : : * blob to contain the new node</a>
-<a name="2046"><span class="lineNum"> 2046 </span> : : * -FDT_ERR_NOSPACE</a>
-<a name="2047"><span class="lineNum"> 2047 </span> : : * -FDT_ERR_BADLAYOUT</a>
-<a name="2048"><span class="lineNum"> 2048 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="2049"><span class="lineNum"> 2049 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="2050"><span class="lineNum"> 2050 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="2051"><span class="lineNum"> 2051 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="2052"><span class="lineNum"> 2052 </span> : : * -FDT_ERR_TRUNCATED, standard meanings.</a>
-<a name="2053"><span class="lineNum"> 2053 </span> : : */</a>
-<a name="2054"><span class="lineNum"> 2054 </span> : : int fdt_add_subnode(void *fdt, int parentoffset, const char *name);</a>
-<a name="2055"><span class="lineNum"> 2055 </span> : : </a>
-<a name="2056"><span class="lineNum"> 2056 </span> : : /**</a>
-<a name="2057"><span class="lineNum"> 2057 </span> : : * fdt_del_node - delete a node (subtree)</a>
-<a name="2058"><span class="lineNum"> 2058 </span> : : * @fdt: pointer to the device tree blob</a>
-<a name="2059"><span class="lineNum"> 2059 </span> : : * @nodeoffset: offset of the node to nop</a>
-<a name="2060"><span class="lineNum"> 2060 </span> : : *</a>
-<a name="2061"><span class="lineNum"> 2061 </span> : : * fdt_del_node() will remove the given node, including all its</a>
-<a name="2062"><span class="lineNum"> 2062 </span> : : * subnodes if any, from the blob.</a>
-<a name="2063"><span class="lineNum"> 2063 </span> : : *</a>
-<a name="2064"><span class="lineNum"> 2064 </span> : : * This function will delete data from the blob, and will therefore</a>
-<a name="2065"><span class="lineNum"> 2065 </span> : : * change the offsets of some existing nodes.</a>
-<a name="2066"><span class="lineNum"> 2066 </span> : : *</a>
-<a name="2067"><span class="lineNum"> 2067 </span> : : * returns:</a>
-<a name="2068"><span class="lineNum"> 2068 </span> : : * 0, on success</a>
-<a name="2069"><span class="lineNum"> 2069 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
-<a name="2070"><span class="lineNum"> 2070 </span> : : * -FDT_ERR_BADLAYOUT,</a>
-<a name="2071"><span class="lineNum"> 2071 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="2072"><span class="lineNum"> 2072 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="2073"><span class="lineNum"> 2073 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="2074"><span class="lineNum"> 2074 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="2075"><span class="lineNum"> 2075 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="2076"><span class="lineNum"> 2076 </span> : : */</a>
-<a name="2077"><span class="lineNum"> 2077 </span> : : int fdt_del_node(void *fdt, int nodeoffset);</a>
-<a name="2078"><span class="lineNum"> 2078 </span> : : </a>
-<a name="2079"><span class="lineNum"> 2079 </span> : : /**</a>
-<a name="2080"><span class="lineNum"> 2080 </span> : : * fdt_overlay_apply - Applies a DT overlay on a base DT</a>
-<a name="2081"><span class="lineNum"> 2081 </span> : : * @fdt: pointer to the base device tree blob</a>
-<a name="2082"><span class="lineNum"> 2082 </span> : : * @fdto: pointer to the device tree overlay blob</a>
-<a name="2083"><span class="lineNum"> 2083 </span> : : *</a>
-<a name="2084"><span class="lineNum"> 2084 </span> : : * fdt_overlay_apply() will apply the given device tree overlay on the</a>
-<a name="2085"><span class="lineNum"> 2085 </span> : : * given base device tree.</a>
-<a name="2086"><span class="lineNum"> 2086 </span> : : *</a>
-<a name="2087"><span class="lineNum"> 2087 </span> : : * Expect the base device tree to be modified, even if the function</a>
-<a name="2088"><span class="lineNum"> 2088 </span> : : * returns an error.</a>
-<a name="2089"><span class="lineNum"> 2089 </span> : : *</a>
-<a name="2090"><span class="lineNum"> 2090 </span> : : * returns:</a>
-<a name="2091"><span class="lineNum"> 2091 </span> : : * 0, on success</a>
-<a name="2092"><span class="lineNum"> 2092 </span> : : * -FDT_ERR_NOSPACE, there's not enough space in the base device tree</a>
-<a name="2093"><span class="lineNum"> 2093 </span> : : * -FDT_ERR_NOTFOUND, the overlay points to some inexistant nodes or</a>
-<a name="2094"><span class="lineNum"> 2094 </span> : : * properties in the base DT</a>
-<a name="2095"><span class="lineNum"> 2095 </span> : : * -FDT_ERR_BADPHANDLE,</a>
-<a name="2096"><span class="lineNum"> 2096 </span> : : * -FDT_ERR_BADOVERLAY,</a>
-<a name="2097"><span class="lineNum"> 2097 </span> : : * -FDT_ERR_NOPHANDLES,</a>
-<a name="2098"><span class="lineNum"> 2098 </span> : : * -FDT_ERR_INTERNAL,</a>
-<a name="2099"><span class="lineNum"> 2099 </span> : : * -FDT_ERR_BADLAYOUT,</a>
-<a name="2100"><span class="lineNum"> 2100 </span> : : * -FDT_ERR_BADMAGIC,</a>
-<a name="2101"><span class="lineNum"> 2101 </span> : : * -FDT_ERR_BADOFFSET,</a>
-<a name="2102"><span class="lineNum"> 2102 </span> : : * -FDT_ERR_BADPATH,</a>
-<a name="2103"><span class="lineNum"> 2103 </span> : : * -FDT_ERR_BADVERSION,</a>
-<a name="2104"><span class="lineNum"> 2104 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
-<a name="2105"><span class="lineNum"> 2105 </span> : : * -FDT_ERR_BADSTATE,</a>
-<a name="2106"><span class="lineNum"> 2106 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
-<a name="2107"><span class="lineNum"> 2107 </span> : : */</a>
-<a name="2108"><span class="lineNum"> 2108 </span> : : int fdt_overlay_apply(void *fdt, void *fdto);</a>
-<a name="2109"><span class="lineNum"> 2109 </span> : : </a>
-<a name="2110"><span class="lineNum"> 2110 </span> : : /**********************************************************************/</a>
-<a name="2111"><span class="lineNum"> 2111 </span> : : /* Debugging / informational functions */</a>
-<a name="2112"><span class="lineNum"> 2112 </span> : : /**********************************************************************/</a>
-<a name="2113"><span class="lineNum"> 2113 </span> : : </a>
-<a name="2114"><span class="lineNum"> 2114 </span> : : const char *fdt_strerror(int errval);</a>
-<a name="2115"><span class="lineNum"> 2115 </span> : : </a>
-<a name="2116"><span class="lineNum"> 2116 </span> : : #endif /* LIBFDT_H */</a>
+<a name="1906"><span class="lineNum"> 1906 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1907"><span class="lineNum"> 1907 </span> : : * @nodeoffset: offset of the node whose property to change</a>
+<a name="1908"><span class="lineNum"> 1908 </span> : : * @name: name of the property to change</a>
+<a name="1909"><span class="lineNum"> 1909 </span> : : * @val: 32-bit integer value to append to the property (native endian)</a>
+<a name="1910"><span class="lineNum"> 1910 </span> : : *</a>
+<a name="1911"><span class="lineNum"> 1911 </span> : : * This is an alternative name for fdt_appendprop_u32()</a>
+<a name="1912"><span class="lineNum"> 1912 </span> : : *</a>
+<a name="1913"><span class="lineNum"> 1913 </span> : : * Return: 0 on success, negative libfdt error value otherwise.</a>
+<a name="1914"><span class="lineNum"> 1914 </span> : : */</a>
+<a name="1915"><span class="lineNum"> 1915 </span> : : static inline int fdt_appendprop_cell(void *fdt, int nodeoffset,</a>
+<a name="1916"><span class="lineNum"> 1916 </span> : : const char *name, uint32_t val)</a>
+<a name="1917"><span class="lineNum"> 1917 </span> : : {</a>
+<a name="1918"><span class="lineNum"> 1918 </span> : : return fdt_appendprop_u32(fdt, nodeoffset, name, val);</a>
+<a name="1919"><span class="lineNum"> 1919 </span> : : }</a>
+<a name="1920"><span class="lineNum"> 1920 </span> : : </a>
+<a name="1921"><span class="lineNum"> 1921 </span> : : /**</a>
+<a name="1922"><span class="lineNum"> 1922 </span> : : * fdt_appendprop_string - append a string to a property</a>
+<a name="1923"><span class="lineNum"> 1923 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1924"><span class="lineNum"> 1924 </span> : : * @nodeoffset: offset of the node whose property to change</a>
+<a name="1925"><span class="lineNum"> 1925 </span> : : * @name: name of the property to change</a>
+<a name="1926"><span class="lineNum"> 1926 </span> : : * @str: string value to append to the property</a>
+<a name="1927"><span class="lineNum"> 1927 </span> : : *</a>
+<a name="1928"><span class="lineNum"> 1928 </span> : : * fdt_appendprop_string() appends the given string to the value of</a>
+<a name="1929"><span class="lineNum"> 1929 </span> : : * the named property in the given node, or creates a new property</a>
+<a name="1930"><span class="lineNum"> 1930 </span> : : * with that value if it does not already exist.</a>
+<a name="1931"><span class="lineNum"> 1931 </span> : : *</a>
+<a name="1932"><span class="lineNum"> 1932 </span> : : * This function may insert data into the blob, and will therefore</a>
+<a name="1933"><span class="lineNum"> 1933 </span> : : * change the offsets of some existing nodes.</a>
+<a name="1934"><span class="lineNum"> 1934 </span> : : *</a>
+<a name="1935"><span class="lineNum"> 1935 </span> : : * returns:</a>
+<a name="1936"><span class="lineNum"> 1936 </span> : : * 0, on success</a>
+<a name="1937"><span class="lineNum"> 1937 </span> : : * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to</a>
+<a name="1938"><span class="lineNum"> 1938 </span> : : * contain the new property value</a>
+<a name="1939"><span class="lineNum"> 1939 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
+<a name="1940"><span class="lineNum"> 1940 </span> : : * -FDT_ERR_BADLAYOUT,</a>
+<a name="1941"><span class="lineNum"> 1941 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1942"><span class="lineNum"> 1942 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1943"><span class="lineNum"> 1943 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1944"><span class="lineNum"> 1944 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="1945"><span class="lineNum"> 1945 </span> : : * -FDT_ERR_BADLAYOUT,</a>
+<a name="1946"><span class="lineNum"> 1946 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="1947"><span class="lineNum"> 1947 </span> : : */</a>
+<a name="1948"><span class="lineNum"> 1948 </span> : : #define fdt_appendprop_string(fdt, nodeoffset, name, str) \</a>
+<a name="1949"><span class="lineNum"> 1949 </span> : : fdt_appendprop((fdt), (nodeoffset), (name), (str), strlen(str)+1)</a>
+<a name="1950"><span class="lineNum"> 1950 </span> : : </a>
+<a name="1951"><span class="lineNum"> 1951 </span> : : /**</a>
+<a name="1952"><span class="lineNum"> 1952 </span> : : * fdt_appendprop_addrrange - append a address range property</a>
+<a name="1953"><span class="lineNum"> 1953 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1954"><span class="lineNum"> 1954 </span> : : * @parent: offset of the parent node</a>
+<a name="1955"><span class="lineNum"> 1955 </span> : : * @nodeoffset: offset of the node to add a property at</a>
+<a name="1956"><span class="lineNum"> 1956 </span> : : * @name: name of property</a>
+<a name="1957"><span class="lineNum"> 1957 </span> : : * @addr: start address of a given range</a>
+<a name="1958"><span class="lineNum"> 1958 </span> : : * @size: size of a given range</a>
+<a name="1959"><span class="lineNum"> 1959 </span> : : *</a>
+<a name="1960"><span class="lineNum"> 1960 </span> : : * fdt_appendprop_addrrange() appends an address range value (start</a>
+<a name="1961"><span class="lineNum"> 1961 </span> : : * address and size) to the value of the named property in the given</a>
+<a name="1962"><span class="lineNum"> 1962 </span> : : * node, or creates a new property with that value if it does not</a>
+<a name="1963"><span class="lineNum"> 1963 </span> : : * already exist.</a>
+<a name="1964"><span class="lineNum"> 1964 </span> : : * If &quot;name&quot; is not specified, a default &quot;reg&quot; is used.</a>
+<a name="1965"><span class="lineNum"> 1965 </span> : : * Cell sizes are determined by parent's #address-cells and #size-cells.</a>
+<a name="1966"><span class="lineNum"> 1966 </span> : : *</a>
+<a name="1967"><span class="lineNum"> 1967 </span> : : * This function may insert data into the blob, and will therefore</a>
+<a name="1968"><span class="lineNum"> 1968 </span> : : * change the offsets of some existing nodes.</a>
+<a name="1969"><span class="lineNum"> 1969 </span> : : *</a>
+<a name="1970"><span class="lineNum"> 1970 </span> : : * returns:</a>
+<a name="1971"><span class="lineNum"> 1971 </span> : : * 0, on success</a>
+<a name="1972"><span class="lineNum"> 1972 </span> : : * -FDT_ERR_BADLAYOUT,</a>
+<a name="1973"><span class="lineNum"> 1973 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="1974"><span class="lineNum"> 1974 </span> : : * -FDT_ERR_BADNCELLS, if the node has a badly formatted or invalid</a>
+<a name="1975"><span class="lineNum"> 1975 </span> : : * #address-cells property</a>
+<a name="1976"><span class="lineNum"> 1976 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
+<a name="1977"><span class="lineNum"> 1977 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="1978"><span class="lineNum"> 1978 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="1979"><span class="lineNum"> 1979 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="1980"><span class="lineNum"> 1980 </span> : : * -FDT_ERR_BADVALUE, addr or size doesn't fit to respective cells size</a>
+<a name="1981"><span class="lineNum"> 1981 </span> : : * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to</a>
+<a name="1982"><span class="lineNum"> 1982 </span> : : * contain a new property</a>
+<a name="1983"><span class="lineNum"> 1983 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="1984"><span class="lineNum"> 1984 </span> : : */</a>
+<a name="1985"><span class="lineNum"> 1985 </span> : : int fdt_appendprop_addrrange(void *fdt, int parent, int nodeoffset,</a>
+<a name="1986"><span class="lineNum"> 1986 </span> : : const char *name, uint64_t addr, uint64_t size);</a>
+<a name="1987"><span class="lineNum"> 1987 </span> : : </a>
+<a name="1988"><span class="lineNum"> 1988 </span> : : /**</a>
+<a name="1989"><span class="lineNum"> 1989 </span> : : * fdt_delprop - delete a property</a>
+<a name="1990"><span class="lineNum"> 1990 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="1991"><span class="lineNum"> 1991 </span> : : * @nodeoffset: offset of the node whose property to nop</a>
+<a name="1992"><span class="lineNum"> 1992 </span> : : * @name: name of the property to nop</a>
+<a name="1993"><span class="lineNum"> 1993 </span> : : *</a>
+<a name="1994"><span class="lineNum"> 1994 </span> : : * fdt_del_property() will delete the given property.</a>
+<a name="1995"><span class="lineNum"> 1995 </span> : : *</a>
+<a name="1996"><span class="lineNum"> 1996 </span> : : * This function will delete data from the blob, and will therefore</a>
+<a name="1997"><span class="lineNum"> 1997 </span> : : * change the offsets of some existing nodes.</a>
+<a name="1998"><span class="lineNum"> 1998 </span> : : *</a>
+<a name="1999"><span class="lineNum"> 1999 </span> : : * returns:</a>
+<a name="2000"><span class="lineNum"> 2000 </span> : : * 0, on success</a>
+<a name="2001"><span class="lineNum"> 2001 </span> : : * -FDT_ERR_NOTFOUND, node does not have the named property</a>
+<a name="2002"><span class="lineNum"> 2002 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
+<a name="2003"><span class="lineNum"> 2003 </span> : : * -FDT_ERR_BADLAYOUT,</a>
+<a name="2004"><span class="lineNum"> 2004 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="2005"><span class="lineNum"> 2005 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="2006"><span class="lineNum"> 2006 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="2007"><span class="lineNum"> 2007 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="2008"><span class="lineNum"> 2008 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="2009"><span class="lineNum"> 2009 </span> : : */</a>
+<a name="2010"><span class="lineNum"> 2010 </span> : : int fdt_delprop(void *fdt, int nodeoffset, const char *name);</a>
+<a name="2011"><span class="lineNum"> 2011 </span> : : </a>
+<a name="2012"><span class="lineNum"> 2012 </span> : : /**</a>
+<a name="2013"><span class="lineNum"> 2013 </span> : : * fdt_add_subnode_namelen - creates a new node based on substring</a>
+<a name="2014"><span class="lineNum"> 2014 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="2015"><span class="lineNum"> 2015 </span> : : * @parentoffset: structure block offset of a node</a>
+<a name="2016"><span class="lineNum"> 2016 </span> : : * @name: name of the subnode to create</a>
+<a name="2017"><span class="lineNum"> 2017 </span> : : * @namelen: number of characters of name to consider</a>
+<a name="2018"><span class="lineNum"> 2018 </span> : : *</a>
+<a name="2019"><span class="lineNum"> 2019 </span> : : * Identical to fdt_add_subnode(), but use only the first @namelen</a>
+<a name="2020"><span class="lineNum"> 2020 </span> : : * characters of @name as the name of the new node. This is useful for</a>
+<a name="2021"><span class="lineNum"> 2021 </span> : : * creating subnodes based on a portion of a larger string, such as a</a>
+<a name="2022"><span class="lineNum"> 2022 </span> : : * full path.</a>
+<a name="2023"><span class="lineNum"> 2023 </span> : : *</a>
+<a name="2024"><span class="lineNum"> 2024 </span> : : * Return: structure block offset of the created subnode (&gt;=0),</a>
+<a name="2025"><span class="lineNum"> 2025 </span> : : * negative libfdt error value otherwise</a>
+<a name="2026"><span class="lineNum"> 2026 </span> : : */</a>
+<a name="2027"><span class="lineNum"> 2027 </span> : : #ifndef SWIG /* Not available in Python */</a>
+<a name="2028"><span class="lineNum"> 2028 </span> : : int fdt_add_subnode_namelen(void *fdt, int parentoffset,</a>
+<a name="2029"><span class="lineNum"> 2029 </span> : : const char *name, int namelen);</a>
+<a name="2030"><span class="lineNum"> 2030 </span> : : #endif</a>
+<a name="2031"><span class="lineNum"> 2031 </span> : : </a>
+<a name="2032"><span class="lineNum"> 2032 </span> : : /**</a>
+<a name="2033"><span class="lineNum"> 2033 </span> : : * fdt_add_subnode - creates a new node</a>
+<a name="2034"><span class="lineNum"> 2034 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="2035"><span class="lineNum"> 2035 </span> : : * @parentoffset: structure block offset of a node</a>
+<a name="2036"><span class="lineNum"> 2036 </span> : : * @name: name of the subnode to locate</a>
+<a name="2037"><span class="lineNum"> 2037 </span> : : *</a>
+<a name="2038"><span class="lineNum"> 2038 </span> : : * fdt_add_subnode() creates a new node as a subnode of the node at</a>
+<a name="2039"><span class="lineNum"> 2039 </span> : : * structure block offset parentoffset, with the given name (which</a>
+<a name="2040"><span class="lineNum"> 2040 </span> : : * should include the unit address, if any).</a>
+<a name="2041"><span class="lineNum"> 2041 </span> : : *</a>
+<a name="2042"><span class="lineNum"> 2042 </span> : : * This function will insert data into the blob, and will therefore</a>
+<a name="2043"><span class="lineNum"> 2043 </span> : : * change the offsets of some existing nodes.</a>
+<a name="2044"><span class="lineNum"> 2044 </span> : : *</a>
+<a name="2045"><span class="lineNum"> 2045 </span> : : * returns:</a>
+<a name="2046"><span class="lineNum"> 2046 </span> : : * structure block offset of the created nodeequested subnode (&gt;=0), on</a>
+<a name="2047"><span class="lineNum"> 2047 </span> : : * success</a>
+<a name="2048"><span class="lineNum"> 2048 </span> : : * -FDT_ERR_NOTFOUND, if the requested subnode does not exist</a>
+<a name="2049"><span class="lineNum"> 2049 </span> : : * -FDT_ERR_BADOFFSET, if parentoffset did not point to an FDT_BEGIN_NODE</a>
+<a name="2050"><span class="lineNum"> 2050 </span> : : * tag</a>
+<a name="2051"><span class="lineNum"> 2051 </span> : : * -FDT_ERR_EXISTS, if the node at parentoffset already has a subnode of</a>
+<a name="2052"><span class="lineNum"> 2052 </span> : : * the given name</a>
+<a name="2053"><span class="lineNum"> 2053 </span> : : * -FDT_ERR_NOSPACE, if there is insufficient free space in the</a>
+<a name="2054"><span class="lineNum"> 2054 </span> : : * blob to contain the new node</a>
+<a name="2055"><span class="lineNum"> 2055 </span> : : * -FDT_ERR_NOSPACE</a>
+<a name="2056"><span class="lineNum"> 2056 </span> : : * -FDT_ERR_BADLAYOUT</a>
+<a name="2057"><span class="lineNum"> 2057 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="2058"><span class="lineNum"> 2058 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="2059"><span class="lineNum"> 2059 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="2060"><span class="lineNum"> 2060 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="2061"><span class="lineNum"> 2061 </span> : : * -FDT_ERR_TRUNCATED, standard meanings.</a>
+<a name="2062"><span class="lineNum"> 2062 </span> : : */</a>
+<a name="2063"><span class="lineNum"> 2063 </span> : : int fdt_add_subnode(void *fdt, int parentoffset, const char *name);</a>
+<a name="2064"><span class="lineNum"> 2064 </span> : : </a>
+<a name="2065"><span class="lineNum"> 2065 </span> : : /**</a>
+<a name="2066"><span class="lineNum"> 2066 </span> : : * fdt_del_node - delete a node (subtree)</a>
+<a name="2067"><span class="lineNum"> 2067 </span> : : * @fdt: pointer to the device tree blob</a>
+<a name="2068"><span class="lineNum"> 2068 </span> : : * @nodeoffset: offset of the node to nop</a>
+<a name="2069"><span class="lineNum"> 2069 </span> : : *</a>
+<a name="2070"><span class="lineNum"> 2070 </span> : : * fdt_del_node() will remove the given node, including all its</a>
+<a name="2071"><span class="lineNum"> 2071 </span> : : * subnodes if any, from the blob.</a>
+<a name="2072"><span class="lineNum"> 2072 </span> : : *</a>
+<a name="2073"><span class="lineNum"> 2073 </span> : : * This function will delete data from the blob, and will therefore</a>
+<a name="2074"><span class="lineNum"> 2074 </span> : : * change the offsets of some existing nodes.</a>
+<a name="2075"><span class="lineNum"> 2075 </span> : : *</a>
+<a name="2076"><span class="lineNum"> 2076 </span> : : * returns:</a>
+<a name="2077"><span class="lineNum"> 2077 </span> : : * 0, on success</a>
+<a name="2078"><span class="lineNum"> 2078 </span> : : * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag</a>
+<a name="2079"><span class="lineNum"> 2079 </span> : : * -FDT_ERR_BADLAYOUT,</a>
+<a name="2080"><span class="lineNum"> 2080 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="2081"><span class="lineNum"> 2081 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="2082"><span class="lineNum"> 2082 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="2083"><span class="lineNum"> 2083 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="2084"><span class="lineNum"> 2084 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="2085"><span class="lineNum"> 2085 </span> : : */</a>
+<a name="2086"><span class="lineNum"> 2086 </span> : : int fdt_del_node(void *fdt, int nodeoffset);</a>
+<a name="2087"><span class="lineNum"> 2087 </span> : : </a>
+<a name="2088"><span class="lineNum"> 2088 </span> : : /**</a>
+<a name="2089"><span class="lineNum"> 2089 </span> : : * fdt_overlay_apply - Applies a DT overlay on a base DT</a>
+<a name="2090"><span class="lineNum"> 2090 </span> : : * @fdt: pointer to the base device tree blob</a>
+<a name="2091"><span class="lineNum"> 2091 </span> : : * @fdto: pointer to the device tree overlay blob</a>
+<a name="2092"><span class="lineNum"> 2092 </span> : : *</a>
+<a name="2093"><span class="lineNum"> 2093 </span> : : * fdt_overlay_apply() will apply the given device tree overlay on the</a>
+<a name="2094"><span class="lineNum"> 2094 </span> : : * given base device tree.</a>
+<a name="2095"><span class="lineNum"> 2095 </span> : : *</a>
+<a name="2096"><span class="lineNum"> 2096 </span> : : * Expect the base device tree to be modified, even if the function</a>
+<a name="2097"><span class="lineNum"> 2097 </span> : : * returns an error.</a>
+<a name="2098"><span class="lineNum"> 2098 </span> : : *</a>
+<a name="2099"><span class="lineNum"> 2099 </span> : : * returns:</a>
+<a name="2100"><span class="lineNum"> 2100 </span> : : * 0, on success</a>
+<a name="2101"><span class="lineNum"> 2101 </span> : : * -FDT_ERR_NOSPACE, there's not enough space in the base device tree</a>
+<a name="2102"><span class="lineNum"> 2102 </span> : : * -FDT_ERR_NOTFOUND, the overlay points to some inexistant nodes or</a>
+<a name="2103"><span class="lineNum"> 2103 </span> : : * properties in the base DT</a>
+<a name="2104"><span class="lineNum"> 2104 </span> : : * -FDT_ERR_BADPHANDLE,</a>
+<a name="2105"><span class="lineNum"> 2105 </span> : : * -FDT_ERR_BADOVERLAY,</a>
+<a name="2106"><span class="lineNum"> 2106 </span> : : * -FDT_ERR_NOPHANDLES,</a>
+<a name="2107"><span class="lineNum"> 2107 </span> : : * -FDT_ERR_INTERNAL,</a>
+<a name="2108"><span class="lineNum"> 2108 </span> : : * -FDT_ERR_BADLAYOUT,</a>
+<a name="2109"><span class="lineNum"> 2109 </span> : : * -FDT_ERR_BADMAGIC,</a>
+<a name="2110"><span class="lineNum"> 2110 </span> : : * -FDT_ERR_BADOFFSET,</a>
+<a name="2111"><span class="lineNum"> 2111 </span> : : * -FDT_ERR_BADPATH,</a>
+<a name="2112"><span class="lineNum"> 2112 </span> : : * -FDT_ERR_BADVERSION,</a>
+<a name="2113"><span class="lineNum"> 2113 </span> : : * -FDT_ERR_BADSTRUCTURE,</a>
+<a name="2114"><span class="lineNum"> 2114 </span> : : * -FDT_ERR_BADSTATE,</a>
+<a name="2115"><span class="lineNum"> 2115 </span> : : * -FDT_ERR_TRUNCATED, standard meanings</a>
+<a name="2116"><span class="lineNum"> 2116 </span> : : */</a>
+<a name="2117"><span class="lineNum"> 2117 </span> : : int fdt_overlay_apply(void *fdt, void *fdto);</a>
+<a name="2118"><span class="lineNum"> 2118 </span> : : </a>
+<a name="2119"><span class="lineNum"> 2119 </span> : : /**</a>
+<a name="2120"><span class="lineNum"> 2120 </span> : : * fdt_overlay_target_offset - retrieves the offset of a fragment's target</a>
+<a name="2121"><span class="lineNum"> 2121 </span> : : * @fdt: Base device tree blob</a>
+<a name="2122"><span class="lineNum"> 2122 </span> : : * @fdto: Device tree overlay blob</a>
+<a name="2123"><span class="lineNum"> 2123 </span> : : * @fragment_offset: node offset of the fragment in the overlay</a>
+<a name="2124"><span class="lineNum"> 2124 </span> : : * @pathp: pointer which receives the path of the target (or NULL)</a>
+<a name="2125"><span class="lineNum"> 2125 </span> : : *</a>
+<a name="2126"><span class="lineNum"> 2126 </span> : : * fdt_overlay_target_offset() retrieves the target offset in the base</a>
+<a name="2127"><span class="lineNum"> 2127 </span> : : * device tree of a fragment, no matter how the actual targeting is</a>
+<a name="2128"><span class="lineNum"> 2128 </span> : : * done (through a phandle or a path)</a>
+<a name="2129"><span class="lineNum"> 2129 </span> : : *</a>
+<a name="2130"><span class="lineNum"> 2130 </span> : : * returns:</a>
+<a name="2131"><span class="lineNum"> 2131 </span> : : * the targeted node offset in the base device tree</a>
+<a name="2132"><span class="lineNum"> 2132 </span> : : * Negative error code on error</a>
+<a name="2133"><span class="lineNum"> 2133 </span> : : */</a>
+<a name="2134"><span class="lineNum"> 2134 </span> : : int fdt_overlay_target_offset(const void *fdt, const void *fdto,</a>
+<a name="2135"><span class="lineNum"> 2135 </span> : : int fragment_offset, char const **pathp);</a>
+<a name="2136"><span class="lineNum"> 2136 </span> : : </a>
+<a name="2137"><span class="lineNum"> 2137 </span> : : /**********************************************************************/</a>
+<a name="2138"><span class="lineNum"> 2138 </span> : : /* Debugging / informational functions */</a>
+<a name="2139"><span class="lineNum"> 2139 </span> : : /**********************************************************************/</a>
+<a name="2140"><span class="lineNum"> 2140 </span> : : </a>
+<a name="2141"><span class="lineNum"> 2141 </span> : : const char *fdt_strerror(int errval);</a>
+<a name="2142"><span class="lineNum"> 2142 </span> : : </a>
+<a name="2143"><span class="lineNum"> 2143 </span> : : #ifdef __cplusplus</a>
+<a name="2144"><span class="lineNum"> 2144 </span> : : }</a>
+<a name="2145"><span class="lineNum"> 2145 </span> : : #endif</a>
+<a name="2146"><span class="lineNum"> 2146 </span> : : </a>
+<a name="2147"><span class="lineNum"> 2147 </span> : : #endif /* LIBFDT_H */</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/libfdt/libfdt_env.h.func-sort-c.html b/coverage-report/libfdt/libfdt_env.h.func-sort-c.html
index 3c18cfa..ad28dcf 100644
--- a/coverage-report/libfdt/libfdt_env.h.func-sort-c.html
+++ b/coverage-report/libfdt/libfdt_env.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@@ -69,20 +69,20 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt_env.h.gcov.html#99">fdt64_to_cpu</a></td>
+ <td class="coverFn"><a href="libfdt_env.h.gcov.html#54">fdt64_to_cpu</a></td>
<td class="coverFnHi">3</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt_env.h.gcov.html#103">cpu_to_fdt64</a></td>
- <td class="coverFnHi">128</td>
+ <td class="coverFn"><a href="libfdt_env.h.gcov.html#58">cpu_to_fdt64</a></td>
+ <td class="coverFnHi">116</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt_env.h.gcov.html#90">fdt32_to_cpu</a></td>
- <td class="coverFnHi">9271</td>
+ <td class="coverFn"><a href="libfdt_env.h.gcov.html#45">fdt32_to_cpu</a></td>
+ <td class="coverFnHi">9349</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt_env.h.gcov.html#94">cpu_to_fdt32</a></td>
- <td class="coverFnHi">19705</td>
+ <td class="coverFn"><a href="libfdt_env.h.gcov.html#49">cpu_to_fdt32</a></td>
+ <td class="coverFnHi">19861</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libfdt/libfdt_env.h.func.html b/coverage-report/libfdt/libfdt_env.h.func.html
index 6818298..41b80e1 100644
--- a/coverage-report/libfdt/libfdt_env.h.func.html
+++ b/coverage-report/libfdt/libfdt_env.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@@ -69,19 +69,19 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="libfdt_env.h.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt_env.h.gcov.html#94">cpu_to_fdt32</a></td>
- <td class="coverFnHi">19705</td>
+ <td class="coverFn"><a href="libfdt_env.h.gcov.html#49">cpu_to_fdt32</a></td>
+ <td class="coverFnHi">19861</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt_env.h.gcov.html#103">cpu_to_fdt64</a></td>
- <td class="coverFnHi">128</td>
+ <td class="coverFn"><a href="libfdt_env.h.gcov.html#58">cpu_to_fdt64</a></td>
+ <td class="coverFnHi">116</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt_env.h.gcov.html#90">fdt32_to_cpu</a></td>
- <td class="coverFnHi">9271</td>
+ <td class="coverFn"><a href="libfdt_env.h.gcov.html#45">fdt32_to_cpu</a></td>
+ <td class="coverFnHi">9349</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt_env.h.gcov.html#99">fdt64_to_cpu</a></td>
+ <td class="coverFn"><a href="libfdt_env.h.gcov.html#54">fdt64_to_cpu</a></td>
<td class="coverFnHi">3</td>
</tr>
</table>
diff --git a/coverage-report/libfdt/libfdt_env.h.gcov.html b/coverage-report/libfdt/libfdt_env.h.gcov.html
index 0cb5f7b..4647b8c 100644
--- a/coverage-report/libfdt/libfdt_env.h.gcov.html
+++ b/coverage-report/libfdt/libfdt_env.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@@ -69,147 +69,102 @@
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
-<a name="1"><span class="lineNum"> 1 </span> : : #ifndef LIBFDT_ENV_H</a>
-<a name="2"><span class="lineNum"> 2 </span> : : #define LIBFDT_ENV_H</a>
-<a name="3"><span class="lineNum"> 3 </span> : : /*</a>
-<a name="4"><span class="lineNum"> 4 </span> : : * libfdt - Flat Device Tree manipulation</a>
-<a name="5"><span class="lineNum"> 5 </span> : : * Copyright (C) 2006 David Gibson, IBM Corporation.</a>
-<a name="6"><span class="lineNum"> 6 </span> : : * Copyright 2012 Kim Phillips, Freescale Semiconductor.</a>
-<a name="7"><span class="lineNum"> 7 </span> : : *</a>
-<a name="8"><span class="lineNum"> 8 </span> : : * libfdt is dual licensed: you can use it either under the terms of</a>
-<a name="9"><span class="lineNum"> 9 </span> : : * the GPL, or the BSD license, at your option.</a>
-<a name="10"><span class="lineNum"> 10 </span> : : *</a>
-<a name="11"><span class="lineNum"> 11 </span> : : * a) This library is free software; you can redistribute it and/or</a>
-<a name="12"><span class="lineNum"> 12 </span> : : * modify it under the terms of the GNU General Public License as</a>
-<a name="13"><span class="lineNum"> 13 </span> : : * published by the Free Software Foundation; either version 2 of the</a>
-<a name="14"><span class="lineNum"> 14 </span> : : * License, or (at your option) any later version.</a>
-<a name="15"><span class="lineNum"> 15 </span> : : *</a>
-<a name="16"><span class="lineNum"> 16 </span> : : * This library is distributed in the hope that it will be useful,</a>
-<a name="17"><span class="lineNum"> 17 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of</a>
-<a name="18"><span class="lineNum"> 18 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</a>
-<a name="19"><span class="lineNum"> 19 </span> : : * GNU General Public License for more details.</a>
-<a name="20"><span class="lineNum"> 20 </span> : : *</a>
-<a name="21"><span class="lineNum"> 21 </span> : : * You should have received a copy of the GNU General Public</a>
-<a name="22"><span class="lineNum"> 22 </span> : : * License along with this library; if not, write to the Free</a>
-<a name="23"><span class="lineNum"> 23 </span> : : * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,</a>
-<a name="24"><span class="lineNum"> 24 </span> : : * MA 02110-1301 USA</a>
-<a name="25"><span class="lineNum"> 25 </span> : : *</a>
-<a name="26"><span class="lineNum"> 26 </span> : : * Alternatively,</a>
-<a name="27"><span class="lineNum"> 27 </span> : : *</a>
-<a name="28"><span class="lineNum"> 28 </span> : : * b) Redistribution and use in source and binary forms, with or</a>
-<a name="29"><span class="lineNum"> 29 </span> : : * without modification, are permitted provided that the following</a>
-<a name="30"><span class="lineNum"> 30 </span> : : * conditions are met:</a>
-<a name="31"><span class="lineNum"> 31 </span> : : *</a>
-<a name="32"><span class="lineNum"> 32 </span> : : * 1. Redistributions of source code must retain the above</a>
-<a name="33"><span class="lineNum"> 33 </span> : : * copyright notice, this list of conditions and the following</a>
-<a name="34"><span class="lineNum"> 34 </span> : : * disclaimer.</a>
-<a name="35"><span class="lineNum"> 35 </span> : : * 2. Redistributions in binary form must reproduce the above</a>
-<a name="36"><span class="lineNum"> 36 </span> : : * copyright notice, this list of conditions and the following</a>
-<a name="37"><span class="lineNum"> 37 </span> : : * disclaimer in the documentation and/or other materials</a>
-<a name="38"><span class="lineNum"> 38 </span> : : * provided with the distribution.</a>
-<a name="39"><span class="lineNum"> 39 </span> : : *</a>
-<a name="40"><span class="lineNum"> 40 </span> : : * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND</a>
-<a name="41"><span class="lineNum"> 41 </span> : : * CONTRIBUTORS &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES,</a>
-<a name="42"><span class="lineNum"> 42 </span> : : * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</a>
-<a name="43"><span class="lineNum"> 43 </span> : : * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE</a>
-<a name="44"><span class="lineNum"> 44 </span> : : * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR</a>
-<a name="45"><span class="lineNum"> 45 </span> : : * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</a>
-<a name="46"><span class="lineNum"> 46 </span> : : * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT</a>
-<a name="47"><span class="lineNum"> 47 </span> : : * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;</a>
-<a name="48"><span class="lineNum"> 48 </span> : : * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</a>
-<a name="49"><span class="lineNum"> 49 </span> : : * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</a>
-<a name="50"><span class="lineNum"> 50 </span> : : * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR</a>
-<a name="51"><span class="lineNum"> 51 </span> : : * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,</a>
-<a name="52"><span class="lineNum"> 52 </span> : : * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</a>
-<a name="53"><span class="lineNum"> 53 </span> : : */</a>
-<a name="54"><span class="lineNum"> 54 </span> : : </a>
-<a name="55"><span class="lineNum"> 55 </span> : : #include &lt;stdbool.h&gt;</a>
-<a name="56"><span class="lineNum"> 56 </span> : : #include &lt;stddef.h&gt;</a>
-<a name="57"><span class="lineNum"> 57 </span> : : #include &lt;stdint.h&gt;</a>
-<a name="58"><span class="lineNum"> 58 </span> : : #include &lt;stdlib.h&gt;</a>
-<a name="59"><span class="lineNum"> 59 </span> : : #include &lt;string.h&gt;</a>
-<a name="60"><span class="lineNum"> 60 </span> : : #include &lt;limits.h&gt;</a>
-<a name="61"><span class="lineNum"> 61 </span> : : </a>
-<a name="62"><span class="lineNum"> 62 </span> : : #ifdef __CHECKER__</a>
-<a name="63"><span class="lineNum"> 63 </span> : : #define FDT_FORCE __attribute__((force))</a>
-<a name="64"><span class="lineNum"> 64 </span> : : #define FDT_BITWISE __attribute__((bitwise))</a>
-<a name="65"><span class="lineNum"> 65 </span> : : #else</a>
-<a name="66"><span class="lineNum"> 66 </span> : : #define FDT_FORCE</a>
-<a name="67"><span class="lineNum"> 67 </span> : : #define FDT_BITWISE</a>
-<a name="68"><span class="lineNum"> 68 </span> : : #endif</a>
-<a name="69"><span class="lineNum"> 69 </span> : : </a>
-<a name="70"><span class="lineNum"> 70 </span> : : typedef uint16_t FDT_BITWISE fdt16_t;</a>
-<a name="71"><span class="lineNum"> 71 </span> : : typedef uint32_t FDT_BITWISE fdt32_t;</a>
-<a name="72"><span class="lineNum"> 72 </span> : : typedef uint64_t FDT_BITWISE fdt64_t;</a>
-<a name="73"><span class="lineNum"> 73 </span> : : </a>
-<a name="74"><span class="lineNum"> 74 </span> : : #define EXTRACT_BYTE(x, n) ((unsigned long long)((uint8_t *)&amp;x)[n])</a>
-<a name="75"><span class="lineNum"> 75 </span> : : #define CPU_TO_FDT16(x) ((EXTRACT_BYTE(x, 0) &lt;&lt; 8) | EXTRACT_BYTE(x, 1))</a>
-<a name="76"><span class="lineNum"> 76 </span> : : #define CPU_TO_FDT32(x) ((EXTRACT_BYTE(x, 0) &lt;&lt; 24) | (EXTRACT_BYTE(x, 1) &lt;&lt; 16) | \</a>
-<a name="77"><span class="lineNum"> 77 </span> : : (EXTRACT_BYTE(x, 2) &lt;&lt; 8) | EXTRACT_BYTE(x, 3))</a>
-<a name="78"><span class="lineNum"> 78 </span> : : #define CPU_TO_FDT64(x) ((EXTRACT_BYTE(x, 0) &lt;&lt; 56) | (EXTRACT_BYTE(x, 1) &lt;&lt; 48) | \</a>
-<a name="79"><span class="lineNum"> 79 </span> : : (EXTRACT_BYTE(x, 2) &lt;&lt; 40) | (EXTRACT_BYTE(x, 3) &lt;&lt; 32) | \</a>
-<a name="80"><span class="lineNum"> 80 </span> : : (EXTRACT_BYTE(x, 4) &lt;&lt; 24) | (EXTRACT_BYTE(x, 5) &lt;&lt; 16) | \</a>
-<a name="81"><span class="lineNum"> 81 </span> : : (EXTRACT_BYTE(x, 6) &lt;&lt; 8) | EXTRACT_BYTE(x, 7))</a>
-<a name="82"><span class="lineNum"> 82 </span> : : </a>
-<a name="83"><span class="lineNum"> 83 </span> : : static inline uint16_t fdt16_to_cpu(fdt16_t x)</a>
-<a name="84"><span class="lineNum"> 84 </span> : : {</a>
-<a name="85"><span class="lineNum"> 85 </span> : : return (FDT_FORCE uint16_t)CPU_TO_FDT16(x);</a>
-<a name="86"><span class="lineNum"> 86 </span> : : }</a>
-<a name="87"><span class="lineNum"> 87 </span> : : static inline fdt16_t cpu_to_fdt16(uint16_t x)</a>
-<a name="88"><span class="lineNum"> 88 </span> : : {</a>
-<a name="89"><span class="lineNum"> 89 </span> : : return (FDT_FORCE fdt16_t)CPU_TO_FDT16(x);</a>
-<a name="90"><span class="lineNum"> 90 </span> : : }</a>
-<a name="91"><span class="lineNum"> 91 </span> : : </a>
-<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 9271 : static inline uint32_t fdt32_to_cpu(fdt32_t x)</span></a>
-<a name="93"><span class="lineNum"> 93 </span> : : {</a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 9271 : return (FDT_FORCE uint32_t)CPU_TO_FDT32(x);</span></a>
-<a name="95"><span class="lineNum"> 95 </span> : : }</a>
-<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 19705 : static inline fdt32_t cpu_to_fdt32(uint32_t x)</span></a>
-<a name="97"><span class="lineNum"> 97 </span> : : {</a>
-<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 19705 : return (FDT_FORCE fdt32_t)CPU_TO_FDT32(x);</span></a>
-<a name="99"><span class="lineNum"> 99 </span> : : }</a>
-<a name="100"><span class="lineNum"> 100 </span> : : </a>
-<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 3 : static inline uint64_t fdt64_to_cpu(fdt64_t x)</span></a>
-<a name="102"><span class="lineNum"> 102 </span> : : {</a>
-<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 3 : return (FDT_FORCE uint64_t)CPU_TO_FDT64(x);</span></a>
-<a name="104"><span class="lineNum"> 104 </span> : : }</a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 128 : static inline fdt64_t cpu_to_fdt64(uint64_t x)</span></a>
-<a name="106"><span class="lineNum"> 106 </span> : : {</a>
-<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 128 : return (FDT_FORCE fdt64_t)CPU_TO_FDT64(x);</span></a>
-<a name="108"><span class="lineNum"> 108 </span> : : }</a>
-<a name="109"><span class="lineNum"> 109 </span> : : #undef CPU_TO_FDT64</a>
-<a name="110"><span class="lineNum"> 110 </span> : : #undef CPU_TO_FDT32</a>
-<a name="111"><span class="lineNum"> 111 </span> : : #undef CPU_TO_FDT16</a>
-<a name="112"><span class="lineNum"> 112 </span> : : #undef EXTRACT_BYTE</a>
-<a name="113"><span class="lineNum"> 113 </span> : : </a>
-<a name="114"><span class="lineNum"> 114 </span> : : #ifdef __APPLE__</a>
-<a name="115"><span class="lineNum"> 115 </span> : : #include &lt;AvailabilityMacros.h&gt;</a>
-<a name="116"><span class="lineNum"> 116 </span> : : </a>
-<a name="117"><span class="lineNum"> 117 </span> : : /* strnlen() is not available on Mac OS &lt; 10.7 */</a>
-<a name="118"><span class="lineNum"> 118 </span> : : # if !defined(MAC_OS_X_VERSION_10_7) || (MAC_OS_X_VERSION_MAX_ALLOWED &lt; \</a>
-<a name="119"><span class="lineNum"> 119 </span> : : MAC_OS_X_VERSION_10_7)</a>
-<a name="120"><span class="lineNum"> 120 </span> : : </a>
-<a name="121"><span class="lineNum"> 121 </span> : : #define strnlen fdt_strnlen</a>
-<a name="122"><span class="lineNum"> 122 </span> : : </a>
-<a name="123"><span class="lineNum"> 123 </span> : : /*</a>
-<a name="124"><span class="lineNum"> 124 </span> : : * fdt_strnlen: returns the length of a string or max_count - which ever is</a>
-<a name="125"><span class="lineNum"> 125 </span> : : * smallest.</a>
-<a name="126"><span class="lineNum"> 126 </span> : : * Input 1 string: the string whose size is to be determined</a>
-<a name="127"><span class="lineNum"> 127 </span> : : * Input 2 max_count: the maximum value returned by this function</a>
-<a name="128"><span class="lineNum"> 128 </span> : : * Output: length of the string or max_count (the smallest of the two)</a>
-<a name="129"><span class="lineNum"> 129 </span> : : */</a>
-<a name="130"><span class="lineNum"> 130 </span> : : static inline size_t fdt_strnlen(const char *string, size_t max_count)</a>
-<a name="131"><span class="lineNum"> 131 </span> : : {</a>
-<a name="132"><span class="lineNum"> 132 </span> : : const char *p = memchr(string, 0, max_count);</a>
-<a name="133"><span class="lineNum"> 133 </span> : : return p ? p - string : max_count;</a>
-<a name="134"><span class="lineNum"> 134 </span> : : }</a>
-<a name="135"><span class="lineNum"> 135 </span> : : </a>
-<a name="136"><span class="lineNum"> 136 </span> : : #endif /* !defined(MAC_OS_X_VERSION_10_7) || (MAC_OS_X_VERSION_MAX_ALLOWED &lt;</a>
-<a name="137"><span class="lineNum"> 137 </span> : : MAC_OS_X_VERSION_10_7) */</a>
-<a name="138"><span class="lineNum"> 138 </span> : : </a>
-<a name="139"><span class="lineNum"> 139 </span> : : #endif /* __APPLE__ */</a>
-<a name="140"><span class="lineNum"> 140 </span> : : </a>
-<a name="141"><span class="lineNum"> 141 </span> : : #endif /* LIBFDT_ENV_H */</a>
+<a name="1"><span class="lineNum"> 1 </span> : : /* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */</a>
+<a name="2"><span class="lineNum"> 2 </span> : : #ifndef LIBFDT_ENV_H</a>
+<a name="3"><span class="lineNum"> 3 </span> : : #define LIBFDT_ENV_H</a>
+<a name="4"><span class="lineNum"> 4 </span> : : /*</a>
+<a name="5"><span class="lineNum"> 5 </span> : : * libfdt - Flat Device Tree manipulation</a>
+<a name="6"><span class="lineNum"> 6 </span> : : * Copyright (C) 2006 David Gibson, IBM Corporation.</a>
+<a name="7"><span class="lineNum"> 7 </span> : : * Copyright 2012 Kim Phillips, Freescale Semiconductor.</a>
+<a name="8"><span class="lineNum"> 8 </span> : : */</a>
+<a name="9"><span class="lineNum"> 9 </span> : : </a>
+<a name="10"><span class="lineNum"> 10 </span> : : #include &lt;stdbool.h&gt;</a>
+<a name="11"><span class="lineNum"> 11 </span> : : #include &lt;stddef.h&gt;</a>
+<a name="12"><span class="lineNum"> 12 </span> : : #include &lt;stdint.h&gt;</a>
+<a name="13"><span class="lineNum"> 13 </span> : : #include &lt;stdlib.h&gt;</a>
+<a name="14"><span class="lineNum"> 14 </span> : : #include &lt;string.h&gt;</a>
+<a name="15"><span class="lineNum"> 15 </span> : : #include &lt;limits.h&gt;</a>
+<a name="16"><span class="lineNum"> 16 </span> : : </a>
+<a name="17"><span class="lineNum"> 17 </span> : : #ifdef __CHECKER__</a>
+<a name="18"><span class="lineNum"> 18 </span> : : #define FDT_FORCE __attribute__((force))</a>
+<a name="19"><span class="lineNum"> 19 </span> : : #define FDT_BITWISE __attribute__((bitwise))</a>
+<a name="20"><span class="lineNum"> 20 </span> : : #else</a>
+<a name="21"><span class="lineNum"> 21 </span> : : #define FDT_FORCE</a>
+<a name="22"><span class="lineNum"> 22 </span> : : #define FDT_BITWISE</a>
+<a name="23"><span class="lineNum"> 23 </span> : : #endif</a>
+<a name="24"><span class="lineNum"> 24 </span> : : </a>
+<a name="25"><span class="lineNum"> 25 </span> : : typedef uint16_t FDT_BITWISE fdt16_t;</a>
+<a name="26"><span class="lineNum"> 26 </span> : : typedef uint32_t FDT_BITWISE fdt32_t;</a>
+<a name="27"><span class="lineNum"> 27 </span> : : typedef uint64_t FDT_BITWISE fdt64_t;</a>
+<a name="28"><span class="lineNum"> 28 </span> : : </a>
+<a name="29"><span class="lineNum"> 29 </span> : : #define EXTRACT_BYTE(x, n) ((unsigned long long)((uint8_t *)&amp;x)[n])</a>
+<a name="30"><span class="lineNum"> 30 </span> : : #define CPU_TO_FDT16(x) ((EXTRACT_BYTE(x, 0) &lt;&lt; 8) | EXTRACT_BYTE(x, 1))</a>
+<a name="31"><span class="lineNum"> 31 </span> : : #define CPU_TO_FDT32(x) ((EXTRACT_BYTE(x, 0) &lt;&lt; 24) | (EXTRACT_BYTE(x, 1) &lt;&lt; 16) | \</a>
+<a name="32"><span class="lineNum"> 32 </span> : : (EXTRACT_BYTE(x, 2) &lt;&lt; 8) | EXTRACT_BYTE(x, 3))</a>
+<a name="33"><span class="lineNum"> 33 </span> : : #define CPU_TO_FDT64(x) ((EXTRACT_BYTE(x, 0) &lt;&lt; 56) | (EXTRACT_BYTE(x, 1) &lt;&lt; 48) | \</a>
+<a name="34"><span class="lineNum"> 34 </span> : : (EXTRACT_BYTE(x, 2) &lt;&lt; 40) | (EXTRACT_BYTE(x, 3) &lt;&lt; 32) | \</a>
+<a name="35"><span class="lineNum"> 35 </span> : : (EXTRACT_BYTE(x, 4) &lt;&lt; 24) | (EXTRACT_BYTE(x, 5) &lt;&lt; 16) | \</a>
+<a name="36"><span class="lineNum"> 36 </span> : : (EXTRACT_BYTE(x, 6) &lt;&lt; 8) | EXTRACT_BYTE(x, 7))</a>
+<a name="37"><span class="lineNum"> 37 </span> : : </a>
+<a name="38"><span class="lineNum"> 38 </span> : : static inline uint16_t fdt16_to_cpu(fdt16_t x)</a>
+<a name="39"><span class="lineNum"> 39 </span> : : {</a>
+<a name="40"><span class="lineNum"> 40 </span> : : return (FDT_FORCE uint16_t)CPU_TO_FDT16(x);</a>
+<a name="41"><span class="lineNum"> 41 </span> : : }</a>
+<a name="42"><span class="lineNum"> 42 </span> : : static inline fdt16_t cpu_to_fdt16(uint16_t x)</a>
+<a name="43"><span class="lineNum"> 43 </span> : : {</a>
+<a name="44"><span class="lineNum"> 44 </span> : : return (FDT_FORCE fdt16_t)CPU_TO_FDT16(x);</a>
+<a name="45"><span class="lineNum"> 45 </span> : : }</a>
+<a name="46"><span class="lineNum"> 46 </span> : : </a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 9349 : static inline uint32_t fdt32_to_cpu(fdt32_t x)</span></a>
+<a name="48"><span class="lineNum"> 48 </span> : : {</a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 9349 : return (FDT_FORCE uint32_t)CPU_TO_FDT32(x);</span></a>
+<a name="50"><span class="lineNum"> 50 </span> : : }</a>
+<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 19861 : static inline fdt32_t cpu_to_fdt32(uint32_t x)</span></a>
+<a name="52"><span class="lineNum"> 52 </span> : : {</a>
+<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 19861 : return (FDT_FORCE fdt32_t)CPU_TO_FDT32(x);</span></a>
+<a name="54"><span class="lineNum"> 54 </span> : : }</a>
+<a name="55"><span class="lineNum"> 55 </span> : : </a>
+<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 3 : static inline uint64_t fdt64_to_cpu(fdt64_t x)</span></a>
+<a name="57"><span class="lineNum"> 57 </span> : : {</a>
+<a name="58"><span class="lineNum"> 58 </span> :<span class="lineCov"> 3 : return (FDT_FORCE uint64_t)CPU_TO_FDT64(x);</span></a>
+<a name="59"><span class="lineNum"> 59 </span> : : }</a>
+<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 116 : static inline fdt64_t cpu_to_fdt64(uint64_t x)</span></a>
+<a name="61"><span class="lineNum"> 61 </span> : : {</a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 116 : return (FDT_FORCE fdt64_t)CPU_TO_FDT64(x);</span></a>
+<a name="63"><span class="lineNum"> 63 </span> : : }</a>
+<a name="64"><span class="lineNum"> 64 </span> : : #undef CPU_TO_FDT64</a>
+<a name="65"><span class="lineNum"> 65 </span> : : #undef CPU_TO_FDT32</a>
+<a name="66"><span class="lineNum"> 66 </span> : : #undef CPU_TO_FDT16</a>
+<a name="67"><span class="lineNum"> 67 </span> : : #undef EXTRACT_BYTE</a>
+<a name="68"><span class="lineNum"> 68 </span> : : </a>
+<a name="69"><span class="lineNum"> 69 </span> : : #ifdef __APPLE__</a>
+<a name="70"><span class="lineNum"> 70 </span> : : #include &lt;AvailabilityMacros.h&gt;</a>
+<a name="71"><span class="lineNum"> 71 </span> : : </a>
+<a name="72"><span class="lineNum"> 72 </span> : : /* strnlen() is not available on Mac OS &lt; 10.7 */</a>
+<a name="73"><span class="lineNum"> 73 </span> : : # if !defined(MAC_OS_X_VERSION_10_7) || (MAC_OS_X_VERSION_MAX_ALLOWED &lt; \</a>
+<a name="74"><span class="lineNum"> 74 </span> : : MAC_OS_X_VERSION_10_7)</a>
+<a name="75"><span class="lineNum"> 75 </span> : : </a>
+<a name="76"><span class="lineNum"> 76 </span> : : #define strnlen fdt_strnlen</a>
+<a name="77"><span class="lineNum"> 77 </span> : : </a>
+<a name="78"><span class="lineNum"> 78 </span> : : /*</a>
+<a name="79"><span class="lineNum"> 79 </span> : : * fdt_strnlen: returns the length of a string or max_count - which ever is</a>
+<a name="80"><span class="lineNum"> 80 </span> : : * smallest.</a>
+<a name="81"><span class="lineNum"> 81 </span> : : * Input 1 string: the string whose size is to be determined</a>
+<a name="82"><span class="lineNum"> 82 </span> : : * Input 2 max_count: the maximum value returned by this function</a>
+<a name="83"><span class="lineNum"> 83 </span> : : * Output: length of the string or max_count (the smallest of the two)</a>
+<a name="84"><span class="lineNum"> 84 </span> : : */</a>
+<a name="85"><span class="lineNum"> 85 </span> : : static inline size_t fdt_strnlen(const char *string, size_t max_count)</a>
+<a name="86"><span class="lineNum"> 86 </span> : : {</a>
+<a name="87"><span class="lineNum"> 87 </span> : : const char *p = memchr(string, 0, max_count);</a>
+<a name="88"><span class="lineNum"> 88 </span> : : return p ? p - string : max_count;</a>
+<a name="89"><span class="lineNum"> 89 </span> : : }</a>
+<a name="90"><span class="lineNum"> 90 </span> : : </a>
+<a name="91"><span class="lineNum"> 91 </span> : : #endif /* !defined(MAC_OS_X_VERSION_10_7) || (MAC_OS_X_VERSION_MAX_ALLOWED &lt;</a>
+<a name="92"><span class="lineNum"> 92 </span> : : MAC_OS_X_VERSION_10_7) */</a>
+<a name="93"><span class="lineNum"> 93 </span> : : </a>
+<a name="94"><span class="lineNum"> 94 </span> : : #endif /* __APPLE__ */</a>
+<a name="95"><span class="lineNum"> 95 </span> : : </a>
+<a name="96"><span class="lineNum"> 96 </span> : : #endif /* LIBFDT_ENV_H */</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/libfdt/libfdt_internal.h.func-sort-c.html b/coverage-report/libfdt/libfdt_internal.h.func-sort-c.html
index 520e82f..458dfba 100644
--- a/coverage-report/libfdt/libfdt_internal.h.func-sort-c.html
+++ b/coverage-report/libfdt/libfdt_internal.h.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntryLo">50.0 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">14</td>
+ <td class="headerCovTableEntryLo">42.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">3</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntryLo">50.0 %</td>
</tr>
<tr>
<td></td>
@@ -69,16 +69,28 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt_internal.h.gcov.html#79">fdt_mem_rsv_</a></td>
+ <td class="coverFn"><a href="libfdt_internal.h.gcov.html#56">fdt32_ld_</a></td>
+ <td class="coverFnLo">0</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="libfdt_internal.h.gcov.html#61">fdt64_ld_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt_internal.h.gcov.html#74">fdt_offset_ptr_w_</a></td>
- <td class="coverFnHi">6044</td>
+ <td class="coverFn"><a href="libfdt_internal.h.gcov.html#34">fdt_mem_rsv_</a></td>
+ <td class="coverFnLo">0</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="libfdt_internal.h.gcov.html#29">fdt_offset_ptr_w_</a></td>
+ <td class="coverFnHi">6096</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="libfdt_internal.h.gcov.html#24">fdt_offset_ptr_</a></td>
+ <td class="coverFnHi">20456</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt_internal.h.gcov.html#69">fdt_offset_ptr_</a></td>
- <td class="coverFnHi">20326</td>
+ <td class="coverFn"><a href="libfdt_internal.h.gcov.html#182">can_assume_</a></td>
+ <td class="coverFnHi">44772</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libfdt/libfdt_internal.h.func.html b/coverage-report/libfdt/libfdt_internal.h.func.html
index 405554a..79d9d2f 100644
--- a/coverage-report/libfdt/libfdt_internal.h.func.html
+++ b/coverage-report/libfdt/libfdt_internal.h.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntryLo">50.0 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">14</td>
+ <td class="headerCovTableEntryLo">42.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">3</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntryLo">50.0 %</td>
</tr>
<tr>
<td></td>
@@ -69,16 +69,28 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="libfdt_internal.h.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt_internal.h.gcov.html#79">fdt_mem_rsv_</a></td>
+ <td class="coverFn"><a href="libfdt_internal.h.gcov.html#182">can_assume_</a></td>
+ <td class="coverFnHi">44772</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="libfdt_internal.h.gcov.html#56">fdt32_ld_</a></td>
+ <td class="coverFnLo">0</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="libfdt_internal.h.gcov.html#61">fdt64_ld_</a></td>
+ <td class="coverFnLo">0</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="libfdt_internal.h.gcov.html#34">fdt_mem_rsv_</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt_internal.h.gcov.html#69">fdt_offset_ptr_</a></td>
- <td class="coverFnHi">20326</td>
+ <td class="coverFn"><a href="libfdt_internal.h.gcov.html#24">fdt_offset_ptr_</a></td>
+ <td class="coverFnHi">20456</td>
</tr>
<tr>
- <td class="coverFn"><a href="libfdt_internal.h.gcov.html#74">fdt_offset_ptr_w_</a></td>
- <td class="coverFnHi">6044</td>
+ <td class="coverFn"><a href="libfdt_internal.h.gcov.html#29">fdt_offset_ptr_w_</a></td>
+ <td class="coverFnHi">6096</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libfdt/libfdt_internal.h.gcov.html b/coverage-report/libfdt/libfdt_internal.h.gcov.html
index d08327b..81da8f7 100644
--- a/coverage-report/libfdt/libfdt_internal.h.gcov.html
+++ b/coverage-report/libfdt/libfdt_internal.h.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">8</td>
- <td class="headerCovTableEntryLo">50.0 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">14</td>
+ <td class="headerCovTableEntryLo">42.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">2</td>
<td class="headerCovTableEntry">3</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntryLo">50.0 %</td>
</tr>
<tr>
<td></td>
@@ -69,102 +69,198 @@
<td>
<pre class="sourceHeading"> Branch data Line data Source code</pre>
<pre class="source">
-<a name="1"><span class="lineNum"> 1 </span> : : #ifndef LIBFDT_INTERNAL_H</a>
-<a name="2"><span class="lineNum"> 2 </span> : : #define LIBFDT_INTERNAL_H</a>
-<a name="3"><span class="lineNum"> 3 </span> : : /*</a>
-<a name="4"><span class="lineNum"> 4 </span> : : * libfdt - Flat Device Tree manipulation</a>
-<a name="5"><span class="lineNum"> 5 </span> : : * Copyright (C) 2006 David Gibson, IBM Corporation.</a>
-<a name="6"><span class="lineNum"> 6 </span> : : *</a>
-<a name="7"><span class="lineNum"> 7 </span> : : * libfdt is dual licensed: you can use it either under the terms of</a>
-<a name="8"><span class="lineNum"> 8 </span> : : * the GPL, or the BSD license, at your option.</a>
-<a name="9"><span class="lineNum"> 9 </span> : : *</a>
-<a name="10"><span class="lineNum"> 10 </span> : : * a) This library is free software; you can redistribute it and/or</a>
-<a name="11"><span class="lineNum"> 11 </span> : : * modify it under the terms of the GNU General Public License as</a>
-<a name="12"><span class="lineNum"> 12 </span> : : * published by the Free Software Foundation; either version 2 of the</a>
-<a name="13"><span class="lineNum"> 13 </span> : : * License, or (at your option) any later version.</a>
-<a name="14"><span class="lineNum"> 14 </span> : : *</a>
-<a name="15"><span class="lineNum"> 15 </span> : : * This library is distributed in the hope that it will be useful,</a>
-<a name="16"><span class="lineNum"> 16 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of</a>
-<a name="17"><span class="lineNum"> 17 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</a>
-<a name="18"><span class="lineNum"> 18 </span> : : * GNU General Public License for more details.</a>
-<a name="19"><span class="lineNum"> 19 </span> : : *</a>
-<a name="20"><span class="lineNum"> 20 </span> : : * You should have received a copy of the GNU General Public</a>
-<a name="21"><span class="lineNum"> 21 </span> : : * License along with this library; if not, write to the Free</a>
-<a name="22"><span class="lineNum"> 22 </span> : : * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,</a>
-<a name="23"><span class="lineNum"> 23 </span> : : * MA 02110-1301 USA</a>
-<a name="24"><span class="lineNum"> 24 </span> : : *</a>
-<a name="25"><span class="lineNum"> 25 </span> : : * Alternatively,</a>
-<a name="26"><span class="lineNum"> 26 </span> : : *</a>
-<a name="27"><span class="lineNum"> 27 </span> : : * b) Redistribution and use in source and binary forms, with or</a>
-<a name="28"><span class="lineNum"> 28 </span> : : * without modification, are permitted provided that the following</a>
-<a name="29"><span class="lineNum"> 29 </span> : : * conditions are met:</a>
-<a name="30"><span class="lineNum"> 30 </span> : : *</a>
-<a name="31"><span class="lineNum"> 31 </span> : : * 1. Redistributions of source code must retain the above</a>
-<a name="32"><span class="lineNum"> 32 </span> : : * copyright notice, this list of conditions and the following</a>
-<a name="33"><span class="lineNum"> 33 </span> : : * disclaimer.</a>
-<a name="34"><span class="lineNum"> 34 </span> : : * 2. Redistributions in binary form must reproduce the above</a>
-<a name="35"><span class="lineNum"> 35 </span> : : * copyright notice, this list of conditions and the following</a>
-<a name="36"><span class="lineNum"> 36 </span> : : * disclaimer in the documentation and/or other materials</a>
-<a name="37"><span class="lineNum"> 37 </span> : : * provided with the distribution.</a>
-<a name="38"><span class="lineNum"> 38 </span> : : *</a>
-<a name="39"><span class="lineNum"> 39 </span> : : * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND</a>
-<a name="40"><span class="lineNum"> 40 </span> : : * CONTRIBUTORS &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES,</a>
-<a name="41"><span class="lineNum"> 41 </span> : : * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</a>
-<a name="42"><span class="lineNum"> 42 </span> : : * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE</a>
-<a name="43"><span class="lineNum"> 43 </span> : : * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR</a>
-<a name="44"><span class="lineNum"> 44 </span> : : * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</a>
-<a name="45"><span class="lineNum"> 45 </span> : : * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT</a>
-<a name="46"><span class="lineNum"> 46 </span> : : * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;</a>
-<a name="47"><span class="lineNum"> 47 </span> : : * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</a>
-<a name="48"><span class="lineNum"> 48 </span> : : * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</a>
-<a name="49"><span class="lineNum"> 49 </span> : : * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR</a>
-<a name="50"><span class="lineNum"> 50 </span> : : * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,</a>
-<a name="51"><span class="lineNum"> 51 </span> : : * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</a>
-<a name="52"><span class="lineNum"> 52 </span> : : */</a>
-<a name="53"><span class="lineNum"> 53 </span> : : #include &lt;fdt.h&gt;</a>
-<a name="54"><span class="lineNum"> 54 </span> : : </a>
-<a name="55"><span class="lineNum"> 55 </span> : : #define FDT_ALIGN(x, a) (((x) + (a) - 1) &amp; ~((a) - 1))</a>
-<a name="56"><span class="lineNum"> 56 </span> : : #define FDT_TAGALIGN(x) (FDT_ALIGN((x), FDT_TAGSIZE))</a>
-<a name="57"><span class="lineNum"> 57 </span> : : </a>
-<a name="58"><span class="lineNum"> 58 </span> : : int fdt_ro_probe_(const void *fdt);</a>
-<a name="59"><span class="lineNum"> 59 </span> : : #define FDT_RO_PROBE(fdt) \</a>
-<a name="60"><span class="lineNum"> 60 </span> : : { \</a>
-<a name="61"><span class="lineNum"> 61 </span> : : int err_; \</a>
-<a name="62"><span class="lineNum"> 62 </span> : : if ((err_ = fdt_ro_probe_(fdt)) != 0) \</a>
-<a name="63"><span class="lineNum"> 63 </span> : : return err_; \</a>
-<a name="64"><span class="lineNum"> 64 </span> : : }</a>
-<a name="65"><span class="lineNum"> 65 </span> : : </a>
-<a name="66"><span class="lineNum"> 66 </span> : : int fdt_check_node_offset_(const void *fdt, int offset);</a>
-<a name="67"><span class="lineNum"> 67 </span> : : int fdt_check_prop_offset_(const void *fdt, int offset);</a>
-<a name="68"><span class="lineNum"> 68 </span> : : const char *fdt_find_string_(const char *strtab, int tabsize, const char *s);</a>
-<a name="69"><span class="lineNum"> 69 </span> : : int fdt_node_end_offset_(void *fdt, int nodeoffset);</a>
-<a name="70"><span class="lineNum"> 70 </span> : : </a>
-<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 20326 : static inline const void *fdt_offset_ptr_(const void *fdt, int offset)</span></a>
-<a name="72"><span class="lineNum"> 72 </span> : : {</a>
-<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 20326 : return (const char *)fdt + fdt_off_dt_struct(fdt) + offset;</span></a>
-<a name="74"><span class="lineNum"> 74 </span> : : }</a>
-<a name="75"><span class="lineNum"> 75 </span> : : </a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 6044 : static inline void *fdt_offset_ptr_w_(void *fdt, int offset)</span></a>
-<a name="77"><span class="lineNum"> 77 </span> : : {</a>
-<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 6044 : return (void *)(uintptr_t)fdt_offset_ptr_(fdt, offset);</span></a>
-<a name="79"><span class="lineNum"> 79 </span> : : }</a>
-<a name="80"><span class="lineNum"> 80 </span> : : </a>
-<a name="81"><span class="lineNum"> 81 </span> :<span class="lineNoCov"> 0 : static inline const struct fdt_reserve_entry *fdt_mem_rsv_(const void *fdt, int n)</span></a>
-<a name="82"><span class="lineNum"> 82 </span> : : {</a>
-<a name="83"><span class="lineNum"> 83 </span> :<span class="lineNoCov"> 0 : const struct fdt_reserve_entry *rsv_table =</span></a>
-<a name="84"><span class="lineNum"> 84 </span> : : (const struct fdt_reserve_entry *)</a>
-<a name="85"><span class="lineNum"> 85 </span> :<span class="lineNoCov"> 0 : ((const char *)fdt + fdt_off_mem_rsvmap(fdt));</span></a>
-<a name="86"><span class="lineNum"> 86 </span> : : </a>
-<a name="87"><span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : return rsv_table + n;</span></a>
-<a name="88"><span class="lineNum"> 88 </span> : : }</a>
-<a name="89"><span class="lineNum"> 89 </span> : : static inline struct fdt_reserve_entry *fdt_mem_rsv_w_(void *fdt, int n)</a>
-<a name="90"><span class="lineNum"> 90 </span> : : {</a>
-<a name="91"><span class="lineNum"> 91 </span> : : return (void *)(uintptr_t)fdt_mem_rsv_(fdt, n);</a>
-<a name="92"><span class="lineNum"> 92 </span> : : }</a>
-<a name="93"><span class="lineNum"> 93 </span> : : </a>
-<a name="94"><span class="lineNum"> 94 </span> : : #define FDT_SW_MAGIC (~FDT_MAGIC)</a>
-<a name="95"><span class="lineNum"> 95 </span> : : </a>
-<a name="96"><span class="lineNum"> 96 </span> : : #endif /* LIBFDT_INTERNAL_H */</a>
+<a name="1"><span class="lineNum"> 1 </span> : : /* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */</a>
+<a name="2"><span class="lineNum"> 2 </span> : : #ifndef LIBFDT_INTERNAL_H</a>
+<a name="3"><span class="lineNum"> 3 </span> : : #define LIBFDT_INTERNAL_H</a>
+<a name="4"><span class="lineNum"> 4 </span> : : /*</a>
+<a name="5"><span class="lineNum"> 5 </span> : : * libfdt - Flat Device Tree manipulation</a>
+<a name="6"><span class="lineNum"> 6 </span> : : * Copyright (C) 2006 David Gibson, IBM Corporation.</a>
+<a name="7"><span class="lineNum"> 7 </span> : : */</a>
+<a name="8"><span class="lineNum"> 8 </span> : : #include &lt;fdt.h&gt;</a>
+<a name="9"><span class="lineNum"> 9 </span> : : </a>
+<a name="10"><span class="lineNum"> 10 </span> : : #define FDT_ALIGN(x, a) (((x) + (a) - 1) &amp; ~((a) - 1))</a>
+<a name="11"><span class="lineNum"> 11 </span> : : #define FDT_TAGALIGN(x) (FDT_ALIGN((x), FDT_TAGSIZE))</a>
+<a name="12"><span class="lineNum"> 12 </span> : : </a>
+<a name="13"><span class="lineNum"> 13 </span> : : int32_t fdt_ro_probe_(const void *fdt);</a>
+<a name="14"><span class="lineNum"> 14 </span> : : #define FDT_RO_PROBE(fdt) \</a>
+<a name="15"><span class="lineNum"> 15 </span> : : { \</a>
+<a name="16"><span class="lineNum"> 16 </span> : : int32_t totalsize_; \</a>
+<a name="17"><span class="lineNum"> 17 </span> : : if ((totalsize_ = fdt_ro_probe_(fdt)) &lt; 0) \</a>
+<a name="18"><span class="lineNum"> 18 </span> : : return totalsize_; \</a>
+<a name="19"><span class="lineNum"> 19 </span> : : }</a>
+<a name="20"><span class="lineNum"> 20 </span> : : </a>
+<a name="21"><span class="lineNum"> 21 </span> : : int fdt_check_node_offset_(const void *fdt, int offset);</a>
+<a name="22"><span class="lineNum"> 22 </span> : : int fdt_check_prop_offset_(const void *fdt, int offset);</a>
+<a name="23"><span class="lineNum"> 23 </span> : : const char *fdt_find_string_(const char *strtab, int tabsize, const char *s);</a>
+<a name="24"><span class="lineNum"> 24 </span> : : int fdt_node_end_offset_(void *fdt, int nodeoffset);</a>
+<a name="25"><span class="lineNum"> 25 </span> : : </a>
+<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 20456 : static inline const void *fdt_offset_ptr_(const void *fdt, int offset)</span></a>
+<a name="27"><span class="lineNum"> 27 </span> : : {</a>
+<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 20456 : return (const char *)fdt + fdt_off_dt_struct(fdt) + offset;</span></a>
+<a name="29"><span class="lineNum"> 29 </span> : : }</a>
+<a name="30"><span class="lineNum"> 30 </span> : : </a>
+<a name="31"><span class="lineNum"> 31 </span> :<span class="lineCov"> 6096 : static inline void *fdt_offset_ptr_w_(void *fdt, int offset)</span></a>
+<a name="32"><span class="lineNum"> 32 </span> : : {</a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 6096 : return (void *)(uintptr_t)fdt_offset_ptr_(fdt, offset);</span></a>
+<a name="34"><span class="lineNum"> 34 </span> : : }</a>
+<a name="35"><span class="lineNum"> 35 </span> : : </a>
+<a name="36"><span class="lineNum"> 36 </span> :<span class="lineNoCov"> 0 : static inline const struct fdt_reserve_entry *fdt_mem_rsv_(const void *fdt, int n)</span></a>
+<a name="37"><span class="lineNum"> 37 </span> : : {</a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineNoCov"> 0 : const struct fdt_reserve_entry *rsv_table =</span></a>
+<a name="39"><span class="lineNum"> 39 </span> : : (const struct fdt_reserve_entry *)</a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineNoCov"> 0 : ((const char *)fdt + fdt_off_mem_rsvmap(fdt));</span></a>
+<a name="41"><span class="lineNum"> 41 </span> : : </a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineNoCov"> 0 : return rsv_table + n;</span></a>
+<a name="43"><span class="lineNum"> 43 </span> : : }</a>
+<a name="44"><span class="lineNum"> 44 </span> : : static inline struct fdt_reserve_entry *fdt_mem_rsv_w_(void *fdt, int n)</a>
+<a name="45"><span class="lineNum"> 45 </span> : : {</a>
+<a name="46"><span class="lineNum"> 46 </span> : : return (void *)(uintptr_t)fdt_mem_rsv_(fdt, n);</a>
+<a name="47"><span class="lineNum"> 47 </span> : : }</a>
+<a name="48"><span class="lineNum"> 48 </span> : : </a>
+<a name="49"><span class="lineNum"> 49 </span> : : /*</a>
+<a name="50"><span class="lineNum"> 50 </span> : : * Internal helpers to access tructural elements of the device tree</a>
+<a name="51"><span class="lineNum"> 51 </span> : : * blob (rather than for exaple reading integers from within property</a>
+<a name="52"><span class="lineNum"> 52 </span> : : * values). We assume that we are either given a naturally aligned</a>
+<a name="53"><span class="lineNum"> 53 </span> : : * address for the platform or if we are not, we are on a platform</a>
+<a name="54"><span class="lineNum"> 54 </span> : : * where unaligned memory reads will be handled in a graceful manner.</a>
+<a name="55"><span class="lineNum"> 55 </span> : : * If not the external helpers fdtXX_ld() from libfdt.h can be used</a>
+<a name="56"><span class="lineNum"> 56 </span> : : * instead.</a>
+<a name="57"><span class="lineNum"> 57 </span> : : */</a>
+<a name="58"><span class="lineNum"> 58 </span> :<span class="lineNoCov"> 0 : static inline uint32_t fdt32_ld_(const fdt32_t *p)</span></a>
+<a name="59"><span class="lineNum"> 59 </span> : : {</a>
+<a name="60"><span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : return fdt32_to_cpu(*p);</span></a>
+<a name="61"><span class="lineNum"> 61 </span> : : }</a>
+<a name="62"><span class="lineNum"> 62 </span> : : </a>
+<a name="63"><span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : static inline uint64_t fdt64_ld_(const fdt64_t *p)</span></a>
+<a name="64"><span class="lineNum"> 64 </span> : : {</a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : return fdt64_to_cpu(*p);</span></a>
+<a name="66"><span class="lineNum"> 66 </span> : : }</a>
+<a name="67"><span class="lineNum"> 67 </span> : : </a>
+<a name="68"><span class="lineNum"> 68 </span> : : #define FDT_SW_MAGIC (~FDT_MAGIC)</a>
+<a name="69"><span class="lineNum"> 69 </span> : : </a>
+<a name="70"><span class="lineNum"> 70 </span> : : /**********************************************************************/</a>
+<a name="71"><span class="lineNum"> 71 </span> : : /* Checking controls */</a>
+<a name="72"><span class="lineNum"> 72 </span> : : /**********************************************************************/</a>
+<a name="73"><span class="lineNum"> 73 </span> : : </a>
+<a name="74"><span class="lineNum"> 74 </span> : : #ifndef FDT_ASSUME_MASK</a>
+<a name="75"><span class="lineNum"> 75 </span> : : #define FDT_ASSUME_MASK 0</a>
+<a name="76"><span class="lineNum"> 76 </span> : : #endif</a>
+<a name="77"><span class="lineNum"> 77 </span> : : </a>
+<a name="78"><span class="lineNum"> 78 </span> : : /*</a>
+<a name="79"><span class="lineNum"> 79 </span> : : * Defines assumptions which can be enabled. Each of these can be enabled</a>
+<a name="80"><span class="lineNum"> 80 </span> : : * individually. For maximum safety, don't enable any assumptions!</a>
+<a name="81"><span class="lineNum"> 81 </span> : : *</a>
+<a name="82"><span class="lineNum"> 82 </span> : : * For minimal code size and no safety, use ASSUME_PERFECT at your own risk.</a>
+<a name="83"><span class="lineNum"> 83 </span> : : * You should have another method of validating the device tree, such as a</a>
+<a name="84"><span class="lineNum"> 84 </span> : : * signature or hash check before using libfdt.</a>
+<a name="85"><span class="lineNum"> 85 </span> : : *</a>
+<a name="86"><span class="lineNum"> 86 </span> : : * For situations where security is not a concern it may be safe to enable</a>
+<a name="87"><span class="lineNum"> 87 </span> : : * ASSUME_SANE.</a>
+<a name="88"><span class="lineNum"> 88 </span> : : */</a>
+<a name="89"><span class="lineNum"> 89 </span> : : enum {</a>
+<a name="90"><span class="lineNum"> 90 </span> : : /*</a>
+<a name="91"><span class="lineNum"> 91 </span> : : * This does essentially no checks. Only the latest device-tree</a>
+<a name="92"><span class="lineNum"> 92 </span> : : * version is correctly handled. Inconsistencies or errors in the device</a>
+<a name="93"><span class="lineNum"> 93 </span> : : * tree may cause undefined behaviour or crashes. Invalid parameters</a>
+<a name="94"><span class="lineNum"> 94 </span> : : * passed to libfdt may do the same.</a>
+<a name="95"><span class="lineNum"> 95 </span> : : *</a>
+<a name="96"><span class="lineNum"> 96 </span> : : * If an error occurs when modifying the tree it may leave the tree in</a>
+<a name="97"><span class="lineNum"> 97 </span> : : * an intermediate (but valid) state. As an example, adding a property</a>
+<a name="98"><span class="lineNum"> 98 </span> : : * where there is insufficient space may result in the property name</a>
+<a name="99"><span class="lineNum"> 99 </span> : : * being added to the string table even though the property itself is</a>
+<a name="100"><span class="lineNum"> 100 </span> : : * not added to the struct section.</a>
+<a name="101"><span class="lineNum"> 101 </span> : : *</a>
+<a name="102"><span class="lineNum"> 102 </span> : : * Only use this if you have a fully validated device tree with</a>
+<a name="103"><span class="lineNum"> 103 </span> : : * the latest supported version and wish to minimise code size.</a>
+<a name="104"><span class="lineNum"> 104 </span> : : */</a>
+<a name="105"><span class="lineNum"> 105 </span> : : ASSUME_PERFECT = 0xff,</a>
+<a name="106"><span class="lineNum"> 106 </span> : : </a>
+<a name="107"><span class="lineNum"> 107 </span> : : /*</a>
+<a name="108"><span class="lineNum"> 108 </span> : : * This assumes that the device tree is sane. i.e. header metadata</a>
+<a name="109"><span class="lineNum"> 109 </span> : : * and basic hierarchy are correct.</a>
+<a name="110"><span class="lineNum"> 110 </span> : : *</a>
+<a name="111"><span class="lineNum"> 111 </span> : : * With this assumption enabled, normal device trees produced by libfdt</a>
+<a name="112"><span class="lineNum"> 112 </span> : : * and the compiler should be handled safely. Malicious device trees and</a>
+<a name="113"><span class="lineNum"> 113 </span> : : * complete garbage may cause libfdt to behave badly or crash. Truncated</a>
+<a name="114"><span class="lineNum"> 114 </span> : : * device trees (e.g. those only partially loaded) can also cause</a>
+<a name="115"><span class="lineNum"> 115 </span> : : * problems.</a>
+<a name="116"><span class="lineNum"> 116 </span> : : *</a>
+<a name="117"><span class="lineNum"> 117 </span> : : * Note: Only checks that relate exclusively to the device tree itself</a>
+<a name="118"><span class="lineNum"> 118 </span> : : * (not the parameters passed to libfdt) are disabled by this</a>
+<a name="119"><span class="lineNum"> 119 </span> : : * assumption. This includes checking headers, tags and the like.</a>
+<a name="120"><span class="lineNum"> 120 </span> : : */</a>
+<a name="121"><span class="lineNum"> 121 </span> : : ASSUME_VALID_DTB = 1 &lt;&lt; 0,</a>
+<a name="122"><span class="lineNum"> 122 </span> : : </a>
+<a name="123"><span class="lineNum"> 123 </span> : : /*</a>
+<a name="124"><span class="lineNum"> 124 </span> : : * This builds on ASSUME_VALID_DTB and further assumes that libfdt</a>
+<a name="125"><span class="lineNum"> 125 </span> : : * functions are called with valid parameters, i.e. not trigger</a>
+<a name="126"><span class="lineNum"> 126 </span> : : * FDT_ERR_BADOFFSET or offsets that are out of bounds. It disables any</a>
+<a name="127"><span class="lineNum"> 127 </span> : : * extensive checking of parameters and the device tree, making various</a>
+<a name="128"><span class="lineNum"> 128 </span> : : * assumptions about correctness.</a>
+<a name="129"><span class="lineNum"> 129 </span> : : *</a>
+<a name="130"><span class="lineNum"> 130 </span> : : * It doesn't make sense to enable this assumption unless</a>
+<a name="131"><span class="lineNum"> 131 </span> : : * ASSUME_VALID_DTB is also enabled.</a>
+<a name="132"><span class="lineNum"> 132 </span> : : */</a>
+<a name="133"><span class="lineNum"> 133 </span> : : ASSUME_VALID_INPUT = 1 &lt;&lt; 1,</a>
+<a name="134"><span class="lineNum"> 134 </span> : : </a>
+<a name="135"><span class="lineNum"> 135 </span> : : /*</a>
+<a name="136"><span class="lineNum"> 136 </span> : : * This disables checks for device-tree version and removes all code</a>
+<a name="137"><span class="lineNum"> 137 </span> : : * which handles older versions.</a>
+<a name="138"><span class="lineNum"> 138 </span> : : *</a>
+<a name="139"><span class="lineNum"> 139 </span> : : * Only enable this if you know you have a device tree with the latest</a>
+<a name="140"><span class="lineNum"> 140 </span> : : * version.</a>
+<a name="141"><span class="lineNum"> 141 </span> : : */</a>
+<a name="142"><span class="lineNum"> 142 </span> : : ASSUME_LATEST = 1 &lt;&lt; 2,</a>
+<a name="143"><span class="lineNum"> 143 </span> : : </a>
+<a name="144"><span class="lineNum"> 144 </span> : : /*</a>
+<a name="145"><span class="lineNum"> 145 </span> : : * This assumes that it is OK for a failed addition to the device tree,</a>
+<a name="146"><span class="lineNum"> 146 </span> : : * due to lack of space or some other problem, to skip any rollback</a>
+<a name="147"><span class="lineNum"> 147 </span> : : * steps (such as dropping the property name from the string table).</a>
+<a name="148"><span class="lineNum"> 148 </span> : : * This is safe to enable in most circumstances, even though it may</a>
+<a name="149"><span class="lineNum"> 149 </span> : : * leave the tree in a sub-optimal state.</a>
+<a name="150"><span class="lineNum"> 150 </span> : : */</a>
+<a name="151"><span class="lineNum"> 151 </span> : : ASSUME_NO_ROLLBACK = 1 &lt;&lt; 3,</a>
+<a name="152"><span class="lineNum"> 152 </span> : : </a>
+<a name="153"><span class="lineNum"> 153 </span> : : /*</a>
+<a name="154"><span class="lineNum"> 154 </span> : : * This assumes that the device tree components appear in a 'convenient'</a>
+<a name="155"><span class="lineNum"> 155 </span> : : * order, i.e. the memory reservation block first, then the structure</a>
+<a name="156"><span class="lineNum"> 156 </span> : : * block and finally the string block.</a>
+<a name="157"><span class="lineNum"> 157 </span> : : *</a>
+<a name="158"><span class="lineNum"> 158 </span> : : * This order is not specified by the device-tree specification,</a>
+<a name="159"><span class="lineNum"> 159 </span> : : * but is expected by libfdt. The device-tree compiler always created</a>
+<a name="160"><span class="lineNum"> 160 </span> : : * device trees with this order.</a>
+<a name="161"><span class="lineNum"> 161 </span> : : *</a>
+<a name="162"><span class="lineNum"> 162 </span> : : * This assumption disables a check in fdt_open_into() and removes the</a>
+<a name="163"><span class="lineNum"> 163 </span> : : * ability to fix the problem there. This is safe if you know that the</a>
+<a name="164"><span class="lineNum"> 164 </span> : : * device tree is correctly ordered. See fdt_blocks_misordered_().</a>
+<a name="165"><span class="lineNum"> 165 </span> : : */</a>
+<a name="166"><span class="lineNum"> 166 </span> : : ASSUME_LIBFDT_ORDER = 1 &lt;&lt; 4,</a>
+<a name="167"><span class="lineNum"> 167 </span> : : </a>
+<a name="168"><span class="lineNum"> 168 </span> : : /*</a>
+<a name="169"><span class="lineNum"> 169 </span> : : * This assumes that libfdt itself does not have any internal bugs. It</a>
+<a name="170"><span class="lineNum"> 170 </span> : : * drops certain checks that should never be needed unless libfdt has an</a>
+<a name="171"><span class="lineNum"> 171 </span> : : * undiscovered bug.</a>
+<a name="172"><span class="lineNum"> 172 </span> : : *</a>
+<a name="173"><span class="lineNum"> 173 </span> : : * This can generally be considered safe to enable.</a>
+<a name="174"><span class="lineNum"> 174 </span> : : */</a>
+<a name="175"><span class="lineNum"> 175 </span> : : ASSUME_LIBFDT_FLAWLESS = 1 &lt;&lt; 5,</a>
+<a name="176"><span class="lineNum"> 176 </span> : : };</a>
+<a name="177"><span class="lineNum"> 177 </span> : : </a>
+<a name="178"><span class="lineNum"> 178 </span> : : /**</a>
+<a name="179"><span class="lineNum"> 179 </span> : : * can_assume_() - check if a particular assumption is enabled</a>
+<a name="180"><span class="lineNum"> 180 </span> : : *</a>
+<a name="181"><span class="lineNum"> 181 </span> : : * @mask: Mask to check (ASSUME_...)</a>
+<a name="182"><span class="lineNum"> 182 </span> : : * @return true if that assumption is enabled, else false</a>
+<a name="183"><span class="lineNum"> 183 </span> : : */</a>
+<a name="184"><span class="lineNum"> 184 </span> :<span class="lineCov"> 44772 : static inline bool can_assume_(int mask)</span></a>
+<a name="185"><span class="lineNum"> 185 </span> : : {</a>
+<a name="186"><span class="lineNum"> 186 </span> :<span class="lineCov"> 44772 : return FDT_ASSUME_MASK &amp; mask;</span></a>
+<a name="187"><span class="lineNum"> 187 </span> : : }</a>
+<a name="188"><span class="lineNum"> 188 </span> : : </a>
+<a name="189"><span class="lineNum"> 189 </span> : : /** helper macros for checking assumptions */</a>
+<a name="190"><span class="lineNum"> 190 </span> : : #define can_assume(_assume) can_assume_(ASSUME_ ## _assume)</a>
+<a name="191"><span class="lineNum"> 191 </span> : : </a>
+<a name="192"><span class="lineNum"> 192 </span> : : #endif /* LIBFDT_INTERNAL_H */</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/libflash/blocklevel.c.func-sort-c.html b/coverage-report/libflash/blocklevel.c.func-sort-c.html
index 1165c3f..0e8028a 100644
--- a/coverage-report/libflash/blocklevel.c.func-sort-c.html
+++ b/coverage-report/libflash/blocklevel.c.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">241</td>
- <td class="headerCovTableEntry">407</td>
- <td class="headerCovTableEntryLo">59.2 %</td>
+ <td class="headerCovTableEntry">240</td>
+ <td class="headerCovTableEntry">406</td>
+ <td class="headerCovTableEntryLo">59.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">14</td>
@@ -101,6 +101,14 @@
<td class="coverFnHi">47</td>
</tr>
<tr>
+ <td class="coverFn"><a href="blocklevel.c.gcov.html#23">ecc_protected</a></td>
+ <td class="coverFnHi">418</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="blocklevel.c.gcov.html#61">reacquire</a></td>
+ <td class="coverFnHi">427</td>
+ </tr>
+ <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#101">blocklevel_read</a></td>
<td class="coverFnHi">488</td>
</tr>
@@ -109,10 +117,6 @@
<td class="coverFnHi">492</td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#23">ecc_protected</a></td>
- <td class="coverFnHi">540</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#374">blocklevel_smart_erase</a></td>
<td class="coverFnHi">778</td>
</tr>
@@ -121,10 +125,6 @@
<td class="coverFnHi">3340</td>
</tr>
<tr>
- <td class="coverFn"><a href="blocklevel.c.gcov.html#61">reacquire</a></td>
- <td class="coverFnHi">3922</td>
- </tr>
- <tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#68">release</a></td>
<td class="coverFnHi">3922</td>
</tr>
diff --git a/coverage-report/libflash/blocklevel.c.func.html b/coverage-report/libflash/blocklevel.c.func.html
index 0fe4d4d..5d87811 100644
--- a/coverage-report/libflash/blocklevel.c.func.html
+++ b/coverage-report/libflash/blocklevel.c.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">241</td>
- <td class="headerCovTableEntry">407</td>
- <td class="headerCovTableEntryLo">59.2 %</td>
+ <td class="headerCovTableEntry">240</td>
+ <td class="headerCovTableEntry">406</td>
+ <td class="headerCovTableEntryLo">59.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">14</td>
@@ -110,7 +110,7 @@
</tr>
<tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#23">ecc_protected</a></td>
- <td class="coverFnHi">540</td>
+ <td class="coverFnHi">418</td>
</tr>
<tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#643">insert_bl_prot_range</a></td>
@@ -118,7 +118,7 @@
</tr>
<tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#61">reacquire</a></td>
- <td class="coverFnHi">3922</td>
+ <td class="coverFnHi">427</td>
</tr>
<tr>
<td class="coverFn"><a href="blocklevel.c.gcov.html#68">release</a></td>
diff --git a/coverage-report/libflash/blocklevel.c.gcov.html b/coverage-report/libflash/blocklevel.c.gcov.html
index 5112889..e393130 100644
--- a/coverage-report/libflash/blocklevel.c.gcov.html
+++ b/coverage-report/libflash/blocklevel.c.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">241</td>
- <td class="headerCovTableEntry">407</td>
- <td class="headerCovTableEntryLo">59.2 %</td>
+ <td class="headerCovTableEntry">240</td>
+ <td class="headerCovTableEntry">406</td>
+ <td class="headerCovTableEntryLo">59.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">14</td>
@@ -93,21 +93,21 @@
<a name="22"><span class="lineNum"> 22 </span> : : * 0 - The region is not ECC protected</a>
<a name="23"><span class="lineNum"> 23 </span> : : * -1 - Partially protected</a>
<a name="24"><span class="lineNum"> 24 </span> : : */</a>
-<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 540 : static int ecc_protected(struct blocklevel_device *bl, uint64_t pos, uint64_t len, uint64_t *start)</span></a>
+<a name="25"><span class="lineNum"> 25 </span> :<span class="lineCov"> 418 : static int ecc_protected(struct blocklevel_device *bl, uint64_t pos, uint64_t len, uint64_t *start)</span></a>
<a name="26"><span class="lineNum"> 26 </span> : : {</a>
-<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 122 : int i;</span></a>
+<a name="27"><span class="lineNum"> 27 </span> : : int i;</a>
<a name="28"><span class="lineNum"> 28 </span> : : </a>
<a name="29"><span class="lineNum"> 29 </span> : : /* Length of 0 is nonsensical so add 1 */</a>
-<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 540 : if (len == 0)</span></a>
+<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 418 : if (len == 0)</span></a>
<a name="31"><span class="lineNum"> 31 </span> :<span class="lineCov"> 2 : len = 1;</span></a>
<a name="32"><span class="lineNum"> 32 </span> : : </a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 554 : for (i = 0; i &lt; bl-&gt;ecc_prot.n_prot; i++) {</span></a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 432 : for (i = 0; i &lt; bl-&gt;ecc_prot.n_prot; i++) {</span></a>
<a name="34"><span class="lineNum"> 34 </span> : : /* Fits entirely within the range */</a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 139 : if (bl-&gt;ecc_prot.prot[i].start &lt;= pos &amp;&amp;</span></a>
-<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 138 : bl-&gt;ecc_prot.prot[i].start + bl-&gt;ecc_prot.prot[i].len &gt;= pos + len) {</span></a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 123 : if (start)</span></a>
-<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 116 : *start = bl-&gt;ecc_prot.prot[i].start;</span></a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 123 : return 1;</span></a>
+<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 38 : if (bl-&gt;ecc_prot.prot[i].start &lt;= pos &amp;&amp;</span></a>
+<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 37 : bl-&gt;ecc_prot.prot[i].start + bl-&gt;ecc_prot.prot[i].len &gt;= pos + len) {</span></a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 22 : if (start)</span></a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 15 : *start = bl-&gt;ecc_prot.prot[i].start;</span></a>
+<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 22 : return 1;</span></a>
<a name="40"><span class="lineNum"> 40 </span> : : }</a>
<a name="41"><span class="lineNum"> 41 </span> : : </a>
<a name="42"><span class="lineNum"> 42 </span> : : /*</a>
@@ -133,7 +133,7 @@
<a name="62"><span class="lineNum"> 62 </span> : : </a>
<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 3922 : static int reacquire(struct blocklevel_device *bl)</span></a>
<a name="64"><span class="lineNum"> 64 </span> : : {</a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 3922 : if (!bl-&gt;keep_alive &amp;&amp; bl-&gt;reacquire)</span></a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 427 : if (!bl-&gt;keep_alive &amp;&amp; bl-&gt;reacquire)</span></a>
<a name="66"><span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : return bl-&gt;reacquire(bl);</span></a>
<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 427 : return 0;</span></a>
<a name="68"><span class="lineNum"> 68 </span> : : }</a>
@@ -161,7 +161,7 @@
<a name="90"><span class="lineNum"> 90 </span> : : }</a>
<a name="91"><span class="lineNum"> 91 </span> : : </a>
<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 492 : rc = reacquire(bl);</span></a>
-<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 492 : if (rc)</span></a>
+<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 385 : if (rc)</span></a>
<a name="94"><span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
<a name="95"><span class="lineNum"> 95 </span> : : </a>
<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 492 : rc = bl-&gt;read(bl, pos, buf, len);</span></a>
@@ -248,7 +248,7 @@
<a name="177"><span class="lineNum"> 177 </span> : : }</a>
<a name="178"><span class="lineNum"> 178 </span> : : </a>
<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 41 : rc = reacquire(bl);</span></a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 41 : if (rc)</span></a>
+<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 26 : if (rc)</span></a>
<a name="181"><span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
<a name="182"><span class="lineNum"> 182 </span> : : </a>
<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 41 : rc = bl-&gt;write(bl, pos, buf, len);</span></a>
@@ -379,7 +379,7 @@
<a name="308"><span class="lineNum"> 308 </span> : : }</a>
<a name="309"><span class="lineNum"> 309 </span> : : </a>
<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 3336 : rc = reacquire(bl);</span></a>
-<a name="311"><span class="lineNum"> 311 </span> :<span class="lineCov"> 3336 : if (rc)</span></a>
+<a name="311"><span class="lineNum"> 311 </span> :<span class="lineCov"> 6 : if (rc)</span></a>
<a name="312"><span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
<a name="313"><span class="lineNum"> 313 </span> : : </a>
<a name="314"><span class="lineNum"> 314 </span> :<span class="lineCov"> 3336 : rc = bl-&gt;erase(bl, pos, len);</span></a>
@@ -400,7 +400,7 @@
<a name="329"><span class="lineNum"> 329 </span> : : }</a>
<a name="330"><span class="lineNum"> 330 </span> : : </a>
<a name="331"><span class="lineNum"> 331 </span> :<span class="lineCov"> 47 : rc = reacquire(bl);</span></a>
-<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 47 : if (rc)</span></a>
+<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 4 : if (rc)</span></a>
<a name="333"><span class="lineNum"> 333 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
<a name="334"><span class="lineNum"> 334 </span> : : </a>
<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 47 : rc = bl-&gt;get_info(bl, name, total_size, erase_granule);</span></a>
diff --git a/coverage-report/libflash/ecc.c.func-sort-c.html b/coverage-report/libflash/ecc.c.func-sort-c.html
index 5e28af3..ec5e6a3 100644
--- a/coverage-report/libflash/ecc.c.func-sort-c.html
+++ b/coverage-report/libflash/ecc.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
@@ -109,12 +109,12 @@
<td class="coverFnHi">163</td>
</tr>
<tr>
- <td class="coverFn"><a href="ecc.c.gcov.html#143">eccbyte</a></td>
- <td class="coverFnHi">864</td>
+ <td class="coverFn"><a href="ecc.c.gcov.html#129">eccverify</a></td>
+ <td class="coverFnHi">478</td>
</tr>
<tr>
- <td class="coverFn"><a href="ecc.c.gcov.html#129">eccverify</a></td>
- <td class="coverFnHi">928</td>
+ <td class="coverFn"><a href="ecc.c.gcov.html#143">eccbyte</a></td>
+ <td class="coverFnHi">864</td>
</tr>
<tr>
<td class="coverFn"><a href="ecc.c.gcov.html#106">eccgenerate</a></td>
diff --git a/coverage-report/libflash/ecc.c.func.html b/coverage-report/libflash/ecc.c.func.html
index 858c84f..361c4fb 100644
--- a/coverage-report/libflash/ecc.c.func.html
+++ b/coverage-report/libflash/ecc.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
@@ -82,7 +82,7 @@
</tr>
<tr>
<td class="coverFn"><a href="ecc.c.gcov.html#129">eccverify</a></td>
- <td class="coverFnHi">928</td>
+ <td class="coverFnHi">478</td>
</tr>
<tr>
<td class="coverFn"><a href="ecc.c.gcov.html#166">inc_beint64_by</a></td>
diff --git a/coverage-report/libflash/ecc.c.gcov.html b/coverage-report/libflash/ecc.c.gcov.html
index 961ed1a..64396b8 100644
--- a/coverage-report/libflash/ecc.c.gcov.html
+++ b/coverage-report/libflash/ecc.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
@@ -201,7 +201,7 @@
<a name="130"><span class="lineNum"> 130 </span> : : */</a>
<a name="131"><span class="lineNum"> 131 </span> :<span class="lineCov"> 928 : static enum eccbitfields eccverify(uint64_t data, uint8_t ecc)</span></a>
<a name="132"><span class="lineNum"> 132 </span> : : {</a>
-<a name="133"><span class="lineNum"> 133 </span> :<span class="lineCov"> 928 : return syndromematrix[eccgenerate(data) ^ ecc];</span></a>
+<a name="133"><span class="lineNum"> 133 </span> :<span class="lineCov"> 1378 : return syndromematrix[eccgenerate(data) ^ ecc];</span></a>
<a name="134"><span class="lineNum"> 134 </span> : : }</a>
<a name="135"><span class="lineNum"> 135 </span> : : </a>
<a name="136"><span class="lineNum"> 136 </span> : : /* IBM bit ordering */</a>
diff --git a/coverage-report/libflash/ecc.h.func-sort-c.html b/coverage-report/libflash/ecc.h.func-sort-c.html
index 5c0feb5..5997296 100644
--- a/coverage-report/libflash/ecc.h.func-sort-c.html
+++ b/coverage-report/libflash/ecc.h.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/libflash/ecc.h.func.html b/coverage-report/libflash/ecc.h.func.html
index 5df76c6..411ea5d 100644
--- a/coverage-report/libflash/ecc.h.func.html
+++ b/coverage-report/libflash/ecc.h.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/libflash/ecc.h.gcov.html b/coverage-report/libflash/ecc.h.gcov.html
index 3937664..81320bb 100644
--- a/coverage-report/libflash/ecc.h.gcov.html
+++ b/coverage-report/libflash/ecc.h.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/libflash/file.c.func-sort-c.html b/coverage-report/libflash/file.c.func-sort-c.html
index 33dbdc4..7e7c727 100644
--- a/coverage-report/libflash/file.c.func-sort-c.html
+++ b/coverage-report/libflash/file.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">108</td>
- <td class="headerCovTableEntry">184</td>
- <td class="headerCovTableEntryLo">58.7 %</td>
+ <td class="headerCovTableEntry">94</td>
+ <td class="headerCovTableEntry">163</td>
+ <td class="headerCovTableEntryLo">57.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">9</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntryLo">69.2 %</td>
+ <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryLo">66.7 %</td>
</tr>
<tr>
<td></td>
@@ -85,10 +85,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="file.c.gcov.html#177">get_info_name</a></td>
- <td class="coverFnHi">11</td>
- </tr>
- <tr>
<td class="coverFn"><a href="file.c.gcov.html#364">file_exit</a></td>
<td class="coverFnHi">34</td>
</tr>
diff --git a/coverage-report/libflash/file.c.func.html b/coverage-report/libflash/file.c.func.html
index eabf7e5..59cb0d0 100644
--- a/coverage-report/libflash/file.c.func.html
+++ b/coverage-report/libflash/file.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">108</td>
- <td class="headerCovTableEntry">184</td>
- <td class="headerCovTableEntryLo">58.7 %</td>
+ <td class="headerCovTableEntry">94</td>
+ <td class="headerCovTableEntry">163</td>
+ <td class="headerCovTableEntryLo">57.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">9</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntryLo">69.2 %</td>
+ <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryLo">66.7 %</td>
</tr>
<tr>
<td></td>
@@ -109,10 +109,6 @@
<td class="coverFnHi">3353</td>
</tr>
<tr>
- <td class="coverFn"><a href="file.c.gcov.html#177">get_info_name</a></td>
- <td class="coverFnHi">11</td>
- </tr>
- <tr>
<td class="coverFn"><a href="file.c.gcov.html#122">mtd_erase</a></td>
<td class="coverFnLo">0</td>
</tr>
diff --git a/coverage-report/libflash/file.c.gcov.html b/coverage-report/libflash/file.c.gcov.html
index 3287e7c..fe9636a 100644
--- a/coverage-report/libflash/file.c.gcov.html
+++ b/coverage-report/libflash/file.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">108</td>
- <td class="headerCovTableEntry">184</td>
- <td class="headerCovTableEntryLo">58.7 %</td>
+ <td class="headerCovTableEntry">94</td>
+ <td class="headerCovTableEntry">163</td>
+ <td class="headerCovTableEntryLo">57.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">9</td>
- <td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntryLo">69.2 %</td>
+ <td class="headerCovTableEntry">8</td>
+ <td class="headerCovTableEntry">12</td>
+ <td class="headerCovTableEntryLo">66.7 %</td>
</tr>
<tr>
<td></td>
@@ -247,38 +247,38 @@
<a name="176"><span class="lineNum"> 176 </span> : : return 0;</a>
<a name="177"><span class="lineNum"> 177 </span> : : }</a>
<a name="178"><span class="lineNum"> 178 </span> : : </a>
-<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 11 : static int get_info_name(struct file_data *file_data, char **name)</span></a>
+<a name="179"><span class="lineNum"> 179 </span> : : static int get_info_name(struct file_data *file_data, char **name)</a>
<a name="180"><span class="lineNum"> 180 </span> : : {</a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 11 : char *path, *lpath;</span></a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 11 : int len;</span></a>
-<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 11 : struct stat st;</span></a>
+<a name="181"><span class="lineNum"> 181 </span> : : char *path, *lpath;</a>
+<a name="182"><span class="lineNum"> 182 </span> : : int len;</a>
+<a name="183"><span class="lineNum"> 183 </span> : : struct stat st;</a>
<a name="184"><span class="lineNum"> 184 </span> : : </a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 11 : if (asprintf(&amp;path, &quot;/proc/self/fd/%d&quot;, file_data-&gt;fd) == -1)</span></a>
+<a name="185"><span class="lineNum"> 185 </span> : : if (asprintf(&amp;path, &quot;/proc/self/fd/%d&quot;, file_data-&gt;fd) == -1)</a>
<a name="186"><span class="lineNum"> 186 </span> : : return FLASH_ERR_MALLOC_FAILED;</a>
<a name="187"><span class="lineNum"> 187 </span> : : </a>
-<a name="188"><span class="lineNum"> 188 </span> :<span class="lineCov"> 11 : if (lstat(path, &amp;st)) {</span></a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : free(path);</span></a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : return FLASH_ERR_PARM_ERROR;</span></a>
+<a name="188"><span class="lineNum"> 188 </span> : : if (lstat(path, &amp;st)) {</a>
+<a name="189"><span class="lineNum"> 189 </span> : : free(path);</a>
+<a name="190"><span class="lineNum"> 190 </span> : : return FLASH_ERR_PARM_ERROR;</a>
<a name="191"><span class="lineNum"> 191 </span> : : }</a>
<a name="192"><span class="lineNum"> 192 </span> : : </a>
-<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 11 : lpath = malloc(st.st_size + 1);</span></a>
-<a name="194"><span class="lineNum"> 194 </span> :<span class="lineCov"> 11 : if (!lpath) {</span></a>
-<a name="195"><span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : free(path);</span></a>
-<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : return FLASH_ERR_MALLOC_FAILED;</span></a>
+<a name="193"><span class="lineNum"> 193 </span> : : lpath = malloc(st.st_size + 1);</a>
+<a name="194"><span class="lineNum"> 194 </span> : : if (!lpath) {</a>
+<a name="195"><span class="lineNum"> 195 </span> : : free(path);</a>
+<a name="196"><span class="lineNum"> 196 </span> : : return FLASH_ERR_MALLOC_FAILED;</a>
<a name="197"><span class="lineNum"> 197 </span> : : }</a>
<a name="198"><span class="lineNum"> 198 </span> : : </a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineCov"> 11 : len = readlink(path, lpath, st.st_size +1);</span></a>
-<a name="200"><span class="lineNum"> 200 </span> :<span class="lineCov"> 11 : if (len == -1) {</span></a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : free(path);</span></a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : free(lpath);</span></a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : return FLASH_ERR_PARM_ERROR;</span></a>
+<a name="199"><span class="lineNum"> 199 </span> : : len = readlink(path, lpath, st.st_size +1);</a>
+<a name="200"><span class="lineNum"> 200 </span> : : if (len == -1) {</a>
+<a name="201"><span class="lineNum"> 201 </span> : : free(path);</a>
+<a name="202"><span class="lineNum"> 202 </span> : : free(lpath);</a>
+<a name="203"><span class="lineNum"> 203 </span> : : return FLASH_ERR_PARM_ERROR;</a>
<a name="204"><span class="lineNum"> 204 </span> : : }</a>
-<a name="205"><span class="lineNum"> 205 </span> :<span class="lineCov"> 11 : lpath[len] = '\0';</span></a>
+<a name="205"><span class="lineNum"> 205 </span> : : lpath[len] = '\0';</a>
<a name="206"><span class="lineNum"> 206 </span> : : </a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 11 : *name = lpath;</span></a>
+<a name="207"><span class="lineNum"> 207 </span> : : *name = lpath;</a>
<a name="208"><span class="lineNum"> 208 </span> : : </a>
-<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 11 : free(path);</span></a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 11 : return 0;</span></a>
+<a name="209"><span class="lineNum"> 209 </span> : : free(path);</a>
+<a name="210"><span class="lineNum"> 210 </span> : : return 0;</a>
<a name="211"><span class="lineNum"> 211 </span> : : }</a>
<a name="212"><span class="lineNum"> 212 </span> : : </a>
<a name="213"><span class="lineNum"> 213 </span> : : </a>
diff --git a/coverage-report/libflash/index-sort-b.html b/coverage-report/libflash/index-sort-b.html
index fea9aaa..c9ac31f 100644
--- a/coverage-report/libflash/index-sort-b.html
+++ b/coverage-report/libflash/index-sort-b.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">1733</td>
- <td class="headerCovTableEntry">2603</td>
- <td class="headerCovTableEntryLo">66.6 %</td>
+ <td class="headerCovTableEntry">1697</td>
+ <td class="headerCovTableEntry">2559</td>
+ <td class="headerCovTableEntryLo">66.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">145</td>
- <td class="headerCovTableEntry">171</td>
- <td class="headerCovTableEntryMed">84.8 %</td>
+ <td class="headerCovTableEntry">141</td>
+ <td class="headerCovTableEntry">166</td>
+ <td class="headerCovTableEntryMed">84.9 %</td>
</tr>
<tr>
<td></td>
@@ -82,26 +82,38 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="libffs.c.gcov.html">libffs.c</a></td>
+ <td class="coverFile"><a href="ecc.c.gcov.html">ecc.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=48 height=10 alt="48.3%"><img src="../snow.png" width=52 height=10 alt="48.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=90 height=10 alt="89.7%"><img src="../snow.png" width=10 height=10 alt="89.7%"></td></tr></table>
</td>
- <td class="coverPerLo">48.3&nbsp;%</td>
- <td class="coverNumLo">208 / 431</td>
- <td class="coverPerLo">60.7&nbsp;%</td>
- <td class="coverNumLo">17 / 28</td>
+ <td class="coverPerMed">89.7&nbsp;%</td>
+ <td class="coverNumMed">105 / 117</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">13 / 13</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
+ <td class="coverFile"><a href="mbox-flash.c.gcov.html">mbox-flash.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="59.2%"><img src="../snow.png" width=41 height=10 alt="59.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=74 height=10 alt="74.3%"><img src="../snow.png" width=26 height=10 alt="74.3%"></td></tr></table>
</td>
- <td class="coverPerLo">59.2&nbsp;%</td>
- <td class="coverNumLo">241 / 407</td>
- <td class="coverPerHi">93.3&nbsp;%</td>
- <td class="coverNumHi">14 / 15</td>
+ <td class="coverPerLo">74.3&nbsp;%</td>
+ <td class="coverNumLo">372 / 501</td>
+ <td class="coverPerHi">93.8&nbsp;%</td>
+ <td class="coverNumHi">45 / 48</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="libffs.c.gcov.html">libffs.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=46 height=10 alt="45.6%"><img src="../snow.png" width=54 height=10 alt="45.6%"></td></tr></table>
+ </td>
+ <td class="coverPerLo">45.6&nbsp;%</td>
+ <td class="coverNumLo">187 / 410</td>
+ <td class="coverPerLo">58.3&nbsp;%</td>
+ <td class="coverNumLo">14 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -130,53 +142,41 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="ecc.c.gcov.html">ecc.c</a></td>
+ <td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=90 height=10 alt="89.7%"><img src="../snow.png" width=10 height=10 alt="89.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=58 height=10 alt="57.7%"><img src="../snow.png" width=42 height=10 alt="57.7%"></td></tr></table>
</td>
- <td class="coverPerMed">89.7&nbsp;%</td>
- <td class="coverNumMed">105 / 117</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">13 / 13</td>
+ <td class="coverPerLo">57.7&nbsp;%</td>
+ <td class="coverNumLo">94 / 163</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">8 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
+ <td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="58.7%"><img src="../snow.png" width=41 height=10 alt="58.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="59.1%"><img src="../snow.png" width=41 height=10 alt="59.1%"></td></tr></table>
</td>
- <td class="coverPerLo">58.7&nbsp;%</td>
- <td class="coverNumLo">108 / 184</td>
- <td class="coverPerLo">69.2&nbsp;%</td>
- <td class="coverNumLo">9 / 13</td>
+ <td class="coverPerLo">59.1&nbsp;%</td>
+ <td class="coverNumLo">240 / 406</td>
+ <td class="coverPerHi">93.3&nbsp;%</td>
+ <td class="coverNumHi">14 / 15</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libflash.c.gcov.html">libflash.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=52 height=10 alt="51.9%"><img src="../snow.png" width=48 height=10 alt="51.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=52 height=10 alt="52.1%"><img src="../snow.png" width=48 height=10 alt="52.1%"></td></tr></table>
</td>
- <td class="coverPerLo">51.9&nbsp;%</td>
- <td class="coverNumLo">240 / 462</td>
+ <td class="coverPerLo">52.1&nbsp;%</td>
+ <td class="coverNumLo">240 / 461</td>
<td class="coverPerMed">75.0&nbsp;%</td>
<td class="coverNumMed">18 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
- <tr>
- <td class="coverFile"><a href="mbox-flash.c.gcov.html">mbox-flash.c</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=74 height=10 alt="74.3%"><img src="../snow.png" width=26 height=10 alt="74.3%"></td></tr></table>
- </td>
- <td class="coverPerLo">74.3&nbsp;%</td>
- <td class="coverNumLo">372 / 501</td>
- <td class="coverPerHi">93.8&nbsp;%</td>
- <td class="coverNumHi">45 / 48</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
</table>
</center>
<br>
diff --git a/coverage-report/libflash/index-sort-f.html b/coverage-report/libflash/index-sort-f.html
index a26ec33..f7e8924 100644
--- a/coverage-report/libflash/index-sort-f.html
+++ b/coverage-report/libflash/index-sort-f.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">1733</td>
- <td class="headerCovTableEntry">2603</td>
- <td class="headerCovTableEntryLo">66.6 %</td>
+ <td class="headerCovTableEntry">1697</td>
+ <td class="headerCovTableEntry">2559</td>
+ <td class="headerCovTableEntryLo">66.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">145</td>
- <td class="headerCovTableEntry">171</td>
- <td class="headerCovTableEntryMed">84.8 %</td>
+ <td class="headerCovTableEntry">141</td>
+ <td class="headerCovTableEntry">166</td>
+ <td class="headerCovTableEntryMed">84.9 %</td>
</tr>
<tr>
<td></td>
@@ -84,24 +84,24 @@
<tr>
<td class="coverFile"><a href="libffs.c.gcov.html">libffs.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=48 height=10 alt="48.3%"><img src="../snow.png" width=52 height=10 alt="48.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=46 height=10 alt="45.6%"><img src="../snow.png" width=54 height=10 alt="45.6%"></td></tr></table>
</td>
- <td class="coverPerLo">48.3&nbsp;%</td>
- <td class="coverNumLo">208 / 431</td>
- <td class="coverPerLo">60.7&nbsp;%</td>
- <td class="coverNumLo">17 / 28</td>
+ <td class="coverPerLo">45.6&nbsp;%</td>
+ <td class="coverNumLo">187 / 410</td>
+ <td class="coverPerLo">58.3&nbsp;%</td>
+ <td class="coverNumLo">14 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="58.7%"><img src="../snow.png" width=41 height=10 alt="58.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=58 height=10 alt="57.7%"><img src="../snow.png" width=42 height=10 alt="57.7%"></td></tr></table>
</td>
- <td class="coverPerLo">58.7&nbsp;%</td>
- <td class="coverNumLo">108 / 184</td>
- <td class="coverPerLo">69.2&nbsp;%</td>
- <td class="coverNumLo">9 / 13</td>
+ <td class="coverPerLo">57.7&nbsp;%</td>
+ <td class="coverNumLo">94 / 163</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">8 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -120,10 +120,10 @@
<tr>
<td class="coverFile"><a href="libflash.c.gcov.html">libflash.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=52 height=10 alt="51.9%"><img src="../snow.png" width=48 height=10 alt="51.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=52 height=10 alt="52.1%"><img src="../snow.png" width=48 height=10 alt="52.1%"></td></tr></table>
</td>
- <td class="coverPerLo">51.9&nbsp;%</td>
- <td class="coverNumLo">240 / 462</td>
+ <td class="coverPerLo">52.1&nbsp;%</td>
+ <td class="coverNumLo">240 / 461</td>
<td class="coverPerMed">75.0&nbsp;%</td>
<td class="coverNumMed">18 / 24</td>
<td class="coverPerHi">-</td>
@@ -132,10 +132,10 @@
<tr>
<td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="59.2%"><img src="../snow.png" width=41 height=10 alt="59.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="59.1%"><img src="../snow.png" width=41 height=10 alt="59.1%"></td></tr></table>
</td>
- <td class="coverPerLo">59.2&nbsp;%</td>
- <td class="coverNumLo">241 / 407</td>
+ <td class="coverPerLo">59.1&nbsp;%</td>
+ <td class="coverNumLo">240 / 406</td>
<td class="coverPerHi">93.3&nbsp;%</td>
<td class="coverNumHi">14 / 15</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/libflash/index-sort-l.html b/coverage-report/libflash/index-sort-l.html
index 597a770..42fb4d6 100644
--- a/coverage-report/libflash/index-sort-l.html
+++ b/coverage-report/libflash/index-sort-l.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">1733</td>
- <td class="headerCovTableEntry">2603</td>
- <td class="headerCovTableEntryLo">66.6 %</td>
+ <td class="headerCovTableEntry">1697</td>
+ <td class="headerCovTableEntry">2559</td>
+ <td class="headerCovTableEntryLo">66.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">145</td>
- <td class="headerCovTableEntry">171</td>
- <td class="headerCovTableEntryMed">84.8 %</td>
+ <td class="headerCovTableEntry">141</td>
+ <td class="headerCovTableEntry">166</td>
+ <td class="headerCovTableEntryMed">84.9 %</td>
</tr>
<tr>
<td></td>
@@ -84,22 +84,22 @@
<tr>
<td class="coverFile"><a href="libffs.c.gcov.html">libffs.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=48 height=10 alt="48.3%"><img src="../snow.png" width=52 height=10 alt="48.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=46 height=10 alt="45.6%"><img src="../snow.png" width=54 height=10 alt="45.6%"></td></tr></table>
</td>
- <td class="coverPerLo">48.3&nbsp;%</td>
- <td class="coverNumLo">208 / 431</td>
- <td class="coverPerLo">60.7&nbsp;%</td>
- <td class="coverNumLo">17 / 28</td>
+ <td class="coverPerLo">45.6&nbsp;%</td>
+ <td class="coverNumLo">187 / 410</td>
+ <td class="coverPerLo">58.3&nbsp;%</td>
+ <td class="coverNumLo">14 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libflash.c.gcov.html">libflash.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=52 height=10 alt="51.9%"><img src="../snow.png" width=48 height=10 alt="51.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=52 height=10 alt="52.1%"><img src="../snow.png" width=48 height=10 alt="52.1%"></td></tr></table>
</td>
- <td class="coverPerLo">51.9&nbsp;%</td>
- <td class="coverNumLo">240 / 462</td>
+ <td class="coverPerLo">52.1&nbsp;%</td>
+ <td class="coverNumLo">240 / 461</td>
<td class="coverPerMed">75.0&nbsp;%</td>
<td class="coverNumMed">18 / 24</td>
<td class="coverPerHi">-</td>
@@ -108,22 +108,22 @@
<tr>
<td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="58.7%"><img src="../snow.png" width=41 height=10 alt="58.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=58 height=10 alt="57.7%"><img src="../snow.png" width=42 height=10 alt="57.7%"></td></tr></table>
</td>
- <td class="coverPerLo">58.7&nbsp;%</td>
- <td class="coverNumLo">108 / 184</td>
- <td class="coverPerLo">69.2&nbsp;%</td>
- <td class="coverNumLo">9 / 13</td>
+ <td class="coverPerLo">57.7&nbsp;%</td>
+ <td class="coverNumLo">94 / 163</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">8 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="59.2%"><img src="../snow.png" width=41 height=10 alt="59.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="59.1%"><img src="../snow.png" width=41 height=10 alt="59.1%"></td></tr></table>
</td>
- <td class="coverPerLo">59.2&nbsp;%</td>
- <td class="coverNumLo">241 / 407</td>
+ <td class="coverPerLo">59.1&nbsp;%</td>
+ <td class="coverNumLo">240 / 406</td>
<td class="coverPerHi">93.3&nbsp;%</td>
<td class="coverNumHi">14 / 15</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/libflash/index.html b/coverage-report/libflash/index.html
index 9cdf52f..0c96d34 100644
--- a/coverage-report/libflash/index.html
+++ b/coverage-report/libflash/index.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">1733</td>
- <td class="headerCovTableEntry">2603</td>
- <td class="headerCovTableEntryLo">66.6 %</td>
+ <td class="headerCovTableEntry">1697</td>
+ <td class="headerCovTableEntry">2559</td>
+ <td class="headerCovTableEntryLo">66.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">145</td>
- <td class="headerCovTableEntry">171</td>
- <td class="headerCovTableEntryMed">84.8 %</td>
+ <td class="headerCovTableEntry">141</td>
+ <td class="headerCovTableEntry">166</td>
+ <td class="headerCovTableEntryMed">84.9 %</td>
</tr>
<tr>
<td></td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="blocklevel.c.gcov.html">blocklevel.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="59.2%"><img src="../snow.png" width=41 height=10 alt="59.2%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="59.1%"><img src="../snow.png" width=41 height=10 alt="59.1%"></td></tr></table>
</td>
- <td class="coverPerLo">59.2&nbsp;%</td>
- <td class="coverNumLo">241 / 407</td>
+ <td class="coverPerLo">59.1&nbsp;%</td>
+ <td class="coverNumLo">240 / 406</td>
<td class="coverPerHi">93.3&nbsp;%</td>
<td class="coverNumHi">14 / 15</td>
<td class="coverPerHi">-</td>
@@ -120,12 +120,12 @@
<tr>
<td class="coverFile"><a href="file.c.gcov.html">file.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="58.7%"><img src="../snow.png" width=41 height=10 alt="58.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=58 height=10 alt="57.7%"><img src="../snow.png" width=42 height=10 alt="57.7%"></td></tr></table>
</td>
- <td class="coverPerLo">58.7&nbsp;%</td>
- <td class="coverNumLo">108 / 184</td>
- <td class="coverPerLo">69.2&nbsp;%</td>
- <td class="coverNumLo">9 / 13</td>
+ <td class="coverPerLo">57.7&nbsp;%</td>
+ <td class="coverNumLo">94 / 163</td>
+ <td class="coverPerLo">66.7&nbsp;%</td>
+ <td class="coverNumLo">8 / 12</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -144,22 +144,22 @@
<tr>
<td class="coverFile"><a href="libffs.c.gcov.html">libffs.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=48 height=10 alt="48.3%"><img src="../snow.png" width=52 height=10 alt="48.3%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=46 height=10 alt="45.6%"><img src="../snow.png" width=54 height=10 alt="45.6%"></td></tr></table>
</td>
- <td class="coverPerLo">48.3&nbsp;%</td>
- <td class="coverNumLo">208 / 431</td>
- <td class="coverPerLo">60.7&nbsp;%</td>
- <td class="coverNumLo">17 / 28</td>
+ <td class="coverPerLo">45.6&nbsp;%</td>
+ <td class="coverNumLo">187 / 410</td>
+ <td class="coverPerLo">58.3&nbsp;%</td>
+ <td class="coverNumLo">14 / 24</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
<td class="coverFile"><a href="libflash.c.gcov.html">libflash.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=52 height=10 alt="51.9%"><img src="../snow.png" width=48 height=10 alt="51.9%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=52 height=10 alt="52.1%"><img src="../snow.png" width=48 height=10 alt="52.1%"></td></tr></table>
</td>
- <td class="coverPerLo">51.9&nbsp;%</td>
- <td class="coverNumLo">240 / 462</td>
+ <td class="coverPerLo">52.1&nbsp;%</td>
+ <td class="coverNumLo">240 / 461</td>
<td class="coverPerMed">75.0&nbsp;%</td>
<td class="coverNumMed">18 / 24</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/libflash/ipmi-hiomap.c.func-sort-c.html b/coverage-report/libflash/ipmi-hiomap.c.func-sort-c.html
index 4ef6ae9..a5d2093 100644
--- a/coverage-report/libflash/ipmi-hiomap.c.func-sort-c.html
+++ b/coverage-report/libflash/ipmi-hiomap.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">26</td>
diff --git a/coverage-report/libflash/ipmi-hiomap.c.func.html b/coverage-report/libflash/ipmi-hiomap.c.func.html
index ac44b25..bdc8dd3 100644
--- a/coverage-report/libflash/ipmi-hiomap.c.func.html
+++ b/coverage-report/libflash/ipmi-hiomap.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">26</td>
diff --git a/coverage-report/libflash/ipmi-hiomap.c.gcov.html b/coverage-report/libflash/ipmi-hiomap.c.gcov.html
index 54b35e2..671657d 100644
--- a/coverage-report/libflash/ipmi-hiomap.c.gcov.html
+++ b/coverage-report/libflash/ipmi-hiomap.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">26</td>
@@ -691,7 +691,7 @@
<a name="620"><span class="lineNum"> 620 </span> : : uint32_t chunk;</a>
<a name="621"><span class="lineNum"> 621 </span> : : </a>
<a name="622"><span class="lineNum"> 622 </span> :<span class="lineCov"> 13314 : if (len &gt; 3 &amp;&amp; !(off &amp; 3)) {</span></a>
-<a name="623"><span class="lineNum"> 623 </span> : : /* endian swap: see lpc_window_write */</a>
+<a name="623"><span class="lineNum"> 623 </span> : : /* endian swap: see lpc_window_read */</a>
<a name="624"><span class="lineNum"> 624 </span> :<span class="lineCov"> 13312 : uint32_t dat = be32_to_cpu(*(__be32 *)buf);</span></a>
<a name="625"><span class="lineNum"> 625 </span> : : </a>
<a name="626"><span class="lineNum"> 626 </span> :<span class="lineCov"> 13312 : rc = lpc_write(OPAL_LPC_FW, off, dat, 4);</span></a>
diff --git a/coverage-report/libflash/libffs.c.func-sort-c.html b/coverage-report/libflash/libffs.c.func-sort-c.html
index c4c65de..c4848b7 100644
--- a/coverage-report/libflash/libffs.c.func-sort-c.html
+++ b/coverage-report/libflash/libffs.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">208</td>
- <td class="headerCovTableEntry">431</td>
- <td class="headerCovTableEntryLo">48.3 %</td>
+ <td class="headerCovTableEntry">187</td>
+ <td class="headerCovTableEntry">410</td>
+ <td class="headerCovTableEntryLo">45.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">17</td>
- <td class="headerCovTableEntry">28</td>
- <td class="headerCovTableEntryLo">60.7 %</td>
+ <td class="headerCovTableEntry">14</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntryLo">58.3 %</td>
</tr>
<tr>
<td></td>
@@ -105,10 +105,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#51">ffs_num_entries</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#204">ffs_string_to_entry_user</a></td>
<td class="coverFnLo">0</td>
</tr>
@@ -117,10 +113,6 @@
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#81">ffs_entry_user_to_flash</a></td>
- <td class="coverFnHi">1</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#458">ffs_lookup_part</a></td>
<td class="coverFnHi">2</td>
</tr>
@@ -157,6 +149,10 @@
<td class="coverFnHi">10</td>
</tr>
<tr>
+ <td class="coverFn"><a href="libffs.c.gcov.html#274">ffs_entry_put</a></td>
+ <td class="coverFnHi">13</td>
+ </tr>
+ <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#266">ffs_entry_get</a></td>
<td class="coverFnHi">16</td>
</tr>
@@ -168,18 +164,6 @@
<td class="coverFn"><a href="libffs.c.gcov.html#254">has_flag</a></td>
<td class="coverFnHi">36</td>
</tr>
- <tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#139">ffs_entry_to_cpu</a></td>
- <td class="coverFnHi">59</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#92">ffs_entry_user_to_cpu</a></td>
- <td class="coverFnHi">59</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#274">ffs_entry_put</a></td>
- <td class="coverFnHi">72</td>
- </tr>
</table>
<br>
</center>
diff --git a/coverage-report/libflash/libffs.c.func.html b/coverage-report/libflash/libffs.c.func.html
index 81e591f..e39dc07 100644
--- a/coverage-report/libflash/libffs.c.func.html
+++ b/coverage-report/libflash/libffs.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">208</td>
- <td class="headerCovTableEntry">431</td>
- <td class="headerCovTableEntryLo">48.3 %</td>
+ <td class="headerCovTableEntry">187</td>
+ <td class="headerCovTableEntry">410</td>
+ <td class="headerCovTableEntryLo">45.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">17</td>
- <td class="headerCovTableEntry">28</td>
- <td class="headerCovTableEntryLo">60.7 %</td>
+ <td class="headerCovTableEntry">14</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntryLo">58.3 %</td>
</tr>
<tr>
<td></td>
@@ -94,17 +94,13 @@
</tr>
<tr>
<td class="coverFn"><a href="libffs.c.gcov.html#274">ffs_entry_put</a></td>
- <td class="coverFnHi">72</td>
+ <td class="coverFnHi">13</td>
</tr>
<tr>
<td class="coverFn"><a href="libffs.c.gcov.html#750">ffs_entry_set_act_size</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#139">ffs_entry_to_cpu</a></td>
- <td class="coverFnHi">59</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#103">ffs_entry_to_flash</a></td>
<td class="coverFnHi">1</td>
</tr>
@@ -117,14 +113,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#92">ffs_entry_user_to_cpu</a></td>
- <td class="coverFnHi">59</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#81">ffs_entry_user_to_flash</a></td>
- <td class="coverFnHi">1</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#160">ffs_entry_user_to_string</a></td>
<td class="coverFnHi">7</td>
</tr>
@@ -157,10 +145,6 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="libffs.c.gcov.html#51">ffs_num_entries</a></td>
- <td class="coverFnLo">0</td>
- </tr>
- <tr>
<td class="coverFn"><a href="libffs.c.gcov.html#477">ffs_part_info</a></td>
<td class="coverFnHi">22</td>
</tr>
diff --git a/coverage-report/libflash/libffs.c.gcov.html b/coverage-report/libflash/libffs.c.gcov.html
index d7fb8a1..f359464 100644
--- a/coverage-report/libflash/libffs.c.gcov.html
+++ b/coverage-report/libflash/libffs.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">208</td>
- <td class="headerCovTableEntry">431</td>
- <td class="headerCovTableEntryLo">48.3 %</td>
+ <td class="headerCovTableEntry">187</td>
+ <td class="headerCovTableEntry">410</td>
+ <td class="headerCovTableEntryLo">45.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">17</td>
- <td class="headerCovTableEntry">28</td>
- <td class="headerCovTableEntryLo">60.7 %</td>
+ <td class="headerCovTableEntry">14</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntryLo">58.3 %</td>
</tr>
<tr>
<td></td>
@@ -96,13 +96,13 @@
<a name="25"><span class="lineNum"> 25 </span> : : struct blocklevel_device *bl;</a>
<a name="26"><span class="lineNum"> 26 </span> : : };</a>
<a name="27"><span class="lineNum"> 27 </span> : : </a>
-<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 59 : static uint32_t ffs_checksum(void* data, size_t size)</span></a>
+<a name="28"><span class="lineNum"> 28 </span> : : static uint32_t ffs_checksum(void* data, size_t size)</a>
<a name="29"><span class="lineNum"> 29 </span> : : {</a>
-<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 59 : uint32_t i, csum = 0;</span></a>
+<a name="30"><span class="lineNum"> 30 </span> : : uint32_t i, csum = 0;</a>
<a name="31"><span class="lineNum"> 31 </span> : : </a>
-<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 1947 : for (i = csum = 0; i &lt; (size/4); i++)</span></a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 2028 : csum ^= ((uint32_t *)data)[i];</span></a>
-<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 69 : return csum;</span></a>
+<a name="32"><span class="lineNum"> 32 </span> :<span class="lineCov"> 290 : for (i = csum = 0; i &lt; (size/4); i++)</span></a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 140 : csum ^= ((uint32_t *)data)[i];</span></a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 10 : return csum;</span></a>
<a name="35"><span class="lineNum"> 35 </span> : : }</a>
<a name="36"><span class="lineNum"> 36 </span> : : </a>
<a name="37"><span class="lineNum"> 37 </span> : : /* Helper functions for typesafety and size safety */</a>
@@ -111,7 +111,7 @@
<a name="40"><span class="lineNum"> 40 </span> :<span class="lineNoCov"> 0 : return ffs_checksum(hdr, sizeof(struct __ffs_hdr));</span></a>
<a name="41"><span class="lineNum"> 41 </span> : : }</a>
<a name="42"><span class="lineNum"> 42 </span> : : </a>
-<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 60 : static uint32_t ffs_entry_checksum(struct __ffs_entry *ent)</span></a>
+<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 1 : static uint32_t ffs_entry_checksum(struct __ffs_entry *ent)</span></a>
<a name="44"><span class="lineNum"> 44 </span> : : {</a>
<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 33 : return ffs_checksum(ent, sizeof(struct __ffs_entry));</span></a>
<a name="46"><span class="lineNum"> 46 </span> : : }</a>
@@ -162,15 +162,15 @@
<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 1 : return 0;</span></a>
<a name="92"><span class="lineNum"> 92 </span> : : }</a>
<a name="93"><span class="lineNum"> 93 </span> : : </a>
-<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 59 : static int ffs_entry_user_to_cpu(struct ffs_hdr *hdr __unused,</span></a>
+<a name="94"><span class="lineNum"> 94 </span> : : static int ffs_entry_user_to_cpu(struct ffs_hdr *hdr __unused,</a>
<a name="95"><span class="lineNum"> 95 </span> : : struct ffs_entry_user *dst, struct __ffs_entry_user *src)</a>
<a name="96"><span class="lineNum"> 96 </span> : : {</a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 59 : memset(dst, 0, sizeof(struct ffs_entry_user));</span></a>
-<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 59 : dst-&gt;datainteg = be16_to_cpu(src-&gt;datainteg);</span></a>
-<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 59 : dst-&gt;vercheck = src-&gt;vercheck;</span></a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 59 : dst-&gt;miscflags = src-&gt;miscflags;</span></a>
+<a name="97"><span class="lineNum"> 97 </span> : : memset(dst, 0, sizeof(struct ffs_entry_user));</a>
+<a name="98"><span class="lineNum"> 98 </span> : : dst-&gt;datainteg = be16_to_cpu(src-&gt;datainteg);</a>
+<a name="99"><span class="lineNum"> 99 </span> : : dst-&gt;vercheck = src-&gt;vercheck;</a>
+<a name="100"><span class="lineNum"> 100 </span> : : dst-&gt;miscflags = src-&gt;miscflags;</a>
<a name="101"><span class="lineNum"> 101 </span> : : </a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 59 : return 0;</span></a>
+<a name="102"><span class="lineNum"> 102 </span> : : return 0;</a>
<a name="103"><span class="lineNum"> 103 </span> : : }</a>
<a name="104"><span class="lineNum"> 104 </span> : : </a>
<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 1 : static int ffs_entry_to_flash(struct ffs_hdr *hdr,</span></a>
@@ -209,25 +209,25 @@
<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 1 : return rc;</span></a>
<a name="139"><span class="lineNum"> 139 </span> : : }</a>
<a name="140"><span class="lineNum"> 140 </span> : : </a>
-<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 59 : static int ffs_entry_to_cpu(struct ffs_hdr *hdr,</span></a>
+<a name="141"><span class="lineNum"> 141 </span> : : static int ffs_entry_to_cpu(struct ffs_hdr *hdr,</a>
<a name="142"><span class="lineNum"> 142 </span> : : struct ffs_entry *dst, struct __ffs_entry *src)</a>
<a name="143"><span class="lineNum"> 143 </span> : : {</a>
-<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 59 : int rc;</span></a>
+<a name="144"><span class="lineNum"> 144 </span> : : int rc;</a>
<a name="145"><span class="lineNum"> 145 </span> : : </a>
-<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 118 : if (ffs_entry_checksum(src) != 0)</span></a>
+<a name="146"><span class="lineNum"> 146 </span> : : if (ffs_entry_checksum(src) != 0)</a>
<a name="147"><span class="lineNum"> 147 </span> : : return FFS_ERR_BAD_CKSUM;</a>
<a name="148"><span class="lineNum"> 148 </span> : : </a>
-<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 59 : memcpy(dst-&gt;name, src-&gt;name, sizeof(dst-&gt;name));</span></a>
-<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 59 : dst-&gt;name[FFS_PART_NAME_MAX] = '\0';</span></a>
-<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 59 : dst-&gt;base = be32_to_cpu(src-&gt;base) * hdr-&gt;block_size;</span></a>
-<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 59 : dst-&gt;size = be32_to_cpu(src-&gt;size) * hdr-&gt;block_size;</span></a>
-<a name="153"><span class="lineNum"> 153 </span> :<span class="lineCov"> 59 : dst-&gt;actual = be32_to_cpu(src-&gt;actual);</span></a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 59 : dst-&gt;pid = be32_to_cpu(src-&gt;pid);</span></a>
-<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 59 : dst-&gt;type = be32_to_cpu(src-&gt;type); /* TODO: Check that it is valid? */</span></a>
-<a name="156"><span class="lineNum"> 156 </span> :<span class="lineCov"> 59 : dst-&gt;flags = be32_to_cpu(src-&gt;flags);</span></a>
-<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 59 : rc = ffs_entry_user_to_cpu(hdr, &amp;dst-&gt;user, &amp;src-&gt;user);</span></a>
+<a name="149"><span class="lineNum"> 149 </span> : : memcpy(dst-&gt;name, src-&gt;name, sizeof(dst-&gt;name));</a>
+<a name="150"><span class="lineNum"> 150 </span> : : dst-&gt;name[FFS_PART_NAME_MAX] = '\0';</a>
+<a name="151"><span class="lineNum"> 151 </span> : : dst-&gt;base = be32_to_cpu(src-&gt;base) * hdr-&gt;block_size;</a>
+<a name="152"><span class="lineNum"> 152 </span> : : dst-&gt;size = be32_to_cpu(src-&gt;size) * hdr-&gt;block_size;</a>
+<a name="153"><span class="lineNum"> 153 </span> : : dst-&gt;actual = be32_to_cpu(src-&gt;actual);</a>
+<a name="154"><span class="lineNum"> 154 </span> : : dst-&gt;pid = be32_to_cpu(src-&gt;pid);</a>
+<a name="155"><span class="lineNum"> 155 </span> : : dst-&gt;type = be32_to_cpu(src-&gt;type); /* TODO: Check that it is valid? */</a>
+<a name="156"><span class="lineNum"> 156 </span> : : dst-&gt;flags = be32_to_cpu(src-&gt;flags);</a>
+<a name="157"><span class="lineNum"> 157 </span> : : rc = ffs_entry_user_to_cpu(hdr, &amp;dst-&gt;user, &amp;src-&gt;user);</a>
<a name="158"><span class="lineNum"> 158 </span> : : </a>
-<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 59 : return rc;</span></a>
+<a name="159"><span class="lineNum"> 159 </span> : : return rc;</a>
<a name="160"><span class="lineNum"> 160 </span> : : }</a>
<a name="161"><span class="lineNum"> 161 </span> : : </a>
<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 7 : char *ffs_entry_user_to_string(struct ffs_entry_user *user)</span></a>
@@ -346,7 +346,7 @@
<a name="275"><span class="lineNum"> 275 </span> : : </a>
<a name="276"><span class="lineNum"> 276 </span> :<span class="lineCov"> 72 : struct ffs_entry *ffs_entry_put(struct ffs_entry *ent)</span></a>
<a name="277"><span class="lineNum"> 277 </span> : : {</a>
-<a name="278"><span class="lineNum"> 278 </span> :<span class="lineCov"> 72 : if (!ent)</span></a>
+<a name="278"><span class="lineNum"> 278 </span> :<span class="lineCov"> 13 : if (!ent)</span></a>
<a name="279"><span class="lineNum"> 279 </span> : : return NULL;</a>
<a name="280"><span class="lineNum"> 280 </span> : : </a>
<a name="281"><span class="lineNum"> 281 </span> :<span class="lineCov"> 72 : ent-&gt;ref--;</span></a>
@@ -508,7 +508,7 @@
<a name="437"><span class="lineNum"> 437 </span> : : return;</a>
<a name="438"><span class="lineNum"> 438 </span> : : </a>
<a name="439"><span class="lineNum"> 439 </span> :<span class="lineCov"> 68 : for (i = 0; i &lt; hdr-&gt;count; i++)</span></a>
-<a name="440"><span class="lineNum"> 440 </span> :<span class="lineCov"> 59 : ffs_entry_put(hdr-&gt;entries[i]);</span></a>
+<a name="440"><span class="lineNum"> 440 </span> :<span class="lineCov"> 118 : ffs_entry_put(hdr-&gt;entries[i]);</span></a>
<a name="441"><span class="lineNum"> 441 </span> :<span class="lineCov"> 9 : free(hdr-&gt;entries);</span></a>
<a name="442"><span class="lineNum"> 442 </span> : : }</a>
<a name="443"><span class="lineNum"> 443 </span> : : </a>
diff --git a/coverage-report/libflash/libflash.c.func-sort-c.html b/coverage-report/libflash/libflash.c.func-sort-c.html
index 6ef6490..0b8d938 100644
--- a/coverage-report/libflash/libflash.c.func-sort-c.html
+++ b/coverage-report/libflash/libflash.c.func-sort-c.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">240</td>
- <td class="headerCovTableEntry">462</td>
- <td class="headerCovTableEntryLo">51.9 %</td>
+ <td class="headerCovTableEntry">461</td>
+ <td class="headerCovTableEntryLo">52.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">18</td>
diff --git a/coverage-report/libflash/libflash.c.func.html b/coverage-report/libflash/libflash.c.func.html
index 77636da..3cbca67 100644
--- a/coverage-report/libflash/libflash.c.func.html
+++ b/coverage-report/libflash/libflash.c.func.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">240</td>
- <td class="headerCovTableEntry">462</td>
- <td class="headerCovTableEntryLo">51.9 %</td>
+ <td class="headerCovTableEntry">461</td>
+ <td class="headerCovTableEntryLo">52.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">18</td>
diff --git a/coverage-report/libflash/libflash.c.gcov.html b/coverage-report/libflash/libflash.c.gcov.html
index 0d37ab5..09b4a58 100644
--- a/coverage-report/libflash/libflash.c.gcov.html
+++ b/coverage-report/libflash/libflash.c.gcov.html
@@ -32,12 +32,12 @@
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">240</td>
- <td class="headerCovTableEntry">462</td>
- <td class="headerCovTableEntryLo">51.9 %</td>
+ <td class="headerCovTableEntry">461</td>
+ <td class="headerCovTableEntryLo">52.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">18</td>
@@ -367,7 +367,7 @@
<a name="296"><span class="lineNum"> 296 </span> : : uint32_t size)</a>
<a name="297"><span class="lineNum"> 297 </span> : : {</a>
<a name="298"><span class="lineNum"> 298 </span> :<span class="lineCov"> 8098 : struct spi_flash_ctrl *ct = c-&gt;ctrl;</span></a>
-<a name="299"><span class="lineNum"> 299 </span> :<span class="lineNoCov"> 0 : int rc;</span></a>
+<a name="299"><span class="lineNum"> 299 </span> : : int rc;</a>
<a name="300"><span class="lineNum"> 300 </span> : : </a>
<a name="301"><span class="lineNum"> 301 </span> :<span class="lineCov"> 8098 : if (size &lt; 1 || size &gt; 0x100)</span></a>
<a name="302"><span class="lineNum"> 302 </span> :<span class="lineNoCov"> 0 : return FLASH_ERR_BAD_PAGE_SIZE;</span></a>
diff --git a/coverage-report/libflash/mbox-flash.c.func-sort-c.html b/coverage-report/libflash/mbox-flash.c.func-sort-c.html
index a66e737..41f9cb2 100644
--- a/coverage-report/libflash/mbox-flash.c.func-sort-c.html
+++ b/coverage-report/libflash/mbox-flash.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">45</td>
diff --git a/coverage-report/libflash/mbox-flash.c.func.html b/coverage-report/libflash/mbox-flash.c.func.html
index fff40e5..4a31463 100644
--- a/coverage-report/libflash/mbox-flash.c.func.html
+++ b/coverage-report/libflash/mbox-flash.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">45</td>
diff --git a/coverage-report/libflash/mbox-flash.c.gcov.html b/coverage-report/libflash/mbox-flash.c.gcov.html
index 16c2a3e..05eb92a 100644
--- a/coverage-report/libflash/mbox-flash.c.gcov.html
+++ b/coverage-report/libflash/mbox-flash.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">45</td>
@@ -223,34 +223,34 @@
<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 659 : prlog(PR_TRACE, &quot;Reading at 0x%08x for 0x%08x offset: 0x%08x\n&quot;,</span></a>
<a name="153"><span class="lineNum"> 153 </span> : : pos, len, off);</a>
<a name="154"><span class="lineNum"> 154 </span> : : </a>
-<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 22434764 : while(len) {</span></a>
+<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 22434800 : while(len) {</span></a>
<a name="156"><span class="lineNum"> 156 </span> : : uint32_t chunk;</a>
<a name="157"><span class="lineNum"> 157 </span> : : uint32_t dat;</a>
<a name="158"><span class="lineNum"> 158 </span> : : </a>
<a name="159"><span class="lineNum"> 159 </span> : : /* XXX: make this read until it's aligned */</a>
-<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 22434105 : if (len &gt; 3 &amp;&amp; !(off &amp; 3)) {</span></a>
-<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 22433797 : rc = lpc_read(OPAL_LPC_FW, off, &amp;dat, 4);</span></a>
-<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 22433797 : if (!rc) {</span></a>
+<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 22434100 : if (len &gt; 3 &amp;&amp; !(off &amp; 3)) {</span></a>
+<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 22433800 : rc = lpc_read(OPAL_LPC_FW, off, &amp;dat, 4);</span></a>
+<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 22433800 : if (!rc) {</span></a>
<a name="163"><span class="lineNum"> 163 </span> : : /*</a>
<a name="164"><span class="lineNum"> 164 </span> : : * lpc_read swaps to CPU endian but it's not</a>
<a name="165"><span class="lineNum"> 165 </span> : : * really a 32-bit value, so convert back.</a>
<a name="166"><span class="lineNum"> 166 </span> : : */</a>
-<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 22433797 : *(__be32 *)buf = cpu_to_be32(dat);</span></a>
+<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 22433800 : *(__be32 *)buf = cpu_to_be32(dat);</span></a>
<a name="168"><span class="lineNum"> 168 </span> : : }</a>
-<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 22433797 : chunk = 4;</span></a>
+<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 22433800 : chunk = 4;</span></a>
<a name="170"><span class="lineNum"> 170 </span> : : } else {</a>
<a name="171"><span class="lineNum"> 171 </span> :<span class="lineCov"> 308 : rc = lpc_read(OPAL_LPC_FW, off, &amp;dat, 1);</span></a>
<a name="172"><span class="lineNum"> 172 </span> :<span class="lineCov"> 308 : if (!rc)</span></a>
<a name="173"><span class="lineNum"> 173 </span> :<span class="lineCov"> 308 : *(uint8_t *)buf = dat;</span></a>
<a name="174"><span class="lineNum"> 174 </span> :<span class="lineCov"> 308 : chunk = 1;</span></a>
<a name="175"><span class="lineNum"> 175 </span> : : }</a>
-<a name="176"><span class="lineNum"> 176 </span> :<span class="lineCov"> 22434105 : if (rc) {</span></a>
+<a name="176"><span class="lineNum"> 176 </span> :<span class="lineCov"> 22434100 : if (rc) {</span></a>
<a name="177"><span class="lineNum"> 177 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;lpc_read failure %d to FW 0x%08x\n&quot;, rc, off);</span></a>
<a name="178"><span class="lineNum"> 178 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
<a name="179"><span class="lineNum"> 179 </span> : : }</a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 22434105 : len -= chunk;</span></a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 22434105 : off += chunk;</span></a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 22434105 : buf += chunk;</span></a>
+<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 22434100 : len -= chunk;</span></a>
+<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 22434100 : off += chunk;</span></a>
+<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 22434100 : buf += chunk;</span></a>
<a name="183"><span class="lineNum"> 183 </span> : : }</a>
<a name="184"><span class="lineNum"> 184 </span> : : </a>
<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 659 : return 0;</span></a>
@@ -266,28 +266,28 @@
<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 96 : prlog(PR_TRACE, &quot;Writing at 0x%08x for 0x%08x offset: 0x%08x\n&quot;,</span></a>
<a name="196"><span class="lineNum"> 196 </span> : : pos, len, off);</a>
<a name="197"><span class="lineNum"> 197 </span> : : </a>
-<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 6236268 : while(len) {</span></a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 6236270 : while(len) {</span></a>
<a name="199"><span class="lineNum"> 199 </span> : : uint32_t chunk;</a>
<a name="200"><span class="lineNum"> 200 </span> : : </a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 6236172 : if (len &gt; 3 &amp;&amp; !(off &amp; 3)) {</span></a>
-<a name="202"><span class="lineNum"> 202 </span> : : /* endian swap: see lpc_window_write */</a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 6236172 : uint32_t dat = be32_to_cpu(*(__be32 *)buf);</span></a>
+<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 6236170 : if (len &gt; 3 &amp;&amp; !(off &amp; 3)) {</span></a>
+<a name="202"><span class="lineNum"> 202 </span> : : /* endian swap: see lpc_window_read */</a>
+<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 6236170 : uint32_t dat = be32_to_cpu(*(__be32 *)buf);</span></a>
<a name="204"><span class="lineNum"> 204 </span> : : </a>
-<a name="205"><span class="lineNum"> 205 </span> :<span class="lineCov"> 6236172 : rc = lpc_write(OPAL_LPC_FW, off, dat, 4);</span></a>
-<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 6236172 : chunk = 4;</span></a>
+<a name="205"><span class="lineNum"> 205 </span> :<span class="lineCov"> 6236170 : rc = lpc_write(OPAL_LPC_FW, off, dat, 4);</span></a>
+<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 6236170 : chunk = 4;</span></a>
<a name="207"><span class="lineNum"> 207 </span> : : } else {</a>
<a name="208"><span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : uint8_t dat = *(uint8_t *)buf;</span></a>
<a name="209"><span class="lineNum"> 209 </span> : : </a>
<a name="210"><span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : rc = lpc_write(OPAL_LPC_FW, off, dat, 1);</span></a>
<a name="211"><span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : chunk = 1;</span></a>
<a name="212"><span class="lineNum"> 212 </span> : : }</a>
-<a name="213"><span class="lineNum"> 213 </span> :<span class="lineCov"> 6236172 : if (rc) {</span></a>
+<a name="213"><span class="lineNum"> 213 </span> :<span class="lineCov"> 6236170 : if (rc) {</span></a>
<a name="214"><span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;lpc_write failure %d to FW 0x%08x\n&quot;, rc, off);</span></a>
<a name="215"><span class="lineNum"> 215 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
<a name="216"><span class="lineNum"> 216 </span> : : }</a>
-<a name="217"><span class="lineNum"> 217 </span> :<span class="lineCov"> 6236172 : len -= chunk;</span></a>
-<a name="218"><span class="lineNum"> 218 </span> :<span class="lineCov"> 6236172 : off += chunk;</span></a>
-<a name="219"><span class="lineNum"> 219 </span> :<span class="lineCov"> 6236172 : buf += chunk;</span></a>
+<a name="217"><span class="lineNum"> 217 </span> :<span class="lineCov"> 6236170 : len -= chunk;</span></a>
+<a name="218"><span class="lineNum"> 218 </span> :<span class="lineCov"> 6236170 : off += chunk;</span></a>
+<a name="219"><span class="lineNum"> 219 </span> :<span class="lineCov"> 6236170 : buf += chunk;</span></a>
<a name="220"><span class="lineNum"> 220 </span> : : }</a>
<a name="221"><span class="lineNum"> 221 </span> : : </a>
<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 96 : return 0;</span></a>
diff --git a/coverage-report/libflash/test/index-sort-b.html b/coverage-report/libflash/test/index-sort-b.html
index 0775b45..d2ae840 100644
--- a/coverage-report/libflash/test/index-sort-b.html
+++ b/coverage-report/libflash/test/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">119</td>
@@ -82,14 +82,14 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="test-blocklevel.c.gcov.html">test-blocklevel.c</a></td>
+ <td class="coverFile"><a href="test-ipmi-hiomap.c.gcov.html">test-ipmi-hiomap.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=41 height=10 alt="40.8%"><img src="../../snow.png" width=59 height=10 alt="40.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=98 height=10 alt="97.7%"><img src="../../snow.png" width=2 height=10 alt="97.7%"></td></tr></table>
</td>
- <td class="coverPerLo">40.8&nbsp;%</td>
- <td class="coverNumLo">160 / 392</td>
- <td class="coverPerLo">60.0&nbsp;%</td>
- <td class="coverNumLo">6 / 10</td>
+ <td class="coverPerHi">97.7&nbsp;%</td>
+ <td class="coverNumHi">646 / 661</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">69 / 69</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
@@ -106,62 +106,62 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="test-mbox.c.gcov.html">test-mbox.c</a></td>
+ <td class="coverFile"><a href="test-flash.c.gcov.html">test-flash.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=62 height=10 alt="61.8%"><img src="../../snow.png" width=38 height=10 alt="61.8%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=67 height=10 alt="66.5%"><img src="../../snow.png" width=33 height=10 alt="66.5%"></td></tr></table>
</td>
- <td class="coverPerLo">61.8&nbsp;%</td>
- <td class="coverNumLo">94 / 152</td>
+ <td class="coverPerLo">66.5&nbsp;%</td>
+ <td class="coverNumLo">173 / 260</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">3 / 3</td>
+ <td class="coverNumHi">11 / 11</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="mbox-server.c.gcov.html">mbox-server.c</a></td>
+ <td class="coverFile"><a href="test-ecc.c.gcov.html">test-ecc.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../amber.png" width=83 height=10 alt="83.1%"><img src="../../snow.png" width=17 height=10 alt="83.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=51 height=10 alt="51.1%"><img src="../../snow.png" width=49 height=10 alt="51.1%"></td></tr></table>
</td>
- <td class="coverPerMed">83.1&nbsp;%</td>
- <td class="coverNumMed">212 / 255</td>
+ <td class="coverPerLo">51.1&nbsp;%</td>
+ <td class="coverNumLo">45 / 88</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">19 / 19</td>
+ <td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="test-ecc.c.gcov.html">test-ecc.c</a></td>
+ <td class="coverFile"><a href="test-blocklevel.c.gcov.html">test-blocklevel.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=51 height=10 alt="51.1%"><img src="../../snow.png" width=49 height=10 alt="51.1%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=41 height=10 alt="40.8%"><img src="../../snow.png" width=59 height=10 alt="40.8%"></td></tr></table>
</td>
- <td class="coverPerLo">51.1&nbsp;%</td>
- <td class="coverNumLo">45 / 88</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerLo">40.8&nbsp;%</td>
+ <td class="coverNumLo">160 / 392</td>
+ <td class="coverPerLo">60.0&nbsp;%</td>
+ <td class="coverNumLo">6 / 10</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="test-ipmi-hiomap.c.gcov.html">test-ipmi-hiomap.c</a></td>
+ <td class="coverFile"><a href="test-mbox.c.gcov.html">test-mbox.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../emerald.png" width=98 height=10 alt="97.7%"><img src="../../snow.png" width=2 height=10 alt="97.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=62 height=10 alt="61.8%"><img src="../../snow.png" width=38 height=10 alt="61.8%"></td></tr></table>
</td>
- <td class="coverPerHi">97.7&nbsp;%</td>
- <td class="coverNumHi">646 / 661</td>
+ <td class="coverPerLo">61.8&nbsp;%</td>
+ <td class="coverNumLo">94 / 152</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">69 / 69</td>
+ <td class="coverNumHi">3 / 3</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="test-flash.c.gcov.html">test-flash.c</a></td>
+ <td class="coverFile"><a href="mbox-server.c.gcov.html">mbox-server.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../ruby.png" width=67 height=10 alt="66.5%"><img src="../../snow.png" width=33 height=10 alt="66.5%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../amber.png" width=83 height=10 alt="83.1%"><img src="../../snow.png" width=17 height=10 alt="83.1%"></td></tr></table>
</td>
- <td class="coverPerLo">66.5&nbsp;%</td>
- <td class="coverNumLo">173 / 260</td>
+ <td class="coverPerMed">83.1&nbsp;%</td>
+ <td class="coverNumMed">212 / 255</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">11 / 11</td>
+ <td class="coverNumHi">19 / 19</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/libflash/test/index-sort-f.html b/coverage-report/libflash/test/index-sort-f.html
index 4e3b4d8..cb4cdd5 100644
--- a/coverage-report/libflash/test/index-sort-f.html
+++ b/coverage-report/libflash/test/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">119</td>
diff --git a/coverage-report/libflash/test/index-sort-l.html b/coverage-report/libflash/test/index-sort-l.html
index 02ceb42..48a9836 100644
--- a/coverage-report/libflash/test/index-sort-l.html
+++ b/coverage-report/libflash/test/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">119</td>
diff --git a/coverage-report/libflash/test/index.html b/coverage-report/libflash/test/index.html
index 296d16e..b556109 100644
--- a/coverage-report/libflash/test/index.html
+++ b/coverage-report/libflash/test/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">119</td>
diff --git a/coverage-report/libflash/test/mbox-server.c.func-sort-c.html b/coverage-report/libflash/test/mbox-server.c.func-sort-c.html
index 2883fc1..bfe5f2a 100644
--- a/coverage-report/libflash/test/mbox-server.c.func-sort-c.html
+++ b/coverage-report/libflash/test/mbox-server.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">19</td>
@@ -134,15 +134,15 @@
</tr>
<tr>
<td class="coverFn"><a href="mbox-server.c.gcov.html#121">lpc_write</a></td>
- <td class="coverFnHi">6236172</td>
+ <td class="coverFnHi">6236170</td>
</tr>
<tr>
<td class="coverFn"><a href="mbox-server.c.gcov.html#95">lpc_read</a></td>
- <td class="coverFnHi">22434105</td>
+ <td class="coverFnHi">22434100</td>
</tr>
<tr>
<td class="coverFn"><a href="mbox-server.c.gcov.html#66">check_window</a></td>
- <td class="coverFnHi">28670397</td>
+ <td class="coverFnHi">28670400</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libflash/test/mbox-server.c.func.html b/coverage-report/libflash/test/mbox-server.c.func.html
index a216e71..8af2c7a 100644
--- a/coverage-report/libflash/test/mbox-server.c.func.html
+++ b/coverage-report/libflash/test/mbox-server.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">19</td>
@@ -90,7 +90,7 @@
</tr>
<tr>
<td class="coverFn"><a href="mbox-server.c.gcov.html#66">check_window</a></td>
- <td class="coverFnHi">28670397</td>
+ <td class="coverFnHi">28670400</td>
</tr>
<tr>
<td class="coverFn"><a href="mbox-server.c.gcov.html#164">close_window</a></td>
@@ -102,11 +102,11 @@
</tr>
<tr>
<td class="coverFn"><a href="mbox-server.c.gcov.html#95">lpc_read</a></td>
- <td class="coverFnHi">22434105</td>
+ <td class="coverFnHi">22434100</td>
</tr>
<tr>
<td class="coverFn"><a href="mbox-server.c.gcov.html#121">lpc_write</a></td>
- <td class="coverFnHi">6236172</td>
+ <td class="coverFnHi">6236170</td>
</tr>
<tr>
<td class="coverFn"><a href="mbox-server.c.gcov.html#509">mbox_server_destroy</a></td>
diff --git a/coverage-report/libflash/test/mbox-server.c.gcov.html b/coverage-report/libflash/test/mbox-server.c.gcov.html
index 73b083f..c62780c 100644
--- a/coverage-report/libflash/test/mbox-server.c.gcov.html
+++ b/coverage-report/libflash/test/mbox-server.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">19</td>
@@ -136,13 +136,13 @@
<a name="65"><span class="lineNum"> 65 </span> : : } server_state;</a>
<a name="66"><span class="lineNum"> 66 </span> : : </a>
<a name="67"><span class="lineNum"> 67 </span> : : </a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 28670397 : static bool check_window(uint32_t pos, uint32_t size)</span></a>
+<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 28670400 : static bool check_window(uint32_t pos, uint32_t size)</span></a>
<a name="69"><span class="lineNum"> 69 </span> : : {</a>
<a name="70"><span class="lineNum"> 70 </span> : : /* If size is zero then all is well */</a>
-<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 28670397 : if (size == 0)</span></a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 28670400 : if (size == 0)</span></a>
<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 24 : return true;</span></a>
<a name="73"><span class="lineNum"> 73 </span> : : </a>
-<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 28670373 : if (server_state.api == 1) {</span></a>
+<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 28670400 : if (server_state.api == 1) {</span></a>
<a name="75"><span class="lineNum"> 75 </span> : : /*</a>
<a name="76"><span class="lineNum"> 76 </span> : : * Can actually be stricter in v1 because pos is relative to</a>
<a name="77"><span class="lineNum"> 77 </span> : : * flash not window</a>
@@ -156,61 +156,61 @@
<a name="85"><span class="lineNum"> 85 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
<a name="86"><span class="lineNum"> 86 </span> : : }</a>
<a name="87"><span class="lineNum"> 87 </span> : : } else {</a>
-<a name="88"><span class="lineNum"> 88 </span> :<span class="lineCov"> 28566129 : if (pos + size &gt; server_state.win_base + server_state.win_size)</span></a>
+<a name="88"><span class="lineNum"> 88 </span> :<span class="lineCov"> 28566100 : if (pos + size &gt; server_state.win_base + server_state.win_size)</span></a>
<a name="89"><span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
<a name="90"><span class="lineNum"> 90 </span> : : }</a>
-<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 28670373 : return true;</span></a>
+<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 28670400 : return true;</span></a>
<a name="92"><span class="lineNum"> 92 </span> : : }</a>
<a name="93"><span class="lineNum"> 93 </span> : : </a>
<a name="94"><span class="lineNum"> 94 </span> : : /* skiboot test stubs */</a>
<a name="95"><span class="lineNum"> 95 </span> : : int64_t lpc_read(enum OpalLPCAddressType __unused addr_type, uint32_t addr,</a>
<a name="96"><span class="lineNum"> 96 </span> : : uint32_t *data, uint32_t sz);</a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 22434105 : int64_t lpc_read(enum OpalLPCAddressType __unused addr_type, uint32_t addr,</span></a>
+<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 22434100 : int64_t lpc_read(enum OpalLPCAddressType __unused addr_type, uint32_t addr,</span></a>
<a name="98"><span class="lineNum"> 98 </span> : : uint32_t *data, uint32_t sz)</a>
<a name="99"><span class="lineNum"> 99 </span> : : {</a>
<a name="100"><span class="lineNum"> 100 </span> : : /* Let it read from a write window... Spec says it ok! */</a>
-<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 22434105 : if (!check_window(addr, sz) || server_state.win_type == WIN_CLOSED)</span></a>
+<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 22434100 : if (!check_window(addr, sz) || server_state.win_type == WIN_CLOSED)</span></a>
<a name="102"><span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : return 1;</span></a>
<a name="103"><span class="lineNum"> 103 </span> : : </a>
-<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 22434105 : switch (sz) {</span></a>
+<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 22434100 : switch (sz) {</span></a>
<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 308 : case 1:</span></a>
<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 308 : *(uint8_t *)data = *(uint8_t *)(server_state.lpc_base + addr);</span></a>
<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 308 : break;</span></a>
<a name="108"><span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : case 2:</span></a>
<a name="109"><span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : *(uint16_t *)data = be16_to_cpu(*(uint16_t *)(server_state.lpc_base + addr));</span></a>
<a name="110"><span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 22433797 : case 4:</span></a>
-<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 22433797 : *(uint32_t *)data = be32_to_cpu(*(uint32_t *)(server_state.lpc_base + addr));</span></a>
-<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 22433797 : break;</span></a>
+<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 22433800 : case 4:</span></a>
+<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 22433800 : *(uint32_t *)data = be32_to_cpu(*(uint32_t *)(server_state.lpc_base + addr));</span></a>
+<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 22433800 : break;</span></a>
<a name="114"><span class="lineNum"> 114 </span> :<span class="lineNoCov"> 0 : default:</span></a>
<a name="115"><span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Invalid data size %d\n&quot;, sz);</span></a>
<a name="116"><span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : return 1;</span></a>
<a name="117"><span class="lineNum"> 117 </span> : : }</a>
-<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 22434105 : return 0;</span></a>
+<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 22434100 : return 0;</span></a>
<a name="119"><span class="lineNum"> 119 </span> : : }</a>
<a name="120"><span class="lineNum"> 120 </span> : : </a>
<a name="121"><span class="lineNum"> 121 </span> : : int64_t lpc_write(enum OpalLPCAddressType __unused addr_type, uint32_t addr,</a>
<a name="122"><span class="lineNum"> 122 </span> : : uint32_t data, uint32_t sz);</a>
-<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 6236172 : int64_t lpc_write(enum OpalLPCAddressType __unused addr_type, uint32_t addr,</span></a>
+<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 6236170 : int64_t lpc_write(enum OpalLPCAddressType __unused addr_type, uint32_t addr,</span></a>
<a name="124"><span class="lineNum"> 124 </span> : : uint32_t data, uint32_t sz)</a>
<a name="125"><span class="lineNum"> 125 </span> : : {</a>
-<a name="126"><span class="lineNum"> 126 </span> :<span class="lineCov"> 6236172 : if (!check_window(addr, sz) || server_state.win_type != WIN_WRITE)</span></a>
+<a name="126"><span class="lineNum"> 126 </span> :<span class="lineCov"> 6236170 : if (!check_window(addr, sz) || server_state.win_type != WIN_WRITE)</span></a>
<a name="127"><span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : return 1;</span></a>
-<a name="128"><span class="lineNum"> 128 </span> :<span class="lineCov"> 6236172 : switch (sz) {</span></a>
+<a name="128"><span class="lineNum"> 128 </span> :<span class="lineCov"> 6236170 : switch (sz) {</span></a>
<a name="129"><span class="lineNum"> 129 </span> :<span class="lineNoCov"> 0 : case 1:</span></a>
<a name="130"><span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : *(uint8_t *)(server_state.lpc_base + addr) = data;</span></a>
<a name="131"><span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : break;</span></a>
<a name="132"><span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : case 2:</span></a>
<a name="133"><span class="lineNum"> 133 </span> :<span class="lineNoCov"> 0 : *(uint16_t *)(server_state.lpc_base + addr) = cpu_to_be16(data);</span></a>
<a name="134"><span class="lineNum"> 134 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 6236172 : case 4:</span></a>
-<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 6236172 : *(uint32_t *)(server_state.lpc_base + addr) = cpu_to_be32(data);</span></a>
-<a name="137"><span class="lineNum"> 137 </span> :<span class="lineCov"> 6236172 : break;</span></a>
+<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 6236170 : case 4:</span></a>
+<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 6236170 : *(uint32_t *)(server_state.lpc_base + addr) = cpu_to_be32(data);</span></a>
+<a name="137"><span class="lineNum"> 137 </span> :<span class="lineCov"> 6236170 : break;</span></a>
<a name="138"><span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : default:</span></a>
<a name="139"><span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : prerror(&quot;Invalid data size %d\n&quot;, sz);</span></a>
<a name="140"><span class="lineNum"> 140 </span> :<span class="lineNoCov"> 0 : return 1;</span></a>
<a name="141"><span class="lineNum"> 141 </span> : : }</a>
-<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 6236172 : return 0;</span></a>
+<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 6236170 : return 0;</span></a>
<a name="143"><span class="lineNum"> 143 </span> : : }</a>
<a name="144"><span class="lineNum"> 144 </span> : : </a>
<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 4 : int bmc_mbox_register_attn(mbox_attn_cb handler, void *drv_data)</span></a>
diff --git a/coverage-report/libflash/test/stubs.c.func-sort-c.html b/coverage-report/libflash/test/stubs.c.func-sort-c.html
index 6f09fdc..86e33d3 100644
--- a/coverage-report/libflash/test/stubs.c.func-sort-c.html
+++ b/coverage-report/libflash/test/stubs.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
diff --git a/coverage-report/libflash/test/stubs.c.func.html b/coverage-report/libflash/test/stubs.c.func.html
index 95ab58f..ea1c6e7 100644
--- a/coverage-report/libflash/test/stubs.c.func.html
+++ b/coverage-report/libflash/test/stubs.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
diff --git a/coverage-report/libflash/test/stubs.c.gcov.html b/coverage-report/libflash/test/stubs.c.gcov.html
index fbdf685..7e015a9 100644
--- a/coverage-report/libflash/test/stubs.c.gcov.html
+++ b/coverage-report/libflash/test/stubs.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
diff --git a/coverage-report/libflash/test/test-blocklevel.c.func-sort-c.html b/coverage-report/libflash/test/test-blocklevel.c.func-sort-c.html
index 4464314..0c2a234 100644
--- a/coverage-report/libflash/test/test-blocklevel.c.func-sort-c.html
+++ b/coverage-report/libflash/test/test-blocklevel.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/libflash/test/test-blocklevel.c.func.html b/coverage-report/libflash/test/test-blocklevel.c.func.html
index 2ce99f0..c5ed11c 100644
--- a/coverage-report/libflash/test/test-blocklevel.c.func.html
+++ b/coverage-report/libflash/test/test-blocklevel.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/libflash/test/test-blocklevel.c.gcov.html b/coverage-report/libflash/test/test-blocklevel.c.gcov.html
index 4b8b042..de82c29 100644
--- a/coverage-report/libflash/test/test-blocklevel.c.gcov.html
+++ b/coverage-report/libflash/test/test-blocklevel.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
diff --git a/coverage-report/libflash/test/test-ecc.c.func-sort-c.html b/coverage-report/libflash/test/test-ecc.c.func-sort-c.html
index 1f80891..c8c2208 100644
--- a/coverage-report/libflash/test/test-ecc.c.func-sort-c.html
+++ b/coverage-report/libflash/test/test-ecc.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libflash/test/test-ecc.c.func.html b/coverage-report/libflash/test/test-ecc.c.func.html
index e494194..7987ddd 100644
--- a/coverage-report/libflash/test/test-ecc.c.func.html
+++ b/coverage-report/libflash/test/test-ecc.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libflash/test/test-ecc.c.gcov.html b/coverage-report/libflash/test/test-ecc.c.gcov.html
index 93766b7..6d36bf1 100644
--- a/coverage-report/libflash/test/test-ecc.c.gcov.html
+++ b/coverage-report/libflash/test/test-ecc.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libflash/test/test-flash.c.func-sort-c.html b/coverage-report/libflash/test/test-flash.c.func-sort-c.html
index 80a81f4..a720736 100644
--- a/coverage-report/libflash/test/test-flash.c.func-sort-c.html
+++ b/coverage-report/libflash/test/test-flash.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">11</td>
diff --git a/coverage-report/libflash/test/test-flash.c.func.html b/coverage-report/libflash/test/test-flash.c.func.html
index 8fbbc88..c814066 100644
--- a/coverage-report/libflash/test/test-flash.c.func.html
+++ b/coverage-report/libflash/test/test-flash.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">11</td>
diff --git a/coverage-report/libflash/test/test-flash.c.gcov.html b/coverage-report/libflash/test/test-flash.c.gcov.html
index 6ddaa67..a282139 100644
--- a/coverage-report/libflash/test/test-flash.c.gcov.html
+++ b/coverage-report/libflash/test/test-flash.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">11</td>
diff --git a/coverage-report/libflash/test/test-ipmi-hiomap.c.func-sort-c.html b/coverage-report/libflash/test/test-ipmi-hiomap.c.func-sort-c.html
index e38c0ec..4aeb479 100644
--- a/coverage-report/libflash/test/test-ipmi-hiomap.c.func-sort-c.html
+++ b/coverage-report/libflash/test/test-ipmi-hiomap.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">69</td>
diff --git a/coverage-report/libflash/test/test-ipmi-hiomap.c.func.html b/coverage-report/libflash/test/test-ipmi-hiomap.c.func.html
index 76e6ea9..145b85c 100644
--- a/coverage-report/libflash/test/test-ipmi-hiomap.c.func.html
+++ b/coverage-report/libflash/test/test-ipmi-hiomap.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">69</td>
diff --git a/coverage-report/libflash/test/test-ipmi-hiomap.c.gcov.html b/coverage-report/libflash/test/test-ipmi-hiomap.c.gcov.html
index 19c422e..34e72fe 100644
--- a/coverage-report/libflash/test/test-ipmi-hiomap.c.gcov.html
+++ b/coverage-report/libflash/test/test-ipmi-hiomap.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">69</td>
diff --git a/coverage-report/libflash/test/test-mbox.c.func-sort-c.html b/coverage-report/libflash/test/test-mbox.c.func-sort-c.html
index ae5a756..6b1b27d 100644
--- a/coverage-report/libflash/test/test-mbox.c.func-sort-c.html
+++ b/coverage-report/libflash/test/test-mbox.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/libflash/test/test-mbox.c.func.html b/coverage-report/libflash/test/test-mbox.c.func.html
index c137b94..9170af3 100644
--- a/coverage-report/libflash/test/test-mbox.c.func.html
+++ b/coverage-report/libflash/test/test-mbox.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/libflash/test/test-mbox.c.gcov.html b/coverage-report/libflash/test/test-mbox.c.gcov.html
index b520fa1..b204cd6 100644
--- a/coverage-report/libflash/test/test-mbox.c.gcov.html
+++ b/coverage-report/libflash/test/test-mbox.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@@ -156,7 +156,7 @@
<a name="85"><span class="lineNum"> 85 </span> :<span class="lineCov"> 4 : test = calloc(erase_granule * 20, 1);</span></a>
<a name="86"><span class="lineNum"> 86 </span> : : </a>
<a name="87"><span class="lineNum"> 87 </span> : : /* Make up a test pattern */</a>
-<a name="88"><span class="lineNum"> 88 </span> :<span class="lineCov"> 11878404 : for (i = 0; i &lt; erase_granule * 10; i++)</span></a>
+<a name="88"><span class="lineNum"> 88 </span> :<span class="lineCov"> 11878400 : for (i = 0; i &lt; erase_granule * 10; i++)</span></a>
<a name="89"><span class="lineNum"> 89 </span> :<span class="lineCov"> 11878400 : test[i] = i;</span></a>
<a name="90"><span class="lineNum"> 90 </span> : : </a>
<a name="91"><span class="lineNum"> 91 </span> : : /* Write 64k of stuff at 0 and at 128k */</a>
diff --git a/coverage-report/libstb/container.c.func-sort-c.html b/coverage-report/libstb/container.c.func-sort-c.html
index 81bd364..3bbf522 100644
--- a/coverage-report/libstb/container.c.func-sort-c.html
+++ b/coverage-report/libstb/container.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/container.c.func.html b/coverage-report/libstb/container.c.func.html
index 6addaec..beb1484 100644
--- a/coverage-report/libstb/container.c.func.html
+++ b/coverage-report/libstb/container.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/container.c.gcov.html b/coverage-report/libstb/container.c.gcov.html
index f8be28d..f0d9adf 100644
--- a/coverage-report/libstb/container.c.gcov.html
+++ b/coverage-report/libstb/container.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/crypto/pkcs7/index-sort-b.html b/coverage-report/libstb/crypto/pkcs7/index-sort-b.html
index f1778ed..97e7afd 100644
--- a/coverage-report/libstb/crypto/pkcs7/index-sort-b.html
+++ b/coverage-report/libstb/crypto/pkcs7/index-sort-b.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">163</td>
- <td class="headerCovTableEntry">222</td>
- <td class="headerCovTableEntryLo">73.4 %</td>
+ <td class="headerCovTableEntry">168</td>
+ <td class="headerCovTableEntry">223</td>
+ <td class="headerCovTableEntryMed">75.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="pkcs7.c.gcov.html">pkcs7.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=73 height=10 alt="73.4%"><img src="../../../snow.png" width=27 height=10 alt="73.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=75 height=10 alt="75.3%"><img src="../../../snow.png" width=25 height=10 alt="75.3%"></td></tr></table>
</td>
- <td class="coverPerLo">73.4&nbsp;%</td>
- <td class="coverNumLo">163 / 222</td>
+ <td class="coverPerMed">75.3&nbsp;%</td>
+ <td class="coverNumMed">168 / 223</td>
<td class="coverPerHi">92.9&nbsp;%</td>
<td class="coverNumHi">13 / 14</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/libstb/crypto/pkcs7/index-sort-f.html b/coverage-report/libstb/crypto/pkcs7/index-sort-f.html
index cf9a083..b679f09 100644
--- a/coverage-report/libstb/crypto/pkcs7/index-sort-f.html
+++ b/coverage-report/libstb/crypto/pkcs7/index-sort-f.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">163</td>
- <td class="headerCovTableEntry">222</td>
- <td class="headerCovTableEntryLo">73.4 %</td>
+ <td class="headerCovTableEntry">168</td>
+ <td class="headerCovTableEntry">223</td>
+ <td class="headerCovTableEntryMed">75.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="pkcs7.c.gcov.html">pkcs7.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=73 height=10 alt="73.4%"><img src="../../../snow.png" width=27 height=10 alt="73.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=75 height=10 alt="75.3%"><img src="../../../snow.png" width=25 height=10 alt="75.3%"></td></tr></table>
</td>
- <td class="coverPerLo">73.4&nbsp;%</td>
- <td class="coverNumLo">163 / 222</td>
+ <td class="coverPerMed">75.3&nbsp;%</td>
+ <td class="coverNumMed">168 / 223</td>
<td class="coverPerHi">92.9&nbsp;%</td>
<td class="coverNumHi">13 / 14</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/libstb/crypto/pkcs7/index-sort-l.html b/coverage-report/libstb/crypto/pkcs7/index-sort-l.html
index 55dcf16..567c529 100644
--- a/coverage-report/libstb/crypto/pkcs7/index-sort-l.html
+++ b/coverage-report/libstb/crypto/pkcs7/index-sort-l.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">163</td>
- <td class="headerCovTableEntry">222</td>
- <td class="headerCovTableEntryLo">73.4 %</td>
+ <td class="headerCovTableEntry">168</td>
+ <td class="headerCovTableEntry">223</td>
+ <td class="headerCovTableEntryMed">75.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="pkcs7.c.gcov.html">pkcs7.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=73 height=10 alt="73.4%"><img src="../../../snow.png" width=27 height=10 alt="73.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=75 height=10 alt="75.3%"><img src="../../../snow.png" width=25 height=10 alt="75.3%"></td></tr></table>
</td>
- <td class="coverPerLo">73.4&nbsp;%</td>
- <td class="coverNumLo">163 / 222</td>
+ <td class="coverPerMed">75.3&nbsp;%</td>
+ <td class="coverNumMed">168 / 223</td>
<td class="coverPerHi">92.9&nbsp;%</td>
<td class="coverNumHi">13 / 14</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/libstb/crypto/pkcs7/index.html b/coverage-report/libstb/crypto/pkcs7/index.html
index edb8ed3..535b02a 100644
--- a/coverage-report/libstb/crypto/pkcs7/index.html
+++ b/coverage-report/libstb/crypto/pkcs7/index.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">163</td>
- <td class="headerCovTableEntry">222</td>
- <td class="headerCovTableEntryLo">73.4 %</td>
+ <td class="headerCovTableEntry">168</td>
+ <td class="headerCovTableEntry">223</td>
+ <td class="headerCovTableEntryMed">75.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="pkcs7.c.gcov.html">pkcs7.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=73 height=10 alt="73.4%"><img src="../../../snow.png" width=27 height=10 alt="73.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=75 height=10 alt="75.3%"><img src="../../../snow.png" width=25 height=10 alt="75.3%"></td></tr></table>
</td>
- <td class="coverPerLo">73.4&nbsp;%</td>
- <td class="coverNumLo">163 / 222</td>
+ <td class="coverPerMed">75.3&nbsp;%</td>
+ <td class="coverNumMed">168 / 223</td>
<td class="coverPerHi">92.9&nbsp;%</td>
<td class="coverNumHi">13 / 14</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/libstb/crypto/pkcs7/pkcs7.c.func-sort-c.html b/coverage-report/libstb/crypto/pkcs7/pkcs7.c.func-sort-c.html
index 8eb7b12..689a8ab 100644
--- a/coverage-report/libstb/crypto/pkcs7/pkcs7.c.func-sort-c.html
+++ b/coverage-report/libstb/crypto/pkcs7/pkcs7.c.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">163</td>
- <td class="headerCovTableEntry">222</td>
- <td class="headerCovTableEntryLo">73.4 %</td>
+ <td class="headerCovTableEntry">168</td>
+ <td class="headerCovTableEntry">223</td>
+ <td class="headerCovTableEntryMed">75.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
@@ -69,60 +69,60 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#514">mbedtls_pkcs7_signed_data_verify</a></td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#516">mbedtls_pkcs7_signed_data_verify</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="pkcs7.c.gcov.html#105">pkcs7_get_next_content_len</a></td>
- <td class="coverFnHi">12</td>
+ <td class="coverFnHi">15</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#571">mbedtls_pkcs7_free</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#550">mbedtls_pkcs7_signed_hash_verify</a></td>
+ <td class="coverFnHi">16</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#100">mbedtls_pkcs7_init</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#220">pkcs7_get_certificates</a></td>
+ <td class="coverFnHi">17</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#446">mbedtls_pkcs7_parse_der</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#189">pkcs7_get_digest_algorithm_set</a></td>
+ <td class="coverFnHi">17</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#218">pkcs7_get_certificates</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#271">pkcs7_get_signature</a></td>
+ <td class="coverFnHi">17</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#187">pkcs7_get_digest_algorithm_set</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#303">pkcs7_get_signers_info_set</a></td>
+ <td class="coverFnHi">17</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#269">pkcs7_get_signature</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#123">pkcs7_get_version</a></td>
+ <td class="coverFnHi">17</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#383">pkcs7_get_signed_data</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#100">mbedtls_pkcs7_init</a></td>
+ <td class="coverFnHi">19</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#301">pkcs7_get_signers_info_set</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#448">mbedtls_pkcs7_parse_der</a></td>
+ <td class="coverFnHi">19</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#123">pkcs7_get_version</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#385">pkcs7_get_signed_data</a></td>
+ <td class="coverFnHi">19</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#548">mbedtls_pkcs7_signed_hash_verify</a></td>
- <td class="coverFnHi">16</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#573">mbedtls_pkcs7_free</a></td>
+ <td class="coverFnHi">20</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#143">pkcs7_get_content_info_type</a></td>
- <td class="coverFnHi">28</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#175">pkcs7_get_digest_algorithm</a></td>
+ <td class="coverFnHi">34</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#173">pkcs7_get_digest_algorithm</a></td>
- <td class="coverFnHi">28</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#143">pkcs7_get_content_info_type</a></td>
+ <td class="coverFnHi">36</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libstb/crypto/pkcs7/pkcs7.c.func.html b/coverage-report/libstb/crypto/pkcs7/pkcs7.c.func.html
index 783e41a..61f723e 100644
--- a/coverage-report/libstb/crypto/pkcs7/pkcs7.c.func.html
+++ b/coverage-report/libstb/crypto/pkcs7/pkcs7.c.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">163</td>
- <td class="headerCovTableEntry">222</td>
- <td class="headerCovTableEntryLo">73.4 %</td>
+ <td class="headerCovTableEntry">168</td>
+ <td class="headerCovTableEntry">223</td>
+ <td class="headerCovTableEntryMed">75.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
@@ -69,60 +69,60 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="pkcs7.c.func-sort-c.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#571">mbedtls_pkcs7_free</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#573">mbedtls_pkcs7_free</a></td>
+ <td class="coverFnHi">20</td>
</tr>
<tr>
<td class="coverFn"><a href="pkcs7.c.gcov.html#100">mbedtls_pkcs7_init</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFnHi">19</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#446">mbedtls_pkcs7_parse_der</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#448">mbedtls_pkcs7_parse_der</a></td>
+ <td class="coverFnHi">19</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#514">mbedtls_pkcs7_signed_data_verify</a></td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#516">mbedtls_pkcs7_signed_data_verify</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#548">mbedtls_pkcs7_signed_hash_verify</a></td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#550">mbedtls_pkcs7_signed_hash_verify</a></td>
<td class="coverFnHi">16</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#218">pkcs7_get_certificates</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#220">pkcs7_get_certificates</a></td>
+ <td class="coverFnHi">17</td>
</tr>
<tr>
<td class="coverFn"><a href="pkcs7.c.gcov.html#143">pkcs7_get_content_info_type</a></td>
- <td class="coverFnHi">28</td>
+ <td class="coverFnHi">36</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#173">pkcs7_get_digest_algorithm</a></td>
- <td class="coverFnHi">28</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#175">pkcs7_get_digest_algorithm</a></td>
+ <td class="coverFnHi">34</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#187">pkcs7_get_digest_algorithm_set</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#189">pkcs7_get_digest_algorithm_set</a></td>
+ <td class="coverFnHi">17</td>
</tr>
<tr>
<td class="coverFn"><a href="pkcs7.c.gcov.html#105">pkcs7_get_next_content_len</a></td>
- <td class="coverFnHi">12</td>
+ <td class="coverFnHi">15</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#269">pkcs7_get_signature</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#271">pkcs7_get_signature</a></td>
+ <td class="coverFnHi">17</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#383">pkcs7_get_signed_data</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#385">pkcs7_get_signed_data</a></td>
+ <td class="coverFnHi">19</td>
</tr>
<tr>
- <td class="coverFn"><a href="pkcs7.c.gcov.html#301">pkcs7_get_signers_info_set</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="pkcs7.c.gcov.html#303">pkcs7_get_signers_info_set</a></td>
+ <td class="coverFnHi">17</td>
</tr>
<tr>
<td class="coverFn"><a href="pkcs7.c.gcov.html#123">pkcs7_get_version</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFnHi">17</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libstb/crypto/pkcs7/pkcs7.c.gcov.html b/coverage-report/libstb/crypto/pkcs7/pkcs7.c.gcov.html
index cfe5f6d..6a5e5ab 100644
--- a/coverage-report/libstb/crypto/pkcs7/pkcs7.c.gcov.html
+++ b/coverage-report/libstb/crypto/pkcs7/pkcs7.c.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">163</td>
- <td class="headerCovTableEntry">222</td>
- <td class="headerCovTableEntryLo">73.4 %</td>
+ <td class="headerCovTableEntry">168</td>
+ <td class="headerCovTableEntry">223</td>
+ <td class="headerCovTableEntryMed">75.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
@@ -170,41 +170,41 @@
<a name="99"><span class="lineNum"> 99 </span> : : /**</a>
<a name="100"><span class="lineNum"> 100 </span> : : * Initializes the pkcs7 structure.</a>
<a name="101"><span class="lineNum"> 101 </span> : : */</a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 14 : void mbedtls_pkcs7_init( mbedtls_pkcs7 *pkcs7 )</span></a>
+<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 19 : void mbedtls_pkcs7_init( mbedtls_pkcs7 *pkcs7 )</span></a>
<a name="103"><span class="lineNum"> 103 </span> : : {</a>
-<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 14 : memset( pkcs7, 0, sizeof( mbedtls_pkcs7 ) );</span></a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 14 : }</span></a>
+<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 19 : memset( pkcs7, 0, sizeof( mbedtls_pkcs7 ) );</span></a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 19 : }</span></a>
<a name="106"><span class="lineNum"> 106 </span> : : </a>
-<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 12 : static int pkcs7_get_next_content_len( unsigned char **p, unsigned char *end,</span></a>
+<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 15 : static int pkcs7_get_next_content_len( unsigned char **p, unsigned char *end,</span></a>
<a name="108"><span class="lineNum"> 108 </span> : : size_t *len )</a>
<a name="109"><span class="lineNum"> 109 </span> : : {</a>
<a name="110"><span class="lineNum"> 110 </span> : : int ret;</a>
<a name="111"><span class="lineNum"> 111 </span> : : </a>
-<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 12 : if( ( ret = mbedtls_asn1_get_tag( p, end, len, MBEDTLS_ASN1_CONSTRUCTED</span></a>
+<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 15 : if( ( ret = mbedtls_asn1_get_tag( p, end, len, MBEDTLS_ASN1_CONSTRUCTED</span></a>
<a name="113"><span class="lineNum"> 113 </span> : : | MBEDTLS_ASN1_CONTEXT_SPECIFIC ) ) != 0 )</a>
<a name="114"><span class="lineNum"> 114 </span> : : {</a>
<a name="115"><span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_FORMAT + ret );</span></a>
<a name="116"><span class="lineNum"> 116 </span> : : }</a>
<a name="117"><span class="lineNum"> 117 </span> : : </a>
-<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 12 : return( 0 );</span></a>
+<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 15 : return( 0 );</span></a>
<a name="119"><span class="lineNum"> 119 </span> : : }</a>
<a name="120"><span class="lineNum"> 120 </span> : : </a>
<a name="121"><span class="lineNum"> 121 </span> : : /**</a>
<a name="122"><span class="lineNum"> 122 </span> : : * version Version</a>
<a name="123"><span class="lineNum"> 123 </span> : : * Version ::= INTEGER</a>
<a name="124"><span class="lineNum"> 124 </span> : : **/</a>
-<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 14 : static int pkcs7_get_version( unsigned char **p, unsigned char *end, int *ver )</span></a>
+<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 17 : static int pkcs7_get_version( unsigned char **p, unsigned char *end, int *ver )</span></a>
<a name="126"><span class="lineNum"> 126 </span> : : {</a>
<a name="127"><span class="lineNum"> 127 </span> : : int ret;</a>
<a name="128"><span class="lineNum"> 128 </span> : : </a>
-<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 14 : if( ( ret = mbedtls_asn1_get_int( p, end, ver ) ) != 0 )</span></a>
+<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 17 : if( ( ret = mbedtls_asn1_get_int( p, end, ver ) ) != 0 )</span></a>
<a name="130"><span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_FORMAT + ret );</span></a>
<a name="131"><span class="lineNum"> 131 </span> : : </a>
<a name="132"><span class="lineNum"> 132 </span> : : /* If version != 1, return invalid version */</a>
-<a name="133"><span class="lineNum"> 133 </span> :<span class="lineCov"> 14 : if( *ver != MBEDTLS_PKCS7_SUPPORTED_VERSION )</span></a>
+<a name="133"><span class="lineNum"> 133 </span> :<span class="lineCov"> 17 : if( *ver != MBEDTLS_PKCS7_SUPPORTED_VERSION )</span></a>
<a name="134"><span class="lineNum"> 134 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_VERSION );</span></a>
<a name="135"><span class="lineNum"> 135 </span> : : </a>
-<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 14 : return( 0 );</span></a>
+<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 17 : return( 0 );</span></a>
<a name="137"><span class="lineNum"> 137 </span> : : }</a>
<a name="138"><span class="lineNum"> 138 </span> : : </a>
<a name="139"><span class="lineNum"> 139 </span> : : /**</a>
@@ -213,458 +213,460 @@
<a name="142"><span class="lineNum"> 142 </span> : : * content</a>
<a name="143"><span class="lineNum"> 143 </span> : : * [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }</a>
<a name="144"><span class="lineNum"> 144 </span> : : **/</a>
-<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 28 : static int pkcs7_get_content_info_type( unsigned char **p, unsigned char *end,</span></a>
+<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 36 : static int pkcs7_get_content_info_type( unsigned char **p, unsigned char *end,</span></a>
<a name="146"><span class="lineNum"> 146 </span> : : mbedtls_pkcs7_buf *pkcs7 )</a>
<a name="147"><span class="lineNum"> 147 </span> : : {</a>
-<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 28 : size_t len = 0;</span></a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 36 : size_t len = 0;</span></a>
<a name="149"><span class="lineNum"> 149 </span> : : int ret;</a>
-<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 28 : unsigned char *start = *p;</span></a>
+<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 36 : unsigned char *start = *p;</span></a>
<a name="151"><span class="lineNum"> 151 </span> : : </a>
-<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 28 : ret = mbedtls_asn1_get_tag( p, end, &amp;len, MBEDTLS_ASN1_CONSTRUCTED</span></a>
+<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 36 : ret = mbedtls_asn1_get_tag( p, end, &amp;len, MBEDTLS_ASN1_CONSTRUCTED</span></a>
<a name="153"><span class="lineNum"> 153 </span> : : | MBEDTLS_ASN1_SEQUENCE );</a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 28 : if( ret != 0 )</span></a>
-<a name="155"><span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_CONTENT_INFO + ret );</span></a>
-<a name="156"><span class="lineNum"> 156 </span> : : </a>
-<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 28 : ret = mbedtls_asn1_get_tag( p, end, &amp;len, MBEDTLS_ASN1_OID );</span></a>
-<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 28 : if( ret != 0 ) {</span></a>
-<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 2 : *p = start;</span></a>
-<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 2 : return( MBEDTLS_ERR_PKCS7_INVALID_CONTENT_INFO + ret );</span></a>
-<a name="161"><span class="lineNum"> 161 </span> : : }</a>
-<a name="162"><span class="lineNum"> 162 </span> : : </a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 26 : pkcs7-&gt;tag = MBEDTLS_ASN1_OID;</span></a>
-<a name="164"><span class="lineNum"> 164 </span> :<span class="lineCov"> 26 : pkcs7-&gt;len = len;</span></a>
-<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 26 : pkcs7-&gt;p = *p;</span></a>
-<a name="166"><span class="lineNum"> 166 </span> : : </a>
-<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 26 : return( ret );</span></a>
-<a name="168"><span class="lineNum"> 168 </span> : : }</a>
-<a name="169"><span class="lineNum"> 169 </span> : : </a>
-<a name="170"><span class="lineNum"> 170 </span> : : /**</a>
-<a name="171"><span class="lineNum"> 171 </span> : : * DigestAlgorithmIdentifier ::= AlgorithmIdentifier</a>
-<a name="172"><span class="lineNum"> 172 </span> : : *</a>
-<a name="173"><span class="lineNum"> 173 </span> : : * This is from x509.h</a>
-<a name="174"><span class="lineNum"> 174 </span> : : **/</a>
-<a name="175"><span class="lineNum"> 175 </span> :<span class="lineCov"> 28 : static int pkcs7_get_digest_algorithm( unsigned char **p, unsigned char *end,</span></a>
-<a name="176"><span class="lineNum"> 176 </span> : : mbedtls_x509_buf *alg )</a>
-<a name="177"><span class="lineNum"> 177 </span> : : {</a>
-<a name="178"><span class="lineNum"> 178 </span> : : int ret;</a>
-<a name="179"><span class="lineNum"> 179 </span> : : </a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 28 : if( ( ret = mbedtls_asn1_get_alg_null( p, end, alg ) ) != 0 )</span></a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_ALG + ret );</span></a>
-<a name="182"><span class="lineNum"> 182 </span> : : </a>
-<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 28 : return( 0 );</span></a>
-<a name="184"><span class="lineNum"> 184 </span> : : }</a>
-<a name="185"><span class="lineNum"> 185 </span> : : </a>
-<a name="186"><span class="lineNum"> 186 </span> : : /**</a>
-<a name="187"><span class="lineNum"> 187 </span> : : * DigestAlgorithmIdentifiers :: SET of DigestAlgorithmIdentifier</a>
-<a name="188"><span class="lineNum"> 188 </span> : : **/</a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 14 : static int pkcs7_get_digest_algorithm_set( unsigned char **p,</span></a>
-<a name="190"><span class="lineNum"> 190 </span> : : unsigned char *end,</a>
-<a name="191"><span class="lineNum"> 191 </span> : : mbedtls_x509_buf *alg )</a>
-<a name="192"><span class="lineNum"> 192 </span> : : {</a>
-<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 14 : size_t len = 0;</span></a>
-<a name="194"><span class="lineNum"> 194 </span> : : int ret;</a>
-<a name="195"><span class="lineNum"> 195 </span> : : </a>
-<a name="196"><span class="lineNum"> 196 </span> :<span class="lineCov"> 14 : ret = mbedtls_asn1_get_tag( p, end, &amp;len, MBEDTLS_ASN1_CONSTRUCTED</span></a>
-<a name="197"><span class="lineNum"> 197 </span> : : | MBEDTLS_ASN1_SET );</a>
-<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_ALG + ret );</span></a>
-<a name="200"><span class="lineNum"> 200 </span> : : </a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 14 : end = *p + len;</span></a>
+<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 36 : if( ret != 0 ) {</span></a>
+<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 2 : *p = start;</span></a>
+<a name="156"><span class="lineNum"> 156 </span> :<span class="lineCov"> 2 : return( MBEDTLS_ERR_PKCS7_INVALID_CONTENT_INFO + ret );</span></a>
+<a name="157"><span class="lineNum"> 157 </span> : : }</a>
+<a name="158"><span class="lineNum"> 158 </span> : : </a>
+<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 34 : ret = mbedtls_asn1_get_tag( p, end, &amp;len, MBEDTLS_ASN1_OID );</span></a>
+<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 34 : if( ret != 0 ) {</span></a>
+<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 2 : *p = start;</span></a>
+<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 2 : return( MBEDTLS_ERR_PKCS7_INVALID_CONTENT_INFO + ret );</span></a>
+<a name="163"><span class="lineNum"> 163 </span> : : }</a>
+<a name="164"><span class="lineNum"> 164 </span> : : </a>
+<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 32 : pkcs7-&gt;tag = MBEDTLS_ASN1_OID;</span></a>
+<a name="166"><span class="lineNum"> 166 </span> :<span class="lineCov"> 32 : pkcs7-&gt;len = len;</span></a>
+<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 32 : pkcs7-&gt;p = *p;</span></a>
+<a name="168"><span class="lineNum"> 168 </span> : : </a>
+<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 32 : return( ret );</span></a>
+<a name="170"><span class="lineNum"> 170 </span> : : }</a>
+<a name="171"><span class="lineNum"> 171 </span> : : </a>
+<a name="172"><span class="lineNum"> 172 </span> : : /**</a>
+<a name="173"><span class="lineNum"> 173 </span> : : * DigestAlgorithmIdentifier ::= AlgorithmIdentifier</a>
+<a name="174"><span class="lineNum"> 174 </span> : : *</a>
+<a name="175"><span class="lineNum"> 175 </span> : : * This is from x509.h</a>
+<a name="176"><span class="lineNum"> 176 </span> : : **/</a>
+<a name="177"><span class="lineNum"> 177 </span> :<span class="lineCov"> 34 : static int pkcs7_get_digest_algorithm( unsigned char **p, unsigned char *end,</span></a>
+<a name="178"><span class="lineNum"> 178 </span> : : mbedtls_x509_buf *alg )</a>
+<a name="179"><span class="lineNum"> 179 </span> : : {</a>
+<a name="180"><span class="lineNum"> 180 </span> : : int ret;</a>
+<a name="181"><span class="lineNum"> 181 </span> : : </a>
+<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 34 : if( ( ret = mbedtls_asn1_get_alg_null( p, end, alg ) ) != 0 )</span></a>
+<a name="183"><span class="lineNum"> 183 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_ALG + ret );</span></a>
+<a name="184"><span class="lineNum"> 184 </span> : : </a>
+<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 34 : return( 0 );</span></a>
+<a name="186"><span class="lineNum"> 186 </span> : : }</a>
+<a name="187"><span class="lineNum"> 187 </span> : : </a>
+<a name="188"><span class="lineNum"> 188 </span> : : /**</a>
+<a name="189"><span class="lineNum"> 189 </span> : : * DigestAlgorithmIdentifiers :: SET of DigestAlgorithmIdentifier</a>
+<a name="190"><span class="lineNum"> 190 </span> : : **/</a>
+<a name="191"><span class="lineNum"> 191 </span> :<span class="lineCov"> 17 : static int pkcs7_get_digest_algorithm_set( unsigned char **p,</span></a>
+<a name="192"><span class="lineNum"> 192 </span> : : unsigned char *end,</a>
+<a name="193"><span class="lineNum"> 193 </span> : : mbedtls_x509_buf *alg )</a>
+<a name="194"><span class="lineNum"> 194 </span> : : {</a>
+<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 17 : size_t len = 0;</span></a>
+<a name="196"><span class="lineNum"> 196 </span> : : int ret;</a>
+<a name="197"><span class="lineNum"> 197 </span> : : </a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 17 : ret = mbedtls_asn1_get_tag( p, end, &amp;len, MBEDTLS_ASN1_CONSTRUCTED</span></a>
+<a name="199"><span class="lineNum"> 199 </span> : : | MBEDTLS_ASN1_SET );</a>
+<a name="200"><span class="lineNum"> 200 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="201"><span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_ALG + ret );</span></a>
<a name="202"><span class="lineNum"> 202 </span> : : </a>
-<a name="203"><span class="lineNum"> 203 </span> : : /** For now, it assumes there is only one digest algorithm specified **/</a>
-<a name="204"><span class="lineNum"> 204 </span> :<span class="lineCov"> 14 : ret = mbedtls_asn1_get_alg_null( p, end, alg );</span></a>
-<a name="205"><span class="lineNum"> 205 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="206"><span class="lineNum"> 206 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_ALG + ret );</span></a>
-<a name="207"><span class="lineNum"> 207 </span> : : </a>
-<a name="208"><span class="lineNum"> 208 </span> :<span class="lineCov"> 14 : if (*p != end)</span></a>
-<a name="209"><span class="lineNum"> 209 </span> :<span class="lineNoCov"> 0 : return ( MBEDTLS_ERR_PKCS7_INVALID_FORMAT );</span></a>
-<a name="210"><span class="lineNum"> 210 </span> : : </a>
-<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 14 : return( 0 );</span></a>
-<a name="212"><span class="lineNum"> 212 </span> : : }</a>
-<a name="213"><span class="lineNum"> 213 </span> : : </a>
-<a name="214"><span class="lineNum"> 214 </span> : : /**</a>
-<a name="215"><span class="lineNum"> 215 </span> : : * certificates :: SET OF ExtendedCertificateOrCertificate,</a>
-<a name="216"><span class="lineNum"> 216 </span> : : * ExtendedCertificateOrCertificate ::= CHOICE {</a>
-<a name="217"><span class="lineNum"> 217 </span> : : * certificate Certificate -- x509,</a>
-<a name="218"><span class="lineNum"> 218 </span> : : * extendedCertificate[0] IMPLICIT ExtendedCertificate }</a>
-<a name="219"><span class="lineNum"> 219 </span> : : **/</a>
-<a name="220"><span class="lineNum"> 220 </span> :<span class="lineCov"> 14 : static int pkcs7_get_certificates( unsigned char **p, unsigned char *end,</span></a>
-<a name="221"><span class="lineNum"> 221 </span> : : mbedtls_x509_crt *certs )</a>
-<a name="222"><span class="lineNum"> 222 </span> : : {</a>
-<a name="223"><span class="lineNum"> 223 </span> : : int ret;</a>
-<a name="224"><span class="lineNum"> 224 </span> :<span class="lineCov"> 14 : size_t len1 = 0;</span></a>
-<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 14 : size_t len2 = 0;</span></a>
-<a name="226"><span class="lineNum"> 226 </span> : : unsigned char *end_set, *end_cert;</a>
-<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 14 : unsigned char *start = *p;</span></a>
-<a name="228"><span class="lineNum"> 228 </span> : : </a>
-<a name="229"><span class="lineNum"> 229 </span> :<span class="lineCov"> 14 : if( ( ret = mbedtls_asn1_get_tag( p, end, &amp;len1, MBEDTLS_ASN1_CONSTRUCTED</span></a>
-<a name="230"><span class="lineNum"> 230 </span> : : | MBEDTLS_ASN1_CONTEXT_SPECIFIC ) ) != 0 )</a>
-<a name="231"><span class="lineNum"> 231 </span> : : {</a>
-<a name="232"><span class="lineNum"> 232 </span> :<span class="lineNoCov"> 0 : if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG )</span></a>
-<a name="233"><span class="lineNum"> 233 </span> :<span class="lineNoCov"> 0 : return( 0 );</span></a>
-<a name="234"><span class="lineNum"> 234 </span> : : </a>
-<a name="235"><span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_FORMAT + ret );</span></a>
-<a name="236"><span class="lineNum"> 236 </span> : : }</a>
-<a name="237"><span class="lineNum"> 237 </span> :<span class="lineCov"> 14 : start = *p;</span></a>
-<a name="238"><span class="lineNum"> 238 </span> :<span class="lineCov"> 14 : end_set = *p + len1;</span></a>
-<a name="239"><span class="lineNum"> 239 </span> : : </a>
-<a name="240"><span class="lineNum"> 240 </span> : : /* This is to verify that there is only signer certificate, it can</a>
-<a name="241"><span class="lineNum"> 241 </span> : : have its chain though. */</a>
-<a name="242"><span class="lineNum"> 242 </span> :<span class="lineCov"> 14 : ret = mbedtls_asn1_get_tag( p, end_set, &amp;len2, MBEDTLS_ASN1_CONSTRUCTED</span></a>
-<a name="243"><span class="lineNum"> 243 </span> : : | MBEDTLS_ASN1_SEQUENCE );</a>
-<a name="244"><span class="lineNum"> 244 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="245"><span class="lineNum"> 245 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_FORMAT + ret );</span></a>
-<a name="246"><span class="lineNum"> 246 </span> : : </a>
-<a name="247"><span class="lineNum"> 247 </span> :<span class="lineCov"> 14 : end_cert = *p + len2;</span></a>
+<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 17 : end = *p + len;</span></a>
+<a name="204"><span class="lineNum"> 204 </span> : : </a>
+<a name="205"><span class="lineNum"> 205 </span> : : /** For now, it assumes there is only one digest algorithm specified **/</a>
+<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 17 : ret = mbedtls_asn1_get_alg_null( p, end, alg );</span></a>
+<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="208"><span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_ALG + ret );</span></a>
+<a name="209"><span class="lineNum"> 209 </span> : : </a>
+<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 17 : if (*p != end)</span></a>
+<a name="211"><span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : return ( MBEDTLS_ERR_PKCS7_INVALID_FORMAT );</span></a>
+<a name="212"><span class="lineNum"> 212 </span> : : </a>
+<a name="213"><span class="lineNum"> 213 </span> :<span class="lineCov"> 17 : return( 0 );</span></a>
+<a name="214"><span class="lineNum"> 214 </span> : : }</a>
+<a name="215"><span class="lineNum"> 215 </span> : : </a>
+<a name="216"><span class="lineNum"> 216 </span> : : /**</a>
+<a name="217"><span class="lineNum"> 217 </span> : : * certificates :: SET OF ExtendedCertificateOrCertificate,</a>
+<a name="218"><span class="lineNum"> 218 </span> : : * ExtendedCertificateOrCertificate ::= CHOICE {</a>
+<a name="219"><span class="lineNum"> 219 </span> : : * certificate Certificate -- x509,</a>
+<a name="220"><span class="lineNum"> 220 </span> : : * extendedCertificate[0] IMPLICIT ExtendedCertificate }</a>
+<a name="221"><span class="lineNum"> 221 </span> : : **/</a>
+<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 17 : static int pkcs7_get_certificates( unsigned char **p, unsigned char *end,</span></a>
+<a name="223"><span class="lineNum"> 223 </span> : : mbedtls_x509_crt *certs )</a>
+<a name="224"><span class="lineNum"> 224 </span> : : {</a>
+<a name="225"><span class="lineNum"> 225 </span> : : int ret;</a>
+<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 17 : size_t len1 = 0;</span></a>
+<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 17 : size_t len2 = 0;</span></a>
+<a name="228"><span class="lineNum"> 228 </span> : : unsigned char *end_set, *end_cert;</a>
+<a name="229"><span class="lineNum"> 229 </span> :<span class="lineCov"> 17 : unsigned char *start = *p;</span></a>
+<a name="230"><span class="lineNum"> 230 </span> : : </a>
+<a name="231"><span class="lineNum"> 231 </span> :<span class="lineCov"> 17 : if( ( ret = mbedtls_asn1_get_tag( p, end, &amp;len1, MBEDTLS_ASN1_CONSTRUCTED</span></a>
+<a name="232"><span class="lineNum"> 232 </span> : : | MBEDTLS_ASN1_CONTEXT_SPECIFIC ) ) != 0 )</a>
+<a name="233"><span class="lineNum"> 233 </span> : : {</a>
+<a name="234"><span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG )</span></a>
+<a name="235"><span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : return( 0 );</span></a>
+<a name="236"><span class="lineNum"> 236 </span> : : </a>
+<a name="237"><span class="lineNum"> 237 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_FORMAT + ret );</span></a>
+<a name="238"><span class="lineNum"> 238 </span> : : }</a>
+<a name="239"><span class="lineNum"> 239 </span> :<span class="lineCov"> 17 : start = *p;</span></a>
+<a name="240"><span class="lineNum"> 240 </span> :<span class="lineCov"> 17 : end_set = *p + len1;</span></a>
+<a name="241"><span class="lineNum"> 241 </span> : : </a>
+<a name="242"><span class="lineNum"> 242 </span> : : /* This is to verify that there is only signer certificate, it can</a>
+<a name="243"><span class="lineNum"> 243 </span> : : have its chain though. */</a>
+<a name="244"><span class="lineNum"> 244 </span> :<span class="lineCov"> 17 : ret = mbedtls_asn1_get_tag( p, end_set, &amp;len2, MBEDTLS_ASN1_CONSTRUCTED</span></a>
+<a name="245"><span class="lineNum"> 245 </span> : : | MBEDTLS_ASN1_SEQUENCE );</a>
+<a name="246"><span class="lineNum"> 246 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="247"><span class="lineNum"> 247 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_FORMAT + ret );</span></a>
<a name="248"><span class="lineNum"> 248 </span> : : </a>
-<a name="249"><span class="lineNum"> 249 </span> :<span class="lineCov"> 14 : if (end_cert != end_set)</span></a>
-<a name="250"><span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : return (MBEDTLS_ERR_PKCS7_INVALID_FORMAT);</span></a>
-<a name="251"><span class="lineNum"> 251 </span> : : </a>
-<a name="252"><span class="lineNum"> 252 </span> : : /* Since it satisfies the condition of single signer, continue parsing */</a>
-<a name="253"><span class="lineNum"> 253 </span> :<span class="lineCov"> 14 : *p = start;</span></a>
-<a name="254"><span class="lineNum"> 254 </span> :<span class="lineCov"> 14 : if( ( ret = mbedtls_x509_crt_parse( certs, *p, len1 ) ) &lt; 0 )</span></a>
-<a name="255"><span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
-<a name="256"><span class="lineNum"> 256 </span> : : </a>
-<a name="257"><span class="lineNum"> 257 </span> :<span class="lineCov"> 14 : *p = *p + len1;</span></a>
+<a name="249"><span class="lineNum"> 249 </span> :<span class="lineCov"> 17 : end_cert = *p + len2;</span></a>
+<a name="250"><span class="lineNum"> 250 </span> : : </a>
+<a name="251"><span class="lineNum"> 251 </span> :<span class="lineCov"> 17 : if (end_cert != end_set)</span></a>
+<a name="252"><span class="lineNum"> 252 </span> :<span class="lineNoCov"> 0 : return (MBEDTLS_ERR_PKCS7_INVALID_FORMAT);</span></a>
+<a name="253"><span class="lineNum"> 253 </span> : : </a>
+<a name="254"><span class="lineNum"> 254 </span> : : /* Since it satisfies the condition of single signer, continue parsing */</a>
+<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 17 : *p = start;</span></a>
+<a name="256"><span class="lineNum"> 256 </span> :<span class="lineCov"> 17 : if( ( ret = mbedtls_x509_crt_parse( certs, *p, len1 ) ) &lt; 0 )</span></a>
+<a name="257"><span class="lineNum"> 257 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
<a name="258"><span class="lineNum"> 258 </span> : : </a>
-<a name="259"><span class="lineNum"> 259 </span> : : /**</a>
-<a name="260"><span class="lineNum"> 260 </span> : : * Currently we do not check for certificate chain, so we are not handling</a>
-<a name="261"><span class="lineNum"> 261 </span> : : * &quot;&gt; 0&quot; case. Return if atleast one certificate in the chain is correctly</a>
-<a name="262"><span class="lineNum"> 262 </span> : : * parsed.</a>
-<a name="263"><span class="lineNum"> 263 </span> : : **/</a>
-<a name="264"><span class="lineNum"> 264 </span> : : </a>
-<a name="265"><span class="lineNum"> 265 </span> :<span class="lineCov"> 14 : return( 0 );</span></a>
-<a name="266"><span class="lineNum"> 266 </span> : : }</a>
-<a name="267"><span class="lineNum"> 267 </span> : : </a>
-<a name="268"><span class="lineNum"> 268 </span> : : /**</a>
-<a name="269"><span class="lineNum"> 269 </span> : : * EncryptedDigest ::= OCTET STRING</a>
-<a name="270"><span class="lineNum"> 270 </span> : : **/</a>
-<a name="271"><span class="lineNum"> 271 </span> :<span class="lineCov"> 14 : static int pkcs7_get_signature( unsigned char **p, unsigned char *end,</span></a>
-<a name="272"><span class="lineNum"> 272 </span> : : mbedtls_pkcs7_buf *signature )</a>
-<a name="273"><span class="lineNum"> 273 </span> : : {</a>
-<a name="274"><span class="lineNum"> 274 </span> : : int ret;</a>
-<a name="275"><span class="lineNum"> 275 </span> :<span class="lineCov"> 14 : size_t len = 0;</span></a>
-<a name="276"><span class="lineNum"> 276 </span> : : </a>
-<a name="277"><span class="lineNum"> 277 </span> :<span class="lineCov"> 14 : ret = mbedtls_asn1_get_tag( p, end, &amp;len, MBEDTLS_ASN1_OCTET_STRING );</span></a>
-<a name="278"><span class="lineNum"> 278 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="279"><span class="lineNum"> 279 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_SIGNATURE + ret );</span></a>
-<a name="280"><span class="lineNum"> 280 </span> : : </a>
-<a name="281"><span class="lineNum"> 281 </span> :<span class="lineCov"> 14 : signature-&gt;tag = MBEDTLS_ASN1_OCTET_STRING;</span></a>
-<a name="282"><span class="lineNum"> 282 </span> :<span class="lineCov"> 14 : signature-&gt;len = len;</span></a>
-<a name="283"><span class="lineNum"> 283 </span> :<span class="lineCov"> 14 : signature-&gt;p = *p;</span></a>
-<a name="284"><span class="lineNum"> 284 </span> : : </a>
-<a name="285"><span class="lineNum"> 285 </span> :<span class="lineCov"> 14 : *p = *p + len;</span></a>
+<a name="259"><span class="lineNum"> 259 </span> :<span class="lineCov"> 17 : *p = *p + len1;</span></a>
+<a name="260"><span class="lineNum"> 260 </span> : : </a>
+<a name="261"><span class="lineNum"> 261 </span> : : /**</a>
+<a name="262"><span class="lineNum"> 262 </span> : : * Currently we do not check for certificate chain, so we are not handling</a>
+<a name="263"><span class="lineNum"> 263 </span> : : * &quot;&gt; 0&quot; case. Return if atleast one certificate in the chain is correctly</a>
+<a name="264"><span class="lineNum"> 264 </span> : : * parsed.</a>
+<a name="265"><span class="lineNum"> 265 </span> : : **/</a>
+<a name="266"><span class="lineNum"> 266 </span> : : </a>
+<a name="267"><span class="lineNum"> 267 </span> :<span class="lineCov"> 17 : return( 0 );</span></a>
+<a name="268"><span class="lineNum"> 268 </span> : : }</a>
+<a name="269"><span class="lineNum"> 269 </span> : : </a>
+<a name="270"><span class="lineNum"> 270 </span> : : /**</a>
+<a name="271"><span class="lineNum"> 271 </span> : : * EncryptedDigest ::= OCTET STRING</a>
+<a name="272"><span class="lineNum"> 272 </span> : : **/</a>
+<a name="273"><span class="lineNum"> 273 </span> :<span class="lineCov"> 17 : static int pkcs7_get_signature( unsigned char **p, unsigned char *end,</span></a>
+<a name="274"><span class="lineNum"> 274 </span> : : mbedtls_pkcs7_buf *signature )</a>
+<a name="275"><span class="lineNum"> 275 </span> : : {</a>
+<a name="276"><span class="lineNum"> 276 </span> : : int ret;</a>
+<a name="277"><span class="lineNum"> 277 </span> :<span class="lineCov"> 17 : size_t len = 0;</span></a>
+<a name="278"><span class="lineNum"> 278 </span> : : </a>
+<a name="279"><span class="lineNum"> 279 </span> :<span class="lineCov"> 17 : ret = mbedtls_asn1_get_tag( p, end, &amp;len, MBEDTLS_ASN1_OCTET_STRING );</span></a>
+<a name="280"><span class="lineNum"> 280 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="281"><span class="lineNum"> 281 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_SIGNATURE + ret );</span></a>
+<a name="282"><span class="lineNum"> 282 </span> : : </a>
+<a name="283"><span class="lineNum"> 283 </span> :<span class="lineCov"> 17 : signature-&gt;tag = MBEDTLS_ASN1_OCTET_STRING;</span></a>
+<a name="284"><span class="lineNum"> 284 </span> :<span class="lineCov"> 17 : signature-&gt;len = len;</span></a>
+<a name="285"><span class="lineNum"> 285 </span> :<span class="lineCov"> 17 : signature-&gt;p = *p;</span></a>
<a name="286"><span class="lineNum"> 286 </span> : : </a>
-<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 14 : return( 0 );</span></a>
-<a name="288"><span class="lineNum"> 288 </span> : : }</a>
-<a name="289"><span class="lineNum"> 289 </span> : : </a>
-<a name="290"><span class="lineNum"> 290 </span> : : /**</a>
-<a name="291"><span class="lineNum"> 291 </span> : : * SignerInfos ::= SET of SignerInfo</a>
-<a name="292"><span class="lineNum"> 292 </span> : : * SignerInfo ::= SEQUENCE {</a>
-<a name="293"><span class="lineNum"> 293 </span> : : * version Version;</a>
-<a name="294"><span class="lineNum"> 294 </span> : : * issuerAndSerialNumber IssuerAndSerialNumber,</a>
-<a name="295"><span class="lineNum"> 295 </span> : : * digestAlgorithm DigestAlgorithmIdentifier,</a>
-<a name="296"><span class="lineNum"> 296 </span> : : * authenticatedAttributes</a>
-<a name="297"><span class="lineNum"> 297 </span> : : * [0] IMPLICIT Attributes OPTIONAL,</a>
-<a name="298"><span class="lineNum"> 298 </span> : : * digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,</a>
-<a name="299"><span class="lineNum"> 299 </span> : : * encryptedDigest EncryptedDigest,</a>
-<a name="300"><span class="lineNum"> 300 </span> : : * unauthenticatedAttributes</a>
-<a name="301"><span class="lineNum"> 301 </span> : : * [1] IMPLICIT Attributes OPTIONAL,</a>
-<a name="302"><span class="lineNum"> 302 </span> : : **/</a>
-<a name="303"><span class="lineNum"> 303 </span> :<span class="lineCov"> 14 : static int pkcs7_get_signers_info_set( unsigned char **p, unsigned char *end,</span></a>
-<a name="304"><span class="lineNum"> 304 </span> : : mbedtls_pkcs7_signer_info *signers_set )</a>
-<a name="305"><span class="lineNum"> 305 </span> : : {</a>
-<a name="306"><span class="lineNum"> 306 </span> : : unsigned char *end_set;</a>
-<a name="307"><span class="lineNum"> 307 </span> : : int ret;</a>
-<a name="308"><span class="lineNum"> 308 </span> :<span class="lineCov"> 14 : size_t len = 0;</span></a>
-<a name="309"><span class="lineNum"> 309 </span> : : </a>
-<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 14 : ret = mbedtls_asn1_get_tag( p, end, &amp;len, MBEDTLS_ASN1_CONSTRUCTED</span></a>
-<a name="311"><span class="lineNum"> 311 </span> : : | MBEDTLS_ASN1_SET );</a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="313"><span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_SIGNER_INFO + ret );</span></a>
-<a name="314"><span class="lineNum"> 314 </span> : : </a>
-<a name="315"><span class="lineNum"> 315 </span> :<span class="lineCov"> 14 : end_set = *p + len;</span></a>
+<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 17 : *p = *p + len;</span></a>
+<a name="288"><span class="lineNum"> 288 </span> : : </a>
+<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 17 : return( 0 );</span></a>
+<a name="290"><span class="lineNum"> 290 </span> : : }</a>
+<a name="291"><span class="lineNum"> 291 </span> : : </a>
+<a name="292"><span class="lineNum"> 292 </span> : : /**</a>
+<a name="293"><span class="lineNum"> 293 </span> : : * SignerInfos ::= SET of SignerInfo</a>
+<a name="294"><span class="lineNum"> 294 </span> : : * SignerInfo ::= SEQUENCE {</a>
+<a name="295"><span class="lineNum"> 295 </span> : : * version Version;</a>
+<a name="296"><span class="lineNum"> 296 </span> : : * issuerAndSerialNumber IssuerAndSerialNumber,</a>
+<a name="297"><span class="lineNum"> 297 </span> : : * digestAlgorithm DigestAlgorithmIdentifier,</a>
+<a name="298"><span class="lineNum"> 298 </span> : : * authenticatedAttributes</a>
+<a name="299"><span class="lineNum"> 299 </span> : : * [0] IMPLICIT Attributes OPTIONAL,</a>
+<a name="300"><span class="lineNum"> 300 </span> : : * digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,</a>
+<a name="301"><span class="lineNum"> 301 </span> : : * encryptedDigest EncryptedDigest,</a>
+<a name="302"><span class="lineNum"> 302 </span> : : * unauthenticatedAttributes</a>
+<a name="303"><span class="lineNum"> 303 </span> : : * [1] IMPLICIT Attributes OPTIONAL,</a>
+<a name="304"><span class="lineNum"> 304 </span> : : **/</a>
+<a name="305"><span class="lineNum"> 305 </span> :<span class="lineCov"> 17 : static int pkcs7_get_signers_info_set( unsigned char **p, unsigned char *end,</span></a>
+<a name="306"><span class="lineNum"> 306 </span> : : mbedtls_pkcs7_signer_info *signers_set )</a>
+<a name="307"><span class="lineNum"> 307 </span> : : {</a>
+<a name="308"><span class="lineNum"> 308 </span> : : unsigned char *end_set;</a>
+<a name="309"><span class="lineNum"> 309 </span> : : int ret;</a>
+<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 17 : size_t len = 0;</span></a>
+<a name="311"><span class="lineNum"> 311 </span> : : </a>
+<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 17 : ret = mbedtls_asn1_get_tag( p, end, &amp;len, MBEDTLS_ASN1_CONSTRUCTED</span></a>
+<a name="313"><span class="lineNum"> 313 </span> : : | MBEDTLS_ASN1_SET );</a>
+<a name="314"><span class="lineNum"> 314 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="315"><span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_SIGNER_INFO + ret );</span></a>
<a name="316"><span class="lineNum"> 316 </span> : : </a>
-<a name="317"><span class="lineNum"> 317 </span> :<span class="lineCov"> 14 : ret = mbedtls_asn1_get_tag( p, end_set, &amp;len, MBEDTLS_ASN1_CONSTRUCTED</span></a>
-<a name="318"><span class="lineNum"> 318 </span> : : | MBEDTLS_ASN1_SEQUENCE );</a>
-<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="320"><span class="lineNum"> 320 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_SIGNER_INFO + ret );</span></a>
-<a name="321"><span class="lineNum"> 321 </span> : : </a>
-<a name="322"><span class="lineNum"> 322 </span> :<span class="lineCov"> 14 : end_set = *p + len;</span></a>
+<a name="317"><span class="lineNum"> 317 </span> :<span class="lineCov"> 17 : end_set = *p + len;</span></a>
+<a name="318"><span class="lineNum"> 318 </span> : : </a>
+<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 17 : ret = mbedtls_asn1_get_tag( p, end_set, &amp;len, MBEDTLS_ASN1_CONSTRUCTED</span></a>
+<a name="320"><span class="lineNum"> 320 </span> : : | MBEDTLS_ASN1_SEQUENCE );</a>
+<a name="321"><span class="lineNum"> 321 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="322"><span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_SIGNER_INFO + ret );</span></a>
<a name="323"><span class="lineNum"> 323 </span> : : </a>
-<a name="324"><span class="lineNum"> 324 </span> :<span class="lineCov"> 14 : ret = mbedtls_asn1_get_int( p, end_set, &amp;signers_set-&gt;version );</span></a>
-<a name="325"><span class="lineNum"> 325 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="326"><span class="lineNum"> 326 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_SIGNER_INFO + ret );</span></a>
-<a name="327"><span class="lineNum"> 327 </span> : : </a>
-<a name="328"><span class="lineNum"> 328 </span> :<span class="lineCov"> 14 : ret = mbedtls_asn1_get_tag( p, end_set, &amp;len, MBEDTLS_ASN1_CONSTRUCTED</span></a>
-<a name="329"><span class="lineNum"> 329 </span> : : | MBEDTLS_ASN1_SEQUENCE );</a>
-<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="331"><span class="lineNum"> 331 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_SIGNER_INFO + ret );</span></a>
-<a name="332"><span class="lineNum"> 332 </span> : : </a>
-<a name="333"><span class="lineNum"> 333 </span> : : /* Parsing IssuerAndSerialNumber */</a>
-<a name="334"><span class="lineNum"> 334 </span> :<span class="lineCov"> 14 : signers_set-&gt;issuer_raw.p = *p;</span></a>
-<a name="335"><span class="lineNum"> 335 </span> : : </a>
-<a name="336"><span class="lineNum"> 336 </span> :<span class="lineCov"> 14 : ret = mbedtls_asn1_get_tag( p, end_set, &amp;len, MBEDTLS_ASN1_CONSTRUCTED</span></a>
-<a name="337"><span class="lineNum"> 337 </span> : : | MBEDTLS_ASN1_SEQUENCE );</a>
-<a name="338"><span class="lineNum"> 338 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="339"><span class="lineNum"> 339 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_SIGNER_INFO + ret );</span></a>
-<a name="340"><span class="lineNum"> 340 </span> : : </a>
-<a name="341"><span class="lineNum"> 341 </span> :<span class="lineCov"> 14 : ret = mbedtls_x509_get_name( p, *p + len, &amp;signers_set-&gt;issuer );</span></a>
-<a name="342"><span class="lineNum"> 342 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="343"><span class="lineNum"> 343 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
-<a name="344"><span class="lineNum"> 344 </span> : : </a>
-<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 14 : signers_set-&gt;issuer_raw.len = *p - signers_set-&gt;issuer_raw.p;</span></a>
+<a name="324"><span class="lineNum"> 324 </span> :<span class="lineCov"> 17 : end_set = *p + len;</span></a>
+<a name="325"><span class="lineNum"> 325 </span> : : </a>
+<a name="326"><span class="lineNum"> 326 </span> :<span class="lineCov"> 17 : ret = mbedtls_asn1_get_int( p, end_set, &amp;signers_set-&gt;version );</span></a>
+<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="328"><span class="lineNum"> 328 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_SIGNER_INFO + ret );</span></a>
+<a name="329"><span class="lineNum"> 329 </span> : : </a>
+<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 17 : ret = mbedtls_asn1_get_tag( p, end_set, &amp;len, MBEDTLS_ASN1_CONSTRUCTED</span></a>
+<a name="331"><span class="lineNum"> 331 </span> : : | MBEDTLS_ASN1_SEQUENCE );</a>
+<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="333"><span class="lineNum"> 333 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_SIGNER_INFO + ret );</span></a>
+<a name="334"><span class="lineNum"> 334 </span> : : </a>
+<a name="335"><span class="lineNum"> 335 </span> : : /* Parsing IssuerAndSerialNumber */</a>
+<a name="336"><span class="lineNum"> 336 </span> :<span class="lineCov"> 17 : signers_set-&gt;issuer_raw.p = *p;</span></a>
+<a name="337"><span class="lineNum"> 337 </span> : : </a>
+<a name="338"><span class="lineNum"> 338 </span> :<span class="lineCov"> 17 : ret = mbedtls_asn1_get_tag( p, end_set, &amp;len, MBEDTLS_ASN1_CONSTRUCTED</span></a>
+<a name="339"><span class="lineNum"> 339 </span> : : | MBEDTLS_ASN1_SEQUENCE );</a>
+<a name="340"><span class="lineNum"> 340 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="341"><span class="lineNum"> 341 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_SIGNER_INFO + ret );</span></a>
+<a name="342"><span class="lineNum"> 342 </span> : : </a>
+<a name="343"><span class="lineNum"> 343 </span> :<span class="lineCov"> 17 : ret = mbedtls_x509_get_name( p, *p + len, &amp;signers_set-&gt;issuer );</span></a>
+<a name="344"><span class="lineNum"> 344 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="345"><span class="lineNum"> 345 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
<a name="346"><span class="lineNum"> 346 </span> : : </a>
-<a name="347"><span class="lineNum"> 347 </span> :<span class="lineCov"> 14 : ret = mbedtls_x509_get_serial( p, end_set, &amp;signers_set-&gt;serial );</span></a>
-<a name="348"><span class="lineNum"> 348 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="349"><span class="lineNum"> 349 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
-<a name="350"><span class="lineNum"> 350 </span> : : </a>
-<a name="351"><span class="lineNum"> 351 </span> :<span class="lineCov"> 14 : ret = pkcs7_get_digest_algorithm( p, end_set,</span></a>
-<a name="352"><span class="lineNum"> 352 </span> : : &amp;signers_set-&gt;alg_identifier );</a>
-<a name="353"><span class="lineNum"> 353 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="354"><span class="lineNum"> 354 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
-<a name="355"><span class="lineNum"> 355 </span> : : </a>
-<a name="356"><span class="lineNum"> 356 </span> :<span class="lineCov"> 14 : ret = pkcs7_get_digest_algorithm( p, end_set,</span></a>
-<a name="357"><span class="lineNum"> 357 </span> : : &amp;signers_set-&gt;sig_alg_identifier );</a>
-<a name="358"><span class="lineNum"> 358 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="359"><span class="lineNum"> 359 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
-<a name="360"><span class="lineNum"> 360 </span> : : </a>
-<a name="361"><span class="lineNum"> 361 </span> :<span class="lineCov"> 14 : ret = pkcs7_get_signature( p, end_set, &amp;signers_set-&gt;sig );</span></a>
-<a name="362"><span class="lineNum"> 362 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="363"><span class="lineNum"> 363 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
-<a name="364"><span class="lineNum"> 364 </span> : : </a>
-<a name="365"><span class="lineNum"> 365 </span> :<span class="lineCov"> 14 : signers_set-&gt;next = NULL;</span></a>
+<a name="347"><span class="lineNum"> 347 </span> :<span class="lineCov"> 17 : signers_set-&gt;issuer_raw.len = *p - signers_set-&gt;issuer_raw.p;</span></a>
+<a name="348"><span class="lineNum"> 348 </span> : : </a>
+<a name="349"><span class="lineNum"> 349 </span> :<span class="lineCov"> 17 : ret = mbedtls_x509_get_serial( p, end_set, &amp;signers_set-&gt;serial );</span></a>
+<a name="350"><span class="lineNum"> 350 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="351"><span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
+<a name="352"><span class="lineNum"> 352 </span> : : </a>
+<a name="353"><span class="lineNum"> 353 </span> :<span class="lineCov"> 17 : ret = pkcs7_get_digest_algorithm( p, end_set,</span></a>
+<a name="354"><span class="lineNum"> 354 </span> : : &amp;signers_set-&gt;alg_identifier );</a>
+<a name="355"><span class="lineNum"> 355 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="356"><span class="lineNum"> 356 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
+<a name="357"><span class="lineNum"> 357 </span> : : </a>
+<a name="358"><span class="lineNum"> 358 </span> :<span class="lineCov"> 17 : ret = pkcs7_get_digest_algorithm( p, end_set,</span></a>
+<a name="359"><span class="lineNum"> 359 </span> : : &amp;signers_set-&gt;sig_alg_identifier );</a>
+<a name="360"><span class="lineNum"> 360 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="361"><span class="lineNum"> 361 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
+<a name="362"><span class="lineNum"> 362 </span> : : </a>
+<a name="363"><span class="lineNum"> 363 </span> :<span class="lineCov"> 17 : ret = pkcs7_get_signature( p, end_set, &amp;signers_set-&gt;sig );</span></a>
+<a name="364"><span class="lineNum"> 364 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="365"><span class="lineNum"> 365 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
<a name="366"><span class="lineNum"> 366 </span> : : </a>
-<a name="367"><span class="lineNum"> 367 </span> :<span class="lineCov"> 14 : if (*p != end_set)</span></a>
-<a name="368"><span class="lineNum"> 368 </span> :<span class="lineNoCov"> 0 : return ( MBEDTLS_ERR_PKCS7_INVALID_SIGNER_INFO );</span></a>
-<a name="369"><span class="lineNum"> 369 </span> : : </a>
-<a name="370"><span class="lineNum"> 370 </span> :<span class="lineCov"> 14 : return( 0 );</span></a>
-<a name="371"><span class="lineNum"> 371 </span> : : }</a>
-<a name="372"><span class="lineNum"> 372 </span> : : </a>
-<a name="373"><span class="lineNum"> 373 </span> : : /**</a>
-<a name="374"><span class="lineNum"> 374 </span> : : * SignedData ::= SEQUENCE {</a>
-<a name="375"><span class="lineNum"> 375 </span> : : * version Version,</a>
-<a name="376"><span class="lineNum"> 376 </span> : : * digestAlgorithms DigestAlgorithmIdentifiers,</a>
-<a name="377"><span class="lineNum"> 377 </span> : : * contentInfo ContentInfo,</a>
-<a name="378"><span class="lineNum"> 378 </span> : : * certificates</a>
-<a name="379"><span class="lineNum"> 379 </span> : : * [0] IMPLICIT ExtendedCertificatesAndCertificates</a>
-<a name="380"><span class="lineNum"> 380 </span> : : * OPTIONAL,</a>
-<a name="381"><span class="lineNum"> 381 </span> : : * crls</a>
-<a name="382"><span class="lineNum"> 382 </span> : : * [0] IMPLICIT CertificateRevocationLists OPTIONAL,</a>
-<a name="383"><span class="lineNum"> 383 </span> : : * signerInfos SignerInfos }</a>
-<a name="384"><span class="lineNum"> 384 </span> : : */</a>
-<a name="385"><span class="lineNum"> 385 </span> :<span class="lineCov"> 14 : static int pkcs7_get_signed_data( unsigned char *buf, size_t buflen,</span></a>
-<a name="386"><span class="lineNum"> 386 </span> : : mbedtls_pkcs7_signed_data *signed_data )</a>
-<a name="387"><span class="lineNum"> 387 </span> : : {</a>
-<a name="388"><span class="lineNum"> 388 </span> :<span class="lineCov"> 14 : unsigned char *p = buf;</span></a>
-<a name="389"><span class="lineNum"> 389 </span> :<span class="lineCov"> 14 : unsigned char *end = buf + buflen;</span></a>
-<a name="390"><span class="lineNum"> 390 </span> : : unsigned char *end_set;</a>
-<a name="391"><span class="lineNum"> 391 </span> :<span class="lineCov"> 14 : size_t len = 0;</span></a>
-<a name="392"><span class="lineNum"> 392 </span> : : int ret;</a>
-<a name="393"><span class="lineNum"> 393 </span> : : mbedtls_md_type_t md_alg;</a>
-<a name="394"><span class="lineNum"> 394 </span> : : </a>
-<a name="395"><span class="lineNum"> 395 </span> :<span class="lineCov"> 14 : ret = mbedtls_asn1_get_tag( &amp;p, end, &amp;len, MBEDTLS_ASN1_CONSTRUCTED</span></a>
-<a name="396"><span class="lineNum"> 396 </span> : : | MBEDTLS_ASN1_SEQUENCE );</a>
-<a name="397"><span class="lineNum"> 397 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="398"><span class="lineNum"> 398 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_FORMAT + ret );</span></a>
-<a name="399"><span class="lineNum"> 399 </span> : : </a>
-<a name="400"><span class="lineNum"> 400 </span> :<span class="lineCov"> 14 : end_set = p + len;</span></a>
+<a name="367"><span class="lineNum"> 367 </span> :<span class="lineCov"> 17 : signers_set-&gt;next = NULL;</span></a>
+<a name="368"><span class="lineNum"> 368 </span> : : </a>
+<a name="369"><span class="lineNum"> 369 </span> :<span class="lineCov"> 17 : if (*p != end_set)</span></a>
+<a name="370"><span class="lineNum"> 370 </span> :<span class="lineNoCov"> 0 : return ( MBEDTLS_ERR_PKCS7_INVALID_SIGNER_INFO );</span></a>
+<a name="371"><span class="lineNum"> 371 </span> : : </a>
+<a name="372"><span class="lineNum"> 372 </span> :<span class="lineCov"> 17 : return( 0 );</span></a>
+<a name="373"><span class="lineNum"> 373 </span> : : }</a>
+<a name="374"><span class="lineNum"> 374 </span> : : </a>
+<a name="375"><span class="lineNum"> 375 </span> : : /**</a>
+<a name="376"><span class="lineNum"> 376 </span> : : * SignedData ::= SEQUENCE {</a>
+<a name="377"><span class="lineNum"> 377 </span> : : * version Version,</a>
+<a name="378"><span class="lineNum"> 378 </span> : : * digestAlgorithms DigestAlgorithmIdentifiers,</a>
+<a name="379"><span class="lineNum"> 379 </span> : : * contentInfo ContentInfo,</a>
+<a name="380"><span class="lineNum"> 380 </span> : : * certificates</a>
+<a name="381"><span class="lineNum"> 381 </span> : : * [0] IMPLICIT ExtendedCertificatesAndCertificates</a>
+<a name="382"><span class="lineNum"> 382 </span> : : * OPTIONAL,</a>
+<a name="383"><span class="lineNum"> 383 </span> : : * crls</a>
+<a name="384"><span class="lineNum"> 384 </span> : : * [0] IMPLICIT CertificateRevocationLists OPTIONAL,</a>
+<a name="385"><span class="lineNum"> 385 </span> : : * signerInfos SignerInfos }</a>
+<a name="386"><span class="lineNum"> 386 </span> : : */</a>
+<a name="387"><span class="lineNum"> 387 </span> :<span class="lineCov"> 19 : static int pkcs7_get_signed_data( unsigned char *buf, size_t buflen,</span></a>
+<a name="388"><span class="lineNum"> 388 </span> : : mbedtls_pkcs7_signed_data *signed_data )</a>
+<a name="389"><span class="lineNum"> 389 </span> : : {</a>
+<a name="390"><span class="lineNum"> 390 </span> :<span class="lineCov"> 19 : unsigned char *p = buf;</span></a>
+<a name="391"><span class="lineNum"> 391 </span> :<span class="lineCov"> 19 : unsigned char *end = buf + buflen;</span></a>
+<a name="392"><span class="lineNum"> 392 </span> : : unsigned char *end_set;</a>
+<a name="393"><span class="lineNum"> 393 </span> :<span class="lineCov"> 19 : size_t len = 0;</span></a>
+<a name="394"><span class="lineNum"> 394 </span> : : int ret;</a>
+<a name="395"><span class="lineNum"> 395 </span> : : mbedtls_md_type_t md_alg;</a>
+<a name="396"><span class="lineNum"> 396 </span> : : </a>
+<a name="397"><span class="lineNum"> 397 </span> :<span class="lineCov"> 19 : ret = mbedtls_asn1_get_tag( &amp;p, end, &amp;len, MBEDTLS_ASN1_CONSTRUCTED</span></a>
+<a name="398"><span class="lineNum"> 398 </span> : : | MBEDTLS_ASN1_SEQUENCE );</a>
+<a name="399"><span class="lineNum"> 399 </span> :<span class="lineCov"> 19 : if( ret != 0 )</span></a>
+<a name="400"><span class="lineNum"> 400 </span> :<span class="lineCov"> 2 : return( MBEDTLS_ERR_PKCS7_INVALID_FORMAT + ret );</span></a>
<a name="401"><span class="lineNum"> 401 </span> : : </a>
-<a name="402"><span class="lineNum"> 402 </span> : : /* Get version of signed data */</a>
-<a name="403"><span class="lineNum"> 403 </span> :<span class="lineCov"> 14 : ret = pkcs7_get_version( &amp;p, end_set, &amp;signed_data-&gt;version );</span></a>
-<a name="404"><span class="lineNum"> 404 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="405"><span class="lineNum"> 405 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
-<a name="406"><span class="lineNum"> 406 </span> : : </a>
-<a name="407"><span class="lineNum"> 407 </span> : : /* Get digest algorithm */</a>
-<a name="408"><span class="lineNum"> 408 </span> :<span class="lineCov"> 14 : ret = pkcs7_get_digest_algorithm_set( &amp;p, end_set,</span></a>
-<a name="409"><span class="lineNum"> 409 </span> :<span class="lineCov"> 14 : &amp;signed_data-&gt;digest_alg_identifiers );</span></a>
-<a name="410"><span class="lineNum"> 410 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="411"><span class="lineNum"> 411 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
-<a name="412"><span class="lineNum"> 412 </span> : : </a>
-<a name="413"><span class="lineNum"> 413 </span> :<span class="lineCov"> 14 : ret = mbedtls_oid_get_md_alg( &amp;signed_data-&gt;digest_alg_identifiers, &amp;md_alg );</span></a>
-<a name="414"><span class="lineNum"> 414 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="415"><span class="lineNum"> 415 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_ALG + ret );</span></a>
-<a name="416"><span class="lineNum"> 416 </span> : : </a>
-<a name="417"><span class="lineNum"> 417 </span> : : /* Do not expect any content */</a>
-<a name="418"><span class="lineNum"> 418 </span> :<span class="lineCov"> 14 : ret = pkcs7_get_content_info_type( &amp;p, end_set, &amp;signed_data-&gt;content.oid );</span></a>
-<a name="419"><span class="lineNum"> 419 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="420"><span class="lineNum"> 420 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
-<a name="421"><span class="lineNum"> 421 </span> : : </a>
-<a name="422"><span class="lineNum"> 422 </span> :<span class="lineCov"> 14 : if( MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS7_DATA, &amp;signed_data-&gt;content.oid ) )</span></a>
-<a name="423"><span class="lineNum"> 423 </span> : : {</a>
-<a name="424"><span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_CONTENT_INFO ) ;</span></a>
-<a name="425"><span class="lineNum"> 425 </span> : : }</a>
-<a name="426"><span class="lineNum"> 426 </span> : : </a>
-<a name="427"><span class="lineNum"> 427 </span> :<span class="lineCov"> 14 : p = p + signed_data-&gt;content.oid.len;</span></a>
+<a name="402"><span class="lineNum"> 402 </span> :<span class="lineCov"> 17 : end_set = p + len;</span></a>
+<a name="403"><span class="lineNum"> 403 </span> : : </a>
+<a name="404"><span class="lineNum"> 404 </span> : : /* Get version of signed data */</a>
+<a name="405"><span class="lineNum"> 405 </span> :<span class="lineCov"> 17 : ret = pkcs7_get_version( &amp;p, end_set, &amp;signed_data-&gt;version );</span></a>
+<a name="406"><span class="lineNum"> 406 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="407"><span class="lineNum"> 407 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
+<a name="408"><span class="lineNum"> 408 </span> : : </a>
+<a name="409"><span class="lineNum"> 409 </span> : : /* Get digest algorithm */</a>
+<a name="410"><span class="lineNum"> 410 </span> :<span class="lineCov"> 17 : ret = pkcs7_get_digest_algorithm_set( &amp;p, end_set,</span></a>
+<a name="411"><span class="lineNum"> 411 </span> :<span class="lineCov"> 17 : &amp;signed_data-&gt;digest_alg_identifiers );</span></a>
+<a name="412"><span class="lineNum"> 412 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="413"><span class="lineNum"> 413 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
+<a name="414"><span class="lineNum"> 414 </span> : : </a>
+<a name="415"><span class="lineNum"> 415 </span> :<span class="lineCov"> 17 : ret = mbedtls_oid_get_md_alg( &amp;signed_data-&gt;digest_alg_identifiers, &amp;md_alg );</span></a>
+<a name="416"><span class="lineNum"> 416 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="417"><span class="lineNum"> 417 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_ALG + ret );</span></a>
+<a name="418"><span class="lineNum"> 418 </span> : : </a>
+<a name="419"><span class="lineNum"> 419 </span> : : /* Do not expect any content */</a>
+<a name="420"><span class="lineNum"> 420 </span> :<span class="lineCov"> 17 : ret = pkcs7_get_content_info_type( &amp;p, end_set, &amp;signed_data-&gt;content.oid );</span></a>
+<a name="421"><span class="lineNum"> 421 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="422"><span class="lineNum"> 422 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
+<a name="423"><span class="lineNum"> 423 </span> : : </a>
+<a name="424"><span class="lineNum"> 424 </span> :<span class="lineCov"> 17 : if( MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS7_DATA, &amp;signed_data-&gt;content.oid ) )</span></a>
+<a name="425"><span class="lineNum"> 425 </span> : : {</a>
+<a name="426"><span class="lineNum"> 426 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_CONTENT_INFO ) ;</span></a>
+<a name="427"><span class="lineNum"> 427 </span> : : }</a>
<a name="428"><span class="lineNum"> 428 </span> : : </a>
-<a name="429"><span class="lineNum"> 429 </span> : : /* Look for certificates, there may or may not be any */</a>
-<a name="430"><span class="lineNum"> 430 </span> :<span class="lineCov"> 14 : mbedtls_x509_crt_init( &amp;signed_data-&gt;certs );</span></a>
-<a name="431"><span class="lineNum"> 431 </span> :<span class="lineCov"> 14 : ret = pkcs7_get_certificates( &amp;p, end_set, &amp;signed_data-&gt;certs );</span></a>
-<a name="432"><span class="lineNum"> 432 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="433"><span class="lineNum"> 433 </span> :<span class="lineNoCov"> 0 : return( ret ) ;</span></a>
-<a name="434"><span class="lineNum"> 434 </span> : : </a>
-<a name="435"><span class="lineNum"> 435 </span> : : /* TODO: optional CRLs go here, currently no CRLs are expected */</a>
+<a name="429"><span class="lineNum"> 429 </span> :<span class="lineCov"> 17 : p = p + signed_data-&gt;content.oid.len;</span></a>
+<a name="430"><span class="lineNum"> 430 </span> : : </a>
+<a name="431"><span class="lineNum"> 431 </span> : : /* Look for certificates, there may or may not be any */</a>
+<a name="432"><span class="lineNum"> 432 </span> :<span class="lineCov"> 17 : mbedtls_x509_crt_init( &amp;signed_data-&gt;certs );</span></a>
+<a name="433"><span class="lineNum"> 433 </span> :<span class="lineCov"> 17 : ret = pkcs7_get_certificates( &amp;p, end_set, &amp;signed_data-&gt;certs );</span></a>
+<a name="434"><span class="lineNum"> 434 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="435"><span class="lineNum"> 435 </span> :<span class="lineNoCov"> 0 : return( ret ) ;</span></a>
<a name="436"><span class="lineNum"> 436 </span> : : </a>
-<a name="437"><span class="lineNum"> 437 </span> : : /* Get signers info */</a>
-<a name="438"><span class="lineNum"> 438 </span> :<span class="lineCov"> 14 : ret = pkcs7_get_signers_info_set( &amp;p, end_set, &amp;signed_data-&gt;signers );</span></a>
-<a name="439"><span class="lineNum"> 439 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="440"><span class="lineNum"> 440 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
-<a name="441"><span class="lineNum"> 441 </span> : : </a>
-<a name="442"><span class="lineNum"> 442 </span> :<span class="lineCov"> 14 : if ( p != end )</span></a>
-<a name="443"><span class="lineNum"> 443 </span> :<span class="lineNoCov"> 0 : ret = MBEDTLS_ERR_PKCS7_INVALID_FORMAT;</span></a>
-<a name="444"><span class="lineNum"> 444 </span> : : </a>
-<a name="445"><span class="lineNum"> 445 </span> :<span class="lineCov"> 14 : return( ret );</span></a>
-<a name="446"><span class="lineNum"> 446 </span> : : }</a>
-<a name="447"><span class="lineNum"> 447 </span> : : </a>
-<a name="448"><span class="lineNum"> 448 </span> :<span class="lineCov"> 14 : int mbedtls_pkcs7_parse_der( const unsigned char *buf, const int buflen,</span></a>
-<a name="449"><span class="lineNum"> 449 </span> : : mbedtls_pkcs7 *pkcs7 )</a>
-<a name="450"><span class="lineNum"> 450 </span> : : {</a>
-<a name="451"><span class="lineNum"> 451 </span> : : unsigned char *start;</a>
-<a name="452"><span class="lineNum"> 452 </span> : : unsigned char *end;</a>
-<a name="453"><span class="lineNum"> 453 </span> :<span class="lineCov"> 14 : size_t len = 0;</span></a>
-<a name="454"><span class="lineNum"> 454 </span> : : int ret;</a>
-<a name="455"><span class="lineNum"> 455 </span> :<span class="lineCov"> 14 : int isoidset = 0;</span></a>
-<a name="456"><span class="lineNum"> 456 </span> : : </a>
-<a name="457"><span class="lineNum"> 457 </span> : : /* use internal buffer for parsing */</a>
-<a name="458"><span class="lineNum"> 458 </span> :<span class="lineCov"> 14 : start = (unsigned char *)buf;</span></a>
-<a name="459"><span class="lineNum"> 459 </span> :<span class="lineCov"> 14 : end = start + buflen;</span></a>
-<a name="460"><span class="lineNum"> 460 </span> : : </a>
-<a name="461"><span class="lineNum"> 461 </span> :<span class="lineCov"> 14 : if( !pkcs7 )</span></a>
-<a name="462"><span class="lineNum"> 462 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_BAD_INPUT_DATA );</span></a>
-<a name="463"><span class="lineNum"> 463 </span> : : </a>
-<a name="464"><span class="lineNum"> 464 </span> :<span class="lineCov"> 14 : ret = pkcs7_get_content_info_type( &amp;start, end, &amp;pkcs7-&gt;content_type_oid );</span></a>
-<a name="465"><span class="lineNum"> 465 </span> :<span class="lineCov"> 14 : if( ret != 0 )</span></a>
-<a name="466"><span class="lineNum"> 466 </span> : : {</a>
-<a name="467"><span class="lineNum"> 467 </span> :<span class="lineCov"> 2 : len = buflen;</span></a>
-<a name="468"><span class="lineNum"> 468 </span> :<span class="lineCov"> 2 : goto try_data;</span></a>
-<a name="469"><span class="lineNum"> 469 </span> : : }</a>
-<a name="470"><span class="lineNum"> 470 </span> : : </a>
-<a name="471"><span class="lineNum"> 471 </span> :<span class="lineCov"> 12 : if( ! MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS7_DATA, &amp;pkcs7-&gt;content_type_oid )</span></a>
-<a name="472"><span class="lineNum"> 472 </span> :<span class="lineCov"> 12 : || ! MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS7_ENCRYPTED_DATA, &amp;pkcs7-&gt;content_type_oid )</span></a>
-<a name="473"><span class="lineNum"> 473 </span> :<span class="lineCov"> 12 : || ! MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS7_ENVELOPED_DATA, &amp;pkcs7-&gt;content_type_oid )</span></a>
-<a name="474"><span class="lineNum"> 474 </span> :<span class="lineCov"> 12 : || ! MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS7_SIGNED_AND_ENVELOPED_DATA, &amp;pkcs7-&gt;content_type_oid )</span></a>
-<a name="475"><span class="lineNum"> 475 </span> :<span class="lineCov"> 12 : || ! MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS7_DIGESTED_DATA, &amp;pkcs7-&gt;content_type_oid )</span></a>
-<a name="476"><span class="lineNum"> 476 </span> :<span class="lineCov"> 12 : || ! MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS7_ENCRYPTED_DATA, &amp;pkcs7-&gt;content_type_oid ) )</span></a>
-<a name="477"><span class="lineNum"> 477 </span> : : {</a>
-<a name="478"><span class="lineNum"> 478 </span> :<span class="lineNoCov"> 0 : ret = MBEDTLS_ERR_PKCS7_FEATURE_UNAVAILABLE;</span></a>
-<a name="479"><span class="lineNum"> 479 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="480"><span class="lineNum"> 480 </span> : : }</a>
-<a name="481"><span class="lineNum"> 481 </span> : : </a>
-<a name="482"><span class="lineNum"> 482 </span> :<span class="lineCov"> 12 : if( MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS7_SIGNED_DATA, &amp;pkcs7-&gt;content_type_oid ) )</span></a>
-<a name="483"><span class="lineNum"> 483 </span> : : {</a>
-<a name="484"><span class="lineNum"> 484 </span> :<span class="lineNoCov"> 0 : ret = MBEDTLS_ERR_PKCS7_BAD_INPUT_DATA;</span></a>
-<a name="485"><span class="lineNum"> 485 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="486"><span class="lineNum"> 486 </span> : : }</a>
-<a name="487"><span class="lineNum"> 487 </span> : : </a>
-<a name="488"><span class="lineNum"> 488 </span> :<span class="lineCov"> 12 : isoidset = 1;</span></a>
-<a name="489"><span class="lineNum"> 489 </span> :<span class="lineCov"> 12 : start = start + pkcs7-&gt;content_type_oid.len;</span></a>
-<a name="490"><span class="lineNum"> 490 </span> : : </a>
-<a name="491"><span class="lineNum"> 491 </span> :<span class="lineCov"> 12 : ret = pkcs7_get_next_content_len( &amp;start, end, &amp;len );</span></a>
-<a name="492"><span class="lineNum"> 492 </span> :<span class="lineCov"> 12 : if( ret != 0 )</span></a>
-<a name="493"><span class="lineNum"> 493 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="494"><span class="lineNum"> 494 </span> : : </a>
-<a name="495"><span class="lineNum"> 495 </span> :<span class="lineCov"> 12 : try_data:</span></a>
-<a name="496"><span class="lineNum"> 496 </span> :<span class="lineCov"> 14 : ret = pkcs7_get_signed_data( start, len, &amp;pkcs7-&gt;signed_data );</span></a>
-<a name="497"><span class="lineNum"> 497 </span> :<span class="lineCov"> 14 : if (ret != 0)</span></a>
-<a name="498"><span class="lineNum"> 498 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="499"><span class="lineNum"> 499 </span> : : </a>
-<a name="500"><span class="lineNum"> 500 </span> :<span class="lineCov"> 14 : if (!isoidset)</span></a>
-<a name="501"><span class="lineNum"> 501 </span> : : {</a>
-<a name="502"><span class="lineNum"> 502 </span> :<span class="lineCov"> 2 : pkcs7-&gt;content_type_oid.tag = MBEDTLS_ASN1_OID;</span></a>
-<a name="503"><span class="lineNum"> 503 </span> :<span class="lineCov"> 2 : pkcs7-&gt;content_type_oid.len = MBEDTLS_OID_SIZE(MBEDTLS_OID_PKCS7_SIGNED_DATA);</span></a>
-<a name="504"><span class="lineNum"> 504 </span> :<span class="lineCov"> 2 : pkcs7-&gt;content_type_oid.p = (unsigned char *)MBEDTLS_OID_PKCS7_SIGNED_DATA;</span></a>
-<a name="505"><span class="lineNum"> 505 </span> : : }</a>
-<a name="506"><span class="lineNum"> 506 </span> : : </a>
-<a name="507"><span class="lineNum"> 507 </span> :<span class="lineCov"> 14 : ret = MBEDTLS_PKCS7_SIGNED_DATA;</span></a>
+<a name="437"><span class="lineNum"> 437 </span> : : /* TODO: optional CRLs go here, currently no CRLs are expected */</a>
+<a name="438"><span class="lineNum"> 438 </span> : : </a>
+<a name="439"><span class="lineNum"> 439 </span> : : /* Get signers info */</a>
+<a name="440"><span class="lineNum"> 440 </span> :<span class="lineCov"> 17 : ret = pkcs7_get_signers_info_set( &amp;p, end_set, &amp;signed_data-&gt;signers );</span></a>
+<a name="441"><span class="lineNum"> 441 </span> :<span class="lineCov"> 17 : if( ret != 0 )</span></a>
+<a name="442"><span class="lineNum"> 442 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
+<a name="443"><span class="lineNum"> 443 </span> : : </a>
+<a name="444"><span class="lineNum"> 444 </span> :<span class="lineCov"> 17 : if ( p != end )</span></a>
+<a name="445"><span class="lineNum"> 445 </span> :<span class="lineNoCov"> 0 : ret = MBEDTLS_ERR_PKCS7_INVALID_FORMAT;</span></a>
+<a name="446"><span class="lineNum"> 446 </span> : : </a>
+<a name="447"><span class="lineNum"> 447 </span> :<span class="lineCov"> 17 : return( ret );</span></a>
+<a name="448"><span class="lineNum"> 448 </span> : : }</a>
+<a name="449"><span class="lineNum"> 449 </span> : : </a>
+<a name="450"><span class="lineNum"> 450 </span> :<span class="lineCov"> 19 : int mbedtls_pkcs7_parse_der( const unsigned char *buf, const int buflen,</span></a>
+<a name="451"><span class="lineNum"> 451 </span> : : mbedtls_pkcs7 *pkcs7 )</a>
+<a name="452"><span class="lineNum"> 452 </span> : : {</a>
+<a name="453"><span class="lineNum"> 453 </span> : : unsigned char *start;</a>
+<a name="454"><span class="lineNum"> 454 </span> : : unsigned char *end;</a>
+<a name="455"><span class="lineNum"> 455 </span> :<span class="lineCov"> 19 : size_t len = 0;</span></a>
+<a name="456"><span class="lineNum"> 456 </span> : : int ret;</a>
+<a name="457"><span class="lineNum"> 457 </span> :<span class="lineCov"> 19 : int isoidset = 0;</span></a>
+<a name="458"><span class="lineNum"> 458 </span> : : </a>
+<a name="459"><span class="lineNum"> 459 </span> : : /* use internal buffer for parsing */</a>
+<a name="460"><span class="lineNum"> 460 </span> :<span class="lineCov"> 19 : start = (unsigned char *)buf;</span></a>
+<a name="461"><span class="lineNum"> 461 </span> :<span class="lineCov"> 19 : end = start + buflen;</span></a>
+<a name="462"><span class="lineNum"> 462 </span> : : </a>
+<a name="463"><span class="lineNum"> 463 </span> :<span class="lineCov"> 19 : if( !pkcs7 )</span></a>
+<a name="464"><span class="lineNum"> 464 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_BAD_INPUT_DATA );</span></a>
+<a name="465"><span class="lineNum"> 465 </span> : : </a>
+<a name="466"><span class="lineNum"> 466 </span> :<span class="lineCov"> 19 : ret = pkcs7_get_content_info_type( &amp;start, end, &amp;pkcs7-&gt;content_type_oid );</span></a>
+<a name="467"><span class="lineNum"> 467 </span> :<span class="lineCov"> 19 : if( ret != 0 )</span></a>
+<a name="468"><span class="lineNum"> 468 </span> : : {</a>
+<a name="469"><span class="lineNum"> 469 </span> :<span class="lineCov"> 4 : len = buflen;</span></a>
+<a name="470"><span class="lineNum"> 470 </span> :<span class="lineCov"> 4 : goto try_data;</span></a>
+<a name="471"><span class="lineNum"> 471 </span> : : }</a>
+<a name="472"><span class="lineNum"> 472 </span> : : </a>
+<a name="473"><span class="lineNum"> 473 </span> :<span class="lineCov"> 15 : if( ! MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS7_DATA, &amp;pkcs7-&gt;content_type_oid )</span></a>
+<a name="474"><span class="lineNum"> 474 </span> :<span class="lineCov"> 15 : || ! MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS7_ENCRYPTED_DATA, &amp;pkcs7-&gt;content_type_oid )</span></a>
+<a name="475"><span class="lineNum"> 475 </span> :<span class="lineCov"> 15 : || ! MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS7_ENVELOPED_DATA, &amp;pkcs7-&gt;content_type_oid )</span></a>
+<a name="476"><span class="lineNum"> 476 </span> :<span class="lineCov"> 15 : || ! MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS7_SIGNED_AND_ENVELOPED_DATA, &amp;pkcs7-&gt;content_type_oid )</span></a>
+<a name="477"><span class="lineNum"> 477 </span> :<span class="lineCov"> 15 : || ! MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS7_DIGESTED_DATA, &amp;pkcs7-&gt;content_type_oid )</span></a>
+<a name="478"><span class="lineNum"> 478 </span> :<span class="lineCov"> 15 : || ! MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS7_ENCRYPTED_DATA, &amp;pkcs7-&gt;content_type_oid ) )</span></a>
+<a name="479"><span class="lineNum"> 479 </span> : : {</a>
+<a name="480"><span class="lineNum"> 480 </span> :<span class="lineNoCov"> 0 : ret = MBEDTLS_ERR_PKCS7_FEATURE_UNAVAILABLE;</span></a>
+<a name="481"><span class="lineNum"> 481 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="482"><span class="lineNum"> 482 </span> : : }</a>
+<a name="483"><span class="lineNum"> 483 </span> : : </a>
+<a name="484"><span class="lineNum"> 484 </span> :<span class="lineCov"> 15 : if( MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS7_SIGNED_DATA, &amp;pkcs7-&gt;content_type_oid ) )</span></a>
+<a name="485"><span class="lineNum"> 485 </span> : : {</a>
+<a name="486"><span class="lineNum"> 486 </span> :<span class="lineNoCov"> 0 : ret = MBEDTLS_ERR_PKCS7_BAD_INPUT_DATA;</span></a>
+<a name="487"><span class="lineNum"> 487 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="488"><span class="lineNum"> 488 </span> : : }</a>
+<a name="489"><span class="lineNum"> 489 </span> : : </a>
+<a name="490"><span class="lineNum"> 490 </span> :<span class="lineCov"> 15 : isoidset = 1;</span></a>
+<a name="491"><span class="lineNum"> 491 </span> :<span class="lineCov"> 15 : start = start + pkcs7-&gt;content_type_oid.len;</span></a>
+<a name="492"><span class="lineNum"> 492 </span> : : </a>
+<a name="493"><span class="lineNum"> 493 </span> :<span class="lineCov"> 15 : ret = pkcs7_get_next_content_len( &amp;start, end, &amp;len );</span></a>
+<a name="494"><span class="lineNum"> 494 </span> :<span class="lineCov"> 15 : if( ret != 0 )</span></a>
+<a name="495"><span class="lineNum"> 495 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="496"><span class="lineNum"> 496 </span> : : </a>
+<a name="497"><span class="lineNum"> 497 </span> :<span class="lineCov"> 15 : try_data:</span></a>
+<a name="498"><span class="lineNum"> 498 </span> :<span class="lineCov"> 19 : ret = pkcs7_get_signed_data( start, len, &amp;pkcs7-&gt;signed_data );</span></a>
+<a name="499"><span class="lineNum"> 499 </span> :<span class="lineCov"> 19 : if (ret != 0)</span></a>
+<a name="500"><span class="lineNum"> 500 </span> :<span class="lineCov"> 2 : goto out;</span></a>
+<a name="501"><span class="lineNum"> 501 </span> : : </a>
+<a name="502"><span class="lineNum"> 502 </span> :<span class="lineCov"> 17 : if (!isoidset)</span></a>
+<a name="503"><span class="lineNum"> 503 </span> : : {</a>
+<a name="504"><span class="lineNum"> 504 </span> :<span class="lineCov"> 2 : pkcs7-&gt;content_type_oid.tag = MBEDTLS_ASN1_OID;</span></a>
+<a name="505"><span class="lineNum"> 505 </span> :<span class="lineCov"> 2 : pkcs7-&gt;content_type_oid.len = MBEDTLS_OID_SIZE(MBEDTLS_OID_PKCS7_SIGNED_DATA);</span></a>
+<a name="506"><span class="lineNum"> 506 </span> :<span class="lineCov"> 2 : pkcs7-&gt;content_type_oid.p = (unsigned char *)MBEDTLS_OID_PKCS7_SIGNED_DATA;</span></a>
+<a name="507"><span class="lineNum"> 507 </span> : : }</a>
<a name="508"><span class="lineNum"> 508 </span> : : </a>
-<a name="509"><span class="lineNum"> 509 </span> :<span class="lineCov"> 14 : out:</span></a>
-<a name="510"><span class="lineNum"> 510 </span> :<span class="lineCov"> 14 : if ( ret &lt; 0 )</span></a>
-<a name="511"><span class="lineNum"> 511 </span> :<span class="lineNoCov"> 0 : mbedtls_pkcs7_free( pkcs7 );</span></a>
-<a name="512"><span class="lineNum"> 512 </span> : : </a>
-<a name="513"><span class="lineNum"> 513 </span> :<span class="lineCov"> 14 : return( ret );</span></a>
-<a name="514"><span class="lineNum"> 514 </span> : : }</a>
-<a name="515"><span class="lineNum"> 515 </span> : : </a>
-<a name="516"><span class="lineNum"> 516 </span> :<span class="lineNoCov"> 0 : int mbedtls_pkcs7_signed_data_verify( mbedtls_pkcs7 *pkcs7,</span></a>
-<a name="517"><span class="lineNum"> 517 </span> : : mbedtls_x509_crt *cert,</a>
-<a name="518"><span class="lineNum"> 518 </span> : : const unsigned char *data,</a>
-<a name="519"><span class="lineNum"> 519 </span> : : size_t datalen )</a>
-<a name="520"><span class="lineNum"> 520 </span> : : {</a>
-<a name="521"><span class="lineNum"> 521 </span> : : </a>
-<a name="522"><span class="lineNum"> 522 </span> : : int ret;</a>
-<a name="523"><span class="lineNum"> 523 </span> : : unsigned char *hash;</a>
-<a name="524"><span class="lineNum"> 524 </span> :<span class="lineNoCov"> 0 : mbedtls_pk_context pk_cxt = cert-&gt;pk;</span></a>
-<a name="525"><span class="lineNum"> 525 </span> : : const mbedtls_md_info_t *md_info;</a>
-<a name="526"><span class="lineNum"> 526 </span> : : mbedtls_md_type_t md_alg;</a>
-<a name="527"><span class="lineNum"> 527 </span> : : </a>
-<a name="528"><span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : ret = mbedtls_oid_get_md_alg( &amp;pkcs7-&gt;signed_data.digest_alg_identifiers, &amp;md_alg );</span></a>
-<a name="529"><span class="lineNum"> 529 </span> :<span class="lineNoCov"> 0 : if( ret != 0 )</span></a>
-<a name="530"><span class="lineNum"> 530 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_ALG + ret );</span></a>
-<a name="531"><span class="lineNum"> 531 </span> : : </a>
-<a name="532"><span class="lineNum"> 532 </span> :<span class="lineNoCov"> 0 : md_info = mbedtls_md_info_from_type( md_alg );</span></a>
+<a name="509"><span class="lineNum"> 509 </span> :<span class="lineCov"> 17 : ret = MBEDTLS_PKCS7_SIGNED_DATA;</span></a>
+<a name="510"><span class="lineNum"> 510 </span> : : </a>
+<a name="511"><span class="lineNum"> 511 </span> :<span class="lineCov"> 19 : out:</span></a>
+<a name="512"><span class="lineNum"> 512 </span> :<span class="lineCov"> 19 : if ( ret &lt; 0 )</span></a>
+<a name="513"><span class="lineNum"> 513 </span> :<span class="lineCov"> 2 : mbedtls_pkcs7_free( pkcs7 );</span></a>
+<a name="514"><span class="lineNum"> 514 </span> : : </a>
+<a name="515"><span class="lineNum"> 515 </span> :<span class="lineCov"> 19 : return( ret );</span></a>
+<a name="516"><span class="lineNum"> 516 </span> : : }</a>
+<a name="517"><span class="lineNum"> 517 </span> : : </a>
+<a name="518"><span class="lineNum"> 518 </span> :<span class="lineNoCov"> 0 : int mbedtls_pkcs7_signed_data_verify( mbedtls_pkcs7 *pkcs7,</span></a>
+<a name="519"><span class="lineNum"> 519 </span> : : mbedtls_x509_crt *cert,</a>
+<a name="520"><span class="lineNum"> 520 </span> : : const unsigned char *data,</a>
+<a name="521"><span class="lineNum"> 521 </span> : : size_t datalen )</a>
+<a name="522"><span class="lineNum"> 522 </span> : : {</a>
+<a name="523"><span class="lineNum"> 523 </span> : : </a>
+<a name="524"><span class="lineNum"> 524 </span> : : int ret;</a>
+<a name="525"><span class="lineNum"> 525 </span> : : unsigned char *hash;</a>
+<a name="526"><span class="lineNum"> 526 </span> :<span class="lineNoCov"> 0 : mbedtls_pk_context pk_cxt = cert-&gt;pk;</span></a>
+<a name="527"><span class="lineNum"> 527 </span> : : const mbedtls_md_info_t *md_info;</a>
+<a name="528"><span class="lineNum"> 528 </span> : : mbedtls_md_type_t md_alg;</a>
+<a name="529"><span class="lineNum"> 529 </span> : : </a>
+<a name="530"><span class="lineNum"> 530 </span> :<span class="lineNoCov"> 0 : ret = mbedtls_oid_get_md_alg( &amp;pkcs7-&gt;signed_data.digest_alg_identifiers, &amp;md_alg );</span></a>
+<a name="531"><span class="lineNum"> 531 </span> :<span class="lineNoCov"> 0 : if( ret != 0 )</span></a>
+<a name="532"><span class="lineNum"> 532 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_ALG + ret );</span></a>
<a name="533"><span class="lineNum"> 533 </span> : : </a>
-<a name="534"><span class="lineNum"> 534 </span> :<span class="lineNoCov"> 0 : hash = mbedtls_calloc( mbedtls_md_get_size( md_info ), 1 );</span></a>
-<a name="535"><span class="lineNum"> 535 </span> :<span class="lineNoCov"> 0 : if( hash == NULL ) {</span></a>
-<a name="536"><span class="lineNum"> 536 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_ALLOC_FAILED );</span></a>
-<a name="537"><span class="lineNum"> 537 </span> : : }</a>
-<a name="538"><span class="lineNum"> 538 </span> : : </a>
-<a name="539"><span class="lineNum"> 539 </span> :<span class="lineNoCov"> 0 : mbedtls_md( md_info, data, datalen, hash );</span></a>
+<a name="534"><span class="lineNum"> 534 </span> :<span class="lineNoCov"> 0 : md_info = mbedtls_md_info_from_type( md_alg );</span></a>
+<a name="535"><span class="lineNum"> 535 </span> : : </a>
+<a name="536"><span class="lineNum"> 536 </span> :<span class="lineNoCov"> 0 : hash = mbedtls_calloc( mbedtls_md_get_size( md_info ), 1 );</span></a>
+<a name="537"><span class="lineNum"> 537 </span> :<span class="lineNoCov"> 0 : if( hash == NULL ) {</span></a>
+<a name="538"><span class="lineNum"> 538 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_ALLOC_FAILED );</span></a>
+<a name="539"><span class="lineNum"> 539 </span> : : }</a>
<a name="540"><span class="lineNum"> 540 </span> : : </a>
-<a name="541"><span class="lineNum"> 541 </span> :<span class="lineNoCov"> 0 : ret = mbedtls_pk_verify( &amp;pk_cxt, md_alg, hash, sizeof(hash),</span></a>
-<a name="542"><span class="lineNum"> 542 </span> :<span class="lineNoCov"> 0 : pkcs7-&gt;signed_data.signers.sig.p,</span></a>
-<a name="543"><span class="lineNum"> 543 </span> : : pkcs7-&gt;signed_data.signers.sig.len );</a>
-<a name="544"><span class="lineNum"> 544 </span> : : </a>
-<a name="545"><span class="lineNum"> 545 </span> :<span class="lineNoCov"> 0 : mbedtls_free( hash );</span></a>
+<a name="541"><span class="lineNum"> 541 </span> :<span class="lineNoCov"> 0 : mbedtls_md( md_info, data, datalen, hash );</span></a>
+<a name="542"><span class="lineNum"> 542 </span> : : </a>
+<a name="543"><span class="lineNum"> 543 </span> :<span class="lineNoCov"> 0 : ret = mbedtls_pk_verify( &amp;pk_cxt, md_alg, hash, 0,</span></a>
+<a name="544"><span class="lineNum"> 544 </span> :<span class="lineNoCov"> 0 : pkcs7-&gt;signed_data.signers.sig.p,</span></a>
+<a name="545"><span class="lineNum"> 545 </span> : : pkcs7-&gt;signed_data.signers.sig.len );</a>
<a name="546"><span class="lineNum"> 546 </span> : : </a>
-<a name="547"><span class="lineNum"> 547 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
-<a name="548"><span class="lineNum"> 548 </span> : : }</a>
-<a name="549"><span class="lineNum"> 549 </span> : : </a>
-<a name="550"><span class="lineNum"> 550 </span> :<span class="lineCov"> 16 : int mbedtls_pkcs7_signed_hash_verify( mbedtls_pkcs7 *pkcs7,</span></a>
-<a name="551"><span class="lineNum"> 551 </span> : : mbedtls_x509_crt *cert,</a>
-<a name="552"><span class="lineNum"> 552 </span> : : const unsigned char *hash, int hashlen)</a>
-<a name="553"><span class="lineNum"> 553 </span> : : {</a>
-<a name="554"><span class="lineNum"> 554 </span> : : int ret;</a>
-<a name="555"><span class="lineNum"> 555 </span> : : mbedtls_md_type_t md_alg;</a>
-<a name="556"><span class="lineNum"> 556 </span> : : mbedtls_pk_context pk_cxt;</a>
-<a name="557"><span class="lineNum"> 557 </span> : : </a>
-<a name="558"><span class="lineNum"> 558 </span> :<span class="lineCov"> 16 : ret = mbedtls_oid_get_md_alg( &amp;pkcs7-&gt;signed_data.digest_alg_identifiers, &amp;md_alg );</span></a>
-<a name="559"><span class="lineNum"> 559 </span> :<span class="lineCov"> 16 : if( ret != 0 )</span></a>
-<a name="560"><span class="lineNum"> 560 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_ALG + ret );</span></a>
-<a name="561"><span class="lineNum"> 561 </span> : : </a>
-<a name="562"><span class="lineNum"> 562 </span> :<span class="lineCov"> 16 : pk_cxt = cert-&gt;pk;</span></a>
-<a name="563"><span class="lineNum"> 563 </span> :<span class="lineCov"> 16 : ret = mbedtls_pk_verify( &amp;pk_cxt, md_alg, hash, hashlen,</span></a>
-<a name="564"><span class="lineNum"> 564 </span> :<span class="lineCov"> 16 : pkcs7-&gt;signed_data.signers.sig.p,</span></a>
-<a name="565"><span class="lineNum"> 565 </span> : : pkcs7-&gt;signed_data.signers.sig.len );</a>
-<a name="566"><span class="lineNum"> 566 </span> : : </a>
-<a name="567"><span class="lineNum"> 567 </span> :<span class="lineCov"> 16 : return ( ret );</span></a>
-<a name="568"><span class="lineNum"> 568 </span> : : }</a>
-<a name="569"><span class="lineNum"> 569 </span> : : </a>
-<a name="570"><span class="lineNum"> 570 </span> : : /*</a>
-<a name="571"><span class="lineNum"> 571 </span> : : * Unallocate all pkcs7 data</a>
-<a name="572"><span class="lineNum"> 572 </span> : : */</a>
-<a name="573"><span class="lineNum"> 573 </span> :<span class="lineCov"> 14 : void mbedtls_pkcs7_free( mbedtls_pkcs7 *pkcs7 )</span></a>
-<a name="574"><span class="lineNum"> 574 </span> : : {</a>
-<a name="575"><span class="lineNum"> 575 </span> : : mbedtls_x509_name *name_cur;</a>
-<a name="576"><span class="lineNum"> 576 </span> : : mbedtls_x509_name *name_prv;</a>
-<a name="577"><span class="lineNum"> 577 </span> : : </a>
-<a name="578"><span class="lineNum"> 578 </span> :<span class="lineCov"> 14 : if( pkcs7 == NULL )</span></a>
-<a name="579"><span class="lineNum"> 579 </span> :<span class="lineNoCov"> 0 : return;</span></a>
-<a name="580"><span class="lineNum"> 580 </span> : : </a>
-<a name="581"><span class="lineNum"> 581 </span> :<span class="lineCov"> 14 : mbedtls_x509_crt_free( &amp;pkcs7-&gt;signed_data.certs );</span></a>
-<a name="582"><span class="lineNum"> 582 </span> :<span class="lineCov"> 14 : mbedtls_x509_crl_free( &amp;pkcs7-&gt;signed_data.crl );</span></a>
-<a name="583"><span class="lineNum"> 583 </span> : : </a>
-<a name="584"><span class="lineNum"> 584 </span> :<span class="lineCov"> 14 : name_cur = pkcs7-&gt;signed_data.signers.issuer.next;</span></a>
-<a name="585"><span class="lineNum"> 585 </span> :<span class="lineCov"> 98 : while( name_cur != NULL )</span></a>
-<a name="586"><span class="lineNum"> 586 </span> : : {</a>
-<a name="587"><span class="lineNum"> 587 </span> :<span class="lineCov"> 84 : name_prv = name_cur;</span></a>
-<a name="588"><span class="lineNum"> 588 </span> :<span class="lineCov"> 84 : name_cur = name_cur-&gt;next;</span></a>
-<a name="589"><span class="lineNum"> 589 </span> :<span class="lineCov"> 84 : mbedtls_platform_zeroize( name_prv, sizeof( mbedtls_x509_name ) );</span></a>
-<a name="590"><span class="lineNum"> 590 </span> :<span class="lineCov"> 84 : mbedtls_free( name_prv );</span></a>
-<a name="591"><span class="lineNum"> 591 </span> : : }</a>
-<a name="592"><span class="lineNum"> 592 </span> : : </a>
-<a name="593"><span class="lineNum"> 593 </span> :<span class="lineCov"> 14 : mbedtls_platform_zeroize( pkcs7, sizeof( mbedtls_pkcs7 ) );</span></a>
-<a name="594"><span class="lineNum"> 594 </span> : : }</a>
-<a name="595"><span class="lineNum"> 595 </span> : : </a>
-<a name="596"><span class="lineNum"> 596 </span> : : #endif</a>
+<a name="547"><span class="lineNum"> 547 </span> :<span class="lineNoCov"> 0 : mbedtls_free( hash );</span></a>
+<a name="548"><span class="lineNum"> 548 </span> : : </a>
+<a name="549"><span class="lineNum"> 549 </span> :<span class="lineNoCov"> 0 : return( ret );</span></a>
+<a name="550"><span class="lineNum"> 550 </span> : : }</a>
+<a name="551"><span class="lineNum"> 551 </span> : : </a>
+<a name="552"><span class="lineNum"> 552 </span> :<span class="lineCov"> 16 : int mbedtls_pkcs7_signed_hash_verify( mbedtls_pkcs7 *pkcs7,</span></a>
+<a name="553"><span class="lineNum"> 553 </span> : : mbedtls_x509_crt *cert,</a>
+<a name="554"><span class="lineNum"> 554 </span> : : const unsigned char *hash, int hashlen)</a>
+<a name="555"><span class="lineNum"> 555 </span> : : {</a>
+<a name="556"><span class="lineNum"> 556 </span> : : int ret;</a>
+<a name="557"><span class="lineNum"> 557 </span> : : mbedtls_md_type_t md_alg;</a>
+<a name="558"><span class="lineNum"> 558 </span> : : mbedtls_pk_context pk_cxt;</a>
+<a name="559"><span class="lineNum"> 559 </span> : : </a>
+<a name="560"><span class="lineNum"> 560 </span> :<span class="lineCov"> 16 : ret = mbedtls_oid_get_md_alg( &amp;pkcs7-&gt;signed_data.digest_alg_identifiers, &amp;md_alg );</span></a>
+<a name="561"><span class="lineNum"> 561 </span> :<span class="lineCov"> 16 : if( ret != 0 )</span></a>
+<a name="562"><span class="lineNum"> 562 </span> :<span class="lineNoCov"> 0 : return( MBEDTLS_ERR_PKCS7_INVALID_ALG + ret );</span></a>
+<a name="563"><span class="lineNum"> 563 </span> : : </a>
+<a name="564"><span class="lineNum"> 564 </span> :<span class="lineCov"> 16 : pk_cxt = cert-&gt;pk;</span></a>
+<a name="565"><span class="lineNum"> 565 </span> :<span class="lineCov"> 16 : ret = mbedtls_pk_verify( &amp;pk_cxt, md_alg, hash, hashlen,</span></a>
+<a name="566"><span class="lineNum"> 566 </span> :<span class="lineCov"> 16 : pkcs7-&gt;signed_data.signers.sig.p,</span></a>
+<a name="567"><span class="lineNum"> 567 </span> : : pkcs7-&gt;signed_data.signers.sig.len );</a>
+<a name="568"><span class="lineNum"> 568 </span> : : </a>
+<a name="569"><span class="lineNum"> 569 </span> :<span class="lineCov"> 16 : return ( ret );</span></a>
+<a name="570"><span class="lineNum"> 570 </span> : : }</a>
+<a name="571"><span class="lineNum"> 571 </span> : : </a>
+<a name="572"><span class="lineNum"> 572 </span> : : /*</a>
+<a name="573"><span class="lineNum"> 573 </span> : : * Unallocate all pkcs7 data</a>
+<a name="574"><span class="lineNum"> 574 </span> : : */</a>
+<a name="575"><span class="lineNum"> 575 </span> :<span class="lineCov"> 20 : void mbedtls_pkcs7_free( mbedtls_pkcs7 *pkcs7 )</span></a>
+<a name="576"><span class="lineNum"> 576 </span> : : {</a>
+<a name="577"><span class="lineNum"> 577 </span> : : mbedtls_x509_name *name_cur;</a>
+<a name="578"><span class="lineNum"> 578 </span> : : mbedtls_x509_name *name_prv;</a>
+<a name="579"><span class="lineNum"> 579 </span> : : </a>
+<a name="580"><span class="lineNum"> 580 </span> :<span class="lineCov"> 20 : if( pkcs7 == NULL )</span></a>
+<a name="581"><span class="lineNum"> 581 </span> :<span class="lineNoCov"> 0 : return;</span></a>
+<a name="582"><span class="lineNum"> 582 </span> : : </a>
+<a name="583"><span class="lineNum"> 583 </span> :<span class="lineCov"> 20 : mbedtls_x509_crt_free( &amp;pkcs7-&gt;signed_data.certs );</span></a>
+<a name="584"><span class="lineNum"> 584 </span> :<span class="lineCov"> 20 : mbedtls_x509_crl_free( &amp;pkcs7-&gt;signed_data.crl );</span></a>
+<a name="585"><span class="lineNum"> 585 </span> : : </a>
+<a name="586"><span class="lineNum"> 586 </span> :<span class="lineCov"> 20 : name_cur = pkcs7-&gt;signed_data.signers.issuer.next;</span></a>
+<a name="587"><span class="lineNum"> 587 </span> :<span class="lineCov"> 112 : while( name_cur != NULL )</span></a>
+<a name="588"><span class="lineNum"> 588 </span> : : {</a>
+<a name="589"><span class="lineNum"> 589 </span> :<span class="lineCov"> 92 : name_prv = name_cur;</span></a>
+<a name="590"><span class="lineNum"> 590 </span> :<span class="lineCov"> 92 : name_cur = name_cur-&gt;next;</span></a>
+<a name="591"><span class="lineNum"> 591 </span> :<span class="lineCov"> 92 : mbedtls_platform_zeroize( name_prv, sizeof( mbedtls_x509_name ) );</span></a>
+<a name="592"><span class="lineNum"> 592 </span> :<span class="lineCov"> 92 : mbedtls_free( name_prv );</span></a>
+<a name="593"><span class="lineNum"> 593 </span> : : }</a>
+<a name="594"><span class="lineNum"> 594 </span> : : </a>
+<a name="595"><span class="lineNum"> 595 </span> :<span class="lineCov"> 20 : mbedtls_platform_zeroize( pkcs7, sizeof( mbedtls_pkcs7 ) );</span></a>
+<a name="596"><span class="lineNum"> 596 </span> : : }</a>
+<a name="597"><span class="lineNum"> 597 </span> : : </a>
+<a name="598"><span class="lineNum"> 598 </span> : : #endif</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/libstb/index-sort-b.html b/coverage-report/libstb/index-sort-b.html
index 924129a..c561e97 100644
--- a/coverage-report/libstb/index-sort-b.html
+++ b/coverage-report/libstb/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/index-sort-f.html b/coverage-report/libstb/index-sort-f.html
index 544d2d9..8d0f61d 100644
--- a/coverage-report/libstb/index-sort-f.html
+++ b/coverage-report/libstb/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/index-sort-l.html b/coverage-report/libstb/index-sort-l.html
index bd13446..0857ec1 100644
--- a/coverage-report/libstb/index-sort-l.html
+++ b/coverage-report/libstb/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/index.html b/coverage-report/libstb/index.html
index 4615f70..a7730d4 100644
--- a/coverage-report/libstb/index.html
+++ b/coverage-report/libstb/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/secvar/backend/edk2-compat-process.c.func-sort-c.html b/coverage-report/libstb/secvar/backend/edk2-compat-process.c.func-sort-c.html
index 6772111..a77d605 100644
--- a/coverage-report/libstb/secvar/backend/edk2-compat-process.c.func-sort-c.html
+++ b/coverage-report/libstb/secvar/backend/edk2-compat-process.c.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">323</td>
- <td class="headerCovTableEntry">397</td>
- <td class="headerCovTableEntryMed">81.4 %</td>
+ <td class="headerCovTableEntry">354</td>
+ <td class="headerCovTableEntry">417</td>
+ <td class="headerCovTableEntryMed">84.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">20</td>
@@ -69,84 +69,84 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#231">validate_hash</a></td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#244">validate_hash</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#52">char_to_wchar</a></td>
- <td class="coverFnHi">11</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#575">get_hash_to_verify</a></td>
- <td class="coverFnHi">11</td>
- </tr>
- <tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#70">get_key_authority</a></td>
- <td class="coverFnHi">11</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#366">update_timestamp</a></td>
+ <td class="coverFnHi">12</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#351">update_timestamp</a></td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#22">update_variable_in_bank</a></td>
<td class="coverFnHi">12</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#21">update_variable_in_bank</a></td>
- <td class="coverFnHi">12</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#55">char_to_wchar</a></td>
+ <td class="coverFnHi">14</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#412">get_pkcs7</a></td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#615">get_hash_to_verify</a></td>
<td class="coverFnHi">14</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#455">verify_signature</a></td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#73">get_key_authority</a></td>
<td class="coverFnHi">14</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#99">get_esl_signature_list_size</a></td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#102">get_esl_signature_list_size</a></td>
<td class="coverFnHi">16</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#202">validate_cert</a></td>
- <td class="coverFnHi">16</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#427">get_pkcs7</a></td>
+ <td class="coverFnHi">18</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#471">verify_signature</a></td>
+ <td class="coverFnHi">18</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#215">validate_cert</a></td>
+ <td class="coverFnHi">20</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#251">validate_esl_list</a></td>
- <td class="coverFnHi">21</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#264">validate_esl_list</a></td>
+ <td class="coverFnHi">28</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#385">check_timestamp</a></td>
- <td class="coverFnHi">24</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#400">check_timestamp</a></td>
+ <td class="coverFnHi">31</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#170">get_auth_descriptor2</a></td>
- <td class="coverFnHi">24</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#180">get_auth_descriptor2</a></td>
+ <td class="coverFnHi">32</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#655">process_update</a></td>
- <td class="coverFnHi">24</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#695">process_update</a></td>
+ <td class="coverFnHi">32</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#647">is_pkcs7_sig_format</a></td>
- <td class="coverFnHi">26</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#687">is_pkcs7_sig_format</a></td>
+ <td class="coverFnHi">34</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#332">get_last_timestamp</a></td>
- <td class="coverFnHi">36</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#347">get_last_timestamp</a></td>
+ <td class="coverFnHi">43</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#154">get_pkcs7_len</a></td>
- <td class="coverFnHi">38</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#116">get_esl_cert</a></td>
+ <td class="coverFnHi">46</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#113">get_esl_cert</a></td>
- <td class="coverFnHi">39</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#164">get_pkcs7_len</a></td>
+ <td class="coverFnHi">50</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#368">unpack_timestamp</a></td>
- <td class="coverFnHi">48</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#383">unpack_timestamp</a></td>
+ <td class="coverFnHi">62</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#86">get_esl_signature_list</a></td>
- <td class="coverFnHi">78</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#89">get_esl_signature_list</a></td>
+ <td class="coverFnHi">92</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libstb/secvar/backend/edk2-compat-process.c.func.html b/coverage-report/libstb/secvar/backend/edk2-compat-process.c.func.html
index ce9ab37..3c96d6e 100644
--- a/coverage-report/libstb/secvar/backend/edk2-compat-process.c.func.html
+++ b/coverage-report/libstb/secvar/backend/edk2-compat-process.c.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">323</td>
- <td class="headerCovTableEntry">397</td>
- <td class="headerCovTableEntryMed">81.4 %</td>
+ <td class="headerCovTableEntry">354</td>
+ <td class="headerCovTableEntry">417</td>
+ <td class="headerCovTableEntryMed">84.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">20</td>
@@ -69,84 +69,84 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="edk2-compat-process.c.func-sort-c.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#52">char_to_wchar</a></td>
- <td class="coverFnHi">11</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#55">char_to_wchar</a></td>
+ <td class="coverFnHi">14</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#385">check_timestamp</a></td>
- <td class="coverFnHi">24</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#400">check_timestamp</a></td>
+ <td class="coverFnHi">31</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#170">get_auth_descriptor2</a></td>
- <td class="coverFnHi">24</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#180">get_auth_descriptor2</a></td>
+ <td class="coverFnHi">32</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#113">get_esl_cert</a></td>
- <td class="coverFnHi">39</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#116">get_esl_cert</a></td>
+ <td class="coverFnHi">46</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#86">get_esl_signature_list</a></td>
- <td class="coverFnHi">78</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#89">get_esl_signature_list</a></td>
+ <td class="coverFnHi">92</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#99">get_esl_signature_list_size</a></td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#102">get_esl_signature_list_size</a></td>
<td class="coverFnHi">16</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#575">get_hash_to_verify</a></td>
- <td class="coverFnHi">11</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#615">get_hash_to_verify</a></td>
+ <td class="coverFnHi">14</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#70">get_key_authority</a></td>
- <td class="coverFnHi">11</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#73">get_key_authority</a></td>
+ <td class="coverFnHi">14</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#332">get_last_timestamp</a></td>
- <td class="coverFnHi">36</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#347">get_last_timestamp</a></td>
+ <td class="coverFnHi">43</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#412">get_pkcs7</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#427">get_pkcs7</a></td>
+ <td class="coverFnHi">18</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#154">get_pkcs7_len</a></td>
- <td class="coverFnHi">38</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#164">get_pkcs7_len</a></td>
+ <td class="coverFnHi">50</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#647">is_pkcs7_sig_format</a></td>
- <td class="coverFnHi">26</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#687">is_pkcs7_sig_format</a></td>
+ <td class="coverFnHi">34</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#655">process_update</a></td>
- <td class="coverFnHi">24</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#695">process_update</a></td>
+ <td class="coverFnHi">32</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#368">unpack_timestamp</a></td>
- <td class="coverFnHi">48</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#383">unpack_timestamp</a></td>
+ <td class="coverFnHi">62</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#351">update_timestamp</a></td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#366">update_timestamp</a></td>
<td class="coverFnHi">12</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#21">update_variable_in_bank</a></td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#22">update_variable_in_bank</a></td>
<td class="coverFnHi">12</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#202">validate_cert</a></td>
- <td class="coverFnHi">16</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#215">validate_cert</a></td>
+ <td class="coverFnHi">20</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#251">validate_esl_list</a></td>
- <td class="coverFnHi">21</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#264">validate_esl_list</a></td>
+ <td class="coverFnHi">28</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#231">validate_hash</a></td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#244">validate_hash</a></td>
<td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#455">verify_signature</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="edk2-compat-process.c.gcov.html#471">verify_signature</a></td>
+ <td class="coverFnHi">18</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libstb/secvar/backend/edk2-compat-process.c.gcov.html b/coverage-report/libstb/secvar/backend/edk2-compat-process.c.gcov.html
index 1ba58f0..969b573 100644
--- a/coverage-report/libstb/secvar/backend/edk2-compat-process.c.gcov.html
+++ b/coverage-report/libstb/secvar/backend/edk2-compat-process.c.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">323</td>
- <td class="headerCovTableEntry">397</td>
- <td class="headerCovTableEntryMed">81.4 %</td>
+ <td class="headerCovTableEntry">354</td>
+ <td class="headerCovTableEntry">417</td>
+ <td class="headerCovTableEntryMed">84.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">20</td>
@@ -82,758 +82,796 @@
<a name="11"><span class="lineNum"> 11 </span> : : #include &lt;stdint.h&gt;</a>
<a name="12"><span class="lineNum"> 12 </span> : : #include &lt;ccan/endian/endian.h&gt;</a>
<a name="13"><span class="lineNum"> 13 </span> : : #include &lt;mbedtls/error.h&gt;</a>
-<a name="14"><span class="lineNum"> 14 </span> : : #include &lt;device.h&gt;</a>
-<a name="15"><span class="lineNum"> 15 </span> : : #include &lt;assert.h&gt;</a>
-<a name="16"><span class="lineNum"> 16 </span> : : #include &quot;libstb/crypto/pkcs7/pkcs7.h&quot;</a>
-<a name="17"><span class="lineNum"> 17 </span> : : #include &quot;edk2.h&quot;</a>
-<a name="18"><span class="lineNum"> 18 </span> : : #include &quot;../secvar.h&quot;</a>
-<a name="19"><span class="lineNum"> 19 </span> : : #include &quot;edk2-compat-process.h&quot;</a>
-<a name="20"><span class="lineNum"> 20 </span> : : </a>
-<a name="21"><span class="lineNum"> 21 </span> : : bool setup_mode;</a>
-<a name="22"><span class="lineNum"> 22 </span> : : </a>
-<a name="23"><span class="lineNum"> 23 </span> :<span class="lineCov"> 12 : int update_variable_in_bank(struct secvar *update_var, const char *data,</span></a>
-<a name="24"><span class="lineNum"> 24 </span> : : const uint64_t dsize, struct list_head *bank)</a>
-<a name="25"><span class="lineNum"> 25 </span> : : {</a>
-<a name="26"><span class="lineNum"> 26 </span> : : struct secvar *var;</a>
-<a name="27"><span class="lineNum"> 27 </span> : : </a>
-<a name="28"><span class="lineNum"> 28 </span> :<span class="lineCov"> 12 : var = find_secvar(update_var-&gt;key, update_var-&gt;key_len, bank);</span></a>
-<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 12 : if (!var)</span></a>
-<a name="30"><span class="lineNum"> 30 </span> :<span class="lineNoCov"> 0 : return OPAL_EMPTY;</span></a>
-<a name="31"><span class="lineNum"> 31 </span> : : </a>
-<a name="32"><span class="lineNum"> 32 </span> : : /* Reallocate the data memory, if there is change in data size */</a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 12 : if (var-&gt;data_size &lt; dsize)</span></a>
-<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 9 : if (realloc_secvar(var, dsize))</span></a>
-<a name="35"><span class="lineNum"> 35 </span> :<span class="lineNoCov"> 0 : return OPAL_NO_MEM;</span></a>
-<a name="36"><span class="lineNum"> 36 </span> : : </a>
-<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 12 : if (dsize &amp;&amp; data)</span></a>
-<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 10 : memcpy(var-&gt;data, data, dsize);</span></a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 12 : var-&gt;data_size = dsize;</span></a>
-<a name="40"><span class="lineNum"> 40 </span> : : </a>
-<a name="41"><span class="lineNum"> 41 </span> : : /* Clear the volatile bit only if updated with positive data size */</a>
-<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 12 : if (dsize)</span></a>
-<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 10 : var-&gt;flags &amp;= ~SECVAR_FLAG_VOLATILE;</span></a>
-<a name="44"><span class="lineNum"> 44 </span> : : else</a>
-<a name="45"><span class="lineNum"> 45 </span> :<span class="lineCov"> 2 : var-&gt;flags |= SECVAR_FLAG_VOLATILE;</span></a>
-<a name="46"><span class="lineNum"> 46 </span> : : </a>
-<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 12 : if (key_equals(update_var-&gt;key, &quot;PK&quot;) || key_equals(update_var-&gt;key, &quot;HWKH&quot;))</span></a>
-<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 5 : var-&gt;flags |= SECVAR_FLAG_PROTECTED;</span></a>
-<a name="49"><span class="lineNum"> 49 </span> : : </a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 12 : return 0;</span></a>
-<a name="51"><span class="lineNum"> 51 </span> : : }</a>
+<a name="14"><span class="lineNum"> 14 </span> : : #include &lt;mbedtls/oid.h&gt;</a>
+<a name="15"><span class="lineNum"> 15 </span> : : #include &lt;device.h&gt;</a>
+<a name="16"><span class="lineNum"> 16 </span> : : #include &lt;assert.h&gt;</a>
+<a name="17"><span class="lineNum"> 17 </span> : : #include &quot;libstb/crypto/pkcs7/pkcs7.h&quot;</a>
+<a name="18"><span class="lineNum"> 18 </span> : : #include &quot;edk2.h&quot;</a>
+<a name="19"><span class="lineNum"> 19 </span> : : #include &quot;../secvar.h&quot;</a>
+<a name="20"><span class="lineNum"> 20 </span> : : #include &quot;edk2-compat-process.h&quot;</a>
+<a name="21"><span class="lineNum"> 21 </span> : : </a>
+<a name="22"><span class="lineNum"> 22 </span> : : bool setup_mode;</a>
+<a name="23"><span class="lineNum"> 23 </span> : : </a>
+<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 12 : int update_variable_in_bank(struct secvar *update_var, const char *data,</span></a>
+<a name="25"><span class="lineNum"> 25 </span> : : const uint64_t dsize, struct list_head *bank)</a>
+<a name="26"><span class="lineNum"> 26 </span> : : {</a>
+<a name="27"><span class="lineNum"> 27 </span> : : struct secvar *var;</a>
+<a name="28"><span class="lineNum"> 28 </span> : : </a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 12 : var = find_secvar(update_var-&gt;key, update_var-&gt;key_len, bank);</span></a>
+<a name="30"><span class="lineNum"> 30 </span> :<span class="lineCov"> 12 : if (!var)</span></a>
+<a name="31"><span class="lineNum"> 31 </span> :<span class="lineNoCov"> 0 : return OPAL_EMPTY;</span></a>
+<a name="32"><span class="lineNum"> 32 </span> : : </a>
+<a name="33"><span class="lineNum"> 33 </span> : : /* Reallocate the data memory, if there is change in data size */</a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 12 : if (var-&gt;data_size &lt; dsize)</span></a>
+<a name="35"><span class="lineNum"> 35 </span> :<span class="lineCov"> 9 : if (realloc_secvar(var, dsize))</span></a>
+<a name="36"><span class="lineNum"> 36 </span> :<span class="lineNoCov"> 0 : return OPAL_NO_MEM;</span></a>
+<a name="37"><span class="lineNum"> 37 </span> : : </a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 12 : if (dsize &amp;&amp; data)</span></a>
+<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 10 : memcpy(var-&gt;data, data, dsize);</span></a>
+<a name="40"><span class="lineNum"> 40 </span> :<span class="lineCov"> 12 : var-&gt;data_size = dsize;</span></a>
+<a name="41"><span class="lineNum"> 41 </span> : : </a>
+<a name="42"><span class="lineNum"> 42 </span> : : /* Clear the volatile bit only if updated with positive data size */</a>
+<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 12 : if (dsize)</span></a>
+<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 10 : var-&gt;flags &amp;= ~SECVAR_FLAG_VOLATILE;</span></a>
+<a name="45"><span class="lineNum"> 45 </span> : : else</a>
+<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 2 : var-&gt;flags |= SECVAR_FLAG_VOLATILE;</span></a>
+<a name="47"><span class="lineNum"> 47 </span> : : </a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 12 : if (key_equals(update_var-&gt;key, &quot;PK&quot;)</span></a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 7 : || key_equals(update_var-&gt;key, &quot;HWKH&quot;)</span></a>
+<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 7 : || key_equals(update_var-&gt;key, &quot;TS&quot;))</span></a>
+<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 5 : var-&gt;flags |= SECVAR_FLAG_PROTECTED;</span></a>
<a name="52"><span class="lineNum"> 52 </span> : : </a>
-<a name="53"><span class="lineNum"> 53 </span> : : /* Expand char to wide character size */</a>
-<a name="54"><span class="lineNum"> 54 </span> :<span class="lineCov"> 11 : static char *char_to_wchar(const char *key, const size_t keylen)</span></a>
-<a name="55"><span class="lineNum"> 55 </span> : : {</a>
-<a name="56"><span class="lineNum"> 56 </span> : : int i;</a>
-<a name="57"><span class="lineNum"> 57 </span> : : char *str;</a>
-<a name="58"><span class="lineNum"> 58 </span> : : </a>
-<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 11 : str = zalloc(keylen * 2);</span></a>
-<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 11 : if (!str)</span></a>
-<a name="61"><span class="lineNum"> 61 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="62"><span class="lineNum"> 62 </span> : : </a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 36 : for (i = 0; i &lt; keylen*2; key++) {</span></a>
-<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 25 : str[i++] = *key;</span></a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 25 : str[i++] = '\0';</span></a>
-<a name="66"><span class="lineNum"> 66 </span> : : }</a>
-<a name="67"><span class="lineNum"> 67 </span> : : </a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 11 : return str;</span></a>
-<a name="69"><span class="lineNum"> 69 </span> : : }</a>
+<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 12 : return 0;</span></a>
+<a name="54"><span class="lineNum"> 54 </span> : : }</a>
+<a name="55"><span class="lineNum"> 55 </span> : : </a>
+<a name="56"><span class="lineNum"> 56 </span> : : /* Expand char to wide character size */</a>
+<a name="57"><span class="lineNum"> 57 </span> :<span class="lineCov"> 14 : static char *char_to_wchar(const char *key, const size_t keylen)</span></a>
+<a name="58"><span class="lineNum"> 58 </span> : : {</a>
+<a name="59"><span class="lineNum"> 59 </span> : : int i;</a>
+<a name="60"><span class="lineNum"> 60 </span> : : char *str;</a>
+<a name="61"><span class="lineNum"> 61 </span> : : </a>
+<a name="62"><span class="lineNum"> 62 </span> :<span class="lineCov"> 14 : str = zalloc(keylen * 2);</span></a>
+<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 14 : if (!str)</span></a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="65"><span class="lineNum"> 65 </span> : : </a>
+<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 46 : for (i = 0; i &lt; keylen*2; key++) {</span></a>
+<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 32 : str[i++] = *key;</span></a>
+<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 32 : str[i++] = '\0';</span></a>
+<a name="69"><span class="lineNum"> 69 </span> : : }</a>
<a name="70"><span class="lineNum"> 70 </span> : : </a>
-<a name="71"><span class="lineNum"> 71 </span> : : /* Returns the authority that can sign the given key update */</a>
-<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 11 : static void get_key_authority(const char *ret[3], const char *key)</span></a>
-<a name="73"><span class="lineNum"> 73 </span> : : {</a>
-<a name="74"><span class="lineNum"> 74 </span> :<span class="lineCov"> 11 : int i = 0;</span></a>
-<a name="75"><span class="lineNum"> 75 </span> : : </a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 11 : if (key_equals(key, &quot;PK&quot;)) {</span></a>
-<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 2 : ret[i++] = &quot;PK&quot;;</span></a>
-<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 9 : } else if (key_equals(key, &quot;KEK&quot;)) {</span></a>
-<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 2 : ret[i++] = &quot;PK&quot;;</span></a>
-<a name="80"><span class="lineNum"> 80 </span> :<span class="lineCov"> 7 : } else if (key_equals(key, &quot;db&quot;) || key_equals(key, &quot;dbx&quot;)) {</span></a>
-<a name="81"><span class="lineNum"> 81 </span> :<span class="lineCov"> 7 : ret[i++] = &quot;KEK&quot;;</span></a>
-<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 7 : ret[i++] = &quot;PK&quot;;</span></a>
-<a name="83"><span class="lineNum"> 83 </span> : : }</a>
-<a name="84"><span class="lineNum"> 84 </span> : : </a>
-<a name="85"><span class="lineNum"> 85 </span> :<span class="lineCov"> 11 : ret[i] = NULL;</span></a>
-<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 11 : }</span></a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 14 : return str;</span></a>
+<a name="72"><span class="lineNum"> 72 </span> : : }</a>
+<a name="73"><span class="lineNum"> 73 </span> : : </a>
+<a name="74"><span class="lineNum"> 74 </span> : : /* Returns the authority that can sign the given key update */</a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 14 : static void get_key_authority(const char *ret[3], const char *key)</span></a>
+<a name="76"><span class="lineNum"> 76 </span> : : {</a>
+<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 14 : int i = 0;</span></a>
+<a name="78"><span class="lineNum"> 78 </span> : : </a>
+<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 14 : if (key_equals(key, &quot;PK&quot;)) {</span></a>
+<a name="80"><span class="lineNum"> 80 </span> :<span class="lineCov"> 2 : ret[i++] = &quot;PK&quot;;</span></a>
+<a name="81"><span class="lineNum"> 81 </span> :<span class="lineCov"> 12 : } else if (key_equals(key, &quot;KEK&quot;)) {</span></a>
+<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 3 : ret[i++] = &quot;PK&quot;;</span></a>
+<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 9 : } else if (key_equals(key, &quot;db&quot;) || key_equals(key, &quot;dbx&quot;)) {</span></a>
+<a name="84"><span class="lineNum"> 84 </span> :<span class="lineCov"> 9 : ret[i++] = &quot;KEK&quot;;</span></a>
+<a name="85"><span class="lineNum"> 85 </span> :<span class="lineCov"> 9 : ret[i++] = &quot;PK&quot;;</span></a>
+<a name="86"><span class="lineNum"> 86 </span> : : }</a>
<a name="87"><span class="lineNum"> 87 </span> : : </a>
-<a name="88"><span class="lineNum"> 88 </span> :<span class="lineCov"> 78 : static EFI_SIGNATURE_LIST* get_esl_signature_list(const char *buf, size_t buflen)</span></a>
-<a name="89"><span class="lineNum"> 89 </span> : : {</a>
-<a name="90"><span class="lineNum"> 90 </span> :<span class="lineCov"> 78 : EFI_SIGNATURE_LIST *list = NULL;</span></a>
-<a name="91"><span class="lineNum"> 91 </span> : : </a>
-<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 78 : if (buflen &lt; sizeof(EFI_SIGNATURE_LIST) || !buf)</span></a>
-<a name="93"><span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="88"><span class="lineNum"> 88 </span> :<span class="lineCov"> 14 : ret[i] = NULL;</span></a>
+<a name="89"><span class="lineNum"> 89 </span> :<span class="lineCov"> 14 : }</span></a>
+<a name="90"><span class="lineNum"> 90 </span> : : </a>
+<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 92 : static EFI_SIGNATURE_LIST* get_esl_signature_list(const char *buf, size_t buflen)</span></a>
+<a name="92"><span class="lineNum"> 92 </span> : : {</a>
+<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 92 : EFI_SIGNATURE_LIST *list = NULL;</span></a>
<a name="94"><span class="lineNum"> 94 </span> : : </a>
-<a name="95"><span class="lineNum"> 95 </span> :<span class="lineCov"> 78 : list = (EFI_SIGNATURE_LIST *)buf;</span></a>
-<a name="96"><span class="lineNum"> 96 </span> : : </a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 78 : return list;</span></a>
-<a name="98"><span class="lineNum"> 98 </span> : : }</a>
+<a name="95"><span class="lineNum"> 95 </span> :<span class="lineCov"> 92 : if (buflen &lt; sizeof(EFI_SIGNATURE_LIST) || !buf)</span></a>
+<a name="96"><span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="97"><span class="lineNum"> 97 </span> : : </a>
+<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 92 : list = (EFI_SIGNATURE_LIST *)buf;</span></a>
<a name="99"><span class="lineNum"> 99 </span> : : </a>
-<a name="100"><span class="lineNum"> 100 </span> : : /* Returns the size of the complete ESL. */</a>
-<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 16 : static int32_t get_esl_signature_list_size(const char *buf, const size_t buflen)</span></a>
-<a name="102"><span class="lineNum"> 102 </span> : : {</a>
-<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 16 : EFI_SIGNATURE_LIST *list = get_esl_signature_list(buf, buflen);</span></a>
-<a name="104"><span class="lineNum"> 104 </span> : : </a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 16 : if (!list)</span></a>
-<a name="106"><span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
+<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 92 : return list;</span></a>
+<a name="101"><span class="lineNum"> 101 </span> : : }</a>
+<a name="102"><span class="lineNum"> 102 </span> : : </a>
+<a name="103"><span class="lineNum"> 103 </span> : : /* Returns the size of the complete ESL. */</a>
+<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 16 : static int32_t get_esl_signature_list_size(const char *buf, const size_t buflen)</span></a>
+<a name="105"><span class="lineNum"> 105 </span> : : {</a>
+<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 16 : EFI_SIGNATURE_LIST *list = get_esl_signature_list(buf, buflen);</span></a>
<a name="107"><span class="lineNum"> 107 </span> : : </a>
-<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 16 : return le32_to_cpu(list-&gt;SignatureListSize);</span></a>
-<a name="109"><span class="lineNum"> 109 </span> : : }</a>
+<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 16 : if (!list)</span></a>
+<a name="109"><span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
<a name="110"><span class="lineNum"> 110 </span> : : </a>
-<a name="111"><span class="lineNum"> 111 </span> : : /* </a>
-<a name="112"><span class="lineNum"> 112 </span> : : * Copies the certificate from the ESL into cert buffer and returns the size</a>
-<a name="113"><span class="lineNum"> 113 </span> : : * of the certificate</a>
-<a name="114"><span class="lineNum"> 114 </span> : : */</a>
-<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 39 : static int get_esl_cert(const char *buf, const size_t buflen, char **cert)</span></a>
-<a name="116"><span class="lineNum"> 116 </span> : : {</a>
-<a name="117"><span class="lineNum"> 117 </span> : : size_t sig_data_offset;</a>
-<a name="118"><span class="lineNum"> 118 </span> : : size_t size;</a>
-<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 39 : EFI_SIGNATURE_LIST *list = get_esl_signature_list(buf, buflen);</span></a>
-<a name="120"><span class="lineNum"> 120 </span> : : </a>
-<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 39 : if (!list)</span></a>
-<a name="122"><span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
+<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 16 : return le32_to_cpu(list-&gt;SignatureListSize);</span></a>
+<a name="112"><span class="lineNum"> 112 </span> : : }</a>
+<a name="113"><span class="lineNum"> 113 </span> : : </a>
+<a name="114"><span class="lineNum"> 114 </span> : : /* </a>
+<a name="115"><span class="lineNum"> 115 </span> : : * Copies the certificate from the ESL into cert buffer and returns the size</a>
+<a name="116"><span class="lineNum"> 116 </span> : : * of the certificate</a>
+<a name="117"><span class="lineNum"> 117 </span> : : */</a>
+<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 46 : static int get_esl_cert(const char *buf, const size_t buflen, char **cert)</span></a>
+<a name="119"><span class="lineNum"> 119 </span> : : {</a>
+<a name="120"><span class="lineNum"> 120 </span> : : size_t sig_data_offset;</a>
+<a name="121"><span class="lineNum"> 121 </span> : : size_t size;</a>
+<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 46 : EFI_SIGNATURE_LIST *list = get_esl_signature_list(buf, buflen);</span></a>
<a name="123"><span class="lineNum"> 123 </span> : : </a>
-<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 39 : assert(cert != NULL);</span></a>
-<a name="125"><span class="lineNum"> 125 </span> : : </a>
-<a name="126"><span class="lineNum"> 126 </span> :<span class="lineCov"> 39 : size = le32_to_cpu(list-&gt;SignatureSize) - sizeof(uuid_t);</span></a>
-<a name="127"><span class="lineNum"> 127 </span> : : </a>
-<a name="128"><span class="lineNum"> 128 </span> :<span class="lineCov"> 39 : prlog(PR_DEBUG,&quot;size of signature list size is %u\n&quot;,</span></a>
-<a name="129"><span class="lineNum"> 129 </span> : : le32_to_cpu(list-&gt;SignatureListSize));</a>
-<a name="130"><span class="lineNum"> 130 </span> :<span class="lineCov"> 39 : prlog(PR_DEBUG, &quot;size of signature header size is %u\n&quot;,</span></a>
-<a name="131"><span class="lineNum"> 131 </span> : : le32_to_cpu(list-&gt;SignatureHeaderSize));</a>
-<a name="132"><span class="lineNum"> 132 </span> :<span class="lineCov"> 39 : prlog(PR_DEBUG, &quot;size of signature size is %u\n&quot;,</span></a>
-<a name="133"><span class="lineNum"> 133 </span> : : le32_to_cpu(list-&gt;SignatureSize));</a>
-<a name="134"><span class="lineNum"> 134 </span> : : </a>
-<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 39 : sig_data_offset = sizeof(EFI_SIGNATURE_LIST)</span></a>
-<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 39 : + le32_to_cpu(list-&gt;SignatureHeaderSize)</span></a>
-<a name="137"><span class="lineNum"> 137 </span> : : + 16 * sizeof(uint8_t);</a>
-<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 39 : if (sig_data_offset &gt; buflen)</span></a>
-<a name="139"><span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
+<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 46 : if (!list)</span></a>
+<a name="125"><span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
+<a name="126"><span class="lineNum"> 126 </span> : : </a>
+<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 46 : assert(cert != NULL);</span></a>
+<a name="128"><span class="lineNum"> 128 </span> : : </a>
+<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 46 : if (le32_to_cpu(list-&gt;SignatureSize) &lt;= sizeof(uuid_t))</span></a>
+<a name="130"><span class="lineNum"> 130 </span> :<span class="lineCov"> 1 : return OPAL_PARAMETER;</span></a>
+<a name="131"><span class="lineNum"> 131 </span> : : </a>
+<a name="132"><span class="lineNum"> 132 </span> :<span class="lineCov"> 45 : size = le32_to_cpu(list-&gt;SignatureSize) - sizeof(uuid_t);</span></a>
+<a name="133"><span class="lineNum"> 133 </span> : : </a>
+<a name="134"><span class="lineNum"> 134 </span> :<span class="lineCov"> 45 : prlog(PR_DEBUG,&quot;size of signature list size is %u\n&quot;,</span></a>
+<a name="135"><span class="lineNum"> 135 </span> : : le32_to_cpu(list-&gt;SignatureListSize));</a>
+<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 45 : prlog(PR_DEBUG, &quot;size of signature header size is %u\n&quot;,</span></a>
+<a name="137"><span class="lineNum"> 137 </span> : : le32_to_cpu(list-&gt;SignatureHeaderSize));</a>
+<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 45 : prlog(PR_DEBUG, &quot;size of signature size is %u\n&quot;,</span></a>
+<a name="139"><span class="lineNum"> 139 </span> : : le32_to_cpu(list-&gt;SignatureSize));</a>
<a name="140"><span class="lineNum"> 140 </span> : : </a>
-<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 39 : *cert = zalloc(size);</span></a>
-<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 39 : if (!(*cert))</span></a>
-<a name="143"><span class="lineNum"> 143 </span> :<span class="lineNoCov"> 0 : return OPAL_NO_MEM;</span></a>
+<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 45 : sig_data_offset = sizeof(EFI_SIGNATURE_LIST)</span></a>
+<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 45 : + le32_to_cpu(list-&gt;SignatureHeaderSize)</span></a>
+<a name="143"><span class="lineNum"> 143 </span> : : + 16 * sizeof(uint8_t);</a>
<a name="144"><span class="lineNum"> 144 </span> : : </a>
-<a name="145"><span class="lineNum"> 145 </span> : : /* Since buf can have more than one ESL, copy only the size calculated</a>
-<a name="146"><span class="lineNum"> 146 </span> : : * to return single ESL */</a>
-<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 39 : memcpy(*cert, buf + sig_data_offset, size);</span></a>
-<a name="148"><span class="lineNum"> 148 </span> : : </a>
-<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 39 : return size;</span></a>
-<a name="150"><span class="lineNum"> 150 </span> : : }</a>
-<a name="151"><span class="lineNum"> 151 </span> : : </a>
-<a name="152"><span class="lineNum"> 152 </span> : : /* </a>
-<a name="153"><span class="lineNum"> 153 </span> : : * Extracts size of the PKCS7 signed data embedded in the</a>
-<a name="154"><span class="lineNum"> 154 </span> : : * struct Authentication 2 Descriptor Header.</a>
-<a name="155"><span class="lineNum"> 155 </span> : : */</a>
-<a name="156"><span class="lineNum"> 156 </span> :<span class="lineCov"> 38 : static size_t get_pkcs7_len(const struct efi_variable_authentication_2 *auth)</span></a>
-<a name="157"><span class="lineNum"> 157 </span> : : {</a>
-<a name="158"><span class="lineNum"> 158 </span> : : uint32_t dw_length;</a>
-<a name="159"><span class="lineNum"> 159 </span> : : size_t size;</a>
-<a name="160"><span class="lineNum"> 160 </span> : : </a>
-<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 38 : assert(auth != NULL);</span></a>
-<a name="162"><span class="lineNum"> 162 </span> : : </a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 38 : dw_length = le32_to_cpu(auth-&gt;auth_info.hdr.dw_length);</span></a>
-<a name="164"><span class="lineNum"> 164 </span> :<span class="lineCov"> 38 : size = dw_length - (sizeof(auth-&gt;auth_info.hdr.dw_length)</span></a>
-<a name="165"><span class="lineNum"> 165 </span> : : + sizeof(auth-&gt;auth_info.hdr.w_revision)</a>
-<a name="166"><span class="lineNum"> 166 </span> : : + sizeof(auth-&gt;auth_info.hdr.w_certificate_type)</a>
-<a name="167"><span class="lineNum"> 167 </span> : : + sizeof(auth-&gt;auth_info.cert_type));</a>
-<a name="168"><span class="lineNum"> 168 </span> : : </a>
-<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 38 : return size;</span></a>
-<a name="170"><span class="lineNum"> 170 </span> : : }</a>
-<a name="171"><span class="lineNum"> 171 </span> : : </a>
-<a name="172"><span class="lineNum"> 172 </span> :<span class="lineCov"> 24 : int get_auth_descriptor2(const void *buf, const size_t buflen, void **auth_buffer)</span></a>
-<a name="173"><span class="lineNum"> 173 </span> : : {</a>
-<a name="174"><span class="lineNum"> 174 </span> :<span class="lineCov"> 24 : const struct efi_variable_authentication_2 *auth = buf;</span></a>
-<a name="175"><span class="lineNum"> 175 </span> : : int auth_buffer_size;</a>
-<a name="176"><span class="lineNum"> 176 </span> : : size_t len;</a>
-<a name="177"><span class="lineNum"> 177 </span> : : </a>
-<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 24 : assert(auth_buffer != NULL);</span></a>
-<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 24 : if (buflen &lt; sizeof(struct efi_variable_authentication_2)</span></a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 24 : || !buf)</span></a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
-<a name="182"><span class="lineNum"> 182 </span> : : </a>
-<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 24 : len = get_pkcs7_len(auth);</span></a>
-<a name="184"><span class="lineNum"> 184 </span> : : /* pkcs7 content length cannot be greater than buflen */ </a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 24 : if (len &gt; buflen)</span></a>
-<a name="186"><span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
+<a name="145"><span class="lineNum"> 145 </span> : : /* Ensure this ESL does not overflow the bounds of the buffer */</a>
+<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 45 : if (sig_data_offset + size &gt; buflen) {</span></a>
+<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 2 : prlog(PR_ERR, &quot;Number of bytes of ESL data is less than size specified\n&quot;);</span></a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 2 : return OPAL_PARAMETER;</span></a>
+<a name="149"><span class="lineNum"> 149 </span> : : }</a>
+<a name="150"><span class="lineNum"> 150 </span> : : </a>
+<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 43 : *cert = zalloc(size);</span></a>
+<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 43 : if (!(*cert))</span></a>
+<a name="153"><span class="lineNum"> 153 </span> :<span class="lineNoCov"> 0 : return OPAL_NO_MEM;</span></a>
+<a name="154"><span class="lineNum"> 154 </span> : : </a>
+<a name="155"><span class="lineNum"> 155 </span> : : /* Since buf can have more than one ESL, copy only the size calculated</a>
+<a name="156"><span class="lineNum"> 156 </span> : : * to return single ESL */</a>
+<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 43 : memcpy(*cert, buf + sig_data_offset, size);</span></a>
+<a name="158"><span class="lineNum"> 158 </span> : : </a>
+<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 43 : return size;</span></a>
+<a name="160"><span class="lineNum"> 160 </span> : : }</a>
+<a name="161"><span class="lineNum"> 161 </span> : : </a>
+<a name="162"><span class="lineNum"> 162 </span> : : /* </a>
+<a name="163"><span class="lineNum"> 163 </span> : : * Extracts size of the PKCS7 signed data embedded in the</a>
+<a name="164"><span class="lineNum"> 164 </span> : : * struct Authentication 2 Descriptor Header.</a>
+<a name="165"><span class="lineNum"> 165 </span> : : */</a>
+<a name="166"><span class="lineNum"> 166 </span> :<span class="lineCov"> 50 : static size_t get_pkcs7_len(const struct efi_variable_authentication_2 *auth)</span></a>
+<a name="167"><span class="lineNum"> 167 </span> : : {</a>
+<a name="168"><span class="lineNum"> 168 </span> : : uint32_t dw_length;</a>
+<a name="169"><span class="lineNum"> 169 </span> : : size_t size;</a>
+<a name="170"><span class="lineNum"> 170 </span> : : </a>
+<a name="171"><span class="lineNum"> 171 </span> :<span class="lineCov"> 50 : assert(auth != NULL);</span></a>
+<a name="172"><span class="lineNum"> 172 </span> : : </a>
+<a name="173"><span class="lineNum"> 173 </span> :<span class="lineCov"> 50 : dw_length = le32_to_cpu(auth-&gt;auth_info.hdr.dw_length);</span></a>
+<a name="174"><span class="lineNum"> 174 </span> :<span class="lineCov"> 50 : size = dw_length - (sizeof(auth-&gt;auth_info.hdr.dw_length)</span></a>
+<a name="175"><span class="lineNum"> 175 </span> : : + sizeof(auth-&gt;auth_info.hdr.w_revision)</a>
+<a name="176"><span class="lineNum"> 176 </span> : : + sizeof(auth-&gt;auth_info.hdr.w_certificate_type)</a>
+<a name="177"><span class="lineNum"> 177 </span> : : + sizeof(auth-&gt;auth_info.cert_type));</a>
+<a name="178"><span class="lineNum"> 178 </span> : : </a>
+<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 50 : return size;</span></a>
+<a name="180"><span class="lineNum"> 180 </span> : : }</a>
+<a name="181"><span class="lineNum"> 181 </span> : : </a>
+<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 32 : int get_auth_descriptor2(const void *buf, const size_t buflen, void **auth_buffer)</span></a>
+<a name="183"><span class="lineNum"> 183 </span> : : {</a>
+<a name="184"><span class="lineNum"> 184 </span> :<span class="lineCov"> 32 : const struct efi_variable_authentication_2 *auth = buf;</span></a>
+<a name="185"><span class="lineNum"> 185 </span> : : int auth_buffer_size;</a>
+<a name="186"><span class="lineNum"> 186 </span> : : size_t len;</a>
<a name="187"><span class="lineNum"> 187 </span> : : </a>
-<a name="188"><span class="lineNum"> 188 </span> :<span class="lineCov"> 24 : auth_buffer_size = sizeof(auth-&gt;timestamp) + sizeof(auth-&gt;auth_info.hdr)</span></a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 24 : + sizeof(auth-&gt;auth_info.cert_type) + len;</span></a>
-<a name="190"><span class="lineNum"> 190 </span> : : </a>
-<a name="191"><span class="lineNum"> 191 </span> :<span class="lineCov"> 24 : *auth_buffer = zalloc(auth_buffer_size);</span></a>
-<a name="192"><span class="lineNum"> 192 </span> :<span class="lineCov"> 24 : if (!(*auth_buffer))</span></a>
-<a name="193"><span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : return OPAL_NO_MEM;</span></a>
-<a name="194"><span class="lineNum"> 194 </span> : : </a>
-<a name="195"><span class="lineNum"> 195 </span> : : /*</a>
-<a name="196"><span class="lineNum"> 196 </span> : : * Data = auth descriptor + new ESL data.</a>
-<a name="197"><span class="lineNum"> 197 </span> : : * Extracts only the auth descriptor from data.</a>
-<a name="198"><span class="lineNum"> 198 </span> : : */</a>
-<a name="199"><span class="lineNum"> 199 </span> :<span class="lineCov"> 24 : memcpy(*auth_buffer, buf, auth_buffer_size);</span></a>
+<a name="188"><span class="lineNum"> 188 </span> :<span class="lineCov"> 32 : assert(auth_buffer != NULL);</span></a>
+<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 32 : if (buflen &lt; sizeof(struct efi_variable_authentication_2)</span></a>
+<a name="190"><span class="lineNum"> 190 </span> :<span class="lineCov"> 32 : || !buf)</span></a>
+<a name="191"><span class="lineNum"> 191 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
+<a name="192"><span class="lineNum"> 192 </span> : : </a>
+<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 32 : len = get_pkcs7_len(auth);</span></a>
+<a name="194"><span class="lineNum"> 194 </span> : : /* pkcs7 content length cannot be greater than buflen */ </a>
+<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 32 : if (len &gt; buflen)</span></a>
+<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
+<a name="197"><span class="lineNum"> 197 </span> : : </a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 32 : auth_buffer_size = sizeof(auth-&gt;timestamp) + sizeof(auth-&gt;auth_info.hdr)</span></a>
+<a name="199"><span class="lineNum"> 199 </span> :<span class="lineCov"> 32 : + sizeof(auth-&gt;auth_info.cert_type) + len;</span></a>
<a name="200"><span class="lineNum"> 200 </span> : : </a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 24 : return auth_buffer_size;</span></a>
-<a name="202"><span class="lineNum"> 202 </span> : : }</a>
+<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 32 : if (auth_buffer_size &gt; buflen)</span></a>
+<a name="202"><span class="lineNum"> 202 </span> :<span class="lineCov"> 1 : return OPAL_PARAMETER;</span></a>
<a name="203"><span class="lineNum"> 203 </span> : : </a>
-<a name="204"><span class="lineNum"> 204 </span> :<span class="lineCov"> 16 : static bool validate_cert(char *signing_cert, int signing_cert_size)</span></a>
-<a name="205"><span class="lineNum"> 205 </span> : : {</a>
-<a name="206"><span class="lineNum"> 206 </span> : : mbedtls_x509_crt x509;</a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 16 : char *x509_buf = NULL;</span></a>
-<a name="208"><span class="lineNum"> 208 </span> : : int rc;</a>
-<a name="209"><span class="lineNum"> 209 </span> : : </a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 16 : mbedtls_x509_crt_init(&amp;x509);</span></a>
-<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 16 : rc = mbedtls_x509_crt_parse(&amp;x509, signing_cert, signing_cert_size);</span></a>
-<a name="212"><span class="lineNum"> 212 </span> : : </a>
-<a name="213"><span class="lineNum"> 213 </span> : : /* If failure in parsing the certificate, exit */</a>
-<a name="214"><span class="lineNum"> 214 </span> :<span class="lineCov"> 16 : if(rc) {</span></a>
-<a name="215"><span class="lineNum"> 215 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;X509 certificate parsing failed %04x\n&quot;, rc);</span></a>
-<a name="216"><span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="217"><span class="lineNum"> 217 </span> : : }</a>
-<a name="218"><span class="lineNum"> 218 </span> : : </a>
-<a name="219"><span class="lineNum"> 219 </span> :<span class="lineCov"> 16 : x509_buf = zalloc(CERT_BUFFER_SIZE);</span></a>
-<a name="220"><span class="lineNum"> 220 </span> :<span class="lineCov"> 16 : rc = mbedtls_x509_crt_info(x509_buf, CERT_BUFFER_SIZE, &quot;CRT:&quot;, &amp;x509);</span></a>
-<a name="221"><span class="lineNum"> 221 </span> : : </a>
-<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 16 : mbedtls_x509_crt_free(&amp;x509);</span></a>
-<a name="223"><span class="lineNum"> 223 </span> :<span class="lineCov"> 16 : free(x509_buf);</span></a>
-<a name="224"><span class="lineNum"> 224 </span> :<span class="lineCov"> 16 : x509_buf = NULL;</span></a>
+<a name="204"><span class="lineNum"> 204 </span> :<span class="lineCov"> 31 : *auth_buffer = zalloc(auth_buffer_size);</span></a>
+<a name="205"><span class="lineNum"> 205 </span> :<span class="lineCov"> 31 : if (!(*auth_buffer))</span></a>
+<a name="206"><span class="lineNum"> 206 </span> :<span class="lineNoCov"> 0 : return OPAL_NO_MEM;</span></a>
+<a name="207"><span class="lineNum"> 207 </span> : : </a>
+<a name="208"><span class="lineNum"> 208 </span> : : /*</a>
+<a name="209"><span class="lineNum"> 209 </span> : : * Data = auth descriptor + new ESL data.</a>
+<a name="210"><span class="lineNum"> 210 </span> : : * Extracts only the auth descriptor from data.</a>
+<a name="211"><span class="lineNum"> 211 </span> : : */</a>
+<a name="212"><span class="lineNum"> 212 </span> :<span class="lineCov"> 31 : memcpy(*auth_buffer, buf, auth_buffer_size);</span></a>
+<a name="213"><span class="lineNum"> 213 </span> : : </a>
+<a name="214"><span class="lineNum"> 214 </span> :<span class="lineCov"> 31 : return auth_buffer_size;</span></a>
+<a name="215"><span class="lineNum"> 215 </span> : : }</a>
+<a name="216"><span class="lineNum"> 216 </span> : : </a>
+<a name="217"><span class="lineNum"> 217 </span> :<span class="lineCov"> 20 : static bool validate_cert(char *signing_cert, int signing_cert_size)</span></a>
+<a name="218"><span class="lineNum"> 218 </span> : : {</a>
+<a name="219"><span class="lineNum"> 219 </span> : : mbedtls_x509_crt x509;</a>
+<a name="220"><span class="lineNum"> 220 </span> :<span class="lineCov"> 20 : char *x509_buf = NULL;</span></a>
+<a name="221"><span class="lineNum"> 221 </span> : : int rc;</a>
+<a name="222"><span class="lineNum"> 222 </span> : : </a>
+<a name="223"><span class="lineNum"> 223 </span> :<span class="lineCov"> 20 : mbedtls_x509_crt_init(&amp;x509);</span></a>
+<a name="224"><span class="lineNum"> 224 </span> :<span class="lineCov"> 20 : rc = mbedtls_x509_crt_parse(&amp;x509, signing_cert, signing_cert_size);</span></a>
<a name="225"><span class="lineNum"> 225 </span> : : </a>
-<a name="226"><span class="lineNum"> 226 </span> : : /* If failure in reading the certificate, exit */</a>
-<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 16 : if (rc &lt; 0)</span></a>
-<a name="228"><span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="229"><span class="lineNum"> 229 </span> : : </a>
-<a name="230"><span class="lineNum"> 230 </span> :<span class="lineCov"> 16 : return true;</span></a>
-<a name="231"><span class="lineNum"> 231 </span> : : }</a>
-<a name="232"><span class="lineNum"> 232 </span> : : </a>
-<a name="233"><span class="lineNum"> 233 </span> :<span class="lineCov"> 6 : static bool validate_hash(uuid_t type, int size)</span></a>
-<a name="234"><span class="lineNum"> 234 </span> : : {</a>
-<a name="235"><span class="lineNum"> 235 </span> :<span class="lineCov"> 6 : if (uuid_equals(&amp;type, &amp;EFI_CERT_SHA1_GUID) &amp;&amp; (size == 20))</span></a>
-<a name="236"><span class="lineNum"> 236 </span> :<span class="lineNoCov"> 0 : return true;</span></a>
-<a name="237"><span class="lineNum"> 237 </span> : : </a>
-<a name="238"><span class="lineNum"> 238 </span> :<span class="lineCov"> 6 : if (uuid_equals(&amp;type, &amp;EFI_CERT_SHA224_GUID) &amp;&amp; (size == 28))</span></a>
-<a name="239"><span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : return true;</span></a>
-<a name="240"><span class="lineNum"> 240 </span> : : </a>
-<a name="241"><span class="lineNum"> 241 </span> :<span class="lineCov"> 6 : if (uuid_equals(&amp;type, &amp;EFI_CERT_SHA256_GUID) &amp;&amp; (size == 32))</span></a>
-<a name="242"><span class="lineNum"> 242 </span> :<span class="lineCov"> 1 : return true;</span></a>
-<a name="243"><span class="lineNum"> 243 </span> : : </a>
-<a name="244"><span class="lineNum"> 244 </span> :<span class="lineCov"> 5 : if (uuid_equals(&amp;type, &amp;EFI_CERT_SHA384_GUID) &amp;&amp; (size == 48))</span></a>
-<a name="245"><span class="lineNum"> 245 </span> :<span class="lineNoCov"> 0 : return true;</span></a>
-<a name="246"><span class="lineNum"> 246 </span> : : </a>
-<a name="247"><span class="lineNum"> 247 </span> :<span class="lineCov"> 5 : if (uuid_equals(&amp;type, &amp;EFI_CERT_SHA512_GUID) &amp;&amp; (size == 64))</span></a>
-<a name="248"><span class="lineNum"> 248 </span> :<span class="lineCov"> 1 : return true;</span></a>
-<a name="249"><span class="lineNum"> 249 </span> : : </a>
-<a name="250"><span class="lineNum"> 250 </span> :<span class="lineCov"> 4 : return false;</span></a>
-<a name="251"><span class="lineNum"> 251 </span> : : }</a>
-<a name="252"><span class="lineNum"> 252 </span> : : </a>
-<a name="253"><span class="lineNum"> 253 </span> :<span class="lineCov"> 21 : int validate_esl_list(const char *key, const char *esl, const size_t size)</span></a>
-<a name="254"><span class="lineNum"> 254 </span> : : {</a>
-<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 21 : int count = 0;</span></a>
-<a name="256"><span class="lineNum"> 256 </span> : : int dsize;</a>
-<a name="257"><span class="lineNum"> 257 </span> :<span class="lineCov"> 21 : char *data = NULL;</span></a>
-<a name="258"><span class="lineNum"> 258 </span> :<span class="lineCov"> 21 : int eslvarsize = size;</span></a>
-<a name="259"><span class="lineNum"> 259 </span> : : int eslsize;</a>
-<a name="260"><span class="lineNum"> 260 </span> :<span class="lineCov"> 21 : int rc = OPAL_SUCCESS;</span></a>
-<a name="261"><span class="lineNum"> 261 </span> :<span class="lineCov"> 21 : int offset = 0;</span></a>
-<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 21 : EFI_SIGNATURE_LIST *list = NULL;</span></a>
-<a name="263"><span class="lineNum"> 263 </span> : : </a>
-<a name="264"><span class="lineNum"> 264 </span> :<span class="lineCov"> 39 : while (eslvarsize &gt; 0) {</span></a>
-<a name="265"><span class="lineNum"> 265 </span> :<span class="lineCov"> 26 : prlog(PR_DEBUG, &quot;esl var size size is %d offset is %d\n&quot;, eslvarsize, offset);</span></a>
-<a name="266"><span class="lineNum"> 266 </span> :<span class="lineCov"> 26 : if (eslvarsize &lt; sizeof(EFI_SIGNATURE_LIST))</span></a>
-<a name="267"><span class="lineNum"> 267 </span> :<span class="lineCov"> 3 : break;</span></a>
-<a name="268"><span class="lineNum"> 268 </span> : : </a>
-<a name="269"><span class="lineNum"> 269 </span> : : /* Check Supported ESL Type */</a>
-<a name="270"><span class="lineNum"> 270 </span> :<span class="lineCov"> 23 : list = get_esl_signature_list(esl, eslvarsize);</span></a>
-<a name="271"><span class="lineNum"> 271 </span> : : </a>
-<a name="272"><span class="lineNum"> 272 </span> :<span class="lineCov"> 23 : if (!list)</span></a>
-<a name="273"><span class="lineNum"> 273 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
-<a name="274"><span class="lineNum"> 274 </span> : : </a>
-<a name="275"><span class="lineNum"> 275 </span> : : /* Calculate the size of the ESL */</a>
-<a name="276"><span class="lineNum"> 276 </span> :<span class="lineCov"> 23 : eslsize = le32_to_cpu(list-&gt;SignatureListSize);</span></a>
-<a name="277"><span class="lineNum"> 277 </span> : : </a>
-<a name="278"><span class="lineNum"> 278 </span> : : /* If could not extract the size */</a>
-<a name="279"><span class="lineNum"> 279 </span> :<span class="lineCov"> 23 : if (eslsize &lt;= 0) {</span></a>
-<a name="280"><span class="lineNum"> 280 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Invalid size of the ESL: %u\n&quot;,</span></a>
-<a name="281"><span class="lineNum"> 281 </span> : : le32_to_cpu(list-&gt;SignatureListSize));</a>
-<a name="282"><span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : rc = OPAL_PARAMETER;</span></a>
-<a name="283"><span class="lineNum"> 283 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="284"><span class="lineNum"> 284 </span> : : }</a>
-<a name="285"><span class="lineNum"> 285 </span> : : </a>
-<a name="286"><span class="lineNum"> 286 </span> : : /* Extract the certificate from the ESL */</a>
-<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 23 : dsize = get_esl_cert(esl, eslvarsize, &amp;data);</span></a>
-<a name="288"><span class="lineNum"> 288 </span> :<span class="lineCov"> 23 : if (dsize &lt; 0) {</span></a>
-<a name="289"><span class="lineNum"> 289 </span> :<span class="lineNoCov"> 0 : rc = dsize;</span></a>
-<a name="290"><span class="lineNum"> 290 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="291"><span class="lineNum"> 291 </span> : : }</a>
+<a name="226"><span class="lineNum"> 226 </span> : : /* If failure in parsing the certificate, exit */</a>
+<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 20 : if(rc) {</span></a>
+<a name="228"><span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;X509 certificate parsing failed %04x\n&quot;, rc);</span></a>
+<a name="229"><span class="lineNum"> 229 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="230"><span class="lineNum"> 230 </span> : : }</a>
+<a name="231"><span class="lineNum"> 231 </span> : : </a>
+<a name="232"><span class="lineNum"> 232 </span> :<span class="lineCov"> 20 : x509_buf = zalloc(CERT_BUFFER_SIZE);</span></a>
+<a name="233"><span class="lineNum"> 233 </span> :<span class="lineCov"> 20 : rc = mbedtls_x509_crt_info(x509_buf, CERT_BUFFER_SIZE, &quot;CRT:&quot;, &amp;x509);</span></a>
+<a name="234"><span class="lineNum"> 234 </span> : : </a>
+<a name="235"><span class="lineNum"> 235 </span> :<span class="lineCov"> 20 : mbedtls_x509_crt_free(&amp;x509);</span></a>
+<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 20 : free(x509_buf);</span></a>
+<a name="237"><span class="lineNum"> 237 </span> :<span class="lineCov"> 20 : x509_buf = NULL;</span></a>
+<a name="238"><span class="lineNum"> 238 </span> : : </a>
+<a name="239"><span class="lineNum"> 239 </span> : : /* If failure in reading the certificate, exit */</a>
+<a name="240"><span class="lineNum"> 240 </span> :<span class="lineCov"> 20 : if (rc &lt; 0)</span></a>
+<a name="241"><span class="lineNum"> 241 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="242"><span class="lineNum"> 242 </span> : : </a>
+<a name="243"><span class="lineNum"> 243 </span> :<span class="lineCov"> 20 : return true;</span></a>
+<a name="244"><span class="lineNum"> 244 </span> : : }</a>
+<a name="245"><span class="lineNum"> 245 </span> : : </a>
+<a name="246"><span class="lineNum"> 246 </span> :<span class="lineCov"> 6 : static bool validate_hash(uuid_t type, int size)</span></a>
+<a name="247"><span class="lineNum"> 247 </span> : : {</a>
+<a name="248"><span class="lineNum"> 248 </span> :<span class="lineCov"> 6 : if (uuid_equals(&amp;type, &amp;EFI_CERT_SHA1_GUID) &amp;&amp; (size == 20))</span></a>
+<a name="249"><span class="lineNum"> 249 </span> :<span class="lineNoCov"> 0 : return true;</span></a>
+<a name="250"><span class="lineNum"> 250 </span> : : </a>
+<a name="251"><span class="lineNum"> 251 </span> :<span class="lineCov"> 6 : if (uuid_equals(&amp;type, &amp;EFI_CERT_SHA224_GUID) &amp;&amp; (size == 28))</span></a>
+<a name="252"><span class="lineNum"> 252 </span> :<span class="lineNoCov"> 0 : return true;</span></a>
+<a name="253"><span class="lineNum"> 253 </span> : : </a>
+<a name="254"><span class="lineNum"> 254 </span> :<span class="lineCov"> 6 : if (uuid_equals(&amp;type, &amp;EFI_CERT_SHA256_GUID) &amp;&amp; (size == 32))</span></a>
+<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 1 : return true;</span></a>
+<a name="256"><span class="lineNum"> 256 </span> : : </a>
+<a name="257"><span class="lineNum"> 257 </span> :<span class="lineCov"> 5 : if (uuid_equals(&amp;type, &amp;EFI_CERT_SHA384_GUID) &amp;&amp; (size == 48))</span></a>
+<a name="258"><span class="lineNum"> 258 </span> :<span class="lineNoCov"> 0 : return true;</span></a>
+<a name="259"><span class="lineNum"> 259 </span> : : </a>
+<a name="260"><span class="lineNum"> 260 </span> :<span class="lineCov"> 5 : if (uuid_equals(&amp;type, &amp;EFI_CERT_SHA512_GUID) &amp;&amp; (size == 64))</span></a>
+<a name="261"><span class="lineNum"> 261 </span> :<span class="lineCov"> 1 : return true;</span></a>
+<a name="262"><span class="lineNum"> 262 </span> : : </a>
+<a name="263"><span class="lineNum"> 263 </span> :<span class="lineCov"> 4 : return false;</span></a>
+<a name="264"><span class="lineNum"> 264 </span> : : }</a>
+<a name="265"><span class="lineNum"> 265 </span> : : </a>
+<a name="266"><span class="lineNum"> 266 </span> :<span class="lineCov"> 28 : int validate_esl_list(const char *key, const char *esl, const size_t size)</span></a>
+<a name="267"><span class="lineNum"> 267 </span> : : {</a>
+<a name="268"><span class="lineNum"> 268 </span> :<span class="lineCov"> 28 : int count = 0;</span></a>
+<a name="269"><span class="lineNum"> 269 </span> : : int dsize;</a>
+<a name="270"><span class="lineNum"> 270 </span> :<span class="lineCov"> 28 : char *data = NULL;</span></a>
+<a name="271"><span class="lineNum"> 271 </span> :<span class="lineCov"> 28 : int eslvarsize = size;</span></a>
+<a name="272"><span class="lineNum"> 272 </span> : : int eslsize;</a>
+<a name="273"><span class="lineNum"> 273 </span> :<span class="lineCov"> 28 : int rc = OPAL_SUCCESS;</span></a>
+<a name="274"><span class="lineNum"> 274 </span> :<span class="lineCov"> 28 : EFI_SIGNATURE_LIST *list = NULL;</span></a>
+<a name="275"><span class="lineNum"> 275 </span> : : </a>
+<a name="276"><span class="lineNum"> 276 </span> :<span class="lineCov"> 50 : while (eslvarsize &gt; 0) {</span></a>
+<a name="277"><span class="lineNum"> 277 </span> :<span class="lineCov"> 31 : prlog(PR_DEBUG, &quot;esl var size is %d offset is %lu\n&quot;, eslvarsize, size - eslvarsize);</span></a>
+<a name="278"><span class="lineNum"> 278 </span> :<span class="lineCov"> 31 : if (eslvarsize &lt; sizeof(EFI_SIGNATURE_LIST)) {</span></a>
+<a name="279"><span class="lineNum"> 279 </span> :<span class="lineCov"> 1 : prlog(PR_ERR, &quot;ESL with size %d is too small\n&quot;, eslvarsize);</span></a>
+<a name="280"><span class="lineNum"> 280 </span> :<span class="lineCov"> 1 : rc = OPAL_PARAMETER;</span></a>
+<a name="281"><span class="lineNum"> 281 </span> :<span class="lineCov"> 1 : break;</span></a>
+<a name="282"><span class="lineNum"> 282 </span> : : }</a>
+<a name="283"><span class="lineNum"> 283 </span> : : </a>
+<a name="284"><span class="lineNum"> 284 </span> : : /* Check Supported ESL Type */</a>
+<a name="285"><span class="lineNum"> 285 </span> :<span class="lineCov"> 30 : list = get_esl_signature_list(esl, eslvarsize);</span></a>
+<a name="286"><span class="lineNum"> 286 </span> : : </a>
+<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 30 : if (!list)</span></a>
+<a name="288"><span class="lineNum"> 288 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
+<a name="289"><span class="lineNum"> 289 </span> : : </a>
+<a name="290"><span class="lineNum"> 290 </span> : : /* Calculate the size of the ESL */</a>
+<a name="291"><span class="lineNum"> 291 </span> :<span class="lineCov"> 30 : eslsize = le32_to_cpu(list-&gt;SignatureListSize);</span></a>
<a name="292"><span class="lineNum"> 292 </span> : : </a>
-<a name="293"><span class="lineNum"> 293 </span> :<span class="lineCov"> 23 : if (key_equals(key, &quot;dbx&quot;)) {</span></a>
-<a name="294"><span class="lineNum"> 294 </span> :<span class="lineCov"> 6 : if (!validate_hash(list-&gt;SignatureType, dsize)) {</span></a>
-<a name="295"><span class="lineNum"> 295 </span> :<span class="lineCov"> 4 : prlog(PR_ERR, &quot;No valid hash is found\n&quot;);</span></a>
-<a name="296"><span class="lineNum"> 296 </span> :<span class="lineCov"> 4 : rc = OPAL_PARAMETER;</span></a>
-<a name="297"><span class="lineNum"> 297 </span> :<span class="lineCov"> 4 : break;</span></a>
-<a name="298"><span class="lineNum"> 298 </span> : : }</a>
-<a name="299"><span class="lineNum"> 299 </span> : : } else {</a>
-<a name="300"><span class="lineNum"> 300 </span> :<span class="lineCov"> 17 : if (!uuid_equals(&amp;list-&gt;SignatureType, &amp;EFI_CERT_X509_GUID)</span></a>
-<a name="301"><span class="lineNum"> 301 </span> :<span class="lineCov"> 16 : || !validate_cert(data, dsize)) {</span></a>
-<a name="302"><span class="lineNum"> 302 </span> :<span class="lineCov"> 1 : prlog(PR_ERR, &quot;No valid cert is found\n&quot;);</span></a>
-<a name="303"><span class="lineNum"> 303 </span> :<span class="lineCov"> 1 : rc = OPAL_PARAMETER;</span></a>
-<a name="304"><span class="lineNum"> 304 </span> :<span class="lineCov"> 1 : break;</span></a>
-<a name="305"><span class="lineNum"> 305 </span> : : }</a>
+<a name="293"><span class="lineNum"> 293 </span> : : /* If could not extract the size */</a>
+<a name="294"><span class="lineNum"> 294 </span> :<span class="lineCov"> 30 : if (eslsize &lt;= 0) {</span></a>
+<a name="295"><span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Invalid size of the ESL: %u\n&quot;,</span></a>
+<a name="296"><span class="lineNum"> 296 </span> : : le32_to_cpu(list-&gt;SignatureListSize));</a>
+<a name="297"><span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : rc = OPAL_PARAMETER;</span></a>
+<a name="298"><span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="299"><span class="lineNum"> 299 </span> : : }</a>
+<a name="300"><span class="lineNum"> 300 </span> : : </a>
+<a name="301"><span class="lineNum"> 301 </span> : : /* Extract the certificate from the ESL */</a>
+<a name="302"><span class="lineNum"> 302 </span> :<span class="lineCov"> 30 : dsize = get_esl_cert(esl, eslvarsize, &amp;data);</span></a>
+<a name="303"><span class="lineNum"> 303 </span> :<span class="lineCov"> 30 : if (dsize &lt; 0) {</span></a>
+<a name="304"><span class="lineNum"> 304 </span> :<span class="lineCov"> 3 : rc = dsize;</span></a>
+<a name="305"><span class="lineNum"> 305 </span> :<span class="lineCov"> 3 : break;</span></a>
<a name="306"><span class="lineNum"> 306 </span> : : }</a>
<a name="307"><span class="lineNum"> 307 </span> : : </a>
-<a name="308"><span class="lineNum"> 308 </span> :<span class="lineCov"> 18 : count++;</span></a>
-<a name="309"><span class="lineNum"> 309 </span> : : </a>
-<a name="310"><span class="lineNum"> 310 </span> : : /* Look for the next ESL */</a>
-<a name="311"><span class="lineNum"> 311 </span> :<span class="lineCov"> 18 : offset = offset + eslsize;</span></a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 18 : eslvarsize = eslvarsize - eslsize;</span></a>
-<a name="313"><span class="lineNum"> 313 </span> :<span class="lineCov"> 18 : free(data);</span></a>
-<a name="314"><span class="lineNum"> 314 </span> : : /* Since we are going to allocate again in the next iteration */</a>
-<a name="315"><span class="lineNum"> 315 </span> :<span class="lineCov"> 18 : data = NULL;</span></a>
-<a name="316"><span class="lineNum"> 316 </span> : : }</a>
-<a name="317"><span class="lineNum"> 317 </span> : : </a>
-<a name="318"><span class="lineNum"> 318 </span> :<span class="lineCov"> 21 : if (rc == OPAL_SUCCESS) {</span></a>
-<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 16 : if (key_equals(key, &quot;PK&quot;) &amp;&amp; (count &gt; 1)) {</span></a>
-<a name="320"><span class="lineNum"> 320 </span> :<span class="lineCov"> 1 : prlog(PR_ERR, &quot;PK can only be one\n&quot;);</span></a>
-<a name="321"><span class="lineNum"> 321 </span> :<span class="lineCov"> 1 : rc = OPAL_PARAMETER;</span></a>
-<a name="322"><span class="lineNum"> 322 </span> : : } else {</a>
-<a name="323"><span class="lineNum"> 323 </span> :<span class="lineCov"> 15 : rc = count;</span></a>
-<a name="324"><span class="lineNum"> 324 </span> : : }</a>
-<a name="325"><span class="lineNum"> 325 </span> : : }</a>
-<a name="326"><span class="lineNum"> 326 </span> : : </a>
-<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 21 : free(data);</span></a>
-<a name="328"><span class="lineNum"> 328 </span> : : </a>
-<a name="329"><span class="lineNum"> 329 </span> :<span class="lineCov"> 21 : prlog(PR_INFO, &quot;Total ESLs are %d\n&quot;, rc);</span></a>
-<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 21 : return rc;</span></a>
-<a name="331"><span class="lineNum"> 331 </span> : : }</a>
+<a name="308"><span class="lineNum"> 308 </span> :<span class="lineCov"> 27 : if (key_equals(key, &quot;dbx&quot;)) {</span></a>
+<a name="309"><span class="lineNum"> 309 </span> :<span class="lineCov"> 6 : if (!validate_hash(list-&gt;SignatureType, dsize)) {</span></a>
+<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 4 : prlog(PR_ERR, &quot;No valid hash is found\n&quot;);</span></a>
+<a name="311"><span class="lineNum"> 311 </span> :<span class="lineCov"> 4 : rc = OPAL_PARAMETER;</span></a>
+<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 4 : break;</span></a>
+<a name="313"><span class="lineNum"> 313 </span> : : }</a>
+<a name="314"><span class="lineNum"> 314 </span> : : } else {</a>
+<a name="315"><span class="lineNum"> 315 </span> :<span class="lineCov"> 21 : if (!uuid_equals(&amp;list-&gt;SignatureType, &amp;EFI_CERT_X509_GUID)</span></a>
+<a name="316"><span class="lineNum"> 316 </span> :<span class="lineCov"> 20 : || !validate_cert(data, dsize)) {</span></a>
+<a name="317"><span class="lineNum"> 317 </span> :<span class="lineCov"> 1 : prlog(PR_ERR, &quot;No valid cert is found\n&quot;);</span></a>
+<a name="318"><span class="lineNum"> 318 </span> :<span class="lineCov"> 1 : rc = OPAL_PARAMETER;</span></a>
+<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 1 : break;</span></a>
+<a name="320"><span class="lineNum"> 320 </span> : : }</a>
+<a name="321"><span class="lineNum"> 321 </span> : : }</a>
+<a name="322"><span class="lineNum"> 322 </span> : : </a>
+<a name="323"><span class="lineNum"> 323 </span> :<span class="lineCov"> 22 : count++;</span></a>
+<a name="324"><span class="lineNum"> 324 </span> : : </a>
+<a name="325"><span class="lineNum"> 325 </span> : : /* Look for the next ESL */</a>
+<a name="326"><span class="lineNum"> 326 </span> :<span class="lineCov"> 22 : esl = esl + eslsize;</span></a>
+<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 22 : eslvarsize = eslvarsize - eslsize;</span></a>
+<a name="328"><span class="lineNum"> 328 </span> :<span class="lineCov"> 22 : free(data);</span></a>
+<a name="329"><span class="lineNum"> 329 </span> : : /* Since we are going to allocate again in the next iteration */</a>
+<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 22 : data = NULL;</span></a>
+<a name="331"><span class="lineNum"> 331 </span> : : }</a>
<a name="332"><span class="lineNum"> 332 </span> : : </a>
-<a name="333"><span class="lineNum"> 333 </span> : : /* Get the timestamp for the last update of the give key */</a>
-<a name="334"><span class="lineNum"> 334 </span> :<span class="lineCov"> 36 : static struct efi_time *get_last_timestamp(const char *key, char *last_timestamp)</span></a>
-<a name="335"><span class="lineNum"> 335 </span> : : {</a>
-<a name="336"><span class="lineNum"> 336 </span> :<span class="lineCov"> 36 : struct efi_time *timestamp = (struct efi_time*)last_timestamp;</span></a>
-<a name="337"><span class="lineNum"> 337 </span> : : </a>
-<a name="338"><span class="lineNum"> 338 </span> :<span class="lineCov"> 36 : if (!last_timestamp)</span></a>
-<a name="339"><span class="lineNum"> 339 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="340"><span class="lineNum"> 340 </span> : : </a>
-<a name="341"><span class="lineNum"> 341 </span> :<span class="lineCov"> 36 : if (key_equals(key, &quot;PK&quot;))</span></a>
-<a name="342"><span class="lineNum"> 342 </span> :<span class="lineCov"> 11 : return &amp;timestamp[0];</span></a>
-<a name="343"><span class="lineNum"> 343 </span> :<span class="lineCov"> 25 : else if (key_equals(key, &quot;KEK&quot;))</span></a>
-<a name="344"><span class="lineNum"> 344 </span> :<span class="lineCov"> 7 : return &amp;timestamp[1];</span></a>
-<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 18 : else if (key_equals(key, &quot;db&quot;))</span></a>
-<a name="346"><span class="lineNum"> 346 </span> :<span class="lineCov"> 10 : return &amp;timestamp[2];</span></a>
-<a name="347"><span class="lineNum"> 347 </span> :<span class="lineCov"> 8 : else if (key_equals(key, &quot;dbx&quot;))</span></a>
-<a name="348"><span class="lineNum"> 348 </span> :<span class="lineCov"> 8 : return &amp;timestamp[3];</span></a>
-<a name="349"><span class="lineNum"> 349 </span> : : else</a>
-<a name="350"><span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="351"><span class="lineNum"> 351 </span> : : }</a>
+<a name="333"><span class="lineNum"> 333 </span> :<span class="lineCov"> 28 : if (rc == OPAL_SUCCESS) {</span></a>
+<a name="334"><span class="lineNum"> 334 </span> :<span class="lineCov"> 19 : if (key_equals(key, &quot;PK&quot;) &amp;&amp; (count &gt; 1)) {</span></a>
+<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 1 : prlog(PR_ERR, &quot;PK can only be one\n&quot;);</span></a>
+<a name="336"><span class="lineNum"> 336 </span> :<span class="lineCov"> 1 : rc = OPAL_PARAMETER;</span></a>
+<a name="337"><span class="lineNum"> 337 </span> : : } else {</a>
+<a name="338"><span class="lineNum"> 338 </span> :<span class="lineCov"> 18 : rc = count;</span></a>
+<a name="339"><span class="lineNum"> 339 </span> : : }</a>
+<a name="340"><span class="lineNum"> 340 </span> : : }</a>
+<a name="341"><span class="lineNum"> 341 </span> : : </a>
+<a name="342"><span class="lineNum"> 342 </span> :<span class="lineCov"> 28 : free(data);</span></a>
+<a name="343"><span class="lineNum"> 343 </span> : : </a>
+<a name="344"><span class="lineNum"> 344 </span> :<span class="lineCov"> 28 : prlog(PR_INFO, &quot;Total ESLs are %d\n&quot;, rc);</span></a>
+<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 28 : return rc;</span></a>
+<a name="346"><span class="lineNum"> 346 </span> : : }</a>
+<a name="347"><span class="lineNum"> 347 </span> : : </a>
+<a name="348"><span class="lineNum"> 348 </span> : : /* Get the timestamp for the last update of the give key */</a>
+<a name="349"><span class="lineNum"> 349 </span> :<span class="lineCov"> 43 : static struct efi_time *get_last_timestamp(const char *key, char *last_timestamp)</span></a>
+<a name="350"><span class="lineNum"> 350 </span> : : {</a>
+<a name="351"><span class="lineNum"> 351 </span> :<span class="lineCov"> 43 : struct efi_time *timestamp = (struct efi_time*)last_timestamp;</span></a>
<a name="352"><span class="lineNum"> 352 </span> : : </a>
-<a name="353"><span class="lineNum"> 353 </span> :<span class="lineCov"> 12 : int update_timestamp(const char *key, const struct efi_time *timestamp, char *last_timestamp)</span></a>
-<a name="354"><span class="lineNum"> 354 </span> : : {</a>
-<a name="355"><span class="lineNum"> 355 </span> : : struct efi_time *prev;</a>
-<a name="356"><span class="lineNum"> 356 </span> : : </a>
-<a name="357"><span class="lineNum"> 357 </span> :<span class="lineCov"> 12 : prev = get_last_timestamp(key, last_timestamp);</span></a>
-<a name="358"><span class="lineNum"> 358 </span> :<span class="lineCov"> 12 : if (prev == NULL)</span></a>
-<a name="359"><span class="lineNum"> 359 </span> :<span class="lineNoCov"> 0 : return OPAL_INTERNAL_ERROR;</span></a>
-<a name="360"><span class="lineNum"> 360 </span> : : </a>
-<a name="361"><span class="lineNum"> 361 </span> : : /* Update with new timestamp */</a>
-<a name="362"><span class="lineNum"> 362 </span> :<span class="lineCov"> 12 : memcpy(prev, timestamp, sizeof(struct efi_time));</span></a>
-<a name="363"><span class="lineNum"> 363 </span> : : </a>
-<a name="364"><span class="lineNum"> 364 </span> :<span class="lineCov"> 12 : prlog(PR_DEBUG, &quot;updated prev year is %d month %d day %d\n&quot;,</span></a>
-<a name="365"><span class="lineNum"> 365 </span> : : le16_to_cpu(prev-&gt;year), prev-&gt;month, prev-&gt;day);</a>
-<a name="366"><span class="lineNum"> 366 </span> : : </a>
-<a name="367"><span class="lineNum"> 367 </span> :<span class="lineCov"> 12 : return OPAL_SUCCESS;</span></a>
-<a name="368"><span class="lineNum"> 368 </span> : : }</a>
-<a name="369"><span class="lineNum"> 369 </span> : : </a>
-<a name="370"><span class="lineNum"> 370 </span> :<span class="lineCov"> 48 : static uint64_t unpack_timestamp(const struct efi_time *timestamp)</span></a>
-<a name="371"><span class="lineNum"> 371 </span> : : {</a>
-<a name="372"><span class="lineNum"> 372 </span> :<span class="lineCov"> 48 : uint64_t val = 0;</span></a>
-<a name="373"><span class="lineNum"> 373 </span> :<span class="lineCov"> 48 : uint16_t year = le32_to_cpu(timestamp-&gt;year);</span></a>
-<a name="374"><span class="lineNum"> 374 </span> : : </a>
-<a name="375"><span class="lineNum"> 375 </span> : : /* pad1, nanosecond, timezone, daylight and pad2 are meant to be zero */</a>
-<a name="376"><span class="lineNum"> 376 </span> :<span class="lineCov"> 48 : val |= ((uint64_t) timestamp-&gt;pad1 &amp; 0xFF) &lt;&lt; 0;</span></a>
-<a name="377"><span class="lineNum"> 377 </span> :<span class="lineCov"> 48 : val |= ((uint64_t) timestamp-&gt;second &amp; 0xFF) &lt;&lt; (1*8);</span></a>
-<a name="378"><span class="lineNum"> 378 </span> :<span class="lineCov"> 48 : val |= ((uint64_t) timestamp-&gt;minute &amp; 0xFF) &lt;&lt; (2*8);</span></a>
-<a name="379"><span class="lineNum"> 379 </span> :<span class="lineCov"> 48 : val |= ((uint64_t) timestamp-&gt;hour &amp; 0xFF) &lt;&lt; (3*8);</span></a>
-<a name="380"><span class="lineNum"> 380 </span> :<span class="lineCov"> 48 : val |= ((uint64_t) timestamp-&gt;day &amp; 0xFF) &lt;&lt; (4*8);</span></a>
-<a name="381"><span class="lineNum"> 381 </span> :<span class="lineCov"> 48 : val |= ((uint64_t) timestamp-&gt;month &amp; 0xFF) &lt;&lt; (5*8);</span></a>
-<a name="382"><span class="lineNum"> 382 </span> :<span class="lineCov"> 48 : val |= ((uint64_t) year) &lt;&lt; (6*8);</span></a>
-<a name="383"><span class="lineNum"> 383 </span> : : </a>
-<a name="384"><span class="lineNum"> 384 </span> :<span class="lineCov"> 48 : return val;</span></a>
-<a name="385"><span class="lineNum"> 385 </span> : : }</a>
-<a name="386"><span class="lineNum"> 386 </span> : : </a>
-<a name="387"><span class="lineNum"> 387 </span> :<span class="lineCov"> 24 : int check_timestamp(const char *key, const struct efi_time *timestamp,</span></a>
-<a name="388"><span class="lineNum"> 388 </span> : : char *last_timestamp)</a>
-<a name="389"><span class="lineNum"> 389 </span> : : {</a>
-<a name="390"><span class="lineNum"> 390 </span> : : struct efi_time *prev;</a>
-<a name="391"><span class="lineNum"> 391 </span> : : uint64_t new;</a>
-<a name="392"><span class="lineNum"> 392 </span> : : uint64_t last;</a>
-<a name="393"><span class="lineNum"> 393 </span> : : </a>
-<a name="394"><span class="lineNum"> 394 </span> :<span class="lineCov"> 24 : prev = get_last_timestamp(key, last_timestamp);</span></a>
-<a name="395"><span class="lineNum"> 395 </span> :<span class="lineCov"> 24 : if (prev == NULL)</span></a>
-<a name="396"><span class="lineNum"> 396 </span> :<span class="lineNoCov"> 0 : return OPAL_INTERNAL_ERROR;</span></a>
-<a name="397"><span class="lineNum"> 397 </span> : : </a>
-<a name="398"><span class="lineNum"> 398 </span> :<span class="lineCov"> 24 : prlog(PR_DEBUG, &quot;timestamp year is %d month %d day %d\n&quot;,</span></a>
-<a name="399"><span class="lineNum"> 399 </span> : : le16_to_cpu(timestamp-&gt;year), timestamp-&gt;month,</a>
-<a name="400"><span class="lineNum"> 400 </span> : : timestamp-&gt;day);</a>
-<a name="401"><span class="lineNum"> 401 </span> :<span class="lineCov"> 24 : prlog(PR_DEBUG, &quot;prev year is %d month %d day %d\n&quot;,</span></a>
-<a name="402"><span class="lineNum"> 402 </span> : : le16_to_cpu(prev-&gt;year), prev-&gt;month, prev-&gt;day);</a>
-<a name="403"><span class="lineNum"> 403 </span> : : </a>
-<a name="404"><span class="lineNum"> 404 </span> :<span class="lineCov"> 24 : new = unpack_timestamp(timestamp);</span></a>
-<a name="405"><span class="lineNum"> 405 </span> :<span class="lineCov"> 24 : last = unpack_timestamp(prev);</span></a>
-<a name="406"><span class="lineNum"> 406 </span> : : </a>
-<a name="407"><span class="lineNum"> 407 </span> :<span class="lineCov"> 24 : if (new &gt; last)</span></a>
-<a name="408"><span class="lineNum"> 408 </span> :<span class="lineCov"> 21 : return OPAL_SUCCESS;</span></a>
-<a name="409"><span class="lineNum"> 409 </span> : : </a>
-<a name="410"><span class="lineNum"> 410 </span> :<span class="lineCov"> 3 : return OPAL_PERMISSION;</span></a>
-<a name="411"><span class="lineNum"> 411 </span> : : }</a>
+<a name="353"><span class="lineNum"> 353 </span> :<span class="lineCov"> 43 : if (!last_timestamp)</span></a>
+<a name="354"><span class="lineNum"> 354 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="355"><span class="lineNum"> 355 </span> : : </a>
+<a name="356"><span class="lineNum"> 356 </span> :<span class="lineCov"> 43 : if (key_equals(key, &quot;PK&quot;))</span></a>
+<a name="357"><span class="lineNum"> 357 </span> :<span class="lineCov"> 12 : return &amp;timestamp[0];</span></a>
+<a name="358"><span class="lineNum"> 358 </span> :<span class="lineCov"> 31 : else if (key_equals(key, &quot;KEK&quot;))</span></a>
+<a name="359"><span class="lineNum"> 359 </span> :<span class="lineCov"> 11 : return &amp;timestamp[1];</span></a>
+<a name="360"><span class="lineNum"> 360 </span> :<span class="lineCov"> 20 : else if (key_equals(key, &quot;db&quot;))</span></a>
+<a name="361"><span class="lineNum"> 361 </span> :<span class="lineCov"> 12 : return &amp;timestamp[2];</span></a>
+<a name="362"><span class="lineNum"> 362 </span> :<span class="lineCov"> 8 : else if (key_equals(key, &quot;dbx&quot;))</span></a>
+<a name="363"><span class="lineNum"> 363 </span> :<span class="lineCov"> 8 : return &amp;timestamp[3];</span></a>
+<a name="364"><span class="lineNum"> 364 </span> : : else</a>
+<a name="365"><span class="lineNum"> 365 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="366"><span class="lineNum"> 366 </span> : : }</a>
+<a name="367"><span class="lineNum"> 367 </span> : : </a>
+<a name="368"><span class="lineNum"> 368 </span> :<span class="lineCov"> 12 : int update_timestamp(const char *key, const struct efi_time *timestamp, char *last_timestamp)</span></a>
+<a name="369"><span class="lineNum"> 369 </span> : : {</a>
+<a name="370"><span class="lineNum"> 370 </span> : : struct efi_time *prev;</a>
+<a name="371"><span class="lineNum"> 371 </span> : : </a>
+<a name="372"><span class="lineNum"> 372 </span> :<span class="lineCov"> 12 : prev = get_last_timestamp(key, last_timestamp);</span></a>
+<a name="373"><span class="lineNum"> 373 </span> :<span class="lineCov"> 12 : if (prev == NULL)</span></a>
+<a name="374"><span class="lineNum"> 374 </span> :<span class="lineNoCov"> 0 : return OPAL_INTERNAL_ERROR;</span></a>
+<a name="375"><span class="lineNum"> 375 </span> : : </a>
+<a name="376"><span class="lineNum"> 376 </span> : : /* Update with new timestamp */</a>
+<a name="377"><span class="lineNum"> 377 </span> :<span class="lineCov"> 12 : memcpy(prev, timestamp, sizeof(struct efi_time));</span></a>
+<a name="378"><span class="lineNum"> 378 </span> : : </a>
+<a name="379"><span class="lineNum"> 379 </span> :<span class="lineCov"> 12 : prlog(PR_DEBUG, &quot;updated prev year is %d month %d day %d\n&quot;,</span></a>
+<a name="380"><span class="lineNum"> 380 </span> : : le16_to_cpu(prev-&gt;year), prev-&gt;month, prev-&gt;day);</a>
+<a name="381"><span class="lineNum"> 381 </span> : : </a>
+<a name="382"><span class="lineNum"> 382 </span> :<span class="lineCov"> 12 : return OPAL_SUCCESS;</span></a>
+<a name="383"><span class="lineNum"> 383 </span> : : }</a>
+<a name="384"><span class="lineNum"> 384 </span> : : </a>
+<a name="385"><span class="lineNum"> 385 </span> :<span class="lineCov"> 62 : static uint64_t unpack_timestamp(const struct efi_time *timestamp)</span></a>
+<a name="386"><span class="lineNum"> 386 </span> : : {</a>
+<a name="387"><span class="lineNum"> 387 </span> :<span class="lineCov"> 62 : uint64_t val = 0;</span></a>
+<a name="388"><span class="lineNum"> 388 </span> :<span class="lineCov"> 62 : uint16_t year = le16_to_cpu(timestamp-&gt;year);</span></a>
+<a name="389"><span class="lineNum"> 389 </span> : : </a>
+<a name="390"><span class="lineNum"> 390 </span> : : /* pad1, nanosecond, timezone, daylight and pad2 are meant to be zero */</a>
+<a name="391"><span class="lineNum"> 391 </span> :<span class="lineCov"> 62 : val |= ((uint64_t) timestamp-&gt;pad1 &amp; 0xFF) &lt;&lt; 0;</span></a>
+<a name="392"><span class="lineNum"> 392 </span> :<span class="lineCov"> 62 : val |= ((uint64_t) timestamp-&gt;second &amp; 0xFF) &lt;&lt; (1*8);</span></a>
+<a name="393"><span class="lineNum"> 393 </span> :<span class="lineCov"> 62 : val |= ((uint64_t) timestamp-&gt;minute &amp; 0xFF) &lt;&lt; (2*8);</span></a>
+<a name="394"><span class="lineNum"> 394 </span> :<span class="lineCov"> 62 : val |= ((uint64_t) timestamp-&gt;hour &amp; 0xFF) &lt;&lt; (3*8);</span></a>
+<a name="395"><span class="lineNum"> 395 </span> :<span class="lineCov"> 62 : val |= ((uint64_t) timestamp-&gt;day &amp; 0xFF) &lt;&lt; (4*8);</span></a>
+<a name="396"><span class="lineNum"> 396 </span> :<span class="lineCov"> 62 : val |= ((uint64_t) timestamp-&gt;month &amp; 0xFF) &lt;&lt; (5*8);</span></a>
+<a name="397"><span class="lineNum"> 397 </span> :<span class="lineCov"> 62 : val |= ((uint64_t) year) &lt;&lt; (6*8);</span></a>
+<a name="398"><span class="lineNum"> 398 </span> : : </a>
+<a name="399"><span class="lineNum"> 399 </span> :<span class="lineCov"> 62 : return val;</span></a>
+<a name="400"><span class="lineNum"> 400 </span> : : }</a>
+<a name="401"><span class="lineNum"> 401 </span> : : </a>
+<a name="402"><span class="lineNum"> 402 </span> :<span class="lineCov"> 31 : int check_timestamp(const char *key, const struct efi_time *timestamp,</span></a>
+<a name="403"><span class="lineNum"> 403 </span> : : char *last_timestamp)</a>
+<a name="404"><span class="lineNum"> 404 </span> : : {</a>
+<a name="405"><span class="lineNum"> 405 </span> : : struct efi_time *prev;</a>
+<a name="406"><span class="lineNum"> 406 </span> : : uint64_t new;</a>
+<a name="407"><span class="lineNum"> 407 </span> : : uint64_t last;</a>
+<a name="408"><span class="lineNum"> 408 </span> : : </a>
+<a name="409"><span class="lineNum"> 409 </span> :<span class="lineCov"> 31 : prev = get_last_timestamp(key, last_timestamp);</span></a>
+<a name="410"><span class="lineNum"> 410 </span> :<span class="lineCov"> 31 : if (prev == NULL)</span></a>
+<a name="411"><span class="lineNum"> 411 </span> :<span class="lineNoCov"> 0 : return OPAL_INTERNAL_ERROR;</span></a>
<a name="412"><span class="lineNum"> 412 </span> : : </a>
-<a name="413"><span class="lineNum"> 413 </span> : : /* Extract PKCS7 from the authentication header */</a>
-<a name="414"><span class="lineNum"> 414 </span> :<span class="lineCov"> 14 : static mbedtls_pkcs7* get_pkcs7(const struct efi_variable_authentication_2 *auth)</span></a>
-<a name="415"><span class="lineNum"> 415 </span> : : {</a>
-<a name="416"><span class="lineNum"> 416 </span> :<span class="lineCov"> 14 : char *checkpkcs7cert = NULL;</span></a>
-<a name="417"><span class="lineNum"> 417 </span> : : size_t len;</a>
-<a name="418"><span class="lineNum"> 418 </span> :<span class="lineCov"> 14 : mbedtls_pkcs7 *pkcs7 = NULL;</span></a>
-<a name="419"><span class="lineNum"> 419 </span> : : int rc;</a>
-<a name="420"><span class="lineNum"> 420 </span> : : </a>
-<a name="421"><span class="lineNum"> 421 </span> :<span class="lineCov"> 14 : len = get_pkcs7_len(auth);</span></a>
-<a name="422"><span class="lineNum"> 422 </span> : : </a>
-<a name="423"><span class="lineNum"> 423 </span> :<span class="lineCov"> 14 : pkcs7 = malloc(sizeof(struct mbedtls_pkcs7));</span></a>
-<a name="424"><span class="lineNum"> 424 </span> :<span class="lineCov"> 14 : if (!pkcs7)</span></a>
-<a name="425"><span class="lineNum"> 425 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="426"><span class="lineNum"> 426 </span> : : </a>
-<a name="427"><span class="lineNum"> 427 </span> :<span class="lineCov"> 14 : mbedtls_pkcs7_init(pkcs7);</span></a>
-<a name="428"><span class="lineNum"> 428 </span> :<span class="lineCov"> 14 : rc = mbedtls_pkcs7_parse_der( auth-&gt;auth_info.cert_data, len, pkcs7);</span></a>
-<a name="429"><span class="lineNum"> 429 </span> :<span class="lineCov"> 14 : if (rc &lt;= 0) {</span></a>
-<a name="430"><span class="lineNum"> 430 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Parsing pkcs7 failed %04x\n&quot;, rc);</span></a>
-<a name="431"><span class="lineNum"> 431 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="432"><span class="lineNum"> 432 </span> : : }</a>
-<a name="433"><span class="lineNum"> 433 </span> : : </a>
-<a name="434"><span class="lineNum"> 434 </span> :<span class="lineCov"> 14 : checkpkcs7cert = zalloc(CERT_BUFFER_SIZE);</span></a>
-<a name="435"><span class="lineNum"> 435 </span> :<span class="lineCov"> 14 : if (!checkpkcs7cert)</span></a>
-<a name="436"><span class="lineNum"> 436 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="413"><span class="lineNum"> 413 </span> :<span class="lineCov"> 31 : prlog(PR_DEBUG, &quot;timestamp year is %d month %d day %d\n&quot;,</span></a>
+<a name="414"><span class="lineNum"> 414 </span> : : le16_to_cpu(timestamp-&gt;year), timestamp-&gt;month,</a>
+<a name="415"><span class="lineNum"> 415 </span> : : timestamp-&gt;day);</a>
+<a name="416"><span class="lineNum"> 416 </span> :<span class="lineCov"> 31 : prlog(PR_DEBUG, &quot;prev year is %d month %d day %d\n&quot;,</span></a>
+<a name="417"><span class="lineNum"> 417 </span> : : le16_to_cpu(prev-&gt;year), prev-&gt;month, prev-&gt;day);</a>
+<a name="418"><span class="lineNum"> 418 </span> : : </a>
+<a name="419"><span class="lineNum"> 419 </span> :<span class="lineCov"> 31 : new = unpack_timestamp(timestamp);</span></a>
+<a name="420"><span class="lineNum"> 420 </span> :<span class="lineCov"> 31 : last = unpack_timestamp(prev);</span></a>
+<a name="421"><span class="lineNum"> 421 </span> : : </a>
+<a name="422"><span class="lineNum"> 422 </span> :<span class="lineCov"> 31 : if (new &gt; last)</span></a>
+<a name="423"><span class="lineNum"> 423 </span> :<span class="lineCov"> 28 : return OPAL_SUCCESS;</span></a>
+<a name="424"><span class="lineNum"> 424 </span> : : </a>
+<a name="425"><span class="lineNum"> 425 </span> :<span class="lineCov"> 3 : return OPAL_PERMISSION;</span></a>
+<a name="426"><span class="lineNum"> 426 </span> : : }</a>
+<a name="427"><span class="lineNum"> 427 </span> : : </a>
+<a name="428"><span class="lineNum"> 428 </span> : : /* Extract PKCS7 from the authentication header */</a>
+<a name="429"><span class="lineNum"> 429 </span> :<span class="lineCov"> 18 : static mbedtls_pkcs7* get_pkcs7(const struct efi_variable_authentication_2 *auth)</span></a>
+<a name="430"><span class="lineNum"> 430 </span> : : {</a>
+<a name="431"><span class="lineNum"> 431 </span> :<span class="lineCov"> 18 : char *checkpkcs7cert = NULL;</span></a>
+<a name="432"><span class="lineNum"> 432 </span> : : size_t len;</a>
+<a name="433"><span class="lineNum"> 433 </span> :<span class="lineCov"> 18 : mbedtls_pkcs7 *pkcs7 = NULL;</span></a>
+<a name="434"><span class="lineNum"> 434 </span> : : int rc;</a>
+<a name="435"><span class="lineNum"> 435 </span> : : </a>
+<a name="436"><span class="lineNum"> 436 </span> :<span class="lineCov"> 18 : len = get_pkcs7_len(auth);</span></a>
<a name="437"><span class="lineNum"> 437 </span> : : </a>
-<a name="438"><span class="lineNum"> 438 </span> :<span class="lineCov"> 14 : rc = mbedtls_x509_crt_info(checkpkcs7cert, CERT_BUFFER_SIZE, &quot;CRT:&quot;,</span></a>
-<a name="439"><span class="lineNum"> 439 </span> :<span class="lineCov"> 14 : &amp;(pkcs7-&gt;signed_data.certs));</span></a>
-<a name="440"><span class="lineNum"> 440 </span> :<span class="lineCov"> 14 : if (rc &lt; 0) {</span></a>
-<a name="441"><span class="lineNum"> 441 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to parse the certificate in PKCS7 structure\n&quot;);</span></a>
-<a name="442"><span class="lineNum"> 442 </span> :<span class="lineNoCov"> 0 : free(checkpkcs7cert);</span></a>
-<a name="443"><span class="lineNum"> 443 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="444"><span class="lineNum"> 444 </span> : : }</a>
-<a name="445"><span class="lineNum"> 445 </span> : : </a>
-<a name="446"><span class="lineNum"> 446 </span> :<span class="lineCov"> 14 : prlog(PR_DEBUG, &quot;%s \n&quot;, checkpkcs7cert);</span></a>
-<a name="447"><span class="lineNum"> 447 </span> :<span class="lineCov"> 14 : free(checkpkcs7cert);</span></a>
-<a name="448"><span class="lineNum"> 448 </span> :<span class="lineCov"> 14 : return pkcs7;</span></a>
-<a name="449"><span class="lineNum"> 449 </span> : : </a>
-<a name="450"><span class="lineNum"> 450 </span> :<span class="lineNoCov"> 0 : out:</span></a>
-<a name="451"><span class="lineNum"> 451 </span> :<span class="lineNoCov"> 0 : mbedtls_pkcs7_free(pkcs7);</span></a>
-<a name="452"><span class="lineNum"> 452 </span> :<span class="lineNoCov"> 0 : pkcs7 = NULL;</span></a>
-<a name="453"><span class="lineNum"> 453 </span> :<span class="lineNoCov"> 0 : return pkcs7;</span></a>
-<a name="454"><span class="lineNum"> 454 </span> : : }</a>
-<a name="455"><span class="lineNum"> 455 </span> : : </a>
-<a name="456"><span class="lineNum"> 456 </span> : : /* Verify the PKCS7 signature on the signed data. */</a>
-<a name="457"><span class="lineNum"> 457 </span> :<span class="lineCov"> 14 : static int verify_signature(const struct efi_variable_authentication_2 *auth,</span></a>
-<a name="458"><span class="lineNum"> 458 </span> : : const char *newcert, const size_t new_data_size,</a>
-<a name="459"><span class="lineNum"> 459 </span> : : const struct secvar *avar)</a>
-<a name="460"><span class="lineNum"> 460 </span> : : {</a>
-<a name="461"><span class="lineNum"> 461 </span> :<span class="lineCov"> 14 : mbedtls_pkcs7 *pkcs7 = NULL;</span></a>
-<a name="462"><span class="lineNum"> 462 </span> : : mbedtls_x509_crt x509;</a>
-<a name="463"><span class="lineNum"> 463 </span> :<span class="lineCov"> 14 : char *signing_cert = NULL;</span></a>
-<a name="464"><span class="lineNum"> 464 </span> :<span class="lineCov"> 14 : char *x509_buf = NULL;</span></a>
-<a name="465"><span class="lineNum"> 465 </span> : : int signing_cert_size;</a>
-<a name="466"><span class="lineNum"> 466 </span> :<span class="lineCov"> 14 : int rc = 0;</span></a>
-<a name="467"><span class="lineNum"> 467 </span> : : char *errbuf;</a>
-<a name="468"><span class="lineNum"> 468 </span> : : int eslvarsize;</a>
-<a name="469"><span class="lineNum"> 469 </span> : : int eslsize;</a>
-<a name="470"><span class="lineNum"> 470 </span> :<span class="lineCov"> 14 : int offset = 0;</span></a>
+<a name="438"><span class="lineNum"> 438 </span> :<span class="lineCov"> 18 : pkcs7 = malloc(sizeof(struct mbedtls_pkcs7));</span></a>
+<a name="439"><span class="lineNum"> 439 </span> :<span class="lineCov"> 18 : if (!pkcs7)</span></a>
+<a name="440"><span class="lineNum"> 440 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="441"><span class="lineNum"> 441 </span> : : </a>
+<a name="442"><span class="lineNum"> 442 </span> :<span class="lineCov"> 18 : mbedtls_pkcs7_init(pkcs7);</span></a>
+<a name="443"><span class="lineNum"> 443 </span> :<span class="lineCov"> 18 : rc = mbedtls_pkcs7_parse_der( auth-&gt;auth_info.cert_data, len, pkcs7);</span></a>
+<a name="444"><span class="lineNum"> 444 </span> :<span class="lineCov"> 18 : if (rc &lt;= 0) {</span></a>
+<a name="445"><span class="lineNum"> 445 </span> :<span class="lineCov"> 1 : prlog(PR_ERR, &quot;Parsing pkcs7 failed %04x\n&quot;, rc);</span></a>
+<a name="446"><span class="lineNum"> 446 </span> :<span class="lineCov"> 1 : goto out;</span></a>
+<a name="447"><span class="lineNum"> 447 </span> : : }</a>
+<a name="448"><span class="lineNum"> 448 </span> : : </a>
+<a name="449"><span class="lineNum"> 449 </span> :<span class="lineCov"> 17 : checkpkcs7cert = zalloc(CERT_BUFFER_SIZE);</span></a>
+<a name="450"><span class="lineNum"> 450 </span> :<span class="lineCov"> 17 : if (!checkpkcs7cert)</span></a>
+<a name="451"><span class="lineNum"> 451 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="452"><span class="lineNum"> 452 </span> : : </a>
+<a name="453"><span class="lineNum"> 453 </span> :<span class="lineCov"> 17 : rc = mbedtls_x509_crt_info(checkpkcs7cert, CERT_BUFFER_SIZE, &quot;CRT:&quot;,</span></a>
+<a name="454"><span class="lineNum"> 454 </span> :<span class="lineCov"> 17 : &amp;(pkcs7-&gt;signed_data.certs));</span></a>
+<a name="455"><span class="lineNum"> 455 </span> :<span class="lineCov"> 17 : if (rc &lt; 0) {</span></a>
+<a name="456"><span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to parse the certificate in PKCS7 structure\n&quot;);</span></a>
+<a name="457"><span class="lineNum"> 457 </span> :<span class="lineNoCov"> 0 : free(checkpkcs7cert);</span></a>
+<a name="458"><span class="lineNum"> 458 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="459"><span class="lineNum"> 459 </span> : : }</a>
+<a name="460"><span class="lineNum"> 460 </span> : : </a>
+<a name="461"><span class="lineNum"> 461 </span> :<span class="lineCov"> 17 : prlog(PR_DEBUG, &quot;%s \n&quot;, checkpkcs7cert);</span></a>
+<a name="462"><span class="lineNum"> 462 </span> :<span class="lineCov"> 17 : free(checkpkcs7cert);</span></a>
+<a name="463"><span class="lineNum"> 463 </span> :<span class="lineCov"> 17 : return pkcs7;</span></a>
+<a name="464"><span class="lineNum"> 464 </span> : : </a>
+<a name="465"><span class="lineNum"> 465 </span> :<span class="lineCov"> 1 : out:</span></a>
+<a name="466"><span class="lineNum"> 466 </span> :<span class="lineCov"> 1 : mbedtls_pkcs7_free(pkcs7);</span></a>
+<a name="467"><span class="lineNum"> 467 </span> :<span class="lineCov"> 1 : free(pkcs7);</span></a>
+<a name="468"><span class="lineNum"> 468 </span> :<span class="lineCov"> 1 : pkcs7 = NULL;</span></a>
+<a name="469"><span class="lineNum"> 469 </span> :<span class="lineCov"> 1 : return pkcs7;</span></a>
+<a name="470"><span class="lineNum"> 470 </span> : : }</a>
<a name="471"><span class="lineNum"> 471 </span> : : </a>
-<a name="472"><span class="lineNum"> 472 </span> :<span class="lineCov"> 14 : if (!auth)</span></a>
-<a name="473"><span class="lineNum"> 473 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
-<a name="474"><span class="lineNum"> 474 </span> : : </a>
-<a name="475"><span class="lineNum"> 475 </span> : : /* Extract the pkcs7 from the auth structure */</a>
-<a name="476"><span class="lineNum"> 476 </span> :<span class="lineCov"> 14 : pkcs7 = get_pkcs7(auth);</span></a>
-<a name="477"><span class="lineNum"> 477 </span> : : /* Failure to parse pkcs7 implies bad input. */</a>
-<a name="478"><span class="lineNum"> 478 </span> :<span class="lineCov"> 14 : if (!pkcs7)</span></a>
-<a name="479"><span class="lineNum"> 479 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
-<a name="480"><span class="lineNum"> 480 </span> : : </a>
-<a name="481"><span class="lineNum"> 481 </span> :<span class="lineCov"> 14 : prlog(PR_INFO, &quot;Load the signing certificate from the keystore&quot;);</span></a>
-<a name="482"><span class="lineNum"> 482 </span> : : </a>
-<a name="483"><span class="lineNum"> 483 </span> :<span class="lineCov"> 14 : eslvarsize = avar-&gt;data_size;</span></a>
-<a name="484"><span class="lineNum"> 484 </span> : : </a>
-<a name="485"><span class="lineNum"> 485 </span> : : /* Variable is not empty */</a>
-<a name="486"><span class="lineNum"> 486 </span> :<span class="lineCov"> 22 : while (eslvarsize &gt; 0) {</span></a>
-<a name="487"><span class="lineNum"> 487 </span> :<span class="lineCov"> 16 : prlog(PR_DEBUG, &quot;esl var size size is %d offset is %d\n&quot;, eslvarsize, offset);</span></a>
-<a name="488"><span class="lineNum"> 488 </span> :<span class="lineCov"> 16 : if (eslvarsize &lt; sizeof(EFI_SIGNATURE_LIST))</span></a>
-<a name="489"><span class="lineNum"> 489 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="490"><span class="lineNum"> 490 </span> : : </a>
-<a name="491"><span class="lineNum"> 491 </span> : : /* Calculate the size of the ESL */</a>
-<a name="492"><span class="lineNum"> 492 </span> :<span class="lineCov"> 16 : eslsize = get_esl_signature_list_size(avar-&gt;data + offset,</span></a>
-<a name="493"><span class="lineNum"> 493 </span> : : eslvarsize);</a>
-<a name="494"><span class="lineNum"> 494 </span> : : /* If could not extract the size */</a>
-<a name="495"><span class="lineNum"> 495 </span> :<span class="lineCov"> 16 : if (eslsize &lt;= 0) {</span></a>
-<a name="496"><span class="lineNum"> 496 </span> :<span class="lineNoCov"> 0 : rc = OPAL_PARAMETER;</span></a>
-<a name="497"><span class="lineNum"> 497 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="498"><span class="lineNum"> 498 </span> : : }</a>
-<a name="499"><span class="lineNum"> 499 </span> : : </a>
-<a name="500"><span class="lineNum"> 500 </span> : : /* Extract the certificate from the ESL */</a>
-<a name="501"><span class="lineNum"> 501 </span> :<span class="lineCov"> 16 : signing_cert_size = get_esl_cert(avar-&gt;data + offset,</span></a>
-<a name="502"><span class="lineNum"> 502 </span> : : eslvarsize, &amp;signing_cert);</a>
-<a name="503"><span class="lineNum"> 503 </span> :<span class="lineCov"> 16 : if (signing_cert_size &lt; 0) {</span></a>
-<a name="504"><span class="lineNum"> 504 </span> :<span class="lineNoCov"> 0 : rc = signing_cert_size;</span></a>
-<a name="505"><span class="lineNum"> 505 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="506"><span class="lineNum"> 506 </span> : : }</a>
-<a name="507"><span class="lineNum"> 507 </span> : : </a>
-<a name="508"><span class="lineNum"> 508 </span> :<span class="lineCov"> 16 : mbedtls_x509_crt_init(&amp;x509);</span></a>
-<a name="509"><span class="lineNum"> 509 </span> :<span class="lineCov"> 16 : rc = mbedtls_x509_crt_parse(&amp;x509,</span></a>
-<a name="510"><span class="lineNum"> 510 </span> : : signing_cert,</a>
-<a name="511"><span class="lineNum"> 511 </span> : : signing_cert_size);</a>
-<a name="512"><span class="lineNum"> 512 </span> : : </a>
-<a name="513"><span class="lineNum"> 513 </span> : : /* This should not happen, unless something corrupted in PNOR */</a>
-<a name="514"><span class="lineNum"> 514 </span> :<span class="lineCov"> 16 : if(rc) {</span></a>
-<a name="515"><span class="lineNum"> 515 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;X509 certificate parsing failed %04x\n&quot;, rc);</span></a>
-<a name="516"><span class="lineNum"> 516 </span> :<span class="lineNoCov"> 0 : rc = OPAL_INTERNAL_ERROR;</span></a>
-<a name="517"><span class="lineNum"> 517 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="518"><span class="lineNum"> 518 </span> : : }</a>
-<a name="519"><span class="lineNum"> 519 </span> : : </a>
-<a name="520"><span class="lineNum"> 520 </span> :<span class="lineCov"> 16 : x509_buf = zalloc(CERT_BUFFER_SIZE);</span></a>
-<a name="521"><span class="lineNum"> 521 </span> :<span class="lineCov"> 16 : rc = mbedtls_x509_crt_info(x509_buf,</span></a>
-<a name="522"><span class="lineNum"> 522 </span> : : CERT_BUFFER_SIZE,</a>
-<a name="523"><span class="lineNum"> 523 </span> : : &quot;CRT:&quot;,</a>
-<a name="524"><span class="lineNum"> 524 </span> : : &amp;x509);</a>
-<a name="525"><span class="lineNum"> 525 </span> : : </a>
-<a name="526"><span class="lineNum"> 526 </span> : : /* This should not happen, unless something corrupted in PNOR */</a>
-<a name="527"><span class="lineNum"> 527 </span> :<span class="lineCov"> 16 : if (rc &lt; 0) {</span></a>
-<a name="528"><span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : free(x509_buf);</span></a>
-<a name="529"><span class="lineNum"> 529 </span> :<span class="lineNoCov"> 0 : rc = OPAL_INTERNAL_ERROR;</span></a>
-<a name="530"><span class="lineNum"> 530 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="531"><span class="lineNum"> 531 </span> : : }</a>
-<a name="532"><span class="lineNum"> 532 </span> : : </a>
-<a name="533"><span class="lineNum"> 533 </span> :<span class="lineCov"> 16 : prlog(PR_INFO, &quot;%s \n&quot;, x509_buf);</span></a>
-<a name="534"><span class="lineNum"> 534 </span> :<span class="lineCov"> 16 : free(x509_buf);</span></a>
-<a name="535"><span class="lineNum"> 535 </span> :<span class="lineCov"> 16 : x509_buf = NULL;</span></a>
-<a name="536"><span class="lineNum"> 536 </span> : : </a>
-<a name="537"><span class="lineNum"> 537 </span> :<span class="lineCov"> 16 : rc = mbedtls_pkcs7_signed_hash_verify(pkcs7, &amp;x509, newcert, new_data_size);</span></a>
+<a name="472"><span class="lineNum"> 472 </span> : : /* Verify the PKCS7 signature on the signed data. */</a>
+<a name="473"><span class="lineNum"> 473 </span> :<span class="lineCov"> 18 : static int verify_signature(const struct efi_variable_authentication_2 *auth,</span></a>
+<a name="474"><span class="lineNum"> 474 </span> : : const char *hash, const size_t hash_len,</a>
+<a name="475"><span class="lineNum"> 475 </span> : : const struct secvar *avar)</a>
+<a name="476"><span class="lineNum"> 476 </span> : : {</a>
+<a name="477"><span class="lineNum"> 477 </span> :<span class="lineCov"> 18 : mbedtls_pkcs7 *pkcs7 = NULL;</span></a>
+<a name="478"><span class="lineNum"> 478 </span> : : mbedtls_x509_crt x509;</a>
+<a name="479"><span class="lineNum"> 479 </span> : : mbedtls_md_type_t md_alg;</a>
+<a name="480"><span class="lineNum"> 480 </span> :<span class="lineCov"> 18 : char *signing_cert = NULL;</span></a>
+<a name="481"><span class="lineNum"> 481 </span> :<span class="lineCov"> 18 : char *x509_buf = NULL;</span></a>
+<a name="482"><span class="lineNum"> 482 </span> : : int signing_cert_size;</a>
+<a name="483"><span class="lineNum"> 483 </span> :<span class="lineCov"> 18 : int rc = 0;</span></a>
+<a name="484"><span class="lineNum"> 484 </span> : : char *errbuf;</a>
+<a name="485"><span class="lineNum"> 485 </span> : : int eslvarsize;</a>
+<a name="486"><span class="lineNum"> 486 </span> : : int eslsize;</a>
+<a name="487"><span class="lineNum"> 487 </span> :<span class="lineCov"> 18 : int offset = 0;</span></a>
+<a name="488"><span class="lineNum"> 488 </span> : : </a>
+<a name="489"><span class="lineNum"> 489 </span> :<span class="lineCov"> 18 : if (!auth)</span></a>
+<a name="490"><span class="lineNum"> 490 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
+<a name="491"><span class="lineNum"> 491 </span> : : </a>
+<a name="492"><span class="lineNum"> 492 </span> : : /* Extract the pkcs7 from the auth structure */</a>
+<a name="493"><span class="lineNum"> 493 </span> :<span class="lineCov"> 18 : pkcs7 = get_pkcs7(auth);</span></a>
+<a name="494"><span class="lineNum"> 494 </span> : : /* Failure to parse pkcs7 implies bad input. */</a>
+<a name="495"><span class="lineNum"> 495 </span> :<span class="lineCov"> 18 : if (!pkcs7)</span></a>
+<a name="496"><span class="lineNum"> 496 </span> :<span class="lineCov"> 1 : return OPAL_PARAMETER;</span></a>
+<a name="497"><span class="lineNum"> 497 </span> : : </a>
+<a name="498"><span class="lineNum"> 498 </span> : : /*</a>
+<a name="499"><span class="lineNum"> 499 </span> : : * We only support sha256, which has a hash length of 32.</a>
+<a name="500"><span class="lineNum"> 500 </span> : : * If the alg is not sha256, then we should bail now.</a>
+<a name="501"><span class="lineNum"> 501 </span> : : */</a>
+<a name="502"><span class="lineNum"> 502 </span> :<span class="lineCov"> 17 : rc = mbedtls_oid_get_md_alg(&amp;pkcs7-&gt;signed_data.digest_alg_identifiers,</span></a>
+<a name="503"><span class="lineNum"> 503 </span> : : &amp;md_alg);</a>
+<a name="504"><span class="lineNum"> 504 </span> :<span class="lineCov"> 17 : if (rc != 0) {</span></a>
+<a name="505"><span class="lineNum"> 505 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to get the Digest Algorithm Identifier: %d\n&quot;, rc);</span></a>
+<a name="506"><span class="lineNum"> 506 </span> :<span class="lineNoCov"> 0 : rc = OPAL_PARAMETER;</span></a>
+<a name="507"><span class="lineNum"> 507 </span> :<span class="lineNoCov"> 0 : goto err_pkcs7;</span></a>
+<a name="508"><span class="lineNum"> 508 </span> : : }</a>
+<a name="509"><span class="lineNum"> 509 </span> : : </a>
+<a name="510"><span class="lineNum"> 510 </span> :<span class="lineCov"> 17 : if (md_alg != MBEDTLS_MD_SHA256) {</span></a>
+<a name="511"><span class="lineNum"> 511 </span> :<span class="lineCov"> 2 : prlog(PR_ERR, &quot;Unexpected digest algorithm: expected %d (SHA-256), got %d\n&quot;,</span></a>
+<a name="512"><span class="lineNum"> 512 </span> : : MBEDTLS_MD_SHA256, md_alg);</a>
+<a name="513"><span class="lineNum"> 513 </span> :<span class="lineCov"> 2 : rc = OPAL_PARAMETER;</span></a>
+<a name="514"><span class="lineNum"> 514 </span> :<span class="lineCov"> 2 : goto err_pkcs7;</span></a>
+<a name="515"><span class="lineNum"> 515 </span> : : }</a>
+<a name="516"><span class="lineNum"> 516 </span> : : </a>
+<a name="517"><span class="lineNum"> 517 </span> :<span class="lineCov"> 15 : prlog(PR_INFO, &quot;Load the signing certificate from the keystore&quot;);</span></a>
+<a name="518"><span class="lineNum"> 518 </span> : : </a>
+<a name="519"><span class="lineNum"> 519 </span> :<span class="lineCov"> 15 : eslvarsize = avar-&gt;data_size;</span></a>
+<a name="520"><span class="lineNum"> 520 </span> : : </a>
+<a name="521"><span class="lineNum"> 521 </span> : : /* Variable is not empty */</a>
+<a name="522"><span class="lineNum"> 522 </span> :<span class="lineCov"> 23 : while (eslvarsize &gt; 0) {</span></a>
+<a name="523"><span class="lineNum"> 523 </span> :<span class="lineCov"> 17 : prlog(PR_DEBUG, &quot;esl var size is %d offset is %d\n&quot;, eslvarsize, offset);</span></a>
+<a name="524"><span class="lineNum"> 524 </span> :<span class="lineCov"> 17 : if (eslvarsize &lt; sizeof(EFI_SIGNATURE_LIST)) {</span></a>
+<a name="525"><span class="lineNum"> 525 </span> :<span class="lineCov"> 1 : rc = OPAL_INTERNAL_ERROR;</span></a>
+<a name="526"><span class="lineNum"> 526 </span> :<span class="lineCov"> 1 : prlog(PR_ERR, &quot;ESL data is corrupted\n&quot;);</span></a>
+<a name="527"><span class="lineNum"> 527 </span> :<span class="lineCov"> 1 : break;</span></a>
+<a name="528"><span class="lineNum"> 528 </span> : : }</a>
+<a name="529"><span class="lineNum"> 529 </span> : : </a>
+<a name="530"><span class="lineNum"> 530 </span> : : /* Calculate the size of the ESL */</a>
+<a name="531"><span class="lineNum"> 531 </span> :<span class="lineCov"> 16 : eslsize = get_esl_signature_list_size(avar-&gt;data + offset,</span></a>
+<a name="532"><span class="lineNum"> 532 </span> : : eslvarsize);</a>
+<a name="533"><span class="lineNum"> 533 </span> : : /* If could not extract the size */</a>
+<a name="534"><span class="lineNum"> 534 </span> :<span class="lineCov"> 16 : if (eslsize &lt;= 0) {</span></a>
+<a name="535"><span class="lineNum"> 535 </span> :<span class="lineNoCov"> 0 : rc = OPAL_PARAMETER;</span></a>
+<a name="536"><span class="lineNum"> 536 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="537"><span class="lineNum"> 537 </span> : : }</a>
<a name="538"><span class="lineNum"> 538 </span> : : </a>
-<a name="539"><span class="lineNum"> 539 </span> : : /* If you find a signing certificate, you are done */</a>
-<a name="540"><span class="lineNum"> 540 </span> :<span class="lineCov"> 16 : if (rc == 0) {</span></a>
-<a name="541"><span class="lineNum"> 541 </span> :<span class="lineCov"> 8 : prlog(PR_INFO, &quot;Signature Verification passed\n&quot;);</span></a>
-<a name="542"><span class="lineNum"> 542 </span> :<span class="lineCov"> 8 : mbedtls_x509_crt_free(&amp;x509);</span></a>
-<a name="543"><span class="lineNum"> 543 </span> :<span class="lineCov"> 8 : break;</span></a>
-<a name="544"><span class="lineNum"> 544 </span> : : } else {</a>
-<a name="545"><span class="lineNum"> 545 </span> :<span class="lineCov"> 8 : errbuf = zalloc(MBEDTLS_ERR_BUFFER_SIZE);</span></a>
-<a name="546"><span class="lineNum"> 546 </span> :<span class="lineCov"> 8 : mbedtls_strerror(rc, errbuf, MBEDTLS_ERR_BUFFER_SIZE);</span></a>
-<a name="547"><span class="lineNum"> 547 </span> :<span class="lineCov"> 8 : prlog(PR_ERR, &quot;Signature Verification failed %02x %s\n&quot;,</span></a>
-<a name="548"><span class="lineNum"> 548 </span> : : rc, errbuf);</a>
-<a name="549"><span class="lineNum"> 549 </span> :<span class="lineCov"> 8 : free(errbuf);</span></a>
-<a name="550"><span class="lineNum"> 550 </span> :<span class="lineCov"> 8 : rc = OPAL_PERMISSION;</span></a>
-<a name="551"><span class="lineNum"> 551 </span> : : }</a>
-<a name="552"><span class="lineNum"> 552 </span> : : </a>
-<a name="553"><span class="lineNum"> 553 </span> : : </a>
-<a name="554"><span class="lineNum"> 554 </span> : : /* Look for the next ESL */</a>
-<a name="555"><span class="lineNum"> 555 </span> :<span class="lineCov"> 8 : offset = offset + eslsize;</span></a>
-<a name="556"><span class="lineNum"> 556 </span> :<span class="lineCov"> 8 : eslvarsize = eslvarsize - eslsize;</span></a>
-<a name="557"><span class="lineNum"> 557 </span> :<span class="lineCov"> 8 : mbedtls_x509_crt_free(&amp;x509);</span></a>
-<a name="558"><span class="lineNum"> 558 </span> :<span class="lineCov"> 8 : free(signing_cert);</span></a>
-<a name="559"><span class="lineNum"> 559 </span> : : /* Since we are going to allocate again in the next iteration */</a>
-<a name="560"><span class="lineNum"> 560 </span> :<span class="lineCov"> 8 : signing_cert = NULL;</span></a>
-<a name="561"><span class="lineNum"> 561 </span> : : </a>
-<a name="562"><span class="lineNum"> 562 </span> : : }</a>
-<a name="563"><span class="lineNum"> 563 </span> : : </a>
-<a name="564"><span class="lineNum"> 564 </span> :<span class="lineCov"> 14 : free(signing_cert);</span></a>
-<a name="565"><span class="lineNum"> 565 </span> :<span class="lineCov"> 14 : mbedtls_pkcs7_free(pkcs7);</span></a>
-<a name="566"><span class="lineNum"> 566 </span> :<span class="lineCov"> 14 : free(pkcs7);</span></a>
-<a name="567"><span class="lineNum"> 567 </span> : : </a>
-<a name="568"><span class="lineNum"> 568 </span> :<span class="lineCov"> 14 : return rc;</span></a>
-<a name="569"><span class="lineNum"> 569 </span> : : }</a>
-<a name="570"><span class="lineNum"> 570 </span> : : </a>
-<a name="571"><span class="lineNum"> 571 </span> : : /* </a>
-<a name="572"><span class="lineNum"> 572 </span> : : * Create the hash of the buffer</a>
-<a name="573"><span class="lineNum"> 573 </span> : : * name || vendor guid || attributes || timestamp || newcontent</a>
-<a name="574"><span class="lineNum"> 574 </span> : : * which is submitted as signed by the user.</a>
-<a name="575"><span class="lineNum"> 575 </span> : : * Returns the sha256 hash, else negative error code.</a>
-<a name="576"><span class="lineNum"> 576 </span> : : */</a>
-<a name="577"><span class="lineNum"> 577 </span> :<span class="lineCov"> 11 : static char *get_hash_to_verify(const char *key, const char *new_data,</span></a>
-<a name="578"><span class="lineNum"> 578 </span> : : const size_t new_data_size,</a>
-<a name="579"><span class="lineNum"> 579 </span> : : const struct efi_time *timestamp)</a>
-<a name="580"><span class="lineNum"> 580 </span> : : {</a>
-<a name="581"><span class="lineNum"> 581 </span> :<span class="lineCov"> 11 : le32 attr = cpu_to_le32(SECVAR_ATTRIBUTES);</span></a>
-<a name="582"><span class="lineNum"> 582 </span> : : size_t varlen;</a>
-<a name="583"><span class="lineNum"> 583 </span> : : char *wkey;</a>
-<a name="584"><span class="lineNum"> 584 </span> : : uuid_t guid;</a>
-<a name="585"><span class="lineNum"> 585 </span> :<span class="lineCov"> 11 : unsigned char *hash = NULL;</span></a>
-<a name="586"><span class="lineNum"> 586 </span> : : const mbedtls_md_info_t *md_info;</a>
-<a name="587"><span class="lineNum"> 587 </span> : : mbedtls_md_context_t ctx;</a>
-<a name="588"><span class="lineNum"> 588 </span> : : int rc;</a>
-<a name="589"><span class="lineNum"> 589 </span> : : </a>
-<a name="590"><span class="lineNum"> 590 </span> :<span class="lineCov"> 11 : md_info = mbedtls_md_info_from_type( MBEDTLS_MD_SHA256 );</span></a>
-<a name="591"><span class="lineNum"> 591 </span> :<span class="lineCov"> 11 : mbedtls_md_init(&amp;ctx);</span></a>
+<a name="539"><span class="lineNum"> 539 </span> : : /* Extract the certificate from the ESL */</a>
+<a name="540"><span class="lineNum"> 540 </span> :<span class="lineCov"> 16 : signing_cert_size = get_esl_cert(avar-&gt;data + offset,</span></a>
+<a name="541"><span class="lineNum"> 541 </span> : : eslvarsize, &amp;signing_cert);</a>
+<a name="542"><span class="lineNum"> 542 </span> :<span class="lineCov"> 16 : if (signing_cert_size &lt; 0) {</span></a>
+<a name="543"><span class="lineNum"> 543 </span> :<span class="lineNoCov"> 0 : rc = signing_cert_size;</span></a>
+<a name="544"><span class="lineNum"> 544 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="545"><span class="lineNum"> 545 </span> : : }</a>
+<a name="546"><span class="lineNum"> 546 </span> : : </a>
+<a name="547"><span class="lineNum"> 547 </span> :<span class="lineCov"> 16 : mbedtls_x509_crt_init(&amp;x509);</span></a>
+<a name="548"><span class="lineNum"> 548 </span> :<span class="lineCov"> 16 : rc = mbedtls_x509_crt_parse(&amp;x509,</span></a>
+<a name="549"><span class="lineNum"> 549 </span> : : signing_cert,</a>
+<a name="550"><span class="lineNum"> 550 </span> : : signing_cert_size);</a>
+<a name="551"><span class="lineNum"> 551 </span> : : </a>
+<a name="552"><span class="lineNum"> 552 </span> : : /* This should not happen, unless something corrupted in PNOR */</a>
+<a name="553"><span class="lineNum"> 553 </span> :<span class="lineCov"> 16 : if(rc) {</span></a>
+<a name="554"><span class="lineNum"> 554 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;X509 certificate parsing failed %04x\n&quot;, rc);</span></a>
+<a name="555"><span class="lineNum"> 555 </span> :<span class="lineNoCov"> 0 : rc = OPAL_INTERNAL_ERROR;</span></a>
+<a name="556"><span class="lineNum"> 556 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="557"><span class="lineNum"> 557 </span> : : }</a>
+<a name="558"><span class="lineNum"> 558 </span> : : </a>
+<a name="559"><span class="lineNum"> 559 </span> :<span class="lineCov"> 16 : x509_buf = zalloc(CERT_BUFFER_SIZE);</span></a>
+<a name="560"><span class="lineNum"> 560 </span> :<span class="lineCov"> 16 : rc = mbedtls_x509_crt_info(x509_buf,</span></a>
+<a name="561"><span class="lineNum"> 561 </span> : : CERT_BUFFER_SIZE,</a>
+<a name="562"><span class="lineNum"> 562 </span> : : &quot;CRT:&quot;,</a>
+<a name="563"><span class="lineNum"> 563 </span> : : &amp;x509);</a>
+<a name="564"><span class="lineNum"> 564 </span> : : </a>
+<a name="565"><span class="lineNum"> 565 </span> : : /* This should not happen, unless something corrupted in PNOR */</a>
+<a name="566"><span class="lineNum"> 566 </span> :<span class="lineCov"> 16 : if (rc &lt; 0) {</span></a>
+<a name="567"><span class="lineNum"> 567 </span> :<span class="lineNoCov"> 0 : free(x509_buf);</span></a>
+<a name="568"><span class="lineNum"> 568 </span> :<span class="lineNoCov"> 0 : rc = OPAL_INTERNAL_ERROR;</span></a>
+<a name="569"><span class="lineNum"> 569 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="570"><span class="lineNum"> 570 </span> : : }</a>
+<a name="571"><span class="lineNum"> 571 </span> : : </a>
+<a name="572"><span class="lineNum"> 572 </span> :<span class="lineCov"> 16 : prlog(PR_INFO, &quot;%s \n&quot;, x509_buf);</span></a>
+<a name="573"><span class="lineNum"> 573 </span> :<span class="lineCov"> 16 : free(x509_buf);</span></a>
+<a name="574"><span class="lineNum"> 574 </span> :<span class="lineCov"> 16 : x509_buf = NULL;</span></a>
+<a name="575"><span class="lineNum"> 575 </span> : : </a>
+<a name="576"><span class="lineNum"> 576 </span> :<span class="lineCov"> 16 : rc = mbedtls_pkcs7_signed_hash_verify(pkcs7, &amp;x509, hash, hash_len);</span></a>
+<a name="577"><span class="lineNum"> 577 </span> : : </a>
+<a name="578"><span class="lineNum"> 578 </span> : : /* If you find a signing certificate, you are done */</a>
+<a name="579"><span class="lineNum"> 579 </span> :<span class="lineCov"> 16 : if (rc == 0) {</span></a>
+<a name="580"><span class="lineNum"> 580 </span> :<span class="lineCov"> 8 : prlog(PR_INFO, &quot;Signature Verification passed\n&quot;);</span></a>
+<a name="581"><span class="lineNum"> 581 </span> :<span class="lineCov"> 8 : mbedtls_x509_crt_free(&amp;x509);</span></a>
+<a name="582"><span class="lineNum"> 582 </span> :<span class="lineCov"> 8 : break;</span></a>
+<a name="583"><span class="lineNum"> 583 </span> : : } else {</a>
+<a name="584"><span class="lineNum"> 584 </span> :<span class="lineCov"> 8 : errbuf = zalloc(MBEDTLS_ERR_BUFFER_SIZE);</span></a>
+<a name="585"><span class="lineNum"> 585 </span> :<span class="lineCov"> 8 : mbedtls_strerror(rc, errbuf, MBEDTLS_ERR_BUFFER_SIZE);</span></a>
+<a name="586"><span class="lineNum"> 586 </span> :<span class="lineCov"> 8 : prlog(PR_ERR, &quot;Signature Verification failed %02x %s\n&quot;,</span></a>
+<a name="587"><span class="lineNum"> 587 </span> : : rc, errbuf);</a>
+<a name="588"><span class="lineNum"> 588 </span> :<span class="lineCov"> 8 : free(errbuf);</span></a>
+<a name="589"><span class="lineNum"> 589 </span> :<span class="lineCov"> 8 : rc = OPAL_PERMISSION;</span></a>
+<a name="590"><span class="lineNum"> 590 </span> : : }</a>
+<a name="591"><span class="lineNum"> 591 </span> : : </a>
<a name="592"><span class="lineNum"> 592 </span> : : </a>
-<a name="593"><span class="lineNum"> 593 </span> :<span class="lineCov"> 11 : rc = mbedtls_md_setup(&amp;ctx, md_info, 0);</span></a>
-<a name="594"><span class="lineNum"> 594 </span> :<span class="lineCov"> 11 : if (rc)</span></a>
-<a name="595"><span class="lineNum"> 595 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="596"><span class="lineNum"> 596 </span> : : </a>
-<a name="597"><span class="lineNum"> 597 </span> :<span class="lineCov"> 11 : rc = mbedtls_md_starts(&amp;ctx);</span></a>
-<a name="598"><span class="lineNum"> 598 </span> :<span class="lineCov"> 11 : if (rc)</span></a>
-<a name="599"><span class="lineNum"> 599 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="593"><span class="lineNum"> 593 </span> : : /* Look for the next ESL */</a>
+<a name="594"><span class="lineNum"> 594 </span> :<span class="lineCov"> 8 : offset = offset + eslsize;</span></a>
+<a name="595"><span class="lineNum"> 595 </span> :<span class="lineCov"> 8 : eslvarsize = eslvarsize - eslsize;</span></a>
+<a name="596"><span class="lineNum"> 596 </span> :<span class="lineCov"> 8 : mbedtls_x509_crt_free(&amp;x509);</span></a>
+<a name="597"><span class="lineNum"> 597 </span> :<span class="lineCov"> 8 : free(signing_cert);</span></a>
+<a name="598"><span class="lineNum"> 598 </span> : : /* Since we are going to allocate again in the next iteration */</a>
+<a name="599"><span class="lineNum"> 599 </span> :<span class="lineCov"> 8 : signing_cert = NULL;</span></a>
<a name="600"><span class="lineNum"> 600 </span> : : </a>
-<a name="601"><span class="lineNum"> 601 </span> :<span class="lineCov"> 11 : if (key_equals(key, &quot;PK&quot;)</span></a>
-<a name="602"><span class="lineNum"> 602 </span> :<span class="lineCov"> 9 : || key_equals(key, &quot;KEK&quot;))</span></a>
-<a name="603"><span class="lineNum"> 603 </span> :<span class="lineCov"> 4 : guid = EFI_GLOBAL_VARIABLE_GUID;</span></a>
-<a name="604"><span class="lineNum"> 604 </span> :<span class="lineCov"> 7 : else if (key_equals(key, &quot;db&quot;)</span></a>
-<a name="605"><span class="lineNum"> 605 </span> :<span class="lineCov"> 1 : || key_equals(key, &quot;dbx&quot;))</span></a>
-<a name="606"><span class="lineNum"> 606 </span> :<span class="lineCov"> 7 : guid = EFI_IMAGE_SECURITY_DATABASE_GUID;</span></a>
-<a name="607"><span class="lineNum"> 607 </span> : : else</a>
-<a name="608"><span class="lineNum"> 608 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="609"><span class="lineNum"> 609 </span> : : </a>
-<a name="610"><span class="lineNum"> 610 </span> : : /* Expand char name to wide character width */</a>
-<a name="611"><span class="lineNum"> 611 </span> :<span class="lineCov"> 11 : varlen = strlen(key) * 2;</span></a>
-<a name="612"><span class="lineNum"> 612 </span> :<span class="lineCov"> 11 : wkey = char_to_wchar(key, strlen(key));</span></a>
-<a name="613"><span class="lineNum"> 613 </span> :<span class="lineCov"> 11 : rc = mbedtls_md_update(&amp;ctx, wkey, varlen);</span></a>
-<a name="614"><span class="lineNum"> 614 </span> :<span class="lineCov"> 11 : free(wkey);</span></a>
-<a name="615"><span class="lineNum"> 615 </span> :<span class="lineCov"> 11 : if (rc) </span></a>
-<a name="616"><span class="lineNum"> 616 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="617"><span class="lineNum"> 617 </span> : : </a>
-<a name="618"><span class="lineNum"> 618 </span> :<span class="lineCov"> 11 : rc = mbedtls_md_update(&amp;ctx, (const unsigned char *)&amp;guid, sizeof(guid));</span></a>
-<a name="619"><span class="lineNum"> 619 </span> :<span class="lineCov"> 11 : if (rc)</span></a>
-<a name="620"><span class="lineNum"> 620 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="621"><span class="lineNum"> 621 </span> : : </a>
-<a name="622"><span class="lineNum"> 622 </span> :<span class="lineCov"> 11 : rc = mbedtls_md_update(&amp;ctx, (const unsigned char *)&amp;attr, sizeof(attr));</span></a>
-<a name="623"><span class="lineNum"> 623 </span> :<span class="lineCov"> 11 : if (rc)</span></a>
-<a name="624"><span class="lineNum"> 624 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="625"><span class="lineNum"> 625 </span> : : </a>
-<a name="626"><span class="lineNum"> 626 </span> :<span class="lineCov"> 11 : rc = mbedtls_md_update(&amp;ctx, (const unsigned char *)timestamp,</span></a>
-<a name="627"><span class="lineNum"> 627 </span> : : sizeof(struct efi_time));</a>
-<a name="628"><span class="lineNum"> 628 </span> :<span class="lineCov"> 11 : if (rc)</span></a>
-<a name="629"><span class="lineNum"> 629 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="630"><span class="lineNum"> 630 </span> : : </a>
-<a name="631"><span class="lineNum"> 631 </span> :<span class="lineCov"> 11 : rc = mbedtls_md_update(&amp;ctx, new_data, new_data_size);</span></a>
-<a name="632"><span class="lineNum"> 632 </span> :<span class="lineCov"> 11 : if (rc)</span></a>
-<a name="633"><span class="lineNum"> 633 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="634"><span class="lineNum"> 634 </span> : : </a>
-<a name="635"><span class="lineNum"> 635 </span> :<span class="lineCov"> 11 : hash = zalloc(32);</span></a>
-<a name="636"><span class="lineNum"> 636 </span> :<span class="lineCov"> 11 : if (!hash)</span></a>
-<a name="637"><span class="lineNum"> 637 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="638"><span class="lineNum"> 638 </span> :<span class="lineCov"> 11 : rc = mbedtls_md_finish(&amp;ctx, hash);</span></a>
-<a name="639"><span class="lineNum"> 639 </span> :<span class="lineCov"> 11 : if (rc) {</span></a>
-<a name="640"><span class="lineNum"> 640 </span> :<span class="lineNoCov"> 0 : free(hash);</span></a>
-<a name="641"><span class="lineNum"> 641 </span> :<span class="lineNoCov"> 0 : hash = NULL;</span></a>
-<a name="642"><span class="lineNum"> 642 </span> : : }</a>
-<a name="643"><span class="lineNum"> 643 </span> : : </a>
-<a name="644"><span class="lineNum"> 644 </span> :<span class="lineCov"> 11 : out:</span></a>
-<a name="645"><span class="lineNum"> 645 </span> :<span class="lineCov"> 11 : mbedtls_md_free(&amp;ctx);</span></a>
-<a name="646"><span class="lineNum"> 646 </span> :<span class="lineCov"> 11 : return hash;</span></a>
-<a name="647"><span class="lineNum"> 647 </span> : : }</a>
-<a name="648"><span class="lineNum"> 648 </span> : : </a>
-<a name="649"><span class="lineNum"> 649 </span> :<span class="lineCov"> 26 : bool is_pkcs7_sig_format(const void *data)</span></a>
-<a name="650"><span class="lineNum"> 650 </span> : : {</a>
-<a name="651"><span class="lineNum"> 651 </span> :<span class="lineCov"> 26 : const struct efi_variable_authentication_2 *auth = data;</span></a>
-<a name="652"><span class="lineNum"> 652 </span> :<span class="lineCov"> 26 : uuid_t pkcs7_guid = EFI_CERT_TYPE_PKCS7_GUID;</span></a>
-<a name="653"><span class="lineNum"> 653 </span> : : </a>
-<a name="654"><span class="lineNum"> 654 </span> :<span class="lineCov"> 26 : return !memcmp(&amp;auth-&gt;auth_info.cert_type, &amp;pkcs7_guid, 16);</span></a>
-<a name="655"><span class="lineNum"> 655 </span> : : }</a>
-<a name="656"><span class="lineNum"> 656 </span> : : </a>
-<a name="657"><span class="lineNum"> 657 </span> :<span class="lineCov"> 24 : int process_update(const struct secvar *update, char **newesl,</span></a>
-<a name="658"><span class="lineNum"> 658 </span> : : int *new_data_size, struct efi_time *timestamp,</a>
-<a name="659"><span class="lineNum"> 659 </span> : : struct list_head *bank, char *last_timestamp)</a>
-<a name="660"><span class="lineNum"> 660 </span> : : {</a>
-<a name="661"><span class="lineNum"> 661 </span> :<span class="lineCov"> 24 : struct efi_variable_authentication_2 *auth = NULL;</span></a>
-<a name="662"><span class="lineNum"> 662 </span> :<span class="lineCov"> 24 : void *auth_buffer = NULL;</span></a>
-<a name="663"><span class="lineNum"> 663 </span> :<span class="lineCov"> 24 : int auth_buffer_size = 0;</span></a>
-<a name="664"><span class="lineNum"> 664 </span> : : const char *key_authority[3];</a>
-<a name="665"><span class="lineNum"> 665 </span> :<span class="lineCov"> 24 : char *tbhbuffer = NULL;</span></a>
-<a name="666"><span class="lineNum"> 666 </span> :<span class="lineCov"> 24 : size_t tbhbuffersize = 0;</span></a>
-<a name="667"><span class="lineNum"> 667 </span> :<span class="lineCov"> 24 : struct secvar *avar = NULL;</span></a>
-<a name="668"><span class="lineNum"> 668 </span> :<span class="lineCov"> 24 : int rc = 0;</span></a>
-<a name="669"><span class="lineNum"> 669 </span> : : int i;</a>
+<a name="601"><span class="lineNum"> 601 </span> : : }</a>
+<a name="602"><span class="lineNum"> 602 </span> : : </a>
+<a name="603"><span class="lineNum"> 603 </span> :<span class="lineCov"> 15 : free(signing_cert);</span></a>
+<a name="604"><span class="lineNum"> 604 </span> :<span class="lineCov"> 17 : err_pkcs7:</span></a>
+<a name="605"><span class="lineNum"> 605 </span> :<span class="lineCov"> 17 : mbedtls_pkcs7_free(pkcs7);</span></a>
+<a name="606"><span class="lineNum"> 606 </span> :<span class="lineCov"> 17 : free(pkcs7);</span></a>
+<a name="607"><span class="lineNum"> 607 </span> : : </a>
+<a name="608"><span class="lineNum"> 608 </span> :<span class="lineCov"> 17 : return rc;</span></a>
+<a name="609"><span class="lineNum"> 609 </span> : : }</a>
+<a name="610"><span class="lineNum"> 610 </span> : : </a>
+<a name="611"><span class="lineNum"> 611 </span> : : /* </a>
+<a name="612"><span class="lineNum"> 612 </span> : : * Create the hash of the buffer</a>
+<a name="613"><span class="lineNum"> 613 </span> : : * name || vendor guid || attributes || timestamp || newcontent</a>
+<a name="614"><span class="lineNum"> 614 </span> : : * which is submitted as signed by the user.</a>
+<a name="615"><span class="lineNum"> 615 </span> : : * Returns the sha256 hash, else NULL.</a>
+<a name="616"><span class="lineNum"> 616 </span> : : */</a>
+<a name="617"><span class="lineNum"> 617 </span> :<span class="lineCov"> 14 : static char *get_hash_to_verify(const char *key, const char *new_data,</span></a>
+<a name="618"><span class="lineNum"> 618 </span> : : const size_t new_data_size,</a>
+<a name="619"><span class="lineNum"> 619 </span> : : const struct efi_time *timestamp)</a>
+<a name="620"><span class="lineNum"> 620 </span> : : {</a>
+<a name="621"><span class="lineNum"> 621 </span> :<span class="lineCov"> 14 : le32 attr = cpu_to_le32(SECVAR_ATTRIBUTES);</span></a>
+<a name="622"><span class="lineNum"> 622 </span> : : size_t varlen;</a>
+<a name="623"><span class="lineNum"> 623 </span> : : char *wkey;</a>
+<a name="624"><span class="lineNum"> 624 </span> : : uuid_t guid;</a>
+<a name="625"><span class="lineNum"> 625 </span> :<span class="lineCov"> 14 : unsigned char *hash = NULL;</span></a>
+<a name="626"><span class="lineNum"> 626 </span> : : const mbedtls_md_info_t *md_info;</a>
+<a name="627"><span class="lineNum"> 627 </span> : : mbedtls_md_context_t ctx;</a>
+<a name="628"><span class="lineNum"> 628 </span> : : int rc;</a>
+<a name="629"><span class="lineNum"> 629 </span> : : </a>
+<a name="630"><span class="lineNum"> 630 </span> :<span class="lineCov"> 14 : md_info = mbedtls_md_info_from_type( MBEDTLS_MD_SHA256 );</span></a>
+<a name="631"><span class="lineNum"> 631 </span> :<span class="lineCov"> 14 : mbedtls_md_init(&amp;ctx);</span></a>
+<a name="632"><span class="lineNum"> 632 </span> : : </a>
+<a name="633"><span class="lineNum"> 633 </span> :<span class="lineCov"> 14 : rc = mbedtls_md_setup(&amp;ctx, md_info, 0);</span></a>
+<a name="634"><span class="lineNum"> 634 </span> :<span class="lineCov"> 14 : if (rc)</span></a>
+<a name="635"><span class="lineNum"> 635 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="636"><span class="lineNum"> 636 </span> : : </a>
+<a name="637"><span class="lineNum"> 637 </span> :<span class="lineCov"> 14 : rc = mbedtls_md_starts(&amp;ctx);</span></a>
+<a name="638"><span class="lineNum"> 638 </span> :<span class="lineCov"> 14 : if (rc)</span></a>
+<a name="639"><span class="lineNum"> 639 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="640"><span class="lineNum"> 640 </span> : : </a>
+<a name="641"><span class="lineNum"> 641 </span> :<span class="lineCov"> 14 : if (key_equals(key, &quot;PK&quot;)</span></a>
+<a name="642"><span class="lineNum"> 642 </span> :<span class="lineCov"> 12 : || key_equals(key, &quot;KEK&quot;))</span></a>
+<a name="643"><span class="lineNum"> 643 </span> :<span class="lineCov"> 5 : guid = EFI_GLOBAL_VARIABLE_GUID;</span></a>
+<a name="644"><span class="lineNum"> 644 </span> :<span class="lineCov"> 9 : else if (key_equals(key, &quot;db&quot;)</span></a>
+<a name="645"><span class="lineNum"> 645 </span> :<span class="lineCov"> 1 : || key_equals(key, &quot;dbx&quot;))</span></a>
+<a name="646"><span class="lineNum"> 646 </span> :<span class="lineCov"> 9 : guid = EFI_IMAGE_SECURITY_DATABASE_GUID;</span></a>
+<a name="647"><span class="lineNum"> 647 </span> : : else</a>
+<a name="648"><span class="lineNum"> 648 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="649"><span class="lineNum"> 649 </span> : : </a>
+<a name="650"><span class="lineNum"> 650 </span> : : /* Expand char name to wide character width */</a>
+<a name="651"><span class="lineNum"> 651 </span> :<span class="lineCov"> 14 : varlen = strlen(key) * 2;</span></a>
+<a name="652"><span class="lineNum"> 652 </span> :<span class="lineCov"> 14 : wkey = char_to_wchar(key, strlen(key));</span></a>
+<a name="653"><span class="lineNum"> 653 </span> :<span class="lineCov"> 14 : rc = mbedtls_md_update(&amp;ctx, wkey, varlen);</span></a>
+<a name="654"><span class="lineNum"> 654 </span> :<span class="lineCov"> 14 : free(wkey);</span></a>
+<a name="655"><span class="lineNum"> 655 </span> :<span class="lineCov"> 14 : if (rc) </span></a>
+<a name="656"><span class="lineNum"> 656 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="657"><span class="lineNum"> 657 </span> : : </a>
+<a name="658"><span class="lineNum"> 658 </span> :<span class="lineCov"> 14 : rc = mbedtls_md_update(&amp;ctx, (const unsigned char *)&amp;guid, sizeof(guid));</span></a>
+<a name="659"><span class="lineNum"> 659 </span> :<span class="lineCov"> 14 : if (rc)</span></a>
+<a name="660"><span class="lineNum"> 660 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="661"><span class="lineNum"> 661 </span> : : </a>
+<a name="662"><span class="lineNum"> 662 </span> :<span class="lineCov"> 14 : rc = mbedtls_md_update(&amp;ctx, (const unsigned char *)&amp;attr, sizeof(attr));</span></a>
+<a name="663"><span class="lineNum"> 663 </span> :<span class="lineCov"> 14 : if (rc)</span></a>
+<a name="664"><span class="lineNum"> 664 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="665"><span class="lineNum"> 665 </span> : : </a>
+<a name="666"><span class="lineNum"> 666 </span> :<span class="lineCov"> 14 : rc = mbedtls_md_update(&amp;ctx, (const unsigned char *)timestamp,</span></a>
+<a name="667"><span class="lineNum"> 667 </span> : : sizeof(struct efi_time));</a>
+<a name="668"><span class="lineNum"> 668 </span> :<span class="lineCov"> 14 : if (rc)</span></a>
+<a name="669"><span class="lineNum"> 669 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
<a name="670"><span class="lineNum"> 670 </span> : : </a>
-<a name="671"><span class="lineNum"> 671 </span> : : /* We need to split data into authentication descriptor and new ESL */</a>
-<a name="672"><span class="lineNum"> 672 </span> :<span class="lineCov"> 24 : auth_buffer_size = get_auth_descriptor2(update-&gt;data,</span></a>
-<a name="673"><span class="lineNum"> 673 </span> : : update-&gt;data_size,</a>
-<a name="674"><span class="lineNum"> 674 </span> : : &amp;auth_buffer);</a>
-<a name="675"><span class="lineNum"> 675 </span> :<span class="lineCov"> 24 : if ((auth_buffer_size &lt; 0)</span></a>
-<a name="676"><span class="lineNum"> 676 </span> :<span class="lineCov"> 24 : || (update-&gt;data_size &lt; auth_buffer_size)) {</span></a>
-<a name="677"><span class="lineNum"> 677 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Invalid auth buffer size\n&quot;);</span></a>
-<a name="678"><span class="lineNum"> 678 </span> :<span class="lineNoCov"> 0 : rc = auth_buffer_size;</span></a>
-<a name="679"><span class="lineNum"> 679 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="680"><span class="lineNum"> 680 </span> : : }</a>
-<a name="681"><span class="lineNum"> 681 </span> : : </a>
-<a name="682"><span class="lineNum"> 682 </span> :<span class="lineCov"> 24 : auth = auth_buffer;</span></a>
+<a name="671"><span class="lineNum"> 671 </span> :<span class="lineCov"> 14 : rc = mbedtls_md_update(&amp;ctx, new_data, new_data_size);</span></a>
+<a name="672"><span class="lineNum"> 672 </span> :<span class="lineCov"> 14 : if (rc)</span></a>
+<a name="673"><span class="lineNum"> 673 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="674"><span class="lineNum"> 674 </span> : : </a>
+<a name="675"><span class="lineNum"> 675 </span> :<span class="lineCov"> 14 : hash = zalloc(32);</span></a>
+<a name="676"><span class="lineNum"> 676 </span> :<span class="lineCov"> 14 : if (!hash)</span></a>
+<a name="677"><span class="lineNum"> 677 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="678"><span class="lineNum"> 678 </span> :<span class="lineCov"> 14 : rc = mbedtls_md_finish(&amp;ctx, hash);</span></a>
+<a name="679"><span class="lineNum"> 679 </span> :<span class="lineCov"> 14 : if (rc) {</span></a>
+<a name="680"><span class="lineNum"> 680 </span> :<span class="lineNoCov"> 0 : free(hash);</span></a>
+<a name="681"><span class="lineNum"> 681 </span> :<span class="lineNoCov"> 0 : hash = NULL;</span></a>
+<a name="682"><span class="lineNum"> 682 </span> : : }</a>
<a name="683"><span class="lineNum"> 683 </span> : : </a>
-<a name="684"><span class="lineNum"> 684 </span> :<span class="lineCov"> 24 : if (!timestamp) {</span></a>
-<a name="685"><span class="lineNum"> 685 </span> :<span class="lineNoCov"> 0 : rc = OPAL_INTERNAL_ERROR;</span></a>
-<a name="686"><span class="lineNum"> 686 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="687"><span class="lineNum"> 687 </span> : : }</a>
+<a name="684"><span class="lineNum"> 684 </span> :<span class="lineCov"> 14 : out:</span></a>
+<a name="685"><span class="lineNum"> 685 </span> :<span class="lineCov"> 14 : mbedtls_md_free(&amp;ctx);</span></a>
+<a name="686"><span class="lineNum"> 686 </span> :<span class="lineCov"> 14 : return hash;</span></a>
+<a name="687"><span class="lineNum"> 687 </span> : : }</a>
<a name="688"><span class="lineNum"> 688 </span> : : </a>
-<a name="689"><span class="lineNum"> 689 </span> :<span class="lineCov"> 24 : memcpy(timestamp, auth_buffer, sizeof(struct efi_time));</span></a>
-<a name="690"><span class="lineNum"> 690 </span> : : </a>
-<a name="691"><span class="lineNum"> 691 </span> :<span class="lineCov"> 24 : rc = check_timestamp(update-&gt;key, timestamp, last_timestamp);</span></a>
-<a name="692"><span class="lineNum"> 692 </span> : : /* Failure implies probably an older command being resubmitted */</a>
-<a name="693"><span class="lineNum"> 693 </span> :<span class="lineCov"> 24 : if (rc != OPAL_SUCCESS) {</span></a>
-<a name="694"><span class="lineNum"> 694 </span> :<span class="lineCov"> 3 : prlog(PR_ERR, &quot;Timestamp verification failed for key %s\n&quot;, update-&gt;key);</span></a>
-<a name="695"><span class="lineNum"> 695 </span> :<span class="lineCov"> 3 : goto out;</span></a>
-<a name="696"><span class="lineNum"> 696 </span> : : }</a>
-<a name="697"><span class="lineNum"> 697 </span> : : </a>
-<a name="698"><span class="lineNum"> 698 </span> : : /* Calculate the size of new ESL data */</a>
-<a name="699"><span class="lineNum"> 699 </span> :<span class="lineCov"> 21 : *new_data_size = update-&gt;data_size - auth_buffer_size;</span></a>
-<a name="700"><span class="lineNum"> 700 </span> :<span class="lineCov"> 21 : if (*new_data_size &lt; 0) {</span></a>
-<a name="701"><span class="lineNum"> 701 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Invalid new ESL (new data content) size\n&quot;);</span></a>
-<a name="702"><span class="lineNum"> 702 </span> :<span class="lineNoCov"> 0 : rc = OPAL_PARAMETER;</span></a>
-<a name="703"><span class="lineNum"> 703 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="704"><span class="lineNum"> 704 </span> : : }</a>
-<a name="705"><span class="lineNum"> 705 </span> :<span class="lineCov"> 21 : *newesl = zalloc(*new_data_size);</span></a>
-<a name="706"><span class="lineNum"> 706 </span> :<span class="lineCov"> 21 : if (!(*newesl)) {</span></a>
-<a name="707"><span class="lineNum"> 707 </span> :<span class="lineNoCov"> 0 : rc = OPAL_NO_MEM;</span></a>
-<a name="708"><span class="lineNum"> 708 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="709"><span class="lineNum"> 709 </span> : : }</a>
-<a name="710"><span class="lineNum"> 710 </span> :<span class="lineCov"> 21 : memcpy(*newesl, update-&gt;data + auth_buffer_size, *new_data_size);</span></a>
-<a name="711"><span class="lineNum"> 711 </span> : : </a>
-<a name="712"><span class="lineNum"> 712 </span> : : /* Validate the new ESL is in right format */</a>
-<a name="713"><span class="lineNum"> 713 </span> :<span class="lineCov"> 21 : rc = validate_esl_list(update-&gt;key, *newesl, *new_data_size);</span></a>
-<a name="714"><span class="lineNum"> 714 </span> :<span class="lineCov"> 21 : if (rc &lt; 0) {</span></a>
-<a name="715"><span class="lineNum"> 715 </span> :<span class="lineCov"> 6 : prlog(PR_ERR, &quot;ESL validation failed for key %s with error %04x\n&quot;,</span></a>
-<a name="716"><span class="lineNum"> 716 </span> : : update-&gt;key, rc);</a>
-<a name="717"><span class="lineNum"> 717 </span> :<span class="lineCov"> 6 : goto out;</span></a>
-<a name="718"><span class="lineNum"> 718 </span> : : }</a>
-<a name="719"><span class="lineNum"> 719 </span> : : </a>
-<a name="720"><span class="lineNum"> 720 </span> :<span class="lineCov"> 15 : if (setup_mode) {</span></a>
-<a name="721"><span class="lineNum"> 721 </span> :<span class="lineCov"> 4 : rc = OPAL_SUCCESS;</span></a>
-<a name="722"><span class="lineNum"> 722 </span> :<span class="lineCov"> 4 : goto out;</span></a>
-<a name="723"><span class="lineNum"> 723 </span> : : }</a>
-<a name="724"><span class="lineNum"> 724 </span> : : </a>
-<a name="725"><span class="lineNum"> 725 </span> : : /* Prepare the data to be verified */</a>
-<a name="726"><span class="lineNum"> 726 </span> :<span class="lineCov"> 11 : tbhbuffer = get_hash_to_verify(update-&gt;key, *newesl, *new_data_size,</span></a>
-<a name="727"><span class="lineNum"> 727 </span> : : timestamp);</a>
-<a name="728"><span class="lineNum"> 728 </span> :<span class="lineCov"> 11 : if (!tbhbuffer) {</span></a>
-<a name="729"><span class="lineNum"> 729 </span> :<span class="lineNoCov"> 0 : rc = OPAL_INTERNAL_ERROR;</span></a>
-<a name="730"><span class="lineNum"> 730 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="731"><span class="lineNum"> 731 </span> : : }</a>
-<a name="732"><span class="lineNum"> 732 </span> : : </a>
-<a name="733"><span class="lineNum"> 733 </span> : : /* Get the authority to verify the signature */</a>
-<a name="734"><span class="lineNum"> 734 </span> :<span class="lineCov"> 11 : get_key_authority(key_authority, update-&gt;key);</span></a>
-<a name="735"><span class="lineNum"> 735 </span> : : </a>
-<a name="736"><span class="lineNum"> 736 </span> : : /*</a>
-<a name="737"><span class="lineNum"> 737 </span> : : * Try for all the authorities that are allowed to sign.</a>
-<a name="738"><span class="lineNum"> 738 </span> : : * For eg. db/dbx can be signed by both PK or KEK</a>
-<a name="739"><span class="lineNum"> 739 </span> : : */</a>
-<a name="740"><span class="lineNum"> 740 </span> :<span class="lineCov"> 19 : for (i = 0; key_authority[i] != NULL; i++) {</span></a>
-<a name="741"><span class="lineNum"> 741 </span> :<span class="lineCov"> 16 : prlog(PR_DEBUG, &quot;key is %s\n&quot;, update-&gt;key);</span></a>
-<a name="742"><span class="lineNum"> 742 </span> :<span class="lineCov"> 16 : prlog(PR_DEBUG, &quot;key authority is %s\n&quot;, key_authority[i]);</span></a>
-<a name="743"><span class="lineNum"> 743 </span> :<span class="lineCov"> 16 : avar = find_secvar(key_authority[i],</span></a>
-<a name="744"><span class="lineNum"> 744 </span> :<span class="lineCov"> 16 : strlen(key_authority[i]) + 1,</span></a>
-<a name="745"><span class="lineNum"> 745 </span> : : bank);</a>
-<a name="746"><span class="lineNum"> 746 </span> :<span class="lineCov"> 16 : if (!avar || !avar-&gt;data_size)</span></a>
-<a name="747"><span class="lineNum"> 747 </span> :<span class="lineCov"> 2 : continue;</span></a>
-<a name="748"><span class="lineNum"> 748 </span> : : </a>
-<a name="749"><span class="lineNum"> 749 </span> : : /* Verify the signature */</a>
-<a name="750"><span class="lineNum"> 750 </span> :<span class="lineCov"> 14 : rc = verify_signature(auth, tbhbuffer, tbhbuffersize,</span></a>
-<a name="751"><span class="lineNum"> 751 </span> : : avar);</a>
-<a name="752"><span class="lineNum"> 752 </span> : : </a>
-<a name="753"><span class="lineNum"> 753 </span> : : /* Break if signature verification is successful */</a>
-<a name="754"><span class="lineNum"> 754 </span> :<span class="lineCov"> 14 : if (rc == OPAL_SUCCESS) {</span></a>
-<a name="755"><span class="lineNum"> 755 </span> :<span class="lineCov"> 8 : prlog(PR_INFO, &quot;Key %s successfully verified by authority %s\n&quot;, update-&gt;key, key_authority[i]);</span></a>
-<a name="756"><span class="lineNum"> 756 </span> :<span class="lineCov"> 8 : break;</span></a>
-<a name="757"><span class="lineNum"> 757 </span> : : }</a>
-<a name="758"><span class="lineNum"> 758 </span> : : }</a>
-<a name="759"><span class="lineNum"> 759 </span> : : </a>
-<a name="760"><span class="lineNum"> 760 </span> :<span class="lineCov"> 3 : out:</span></a>
-<a name="761"><span class="lineNum"> 761 </span> :<span class="lineCov"> 24 : free(auth_buffer);</span></a>
-<a name="762"><span class="lineNum"> 762 </span> :<span class="lineCov"> 24 : free(tbhbuffer);</span></a>
+<a name="689"><span class="lineNum"> 689 </span> :<span class="lineCov"> 34 : bool is_pkcs7_sig_format(const void *data)</span></a>
+<a name="690"><span class="lineNum"> 690 </span> : : {</a>
+<a name="691"><span class="lineNum"> 691 </span> :<span class="lineCov"> 34 : const struct efi_variable_authentication_2 *auth = data;</span></a>
+<a name="692"><span class="lineNum"> 692 </span> :<span class="lineCov"> 34 : uuid_t pkcs7_guid = EFI_CERT_TYPE_PKCS7_GUID;</span></a>
+<a name="693"><span class="lineNum"> 693 </span> : : </a>
+<a name="694"><span class="lineNum"> 694 </span> :<span class="lineCov"> 34 : return !memcmp(&amp;auth-&gt;auth_info.cert_type, &amp;pkcs7_guid, 16);</span></a>
+<a name="695"><span class="lineNum"> 695 </span> : : }</a>
+<a name="696"><span class="lineNum"> 696 </span> : : </a>
+<a name="697"><span class="lineNum"> 697 </span> :<span class="lineCov"> 32 : int process_update(const struct secvar *update, char **newesl,</span></a>
+<a name="698"><span class="lineNum"> 698 </span> : : int *new_data_size, struct efi_time *timestamp,</a>
+<a name="699"><span class="lineNum"> 699 </span> : : struct list_head *bank, char *last_timestamp)</a>
+<a name="700"><span class="lineNum"> 700 </span> : : {</a>
+<a name="701"><span class="lineNum"> 701 </span> :<span class="lineCov"> 32 : struct efi_variable_authentication_2 *auth = NULL;</span></a>
+<a name="702"><span class="lineNum"> 702 </span> :<span class="lineCov"> 32 : void *auth_buffer = NULL;</span></a>
+<a name="703"><span class="lineNum"> 703 </span> :<span class="lineCov"> 32 : int auth_buffer_size = 0;</span></a>
+<a name="704"><span class="lineNum"> 704 </span> : : const char *key_authority[3];</a>
+<a name="705"><span class="lineNum"> 705 </span> :<span class="lineCov"> 32 : char *hash = NULL;</span></a>
+<a name="706"><span class="lineNum"> 706 </span> :<span class="lineCov"> 32 : struct secvar *avar = NULL;</span></a>
+<a name="707"><span class="lineNum"> 707 </span> :<span class="lineCov"> 32 : int rc = 0;</span></a>
+<a name="708"><span class="lineNum"> 708 </span> : : int i;</a>
+<a name="709"><span class="lineNum"> 709 </span> : : </a>
+<a name="710"><span class="lineNum"> 710 </span> : : /* We need to split data into authentication descriptor and new ESL */</a>
+<a name="711"><span class="lineNum"> 711 </span> :<span class="lineCov"> 32 : auth_buffer_size = get_auth_descriptor2(update-&gt;data,</span></a>
+<a name="712"><span class="lineNum"> 712 </span> : : update-&gt;data_size,</a>
+<a name="713"><span class="lineNum"> 713 </span> : : &amp;auth_buffer);</a>
+<a name="714"><span class="lineNum"> 714 </span> :<span class="lineCov"> 32 : if ((auth_buffer_size &lt; 0)</span></a>
+<a name="715"><span class="lineNum"> 715 </span> :<span class="lineCov"> 31 : || (update-&gt;data_size &lt; auth_buffer_size)) {</span></a>
+<a name="716"><span class="lineNum"> 716 </span> :<span class="lineCov"> 1 : prlog(PR_ERR, &quot;Invalid auth buffer size\n&quot;);</span></a>
+<a name="717"><span class="lineNum"> 717 </span> :<span class="lineCov"> 1 : rc = auth_buffer_size;</span></a>
+<a name="718"><span class="lineNum"> 718 </span> :<span class="lineCov"> 1 : goto out;</span></a>
+<a name="719"><span class="lineNum"> 719 </span> : : }</a>
+<a name="720"><span class="lineNum"> 720 </span> : : </a>
+<a name="721"><span class="lineNum"> 721 </span> :<span class="lineCov"> 31 : auth = auth_buffer;</span></a>
+<a name="722"><span class="lineNum"> 722 </span> : : </a>
+<a name="723"><span class="lineNum"> 723 </span> :<span class="lineCov"> 31 : if (!timestamp) {</span></a>
+<a name="724"><span class="lineNum"> 724 </span> :<span class="lineNoCov"> 0 : rc = OPAL_INTERNAL_ERROR;</span></a>
+<a name="725"><span class="lineNum"> 725 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="726"><span class="lineNum"> 726 </span> : : }</a>
+<a name="727"><span class="lineNum"> 727 </span> : : </a>
+<a name="728"><span class="lineNum"> 728 </span> :<span class="lineCov"> 31 : memcpy(timestamp, auth_buffer, sizeof(struct efi_time));</span></a>
+<a name="729"><span class="lineNum"> 729 </span> : : </a>
+<a name="730"><span class="lineNum"> 730 </span> :<span class="lineCov"> 31 : rc = check_timestamp(update-&gt;key, timestamp, last_timestamp);</span></a>
+<a name="731"><span class="lineNum"> 731 </span> : : /* Failure implies probably an older command being resubmitted */</a>
+<a name="732"><span class="lineNum"> 732 </span> :<span class="lineCov"> 31 : if (rc != OPAL_SUCCESS) {</span></a>
+<a name="733"><span class="lineNum"> 733 </span> :<span class="lineCov"> 3 : prlog(PR_ERR, &quot;Timestamp verification failed for key %s\n&quot;, update-&gt;key);</span></a>
+<a name="734"><span class="lineNum"> 734 </span> :<span class="lineCov"> 3 : goto out;</span></a>
+<a name="735"><span class="lineNum"> 735 </span> : : }</a>
+<a name="736"><span class="lineNum"> 736 </span> : : </a>
+<a name="737"><span class="lineNum"> 737 </span> : : /* Calculate the size of new ESL data */</a>
+<a name="738"><span class="lineNum"> 738 </span> :<span class="lineCov"> 28 : *new_data_size = update-&gt;data_size - auth_buffer_size;</span></a>
+<a name="739"><span class="lineNum"> 739 </span> :<span class="lineCov"> 28 : if (*new_data_size &lt; 0) {</span></a>
+<a name="740"><span class="lineNum"> 740 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Invalid new ESL (new data content) size\n&quot;);</span></a>
+<a name="741"><span class="lineNum"> 741 </span> :<span class="lineNoCov"> 0 : rc = OPAL_PARAMETER;</span></a>
+<a name="742"><span class="lineNum"> 742 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="743"><span class="lineNum"> 743 </span> : : }</a>
+<a name="744"><span class="lineNum"> 744 </span> :<span class="lineCov"> 28 : *newesl = zalloc(*new_data_size);</span></a>
+<a name="745"><span class="lineNum"> 745 </span> :<span class="lineCov"> 28 : if (!(*newesl)) {</span></a>
+<a name="746"><span class="lineNum"> 746 </span> :<span class="lineNoCov"> 0 : rc = OPAL_NO_MEM;</span></a>
+<a name="747"><span class="lineNum"> 747 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="748"><span class="lineNum"> 748 </span> : : }</a>
+<a name="749"><span class="lineNum"> 749 </span> :<span class="lineCov"> 28 : memcpy(*newesl, update-&gt;data + auth_buffer_size, *new_data_size);</span></a>
+<a name="750"><span class="lineNum"> 750 </span> : : </a>
+<a name="751"><span class="lineNum"> 751 </span> : : /* Validate the new ESL is in right format */</a>
+<a name="752"><span class="lineNum"> 752 </span> :<span class="lineCov"> 28 : rc = validate_esl_list(update-&gt;key, *newesl, *new_data_size);</span></a>
+<a name="753"><span class="lineNum"> 753 </span> :<span class="lineCov"> 28 : if (rc &lt; 0) {</span></a>
+<a name="754"><span class="lineNum"> 754 </span> :<span class="lineCov"> 10 : prlog(PR_ERR, &quot;ESL validation failed for key %s with error %04x\n&quot;,</span></a>
+<a name="755"><span class="lineNum"> 755 </span> : : update-&gt;key, rc);</a>
+<a name="756"><span class="lineNum"> 756 </span> :<span class="lineCov"> 10 : goto out;</span></a>
+<a name="757"><span class="lineNum"> 757 </span> : : }</a>
+<a name="758"><span class="lineNum"> 758 </span> : : </a>
+<a name="759"><span class="lineNum"> 759 </span> :<span class="lineCov"> 18 : if (setup_mode) {</span></a>
+<a name="760"><span class="lineNum"> 760 </span> :<span class="lineCov"> 4 : rc = OPAL_SUCCESS;</span></a>
+<a name="761"><span class="lineNum"> 761 </span> :<span class="lineCov"> 4 : goto out;</span></a>
+<a name="762"><span class="lineNum"> 762 </span> : : }</a>
<a name="763"><span class="lineNum"> 763 </span> : : </a>
-<a name="764"><span class="lineNum"> 764 </span> :<span class="lineCov"> 24 : return rc;</span></a>
-<a name="765"><span class="lineNum"> 765 </span> : : }</a>
+<a name="764"><span class="lineNum"> 764 </span> : : /* Prepare the data to be verified */</a>
+<a name="765"><span class="lineNum"> 765 </span> :<span class="lineCov"> 14 : hash = get_hash_to_verify(update-&gt;key, *newesl, *new_data_size,</span></a>
+<a name="766"><span class="lineNum"> 766 </span> : : timestamp);</a>
+<a name="767"><span class="lineNum"> 767 </span> :<span class="lineCov"> 14 : if (!hash) {</span></a>
+<a name="768"><span class="lineNum"> 768 </span> :<span class="lineNoCov"> 0 : rc = OPAL_INTERNAL_ERROR;</span></a>
+<a name="769"><span class="lineNum"> 769 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="770"><span class="lineNum"> 770 </span> : : }</a>
+<a name="771"><span class="lineNum"> 771 </span> : : </a>
+<a name="772"><span class="lineNum"> 772 </span> : : /* Get the authority to verify the signature */</a>
+<a name="773"><span class="lineNum"> 773 </span> :<span class="lineCov"> 14 : get_key_authority(key_authority, update-&gt;key);</span></a>
+<a name="774"><span class="lineNum"> 774 </span> : : </a>
+<a name="775"><span class="lineNum"> 775 </span> : : /*</a>
+<a name="776"><span class="lineNum"> 776 </span> : : * Try for all the authorities that are allowed to sign.</a>
+<a name="777"><span class="lineNum"> 777 </span> : : * For eg. db/dbx can be signed by both PK or KEK</a>
+<a name="778"><span class="lineNum"> 778 </span> : : */</a>
+<a name="779"><span class="lineNum"> 779 </span> :<span class="lineCov"> 27 : for (i = 0; key_authority[i] != NULL; i++) {</span></a>
+<a name="780"><span class="lineNum"> 780 </span> :<span class="lineCov"> 21 : prlog(PR_DEBUG, &quot;key is %s\n&quot;, update-&gt;key);</span></a>
+<a name="781"><span class="lineNum"> 781 </span> :<span class="lineCov"> 21 : prlog(PR_DEBUG, &quot;key authority is %s\n&quot;, key_authority[i]);</span></a>
+<a name="782"><span class="lineNum"> 782 </span> :<span class="lineCov"> 21 : avar = find_secvar(key_authority[i],</span></a>
+<a name="783"><span class="lineNum"> 783 </span> :<span class="lineCov"> 21 : strlen(key_authority[i]) + 1,</span></a>
+<a name="784"><span class="lineNum"> 784 </span> : : bank);</a>
+<a name="785"><span class="lineNum"> 785 </span> :<span class="lineCov"> 21 : if (!avar || !avar-&gt;data_size)</span></a>
+<a name="786"><span class="lineNum"> 786 </span> :<span class="lineCov"> 3 : continue;</span></a>
+<a name="787"><span class="lineNum"> 787 </span> : : </a>
+<a name="788"><span class="lineNum"> 788 </span> : : /* Verify the signature. sha256 is 32 bytes long. */</a>
+<a name="789"><span class="lineNum"> 789 </span> :<span class="lineCov"> 18 : rc = verify_signature(auth, hash, 32, avar);</span></a>
+<a name="790"><span class="lineNum"> 790 </span> : : </a>
+<a name="791"><span class="lineNum"> 791 </span> : : /* Break if signature verification is successful */</a>
+<a name="792"><span class="lineNum"> 792 </span> :<span class="lineCov"> 18 : if (rc == OPAL_SUCCESS) {</span></a>
+<a name="793"><span class="lineNum"> 793 </span> :<span class="lineCov"> 8 : prlog(PR_INFO, &quot;Key %s successfully verified by authority %s\n&quot;, update-&gt;key, key_authority[i]);</span></a>
+<a name="794"><span class="lineNum"> 794 </span> :<span class="lineCov"> 8 : break;</span></a>
+<a name="795"><span class="lineNum"> 795 </span> : : }</a>
+<a name="796"><span class="lineNum"> 796 </span> : : }</a>
+<a name="797"><span class="lineNum"> 797 </span> : : </a>
+<a name="798"><span class="lineNum"> 798 </span> :<span class="lineCov"> 6 : out:</span></a>
+<a name="799"><span class="lineNum"> 799 </span> :<span class="lineCov"> 32 : free(auth_buffer);</span></a>
+<a name="800"><span class="lineNum"> 800 </span> :<span class="lineCov"> 32 : free(hash);</span></a>
+<a name="801"><span class="lineNum"> 801 </span> : : </a>
+<a name="802"><span class="lineNum"> 802 </span> :<span class="lineCov"> 32 : return rc;</span></a>
+<a name="803"><span class="lineNum"> 803 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/libstb/secvar/backend/edk2-compat.c.func-sort-c.html b/coverage-report/libstb/secvar/backend/edk2-compat.c.func-sort-c.html
index c3a3c44..e671583 100644
--- a/coverage-report/libstb/secvar/backend/edk2-compat.c.func-sort-c.html
+++ b/coverage-report/libstb/secvar/backend/edk2-compat.c.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">100</td>
- <td class="headerCovTableEntry">119</td>
- <td class="headerCovTableEntryMed">84.0 %</td>
+ <td class="headerCovTableEntry">101</td>
+ <td class="headerCovTableEntry">120</td>
+ <td class="headerCovTableEntryMed">84.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@@ -73,16 +73,16 @@
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat.c.gcov.html#244">edk2_compat_post_process</a></td>
- <td class="coverFnHi">5</td>
+ <td class="coverFn"><a href="edk2-compat.c.gcov.html#245">edk2_compat_post_process</a></td>
+ <td class="coverFnHi">6</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat.c.gcov.html#97">edk2_compat_process</a></td>
- <td class="coverFnHi">21</td>
+ <td class="coverFn"><a href="edk2-compat.c.gcov.html#98">edk2_compat_process</a></td>
+ <td class="coverFnHi">29</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat.c.gcov.html#268">edk2_compat_validate</a></td>
- <td class="coverFnHi">26</td>
+ <td class="coverFn"><a href="edk2-compat.c.gcov.html#269">edk2_compat_validate</a></td>
+ <td class="coverFnHi">34</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libstb/secvar/backend/edk2-compat.c.func.html b/coverage-report/libstb/secvar/backend/edk2-compat.c.func.html
index c173ee6..497c21e 100644
--- a/coverage-report/libstb/secvar/backend/edk2-compat.c.func.html
+++ b/coverage-report/libstb/secvar/backend/edk2-compat.c.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">100</td>
- <td class="headerCovTableEntry">119</td>
- <td class="headerCovTableEntryMed">84.0 %</td>
+ <td class="headerCovTableEntry">101</td>
+ <td class="headerCovTableEntry">120</td>
+ <td class="headerCovTableEntryMed">84.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@@ -69,20 +69,20 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="edk2-compat.c.func-sort-c.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat.c.gcov.html#244">edk2_compat_post_process</a></td>
- <td class="coverFnHi">5</td>
+ <td class="coverFn"><a href="edk2-compat.c.gcov.html#245">edk2_compat_post_process</a></td>
+ <td class="coverFnHi">6</td>
</tr>
<tr>
<td class="coverFn"><a href="edk2-compat.c.gcov.html#27">edk2_compat_pre_process</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat.c.gcov.html#97">edk2_compat_process</a></td>
- <td class="coverFnHi">21</td>
+ <td class="coverFn"><a href="edk2-compat.c.gcov.html#98">edk2_compat_process</a></td>
+ <td class="coverFnHi">29</td>
</tr>
<tr>
- <td class="coverFn"><a href="edk2-compat.c.gcov.html#268">edk2_compat_validate</a></td>
- <td class="coverFnHi">26</td>
+ <td class="coverFn"><a href="edk2-compat.c.gcov.html#269">edk2_compat_validate</a></td>
+ <td class="coverFnHi">34</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libstb/secvar/backend/edk2-compat.c.gcov.html b/coverage-report/libstb/secvar/backend/edk2-compat.c.gcov.html
index 30c10d8..78388f5 100644
--- a/coverage-report/libstb/secvar/backend/edk2-compat.c.gcov.html
+++ b/coverage-report/libstb/secvar/backend/edk2-compat.c.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">100</td>
- <td class="headerCovTableEntry">119</td>
- <td class="headerCovTableEntryMed">84.0 %</td>
+ <td class="headerCovTableEntry">101</td>
+ <td class="headerCovTableEntry">120</td>
+ <td class="headerCovTableEntryMed">84.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@@ -160,211 +160,212 @@
<a name="89"><span class="lineNum"> 89 </span> :<span class="lineCov"> 1 : memcpy(tsvar-&gt;key, &quot;TS&quot;, 3);</span></a>
<a name="90"><span class="lineNum"> 90 </span> :<span class="lineCov"> 1 : tsvar-&gt;key_len = 3;</span></a>
<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 1 : tsvar-&gt;data_size = sizeof(struct efi_time) * 4;</span></a>
-<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 1 : memset(tsvar-&gt;data, 0, tsvar-&gt;data_size);</span></a>
-<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 1 : list_add_tail(variable_bank, &amp;tsvar-&gt;link);</span></a>
-<a name="94"><span class="lineNum"> 94 </span> : : }</a>
-<a name="95"><span class="lineNum"> 95 </span> : : </a>
-<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 1 : return OPAL_SUCCESS;</span></a>
-<a name="97"><span class="lineNum"> 97 </span> : : };</a>
-<a name="98"><span class="lineNum"> 98 </span> : : </a>
-<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 21 : static int edk2_compat_process(struct list_head *variable_bank,</span></a>
-<a name="100"><span class="lineNum"> 100 </span> : : struct list_head *update_bank)</a>
-<a name="101"><span class="lineNum"> 101 </span> : : {</a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 21 : struct secvar *var = NULL;</span></a>
-<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 21 : struct secvar *tsvar = NULL;</span></a>
-<a name="104"><span class="lineNum"> 104 </span> : : struct efi_time timestamp;</a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 21 : char *newesl = NULL;</span></a>
-<a name="106"><span class="lineNum"> 106 </span> : : int neweslsize;</a>
-<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 21 : int rc = 0;</span></a>
-<a name="108"><span class="lineNum"> 108 </span> : : </a>
-<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 21 : prlog(PR_INFO, &quot;Setup mode = %d\n&quot;, setup_mode);</span></a>
-<a name="110"><span class="lineNum"> 110 </span> : : </a>
-<a name="111"><span class="lineNum"> 111 </span> : : /* Check HW-KEY-HASH */</a>
-<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 21 : if (!setup_mode) {</span></a>
-<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 14 : rc = verify_hw_key_hash();</span></a>
-<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 14 : if (rc != OPAL_SUCCESS) {</span></a>
-<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 1 : prlog(PR_ERR, &quot;Hardware key hash verification mismatch. Keystore and update queue is reset.\n&quot;);</span></a>
-<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 1 : rc = reset_keystore(variable_bank);</span></a>
-<a name="117"><span class="lineNum"> 117 </span> :<span class="lineCov"> 1 : if (rc)</span></a>
-<a name="118"><span class="lineNum"> 118 </span> :<span class="lineNoCov"> 0 : goto cleanup;</span></a>
-<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 1 : setup_mode = true;</span></a>
-<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 1 : goto cleanup;</span></a>
-<a name="121"><span class="lineNum"> 121 </span> : : }</a>
-<a name="122"><span class="lineNum"> 122 </span> : : }</a>
-<a name="123"><span class="lineNum"> 123 </span> : : </a>
-<a name="124"><span class="lineNum"> 124 </span> : : /* Return early if we have no updates to process */</a>
-<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 20 : if (list_empty(update_bank)) {</span></a>
-<a name="126"><span class="lineNum"> 126 </span> :<span class="lineNoCov"> 0 : return OPAL_EMPTY;</span></a>
-<a name="127"><span class="lineNum"> 127 </span> : : }</a>
-<a name="128"><span class="lineNum"> 128 </span> : : </a>
-<a name="129"><span class="lineNum"> 129 </span> : : /*</a>
-<a name="130"><span class="lineNum"> 130 </span> : : * Make a working copy of variable bank that is updated</a>
-<a name="131"><span class="lineNum"> 131 </span> : : * during process</a>
-<a name="132"><span class="lineNum"> 132 </span> : : */</a>
-<a name="133"><span class="lineNum"> 133 </span> :<span class="lineCov"> 20 : list_head_init(&amp;staging_bank);</span></a>
-<a name="134"><span class="lineNum"> 134 </span> :<span class="lineCov"> 20 : copy_bank_list(&amp;staging_bank, variable_bank);</span></a>
-<a name="135"><span class="lineNum"> 135 </span> : : </a>
-<a name="136"><span class="lineNum"> 136 </span> : : /*</a>
-<a name="137"><span class="lineNum"> 137 </span> : : * Loop through each command in the update bank.</a>
-<a name="138"><span class="lineNum"> 138 </span> : : * If any command fails, it just loops out of the update bank.</a>
-<a name="139"><span class="lineNum"> 139 </span> : : * It should also clear the update bank.</a>
-<a name="140"><span class="lineNum"> 140 </span> : : */</a>
-<a name="141"><span class="lineNum"> 141 </span> : : </a>
-<a name="142"><span class="lineNum"> 142 </span> : : /* Read the TS variable first time and then keep updating it in-memory */</a>
-<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 20 : tsvar = find_secvar(&quot;TS&quot;, 3, &amp;staging_bank);</span></a>
-<a name="144"><span class="lineNum"> 144 </span> : : </a>
-<a name="145"><span class="lineNum"> 145 </span> : : /*</a>
-<a name="146"><span class="lineNum"> 146 </span> : : * We cannot find timestamp variable, did someone tamper it ?, return</a>
-<a name="147"><span class="lineNum"> 147 </span> : : * OPAL_PERMISSION</a>
-<a name="148"><span class="lineNum"> 148 </span> : : */</a>
-<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 20 : if (!tsvar)</span></a>
-<a name="150"><span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : return OPAL_PERMISSION;</span></a>
-<a name="151"><span class="lineNum"> 151 </span> : : </a>
-<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 32 : list_for_each(update_bank, var, link) {</span></a>
-<a name="153"><span class="lineNum"> 153 </span> : : </a>
-<a name="154"><span class="lineNum"> 154 </span> : : /*</a>
-<a name="155"><span class="lineNum"> 155 </span> : : * Submitted data is auth_2 descriptor + new ESL data</a>
-<a name="156"><span class="lineNum"> 156 </span> : : * Extract the auth_2 2 descriptor</a>
-<a name="157"><span class="lineNum"> 157 </span> : : */</a>
-<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 24 : prlog(PR_INFO, &quot;Update for %s\n&quot;, var-&gt;key);</span></a>
-<a name="159"><span class="lineNum"> 159 </span> : : </a>
-<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 24 : rc = process_update(var, &amp;newesl,</span></a>
-<a name="161"><span class="lineNum"> 161 </span> : : &amp;neweslsize, &amp;timestamp,</a>
-<a name="162"><span class="lineNum"> 162 </span> : : &amp;staging_bank,</a>
-<a name="163"><span class="lineNum"> 163 </span> : : tsvar-&gt;data);</a>
-<a name="164"><span class="lineNum"> 164 </span> :<span class="lineCov"> 24 : if (rc) {</span></a>
-<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 12 : prlog(PR_ERR, &quot;Update processing failed with rc %04x\n&quot;, rc);</span></a>
-<a name="166"><span class="lineNum"> 166 </span> :<span class="lineCov"> 12 : break;</span></a>
-<a name="167"><span class="lineNum"> 167 </span> : : }</a>
-<a name="168"><span class="lineNum"> 168 </span> : : </a>
-<a name="169"><span class="lineNum"> 169 </span> : : /*</a>
-<a name="170"><span class="lineNum"> 170 </span> : : * If reached here means, signature is verified so update the</a>
-<a name="171"><span class="lineNum"> 171 </span> : : * value in the variable bank</a>
-<a name="172"><span class="lineNum"> 172 </span> : : */</a>
-<a name="173"><span class="lineNum"> 173 </span> :<span class="lineCov"> 12 : rc = update_variable_in_bank(var,</span></a>
-<a name="174"><span class="lineNum"> 174 </span> : : newesl,</a>
-<a name="175"><span class="lineNum"> 175 </span> : : neweslsize,</a>
-<a name="176"><span class="lineNum"> 176 </span> : : &amp;staging_bank);</a>
-<a name="177"><span class="lineNum"> 177 </span> :<span class="lineCov"> 12 : if (rc) {</span></a>
-<a name="178"><span class="lineNum"> 178 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Updating the variable data failed %04x\n&quot;, rc);</span></a>
-<a name="179"><span class="lineNum"> 179 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="180"><span class="lineNum"> 180 </span> : : }</a>
-<a name="181"><span class="lineNum"> 181 </span> : : </a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 12 : free(newesl);</span></a>
-<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 12 : newesl = NULL;</span></a>
-<a name="184"><span class="lineNum"> 184 </span> : : /* Update the TS variable with the new timestamp */</a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 12 : rc = update_timestamp(var-&gt;key,</span></a>
-<a name="186"><span class="lineNum"> 186 </span> : : &amp;timestamp,</a>
-<a name="187"><span class="lineNum"> 187 </span> : : tsvar-&gt;data);</a>
-<a name="188"><span class="lineNum"> 188 </span> :<span class="lineCov"> 12 : if (rc) {</span></a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : prlog (PR_ERR, &quot;Variable updated, but timestamp updated failed %04x\n&quot;, rc);</span></a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="191"><span class="lineNum"> 191 </span> : : }</a>
-<a name="192"><span class="lineNum"> 192 </span> : : </a>
-<a name="193"><span class="lineNum"> 193 </span> : : /*</a>
-<a name="194"><span class="lineNum"> 194 </span> : : * If the PK is updated, update the secure boot state of the</a>
-<a name="195"><span class="lineNum"> 195 </span> : : * system at the end of processing</a>
-<a name="196"><span class="lineNum"> 196 </span> : : */</a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 12 : if (key_equals(var-&gt;key, &quot;PK&quot;)) {</span></a>
-<a name="198"><span class="lineNum"> 198 </span> : : /*</a>
-<a name="199"><span class="lineNum"> 199 </span> : : * PK is tied to a particular firmware image by mapping it with</a>
-<a name="200"><span class="lineNum"> 200 </span> : : * hw-key-hash of that firmware. When PK is updated, hw-key-hash</a>
-<a name="201"><span class="lineNum"> 201 </span> : : * is updated. And when PK is deleted, delete hw-key-hash as well</a>
-<a name="202"><span class="lineNum"> 202 </span> : : */</a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 5 : if(neweslsize == 0) {</span></a>
-<a name="204"><span class="lineNum"> 204 </span> :<span class="lineCov"> 2 : setup_mode = true;</span></a>
-<a name="205"><span class="lineNum"> 205 </span> :<span class="lineCov"> 2 : delete_hw_key_hash(&amp;staging_bank);</span></a>
-<a name="206"><span class="lineNum"> 206 </span> : : } else {</a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 3 : setup_mode = false;</span></a>
-<a name="208"><span class="lineNum"> 208 </span> :<span class="lineCov"> 3 : add_hw_key_hash(&amp;staging_bank);</span></a>
-<a name="209"><span class="lineNum"> 209 </span> : : }</a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 5 : prlog(PR_DEBUG, &quot;setup mode is %d\n&quot;, setup_mode);</span></a>
-<a name="211"><span class="lineNum"> 211 </span> : : }</a>
-<a name="212"><span class="lineNum"> 212 </span> : : }</a>
-<a name="213"><span class="lineNum"> 213 </span> : : </a>
-<a name="214"><span class="lineNum"> 214 </span> :<span class="lineCov"> 20 : if (rc == 0) {</span></a>
-<a name="215"><span class="lineNum"> 215 </span> : : /* Update the variable bank with updated working copy */</a>
-<a name="216"><span class="lineNum"> 216 </span> :<span class="lineCov"> 8 : clear_bank_list(variable_bank);</span></a>
-<a name="217"><span class="lineNum"> 217 </span> :<span class="lineCov"> 8 : copy_bank_list(variable_bank, &amp;staging_bank);</span></a>
-<a name="218"><span class="lineNum"> 218 </span> : : }</a>
-<a name="219"><span class="lineNum"> 219 </span> : : </a>
-<a name="220"><span class="lineNum"> 220 </span> :<span class="lineCov"> 20 : free(newesl);</span></a>
-<a name="221"><span class="lineNum"> 221 </span> :<span class="lineCov"> 20 : clear_bank_list(&amp;staging_bank);</span></a>
-<a name="222"><span class="lineNum"> 222 </span> : : </a>
-<a name="223"><span class="lineNum"> 223 </span> : : /* Set the global variable setup_mode as per final contents in variable_bank */</a>
-<a name="224"><span class="lineNum"> 224 </span> :<span class="lineCov"> 20 : var = find_secvar(&quot;PK&quot;, 3, variable_bank);</span></a>
-<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 20 : if (!var) {</span></a>
-<a name="226"><span class="lineNum"> 226 </span> : : /* This should not happen */</a>
-<a name="227"><span class="lineNum"> 227 </span> :<span class="lineNoCov"> 0 : rc = OPAL_INTERNAL_ERROR;</span></a>
-<a name="228"><span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : goto cleanup;</span></a>
-<a name="229"><span class="lineNum"> 229 </span> : : }</a>
-<a name="230"><span class="lineNum"> 230 </span> : : </a>
-<a name="231"><span class="lineNum"> 231 </span> :<span class="lineCov"> 20 : if (var-&gt;data_size == 0)</span></a>
-<a name="232"><span class="lineNum"> 232 </span> :<span class="lineCov"> 7 : setup_mode = true;</span></a>
-<a name="233"><span class="lineNum"> 233 </span> : : else</a>
-<a name="234"><span class="lineNum"> 234 </span> :<span class="lineCov"> 13 : setup_mode = false;</span></a>
-<a name="235"><span class="lineNum"> 235 </span> : : </a>
-<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 21 : cleanup:</span></a>
-<a name="237"><span class="lineNum"> 237 </span> : : /*</a>
-<a name="238"><span class="lineNum"> 238 </span> : : * For any failure in processing update queue, we clear the update bank</a>
-<a name="239"><span class="lineNum"> 239 </span> : : * and return failure</a>
-<a name="240"><span class="lineNum"> 240 </span> : : */</a>
-<a name="241"><span class="lineNum"> 241 </span> :<span class="lineCov"> 21 : clear_bank_list(update_bank);</span></a>
-<a name="242"><span class="lineNum"> 242 </span> : : </a>
-<a name="243"><span class="lineNum"> 243 </span> :<span class="lineCov"> 21 : return rc;</span></a>
-<a name="244"><span class="lineNum"> 244 </span> : : }</a>
-<a name="245"><span class="lineNum"> 245 </span> : : </a>
-<a name="246"><span class="lineNum"> 246 </span> :<span class="lineCov"> 5 : static int edk2_compat_post_process(struct list_head *variable_bank,</span></a>
-<a name="247"><span class="lineNum"> 247 </span> : : struct list_head *update_bank __unused)</a>
-<a name="248"><span class="lineNum"> 248 </span> : : {</a>
-<a name="249"><span class="lineNum"> 249 </span> : : struct secvar *hwvar;</a>
-<a name="250"><span class="lineNum"> 250 </span> :<span class="lineCov"> 5 : if (!setup_mode) {</span></a>
-<a name="251"><span class="lineNum"> 251 </span> :<span class="lineCov"> 2 : secvar_set_secure_mode();</span></a>
-<a name="252"><span class="lineNum"> 252 </span> :<span class="lineCov"> 2 : prlog(PR_INFO, &quot;Enforcing OS secure mode\n&quot;);</span></a>
-<a name="253"><span class="lineNum"> 253 </span> : : /*</a>
-<a name="254"><span class="lineNum"> 254 </span> : : * HW KEY HASH is no more needed after this point. It is already</a>
-<a name="255"><span class="lineNum"> 255 </span> : : * visible to userspace via device-tree, so exposing via sysfs is</a>
-<a name="256"><span class="lineNum"> 256 </span> : : * just a duplication. Remove it from in-memory copy.</a>
-<a name="257"><span class="lineNum"> 257 </span> : : */</a>
-<a name="258"><span class="lineNum"> 258 </span> :<span class="lineCov"> 2 : hwvar = find_secvar(&quot;HWKH&quot;, 5, variable_bank);</span></a>
-<a name="259"><span class="lineNum"> 259 </span> :<span class="lineCov"> 2 : if (!hwvar) {</span></a>
-<a name="260"><span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;cannot find hw-key-hash, should not happen\n&quot;);</span></a>
-<a name="261"><span class="lineNum"> 261 </span> :<span class="lineNoCov"> 0 : return OPAL_INTERNAL_ERROR;</span></a>
-<a name="262"><span class="lineNum"> 262 </span> : : }</a>
-<a name="263"><span class="lineNum"> 263 </span> :<span class="lineCov"> 2 : list_del(&amp;hwvar-&gt;link);</span></a>
-<a name="264"><span class="lineNum"> 264 </span> :<span class="lineCov"> 2 : dealloc_secvar(hwvar);</span></a>
-<a name="265"><span class="lineNum"> 265 </span> : : }</a>
-<a name="266"><span class="lineNum"> 266 </span> : : </a>
-<a name="267"><span class="lineNum"> 267 </span> :<span class="lineCov"> 5 : return OPAL_SUCCESS;</span></a>
-<a name="268"><span class="lineNum"> 268 </span> : : }</a>
-<a name="269"><span class="lineNum"> 269 </span> : : </a>
-<a name="270"><span class="lineNum"> 270 </span> :<span class="lineCov"> 26 : static int edk2_compat_validate(struct secvar *var)</span></a>
-<a name="271"><span class="lineNum"> 271 </span> : : {</a>
-<a name="272"><span class="lineNum"> 272 </span> : : </a>
-<a name="273"><span class="lineNum"> 273 </span> : : /*</a>
-<a name="274"><span class="lineNum"> 274 </span> : : * Checks if the update is for supported</a>
-<a name="275"><span class="lineNum"> 275 </span> : : * Non-volatile secure variables</a>
-<a name="276"><span class="lineNum"> 276 </span> : : */</a>
-<a name="277"><span class="lineNum"> 277 </span> :<span class="lineCov"> 26 : if (!key_equals(var-&gt;key, &quot;PK&quot;)</span></a>
-<a name="278"><span class="lineNum"> 278 </span> :<span class="lineCov"> 19 : &amp;&amp; !key_equals(var-&gt;key, &quot;KEK&quot;)</span></a>
-<a name="279"><span class="lineNum"> 279 </span> :<span class="lineCov"> 13 : &amp;&amp; !key_equals(var-&gt;key, &quot;db&quot;)</span></a>
-<a name="280"><span class="lineNum"> 280 </span> :<span class="lineCov"> 6 : &amp;&amp; !key_equals(var-&gt;key, &quot;dbx&quot;))</span></a>
-<a name="281"><span class="lineNum"> 281 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
-<a name="282"><span class="lineNum"> 282 </span> : : </a>
-<a name="283"><span class="lineNum"> 283 </span> : : /* Check that signature type is PKCS7 */</a>
-<a name="284"><span class="lineNum"> 284 </span> :<span class="lineCov"> 26 : if (!is_pkcs7_sig_format(var-&gt;data))</span></a>
-<a name="285"><span class="lineNum"> 285 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
-<a name="286"><span class="lineNum"> 286 </span> : : </a>
-<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 26 : return OPAL_SUCCESS;</span></a>
-<a name="288"><span class="lineNum"> 288 </span> : : };</a>
-<a name="289"><span class="lineNum"> 289 </span> : : </a>
-<a name="290"><span class="lineNum"> 290 </span> : : struct secvar_backend_driver edk2_compatible_v1 = {</a>
-<a name="291"><span class="lineNum"> 291 </span> : : .pre_process = edk2_compat_pre_process,</a>
-<a name="292"><span class="lineNum"> 292 </span> : : .process = edk2_compat_process,</a>
-<a name="293"><span class="lineNum"> 293 </span> : : .post_process = edk2_compat_post_process,</a>
-<a name="294"><span class="lineNum"> 294 </span> : : .validate = edk2_compat_validate,</a>
-<a name="295"><span class="lineNum"> 295 </span> : : .compatible = &quot;ibm,edk2-compat-v1&quot;,</a>
-<a name="296"><span class="lineNum"> 296 </span> : : };</a>
+<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 1 : tsvar-&gt;flags = SECVAR_FLAG_PROTECTED;</span></a>
+<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 1 : memset(tsvar-&gt;data, 0, tsvar-&gt;data_size);</span></a>
+<a name="94"><span class="lineNum"> 94 </span> :<span class="lineCov"> 1 : list_add_tail(variable_bank, &amp;tsvar-&gt;link);</span></a>
+<a name="95"><span class="lineNum"> 95 </span> : : }</a>
+<a name="96"><span class="lineNum"> 96 </span> : : </a>
+<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 1 : return OPAL_SUCCESS;</span></a>
+<a name="98"><span class="lineNum"> 98 </span> : : };</a>
+<a name="99"><span class="lineNum"> 99 </span> : : </a>
+<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 29 : static int edk2_compat_process(struct list_head *variable_bank,</span></a>
+<a name="101"><span class="lineNum"> 101 </span> : : struct list_head *update_bank)</a>
+<a name="102"><span class="lineNum"> 102 </span> : : {</a>
+<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 29 : struct secvar *var = NULL;</span></a>
+<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 29 : struct secvar *tsvar = NULL;</span></a>
+<a name="105"><span class="lineNum"> 105 </span> : : struct efi_time timestamp;</a>
+<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 29 : char *newesl = NULL;</span></a>
+<a name="107"><span class="lineNum"> 107 </span> : : int neweslsize;</a>
+<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 29 : int rc = 0;</span></a>
+<a name="109"><span class="lineNum"> 109 </span> : : </a>
+<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 29 : prlog(PR_INFO, &quot;Setup mode = %d\n&quot;, setup_mode);</span></a>
+<a name="111"><span class="lineNum"> 111 </span> : : </a>
+<a name="112"><span class="lineNum"> 112 </span> : : /* Check HW-KEY-HASH */</a>
+<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 29 : if (!setup_mode) {</span></a>
+<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 21 : rc = verify_hw_key_hash();</span></a>
+<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 21 : if (rc != OPAL_SUCCESS) {</span></a>
+<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 1 : prlog(PR_ERR, &quot;Hardware key hash verification mismatch. Keystore and update queue is reset.\n&quot;);</span></a>
+<a name="117"><span class="lineNum"> 117 </span> :<span class="lineCov"> 1 : rc = reset_keystore(variable_bank);</span></a>
+<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 1 : if (rc)</span></a>
+<a name="119"><span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : goto cleanup;</span></a>
+<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 1 : setup_mode = true;</span></a>
+<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 1 : goto cleanup;</span></a>
+<a name="122"><span class="lineNum"> 122 </span> : : }</a>
+<a name="123"><span class="lineNum"> 123 </span> : : }</a>
+<a name="124"><span class="lineNum"> 124 </span> : : </a>
+<a name="125"><span class="lineNum"> 125 </span> : : /* Return early if we have no updates to process */</a>
+<a name="126"><span class="lineNum"> 126 </span> :<span class="lineCov"> 28 : if (list_empty(update_bank)) {</span></a>
+<a name="127"><span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : return OPAL_EMPTY;</span></a>
+<a name="128"><span class="lineNum"> 128 </span> : : }</a>
+<a name="129"><span class="lineNum"> 129 </span> : : </a>
+<a name="130"><span class="lineNum"> 130 </span> : : /*</a>
+<a name="131"><span class="lineNum"> 131 </span> : : * Make a working copy of variable bank that is updated</a>
+<a name="132"><span class="lineNum"> 132 </span> : : * during process</a>
+<a name="133"><span class="lineNum"> 133 </span> : : */</a>
+<a name="134"><span class="lineNum"> 134 </span> :<span class="lineCov"> 28 : list_head_init(&amp;staging_bank);</span></a>
+<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 28 : copy_bank_list(&amp;staging_bank, variable_bank);</span></a>
+<a name="136"><span class="lineNum"> 136 </span> : : </a>
+<a name="137"><span class="lineNum"> 137 </span> : : /*</a>
+<a name="138"><span class="lineNum"> 138 </span> : : * Loop through each command in the update bank.</a>
+<a name="139"><span class="lineNum"> 139 </span> : : * If any command fails, it just loops out of the update bank.</a>
+<a name="140"><span class="lineNum"> 140 </span> : : * It should also clear the update bank.</a>
+<a name="141"><span class="lineNum"> 141 </span> : : */</a>
+<a name="142"><span class="lineNum"> 142 </span> : : </a>
+<a name="143"><span class="lineNum"> 143 </span> : : /* Read the TS variable first time and then keep updating it in-memory */</a>
+<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 28 : tsvar = find_secvar(&quot;TS&quot;, 3, &amp;staging_bank);</span></a>
+<a name="145"><span class="lineNum"> 145 </span> : : </a>
+<a name="146"><span class="lineNum"> 146 </span> : : /*</a>
+<a name="147"><span class="lineNum"> 147 </span> : : * We cannot find timestamp variable, did someone tamper it ?, return</a>
+<a name="148"><span class="lineNum"> 148 </span> : : * OPAL_PERMISSION</a>
+<a name="149"><span class="lineNum"> 149 </span> : : */</a>
+<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 28 : if (!tsvar)</span></a>
+<a name="151"><span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : return OPAL_PERMISSION;</span></a>
+<a name="152"><span class="lineNum"> 152 </span> : : </a>
+<a name="153"><span class="lineNum"> 153 </span> :<span class="lineCov"> 40 : list_for_each(update_bank, var, link) {</span></a>
+<a name="154"><span class="lineNum"> 154 </span> : : </a>
+<a name="155"><span class="lineNum"> 155 </span> : : /*</a>
+<a name="156"><span class="lineNum"> 156 </span> : : * Submitted data is auth_2 descriptor + new ESL data</a>
+<a name="157"><span class="lineNum"> 157 </span> : : * Extract the auth_2 2 descriptor</a>
+<a name="158"><span class="lineNum"> 158 </span> : : */</a>
+<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 32 : prlog(PR_INFO, &quot;Update for %s\n&quot;, var-&gt;key);</span></a>
+<a name="160"><span class="lineNum"> 160 </span> : : </a>
+<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 32 : rc = process_update(var, &amp;newesl,</span></a>
+<a name="162"><span class="lineNum"> 162 </span> : : &amp;neweslsize, &amp;timestamp,</a>
+<a name="163"><span class="lineNum"> 163 </span> : : &amp;staging_bank,</a>
+<a name="164"><span class="lineNum"> 164 </span> : : tsvar-&gt;data);</a>
+<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 32 : if (rc) {</span></a>
+<a name="166"><span class="lineNum"> 166 </span> :<span class="lineCov"> 20 : prlog(PR_ERR, &quot;Update processing failed with rc %04x\n&quot;, rc);</span></a>
+<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 20 : break;</span></a>
+<a name="168"><span class="lineNum"> 168 </span> : : }</a>
+<a name="169"><span class="lineNum"> 169 </span> : : </a>
+<a name="170"><span class="lineNum"> 170 </span> : : /*</a>
+<a name="171"><span class="lineNum"> 171 </span> : : * If reached here means, signature is verified so update the</a>
+<a name="172"><span class="lineNum"> 172 </span> : : * value in the variable bank</a>
+<a name="173"><span class="lineNum"> 173 </span> : : */</a>
+<a name="174"><span class="lineNum"> 174 </span> :<span class="lineCov"> 12 : rc = update_variable_in_bank(var,</span></a>
+<a name="175"><span class="lineNum"> 175 </span> : : newesl,</a>
+<a name="176"><span class="lineNum"> 176 </span> : : neweslsize,</a>
+<a name="177"><span class="lineNum"> 177 </span> : : &amp;staging_bank);</a>
+<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 12 : if (rc) {</span></a>
+<a name="179"><span class="lineNum"> 179 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Updating the variable data failed %04x\n&quot;, rc);</span></a>
+<a name="180"><span class="lineNum"> 180 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="181"><span class="lineNum"> 181 </span> : : }</a>
+<a name="182"><span class="lineNum"> 182 </span> : : </a>
+<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 12 : free(newesl);</span></a>
+<a name="184"><span class="lineNum"> 184 </span> :<span class="lineCov"> 12 : newesl = NULL;</span></a>
+<a name="185"><span class="lineNum"> 185 </span> : : /* Update the TS variable with the new timestamp */</a>
+<a name="186"><span class="lineNum"> 186 </span> :<span class="lineCov"> 12 : rc = update_timestamp(var-&gt;key,</span></a>
+<a name="187"><span class="lineNum"> 187 </span> : : &amp;timestamp,</a>
+<a name="188"><span class="lineNum"> 188 </span> : : tsvar-&gt;data);</a>
+<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 12 : if (rc) {</span></a>
+<a name="190"><span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : prlog (PR_ERR, &quot;Variable updated, but timestamp updated failed %04x\n&quot;, rc);</span></a>
+<a name="191"><span class="lineNum"> 191 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="192"><span class="lineNum"> 192 </span> : : }</a>
+<a name="193"><span class="lineNum"> 193 </span> : : </a>
+<a name="194"><span class="lineNum"> 194 </span> : : /*</a>
+<a name="195"><span class="lineNum"> 195 </span> : : * If the PK is updated, update the secure boot state of the</a>
+<a name="196"><span class="lineNum"> 196 </span> : : * system at the end of processing</a>
+<a name="197"><span class="lineNum"> 197 </span> : : */</a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 12 : if (key_equals(var-&gt;key, &quot;PK&quot;)) {</span></a>
+<a name="199"><span class="lineNum"> 199 </span> : : /*</a>
+<a name="200"><span class="lineNum"> 200 </span> : : * PK is tied to a particular firmware image by mapping it with</a>
+<a name="201"><span class="lineNum"> 201 </span> : : * hw-key-hash of that firmware. When PK is updated, hw-key-hash</a>
+<a name="202"><span class="lineNum"> 202 </span> : : * is updated. And when PK is deleted, delete hw-key-hash as well</a>
+<a name="203"><span class="lineNum"> 203 </span> : : */</a>
+<a name="204"><span class="lineNum"> 204 </span> :<span class="lineCov"> 5 : if(neweslsize == 0) {</span></a>
+<a name="205"><span class="lineNum"> 205 </span> :<span class="lineCov"> 2 : setup_mode = true;</span></a>
+<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 2 : delete_hw_key_hash(&amp;staging_bank);</span></a>
+<a name="207"><span class="lineNum"> 207 </span> : : } else {</a>
+<a name="208"><span class="lineNum"> 208 </span> :<span class="lineCov"> 3 : setup_mode = false;</span></a>
+<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 3 : add_hw_key_hash(&amp;staging_bank);</span></a>
+<a name="210"><span class="lineNum"> 210 </span> : : }</a>
+<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 5 : prlog(PR_DEBUG, &quot;setup mode is %d\n&quot;, setup_mode);</span></a>
+<a name="212"><span class="lineNum"> 212 </span> : : }</a>
+<a name="213"><span class="lineNum"> 213 </span> : : }</a>
+<a name="214"><span class="lineNum"> 214 </span> : : </a>
+<a name="215"><span class="lineNum"> 215 </span> :<span class="lineCov"> 28 : if (rc == 0) {</span></a>
+<a name="216"><span class="lineNum"> 216 </span> : : /* Update the variable bank with updated working copy */</a>
+<a name="217"><span class="lineNum"> 217 </span> :<span class="lineCov"> 8 : clear_bank_list(variable_bank);</span></a>
+<a name="218"><span class="lineNum"> 218 </span> :<span class="lineCov"> 8 : copy_bank_list(variable_bank, &amp;staging_bank);</span></a>
+<a name="219"><span class="lineNum"> 219 </span> : : }</a>
+<a name="220"><span class="lineNum"> 220 </span> : : </a>
+<a name="221"><span class="lineNum"> 221 </span> :<span class="lineCov"> 28 : free(newesl);</span></a>
+<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 28 : clear_bank_list(&amp;staging_bank);</span></a>
+<a name="223"><span class="lineNum"> 223 </span> : : </a>
+<a name="224"><span class="lineNum"> 224 </span> : : /* Set the global variable setup_mode as per final contents in variable_bank */</a>
+<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 28 : var = find_secvar(&quot;PK&quot;, 3, variable_bank);</span></a>
+<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 28 : if (!var) {</span></a>
+<a name="227"><span class="lineNum"> 227 </span> : : /* This should not happen */</a>
+<a name="228"><span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : rc = OPAL_INTERNAL_ERROR;</span></a>
+<a name="229"><span class="lineNum"> 229 </span> :<span class="lineNoCov"> 0 : goto cleanup;</span></a>
+<a name="230"><span class="lineNum"> 230 </span> : : }</a>
+<a name="231"><span class="lineNum"> 231 </span> : : </a>
+<a name="232"><span class="lineNum"> 232 </span> :<span class="lineCov"> 28 : if (var-&gt;data_size == 0)</span></a>
+<a name="233"><span class="lineNum"> 233 </span> :<span class="lineCov"> 8 : setup_mode = true;</span></a>
+<a name="234"><span class="lineNum"> 234 </span> : : else</a>
+<a name="235"><span class="lineNum"> 235 </span> :<span class="lineCov"> 20 : setup_mode = false;</span></a>
+<a name="236"><span class="lineNum"> 236 </span> : : </a>
+<a name="237"><span class="lineNum"> 237 </span> :<span class="lineCov"> 29 : cleanup:</span></a>
+<a name="238"><span class="lineNum"> 238 </span> : : /*</a>
+<a name="239"><span class="lineNum"> 239 </span> : : * For any failure in processing update queue, we clear the update bank</a>
+<a name="240"><span class="lineNum"> 240 </span> : : * and return failure</a>
+<a name="241"><span class="lineNum"> 241 </span> : : */</a>
+<a name="242"><span class="lineNum"> 242 </span> :<span class="lineCov"> 29 : clear_bank_list(update_bank);</span></a>
+<a name="243"><span class="lineNum"> 243 </span> : : </a>
+<a name="244"><span class="lineNum"> 244 </span> :<span class="lineCov"> 29 : return rc;</span></a>
+<a name="245"><span class="lineNum"> 245 </span> : : }</a>
+<a name="246"><span class="lineNum"> 246 </span> : : </a>
+<a name="247"><span class="lineNum"> 247 </span> :<span class="lineCov"> 6 : static int edk2_compat_post_process(struct list_head *variable_bank,</span></a>
+<a name="248"><span class="lineNum"> 248 </span> : : struct list_head *update_bank __unused)</a>
+<a name="249"><span class="lineNum"> 249 </span> : : {</a>
+<a name="250"><span class="lineNum"> 250 </span> : : struct secvar *hwvar;</a>
+<a name="251"><span class="lineNum"> 251 </span> :<span class="lineCov"> 6 : if (!setup_mode) {</span></a>
+<a name="252"><span class="lineNum"> 252 </span> :<span class="lineCov"> 2 : secvar_set_secure_mode();</span></a>
+<a name="253"><span class="lineNum"> 253 </span> :<span class="lineCov"> 2 : prlog(PR_INFO, &quot;Enforcing OS secure mode\n&quot;);</span></a>
+<a name="254"><span class="lineNum"> 254 </span> : : /*</a>
+<a name="255"><span class="lineNum"> 255 </span> : : * HW KEY HASH is no more needed after this point. It is already</a>
+<a name="256"><span class="lineNum"> 256 </span> : : * visible to userspace via device-tree, so exposing via sysfs is</a>
+<a name="257"><span class="lineNum"> 257 </span> : : * just a duplication. Remove it from in-memory copy.</a>
+<a name="258"><span class="lineNum"> 258 </span> : : */</a>
+<a name="259"><span class="lineNum"> 259 </span> :<span class="lineCov"> 2 : hwvar = find_secvar(&quot;HWKH&quot;, 5, variable_bank);</span></a>
+<a name="260"><span class="lineNum"> 260 </span> :<span class="lineCov"> 2 : if (!hwvar) {</span></a>
+<a name="261"><span class="lineNum"> 261 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;cannot find hw-key-hash, should not happen\n&quot;);</span></a>
+<a name="262"><span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : return OPAL_INTERNAL_ERROR;</span></a>
+<a name="263"><span class="lineNum"> 263 </span> : : }</a>
+<a name="264"><span class="lineNum"> 264 </span> :<span class="lineCov"> 2 : list_del(&amp;hwvar-&gt;link);</span></a>
+<a name="265"><span class="lineNum"> 265 </span> :<span class="lineCov"> 2 : dealloc_secvar(hwvar);</span></a>
+<a name="266"><span class="lineNum"> 266 </span> : : }</a>
+<a name="267"><span class="lineNum"> 267 </span> : : </a>
+<a name="268"><span class="lineNum"> 268 </span> :<span class="lineCov"> 6 : return OPAL_SUCCESS;</span></a>
+<a name="269"><span class="lineNum"> 269 </span> : : }</a>
+<a name="270"><span class="lineNum"> 270 </span> : : </a>
+<a name="271"><span class="lineNum"> 271 </span> :<span class="lineCov"> 34 : static int edk2_compat_validate(struct secvar *var)</span></a>
+<a name="272"><span class="lineNum"> 272 </span> : : {</a>
+<a name="273"><span class="lineNum"> 273 </span> : : </a>
+<a name="274"><span class="lineNum"> 274 </span> : : /*</a>
+<a name="275"><span class="lineNum"> 275 </span> : : * Checks if the update is for supported</a>
+<a name="276"><span class="lineNum"> 276 </span> : : * Non-volatile secure variables</a>
+<a name="277"><span class="lineNum"> 277 </span> : : */</a>
+<a name="278"><span class="lineNum"> 278 </span> :<span class="lineCov"> 34 : if (!key_equals(var-&gt;key, &quot;PK&quot;)</span></a>
+<a name="279"><span class="lineNum"> 279 </span> :<span class="lineCov"> 26 : &amp;&amp; !key_equals(var-&gt;key, &quot;KEK&quot;)</span></a>
+<a name="280"><span class="lineNum"> 280 </span> :<span class="lineCov"> 15 : &amp;&amp; !key_equals(var-&gt;key, &quot;db&quot;)</span></a>
+<a name="281"><span class="lineNum"> 281 </span> :<span class="lineCov"> 6 : &amp;&amp; !key_equals(var-&gt;key, &quot;dbx&quot;))</span></a>
+<a name="282"><span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
+<a name="283"><span class="lineNum"> 283 </span> : : </a>
+<a name="284"><span class="lineNum"> 284 </span> : : /* Check that signature type is PKCS7 */</a>
+<a name="285"><span class="lineNum"> 285 </span> :<span class="lineCov"> 34 : if (!is_pkcs7_sig_format(var-&gt;data))</span></a>
+<a name="286"><span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : return OPAL_PARAMETER;</span></a>
+<a name="287"><span class="lineNum"> 287 </span> : : </a>
+<a name="288"><span class="lineNum"> 288 </span> :<span class="lineCov"> 34 : return OPAL_SUCCESS;</span></a>
+<a name="289"><span class="lineNum"> 289 </span> : : };</a>
+<a name="290"><span class="lineNum"> 290 </span> : : </a>
+<a name="291"><span class="lineNum"> 291 </span> : : struct secvar_backend_driver edk2_compatible_v1 = {</a>
+<a name="292"><span class="lineNum"> 292 </span> : : .pre_process = edk2_compat_pre_process,</a>
+<a name="293"><span class="lineNum"> 293 </span> : : .process = edk2_compat_process,</a>
+<a name="294"><span class="lineNum"> 294 </span> : : .post_process = edk2_compat_post_process,</a>
+<a name="295"><span class="lineNum"> 295 </span> : : .validate = edk2_compat_validate,</a>
+<a name="296"><span class="lineNum"> 296 </span> : : .compatible = &quot;ibm,edk2-compat-v1&quot;,</a>
+<a name="297"><span class="lineNum"> 297 </span> : : };</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/libstb/secvar/backend/index-sort-b.html b/coverage-report/libstb/secvar/backend/index-sort-b.html
index d7af0b1..2144165 100644
--- a/coverage-report/libstb/secvar/backend/index-sort-b.html
+++ b/coverage-report/libstb/secvar/backend/index-sort-b.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">423</td>
- <td class="headerCovTableEntry">516</td>
- <td class="headerCovTableEntryMed">82.0 %</td>
+ <td class="headerCovTableEntry">455</td>
+ <td class="headerCovTableEntry">537</td>
+ <td class="headerCovTableEntryMed">84.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">24</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="edk2-compat-process.c.gcov.html">edk2-compat-process.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=81 height=10 alt="81.4%"><img src="../../../snow.png" width=19 height=10 alt="81.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=85 height=10 alt="84.9%"><img src="../../../snow.png" width=15 height=10 alt="84.9%"></td></tr></table>
</td>
- <td class="coverPerMed">81.4&nbsp;%</td>
- <td class="coverNumMed">323 / 397</td>
+ <td class="coverPerMed">84.9&nbsp;%</td>
+ <td class="coverNumMed">354 / 417</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">20 / 20</td>
<td class="coverPerHi">-</td>
@@ -96,10 +96,10 @@
<tr>
<td class="coverFile"><a href="edk2-compat.c.gcov.html">edk2-compat.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=84 height=10 alt="84.0%"><img src="../../../snow.png" width=16 height=10 alt="84.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=84 height=10 alt="84.2%"><img src="../../../snow.png" width=16 height=10 alt="84.2%"></td></tr></table>
</td>
- <td class="coverPerMed">84.0&nbsp;%</td>
- <td class="coverNumMed">100 / 119</td>
+ <td class="coverPerMed">84.2&nbsp;%</td>
+ <td class="coverNumMed">101 / 120</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/libstb/secvar/backend/index-sort-f.html b/coverage-report/libstb/secvar/backend/index-sort-f.html
index 0d334d3..573a258 100644
--- a/coverage-report/libstb/secvar/backend/index-sort-f.html
+++ b/coverage-report/libstb/secvar/backend/index-sort-f.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">423</td>
- <td class="headerCovTableEntry">516</td>
- <td class="headerCovTableEntryMed">82.0 %</td>
+ <td class="headerCovTableEntry">455</td>
+ <td class="headerCovTableEntry">537</td>
+ <td class="headerCovTableEntryMed">84.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">24</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="edk2-compat.c.gcov.html">edk2-compat.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=84 height=10 alt="84.0%"><img src="../../../snow.png" width=16 height=10 alt="84.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=84 height=10 alt="84.2%"><img src="../../../snow.png" width=16 height=10 alt="84.2%"></td></tr></table>
</td>
- <td class="coverPerMed">84.0&nbsp;%</td>
- <td class="coverNumMed">100 / 119</td>
+ <td class="coverPerMed">84.2&nbsp;%</td>
+ <td class="coverNumMed">101 / 120</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">-</td>
@@ -96,10 +96,10 @@
<tr>
<td class="coverFile"><a href="edk2-compat-process.c.gcov.html">edk2-compat-process.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=81 height=10 alt="81.4%"><img src="../../../snow.png" width=19 height=10 alt="81.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=85 height=10 alt="84.9%"><img src="../../../snow.png" width=15 height=10 alt="84.9%"></td></tr></table>
</td>
- <td class="coverPerMed">81.4&nbsp;%</td>
- <td class="coverNumMed">323 / 397</td>
+ <td class="coverPerMed">84.9&nbsp;%</td>
+ <td class="coverNumMed">354 / 417</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">20 / 20</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/libstb/secvar/backend/index-sort-l.html b/coverage-report/libstb/secvar/backend/index-sort-l.html
index d88e7e6..8b6fe96 100644
--- a/coverage-report/libstb/secvar/backend/index-sort-l.html
+++ b/coverage-report/libstb/secvar/backend/index-sort-l.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">423</td>
- <td class="headerCovTableEntry">516</td>
- <td class="headerCovTableEntryMed">82.0 %</td>
+ <td class="headerCovTableEntry">455</td>
+ <td class="headerCovTableEntry">537</td>
+ <td class="headerCovTableEntryMed">84.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">24</td>
@@ -82,26 +82,26 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="edk2-compat-process.c.gcov.html">edk2-compat-process.c</a></td>
+ <td class="coverFile"><a href="edk2-compat.c.gcov.html">edk2-compat.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=81 height=10 alt="81.4%"><img src="../../../snow.png" width=19 height=10 alt="81.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=84 height=10 alt="84.2%"><img src="../../../snow.png" width=16 height=10 alt="84.2%"></td></tr></table>
</td>
- <td class="coverPerMed">81.4&nbsp;%</td>
- <td class="coverNumMed">323 / 397</td>
+ <td class="coverPerMed">84.2&nbsp;%</td>
+ <td class="coverNumMed">101 / 120</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">20 / 20</td>
+ <td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="edk2-compat.c.gcov.html">edk2-compat.c</a></td>
+ <td class="coverFile"><a href="edk2-compat-process.c.gcov.html">edk2-compat-process.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=84 height=10 alt="84.0%"><img src="../../../snow.png" width=16 height=10 alt="84.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=85 height=10 alt="84.9%"><img src="../../../snow.png" width=15 height=10 alt="84.9%"></td></tr></table>
</td>
- <td class="coverPerMed">84.0&nbsp;%</td>
- <td class="coverNumMed">100 / 119</td>
+ <td class="coverPerMed">84.9&nbsp;%</td>
+ <td class="coverNumMed">354 / 417</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">4 / 4</td>
+ <td class="coverNumHi">20 / 20</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/libstb/secvar/backend/index.html b/coverage-report/libstb/secvar/backend/index.html
index f3f1a0a..fab0914 100644
--- a/coverage-report/libstb/secvar/backend/index.html
+++ b/coverage-report/libstb/secvar/backend/index.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">423</td>
- <td class="headerCovTableEntry">516</td>
- <td class="headerCovTableEntryMed">82.0 %</td>
+ <td class="headerCovTableEntry">455</td>
+ <td class="headerCovTableEntry">537</td>
+ <td class="headerCovTableEntryMed">84.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">24</td>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="edk2-compat-process.c.gcov.html">edk2-compat-process.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=81 height=10 alt="81.4%"><img src="../../../snow.png" width=19 height=10 alt="81.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=85 height=10 alt="84.9%"><img src="../../../snow.png" width=15 height=10 alt="84.9%"></td></tr></table>
</td>
- <td class="coverPerMed">81.4&nbsp;%</td>
- <td class="coverNumMed">323 / 397</td>
+ <td class="coverPerMed">84.9&nbsp;%</td>
+ <td class="coverNumMed">354 / 417</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">20 / 20</td>
<td class="coverPerHi">-</td>
@@ -96,10 +96,10 @@
<tr>
<td class="coverFile"><a href="edk2-compat.c.gcov.html">edk2-compat.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=84 height=10 alt="84.0%"><img src="../../../snow.png" width=16 height=10 alt="84.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../amber.png" width=84 height=10 alt="84.2%"><img src="../../../snow.png" width=16 height=10 alt="84.2%"></td></tr></table>
</td>
- <td class="coverPerMed">84.0&nbsp;%</td>
- <td class="coverNumMed">100 / 119</td>
+ <td class="coverPerMed">84.2&nbsp;%</td>
+ <td class="coverNumMed">101 / 120</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/libstb/secvar/index-sort-b.html b/coverage-report/libstb/secvar/index-sort-b.html
index 5f4707d..3761a0d 100644
--- a/coverage-report/libstb/secvar/index-sort-b.html
+++ b/coverage-report/libstb/secvar/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">12</td>
diff --git a/coverage-report/libstb/secvar/index-sort-f.html b/coverage-report/libstb/secvar/index-sort-f.html
index 9130074..39cc687 100644
--- a/coverage-report/libstb/secvar/index-sort-f.html
+++ b/coverage-report/libstb/secvar/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">12</td>
diff --git a/coverage-report/libstb/secvar/index-sort-l.html b/coverage-report/libstb/secvar/index-sort-l.html
index d155f7b..cfa081a 100644
--- a/coverage-report/libstb/secvar/index-sort-l.html
+++ b/coverage-report/libstb/secvar/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">12</td>
diff --git a/coverage-report/libstb/secvar/index.html b/coverage-report/libstb/secvar/index.html
index 4c59b85..de169be 100644
--- a/coverage-report/libstb/secvar/index.html
+++ b/coverage-report/libstb/secvar/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">12</td>
diff --git a/coverage-report/libstb/secvar/secvar_api.c.func-sort-c.html b/coverage-report/libstb/secvar/secvar_api.c.func-sort-c.html
index 297c3d2..e870bc1 100644
--- a/coverage-report/libstb/secvar/secvar_api.c.func-sort-c.html
+++ b/coverage-report/libstb/secvar/secvar_api.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/libstb/secvar/secvar_api.c.func.html b/coverage-report/libstb/secvar/secvar_api.c.func.html
index 3fc82f8..77a6f40 100644
--- a/coverage-report/libstb/secvar/secvar_api.c.func.html
+++ b/coverage-report/libstb/secvar/secvar_api.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/libstb/secvar/secvar_api.c.gcov.html b/coverage-report/libstb/secvar/secvar_api.c.gcov.html
index 6c871da..efb426c 100644
--- a/coverage-report/libstb/secvar/secvar_api.c.gcov.html
+++ b/coverage-report/libstb/secvar/secvar_api.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
diff --git a/coverage-report/libstb/secvar/secvar_util.c.func-sort-c.html b/coverage-report/libstb/secvar/secvar_util.c.func-sort-c.html
index aa2d03a..837006d 100644
--- a/coverage-report/libstb/secvar/secvar_util.c.func-sort-c.html
+++ b/coverage-report/libstb/secvar/secvar_util.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
@@ -78,31 +78,31 @@
</tr>
<tr>
<td class="coverFn"><a href="secvar_util.c.gcov.html#25">copy_bank_list</a></td>
- <td class="coverFnHi">28</td>
+ <td class="coverFnHi">36</td>
</tr>
<tr>
<td class="coverFn"><a href="secvar_util.c.gcov.html#12">clear_bank_list</a></td>
- <td class="coverFnHi">63</td>
+ <td class="coverFnHi">78</td>
</tr>
<tr>
<td class="coverFn"><a href="secvar_util.c.gcov.html#147">list_length</a></td>
- <td class="coverFnHi">92</td>
+ <td class="coverFnHi">117</td>
</tr>
<tr>
<td class="coverFn"><a href="secvar_util.c.gcov.html#121">find_secvar</a></td>
- <td class="coverFnHi">109</td>
+ <td class="coverFnHi">138</td>
</tr>
<tr>
<td class="coverFn"><a href="secvar_util.c.gcov.html#67">new_secvar</a></td>
- <td class="coverFnHi">186</td>
+ <td class="coverFnHi">234</td>
</tr>
<tr>
<td class="coverFn"><a href="secvar_util.c.gcov.html#40">alloc_secvar</a></td>
- <td class="coverFnHi">198</td>
+ <td class="coverFnHi">242</td>
</tr>
<tr>
<td class="coverFn"><a href="secvar_util.c.gcov.html#111">dealloc_secvar</a></td>
- <td class="coverFnHi">198</td>
+ <td class="coverFnHi">242</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libstb/secvar/secvar_util.c.func.html b/coverage-report/libstb/secvar/secvar_util.c.func.html
index 6345815..ac958e6 100644
--- a/coverage-report/libstb/secvar/secvar_util.c.func.html
+++ b/coverage-report/libstb/secvar/secvar_util.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
@@ -70,23 +70,23 @@
</tr>
<tr>
<td class="coverFn"><a href="secvar_util.c.gcov.html#40">alloc_secvar</a></td>
- <td class="coverFnHi">198</td>
+ <td class="coverFnHi">242</td>
</tr>
<tr>
<td class="coverFn"><a href="secvar_util.c.gcov.html#12">clear_bank_list</a></td>
- <td class="coverFnHi">63</td>
+ <td class="coverFnHi">78</td>
</tr>
<tr>
<td class="coverFn"><a href="secvar_util.c.gcov.html#25">copy_bank_list</a></td>
- <td class="coverFnHi">28</td>
+ <td class="coverFnHi">36</td>
</tr>
<tr>
<td class="coverFn"><a href="secvar_util.c.gcov.html#111">dealloc_secvar</a></td>
- <td class="coverFnHi">198</td>
+ <td class="coverFnHi">242</td>
</tr>
<tr>
<td class="coverFn"><a href="secvar_util.c.gcov.html#121">find_secvar</a></td>
- <td class="coverFnHi">109</td>
+ <td class="coverFnHi">138</td>
</tr>
<tr>
<td class="coverFn"><a href="secvar_util.c.gcov.html#136">is_key_empty</a></td>
@@ -94,11 +94,11 @@
</tr>
<tr>
<td class="coverFn"><a href="secvar_util.c.gcov.html#147">list_length</a></td>
- <td class="coverFnHi">92</td>
+ <td class="coverFnHi">117</td>
</tr>
<tr>
<td class="coverFn"><a href="secvar_util.c.gcov.html#67">new_secvar</a></td>
- <td class="coverFnHi">186</td>
+ <td class="coverFnHi">234</td>
</tr>
<tr>
<td class="coverFn"><a href="secvar_util.c.gcov.html#93">realloc_secvar</a></td>
diff --git a/coverage-report/libstb/secvar/secvar_util.c.gcov.html b/coverage-report/libstb/secvar/secvar_util.c.gcov.html
index 7a5ffa8..17f8281 100644
--- a/coverage-report/libstb/secvar/secvar_util.c.gcov.html
+++ b/coverage-report/libstb/secvar/secvar_util.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
@@ -82,85 +82,85 @@
<a name="11"><span class="lineNum"> 11 </span> : : #include &lt;opal.h&gt;</a>
<a name="12"><span class="lineNum"> 12 </span> : : #include &quot;secvar.h&quot;</a>
<a name="13"><span class="lineNum"> 13 </span> : : </a>
-<a name="14"><span class="lineNum"> 14 </span> :<span class="lineCov"> 63 : void clear_bank_list(struct list_head *bank)</span></a>
+<a name="14"><span class="lineNum"> 14 </span> :<span class="lineCov"> 78 : void clear_bank_list(struct list_head *bank)</span></a>
<a name="15"><span class="lineNum"> 15 </span> : : {</a>
<a name="16"><span class="lineNum"> 16 </span> : : struct secvar *var, *next;</a>
<a name="17"><span class="lineNum"> 17 </span> : : </a>
-<a name="18"><span class="lineNum"> 18 </span> :<span class="lineCov"> 63 : if (!bank)</span></a>
+<a name="18"><span class="lineNum"> 18 </span> :<span class="lineCov"> 78 : if (!bank)</span></a>
<a name="19"><span class="lineNum"> 19 </span> :<span class="lineNoCov"> 0 : return;</span></a>
<a name="20"><span class="lineNum"> 20 </span> : : </a>
-<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 256 : list_for_each_safe(bank, var, next, link) {</span></a>
-<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 193 : list_del(&amp;var-&gt;link);</span></a>
-<a name="23"><span class="lineNum"> 23 </span> :<span class="lineCov"> 193 : dealloc_secvar(var);</span></a>
+<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 315 : list_for_each_safe(bank, var, next, link) {</span></a>
+<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 237 : list_del(&amp;var-&gt;link);</span></a>
+<a name="23"><span class="lineNum"> 23 </span> :<span class="lineCov"> 237 : dealloc_secvar(var);</span></a>
<a name="24"><span class="lineNum"> 24 </span> : : }</a>
<a name="25"><span class="lineNum"> 25 </span> : : }</a>
<a name="26"><span class="lineNum"> 26 </span> : : </a>
-<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 28 : int copy_bank_list(struct list_head *dst, struct list_head *src)</span></a>
+<a name="27"><span class="lineNum"> 27 </span> :<span class="lineCov"> 36 : int copy_bank_list(struct list_head *dst, struct list_head *src)</span></a>
<a name="28"><span class="lineNum"> 28 </span> : : {</a>
<a name="29"><span class="lineNum"> 29 </span> : : struct secvar *var, *tmp;</a>
<a name="30"><span class="lineNum"> 30 </span> : : </a>
-<a name="31"><span class="lineNum"> 31 </span> :<span class="lineCov"> 171 : list_for_each(src, var, link) {</span></a>
+<a name="31"><span class="lineNum"> 31 </span> :<span class="lineCov"> 219 : list_for_each(src, var, link) {</span></a>
<a name="32"><span class="lineNum"> 32 </span> : : /* Allocate new secvar using actual data size */</a>
-<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 143 : tmp = new_secvar(var-&gt;key, var-&gt;key_len, var-&gt;data,</span></a>
+<a name="33"><span class="lineNum"> 33 </span> :<span class="lineCov"> 183 : tmp = new_secvar(var-&gt;key, var-&gt;key_len, var-&gt;data,</span></a>
<a name="34"><span class="lineNum"> 34 </span> : : var-&gt;data_size, var-&gt;flags);</a>
<a name="35"><span class="lineNum"> 35 </span> : : /* Append to new list */</a>
-<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 143 : list_add_tail(dst, &amp;tmp-&gt;link);</span></a>
+<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 183 : list_add_tail(dst, &amp;tmp-&gt;link);</span></a>
<a name="37"><span class="lineNum"> 37 </span> : : }</a>
<a name="38"><span class="lineNum"> 38 </span> : : </a>
-<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 28 : return OPAL_SUCCESS;</span></a>
+<a name="39"><span class="lineNum"> 39 </span> :<span class="lineCov"> 36 : return OPAL_SUCCESS;</span></a>
<a name="40"><span class="lineNum"> 40 </span> : : }</a>
<a name="41"><span class="lineNum"> 41 </span> : : </a>
-<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 198 : struct secvar *alloc_secvar(uint64_t key_len, uint64_t data_size)</span></a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineCov"> 242 : struct secvar *alloc_secvar(uint64_t key_len, uint64_t data_size)</span></a>
<a name="43"><span class="lineNum"> 43 </span> : : {</a>
<a name="44"><span class="lineNum"> 44 </span> : : struct secvar *ret;</a>
<a name="45"><span class="lineNum"> 45 </span> : : </a>
-<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 198 : ret = zalloc(sizeof(struct secvar));</span></a>
-<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 198 : if (!ret)</span></a>
+<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 242 : ret = zalloc(sizeof(struct secvar));</span></a>
+<a name="47"><span class="lineNum"> 47 </span> :<span class="lineCov"> 242 : if (!ret)</span></a>
<a name="48"><span class="lineNum"> 48 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
<a name="49"><span class="lineNum"> 49 </span> : : </a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 198 : ret-&gt;key = zalloc(key_len);</span></a>
-<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 198 : if (!ret-&gt;key) {</span></a>
+<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 242 : ret-&gt;key = zalloc(key_len);</span></a>
+<a name="51"><span class="lineNum"> 51 </span> :<span class="lineCov"> 242 : if (!ret-&gt;key) {</span></a>
<a name="52"><span class="lineNum"> 52 </span> :<span class="lineNoCov"> 0 : free(ret);</span></a>
<a name="53"><span class="lineNum"> 53 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
<a name="54"><span class="lineNum"> 54 </span> : : }</a>
<a name="55"><span class="lineNum"> 55 </span> : : </a>
-<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 198 : ret-&gt;data = zalloc(data_size);</span></a>
-<a name="57"><span class="lineNum"> 57 </span> :<span class="lineCov"> 198 : if (!ret-&gt;data) {</span></a>
+<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 242 : ret-&gt;data = zalloc(data_size);</span></a>
+<a name="57"><span class="lineNum"> 57 </span> :<span class="lineCov"> 242 : if (!ret-&gt;data) {</span></a>
<a name="58"><span class="lineNum"> 58 </span> :<span class="lineNoCov"> 0 : free(ret-&gt;key);</span></a>
<a name="59"><span class="lineNum"> 59 </span> :<span class="lineNoCov"> 0 : free(ret);</span></a>
<a name="60"><span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
<a name="61"><span class="lineNum"> 61 </span> : : }</a>
<a name="62"><span class="lineNum"> 62 </span> : : </a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 198 : ret-&gt;key_len = key_len;</span></a>
-<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 198 : ret-&gt;data_size = data_size;</span></a>
+<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 242 : ret-&gt;key_len = key_len;</span></a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 242 : ret-&gt;data_size = data_size;</span></a>
<a name="65"><span class="lineNum"> 65 </span> : : </a>
-<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 198 : return ret;</span></a>
+<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 242 : return ret;</span></a>
<a name="67"><span class="lineNum"> 67 </span> : : }</a>
<a name="68"><span class="lineNum"> 68 </span> : : </a>
-<a name="69"><span class="lineNum"> 69 </span> :<span class="lineCov"> 186 : struct secvar *new_secvar(const char *key, uint64_t key_len,</span></a>
+<a name="69"><span class="lineNum"> 69 </span> :<span class="lineCov"> 234 : struct secvar *new_secvar(const char *key, uint64_t key_len,</span></a>
<a name="70"><span class="lineNum"> 70 </span> : : const char *data, uint64_t data_size,</a>
<a name="71"><span class="lineNum"> 71 </span> : : uint64_t flags)</a>
<a name="72"><span class="lineNum"> 72 </span> : : {</a>
<a name="73"><span class="lineNum"> 73 </span> : : struct secvar *ret;</a>
<a name="74"><span class="lineNum"> 74 </span> : : </a>
-<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 186 : if (!key)</span></a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 234 : if (!key)</span></a>
<a name="76"><span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 186 : if ((!key_len) || (key_len &gt; SECVAR_MAX_KEY_LEN))</span></a>
+<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 234 : if ((!key_len) || (key_len &gt; SECVAR_MAX_KEY_LEN))</span></a>
<a name="78"><span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 186 : if ((!data) &amp;&amp; (data_size))</span></a>
+<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 234 : if ((!data) &amp;&amp; (data_size))</span></a>
<a name="80"><span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
<a name="81"><span class="lineNum"> 81 </span> : : </a>
-<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 186 : ret = alloc_secvar(key_len, data_size);</span></a>
-<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 186 : if (!ret)</span></a>
+<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 234 : ret = alloc_secvar(key_len, data_size);</span></a>
+<a name="83"><span class="lineNum"> 83 </span> :<span class="lineCov"> 234 : if (!ret)</span></a>
<a name="84"><span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
<a name="85"><span class="lineNum"> 85 </span> : : </a>
-<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 186 : memcpy(ret-&gt;key, key, key_len);</span></a>
-<a name="87"><span class="lineNum"> 87 </span> :<span class="lineCov"> 186 : ret-&gt;flags = flags;</span></a>
+<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 234 : memcpy(ret-&gt;key, key, key_len);</span></a>
+<a name="87"><span class="lineNum"> 87 </span> :<span class="lineCov"> 234 : ret-&gt;flags = flags;</span></a>
<a name="88"><span class="lineNum"> 88 </span> : : </a>
-<a name="89"><span class="lineNum"> 89 </span> :<span class="lineCov"> 186 : if (data)</span></a>
-<a name="90"><span class="lineNum"> 90 </span> :<span class="lineCov"> 179 : memcpy(ret-&gt;data, data, data_size);</span></a>
+<a name="89"><span class="lineNum"> 89 </span> :<span class="lineCov"> 234 : if (data)</span></a>
+<a name="90"><span class="lineNum"> 90 </span> :<span class="lineCov"> 227 : memcpy(ret-&gt;data, data, data_size);</span></a>
<a name="91"><span class="lineNum"> 91 </span> : : </a>
-<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 186 : return ret;</span></a>
+<a name="92"><span class="lineNum"> 92 </span> :<span class="lineCov"> 234 : return ret;</span></a>
<a name="93"><span class="lineNum"> 93 </span> : : }</a>
<a name="94"><span class="lineNum"> 94 </span> : : </a>
<a name="95"><span class="lineNum"> 95 </span> :<span class="lineCov"> 9 : int realloc_secvar(struct secvar *var, uint64_t size)</span></a>
@@ -181,26 +181,26 @@
<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 9 : return 0;</span></a>
<a name="111"><span class="lineNum"> 111 </span> : : }</a>
<a name="112"><span class="lineNum"> 112 </span> : : </a>
-<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 198 : void dealloc_secvar(struct secvar *var)</span></a>
+<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 242 : void dealloc_secvar(struct secvar *var)</span></a>
<a name="114"><span class="lineNum"> 114 </span> : : {</a>
-<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 198 : if (!var)</span></a>
+<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 242 : if (!var)</span></a>
<a name="116"><span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : return;</span></a>
<a name="117"><span class="lineNum"> 117 </span> : : </a>
-<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 198 : free(var-&gt;key);</span></a>
-<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 198 : free(var-&gt;data);</span></a>
-<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 198 : free(var);</span></a>
+<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 242 : free(var-&gt;key);</span></a>
+<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 242 : free(var-&gt;data);</span></a>
+<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 242 : free(var);</span></a>
<a name="121"><span class="lineNum"> 121 </span> : : }</a>
<a name="122"><span class="lineNum"> 122 </span> : : </a>
-<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 109 : struct secvar *find_secvar(const char *key, uint64_t key_len, struct list_head *bank)</span></a>
+<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 138 : struct secvar *find_secvar(const char *key, uint64_t key_len, struct list_head *bank)</span></a>
<a name="124"><span class="lineNum"> 124 </span> : : {</a>
-<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 109 : struct secvar *var = NULL;</span></a>
+<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 138 : struct secvar *var = NULL;</span></a>
<a name="126"><span class="lineNum"> 126 </span> : : </a>
-<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 279 : list_for_each(bank, var, link) {</span></a>
+<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 349 : list_for_each(bank, var, link) {</span></a>
<a name="128"><span class="lineNum"> 128 </span> : : // Prevent matching shorter key subsets / bail early</a>
-<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 268 : if (key_len != var-&gt;key_len)</span></a>
-<a name="130"><span class="lineNum"> 130 </span> :<span class="lineCov"> 108 : continue;</span></a>
-<a name="131"><span class="lineNum"> 131 </span> :<span class="lineCov"> 160 : if (!memcmp(key, var-&gt;key, key_len))</span></a>
-<a name="132"><span class="lineNum"> 132 </span> :<span class="lineCov"> 98 : return var;</span></a>
+<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 338 : if (key_len != var-&gt;key_len)</span></a>
+<a name="130"><span class="lineNum"> 130 </span> :<span class="lineCov"> 132 : continue;</span></a>
+<a name="131"><span class="lineNum"> 131 </span> :<span class="lineCov"> 206 : if (!memcmp(key, var-&gt;key, key_len))</span></a>
+<a name="132"><span class="lineNum"> 132 </span> :<span class="lineCov"> 127 : return var;</span></a>
<a name="133"><span class="lineNum"> 133 </span> : : }</a>
<a name="134"><span class="lineNum"> 134 </span> : : </a>
<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 11 : return NULL;</span></a>
@@ -217,15 +217,15 @@
<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 4 : return 1;</span></a>
<a name="147"><span class="lineNum"> 147 </span> : : }</a>
<a name="148"><span class="lineNum"> 148 </span> : : </a>
-<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 92 : int list_length(struct list_head *bank)</span></a>
+<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 117 : int list_length(struct list_head *bank)</span></a>
<a name="150"><span class="lineNum"> 150 </span> : : {</a>
-<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 92 : int ret = 0;</span></a>
+<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 117 : int ret = 0;</span></a>
<a name="152"><span class="lineNum"> 152 </span> : : struct secvar *var;</a>
<a name="153"><span class="lineNum"> 153 </span> : : </a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 295 : list_for_each(bank, var, link)</span></a>
-<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 203 : ret++;</span></a>
+<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 373 : list_for_each(bank, var, link)</span></a>
+<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 256 : ret++;</span></a>
<a name="156"><span class="lineNum"> 156 </span> : : </a>
-<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 92 : return ret;</span></a>
+<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 117 : return ret;</span></a>
<a name="158"><span class="lineNum"> 158 </span> : : }</a>
</pre>
</td>
diff --git a/coverage-report/libstb/secvar/storage/fakenv_ops.c.func-sort-c.html b/coverage-report/libstb/secvar/storage/fakenv_ops.c.func-sort-c.html
index 7f433e1..5f2dde1 100644
--- a/coverage-report/libstb/secvar/storage/fakenv_ops.c.func-sort-c.html
+++ b/coverage-report/libstb/secvar/storage/fakenv_ops.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
diff --git a/coverage-report/libstb/secvar/storage/fakenv_ops.c.func.html b/coverage-report/libstb/secvar/storage/fakenv_ops.c.func.html
index 8a16cbe..a80bd4f 100644
--- a/coverage-report/libstb/secvar/storage/fakenv_ops.c.func.html
+++ b/coverage-report/libstb/secvar/storage/fakenv_ops.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
diff --git a/coverage-report/libstb/secvar/storage/fakenv_ops.c.gcov.html b/coverage-report/libstb/secvar/storage/fakenv_ops.c.gcov.html
index 5b79fb4..7ec2802 100644
--- a/coverage-report/libstb/secvar/storage/fakenv_ops.c.gcov.html
+++ b/coverage-report/libstb/secvar/storage/fakenv_ops.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
diff --git a/coverage-report/libstb/secvar/storage/index-sort-b.html b/coverage-report/libstb/secvar/storage/index-sort-b.html
index 4d4af61..0df4b8f 100644
--- a/coverage-report/libstb/secvar/storage/index-sort-b.html
+++ b/coverage-report/libstb/secvar/storage/index-sort-b.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">201</td>
- <td class="headerCovTableEntry">426</td>
- <td class="headerCovTableEntryLo">47.2 %</td>
+ <td class="headerCovTableEntry">196</td>
+ <td class="headerCovTableEntry">438</td>
+ <td class="headerCovTableEntryLo">44.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">18</td>
- <td class="headerCovTableEntry">27</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntry">28</td>
+ <td class="headerCovTableEntryLo">64.3 %</td>
</tr>
<tr>
<td></td>
@@ -84,12 +84,12 @@
<tr>
<td class="coverFile"><a href="secboot_tpm.c.gcov.html">secboot_tpm.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=48 height=10 alt="48.4%"><img src="../../../snow.png" width=52 height=10 alt="48.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=45 height=10 alt="45.4%"><img src="../../../snow.png" width=55 height=10 alt="45.4%"></td></tr></table>
</td>
- <td class="coverPerLo">48.4&nbsp;%</td>
- <td class="coverNumLo">167 / 345</td>
- <td class="coverPerLo">72.2&nbsp;%</td>
- <td class="coverNumLo">13 / 18</td>
+ <td class="coverPerLo">45.4&nbsp;%</td>
+ <td class="coverNumLo">162 / 357</td>
+ <td class="coverPerLo">68.4&nbsp;%</td>
+ <td class="coverNumLo">13 / 19</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/libstb/secvar/storage/index-sort-f.html b/coverage-report/libstb/secvar/storage/index-sort-f.html
index 7602d8d..b0dae87 100644
--- a/coverage-report/libstb/secvar/storage/index-sort-f.html
+++ b/coverage-report/libstb/secvar/storage/index-sort-f.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">201</td>
- <td class="headerCovTableEntry">426</td>
- <td class="headerCovTableEntryLo">47.2 %</td>
+ <td class="headerCovTableEntry">196</td>
+ <td class="headerCovTableEntry">438</td>
+ <td class="headerCovTableEntryLo">44.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">18</td>
- <td class="headerCovTableEntry">27</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntry">28</td>
+ <td class="headerCovTableEntryLo">64.3 %</td>
</tr>
<tr>
<td></td>
@@ -96,12 +96,12 @@
<tr>
<td class="coverFile"><a href="secboot_tpm.c.gcov.html">secboot_tpm.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=48 height=10 alt="48.4%"><img src="../../../snow.png" width=52 height=10 alt="48.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=45 height=10 alt="45.4%"><img src="../../../snow.png" width=55 height=10 alt="45.4%"></td></tr></table>
</td>
- <td class="coverPerLo">48.4&nbsp;%</td>
- <td class="coverNumLo">167 / 345</td>
- <td class="coverPerLo">72.2&nbsp;%</td>
- <td class="coverNumLo">13 / 18</td>
+ <td class="coverPerLo">45.4&nbsp;%</td>
+ <td class="coverNumLo">162 / 357</td>
+ <td class="coverPerLo">68.4&nbsp;%</td>
+ <td class="coverNumLo">13 / 19</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/libstb/secvar/storage/index-sort-l.html b/coverage-report/libstb/secvar/storage/index-sort-l.html
index a03109e..f376930 100644
--- a/coverage-report/libstb/secvar/storage/index-sort-l.html
+++ b/coverage-report/libstb/secvar/storage/index-sort-l.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">201</td>
- <td class="headerCovTableEntry">426</td>
- <td class="headerCovTableEntryLo">47.2 %</td>
+ <td class="headerCovTableEntry">196</td>
+ <td class="headerCovTableEntry">438</td>
+ <td class="headerCovTableEntryLo">44.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">18</td>
- <td class="headerCovTableEntry">27</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntry">28</td>
+ <td class="headerCovTableEntryLo">64.3 %</td>
</tr>
<tr>
<td></td>
@@ -96,12 +96,12 @@
<tr>
<td class="coverFile"><a href="secboot_tpm.c.gcov.html">secboot_tpm.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=48 height=10 alt="48.4%"><img src="../../../snow.png" width=52 height=10 alt="48.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=45 height=10 alt="45.4%"><img src="../../../snow.png" width=55 height=10 alt="45.4%"></td></tr></table>
</td>
- <td class="coverPerLo">48.4&nbsp;%</td>
- <td class="coverNumLo">167 / 345</td>
- <td class="coverPerLo">72.2&nbsp;%</td>
- <td class="coverNumLo">13 / 18</td>
+ <td class="coverPerLo">45.4&nbsp;%</td>
+ <td class="coverNumLo">162 / 357</td>
+ <td class="coverPerLo">68.4&nbsp;%</td>
+ <td class="coverNumLo">13 / 19</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/libstb/secvar/storage/index.html b/coverage-report/libstb/secvar/storage/index.html
index 5bfb49d..c15f3b7 100644
--- a/coverage-report/libstb/secvar/storage/index.html
+++ b/coverage-report/libstb/secvar/storage/index.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">201</td>
- <td class="headerCovTableEntry">426</td>
- <td class="headerCovTableEntryLo">47.2 %</td>
+ <td class="headerCovTableEntry">196</td>
+ <td class="headerCovTableEntry">438</td>
+ <td class="headerCovTableEntryLo">44.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">18</td>
- <td class="headerCovTableEntry">27</td>
- <td class="headerCovTableEntryLo">66.7 %</td>
+ <td class="headerCovTableEntry">28</td>
+ <td class="headerCovTableEntryLo">64.3 %</td>
</tr>
<tr>
<td></td>
@@ -96,12 +96,12 @@
<tr>
<td class="coverFile"><a href="secboot_tpm.c.gcov.html">secboot_tpm.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=48 height=10 alt="48.4%"><img src="../../../snow.png" width=52 height=10 alt="48.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../ruby.png" width=45 height=10 alt="45.4%"><img src="../../../snow.png" width=55 height=10 alt="45.4%"></td></tr></table>
</td>
- <td class="coverPerLo">48.4&nbsp;%</td>
- <td class="coverNumLo">167 / 345</td>
- <td class="coverPerLo">72.2&nbsp;%</td>
- <td class="coverNumLo">13 / 18</td>
+ <td class="coverPerLo">45.4&nbsp;%</td>
+ <td class="coverNumLo">162 / 357</td>
+ <td class="coverPerLo">68.4&nbsp;%</td>
+ <td class="coverNumLo">13 / 19</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/libstb/secvar/storage/secboot_tpm.c.func-sort-c.html b/coverage-report/libstb/secvar/storage/secboot_tpm.c.func-sort-c.html
index 5818d15..6c5b94c 100644
--- a/coverage-report/libstb/secvar/storage/secboot_tpm.c.func-sort-c.html
+++ b/coverage-report/libstb/secvar/storage/secboot_tpm.c.func-sort-c.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">167</td>
- <td class="headerCovTableEntry">345</td>
- <td class="headerCovTableEntryLo">48.4 %</td>
+ <td class="headerCovTableEntry">162</td>
+ <td class="headerCovTableEntry">357</td>
+ <td class="headerCovTableEntryLo">45.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntry">18</td>
- <td class="headerCovTableEntryLo">72.2 %</td>
+ <td class="headerCovTableEntry">19</td>
+ <td class="headerCovTableEntryLo">68.4 %</td>
</tr>
<tr>
<td></td>
@@ -69,23 +69,27 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#460">secboot_tpm_check_provisioned_indices</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#377">compare_bank_hash</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#442">secboot_tpm_check_tpmnv_attrs</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#474">secboot_tpm_check_provisioned_indices</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#412">secboot_tpm_get_tpmnv_names</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#456">secboot_tpm_check_tpmnv_attrs</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#707">secboot_tpm_lockdown</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#426">secboot_tpm_get_tpmnv_names</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#504">secboot_tpm_undefine_indices</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#738">secboot_tpm_lockdown</a></td>
+ <td class="coverFnLo">0</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#518">secboot_tpm_undefine_indices</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
@@ -93,11 +97,11 @@
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#480">secboot_tpm_define_indices</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#494">secboot_tpm_define_indices</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#530">secboot_tpm_store_init</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#544">secboot_tpm_store_init</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
@@ -105,40 +109,40 @@
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#247">secboot_tpm_write_bank</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#414">secboot_tpm_load_bank</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#199">secboot_tpm_write_variable_bank</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#401">secboot_tpm_load_variable_bank</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#172">secboot_serialize_bank</a></td>
- <td class="coverFnHi">4</td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#250">secboot_tpm_write_bank</a></td>
+ <td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#400">secboot_tpm_load_bank</a></td>
- <td class="coverFnHi">4</td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#202">secboot_tpm_write_variable_bank</a></td>
+ <td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#372">secboot_tpm_load_variable_bank</a></td>
- <td class="coverFnHi">4</td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#58">calc_bank_hash</a></td>
+ <td class="coverFnHi">3</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#335">secboot_tpm_deserialize_from_buffer</a></td>
- <td class="coverFnHi">6</td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#175">secboot_serialize_bank</a></td>
+ <td class="coverFnHi">4</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#58">calc_bank_hash</a></td>
- <td class="coverFnHi">7</td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#338">secboot_tpm_deserialize_from_buffer</a></td>
+ <td class="coverFnHi">4</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#152">secboot_serialize_secvar</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#281">secboot_deserialize_secvar</a></td>
<td class="coverFnHi">8</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#278">secboot_deserialize_secvar</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#155">secboot_serialize_secvar</a></td>
+ <td class="coverFnHi">8</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libstb/secvar/storage/secboot_tpm.c.func.html b/coverage-report/libstb/secvar/storage/secboot_tpm.c.func.html
index 3ff37c0..add1e8c 100644
--- a/coverage-report/libstb/secvar/storage/secboot_tpm.c.func.html
+++ b/coverage-report/libstb/secvar/storage/secboot_tpm.c.func.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">167</td>
- <td class="headerCovTableEntry">345</td>
- <td class="headerCovTableEntryLo">48.4 %</td>
+ <td class="headerCovTableEntry">162</td>
+ <td class="headerCovTableEntry">357</td>
+ <td class="headerCovTableEntryLo">45.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntry">18</td>
- <td class="headerCovTableEntryLo">72.2 %</td>
+ <td class="headerCovTableEntry">19</td>
+ <td class="headerCovTableEntryLo">68.4 %</td>
</tr>
<tr>
<td></td>
@@ -70,70 +70,74 @@
</tr>
<tr>
<td class="coverFn"><a href="secboot_tpm.c.gcov.html#58">calc_bank_hash</a></td>
- <td class="coverFnHi">7</td>
+ <td class="coverFnHi">3</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#278">secboot_deserialize_secvar</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#377">compare_bank_hash</a></td>
+ <td class="coverFnLo">0</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#281">secboot_deserialize_secvar</a></td>
+ <td class="coverFnHi">8</td>
</tr>
<tr>
<td class="coverFn"><a href="secboot_tpm.c.gcov.html#111">secboot_format</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#172">secboot_serialize_bank</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#175">secboot_serialize_bank</a></td>
<td class="coverFnHi">4</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#152">secboot_serialize_secvar</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#155">secboot_serialize_secvar</a></td>
<td class="coverFnHi">8</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#460">secboot_tpm_check_provisioned_indices</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#474">secboot_tpm_check_provisioned_indices</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#442">secboot_tpm_check_tpmnv_attrs</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#456">secboot_tpm_check_tpmnv_attrs</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#480">secboot_tpm_define_indices</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#494">secboot_tpm_define_indices</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#335">secboot_tpm_deserialize_from_buffer</a></td>
- <td class="coverFnHi">6</td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#338">secboot_tpm_deserialize_from_buffer</a></td>
+ <td class="coverFnHi">4</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#412">secboot_tpm_get_tpmnv_names</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#426">secboot_tpm_get_tpmnv_names</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#400">secboot_tpm_load_bank</a></td>
- <td class="coverFnHi">4</td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#414">secboot_tpm_load_bank</a></td>
+ <td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#372">secboot_tpm_load_variable_bank</a></td>
- <td class="coverFnHi">4</td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#401">secboot_tpm_load_variable_bank</a></td>
+ <td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#707">secboot_tpm_lockdown</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#738">secboot_tpm_lockdown</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#530">secboot_tpm_store_init</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#544">secboot_tpm_store_init</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#504">secboot_tpm_undefine_indices</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#518">secboot_tpm_undefine_indices</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#247">secboot_tpm_write_bank</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#250">secboot_tpm_write_bank</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="secboot_tpm.c.gcov.html#199">secboot_tpm_write_variable_bank</a></td>
+ <td class="coverFn"><a href="secboot_tpm.c.gcov.html#202">secboot_tpm_write_variable_bank</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
diff --git a/coverage-report/libstb/secvar/storage/secboot_tpm.c.gcov.html b/coverage-report/libstb/secvar/storage/secboot_tpm.c.gcov.html
index 29c21f0..72b28d9 100644
--- a/coverage-report/libstb/secvar/storage/secboot_tpm.c.gcov.html
+++ b/coverage-report/libstb/secvar/storage/secboot_tpm.c.gcov.html
@@ -31,18 +31,18 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">167</td>
- <td class="headerCovTableEntry">345</td>
- <td class="headerCovTableEntryLo">48.4 %</td>
+ <td class="headerCovTableEntry">162</td>
+ <td class="headerCovTableEntry">357</td>
+ <td class="headerCovTableEntryLo">45.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
- <td class="headerCovTableEntry">18</td>
- <td class="headerCovTableEntryLo">72.2 %</td>
+ <td class="headerCovTableEntry">19</td>
+ <td class="headerCovTableEntryLo">68.4 %</td>
</tr>
<tr>
<td></td>
@@ -128,24 +128,24 @@
<a name="57"><span class="lineNum"> 57 </span> : : };</a>
<a name="58"><span class="lineNum"> 58 </span> : : </a>
<a name="59"><span class="lineNum"> 59 </span> : : /* Calculate a SHA256 hash over the supplied buffer */</a>
-<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 7 : static int calc_bank_hash(char *target_hash, const char *source_buf, uint64_t size)</span></a>
+<a name="60"><span class="lineNum"> 60 </span> :<span class="lineCov"> 3 : static int calc_bank_hash(char *target_hash, const char *source_buf, uint64_t size)</span></a>
<a name="61"><span class="lineNum"> 61 </span> : : {</a>
<a name="62"><span class="lineNum"> 62 </span> : : mbedtls_sha256_context ctx;</a>
<a name="63"><span class="lineNum"> 63 </span> : : int rc;</a>
<a name="64"><span class="lineNum"> 64 </span> : : </a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 7 : mbedtls_sha256_init(&amp;ctx);</span></a>
+<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 3 : mbedtls_sha256_init(&amp;ctx);</span></a>
<a name="66"><span class="lineNum"> 66 </span> : : </a>
-<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 7 : rc = mbedtls_sha256_update_ret(&amp;ctx, source_buf, size);</span></a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 7 : if (rc)</span></a>
+<a name="67"><span class="lineNum"> 67 </span> :<span class="lineCov"> 3 : rc = mbedtls_sha256_update_ret(&amp;ctx, source_buf, size);</span></a>
+<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 3 : if (rc)</span></a>
<a name="69"><span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
<a name="70"><span class="lineNum"> 70 </span> : : </a>
-<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 7 : mbedtls_sha256_finish_ret(&amp;ctx, target_hash);</span></a>
-<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 7 : if (rc)</span></a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 3 : mbedtls_sha256_finish_ret(&amp;ctx, target_hash);</span></a>
+<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 3 : if (rc)</span></a>
<a name="73"><span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
<a name="74"><span class="lineNum"> 74 </span> : : </a>
-<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 7 : out:</span></a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 7 : mbedtls_sha256_free(&amp;ctx);</span></a>
-<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 7 : return rc;</span></a>
+<a name="75"><span class="lineNum"> 75 </span> :<span class="lineCov"> 3 : out:</span></a>
+<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 3 : mbedtls_sha256_free(&amp;ctx);</span></a>
+<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 3 : return rc;</span></a>
<a name="78"><span class="lineNum"> 78 </span> : : }</a>
<a name="79"><span class="lineNum"> 79 </span> : : </a>
<a name="80"><span class="lineNum"> 80 </span> : : /* Reformat the TPMNV space */</a>
@@ -198,614 +198,645 @@
<a name="127"><span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Bank hash failed to calculate somehow\n&quot;);</span></a>
<a name="128"><span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
<a name="129"><span class="lineNum"> 129 </span> : : }</a>
-<a name="130"><span class="lineNum"> 130 </span> : : </a>
-<a name="131"><span class="lineNum"> 131 </span> :<span class="lineCov"> 1 : rc = tpmnv_ops.write(SECBOOT_TPMNV_CONTROL_INDEX,</span></a>
-<a name="132"><span class="lineNum"> 132 </span> :<span class="lineCov"> 1 : tpmnv_control_image-&gt;bank_hash[0],</span></a>
-<a name="133"><span class="lineNum"> 133 </span> : : SHA256_DIGEST_SIZE,</a>
-<a name="134"><span class="lineNum"> 134 </span> : : offsetof(struct tpmnv_control,</a>
-<a name="135"><span class="lineNum"> 135 </span> : : bank_hash[0]));</a>
-<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 1 : if (rc) {</span></a>
-<a name="137"><span class="lineNum"> 137 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Could not write fresh formatted bank hashes to CONTROL index, rc=%d\n&quot;, rc);</span></a>
-<a name="138"><span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
-<a name="139"><span class="lineNum"> 139 </span> : : }</a>
-<a name="140"><span class="lineNum"> 140 </span> : : </a>
-<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 1 : rc = flash_secboot_write(0, secboot_image, sizeof(struct secboot));</span></a>
-<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 1 : if (rc)</span></a>
-<a name="143"><span class="lineNum"> 143 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Could not write formatted data to PNOR, rc=%d\n&quot;, rc);</span></a>
-<a name="144"><span class="lineNum"> 144 </span> : : </a>
-<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 1 : return rc;</span></a>
-<a name="146"><span class="lineNum"> 146 </span> : : }</a>
+<a name="130"><span class="lineNum"> 130 </span> : : /* Clear bank_hash[1] anyway, to match initial zeroed bank hash state */</a>
+<a name="131"><span class="lineNum"> 131 </span> :<span class="lineCov"> 1 : memset(tpmnv_control_image-&gt;bank_hash[1], 0x00, sizeof(tpmnv_control_image-&gt;bank_hash[1]));</span></a>
+<a name="132"><span class="lineNum"> 132 </span> : : </a>
+<a name="133"><span class="lineNum"> 133 </span> :<span class="lineCov"> 1 : tpmnv_control_image-&gt;active_bit = 0;</span></a>
+<a name="134"><span class="lineNum"> 134 </span> : : </a>
+<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 1 : rc = tpmnv_ops.write(SECBOOT_TPMNV_CONTROL_INDEX,</span></a>
+<a name="136"><span class="lineNum"> 136 </span> : : tpmnv_control_image,</a>
+<a name="137"><span class="lineNum"> 137 </span> : : sizeof(struct tpmnv_control),</a>
+<a name="138"><span class="lineNum"> 138 </span> : : 0);</a>
+<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 1 : if (rc) {</span></a>
+<a name="140"><span class="lineNum"> 140 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Could not write fresh formatted bank hashes to CONTROL index, rc=%d\n&quot;, rc);</span></a>
+<a name="141"><span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
+<a name="142"><span class="lineNum"> 142 </span> : : }</a>
+<a name="143"><span class="lineNum"> 143 </span> : : </a>
+<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 1 : rc = flash_secboot_write(0, secboot_image, sizeof(struct secboot));</span></a>
+<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 1 : if (rc)</span></a>
+<a name="146"><span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Could not write formatted data to PNOR, rc=%d\n&quot;, rc);</span></a>
<a name="147"><span class="lineNum"> 147 </span> : : </a>
-<a name="148"><span class="lineNum"> 148 </span> : : </a>
-<a name="149"><span class="lineNum"> 149 </span> : : /*</a>
-<a name="150"><span class="lineNum"> 150 </span> : : * Serialize one variable to a target memory location.</a>
-<a name="151"><span class="lineNum"> 151 </span> : : * Returns the advanced target pointer,</a>
-<a name="152"><span class="lineNum"> 152 </span> : : * NULL if advanced pointer would exceed the supplied bound</a>
-<a name="153"><span class="lineNum"> 153 </span> : : */</a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 8 : static char *secboot_serialize_secvar(char *target, const struct secvar *var, const char *end)</span></a>
-<a name="155"><span class="lineNum"> 155 </span> : : {</a>
-<a name="156"><span class="lineNum"> 156 </span> :<span class="lineCov"> 8 : if ((target + sizeof(uint64_t) + sizeof(uint64_t)</span></a>
-<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 8 : + var-&gt;key_len + var-&gt;data_size) &gt; end)</span></a>
-<a name="158"><span class="lineNum"> 158 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
-<a name="159"><span class="lineNum"> 159 </span> : : </a>
-<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 8 : *((uint64_t*) target) = cpu_to_be64(var-&gt;key_len);</span></a>
-<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 8 : target += sizeof(var-&gt;key_len);</span></a>
-<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 8 : *((uint64_t*) target) = cpu_to_be64(var-&gt;data_size);</span></a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 8 : target += sizeof(var-&gt;data_size);</span></a>
-<a name="164"><span class="lineNum"> 164 </span> :<span class="lineCov"> 8 : memcpy(target, var-&gt;key, var-&gt;key_len);</span></a>
-<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 8 : target += var-&gt;key_len;</span></a>
-<a name="166"><span class="lineNum"> 166 </span> :<span class="lineCov"> 8 : memcpy(target, var-&gt;data, var-&gt;data_size);</span></a>
-<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 8 : target += var-&gt;data_size;</span></a>
-<a name="168"><span class="lineNum"> 168 </span> : : </a>
-<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 8 : return target;</span></a>
-<a name="170"><span class="lineNum"> 170 </span> : : }</a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 1 : return rc;</span></a>
+<a name="149"><span class="lineNum"> 149 </span> : : }</a>
+<a name="150"><span class="lineNum"> 150 </span> : : </a>
+<a name="151"><span class="lineNum"> 151 </span> : : </a>
+<a name="152"><span class="lineNum"> 152 </span> : : /*</a>
+<a name="153"><span class="lineNum"> 153 </span> : : * Serialize one variable to a target memory location.</a>
+<a name="154"><span class="lineNum"> 154 </span> : : * Returns the advanced target pointer,</a>
+<a name="155"><span class="lineNum"> 155 </span> : : * NULL if advanced pointer would exceed the supplied bound</a>
+<a name="156"><span class="lineNum"> 156 </span> : : */</a>
+<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 8 : static char *secboot_serialize_secvar(char *target, const struct secvar *var, const char *end)</span></a>
+<a name="158"><span class="lineNum"> 158 </span> : : {</a>
+<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 8 : if ((target + sizeof(uint64_t) + sizeof(uint64_t)</span></a>
+<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 8 : + var-&gt;key_len + var-&gt;data_size) &gt; end)</span></a>
+<a name="161"><span class="lineNum"> 161 </span> :<span class="lineNoCov"> 0 : return NULL;</span></a>
+<a name="162"><span class="lineNum"> 162 </span> : : </a>
+<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 8 : *((uint64_t*) target) = cpu_to_be64(var-&gt;key_len);</span></a>
+<a name="164"><span class="lineNum"> 164 </span> :<span class="lineCov"> 8 : target += sizeof(var-&gt;key_len);</span></a>
+<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 8 : *((uint64_t*) target) = cpu_to_be64(var-&gt;data_size);</span></a>
+<a name="166"><span class="lineNum"> 166 </span> :<span class="lineCov"> 8 : target += sizeof(var-&gt;data_size);</span></a>
+<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 8 : memcpy(target, var-&gt;key, var-&gt;key_len);</span></a>
+<a name="168"><span class="lineNum"> 168 </span> :<span class="lineCov"> 8 : target += var-&gt;key_len;</span></a>
+<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 8 : memcpy(target, var-&gt;data, var-&gt;data_size);</span></a>
+<a name="170"><span class="lineNum"> 170 </span> :<span class="lineCov"> 8 : target += var-&gt;data_size;</span></a>
<a name="171"><span class="lineNum"> 171 </span> : : </a>
-<a name="172"><span class="lineNum"> 172 </span> : : </a>
-<a name="173"><span class="lineNum"> 173 </span> : : /* Flattens a linked-list bank into a contiguous buffer for writing */</a>
-<a name="174"><span class="lineNum"> 174 </span> :<span class="lineCov"> 4 : static int secboot_serialize_bank(const struct list_head *bank, char *target,</span></a>
-<a name="175"><span class="lineNum"> 175 </span> : : size_t target_size, int flags)</a>
-<a name="176"><span class="lineNum"> 176 </span> : : {</a>
-<a name="177"><span class="lineNum"> 177 </span> : : struct secvar *var;</a>
-<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 4 : char *end = target + target_size;</span></a>
-<a name="179"><span class="lineNum"> 179 </span> : : </a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 4 : assert(bank);</span></a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 4 : assert(target);</span></a>
+<a name="172"><span class="lineNum"> 172 </span> :<span class="lineCov"> 8 : return target;</span></a>
+<a name="173"><span class="lineNum"> 173 </span> : : }</a>
+<a name="174"><span class="lineNum"> 174 </span> : : </a>
+<a name="175"><span class="lineNum"> 175 </span> : : </a>
+<a name="176"><span class="lineNum"> 176 </span> : : /* Flattens a linked-list bank into a contiguous buffer for writing */</a>
+<a name="177"><span class="lineNum"> 177 </span> :<span class="lineCov"> 4 : static int secboot_serialize_bank(const struct list_head *bank, char *target,</span></a>
+<a name="178"><span class="lineNum"> 178 </span> : : size_t target_size, int flags)</a>
+<a name="179"><span class="lineNum"> 179 </span> : : {</a>
+<a name="180"><span class="lineNum"> 180 </span> : : struct secvar *var;</a>
+<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 4 : char *end = target + target_size;</span></a>
<a name="182"><span class="lineNum"> 182 </span> : : </a>
-<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 4 : memset(target, 0x00, target_size);</span></a>
-<a name="184"><span class="lineNum"> 184 </span> : : </a>
-<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 20 : list_for_each(bank, var, link) {</span></a>
-<a name="186"><span class="lineNum"> 186 </span> :<span class="lineCov"> 16 : if (var-&gt;flags != flags)</span></a>
-<a name="187"><span class="lineNum"> 187 </span> :<span class="lineCov"> 8 : continue;</span></a>
-<a name="188"><span class="lineNum"> 188 </span> : : </a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 8 : target = secboot_serialize_secvar(target, var, end);</span></a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineCov"> 8 : if (!target) {</span></a>
-<a name="191"><span class="lineNum"> 191 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Ran out of %s space, giving up!&quot;,</span></a>
-<a name="192"><span class="lineNum"> 192 </span> : : (flags &amp; SECVAR_FLAG_PROTECTED) ? &quot;TPMNV&quot; : &quot;PNOR&quot;);</a>
-<a name="193"><span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : return OPAL_EMPTY;</span></a>
-<a name="194"><span class="lineNum"> 194 </span> : : }</a>
-<a name="195"><span class="lineNum"> 195 </span> : : }</a>
-<a name="196"><span class="lineNum"> 196 </span> : : </a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 4 : return OPAL_SUCCESS;</span></a>
-<a name="198"><span class="lineNum"> 198 </span> : : }</a>
+<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 4 : assert(bank);</span></a>
+<a name="184"><span class="lineNum"> 184 </span> :<span class="lineCov"> 4 : assert(target);</span></a>
+<a name="185"><span class="lineNum"> 185 </span> : : </a>
+<a name="186"><span class="lineNum"> 186 </span> :<span class="lineCov"> 4 : memset(target, 0x00, target_size);</span></a>
+<a name="187"><span class="lineNum"> 187 </span> : : </a>
+<a name="188"><span class="lineNum"> 188 </span> :<span class="lineCov"> 20 : list_for_each(bank, var, link) {</span></a>
+<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 16 : if (var-&gt;flags != flags)</span></a>
+<a name="190"><span class="lineNum"> 190 </span> :<span class="lineCov"> 8 : continue;</span></a>
+<a name="191"><span class="lineNum"> 191 </span> : : </a>
+<a name="192"><span class="lineNum"> 192 </span> :<span class="lineCov"> 8 : target = secboot_serialize_secvar(target, var, end);</span></a>
+<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 8 : if (!target) {</span></a>
+<a name="194"><span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Ran out of %s space, giving up!&quot;,</span></a>
+<a name="195"><span class="lineNum"> 195 </span> : : (flags &amp; SECVAR_FLAG_PROTECTED) ? &quot;TPMNV&quot; : &quot;PNOR&quot;);</a>
+<a name="196"><span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : return OPAL_EMPTY;</span></a>
+<a name="197"><span class="lineNum"> 197 </span> : : }</a>
+<a name="198"><span class="lineNum"> 198 </span> : : }</a>
<a name="199"><span class="lineNum"> 199 </span> : : </a>
-<a name="200"><span class="lineNum"> 200 </span> : : /* Helper for the variable-bank specific writing logic */</a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 2 : static int secboot_tpm_write_variable_bank(const struct list_head *bank)</span></a>
-<a name="202"><span class="lineNum"> 202 </span> : : {</a>
-<a name="203"><span class="lineNum"> 203 </span> : : int rc;</a>
-<a name="204"><span class="lineNum"> 204 </span> : : uint64_t bit;</a>
-<a name="205"><span class="lineNum"> 205 </span> : : </a>
-<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 2 : bit = CYCLE_BIT(tpmnv_control_image-&gt;active_bit);</span></a>
-<a name="207"><span class="lineNum"> 207 </span> : : /* Serialize TPMNV variables */</a>
-<a name="208"><span class="lineNum"> 208 </span> :<span class="lineCov"> 2 : rc = secboot_serialize_bank(bank, tpmnv_vars_image-&gt;vars, tpmnv_vars_size - sizeof(struct tpmnv_vars), SECVAR_FLAG_PROTECTED);</span></a>
-<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 2 : if (rc)</span></a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="211"><span class="lineNum"> 211 </span> : : </a>
-<a name="212"><span class="lineNum"> 212 </span> : : </a>
-<a name="213"><span class="lineNum"> 213 </span> : : /* Write TPMNV variables to actual NV */</a>
-<a name="214"><span class="lineNum"> 214 </span> :<span class="lineCov"> 2 : rc = tpmnv_ops.write(SECBOOT_TPMNV_VARS_INDEX, tpmnv_vars_image, tpmnv_vars_size, 0);</span></a>
-<a name="215"><span class="lineNum"> 215 </span> :<span class="lineCov"> 2 : if (rc)</span></a>
-<a name="216"><span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="217"><span class="lineNum"> 217 </span> : : </a>
-<a name="218"><span class="lineNum"> 218 </span> : : /* Serialize the PNOR variables, but don't write to flash until after the bank hash */</a>
-<a name="219"><span class="lineNum"> 219 </span> :<span class="lineCov"> 2 : rc = secboot_serialize_bank(bank, secboot_image-&gt;bank[bit], SECBOOT_VARIABLE_BANK_SIZE, 0);</span></a>
-<a name="220"><span class="lineNum"> 220 </span> :<span class="lineCov"> 2 : if (rc)</span></a>
-<a name="221"><span class="lineNum"> 221 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="222"><span class="lineNum"> 222 </span> : : </a>
-<a name="223"><span class="lineNum"> 223 </span> : : /* Calculate the bank hash, and write to TPM NV */</a>
-<a name="224"><span class="lineNum"> 224 </span> :<span class="lineCov"> 2 : rc = calc_bank_hash(tpmnv_control_image-&gt;bank_hash[bit], secboot_image-&gt;bank[bit], SECBOOT_VARIABLE_BANK_SIZE);</span></a>
-<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 2 : if (rc)</span></a>
-<a name="226"><span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="227"><span class="lineNum"> 227 </span> : : </a>
-<a name="228"><span class="lineNum"> 228 </span> :<span class="lineCov"> 2 : rc = tpmnv_ops.write(SECBOOT_TPMNV_CONTROL_INDEX, tpmnv_control_image-&gt;bank_hash[bit],</span></a>
-<a name="229"><span class="lineNum"> 229 </span> : : SHA256_DIGEST_LENGTH, offsetof(struct tpmnv_control, bank_hash[bit]));</a>
-<a name="230"><span class="lineNum"> 230 </span> :<span class="lineCov"> 2 : if (rc)</span></a>
-<a name="231"><span class="lineNum"> 231 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="232"><span class="lineNum"> 232 </span> : : </a>
-<a name="233"><span class="lineNum"> 233 </span> : : /* Write new variable bank to pnor */</a>
-<a name="234"><span class="lineNum"> 234 </span> :<span class="lineCov"> 2 : rc = flash_secboot_write(0, secboot_image, sizeof(struct secboot));</span></a>
-<a name="235"><span class="lineNum"> 235 </span> :<span class="lineCov"> 2 : if (rc)</span></a>
-<a name="236"><span class="lineNum"> 236 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
-<a name="237"><span class="lineNum"> 237 </span> : : </a>
-<a name="238"><span class="lineNum"> 238 </span> : : /* Flip the bit, and write to TPM NV */</a>
-<a name="239"><span class="lineNum"> 239 </span> :<span class="lineCov"> 2 : tpmnv_control_image-&gt;active_bit = bit;</span></a>
-<a name="240"><span class="lineNum"> 240 </span> :<span class="lineCov"> 2 : rc = tpmnv_ops.write(SECBOOT_TPMNV_CONTROL_INDEX,</span></a>
-<a name="241"><span class="lineNum"> 241 </span> :<span class="lineCov"> 2 : &amp;tpmnv_control_image-&gt;active_bit,</span></a>
-<a name="242"><span class="lineNum"> 242 </span> : : sizeof(tpmnv_control_image-&gt;active_bit),</a>
-<a name="243"><span class="lineNum"> 243 </span> : : offsetof(struct tpmnv_control, active_bit));</a>
-<a name="244"><span class="lineNum"> 244 </span> :<span class="lineCov"> 2 : out:</span></a>
-<a name="245"><span class="lineNum"> 245 </span> : : </a>
-<a name="246"><span class="lineNum"> 246 </span> :<span class="lineCov"> 2 : return rc;</span></a>
-<a name="247"><span class="lineNum"> 247 </span> : : }</a>
+<a name="200"><span class="lineNum"> 200 </span> :<span class="lineCov"> 4 : return OPAL_SUCCESS;</span></a>
+<a name="201"><span class="lineNum"> 201 </span> : : }</a>
+<a name="202"><span class="lineNum"> 202 </span> : : </a>
+<a name="203"><span class="lineNum"> 203 </span> : : /* Helper for the variable-bank specific writing logic */</a>
+<a name="204"><span class="lineNum"> 204 </span> :<span class="lineCov"> 2 : static int secboot_tpm_write_variable_bank(const struct list_head *bank)</span></a>
+<a name="205"><span class="lineNum"> 205 </span> : : {</a>
+<a name="206"><span class="lineNum"> 206 </span> : : int rc;</a>
+<a name="207"><span class="lineNum"> 207 </span> : : uint64_t bit;</a>
+<a name="208"><span class="lineNum"> 208 </span> : : </a>
+<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 2 : bit = CYCLE_BIT(tpmnv_control_image-&gt;active_bit);</span></a>
+<a name="210"><span class="lineNum"> 210 </span> : : /* Serialize TPMNV variables */</a>
+<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 2 : rc = secboot_serialize_bank(bank, tpmnv_vars_image-&gt;vars, tpmnv_vars_size - sizeof(struct tpmnv_vars), SECVAR_FLAG_PROTECTED);</span></a>
+<a name="212"><span class="lineNum"> 212 </span> :<span class="lineCov"> 2 : if (rc)</span></a>
+<a name="213"><span class="lineNum"> 213 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="214"><span class="lineNum"> 214 </span> : : </a>
+<a name="215"><span class="lineNum"> 215 </span> : : </a>
+<a name="216"><span class="lineNum"> 216 </span> : : /* Write TPMNV variables to actual NV */</a>
+<a name="217"><span class="lineNum"> 217 </span> :<span class="lineCov"> 2 : rc = tpmnv_ops.write(SECBOOT_TPMNV_VARS_INDEX, tpmnv_vars_image, tpmnv_vars_size, 0);</span></a>
+<a name="218"><span class="lineNum"> 218 </span> :<span class="lineCov"> 2 : if (rc)</span></a>
+<a name="219"><span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="220"><span class="lineNum"> 220 </span> : : </a>
+<a name="221"><span class="lineNum"> 221 </span> : : /* Serialize the PNOR variables, but don't write to flash until after the bank hash */</a>
+<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 2 : rc = secboot_serialize_bank(bank, secboot_image-&gt;bank[bit], SECBOOT_VARIABLE_BANK_SIZE, 0);</span></a>
+<a name="223"><span class="lineNum"> 223 </span> :<span class="lineCov"> 2 : if (rc)</span></a>
+<a name="224"><span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="225"><span class="lineNum"> 225 </span> : : </a>
+<a name="226"><span class="lineNum"> 226 </span> : : /* Calculate the bank hash, and write to TPM NV */</a>
+<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 2 : rc = calc_bank_hash(tpmnv_control_image-&gt;bank_hash[bit], secboot_image-&gt;bank[bit], SECBOOT_VARIABLE_BANK_SIZE);</span></a>
+<a name="228"><span class="lineNum"> 228 </span> :<span class="lineCov"> 2 : if (rc)</span></a>
+<a name="229"><span class="lineNum"> 229 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="230"><span class="lineNum"> 230 </span> : : </a>
+<a name="231"><span class="lineNum"> 231 </span> :<span class="lineCov"> 2 : rc = tpmnv_ops.write(SECBOOT_TPMNV_CONTROL_INDEX, tpmnv_control_image-&gt;bank_hash[bit],</span></a>
+<a name="232"><span class="lineNum"> 232 </span> : : SHA256_DIGEST_LENGTH, offsetof(struct tpmnv_control, bank_hash[bit]));</a>
+<a name="233"><span class="lineNum"> 233 </span> :<span class="lineCov"> 2 : if (rc)</span></a>
+<a name="234"><span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="235"><span class="lineNum"> 235 </span> : : </a>
+<a name="236"><span class="lineNum"> 236 </span> : : /* Write new variable bank to pnor */</a>
+<a name="237"><span class="lineNum"> 237 </span> :<span class="lineCov"> 2 : rc = flash_secboot_write(0, secboot_image, sizeof(struct secboot));</span></a>
+<a name="238"><span class="lineNum"> 238 </span> :<span class="lineCov"> 2 : if (rc)</span></a>
+<a name="239"><span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : goto out;</span></a>
+<a name="240"><span class="lineNum"> 240 </span> : : </a>
+<a name="241"><span class="lineNum"> 241 </span> : : /* Flip the bit, and write to TPM NV */</a>
+<a name="242"><span class="lineNum"> 242 </span> :<span class="lineCov"> 2 : tpmnv_control_image-&gt;active_bit = bit;</span></a>
+<a name="243"><span class="lineNum"> 243 </span> :<span class="lineCov"> 2 : rc = tpmnv_ops.write(SECBOOT_TPMNV_CONTROL_INDEX,</span></a>
+<a name="244"><span class="lineNum"> 244 </span> :<span class="lineCov"> 2 : &amp;tpmnv_control_image-&gt;active_bit,</span></a>
+<a name="245"><span class="lineNum"> 245 </span> : : sizeof(tpmnv_control_image-&gt;active_bit),</a>
+<a name="246"><span class="lineNum"> 246 </span> : : offsetof(struct tpmnv_control, active_bit));</a>
+<a name="247"><span class="lineNum"> 247 </span> :<span class="lineCov"> 2 : out:</span></a>
<a name="248"><span class="lineNum"> 248 </span> : : </a>
-<a name="249"><span class="lineNum"> 249 </span> :<span class="lineCov"> 2 : static int secboot_tpm_write_bank(struct list_head *bank, int section)</span></a>
-<a name="250"><span class="lineNum"> 250 </span> : : {</a>
-<a name="251"><span class="lineNum"> 251 </span> : : int rc;</a>
-<a name="252"><span class="lineNum"> 252 </span> : : </a>
-<a name="253"><span class="lineNum"> 253 </span> :<span class="lineCov"> 2 : switch (section) {</span></a>
-<a name="254"><span class="lineNum"> 254 </span> :<span class="lineCov"> 2 : case SECVAR_VARIABLE_BANK:</span></a>
-<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 2 : rc = secboot_tpm_write_variable_bank(bank);</span></a>
-<a name="256"><span class="lineNum"> 256 </span> :<span class="lineCov"> 2 : break;</span></a>
-<a name="257"><span class="lineNum"> 257 </span> :<span class="lineNoCov"> 0 : case SECVAR_UPDATE_BANK:</span></a>
-<a name="258"><span class="lineNum"> 258 </span> :<span class="lineNoCov"> 0 : memset(secboot_image-&gt;update, 0, SECBOOT_UPDATE_BANK_SIZE);</span></a>
-<a name="259"><span class="lineNum"> 259 </span> :<span class="lineNoCov"> 0 : rc = secboot_serialize_bank(bank, secboot_image-&gt;update,</span></a>
-<a name="260"><span class="lineNum"> 260 </span> : : SECBOOT_UPDATE_BANK_SIZE, 0);</a>
-<a name="261"><span class="lineNum"> 261 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
-<a name="262"><span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="263"><span class="lineNum"> 263 </span> : : </a>
-<a name="264"><span class="lineNum"> 264 </span> :<span class="lineNoCov"> 0 : rc = flash_secboot_write(0, secboot_image,</span></a>
-<a name="265"><span class="lineNum"> 265 </span> : : sizeof(struct secboot));</a>
-<a name="266"><span class="lineNum"> 266 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="267"><span class="lineNum"> 267 </span> :<span class="lineNoCov"> 0 : default:</span></a>
-<a name="268"><span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : rc = OPAL_HARDWARE;</span></a>
-<a name="269"><span class="lineNum"> 269 </span> : : }</a>
-<a name="270"><span class="lineNum"> 270 </span> : : </a>
-<a name="271"><span class="lineNum"> 271 </span> :<span class="lineCov"> 2 : return rc;</span></a>
-<a name="272"><span class="lineNum"> 272 </span> : : }</a>
+<a name="249"><span class="lineNum"> 249 </span> :<span class="lineCov"> 2 : return rc;</span></a>
+<a name="250"><span class="lineNum"> 250 </span> : : }</a>
+<a name="251"><span class="lineNum"> 251 </span> : : </a>
+<a name="252"><span class="lineNum"> 252 </span> :<span class="lineCov"> 2 : static int secboot_tpm_write_bank(struct list_head *bank, int section)</span></a>
+<a name="253"><span class="lineNum"> 253 </span> : : {</a>
+<a name="254"><span class="lineNum"> 254 </span> : : int rc;</a>
+<a name="255"><span class="lineNum"> 255 </span> : : </a>
+<a name="256"><span class="lineNum"> 256 </span> :<span class="lineCov"> 2 : switch (section) {</span></a>
+<a name="257"><span class="lineNum"> 257 </span> :<span class="lineCov"> 2 : case SECVAR_VARIABLE_BANK:</span></a>
+<a name="258"><span class="lineNum"> 258 </span> :<span class="lineCov"> 2 : rc = secboot_tpm_write_variable_bank(bank);</span></a>
+<a name="259"><span class="lineNum"> 259 </span> :<span class="lineCov"> 2 : break;</span></a>
+<a name="260"><span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : case SECVAR_UPDATE_BANK:</span></a>
+<a name="261"><span class="lineNum"> 261 </span> :<span class="lineNoCov"> 0 : memset(secboot_image-&gt;update, 0, SECBOOT_UPDATE_BANK_SIZE);</span></a>
+<a name="262"><span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : rc = secboot_serialize_bank(bank, secboot_image-&gt;update,</span></a>
+<a name="263"><span class="lineNum"> 263 </span> : : SECBOOT_UPDATE_BANK_SIZE, 0);</a>
+<a name="264"><span class="lineNum"> 264 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
+<a name="265"><span class="lineNum"> 265 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="266"><span class="lineNum"> 266 </span> : : </a>
+<a name="267"><span class="lineNum"> 267 </span> :<span class="lineNoCov"> 0 : rc = flash_secboot_write(0, secboot_image,</span></a>
+<a name="268"><span class="lineNum"> 268 </span> : : sizeof(struct secboot));</a>
+<a name="269"><span class="lineNum"> 269 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="270"><span class="lineNum"> 270 </span> :<span class="lineNoCov"> 0 : default:</span></a>
+<a name="271"><span class="lineNum"> 271 </span> :<span class="lineNoCov"> 0 : rc = OPAL_HARDWARE;</span></a>
+<a name="272"><span class="lineNum"> 272 </span> : : }</a>
<a name="273"><span class="lineNum"> 273 </span> : : </a>
-<a name="274"><span class="lineNum"> 274 </span> : : </a>
-<a name="275"><span class="lineNum"> 275 </span> : : /*</a>
-<a name="276"><span class="lineNum"> 276 </span> : : * Deserialize a single secvar from a buffer.</a>
-<a name="277"><span class="lineNum"> 277 </span> : : * Returns an advanced pointer, and an allocated secvar in *var.</a>
-<a name="278"><span class="lineNum"> 278 </span> : : * Returns NULL if out of bounds reached, or out of memory.</a>
-<a name="279"><span class="lineNum"> 279 </span> : : */</a>
-<a name="280"><span class="lineNum"> 280 </span> :<span class="lineCov"> 14 : static int secboot_deserialize_secvar(struct secvar **var, char **src, const char *end)</span></a>
-<a name="281"><span class="lineNum"> 281 </span> : : {</a>
-<a name="282"><span class="lineNum"> 282 </span> : : uint64_t key_len;</a>
-<a name="283"><span class="lineNum"> 283 </span> : : uint64_t data_size;</a>
-<a name="284"><span class="lineNum"> 284 </span> : : struct secvar *ret;</a>
-<a name="285"><span class="lineNum"> 285 </span> : : </a>
-<a name="286"><span class="lineNum"> 286 </span> :<span class="lineCov"> 14 : assert(var);</span></a>
-<a name="287"><span class="lineNum"> 287 </span> : : </a>
-<a name="288"><span class="lineNum"> 288 </span> : : /* Load in the two header values */</a>
-<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 14 : key_len = be64_to_cpu(*((uint64_t *) *src));</span></a>
-<a name="290"><span class="lineNum"> 290 </span> :<span class="lineCov"> 14 : *src += sizeof(uint64_t);</span></a>
-<a name="291"><span class="lineNum"> 291 </span> :<span class="lineCov"> 14 : data_size = be64_to_cpu(*((uint64_t *) *src));</span></a>
-<a name="292"><span class="lineNum"> 292 </span> :<span class="lineCov"> 14 : *src += sizeof(uint64_t);</span></a>
-<a name="293"><span class="lineNum"> 293 </span> : : </a>
-<a name="294"><span class="lineNum"> 294 </span> : : /* Check if we've reached the last var to deserialize */</a>
-<a name="295"><span class="lineNum"> 295 </span> :<span class="lineCov"> 14 : if ((key_len == 0) &amp;&amp; (data_size == 0)) {</span></a>
-<a name="296"><span class="lineNum"> 296 </span> :<span class="lineCov"> 6 : return OPAL_EMPTY;</span></a>
-<a name="297"><span class="lineNum"> 297 </span> : : }</a>
-<a name="298"><span class="lineNum"> 298 </span> : : </a>
-<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 8 : if (key_len &gt; SECVAR_MAX_KEY_LEN) {</span></a>
-<a name="300"><span class="lineNum"> 300 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Deserialization failed: key length exceeded maximum value&quot;</span></a>
-<a name="301"><span class="lineNum"> 301 </span> : : &quot;%llu &gt; %u&quot;, key_len, SECVAR_MAX_KEY_LEN);</a>
-<a name="302"><span class="lineNum"> 302 </span> :<span class="lineNoCov"> 0 : return OPAL_RESOURCE;</span></a>
-<a name="303"><span class="lineNum"> 303 </span> : : }</a>
-<a name="304"><span class="lineNum"> 304 </span> :<span class="lineCov"> 8 : if (data_size &gt; SECBOOT_TPM_MAX_VAR_SIZE) {</span></a>
-<a name="305"><span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Deserialization failed: data size exceeded maximum value&quot;</span></a>
-<a name="306"><span class="lineNum"> 306 </span> : : &quot;%llu &gt; %u&quot;, key_len, SECBOOT_TPM_MAX_VAR_SIZE);</a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : return OPAL_RESOURCE;</span></a>
-<a name="308"><span class="lineNum"> 308 </span> : : }</a>
-<a name="309"><span class="lineNum"> 309 </span> : : </a>
-<a name="310"><span class="lineNum"> 310 </span> : : /* Make sure these fields aren't oversized... */</a>
-<a name="311"><span class="lineNum"> 311 </span> :<span class="lineCov"> 8 : if ((*src + key_len + data_size) &gt; end) {</span></a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : *var = NULL;</span></a>
-<a name="313"><span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;key_len or data_size exceeded the expected bounds&quot;);</span></a>
-<a name="314"><span class="lineNum"> 314 </span> :<span class="lineNoCov"> 0 : return OPAL_RESOURCE;</span></a>
-<a name="315"><span class="lineNum"> 315 </span> : : }</a>
-<a name="316"><span class="lineNum"> 316 </span> : : </a>
-<a name="317"><span class="lineNum"> 317 </span> :<span class="lineCov"> 8 : ret = alloc_secvar(key_len, data_size);</span></a>
-<a name="318"><span class="lineNum"> 318 </span> :<span class="lineCov"> 8 : if (!ret) {</span></a>
-<a name="319"><span class="lineNum"> 319 </span> :<span class="lineNoCov"> 0 : *var = NULL;</span></a>
-<a name="320"><span class="lineNum"> 320 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Out of memory, could not allocate new secvar&quot;);</span></a>
-<a name="321"><span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : return OPAL_NO_MEM;</span></a>
-<a name="322"><span class="lineNum"> 322 </span> : : }</a>
-<a name="323"><span class="lineNum"> 323 </span> : : </a>
-<a name="324"><span class="lineNum"> 324 </span> : : /* Load in variable-sized data */</a>
-<a name="325"><span class="lineNum"> 325 </span> :<span class="lineCov"> 8 : memcpy(ret-&gt;key, *src, ret-&gt;key_len);</span></a>
-<a name="326"><span class="lineNum"> 326 </span> :<span class="lineCov"> 8 : *src += ret-&gt;key_len;</span></a>
-<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 8 : memcpy(ret-&gt;data, *src, ret-&gt;data_size);</span></a>
-<a name="328"><span class="lineNum"> 328 </span> :<span class="lineCov"> 8 : *src += ret-&gt;data_size;</span></a>
-<a name="329"><span class="lineNum"> 329 </span> : : </a>
-<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 8 : *var = ret;</span></a>
-<a name="331"><span class="lineNum"> 331 </span> : : </a>
-<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 8 : return OPAL_SUCCESS;</span></a>
-<a name="333"><span class="lineNum"> 333 </span> : : }</a>
+<a name="274"><span class="lineNum"> 274 </span> :<span class="lineCov"> 2 : return rc;</span></a>
+<a name="275"><span class="lineNum"> 275 </span> : : }</a>
+<a name="276"><span class="lineNum"> 276 </span> : : </a>
+<a name="277"><span class="lineNum"> 277 </span> : : </a>
+<a name="278"><span class="lineNum"> 278 </span> : : /*</a>
+<a name="279"><span class="lineNum"> 279 </span> : : * Deserialize a single secvar from a buffer.</a>
+<a name="280"><span class="lineNum"> 280 </span> : : * Returns an advanced pointer, and an allocated secvar in *var.</a>
+<a name="281"><span class="lineNum"> 281 </span> : : * Returns NULL if out of bounds reached, or out of memory.</a>
+<a name="282"><span class="lineNum"> 282 </span> : : */</a>
+<a name="283"><span class="lineNum"> 283 </span> :<span class="lineCov"> 8 : static int secboot_deserialize_secvar(struct secvar **var, char **src, const char *end)</span></a>
+<a name="284"><span class="lineNum"> 284 </span> : : {</a>
+<a name="285"><span class="lineNum"> 285 </span> : : uint64_t key_len;</a>
+<a name="286"><span class="lineNum"> 286 </span> : : uint64_t data_size;</a>
+<a name="287"><span class="lineNum"> 287 </span> : : struct secvar *ret;</a>
+<a name="288"><span class="lineNum"> 288 </span> : : </a>
+<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 8 : assert(var);</span></a>
+<a name="290"><span class="lineNum"> 290 </span> : : </a>
+<a name="291"><span class="lineNum"> 291 </span> : : /* Load in the two header values */</a>
+<a name="292"><span class="lineNum"> 292 </span> :<span class="lineCov"> 8 : key_len = be64_to_cpu(*((uint64_t *) *src));</span></a>
+<a name="293"><span class="lineNum"> 293 </span> :<span class="lineCov"> 8 : *src += sizeof(uint64_t);</span></a>
+<a name="294"><span class="lineNum"> 294 </span> :<span class="lineCov"> 8 : data_size = be64_to_cpu(*((uint64_t *) *src));</span></a>
+<a name="295"><span class="lineNum"> 295 </span> :<span class="lineCov"> 8 : *src += sizeof(uint64_t);</span></a>
+<a name="296"><span class="lineNum"> 296 </span> : : </a>
+<a name="297"><span class="lineNum"> 297 </span> : : /* Check if we've reached the last var to deserialize */</a>
+<a name="298"><span class="lineNum"> 298 </span> :<span class="lineCov"> 8 : if ((key_len == 0) &amp;&amp; (data_size == 0)) {</span></a>
+<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 4 : return OPAL_EMPTY;</span></a>
+<a name="300"><span class="lineNum"> 300 </span> : : }</a>
+<a name="301"><span class="lineNum"> 301 </span> : : </a>
+<a name="302"><span class="lineNum"> 302 </span> :<span class="lineCov"> 4 : if (key_len &gt; SECVAR_MAX_KEY_LEN) {</span></a>
+<a name="303"><span class="lineNum"> 303 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Deserialization failed: key length exceeded maximum value&quot;</span></a>
+<a name="304"><span class="lineNum"> 304 </span> : : &quot;%llu &gt; %u&quot;, key_len, SECVAR_MAX_KEY_LEN);</a>
+<a name="305"><span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : return OPAL_RESOURCE;</span></a>
+<a name="306"><span class="lineNum"> 306 </span> : : }</a>
+<a name="307"><span class="lineNum"> 307 </span> :<span class="lineCov"> 4 : if (data_size &gt; SECBOOT_TPM_MAX_VAR_SIZE) {</span></a>
+<a name="308"><span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Deserialization failed: data size exceeded maximum value&quot;</span></a>
+<a name="309"><span class="lineNum"> 309 </span> : : &quot;%llu &gt; %u&quot;, key_len, SECBOOT_TPM_MAX_VAR_SIZE);</a>
+<a name="310"><span class="lineNum"> 310 </span> :<span class="lineNoCov"> 0 : return OPAL_RESOURCE;</span></a>
+<a name="311"><span class="lineNum"> 311 </span> : : }</a>
+<a name="312"><span class="lineNum"> 312 </span> : : </a>
+<a name="313"><span class="lineNum"> 313 </span> : : /* Make sure these fields aren't oversized... */</a>
+<a name="314"><span class="lineNum"> 314 </span> :<span class="lineCov"> 4 : if ((*src + key_len + data_size) &gt; end) {</span></a>
+<a name="315"><span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : *var = NULL;</span></a>
+<a name="316"><span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;key_len or data_size exceeded the expected bounds&quot;);</span></a>
+<a name="317"><span class="lineNum"> 317 </span> :<span class="lineNoCov"> 0 : return OPAL_RESOURCE;</span></a>
+<a name="318"><span class="lineNum"> 318 </span> : : }</a>
+<a name="319"><span class="lineNum"> 319 </span> : : </a>
+<a name="320"><span class="lineNum"> 320 </span> :<span class="lineCov"> 4 : ret = alloc_secvar(key_len, data_size);</span></a>
+<a name="321"><span class="lineNum"> 321 </span> :<span class="lineCov"> 4 : if (!ret) {</span></a>
+<a name="322"><span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : *var = NULL;</span></a>
+<a name="323"><span class="lineNum"> 323 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Out of memory, could not allocate new secvar&quot;);</span></a>
+<a name="324"><span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : return OPAL_NO_MEM;</span></a>
+<a name="325"><span class="lineNum"> 325 </span> : : }</a>
+<a name="326"><span class="lineNum"> 326 </span> : : </a>
+<a name="327"><span class="lineNum"> 327 </span> : : /* Load in variable-sized data */</a>
+<a name="328"><span class="lineNum"> 328 </span> :<span class="lineCov"> 4 : memcpy(ret-&gt;key, *src, ret-&gt;key_len);</span></a>
+<a name="329"><span class="lineNum"> 329 </span> :<span class="lineCov"> 4 : *src += ret-&gt;key_len;</span></a>
+<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 4 : memcpy(ret-&gt;data, *src, ret-&gt;data_size);</span></a>
+<a name="331"><span class="lineNum"> 331 </span> :<span class="lineCov"> 4 : *src += ret-&gt;data_size;</span></a>
+<a name="332"><span class="lineNum"> 332 </span> : : </a>
+<a name="333"><span class="lineNum"> 333 </span> :<span class="lineCov"> 4 : *var = ret;</span></a>
<a name="334"><span class="lineNum"> 334 </span> : : </a>
-<a name="335"><span class="lineNum"> 335 </span> : : </a>
-<a name="336"><span class="lineNum"> 336 </span> : : /* Load variables from a flattened buffer into a bank list */</a>
-<a name="337"><span class="lineNum"> 337 </span> :<span class="lineCov"> 6 : static int secboot_tpm_deserialize_from_buffer(struct list_head *bank, char *src,</span></a>
-<a name="338"><span class="lineNum"> 338 </span> : : uint64_t size, uint64_t flags)</a>
-<a name="339"><span class="lineNum"> 339 </span> : : {</a>
-<a name="340"><span class="lineNum"> 340 </span> : : struct secvar *var;</a>
-<a name="341"><span class="lineNum"> 341 </span> : : char *cur;</a>
-<a name="342"><span class="lineNum"> 342 </span> : : char *end;</a>
-<a name="343"><span class="lineNum"> 343 </span> :<span class="lineCov"> 6 : int rc = 0;</span></a>
-<a name="344"><span class="lineNum"> 344 </span> : : </a>
-<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 6 : cur = src;</span></a>
-<a name="346"><span class="lineNum"> 346 </span> :<span class="lineCov"> 6 : end = src + size;</span></a>
+<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 4 : return OPAL_SUCCESS;</span></a>
+<a name="336"><span class="lineNum"> 336 </span> : : }</a>
+<a name="337"><span class="lineNum"> 337 </span> : : </a>
+<a name="338"><span class="lineNum"> 338 </span> : : </a>
+<a name="339"><span class="lineNum"> 339 </span> : : /* Load variables from a flattened buffer into a bank list */</a>
+<a name="340"><span class="lineNum"> 340 </span> :<span class="lineCov"> 4 : static int secboot_tpm_deserialize_from_buffer(struct list_head *bank, char *src,</span></a>
+<a name="341"><span class="lineNum"> 341 </span> : : uint64_t size, uint64_t flags)</a>
+<a name="342"><span class="lineNum"> 342 </span> : : {</a>
+<a name="343"><span class="lineNum"> 343 </span> : : struct secvar *var;</a>
+<a name="344"><span class="lineNum"> 344 </span> : : char *cur;</a>
+<a name="345"><span class="lineNum"> 345 </span> : : char *end;</a>
+<a name="346"><span class="lineNum"> 346 </span> :<span class="lineCov"> 4 : int rc = 0;</span></a>
<a name="347"><span class="lineNum"> 347 </span> : : </a>
-<a name="348"><span class="lineNum"> 348 </span> :<span class="lineCov"> 14 : while (cur &lt; end) {</span></a>
-<a name="349"><span class="lineNum"> 349 </span> : : /* Ensure there is enough space to even check for another var header */</a>
-<a name="350"><span class="lineNum"> 350 </span> :<span class="lineCov"> 14 : if ((end - cur) &lt; (sizeof(uint64_t) * 2))</span></a>
-<a name="351"><span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : break;</span></a>
-<a name="352"><span class="lineNum"> 352 </span> : : </a>
-<a name="353"><span class="lineNum"> 353 </span> :<span class="lineCov"> 14 : rc = secboot_deserialize_secvar(&amp;var, &amp;cur, end);</span></a>
-<a name="354"><span class="lineNum"> 354 </span> :<span class="lineCov"> 14 : switch (rc) {</span></a>
-<a name="355"><span class="lineNum"> 355 </span> :<span class="lineNoCov"> 0 : case OPAL_RESOURCE:</span></a>
-<a name="356"><span class="lineNum"> 356 </span> : : case OPAL_NO_MEM:</a>
-<a name="357"><span class="lineNum"> 357 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
-<a name="358"><span class="lineNum"> 358 </span> :<span class="lineCov"> 6 : case OPAL_EMPTY:</span></a>
-<a name="359"><span class="lineNum"> 359 </span> :<span class="lineCov"> 6 : goto done;</span></a>
-<a name="360"><span class="lineNum"> 360 </span> :<span class="lineCov"> 8 : default: assert(1);</span></a>
-<a name="361"><span class="lineNum"> 361 </span> : : }</a>
-<a name="362"><span class="lineNum"> 362 </span> : : </a>
-<a name="363"><span class="lineNum"> 363 </span> :<span class="lineCov"> 8 : var-&gt;flags |= flags;</span></a>
-<a name="364"><span class="lineNum"> 364 </span> : : </a>
-<a name="365"><span class="lineNum"> 365 </span> :<span class="lineCov"> 8 : list_add_tail(bank, &amp;var-&gt;link);</span></a>
-<a name="366"><span class="lineNum"> 366 </span> : : }</a>
-<a name="367"><span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : done:</span></a>
-<a name="368"><span class="lineNum"> 368 </span> :<span class="lineCov"> 6 : return OPAL_SUCCESS;</span></a>
-<a name="369"><span class="lineNum"> 369 </span> :<span class="lineNoCov"> 0 : fail:</span></a>
-<a name="370"><span class="lineNum"> 370 </span> :<span class="lineNoCov"> 0 : clear_bank_list(bank);</span></a>
-<a name="371"><span class="lineNum"> 371 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
-<a name="372"><span class="lineNum"> 372 </span> : : }</a>
-<a name="373"><span class="lineNum"> 373 </span> : : </a>
-<a name="374"><span class="lineNum"> 374 </span> :<span class="lineCov"> 4 : static int secboot_tpm_load_variable_bank(struct list_head *bank)</span></a>
-<a name="375"><span class="lineNum"> 375 </span> : : {</a>
-<a name="376"><span class="lineNum"> 376 </span> : : char bank_hash[SHA256_DIGEST_LENGTH];</a>
-<a name="377"><span class="lineNum"> 377 </span> :<span class="lineCov"> 4 : uint64_t bit = tpmnv_control_image-&gt;active_bit;</span></a>
-<a name="378"><span class="lineNum"> 378 </span> : : int rc;</a>
-<a name="379"><span class="lineNum"> 379 </span> : : </a>
-<a name="380"><span class="lineNum"> 380 </span> : : /* Check the hash of the bank we loaded from PNOR</a>
-<a name="381"><span class="lineNum"> 381 </span> : : * versus the expected hash in TPM NV */</a>
-<a name="382"><span class="lineNum"> 382 </span> :<span class="lineCov"> 4 : rc = calc_bank_hash(bank_hash,</span></a>
-<a name="383"><span class="lineNum"> 383 </span> :<span class="lineCov"> 4 : secboot_image-&gt;bank[bit],</span></a>
-<a name="384"><span class="lineNum"> 384 </span> : : SECBOOT_VARIABLE_BANK_SIZE);</a>
-<a name="385"><span class="lineNum"> 385 </span> :<span class="lineCov"> 4 : if (rc)</span></a>
-<a name="386"><span class="lineNum"> 386 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
-<a name="387"><span class="lineNum"> 387 </span> : : </a>
-<a name="388"><span class="lineNum"> 388 </span> :<span class="lineCov"> 4 : if (memcmp(bank_hash,</span></a>
-<a name="389"><span class="lineNum"> 389 </span> :<span class="lineCov"> 4 : tpmnv_control_image-&gt;bank_hash[bit],</span></a>
-<a name="390"><span class="lineNum"> 390 </span> : : SHA256_DIGEST_LENGTH))</a>
-<a name="391"><span class="lineNum"> 391 </span> : : /* Tampered pnor space detected, abandon ship */</a>
-<a name="392"><span class="lineNum"> 392 </span> :<span class="lineCov"> 1 : return OPAL_PERMISSION;</span></a>
-<a name="393"><span class="lineNum"> 393 </span> : : </a>
-<a name="394"><span class="lineNum"> 394 </span> :<span class="lineCov"> 3 : rc = secboot_tpm_deserialize_from_buffer(bank, tpmnv_vars_image-&gt;vars, tpmnv_vars_size, SECVAR_FLAG_PROTECTED);</span></a>
-<a name="395"><span class="lineNum"> 395 </span> :<span class="lineCov"> 3 : if (rc)</span></a>
-<a name="396"><span class="lineNum"> 396 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
-<a name="397"><span class="lineNum"> 397 </span> : : </a>
-<a name="398"><span class="lineNum"> 398 </span> :<span class="lineCov"> 3 : return secboot_tpm_deserialize_from_buffer(bank, secboot_image-&gt;bank[bit], SECBOOT_VARIABLE_BANK_SIZE, 0);</span></a>
-<a name="399"><span class="lineNum"> 399 </span> : : }</a>
-<a name="400"><span class="lineNum"> 400 </span> : : </a>
+<a name="348"><span class="lineNum"> 348 </span> :<span class="lineCov"> 4 : cur = src;</span></a>
+<a name="349"><span class="lineNum"> 349 </span> :<span class="lineCov"> 4 : end = src + size;</span></a>
+<a name="350"><span class="lineNum"> 350 </span> : : </a>
+<a name="351"><span class="lineNum"> 351 </span> :<span class="lineCov"> 8 : while (cur &lt; end) {</span></a>
+<a name="352"><span class="lineNum"> 352 </span> : : /* Ensure there is enough space to even check for another var header */</a>
+<a name="353"><span class="lineNum"> 353 </span> :<span class="lineCov"> 8 : if ((end - cur) &lt; (sizeof(uint64_t) * 2))</span></a>
+<a name="354"><span class="lineNum"> 354 </span> :<span class="lineNoCov"> 0 : break;</span></a>
+<a name="355"><span class="lineNum"> 355 </span> : : </a>
+<a name="356"><span class="lineNum"> 356 </span> :<span class="lineCov"> 8 : rc = secboot_deserialize_secvar(&amp;var, &amp;cur, end);</span></a>
+<a name="357"><span class="lineNum"> 357 </span> :<span class="lineCov"> 8 : switch (rc) {</span></a>
+<a name="358"><span class="lineNum"> 358 </span> :<span class="lineNoCov"> 0 : case OPAL_RESOURCE:</span></a>
+<a name="359"><span class="lineNum"> 359 </span> : : case OPAL_NO_MEM:</a>
+<a name="360"><span class="lineNum"> 360 </span> :<span class="lineNoCov"> 0 : goto fail;</span></a>
+<a name="361"><span class="lineNum"> 361 </span> :<span class="lineCov"> 4 : case OPAL_EMPTY:</span></a>
+<a name="362"><span class="lineNum"> 362 </span> :<span class="lineCov"> 4 : goto done;</span></a>
+<a name="363"><span class="lineNum"> 363 </span> :<span class="lineCov"> 4 : default: assert(1);</span></a>
+<a name="364"><span class="lineNum"> 364 </span> : : }</a>
+<a name="365"><span class="lineNum"> 365 </span> : : </a>
+<a name="366"><span class="lineNum"> 366 </span> :<span class="lineCov"> 4 : var-&gt;flags |= flags;</span></a>
+<a name="367"><span class="lineNum"> 367 </span> : : </a>
+<a name="368"><span class="lineNum"> 368 </span> :<span class="lineCov"> 4 : list_add_tail(bank, &amp;var-&gt;link);</span></a>
+<a name="369"><span class="lineNum"> 369 </span> : : }</a>
+<a name="370"><span class="lineNum"> 370 </span> :<span class="lineNoCov"> 0 : done:</span></a>
+<a name="371"><span class="lineNum"> 371 </span> :<span class="lineCov"> 4 : return OPAL_SUCCESS;</span></a>
+<a name="372"><span class="lineNum"> 372 </span> :<span class="lineNoCov"> 0 : fail:</span></a>
+<a name="373"><span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : clear_bank_list(bank);</span></a>
+<a name="374"><span class="lineNum"> 374 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
+<a name="375"><span class="lineNum"> 375 </span> : : }</a>
+<a name="376"><span class="lineNum"> 376 </span> : : </a>
+<a name="377"><span class="lineNum"> 377 </span> : : </a>
+<a name="378"><span class="lineNum"> 378 </span> : : /* Helper to validate the current active SECBOOT bank's data against the hash stored in the TPM */</a>
+<a name="379"><span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : static int compare_bank_hash(void)</span></a>
+<a name="380"><span class="lineNum"> 380 </span> : : {</a>
+<a name="381"><span class="lineNum"> 381 </span> : : char bank_hash[SHA256_DIGEST_LENGTH];</a>
+<a name="382"><span class="lineNum"> 382 </span> :<span class="lineNoCov"> 0 : uint64_t bit = tpmnv_control_image-&gt;active_bit;</span></a>
+<a name="383"><span class="lineNum"> 383 </span> : : int rc;</a>
+<a name="384"><span class="lineNum"> 384 </span> : : </a>
+<a name="385"><span class="lineNum"> 385 </span> : : /* Check the hash of the bank we loaded from PNOR</a>
+<a name="386"><span class="lineNum"> 386 </span> : : * versus the expected hash in TPM NV */</a>
+<a name="387"><span class="lineNum"> 387 </span> :<span class="lineNoCov"> 0 : rc = calc_bank_hash(bank_hash,</span></a>
+<a name="388"><span class="lineNum"> 388 </span> :<span class="lineNoCov"> 0 : secboot_image-&gt;bank[bit],</span></a>
+<a name="389"><span class="lineNum"> 389 </span> : : SECBOOT_VARIABLE_BANK_SIZE);</a>
+<a name="390"><span class="lineNum"> 390 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
+<a name="391"><span class="lineNum"> 391 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
+<a name="392"><span class="lineNum"> 392 </span> : : </a>
+<a name="393"><span class="lineNum"> 393 </span> :<span class="lineNoCov"> 0 : if (memcmp(bank_hash,</span></a>
+<a name="394"><span class="lineNum"> 394 </span> :<span class="lineNoCov"> 0 : tpmnv_control_image-&gt;bank_hash[bit],</span></a>
+<a name="395"><span class="lineNum"> 395 </span> : : SHA256_DIGEST_LENGTH))</a>
+<a name="396"><span class="lineNum"> 396 </span> : : /* Tampered pnor space detected, abandon ship */</a>
+<a name="397"><span class="lineNum"> 397 </span> :<span class="lineNoCov"> 0 : return OPAL_PERMISSION;</span></a>
+<a name="398"><span class="lineNum"> 398 </span> : : </a>
+<a name="399"><span class="lineNum"> 399 </span> :<span class="lineNoCov"> 0 : return OPAL_SUCCESS;</span></a>
+<a name="400"><span class="lineNum"> 400 </span> : : }</a>
<a name="401"><span class="lineNum"> 401 </span> : : </a>
-<a name="402"><span class="lineNum"> 402 </span> :<span class="lineCov"> 4 : static int secboot_tpm_load_bank(struct list_head *bank, int section)</span></a>
-<a name="403"><span class="lineNum"> 403 </span> : : {</a>
-<a name="404"><span class="lineNum"> 404 </span> :<span class="lineCov"> 4 : switch (section) {</span></a>
-<a name="405"><span class="lineNum"> 405 </span> :<span class="lineCov"> 4 : case SECVAR_VARIABLE_BANK:</span></a>
-<a name="406"><span class="lineNum"> 406 </span> :<span class="lineCov"> 4 : return secboot_tpm_load_variable_bank(bank);</span></a>
-<a name="407"><span class="lineNum"> 407 </span> :<span class="lineNoCov"> 0 : case SECVAR_UPDATE_BANK:</span></a>
-<a name="408"><span class="lineNum"> 408 </span> :<span class="lineNoCov"> 0 : return secboot_tpm_deserialize_from_buffer(bank, secboot_image-&gt;update, SECBOOT_UPDATE_BANK_SIZE, 0);</span></a>
-<a name="409"><span class="lineNum"> 409 </span> : : }</a>
-<a name="410"><span class="lineNum"> 410 </span> : : </a>
-<a name="411"><span class="lineNum"> 411 </span> :<span class="lineNoCov"> 0 : return OPAL_HARDWARE;</span></a>
-<a name="412"><span class="lineNum"> 412 </span> : : }</a>
-<a name="413"><span class="lineNum"> 413 </span> : : </a>
-<a name="414"><span class="lineNum"> 414 </span> :<span class="lineNoCov"> 0 : static int secboot_tpm_get_tpmnv_names(char *nv_vars_name, char *nv_control_name)</span></a>
-<a name="415"><span class="lineNum"> 415 </span> : : {</a>
-<a name="416"><span class="lineNum"> 416 </span> : : TPMS_NV_PUBLIC nv_public; /* Throwaway, we only want the name field */</a>
-<a name="417"><span class="lineNum"> 417 </span> : : TPM2B_NAME vars_tmp;</a>
-<a name="418"><span class="lineNum"> 418 </span> : : TPM2B_NAME control_tmp;</a>
-<a name="419"><span class="lineNum"> 419 </span> : : int rc;</a>
-<a name="420"><span class="lineNum"> 420 </span> : : </a>
-<a name="421"><span class="lineNum"> 421 </span> :<span class="lineNoCov"> 0 : rc = tpmnv_ops.readpublic(SECBOOT_TPMNV_VARS_INDEX,</span></a>
-<a name="422"><span class="lineNum"> 422 </span> : : &amp;nv_public,</a>
-<a name="423"><span class="lineNum"> 423 </span> : : &amp;vars_tmp);</a>
-<a name="424"><span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
-<a name="425"><span class="lineNum"> 425 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to readpublic from the VARS index, rc=%d\n&quot;, rc);</span></a>
-<a name="426"><span class="lineNum"> 426 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
-<a name="427"><span class="lineNum"> 427 </span> : : }</a>
-<a name="428"><span class="lineNum"> 428 </span> :<span class="lineNoCov"> 0 : rc = tpmnv_ops.readpublic(SECBOOT_TPMNV_CONTROL_INDEX,</span></a>
-<a name="429"><span class="lineNum"> 429 </span> : : &amp;nv_public,</a>
-<a name="430"><span class="lineNum"> 430 </span> : : &amp;control_tmp);</a>
-<a name="431"><span class="lineNum"> 431 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
-<a name="432"><span class="lineNum"> 432 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to readpublic from the CONTROL index, rc=%d\n&quot;, rc);</span></a>
-<a name="433"><span class="lineNum"> 433 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
-<a name="434"><span class="lineNum"> 434 </span> : : }</a>
-<a name="435"><span class="lineNum"> 435 </span> : : </a>
-<a name="436"><span class="lineNum"> 436 </span> :<span class="lineNoCov"> 0 : memcpy(nv_vars_name, vars_tmp.t.name, MIN(sizeof(tpmnv_vars_name), vars_tmp.t.size));</span></a>
-<a name="437"><span class="lineNum"> 437 </span> :<span class="lineNoCov"> 0 : memcpy(nv_control_name, control_tmp.t.name, MIN(sizeof(tpmnv_control_name), control_tmp.t.size));</span></a>
-<a name="438"><span class="lineNum"> 438 </span> : : </a>
-<a name="439"><span class="lineNum"> 439 </span> :<span class="lineNoCov"> 0 : return OPAL_SUCCESS;</span></a>
-<a name="440"><span class="lineNum"> 440 </span> : : }</a>
-<a name="441"><span class="lineNum"> 441 </span> : : </a>
-<a name="442"><span class="lineNum"> 442 </span> : : </a>
-<a name="443"><span class="lineNum"> 443 </span> : : /* Ensure the NV indices were defined with the correct set of attributes */</a>
-<a name="444"><span class="lineNum"> 444 </span> :<span class="lineNoCov"> 0 : static int secboot_tpm_check_tpmnv_attrs(char *nv_vars_name, char *nv_control_name)</span></a>
-<a name="445"><span class="lineNum"> 445 </span> : : {</a>
-<a name="446"><span class="lineNum"> 446 </span> :<span class="lineNoCov"> 0 : if (memcmp(tpmnv_vars_name,</span></a>
-<a name="447"><span class="lineNum"> 447 </span> : : nv_vars_name,</a>
-<a name="448"><span class="lineNum"> 448 </span> : : sizeof(tpmnv_vars_name))) {</a>
-<a name="449"><span class="lineNum"> 449 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;VARS index not defined with the correct attributes\n&quot;);</span></a>
-<a name="450"><span class="lineNum"> 450 </span> :<span class="lineNoCov"> 0 : return OPAL_RESOURCE;</span></a>
-<a name="451"><span class="lineNum"> 451 </span> : : }</a>
-<a name="452"><span class="lineNum"> 452 </span> :<span class="lineNoCov"> 0 : if (memcmp(tpmnv_control_name,</span></a>
-<a name="453"><span class="lineNum"> 453 </span> : : nv_control_name,</a>
-<a name="454"><span class="lineNum"> 454 </span> : : sizeof(tpmnv_control_name))) {</a>
-<a name="455"><span class="lineNum"> 455 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;CONTROL index not defined with the correct attributes\n&quot;);</span></a>
-<a name="456"><span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : return OPAL_RESOURCE;</span></a>
-<a name="457"><span class="lineNum"> 457 </span> : : }</a>
-<a name="458"><span class="lineNum"> 458 </span> : : </a>
-<a name="459"><span class="lineNum"> 459 </span> :<span class="lineNoCov"> 0 : return OPAL_SUCCESS;</span></a>
-<a name="460"><span class="lineNum"> 460 </span> : : }</a>
-<a name="461"><span class="lineNum"> 461 </span> : : </a>
-<a name="462"><span class="lineNum"> 462 </span> :<span class="lineNoCov"> 0 : static bool secboot_tpm_check_provisioned_indices(char *nv_vars_name, char *nv_control_name)</span></a>
-<a name="463"><span class="lineNum"> 463 </span> : : {</a>
-<a name="464"><span class="lineNum"> 464 </span> : : /* Check for provisioned NV indices, redefine them if detected. */</a>
-<a name="465"><span class="lineNum"> 465 </span> :<span class="lineNoCov"> 0 : if (!memcmp(tpmnv_vars_prov_name,</span></a>
-<a name="466"><span class="lineNum"> 466 </span> : : nv_vars_name,</a>
-<a name="467"><span class="lineNum"> 467 </span> :<span class="lineNoCov"> 0 : sizeof(tpmnv_vars_prov_name)) &amp;&amp;</span></a>
-<a name="468"><span class="lineNum"> 468 </span> :<span class="lineNoCov"> 0 : !memcmp(tpmnv_control_prov_name,</span></a>
-<a name="469"><span class="lineNum"> 469 </span> : : nv_control_name,</a>
-<a name="470"><span class="lineNum"> 470 </span> : : sizeof(tpmnv_control_prov_name))) {</a>
-<a name="471"><span class="lineNum"> 471 </span> :<span class="lineNoCov"> 0 : return true;</span></a>
-<a name="472"><span class="lineNum"> 472 </span> : : }</a>
-<a name="473"><span class="lineNum"> 473 </span> : : </a>
-<a name="474"><span class="lineNum"> 474 </span> : : /*</a>
-<a name="475"><span class="lineNum"> 475 </span> : : * If one matches but the other doesn't, do NOT redefine.</a>
-<a name="476"><span class="lineNum"> 476 </span> : : * The next step should detect they don't match the expected values</a>
-<a name="477"><span class="lineNum"> 477 </span> : : * and fail the boot.</a>
-<a name="478"><span class="lineNum"> 478 </span> : : */</a>
-<a name="479"><span class="lineNum"> 479 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
-<a name="480"><span class="lineNum"> 480 </span> : : }</a>
-<a name="481"><span class="lineNum"> 481 </span> : : </a>
-<a name="482"><span class="lineNum"> 482 </span> :<span class="lineCov"> 1 : static int secboot_tpm_define_indices(void)</span></a>
-<a name="483"><span class="lineNum"> 483 </span> : : {</a>
-<a name="484"><span class="lineNum"> 484 </span> :<span class="lineCov"> 1 : int rc = OPAL_SUCCESS;</span></a>
-<a name="485"><span class="lineNum"> 485 </span> : : </a>
-<a name="486"><span class="lineNum"> 486 </span> :<span class="lineCov"> 1 : rc = tpmnv_ops.definespace(SECBOOT_TPMNV_VARS_INDEX, tpmnv_vars_size);</span></a>
-<a name="487"><span class="lineNum"> 487 </span> :<span class="lineCov"> 1 : if (rc) {</span></a>
-<a name="488"><span class="lineNum"> 488 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to define the VARS index, rc=%d\n&quot;, rc);</span></a>
-<a name="489"><span class="lineNum"> 489 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
-<a name="490"><span class="lineNum"> 490 </span> : : }</a>
-<a name="491"><span class="lineNum"> 491 </span> : : </a>
-<a name="492"><span class="lineNum"> 492 </span> :<span class="lineCov"> 1 : rc = tpmnv_ops.definespace(SECBOOT_TPMNV_CONTROL_INDEX, sizeof(struct tpmnv_control));</span></a>
-<a name="493"><span class="lineNum"> 493 </span> :<span class="lineCov"> 1 : if (rc) {</span></a>
-<a name="494"><span class="lineNum"> 494 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to define the CONTROL index, rc=%d\n&quot;, rc);</span></a>
-<a name="495"><span class="lineNum"> 495 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
-<a name="496"><span class="lineNum"> 496 </span> : : }</a>
-<a name="497"><span class="lineNum"> 497 </span> : : </a>
-<a name="498"><span class="lineNum"> 498 </span> :<span class="lineCov"> 1 : rc = tpmnv_format();</span></a>
-<a name="499"><span class="lineNum"> 499 </span> :<span class="lineCov"> 1 : if (rc)</span></a>
-<a name="500"><span class="lineNum"> 500 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
-<a name="501"><span class="lineNum"> 501 </span> : : </a>
-<a name="502"><span class="lineNum"> 502 </span> : : /* TPM NV just got redefined, so unconditionally format the SECBOOT partition */</a>
-<a name="503"><span class="lineNum"> 503 </span> :<span class="lineCov"> 1 : return secboot_format();</span></a>
-<a name="504"><span class="lineNum"> 504 </span> : : }</a>
+<a name="402"><span class="lineNum"> 402 </span> : : </a>
+<a name="403"><span class="lineNum"> 403 </span> :<span class="lineCov"> 2 : static int secboot_tpm_load_variable_bank(struct list_head *bank)</span></a>
+<a name="404"><span class="lineNum"> 404 </span> : : {</a>
+<a name="405"><span class="lineNum"> 405 </span> :<span class="lineCov"> 2 : uint64_t bit = tpmnv_control_image-&gt;active_bit;</span></a>
+<a name="406"><span class="lineNum"> 406 </span> : : int rc;</a>
+<a name="407"><span class="lineNum"> 407 </span> : : </a>
+<a name="408"><span class="lineNum"> 408 </span> :<span class="lineCov"> 2 : rc = secboot_tpm_deserialize_from_buffer(bank, tpmnv_vars_image-&gt;vars, tpmnv_vars_size, SECVAR_FLAG_PROTECTED);</span></a>
+<a name="409"><span class="lineNum"> 409 </span> :<span class="lineCov"> 2 : if (rc)</span></a>
+<a name="410"><span class="lineNum"> 410 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
+<a name="411"><span class="lineNum"> 411 </span> : : </a>
+<a name="412"><span class="lineNum"> 412 </span> :<span class="lineCov"> 2 : return secboot_tpm_deserialize_from_buffer(bank, secboot_image-&gt;bank[bit], SECBOOT_VARIABLE_BANK_SIZE, 0);</span></a>
+<a name="413"><span class="lineNum"> 413 </span> : : }</a>
+<a name="414"><span class="lineNum"> 414 </span> : : </a>
+<a name="415"><span class="lineNum"> 415 </span> : : </a>
+<a name="416"><span class="lineNum"> 416 </span> :<span class="lineCov"> 2 : static int secboot_tpm_load_bank(struct list_head *bank, int section)</span></a>
+<a name="417"><span class="lineNum"> 417 </span> : : {</a>
+<a name="418"><span class="lineNum"> 418 </span> :<span class="lineCov"> 2 : switch (section) {</span></a>
+<a name="419"><span class="lineNum"> 419 </span> :<span class="lineCov"> 2 : case SECVAR_VARIABLE_BANK:</span></a>
+<a name="420"><span class="lineNum"> 420 </span> :<span class="lineCov"> 2 : return secboot_tpm_load_variable_bank(bank);</span></a>
+<a name="421"><span class="lineNum"> 421 </span> :<span class="lineNoCov"> 0 : case SECVAR_UPDATE_BANK:</span></a>
+<a name="422"><span class="lineNum"> 422 </span> :<span class="lineNoCov"> 0 : return secboot_tpm_deserialize_from_buffer(bank, secboot_image-&gt;update, SECBOOT_UPDATE_BANK_SIZE, 0);</span></a>
+<a name="423"><span class="lineNum"> 423 </span> : : }</a>
+<a name="424"><span class="lineNum"> 424 </span> : : </a>
+<a name="425"><span class="lineNum"> 425 </span> :<span class="lineNoCov"> 0 : return OPAL_HARDWARE;</span></a>
+<a name="426"><span class="lineNum"> 426 </span> : : }</a>
+<a name="427"><span class="lineNum"> 427 </span> : : </a>
+<a name="428"><span class="lineNum"> 428 </span> :<span class="lineNoCov"> 0 : static int secboot_tpm_get_tpmnv_names(char *nv_vars_name, char *nv_control_name)</span></a>
+<a name="429"><span class="lineNum"> 429 </span> : : {</a>
+<a name="430"><span class="lineNum"> 430 </span> : : TPMS_NV_PUBLIC nv_public; /* Throwaway, we only want the name field */</a>
+<a name="431"><span class="lineNum"> 431 </span> : : TPM2B_NAME vars_tmp;</a>
+<a name="432"><span class="lineNum"> 432 </span> : : TPM2B_NAME control_tmp;</a>
+<a name="433"><span class="lineNum"> 433 </span> : : int rc;</a>
+<a name="434"><span class="lineNum"> 434 </span> : : </a>
+<a name="435"><span class="lineNum"> 435 </span> :<span class="lineNoCov"> 0 : rc = tpmnv_ops.readpublic(SECBOOT_TPMNV_VARS_INDEX,</span></a>
+<a name="436"><span class="lineNum"> 436 </span> : : &amp;nv_public,</a>
+<a name="437"><span class="lineNum"> 437 </span> : : &amp;vars_tmp);</a>
+<a name="438"><span class="lineNum"> 438 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
+<a name="439"><span class="lineNum"> 439 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to readpublic from the VARS index, rc=%d\n&quot;, rc);</span></a>
+<a name="440"><span class="lineNum"> 440 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
+<a name="441"><span class="lineNum"> 441 </span> : : }</a>
+<a name="442"><span class="lineNum"> 442 </span> :<span class="lineNoCov"> 0 : rc = tpmnv_ops.readpublic(SECBOOT_TPMNV_CONTROL_INDEX,</span></a>
+<a name="443"><span class="lineNum"> 443 </span> : : &amp;nv_public,</a>
+<a name="444"><span class="lineNum"> 444 </span> : : &amp;control_tmp);</a>
+<a name="445"><span class="lineNum"> 445 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
+<a name="446"><span class="lineNum"> 446 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to readpublic from the CONTROL index, rc=%d\n&quot;, rc);</span></a>
+<a name="447"><span class="lineNum"> 447 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
+<a name="448"><span class="lineNum"> 448 </span> : : }</a>
+<a name="449"><span class="lineNum"> 449 </span> : : </a>
+<a name="450"><span class="lineNum"> 450 </span> :<span class="lineNoCov"> 0 : memcpy(nv_vars_name, vars_tmp.t.name, MIN(sizeof(tpmnv_vars_name), vars_tmp.t.size));</span></a>
+<a name="451"><span class="lineNum"> 451 </span> :<span class="lineNoCov"> 0 : memcpy(nv_control_name, control_tmp.t.name, MIN(sizeof(tpmnv_control_name), control_tmp.t.size));</span></a>
+<a name="452"><span class="lineNum"> 452 </span> : : </a>
+<a name="453"><span class="lineNum"> 453 </span> :<span class="lineNoCov"> 0 : return OPAL_SUCCESS;</span></a>
+<a name="454"><span class="lineNum"> 454 </span> : : }</a>
+<a name="455"><span class="lineNum"> 455 </span> : : </a>
+<a name="456"><span class="lineNum"> 456 </span> : : </a>
+<a name="457"><span class="lineNum"> 457 </span> : : /* Ensure the NV indices were defined with the correct set of attributes */</a>
+<a name="458"><span class="lineNum"> 458 </span> :<span class="lineNoCov"> 0 : static int secboot_tpm_check_tpmnv_attrs(char *nv_vars_name, char *nv_control_name)</span></a>
+<a name="459"><span class="lineNum"> 459 </span> : : {</a>
+<a name="460"><span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : if (memcmp(tpmnv_vars_name,</span></a>
+<a name="461"><span class="lineNum"> 461 </span> : : nv_vars_name,</a>
+<a name="462"><span class="lineNum"> 462 </span> : : sizeof(tpmnv_vars_name))) {</a>
+<a name="463"><span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;VARS index not defined with the correct attributes\n&quot;);</span></a>
+<a name="464"><span class="lineNum"> 464 </span> :<span class="lineNoCov"> 0 : return OPAL_RESOURCE;</span></a>
+<a name="465"><span class="lineNum"> 465 </span> : : }</a>
+<a name="466"><span class="lineNum"> 466 </span> :<span class="lineNoCov"> 0 : if (memcmp(tpmnv_control_name,</span></a>
+<a name="467"><span class="lineNum"> 467 </span> : : nv_control_name,</a>
+<a name="468"><span class="lineNum"> 468 </span> : : sizeof(tpmnv_control_name))) {</a>
+<a name="469"><span class="lineNum"> 469 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;CONTROL index not defined with the correct attributes\n&quot;);</span></a>
+<a name="470"><span class="lineNum"> 470 </span> :<span class="lineNoCov"> 0 : return OPAL_RESOURCE;</span></a>
+<a name="471"><span class="lineNum"> 471 </span> : : }</a>
+<a name="472"><span class="lineNum"> 472 </span> : : </a>
+<a name="473"><span class="lineNum"> 473 </span> :<span class="lineNoCov"> 0 : return OPAL_SUCCESS;</span></a>
+<a name="474"><span class="lineNum"> 474 </span> : : }</a>
+<a name="475"><span class="lineNum"> 475 </span> : : </a>
+<a name="476"><span class="lineNum"> 476 </span> :<span class="lineNoCov"> 0 : static bool secboot_tpm_check_provisioned_indices(char *nv_vars_name, char *nv_control_name)</span></a>
+<a name="477"><span class="lineNum"> 477 </span> : : {</a>
+<a name="478"><span class="lineNum"> 478 </span> : : /* Check for provisioned NV indices, redefine them if detected. */</a>
+<a name="479"><span class="lineNum"> 479 </span> :<span class="lineNoCov"> 0 : if (!memcmp(tpmnv_vars_prov_name,</span></a>
+<a name="480"><span class="lineNum"> 480 </span> : : nv_vars_name,</a>
+<a name="481"><span class="lineNum"> 481 </span> :<span class="lineNoCov"> 0 : sizeof(tpmnv_vars_prov_name)) &amp;&amp;</span></a>
+<a name="482"><span class="lineNum"> 482 </span> :<span class="lineNoCov"> 0 : !memcmp(tpmnv_control_prov_name,</span></a>
+<a name="483"><span class="lineNum"> 483 </span> : : nv_control_name,</a>
+<a name="484"><span class="lineNum"> 484 </span> : : sizeof(tpmnv_control_prov_name))) {</a>
+<a name="485"><span class="lineNum"> 485 </span> :<span class="lineNoCov"> 0 : return true;</span></a>
+<a name="486"><span class="lineNum"> 486 </span> : : }</a>
+<a name="487"><span class="lineNum"> 487 </span> : : </a>
+<a name="488"><span class="lineNum"> 488 </span> : : /*</a>
+<a name="489"><span class="lineNum"> 489 </span> : : * If one matches but the other doesn't, do NOT redefine.</a>
+<a name="490"><span class="lineNum"> 490 </span> : : * The next step should detect they don't match the expected values</a>
+<a name="491"><span class="lineNum"> 491 </span> : : * and fail the boot.</a>
+<a name="492"><span class="lineNum"> 492 </span> : : */</a>
+<a name="493"><span class="lineNum"> 493 </span> :<span class="lineNoCov"> 0 : return false;</span></a>
+<a name="494"><span class="lineNum"> 494 </span> : : }</a>
+<a name="495"><span class="lineNum"> 495 </span> : : </a>
+<a name="496"><span class="lineNum"> 496 </span> :<span class="lineCov"> 1 : static int secboot_tpm_define_indices(void)</span></a>
+<a name="497"><span class="lineNum"> 497 </span> : : {</a>
+<a name="498"><span class="lineNum"> 498 </span> :<span class="lineCov"> 1 : int rc = OPAL_SUCCESS;</span></a>
+<a name="499"><span class="lineNum"> 499 </span> : : </a>
+<a name="500"><span class="lineNum"> 500 </span> :<span class="lineCov"> 1 : rc = tpmnv_ops.definespace(SECBOOT_TPMNV_VARS_INDEX, tpmnv_vars_size);</span></a>
+<a name="501"><span class="lineNum"> 501 </span> :<span class="lineCov"> 1 : if (rc) {</span></a>
+<a name="502"><span class="lineNum"> 502 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to define the VARS index, rc=%d\n&quot;, rc);</span></a>
+<a name="503"><span class="lineNum"> 503 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
+<a name="504"><span class="lineNum"> 504 </span> : : }</a>
<a name="505"><span class="lineNum"> 505 </span> : : </a>
-<a name="506"><span class="lineNum"> 506 </span> :<span class="lineNoCov"> 0 : static int secboot_tpm_undefine_indices(bool *vars_defined, bool *control_defined)</span></a>
-<a name="507"><span class="lineNum"> 507 </span> : : {</a>
-<a name="508"><span class="lineNum"> 508 </span> : : int rc;</a>
-<a name="509"><span class="lineNum"> 509 </span> : : </a>
-<a name="510"><span class="lineNum"> 510 </span> :<span class="lineNoCov"> 0 : if (vars_defined) {</span></a>
-<a name="511"><span class="lineNum"> 511 </span> :<span class="lineNoCov"> 0 : rc = tpmnv_ops.undefinespace(SECBOOT_TPMNV_VARS_INDEX);</span></a>
-<a name="512"><span class="lineNum"> 512 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
-<a name="513"><span class="lineNum"> 513 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to undefine VARS, something is seriously wrong\n&quot;);</span></a>
-<a name="514"><span class="lineNum"> 514 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
-<a name="515"><span class="lineNum"> 515 </span> : : }</a>
-<a name="516"><span class="lineNum"> 516 </span> : : }</a>
-<a name="517"><span class="lineNum"> 517 </span> : : </a>
-<a name="518"><span class="lineNum"> 518 </span> :<span class="lineNoCov"> 0 : if (control_defined) {</span></a>
-<a name="519"><span class="lineNum"> 519 </span> :<span class="lineNoCov"> 0 : rc = tpmnv_ops.undefinespace(SECBOOT_TPMNV_CONTROL_INDEX);</span></a>
-<a name="520"><span class="lineNum"> 520 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
-<a name="521"><span class="lineNum"> 521 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to undefine CONTROL, something is seriously wrong\n&quot;);</span></a>
-<a name="522"><span class="lineNum"> 522 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
-<a name="523"><span class="lineNum"> 523 </span> : : }</a>
-<a name="524"><span class="lineNum"> 524 </span> : : }</a>
-<a name="525"><span class="lineNum"> 525 </span> : : </a>
-<a name="526"><span class="lineNum"> 526 </span> :<span class="lineNoCov"> 0 : *vars_defined = *control_defined = false;</span></a>
-<a name="527"><span class="lineNum"> 527 </span> : : </a>
-<a name="528"><span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : return OPAL_SUCCESS;</span></a>
-<a name="529"><span class="lineNum"> 529 </span> : : }</a>
-<a name="530"><span class="lineNum"> 530 </span> : : </a>
+<a name="506"><span class="lineNum"> 506 </span> :<span class="lineCov"> 1 : rc = tpmnv_ops.definespace(SECBOOT_TPMNV_CONTROL_INDEX, sizeof(struct tpmnv_control));</span></a>
+<a name="507"><span class="lineNum"> 507 </span> :<span class="lineCov"> 1 : if (rc) {</span></a>
+<a name="508"><span class="lineNum"> 508 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to define the CONTROL index, rc=%d\n&quot;, rc);</span></a>
+<a name="509"><span class="lineNum"> 509 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
+<a name="510"><span class="lineNum"> 510 </span> : : }</a>
+<a name="511"><span class="lineNum"> 511 </span> : : </a>
+<a name="512"><span class="lineNum"> 512 </span> :<span class="lineCov"> 1 : rc = tpmnv_format();</span></a>
+<a name="513"><span class="lineNum"> 513 </span> :<span class="lineCov"> 1 : if (rc)</span></a>
+<a name="514"><span class="lineNum"> 514 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
+<a name="515"><span class="lineNum"> 515 </span> : : </a>
+<a name="516"><span class="lineNum"> 516 </span> : : /* TPM NV just got redefined, so unconditionally format the SECBOOT partition */</a>
+<a name="517"><span class="lineNum"> 517 </span> :<span class="lineCov"> 1 : return secboot_format();</span></a>
+<a name="518"><span class="lineNum"> 518 </span> : : }</a>
+<a name="519"><span class="lineNum"> 519 </span> : : </a>
+<a name="520"><span class="lineNum"> 520 </span> :<span class="lineNoCov"> 0 : static int secboot_tpm_undefine_indices(bool *vars_defined, bool *control_defined)</span></a>
+<a name="521"><span class="lineNum"> 521 </span> : : {</a>
+<a name="522"><span class="lineNum"> 522 </span> : : int rc;</a>
+<a name="523"><span class="lineNum"> 523 </span> : : </a>
+<a name="524"><span class="lineNum"> 524 </span> :<span class="lineNoCov"> 0 : if (vars_defined) {</span></a>
+<a name="525"><span class="lineNum"> 525 </span> :<span class="lineNoCov"> 0 : rc = tpmnv_ops.undefinespace(SECBOOT_TPMNV_VARS_INDEX);</span></a>
+<a name="526"><span class="lineNum"> 526 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
+<a name="527"><span class="lineNum"> 527 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to undefine VARS, something is seriously wrong\n&quot;);</span></a>
+<a name="528"><span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
+<a name="529"><span class="lineNum"> 529 </span> : : }</a>
+<a name="530"><span class="lineNum"> 530 </span> : : }</a>
<a name="531"><span class="lineNum"> 531 </span> : : </a>
-<a name="532"><span class="lineNum"> 532 </span> :<span class="lineCov"> 1 : static int secboot_tpm_store_init(void)</span></a>
-<a name="533"><span class="lineNum"> 533 </span> : : {</a>
-<a name="534"><span class="lineNum"> 534 </span> : : int rc;</a>
-<a name="535"><span class="lineNum"> 535 </span> : : unsigned int secboot_size;</a>
-<a name="536"><span class="lineNum"> 536 </span> : : </a>
-<a name="537"><span class="lineNum"> 537 </span> :<span class="lineCov"> 1 : TPMI_RH_NV_INDEX *indices = NULL;</span></a>
-<a name="538"><span class="lineNum"> 538 </span> : : char nv_vars_name[sizeof(tpmnv_vars_name)];</a>
-<a name="539"><span class="lineNum"> 539 </span> : : char nv_control_name[sizeof(tpmnv_control_name)];</a>
-<a name="540"><span class="lineNum"> 540 </span> :<span class="lineCov"> 1 : size_t count = 0;</span></a>
-<a name="541"><span class="lineNum"> 541 </span> :<span class="lineCov"> 1 : bool control_defined = false;</span></a>
-<a name="542"><span class="lineNum"> 542 </span> :<span class="lineCov"> 1 : bool vars_defined = false;</span></a>
-<a name="543"><span class="lineNum"> 543 </span> : : int i;</a>
+<a name="532"><span class="lineNum"> 532 </span> :<span class="lineNoCov"> 0 : if (control_defined) {</span></a>
+<a name="533"><span class="lineNum"> 533 </span> :<span class="lineNoCov"> 0 : rc = tpmnv_ops.undefinespace(SECBOOT_TPMNV_CONTROL_INDEX);</span></a>
+<a name="534"><span class="lineNum"> 534 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
+<a name="535"><span class="lineNum"> 535 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to undefine CONTROL, something is seriously wrong\n&quot;);</span></a>
+<a name="536"><span class="lineNum"> 536 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
+<a name="537"><span class="lineNum"> 537 </span> : : }</a>
+<a name="538"><span class="lineNum"> 538 </span> : : }</a>
+<a name="539"><span class="lineNum"> 539 </span> : : </a>
+<a name="540"><span class="lineNum"> 540 </span> :<span class="lineNoCov"> 0 : *vars_defined = *control_defined = false;</span></a>
+<a name="541"><span class="lineNum"> 541 </span> : : </a>
+<a name="542"><span class="lineNum"> 542 </span> :<span class="lineNoCov"> 0 : return OPAL_SUCCESS;</span></a>
+<a name="543"><span class="lineNum"> 543 </span> : : }</a>
<a name="544"><span class="lineNum"> 544 </span> : : </a>
-<a name="545"><span class="lineNum"> 545 </span> :<span class="lineCov"> 1 : if (secboot_image)</span></a>
-<a name="546"><span class="lineNum"> 546 </span> :<span class="lineNoCov"> 0 : return OPAL_SUCCESS;</span></a>
-<a name="547"><span class="lineNum"> 547 </span> : : </a>
-<a name="548"><span class="lineNum"> 548 </span> :<span class="lineCov"> 1 : prlog(PR_DEBUG, &quot;Initializing for pnor+tpm based platform\n&quot;);</span></a>
-<a name="549"><span class="lineNum"> 549 </span> : : </a>
-<a name="550"><span class="lineNum"> 550 </span> : : /* Initialize SECBOOT first, we may need to format this later */</a>
-<a name="551"><span class="lineNum"> 551 </span> :<span class="lineCov"> 1 : rc = flash_secboot_info(&amp;secboot_size);</span></a>
-<a name="552"><span class="lineNum"> 552 </span> :<span class="lineCov"> 1 : if (rc) {</span></a>
-<a name="553"><span class="lineNum"> 553 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;error %d retrieving keystore info\n&quot;, rc);</span></a>
-<a name="554"><span class="lineNum"> 554 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="555"><span class="lineNum"> 555 </span> : : }</a>
-<a name="556"><span class="lineNum"> 556 </span> :<span class="lineCov"> 1 : if (sizeof(struct secboot) &gt; secboot_size) {</span></a>
-<a name="557"><span class="lineNum"> 557 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;secboot partition %d KB too small. min=%ld\n&quot;,</span></a>
-<a name="558"><span class="lineNum"> 558 </span> : : secboot_size &gt;&gt; 10, sizeof(struct secboot));</a>
-<a name="559"><span class="lineNum"> 559 </span> :<span class="lineNoCov"> 0 : rc = OPAL_RESOURCE;</span></a>
-<a name="560"><span class="lineNum"> 560 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="561"><span class="lineNum"> 561 </span> : : }</a>
-<a name="562"><span class="lineNum"> 562 </span> : : </a>
-<a name="563"><span class="lineNum"> 563 </span> :<span class="lineCov"> 1 : secboot_image = memalign(0x1000, sizeof(struct secboot));</span></a>
-<a name="564"><span class="lineNum"> 564 </span> :<span class="lineCov"> 1 : if (!secboot_image) {</span></a>
-<a name="565"><span class="lineNum"> 565 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to allocate space for the secboot image\n&quot;);</span></a>
-<a name="566"><span class="lineNum"> 566 </span> :<span class="lineNoCov"> 0 : rc = OPAL_NO_MEM;</span></a>
-<a name="567"><span class="lineNum"> 567 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="568"><span class="lineNum"> 568 </span> : : }</a>
-<a name="569"><span class="lineNum"> 569 </span> : : </a>
-<a name="570"><span class="lineNum"> 570 </span> : : /* Read in the PNOR data, bank hash is checked on call to .load_bank() */</a>
-<a name="571"><span class="lineNum"> 571 </span> :<span class="lineCov"> 1 : rc = flash_secboot_read(secboot_image, 0, sizeof(struct secboot));</span></a>
-<a name="572"><span class="lineNum"> 572 </span> :<span class="lineCov"> 1 : if (rc) {</span></a>
-<a name="573"><span class="lineNum"> 573 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;failed to read the secboot partition, rc=%d\n&quot;, rc);</span></a>
+<a name="545"><span class="lineNum"> 545 </span> : : </a>
+<a name="546"><span class="lineNum"> 546 </span> :<span class="lineCov"> 1 : static int secboot_tpm_store_init(void)</span></a>
+<a name="547"><span class="lineNum"> 547 </span> : : {</a>
+<a name="548"><span class="lineNum"> 548 </span> : : int rc;</a>
+<a name="549"><span class="lineNum"> 549 </span> : : unsigned int secboot_size;</a>
+<a name="550"><span class="lineNum"> 550 </span> : : </a>
+<a name="551"><span class="lineNum"> 551 </span> :<span class="lineCov"> 1 : TPMI_RH_NV_INDEX *indices = NULL;</span></a>
+<a name="552"><span class="lineNum"> 552 </span> : : char nv_vars_name[sizeof(tpmnv_vars_name)];</a>
+<a name="553"><span class="lineNum"> 553 </span> : : char nv_control_name[sizeof(tpmnv_control_name)];</a>
+<a name="554"><span class="lineNum"> 554 </span> :<span class="lineCov"> 1 : size_t count = 0;</span></a>
+<a name="555"><span class="lineNum"> 555 </span> :<span class="lineCov"> 1 : bool control_defined = false;</span></a>
+<a name="556"><span class="lineNum"> 556 </span> :<span class="lineCov"> 1 : bool vars_defined = false;</span></a>
+<a name="557"><span class="lineNum"> 557 </span> : : int i;</a>
+<a name="558"><span class="lineNum"> 558 </span> : : </a>
+<a name="559"><span class="lineNum"> 559 </span> :<span class="lineCov"> 1 : if (secboot_image)</span></a>
+<a name="560"><span class="lineNum"> 560 </span> :<span class="lineNoCov"> 0 : return OPAL_SUCCESS;</span></a>
+<a name="561"><span class="lineNum"> 561 </span> : : </a>
+<a name="562"><span class="lineNum"> 562 </span> :<span class="lineCov"> 1 : prlog(PR_DEBUG, &quot;Initializing for pnor+tpm based platform\n&quot;);</span></a>
+<a name="563"><span class="lineNum"> 563 </span> : : </a>
+<a name="564"><span class="lineNum"> 564 </span> : : /* Initialize SECBOOT first, we may need to format this later */</a>
+<a name="565"><span class="lineNum"> 565 </span> :<span class="lineCov"> 1 : rc = flash_secboot_info(&amp;secboot_size);</span></a>
+<a name="566"><span class="lineNum"> 566 </span> :<span class="lineCov"> 1 : if (rc) {</span></a>
+<a name="567"><span class="lineNum"> 567 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;error %d retrieving keystore info\n&quot;, rc);</span></a>
+<a name="568"><span class="lineNum"> 568 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="569"><span class="lineNum"> 569 </span> : : }</a>
+<a name="570"><span class="lineNum"> 570 </span> :<span class="lineCov"> 1 : if (sizeof(struct secboot) &gt; secboot_size) {</span></a>
+<a name="571"><span class="lineNum"> 571 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;secboot partition %d KB too small. min=%ld\n&quot;,</span></a>
+<a name="572"><span class="lineNum"> 572 </span> : : secboot_size &gt;&gt; 10, sizeof(struct secboot));</a>
+<a name="573"><span class="lineNum"> 573 </span> :<span class="lineNoCov"> 0 : rc = OPAL_RESOURCE;</span></a>
<a name="574"><span class="lineNum"> 574 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
<a name="575"><span class="lineNum"> 575 </span> : : }</a>
<a name="576"><span class="lineNum"> 576 </span> : : </a>
-<a name="577"><span class="lineNum"> 577 </span> : : /* Allocate the tpmnv data buffers */</a>
-<a name="578"><span class="lineNum"> 578 </span> :<span class="lineCov"> 1 : tpmnv_vars_image = zalloc(tpmnv_vars_size);</span></a>
-<a name="579"><span class="lineNum"> 579 </span> :<span class="lineCov"> 1 : if (!tpmnv_vars_image)</span></a>
-<a name="580"><span class="lineNum"> 580 </span> :<span class="lineNoCov"> 0 : return OPAL_NO_MEM;</span></a>
-<a name="581"><span class="lineNum"> 581 </span> :<span class="lineCov"> 1 : tpmnv_control_image = zalloc(sizeof(struct tpmnv_control));</span></a>
-<a name="582"><span class="lineNum"> 582 </span> :<span class="lineCov"> 1 : if (!tpmnv_control_image)</span></a>
-<a name="583"><span class="lineNum"> 583 </span> :<span class="lineNoCov"> 0 : return OPAL_NO_MEM;</span></a>
-<a name="584"><span class="lineNum"> 584 </span> : : </a>
-<a name="585"><span class="lineNum"> 585 </span> : : /* Check if the NV indices have been defined already */</a>
-<a name="586"><span class="lineNum"> 586 </span> :<span class="lineCov"> 1 : rc = tpmnv_ops.getindices(&amp;indices, &amp;count);</span></a>
-<a name="587"><span class="lineNum"> 587 </span> :<span class="lineCov"> 1 : if (rc) {</span></a>
-<a name="588"><span class="lineNum"> 588 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Could not load defined indicies from TPM, rc=%d\n&quot;, rc);</span></a>
-<a name="589"><span class="lineNum"> 589 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="590"><span class="lineNum"> 590 </span> : : }</a>
-<a name="591"><span class="lineNum"> 591 </span> : : </a>
-<a name="592"><span class="lineNum"> 592 </span> :<span class="lineCov"> 1 : for (i = 0; i &lt; count; i++) {</span></a>
-<a name="593"><span class="lineNum"> 593 </span> :<span class="lineNoCov"> 0 : if (indices[i] == SECBOOT_TPMNV_VARS_INDEX)</span></a>
-<a name="594"><span class="lineNum"> 594 </span> :<span class="lineNoCov"> 0 : vars_defined = true;</span></a>
-<a name="595"><span class="lineNum"> 595 </span> :<span class="lineNoCov"> 0 : else if (indices[i] == SECBOOT_TPMNV_CONTROL_INDEX)</span></a>
-<a name="596"><span class="lineNum"> 596 </span> :<span class="lineNoCov"> 0 : control_defined = true;</span></a>
-<a name="597"><span class="lineNum"> 597 </span> : : }</a>
-<a name="598"><span class="lineNum"> 598 </span> :<span class="lineCov"> 1 : free(indices);</span></a>
-<a name="599"><span class="lineNum"> 599 </span> : : </a>
-<a name="600"><span class="lineNum"> 600 </span> : : /* Undefine the NV indices if physical presence has been asserted */</a>
-<a name="601"><span class="lineNum"> 601 </span> :<span class="lineCov"> 1 : if (secvar_check_physical_presence()) {</span></a>
-<a name="602"><span class="lineNum"> 602 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;Physical presence asserted, redefining NV indices, and resetting keystore\n&quot;);</span></a>
-<a name="603"><span class="lineNum"> 603 </span> :<span class="lineNoCov"> 0 : rc = secboot_tpm_undefine_indices(&amp;vars_defined, &amp;control_defined);</span></a>
-<a name="604"><span class="lineNum"> 604 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
-<a name="605"><span class="lineNum"> 605 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="606"><span class="lineNum"> 606 </span> : : </a>
-<a name="607"><span class="lineNum"> 607 </span> :<span class="lineNoCov"> 0 : rc = secboot_tpm_define_indices();</span></a>
-<a name="608"><span class="lineNum"> 608 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
-<a name="609"><span class="lineNum"> 609 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="610"><span class="lineNum"> 610 </span> : : </a>
-<a name="611"><span class="lineNum"> 611 </span> : : /* Indices got defined and formatted, we're done here */</a>
-<a name="612"><span class="lineNum"> 612 </span> :<span class="lineNoCov"> 0 : goto done;</span></a>
-<a name="613"><span class="lineNum"> 613 </span> : : }</a>
-<a name="614"><span class="lineNum"> 614 </span> : : /* Determine if we need to define the indices. These should BOTH be false or true */</a>
-<a name="615"><span class="lineNum"> 615 </span> :<span class="lineCov"> 1 : if (!vars_defined &amp;&amp; !control_defined) {</span></a>
-<a name="616"><span class="lineNum"> 616 </span> :<span class="lineCov"> 1 : rc = secboot_tpm_define_indices();</span></a>
-<a name="617"><span class="lineNum"> 617 </span> :<span class="lineCov"> 1 : if (rc)</span></a>
-<a name="618"><span class="lineNum"> 618 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="619"><span class="lineNum"> 619 </span> : : </a>
-<a name="620"><span class="lineNum"> 620 </span> : : /* Indices got defined and formatted, we're done here */</a>
-<a name="621"><span class="lineNum"> 621 </span> :<span class="lineCov"> 1 : goto done;</span></a>
-<a name="622"><span class="lineNum"> 622 </span> : : }</a>
-<a name="623"><span class="lineNum"> 623 </span> :<span class="lineNoCov"> 0 : if (vars_defined ^ control_defined) {</span></a>
-<a name="624"><span class="lineNum"> 624 </span> : : /* This should never happen. Both indices should be defined at the same</a>
-<a name="625"><span class="lineNum"> 625 </span> : : * time. Otherwise something seriously went wrong. */</a>
-<a name="626"><span class="lineNum"> 626 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;NV indices defined with unexpected attributes. Assert physical presence to clear\n&quot;);</span></a>
-<a name="627"><span class="lineNum"> 627 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="628"><span class="lineNum"> 628 </span> : : }</a>
-<a name="629"><span class="lineNum"> 629 </span> : : </a>
-<a name="630"><span class="lineNum"> 630 </span> : : /* Both indices are defined, now need to validate their contents */</a>
-<a name="631"><span class="lineNum"> 631 </span> : : </a>
-<a name="632"><span class="lineNum"> 632 </span> :<span class="lineNoCov"> 0 : rc = secboot_tpm_get_tpmnv_names(nv_vars_name, nv_control_name);</span></a>
-<a name="633"><span class="lineNum"> 633 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
-<a name="634"><span class="lineNum"> 634 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="635"><span class="lineNum"> 635 </span> : : </a>
-<a name="636"><span class="lineNum"> 636 </span> : : /* Check for provisioned TPMNV indices, redefine them if detected */</a>
-<a name="637"><span class="lineNum"> 637 </span> :<span class="lineNoCov"> 0 : if (secboot_tpm_check_provisioned_indices(nv_vars_name, nv_control_name)) {</span></a>
-<a name="638"><span class="lineNum"> 638 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;Provisioned TPM NV indices detected, redefining NV indices, and resetting keystore\n&quot;);</span></a>
-<a name="639"><span class="lineNum"> 639 </span> :<span class="lineNoCov"> 0 : rc = secboot_tpm_undefine_indices(&amp;vars_defined, &amp;control_defined);</span></a>
-<a name="640"><span class="lineNum"> 640 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
-<a name="641"><span class="lineNum"> 641 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="642"><span class="lineNum"> 642 </span> : : </a>
-<a name="643"><span class="lineNum"> 643 </span> :<span class="lineNoCov"> 0 : rc = secboot_tpm_define_indices();</span></a>
-<a name="644"><span class="lineNum"> 644 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
-<a name="645"><span class="lineNum"> 645 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="646"><span class="lineNum"> 646 </span> : : </a>
-<a name="647"><span class="lineNum"> 647 </span> : : /* Indices got defined and formatted, we're done here */</a>
-<a name="648"><span class="lineNum"> 648 </span> :<span class="lineNoCov"> 0 : goto done;</span></a>
-<a name="649"><span class="lineNum"> 649 </span> : : }</a>
-<a name="650"><span class="lineNum"> 650 </span> : : </a>
-<a name="651"><span class="lineNum"> 651 </span> : : /* Otherwise, ensure the NV indices were defined with the correct set of attributes */</a>
-<a name="652"><span class="lineNum"> 652 </span> :<span class="lineNoCov"> 0 : rc = secboot_tpm_check_tpmnv_attrs(nv_vars_name, nv_control_name);</span></a>
-<a name="653"><span class="lineNum"> 653 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
-<a name="654"><span class="lineNum"> 654 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="655"><span class="lineNum"> 655 </span> : : </a>
+<a name="577"><span class="lineNum"> 577 </span> :<span class="lineCov"> 1 : secboot_image = memalign(0x1000, sizeof(struct secboot));</span></a>
+<a name="578"><span class="lineNum"> 578 </span> :<span class="lineCov"> 1 : if (!secboot_image) {</span></a>
+<a name="579"><span class="lineNum"> 579 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to allocate space for the secboot image\n&quot;);</span></a>
+<a name="580"><span class="lineNum"> 580 </span> :<span class="lineNoCov"> 0 : rc = OPAL_NO_MEM;</span></a>
+<a name="581"><span class="lineNum"> 581 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="582"><span class="lineNum"> 582 </span> : : }</a>
+<a name="583"><span class="lineNum"> 583 </span> : : </a>
+<a name="584"><span class="lineNum"> 584 </span> : : /* Read in the PNOR data, bank hash is checked on call to .load_bank() */</a>
+<a name="585"><span class="lineNum"> 585 </span> :<span class="lineCov"> 1 : rc = flash_secboot_read(secboot_image, 0, sizeof(struct secboot));</span></a>
+<a name="586"><span class="lineNum"> 586 </span> :<span class="lineCov"> 1 : if (rc) {</span></a>
+<a name="587"><span class="lineNum"> 587 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;failed to read the secboot partition, rc=%d\n&quot;, rc);</span></a>
+<a name="588"><span class="lineNum"> 588 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="589"><span class="lineNum"> 589 </span> : : }</a>
+<a name="590"><span class="lineNum"> 590 </span> : : </a>
+<a name="591"><span class="lineNum"> 591 </span> : : /* Allocate the tpmnv data buffers */</a>
+<a name="592"><span class="lineNum"> 592 </span> :<span class="lineCov"> 1 : tpmnv_vars_image = zalloc(tpmnv_vars_size);</span></a>
+<a name="593"><span class="lineNum"> 593 </span> :<span class="lineCov"> 1 : if (!tpmnv_vars_image)</span></a>
+<a name="594"><span class="lineNum"> 594 </span> :<span class="lineNoCov"> 0 : return OPAL_NO_MEM;</span></a>
+<a name="595"><span class="lineNum"> 595 </span> :<span class="lineCov"> 1 : tpmnv_control_image = zalloc(sizeof(struct tpmnv_control));</span></a>
+<a name="596"><span class="lineNum"> 596 </span> :<span class="lineCov"> 1 : if (!tpmnv_control_image)</span></a>
+<a name="597"><span class="lineNum"> 597 </span> :<span class="lineNoCov"> 0 : return OPAL_NO_MEM;</span></a>
+<a name="598"><span class="lineNum"> 598 </span> : : </a>
+<a name="599"><span class="lineNum"> 599 </span> : : /* Check if the NV indices have been defined already */</a>
+<a name="600"><span class="lineNum"> 600 </span> :<span class="lineCov"> 1 : rc = tpmnv_ops.getindices(&amp;indices, &amp;count);</span></a>
+<a name="601"><span class="lineNum"> 601 </span> :<span class="lineCov"> 1 : if (rc) {</span></a>
+<a name="602"><span class="lineNum"> 602 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Could not load defined indicies from TPM, rc=%d\n&quot;, rc);</span></a>
+<a name="603"><span class="lineNum"> 603 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="604"><span class="lineNum"> 604 </span> : : }</a>
+<a name="605"><span class="lineNum"> 605 </span> : : </a>
+<a name="606"><span class="lineNum"> 606 </span> :<span class="lineCov"> 1 : for (i = 0; i &lt; count; i++) {</span></a>
+<a name="607"><span class="lineNum"> 607 </span> :<span class="lineNoCov"> 0 : if (indices[i] == SECBOOT_TPMNV_VARS_INDEX)</span></a>
+<a name="608"><span class="lineNum"> 608 </span> :<span class="lineNoCov"> 0 : vars_defined = true;</span></a>
+<a name="609"><span class="lineNum"> 609 </span> :<span class="lineNoCov"> 0 : else if (indices[i] == SECBOOT_TPMNV_CONTROL_INDEX)</span></a>
+<a name="610"><span class="lineNum"> 610 </span> :<span class="lineNoCov"> 0 : control_defined = true;</span></a>
+<a name="611"><span class="lineNum"> 611 </span> : : }</a>
+<a name="612"><span class="lineNum"> 612 </span> :<span class="lineCov"> 1 : free(indices);</span></a>
+<a name="613"><span class="lineNum"> 613 </span> : : </a>
+<a name="614"><span class="lineNum"> 614 </span> : : /* Undefine the NV indices if physical presence has been asserted */</a>
+<a name="615"><span class="lineNum"> 615 </span> :<span class="lineCov"> 1 : if (secvar_check_physical_presence()) {</span></a>
+<a name="616"><span class="lineNum"> 616 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;Physical presence asserted, redefining NV indices, and resetting keystore\n&quot;);</span></a>
+<a name="617"><span class="lineNum"> 617 </span> :<span class="lineNoCov"> 0 : rc = secboot_tpm_undefine_indices(&amp;vars_defined, &amp;control_defined);</span></a>
+<a name="618"><span class="lineNum"> 618 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
+<a name="619"><span class="lineNum"> 619 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="620"><span class="lineNum"> 620 </span> : : </a>
+<a name="621"><span class="lineNum"> 621 </span> :<span class="lineNoCov"> 0 : rc = secboot_tpm_define_indices();</span></a>
+<a name="622"><span class="lineNum"> 622 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
+<a name="623"><span class="lineNum"> 623 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="624"><span class="lineNum"> 624 </span> : : </a>
+<a name="625"><span class="lineNum"> 625 </span> : : /* Indices got defined and formatted, we're done here */</a>
+<a name="626"><span class="lineNum"> 626 </span> :<span class="lineNoCov"> 0 : goto done;</span></a>
+<a name="627"><span class="lineNum"> 627 </span> : : }</a>
+<a name="628"><span class="lineNum"> 628 </span> : : /* Determine if we need to define the indices. These should BOTH be false or true */</a>
+<a name="629"><span class="lineNum"> 629 </span> :<span class="lineCov"> 1 : if (!vars_defined &amp;&amp; !control_defined) {</span></a>
+<a name="630"><span class="lineNum"> 630 </span> :<span class="lineCov"> 1 : rc = secboot_tpm_define_indices();</span></a>
+<a name="631"><span class="lineNum"> 631 </span> :<span class="lineCov"> 1 : if (rc)</span></a>
+<a name="632"><span class="lineNum"> 632 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="633"><span class="lineNum"> 633 </span> : : </a>
+<a name="634"><span class="lineNum"> 634 </span> : : /* Indices got defined and formatted, we're done here */</a>
+<a name="635"><span class="lineNum"> 635 </span> :<span class="lineCov"> 1 : goto done;</span></a>
+<a name="636"><span class="lineNum"> 636 </span> : : }</a>
+<a name="637"><span class="lineNum"> 637 </span> :<span class="lineNoCov"> 0 : if (vars_defined ^ control_defined) {</span></a>
+<a name="638"><span class="lineNum"> 638 </span> : : /* This should never happen. Both indices should be defined at the same</a>
+<a name="639"><span class="lineNum"> 639 </span> : : * time. Otherwise something seriously went wrong. */</a>
+<a name="640"><span class="lineNum"> 640 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;NV indices defined with unexpected attributes. Assert physical presence to clear\n&quot;);</span></a>
+<a name="641"><span class="lineNum"> 641 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="642"><span class="lineNum"> 642 </span> : : }</a>
+<a name="643"><span class="lineNum"> 643 </span> : : </a>
+<a name="644"><span class="lineNum"> 644 </span> : : /* Both indices are defined, now need to validate their contents */</a>
+<a name="645"><span class="lineNum"> 645 </span> : : </a>
+<a name="646"><span class="lineNum"> 646 </span> :<span class="lineNoCov"> 0 : rc = secboot_tpm_get_tpmnv_names(nv_vars_name, nv_control_name);</span></a>
+<a name="647"><span class="lineNum"> 647 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
+<a name="648"><span class="lineNum"> 648 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="649"><span class="lineNum"> 649 </span> : : </a>
+<a name="650"><span class="lineNum"> 650 </span> : : /* Check for provisioned TPMNV indices, redefine them if detected */</a>
+<a name="651"><span class="lineNum"> 651 </span> :<span class="lineNoCov"> 0 : if (secboot_tpm_check_provisioned_indices(nv_vars_name, nv_control_name)) {</span></a>
+<a name="652"><span class="lineNum"> 652 </span> :<span class="lineNoCov"> 0 : prlog(PR_INFO, &quot;Provisioned TPM NV indices detected, redefining NV indices, and resetting keystore\n&quot;);</span></a>
+<a name="653"><span class="lineNum"> 653 </span> :<span class="lineNoCov"> 0 : rc = secboot_tpm_undefine_indices(&amp;vars_defined, &amp;control_defined);</span></a>
+<a name="654"><span class="lineNum"> 654 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
+<a name="655"><span class="lineNum"> 655 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
<a name="656"><span class="lineNum"> 656 </span> : : </a>
-<a name="657"><span class="lineNum"> 657 </span> : : /* TPMNV indices exist, are correct, and weren't just formatted, so read them in */</a>
-<a name="658"><span class="lineNum"> 658 </span> :<span class="lineNoCov"> 0 : rc = tpmnv_ops.read(SECBOOT_TPMNV_VARS_INDEX,</span></a>
-<a name="659"><span class="lineNum"> 659 </span> : : tpmnv_vars_image,</a>
-<a name="660"><span class="lineNum"> 660 </span> : : tpmnv_vars_size, 0);</a>
-<a name="661"><span class="lineNum"> 661 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
-<a name="662"><span class="lineNum"> 662 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to read from the VARS index\n&quot;);</span></a>
-<a name="663"><span class="lineNum"> 663 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="664"><span class="lineNum"> 664 </span> : : }</a>
-<a name="665"><span class="lineNum"> 665 </span> : : </a>
-<a name="666"><span class="lineNum"> 666 </span> :<span class="lineNoCov"> 0 : rc = tpmnv_ops.read(SECBOOT_TPMNV_CONTROL_INDEX,</span></a>
-<a name="667"><span class="lineNum"> 667 </span> : : tpmnv_control_image,</a>
-<a name="668"><span class="lineNum"> 668 </span> : : sizeof(struct tpmnv_control), 0);</a>
-<a name="669"><span class="lineNum"> 669 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
-<a name="670"><span class="lineNum"> 670 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to read from the CONTROL index\n&quot;);</span></a>
-<a name="671"><span class="lineNum"> 671 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="672"><span class="lineNum"> 672 </span> : : }</a>
-<a name="673"><span class="lineNum"> 673 </span> : : </a>
-<a name="674"><span class="lineNum"> 674 </span> : : /* Verify the header information is correct */</a>
-<a name="675"><span class="lineNum"> 675 </span> :<span class="lineNoCov"> 0 : if (tpmnv_vars_image-&gt;header.magic_number != SECBOOT_MAGIC_NUMBER ||</span></a>
-<a name="676"><span class="lineNum"> 676 </span> :<span class="lineNoCov"> 0 : tpmnv_control_image-&gt;header.magic_number != SECBOOT_MAGIC_NUMBER ||</span></a>
-<a name="677"><span class="lineNum"> 677 </span> :<span class="lineNoCov"> 0 : tpmnv_vars_image-&gt;header.version != SECBOOT_VERSION ||</span></a>
-<a name="678"><span class="lineNum"> 678 </span> :<span class="lineNoCov"> 0 : tpmnv_control_image-&gt;header.version != SECBOOT_VERSION) {</span></a>
-<a name="679"><span class="lineNum"> 679 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;TPMNV indices defined, but contain bad data. Assert physical presence to clear\n&quot;);</span></a>
-<a name="680"><span class="lineNum"> 680 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="681"><span class="lineNum"> 681 </span> : : }</a>
-<a name="682"><span class="lineNum"> 682 </span> : : </a>
-<a name="683"><span class="lineNum"> 683 </span> : : /* Verify the secboot partition header information,</a>
-<a name="684"><span class="lineNum"> 684 </span> : : * reformat if incorrect</a>
-<a name="685"><span class="lineNum"> 685 </span> : : * Note: Future variants should attempt to handle older versions safely</a>
-<a name="686"><span class="lineNum"> 686 </span> : : */</a>
-<a name="687"><span class="lineNum"> 687 </span> :<span class="lineNoCov"> 0 : if (secboot_image-&gt;header.magic_number != SECBOOT_MAGIC_NUMBER ||</span></a>
-<a name="688"><span class="lineNum"> 688 </span> :<span class="lineNoCov"> 0 : secboot_image-&gt;header.version != SECBOOT_VERSION) {</span></a>
-<a name="689"><span class="lineNum"> 689 </span> :<span class="lineNoCov"> 0 : rc = secboot_format();</span></a>
-<a name="690"><span class="lineNum"> 690 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
-<a name="691"><span class="lineNum"> 691 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
-<a name="692"><span class="lineNum"> 692 </span> : : }</a>
-<a name="693"><span class="lineNum"> 693 </span> : : </a>
-<a name="694"><span class="lineNum"> 694 </span> :<span class="lineNoCov"> 0 : done:</span></a>
-<a name="695"><span class="lineNum"> 695 </span> :<span class="lineCov"> 1 : return OPAL_SUCCESS;</span></a>
+<a name="657"><span class="lineNum"> 657 </span> :<span class="lineNoCov"> 0 : rc = secboot_tpm_define_indices();</span></a>
+<a name="658"><span class="lineNum"> 658 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
+<a name="659"><span class="lineNum"> 659 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="660"><span class="lineNum"> 660 </span> : : </a>
+<a name="661"><span class="lineNum"> 661 </span> : : /* Indices got defined and formatted, we're done here */</a>
+<a name="662"><span class="lineNum"> 662 </span> :<span class="lineNoCov"> 0 : goto done;</span></a>
+<a name="663"><span class="lineNum"> 663 </span> : : }</a>
+<a name="664"><span class="lineNum"> 664 </span> : : </a>
+<a name="665"><span class="lineNum"> 665 </span> : : /* Otherwise, ensure the NV indices were defined with the correct set of attributes */</a>
+<a name="666"><span class="lineNum"> 666 </span> :<span class="lineNoCov"> 0 : rc = secboot_tpm_check_tpmnv_attrs(nv_vars_name, nv_control_name);</span></a>
+<a name="667"><span class="lineNum"> 667 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
+<a name="668"><span class="lineNum"> 668 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="669"><span class="lineNum"> 669 </span> : : </a>
+<a name="670"><span class="lineNum"> 670 </span> : : </a>
+<a name="671"><span class="lineNum"> 671 </span> : : /* TPMNV indices exist, are correct, and weren't just formatted, so read them in */</a>
+<a name="672"><span class="lineNum"> 672 </span> :<span class="lineNoCov"> 0 : rc = tpmnv_ops.read(SECBOOT_TPMNV_VARS_INDEX,</span></a>
+<a name="673"><span class="lineNum"> 673 </span> : : tpmnv_vars_image,</a>
+<a name="674"><span class="lineNum"> 674 </span> : : tpmnv_vars_size, 0);</a>
+<a name="675"><span class="lineNum"> 675 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
+<a name="676"><span class="lineNum"> 676 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to read from the VARS index\n&quot;);</span></a>
+<a name="677"><span class="lineNum"> 677 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="678"><span class="lineNum"> 678 </span> : : }</a>
+<a name="679"><span class="lineNum"> 679 </span> : : </a>
+<a name="680"><span class="lineNum"> 680 </span> :<span class="lineNoCov"> 0 : rc = tpmnv_ops.read(SECBOOT_TPMNV_CONTROL_INDEX,</span></a>
+<a name="681"><span class="lineNum"> 681 </span> : : tpmnv_control_image,</a>
+<a name="682"><span class="lineNum"> 682 </span> : : sizeof(struct tpmnv_control), 0);</a>
+<a name="683"><span class="lineNum"> 683 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
+<a name="684"><span class="lineNum"> 684 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;Failed to read from the CONTROL index\n&quot;);</span></a>
+<a name="685"><span class="lineNum"> 685 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="686"><span class="lineNum"> 686 </span> : : }</a>
+<a name="687"><span class="lineNum"> 687 </span> : : </a>
+<a name="688"><span class="lineNum"> 688 </span> : : /* Verify the header information is correct */</a>
+<a name="689"><span class="lineNum"> 689 </span> :<span class="lineNoCov"> 0 : if (tpmnv_vars_image-&gt;header.magic_number != SECBOOT_MAGIC_NUMBER ||</span></a>
+<a name="690"><span class="lineNum"> 690 </span> :<span class="lineNoCov"> 0 : tpmnv_control_image-&gt;header.magic_number != SECBOOT_MAGIC_NUMBER ||</span></a>
+<a name="691"><span class="lineNum"> 691 </span> :<span class="lineNoCov"> 0 : tpmnv_vars_image-&gt;header.version != SECBOOT_VERSION ||</span></a>
+<a name="692"><span class="lineNum"> 692 </span> :<span class="lineNoCov"> 0 : tpmnv_control_image-&gt;header.version != SECBOOT_VERSION) {</span></a>
+<a name="693"><span class="lineNum"> 693 </span> :<span class="lineNoCov"> 0 : prlog(PR_ERR, &quot;TPMNV indices defined, but contain bad data. Assert physical presence to clear\n&quot;);</span></a>
+<a name="694"><span class="lineNum"> 694 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="695"><span class="lineNum"> 695 </span> : : }</a>
<a name="696"><span class="lineNum"> 696 </span> : : </a>
-<a name="697"><span class="lineNum"> 697 </span> :<span class="lineNoCov"> 0 : error:</span></a>
-<a name="698"><span class="lineNum"> 698 </span> :<span class="lineNoCov"> 0 : free(secboot_image);</span></a>
-<a name="699"><span class="lineNum"> 699 </span> :<span class="lineNoCov"> 0 : secboot_image = NULL;</span></a>
-<a name="700"><span class="lineNum"> 700 </span> :<span class="lineNoCov"> 0 : free(tpmnv_vars_image);</span></a>
-<a name="701"><span class="lineNum"> 701 </span> :<span class="lineNoCov"> 0 : tpmnv_vars_image = NULL;</span></a>
-<a name="702"><span class="lineNum"> 702 </span> :<span class="lineNoCov"> 0 : free(tpmnv_control_image);</span></a>
-<a name="703"><span class="lineNum"> 703 </span> :<span class="lineNoCov"> 0 : tpmnv_control_image = NULL;</span></a>
-<a name="704"><span class="lineNum"> 704 </span> : : </a>
-<a name="705"><span class="lineNum"> 705 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
-<a name="706"><span class="lineNum"> 706 </span> : : }</a>
-<a name="707"><span class="lineNum"> 707 </span> : : </a>
+<a name="697"><span class="lineNum"> 697 </span> : : /* Verify the secboot partition header information,</a>
+<a name="698"><span class="lineNum"> 698 </span> : : * reformat if incorrect</a>
+<a name="699"><span class="lineNum"> 699 </span> : : * Note: Future variants should attempt to handle older versions safely</a>
+<a name="700"><span class="lineNum"> 700 </span> : : */</a>
+<a name="701"><span class="lineNum"> 701 </span> :<span class="lineNoCov"> 0 : if (secboot_image-&gt;header.magic_number != SECBOOT_MAGIC_NUMBER ||</span></a>
+<a name="702"><span class="lineNum"> 702 </span> :<span class="lineNoCov"> 0 : secboot_image-&gt;header.version != SECBOOT_VERSION) {</span></a>
+<a name="703"><span class="lineNum"> 703 </span> :<span class="lineNoCov"> 0 : rc = secboot_format();</span></a>
+<a name="704"><span class="lineNum"> 704 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
+<a name="705"><span class="lineNum"> 705 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="706"><span class="lineNum"> 706 </span> :<span class="lineNoCov"> 0 : goto done;</span></a>
+<a name="707"><span class="lineNum"> 707 </span> : : }</a>
<a name="708"><span class="lineNum"> 708 </span> : : </a>
-<a name="709"><span class="lineNum"> 709 </span> :<span class="lineNoCov"> 0 : static void secboot_tpm_lockdown(void)</span></a>
-<a name="710"><span class="lineNum"> 710 </span> : : {</a>
-<a name="711"><span class="lineNum"> 711 </span> : : /* Note: While write lock is called here on the two NV indices,</a>
-<a name="712"><span class="lineNum"> 712 </span> : : * both indices are also defined on the platform hierarchy.</a>
-<a name="713"><span class="lineNum"> 713 </span> : : * The platform hierarchy auth is set later in the skiboot</a>
-<a name="714"><span class="lineNum"> 714 </span> : : * initialization process, and not by any secvar-related code.</a>
+<a name="709"><span class="lineNum"> 709 </span> : : /* Verify the active bank's integrity by comparing against the hash in TPM.</a>
+<a name="710"><span class="lineNum"> 710 </span> : : * Reformat if it does not match -- we do not want to load potentially</a>
+<a name="711"><span class="lineNum"> 711 </span> : : * compromised data.</a>
+<a name="712"><span class="lineNum"> 712 </span> : : * Ideally, the backend driver should retain secure boot state in</a>
+<a name="713"><span class="lineNum"> 713 </span> : : * protected (TPM) storage, so secure boot state should be the same, albeit</a>
+<a name="714"><span class="lineNum"> 714 </span> : : * without the data in unprotected (PNOR) storage.</a>
<a name="715"><span class="lineNum"> 715 </span> : : */</a>
-<a name="716"><span class="lineNum"> 716 </span> : : int rc;</a>
-<a name="717"><span class="lineNum"> 717 </span> : : </a>
-<a name="718"><span class="lineNum"> 718 </span> :<span class="lineNoCov"> 0 : rc = tpmnv_ops.writelock(SECBOOT_TPMNV_VARS_INDEX);</span></a>
-<a name="719"><span class="lineNum"> 719 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
-<a name="720"><span class="lineNum"> 720 </span> :<span class="lineNoCov"> 0 : prlog(PR_EMERG, &quot;TSS Write Lock failed on VARS index, halting.\n&quot;);</span></a>
-<a name="721"><span class="lineNum"> 721 </span> :<span class="lineNoCov"> 0 : abort();</span></a>
-<a name="722"><span class="lineNum"> 722 </span> : : }</a>
-<a name="723"><span class="lineNum"> 723 </span> : : </a>
-<a name="724"><span class="lineNum"> 724 </span> :<span class="lineNoCov"> 0 : rc = tpmnv_ops.writelock(SECBOOT_TPMNV_CONTROL_INDEX);</span></a>
-<a name="725"><span class="lineNum"> 725 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
-<a name="726"><span class="lineNum"> 726 </span> :<span class="lineNoCov"> 0 : prlog(PR_EMERG, &quot;TSS Write Lock failed on CONTROL index, halting.\n&quot;);</span></a>
-<a name="727"><span class="lineNum"> 727 </span> :<span class="lineNoCov"> 0 : abort();</span></a>
-<a name="728"><span class="lineNum"> 728 </span> : : }</a>
-<a name="729"><span class="lineNum"> 729 </span> :<span class="lineNoCov"> 0 : }</span></a>
-<a name="730"><span class="lineNum"> 730 </span> : : </a>
-<a name="731"><span class="lineNum"> 731 </span> : : struct secvar_storage_driver secboot_tpm_driver = {</a>
-<a name="732"><span class="lineNum"> 732 </span> : : .load_bank = secboot_tpm_load_bank,</a>
-<a name="733"><span class="lineNum"> 733 </span> : : .write_bank = secboot_tpm_write_bank,</a>
-<a name="734"><span class="lineNum"> 734 </span> : : .store_init = secboot_tpm_store_init,</a>
-<a name="735"><span class="lineNum"> 735 </span> : : .lockdown = secboot_tpm_lockdown,</a>
-<a name="736"><span class="lineNum"> 736 </span> : : .max_var_size = SECBOOT_TPM_MAX_VAR_SIZE,</a>
-<a name="737"><span class="lineNum"> 737 </span> : : };</a>
+<a name="716"><span class="lineNum"> 716 </span> :<span class="lineNoCov"> 0 : rc = compare_bank_hash();</span></a>
+<a name="717"><span class="lineNum"> 717 </span> :<span class="lineNoCov"> 0 : if (rc == OPAL_PERMISSION) {</span></a>
+<a name="718"><span class="lineNum"> 718 </span> :<span class="lineNoCov"> 0 : rc = secboot_format();</span></a>
+<a name="719"><span class="lineNum"> 719 </span> :<span class="lineNoCov"> 0 : if (rc)</span></a>
+<a name="720"><span class="lineNum"> 720 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="721"><span class="lineNum"> 721 </span> : : }</a>
+<a name="722"><span class="lineNum"> 722 </span> :<span class="lineNoCov"> 0 : else if (rc)</span></a>
+<a name="723"><span class="lineNum"> 723 </span> :<span class="lineNoCov"> 0 : goto error;</span></a>
+<a name="724"><span class="lineNum"> 724 </span> : : </a>
+<a name="725"><span class="lineNum"> 725 </span> :<span class="lineNoCov"> 0 : done:</span></a>
+<a name="726"><span class="lineNum"> 726 </span> :<span class="lineCov"> 1 : return OPAL_SUCCESS;</span></a>
+<a name="727"><span class="lineNum"> 727 </span> : : </a>
+<a name="728"><span class="lineNum"> 728 </span> :<span class="lineNoCov"> 0 : error:</span></a>
+<a name="729"><span class="lineNum"> 729 </span> :<span class="lineNoCov"> 0 : free(secboot_image);</span></a>
+<a name="730"><span class="lineNum"> 730 </span> :<span class="lineNoCov"> 0 : secboot_image = NULL;</span></a>
+<a name="731"><span class="lineNum"> 731 </span> :<span class="lineNoCov"> 0 : free(tpmnv_vars_image);</span></a>
+<a name="732"><span class="lineNum"> 732 </span> :<span class="lineNoCov"> 0 : tpmnv_vars_image = NULL;</span></a>
+<a name="733"><span class="lineNum"> 733 </span> :<span class="lineNoCov"> 0 : free(tpmnv_control_image);</span></a>
+<a name="734"><span class="lineNum"> 734 </span> :<span class="lineNoCov"> 0 : tpmnv_control_image = NULL;</span></a>
+<a name="735"><span class="lineNum"> 735 </span> : : </a>
+<a name="736"><span class="lineNum"> 736 </span> :<span class="lineNoCov"> 0 : return rc;</span></a>
+<a name="737"><span class="lineNum"> 737 </span> : : }</a>
+<a name="738"><span class="lineNum"> 738 </span> : : </a>
+<a name="739"><span class="lineNum"> 739 </span> : : </a>
+<a name="740"><span class="lineNum"> 740 </span> :<span class="lineNoCov"> 0 : static void secboot_tpm_lockdown(void)</span></a>
+<a name="741"><span class="lineNum"> 741 </span> : : {</a>
+<a name="742"><span class="lineNum"> 742 </span> : : /* Note: While write lock is called here on the two NV indices,</a>
+<a name="743"><span class="lineNum"> 743 </span> : : * both indices are also defined on the platform hierarchy.</a>
+<a name="744"><span class="lineNum"> 744 </span> : : * The platform hierarchy auth is set later in the skiboot</a>
+<a name="745"><span class="lineNum"> 745 </span> : : * initialization process, and not by any secvar-related code.</a>
+<a name="746"><span class="lineNum"> 746 </span> : : */</a>
+<a name="747"><span class="lineNum"> 747 </span> : : int rc;</a>
+<a name="748"><span class="lineNum"> 748 </span> : : </a>
+<a name="749"><span class="lineNum"> 749 </span> :<span class="lineNoCov"> 0 : rc = tpmnv_ops.writelock(SECBOOT_TPMNV_VARS_INDEX);</span></a>
+<a name="750"><span class="lineNum"> 750 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
+<a name="751"><span class="lineNum"> 751 </span> :<span class="lineNoCov"> 0 : prlog(PR_EMERG, &quot;TSS Write Lock failed on VARS index, halting.\n&quot;);</span></a>
+<a name="752"><span class="lineNum"> 752 </span> :<span class="lineNoCov"> 0 : abort();</span></a>
+<a name="753"><span class="lineNum"> 753 </span> : : }</a>
+<a name="754"><span class="lineNum"> 754 </span> : : </a>
+<a name="755"><span class="lineNum"> 755 </span> :<span class="lineNoCov"> 0 : rc = tpmnv_ops.writelock(SECBOOT_TPMNV_CONTROL_INDEX);</span></a>
+<a name="756"><span class="lineNum"> 756 </span> :<span class="lineNoCov"> 0 : if (rc) {</span></a>
+<a name="757"><span class="lineNum"> 757 </span> :<span class="lineNoCov"> 0 : prlog(PR_EMERG, &quot;TSS Write Lock failed on CONTROL index, halting.\n&quot;);</span></a>
+<a name="758"><span class="lineNum"> 758 </span> :<span class="lineNoCov"> 0 : abort();</span></a>
+<a name="759"><span class="lineNum"> 759 </span> : : }</a>
+<a name="760"><span class="lineNum"> 760 </span> :<span class="lineNoCov"> 0 : }</span></a>
+<a name="761"><span class="lineNum"> 761 </span> : : </a>
+<a name="762"><span class="lineNum"> 762 </span> : : struct secvar_storage_driver secboot_tpm_driver = {</a>
+<a name="763"><span class="lineNum"> 763 </span> : : .load_bank = secboot_tpm_load_bank,</a>
+<a name="764"><span class="lineNum"> 764 </span> : : .write_bank = secboot_tpm_write_bank,</a>
+<a name="765"><span class="lineNum"> 765 </span> : : .store_init = secboot_tpm_store_init,</a>
+<a name="766"><span class="lineNum"> 766 </span> : : .lockdown = secboot_tpm_lockdown,</a>
+<a name="767"><span class="lineNum"> 767 </span> : : .max_var_size = SECBOOT_TPM_MAX_VAR_SIZE,</a>
+<a name="768"><span class="lineNum"> 768 </span> : : };</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/libstb/secvar/test/index-sort-b.html b/coverage-report/libstb/secvar/test/index-sort-b.html
index b54a6b6..6d84782 100644
--- a/coverage-report/libstb/secvar/test/index-sort-b.html
+++ b/coverage-report/libstb/secvar/test/index-sort-b.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">580</td>
- <td class="headerCovTableEntry">583</td>
- <td class="headerCovTableEntryHi">99.5 %</td>
+ <td class="headerCovTableEntry">687</td>
+ <td class="headerCovTableEntry">690</td>
+ <td class="headerCovTableEntryHi">99.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">22</td>
- <td class="headerCovTableEntry">22</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">24</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -82,6 +82,18 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
+ <td class="coverFile"><a href="secvar_api_test.c.gcov.html">secvar_api_test.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=95 height=10 alt="94.7%"><img src="../../../snow.png" width=5 height=10 alt="94.7%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">94.7&nbsp;%</td>
+ <td class="coverNumHi">18 / 19</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">4 / 4</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="secvar-test-enqueue.c.gcov.html">secvar-test-enqueue.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
@@ -94,12 +106,24 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="secvar-test-nextvar.c.gcov.html">secvar-test-nextvar.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">61 / 61</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">1 / 1</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="secvar-test-edk2-compat.c.gcov.html">secvar-test-edk2-compat.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=99 height=10 alt="99.7%"><img src="../../../snow.png" width=1 height=10 alt="99.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=99 height=10 alt="99.8%"><img src="../../../snow.png" width=1 height=10 alt="99.8%"></td></tr></table>
</td>
- <td class="coverPerHi">99.7&nbsp;%</td>
- <td class="coverNumHi">322 / 323</td>
+ <td class="coverPerHi">99.8&nbsp;%</td>
+ <td class="coverNumHi">425 / 426</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
@@ -120,28 +144,16 @@
<tr>
<td class="coverFile"><a href="secvar-test-secboot-tpm.c.gcov.html">secvar-test-secboot-tpm.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=98 height=10 alt="98.4%"><img src="../../../snow.png" width=2 height=10 alt="98.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=98 height=10 alt="98.2%"><img src="../../../snow.png" width=2 height=10 alt="98.2%"></td></tr></table>
</td>
- <td class="coverPerHi">98.4&nbsp;%</td>
- <td class="coverNumHi">62 / 63</td>
+ <td class="coverPerHi">98.2&nbsp;%</td>
+ <td class="coverNumHi">55 / 56</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">6 / 6</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="secvar-test-nextvar.c.gcov.html">secvar-test-nextvar.c</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
- </td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">61 / 61</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
<td class="coverFile"><a href="secvar-test-getvar.c.gcov.html">secvar-test-getvar.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
@@ -154,14 +166,14 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="secvar_api_test.c.gcov.html">secvar_api_test.c</a></td>
+ <td class="coverFile"><a href="secvar-test-pkcs7.c.gcov.html">secvar-test-pkcs7.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=95 height=10 alt="94.7%"><img src="../../../snow.png" width=5 height=10 alt="94.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
- <td class="coverPerHi">94.7&nbsp;%</td>
- <td class="coverNumHi">18 / 19</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">4 / 4</td>
+ <td class="coverNumHi">11 / 11</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
diff --git a/coverage-report/libstb/secvar/test/index-sort-f.html b/coverage-report/libstb/secvar/test/index-sort-f.html
index 9069b24..1b4adfb 100644
--- a/coverage-report/libstb/secvar/test/index-sort-f.html
+++ b/coverage-report/libstb/secvar/test/index-sort-f.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">580</td>
- <td class="headerCovTableEntry">583</td>
- <td class="headerCovTableEntryHi">99.5 %</td>
+ <td class="headerCovTableEntry">687</td>
+ <td class="headerCovTableEntry">690</td>
+ <td class="headerCovTableEntryHi">99.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">22</td>
- <td class="headerCovTableEntry">22</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">24</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -82,24 +82,24 @@
<td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFile"><a href="secvar-test-void.c.gcov.html">secvar-test-void.c</a></td>
+ <td class="coverFile"><a href="secvar-test-nextvar.c.gcov.html">secvar-test-nextvar.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
+ <td class="coverNumHi">61 / 61</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
- <td class="coverFile"><a href="secvar-test-nextvar.c.gcov.html">secvar-test-nextvar.c</a></td>
+ <td class="coverFile"><a href="secvar-test-void.c.gcov.html">secvar-test-void.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">61 / 61</td>
+ <td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
<td class="coverPerHi">-</td>
@@ -130,6 +130,18 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="secvar-test-pkcs7.c.gcov.html">secvar-test-pkcs7.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">11 / 11</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="secvar_api_test.c.gcov.html">secvar_api_test.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=95 height=10 alt="94.7%"><img src="../../../snow.png" width=5 height=10 alt="94.7%"></td></tr></table>
@@ -144,10 +156,10 @@
<tr>
<td class="coverFile"><a href="secvar-test-secboot-tpm.c.gcov.html">secvar-test-secboot-tpm.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=98 height=10 alt="98.4%"><img src="../../../snow.png" width=2 height=10 alt="98.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=98 height=10 alt="98.2%"><img src="../../../snow.png" width=2 height=10 alt="98.2%"></td></tr></table>
</td>
- <td class="coverPerHi">98.4&nbsp;%</td>
- <td class="coverNumHi">62 / 63</td>
+ <td class="coverPerHi">98.2&nbsp;%</td>
+ <td class="coverNumHi">55 / 56</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">6 / 6</td>
<td class="coverPerHi">-</td>
@@ -156,10 +168,10 @@
<tr>
<td class="coverFile"><a href="secvar-test-edk2-compat.c.gcov.html">secvar-test-edk2-compat.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=99 height=10 alt="99.7%"><img src="../../../snow.png" width=1 height=10 alt="99.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=99 height=10 alt="99.8%"><img src="../../../snow.png" width=1 height=10 alt="99.8%"></td></tr></table>
</td>
- <td class="coverPerHi">99.7&nbsp;%</td>
- <td class="coverNumHi">322 / 323</td>
+ <td class="coverPerHi">99.8&nbsp;%</td>
+ <td class="coverNumHi">425 / 426</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/libstb/secvar/test/index-sort-l.html b/coverage-report/libstb/secvar/test/index-sort-l.html
index e80ebb5..0c78fce 100644
--- a/coverage-report/libstb/secvar/test/index-sort-l.html
+++ b/coverage-report/libstb/secvar/test/index-sort-l.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">580</td>
- <td class="headerCovTableEntry">583</td>
- <td class="headerCovTableEntryHi">99.5 %</td>
+ <td class="headerCovTableEntry">687</td>
+ <td class="headerCovTableEntry">690</td>
+ <td class="headerCovTableEntryHi">99.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">22</td>
- <td class="headerCovTableEntry">22</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">24</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -96,10 +96,10 @@
<tr>
<td class="coverFile"><a href="secvar-test-secboot-tpm.c.gcov.html">secvar-test-secboot-tpm.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=98 height=10 alt="98.4%"><img src="../../../snow.png" width=2 height=10 alt="98.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=98 height=10 alt="98.2%"><img src="../../../snow.png" width=2 height=10 alt="98.2%"></td></tr></table>
</td>
- <td class="coverPerHi">98.4&nbsp;%</td>
- <td class="coverNumHi">62 / 63</td>
+ <td class="coverPerHi">98.2&nbsp;%</td>
+ <td class="coverNumHi">55 / 56</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">6 / 6</td>
<td class="coverPerHi">-</td>
@@ -108,10 +108,10 @@
<tr>
<td class="coverFile"><a href="secvar-test-edk2-compat.c.gcov.html">secvar-test-edk2-compat.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=99 height=10 alt="99.7%"><img src="../../../snow.png" width=1 height=10 alt="99.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=99 height=10 alt="99.8%"><img src="../../../snow.png" width=1 height=10 alt="99.8%"></td></tr></table>
</td>
- <td class="coverPerHi">99.7&nbsp;%</td>
- <td class="coverNumHi">322 / 323</td>
+ <td class="coverPerHi">99.8&nbsp;%</td>
+ <td class="coverNumHi">425 / 426</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
@@ -130,6 +130,18 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="secvar-test-pkcs7.c.gcov.html">secvar-test-pkcs7.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">11 / 11</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="secvar-test-getvar.c.gcov.html">secvar-test-getvar.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
diff --git a/coverage-report/libstb/secvar/test/index.html b/coverage-report/libstb/secvar/test/index.html
index f50e41e..ae621a8 100644
--- a/coverage-report/libstb/secvar/test/index.html
+++ b/coverage-report/libstb/secvar/test/index.html
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">580</td>
- <td class="headerCovTableEntry">583</td>
- <td class="headerCovTableEntryHi">99.5 %</td>
+ <td class="headerCovTableEntry">687</td>
+ <td class="headerCovTableEntry">690</td>
+ <td class="headerCovTableEntryHi">99.6 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">22</td>
- <td class="headerCovTableEntry">22</td>
+ <td class="headerCovTableEntry">24</td>
+ <td class="headerCovTableEntry">24</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -84,10 +84,10 @@
<tr>
<td class="coverFile"><a href="secvar-test-edk2-compat.c.gcov.html">secvar-test-edk2-compat.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=99 height=10 alt="99.7%"><img src="../../../snow.png" width=1 height=10 alt="99.7%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=99 height=10 alt="99.8%"><img src="../../../snow.png" width=1 height=10 alt="99.8%"></td></tr></table>
</td>
- <td class="coverPerHi">99.7&nbsp;%</td>
- <td class="coverNumHi">322 / 323</td>
+ <td class="coverPerHi">99.8&nbsp;%</td>
+ <td class="coverNumHi">425 / 426</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
<td class="coverPerHi">-</td>
@@ -130,12 +130,24 @@
<td class="coverNumHi">0 / 0</td>
</tr>
<tr>
+ <td class="coverFile"><a href="secvar-test-pkcs7.c.gcov.html">secvar-test-pkcs7.c</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">11 / 11</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
<td class="coverFile"><a href="secvar-test-secboot-tpm.c.gcov.html">secvar-test-secboot-tpm.c</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=98 height=10 alt="98.4%"><img src="../../../snow.png" width=2 height=10 alt="98.4%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=98 height=10 alt="98.2%"><img src="../../../snow.png" width=2 height=10 alt="98.2%"></td></tr></table>
</td>
- <td class="coverPerHi">98.4&nbsp;%</td>
- <td class="coverNumHi">62 / 63</td>
+ <td class="coverPerHi">98.2&nbsp;%</td>
+ <td class="coverNumHi">55 / 56</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">6 / 6</td>
<td class="coverPerHi">-</td>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-edk2-compat.c.func-sort-c.html b/coverage-report/libstb/secvar/test/secvar-test-edk2-compat.c.func-sort-c.html
index 4c94964..c5baebe 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-edk2-compat.c.func-sort-c.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-edk2-compat.c.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">322</td>
- <td class="headerCovTableEntry">323</td>
- <td class="headerCovTableEntryHi">99.7 %</td>
+ <td class="headerCovTableEntry">425</td>
+ <td class="headerCovTableEntry">426</td>
+ <td class="headerCovTableEntryHi">99.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@@ -69,32 +69,32 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#463">main</a></td>
+ <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#600">main</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#41">reset_keystore</a></td>
+ <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#46">reset_keystore</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#84">run_test</a></td>
+ <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#89">run_test</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#66">delete_hw_key_hash</a></td>
+ <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#71">delete_hw_key_hash</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#82">secvar_set_secure_mode</a></td>
+ <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#87">secvar_set_secure_mode</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#54">add_hw_key_hash</a></td>
+ <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#59">add_hw_key_hash</a></td>
<td class="coverFnHi">5</td>
</tr>
<tr>
- <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#42">verify_hw_key_hash</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#47">verify_hw_key_hash</a></td>
+ <td class="coverFnHi">21</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-edk2-compat.c.func.html b/coverage-report/libstb/secvar/test/secvar-test-edk2-compat.c.func.html
index a1999b3..f1e5d97 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-edk2-compat.c.func.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-edk2-compat.c.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">322</td>
- <td class="headerCovTableEntry">323</td>
- <td class="headerCovTableEntryHi">99.7 %</td>
+ <td class="headerCovTableEntry">425</td>
+ <td class="headerCovTableEntry">426</td>
+ <td class="headerCovTableEntryHi">99.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@@ -69,32 +69,32 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="secvar-test-edk2-compat.c.func-sort-c.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
- <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#54">add_hw_key_hash</a></td>
+ <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#59">add_hw_key_hash</a></td>
<td class="coverFnHi">5</td>
</tr>
<tr>
- <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#66">delete_hw_key_hash</a></td>
+ <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#71">delete_hw_key_hash</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#463">main</a></td>
+ <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#600">main</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#41">reset_keystore</a></td>
+ <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#46">reset_keystore</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#84">run_test</a></td>
+ <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#89">run_test</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#82">secvar_set_secure_mode</a></td>
+ <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#87">secvar_set_secure_mode</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
- <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#42">verify_hw_key_hash</a></td>
- <td class="coverFnHi">14</td>
+ <td class="coverFn"><a href="secvar-test-edk2-compat.c.gcov.html#47">verify_hw_key_hash</a></td>
+ <td class="coverFnHi">21</td>
</tr>
</table>
<br>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-edk2-compat.c.gcov.html b/coverage-report/libstb/secvar/test/secvar-test-edk2-compat.c.gcov.html
index d053eb7..1115a10 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-edk2-compat.c.gcov.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-edk2-compat.c.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">322</td>
- <td class="headerCovTableEntry">323</td>
- <td class="headerCovTableEntryHi">99.7 %</td>
+ <td class="headerCovTableEntry">425</td>
+ <td class="headerCovTableEntry">426</td>
+ <td class="headerCovTableEntryHi">99.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@@ -83,472 +83,609 @@
<a name="12"><span class="lineNum"> 12 </span> : : #include &quot;./data/KEK.h&quot;</a>
<a name="13"><span class="lineNum"> 13 </span> : : #include &quot;./data/invalidkek.h&quot;</a>
<a name="14"><span class="lineNum"> 14 </span> : : #include &quot;./data/malformedkek.h&quot;</a>
-<a name="15"><span class="lineNum"> 15 </span> : : #include &quot;./data/db.h&quot;</a>
-<a name="16"><span class="lineNum"> 16 </span> : : #include &quot;./data/dbsigneddata.h&quot;</a>
-<a name="17"><span class="lineNum"> 17 </span> : : #include &quot;./data/OldTSKEK.h&quot;</a>
-<a name="18"><span class="lineNum"> 18 </span> : : #include &quot;./data/multipleKEK.h&quot;</a>
-<a name="19"><span class="lineNum"> 19 </span> : : #include &quot;./data/multipleDB.h&quot;</a>
-<a name="20"><span class="lineNum"> 20 </span> : : #include &quot;./data/multiplePK.h&quot;</a>
-<a name="21"><span class="lineNum"> 21 </span> : : #include &quot;./data/dbx.h&quot;</a>
-<a name="22"><span class="lineNum"> 22 </span> : : #include &quot;./data/dbxcert.h&quot;</a>
-<a name="23"><span class="lineNum"> 23 </span> : : #include &quot;./data/dbxsha512.h&quot;</a>
-<a name="24"><span class="lineNum"> 24 </span> : : #include &quot;./data/dbxmalformed.h&quot;</a>
-<a name="25"><span class="lineNum"> 25 </span> : : </a>
-<a name="26"><span class="lineNum"> 26 </span> : : bool test_hw_key_hash = false;</a>
-<a name="27"><span class="lineNum"> 27 </span> : : </a>
-<a name="28"><span class="lineNum"> 28 </span> : : /* Hardcoding HW KEY HASH to avoid emulating device-tree in unit-tests. */</a>
-<a name="29"><span class="lineNum"> 29 </span> : : const unsigned char hw_key_hash[64] = {</a>
-<a name="30"><span class="lineNum"> 30 </span> : : 0xb6, 0xdf, 0xfe, 0x75, 0x53, 0xf9, 0x2e, 0xcb, 0x2b, 0x05, 0x55, 0x35, 0xd7, 0xda, 0xfe, 0x32, \</a>
-<a name="31"><span class="lineNum"> 31 </span> : : 0x98, 0x93, 0x35, 0x1e, 0xd7, 0x4b, 0xbb, 0x21, 0x6b, 0xa0, 0x56, 0xa7, 0x1e, 0x3c, 0x0b, 0x56, \</a>
-<a name="32"><span class="lineNum"> 32 </span> : : 0x6f, 0x0c, 0x4d, 0xbe, 0x31, 0x42, 0x13, 0x68, 0xcb, 0x32, 0x11, 0x6f, 0x13, 0xbb, 0xdd, 0x9e, \</a>
-<a name="33"><span class="lineNum"> 33 </span> : : 0x4f, 0xe3, 0x83, 0x8b, 0x1c, 0x6a, 0x2e, 0x07, 0xdb, 0x95, 0x16, 0xc9, 0x33, 0xaa, 0x20, 0xef</a>
-<a name="34"><span class="lineNum"> 34 </span> : : };</a>
-<a name="35"><span class="lineNum"> 35 </span> : : </a>
-<a name="36"><span class="lineNum"> 36 </span> : : const unsigned char new_hw_key_hash[64] = {</a>
-<a name="37"><span class="lineNum"> 37 </span> : : 0xa6, 0xdf, 0xfe, 0x75, 0x53, 0xf9, 0x2e, 0xcb, 0x2b, 0x05, 0x55, 0x35, 0xd7, 0xda, 0xfe, 0x32, \</a>
-<a name="38"><span class="lineNum"> 38 </span> : : 0x98, 0x93, 0x35, 0x1e, 0xd7, 0x4b, 0xbb, 0x21, 0x6b, 0xa0, 0x56, 0xa7, 0x1e, 0x3c, 0x0b, 0x56, \</a>
-<a name="39"><span class="lineNum"> 39 </span> : : 0x6f, 0x0c, 0x4d, 0xbe, 0x31, 0x42, 0x13, 0x68, 0xcb, 0x32, 0x11, 0x6f, 0x13, 0xbb, 0xdd, 0x9e, \</a>
-<a name="40"><span class="lineNum"> 40 </span> : : 0x4f, 0xe3, 0x83, 0x8b, 0x1c, 0x6a, 0x2e, 0x07, 0xdb, 0x95, 0x16, 0xc9, 0x33, 0xaa, 0x20, 0xef</a>
-<a name="41"><span class="lineNum"> 41 </span> : : };</a>
-<a name="42"><span class="lineNum"> 42 </span> : : </a>
-<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 1 : int reset_keystore(struct list_head *bank __unused) { return 0; }</span></a>
-<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 14 : int verify_hw_key_hash(void)</span></a>
-<a name="45"><span class="lineNum"> 45 </span> : : {</a>
-<a name="46"><span class="lineNum"> 46 </span> : : </a>
-<a name="47"><span class="lineNum"> 47 </span> : : /* This check is added just to simulate mismatch of hashes. */</a>
-<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 14 : if (test_hw_key_hash)</span></a>
-<a name="49"><span class="lineNum"> 49 </span> : : if (memcmp(new_hw_key_hash, hw_key_hash, 64) != 0)</a>
-<a name="50"><span class="lineNum"> 50 </span> :<span class="lineCov"> 1 : return OPAL_PERMISSION;</span></a>
+<a name="15"><span class="lineNum"> 15 </span> : : #include &quot;./data/trimmedKEK.h&quot;</a>
+<a name="16"><span class="lineNum"> 16 </span> : : #include &quot;./data/KEKeslcorrupt.h&quot;</a>
+<a name="17"><span class="lineNum"> 17 </span> : : #include &quot;./data/KEKpkcs7corrupt.h&quot;</a>
+<a name="18"><span class="lineNum"> 18 </span> : : #include &quot;./data/db.h&quot;</a>
+<a name="19"><span class="lineNum"> 19 </span> : : #include &quot;./data/dbsigneddata.h&quot;</a>
+<a name="20"><span class="lineNum"> 20 </span> : : #include &quot;./data/OldTSKEK.h&quot;</a>
+<a name="21"><span class="lineNum"> 21 </span> : : #include &quot;./data/multipleKEK.h&quot;</a>
+<a name="22"><span class="lineNum"> 22 </span> : : #include &quot;./data/multipletrimmedKEK.h&quot;</a>
+<a name="23"><span class="lineNum"> 23 </span> : : #include &quot;./data/multipleDB.h&quot;</a>
+<a name="24"><span class="lineNum"> 24 </span> : : #include &quot;./data/multiplePK.h&quot;</a>
+<a name="25"><span class="lineNum"> 25 </span> : : #include &quot;./data/dbx.h&quot;</a>
+<a name="26"><span class="lineNum"> 26 </span> : : #include &quot;./data/dbxcert.h&quot;</a>
+<a name="27"><span class="lineNum"> 27 </span> : : #include &quot;./data/dbxsha512.h&quot;</a>
+<a name="28"><span class="lineNum"> 28 </span> : : #include &quot;./data/dbxmalformed.h&quot;</a>
+<a name="29"><span class="lineNum"> 29 </span> : : #include &quot;./data/pkcs7_sha512.h&quot;</a>
+<a name="30"><span class="lineNum"> 30 </span> : : </a>
+<a name="31"><span class="lineNum"> 31 </span> : : bool test_hw_key_hash = false;</a>
+<a name="32"><span class="lineNum"> 32 </span> : : </a>
+<a name="33"><span class="lineNum"> 33 </span> : : /* Hardcoding HW KEY HASH to avoid emulating device-tree in unit-tests. */</a>
+<a name="34"><span class="lineNum"> 34 </span> : : const unsigned char hw_key_hash[64] = {</a>
+<a name="35"><span class="lineNum"> 35 </span> : : 0xb6, 0xdf, 0xfe, 0x75, 0x53, 0xf9, 0x2e, 0xcb, 0x2b, 0x05, 0x55, 0x35, 0xd7, 0xda, 0xfe, 0x32, \</a>
+<a name="36"><span class="lineNum"> 36 </span> : : 0x98, 0x93, 0x35, 0x1e, 0xd7, 0x4b, 0xbb, 0x21, 0x6b, 0xa0, 0x56, 0xa7, 0x1e, 0x3c, 0x0b, 0x56, \</a>
+<a name="37"><span class="lineNum"> 37 </span> : : 0x6f, 0x0c, 0x4d, 0xbe, 0x31, 0x42, 0x13, 0x68, 0xcb, 0x32, 0x11, 0x6f, 0x13, 0xbb, 0xdd, 0x9e, \</a>
+<a name="38"><span class="lineNum"> 38 </span> : : 0x4f, 0xe3, 0x83, 0x8b, 0x1c, 0x6a, 0x2e, 0x07, 0xdb, 0x95, 0x16, 0xc9, 0x33, 0xaa, 0x20, 0xef</a>
+<a name="39"><span class="lineNum"> 39 </span> : : };</a>
+<a name="40"><span class="lineNum"> 40 </span> : : </a>
+<a name="41"><span class="lineNum"> 41 </span> : : const unsigned char new_hw_key_hash[64] = {</a>
+<a name="42"><span class="lineNum"> 42 </span> : : 0xa6, 0xdf, 0xfe, 0x75, 0x53, 0xf9, 0x2e, 0xcb, 0x2b, 0x05, 0x55, 0x35, 0xd7, 0xda, 0xfe, 0x32, \</a>
+<a name="43"><span class="lineNum"> 43 </span> : : 0x98, 0x93, 0x35, 0x1e, 0xd7, 0x4b, 0xbb, 0x21, 0x6b, 0xa0, 0x56, 0xa7, 0x1e, 0x3c, 0x0b, 0x56, \</a>
+<a name="44"><span class="lineNum"> 44 </span> : : 0x6f, 0x0c, 0x4d, 0xbe, 0x31, 0x42, 0x13, 0x68, 0xcb, 0x32, 0x11, 0x6f, 0x13, 0xbb, 0xdd, 0x9e, \</a>
+<a name="45"><span class="lineNum"> 45 </span> : : 0x4f, 0xe3, 0x83, 0x8b, 0x1c, 0x6a, 0x2e, 0x07, 0xdb, 0x95, 0x16, 0xc9, 0x33, 0xaa, 0x20, 0xef</a>
+<a name="46"><span class="lineNum"> 46 </span> : : };</a>
+<a name="47"><span class="lineNum"> 47 </span> : : </a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 1 : int reset_keystore(struct list_head *bank __unused) { return 0; }</span></a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 21 : int verify_hw_key_hash(void)</span></a>
+<a name="50"><span class="lineNum"> 50 </span> : : {</a>
<a name="51"><span class="lineNum"> 51 </span> : : </a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 13 : return OPAL_SUCCESS;</span></a>
-<a name="53"><span class="lineNum"> 53 </span> : : }</a>
-<a name="54"><span class="lineNum"> 54 </span> : : </a>
-<a name="55"><span class="lineNum"> 55 </span> : : </a>
-<a name="56"><span class="lineNum"> 56 </span> :<span class="lineCov"> 5 : int add_hw_key_hash(struct list_head *bank)</span></a>
-<a name="57"><span class="lineNum"> 57 </span> : : {</a>
-<a name="58"><span class="lineNum"> 58 </span> : : struct secvar *var;</a>
-<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 5 : uint32_t hw_key_hash_size = 64;</span></a>
+<a name="52"><span class="lineNum"> 52 </span> : : /* This check is added just to simulate mismatch of hashes. */</a>
+<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 21 : if (test_hw_key_hash)</span></a>
+<a name="54"><span class="lineNum"> 54 </span> : : if (memcmp(new_hw_key_hash, hw_key_hash, 64) != 0)</a>
+<a name="55"><span class="lineNum"> 55 </span> :<span class="lineCov"> 1 : return OPAL_PERMISSION;</span></a>
+<a name="56"><span class="lineNum"> 56 </span> : : </a>
+<a name="57"><span class="lineNum"> 57 </span> :<span class="lineCov"> 20 : return OPAL_SUCCESS;</span></a>
+<a name="58"><span class="lineNum"> 58 </span> : : }</a>
+<a name="59"><span class="lineNum"> 59 </span> : : </a>
<a name="60"><span class="lineNum"> 60 </span> : : </a>
-<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 5 : var = new_secvar(&quot;HWKH&quot;, 5, hw_key_hash,</span></a>
-<a name="62"><span class="lineNum"> 62 </span> : : hw_key_hash_size, SECVAR_FLAG_PROTECTED);</a>
-<a name="63"><span class="lineNum"> 63 </span> :<span class="lineCov"> 5 : list_add_tail(bank, &amp;var-&gt;link);</span></a>
-<a name="64"><span class="lineNum"> 64 </span> : : </a>
-<a name="65"><span class="lineNum"> 65 </span> :<span class="lineCov"> 5 : return OPAL_SUCCESS;</span></a>
-<a name="66"><span class="lineNum"> 66 </span> : : }</a>
-<a name="67"><span class="lineNum"> 67 </span> : : </a>
-<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 2 : int delete_hw_key_hash(struct list_head *bank)</span></a>
-<a name="69"><span class="lineNum"> 69 </span> : : {</a>
-<a name="70"><span class="lineNum"> 70 </span> : : struct secvar *var;</a>
-<a name="71"><span class="lineNum"> 71 </span> : : </a>
-<a name="72"><span class="lineNum"> 72 </span> :<span class="lineCov"> 2 : var = find_secvar(&quot;HWKH&quot;, 5, bank);</span></a>
-<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 2 : if (!var)</span></a>
-<a name="74"><span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : return OPAL_SUCCESS;</span></a>
-<a name="75"><span class="lineNum"> 75 </span> : : </a>
-<a name="76"><span class="lineNum"> 76 </span> :<span class="lineCov"> 2 : list_del(&amp;var-&gt;link);</span></a>
-<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 2 : dealloc_secvar(var);</span></a>
-<a name="78"><span class="lineNum"> 78 </span> : : </a>
-<a name="79"><span class="lineNum"> 79 </span> :<span class="lineCov"> 2 : return OPAL_SUCCESS;</span></a>
-<a name="80"><span class="lineNum"> 80 </span> : : }</a>
-<a name="81"><span class="lineNum"> 81 </span> : : </a>
-<a name="82"><span class="lineNum"> 82 </span> : : const char *secvar_test_name = &quot;edk2-compat&quot;;</a>
+<a name="61"><span class="lineNum"> 61 </span> :<span class="lineCov"> 5 : int add_hw_key_hash(struct list_head *bank)</span></a>
+<a name="62"><span class="lineNum"> 62 </span> : : {</a>
+<a name="63"><span class="lineNum"> 63 </span> : : struct secvar *var;</a>
+<a name="64"><span class="lineNum"> 64 </span> :<span class="lineCov"> 5 : uint32_t hw_key_hash_size = 64;</span></a>
+<a name="65"><span class="lineNum"> 65 </span> : : </a>
+<a name="66"><span class="lineNum"> 66 </span> :<span class="lineCov"> 5 : var = new_secvar(&quot;HWKH&quot;, 5, hw_key_hash,</span></a>
+<a name="67"><span class="lineNum"> 67 </span> : : hw_key_hash_size, SECVAR_FLAG_PROTECTED);</a>
+<a name="68"><span class="lineNum"> 68 </span> :<span class="lineCov"> 5 : list_add_tail(bank, &amp;var-&gt;link);</span></a>
+<a name="69"><span class="lineNum"> 69 </span> : : </a>
+<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 5 : return OPAL_SUCCESS;</span></a>
+<a name="71"><span class="lineNum"> 71 </span> : : }</a>
+<a name="72"><span class="lineNum"> 72 </span> : : </a>
+<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 2 : int delete_hw_key_hash(struct list_head *bank)</span></a>
+<a name="74"><span class="lineNum"> 74 </span> : : {</a>
+<a name="75"><span class="lineNum"> 75 </span> : : struct secvar *var;</a>
+<a name="76"><span class="lineNum"> 76 </span> : : </a>
+<a name="77"><span class="lineNum"> 77 </span> :<span class="lineCov"> 2 : var = find_secvar(&quot;HWKH&quot;, 5, bank);</span></a>
+<a name="78"><span class="lineNum"> 78 </span> :<span class="lineCov"> 2 : if (!var)</span></a>
+<a name="79"><span class="lineNum"> 79 </span> :<span class="lineNoCov"> 0 : return OPAL_SUCCESS;</span></a>
+<a name="80"><span class="lineNum"> 80 </span> : : </a>
+<a name="81"><span class="lineNum"> 81 </span> :<span class="lineCov"> 2 : list_del(&amp;var-&gt;link);</span></a>
+<a name="82"><span class="lineNum"> 82 </span> :<span class="lineCov"> 2 : dealloc_secvar(var);</span></a>
<a name="83"><span class="lineNum"> 83 </span> : : </a>
-<a name="84"><span class="lineNum"> 84 </span> :<span class="lineCov"> 2 : int secvar_set_secure_mode(void) { return 0; };</span></a>
-<a name="85"><span class="lineNum"> 85 </span> : : </a>
-<a name="86"><span class="lineNum"> 86 </span> :<span class="lineCov"> 1 : int run_test()</span></a>
-<a name="87"><span class="lineNum"> 87 </span> : : {</a>
-<a name="88"><span class="lineNum"> 88 </span> :<span class="lineCov"> 1 : int rc = -1;</span></a>
-<a name="89"><span class="lineNum"> 89 </span> : : struct secvar *tmp;</a>
-<a name="90"><span class="lineNum"> 90 </span> :<span class="lineCov"> 1 : char empty[64] = {0};</span></a>
-<a name="91"><span class="lineNum"> 91 </span> : : </a>
-<a name="92"><span class="lineNum"> 92 </span> : : /* The sequence of test cases here is important to ensure that</a>
-<a name="93"><span class="lineNum"> 93 </span> : : * timestamp checks work as expected. */</a>
-<a name="94"><span class="lineNum"> 94 </span> : : </a>
-<a name="95"><span class="lineNum"> 95 </span> : : /* Check pre-process creates the empty variables. */</a>
-<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;variable_bank));</span></a>
-<a name="97"><span class="lineNum"> 97 </span> :<span class="lineCov"> 1 : rc = edk2_compat_pre_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
-<a name="99"><span class="lineNum"> 99 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;TS&quot;, 3, &amp;variable_bank);</span></a>
-<a name="101"><span class="lineNum"> 101 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
-<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 1 : ASSERT(64 == tmp-&gt;data_size);</span></a>
-<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 1 : ASSERT(!(memcmp(tmp-&gt;data, empty, 64)));</span></a>
-<a name="104"><span class="lineNum"> 104 </span> : : </a>
-<a name="105"><span class="lineNum"> 105 </span> : : /* Add test to verify hw_key_hash.</a>
-<a name="106"><span class="lineNum"> 106 </span> : : * This is to ensure that mismatch of test happens.</a>
-<a name="107"><span class="lineNum"> 107 </span> : : * The test uses test_hw_key_hash variable to ensure that</a>
-<a name="108"><span class="lineNum"> 108 </span> : : * mismatch happens. For all next tests, test_hw_key_hash variable</a>
-<a name="109"><span class="lineNum"> 109 </span> : : * should be zero to avoid hard-coded mismatch.</a>
-<a name="110"><span class="lineNum"> 110 </span> : : */</a>
-<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 1 : test_hw_key_hash = 1;</span></a>
-<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 1 : setup_mode = false;</span></a>
-<a name="113"><span class="lineNum"> 113 </span> :<span class="lineCov"> 1 : printf(&quot;Add PK&quot;);</span></a>
-<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;PK&quot;, 3, PK_auth, PK_auth_len, 0);</span></a>
-<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="117"><span class="lineNum"> 117 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 1 : printf(&quot;rc is %04x %d\n&quot;, rc, rc);</span></a>
-<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
-<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 1 : ASSERT(setup_mode);</span></a>
-<a name="123"><span class="lineNum"> 123 </span> : : </a>
-<a name="124"><span class="lineNum"> 124 </span> : : /* Set test_hw_key_hash to zero to avoid hardcoded mismatch. */</a>
-<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 1 : test_hw_key_hash = 0;</span></a>
-<a name="126"><span class="lineNum"> 126 </span> : : </a>
-<a name="127"><span class="lineNum"> 127 </span> : : /* Add PK and a failed update. */</a>
-<a name="128"><span class="lineNum"> 128 </span> :<span class="lineCov"> 1 : printf(&quot;Add PK and failed dbx&quot;);</span></a>
-<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;PK&quot;, 3, PK_auth, PK_auth_len, 0);</span></a>
-<a name="130"><span class="lineNum"> 130 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="131"><span class="lineNum"> 131 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="132"><span class="lineNum"> 132 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="84"><span class="lineNum"> 84 </span> :<span class="lineCov"> 2 : return OPAL_SUCCESS;</span></a>
+<a name="85"><span class="lineNum"> 85 </span> : : }</a>
+<a name="86"><span class="lineNum"> 86 </span> : : </a>
+<a name="87"><span class="lineNum"> 87 </span> : : const char *secvar_test_name = &quot;edk2-compat&quot;;</a>
+<a name="88"><span class="lineNum"> 88 </span> : : </a>
+<a name="89"><span class="lineNum"> 89 </span> :<span class="lineCov"> 2 : int secvar_set_secure_mode(void) { return 0; };</span></a>
+<a name="90"><span class="lineNum"> 90 </span> : : </a>
+<a name="91"><span class="lineNum"> 91 </span> :<span class="lineCov"> 1 : int run_test()</span></a>
+<a name="92"><span class="lineNum"> 92 </span> : : {</a>
+<a name="93"><span class="lineNum"> 93 </span> :<span class="lineCov"> 1 : int rc = -1;</span></a>
+<a name="94"><span class="lineNum"> 94 </span> : : struct secvar *tmp;</a>
+<a name="95"><span class="lineNum"> 95 </span> : : size_t tmp_size;</a>
+<a name="96"><span class="lineNum"> 96 </span> :<span class="lineCov"> 1 : char empty[64] = {0};</span></a>
+<a name="97"><span class="lineNum"> 97 </span> : : void *data;</a>
+<a name="98"><span class="lineNum"> 98 </span> : : </a>
+<a name="99"><span class="lineNum"> 99 </span> : : /* The sequence of test cases here is important to ensure that</a>
+<a name="100"><span class="lineNum"> 100 </span> : : * timestamp checks work as expected. */</a>
+<a name="101"><span class="lineNum"> 101 </span> : : </a>
+<a name="102"><span class="lineNum"> 102 </span> : : /* Check pre-process creates the empty variables. */</a>
+<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;variable_bank));</span></a>
+<a name="104"><span class="lineNum"> 104 </span> :<span class="lineCov"> 1 : rc = edk2_compat_pre_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
+<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;TS&quot;, 3, &amp;variable_bank);</span></a>
+<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="109"><span class="lineNum"> 109 </span> :<span class="lineCov"> 1 : ASSERT(64 == tmp-&gt;data_size);</span></a>
+<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 1 : ASSERT(!(memcmp(tmp-&gt;data, empty, 64)));</span></a>
+<a name="111"><span class="lineNum"> 111 </span> : : </a>
+<a name="112"><span class="lineNum"> 112 </span> : : /* Add test to verify hw_key_hash.</a>
+<a name="113"><span class="lineNum"> 113 </span> : : * This is to ensure that mismatch of test happens.</a>
+<a name="114"><span class="lineNum"> 114 </span> : : * The test uses test_hw_key_hash variable to ensure that</a>
+<a name="115"><span class="lineNum"> 115 </span> : : * mismatch happens. For all next tests, test_hw_key_hash variable</a>
+<a name="116"><span class="lineNum"> 116 </span> : : * should be zero to avoid hard-coded mismatch.</a>
+<a name="117"><span class="lineNum"> 117 </span> : : */</a>
+<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 1 : test_hw_key_hash = 1;</span></a>
+<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 1 : setup_mode = false;</span></a>
+<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 1 : printf(&quot;Add PK&quot;);</span></a>
+<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;PK&quot;, 3, PK_auth, PK_auth_len, 0);</span></a>
+<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="124"><span class="lineNum"> 124 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="126"><span class="lineNum"> 126 </span> :<span class="lineCov"> 1 : printf(&quot;rc is %04x %d\n&quot;, rc, rc);</span></a>
+<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
+<a name="128"><span class="lineNum"> 128 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 1 : ASSERT(setup_mode);</span></a>
+<a name="130"><span class="lineNum"> 130 </span> : : </a>
+<a name="131"><span class="lineNum"> 131 </span> : : /* Set test_hw_key_hash to zero to avoid hardcoded mismatch. */</a>
+<a name="132"><span class="lineNum"> 132 </span> :<span class="lineCov"> 1 : test_hw_key_hash = 0;</span></a>
<a name="133"><span class="lineNum"> 133 </span> : : </a>
-<a name="134"><span class="lineNum"> 134 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;dbx&quot;, 4, wrongdbxauth, wrong_dbx_auth_len, 0);</span></a>
-<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="137"><span class="lineNum"> 137 </span> :<span class="lineCov"> 1 : ASSERT(2 == list_length(&amp;update_bank));</span></a>
-<a name="138"><span class="lineNum"> 138 </span> : : </a>
-<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PARAMETER == rc);</span></a>
-<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 1 : rc = edk2_compat_post_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="145"><span class="lineNum"> 145 </span> :<span class="lineCov"> 1 : ASSERT(setup_mode);</span></a>
-<a name="146"><span class="lineNum"> 146 </span> : : </a>
-<a name="147"><span class="lineNum"> 147 </span> : : /* Add PK and db, db update should fail, so all updates fail. */</a>
-<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 1 : printf(&quot;Add PK&quot;);</span></a>
-<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;PK&quot;, 3, PK_auth, PK_auth_len, 0);</span></a>
-<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="153"><span class="lineNum"> 153 </span> :<span class="lineCov"> 1 : printf(&quot;Add db&quot;);</span></a>
-<a name="154"><span class="lineNum"> 154 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;db&quot;, 3, DB_auth, sizeof(DB_auth), 0);</span></a>
-<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="156"><span class="lineNum"> 156 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 1 : ASSERT(2 == list_length(&amp;update_bank));</span></a>
-<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PERMISSION == rc);</span></a>
-<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 1 : rc = edk2_compat_post_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="164"><span class="lineNum"> 164 </span> :<span class="lineCov"> 1 : ASSERT(setup_mode);</span></a>
-<a name="165"><span class="lineNum"> 165 </span> : : </a>
-<a name="166"><span class="lineNum"> 166 </span> : : /* Add PK to update and .process(). */</a>
-<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 1 : printf(&quot;Add PK&quot;);</span></a>
-<a name="168"><span class="lineNum"> 168 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;PK&quot;, 3, PK_auth, PK_auth_len, 0);</span></a>
-<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="170"><span class="lineNum"> 170 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="171"><span class="lineNum"> 171 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="134"><span class="lineNum"> 134 </span> : : /* Add PK and a failed update. */</a>
+<a name="135"><span class="lineNum"> 135 </span> :<span class="lineCov"> 1 : printf(&quot;Add PK and failed dbx&quot;);</span></a>
+<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;PK&quot;, 3, PK_auth, PK_auth_len, 0);</span></a>
+<a name="137"><span class="lineNum"> 137 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="139"><span class="lineNum"> 139 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="140"><span class="lineNum"> 140 </span> : : </a>
+<a name="141"><span class="lineNum"> 141 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;dbx&quot;, 4, wrongdbxauth, wrong_dbx_auth_len, 0);</span></a>
+<a name="142"><span class="lineNum"> 142 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="143"><span class="lineNum"> 143 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="144"><span class="lineNum"> 144 </span> :<span class="lineCov"> 1 : ASSERT(2 == list_length(&amp;update_bank));</span></a>
+<a name="145"><span class="lineNum"> 145 </span> : : </a>
+<a name="146"><span class="lineNum"> 146 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="147"><span class="lineNum"> 147 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PARAMETER == rc);</span></a>
+<a name="148"><span class="lineNum"> 148 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="149"><span class="lineNum"> 149 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="150"><span class="lineNum"> 150 </span> :<span class="lineCov"> 1 : rc = edk2_compat_post_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="151"><span class="lineNum"> 151 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="152"><span class="lineNum"> 152 </span> :<span class="lineCov"> 1 : ASSERT(setup_mode);</span></a>
+<a name="153"><span class="lineNum"> 153 </span> : : </a>
+<a name="154"><span class="lineNum"> 154 </span> : : /* Add PK and db, db update should fail, so all updates fail. */</a>
+<a name="155"><span class="lineNum"> 155 </span> :<span class="lineCov"> 1 : printf(&quot;Add PK&quot;);</span></a>
+<a name="156"><span class="lineNum"> 156 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;PK&quot;, 3, PK_auth, PK_auth_len, 0);</span></a>
+<a name="157"><span class="lineNum"> 157 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="158"><span class="lineNum"> 158 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="159"><span class="lineNum"> 159 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="160"><span class="lineNum"> 160 </span> :<span class="lineCov"> 1 : printf(&quot;Add db&quot;);</span></a>
+<a name="161"><span class="lineNum"> 161 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;db&quot;, 3, DB_auth, sizeof(DB_auth), 0);</span></a>
+<a name="162"><span class="lineNum"> 162 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="163"><span class="lineNum"> 163 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="164"><span class="lineNum"> 164 </span> :<span class="lineCov"> 1 : ASSERT(2 == list_length(&amp;update_bank));</span></a>
+<a name="165"><span class="lineNum"> 165 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="166"><span class="lineNum"> 166 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PERMISSION == rc);</span></a>
+<a name="167"><span class="lineNum"> 167 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="168"><span class="lineNum"> 168 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="169"><span class="lineNum"> 169 </span> :<span class="lineCov"> 1 : rc = edk2_compat_post_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="170"><span class="lineNum"> 170 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="171"><span class="lineNum"> 171 </span> :<span class="lineCov"> 1 : ASSERT(setup_mode);</span></a>
<a name="172"><span class="lineNum"> 172 </span> : : </a>
-<a name="173"><span class="lineNum"> 173 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="174"><span class="lineNum"> 174 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
-<a name="175"><span class="lineNum"> 175 </span> :<span class="lineCov"> 1 : ASSERT(6 == list_length(&amp;variable_bank));</span></a>
-<a name="176"><span class="lineNum"> 176 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="177"><span class="lineNum"> 177 </span> :<span class="lineCov"> 1 : rc = edk2_compat_post_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;PK&quot;, 3, &amp;variable_bank);</span></a>
-<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
-<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
-<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 1 : ASSERT(PK_auth_len &gt; tmp-&gt;data_size); /* esl should be smaller without auth. */</span></a>
-<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 1 : ASSERT(!setup_mode);</span></a>
-<a name="184"><span class="lineNum"> 184 </span> : : </a>
-<a name="185"><span class="lineNum"> 185 </span> : : /* Add db, should fail with no KEK. */</a>
-<a name="186"><span class="lineNum"> 186 </span> :<span class="lineCov"> 1 : printf(&quot;Add db&quot;);</span></a>
-<a name="187"><span class="lineNum"> 187 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;db&quot;, 3, DB_auth, DB_auth_len, 0);</span></a>
-<a name="188"><span class="lineNum"> 188 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="190"><span class="lineNum"> 190 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="191"><span class="lineNum"> 191 </span> : : </a>
-<a name="192"><span class="lineNum"> 192 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PERMISSION == rc);</span></a>
-<a name="194"><span class="lineNum"> 194 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="196"><span class="lineNum"> 196 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;db&quot;, 3, &amp;variable_bank);</span></a>
-<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
-<a name="198"><span class="lineNum"> 198 </span> : : </a>
-<a name="199"><span class="lineNum"> 199 </span> : : /* Add valid KEK, .process(), succeeds. */</a>
-<a name="200"><span class="lineNum"> 200 </span> :<span class="lineCov"> 1 : printf(&quot;Add KEK&quot;);</span></a>
-<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;KEK&quot;, 4, KEK_auth, KEK_auth_len, 0);</span></a>
-<a name="202"><span class="lineNum"> 202 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="204"><span class="lineNum"> 204 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="205"><span class="lineNum"> 205 </span> : : </a>
-<a name="206"><span class="lineNum"> 206 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="207"><span class="lineNum"> 207 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
-<a name="208"><span class="lineNum"> 208 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;KEK&quot;, 4, &amp;variable_bank);</span></a>
-<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
-<a name="212"><span class="lineNum"> 212 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
+<a name="173"><span class="lineNum"> 173 </span> : : /* Add PK with bad ESL. should fail since data is not big enough to be ESL*/</a>
+<a name="174"><span class="lineNum"> 174 </span> :<span class="lineCov"> 1 : printf(&quot;Add PK with invalid appended ESL&quot;);</span></a>
+<a name="175"><span class="lineNum"> 175 </span> : : /* 1014 is length of appended ESL Header and its data */</a>
+<a name="176"><span class="lineNum"> 176 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;PK&quot;, 3, PK_auth, PK_auth_len - 1014 + sizeof(EFI_SIGNATURE_LIST) - 1, 0);</span></a>
+<a name="177"><span class="lineNum"> 177 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="178"><span class="lineNum"> 178 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="180"><span class="lineNum"> 180 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="182"><span class="lineNum"> 182 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="183"><span class="lineNum"> 183 </span> :<span class="lineCov"> 1 : rc = edk2_compat_post_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="184"><span class="lineNum"> 184 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="185"><span class="lineNum"> 185 </span> :<span class="lineCov"> 1 : ASSERT(setup_mode);</span></a>
+<a name="186"><span class="lineNum"> 186 </span> : : </a>
+<a name="187"><span class="lineNum"> 187 </span> : : </a>
+<a name="188"><span class="lineNum"> 188 </span> : : /* Add PK to update and .process(). */</a>
+<a name="189"><span class="lineNum"> 189 </span> :<span class="lineCov"> 1 : printf(&quot;Add PK&quot;);</span></a>
+<a name="190"><span class="lineNum"> 190 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;PK&quot;, 3, PK_auth, PK_auth_len, 0);</span></a>
+<a name="191"><span class="lineNum"> 191 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="192"><span class="lineNum"> 192 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="193"><span class="lineNum"> 193 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="194"><span class="lineNum"> 194 </span> : : </a>
+<a name="195"><span class="lineNum"> 195 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="196"><span class="lineNum"> 196 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
+<a name="197"><span class="lineNum"> 197 </span> :<span class="lineCov"> 1 : ASSERT(6 == list_length(&amp;variable_bank));</span></a>
+<a name="198"><span class="lineNum"> 198 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="199"><span class="lineNum"> 199 </span> :<span class="lineCov"> 1 : rc = edk2_compat_post_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="200"><span class="lineNum"> 200 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="201"><span class="lineNum"> 201 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;PK&quot;, 3, &amp;variable_bank);</span></a>
+<a name="202"><span class="lineNum"> 202 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="203"><span class="lineNum"> 203 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
+<a name="204"><span class="lineNum"> 204 </span> :<span class="lineCov"> 1 : ASSERT(PK_auth_len &gt; tmp-&gt;data_size); /* esl should be smaller without auth. */</span></a>
+<a name="205"><span class="lineNum"> 205 </span> :<span class="lineCov"> 1 : ASSERT(!setup_mode);</span></a>
+<a name="206"><span class="lineNum"> 206 </span> : : </a>
+<a name="207"><span class="lineNum"> 207 </span> : : /* Add db, should fail with no KEK. */</a>
+<a name="208"><span class="lineNum"> 208 </span> :<span class="lineCov"> 1 : printf(&quot;Add db&quot;);</span></a>
+<a name="209"><span class="lineNum"> 209 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;db&quot;, 3, DB_auth, DB_auth_len, 0);</span></a>
+<a name="210"><span class="lineNum"> 210 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="211"><span class="lineNum"> 211 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="212"><span class="lineNum"> 212 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
<a name="213"><span class="lineNum"> 213 </span> : : </a>
-<a name="214"><span class="lineNum"> 214 </span> : : /* Add valid KEK, .process(), timestamp check fails. */</a>
-<a name="215"><span class="lineNum"> 215 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;KEK&quot;, 4, OldTS_KEK_auth, OldTS_KEK_auth_len, 0);</span></a>
-<a name="216"><span class="lineNum"> 216 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="217"><span class="lineNum"> 217 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="218"><span class="lineNum"> 218 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="219"><span class="lineNum"> 219 </span> : : </a>
-<a name="220"><span class="lineNum"> 220 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="221"><span class="lineNum"> 221 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PERMISSION == rc);</span></a>
-<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="223"><span class="lineNum"> 223 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="224"><span class="lineNum"> 224 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;KEK&quot;, 4, &amp;variable_bank);</span></a>
+<a name="214"><span class="lineNum"> 214 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="215"><span class="lineNum"> 215 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PERMISSION == rc);</span></a>
+<a name="216"><span class="lineNum"> 216 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="217"><span class="lineNum"> 217 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="218"><span class="lineNum"> 218 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;db&quot;, 3, &amp;variable_bank);</span></a>
+<a name="219"><span class="lineNum"> 219 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="220"><span class="lineNum"> 220 </span> : : </a>
+<a name="221"><span class="lineNum"> 221 </span> : : /* Add db, should fail with no KEK and invalid PK size */</a>
+<a name="222"><span class="lineNum"> 222 </span> :<span class="lineCov"> 1 : printf(&quot;Add db, corrupt PK&quot;);</span></a>
+<a name="223"><span class="lineNum"> 223 </span> : : /* Somehow PK gets assigned wrong size */</a>
+<a name="224"><span class="lineNum"> 224 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;PK&quot;, 3, &amp;variable_bank);</span></a>
<a name="225"><span class="lineNum"> 225 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
-<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
-<a name="227"><span class="lineNum"> 227 </span> : : </a>
-<a name="228"><span class="lineNum"> 228 </span> : : /* Add db, .process(), should succeed. */</a>
-<a name="229"><span class="lineNum"> 229 </span> :<span class="lineCov"> 1 : printf(&quot;Add db again\n&quot;);</span></a>
-<a name="230"><span class="lineNum"> 230 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;db&quot;, 3, DB_auth, DB_auth_len, 0);</span></a>
-<a name="231"><span class="lineNum"> 231 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="232"><span class="lineNum"> 232 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="233"><span class="lineNum"> 233 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="234"><span class="lineNum"> 234 </span> : : </a>
-<a name="235"><span class="lineNum"> 235 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
-<a name="237"><span class="lineNum"> 237 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="238"><span class="lineNum"> 238 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="239"><span class="lineNum"> 239 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;db&quot;, 3, &amp;variable_bank);</span></a>
-<a name="240"><span class="lineNum"> 240 </span> :<span class="lineCov"> 1 : printf(&quot;tmp is %s\n&quot;, tmp-&gt;key);</span></a>
-<a name="241"><span class="lineNum"> 241 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
-<a name="242"><span class="lineNum"> 242 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
-<a name="243"><span class="lineNum"> 243 </span> : : </a>
-<a name="244"><span class="lineNum"> 244 </span> : : /* Add db, .process(), should fail because of timestamp. */</a>
-<a name="245"><span class="lineNum"> 245 </span> :<span class="lineCov"> 1 : printf(&quot;Add db again\n&quot;);</span></a>
-<a name="246"><span class="lineNum"> 246 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;db&quot;, 3, DB_auth, DB_auth_len, 0);</span></a>
-<a name="247"><span class="lineNum"> 247 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="248"><span class="lineNum"> 248 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="249"><span class="lineNum"> 249 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="250"><span class="lineNum"> 250 </span> : : </a>
-<a name="251"><span class="lineNum"> 251 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="252"><span class="lineNum"> 252 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PERMISSION == rc);</span></a>
-<a name="253"><span class="lineNum"> 253 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="254"><span class="lineNum"> 254 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;db&quot;, 3, &amp;variable_bank);</span></a>
-<a name="256"><span class="lineNum"> 256 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
-<a name="257"><span class="lineNum"> 257 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
-<a name="258"><span class="lineNum"> 258 </span> : : </a>
-<a name="259"><span class="lineNum"> 259 </span> : : /* Add valid sha256 dbx. */</a>
-<a name="260"><span class="lineNum"> 260 </span> :<span class="lineCov"> 1 : printf(&quot;Add sha256 dbx\n&quot;);</span></a>
-<a name="261"><span class="lineNum"> 261 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;dbx&quot;, 4, dbxauth, dbx_auth_len, 0);</span></a>
-<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="263"><span class="lineNum"> 263 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="264"><span class="lineNum"> 264 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="265"><span class="lineNum"> 265 </span> : : </a>
-<a name="266"><span class="lineNum"> 266 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="267"><span class="lineNum"> 267 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
-<a name="268"><span class="lineNum"> 268 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="269"><span class="lineNum"> 269 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="270"><span class="lineNum"> 270 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;db&quot;, 3, &amp;variable_bank);</span></a>
-<a name="271"><span class="lineNum"> 271 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
-<a name="272"><span class="lineNum"> 272 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
-<a name="273"><span class="lineNum"> 273 </span> : : </a>
-<a name="274"><span class="lineNum"> 274 </span> : : /* Add invalid KEK, .process(), should fail. Timestamp check failure. */</a>
-<a name="275"><span class="lineNum"> 275 </span> :<span class="lineCov"> 1 : printf(&quot;Add invalid KEK\n&quot;);</span></a>
-<a name="276"><span class="lineNum"> 276 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;KEK&quot;, 4, InvalidKEK_auth, InvalidKEK_auth_len, 0);</span></a>
-<a name="277"><span class="lineNum"> 277 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="278"><span class="lineNum"> 278 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="279"><span class="lineNum"> 279 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="280"><span class="lineNum"> 280 </span> : : </a>
-<a name="281"><span class="lineNum"> 281 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="282"><span class="lineNum"> 282 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PERMISSION == rc);</span></a>
-<a name="283"><span class="lineNum"> 283 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="284"><span class="lineNum"> 284 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="285"><span class="lineNum"> 285 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;KEK&quot;, 4, &amp;variable_bank);</span></a>
-<a name="286"><span class="lineNum"> 286 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
-<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
-<a name="288"><span class="lineNum"> 288 </span> : : </a>
-<a name="289"><span class="lineNum"> 289 </span> : : /* Add ill formatted KEK, .process(), should fail. */</a>
-<a name="290"><span class="lineNum"> 290 </span> :<span class="lineCov"> 1 : printf(&quot;Add invalid KEK\n&quot;);</span></a>
-<a name="291"><span class="lineNum"> 291 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;KEK&quot;, 4, MalformedKEK_auth, MalformedKEK_auth_len, 0);</span></a>
-<a name="292"><span class="lineNum"> 292 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="293"><span class="lineNum"> 293 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="294"><span class="lineNum"> 294 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="295"><span class="lineNum"> 295 </span> : : </a>
-<a name="296"><span class="lineNum"> 296 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="297"><span class="lineNum"> 297 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PARAMETER == rc);</span></a>
-<a name="298"><span class="lineNum"> 298 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="300"><span class="lineNum"> 300 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;KEK&quot;, 4, &amp;variable_bank);</span></a>
-<a name="301"><span class="lineNum"> 301 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
-<a name="302"><span class="lineNum"> 302 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
-<a name="303"><span class="lineNum"> 303 </span> : : </a>
-<a name="304"><span class="lineNum"> 304 </span> : : /* Add multiple db and then multiple KEKs.</a>
-<a name="305"><span class="lineNum"> 305 </span> : : * The db should be signed with a KEK yet to be added.</a>
-<a name="306"><span class="lineNum"> 306 </span> : : */</a>
-<a name="307"><span class="lineNum"> 307 </span> :<span class="lineCov"> 1 : printf(&quot;Add multiple db\n&quot;);</span></a>
-<a name="308"><span class="lineNum"> 308 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;db&quot;, 3, multipleDB_auth, multipleDB_auth_len, 0);</span></a>
-<a name="309"><span class="lineNum"> 309 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="311"><span class="lineNum"> 311 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 1 : printf(&quot;Add multiple KEK\n&quot;);</span></a>
-<a name="313"><span class="lineNum"> 313 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;KEK&quot;, 4, multipleKEK_auth, multipleKEK_auth_len, 0);</span></a>
-<a name="314"><span class="lineNum"> 314 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="315"><span class="lineNum"> 315 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="316"><span class="lineNum"> 316 </span> :<span class="lineCov"> 1 : ASSERT(2 == list_length(&amp;update_bank));</span></a>
-<a name="317"><span class="lineNum"> 317 </span> : : </a>
-<a name="318"><span class="lineNum"> 318 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PERMISSION == rc);</span></a>
-<a name="320"><span class="lineNum"> 320 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="321"><span class="lineNum"> 321 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="322"><span class="lineNum"> 322 </span> : : </a>
-<a name="323"><span class="lineNum"> 323 </span> : : /* Add multiple KEK ESLs, one of them should sign the db. */</a>
-<a name="324"><span class="lineNum"> 324 </span> :<span class="lineCov"> 1 : printf(&quot;Add multiple KEK\n&quot;);</span></a>
-<a name="325"><span class="lineNum"> 325 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;KEK&quot;, 4, multipleKEK_auth, multipleKEK_auth_len, 0);</span></a>
+<a name="226"><span class="lineNum"> 226 </span> :<span class="lineCov"> 1 : tmp_size = tmp-&gt;data_size;</span></a>
+<a name="227"><span class="lineNum"> 227 </span> :<span class="lineCov"> 1 : tmp-&gt;data_size = sizeof(EFI_SIGNATURE_LIST) - 1;</span></a>
+<a name="228"><span class="lineNum"> 228 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;db&quot;, 3, DB_auth, DB_auth_len, 0);</span></a>
+<a name="229"><span class="lineNum"> 229 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="230"><span class="lineNum"> 230 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="231"><span class="lineNum"> 231 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="232"><span class="lineNum"> 232 </span> : : </a>
+<a name="233"><span class="lineNum"> 233 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="234"><span class="lineNum"> 234 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_INTERNAL_ERROR == rc);</span></a>
+<a name="235"><span class="lineNum"> 235 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="236"><span class="lineNum"> 236 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="237"><span class="lineNum"> 237 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;db&quot;, 3, &amp;variable_bank);</span></a>
+<a name="238"><span class="lineNum"> 238 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="239"><span class="lineNum"> 239 </span> :<span class="lineCov"> 1 : ASSERT(0 == tmp-&gt;data_size);</span></a>
+<a name="240"><span class="lineNum"> 240 </span> : : /* Restore PK data size */</a>
+<a name="241"><span class="lineNum"> 241 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;PK&quot;, 3, &amp;variable_bank);</span></a>
+<a name="242"><span class="lineNum"> 242 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="243"><span class="lineNum"> 243 </span> :<span class="lineCov"> 1 : tmp-&gt;data_size = tmp_size;</span></a>
+<a name="244"><span class="lineNum"> 244 </span> : : </a>
+<a name="245"><span class="lineNum"> 245 </span> : : /* Add trimmed KEK, .process(), should fail. */</a>
+<a name="246"><span class="lineNum"> 246 </span> :<span class="lineCov"> 1 : printf(&quot;Add trimmed KEK\n&quot;);</span></a>
+<a name="247"><span class="lineNum"> 247 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;KEK&quot;, 4, trimmedKEK_auth, trimmedKEK_auth_len, 0);</span></a>
+<a name="248"><span class="lineNum"> 248 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="249"><span class="lineNum"> 249 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="250"><span class="lineNum"> 250 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="251"><span class="lineNum"> 251 </span> : : </a>
+<a name="252"><span class="lineNum"> 252 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="253"><span class="lineNum"> 253 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PARAMETER == rc);</span></a>
+<a name="254"><span class="lineNum"> 254 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="256"><span class="lineNum"> 256 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;KEK&quot;, 4, &amp;variable_bank);</span></a>
+<a name="257"><span class="lineNum"> 257 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="258"><span class="lineNum"> 258 </span> :<span class="lineCov"> 1 : ASSERT(0 == tmp-&gt;data_size);</span></a>
+<a name="259"><span class="lineNum"> 259 </span> : : </a>
+<a name="260"><span class="lineNum"> 260 </span> :<span class="lineCov"> 1 : printf(&quot;Try truncated KEK &lt; size of auth structure:\n&quot;);</span></a>
+<a name="261"><span class="lineNum"> 261 </span> :<span class="lineCov"> 1 : data = malloc(1467);</span></a>
+<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 1 : memcpy(data, KEK_auth, 1467);</span></a>
+<a name="263"><span class="lineNum"> 263 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;KEK&quot;, 4, data, 1467, 0);</span></a>
+<a name="264"><span class="lineNum"> 264 </span> :<span class="lineCov"> 1 : rc = edk2_compat_validate(tmp);</span></a>
+<a name="265"><span class="lineNum"> 265 </span> :<span class="lineCov"> 1 : ASSERT(0 == rc);</span></a>
+<a name="266"><span class="lineNum"> 266 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="267"><span class="lineNum"> 267 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="268"><span class="lineNum"> 268 </span> : : </a>
+<a name="269"><span class="lineNum"> 269 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="270"><span class="lineNum"> 270 </span> :<span class="lineCov"> 1 : ASSERT(0 != rc);</span></a>
+<a name="271"><span class="lineNum"> 271 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="272"><span class="lineNum"> 272 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="273"><span class="lineNum"> 273 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;KEK&quot;, 4, &amp;variable_bank);</span></a>
+<a name="274"><span class="lineNum"> 274 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="275"><span class="lineNum"> 275 </span> :<span class="lineCov"> 1 : ASSERT(0 == tmp-&gt;data_size);</span></a>
+<a name="276"><span class="lineNum"> 276 </span> :<span class="lineCov"> 1 : free(data);</span></a>
+<a name="277"><span class="lineNum"> 277 </span> : : </a>
+<a name="278"><span class="lineNum"> 278 </span> : : /* KEK with corrupted ESL SignatureSize */</a>
+<a name="279"><span class="lineNum"> 279 </span> :<span class="lineCov"> 1 : printf(&quot;KEK with corrupt ESL SignatureSize\n&quot;);</span></a>
+<a name="280"><span class="lineNum"> 280 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;KEK&quot;, 4, KEKeslcorrupt_auth, KEKeslcorrupt_auth_len, 0);</span></a>
+<a name="281"><span class="lineNum"> 281 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="282"><span class="lineNum"> 282 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="283"><span class="lineNum"> 283 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="284"><span class="lineNum"> 284 </span> : : </a>
+<a name="285"><span class="lineNum"> 285 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="286"><span class="lineNum"> 286 </span> : : /* If we don't catch the error, we get OPAL_NO_MEM instead */</a>
+<a name="287"><span class="lineNum"> 287 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PARAMETER == rc);</span></a>
+<a name="288"><span class="lineNum"> 288 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="289"><span class="lineNum"> 289 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="290"><span class="lineNum"> 290 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;KEK&quot;, 4, &amp;variable_bank);</span></a>
+<a name="291"><span class="lineNum"> 291 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="292"><span class="lineNum"> 292 </span> :<span class="lineCov"> 1 : ASSERT(0 == tmp-&gt;data_size);</span></a>
+<a name="293"><span class="lineNum"> 293 </span> : : </a>
+<a name="294"><span class="lineNum"> 294 </span> : : /* KEK with corrupted pkcs7, used to leak memory */</a>
+<a name="295"><span class="lineNum"> 295 </span> :<span class="lineCov"> 1 : printf(&quot;KEK with corrupt PKCS#7 message\n&quot;);</span></a>
+<a name="296"><span class="lineNum"> 296 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;KEK&quot;, 4, KEKpkcs7corrupt_auth, KEKpkcs7corrupt_auth_len, 0);</span></a>
+<a name="297"><span class="lineNum"> 297 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="298"><span class="lineNum"> 298 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="299"><span class="lineNum"> 299 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="300"><span class="lineNum"> 300 </span> : : </a>
+<a name="301"><span class="lineNum"> 301 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="302"><span class="lineNum"> 302 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PARAMETER == rc);</span></a>
+<a name="303"><span class="lineNum"> 303 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="304"><span class="lineNum"> 304 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="305"><span class="lineNum"> 305 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;KEK&quot;, 4, &amp;variable_bank);</span></a>
+<a name="306"><span class="lineNum"> 306 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="307"><span class="lineNum"> 307 </span> :<span class="lineCov"> 1 : ASSERT(0 == tmp-&gt;data_size);</span></a>
+<a name="308"><span class="lineNum"> 308 </span> : : </a>
+<a name="309"><span class="lineNum"> 309 </span> : : /* Add valid KEK, .process(), succeeds. */</a>
+<a name="310"><span class="lineNum"> 310 </span> :<span class="lineCov"> 1 : printf(&quot;Add KEK&quot;);</span></a>
+<a name="311"><span class="lineNum"> 311 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;KEK&quot;, 4, KEK_auth, KEK_auth_len, 0);</span></a>
+<a name="312"><span class="lineNum"> 312 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="313"><span class="lineNum"> 313 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="314"><span class="lineNum"> 314 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="315"><span class="lineNum"> 315 </span> : : </a>
+<a name="316"><span class="lineNum"> 316 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="317"><span class="lineNum"> 317 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
+<a name="318"><span class="lineNum"> 318 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="319"><span class="lineNum"> 319 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="320"><span class="lineNum"> 320 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;KEK&quot;, 4, &amp;variable_bank);</span></a>
+<a name="321"><span class="lineNum"> 321 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="322"><span class="lineNum"> 322 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
+<a name="323"><span class="lineNum"> 323 </span> : : </a>
+<a name="324"><span class="lineNum"> 324 </span> : : /* Add valid KEK, .process(), timestamp check fails. */</a>
+<a name="325"><span class="lineNum"> 325 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;KEK&quot;, 4, OldTS_KEK_auth, OldTS_KEK_auth_len, 0);</span></a>
<a name="326"><span class="lineNum"> 326 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
<a name="327"><span class="lineNum"> 327 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
<a name="328"><span class="lineNum"> 328 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="329"><span class="lineNum"> 329 </span> :<span class="lineCov"> 1 : printf(&quot;Add multiple db\n&quot;);</span></a>
-<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;db&quot;, 3, multipleDB_auth, multipleDB_auth_len, 0);</span></a>
-<a name="331"><span class="lineNum"> 331 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="333"><span class="lineNum"> 333 </span> :<span class="lineCov"> 1 : ASSERT(2 == list_length(&amp;update_bank));</span></a>
-<a name="334"><span class="lineNum"> 334 </span> : : </a>
-<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="336"><span class="lineNum"> 336 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
-<a name="337"><span class="lineNum"> 337 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="338"><span class="lineNum"> 338 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="339"><span class="lineNum"> 339 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;KEK&quot;, 4, &amp;variable_bank);</span></a>
-<a name="340"><span class="lineNum"> 340 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
-<a name="341"><span class="lineNum"> 341 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
-<a name="342"><span class="lineNum"> 342 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;db&quot;, 3, &amp;variable_bank);</span></a>
-<a name="343"><span class="lineNum"> 343 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
-<a name="344"><span class="lineNum"> 344 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
-<a name="345"><span class="lineNum"> 345 </span> : : </a>
-<a name="346"><span class="lineNum"> 346 </span> : : /* Add db with signeddata PKCS7 format. */</a>
-<a name="347"><span class="lineNum"> 347 </span> :<span class="lineCov"> 1 : printf(&quot;DB with signed data\n&quot;);</span></a>
-<a name="348"><span class="lineNum"> 348 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;db&quot;, 3, dbsigneddata_auth, dbsigneddata_auth_len, 0);</span></a>
-<a name="349"><span class="lineNum"> 349 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="350"><span class="lineNum"> 350 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="351"><span class="lineNum"> 351 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="352"><span class="lineNum"> 352 </span> : : </a>
-<a name="353"><span class="lineNum"> 353 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="354"><span class="lineNum"> 354 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
-<a name="355"><span class="lineNum"> 355 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="356"><span class="lineNum"> 356 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="357"><span class="lineNum"> 357 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;db&quot;, 3, &amp;variable_bank);</span></a>
-<a name="358"><span class="lineNum"> 358 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
-<a name="359"><span class="lineNum"> 359 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
+<a name="329"><span class="lineNum"> 329 </span> : : </a>
+<a name="330"><span class="lineNum"> 330 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="331"><span class="lineNum"> 331 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PERMISSION == rc);</span></a>
+<a name="332"><span class="lineNum"> 332 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="333"><span class="lineNum"> 333 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="334"><span class="lineNum"> 334 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;KEK&quot;, 4, &amp;variable_bank);</span></a>
+<a name="335"><span class="lineNum"> 335 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="336"><span class="lineNum"> 336 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
+<a name="337"><span class="lineNum"> 337 </span> : : </a>
+<a name="338"><span class="lineNum"> 338 </span> : : /* Add db, .process(), should succeed. */</a>
+<a name="339"><span class="lineNum"> 339 </span> :<span class="lineCov"> 1 : printf(&quot;Add db again\n&quot;);</span></a>
+<a name="340"><span class="lineNum"> 340 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;db&quot;, 3, DB_auth, DB_auth_len, 0);</span></a>
+<a name="341"><span class="lineNum"> 341 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="342"><span class="lineNum"> 342 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="343"><span class="lineNum"> 343 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="344"><span class="lineNum"> 344 </span> : : </a>
+<a name="345"><span class="lineNum"> 345 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="346"><span class="lineNum"> 346 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
+<a name="347"><span class="lineNum"> 347 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="348"><span class="lineNum"> 348 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="349"><span class="lineNum"> 349 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;db&quot;, 3, &amp;variable_bank);</span></a>
+<a name="350"><span class="lineNum"> 350 </span> :<span class="lineCov"> 1 : printf(&quot;tmp is %s\n&quot;, tmp-&gt;key);</span></a>
+<a name="351"><span class="lineNum"> 351 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="352"><span class="lineNum"> 352 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
+<a name="353"><span class="lineNum"> 353 </span> : : </a>
+<a name="354"><span class="lineNum"> 354 </span> : : /* Add db, .process(), should fail because of timestamp. */</a>
+<a name="355"><span class="lineNum"> 355 </span> :<span class="lineCov"> 1 : printf(&quot;Add db again\n&quot;);</span></a>
+<a name="356"><span class="lineNum"> 356 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;db&quot;, 3, DB_auth, DB_auth_len, 0);</span></a>
+<a name="357"><span class="lineNum"> 357 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="358"><span class="lineNum"> 358 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="359"><span class="lineNum"> 359 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
<a name="360"><span class="lineNum"> 360 </span> : : </a>
-<a name="361"><span class="lineNum"> 361 </span> : : /* Delete PK and invalid dbx - to test queued updates for deleting PK. */</a>
-<a name="362"><span class="lineNum"> 362 </span> :<span class="lineCov"> 1 : printf(&quot;Delete PK\n&quot;);</span></a>
-<a name="363"><span class="lineNum"> 363 </span> : : /* Add hw_key_hash explicitly to ensure it is deleted as part of PK deletion. */</a>
-<a name="364"><span class="lineNum"> 364 </span> :<span class="lineCov"> 1 : add_hw_key_hash(&amp;variable_bank);</span></a>
-<a name="365"><span class="lineNum"> 365 </span> :<span class="lineCov"> 1 : ASSERT(6 == list_length(&amp;variable_bank));</span></a>
-<a name="366"><span class="lineNum"> 366 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;PK&quot;, 3, noPK_auth, noPK_auth_len, 0);</span></a>
-<a name="367"><span class="lineNum"> 367 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="368"><span class="lineNum"> 368 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="369"><span class="lineNum"> 369 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="370"><span class="lineNum"> 370 </span> :<span class="lineCov"> 1 : printf(&quot;Add invalid dbx\n&quot;);</span></a>
-<a name="371"><span class="lineNum"> 371 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;dbx&quot;, 4, wrongdbxauth, wrong_dbx_auth_len, 0);</span></a>
+<a name="361"><span class="lineNum"> 361 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="362"><span class="lineNum"> 362 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PERMISSION == rc);</span></a>
+<a name="363"><span class="lineNum"> 363 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="364"><span class="lineNum"> 364 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="365"><span class="lineNum"> 365 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;db&quot;, 3, &amp;variable_bank);</span></a>
+<a name="366"><span class="lineNum"> 366 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="367"><span class="lineNum"> 367 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
+<a name="368"><span class="lineNum"> 368 </span> : : </a>
+<a name="369"><span class="lineNum"> 369 </span> : : /* Add valid sha256 dbx. */</a>
+<a name="370"><span class="lineNum"> 370 </span> :<span class="lineCov"> 1 : printf(&quot;Add sha256 dbx\n&quot;);</span></a>
+<a name="371"><span class="lineNum"> 371 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;dbx&quot;, 4, dbxauth, dbx_auth_len, 0);</span></a>
<a name="372"><span class="lineNum"> 372 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
<a name="373"><span class="lineNum"> 373 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="374"><span class="lineNum"> 374 </span> :<span class="lineCov"> 1 : ASSERT(2 == list_length(&amp;update_bank));</span></a>
-<a name="375"><span class="lineNum"> 375 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="376"><span class="lineNum"> 376 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PARAMETER == rc);</span></a>
-<a name="377"><span class="lineNum"> 377 </span> :<span class="lineCov"> 1 : ASSERT(6 == list_length(&amp;variable_bank));</span></a>
-<a name="378"><span class="lineNum"> 378 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="379"><span class="lineNum"> 379 </span> :<span class="lineCov"> 1 : rc = edk2_compat_post_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="380"><span class="lineNum"> 380 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="381"><span class="lineNum"> 381 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;PK&quot;, 3, &amp;variable_bank);</span></a>
-<a name="382"><span class="lineNum"> 382 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
-<a name="383"><span class="lineNum"> 383 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
-<a name="384"><span class="lineNum"> 384 </span> :<span class="lineCov"> 1 : ASSERT(!setup_mode);</span></a>
-<a name="385"><span class="lineNum"> 385 </span> : : </a>
-<a name="386"><span class="lineNum"> 386 </span> : : /* Delete PK. */</a>
-<a name="387"><span class="lineNum"> 387 </span> :<span class="lineCov"> 1 : printf(&quot;Delete PK\n&quot;);</span></a>
-<a name="388"><span class="lineNum"> 388 </span> : : /* Add hw_key_hash explicitly to ensure it is deleted as part of PK deletion. */</a>
-<a name="389"><span class="lineNum"> 389 </span> :<span class="lineCov"> 1 : add_hw_key_hash(&amp;variable_bank);</span></a>
-<a name="390"><span class="lineNum"> 390 </span> :<span class="lineCov"> 1 : ASSERT(6 == list_length(&amp;variable_bank));</span></a>
-<a name="391"><span class="lineNum"> 391 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;PK&quot;, 3, noPK_auth, noPK_auth_len, 0);</span></a>
-<a name="392"><span class="lineNum"> 392 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="393"><span class="lineNum"> 393 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="394"><span class="lineNum"> 394 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="395"><span class="lineNum"> 395 </span> : : </a>
-<a name="396"><span class="lineNum"> 396 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="397"><span class="lineNum"> 397 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
-<a name="398"><span class="lineNum"> 398 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="399"><span class="lineNum"> 399 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="400"><span class="lineNum"> 400 </span> :<span class="lineCov"> 1 : rc = edk2_compat_post_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="401"><span class="lineNum"> 401 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="402"><span class="lineNum"> 402 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;PK&quot;, 3, &amp;variable_bank);</span></a>
-<a name="403"><span class="lineNum"> 403 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
-<a name="404"><span class="lineNum"> 404 </span> :<span class="lineCov"> 1 : ASSERT(0 == tmp-&gt;data_size);</span></a>
-<a name="405"><span class="lineNum"> 405 </span> :<span class="lineCov"> 1 : ASSERT(setup_mode);</span></a>
-<a name="406"><span class="lineNum"> 406 </span> : : </a>
-<a name="407"><span class="lineNum"> 407 </span> : : /* Add multiple PK. */</a>
-<a name="408"><span class="lineNum"> 408 </span> :<span class="lineCov"> 1 : printf(&quot;Multiple PK\n&quot;);</span></a>
-<a name="409"><span class="lineNum"> 409 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;PK&quot;, 3, multiplePK_auth, multiplePK_auth_len, 0);</span></a>
-<a name="410"><span class="lineNum"> 410 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="411"><span class="lineNum"> 411 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="412"><span class="lineNum"> 412 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="374"><span class="lineNum"> 374 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="375"><span class="lineNum"> 375 </span> : : </a>
+<a name="376"><span class="lineNum"> 376 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="377"><span class="lineNum"> 377 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
+<a name="378"><span class="lineNum"> 378 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="379"><span class="lineNum"> 379 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="380"><span class="lineNum"> 380 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;db&quot;, 3, &amp;variable_bank);</span></a>
+<a name="381"><span class="lineNum"> 381 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="382"><span class="lineNum"> 382 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
+<a name="383"><span class="lineNum"> 383 </span> : : </a>
+<a name="384"><span class="lineNum"> 384 </span> : : /* Add invalid KEK, .process(), should fail. Timestamp check failure. */</a>
+<a name="385"><span class="lineNum"> 385 </span> :<span class="lineCov"> 1 : printf(&quot;Add invalid KEK\n&quot;);</span></a>
+<a name="386"><span class="lineNum"> 386 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;KEK&quot;, 4, InvalidKEK_auth, InvalidKEK_auth_len, 0);</span></a>
+<a name="387"><span class="lineNum"> 387 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="388"><span class="lineNum"> 388 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="389"><span class="lineNum"> 389 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="390"><span class="lineNum"> 390 </span> : : </a>
+<a name="391"><span class="lineNum"> 391 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="392"><span class="lineNum"> 392 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PERMISSION == rc);</span></a>
+<a name="393"><span class="lineNum"> 393 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="394"><span class="lineNum"> 394 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="395"><span class="lineNum"> 395 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;KEK&quot;, 4, &amp;variable_bank);</span></a>
+<a name="396"><span class="lineNum"> 396 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="397"><span class="lineNum"> 397 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
+<a name="398"><span class="lineNum"> 398 </span> : : </a>
+<a name="399"><span class="lineNum"> 399 </span> : : /* Add ill formatted KEK, .process(), should fail. */</a>
+<a name="400"><span class="lineNum"> 400 </span> :<span class="lineCov"> 1 : printf(&quot;Add invalid KEK\n&quot;);</span></a>
+<a name="401"><span class="lineNum"> 401 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;KEK&quot;, 4, MalformedKEK_auth, MalformedKEK_auth_len, 0);</span></a>
+<a name="402"><span class="lineNum"> 402 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="403"><span class="lineNum"> 403 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="404"><span class="lineNum"> 404 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="405"><span class="lineNum"> 405 </span> : : </a>
+<a name="406"><span class="lineNum"> 406 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="407"><span class="lineNum"> 407 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PARAMETER == rc);</span></a>
+<a name="408"><span class="lineNum"> 408 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="409"><span class="lineNum"> 409 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="410"><span class="lineNum"> 410 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;KEK&quot;, 4, &amp;variable_bank);</span></a>
+<a name="411"><span class="lineNum"> 411 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="412"><span class="lineNum"> 412 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
<a name="413"><span class="lineNum"> 413 </span> : : </a>
-<a name="414"><span class="lineNum"> 414 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="415"><span class="lineNum"> 415 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PARAMETER == rc);</span></a>
-<a name="416"><span class="lineNum"> 416 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="417"><span class="lineNum"> 417 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="418"><span class="lineNum"> 418 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;PK&quot;, 3, &amp;variable_bank);</span></a>
-<a name="419"><span class="lineNum"> 419 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
-<a name="420"><span class="lineNum"> 420 </span> :<span class="lineCov"> 1 : ASSERT(0 == tmp-&gt;data_size);</span></a>
-<a name="421"><span class="lineNum"> 421 </span> :<span class="lineCov"> 1 : ASSERT(setup_mode);</span></a>
-<a name="422"><span class="lineNum"> 422 </span> : : </a>
-<a name="423"><span class="lineNum"> 423 </span> : : /* Add invalid dbx like with wrong GUID. */</a>
-<a name="424"><span class="lineNum"> 424 </span> :<span class="lineCov"> 1 : printf(&quot;Add invalid dbx\n&quot;);</span></a>
-<a name="425"><span class="lineNum"> 425 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;dbx&quot;, 4, wrongdbxauth, wrong_dbx_auth_len, 0);</span></a>
-<a name="426"><span class="lineNum"> 426 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="427"><span class="lineNum"> 427 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="428"><span class="lineNum"> 428 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="429"><span class="lineNum"> 429 </span> : : </a>
-<a name="430"><span class="lineNum"> 430 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="431"><span class="lineNum"> 431 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PARAMETER == rc);</span></a>
-<a name="432"><span class="lineNum"> 432 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="433"><span class="lineNum"> 433 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="434"><span class="lineNum"> 434 </span> : : </a>
-<a name="435"><span class="lineNum"> 435 </span> : : /* Ensure sha512 dbx is considered as valid. */</a>
-<a name="436"><span class="lineNum"> 436 </span> :<span class="lineCov"> 1 : printf(&quot;Add sha512 dbx\n&quot;);</span></a>
-<a name="437"><span class="lineNum"> 437 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;dbx&quot;, 4, dbx512, dbx512_auth_len, 0);</span></a>
-<a name="438"><span class="lineNum"> 438 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="439"><span class="lineNum"> 439 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="440"><span class="lineNum"> 440 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="441"><span class="lineNum"> 441 </span> : : </a>
-<a name="442"><span class="lineNum"> 442 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="443"><span class="lineNum"> 443 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
-<a name="444"><span class="lineNum"> 444 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="445"><span class="lineNum"> 445 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="446"><span class="lineNum"> 446 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;dbx&quot;, 4, &amp;variable_bank);</span></a>
-<a name="447"><span class="lineNum"> 447 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
-<a name="448"><span class="lineNum"> 448 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
-<a name="449"><span class="lineNum"> 449 </span> : : </a>
-<a name="450"><span class="lineNum"> 450 </span> : : /* We do not support cert as dbx. */</a>
-<a name="451"><span class="lineNum"> 451 </span> :<span class="lineCov"> 1 : printf(&quot;Add db(cert) as dbx\n&quot;);</span></a>
-<a name="452"><span class="lineNum"> 452 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;dbx&quot;, 4, dbx_cert_auth, sizeof(dbx_cert_auth), 0);</span></a>
-<a name="453"><span class="lineNum"> 453 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
-<a name="454"><span class="lineNum"> 454 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
-<a name="455"><span class="lineNum"> 455 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
-<a name="456"><span class="lineNum"> 456 </span> : : </a>
-<a name="457"><span class="lineNum"> 457 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
-<a name="458"><span class="lineNum"> 458 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PARAMETER == rc);</span></a>
-<a name="459"><span class="lineNum"> 459 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
-<a name="460"><span class="lineNum"> 460 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
-<a name="461"><span class="lineNum"> 461 </span> : : </a>
-<a name="462"><span class="lineNum"> 462 </span> :<span class="lineCov"> 1 : return 0;</span></a>
-<a name="463"><span class="lineNum"> 463 </span> : : }</a>
-<a name="464"><span class="lineNum"> 464 </span> : : </a>
-<a name="465"><span class="lineNum"> 465 </span> :<span class="lineCov"> 1 : int main(void)</span></a>
-<a name="466"><span class="lineNum"> 466 </span> : : {</a>
-<a name="467"><span class="lineNum"> 467 </span> : : int rc;</a>
-<a name="468"><span class="lineNum"> 468 </span> : : </a>
-<a name="469"><span class="lineNum"> 469 </span> :<span class="lineCov"> 1 : list_head_init(&amp;variable_bank);</span></a>
-<a name="470"><span class="lineNum"> 470 </span> :<span class="lineCov"> 1 : list_head_init(&amp;update_bank);</span></a>
-<a name="471"><span class="lineNum"> 471 </span> : : </a>
-<a name="472"><span class="lineNum"> 472 </span> :<span class="lineCov"> 1 : secvar_storage.max_var_size = 4096;</span></a>
-<a name="473"><span class="lineNum"> 473 </span> : : </a>
-<a name="474"><span class="lineNum"> 474 </span> :<span class="lineCov"> 1 : rc = run_test();</span></a>
-<a name="475"><span class="lineNum"> 475 </span> : : </a>
-<a name="476"><span class="lineNum"> 476 </span> :<span class="lineCov"> 1 : clear_bank_list(&amp;variable_bank);</span></a>
-<a name="477"><span class="lineNum"> 477 </span> :<span class="lineCov"> 1 : clear_bank_list(&amp;update_bank);</span></a>
-<a name="478"><span class="lineNum"> 478 </span> : : </a>
-<a name="479"><span class="lineNum"> 479 </span> :<span class="lineCov"> 1 : return rc;</span></a>
-<a name="480"><span class="lineNum"> 480 </span> : : }</a>
+<a name="414"><span class="lineNum"> 414 </span> : : /* Add multiple db and then multiple KEKs.</a>
+<a name="415"><span class="lineNum"> 415 </span> : : * The db should be signed with a KEK yet to be added.</a>
+<a name="416"><span class="lineNum"> 416 </span> : : */</a>
+<a name="417"><span class="lineNum"> 417 </span> :<span class="lineCov"> 1 : printf(&quot;Add multiple db\n&quot;);</span></a>
+<a name="418"><span class="lineNum"> 418 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;db&quot;, 3, multipleDB_auth, multipleDB_auth_len, 0);</span></a>
+<a name="419"><span class="lineNum"> 419 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="420"><span class="lineNum"> 420 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="421"><span class="lineNum"> 421 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="422"><span class="lineNum"> 422 </span> :<span class="lineCov"> 1 : printf(&quot;Add multiple KEK\n&quot;);</span></a>
+<a name="423"><span class="lineNum"> 423 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;KEK&quot;, 4, multipleKEK_auth, multipleKEK_auth_len, 0);</span></a>
+<a name="424"><span class="lineNum"> 424 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="425"><span class="lineNum"> 425 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="426"><span class="lineNum"> 426 </span> :<span class="lineCov"> 1 : ASSERT(2 == list_length(&amp;update_bank));</span></a>
+<a name="427"><span class="lineNum"> 427 </span> : : </a>
+<a name="428"><span class="lineNum"> 428 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="429"><span class="lineNum"> 429 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PERMISSION == rc);</span></a>
+<a name="430"><span class="lineNum"> 430 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="431"><span class="lineNum"> 431 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="432"><span class="lineNum"> 432 </span> : : </a>
+<a name="433"><span class="lineNum"> 433 </span> : : /* Add multiple KEK ESLs with w one missing 5 bytes */</a>
+<a name="434"><span class="lineNum"> 434 </span> :<span class="lineCov"> 1 : printf(&quot;Add multiple KEK with one trimmed\n&quot;);</span></a>
+<a name="435"><span class="lineNum"> 435 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;KEK&quot;, 4, multipletrimmedKEK_auth, multipletrimmedKEK_auth_len, 0);</span></a>
+<a name="436"><span class="lineNum"> 436 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="437"><span class="lineNum"> 437 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="438"><span class="lineNum"> 438 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="439"><span class="lineNum"> 439 </span> : : </a>
+<a name="440"><span class="lineNum"> 440 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="441"><span class="lineNum"> 441 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PARAMETER == rc);</span></a>
+<a name="442"><span class="lineNum"> 442 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="443"><span class="lineNum"> 443 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="444"><span class="lineNum"> 444 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;KEK&quot;, 4, &amp;variable_bank);</span></a>
+<a name="445"><span class="lineNum"> 445 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="446"><span class="lineNum"> 446 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
+<a name="447"><span class="lineNum"> 447 </span> : : </a>
+<a name="448"><span class="lineNum"> 448 </span> : : /* Add multiple KEK ESLs, one of them should sign the db. */</a>
+<a name="449"><span class="lineNum"> 449 </span> :<span class="lineCov"> 1 : printf(&quot;Add multiple KEK\n&quot;);</span></a>
+<a name="450"><span class="lineNum"> 450 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;KEK&quot;, 4, multipleKEK_auth, multipleKEK_auth_len, 0);</span></a>
+<a name="451"><span class="lineNum"> 451 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="452"><span class="lineNum"> 452 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="453"><span class="lineNum"> 453 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="454"><span class="lineNum"> 454 </span> :<span class="lineCov"> 1 : printf(&quot;Add multiple db\n&quot;);</span></a>
+<a name="455"><span class="lineNum"> 455 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;db&quot;, 3, multipleDB_auth, multipleDB_auth_len, 0);</span></a>
+<a name="456"><span class="lineNum"> 456 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="457"><span class="lineNum"> 457 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="458"><span class="lineNum"> 458 </span> :<span class="lineCov"> 1 : ASSERT(2 == list_length(&amp;update_bank));</span></a>
+<a name="459"><span class="lineNum"> 459 </span> : : </a>
+<a name="460"><span class="lineNum"> 460 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="461"><span class="lineNum"> 461 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
+<a name="462"><span class="lineNum"> 462 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="463"><span class="lineNum"> 463 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="464"><span class="lineNum"> 464 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;KEK&quot;, 4, &amp;variable_bank);</span></a>
+<a name="465"><span class="lineNum"> 465 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="466"><span class="lineNum"> 466 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
+<a name="467"><span class="lineNum"> 467 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;db&quot;, 3, &amp;variable_bank);</span></a>
+<a name="468"><span class="lineNum"> 468 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="469"><span class="lineNum"> 469 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
+<a name="470"><span class="lineNum"> 470 </span> : : </a>
+<a name="471"><span class="lineNum"> 471 </span> : : /* Add db with signeddata PKCS7 format. */</a>
+<a name="472"><span class="lineNum"> 472 </span> :<span class="lineCov"> 1 : printf(&quot;DB with signed data\n&quot;);</span></a>
+<a name="473"><span class="lineNum"> 473 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;db&quot;, 3, dbsigneddata_auth, dbsigneddata_auth_len, 0);</span></a>
+<a name="474"><span class="lineNum"> 474 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="475"><span class="lineNum"> 475 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="476"><span class="lineNum"> 476 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="477"><span class="lineNum"> 477 </span> : : </a>
+<a name="478"><span class="lineNum"> 478 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="479"><span class="lineNum"> 479 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
+<a name="480"><span class="lineNum"> 480 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="481"><span class="lineNum"> 481 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="482"><span class="lineNum"> 482 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;db&quot;, 3, &amp;variable_bank);</span></a>
+<a name="483"><span class="lineNum"> 483 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="484"><span class="lineNum"> 484 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
+<a name="485"><span class="lineNum"> 485 </span> : : </a>
+<a name="486"><span class="lineNum"> 486 </span> : : /* Delete PK and invalid dbx - to test queued updates for deleting PK. */</a>
+<a name="487"><span class="lineNum"> 487 </span> :<span class="lineCov"> 1 : printf(&quot;Delete PK\n&quot;);</span></a>
+<a name="488"><span class="lineNum"> 488 </span> : : /* Add hw_key_hash explicitly to ensure it is deleted as part of PK deletion. */</a>
+<a name="489"><span class="lineNum"> 489 </span> :<span class="lineCov"> 1 : add_hw_key_hash(&amp;variable_bank);</span></a>
+<a name="490"><span class="lineNum"> 490 </span> :<span class="lineCov"> 1 : ASSERT(6 == list_length(&amp;variable_bank));</span></a>
+<a name="491"><span class="lineNum"> 491 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;PK&quot;, 3, noPK_auth, noPK_auth_len, 0);</span></a>
+<a name="492"><span class="lineNum"> 492 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="493"><span class="lineNum"> 493 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="494"><span class="lineNum"> 494 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="495"><span class="lineNum"> 495 </span> :<span class="lineCov"> 1 : printf(&quot;Add invalid dbx\n&quot;);</span></a>
+<a name="496"><span class="lineNum"> 496 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;dbx&quot;, 4, wrongdbxauth, wrong_dbx_auth_len, 0);</span></a>
+<a name="497"><span class="lineNum"> 497 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="498"><span class="lineNum"> 498 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="499"><span class="lineNum"> 499 </span> :<span class="lineCov"> 1 : ASSERT(2 == list_length(&amp;update_bank));</span></a>
+<a name="500"><span class="lineNum"> 500 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="501"><span class="lineNum"> 501 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PARAMETER == rc);</span></a>
+<a name="502"><span class="lineNum"> 502 </span> :<span class="lineCov"> 1 : ASSERT(6 == list_length(&amp;variable_bank));</span></a>
+<a name="503"><span class="lineNum"> 503 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="504"><span class="lineNum"> 504 </span> :<span class="lineCov"> 1 : rc = edk2_compat_post_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="505"><span class="lineNum"> 505 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="506"><span class="lineNum"> 506 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;PK&quot;, 3, &amp;variable_bank);</span></a>
+<a name="507"><span class="lineNum"> 507 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="508"><span class="lineNum"> 508 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
+<a name="509"><span class="lineNum"> 509 </span> :<span class="lineCov"> 1 : ASSERT(!setup_mode);</span></a>
+<a name="510"><span class="lineNum"> 510 </span> : : </a>
+<a name="511"><span class="lineNum"> 511 </span> : : /* updates with pkcs#7 messages with sha512 hashes should be rejected */</a>
+<a name="512"><span class="lineNum"> 512 </span> :<span class="lineCov"> 1 : printf(&quot;Add db where auth has sha512 in PKCS#7\n&quot;);</span></a>
+<a name="513"><span class="lineNum"> 513 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;db&quot;, 3, pkcs7_sha512, pkcs7_sha512_len, 0);</span></a>
+<a name="514"><span class="lineNum"> 514 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="515"><span class="lineNum"> 515 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="516"><span class="lineNum"> 516 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="517"><span class="lineNum"> 517 </span> : : </a>
+<a name="518"><span class="lineNum"> 518 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="519"><span class="lineNum"> 519 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PARAMETER == rc);</span></a>
+<a name="520"><span class="lineNum"> 520 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="521"><span class="lineNum"> 521 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="522"><span class="lineNum"> 522 </span> : : </a>
+<a name="523"><span class="lineNum"> 523 </span> : : /* Delete PK. */</a>
+<a name="524"><span class="lineNum"> 524 </span> :<span class="lineCov"> 1 : printf(&quot;Delete PK\n&quot;);</span></a>
+<a name="525"><span class="lineNum"> 525 </span> : : /* Add hw_key_hash explicitly to ensure it is deleted as part of PK deletion. */</a>
+<a name="526"><span class="lineNum"> 526 </span> :<span class="lineCov"> 1 : add_hw_key_hash(&amp;variable_bank);</span></a>
+<a name="527"><span class="lineNum"> 527 </span> :<span class="lineCov"> 1 : ASSERT(6 == list_length(&amp;variable_bank));</span></a>
+<a name="528"><span class="lineNum"> 528 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;PK&quot;, 3, noPK_auth, noPK_auth_len, 0);</span></a>
+<a name="529"><span class="lineNum"> 529 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="530"><span class="lineNum"> 530 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="531"><span class="lineNum"> 531 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="532"><span class="lineNum"> 532 </span> : : </a>
+<a name="533"><span class="lineNum"> 533 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="534"><span class="lineNum"> 534 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
+<a name="535"><span class="lineNum"> 535 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="536"><span class="lineNum"> 536 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="537"><span class="lineNum"> 537 </span> :<span class="lineCov"> 1 : rc = edk2_compat_post_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="538"><span class="lineNum"> 538 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="539"><span class="lineNum"> 539 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;PK&quot;, 3, &amp;variable_bank);</span></a>
+<a name="540"><span class="lineNum"> 540 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="541"><span class="lineNum"> 541 </span> :<span class="lineCov"> 1 : ASSERT(0 == tmp-&gt;data_size);</span></a>
+<a name="542"><span class="lineNum"> 542 </span> :<span class="lineCov"> 1 : ASSERT(setup_mode);</span></a>
+<a name="543"><span class="lineNum"> 543 </span> : : </a>
+<a name="544"><span class="lineNum"> 544 </span> : : /* Add multiple PK. */</a>
+<a name="545"><span class="lineNum"> 545 </span> :<span class="lineCov"> 1 : printf(&quot;Multiple PK\n&quot;);</span></a>
+<a name="546"><span class="lineNum"> 546 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;PK&quot;, 3, multiplePK_auth, multiplePK_auth_len, 0);</span></a>
+<a name="547"><span class="lineNum"> 547 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="548"><span class="lineNum"> 548 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="549"><span class="lineNum"> 549 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="550"><span class="lineNum"> 550 </span> : : </a>
+<a name="551"><span class="lineNum"> 551 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="552"><span class="lineNum"> 552 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PARAMETER == rc);</span></a>
+<a name="553"><span class="lineNum"> 553 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="554"><span class="lineNum"> 554 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="555"><span class="lineNum"> 555 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;PK&quot;, 3, &amp;variable_bank);</span></a>
+<a name="556"><span class="lineNum"> 556 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="557"><span class="lineNum"> 557 </span> :<span class="lineCov"> 1 : ASSERT(0 == tmp-&gt;data_size);</span></a>
+<a name="558"><span class="lineNum"> 558 </span> :<span class="lineCov"> 1 : ASSERT(setup_mode);</span></a>
+<a name="559"><span class="lineNum"> 559 </span> : : </a>
+<a name="560"><span class="lineNum"> 560 </span> : : /* Add invalid dbx like with wrong GUID. */</a>
+<a name="561"><span class="lineNum"> 561 </span> :<span class="lineCov"> 1 : printf(&quot;Add invalid dbx\n&quot;);</span></a>
+<a name="562"><span class="lineNum"> 562 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;dbx&quot;, 4, wrongdbxauth, wrong_dbx_auth_len, 0);</span></a>
+<a name="563"><span class="lineNum"> 563 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="564"><span class="lineNum"> 564 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="565"><span class="lineNum"> 565 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="566"><span class="lineNum"> 566 </span> : : </a>
+<a name="567"><span class="lineNum"> 567 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="568"><span class="lineNum"> 568 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PARAMETER == rc);</span></a>
+<a name="569"><span class="lineNum"> 569 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="570"><span class="lineNum"> 570 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="571"><span class="lineNum"> 571 </span> : : </a>
+<a name="572"><span class="lineNum"> 572 </span> : : /* Ensure sha512 dbx is considered as valid. */</a>
+<a name="573"><span class="lineNum"> 573 </span> :<span class="lineCov"> 1 : printf(&quot;Add sha512 dbx\n&quot;);</span></a>
+<a name="574"><span class="lineNum"> 574 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;dbx&quot;, 4, dbx512, dbx512_auth_len, 0);</span></a>
+<a name="575"><span class="lineNum"> 575 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="576"><span class="lineNum"> 576 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="577"><span class="lineNum"> 577 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="578"><span class="lineNum"> 578 </span> : : </a>
+<a name="579"><span class="lineNum"> 579 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="580"><span class="lineNum"> 580 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_SUCCESS == rc);</span></a>
+<a name="581"><span class="lineNum"> 581 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="582"><span class="lineNum"> 582 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="583"><span class="lineNum"> 583 </span> :<span class="lineCov"> 1 : tmp = find_secvar(&quot;dbx&quot;, 4, &amp;variable_bank);</span></a>
+<a name="584"><span class="lineNum"> 584 </span> :<span class="lineCov"> 1 : ASSERT(NULL != tmp);</span></a>
+<a name="585"><span class="lineNum"> 585 </span> :<span class="lineCov"> 1 : ASSERT(0 != tmp-&gt;data_size);</span></a>
+<a name="586"><span class="lineNum"> 586 </span> : : </a>
+<a name="587"><span class="lineNum"> 587 </span> : : /* We do not support cert as dbx. */</a>
+<a name="588"><span class="lineNum"> 588 </span> :<span class="lineCov"> 1 : printf(&quot;Add db(cert) as dbx\n&quot;);</span></a>
+<a name="589"><span class="lineNum"> 589 </span> :<span class="lineCov"> 1 : tmp = new_secvar(&quot;dbx&quot;, 4, dbx_cert_auth, sizeof(dbx_cert_auth), 0);</span></a>
+<a name="590"><span class="lineNum"> 590 </span> :<span class="lineCov"> 1 : ASSERT(0 == edk2_compat_validate(tmp));</span></a>
+<a name="591"><span class="lineNum"> 591 </span> :<span class="lineCov"> 1 : list_add_tail(&amp;update_bank, &amp;tmp-&gt;link);</span></a>
+<a name="592"><span class="lineNum"> 592 </span> :<span class="lineCov"> 1 : ASSERT(1 == list_length(&amp;update_bank));</span></a>
+<a name="593"><span class="lineNum"> 593 </span> : : </a>
+<a name="594"><span class="lineNum"> 594 </span> :<span class="lineCov"> 1 : rc = edk2_compat_process(&amp;variable_bank, &amp;update_bank);</span></a>
+<a name="595"><span class="lineNum"> 595 </span> :<span class="lineCov"> 1 : ASSERT(OPAL_PARAMETER == rc);</span></a>
+<a name="596"><span class="lineNum"> 596 </span> :<span class="lineCov"> 1 : ASSERT(5 == list_length(&amp;variable_bank));</span></a>
+<a name="597"><span class="lineNum"> 597 </span> :<span class="lineCov"> 1 : ASSERT(0 == list_length(&amp;update_bank));</span></a>
+<a name="598"><span class="lineNum"> 598 </span> : : </a>
+<a name="599"><span class="lineNum"> 599 </span> :<span class="lineCov"> 1 : return 0;</span></a>
+<a name="600"><span class="lineNum"> 600 </span> : : }</a>
+<a name="601"><span class="lineNum"> 601 </span> : : </a>
+<a name="602"><span class="lineNum"> 602 </span> :<span class="lineCov"> 1 : int main(void)</span></a>
+<a name="603"><span class="lineNum"> 603 </span> : : {</a>
+<a name="604"><span class="lineNum"> 604 </span> : : int rc;</a>
+<a name="605"><span class="lineNum"> 605 </span> : : </a>
+<a name="606"><span class="lineNum"> 606 </span> :<span class="lineCov"> 1 : list_head_init(&amp;variable_bank);</span></a>
+<a name="607"><span class="lineNum"> 607 </span> :<span class="lineCov"> 1 : list_head_init(&amp;update_bank);</span></a>
+<a name="608"><span class="lineNum"> 608 </span> : : </a>
+<a name="609"><span class="lineNum"> 609 </span> :<span class="lineCov"> 1 : secvar_storage.max_var_size = 4096;</span></a>
+<a name="610"><span class="lineNum"> 610 </span> : : </a>
+<a name="611"><span class="lineNum"> 611 </span> :<span class="lineCov"> 1 : rc = run_test();</span></a>
+<a name="612"><span class="lineNum"> 612 </span> : : </a>
+<a name="613"><span class="lineNum"> 613 </span> :<span class="lineCov"> 1 : clear_bank_list(&amp;variable_bank);</span></a>
+<a name="614"><span class="lineNum"> 614 </span> :<span class="lineCov"> 1 : clear_bank_list(&amp;update_bank);</span></a>
+<a name="615"><span class="lineNum"> 615 </span> : : </a>
+<a name="616"><span class="lineNum"> 616 </span> :<span class="lineCov"> 1 : return rc;</span></a>
+<a name="617"><span class="lineNum"> 617 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-enqueue.c.func-sort-c.html b/coverage-report/libstb/secvar/test/secvar-test-enqueue.c.func-sort-c.html
index d12e7e4..825426c 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-enqueue.c.func-sort-c.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-enqueue.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-enqueue.c.func.html b/coverage-report/libstb/secvar/test/secvar-test-enqueue.c.func.html
index a147b99..aafe9da 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-enqueue.c.func.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-enqueue.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-enqueue.c.gcov.html b/coverage-report/libstb/secvar/test/secvar-test-enqueue.c.gcov.html
index 44b453d..52ede96 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-enqueue.c.gcov.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-enqueue.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-getvar.c.func-sort-c.html b/coverage-report/libstb/secvar/test/secvar-test-getvar.c.func-sort-c.html
index cf426f0..9c2765b 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-getvar.c.func-sort-c.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-getvar.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-getvar.c.func.html b/coverage-report/libstb/secvar/test/secvar-test-getvar.c.func.html
index 18bc0eb..65b64a1 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-getvar.c.func.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-getvar.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-getvar.c.gcov.html b/coverage-report/libstb/secvar/test/secvar-test-getvar.c.gcov.html
index c636411..eb24eb1 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-getvar.c.gcov.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-getvar.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-nextvar.c.func-sort-c.html b/coverage-report/libstb/secvar/test/secvar-test-nextvar.c.func-sort-c.html
index 86d26b8..da602e3 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-nextvar.c.func-sort-c.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-nextvar.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-nextvar.c.func.html b/coverage-report/libstb/secvar/test/secvar-test-nextvar.c.func.html
index f4ca12f..6790598 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-nextvar.c.func.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-nextvar.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-nextvar.c.gcov.html b/coverage-report/libstb/secvar/test/secvar-test-nextvar.c.gcov.html
index af23614..51017a0 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-nextvar.c.gcov.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-nextvar.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-pkcs7.c.func-sort-c.html b/coverage-report/libstb/secvar/test/secvar-test-pkcs7.c.func-sort-c.html
new file mode 100644
index 0000000..9dee2f5
--- /dev/null
+++ b/coverage-report/libstb/secvar/test/secvar-test-pkcs7.c.func-sort-c.html
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - libstb/secvar/test/secvar-test-pkcs7.c - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">libstb/secvar/test</a> - secvar-test-pkcs7.c<span style="font-size: 80%;"> (<a href="secvar-test-pkcs7.c.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">11</td>
+ <td class="headerCovTableEntry">11</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="secvar-test-pkcs7.c.func.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="secvar-test-pkcs7.c.gcov.html#27">main</a></td>
+ <td class="coverFnHi">1</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="secvar-test-pkcs7.c.gcov.html#8">run_test</a></td>
+ <td class="coverFnHi">1</td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-pkcs7.c.func.html b/coverage-report/libstb/secvar/test/secvar-test-pkcs7.c.func.html
new file mode 100644
index 0000000..feaaedb
--- /dev/null
+++ b/coverage-report/libstb/secvar/test/secvar-test-pkcs7.c.func.html
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - libstb/secvar/test/secvar-test-pkcs7.c - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">libstb/secvar/test</a> - secvar-test-pkcs7.c<span style="font-size: 80%;"> (<a href="secvar-test-pkcs7.c.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">11</td>
+ <td class="headerCovTableEntry">11</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="secvar-test-pkcs7.c.func-sort-c.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="secvar-test-pkcs7.c.gcov.html#27">main</a></td>
+ <td class="coverFnHi">1</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="secvar-test-pkcs7.c.gcov.html#8">run_test</a></td>
+ <td class="coverFnHi">1</td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-pkcs7.c.gcov.html b/coverage-report/libstb/secvar/test/secvar-test-pkcs7.c.gcov.html
new file mode 100644
index 0000000..8882f37
--- /dev/null
+++ b/coverage-report/libstb/secvar/test/secvar-test-pkcs7.c.gcov.html
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - libstb/secvar/test/secvar-test-pkcs7.c</title>
+ <link rel="stylesheet" type="text/css" href="../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">libstb/secvar/test</a> - secvar-test-pkcs7.c<span style="font-size: 80%;"> (source / <a href="secvar-test-pkcs7.c.func-sort-c.html">functions</a>)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">11</td>
+ <td class="headerCovTableEntry">11</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <table cellpadding=0 cellspacing=0 border=0>
+ <tr>
+ <td><br></td>
+ </tr>
+ <tr>
+ <td>
+<pre class="sourceHeading"> Branch data Line data Source code</pre>
+<pre class="source">
+<a name="1"><span class="lineNum"> 1 </span> : : // SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later</a>
+<a name="2"><span class="lineNum"> 2 </span> : : /* Copyright 2021 IBM Corp. */</a>
+<a name="3"><span class="lineNum"> 3 </span> : : </a>
+<a name="4"><span class="lineNum"> 4 </span> : : #define MBEDTLS_PKCS7_C</a>
+<a name="5"><span class="lineNum"> 5 </span> : : #include &quot;secvar_common_test.c&quot;</a>
+<a name="6"><span class="lineNum"> 6 </span> : : #include &quot;../../crypto/pkcs7/pkcs7.c&quot;</a>
+<a name="7"><span class="lineNum"> 7 </span> : : </a>
+<a name="8"><span class="lineNum"> 8 </span> : : const char *secvar_test_name = &quot;pkcs7&quot;;</a>
+<a name="9"><span class="lineNum"> 9 </span> : : </a>
+<a name="10"><span class="lineNum"> 10 </span> :<span class="lineCov"> 1 : int run_test()</span></a>
+<a name="11"><span class="lineNum"> 11 </span> : : {</a>
+<a name="12"><span class="lineNum"> 12 </span> :<span class="lineCov"> 1 : const unsigned char underrun_p7s[] = {0x30, 0x48};</span></a>
+<a name="13"><span class="lineNum"> 13 </span> : : mbedtls_pkcs7 pkcs7;</a>
+<a name="14"><span class="lineNum"> 14 </span> : : unsigned char *data;</a>
+<a name="15"><span class="lineNum"> 15 </span> : : int rc;</a>
+<a name="16"><span class="lineNum"> 16 </span> : : </a>
+<a name="17"><span class="lineNum"> 17 </span> :<span class="lineCov"> 1 : mbedtls_pkcs7_init(&amp;pkcs7);</span></a>
+<a name="18"><span class="lineNum"> 18 </span> : : /* The data must live in the heap, not the stack, for valgrind to</a>
+<a name="19"><span class="lineNum"> 19 </span> : : catch the overread. */</a>
+<a name="20"><span class="lineNum"> 20 </span> :<span class="lineCov"> 1 : data = malloc(sizeof(underrun_p7s));</span></a>
+<a name="21"><span class="lineNum"> 21 </span> :<span class="lineCov"> 1 : memcpy(data, underrun_p7s, sizeof(underrun_p7s));</span></a>
+<a name="22"><span class="lineNum"> 22 </span> :<span class="lineCov"> 1 : rc = mbedtls_pkcs7_parse_der(data, sizeof(underrun_p7s), &amp;pkcs7);</span></a>
+<a name="23"><span class="lineNum"> 23 </span> :<span class="lineCov"> 1 : free(data);</span></a>
+<a name="24"><span class="lineNum"> 24 </span> :<span class="lineCov"> 1 : ASSERT(0 &gt; rc);</span></a>
+<a name="25"><span class="lineNum"> 25 </span> : : </a>
+<a name="26"><span class="lineNum"> 26 </span> :<span class="lineCov"> 1 : return 0;</span></a>
+<a name="27"><span class="lineNum"> 27 </span> : : }</a>
+<a name="28"><span class="lineNum"> 28 </span> : : </a>
+<a name="29"><span class="lineNum"> 29 </span> :<span class="lineCov"> 1 : int main(void)</span></a>
+<a name="30"><span class="lineNum"> 30 </span> : : {</a>
+<a name="31"><span class="lineNum"> 31 </span> :<span class="lineCov"> 1 : return run_test();</span></a>
+<a name="32"><span class="lineNum"> 32 </span> : : }</a>
+</pre>
+ </td>
+ </tr>
+ </table>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-secboot-tpm.c.func-sort-c.html b/coverage-report/libstb/secvar/test/secvar-test-secboot-tpm.c.func-sort-c.html
index ba871dc..525620b 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-secboot-tpm.c.func-sort-c.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-secboot-tpm.c.func-sort-c.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">62</td>
- <td class="headerCovTableEntry">63</td>
- <td class="headerCovTableEntryHi">98.4 %</td>
+ <td class="headerCovTableEntry">55</td>
+ <td class="headerCovTableEntry">56</td>
+ <td class="headerCovTableEntryHi">98.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
@@ -73,7 +73,7 @@
<td class="coverFnHi">1</td>
</tr>
<tr>
- <td class="coverFn"><a href="secvar-test-secboot-tpm.c.gcov.html#121">main</a></td>
+ <td class="coverFn"><a href="secvar-test-secboot-tpm.c.gcov.html#106">main</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-secboot-tpm.c.func.html b/coverage-report/libstb/secvar/test/secvar-test-secboot-tpm.c.func.html
index 88ef379..6ca5cdc 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-secboot-tpm.c.func.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-secboot-tpm.c.func.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">62</td>
- <td class="headerCovTableEntry">63</td>
- <td class="headerCovTableEntryHi">98.4 %</td>
+ <td class="headerCovTableEntry">55</td>
+ <td class="headerCovTableEntry">56</td>
+ <td class="headerCovTableEntryHi">98.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
@@ -81,7 +81,7 @@
<td class="coverFnHi">12</td>
</tr>
<tr>
- <td class="coverFn"><a href="secvar-test-secboot-tpm.c.gcov.html#121">main</a></td>
+ <td class="coverFn"><a href="secvar-test-secboot-tpm.c.gcov.html#106">main</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-secboot-tpm.c.gcov.html b/coverage-report/libstb/secvar/test/secvar-test-secboot-tpm.c.gcov.html
index fdb210d..f8a9f48 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-secboot-tpm.c.gcov.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-secboot-tpm.c.gcov.html
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">62</td>
- <td class="headerCovTableEntry">63</td>
- <td class="headerCovTableEntryHi">98.4 %</td>
+ <td class="headerCovTableEntry">55</td>
+ <td class="headerCovTableEntry">56</td>
+ <td class="headerCovTableEntryHi">98.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
@@ -171,45 +171,30 @@
<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 1 : ASSERT(*((uint64_t*) secboot_image-&gt;bank[1]) != 0llu);</span></a>
<a name="101"><span class="lineNum"> 101 </span> : : </a>
<a name="102"><span class="lineNum"> 102 </span> :<span class="lineCov"> 1 : clear_bank_list(&amp;variable_bank);</span></a>
-<a name="103"><span class="lineNum"> 103 </span> : : </a>
-<a name="104"><span class="lineNum"> 104 </span> : : // Tamper with pnor, hash check should catch this</a>
-<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 1 : secboot_image-&gt;bank[0][0] = ~secboot_image-&gt;bank[0][0];</span></a>
-<a name="106"><span class="lineNum"> 106 </span> : : </a>
-<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 1 : rc = secboot_tpm_load_bank(&amp;variable_bank, SECVAR_VARIABLE_BANK);</span></a>
-<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 1 : ASSERT(rc != OPAL_SUCCESS); // TODO: permission?</span></a>
-<a name="109"><span class="lineNum"> 109 </span> : : </a>
-<a name="110"><span class="lineNum"> 110 </span> : : // Fix it back...</a>
-<a name="111"><span class="lineNum"> 111 </span> :<span class="lineCov"> 1 : secboot_image-&gt;bank[0][0] = ~secboot_image-&gt;bank[0][0];</span></a>
-<a name="112"><span class="lineNum"> 112 </span> : : </a>
-<a name="113"><span class="lineNum"> 113 </span> : : // Should be ok again</a>
-<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 1 : rc = secboot_tpm_load_bank(&amp;variable_bank, SECVAR_VARIABLE_BANK);</span></a>
-<a name="115"><span class="lineNum"> 115 </span> :<span class="lineCov"> 1 : ASSERT(rc == OPAL_SUCCESS);</span></a>
-<a name="116"><span class="lineNum"> 116 </span> : : </a>
-<a name="117"><span class="lineNum"> 117 </span> :<span class="lineCov"> 1 : clear_bank_list(&amp;variable_bank);</span></a>
-<a name="118"><span class="lineNum"> 118 </span> :<span class="lineCov"> 1 : free(secboot_buffer);</span></a>
-<a name="119"><span class="lineNum"> 119 </span> : : </a>
-<a name="120"><span class="lineNum"> 120 </span> :<span class="lineCov"> 1 : return 0;</span></a>
-<a name="121"><span class="lineNum"> 121 </span> : : }</a>
-<a name="122"><span class="lineNum"> 122 </span> : : </a>
-<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 1 : int main(void)</span></a>
-<a name="124"><span class="lineNum"> 124 </span> : : {</a>
-<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 1 : int rc = 0;</span></a>
-<a name="126"><span class="lineNum"> 126 </span> : : </a>
-<a name="127"><span class="lineNum"> 127 </span> :<span class="lineCov"> 1 : list_head_init(&amp;variable_bank);</span></a>
-<a name="128"><span class="lineNum"> 128 </span> : : </a>
-<a name="129"><span class="lineNum"> 129 </span> :<span class="lineCov"> 1 : rc = run_test();</span></a>
-<a name="130"><span class="lineNum"> 130 </span> : : </a>
-<a name="131"><span class="lineNum"> 131 </span> :<span class="lineCov"> 1 : if (rc)</span></a>
-<a name="132"><span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : printf(COLOR_RED &quot;FAILED&quot; COLOR_RESET &quot;\n&quot;);</span></a>
-<a name="133"><span class="lineNum"> 133 </span> : : else</a>
-<a name="134"><span class="lineNum"> 134 </span> :<span class="lineCov"> 1 : printf(COLOR_GREEN &quot;OK&quot; COLOR_RESET &quot;\n&quot;);</span></a>
-<a name="135"><span class="lineNum"> 135 </span> : : </a>
-<a name="136"><span class="lineNum"> 136 </span> :<span class="lineCov"> 1 : free(tpmnv_vars_image);</span></a>
-<a name="137"><span class="lineNum"> 137 </span> :<span class="lineCov"> 1 : free(tpmnv_control_image);</span></a>
-<a name="138"><span class="lineNum"> 138 </span> :<span class="lineCov"> 1 : free(secboot_image);</span></a>
-<a name="139"><span class="lineNum"> 139 </span> : : </a>
-<a name="140"><span class="lineNum"> 140 </span> :<span class="lineCov"> 1 : return rc;</span></a>
-<a name="141"><span class="lineNum"> 141 </span> : : }</a>
+<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 1 : free(secboot_buffer);</span></a>
+<a name="104"><span class="lineNum"> 104 </span> : : </a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 1 : return 0;</span></a>
+<a name="106"><span class="lineNum"> 106 </span> : : }</a>
+<a name="107"><span class="lineNum"> 107 </span> : : </a>
+<a name="108"><span class="lineNum"> 108 </span> :<span class="lineCov"> 1 : int main(void)</span></a>
+<a name="109"><span class="lineNum"> 109 </span> : : {</a>
+<a name="110"><span class="lineNum"> 110 </span> :<span class="lineCov"> 1 : int rc = 0;</span></a>
+<a name="111"><span class="lineNum"> 111 </span> : : </a>
+<a name="112"><span class="lineNum"> 112 </span> :<span class="lineCov"> 1 : list_head_init(&amp;variable_bank);</span></a>
+<a name="113"><span class="lineNum"> 113 </span> : : </a>
+<a name="114"><span class="lineNum"> 114 </span> :<span class="lineCov"> 1 : rc = run_test();</span></a>
+<a name="115"><span class="lineNum"> 115 </span> : : </a>
+<a name="116"><span class="lineNum"> 116 </span> :<span class="lineCov"> 1 : if (rc)</span></a>
+<a name="117"><span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : printf(COLOR_RED &quot;FAILED&quot; COLOR_RESET &quot;\n&quot;);</span></a>
+<a name="118"><span class="lineNum"> 118 </span> : : else</a>
+<a name="119"><span class="lineNum"> 119 </span> :<span class="lineCov"> 1 : printf(COLOR_GREEN &quot;OK&quot; COLOR_RESET &quot;\n&quot;);</span></a>
+<a name="120"><span class="lineNum"> 120 </span> : : </a>
+<a name="121"><span class="lineNum"> 121 </span> :<span class="lineCov"> 1 : free(tpmnv_vars_image);</span></a>
+<a name="122"><span class="lineNum"> 122 </span> :<span class="lineCov"> 1 : free(tpmnv_control_image);</span></a>
+<a name="123"><span class="lineNum"> 123 </span> :<span class="lineCov"> 1 : free(secboot_image);</span></a>
+<a name="124"><span class="lineNum"> 124 </span> : : </a>
+<a name="125"><span class="lineNum"> 125 </span> :<span class="lineCov"> 1 : return rc;</span></a>
+<a name="126"><span class="lineNum"> 126 </span> : : }</a>
</pre>
</td>
</tr>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-void.c.func-sort-c.html b/coverage-report/libstb/secvar/test/secvar-test-void.c.func-sort-c.html
index b588d6b..fb6304e 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-void.c.func-sort-c.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-void.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-void.c.func.html b/coverage-report/libstb/secvar/test/secvar-test-void.c.func.html
index a4b66b8..979abf2 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-void.c.func.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-void.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/secvar/test/secvar-test-void.c.gcov.html b/coverage-report/libstb/secvar/test/secvar-test-void.c.gcov.html
index 9bb892b..ad55f4c 100644
--- a/coverage-report/libstb/secvar/test/secvar-test-void.c.gcov.html
+++ b/coverage-report/libstb/secvar/test/secvar-test-void.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/secvar/test/secvar_api_test.c.func-sort-c.html b/coverage-report/libstb/secvar/test/secvar_api_test.c.func-sort-c.html
index a1c0b32..9950598 100644
--- a/coverage-report/libstb/secvar/test/secvar_api_test.c.func-sort-c.html
+++ b/coverage-report/libstb/secvar/test/secvar_api_test.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/libstb/secvar/test/secvar_api_test.c.func.html b/coverage-report/libstb/secvar/test/secvar_api_test.c.func.html
index 18c779b..604f44d 100644
--- a/coverage-report/libstb/secvar/test/secvar_api_test.c.func.html
+++ b/coverage-report/libstb/secvar/test/secvar_api_test.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/libstb/secvar/test/secvar_api_test.c.gcov.html b/coverage-report/libstb/secvar/test/secvar_api_test.c.gcov.html
index 43f93f5..b1b2464 100644
--- a/coverage-report/libstb/secvar/test/secvar_api_test.c.gcov.html
+++ b/coverage-report/libstb/secvar/test/secvar_api_test.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
diff --git a/coverage-report/libstb/test/index-sort-b.html b/coverage-report/libstb/test/index-sort-b.html
index 4225e53..a8e7c6e 100644
--- a/coverage-report/libstb/test/index-sort-b.html
+++ b/coverage-report/libstb/test/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/test/index-sort-f.html b/coverage-report/libstb/test/index-sort-f.html
index e71c466..cdd857e 100644
--- a/coverage-report/libstb/test/index-sort-f.html
+++ b/coverage-report/libstb/test/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/test/index-sort-l.html b/coverage-report/libstb/test/index-sort-l.html
index b4ab503..3307264 100644
--- a/coverage-report/libstb/test/index-sort-l.html
+++ b/coverage-report/libstb/test/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/test/index.html b/coverage-report/libstb/test/index.html
index 17a7197..3b26ca6 100644
--- a/coverage-report/libstb/test/index.html
+++ b/coverage-report/libstb/test/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/test/run-stb-container.c.func-sort-c.html b/coverage-report/libstb/test/run-stb-container.c.func-sort-c.html
index 39a676e..1b4a7e6 100644
--- a/coverage-report/libstb/test/run-stb-container.c.func-sort-c.html
+++ b/coverage-report/libstb/test/run-stb-container.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/test/run-stb-container.c.func.html b/coverage-report/libstb/test/run-stb-container.c.func.html
index 3112457..c58ffc0 100644
--- a/coverage-report/libstb/test/run-stb-container.c.func.html
+++ b/coverage-report/libstb/test/run-stb-container.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/libstb/test/run-stb-container.c.gcov.html b/coverage-report/libstb/test/run-stb-container.c.gcov.html
index 92f2d88..c2f061c 100644
--- a/coverage-report/libstb/test/run-stb-container.c.gcov.html
+++ b/coverage-report/libstb/test/run-stb-container.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
diff --git a/coverage-report/test/dt_common.c.func-sort-c.html b/coverage-report/test/dt_common.c.func-sort-c.html
index a3d07d4..36689b1 100644
--- a/coverage-report/test/dt_common.c.func-sort-c.html
+++ b/coverage-report/test/dt_common.c.func-sort-c.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/test/dt_common.c.func.html b/coverage-report/test/dt_common.c.func.html
index cc9209f..d14de03 100644
--- a/coverage-report/test/dt_common.c.func.html
+++ b/coverage-report/test/dt_common.c.func.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/test/dt_common.c.gcov.html b/coverage-report/test/dt_common.c.gcov.html
index 0f2a40a..636607c 100644
--- a/coverage-report/test/dt_common.c.gcov.html
+++ b/coverage-report/test/dt_common.c.gcov.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/test/index-sort-b.html b/coverage-report/test/index-sort-b.html
index bf81a81..1d6d99b 100644
--- a/coverage-report/test/index-sort-b.html
+++ b/coverage-report/test/index-sort-b.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/test/index-sort-f.html b/coverage-report/test/index-sort-f.html
index 3eebaca..36590bd 100644
--- a/coverage-report/test/index-sort-f.html
+++ b/coverage-report/test/index-sort-f.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/test/index-sort-l.html b/coverage-report/test/index-sort-l.html
index fe14aea..0a336f4 100644
--- a/coverage-report/test/index-sort-l.html
+++ b/coverage-report/test/index-sort-l.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/test/index.html b/coverage-report/test/index.html
index 6ffb5f8..63406a5 100644
--- a/coverage-report/test/index.html
+++ b/coverage-report/test/index.html
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
diff --git a/coverage-report/usr/include/bits/index-sort-b.html b/coverage-report/usr/include/bits/index-sort-b.html
deleted file mode 100644
index 105794d..0000000
--- a/coverage-report/usr/include/bits/index-sort-b.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-
-<html lang="en">
-
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>LCOV - skiboot.info - /usr/include/bits</title>
- <link rel="stylesheet" type="text/css" href="../../../gcov.css">
-</head>
-
-<body>
-
- <table width="100%" border=0 cellspacing=0 cellpadding=0>
- <tr><td class="title">LCOV - code coverage report</td></tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
-
- <tr>
- <td width="100%">
- <table cellpadding=1 border=0 width="100%">
- <tr>
- <td width="10%" class="headerItem">Current view:</td>
- <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - /usr/include/bits</td>
- <td width="5%"></td>
- <td width="15%"></td>
- <td width="10%" class="headerCovTableHead">Hit</td>
- <td width="10%" class="headerCovTableHead">Total</td>
- <td width="15%" class="headerCovTableHead">Coverage</td>
- </tr>
- <tr>
- <td class="headerItem">Test:</td>
- <td class="headerValue">skiboot.info</td>
- <td></td>
- <td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
- </tr>
- <tr>
- <td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
- <td></td>
- <td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">1</td>
- <td class="headerCovTableEntry">1</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
- </tr>
- <tr>
- <td></td>
- <td></td>
- <td></td>
- <td class="headerItem">Branches:</td>
- <td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntryHi">-</td>
- </tr>
- <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
- </table>
- </td>
- </tr>
-
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
- </table>
-
- <center>
- <table width="80%" cellpadding=1 cellspacing=1 border=0>
-
- <tr>
- <td width="44%"><br></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- </tr>
-
- <tr>
- <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
- <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
- <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
- <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
- </tr>
- <tr>
- <td class="coverFile"><a href="stdio.h.gcov.html">stdio.h</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
- </td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
- <td class="coverFile"><a href="byteswap.h.gcov.html">byteswap.h</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
- </td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">4 / 4</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- </table>
- </center>
- <br>
-
- <table width="100%" border=0 cellspacing=0 cellpadding=0>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
- <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
- </table>
- <br>
-
-</body>
-</html>
diff --git a/coverage-report/usr/include/bits/index-sort-f.html b/coverage-report/usr/include/bits/index-sort-f.html
deleted file mode 100644
index c0ebf2c..0000000
--- a/coverage-report/usr/include/bits/index-sort-f.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-
-<html lang="en">
-
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>LCOV - skiboot.info - /usr/include/bits</title>
- <link rel="stylesheet" type="text/css" href="../../../gcov.css">
-</head>
-
-<body>
-
- <table width="100%" border=0 cellspacing=0 cellpadding=0>
- <tr><td class="title">LCOV - code coverage report</td></tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
-
- <tr>
- <td width="100%">
- <table cellpadding=1 border=0 width="100%">
- <tr>
- <td width="10%" class="headerItem">Current view:</td>
- <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - /usr/include/bits</td>
- <td width="5%"></td>
- <td width="15%"></td>
- <td width="10%" class="headerCovTableHead">Hit</td>
- <td width="10%" class="headerCovTableHead">Total</td>
- <td width="15%" class="headerCovTableHead">Coverage</td>
- </tr>
- <tr>
- <td class="headerItem">Test:</td>
- <td class="headerValue">skiboot.info</td>
- <td></td>
- <td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
- </tr>
- <tr>
- <td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
- <td></td>
- <td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">1</td>
- <td class="headerCovTableEntry">1</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
- </tr>
- <tr>
- <td></td>
- <td></td>
- <td></td>
- <td class="headerItem">Branches:</td>
- <td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntryHi">-</td>
- </tr>
- <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
- </table>
- </td>
- </tr>
-
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
- </table>
-
- <center>
- <table width="80%" cellpadding=1 cellspacing=1 border=0>
-
- <tr>
- <td width="44%"><br></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- </tr>
-
- <tr>
- <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
- <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
- <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td>
- <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
- </tr>
- <tr>
- <td class="coverFile"><a href="stdio.h.gcov.html">stdio.h</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
- </td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
- <td class="coverFile"><a href="byteswap.h.gcov.html">byteswap.h</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
- </td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">4 / 4</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- </table>
- </center>
- <br>
-
- <table width="100%" border=0 cellspacing=0 cellpadding=0>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
- <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
- </table>
- <br>
-
-</body>
-</html>
diff --git a/coverage-report/usr/include/bits/index-sort-l.html b/coverage-report/usr/include/bits/index-sort-l.html
deleted file mode 100644
index a6ede2d..0000000
--- a/coverage-report/usr/include/bits/index-sort-l.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-
-<html lang="en">
-
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>LCOV - skiboot.info - /usr/include/bits</title>
- <link rel="stylesheet" type="text/css" href="../../../gcov.css">
-</head>
-
-<body>
-
- <table width="100%" border=0 cellspacing=0 cellpadding=0>
- <tr><td class="title">LCOV - code coverage report</td></tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
-
- <tr>
- <td width="100%">
- <table cellpadding=1 border=0 width="100%">
- <tr>
- <td width="10%" class="headerItem">Current view:</td>
- <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - /usr/include/bits</td>
- <td width="5%"></td>
- <td width="15%"></td>
- <td width="10%" class="headerCovTableHead">Hit</td>
- <td width="10%" class="headerCovTableHead">Total</td>
- <td width="15%" class="headerCovTableHead">Coverage</td>
- </tr>
- <tr>
- <td class="headerItem">Test:</td>
- <td class="headerValue">skiboot.info</td>
- <td></td>
- <td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
- </tr>
- <tr>
- <td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
- <td></td>
- <td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">1</td>
- <td class="headerCovTableEntry">1</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
- </tr>
- <tr>
- <td></td>
- <td></td>
- <td></td>
- <td class="headerItem">Branches:</td>
- <td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntryHi">-</td>
- </tr>
- <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
- </table>
- </td>
- </tr>
-
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
- </table>
-
- <center>
- <table width="80%" cellpadding=1 cellspacing=1 border=0>
-
- <tr>
- <td width="44%"><br></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- </tr>
-
- <tr>
- <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
- <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></span></td>
- <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
- <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
- </tr>
- <tr>
- <td class="coverFile"><a href="stdio.h.gcov.html">stdio.h</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
- </td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
- <td class="coverFile"><a href="byteswap.h.gcov.html">byteswap.h</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
- </td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">4 / 4</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- </table>
- </center>
- <br>
-
- <table width="100%" border=0 cellspacing=0 cellpadding=0>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
- <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
- </table>
- <br>
-
-</body>
-</html>
diff --git a/coverage-report/usr/include/bits/index.html b/coverage-report/usr/include/bits/index.html
deleted file mode 100644
index f88da20..0000000
--- a/coverage-report/usr/include/bits/index.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-
-<html lang="en">
-
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>LCOV - skiboot.info - /usr/include/bits</title>
- <link rel="stylesheet" type="text/css" href="../../../gcov.css">
-</head>
-
-<body>
-
- <table width="100%" border=0 cellspacing=0 cellpadding=0>
- <tr><td class="title">LCOV - code coverage report</td></tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
-
- <tr>
- <td width="100%">
- <table cellpadding=1 border=0 width="100%">
- <tr>
- <td width="10%" class="headerItem">Current view:</td>
- <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - /usr/include/bits</td>
- <td width="5%"></td>
- <td width="15%"></td>
- <td width="10%" class="headerCovTableHead">Hit</td>
- <td width="10%" class="headerCovTableHead">Total</td>
- <td width="15%" class="headerCovTableHead">Coverage</td>
- </tr>
- <tr>
- <td class="headerItem">Test:</td>
- <td class="headerValue">skiboot.info</td>
- <td></td>
- <td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
- </tr>
- <tr>
- <td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
- <td></td>
- <td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">1</td>
- <td class="headerCovTableEntry">1</td>
- <td class="headerCovTableEntryHi">100.0 %</td>
- </tr>
- <tr>
- <td></td>
- <td></td>
- <td></td>
- <td class="headerItem">Branches:</td>
- <td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntry">0</td>
- <td class="headerCovTableEntryHi">-</td>
- </tr>
- <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
- </table>
- </td>
- </tr>
-
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
- </table>
-
- <center>
- <table width="80%" cellpadding=1 cellspacing=1 border=0>
-
- <tr>
- <td width="44%"><br></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- <td width="8%"></td>
- </tr>
-
- <tr>
- <td class="tableHead">Filename <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></span></td>
- <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
- <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
- <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
- </tr>
- <tr>
- <td class="coverFile"><a href="byteswap.h.gcov.html">byteswap.h</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
- </td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">4 / 4</td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">1 / 1</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- <tr>
- <td class="coverFile"><a href="stdio.h.gcov.html">stdio.h</a></td>
- <td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
- </td>
- <td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">2 / 2</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- <td class="coverPerHi">-</td>
- <td class="coverNumHi">0 / 0</td>
- </tr>
- </table>
- </center>
- <br>
-
- <table width="100%" border=0 cellspacing=0 cellpadding=0>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
- <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
- </table>
- <br>
-
-</body>
-</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/byteswap.h.func-sort-c.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/byteswap.h.func-sort-c.html
new file mode 100644
index 0000000..5e1613c
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/byteswap.h.func-sort-c.html
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/byteswap.h - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - byteswap.h<span style="font-size: 80%;"> (<a href="byteswap.h.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">3</td>
+ <td class="headerCovTableEntry">3</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="byteswap.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="byteswap.h.gcov.html#32">__bswap_16</a></td>
+ <td class="coverFnHi">2</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="byteswap.h.gcov.html#47">__bswap_32</a></td>
+ <td class="coverFnHi">2</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="byteswap.h.gcov.html#68">__bswap_64</a></td>
+ <td class="coverFnHi">7603</td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/byteswap.h.func.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/byteswap.h.func.html
new file mode 100644
index 0000000..34124e2
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/byteswap.h.func.html
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/byteswap.h - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - byteswap.h<span style="font-size: 80%;"> (<a href="byteswap.h.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">3</td>
+ <td class="headerCovTableEntry">3</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="byteswap.h.func-sort-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="byteswap.h.gcov.html#32">__bswap_16</a></td>
+ <td class="coverFnHi">2</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="byteswap.h.gcov.html#47">__bswap_32</a></td>
+ <td class="coverFnHi">2</td>
+ </tr>
+ <tr>
+ <td class="coverFn"><a href="byteswap.h.gcov.html#68">__bswap_64</a></td>
+ <td class="coverFnHi">7603</td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/bits/byteswap.h.gcov.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/byteswap.h.gcov.html
index 7eba299..f77e902 100644
--- a/coverage-report/usr/include/bits/byteswap.h.gcov.html
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/byteswap.h.gcov.html
@@ -4,22 +4,22 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>LCOV - skiboot.info - /usr/include/bits/byteswap.h</title>
- <link rel="stylesheet" type="text/css" href="../../../gcov.css">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/byteswap.h</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
- <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">usr/include/bits</a> - byteswap.h<span style="font-size: 80%;"> (source / <a href="byteswap.h.func-sort-c.html">functions</a>)</span></td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - byteswap.h<span style="font-size: 80%;"> (source / <a href="byteswap.h.func-sort-c.html">functions</a>)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
@@ -31,17 +31,17 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">4</td>
- <td class="headerCovTableEntry">4</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">6</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
- <td class="headerCovTableEntry">1</td>
- <td class="headerCovTableEntry">1</td>
+ <td class="headerCovTableEntry">3</td>
+ <td class="headerCovTableEntry">3</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
@@ -53,12 +53,12 @@
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
- <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
@@ -102,10 +102,10 @@
<a name="31"><span class="lineNum"> 31 </span> : : ((__uint16_t) ((((x) &gt;&gt; 8) &amp; 0xff) | (((x) &amp; 0xff) &lt;&lt; 8)))</a>
<a name="32"><span class="lineNum"> 32 </span> : : </a>
<a name="33"><span class="lineNum"> 33 </span> : : static __inline __uint16_t</a>
-<a name="34"><span class="lineNum"> 34 </span> : : __bswap_16 (__uint16_t __bsx)</a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 2 : __bswap_16 (__uint16_t __bsx)</span></a>
<a name="35"><span class="lineNum"> 35 </span> : : {</a>
<a name="36"><span class="lineNum"> 36 </span> : : #if __GNUC_PREREQ (4, 8)</a>
-<a name="37"><span class="lineNum"> 37 </span> : : return __builtin_bswap16 (__bsx);</a>
+<a name="37"><span class="lineNum"> 37 </span> :<span class="lineCov"> 2 : return __builtin_bswap16 (__bsx);</span></a>
<a name="38"><span class="lineNum"> 38 </span> : : #else</a>
<a name="39"><span class="lineNum"> 39 </span> : : return __bswap_constant_16 (__bsx);</a>
<a name="40"><span class="lineNum"> 40 </span> : : #endif</a>
@@ -117,10 +117,10 @@
<a name="46"><span class="lineNum"> 46 </span> : : | (((x) &amp; 0x0000ff00u) &lt;&lt; 8) | (((x) &amp; 0x000000ffu) &lt;&lt; 24))</a>
<a name="47"><span class="lineNum"> 47 </span> : : </a>
<a name="48"><span class="lineNum"> 48 </span> : : static __inline __uint32_t</a>
-<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 54 : __bswap_32 (__uint32_t __bsx)</span></a>
+<a name="49"><span class="lineNum"> 49 </span> :<span class="lineCov"> 56 : __bswap_32 (__uint32_t __bsx)</span></a>
<a name="50"><span class="lineNum"> 50 </span> : : {</a>
<a name="51"><span class="lineNum"> 51 </span> : : #if __GNUC_PREREQ (4, 3)</a>
-<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 50 : return __builtin_bswap32 (__bsx);</span></a>
+<a name="52"><span class="lineNum"> 52 </span> :<span class="lineCov"> 52 : return __builtin_bswap32 (__bsx);</span></a>
<a name="53"><span class="lineNum"> 53 </span> : : #else</a>
<a name="54"><span class="lineNum"> 54 </span> : : return __bswap_constant_32 (__bsx);</a>
<a name="55"><span class="lineNum"> 55 </span> : : #endif</a>
@@ -138,10 +138,10 @@
<a name="67"><span class="lineNum"> 67 </span> : : | (((x) &amp; 0x00000000000000ffull) &lt;&lt; 56))</a>
<a name="68"><span class="lineNum"> 68 </span> : : </a>
<a name="69"><span class="lineNum"> 69 </span> : : __extension__ static __inline __uint64_t</a>
-<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 7601 : __bswap_64 (__uint64_t __bsx)</span></a>
+<a name="70"><span class="lineNum"> 70 </span> :<span class="lineCov"> 7603 : __bswap_64 (__uint64_t __bsx)</span></a>
<a name="71"><span class="lineNum"> 71 </span> : : {</a>
<a name="72"><span class="lineNum"> 72 </span> : : #if __GNUC_PREREQ (4, 3)</a>
-<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 7601 : return __builtin_bswap64 (__bsx);</span></a>
+<a name="73"><span class="lineNum"> 73 </span> :<span class="lineCov"> 7603 : return __builtin_bswap64 (__bsx);</span></a>
<a name="74"><span class="lineNum"> 74 </span> : : #else</a>
<a name="75"><span class="lineNum"> 75 </span> : : return __bswap_constant_64 (__bsx);</a>
<a name="76"><span class="lineNum"> 76 </span> : : #endif</a>
@@ -155,7 +155,7 @@
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
</table>
<br>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/fcntl2.h.func-sort-c.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/fcntl2.h.func-sort-c.html
new file mode 100644
index 0000000..3125d42
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/fcntl2.h.func-sort-c.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/fcntl2.h - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - fcntl2.h<span style="font-size: 80%;"> (<a href="fcntl2.h.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">5</td>
+ <td class="headerCovTableEntry">5</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fcntl2.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/fcntl2.h.func.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/fcntl2.h.func.html
new file mode 100644
index 0000000..94d4262
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/fcntl2.h.func.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/fcntl2.h - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - fcntl2.h<span style="font-size: 80%;"> (<a href="fcntl2.h.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">5</td>
+ <td class="headerCovTableEntry">5</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fcntl2.h.func-sort-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/fcntl2.h.gcov.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/fcntl2.h.gcov.html
new file mode 100644
index 0000000..28d5e40
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/fcntl2.h.gcov.html
@@ -0,0 +1,257 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/fcntl2.h</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - fcntl2.h<span style="font-size: 80%;"> (source / <a href="fcntl2.h.func-sort-c.html">functions</a>)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">5</td>
+ <td class="headerCovTableEntry">5</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <table cellpadding=0 cellspacing=0 border=0>
+ <tr>
+ <td><br></td>
+ </tr>
+ <tr>
+ <td>
+<pre class="sourceHeading"> Branch data Line data Source code</pre>
+<pre class="source">
+<a name="1"><span class="lineNum"> 1 </span> : : /* Checking macros for fcntl functions.</a>
+<a name="2"><span class="lineNum"> 2 </span> : : Copyright (C) 2007-2020 Free Software Foundation, Inc.</a>
+<a name="3"><span class="lineNum"> 3 </span> : : This file is part of the GNU C Library.</a>
+<a name="4"><span class="lineNum"> 4 </span> : : </a>
+<a name="5"><span class="lineNum"> 5 </span> : : The GNU C Library is free software; you can redistribute it and/or</a>
+<a name="6"><span class="lineNum"> 6 </span> : : modify it under the terms of the GNU Lesser General Public</a>
+<a name="7"><span class="lineNum"> 7 </span> : : License as published by the Free Software Foundation; either</a>
+<a name="8"><span class="lineNum"> 8 </span> : : version 2.1 of the License, or (at your option) any later version.</a>
+<a name="9"><span class="lineNum"> 9 </span> : : </a>
+<a name="10"><span class="lineNum"> 10 </span> : : The GNU C Library is distributed in the hope that it will be useful,</a>
+<a name="11"><span class="lineNum"> 11 </span> : : but WITHOUT ANY WARRANTY; without even the implied warranty of</a>
+<a name="12"><span class="lineNum"> 12 </span> : : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</a>
+<a name="13"><span class="lineNum"> 13 </span> : : Lesser General Public License for more details.</a>
+<a name="14"><span class="lineNum"> 14 </span> : : </a>
+<a name="15"><span class="lineNum"> 15 </span> : : You should have received a copy of the GNU Lesser General Public</a>
+<a name="16"><span class="lineNum"> 16 </span> : : License along with the GNU C Library; if not, see</a>
+<a name="17"><span class="lineNum"> 17 </span> : : &lt;https://www.gnu.org/licenses/&gt;. */</a>
+<a name="18"><span class="lineNum"> 18 </span> : : </a>
+<a name="19"><span class="lineNum"> 19 </span> : : #ifndef _FCNTL_H</a>
+<a name="20"><span class="lineNum"> 20 </span> : : # error &quot;Never include &lt;bits/fcntl2.h&gt; directly; use &lt;fcntl.h&gt; instead.&quot;</a>
+<a name="21"><span class="lineNum"> 21 </span> : : #endif</a>
+<a name="22"><span class="lineNum"> 22 </span> : : </a>
+<a name="23"><span class="lineNum"> 23 </span> : : /* Check that calls to open and openat with O_CREAT or O_TMPFILE set have an</a>
+<a name="24"><span class="lineNum"> 24 </span> : : appropriate third/fourth parameter. */</a>
+<a name="25"><span class="lineNum"> 25 </span> : : #ifndef __USE_FILE_OFFSET64</a>
+<a name="26"><span class="lineNum"> 26 </span> : : extern int __open_2 (const char *__path, int __oflag) __nonnull ((1));</a>
+<a name="27"><span class="lineNum"> 27 </span> : : extern int __REDIRECT (__open_alias, (const char *__path, int __oflag, ...),</a>
+<a name="28"><span class="lineNum"> 28 </span> : : open) __nonnull ((1));</a>
+<a name="29"><span class="lineNum"> 29 </span> : : #else</a>
+<a name="30"><span class="lineNum"> 30 </span> : : extern int __REDIRECT (__open_2, (const char *__path, int __oflag),</a>
+<a name="31"><span class="lineNum"> 31 </span> : : __open64_2) __nonnull ((1));</a>
+<a name="32"><span class="lineNum"> 32 </span> : : extern int __REDIRECT (__open_alias, (const char *__path, int __oflag, ...),</a>
+<a name="33"><span class="lineNum"> 33 </span> : : open64) __nonnull ((1));</a>
+<a name="34"><span class="lineNum"> 34 </span> : : #endif</a>
+<a name="35"><span class="lineNum"> 35 </span> : : __errordecl (__open_too_many_args,</a>
+<a name="36"><span class="lineNum"> 36 </span> : : &quot;open can be called either with 2 or 3 arguments, not more&quot;);</a>
+<a name="37"><span class="lineNum"> 37 </span> : : __errordecl (__open_missing_mode,</a>
+<a name="38"><span class="lineNum"> 38 </span> : : &quot;open with O_CREAT or O_TMPFILE in second argument needs 3 arguments&quot;);</a>
+<a name="39"><span class="lineNum"> 39 </span> : : </a>
+<a name="40"><span class="lineNum"> 40 </span> : : __fortify_function int</a>
+<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 106 : open (const char *__path, int __oflag, ...)</span></a>
+<a name="42"><span class="lineNum"> 42 </span> : : {</a>
+<a name="43"><span class="lineNum"> 43 </span> :<span class="lineCov"> 106 : if (__va_arg_pack_len () &gt; 1)</span></a>
+<a name="44"><span class="lineNum"> 44 </span> : : __open_too_many_args ();</a>
+<a name="45"><span class="lineNum"> 45 </span> : : </a>
+<a name="46"><span class="lineNum"> 46 </span> :<span class="lineCov"> 106 : if (__builtin_constant_p (__oflag))</span></a>
+<a name="47"><span class="lineNum"> 47 </span> : : {</a>
+<a name="48"><span class="lineNum"> 48 </span> :<span class="lineCov"> 106 : if (__OPEN_NEEDS_MODE (__oflag) &amp;&amp; __va_arg_pack_len () &lt; 1)</span></a>
+<a name="49"><span class="lineNum"> 49 </span> : : {</a>
+<a name="50"><span class="lineNum"> 50 </span> : : __open_missing_mode ();</a>
+<a name="51"><span class="lineNum"> 51 </span> : : return __open_2 (__path, __oflag);</a>
+<a name="52"><span class="lineNum"> 52 </span> : : }</a>
+<a name="53"><span class="lineNum"> 53 </span> :<span class="lineCov"> 106 : return __open_alias (__path, __oflag, __va_arg_pack ());</span></a>
+<a name="54"><span class="lineNum"> 54 </span> : : }</a>
+<a name="55"><span class="lineNum"> 55 </span> : : </a>
+<a name="56"><span class="lineNum"> 56 </span> : : if (__va_arg_pack_len () &lt; 1)</a>
+<a name="57"><span class="lineNum"> 57 </span> : : return __open_2 (__path, __oflag);</a>
+<a name="58"><span class="lineNum"> 58 </span> : : </a>
+<a name="59"><span class="lineNum"> 59 </span> : : return __open_alias (__path, __oflag, __va_arg_pack ());</a>
+<a name="60"><span class="lineNum"> 60 </span> : : }</a>
+<a name="61"><span class="lineNum"> 61 </span> : : </a>
+<a name="62"><span class="lineNum"> 62 </span> : : </a>
+<a name="63"><span class="lineNum"> 63 </span> : : #ifdef __USE_LARGEFILE64</a>
+<a name="64"><span class="lineNum"> 64 </span> : : extern int __open64_2 (const char *__path, int __oflag) __nonnull ((1));</a>
+<a name="65"><span class="lineNum"> 65 </span> : : extern int __REDIRECT (__open64_alias, (const char *__path, int __oflag,</a>
+<a name="66"><span class="lineNum"> 66 </span> : : ...), open64) __nonnull ((1));</a>
+<a name="67"><span class="lineNum"> 67 </span> : : __errordecl (__open64_too_many_args,</a>
+<a name="68"><span class="lineNum"> 68 </span> : : &quot;open64 can be called either with 2 or 3 arguments, not more&quot;);</a>
+<a name="69"><span class="lineNum"> 69 </span> : : __errordecl (__open64_missing_mode,</a>
+<a name="70"><span class="lineNum"> 70 </span> : : &quot;open64 with O_CREAT or O_TMPFILE in second argument needs 3 arguments&quot;);</a>
+<a name="71"><span class="lineNum"> 71 </span> : : </a>
+<a name="72"><span class="lineNum"> 72 </span> : : __fortify_function int</a>
+<a name="73"><span class="lineNum"> 73 </span> : : open64 (const char *__path, int __oflag, ...)</a>
+<a name="74"><span class="lineNum"> 74 </span> : : {</a>
+<a name="75"><span class="lineNum"> 75 </span> : : if (__va_arg_pack_len () &gt; 1)</a>
+<a name="76"><span class="lineNum"> 76 </span> : : __open64_too_many_args ();</a>
+<a name="77"><span class="lineNum"> 77 </span> : : </a>
+<a name="78"><span class="lineNum"> 78 </span> : : if (__builtin_constant_p (__oflag))</a>
+<a name="79"><span class="lineNum"> 79 </span> : : {</a>
+<a name="80"><span class="lineNum"> 80 </span> : : if (__OPEN_NEEDS_MODE (__oflag) &amp;&amp; __va_arg_pack_len () &lt; 1)</a>
+<a name="81"><span class="lineNum"> 81 </span> : : {</a>
+<a name="82"><span class="lineNum"> 82 </span> : : __open64_missing_mode ();</a>
+<a name="83"><span class="lineNum"> 83 </span> : : return __open64_2 (__path, __oflag);</a>
+<a name="84"><span class="lineNum"> 84 </span> : : }</a>
+<a name="85"><span class="lineNum"> 85 </span> : : return __open64_alias (__path, __oflag, __va_arg_pack ());</a>
+<a name="86"><span class="lineNum"> 86 </span> : : }</a>
+<a name="87"><span class="lineNum"> 87 </span> : : </a>
+<a name="88"><span class="lineNum"> 88 </span> : : if (__va_arg_pack_len () &lt; 1)</a>
+<a name="89"><span class="lineNum"> 89 </span> : : return __open64_2 (__path, __oflag);</a>
+<a name="90"><span class="lineNum"> 90 </span> : : </a>
+<a name="91"><span class="lineNum"> 91 </span> : : return __open64_alias (__path, __oflag, __va_arg_pack ());</a>
+<a name="92"><span class="lineNum"> 92 </span> : : }</a>
+<a name="93"><span class="lineNum"> 93 </span> : : #endif</a>
+<a name="94"><span class="lineNum"> 94 </span> : : </a>
+<a name="95"><span class="lineNum"> 95 </span> : : </a>
+<a name="96"><span class="lineNum"> 96 </span> : : #ifdef __USE_ATFILE</a>
+<a name="97"><span class="lineNum"> 97 </span> : : # ifndef __USE_FILE_OFFSET64</a>
+<a name="98"><span class="lineNum"> 98 </span> : : extern int __openat_2 (int __fd, const char *__path, int __oflag)</a>
+<a name="99"><span class="lineNum"> 99 </span> : : __nonnull ((2));</a>
+<a name="100"><span class="lineNum"> 100 </span> : : extern int __REDIRECT (__openat_alias, (int __fd, const char *__path,</a>
+<a name="101"><span class="lineNum"> 101 </span> : : int __oflag, ...), openat)</a>
+<a name="102"><span class="lineNum"> 102 </span> : : __nonnull ((2));</a>
+<a name="103"><span class="lineNum"> 103 </span> : : # else</a>
+<a name="104"><span class="lineNum"> 104 </span> : : extern int __REDIRECT (__openat_2, (int __fd, const char *__path,</a>
+<a name="105"><span class="lineNum"> 105 </span> : : int __oflag), __openat64_2)</a>
+<a name="106"><span class="lineNum"> 106 </span> : : __nonnull ((2));</a>
+<a name="107"><span class="lineNum"> 107 </span> : : extern int __REDIRECT (__openat_alias, (int __fd, const char *__path,</a>
+<a name="108"><span class="lineNum"> 108 </span> : : int __oflag, ...), openat64)</a>
+<a name="109"><span class="lineNum"> 109 </span> : : __nonnull ((2));</a>
+<a name="110"><span class="lineNum"> 110 </span> : : # endif</a>
+<a name="111"><span class="lineNum"> 111 </span> : : __errordecl (__openat_too_many_args,</a>
+<a name="112"><span class="lineNum"> 112 </span> : : &quot;openat can be called either with 3 or 4 arguments, not more&quot;);</a>
+<a name="113"><span class="lineNum"> 113 </span> : : __errordecl (__openat_missing_mode,</a>
+<a name="114"><span class="lineNum"> 114 </span> : : &quot;openat with O_CREAT or O_TMPFILE in third argument needs 4 arguments&quot;);</a>
+<a name="115"><span class="lineNum"> 115 </span> : : </a>
+<a name="116"><span class="lineNum"> 116 </span> : : __fortify_function int</a>
+<a name="117"><span class="lineNum"> 117 </span> : : openat (int __fd, const char *__path, int __oflag, ...)</a>
+<a name="118"><span class="lineNum"> 118 </span> : : {</a>
+<a name="119"><span class="lineNum"> 119 </span> : : if (__va_arg_pack_len () &gt; 1)</a>
+<a name="120"><span class="lineNum"> 120 </span> : : __openat_too_many_args ();</a>
+<a name="121"><span class="lineNum"> 121 </span> : : </a>
+<a name="122"><span class="lineNum"> 122 </span> : : if (__builtin_constant_p (__oflag))</a>
+<a name="123"><span class="lineNum"> 123 </span> : : {</a>
+<a name="124"><span class="lineNum"> 124 </span> : : if (__OPEN_NEEDS_MODE (__oflag) &amp;&amp; __va_arg_pack_len () &lt; 1)</a>
+<a name="125"><span class="lineNum"> 125 </span> : : {</a>
+<a name="126"><span class="lineNum"> 126 </span> : : __openat_missing_mode ();</a>
+<a name="127"><span class="lineNum"> 127 </span> : : return __openat_2 (__fd, __path, __oflag);</a>
+<a name="128"><span class="lineNum"> 128 </span> : : }</a>
+<a name="129"><span class="lineNum"> 129 </span> : : return __openat_alias (__fd, __path, __oflag, __va_arg_pack ());</a>
+<a name="130"><span class="lineNum"> 130 </span> : : }</a>
+<a name="131"><span class="lineNum"> 131 </span> : : </a>
+<a name="132"><span class="lineNum"> 132 </span> : : if (__va_arg_pack_len () &lt; 1)</a>
+<a name="133"><span class="lineNum"> 133 </span> : : return __openat_2 (__fd, __path, __oflag);</a>
+<a name="134"><span class="lineNum"> 134 </span> : : </a>
+<a name="135"><span class="lineNum"> 135 </span> : : return __openat_alias (__fd, __path, __oflag, __va_arg_pack ());</a>
+<a name="136"><span class="lineNum"> 136 </span> : : }</a>
+<a name="137"><span class="lineNum"> 137 </span> : : </a>
+<a name="138"><span class="lineNum"> 138 </span> : : </a>
+<a name="139"><span class="lineNum"> 139 </span> : : # ifdef __USE_LARGEFILE64</a>
+<a name="140"><span class="lineNum"> 140 </span> : : extern int __openat64_2 (int __fd, const char *__path, int __oflag)</a>
+<a name="141"><span class="lineNum"> 141 </span> : : __nonnull ((2));</a>
+<a name="142"><span class="lineNum"> 142 </span> : : extern int __REDIRECT (__openat64_alias, (int __fd, const char *__path,</a>
+<a name="143"><span class="lineNum"> 143 </span> : : int __oflag, ...), openat64)</a>
+<a name="144"><span class="lineNum"> 144 </span> : : __nonnull ((2));</a>
+<a name="145"><span class="lineNum"> 145 </span> : : __errordecl (__openat64_too_many_args,</a>
+<a name="146"><span class="lineNum"> 146 </span> : : &quot;openat64 can be called either with 3 or 4 arguments, not more&quot;);</a>
+<a name="147"><span class="lineNum"> 147 </span> : : __errordecl (__openat64_missing_mode,</a>
+<a name="148"><span class="lineNum"> 148 </span> : : &quot;openat64 with O_CREAT or O_TMPFILE in third argument needs 4 arguments&quot;);</a>
+<a name="149"><span class="lineNum"> 149 </span> : : </a>
+<a name="150"><span class="lineNum"> 150 </span> : : __fortify_function int</a>
+<a name="151"><span class="lineNum"> 151 </span> : : openat64 (int __fd, const char *__path, int __oflag, ...)</a>
+<a name="152"><span class="lineNum"> 152 </span> : : {</a>
+<a name="153"><span class="lineNum"> 153 </span> : : if (__va_arg_pack_len () &gt; 1)</a>
+<a name="154"><span class="lineNum"> 154 </span> : : __openat64_too_many_args ();</a>
+<a name="155"><span class="lineNum"> 155 </span> : : </a>
+<a name="156"><span class="lineNum"> 156 </span> : : if (__builtin_constant_p (__oflag))</a>
+<a name="157"><span class="lineNum"> 157 </span> : : {</a>
+<a name="158"><span class="lineNum"> 158 </span> : : if (__OPEN_NEEDS_MODE (__oflag) &amp;&amp; __va_arg_pack_len () &lt; 1)</a>
+<a name="159"><span class="lineNum"> 159 </span> : : {</a>
+<a name="160"><span class="lineNum"> 160 </span> : : __openat64_missing_mode ();</a>
+<a name="161"><span class="lineNum"> 161 </span> : : return __openat64_2 (__fd, __path, __oflag);</a>
+<a name="162"><span class="lineNum"> 162 </span> : : }</a>
+<a name="163"><span class="lineNum"> 163 </span> : : return __openat64_alias (__fd, __path, __oflag, __va_arg_pack ());</a>
+<a name="164"><span class="lineNum"> 164 </span> : : }</a>
+<a name="165"><span class="lineNum"> 165 </span> : : </a>
+<a name="166"><span class="lineNum"> 166 </span> : : if (__va_arg_pack_len () &lt; 1)</a>
+<a name="167"><span class="lineNum"> 167 </span> : : return __openat64_2 (__fd, __path, __oflag);</a>
+<a name="168"><span class="lineNum"> 168 </span> : : </a>
+<a name="169"><span class="lineNum"> 169 </span> : : return __openat64_alias (__fd, __path, __oflag, __va_arg_pack ());</a>
+<a name="170"><span class="lineNum"> 170 </span> : : }</a>
+<a name="171"><span class="lineNum"> 171 </span> : : # endif</a>
+<a name="172"><span class="lineNum"> 172 </span> : : #endif</a>
+</pre>
+ </td>
+ </tr>
+ </table>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/index-sort-b.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/index-sort-b.html
new file mode 100644
index 0000000..9c7e696
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/index-sort-b.html
@@ -0,0 +1,167 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - /usr/include/x86_64-linux-gnu/bits</td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">37</td>
+ <td class="headerCovTableEntry">39</td>
+ <td class="headerCovTableEntryHi">94.9 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">3</td>
+ <td class="headerCovTableEntry">3</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="80%" cellpadding=1 cellspacing=1 border=0>
+
+ <tr>
+ <td width="44%"><br></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ </tr>
+
+ <tr>
+ <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
+ <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="stdio.h.gcov.html">stdio.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="string_fortified.h.gcov.html">string_fortified.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">6 / 6</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="fcntl2.h.gcov.html">fcntl2.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">5 / 5</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="byteswap.h.gcov.html">byteswap.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">6 / 6</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">3 / 3</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="unistd.h.gcov.html">unistd.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=71 height=10 alt="71.4%"><img src="../../../../snow.png" width=29 height=10 alt="71.4%"></td></tr></table>
+ </td>
+ <td class="coverPerLo">71.4&nbsp;%</td>
+ <td class="coverNumLo">5 / 7</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="stdio2.h.gcov.html">stdio2.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">13 / 13</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ </table>
+ </center>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/index-sort-f.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/index-sort-f.html
new file mode 100644
index 0000000..a6a1564
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/index-sort-f.html
@@ -0,0 +1,167 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - /usr/include/x86_64-linux-gnu/bits</td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">37</td>
+ <td class="headerCovTableEntry">39</td>
+ <td class="headerCovTableEntryHi">94.9 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">3</td>
+ <td class="headerCovTableEntry">3</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="80%" cellpadding=1 cellspacing=1 border=0>
+
+ <tr>
+ <td width="44%"><br></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ </tr>
+
+ <tr>
+ <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
+ <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td>
+ <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="stdio.h.gcov.html">stdio.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="string_fortified.h.gcov.html">string_fortified.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">6 / 6</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="fcntl2.h.gcov.html">fcntl2.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">5 / 5</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="unistd.h.gcov.html">unistd.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=71 height=10 alt="71.4%"><img src="../../../../snow.png" width=29 height=10 alt="71.4%"></td></tr></table>
+ </td>
+ <td class="coverPerLo">71.4&nbsp;%</td>
+ <td class="coverNumLo">5 / 7</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="stdio2.h.gcov.html">stdio2.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">13 / 13</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="byteswap.h.gcov.html">byteswap.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">6 / 6</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">3 / 3</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ </table>
+ </center>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/index-sort-l.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/index-sort-l.html
new file mode 100644
index 0000000..a3c7c2a
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/index-sort-l.html
@@ -0,0 +1,167 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - /usr/include/x86_64-linux-gnu/bits</td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">37</td>
+ <td class="headerCovTableEntry">39</td>
+ <td class="headerCovTableEntryHi">94.9 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">3</td>
+ <td class="headerCovTableEntry">3</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="80%" cellpadding=1 cellspacing=1 border=0>
+
+ <tr>
+ <td width="44%"><br></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ </tr>
+
+ <tr>
+ <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
+ <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></span></td>
+ <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="unistd.h.gcov.html">unistd.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=71 height=10 alt="71.4%"><img src="../../../../snow.png" width=29 height=10 alt="71.4%"></td></tr></table>
+ </td>
+ <td class="coverPerLo">71.4&nbsp;%</td>
+ <td class="coverNumLo">5 / 7</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="stdio.h.gcov.html">stdio.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="fcntl2.h.gcov.html">fcntl2.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">5 / 5</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="string_fortified.h.gcov.html">string_fortified.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">6 / 6</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="byteswap.h.gcov.html">byteswap.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">6 / 6</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">3 / 3</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="stdio2.h.gcov.html">stdio2.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">13 / 13</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ </table>
+ </center>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/index.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/index.html
new file mode 100644
index 0000000..7427abf
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/index.html
@@ -0,0 +1,167 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - /usr/include/x86_64-linux-gnu/bits</td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">37</td>
+ <td class="headerCovTableEntry">39</td>
+ <td class="headerCovTableEntryHi">94.9 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">3</td>
+ <td class="headerCovTableEntry">3</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="80%" cellpadding=1 cellspacing=1 border=0>
+
+ <tr>
+ <td width="44%"><br></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ <td width="8%"></td>
+ </tr>
+
+ <tr>
+ <td class="tableHead">Filename <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></span></td>
+ <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="byteswap.h.gcov.html">byteswap.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">6 / 6</td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">3 / 3</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="fcntl2.h.gcov.html">fcntl2.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">5 / 5</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="stdio.h.gcov.html">stdio.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">2 / 2</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="stdio2.h.gcov.html">stdio2.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">13 / 13</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="string_fortified.h.gcov.html">string_fortified.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ </td>
+ <td class="coverPerHi">100.0&nbsp;%</td>
+ <td class="coverNumHi">6 / 6</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ <tr>
+ <td class="coverFile"><a href="unistd.h.gcov.html">unistd.h</a></td>
+ <td class="coverBar" align="center">
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../ruby.png" width=71 height=10 alt="71.4%"><img src="../../../../snow.png" width=29 height=10 alt="71.4%"></td></tr></table>
+ </td>
+ <td class="coverPerLo">71.4&nbsp;%</td>
+ <td class="coverNumLo">5 / 7</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ <td class="coverPerHi">-</td>
+ <td class="coverNumHi">0 / 0</td>
+ </tr>
+ </table>
+ </center>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/stdio.h.func-sort-c.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/stdio.h.func-sort-c.html
new file mode 100644
index 0000000..a79fda0
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/stdio.h.func-sort-c.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/stdio.h - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - stdio.h<span style="font-size: 80%;"> (<a href="stdio.h.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="stdio.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/stdio.h.func.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/stdio.h.func.html
new file mode 100644
index 0000000..ffa715e
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/stdio.h.func.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/stdio.h - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - stdio.h<span style="font-size: 80%;"> (<a href="stdio.h.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntry">2</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="stdio.h.func-sort-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/bits/stdio.h.gcov.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/stdio.h.gcov.html
index 685cc1d..c05ac1e 100644
--- a/coverage-report/usr/include/bits/stdio.h.gcov.html
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/stdio.h.gcov.html
@@ -4,22 +4,22 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>LCOV - skiboot.info - /usr/include/bits/stdio.h</title>
- <link rel="stylesheet" type="text/css" href="../../../gcov.css">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/stdio.h</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
- <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">usr/include/bits</a> - stdio.h<span style="font-size: 80%;"> (source / <a href="stdio.h.func-sort-c.html">functions</a>)</span></td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - stdio.h<span style="font-size: 80%;"> (source / <a href="stdio.h.func-sort-c.html">functions</a>)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
@@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -53,12 +53,12 @@
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
- <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
@@ -271,7 +271,7 @@
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
</table>
<br>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/stdio2.h.func-sort-c.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/stdio2.h.func-sort-c.html
new file mode 100644
index 0000000..3f2c6c1
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/stdio2.h.func-sort-c.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/stdio2.h - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - stdio2.h<span style="font-size: 80%;"> (<a href="stdio2.h.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">13</td>
+ <td class="headerCovTableEntry">13</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="stdio2.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/stdio2.h.func.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/stdio2.h.func.html
new file mode 100644
index 0000000..9c56bc1
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/stdio2.h.func.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/stdio2.h - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - stdio2.h<span style="font-size: 80%;"> (<a href="stdio2.h.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">13</td>
+ <td class="headerCovTableEntry">13</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="stdio2.h.func-sort-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/stdio2.h.gcov.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/stdio2.h.gcov.html
new file mode 100644
index 0000000..531f163
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/stdio2.h.gcov.html
@@ -0,0 +1,471 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/stdio2.h</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - stdio2.h<span style="font-size: 80%;"> (source / <a href="stdio2.h.func-sort-c.html">functions</a>)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">13</td>
+ <td class="headerCovTableEntry">13</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <table cellpadding=0 cellspacing=0 border=0>
+ <tr>
+ <td><br></td>
+ </tr>
+ <tr>
+ <td>
+<pre class="sourceHeading"> Branch data Line data Source code</pre>
+<pre class="source">
+<a name="1"><span class="lineNum"> 1 </span> : : /* Checking macros for stdio functions.</a>
+<a name="2"><span class="lineNum"> 2 </span> : : Copyright (C) 2004-2020 Free Software Foundation, Inc.</a>
+<a name="3"><span class="lineNum"> 3 </span> : : This file is part of the GNU C Library.</a>
+<a name="4"><span class="lineNum"> 4 </span> : : </a>
+<a name="5"><span class="lineNum"> 5 </span> : : The GNU C Library is free software; you can redistribute it and/or</a>
+<a name="6"><span class="lineNum"> 6 </span> : : modify it under the terms of the GNU Lesser General Public</a>
+<a name="7"><span class="lineNum"> 7 </span> : : License as published by the Free Software Foundation; either</a>
+<a name="8"><span class="lineNum"> 8 </span> : : version 2.1 of the License, or (at your option) any later version.</a>
+<a name="9"><span class="lineNum"> 9 </span> : : </a>
+<a name="10"><span class="lineNum"> 10 </span> : : The GNU C Library is distributed in the hope that it will be useful,</a>
+<a name="11"><span class="lineNum"> 11 </span> : : but WITHOUT ANY WARRANTY; without even the implied warranty of</a>
+<a name="12"><span class="lineNum"> 12 </span> : : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</a>
+<a name="13"><span class="lineNum"> 13 </span> : : Lesser General Public License for more details.</a>
+<a name="14"><span class="lineNum"> 14 </span> : : </a>
+<a name="15"><span class="lineNum"> 15 </span> : : You should have received a copy of the GNU Lesser General Public</a>
+<a name="16"><span class="lineNum"> 16 </span> : : License along with the GNU C Library; if not, see</a>
+<a name="17"><span class="lineNum"> 17 </span> : : &lt;https://www.gnu.org/licenses/&gt;. */</a>
+<a name="18"><span class="lineNum"> 18 </span> : : </a>
+<a name="19"><span class="lineNum"> 19 </span> : : #ifndef _BITS_STDIO2_H</a>
+<a name="20"><span class="lineNum"> 20 </span> : : #define _BITS_STDIO2_H 1</a>
+<a name="21"><span class="lineNum"> 21 </span> : : </a>
+<a name="22"><span class="lineNum"> 22 </span> : : #ifndef _STDIO_H</a>
+<a name="23"><span class="lineNum"> 23 </span> : : # error &quot;Never include &lt;bits/stdio2.h&gt; directly; use &lt;stdio.h&gt; instead.&quot;</a>
+<a name="24"><span class="lineNum"> 24 </span> : : #endif</a>
+<a name="25"><span class="lineNum"> 25 </span> : : </a>
+<a name="26"><span class="lineNum"> 26 </span> : : extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen,</a>
+<a name="27"><span class="lineNum"> 27 </span> : : const char *__restrict __format, ...) __THROW;</a>
+<a name="28"><span class="lineNum"> 28 </span> : : extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen,</a>
+<a name="29"><span class="lineNum"> 29 </span> : : const char *__restrict __format,</a>
+<a name="30"><span class="lineNum"> 30 </span> : : __gnuc_va_list __ap) __THROW;</a>
+<a name="31"><span class="lineNum"> 31 </span> : : </a>
+<a name="32"><span class="lineNum"> 32 </span> : : #ifdef __va_arg_pack</a>
+<a name="33"><span class="lineNum"> 33 </span> : : __fortify_function int</a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 112 : __NTH (sprintf (char *__restrict __s, const char *__restrict __fmt, ...))</span></a>
+<a name="35"><span class="lineNum"> 35 </span> : : {</a>
+<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 112 : return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,</span></a>
+<a name="37"><span class="lineNum"> 37 </span> : : __bos (__s), __fmt, __va_arg_pack ());</a>
+<a name="38"><span class="lineNum"> 38 </span> : : }</a>
+<a name="39"><span class="lineNum"> 39 </span> : : #elif !defined __cplusplus</a>
+<a name="40"><span class="lineNum"> 40 </span> : : # define sprintf(str, ...) \</a>
+<a name="41"><span class="lineNum"> 41 </span> : : __builtin___sprintf_chk (str, __USE_FORTIFY_LEVEL - 1, __bos (str), \</a>
+<a name="42"><span class="lineNum"> 42 </span> : : __VA_ARGS__)</a>
+<a name="43"><span class="lineNum"> 43 </span> : : #endif</a>
+<a name="44"><span class="lineNum"> 44 </span> : : </a>
+<a name="45"><span class="lineNum"> 45 </span> : : __fortify_function int</a>
+<a name="46"><span class="lineNum"> 46 </span> : : __NTH (vsprintf (char *__restrict __s, const char *__restrict __fmt,</a>
+<a name="47"><span class="lineNum"> 47 </span> : : __gnuc_va_list __ap))</a>
+<a name="48"><span class="lineNum"> 48 </span> : : {</a>
+<a name="49"><span class="lineNum"> 49 </span> : : return __builtin___vsprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,</a>
+<a name="50"><span class="lineNum"> 50 </span> : : __bos (__s), __fmt, __ap);</a>
+<a name="51"><span class="lineNum"> 51 </span> : : }</a>
+<a name="52"><span class="lineNum"> 52 </span> : : </a>
+<a name="53"><span class="lineNum"> 53 </span> : : #if defined __USE_ISOC99 || defined __USE_UNIX98</a>
+<a name="54"><span class="lineNum"> 54 </span> : : </a>
+<a name="55"><span class="lineNum"> 55 </span> : : extern int __snprintf_chk (char *__restrict __s, size_t __n, int __flag,</a>
+<a name="56"><span class="lineNum"> 56 </span> : : size_t __slen, const char *__restrict __format,</a>
+<a name="57"><span class="lineNum"> 57 </span> : : ...) __THROW;</a>
+<a name="58"><span class="lineNum"> 58 </span> : : extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag,</a>
+<a name="59"><span class="lineNum"> 59 </span> : : size_t __slen, const char *__restrict __format,</a>
+<a name="60"><span class="lineNum"> 60 </span> : : __gnuc_va_list __ap) __THROW;</a>
+<a name="61"><span class="lineNum"> 61 </span> : : </a>
+<a name="62"><span class="lineNum"> 62 </span> : : # ifdef __va_arg_pack</a>
+<a name="63"><span class="lineNum"> 63 </span> : : __fortify_function int</a>
+<a name="64"><span class="lineNum"> 64 </span> : : __NTH (snprintf (char *__restrict __s, size_t __n,</a>
+<a name="65"><span class="lineNum"> 65 </span> : : const char *__restrict __fmt, ...))</a>
+<a name="66"><span class="lineNum"> 66 </span> : : {</a>
+<a name="67"><span class="lineNum"> 67 </span> : : return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,</a>
+<a name="68"><span class="lineNum"> 68 </span> : : __bos (__s), __fmt, __va_arg_pack ());</a>
+<a name="69"><span class="lineNum"> 69 </span> : : }</a>
+<a name="70"><span class="lineNum"> 70 </span> : : # elif !defined __cplusplus</a>
+<a name="71"><span class="lineNum"> 71 </span> : : # define snprintf(str, len, ...) \</a>
+<a name="72"><span class="lineNum"> 72 </span> : : __builtin___snprintf_chk (str, len, __USE_FORTIFY_LEVEL - 1, __bos (str), \</a>
+<a name="73"><span class="lineNum"> 73 </span> : : __VA_ARGS__)</a>
+<a name="74"><span class="lineNum"> 74 </span> : : # endif</a>
+<a name="75"><span class="lineNum"> 75 </span> : : </a>
+<a name="76"><span class="lineNum"> 76 </span> : : __fortify_function int</a>
+<a name="77"><span class="lineNum"> 77 </span> : : __NTH (vsnprintf (char *__restrict __s, size_t __n,</a>
+<a name="78"><span class="lineNum"> 78 </span> : : const char *__restrict __fmt, __gnuc_va_list __ap))</a>
+<a name="79"><span class="lineNum"> 79 </span> : : {</a>
+<a name="80"><span class="lineNum"> 80 </span> : : return __builtin___vsnprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,</a>
+<a name="81"><span class="lineNum"> 81 </span> : : __bos (__s), __fmt, __ap);</a>
+<a name="82"><span class="lineNum"> 82 </span> : : }</a>
+<a name="83"><span class="lineNum"> 83 </span> : : </a>
+<a name="84"><span class="lineNum"> 84 </span> : : #endif</a>
+<a name="85"><span class="lineNum"> 85 </span> : : </a>
+<a name="86"><span class="lineNum"> 86 </span> : : #if __USE_FORTIFY_LEVEL &gt; 1</a>
+<a name="87"><span class="lineNum"> 87 </span> : : </a>
+<a name="88"><span class="lineNum"> 88 </span> : : extern int __fprintf_chk (FILE *__restrict __stream, int __flag,</a>
+<a name="89"><span class="lineNum"> 89 </span> : : const char *__restrict __format, ...);</a>
+<a name="90"><span class="lineNum"> 90 </span> : : extern int __printf_chk (int __flag, const char *__restrict __format, ...);</a>
+<a name="91"><span class="lineNum"> 91 </span> : : extern int __vfprintf_chk (FILE *__restrict __stream, int __flag,</a>
+<a name="92"><span class="lineNum"> 92 </span> : : const char *__restrict __format, __gnuc_va_list __ap);</a>
+<a name="93"><span class="lineNum"> 93 </span> : : extern int __vprintf_chk (int __flag, const char *__restrict __format,</a>
+<a name="94"><span class="lineNum"> 94 </span> : : __gnuc_va_list __ap);</a>
+<a name="95"><span class="lineNum"> 95 </span> : : </a>
+<a name="96"><span class="lineNum"> 96 </span> : : # ifdef __va_arg_pack</a>
+<a name="97"><span class="lineNum"> 97 </span> : : __fortify_function int</a>
+<a name="98"><span class="lineNum"> 98 </span> :<span class="lineCov"> 58 : fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...)</span></a>
+<a name="99"><span class="lineNum"> 99 </span> : : {</a>
+<a name="100"><span class="lineNum"> 100 </span> :<span class="lineCov"> 34 : return __fprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt,</span></a>
+<a name="101"><span class="lineNum"> 101 </span> : : __va_arg_pack ());</a>
+<a name="102"><span class="lineNum"> 102 </span> : : }</a>
+<a name="103"><span class="lineNum"> 103 </span> : : </a>
+<a name="104"><span class="lineNum"> 104 </span> : : __fortify_function int</a>
+<a name="105"><span class="lineNum"> 105 </span> :<span class="lineCov"> 42936 : printf (const char *__restrict __fmt, ...)</span></a>
+<a name="106"><span class="lineNum"> 106 </span> : : {</a>
+<a name="107"><span class="lineNum"> 107 </span> :<span class="lineCov"> 42492 : return __printf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());</span></a>
+<a name="108"><span class="lineNum"> 108 </span> : : }</a>
+<a name="109"><span class="lineNum"> 109 </span> : : # elif !defined __cplusplus</a>
+<a name="110"><span class="lineNum"> 110 </span> : : # define printf(...) \</a>
+<a name="111"><span class="lineNum"> 111 </span> : : __printf_chk (__USE_FORTIFY_LEVEL - 1, __VA_ARGS__)</a>
+<a name="112"><span class="lineNum"> 112 </span> : : # define fprintf(stream, ...) \</a>
+<a name="113"><span class="lineNum"> 113 </span> : : __fprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)</a>
+<a name="114"><span class="lineNum"> 114 </span> : : # endif</a>
+<a name="115"><span class="lineNum"> 115 </span> : : </a>
+<a name="116"><span class="lineNum"> 116 </span> : : __fortify_function int</a>
+<a name="117"><span class="lineNum"> 117 </span> : : vprintf (const char *__restrict __fmt, __gnuc_va_list __ap)</a>
+<a name="118"><span class="lineNum"> 118 </span> : : {</a>
+<a name="119"><span class="lineNum"> 119 </span> : : #ifdef __USE_EXTERN_INLINES</a>
+<a name="120"><span class="lineNum"> 120 </span> : : return __vfprintf_chk (stdout, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);</a>
+<a name="121"><span class="lineNum"> 121 </span> : : #else</a>
+<a name="122"><span class="lineNum"> 122 </span> : : return __vprintf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __ap);</a>
+<a name="123"><span class="lineNum"> 123 </span> : : #endif</a>
+<a name="124"><span class="lineNum"> 124 </span> : : }</a>
+<a name="125"><span class="lineNum"> 125 </span> : : </a>
+<a name="126"><span class="lineNum"> 126 </span> : : __fortify_function int</a>
+<a name="127"><span class="lineNum"> 127 </span> : : vfprintf (FILE *__restrict __stream,</a>
+<a name="128"><span class="lineNum"> 128 </span> : : const char *__restrict __fmt, __gnuc_va_list __ap)</a>
+<a name="129"><span class="lineNum"> 129 </span> : : {</a>
+<a name="130"><span class="lineNum"> 130 </span> : : return __vfprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);</a>
+<a name="131"><span class="lineNum"> 131 </span> : : }</a>
+<a name="132"><span class="lineNum"> 132 </span> : : </a>
+<a name="133"><span class="lineNum"> 133 </span> : : # ifdef __USE_XOPEN2K8</a>
+<a name="134"><span class="lineNum"> 134 </span> : : extern int __dprintf_chk (int __fd, int __flag, const char *__restrict __fmt,</a>
+<a name="135"><span class="lineNum"> 135 </span> : : ...) __attribute__ ((__format__ (__printf__, 3, 4)));</a>
+<a name="136"><span class="lineNum"> 136 </span> : : extern int __vdprintf_chk (int __fd, int __flag,</a>
+<a name="137"><span class="lineNum"> 137 </span> : : const char *__restrict __fmt, __gnuc_va_list __arg)</a>
+<a name="138"><span class="lineNum"> 138 </span> : : __attribute__ ((__format__ (__printf__, 3, 0)));</a>
+<a name="139"><span class="lineNum"> 139 </span> : : </a>
+<a name="140"><span class="lineNum"> 140 </span> : : # ifdef __va_arg_pack</a>
+<a name="141"><span class="lineNum"> 141 </span> : : __fortify_function int</a>
+<a name="142"><span class="lineNum"> 142 </span> : : dprintf (int __fd, const char *__restrict __fmt, ...)</a>
+<a name="143"><span class="lineNum"> 143 </span> : : {</a>
+<a name="144"><span class="lineNum"> 144 </span> : : return __dprintf_chk (__fd, __USE_FORTIFY_LEVEL - 1, __fmt,</a>
+<a name="145"><span class="lineNum"> 145 </span> : : __va_arg_pack ());</a>
+<a name="146"><span class="lineNum"> 146 </span> : : }</a>
+<a name="147"><span class="lineNum"> 147 </span> : : # elif !defined __cplusplus</a>
+<a name="148"><span class="lineNum"> 148 </span> : : # define dprintf(fd, ...) \</a>
+<a name="149"><span class="lineNum"> 149 </span> : : __dprintf_chk (fd, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)</a>
+<a name="150"><span class="lineNum"> 150 </span> : : # endif</a>
+<a name="151"><span class="lineNum"> 151 </span> : : </a>
+<a name="152"><span class="lineNum"> 152 </span> : : __fortify_function int</a>
+<a name="153"><span class="lineNum"> 153 </span> : : vdprintf (int __fd, const char *__restrict __fmt, __gnuc_va_list __ap)</a>
+<a name="154"><span class="lineNum"> 154 </span> : : {</a>
+<a name="155"><span class="lineNum"> 155 </span> : : return __vdprintf_chk (__fd, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);</a>
+<a name="156"><span class="lineNum"> 156 </span> : : }</a>
+<a name="157"><span class="lineNum"> 157 </span> : : # endif</a>
+<a name="158"><span class="lineNum"> 158 </span> : : </a>
+<a name="159"><span class="lineNum"> 159 </span> : : # ifdef __USE_GNU</a>
+<a name="160"><span class="lineNum"> 160 </span> : : </a>
+<a name="161"><span class="lineNum"> 161 </span> : : extern int __asprintf_chk (char **__restrict __ptr, int __flag,</a>
+<a name="162"><span class="lineNum"> 162 </span> : : const char *__restrict __fmt, ...)</a>
+<a name="163"><span class="lineNum"> 163 </span> : : __THROW __attribute__ ((__format__ (__printf__, 3, 4))) __wur;</a>
+<a name="164"><span class="lineNum"> 164 </span> : : extern int __vasprintf_chk (char **__restrict __ptr, int __flag,</a>
+<a name="165"><span class="lineNum"> 165 </span> : : const char *__restrict __fmt, __gnuc_va_list __arg)</a>
+<a name="166"><span class="lineNum"> 166 </span> : : __THROW __attribute__ ((__format__ (__printf__, 3, 0))) __wur;</a>
+<a name="167"><span class="lineNum"> 167 </span> : : extern int __obstack_printf_chk (struct obstack *__restrict __obstack,</a>
+<a name="168"><span class="lineNum"> 168 </span> : : int __flag, const char *__restrict __format,</a>
+<a name="169"><span class="lineNum"> 169 </span> : : ...)</a>
+<a name="170"><span class="lineNum"> 170 </span> : : __THROW __attribute__ ((__format__ (__printf__, 3, 4)));</a>
+<a name="171"><span class="lineNum"> 171 </span> : : extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack,</a>
+<a name="172"><span class="lineNum"> 172 </span> : : int __flag,</a>
+<a name="173"><span class="lineNum"> 173 </span> : : const char *__restrict __format,</a>
+<a name="174"><span class="lineNum"> 174 </span> : : __gnuc_va_list __args)</a>
+<a name="175"><span class="lineNum"> 175 </span> : : __THROW __attribute__ ((__format__ (__printf__, 3, 0)));</a>
+<a name="176"><span class="lineNum"> 176 </span> : : </a>
+<a name="177"><span class="lineNum"> 177 </span> : : # ifdef __va_arg_pack</a>
+<a name="178"><span class="lineNum"> 178 </span> : : __fortify_function int</a>
+<a name="179"><span class="lineNum"> 179 </span> :<span class="lineCov"> 12 : __NTH (asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...))</span></a>
+<a name="180"><span class="lineNum"> 180 </span> : : {</a>
+<a name="181"><span class="lineNum"> 181 </span> :<span class="lineCov"> 12 : return __asprintf_chk (__ptr, __USE_FORTIFY_LEVEL - 1, __fmt,</span></a>
+<a name="182"><span class="lineNum"> 182 </span> : : __va_arg_pack ());</a>
+<a name="183"><span class="lineNum"> 183 </span> : : }</a>
+<a name="184"><span class="lineNum"> 184 </span> : : </a>
+<a name="185"><span class="lineNum"> 185 </span> : : __fortify_function int</a>
+<a name="186"><span class="lineNum"> 186 </span> : : __NTH (__asprintf (char **__restrict __ptr, const char *__restrict __fmt,</a>
+<a name="187"><span class="lineNum"> 187 </span> : : ...))</a>
+<a name="188"><span class="lineNum"> 188 </span> : : {</a>
+<a name="189"><span class="lineNum"> 189 </span> : : return __asprintf_chk (__ptr, __USE_FORTIFY_LEVEL - 1, __fmt,</a>
+<a name="190"><span class="lineNum"> 190 </span> : : __va_arg_pack ());</a>
+<a name="191"><span class="lineNum"> 191 </span> : : }</a>
+<a name="192"><span class="lineNum"> 192 </span> : : </a>
+<a name="193"><span class="lineNum"> 193 </span> : : __fortify_function int</a>
+<a name="194"><span class="lineNum"> 194 </span> : : __NTH (obstack_printf (struct obstack *__restrict __obstack,</a>
+<a name="195"><span class="lineNum"> 195 </span> : : const char *__restrict __fmt, ...))</a>
+<a name="196"><span class="lineNum"> 196 </span> : : {</a>
+<a name="197"><span class="lineNum"> 197 </span> : : return __obstack_printf_chk (__obstack, __USE_FORTIFY_LEVEL - 1, __fmt,</a>
+<a name="198"><span class="lineNum"> 198 </span> : : __va_arg_pack ());</a>
+<a name="199"><span class="lineNum"> 199 </span> : : }</a>
+<a name="200"><span class="lineNum"> 200 </span> : : # elif !defined __cplusplus</a>
+<a name="201"><span class="lineNum"> 201 </span> : : # define asprintf(ptr, ...) \</a>
+<a name="202"><span class="lineNum"> 202 </span> : : __asprintf_chk (ptr, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)</a>
+<a name="203"><span class="lineNum"> 203 </span> : : # define __asprintf(ptr, ...) \</a>
+<a name="204"><span class="lineNum"> 204 </span> : : __asprintf_chk (ptr, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)</a>
+<a name="205"><span class="lineNum"> 205 </span> : : # define obstack_printf(obstack, ...) \</a>
+<a name="206"><span class="lineNum"> 206 </span> : : __obstack_printf_chk (obstack, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)</a>
+<a name="207"><span class="lineNum"> 207 </span> : : # endif</a>
+<a name="208"><span class="lineNum"> 208 </span> : : </a>
+<a name="209"><span class="lineNum"> 209 </span> : : __fortify_function int</a>
+<a name="210"><span class="lineNum"> 210 </span> : : __NTH (vasprintf (char **__restrict __ptr, const char *__restrict __fmt,</a>
+<a name="211"><span class="lineNum"> 211 </span> : : __gnuc_va_list __ap))</a>
+<a name="212"><span class="lineNum"> 212 </span> : : {</a>
+<a name="213"><span class="lineNum"> 213 </span> : : return __vasprintf_chk (__ptr, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);</a>
+<a name="214"><span class="lineNum"> 214 </span> : : }</a>
+<a name="215"><span class="lineNum"> 215 </span> : : </a>
+<a name="216"><span class="lineNum"> 216 </span> : : __fortify_function int</a>
+<a name="217"><span class="lineNum"> 217 </span> : : __NTH (obstack_vprintf (struct obstack *__restrict __obstack,</a>
+<a name="218"><span class="lineNum"> 218 </span> : : const char *__restrict __fmt, __gnuc_va_list __ap))</a>
+<a name="219"><span class="lineNum"> 219 </span> : : {</a>
+<a name="220"><span class="lineNum"> 220 </span> : : return __obstack_vprintf_chk (__obstack, __USE_FORTIFY_LEVEL - 1, __fmt,</a>
+<a name="221"><span class="lineNum"> 221 </span> : : __ap);</a>
+<a name="222"><span class="lineNum"> 222 </span> : : }</a>
+<a name="223"><span class="lineNum"> 223 </span> : : </a>
+<a name="224"><span class="lineNum"> 224 </span> : : # endif</a>
+<a name="225"><span class="lineNum"> 225 </span> : : </a>
+<a name="226"><span class="lineNum"> 226 </span> : : #endif</a>
+<a name="227"><span class="lineNum"> 227 </span> : : </a>
+<a name="228"><span class="lineNum"> 228 </span> : : #if __GLIBC_USE (DEPRECATED_GETS)</a>
+<a name="229"><span class="lineNum"> 229 </span> : : extern char *__gets_chk (char *__str, size_t) __wur;</a>
+<a name="230"><span class="lineNum"> 230 </span> : : extern char *__REDIRECT (__gets_warn, (char *__str), gets)</a>
+<a name="231"><span class="lineNum"> 231 </span> : : __wur __warnattr (&quot;please use fgets or getline instead, gets can't &quot;</a>
+<a name="232"><span class="lineNum"> 232 </span> : : &quot;specify buffer size&quot;);</a>
+<a name="233"><span class="lineNum"> 233 </span> : : </a>
+<a name="234"><span class="lineNum"> 234 </span> : : __fortify_function __wur char *</a>
+<a name="235"><span class="lineNum"> 235 </span> : : gets (char *__str)</a>
+<a name="236"><span class="lineNum"> 236 </span> : : {</a>
+<a name="237"><span class="lineNum"> 237 </span> : : if (__bos (__str) != (size_t) -1)</a>
+<a name="238"><span class="lineNum"> 238 </span> : : return __gets_chk (__str, __bos (__str));</a>
+<a name="239"><span class="lineNum"> 239 </span> : : return __gets_warn (__str);</a>
+<a name="240"><span class="lineNum"> 240 </span> : : }</a>
+<a name="241"><span class="lineNum"> 241 </span> : : #endif</a>
+<a name="242"><span class="lineNum"> 242 </span> : : </a>
+<a name="243"><span class="lineNum"> 243 </span> : : extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n,</a>
+<a name="244"><span class="lineNum"> 244 </span> : : FILE *__restrict __stream) __wur;</a>
+<a name="245"><span class="lineNum"> 245 </span> : : extern char *__REDIRECT (__fgets_alias,</a>
+<a name="246"><span class="lineNum"> 246 </span> : : (char *__restrict __s, int __n,</a>
+<a name="247"><span class="lineNum"> 247 </span> : : FILE *__restrict __stream), fgets) __wur;</a>
+<a name="248"><span class="lineNum"> 248 </span> : : extern char *__REDIRECT (__fgets_chk_warn,</a>
+<a name="249"><span class="lineNum"> 249 </span> : : (char *__restrict __s, size_t __size, int __n,</a>
+<a name="250"><span class="lineNum"> 250 </span> : : FILE *__restrict __stream), __fgets_chk)</a>
+<a name="251"><span class="lineNum"> 251 </span> : : __wur __warnattr (&quot;fgets called with bigger size than length &quot;</a>
+<a name="252"><span class="lineNum"> 252 </span> : : &quot;of destination buffer&quot;);</a>
+<a name="253"><span class="lineNum"> 253 </span> : : </a>
+<a name="254"><span class="lineNum"> 254 </span> : : __fortify_function __wur char *</a>
+<a name="255"><span class="lineNum"> 255 </span> :<span class="lineCov"> 42 : fgets (char *__restrict __s, int __n, FILE *__restrict __stream)</span></a>
+<a name="256"><span class="lineNum"> 256 </span> : : {</a>
+<a name="257"><span class="lineNum"> 257 </span> :<span class="lineCov"> 42 : if (__bos (__s) != (size_t) -1)</span></a>
+<a name="258"><span class="lineNum"> 258 </span> : : {</a>
+<a name="259"><span class="lineNum"> 259 </span> :<span class="lineCov"> 42 : if (!__builtin_constant_p (__n) || __n &lt;= 0)</span></a>
+<a name="260"><span class="lineNum"> 260 </span> : : return __fgets_chk (__s, __bos (__s), __n, __stream);</a>
+<a name="261"><span class="lineNum"> 261 </span> : : </a>
+<a name="262"><span class="lineNum"> 262 </span> :<span class="lineCov"> 42 : if ((size_t) __n &gt; __bos (__s))</span></a>
+<a name="263"><span class="lineNum"> 263 </span> : : return __fgets_chk_warn (__s, __bos (__s), __n, __stream);</a>
+<a name="264"><span class="lineNum"> 264 </span> : : }</a>
+<a name="265"><span class="lineNum"> 265 </span> :<span class="lineCov"> 42 : return __fgets_alias (__s, __n, __stream);</span></a>
+<a name="266"><span class="lineNum"> 266 </span> : : }</a>
+<a name="267"><span class="lineNum"> 267 </span> : : </a>
+<a name="268"><span class="lineNum"> 268 </span> : : extern size_t __fread_chk (void *__restrict __ptr, size_t __ptrlen,</a>
+<a name="269"><span class="lineNum"> 269 </span> : : size_t __size, size_t __n,</a>
+<a name="270"><span class="lineNum"> 270 </span> : : FILE *__restrict __stream) __wur;</a>
+<a name="271"><span class="lineNum"> 271 </span> : : extern size_t __REDIRECT (__fread_alias,</a>
+<a name="272"><span class="lineNum"> 272 </span> : : (void *__restrict __ptr, size_t __size,</a>
+<a name="273"><span class="lineNum"> 273 </span> : : size_t __n, FILE *__restrict __stream),</a>
+<a name="274"><span class="lineNum"> 274 </span> : : fread) __wur;</a>
+<a name="275"><span class="lineNum"> 275 </span> : : extern size_t __REDIRECT (__fread_chk_warn,</a>
+<a name="276"><span class="lineNum"> 276 </span> : : (void *__restrict __ptr, size_t __ptrlen,</a>
+<a name="277"><span class="lineNum"> 277 </span> : : size_t __size, size_t __n,</a>
+<a name="278"><span class="lineNum"> 278 </span> : : FILE *__restrict __stream),</a>
+<a name="279"><span class="lineNum"> 279 </span> : : __fread_chk)</a>
+<a name="280"><span class="lineNum"> 280 </span> : : __wur __warnattr (&quot;fread called with bigger size * nmemb than length &quot;</a>
+<a name="281"><span class="lineNum"> 281 </span> : : &quot;of destination buffer&quot;);</a>
+<a name="282"><span class="lineNum"> 282 </span> : : </a>
+<a name="283"><span class="lineNum"> 283 </span> : : __fortify_function __wur size_t</a>
+<a name="284"><span class="lineNum"> 284 </span> : : fread (void *__restrict __ptr, size_t __size, size_t __n,</a>
+<a name="285"><span class="lineNum"> 285 </span> : : FILE *__restrict __stream)</a>
+<a name="286"><span class="lineNum"> 286 </span> : : {</a>
+<a name="287"><span class="lineNum"> 287 </span> : : if (__bos0 (__ptr) != (size_t) -1)</a>
+<a name="288"><span class="lineNum"> 288 </span> : : {</a>
+<a name="289"><span class="lineNum"> 289 </span> : : if (!__builtin_constant_p (__size)</a>
+<a name="290"><span class="lineNum"> 290 </span> : : || !__builtin_constant_p (__n)</a>
+<a name="291"><span class="lineNum"> 291 </span> : : || (__size | __n) &gt;= (((size_t) 1) &lt;&lt; (8 * sizeof (size_t) / 2)))</a>
+<a name="292"><span class="lineNum"> 292 </span> : : return __fread_chk (__ptr, __bos0 (__ptr), __size, __n, __stream);</a>
+<a name="293"><span class="lineNum"> 293 </span> : : </a>
+<a name="294"><span class="lineNum"> 294 </span> : : if (__size * __n &gt; __bos0 (__ptr))</a>
+<a name="295"><span class="lineNum"> 295 </span> : : return __fread_chk_warn (__ptr, __bos0 (__ptr), __size, __n, __stream);</a>
+<a name="296"><span class="lineNum"> 296 </span> : : }</a>
+<a name="297"><span class="lineNum"> 297 </span> : : return __fread_alias (__ptr, __size, __n, __stream);</a>
+<a name="298"><span class="lineNum"> 298 </span> : : }</a>
+<a name="299"><span class="lineNum"> 299 </span> : : </a>
+<a name="300"><span class="lineNum"> 300 </span> : : #ifdef __USE_GNU</a>
+<a name="301"><span class="lineNum"> 301 </span> : : extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size,</a>
+<a name="302"><span class="lineNum"> 302 </span> : : int __n, FILE *__restrict __stream) __wur;</a>
+<a name="303"><span class="lineNum"> 303 </span> : : extern char *__REDIRECT (__fgets_unlocked_alias,</a>
+<a name="304"><span class="lineNum"> 304 </span> : : (char *__restrict __s, int __n,</a>
+<a name="305"><span class="lineNum"> 305 </span> : : FILE *__restrict __stream), fgets_unlocked) __wur;</a>
+<a name="306"><span class="lineNum"> 306 </span> : : extern char *__REDIRECT (__fgets_unlocked_chk_warn,</a>
+<a name="307"><span class="lineNum"> 307 </span> : : (char *__restrict __s, size_t __size, int __n,</a>
+<a name="308"><span class="lineNum"> 308 </span> : : FILE *__restrict __stream), __fgets_unlocked_chk)</a>
+<a name="309"><span class="lineNum"> 309 </span> : : __wur __warnattr (&quot;fgets_unlocked called with bigger size than length &quot;</a>
+<a name="310"><span class="lineNum"> 310 </span> : : &quot;of destination buffer&quot;);</a>
+<a name="311"><span class="lineNum"> 311 </span> : : </a>
+<a name="312"><span class="lineNum"> 312 </span> : : __fortify_function __wur char *</a>
+<a name="313"><span class="lineNum"> 313 </span> : : fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream)</a>
+<a name="314"><span class="lineNum"> 314 </span> : : {</a>
+<a name="315"><span class="lineNum"> 315 </span> : : if (__bos (__s) != (size_t) -1)</a>
+<a name="316"><span class="lineNum"> 316 </span> : : {</a>
+<a name="317"><span class="lineNum"> 317 </span> : : if (!__builtin_constant_p (__n) || __n &lt;= 0)</a>
+<a name="318"><span class="lineNum"> 318 </span> : : return __fgets_unlocked_chk (__s, __bos (__s), __n, __stream);</a>
+<a name="319"><span class="lineNum"> 319 </span> : : </a>
+<a name="320"><span class="lineNum"> 320 </span> : : if ((size_t) __n &gt; __bos (__s))</a>
+<a name="321"><span class="lineNum"> 321 </span> : : return __fgets_unlocked_chk_warn (__s, __bos (__s), __n, __stream);</a>
+<a name="322"><span class="lineNum"> 322 </span> : : }</a>
+<a name="323"><span class="lineNum"> 323 </span> : : return __fgets_unlocked_alias (__s, __n, __stream);</a>
+<a name="324"><span class="lineNum"> 324 </span> : : }</a>
+<a name="325"><span class="lineNum"> 325 </span> : : #endif</a>
+<a name="326"><span class="lineNum"> 326 </span> : : </a>
+<a name="327"><span class="lineNum"> 327 </span> : : #ifdef __USE_MISC</a>
+<a name="328"><span class="lineNum"> 328 </span> : : # undef fread_unlocked</a>
+<a name="329"><span class="lineNum"> 329 </span> : : extern size_t __fread_unlocked_chk (void *__restrict __ptr, size_t __ptrlen,</a>
+<a name="330"><span class="lineNum"> 330 </span> : : size_t __size, size_t __n,</a>
+<a name="331"><span class="lineNum"> 331 </span> : : FILE *__restrict __stream) __wur;</a>
+<a name="332"><span class="lineNum"> 332 </span> : : extern size_t __REDIRECT (__fread_unlocked_alias,</a>
+<a name="333"><span class="lineNum"> 333 </span> : : (void *__restrict __ptr, size_t __size,</a>
+<a name="334"><span class="lineNum"> 334 </span> : : size_t __n, FILE *__restrict __stream),</a>
+<a name="335"><span class="lineNum"> 335 </span> : : fread_unlocked) __wur;</a>
+<a name="336"><span class="lineNum"> 336 </span> : : extern size_t __REDIRECT (__fread_unlocked_chk_warn,</a>
+<a name="337"><span class="lineNum"> 337 </span> : : (void *__restrict __ptr, size_t __ptrlen,</a>
+<a name="338"><span class="lineNum"> 338 </span> : : size_t __size, size_t __n,</a>
+<a name="339"><span class="lineNum"> 339 </span> : : FILE *__restrict __stream),</a>
+<a name="340"><span class="lineNum"> 340 </span> : : __fread_unlocked_chk)</a>
+<a name="341"><span class="lineNum"> 341 </span> : : __wur __warnattr (&quot;fread_unlocked called with bigger size * nmemb than &quot;</a>
+<a name="342"><span class="lineNum"> 342 </span> : : &quot;length of destination buffer&quot;);</a>
+<a name="343"><span class="lineNum"> 343 </span> : : </a>
+<a name="344"><span class="lineNum"> 344 </span> : : __fortify_function __wur size_t</a>
+<a name="345"><span class="lineNum"> 345 </span> : : fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n,</a>
+<a name="346"><span class="lineNum"> 346 </span> : : FILE *__restrict __stream)</a>
+<a name="347"><span class="lineNum"> 347 </span> : : {</a>
+<a name="348"><span class="lineNum"> 348 </span> : : if (__bos0 (__ptr) != (size_t) -1)</a>
+<a name="349"><span class="lineNum"> 349 </span> : : {</a>
+<a name="350"><span class="lineNum"> 350 </span> : : if (!__builtin_constant_p (__size)</a>
+<a name="351"><span class="lineNum"> 351 </span> : : || !__builtin_constant_p (__n)</a>
+<a name="352"><span class="lineNum"> 352 </span> : : || (__size | __n) &gt;= (((size_t) 1) &lt;&lt; (8 * sizeof (size_t) / 2)))</a>
+<a name="353"><span class="lineNum"> 353 </span> : : return __fread_unlocked_chk (__ptr, __bos0 (__ptr), __size, __n,</a>
+<a name="354"><span class="lineNum"> 354 </span> : : __stream);</a>
+<a name="355"><span class="lineNum"> 355 </span> : : </a>
+<a name="356"><span class="lineNum"> 356 </span> : : if (__size * __n &gt; __bos0 (__ptr))</a>
+<a name="357"><span class="lineNum"> 357 </span> : : return __fread_unlocked_chk_warn (__ptr, __bos0 (__ptr), __size, __n,</a>
+<a name="358"><span class="lineNum"> 358 </span> : : __stream);</a>
+<a name="359"><span class="lineNum"> 359 </span> : : }</a>
+<a name="360"><span class="lineNum"> 360 </span> : : </a>
+<a name="361"><span class="lineNum"> 361 </span> : : # ifdef __USE_EXTERN_INLINES</a>
+<a name="362"><span class="lineNum"> 362 </span> : : if (__builtin_constant_p (__size)</a>
+<a name="363"><span class="lineNum"> 363 </span> : : &amp;&amp; __builtin_constant_p (__n)</a>
+<a name="364"><span class="lineNum"> 364 </span> : : &amp;&amp; (__size | __n) &lt; (((size_t) 1) &lt;&lt; (8 * sizeof (size_t) / 2))</a>
+<a name="365"><span class="lineNum"> 365 </span> : : &amp;&amp; __size * __n &lt;= 8)</a>
+<a name="366"><span class="lineNum"> 366 </span> : : {</a>
+<a name="367"><span class="lineNum"> 367 </span> : : size_t __cnt = __size * __n;</a>
+<a name="368"><span class="lineNum"> 368 </span> : : char *__cptr = (char *) __ptr;</a>
+<a name="369"><span class="lineNum"> 369 </span> : : if (__cnt == 0)</a>
+<a name="370"><span class="lineNum"> 370 </span> : : return 0;</a>
+<a name="371"><span class="lineNum"> 371 </span> : : </a>
+<a name="372"><span class="lineNum"> 372 </span> : : for (; __cnt &gt; 0; --__cnt)</a>
+<a name="373"><span class="lineNum"> 373 </span> : : {</a>
+<a name="374"><span class="lineNum"> 374 </span> : : int __c = getc_unlocked (__stream);</a>
+<a name="375"><span class="lineNum"> 375 </span> : : if (__c == EOF)</a>
+<a name="376"><span class="lineNum"> 376 </span> : : break;</a>
+<a name="377"><span class="lineNum"> 377 </span> : : *__cptr++ = __c;</a>
+<a name="378"><span class="lineNum"> 378 </span> : : }</a>
+<a name="379"><span class="lineNum"> 379 </span> : : return (__cptr - (char *) __ptr) / __size;</a>
+<a name="380"><span class="lineNum"> 380 </span> : : }</a>
+<a name="381"><span class="lineNum"> 381 </span> : : # endif</a>
+<a name="382"><span class="lineNum"> 382 </span> : : return __fread_unlocked_alias (__ptr, __size, __n, __stream);</a>
+<a name="383"><span class="lineNum"> 383 </span> : : }</a>
+<a name="384"><span class="lineNum"> 384 </span> : : #endif</a>
+<a name="385"><span class="lineNum"> 385 </span> : : </a>
+<a name="386"><span class="lineNum"> 386 </span> : : #endif /* bits/stdio2.h. */</a>
+</pre>
+ </td>
+ </tr>
+ </table>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/string_fortified.h.func-sort-c.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/string_fortified.h.func-sort-c.html
new file mode 100644
index 0000000..59ea73f
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/string_fortified.h.func-sort-c.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/string_fortified.h - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - string_fortified.h<span style="font-size: 80%;"> (<a href="string_fortified.h.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="string_fortified.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/string_fortified.h.func.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/string_fortified.h.func.html
new file mode 100644
index 0000000..3a1f020
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/string_fortified.h.func.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/string_fortified.h - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - string_fortified.h<span style="font-size: 80%;"> (<a href="string_fortified.h.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="string_fortified.h.func-sort-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/string_fortified.h.gcov.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/string_fortified.h.gcov.html
new file mode 100644
index 0000000..e42c7ba
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/string_fortified.h.gcov.html
@@ -0,0 +1,224 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/string_fortified.h</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - string_fortified.h<span style="font-size: 80%;"> (source / <a href="string_fortified.h.func-sort-c.html">functions</a>)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <table cellpadding=0 cellspacing=0 border=0>
+ <tr>
+ <td><br></td>
+ </tr>
+ <tr>
+ <td>
+<pre class="sourceHeading"> Branch data Line data Source code</pre>
+<pre class="source">
+<a name="1"><span class="lineNum"> 1 </span> : : /* Copyright (C) 2004-2020 Free Software Foundation, Inc.</a>
+<a name="2"><span class="lineNum"> 2 </span> : : This file is part of the GNU C Library.</a>
+<a name="3"><span class="lineNum"> 3 </span> : : </a>
+<a name="4"><span class="lineNum"> 4 </span> : : The GNU C Library is free software; you can redistribute it and/or</a>
+<a name="5"><span class="lineNum"> 5 </span> : : modify it under the terms of the GNU Lesser General Public</a>
+<a name="6"><span class="lineNum"> 6 </span> : : License as published by the Free Software Foundation; either</a>
+<a name="7"><span class="lineNum"> 7 </span> : : version 2.1 of the License, or (at your option) any later version.</a>
+<a name="8"><span class="lineNum"> 8 </span> : : </a>
+<a name="9"><span class="lineNum"> 9 </span> : : The GNU C Library is distributed in the hope that it will be useful,</a>
+<a name="10"><span class="lineNum"> 10 </span> : : but WITHOUT ANY WARRANTY; without even the implied warranty of</a>
+<a name="11"><span class="lineNum"> 11 </span> : : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</a>
+<a name="12"><span class="lineNum"> 12 </span> : : Lesser General Public License for more details.</a>
+<a name="13"><span class="lineNum"> 13 </span> : : </a>
+<a name="14"><span class="lineNum"> 14 </span> : : You should have received a copy of the GNU Lesser General Public</a>
+<a name="15"><span class="lineNum"> 15 </span> : : License along with the GNU C Library; if not, see</a>
+<a name="16"><span class="lineNum"> 16 </span> : : &lt;https://www.gnu.org/licenses/&gt;. */</a>
+<a name="17"><span class="lineNum"> 17 </span> : : </a>
+<a name="18"><span class="lineNum"> 18 </span> : : #ifndef _BITS_STRING_FORTIFIED_H</a>
+<a name="19"><span class="lineNum"> 19 </span> : : #define _BITS_STRING_FORTIFIED_H 1</a>
+<a name="20"><span class="lineNum"> 20 </span> : : </a>
+<a name="21"><span class="lineNum"> 21 </span> : : #ifndef _STRING_H</a>
+<a name="22"><span class="lineNum"> 22 </span> : : # error &quot;Never use &lt;bits/string_fortified.h&gt; directly; include &lt;string.h&gt; instead.&quot;</a>
+<a name="23"><span class="lineNum"> 23 </span> : : #endif</a>
+<a name="24"><span class="lineNum"> 24 </span> : : </a>
+<a name="25"><span class="lineNum"> 25 </span> : : #if !__GNUC_PREREQ (5,0)</a>
+<a name="26"><span class="lineNum"> 26 </span> : : __warndecl (__warn_memset_zero_len,</a>
+<a name="27"><span class="lineNum"> 27 </span> : : &quot;memset used with constant zero length parameter; this could be due to transposed parameters&quot;);</a>
+<a name="28"><span class="lineNum"> 28 </span> : : #endif</a>
+<a name="29"><span class="lineNum"> 29 </span> : : </a>
+<a name="30"><span class="lineNum"> 30 </span> : : __fortify_function void *</a>
+<a name="31"><span class="lineNum"> 31 </span> :<span class="lineCov"> 204 : __NTH (memcpy (void *__restrict __dest, const void *__restrict __src,</span></a>
+<a name="32"><span class="lineNum"> 32 </span> : : size_t __len))</a>
+<a name="33"><span class="lineNum"> 33 </span> : : {</a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 204 : return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));</span></a>
+<a name="35"><span class="lineNum"> 35 </span> : : }</a>
+<a name="36"><span class="lineNum"> 36 </span> : : </a>
+<a name="37"><span class="lineNum"> 37 </span> : : __fortify_function void *</a>
+<a name="38"><span class="lineNum"> 38 </span> : : __NTH (memmove (void *__dest, const void *__src, size_t __len))</a>
+<a name="39"><span class="lineNum"> 39 </span> : : {</a>
+<a name="40"><span class="lineNum"> 40 </span> : : return __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest));</a>
+<a name="41"><span class="lineNum"> 41 </span> : : }</a>
+<a name="42"><span class="lineNum"> 42 </span> : : </a>
+<a name="43"><span class="lineNum"> 43 </span> : : #ifdef __USE_GNU</a>
+<a name="44"><span class="lineNum"> 44 </span> : : __fortify_function void *</a>
+<a name="45"><span class="lineNum"> 45 </span> : : __NTH (mempcpy (void *__restrict __dest, const void *__restrict __src,</a>
+<a name="46"><span class="lineNum"> 46 </span> : : size_t __len))</a>
+<a name="47"><span class="lineNum"> 47 </span> : : {</a>
+<a name="48"><span class="lineNum"> 48 </span> : : return __builtin___mempcpy_chk (__dest, __src, __len, __bos0 (__dest));</a>
+<a name="49"><span class="lineNum"> 49 </span> : : }</a>
+<a name="50"><span class="lineNum"> 50 </span> : : #endif</a>
+<a name="51"><span class="lineNum"> 51 </span> : : </a>
+<a name="52"><span class="lineNum"> 52 </span> : : </a>
+<a name="53"><span class="lineNum"> 53 </span> : : /* The first two tests here help to catch a somewhat common problem</a>
+<a name="54"><span class="lineNum"> 54 </span> : : where the second and third parameter are transposed. This is</a>
+<a name="55"><span class="lineNum"> 55 </span> : : especially problematic if the intended fill value is zero. In this</a>
+<a name="56"><span class="lineNum"> 56 </span> : : case no work is done at all. We detect these problems by referring</a>
+<a name="57"><span class="lineNum"> 57 </span> : : non-existing functions. */</a>
+<a name="58"><span class="lineNum"> 58 </span> : : __fortify_function void *</a>
+<a name="59"><span class="lineNum"> 59 </span> :<span class="lineCov"> 6988 : __NTH (memset (void *__dest, int __ch, size_t __len))</span></a>
+<a name="60"><span class="lineNum"> 60 </span> : : {</a>
+<a name="61"><span class="lineNum"> 61 </span> : : /* GCC-5.0 and newer implements these checks in the compiler, so we don't</a>
+<a name="62"><span class="lineNum"> 62 </span> : : need them here. */</a>
+<a name="63"><span class="lineNum"> 63 </span> : : #if !__GNUC_PREREQ (5,0)</a>
+<a name="64"><span class="lineNum"> 64 </span> : : if (__builtin_constant_p (__len) &amp;&amp; __len == 0</a>
+<a name="65"><span class="lineNum"> 65 </span> : : &amp;&amp; (!__builtin_constant_p (__ch) || __ch != 0))</a>
+<a name="66"><span class="lineNum"> 66 </span> : : {</a>
+<a name="67"><span class="lineNum"> 67 </span> : : __warn_memset_zero_len ();</a>
+<a name="68"><span class="lineNum"> 68 </span> : : return __dest;</a>
+<a name="69"><span class="lineNum"> 69 </span> : : }</a>
+<a name="70"><span class="lineNum"> 70 </span> : : #endif</a>
+<a name="71"><span class="lineNum"> 71 </span> :<span class="lineCov"> 6988 : return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));</span></a>
+<a name="72"><span class="lineNum"> 72 </span> : : }</a>
+<a name="73"><span class="lineNum"> 73 </span> : : </a>
+<a name="74"><span class="lineNum"> 74 </span> : : #ifdef __USE_MISC</a>
+<a name="75"><span class="lineNum"> 75 </span> : : # include &lt;bits/strings_fortified.h&gt;</a>
+<a name="76"><span class="lineNum"> 76 </span> : : </a>
+<a name="77"><span class="lineNum"> 77 </span> : : void __explicit_bzero_chk (void *__dest, size_t __len, size_t __destlen)</a>
+<a name="78"><span class="lineNum"> 78 </span> : : __THROW __nonnull ((1));</a>
+<a name="79"><span class="lineNum"> 79 </span> : : </a>
+<a name="80"><span class="lineNum"> 80 </span> : : __fortify_function void</a>
+<a name="81"><span class="lineNum"> 81 </span> : : __NTH (explicit_bzero (void *__dest, size_t __len))</a>
+<a name="82"><span class="lineNum"> 82 </span> : : {</a>
+<a name="83"><span class="lineNum"> 83 </span> : : __explicit_bzero_chk (__dest, __len, __bos0 (__dest));</a>
+<a name="84"><span class="lineNum"> 84 </span> : : }</a>
+<a name="85"><span class="lineNum"> 85 </span> : : #endif</a>
+<a name="86"><span class="lineNum"> 86 </span> : : </a>
+<a name="87"><span class="lineNum"> 87 </span> : : __fortify_function char *</a>
+<a name="88"><span class="lineNum"> 88 </span> : : __NTH (strcpy (char *__restrict __dest, const char *__restrict __src))</a>
+<a name="89"><span class="lineNum"> 89 </span> : : {</a>
+<a name="90"><span class="lineNum"> 90 </span> : : return __builtin___strcpy_chk (__dest, __src, __bos (__dest));</a>
+<a name="91"><span class="lineNum"> 91 </span> : : }</a>
+<a name="92"><span class="lineNum"> 92 </span> : : </a>
+<a name="93"><span class="lineNum"> 93 </span> : : #ifdef __USE_GNU</a>
+<a name="94"><span class="lineNum"> 94 </span> : : __fortify_function char *</a>
+<a name="95"><span class="lineNum"> 95 </span> : : __NTH (stpcpy (char *__restrict __dest, const char *__restrict __src))</a>
+<a name="96"><span class="lineNum"> 96 </span> : : {</a>
+<a name="97"><span class="lineNum"> 97 </span> : : return __builtin___stpcpy_chk (__dest, __src, __bos (__dest));</a>
+<a name="98"><span class="lineNum"> 98 </span> : : }</a>
+<a name="99"><span class="lineNum"> 99 </span> : : #endif</a>
+<a name="100"><span class="lineNum"> 100 </span> : : </a>
+<a name="101"><span class="lineNum"> 101 </span> : : </a>
+<a name="102"><span class="lineNum"> 102 </span> : : __fortify_function char *</a>
+<a name="103"><span class="lineNum"> 103 </span> :<span class="lineCov"> 34 : __NTH (strncpy (char *__restrict __dest, const char *__restrict __src,</span></a>
+<a name="104"><span class="lineNum"> 104 </span> : : size_t __len))</a>
+<a name="105"><span class="lineNum"> 105 </span> : : {</a>
+<a name="106"><span class="lineNum"> 106 </span> :<span class="lineCov"> 34 : return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));</span></a>
+<a name="107"><span class="lineNum"> 107 </span> : : }</a>
+<a name="108"><span class="lineNum"> 108 </span> : : </a>
+<a name="109"><span class="lineNum"> 109 </span> : : /* XXX We have no corresponding builtin yet. */</a>
+<a name="110"><span class="lineNum"> 110 </span> : : extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n,</a>
+<a name="111"><span class="lineNum"> 111 </span> : : size_t __destlen) __THROW;</a>
+<a name="112"><span class="lineNum"> 112 </span> : : extern char *__REDIRECT_NTH (__stpncpy_alias, (char *__dest, const char *__src,</a>
+<a name="113"><span class="lineNum"> 113 </span> : : size_t __n), stpncpy);</a>
+<a name="114"><span class="lineNum"> 114 </span> : : </a>
+<a name="115"><span class="lineNum"> 115 </span> : : __fortify_function char *</a>
+<a name="116"><span class="lineNum"> 116 </span> : : __NTH (stpncpy (char *__dest, const char *__src, size_t __n))</a>
+<a name="117"><span class="lineNum"> 117 </span> : : {</a>
+<a name="118"><span class="lineNum"> 118 </span> : : if (__bos (__dest) != (size_t) -1</a>
+<a name="119"><span class="lineNum"> 119 </span> : : &amp;&amp; (!__builtin_constant_p (__n) || __n &gt; __bos (__dest)))</a>
+<a name="120"><span class="lineNum"> 120 </span> : : return __stpncpy_chk (__dest, __src, __n, __bos (__dest));</a>
+<a name="121"><span class="lineNum"> 121 </span> : : return __stpncpy_alias (__dest, __src, __n);</a>
+<a name="122"><span class="lineNum"> 122 </span> : : }</a>
+<a name="123"><span class="lineNum"> 123 </span> : : </a>
+<a name="124"><span class="lineNum"> 124 </span> : : </a>
+<a name="125"><span class="lineNum"> 125 </span> : : __fortify_function char *</a>
+<a name="126"><span class="lineNum"> 126 </span> : : __NTH (strcat (char *__restrict __dest, const char *__restrict __src))</a>
+<a name="127"><span class="lineNum"> 127 </span> : : {</a>
+<a name="128"><span class="lineNum"> 128 </span> : : return __builtin___strcat_chk (__dest, __src, __bos (__dest));</a>
+<a name="129"><span class="lineNum"> 129 </span> : : }</a>
+<a name="130"><span class="lineNum"> 130 </span> : : </a>
+<a name="131"><span class="lineNum"> 131 </span> : : </a>
+<a name="132"><span class="lineNum"> 132 </span> : : __fortify_function char *</a>
+<a name="133"><span class="lineNum"> 133 </span> : : __NTH (strncat (char *__restrict __dest, const char *__restrict __src,</a>
+<a name="134"><span class="lineNum"> 134 </span> : : size_t __len))</a>
+<a name="135"><span class="lineNum"> 135 </span> : : {</a>
+<a name="136"><span class="lineNum"> 136 </span> : : return __builtin___strncat_chk (__dest, __src, __len, __bos (__dest));</a>
+<a name="137"><span class="lineNum"> 137 </span> : : }</a>
+<a name="138"><span class="lineNum"> 138 </span> : : </a>
+<a name="139"><span class="lineNum"> 139 </span> : : #endif /* bits/string_fortified.h */</a>
+</pre>
+ </td>
+ </tr>
+ </table>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/unistd.h.func-sort-c.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/unistd.h.func-sort-c.html
new file mode 100644
index 0000000..fbee9fb
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/unistd.h.func-sort-c.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/unistd.h - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - unistd.h<span style="font-size: 80%;"> (<a href="unistd.h.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">5</td>
+ <td class="headerCovTableEntry">7</td>
+ <td class="headerCovTableEntryLo">71.4 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="unistd.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/unistd.h.func.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/unistd.h.func.html
new file mode 100644
index 0000000..8b0ba2c
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/unistd.h.func.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/unistd.h - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - unistd.h<span style="font-size: 80%;"> (<a href="unistd.h.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">5</td>
+ <td class="headerCovTableEntry">7</td>
+ <td class="headerCovTableEntryLo">71.4 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="unistd.h.func-sort-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/bits/unistd.h.gcov.html b/coverage-report/usr/include/x86_64-linux-gnu/bits/unistd.h.gcov.html
new file mode 100644
index 0000000..1554b24
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/bits/unistd.h.gcov.html
@@ -0,0 +1,470 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/bits/unistd.h</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/bits</a> - unistd.h<span style="font-size: 80%;"> (source / <a href="unistd.h.func-sort-c.html">functions</a>)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">5</td>
+ <td class="headerCovTableEntry">7</td>
+ <td class="headerCovTableEntryLo">71.4 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <table cellpadding=0 cellspacing=0 border=0>
+ <tr>
+ <td><br></td>
+ </tr>
+ <tr>
+ <td>
+<pre class="sourceHeading"> Branch data Line data Source code</pre>
+<pre class="source">
+<a name="1"><span class="lineNum"> 1 </span> : : /* Checking macros for unistd functions.</a>
+<a name="2"><span class="lineNum"> 2 </span> : : Copyright (C) 2005-2020 Free Software Foundation, Inc.</a>
+<a name="3"><span class="lineNum"> 3 </span> : : This file is part of the GNU C Library.</a>
+<a name="4"><span class="lineNum"> 4 </span> : : </a>
+<a name="5"><span class="lineNum"> 5 </span> : : The GNU C Library is free software; you can redistribute it and/or</a>
+<a name="6"><span class="lineNum"> 6 </span> : : modify it under the terms of the GNU Lesser General Public</a>
+<a name="7"><span class="lineNum"> 7 </span> : : License as published by the Free Software Foundation; either</a>
+<a name="8"><span class="lineNum"> 8 </span> : : version 2.1 of the License, or (at your option) any later version.</a>
+<a name="9"><span class="lineNum"> 9 </span> : : </a>
+<a name="10"><span class="lineNum"> 10 </span> : : The GNU C Library is distributed in the hope that it will be useful,</a>
+<a name="11"><span class="lineNum"> 11 </span> : : but WITHOUT ANY WARRANTY; without even the implied warranty of</a>
+<a name="12"><span class="lineNum"> 12 </span> : : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</a>
+<a name="13"><span class="lineNum"> 13 </span> : : Lesser General Public License for more details.</a>
+<a name="14"><span class="lineNum"> 14 </span> : : </a>
+<a name="15"><span class="lineNum"> 15 </span> : : You should have received a copy of the GNU Lesser General Public</a>
+<a name="16"><span class="lineNum"> 16 </span> : : License along with the GNU C Library; if not, see</a>
+<a name="17"><span class="lineNum"> 17 </span> : : &lt;https://www.gnu.org/licenses/&gt;. */</a>
+<a name="18"><span class="lineNum"> 18 </span> : : </a>
+<a name="19"><span class="lineNum"> 19 </span> : : #ifndef _UNISTD_H</a>
+<a name="20"><span class="lineNum"> 20 </span> : : # error &quot;Never include &lt;bits/unistd.h&gt; directly; use &lt;unistd.h&gt; instead.&quot;</a>
+<a name="21"><span class="lineNum"> 21 </span> : : #endif</a>
+<a name="22"><span class="lineNum"> 22 </span> : : </a>
+<a name="23"><span class="lineNum"> 23 </span> : : extern ssize_t __read_chk (int __fd, void *__buf, size_t __nbytes,</a>
+<a name="24"><span class="lineNum"> 24 </span> : : size_t __buflen) __wur;</a>
+<a name="25"><span class="lineNum"> 25 </span> : : extern ssize_t __REDIRECT (__read_alias, (int __fd, void *__buf,</a>
+<a name="26"><span class="lineNum"> 26 </span> : : size_t __nbytes), read) __wur;</a>
+<a name="27"><span class="lineNum"> 27 </span> : : extern ssize_t __REDIRECT (__read_chk_warn,</a>
+<a name="28"><span class="lineNum"> 28 </span> : : (int __fd, void *__buf, size_t __nbytes,</a>
+<a name="29"><span class="lineNum"> 29 </span> : : size_t __buflen), __read_chk)</a>
+<a name="30"><span class="lineNum"> 30 </span> : : __wur __warnattr (&quot;read called with bigger length than size of &quot;</a>
+<a name="31"><span class="lineNum"> 31 </span> : : &quot;the destination buffer&quot;);</a>
+<a name="32"><span class="lineNum"> 32 </span> : : </a>
+<a name="33"><span class="lineNum"> 33 </span> : : __fortify_function __wur ssize_t</a>
+<a name="34"><span class="lineNum"> 34 </span> :<span class="lineCov"> 246 : read (int __fd, void *__buf, size_t __nbytes)</span></a>
+<a name="35"><span class="lineNum"> 35 </span> : : {</a>
+<a name="36"><span class="lineNum"> 36 </span> :<span class="lineCov"> 246 : if (__bos0 (__buf) != (size_t) -1)</span></a>
+<a name="37"><span class="lineNum"> 37 </span> : : {</a>
+<a name="38"><span class="lineNum"> 38 </span> :<span class="lineCov"> 4 : if (!__builtin_constant_p (__nbytes))</span></a>
+<a name="39"><span class="lineNum"> 39 </span> :<span class="lineNoCov"> 0 : return __read_chk (__fd, __buf, __nbytes, __bos0 (__buf));</span></a>
+<a name="40"><span class="lineNum"> 40 </span> : : </a>
+<a name="41"><span class="lineNum"> 41 </span> :<span class="lineCov"> 4 : if (__nbytes &gt; __bos0 (__buf))</span></a>
+<a name="42"><span class="lineNum"> 42 </span> :<span class="lineNoCov"> 0 : return __read_chk_warn (__fd, __buf, __nbytes, __bos0 (__buf));</span></a>
+<a name="43"><span class="lineNum"> 43 </span> : : }</a>
+<a name="44"><span class="lineNum"> 44 </span> :<span class="lineCov"> 246 : return __read_alias (__fd, __buf, __nbytes);</span></a>
+<a name="45"><span class="lineNum"> 45 </span> : : }</a>
+<a name="46"><span class="lineNum"> 46 </span> : : </a>
+<a name="47"><span class="lineNum"> 47 </span> : : #ifdef __USE_UNIX98</a>
+<a name="48"><span class="lineNum"> 48 </span> : : extern ssize_t __pread_chk (int __fd, void *__buf, size_t __nbytes,</a>
+<a name="49"><span class="lineNum"> 49 </span> : : __off_t __offset, size_t __bufsize) __wur;</a>
+<a name="50"><span class="lineNum"> 50 </span> : : extern ssize_t __pread64_chk (int __fd, void *__buf, size_t __nbytes,</a>
+<a name="51"><span class="lineNum"> 51 </span> : : __off64_t __offset, size_t __bufsize) __wur;</a>
+<a name="52"><span class="lineNum"> 52 </span> : : extern ssize_t __REDIRECT (__pread_alias,</a>
+<a name="53"><span class="lineNum"> 53 </span> : : (int __fd, void *__buf, size_t __nbytes,</a>
+<a name="54"><span class="lineNum"> 54 </span> : : __off_t __offset), pread) __wur;</a>
+<a name="55"><span class="lineNum"> 55 </span> : : extern ssize_t __REDIRECT (__pread64_alias,</a>
+<a name="56"><span class="lineNum"> 56 </span> : : (int __fd, void *__buf, size_t __nbytes,</a>
+<a name="57"><span class="lineNum"> 57 </span> : : __off64_t __offset), pread64) __wur;</a>
+<a name="58"><span class="lineNum"> 58 </span> : : extern ssize_t __REDIRECT (__pread_chk_warn,</a>
+<a name="59"><span class="lineNum"> 59 </span> : : (int __fd, void *__buf, size_t __nbytes,</a>
+<a name="60"><span class="lineNum"> 60 </span> : : __off_t __offset, size_t __bufsize), __pread_chk)</a>
+<a name="61"><span class="lineNum"> 61 </span> : : __wur __warnattr (&quot;pread called with bigger length than size of &quot;</a>
+<a name="62"><span class="lineNum"> 62 </span> : : &quot;the destination buffer&quot;);</a>
+<a name="63"><span class="lineNum"> 63 </span> : : extern ssize_t __REDIRECT (__pread64_chk_warn,</a>
+<a name="64"><span class="lineNum"> 64 </span> : : (int __fd, void *__buf, size_t __nbytes,</a>
+<a name="65"><span class="lineNum"> 65 </span> : : __off64_t __offset, size_t __bufsize),</a>
+<a name="66"><span class="lineNum"> 66 </span> : : __pread64_chk)</a>
+<a name="67"><span class="lineNum"> 67 </span> : : __wur __warnattr (&quot;pread64 called with bigger length than size of &quot;</a>
+<a name="68"><span class="lineNum"> 68 </span> : : &quot;the destination buffer&quot;);</a>
+<a name="69"><span class="lineNum"> 69 </span> : : </a>
+<a name="70"><span class="lineNum"> 70 </span> : : # ifndef __USE_FILE_OFFSET64</a>
+<a name="71"><span class="lineNum"> 71 </span> : : __fortify_function __wur ssize_t</a>
+<a name="72"><span class="lineNum"> 72 </span> : : pread (int __fd, void *__buf, size_t __nbytes, __off_t __offset)</a>
+<a name="73"><span class="lineNum"> 73 </span> : : {</a>
+<a name="74"><span class="lineNum"> 74 </span> : : if (__bos0 (__buf) != (size_t) -1)</a>
+<a name="75"><span class="lineNum"> 75 </span> : : {</a>
+<a name="76"><span class="lineNum"> 76 </span> : : if (!__builtin_constant_p (__nbytes))</a>
+<a name="77"><span class="lineNum"> 77 </span> : : return __pread_chk (__fd, __buf, __nbytes, __offset, __bos0 (__buf));</a>
+<a name="78"><span class="lineNum"> 78 </span> : : </a>
+<a name="79"><span class="lineNum"> 79 </span> : : if ( __nbytes &gt; __bos0 (__buf))</a>
+<a name="80"><span class="lineNum"> 80 </span> : : return __pread_chk_warn (__fd, __buf, __nbytes, __offset,</a>
+<a name="81"><span class="lineNum"> 81 </span> : : __bos0 (__buf));</a>
+<a name="82"><span class="lineNum"> 82 </span> : : }</a>
+<a name="83"><span class="lineNum"> 83 </span> : : return __pread_alias (__fd, __buf, __nbytes, __offset);</a>
+<a name="84"><span class="lineNum"> 84 </span> : : }</a>
+<a name="85"><span class="lineNum"> 85 </span> : : # else</a>
+<a name="86"><span class="lineNum"> 86 </span> : : __fortify_function __wur ssize_t</a>
+<a name="87"><span class="lineNum"> 87 </span> : : pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset)</a>
+<a name="88"><span class="lineNum"> 88 </span> : : {</a>
+<a name="89"><span class="lineNum"> 89 </span> : : if (__bos0 (__buf) != (size_t) -1)</a>
+<a name="90"><span class="lineNum"> 90 </span> : : {</a>
+<a name="91"><span class="lineNum"> 91 </span> : : if (!__builtin_constant_p (__nbytes))</a>
+<a name="92"><span class="lineNum"> 92 </span> : : return __pread64_chk (__fd, __buf, __nbytes, __offset, __bos0 (__buf));</a>
+<a name="93"><span class="lineNum"> 93 </span> : : </a>
+<a name="94"><span class="lineNum"> 94 </span> : : if ( __nbytes &gt; __bos0 (__buf))</a>
+<a name="95"><span class="lineNum"> 95 </span> : : return __pread64_chk_warn (__fd, __buf, __nbytes, __offset,</a>
+<a name="96"><span class="lineNum"> 96 </span> : : __bos0 (__buf));</a>
+<a name="97"><span class="lineNum"> 97 </span> : : }</a>
+<a name="98"><span class="lineNum"> 98 </span> : : </a>
+<a name="99"><span class="lineNum"> 99 </span> : : return __pread64_alias (__fd, __buf, __nbytes, __offset);</a>
+<a name="100"><span class="lineNum"> 100 </span> : : }</a>
+<a name="101"><span class="lineNum"> 101 </span> : : # endif</a>
+<a name="102"><span class="lineNum"> 102 </span> : : </a>
+<a name="103"><span class="lineNum"> 103 </span> : : # ifdef __USE_LARGEFILE64</a>
+<a name="104"><span class="lineNum"> 104 </span> : : __fortify_function __wur ssize_t</a>
+<a name="105"><span class="lineNum"> 105 </span> : : pread64 (int __fd, void *__buf, size_t __nbytes, __off64_t __offset)</a>
+<a name="106"><span class="lineNum"> 106 </span> : : {</a>
+<a name="107"><span class="lineNum"> 107 </span> : : if (__bos0 (__buf) != (size_t) -1)</a>
+<a name="108"><span class="lineNum"> 108 </span> : : {</a>
+<a name="109"><span class="lineNum"> 109 </span> : : if (!__builtin_constant_p (__nbytes))</a>
+<a name="110"><span class="lineNum"> 110 </span> : : return __pread64_chk (__fd, __buf, __nbytes, __offset, __bos0 (__buf));</a>
+<a name="111"><span class="lineNum"> 111 </span> : : </a>
+<a name="112"><span class="lineNum"> 112 </span> : : if ( __nbytes &gt; __bos0 (__buf))</a>
+<a name="113"><span class="lineNum"> 113 </span> : : return __pread64_chk_warn (__fd, __buf, __nbytes, __offset,</a>
+<a name="114"><span class="lineNum"> 114 </span> : : __bos0 (__buf));</a>
+<a name="115"><span class="lineNum"> 115 </span> : : }</a>
+<a name="116"><span class="lineNum"> 116 </span> : : </a>
+<a name="117"><span class="lineNum"> 117 </span> : : return __pread64_alias (__fd, __buf, __nbytes, __offset);</a>
+<a name="118"><span class="lineNum"> 118 </span> : : }</a>
+<a name="119"><span class="lineNum"> 119 </span> : : # endif</a>
+<a name="120"><span class="lineNum"> 120 </span> : : #endif</a>
+<a name="121"><span class="lineNum"> 121 </span> : : </a>
+<a name="122"><span class="lineNum"> 122 </span> : : #if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K</a>
+<a name="123"><span class="lineNum"> 123 </span> : : extern ssize_t __readlink_chk (const char *__restrict __path,</a>
+<a name="124"><span class="lineNum"> 124 </span> : : char *__restrict __buf, size_t __len,</a>
+<a name="125"><span class="lineNum"> 125 </span> : : size_t __buflen)</a>
+<a name="126"><span class="lineNum"> 126 </span> : : __THROW __nonnull ((1, 2)) __wur;</a>
+<a name="127"><span class="lineNum"> 127 </span> : : extern ssize_t __REDIRECT_NTH (__readlink_alias,</a>
+<a name="128"><span class="lineNum"> 128 </span> : : (const char *__restrict __path,</a>
+<a name="129"><span class="lineNum"> 129 </span> : : char *__restrict __buf, size_t __len), readlink)</a>
+<a name="130"><span class="lineNum"> 130 </span> : : __nonnull ((1, 2)) __wur;</a>
+<a name="131"><span class="lineNum"> 131 </span> : : extern ssize_t __REDIRECT_NTH (__readlink_chk_warn,</a>
+<a name="132"><span class="lineNum"> 132 </span> : : (const char *__restrict __path,</a>
+<a name="133"><span class="lineNum"> 133 </span> : : char *__restrict __buf, size_t __len,</a>
+<a name="134"><span class="lineNum"> 134 </span> : : size_t __buflen), __readlink_chk)</a>
+<a name="135"><span class="lineNum"> 135 </span> : : __nonnull ((1, 2)) __wur __warnattr (&quot;readlink called with bigger length &quot;</a>
+<a name="136"><span class="lineNum"> 136 </span> : : &quot;than size of destination buffer&quot;);</a>
+<a name="137"><span class="lineNum"> 137 </span> : : </a>
+<a name="138"><span class="lineNum"> 138 </span> : : __fortify_function __nonnull ((1, 2)) __wur ssize_t</a>
+<a name="139"><span class="lineNum"> 139 </span> : : __NTH (readlink (const char *__restrict __path, char *__restrict __buf,</a>
+<a name="140"><span class="lineNum"> 140 </span> : : size_t __len))</a>
+<a name="141"><span class="lineNum"> 141 </span> : : {</a>
+<a name="142"><span class="lineNum"> 142 </span> : : if (__bos (__buf) != (size_t) -1)</a>
+<a name="143"><span class="lineNum"> 143 </span> : : {</a>
+<a name="144"><span class="lineNum"> 144 </span> : : if (!__builtin_constant_p (__len))</a>
+<a name="145"><span class="lineNum"> 145 </span> : : return __readlink_chk (__path, __buf, __len, __bos (__buf));</a>
+<a name="146"><span class="lineNum"> 146 </span> : : </a>
+<a name="147"><span class="lineNum"> 147 </span> : : if ( __len &gt; __bos (__buf))</a>
+<a name="148"><span class="lineNum"> 148 </span> : : return __readlink_chk_warn (__path, __buf, __len, __bos (__buf));</a>
+<a name="149"><span class="lineNum"> 149 </span> : : }</a>
+<a name="150"><span class="lineNum"> 150 </span> : : return __readlink_alias (__path, __buf, __len);</a>
+<a name="151"><span class="lineNum"> 151 </span> : : }</a>
+<a name="152"><span class="lineNum"> 152 </span> : : #endif</a>
+<a name="153"><span class="lineNum"> 153 </span> : : </a>
+<a name="154"><span class="lineNum"> 154 </span> : : #ifdef __USE_ATFILE</a>
+<a name="155"><span class="lineNum"> 155 </span> : : extern ssize_t __readlinkat_chk (int __fd, const char *__restrict __path,</a>
+<a name="156"><span class="lineNum"> 156 </span> : : char *__restrict __buf, size_t __len,</a>
+<a name="157"><span class="lineNum"> 157 </span> : : size_t __buflen)</a>
+<a name="158"><span class="lineNum"> 158 </span> : : __THROW __nonnull ((2, 3)) __wur;</a>
+<a name="159"><span class="lineNum"> 159 </span> : : extern ssize_t __REDIRECT_NTH (__readlinkat_alias,</a>
+<a name="160"><span class="lineNum"> 160 </span> : : (int __fd, const char *__restrict __path,</a>
+<a name="161"><span class="lineNum"> 161 </span> : : char *__restrict __buf, size_t __len),</a>
+<a name="162"><span class="lineNum"> 162 </span> : : readlinkat)</a>
+<a name="163"><span class="lineNum"> 163 </span> : : __nonnull ((2, 3)) __wur;</a>
+<a name="164"><span class="lineNum"> 164 </span> : : extern ssize_t __REDIRECT_NTH (__readlinkat_chk_warn,</a>
+<a name="165"><span class="lineNum"> 165 </span> : : (int __fd, const char *__restrict __path,</a>
+<a name="166"><span class="lineNum"> 166 </span> : : char *__restrict __buf, size_t __len,</a>
+<a name="167"><span class="lineNum"> 167 </span> : : size_t __buflen), __readlinkat_chk)</a>
+<a name="168"><span class="lineNum"> 168 </span> : : __nonnull ((2, 3)) __wur __warnattr (&quot;readlinkat called with bigger &quot;</a>
+<a name="169"><span class="lineNum"> 169 </span> : : &quot;length than size of destination &quot;</a>
+<a name="170"><span class="lineNum"> 170 </span> : : &quot;buffer&quot;);</a>
+<a name="171"><span class="lineNum"> 171 </span> : : </a>
+<a name="172"><span class="lineNum"> 172 </span> : : __fortify_function __nonnull ((2, 3)) __wur ssize_t</a>
+<a name="173"><span class="lineNum"> 173 </span> : : __NTH (readlinkat (int __fd, const char *__restrict __path,</a>
+<a name="174"><span class="lineNum"> 174 </span> : : char *__restrict __buf, size_t __len))</a>
+<a name="175"><span class="lineNum"> 175 </span> : : {</a>
+<a name="176"><span class="lineNum"> 176 </span> : : if (__bos (__buf) != (size_t) -1)</a>
+<a name="177"><span class="lineNum"> 177 </span> : : {</a>
+<a name="178"><span class="lineNum"> 178 </span> : : if (!__builtin_constant_p (__len))</a>
+<a name="179"><span class="lineNum"> 179 </span> : : return __readlinkat_chk (__fd, __path, __buf, __len, __bos (__buf));</a>
+<a name="180"><span class="lineNum"> 180 </span> : : </a>
+<a name="181"><span class="lineNum"> 181 </span> : : if (__len &gt; __bos (__buf))</a>
+<a name="182"><span class="lineNum"> 182 </span> : : return __readlinkat_chk_warn (__fd, __path, __buf, __len,</a>
+<a name="183"><span class="lineNum"> 183 </span> : : __bos (__buf));</a>
+<a name="184"><span class="lineNum"> 184 </span> : : }</a>
+<a name="185"><span class="lineNum"> 185 </span> : : return __readlinkat_alias (__fd, __path, __buf, __len);</a>
+<a name="186"><span class="lineNum"> 186 </span> : : }</a>
+<a name="187"><span class="lineNum"> 187 </span> : : #endif</a>
+<a name="188"><span class="lineNum"> 188 </span> : : </a>
+<a name="189"><span class="lineNum"> 189 </span> : : extern char *__getcwd_chk (char *__buf, size_t __size, size_t __buflen)</a>
+<a name="190"><span class="lineNum"> 190 </span> : : __THROW __wur;</a>
+<a name="191"><span class="lineNum"> 191 </span> : : extern char *__REDIRECT_NTH (__getcwd_alias,</a>
+<a name="192"><span class="lineNum"> 192 </span> : : (char *__buf, size_t __size), getcwd) __wur;</a>
+<a name="193"><span class="lineNum"> 193 </span> : : extern char *__REDIRECT_NTH (__getcwd_chk_warn,</a>
+<a name="194"><span class="lineNum"> 194 </span> : : (char *__buf, size_t __size, size_t __buflen),</a>
+<a name="195"><span class="lineNum"> 195 </span> : : __getcwd_chk)</a>
+<a name="196"><span class="lineNum"> 196 </span> : : __wur __warnattr (&quot;getcwd caller with bigger length than size of &quot;</a>
+<a name="197"><span class="lineNum"> 197 </span> : : &quot;destination buffer&quot;);</a>
+<a name="198"><span class="lineNum"> 198 </span> : : </a>
+<a name="199"><span class="lineNum"> 199 </span> : : __fortify_function __wur char *</a>
+<a name="200"><span class="lineNum"> 200 </span> : : __NTH (getcwd (char *__buf, size_t __size))</a>
+<a name="201"><span class="lineNum"> 201 </span> : : {</a>
+<a name="202"><span class="lineNum"> 202 </span> : : if (__bos (__buf) != (size_t) -1)</a>
+<a name="203"><span class="lineNum"> 203 </span> : : {</a>
+<a name="204"><span class="lineNum"> 204 </span> : : if (!__builtin_constant_p (__size))</a>
+<a name="205"><span class="lineNum"> 205 </span> : : return __getcwd_chk (__buf, __size, __bos (__buf));</a>
+<a name="206"><span class="lineNum"> 206 </span> : : </a>
+<a name="207"><span class="lineNum"> 207 </span> : : if (__size &gt; __bos (__buf))</a>
+<a name="208"><span class="lineNum"> 208 </span> : : return __getcwd_chk_warn (__buf, __size, __bos (__buf));</a>
+<a name="209"><span class="lineNum"> 209 </span> : : }</a>
+<a name="210"><span class="lineNum"> 210 </span> : : return __getcwd_alias (__buf, __size);</a>
+<a name="211"><span class="lineNum"> 211 </span> : : }</a>
+<a name="212"><span class="lineNum"> 212 </span> : : </a>
+<a name="213"><span class="lineNum"> 213 </span> : : #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED</a>
+<a name="214"><span class="lineNum"> 214 </span> : : extern char *__getwd_chk (char *__buf, size_t buflen)</a>
+<a name="215"><span class="lineNum"> 215 </span> : : __THROW __nonnull ((1)) __wur;</a>
+<a name="216"><span class="lineNum"> 216 </span> : : extern char *__REDIRECT_NTH (__getwd_warn, (char *__buf), getwd)</a>
+<a name="217"><span class="lineNum"> 217 </span> : : __nonnull ((1)) __wur __warnattr (&quot;please use getcwd instead, as getwd &quot;</a>
+<a name="218"><span class="lineNum"> 218 </span> : : &quot;doesn't specify buffer size&quot;);</a>
+<a name="219"><span class="lineNum"> 219 </span> : : </a>
+<a name="220"><span class="lineNum"> 220 </span> : : __fortify_function __nonnull ((1)) __attribute_deprecated__ __wur char *</a>
+<a name="221"><span class="lineNum"> 221 </span> : : __NTH (getwd (char *__buf))</a>
+<a name="222"><span class="lineNum"> 222 </span> : : {</a>
+<a name="223"><span class="lineNum"> 223 </span> : : if (__bos (__buf) != (size_t) -1)</a>
+<a name="224"><span class="lineNum"> 224 </span> : : return __getwd_chk (__buf, __bos (__buf));</a>
+<a name="225"><span class="lineNum"> 225 </span> : : return __getwd_warn (__buf);</a>
+<a name="226"><span class="lineNum"> 226 </span> : : }</a>
+<a name="227"><span class="lineNum"> 227 </span> : : #endif</a>
+<a name="228"><span class="lineNum"> 228 </span> : : </a>
+<a name="229"><span class="lineNum"> 229 </span> : : extern size_t __confstr_chk (int __name, char *__buf, size_t __len,</a>
+<a name="230"><span class="lineNum"> 230 </span> : : size_t __buflen) __THROW;</a>
+<a name="231"><span class="lineNum"> 231 </span> : : extern size_t __REDIRECT_NTH (__confstr_alias, (int __name, char *__buf,</a>
+<a name="232"><span class="lineNum"> 232 </span> : : size_t __len), confstr);</a>
+<a name="233"><span class="lineNum"> 233 </span> : : extern size_t __REDIRECT_NTH (__confstr_chk_warn,</a>
+<a name="234"><span class="lineNum"> 234 </span> : : (int __name, char *__buf, size_t __len,</a>
+<a name="235"><span class="lineNum"> 235 </span> : : size_t __buflen), __confstr_chk)</a>
+<a name="236"><span class="lineNum"> 236 </span> : : __warnattr (&quot;confstr called with bigger length than size of destination &quot;</a>
+<a name="237"><span class="lineNum"> 237 </span> : : &quot;buffer&quot;);</a>
+<a name="238"><span class="lineNum"> 238 </span> : : </a>
+<a name="239"><span class="lineNum"> 239 </span> : : __fortify_function size_t</a>
+<a name="240"><span class="lineNum"> 240 </span> : : __NTH (confstr (int __name, char *__buf, size_t __len))</a>
+<a name="241"><span class="lineNum"> 241 </span> : : {</a>
+<a name="242"><span class="lineNum"> 242 </span> : : if (__bos (__buf) != (size_t) -1)</a>
+<a name="243"><span class="lineNum"> 243 </span> : : {</a>
+<a name="244"><span class="lineNum"> 244 </span> : : if (!__builtin_constant_p (__len))</a>
+<a name="245"><span class="lineNum"> 245 </span> : : return __confstr_chk (__name, __buf, __len, __bos (__buf));</a>
+<a name="246"><span class="lineNum"> 246 </span> : : </a>
+<a name="247"><span class="lineNum"> 247 </span> : : if (__bos (__buf) &lt; __len)</a>
+<a name="248"><span class="lineNum"> 248 </span> : : return __confstr_chk_warn (__name, __buf, __len, __bos (__buf));</a>
+<a name="249"><span class="lineNum"> 249 </span> : : }</a>
+<a name="250"><span class="lineNum"> 250 </span> : : return __confstr_alias (__name, __buf, __len);</a>
+<a name="251"><span class="lineNum"> 251 </span> : : }</a>
+<a name="252"><span class="lineNum"> 252 </span> : : </a>
+<a name="253"><span class="lineNum"> 253 </span> : : </a>
+<a name="254"><span class="lineNum"> 254 </span> : : extern int __getgroups_chk (int __size, __gid_t __list[], size_t __listlen)</a>
+<a name="255"><span class="lineNum"> 255 </span> : : __THROW __wur;</a>
+<a name="256"><span class="lineNum"> 256 </span> : : extern int __REDIRECT_NTH (__getgroups_alias, (int __size, __gid_t __list[]),</a>
+<a name="257"><span class="lineNum"> 257 </span> : : getgroups) __wur;</a>
+<a name="258"><span class="lineNum"> 258 </span> : : extern int __REDIRECT_NTH (__getgroups_chk_warn,</a>
+<a name="259"><span class="lineNum"> 259 </span> : : (int __size, __gid_t __list[], size_t __listlen),</a>
+<a name="260"><span class="lineNum"> 260 </span> : : __getgroups_chk)</a>
+<a name="261"><span class="lineNum"> 261 </span> : : __wur __warnattr (&quot;getgroups called with bigger group count than what &quot;</a>
+<a name="262"><span class="lineNum"> 262 </span> : : &quot;can fit into destination buffer&quot;);</a>
+<a name="263"><span class="lineNum"> 263 </span> : : </a>
+<a name="264"><span class="lineNum"> 264 </span> : : __fortify_function int</a>
+<a name="265"><span class="lineNum"> 265 </span> : : __NTH (getgroups (int __size, __gid_t __list[]))</a>
+<a name="266"><span class="lineNum"> 266 </span> : : {</a>
+<a name="267"><span class="lineNum"> 267 </span> : : if (__bos (__list) != (size_t) -1)</a>
+<a name="268"><span class="lineNum"> 268 </span> : : {</a>
+<a name="269"><span class="lineNum"> 269 </span> : : if (!__builtin_constant_p (__size) || __size &lt; 0)</a>
+<a name="270"><span class="lineNum"> 270 </span> : : return __getgroups_chk (__size, __list, __bos (__list));</a>
+<a name="271"><span class="lineNum"> 271 </span> : : </a>
+<a name="272"><span class="lineNum"> 272 </span> : : if (__size * sizeof (__gid_t) &gt; __bos (__list))</a>
+<a name="273"><span class="lineNum"> 273 </span> : : return __getgroups_chk_warn (__size, __list, __bos (__list));</a>
+<a name="274"><span class="lineNum"> 274 </span> : : }</a>
+<a name="275"><span class="lineNum"> 275 </span> : : return __getgroups_alias (__size, __list);</a>
+<a name="276"><span class="lineNum"> 276 </span> : : }</a>
+<a name="277"><span class="lineNum"> 277 </span> : : </a>
+<a name="278"><span class="lineNum"> 278 </span> : : </a>
+<a name="279"><span class="lineNum"> 279 </span> : : extern int __ttyname_r_chk (int __fd, char *__buf, size_t __buflen,</a>
+<a name="280"><span class="lineNum"> 280 </span> : : size_t __nreal) __THROW __nonnull ((2));</a>
+<a name="281"><span class="lineNum"> 281 </span> : : extern int __REDIRECT_NTH (__ttyname_r_alias, (int __fd, char *__buf,</a>
+<a name="282"><span class="lineNum"> 282 </span> : : size_t __buflen), ttyname_r)</a>
+<a name="283"><span class="lineNum"> 283 </span> : : __nonnull ((2));</a>
+<a name="284"><span class="lineNum"> 284 </span> : : extern int __REDIRECT_NTH (__ttyname_r_chk_warn,</a>
+<a name="285"><span class="lineNum"> 285 </span> : : (int __fd, char *__buf, size_t __buflen,</a>
+<a name="286"><span class="lineNum"> 286 </span> : : size_t __nreal), __ttyname_r_chk)</a>
+<a name="287"><span class="lineNum"> 287 </span> : : __nonnull ((2)) __warnattr (&quot;ttyname_r called with bigger buflen than &quot;</a>
+<a name="288"><span class="lineNum"> 288 </span> : : &quot;size of destination buffer&quot;);</a>
+<a name="289"><span class="lineNum"> 289 </span> : : </a>
+<a name="290"><span class="lineNum"> 290 </span> : : __fortify_function int</a>
+<a name="291"><span class="lineNum"> 291 </span> : : __NTH (ttyname_r (int __fd, char *__buf, size_t __buflen))</a>
+<a name="292"><span class="lineNum"> 292 </span> : : {</a>
+<a name="293"><span class="lineNum"> 293 </span> : : if (__bos (__buf) != (size_t) -1)</a>
+<a name="294"><span class="lineNum"> 294 </span> : : {</a>
+<a name="295"><span class="lineNum"> 295 </span> : : if (!__builtin_constant_p (__buflen))</a>
+<a name="296"><span class="lineNum"> 296 </span> : : return __ttyname_r_chk (__fd, __buf, __buflen, __bos (__buf));</a>
+<a name="297"><span class="lineNum"> 297 </span> : : </a>
+<a name="298"><span class="lineNum"> 298 </span> : : if (__buflen &gt; __bos (__buf))</a>
+<a name="299"><span class="lineNum"> 299 </span> : : return __ttyname_r_chk_warn (__fd, __buf, __buflen, __bos (__buf));</a>
+<a name="300"><span class="lineNum"> 300 </span> : : }</a>
+<a name="301"><span class="lineNum"> 301 </span> : : return __ttyname_r_alias (__fd, __buf, __buflen);</a>
+<a name="302"><span class="lineNum"> 302 </span> : : }</a>
+<a name="303"><span class="lineNum"> 303 </span> : : </a>
+<a name="304"><span class="lineNum"> 304 </span> : : </a>
+<a name="305"><span class="lineNum"> 305 </span> : : #ifdef __USE_POSIX199506</a>
+<a name="306"><span class="lineNum"> 306 </span> : : extern int __getlogin_r_chk (char *__buf, size_t __buflen, size_t __nreal)</a>
+<a name="307"><span class="lineNum"> 307 </span> : : __nonnull ((1));</a>
+<a name="308"><span class="lineNum"> 308 </span> : : extern int __REDIRECT (__getlogin_r_alias, (char *__buf, size_t __buflen),</a>
+<a name="309"><span class="lineNum"> 309 </span> : : getlogin_r) __nonnull ((1));</a>
+<a name="310"><span class="lineNum"> 310 </span> : : extern int __REDIRECT (__getlogin_r_chk_warn,</a>
+<a name="311"><span class="lineNum"> 311 </span> : : (char *__buf, size_t __buflen, size_t __nreal),</a>
+<a name="312"><span class="lineNum"> 312 </span> : : __getlogin_r_chk)</a>
+<a name="313"><span class="lineNum"> 313 </span> : : __nonnull ((1)) __warnattr (&quot;getlogin_r called with bigger buflen than &quot;</a>
+<a name="314"><span class="lineNum"> 314 </span> : : &quot;size of destination buffer&quot;);</a>
+<a name="315"><span class="lineNum"> 315 </span> : : </a>
+<a name="316"><span class="lineNum"> 316 </span> : : __fortify_function int</a>
+<a name="317"><span class="lineNum"> 317 </span> : : getlogin_r (char *__buf, size_t __buflen)</a>
+<a name="318"><span class="lineNum"> 318 </span> : : {</a>
+<a name="319"><span class="lineNum"> 319 </span> : : if (__bos (__buf) != (size_t) -1)</a>
+<a name="320"><span class="lineNum"> 320 </span> : : {</a>
+<a name="321"><span class="lineNum"> 321 </span> : : if (!__builtin_constant_p (__buflen))</a>
+<a name="322"><span class="lineNum"> 322 </span> : : return __getlogin_r_chk (__buf, __buflen, __bos (__buf));</a>
+<a name="323"><span class="lineNum"> 323 </span> : : </a>
+<a name="324"><span class="lineNum"> 324 </span> : : if (__buflen &gt; __bos (__buf))</a>
+<a name="325"><span class="lineNum"> 325 </span> : : return __getlogin_r_chk_warn (__buf, __buflen, __bos (__buf));</a>
+<a name="326"><span class="lineNum"> 326 </span> : : }</a>
+<a name="327"><span class="lineNum"> 327 </span> : : return __getlogin_r_alias (__buf, __buflen);</a>
+<a name="328"><span class="lineNum"> 328 </span> : : }</a>
+<a name="329"><span class="lineNum"> 329 </span> : : #endif</a>
+<a name="330"><span class="lineNum"> 330 </span> : : </a>
+<a name="331"><span class="lineNum"> 331 </span> : : </a>
+<a name="332"><span class="lineNum"> 332 </span> : : #if defined __USE_MISC || defined __USE_UNIX98</a>
+<a name="333"><span class="lineNum"> 333 </span> : : extern int __gethostname_chk (char *__buf, size_t __buflen, size_t __nreal)</a>
+<a name="334"><span class="lineNum"> 334 </span> : : __THROW __nonnull ((1));</a>
+<a name="335"><span class="lineNum"> 335 </span> : : extern int __REDIRECT_NTH (__gethostname_alias, (char *__buf, size_t __buflen),</a>
+<a name="336"><span class="lineNum"> 336 </span> : : gethostname) __nonnull ((1));</a>
+<a name="337"><span class="lineNum"> 337 </span> : : extern int __REDIRECT_NTH (__gethostname_chk_warn,</a>
+<a name="338"><span class="lineNum"> 338 </span> : : (char *__buf, size_t __buflen, size_t __nreal),</a>
+<a name="339"><span class="lineNum"> 339 </span> : : __gethostname_chk)</a>
+<a name="340"><span class="lineNum"> 340 </span> : : __nonnull ((1)) __warnattr (&quot;gethostname called with bigger buflen than &quot;</a>
+<a name="341"><span class="lineNum"> 341 </span> : : &quot;size of destination buffer&quot;);</a>
+<a name="342"><span class="lineNum"> 342 </span> : : </a>
+<a name="343"><span class="lineNum"> 343 </span> : : __fortify_function int</a>
+<a name="344"><span class="lineNum"> 344 </span> : : __NTH (gethostname (char *__buf, size_t __buflen))</a>
+<a name="345"><span class="lineNum"> 345 </span> : : {</a>
+<a name="346"><span class="lineNum"> 346 </span> : : if (__bos (__buf) != (size_t) -1)</a>
+<a name="347"><span class="lineNum"> 347 </span> : : {</a>
+<a name="348"><span class="lineNum"> 348 </span> : : if (!__builtin_constant_p (__buflen))</a>
+<a name="349"><span class="lineNum"> 349 </span> : : return __gethostname_chk (__buf, __buflen, __bos (__buf));</a>
+<a name="350"><span class="lineNum"> 350 </span> : : </a>
+<a name="351"><span class="lineNum"> 351 </span> : : if (__buflen &gt; __bos (__buf))</a>
+<a name="352"><span class="lineNum"> 352 </span> : : return __gethostname_chk_warn (__buf, __buflen, __bos (__buf));</a>
+<a name="353"><span class="lineNum"> 353 </span> : : }</a>
+<a name="354"><span class="lineNum"> 354 </span> : : return __gethostname_alias (__buf, __buflen);</a>
+<a name="355"><span class="lineNum"> 355 </span> : : }</a>
+<a name="356"><span class="lineNum"> 356 </span> : : #endif</a>
+<a name="357"><span class="lineNum"> 357 </span> : : </a>
+<a name="358"><span class="lineNum"> 358 </span> : : </a>
+<a name="359"><span class="lineNum"> 359 </span> : : #if defined __USE_MISC || (defined __USE_XOPEN &amp;&amp; !defined __USE_UNIX98)</a>
+<a name="360"><span class="lineNum"> 360 </span> : : extern int __getdomainname_chk (char *__buf, size_t __buflen, size_t __nreal)</a>
+<a name="361"><span class="lineNum"> 361 </span> : : __THROW __nonnull ((1)) __wur;</a>
+<a name="362"><span class="lineNum"> 362 </span> : : extern int __REDIRECT_NTH (__getdomainname_alias, (char *__buf,</a>
+<a name="363"><span class="lineNum"> 363 </span> : : size_t __buflen),</a>
+<a name="364"><span class="lineNum"> 364 </span> : : getdomainname) __nonnull ((1)) __wur;</a>
+<a name="365"><span class="lineNum"> 365 </span> : : extern int __REDIRECT_NTH (__getdomainname_chk_warn,</a>
+<a name="366"><span class="lineNum"> 366 </span> : : (char *__buf, size_t __buflen, size_t __nreal),</a>
+<a name="367"><span class="lineNum"> 367 </span> : : __getdomainname_chk)</a>
+<a name="368"><span class="lineNum"> 368 </span> : : __nonnull ((1)) __wur __warnattr (&quot;getdomainname called with bigger &quot;</a>
+<a name="369"><span class="lineNum"> 369 </span> : : &quot;buflen than size of destination &quot;</a>
+<a name="370"><span class="lineNum"> 370 </span> : : &quot;buffer&quot;);</a>
+<a name="371"><span class="lineNum"> 371 </span> : : </a>
+<a name="372"><span class="lineNum"> 372 </span> : : __fortify_function int</a>
+<a name="373"><span class="lineNum"> 373 </span> : : __NTH (getdomainname (char *__buf, size_t __buflen))</a>
+<a name="374"><span class="lineNum"> 374 </span> : : {</a>
+<a name="375"><span class="lineNum"> 375 </span> : : if (__bos (__buf) != (size_t) -1)</a>
+<a name="376"><span class="lineNum"> 376 </span> : : {</a>
+<a name="377"><span class="lineNum"> 377 </span> : : if (!__builtin_constant_p (__buflen))</a>
+<a name="378"><span class="lineNum"> 378 </span> : : return __getdomainname_chk (__buf, __buflen, __bos (__buf));</a>
+<a name="379"><span class="lineNum"> 379 </span> : : </a>
+<a name="380"><span class="lineNum"> 380 </span> : : if (__buflen &gt; __bos (__buf))</a>
+<a name="381"><span class="lineNum"> 381 </span> : : return __getdomainname_chk_warn (__buf, __buflen, __bos (__buf));</a>
+<a name="382"><span class="lineNum"> 382 </span> : : }</a>
+<a name="383"><span class="lineNum"> 383 </span> : : return __getdomainname_alias (__buf, __buflen);</a>
+<a name="384"><span class="lineNum"> 384 </span> : : }</a>
+<a name="385"><span class="lineNum"> 385 </span> : : #endif</a>
+</pre>
+ </td>
+ </tr>
+ </table>
+ <br>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/sys/index-sort-b.html b/coverage-report/usr/include/x86_64-linux-gnu/sys/index-sort-b.html
index 95ff47e..f34ea34 100644
--- a/coverage-report/usr/include/sys/index-sort-b.html
+++ b/coverage-report/usr/include/x86_64-linux-gnu/sys/index-sort-b.html
@@ -4,22 +4,22 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>LCOV - skiboot.info - /usr/include/sys</title>
- <link rel="stylesheet" type="text/css" href="../../../gcov.css">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/sys</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
- <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - /usr/include/sys</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - /usr/include/x86_64-linux-gnu/sys</td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">4</td>
+ <td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -53,12 +53,12 @@
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
- <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
@@ -76,18 +76,18 @@
</tr>
<tr>
- <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
- <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
- <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
- <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
+ <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
+ <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td>
</tr>
<tr>
<td class="coverFile"><a href="stat.h.gcov.html">stat.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
<td class="coverPerHi">-</td>
@@ -98,7 +98,7 @@
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
</table>
<br>
diff --git a/coverage-report/usr/include/sys/index-sort-f.html b/coverage-report/usr/include/x86_64-linux-gnu/sys/index-sort-f.html
index cc80708..0effcf6 100644
--- a/coverage-report/usr/include/sys/index-sort-f.html
+++ b/coverage-report/usr/include/x86_64-linux-gnu/sys/index-sort-f.html
@@ -4,22 +4,22 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>LCOV - skiboot.info - /usr/include/sys</title>
- <link rel="stylesheet" type="text/css" href="../../../gcov.css">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/sys</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
- <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - /usr/include/sys</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - /usr/include/x86_64-linux-gnu/sys</td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">4</td>
+ <td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -53,12 +53,12 @@
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
- <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
@@ -76,18 +76,18 @@
</tr>
<tr>
- <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
- <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
- <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td>
- <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
+ <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
+ <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td>
+ <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
</tr>
<tr>
<td class="coverFile"><a href="stat.h.gcov.html">stat.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
<td class="coverPerHi">-</td>
@@ -98,7 +98,7 @@
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
</table>
<br>
diff --git a/coverage-report/usr/include/sys/index-sort-l.html b/coverage-report/usr/include/x86_64-linux-gnu/sys/index-sort-l.html
index 82ba07b..3f166e4 100644
--- a/coverage-report/usr/include/sys/index-sort-l.html
+++ b/coverage-report/usr/include/x86_64-linux-gnu/sys/index-sort-l.html
@@ -4,22 +4,22 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>LCOV - skiboot.info - /usr/include/sys</title>
- <link rel="stylesheet" type="text/css" href="../../../gcov.css">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/sys</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
- <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - /usr/include/sys</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - /usr/include/x86_64-linux-gnu/sys</td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">4</td>
+ <td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -53,12 +53,12 @@
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
- <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
@@ -76,18 +76,18 @@
</tr>
<tr>
- <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
- <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></span></td>
- <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
- <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
+ <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td>
+ <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></span></td>
+ <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
</tr>
<tr>
<td class="coverFile"><a href="stat.h.gcov.html">stat.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
<td class="coverPerHi">-</td>
@@ -98,7 +98,7 @@
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
</table>
<br>
diff --git a/coverage-report/usr/include/sys/index.html b/coverage-report/usr/include/x86_64-linux-gnu/sys/index.html
index 68dacaf..714b31c 100644
--- a/coverage-report/usr/include/sys/index.html
+++ b/coverage-report/usr/include/x86_64-linux-gnu/sys/index.html
@@ -4,22 +4,22 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>LCOV - skiboot.info - /usr/include/sys</title>
- <link rel="stylesheet" type="text/css" href="../../../gcov.css">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/sys</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
- <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - /usr/include/sys</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - /usr/include/x86_64-linux-gnu/sys</td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">4</td>
+ <td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -53,12 +53,12 @@
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
- <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<center>
@@ -76,18 +76,18 @@
</tr>
<tr>
- <td class="tableHead">Filename <span class="tableHeadSort"><img src="../../../glass.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></span></td>
- <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
- <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
- <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
+ <td class="tableHead">Filename <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></span></td>
+ <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td>
+ <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td>
</tr>
<tr>
<td class="coverFile"><a href="stat.h.gcov.html">stat.h</a></td>
<td class="coverBar" align="center">
- <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
+ <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../../../../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
- <td class="coverNumHi">6 / 6</td>
+ <td class="coverNumHi">4 / 4</td>
<td class="coverPerHi">-</td>
<td class="coverNumHi">0 / 0</td>
<td class="coverPerHi">-</td>
@@ -98,7 +98,7 @@
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.14</a></td></tr>
</table>
<br>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/sys/stat.h.func-sort-c.html b/coverage-report/usr/include/x86_64-linux-gnu/sys/stat.h.func-sort-c.html
new file mode 100644
index 0000000..1bb1471
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/sys/stat.h.func-sort-c.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/sys/stat.h - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/sys</a> - stat.h<span style="font-size: 80%;"> (<a href="stat.h.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">4</td>
+ <td class="headerCovTableEntry">4</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="stat.h.func.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/x86_64-linux-gnu/sys/stat.h.func.html b/coverage-report/usr/include/x86_64-linux-gnu/sys/stat.h.func.html
new file mode 100644
index 0000000..990c53a
--- /dev/null
+++ b/coverage-report/usr/include/x86_64-linux-gnu/sys/stat.h.func.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html lang="en">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/sys/stat.h - functions</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
+</head>
+
+<body>
+
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="title">LCOV - code coverage report</td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+
+ <tr>
+ <td width="100%">
+ <table cellpadding=1 border=0 width="100%">
+ <tr>
+ <td width="10%" class="headerItem">Current view:</td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/sys</a> - stat.h<span style="font-size: 80%;"> (<a href="stat.h.gcov.html">source</a> / functions)</span></td>
+ <td width="5%"></td>
+ <td width="15%"></td>
+ <td width="10%" class="headerCovTableHead">Hit</td>
+ <td width="10%" class="headerCovTableHead">Total</td>
+ <td width="15%" class="headerCovTableHead">Coverage</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Test:</td>
+ <td class="headerValue">skiboot.info</td>
+ <td></td>
+ <td class="headerItem">Lines:</td>
+ <td class="headerCovTableEntry">4</td>
+ <td class="headerCovTableEntry">4</td>
+ <td class="headerCovTableEntryHi">100.0 %</td>
+ </tr>
+ <tr>
+ <td class="headerItem">Date:</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
+ <td></td>
+ <td class="headerItem">Functions:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td class="headerItem">Branches:</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntry">0</td>
+ <td class="headerCovTableEntryHi">-</td>
+ </tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ </table>
+
+ <center>
+ <table width="60%" cellpadding=1 cellspacing=1 border=0>
+ <tr><td><br></td></tr>
+ <tr>
+ <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../../../../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td>
+ <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="stat.h.func-sort-c.html"><img src="../../../../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
+ </tr>
+ </table>
+ <br>
+ </center>
+ <table width="100%" border=0 cellspacing=0 cellpadding=0>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
+ </table>
+ <br>
+
+</body>
+</html>
diff --git a/coverage-report/usr/include/sys/stat.h.gcov.html b/coverage-report/usr/include/x86_64-linux-gnu/sys/stat.h.gcov.html
index 0a5e954..5a1a5b7 100644
--- a/coverage-report/usr/include/sys/stat.h.gcov.html
+++ b/coverage-report/usr/include/x86_64-linux-gnu/sys/stat.h.gcov.html
@@ -4,22 +4,22 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>LCOV - skiboot.info - /usr/include/sys/stat.h</title>
- <link rel="stylesheet" type="text/css" href="../../../gcov.css">
+ <title>LCOV - skiboot.info - /usr/include/x86_64-linux-gnu/sys/stat.h</title>
+ <link rel="stylesheet" type="text/css" href="../../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LCOV - code coverage report</td></tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td width="10%" class="headerItem">Current view:</td>
- <td width="35%" class="headerValue"><a href="../../../index.html">top level</a> - <a href="index.html">usr/include/sys</a> - stat.h<span style="font-size: 80%;"> (source / <a href="stat.h.func-sort-c.html">functions</a>)</span></td>
+ <td width="35%" class="headerValue"><a href="../../../../index.html">top level</a> - <a href="index.html">usr/include/x86_64-linux-gnu/sys</a> - stat.h<span style="font-size: 80%;"> (source / <a href="stat.h.func-sort-c.html">functions</a>)</span></td>
<td width="5%"></td>
<td width="15%"></td>
<td width="10%" class="headerCovTableHead">Hit</td>
@@ -31,13 +31,13 @@
<td class="headerValue">skiboot.info</td>
<td></td>
<td class="headerItem">Lines:</td>
- <td class="headerCovTableEntry">6</td>
- <td class="headerCovTableEntry">6</td>
+ <td class="headerCovTableEntry">4</td>
+ <td class="headerCovTableEntry">4</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
- <td class="headerValue">2021-05-13 12:18:09</td>
+ <td class="headerValue">2022-03-17 07:10:58</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">0</td>
@@ -53,12 +53,12 @@
<td class="headerCovTableEntry">0</td>
<td class="headerCovTableEntryHi">-</td>
</tr>
- <tr><td><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
</td>
</tr>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
@@ -528,9 +528,9 @@
<a name="457"><span class="lineNum"> 457 </span> : : </a>
<a name="458"><span class="lineNum"> 458 </span> : : # if defined __USE_MISC || defined __USE_XOPEN_EXTENDED</a>
<a name="459"><span class="lineNum"> 459 </span> : : __extern_inline int</a>
-<a name="460"><span class="lineNum"> 460 </span> :<span class="lineCov"> 22 : __NTH (lstat (const char *__path, struct stat *__statbuf))</span></a>
+<a name="460"><span class="lineNum"> 460 </span> : : __NTH (lstat (const char *__path, struct stat *__statbuf))</a>
<a name="461"><span class="lineNum"> 461 </span> : : {</a>
-<a name="462"><span class="lineNum"> 462 </span> :<span class="lineCov"> 22 : return __lxstat (_STAT_VER, __path, __statbuf);</span></a>
+<a name="462"><span class="lineNum"> 462 </span> : : return __lxstat (_STAT_VER, __path, __statbuf);</a>
<a name="463"><span class="lineNum"> 463 </span> : : }</a>
<a name="464"><span class="lineNum"> 464 </span> : : # endif</a>
<a name="465"><span class="lineNum"> 465 </span> : : </a>
@@ -613,7 +613,7 @@
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
- <tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
+ <tr><td class="ruler"><img src="../../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
</table>
<br>
diff --git a/doc/.buildinfo b/doc/.buildinfo
index 9bcde14..a6277d9 100644
--- a/doc/.buildinfo
+++ b/doc/.buildinfo
@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: bbfd82987642dbe60d5f0bf2af554068
+config: 3b4304f1d2c430f80d19be5f122d339c
tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/doc/_sources/opal-api/opal-pci-set-phb-capi-mode-93.rst.txt b/doc/_sources/opal-api/opal-pci-set-phb-capi-mode-93.rst.txt
index ffc4c6d..130e382 100644
--- a/doc/_sources/opal-api/opal-pci-set-phb-capi-mode-93.rst.txt
+++ b/doc/_sources/opal-api/opal-pci-set-phb-capi-mode-93.rst.txt
@@ -66,10 +66,11 @@ Notes
allocate extra 16/8 dma read engines to the PHB depending on its stack
(stack 0/ stack 1). This is needed to improve the Direct-GPU DMA read
performance for the Mellanox CX5 card.
-* Mode `OPAL_PHB_CAPI_MODE_PCIE` not yet supported on Power-9.
+* Mode `OPAL_PHB_CAPI_MODE_PCIE` not supported on Power-9.
* Requesting mode `OPAL_PHB_CAPI_MODE_CAPI` on Power-9 will disable fast-reboot.
* Modes `OPAL_PHB_CAPI_MODE_DMA`, `OPAL_PHB_CAPI_MODE_SNOOP_OFF` are
- not supported on Power-9 yet.
+ not supported on Power-9.
+* CAPI is only supported on Power-8 and Power-9.
Return Codes
------------
diff --git a/doc/_sources/platforms-and-cpus.rst.txt b/doc/_sources/platforms-and-cpus.rst.txt
index 658e00e..95a323f 100644
--- a/doc/_sources/platforms-and-cpus.rst.txt
+++ b/doc/_sources/platforms-and-cpus.rst.txt
@@ -17,6 +17,7 @@ Power9N 0x004e1xxx Nimbus 24 small core
Power9C 0x004e2xxx Cumulus 12 small core
Power9C 0x004e3xxx Cumulus 24 small core
Power9P 0x004fxxxx Axone
+Power10 0x0080xxxx
=============== =============== =====================
Platforms
@@ -41,17 +42,26 @@ rhesus n/a Power8E "ibm,powernv"
======== ============ =========== ================== ========================== ============================= =======
Platform Sub platform Host CPU(s) Manufacturer compatible Other names/Notes Link(s)
======== ============ =========== ================== ========================== ============================= =======
-astbmc p9sdu Power9 Supermicro "supermicro,p9dsu" Boston, LC921/LC922 [#]_
-astbmc romulus Power9 "ibm,romulus" Romulus
-astbmc talos Power9 Raptor "rcs,talos" Talos II, similar to Romulus
-astbmc blackbird Power9 Raptor "rcs,blackbird" Blackbrid
-astbmc witherspoon Power9 "ibm,witherspoon" Witherspoon, Newell, AC922 [#]_
-astbmc zaius Power9 Ingrasys (Foxconn) "ingrasys,zaius" Zaius, Barreleye Gen2
-astbmc mihawk Power9 "{wistron,ibm},mihawk" Mihawk, IC922
-astbmc nicole Power9 Yadro "YADRO,nicole" Nicole
-ibm-fsp zz Power9 "ibm,zz-(1|2)s(2|4)u"
+astbmc p9sdu Power9N Supermicro "supermicro,p9dsu" Boston, LC921/LC922 [#]_
+astbmc romulus Power9N "ibm,romulus" Romulus
+astbmc talos Power9N Raptor "rcs,talos" Talos II, similar to Romulus
+astbmc blackbird Power9N Raptor "rcs,blackbird" Blackbrid
+astbmc witherspoon Power9N "ibm,witherspoon" Witherspoon, Newell, AC922 [#]_
+astbmc zaius Power9N Ingrasys (Foxconn) "ingrasys,zaius" Zaius, Barreleye Gen2
+astbmc mihawk Power9N "{wistron,ibm},mihawk" Mihawk, IC922
+astbmc nicole Power9N Yadro "YADRO,nicole" Nicole
+ibm-fsp zz Power9N "ibm,zz-(1|2)s(2|4)u"
+astbmc swift Power9P "ibm,swift" Swift
+astbmc mowgli Power9N Wistron "ibm,mowgli" Mowgli
======== ============ =========== ================== ========================== ============================= =======
+======== ============ =========== ================== ========================== ============================= =======
+Platform Sub platform Host CPU(s) Manufacturer compatible Other names/Notes Link(s)
+======== ============ =========== ================== ========================== ============================= =======
+astbmc rainier Power10 "ibm,rainier" Rainier
+======== ============ =========== ================== ========================== ============================= =======
+
+
Dropped Platforms
-----------------
diff --git a/doc/_sources/release-notes/skiboot-6.0.24.rst.txt b/doc/_sources/release-notes/skiboot-6.0.24.rst.txt
new file mode 100644
index 0000000..2ebce00
--- /dev/null
+++ b/doc/_sources/release-notes/skiboot-6.0.24.rst.txt
@@ -0,0 +1,22 @@
+.. _skiboot-6.0.24:
+
+==============
+skiboot-6.0.24
+==============
+
+skiboot 6.0.24 was released on Wednesday September 29th, 2021. It replaces
+:ref:`skiboot-6.0.23` as the current stable release in the 6.0.x series.
+
+It is recommended that 6.0.24 be used instead of any previous 6.0.x version
+due to the bug fixes it contains.
+
+Bug fixes included in this release are:
+
+- phb4: Disable TCE cache line buffer
+
+- SBE: Check timer state before scheduling timer
+
+- SBE: Rate limit timer requests
+
+- SBE: Account cancelled timer request
+
diff --git a/doc/_sources/release-notes/skiboot-6.6.6.rst.txt b/doc/_sources/release-notes/skiboot-6.6.6.rst.txt
new file mode 100644
index 0000000..764daa7
--- /dev/null
+++ b/doc/_sources/release-notes/skiboot-6.6.6.rst.txt
@@ -0,0 +1,15 @@
+.. _skiboot-6.6.6:
+
+==============
+skiboot-6.6.6
+==============
+
+skiboot 6.6.6 was released on Wednesday September 29, 2021. It replaces
+:ref:`skiboot-6.6.5` as the current stable release in the 6.6.x series.
+
+It is recommended that v6.6.6 be used instead of v6.6.5 version due to the
+bug fixes it contains.
+
+Bug fixes included in this release are:
+
+- phb4: Disable TCE cache line buffer
diff --git a/doc/_sources/release-notes/skiboot-6.7.1.rst.txt b/doc/_sources/release-notes/skiboot-6.7.1.rst.txt
new file mode 100644
index 0000000..7937885
--- /dev/null
+++ b/doc/_sources/release-notes/skiboot-6.7.1.rst.txt
@@ -0,0 +1,33 @@
+.. _skiboot-6.7.1:
+
+==============
+skiboot-6.7.1
+==============
+
+skiboot 6.7.1 was released on Wednesday January 06, 2021. It replaces
+:ref:`skiboot-6.7` as the current stable release in the 6.7.x series.
+
+It is recommended that 6.7.1 be used instead of 6.7 version due to the
+bug fixes it contains.
+
+Bug fixes included in this release are:
+
+- SBE: Account cancelled timer request
+
+- SBE: Rate limit timer requests
+
+- SBE: Check timer state before scheduling timer
+
+- platform/mowgli: Limit PHB0/(pec0) to gen3 speed
+
+- Revert "mowgli: Limit slot1 to Gen3 by default"
+
+- xscom: Fix xscom error logging caused due to xscom OPAL call
+
+- xive/p9: Remove assert from xive_eq_for_target()
+
+- Fix possible deadlock with DEBUG build
+
+- core/platform: Fallback to full_reboot if fast-reboot fails
+
+- core/cpu: fix next_ungarded_primary
diff --git a/doc/_sources/release-notes/skiboot-6.7.2.rst.txt b/doc/_sources/release-notes/skiboot-6.7.2.rst.txt
new file mode 100644
index 0000000..05d0c8e
--- /dev/null
+++ b/doc/_sources/release-notes/skiboot-6.7.2.rst.txt
@@ -0,0 +1,29 @@
+.. _skiboot-6.7.2:
+
+==============
+skiboot-6.7.2
+==============
+
+skiboot 6.7.2 was released on Wednesday June 30, 2021. It replaces
+:ref:`skiboot-6.7.1` as the current stable release in the 6.7.x series.
+
+It is recommended that 6.7.2 be used instead of 6.7.1 version due to the
+bug fixes it contains.
+
+Bug fixes included in this release are:
+
+- secvar: fix endian conversion
+
+- secvar/secvar_util: Properly free memory on zalloc fail
+
+- edk2-compat-process.c: Remove repetitive debug print statements
+
+- phb4: Avoid MMIO load freeze escalation on every chip
+
+- phb4: Disable TCE cache line buffer
+
+- hw/imc: Disable only nest_imc devices if pause_microcode() fail
+
+- hw/imc: move imc_init() towards end main_cpu_entry()
+
+- Fix lock error when BT IRQ preempt BT timer
diff --git a/doc/_sources/release-notes/skiboot-6.7.3.rst.txt b/doc/_sources/release-notes/skiboot-6.7.3.rst.txt
new file mode 100644
index 0000000..decd5a9
--- /dev/null
+++ b/doc/_sources/release-notes/skiboot-6.7.3.rst.txt
@@ -0,0 +1,29 @@
+.. _skiboot-6.7.3:
+
+==============
+skiboot-6.7.3
+==============
+
+skiboot 6.7.3 was released on Thursday July 22, 2021. It replaces
+:ref:`skiboot-6.7.2` as the current stable release in the 6.7.x series.
+
+It is recommended that 6.7.3 be used instead of 6.7.2 version due to the
+bug fixes it contains.
+
+Bug fixes included in this release are:
+
+- pkcs7: pkcs7_get_content_info_type should reset *p on error
+
+- secvar/backend: fix a memory leak in get_pkcs7
+
+- secvar/backend: fix an integer underflow bug
+
+- secvar/backend: Don't overread data in auth descriptor
+
+- secvar: return error if verify_signature runs out of ESLs
+
+- secvar: return error if validate_esl has extra data
+
+- secvar: Make `validate_esl_list` iterate through esl chain
+
+- secvar: ensure ESL buf size is at least what ESL header expects
diff --git a/doc/_sources/release-notes/skiboot-6.8.1.rst.txt b/doc/_sources/release-notes/skiboot-6.8.1.rst.txt
new file mode 100644
index 0000000..4f68f77
--- /dev/null
+++ b/doc/_sources/release-notes/skiboot-6.8.1.rst.txt
@@ -0,0 +1,31 @@
+.. _skiboot-6.8.1:
+
+==============
+skiboot-6.8.1
+==============
+
+skiboot 6.8.1 was released on Thursday July 22, 2021. It replaces
+:ref:`skiboot-6.8` as the current stable release in the 6.8.x series.
+
+It is recommended that 6.8.1 be used instead of 6.8 version due to the
+bug fixes it contains.
+
+Bug fixes included in this release are:
+
+- pkcs7: pkcs7_get_content_info_type should reset *p on error
+
+- secvar/backend: fix a memory leak in get_pkcs7
+
+- secvar/backend: fix an integer underflow bug
+
+- secvar/backend: Don't overread data in auth descriptor
+
+- secvar: return error if verify_signature runs out of ESLs
+
+- secvar: return error if validate_esl has extra data
+
+- secvar: Make `validate_esl_list` iterate through esl chain
+
+- secvar: ensure ESL buf size is at least what ESL header expects
+
+- secvar: fix endian conversion
diff --git a/doc/_sources/release-notes/skiboot-6.8.rst.txt b/doc/_sources/release-notes/skiboot-6.8.rst.txt
new file mode 100644
index 0000000..41c1c06
--- /dev/null
+++ b/doc/_sources/release-notes/skiboot-6.8.rst.txt
@@ -0,0 +1,12 @@
+.. _skiboot-6.8:
+
+skiboot-6.8
+===========
+
+skiboot v6.8 was released on Friday May 28th 2021. It is the first release
+of skiboot 6.8 series, which becomes the new stable release following the
+:ref:`skiboot-6.7` release, first released Tuesday November 3rd 2020.
+
+This release is entirely focused on bug-fixes and probably first time we have
+not added any new feature. However, this is expected as development has
+largely shifted towards enabling future processor.
diff --git a/doc/_sources/release-notes/skiboot-7.0.rst.txt b/doc/_sources/release-notes/skiboot-7.0.rst.txt
new file mode 100644
index 0000000..764bd12
--- /dev/null
+++ b/doc/_sources/release-notes/skiboot-7.0.rst.txt
@@ -0,0 +1,28 @@
+.. _skiboot-7.0:
+
+skiboot-7.0
+===========
+
+skiboot v7.0 was released on Tuesday Oct 26th 2021. It is the first release
+of skiboot 7.0 series, which becomes the new stable release following the
+:ref:`skiboot-6.8` release, first released Friday May 28th 2021.
+
+This release contains all required feature to support POWER10 systems. This
+shoule be considered as minimal skiboot version required for POWER10 systems.
+
+New Features
+------------
+POWER10
+^^^^^^^
+Below is the list of major feature apart from base POWER10 enablement related
+changes.
+
+- Denali and rainier platform support
+
+- XIVE2 interrupt controller support
+
+- PHB5 support
+
+- Support for OpenCAPI Persistent Memory devices
+
+- Power management stop states and PState (OCC) support
diff --git a/doc/_static/basic.css b/doc/_static/basic.css
index aa9df31..0807176 100644
--- a/doc/_static/basic.css
+++ b/doc/_static/basic.css
@@ -4,7 +4,7 @@
*
* Sphinx stylesheet -- basic theme.
*
- * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@@ -15,12 +15,6 @@ div.clearer {
clear: both;
}
-div.section::after {
- display: block;
- content: '';
- clear: left;
-}
-
/* -- relbar ---------------------------------------------------------------- */
div.related {
@@ -130,7 +124,7 @@ ul.search li a {
font-weight: bold;
}
-ul.search li p.context {
+ul.search li div.context {
color: #888;
margin: 2px 0 0 30px;
text-align: left;
@@ -237,16 +231,6 @@ a.headerlink {
visibility: hidden;
}
-a.brackets:before,
-span.brackets > a:before{
- content: "[";
-}
-
-a.brackets:after,
-span.brackets > a:after {
- content: "]";
-}
-
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
@@ -277,25 +261,19 @@ p.rubric {
font-weight: bold;
}
-img.align-left, figure.align-left, .figure.align-left, object.align-left {
+img.align-left, .figure.align-left, object.align-left {
clear: left;
float: left;
margin-right: 1em;
}
-img.align-right, figure.align-right, .figure.align-right, object.align-right {
+img.align-right, .figure.align-right, object.align-right {
clear: right;
float: right;
margin-left: 1em;
}
-img.align-center, figure.align-center, .figure.align-center, object.align-center {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-
-img.align-default, figure.align-default, .figure.align-default {
+img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
@@ -309,41 +287,30 @@ img.align-default, figure.align-default, .figure.align-default {
text-align: center;
}
-.align-default {
- text-align: center;
-}
-
.align-right {
text-align: right;
}
/* -- sidebars -------------------------------------------------------------- */
-div.sidebar,
-aside.sidebar {
+div.sidebar {
margin: 0 0 0.5em 1em;
border: 1px solid #ddb;
- padding: 7px;
+ padding: 7px 7px 0 7px;
background-color: #ffe;
width: 40%;
float: right;
- clear: right;
- overflow-x: auto;
}
p.sidebar-title {
font-weight: bold;
}
-div.admonition, div.topic, blockquote {
- clear: left;
-}
-
/* -- topics ---------------------------------------------------------------- */
div.topic {
border: 1px solid #ccc;
- padding: 7px;
+ padding: 7px 7px 0 7px;
margin: 10px 0 10px 0;
}
@@ -365,6 +332,10 @@ div.admonition dt {
font-weight: bold;
}
+div.admonition dl {
+ margin-bottom: 0;
+}
+
p.admonition-title {
margin: 0px 10px 5px 0px;
font-weight: bold;
@@ -375,30 +346,9 @@ div.body p.centered {
margin-top: 25px;
}
-/* -- content of sidebars/topics/admonitions -------------------------------- */
-
-div.sidebar > :last-child,
-aside.sidebar > :last-child,
-div.topic > :last-child,
-div.admonition > :last-child {
- margin-bottom: 0;
-}
-
-div.sidebar::after,
-aside.sidebar::after,
-div.topic::after,
-div.admonition::after,
-blockquote::after {
- display: block;
- content: '';
- clear: both;
-}
-
/* -- tables ---------------------------------------------------------------- */
table.docutils {
- margin-top: 10px;
- margin-bottom: 10px;
border: 0;
border-collapse: collapse;
}
@@ -408,11 +358,6 @@ table.align-center {
margin-right: auto;
}
-table.align-default {
- margin-left: auto;
- margin-right: auto;
-}
-
table caption span.caption-number {
font-style: italic;
}
@@ -446,34 +391,22 @@ table.citation td {
border-bottom: none;
}
-th > :first-child,
-td > :first-child {
- margin-top: 0px;
-}
-
-th > :last-child,
-td > :last-child {
- margin-bottom: 0px;
-}
-
/* -- figures --------------------------------------------------------------- */
-div.figure, figure {
+div.figure {
margin: 0.5em;
padding: 0.5em;
}
-div.figure p.caption, figcaption {
+div.figure p.caption {
padding: 0.3em;
}
-div.figure p.caption span.caption-number,
-figcaption span.caption-number {
+div.figure p.caption span.caption-number {
font-style: italic;
}
-div.figure p.caption span.caption-text,
-figcaption span.caption-text {
+div.figure p.caption span.caption-text {
}
/* -- field list styles ----------------------------------------------------- */
@@ -500,71 +433,10 @@ table.field-list td, table.field-list th {
/* -- hlist styles ---------------------------------------------------------- */
-table.hlist {
- margin: 1em 0;
-}
-
table.hlist td {
vertical-align: top;
}
-/* -- object description styles --------------------------------------------- */
-
-.sig {
- font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
-}
-
-.sig-name, code.descname {
- background-color: transparent;
- font-weight: bold;
-}
-
-.sig-name {
- font-size: 1.1em;
-}
-
-code.descname {
- font-size: 1.2em;
-}
-
-.sig-prename, code.descclassname {
- background-color: transparent;
-}
-
-.optional {
- font-size: 1.3em;
-}
-
-.sig-paren {
- font-size: larger;
-}
-
-.sig-param.n {
- font-style: italic;
-}
-
-/* C++ specific styling */
-
-.sig-inline.c-texpr,
-.sig-inline.cpp-texpr {
- font-family: unset;
-}
-
-.sig.c .k, .sig.c .kt,
-.sig.cpp .k, .sig.cpp .kt {
- color: #0033B3;
-}
-
-.sig.c .m,
-.sig.cpp .m {
- color: #1750EB;
-}
-
-.sig.c .s, .sig.c .sc,
-.sig.cpp .s, .sig.cpp .sc {
- color: #067D17;
-}
-
/* -- other body styles ----------------------------------------------------- */
@@ -588,78 +460,11 @@ ol.upperroman {
list-style: upper-roman;
}
-:not(li) > ol > li:first-child > :first-child,
-:not(li) > ul > li:first-child > :first-child {
- margin-top: 0px;
-}
-
-:not(li) > ol > li:last-child > :last-child,
-:not(li) > ul > li:last-child > :last-child {
- margin-bottom: 0px;
-}
-
-ol.simple ol p,
-ol.simple ul p,
-ul.simple ol p,
-ul.simple ul p {
- margin-top: 0;
-}
-
-ol.simple > li:not(:first-child) > p,
-ul.simple > li:not(:first-child) > p {
- margin-top: 0;
-}
-
-ol.simple p,
-ul.simple p {
- margin-bottom: 0;
-}
-
-dl.footnote > dt,
-dl.citation > dt {
- float: left;
- margin-right: 0.5em;
-}
-
-dl.footnote > dd,
-dl.citation > dd {
- margin-bottom: 0em;
-}
-
-dl.footnote > dd:after,
-dl.citation > dd:after {
- content: "";
- clear: both;
-}
-
-dl.field-list {
- display: grid;
- grid-template-columns: fit-content(30%) auto;
-}
-
-dl.field-list > dt {
- font-weight: bold;
- word-break: break-word;
- padding-left: 0.5em;
- padding-right: 5px;
-}
-
-dl.field-list > dt:after {
- content: ":";
-}
-
-dl.field-list > dd {
- padding-left: 0.5em;
- margin-top: 0em;
- margin-left: 0em;
- margin-bottom: 0em;
-}
-
dl {
margin-bottom: 15px;
}
-dd > :first-child {
+dd p {
margin-top: 0px;
}
@@ -673,11 +478,6 @@ dd {
margin-left: 30px;
}
-dl > dd:last-child,
-dl > dd:last-child > :last-child {
- margin-bottom: 0;
-}
-
dt:target, span.highlighted {
background-color: #fbe54e;
}
@@ -691,6 +491,14 @@ dl.glossary dt {
font-size: 1.1em;
}
+.optional {
+ font-size: 1.3em;
+}
+
+.sig-paren {
+ font-size: larger;
+}
+
.versionmodified {
font-style: italic;
}
@@ -729,12 +537,6 @@ dl.glossary dt {
font-style: oblique;
}
-.classifier:before {
- font-style: normal;
- margin: 0.5em;
- content: ":";
-}
-
abbr, acronym {
border-bottom: dotted 1px;
cursor: help;
@@ -747,10 +549,6 @@ pre {
overflow-y: hidden; /* fixes display issues on Chrome browsers */
}
-pre, div[class*="highlight-"] {
- clear: both;
-}
-
span.pre {
-moz-hyphens: none;
-ms-hyphens: none;
@@ -758,57 +556,22 @@ span.pre {
hyphens: none;
}
-div[class*="highlight-"] {
- margin: 1em 0;
-}
-
td.linenos pre {
+ padding: 5px 0px;
border: 0;
background-color: transparent;
color: #aaa;
}
table.highlighttable {
- display: block;
-}
-
-table.highlighttable tbody {
- display: block;
-}
-
-table.highlighttable tr {
- display: flex;
+ margin-left: 0.5em;
}
table.highlighttable td {
- margin: 0;
- padding: 0;
-}
-
-table.highlighttable td.linenos {
- padding-right: 0.5em;
-}
-
-table.highlighttable td.code {
- flex: 1;
- overflow: hidden;
-}
-
-.highlight .hll {
- display: block;
-}
-
-div.highlight pre,
-table.highlighttable pre {
- margin: 0;
-}
-
-div.code-block-caption + div {
- margin-top: 0;
+ padding: 0 0.5em 0 0.5em;
}
div.code-block-caption {
- margin-top: 1em;
padding: 2px 5px;
font-size: small;
}
@@ -817,14 +580,8 @@ div.code-block-caption code {
background-color: transparent;
}
-table.highlighttable td.linenos,
-span.linenos,
-div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */
- user-select: none;
- -webkit-user-select: text; /* Safari fallback only */
- -webkit-user-select: none; /* Chrome/Safari */
- -moz-user-select: none; /* Firefox */
- -ms-user-select: none; /* IE10+ */
+div.code-block-caption + div > div.highlight > pre {
+ margin-top: 0;
}
div.code-block-caption span.caption-number {
@@ -836,7 +593,21 @@ div.code-block-caption span.caption-text {
}
div.literal-block-wrapper {
- margin: 1em 0;
+ padding: 1em 1em 0;
+}
+
+div.literal-block-wrapper div.highlight {
+ margin: 0;
+}
+
+code.descname {
+ background-color: transparent;
+ font-weight: bold;
+ font-size: 1.2em;
+}
+
+code.descclassname {
+ background-color: transparent;
}
code.xref, a code {
@@ -877,7 +648,8 @@ span.eqno {
}
span.eqno a.headerlink {
- position: absolute;
+ position: relative;
+ left: 0px;
z-index: 1;
}
diff --git a/doc/_static/classic.css b/doc/_static/classic.css
index dcae946..8c6dae4 100644
--- a/doc/_static/classic.css
+++ b/doc/_static/classic.css
@@ -4,7 +4,7 @@
*
* Sphinx stylesheet -- classic theme.
*
- * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@@ -13,11 +13,6 @@
/* -- page layout ----------------------------------------------------------- */
-html {
- /* CSS hack for macOS's scrollbar (see #1125) */
- background-color: #FFFFFF;
-}
-
body {
font-family: sans-serif;
font-size: 100%;
@@ -224,8 +219,8 @@ p.admonition-title:after {
pre {
padding: 5px;
- background-color: unset;
- color: unset;
+ background-color: #eeffcc;
+ color: #333333;
line-height: 120%;
border: 1px solid #ac9;
border-left: none;
@@ -238,7 +233,7 @@ code {
font-size: 0.95em;
}
-th, dl.field-list > dt {
+th {
background-color: #ede;
}
diff --git a/doc/_static/doctools.js b/doc/_static/doctools.js
index 61ac9d2..344db17 100644
--- a/doc/_static/doctools.js
+++ b/doc/_static/doctools.js
@@ -4,7 +4,7 @@
*
* Sphinx JavaScript utilities for all documentation.
*
- * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@@ -29,14 +29,9 @@ if (!window.console || !console.firebug) {
/**
* small helper function to urldecode strings
- *
- * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
- if (!x) {
- return x
- }
- return decodeURIComponent(x.replace(/\+/g, ' '));
+ return decodeURIComponent(x).replace(/\+/g, ' ');
};
/**
@@ -92,13 +87,14 @@ jQuery.fn.highlightText = function(text, className) {
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
+ var bbox = span.getBBox();
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
- var bbox = node.parentElement.getBBox();
- rect.x.baseVal.value = bbox.x;
+ rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
+ var parentOfText = node.parentNode.parentNode;
addItems.push({
"parent": node.parentNode,
"target": rect});
@@ -288,12 +284,10 @@ var Documentation = {
},
initOnKeyListeners: function() {
- $(document).keydown(function(event) {
+ $(document).keyup(function(event) {
var activeElementType = document.activeElement.tagName;
- // don't navigate when in search box, textarea, dropdown or button
- if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
- && activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey
- && !event.shiftKey) {
+ // don't navigate when in search box or textarea
+ if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') {
switch (event.keyCode) {
case 37: // left
var prevHref = $('link[rel="prev"]').prop('href');
diff --git a/doc/_static/documentation_options.js b/doc/_static/documentation_options.js
index 26fe4a3..ba391b6 100644
--- a/doc/_static/documentation_options.js
+++ b/doc/_static/documentation_options.js
@@ -1,12 +1,10 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
- VERSION: 'v6.7-45-g4b9ca02',
+ VERSION: 'e32e57e',
LANGUAGE: 'None',
COLLAPSE_INDEX: false,
- BUILDER: 'html',
FILE_SUFFIX: '.html',
- LINK_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
- NAVIGATION_WITH_KEYS: false
+ NAVIGATION_WITH_KEYS: false,
}; \ No newline at end of file
diff --git a/doc/_static/jquery-3.5.1.js b/doc/_static/jquery-3.5.1.js
deleted file mode 100644
index 5093733..0000000
--- a/doc/_static/jquery-3.5.1.js
+++ /dev/null
@@ -1,10872 +0,0 @@
-/*!
- * jQuery JavaScript Library v3.5.1
- * https://jquery.com/
- *
- * Includes Sizzle.js
- * https://sizzlejs.com/
- *
- * Copyright JS Foundation and other contributors
- * Released under the MIT license
- * https://jquery.org/license
- *
- * Date: 2020-05-04T22:49Z
- */
-( function( global, factory ) {
-
- "use strict";
-
- if ( typeof module === "object" && typeof module.exports === "object" ) {
-
- // For CommonJS and CommonJS-like environments where a proper `window`
- // is present, execute the factory and get jQuery.
- // For environments that do not have a `window` with a `document`
- // (such as Node.js), expose a factory as module.exports.
- // This accentuates the need for the creation of a real `window`.
- // e.g. var jQuery = require("jquery")(window);
- // See ticket #14549 for more info.
- module.exports = global.document ?
- factory( global, true ) :
- function( w ) {
- if ( !w.document ) {
- throw new Error( "jQuery requires a window with a document" );
- }
- return factory( w );
- };
- } else {
- factory( global );
- }
-
-// Pass this if window is not defined yet
-} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
-// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
-// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
-// enough that all such attempts are guarded in a try block.
-"use strict";
-
-var arr = [];
-
-var getProto = Object.getPrototypeOf;
-
-var slice = arr.slice;
-
-var flat = arr.flat ? function( array ) {
- return arr.flat.call( array );
-} : function( array ) {
- return arr.concat.apply( [], array );
-};
-
-
-var push = arr.push;
-
-var indexOf = arr.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var fnToString = hasOwn.toString;
-
-var ObjectFunctionString = fnToString.call( Object );
-
-var support = {};
-
-var isFunction = function isFunction( obj ) {
-
- // Support: Chrome <=57, Firefox <=52
- // In some browsers, typeof returns "function" for HTML <object> elements
- // (i.e., `typeof document.createElement( "object" ) === "function"`).
- // We don't want to classify *any* DOM node as a function.
- return typeof obj === "function" && typeof obj.nodeType !== "number";
- };
-
-
-var isWindow = function isWindow( obj ) {
- return obj != null && obj === obj.window;
- };
-
-
-var document = window.document;
-
-
-
- var preservedScriptAttributes = {
- type: true,
- src: true,
- nonce: true,
- noModule: true
- };
-
- function DOMEval( code, node, doc ) {
- doc = doc || document;
-
- var i, val,
- script = doc.createElement( "script" );
-
- script.text = code;
- if ( node ) {
- for ( i in preservedScriptAttributes ) {
-
- // Support: Firefox 64+, Edge 18+
- // Some browsers don't support the "nonce" property on scripts.
- // On the other hand, just using `getAttribute` is not enough as
- // the `nonce` attribute is reset to an empty string whenever it
- // becomes browsing-context connected.
- // See https://github.com/whatwg/html/issues/2369
- // See https://html.spec.whatwg.org/#nonce-attributes
- // The `node.getAttribute` check was added for the sake of
- // `jQuery.globalEval` so that it can fake a nonce-containing node
- // via an object.
- val = node[ i ] || node.getAttribute && node.getAttribute( i );
- if ( val ) {
- script.setAttribute( i, val );
- }
- }
- }
- doc.head.appendChild( script ).parentNode.removeChild( script );
- }
-
-
-function toType( obj ) {
- if ( obj == null ) {
- return obj + "";
- }
-
- // Support: Android <=2.3 only (functionish RegExp)
- return typeof obj === "object" || typeof obj === "function" ?
- class2type[ toString.call( obj ) ] || "object" :
- typeof obj;
-}
-/* global Symbol */
-// Defining this global in .eslintrc.json would create a danger of using the global
-// unguarded in another place, it seems safer to define global only for this module
-
-
-
-var
- version = "3.5.1",
-
- // Define a local copy of jQuery
- jQuery = function( selector, context ) {
-
- // The jQuery object is actually just the init constructor 'enhanced'
- // Need init if jQuery is called (just allow error to be thrown if not included)
- return new jQuery.fn.init( selector, context );
- };
-
-jQuery.fn = jQuery.prototype = {
-
- // The current version of jQuery being used
- jquery: version,
-
- constructor: jQuery,
-
- // The default length of a jQuery object is 0
- length: 0,
-
- toArray: function() {
- return slice.call( this );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
-
- // Return all the elements in a clean array
- if ( num == null ) {
- return slice.call( this );
- }
-
- // Return just the one element from the set
- return num < 0 ? this[ num + this.length ] : this[ num ];
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems ) {
-
- // Build a new jQuery matched element set
- var ret = jQuery.merge( this.constructor(), elems );
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- each: function( callback ) {
- return jQuery.each( this, callback );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map( this, function( elem, i ) {
- return callback.call( elem, i, elem );
- } ) );
- },
-
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ) );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- even: function() {
- return this.pushStack( jQuery.grep( this, function( _elem, i ) {
- return ( i + 1 ) % 2;
- } ) );
- },
-
- odd: function() {
- return this.pushStack( jQuery.grep( this, function( _elem, i ) {
- return i % 2;
- } ) );
- },
-
- eq: function( i ) {
- var len = this.length,
- j = +i + ( i < 0 ? len : 0 );
- return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
- },
-
- end: function() {
- return this.prevObject || this.constructor();
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: arr.sort,
- splice: arr.splice
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
- var options, name, src, copy, copyIsArray, clone,
- target = arguments[ 0 ] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
-
- // Skip the boolean and the target
- target = arguments[ i ] || {};
- i++;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !isFunction( target ) ) {
- target = {};
- }
-
- // Extend jQuery itself if only one argument is passed
- if ( i === length ) {
- target = this;
- i--;
- }
-
- for ( ; i < length; i++ ) {
-
- // Only deal with non-null/undefined values
- if ( ( options = arguments[ i ] ) != null ) {
-
- // Extend the base object
- for ( name in options ) {
- copy = options[ name ];
-
- // Prevent Object.prototype pollution
- // Prevent never-ending loop
- if ( name === "__proto__" || target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
- ( copyIsArray = Array.isArray( copy ) ) ) ) {
- src = target[ name ];
-
- // Ensure proper type for the source value
- if ( copyIsArray && !Array.isArray( src ) ) {
- clone = [];
- } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
- clone = {};
- } else {
- clone = src;
- }
- copyIsArray = false;
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend( {
-
- // Unique for each copy of jQuery on the page
- expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
-
- // Assume jQuery is ready without the ready module
- isReady: true,
-
- error: function( msg ) {
- throw new Error( msg );
- },
-
- noop: function() {},
-
- isPlainObject: function( obj ) {
- var proto, Ctor;
-
- // Detect obvious negatives
- // Use toString instead of jQuery.type to catch host objects
- if ( !obj || toString.call( obj ) !== "[object Object]" ) {
- return false;
- }
-
- proto = getProto( obj );
-
- // Objects with no prototype (e.g., `Object.create( null )`) are plain
- if ( !proto ) {
- return true;
- }
-
- // Objects with prototype are plain iff they were constructed by a global Object function
- Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
- return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
- },
-
- isEmptyObject: function( obj ) {
- var name;
-
- for ( name in obj ) {
- return false;
- }
- return true;
- },
-
- // Evaluates a script in a provided context; falls back to the global one
- // if not specified.
- globalEval: function( code, options, doc ) {
- DOMEval( code, { nonce: options && options.nonce }, doc );
- },
-
- each: function( obj, callback ) {
- var length, i = 0;
-
- if ( isArrayLike( obj ) ) {
- length = obj.length;
- for ( ; i < length; i++ ) {
- if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
- break;
- }
- }
- }
-
- return obj;
- },
-
- // results is for internal usage only
- makeArray: function( arr, results ) {
- var ret = results || [];
-
- if ( arr != null ) {
- if ( isArrayLike( Object( arr ) ) ) {
- jQuery.merge( ret,
- typeof arr === "string" ?
- [ arr ] : arr
- );
- } else {
- push.call( ret, arr );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, arr, i ) {
- return arr == null ? -1 : indexOf.call( arr, elem, i );
- },
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // push.apply(_, arraylike) throws on ancient WebKit
- merge: function( first, second ) {
- var len = +second.length,
- j = 0,
- i = first.length;
-
- for ( ; j < len; j++ ) {
- first[ i++ ] = second[ j ];
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, invert ) {
- var callbackInverse,
- matches = [],
- i = 0,
- length = elems.length,
- callbackExpect = !invert;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( ; i < length; i++ ) {
- callbackInverse = !callback( elems[ i ], i );
- if ( callbackInverse !== callbackExpect ) {
- matches.push( elems[ i ] );
- }
- }
-
- return matches;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var length, value,
- i = 0,
- ret = [];
-
- // Go through the array, translating each of the items to their new values
- if ( isArrayLike( elems ) ) {
- length = elems.length;
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( i in elems ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
- }
-
- // Flatten any nested arrays
- return flat( ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // jQuery.support is not used in Core but other projects attach their
- // properties to it so it needs to exist.
- support: support
-} );
-
-if ( typeof Symbol === "function" ) {
- jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
-}
-
-// Populate the class2type map
-jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
-function( _i, name ) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-} );
-
-function isArrayLike( obj ) {
-
- // Support: real iOS 8.2 only (not reproducible in simulator)
- // `in` check used to prevent JIT error (gh-2145)
- // hasOwn isn't used here due to false negatives
- // regarding Nodelist length in IE
- var length = !!obj && "length" in obj && obj.length,
- type = toType( obj );
-
- if ( isFunction( obj ) || isWindow( obj ) ) {
- return false;
- }
-
- return type === "array" || length === 0 ||
- typeof length === "number" && length > 0 && ( length - 1 ) in obj;
-}
-var Sizzle =
-/*!
- * Sizzle CSS Selector Engine v2.3.5
- * https://sizzlejs.com/
- *
- * Copyright JS Foundation and other contributors
- * Released under the MIT license
- * https://js.foundation/
- *
- * Date: 2020-03-14
- */
-( function( window ) {
-var i,
- support,
- Expr,
- getText,
- isXML,
- tokenize,
- compile,
- select,
- outermostContext,
- sortInput,
- hasDuplicate,
-
- // Local document vars
- setDocument,
- document,
- docElem,
- documentIsHTML,
- rbuggyQSA,
- rbuggyMatches,
- matches,
- contains,
-
- // Instance-specific data
- expando = "sizzle" + 1 * new Date(),
- preferredDoc = window.document,
- dirruns = 0,
- done = 0,
- classCache = createCache(),
- tokenCache = createCache(),
- compilerCache = createCache(),
- nonnativeSelectorCache = createCache(),
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- }
- return 0;
- },
-
- // Instance methods
- hasOwn = ( {} ).hasOwnProperty,
- arr = [],
- pop = arr.pop,
- pushNative = arr.push,
- push = arr.push,
- slice = arr.slice,
-
- // Use a stripped-down indexOf as it's faster than native
- // https://jsperf.com/thor-indexof-vs-for/5
- indexOf = function( list, elem ) {
- var i = 0,
- len = list.length;
- for ( ; i < len; i++ ) {
- if ( list[ i ] === elem ) {
- return i;
- }
- }
- return -1;
- },
-
- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" +
- "ismap|loop|multiple|open|readonly|required|scoped",
-
- // Regular expressions
-
- // http://www.w3.org/TR/css3-selectors/#whitespace
- whitespace = "[\\x20\\t\\r\\n\\f]",
-
- // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
- identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
- "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
-
- // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
- attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
-
- // Operator (capture 2)
- "*([*^$|!~]?=)" + whitespace +
-
- // "Attribute values must be CSS identifiers [capture 5]
- // or strings [capture 3 or capture 4]"
- "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
- whitespace + "*\\]",
-
- pseudos = ":(" + identifier + ")(?:\\((" +
-
- // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
- // 1. quoted (capture 3; capture 4 or capture 5)
- "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
-
- // 2. simple (capture 6)
- "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
-
- // 3. anything else (capture 2)
- ".*" +
- ")\\)|)",
-
- // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
- rwhitespace = new RegExp( whitespace + "+", "g" ),
- rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" +
- whitespace + "+$", "g" ),
-
- rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
- rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
- "*" ),
- rdescend = new RegExp( whitespace + "|>" ),
-
- rpseudo = new RegExp( pseudos ),
- ridentifier = new RegExp( "^" + identifier + "$" ),
-
- matchExpr = {
- "ID": new RegExp( "^#(" + identifier + ")" ),
- "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
- "TAG": new RegExp( "^(" + identifier + "|[*])" ),
- "ATTR": new RegExp( "^" + attributes ),
- "PSEUDO": new RegExp( "^" + pseudos ),
- "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
- whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
- whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
- "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
-
- // For use in libraries implementing .is()
- // We use this for POS matching in `select`
- "needsContext": new RegExp( "^" + whitespace +
- "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
- "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
- },
-
- rhtml = /HTML$/i,
- rinputs = /^(?:input|select|textarea|button)$/i,
- rheader = /^h\d$/i,
-
- rnative = /^[^{]+\{\s*\[native \w/,
-
- // Easily-parseable/retrievable ID or TAG or CLASS selectors
- rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
- rsibling = /[+~]/,
-
- // CSS escapes
- // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
- runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ),
- funescape = function( escape, nonHex ) {
- var high = "0x" + escape.slice( 1 ) - 0x10000;
-
- return nonHex ?
-
- // Strip the backslash prefix from a non-hex escape sequence
- nonHex :
-
- // Replace a hexadecimal escape sequence with the encoded Unicode code point
- // Support: IE <=11+
- // For values outside the Basic Multilingual Plane (BMP), manually construct a
- // surrogate pair
- high < 0 ?
- String.fromCharCode( high + 0x10000 ) :
- String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
- },
-
- // CSS string/identifier serialization
- // https://drafts.csswg.org/cssom/#common-serializing-idioms
- rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
- fcssescape = function( ch, asCodePoint ) {
- if ( asCodePoint ) {
-
- // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
- if ( ch === "\0" ) {
- return "\uFFFD";
- }
-
- // Control characters and (dependent upon position) numbers get escaped as code points
- return ch.slice( 0, -1 ) + "\\" +
- ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
- }
-
- // Other potentially-special ASCII characters get backslash-escaped
- return "\\" + ch;
- },
-
- // Used for iframes
- // See setDocument()
- // Removing the function wrapper causes a "Permission Denied"
- // error in IE
- unloadHandler = function() {
- setDocument();
- },
-
- inDisabledFieldset = addCombinator(
- function( elem ) {
- return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
- },
- { dir: "parentNode", next: "legend" }
- );
-
-// Optimize for push.apply( _, NodeList )
-try {
- push.apply(
- ( arr = slice.call( preferredDoc.childNodes ) ),
- preferredDoc.childNodes
- );
-
- // Support: Android<4.0
- // Detect silently failing push.apply
- // eslint-disable-next-line no-unused-expressions
- arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
- push = { apply: arr.length ?
-
- // Leverage slice if possible
- function( target, els ) {
- pushNative.apply( target, slice.call( els ) );
- } :
-
- // Support: IE<9
- // Otherwise append directly
- function( target, els ) {
- var j = target.length,
- i = 0;
-
- // Can't trust NodeList.length
- while ( ( target[ j++ ] = els[ i++ ] ) ) {}
- target.length = j - 1;
- }
- };
-}
-
-function Sizzle( selector, context, results, seed ) {
- var m, i, elem, nid, match, groups, newSelector,
- newContext = context && context.ownerDocument,
-
- // nodeType defaults to 9, since context defaults to document
- nodeType = context ? context.nodeType : 9;
-
- results = results || [];
-
- // Return early from calls with invalid selector or context
- if ( typeof selector !== "string" || !selector ||
- nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
-
- return results;
- }
-
- // Try to shortcut find operations (as opposed to filters) in HTML documents
- if ( !seed ) {
- setDocument( context );
- context = context || document;
-
- if ( documentIsHTML ) {
-
- // If the selector is sufficiently simple, try using a "get*By*" DOM method
- // (excepting DocumentFragment context, where the methods don't exist)
- if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
-
- // ID selector
- if ( ( m = match[ 1 ] ) ) {
-
- // Document context
- if ( nodeType === 9 ) {
- if ( ( elem = context.getElementById( m ) ) ) {
-
- // Support: IE, Opera, Webkit
- // TODO: identify versions
- // getElementById can match elements by name instead of ID
- if ( elem.id === m ) {
- results.push( elem );
- return results;
- }
- } else {
- return results;
- }
-
- // Element context
- } else {
-
- // Support: IE, Opera, Webkit
- // TODO: identify versions
- // getElementById can match elements by name instead of ID
- if ( newContext && ( elem = newContext.getElementById( m ) ) &&
- contains( context, elem ) &&
- elem.id === m ) {
-
- results.push( elem );
- return results;
- }
- }
-
- // Type selector
- } else if ( match[ 2 ] ) {
- push.apply( results, context.getElementsByTagName( selector ) );
- return results;
-
- // Class selector
- } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&
- context.getElementsByClassName ) {
-
- push.apply( results, context.getElementsByClassName( m ) );
- return results;
- }
- }
-
- // Take advantage of querySelectorAll
- if ( support.qsa &&
- !nonnativeSelectorCache[ selector + " " ] &&
- ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&
-
- // Support: IE 8 only
- // Exclude object elements
- ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) {
-
- newSelector = selector;
- newContext = context;
-
- // qSA considers elements outside a scoping root when evaluating child or
- // descendant combinators, which is not what we want.
- // In such cases, we work around the behavior by prefixing every selector in the
- // list with an ID selector referencing the scope context.
- // The technique has to be used as well when a leading combinator is used
- // as such selectors are not recognized by querySelectorAll.
- // Thanks to Andrew Dupont for this technique.
- if ( nodeType === 1 &&
- ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
-
- // Expand context for sibling selectors
- newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
- context;
-
- // We can use :scope instead of the ID hack if the browser
- // supports it & if we're not changing the context.
- if ( newContext !== context || !support.scope ) {
-
- // Capture the context ID, setting it first if necessary
- if ( ( nid = context.getAttribute( "id" ) ) ) {
- nid = nid.replace( rcssescape, fcssescape );
- } else {
- context.setAttribute( "id", ( nid = expando ) );
- }
- }
-
- // Prefix every selector in the list
- groups = tokenize( selector );
- i = groups.length;
- while ( i-- ) {
- groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
- toSelector( groups[ i ] );
- }
- newSelector = groups.join( "," );
- }
-
- try {
- push.apply( results,
- newContext.querySelectorAll( newSelector )
- );
- return results;
- } catch ( qsaError ) {
- nonnativeSelectorCache( selector, true );
- } finally {
- if ( nid === expando ) {
- context.removeAttribute( "id" );
- }
- }
- }
- }
- }
-
- // All others
- return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {function(string, object)} Returns the Object data after storing it on itself with
- * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- * deleting the oldest entry
- */
-function createCache() {
- var keys = [];
-
- function cache( key, value ) {
-
- // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
- if ( keys.push( key + " " ) > Expr.cacheLength ) {
-
- // Only keep the most recent entries
- delete cache[ keys.shift() ];
- }
- return ( cache[ key + " " ] = value );
- }
- return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
- fn[ expando ] = true;
- return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created element and returns a boolean result
- */
-function assert( fn ) {
- var el = document.createElement( "fieldset" );
-
- try {
- return !!fn( el );
- } catch ( e ) {
- return false;
- } finally {
-
- // Remove from its parent by default
- if ( el.parentNode ) {
- el.parentNode.removeChild( el );
- }
-
- // release memory in IE
- el = null;
- }
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
-function addHandle( attrs, handler ) {
- var arr = attrs.split( "|" ),
- i = arr.length;
-
- while ( i-- ) {
- Expr.attrHandle[ arr[ i ] ] = handler;
- }
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
- */
-function siblingCheck( a, b ) {
- var cur = b && a,
- diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
- a.sourceIndex - b.sourceIndex;
-
- // Use IE sourceIndex if available on both nodes
- if ( diff ) {
- return diff;
- }
-
- // Check if b follows a
- if ( cur ) {
- while ( ( cur = cur.nextSibling ) ) {
- if ( cur === b ) {
- return -1;
- }
- }
- }
-
- return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return ( name === "input" || name === "button" ) && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for :enabled/:disabled
- * @param {Boolean} disabled true for :disabled; false for :enabled
- */
-function createDisabledPseudo( disabled ) {
-
- // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
- return function( elem ) {
-
- // Only certain elements can match :enabled or :disabled
- // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
- // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
- if ( "form" in elem ) {
-
- // Check for inherited disabledness on relevant non-disabled elements:
- // * listed form-associated elements in a disabled fieldset
- // https://html.spec.whatwg.org/multipage/forms.html#category-listed
- // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
- // * option elements in a disabled optgroup
- // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
- // All such elements have a "form" property.
- if ( elem.parentNode && elem.disabled === false ) {
-
- // Option elements defer to a parent optgroup if present
- if ( "label" in elem ) {
- if ( "label" in elem.parentNode ) {
- return elem.parentNode.disabled === disabled;
- } else {
- return elem.disabled === disabled;
- }
- }
-
- // Support: IE 6 - 11
- // Use the isDisabled shortcut property to check for disabled fieldset ancestors
- return elem.isDisabled === disabled ||
-
- // Where there is no isDisabled, check manually
- /* jshint -W018 */
- elem.isDisabled !== !disabled &&
- inDisabledFieldset( elem ) === disabled;
- }
-
- return elem.disabled === disabled;
-
- // Try to winnow out elements that can't be disabled before trusting the disabled property.
- // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
- // even exist on them, let alone have a boolean value.
- } else if ( "label" in elem ) {
- return elem.disabled === disabled;
- }
-
- // Remaining elements are neither :enabled nor :disabled
- return false;
- };
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
- return markFunction( function( argument ) {
- argument = +argument;
- return markFunction( function( seed, matches ) {
- var j,
- matchIndexes = fn( [], seed.length, argument ),
- i = matchIndexes.length;
-
- // Match elements found at the specified indexes
- while ( i-- ) {
- if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
- seed[ j ] = !( matches[ j ] = seed[ j ] );
- }
- }
- } );
- } );
-}
-
-/**
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
- */
-function testContext( context ) {
- return context && typeof context.getElementsByTagName !== "undefined" && context;
-}
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
-isXML = Sizzle.isXML = function( elem ) {
- var namespace = elem.namespaceURI,
- docElem = ( elem.ownerDocument || elem ).documentElement;
-
- // Support: IE <=8
- // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
- // https://bugs.jquery.com/ticket/4833
- return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
-};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
- var hasCompare, subWindow,
- doc = node ? node.ownerDocument || node : preferredDoc;
-
- // Return early if doc is invalid or already selected
- // Support: IE 11+, Edge 17 - 18+
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
- // two documents; shallow comparisons work.
- // eslint-disable-next-line eqeqeq
- if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
- return document;
- }
-
- // Update global variables
- document = doc;
- docElem = document.documentElement;
- documentIsHTML = !isXML( document );
-
- // Support: IE 9 - 11+, Edge 12 - 18+
- // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
- // Support: IE 11+, Edge 17 - 18+
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
- // two documents; shallow comparisons work.
- // eslint-disable-next-line eqeqeq
- if ( preferredDoc != document &&
- ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
-
- // Support: IE 11, Edge
- if ( subWindow.addEventListener ) {
- subWindow.addEventListener( "unload", unloadHandler, false );
-
- // Support: IE 9 - 10 only
- } else if ( subWindow.attachEvent ) {
- subWindow.attachEvent( "onunload", unloadHandler );
- }
- }
-
- // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
- // Safari 4 - 5 only, Opera <=11.6 - 12.x only
- // IE/Edge & older browsers don't support the :scope pseudo-class.
- // Support: Safari 6.0 only
- // Safari 6.0 supports :scope but it's an alias of :root there.
- support.scope = assert( function( el ) {
- docElem.appendChild( el ).appendChild( document.createElement( "div" ) );
- return typeof el.querySelectorAll !== "undefined" &&
- !el.querySelectorAll( ":scope fieldset div" ).length;
- } );
-
- /* Attributes
- ---------------------------------------------------------------------- */
-
- // Support: IE<8
- // Verify that getAttribute really returns attributes and not properties
- // (excepting IE8 booleans)
- support.attributes = assert( function( el ) {
- el.className = "i";
- return !el.getAttribute( "className" );
- } );
-
- /* getElement(s)By*
- ---------------------------------------------------------------------- */
-
- // Check if getElementsByTagName("*") returns only elements
- support.getElementsByTagName = assert( function( el ) {
- el.appendChild( document.createComment( "" ) );
- return !el.getElementsByTagName( "*" ).length;
- } );
-
- // Support: IE<9
- support.getElementsByClassName = rnative.test( document.getElementsByClassName );
-
- // Support: IE<10
- // Check if getElementById returns elements by name
- // The broken getElementById methods don't pick up programmatically-set names,
- // so use a roundabout getElementsByName test
- support.getById = assert( function( el ) {
- docElem.appendChild( el ).id = expando;
- return !document.getElementsByName || !document.getElementsByName( expando ).length;
- } );
-
- // ID filter and find
- if ( support.getById ) {
- Expr.filter[ "ID" ] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- return elem.getAttribute( "id" ) === attrId;
- };
- };
- Expr.find[ "ID" ] = function( id, context ) {
- if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
- var elem = context.getElementById( id );
- return elem ? [ elem ] : [];
- }
- };
- } else {
- Expr.filter[ "ID" ] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- var node = typeof elem.getAttributeNode !== "undefined" &&
- elem.getAttributeNode( "id" );
- return node && node.value === attrId;
- };
- };
-
- // Support: IE 6 - 7 only
- // getElementById is not reliable as a find shortcut
- Expr.find[ "ID" ] = function( id, context ) {
- if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
- var node, i, elems,
- elem = context.getElementById( id );
-
- if ( elem ) {
-
- // Verify the id attribute
- node = elem.getAttributeNode( "id" );
- if ( node && node.value === id ) {
- return [ elem ];
- }
-
- // Fall back on getElementsByName
- elems = context.getElementsByName( id );
- i = 0;
- while ( ( elem = elems[ i++ ] ) ) {
- node = elem.getAttributeNode( "id" );
- if ( node && node.value === id ) {
- return [ elem ];
- }
- }
- }
-
- return [];
- }
- };
- }
-
- // Tag
- Expr.find[ "TAG" ] = support.getElementsByTagName ?
- function( tag, context ) {
- if ( typeof context.getElementsByTagName !== "undefined" ) {
- return context.getElementsByTagName( tag );
-
- // DocumentFragment nodes don't have gEBTN
- } else if ( support.qsa ) {
- return context.querySelectorAll( tag );
- }
- } :
-
- function( tag, context ) {
- var elem,
- tmp = [],
- i = 0,
-
- // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
- results = context.getElementsByTagName( tag );
-
- // Filter out possible comments
- if ( tag === "*" ) {
- while ( ( elem = results[ i++ ] ) ) {
- if ( elem.nodeType === 1 ) {
- tmp.push( elem );
- }
- }
-
- return tmp;
- }
- return results;
- };
-
- // Class
- Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) {
- if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
- return context.getElementsByClassName( className );
- }
- };
-
- /* QSA/matchesSelector
- ---------------------------------------------------------------------- */
-
- // QSA and matchesSelector support
-
- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
- rbuggyMatches = [];
-
- // qSa(:focus) reports false when true (Chrome 21)
- // We allow this because of a bug in IE8/9 that throws an error
- // whenever `document.activeElement` is accessed on an iframe
- // So, we allow :focus to pass through QSA all the time to avoid the IE error
- // See https://bugs.jquery.com/ticket/13378
- rbuggyQSA = [];
-
- if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {
-
- // Build QSA regex
- // Regex strategy adopted from Diego Perini
- assert( function( el ) {
-
- var input;
-
- // Select is set to empty string on purpose
- // This is to test IE's treatment of not explicitly
- // setting a boolean content attribute,
- // since its presence should be enough
- // https://bugs.jquery.com/ticket/12359
- docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
- "<select id='" + expando + "-\r\\' msallowcapture=''>" +
- "<option selected=''></option></select>";
-
- // Support: IE8, Opera 11-12.16
- // Nothing should be selected when empty strings follow ^= or $= or *=
- // The test attribute must be unknown in Opera but "safe" for WinRT
- // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
- if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) {
- rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
- }
-
- // Support: IE8
- // Boolean attributes and "value" are not treated correctly
- if ( !el.querySelectorAll( "[selected]" ).length ) {
- rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
- }
-
- // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
- if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
- rbuggyQSA.push( "~=" );
- }
-
- // Support: IE 11+, Edge 15 - 18+
- // IE 11/Edge don't find elements on a `[name='']` query in some cases.
- // Adding a temporary attribute to the document before the selection works
- // around the issue.
- // Interestingly, IE 10 & older don't seem to have the issue.
- input = document.createElement( "input" );
- input.setAttribute( "name", "" );
- el.appendChild( input );
- if ( !el.querySelectorAll( "[name='']" ).length ) {
- rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
- whitespace + "*(?:''|\"\")" );
- }
-
- // Webkit/Opera - :checked should return selected option elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- // IE8 throws error here and will not see later tests
- if ( !el.querySelectorAll( ":checked" ).length ) {
- rbuggyQSA.push( ":checked" );
- }
-
- // Support: Safari 8+, iOS 8+
- // https://bugs.webkit.org/show_bug.cgi?id=136851
- // In-page `selector#id sibling-combinator selector` fails
- if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
- rbuggyQSA.push( ".#.+[+~]" );
- }
-
- // Support: Firefox <=3.6 - 5 only
- // Old Firefox doesn't throw on a badly-escaped identifier.
- el.querySelectorAll( "\\\f" );
- rbuggyQSA.push( "[\\r\\n\\f]" );
- } );
-
- assert( function( el ) {
- el.innerHTML = "<a href='' disabled='disabled'></a>" +
- "<select disabled='disabled'><option/></select>";
-
- // Support: Windows 8 Native Apps
- // The type and name attributes are restricted during .innerHTML assignment
- var input = document.createElement( "input" );
- input.setAttribute( "type", "hidden" );
- el.appendChild( input ).setAttribute( "name", "D" );
-
- // Support: IE8
- // Enforce case-sensitivity of name attribute
- if ( el.querySelectorAll( "[name=d]" ).length ) {
- rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
- }
-
- // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
- // IE8 throws error here and will not see later tests
- if ( el.querySelectorAll( ":enabled" ).length !== 2 ) {
- rbuggyQSA.push( ":enabled", ":disabled" );
- }
-
- // Support: IE9-11+
- // IE's :disabled selector does not pick up the children of disabled fieldsets
- docElem.appendChild( el ).disabled = true;
- if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
- rbuggyQSA.push( ":enabled", ":disabled" );
- }
-
- // Support: Opera 10 - 11 only
- // Opera 10-11 does not throw on post-comma invalid pseudos
- el.querySelectorAll( "*,:x" );
- rbuggyQSA.push( ",.*:" );
- } );
- }
-
- if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||
- docElem.webkitMatchesSelector ||
- docElem.mozMatchesSelector ||
- docElem.oMatchesSelector ||
- docElem.msMatchesSelector ) ) ) ) {
-
- assert( function( el ) {
-
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9)
- support.disconnectedMatch = matches.call( el, "*" );
-
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( el, "[s!='']:x" );
- rbuggyMatches.push( "!=", pseudos );
- } );
- }
-
- rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
- rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
-
- /* Contains
- ---------------------------------------------------------------------- */
- hasCompare = rnative.test( docElem.compareDocumentPosition );
-
- // Element contains another
- // Purposefully self-exclusive
- // As in, an element does not contain itself
- contains = hasCompare || rnative.test( docElem.contains ) ?
- function( a, b ) {
- var adown = a.nodeType === 9 ? a.documentElement : a,
- bup = b && b.parentNode;
- return a === bup || !!( bup && bup.nodeType === 1 && (
- adown.contains ?
- adown.contains( bup ) :
- a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
- ) );
- } :
- function( a, b ) {
- if ( b ) {
- while ( ( b = b.parentNode ) ) {
- if ( b === a ) {
- return true;
- }
- }
- }
- return false;
- };
-
- /* Sorting
- ---------------------------------------------------------------------- */
-
- // Document order sorting
- sortOrder = hasCompare ?
- function( a, b ) {
-
- // Flag for duplicate removal
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- // Sort on method existence if only one input has compareDocumentPosition
- var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
- if ( compare ) {
- return compare;
- }
-
- // Calculate position if both inputs belong to the same document
- // Support: IE 11+, Edge 17 - 18+
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
- // two documents; shallow comparisons work.
- // eslint-disable-next-line eqeqeq
- compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
- a.compareDocumentPosition( b ) :
-
- // Otherwise we know they are disconnected
- 1;
-
- // Disconnected nodes
- if ( compare & 1 ||
- ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
-
- // Choose the first element that is related to our preferred document
- // Support: IE 11+, Edge 17 - 18+
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
- // two documents; shallow comparisons work.
- // eslint-disable-next-line eqeqeq
- if ( a == document || a.ownerDocument == preferredDoc &&
- contains( preferredDoc, a ) ) {
- return -1;
- }
-
- // Support: IE 11+, Edge 17 - 18+
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
- // two documents; shallow comparisons work.
- // eslint-disable-next-line eqeqeq
- if ( b == document || b.ownerDocument == preferredDoc &&
- contains( preferredDoc, b ) ) {
- return 1;
- }
-
- // Maintain original order
- return sortInput ?
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
- 0;
- }
-
- return compare & 4 ? -1 : 1;
- } :
- function( a, b ) {
-
- // Exit early if the nodes are identical
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- var cur,
- i = 0,
- aup = a.parentNode,
- bup = b.parentNode,
- ap = [ a ],
- bp = [ b ];
-
- // Parentless nodes are either documents or disconnected
- if ( !aup || !bup ) {
-
- // Support: IE 11+, Edge 17 - 18+
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
- // two documents; shallow comparisons work.
- /* eslint-disable eqeqeq */
- return a == document ? -1 :
- b == document ? 1 :
- /* eslint-enable eqeqeq */
- aup ? -1 :
- bup ? 1 :
- sortInput ?
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
- 0;
-
- // If the nodes are siblings, we can do a quick check
- } else if ( aup === bup ) {
- return siblingCheck( a, b );
- }
-
- // Otherwise we need full lists of their ancestors for comparison
- cur = a;
- while ( ( cur = cur.parentNode ) ) {
- ap.unshift( cur );
- }
- cur = b;
- while ( ( cur = cur.parentNode ) ) {
- bp.unshift( cur );
- }
-
- // Walk down the tree looking for a discrepancy
- while ( ap[ i ] === bp[ i ] ) {
- i++;
- }
-
- return i ?
-
- // Do a sibling check if the nodes have a common ancestor
- siblingCheck( ap[ i ], bp[ i ] ) :
-
- // Otherwise nodes in our document sort first
- // Support: IE 11+, Edge 17 - 18+
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
- // two documents; shallow comparisons work.
- /* eslint-disable eqeqeq */
- ap[ i ] == preferredDoc ? -1 :
- bp[ i ] == preferredDoc ? 1 :
- /* eslint-enable eqeqeq */
- 0;
- };
-
- return document;
-};
-
-Sizzle.matches = function( expr, elements ) {
- return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
- setDocument( elem );
-
- if ( support.matchesSelector && documentIsHTML &&
- !nonnativeSelectorCache[ expr + " " ] &&
- ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
- ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
-
- try {
- var ret = matches.call( elem, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || support.disconnectedMatch ||
-
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9
- elem.document && elem.document.nodeType !== 11 ) {
- return ret;
- }
- } catch ( e ) {
- nonnativeSelectorCache( expr, true );
- }
- }
-
- return Sizzle( expr, document, null, [ elem ] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
-
- // Set document vars if needed
- // Support: IE 11+, Edge 17 - 18+
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
- // two documents; shallow comparisons work.
- // eslint-disable-next-line eqeqeq
- if ( ( context.ownerDocument || context ) != document ) {
- setDocument( context );
- }
- return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
-
- // Set document vars if needed
- // Support: IE 11+, Edge 17 - 18+
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
- // two documents; shallow comparisons work.
- // eslint-disable-next-line eqeqeq
- if ( ( elem.ownerDocument || elem ) != document ) {
- setDocument( elem );
- }
-
- var fn = Expr.attrHandle[ name.toLowerCase() ],
-
- // Don't get fooled by Object.prototype properties (jQuery #13807)
- val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
- fn( elem, name, !documentIsHTML ) :
- undefined;
-
- return val !== undefined ?
- val :
- support.attributes || !documentIsHTML ?
- elem.getAttribute( name ) :
- ( val = elem.getAttributeNode( name ) ) && val.specified ?
- val.value :
- null;
-};
-
-Sizzle.escape = function( sel ) {
- return ( sel + "" ).replace( rcssescape, fcssescape );
-};
-
-Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
- var elem,
- duplicates = [],
- j = 0,
- i = 0;
-
- // Unless we *know* we can detect duplicates, assume their presence
- hasDuplicate = !support.detectDuplicates;
- sortInput = !support.sortStable && results.slice( 0 );
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- while ( ( elem = results[ i++ ] ) ) {
- if ( elem === results[ i ] ) {
- j = duplicates.push( i );
- }
- }
- while ( j-- ) {
- results.splice( duplicates[ j ], 1 );
- }
- }
-
- // Clear input after sorting to release objects
- // See https://github.com/jquery/sizzle/pull/225
- sortInput = null;
-
- return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
- var node,
- ret = "",
- i = 0,
- nodeType = elem.nodeType;
-
- if ( !nodeType ) {
-
- // If no nodeType, this is expected to be an array
- while ( ( node = elem[ i++ ] ) ) {
-
- // Do not traverse comment nodes
- ret += getText( node );
- }
- } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
-
- // Use textContent for elements
- // innerText usage removed for consistency of new lines (jQuery #11153)
- if ( typeof elem.textContent === "string" ) {
- return elem.textContent;
- } else {
-
- // Traverse its children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
-
- // Do not include comment or processing instruction nodes
-
- return ret;
-};
-
-Expr = Sizzle.selectors = {
-
- // Can be adjusted by the user
- cacheLength: 50,
-
- createPseudo: markFunction,
-
- match: matchExpr,
-
- attrHandle: {},
-
- find: {},
-
- relative: {
- ">": { dir: "parentNode", first: true },
- " ": { dir: "parentNode" },
- "+": { dir: "previousSibling", first: true },
- "~": { dir: "previousSibling" }
- },
-
- preFilter: {
- "ATTR": function( match ) {
- match[ 1 ] = match[ 1 ].replace( runescape, funescape );
-
- // Move the given value to match[3] whether quoted or unquoted
- match[ 3 ] = ( match[ 3 ] || match[ 4 ] ||
- match[ 5 ] || "" ).replace( runescape, funescape );
-
- if ( match[ 2 ] === "~=" ) {
- match[ 3 ] = " " + match[ 3 ] + " ";
- }
-
- return match.slice( 0, 4 );
- },
-
- "CHILD": function( match ) {
-
- /* matches from matchExpr["CHILD"]
- 1 type (only|nth|...)
- 2 what (child|of-type)
- 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
- 4 xn-component of xn+y argument ([+-]?\d*n|)
- 5 sign of xn-component
- 6 x of xn-component
- 7 sign of y-component
- 8 y of y-component
- */
- match[ 1 ] = match[ 1 ].toLowerCase();
-
- if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
-
- // nth-* requires argument
- if ( !match[ 3 ] ) {
- Sizzle.error( match[ 0 ] );
- }
-
- // numeric x and y parameters for Expr.filter.CHILD
- // remember that false/true cast respectively to 0/1
- match[ 4 ] = +( match[ 4 ] ?
- match[ 5 ] + ( match[ 6 ] || 1 ) :
- 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) );
- match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
-
- // other types prohibit arguments
- } else if ( match[ 3 ] ) {
- Sizzle.error( match[ 0 ] );
- }
-
- return match;
- },
-
- "PSEUDO": function( match ) {
- var excess,
- unquoted = !match[ 6 ] && match[ 2 ];
-
- if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) {
- return null;
- }
-
- // Accept quoted arguments as-is
- if ( match[ 3 ] ) {
- match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
-
- // Strip excess characters from unquoted arguments
- } else if ( unquoted && rpseudo.test( unquoted ) &&
-
- // Get excess from tokenize (recursively)
- ( excess = tokenize( unquoted, true ) ) &&
-
- // advance to the next closing parenthesis
- ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
-
- // excess is a negative index
- match[ 0 ] = match[ 0 ].slice( 0, excess );
- match[ 2 ] = unquoted.slice( 0, excess );
- }
-
- // Return only captures needed by the pseudo filter method (type and argument)
- return match.slice( 0, 3 );
- }
- },
-
- filter: {
-
- "TAG": function( nodeNameSelector ) {
- var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
- return nodeNameSelector === "*" ?
- function() {
- return true;
- } :
- function( elem ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
- };
- },
-
- "CLASS": function( className ) {
- var pattern = classCache[ className + " " ];
-
- return pattern ||
- ( pattern = new RegExp( "(^|" + whitespace +
- ")" + className + "(" + whitespace + "|$)" ) ) && classCache(
- className, function( elem ) {
- return pattern.test(
- typeof elem.className === "string" && elem.className ||
- typeof elem.getAttribute !== "undefined" &&
- elem.getAttribute( "class" ) ||
- ""
- );
- } );
- },
-
- "ATTR": function( name, operator, check ) {
- return function( elem ) {
- var result = Sizzle.attr( elem, name );
-
- if ( result == null ) {
- return operator === "!=";
- }
- if ( !operator ) {
- return true;
- }
-
- result += "";
-
- /* eslint-disable max-len */
-
- return operator === "=" ? result === check :
- operator === "!=" ? result !== check :
- operator === "^=" ? check && result.indexOf( check ) === 0 :
- operator === "*=" ? check && result.indexOf( check ) > -1 :
- operator === "$=" ? check && result.slice( -check.length ) === check :
- operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
- operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
- false;
- /* eslint-enable max-len */
-
- };
- },
-
- "CHILD": function( type, what, _argument, first, last ) {
- var simple = type.slice( 0, 3 ) !== "nth",
- forward = type.slice( -4 ) !== "last",
- ofType = what === "of-type";
-
- return first === 1 && last === 0 ?
-
- // Shortcut for :nth-*(n)
- function( elem ) {
- return !!elem.parentNode;
- } :
-
- function( elem, _context, xml ) {
- var cache, uniqueCache, outerCache, node, nodeIndex, start,
- dir = simple !== forward ? "nextSibling" : "previousSibling",
- parent = elem.parentNode,
- name = ofType && elem.nodeName.toLowerCase(),
- useCache = !xml && !ofType,
- diff = false;
-
- if ( parent ) {
-
- // :(first|last|only)-(child|of-type)
- if ( simple ) {
- while ( dir ) {
- node = elem;
- while ( ( node = node[ dir ] ) ) {
- if ( ofType ?
- node.nodeName.toLowerCase() === name :
- node.nodeType === 1 ) {
-
- return false;
- }
- }
-
- // Reverse direction for :only-* (if we haven't yet done so)
- start = dir = type === "only" && !start && "nextSibling";
- }
- return true;
- }
-
- start = [ forward ? parent.firstChild : parent.lastChild ];
-
- // non-xml :nth-child(...) stores cache data on `parent`
- if ( forward && useCache ) {
-
- // Seek `elem` from a previously-cached index
-
- // ...in a gzip-friendly way
- node = parent;
- outerCache = node[ expando ] || ( node[ expando ] = {} );
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- ( outerCache[ node.uniqueID ] = {} );
-
- cache = uniqueCache[ type ] || [];
- nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
- diff = nodeIndex && cache[ 2 ];
- node = nodeIndex && parent.childNodes[ nodeIndex ];
-
- while ( ( node = ++nodeIndex && node && node[ dir ] ||
-
- // Fallback to seeking `elem` from the start
- ( diff = nodeIndex = 0 ) || start.pop() ) ) {
-
- // When found, cache indexes on `parent` and break
- if ( node.nodeType === 1 && ++diff && node === elem ) {
- uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
- break;
- }
- }
-
- } else {
-
- // Use previously-cached element index if available
- if ( useCache ) {
-
- // ...in a gzip-friendly way
- node = elem;
- outerCache = node[ expando ] || ( node[ expando ] = {} );
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- ( outerCache[ node.uniqueID ] = {} );
-
- cache = uniqueCache[ type ] || [];
- nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
- diff = nodeIndex;
- }
-
- // xml :nth-child(...)
- // or :nth-last-child(...) or :nth(-last)?-of-type(...)
- if ( diff === false ) {
-
- // Use the same loop as above to seek `elem` from the start
- while ( ( node = ++nodeIndex && node && node[ dir ] ||
- ( diff = nodeIndex = 0 ) || start.pop() ) ) {
-
- if ( ( ofType ?
- node.nodeName.toLowerCase() === name :
- node.nodeType === 1 ) &&
- ++diff ) {
-
- // Cache the index of each encountered element
- if ( useCache ) {
- outerCache = node[ expando ] ||
- ( node[ expando ] = {} );
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- ( outerCache[ node.uniqueID ] = {} );
-
- uniqueCache[ type ] = [ dirruns, diff ];
- }
-
- if ( node === elem ) {
- break;
- }
- }
- }
- }
- }
-
- // Incorporate the offset, then check against cycle size
- diff -= last;
- return diff === first || ( diff % first === 0 && diff / first >= 0 );
- }
- };
- },
-
- "PSEUDO": function( pseudo, argument ) {
-
- // pseudo-class names are case-insensitive
- // http://www.w3.org/TR/selectors/#pseudo-classes
- // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
- // Remember that setFilters inherits from pseudos
- var args,
- fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
- Sizzle.error( "unsupported pseudo: " + pseudo );
-
- // The user may use createPseudo to indicate that
- // arguments are needed to create the filter function
- // just as Sizzle does
- if ( fn[ expando ] ) {
- return fn( argument );
- }
-
- // But maintain support for old signatures
- if ( fn.length > 1 ) {
- args = [ pseudo, pseudo, "", argument ];
- return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
- markFunction( function( seed, matches ) {
- var idx,
- matched = fn( seed, argument ),
- i = matched.length;
- while ( i-- ) {
- idx = indexOf( seed, matched[ i ] );
- seed[ idx ] = !( matches[ idx ] = matched[ i ] );
- }
- } ) :
- function( elem ) {
- return fn( elem, 0, args );
- };
- }
-
- return fn;
- }
- },
-
- pseudos: {
-
- // Potentially complex pseudos
- "not": markFunction( function( selector ) {
-
- // Trim the selector passed to compile
- // to avoid treating leading and trailing
- // spaces as combinators
- var input = [],
- results = [],
- matcher = compile( selector.replace( rtrim, "$1" ) );
-
- return matcher[ expando ] ?
- markFunction( function( seed, matches, _context, xml ) {
- var elem,
- unmatched = matcher( seed, null, xml, [] ),
- i = seed.length;
-
- // Match elements unmatched by `matcher`
- while ( i-- ) {
- if ( ( elem = unmatched[ i ] ) ) {
- seed[ i ] = !( matches[ i ] = elem );
- }
- }
- } ) :
- function( elem, _context, xml ) {
- input[ 0 ] = elem;
- matcher( input, null, xml, results );
-
- // Don't keep the element (issue #299)
- input[ 0 ] = null;
- return !results.pop();
- };
- } ),
-
- "has": markFunction( function( selector ) {
- return function( elem ) {
- return Sizzle( selector, elem ).length > 0;
- };
- } ),
-
- "contains": markFunction( function( text ) {
- text = text.replace( runescape, funescape );
- return function( elem ) {
- return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
- };
- } ),
-
- // "Whether an element is represented by a :lang() selector
- // is based solely on the element's language value
- // being equal to the identifier C,
- // or beginning with the identifier C immediately followed by "-".
- // The matching of C against the element's language value is performed case-insensitively.
- // The identifier C does not have to be a valid language name."
- // http://www.w3.org/TR/selectors/#lang-pseudo
- "lang": markFunction( function( lang ) {
-
- // lang value must be a valid identifier
- if ( !ridentifier.test( lang || "" ) ) {
- Sizzle.error( "unsupported lang: " + lang );
- }
- lang = lang.replace( runescape, funescape ).toLowerCase();
- return function( elem ) {
- var elemLang;
- do {
- if ( ( elemLang = documentIsHTML ?
- elem.lang :
- elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
-
- elemLang = elemLang.toLowerCase();
- return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
- }
- } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
- return false;
- };
- } ),
-
- // Miscellaneous
- "target": function( elem ) {
- var hash = window.location && window.location.hash;
- return hash && hash.slice( 1 ) === elem.id;
- },
-
- "root": function( elem ) {
- return elem === docElem;
- },
-
- "focus": function( elem ) {
- return elem === document.activeElement &&
- ( !document.hasFocus || document.hasFocus() ) &&
- !!( elem.type || elem.href || ~elem.tabIndex );
- },
-
- // Boolean properties
- "enabled": createDisabledPseudo( false ),
- "disabled": createDisabledPseudo( true ),
-
- "checked": function( elem ) {
-
- // In CSS3, :checked should return both checked and selected elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- var nodeName = elem.nodeName.toLowerCase();
- return ( nodeName === "input" && !!elem.checked ) ||
- ( nodeName === "option" && !!elem.selected );
- },
-
- "selected": function( elem ) {
-
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- // eslint-disable-next-line no-unused-expressions
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- // Contents
- "empty": function( elem ) {
-
- // http://www.w3.org/TR/selectors/#empty-pseudo
- // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
- // but not by others (comment: 8; processing instruction: 7; etc.)
- // nodeType < 6 works because attributes (2) do not appear as children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- if ( elem.nodeType < 6 ) {
- return false;
- }
- }
- return true;
- },
-
- "parent": function( elem ) {
- return !Expr.pseudos[ "empty" ]( elem );
- },
-
- // Element/input types
- "header": function( elem ) {
- return rheader.test( elem.nodeName );
- },
-
- "input": function( elem ) {
- return rinputs.test( elem.nodeName );
- },
-
- "button": function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === "button" || name === "button";
- },
-
- "text": function( elem ) {
- var attr;
- return elem.nodeName.toLowerCase() === "input" &&
- elem.type === "text" &&
-
- // Support: IE<8
- // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
- ( ( attr = elem.getAttribute( "type" ) ) == null ||
- attr.toLowerCase() === "text" );
- },
-
- // Position-in-collection
- "first": createPositionalPseudo( function() {
- return [ 0 ];
- } ),
-
- "last": createPositionalPseudo( function( _matchIndexes, length ) {
- return [ length - 1 ];
- } ),
-
- "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) {
- return [ argument < 0 ? argument + length : argument ];
- } ),
-
- "even": createPositionalPseudo( function( matchIndexes, length ) {
- var i = 0;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- } ),
-
- "odd": createPositionalPseudo( function( matchIndexes, length ) {
- var i = 1;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- } ),
-
- "lt": createPositionalPseudo( function( matchIndexes, length, argument ) {
- var i = argument < 0 ?
- argument + length :
- argument > length ?
- length :
- argument;
- for ( ; --i >= 0; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- } ),
-
- "gt": createPositionalPseudo( function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; ++i < length; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- } )
- }
-};
-
-Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ];
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
- Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
- Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
- var matched, match, tokens, type,
- soFar, groups, preFilters,
- cached = tokenCache[ selector + " " ];
-
- if ( cached ) {
- return parseOnly ? 0 : cached.slice( 0 );
- }
-
- soFar = selector;
- groups = [];
- preFilters = Expr.preFilter;
-
- while ( soFar ) {
-
- // Comma and first run
- if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
- if ( match ) {
-
- // Don't consume trailing commas as valid
- soFar = soFar.slice( match[ 0 ].length ) || soFar;
- }
- groups.push( ( tokens = [] ) );
- }
-
- matched = false;
-
- // Combinators
- if ( ( match = rcombinators.exec( soFar ) ) ) {
- matched = match.shift();
- tokens.push( {
- value: matched,
-
- // Cast descendant combinators to space
- type: match[ 0 ].replace( rtrim, " " )
- } );
- soFar = soFar.slice( matched.length );
- }
-
- // Filters
- for ( type in Expr.filter ) {
- if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
- ( match = preFilters[ type ]( match ) ) ) ) {
- matched = match.shift();
- tokens.push( {
- value: matched,
- type: type,
- matches: match
- } );
- soFar = soFar.slice( matched.length );
- }
- }
-
- if ( !matched ) {
- break;
- }
- }
-
- // Return the length of the invalid excess
- // if we're just parsing
- // Otherwise, throw an error or return tokens
- return parseOnly ?
- soFar.length :
- soFar ?
- Sizzle.error( selector ) :
-
- // Cache the tokens
- tokenCache( selector, groups ).slice( 0 );
-};
-
-function toSelector( tokens ) {
- var i = 0,
- len = tokens.length,
- selector = "";
- for ( ; i < len; i++ ) {
- selector += tokens[ i ].value;
- }
- return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
- var dir = combinator.dir,
- skip = combinator.next,
- key = skip || dir,
- checkNonElements = base && key === "parentNode",
- doneName = done++;
-
- return combinator.first ?
-
- // Check against closest ancestor/preceding element
- function( elem, context, xml ) {
- while ( ( elem = elem[ dir ] ) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- return matcher( elem, context, xml );
- }
- }
- return false;
- } :
-
- // Check against all ancestor/preceding elements
- function( elem, context, xml ) {
- var oldCache, uniqueCache, outerCache,
- newCache = [ dirruns, doneName ];
-
- // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
- if ( xml ) {
- while ( ( elem = elem[ dir ] ) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- if ( matcher( elem, context, xml ) ) {
- return true;
- }
- }
- }
- } else {
- while ( ( elem = elem[ dir ] ) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- outerCache = elem[ expando ] || ( elem[ expando ] = {} );
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ elem.uniqueID ] ||
- ( outerCache[ elem.uniqueID ] = {} );
-
- if ( skip && skip === elem.nodeName.toLowerCase() ) {
- elem = elem[ dir ] || elem;
- } else if ( ( oldCache = uniqueCache[ key ] ) &&
- oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
-
- // Assign to newCache so results back-propagate to previous elements
- return ( newCache[ 2 ] = oldCache[ 2 ] );
- } else {
-
- // Reuse newcache so results back-propagate to previous elements
- uniqueCache[ key ] = newCache;
-
- // A match means we're done; a fail means we have to keep checking
- if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
- return true;
- }
- }
- }
- }
- }
- return false;
- };
-}
-
-function elementMatcher( matchers ) {
- return matchers.length > 1 ?
- function( elem, context, xml ) {
- var i = matchers.length;
- while ( i-- ) {
- if ( !matchers[ i ]( elem, context, xml ) ) {
- return false;
- }
- }
- return true;
- } :
- matchers[ 0 ];
-}
-
-function multipleContexts( selector, contexts, results ) {
- var i = 0,
- len = contexts.length;
- for ( ; i < len; i++ ) {
- Sizzle( selector, contexts[ i ], results );
- }
- return results;
-}
-
-function condense( unmatched, map, filter, context, xml ) {
- var elem,
- newUnmatched = [],
- i = 0,
- len = unmatched.length,
- mapped = map != null;
-
- for ( ; i < len; i++ ) {
- if ( ( elem = unmatched[ i ] ) ) {
- if ( !filter || filter( elem, context, xml ) ) {
- newUnmatched.push( elem );
- if ( mapped ) {
- map.push( i );
- }
- }
- }
- }
-
- return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
- if ( postFilter && !postFilter[ expando ] ) {
- postFilter = setMatcher( postFilter );
- }
- if ( postFinder && !postFinder[ expando ] ) {
- postFinder = setMatcher( postFinder, postSelector );
- }
- return markFunction( function( seed, results, context, xml ) {
- var temp, i, elem,
- preMap = [],
- postMap = [],
- preexisting = results.length,
-
- // Get initial elements from seed or context
- elems = seed || multipleContexts(
- selector || "*",
- context.nodeType ? [ context ] : context,
- []
- ),
-
- // Prefilter to get matcher input, preserving a map for seed-results synchronization
- matcherIn = preFilter && ( seed || !selector ) ?
- condense( elems, preMap, preFilter, context, xml ) :
- elems,
-
- matcherOut = matcher ?
-
- // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
- postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
- // ...intermediate processing is necessary
- [] :
-
- // ...otherwise use results directly
- results :
- matcherIn;
-
- // Find primary matches
- if ( matcher ) {
- matcher( matcherIn, matcherOut, context, xml );
- }
-
- // Apply postFilter
- if ( postFilter ) {
- temp = condense( matcherOut, postMap );
- postFilter( temp, [], context, xml );
-
- // Un-match failing elements by moving them back to matcherIn
- i = temp.length;
- while ( i-- ) {
- if ( ( elem = temp[ i ] ) ) {
- matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
- }
- }
- }
-
- if ( seed ) {
- if ( postFinder || preFilter ) {
- if ( postFinder ) {
-
- // Get the final matcherOut by condensing this intermediate into postFinder contexts
- temp = [];
- i = matcherOut.length;
- while ( i-- ) {
- if ( ( elem = matcherOut[ i ] ) ) {
-
- // Restore matcherIn since elem is not yet a final match
- temp.push( ( matcherIn[ i ] = elem ) );
- }
- }
- postFinder( null, ( matcherOut = [] ), temp, xml );
- }
-
- // Move matched elements from seed to results to keep them synchronized
- i = matcherOut.length;
- while ( i-- ) {
- if ( ( elem = matcherOut[ i ] ) &&
- ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {
-
- seed[ temp ] = !( results[ temp ] = elem );
- }
- }
- }
-
- // Add elements to results, through postFinder if defined
- } else {
- matcherOut = condense(
- matcherOut === results ?
- matcherOut.splice( preexisting, matcherOut.length ) :
- matcherOut
- );
- if ( postFinder ) {
- postFinder( null, results, matcherOut, xml );
- } else {
- push.apply( results, matcherOut );
- }
- }
- } );
-}
-
-function matcherFromTokens( tokens ) {
- var checkContext, matcher, j,
- len = tokens.length,
- leadingRelative = Expr.relative[ tokens[ 0 ].type ],
- implicitRelative = leadingRelative || Expr.relative[ " " ],
- i = leadingRelative ? 1 : 0,
-
- // The foundational matcher ensures that elements are reachable from top-level context(s)
- matchContext = addCombinator( function( elem ) {
- return elem === checkContext;
- }, implicitRelative, true ),
- matchAnyContext = addCombinator( function( elem ) {
- return indexOf( checkContext, elem ) > -1;
- }, implicitRelative, true ),
- matchers = [ function( elem, context, xml ) {
- var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
- ( checkContext = context ).nodeType ?
- matchContext( elem, context, xml ) :
- matchAnyContext( elem, context, xml ) );
-
- // Avoid hanging onto element (issue #299)
- checkContext = null;
- return ret;
- } ];
-
- for ( ; i < len; i++ ) {
- if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
- matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
- } else {
- matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
-
- // Return special upon seeing a positional matcher
- if ( matcher[ expando ] ) {
-
- // Find the next relative operator (if any) for proper handling
- j = ++i;
- for ( ; j < len; j++ ) {
- if ( Expr.relative[ tokens[ j ].type ] ) {
- break;
- }
- }
- return setMatcher(
- i > 1 && elementMatcher( matchers ),
- i > 1 && toSelector(
-
- // If the preceding token was a descendant combinator, insert an implicit any-element `*`
- tokens
- .slice( 0, i - 1 )
- .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
- ).replace( rtrim, "$1" ),
- matcher,
- i < j && matcherFromTokens( tokens.slice( i, j ) ),
- j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
- j < len && toSelector( tokens )
- );
- }
- matchers.push( matcher );
- }
- }
-
- return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
- var bySet = setMatchers.length > 0,
- byElement = elementMatchers.length > 0,
- superMatcher = function( seed, context, xml, results, outermost ) {
- var elem, j, matcher,
- matchedCount = 0,
- i = "0",
- unmatched = seed && [],
- setMatched = [],
- contextBackup = outermostContext,
-
- // We must always have either seed elements or outermost context
- elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ),
-
- // Use integer dirruns iff this is the outermost matcher
- dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
- len = elems.length;
-
- if ( outermost ) {
-
- // Support: IE 11+, Edge 17 - 18+
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
- // two documents; shallow comparisons work.
- // eslint-disable-next-line eqeqeq
- outermostContext = context == document || context || outermost;
- }
-
- // Add elements passing elementMatchers directly to results
- // Support: IE<9, Safari
- // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
- for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
- if ( byElement && elem ) {
- j = 0;
-
- // Support: IE 11+, Edge 17 - 18+
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
- // two documents; shallow comparisons work.
- // eslint-disable-next-line eqeqeq
- if ( !context && elem.ownerDocument != document ) {
- setDocument( elem );
- xml = !documentIsHTML;
- }
- while ( ( matcher = elementMatchers[ j++ ] ) ) {
- if ( matcher( elem, context || document, xml ) ) {
- results.push( elem );
- break;
- }
- }
- if ( outermost ) {
- dirruns = dirrunsUnique;
- }
- }
-
- // Track unmatched elements for set filters
- if ( bySet ) {
-
- // They will have gone through all possible matchers
- if ( ( elem = !matcher && elem ) ) {
- matchedCount--;
- }
-
- // Lengthen the array for every element, matched or not
- if ( seed ) {
- unmatched.push( elem );
- }
- }
- }
-
- // `i` is now the count of elements visited above, and adding it to `matchedCount`
- // makes the latter nonnegative.
- matchedCount += i;
-
- // Apply set filters to unmatched elements
- // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
- // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
- // no element matchers and no seed.
- // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
- // case, which will result in a "00" `matchedCount` that differs from `i` but is also
- // numerically zero.
- if ( bySet && i !== matchedCount ) {
- j = 0;
- while ( ( matcher = setMatchers[ j++ ] ) ) {
- matcher( unmatched, setMatched, context, xml );
- }
-
- if ( seed ) {
-
- // Reintegrate element matches to eliminate the need for sorting
- if ( matchedCount > 0 ) {
- while ( i-- ) {
- if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
- setMatched[ i ] = pop.call( results );
- }
- }
- }
-
- // Discard index placeholder values to get only actual matches
- setMatched = condense( setMatched );
- }
-
- // Add matches to results
- push.apply( results, setMatched );
-
- // Seedless set matches succeeding multiple successful matchers stipulate sorting
- if ( outermost && !seed && setMatched.length > 0 &&
- ( matchedCount + setMatchers.length ) > 1 ) {
-
- Sizzle.uniqueSort( results );
- }
- }
-
- // Override manipulation of globals by nested matchers
- if ( outermost ) {
- dirruns = dirrunsUnique;
- outermostContext = contextBackup;
- }
-
- return unmatched;
- };
-
- return bySet ?
- markFunction( superMatcher ) :
- superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
- var i,
- setMatchers = [],
- elementMatchers = [],
- cached = compilerCache[ selector + " " ];
-
- if ( !cached ) {
-
- // Generate a function of recursive functions that can be used to check each element
- if ( !match ) {
- match = tokenize( selector );
- }
- i = match.length;
- while ( i-- ) {
- cached = matcherFromTokens( match[ i ] );
- if ( cached[ expando ] ) {
- setMatchers.push( cached );
- } else {
- elementMatchers.push( cached );
- }
- }
-
- // Cache the compiled function
- cached = compilerCache(
- selector,
- matcherFromGroupMatchers( elementMatchers, setMatchers )
- );
-
- // Save selector and tokenization
- cached.selector = selector;
- }
- return cached;
-};
-
-/**
- * A low-level selection function that works with Sizzle's compiled
- * selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- * selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
-select = Sizzle.select = function( selector, context, results, seed ) {
- var i, tokens, token, type, find,
- compiled = typeof selector === "function" && selector,
- match = !seed && tokenize( ( selector = compiled.selector || selector ) );
-
- results = results || [];
-
- // Try to minimize operations if there is only one selector in the list and no seed
- // (the latter of which guarantees us context)
- if ( match.length === 1 ) {
-
- // Reduce context if the leading compound selector is an ID
- tokens = match[ 0 ] = match[ 0 ].slice( 0 );
- if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
- context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
-
- context = ( Expr.find[ "ID" ]( token.matches[ 0 ]
- .replace( runescape, funescape ), context ) || [] )[ 0 ];
- if ( !context ) {
- return results;
-
- // Precompiled matchers will still verify ancestry, so step up a level
- } else if ( compiled ) {
- context = context.parentNode;
- }
-
- selector = selector.slice( tokens.shift().value.length );
- }
-
- // Fetch a seed set for right-to-left matching
- i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length;
- while ( i-- ) {
- token = tokens[ i ];
-
- // Abort if we hit a combinator
- if ( Expr.relative[ ( type = token.type ) ] ) {
- break;
- }
- if ( ( find = Expr.find[ type ] ) ) {
-
- // Search, expanding context for leading sibling combinators
- if ( ( seed = find(
- token.matches[ 0 ].replace( runescape, funescape ),
- rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||
- context
- ) ) ) {
-
- // If seed is empty or no tokens remain, we can return early
- tokens.splice( i, 1 );
- selector = seed.length && toSelector( tokens );
- if ( !selector ) {
- push.apply( results, seed );
- return results;
- }
-
- break;
- }
- }
- }
- }
-
- // Compile and execute a filtering function if one is not provided
- // Provide `match` to avoid retokenization if we modified the selector above
- ( compiled || compile( selector, match ) )(
- seed,
- context,
- !documentIsHTML,
- results,
- !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
- );
- return results;
-};
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
-
-// Support: Chrome 14-35+
-// Always assume duplicates if they aren't passed to the comparison function
-support.detectDuplicates = !!hasDuplicate;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
-// Detached nodes confoundingly follow *each other*
-support.sortDetached = assert( function( el ) {
-
- // Should return 1, but returns 4 (following)
- return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
-} );
-
-// Support: IE<8
-// Prevent attribute/property "interpolation"
-// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert( function( el ) {
- el.innerHTML = "<a href='#'></a>";
- return el.firstChild.getAttribute( "href" ) === "#";
-} ) ) {
- addHandle( "type|href|height|width", function( elem, name, isXML ) {
- if ( !isXML ) {
- return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
- }
- } );
-}
-
-// Support: IE<9
-// Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert( function( el ) {
- el.innerHTML = "<input/>";
- el.firstChild.setAttribute( "value", "" );
- return el.firstChild.getAttribute( "value" ) === "";
-} ) ) {
- addHandle( "value", function( elem, _name, isXML ) {
- if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
- return elem.defaultValue;
- }
- } );
-}
-
-// Support: IE<9
-// Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert( function( el ) {
- return el.getAttribute( "disabled" ) == null;
-} ) ) {
- addHandle( booleans, function( elem, name, isXML ) {
- var val;
- if ( !isXML ) {
- return elem[ name ] === true ? name.toLowerCase() :
- ( val = elem.getAttributeNode( name ) ) && val.specified ?
- val.value :
- null;
- }
- } );
-}
-
-return Sizzle;
-
-} )( window );
-
-
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-
-// Deprecated
-jQuery.expr[ ":" ] = jQuery.expr.pseudos;
-jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-jQuery.escapeSelector = Sizzle.escape;
-
-
-
-
-var dir = function( elem, dir, until ) {
- var matched = [],
- truncate = until !== undefined;
-
- while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
- if ( elem.nodeType === 1 ) {
- if ( truncate && jQuery( elem ).is( until ) ) {
- break;
- }
- matched.push( elem );
- }
- }
- return matched;
-};
-
-
-var siblings = function( n, elem ) {
- var matched = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- matched.push( n );
- }
- }
-
- return matched;
-};
-
-
-var rneedsContext = jQuery.expr.match.needsContext;
-
-
-
-function nodeName( elem, name ) {
-
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
-
-};
-var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
-
-
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
- if ( isFunction( qualifier ) ) {
- return jQuery.grep( elements, function( elem, i ) {
- return !!qualifier.call( elem, i, elem ) !== not;
- } );
- }
-
- // Single element
- if ( qualifier.nodeType ) {
- return jQuery.grep( elements, function( elem ) {
- return ( elem === qualifier ) !== not;
- } );
- }
-
- // Arraylike of elements (jQuery, arguments, Array)
- if ( typeof qualifier !== "string" ) {
- return jQuery.grep( elements, function( elem ) {
- return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
- } );
- }
-
- // Filtered directly for both simple and complex selectors
- return jQuery.filter( qualifier, elements, not );
-}
-
-jQuery.filter = function( expr, elems, not ) {
- var elem = elems[ 0 ];
-
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- if ( elems.length === 1 && elem.nodeType === 1 ) {
- return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
- }
-
- return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
- return elem.nodeType === 1;
- } ) );
-};
-
-jQuery.fn.extend( {
- find: function( selector ) {
- var i, ret,
- len = this.length,
- self = this;
-
- if ( typeof selector !== "string" ) {
- return this.pushStack( jQuery( selector ).filter( function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- } ) );
- }
-
- ret = this.pushStack( [] );
-
- for ( i = 0; i < len; i++ ) {
- jQuery.find( selector, self[ i ], ret );
- }
-
- return len > 1 ? jQuery.uniqueSort( ret ) : ret;
- },
- filter: function( selector ) {
- return this.pushStack( winnow( this, selector || [], false ) );
- },
- not: function( selector ) {
- return this.pushStack( winnow( this, selector || [], true ) );
- },
- is: function( selector ) {
- return !!winnow(
- this,
-
- // If this is a positional/relative selector, check membership in the returned set
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
- typeof selector === "string" && rneedsContext.test( selector ) ?
- jQuery( selector ) :
- selector || [],
- false
- ).length;
- }
-} );
-
-
-// Initialize a jQuery object
-
-
-// A central reference to the root jQuery(document)
-var rootjQuery,
-
- // A simple way to check for HTML strings
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
- // Strict HTML recognition (#11290: must start with <)
- // Shortcut simple #id case for speed
- rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
-
- init = jQuery.fn.init = function( selector, context, root ) {
- var match, elem;
-
- // HANDLE: $(""), $(null), $(undefined), $(false)
- if ( !selector ) {
- return this;
- }
-
- // Method init() accepts an alternate rootjQuery
- // so migrate can support jQuery.sub (gh-2101)
- root = root || rootjQuery;
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- if ( selector[ 0 ] === "<" &&
- selector[ selector.length - 1 ] === ">" &&
- selector.length >= 3 ) {
-
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = rquickExpr.exec( selector );
- }
-
- // Match html or make sure no context is specified for #id
- if ( match && ( match[ 1 ] || !context ) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[ 1 ] ) {
- context = context instanceof jQuery ? context[ 0 ] : context;
-
- // Option to run scripts is true for back-compat
- // Intentionally let the error be thrown if parseHTML is not present
- jQuery.merge( this, jQuery.parseHTML(
- match[ 1 ],
- context && context.nodeType ? context.ownerDocument || context : document,
- true
- ) );
-
- // HANDLE: $(html, props)
- if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
- for ( match in context ) {
-
- // Properties of context are called as methods if possible
- if ( isFunction( this[ match ] ) ) {
- this[ match ]( context[ match ] );
-
- // ...and otherwise set as attributes
- } else {
- this.attr( match, context[ match ] );
- }
- }
- }
-
- return this;
-
- // HANDLE: $(#id)
- } else {
- elem = document.getElementById( match[ 2 ] );
-
- if ( elem ) {
-
- // Inject the element directly into the jQuery object
- this[ 0 ] = elem;
- this.length = 1;
- }
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return ( context || root ).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(DOMElement)
- } else if ( selector.nodeType ) {
- this[ 0 ] = selector;
- this.length = 1;
- return this;
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( isFunction( selector ) ) {
- return root.ready !== undefined ?
- root.ready( selector ) :
-
- // Execute immediately if ready is not present
- selector( jQuery );
- }
-
- return jQuery.makeArray( selector, this );
- };
-
-// Give the init function the jQuery prototype for later instantiation
-init.prototype = jQuery.fn;
-
-// Initialize central reference
-rootjQuery = jQuery( document );
-
-
-var rparentsprev = /^(?:parents|prev(?:Until|All))/,
-
- // Methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.fn.extend( {
- has: function( target ) {
- var targets = jQuery( target, this ),
- l = targets.length;
-
- return this.filter( function() {
- var i = 0;
- for ( ; i < l; i++ ) {
- if ( jQuery.contains( this, targets[ i ] ) ) {
- return true;
- }
- }
- } );
- },
-
- closest: function( selectors, context ) {
- var cur,
- i = 0,
- l = this.length,
- matched = [],
- targets = typeof selectors !== "string" && jQuery( selectors );
-
- // Positional selectors never match, since there's no _selection_ context
- if ( !rneedsContext.test( selectors ) ) {
- for ( ; i < l; i++ ) {
- for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
-
- // Always skip document fragments
- if ( cur.nodeType < 11 && ( targets ?
- targets.index( cur ) > -1 :
-
- // Don't pass non-elements to Sizzle
- cur.nodeType === 1 &&
- jQuery.find.matchesSelector( cur, selectors ) ) ) {
-
- matched.push( cur );
- break;
- }
- }
- }
- }
-
- return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
- },
-
- // Determine the position of an element within the set
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
- }
-
- // Index in selector
- if ( typeof elem === "string" ) {
- return indexOf.call( jQuery( elem ), this[ 0 ] );
- }
-
- // Locate the position of the desired element
- return indexOf.call( this,
-
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[ 0 ] : elem
- );
- },
-
- add: function( selector, context ) {
- return this.pushStack(
- jQuery.uniqueSort(
- jQuery.merge( this.get(), jQuery( selector, context ) )
- )
- );
- },
-
- addBack: function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter( selector )
- );
- }
-} );
-
-function sibling( cur, dir ) {
- while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
- return cur;
-}
-
-jQuery.each( {
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, _i, until ) {
- return dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return sibling( elem, "nextSibling" );
- },
- prev: function( elem ) {
- return sibling( elem, "previousSibling" );
- },
- nextAll: function( elem ) {
- return dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, _i, until ) {
- return dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, _i, until ) {
- return dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return siblings( ( elem.parentNode || {} ).firstChild, elem );
- },
- children: function( elem ) {
- return siblings( elem.firstChild );
- },
- contents: function( elem ) {
- if ( elem.contentDocument != null &&
-
- // Support: IE 11+
- // <object> elements with no `data` attribute has an object
- // `contentDocument` with a `null` prototype.
- getProto( elem.contentDocument ) ) {
-
- return elem.contentDocument;
- }
-
- // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
- // Treat the template element as a regular one in browsers that
- // don't support it.
- if ( nodeName( elem, "template" ) ) {
- elem = elem.content || elem;
- }
-
- return jQuery.merge( [], elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var matched = jQuery.map( this, fn, until );
-
- if ( name.slice( -5 ) !== "Until" ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- matched = jQuery.filter( selector, matched );
- }
-
- if ( this.length > 1 ) {
-
- // Remove duplicates
- if ( !guaranteedUnique[ name ] ) {
- jQuery.uniqueSort( matched );
- }
-
- // Reverse order for parents* and prev-derivatives
- if ( rparentsprev.test( name ) ) {
- matched.reverse();
- }
- }
-
- return this.pushStack( matched );
- };
-} );
-var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
-
-
-
-// Convert String-formatted options into Object-formatted ones
-function createOptions( options ) {
- var object = {};
- jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
- object[ flag ] = true;
- } );
- return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- * options: an optional list of space-separated options that will change how
- * the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- * once: will ensure the callback list can only be fired once (like a Deferred)
- *
- * memory: will keep track of previous values and will call any callback added
- * after the list has been fired right away with the latest "memorized"
- * values (like a Deferred)
- *
- * unique: will ensure a callback can only be added once (no duplicate in the list)
- *
- * stopOnFalse: interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
- // Convert options from String-formatted to Object-formatted if needed
- // (we check in cache first)
- options = typeof options === "string" ?
- createOptions( options ) :
- jQuery.extend( {}, options );
-
- var // Flag to know if list is currently firing
- firing,
-
- // Last fire value for non-forgettable lists
- memory,
-
- // Flag to know if list was already fired
- fired,
-
- // Flag to prevent firing
- locked,
-
- // Actual callback list
- list = [],
-
- // Queue of execution data for repeatable lists
- queue = [],
-
- // Index of currently firing callback (modified by add/remove as needed)
- firingIndex = -1,
-
- // Fire callbacks
- fire = function() {
-
- // Enforce single-firing
- locked = locked || options.once;
-
- // Execute callbacks for all pending executions,
- // respecting firingIndex overrides and runtime changes
- fired = firing = true;
- for ( ; queue.length; firingIndex = -1 ) {
- memory = queue.shift();
- while ( ++firingIndex < list.length ) {
-
- // Run callback and check for early termination
- if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
- options.stopOnFalse ) {
-
- // Jump to end and forget the data so .add doesn't re-fire
- firingIndex = list.length;
- memory = false;
- }
- }
- }
-
- // Forget the data if we're done with it
- if ( !options.memory ) {
- memory = false;
- }
-
- firing = false;
-
- // Clean up if we're done firing for good
- if ( locked ) {
-
- // Keep an empty list if we have data for future add calls
- if ( memory ) {
- list = [];
-
- // Otherwise, this object is spent
- } else {
- list = "";
- }
- }
- },
-
- // Actual Callbacks object
- self = {
-
- // Add a callback or a collection of callbacks to the list
- add: function() {
- if ( list ) {
-
- // If we have memory from a past run, we should fire after adding
- if ( memory && !firing ) {
- firingIndex = list.length - 1;
- queue.push( memory );
- }
-
- ( function add( args ) {
- jQuery.each( args, function( _, arg ) {
- if ( isFunction( arg ) ) {
- if ( !options.unique || !self.has( arg ) ) {
- list.push( arg );
- }
- } else if ( arg && arg.length && toType( arg ) !== "string" ) {
-
- // Inspect recursively
- add( arg );
- }
- } );
- } )( arguments );
-
- if ( memory && !firing ) {
- fire();
- }
- }
- return this;
- },
-
- // Remove a callback from the list
- remove: function() {
- jQuery.each( arguments, function( _, arg ) {
- var index;
- while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
- list.splice( index, 1 );
-
- // Handle firing indexes
- if ( index <= firingIndex ) {
- firingIndex--;
- }
- }
- } );
- return this;
- },
-
- // Check if a given callback is in the list.
- // If no argument is given, return whether or not list has callbacks attached.
- has: function( fn ) {
- return fn ?
- jQuery.inArray( fn, list ) > -1 :
- list.length > 0;
- },
-
- // Remove all callbacks from the list
- empty: function() {
- if ( list ) {
- list = [];
- }
- return this;
- },
-
- // Disable .fire and .add
- // Abort any current/pending executions
- // Clear all callbacks and values
- disable: function() {
- locked = queue = [];
- list = memory = "";
- return this;
- },
- disabled: function() {
- return !list;
- },
-
- // Disable .fire
- // Also disable .add unless we have memory (since it would have no effect)
- // Abort any pending executions
- lock: function() {
- locked = queue = [];
- if ( !memory && !firing ) {
- list = memory = "";
- }
- return this;
- },
- locked: function() {
- return !!locked;
- },
-
- // Call all callbacks with the given context and arguments
- fireWith: function( context, args ) {
- if ( !locked ) {
- args = args || [];
- args = [ context, args.slice ? args.slice() : args ];
- queue.push( args );
- if ( !firing ) {
- fire();
- }
- }
- return this;
- },
-
- // Call all the callbacks with the given arguments
- fire: function() {
- self.fireWith( this, arguments );
- return this;
- },
-
- // To know if the callbacks have already been called at least once
- fired: function() {
- return !!fired;
- }
- };
-
- return self;
-};
-
-
-function Identity( v ) {
- return v;
-}
-function Thrower( ex ) {
- throw ex;
-}
-
-function adoptValue( value, resolve, reject, noValue ) {
- var method;
-
- try {
-
- // Check for promise aspect first to privilege synchronous behavior
- if ( value && isFunction( ( method = value.promise ) ) ) {
- method.call( value ).done( resolve ).fail( reject );
-
- // Other thenables
- } else if ( value && isFunction( ( method = value.then ) ) ) {
- method.call( value, resolve, reject );
-
- // Other non-thenables
- } else {
-
- // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
- // * false: [ value ].slice( 0 ) => resolve( value )
- // * true: [ value ].slice( 1 ) => resolve()
- resolve.apply( undefined, [ value ].slice( noValue ) );
- }
-
- // For Promises/A+, convert exceptions into rejections
- // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
- // Deferred#then to conditionally suppress rejection.
- } catch ( value ) {
-
- // Support: Android 4.0 only
- // Strict mode functions invoked without .call/.apply get global-object context
- reject.apply( undefined, [ value ] );
- }
-}
-
-jQuery.extend( {
-
- Deferred: function( func ) {
- var tuples = [
-
- // action, add listener, callbacks,
- // ... .then handlers, argument index, [final state]
- [ "notify", "progress", jQuery.Callbacks( "memory" ),
- jQuery.Callbacks( "memory" ), 2 ],
- [ "resolve", "done", jQuery.Callbacks( "once memory" ),
- jQuery.Callbacks( "once memory" ), 0, "resolved" ],
- [ "reject", "fail", jQuery.Callbacks( "once memory" ),
- jQuery.Callbacks( "once memory" ), 1, "rejected" ]
- ],
- state = "pending",
- promise = {
- state: function() {
- return state;
- },
- always: function() {
- deferred.done( arguments ).fail( arguments );
- return this;
- },
- "catch": function( fn ) {
- return promise.then( null, fn );
- },
-
- // Keep pipe for back-compat
- pipe: function( /* fnDone, fnFail, fnProgress */ ) {
- var fns = arguments;
-
- return jQuery.Deferred( function( newDefer ) {
- jQuery.each( tuples, function( _i, tuple ) {
-
- // Map tuples (progress, done, fail) to arguments (done, fail, progress)
- var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
-
- // deferred.progress(function() { bind to newDefer or newDefer.notify })
- // deferred.done(function() { bind to newDefer or newDefer.resolve })
- // deferred.fail(function() { bind to newDefer or newDefer.reject })
- deferred[ tuple[ 1 ] ]( function() {
- var returned = fn && fn.apply( this, arguments );
- if ( returned && isFunction( returned.promise ) ) {
- returned.promise()
- .progress( newDefer.notify )
- .done( newDefer.resolve )
- .fail( newDefer.reject );
- } else {
- newDefer[ tuple[ 0 ] + "With" ](
- this,
- fn ? [ returned ] : arguments
- );
- }
- } );
- } );
- fns = null;
- } ).promise();
- },
- then: function( onFulfilled, onRejected, onProgress ) {
- var maxDepth = 0;
- function resolve( depth, deferred, handler, special ) {
- return function() {
- var that = this,
- args = arguments,
- mightThrow = function() {
- var returned, then;
-
- // Support: Promises/A+ section 2.3.3.3.3
- // https://promisesaplus.com/#point-59
- // Ignore double-resolution attempts
- if ( depth < maxDepth ) {
- return;
- }
-
- returned = handler.apply( that, args );
-
- // Support: Promises/A+ section 2.3.1
- // https://promisesaplus.com/#point-48
- if ( returned === deferred.promise() ) {
- throw new TypeError( "Thenable self-resolution" );
- }
-
- // Support: Promises/A+ sections 2.3.3.1, 3.5
- // https://promisesaplus.com/#point-54
- // https://promisesaplus.com/#point-75
- // Retrieve `then` only once
- then = returned &&
-
- // Support: Promises/A+ section 2.3.4
- // https://promisesaplus.com/#point-64
- // Only check objects and functions for thenability
- ( typeof returned === "object" ||
- typeof returned === "function" ) &&
- returned.then;
-
- // Handle a returned thenable
- if ( isFunction( then ) ) {
-
- // Special processors (notify) just wait for resolution
- if ( special ) {
- then.call(
- returned,
- resolve( maxDepth, deferred, Identity, special ),
- resolve( maxDepth, deferred, Thrower, special )
- );
-
- // Normal processors (resolve) also hook into progress
- } else {
-
- // ...and disregard older resolution values
- maxDepth++;
-
- then.call(
- returned,
- resolve( maxDepth, deferred, Identity, special ),
- resolve( maxDepth, deferred, Thrower, special ),
- resolve( maxDepth, deferred, Identity,
- deferred.notifyWith )
- );
- }
-
- // Handle all other returned values
- } else {
-
- // Only substitute handlers pass on context
- // and multiple values (non-spec behavior)
- if ( handler !== Identity ) {
- that = undefined;
- args = [ returned ];
- }
-
- // Process the value(s)
- // Default process is resolve
- ( special || deferred.resolveWith )( that, args );
- }
- },
-
- // Only normal processors (resolve) catch and reject exceptions
- process = special ?
- mightThrow :
- function() {
- try {
- mightThrow();
- } catch ( e ) {
-
- if ( jQuery.Deferred.exceptionHook ) {
- jQuery.Deferred.exceptionHook( e,
- process.stackTrace );
- }
-
- // Support: Promises/A+ section 2.3.3.3.4.1
- // https://promisesaplus.com/#point-61
- // Ignore post-resolution exceptions
- if ( depth + 1 >= maxDepth ) {
-
- // Only substitute handlers pass on context
- // and multiple values (non-spec behavior)
- if ( handler !== Thrower ) {
- that = undefined;
- args = [ e ];
- }
-
- deferred.rejectWith( that, args );
- }
- }
- };
-
- // Support: Promises/A+ section 2.3.3.3.1
- // https://promisesaplus.com/#point-57
- // Re-resolve promises immediately to dodge false rejection from
- // subsequent errors
- if ( depth ) {
- process();
- } else {
-
- // Call an optional hook to record the stack, in case of exception
- // since it's otherwise lost when execution goes async
- if ( jQuery.Deferred.getStackHook ) {
- process.stackTrace = jQuery.Deferred.getStackHook();
- }
- window.setTimeout( process );
- }
- };
- }
-
- return jQuery.Deferred( function( newDefer ) {
-
- // progress_handlers.add( ... )
- tuples[ 0 ][ 3 ].add(
- resolve(
- 0,
- newDefer,
- isFunction( onProgress ) ?
- onProgress :
- Identity,
- newDefer.notifyWith
- )
- );
-
- // fulfilled_handlers.add( ... )
- tuples[ 1 ][ 3 ].add(
- resolve(
- 0,
- newDefer,
- isFunction( onFulfilled ) ?
- onFulfilled :
- Identity
- )
- );
-
- // rejected_handlers.add( ... )
- tuples[ 2 ][ 3 ].add(
- resolve(
- 0,
- newDefer,
- isFunction( onRejected ) ?
- onRejected :
- Thrower
- )
- );
- } ).promise();
- },
-
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- return obj != null ? jQuery.extend( obj, promise ) : promise;
- }
- },
- deferred = {};
-
- // Add list-specific methods
- jQuery.each( tuples, function( i, tuple ) {
- var list = tuple[ 2 ],
- stateString = tuple[ 5 ];
-
- // promise.progress = list.add
- // promise.done = list.add
- // promise.fail = list.add
- promise[ tuple[ 1 ] ] = list.add;
-
- // Handle state
- if ( stateString ) {
- list.add(
- function() {
-
- // state = "resolved" (i.e., fulfilled)
- // state = "rejected"
- state = stateString;
- },
-
- // rejected_callbacks.disable
- // fulfilled_callbacks.disable
- tuples[ 3 - i ][ 2 ].disable,
-
- // rejected_handlers.disable
- // fulfilled_handlers.disable
- tuples[ 3 - i ][ 3 ].disable,
-
- // progress_callbacks.lock
- tuples[ 0 ][ 2 ].lock,
-
- // progress_handlers.lock
- tuples[ 0 ][ 3 ].lock
- );
- }
-
- // progress_handlers.fire
- // fulfilled_handlers.fire
- // rejected_handlers.fire
- list.add( tuple[ 3 ].fire );
-
- // deferred.notify = function() { deferred.notifyWith(...) }
- // deferred.resolve = function() { deferred.resolveWith(...) }
- // deferred.reject = function() { deferred.rejectWith(...) }
- deferred[ tuple[ 0 ] ] = function() {
- deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
- return this;
- };
-
- // deferred.notifyWith = list.fireWith
- // deferred.resolveWith = list.fireWith
- // deferred.rejectWith = list.fireWith
- deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
- } );
-
- // Make the deferred a promise
- promise.promise( deferred );
-
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
-
- // All done!
- return deferred;
- },
-
- // Deferred helper
- when: function( singleValue ) {
- var
-
- // count of uncompleted subordinates
- remaining = arguments.length,
-
- // count of unprocessed arguments
- i = remaining,
-
- // subordinate fulfillment data
- resolveContexts = Array( i ),
- resolveValues = slice.call( arguments ),
-
- // the master Deferred
- master = jQuery.Deferred(),
-
- // subordinate callback factory
- updateFunc = function( i ) {
- return function( value ) {
- resolveContexts[ i ] = this;
- resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
- if ( !( --remaining ) ) {
- master.resolveWith( resolveContexts, resolveValues );
- }
- };
- };
-
- // Single- and empty arguments are adopted like Promise.resolve
- if ( remaining <= 1 ) {
- adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
- !remaining );
-
- // Use .then() to unwrap secondary thenables (cf. gh-3000)
- if ( master.state() === "pending" ||
- isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
-
- return master.then();
- }
- }
-
- // Multiple arguments are aggregated like Promise.all array elements
- while ( i-- ) {
- adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
- }
-
- return master.promise();
- }
-} );
-
-
-// These usually indicate a programmer mistake during development,
-// warn about them ASAP rather than swallowing them by default.
-var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
-
-jQuery.Deferred.exceptionHook = function( error, stack ) {
-
- // Support: IE 8 - 9 only
- // Console exists when dev tools are open, which can happen at any time
- if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
- window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
- }
-};
-
-
-
-
-jQuery.readyException = function( error ) {
- window.setTimeout( function() {
- throw error;
- } );
-};
-
-
-
-
-// The deferred used on DOM ready
-var readyList = jQuery.Deferred();
-
-jQuery.fn.ready = function( fn ) {
-
- readyList
- .then( fn )
-
- // Wrap jQuery.readyException in a function so that the lookup
- // happens at the time of error handling instead of callback
- // registration.
- .catch( function( error ) {
- jQuery.readyException( error );
- } );
-
- return this;
-};
-
-jQuery.extend( {
-
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Handle when the DOM is ready
- ready: function( wait ) {
-
- // Abort if there are pending holds or we're already ready
- if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
- return;
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.resolveWith( document, [ jQuery ] );
- }
-} );
-
-jQuery.ready.then = readyList.then;
-
-// The ready event handler and self cleanup method
-function completed() {
- document.removeEventListener( "DOMContentLoaded", completed );
- window.removeEventListener( "load", completed );
- jQuery.ready();
-}
-
-// Catch cases where $(document).ready() is called
-// after the browser event has already occurred.
-// Support: IE <=9 - 10 only
-// Older IE sometimes signals "interactive" too soon
-if ( document.readyState === "complete" ||
- ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
-
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- window.setTimeout( jQuery.ready );
-
-} else {
-
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", completed );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", completed );
-}
-
-
-
-
-// Multifunctional method to get and set values of a collection
-// The value/s can optionally be executed if it's a function
-var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
- var i = 0,
- len = elems.length,
- bulk = key == null;
-
- // Sets many values
- if ( toType( key ) === "object" ) {
- chainable = true;
- for ( i in key ) {
- access( elems, fn, i, key[ i ], true, emptyGet, raw );
- }
-
- // Sets one value
- } else if ( value !== undefined ) {
- chainable = true;
-
- if ( !isFunction( value ) ) {
- raw = true;
- }
-
- if ( bulk ) {
-
- // Bulk operations run against the entire set
- if ( raw ) {
- fn.call( elems, value );
- fn = null;
-
- // ...except when executing function values
- } else {
- bulk = fn;
- fn = function( elem, _key, value ) {
- return bulk.call( jQuery( elem ), value );
- };
- }
- }
-
- if ( fn ) {
- for ( ; i < len; i++ ) {
- fn(
- elems[ i ], key, raw ?
- value :
- value.call( elems[ i ], i, fn( elems[ i ], key ) )
- );
- }
- }
- }
-
- if ( chainable ) {
- return elems;
- }
-
- // Gets
- if ( bulk ) {
- return fn.call( elems );
- }
-
- return len ? fn( elems[ 0 ], key ) : emptyGet;
-};
-
-
-// Matches dashed string for camelizing
-var rmsPrefix = /^-ms-/,
- rdashAlpha = /-([a-z])/g;
-
-// Used by camelCase as callback to replace()
-function fcamelCase( _all, letter ) {
- return letter.toUpperCase();
-}
-
-// Convert dashed to camelCase; used by the css and data modules
-// Support: IE <=9 - 11, Edge 12 - 15
-// Microsoft forgot to hump their vendor prefix (#9572)
-function camelCase( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
-}
-var acceptData = function( owner ) {
-
- // Accepts only:
- // - Node
- // - Node.ELEMENT_NODE
- // - Node.DOCUMENT_NODE
- // - Object
- // - Any
- return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
-};
-
-
-
-
-function Data() {
- this.expando = jQuery.expando + Data.uid++;
-}
-
-Data.uid = 1;
-
-Data.prototype = {
-
- cache: function( owner ) {
-
- // Check if the owner object already has a cache
- var value = owner[ this.expando ];
-
- // If not, create one
- if ( !value ) {
- value = {};
-
- // We can accept data for non-element nodes in modern browsers,
- // but we should not, see #8335.
- // Always return an empty object.
- if ( acceptData( owner ) ) {
-
- // If it is a node unlikely to be stringify-ed or looped over
- // use plain assignment
- if ( owner.nodeType ) {
- owner[ this.expando ] = value;
-
- // Otherwise secure it in a non-enumerable property
- // configurable must be true to allow the property to be
- // deleted when data is removed
- } else {
- Object.defineProperty( owner, this.expando, {
- value: value,
- configurable: true
- } );
- }
- }
- }
-
- return value;
- },
- set: function( owner, data, value ) {
- var prop,
- cache = this.cache( owner );
-
- // Handle: [ owner, key, value ] args
- // Always use camelCase key (gh-2257)
- if ( typeof data === "string" ) {
- cache[ camelCase( data ) ] = value;
-
- // Handle: [ owner, { properties } ] args
- } else {
-
- // Copy the properties one-by-one to the cache object
- for ( prop in data ) {
- cache[ camelCase( prop ) ] = data[ prop ];
- }
- }
- return cache;
- },
- get: function( owner, key ) {
- return key === undefined ?
- this.cache( owner ) :
-
- // Always use camelCase key (gh-2257)
- owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
- },
- access: function( owner, key, value ) {
-
- // In cases where either:
- //
- // 1. No key was specified
- // 2. A string key was specified, but no value provided
- //
- // Take the "read" path and allow the get method to determine
- // which value to return, respectively either:
- //
- // 1. The entire cache object
- // 2. The data stored at the key
- //
- if ( key === undefined ||
- ( ( key && typeof key === "string" ) && value === undefined ) ) {
-
- return this.get( owner, key );
- }
-
- // When the key is not a string, or both a key and value
- // are specified, set or extend (existing objects) with either:
- //
- // 1. An object of properties
- // 2. A key and value
- //
- this.set( owner, key, value );
-
- // Since the "set" path can have two possible entry points
- // return the expected data based on which path was taken[*]
- return value !== undefined ? value : key;
- },
- remove: function( owner, key ) {
- var i,
- cache = owner[ this.expando ];
-
- if ( cache === undefined ) {
- return;
- }
-
- if ( key !== undefined ) {
-
- // Support array or space separated string of keys
- if ( Array.isArray( key ) ) {
-
- // If key is an array of keys...
- // We always set camelCase keys, so remove that.
- key = key.map( camelCase );
- } else {
- key = camelCase( key );
-
- // If a key with the spaces exists, use it.
- // Otherwise, create an array by matching non-whitespace
- key = key in cache ?
- [ key ] :
- ( key.match( rnothtmlwhite ) || [] );
- }
-
- i = key.length;
-
- while ( i-- ) {
- delete cache[ key[ i ] ];
- }
- }
-
- // Remove the expando if there's no more data
- if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
-
- // Support: Chrome <=35 - 45
- // Webkit & Blink performance suffers when deleting properties
- // from DOM nodes, so set to undefined instead
- // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
- if ( owner.nodeType ) {
- owner[ this.expando ] = undefined;
- } else {
- delete owner[ this.expando ];
- }
- }
- },
- hasData: function( owner ) {
- var cache = owner[ this.expando ];
- return cache !== undefined && !jQuery.isEmptyObject( cache );
- }
-};
-var dataPriv = new Data();
-
-var dataUser = new Data();
-
-
-
-// Implementation Summary
-//
-// 1. Enforce API surface and semantic compatibility with 1.9.x branch
-// 2. Improve the module's maintainability by reducing the storage
-// paths to a single mechanism.
-// 3. Use the same single mechanism to support "private" and "user" data.
-// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
-// 5. Avoid exposing implementation details on user objects (eg. expando properties)
-// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
-
-var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
- rmultiDash = /[A-Z]/g;
-
-function getData( data ) {
- if ( data === "true" ) {
- return true;
- }
-
- if ( data === "false" ) {
- return false;
- }
-
- if ( data === "null" ) {
- return null;
- }
-
- // Only convert to a number if it doesn't change the string
- if ( data === +data + "" ) {
- return +data;
- }
-
- if ( rbrace.test( data ) ) {
- return JSON.parse( data );
- }
-
- return data;
-}
-
-function dataAttr( elem, key, data ) {
- var name;
-
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
- name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = getData( data );
- } catch ( e ) {}
-
- // Make sure we set the data so it isn't changed later
- dataUser.set( elem, key, data );
- } else {
- data = undefined;
- }
- }
- return data;
-}
-
-jQuery.extend( {
- hasData: function( elem ) {
- return dataUser.hasData( elem ) || dataPriv.hasData( elem );
- },
-
- data: function( elem, name, data ) {
- return dataUser.access( elem, name, data );
- },
-
- removeData: function( elem, name ) {
- dataUser.remove( elem, name );
- },
-
- // TODO: Now that all calls to _data and _removeData have been replaced
- // with direct calls to dataPriv methods, these can be deprecated.
- _data: function( elem, name, data ) {
- return dataPriv.access( elem, name, data );
- },
-
- _removeData: function( elem, name ) {
- dataPriv.remove( elem, name );
- }
-} );
-
-jQuery.fn.extend( {
- data: function( key, value ) {
- var i, name, data,
- elem = this[ 0 ],
- attrs = elem && elem.attributes;
-
- // Gets all values
- if ( key === undefined ) {
- if ( this.length ) {
- data = dataUser.get( elem );
-
- if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
- i = attrs.length;
- while ( i-- ) {
-
- // Support: IE 11 only
- // The attrs elements can be null (#14894)
- if ( attrs[ i ] ) {
- name = attrs[ i ].name;
- if ( name.indexOf( "data-" ) === 0 ) {
- name = camelCase( name.slice( 5 ) );
- dataAttr( elem, name, data[ name ] );
- }
- }
- }
- dataPriv.set( elem, "hasDataAttrs", true );
- }
- }
-
- return data;
- }
-
- // Sets multiple values
- if ( typeof key === "object" ) {
- return this.each( function() {
- dataUser.set( this, key );
- } );
- }
-
- return access( this, function( value ) {
- var data;
-
- // The calling jQuery object (element matches) is not empty
- // (and therefore has an element appears at this[ 0 ]) and the
- // `value` parameter was not undefined. An empty jQuery object
- // will result in `undefined` for elem = this[ 0 ] which will
- // throw an exception if an attempt to read a data cache is made.
- if ( elem && value === undefined ) {
-
- // Attempt to get data from the cache
- // The key will always be camelCased in Data
- data = dataUser.get( elem, key );
- if ( data !== undefined ) {
- return data;
- }
-
- // Attempt to "discover" the data in
- // HTML5 custom data-* attrs
- data = dataAttr( elem, key );
- if ( data !== undefined ) {
- return data;
- }
-
- // We tried really hard, but the data doesn't exist.
- return;
- }
-
- // Set the data...
- this.each( function() {
-
- // We always store the camelCased key
- dataUser.set( this, key, value );
- } );
- }, null, value, arguments.length > 1, null, true );
- },
-
- removeData: function( key ) {
- return this.each( function() {
- dataUser.remove( this, key );
- } );
- }
-} );
-
-
-jQuery.extend( {
- queue: function( elem, type, data ) {
- var queue;
-
- if ( elem ) {
- type = ( type || "fx" ) + "queue";
- queue = dataPriv.get( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !queue || Array.isArray( data ) ) {
- queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
- } else {
- queue.push( data );
- }
- }
- return queue || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- startLength = queue.length,
- fn = queue.shift(),
- hooks = jQuery._queueHooks( elem, type ),
- next = function() {
- jQuery.dequeue( elem, type );
- };
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- startLength--;
- }
-
- if ( fn ) {
-
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift( "inprogress" );
- }
-
- // Clear up the last queue stop function
- delete hooks.stop;
- fn.call( elem, next, hooks );
- }
-
- if ( !startLength && hooks ) {
- hooks.empty.fire();
- }
- },
-
- // Not public - generate a queueHooks object, or return the current one
- _queueHooks: function( elem, type ) {
- var key = type + "queueHooks";
- return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
- empty: jQuery.Callbacks( "once memory" ).add( function() {
- dataPriv.remove( elem, [ type + "queue", key ] );
- } )
- } );
- }
-} );
-
-jQuery.fn.extend( {
- queue: function( type, data ) {
- var setter = 2;
-
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- setter--;
- }
-
- if ( arguments.length < setter ) {
- return jQuery.queue( this[ 0 ], type );
- }
-
- return data === undefined ?
- this :
- this.each( function() {
- var queue = jQuery.queue( this, type, data );
-
- // Ensure a hooks for this queue
- jQuery._queueHooks( this, type );
-
- if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- } );
- },
- dequeue: function( type ) {
- return this.each( function() {
- jQuery.dequeue( this, type );
- } );
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
-
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, obj ) {
- var tmp,
- count = 1,
- defer = jQuery.Deferred(),
- elements = this,
- i = this.length,
- resolve = function() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- };
-
- if ( typeof type !== "string" ) {
- obj = type;
- type = undefined;
- }
- type = type || "fx";
-
- while ( i-- ) {
- tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
- if ( tmp && tmp.empty ) {
- count++;
- tmp.empty.add( resolve );
- }
- }
- resolve();
- return defer.promise( obj );
- }
-} );
-var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
-
-var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
-
-
-var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
-
-var documentElement = document.documentElement;
-
-
-
- var isAttached = function( elem ) {
- return jQuery.contains( elem.ownerDocument, elem );
- },
- composed = { composed: true };
-
- // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
- // Check attachment across shadow DOM boundaries when possible (gh-3504)
- // Support: iOS 10.0-10.2 only
- // Early iOS 10 versions support `attachShadow` but not `getRootNode`,
- // leading to errors. We need to check for `getRootNode`.
- if ( documentElement.getRootNode ) {
- isAttached = function( elem ) {
- return jQuery.contains( elem.ownerDocument, elem ) ||
- elem.getRootNode( composed ) === elem.ownerDocument;
- };
- }
-var isHiddenWithinTree = function( elem, el ) {
-
- // isHiddenWithinTree might be called from jQuery#filter function;
- // in that case, element will be second argument
- elem = el || elem;
-
- // Inline style trumps all
- return elem.style.display === "none" ||
- elem.style.display === "" &&
-
- // Otherwise, check computed style
- // Support: Firefox <=43 - 45
- // Disconnected elements can have computed display: none, so first confirm that elem is
- // in the document.
- isAttached( elem ) &&
-
- jQuery.css( elem, "display" ) === "none";
- };
-
-
-
-function adjustCSS( elem, prop, valueParts, tween ) {
- var adjusted, scale,
- maxIterations = 20,
- currentValue = tween ?
- function() {
- return tween.cur();
- } :
- function() {
- return jQuery.css( elem, prop, "" );
- },
- initial = currentValue(),
- unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
- // Starting value computation is required for potential unit mismatches
- initialInUnit = elem.nodeType &&
- ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
- rcssNum.exec( jQuery.css( elem, prop ) );
-
- if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
-
- // Support: Firefox <=54
- // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
- initial = initial / 2;
-
- // Trust units reported by jQuery.css
- unit = unit || initialInUnit[ 3 ];
-
- // Iteratively approximate from a nonzero starting point
- initialInUnit = +initial || 1;
-
- while ( maxIterations-- ) {
-
- // Evaluate and update our best guess (doubling guesses that zero out).
- // Finish if the scale equals or crosses 1 (making the old*new product non-positive).
- jQuery.style( elem, prop, initialInUnit + unit );
- if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
- maxIterations = 0;
- }
- initialInUnit = initialInUnit / scale;
-
- }
-
- initialInUnit = initialInUnit * 2;
- jQuery.style( elem, prop, initialInUnit + unit );
-
- // Make sure we update the tween properties later on
- valueParts = valueParts || [];
- }
-
- if ( valueParts ) {
- initialInUnit = +initialInUnit || +initial || 0;
-
- // Apply relative offset (+=/-=) if specified
- adjusted = valueParts[ 1 ] ?
- initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
- +valueParts[ 2 ];
- if ( tween ) {
- tween.unit = unit;
- tween.start = initialInUnit;
- tween.end = adjusted;
- }
- }
- return adjusted;
-}
-
-
-var defaultDisplayMap = {};
-
-function getDefaultDisplay( elem ) {
- var temp,
- doc = elem.ownerDocument,
- nodeName = elem.nodeName,
- display = defaultDisplayMap[ nodeName ];
-
- if ( display ) {
- return display;
- }
-
- temp = doc.body.appendChild( doc.createElement( nodeName ) );
- display = jQuery.css( temp, "display" );
-
- temp.parentNode.removeChild( temp );
-
- if ( display === "none" ) {
- display = "block";
- }
- defaultDisplayMap[ nodeName ] = display;
-
- return display;
-}
-
-function showHide( elements, show ) {
- var display, elem,
- values = [],
- index = 0,
- length = elements.length;
-
- // Determine new display value for elements that need to change
- for ( ; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
-
- display = elem.style.display;
- if ( show ) {
-
- // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
- // check is required in this first loop unless we have a nonempty display value (either
- // inline or about-to-be-restored)
- if ( display === "none" ) {
- values[ index ] = dataPriv.get( elem, "display" ) || null;
- if ( !values[ index ] ) {
- elem.style.display = "";
- }
- }
- if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
- values[ index ] = getDefaultDisplay( elem );
- }
- } else {
- if ( display !== "none" ) {
- values[ index ] = "none";
-
- // Remember what we're overwriting
- dataPriv.set( elem, "display", display );
- }
- }
- }
-
- // Set the display of the elements in a second loop to avoid constant reflow
- for ( index = 0; index < length; index++ ) {
- if ( values[ index ] != null ) {
- elements[ index ].style.display = values[ index ];
- }
- }
-
- return elements;
-}
-
-jQuery.fn.extend( {
- show: function() {
- return showHide( this, true );
- },
- hide: function() {
- return showHide( this );
- },
- toggle: function( state ) {
- if ( typeof state === "boolean" ) {
- return state ? this.show() : this.hide();
- }
-
- return this.each( function() {
- if ( isHiddenWithinTree( this ) ) {
- jQuery( this ).show();
- } else {
- jQuery( this ).hide();
- }
- } );
- }
-} );
-var rcheckableType = ( /^(?:checkbox|radio)$/i );
-
-var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
-
-var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
-
-
-
-( function() {
- var fragment = document.createDocumentFragment(),
- div = fragment.appendChild( document.createElement( "div" ) ),
- input = document.createElement( "input" );
-
- // Support: Android 4.0 - 4.3 only
- // Check state lost if the name is set (#11217)
- // Support: Windows Web Apps (WWA)
- // `name` and `type` must use .setAttribute for WWA (#14901)
- input.setAttribute( "type", "radio" );
- input.setAttribute( "checked", "checked" );
- input.setAttribute( "name", "t" );
-
- div.appendChild( input );
-
- // Support: Android <=4.1 only
- // Older WebKit doesn't clone checked state correctly in fragments
- support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- // Support: IE <=11 only
- // Make sure textarea (and checkbox) defaultValue is properly cloned
- div.innerHTML = "<textarea>x</textarea>";
- support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
-
- // Support: IE <=9 only
- // IE <=9 replaces <option> tags with their contents when inserted outside of
- // the select element.
- div.innerHTML = "<option></option>";
- support.option = !!div.lastChild;
-} )();
-
-
-// We have to close these tags to support XHTML (#13200)
-var wrapMap = {
-
- // XHTML parsers do not magically insert elements in the
- // same way that tag soup parsers do. So we cannot shorten
- // this by omitting <tbody> or other required elements.
- thead: [ 1, "<table>", "</table>" ],
- col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
- _default: [ 0, "", "" ]
-};
-
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// Support: IE <=9 only
-if ( !support.option ) {
- wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
-}
-
-
-function getAll( context, tag ) {
-
- // Support: IE <=9 - 11 only
- // Use typeof to avoid zero-argument method invocation on host objects (#15151)
- var ret;
-
- if ( typeof context.getElementsByTagName !== "undefined" ) {
- ret = context.getElementsByTagName( tag || "*" );
-
- } else if ( typeof context.querySelectorAll !== "undefined" ) {
- ret = context.querySelectorAll( tag || "*" );
-
- } else {
- ret = [];
- }
-
- if ( tag === undefined || tag && nodeName( context, tag ) ) {
- return jQuery.merge( [ context ], ret );
- }
-
- return ret;
-}
-
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
- var i = 0,
- l = elems.length;
-
- for ( ; i < l; i++ ) {
- dataPriv.set(
- elems[ i ],
- "globalEval",
- !refElements || dataPriv.get( refElements[ i ], "globalEval" )
- );
- }
-}
-
-
-var rhtml = /<|&#?\w+;/;
-
-function buildFragment( elems, context, scripts, selection, ignored ) {
- var elem, tmp, tag, wrap, attached, j,
- fragment = context.createDocumentFragment(),
- nodes = [],
- i = 0,
- l = elems.length;
-
- for ( ; i < l; i++ ) {
- elem = elems[ i ];
-
- if ( elem || elem === 0 ) {
-
- // Add nodes directly
- if ( toType( elem ) === "object" ) {
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // push.apply(_, arraylike) throws on ancient WebKit
- jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
- // Convert non-html into a text node
- } else if ( !rhtml.test( elem ) ) {
- nodes.push( context.createTextNode( elem ) );
-
- // Convert html into DOM nodes
- } else {
- tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
-
- // Deserialize a standard representation
- tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
- wrap = wrapMap[ tag ] || wrapMap._default;
- tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
-
- // Descend through wrappers to the right content
- j = wrap[ 0 ];
- while ( j-- ) {
- tmp = tmp.lastChild;
- }
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // push.apply(_, arraylike) throws on ancient WebKit
- jQuery.merge( nodes, tmp.childNodes );
-
- // Remember the top-level container
- tmp = fragment.firstChild;
-
- // Ensure the created nodes are orphaned (#12392)
- tmp.textContent = "";
- }
- }
- }
-
- // Remove wrapper from fragment
- fragment.textContent = "";
-
- i = 0;
- while ( ( elem = nodes[ i++ ] ) ) {
-
- // Skip elements already in the context collection (trac-4087)
- if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
- if ( ignored ) {
- ignored.push( elem );
- }
- continue;
- }
-
- attached = isAttached( elem );
-
- // Append to fragment
- tmp = getAll( fragment.appendChild( elem ), "script" );
-
- // Preserve script evaluation history
- if ( attached ) {
- setGlobalEval( tmp );
- }
-
- // Capture executables
- if ( scripts ) {
- j = 0;
- while ( ( elem = tmp[ j++ ] ) ) {
- if ( rscriptType.test( elem.type || "" ) ) {
- scripts.push( elem );
- }
- }
- }
- }
-
- return fragment;
-}
-
-
-var
- rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
- rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
-
-function returnTrue() {
- return true;
-}
-
-function returnFalse() {
- return false;
-}
-
-// Support: IE <=9 - 11+
-// focus() and blur() are asynchronous, except when they are no-op.
-// So expect focus to be synchronous when the element is already active,
-// and blur to be synchronous when the element is not already active.
-// (focus and blur are always synchronous in other supported browsers,
-// this just defines when we can count on it).
-function expectSync( elem, type ) {
- return ( elem === safeActiveElement() ) === ( type === "focus" );
-}
-
-// Support: IE <=9 only
-// Accessing document.activeElement can throw unexpectedly
-// https://bugs.jquery.com/ticket/13393
-function safeActiveElement() {
- try {
- return document.activeElement;
- } catch ( err ) { }
-}
-
-function on( elem, types, selector, data, fn, one ) {
- var origFn, type;
-
- // Types can be a map of types/handlers
- if ( typeof types === "object" ) {
-
- // ( types-Object, selector, data )
- if ( typeof selector !== "string" ) {
-
- // ( types-Object, data )
- data = data || selector;
- selector = undefined;
- }
- for ( type in types ) {
- on( elem, type, selector, data, types[ type ], one );
- }
- return elem;
- }
-
- if ( data == null && fn == null ) {
-
- // ( types, fn )
- fn = selector;
- data = selector = undefined;
- } else if ( fn == null ) {
- if ( typeof selector === "string" ) {
-
- // ( types, selector, fn )
- fn = data;
- data = undefined;
- } else {
-
- // ( types, data, fn )
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if ( fn === false ) {
- fn = returnFalse;
- } else if ( !fn ) {
- return elem;
- }
-
- if ( one === 1 ) {
- origFn = fn;
- fn = function( event ) {
-
- // Can use an empty set, since event contains the info
- jQuery().off( event );
- return origFn.apply( this, arguments );
- };
-
- // Use same guid so caller can remove using origFn
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
- }
- return elem.each( function() {
- jQuery.event.add( this, types, fn, data, selector );
- } );
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
- global: {},
-
- add: function( elem, types, handler, data, selector ) {
-
- var handleObjIn, eventHandle, tmp,
- events, t, handleObj,
- special, handlers, type, namespaces, origType,
- elemData = dataPriv.get( elem );
-
- // Only attach events to objects that accept data
- if ( !acceptData( elem ) ) {
- return;
- }
-
- // Caller can pass in an object of custom data in lieu of the handler
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- selector = handleObjIn.selector;
- }
-
- // Ensure that invalid selectors throw exceptions at attach time
- // Evaluate against documentElement in case elem is a non-element node (e.g., document)
- if ( selector ) {
- jQuery.find.matchesSelector( documentElement, selector );
- }
-
- // Make sure that the handler has a unique ID, used to find/remove it later
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure and main handler, if this is the first
- if ( !( events = elemData.events ) ) {
- events = elemData.events = Object.create( null );
- }
- if ( !( eventHandle = elemData.handle ) ) {
- eventHandle = elemData.handle = function( e ) {
-
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
- jQuery.event.dispatch.apply( elem, arguments ) : undefined;
- };
- }
-
- // Handle multiple events separated by a space
- types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[ t ] ) || [];
- type = origType = tmp[ 1 ];
- namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
-
- // There *must* be a type, no attaching namespace-only handlers
- if ( !type ) {
- continue;
- }
-
- // If event changes its type, use the special event handlers for the changed type
- special = jQuery.event.special[ type ] || {};
-
- // If selector defined, determine special event api type, otherwise given type
- type = ( selector ? special.delegateType : special.bindType ) || type;
-
- // Update special based on newly reset type
- special = jQuery.event.special[ type ] || {};
-
- // handleObj is passed to all event handlers
- handleObj = jQuery.extend( {
- type: type,
- origType: origType,
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
- namespace: namespaces.join( "." )
- }, handleObjIn );
-
- // Init the event handler queue if we're the first
- if ( !( handlers = events[ type ] ) ) {
- handlers = events[ type ] = [];
- handlers.delegateCount = 0;
-
- // Only use addEventListener if the special events handler returns false
- if ( !special.setup ||
- special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add to the element's handler list, delegates in front
- if ( selector ) {
- handlers.splice( handlers.delegateCount++, 0, handleObj );
- } else {
- handlers.push( handleObj );
- }
-
- // Keep track of which events have ever been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- },
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, selector, mappedTypes ) {
-
- var j, origCount, tmp,
- events, t, handleObj,
- special, handlers, type, namespaces, origType,
- elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
-
- if ( !elemData || !( events = elemData.events ) ) {
- return;
- }
-
- // Once for each type.namespace in types; type may be omitted
- types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[ t ] ) || [];
- type = origType = tmp[ 1 ];
- namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
-
- // Unbind all events (on this namespace, if provided) for the element
- if ( !type ) {
- for ( type in events ) {
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
- }
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
- type = ( selector ? special.delegateType : special.bindType ) || type;
- handlers = events[ type ] || [];
- tmp = tmp[ 2 ] &&
- new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
-
- // Remove matching events
- origCount = j = handlers.length;
- while ( j-- ) {
- handleObj = handlers[ j ];
-
- if ( ( mappedTypes || origType === handleObj.origType ) &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !tmp || tmp.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector ||
- selector === "**" && handleObj.selector ) ) {
- handlers.splice( j, 1 );
-
- if ( handleObj.selector ) {
- handlers.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
- }
-
- // Remove generic event handler if we removed something and no more handlers exist
- // (avoids potential for endless recursion during removal of special event handlers)
- if ( origCount && !handlers.length ) {
- if ( !special.teardown ||
- special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
-
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- delete events[ type ];
- }
- }
-
- // Remove data and the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- dataPriv.remove( elem, "handle events" );
- }
- },
-
- dispatch: function( nativeEvent ) {
-
- var i, j, ret, matched, handleObj, handlerQueue,
- args = new Array( arguments.length ),
-
- // Make a writable jQuery.Event from the native event object
- event = jQuery.event.fix( nativeEvent ),
-
- handlers = (
- dataPriv.get( this, "events" ) || Object.create( null )
- )[ event.type ] || [],
- special = jQuery.event.special[ event.type ] || {};
-
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[ 0 ] = event;
-
- for ( i = 1; i < arguments.length; i++ ) {
- args[ i ] = arguments[ i ];
- }
-
- event.delegateTarget = this;
-
- // Call the preDispatch hook for the mapped type, and let it bail if desired
- if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
- return;
- }
-
- // Determine handlers
- handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
- // Run delegates first; they may want to stop propagation beneath us
- i = 0;
- while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
- event.currentTarget = matched.elem;
-
- j = 0;
- while ( ( handleObj = matched.handlers[ j++ ] ) &&
- !event.isImmediatePropagationStopped() ) {
-
- // If the event is namespaced, then each handler is only invoked if it is
- // specially universal or its namespaces are a superset of the event's.
- if ( !event.rnamespace || handleObj.namespace === false ||
- event.rnamespace.test( handleObj.namespace ) ) {
-
- event.handleObj = handleObj;
- event.data = handleObj.data;
-
- ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
- handleObj.handler ).apply( matched.elem, args );
-
- if ( ret !== undefined ) {
- if ( ( event.result = ret ) === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- // Call the postDispatch hook for the mapped type
- if ( special.postDispatch ) {
- special.postDispatch.call( this, event );
- }
-
- return event.result;
- },
-
- handlers: function( event, handlers ) {
- var i, handleObj, sel, matchedHandlers, matchedSelectors,
- handlerQueue = [],
- delegateCount = handlers.delegateCount,
- cur = event.target;
-
- // Find delegate handlers
- if ( delegateCount &&
-
- // Support: IE <=9
- // Black-hole SVG <use> instance trees (trac-13180)
- cur.nodeType &&
-
- // Support: Firefox <=42
- // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
- // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
- // Support: IE 11 only
- // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
- !( event.type === "click" && event.button >= 1 ) ) {
-
- for ( ; cur !== this; cur = cur.parentNode || this ) {
-
- // Don't check non-elements (#13208)
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
- if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
- matchedHandlers = [];
- matchedSelectors = {};
- for ( i = 0; i < delegateCount; i++ ) {
- handleObj = handlers[ i ];
-
- // Don't conflict with Object.prototype properties (#13203)
- sel = handleObj.selector + " ";
-
- if ( matchedSelectors[ sel ] === undefined ) {
- matchedSelectors[ sel ] = handleObj.needsContext ?
- jQuery( sel, this ).index( cur ) > -1 :
- jQuery.find( sel, this, null, [ cur ] ).length;
- }
- if ( matchedSelectors[ sel ] ) {
- matchedHandlers.push( handleObj );
- }
- }
- if ( matchedHandlers.length ) {
- handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
- }
- }
- }
- }
-
- // Add the remaining (directly-bound) handlers
- cur = this;
- if ( delegateCount < handlers.length ) {
- handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
- }
-
- return handlerQueue;
- },
-
- addProp: function( name, hook ) {
- Object.defineProperty( jQuery.Event.prototype, name, {
- enumerable: true,
- configurable: true,
-
- get: isFunction( hook ) ?
- function() {
- if ( this.originalEvent ) {
- return hook( this.originalEvent );
- }
- } :
- function() {
- if ( this.originalEvent ) {
- return this.originalEvent[ name ];
- }
- },
-
- set: function( value ) {
- Object.defineProperty( this, name, {
- enumerable: true,
- configurable: true,
- writable: true,
- value: value
- } );
- }
- } );
- },
-
- fix: function( originalEvent ) {
- return originalEvent[ jQuery.expando ] ?
- originalEvent :
- new jQuery.Event( originalEvent );
- },
-
- special: {
- load: {
-
- // Prevent triggered image.load events from bubbling to window.load
- noBubble: true
- },
- click: {
-
- // Utilize native event to ensure correct state for checkable inputs
- setup: function( data ) {
-
- // For mutual compressibility with _default, replace `this` access with a local var.
- // `|| data` is dead code meant only to preserve the variable through minification.
- var el = this || data;
-
- // Claim the first handler
- if ( rcheckableType.test( el.type ) &&
- el.click && nodeName( el, "input" ) ) {
-
- // dataPriv.set( el, "click", ... )
- leverageNative( el, "click", returnTrue );
- }
-
- // Return false to allow normal processing in the caller
- return false;
- },
- trigger: function( data ) {
-
- // For mutual compressibility with _default, replace `this` access with a local var.
- // `|| data` is dead code meant only to preserve the variable through minification.
- var el = this || data;
-
- // Force setup before triggering a click
- if ( rcheckableType.test( el.type ) &&
- el.click && nodeName( el, "input" ) ) {
-
- leverageNative( el, "click" );
- }
-
- // Return non-false to allow normal event-path propagation
- return true;
- },
-
- // For cross-browser consistency, suppress native .click() on links
- // Also prevent it if we're currently inside a leveraged native-event stack
- _default: function( event ) {
- var target = event.target;
- return rcheckableType.test( target.type ) &&
- target.click && nodeName( target, "input" ) &&
- dataPriv.get( target, "click" ) ||
- nodeName( target, "a" );
- }
- },
-
- beforeunload: {
- postDispatch: function( event ) {
-
- // Support: Firefox 20+
- // Firefox doesn't alert if the returnValue field is not set.
- if ( event.result !== undefined && event.originalEvent ) {
- event.originalEvent.returnValue = event.result;
- }
- }
- }
- }
-};
-
-// Ensure the presence of an event listener that handles manually-triggered
-// synthetic events by interrupting progress until reinvoked in response to
-// *native* events that it fires directly, ensuring that state changes have
-// already occurred before other listeners are invoked.
-function leverageNative( el, type, expectSync ) {
-
- // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
- if ( !expectSync ) {
- if ( dataPriv.get( el, type ) === undefined ) {
- jQuery.event.add( el, type, returnTrue );
- }
- return;
- }
-
- // Register the controller as a special universal handler for all event namespaces
- dataPriv.set( el, type, false );
- jQuery.event.add( el, type, {
- namespace: false,
- handler: function( event ) {
- var notAsync, result,
- saved = dataPriv.get( this, type );
-
- if ( ( event.isTrigger & 1 ) && this[ type ] ) {
-
- // Interrupt processing of the outer synthetic .trigger()ed event
- // Saved data should be false in such cases, but might be a leftover capture object
- // from an async native handler (gh-4350)
- if ( !saved.length ) {
-
- // Store arguments for use when handling the inner native event
- // There will always be at least one argument (an event object), so this array
- // will not be confused with a leftover capture object.
- saved = slice.call( arguments );
- dataPriv.set( this, type, saved );
-
- // Trigger the native event and capture its result
- // Support: IE <=9 - 11+
- // focus() and blur() are asynchronous
- notAsync = expectSync( this, type );
- this[ type ]();
- result = dataPriv.get( this, type );
- if ( saved !== result || notAsync ) {
- dataPriv.set( this, type, false );
- } else {
- result = {};
- }
- if ( saved !== result ) {
-
- // Cancel the outer synthetic event
- event.stopImmediatePropagation();
- event.preventDefault();
- return result.value;
- }
-
- // If this is an inner synthetic event for an event with a bubbling surrogate
- // (focus or blur), assume that the surrogate already propagated from triggering the
- // native event and prevent that from happening again here.
- // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
- // bubbling surrogate propagates *after* the non-bubbling base), but that seems
- // less bad than duplication.
- } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
- event.stopPropagation();
- }
-
- // If this is a native event triggered above, everything is now in order
- // Fire an inner synthetic event with the original arguments
- } else if ( saved.length ) {
-
- // ...and capture the result
- dataPriv.set( this, type, {
- value: jQuery.event.trigger(
-
- // Support: IE <=9 - 11+
- // Extend with the prototype to reset the above stopImmediatePropagation()
- jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
- saved.slice( 1 ),
- this
- )
- } );
-
- // Abort handling of the native event
- event.stopImmediatePropagation();
- }
- }
- } );
-}
-
-jQuery.removeEvent = function( elem, type, handle ) {
-
- // This "if" is needed for plain objects
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle );
- }
-};
-
-jQuery.Event = function( src, props ) {
-
- // Allow instantiation without the 'new' keyword
- if ( !( this instanceof jQuery.Event ) ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = src.defaultPrevented ||
- src.defaultPrevented === undefined &&
-
- // Support: Android <=2.3 only
- src.returnValue === false ?
- returnTrue :
- returnFalse;
-
- // Create target properties
- // Support: Safari <=6 - 7 only
- // Target should not be a text node (#504, #13143)
- this.target = ( src.target && src.target.nodeType === 3 ) ?
- src.target.parentNode :
- src.target;
-
- this.currentTarget = src.currentTarget;
- this.relatedTarget = src.relatedTarget;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || Date.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- constructor: jQuery.Event,
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse,
- isSimulated: false,
-
- preventDefault: function() {
- var e = this.originalEvent;
-
- this.isDefaultPrevented = returnTrue;
-
- if ( e && !this.isSimulated ) {
- e.preventDefault();
- }
- },
- stopPropagation: function() {
- var e = this.originalEvent;
-
- this.isPropagationStopped = returnTrue;
-
- if ( e && !this.isSimulated ) {
- e.stopPropagation();
- }
- },
- stopImmediatePropagation: function() {
- var e = this.originalEvent;
-
- this.isImmediatePropagationStopped = returnTrue;
-
- if ( e && !this.isSimulated ) {
- e.stopImmediatePropagation();
- }
-
- this.stopPropagation();
- }
-};
-
-// Includes all common event props including KeyEvent and MouseEvent specific props
-jQuery.each( {
- altKey: true,
- bubbles: true,
- cancelable: true,
- changedTouches: true,
- ctrlKey: true,
- detail: true,
- eventPhase: true,
- metaKey: true,
- pageX: true,
- pageY: true,
- shiftKey: true,
- view: true,
- "char": true,
- code: true,
- charCode: true,
- key: true,
- keyCode: true,
- button: true,
- buttons: true,
- clientX: true,
- clientY: true,
- offsetX: true,
- offsetY: true,
- pointerId: true,
- pointerType: true,
- screenX: true,
- screenY: true,
- targetTouches: true,
- toElement: true,
- touches: true,
-
- which: function( event ) {
- var button = event.button;
-
- // Add which for key events
- if ( event.which == null && rkeyEvent.test( event.type ) ) {
- return event.charCode != null ? event.charCode : event.keyCode;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
- if ( button & 1 ) {
- return 1;
- }
-
- if ( button & 2 ) {
- return 3;
- }
-
- if ( button & 4 ) {
- return 2;
- }
-
- return 0;
- }
-
- return event.which;
- }
-}, jQuery.event.addProp );
-
-jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
- jQuery.event.special[ type ] = {
-
- // Utilize native event if possible so blur/focus sequence is correct
- setup: function() {
-
- // Claim the first handler
- // dataPriv.set( this, "focus", ... )
- // dataPriv.set( this, "blur", ... )
- leverageNative( this, type, expectSync );
-
- // Return false to allow normal processing in the caller
- return false;
- },
- trigger: function() {
-
- // Force setup before trigger
- leverageNative( this, type );
-
- // Return non-false to allow normal event-path propagation
- return true;
- },
-
- delegateType: delegateType
- };
-} );
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-// so that event delegation works in jQuery.
-// Do the same for pointerenter/pointerleave and pointerover/pointerout
-//
-// Support: Safari 7 only
-// Safari sends mouseenter too often; see:
-// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
-// for the description of the bug (it existed in older Chrome versions as well).
-jQuery.each( {
- mouseenter: "mouseover",
- mouseleave: "mouseout",
- pointerenter: "pointerover",
- pointerleave: "pointerout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- delegateType: fix,
- bindType: fix,
-
- handle: function( event ) {
- var ret,
- target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj;
-
- // For mouseenter/leave call the handler if related is outside the target.
- // NB: No relatedTarget if the mouse left/entered the browser window
- if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
- event.type = handleObj.origType;
- ret = handleObj.handler.apply( this, arguments );
- event.type = fix;
- }
- return ret;
- }
- };
-} );
-
-jQuery.fn.extend( {
-
- on: function( types, selector, data, fn ) {
- return on( this, types, selector, data, fn );
- },
- one: function( types, selector, data, fn ) {
- return on( this, types, selector, data, fn, 1 );
- },
- off: function( types, selector, fn ) {
- var handleObj, type;
- if ( types && types.preventDefault && types.handleObj ) {
-
- // ( event ) dispatched jQuery.Event
- handleObj = types.handleObj;
- jQuery( types.delegateTarget ).off(
- handleObj.namespace ?
- handleObj.origType + "." + handleObj.namespace :
- handleObj.origType,
- handleObj.selector,
- handleObj.handler
- );
- return this;
- }
- if ( typeof types === "object" ) {
-
- // ( types-object [, selector] )
- for ( type in types ) {
- this.off( type, selector, types[ type ] );
- }
- return this;
- }
- if ( selector === false || typeof selector === "function" ) {
-
- // ( types [, fn] )
- fn = selector;
- selector = undefined;
- }
- if ( fn === false ) {
- fn = returnFalse;
- }
- return this.each( function() {
- jQuery.event.remove( this, types, fn, selector );
- } );
- }
-} );
-
-
-var
-
- // Support: IE <=10 - 11, Edge 12 - 13 only
- // In IE/Edge using regex groups here causes severe slowdowns.
- // See https://connect.microsoft.com/IE/feedback/details/1736512/
- rnoInnerhtml = /<script|<style|<link/i,
-
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
-
-// Prefer a tbody over its parent table for containing new rows
-function manipulationTarget( elem, content ) {
- if ( nodeName( elem, "table" ) &&
- nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
-
- return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
- }
-
- return elem;
-}
-
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
- elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
- return elem;
-}
-function restoreScript( elem ) {
- if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
- elem.type = elem.type.slice( 5 );
- } else {
- elem.removeAttribute( "type" );
- }
-
- return elem;
-}
-
-function cloneCopyEvent( src, dest ) {
- var i, l, type, pdataOld, udataOld, udataCur, events;
-
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- // 1. Copy private data: events, handlers, etc.
- if ( dataPriv.hasData( src ) ) {
- pdataOld = dataPriv.get( src );
- events = pdataOld.events;
-
- if ( events ) {
- dataPriv.remove( dest, "handle events" );
-
- for ( type in events ) {
- for ( i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type, events[ type ][ i ] );
- }
- }
- }
- }
-
- // 2. Copy user data
- if ( dataUser.hasData( src ) ) {
- udataOld = dataUser.access( src );
- udataCur = jQuery.extend( {}, udataOld );
-
- dataUser.set( dest, udataCur );
- }
-}
-
-// Fix IE bugs, see support tests
-function fixInput( src, dest ) {
- var nodeName = dest.nodeName.toLowerCase();
-
- // Fails to persist the checked state of a cloned checkbox or radio button.
- if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
- dest.checked = src.checked;
-
- // Fails to return the selected option to the default selected state when cloning options
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
- }
-}
-
-function domManip( collection, args, callback, ignored ) {
-
- // Flatten any nested arrays
- args = flat( args );
-
- var fragment, first, scripts, hasScripts, node, doc,
- i = 0,
- l = collection.length,
- iNoClone = l - 1,
- value = args[ 0 ],
- valueIsFunction = isFunction( value );
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( valueIsFunction ||
- ( l > 1 && typeof value === "string" &&
- !support.checkClone && rchecked.test( value ) ) ) {
- return collection.each( function( index ) {
- var self = collection.eq( index );
- if ( valueIsFunction ) {
- args[ 0 ] = value.call( this, index, self.html() );
- }
- domManip( self, args, callback, ignored );
- } );
- }
-
- if ( l ) {
- fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
- first = fragment.firstChild;
-
- if ( fragment.childNodes.length === 1 ) {
- fragment = first;
- }
-
- // Require either new content or an interest in ignored elements to invoke the callback
- if ( first || ignored ) {
- scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
- hasScripts = scripts.length;
-
- // Use the original fragment for the last item
- // instead of the first because it can end up
- // being emptied incorrectly in certain situations (#8070).
- for ( ; i < l; i++ ) {
- node = fragment;
-
- if ( i !== iNoClone ) {
- node = jQuery.clone( node, true, true );
-
- // Keep references to cloned scripts for later restoration
- if ( hasScripts ) {
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // push.apply(_, arraylike) throws on ancient WebKit
- jQuery.merge( scripts, getAll( node, "script" ) );
- }
- }
-
- callback.call( collection[ i ], node, i );
- }
-
- if ( hasScripts ) {
- doc = scripts[ scripts.length - 1 ].ownerDocument;
-
- // Reenable scripts
- jQuery.map( scripts, restoreScript );
-
- // Evaluate executable scripts on first document insertion
- for ( i = 0; i < hasScripts; i++ ) {
- node = scripts[ i ];
- if ( rscriptType.test( node.type || "" ) &&
- !dataPriv.access( node, "globalEval" ) &&
- jQuery.contains( doc, node ) ) {
-
- if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) {
-
- // Optional AJAX dependency, but won't run scripts if not present
- if ( jQuery._evalUrl && !node.noModule ) {
- jQuery._evalUrl( node.src, {
- nonce: node.nonce || node.getAttribute( "nonce" )
- }, doc );
- }
- } else {
- DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
- }
- }
- }
- }
- }
- }
-
- return collection;
-}
-
-function remove( elem, selector, keepData ) {
- var node,
- nodes = selector ? jQuery.filter( selector, elem ) : elem,
- i = 0;
-
- for ( ; ( node = nodes[ i ] ) != null; i++ ) {
- if ( !keepData && node.nodeType === 1 ) {
- jQuery.cleanData( getAll( node ) );
- }
-
- if ( node.parentNode ) {
- if ( keepData && isAttached( node ) ) {
- setGlobalEval( getAll( node, "script" ) );
- }
- node.parentNode.removeChild( node );
- }
- }
-
- return elem;
-}
-
-jQuery.extend( {
- htmlPrefilter: function( html ) {
- return html;
- },
-
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var i, l, srcElements, destElements,
- clone = elem.cloneNode( true ),
- inPage = isAttached( elem );
-
- // Fix IE cloning issues
- if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
- !jQuery.isXMLDoc( elem ) ) {
-
- // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
- destElements = getAll( clone );
- srcElements = getAll( elem );
-
- for ( i = 0, l = srcElements.length; i < l; i++ ) {
- fixInput( srcElements[ i ], destElements[ i ] );
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- if ( deepDataAndEvents ) {
- srcElements = srcElements || getAll( elem );
- destElements = destElements || getAll( clone );
-
- for ( i = 0, l = srcElements.length; i < l; i++ ) {
- cloneCopyEvent( srcElements[ i ], destElements[ i ] );
- }
- } else {
- cloneCopyEvent( elem, clone );
- }
- }
-
- // Preserve script evaluation history
- destElements = getAll( clone, "script" );
- if ( destElements.length > 0 ) {
- setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
- }
-
- // Return the cloned set
- return clone;
- },
-
- cleanData: function( elems ) {
- var data, elem, type,
- special = jQuery.event.special,
- i = 0;
-
- for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
- if ( acceptData( elem ) ) {
- if ( ( data = elem[ dataPriv.expando ] ) ) {
- if ( data.events ) {
- for ( type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
- }
-
- // Support: Chrome <=35 - 45+
- // Assign undefined instead of using delete, see Data#remove
- elem[ dataPriv.expando ] = undefined;
- }
- if ( elem[ dataUser.expando ] ) {
-
- // Support: Chrome <=35 - 45+
- // Assign undefined instead of using delete, see Data#remove
- elem[ dataUser.expando ] = undefined;
- }
- }
- }
- }
-} );
-
-jQuery.fn.extend( {
- detach: function( selector ) {
- return remove( this, selector, true );
- },
-
- remove: function( selector ) {
- return remove( this, selector );
- },
-
- text: function( value ) {
- return access( this, function( value ) {
- return value === undefined ?
- jQuery.text( this ) :
- this.empty().each( function() {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- this.textContent = value;
- }
- } );
- }, null, value, arguments.length );
- },
-
- append: function() {
- return domManip( this, arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.appendChild( elem );
- }
- } );
- },
-
- prepend: function() {
- return domManip( this, arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.insertBefore( elem, target.firstChild );
- }
- } );
- },
-
- before: function() {
- return domManip( this, arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this );
- }
- } );
- },
-
- after: function() {
- return domManip( this, arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- }
- } );
- },
-
- empty: function() {
- var elem,
- i = 0;
-
- for ( ; ( elem = this[ i ] ) != null; i++ ) {
- if ( elem.nodeType === 1 ) {
-
- // Prevent memory leaks
- jQuery.cleanData( getAll( elem, false ) );
-
- // Remove any remaining nodes
- elem.textContent = "";
- }
- }
-
- return this;
- },
-
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map( function() {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- } );
- },
-
- html: function( value ) {
- return access( this, function( value ) {
- var elem = this[ 0 ] || {},
- i = 0,
- l = this.length;
-
- if ( value === undefined && elem.nodeType === 1 ) {
- return elem.innerHTML;
- }
-
- // See if we can take a shortcut and just use innerHTML
- if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
- !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
-
- value = jQuery.htmlPrefilter( value );
-
- try {
- for ( ; i < l; i++ ) {
- elem = this[ i ] || {};
-
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- elem.innerHTML = value;
- }
- }
-
- elem = 0;
-
- // If using innerHTML throws an exception, use the fallback method
- } catch ( e ) {}
- }
-
- if ( elem ) {
- this.empty().append( value );
- }
- }, null, value, arguments.length );
- },
-
- replaceWith: function() {
- var ignored = [];
-
- // Make the changes, replacing each non-ignored context element with the new content
- return domManip( this, arguments, function( elem ) {
- var parent = this.parentNode;
-
- if ( jQuery.inArray( this, ignored ) < 0 ) {
- jQuery.cleanData( getAll( this ) );
- if ( parent ) {
- parent.replaceChild( elem, this );
- }
- }
-
- // Force callback invocation
- }, ignored );
- }
-} );
-
-jQuery.each( {
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var elems,
- ret = [],
- insert = jQuery( selector ),
- last = insert.length - 1,
- i = 0;
-
- for ( ; i <= last; i++ ) {
- elems = i === last ? this : this.clone( true );
- jQuery( insert[ i ] )[ original ]( elems );
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // .get() because push.apply(_, arraylike) throws on ancient WebKit
- push.apply( ret, elems.get() );
- }
-
- return this.pushStack( ret );
- };
-} );
-var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
-
-var getStyles = function( elem ) {
-
- // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
- // IE throws on elements created in popups
- // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
- var view = elem.ownerDocument.defaultView;
-
- if ( !view || !view.opener ) {
- view = window;
- }
-
- return view.getComputedStyle( elem );
- };
-
-var swap = function( elem, options, callback ) {
- var ret, name,
- old = {};
-
- // Remember the old values, and insert the new ones
- for ( name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- ret = callback.call( elem );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
-
- return ret;
-};
-
-
-var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
-
-
-
-( function() {
-
- // Executing both pixelPosition & boxSizingReliable tests require only one layout
- // so they're executed at the same time to save the second computation.
- function computeStyleTests() {
-
- // This is a singleton, we need to execute it only once
- if ( !div ) {
- return;
- }
-
- container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
- "margin-top:1px;padding:0;border:0";
- div.style.cssText =
- "position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
- "margin:auto;border:1px;padding:1px;" +
- "width:60%;top:1%";
- documentElement.appendChild( container ).appendChild( div );
-
- var divStyle = window.getComputedStyle( div );
- pixelPositionVal = divStyle.top !== "1%";
-
- // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
- reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
-
- // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
- // Some styles come back with percentage values, even though they shouldn't
- div.style.right = "60%";
- pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
-
- // Support: IE 9 - 11 only
- // Detect misreporting of content dimensions for box-sizing:border-box elements
- boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
-
- // Support: IE 9 only
- // Detect overflow:scroll screwiness (gh-3699)
- // Support: Chrome <=64
- // Don't get tricked when zoom affects offsetWidth (gh-4029)
- div.style.position = "absolute";
- scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
-
- documentElement.removeChild( container );
-
- // Nullify the div so it wouldn't be stored in the memory and
- // it will also be a sign that checks already performed
- div = null;
- }
-
- function roundPixelMeasures( measure ) {
- return Math.round( parseFloat( measure ) );
- }
-
- var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
- reliableTrDimensionsVal, reliableMarginLeftVal,
- container = document.createElement( "div" ),
- div = document.createElement( "div" );
-
- // Finish early in limited (non-browser) environments
- if ( !div.style ) {
- return;
- }
-
- // Support: IE <=9 - 11 only
- // Style of cloned element affects source element cloned (#8908)
- div.style.backgroundClip = "content-box";
- div.cloneNode( true ).style.backgroundClip = "";
- support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
- jQuery.extend( support, {
- boxSizingReliable: function() {
- computeStyleTests();
- return boxSizingReliableVal;
- },
- pixelBoxStyles: function() {
- computeStyleTests();
- return pixelBoxStylesVal;
- },
- pixelPosition: function() {
- computeStyleTests();
- return pixelPositionVal;
- },
- reliableMarginLeft: function() {
- computeStyleTests();
- return reliableMarginLeftVal;
- },
- scrollboxSize: function() {
- computeStyleTests();
- return scrollboxSizeVal;
- },
-
- // Support: IE 9 - 11+, Edge 15 - 18+
- // IE/Edge misreport `getComputedStyle` of table rows with width/height
- // set in CSS while `offset*` properties report correct values.
- // Behavior in IE 9 is more subtle than in newer versions & it passes
- // some versions of this test; make sure not to make it pass there!
- reliableTrDimensions: function() {
- var table, tr, trChild, trStyle;
- if ( reliableTrDimensionsVal == null ) {
- table = document.createElement( "table" );
- tr = document.createElement( "tr" );
- trChild = document.createElement( "div" );
-
- table.style.cssText = "position:absolute;left:-11111px";
- tr.style.height = "1px";
- trChild.style.height = "9px";
-
- documentElement
- .appendChild( table )
- .appendChild( tr )
- .appendChild( trChild );
-
- trStyle = window.getComputedStyle( tr );
- reliableTrDimensionsVal = parseInt( trStyle.height ) > 3;
-
- documentElement.removeChild( table );
- }
- return reliableTrDimensionsVal;
- }
- } );
-} )();
-
-
-function curCSS( elem, name, computed ) {
- var width, minWidth, maxWidth, ret,
-
- // Support: Firefox 51+
- // Retrieving style before computed somehow
- // fixes an issue with getting wrong values
- // on detached elements
- style = elem.style;
-
- computed = computed || getStyles( elem );
-
- // getPropertyValue is needed for:
- // .css('filter') (IE 9 only, #12537)
- // .css('--customProperty) (#3144)
- if ( computed ) {
- ret = computed.getPropertyValue( name ) || computed[ name ];
-
- if ( ret === "" && !isAttached( elem ) ) {
- ret = jQuery.style( elem, name );
- }
-
- // A tribute to the "awesome hack by Dean Edwards"
- // Android Browser returns percentage for some values,
- // but width seems to be reliably pixels.
- // This is against the CSSOM draft spec:
- // https://drafts.csswg.org/cssom/#resolved-values
- if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
-
- // Remember the original values
- width = style.width;
- minWidth = style.minWidth;
- maxWidth = style.maxWidth;
-
- // Put in the new values to get a computed value out
- style.minWidth = style.maxWidth = style.width = ret;
- ret = computed.width;
-
- // Revert the changed values
- style.width = width;
- style.minWidth = minWidth;
- style.maxWidth = maxWidth;
- }
- }
-
- return ret !== undefined ?
-
- // Support: IE <=9 - 11 only
- // IE returns zIndex value as an integer.
- ret + "" :
- ret;
-}
-
-
-function addGetHookIf( conditionFn, hookFn ) {
-
- // Define the hook, we'll check on the first run if it's really needed.
- return {
- get: function() {
- if ( conditionFn() ) {
-
- // Hook not needed (or it's not possible to use it due
- // to missing dependency), remove it.
- delete this.get;
- return;
- }
-
- // Hook needed; redefine it so that the support test is not executed again.
- return ( this.get = hookFn ).apply( this, arguments );
- }
- };
-}
-
-
-var cssPrefixes = [ "Webkit", "Moz", "ms" ],
- emptyStyle = document.createElement( "div" ).style,
- vendorProps = {};
-
-// Return a vendor-prefixed property or undefined
-function vendorPropName( name ) {
-
- // Check for vendor prefixed names
- var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
- i = cssPrefixes.length;
-
- while ( i-- ) {
- name = cssPrefixes[ i ] + capName;
- if ( name in emptyStyle ) {
- return name;
- }
- }
-}
-
-// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
-function finalPropName( name ) {
- var final = jQuery.cssProps[ name ] || vendorProps[ name ];
-
- if ( final ) {
- return final;
- }
- if ( name in emptyStyle ) {
- return name;
- }
- return vendorProps[ name ] = vendorPropName( name ) || name;
-}
-
-
-var
-
- // Swappable if display is none or starts with table
- // except "table", "table-cell", or "table-caption"
- // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
- rdisplayswap = /^(none|table(?!-c[ea]).+)/,
- rcustomProp = /^--/,
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssNormalTransform = {
- letterSpacing: "0",
- fontWeight: "400"
- };
-
-function setPositiveNumber( _elem, value, subtract ) {
-
- // Any relative (+/-) values have already been
- // normalized at this point
- var matches = rcssNum.exec( value );
- return matches ?
-
- // Guard against undefined "subtract", e.g., when used as in cssHooks
- Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
- value;
-}
-
-function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
- var i = dimension === "width" ? 1 : 0,
- extra = 0,
- delta = 0;
-
- // Adjustment may not be necessary
- if ( box === ( isBorderBox ? "border" : "content" ) ) {
- return 0;
- }
-
- for ( ; i < 4; i += 2 ) {
-
- // Both box models exclude margin
- if ( box === "margin" ) {
- delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
- }
-
- // If we get here with a content-box, we're seeking "padding" or "border" or "margin"
- if ( !isBorderBox ) {
-
- // Add padding
- delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
- // For "border" or "margin", add border
- if ( box !== "padding" ) {
- delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
-
- // But still keep track of it otherwise
- } else {
- extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
-
- // If we get here with a border-box (content + padding + border), we're seeking "content" or
- // "padding" or "margin"
- } else {
-
- // For "content", subtract padding
- if ( box === "content" ) {
- delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
- }
-
- // For "content" or "padding", subtract border
- if ( box !== "margin" ) {
- delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- }
- }
-
- // Account for positive content-box scroll gutter when requested by providing computedVal
- if ( !isBorderBox && computedVal >= 0 ) {
-
- // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
- // Assuming integer scroll gutter, subtract the rest and round down
- delta += Math.max( 0, Math.ceil(
- elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
- computedVal -
- delta -
- extra -
- 0.5
-
- // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
- // Use an explicit zero to avoid NaN (gh-3964)
- ) ) || 0;
- }
-
- return delta;
-}
-
-function getWidthOrHeight( elem, dimension, extra ) {
-
- // Start with computed style
- var styles = getStyles( elem ),
-
- // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
- // Fake content-box until we know it's needed to know the true value.
- boxSizingNeeded = !support.boxSizingReliable() || extra,
- isBorderBox = boxSizingNeeded &&
- jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
- valueIsBorderBox = isBorderBox,
-
- val = curCSS( elem, dimension, styles ),
- offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
-
- // Support: Firefox <=54
- // Return a confounding non-pixel value or feign ignorance, as appropriate.
- if ( rnumnonpx.test( val ) ) {
- if ( !extra ) {
- return val;
- }
- val = "auto";
- }
-
-
- // Support: IE 9 - 11 only
- // Use offsetWidth/offsetHeight for when box sizing is unreliable.
- // In those cases, the computed value can be trusted to be border-box.
- if ( ( !support.boxSizingReliable() && isBorderBox ||
-
- // Support: IE 10 - 11+, Edge 15 - 18+
- // IE/Edge misreport `getComputedStyle` of table rows with width/height
- // set in CSS while `offset*` properties report correct values.
- // Interestingly, in some cases IE 9 doesn't suffer from this issue.
- !support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
-
- // Fall back to offsetWidth/offsetHeight when value is "auto"
- // This happens for inline elements with no explicit setting (gh-3571)
- val === "auto" ||
-
- // Support: Android <=4.1 - 4.3 only
- // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
- !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
-
- // Make sure the element is visible & connected
- elem.getClientRects().length ) {
-
- isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
- // Where available, offsetWidth/offsetHeight approximate border box dimensions.
- // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
- // retrieved value as a content box dimension.
- valueIsBorderBox = offsetProp in elem;
- if ( valueIsBorderBox ) {
- val = elem[ offsetProp ];
- }
- }
-
- // Normalize "" and auto
- val = parseFloat( val ) || 0;
-
- // Adjust for the element's box model
- return ( val +
- boxModelAdjustment(
- elem,
- dimension,
- extra || ( isBorderBox ? "border" : "content" ),
- valueIsBorderBox,
- styles,
-
- // Provide the current computed size to request scroll gutter calculation (gh-3589)
- val
- )
- ) + "px";
-}
-
-jQuery.extend( {
-
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
-
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity" );
- return ret === "" ? "1" : ret;
- }
- }
- }
- },
-
- // Don't automatically add "px" to these possibly-unitless properties
- cssNumber: {
- "animationIterationCount": true,
- "columnCount": true,
- "fillOpacity": true,
- "flexGrow": true,
- "flexShrink": true,
- "fontWeight": true,
- "gridArea": true,
- "gridColumn": true,
- "gridColumnEnd": true,
- "gridColumnStart": true,
- "gridRow": true,
- "gridRowEnd": true,
- "gridRowStart": true,
- "lineHeight": true,
- "opacity": true,
- "order": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {},
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
-
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, hooks,
- origName = camelCase( name ),
- isCustomProp = rcustomProp.test( name ),
- style = elem.style;
-
- // Make sure that we're working with the right name. We don't
- // want to query the value if it is a CSS custom property
- // since they are user-defined.
- if ( !isCustomProp ) {
- name = finalPropName( origName );
- }
-
- // Gets hook for the prefixed version, then unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // Convert "+=" or "-=" to relative numbers (#7345)
- if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
- value = adjustCSS( elem, name, ret );
-
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that null and NaN values aren't set (#7116)
- if ( value == null || value !== value ) {
- return;
- }
-
- // If a number was passed in, add the unit (except for certain CSS properties)
- // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
- // "px" to a few hardcoded values.
- if ( type === "number" && !isCustomProp ) {
- value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
- }
-
- // background-* props affect original clone's values
- if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
- style[ name ] = "inherit";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !( "set" in hooks ) ||
- ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
-
- if ( isCustomProp ) {
- style.setProperty( name, value );
- } else {
- style[ name ] = value;
- }
- }
-
- } else {
-
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks &&
- ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
-
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, extra, styles ) {
- var val, num, hooks,
- origName = camelCase( name ),
- isCustomProp = rcustomProp.test( name );
-
- // Make sure that we're working with the right name. We don't
- // want to modify the value if it is a CSS custom property
- // since they are user-defined.
- if ( !isCustomProp ) {
- name = finalPropName( origName );
- }
-
- // Try prefixed name followed by the unprefixed name
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks ) {
- val = hooks.get( elem, true, extra );
- }
-
- // Otherwise, if a way to get the computed value exists, use that
- if ( val === undefined ) {
- val = curCSS( elem, name, styles );
- }
-
- // Convert "normal" to computed value
- if ( val === "normal" && name in cssNormalTransform ) {
- val = cssNormalTransform[ name ];
- }
-
- // Make numeric if forced or a qualifier was provided and val looks numeric
- if ( extra === "" || extra ) {
- num = parseFloat( val );
- return extra === true || isFinite( num ) ? num || 0 : val;
- }
-
- return val;
- }
-} );
-
-jQuery.each( [ "height", "width" ], function( _i, dimension ) {
- jQuery.cssHooks[ dimension ] = {
- get: function( elem, computed, extra ) {
- if ( computed ) {
-
- // Certain elements can have dimension info if we invisibly show them
- // but it must have a current display style that would benefit
- return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
-
- // Support: Safari 8+
- // Table columns in Safari have non-zero offsetWidth & zero
- // getBoundingClientRect().width unless display is changed.
- // Support: IE <=11 only
- // Running getBoundingClientRect on a disconnected node
- // in IE throws an error.
- ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
- swap( elem, cssShow, function() {
- return getWidthOrHeight( elem, dimension, extra );
- } ) :
- getWidthOrHeight( elem, dimension, extra );
- }
- },
-
- set: function( elem, value, extra ) {
- var matches,
- styles = getStyles( elem ),
-
- // Only read styles.position if the test has a chance to fail
- // to avoid forcing a reflow.
- scrollboxSizeBuggy = !support.scrollboxSize() &&
- styles.position === "absolute",
-
- // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
- boxSizingNeeded = scrollboxSizeBuggy || extra,
- isBorderBox = boxSizingNeeded &&
- jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
- subtract = extra ?
- boxModelAdjustment(
- elem,
- dimension,
- extra,
- isBorderBox,
- styles
- ) :
- 0;
-
- // Account for unreliable border-box dimensions by comparing offset* to computed and
- // faking a content-box to get border and padding (gh-3699)
- if ( isBorderBox && scrollboxSizeBuggy ) {
- subtract -= Math.ceil(
- elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
- parseFloat( styles[ dimension ] ) -
- boxModelAdjustment( elem, dimension, "border", false, styles ) -
- 0.5
- );
- }
-
- // Convert to pixels if value adjustment is needed
- if ( subtract && ( matches = rcssNum.exec( value ) ) &&
- ( matches[ 3 ] || "px" ) !== "px" ) {
-
- elem.style[ dimension ] = value;
- value = jQuery.css( elem, dimension );
- }
-
- return setPositiveNumber( elem, value, subtract );
- }
- };
-} );
-
-jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
- function( elem, computed ) {
- if ( computed ) {
- return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
- elem.getBoundingClientRect().left -
- swap( elem, { marginLeft: 0 }, function() {
- return elem.getBoundingClientRect().left;
- } )
- ) + "px";
- }
- }
-);
-
-// These hooks are used by animate to expand properties
-jQuery.each( {
- margin: "",
- padding: "",
- border: "Width"
-}, function( prefix, suffix ) {
- jQuery.cssHooks[ prefix + suffix ] = {
- expand: function( value ) {
- var i = 0,
- expanded = {},
-
- // Assumes a single number if not a string
- parts = typeof value === "string" ? value.split( " " ) : [ value ];
-
- for ( ; i < 4; i++ ) {
- expanded[ prefix + cssExpand[ i ] + suffix ] =
- parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
- }
-
- return expanded;
- }
- };
-
- if ( prefix !== "margin" ) {
- jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
- }
-} );
-
-jQuery.fn.extend( {
- css: function( name, value ) {
- return access( this, function( elem, name, value ) {
- var styles, len,
- map = {},
- i = 0;
-
- if ( Array.isArray( name ) ) {
- styles = getStyles( elem );
- len = name.length;
-
- for ( ; i < len; i++ ) {
- map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
- }
-
- return map;
- }
-
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- }, name, value, arguments.length > 1 );
- }
-} );
-
-
-function Tween( elem, options, prop, end, easing ) {
- return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
- constructor: Tween,
- init: function( elem, options, prop, end, easing, unit ) {
- this.elem = elem;
- this.prop = prop;
- this.easing = easing || jQuery.easing._default;
- this.options = options;
- this.start = this.now = this.cur();
- this.end = end;
- this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
- },
- cur: function() {
- var hooks = Tween.propHooks[ this.prop ];
-
- return hooks && hooks.get ?
- hooks.get( this ) :
- Tween.propHooks._default.get( this );
- },
- run: function( percent ) {
- var eased,
- hooks = Tween.propHooks[ this.prop ];
-
- if ( this.options.duration ) {
- this.pos = eased = jQuery.easing[ this.easing ](
- percent, this.options.duration * percent, 0, 1, this.options.duration
- );
- } else {
- this.pos = eased = percent;
- }
- this.now = ( this.end - this.start ) * eased + this.start;
-
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- if ( hooks && hooks.set ) {
- hooks.set( this );
- } else {
- Tween.propHooks._default.set( this );
- }
- return this;
- }
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
- _default: {
- get: function( tween ) {
- var result;
-
- // Use a property on the element directly when it is not a DOM element,
- // or when there is no matching style property that exists.
- if ( tween.elem.nodeType !== 1 ||
- tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
- return tween.elem[ tween.prop ];
- }
-
- // Passing an empty string as a 3rd parameter to .css will automatically
- // attempt a parseFloat and fallback to a string if the parse fails.
- // Simple values such as "10px" are parsed to Float;
- // complex values such as "rotate(1rad)" are returned as-is.
- result = jQuery.css( tween.elem, tween.prop, "" );
-
- // Empty strings, null, undefined and "auto" are converted to 0.
- return !result || result === "auto" ? 0 : result;
- },
- set: function( tween ) {
-
- // Use step hook for back compat.
- // Use cssHook if its there.
- // Use .style if available and use plain properties where available.
- if ( jQuery.fx.step[ tween.prop ] ) {
- jQuery.fx.step[ tween.prop ]( tween );
- } else if ( tween.elem.nodeType === 1 && (
- jQuery.cssHooks[ tween.prop ] ||
- tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
- jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
- } else {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
- }
-};
-
-// Support: IE <=9 only
-// Panic based approach to setting things on disconnected nodes
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
- set: function( tween ) {
- if ( tween.elem.nodeType && tween.elem.parentNode ) {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
-};
-
-jQuery.easing = {
- linear: function( p ) {
- return p;
- },
- swing: function( p ) {
- return 0.5 - Math.cos( p * Math.PI ) / 2;
- },
- _default: "swing"
-};
-
-jQuery.fx = Tween.prototype.init;
-
-// Back compat <1.8 extension point
-jQuery.fx.step = {};
-
-
-
-
-var
- fxNow, inProgress,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rrun = /queueHooks$/;
-
-function schedule() {
- if ( inProgress ) {
- if ( document.hidden === false && window.requestAnimationFrame ) {
- window.requestAnimationFrame( schedule );
- } else {
- window.setTimeout( schedule, jQuery.fx.interval );
- }
-
- jQuery.fx.tick();
- }
-}
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- window.setTimeout( function() {
- fxNow = undefined;
- } );
- return ( fxNow = Date.now() );
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
- var which,
- i = 0,
- attrs = { height: type };
-
- // If we include width, step value is 1 to do all cssExpand values,
- // otherwise step value is 2 to skip over Left and Right
- includeWidth = includeWidth ? 1 : 0;
- for ( ; i < 4; i += 2 - includeWidth ) {
- which = cssExpand[ i ];
- attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
- }
-
- if ( includeWidth ) {
- attrs.opacity = attrs.width = type;
- }
-
- return attrs;
-}
-
-function createTween( value, prop, animation ) {
- var tween,
- collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
- index = 0,
- length = collection.length;
- for ( ; index < length; index++ ) {
- if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
-
- // We're done with this property
- return tween;
- }
- }
-}
-
-function defaultPrefilter( elem, props, opts ) {
- var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
- isBox = "width" in props || "height" in props,
- anim = this,
- orig = {},
- style = elem.style,
- hidden = elem.nodeType && isHiddenWithinTree( elem ),
- dataShow = dataPriv.get( elem, "fxshow" );
-
- // Queue-skipping animations hijack the fx hooks
- if ( !opts.queue ) {
- hooks = jQuery._queueHooks( elem, "fx" );
- if ( hooks.unqueued == null ) {
- hooks.unqueued = 0;
- oldfire = hooks.empty.fire;
- hooks.empty.fire = function() {
- if ( !hooks.unqueued ) {
- oldfire();
- }
- };
- }
- hooks.unqueued++;
-
- anim.always( function() {
-
- // Ensure the complete handler is called before this completes
- anim.always( function() {
- hooks.unqueued--;
- if ( !jQuery.queue( elem, "fx" ).length ) {
- hooks.empty.fire();
- }
- } );
- } );
- }
-
- // Detect show/hide animations
- for ( prop in props ) {
- value = props[ prop ];
- if ( rfxtypes.test( value ) ) {
- delete props[ prop ];
- toggle = toggle || value === "toggle";
- if ( value === ( hidden ? "hide" : "show" ) ) {
-
- // Pretend to be hidden if this is a "show" and
- // there is still data from a stopped show/hide
- if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
- hidden = true;
-
- // Ignore all other no-op show/hide data
- } else {
- continue;
- }
- }
- orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
- }
- }
-
- // Bail out if this is a no-op like .hide().hide()
- propTween = !jQuery.isEmptyObject( props );
- if ( !propTween && jQuery.isEmptyObject( orig ) ) {
- return;
- }
-
- // Restrict "overflow" and "display" styles during box animations
- if ( isBox && elem.nodeType === 1 ) {
-
- // Support: IE <=9 - 11, Edge 12 - 15
- // Record all 3 overflow attributes because IE does not infer the shorthand
- // from identically-valued overflowX and overflowY and Edge just mirrors
- // the overflowX value there.
- opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
- // Identify a display type, preferring old show/hide data over the CSS cascade
- restoreDisplay = dataShow && dataShow.display;
- if ( restoreDisplay == null ) {
- restoreDisplay = dataPriv.get( elem, "display" );
- }
- display = jQuery.css( elem, "display" );
- if ( display === "none" ) {
- if ( restoreDisplay ) {
- display = restoreDisplay;
- } else {
-
- // Get nonempty value(s) by temporarily forcing visibility
- showHide( [ elem ], true );
- restoreDisplay = elem.style.display || restoreDisplay;
- display = jQuery.css( elem, "display" );
- showHide( [ elem ] );
- }
- }
-
- // Animate inline elements as inline-block
- if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
- if ( jQuery.css( elem, "float" ) === "none" ) {
-
- // Restore the original display value at the end of pure show/hide animations
- if ( !propTween ) {
- anim.done( function() {
- style.display = restoreDisplay;
- } );
- if ( restoreDisplay == null ) {
- display = style.display;
- restoreDisplay = display === "none" ? "" : display;
- }
- }
- style.display = "inline-block";
- }
- }
- }
-
- if ( opts.overflow ) {
- style.overflow = "hidden";
- anim.always( function() {
- style.overflow = opts.overflow[ 0 ];
- style.overflowX = opts.overflow[ 1 ];
- style.overflowY = opts.overflow[ 2 ];
- } );
- }
-
- // Implement show/hide animations
- propTween = false;
- for ( prop in orig ) {
-
- // General show/hide setup for this element animation
- if ( !propTween ) {
- if ( dataShow ) {
- if ( "hidden" in dataShow ) {
- hidden = dataShow.hidden;
- }
- } else {
- dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
- }
-
- // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
- if ( toggle ) {
- dataShow.hidden = !hidden;
- }
-
- // Show elements before animating them
- if ( hidden ) {
- showHide( [ elem ], true );
- }
-
- /* eslint-disable no-loop-func */
-
- anim.done( function() {
-
- /* eslint-enable no-loop-func */
-
- // The final step of a "hide" animation is actually hiding the element
- if ( !hidden ) {
- showHide( [ elem ] );
- }
- dataPriv.remove( elem, "fxshow" );
- for ( prop in orig ) {
- jQuery.style( elem, prop, orig[ prop ] );
- }
- } );
- }
-
- // Per-property setup
- propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
- if ( !( prop in dataShow ) ) {
- dataShow[ prop ] = propTween.start;
- if ( hidden ) {
- propTween.end = propTween.start;
- propTween.start = 0;
- }
- }
- }
-}
-
-function propFilter( props, specialEasing ) {
- var index, name, easing, value, hooks;
-
- // camelCase, specialEasing and expand cssHook pass
- for ( index in props ) {
- name = camelCase( index );
- easing = specialEasing[ name ];
- value = props[ index ];
- if ( Array.isArray( value ) ) {
- easing = value[ 1 ];
- value = props[ index ] = value[ 0 ];
- }
-
- if ( index !== name ) {
- props[ name ] = value;
- delete props[ index ];
- }
-
- hooks = jQuery.cssHooks[ name ];
- if ( hooks && "expand" in hooks ) {
- value = hooks.expand( value );
- delete props[ name ];
-
- // Not quite $.extend, this won't overwrite existing keys.
- // Reusing 'index' because we have the correct "name"
- for ( index in value ) {
- if ( !( index in props ) ) {
- props[ index ] = value[ index ];
- specialEasing[ index ] = easing;
- }
- }
- } else {
- specialEasing[ name ] = easing;
- }
- }
-}
-
-function Animation( elem, properties, options ) {
- var result,
- stopped,
- index = 0,
- length = Animation.prefilters.length,
- deferred = jQuery.Deferred().always( function() {
-
- // Don't match elem in the :animated selector
- delete tick.elem;
- } ),
- tick = function() {
- if ( stopped ) {
- return false;
- }
- var currentTime = fxNow || createFxNow(),
- remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
-
- // Support: Android 2.3 only
- // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
- temp = remaining / animation.duration || 0,
- percent = 1 - temp,
- index = 0,
- length = animation.tweens.length;
-
- for ( ; index < length; index++ ) {
- animation.tweens[ index ].run( percent );
- }
-
- deferred.notifyWith( elem, [ animation, percent, remaining ] );
-
- // If there's more to do, yield
- if ( percent < 1 && length ) {
- return remaining;
- }
-
- // If this was an empty animation, synthesize a final progress notification
- if ( !length ) {
- deferred.notifyWith( elem, [ animation, 1, 0 ] );
- }
-
- // Resolve the animation and report its conclusion
- deferred.resolveWith( elem, [ animation ] );
- return false;
- },
- animation = deferred.promise( {
- elem: elem,
- props: jQuery.extend( {}, properties ),
- opts: jQuery.extend( true, {
- specialEasing: {},
- easing: jQuery.easing._default
- }, options ),
- originalProperties: properties,
- originalOptions: options,
- startTime: fxNow || createFxNow(),
- duration: options.duration,
- tweens: [],
- createTween: function( prop, end ) {
- var tween = jQuery.Tween( elem, animation.opts, prop, end,
- animation.opts.specialEasing[ prop ] || animation.opts.easing );
- animation.tweens.push( tween );
- return tween;
- },
- stop: function( gotoEnd ) {
- var index = 0,
-
- // If we are going to the end, we want to run all the tweens
- // otherwise we skip this part
- length = gotoEnd ? animation.tweens.length : 0;
- if ( stopped ) {
- return this;
- }
- stopped = true;
- for ( ; index < length; index++ ) {
- animation.tweens[ index ].run( 1 );
- }
-
- // Resolve when we played the last frame; otherwise, reject
- if ( gotoEnd ) {
- deferred.notifyWith( elem, [ animation, 1, 0 ] );
- deferred.resolveWith( elem, [ animation, gotoEnd ] );
- } else {
- deferred.rejectWith( elem, [ animation, gotoEnd ] );
- }
- return this;
- }
- } ),
- props = animation.props;
-
- propFilter( props, animation.opts.specialEasing );
-
- for ( ; index < length; index++ ) {
- result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
- if ( result ) {
- if ( isFunction( result.stop ) ) {
- jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
- result.stop.bind( result );
- }
- return result;
- }
- }
-
- jQuery.map( props, createTween, animation );
-
- if ( isFunction( animation.opts.start ) ) {
- animation.opts.start.call( elem, animation );
- }
-
- // Attach callbacks from options
- animation
- .progress( animation.opts.progress )
- .done( animation.opts.done, animation.opts.complete )
- .fail( animation.opts.fail )
- .always( animation.opts.always );
-
- jQuery.fx.timer(
- jQuery.extend( tick, {
- elem: elem,
- anim: animation,
- queue: animation.opts.queue
- } )
- );
-
- return animation;
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
-
- tweeners: {
- "*": [ function( prop, value ) {
- var tween = this.createTween( prop, value );
- adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
- return tween;
- } ]
- },
-
- tweener: function( props, callback ) {
- if ( isFunction( props ) ) {
- callback = props;
- props = [ "*" ];
- } else {
- props = props.match( rnothtmlwhite );
- }
-
- var prop,
- index = 0,
- length = props.length;
-
- for ( ; index < length; index++ ) {
- prop = props[ index ];
- Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
- Animation.tweeners[ prop ].unshift( callback );
- }
- },
-
- prefilters: [ defaultPrefilter ],
-
- prefilter: function( callback, prepend ) {
- if ( prepend ) {
- Animation.prefilters.unshift( callback );
- } else {
- Animation.prefilters.push( callback );
- }
- }
-} );
-
-jQuery.speed = function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
- complete: fn || !fn && easing ||
- isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !isFunction( easing ) && easing
- };
-
- // Go to the end state if fx are off
- if ( jQuery.fx.off ) {
- opt.duration = 0;
-
- } else {
- if ( typeof opt.duration !== "number" ) {
- if ( opt.duration in jQuery.fx.speeds ) {
- opt.duration = jQuery.fx.speeds[ opt.duration ];
-
- } else {
- opt.duration = jQuery.fx.speeds._default;
- }
- }
- }
-
- // Normalize opt.queue - true/undefined/null -> "fx"
- if ( opt.queue == null || opt.queue === true ) {
- opt.queue = "fx";
- }
-
- // Queueing
- opt.old = opt.complete;
-
- opt.complete = function() {
- if ( isFunction( opt.old ) ) {
- opt.old.call( this );
- }
-
- if ( opt.queue ) {
- jQuery.dequeue( this, opt.queue );
- }
- };
-
- return opt;
-};
-
-jQuery.fn.extend( {
- fadeTo: function( speed, to, easing, callback ) {
-
- // Show any hidden elements after setting opacity to 0
- return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
-
- // Animate to the value specified
- .end().animate( { opacity: to }, speed, easing, callback );
- },
- animate: function( prop, speed, easing, callback ) {
- var empty = jQuery.isEmptyObject( prop ),
- optall = jQuery.speed( speed, easing, callback ),
- doAnimation = function() {
-
- // Operate on a copy of prop so per-property easing won't be lost
- var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
- // Empty animations, or finishing resolves immediately
- if ( empty || dataPriv.get( this, "finish" ) ) {
- anim.stop( true );
- }
- };
- doAnimation.finish = doAnimation;
-
- return empty || optall.queue === false ?
- this.each( doAnimation ) :
- this.queue( optall.queue, doAnimation );
- },
- stop: function( type, clearQueue, gotoEnd ) {
- var stopQueue = function( hooks ) {
- var stop = hooks.stop;
- delete hooks.stop;
- stop( gotoEnd );
- };
-
- if ( typeof type !== "string" ) {
- gotoEnd = clearQueue;
- clearQueue = type;
- type = undefined;
- }
- if ( clearQueue ) {
- this.queue( type || "fx", [] );
- }
-
- return this.each( function() {
- var dequeue = true,
- index = type != null && type + "queueHooks",
- timers = jQuery.timers,
- data = dataPriv.get( this );
-
- if ( index ) {
- if ( data[ index ] && data[ index ].stop ) {
- stopQueue( data[ index ] );
- }
- } else {
- for ( index in data ) {
- if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
- stopQueue( data[ index ] );
- }
- }
- }
-
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this &&
- ( type == null || timers[ index ].queue === type ) ) {
-
- timers[ index ].anim.stop( gotoEnd );
- dequeue = false;
- timers.splice( index, 1 );
- }
- }
-
- // Start the next in the queue if the last step wasn't forced.
- // Timers currently will call their complete callbacks, which
- // will dequeue but only if they were gotoEnd.
- if ( dequeue || !gotoEnd ) {
- jQuery.dequeue( this, type );
- }
- } );
- },
- finish: function( type ) {
- if ( type !== false ) {
- type = type || "fx";
- }
- return this.each( function() {
- var index,
- data = dataPriv.get( this ),
- queue = data[ type + "queue" ],
- hooks = data[ type + "queueHooks" ],
- timers = jQuery.timers,
- length = queue ? queue.length : 0;
-
- // Enable finishing flag on private data
- data.finish = true;
-
- // Empty the queue first
- jQuery.queue( this, type, [] );
-
- if ( hooks && hooks.stop ) {
- hooks.stop.call( this, true );
- }
-
- // Look for any active animations, and finish them
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
- timers[ index ].anim.stop( true );
- timers.splice( index, 1 );
- }
- }
-
- // Look for any animations in the old queue and finish them
- for ( index = 0; index < length; index++ ) {
- if ( queue[ index ] && queue[ index ].finish ) {
- queue[ index ].finish.call( this );
- }
- }
-
- // Turn off finishing flag
- delete data.finish;
- } );
- }
-} );
-
-jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
- var cssFn = jQuery.fn[ name ];
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return speed == null || typeof speed === "boolean" ?
- cssFn.apply( this, arguments ) :
- this.animate( genFx( name, true ), speed, easing, callback );
- };
-} );
-
-// Generate shortcuts for custom animations
-jQuery.each( {
- slideDown: genFx( "show" ),
- slideUp: genFx( "hide" ),
- slideToggle: genFx( "toggle" ),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-} );
-
-jQuery.timers = [];
-jQuery.fx.tick = function() {
- var timer,
- i = 0,
- timers = jQuery.timers;
-
- fxNow = Date.now();
-
- for ( ; i < timers.length; i++ ) {
- timer = timers[ i ];
-
- // Run the timer and safely remove it when done (allowing for external removal)
- if ( !timer() && timers[ i ] === timer ) {
- timers.splice( i--, 1 );
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
- jQuery.timers.push( timer );
- jQuery.fx.start();
-};
-
-jQuery.fx.interval = 13;
-jQuery.fx.start = function() {
- if ( inProgress ) {
- return;
- }
-
- inProgress = true;
- schedule();
-};
-
-jQuery.fx.stop = function() {
- inProgress = null;
-};
-
-jQuery.fx.speeds = {
- slow: 600,
- fast: 200,
-
- // Default speed
- _default: 400
-};
-
-
-// Based off of the plugin by Clint Helfers, with permission.
-// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
-jQuery.fn.delay = function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
- type = type || "fx";
-
- return this.queue( type, function( next, hooks ) {
- var timeout = window.setTimeout( next, time );
- hooks.stop = function() {
- window.clearTimeout( timeout );
- };
- } );
-};
-
-
-( function() {
- var input = document.createElement( "input" ),
- select = document.createElement( "select" ),
- opt = select.appendChild( document.createElement( "option" ) );
-
- input.type = "checkbox";
-
- // Support: Android <=4.3 only
- // Default value for a checkbox should be "on"
- support.checkOn = input.value !== "";
-
- // Support: IE <=11 only
- // Must access selectedIndex to make default options select
- support.optSelected = opt.selected;
-
- // Support: IE <=11 only
- // An input loses its value after becoming a radio
- input = document.createElement( "input" );
- input.value = "t";
- input.type = "radio";
- support.radioValue = input.value === "t";
-} )();
-
-
-var boolHook,
- attrHandle = jQuery.expr.attrHandle;
-
-jQuery.fn.extend( {
- attr: function( name, value ) {
- return access( this, jQuery.attr, name, value, arguments.length > 1 );
- },
-
- removeAttr: function( name ) {
- return this.each( function() {
- jQuery.removeAttr( this, name );
- } );
- }
-} );
-
-jQuery.extend( {
- attr: function( elem, name, value ) {
- var ret, hooks,
- nType = elem.nodeType;
-
- // Don't get/set attributes on text, comment and attribute nodes
- if ( nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- // Fallback to prop when attributes are not supported
- if ( typeof elem.getAttribute === "undefined" ) {
- return jQuery.prop( elem, name, value );
- }
-
- // Attribute hooks are determined by the lowercase version
- // Grab necessary hook if one is defined
- if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
- hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
- ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
- }
-
- if ( value !== undefined ) {
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
- return;
- }
-
- if ( hooks && "set" in hooks &&
- ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
- return ret;
- }
-
- elem.setAttribute( name, value + "" );
- return value;
- }
-
- if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
- return ret;
- }
-
- ret = jQuery.find.attr( elem, name );
-
- // Non-existent attributes return null, we normalize to undefined
- return ret == null ? undefined : ret;
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- if ( !support.radioValue && value === "radio" &&
- nodeName( elem, "input" ) ) {
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- }
- },
-
- removeAttr: function( elem, value ) {
- var name,
- i = 0,
-
- // Attribute names can contain non-HTML whitespace characters
- // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
- attrNames = value && value.match( rnothtmlwhite );
-
- if ( attrNames && elem.nodeType === 1 ) {
- while ( ( name = attrNames[ i++ ] ) ) {
- elem.removeAttribute( name );
- }
- }
- }
-} );
-
-// Hooks for boolean attributes
-boolHook = {
- set: function( elem, value, name ) {
- if ( value === false ) {
-
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else {
- elem.setAttribute( name, name );
- }
- return name;
- }
-};
-
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
- var getter = attrHandle[ name ] || jQuery.find.attr;
-
- attrHandle[ name ] = function( elem, name, isXML ) {
- var ret, handle,
- lowercaseName = name.toLowerCase();
-
- if ( !isXML ) {
-
- // Avoid an infinite loop by temporarily removing this function from the getter
- handle = attrHandle[ lowercaseName ];
- attrHandle[ lowercaseName ] = ret;
- ret = getter( elem, name, isXML ) != null ?
- lowercaseName :
- null;
- attrHandle[ lowercaseName ] = handle;
- }
- return ret;
- };
-} );
-
-
-
-
-var rfocusable = /^(?:input|select|textarea|button)$/i,
- rclickable = /^(?:a|area)$/i;
-
-jQuery.fn.extend( {
- prop: function( name, value ) {
- return access( this, jQuery.prop, name, value, arguments.length > 1 );
- },
-
- removeProp: function( name ) {
- return this.each( function() {
- delete this[ jQuery.propFix[ name ] || name ];
- } );
- }
-} );
-
-jQuery.extend( {
- prop: function( elem, name, value ) {
- var ret, hooks,
- nType = elem.nodeType;
-
- // Don't get/set properties on text, comment and attribute nodes
- if ( nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
-
- // Fix name and attach hooks
- name = jQuery.propFix[ name ] || name;
- hooks = jQuery.propHooks[ name ];
- }
-
- if ( value !== undefined ) {
- if ( hooks && "set" in hooks &&
- ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
- return ret;
- }
-
- return ( elem[ name ] = value );
- }
-
- if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
- return ret;
- }
-
- return elem[ name ];
- },
-
- propHooks: {
- tabIndex: {
- get: function( elem ) {
-
- // Support: IE <=9 - 11 only
- // elem.tabIndex doesn't always return the
- // correct value when it hasn't been explicitly set
- // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- // Use proper attribute retrieval(#12072)
- var tabindex = jQuery.find.attr( elem, "tabindex" );
-
- if ( tabindex ) {
- return parseInt( tabindex, 10 );
- }
-
- if (
- rfocusable.test( elem.nodeName ) ||
- rclickable.test( elem.nodeName ) &&
- elem.href
- ) {
- return 0;
- }
-
- return -1;
- }
- }
- },
-
- propFix: {
- "for": "htmlFor",
- "class": "className"
- }
-} );
-
-// Support: IE <=11 only
-// Accessing the selectedIndex property
-// forces the browser to respect setting selected
-// on the option
-// The getter ensures a default option is selected
-// when in an optgroup
-// eslint rule "no-unused-expressions" is disabled for this code
-// since it considers such accessions noop
-if ( !support.optSelected ) {
- jQuery.propHooks.selected = {
- get: function( elem ) {
-
- /* eslint no-unused-expressions: "off" */
-
- var parent = elem.parentNode;
- if ( parent && parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- return null;
- },
- set: function( elem ) {
-
- /* eslint no-unused-expressions: "off" */
-
- var parent = elem.parentNode;
- if ( parent ) {
- parent.selectedIndex;
-
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- }
- };
-}
-
-jQuery.each( [
- "tabIndex",
- "readOnly",
- "maxLength",
- "cellSpacing",
- "cellPadding",
- "rowSpan",
- "colSpan",
- "useMap",
- "frameBorder",
- "contentEditable"
-], function() {
- jQuery.propFix[ this.toLowerCase() ] = this;
-} );
-
-
-
-
- // Strip and collapse whitespace according to HTML spec
- // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
- function stripAndCollapse( value ) {
- var tokens = value.match( rnothtmlwhite ) || [];
- return tokens.join( " " );
- }
-
-
-function getClass( elem ) {
- return elem.getAttribute && elem.getAttribute( "class" ) || "";
-}
-
-function classesToArray( value ) {
- if ( Array.isArray( value ) ) {
- return value;
- }
- if ( typeof value === "string" ) {
- return value.match( rnothtmlwhite ) || [];
- }
- return [];
-}
-
-jQuery.fn.extend( {
- addClass: function( value ) {
- var classes, elem, cur, curValue, clazz, j, finalValue,
- i = 0;
-
- if ( isFunction( value ) ) {
- return this.each( function( j ) {
- jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
- } );
- }
-
- classes = classesToArray( value );
-
- if ( classes.length ) {
- while ( ( elem = this[ i++ ] ) ) {
- curValue = getClass( elem );
- cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
-
- if ( cur ) {
- j = 0;
- while ( ( clazz = classes[ j++ ] ) ) {
- if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
- cur += clazz + " ";
- }
- }
-
- // Only assign if different to avoid unneeded rendering.
- finalValue = stripAndCollapse( cur );
- if ( curValue !== finalValue ) {
- elem.setAttribute( "class", finalValue );
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- var classes, elem, cur, curValue, clazz, j, finalValue,
- i = 0;
-
- if ( isFunction( value ) ) {
- return this.each( function( j ) {
- jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
- } );
- }
-
- if ( !arguments.length ) {
- return this.attr( "class", "" );
- }
-
- classes = classesToArray( value );
-
- if ( classes.length ) {
- while ( ( elem = this[ i++ ] ) ) {
- curValue = getClass( elem );
-
- // This expression is here for better compressibility (see addClass)
- cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
-
- if ( cur ) {
- j = 0;
- while ( ( clazz = classes[ j++ ] ) ) {
-
- // Remove *all* instances
- while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
- cur = cur.replace( " " + clazz + " ", " " );
- }
- }
-
- // Only assign if different to avoid unneeded rendering.
- finalValue = stripAndCollapse( cur );
- if ( curValue !== finalValue ) {
- elem.setAttribute( "class", finalValue );
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value,
- isValidValue = type === "string" || Array.isArray( value );
-
- if ( typeof stateVal === "boolean" && isValidValue ) {
- return stateVal ? this.addClass( value ) : this.removeClass( value );
- }
-
- if ( isFunction( value ) ) {
- return this.each( function( i ) {
- jQuery( this ).toggleClass(
- value.call( this, i, getClass( this ), stateVal ),
- stateVal
- );
- } );
- }
-
- return this.each( function() {
- var className, i, self, classNames;
-
- if ( isValidValue ) {
-
- // Toggle individual class names
- i = 0;
- self = jQuery( this );
- classNames = classesToArray( value );
-
- while ( ( className = classNames[ i++ ] ) ) {
-
- // Check each className given, space separated list
- if ( self.hasClass( className ) ) {
- self.removeClass( className );
- } else {
- self.addClass( className );
- }
- }
-
- // Toggle whole class name
- } else if ( value === undefined || type === "boolean" ) {
- className = getClass( this );
- if ( className ) {
-
- // Store className if set
- dataPriv.set( this, "__className__", className );
- }
-
- // If the element has a class name or if we're passed `false`,
- // then remove the whole classname (if there was one, the above saved it).
- // Otherwise bring back whatever was previously saved (if anything),
- // falling back to the empty string if nothing was stored.
- if ( this.setAttribute ) {
- this.setAttribute( "class",
- className || value === false ?
- "" :
- dataPriv.get( this, "__className__" ) || ""
- );
- }
- }
- } );
- },
-
- hasClass: function( selector ) {
- var className, elem,
- i = 0;
-
- className = " " + selector + " ";
- while ( ( elem = this[ i++ ] ) ) {
- if ( elem.nodeType === 1 &&
- ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
- return true;
- }
- }
-
- return false;
- }
-} );
-
-
-
-
-var rreturn = /\r/g;
-
-jQuery.fn.extend( {
- val: function( value ) {
- var hooks, ret, valueIsFunction,
- elem = this[ 0 ];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.type ] ||
- jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
- if ( hooks &&
- "get" in hooks &&
- ( ret = hooks.get( elem, "value" ) ) !== undefined
- ) {
- return ret;
- }
-
- ret = elem.value;
-
- // Handle most common string cases
- if ( typeof ret === "string" ) {
- return ret.replace( rreturn, "" );
- }
-
- // Handle cases where value is null/undef or number
- return ret == null ? "" : ret;
- }
-
- return;
- }
-
- valueIsFunction = isFunction( value );
-
- return this.each( function( i ) {
- var val;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( valueIsFunction ) {
- val = value.call( this, i, jQuery( this ).val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
-
- } else if ( typeof val === "number" ) {
- val += "";
-
- } else if ( Array.isArray( val ) ) {
- val = jQuery.map( val, function( value ) {
- return value == null ? "" : value + "";
- } );
- }
-
- hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- } );
- }
-} );
-
-jQuery.extend( {
- valHooks: {
- option: {
- get: function( elem ) {
-
- var val = jQuery.find.attr( elem, "value" );
- return val != null ?
- val :
-
- // Support: IE <=10 - 11 only
- // option.text throws exceptions (#14686, #14858)
- // Strip and collapse whitespace
- // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
- stripAndCollapse( jQuery.text( elem ) );
- }
- },
- select: {
- get: function( elem ) {
- var value, option, i,
- options = elem.options,
- index = elem.selectedIndex,
- one = elem.type === "select-one",
- values = one ? null : [],
- max = one ? index + 1 : options.length;
-
- if ( index < 0 ) {
- i = max;
-
- } else {
- i = one ? index : 0;
- }
-
- // Loop through all the selected options
- for ( ; i < max; i++ ) {
- option = options[ i ];
-
- // Support: IE <=9 only
- // IE8-9 doesn't update selected after form reset (#2551)
- if ( ( option.selected || i === index ) &&
-
- // Don't return options that are disabled or in a disabled optgroup
- !option.disabled &&
- ( !option.parentNode.disabled ||
- !nodeName( option.parentNode, "optgroup" ) ) ) {
-
- // Get the specific value for the option
- value = jQuery( option ).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var optionSet, option,
- options = elem.options,
- values = jQuery.makeArray( value ),
- i = options.length;
-
- while ( i-- ) {
- option = options[ i ];
-
- /* eslint-disable no-cond-assign */
-
- if ( option.selected =
- jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
- ) {
- optionSet = true;
- }
-
- /* eslint-enable no-cond-assign */
- }
-
- // Force browsers to behave consistently when non-matching value is set
- if ( !optionSet ) {
- elem.selectedIndex = -1;
- }
- return values;
- }
- }
- }
-} );
-
-// Radios and checkboxes getter/setter
-jQuery.each( [ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- set: function( elem, value ) {
- if ( Array.isArray( value ) ) {
- return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
- }
- }
- };
- if ( !support.checkOn ) {
- jQuery.valHooks[ this ].get = function( elem ) {
- return elem.getAttribute( "value" ) === null ? "on" : elem.value;
- };
- }
-} );
-
-
-
-
-// Return jQuery for attributes-only inclusion
-
-
-support.focusin = "onfocusin" in window;
-
-
-var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
- stopPropagationCallback = function( e ) {
- e.stopPropagation();
- };
-
-jQuery.extend( jQuery.event, {
-
- trigger: function( event, data, elem, onlyHandlers ) {
-
- var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
- eventPath = [ elem || document ],
- type = hasOwn.call( event, "type" ) ? event.type : event,
- namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
-
- cur = lastElement = tmp = elem = elem || document;
-
- // Don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
- return;
- }
-
- if ( type.indexOf( "." ) > -1 ) {
-
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split( "." );
- type = namespaces.shift();
- namespaces.sort();
- }
- ontype = type.indexOf( ":" ) < 0 && "on" + type;
-
- // Caller can pass in a jQuery.Event object, Object, or just an event type string
- event = event[ jQuery.expando ] ?
- event :
- new jQuery.Event( type, typeof event === "object" && event );
-
- // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
- event.isTrigger = onlyHandlers ? 2 : 3;
- event.namespace = namespaces.join( "." );
- event.rnamespace = event.namespace ?
- new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
- null;
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- if ( !event.target ) {
- event.target = elem;
- }
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data == null ?
- [ event ] :
- jQuery.makeArray( data, [ event ] );
-
- // Allow special events to draw outside the lines
- special = jQuery.event.special[ type ] || {};
- if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
- return;
- }
-
- // Determine event propagation path in advance, per W3C events spec (#9951)
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
- if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
-
- bubbleType = special.delegateType || type;
- if ( !rfocusMorph.test( bubbleType + type ) ) {
- cur = cur.parentNode;
- }
- for ( ; cur; cur = cur.parentNode ) {
- eventPath.push( cur );
- tmp = cur;
- }
-
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
- if ( tmp === ( elem.ownerDocument || document ) ) {
- eventPath.push( tmp.defaultView || tmp.parentWindow || window );
- }
- }
-
- // Fire handlers on the event path
- i = 0;
- while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
- lastElement = cur;
- event.type = i > 1 ?
- bubbleType :
- special.bindType || type;
-
- // jQuery handler
- handle = (
- dataPriv.get( cur, "events" ) || Object.create( null )
- )[ event.type ] &&
- dataPriv.get( cur, "handle" );
- if ( handle ) {
- handle.apply( cur, data );
- }
-
- // Native handler
- handle = ontype && cur[ ontype ];
- if ( handle && handle.apply && acceptData( cur ) ) {
- event.result = handle.apply( cur, data );
- if ( event.result === false ) {
- event.preventDefault();
- }
- }
- }
- event.type = type;
-
- // If nobody prevented the default action, do it now
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
- if ( ( !special._default ||
- special._default.apply( eventPath.pop(), data ) === false ) &&
- acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name as the event.
- // Don't do default actions on window, that's where global variables be (#6170)
- if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
-
- // Don't re-trigger an onFOO event when we call its FOO() method
- tmp = elem[ ontype ];
-
- if ( tmp ) {
- elem[ ontype ] = null;
- }
-
- // Prevent re-triggering of the same event, since we already bubbled it above
- jQuery.event.triggered = type;
-
- if ( event.isPropagationStopped() ) {
- lastElement.addEventListener( type, stopPropagationCallback );
- }
-
- elem[ type ]();
-
- if ( event.isPropagationStopped() ) {
- lastElement.removeEventListener( type, stopPropagationCallback );
- }
-
- jQuery.event.triggered = undefined;
-
- if ( tmp ) {
- elem[ ontype ] = tmp;
- }
- }
- }
- }
-
- return event.result;
- },
-
- // Piggyback on a donor event to simulate a different one
- // Used only for `focus(in | out)` events
- simulate: function( type, elem, event ) {
- var e = jQuery.extend(
- new jQuery.Event(),
- event,
- {
- type: type,
- isSimulated: true
- }
- );
-
- jQuery.event.trigger( e, null, elem );
- }
-
-} );
-
-jQuery.fn.extend( {
-
- trigger: function( type, data ) {
- return this.each( function() {
- jQuery.event.trigger( type, data, this );
- } );
- },
- triggerHandler: function( type, data ) {
- var elem = this[ 0 ];
- if ( elem ) {
- return jQuery.event.trigger( type, data, elem, true );
- }
- }
-} );
-
-
-// Support: Firefox <=44
-// Firefox doesn't have focus(in | out) events
-// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
-//
-// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
-// focus(in | out) events fire after focus & blur events,
-// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
-// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
-if ( !support.focusin ) {
- jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler on the document while someone wants focusin/focusout
- var handler = function( event ) {
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
- };
-
- jQuery.event.special[ fix ] = {
- setup: function() {
-
- // Handle: regular nodes (via `this.ownerDocument`), window
- // (via `this.document`) & document (via `this`).
- var doc = this.ownerDocument || this.document || this,
- attaches = dataPriv.access( doc, fix );
-
- if ( !attaches ) {
- doc.addEventListener( orig, handler, true );
- }
- dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
- },
- teardown: function() {
- var doc = this.ownerDocument || this.document || this,
- attaches = dataPriv.access( doc, fix ) - 1;
-
- if ( !attaches ) {
- doc.removeEventListener( orig, handler, true );
- dataPriv.remove( doc, fix );
-
- } else {
- dataPriv.access( doc, fix, attaches );
- }
- }
- };
- } );
-}
-var location = window.location;
-
-var nonce = { guid: Date.now() };
-
-var rquery = ( /\?/ );
-
-
-
-// Cross-browser xml parsing
-jQuery.parseXML = function( data ) {
- var xml;
- if ( !data || typeof data !== "string" ) {
- return null;
- }
-
- // Support: IE 9 - 11 only
- // IE throws on parseFromString with invalid input.
- try {
- xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
- } catch ( e ) {
- xml = undefined;
- }
-
- if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
-};
-
-
-var
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
- rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-function buildParams( prefix, obj, traditional, add ) {
- var name;
-
- if ( Array.isArray( obj ) ) {
-
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
-
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
-
- // Item is non-scalar (array or object), encode its numeric index.
- buildParams(
- prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
- v,
- traditional,
- add
- );
- }
- } );
-
- } else if ( !traditional && toType( obj ) === "object" ) {
-
- // Serialize object item.
- for ( name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
-
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-
-// Serialize an array of form elements or a set of
-// key/values into a query string
-jQuery.param = function( a, traditional ) {
- var prefix,
- s = [],
- add = function( key, valueOrFunction ) {
-
- // If value is a function, invoke it and use its return value
- var value = isFunction( valueOrFunction ) ?
- valueOrFunction() :
- valueOrFunction;
-
- s[ s.length ] = encodeURIComponent( key ) + "=" +
- encodeURIComponent( value == null ? "" : value );
- };
-
- if ( a == null ) {
- return "";
- }
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- } );
-
- } else {
-
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- // Return the resulting serialization
- return s.join( "&" );
-};
-
-jQuery.fn.extend( {
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
- serializeArray: function() {
- return this.map( function() {
-
- // Can add propHook for "elements" to filter or add form elements
- var elements = jQuery.prop( this, "elements" );
- return elements ? jQuery.makeArray( elements ) : this;
- } )
- .filter( function() {
- var type = this.type;
-
- // Use .is( ":disabled" ) so that fieldset[disabled] works
- return this.name && !jQuery( this ).is( ":disabled" ) &&
- rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
- ( this.checked || !rcheckableType.test( type ) );
- } )
- .map( function( _i, elem ) {
- var val = jQuery( this ).val();
-
- if ( val == null ) {
- return null;
- }
-
- if ( Array.isArray( val ) ) {
- return jQuery.map( val, function( val ) {
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- } );
- }
-
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- } ).get();
- }
-} );
-
-
-var
- r20 = /%20/g,
- rhash = /#.*$/,
- rantiCache = /([?&])_=[^&]*/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
-
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = "*/".concat( "*" ),
-
- // Anchor tag for parsing the document origin
- originAnchor = document.createElement( "a" );
- originAnchor.href = location.href;
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- var dataType,
- i = 0,
- dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
-
- if ( isFunction( func ) ) {
-
- // For each dataType in the dataTypeExpression
- while ( ( dataType = dataTypes[ i++ ] ) ) {
-
- // Prepend if requested
- if ( dataType[ 0 ] === "+" ) {
- dataType = dataType.slice( 1 ) || "*";
- ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
-
- // Otherwise append
- } else {
- ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
- }
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
-
- var inspected = {},
- seekingTransport = ( structure === transports );
-
- function inspect( dataType ) {
- var selected;
- inspected[ dataType ] = true;
- jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
- var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
- if ( typeof dataTypeOrTransport === "string" &&
- !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
-
- options.dataTypes.unshift( dataTypeOrTransport );
- inspect( dataTypeOrTransport );
- return false;
- } else if ( seekingTransport ) {
- return !( selected = dataTypeOrTransport );
- }
- } );
- return selected;
- }
-
- return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
- var key, deep,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
- for ( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
-
- return target;
-}
-
-/* Handles responses to an ajax request:
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
- var ct, type, finalDataType, firstDataType,
- contents = s.contents,
- dataTypes = s.dataTypes;
-
- // Remove auto dataType and get content-type in the process
- while ( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
-
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
-
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-/* Chain conversions given the request and the original response
- * Also sets the responseXXX fields on the jqXHR instance
- */
-function ajaxConvert( s, response, jqXHR, isSuccess ) {
- var conv2, current, conv, tmp, prev,
- converters = {},
-
- // Work with a copy of dataTypes in case we need to modify it for conversion
- dataTypes = s.dataTypes.slice();
-
- // Create converters map with lowercased keys
- if ( dataTypes[ 1 ] ) {
- for ( conv in s.converters ) {
- converters[ conv.toLowerCase() ] = s.converters[ conv ];
- }
- }
-
- current = dataTypes.shift();
-
- // Convert to each sequential dataType
- while ( current ) {
-
- if ( s.responseFields[ current ] ) {
- jqXHR[ s.responseFields[ current ] ] = response;
- }
-
- // Apply the dataFilter if provided
- if ( !prev && isSuccess && s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- prev = current;
- current = dataTypes.shift();
-
- if ( current ) {
-
- // There's only work to do if current dataType is non-auto
- if ( current === "*" ) {
-
- current = prev;
-
- // Convert response if prev dataType is non-auto and differs from current
- } else if ( prev !== "*" && prev !== current ) {
-
- // Seek a direct converter
- conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
- // If none found, seek a pair
- if ( !conv ) {
- for ( conv2 in converters ) {
-
- // If conv2 outputs current
- tmp = conv2.split( " " );
- if ( tmp[ 1 ] === current ) {
-
- // If prev can be converted to accepted input
- conv = converters[ prev + " " + tmp[ 0 ] ] ||
- converters[ "* " + tmp[ 0 ] ];
- if ( conv ) {
-
- // Condense equivalence converters
- if ( conv === true ) {
- conv = converters[ conv2 ];
-
- // Otherwise, insert the intermediate dataType
- } else if ( converters[ conv2 ] !== true ) {
- current = tmp[ 0 ];
- dataTypes.unshift( tmp[ 1 ] );
- }
- break;
- }
- }
- }
- }
-
- // Apply converter (if not an equivalence)
- if ( conv !== true ) {
-
- // Unless errors are allowed to bubble, catch and return them
- if ( conv && s.throws ) {
- response = conv( response );
- } else {
- try {
- response = conv( response );
- } catch ( e ) {
- return {
- state: "parsererror",
- error: conv ? e : "No conversion from " + prev + " to " + current
- };
- }
- }
- }
- }
- }
- }
-
- return { state: "success", data: response };
-}
-
-jQuery.extend( {
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {},
-
- ajaxSettings: {
- url: location.href,
- type: "GET",
- isLocal: rlocalProtocol.test( location.protocol ),
- global: true,
- processData: true,
- async: true,
- contentType: "application/x-www-form-urlencoded; charset=UTF-8",
-
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- throws: false,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- "*": allTypes,
- text: "text/plain",
- html: "text/html",
- xml: "application/xml, text/xml",
- json: "application/json, text/javascript"
- },
-
- contents: {
- xml: /\bxml\b/,
- html: /\bhtml/,
- json: /\bjson\b/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText",
- json: "responseJSON"
- },
-
- // Data converters
- // Keys separate source (or catchall "*") and destination types with a single space
- converters: {
-
- // Convert anything to text
- "* text": String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": JSON.parse,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- url: true,
- context: true
- }
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function( target, settings ) {
- return settings ?
-
- // Building a settings object
- ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
- // Extending ajaxSettings
- ajaxExtend( jQuery.ajaxSettings, target );
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var transport,
-
- // URL without anti-cache param
- cacheURL,
-
- // Response headers
- responseHeadersString,
- responseHeaders,
-
- // timeout handle
- timeoutTimer,
-
- // Url cleanup var
- urlAnchor,
-
- // Request state (becomes false upon send and true upon completion)
- completed,
-
- // To know if global events are to be dispatched
- fireGlobals,
-
- // Loop variable
- i,
-
- // uncached part of the url
- uncached,
-
- // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
-
- // Callbacks context
- callbackContext = s.context || s,
-
- // Context for global events is callbackContext if it is a DOM node or jQuery collection
- globalEventContext = s.context &&
- ( callbackContext.nodeType || callbackContext.jquery ) ?
- jQuery( callbackContext ) :
- jQuery.event,
-
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks( "once memory" ),
-
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
-
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
-
- // Default abort message
- strAbort = "canceled",
-
- // Fake xhr
- jqXHR = {
- readyState: 0,
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( completed ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
- responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
- ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
- .concat( match[ 2 ] );
- }
- }
- match = responseHeaders[ key.toLowerCase() + " " ];
- }
- return match == null ? null : match.join( ", " );
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return completed ? responseHeadersString : null;
- },
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- if ( completed == null ) {
- name = requestHeadersNames[ name.toLowerCase() ] =
- requestHeadersNames[ name.toLowerCase() ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( completed == null ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Status-dependent callbacks
- statusCode: function( map ) {
- var code;
- if ( map ) {
- if ( completed ) {
-
- // Execute the appropriate callbacks
- jqXHR.always( map[ jqXHR.status ] );
- } else {
-
- // Lazy-add the new callbacks in a way that preserves old ones
- for ( code in map ) {
- statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
- }
- }
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- var finalText = statusText || strAbort;
- if ( transport ) {
- transport.abort( finalText );
- }
- done( 0, finalText );
- return this;
- }
- };
-
- // Attach deferreds
- deferred.promise( jqXHR );
-
- // Add protocol if not provided (prefilters might expect it)
- // Handle falsy url in the settings object (#10093: consistency with old signature)
- // We also use the url parameter if available
- s.url = ( ( url || s.url || location.href ) + "" )
- .replace( rprotocol, location.protocol + "//" );
-
- // Alias method option to type as per ticket #12004
- s.type = options.method || options.type || s.method || s.type;
-
- // Extract dataTypes list
- s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
-
- // A cross-domain request is in order when the origin doesn't match the current origin.
- if ( s.crossDomain == null ) {
- urlAnchor = document.createElement( "a" );
-
- // Support: IE <=8 - 11, Edge 12 - 15
- // IE throws exception on accessing the href property if url is malformed,
- // e.g. http://example.com:80x/
- try {
- urlAnchor.href = s.url;
-
- // Support: IE <=8 - 11 only
- // Anchor's host property isn't correctly set when s.url is relative
- urlAnchor.href = urlAnchor.href;
- s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
- urlAnchor.protocol + "//" + urlAnchor.host;
- } catch ( e ) {
-
- // If there is an error parsing the URL, assume it is crossDomain,
- // it can be rejected by the transport if it is invalid
- s.crossDomain = true;
- }
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefilter, stop there
- if ( completed ) {
- return jqXHR;
- }
-
- // We can fire global events as of now if asked to
- // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
- fireGlobals = jQuery.event && s.global;
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger( "ajaxStart" );
- }
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Save the URL in case we're toying with the If-Modified-Since
- // and/or If-None-Match header later on
- // Remove hash to simplify url manipulation
- cacheURL = s.url.replace( rhash, "" );
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // Remember the hash so we can put it back
- uncached = s.url.slice( cacheURL.length );
-
- // If data is available and should be processed, append data to url
- if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
- cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
-
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Add or update anti-cache param if needed
- if ( s.cache === false ) {
- cacheURL = cacheURL.replace( rantiCache, "$1" );
- uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
- uncached;
- }
-
- // Put hash and anti-cache on the URL that will be requested (gh-1732)
- s.url = cacheURL + uncached;
-
- // Change '%20' to '+' if this is encoded form body content (gh-2658)
- } else if ( s.data && s.processData &&
- ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
- s.data = s.data.replace( r20, "+" );
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- if ( jQuery.lastModified[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
- }
- if ( jQuery.etag[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
- s.accepts[ s.dataTypes[ 0 ] ] +
- ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend &&
- ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
-
- // Abort if not done already and return
- return jqXHR.abort();
- }
-
- // Aborting is no longer a cancellation
- strAbort = "abort";
-
- // Install callbacks on deferreds
- completeDeferred.add( s.complete );
- jqXHR.done( s.success );
- jqXHR.fail( s.error );
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
-
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
-
- // If request was aborted inside ajaxSend, stop there
- if ( completed ) {
- return jqXHR;
- }
-
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = window.setTimeout( function() {
- jqXHR.abort( "timeout" );
- }, s.timeout );
- }
-
- try {
- completed = false;
- transport.send( requestHeaders, done );
- } catch ( e ) {
-
- // Rethrow post-completion exceptions
- if ( completed ) {
- throw e;
- }
-
- // Propagate others as results
- done( -1, e );
- }
- }
-
- // Callback for when everything is done
- function done( status, nativeStatusText, responses, headers ) {
- var isSuccess, success, error, response, modified,
- statusText = nativeStatusText;
-
- // Ignore repeat invocations
- if ( completed ) {
- return;
- }
-
- completed = true;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- window.clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- // Determine if successful
- isSuccess = status >= 200 && status < 300 || status === 304;
-
- // Get response data
- if ( responses ) {
- response = ajaxHandleResponses( s, jqXHR, responses );
- }
-
- // Use a noop converter for missing script
- if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) {
- s.converters[ "text script" ] = function() {};
- }
-
- // Convert no matter what (that way responseXXX fields are always set)
- response = ajaxConvert( s, response, jqXHR, isSuccess );
-
- // If successful, handle type chaining
- if ( isSuccess ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- modified = jqXHR.getResponseHeader( "Last-Modified" );
- if ( modified ) {
- jQuery.lastModified[ cacheURL ] = modified;
- }
- modified = jqXHR.getResponseHeader( "etag" );
- if ( modified ) {
- jQuery.etag[ cacheURL ] = modified;
- }
- }
-
- // if no content
- if ( status === 204 || s.type === "HEAD" ) {
- statusText = "nocontent";
-
- // if not modified
- } else if ( status === 304 ) {
- statusText = "notmodified";
-
- // If we have data, let's convert it
- } else {
- statusText = response.state;
- success = response.data;
- error = response.error;
- isSuccess = !error;
- }
- } else {
-
- // Extract error from statusText and normalize for non-aborts
- error = statusText;
- if ( status || !statusText ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger( "ajaxStop" );
- }
- }
- }
-
- return jqXHR;
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- }
-} );
-
-jQuery.each( [ "get", "post" ], function( _i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
-
- // Shift arguments if data argument was omitted
- if ( isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- // The url can be an options object (which then must have .url)
- return jQuery.ajax( jQuery.extend( {
- url: url,
- type: method,
- dataType: type,
- data: data,
- success: callback
- }, jQuery.isPlainObject( url ) && url ) );
- };
-} );
-
-jQuery.ajaxPrefilter( function( s ) {
- var i;
- for ( i in s.headers ) {
- if ( i.toLowerCase() === "content-type" ) {
- s.contentType = s.headers[ i ] || "";
- }
- }
-} );
-
-
-jQuery._evalUrl = function( url, options, doc ) {
- return jQuery.ajax( {
- url: url,
-
- // Make this explicit, since user can override this through ajaxSetup (#11264)
- type: "GET",
- dataType: "script",
- cache: true,
- async: false,
- global: false,
-
- // Only evaluate the response if it is successful (gh-4126)
- // dataFilter is not invoked for failure responses, so using it instead
- // of the default converter is kludgy but it works.
- converters: {
- "text script": function() {}
- },
- dataFilter: function( response ) {
- jQuery.globalEval( response, options, doc );
- }
- } );
-};
-
-
-jQuery.fn.extend( {
- wrapAll: function( html ) {
- var wrap;
-
- if ( this[ 0 ] ) {
- if ( isFunction( html ) ) {
- html = html.call( this[ 0 ] );
- }
-
- // The elements to wrap the target around
- wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
-
- if ( this[ 0 ].parentNode ) {
- wrap.insertBefore( this[ 0 ] );
- }
-
- wrap.map( function() {
- var elem = this;
-
- while ( elem.firstElementChild ) {
- elem = elem.firstElementChild;
- }
-
- return elem;
- } ).append( this );
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( isFunction( html ) ) {
- return this.each( function( i ) {
- jQuery( this ).wrapInner( html.call( this, i ) );
- } );
- }
-
- return this.each( function() {
- var self = jQuery( this ),
- contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- } );
- },
-
- wrap: function( html ) {
- var htmlIsFunction = isFunction( html );
-
- return this.each( function( i ) {
- jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
- } );
- },
-
- unwrap: function( selector ) {
- this.parent( selector ).not( "body" ).each( function() {
- jQuery( this ).replaceWith( this.childNodes );
- } );
- return this;
- }
-} );
-
-
-jQuery.expr.pseudos.hidden = function( elem ) {
- return !jQuery.expr.pseudos.visible( elem );
-};
-jQuery.expr.pseudos.visible = function( elem ) {
- return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
-};
-
-
-
-
-jQuery.ajaxSettings.xhr = function() {
- try {
- return new window.XMLHttpRequest();
- } catch ( e ) {}
-};
-
-var xhrSuccessStatus = {
-
- // File protocol always yields status code 0, assume 200
- 0: 200,
-
- // Support: IE <=9 only
- // #1450: sometimes IE returns 1223 when it should be 204
- 1223: 204
- },
- xhrSupported = jQuery.ajaxSettings.xhr();
-
-support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-support.ajax = xhrSupported = !!xhrSupported;
-
-jQuery.ajaxTransport( function( options ) {
- var callback, errorCallback;
-
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( support.cors || xhrSupported && !options.crossDomain ) {
- return {
- send: function( headers, complete ) {
- var i,
- xhr = options.xhr();
-
- xhr.open(
- options.type,
- options.url,
- options.async,
- options.username,
- options.password
- );
-
- // Apply custom fields if provided
- if ( options.xhrFields ) {
- for ( i in options.xhrFields ) {
- xhr[ i ] = options.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( options.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( options.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
- headers[ "X-Requested-With" ] = "XMLHttpRequest";
- }
-
- // Set headers
- for ( i in headers ) {
- xhr.setRequestHeader( i, headers[ i ] );
- }
-
- // Callback
- callback = function( type ) {
- return function() {
- if ( callback ) {
- callback = errorCallback = xhr.onload =
- xhr.onerror = xhr.onabort = xhr.ontimeout =
- xhr.onreadystatechange = null;
-
- if ( type === "abort" ) {
- xhr.abort();
- } else if ( type === "error" ) {
-
- // Support: IE <=9 only
- // On a manual native abort, IE9 throws
- // errors on any property access that is not readyState
- if ( typeof xhr.status !== "number" ) {
- complete( 0, "error" );
- } else {
- complete(
-
- // File: protocol always yields status 0; see #8605, #14207
- xhr.status,
- xhr.statusText
- );
- }
- } else {
- complete(
- xhrSuccessStatus[ xhr.status ] || xhr.status,
- xhr.statusText,
-
- // Support: IE <=9 only
- // IE9 has no XHR2 but throws on binary (trac-11426)
- // For XHR2 non-text, let the caller handle it (gh-2498)
- ( xhr.responseType || "text" ) !== "text" ||
- typeof xhr.responseText !== "string" ?
- { binary: xhr.response } :
- { text: xhr.responseText },
- xhr.getAllResponseHeaders()
- );
- }
- }
- };
- };
-
- // Listen to events
- xhr.onload = callback();
- errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
-
- // Support: IE 9 only
- // Use onreadystatechange to replace onabort
- // to handle uncaught aborts
- if ( xhr.onabort !== undefined ) {
- xhr.onabort = errorCallback;
- } else {
- xhr.onreadystatechange = function() {
-
- // Check readyState before timeout as it changes
- if ( xhr.readyState === 4 ) {
-
- // Allow onerror to be called first,
- // but that will not handle a native abort
- // Also, save errorCallback to a variable
- // as xhr.onerror cannot be accessed
- window.setTimeout( function() {
- if ( callback ) {
- errorCallback();
- }
- } );
- }
- };
- }
-
- // Create the abort callback
- callback = callback( "abort" );
-
- try {
-
- // Do send the request (this may raise an exception)
- xhr.send( options.hasContent && options.data || null );
- } catch ( e ) {
-
- // #14683: Only rethrow if this hasn't been notified as an error yet
- if ( callback ) {
- throw e;
- }
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback();
- }
- }
- };
- }
-} );
-
-
-
-
-// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
-jQuery.ajaxPrefilter( function( s ) {
- if ( s.crossDomain ) {
- s.contents.script = false;
- }
-} );
-
-// Install script dataType
-jQuery.ajaxSetup( {
- accepts: {
- script: "text/javascript, application/javascript, " +
- "application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /\b(?:java|ecma)script\b/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-} );
-
-// Handle cache's special case and crossDomain
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- }
-} );
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function( s ) {
-
- // This transport only deals with cross domain or forced-by-attrs requests
- if ( s.crossDomain || s.scriptAttrs ) {
- var script, callback;
- return {
- send: function( _, complete ) {
- script = jQuery( "<script>" )
- .attr( s.scriptAttrs || {} )
- .prop( { charset: s.scriptCharset, src: s.url } )
- .on( "load error", callback = function( evt ) {
- script.remove();
- callback = null;
- if ( evt ) {
- complete( evt.type === "error" ? 404 : 200, evt.type );
- }
- } );
-
- // Use native DOM manipulation to avoid our domManip AJAX trickery
- document.head.appendChild( script[ 0 ] );
- },
- abort: function() {
- if ( callback ) {
- callback();
- }
- }
- };
- }
-} );
-
-
-
-
-var oldCallbacks = [],
- rjsonp = /(=)\?(?=&|$)|\?\?/;
-
-// Default jsonp settings
-jQuery.ajaxSetup( {
- jsonp: "callback",
- jsonpCallback: function() {
- var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
- this[ callback ] = true;
- return callback;
- }
-} );
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
- var callbackName, overwritten, responseContainer,
- jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
- "url" :
- typeof s.data === "string" &&
- ( s.contentType || "" )
- .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
- rjsonp.test( s.data ) && "data"
- );
-
- // Handle iff the expected data type is "jsonp" or we have a parameter to set
- if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
-
- // Get callback name, remembering preexisting value associated with it
- callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
- s.jsonpCallback() :
- s.jsonpCallback;
-
- // Insert callback into url or form data
- if ( jsonProp ) {
- s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
- } else if ( s.jsonp !== false ) {
- s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
- }
-
- // Use data converter to retrieve json after script execution
- s.converters[ "script json" ] = function() {
- if ( !responseContainer ) {
- jQuery.error( callbackName + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- // Force json dataType
- s.dataTypes[ 0 ] = "json";
-
- // Install callback
- overwritten = window[ callbackName ];
- window[ callbackName ] = function() {
- responseContainer = arguments;
- };
-
- // Clean-up function (fires after converters)
- jqXHR.always( function() {
-
- // If previous value didn't exist - remove it
- if ( overwritten === undefined ) {
- jQuery( window ).removeProp( callbackName );
-
- // Otherwise restore preexisting value
- } else {
- window[ callbackName ] = overwritten;
- }
-
- // Save back as free
- if ( s[ callbackName ] ) {
-
- // Make sure that re-using the options doesn't screw things around
- s.jsonpCallback = originalSettings.jsonpCallback;
-
- // Save the callback name for future use
- oldCallbacks.push( callbackName );
- }
-
- // Call if it was a function and we have a response
- if ( responseContainer && isFunction( overwritten ) ) {
- overwritten( responseContainer[ 0 ] );
- }
-
- responseContainer = overwritten = undefined;
- } );
-
- // Delegate to script
- return "script";
- }
-} );
-
-
-
-
-// Support: Safari 8 only
-// In Safari 8 documents created via document.implementation.createHTMLDocument
-// collapse sibling forms: the second one becomes a child of the first one.
-// Because of that, this security measure has to be disabled in Safari 8.
-// https://bugs.webkit.org/show_bug.cgi?id=137337
-support.createHTMLDocument = ( function() {
- var body = document.implementation.createHTMLDocument( "" ).body;
- body.innerHTML = "<form></form><form></form>";
- return body.childNodes.length === 2;
-} )();
-
-
-// Argument "data" should be string of html
-// context (optional): If specified, the fragment will be created in this context,
-// defaults to document
-// keepScripts (optional): If true, will include scripts passed in the html string
-jQuery.parseHTML = function( data, context, keepScripts ) {
- if ( typeof data !== "string" ) {
- return [];
- }
- if ( typeof context === "boolean" ) {
- keepScripts = context;
- context = false;
- }
-
- var base, parsed, scripts;
-
- if ( !context ) {
-
- // Stop scripts or inline event handlers from being executed immediately
- // by using document.implementation
- if ( support.createHTMLDocument ) {
- context = document.implementation.createHTMLDocument( "" );
-
- // Set the base href for the created document
- // so any parsed elements with URLs
- // are based on the document's URL (gh-2965)
- base = context.createElement( "base" );
- base.href = document.location.href;
- context.head.appendChild( base );
- } else {
- context = document;
- }
- }
-
- parsed = rsingleTag.exec( data );
- scripts = !keepScripts && [];
-
- // Single tag
- if ( parsed ) {
- return [ context.createElement( parsed[ 1 ] ) ];
- }
-
- parsed = buildFragment( [ data ], context, scripts );
-
- if ( scripts && scripts.length ) {
- jQuery( scripts ).remove();
- }
-
- return jQuery.merge( [], parsed.childNodes );
-};
-
-
-/**
- * Load a url into a page
- */
-jQuery.fn.load = function( url, params, callback ) {
- var selector, type, response,
- self = this,
- off = url.indexOf( " " );
-
- if ( off > -1 ) {
- selector = stripAndCollapse( url.slice( off ) );
- url = url.slice( 0, off );
- }
-
- // If it's a function
- if ( isFunction( params ) ) {
-
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if ( params && typeof params === "object" ) {
- type = "POST";
- }
-
- // If we have elements to modify, make the request
- if ( self.length > 0 ) {
- jQuery.ajax( {
- url: url,
-
- // If "type" variable is undefined, then "GET" method will be used.
- // Make value of this field explicit since
- // user can override it through ajaxSetup method
- type: type || "GET",
- dataType: "html",
- data: params
- } ).done( function( responseText ) {
-
- // Save response for use in complete callback
- response = arguments;
-
- self.html( selector ?
-
- // If a selector was specified, locate the right elements in a dummy div
- // Exclude scripts to avoid IE 'Permission Denied' errors
- jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
-
- // Otherwise use the full result
- responseText );
-
- // If the request succeeds, this function gets "data", "status", "jqXHR"
- // but they are ignored because response was set above.
- // If it fails, this function gets "jqXHR", "status", "error"
- } ).always( callback && function( jqXHR, status ) {
- self.each( function() {
- callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
- } );
- } );
- }
-
- return this;
-};
-
-
-
-
-jQuery.expr.pseudos.animated = function( elem ) {
- return jQuery.grep( jQuery.timers, function( fn ) {
- return elem === fn.elem;
- } ).length;
-};
-
-
-
-
-jQuery.offset = {
- setOffset: function( elem, options, i ) {
- var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
- position = jQuery.css( elem, "position" ),
- curElem = jQuery( elem ),
- props = {};
-
- // Set position first, in-case top/left are set even on static elem
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
-
- curOffset = curElem.offset();
- curCSSTop = jQuery.css( elem, "top" );
- curCSSLeft = jQuery.css( elem, "left" );
- calculatePosition = ( position === "absolute" || position === "fixed" ) &&
- ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
-
- // Need to be able to calculate position if either
- // top or left is auto and position is either absolute or fixed
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
-
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
-
- if ( isFunction( options ) ) {
-
- // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
- options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
- }
-
- if ( options.top != null ) {
- props.top = ( options.top - curOffset.top ) + curTop;
- }
- if ( options.left != null ) {
- props.left = ( options.left - curOffset.left ) + curLeft;
- }
-
- if ( "using" in options ) {
- options.using.call( elem, props );
-
- } else {
- if ( typeof props.top === "number" ) {
- props.top += "px";
- }
- if ( typeof props.left === "number" ) {
- props.left += "px";
- }
- curElem.css( props );
- }
- }
-};
-
-jQuery.fn.extend( {
-
- // offset() relates an element's border box to the document origin
- offset: function( options ) {
-
- // Preserve chaining for setter
- if ( arguments.length ) {
- return options === undefined ?
- this :
- this.each( function( i ) {
- jQuery.offset.setOffset( this, options, i );
- } );
- }
-
- var rect, win,
- elem = this[ 0 ];
-
- if ( !elem ) {
- return;
- }
-
- // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
- // Support: IE <=11 only
- // Running getBoundingClientRect on a
- // disconnected node in IE throws an error
- if ( !elem.getClientRects().length ) {
- return { top: 0, left: 0 };
- }
-
- // Get document-relative position by adding viewport scroll to viewport-relative gBCR
- rect = elem.getBoundingClientRect();
- win = elem.ownerDocument.defaultView;
- return {
- top: rect.top + win.pageYOffset,
- left: rect.left + win.pageXOffset
- };
- },
-
- // position() relates an element's margin box to its offset parent's padding box
- // This corresponds to the behavior of CSS absolute positioning
- position: function() {
- if ( !this[ 0 ] ) {
- return;
- }
-
- var offsetParent, offset, doc,
- elem = this[ 0 ],
- parentOffset = { top: 0, left: 0 };
-
- // position:fixed elements are offset from the viewport, which itself always has zero offset
- if ( jQuery.css( elem, "position" ) === "fixed" ) {
-
- // Assume position:fixed implies availability of getBoundingClientRect
- offset = elem.getBoundingClientRect();
-
- } else {
- offset = this.offset();
-
- // Account for the *real* offset parent, which can be the document or its root element
- // when a statically positioned element is identified
- doc = elem.ownerDocument;
- offsetParent = elem.offsetParent || doc.documentElement;
- while ( offsetParent &&
- ( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
- jQuery.css( offsetParent, "position" ) === "static" ) {
-
- offsetParent = offsetParent.parentNode;
- }
- if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
-
- // Incorporate borders into its offset, since they are outside its content origin
- parentOffset = jQuery( offsetParent ).offset();
- parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
- parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
- }
- }
-
- // Subtract parent offsets and element margins
- return {
- top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
- left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
- };
- },
-
- // This method will return documentElement in the following cases:
- // 1) For the element inside the iframe without offsetParent, this method will return
- // documentElement of the parent window
- // 2) For the hidden or detached element
- // 3) For body or html element, i.e. in case of the html node - it will return itself
- //
- // but those exceptions were never presented as a real life use-cases
- // and might be considered as more preferable results.
- //
- // This logic, however, is not guaranteed and can change at any point in the future
- offsetParent: function() {
- return this.map( function() {
- var offsetParent = this.offsetParent;
-
- while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
- offsetParent = offsetParent.offsetParent;
- }
-
- return offsetParent || documentElement;
- } );
- }
-} );
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
- var top = "pageYOffset" === prop;
-
- jQuery.fn[ method ] = function( val ) {
- return access( this, function( elem, method, val ) {
-
- // Coalesce documents and windows
- var win;
- if ( isWindow( elem ) ) {
- win = elem;
- } else if ( elem.nodeType === 9 ) {
- win = elem.defaultView;
- }
-
- if ( val === undefined ) {
- return win ? win[ prop ] : elem[ method ];
- }
-
- if ( win ) {
- win.scrollTo(
- !top ? val : win.pageXOffset,
- top ? val : win.pageYOffset
- );
-
- } else {
- elem[ method ] = val;
- }
- }, method, val, arguments.length );
- };
-} );
-
-// Support: Safari <=7 - 9.1, Chrome <=37 - 49
-// Add the top/left cssHooks using jQuery.fn.position
-// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
-// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
-// getComputedStyle returns percent when specified for top/left/bottom/right;
-// rather than make the css module depend on the offset module, just check for it here
-jQuery.each( [ "top", "left" ], function( _i, prop ) {
- jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
- function( elem, computed ) {
- if ( computed ) {
- computed = curCSS( elem, prop );
-
- // If curCSS returns percentage, fallback to offset
- return rnumnonpx.test( computed ) ?
- jQuery( elem ).position()[ prop ] + "px" :
- computed;
- }
- }
- );
-} );
-
-
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
- jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
- function( defaultExtra, funcName ) {
-
- // Margin is only for outerHeight, outerWidth
- jQuery.fn[ funcName ] = function( margin, value ) {
- var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
- extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
-
- return access( this, function( elem, type, value ) {
- var doc;
-
- if ( isWindow( elem ) ) {
-
- // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
- return funcName.indexOf( "outer" ) === 0 ?
- elem[ "inner" + name ] :
- elem.document.documentElement[ "client" + name ];
- }
-
- // Get document width or height
- if ( elem.nodeType === 9 ) {
- doc = elem.documentElement;
-
- // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
- // whichever is greatest
- return Math.max(
- elem.body[ "scroll" + name ], doc[ "scroll" + name ],
- elem.body[ "offset" + name ], doc[ "offset" + name ],
- doc[ "client" + name ]
- );
- }
-
- return value === undefined ?
-
- // Get width or height on the element, requesting but not forcing parseFloat
- jQuery.css( elem, type, extra ) :
-
- // Set width or height on the element
- jQuery.style( elem, type, value, extra );
- }, type, chainable ? margin : undefined, chainable );
- };
- } );
-} );
-
-
-jQuery.each( [
- "ajaxStart",
- "ajaxStop",
- "ajaxComplete",
- "ajaxError",
- "ajaxSuccess",
- "ajaxSend"
-], function( _i, type ) {
- jQuery.fn[ type ] = function( fn ) {
- return this.on( type, fn );
- };
-} );
-
-
-
-
-jQuery.fn.extend( {
-
- bind: function( types, data, fn ) {
- return this.on( types, null, data, fn );
- },
- unbind: function( types, fn ) {
- return this.off( types, null, fn );
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.on( types, selector, data, fn );
- },
- undelegate: function( selector, types, fn ) {
-
- // ( namespace ) or ( selector, types [, fn] )
- return arguments.length === 1 ?
- this.off( selector, "**" ) :
- this.off( types, selector || "**", fn );
- },
-
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- }
-} );
-
-jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup contextmenu" ).split( " " ),
- function( _i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( data, fn ) {
- return arguments.length > 0 ?
- this.on( name, null, data, fn ) :
- this.trigger( name );
- };
- } );
-
-
-
-
-// Support: Android <=4.0 only
-// Make sure we trim BOM and NBSP
-var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
-
-// Bind a function to a context, optionally partially applying any
-// arguments.
-// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
-// However, it is not slated for removal any time soon
-jQuery.proxy = function( fn, context ) {
- var tmp, args, proxy;
-
- if ( typeof context === "string" ) {
- tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- args = slice.call( arguments, 2 );
- proxy = function() {
- return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
- return proxy;
-};
-
-jQuery.holdReady = function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
-};
-jQuery.isArray = Array.isArray;
-jQuery.parseJSON = JSON.parse;
-jQuery.nodeName = nodeName;
-jQuery.isFunction = isFunction;
-jQuery.isWindow = isWindow;
-jQuery.camelCase = camelCase;
-jQuery.type = toType;
-
-jQuery.now = Date.now;
-
-jQuery.isNumeric = function( obj ) {
-
- // As of jQuery 3.0, isNumeric is limited to
- // strings and numbers (primitives or objects)
- // that can be coerced to finite numbers (gh-2662)
- var type = jQuery.type( obj );
- return ( type === "number" || type === "string" ) &&
-
- // parseFloat NaNs numeric-cast false positives ("")
- // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
- // subtraction forces infinities to NaN
- !isNaN( obj - parseFloat( obj ) );
-};
-
-jQuery.trim = function( text ) {
- return text == null ?
- "" :
- ( text + "" ).replace( rtrim, "" );
-};
-
-
-
-// Register as a named AMD module, since jQuery can be concatenated with other
-// files that may use define, but not via a proper concatenation script that
-// understands anonymous AMD modules. A named AMD is safest and most robust
-// way to register. Lowercase jquery is used because AMD module names are
-// derived from file names, and jQuery is normally delivered in a lowercase
-// file name. Do this after creating the global so that if an AMD module wants
-// to call noConflict to hide this version of jQuery, it will work.
-
-// Note that for maximum portability, libraries that are not jQuery should
-// declare themselves as anonymous modules, and avoid setting a global if an
-// AMD loader is present. jQuery is a special case. For more information, see
-// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
-
-if ( typeof define === "function" && define.amd ) {
- define( "jquery", [], function() {
- return jQuery;
- } );
-}
-
-
-
-
-var
-
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$;
-
-jQuery.noConflict = function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
-
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
-};
-
-// Expose jQuery and $ identifiers, even in AMD
-// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
-// and CommonJS for browser emulators (#13566)
-if ( typeof noGlobal === "undefined" ) {
- window.jQuery = window.$ = jQuery;
-}
-
-
-
-
-return jQuery;
-} );
diff --git a/doc/_static/jquery.js b/doc/_static/jquery.js
index b061403..7e32910 100644
--- a/doc/_static/jquery.js
+++ b/doc/_static/jquery.js
@@ -1,2 +1,10365 @@
-/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */
-!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(D).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var j,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ee;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,Ce)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click",Ce),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&be.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&we.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Ae(this,e,Se),!1},trigger:function(){return Ae(this,e),!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){S.event.remove(this,e,n,t)})}});var Ne=/<script|<style|<link/i,De=/checked\s*(?:[^=]|=\s*.checked.)/i,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&De.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Pe(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),Le)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,He),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(je,""),u,l))}return n}function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Oe(o[r],a[r]);else Oe(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Pe(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Pe(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ne.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Pe(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Me=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Ie=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},We=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Fe=new RegExp(ne.join("|"),"i");function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Me.test(a)&&Fe.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px",t.style.height="1px",n.style.height="9px",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=3<parseInt(r.height),re.removeChild(e)),a}}))}();var _e=["Webkit","Moz","ms"],ze=E.createElement("div").style,Ue={};function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=_e.length;while(n--)if((e=_e[n]+t)in ze)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Ge.test(t),l=e.style;if(u||(t=Xe(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Ge.test(t)||(t=Xe(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):We(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Ie(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=$e(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ie(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Xe(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ct(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement("input"),it=E.createElement("select").appendChild(E.createElement("option")),rt.type="checkbox",y.checkOn=""!==rt.value,y.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",y.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,yt(this)))});if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=mt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=yt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+vt(yt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:vt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\?/;S.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||S.error("Invalid XML: "+e),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):Dt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)Dt(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)Dt(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=E.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,S.ajaxSettings),t):$t(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Bt(Rt,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ot.test(v.type),f=v.url.replace(qt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(jt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Et.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+It+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Bt(Mt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();y.cors=!!zt&&"withCredentials"in zt,y.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(y.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
+/*!
+ * jQuery JavaScript Library v3.3.1-dfsg
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2019-04-19T06:52Z
+ */
+( function( global, factory ) {
+
+ "use strict";
+
+ if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+ // For CommonJS and CommonJS-like environments where a proper `window`
+ // is present, execute the factory and get jQuery.
+ // For environments that do not have a `window` with a `document`
+ // (such as Node.js), expose a factory as module.exports.
+ // This accentuates the need for the creation of a real `window`.
+ // e.g. var jQuery = require("jquery")(window);
+ // See ticket #14549 for more info.
+ module.exports = global.document ?
+ factory( global, true ) :
+ function( w ) {
+ if ( !w.document ) {
+ throw new Error( "jQuery requires a window with a document" );
+ }
+ return factory( w );
+ };
+ } else {
+ factory( global );
+ }
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+
+
+var arr = [];
+
+var document = window.document;
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+var isFunction = function isFunction( obj ) {
+
+ // Support: Chrome <=57, Firefox <=52
+ // In some browsers, typeof returns "function" for HTML <object> elements
+ // (i.e., `typeof document.createElement( "object" ) === "function"`).
+ // We don't want to classify *any* DOM node as a function.
+ return typeof obj === "function" && typeof obj.nodeType !== "number";
+ };
+
+
+var isWindow = function isWindow( obj ) {
+ return obj != null && obj === obj.window;
+ };
+
+
+
+
+ var preservedScriptAttributes = {
+ type: true,
+ src: true,
+ noModule: true
+ };
+
+ function DOMEval( code, doc, node ) {
+ doc = doc || document;
+
+ var i,
+ script = doc.createElement( "script" );
+
+ script.text = code;
+ if ( node ) {
+ for ( i in preservedScriptAttributes ) {
+ if ( node[ i ] ) {
+ script[ i ] = node[ i ];
+ }
+ }
+ }
+ doc.head.appendChild( script ).parentNode.removeChild( script );
+ }
+
+
+function toType( obj ) {
+ if ( obj == null ) {
+ return obj + "";
+ }
+
+ // Support: Android <=2.3 only (functionish RegExp)
+ return typeof obj === "object" || typeof obj === "function" ?
+ class2type[ toString.call( obj ) ] || "object" :
+ typeof obj;
+}
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
+var
+ version = "3.3.1",
+
+ // Define a local copy of jQuery
+ jQuery = function( selector, context ) {
+
+ // The jQuery object is actually just the init constructor 'enhanced'
+ // Need init if jQuery is called (just allow error to be thrown if not included)
+ return new jQuery.fn.init( selector, context );
+ },
+
+ // Support: Android <=4.0 only
+ // Make sure we trim BOM and NBSP
+ rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
+
+jQuery.fn = jQuery.prototype = {
+
+ // The current version of jQuery being used
+ jquery: version,
+
+ constructor: jQuery,
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ toArray: function() {
+ return slice.call( this );
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+
+ // Return all the elements in a clean array
+ if ( num == null ) {
+ return slice.call( this );
+ }
+
+ // Return just the one element from the set
+ return num < 0 ? this[ num + this.length ] : this[ num ];
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems ) {
+
+ // Build a new jQuery matched element set
+ var ret = jQuery.merge( this.constructor(), elems );
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ each: function( callback ) {
+ return jQuery.each( this, callback );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map( this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ } ) );
+ },
+
+ slice: function() {
+ return this.pushStack( slice.apply( this, arguments ) );
+ },
+
+ first: function() {
+ return this.eq( 0 );
+ },
+
+ last: function() {
+ return this.eq( -1 );
+ },
+
+ eq: function( i ) {
+ var len = this.length,
+ j = +i + ( i < 0 ? len : 0 );
+ return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+ },
+
+ end: function() {
+ return this.prevObject || this.constructor();
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: push,
+ sort: arr.sort,
+ splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[ 0 ] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+
+ // Skip the boolean and the target
+ target = arguments[ i ] || {};
+ i++;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !isFunction( target ) ) {
+ target = {};
+ }
+
+ // Extend jQuery itself if only one argument is passed
+ if ( i === length ) {
+ target = this;
+ i--;
+ }
+
+ for ( ; i < length; i++ ) {
+
+ // Only deal with non-null/undefined values
+ if ( ( options = arguments[ i ] ) != null ) {
+
+ // Extend the base object
+ for ( name in options ) {
+ src = target[ name ];
+ copy = options[ name ];
+
+ // Prevent Object.prototype pollution
+ // Prevent never-ending loop
+ if ( name === "__proto__" || target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+ ( copyIsArray = Array.isArray( copy ) ) ) ) {
+
+ if ( copyIsArray ) {
+ copyIsArray = false;
+ clone = src && Array.isArray( src ) ? src : [];
+
+ } else {
+ clone = src && jQuery.isPlainObject( src ) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend( {
+
+ // Unique for each copy of jQuery on the page
+ expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+ // Assume jQuery is ready without the ready module
+ isReady: true,
+
+ error: function( msg ) {
+ throw new Error( msg );
+ },
+
+ noop: function() {},
+
+ isPlainObject: function( obj ) {
+ var proto, Ctor;
+
+ // Detect obvious negatives
+ // Use toString instead of jQuery.type to catch host objects
+ if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+ return false;
+ }
+
+ proto = getProto( obj );
+
+ // Objects with no prototype (e.g., `Object.create( null )`) are plain
+ if ( !proto ) {
+ return true;
+ }
+
+ // Objects with prototype are plain iff they were constructed by a global Object function
+ Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+ return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+ },
+
+ isEmptyObject: function( obj ) {
+
+ /* eslint-disable no-unused-vars */
+ // See https://github.com/eslint/eslint/issues/6125
+ var name;
+
+ for ( name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ // Evaluates a script in a global context
+ globalEval: function( code ) {
+ DOMEval( code );
+ },
+
+ each: function( obj, callback ) {
+ var length, i = 0;
+
+ if ( isArrayLike( obj ) ) {
+ length = obj.length;
+ for ( ; i < length; i++ ) {
+ if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( i in obj ) {
+ if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+ break;
+ }
+ }
+ }
+
+ return obj;
+ },
+
+ // Support: Android <=4.0 only
+ trim: function( text ) {
+ return text == null ?
+ "" :
+ ( text + "" ).replace( rtrim, "" );
+ },
+
+ // results is for internal usage only
+ makeArray: function( arr, results ) {
+ var ret = results || [];
+
+ if ( arr != null ) {
+ if ( isArrayLike( Object( arr ) ) ) {
+ jQuery.merge( ret,
+ typeof arr === "string" ?
+ [ arr ] : arr
+ );
+ } else {
+ push.call( ret, arr );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, arr, i ) {
+ return arr == null ? -1 : indexOf.call( arr, elem, i );
+ },
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ merge: function( first, second ) {
+ var len = +second.length,
+ j = 0,
+ i = first.length;
+
+ for ( ; j < len; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function( elems, callback, invert ) {
+ var callbackInverse,
+ matches = [],
+ i = 0,
+ length = elems.length,
+ callbackExpect = !invert;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( ; i < length; i++ ) {
+ callbackInverse = !callback( elems[ i ], i );
+ if ( callbackInverse !== callbackExpect ) {
+ matches.push( elems[ i ] );
+ }
+ }
+
+ return matches;
+ },
+
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var length, value,
+ i = 0,
+ ret = [];
+
+ // Go through the array, translating each of the items to their new values
+ if ( isArrayLike( elems ) ) {
+ length = elems.length;
+ for ( ; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret.push( value );
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for ( i in elems ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret.push( value );
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return concat.apply( [], ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // jQuery.support is not used in Core but other projects attach their
+ // properties to it so it needs to exist.
+ support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+ jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+ // Support: real iOS 8.2 only (not reproducible in simulator)
+ // `in` check used to prevent JIT error (gh-2145)
+ // hasOwn isn't used here due to false negatives
+ // regarding Nodelist length in IE
+ var length = !!obj && "length" in obj && obj.length,
+ type = toType( obj );
+
+ if ( isFunction( obj ) || isWindow( obj ) ) {
+ return false;
+ }
+
+ return type === "array" || length === 0 ||
+ typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.3.3
+ * https://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2016-08-08
+ */
+(function( window ) {
+
+var i,
+ support,
+ Expr,
+ getText,
+ isXML,
+ tokenize,
+ compile,
+ select,
+ outermostContext,
+ sortInput,
+ hasDuplicate,
+
+ // Local document vars
+ setDocument,
+ document,
+ docElem,
+ documentIsHTML,
+ rbuggyQSA,
+ rbuggyMatches,
+ matches,
+ contains,
+
+ // Instance-specific data
+ expando = "sizzle" + 1 * new Date(),
+ preferredDoc = window.document,
+ dirruns = 0,
+ done = 0,
+ classCache = createCache(),
+ tokenCache = createCache(),
+ compilerCache = createCache(),
+ sortOrder = function( a, b ) {
+ if ( a === b ) {
+ hasDuplicate = true;
+ }
+ return 0;
+ },
+
+ // Instance methods
+ hasOwn = ({}).hasOwnProperty,
+ arr = [],
+ pop = arr.pop,
+ push_native = arr.push,
+ push = arr.push,
+ slice = arr.slice,
+ // Use a stripped-down indexOf as it's faster than native
+ // https://jsperf.com/thor-indexof-vs-for/5
+ indexOf = function( list, elem ) {
+ var i = 0,
+ len = list.length;
+ for ( ; i < len; i++ ) {
+ if ( list[i] === elem ) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+ // Regular expressions
+
+ // http://www.w3.org/TR/css3-selectors/#whitespace
+ whitespace = "[\\x20\\t\\r\\n\\f]",
+
+ // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+ identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
+
+ // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+ attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+ // Operator (capture 2)
+ "*([*^$|!~]?=)" + whitespace +
+ // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+ "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+ "*\\]",
+
+ pseudos = ":(" + identifier + ")(?:\\((" +
+ // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+ // 1. quoted (capture 3; capture 4 or capture 5)
+ "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+ // 2. simple (capture 6)
+ "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+ // 3. anything else (capture 2)
+ ".*" +
+ ")\\)|)",
+
+ // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+ rwhitespace = new RegExp( whitespace + "+", "g" ),
+ rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+ rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+ rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+ rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+ rpseudo = new RegExp( pseudos ),
+ ridentifier = new RegExp( "^" + identifier + "$" ),
+
+ matchExpr = {
+ "ID": new RegExp( "^#(" + identifier + ")" ),
+ "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+ "TAG": new RegExp( "^(" + identifier + "|[*])" ),
+ "ATTR": new RegExp( "^" + attributes ),
+ "PSEUDO": new RegExp( "^" + pseudos ),
+ "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+ "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+ "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+ "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+ // For use in libraries implementing .is()
+ // We use this for POS matching in `select`
+ "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+ whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+ },
+
+ rinputs = /^(?:input|select|textarea|button)$/i,
+ rheader = /^h\d$/i,
+
+ rnative = /^[^{]+\{\s*\[native \w/,
+
+ // Easily-parseable/retrievable ID or TAG or CLASS selectors
+ rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+ rsibling = /[+~]/,
+
+ // CSS escapes
+ // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+ runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+ funescape = function( _, escaped, escapedWhitespace ) {
+ var high = "0x" + escaped - 0x10000;
+ // NaN means non-codepoint
+ // Support: Firefox<24
+ // Workaround erroneous numeric interpretation of +"0x"
+ return high !== high || escapedWhitespace ?
+ escaped :
+ high < 0 ?
+ // BMP codepoint
+ String.fromCharCode( high + 0x10000 ) :
+ // Supplemental Plane codepoint (surrogate pair)
+ String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+ },
+
+ // CSS string/identifier serialization
+ // https://drafts.csswg.org/cssom/#common-serializing-idioms
+ rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+ fcssescape = function( ch, asCodePoint ) {
+ if ( asCodePoint ) {
+
+ // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+ if ( ch === "\0" ) {
+ return "\uFFFD";
+ }
+
+ // Control characters and (dependent upon position) numbers get escaped as code points
+ return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+ }
+
+ // Other potentially-special ASCII characters get backslash-escaped
+ return "\\" + ch;
+ },
+
+ // Used for iframes
+ // See setDocument()
+ // Removing the function wrapper causes a "Permission Denied"
+ // error in IE
+ unloadHandler = function() {
+ setDocument();
+ },
+
+ disabledAncestor = addCombinator(
+ function( elem ) {
+ return elem.disabled === true && ("form" in elem || "label" in elem);
+ },
+ { dir: "parentNode", next: "legend" }
+ );
+
+// Optimize for push.apply( _, NodeList )
+try {
+ push.apply(
+ (arr = slice.call( preferredDoc.childNodes )),
+ preferredDoc.childNodes
+ );
+ // Support: Android<4.0
+ // Detect silently failing push.apply
+ arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+ push = { apply: arr.length ?
+
+ // Leverage slice if possible
+ function( target, els ) {
+ push_native.apply( target, slice.call(els) );
+ } :
+
+ // Support: IE<9
+ // Otherwise append directly
+ function( target, els ) {
+ var j = target.length,
+ i = 0;
+ // Can't trust NodeList.length
+ while ( (target[j++] = els[i++]) ) {}
+ target.length = j - 1;
+ }
+ };
+}
+
+function Sizzle( selector, context, results, seed ) {
+ var m, i, elem, nid, match, groups, newSelector,
+ newContext = context && context.ownerDocument,
+
+ // nodeType defaults to 9, since context defaults to document
+ nodeType = context ? context.nodeType : 9;
+
+ results = results || [];
+
+ // Return early from calls with invalid selector or context
+ if ( typeof selector !== "string" || !selector ||
+ nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+ return results;
+ }
+
+ // Try to shortcut find operations (as opposed to filters) in HTML documents
+ if ( !seed ) {
+
+ if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+ setDocument( context );
+ }
+ context = context || document;
+
+ if ( documentIsHTML ) {
+
+ // If the selector is sufficiently simple, try using a "get*By*" DOM method
+ // (excepting DocumentFragment context, where the methods don't exist)
+ if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+
+ // ID selector
+ if ( (m = match[1]) ) {
+
+ // Document context
+ if ( nodeType === 9 ) {
+ if ( (elem = context.getElementById( m )) ) {
+
+ // Support: IE, Opera, Webkit
+ // TODO: identify versions
+ // getElementById can match elements by name instead of ID
+ if ( elem.id === m ) {
+ results.push( elem );
+ return results;
+ }
+ } else {
+ return results;
+ }
+
+ // Element context
+ } else {
+
+ // Support: IE, Opera, Webkit
+ // TODO: identify versions
+ // getElementById can match elements by name instead of ID
+ if ( newContext && (elem = newContext.getElementById( m )) &&
+ contains( context, elem ) &&
+ elem.id === m ) {
+
+ results.push( elem );
+ return results;
+ }
+ }
+
+ // Type selector
+ } else if ( match[2] ) {
+ push.apply( results, context.getElementsByTagName( selector ) );
+ return results;
+
+ // Class selector
+ } else if ( (m = match[3]) && support.getElementsByClassName &&
+ context.getElementsByClassName ) {
+
+ push.apply( results, context.getElementsByClassName( m ) );
+ return results;
+ }
+ }
+
+ // Take advantage of querySelectorAll
+ if ( support.qsa &&
+ !compilerCache[ selector + " " ] &&
+ (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+
+ if ( nodeType !== 1 ) {
+ newContext = context;
+ newSelector = selector;
+
+ // qSA looks outside Element context, which is not what we want
+ // Thanks to Andrew Dupont for this workaround technique
+ // Support: IE <=8
+ // Exclude object elements
+ } else if ( context.nodeName.toLowerCase() !== "object" ) {
+
+ // Capture the context ID, setting it first if necessary
+ if ( (nid = context.getAttribute( "id" )) ) {
+ nid = nid.replace( rcssescape, fcssescape );
+ } else {
+ context.setAttribute( "id", (nid = expando) );
+ }
+
+ // Prefix every selector in the list
+ groups = tokenize( selector );
+ i = groups.length;
+ while ( i-- ) {
+ groups[i] = "#" + nid + " " + toSelector( groups[i] );
+ }
+ newSelector = groups.join( "," );
+
+ // Expand context for sibling selectors
+ newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+ context;
+ }
+
+ if ( newSelector ) {
+ try {
+ push.apply( results,
+ newContext.querySelectorAll( newSelector )
+ );
+ return results;
+ } catch ( qsaError ) {
+ } finally {
+ if ( nid === expando ) {
+ context.removeAttribute( "id" );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // All others
+ return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ * deleting the oldest entry
+ */
+function createCache() {
+ var keys = [];
+
+ function cache( key, value ) {
+ // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+ if ( keys.push( key + " " ) > Expr.cacheLength ) {
+ // Only keep the most recent entries
+ delete cache[ keys.shift() ];
+ }
+ return (cache[ key + " " ] = value);
+ }
+ return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+ fn[ expando ] = true;
+ return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+ var el = document.createElement("fieldset");
+
+ try {
+ return !!fn( el );
+ } catch (e) {
+ return false;
+ } finally {
+ // Remove from its parent by default
+ if ( el.parentNode ) {
+ el.parentNode.removeChild( el );
+ }
+ // release memory in IE
+ el = null;
+ }
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+ var arr = attrs.split("|"),
+ i = arr.length;
+
+ while ( i-- ) {
+ Expr.attrHandle[ arr[i] ] = handler;
+ }
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+ var cur = b && a,
+ diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+ a.sourceIndex - b.sourceIndex;
+
+ // Use IE sourceIndex if available on both nodes
+ if ( diff ) {
+ return diff;
+ }
+
+ // Check if b follows a
+ if ( cur ) {
+ while ( (cur = cur.nextSibling) ) {
+ if ( cur === b ) {
+ return -1;
+ }
+ }
+ }
+
+ return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === type;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && elem.type === type;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+
+ // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+ return function( elem ) {
+
+ // Only certain elements can match :enabled or :disabled
+ // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
+ // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
+ if ( "form" in elem ) {
+
+ // Check for inherited disabledness on relevant non-disabled elements:
+ // * listed form-associated elements in a disabled fieldset
+ // https://html.spec.whatwg.org/multipage/forms.html#category-listed
+ // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
+ // * option elements in a disabled optgroup
+ // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
+ // All such elements have a "form" property.
+ if ( elem.parentNode && elem.disabled === false ) {
+
+ // Option elements defer to a parent optgroup if present
+ if ( "label" in elem ) {
+ if ( "label" in elem.parentNode ) {
+ return elem.parentNode.disabled === disabled;
+ } else {
+ return elem.disabled === disabled;
+ }
+ }
+
+ // Support: IE 6 - 11
+ // Use the isDisabled shortcut property to check for disabled fieldset ancestors
+ return elem.isDisabled === disabled ||
+
+ // Where there is no isDisabled, check manually
+ /* jshint -W018 */
+ elem.isDisabled !== !disabled &&
+ disabledAncestor( elem ) === disabled;
+ }
+
+ return elem.disabled === disabled;
+
+ // Try to winnow out elements that can't be disabled before trusting the disabled property.
+ // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
+ // even exist on them, let alone have a boolean value.
+ } else if ( "label" in elem ) {
+ return elem.disabled === disabled;
+ }
+
+ // Remaining elements are neither :enabled nor :disabled
+ return false;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+ return markFunction(function( argument ) {
+ argument = +argument;
+ return markFunction(function( seed, matches ) {
+ var j,
+ matchIndexes = fn( [], seed.length, argument ),
+ i = matchIndexes.length;
+
+ // Match elements found at the specified indexes
+ while ( i-- ) {
+ if ( seed[ (j = matchIndexes[i]) ] ) {
+ seed[j] = !(matches[j] = seed[j]);
+ }
+ }
+ });
+ });
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+ return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+ var hasCompare, subWindow,
+ doc = node ? node.ownerDocument || node : preferredDoc;
+
+ // Return early if doc is invalid or already selected
+ if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+ return document;
+ }
+
+ // Update global variables
+ document = doc;
+ docElem = document.documentElement;
+ documentIsHTML = !isXML( document );
+
+ // Support: IE 9-11, Edge
+ // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+ if ( preferredDoc !== document &&
+ (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
+
+ // Support: IE 11, Edge
+ if ( subWindow.addEventListener ) {
+ subWindow.addEventListener( "unload", unloadHandler, false );
+
+ // Support: IE 9 - 10 only
+ } else if ( subWindow.attachEvent ) {
+ subWindow.attachEvent( "onunload", unloadHandler );
+ }
+ }
+
+ /* Attributes
+ ---------------------------------------------------------------------- */
+
+ // Support: IE<8
+ // Verify that getAttribute really returns attributes and not properties
+ // (excepting IE8 booleans)
+ support.attributes = assert(function( el ) {
+ el.className = "i";
+ return !el.getAttribute("className");
+ });
+
+ /* getElement(s)By*
+ ---------------------------------------------------------------------- */
+
+ // Check if getElementsByTagName("*") returns only elements
+ support.getElementsByTagName = assert(function( el ) {
+ el.appendChild( document.createComment("") );
+ return !el.getElementsByTagName("*").length;
+ });
+
+ // Support: IE<9
+ support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+ // Support: IE<10
+ // Check if getElementById returns elements by name
+ // The broken getElementById methods don't pick up programmatically-set names,
+ // so use a roundabout getElementsByName test
+ support.getById = assert(function( el ) {
+ docElem.appendChild( el ).id = expando;
+ return !document.getElementsByName || !document.getElementsByName( expando ).length;
+ });
+
+ // ID filter and find
+ if ( support.getById ) {
+ Expr.filter["ID"] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ return elem.getAttribute("id") === attrId;
+ };
+ };
+ Expr.find["ID"] = function( id, context ) {
+ if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+ var elem = context.getElementById( id );
+ return elem ? [ elem ] : [];
+ }
+ };
+ } else {
+ Expr.filter["ID"] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ var node = typeof elem.getAttributeNode !== "undefined" &&
+ elem.getAttributeNode("id");
+ return node && node.value === attrId;
+ };
+ };
+
+ // Support: IE 6 - 7 only
+ // getElementById is not reliable as a find shortcut
+ Expr.find["ID"] = function( id, context ) {
+ if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+ var node, i, elems,
+ elem = context.getElementById( id );
+
+ if ( elem ) {
+
+ // Verify the id attribute
+ node = elem.getAttributeNode("id");
+ if ( node && node.value === id ) {
+ return [ elem ];
+ }
+
+ // Fall back on getElementsByName
+ elems = context.getElementsByName( id );
+ i = 0;
+ while ( (elem = elems[i++]) ) {
+ node = elem.getAttributeNode("id");
+ if ( node && node.value === id ) {
+ return [ elem ];
+ }
+ }
+ }
+
+ return [];
+ }
+ };
+ }
+
+ // Tag
+ Expr.find["TAG"] = support.getElementsByTagName ?
+ function( tag, context ) {
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ return context.getElementsByTagName( tag );
+
+ // DocumentFragment nodes don't have gEBTN
+ } else if ( support.qsa ) {
+ return context.querySelectorAll( tag );
+ }
+ } :
+
+ function( tag, context ) {
+ var elem,
+ tmp = [],
+ i = 0,
+ // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+ results = context.getElementsByTagName( tag );
+
+ // Filter out possible comments
+ if ( tag === "*" ) {
+ while ( (elem = results[i++]) ) {
+ if ( elem.nodeType === 1 ) {
+ tmp.push( elem );
+ }
+ }
+
+ return tmp;
+ }
+ return results;
+ };
+
+ // Class
+ Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+ if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+ return context.getElementsByClassName( className );
+ }
+ };
+
+ /* QSA/matchesSelector
+ ---------------------------------------------------------------------- */
+
+ // QSA and matchesSelector support
+
+ // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+ rbuggyMatches = [];
+
+ // qSa(:focus) reports false when true (Chrome 21)
+ // We allow this because of a bug in IE8/9 that throws an error
+ // whenever `document.activeElement` is accessed on an iframe
+ // So, we allow :focus to pass through QSA all the time to avoid the IE error
+ // See https://bugs.jquery.com/ticket/13378
+ rbuggyQSA = [];
+
+ if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
+ // Build QSA regex
+ // Regex strategy adopted from Diego Perini
+ assert(function( el ) {
+ // Select is set to empty string on purpose
+ // This is to test IE's treatment of not explicitly
+ // setting a boolean content attribute,
+ // since its presence should be enough
+ // https://bugs.jquery.com/ticket/12359
+ docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
+ "<select id='" + expando + "-\r\\' msallowcapture=''>" +
+ "<option selected=''></option></select>";
+
+ // Support: IE8, Opera 11-12.16
+ // Nothing should be selected when empty strings follow ^= or $= or *=
+ // The test attribute must be unknown in Opera but "safe" for WinRT
+ // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+ if ( el.querySelectorAll("[msallowcapture^='']").length ) {
+ rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+ }
+
+ // Support: IE8
+ // Boolean attributes and "value" are not treated correctly
+ if ( !el.querySelectorAll("[selected]").length ) {
+ rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+ }
+
+ // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+ if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+ rbuggyQSA.push("~=");
+ }
+
+ // Webkit/Opera - :checked should return selected option elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ // IE8 throws error here and will not see later tests
+ if ( !el.querySelectorAll(":checked").length ) {
+ rbuggyQSA.push(":checked");
+ }
+
+ // Support: Safari 8+, iOS 8+
+ // https://bugs.webkit.org/show_bug.cgi?id=136851
+ // In-page `selector#id sibling-combinator selector` fails
+ if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+ rbuggyQSA.push(".#.+[+~]");
+ }
+ });
+
+ assert(function( el ) {
+ el.innerHTML = "<a href='' disabled='disabled'></a>" +
+ "<select disabled='disabled'><option/></select>";
+
+ // Support: Windows 8 Native Apps
+ // The type and name attributes are restricted during .innerHTML assignment
+ var input = document.createElement("input");
+ input.setAttribute( "type", "hidden" );
+ el.appendChild( input ).setAttribute( "name", "D" );
+
+ // Support: IE8
+ // Enforce case-sensitivity of name attribute
+ if ( el.querySelectorAll("[name=d]").length ) {
+ rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+ }
+
+ // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+ // IE8 throws error here and will not see later tests
+ if ( el.querySelectorAll(":enabled").length !== 2 ) {
+ rbuggyQSA.push( ":enabled", ":disabled" );
+ }
+
+ // Support: IE9-11+
+ // IE's :disabled selector does not pick up the children of disabled fieldsets
+ docElem.appendChild( el ).disabled = true;
+ if ( el.querySelectorAll(":disabled").length !== 2 ) {
+ rbuggyQSA.push( ":enabled", ":disabled" );
+ }
+
+ // Opera 10-11 does not throw on post-comma invalid pseudos
+ el.querySelectorAll("*,:x");
+ rbuggyQSA.push(",.*:");
+ });
+ }
+
+ if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+ docElem.webkitMatchesSelector ||
+ docElem.mozMatchesSelector ||
+ docElem.oMatchesSelector ||
+ docElem.msMatchesSelector) )) ) {
+
+ assert(function( el ) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9)
+ support.disconnectedMatch = matches.call( el, "*" );
+
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call( el, "[s!='']:x" );
+ rbuggyMatches.push( "!=", pseudos );
+ });
+ }
+
+ rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+ rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+ /* Contains
+ ---------------------------------------------------------------------- */
+ hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+ // Element contains another
+ // Purposefully self-exclusive
+ // As in, an element does not contain itself
+ contains = hasCompare || rnative.test( docElem.contains ) ?
+ function( a, b ) {
+ var adown = a.nodeType === 9 ? a.documentElement : a,
+ bup = b && b.parentNode;
+ return a === bup || !!( bup && bup.nodeType === 1 && (
+ adown.contains ?
+ adown.contains( bup ) :
+ a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+ ));
+ } :
+ function( a, b ) {
+ if ( b ) {
+ while ( (b = b.parentNode) ) {
+ if ( b === a ) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ /* Sorting
+ ---------------------------------------------------------------------- */
+
+ // Document order sorting
+ sortOrder = hasCompare ?
+ function( a, b ) {
+
+ // Flag for duplicate removal
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ // Sort on method existence if only one input has compareDocumentPosition
+ var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+ if ( compare ) {
+ return compare;
+ }
+
+ // Calculate position if both inputs belong to the same document
+ compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+ a.compareDocumentPosition( b ) :
+
+ // Otherwise we know they are disconnected
+ 1;
+
+ // Disconnected nodes
+ if ( compare & 1 ||
+ (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+ // Choose the first element that is related to our preferred document
+ if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+ return -1;
+ }
+ if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+ return 1;
+ }
+
+ // Maintain original order
+ return sortInput ?
+ ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+ 0;
+ }
+
+ return compare & 4 ? -1 : 1;
+ } :
+ function( a, b ) {
+ // Exit early if the nodes are identical
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ var cur,
+ i = 0,
+ aup = a.parentNode,
+ bup = b.parentNode,
+ ap = [ a ],
+ bp = [ b ];
+
+ // Parentless nodes are either documents or disconnected
+ if ( !aup || !bup ) {
+ return a === document ? -1 :
+ b === document ? 1 :
+ aup ? -1 :
+ bup ? 1 :
+ sortInput ?
+ ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+ 0;
+
+ // If the nodes are siblings, we can do a quick check
+ } else if ( aup === bup ) {
+ return siblingCheck( a, b );
+ }
+
+ // Otherwise we need full lists of their ancestors for comparison
+ cur = a;
+ while ( (cur = cur.parentNode) ) {
+ ap.unshift( cur );
+ }
+ cur = b;
+ while ( (cur = cur.parentNode) ) {
+ bp.unshift( cur );
+ }
+
+ // Walk down the tree looking for a discrepancy
+ while ( ap[i] === bp[i] ) {
+ i++;
+ }
+
+ return i ?
+ // Do a sibling check if the nodes have a common ancestor
+ siblingCheck( ap[i], bp[i] ) :
+
+ // Otherwise nodes in our document sort first
+ ap[i] === preferredDoc ? -1 :
+ bp[i] === preferredDoc ? 1 :
+ 0;
+ };
+
+ return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+ return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+ // Set document vars if needed
+ if ( ( elem.ownerDocument || elem ) !== document ) {
+ setDocument( elem );
+ }
+
+ // Make sure that attribute selectors are quoted
+ expr = expr.replace( rattributeQuotes, "='$1']" );
+
+ if ( support.matchesSelector && documentIsHTML &&
+ !compilerCache[ expr + " " ] &&
+ ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+ ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
+
+ try {
+ var ret = matches.call( elem, expr );
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if ( ret || support.disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9
+ elem.document && elem.document.nodeType !== 11 ) {
+ return ret;
+ }
+ } catch (e) {}
+ }
+
+ return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+ // Set document vars if needed
+ if ( ( context.ownerDocument || context ) !== document ) {
+ setDocument( context );
+ }
+ return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+ // Set document vars if needed
+ if ( ( elem.ownerDocument || elem ) !== document ) {
+ setDocument( elem );
+ }
+
+ var fn = Expr.attrHandle[ name.toLowerCase() ],
+ // Don't get fooled by Object.prototype properties (jQuery #13807)
+ val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+ fn( elem, name, !documentIsHTML ) :
+ undefined;
+
+ return val !== undefined ?
+ val :
+ support.attributes || !documentIsHTML ?
+ elem.getAttribute( name ) :
+ (val = elem.getAttributeNode(name)) && val.specified ?
+ val.value :
+ null;
+};
+
+Sizzle.escape = function( sel ) {
+ return (sel + "").replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+ throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+ var elem,
+ duplicates = [],
+ j = 0,
+ i = 0;
+
+ // Unless we *know* we can detect duplicates, assume their presence
+ hasDuplicate = !support.detectDuplicates;
+ sortInput = !support.sortStable && results.slice( 0 );
+ results.sort( sortOrder );
+
+ if ( hasDuplicate ) {
+ while ( (elem = results[i++]) ) {
+ if ( elem === results[ i ] ) {
+ j = duplicates.push( i );
+ }
+ }
+ while ( j-- ) {
+ results.splice( duplicates[ j ], 1 );
+ }
+ }
+
+ // Clear input after sorting to release objects
+ // See https://github.com/jquery/sizzle/pull/225
+ sortInput = null;
+
+ return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+ var node,
+ ret = "",
+ i = 0,
+ nodeType = elem.nodeType;
+
+ if ( !nodeType ) {
+ // If no nodeType, this is expected to be an array
+ while ( (node = elem[i++]) ) {
+ // Do not traverse comment nodes
+ ret += getText( node );
+ }
+ } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+ // Use textContent for elements
+ // innerText usage removed for consistency of new lines (jQuery #11153)
+ if ( typeof elem.textContent === "string" ) {
+ return elem.textContent;
+ } else {
+ // Traverse its children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ ret += getText( elem );
+ }
+ }
+ } else if ( nodeType === 3 || nodeType === 4 ) {
+ return elem.nodeValue;
+ }
+ // Do not include comment or processing instruction nodes
+
+ return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+ // Can be adjusted by the user
+ cacheLength: 50,
+
+ createPseudo: markFunction,
+
+ match: matchExpr,
+
+ attrHandle: {},
+
+ find: {},
+
+ relative: {
+ ">": { dir: "parentNode", first: true },
+ " ": { dir: "parentNode" },
+ "+": { dir: "previousSibling", first: true },
+ "~": { dir: "previousSibling" }
+ },
+
+ preFilter: {
+ "ATTR": function( match ) {
+ match[1] = match[1].replace( runescape, funescape );
+
+ // Move the given value to match[3] whether quoted or unquoted
+ match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+ if ( match[2] === "~=" ) {
+ match[3] = " " + match[3] + " ";
+ }
+
+ return match.slice( 0, 4 );
+ },
+
+ "CHILD": function( match ) {
+ /* matches from matchExpr["CHILD"]
+ 1 type (only|nth|...)
+ 2 what (child|of-type)
+ 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+ 4 xn-component of xn+y argument ([+-]?\d*n|)
+ 5 sign of xn-component
+ 6 x of xn-component
+ 7 sign of y-component
+ 8 y of y-component
+ */
+ match[1] = match[1].toLowerCase();
+
+ if ( match[1].slice( 0, 3 ) === "nth" ) {
+ // nth-* requires argument
+ if ( !match[3] ) {
+ Sizzle.error( match[0] );
+ }
+
+ // numeric x and y parameters for Expr.filter.CHILD
+ // remember that false/true cast respectively to 0/1
+ match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+ match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+ // other types prohibit arguments
+ } else if ( match[3] ) {
+ Sizzle.error( match[0] );
+ }
+
+ return match;
+ },
+
+ "PSEUDO": function( match ) {
+ var excess,
+ unquoted = !match[6] && match[2];
+
+ if ( matchExpr["CHILD"].test( match[0] ) ) {
+ return null;
+ }
+
+ // Accept quoted arguments as-is
+ if ( match[3] ) {
+ match[2] = match[4] || match[5] || "";
+
+ // Strip excess characters from unquoted arguments
+ } else if ( unquoted && rpseudo.test( unquoted ) &&
+ // Get excess from tokenize (recursively)
+ (excess = tokenize( unquoted, true )) &&
+ // advance to the next closing parenthesis
+ (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+ // excess is a negative index
+ match[0] = match[0].slice( 0, excess );
+ match[2] = unquoted.slice( 0, excess );
+ }
+
+ // Return only captures needed by the pseudo filter method (type and argument)
+ return match.slice( 0, 3 );
+ }
+ },
+
+ filter: {
+
+ "TAG": function( nodeNameSelector ) {
+ var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+ return nodeNameSelector === "*" ?
+ function() { return true; } :
+ function( elem ) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+ };
+ },
+
+ "CLASS": function( className ) {
+ var pattern = classCache[ className + " " ];
+
+ return pattern ||
+ (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+ classCache( className, function( elem ) {
+ return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+ });
+ },
+
+ "ATTR": function( name, operator, check ) {
+ return function( elem ) {
+ var result = Sizzle.attr( elem, name );
+
+ if ( result == null ) {
+ return operator === "!=";
+ }
+ if ( !operator ) {
+ return true;
+ }
+
+ result += "";
+
+ return operator === "=" ? result === check :
+ operator === "!=" ? result !== check :
+ operator === "^=" ? check && result.indexOf( check ) === 0 :
+ operator === "*=" ? check && result.indexOf( check ) > -1 :
+ operator === "$=" ? check && result.slice( -check.length ) === check :
+ operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+ operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+ false;
+ };
+ },
+
+ "CHILD": function( type, what, argument, first, last ) {
+ var simple = type.slice( 0, 3 ) !== "nth",
+ forward = type.slice( -4 ) !== "last",
+ ofType = what === "of-type";
+
+ return first === 1 && last === 0 ?
+
+ // Shortcut for :nth-*(n)
+ function( elem ) {
+ return !!elem.parentNode;
+ } :
+
+ function( elem, context, xml ) {
+ var cache, uniqueCache, outerCache, node, nodeIndex, start,
+ dir = simple !== forward ? "nextSibling" : "previousSibling",
+ parent = elem.parentNode,
+ name = ofType && elem.nodeName.toLowerCase(),
+ useCache = !xml && !ofType,
+ diff = false;
+
+ if ( parent ) {
+
+ // :(first|last|only)-(child|of-type)
+ if ( simple ) {
+ while ( dir ) {
+ node = elem;
+ while ( (node = node[ dir ]) ) {
+ if ( ofType ?
+ node.nodeName.toLowerCase() === name :
+ node.nodeType === 1 ) {
+
+ return false;
+ }
+ }
+ // Reverse direction for :only-* (if we haven't yet done so)
+ start = dir = type === "only" && !start && "nextSibling";
+ }
+ return true;
+ }
+
+ start = [ forward ? parent.firstChild : parent.lastChild ];
+
+ // non-xml :nth-child(...) stores cache data on `parent`
+ if ( forward && useCache ) {
+
+ // Seek `elem` from a previously-cached index
+
+ // ...in a gzip-friendly way
+ node = parent;
+ outerCache = node[ expando ] || (node[ expando ] = {});
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ node.uniqueID ] ||
+ (outerCache[ node.uniqueID ] = {});
+
+ cache = uniqueCache[ type ] || [];
+ nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+ diff = nodeIndex && cache[ 2 ];
+ node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+ while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+ // Fallback to seeking `elem` from the start
+ (diff = nodeIndex = 0) || start.pop()) ) {
+
+ // When found, cache indexes on `parent` and break
+ if ( node.nodeType === 1 && ++diff && node === elem ) {
+ uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+ break;
+ }
+ }
+
+ } else {
+ // Use previously-cached element index if available
+ if ( useCache ) {
+ // ...in a gzip-friendly way
+ node = elem;
+ outerCache = node[ expando ] || (node[ expando ] = {});
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ node.uniqueID ] ||
+ (outerCache[ node.uniqueID ] = {});
+
+ cache = uniqueCache[ type ] || [];
+ nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+ diff = nodeIndex;
+ }
+
+ // xml :nth-child(...)
+ // or :nth-last-child(...) or :nth(-last)?-of-type(...)
+ if ( diff === false ) {
+ // Use the same loop as above to seek `elem` from the start
+ while ( (node = ++nodeIndex && node && node[ dir ] ||
+ (diff = nodeIndex = 0) || start.pop()) ) {
+
+ if ( ( ofType ?
+ node.nodeName.toLowerCase() === name :
+ node.nodeType === 1 ) &&
+ ++diff ) {
+
+ // Cache the index of each encountered element
+ if ( useCache ) {
+ outerCache = node[ expando ] || (node[ expando ] = {});
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ node.uniqueID ] ||
+ (outerCache[ node.uniqueID ] = {});
+
+ uniqueCache[ type ] = [ dirruns, diff ];
+ }
+
+ if ( node === elem ) {
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ // Incorporate the offset, then check against cycle size
+ diff -= last;
+ return diff === first || ( diff % first === 0 && diff / first >= 0 );
+ }
+ };
+ },
+
+ "PSEUDO": function( pseudo, argument ) {
+ // pseudo-class names are case-insensitive
+ // http://www.w3.org/TR/selectors/#pseudo-classes
+ // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+ // Remember that setFilters inherits from pseudos
+ var args,
+ fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+ Sizzle.error( "unsupported pseudo: " + pseudo );
+
+ // The user may use createPseudo to indicate that
+ // arguments are needed to create the filter function
+ // just as Sizzle does
+ if ( fn[ expando ] ) {
+ return fn( argument );
+ }
+
+ // But maintain support for old signatures
+ if ( fn.length > 1 ) {
+ args = [ pseudo, pseudo, "", argument ];
+ return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+ markFunction(function( seed, matches ) {
+ var idx,
+ matched = fn( seed, argument ),
+ i = matched.length;
+ while ( i-- ) {
+ idx = indexOf( seed, matched[i] );
+ seed[ idx ] = !( matches[ idx ] = matched[i] );
+ }
+ }) :
+ function( elem ) {
+ return fn( elem, 0, args );
+ };
+ }
+
+ return fn;
+ }
+ },
+
+ pseudos: {
+ // Potentially complex pseudos
+ "not": markFunction(function( selector ) {
+ // Trim the selector passed to compile
+ // to avoid treating leading and trailing
+ // spaces as combinators
+ var input = [],
+ results = [],
+ matcher = compile( selector.replace( rtrim, "$1" ) );
+
+ return matcher[ expando ] ?
+ markFunction(function( seed, matches, context, xml ) {
+ var elem,
+ unmatched = matcher( seed, null, xml, [] ),
+ i = seed.length;
+
+ // Match elements unmatched by `matcher`
+ while ( i-- ) {
+ if ( (elem = unmatched[i]) ) {
+ seed[i] = !(matches[i] = elem);
+ }
+ }
+ }) :
+ function( elem, context, xml ) {
+ input[0] = elem;
+ matcher( input, null, xml, results );
+ // Don't keep the element (issue #299)
+ input[0] = null;
+ return !results.pop();
+ };
+ }),
+
+ "has": markFunction(function( selector ) {
+ return function( elem ) {
+ return Sizzle( selector, elem ).length > 0;
+ };
+ }),
+
+ "contains": markFunction(function( text ) {
+ text = text.replace( runescape, funescape );
+ return function( elem ) {
+ return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+ };
+ }),
+
+ // "Whether an element is represented by a :lang() selector
+ // is based solely on the element's language value
+ // being equal to the identifier C,
+ // or beginning with the identifier C immediately followed by "-".
+ // The matching of C against the element's language value is performed case-insensitively.
+ // The identifier C does not have to be a valid language name."
+ // http://www.w3.org/TR/selectors/#lang-pseudo
+ "lang": markFunction( function( lang ) {
+ // lang value must be a valid identifier
+ if ( !ridentifier.test(lang || "") ) {
+ Sizzle.error( "unsupported lang: " + lang );
+ }
+ lang = lang.replace( runescape, funescape ).toLowerCase();
+ return function( elem ) {
+ var elemLang;
+ do {
+ if ( (elemLang = documentIsHTML ?
+ elem.lang :
+ elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+ elemLang = elemLang.toLowerCase();
+ return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+ }
+ } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+ return false;
+ };
+ }),
+
+ // Miscellaneous
+ "target": function( elem ) {
+ var hash = window.location && window.location.hash;
+ return hash && hash.slice( 1 ) === elem.id;
+ },
+
+ "root": function( elem ) {
+ return elem === docElem;
+ },
+
+ "focus": function( elem ) {
+ return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+ },
+
+ // Boolean properties
+ "enabled": createDisabledPseudo( false ),
+ "disabled": createDisabledPseudo( true ),
+
+ "checked": function( elem ) {
+ // In CSS3, :checked should return both checked and selected elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ var nodeName = elem.nodeName.toLowerCase();
+ return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+ },
+
+ "selected": function( elem ) {
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ if ( elem.parentNode ) {
+ elem.parentNode.selectedIndex;
+ }
+
+ return elem.selected === true;
+ },
+
+ // Contents
+ "empty": function( elem ) {
+ // http://www.w3.org/TR/selectors/#empty-pseudo
+ // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+ // but not by others (comment: 8; processing instruction: 7; etc.)
+ // nodeType < 6 works because attributes (2) do not appear as children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ if ( elem.nodeType < 6 ) {
+ return false;
+ }
+ }
+ return true;
+ },
+
+ "parent": function( elem ) {
+ return !Expr.pseudos["empty"]( elem );
+ },
+
+ // Element/input types
+ "header": function( elem ) {
+ return rheader.test( elem.nodeName );
+ },
+
+ "input": function( elem ) {
+ return rinputs.test( elem.nodeName );
+ },
+
+ "button": function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === "button" || name === "button";
+ },
+
+ "text": function( elem ) {
+ var attr;
+ return elem.nodeName.toLowerCase() === "input" &&
+ elem.type === "text" &&
+
+ // Support: IE<8
+ // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+ ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+ },
+
+ // Position-in-collection
+ "first": createPositionalPseudo(function() {
+ return [ 0 ];
+ }),
+
+ "last": createPositionalPseudo(function( matchIndexes, length ) {
+ return [ length - 1 ];
+ }),
+
+ "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ return [ argument < 0 ? argument + length : argument ];
+ }),
+
+ "even": createPositionalPseudo(function( matchIndexes, length ) {
+ var i = 0;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "odd": createPositionalPseudo(function( matchIndexes, length ) {
+ var i = 1;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ var i = argument < 0 ? argument + length : argument;
+ for ( ; --i >= 0; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ var i = argument < 0 ? argument + length : argument;
+ for ( ; ++i < length; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ })
+ }
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+ Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+ Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+ var matched, match, tokens, type,
+ soFar, groups, preFilters,
+ cached = tokenCache[ selector + " " ];
+
+ if ( cached ) {
+ return parseOnly ? 0 : cached.slice( 0 );
+ }
+
+ soFar = selector;
+ groups = [];
+ preFilters = Expr.preFilter;
+
+ while ( soFar ) {
+
+ // Comma and first run
+ if ( !matched || (match = rcomma.exec( soFar )) ) {
+ if ( match ) {
+ // Don't consume trailing commas as valid
+ soFar = soFar.slice( match[0].length ) || soFar;
+ }
+ groups.push( (tokens = []) );
+ }
+
+ matched = false;
+
+ // Combinators
+ if ( (match = rcombinators.exec( soFar )) ) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ // Cast descendant combinators to space
+ type: match[0].replace( rtrim, " " )
+ });
+ soFar = soFar.slice( matched.length );
+ }
+
+ // Filters
+ for ( type in Expr.filter ) {
+ if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+ (match = preFilters[ type ]( match ))) ) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ type: type,
+ matches: match
+ });
+ soFar = soFar.slice( matched.length );
+ }
+ }
+
+ if ( !matched ) {
+ break;
+ }
+ }
+
+ // Return the length of the invalid excess
+ // if we're just parsing
+ // Otherwise, throw an error or return tokens
+ return parseOnly ?
+ soFar.length :
+ soFar ?
+ Sizzle.error( selector ) :
+ // Cache the tokens
+ tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+ var i = 0,
+ len = tokens.length,
+ selector = "";
+ for ( ; i < len; i++ ) {
+ selector += tokens[i].value;
+ }
+ return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+ var dir = combinator.dir,
+ skip = combinator.next,
+ key = skip || dir,
+ checkNonElements = base && key === "parentNode",
+ doneName = done++;
+
+ return combinator.first ?
+ // Check against closest ancestor/preceding element
+ function( elem, context, xml ) {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ return matcher( elem, context, xml );
+ }
+ }
+ return false;
+ } :
+
+ // Check against all ancestor/preceding elements
+ function( elem, context, xml ) {
+ var oldCache, uniqueCache, outerCache,
+ newCache = [ dirruns, doneName ];
+
+ // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+ if ( xml ) {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ if ( matcher( elem, context, xml ) ) {
+ return true;
+ }
+ }
+ }
+ } else {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ outerCache = elem[ expando ] || (elem[ expando ] = {});
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
+
+ if ( skip && skip === elem.nodeName.toLowerCase() ) {
+ elem = elem[ dir ] || elem;
+ } else if ( (oldCache = uniqueCache[ key ]) &&
+ oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+ // Assign to newCache so results back-propagate to previous elements
+ return (newCache[ 2 ] = oldCache[ 2 ]);
+ } else {
+ // Reuse newcache so results back-propagate to previous elements
+ uniqueCache[ key ] = newCache;
+
+ // A match means we're done; a fail means we have to keep checking
+ if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ };
+}
+
+function elementMatcher( matchers ) {
+ return matchers.length > 1 ?
+ function( elem, context, xml ) {
+ var i = matchers.length;
+ while ( i-- ) {
+ if ( !matchers[i]( elem, context, xml ) ) {
+ return false;
+ }
+ }
+ return true;
+ } :
+ matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+ var i = 0,
+ len = contexts.length;
+ for ( ; i < len; i++ ) {
+ Sizzle( selector, contexts[i], results );
+ }
+ return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+ var elem,
+ newUnmatched = [],
+ i = 0,
+ len = unmatched.length,
+ mapped = map != null;
+
+ for ( ; i < len; i++ ) {
+ if ( (elem = unmatched[i]) ) {
+ if ( !filter || filter( elem, context, xml ) ) {
+ newUnmatched.push( elem );
+ if ( mapped ) {
+ map.push( i );
+ }
+ }
+ }
+ }
+
+ return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+ if ( postFilter && !postFilter[ expando ] ) {
+ postFilter = setMatcher( postFilter );
+ }
+ if ( postFinder && !postFinder[ expando ] ) {
+ postFinder = setMatcher( postFinder, postSelector );
+ }
+ return markFunction(function( seed, results, context, xml ) {
+ var temp, i, elem,
+ preMap = [],
+ postMap = [],
+ preexisting = results.length,
+
+ // Get initial elements from seed or context
+ elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+ // Prefilter to get matcher input, preserving a map for seed-results synchronization
+ matcherIn = preFilter && ( seed || !selector ) ?
+ condense( elems, preMap, preFilter, context, xml ) :
+ elems,
+
+ matcherOut = matcher ?
+ // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+ postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+ // ...intermediate processing is necessary
+ [] :
+
+ // ...otherwise use results directly
+ results :
+ matcherIn;
+
+ // Find primary matches
+ if ( matcher ) {
+ matcher( matcherIn, matcherOut, context, xml );
+ }
+
+ // Apply postFilter
+ if ( postFilter ) {
+ temp = condense( matcherOut, postMap );
+ postFilter( temp, [], context, xml );
+
+ // Un-match failing elements by moving them back to matcherIn
+ i = temp.length;
+ while ( i-- ) {
+ if ( (elem = temp[i]) ) {
+ matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+ }
+ }
+ }
+
+ if ( seed ) {
+ if ( postFinder || preFilter ) {
+ if ( postFinder ) {
+ // Get the final matcherOut by condensing this intermediate into postFinder contexts
+ temp = [];
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( (elem = matcherOut[i]) ) {
+ // Restore matcherIn since elem is not yet a final match
+ temp.push( (matcherIn[i] = elem) );
+ }
+ }
+ postFinder( null, (matcherOut = []), temp, xml );
+ }
+
+ // Move matched elements from seed to results to keep them synchronized
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( (elem = matcherOut[i]) &&
+ (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+
+ seed[temp] = !(results[temp] = elem);
+ }
+ }
+ }
+
+ // Add elements to results, through postFinder if defined
+ } else {
+ matcherOut = condense(
+ matcherOut === results ?
+ matcherOut.splice( preexisting, matcherOut.length ) :
+ matcherOut
+ );
+ if ( postFinder ) {
+ postFinder( null, results, matcherOut, xml );
+ } else {
+ push.apply( results, matcherOut );
+ }
+ }
+ });
+}
+
+function matcherFromTokens( tokens ) {
+ var checkContext, matcher, j,
+ len = tokens.length,
+ leadingRelative = Expr.relative[ tokens[0].type ],
+ implicitRelative = leadingRelative || Expr.relative[" "],
+ i = leadingRelative ? 1 : 0,
+
+ // The foundational matcher ensures that elements are reachable from top-level context(s)
+ matchContext = addCombinator( function( elem ) {
+ return elem === checkContext;
+ }, implicitRelative, true ),
+ matchAnyContext = addCombinator( function( elem ) {
+ return indexOf( checkContext, elem ) > -1;
+ }, implicitRelative, true ),
+ matchers = [ function( elem, context, xml ) {
+ var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+ (checkContext = context).nodeType ?
+ matchContext( elem, context, xml ) :
+ matchAnyContext( elem, context, xml ) );
+ // Avoid hanging onto element (issue #299)
+ checkContext = null;
+ return ret;
+ } ];
+
+ for ( ; i < len; i++ ) {
+ if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+ matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+ } else {
+ matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+ // Return special upon seeing a positional matcher
+ if ( matcher[ expando ] ) {
+ // Find the next relative operator (if any) for proper handling
+ j = ++i;
+ for ( ; j < len; j++ ) {
+ if ( Expr.relative[ tokens[j].type ] ) {
+ break;
+ }
+ }
+ return setMatcher(
+ i > 1 && elementMatcher( matchers ),
+ i > 1 && toSelector(
+ // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+ tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+ ).replace( rtrim, "$1" ),
+ matcher,
+ i < j && matcherFromTokens( tokens.slice( i, j ) ),
+ j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+ j < len && toSelector( tokens )
+ );
+ }
+ matchers.push( matcher );
+ }
+ }
+
+ return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+ var bySet = setMatchers.length > 0,
+ byElement = elementMatchers.length > 0,
+ superMatcher = function( seed, context, xml, results, outermost ) {
+ var elem, j, matcher,
+ matchedCount = 0,
+ i = "0",
+ unmatched = seed && [],
+ setMatched = [],
+ contextBackup = outermostContext,
+ // We must always have either seed elements or outermost context
+ elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+ // Use integer dirruns iff this is the outermost matcher
+ dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+ len = elems.length;
+
+ if ( outermost ) {
+ outermostContext = context === document || context || outermost;
+ }
+
+ // Add elements passing elementMatchers directly to results
+ // Support: IE<9, Safari
+ // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+ for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+ if ( byElement && elem ) {
+ j = 0;
+ if ( !context && elem.ownerDocument !== document ) {
+ setDocument( elem );
+ xml = !documentIsHTML;
+ }
+ while ( (matcher = elementMatchers[j++]) ) {
+ if ( matcher( elem, context || document, xml) ) {
+ results.push( elem );
+ break;
+ }
+ }
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ }
+ }
+
+ // Track unmatched elements for set filters
+ if ( bySet ) {
+ // They will have gone through all possible matchers
+ if ( (elem = !matcher && elem) ) {
+ matchedCount--;
+ }
+
+ // Lengthen the array for every element, matched or not
+ if ( seed ) {
+ unmatched.push( elem );
+ }
+ }
+ }
+
+ // `i` is now the count of elements visited above, and adding it to `matchedCount`
+ // makes the latter nonnegative.
+ matchedCount += i;
+
+ // Apply set filters to unmatched elements
+ // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+ // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+ // no element matchers and no seed.
+ // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+ // case, which will result in a "00" `matchedCount` that differs from `i` but is also
+ // numerically zero.
+ if ( bySet && i !== matchedCount ) {
+ j = 0;
+ while ( (matcher = setMatchers[j++]) ) {
+ matcher( unmatched, setMatched, context, xml );
+ }
+
+ if ( seed ) {
+ // Reintegrate element matches to eliminate the need for sorting
+ if ( matchedCount > 0 ) {
+ while ( i-- ) {
+ if ( !(unmatched[i] || setMatched[i]) ) {
+ setMatched[i] = pop.call( results );
+ }
+ }
+ }
+
+ // Discard index placeholder values to get only actual matches
+ setMatched = condense( setMatched );
+ }
+
+ // Add matches to results
+ push.apply( results, setMatched );
+
+ // Seedless set matches succeeding multiple successful matchers stipulate sorting
+ if ( outermost && !seed && setMatched.length > 0 &&
+ ( matchedCount + setMatchers.length ) > 1 ) {
+
+ Sizzle.uniqueSort( results );
+ }
+ }
+
+ // Override manipulation of globals by nested matchers
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ outermostContext = contextBackup;
+ }
+
+ return unmatched;
+ };
+
+ return bySet ?
+ markFunction( superMatcher ) :
+ superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+ var i,
+ setMatchers = [],
+ elementMatchers = [],
+ cached = compilerCache[ selector + " " ];
+
+ if ( !cached ) {
+ // Generate a function of recursive functions that can be used to check each element
+ if ( !match ) {
+ match = tokenize( selector );
+ }
+ i = match.length;
+ while ( i-- ) {
+ cached = matcherFromTokens( match[i] );
+ if ( cached[ expando ] ) {
+ setMatchers.push( cached );
+ } else {
+ elementMatchers.push( cached );
+ }
+ }
+
+ // Cache the compiled function
+ cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+ // Save selector and tokenization
+ cached.selector = selector;
+ }
+ return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ * selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ * selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+ var i, tokens, token, type, find,
+ compiled = typeof selector === "function" && selector,
+ match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+ results = results || [];
+
+ // Try to minimize operations if there is only one selector in the list and no seed
+ // (the latter of which guarantees us context)
+ if ( match.length === 1 ) {
+
+ // Reduce context if the leading compound selector is an ID
+ tokens = match[0] = match[0].slice( 0 );
+ if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+ context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
+
+ context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+ if ( !context ) {
+ return results;
+
+ // Precompiled matchers will still verify ancestry, so step up a level
+ } else if ( compiled ) {
+ context = context.parentNode;
+ }
+
+ selector = selector.slice( tokens.shift().value.length );
+ }
+
+ // Fetch a seed set for right-to-left matching
+ i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+ while ( i-- ) {
+ token = tokens[i];
+
+ // Abort if we hit a combinator
+ if ( Expr.relative[ (type = token.type) ] ) {
+ break;
+ }
+ if ( (find = Expr.find[ type ]) ) {
+ // Search, expanding context for leading sibling combinators
+ if ( (seed = find(
+ token.matches[0].replace( runescape, funescape ),
+ rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+ )) ) {
+
+ // If seed is empty or no tokens remain, we can return early
+ tokens.splice( i, 1 );
+ selector = seed.length && toSelector( tokens );
+ if ( !selector ) {
+ push.apply( results, seed );
+ return results;
+ }
+
+ break;
+ }
+ }
+ }
+ }
+
+ // Compile and execute a filtering function if one is not provided
+ // Provide `match` to avoid retokenization if we modified the selector above
+ ( compiled || compile( selector, match ) )(
+ seed,
+ context,
+ !documentIsHTML,
+ results,
+ !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+ );
+ return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( el ) {
+ // Should return 1, but returns 4 (following)
+ return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( el ) {
+ el.innerHTML = "<a href='#'></a>";
+ return el.firstChild.getAttribute("href") === "#" ;
+}) ) {
+ addHandle( "type|href|height|width", function( elem, name, isXML ) {
+ if ( !isXML ) {
+ return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+ }
+ });
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( el ) {
+ el.innerHTML = "<input/>";
+ el.firstChild.setAttribute( "value", "" );
+ return el.firstChild.getAttribute( "value" ) === "";
+}) ) {
+ addHandle( "value", function( elem, name, isXML ) {
+ if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+ return elem.defaultValue;
+ }
+ });
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( el ) {
+ return el.getAttribute("disabled") == null;
+}) ) {
+ addHandle( booleans, function( elem, name, isXML ) {
+ var val;
+ if ( !isXML ) {
+ return elem[ name ] === true ? name.toLowerCase() :
+ (val = elem.getAttributeNode( name )) && val.specified ?
+ val.value :
+ null;
+ }
+ });
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
+
+
+
+
+var dir = function( elem, dir, until ) {
+ var matched = [],
+ truncate = until !== undefined;
+
+ while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+ if ( elem.nodeType === 1 ) {
+ if ( truncate && jQuery( elem ).is( until ) ) {
+ break;
+ }
+ matched.push( elem );
+ }
+ }
+ return matched;
+};
+
+
+var siblings = function( n, elem ) {
+ var matched = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ matched.push( n );
+ }
+ }
+
+ return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+
+
+function nodeName( elem, name ) {
+
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+
+};
+var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+
+
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+ if ( isFunction( qualifier ) ) {
+ return jQuery.grep( elements, function( elem, i ) {
+ return !!qualifier.call( elem, i, elem ) !== not;
+ } );
+ }
+
+ // Single element
+ if ( qualifier.nodeType ) {
+ return jQuery.grep( elements, function( elem ) {
+ return ( elem === qualifier ) !== not;
+ } );
+ }
+
+ // Arraylike of elements (jQuery, arguments, Array)
+ if ( typeof qualifier !== "string" ) {
+ return jQuery.grep( elements, function( elem ) {
+ return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+ } );
+ }
+
+ // Filtered directly for both simple and complex selectors
+ return jQuery.filter( qualifier, elements, not );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+ var elem = elems[ 0 ];
+
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ if ( elems.length === 1 && elem.nodeType === 1 ) {
+ return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
+ }
+
+ return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+ return elem.nodeType === 1;
+ } ) );
+};
+
+jQuery.fn.extend( {
+ find: function( selector ) {
+ var i, ret,
+ len = this.length,
+ self = this;
+
+ if ( typeof selector !== "string" ) {
+ return this.pushStack( jQuery( selector ).filter( function() {
+ for ( i = 0; i < len; i++ ) {
+ if ( jQuery.contains( self[ i ], this ) ) {
+ return true;
+ }
+ }
+ } ) );
+ }
+
+ ret = this.pushStack( [] );
+
+ for ( i = 0; i < len; i++ ) {
+ jQuery.find( selector, self[ i ], ret );
+ }
+
+ return len > 1 ? jQuery.uniqueSort( ret ) : ret;
+ },
+ filter: function( selector ) {
+ return this.pushStack( winnow( this, selector || [], false ) );
+ },
+ not: function( selector ) {
+ return this.pushStack( winnow( this, selector || [], true ) );
+ },
+ is: function( selector ) {
+ return !!winnow(
+ this,
+
+ // If this is a positional/relative selector, check membership in the returned set
+ // so $("p:first").is("p:last") won't return true for a doc with two "p".
+ typeof selector === "string" && rneedsContext.test( selector ) ?
+ jQuery( selector ) :
+ selector || [],
+ false
+ ).length;
+ }
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+ // A simple way to check for HTML strings
+ // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+ // Strict HTML recognition (#11290: must start with <)
+ // Shortcut simple #id case for speed
+ rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
+
+ init = jQuery.fn.init = function( selector, context, root ) {
+ var match, elem;
+
+ // HANDLE: $(""), $(null), $(undefined), $(false)
+ if ( !selector ) {
+ return this;
+ }
+
+ // Method init() accepts an alternate rootjQuery
+ // so migrate can support jQuery.sub (gh-2101)
+ root = root || rootjQuery;
+
+ // Handle HTML strings
+ if ( typeof selector === "string" ) {
+ if ( selector[ 0 ] === "<" &&
+ selector[ selector.length - 1 ] === ">" &&
+ selector.length >= 3 ) {
+
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [ null, selector, null ];
+
+ } else {
+ match = rquickExpr.exec( selector );
+ }
+
+ // Match html or make sure no context is specified for #id
+ if ( match && ( match[ 1 ] || !context ) ) {
+
+ // HANDLE: $(html) -> $(array)
+ if ( match[ 1 ] ) {
+ context = context instanceof jQuery ? context[ 0 ] : context;
+
+ // Option to run scripts is true for back-compat
+ // Intentionally let the error be thrown if parseHTML is not present
+ jQuery.merge( this, jQuery.parseHTML(
+ match[ 1 ],
+ context && context.nodeType ? context.ownerDocument || context : document,
+ true
+ ) );
+
+ // HANDLE: $(html, props)
+ if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+ for ( match in context ) {
+
+ // Properties of context are called as methods if possible
+ if ( isFunction( this[ match ] ) ) {
+ this[ match ]( context[ match ] );
+
+ // ...and otherwise set as attributes
+ } else {
+ this.attr( match, context[ match ] );
+ }
+ }
+ }
+
+ return this;
+
+ // HANDLE: $(#id)
+ } else {
+ elem = document.getElementById( match[ 2 ] );
+
+ if ( elem ) {
+
+ // Inject the element directly into the jQuery object
+ this[ 0 ] = elem;
+ this.length = 1;
+ }
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return ( context || root ).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor( context ).find( selector );
+ }
+
+ // HANDLE: $(DOMElement)
+ } else if ( selector.nodeType ) {
+ this[ 0 ] = selector;
+ this.length = 1;
+ return this;
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( isFunction( selector ) ) {
+ return root.ready !== undefined ?
+ root.ready( selector ) :
+
+ // Execute immediately if ready is not present
+ selector( jQuery );
+ }
+
+ return jQuery.makeArray( selector, this );
+ };
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+ // Methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+
+jQuery.fn.extend( {
+ has: function( target ) {
+ var targets = jQuery( target, this ),
+ l = targets.length;
+
+ return this.filter( function() {
+ var i = 0;
+ for ( ; i < l; i++ ) {
+ if ( jQuery.contains( this, targets[ i ] ) ) {
+ return true;
+ }
+ }
+ } );
+ },
+
+ closest: function( selectors, context ) {
+ var cur,
+ i = 0,
+ l = this.length,
+ matched = [],
+ targets = typeof selectors !== "string" && jQuery( selectors );
+
+ // Positional selectors never match, since there's no _selection_ context
+ if ( !rneedsContext.test( selectors ) ) {
+ for ( ; i < l; i++ ) {
+ for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+ // Always skip document fragments
+ if ( cur.nodeType < 11 && ( targets ?
+ targets.index( cur ) > -1 :
+
+ // Don't pass non-elements to Sizzle
+ cur.nodeType === 1 &&
+ jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+ matched.push( cur );
+ break;
+ }
+ }
+ }
+ }
+
+ return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+ },
+
+ // Determine the position of an element within the set
+ index: function( elem ) {
+
+ // No argument, return index in parent
+ if ( !elem ) {
+ return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+ }
+
+ // Index in selector
+ if ( typeof elem === "string" ) {
+ return indexOf.call( jQuery( elem ), this[ 0 ] );
+ }
+
+ // Locate the position of the desired element
+ return indexOf.call( this,
+
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[ 0 ] : elem
+ );
+ },
+
+ add: function( selector, context ) {
+ return this.pushStack(
+ jQuery.uniqueSort(
+ jQuery.merge( this.get(), jQuery( selector, context ) )
+ )
+ );
+ },
+
+ addBack: function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter( selector )
+ );
+ }
+} );
+
+function sibling( cur, dir ) {
+ while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+ return cur;
+}
+
+jQuery.each( {
+ parent: function( elem ) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function( elem ) {
+ return dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, i, until ) {
+ return dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return sibling( elem, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return sibling( elem, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, i, until ) {
+ return dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, i, until ) {
+ return dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return siblings( ( elem.parentNode || {} ).firstChild, elem );
+ },
+ children: function( elem ) {
+ return siblings( elem.firstChild );
+ },
+ contents: function( elem ) {
+ if ( nodeName( elem, "iframe" ) ) {
+ return elem.contentDocument;
+ }
+
+ // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
+ // Treat the template element as a regular one in browsers that
+ // don't support it.
+ if ( nodeName( elem, "template" ) ) {
+ elem = elem.content || elem;
+ }
+
+ return jQuery.merge( [], elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var matched = jQuery.map( this, fn, until );
+
+ if ( name.slice( -5 ) !== "Until" ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ matched = jQuery.filter( selector, matched );
+ }
+
+ if ( this.length > 1 ) {
+
+ // Remove duplicates
+ if ( !guaranteedUnique[ name ] ) {
+ jQuery.uniqueSort( matched );
+ }
+
+ // Reverse order for parents* and prev-derivatives
+ if ( rparentsprev.test( name ) ) {
+ matched.reverse();
+ }
+ }
+
+ return this.pushStack( matched );
+ };
+} );
+var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+ var object = {};
+ jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
+ object[ flag ] = true;
+ } );
+ return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ * options: an optional list of space-separated options that will change how
+ * the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ * once: will ensure the callback list can only be fired once (like a Deferred)
+ *
+ * memory: will keep track of previous values and will call any callback added
+ * after the list has been fired right away with the latest "memorized"
+ * values (like a Deferred)
+ *
+ * unique: will ensure a callback can only be added once (no duplicate in the list)
+ *
+ * stopOnFalse: interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+ // Convert options from String-formatted to Object-formatted if needed
+ // (we check in cache first)
+ options = typeof options === "string" ?
+ createOptions( options ) :
+ jQuery.extend( {}, options );
+
+ var // Flag to know if list is currently firing
+ firing,
+
+ // Last fire value for non-forgettable lists
+ memory,
+
+ // Flag to know if list was already fired
+ fired,
+
+ // Flag to prevent firing
+ locked,
+
+ // Actual callback list
+ list = [],
+
+ // Queue of execution data for repeatable lists
+ queue = [],
+
+ // Index of currently firing callback (modified by add/remove as needed)
+ firingIndex = -1,
+
+ // Fire callbacks
+ fire = function() {
+
+ // Enforce single-firing
+ locked = locked || options.once;
+
+ // Execute callbacks for all pending executions,
+ // respecting firingIndex overrides and runtime changes
+ fired = firing = true;
+ for ( ; queue.length; firingIndex = -1 ) {
+ memory = queue.shift();
+ while ( ++firingIndex < list.length ) {
+
+ // Run callback and check for early termination
+ if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+ options.stopOnFalse ) {
+
+ // Jump to end and forget the data so .add doesn't re-fire
+ firingIndex = list.length;
+ memory = false;
+ }
+ }
+ }
+
+ // Forget the data if we're done with it
+ if ( !options.memory ) {
+ memory = false;
+ }
+
+ firing = false;
+
+ // Clean up if we're done firing for good
+ if ( locked ) {
+
+ // Keep an empty list if we have data for future add calls
+ if ( memory ) {
+ list = [];
+
+ // Otherwise, this object is spent
+ } else {
+ list = "";
+ }
+ }
+ },
+
+ // Actual Callbacks object
+ self = {
+
+ // Add a callback or a collection of callbacks to the list
+ add: function() {
+ if ( list ) {
+
+ // If we have memory from a past run, we should fire after adding
+ if ( memory && !firing ) {
+ firingIndex = list.length - 1;
+ queue.push( memory );
+ }
+
+ ( function add( args ) {
+ jQuery.each( args, function( _, arg ) {
+ if ( isFunction( arg ) ) {
+ if ( !options.unique || !self.has( arg ) ) {
+ list.push( arg );
+ }
+ } else if ( arg && arg.length && toType( arg ) !== "string" ) {
+
+ // Inspect recursively
+ add( arg );
+ }
+ } );
+ } )( arguments );
+
+ if ( memory && !firing ) {
+ fire();
+ }
+ }
+ return this;
+ },
+
+ // Remove a callback from the list
+ remove: function() {
+ jQuery.each( arguments, function( _, arg ) {
+ var index;
+ while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+ list.splice( index, 1 );
+
+ // Handle firing indexes
+ if ( index <= firingIndex ) {
+ firingIndex--;
+ }
+ }
+ } );
+ return this;
+ },
+
+ // Check if a given callback is in the list.
+ // If no argument is given, return whether or not list has callbacks attached.
+ has: function( fn ) {
+ return fn ?
+ jQuery.inArray( fn, list ) > -1 :
+ list.length > 0;
+ },
+
+ // Remove all callbacks from the list
+ empty: function() {
+ if ( list ) {
+ list = [];
+ }
+ return this;
+ },
+
+ // Disable .fire and .add
+ // Abort any current/pending executions
+ // Clear all callbacks and values
+ disable: function() {
+ locked = queue = [];
+ list = memory = "";
+ return this;
+ },
+ disabled: function() {
+ return !list;
+ },
+
+ // Disable .fire
+ // Also disable .add unless we have memory (since it would have no effect)
+ // Abort any pending executions
+ lock: function() {
+ locked = queue = [];
+ if ( !memory && !firing ) {
+ list = memory = "";
+ }
+ return this;
+ },
+ locked: function() {
+ return !!locked;
+ },
+
+ // Call all callbacks with the given context and arguments
+ fireWith: function( context, args ) {
+ if ( !locked ) {
+ args = args || [];
+ args = [ context, args.slice ? args.slice() : args ];
+ queue.push( args );
+ if ( !firing ) {
+ fire();
+ }
+ }
+ return this;
+ },
+
+ // Call all the callbacks with the given arguments
+ fire: function() {
+ self.fireWith( this, arguments );
+ return this;
+ },
+
+ // To know if the callbacks have already been called at least once
+ fired: function() {
+ return !!fired;
+ }
+ };
+
+ return self;
+};
+
+
+function Identity( v ) {
+ return v;
+}
+function Thrower( ex ) {
+ throw ex;
+}
+
+function adoptValue( value, resolve, reject, noValue ) {
+ var method;
+
+ try {
+
+ // Check for promise aspect first to privilege synchronous behavior
+ if ( value && isFunction( ( method = value.promise ) ) ) {
+ method.call( value ).done( resolve ).fail( reject );
+
+ // Other thenables
+ } else if ( value && isFunction( ( method = value.then ) ) ) {
+ method.call( value, resolve, reject );
+
+ // Other non-thenables
+ } else {
+
+ // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
+ // * false: [ value ].slice( 0 ) => resolve( value )
+ // * true: [ value ].slice( 1 ) => resolve()
+ resolve.apply( undefined, [ value ].slice( noValue ) );
+ }
+
+ // For Promises/A+, convert exceptions into rejections
+ // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+ // Deferred#then to conditionally suppress rejection.
+ } catch ( value ) {
+
+ // Support: Android 4.0 only
+ // Strict mode functions invoked without .call/.apply get global-object context
+ reject.apply( undefined, [ value ] );
+ }
+}
+
+jQuery.extend( {
+
+ Deferred: function( func ) {
+ var tuples = [
+
+ // action, add listener, callbacks,
+ // ... .then handlers, argument index, [final state]
+ [ "notify", "progress", jQuery.Callbacks( "memory" ),
+ jQuery.Callbacks( "memory" ), 2 ],
+ [ "resolve", "done", jQuery.Callbacks( "once memory" ),
+ jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+ [ "reject", "fail", jQuery.Callbacks( "once memory" ),
+ jQuery.Callbacks( "once memory" ), 1, "rejected" ]
+ ],
+ state = "pending",
+ promise = {
+ state: function() {
+ return state;
+ },
+ always: function() {
+ deferred.done( arguments ).fail( arguments );
+ return this;
+ },
+ "catch": function( fn ) {
+ return promise.then( null, fn );
+ },
+
+ // Keep pipe for back-compat
+ pipe: function( /* fnDone, fnFail, fnProgress */ ) {
+ var fns = arguments;
+
+ return jQuery.Deferred( function( newDefer ) {
+ jQuery.each( tuples, function( i, tuple ) {
+
+ // Map tuples (progress, done, fail) to arguments (done, fail, progress)
+ var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+ // deferred.progress(function() { bind to newDefer or newDefer.notify })
+ // deferred.done(function() { bind to newDefer or newDefer.resolve })
+ // deferred.fail(function() { bind to newDefer or newDefer.reject })
+ deferred[ tuple[ 1 ] ]( function() {
+ var returned = fn && fn.apply( this, arguments );
+ if ( returned && isFunction( returned.promise ) ) {
+ returned.promise()
+ .progress( newDefer.notify )
+ .done( newDefer.resolve )
+ .fail( newDefer.reject );
+ } else {
+ newDefer[ tuple[ 0 ] + "With" ](
+ this,
+ fn ? [ returned ] : arguments
+ );
+ }
+ } );
+ } );
+ fns = null;
+ } ).promise();
+ },
+ then: function( onFulfilled, onRejected, onProgress ) {
+ var maxDepth = 0;
+ function resolve( depth, deferred, handler, special ) {
+ return function() {
+ var that = this,
+ args = arguments,
+ mightThrow = function() {
+ var returned, then;
+
+ // Support: Promises/A+ section 2.3.3.3.3
+ // https://promisesaplus.com/#point-59
+ // Ignore double-resolution attempts
+ if ( depth < maxDepth ) {
+ return;
+ }
+
+ returned = handler.apply( that, args );
+
+ // Support: Promises/A+ section 2.3.1
+ // https://promisesaplus.com/#point-48
+ if ( returned === deferred.promise() ) {
+ throw new TypeError( "Thenable self-resolution" );
+ }
+
+ // Support: Promises/A+ sections 2.3.3.1, 3.5
+ // https://promisesaplus.com/#point-54
+ // https://promisesaplus.com/#point-75
+ // Retrieve `then` only once
+ then = returned &&
+
+ // Support: Promises/A+ section 2.3.4
+ // https://promisesaplus.com/#point-64
+ // Only check objects and functions for thenability
+ ( typeof returned === "object" ||
+ typeof returned === "function" ) &&
+ returned.then;
+
+ // Handle a returned thenable
+ if ( isFunction( then ) ) {
+
+ // Special processors (notify) just wait for resolution
+ if ( special ) {
+ then.call(
+ returned,
+ resolve( maxDepth, deferred, Identity, special ),
+ resolve( maxDepth, deferred, Thrower, special )
+ );
+
+ // Normal processors (resolve) also hook into progress
+ } else {
+
+ // ...and disregard older resolution values
+ maxDepth++;
+
+ then.call(
+ returned,
+ resolve( maxDepth, deferred, Identity, special ),
+ resolve( maxDepth, deferred, Thrower, special ),
+ resolve( maxDepth, deferred, Identity,
+ deferred.notifyWith )
+ );
+ }
+
+ // Handle all other returned values
+ } else {
+
+ // Only substitute handlers pass on context
+ // and multiple values (non-spec behavior)
+ if ( handler !== Identity ) {
+ that = undefined;
+ args = [ returned ];
+ }
+
+ // Process the value(s)
+ // Default process is resolve
+ ( special || deferred.resolveWith )( that, args );
+ }
+ },
+
+ // Only normal processors (resolve) catch and reject exceptions
+ process = special ?
+ mightThrow :
+ function() {
+ try {
+ mightThrow();
+ } catch ( e ) {
+
+ if ( jQuery.Deferred.exceptionHook ) {
+ jQuery.Deferred.exceptionHook( e,
+ process.stackTrace );
+ }
+
+ // Support: Promises/A+ section 2.3.3.3.4.1
+ // https://promisesaplus.com/#point-61
+ // Ignore post-resolution exceptions
+ if ( depth + 1 >= maxDepth ) {
+
+ // Only substitute handlers pass on context
+ // and multiple values (non-spec behavior)
+ if ( handler !== Thrower ) {
+ that = undefined;
+ args = [ e ];
+ }
+
+ deferred.rejectWith( that, args );
+ }
+ }
+ };
+
+ // Support: Promises/A+ section 2.3.3.3.1
+ // https://promisesaplus.com/#point-57
+ // Re-resolve promises immediately to dodge false rejection from
+ // subsequent errors
+ if ( depth ) {
+ process();
+ } else {
+
+ // Call an optional hook to record the stack, in case of exception
+ // since it's otherwise lost when execution goes async
+ if ( jQuery.Deferred.getStackHook ) {
+ process.stackTrace = jQuery.Deferred.getStackHook();
+ }
+ window.setTimeout( process );
+ }
+ };
+ }
+
+ return jQuery.Deferred( function( newDefer ) {
+
+ // progress_handlers.add( ... )
+ tuples[ 0 ][ 3 ].add(
+ resolve(
+ 0,
+ newDefer,
+ isFunction( onProgress ) ?
+ onProgress :
+ Identity,
+ newDefer.notifyWith
+ )
+ );
+
+ // fulfilled_handlers.add( ... )
+ tuples[ 1 ][ 3 ].add(
+ resolve(
+ 0,
+ newDefer,
+ isFunction( onFulfilled ) ?
+ onFulfilled :
+ Identity
+ )
+ );
+
+ // rejected_handlers.add( ... )
+ tuples[ 2 ][ 3 ].add(
+ resolve(
+ 0,
+ newDefer,
+ isFunction( onRejected ) ?
+ onRejected :
+ Thrower
+ )
+ );
+ } ).promise();
+ },
+
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function( obj ) {
+ return obj != null ? jQuery.extend( obj, promise ) : promise;
+ }
+ },
+ deferred = {};
+
+ // Add list-specific methods
+ jQuery.each( tuples, function( i, tuple ) {
+ var list = tuple[ 2 ],
+ stateString = tuple[ 5 ];
+
+ // promise.progress = list.add
+ // promise.done = list.add
+ // promise.fail = list.add
+ promise[ tuple[ 1 ] ] = list.add;
+
+ // Handle state
+ if ( stateString ) {
+ list.add(
+ function() {
+
+ // state = "resolved" (i.e., fulfilled)
+ // state = "rejected"
+ state = stateString;
+ },
+
+ // rejected_callbacks.disable
+ // fulfilled_callbacks.disable
+ tuples[ 3 - i ][ 2 ].disable,
+
+ // rejected_handlers.disable
+ // fulfilled_handlers.disable
+ tuples[ 3 - i ][ 3 ].disable,
+
+ // progress_callbacks.lock
+ tuples[ 0 ][ 2 ].lock,
+
+ // progress_handlers.lock
+ tuples[ 0 ][ 3 ].lock
+ );
+ }
+
+ // progress_handlers.fire
+ // fulfilled_handlers.fire
+ // rejected_handlers.fire
+ list.add( tuple[ 3 ].fire );
+
+ // deferred.notify = function() { deferred.notifyWith(...) }
+ // deferred.resolve = function() { deferred.resolveWith(...) }
+ // deferred.reject = function() { deferred.rejectWith(...) }
+ deferred[ tuple[ 0 ] ] = function() {
+ deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
+ return this;
+ };
+
+ // deferred.notifyWith = list.fireWith
+ // deferred.resolveWith = list.fireWith
+ // deferred.rejectWith = list.fireWith
+ deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+ } );
+
+ // Make the deferred a promise
+ promise.promise( deferred );
+
+ // Call given func if any
+ if ( func ) {
+ func.call( deferred, deferred );
+ }
+
+ // All done!
+ return deferred;
+ },
+
+ // Deferred helper
+ when: function( singleValue ) {
+ var
+
+ // count of uncompleted subordinates
+ remaining = arguments.length,
+
+ // count of unprocessed arguments
+ i = remaining,
+
+ // subordinate fulfillment data
+ resolveContexts = Array( i ),
+ resolveValues = slice.call( arguments ),
+
+ // the master Deferred
+ master = jQuery.Deferred(),
+
+ // subordinate callback factory
+ updateFunc = function( i ) {
+ return function( value ) {
+ resolveContexts[ i ] = this;
+ resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+ if ( !( --remaining ) ) {
+ master.resolveWith( resolveContexts, resolveValues );
+ }
+ };
+ };
+
+ // Single- and empty arguments are adopted like Promise.resolve
+ if ( remaining <= 1 ) {
+ adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
+ !remaining );
+
+ // Use .then() to unwrap secondary thenables (cf. gh-3000)
+ if ( master.state() === "pending" ||
+ isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+ return master.then();
+ }
+ }
+
+ // Multiple arguments are aggregated like Promise.all array elements
+ while ( i-- ) {
+ adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
+ }
+
+ return master.promise();
+ }
+} );
+
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+ // Support: IE 8 - 9 only
+ // Console exists when dev tools are open, which can happen at any time
+ if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+ window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+ }
+};
+
+
+
+
+jQuery.readyException = function( error ) {
+ window.setTimeout( function() {
+ throw error;
+ } );
+};
+
+
+
+
+// The deferred used on DOM ready
+var readyList = jQuery.Deferred();
+
+jQuery.fn.ready = function( fn ) {
+
+ readyList
+ .then( fn )
+
+ // Wrap jQuery.readyException in a function so that the lookup
+ // happens at the time of error handling instead of callback
+ // registration.
+ .catch( function( error ) {
+ jQuery.readyException( error );
+ } );
+
+ return this;
+};
+
+jQuery.extend( {
+
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Handle when the DOM is ready
+ ready: function( wait ) {
+
+ // Abort if there are pending holds or we're already ready
+ if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+ return;
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if ( wait !== true && --jQuery.readyWait > 0 ) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ readyList.resolveWith( document, [ jQuery ] );
+ }
+} );
+
+jQuery.ready.then = readyList.then;
+
+// The ready event handler and self cleanup method
+function completed() {
+ document.removeEventListener( "DOMContentLoaded", completed );
+ window.removeEventListener( "load", completed );
+ jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+ ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ window.setTimeout( jQuery.ready );
+
+} else {
+
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", completed );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", completed );
+}
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+ var i = 0,
+ len = elems.length,
+ bulk = key == null;
+
+ // Sets many values
+ if ( toType( key ) === "object" ) {
+ chainable = true;
+ for ( i in key ) {
+ access( elems, fn, i, key[ i ], true, emptyGet, raw );
+ }
+
+ // Sets one value
+ } else if ( value !== undefined ) {
+ chainable = true;
+
+ if ( !isFunction( value ) ) {
+ raw = true;
+ }
+
+ if ( bulk ) {
+
+ // Bulk operations run against the entire set
+ if ( raw ) {
+ fn.call( elems, value );
+ fn = null;
+
+ // ...except when executing function values
+ } else {
+ bulk = fn;
+ fn = function( elem, key, value ) {
+ return bulk.call( jQuery( elem ), value );
+ };
+ }
+ }
+
+ if ( fn ) {
+ for ( ; i < len; i++ ) {
+ fn(
+ elems[ i ], key, raw ?
+ value :
+ value.call( elems[ i ], i, fn( elems[ i ], key ) )
+ );
+ }
+ }
+ }
+
+ if ( chainable ) {
+ return elems;
+ }
+
+ // Gets
+ if ( bulk ) {
+ return fn.call( elems );
+ }
+
+ return len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+
+
+// Matches dashed string for camelizing
+var rmsPrefix = /^-ms-/,
+ rdashAlpha = /-([a-z])/g;
+
+// Used by camelCase as callback to replace()
+function fcamelCase( all, letter ) {
+ return letter.toUpperCase();
+}
+
+// Convert dashed to camelCase; used by the css and data modules
+// Support: IE <=9 - 11, Edge 12 - 15
+// Microsoft forgot to hump their vendor prefix (#9572)
+function camelCase( string ) {
+ return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+}
+var acceptData = function( owner ) {
+
+ // Accepts only:
+ // - Node
+ // - Node.ELEMENT_NODE
+ // - Node.DOCUMENT_NODE
+ // - Object
+ // - Any
+ return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+ this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+ cache: function( owner ) {
+
+ // Check if the owner object already has a cache
+ var value = owner[ this.expando ];
+
+ // If not, create one
+ if ( !value ) {
+ value = {};
+
+ // We can accept data for non-element nodes in modern browsers,
+ // but we should not, see #8335.
+ // Always return an empty object.
+ if ( acceptData( owner ) ) {
+
+ // If it is a node unlikely to be stringify-ed or looped over
+ // use plain assignment
+ if ( owner.nodeType ) {
+ owner[ this.expando ] = value;
+
+ // Otherwise secure it in a non-enumerable property
+ // configurable must be true to allow the property to be
+ // deleted when data is removed
+ } else {
+ Object.defineProperty( owner, this.expando, {
+ value: value,
+ configurable: true
+ } );
+ }
+ }
+ }
+
+ return value;
+ },
+ set: function( owner, data, value ) {
+ var prop,
+ cache = this.cache( owner );
+
+ // Handle: [ owner, key, value ] args
+ // Always use camelCase key (gh-2257)
+ if ( typeof data === "string" ) {
+ cache[ camelCase( data ) ] = value;
+
+ // Handle: [ owner, { properties } ] args
+ } else {
+
+ // Copy the properties one-by-one to the cache object
+ for ( prop in data ) {
+ cache[ camelCase( prop ) ] = data[ prop ];
+ }
+ }
+ return cache;
+ },
+ get: function( owner, key ) {
+ return key === undefined ?
+ this.cache( owner ) :
+
+ // Always use camelCase key (gh-2257)
+ owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
+ },
+ access: function( owner, key, value ) {
+
+ // In cases where either:
+ //
+ // 1. No key was specified
+ // 2. A string key was specified, but no value provided
+ //
+ // Take the "read" path and allow the get method to determine
+ // which value to return, respectively either:
+ //
+ // 1. The entire cache object
+ // 2. The data stored at the key
+ //
+ if ( key === undefined ||
+ ( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+ return this.get( owner, key );
+ }
+
+ // When the key is not a string, or both a key and value
+ // are specified, set or extend (existing objects) with either:
+ //
+ // 1. An object of properties
+ // 2. A key and value
+ //
+ this.set( owner, key, value );
+
+ // Since the "set" path can have two possible entry points
+ // return the expected data based on which path was taken[*]
+ return value !== undefined ? value : key;
+ },
+ remove: function( owner, key ) {
+ var i,
+ cache = owner[ this.expando ];
+
+ if ( cache === undefined ) {
+ return;
+ }
+
+ if ( key !== undefined ) {
+
+ // Support array or space separated string of keys
+ if ( Array.isArray( key ) ) {
+
+ // If key is an array of keys...
+ // We always set camelCase keys, so remove that.
+ key = key.map( camelCase );
+ } else {
+ key = camelCase( key );
+
+ // If a key with the spaces exists, use it.
+ // Otherwise, create an array by matching non-whitespace
+ key = key in cache ?
+ [ key ] :
+ ( key.match( rnothtmlwhite ) || [] );
+ }
+
+ i = key.length;
+
+ while ( i-- ) {
+ delete cache[ key[ i ] ];
+ }
+ }
+
+ // Remove the expando if there's no more data
+ if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+ // Support: Chrome <=35 - 45
+ // Webkit & Blink performance suffers when deleting properties
+ // from DOM nodes, so set to undefined instead
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+ if ( owner.nodeType ) {
+ owner[ this.expando ] = undefined;
+ } else {
+ delete owner[ this.expando ];
+ }
+ }
+ },
+ hasData: function( owner ) {
+ var cache = owner[ this.expando ];
+ return cache !== undefined && !jQuery.isEmptyObject( cache );
+ }
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+// Implementation Summary
+//
+// 1. Enforce API surface and semantic compatibility with 1.9.x branch
+// 2. Improve the module's maintainability by reducing the storage
+// paths to a single mechanism.
+// 3. Use the same single mechanism to support "private" and "user" data.
+// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+// 5. Avoid exposing implementation details on user objects (eg. expando properties)
+// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+ rmultiDash = /[A-Z]/g;
+
+function getData( data ) {
+ if ( data === "true" ) {
+ return true;
+ }
+
+ if ( data === "false" ) {
+ return false;
+ }
+
+ if ( data === "null" ) {
+ return null;
+ }
+
+ // Only convert to a number if it doesn't change the string
+ if ( data === +data + "" ) {
+ return +data;
+ }
+
+ if ( rbrace.test( data ) ) {
+ return JSON.parse( data );
+ }
+
+ return data;
+}
+
+function dataAttr( elem, key, data ) {
+ var name;
+
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && elem.nodeType === 1 ) {
+ name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+ data = elem.getAttribute( name );
+
+ if ( typeof data === "string" ) {
+ try {
+ data = getData( data );
+ } catch ( e ) {}
+
+ // Make sure we set the data so it isn't changed later
+ dataUser.set( elem, key, data );
+ } else {
+ data = undefined;
+ }
+ }
+ return data;
+}
+
+jQuery.extend( {
+ hasData: function( elem ) {
+ return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+ },
+
+ data: function( elem, name, data ) {
+ return dataUser.access( elem, name, data );
+ },
+
+ removeData: function( elem, name ) {
+ dataUser.remove( elem, name );
+ },
+
+ // TODO: Now that all calls to _data and _removeData have been replaced
+ // with direct calls to dataPriv methods, these can be deprecated.
+ _data: function( elem, name, data ) {
+ return dataPriv.access( elem, name, data );
+ },
+
+ _removeData: function( elem, name ) {
+ dataPriv.remove( elem, name );
+ }
+} );
+
+jQuery.fn.extend( {
+ data: function( key, value ) {
+ var i, name, data,
+ elem = this[ 0 ],
+ attrs = elem && elem.attributes;
+
+ // Gets all values
+ if ( key === undefined ) {
+ if ( this.length ) {
+ data = dataUser.get( elem );
+
+ if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+ i = attrs.length;
+ while ( i-- ) {
+
+ // Support: IE 11 only
+ // The attrs elements can be null (#14894)
+ if ( attrs[ i ] ) {
+ name = attrs[ i ].name;
+ if ( name.indexOf( "data-" ) === 0 ) {
+ name = camelCase( name.slice( 5 ) );
+ dataAttr( elem, name, data[ name ] );
+ }
+ }
+ }
+ dataPriv.set( elem, "hasDataAttrs", true );
+ }
+ }
+
+ return data;
+ }
+
+ // Sets multiple values
+ if ( typeof key === "object" ) {
+ return this.each( function() {
+ dataUser.set( this, key );
+ } );
+ }
+
+ return access( this, function( value ) {
+ var data;
+
+ // The calling jQuery object (element matches) is not empty
+ // (and therefore has an element appears at this[ 0 ]) and the
+ // `value` parameter was not undefined. An empty jQuery object
+ // will result in `undefined` for elem = this[ 0 ] which will
+ // throw an exception if an attempt to read a data cache is made.
+ if ( elem && value === undefined ) {
+
+ // Attempt to get data from the cache
+ // The key will always be camelCased in Data
+ data = dataUser.get( elem, key );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // Attempt to "discover" the data in
+ // HTML5 custom data-* attrs
+ data = dataAttr( elem, key );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // We tried really hard, but the data doesn't exist.
+ return;
+ }
+
+ // Set the data...
+ this.each( function() {
+
+ // We always store the camelCased key
+ dataUser.set( this, key, value );
+ } );
+ }, null, value, arguments.length > 1, null, true );
+ },
+
+ removeData: function( key ) {
+ return this.each( function() {
+ dataUser.remove( this, key );
+ } );
+ }
+} );
+
+
+jQuery.extend( {
+ queue: function( elem, type, data ) {
+ var queue;
+
+ if ( elem ) {
+ type = ( type || "fx" ) + "queue";
+ queue = dataPriv.get( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !queue || Array.isArray( data ) ) {
+ queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+ } else {
+ queue.push( data );
+ }
+ }
+ return queue || [];
+ }
+ },
+
+ dequeue: function( elem, type ) {
+ type = type || "fx";
+
+ var queue = jQuery.queue( elem, type ),
+ startLength = queue.length,
+ fn = queue.shift(),
+ hooks = jQuery._queueHooks( elem, type ),
+ next = function() {
+ jQuery.dequeue( elem, type );
+ };
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if ( fn === "inprogress" ) {
+ fn = queue.shift();
+ startLength--;
+ }
+
+ if ( fn ) {
+
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if ( type === "fx" ) {
+ queue.unshift( "inprogress" );
+ }
+
+ // Clear up the last queue stop function
+ delete hooks.stop;
+ fn.call( elem, next, hooks );
+ }
+
+ if ( !startLength && hooks ) {
+ hooks.empty.fire();
+ }
+ },
+
+ // Not public - generate a queueHooks object, or return the current one
+ _queueHooks: function( elem, type ) {
+ var key = type + "queueHooks";
+ return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+ empty: jQuery.Callbacks( "once memory" ).add( function() {
+ dataPriv.remove( elem, [ type + "queue", key ] );
+ } )
+ } );
+ }
+} );
+
+jQuery.fn.extend( {
+ queue: function( type, data ) {
+ var setter = 2;
+
+ if ( typeof type !== "string" ) {
+ data = type;
+ type = "fx";
+ setter--;
+ }
+
+ if ( arguments.length < setter ) {
+ return jQuery.queue( this[ 0 ], type );
+ }
+
+ return data === undefined ?
+ this :
+ this.each( function() {
+ var queue = jQuery.queue( this, type, data );
+
+ // Ensure a hooks for this queue
+ jQuery._queueHooks( this, type );
+
+ if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+ jQuery.dequeue( this, type );
+ }
+ } );
+ },
+ dequeue: function( type ) {
+ return this.each( function() {
+ jQuery.dequeue( this, type );
+ } );
+ },
+ clearQueue: function( type ) {
+ return this.queue( type || "fx", [] );
+ },
+
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function( type, obj ) {
+ var tmp,
+ count = 1,
+ defer = jQuery.Deferred(),
+ elements = this,
+ i = this.length,
+ resolve = function() {
+ if ( !( --count ) ) {
+ defer.resolveWith( elements, [ elements ] );
+ }
+ };
+
+ if ( typeof type !== "string" ) {
+ obj = type;
+ type = undefined;
+ }
+ type = type || "fx";
+
+ while ( i-- ) {
+ tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+ if ( tmp && tmp.empty ) {
+ count++;
+ tmp.empty.add( resolve );
+ }
+ }
+ resolve();
+ return defer.promise( obj );
+ }
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var isHiddenWithinTree = function( elem, el ) {
+
+ // isHiddenWithinTree might be called from jQuery#filter function;
+ // in that case, element will be second argument
+ elem = el || elem;
+
+ // Inline style trumps all
+ return elem.style.display === "none" ||
+ elem.style.display === "" &&
+
+ // Otherwise, check computed style
+ // Support: Firefox <=43 - 45
+ // Disconnected elements can have computed display: none, so first confirm that elem is
+ // in the document.
+ jQuery.contains( elem.ownerDocument, elem ) &&
+
+ jQuery.css( elem, "display" ) === "none";
+ };
+
+var swap = function( elem, options, callback, args ) {
+ var ret, name,
+ old = {};
+
+ // Remember the old values, and insert the new ones
+ for ( name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ ret = callback.apply( elem, args || [] );
+
+ // Revert the old values
+ for ( name in options ) {
+ elem.style[ name ] = old[ name ];
+ }
+
+ return ret;
+};
+
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+ var adjusted, scale,
+ maxIterations = 20,
+ currentValue = tween ?
+ function() {
+ return tween.cur();
+ } :
+ function() {
+ return jQuery.css( elem, prop, "" );
+ },
+ initial = currentValue(),
+ unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+ // Starting value computation is required for potential unit mismatches
+ initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+ rcssNum.exec( jQuery.css( elem, prop ) );
+
+ if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+ // Support: Firefox <=54
+ // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
+ initial = initial / 2;
+
+ // Trust units reported by jQuery.css
+ unit = unit || initialInUnit[ 3 ];
+
+ // Iteratively approximate from a nonzero starting point
+ initialInUnit = +initial || 1;
+
+ while ( maxIterations-- ) {
+
+ // Evaluate and update our best guess (doubling guesses that zero out).
+ // Finish if the scale equals or crosses 1 (making the old*new product non-positive).
+ jQuery.style( elem, prop, initialInUnit + unit );
+ if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
+ maxIterations = 0;
+ }
+ initialInUnit = initialInUnit / scale;
+
+ }
+
+ initialInUnit = initialInUnit * 2;
+ jQuery.style( elem, prop, initialInUnit + unit );
+
+ // Make sure we update the tween properties later on
+ valueParts = valueParts || [];
+ }
+
+ if ( valueParts ) {
+ initialInUnit = +initialInUnit || +initial || 0;
+
+ // Apply relative offset (+=/-=) if specified
+ adjusted = valueParts[ 1 ] ?
+ initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+ +valueParts[ 2 ];
+ if ( tween ) {
+ tween.unit = unit;
+ tween.start = initialInUnit;
+ tween.end = adjusted;
+ }
+ }
+ return adjusted;
+}
+
+
+var defaultDisplayMap = {};
+
+function getDefaultDisplay( elem ) {
+ var temp,
+ doc = elem.ownerDocument,
+ nodeName = elem.nodeName,
+ display = defaultDisplayMap[ nodeName ];
+
+ if ( display ) {
+ return display;
+ }
+
+ temp = doc.body.appendChild( doc.createElement( nodeName ) );
+ display = jQuery.css( temp, "display" );
+
+ temp.parentNode.removeChild( temp );
+
+ if ( display === "none" ) {
+ display = "block";
+ }
+ defaultDisplayMap[ nodeName ] = display;
+
+ return display;
+}
+
+function showHide( elements, show ) {
+ var display, elem,
+ values = [],
+ index = 0,
+ length = elements.length;
+
+ // Determine new display value for elements that need to change
+ for ( ; index < length; index++ ) {
+ elem = elements[ index ];
+ if ( !elem.style ) {
+ continue;
+ }
+
+ display = elem.style.display;
+ if ( show ) {
+
+ // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+ // check is required in this first loop unless we have a nonempty display value (either
+ // inline or about-to-be-restored)
+ if ( display === "none" ) {
+ values[ index ] = dataPriv.get( elem, "display" ) || null;
+ if ( !values[ index ] ) {
+ elem.style.display = "";
+ }
+ }
+ if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+ values[ index ] = getDefaultDisplay( elem );
+ }
+ } else {
+ if ( display !== "none" ) {
+ values[ index ] = "none";
+
+ // Remember what we're overwriting
+ dataPriv.set( elem, "display", display );
+ }
+ }
+ }
+
+ // Set the display of the elements in a second loop to avoid constant reflow
+ for ( index = 0; index < length; index++ ) {
+ if ( values[ index ] != null ) {
+ elements[ index ].style.display = values[ index ];
+ }
+ }
+
+ return elements;
+}
+
+jQuery.fn.extend( {
+ show: function() {
+ return showHide( this, true );
+ },
+ hide: function() {
+ return showHide( this );
+ },
+ toggle: function( state ) {
+ if ( typeof state === "boolean" ) {
+ return state ? this.show() : this.hide();
+ }
+
+ return this.each( function() {
+ if ( isHiddenWithinTree( this ) ) {
+ jQuery( this ).show();
+ } else {
+ jQuery( this ).hide();
+ }
+ } );
+ }
+} );
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
+
+var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
+
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+ // Support: IE <=9 only
+ option: [ 1, "<select multiple='multiple'>", "</select>" ],
+
+ // XHTML parsers do not magically insert elements in the
+ // same way that tag soup parsers do. So we cannot shorten
+ // this by omitting <tbody> or other required elements.
+ thead: [ 1, "<table>", "</table>" ],
+ col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+ tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+ td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+ _default: [ 0, "", "" ]
+};
+
+// Support: IE <=9 only
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function getAll( context, tag ) {
+
+ // Support: IE <=9 - 11 only
+ // Use typeof to avoid zero-argument method invocation on host objects (#15151)
+ var ret;
+
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ ret = context.getElementsByTagName( tag || "*" );
+
+ } else if ( typeof context.querySelectorAll !== "undefined" ) {
+ ret = context.querySelectorAll( tag || "*" );
+
+ } else {
+ ret = [];
+ }
+
+ if ( tag === undefined || tag && nodeName( context, tag ) ) {
+ return jQuery.merge( [ context ], ret );
+ }
+
+ return ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+ var i = 0,
+ l = elems.length;
+
+ for ( ; i < l; i++ ) {
+ dataPriv.set(
+ elems[ i ],
+ "globalEval",
+ !refElements || dataPriv.get( refElements[ i ], "globalEval" )
+ );
+ }
+}
+
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+ var elem, tmp, tag, wrap, contains, j,
+ fragment = context.createDocumentFragment(),
+ nodes = [],
+ i = 0,
+ l = elems.length;
+
+ for ( ; i < l; i++ ) {
+ elem = elems[ i ];
+
+ if ( elem || elem === 0 ) {
+
+ // Add nodes directly
+ if ( toType( elem ) === "object" ) {
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+ // Convert non-html into a text node
+ } else if ( !rhtml.test( elem ) ) {
+ nodes.push( context.createTextNode( elem ) );
+
+ // Convert html into DOM nodes
+ } else {
+ tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+ // Deserialize a standard representation
+ tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+ wrap = wrapMap[ tag ] || wrapMap._default;
+ tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+ // Descend through wrappers to the right content
+ j = wrap[ 0 ];
+ while ( j-- ) {
+ tmp = tmp.lastChild;
+ }
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge( nodes, tmp.childNodes );
+
+ // Remember the top-level container
+ tmp = fragment.firstChild;
+
+ // Ensure the created nodes are orphaned (#12392)
+ tmp.textContent = "";
+ }
+ }
+ }
+
+ // Remove wrapper from fragment
+ fragment.textContent = "";
+
+ i = 0;
+ while ( ( elem = nodes[ i++ ] ) ) {
+
+ // Skip elements already in the context collection (trac-4087)
+ if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+ if ( ignored ) {
+ ignored.push( elem );
+ }
+ continue;
+ }
+
+ contains = jQuery.contains( elem.ownerDocument, elem );
+
+ // Append to fragment
+ tmp = getAll( fragment.appendChild( elem ), "script" );
+
+ // Preserve script evaluation history
+ if ( contains ) {
+ setGlobalEval( tmp );
+ }
+
+ // Capture executables
+ if ( scripts ) {
+ j = 0;
+ while ( ( elem = tmp[ j++ ] ) ) {
+ if ( rscriptType.test( elem.type || "" ) ) {
+ scripts.push( elem );
+ }
+ }
+ }
+ }
+
+ return fragment;
+}
+
+
+( function() {
+ var fragment = document.createDocumentFragment(),
+ div = fragment.appendChild( document.createElement( "div" ) ),
+ input = document.createElement( "input" );
+
+ // Support: Android 4.0 - 4.3 only
+ // Check state lost if the name is set (#11217)
+ // Support: Windows Web Apps (WWA)
+ // `name` and `type` must use .setAttribute for WWA (#14901)
+ input.setAttribute( "type", "radio" );
+ input.setAttribute( "checked", "checked" );
+ input.setAttribute( "name", "t" );
+
+ div.appendChild( input );
+
+ // Support: Android <=4.1 only
+ // Older WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ // Support: IE <=11 only
+ // Make sure textarea (and checkbox) defaultValue is properly cloned
+ div.innerHTML = "<textarea>x</textarea>";
+ support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+} )();
+var documentElement = document.documentElement;
+
+
+
+var
+ rkeyEvent = /^key/,
+ rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+ rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+ return true;
+}
+
+function returnFalse() {
+ return false;
+}
+
+// Support: IE <=9 only
+// See #13393 for more info
+function safeActiveElement() {
+ try {
+ return document.activeElement;
+ } catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+ var origFn, type;
+
+ // Types can be a map of types/handlers
+ if ( typeof types === "object" ) {
+
+ // ( types-Object, selector, data )
+ if ( typeof selector !== "string" ) {
+
+ // ( types-Object, data )
+ data = data || selector;
+ selector = undefined;
+ }
+ for ( type in types ) {
+ on( elem, type, selector, data, types[ type ], one );
+ }
+ return elem;
+ }
+
+ if ( data == null && fn == null ) {
+
+ // ( types, fn )
+ fn = selector;
+ data = selector = undefined;
+ } else if ( fn == null ) {
+ if ( typeof selector === "string" ) {
+
+ // ( types, selector, fn )
+ fn = data;
+ data = undefined;
+ } else {
+
+ // ( types, data, fn )
+ fn = data;
+ data = selector;
+ selector = undefined;
+ }
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ } else if ( !fn ) {
+ return elem;
+ }
+
+ if ( one === 1 ) {
+ origFn = fn;
+ fn = function( event ) {
+
+ // Can use an empty set, since event contains the info
+ jQuery().off( event );
+ return origFn.apply( this, arguments );
+ };
+
+ // Use same guid so caller can remove using origFn
+ fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+ }
+ return elem.each( function() {
+ jQuery.event.add( this, types, fn, data, selector );
+ } );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+ global: {},
+
+ add: function( elem, types, handler, data, selector ) {
+
+ var handleObjIn, eventHandle, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = dataPriv.get( elem );
+
+ // Don't attach events to noData or text/comment nodes (but allow plain objects)
+ if ( !elemData ) {
+ return;
+ }
+
+ // Caller can pass in an object of custom data in lieu of the handler
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ selector = handleObjIn.selector;
+ }
+
+ // Ensure that invalid selectors throw exceptions at attach time
+ // Evaluate against documentElement in case elem is a non-element node (e.g., document)
+ if ( selector ) {
+ jQuery.find.matchesSelector( documentElement, selector );
+ }
+
+ // Make sure that the handler has a unique ID, used to find/remove it later
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure and main handler, if this is the first
+ if ( !( events = elemData.events ) ) {
+ events = elemData.events = {};
+ }
+ if ( !( eventHandle = elemData.handle ) ) {
+ eventHandle = elemData.handle = function( e ) {
+
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+ jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+ };
+ }
+
+ // Handle multiple events separated by a space
+ types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+ t = types.length;
+ while ( t-- ) {
+ tmp = rtypenamespace.exec( types[ t ] ) || [];
+ type = origType = tmp[ 1 ];
+ namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+ // There *must* be a type, no attaching namespace-only handlers
+ if ( !type ) {
+ continue;
+ }
+
+ // If event changes its type, use the special event handlers for the changed type
+ special = jQuery.event.special[ type ] || {};
+
+ // If selector defined, determine special event api type, otherwise given type
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+
+ // Update special based on newly reset type
+ special = jQuery.event.special[ type ] || {};
+
+ // handleObj is passed to all event handlers
+ handleObj = jQuery.extend( {
+ type: type,
+ origType: origType,
+ data: data,
+ handler: handler,
+ guid: handler.guid,
+ selector: selector,
+ needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+ namespace: namespaces.join( "." )
+ }, handleObjIn );
+
+ // Init the event handler queue if we're the first
+ if ( !( handlers = events[ type ] ) ) {
+ handlers = events[ type ] = [];
+ handlers.delegateCount = 0;
+
+ // Only use addEventListener if the special events handler returns false
+ if ( !special.setup ||
+ special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle );
+ }
+ }
+ }
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add to the element's handler list, delegates in front
+ if ( selector ) {
+ handlers.splice( handlers.delegateCount++, 0, handleObj );
+ } else {
+ handlers.push( handleObj );
+ }
+
+ // Keep track of which events have ever been used, for event optimization
+ jQuery.event.global[ type ] = true;
+ }
+
+ },
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, selector, mappedTypes ) {
+
+ var j, origCount, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+ if ( !elemData || !( events = elemData.events ) ) {
+ return;
+ }
+
+ // Once for each type.namespace in types; type may be omitted
+ types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+ t = types.length;
+ while ( t-- ) {
+ tmp = rtypenamespace.exec( types[ t ] ) || [];
+ type = origType = tmp[ 1 ];
+ namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+ // Unbind all events (on this namespace, if provided) for the element
+ if ( !type ) {
+ for ( type in events ) {
+ jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+ }
+ continue;
+ }
+
+ special = jQuery.event.special[ type ] || {};
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+ handlers = events[ type ] || [];
+ tmp = tmp[ 2 ] &&
+ new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+ // Remove matching events
+ origCount = j = handlers.length;
+ while ( j-- ) {
+ handleObj = handlers[ j ];
+
+ if ( ( mappedTypes || origType === handleObj.origType ) &&
+ ( !handler || handler.guid === handleObj.guid ) &&
+ ( !tmp || tmp.test( handleObj.namespace ) ) &&
+ ( !selector || selector === handleObj.selector ||
+ selector === "**" && handleObj.selector ) ) {
+ handlers.splice( j, 1 );
+
+ if ( handleObj.selector ) {
+ handlers.delegateCount--;
+ }
+ if ( special.remove ) {
+ special.remove.call( elem, handleObj );
+ }
+ }
+ }
+
+ // Remove generic event handler if we removed something and no more handlers exist
+ // (avoids potential for endless recursion during removal of special event handlers)
+ if ( origCount && !handlers.length ) {
+ if ( !special.teardown ||
+ special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+ jQuery.removeEvent( elem, type, elemData.handle );
+ }
+
+ delete events[ type ];
+ }
+ }
+
+ // Remove data and the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ dataPriv.remove( elem, "handle events" );
+ }
+ },
+
+ dispatch: function( nativeEvent ) {
+
+ // Make a writable jQuery.Event from the native event object
+ var event = jQuery.event.fix( nativeEvent );
+
+ var i, j, ret, matched, handleObj, handlerQueue,
+ args = new Array( arguments.length ),
+ handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
+ special = jQuery.event.special[ event.type ] || {};
+
+ // Use the fix-ed jQuery.Event rather than the (read-only) native event
+ args[ 0 ] = event;
+
+ for ( i = 1; i < arguments.length; i++ ) {
+ args[ i ] = arguments[ i ];
+ }
+
+ event.delegateTarget = this;
+
+ // Call the preDispatch hook for the mapped type, and let it bail if desired
+ if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+ return;
+ }
+
+ // Determine handlers
+ handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+ // Run delegates first; they may want to stop propagation beneath us
+ i = 0;
+ while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+ event.currentTarget = matched.elem;
+
+ j = 0;
+ while ( ( handleObj = matched.handlers[ j++ ] ) &&
+ !event.isImmediatePropagationStopped() ) {
+
+ // Triggered event must either 1) have no namespace, or 2) have namespace(s)
+ // a subset or equal to those in the bound event (both can have no namespace).
+ if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
+
+ event.handleObj = handleObj;
+ event.data = handleObj.data;
+
+ ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+ handleObj.handler ).apply( matched.elem, args );
+
+ if ( ret !== undefined ) {
+ if ( ( event.result = ret ) === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+ }
+ }
+
+ // Call the postDispatch hook for the mapped type
+ if ( special.postDispatch ) {
+ special.postDispatch.call( this, event );
+ }
+
+ return event.result;
+ },
+
+ handlers: function( event, handlers ) {
+ var i, handleObj, sel, matchedHandlers, matchedSelectors,
+ handlerQueue = [],
+ delegateCount = handlers.delegateCount,
+ cur = event.target;
+
+ // Find delegate handlers
+ if ( delegateCount &&
+
+ // Support: IE <=9
+ // Black-hole SVG <use> instance trees (trac-13180)
+ cur.nodeType &&
+
+ // Support: Firefox <=42
+ // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
+ // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
+ // Support: IE 11 only
+ // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
+ !( event.type === "click" && event.button >= 1 ) ) {
+
+ for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+ // Don't check non-elements (#13208)
+ // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+ if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
+ matchedHandlers = [];
+ matchedSelectors = {};
+ for ( i = 0; i < delegateCount; i++ ) {
+ handleObj = handlers[ i ];
+
+ // Don't conflict with Object.prototype properties (#13203)
+ sel = handleObj.selector + " ";
+
+ if ( matchedSelectors[ sel ] === undefined ) {
+ matchedSelectors[ sel ] = handleObj.needsContext ?
+ jQuery( sel, this ).index( cur ) > -1 :
+ jQuery.find( sel, this, null, [ cur ] ).length;
+ }
+ if ( matchedSelectors[ sel ] ) {
+ matchedHandlers.push( handleObj );
+ }
+ }
+ if ( matchedHandlers.length ) {
+ handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
+ }
+ }
+ }
+ }
+
+ // Add the remaining (directly-bound) handlers
+ cur = this;
+ if ( delegateCount < handlers.length ) {
+ handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
+ }
+
+ return handlerQueue;
+ },
+
+ addProp: function( name, hook ) {
+ Object.defineProperty( jQuery.Event.prototype, name, {
+ enumerable: true,
+ configurable: true,
+
+ get: isFunction( hook ) ?
+ function() {
+ if ( this.originalEvent ) {
+ return hook( this.originalEvent );
+ }
+ } :
+ function() {
+ if ( this.originalEvent ) {
+ return this.originalEvent[ name ];
+ }
+ },
+
+ set: function( value ) {
+ Object.defineProperty( this, name, {
+ enumerable: true,
+ configurable: true,
+ writable: true,
+ value: value
+ } );
+ }
+ } );
+ },
+
+ fix: function( originalEvent ) {
+ return originalEvent[ jQuery.expando ] ?
+ originalEvent :
+ new jQuery.Event( originalEvent );
+ },
+
+ special: {
+ load: {
+
+ // Prevent triggered image.load events from bubbling to window.load
+ noBubble: true
+ },
+ focus: {
+
+ // Fire native event if possible so blur/focus sequence is correct
+ trigger: function() {
+ if ( this !== safeActiveElement() && this.focus ) {
+ this.focus();
+ return false;
+ }
+ },
+ delegateType: "focusin"
+ },
+ blur: {
+ trigger: function() {
+ if ( this === safeActiveElement() && this.blur ) {
+ this.blur();
+ return false;
+ }
+ },
+ delegateType: "focusout"
+ },
+ click: {
+
+ // For checkbox, fire native event so checked state will be right
+ trigger: function() {
+ if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
+ this.click();
+ return false;
+ }
+ },
+
+ // For cross-browser consistency, don't fire native .click() on links
+ _default: function( event ) {
+ return nodeName( event.target, "a" );
+ }
+ },
+
+ beforeunload: {
+ postDispatch: function( event ) {
+
+ // Support: Firefox 20+
+ // Firefox doesn't alert if the returnValue field is not set.
+ if ( event.result !== undefined && event.originalEvent ) {
+ event.originalEvent.returnValue = event.result;
+ }
+ }
+ }
+ }
+};
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+ // This "if" is needed for plain objects
+ if ( elem.removeEventListener ) {
+ elem.removeEventListener( type, handle );
+ }
+};
+
+jQuery.Event = function( src, props ) {
+
+ // Allow instantiation without the 'new' keyword
+ if ( !( this instanceof jQuery.Event ) ) {
+ return new jQuery.Event( src, props );
+ }
+
+ // Event object
+ if ( src && src.type ) {
+ this.originalEvent = src;
+ this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = src.defaultPrevented ||
+ src.defaultPrevented === undefined &&
+
+ // Support: Android <=2.3 only
+ src.returnValue === false ?
+ returnTrue :
+ returnFalse;
+
+ // Create target properties
+ // Support: Safari <=6 - 7 only
+ // Target should not be a text node (#504, #13143)
+ this.target = ( src.target && src.target.nodeType === 3 ) ?
+ src.target.parentNode :
+ src.target;
+
+ this.currentTarget = src.currentTarget;
+ this.relatedTarget = src.relatedTarget;
+
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // Put explicitly provided properties onto the event object
+ if ( props ) {
+ jQuery.extend( this, props );
+ }
+
+ // Create a timestamp if incoming event doesn't have one
+ this.timeStamp = src && src.timeStamp || Date.now();
+
+ // Mark it as fixed
+ this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+ constructor: jQuery.Event,
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse,
+ isSimulated: false,
+
+ preventDefault: function() {
+ var e = this.originalEvent;
+
+ this.isDefaultPrevented = returnTrue;
+
+ if ( e && !this.isSimulated ) {
+ e.preventDefault();
+ }
+ },
+ stopPropagation: function() {
+ var e = this.originalEvent;
+
+ this.isPropagationStopped = returnTrue;
+
+ if ( e && !this.isSimulated ) {
+ e.stopPropagation();
+ }
+ },
+ stopImmediatePropagation: function() {
+ var e = this.originalEvent;
+
+ this.isImmediatePropagationStopped = returnTrue;
+
+ if ( e && !this.isSimulated ) {
+ e.stopImmediatePropagation();
+ }
+
+ this.stopPropagation();
+ }
+};
+
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+ altKey: true,
+ bubbles: true,
+ cancelable: true,
+ changedTouches: true,
+ ctrlKey: true,
+ detail: true,
+ eventPhase: true,
+ metaKey: true,
+ pageX: true,
+ pageY: true,
+ shiftKey: true,
+ view: true,
+ "char": true,
+ charCode: true,
+ key: true,
+ keyCode: true,
+ button: true,
+ buttons: true,
+ clientX: true,
+ clientY: true,
+ offsetX: true,
+ offsetY: true,
+ pointerId: true,
+ pointerType: true,
+ screenX: true,
+ screenY: true,
+ targetTouches: true,
+ toElement: true,
+ touches: true,
+
+ which: function( event ) {
+ var button = event.button;
+
+ // Add which for key events
+ if ( event.which == null && rkeyEvent.test( event.type ) ) {
+ return event.charCode != null ? event.charCode : event.keyCode;
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
+ if ( button & 1 ) {
+ return 1;
+ }
+
+ if ( button & 2 ) {
+ return 3;
+ }
+
+ if ( button & 4 ) {
+ return 2;
+ }
+
+ return 0;
+ }
+
+ return event.which;
+ }
+}, jQuery.event.addProp );
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+ mouseenter: "mouseover",
+ mouseleave: "mouseout",
+ pointerenter: "pointerover",
+ pointerleave: "pointerout"
+}, function( orig, fix ) {
+ jQuery.event.special[ orig ] = {
+ delegateType: fix,
+ bindType: fix,
+
+ handle: function( event ) {
+ var ret,
+ target = this,
+ related = event.relatedTarget,
+ handleObj = event.handleObj;
+
+ // For mouseenter/leave call the handler if related is outside the target.
+ // NB: No relatedTarget if the mouse left/entered the browser window
+ if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+ event.type = handleObj.origType;
+ ret = handleObj.handler.apply( this, arguments );
+ event.type = fix;
+ }
+ return ret;
+ }
+ };
+} );
+
+jQuery.fn.extend( {
+
+ on: function( types, selector, data, fn ) {
+ return on( this, types, selector, data, fn );
+ },
+ one: function( types, selector, data, fn ) {
+ return on( this, types, selector, data, fn, 1 );
+ },
+ off: function( types, selector, fn ) {
+ var handleObj, type;
+ if ( types && types.preventDefault && types.handleObj ) {
+
+ // ( event ) dispatched jQuery.Event
+ handleObj = types.handleObj;
+ jQuery( types.delegateTarget ).off(
+ handleObj.namespace ?
+ handleObj.origType + "." + handleObj.namespace :
+ handleObj.origType,
+ handleObj.selector,
+ handleObj.handler
+ );
+ return this;
+ }
+ if ( typeof types === "object" ) {
+
+ // ( types-object [, selector] )
+ for ( type in types ) {
+ this.off( type, selector, types[ type ] );
+ }
+ return this;
+ }
+ if ( selector === false || typeof selector === "function" ) {
+
+ // ( types [, fn] )
+ fn = selector;
+ selector = undefined;
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ }
+ return this.each( function() {
+ jQuery.event.remove( this, types, fn, selector );
+ } );
+ }
+} );
+
+
+var
+
+ /* eslint-disable max-len */
+
+ // See https://github.com/eslint/eslint/issues/3229
+ rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
+
+ /* eslint-enable */
+
+ // Support: IE <=10 - 11, Edge 12 - 13 only
+ // In IE/Edge using regex groups here causes severe slowdowns.
+ // See https://connect.microsoft.com/IE/feedback/details/1736512/
+ rnoInnerhtml = /<script|<style|<link/i,
+
+ // checked="checked" or checked
+ rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+ rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+// Prefer a tbody over its parent table for containing new rows
+function manipulationTarget( elem, content ) {
+ if ( nodeName( elem, "table" ) &&
+ nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
+
+ return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
+ }
+
+ return elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+ elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+ return elem;
+}
+function restoreScript( elem ) {
+ if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
+ elem.type = elem.type.slice( 5 );
+ } else {
+ elem.removeAttribute( "type" );
+ }
+
+ return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+ var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+ if ( dest.nodeType !== 1 ) {
+ return;
+ }
+
+ // 1. Copy private data: events, handlers, etc.
+ if ( dataPriv.hasData( src ) ) {
+ pdataOld = dataPriv.access( src );
+ pdataCur = dataPriv.set( dest, pdataOld );
+ events = pdataOld.events;
+
+ if ( events ) {
+ delete pdataCur.handle;
+ pdataCur.events = {};
+
+ for ( type in events ) {
+ for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+ jQuery.event.add( dest, type, events[ type ][ i ] );
+ }
+ }
+ }
+ }
+
+ // 2. Copy user data
+ if ( dataUser.hasData( src ) ) {
+ udataOld = dataUser.access( src );
+ udataCur = jQuery.extend( {}, udataOld );
+
+ dataUser.set( dest, udataCur );
+ }
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+ var nodeName = dest.nodeName.toLowerCase();
+
+ // Fails to persist the checked state of a cloned checkbox or radio button.
+ if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+ dest.checked = src.checked;
+
+ // Fails to return the selected option to the default selected state when cloning options
+ } else if ( nodeName === "input" || nodeName === "textarea" ) {
+ dest.defaultValue = src.defaultValue;
+ }
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+ // Flatten any nested arrays
+ args = concat.apply( [], args );
+
+ var fragment, first, scripts, hasScripts, node, doc,
+ i = 0,
+ l = collection.length,
+ iNoClone = l - 1,
+ value = args[ 0 ],
+ valueIsFunction = isFunction( value );
+
+ // We can't cloneNode fragments that contain checked, in WebKit
+ if ( valueIsFunction ||
+ ( l > 1 && typeof value === "string" &&
+ !support.checkClone && rchecked.test( value ) ) ) {
+ return collection.each( function( index ) {
+ var self = collection.eq( index );
+ if ( valueIsFunction ) {
+ args[ 0 ] = value.call( this, index, self.html() );
+ }
+ domManip( self, args, callback, ignored );
+ } );
+ }
+
+ if ( l ) {
+ fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+ first = fragment.firstChild;
+
+ if ( fragment.childNodes.length === 1 ) {
+ fragment = first;
+ }
+
+ // Require either new content or an interest in ignored elements to invoke the callback
+ if ( first || ignored ) {
+ scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+ hasScripts = scripts.length;
+
+ // Use the original fragment for the last item
+ // instead of the first because it can end up
+ // being emptied incorrectly in certain situations (#8070).
+ for ( ; i < l; i++ ) {
+ node = fragment;
+
+ if ( i !== iNoClone ) {
+ node = jQuery.clone( node, true, true );
+
+ // Keep references to cloned scripts for later restoration
+ if ( hasScripts ) {
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge( scripts, getAll( node, "script" ) );
+ }
+ }
+
+ callback.call( collection[ i ], node, i );
+ }
+
+ if ( hasScripts ) {
+ doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+ // Reenable scripts
+ jQuery.map( scripts, restoreScript );
+
+ // Evaluate executable scripts on first document insertion
+ for ( i = 0; i < hasScripts; i++ ) {
+ node = scripts[ i ];
+ if ( rscriptType.test( node.type || "" ) &&
+ !dataPriv.access( node, "globalEval" ) &&
+ jQuery.contains( doc, node ) ) {
+
+ if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) {
+
+ // Optional AJAX dependency, but won't run scripts if not present
+ if ( jQuery._evalUrl ) {
+ jQuery._evalUrl( node.src );
+ }
+ } else {
+ DOMEval( node.textContent.replace( rcleanScript, "" ), doc, node );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return collection;
+}
+
+function remove( elem, selector, keepData ) {
+ var node,
+ nodes = selector ? jQuery.filter( selector, elem ) : elem,
+ i = 0;
+
+ for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+ if ( !keepData && node.nodeType === 1 ) {
+ jQuery.cleanData( getAll( node ) );
+ }
+
+ if ( node.parentNode ) {
+ if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
+ setGlobalEval( getAll( node, "script" ) );
+ }
+ node.parentNode.removeChild( node );
+ }
+ }
+
+ return elem;
+}
+
+jQuery.extend( {
+ htmlPrefilter: function( html ) {
+ return html.replace( rxhtmlTag, "<$1></$2>" );
+ },
+
+ clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+ var i, l, srcElements, destElements,
+ clone = elem.cloneNode( true ),
+ inPage = jQuery.contains( elem.ownerDocument, elem );
+
+ // Fix IE cloning issues
+ if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+ !jQuery.isXMLDoc( elem ) ) {
+
+ // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
+ destElements = getAll( clone );
+ srcElements = getAll( elem );
+
+ for ( i = 0, l = srcElements.length; i < l; i++ ) {
+ fixInput( srcElements[ i ], destElements[ i ] );
+ }
+ }
+
+ // Copy the events from the original to the clone
+ if ( dataAndEvents ) {
+ if ( deepDataAndEvents ) {
+ srcElements = srcElements || getAll( elem );
+ destElements = destElements || getAll( clone );
+
+ for ( i = 0, l = srcElements.length; i < l; i++ ) {
+ cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+ }
+ } else {
+ cloneCopyEvent( elem, clone );
+ }
+ }
+
+ // Preserve script evaluation history
+ destElements = getAll( clone, "script" );
+ if ( destElements.length > 0 ) {
+ setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+ }
+
+ // Return the cloned set
+ return clone;
+ },
+
+ cleanData: function( elems ) {
+ var data, elem, type,
+ special = jQuery.event.special,
+ i = 0;
+
+ for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+ if ( acceptData( elem ) ) {
+ if ( ( data = elem[ dataPriv.expando ] ) ) {
+ if ( data.events ) {
+ for ( type in data.events ) {
+ if ( special[ type ] ) {
+ jQuery.event.remove( elem, type );
+
+ // This is a shortcut to avoid jQuery.event.remove's overhead
+ } else {
+ jQuery.removeEvent( elem, type, data.handle );
+ }
+ }
+ }
+
+ // Support: Chrome <=35 - 45+
+ // Assign undefined instead of using delete, see Data#remove
+ elem[ dataPriv.expando ] = undefined;
+ }
+ if ( elem[ dataUser.expando ] ) {
+
+ // Support: Chrome <=35 - 45+
+ // Assign undefined instead of using delete, see Data#remove
+ elem[ dataUser.expando ] = undefined;
+ }
+ }
+ }
+ }
+} );
+
+jQuery.fn.extend( {
+ detach: function( selector ) {
+ return remove( this, selector, true );
+ },
+
+ remove: function( selector ) {
+ return remove( this, selector );
+ },
+
+ text: function( value ) {
+ return access( this, function( value ) {
+ return value === undefined ?
+ jQuery.text( this ) :
+ this.empty().each( function() {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ this.textContent = value;
+ }
+ } );
+ }, null, value, arguments.length );
+ },
+
+ append: function() {
+ return domManip( this, arguments, function( elem ) {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ var target = manipulationTarget( this, elem );
+ target.appendChild( elem );
+ }
+ } );
+ },
+
+ prepend: function() {
+ return domManip( this, arguments, function( elem ) {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ var target = manipulationTarget( this, elem );
+ target.insertBefore( elem, target.firstChild );
+ }
+ } );
+ },
+
+ before: function() {
+ return domManip( this, arguments, function( elem ) {
+ if ( this.parentNode ) {
+ this.parentNode.insertBefore( elem, this );
+ }
+ } );
+ },
+
+ after: function() {
+ return domManip( this, arguments, function( elem ) {
+ if ( this.parentNode ) {
+ this.parentNode.insertBefore( elem, this.nextSibling );
+ }
+ } );
+ },
+
+ empty: function() {
+ var elem,
+ i = 0;
+
+ for ( ; ( elem = this[ i ] ) != null; i++ ) {
+ if ( elem.nodeType === 1 ) {
+
+ // Prevent memory leaks
+ jQuery.cleanData( getAll( elem, false ) );
+
+ // Remove any remaining nodes
+ elem.textContent = "";
+ }
+ }
+
+ return this;
+ },
+
+ clone: function( dataAndEvents, deepDataAndEvents ) {
+ dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+ deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+ return this.map( function() {
+ return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+ } );
+ },
+
+ html: function( value ) {
+ return access( this, function( value ) {
+ var elem = this[ 0 ] || {},
+ i = 0,
+ l = this.length;
+
+ if ( value === undefined && elem.nodeType === 1 ) {
+ return elem.innerHTML;
+ }
+
+ // See if we can take a shortcut and just use innerHTML
+ if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+ !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+ value = jQuery.htmlPrefilter( value );
+
+ try {
+ for ( ; i < l; i++ ) {
+ elem = this[ i ] || {};
+
+ // Remove element nodes and prevent memory leaks
+ if ( elem.nodeType === 1 ) {
+ jQuery.cleanData( getAll( elem, false ) );
+ elem.innerHTML = value;
+ }
+ }
+
+ elem = 0;
+
+ // If using innerHTML throws an exception, use the fallback method
+ } catch ( e ) {}
+ }
+
+ if ( elem ) {
+ this.empty().append( value );
+ }
+ }, null, value, arguments.length );
+ },
+
+ replaceWith: function() {
+ var ignored = [];
+
+ // Make the changes, replacing each non-ignored context element with the new content
+ return domManip( this, arguments, function( elem ) {
+ var parent = this.parentNode;
+
+ if ( jQuery.inArray( this, ignored ) < 0 ) {
+ jQuery.cleanData( getAll( this ) );
+ if ( parent ) {
+ parent.replaceChild( elem, this );
+ }
+ }
+
+ // Force callback invocation
+ }, ignored );
+ }
+} );
+
+jQuery.each( {
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+}, function( name, original ) {
+ jQuery.fn[ name ] = function( selector ) {
+ var elems,
+ ret = [],
+ insert = jQuery( selector ),
+ last = insert.length - 1,
+ i = 0;
+
+ for ( ; i <= last; i++ ) {
+ elems = i === last ? this : this.clone( true );
+ jQuery( insert[ i ] )[ original ]( elems );
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // .get() because push.apply(_, arraylike) throws on ancient WebKit
+ push.apply( ret, elems.get() );
+ }
+
+ return this.pushStack( ret );
+ };
+} );
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+
+ // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
+ // IE throws on elements created in popups
+ // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+ var view = elem.ownerDocument.defaultView;
+
+ if ( !view || !view.opener ) {
+ view = window;
+ }
+
+ return view.getComputedStyle( elem );
+ };
+
+var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
+
+
+
+( function() {
+
+ // Executing both pixelPosition & boxSizingReliable tests require only one layout
+ // so they're executed at the same time to save the second computation.
+ function computeStyleTests() {
+
+ // This is a singleton, we need to execute it only once
+ if ( !div ) {
+ return;
+ }
+
+ container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
+ "margin-top:1px;padding:0;border:0";
+ div.style.cssText =
+ "position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
+ "margin:auto;border:1px;padding:1px;" +
+ "width:60%;top:1%";
+ documentElement.appendChild( container ).appendChild( div );
+
+ var divStyle = window.getComputedStyle( div );
+ pixelPositionVal = divStyle.top !== "1%";
+
+ // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
+ reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
+
+ // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
+ // Some styles come back with percentage values, even though they shouldn't
+ div.style.right = "60%";
+ pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
+
+ // Support: IE 9 - 11 only
+ // Detect misreporting of content dimensions for box-sizing:border-box elements
+ boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
+
+ // Support: IE 9 only
+ // Detect overflow:scroll screwiness (gh-3699)
+ div.style.position = "absolute";
+ scrollboxSizeVal = div.offsetWidth === 36 || "absolute";
+
+ documentElement.removeChild( container );
+
+ // Nullify the div so it wouldn't be stored in the memory and
+ // it will also be a sign that checks already performed
+ div = null;
+ }
+
+ function roundPixelMeasures( measure ) {
+ return Math.round( parseFloat( measure ) );
+ }
+
+ var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
+ reliableMarginLeftVal,
+ container = document.createElement( "div" ),
+ div = document.createElement( "div" );
+
+ // Finish early in limited (non-browser) environments
+ if ( !div.style ) {
+ return;
+ }
+
+ // Support: IE <=9 - 11 only
+ // Style of cloned element affects source element cloned (#8908)
+ div.style.backgroundClip = "content-box";
+ div.cloneNode( true ).style.backgroundClip = "";
+ support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+ jQuery.extend( support, {
+ boxSizingReliable: function() {
+ computeStyleTests();
+ return boxSizingReliableVal;
+ },
+ pixelBoxStyles: function() {
+ computeStyleTests();
+ return pixelBoxStylesVal;
+ },
+ pixelPosition: function() {
+ computeStyleTests();
+ return pixelPositionVal;
+ },
+ reliableMarginLeft: function() {
+ computeStyleTests();
+ return reliableMarginLeftVal;
+ },
+ scrollboxSize: function() {
+ computeStyleTests();
+ return scrollboxSizeVal;
+ }
+ } );
+} )();
+
+
+function curCSS( elem, name, computed ) {
+ var width, minWidth, maxWidth, ret,
+
+ // Support: Firefox 51+
+ // Retrieving style before computed somehow
+ // fixes an issue with getting wrong values
+ // on detached elements
+ style = elem.style;
+
+ computed = computed || getStyles( elem );
+
+ // getPropertyValue is needed for:
+ // .css('filter') (IE 9 only, #12537)
+ // .css('--customProperty) (#3144)
+ if ( computed ) {
+ ret = computed.getPropertyValue( name ) || computed[ name ];
+
+ if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+ ret = jQuery.style( elem, name );
+ }
+
+ // A tribute to the "awesome hack by Dean Edwards"
+ // Android Browser returns percentage for some values,
+ // but width seems to be reliably pixels.
+ // This is against the CSSOM draft spec:
+ // https://drafts.csswg.org/cssom/#resolved-values
+ if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
+
+ // Remember the original values
+ width = style.width;
+ minWidth = style.minWidth;
+ maxWidth = style.maxWidth;
+
+ // Put in the new values to get a computed value out
+ style.minWidth = style.maxWidth = style.width = ret;
+ ret = computed.width;
+
+ // Revert the changed values
+ style.width = width;
+ style.minWidth = minWidth;
+ style.maxWidth = maxWidth;
+ }
+ }
+
+ return ret !== undefined ?
+
+ // Support: IE <=9 - 11 only
+ // IE returns zIndex value as an integer.
+ ret + "" :
+ ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+ // Define the hook, we'll check on the first run if it's really needed.
+ return {
+ get: function() {
+ if ( conditionFn() ) {
+
+ // Hook not needed (or it's not possible to use it due
+ // to missing dependency), remove it.
+ delete this.get;
+ return;
+ }
+
+ // Hook needed; redefine it so that the support test is not executed again.
+ return ( this.get = hookFn ).apply( this, arguments );
+ }
+ };
+}
+
+
+var
+
+ // Swappable if display is none or starts with table
+ // except "table", "table-cell", or "table-caption"
+ // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+ rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+ rcustomProp = /^--/,
+ cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+ cssNormalTransform = {
+ letterSpacing: "0",
+ fontWeight: "400"
+ },
+
+ cssPrefixes = [ "Webkit", "Moz", "ms" ],
+ emptyStyle = document.createElement( "div" ).style;
+
+// Return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( name ) {
+
+ // Shortcut for names that are not vendor prefixed
+ if ( name in emptyStyle ) {
+ return name;
+ }
+
+ // Check for vendor prefixed names
+ var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
+ i = cssPrefixes.length;
+
+ while ( i-- ) {
+ name = cssPrefixes[ i ] + capName;
+ if ( name in emptyStyle ) {
+ return name;
+ }
+ }
+}
+
+// Return a property mapped along what jQuery.cssProps suggests or to
+// a vendor prefixed property.
+function finalPropName( name ) {
+ var ret = jQuery.cssProps[ name ];
+ if ( !ret ) {
+ ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
+ }
+ return ret;
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+
+ // Any relative (+/-) values have already been
+ // normalized at this point
+ var matches = rcssNum.exec( value );
+ return matches ?
+
+ // Guard against undefined "subtract", e.g., when used as in cssHooks
+ Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
+ value;
+}
+
+function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
+ var i = dimension === "width" ? 1 : 0,
+ extra = 0,
+ delta = 0;
+
+ // Adjustment may not be necessary
+ if ( box === ( isBorderBox ? "border" : "content" ) ) {
+ return 0;
+ }
+
+ for ( ; i < 4; i += 2 ) {
+
+ // Both box models exclude margin
+ if ( box === "margin" ) {
+ delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
+ }
+
+ // If we get here with a content-box, we're seeking "padding" or "border" or "margin"
+ if ( !isBorderBox ) {
+
+ // Add padding
+ delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+ // For "border" or "margin", add border
+ if ( box !== "padding" ) {
+ delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+
+ // But still keep track of it otherwise
+ } else {
+ extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+ }
+
+ // If we get here with a border-box (content + padding + border), we're seeking "content" or
+ // "padding" or "margin"
+ } else {
+
+ // For "content", subtract padding
+ if ( box === "content" ) {
+ delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+ }
+
+ // For "content" or "padding", subtract border
+ if ( box !== "margin" ) {
+ delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+ }
+ }
+ }
+
+ // Account for positive content-box scroll gutter when requested by providing computedVal
+ if ( !isBorderBox && computedVal >= 0 ) {
+
+ // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
+ // Assuming integer scroll gutter, subtract the rest and round down
+ delta += Math.max( 0, Math.ceil(
+ elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+ computedVal -
+ delta -
+ extra -
+ 0.5
+ ) );
+ }
+
+ return delta;
+}
+
+function getWidthOrHeight( elem, dimension, extra ) {
+
+ // Start with computed style
+ var styles = getStyles( elem ),
+ val = curCSS( elem, dimension, styles ),
+ isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+ valueIsBorderBox = isBorderBox;
+
+ // Support: Firefox <=54
+ // Return a confounding non-pixel value or feign ignorance, as appropriate.
+ if ( rnumnonpx.test( val ) ) {
+ if ( !extra ) {
+ return val;
+ }
+ val = "auto";
+ }
+
+ // Check for style in case a browser which returns unreliable values
+ // for getComputedStyle silently falls back to the reliable elem.style
+ valueIsBorderBox = valueIsBorderBox &&
+ ( support.boxSizingReliable() || val === elem.style[ dimension ] );
+
+ // Fall back to offsetWidth/offsetHeight when value is "auto"
+ // This happens for inline elements with no explicit setting (gh-3571)
+ // Support: Android <=4.1 - 4.3 only
+ // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
+ if ( val === "auto" ||
+ !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) {
+
+ val = elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ];
+
+ // offsetWidth/offsetHeight provide border-box values
+ valueIsBorderBox = true;
+ }
+
+ // Normalize "" and auto
+ val = parseFloat( val ) || 0;
+
+ // Adjust for the element's box model
+ return ( val +
+ boxModelAdjustment(
+ elem,
+ dimension,
+ extra || ( isBorderBox ? "border" : "content" ),
+ valueIsBorderBox,
+ styles,
+
+ // Provide the current computed size to request scroll gutter calculation (gh-3589)
+ val
+ )
+ ) + "px";
+}
+
+jQuery.extend( {
+
+ // Add in style property hooks for overriding the default
+ // behavior of getting and setting a style property
+ cssHooks: {
+ opacity: {
+ get: function( elem, computed ) {
+ if ( computed ) {
+
+ // We should always get a number back from opacity
+ var ret = curCSS( elem, "opacity" );
+ return ret === "" ? "1" : ret;
+ }
+ }
+ }
+ },
+
+ // Don't automatically add "px" to these possibly-unitless properties
+ cssNumber: {
+ "animationIterationCount": true,
+ "columnCount": true,
+ "fillOpacity": true,
+ "flexGrow": true,
+ "flexShrink": true,
+ "fontWeight": true,
+ "lineHeight": true,
+ "opacity": true,
+ "order": true,
+ "orphans": true,
+ "widows": true,
+ "zIndex": true,
+ "zoom": true
+ },
+
+ // Add in properties whose names you wish to fix before
+ // setting or getting the value
+ cssProps: {},
+
+ // Get and set the style property on a DOM Node
+ style: function( elem, name, value, extra ) {
+
+ // Don't set styles on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+ return;
+ }
+
+ // Make sure that we're working with the right name
+ var ret, type, hooks,
+ origName = camelCase( name ),
+ isCustomProp = rcustomProp.test( name ),
+ style = elem.style;
+
+ // Make sure that we're working with the right name. We don't
+ // want to query the value if it is a CSS custom property
+ // since they are user-defined.
+ if ( !isCustomProp ) {
+ name = finalPropName( origName );
+ }
+
+ // Gets hook for the prefixed version, then unprefixed version
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+ // Check if we're setting a value
+ if ( value !== undefined ) {
+ type = typeof value;
+
+ // Convert "+=" or "-=" to relative numbers (#7345)
+ if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+ value = adjustCSS( elem, name, ret );
+
+ // Fixes bug #9237
+ type = "number";
+ }
+
+ // Make sure that null and NaN values aren't set (#7116)
+ if ( value == null || value !== value ) {
+ return;
+ }
+
+ // If a number was passed in, add the unit (except for certain CSS properties)
+ if ( type === "number" ) {
+ value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+ }
+
+ // background-* props affect original clone's values
+ if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+ style[ name ] = "inherit";
+ }
+
+ // If a hook was provided, use that value, otherwise just set the specified value
+ if ( !hooks || !( "set" in hooks ) ||
+ ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+ if ( isCustomProp ) {
+ style.setProperty( name, value );
+ } else {
+ style[ name ] = value;
+ }
+ }
+
+ } else {
+
+ // If a hook was provided get the non-computed value from there
+ if ( hooks && "get" in hooks &&
+ ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+ return ret;
+ }
+
+ // Otherwise just get the value from the style object
+ return style[ name ];
+ }
+ },
+
+ css: function( elem, name, extra, styles ) {
+ var val, num, hooks,
+ origName = camelCase( name ),
+ isCustomProp = rcustomProp.test( name );
+
+ // Make sure that we're working with the right name. We don't
+ // want to modify the value if it is a CSS custom property
+ // since they are user-defined.
+ if ( !isCustomProp ) {
+ name = finalPropName( origName );
+ }
+
+ // Try prefixed name followed by the unprefixed name
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+ // If a hook was provided get the computed value from there
+ if ( hooks && "get" in hooks ) {
+ val = hooks.get( elem, true, extra );
+ }
+
+ // Otherwise, if a way to get the computed value exists, use that
+ if ( val === undefined ) {
+ val = curCSS( elem, name, styles );
+ }
+
+ // Convert "normal" to computed value
+ if ( val === "normal" && name in cssNormalTransform ) {
+ val = cssNormalTransform[ name ];
+ }
+
+ // Make numeric if forced or a qualifier was provided and val looks numeric
+ if ( extra === "" || extra ) {
+ num = parseFloat( val );
+ return extra === true || isFinite( num ) ? num || 0 : val;
+ }
+
+ return val;
+ }
+} );
+
+jQuery.each( [ "height", "width" ], function( i, dimension ) {
+ jQuery.cssHooks[ dimension ] = {
+ get: function( elem, computed, extra ) {
+ if ( computed ) {
+
+ // Certain elements can have dimension info if we invisibly show them
+ // but it must have a current display style that would benefit
+ return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+
+ // Support: Safari 8+
+ // Table columns in Safari have non-zero offsetWidth & zero
+ // getBoundingClientRect().width unless display is changed.
+ // Support: IE <=11 only
+ // Running getBoundingClientRect on a disconnected node
+ // in IE throws an error.
+ ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
+ swap( elem, cssShow, function() {
+ return getWidthOrHeight( elem, dimension, extra );
+ } ) :
+ getWidthOrHeight( elem, dimension, extra );
+ }
+ },
+
+ set: function( elem, value, extra ) {
+ var matches,
+ styles = getStyles( elem ),
+ isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+ subtract = extra && boxModelAdjustment(
+ elem,
+ dimension,
+ extra,
+ isBorderBox,
+ styles
+ );
+
+ // Account for unreliable border-box dimensions by comparing offset* to computed and
+ // faking a content-box to get border and padding (gh-3699)
+ if ( isBorderBox && support.scrollboxSize() === styles.position ) {
+ subtract -= Math.ceil(
+ elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+ parseFloat( styles[ dimension ] ) -
+ boxModelAdjustment( elem, dimension, "border", false, styles ) -
+ 0.5
+ );
+ }
+
+ // Convert to pixels if value adjustment is needed
+ if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+ ( matches[ 3 ] || "px" ) !== "px" ) {
+
+ elem.style[ dimension ] = value;
+ value = jQuery.css( elem, dimension );
+ }
+
+ return setPositiveNumber( elem, value, subtract );
+ }
+ };
+} );
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+ function( elem, computed ) {
+ if ( computed ) {
+ return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+ elem.getBoundingClientRect().left -
+ swap( elem, { marginLeft: 0 }, function() {
+ return elem.getBoundingClientRect().left;
+ } )
+ ) + "px";
+ }
+ }
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+ margin: "",
+ padding: "",
+ border: "Width"
+}, function( prefix, suffix ) {
+ jQuery.cssHooks[ prefix + suffix ] = {
+ expand: function( value ) {
+ var i = 0,
+ expanded = {},
+
+ // Assumes a single number if not a string
+ parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+ for ( ; i < 4; i++ ) {
+ expanded[ prefix + cssExpand[ i ] + suffix ] =
+ parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+ }
+
+ return expanded;
+ }
+ };
+
+ if ( prefix !== "margin" ) {
+ jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+ }
+} );
+
+jQuery.fn.extend( {
+ css: function( name, value ) {
+ return access( this, function( elem, name, value ) {
+ var styles, len,
+ map = {},
+ i = 0;
+
+ if ( Array.isArray( name ) ) {
+ styles = getStyles( elem );
+ len = name.length;
+
+ for ( ; i < len; i++ ) {
+ map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+ }
+
+ return map;
+ }
+
+ return value !== undefined ?
+ jQuery.style( elem, name, value ) :
+ jQuery.css( elem, name );
+ }, name, value, arguments.length > 1 );
+ }
+} );
+
+
+function Tween( elem, options, prop, end, easing ) {
+ return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+ constructor: Tween,
+ init: function( elem, options, prop, end, easing, unit ) {
+ this.elem = elem;
+ this.prop = prop;
+ this.easing = easing || jQuery.easing._default;
+ this.options = options;
+ this.start = this.now = this.cur();
+ this.end = end;
+ this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+ },
+ cur: function() {
+ var hooks = Tween.propHooks[ this.prop ];
+
+ return hooks && hooks.get ?
+ hooks.get( this ) :
+ Tween.propHooks._default.get( this );
+ },
+ run: function( percent ) {
+ var eased,
+ hooks = Tween.propHooks[ this.prop ];
+
+ if ( this.options.duration ) {
+ this.pos = eased = jQuery.easing[ this.easing ](
+ percent, this.options.duration * percent, 0, 1, this.options.duration
+ );
+ } else {
+ this.pos = eased = percent;
+ }
+ this.now = ( this.end - this.start ) * eased + this.start;
+
+ if ( this.options.step ) {
+ this.options.step.call( this.elem, this.now, this );
+ }
+
+ if ( hooks && hooks.set ) {
+ hooks.set( this );
+ } else {
+ Tween.propHooks._default.set( this );
+ }
+ return this;
+ }
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+ _default: {
+ get: function( tween ) {
+ var result;
+
+ // Use a property on the element directly when it is not a DOM element,
+ // or when there is no matching style property that exists.
+ if ( tween.elem.nodeType !== 1 ||
+ tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+ return tween.elem[ tween.prop ];
+ }
+
+ // Passing an empty string as a 3rd parameter to .css will automatically
+ // attempt a parseFloat and fallback to a string if the parse fails.
+ // Simple values such as "10px" are parsed to Float;
+ // complex values such as "rotate(1rad)" are returned as-is.
+ result = jQuery.css( tween.elem, tween.prop, "" );
+
+ // Empty strings, null, undefined and "auto" are converted to 0.
+ return !result || result === "auto" ? 0 : result;
+ },
+ set: function( tween ) {
+
+ // Use step hook for back compat.
+ // Use cssHook if its there.
+ // Use .style if available and use plain properties where available.
+ if ( jQuery.fx.step[ tween.prop ] ) {
+ jQuery.fx.step[ tween.prop ]( tween );
+ } else if ( tween.elem.nodeType === 1 &&
+ ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
+ jQuery.cssHooks[ tween.prop ] ) ) {
+ jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+ } else {
+ tween.elem[ tween.prop ] = tween.now;
+ }
+ }
+ }
+};
+
+// Support: IE <=9 only
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+ set: function( tween ) {
+ if ( tween.elem.nodeType && tween.elem.parentNode ) {
+ tween.elem[ tween.prop ] = tween.now;
+ }
+ }
+};
+
+jQuery.easing = {
+ linear: function( p ) {
+ return p;
+ },
+ swing: function( p ) {
+ return 0.5 - Math.cos( p * Math.PI ) / 2;
+ },
+ _default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+ fxNow, inProgress,
+ rfxtypes = /^(?:toggle|show|hide)$/,
+ rrun = /queueHooks$/;
+
+function schedule() {
+ if ( inProgress ) {
+ if ( document.hidden === false && window.requestAnimationFrame ) {
+ window.requestAnimationFrame( schedule );
+ } else {
+ window.setTimeout( schedule, jQuery.fx.interval );
+ }
+
+ jQuery.fx.tick();
+ }
+}
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+ window.setTimeout( function() {
+ fxNow = undefined;
+ } );
+ return ( fxNow = Date.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+ var which,
+ i = 0,
+ attrs = { height: type };
+
+ // If we include width, step value is 1 to do all cssExpand values,
+ // otherwise step value is 2 to skip over Left and Right
+ includeWidth = includeWidth ? 1 : 0;
+ for ( ; i < 4; i += 2 - includeWidth ) {
+ which = cssExpand[ i ];
+ attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+ }
+
+ if ( includeWidth ) {
+ attrs.opacity = attrs.width = type;
+ }
+
+ return attrs;
+}
+
+function createTween( value, prop, animation ) {
+ var tween,
+ collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+ index = 0,
+ length = collection.length;
+ for ( ; index < length; index++ ) {
+ if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+ // We're done with this property
+ return tween;
+ }
+ }
+}
+
+function defaultPrefilter( elem, props, opts ) {
+ var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
+ isBox = "width" in props || "height" in props,
+ anim = this,
+ orig = {},
+ style = elem.style,
+ hidden = elem.nodeType && isHiddenWithinTree( elem ),
+ dataShow = dataPriv.get( elem, "fxshow" );
+
+ // Queue-skipping animations hijack the fx hooks
+ if ( !opts.queue ) {
+ hooks = jQuery._queueHooks( elem, "fx" );
+ if ( hooks.unqueued == null ) {
+ hooks.unqueued = 0;
+ oldfire = hooks.empty.fire;
+ hooks.empty.fire = function() {
+ if ( !hooks.unqueued ) {
+ oldfire();
+ }
+ };
+ }
+ hooks.unqueued++;
+
+ anim.always( function() {
+
+ // Ensure the complete handler is called before this completes
+ anim.always( function() {
+ hooks.unqueued--;
+ if ( !jQuery.queue( elem, "fx" ).length ) {
+ hooks.empty.fire();
+ }
+ } );
+ } );
+ }
+
+ // Detect show/hide animations
+ for ( prop in props ) {
+ value = props[ prop ];
+ if ( rfxtypes.test( value ) ) {
+ delete props[ prop ];
+ toggle = toggle || value === "toggle";
+ if ( value === ( hidden ? "hide" : "show" ) ) {
+
+ // Pretend to be hidden if this is a "show" and
+ // there is still data from a stopped show/hide
+ if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+ hidden = true;
+
+ // Ignore all other no-op show/hide data
+ } else {
+ continue;
+ }
+ }
+ orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+ }
+ }
+
+ // Bail out if this is a no-op like .hide().hide()
+ propTween = !jQuery.isEmptyObject( props );
+ if ( !propTween && jQuery.isEmptyObject( orig ) ) {
+ return;
+ }
+
+ // Restrict "overflow" and "display" styles during box animations
+ if ( isBox && elem.nodeType === 1 ) {
+
+ // Support: IE <=9 - 11, Edge 12 - 15
+ // Record all 3 overflow attributes because IE does not infer the shorthand
+ // from identically-valued overflowX and overflowY and Edge just mirrors
+ // the overflowX value there.
+ opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+ // Identify a display type, preferring old show/hide data over the CSS cascade
+ restoreDisplay = dataShow && dataShow.display;
+ if ( restoreDisplay == null ) {
+ restoreDisplay = dataPriv.get( elem, "display" );
+ }
+ display = jQuery.css( elem, "display" );
+ if ( display === "none" ) {
+ if ( restoreDisplay ) {
+ display = restoreDisplay;
+ } else {
+
+ // Get nonempty value(s) by temporarily forcing visibility
+ showHide( [ elem ], true );
+ restoreDisplay = elem.style.display || restoreDisplay;
+ display = jQuery.css( elem, "display" );
+ showHide( [ elem ] );
+ }
+ }
+
+ // Animate inline elements as inline-block
+ if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
+ if ( jQuery.css( elem, "float" ) === "none" ) {
+
+ // Restore the original display value at the end of pure show/hide animations
+ if ( !propTween ) {
+ anim.done( function() {
+ style.display = restoreDisplay;
+ } );
+ if ( restoreDisplay == null ) {
+ display = style.display;
+ restoreDisplay = display === "none" ? "" : display;
+ }
+ }
+ style.display = "inline-block";
+ }
+ }
+ }
+
+ if ( opts.overflow ) {
+ style.overflow = "hidden";
+ anim.always( function() {
+ style.overflow = opts.overflow[ 0 ];
+ style.overflowX = opts.overflow[ 1 ];
+ style.overflowY = opts.overflow[ 2 ];
+ } );
+ }
+
+ // Implement show/hide animations
+ propTween = false;
+ for ( prop in orig ) {
+
+ // General show/hide setup for this element animation
+ if ( !propTween ) {
+ if ( dataShow ) {
+ if ( "hidden" in dataShow ) {
+ hidden = dataShow.hidden;
+ }
+ } else {
+ dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
+ }
+
+ // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
+ if ( toggle ) {
+ dataShow.hidden = !hidden;
+ }
+
+ // Show elements before animating them
+ if ( hidden ) {
+ showHide( [ elem ], true );
+ }
+
+ /* eslint-disable no-loop-func */
+
+ anim.done( function() {
+
+ /* eslint-enable no-loop-func */
+
+ // The final step of a "hide" animation is actually hiding the element
+ if ( !hidden ) {
+ showHide( [ elem ] );
+ }
+ dataPriv.remove( elem, "fxshow" );
+ for ( prop in orig ) {
+ jQuery.style( elem, prop, orig[ prop ] );
+ }
+ } );
+ }
+
+ // Per-property setup
+ propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+ if ( !( prop in dataShow ) ) {
+ dataShow[ prop ] = propTween.start;
+ if ( hidden ) {
+ propTween.end = propTween.start;
+ propTween.start = 0;
+ }
+ }
+ }
+}
+
+function propFilter( props, specialEasing ) {
+ var index, name, easing, value, hooks;
+
+ // camelCase, specialEasing and expand cssHook pass
+ for ( index in props ) {
+ name = camelCase( index );
+ easing = specialEasing[ name ];
+ value = props[ index ];
+ if ( Array.isArray( value ) ) {
+ easing = value[ 1 ];
+ value = props[ index ] = value[ 0 ];
+ }
+
+ if ( index !== name ) {
+ props[ name ] = value;
+ delete props[ index ];
+ }
+
+ hooks = jQuery.cssHooks[ name ];
+ if ( hooks && "expand" in hooks ) {
+ value = hooks.expand( value );
+ delete props[ name ];
+
+ // Not quite $.extend, this won't overwrite existing keys.
+ // Reusing 'index' because we have the correct "name"
+ for ( index in value ) {
+ if ( !( index in props ) ) {
+ props[ index ] = value[ index ];
+ specialEasing[ index ] = easing;
+ }
+ }
+ } else {
+ specialEasing[ name ] = easing;
+ }
+ }
+}
+
+function Animation( elem, properties, options ) {
+ var result,
+ stopped,
+ index = 0,
+ length = Animation.prefilters.length,
+ deferred = jQuery.Deferred().always( function() {
+
+ // Don't match elem in the :animated selector
+ delete tick.elem;
+ } ),
+ tick = function() {
+ if ( stopped ) {
+ return false;
+ }
+ var currentTime = fxNow || createFxNow(),
+ remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+ // Support: Android 2.3 only
+ // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+ temp = remaining / animation.duration || 0,
+ percent = 1 - temp,
+ index = 0,
+ length = animation.tweens.length;
+
+ for ( ; index < length; index++ ) {
+ animation.tweens[ index ].run( percent );
+ }
+
+ deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+ // If there's more to do, yield
+ if ( percent < 1 && length ) {
+ return remaining;
+ }
+
+ // If this was an empty animation, synthesize a final progress notification
+ if ( !length ) {
+ deferred.notifyWith( elem, [ animation, 1, 0 ] );
+ }
+
+ // Resolve the animation and report its conclusion
+ deferred.resolveWith( elem, [ animation ] );
+ return false;
+ },
+ animation = deferred.promise( {
+ elem: elem,
+ props: jQuery.extend( {}, properties ),
+ opts: jQuery.extend( true, {
+ specialEasing: {},
+ easing: jQuery.easing._default
+ }, options ),
+ originalProperties: properties,
+ originalOptions: options,
+ startTime: fxNow || createFxNow(),
+ duration: options.duration,
+ tweens: [],
+ createTween: function( prop, end ) {
+ var tween = jQuery.Tween( elem, animation.opts, prop, end,
+ animation.opts.specialEasing[ prop ] || animation.opts.easing );
+ animation.tweens.push( tween );
+ return tween;
+ },
+ stop: function( gotoEnd ) {
+ var index = 0,
+
+ // If we are going to the end, we want to run all the tweens
+ // otherwise we skip this part
+ length = gotoEnd ? animation.tweens.length : 0;
+ if ( stopped ) {
+ return this;
+ }
+ stopped = true;
+ for ( ; index < length; index++ ) {
+ animation.tweens[ index ].run( 1 );
+ }
+
+ // Resolve when we played the last frame; otherwise, reject
+ if ( gotoEnd ) {
+ deferred.notifyWith( elem, [ animation, 1, 0 ] );
+ deferred.resolveWith( elem, [ animation, gotoEnd ] );
+ } else {
+ deferred.rejectWith( elem, [ animation, gotoEnd ] );
+ }
+ return this;
+ }
+ } ),
+ props = animation.props;
+
+ propFilter( props, animation.opts.specialEasing );
+
+ for ( ; index < length; index++ ) {
+ result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+ if ( result ) {
+ if ( isFunction( result.stop ) ) {
+ jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+ result.stop.bind( result );
+ }
+ return result;
+ }
+ }
+
+ jQuery.map( props, createTween, animation );
+
+ if ( isFunction( animation.opts.start ) ) {
+ animation.opts.start.call( elem, animation );
+ }
+
+ // Attach callbacks from options
+ animation
+ .progress( animation.opts.progress )
+ .done( animation.opts.done, animation.opts.complete )
+ .fail( animation.opts.fail )
+ .always( animation.opts.always );
+
+ jQuery.fx.timer(
+ jQuery.extend( tick, {
+ elem: elem,
+ anim: animation,
+ queue: animation.opts.queue
+ } )
+ );
+
+ return animation;
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+ tweeners: {
+ "*": [ function( prop, value ) {
+ var tween = this.createTween( prop, value );
+ adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+ return tween;
+ } ]
+ },
+
+ tweener: function( props, callback ) {
+ if ( isFunction( props ) ) {
+ callback = props;
+ props = [ "*" ];
+ } else {
+ props = props.match( rnothtmlwhite );
+ }
+
+ var prop,
+ index = 0,
+ length = props.length;
+
+ for ( ; index < length; index++ ) {
+ prop = props[ index ];
+ Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+ Animation.tweeners[ prop ].unshift( callback );
+ }
+ },
+
+ prefilters: [ defaultPrefilter ],
+
+ prefilter: function( callback, prepend ) {
+ if ( prepend ) {
+ Animation.prefilters.unshift( callback );
+ } else {
+ Animation.prefilters.push( callback );
+ }
+ }
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+ var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+ complete: fn || !fn && easing ||
+ isFunction( speed ) && speed,
+ duration: speed,
+ easing: fn && easing || easing && !isFunction( easing ) && easing
+ };
+
+ // Go to the end state if fx are off
+ if ( jQuery.fx.off ) {
+ opt.duration = 0;
+
+ } else {
+ if ( typeof opt.duration !== "number" ) {
+ if ( opt.duration in jQuery.fx.speeds ) {
+ opt.duration = jQuery.fx.speeds[ opt.duration ];
+
+ } else {
+ opt.duration = jQuery.fx.speeds._default;
+ }
+ }
+ }
+
+ // Normalize opt.queue - true/undefined/null -> "fx"
+ if ( opt.queue == null || opt.queue === true ) {
+ opt.queue = "fx";
+ }
+
+ // Queueing
+ opt.old = opt.complete;
+
+ opt.complete = function() {
+ if ( isFunction( opt.old ) ) {
+ opt.old.call( this );
+ }
+
+ if ( opt.queue ) {
+ jQuery.dequeue( this, opt.queue );
+ }
+ };
+
+ return opt;
+};
+
+jQuery.fn.extend( {
+ fadeTo: function( speed, to, easing, callback ) {
+
+ // Show any hidden elements after setting opacity to 0
+ return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
+
+ // Animate to the value specified
+ .end().animate( { opacity: to }, speed, easing, callback );
+ },
+ animate: function( prop, speed, easing, callback ) {
+ var empty = jQuery.isEmptyObject( prop ),
+ optall = jQuery.speed( speed, easing, callback ),
+ doAnimation = function() {
+
+ // Operate on a copy of prop so per-property easing won't be lost
+ var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+ // Empty animations, or finishing resolves immediately
+ if ( empty || dataPriv.get( this, "finish" ) ) {
+ anim.stop( true );
+ }
+ };
+ doAnimation.finish = doAnimation;
+
+ return empty || optall.queue === false ?
+ this.each( doAnimation ) :
+ this.queue( optall.queue, doAnimation );
+ },
+ stop: function( type, clearQueue, gotoEnd ) {
+ var stopQueue = function( hooks ) {
+ var stop = hooks.stop;
+ delete hooks.stop;
+ stop( gotoEnd );
+ };
+
+ if ( typeof type !== "string" ) {
+ gotoEnd = clearQueue;
+ clearQueue = type;
+ type = undefined;
+ }
+ if ( clearQueue && type !== false ) {
+ this.queue( type || "fx", [] );
+ }
+
+ return this.each( function() {
+ var dequeue = true,
+ index = type != null && type + "queueHooks",
+ timers = jQuery.timers,
+ data = dataPriv.get( this );
+
+ if ( index ) {
+ if ( data[ index ] && data[ index ].stop ) {
+ stopQueue( data[ index ] );
+ }
+ } else {
+ for ( index in data ) {
+ if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+ stopQueue( data[ index ] );
+ }
+ }
+ }
+
+ for ( index = timers.length; index--; ) {
+ if ( timers[ index ].elem === this &&
+ ( type == null || timers[ index ].queue === type ) ) {
+
+ timers[ index ].anim.stop( gotoEnd );
+ dequeue = false;
+ timers.splice( index, 1 );
+ }
+ }
+
+ // Start the next in the queue if the last step wasn't forced.
+ // Timers currently will call their complete callbacks, which
+ // will dequeue but only if they were gotoEnd.
+ if ( dequeue || !gotoEnd ) {
+ jQuery.dequeue( this, type );
+ }
+ } );
+ },
+ finish: function( type ) {
+ if ( type !== false ) {
+ type = type || "fx";
+ }
+ return this.each( function() {
+ var index,
+ data = dataPriv.get( this ),
+ queue = data[ type + "queue" ],
+ hooks = data[ type + "queueHooks" ],
+ timers = jQuery.timers,
+ length = queue ? queue.length : 0;
+
+ // Enable finishing flag on private data
+ data.finish = true;
+
+ // Empty the queue first
+ jQuery.queue( this, type, [] );
+
+ if ( hooks && hooks.stop ) {
+ hooks.stop.call( this, true );
+ }
+
+ // Look for any active animations, and finish them
+ for ( index = timers.length; index--; ) {
+ if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+ timers[ index ].anim.stop( true );
+ timers.splice( index, 1 );
+ }
+ }
+
+ // Look for any animations in the old queue and finish them
+ for ( index = 0; index < length; index++ ) {
+ if ( queue[ index ] && queue[ index ].finish ) {
+ queue[ index ].finish.call( this );
+ }
+ }
+
+ // Turn off finishing flag
+ delete data.finish;
+ } );
+ }
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
+ var cssFn = jQuery.fn[ name ];
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return speed == null || typeof speed === "boolean" ?
+ cssFn.apply( this, arguments ) :
+ this.animate( genFx( name, true ), speed, easing, callback );
+ };
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+ slideDown: genFx( "show" ),
+ slideUp: genFx( "hide" ),
+ slideToggle: genFx( "toggle" ),
+ fadeIn: { opacity: "show" },
+ fadeOut: { opacity: "hide" },
+ fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return this.animate( props, speed, easing, callback );
+ };
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+ var timer,
+ i = 0,
+ timers = jQuery.timers;
+
+ fxNow = Date.now();
+
+ for ( ; i < timers.length; i++ ) {
+ timer = timers[ i ];
+
+ // Run the timer and safely remove it when done (allowing for external removal)
+ if ( !timer() && timers[ i ] === timer ) {
+ timers.splice( i--, 1 );
+ }
+ }
+
+ if ( !timers.length ) {
+ jQuery.fx.stop();
+ }
+ fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+ jQuery.timers.push( timer );
+ jQuery.fx.start();
+};
+
+jQuery.fx.interval = 13;
+jQuery.fx.start = function() {
+ if ( inProgress ) {
+ return;
+ }
+
+ inProgress = true;
+ schedule();
+};
+
+jQuery.fx.stop = function() {
+ inProgress = null;
+};
+
+jQuery.fx.speeds = {
+ slow: 600,
+ fast: 200,
+
+ // Default speed
+ _default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+ time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+ type = type || "fx";
+
+ return this.queue( type, function( next, hooks ) {
+ var timeout = window.setTimeout( next, time );
+ hooks.stop = function() {
+ window.clearTimeout( timeout );
+ };
+ } );
+};
+
+
+( function() {
+ var input = document.createElement( "input" ),
+ select = document.createElement( "select" ),
+ opt = select.appendChild( document.createElement( "option" ) );
+
+ input.type = "checkbox";
+
+ // Support: Android <=4.3 only
+ // Default value for a checkbox should be "on"
+ support.checkOn = input.value !== "";
+
+ // Support: IE <=11 only
+ // Must access selectedIndex to make default options select
+ support.optSelected = opt.selected;
+
+ // Support: IE <=11 only
+ // An input loses its value after becoming a radio
+ input = document.createElement( "input" );
+ input.value = "t";
+ input.type = "radio";
+ support.radioValue = input.value === "t";
+} )();
+
+
+var boolHook,
+ attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend( {
+ attr: function( name, value ) {
+ return access( this, jQuery.attr, name, value, arguments.length > 1 );
+ },
+
+ removeAttr: function( name ) {
+ return this.each( function() {
+ jQuery.removeAttr( this, name );
+ } );
+ }
+} );
+
+jQuery.extend( {
+ attr: function( elem, name, value ) {
+ var ret, hooks,
+ nType = elem.nodeType;
+
+ // Don't get/set attributes on text, comment and attribute nodes
+ if ( nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ // Fallback to prop when attributes are not supported
+ if ( typeof elem.getAttribute === "undefined" ) {
+ return jQuery.prop( elem, name, value );
+ }
+
+ // Attribute hooks are determined by the lowercase version
+ // Grab necessary hook if one is defined
+ if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+ hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
+ ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+ }
+
+ if ( value !== undefined ) {
+ if ( value === null ) {
+ jQuery.removeAttr( elem, name );
+ return;
+ }
+
+ if ( hooks && "set" in hooks &&
+ ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+ return ret;
+ }
+
+ elem.setAttribute( name, value + "" );
+ return value;
+ }
+
+ if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+ return ret;
+ }
+
+ ret = jQuery.find.attr( elem, name );
+
+ // Non-existent attributes return null, we normalize to undefined
+ return ret == null ? undefined : ret;
+ },
+
+ attrHooks: {
+ type: {
+ set: function( elem, value ) {
+ if ( !support.radioValue && value === "radio" &&
+ nodeName( elem, "input" ) ) {
+ var val = elem.value;
+ elem.setAttribute( "type", value );
+ if ( val ) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ }
+ },
+
+ removeAttr: function( elem, value ) {
+ var name,
+ i = 0,
+
+ // Attribute names can contain non-HTML whitespace characters
+ // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
+ attrNames = value && value.match( rnothtmlwhite );
+
+ if ( attrNames && elem.nodeType === 1 ) {
+ while ( ( name = attrNames[ i++ ] ) ) {
+ elem.removeAttribute( name );
+ }
+ }
+ }
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+ set: function( elem, value, name ) {
+ if ( value === false ) {
+
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr( elem, name );
+ } else {
+ elem.setAttribute( name, name );
+ }
+ return name;
+ }
+};
+
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+ var getter = attrHandle[ name ] || jQuery.find.attr;
+
+ attrHandle[ name ] = function( elem, name, isXML ) {
+ var ret, handle,
+ lowercaseName = name.toLowerCase();
+
+ if ( !isXML ) {
+
+ // Avoid an infinite loop by temporarily removing this function from the getter
+ handle = attrHandle[ lowercaseName ];
+ attrHandle[ lowercaseName ] = ret;
+ ret = getter( elem, name, isXML ) != null ?
+ lowercaseName :
+ null;
+ attrHandle[ lowercaseName ] = handle;
+ }
+ return ret;
+ };
+} );
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i,
+ rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+ prop: function( name, value ) {
+ return access( this, jQuery.prop, name, value, arguments.length > 1 );
+ },
+
+ removeProp: function( name ) {
+ return this.each( function() {
+ delete this[ jQuery.propFix[ name ] || name ];
+ } );
+ }
+} );
+
+jQuery.extend( {
+ prop: function( elem, name, value ) {
+ var ret, hooks,
+ nType = elem.nodeType;
+
+ // Don't get/set properties on text, comment and attribute nodes
+ if ( nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+ // Fix name and attach hooks
+ name = jQuery.propFix[ name ] || name;
+ hooks = jQuery.propHooks[ name ];
+ }
+
+ if ( value !== undefined ) {
+ if ( hooks && "set" in hooks &&
+ ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+ return ret;
+ }
+
+ return ( elem[ name ] = value );
+ }
+
+ if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+ return ret;
+ }
+
+ return elem[ name ];
+ },
+
+ propHooks: {
+ tabIndex: {
+ get: function( elem ) {
+
+ // Support: IE <=9 - 11 only
+ // elem.tabIndex doesn't always return the
+ // correct value when it hasn't been explicitly set
+ // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+ // Use proper attribute retrieval(#12072)
+ var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+ if ( tabindex ) {
+ return parseInt( tabindex, 10 );
+ }
+
+ if (
+ rfocusable.test( elem.nodeName ) ||
+ rclickable.test( elem.nodeName ) &&
+ elem.href
+ ) {
+ return 0;
+ }
+
+ return -1;
+ }
+ }
+ },
+
+ propFix: {
+ "for": "htmlFor",
+ "class": "className"
+ }
+} );
+
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+// eslint rule "no-unused-expressions" is disabled for this code
+// since it considers such accessions noop
+if ( !support.optSelected ) {
+ jQuery.propHooks.selected = {
+ get: function( elem ) {
+
+ /* eslint no-unused-expressions: "off" */
+
+ var parent = elem.parentNode;
+ if ( parent && parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ return null;
+ },
+ set: function( elem ) {
+
+ /* eslint no-unused-expressions: "off" */
+
+ var parent = elem.parentNode;
+ if ( parent ) {
+ parent.selectedIndex;
+
+ if ( parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ }
+ }
+ };
+}
+
+jQuery.each( [
+ "tabIndex",
+ "readOnly",
+ "maxLength",
+ "cellSpacing",
+ "cellPadding",
+ "rowSpan",
+ "colSpan",
+ "useMap",
+ "frameBorder",
+ "contentEditable"
+], function() {
+ jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+
+
+
+ // Strip and collapse whitespace according to HTML spec
+ // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
+ function stripAndCollapse( value ) {
+ var tokens = value.match( rnothtmlwhite ) || [];
+ return tokens.join( " " );
+ }
+
+
+function getClass( elem ) {
+ return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+function classesToArray( value ) {
+ if ( Array.isArray( value ) ) {
+ return value;
+ }
+ if ( typeof value === "string" ) {
+ return value.match( rnothtmlwhite ) || [];
+ }
+ return [];
+}
+
+jQuery.fn.extend( {
+ addClass: function( value ) {
+ var classes, elem, cur, curValue, clazz, j, finalValue,
+ i = 0;
+
+ if ( isFunction( value ) ) {
+ return this.each( function( j ) {
+ jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+ } );
+ }
+
+ classes = classesToArray( value );
+
+ if ( classes.length ) {
+ while ( ( elem = this[ i++ ] ) ) {
+ curValue = getClass( elem );
+ cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+ if ( cur ) {
+ j = 0;
+ while ( ( clazz = classes[ j++ ] ) ) {
+ if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+ cur += clazz + " ";
+ }
+ }
+
+ // Only assign if different to avoid unneeded rendering.
+ finalValue = stripAndCollapse( cur );
+ if ( curValue !== finalValue ) {
+ elem.setAttribute( "class", finalValue );
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ removeClass: function( value ) {
+ var classes, elem, cur, curValue, clazz, j, finalValue,
+ i = 0;
+
+ if ( isFunction( value ) ) {
+ return this.each( function( j ) {
+ jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+ } );
+ }
+
+ if ( !arguments.length ) {
+ return this.attr( "class", "" );
+ }
+
+ classes = classesToArray( value );
+
+ if ( classes.length ) {
+ while ( ( elem = this[ i++ ] ) ) {
+ curValue = getClass( elem );
+
+ // This expression is here for better compressibility (see addClass)
+ cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+ if ( cur ) {
+ j = 0;
+ while ( ( clazz = classes[ j++ ] ) ) {
+
+ // Remove *all* instances
+ while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+ cur = cur.replace( " " + clazz + " ", " " );
+ }
+ }
+
+ // Only assign if different to avoid unneeded rendering.
+ finalValue = stripAndCollapse( cur );
+ if ( curValue !== finalValue ) {
+ elem.setAttribute( "class", finalValue );
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ toggleClass: function( value, stateVal ) {
+ var type = typeof value,
+ isValidValue = type === "string" || Array.isArray( value );
+
+ if ( typeof stateVal === "boolean" && isValidValue ) {
+ return stateVal ? this.addClass( value ) : this.removeClass( value );
+ }
+
+ if ( isFunction( value ) ) {
+ return this.each( function( i ) {
+ jQuery( this ).toggleClass(
+ value.call( this, i, getClass( this ), stateVal ),
+ stateVal
+ );
+ } );
+ }
+
+ return this.each( function() {
+ var className, i, self, classNames;
+
+ if ( isValidValue ) {
+
+ // Toggle individual class names
+ i = 0;
+ self = jQuery( this );
+ classNames = classesToArray( value );
+
+ while ( ( className = classNames[ i++ ] ) ) {
+
+ // Check each className given, space separated list
+ if ( self.hasClass( className ) ) {
+ self.removeClass( className );
+ } else {
+ self.addClass( className );
+ }
+ }
+
+ // Toggle whole class name
+ } else if ( value === undefined || type === "boolean" ) {
+ className = getClass( this );
+ if ( className ) {
+
+ // Store className if set
+ dataPriv.set( this, "__className__", className );
+ }
+
+ // If the element has a class name or if we're passed `false`,
+ // then remove the whole classname (if there was one, the above saved it).
+ // Otherwise bring back whatever was previously saved (if anything),
+ // falling back to the empty string if nothing was stored.
+ if ( this.setAttribute ) {
+ this.setAttribute( "class",
+ className || value === false ?
+ "" :
+ dataPriv.get( this, "__className__" ) || ""
+ );
+ }
+ }
+ } );
+ },
+
+ hasClass: function( selector ) {
+ var className, elem,
+ i = 0;
+
+ className = " " + selector + " ";
+ while ( ( elem = this[ i++ ] ) ) {
+ if ( elem.nodeType === 1 &&
+ ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+} );
+
+
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend( {
+ val: function( value ) {
+ var hooks, ret, valueIsFunction,
+ elem = this[ 0 ];
+
+ if ( !arguments.length ) {
+ if ( elem ) {
+ hooks = jQuery.valHooks[ elem.type ] ||
+ jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+ if ( hooks &&
+ "get" in hooks &&
+ ( ret = hooks.get( elem, "value" ) ) !== undefined
+ ) {
+ return ret;
+ }
+
+ ret = elem.value;
+
+ // Handle most common string cases
+ if ( typeof ret === "string" ) {
+ return ret.replace( rreturn, "" );
+ }
+
+ // Handle cases where value is null/undef or number
+ return ret == null ? "" : ret;
+ }
+
+ return;
+ }
+
+ valueIsFunction = isFunction( value );
+
+ return this.each( function( i ) {
+ var val;
+
+ if ( this.nodeType !== 1 ) {
+ return;
+ }
+
+ if ( valueIsFunction ) {
+ val = value.call( this, i, jQuery( this ).val() );
+ } else {
+ val = value;
+ }
+
+ // Treat null/undefined as ""; convert numbers to string
+ if ( val == null ) {
+ val = "";
+
+ } else if ( typeof val === "number" ) {
+ val += "";
+
+ } else if ( Array.isArray( val ) ) {
+ val = jQuery.map( val, function( value ) {
+ return value == null ? "" : value + "";
+ } );
+ }
+
+ hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+ // If set returns undefined, fall back to normal setting
+ if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+ this.value = val;
+ }
+ } );
+ }
+} );
+
+jQuery.extend( {
+ valHooks: {
+ option: {
+ get: function( elem ) {
+
+ var val = jQuery.find.attr( elem, "value" );
+ return val != null ?
+ val :
+
+ // Support: IE <=10 - 11 only
+ // option.text throws exceptions (#14686, #14858)
+ // Strip and collapse whitespace
+ // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+ stripAndCollapse( jQuery.text( elem ) );
+ }
+ },
+ select: {
+ get: function( elem ) {
+ var value, option, i,
+ options = elem.options,
+ index = elem.selectedIndex,
+ one = elem.type === "select-one",
+ values = one ? null : [],
+ max = one ? index + 1 : options.length;
+
+ if ( index < 0 ) {
+ i = max;
+
+ } else {
+ i = one ? index : 0;
+ }
+
+ // Loop through all the selected options
+ for ( ; i < max; i++ ) {
+ option = options[ i ];
+
+ // Support: IE <=9 only
+ // IE8-9 doesn't update selected after form reset (#2551)
+ if ( ( option.selected || i === index ) &&
+
+ // Don't return options that are disabled or in a disabled optgroup
+ !option.disabled &&
+ ( !option.parentNode.disabled ||
+ !nodeName( option.parentNode, "optgroup" ) ) ) {
+
+ // Get the specific value for the option
+ value = jQuery( option ).val();
+
+ // We don't need an array for one selects
+ if ( one ) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ return values;
+ },
+
+ set: function( elem, value ) {
+ var optionSet, option,
+ options = elem.options,
+ values = jQuery.makeArray( value ),
+ i = options.length;
+
+ while ( i-- ) {
+ option = options[ i ];
+
+ /* eslint-disable no-cond-assign */
+
+ if ( option.selected =
+ jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+ ) {
+ optionSet = true;
+ }
+
+ /* eslint-enable no-cond-assign */
+ }
+
+ // Force browsers to behave consistently when non-matching value is set
+ if ( !optionSet ) {
+ elem.selectedIndex = -1;
+ }
+ return values;
+ }
+ }
+ }
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = {
+ set: function( elem, value ) {
+ if ( Array.isArray( value ) ) {
+ return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+ }
+ }
+ };
+ if ( !support.checkOn ) {
+ jQuery.valHooks[ this ].get = function( elem ) {
+ return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+ };
+ }
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+support.focusin = "onfocusin" in window;
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+ stopPropagationCallback = function( e ) {
+ e.stopPropagation();
+ };
+
+jQuery.extend( jQuery.event, {
+
+ trigger: function( event, data, elem, onlyHandlers ) {
+
+ var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
+ eventPath = [ elem || document ],
+ type = hasOwn.call( event, "type" ) ? event.type : event,
+ namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+ cur = lastElement = tmp = elem = elem || document;
+
+ // Don't do events on text and comment nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ // focus/blur morphs to focusin/out; ensure we're not firing them right now
+ if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+ return;
+ }
+
+ if ( type.indexOf( "." ) > -1 ) {
+
+ // Namespaced trigger; create a regexp to match event type in handle()
+ namespaces = type.split( "." );
+ type = namespaces.shift();
+ namespaces.sort();
+ }
+ ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+ // Caller can pass in a jQuery.Event object, Object, or just an event type string
+ event = event[ jQuery.expando ] ?
+ event :
+ new jQuery.Event( type, typeof event === "object" && event );
+
+ // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+ event.isTrigger = onlyHandlers ? 2 : 3;
+ event.namespace = namespaces.join( "." );
+ event.rnamespace = event.namespace ?
+ new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+ null;
+
+ // Clean up the event in case it is being reused
+ event.result = undefined;
+ if ( !event.target ) {
+ event.target = elem;
+ }
+
+ // Clone any incoming data and prepend the event, creating the handler arg list
+ data = data == null ?
+ [ event ] :
+ jQuery.makeArray( data, [ event ] );
+
+ // Allow special events to draw outside the lines
+ special = jQuery.event.special[ type ] || {};
+ if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+ return;
+ }
+
+ // Determine event propagation path in advance, per W3C events spec (#9951)
+ // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+ if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
+
+ bubbleType = special.delegateType || type;
+ if ( !rfocusMorph.test( bubbleType + type ) ) {
+ cur = cur.parentNode;
+ }
+ for ( ; cur; cur = cur.parentNode ) {
+ eventPath.push( cur );
+ tmp = cur;
+ }
+
+ // Only add window if we got to document (e.g., not plain obj or detached DOM)
+ if ( tmp === ( elem.ownerDocument || document ) ) {
+ eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+ }
+ }
+
+ // Fire handlers on the event path
+ i = 0;
+ while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+ lastElement = cur;
+ event.type = i > 1 ?
+ bubbleType :
+ special.bindType || type;
+
+ // jQuery handler
+ handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
+ dataPriv.get( cur, "handle" );
+ if ( handle ) {
+ handle.apply( cur, data );
+ }
+
+ // Native handler
+ handle = ontype && cur[ ontype ];
+ if ( handle && handle.apply && acceptData( cur ) ) {
+ event.result = handle.apply( cur, data );
+ if ( event.result === false ) {
+ event.preventDefault();
+ }
+ }
+ }
+ event.type = type;
+
+ // If nobody prevented the default action, do it now
+ if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+ if ( ( !special._default ||
+ special._default.apply( eventPath.pop(), data ) === false ) &&
+ acceptData( elem ) ) {
+
+ // Call a native DOM method on the target with the same name as the event.
+ // Don't do default actions on window, that's where global variables be (#6170)
+ if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
+
+ // Don't re-trigger an onFOO event when we call its FOO() method
+ tmp = elem[ ontype ];
+
+ if ( tmp ) {
+ elem[ ontype ] = null;
+ }
+
+ // Prevent re-triggering of the same event, since we already bubbled it above
+ jQuery.event.triggered = type;
+
+ if ( event.isPropagationStopped() ) {
+ lastElement.addEventListener( type, stopPropagationCallback );
+ }
+
+ elem[ type ]();
+
+ if ( event.isPropagationStopped() ) {
+ lastElement.removeEventListener( type, stopPropagationCallback );
+ }
+
+ jQuery.event.triggered = undefined;
+
+ if ( tmp ) {
+ elem[ ontype ] = tmp;
+ }
+ }
+ }
+ }
+
+ return event.result;
+ },
+
+ // Piggyback on a donor event to simulate a different one
+ // Used only for `focus(in | out)` events
+ simulate: function( type, elem, event ) {
+ var e = jQuery.extend(
+ new jQuery.Event(),
+ event,
+ {
+ type: type,
+ isSimulated: true
+ }
+ );
+
+ jQuery.event.trigger( e, null, elem );
+ }
+
+} );
+
+jQuery.fn.extend( {
+
+ trigger: function( type, data ) {
+ return this.each( function() {
+ jQuery.event.trigger( type, data, this );
+ } );
+ },
+ triggerHandler: function( type, data ) {
+ var elem = this[ 0 ];
+ if ( elem ) {
+ return jQuery.event.trigger( type, data, elem, true );
+ }
+ }
+} );
+
+
+// Support: Firefox <=44
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+ jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+ // Attach a single capturing handler on the document while someone wants focusin/focusout
+ var handler = function( event ) {
+ jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+ };
+
+ jQuery.event.special[ fix ] = {
+ setup: function() {
+ var doc = this.ownerDocument || this,
+ attaches = dataPriv.access( doc, fix );
+
+ if ( !attaches ) {
+ doc.addEventListener( orig, handler, true );
+ }
+ dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+ },
+ teardown: function() {
+ var doc = this.ownerDocument || this,
+ attaches = dataPriv.access( doc, fix ) - 1;
+
+ if ( !attaches ) {
+ doc.removeEventListener( orig, handler, true );
+ dataPriv.remove( doc, fix );
+
+ } else {
+ dataPriv.access( doc, fix, attaches );
+ }
+ }
+ };
+ } );
+}
+var location = window.location;
+
+var nonce = Date.now();
+
+var rquery = ( /\?/ );
+
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+ var xml;
+ if ( !data || typeof data !== "string" ) {
+ return null;
+ }
+
+ // Support: IE 9 - 11 only
+ // IE throws on parseFromString with invalid input.
+ try {
+ xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+ } catch ( e ) {
+ xml = undefined;
+ }
+
+ if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+ jQuery.error( "Invalid XML: " + data );
+ }
+ return xml;
+};
+
+
+var
+ rbracket = /\[\]$/,
+ rCRLF = /\r?\n/g,
+ rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+ rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+ var name;
+
+ if ( Array.isArray( obj ) ) {
+
+ // Serialize array item.
+ jQuery.each( obj, function( i, v ) {
+ if ( traditional || rbracket.test( prefix ) ) {
+
+ // Treat each array item as a scalar.
+ add( prefix, v );
+
+ } else {
+
+ // Item is non-scalar (array or object), encode its numeric index.
+ buildParams(
+ prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+ v,
+ traditional,
+ add
+ );
+ }
+ } );
+
+ } else if ( !traditional && toType( obj ) === "object" ) {
+
+ // Serialize object item.
+ for ( name in obj ) {
+ buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+ }
+
+ } else {
+
+ // Serialize scalar item.
+ add( prefix, obj );
+ }
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+ var prefix,
+ s = [],
+ add = function( key, valueOrFunction ) {
+
+ // If value is a function, invoke it and use its return value
+ var value = isFunction( valueOrFunction ) ?
+ valueOrFunction() :
+ valueOrFunction;
+
+ s[ s.length ] = encodeURIComponent( key ) + "=" +
+ encodeURIComponent( value == null ? "" : value );
+ };
+
+ // If an array was passed in, assume that it is an array of form elements.
+ if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+ // Serialize the form elements
+ jQuery.each( a, function() {
+ add( this.name, this.value );
+ } );
+
+ } else {
+
+ // If traditional, encode the "old" way (the way 1.3.2 or older
+ // did it), otherwise encode params recursively.
+ for ( prefix in a ) {
+ buildParams( prefix, a[ prefix ], traditional, add );
+ }
+ }
+
+ // Return the resulting serialization
+ return s.join( "&" );
+};
+
+jQuery.fn.extend( {
+ serialize: function() {
+ return jQuery.param( this.serializeArray() );
+ },
+ serializeArray: function() {
+ return this.map( function() {
+
+ // Can add propHook for "elements" to filter or add form elements
+ var elements = jQuery.prop( this, "elements" );
+ return elements ? jQuery.makeArray( elements ) : this;
+ } )
+ .filter( function() {
+ var type = this.type;
+
+ // Use .is( ":disabled" ) so that fieldset[disabled] works
+ return this.name && !jQuery( this ).is( ":disabled" ) &&
+ rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+ ( this.checked || !rcheckableType.test( type ) );
+ } )
+ .map( function( i, elem ) {
+ var val = jQuery( this ).val();
+
+ if ( val == null ) {
+ return null;
+ }
+
+ if ( Array.isArray( val ) ) {
+ return jQuery.map( val, function( val ) {
+ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ } );
+ }
+
+ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ } ).get();
+ }
+} );
+
+
+var
+ r20 = /%20/g,
+ rhash = /#.*$/,
+ rantiCache = /([?&])_=[^&]*/,
+ rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
+ // #7653, #8125, #8152: local protocol detection
+ rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+ rnoContent = /^(?:GET|HEAD)$/,
+ rprotocol = /^\/\//,
+
+ /* Prefilters
+ * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+ * 2) These are called:
+ * - BEFORE asking for a transport
+ * - AFTER param serialization (s.data is a string if s.processData is true)
+ * 3) key is the dataType
+ * 4) the catchall symbol "*" can be used
+ * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+ */
+ prefilters = {},
+
+ /* Transports bindings
+ * 1) key is the dataType
+ * 2) the catchall symbol "*" can be used
+ * 3) selection will start with transport dataType and THEN go to "*" if needed
+ */
+ transports = {},
+
+ // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+ allTypes = "*/".concat( "*" ),
+
+ // Anchor tag for parsing the document origin
+ originAnchor = document.createElement( "a" );
+ originAnchor.href = location.href;
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+ // dataTypeExpression is optional and defaults to "*"
+ return function( dataTypeExpression, func ) {
+
+ if ( typeof dataTypeExpression !== "string" ) {
+ func = dataTypeExpression;
+ dataTypeExpression = "*";
+ }
+
+ var dataType,
+ i = 0,
+ dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
+
+ if ( isFunction( func ) ) {
+
+ // For each dataType in the dataTypeExpression
+ while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+ // Prepend if requested
+ if ( dataType[ 0 ] === "+" ) {
+ dataType = dataType.slice( 1 ) || "*";
+ ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+ // Otherwise append
+ } else {
+ ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+ }
+ }
+ }
+ };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+ var inspected = {},
+ seekingTransport = ( structure === transports );
+
+ function inspect( dataType ) {
+ var selected;
+ inspected[ dataType ] = true;
+ jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+ var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+ if ( typeof dataTypeOrTransport === "string" &&
+ !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+ options.dataTypes.unshift( dataTypeOrTransport );
+ inspect( dataTypeOrTransport );
+ return false;
+ } else if ( seekingTransport ) {
+ return !( selected = dataTypeOrTransport );
+ }
+ } );
+ return selected;
+ }
+
+ return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+ var key, deep,
+ flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+ for ( key in src ) {
+ if ( src[ key ] !== undefined ) {
+ ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+ }
+ }
+ if ( deep ) {
+ jQuery.extend( true, target, deep );
+ }
+
+ return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+ var ct, type, finalDataType, firstDataType,
+ contents = s.contents,
+ dataTypes = s.dataTypes;
+
+ // Remove auto dataType and get content-type in the process
+ while ( dataTypes[ 0 ] === "*" ) {
+ dataTypes.shift();
+ if ( ct === undefined ) {
+ ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+ }
+ }
+
+ // Check if we're dealing with a known content-type
+ if ( ct ) {
+ for ( type in contents ) {
+ if ( contents[ type ] && contents[ type ].test( ct ) ) {
+ dataTypes.unshift( type );
+ break;
+ }
+ }
+ }
+
+ // Check to see if we have a response for the expected dataType
+ if ( dataTypes[ 0 ] in responses ) {
+ finalDataType = dataTypes[ 0 ];
+ } else {
+
+ // Try convertible dataTypes
+ for ( type in responses ) {
+ if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+ finalDataType = type;
+ break;
+ }
+ if ( !firstDataType ) {
+ firstDataType = type;
+ }
+ }
+
+ // Or just use first one
+ finalDataType = finalDataType || firstDataType;
+ }
+
+ // If we found a dataType
+ // We add the dataType to the list if needed
+ // and return the corresponding response
+ if ( finalDataType ) {
+ if ( finalDataType !== dataTypes[ 0 ] ) {
+ dataTypes.unshift( finalDataType );
+ }
+ return responses[ finalDataType ];
+ }
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+ var conv2, current, conv, tmp, prev,
+ converters = {},
+
+ // Work with a copy of dataTypes in case we need to modify it for conversion
+ dataTypes = s.dataTypes.slice();
+
+ // Create converters map with lowercased keys
+ if ( dataTypes[ 1 ] ) {
+ for ( conv in s.converters ) {
+ converters[ conv.toLowerCase() ] = s.converters[ conv ];
+ }
+ }
+
+ current = dataTypes.shift();
+
+ // Convert to each sequential dataType
+ while ( current ) {
+
+ if ( s.responseFields[ current ] ) {
+ jqXHR[ s.responseFields[ current ] ] = response;
+ }
+
+ // Apply the dataFilter if provided
+ if ( !prev && isSuccess && s.dataFilter ) {
+ response = s.dataFilter( response, s.dataType );
+ }
+
+ prev = current;
+ current = dataTypes.shift();
+
+ if ( current ) {
+
+ // There's only work to do if current dataType is non-auto
+ if ( current === "*" ) {
+
+ current = prev;
+
+ // Convert response if prev dataType is non-auto and differs from current
+ } else if ( prev !== "*" && prev !== current ) {
+
+ // Seek a direct converter
+ conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+ // If none found, seek a pair
+ if ( !conv ) {
+ for ( conv2 in converters ) {
+
+ // If conv2 outputs current
+ tmp = conv2.split( " " );
+ if ( tmp[ 1 ] === current ) {
+
+ // If prev can be converted to accepted input
+ conv = converters[ prev + " " + tmp[ 0 ] ] ||
+ converters[ "* " + tmp[ 0 ] ];
+ if ( conv ) {
+
+ // Condense equivalence converters
+ if ( conv === true ) {
+ conv = converters[ conv2 ];
+
+ // Otherwise, insert the intermediate dataType
+ } else if ( converters[ conv2 ] !== true ) {
+ current = tmp[ 0 ];
+ dataTypes.unshift( tmp[ 1 ] );
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ // Apply converter (if not an equivalence)
+ if ( conv !== true ) {
+
+ // Unless errors are allowed to bubble, catch and return them
+ if ( conv && s.throws ) {
+ response = conv( response );
+ } else {
+ try {
+ response = conv( response );
+ } catch ( e ) {
+ return {
+ state: "parsererror",
+ error: conv ? e : "No conversion from " + prev + " to " + current
+ };
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+ // Counter for holding the number of active queries
+ active: 0,
+
+ // Last-Modified header cache for next request
+ lastModified: {},
+ etag: {},
+
+ ajaxSettings: {
+ url: location.href,
+ type: "GET",
+ isLocal: rlocalProtocol.test( location.protocol ),
+ global: true,
+ processData: true,
+ async: true,
+ contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+
+ /*
+ timeout: 0,
+ data: null,
+ dataType: null,
+ username: null,
+ password: null,
+ cache: null,
+ throws: false,
+ traditional: false,
+ headers: {},
+ */
+
+ accepts: {
+ "*": allTypes,
+ text: "text/plain",
+ html: "text/html",
+ xml: "application/xml, text/xml",
+ json: "application/json, text/javascript"
+ },
+
+ contents: {
+ xml: /\bxml\b/,
+ html: /\bhtml/,
+ json: /\bjson\b/
+ },
+
+ responseFields: {
+ xml: "responseXML",
+ text: "responseText",
+ json: "responseJSON"
+ },
+
+ // Data converters
+ // Keys separate source (or catchall "*") and destination types with a single space
+ converters: {
+
+ // Convert anything to text
+ "* text": String,
+
+ // Text to html (true = no transformation)
+ "text html": true,
+
+ // Evaluate text as a json expression
+ "text json": JSON.parse,
+
+ // Parse text as xml
+ "text xml": jQuery.parseXML
+ },
+
+ // For options that shouldn't be deep extended:
+ // you can add your own custom options here if
+ // and when you create one that shouldn't be
+ // deep extended (see ajaxExtend)
+ flatOptions: {
+ url: true,
+ context: true
+ }
+ },
+
+ // Creates a full fledged settings object into target
+ // with both ajaxSettings and settings fields.
+ // If target is omitted, writes into ajaxSettings.
+ ajaxSetup: function( target, settings ) {
+ return settings ?
+
+ // Building a settings object
+ ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+ // Extending ajaxSettings
+ ajaxExtend( jQuery.ajaxSettings, target );
+ },
+
+ ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+ ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+ // Main method
+ ajax: function( url, options ) {
+
+ // If url is an object, simulate pre-1.5 signature
+ if ( typeof url === "object" ) {
+ options = url;
+ url = undefined;
+ }
+
+ // Force options to be an object
+ options = options || {};
+
+ var transport,
+
+ // URL without anti-cache param
+ cacheURL,
+
+ // Response headers
+ responseHeadersString,
+ responseHeaders,
+
+ // timeout handle
+ timeoutTimer,
+
+ // Url cleanup var
+ urlAnchor,
+
+ // Request state (becomes false upon send and true upon completion)
+ completed,
+
+ // To know if global events are to be dispatched
+ fireGlobals,
+
+ // Loop variable
+ i,
+
+ // uncached part of the url
+ uncached,
+
+ // Create the final options object
+ s = jQuery.ajaxSetup( {}, options ),
+
+ // Callbacks context
+ callbackContext = s.context || s,
+
+ // Context for global events is callbackContext if it is a DOM node or jQuery collection
+ globalEventContext = s.context &&
+ ( callbackContext.nodeType || callbackContext.jquery ) ?
+ jQuery( callbackContext ) :
+ jQuery.event,
+
+ // Deferreds
+ deferred = jQuery.Deferred(),
+ completeDeferred = jQuery.Callbacks( "once memory" ),
+
+ // Status-dependent callbacks
+ statusCode = s.statusCode || {},
+
+ // Headers (they are sent all at once)
+ requestHeaders = {},
+ requestHeadersNames = {},
+
+ // Default abort message
+ strAbort = "canceled",
+
+ // Fake xhr
+ jqXHR = {
+ readyState: 0,
+
+ // Builds headers hashtable if needed
+ getResponseHeader: function( key ) {
+ var match;
+ if ( completed ) {
+ if ( !responseHeaders ) {
+ responseHeaders = {};
+ while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+ responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
+ }
+ }
+ match = responseHeaders[ key.toLowerCase() ];
+ }
+ return match == null ? null : match;
+ },
+
+ // Raw string
+ getAllResponseHeaders: function() {
+ return completed ? responseHeadersString : null;
+ },
+
+ // Caches the header
+ setRequestHeader: function( name, value ) {
+ if ( completed == null ) {
+ name = requestHeadersNames[ name.toLowerCase() ] =
+ requestHeadersNames[ name.toLowerCase() ] || name;
+ requestHeaders[ name ] = value;
+ }
+ return this;
+ },
+
+ // Overrides response content-type header
+ overrideMimeType: function( type ) {
+ if ( completed == null ) {
+ s.mimeType = type;
+ }
+ return this;
+ },
+
+ // Status-dependent callbacks
+ statusCode: function( map ) {
+ var code;
+ if ( map ) {
+ if ( completed ) {
+
+ // Execute the appropriate callbacks
+ jqXHR.always( map[ jqXHR.status ] );
+ } else {
+
+ // Lazy-add the new callbacks in a way that preserves old ones
+ for ( code in map ) {
+ statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+ }
+ }
+ }
+ return this;
+ },
+
+ // Cancel the request
+ abort: function( statusText ) {
+ var finalText = statusText || strAbort;
+ if ( transport ) {
+ transport.abort( finalText );
+ }
+ done( 0, finalText );
+ return this;
+ }
+ };
+
+ // Attach deferreds
+ deferred.promise( jqXHR );
+
+ // Add protocol if not provided (prefilters might expect it)
+ // Handle falsy url in the settings object (#10093: consistency with old signature)
+ // We also use the url parameter if available
+ s.url = ( ( url || s.url || location.href ) + "" )
+ .replace( rprotocol, location.protocol + "//" );
+
+ // Alias method option to type as per ticket #12004
+ s.type = options.method || options.type || s.method || s.type;
+
+ // Extract dataTypes list
+ s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
+
+ // A cross-domain request is in order when the origin doesn't match the current origin.
+ if ( s.crossDomain == null ) {
+ urlAnchor = document.createElement( "a" );
+
+ // Support: IE <=8 - 11, Edge 12 - 15
+ // IE throws exception on accessing the href property if url is malformed,
+ // e.g. http://example.com:80x/
+ try {
+ urlAnchor.href = s.url;
+
+ // Support: IE <=8 - 11 only
+ // Anchor's host property isn't correctly set when s.url is relative
+ urlAnchor.href = urlAnchor.href;
+ s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+ urlAnchor.protocol + "//" + urlAnchor.host;
+ } catch ( e ) {
+
+ // If there is an error parsing the URL, assume it is crossDomain,
+ // it can be rejected by the transport if it is invalid
+ s.crossDomain = true;
+ }
+ }
+
+ // Convert data if not already a string
+ if ( s.data && s.processData && typeof s.data !== "string" ) {
+ s.data = jQuery.param( s.data, s.traditional );
+ }
+
+ // Apply prefilters
+ inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+ // If request was aborted inside a prefilter, stop there
+ if ( completed ) {
+ return jqXHR;
+ }
+
+ // We can fire global events as of now if asked to
+ // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+ fireGlobals = jQuery.event && s.global;
+
+ // Watch for a new set of requests
+ if ( fireGlobals && jQuery.active++ === 0 ) {
+ jQuery.event.trigger( "ajaxStart" );
+ }
+
+ // Uppercase the type
+ s.type = s.type.toUpperCase();
+
+ // Determine if request has content
+ s.hasContent = !rnoContent.test( s.type );
+
+ // Save the URL in case we're toying with the If-Modified-Since
+ // and/or If-None-Match header later on
+ // Remove hash to simplify url manipulation
+ cacheURL = s.url.replace( rhash, "" );
+
+ // More options handling for requests with no content
+ if ( !s.hasContent ) {
+
+ // Remember the hash so we can put it back
+ uncached = s.url.slice( cacheURL.length );
+
+ // If data is available and should be processed, append data to url
+ if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
+ cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
+
+ // #9682: remove data so that it's not used in an eventual retry
+ delete s.data;
+ }
+
+ // Add or update anti-cache param if needed
+ if ( s.cache === false ) {
+ cacheURL = cacheURL.replace( rantiCache, "$1" );
+ uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
+ }
+
+ // Put hash and anti-cache on the URL that will be requested (gh-1732)
+ s.url = cacheURL + uncached;
+
+ // Change '%20' to '+' if this is encoded form body content (gh-2658)
+ } else if ( s.data && s.processData &&
+ ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
+ s.data = s.data.replace( r20, "+" );
+ }
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ if ( jQuery.lastModified[ cacheURL ] ) {
+ jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+ }
+ if ( jQuery.etag[ cacheURL ] ) {
+ jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+ }
+ }
+
+ // Set the correct header, if data is being sent
+ if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+ jqXHR.setRequestHeader( "Content-Type", s.contentType );
+ }
+
+ // Set the Accepts header for the server, depending on the dataType
+ jqXHR.setRequestHeader(
+ "Accept",
+ s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+ s.accepts[ s.dataTypes[ 0 ] ] +
+ ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+ s.accepts[ "*" ]
+ );
+
+ // Check for headers option
+ for ( i in s.headers ) {
+ jqXHR.setRequestHeader( i, s.headers[ i ] );
+ }
+
+ // Allow custom headers/mimetypes and early abort
+ if ( s.beforeSend &&
+ ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
+
+ // Abort if not done already and return
+ return jqXHR.abort();
+ }
+
+ // Aborting is no longer a cancellation
+ strAbort = "abort";
+
+ // Install callbacks on deferreds
+ completeDeferred.add( s.complete );
+ jqXHR.done( s.success );
+ jqXHR.fail( s.error );
+
+ // Get transport
+ transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+ // If no transport, we auto-abort
+ if ( !transport ) {
+ done( -1, "No Transport" );
+ } else {
+ jqXHR.readyState = 1;
+
+ // Send global event
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+ }
+
+ // If request was aborted inside ajaxSend, stop there
+ if ( completed ) {
+ return jqXHR;
+ }
+
+ // Timeout
+ if ( s.async && s.timeout > 0 ) {
+ timeoutTimer = window.setTimeout( function() {
+ jqXHR.abort( "timeout" );
+ }, s.timeout );
+ }
+
+ try {
+ completed = false;
+ transport.send( requestHeaders, done );
+ } catch ( e ) {
+
+ // Rethrow post-completion exceptions
+ if ( completed ) {
+ throw e;
+ }
+
+ // Propagate others as results
+ done( -1, e );
+ }
+ }
+
+ // Callback for when everything is done
+ function done( status, nativeStatusText, responses, headers ) {
+ var isSuccess, success, error, response, modified,
+ statusText = nativeStatusText;
+
+ // Ignore repeat invocations
+ if ( completed ) {
+ return;
+ }
+
+ completed = true;
+
+ // Clear timeout if it exists
+ if ( timeoutTimer ) {
+ window.clearTimeout( timeoutTimer );
+ }
+
+ // Dereference transport for early garbage collection
+ // (no matter how long the jqXHR object will be used)
+ transport = undefined;
+
+ // Cache response headers
+ responseHeadersString = headers || "";
+
+ // Set readyState
+ jqXHR.readyState = status > 0 ? 4 : 0;
+
+ // Determine if successful
+ isSuccess = status >= 200 && status < 300 || status === 304;
+
+ // Get response data
+ if ( responses ) {
+ response = ajaxHandleResponses( s, jqXHR, responses );
+ }
+
+ // Convert no matter what (that way responseXXX fields are always set)
+ response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+ // If successful, handle type chaining
+ if ( isSuccess ) {
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ modified = jqXHR.getResponseHeader( "Last-Modified" );
+ if ( modified ) {
+ jQuery.lastModified[ cacheURL ] = modified;
+ }
+ modified = jqXHR.getResponseHeader( "etag" );
+ if ( modified ) {
+ jQuery.etag[ cacheURL ] = modified;
+ }
+ }
+
+ // if no content
+ if ( status === 204 || s.type === "HEAD" ) {
+ statusText = "nocontent";
+
+ // if not modified
+ } else if ( status === 304 ) {
+ statusText = "notmodified";
+
+ // If we have data, let's convert it
+ } else {
+ statusText = response.state;
+ success = response.data;
+ error = response.error;
+ isSuccess = !error;
+ }
+ } else {
+
+ // Extract error from statusText and normalize for non-aborts
+ error = statusText;
+ if ( status || !statusText ) {
+ statusText = "error";
+ if ( status < 0 ) {
+ status = 0;
+ }
+ }
+ }
+
+ // Set data for the fake xhr object
+ jqXHR.status = status;
+ jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+ // Success/Error
+ if ( isSuccess ) {
+ deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+ } else {
+ deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+ }
+
+ // Status-dependent callbacks
+ jqXHR.statusCode( statusCode );
+ statusCode = undefined;
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+ [ jqXHR, s, isSuccess ? success : error ] );
+ }
+
+ // Complete
+ completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+ // Handle the global AJAX counter
+ if ( !( --jQuery.active ) ) {
+ jQuery.event.trigger( "ajaxStop" );
+ }
+ }
+ }
+
+ return jqXHR;
+ },
+
+ getJSON: function( url, data, callback ) {
+ return jQuery.get( url, data, callback, "json" );
+ },
+
+ getScript: function( url, callback ) {
+ return jQuery.get( url, undefined, callback, "script" );
+ }
+} );
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+ jQuery[ method ] = function( url, data, callback, type ) {
+
+ // Shift arguments if data argument was omitted
+ if ( isFunction( data ) ) {
+ type = type || callback;
+ callback = data;
+ data = undefined;
+ }
+
+ // The url can be an options object (which then must have .url)
+ return jQuery.ajax( jQuery.extend( {
+ url: url,
+ type: method,
+ dataType: type,
+ data: data,
+ success: callback
+ }, jQuery.isPlainObject( url ) && url ) );
+ };
+} );
+
+
+jQuery._evalUrl = function( url ) {
+ return jQuery.ajax( {
+ url: url,
+
+ // Make this explicit, since user can override this through ajaxSetup (#11264)
+ type: "GET",
+ dataType: "script",
+ cache: true,
+ async: false,
+ global: false,
+ "throws": true
+ } );
+};
+
+
+jQuery.fn.extend( {
+ wrapAll: function( html ) {
+ var wrap;
+
+ if ( this[ 0 ] ) {
+ if ( isFunction( html ) ) {
+ html = html.call( this[ 0 ] );
+ }
+
+ // The elements to wrap the target around
+ wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+ if ( this[ 0 ].parentNode ) {
+ wrap.insertBefore( this[ 0 ] );
+ }
+
+ wrap.map( function() {
+ var elem = this;
+
+ while ( elem.firstElementChild ) {
+ elem = elem.firstElementChild;
+ }
+
+ return elem;
+ } ).append( this );
+ }
+
+ return this;
+ },
+
+ wrapInner: function( html ) {
+ if ( isFunction( html ) ) {
+ return this.each( function( i ) {
+ jQuery( this ).wrapInner( html.call( this, i ) );
+ } );
+ }
+
+ return this.each( function() {
+ var self = jQuery( this ),
+ contents = self.contents();
+
+ if ( contents.length ) {
+ contents.wrapAll( html );
+
+ } else {
+ self.append( html );
+ }
+ } );
+ },
+
+ wrap: function( html ) {
+ var htmlIsFunction = isFunction( html );
+
+ return this.each( function( i ) {
+ jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
+ } );
+ },
+
+ unwrap: function( selector ) {
+ this.parent( selector ).not( "body" ).each( function() {
+ jQuery( this ).replaceWith( this.childNodes );
+ } );
+ return this;
+ }
+} );
+
+
+jQuery.expr.pseudos.hidden = function( elem ) {
+ return !jQuery.expr.pseudos.visible( elem );
+};
+jQuery.expr.pseudos.visible = function( elem ) {
+ return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
+};
+
+
+
+
+jQuery.ajaxSettings.xhr = function() {
+ try {
+ return new window.XMLHttpRequest();
+ } catch ( e ) {}
+};
+
+var xhrSuccessStatus = {
+
+ // File protocol always yields status code 0, assume 200
+ 0: 200,
+
+ // Support: IE <=9 only
+ // #1450: sometimes IE returns 1223 when it should be 204
+ 1223: 204
+ },
+ xhrSupported = jQuery.ajaxSettings.xhr();
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport( function( options ) {
+ var callback, errorCallback;
+
+ // Cross domain only allowed if supported through XMLHttpRequest
+ if ( support.cors || xhrSupported && !options.crossDomain ) {
+ return {
+ send: function( headers, complete ) {
+ var i,
+ xhr = options.xhr();
+
+ xhr.open(
+ options.type,
+ options.url,
+ options.async,
+ options.username,
+ options.password
+ );
+
+ // Apply custom fields if provided
+ if ( options.xhrFields ) {
+ for ( i in options.xhrFields ) {
+ xhr[ i ] = options.xhrFields[ i ];
+ }
+ }
+
+ // Override mime type if needed
+ if ( options.mimeType && xhr.overrideMimeType ) {
+ xhr.overrideMimeType( options.mimeType );
+ }
+
+ // X-Requested-With header
+ // For cross-domain requests, seeing as conditions for a preflight are
+ // akin to a jigsaw puzzle, we simply never set it to be sure.
+ // (it can always be set on a per-request basis or even using ajaxSetup)
+ // For same-domain requests, won't change header if already provided.
+ if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+ headers[ "X-Requested-With" ] = "XMLHttpRequest";
+ }
+
+ // Set headers
+ for ( i in headers ) {
+ xhr.setRequestHeader( i, headers[ i ] );
+ }
+
+ // Callback
+ callback = function( type ) {
+ return function() {
+ if ( callback ) {
+ callback = errorCallback = xhr.onload =
+ xhr.onerror = xhr.onabort = xhr.ontimeout =
+ xhr.onreadystatechange = null;
+
+ if ( type === "abort" ) {
+ xhr.abort();
+ } else if ( type === "error" ) {
+
+ // Support: IE <=9 only
+ // On a manual native abort, IE9 throws
+ // errors on any property access that is not readyState
+ if ( typeof xhr.status !== "number" ) {
+ complete( 0, "error" );
+ } else {
+ complete(
+
+ // File: protocol always yields status 0; see #8605, #14207
+ xhr.status,
+ xhr.statusText
+ );
+ }
+ } else {
+ complete(
+ xhrSuccessStatus[ xhr.status ] || xhr.status,
+ xhr.statusText,
+
+ // Support: IE <=9 only
+ // IE9 has no XHR2 but throws on binary (trac-11426)
+ // For XHR2 non-text, let the caller handle it (gh-2498)
+ ( xhr.responseType || "text" ) !== "text" ||
+ typeof xhr.responseText !== "string" ?
+ { binary: xhr.response } :
+ { text: xhr.responseText },
+ xhr.getAllResponseHeaders()
+ );
+ }
+ }
+ };
+ };
+
+ // Listen to events
+ xhr.onload = callback();
+ errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
+
+ // Support: IE 9 only
+ // Use onreadystatechange to replace onabort
+ // to handle uncaught aborts
+ if ( xhr.onabort !== undefined ) {
+ xhr.onabort = errorCallback;
+ } else {
+ xhr.onreadystatechange = function() {
+
+ // Check readyState before timeout as it changes
+ if ( xhr.readyState === 4 ) {
+
+ // Allow onerror to be called first,
+ // but that will not handle a native abort
+ // Also, save errorCallback to a variable
+ // as xhr.onerror cannot be accessed
+ window.setTimeout( function() {
+ if ( callback ) {
+ errorCallback();
+ }
+ } );
+ }
+ };
+ }
+
+ // Create the abort callback
+ callback = callback( "abort" );
+
+ try {
+
+ // Do send the request (this may raise an exception)
+ xhr.send( options.hasContent && options.data || null );
+ } catch ( e ) {
+
+ // #14683: Only rethrow if this hasn't been notified as an error yet
+ if ( callback ) {
+ throw e;
+ }
+ }
+ },
+
+ abort: function() {
+ if ( callback ) {
+ callback();
+ }
+ }
+ };
+ }
+} );
+
+
+
+
+// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
+jQuery.ajaxPrefilter( function( s ) {
+ if ( s.crossDomain ) {
+ s.contents.script = false;
+ }
+} );
+
+// Install script dataType
+jQuery.ajaxSetup( {
+ accepts: {
+ script: "text/javascript, application/javascript, " +
+ "application/ecmascript, application/x-ecmascript"
+ },
+ contents: {
+ script: /\b(?:java|ecma)script\b/
+ },
+ converters: {
+ "text script": function( text ) {
+ jQuery.globalEval( text );
+ return text;
+ }
+ }
+} );
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+ if ( s.cache === undefined ) {
+ s.cache = false;
+ }
+ if ( s.crossDomain ) {
+ s.type = "GET";
+ }
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+ // This transport only deals with cross domain requests
+ if ( s.crossDomain ) {
+ var script, callback;
+ return {
+ send: function( _, complete ) {
+ script = jQuery( "<script>" ).prop( {
+ charset: s.scriptCharset,
+ src: s.url
+ } ).on(
+ "load error",
+ callback = function( evt ) {
+ script.remove();
+ callback = null;
+ if ( evt ) {
+ complete( evt.type === "error" ? 404 : 200, evt.type );
+ }
+ }
+ );
+
+ // Use native DOM manipulation to avoid our domManip AJAX trickery
+ document.head.appendChild( script[ 0 ] );
+ },
+ abort: function() {
+ if ( callback ) {
+ callback();
+ }
+ }
+ };
+ }
+} );
+
+
+
+
+var oldCallbacks = [],
+ rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+ jsonp: "callback",
+ jsonpCallback: function() {
+ var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+ this[ callback ] = true;
+ return callback;
+ }
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+ var callbackName, overwritten, responseContainer,
+ jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+ "url" :
+ typeof s.data === "string" &&
+ ( s.contentType || "" )
+ .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+ rjsonp.test( s.data ) && "data"
+ );
+
+ // Handle iff the expected data type is "jsonp" or we have a parameter to set
+ if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+ // Get callback name, remembering preexisting value associated with it
+ callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
+ s.jsonpCallback() :
+ s.jsonpCallback;
+
+ // Insert callback into url or form data
+ if ( jsonProp ) {
+ s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+ } else if ( s.jsonp !== false ) {
+ s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+ }
+
+ // Use data converter to retrieve json after script execution
+ s.converters[ "script json" ] = function() {
+ if ( !responseContainer ) {
+ jQuery.error( callbackName + " was not called" );
+ }
+ return responseContainer[ 0 ];
+ };
+
+ // Force json dataType
+ s.dataTypes[ 0 ] = "json";
+
+ // Install callback
+ overwritten = window[ callbackName ];
+ window[ callbackName ] = function() {
+ responseContainer = arguments;
+ };
+
+ // Clean-up function (fires after converters)
+ jqXHR.always( function() {
+
+ // If previous value didn't exist - remove it
+ if ( overwritten === undefined ) {
+ jQuery( window ).removeProp( callbackName );
+
+ // Otherwise restore preexisting value
+ } else {
+ window[ callbackName ] = overwritten;
+ }
+
+ // Save back as free
+ if ( s[ callbackName ] ) {
+
+ // Make sure that re-using the options doesn't screw things around
+ s.jsonpCallback = originalSettings.jsonpCallback;
+
+ // Save the callback name for future use
+ oldCallbacks.push( callbackName );
+ }
+
+ // Call if it was a function and we have a response
+ if ( responseContainer && isFunction( overwritten ) ) {
+ overwritten( responseContainer[ 0 ] );
+ }
+
+ responseContainer = overwritten = undefined;
+ } );
+
+ // Delegate to script
+ return "script";
+ }
+} );
+
+
+
+
+// Support: Safari 8 only
+// In Safari 8 documents created via document.implementation.createHTMLDocument
+// collapse sibling forms: the second one becomes a child of the first one.
+// Because of that, this security measure has to be disabled in Safari 8.
+// https://bugs.webkit.org/show_bug.cgi?id=137337
+support.createHTMLDocument = ( function() {
+ var body = document.implementation.createHTMLDocument( "" ).body;
+ body.innerHTML = "<form></form><form></form>";
+ return body.childNodes.length === 2;
+} )();
+
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+ if ( typeof data !== "string" ) {
+ return [];
+ }
+ if ( typeof context === "boolean" ) {
+ keepScripts = context;
+ context = false;
+ }
+
+ var base, parsed, scripts;
+
+ if ( !context ) {
+
+ // Stop scripts or inline event handlers from being executed immediately
+ // by using document.implementation
+ if ( support.createHTMLDocument ) {
+ context = document.implementation.createHTMLDocument( "" );
+
+ // Set the base href for the created document
+ // so any parsed elements with URLs
+ // are based on the document's URL (gh-2965)
+ base = context.createElement( "base" );
+ base.href = document.location.href;
+ context.head.appendChild( base );
+ } else {
+ context = document;
+ }
+ }
+
+ parsed = rsingleTag.exec( data );
+ scripts = !keepScripts && [];
+
+ // Single tag
+ if ( parsed ) {
+ return [ context.createElement( parsed[ 1 ] ) ];
+ }
+
+ parsed = buildFragment( [ data ], context, scripts );
+
+ if ( scripts && scripts.length ) {
+ jQuery( scripts ).remove();
+ }
+
+ return jQuery.merge( [], parsed.childNodes );
+};
+
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+ var selector, type, response,
+ self = this,
+ off = url.indexOf( " " );
+
+ if ( off > -1 ) {
+ selector = stripAndCollapse( url.slice( off ) );
+ url = url.slice( 0, off );
+ }
+
+ // If it's a function
+ if ( isFunction( params ) ) {
+
+ // We assume that it's the callback
+ callback = params;
+ params = undefined;
+
+ // Otherwise, build a param string
+ } else if ( params && typeof params === "object" ) {
+ type = "POST";
+ }
+
+ // If we have elements to modify, make the request
+ if ( self.length > 0 ) {
+ jQuery.ajax( {
+ url: url,
+
+ // If "type" variable is undefined, then "GET" method will be used.
+ // Make value of this field explicit since
+ // user can override it through ajaxSetup method
+ type: type || "GET",
+ dataType: "html",
+ data: params
+ } ).done( function( responseText ) {
+
+ // Save response for use in complete callback
+ response = arguments;
+
+ self.html( selector ?
+
+ // If a selector was specified, locate the right elements in a dummy div
+ // Exclude scripts to avoid IE 'Permission Denied' errors
+ jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+ // Otherwise use the full result
+ responseText );
+
+ // If the request succeeds, this function gets "data", "status", "jqXHR"
+ // but they are ignored because response was set above.
+ // If it fails, this function gets "jqXHR", "status", "error"
+ } ).always( callback && function( jqXHR, status ) {
+ self.each( function() {
+ callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+ } );
+ } );
+ }
+
+ return this;
+};
+
+
+
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [
+ "ajaxStart",
+ "ajaxStop",
+ "ajaxComplete",
+ "ajaxError",
+ "ajaxSuccess",
+ "ajaxSend"
+], function( i, type ) {
+ jQuery.fn[ type ] = function( fn ) {
+ return this.on( type, fn );
+ };
+} );
+
+
+
+
+jQuery.expr.pseudos.animated = function( elem ) {
+ return jQuery.grep( jQuery.timers, function( fn ) {
+ return elem === fn.elem;
+ } ).length;
+};
+
+
+
+
+jQuery.offset = {
+ setOffset: function( elem, options, i ) {
+ var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+ position = jQuery.css( elem, "position" ),
+ curElem = jQuery( elem ),
+ props = {};
+
+ // Set position first, in-case top/left are set even on static elem
+ if ( position === "static" ) {
+ elem.style.position = "relative";
+ }
+
+ curOffset = curElem.offset();
+ curCSSTop = jQuery.css( elem, "top" );
+ curCSSLeft = jQuery.css( elem, "left" );
+ calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+ ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
+
+ // Need to be able to calculate position if either
+ // top or left is auto and position is either absolute or fixed
+ if ( calculatePosition ) {
+ curPosition = curElem.position();
+ curTop = curPosition.top;
+ curLeft = curPosition.left;
+
+ } else {
+ curTop = parseFloat( curCSSTop ) || 0;
+ curLeft = parseFloat( curCSSLeft ) || 0;
+ }
+
+ if ( isFunction( options ) ) {
+
+ // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+ options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+ }
+
+ if ( options.top != null ) {
+ props.top = ( options.top - curOffset.top ) + curTop;
+ }
+ if ( options.left != null ) {
+ props.left = ( options.left - curOffset.left ) + curLeft;
+ }
+
+ if ( "using" in options ) {
+ options.using.call( elem, props );
+
+ } else {
+ curElem.css( props );
+ }
+ }
+};
+
+jQuery.fn.extend( {
+
+ // offset() relates an element's border box to the document origin
+ offset: function( options ) {
+
+ // Preserve chaining for setter
+ if ( arguments.length ) {
+ return options === undefined ?
+ this :
+ this.each( function( i ) {
+ jQuery.offset.setOffset( this, options, i );
+ } );
+ }
+
+ var rect, win,
+ elem = this[ 0 ];
+
+ if ( !elem ) {
+ return;
+ }
+
+ // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
+ // Support: IE <=11 only
+ // Running getBoundingClientRect on a
+ // disconnected node in IE throws an error
+ if ( !elem.getClientRects().length ) {
+ return { top: 0, left: 0 };
+ }
+
+ // Get document-relative position by adding viewport scroll to viewport-relative gBCR
+ rect = elem.getBoundingClientRect();
+ win = elem.ownerDocument.defaultView;
+ return {
+ top: rect.top + win.pageYOffset,
+ left: rect.left + win.pageXOffset
+ };
+ },
+
+ // position() relates an element's margin box to its offset parent's padding box
+ // This corresponds to the behavior of CSS absolute positioning
+ position: function() {
+ if ( !this[ 0 ] ) {
+ return;
+ }
+
+ var offsetParent, offset, doc,
+ elem = this[ 0 ],
+ parentOffset = { top: 0, left: 0 };
+
+ // position:fixed elements are offset from the viewport, which itself always has zero offset
+ if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+ // Assume position:fixed implies availability of getBoundingClientRect
+ offset = elem.getBoundingClientRect();
+
+ } else {
+ offset = this.offset();
+
+ // Account for the *real* offset parent, which can be the document or its root element
+ // when a statically positioned element is identified
+ doc = elem.ownerDocument;
+ offsetParent = elem.offsetParent || doc.documentElement;
+ while ( offsetParent &&
+ ( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
+ jQuery.css( offsetParent, "position" ) === "static" ) {
+
+ offsetParent = offsetParent.parentNode;
+ }
+ if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
+
+ // Incorporate borders into its offset, since they are outside its content origin
+ parentOffset = jQuery( offsetParent ).offset();
+ parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
+ parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
+ }
+ }
+
+ // Subtract parent offsets and element margins
+ return {
+ top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+ left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+ };
+ },
+
+ // This method will return documentElement in the following cases:
+ // 1) For the element inside the iframe without offsetParent, this method will return
+ // documentElement of the parent window
+ // 2) For the hidden or detached element
+ // 3) For body or html element, i.e. in case of the html node - it will return itself
+ //
+ // but those exceptions were never presented as a real life use-cases
+ // and might be considered as more preferable results.
+ //
+ // This logic, however, is not guaranteed and can change at any point in the future
+ offsetParent: function() {
+ return this.map( function() {
+ var offsetParent = this.offsetParent;
+
+ while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
+ offsetParent = offsetParent.offsetParent;
+ }
+
+ return offsetParent || documentElement;
+ } );
+ }
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+ var top = "pageYOffset" === prop;
+
+ jQuery.fn[ method ] = function( val ) {
+ return access( this, function( elem, method, val ) {
+
+ // Coalesce documents and windows
+ var win;
+ if ( isWindow( elem ) ) {
+ win = elem;
+ } else if ( elem.nodeType === 9 ) {
+ win = elem.defaultView;
+ }
+
+ if ( val === undefined ) {
+ return win ? win[ prop ] : elem[ method ];
+ }
+
+ if ( win ) {
+ win.scrollTo(
+ !top ? val : win.pageXOffset,
+ top ? val : win.pageYOffset
+ );
+
+ } else {
+ elem[ method ] = val;
+ }
+ }, method, val, arguments.length );
+ };
+} );
+
+// Support: Safari <=7 - 9.1, Chrome <=37 - 49
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( i, prop ) {
+ jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+ function( elem, computed ) {
+ if ( computed ) {
+ computed = curCSS( elem, prop );
+
+ // If curCSS returns percentage, fallback to offset
+ return rnumnonpx.test( computed ) ?
+ jQuery( elem ).position()[ prop ] + "px" :
+ computed;
+ }
+ }
+ );
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+ jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+ function( defaultExtra, funcName ) {
+
+ // Margin is only for outerHeight, outerWidth
+ jQuery.fn[ funcName ] = function( margin, value ) {
+ var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+ extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+ return access( this, function( elem, type, value ) {
+ var doc;
+
+ if ( isWindow( elem ) ) {
+
+ // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
+ return funcName.indexOf( "outer" ) === 0 ?
+ elem[ "inner" + name ] :
+ elem.document.documentElement[ "client" + name ];
+ }
+
+ // Get document width or height
+ if ( elem.nodeType === 9 ) {
+ doc = elem.documentElement;
+
+ // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+ // whichever is greatest
+ return Math.max(
+ elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+ elem.body[ "offset" + name ], doc[ "offset" + name ],
+ doc[ "client" + name ]
+ );
+ }
+
+ return value === undefined ?
+
+ // Get width or height on the element, requesting but not forcing parseFloat
+ jQuery.css( elem, type, extra ) :
+
+ // Set width or height on the element
+ jQuery.style( elem, type, value, extra );
+ }, type, chainable ? margin : undefined, chainable );
+ };
+ } );
+} );
+
+
+jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+ "change select submit keydown keypress keyup contextmenu" ).split( " " ),
+ function( i, name ) {
+
+ // Handle event binding
+ jQuery.fn[ name ] = function( data, fn ) {
+ return arguments.length > 0 ?
+ this.on( name, null, data, fn ) :
+ this.trigger( name );
+ };
+} );
+
+jQuery.fn.extend( {
+ hover: function( fnOver, fnOut ) {
+ return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+ }
+} );
+
+
+
+
+jQuery.fn.extend( {
+
+ bind: function( types, data, fn ) {
+ return this.on( types, null, data, fn );
+ },
+ unbind: function( types, fn ) {
+ return this.off( types, null, fn );
+ },
+
+ delegate: function( selector, types, data, fn ) {
+ return this.on( types, selector, data, fn );
+ },
+ undelegate: function( selector, types, fn ) {
+
+ // ( namespace ) or ( selector, types [, fn] )
+ return arguments.length === 1 ?
+ this.off( selector, "**" ) :
+ this.off( types, selector || "**", fn );
+ }
+} );
+
+// Bind a function to a context, optionally partially applying any
+// arguments.
+// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
+// However, it is not slated for removal any time soon
+jQuery.proxy = function( fn, context ) {
+ var tmp, args, proxy;
+
+ if ( typeof context === "string" ) {
+ tmp = fn[ context ];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if ( !isFunction( fn ) ) {
+ return undefined;
+ }
+
+ // Simulated bind
+ args = slice.call( arguments, 2 );
+ proxy = function() {
+ return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+ };
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+ return proxy;
+};
+
+jQuery.holdReady = function( hold ) {
+ if ( hold ) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready( true );
+ }
+};
+jQuery.isArray = Array.isArray;
+jQuery.parseJSON = JSON.parse;
+jQuery.nodeName = nodeName;
+jQuery.isFunction = isFunction;
+jQuery.isWindow = isWindow;
+jQuery.camelCase = camelCase;
+jQuery.type = toType;
+
+jQuery.now = Date.now;
+
+jQuery.isNumeric = function( obj ) {
+
+ // As of jQuery 3.0, isNumeric is limited to
+ // strings and numbers (primitives or objects)
+ // that can be coerced to finite numbers (gh-2662)
+ var type = jQuery.type( obj );
+ return ( type === "number" || type === "string" ) &&
+
+ // parseFloat NaNs numeric-cast false positives ("")
+ // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+ // subtraction forces infinities to NaN
+ !isNaN( obj - parseFloat( obj ) );
+};
+
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+ define( "jquery", [], function() {
+ return jQuery;
+ } );
+}
+
+
+
+
+var
+
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+
+ // Map over the $ in case of overwrite
+ _$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+ if ( window.$ === jQuery ) {
+ window.$ = _$;
+ }
+
+ if ( deep && window.jQuery === jQuery ) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( !noGlobal ) {
+ window.jQuery = window.$ = jQuery;
+}
+
+
+
+
+return jQuery;
+} );
diff --git a/doc/_static/language_data.js b/doc/_static/language_data.js
index 863704b..5266fb1 100644
--- a/doc/_static/language_data.js
+++ b/doc/_static/language_data.js
@@ -5,7 +5,7 @@
* This script contains the language-specific data used by searchtools.js,
* namely the list of stopwords, stemmer, scorer and splitter.
*
- * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@@ -13,8 +13,7 @@
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
-/* Non-minified version is copied as a separate JS file, is available */
-
+/* Non-minified version JS is _stemmer.js if file is provided */
/**
* Porter Stemmer
*/
@@ -200,6 +199,7 @@ var Stemmer = function() {
+
var splitChars = (function() {
var result = {};
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
diff --git a/doc/_static/pygments.css b/doc/_static/pygments.css
index 691aeb8..20c4814 100644
--- a/doc/_static/pygments.css
+++ b/doc/_static/pygments.css
@@ -1,10 +1,5 @@
-pre { line-height: 125%; }
-td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
-.highlight { background: #eeffcc; }
+.highlight { background: #eeffcc; }
.highlight .c { color: #408090; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #007020; font-weight: bold } /* Keyword */
diff --git a/doc/_static/searchtools.js b/doc/_static/searchtools.js
index e09f926..5ff3180 100644
--- a/doc/_static/searchtools.js
+++ b/doc/_static/searchtools.js
@@ -4,7 +4,7 @@
*
* Sphinx JavaScript utilities for the full-text search.
*
- * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@@ -36,10 +36,8 @@ if (!Scorer) {
// query found in title
title: 15,
- partialTitle: 7,
// query found in terms
- term: 5,
- partialTerm: 2
+ term: 5
};
}
@@ -58,19 +56,6 @@ var Search = {
_queued_query : null,
_pulse_status : -1,
- htmlToText : function(htmlString) {
- var virtualDocument = document.implementation.createHTMLDocument('virtual');
- var htmlElement = $(htmlString, virtualDocument);
- htmlElement.find('.headerlink').remove();
- docContent = htmlElement.find('[role=main]')[0];
- if(docContent === undefined) {
- console.warn("Content block not found. Sphinx search tries to obtain it " +
- "via '[role=main]'. Could you check your theme or template.");
- return "";
- }
- return docContent.textContent || docContent.innerText;
- },
-
init : function() {
var params = $.getQueryParameters();
if (params.q) {
@@ -135,7 +120,7 @@ var Search = {
this.out = $('#search-results');
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
this.dots = $('<span></span>').appendTo(this.title);
- this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out);
+ this.status = $('<p style="display: none"></p>').appendTo(this.out);
this.output = $('<ul class="search"/>').appendTo(this.out);
$('#search-progress').text(_('Preparing search...'));
@@ -166,7 +151,8 @@ var Search = {
objectterms.push(tmp[i].toLowerCase());
}
- if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
+ if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) ||
+ tmp[i] === "") {
// skip this "word"
continue;
}
@@ -248,10 +234,8 @@ var Search = {
// results left, load the summary and display it
if (results.length) {
var item = results.pop();
- var listItem = $('<li></li>');
- var requestUrl = "";
- var linkUrl = "";
- if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
+ var listItem = $('<li style="display:none"></li>');
+ if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') {
// dirhtml builder
var dirname = item[0] + '/';
if (dirname.match(/\/index\/$/)) {
@@ -259,25 +243,27 @@ var Search = {
} else if (dirname == 'index/') {
dirname = '';
}
- requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
- linkUrl = requestUrl;
-
+ listItem.append($('<a/>').attr('href',
+ DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
+ highlightstring + item[2]).html(item[1]));
} else {
// normal html builders
- requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
- linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
- }
- listItem.append($('<a/>').attr('href',
- linkUrl +
+ listItem.append($('<a/>').attr('href',
+ item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
highlightstring + item[2]).html(item[1]));
+ }
if (item[3]) {
listItem.append($('<span> (' + item[3] + ')</span>'));
Search.output.append(listItem);
- setTimeout(function() {
+ listItem.slideDown(5, function() {
displayNextItem();
- }, 5);
+ });
} else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
- $.ajax({url: requestUrl,
+ var suffix = DOCUMENTATION_OPTIONS.SOURCELINK_SUFFIX;
+ if (suffix === undefined) {
+ suffix = '.txt';
+ }
+ $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[5] + (item[5].slice(-suffix.length) === suffix ? '' : suffix),
dataType: "text",
complete: function(jqxhr, textstatus) {
var data = jqxhr.responseText;
@@ -285,16 +271,16 @@ var Search = {
listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
}
Search.output.append(listItem);
- setTimeout(function() {
+ listItem.slideDown(5, function() {
displayNextItem();
- }, 5);
+ });
}});
} else {
// no source available, just display title
Search.output.append(listItem);
- setTimeout(function() {
+ listItem.slideDown(5, function() {
displayNextItem();
- }, 5);
+ });
}
}
// search finished, update title and status message
@@ -327,13 +313,12 @@ var Search = {
for (var prefix in objects) {
for (var name in objects[prefix]) {
var fullname = (prefix ? prefix + '.' : '') + name;
- var fullnameLower = fullname.toLowerCase()
- if (fullnameLower.indexOf(object) > -1) {
+ if (fullname.toLowerCase().indexOf(object) > -1) {
var score = 0;
- var parts = fullnameLower.split('.');
+ var parts = fullname.split('.');
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
- if (fullnameLower == object || parts[parts.length - 1] == object) {
+ if (fullname == object || parts[parts.length - 1] == object) {
score += Scorer.objNameMatch;
// matches in last name
} else if (parts[parts.length - 1].indexOf(object) > -1) {
@@ -380,13 +365,6 @@ var Search = {
},
/**
- * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
- */
- escapeRegExp : function(string) {
- return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
- },
-
- /**
* search for full-text terms in the index
*/
performTermsSearch : function(searchterms, excluded, terms, titleterms) {
@@ -407,20 +385,6 @@ var Search = {
{files: terms[word], score: Scorer.term},
{files: titleterms[word], score: Scorer.title}
];
- // add support for partial matches
- if (word.length > 2) {
- var word_regex = this.escapeRegExp(word);
- for (var w in terms) {
- if (w.match(word_regex) && !terms[word]) {
- _o.push({files: terms[w], score: Scorer.partialTerm})
- }
- }
- for (var w in titleterms) {
- if (w.match(word_regex) && !titleterms[word]) {
- _o.push({files: titleterms[w], score: Scorer.partialTitle})
- }
- }
- }
// no match but word was a required one
if ($u.every(_o, function(o){return o.files === undefined;})) {
@@ -440,7 +404,7 @@ var Search = {
for (j = 0; j < _files.length; j++) {
file = _files[j];
if (!(file in scoreMap))
- scoreMap[file] = {};
+ scoreMap[file] = {}
scoreMap[file][word] = o.score;
}
});
@@ -448,7 +412,7 @@ var Search = {
// create the mapping
for (j = 0; j < files.length; j++) {
file = files[j];
- if (file in fileMap && fileMap[file].indexOf(word) === -1)
+ if (file in fileMap)
fileMap[file].push(word);
else
fileMap[file] = [word];
@@ -460,12 +424,8 @@ var Search = {
var valid = true;
// check if all requirements are matched
- var filteredTermCount = // as search terms with length < 3 are discarded: ignore
- searchterms.filter(function(term){return term.length > 2}).length
- if (
- fileMap[file].length != searchterms.length &&
- fileMap[file].length != filteredTermCount
- ) continue;
+ if (fileMap[file].length != searchterms.length)
+ continue;
// ensure that none of the excluded terms is in the search result
for (i = 0; i < excluded.length; i++) {
@@ -496,8 +456,7 @@ var Search = {
* words. the first one is used to find the occurrence, the
* latter for highlighting it.
*/
- makeSearchSummary : function(htmlText, keywords, hlwords) {
- var text = Search.htmlToText(htmlText);
+ makeSearchSummary : function(text, keywords, hlwords) {
var textLower = text.toLowerCase();
var start = 0;
$.each(keywords, function() {
@@ -509,7 +468,7 @@ var Search = {
var excerpt = ((start > 0) ? '...' : '') +
$.trim(text.substr(start, 240)) +
((start + 240 - text.length) ? '...' : '');
- var rv = $('<p class="context"></p>').text(excerpt);
+ var rv = $('<div class="context"></div>').text(excerpt);
$.each(hlwords, function() {
rv = rv.highlightText(this, 'highlighted');
});
diff --git a/doc/_static/sidebar.js b/doc/_static/sidebar.js
index 599639f..686ca39 100644
--- a/doc/_static/sidebar.js
+++ b/doc/_static/sidebar.js
@@ -16,7 +16,7 @@
* Once the browser is closed the cookie is deleted and the position
* reset to the default (expanded).
*
- * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
diff --git a/doc/_static/underscore-1.12.0.js b/doc/_static/underscore-1.12.0.js
deleted file mode 100644
index 3af6352..0000000
--- a/doc/_static/underscore-1.12.0.js
+++ /dev/null
@@ -1,2027 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define('underscore', factory) :
- (global = global || self, (function () {
- var current = global._;
- var exports = global._ = factory();
- exports.noConflict = function () { global._ = current; return exports; };
- }()));
-}(this, (function () {
- // Underscore.js 1.12.0
- // https://underscorejs.org
- // (c) 2009-2020 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- // Underscore may be freely distributed under the MIT license.
-
- // Current version.
- var VERSION = '1.12.0';
-
- // Establish the root object, `window` (`self`) in the browser, `global`
- // on the server, or `this` in some virtual machines. We use `self`
- // instead of `window` for `WebWorker` support.
- var root = typeof self == 'object' && self.self === self && self ||
- typeof global == 'object' && global.global === global && global ||
- Function('return this')() ||
- {};
-
- // Save bytes in the minified (but not gzipped) version:
- var ArrayProto = Array.prototype, ObjProto = Object.prototype;
- var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
-
- // Create quick reference variables for speed access to core prototypes.
- var push = ArrayProto.push,
- slice = ArrayProto.slice,
- toString = ObjProto.toString,
- hasOwnProperty = ObjProto.hasOwnProperty;
-
- // Modern feature detection.
- var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',
- supportsDataView = typeof DataView !== 'undefined';
-
- // All **ECMAScript 5+** native function implementations that we hope to use
- // are declared here.
- var nativeIsArray = Array.isArray,
- nativeKeys = Object.keys,
- nativeCreate = Object.create,
- nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;
-
- // Create references to these builtin functions because we override them.
- var _isNaN = isNaN,
- _isFinite = isFinite;
-
- // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
- var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
- var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
- 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
-
- // The largest integer that can be represented exactly.
- var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
-
- // Some functions take a variable number of arguments, or a few expected
- // arguments at the beginning and then a variable number of values to operate
- // on. This helper accumulates all remaining arguments past the function’s
- // argument length (or an explicit `startIndex`), into an array that becomes
- // the last argument. Similar to ES6’s "rest parameter".
- function restArguments(func, startIndex) {
- startIndex = startIndex == null ? func.length - 1 : +startIndex;
- return function() {
- var length = Math.max(arguments.length - startIndex, 0),
- rest = Array(length),
- index = 0;
- for (; index < length; index++) {
- rest[index] = arguments[index + startIndex];
- }
- switch (startIndex) {
- case 0: return func.call(this, rest);
- case 1: return func.call(this, arguments[0], rest);
- case 2: return func.call(this, arguments[0], arguments[1], rest);
- }
- var args = Array(startIndex + 1);
- for (index = 0; index < startIndex; index++) {
- args[index] = arguments[index];
- }
- args[startIndex] = rest;
- return func.apply(this, args);
- };
- }
-
- // Is a given variable an object?
- function isObject(obj) {
- var type = typeof obj;
- return type === 'function' || type === 'object' && !!obj;
- }
-
- // Is a given value equal to null?
- function isNull(obj) {
- return obj === null;
- }
-
- // Is a given variable undefined?
- function isUndefined(obj) {
- return obj === void 0;
- }
-
- // Is a given value a boolean?
- function isBoolean(obj) {
- return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
- }
-
- // Is a given value a DOM element?
- function isElement(obj) {
- return !!(obj && obj.nodeType === 1);
- }
-
- // Internal function for creating a `toString`-based type tester.
- function tagTester(name) {
- var tag = '[object ' + name + ']';
- return function(obj) {
- return toString.call(obj) === tag;
- };
- }
-
- var isString = tagTester('String');
-
- var isNumber = tagTester('Number');
-
- var isDate = tagTester('Date');
-
- var isRegExp = tagTester('RegExp');
-
- var isError = tagTester('Error');
-
- var isSymbol = tagTester('Symbol');
-
- var isArrayBuffer = tagTester('ArrayBuffer');
-
- var isFunction = tagTester('Function');
-
- // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old
- // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
- var nodelist = root.document && root.document.childNodes;
- if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
- isFunction = function(obj) {
- return typeof obj == 'function' || false;
- };
- }
-
- var isFunction$1 = isFunction;
-
- var hasObjectTag = tagTester('Object');
-
- // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.
- // In IE 11, the most common among them, this problem also applies to
- // `Map`, `WeakMap` and `Set`.
- var hasStringTagBug = (
- supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))
- ),
- isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));
-
- var isDataView = tagTester('DataView');
-
- // In IE 10 - Edge 13, we need a different heuristic
- // to determine whether an object is a `DataView`.
- function ie10IsDataView(obj) {
- return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);
- }
-
- var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);
-
- // Is a given value an array?
- // Delegates to ECMA5's native `Array.isArray`.
- var isArray = nativeIsArray || tagTester('Array');
-
- // Internal function to check whether `key` is an own property name of `obj`.
- function has(obj, key) {
- return obj != null && hasOwnProperty.call(obj, key);
- }
-
- var isArguments = tagTester('Arguments');
-
- // Define a fallback version of the method in browsers (ahem, IE < 9), where
- // there isn't any inspectable "Arguments" type.
- (function() {
- if (!isArguments(arguments)) {
- isArguments = function(obj) {
- return has(obj, 'callee');
- };
- }
- }());
-
- var isArguments$1 = isArguments;
-
- // Is a given object a finite number?
- function isFinite$1(obj) {
- return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));
- }
-
- // Is the given value `NaN`?
- function isNaN$1(obj) {
- return isNumber(obj) && _isNaN(obj);
- }
-
- // Predicate-generating function. Often useful outside of Underscore.
- function constant(value) {
- return function() {
- return value;
- };
- }
-
- // Common internal logic for `isArrayLike` and `isBufferLike`.
- function createSizePropertyCheck(getSizeProperty) {
- return function(collection) {
- var sizeProperty = getSizeProperty(collection);
- return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;
- }
- }
-
- // Internal helper to generate a function to obtain property `key` from `obj`.
- function shallowProperty(key) {
- return function(obj) {
- return obj == null ? void 0 : obj[key];
- };
- }
-
- // Internal helper to obtain the `byteLength` property of an object.
- var getByteLength = shallowProperty('byteLength');
-
- // Internal helper to determine whether we should spend extensive checks against
- // `ArrayBuffer` et al.
- var isBufferLike = createSizePropertyCheck(getByteLength);
-
- // Is a given value a typed array?
- var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;
- function isTypedArray(obj) {
- // `ArrayBuffer.isView` is the most future-proof, so use it when available.
- // Otherwise, fall back on the above regular expression.
- return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :
- isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));
- }
-
- var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);
-
- // Internal helper to obtain the `length` property of an object.
- var getLength = shallowProperty('length');
-
- // Internal helper to create a simple lookup structure.
- // `collectNonEnumProps` used to depend on `_.contains`, but this led to
- // circular imports. `emulatedSet` is a one-off solution that only works for
- // arrays of strings.
- function emulatedSet(keys) {
- var hash = {};
- for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;
- return {
- contains: function(key) { return hash[key]; },
- push: function(key) {
- hash[key] = true;
- return keys.push(key);
- }
- };
- }
-
- // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't
- // be iterated by `for key in ...` and thus missed. Extends `keys` in place if
- // needed.
- function collectNonEnumProps(obj, keys) {
- keys = emulatedSet(keys);
- var nonEnumIdx = nonEnumerableProps.length;
- var constructor = obj.constructor;
- var proto = isFunction$1(constructor) && constructor.prototype || ObjProto;
-
- // Constructor is a special case.
- var prop = 'constructor';
- if (has(obj, prop) && !keys.contains(prop)) keys.push(prop);
-
- while (nonEnumIdx--) {
- prop = nonEnumerableProps[nonEnumIdx];
- if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {
- keys.push(prop);
- }
- }
- }
-
- // Retrieve the names of an object's own properties.
- // Delegates to **ECMAScript 5**'s native `Object.keys`.
- function keys(obj) {
- if (!isObject(obj)) return [];
- if (nativeKeys) return nativeKeys(obj);
- var keys = [];
- for (var key in obj) if (has(obj, key)) keys.push(key);
- // Ahem, IE < 9.
- if (hasEnumBug) collectNonEnumProps(obj, keys);
- return keys;
- }
-
- // Is a given array, string, or object empty?
- // An "empty" object has no enumerable own-properties.
- function isEmpty(obj) {
- if (obj == null) return true;
- // Skip the more expensive `toString`-based type checks if `obj` has no
- // `.length`.
- var length = getLength(obj);
- if (typeof length == 'number' && (
- isArray(obj) || isString(obj) || isArguments$1(obj)
- )) return length === 0;
- return getLength(keys(obj)) === 0;
- }
-
- // Returns whether an object has a given set of `key:value` pairs.
- function isMatch(object, attrs) {
- var _keys = keys(attrs), length = _keys.length;
- if (object == null) return !length;
- var obj = Object(object);
- for (var i = 0; i < length; i++) {
- var key = _keys[i];
- if (attrs[key] !== obj[key] || !(key in obj)) return false;
- }
- return true;
- }
-
- // If Underscore is called as a function, it returns a wrapped object that can
- // be used OO-style. This wrapper holds altered versions of all functions added
- // through `_.mixin`. Wrapped objects may be chained.
- function _(obj) {
- if (obj instanceof _) return obj;
- if (!(this instanceof _)) return new _(obj);
- this._wrapped = obj;
- }
-
- _.VERSION = VERSION;
-
- // Extracts the result from a wrapped and chained object.
- _.prototype.value = function() {
- return this._wrapped;
- };
-
- // Provide unwrapping proxies for some methods used in engine operations
- // such as arithmetic and JSON stringification.
- _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;
-
- _.prototype.toString = function() {
- return String(this._wrapped);
- };
-
- // Internal function to wrap or shallow-copy an ArrayBuffer,
- // typed array or DataView to a new view, reusing the buffer.
- function toBufferView(bufferSource) {
- return new Uint8Array(
- bufferSource.buffer || bufferSource,
- bufferSource.byteOffset || 0,
- getByteLength(bufferSource)
- );
- }
-
- // We use this string twice, so give it a name for minification.
- var tagDataView = '[object DataView]';
-
- // Internal recursive comparison function for `_.isEqual`.
- function eq(a, b, aStack, bStack) {
- // Identical objects are equal. `0 === -0`, but they aren't identical.
- // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).
- if (a === b) return a !== 0 || 1 / a === 1 / b;
- // `null` or `undefined` only equal to itself (strict comparison).
- if (a == null || b == null) return false;
- // `NaN`s are equivalent, but non-reflexive.
- if (a !== a) return b !== b;
- // Exhaust primitive checks
- var type = typeof a;
- if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
- return deepEq(a, b, aStack, bStack);
- }
-
- // Internal recursive comparison function for `_.isEqual`.
- function deepEq(a, b, aStack, bStack) {
- // Unwrap any wrapped objects.
- if (a instanceof _) a = a._wrapped;
- if (b instanceof _) b = b._wrapped;
- // Compare `[[Class]]` names.
- var className = toString.call(a);
- if (className !== toString.call(b)) return false;
- // Work around a bug in IE 10 - Edge 13.
- if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {
- if (!isDataView$1(b)) return false;
- className = tagDataView;
- }
- switch (className) {
- // These types are compared by value.
- case '[object RegExp]':
- // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
- case '[object String]':
- // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
- // equivalent to `new String("5")`.
- return '' + a === '' + b;
- case '[object Number]':
- // `NaN`s are equivalent, but non-reflexive.
- // Object(NaN) is equivalent to NaN.
- if (+a !== +a) return +b !== +b;
- // An `egal` comparison is performed for other numeric values.
- return +a === 0 ? 1 / +a === 1 / b : +a === +b;
- case '[object Date]':
- case '[object Boolean]':
- // Coerce dates and booleans to numeric primitive values. Dates are compared by their
- // millisecond representations. Note that invalid dates with millisecond representations
- // of `NaN` are not equivalent.
- return +a === +b;
- case '[object Symbol]':
- return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);
- case '[object ArrayBuffer]':
- case tagDataView:
- // Coerce to typed array so we can fall through.
- return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);
- }
-
- var areArrays = className === '[object Array]';
- if (!areArrays && isTypedArray$1(a)) {
- var byteLength = getByteLength(a);
- if (byteLength !== getByteLength(b)) return false;
- if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;
- areArrays = true;
- }
- if (!areArrays) {
- if (typeof a != 'object' || typeof b != 'object') return false;
-
- // Objects with different constructors are not equivalent, but `Object`s or `Array`s
- // from different frames are.
- var aCtor = a.constructor, bCtor = b.constructor;
- if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&
- isFunction$1(bCtor) && bCtor instanceof bCtor)
- && ('constructor' in a && 'constructor' in b)) {
- return false;
- }
- }
- // Assume equality for cyclic structures. The algorithm for detecting cyclic
- // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
-
- // Initializing stack of traversed objects.
- // It's done here since we only need them for objects and arrays comparison.
- aStack = aStack || [];
- bStack = bStack || [];
- var length = aStack.length;
- while (length--) {
- // Linear search. Performance is inversely proportional to the number of
- // unique nested structures.
- if (aStack[length] === a) return bStack[length] === b;
- }
-
- // Add the first object to the stack of traversed objects.
- aStack.push(a);
- bStack.push(b);
-
- // Recursively compare objects and arrays.
- if (areArrays) {
- // Compare array lengths to determine if a deep comparison is necessary.
- length = a.length;
- if (length !== b.length) return false;
- // Deep compare the contents, ignoring non-numeric properties.
- while (length--) {
- if (!eq(a[length], b[length], aStack, bStack)) return false;
- }
- } else {
- // Deep compare objects.
- var _keys = keys(a), key;
- length = _keys.length;
- // Ensure that both objects contain the same number of properties before comparing deep equality.
- if (keys(b).length !== length) return false;
- while (length--) {
- // Deep compare each member
- key = _keys[length];
- if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
- }
- }
- // Remove the first object from the stack of traversed objects.
- aStack.pop();
- bStack.pop();
- return true;
- }
-
- // Perform a deep comparison to check if two objects are equal.
- function isEqual(a, b) {
- return eq(a, b);
- }
-
- // Retrieve all the enumerable property names of an object.
- function allKeys(obj) {
- if (!isObject(obj)) return [];
- var keys = [];
- for (var key in obj) keys.push(key);
- // Ahem, IE < 9.
- if (hasEnumBug) collectNonEnumProps(obj, keys);
- return keys;
- }
-
- // Since the regular `Object.prototype.toString` type tests don't work for
- // some types in IE 11, we use a fingerprinting heuristic instead, based
- // on the methods. It's not great, but it's the best we got.
- // The fingerprint method lists are defined below.
- function ie11fingerprint(methods) {
- var length = getLength(methods);
- return function(obj) {
- if (obj == null) return false;
- // `Map`, `WeakMap` and `Set` have no enumerable keys.
- var keys = allKeys(obj);
- if (getLength(keys)) return false;
- for (var i = 0; i < length; i++) {
- if (!isFunction$1(obj[methods[i]])) return false;
- }
- // If we are testing against `WeakMap`, we need to ensure that
- // `obj` doesn't have a `forEach` method in order to distinguish
- // it from a regular `Map`.
- return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);
- };
- }
-
- // In the interest of compact minification, we write
- // each string in the fingerprints only once.
- var forEachName = 'forEach',
- hasName = 'has',
- commonInit = ['clear', 'delete'],
- mapTail = ['get', hasName, 'set'];
-
- // `Map`, `WeakMap` and `Set` each have slightly different
- // combinations of the above sublists.
- var mapMethods = commonInit.concat(forEachName, mapTail),
- weakMapMethods = commonInit.concat(mapTail),
- setMethods = ['add'].concat(commonInit, forEachName, hasName);
-
- var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');
-
- var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');
-
- var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');
-
- var isWeakSet = tagTester('WeakSet');
-
- // Retrieve the values of an object's properties.
- function values(obj) {
- var _keys = keys(obj);
- var length = _keys.length;
- var values = Array(length);
- for (var i = 0; i < length; i++) {
- values[i] = obj[_keys[i]];
- }
- return values;
- }
-
- // Convert an object into a list of `[key, value]` pairs.
- // The opposite of `_.object` with one argument.
- function pairs(obj) {
- var _keys = keys(obj);
- var length = _keys.length;
- var pairs = Array(length);
- for (var i = 0; i < length; i++) {
- pairs[i] = [_keys[i], obj[_keys[i]]];
- }
- return pairs;
- }
-
- // Invert the keys and values of an object. The values must be serializable.
- function invert(obj) {
- var result = {};
- var _keys = keys(obj);
- for (var i = 0, length = _keys.length; i < length; i++) {
- result[obj[_keys[i]]] = _keys[i];
- }
- return result;
- }
-
- // Return a sorted list of the function names available on the object.
- function functions(obj) {
- var names = [];
- for (var key in obj) {
- if (isFunction$1(obj[key])) names.push(key);
- }
- return names.sort();
- }
-
- // An internal function for creating assigner functions.
- function createAssigner(keysFunc, defaults) {
- return function(obj) {
- var length = arguments.length;
- if (defaults) obj = Object(obj);
- if (length < 2 || obj == null) return obj;
- for (var index = 1; index < length; index++) {
- var source = arguments[index],
- keys = keysFunc(source),
- l = keys.length;
- for (var i = 0; i < l; i++) {
- var key = keys[i];
- if (!defaults || obj[key] === void 0) obj[key] = source[key];
- }
- }
- return obj;
- };
- }
-
- // Extend a given object with all the properties in passed-in object(s).
- var extend = createAssigner(allKeys);
-
- // Assigns a given object with all the own properties in the passed-in
- // object(s).
- // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
- var extendOwn = createAssigner(keys);
-
- // Fill in a given object with default properties.
- var defaults = createAssigner(allKeys, true);
-
- // Create a naked function reference for surrogate-prototype-swapping.
- function ctor() {
- return function(){};
- }
-
- // An internal function for creating a new object that inherits from another.
- function baseCreate(prototype) {
- if (!isObject(prototype)) return {};
- if (nativeCreate) return nativeCreate(prototype);
- var Ctor = ctor();
- Ctor.prototype = prototype;
- var result = new Ctor;
- Ctor.prototype = null;
- return result;
- }
-
- // Creates an object that inherits from the given prototype object.
- // If additional properties are provided then they will be added to the
- // created object.
- function create(prototype, props) {
- var result = baseCreate(prototype);
- if (props) extendOwn(result, props);
- return result;
- }
-
- // Create a (shallow-cloned) duplicate of an object.
- function clone(obj) {
- if (!isObject(obj)) return obj;
- return isArray(obj) ? obj.slice() : extend({}, obj);
- }
-
- // Invokes `interceptor` with the `obj` and then returns `obj`.
- // The primary purpose of this method is to "tap into" a method chain, in
- // order to perform operations on intermediate results within the chain.
- function tap(obj, interceptor) {
- interceptor(obj);
- return obj;
- }
-
- // Normalize a (deep) property `path` to array.
- // Like `_.iteratee`, this function can be customized.
- function toPath(path) {
- return isArray(path) ? path : [path];
- }
- _.toPath = toPath;
-
- // Internal wrapper for `_.toPath` to enable minification.
- // Similar to `cb` for `_.iteratee`.
- function toPath$1(path) {
- return _.toPath(path);
- }
-
- // Internal function to obtain a nested property in `obj` along `path`.
- function deepGet(obj, path) {
- var length = path.length;
- for (var i = 0; i < length; i++) {
- if (obj == null) return void 0;
- obj = obj[path[i]];
- }
- return length ? obj : void 0;
- }
-
- // Get the value of the (deep) property on `path` from `object`.
- // If any property in `path` does not exist or if the value is
- // `undefined`, return `defaultValue` instead.
- // The `path` is normalized through `_.toPath`.
- function get(object, path, defaultValue) {
- var value = deepGet(object, toPath$1(path));
- return isUndefined(value) ? defaultValue : value;
- }
-
- // Shortcut function for checking if an object has a given property directly on
- // itself (in other words, not on a prototype). Unlike the internal `has`
- // function, this public version can also traverse nested properties.
- function has$1(obj, path) {
- path = toPath$1(path);
- var length = path.length;
- for (var i = 0; i < length; i++) {
- var key = path[i];
- if (!has(obj, key)) return false;
- obj = obj[key];
- }
- return !!length;
- }
-
- // Keep the identity function around for default iteratees.
- function identity(value) {
- return value;
- }
-
- // Returns a predicate for checking whether an object has a given set of
- // `key:value` pairs.
- function matcher(attrs) {
- attrs = extendOwn({}, attrs);
- return function(obj) {
- return isMatch(obj, attrs);
- };
- }
-
- // Creates a function that, when passed an object, will traverse that object’s
- // properties down the given `path`, specified as an array of keys or indices.
- function property(path) {
- path = toPath$1(path);
- return function(obj) {
- return deepGet(obj, path);
- };
- }
-
- // Internal function that returns an efficient (for current engines) version
- // of the passed-in callback, to be repeatedly applied in other Underscore
- // functions.
- function optimizeCb(func, context, argCount) {
- if (context === void 0) return func;
- switch (argCount == null ? 3 : argCount) {
- case 1: return function(value) {
- return func.call(context, value);
- };
- // The 2-argument case is omitted because we’re not using it.
- case 3: return function(value, index, collection) {
- return func.call(context, value, index, collection);
- };
- case 4: return function(accumulator, value, index, collection) {
- return func.call(context, accumulator, value, index, collection);
- };
- }
- return function() {
- return func.apply(context, arguments);
- };
- }
-
- // An internal function to generate callbacks that can be applied to each
- // element in a collection, returning the desired result — either `_.identity`,
- // an arbitrary callback, a property matcher, or a property accessor.
- function baseIteratee(value, context, argCount) {
- if (value == null) return identity;
- if (isFunction$1(value)) return optimizeCb(value, context, argCount);
- if (isObject(value) && !isArray(value)) return matcher(value);
- return property(value);
- }
-
- // External wrapper for our callback generator. Users may customize
- // `_.iteratee` if they want additional predicate/iteratee shorthand styles.
- // This abstraction hides the internal-only `argCount` argument.
- function iteratee(value, context) {
- return baseIteratee(value, context, Infinity);
- }
- _.iteratee = iteratee;
-
- // The function we call internally to generate a callback. It invokes
- // `_.iteratee` if overridden, otherwise `baseIteratee`.
- function cb(value, context, argCount) {
- if (_.iteratee !== iteratee) return _.iteratee(value, context);
- return baseIteratee(value, context, argCount);
- }
-
- // Returns the results of applying the `iteratee` to each element of `obj`.
- // In contrast to `_.map` it returns an object.
- function mapObject(obj, iteratee, context) {
- iteratee = cb(iteratee, context);
- var _keys = keys(obj),
- length = _keys.length,
- results = {};
- for (var index = 0; index < length; index++) {
- var currentKey = _keys[index];
- results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
- }
- return results;
- }
-
- // Predicate-generating function. Often useful outside of Underscore.
- function noop(){}
-
- // Generates a function for a given object that returns a given property.
- function propertyOf(obj) {
- if (obj == null) return noop;
- return function(path) {
- return get(obj, path);
- };
- }
-
- // Run a function **n** times.
- function times(n, iteratee, context) {
- var accum = Array(Math.max(0, n));
- iteratee = optimizeCb(iteratee, context, 1);
- for (var i = 0; i < n; i++) accum[i] = iteratee(i);
- return accum;
- }
-
- // Return a random integer between `min` and `max` (inclusive).
- function random(min, max) {
- if (max == null) {
- max = min;
- min = 0;
- }
- return min + Math.floor(Math.random() * (max - min + 1));
- }
-
- // A (possibly faster) way to get the current timestamp as an integer.
- var now = Date.now || function() {
- return new Date().getTime();
- };
-
- // Internal helper to generate functions for escaping and unescaping strings
- // to/from HTML interpolation.
- function createEscaper(map) {
- var escaper = function(match) {
- return map[match];
- };
- // Regexes for identifying a key that needs to be escaped.
- var source = '(?:' + keys(map).join('|') + ')';
- var testRegexp = RegExp(source);
- var replaceRegexp = RegExp(source, 'g');
- return function(string) {
- string = string == null ? '' : '' + string;
- return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
- };
- }
-
- // Internal list of HTML entities for escaping.
- var escapeMap = {
- '&': '&amp;',
- '<': '&lt;',
- '>': '&gt;',
- '"': '&quot;',
- "'": '&#x27;',
- '`': '&#x60;'
- };
-
- // Function for escaping strings to HTML interpolation.
- var _escape = createEscaper(escapeMap);
-
- // Internal list of HTML entities for unescaping.
- var unescapeMap = invert(escapeMap);
-
- // Function for unescaping strings from HTML interpolation.
- var _unescape = createEscaper(unescapeMap);
-
- // By default, Underscore uses ERB-style template delimiters. Change the
- // following template settings to use alternative delimiters.
- var templateSettings = _.templateSettings = {
- evaluate: /<%([\s\S]+?)%>/g,
- interpolate: /<%=([\s\S]+?)%>/g,
- escape: /<%-([\s\S]+?)%>/g
- };
-
- // When customizing `_.templateSettings`, if you don't want to define an
- // interpolation, evaluation or escaping regex, we need one that is
- // guaranteed not to match.
- var noMatch = /(.)^/;
-
- // Certain characters need to be escaped so that they can be put into a
- // string literal.
- var escapes = {
- "'": "'",
- '\\': '\\',
- '\r': 'r',
- '\n': 'n',
- '\u2028': 'u2028',
- '\u2029': 'u2029'
- };
-
- var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;
-
- function escapeChar(match) {
- return '\\' + escapes[match];
- }
-
- // JavaScript micro-templating, similar to John Resig's implementation.
- // Underscore templating handles arbitrary delimiters, preserves whitespace,
- // and correctly escapes quotes within interpolated code.
- // NB: `oldSettings` only exists for backwards compatibility.
- function template(text, settings, oldSettings) {
- if (!settings && oldSettings) settings = oldSettings;
- settings = defaults({}, settings, _.templateSettings);
-
- // Combine delimiters into one regular expression via alternation.
- var matcher = RegExp([
- (settings.escape || noMatch).source,
- (settings.interpolate || noMatch).source,
- (settings.evaluate || noMatch).source
- ].join('|') + '|$', 'g');
-
- // Compile the template source, escaping string literals appropriately.
- var index = 0;
- var source = "__p+='";
- text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
- source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
- index = offset + match.length;
-
- if (escape) {
- source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
- } else if (interpolate) {
- source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
- } else if (evaluate) {
- source += "';\n" + evaluate + "\n__p+='";
- }
-
- // Adobe VMs need the match returned to produce the correct offset.
- return match;
- });
- source += "';\n";
-
- // If a variable is not specified, place data values in local scope.
- if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
-
- source = "var __t,__p='',__j=Array.prototype.join," +
- "print=function(){__p+=__j.call(arguments,'');};\n" +
- source + 'return __p;\n';
-
- var render;
- try {
- render = new Function(settings.variable || 'obj', '_', source);
- } catch (e) {
- e.source = source;
- throw e;
- }
-
- var template = function(data) {
- return render.call(this, data, _);
- };
-
- // Provide the compiled source as a convenience for precompilation.
- var argument = settings.variable || 'obj';
- template.source = 'function(' + argument + '){\n' + source + '}';
-
- return template;
- }
-
- // Traverses the children of `obj` along `path`. If a child is a function, it
- // is invoked with its parent as context. Returns the value of the final
- // child, or `fallback` if any child is undefined.
- function result(obj, path, fallback) {
- path = toPath$1(path);
- var length = path.length;
- if (!length) {
- return isFunction$1(fallback) ? fallback.call(obj) : fallback;
- }
- for (var i = 0; i < length; i++) {
- var prop = obj == null ? void 0 : obj[path[i]];
- if (prop === void 0) {
- prop = fallback;
- i = length; // Ensure we don't continue iterating.
- }
- obj = isFunction$1(prop) ? prop.call(obj) : prop;
- }
- return obj;
- }
-
- // Generate a unique integer id (unique within the entire client session).
- // Useful for temporary DOM ids.
- var idCounter = 0;
- function uniqueId(prefix) {
- var id = ++idCounter + '';
- return prefix ? prefix + id : id;
- }
-
- // Start chaining a wrapped Underscore object.
- function chain(obj) {
- var instance = _(obj);
- instance._chain = true;
- return instance;
- }
-
- // Internal function to execute `sourceFunc` bound to `context` with optional
- // `args`. Determines whether to execute a function as a constructor or as a
- // normal function.
- function executeBound(sourceFunc, boundFunc, context, callingContext, args) {
- if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
- var self = baseCreate(sourceFunc.prototype);
- var result = sourceFunc.apply(self, args);
- if (isObject(result)) return result;
- return self;
- }
-
- // Partially apply a function by creating a version that has had some of its
- // arguments pre-filled, without changing its dynamic `this` context. `_` acts
- // as a placeholder by default, allowing any combination of arguments to be
- // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.
- var partial = restArguments(function(func, boundArgs) {
- var placeholder = partial.placeholder;
- var bound = function() {
- var position = 0, length = boundArgs.length;
- var args = Array(length);
- for (var i = 0; i < length; i++) {
- args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
- }
- while (position < arguments.length) args.push(arguments[position++]);
- return executeBound(func, bound, this, this, args);
- };
- return bound;
- });
-
- partial.placeholder = _;
-
- // Create a function bound to a given object (assigning `this`, and arguments,
- // optionally).
- var bind = restArguments(function(func, context, args) {
- if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');
- var bound = restArguments(function(callArgs) {
- return executeBound(func, bound, context, this, args.concat(callArgs));
- });
- return bound;
- });
-
- // Internal helper for collection methods to determine whether a collection
- // should be iterated as an array or as an object.
- // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
- // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
- var isArrayLike = createSizePropertyCheck(getLength);
-
- // Internal implementation of a recursive `flatten` function.
- function flatten(input, depth, strict, output) {
- output = output || [];
- if (!depth && depth !== 0) {
- depth = Infinity;
- } else if (depth <= 0) {
- return output.concat(input);
- }
- var idx = output.length;
- for (var i = 0, length = getLength(input); i < length; i++) {
- var value = input[i];
- if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {
- // Flatten current level of array or arguments object.
- if (depth > 1) {
- flatten(value, depth - 1, strict, output);
- idx = output.length;
- } else {
- var j = 0, len = value.length;
- while (j < len) output[idx++] = value[j++];
- }
- } else if (!strict) {
- output[idx++] = value;
- }
- }
- return output;
- }
-
- // Bind a number of an object's methods to that object. Remaining arguments
- // are the method names to be bound. Useful for ensuring that all callbacks
- // defined on an object belong to it.
- var bindAll = restArguments(function(obj, keys) {
- keys = flatten(keys, false, false);
- var index = keys.length;
- if (index < 1) throw new Error('bindAll must be passed function names');
- while (index--) {
- var key = keys[index];
- obj[key] = bind(obj[key], obj);
- }
- return obj;
- });
-
- // Memoize an expensive function by storing its results.
- function memoize(func, hasher) {
- var memoize = function(key) {
- var cache = memoize.cache;
- var address = '' + (hasher ? hasher.apply(this, arguments) : key);
- if (!has(cache, address)) cache[address] = func.apply(this, arguments);
- return cache[address];
- };
- memoize.cache = {};
- return memoize;
- }
-
- // Delays a function for the given number of milliseconds, and then calls
- // it with the arguments supplied.
- var delay = restArguments(function(func, wait, args) {
- return setTimeout(function() {
- return func.apply(null, args);
- }, wait);
- });
-
- // Defers a function, scheduling it to run after the current call stack has
- // cleared.
- var defer = partial(delay, _, 1);
-
- // Returns a function, that, when invoked, will only be triggered at most once
- // during a given window of time. Normally, the throttled function will run
- // as much as it can, without ever going more than once per `wait` duration;
- // but if you'd like to disable the execution on the leading edge, pass
- // `{leading: false}`. To disable execution on the trailing edge, ditto.
- function throttle(func, wait, options) {
- var timeout, context, args, result;
- var previous = 0;
- if (!options) options = {};
-
- var later = function() {
- previous = options.leading === false ? 0 : now();
- timeout = null;
- result = func.apply(context, args);
- if (!timeout) context = args = null;
- };
-
- var throttled = function() {
- var _now = now();
- if (!previous && options.leading === false) previous = _now;
- var remaining = wait - (_now - previous);
- context = this;
- args = arguments;
- if (remaining <= 0 || remaining > wait) {
- if (timeout) {
- clearTimeout(timeout);
- timeout = null;
- }
- previous = _now;
- result = func.apply(context, args);
- if (!timeout) context = args = null;
- } else if (!timeout && options.trailing !== false) {
- timeout = setTimeout(later, remaining);
- }
- return result;
- };
-
- throttled.cancel = function() {
- clearTimeout(timeout);
- previous = 0;
- timeout = context = args = null;
- };
-
- return throttled;
- }
-
- // When a sequence of calls of the returned function ends, the argument
- // function is triggered. The end of a sequence is defined by the `wait`
- // parameter. If `immediate` is passed, the argument function will be
- // triggered at the beginning of the sequence instead of at the end.
- function debounce(func, wait, immediate) {
- var timeout, previous, args, result, context;
-
- var later = function() {
- var passed = now() - previous;
- if (wait > passed) {
- timeout = setTimeout(later, wait - passed);
- } else {
- timeout = null;
- if (!immediate) result = func.apply(context, args);
- // This check is needed because `func` can recursively invoke `debounced`.
- if (!timeout) args = context = null;
- }
- };
-
- var debounced = restArguments(function(_args) {
- context = this;
- args = _args;
- previous = now();
- if (!timeout) {
- timeout = setTimeout(later, wait);
- if (immediate) result = func.apply(context, args);
- }
- return result;
- });
-
- debounced.cancel = function() {
- clearTimeout(timeout);
- timeout = args = context = null;
- };
-
- return debounced;
- }
-
- // Returns the first function passed as an argument to the second,
- // allowing you to adjust arguments, run code before and after, and
- // conditionally execute the original function.
- function wrap(func, wrapper) {
- return partial(wrapper, func);
- }
-
- // Returns a negated version of the passed-in predicate.
- function negate(predicate) {
- return function() {
- return !predicate.apply(this, arguments);
- };
- }
-
- // Returns a function that is the composition of a list of functions, each
- // consuming the return value of the function that follows.
- function compose() {
- var args = arguments;
- var start = args.length - 1;
- return function() {
- var i = start;
- var result = args[start].apply(this, arguments);
- while (i--) result = args[i].call(this, result);
- return result;
- };
- }
-
- // Returns a function that will only be executed on and after the Nth call.
- function after(times, func) {
- return function() {
- if (--times < 1) {
- return func.apply(this, arguments);
- }
- };
- }
-
- // Returns a function that will only be executed up to (but not including) the
- // Nth call.
- function before(times, func) {
- var memo;
- return function() {
- if (--times > 0) {
- memo = func.apply(this, arguments);
- }
- if (times <= 1) func = null;
- return memo;
- };
- }
-
- // Returns a function that will be executed at most one time, no matter how
- // often you call it. Useful for lazy initialization.
- var once = partial(before, 2);
-
- // Returns the first key on an object that passes a truth test.
- function findKey(obj, predicate, context) {
- predicate = cb(predicate, context);
- var _keys = keys(obj), key;
- for (var i = 0, length = _keys.length; i < length; i++) {
- key = _keys[i];
- if (predicate(obj[key], key, obj)) return key;
- }
- }
-
- // Internal function to generate `_.findIndex` and `_.findLastIndex`.
- function createPredicateIndexFinder(dir) {
- return function(array, predicate, context) {
- predicate = cb(predicate, context);
- var length = getLength(array);
- var index = dir > 0 ? 0 : length - 1;
- for (; index >= 0 && index < length; index += dir) {
- if (predicate(array[index], index, array)) return index;
- }
- return -1;
- };
- }
-
- // Returns the first index on an array-like that passes a truth test.
- var findIndex = createPredicateIndexFinder(1);
-
- // Returns the last index on an array-like that passes a truth test.
- var findLastIndex = createPredicateIndexFinder(-1);
-
- // Use a comparator function to figure out the smallest index at which
- // an object should be inserted so as to maintain order. Uses binary search.
- function sortedIndex(array, obj, iteratee, context) {
- iteratee = cb(iteratee, context, 1);
- var value = iteratee(obj);
- var low = 0, high = getLength(array);
- while (low < high) {
- var mid = Math.floor((low + high) / 2);
- if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
- }
- return low;
- }
-
- // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.
- function createIndexFinder(dir, predicateFind, sortedIndex) {
- return function(array, item, idx) {
- var i = 0, length = getLength(array);
- if (typeof idx == 'number') {
- if (dir > 0) {
- i = idx >= 0 ? idx : Math.max(idx + length, i);
- } else {
- length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
- }
- } else if (sortedIndex && idx && length) {
- idx = sortedIndex(array, item);
- return array[idx] === item ? idx : -1;
- }
- if (item !== item) {
- idx = predicateFind(slice.call(array, i, length), isNaN$1);
- return idx >= 0 ? idx + i : -1;
- }
- for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
- if (array[idx] === item) return idx;
- }
- return -1;
- };
- }
-
- // Return the position of the first occurrence of an item in an array,
- // or -1 if the item is not included in the array.
- // If the array is large and already in sort order, pass `true`
- // for **isSorted** to use binary search.
- var indexOf = createIndexFinder(1, findIndex, sortedIndex);
-
- // Return the position of the last occurrence of an item in an array,
- // or -1 if the item is not included in the array.
- var lastIndexOf = createIndexFinder(-1, findLastIndex);
-
- // Return the first value which passes a truth test.
- function find(obj, predicate, context) {
- var keyFinder = isArrayLike(obj) ? findIndex : findKey;
- var key = keyFinder(obj, predicate, context);
- if (key !== void 0 && key !== -1) return obj[key];
- }
-
- // Convenience version of a common use case of `_.find`: getting the first
- // object containing specific `key:value` pairs.
- function findWhere(obj, attrs) {
- return find(obj, matcher(attrs));
- }
-
- // The cornerstone for collection functions, an `each`
- // implementation, aka `forEach`.
- // Handles raw objects in addition to array-likes. Treats all
- // sparse array-likes as if they were dense.
- function each(obj, iteratee, context) {
- iteratee = optimizeCb(iteratee, context);
- var i, length;
- if (isArrayLike(obj)) {
- for (i = 0, length = obj.length; i < length; i++) {
- iteratee(obj[i], i, obj);
- }
- } else {
- var _keys = keys(obj);
- for (i = 0, length = _keys.length; i < length; i++) {
- iteratee(obj[_keys[i]], _keys[i], obj);
- }
- }
- return obj;
- }
-
- // Return the results of applying the iteratee to each element.
- function map(obj, iteratee, context) {
- iteratee = cb(iteratee, context);
- var _keys = !isArrayLike(obj) && keys(obj),
- length = (_keys || obj).length,
- results = Array(length);
- for (var index = 0; index < length; index++) {
- var currentKey = _keys ? _keys[index] : index;
- results[index] = iteratee(obj[currentKey], currentKey, obj);
- }
- return results;
- }
-
- // Internal helper to create a reducing function, iterating left or right.
- function createReduce(dir) {
- // Wrap code that reassigns argument variables in a separate function than
- // the one that accesses `arguments.length` to avoid a perf hit. (#1991)
- var reducer = function(obj, iteratee, memo, initial) {
- var _keys = !isArrayLike(obj) && keys(obj),
- length = (_keys || obj).length,
- index = dir > 0 ? 0 : length - 1;
- if (!initial) {
- memo = obj[_keys ? _keys[index] : index];
- index += dir;
- }
- for (; index >= 0 && index < length; index += dir) {
- var currentKey = _keys ? _keys[index] : index;
- memo = iteratee(memo, obj[currentKey], currentKey, obj);
- }
- return memo;
- };
-
- return function(obj, iteratee, memo, context) {
- var initial = arguments.length >= 3;
- return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);
- };
- }
-
- // **Reduce** builds up a single result from a list of values, aka `inject`,
- // or `foldl`.
- var reduce = createReduce(1);
-
- // The right-associative version of reduce, also known as `foldr`.
- var reduceRight = createReduce(-1);
-
- // Return all the elements that pass a truth test.
- function filter(obj, predicate, context) {
- var results = [];
- predicate = cb(predicate, context);
- each(obj, function(value, index, list) {
- if (predicate(value, index, list)) results.push(value);
- });
- return results;
- }
-
- // Return all the elements for which a truth test fails.
- function reject(obj, predicate, context) {
- return filter(obj, negate(cb(predicate)), context);
- }
-
- // Determine whether all of the elements pass a truth test.
- function every(obj, predicate, context) {
- predicate = cb(predicate, context);
- var _keys = !isArrayLike(obj) && keys(obj),
- length = (_keys || obj).length;
- for (var index = 0; index < length; index++) {
- var currentKey = _keys ? _keys[index] : index;
- if (!predicate(obj[currentKey], currentKey, obj)) return false;
- }
- return true;
- }
-
- // Determine if at least one element in the object passes a truth test.
- function some(obj, predicate, context) {
- predicate = cb(predicate, context);
- var _keys = !isArrayLike(obj) && keys(obj),
- length = (_keys || obj).length;
- for (var index = 0; index < length; index++) {
- var currentKey = _keys ? _keys[index] : index;
- if (predicate(obj[currentKey], currentKey, obj)) return true;
- }
- return false;
- }
-
- // Determine if the array or object contains a given item (using `===`).
- function contains(obj, item, fromIndex, guard) {
- if (!isArrayLike(obj)) obj = values(obj);
- if (typeof fromIndex != 'number' || guard) fromIndex = 0;
- return indexOf(obj, item, fromIndex) >= 0;
- }
-
- // Invoke a method (with arguments) on every item in a collection.
- var invoke = restArguments(function(obj, path, args) {
- var contextPath, func;
- if (isFunction$1(path)) {
- func = path;
- } else {
- path = toPath$1(path);
- contextPath = path.slice(0, -1);
- path = path[path.length - 1];
- }
- return map(obj, function(context) {
- var method = func;
- if (!method) {
- if (contextPath && contextPath.length) {
- context = deepGet(context, contextPath);
- }
- if (context == null) return void 0;
- method = context[path];
- }
- return method == null ? method : method.apply(context, args);
- });
- });
-
- // Convenience version of a common use case of `_.map`: fetching a property.
- function pluck(obj, key) {
- return map(obj, property(key));
- }
-
- // Convenience version of a common use case of `_.filter`: selecting only
- // objects containing specific `key:value` pairs.
- function where(obj, attrs) {
- return filter(obj, matcher(attrs));
- }
-
- // Return the maximum element (or element-based computation).
- function max(obj, iteratee, context) {
- var result = -Infinity, lastComputed = -Infinity,
- value, computed;
- if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
- obj = isArrayLike(obj) ? obj : values(obj);
- for (var i = 0, length = obj.length; i < length; i++) {
- value = obj[i];
- if (value != null && value > result) {
- result = value;
- }
- }
- } else {
- iteratee = cb(iteratee, context);
- each(obj, function(v, index, list) {
- computed = iteratee(v, index, list);
- if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
- result = v;
- lastComputed = computed;
- }
- });
- }
- return result;
- }
-
- // Return the minimum element (or element-based computation).
- function min(obj, iteratee, context) {
- var result = Infinity, lastComputed = Infinity,
- value, computed;
- if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
- obj = isArrayLike(obj) ? obj : values(obj);
- for (var i = 0, length = obj.length; i < length; i++) {
- value = obj[i];
- if (value != null && value < result) {
- result = value;
- }
- }
- } else {
- iteratee = cb(iteratee, context);
- each(obj, function(v, index, list) {
- computed = iteratee(v, index, list);
- if (computed < lastComputed || computed === Infinity && result === Infinity) {
- result = v;
- lastComputed = computed;
- }
- });
- }
- return result;
- }
-
- // Sample **n** random values from a collection using the modern version of the
- // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
- // If **n** is not specified, returns a single random element.
- // The internal `guard` argument allows it to work with `_.map`.
- function sample(obj, n, guard) {
- if (n == null || guard) {
- if (!isArrayLike(obj)) obj = values(obj);
- return obj[random(obj.length - 1)];
- }
- var sample = isArrayLike(obj) ? clone(obj) : values(obj);
- var length = getLength(sample);
- n = Math.max(Math.min(n, length), 0);
- var last = length - 1;
- for (var index = 0; index < n; index++) {
- var rand = random(index, last);
- var temp = sample[index];
- sample[index] = sample[rand];
- sample[rand] = temp;
- }
- return sample.slice(0, n);
- }
-
- // Shuffle a collection.
- function shuffle(obj) {
- return sample(obj, Infinity);
- }
-
- // Sort the object's values by a criterion produced by an iteratee.
- function sortBy(obj, iteratee, context) {
- var index = 0;
- iteratee = cb(iteratee, context);
- return pluck(map(obj, function(value, key, list) {
- return {
- value: value,
- index: index++,
- criteria: iteratee(value, key, list)
- };
- }).sort(function(left, right) {
- var a = left.criteria;
- var b = right.criteria;
- if (a !== b) {
- if (a > b || a === void 0) return 1;
- if (a < b || b === void 0) return -1;
- }
- return left.index - right.index;
- }), 'value');
- }
-
- // An internal function used for aggregate "group by" operations.
- function group(behavior, partition) {
- return function(obj, iteratee, context) {
- var result = partition ? [[], []] : {};
- iteratee = cb(iteratee, context);
- each(obj, function(value, index) {
- var key = iteratee(value, index, obj);
- behavior(result, value, key);
- });
- return result;
- };
- }
-
- // Groups the object's values by a criterion. Pass either a string attribute
- // to group by, or a function that returns the criterion.
- var groupBy = group(function(result, value, key) {
- if (has(result, key)) result[key].push(value); else result[key] = [value];
- });
-
- // Indexes the object's values by a criterion, similar to `_.groupBy`, but for
- // when you know that your index values will be unique.
- var indexBy = group(function(result, value, key) {
- result[key] = value;
- });
-
- // Counts instances of an object that group by a certain criterion. Pass
- // either a string attribute to count by, or a function that returns the
- // criterion.
- var countBy = group(function(result, value, key) {
- if (has(result, key)) result[key]++; else result[key] = 1;
- });
-
- // Split a collection into two arrays: one whose elements all pass the given
- // truth test, and one whose elements all do not pass the truth test.
- var partition = group(function(result, value, pass) {
- result[pass ? 0 : 1].push(value);
- }, true);
-
- // Safely create a real, live array from anything iterable.
- var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
- function toArray(obj) {
- if (!obj) return [];
- if (isArray(obj)) return slice.call(obj);
- if (isString(obj)) {
- // Keep surrogate pair characters together.
- return obj.match(reStrSymbol);
- }
- if (isArrayLike(obj)) return map(obj, identity);
- return values(obj);
- }
-
- // Return the number of elements in a collection.
- function size(obj) {
- if (obj == null) return 0;
- return isArrayLike(obj) ? obj.length : keys(obj).length;
- }
-
- // Internal `_.pick` helper function to determine whether `key` is an enumerable
- // property name of `obj`.
- function keyInObj(value, key, obj) {
- return key in obj;
- }
-
- // Return a copy of the object only containing the allowed properties.
- var pick = restArguments(function(obj, keys) {
- var result = {}, iteratee = keys[0];
- if (obj == null) return result;
- if (isFunction$1(iteratee)) {
- if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);
- keys = allKeys(obj);
- } else {
- iteratee = keyInObj;
- keys = flatten(keys, false, false);
- obj = Object(obj);
- }
- for (var i = 0, length = keys.length; i < length; i++) {
- var key = keys[i];
- var value = obj[key];
- if (iteratee(value, key, obj)) result[key] = value;
- }
- return result;
- });
-
- // Return a copy of the object without the disallowed properties.
- var omit = restArguments(function(obj, keys) {
- var iteratee = keys[0], context;
- if (isFunction$1(iteratee)) {
- iteratee = negate(iteratee);
- if (keys.length > 1) context = keys[1];
- } else {
- keys = map(flatten(keys, false, false), String);
- iteratee = function(value, key) {
- return !contains(keys, key);
- };
- }
- return pick(obj, iteratee, context);
- });
-
- // Returns everything but the last entry of the array. Especially useful on
- // the arguments object. Passing **n** will return all the values in
- // the array, excluding the last N.
- function initial(array, n, guard) {
- return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
- }
-
- // Get the first element of an array. Passing **n** will return the first N
- // values in the array. The **guard** check allows it to work with `_.map`.
- function first(array, n, guard) {
- if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
- if (n == null || guard) return array[0];
- return initial(array, array.length - n);
- }
-
- // Returns everything but the first entry of the `array`. Especially useful on
- // the `arguments` object. Passing an **n** will return the rest N values in the
- // `array`.
- function rest(array, n, guard) {
- return slice.call(array, n == null || guard ? 1 : n);
- }
-
- // Get the last element of an array. Passing **n** will return the last N
- // values in the array.
- function last(array, n, guard) {
- if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
- if (n == null || guard) return array[array.length - 1];
- return rest(array, Math.max(0, array.length - n));
- }
-
- // Trim out all falsy values from an array.
- function compact(array) {
- return filter(array, Boolean);
- }
-
- // Flatten out an array, either recursively (by default), or up to `depth`.
- // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.
- function flatten$1(array, depth) {
- return flatten(array, depth, false);
- }
-
- // Take the difference between one array and a number of other arrays.
- // Only the elements present in just the first array will remain.
- var difference = restArguments(function(array, rest) {
- rest = flatten(rest, true, true);
- return filter(array, function(value){
- return !contains(rest, value);
- });
- });
-
- // Return a version of the array that does not contain the specified value(s).
- var without = restArguments(function(array, otherArrays) {
- return difference(array, otherArrays);
- });
-
- // Produce a duplicate-free version of the array. If the array has already
- // been sorted, you have the option of using a faster algorithm.
- // The faster algorithm will not work with an iteratee if the iteratee
- // is not a one-to-one function, so providing an iteratee will disable
- // the faster algorithm.
- function uniq(array, isSorted, iteratee, context) {
- if (!isBoolean(isSorted)) {
- context = iteratee;
- iteratee = isSorted;
- isSorted = false;
- }
- if (iteratee != null) iteratee = cb(iteratee, context);
- var result = [];
- var seen = [];
- for (var i = 0, length = getLength(array); i < length; i++) {
- var value = array[i],
- computed = iteratee ? iteratee(value, i, array) : value;
- if (isSorted && !iteratee) {
- if (!i || seen !== computed) result.push(value);
- seen = computed;
- } else if (iteratee) {
- if (!contains(seen, computed)) {
- seen.push(computed);
- result.push(value);
- }
- } else if (!contains(result, value)) {
- result.push(value);
- }
- }
- return result;
- }
-
- // Produce an array that contains the union: each distinct element from all of
- // the passed-in arrays.
- var union = restArguments(function(arrays) {
- return uniq(flatten(arrays, true, true));
- });
-
- // Produce an array that contains every item shared between all the
- // passed-in arrays.
- function intersection(array) {
- var result = [];
- var argsLength = arguments.length;
- for (var i = 0, length = getLength(array); i < length; i++) {
- var item = array[i];
- if (contains(result, item)) continue;
- var j;
- for (j = 1; j < argsLength; j++) {
- if (!contains(arguments[j], item)) break;
- }
- if (j === argsLength) result.push(item);
- }
- return result;
- }
-
- // Complement of zip. Unzip accepts an array of arrays and groups
- // each array's elements on shared indices.
- function unzip(array) {
- var length = array && max(array, getLength).length || 0;
- var result = Array(length);
-
- for (var index = 0; index < length; index++) {
- result[index] = pluck(array, index);
- }
- return result;
- }
-
- // Zip together multiple lists into a single array -- elements that share
- // an index go together.
- var zip = restArguments(unzip);
-
- // Converts lists into objects. Pass either a single array of `[key, value]`
- // pairs, or two parallel arrays of the same length -- one of keys, and one of
- // the corresponding values. Passing by pairs is the reverse of `_.pairs`.
- function object(list, values) {
- var result = {};
- for (var i = 0, length = getLength(list); i < length; i++) {
- if (values) {
- result[list[i]] = values[i];
- } else {
- result[list[i][0]] = list[i][1];
- }
- }
- return result;
- }
-
- // Generate an integer Array containing an arithmetic progression. A port of
- // the native Python `range()` function. See
- // [the Python documentation](https://docs.python.org/library/functions.html#range).
- function range(start, stop, step) {
- if (stop == null) {
- stop = start || 0;
- start = 0;
- }
- if (!step) {
- step = stop < start ? -1 : 1;
- }
-
- var length = Math.max(Math.ceil((stop - start) / step), 0);
- var range = Array(length);
-
- for (var idx = 0; idx < length; idx++, start += step) {
- range[idx] = start;
- }
-
- return range;
- }
-
- // Chunk a single array into multiple arrays, each containing `count` or fewer
- // items.
- function chunk(array, count) {
- if (count == null || count < 1) return [];
- var result = [];
- var i = 0, length = array.length;
- while (i < length) {
- result.push(slice.call(array, i, i += count));
- }
- return result;
- }
-
- // Helper function to continue chaining intermediate results.
- function chainResult(instance, obj) {
- return instance._chain ? _(obj).chain() : obj;
- }
-
- // Add your own custom functions to the Underscore object.
- function mixin(obj) {
- each(functions(obj), function(name) {
- var func = _[name] = obj[name];
- _.prototype[name] = function() {
- var args = [this._wrapped];
- push.apply(args, arguments);
- return chainResult(this, func.apply(_, args));
- };
- });
- return _;
- }
-
- // Add all mutator `Array` functions to the wrapper.
- each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
- var method = ArrayProto[name];
- _.prototype[name] = function() {
- var obj = this._wrapped;
- if (obj != null) {
- method.apply(obj, arguments);
- if ((name === 'shift' || name === 'splice') && obj.length === 0) {
- delete obj[0];
- }
- }
- return chainResult(this, obj);
- };
- });
-
- // Add all accessor `Array` functions to the wrapper.
- each(['concat', 'join', 'slice'], function(name) {
- var method = ArrayProto[name];
- _.prototype[name] = function() {
- var obj = this._wrapped;
- if (obj != null) obj = method.apply(obj, arguments);
- return chainResult(this, obj);
- };
- });
-
- // Named Exports
-
- var allExports = {
- __proto__: null,
- VERSION: VERSION,
- restArguments: restArguments,
- isObject: isObject,
- isNull: isNull,
- isUndefined: isUndefined,
- isBoolean: isBoolean,
- isElement: isElement,
- isString: isString,
- isNumber: isNumber,
- isDate: isDate,
- isRegExp: isRegExp,
- isError: isError,
- isSymbol: isSymbol,
- isArrayBuffer: isArrayBuffer,
- isDataView: isDataView$1,
- isArray: isArray,
- isFunction: isFunction$1,
- isArguments: isArguments$1,
- isFinite: isFinite$1,
- isNaN: isNaN$1,
- isTypedArray: isTypedArray$1,
- isEmpty: isEmpty,
- isMatch: isMatch,
- isEqual: isEqual,
- isMap: isMap,
- isWeakMap: isWeakMap,
- isSet: isSet,
- isWeakSet: isWeakSet,
- keys: keys,
- allKeys: allKeys,
- values: values,
- pairs: pairs,
- invert: invert,
- functions: functions,
- methods: functions,
- extend: extend,
- extendOwn: extendOwn,
- assign: extendOwn,
- defaults: defaults,
- create: create,
- clone: clone,
- tap: tap,
- get: get,
- has: has$1,
- mapObject: mapObject,
- identity: identity,
- constant: constant,
- noop: noop,
- toPath: toPath,
- property: property,
- propertyOf: propertyOf,
- matcher: matcher,
- matches: matcher,
- times: times,
- random: random,
- now: now,
- escape: _escape,
- unescape: _unescape,
- templateSettings: templateSettings,
- template: template,
- result: result,
- uniqueId: uniqueId,
- chain: chain,
- iteratee: iteratee,
- partial: partial,
- bind: bind,
- bindAll: bindAll,
- memoize: memoize,
- delay: delay,
- defer: defer,
- throttle: throttle,
- debounce: debounce,
- wrap: wrap,
- negate: negate,
- compose: compose,
- after: after,
- before: before,
- once: once,
- findKey: findKey,
- findIndex: findIndex,
- findLastIndex: findLastIndex,
- sortedIndex: sortedIndex,
- indexOf: indexOf,
- lastIndexOf: lastIndexOf,
- find: find,
- detect: find,
- findWhere: findWhere,
- each: each,
- forEach: each,
- map: map,
- collect: map,
- reduce: reduce,
- foldl: reduce,
- inject: reduce,
- reduceRight: reduceRight,
- foldr: reduceRight,
- filter: filter,
- select: filter,
- reject: reject,
- every: every,
- all: every,
- some: some,
- any: some,
- contains: contains,
- includes: contains,
- include: contains,
- invoke: invoke,
- pluck: pluck,
- where: where,
- max: max,
- min: min,
- shuffle: shuffle,
- sample: sample,
- sortBy: sortBy,
- groupBy: groupBy,
- indexBy: indexBy,
- countBy: countBy,
- partition: partition,
- toArray: toArray,
- size: size,
- pick: pick,
- omit: omit,
- first: first,
- head: first,
- take: first,
- initial: initial,
- last: last,
- rest: rest,
- tail: rest,
- drop: rest,
- compact: compact,
- flatten: flatten$1,
- without: without,
- uniq: uniq,
- unique: uniq,
- union: union,
- intersection: intersection,
- difference: difference,
- unzip: unzip,
- transpose: unzip,
- zip: zip,
- object: object,
- range: range,
- chunk: chunk,
- mixin: mixin,
- 'default': _
- };
-
- // Default Export
-
- // Add all of the Underscore functions to the wrapper object.
- var _$1 = mixin(allExports);
- // Legacy Node.js API.
- _$1._ = _$1;
-
- return _$1;
-
-})));
-//# sourceMappingURL=underscore.js.map
diff --git a/doc/_static/underscore.js b/doc/_static/underscore.js
index 166240e..709ae8e 100644
--- a/doc/_static/underscore.js
+++ b/doc/_static/underscore.js
@@ -1,6 +1,1707 @@
-!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define("underscore",r):(n=n||self,function(){var t=n._,e=n._=r();e.noConflict=function(){return n._=t,e}}())}(this,(function(){
-// Underscore.js 1.12.0
-// https://underscorejs.org
-// (c) 2009-2020 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+// Underscore.js 1.9.1
+// http://underscorejs.org
+// (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
// Underscore may be freely distributed under the MIT license.
-var n="1.12.0",r="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},t=Array.prototype,e=Object.prototype,u="undefined"!=typeof Symbol?Symbol.prototype:null,o=t.push,i=t.slice,a=e.toString,f=e.hasOwnProperty,c="undefined"!=typeof ArrayBuffer,l="undefined"!=typeof DataView,s=Array.isArray,p=Object.keys,v=Object.create,h=c&&ArrayBuffer.isView,y=isNaN,g=isFinite,d=!{toString:null}.propertyIsEnumerable("toString"),b=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],m=Math.pow(2,53)-1;function j(n,r){return r=null==r?n.length-1:+r,function(){for(var t=Math.max(arguments.length-r,0),e=Array(t),u=0;u<t;u++)e[u]=arguments[u+r];switch(r){case 0:return n.call(this,e);case 1:return n.call(this,arguments[0],e);case 2:return n.call(this,arguments[0],arguments[1],e)}var o=Array(r+1);for(u=0;u<r;u++)o[u]=arguments[u];return o[r]=e,n.apply(this,o)}}function _(n){var r=typeof n;return"function"===r||"object"===r&&!!n}function w(n){return void 0===n}function A(n){return!0===n||!1===n||"[object Boolean]"===a.call(n)}function x(n){var r="[object "+n+"]";return function(n){return a.call(n)===r}}var S=x("String"),O=x("Number"),M=x("Date"),E=x("RegExp"),B=x("Error"),N=x("Symbol"),I=x("ArrayBuffer"),k=x("Function"),T=r.document&&r.document.childNodes;"function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof T&&(k=function(n){return"function"==typeof n||!1});var D=k,R=x("Object"),F=l&&R(new DataView(new ArrayBuffer(8))),V="undefined"!=typeof Map&&R(new Map),P=x("DataView");var q=F?function(n){return null!=n&&D(n.getInt8)&&I(n.buffer)}:P,U=s||x("Array");function W(n,r){return null!=n&&f.call(n,r)}var z=x("Arguments");!function(){z(arguments)||(z=function(n){return W(n,"callee")})}();var L=z;function C(n){return O(n)&&y(n)}function K(n){return function(){return n}}function J(n){return function(r){var t=n(r);return"number"==typeof t&&t>=0&&t<=m}}function $(n){return function(r){return null==r?void 0:r[n]}}var G=$("byteLength"),H=J(G),Q=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;var X=c?function(n){return h?h(n)&&!q(n):H(n)&&Q.test(a.call(n))}:K(!1),Y=$("length");function Z(n,r){r=function(n){for(var r={},t=n.length,e=0;e<t;++e)r[n[e]]=!0;return{contains:function(n){return r[n]},push:function(t){return r[t]=!0,n.push(t)}}}(r);var t=b.length,u=n.constructor,o=D(u)&&u.prototype||e,i="constructor";for(W(n,i)&&!r.contains(i)&&r.push(i);t--;)(i=b[t])in n&&n[i]!==o[i]&&!r.contains(i)&&r.push(i)}function nn(n){if(!_(n))return[];if(p)return p(n);var r=[];for(var t in n)W(n,t)&&r.push(t);return d&&Z(n,r),r}function rn(n,r){var t=nn(r),e=t.length;if(null==n)return!e;for(var u=Object(n),o=0;o<e;o++){var i=t[o];if(r[i]!==u[i]||!(i in u))return!1}return!0}function tn(n){return n instanceof tn?n:this instanceof tn?void(this._wrapped=n):new tn(n)}function en(n){return new Uint8Array(n.buffer||n,n.byteOffset||0,G(n))}tn.VERSION=n,tn.prototype.value=function(){return this._wrapped},tn.prototype.valueOf=tn.prototype.toJSON=tn.prototype.value,tn.prototype.toString=function(){return String(this._wrapped)};var un="[object DataView]";function on(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(null==n||null==r)return!1;if(n!=n)return r!=r;var o=typeof n;return("function"===o||"object"===o||"object"==typeof r)&&function n(r,t,e,o){r instanceof tn&&(r=r._wrapped);t instanceof tn&&(t=t._wrapped);var i=a.call(r);if(i!==a.call(t))return!1;if(F&&"[object Object]"==i&&q(r)){if(!q(t))return!1;i=un}switch(i){case"[object RegExp]":case"[object String]":return""+r==""+t;case"[object Number]":return+r!=+r?+t!=+t:0==+r?1/+r==1/t:+r==+t;case"[object Date]":case"[object Boolean]":return+r==+t;case"[object Symbol]":return u.valueOf.call(r)===u.valueOf.call(t);case"[object ArrayBuffer]":case un:return n(en(r),en(t),e,o)}var f="[object Array]"===i;if(!f&&X(r)){if(G(r)!==G(t))return!1;if(r.buffer===t.buffer&&r.byteOffset===t.byteOffset)return!0;f=!0}if(!f){if("object"!=typeof r||"object"!=typeof t)return!1;var c=r.constructor,l=t.constructor;if(c!==l&&!(D(c)&&c instanceof c&&D(l)&&l instanceof l)&&"constructor"in r&&"constructor"in t)return!1}o=o||[];var s=(e=e||[]).length;for(;s--;)if(e[s]===r)return o[s]===t;if(e.push(r),o.push(t),f){if((s=r.length)!==t.length)return!1;for(;s--;)if(!on(r[s],t[s],e,o))return!1}else{var p,v=nn(r);if(s=v.length,nn(t).length!==s)return!1;for(;s--;)if(p=v[s],!W(t,p)||!on(r[p],t[p],e,o))return!1}return e.pop(),o.pop(),!0}(n,r,t,e)}function an(n){if(!_(n))return[];var r=[];for(var t in n)r.push(t);return d&&Z(n,r),r}function fn(n){var r=Y(n);return function(t){if(null==t)return!1;var e=an(t);if(Y(e))return!1;for(var u=0;u<r;u++)if(!D(t[n[u]]))return!1;return n!==hn||!D(t[cn])}}var cn="forEach",ln="has",sn=["clear","delete"],pn=["get",ln,"set"],vn=sn.concat(cn,pn),hn=sn.concat(pn),yn=["add"].concat(sn,cn,ln),gn=V?fn(vn):x("Map"),dn=V?fn(hn):x("WeakMap"),bn=V?fn(yn):x("Set"),mn=x("WeakSet");function jn(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=n[r[u]];return e}function _n(n){for(var r={},t=nn(n),e=0,u=t.length;e<u;e++)r[n[t[e]]]=t[e];return r}function wn(n){var r=[];for(var t in n)D(n[t])&&r.push(t);return r.sort()}function An(n,r){return function(t){var e=arguments.length;if(r&&(t=Object(t)),e<2||null==t)return t;for(var u=1;u<e;u++)for(var o=arguments[u],i=n(o),a=i.length,f=0;f<a;f++){var c=i[f];r&&void 0!==t[c]||(t[c]=o[c])}return t}}var xn=An(an),Sn=An(nn),On=An(an,!0);function Mn(n){if(!_(n))return{};if(v)return v(n);var r=function(){};r.prototype=n;var t=new r;return r.prototype=null,t}function En(n){return _(n)?U(n)?n.slice():xn({},n):n}function Bn(n){return U(n)?n:[n]}function Nn(n){return tn.toPath(n)}function In(n,r){for(var t=r.length,e=0;e<t;e++){if(null==n)return;n=n[r[e]]}return t?n:void 0}function kn(n,r,t){var e=In(n,Nn(r));return w(e)?t:e}function Tn(n){return n}function Dn(n){return n=Sn({},n),function(r){return rn(r,n)}}function Rn(n){return n=Nn(n),function(r){return In(r,n)}}function Fn(n,r,t){if(void 0===r)return n;switch(null==t?3:t){case 1:return function(t){return n.call(r,t)};case 3:return function(t,e,u){return n.call(r,t,e,u)};case 4:return function(t,e,u,o){return n.call(r,t,e,u,o)}}return function(){return n.apply(r,arguments)}}function Vn(n,r,t){return null==n?Tn:D(n)?Fn(n,r,t):_(n)&&!U(n)?Dn(n):Rn(n)}function Pn(n,r){return Vn(n,r,1/0)}function qn(n,r,t){return tn.iteratee!==Pn?tn.iteratee(n,r):Vn(n,r,t)}function Un(){}function Wn(n,r){return null==r&&(r=n,n=0),n+Math.floor(Math.random()*(r-n+1))}tn.toPath=Bn,tn.iteratee=Pn;var zn=Date.now||function(){return(new Date).getTime()};function Ln(n){var r=function(r){return n[r]},t="(?:"+nn(n).join("|")+")",e=RegExp(t),u=RegExp(t,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,r):n}}var Cn={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},Kn=Ln(Cn),Jn=Ln(_n(Cn)),$n=tn.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Gn=/(.)^/,Hn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Qn=/\\|'|\r|\n|\u2028|\u2029/g;function Xn(n){return"\\"+Hn[n]}var Yn=0;function Zn(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=Mn(n.prototype),i=n.apply(o,u);return _(i)?i:o}var nr=j((function(n,r){var t=nr.placeholder,e=function(){for(var u=0,o=r.length,i=Array(o),a=0;a<o;a++)i[a]=r[a]===t?arguments[u++]:r[a];for(;u<arguments.length;)i.push(arguments[u++]);return Zn(n,e,this,this,i)};return e}));nr.placeholder=tn;var rr=j((function(n,r,t){if(!D(n))throw new TypeError("Bind must be called on a function");var e=j((function(u){return Zn(n,e,r,this,t.concat(u))}));return e})),tr=J(Y);function er(n,r,t,e){if(e=e||[],r||0===r){if(r<=0)return e.concat(n)}else r=1/0;for(var u=e.length,o=0,i=Y(n);o<i;o++){var a=n[o];if(tr(a)&&(U(a)||L(a)))if(r>1)er(a,r-1,t,e),u=e.length;else for(var f=0,c=a.length;f<c;)e[u++]=a[f++];else t||(e[u++]=a)}return e}var ur=j((function(n,r){var t=(r=er(r,!1,!1)).length;if(t<1)throw new Error("bindAll must be passed function names");for(;t--;){var e=r[t];n[e]=rr(n[e],n)}return n}));var or=j((function(n,r,t){return setTimeout((function(){return n.apply(null,t)}),r)})),ir=nr(or,tn,1);function ar(n){return function(){return!n.apply(this,arguments)}}function fr(n,r){var t;return function(){return--n>0&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}}var cr=nr(fr,2);function lr(n,r,t){r=qn(r,t);for(var e,u=nn(n),o=0,i=u.length;o<i;o++)if(r(n[e=u[o]],e,n))return e}function sr(n){return function(r,t,e){t=qn(t,e);for(var u=Y(r),o=n>0?0:u-1;o>=0&&o<u;o+=n)if(t(r[o],o,r))return o;return-1}}var pr=sr(1),vr=sr(-1);function hr(n,r,t,e){for(var u=(t=qn(t,e,1))(r),o=0,i=Y(n);o<i;){var a=Math.floor((o+i)/2);t(n[a])<u?o=a+1:i=a}return o}function yr(n,r,t){return function(e,u,o){var a=0,f=Y(e);if("number"==typeof o)n>0?a=o>=0?o:Math.max(o+f,a):f=o>=0?Math.min(o+1,f):o+f+1;else if(t&&o&&f)return e[o=t(e,u)]===u?o:-1;if(u!=u)return(o=r(i.call(e,a,f),C))>=0?o+a:-1;for(o=n>0?a:f-1;o>=0&&o<f;o+=n)if(e[o]===u)return o;return-1}}var gr=yr(1,pr,hr),dr=yr(-1,vr);function br(n,r,t){var e=(tr(n)?pr:lr)(n,r,t);if(void 0!==e&&-1!==e)return n[e]}function mr(n,r,t){var e,u;if(r=Fn(r,t),tr(n))for(e=0,u=n.length;e<u;e++)r(n[e],e,n);else{var o=nn(n);for(e=0,u=o.length;e<u;e++)r(n[o[e]],o[e],n)}return n}function jr(n,r,t){r=qn(r,t);for(var e=!tr(n)&&nn(n),u=(e||n).length,o=Array(u),i=0;i<u;i++){var a=e?e[i]:i;o[i]=r(n[a],a,n)}return o}function _r(n){var r=function(r,t,e,u){var o=!tr(r)&&nn(r),i=(o||r).length,a=n>0?0:i-1;for(u||(e=r[o?o[a]:a],a+=n);a>=0&&a<i;a+=n){var f=o?o[a]:a;e=t(e,r[f],f,r)}return e};return function(n,t,e,u){var o=arguments.length>=3;return r(n,Fn(t,u,4),e,o)}}var wr=_r(1),Ar=_r(-1);function xr(n,r,t){var e=[];return r=qn(r,t),mr(n,(function(n,t,u){r(n,t,u)&&e.push(n)})),e}function Sr(n,r,t){r=qn(r,t);for(var e=!tr(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(!r(n[i],i,n))return!1}return!0}function Or(n,r,t){r=qn(r,t);for(var e=!tr(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(r(n[i],i,n))return!0}return!1}function Mr(n,r,t,e){return tr(n)||(n=jn(n)),("number"!=typeof t||e)&&(t=0),gr(n,r,t)>=0}var Er=j((function(n,r,t){var e,u;return D(r)?u=r:(r=Nn(r),e=r.slice(0,-1),r=r[r.length-1]),jr(n,(function(n){var o=u;if(!o){if(e&&e.length&&(n=In(n,e)),null==n)return;o=n[r]}return null==o?o:o.apply(n,t)}))}));function Br(n,r){return jr(n,Rn(r))}function Nr(n,r,t){var e,u,o=-1/0,i=-1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=tr(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e>o&&(o=e);else r=qn(r,t),mr(n,(function(n,t,e){((u=r(n,t,e))>i||u===-1/0&&o===-1/0)&&(o=n,i=u)}));return o}function Ir(n,r,t){if(null==r||t)return tr(n)||(n=jn(n)),n[Wn(n.length-1)];var e=tr(n)?En(n):jn(n),u=Y(e);r=Math.max(Math.min(r,u),0);for(var o=u-1,i=0;i<r;i++){var a=Wn(i,o),f=e[i];e[i]=e[a],e[a]=f}return e.slice(0,r)}function kr(n,r){return function(t,e,u){var o=r?[[],[]]:{};return e=qn(e,u),mr(t,(function(r,u){var i=e(r,u,t);n(o,r,i)})),o}}var Tr=kr((function(n,r,t){W(n,t)?n[t].push(r):n[t]=[r]})),Dr=kr((function(n,r,t){n[t]=r})),Rr=kr((function(n,r,t){W(n,t)?n[t]++:n[t]=1})),Fr=kr((function(n,r,t){n[t?0:1].push(r)}),!0),Vr=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function Pr(n,r,t){return r in t}var qr=j((function(n,r){var t={},e=r[0];if(null==n)return t;D(e)?(r.length>1&&(e=Fn(e,r[1])),r=an(n)):(e=Pr,r=er(r,!1,!1),n=Object(n));for(var u=0,o=r.length;u<o;u++){var i=r[u],a=n[i];e(a,i,n)&&(t[i]=a)}return t})),Ur=j((function(n,r){var t,e=r[0];return D(e)?(e=ar(e),r.length>1&&(t=r[1])):(r=jr(er(r,!1,!1),String),e=function(n,t){return!Mr(r,t)}),qr(n,e,t)}));function Wr(n,r,t){return i.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))}function zr(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[0]:Wr(n,n.length-r)}function Lr(n,r,t){return i.call(n,null==r||t?1:r)}var Cr=j((function(n,r){return r=er(r,!0,!0),xr(n,(function(n){return!Mr(r,n)}))})),Kr=j((function(n,r){return Cr(n,r)}));function Jr(n,r,t,e){A(r)||(e=t,t=r,r=!1),null!=t&&(t=qn(t,e));for(var u=[],o=[],i=0,a=Y(n);i<a;i++){var f=n[i],c=t?t(f,i,n):f;r&&!t?(i&&o===c||u.push(f),o=c):t?Mr(o,c)||(o.push(c),u.push(f)):Mr(u,f)||u.push(f)}return u}var $r=j((function(n){return Jr(er(n,!0,!0))}));function Gr(n){for(var r=n&&Nr(n,Y).length||0,t=Array(r),e=0;e<r;e++)t[e]=Br(n,e);return t}var Hr=j(Gr);function Qr(n,r){return n._chain?tn(r).chain():r}function Xr(n){return mr(wn(n),(function(r){var t=tn[r]=n[r];tn.prototype[r]=function(){var n=[this._wrapped];return o.apply(n,arguments),Qr(this,t.apply(tn,n))}})),tn}mr(["pop","push","reverse","shift","sort","splice","unshift"],(function(n){var r=t[n];tn.prototype[n]=function(){var t=this._wrapped;return null!=t&&(r.apply(t,arguments),"shift"!==n&&"splice"!==n||0!==t.length||delete t[0]),Qr(this,t)}})),mr(["concat","join","slice"],(function(n){var r=t[n];tn.prototype[n]=function(){var n=this._wrapped;return null!=n&&(n=r.apply(n,arguments)),Qr(this,n)}}));var Yr=Xr({__proto__:null,VERSION:n,restArguments:j,isObject:_,isNull:function(n){return null===n},isUndefined:w,isBoolean:A,isElement:function(n){return!(!n||1!==n.nodeType)},isString:S,isNumber:O,isDate:M,isRegExp:E,isError:B,isSymbol:N,isArrayBuffer:I,isDataView:q,isArray:U,isFunction:D,isArguments:L,isFinite:function(n){return!N(n)&&g(n)&&!isNaN(parseFloat(n))},isNaN:C,isTypedArray:X,isEmpty:function(n){if(null==n)return!0;var r=Y(n);return"number"==typeof r&&(U(n)||S(n)||L(n))?0===r:0===Y(nn(n))},isMatch:rn,isEqual:function(n,r){return on(n,r)},isMap:gn,isWeakMap:dn,isSet:bn,isWeakSet:mn,keys:nn,allKeys:an,values:jn,pairs:function(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=[r[u],n[r[u]]];return e},invert:_n,functions:wn,methods:wn,extend:xn,extendOwn:Sn,assign:Sn,defaults:On,create:function(n,r){var t=Mn(n);return r&&Sn(t,r),t},clone:En,tap:function(n,r){return r(n),n},get:kn,has:function(n,r){for(var t=(r=Nn(r)).length,e=0;e<t;e++){var u=r[e];if(!W(n,u))return!1;n=n[u]}return!!t},mapObject:function(n,r,t){r=qn(r,t);for(var e=nn(n),u=e.length,o={},i=0;i<u;i++){var a=e[i];o[a]=r(n[a],a,n)}return o},identity:Tn,constant:K,noop:Un,toPath:Bn,property:Rn,propertyOf:function(n){return null==n?Un:function(r){return kn(n,r)}},matcher:Dn,matches:Dn,times:function(n,r,t){var e=Array(Math.max(0,n));r=Fn(r,t,1);for(var u=0;u<n;u++)e[u]=r(u);return e},random:Wn,now:zn,escape:Kn,unescape:Jn,templateSettings:$n,template:function(n,r,t){!r&&t&&(r=t),r=On({},r,tn.templateSettings);var e,u=RegExp([(r.escape||Gn).source,(r.interpolate||Gn).source,(r.evaluate||Gn).source].join("|")+"|$","g"),o=0,i="__p+='";n.replace(u,(function(r,t,e,u,a){return i+=n.slice(o,a).replace(Qn,Xn),o=a+r.length,t?i+="'+\n((__t=("+t+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":u&&(i+="';\n"+u+"\n__p+='"),r})),i+="';\n",r.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{e=new Function(r.variable||"obj","_",i)}catch(n){throw n.source=i,n}var a=function(n){return e.call(this,n,tn)},f=r.variable||"obj";return a.source="function("+f+"){\n"+i+"}",a},result:function(n,r,t){var e=(r=Nn(r)).length;if(!e)return D(t)?t.call(n):t;for(var u=0;u<e;u++){var o=null==n?void 0:n[r[u]];void 0===o&&(o=t,u=e),n=D(o)?o.call(n):o}return n},uniqueId:function(n){var r=++Yn+"";return n?n+r:r},chain:function(n){var r=tn(n);return r._chain=!0,r},iteratee:Pn,partial:nr,bind:rr,bindAll:ur,memoize:function(n,r){var t=function(e){var u=t.cache,o=""+(r?r.apply(this,arguments):e);return W(u,o)||(u[o]=n.apply(this,arguments)),u[o]};return t.cache={},t},delay:or,defer:ir,throttle:function(n,r,t){var e,u,o,i,a=0;t||(t={});var f=function(){a=!1===t.leading?0:zn(),e=null,i=n.apply(u,o),e||(u=o=null)},c=function(){var c=zn();a||!1!==t.leading||(a=c);var l=r-(c-a);return u=this,o=arguments,l<=0||l>r?(e&&(clearTimeout(e),e=null),a=c,i=n.apply(u,o),e||(u=o=null)):e||!1===t.trailing||(e=setTimeout(f,l)),i};return c.cancel=function(){clearTimeout(e),a=0,e=u=o=null},c},debounce:function(n,r,t){var e,u,o=function(r,t){e=null,t&&(u=n.apply(r,t))},i=j((function(i){if(e&&clearTimeout(e),t){var a=!e;e=setTimeout(o,r),a&&(u=n.apply(this,i))}else e=or(o,r,this,i);return u}));return i.cancel=function(){clearTimeout(e),e=null},i},wrap:function(n,r){return nr(r,n)},negate:ar,compose:function(){var n=arguments,r=n.length-1;return function(){for(var t=r,e=n[r].apply(this,arguments);t--;)e=n[t].call(this,e);return e}},after:function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},before:fr,once:cr,findKey:lr,findIndex:pr,findLastIndex:vr,sortedIndex:hr,indexOf:gr,lastIndexOf:dr,find:br,detect:br,findWhere:function(n,r){return br(n,Dn(r))},each:mr,forEach:mr,map:jr,collect:jr,reduce:wr,foldl:wr,inject:wr,reduceRight:Ar,foldr:Ar,filter:xr,select:xr,reject:function(n,r,t){return xr(n,ar(qn(r)),t)},every:Sr,all:Sr,some:Or,any:Or,contains:Mr,includes:Mr,include:Mr,invoke:Er,pluck:Br,where:function(n,r){return xr(n,Dn(r))},max:Nr,min:function(n,r,t){var e,u,o=1/0,i=1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=tr(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e<o&&(o=e);else r=qn(r,t),mr(n,(function(n,t,e){((u=r(n,t,e))<i||u===1/0&&o===1/0)&&(o=n,i=u)}));return o},shuffle:function(n){return Ir(n,1/0)},sample:Ir,sortBy:function(n,r,t){var e=0;return r=qn(r,t),Br(jr(n,(function(n,t,u){return{value:n,index:e++,criteria:r(n,t,u)}})).sort((function(n,r){var t=n.criteria,e=r.criteria;if(t!==e){if(t>e||void 0===t)return 1;if(t<e||void 0===e)return-1}return n.index-r.index})),"value")},groupBy:Tr,indexBy:Dr,countBy:Rr,partition:Fr,toArray:function(n){return n?U(n)?i.call(n):S(n)?n.match(Vr):tr(n)?jr(n,Tn):jn(n):[]},size:function(n){return null==n?0:tr(n)?n.length:nn(n).length},pick:qr,omit:Ur,first:zr,head:zr,take:zr,initial:Wr,last:function(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[n.length-1]:Lr(n,Math.max(0,n.length-r))},rest:Lr,tail:Lr,drop:Lr,compact:function(n){return xr(n,Boolean)},flatten:function(n,r){return er(n,r,!1)},without:Kr,uniq:Jr,unique:Jr,union:$r,intersection:function(n){for(var r=[],t=arguments.length,e=0,u=Y(n);e<u;e++){var o=n[e];if(!Mr(r,o)){var i;for(i=1;i<t&&Mr(arguments[i],o);i++);i===t&&r.push(o)}}return r},difference:Cr,unzip:Gr,transpose:Gr,zip:Hr,object:function(n,r){for(var t={},e=0,u=Y(n);e<u;e++)r?t[n[e]]=r[e]:t[n[e][0]]=n[e][1];return t},range:function(n,r,t){null==r&&(r=n||0,n=0),t||(t=r<n?-1:1);for(var e=Math.max(Math.ceil((r-n)/t),0),u=Array(e),o=0;o<e;o++,n+=t)u[o]=n;return u},chunk:function(n,r){if(null==r||r<1)return[];for(var t=[],e=0,u=n.length;e<u;)t.push(i.call(n,e,e+=r));return t},mixin:Xr,default:tn});return Yr._=Yr,Yr})); \ No newline at end of file
+
+(function() {
+
+ // Baseline setup
+ // --------------
+
+ // Establish the root object, `window` (`self`) in the browser, `global`
+ // on the server, or `this` in some virtual machines. We use `self`
+ // instead of `window` for `WebWorker` support.
+ var root = typeof self == 'object' && self.self === self && self ||
+ typeof global == 'object' && global.global === global && global ||
+ this ||
+ {};
+
+ // Save the previous value of the `_` variable.
+ var previousUnderscore = root._;
+
+ // Save bytes in the minified (but not gzipped) version:
+ var ArrayProto = Array.prototype, ObjProto = Object.prototype;
+ var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
+
+ // Create quick reference variables for speed access to core prototypes.
+ var push = ArrayProto.push,
+ slice = ArrayProto.slice,
+ toString = ObjProto.toString,
+ hasOwnProperty = ObjProto.hasOwnProperty;
+
+ // All **ECMAScript 5** native function implementations that we hope to use
+ // are declared here.
+ var nativeIsArray = Array.isArray,
+ nativeKeys = Object.keys,
+ nativeCreate = Object.create;
+
+ // Naked function reference for surrogate-prototype-swapping.
+ var Ctor = function(){};
+
+ // Create a safe reference to the Underscore object for use below.
+ var _ = function(obj) {
+ if (obj instanceof _) return obj;
+ if (!(this instanceof _)) return new _(obj);
+ this._wrapped = obj;
+ };
+
+ // Export the Underscore object for **Node.js**, with
+ // backwards-compatibility for their old module API. If we're in
+ // the browser, add `_` as a global object.
+ // (`nodeType` is checked to ensure that `module`
+ // and `exports` are not HTML elements.)
+ if (typeof exports != 'undefined' && !exports.nodeType) {
+ if (typeof module != 'undefined' && !module.nodeType && module.exports) {
+ exports = module.exports = _;
+ }
+ exports._ = _;
+ } else {
+ root._ = _;
+ }
+
+ // Current version.
+ _.VERSION = '1.9.1';
+
+ // Internal function that returns an efficient (for current engines) version
+ // of the passed-in callback, to be repeatedly applied in other Underscore
+ // functions.
+ var optimizeCb = function(func, context, argCount) {
+ if (context === void 0) return func;
+ switch (argCount == null ? 3 : argCount) {
+ case 1: return function(value) {
+ return func.call(context, value);
+ };
+ // The 2-argument case is omitted because we’re not using it.
+ case 3: return function(value, index, collection) {
+ return func.call(context, value, index, collection);
+ };
+ case 4: return function(accumulator, value, index, collection) {
+ return func.call(context, accumulator, value, index, collection);
+ };
+ }
+ return function() {
+ return func.apply(context, arguments);
+ };
+ };
+
+ var builtinIteratee;
+
+ // An internal function to generate callbacks that can be applied to each
+ // element in a collection, returning the desired result — either `identity`,
+ // an arbitrary callback, a property matcher, or a property accessor.
+ var cb = function(value, context, argCount) {
+ if (_.iteratee !== builtinIteratee) return _.iteratee(value, context);
+ if (value == null) return _.identity;
+ if (_.isFunction(value)) return optimizeCb(value, context, argCount);
+ if (_.isObject(value) && !_.isArray(value)) return _.matcher(value);
+ return _.property(value);
+ };
+
+ // External wrapper for our callback generator. Users may customize
+ // `_.iteratee` if they want additional predicate/iteratee shorthand styles.
+ // This abstraction hides the internal-only argCount argument.
+ _.iteratee = builtinIteratee = function(value, context) {
+ return cb(value, context, Infinity);
+ };
+
+ // Some functions take a variable number of arguments, or a few expected
+ // arguments at the beginning and then a variable number of values to operate
+ // on. This helper accumulates all remaining arguments past the function’s
+ // argument length (or an explicit `startIndex`), into an array that becomes
+ // the last argument. Similar to ES6’s "rest parameter".
+ var restArguments = function(func, startIndex) {
+ startIndex = startIndex == null ? func.length - 1 : +startIndex;
+ return function() {
+ var length = Math.max(arguments.length - startIndex, 0),
+ rest = Array(length),
+ index = 0;
+ for (; index < length; index++) {
+ rest[index] = arguments[index + startIndex];
+ }
+ switch (startIndex) {
+ case 0: return func.call(this, rest);
+ case 1: return func.call(this, arguments[0], rest);
+ case 2: return func.call(this, arguments[0], arguments[1], rest);
+ }
+ var args = Array(startIndex + 1);
+ for (index = 0; index < startIndex; index++) {
+ args[index] = arguments[index];
+ }
+ args[startIndex] = rest;
+ return func.apply(this, args);
+ };
+ };
+
+ // An internal function for creating a new object that inherits from another.
+ var baseCreate = function(prototype) {
+ if (!_.isObject(prototype)) return {};
+ if (nativeCreate) return nativeCreate(prototype);
+ Ctor.prototype = prototype;
+ var result = new Ctor;
+ Ctor.prototype = null;
+ return result;
+ };
+
+ var shallowProperty = function(key) {
+ return function(obj) {
+ return obj == null ? void 0 : obj[key];
+ };
+ };
+
+ var has = function(obj, path) {
+ return obj != null && hasOwnProperty.call(obj, path);
+ }
+
+ var deepGet = function(obj, path) {
+ var length = path.length;
+ for (var i = 0; i < length; i++) {
+ if (obj == null) return void 0;
+ obj = obj[path[i]];
+ }
+ return length ? obj : void 0;
+ };
+
+ // Helper for collection methods to determine whether a collection
+ // should be iterated as an array or as an object.
+ // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
+ // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
+ var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
+ var getLength = shallowProperty('length');
+ var isArrayLike = function(collection) {
+ var length = getLength(collection);
+ return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;
+ };
+
+ // Collection Functions
+ // --------------------
+
+ // The cornerstone, an `each` implementation, aka `forEach`.
+ // Handles raw objects in addition to array-likes. Treats all
+ // sparse array-likes as if they were dense.
+ _.each = _.forEach = function(obj, iteratee, context) {
+ iteratee = optimizeCb(iteratee, context);
+ var i, length;
+ if (isArrayLike(obj)) {
+ for (i = 0, length = obj.length; i < length; i++) {
+ iteratee(obj[i], i, obj);
+ }
+ } else {
+ var keys = _.keys(obj);
+ for (i = 0, length = keys.length; i < length; i++) {
+ iteratee(obj[keys[i]], keys[i], obj);
+ }
+ }
+ return obj;
+ };
+
+ // Return the results of applying the iteratee to each element.
+ _.map = _.collect = function(obj, iteratee, context) {
+ iteratee = cb(iteratee, context);
+ var keys = !isArrayLike(obj) && _.keys(obj),
+ length = (keys || obj).length,
+ results = Array(length);
+ for (var index = 0; index < length; index++) {
+ var currentKey = keys ? keys[index] : index;
+ results[index] = iteratee(obj[currentKey], currentKey, obj);
+ }
+ return results;
+ };
+
+ // Create a reducing function iterating left or right.
+ var createReduce = function(dir) {
+ // Wrap code that reassigns argument variables in a separate function than
+ // the one that accesses `arguments.length` to avoid a perf hit. (#1991)
+ var reducer = function(obj, iteratee, memo, initial) {
+ var keys = !isArrayLike(obj) && _.keys(obj),
+ length = (keys || obj).length,
+ index = dir > 0 ? 0 : length - 1;
+ if (!initial) {
+ memo = obj[keys ? keys[index] : index];
+ index += dir;
+ }
+ for (; index >= 0 && index < length; index += dir) {
+ var currentKey = keys ? keys[index] : index;
+ memo = iteratee(memo, obj[currentKey], currentKey, obj);
+ }
+ return memo;
+ };
+
+ return function(obj, iteratee, memo, context) {
+ var initial = arguments.length >= 3;
+ return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);
+ };
+ };
+
+ // **Reduce** builds up a single result from a list of values, aka `inject`,
+ // or `foldl`.
+ _.reduce = _.foldl = _.inject = createReduce(1);
+
+ // The right-associative version of reduce, also known as `foldr`.
+ _.reduceRight = _.foldr = createReduce(-1);
+
+ // Return the first value which passes a truth test. Aliased as `detect`.
+ _.find = _.detect = function(obj, predicate, context) {
+ var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey;
+ var key = keyFinder(obj, predicate, context);
+ if (key !== void 0 && key !== -1) return obj[key];
+ };
+
+ // Return all the elements that pass a truth test.
+ // Aliased as `select`.
+ _.filter = _.select = function(obj, predicate, context) {
+ var results = [];
+ predicate = cb(predicate, context);
+ _.each(obj, function(value, index, list) {
+ if (predicate(value, index, list)) results.push(value);
+ });
+ return results;
+ };
+
+ // Return all the elements for which a truth test fails.
+ _.reject = function(obj, predicate, context) {
+ return _.filter(obj, _.negate(cb(predicate)), context);
+ };
+
+ // Determine whether all of the elements match a truth test.
+ // Aliased as `all`.
+ _.every = _.all = function(obj, predicate, context) {
+ predicate = cb(predicate, context);
+ var keys = !isArrayLike(obj) && _.keys(obj),
+ length = (keys || obj).length;
+ for (var index = 0; index < length; index++) {
+ var currentKey = keys ? keys[index] : index;
+ if (!predicate(obj[currentKey], currentKey, obj)) return false;
+ }
+ return true;
+ };
+
+ // Determine if at least one element in the object matches a truth test.
+ // Aliased as `any`.
+ _.some = _.any = function(obj, predicate, context) {
+ predicate = cb(predicate, context);
+ var keys = !isArrayLike(obj) && _.keys(obj),
+ length = (keys || obj).length;
+ for (var index = 0; index < length; index++) {
+ var currentKey = keys ? keys[index] : index;
+ if (predicate(obj[currentKey], currentKey, obj)) return true;
+ }
+ return false;
+ };
+
+ // Determine if the array or object contains a given item (using `===`).
+ // Aliased as `includes` and `include`.
+ _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {
+ if (!isArrayLike(obj)) obj = _.values(obj);
+ if (typeof fromIndex != 'number' || guard) fromIndex = 0;
+ return _.indexOf(obj, item, fromIndex) >= 0;
+ };
+
+ // Invoke a method (with arguments) on every item in a collection.
+ _.invoke = restArguments(function(obj, path, args) {
+ var contextPath, func;
+ if (_.isFunction(path)) {
+ func = path;
+ } else if (_.isArray(path)) {
+ contextPath = path.slice(0, -1);
+ path = path[path.length - 1];
+ }
+ return _.map(obj, function(context) {
+ var method = func;
+ if (!method) {
+ if (contextPath && contextPath.length) {
+ context = deepGet(context, contextPath);
+ }
+ if (context == null) return void 0;
+ method = context[path];
+ }
+ return method == null ? method : method.apply(context, args);
+ });
+ });
+
+ // Convenience version of a common use case of `map`: fetching a property.
+ _.pluck = function(obj, key) {
+ return _.map(obj, _.property(key));
+ };
+
+ // Convenience version of a common use case of `filter`: selecting only objects
+ // containing specific `key:value` pairs.
+ _.where = function(obj, attrs) {
+ return _.filter(obj, _.matcher(attrs));
+ };
+
+ // Convenience version of a common use case of `find`: getting the first object
+ // containing specific `key:value` pairs.
+ _.findWhere = function(obj, attrs) {
+ return _.find(obj, _.matcher(attrs));
+ };
+
+ // Return the maximum element (or element-based computation).
+ _.max = function(obj, iteratee, context) {
+ var result = -Infinity, lastComputed = -Infinity,
+ value, computed;
+ if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
+ obj = isArrayLike(obj) ? obj : _.values(obj);
+ for (var i = 0, length = obj.length; i < length; i++) {
+ value = obj[i];
+ if (value != null && value > result) {
+ result = value;
+ }
+ }
+ } else {
+ iteratee = cb(iteratee, context);
+ _.each(obj, function(v, index, list) {
+ computed = iteratee(v, index, list);
+ if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
+ result = v;
+ lastComputed = computed;
+ }
+ });
+ }
+ return result;
+ };
+
+ // Return the minimum element (or element-based computation).
+ _.min = function(obj, iteratee, context) {
+ var result = Infinity, lastComputed = Infinity,
+ value, computed;
+ if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
+ obj = isArrayLike(obj) ? obj : _.values(obj);
+ for (var i = 0, length = obj.length; i < length; i++) {
+ value = obj[i];
+ if (value != null && value < result) {
+ result = value;
+ }
+ }
+ } else {
+ iteratee = cb(iteratee, context);
+ _.each(obj, function(v, index, list) {
+ computed = iteratee(v, index, list);
+ if (computed < lastComputed || computed === Infinity && result === Infinity) {
+ result = v;
+ lastComputed = computed;
+ }
+ });
+ }
+ return result;
+ };
+
+ // Shuffle a collection.
+ _.shuffle = function(obj) {
+ return _.sample(obj, Infinity);
+ };
+
+ // Sample **n** random values from a collection using the modern version of the
+ // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
+ // If **n** is not specified, returns a single random element.
+ // The internal `guard` argument allows it to work with `map`.
+ _.sample = function(obj, n, guard) {
+ if (n == null || guard) {
+ if (!isArrayLike(obj)) obj = _.values(obj);
+ return obj[_.random(obj.length - 1)];
+ }
+ var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj);
+ var length = getLength(sample);
+ n = Math.max(Math.min(n, length), 0);
+ var last = length - 1;
+ for (var index = 0; index < n; index++) {
+ var rand = _.random(index, last);
+ var temp = sample[index];
+ sample[index] = sample[rand];
+ sample[rand] = temp;
+ }
+ return sample.slice(0, n);
+ };
+
+ // Sort the object's values by a criterion produced by an iteratee.
+ _.sortBy = function(obj, iteratee, context) {
+ var index = 0;
+ iteratee = cb(iteratee, context);
+ return _.pluck(_.map(obj, function(value, key, list) {
+ return {
+ value: value,
+ index: index++,
+ criteria: iteratee(value, key, list)
+ };
+ }).sort(function(left, right) {
+ var a = left.criteria;
+ var b = right.criteria;
+ if (a !== b) {
+ if (a > b || a === void 0) return 1;
+ if (a < b || b === void 0) return -1;
+ }
+ return left.index - right.index;
+ }), 'value');
+ };
+
+ // An internal function used for aggregate "group by" operations.
+ var group = function(behavior, partition) {
+ return function(obj, iteratee, context) {
+ var result = partition ? [[], []] : {};
+ iteratee = cb(iteratee, context);
+ _.each(obj, function(value, index) {
+ var key = iteratee(value, index, obj);
+ behavior(result, value, key);
+ });
+ return result;
+ };
+ };
+
+ // Groups the object's values by a criterion. Pass either a string attribute
+ // to group by, or a function that returns the criterion.
+ _.groupBy = group(function(result, value, key) {
+ if (has(result, key)) result[key].push(value); else result[key] = [value];
+ });
+
+ // Indexes the object's values by a criterion, similar to `groupBy`, but for
+ // when you know that your index values will be unique.
+ _.indexBy = group(function(result, value, key) {
+ result[key] = value;
+ });
+
+ // Counts instances of an object that group by a certain criterion. Pass
+ // either a string attribute to count by, or a function that returns the
+ // criterion.
+ _.countBy = group(function(result, value, key) {
+ if (has(result, key)) result[key]++; else result[key] = 1;
+ });
+
+ var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
+ // Safely create a real, live array from anything iterable.
+ _.toArray = function(obj) {
+ if (!obj) return [];
+ if (_.isArray(obj)) return slice.call(obj);
+ if (_.isString(obj)) {
+ // Keep surrogate pair characters together
+ return obj.match(reStrSymbol);
+ }
+ if (isArrayLike(obj)) return _.map(obj, _.identity);
+ return _.values(obj);
+ };
+
+ // Return the number of elements in an object.
+ _.size = function(obj) {
+ if (obj == null) return 0;
+ return isArrayLike(obj) ? obj.length : _.keys(obj).length;
+ };
+
+ // Split a collection into two arrays: one whose elements all satisfy the given
+ // predicate, and one whose elements all do not satisfy the predicate.
+ _.partition = group(function(result, value, pass) {
+ result[pass ? 0 : 1].push(value);
+ }, true);
+
+ // Array Functions
+ // ---------------
+
+ // Get the first element of an array. Passing **n** will return the first N
+ // values in the array. Aliased as `head` and `take`. The **guard** check
+ // allows it to work with `_.map`.
+ _.first = _.head = _.take = function(array, n, guard) {
+ if (array == null || array.length < 1) return n == null ? void 0 : [];
+ if (n == null || guard) return array[0];
+ return _.initial(array, array.length - n);
+ };
+
+ // Returns everything but the last entry of the array. Especially useful on
+ // the arguments object. Passing **n** will return all the values in
+ // the array, excluding the last N.
+ _.initial = function(array, n, guard) {
+ return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
+ };
+
+ // Get the last element of an array. Passing **n** will return the last N
+ // values in the array.
+ _.last = function(array, n, guard) {
+ if (array == null || array.length < 1) return n == null ? void 0 : [];
+ if (n == null || guard) return array[array.length - 1];
+ return _.rest(array, Math.max(0, array.length - n));
+ };
+
+ // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
+ // Especially useful on the arguments object. Passing an **n** will return
+ // the rest N values in the array.
+ _.rest = _.tail = _.drop = function(array, n, guard) {
+ return slice.call(array, n == null || guard ? 1 : n);
+ };
+
+ // Trim out all falsy values from an array.
+ _.compact = function(array) {
+ return _.filter(array, Boolean);
+ };
+
+ // Internal implementation of a recursive `flatten` function.
+ var flatten = function(input, shallow, strict, output) {
+ output = output || [];
+ var idx = output.length;
+ for (var i = 0, length = getLength(input); i < length; i++) {
+ var value = input[i];
+ if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {
+ // Flatten current level of array or arguments object.
+ if (shallow) {
+ var j = 0, len = value.length;
+ while (j < len) output[idx++] = value[j++];
+ } else {
+ flatten(value, shallow, strict, output);
+ idx = output.length;
+ }
+ } else if (!strict) {
+ output[idx++] = value;
+ }
+ }
+ return output;
+ };
+
+ // Flatten out an array, either recursively (by default), or just one level.
+ _.flatten = function(array, shallow) {
+ return flatten(array, shallow, false);
+ };
+
+ // Return a version of the array that does not contain the specified value(s).
+ _.without = restArguments(function(array, otherArrays) {
+ return _.difference(array, otherArrays);
+ });
+
+ // Produce a duplicate-free version of the array. If the array has already
+ // been sorted, you have the option of using a faster algorithm.
+ // The faster algorithm will not work with an iteratee if the iteratee
+ // is not a one-to-one function, so providing an iteratee will disable
+ // the faster algorithm.
+ // Aliased as `unique`.
+ _.uniq = _.unique = function(array, isSorted, iteratee, context) {
+ if (!_.isBoolean(isSorted)) {
+ context = iteratee;
+ iteratee = isSorted;
+ isSorted = false;
+ }
+ if (iteratee != null) iteratee = cb(iteratee, context);
+ var result = [];
+ var seen = [];
+ for (var i = 0, length = getLength(array); i < length; i++) {
+ var value = array[i],
+ computed = iteratee ? iteratee(value, i, array) : value;
+ if (isSorted && !iteratee) {
+ if (!i || seen !== computed) result.push(value);
+ seen = computed;
+ } else if (iteratee) {
+ if (!_.contains(seen, computed)) {
+ seen.push(computed);
+ result.push(value);
+ }
+ } else if (!_.contains(result, value)) {
+ result.push(value);
+ }
+ }
+ return result;
+ };
+
+ // Produce an array that contains the union: each distinct element from all of
+ // the passed-in arrays.
+ _.union = restArguments(function(arrays) {
+ return _.uniq(flatten(arrays, true, true));
+ });
+
+ // Produce an array that contains every item shared between all the
+ // passed-in arrays.
+ _.intersection = function(array) {
+ var result = [];
+ var argsLength = arguments.length;
+ for (var i = 0, length = getLength(array); i < length; i++) {
+ var item = array[i];
+ if (_.contains(result, item)) continue;
+ var j;
+ for (j = 1; j < argsLength; j++) {
+ if (!_.contains(arguments[j], item)) break;
+ }
+ if (j === argsLength) result.push(item);
+ }
+ return result;
+ };
+
+ // Take the difference between one array and a number of other arrays.
+ // Only the elements present in just the first array will remain.
+ _.difference = restArguments(function(array, rest) {
+ rest = flatten(rest, true, true);
+ return _.filter(array, function(value){
+ return !_.contains(rest, value);
+ });
+ });
+
+ // Complement of _.zip. Unzip accepts an array of arrays and groups
+ // each array's elements on shared indices.
+ _.unzip = function(array) {
+ var length = array && _.max(array, getLength).length || 0;
+ var result = Array(length);
+
+ for (var index = 0; index < length; index++) {
+ result[index] = _.pluck(array, index);
+ }
+ return result;
+ };
+
+ // Zip together multiple lists into a single array -- elements that share
+ // an index go together.
+ _.zip = restArguments(_.unzip);
+
+ // Converts lists into objects. Pass either a single array of `[key, value]`
+ // pairs, or two parallel arrays of the same length -- one of keys, and one of
+ // the corresponding values. Passing by pairs is the reverse of _.pairs.
+ _.object = function(list, values) {
+ var result = {};
+ for (var i = 0, length = getLength(list); i < length; i++) {
+ if (values) {
+ result[list[i]] = values[i];
+ } else {
+ result[list[i][0]] = list[i][1];
+ }
+ }
+ return result;
+ };
+
+ // Generator function to create the findIndex and findLastIndex functions.
+ var createPredicateIndexFinder = function(dir) {
+ return function(array, predicate, context) {
+ predicate = cb(predicate, context);
+ var length = getLength(array);
+ var index = dir > 0 ? 0 : length - 1;
+ for (; index >= 0 && index < length; index += dir) {
+ if (predicate(array[index], index, array)) return index;
+ }
+ return -1;
+ };
+ };
+
+ // Returns the first index on an array-like that passes a predicate test.
+ _.findIndex = createPredicateIndexFinder(1);
+ _.findLastIndex = createPredicateIndexFinder(-1);
+
+ // Use a comparator function to figure out the smallest index at which
+ // an object should be inserted so as to maintain order. Uses binary search.
+ _.sortedIndex = function(array, obj, iteratee, context) {
+ iteratee = cb(iteratee, context, 1);
+ var value = iteratee(obj);
+ var low = 0, high = getLength(array);
+ while (low < high) {
+ var mid = Math.floor((low + high) / 2);
+ if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
+ }
+ return low;
+ };
+
+ // Generator function to create the indexOf and lastIndexOf functions.
+ var createIndexFinder = function(dir, predicateFind, sortedIndex) {
+ return function(array, item, idx) {
+ var i = 0, length = getLength(array);
+ if (typeof idx == 'number') {
+ if (dir > 0) {
+ i = idx >= 0 ? idx : Math.max(idx + length, i);
+ } else {
+ length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
+ }
+ } else if (sortedIndex && idx && length) {
+ idx = sortedIndex(array, item);
+ return array[idx] === item ? idx : -1;
+ }
+ if (item !== item) {
+ idx = predicateFind(slice.call(array, i, length), _.isNaN);
+ return idx >= 0 ? idx + i : -1;
+ }
+ for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
+ if (array[idx] === item) return idx;
+ }
+ return -1;
+ };
+ };
+
+ // Return the position of the first occurrence of an item in an array,
+ // or -1 if the item is not included in the array.
+ // If the array is large and already in sort order, pass `true`
+ // for **isSorted** to use binary search.
+ _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);
+ _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);
+
+ // Generate an integer Array containing an arithmetic progression. A port of
+ // the native Python `range()` function. See
+ // [the Python documentation](http://docs.python.org/library/functions.html#range).
+ _.range = function(start, stop, step) {
+ if (stop == null) {
+ stop = start || 0;
+ start = 0;
+ }
+ if (!step) {
+ step = stop < start ? -1 : 1;
+ }
+
+ var length = Math.max(Math.ceil((stop - start) / step), 0);
+ var range = Array(length);
+
+ for (var idx = 0; idx < length; idx++, start += step) {
+ range[idx] = start;
+ }
+
+ return range;
+ };
+
+ // Chunk a single array into multiple arrays, each containing `count` or fewer
+ // items.
+ _.chunk = function(array, count) {
+ if (count == null || count < 1) return [];
+ var result = [];
+ var i = 0, length = array.length;
+ while (i < length) {
+ result.push(slice.call(array, i, i += count));
+ }
+ return result;
+ };
+
+ // Function (ahem) Functions
+ // ------------------
+
+ // Determines whether to execute a function as a constructor
+ // or a normal function with the provided arguments.
+ var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {
+ if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
+ var self = baseCreate(sourceFunc.prototype);
+ var result = sourceFunc.apply(self, args);
+ if (_.isObject(result)) return result;
+ return self;
+ };
+
+ // Create a function bound to a given object (assigning `this`, and arguments,
+ // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
+ // available.
+ _.bind = restArguments(function(func, context, args) {
+ if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');
+ var bound = restArguments(function(callArgs) {
+ return executeBound(func, bound, context, this, args.concat(callArgs));
+ });
+ return bound;
+ });
+
+ // Partially apply a function by creating a version that has had some of its
+ // arguments pre-filled, without changing its dynamic `this` context. _ acts
+ // as a placeholder by default, allowing any combination of arguments to be
+ // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.
+ _.partial = restArguments(function(func, boundArgs) {
+ var placeholder = _.partial.placeholder;
+ var bound = function() {
+ var position = 0, length = boundArgs.length;
+ var args = Array(length);
+ for (var i = 0; i < length; i++) {
+ args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
+ }
+ while (position < arguments.length) args.push(arguments[position++]);
+ return executeBound(func, bound, this, this, args);
+ };
+ return bound;
+ });
+
+ _.partial.placeholder = _;
+
+ // Bind a number of an object's methods to that object. Remaining arguments
+ // are the method names to be bound. Useful for ensuring that all callbacks
+ // defined on an object belong to it.
+ _.bindAll = restArguments(function(obj, keys) {
+ keys = flatten(keys, false, false);
+ var index = keys.length;
+ if (index < 1) throw new Error('bindAll must be passed function names');
+ while (index--) {
+ var key = keys[index];
+ obj[key] = _.bind(obj[key], obj);
+ }
+ });
+
+ // Memoize an expensive function by storing its results.
+ _.memoize = function(func, hasher) {
+ var memoize = function(key) {
+ var cache = memoize.cache;
+ var address = '' + (hasher ? hasher.apply(this, arguments) : key);
+ if (!has(cache, address)) cache[address] = func.apply(this, arguments);
+ return cache[address];
+ };
+ memoize.cache = {};
+ return memoize;
+ };
+
+ // Delays a function for the given number of milliseconds, and then calls
+ // it with the arguments supplied.
+ _.delay = restArguments(function(func, wait, args) {
+ return setTimeout(function() {
+ return func.apply(null, args);
+ }, wait);
+ });
+
+ // Defers a function, scheduling it to run after the current call stack has
+ // cleared.
+ _.defer = _.partial(_.delay, _, 1);
+
+ // Returns a function, that, when invoked, will only be triggered at most once
+ // during a given window of time. Normally, the throttled function will run
+ // as much as it can, without ever going more than once per `wait` duration;
+ // but if you'd like to disable the execution on the leading edge, pass
+ // `{leading: false}`. To disable execution on the trailing edge, ditto.
+ _.throttle = function(func, wait, options) {
+ var timeout, context, args, result;
+ var previous = 0;
+ if (!options) options = {};
+
+ var later = function() {
+ previous = options.leading === false ? 0 : _.now();
+ timeout = null;
+ result = func.apply(context, args);
+ if (!timeout) context = args = null;
+ };
+
+ var throttled = function() {
+ var now = _.now();
+ if (!previous && options.leading === false) previous = now;
+ var remaining = wait - (now - previous);
+ context = this;
+ args = arguments;
+ if (remaining <= 0 || remaining > wait) {
+ if (timeout) {
+ clearTimeout(timeout);
+ timeout = null;
+ }
+ previous = now;
+ result = func.apply(context, args);
+ if (!timeout) context = args = null;
+ } else if (!timeout && options.trailing !== false) {
+ timeout = setTimeout(later, remaining);
+ }
+ return result;
+ };
+
+ throttled.cancel = function() {
+ clearTimeout(timeout);
+ previous = 0;
+ timeout = context = args = null;
+ };
+
+ return throttled;
+ };
+
+ // Returns a function, that, as long as it continues to be invoked, will not
+ // be triggered. The function will be called after it stops being called for
+ // N milliseconds. If `immediate` is passed, trigger the function on the
+ // leading edge, instead of the trailing.
+ _.debounce = function(func, wait, immediate) {
+ var timeout, result;
+
+ var later = function(context, args) {
+ timeout = null;
+ if (args) result = func.apply(context, args);
+ };
+
+ var debounced = restArguments(function(args) {
+ if (timeout) clearTimeout(timeout);
+ if (immediate) {
+ var callNow = !timeout;
+ timeout = setTimeout(later, wait);
+ if (callNow) result = func.apply(this, args);
+ } else {
+ timeout = _.delay(later, wait, this, args);
+ }
+
+ return result;
+ });
+
+ debounced.cancel = function() {
+ clearTimeout(timeout);
+ timeout = null;
+ };
+
+ return debounced;
+ };
+
+ // Returns the first function passed as an argument to the second,
+ // allowing you to adjust arguments, run code before and after, and
+ // conditionally execute the original function.
+ _.wrap = function(func, wrapper) {
+ return _.partial(wrapper, func);
+ };
+
+ // Returns a negated version of the passed-in predicate.
+ _.negate = function(predicate) {
+ return function() {
+ return !predicate.apply(this, arguments);
+ };
+ };
+
+ // Returns a function that is the composition of a list of functions, each
+ // consuming the return value of the function that follows.
+ _.compose = function() {
+ var args = arguments;
+ var start = args.length - 1;
+ return function() {
+ var i = start;
+ var result = args[start].apply(this, arguments);
+ while (i--) result = args[i].call(this, result);
+ return result;
+ };
+ };
+
+ // Returns a function that will only be executed on and after the Nth call.
+ _.after = function(times, func) {
+ return function() {
+ if (--times < 1) {
+ return func.apply(this, arguments);
+ }
+ };
+ };
+
+ // Returns a function that will only be executed up to (but not including) the Nth call.
+ _.before = function(times, func) {
+ var memo;
+ return function() {
+ if (--times > 0) {
+ memo = func.apply(this, arguments);
+ }
+ if (times <= 1) func = null;
+ return memo;
+ };
+ };
+
+ // Returns a function that will be executed at most one time, no matter how
+ // often you call it. Useful for lazy initialization.
+ _.once = _.partial(_.before, 2);
+
+ _.restArguments = restArguments;
+
+ // Object Functions
+ // ----------------
+
+ // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
+ var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
+ var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
+ 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
+
+ var collectNonEnumProps = function(obj, keys) {
+ var nonEnumIdx = nonEnumerableProps.length;
+ var constructor = obj.constructor;
+ var proto = _.isFunction(constructor) && constructor.prototype || ObjProto;
+
+ // Constructor is a special case.
+ var prop = 'constructor';
+ if (has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);
+
+ while (nonEnumIdx--) {
+ prop = nonEnumerableProps[nonEnumIdx];
+ if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {
+ keys.push(prop);
+ }
+ }
+ };
+
+ // Retrieve the names of an object's own properties.
+ // Delegates to **ECMAScript 5**'s native `Object.keys`.
+ _.keys = function(obj) {
+ if (!_.isObject(obj)) return [];
+ if (nativeKeys) return nativeKeys(obj);
+ var keys = [];
+ for (var key in obj) if (has(obj, key)) keys.push(key);
+ // Ahem, IE < 9.
+ if (hasEnumBug) collectNonEnumProps(obj, keys);
+ return keys;
+ };
+
+ // Retrieve all the property names of an object.
+ _.allKeys = function(obj) {
+ if (!_.isObject(obj)) return [];
+ var keys = [];
+ for (var key in obj) keys.push(key);
+ // Ahem, IE < 9.
+ if (hasEnumBug) collectNonEnumProps(obj, keys);
+ return keys;
+ };
+
+ // Retrieve the values of an object's properties.
+ _.values = function(obj) {
+ var keys = _.keys(obj);
+ var length = keys.length;
+ var values = Array(length);
+ for (var i = 0; i < length; i++) {
+ values[i] = obj[keys[i]];
+ }
+ return values;
+ };
+
+ // Returns the results of applying the iteratee to each element of the object.
+ // In contrast to _.map it returns an object.
+ _.mapObject = function(obj, iteratee, context) {
+ iteratee = cb(iteratee, context);
+ var keys = _.keys(obj),
+ length = keys.length,
+ results = {};
+ for (var index = 0; index < length; index++) {
+ var currentKey = keys[index];
+ results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
+ }
+ return results;
+ };
+
+ // Convert an object into a list of `[key, value]` pairs.
+ // The opposite of _.object.
+ _.pairs = function(obj) {
+ var keys = _.keys(obj);
+ var length = keys.length;
+ var pairs = Array(length);
+ for (var i = 0; i < length; i++) {
+ pairs[i] = [keys[i], obj[keys[i]]];
+ }
+ return pairs;
+ };
+
+ // Invert the keys and values of an object. The values must be serializable.
+ _.invert = function(obj) {
+ var result = {};
+ var keys = _.keys(obj);
+ for (var i = 0, length = keys.length; i < length; i++) {
+ result[obj[keys[i]]] = keys[i];
+ }
+ return result;
+ };
+
+ // Return a sorted list of the function names available on the object.
+ // Aliased as `methods`.
+ _.functions = _.methods = function(obj) {
+ var names = [];
+ for (var key in obj) {
+ if (_.isFunction(obj[key])) names.push(key);
+ }
+ return names.sort();
+ };
+
+ // An internal function for creating assigner functions.
+ var createAssigner = function(keysFunc, defaults) {
+ return function(obj) {
+ var length = arguments.length;
+ if (defaults) obj = Object(obj);
+ if (length < 2 || obj == null) return obj;
+ for (var index = 1; index < length; index++) {
+ var source = arguments[index],
+ keys = keysFunc(source),
+ l = keys.length;
+ for (var i = 0; i < l; i++) {
+ var key = keys[i];
+ if (!defaults || obj[key] === void 0) obj[key] = source[key];
+ }
+ }
+ return obj;
+ };
+ };
+
+ // Extend a given object with all the properties in passed-in object(s).
+ _.extend = createAssigner(_.allKeys);
+
+ // Assigns a given object with all the own properties in the passed-in object(s).
+ // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
+ _.extendOwn = _.assign = createAssigner(_.keys);
+
+ // Returns the first key on an object that passes a predicate test.
+ _.findKey = function(obj, predicate, context) {
+ predicate = cb(predicate, context);
+ var keys = _.keys(obj), key;
+ for (var i = 0, length = keys.length; i < length; i++) {
+ key = keys[i];
+ if (predicate(obj[key], key, obj)) return key;
+ }
+ };
+
+ // Internal pick helper function to determine if `obj` has key `key`.
+ var keyInObj = function(value, key, obj) {
+ return key in obj;
+ };
+
+ // Return a copy of the object only containing the whitelisted properties.
+ _.pick = restArguments(function(obj, keys) {
+ var result = {}, iteratee = keys[0];
+ if (obj == null) return result;
+ if (_.isFunction(iteratee)) {
+ if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);
+ keys = _.allKeys(obj);
+ } else {
+ iteratee = keyInObj;
+ keys = flatten(keys, false, false);
+ obj = Object(obj);
+ }
+ for (var i = 0, length = keys.length; i < length; i++) {
+ var key = keys[i];
+ var value = obj[key];
+ if (iteratee(value, key, obj)) result[key] = value;
+ }
+ return result;
+ });
+
+ // Return a copy of the object without the blacklisted properties.
+ _.omit = restArguments(function(obj, keys) {
+ var iteratee = keys[0], context;
+ if (_.isFunction(iteratee)) {
+ iteratee = _.negate(iteratee);
+ if (keys.length > 1) context = keys[1];
+ } else {
+ keys = _.map(flatten(keys, false, false), String);
+ iteratee = function(value, key) {
+ return !_.contains(keys, key);
+ };
+ }
+ return _.pick(obj, iteratee, context);
+ });
+
+ // Fill in a given object with default properties.
+ _.defaults = createAssigner(_.allKeys, true);
+
+ // Creates an object that inherits from the given prototype object.
+ // If additional properties are provided then they will be added to the
+ // created object.
+ _.create = function(prototype, props) {
+ var result = baseCreate(prototype);
+ if (props) _.extendOwn(result, props);
+ return result;
+ };
+
+ // Create a (shallow-cloned) duplicate of an object.
+ _.clone = function(obj) {
+ if (!_.isObject(obj)) return obj;
+ return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
+ };
+
+ // Invokes interceptor with the obj, and then returns obj.
+ // The primary purpose of this method is to "tap into" a method chain, in
+ // order to perform operations on intermediate results within the chain.
+ _.tap = function(obj, interceptor) {
+ interceptor(obj);
+ return obj;
+ };
+
+ // Returns whether an object has a given set of `key:value` pairs.
+ _.isMatch = function(object, attrs) {
+ var keys = _.keys(attrs), length = keys.length;
+ if (object == null) return !length;
+ var obj = Object(object);
+ for (var i = 0; i < length; i++) {
+ var key = keys[i];
+ if (attrs[key] !== obj[key] || !(key in obj)) return false;
+ }
+ return true;
+ };
+
+
+ // Internal recursive comparison function for `isEqual`.
+ var eq, deepEq;
+ eq = function(a, b, aStack, bStack) {
+ // Identical objects are equal. `0 === -0`, but they aren't identical.
+ // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
+ if (a === b) return a !== 0 || 1 / a === 1 / b;
+ // `null` or `undefined` only equal to itself (strict comparison).
+ if (a == null || b == null) return false;
+ // `NaN`s are equivalent, but non-reflexive.
+ if (a !== a) return b !== b;
+ // Exhaust primitive checks
+ var type = typeof a;
+ if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
+ return deepEq(a, b, aStack, bStack);
+ };
+
+ // Internal recursive comparison function for `isEqual`.
+ deepEq = function(a, b, aStack, bStack) {
+ // Unwrap any wrapped objects.
+ if (a instanceof _) a = a._wrapped;
+ if (b instanceof _) b = b._wrapped;
+ // Compare `[[Class]]` names.
+ var className = toString.call(a);
+ if (className !== toString.call(b)) return false;
+ switch (className) {
+ // Strings, numbers, regular expressions, dates, and booleans are compared by value.
+ case '[object RegExp]':
+ // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
+ case '[object String]':
+ // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
+ // equivalent to `new String("5")`.
+ return '' + a === '' + b;
+ case '[object Number]':
+ // `NaN`s are equivalent, but non-reflexive.
+ // Object(NaN) is equivalent to NaN.
+ if (+a !== +a) return +b !== +b;
+ // An `egal` comparison is performed for other numeric values.
+ return +a === 0 ? 1 / +a === 1 / b : +a === +b;
+ case '[object Date]':
+ case '[object Boolean]':
+ // Coerce dates and booleans to numeric primitive values. Dates are compared by their
+ // millisecond representations. Note that invalid dates with millisecond representations
+ // of `NaN` are not equivalent.
+ return +a === +b;
+ case '[object Symbol]':
+ return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);
+ }
+
+ var areArrays = className === '[object Array]';
+ if (!areArrays) {
+ if (typeof a != 'object' || typeof b != 'object') return false;
+
+ // Objects with different constructors are not equivalent, but `Object`s or `Array`s
+ // from different frames are.
+ var aCtor = a.constructor, bCtor = b.constructor;
+ if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&
+ _.isFunction(bCtor) && bCtor instanceof bCtor)
+ && ('constructor' in a && 'constructor' in b)) {
+ return false;
+ }
+ }
+ // Assume equality for cyclic structures. The algorithm for detecting cyclic
+ // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
+
+ // Initializing stack of traversed objects.
+ // It's done here since we only need them for objects and arrays comparison.
+ aStack = aStack || [];
+ bStack = bStack || [];
+ var length = aStack.length;
+ while (length--) {
+ // Linear search. Performance is inversely proportional to the number of
+ // unique nested structures.
+ if (aStack[length] === a) return bStack[length] === b;
+ }
+
+ // Add the first object to the stack of traversed objects.
+ aStack.push(a);
+ bStack.push(b);
+
+ // Recursively compare objects and arrays.
+ if (areArrays) {
+ // Compare array lengths to determine if a deep comparison is necessary.
+ length = a.length;
+ if (length !== b.length) return false;
+ // Deep compare the contents, ignoring non-numeric properties.
+ while (length--) {
+ if (!eq(a[length], b[length], aStack, bStack)) return false;
+ }
+ } else {
+ // Deep compare objects.
+ var keys = _.keys(a), key;
+ length = keys.length;
+ // Ensure that both objects contain the same number of properties before comparing deep equality.
+ if (_.keys(b).length !== length) return false;
+ while (length--) {
+ // Deep compare each member
+ key = keys[length];
+ if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
+ }
+ }
+ // Remove the first object from the stack of traversed objects.
+ aStack.pop();
+ bStack.pop();
+ return true;
+ };
+
+ // Perform a deep comparison to check if two objects are equal.
+ _.isEqual = function(a, b) {
+ return eq(a, b);
+ };
+
+ // Is a given array, string, or object empty?
+ // An "empty" object has no enumerable own-properties.
+ _.isEmpty = function(obj) {
+ if (obj == null) return true;
+ if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;
+ return _.keys(obj).length === 0;
+ };
+
+ // Is a given value a DOM element?
+ _.isElement = function(obj) {
+ return !!(obj && obj.nodeType === 1);
+ };
+
+ // Is a given value an array?
+ // Delegates to ECMA5's native Array.isArray
+ _.isArray = nativeIsArray || function(obj) {
+ return toString.call(obj) === '[object Array]';
+ };
+
+ // Is a given variable an object?
+ _.isObject = function(obj) {
+ var type = typeof obj;
+ return type === 'function' || type === 'object' && !!obj;
+ };
+
+ // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.
+ _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) {
+ _['is' + name] = function(obj) {
+ return toString.call(obj) === '[object ' + name + ']';
+ };
+ });
+
+ // Define a fallback version of the method in browsers (ahem, IE < 9), where
+ // there isn't any inspectable "Arguments" type.
+ if (!_.isArguments(arguments)) {
+ _.isArguments = function(obj) {
+ return has(obj, 'callee');
+ };
+ }
+
+ // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,
+ // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
+ var nodelist = root.document && root.document.childNodes;
+ if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
+ _.isFunction = function(obj) {
+ return typeof obj == 'function' || false;
+ };
+ }
+
+ // Is a given object a finite number?
+ _.isFinite = function(obj) {
+ return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj));
+ };
+
+ // Is the given value `NaN`?
+ _.isNaN = function(obj) {
+ return _.isNumber(obj) && isNaN(obj);
+ };
+
+ // Is a given value a boolean?
+ _.isBoolean = function(obj) {
+ return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
+ };
+
+ // Is a given value equal to null?
+ _.isNull = function(obj) {
+ return obj === null;
+ };
+
+ // Is a given variable undefined?
+ _.isUndefined = function(obj) {
+ return obj === void 0;
+ };
+
+ // Shortcut function for checking if an object has a given property directly
+ // on itself (in other words, not on a prototype).
+ _.has = function(obj, path) {
+ if (!_.isArray(path)) {
+ return has(obj, path);
+ }
+ var length = path.length;
+ for (var i = 0; i < length; i++) {
+ var key = path[i];
+ if (obj == null || !hasOwnProperty.call(obj, key)) {
+ return false;
+ }
+ obj = obj[key];
+ }
+ return !!length;
+ };
+
+ // Utility Functions
+ // -----------------
+
+ // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
+ // previous owner. Returns a reference to the Underscore object.
+ _.noConflict = function() {
+ root._ = previousUnderscore;
+ return this;
+ };
+
+ // Keep the identity function around for default iteratees.
+ _.identity = function(value) {
+ return value;
+ };
+
+ // Predicate-generating functions. Often useful outside of Underscore.
+ _.constant = function(value) {
+ return function() {
+ return value;
+ };
+ };
+
+ _.noop = function(){};
+
+ // Creates a function that, when passed an object, will traverse that object’s
+ // properties down the given `path`, specified as an array of keys or indexes.
+ _.property = function(path) {
+ if (!_.isArray(path)) {
+ return shallowProperty(path);
+ }
+ return function(obj) {
+ return deepGet(obj, path);
+ };
+ };
+
+ // Generates a function for a given object that returns a given property.
+ _.propertyOf = function(obj) {
+ if (obj == null) {
+ return function(){};
+ }
+ return function(path) {
+ return !_.isArray(path) ? obj[path] : deepGet(obj, path);
+ };
+ };
+
+ // Returns a predicate for checking whether an object has a given set of
+ // `key:value` pairs.
+ _.matcher = _.matches = function(attrs) {
+ attrs = _.extendOwn({}, attrs);
+ return function(obj) {
+ return _.isMatch(obj, attrs);
+ };
+ };
+
+ // Run a function **n** times.
+ _.times = function(n, iteratee, context) {
+ var accum = Array(Math.max(0, n));
+ iteratee = optimizeCb(iteratee, context, 1);
+ for (var i = 0; i < n; i++) accum[i] = iteratee(i);
+ return accum;
+ };
+
+ // Return a random integer between min and max (inclusive).
+ _.random = function(min, max) {
+ if (max == null) {
+ max = min;
+ min = 0;
+ }
+ return min + Math.floor(Math.random() * (max - min + 1));
+ };
+
+ // A (possibly faster) way to get the current timestamp as an integer.
+ _.now = Date.now || function() {
+ return new Date().getTime();
+ };
+
+ // List of HTML entities for escaping.
+ var escapeMap = {
+ '&': '&amp;',
+ '<': '&lt;',
+ '>': '&gt;',
+ '"': '&quot;',
+ "'": '&#x27;',
+ '`': '&#x60;'
+ };
+ var unescapeMap = _.invert(escapeMap);
+
+ // Functions for escaping and unescaping strings to/from HTML interpolation.
+ var createEscaper = function(map) {
+ var escaper = function(match) {
+ return map[match];
+ };
+ // Regexes for identifying a key that needs to be escaped.
+ var source = '(?:' + _.keys(map).join('|') + ')';
+ var testRegexp = RegExp(source);
+ var replaceRegexp = RegExp(source, 'g');
+ return function(string) {
+ string = string == null ? '' : '' + string;
+ return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
+ };
+ };
+ _.escape = createEscaper(escapeMap);
+ _.unescape = createEscaper(unescapeMap);
+
+ // Traverses the children of `obj` along `path`. If a child is a function, it
+ // is invoked with its parent as context. Returns the value of the final
+ // child, or `fallback` if any child is undefined.
+ _.result = function(obj, path, fallback) {
+ if (!_.isArray(path)) path = [path];
+ var length = path.length;
+ if (!length) {
+ return _.isFunction(fallback) ? fallback.call(obj) : fallback;
+ }
+ for (var i = 0; i < length; i++) {
+ var prop = obj == null ? void 0 : obj[path[i]];
+ if (prop === void 0) {
+ prop = fallback;
+ i = length; // Ensure we don't continue iterating.
+ }
+ obj = _.isFunction(prop) ? prop.call(obj) : prop;
+ }
+ return obj;
+ };
+
+ // Generate a unique integer id (unique within the entire client session).
+ // Useful for temporary DOM ids.
+ var idCounter = 0;
+ _.uniqueId = function(prefix) {
+ var id = ++idCounter + '';
+ return prefix ? prefix + id : id;
+ };
+
+ // By default, Underscore uses ERB-style template delimiters, change the
+ // following template settings to use alternative delimiters.
+ _.templateSettings = {
+ evaluate: /<%([\s\S]+?)%>/g,
+ interpolate: /<%=([\s\S]+?)%>/g,
+ escape: /<%-([\s\S]+?)%>/g
+ };
+
+ // When customizing `templateSettings`, if you don't want to define an
+ // interpolation, evaluation or escaping regex, we need one that is
+ // guaranteed not to match.
+ var noMatch = /(.)^/;
+
+ // Certain characters need to be escaped so that they can be put into a
+ // string literal.
+ var escapes = {
+ "'": "'",
+ '\\': '\\',
+ '\r': 'r',
+ '\n': 'n',
+ '\u2028': 'u2028',
+ '\u2029': 'u2029'
+ };
+
+ var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;
+
+ var escapeChar = function(match) {
+ return '\\' + escapes[match];
+ };
+
+ // In order to prevent third-party code injection through
+ // `_.templateSettings.variable`, we test it against the following regular
+ // expression. It is intentionally a bit more liberal than just matching valid
+ // identifiers, but still prevents possible loopholes through defaults or
+ // destructuring assignment.
+ var bareIdentifier = /^\s*(\w|\$)+\s*$/;
+
+ // JavaScript micro-templating, similar to John Resig's implementation.
+ // Underscore templating handles arbitrary delimiters, preserves whitespace,
+ // and correctly escapes quotes within interpolated code.
+ // NB: `oldSettings` only exists for backwards compatibility.
+ _.template = function(text, settings, oldSettings) {
+ if (!settings && oldSettings) settings = oldSettings;
+ settings = _.defaults({}, settings, _.templateSettings);
+
+ // Combine delimiters into one regular expression via alternation.
+ var matcher = RegExp([
+ (settings.escape || noMatch).source,
+ (settings.interpolate || noMatch).source,
+ (settings.evaluate || noMatch).source
+ ].join('|') + '|$', 'g');
+
+ // Compile the template source, escaping string literals appropriately.
+ var index = 0;
+ var source = "__p+='";
+ text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
+ source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
+ index = offset + match.length;
+
+ if (escape) {
+ source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
+ } else if (interpolate) {
+ source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
+ } else if (evaluate) {
+ source += "';\n" + evaluate + "\n__p+='";
+ }
+
+ // Adobe VMs need the match returned to produce the correct offset.
+ return match;
+ });
+ source += "';\n";
+
+ var argument = settings.variable;
+ if (argument) {
+ // Insure against third-party code injection.
+ if (!bareIdentifier.test(argument)) throw new Error(
+ 'variable is not a bare identifier: ' + argument
+ );
+ } else {
+ // If a variable is not specified, place data values in local scope.
+ source = 'with(obj||{}){\n' + source + '}\n';
+ argument = 'obj';
+ }
+
+ source = "var __t,__p='',__j=Array.prototype.join," +
+ "print=function(){__p+=__j.call(arguments,'');};\n" +
+ source + 'return __p;\n';
+
+ var render;
+ try {
+ render = new Function(argument, '_', source);
+ } catch (e) {
+ e.source = source;
+ throw e;
+ }
+
+ var template = function(data) {
+ return render.call(this, data, _);
+ };
+
+ // Provide the compiled source as a convenience for precompilation.
+ template.source = 'function(' + argument + '){\n' + source + '}';
+
+ return template;
+ };
+
+ // Add a "chain" function. Start chaining a wrapped Underscore object.
+ _.chain = function(obj) {
+ var instance = _(obj);
+ instance._chain = true;
+ return instance;
+ };
+
+ // OOP
+ // ---------------
+ // If Underscore is called as a function, it returns a wrapped object that
+ // can be used OO-style. This wrapper holds altered versions of all the
+ // underscore functions. Wrapped objects may be chained.
+
+ // Helper function to continue chaining intermediate results.
+ var chainResult = function(instance, obj) {
+ return instance._chain ? _(obj).chain() : obj;
+ };
+
+ // Add your own custom functions to the Underscore object.
+ _.mixin = function(obj) {
+ _.each(_.functions(obj), function(name) {
+ var func = _[name] = obj[name];
+ _.prototype[name] = function() {
+ var args = [this._wrapped];
+ push.apply(args, arguments);
+ return chainResult(this, func.apply(_, args));
+ };
+ });
+ return _;
+ };
+
+ // Add all of the Underscore functions to the wrapper object.
+ _.mixin(_);
+
+ // Add all mutator Array functions to the wrapper.
+ _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
+ var method = ArrayProto[name];
+ _.prototype[name] = function() {
+ var obj = this._wrapped;
+ method.apply(obj, arguments);
+ if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];
+ return chainResult(this, obj);
+ };
+ });
+
+ // Add all accessor Array functions to the wrapper.
+ _.each(['concat', 'join', 'slice'], function(name) {
+ var method = ArrayProto[name];
+ _.prototype[name] = function() {
+ return chainResult(this, method.apply(this._wrapped, arguments));
+ };
+ });
+
+ // Extracts the result from a wrapped and chained object.
+ _.prototype.value = function() {
+ return this._wrapped;
+ };
+
+ // Provide unwrapping proxy for some methods used in engine operations
+ // such as arithmetic and JSON stringification.
+ _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;
+
+ _.prototype.toString = function() {
+ return String(this._wrapped);
+ };
+
+ // AMD registration happens at the end for compatibility with AMD loaders
+ // that may not enforce next-turn semantics on modules. Even though general
+ // practice for AMD registration is to be anonymous, underscore registers
+ // as a named module because, like jQuery, it is a base library that is
+ // popular enough to be bundled in a third party lib, but not be part of
+ // an AMD load request. Those cases could generate an error when an
+ // anonymous define() is called outside of a loader request.
+ if (typeof define == 'function' && define.amd) {
+ define('underscore', [], function() {
+ return _;
+ });
+ }
+}());
diff --git a/doc/bmc.html b/doc/bmc.html
index a1d0da8..7e83976 100644
--- a/doc/bmc.html
+++ b/doc/bmc.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL &lt;–&gt; BMC interactions &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL &lt;–&gt; BMC interactions &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="error-logging.html" title="How to log errors on OPAL"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL &lt;–&gt; BMC interactions</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -53,8 +54,8 @@ that skiboot performs with the BMC.</p>
are:</p>
<blockquote>
<div><ul class="simple">
-<li><p>Boot Count [type 0xc3: OEM reserved]</p></li>
-<li><p>FW Boot progress [type 0x0f: System Firmware Progress]</p></li>
+<li>Boot Count [type 0xc3: OEM reserved]</li>
+<li>FW Boot progress [type 0x0f: System Firmware Progress]</li>
</ul>
</div></blockquote>
<p>Boot Count: assertion type. When OPAL reaches a late stage of boot, it sets the
@@ -64,24 +65,27 @@ or aborted boot, for switching to a known-good firmware image.</p>
to one of the IPMI-defined progress codes. The codes use by skiboot are:</p>
<blockquote>
<div><ul class="simple">
-<li><dl class="simple">
-<dt>PCI Resource configuration (0x01)</dt><dd><ul>
-<li><p>asserted as the PCI devices have been probed and resources allocated</p></li>
+<li><dl class="first docutils">
+<dt>PCI Resource configuration (0x01)</dt>
+<dd><ul class="first last">
+<li>asserted as the PCI devices have been probed and resources allocated</li>
</ul>
</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>Motherboard init (0x14)</dt><dd><ul>
-<li><p>asserted as the platform-specific components have been initialised</p></li>
+<li><dl class="first docutils">
+<dt>Motherboard init (0x14)</dt>
+<dd><ul class="first last">
+<li>asserted as the platform-specific components have been initialised</li>
</ul>
</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>OS boot (0x13)</dt><dd><ul>
-<li><p>asserted after skiboot has loaded the PAYLOAD image, and is about to
-boot it.</p></li>
+<li><dl class="first docutils">
+<dt>OS boot (0x13)</dt>
+<dd><ul class="first last">
+<li>asserted after skiboot has loaded the PAYLOAD image, and is about to
+boot it.</li>
</ul>
</dd>
</dl>
@@ -138,7 +142,6 @@ the flag is not set and validation doesn’t occur.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -170,15 +173,17 @@ the flag is not set and validation doesn’t occur.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -195,14 +200,13 @@ the flag is not set and validation doesn’t occur.</p>
<li class="right" >
<a href="error-logging.html" title="How to log errors on OPAL"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL &lt;–&gt; BMC interactions</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/console-log.html b/doc/console-log.html
index 221de84..9f08a9f 100644
--- a/doc/console-log.html
+++ b/doc/console-log.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>SkiBoot Console Log &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>SkiBoot Console Log &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="process/versioning.html" title="Versioning Scheme of skiboot"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">SkiBoot Console Log</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -52,20 +53,21 @@ of the memory console, we’re pretty keen on keeping its location
static.</p>
<p>Events are logged in the following format:
<code class="docutils literal notranslate"><span class="pre">[S.T,L]</span> <span class="pre">message</span></code> where:</p>
-<dl class="field-list simple">
-<dt class="field-odd">S</dt>
-<dd class="field-odd"><p>Seconds, which is the timebase divided by 512,000,000.
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">S:</th><td class="field-body">Seconds, which is the timebase divided by 512,000,000.
<strong>NOTE</strong>: The timebase is reset during boot, so zero is a few dozen
-messages into skiboot booting.</p>
-</dd>
-<dt class="field-even">T</dt>
-<dd class="field-even"><p>Remaining Timebase. It is <em>NOT</em> a fraction of a second, but rather
-timebase%512000000</p>
-</dd>
-<dt class="field-odd">L</dt>
-<dd class="field-odd"><p>Log level (see below)</p>
-</dd>
-</dl>
+messages into skiboot booting.</td>
+</tr>
+<tr class="field-even field"><th class="field-name">T:</th><td class="field-body">Remaining Timebase. It is <em>NOT</em> a fraction of a second, but rather
+timebase%512000000</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">L:</th><td class="field-body">Log level (see below)</td>
+</tr>
+</tbody>
+</table>
<p>Example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">2.223466021</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">FLASH</span><span class="p">:</span> <span class="n">Found</span> <span class="n">system</span> <span class="n">flash</span><span class="p">:</span> <span class="n">Macronix</span> <span class="n">MXxxL51235F</span> <span class="nb">id</span><span class="p">:</span><span class="mi">0</span>
<span class="p">[</span> <span class="mf">3.494892796</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">FLASH</span><span class="p">:</span> <span class="n">flash</span> <span class="n">subpartition</span> <span class="n">eyecatcher</span> <span class="n">CAPP</span>
@@ -78,49 +80,49 @@ with prlog() calls.</p>
<p>See timebase.h for full timebase explanation.</p>
<div class="section" id="log-levels">
<h2>Log levels<a class="headerlink" href="#log-levels" title="Permalink to this headline">¶</a></h2>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 60%" />
-<col style="width: 40%" />
+<col width="60%" />
+<col width="40%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Define</p></th>
-<th class="head"><p>Value</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Define</th>
+<th class="head">Value</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>PR_EMERG</p></td>
-<td><p>0</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>PR_EMERG</td>
+<td>0</td>
</tr>
-<tr class="row-odd"><td><p>PR_ALERT</p></td>
-<td><p>1</p></td>
+<tr class="row-odd"><td>PR_ALERT</td>
+<td>1</td>
</tr>
-<tr class="row-even"><td><p>PR_CRIT</p></td>
-<td><p>2</p></td>
+<tr class="row-even"><td>PR_CRIT</td>
+<td>2</td>
</tr>
-<tr class="row-odd"><td><p>PR_ERR</p></td>
-<td><p>3</p></td>
+<tr class="row-odd"><td>PR_ERR</td>
+<td>3</td>
</tr>
-<tr class="row-even"><td><p>PR_WARNING</p></td>
-<td><p>4</p></td>
+<tr class="row-even"><td>PR_WARNING</td>
+<td>4</td>
</tr>
-<tr class="row-odd"><td><p>PR_NOTICE</p></td>
-<td><p>5</p></td>
+<tr class="row-odd"><td>PR_NOTICE</td>
+<td>5</td>
</tr>
-<tr class="row-even"><td><p>PR_PRINTF</p></td>
-<td><p>PR_NOTICE</p></td>
+<tr class="row-even"><td>PR_PRINTF</td>
+<td>PR_NOTICE</td>
</tr>
-<tr class="row-odd"><td><p>PR_INFO</p></td>
-<td><p>6</p></td>
+<tr class="row-odd"><td>PR_INFO</td>
+<td>6</td>
</tr>
-<tr class="row-even"><td><p>PR_DEBUG</p></td>
-<td><p>7</p></td>
+<tr class="row-even"><td>PR_DEBUG</td>
+<td>7</td>
</tr>
-<tr class="row-odd"><td><p>PR_TRACE</p></td>
-<td><p>8</p></td>
+<tr class="row-odd"><td>PR_TRACE</td>
+<td>8</td>
</tr>
-<tr class="row-even"><td><p>PR_INSANE</p></td>
-<td><p>9</p></td>
+<tr class="row-even"><td>PR_INSANE</td>
+<td>9</td>
</tr>
</tbody>
</table>
@@ -131,9 +133,9 @@ what level is just written to the in memory console (or not at all).</p>
at runtime in the memory console and through console drivers (fsp/uart)</p>
<p>You can vary two things by poking in the debug descriptor:</p>
<ol class="arabic simple">
-<li><p>what log level is printed at all
-e.g. only turn on PR_TRACE at specific points during runtime</p></li>
-<li><p>what log level goes out the fsp/uart console, defaults to PR_PRINTF</p></li>
+<li>what log level is printed at all
+e.g. only turn on PR_TRACE at specific points during runtime</li>
+<li>what log level goes out the fsp/uart console, defaults to PR_PRINTF</li>
</ol>
<p>We use two 4bit numbers (1 byte) for this in debug descriptor (saving
some space, not needlessly wasting space that we may want in future).</p>
@@ -162,7 +164,6 @@ warning, notice, printf, info, debug, trace or insane. ie.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -191,15 +192,17 @@ warning, notice, printf, info, debug, trace or insane. ie.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -216,14 +219,13 @@ warning, notice, printf, info, debug, trace or insane. ie.</p>
<li class="right" >
<a href="process/versioning.html" title="Versioning Scheme of skiboot"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">SkiBoot Console Log</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree.html b/doc/device-tree.html
index c23b392..b551ae9 100644
--- a/doc/device-tree.html
+++ b/doc/device-tree.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Device Tree &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Device Tree &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="stb.html" title="Secure and Trusted Boot Library (LibSTB) Documentation"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Device Tree</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -50,24 +51,24 @@
<div class="section" id="general-comments">
<h2>General comments<a class="headerlink" href="#general-comments" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>skiboot does not require nodes to have phandle properties, but
+<li>skiboot does not require nodes to have phandle properties, but
if you have them then <em>all</em> nodes must have them including the
root of the device-tree (currently a HB bug !). It is recommended
-to have them since they are needed to represent the cache levels.</p></li>
-<li><p><strong>NOTE</strong>: The example tree below only has phandle properties for
+to have them since they are needed to represent the cache levels.</li>
+<li><strong>NOTE</strong>: The example tree below only has phandle properties for
nodes that are referenced by other nodes. This is <em>not</em> correct
and is purely done for keeping this document smaller, make sure
-to follow the rule above.</p></li>
-<li><p>Only the “phandle” property is required. Sapphire also generates
+to follow the rule above.</li>
+<li>Only the “phandle” property is required. Sapphire also generates
a “linux,phandle” for backward compatibility but doesn’t require
-it as an input</p></li>
-<li><p>Any property not specifically documented must be put in “as is”</p></li>
-<li><p>All ibm,chip-id properties contain a HW chip ID which correspond
+it as an input</li>
+<li>Any property not specifically documented must be put in “as is”</li>
+<li>All ibm,chip-id properties contain a HW chip ID which correspond
on P8 to the PIR value shifted right by 7 bits, ie. it’s a 6-bit
-value made of a 3-bit node number and a 3-bit chip number.</p></li>
-<li><p>Unit addresses (&#64;xxxx part of node names) should if possible use
+value made of a 3-bit node number and a 3-bit chip number.</li>
+<li>Unit addresses (&#64;xxxx part of node names) should if possible use
lower case hexadecimal to be consistent with what skiboot does
-and to help some stupid parsers out there…</p></li>
+and to help some stupid parsers out there…</li>
</ul>
</div>
<div class="section" id="reserve-map">
@@ -541,7 +542,6 @@ would work. Or even better: <cite>compatible = “goog,rhesus-v1”,”goog,rhes
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -575,15 +575,17 @@ would work. Or even better: <cite>compatible = “goog,rhesus-v1”,”goog,rhes
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -600,14 +602,13 @@ would work. Or even better: <cite>compatible = “goog,rhesus-v1”,”goog,rhes
<li class="right" >
<a href="stb.html" title="Secure and Trusted Boot Library (LibSTB) Documentation"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Device Tree</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,cvc.html b/doc/device-tree/ibm,cvc.html
index df80800..1e0730a 100644
--- a/doc/device-tree/ibm,cvc.html
+++ b/doc/device-tree/ibm,cvc.html
@@ -1,23 +1,25 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>ibm,cvc &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>ibm,cvc &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="ibm,firmware-versions node" href="ibm%2Cfirmware-versions.html" />
+ <link rel="next" title="ibm,firmware-versions node" href="ibm,firmware-versions.html" />
<link rel="prev" title="Device Tree" href="index.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
@@ -27,15 +29,14 @@
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
- <a href="ibm%2Cfirmware-versions.html" title="ibm,firmware-versions node"
+ <a href="ibm,firmware-versions.html" title="ibm,firmware-versions node"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="index.html" title="Device Tree"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,cvc</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
</ul>
</div>
@@ -88,7 +89,6 @@ memory-region: this points to the reserved memory where the
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -107,7 +107,7 @@ memory-region: this points to the reserved memory where the
<p class="topless"><a href="index.html"
title="previous chapter">Device Tree</a></p>
<h4>Next topic</h4>
- <p class="topless"><a href="ibm%2Cfirmware-versions.html"
+ <p class="topless"><a href="ibm,firmware-versions.html"
title="next chapter">ibm,firmware-versions node</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
@@ -117,15 +117,17 @@ memory-region: this points to the reserved memory where the
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -137,20 +139,19 @@ memory-region: this points to the reserved memory where the
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
- <a href="ibm%2Cfirmware-versions.html" title="ibm,firmware-versions node"
+ <a href="ibm,firmware-versions.html" title="ibm,firmware-versions node"
>next</a> |</li>
<li class="right" >
<a href="index.html" title="Device Tree"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,cvc</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,firmware-versions.html b/doc/device-tree/ibm,firmware-versions.html
index b17a033..1b2e119 100644
--- a/doc/device-tree/ibm,firmware-versions.html
+++ b/doc/device-tree/ibm,firmware-versions.html
@@ -1,24 +1,26 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>ibm,firmware-versions node &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>ibm,firmware-versions node &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="ibm,opal" href="ibm%2Copal.html" />
- <link rel="prev" title="ibm,cvc" href="ibm%2Ccvc.html" />
+ <link rel="next" title="ibm,opal" href="ibm,opal.html" />
+ <link rel="prev" title="ibm,cvc" href="ibm,cvc.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
@@ -27,15 +29,14 @@
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
- <a href="ibm%2Copal.html" title="ibm,opal"
+ <a href="ibm,opal.html" title="ibm,opal"
accesskey="N">next</a> |</li>
<li class="right" >
- <a href="ibm%2Ccvc.html" title="ibm,cvc"
+ <a href="ibm,cvc.html" title="ibm,cvc"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,firmware-versions node</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
</ul>
</div>
@@ -50,62 +51,62 @@
various firmware components as they were <strong>during boot</strong>. It <strong>does not</strong>
change if there are pending or runtime updates. It represents (to the best
of boot firmware’s ability) what versions of firmware were during this boot.</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 25%" />
-<col style="width: 12%" />
-<col style="width: 64%" />
+<col width="25%" />
+<col width="12%" />
+<col width="64%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Property</p></th>
-<th class="head"><p>Required</p></th>
-<th class="head"><p>Value</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Property</th>
+<th class="head">Required</th>
+<th class="head">Value</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>version</p></td>
-<td><p>POWER9</p></td>
-<td><p>See below</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>version</td>
+<td>POWER9</td>
+<td>See below</td>
</tr>
-<tr class="row-odd"><td><p>skiboot</p></td>
-<td><p>N</p></td>
-<td><p>component version number</p></td>
+<tr class="row-odd"><td>skiboot</td>
+<td>N</td>
+<td>component version number</td>
</tr>
-<tr class="row-even"><td><p>occ</p></td>
-<td><p>N</p></td>
-<td><p>component version number</p></td>
+<tr class="row-even"><td>occ</td>
+<td>N</td>
+<td>component version number</td>
</tr>
-<tr class="row-odd"><td><p>buildroot</p></td>
-<td><p>N</p></td>
-<td><p>component version number</p></td>
+<tr class="row-odd"><td>buildroot</td>
+<td>N</td>
+<td>component version number</td>
</tr>
-<tr class="row-even"><td><p>capp-ucode</p></td>
-<td><p>N</p></td>
-<td><p>component version number</p></td>
+<tr class="row-even"><td>capp-ucode</td>
+<td>N</td>
+<td>component version number</td>
</tr>
-<tr class="row-odd"><td><p>petitboot</p></td>
-<td><p>N</p></td>
-<td><p>component version number</p></td>
+<tr class="row-odd"><td>petitboot</td>
+<td>N</td>
+<td>component version number</td>
</tr>
-<tr class="row-even"><td><p>open-power</p></td>
-<td><p>N</p></td>
-<td><p>component version number</p></td>
+<tr class="row-even"><td>open-power</td>
+<td>N</td>
+<td>component version number</td>
</tr>
-<tr class="row-odd"><td><p>hostboot-binaries</p></td>
-<td><p>N</p></td>
-<td><p>component version number</p></td>
+<tr class="row-odd"><td>hostboot-binaries</td>
+<td>N</td>
+<td>component version number</td>
</tr>
-<tr class="row-even"><td><p>MACHINE-xml</p></td>
-<td><p>N</p></td>
-<td><p>MACHINE (e.g. habanero) machine XML version</p></td>
+<tr class="row-even"><td>MACHINE-xml</td>
+<td>N</td>
+<td>MACHINE (e.g. habanero) machine XML version</td>
</tr>
-<tr class="row-odd"><td><p>hostboot</p></td>
-<td><p>N</p></td>
-<td><p>component version number</p></td>
+<tr class="row-odd"><td>hostboot</td>
+<td>N</td>
+<td>component version number</td>
</tr>
-<tr class="row-even"><td><p>linux</p></td>
-<td><p>N</p></td>
-<td><p>component version number</p></td>
+<tr class="row-even"><td>linux</td>
+<td>N</td>
+<td>component version number</td>
</tr>
</tbody>
</table>
@@ -120,9 +121,9 @@ That is, the version that is applicable when determining if a machine
requires a firmware update.</p>
<p>Examples (for three different platforms):</p>
<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">IBM-sandwich-20170217</span></code></p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">open-power-habanero-v1.14-45-g78d89280c3f9-dirty</span></code></p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">open-power-SUPERMICRO-P8DTU-V2.00.GA2-20161028</span></code></p></li>
+<li><code class="docutils literal notranslate"><span class="pre">IBM-sandwich-20170217</span></code></li>
+<li><code class="docutils literal notranslate"><span class="pre">open-power-habanero-v1.14-45-g78d89280c3f9-dirty</span></code></li>
+<li><code class="docutils literal notranslate"><span class="pre">open-power-SUPERMICRO-P8DTU-V2.00.GA2-20161028</span></code></li>
</ul>
<p>To compare two versions (for the purpose of determining if the current
installed firmware is in need of updating to the one being compared against)
@@ -137,9 +138,9 @@ sections are ignored, until one starts with a digit (0-9) or a â€v’ or â€Vâ€
followed by a digit. Where there is a leading â€v’ or â€V’, it is also stripped.</p>
<p>For the above three examples, we’d be left with:</p>
<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">20170217</span></code></p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">1.14-45-g78d89280c3f9-dirty</span></code></p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">2.00.GA2-20161028</span></code></p></li>
+<li><code class="docutils literal notranslate"><span class="pre">20170217</span></code></li>
+<li><code class="docutils literal notranslate"><span class="pre">1.14-45-g78d89280c3f9-dirty</span></code></li>
+<li><code class="docutils literal notranslate"><span class="pre">2.00.GA2-20161028</span></code></li>
</ul>
<p>Each section is now compared until a difference is found. All comparisons
are done <em>lexically</em>. The lexical comparison sorts in this order: tilde (~),
@@ -164,58 +165,58 @@ sections “-g78d89280c3f9” and “-g123456789abc” differ and for all compar
familiar to those who are familiar with RPM and Debian package versioning.</p>
<p>The below table shows comparisons between versions and what the result should
be:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 36%" />
-<col style="width: 36%" />
-<col style="width: 27%" />
+<col width="36%" />
+<col width="36%" />
+<col width="27%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>A</p></th>
-<th class="head"><p>B</p></th>
-<th class="head"><p>Result</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">A</th>
+<th class="head">B</th>
+<th class="head">Result</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>1.14-45-g78d89280c3f9-dirty</p></td>
-<td><p>1.14-45-g78d89280c3f9-dirty</p></td>
-<td><p>Equal</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>1.14-45-g78d89280c3f9-dirty</td>
+<td>1.14-45-g78d89280c3f9-dirty</td>
+<td>Equal</td>
</tr>
-<tr class="row-odd"><td><p>1.14-45-g78d89280c3f9-dirty</p></td>
-<td><p>1.14-45-g78d89280c3f9</p></td>
-<td><p>A &gt; B</p></td>
+<tr class="row-odd"><td>1.14-45-g78d89280c3f9-dirty</td>
+<td>1.14-45-g78d89280c3f9</td>
+<td>A &gt; B</td>
</tr>
-<tr class="row-even"><td><p>1.14-45-g78d89280c3f9-dirty</p></td>
-<td><p>1.14-45-g123456789abc</p></td>
-<td><p>A &lt; B, A &gt; B, A != B</p></td>
+<tr class="row-even"><td>1.14-45-g78d89280c3f9-dirty</td>
+<td>1.14-45-g123456789abc</td>
+<td>A &lt; B, A &gt; B, A != B</td>
</tr>
-<tr class="row-odd"><td><p>1.14-45-g78d89280c3f9-dirty</p></td>
-<td><p>1.14-46</p></td>
-<td><p>A &lt; B</p></td>
+<tr class="row-odd"><td>1.14-45-g78d89280c3f9-dirty</td>
+<td>1.14-46</td>
+<td>A &lt; B</td>
</tr>
-<tr class="row-even"><td><p>1.14-45-g78d89280c3f9-dirty</p></td>
-<td><p>1.15</p></td>
-<td><p>A &lt; B</p></td>
+<tr class="row-even"><td>1.14-45-g78d89280c3f9-dirty</td>
+<td>1.15</td>
+<td>A &lt; B</td>
</tr>
-<tr class="row-odd"><td><p>1.14-45-g78d89280c3f9-dirty</p></td>
-<td><p>1:1.0</p></td>
-<td><p>A &lt; B</p></td>
+<tr class="row-odd"><td>1.14-45-g78d89280c3f9-dirty</td>
+<td>1:1.0</td>
+<td>A &lt; B</td>
</tr>
-<tr class="row-even"><td><p>1.0</p></td>
-<td><p>1.0~daily20170201</p></td>
-<td><p>A &gt; B</p></td>
+<tr class="row-even"><td>1.0</td>
+<td>1.0~daily20170201</td>
+<td>A &gt; B</td>
</tr>
-<tr class="row-odd"><td><p>1.0.1</p></td>
-<td><p>1.0~daily20170201</p></td>
-<td><p>A &gt; B</p></td>
+<tr class="row-odd"><td>1.0.1</td>
+<td>1.0~daily20170201</td>
+<td>A &gt; B</td>
</tr>
-<tr class="row-even"><td><p>1.0</p></td>
-<td><p>1.0.1</p></td>
-<td><p>A &lt; B</p></td>
+<tr class="row-even"><td>1.0</td>
+<td>1.0.1</td>
+<td>A &lt; B</td>
</tr>
-<tr class="row-odd"><td><p>1.0</p></td>
-<td><p>1.0beta</p></td>
-<td><p>A &lt; B</p></td>
+<tr class="row-odd"><td>1.0</td>
+<td>1.0beta</td>
+<td>A &lt; B</td>
</tr>
</tbody>
</table>
@@ -251,7 +252,6 @@ be:</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -267,10 +267,10 @@ be:</p>
</ul>
<h4>Previous topic</h4>
- <p class="topless"><a href="ibm%2Ccvc.html"
+ <p class="topless"><a href="ibm,cvc.html"
title="previous chapter">ibm,cvc</a></p>
<h4>Next topic</h4>
- <p class="topless"><a href="ibm%2Copal.html"
+ <p class="topless"><a href="ibm,opal.html"
title="next chapter">ibm,opal</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
@@ -280,15 +280,17 @@ be:</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -300,20 +302,19 @@ be:</p>
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
- <a href="ibm%2Copal.html" title="ibm,opal"
+ <a href="ibm,opal.html" title="ibm,opal"
>next</a> |</li>
<li class="right" >
- <a href="ibm%2Ccvc.html" title="ibm,cvc"
+ <a href="ibm,cvc.html" title="ibm,cvc"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,firmware-versions node</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,opal.html b/doc/device-tree/ibm,opal.html
index cadb85e..05020ff 100644
--- a/doc/device-tree/ibm,opal.html
+++ b/doc/device-tree/ibm,opal.html
@@ -1,24 +1,26 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>ibm,opal &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>ibm,opal &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="ibm,opal/diagnostics device tree entries" href="ibm%2Copal/diagnostics.html" />
- <link rel="prev" title="ibm,firmware-versions node" href="ibm%2Cfirmware-versions.html" />
+ <link rel="next" title="ibm,opal/diagnostics device tree entries" href="ibm,opal/diagnostics.html" />
+ <link rel="prev" title="ibm,firmware-versions node" href="ibm,firmware-versions.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
@@ -27,15 +29,14 @@
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
- <a href="ibm%2Copal/diagnostics.html" title="ibm,opal/diagnostics device tree entries"
+ <a href="ibm,opal/diagnostics.html" title="ibm,opal/diagnostics device tree entries"
accesskey="N">next</a> |</li>
<li class="right" >
- <a href="ibm%2Cfirmware-versions.html" title="ibm,firmware-versions node"
+ <a href="ibm,firmware-versions.html" title="ibm,firmware-versions node"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,opal</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
</ul>
</div>
@@ -48,18 +49,18 @@
<span id="device-tree-ibm-opal"></span><h1>ibm,opal<a class="headerlink" href="#ibm-opal" title="Permalink to this headline">¶</a></h1>
<div class="toctree-wrapper compound">
<ul>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Copal/diagnostics.html">ibm,opal/diagnostics device tree entries</a></li>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Copal/dump.html">Dump (MPIPL) Device Tree Binding</a></li>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Copal/firmware.html">System Firmware</a></li>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Copal/flash.html">ibm,opal/flash device tree entries</a></li>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Copal/led.html">Service Indicators (LEDS)</a></li>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Copal/nvram.html">nvram Device Tree Node</a></li>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Copal/oppanel.html">Operator Panel (oppanel)</a></li>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Copal/power-mgt.html">ibm,opal/power-mgt device tree entries</a></li>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Copal/secvar.html">Secvar Binding</a></li>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Copal/sensor-groups.html">ibm,opal/sensor-groups</a></li>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Copal/sensors.html">ibm,opal/sensors/ device tree nodes</a></li>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Copal/sysparams.html">sysparams</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,opal/diagnostics.html">ibm,opal/diagnostics device tree entries</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,opal/dump.html">Dump (MPIPL) Device Tree Binding</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,opal/firmware.html">System Firmware</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,opal/flash.html">ibm,opal/flash device tree entries</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,opal/led.html">Service Indicators (LEDS)</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,opal/nvram.html">nvram Device Tree Node</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,opal/oppanel.html">Operator Panel (oppanel)</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,opal/power-mgt.html">ibm,opal/power-mgt device tree entries</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,opal/secvar.html">Secvar Binding</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,opal/sensor-groups.html">ibm,opal/sensor-groups</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,opal/sensors.html">ibm,opal/sensors/ device tree nodes</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,opal/sysparams.html">sysparams</a></li>
</ul>
</div>
<div class="section" id="top-level-ibm-opal-node">
@@ -127,7 +128,6 @@ out if it should even try the fast reboot test on a particular platform
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -146,10 +146,10 @@ out if it should even try the fast reboot test on a particular platform
</ul>
<h4>Previous topic</h4>
- <p class="topless"><a href="ibm%2Cfirmware-versions.html"
+ <p class="topless"><a href="ibm,firmware-versions.html"
title="previous chapter">ibm,firmware-versions node</a></p>
<h4>Next topic</h4>
- <p class="topless"><a href="ibm%2Copal/diagnostics.html"
+ <p class="topless"><a href="ibm,opal/diagnostics.html"
title="next chapter">ibm,opal/diagnostics device tree entries</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
@@ -159,15 +159,17 @@ out if it should even try the fast reboot test on a particular platform
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -179,20 +181,19 @@ out if it should even try the fast reboot test on a particular platform
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
- <a href="ibm%2Copal/diagnostics.html" title="ibm,opal/diagnostics device tree entries"
+ <a href="ibm,opal/diagnostics.html" title="ibm,opal/diagnostics device tree entries"
>next</a> |</li>
<li class="right" >
- <a href="ibm%2Cfirmware-versions.html" title="ibm,firmware-versions node"
+ <a href="ibm,firmware-versions.html" title="ibm,firmware-versions node"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,opal</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,opal/diagnostics.html b/doc/device-tree/ibm,opal/diagnostics.html
index 19c585d..582fe85 100644
--- a/doc/device-tree/ibm,opal/diagnostics.html
+++ b/doc/device-tree/ibm,opal/diagnostics.html
@@ -1,24 +1,26 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>ibm,opal/diagnostics device tree entries &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>ibm,opal/diagnostics device tree entries &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../../_static/classic.css" />
+ <link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
- <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
- <script src="../../_static/jquery.js"></script>
- <script src="../../_static/underscore.js"></script>
- <script src="../../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="Dump (MPIPL) Device Tree Binding" href="dump.html" />
- <link rel="prev" title="ibm,opal" href="../ibm%2Copal.html" />
+ <link rel="prev" title="ibm,opal" href="../ibm,opal.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
@@ -30,13 +32,12 @@
<a href="dump.html" title="Dump (MPIPL) Device Tree Binding"
accesskey="N">next</a> |</li>
<li class="right" >
- <a href="../ibm%2Copal.html" title="ibm,opal"
+ <a href="../ibm,opal.html" title="ibm,opal"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" accesskey="U">ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,opal/diagnostics device tree entries</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" accesskey="U">ibm,opal</a> &#187;</li>
</ul>
</div>
@@ -64,14 +65,13 @@ interface, supporting the runtime processor recovery diagnostics functions.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h4>Previous topic</h4>
- <p class="topless"><a href="../ibm%2Copal.html"
+ <p class="topless"><a href="../ibm,opal.html"
title="previous chapter">ibm,opal</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="dump.html"
@@ -84,15 +84,17 @@ interface, supporting the runtime processor recovery diagnostics functions.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -107,18 +109,17 @@ interface, supporting the runtime processor recovery diagnostics functions.</p>
<a href="dump.html" title="Dump (MPIPL) Device Tree Binding"
>next</a> |</li>
<li class="right" >
- <a href="../ibm%2Copal.html" title="ibm,opal"
+ <a href="../ibm,opal.html" title="ibm,opal"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,opal/diagnostics device tree entries</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" >ibm,opal</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,opal/dump.html b/doc/device-tree/ibm,opal/dump.html
index 3747b99..4ce1f89 100644
--- a/doc/device-tree/ibm,opal/dump.html
+++ b/doc/device-tree/ibm,opal/dump.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Dump (MPIPL) Device Tree Binding &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Dump (MPIPL) Device Tree Binding &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../../_static/classic.css" />
+ <link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
- <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
- <script src="../../_static/jquery.js"></script>
- <script src="../../_static/underscore.js"></script>
- <script src="../../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
@@ -32,11 +34,10 @@
<li class="right" >
<a href="diagnostics.html" title="ibm,opal/diagnostics device tree entries"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" accesskey="U">ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Dump (MPIPL) Device Tree Binding</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" accesskey="U">ibm,opal</a> &#187;</li>
</ul>
</div>
@@ -82,7 +83,6 @@
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -110,15 +110,17 @@
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -135,16 +137,15 @@
<li class="right" >
<a href="diagnostics.html" title="ibm,opal/diagnostics device tree entries"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Dump (MPIPL) Device Tree Binding</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" >ibm,opal</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,opal/firmware.html b/doc/device-tree/ibm,opal/firmware.html
index f383edc..d2b3454 100644
--- a/doc/device-tree/ibm,opal/firmware.html
+++ b/doc/device-tree/ibm,opal/firmware.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>System Firmware &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>System Firmware &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../../_static/classic.css" />
+ <link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
- <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
- <script src="../../_static/jquery.js"></script>
- <script src="../../_static/underscore.js"></script>
- <script src="../../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
@@ -32,11 +34,10 @@
<li class="right" >
<a href="dump.html" title="Dump (MPIPL) Device Tree Binding"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" accesskey="U">ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">System Firmware</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" accesskey="U">ibm,opal</a> &#187;</li>
</ul>
</div>
@@ -59,23 +60,24 @@
<span class="p">};</span>
</pre></div>
</div>
-<dl>
-<dt><code class="docutils literal notranslate"><span class="pre">compatible</span></code></dt><dd><p>property describes OPAL compatibility.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">symbol-map</span></code></dt><dd><p>property describes OPAL symbol start address and size.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">version</span></code></dt><dd><p>property describes OPAL version. It replaced a property named â€git-id’ early
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">compatible</span></code></dt>
+<dd>property describes OPAL compatibility.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">symbol-map</span></code></dt>
+<dd>property describes OPAL symbol start address and size.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">version</span></code></dt>
+<dd><p class="first">property describes OPAL version. It replaced a property named â€git-id’ early
in the POWER8 lifecycle, so may not always be present. It will be absent on
IBM FSP based systems running firmware prior to FW840. The â€version’ property
is present on all GA POWER8 BMC systems.</p>
-<p>On POWER9 and above, it is always present.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">mi-version</span></code></dt><dd><p>property describes Microcode Image. Only on IBM FSP systems.
-Will (likely) not be present on POWER9 systems.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">ml-version</span></code></dt><dd><p>property describes Microcode Level. Only on IBM FSP systems.
-Will (likely) not be present on POWER9 systems.</p>
+<p class="last">On POWER9 and above, it is always present.</p>
</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">mi-version</span></code></dt>
+<dd>property describes Microcode Image. Only on IBM FSP systems.
+Will (likely) not be present on POWER9 systems.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">ml-version</span></code></dt>
+<dd>property describes Microcode Level. Only on IBM FSP systems.
+Will (likely) not be present on POWER9 systems.</dd>
</dl>
<div class="section" id="mi-ml-format">
<h2>MI/ML format<a class="headerlink" href="#mi-ml-format" title="Permalink to this headline">¶</a></h2>
@@ -86,7 +88,6 @@ Will (likely) not be present on POWER9 systems.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -114,15 +115,17 @@ Will (likely) not be present on POWER9 systems.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -139,16 +142,15 @@ Will (likely) not be present on POWER9 systems.</p>
<li class="right" >
<a href="dump.html" title="Dump (MPIPL) Device Tree Binding"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">System Firmware</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" >ibm,opal</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,opal/flash.html b/doc/device-tree/ibm,opal/flash.html
index 7821024..bbbd84e 100644
--- a/doc/device-tree/ibm,opal/flash.html
+++ b/doc/device-tree/ibm,opal/flash.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>ibm,opal/flash device tree entries &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>ibm,opal/flash device tree entries &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../../_static/classic.css" />
+ <link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
- <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
- <script src="../../_static/jquery.js"></script>
- <script src="../../_static/underscore.js"></script>
- <script src="../../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
@@ -32,11 +34,10 @@
<li class="right" >
<a href="firmware.html" title="System Firmware"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" accesskey="U">ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,opal/flash device tree entries</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" accesskey="U">ibm,opal</a> &#187;</li>
</ul>
</div>
@@ -53,19 +54,19 @@ accessed through the OPAL_FLASH_{READ,ERASE,WRITE} interface.</p>
property of the node.</p>
<p>The properties under a flash node are:</p>
<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">compatible</span> <span class="pre">=</span> <span class="pre">&quot;ibm,opal-flash&quot;</span></code></p></li>
+<li><code class="docutils literal notranslate"><span class="pre">compatible</span> <span class="pre">=</span> <span class="pre">&quot;ibm,opal-flash&quot;</span></code></li>
</ul>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">ibm,opal-id</span> <span class="pre">=</span> <span class="pre">&lt;id&gt;</span></code></dt><dd><p>provides the index used for the OPAL_FLASH_XXX calls to reference this
-flash device</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">reg</span> <span class="pre">=</span> <span class="pre">&lt;0</span> <span class="pre">size&gt;</span></code></dt><dd><p>the offset and size of the flash device</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">ibm,flash-block-size</span></code></dt><dd><p>the read/write/erase block size for the flash interface. Calls
-to read/write/erase must be aligned to the block size.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">#address-cells</span> <span class="pre">=</span> <span class="pre">&lt;1&gt;</span></code>, <code class="docutils literal notranslate"><span class="pre">#size-cells</span> <span class="pre">=</span> <span class="pre">&lt;1&gt;</span></code></dt><dd><p>flash devices are currently 32-bit addressable</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">ibm,opal-id</span> <span class="pre">=</span> <span class="pre">&lt;id&gt;</span></code></dt>
+<dd>provides the index used for the OPAL_FLASH_XXX calls to reference this
+flash device</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">reg</span> <span class="pre">=</span> <span class="pre">&lt;0</span> <span class="pre">size&gt;</span></code></dt>
+<dd>the offset and size of the flash device</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">ibm,flash-block-size</span></code></dt>
+<dd>the read/write/erase block size for the flash interface. Calls
+to read/write/erase must be aligned to the block size.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">#address-cells</span> <span class="pre">=</span> <span class="pre">&lt;1&gt;</span></code>, <code class="docutils literal notranslate"><span class="pre">#size-cells</span> <span class="pre">=</span> <span class="pre">&lt;1&gt;</span></code></dt>
+<dd>flash devices are currently 32-bit addressable</dd>
</dl>
<p>If valid partitions are found on the flash device, then <code class="docutils literal notranslate"><span class="pre">partition&#64;&lt;offset&gt;</span></code>
sub-nodes are added to the flash node. These match the Linux binding for
@@ -86,7 +87,6 @@ partition.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -106,15 +106,17 @@ partition.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -131,16 +133,15 @@ partition.</p>
<li class="right" >
<a href="firmware.html" title="System Firmware"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,opal/flash device tree entries</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" >ibm,opal</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,opal/led.html b/doc/device-tree/ibm,opal/led.html
index 0c1ffc2..d1abd82 100644
--- a/doc/device-tree/ibm,opal/led.html
+++ b/doc/device-tree/ibm,opal/led.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Service Indicators (LEDS) &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Service Indicators (LEDS) &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../../_static/classic.css" />
+ <link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
- <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
- <script src="../../_static/jquery.js"></script>
- <script src="../../_static/underscore.js"></script>
- <script src="../../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
@@ -32,11 +34,10 @@
<li class="right" >
<a href="flash.html" title="ibm,opal/flash device tree entries"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" accesskey="U">ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Service Indicators (LEDS)</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" accesskey="U">ibm,opal</a> &#187;</li>
</ul>
</div>
@@ -64,24 +65,23 @@ system and their capabilities.</p>
<span class="p">};</span>
</pre></div>
</div>
-<dl class="simple">
-<dt>compatible</dt><dd><p>property describes LEDs compatibility.</p>
-</dd>
-<dt>led-mode</dt><dd><p>property describes service indicator mode (lightpath/guidinglight).</p>
-</dd>
+<dl class="docutils">
+<dt>compatible</dt>
+<dd>property describes LEDs compatibility.</dd>
+<dt>led-mode</dt>
+<dd>property describes service indicator mode (lightpath/guidinglight).</dd>
</dl>
<p>Each node under â€leds’ node describes location code of FRU/Enclosure.</p>
<p>The properties under each node:</p>
-<dl class="simple">
-<dt>led-types</dt><dd><p>Supported indicators (attention/identify/fault).</p>
-</dd>
+<dl class="docutils">
+<dt>led-types</dt>
+<dd>Supported indicators (attention/identify/fault).</dd>
</dl>
<p>These LEDs can be accessed through OPAL_LEDS_{GET/SET}_INDICATOR interfaces.
Refer to <a class="reference internal" href="../../opal-api/opal-led-get-set-114-115.html#opal-api-leds"><span class="std std-ref">Service Indicators (LEDS)</span></a> for interface details.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -101,15 +101,17 @@ Refer to <a class="reference internal" href="../../opal-api/opal-led-get-set-114
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -126,16 +128,15 @@ Refer to <a class="reference internal" href="../../opal-api/opal-led-get-set-114
<li class="right" >
<a href="flash.html" title="ibm,opal/flash device tree entries"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Service Indicators (LEDS)</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" >ibm,opal</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,opal/nvram.html b/doc/device-tree/ibm,opal/nvram.html
index d4d4ae0..85ca5d1 100644
--- a/doc/device-tree/ibm,opal/nvram.html
+++ b/doc/device-tree/ibm,opal/nvram.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>nvram Device Tree Node &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>nvram Device Tree Node &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../../_static/classic.css" />
+ <link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
- <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
- <script src="../../_static/jquery.js"></script>
- <script src="../../_static/underscore.js"></script>
- <script src="../../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
@@ -32,11 +34,10 @@
<li class="right" >
<a href="led.html" title="Service Indicators (LEDS)"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" accesskey="U">ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">nvram Device Tree Node</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" accesskey="U">ibm,opal</a> &#187;</li>
</ul>
</div>
@@ -57,7 +58,6 @@
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -77,15 +77,17 @@
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -102,16 +104,15 @@
<li class="right" >
<a href="led.html" title="Service Indicators (LEDS)"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">nvram Device Tree Node</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" >ibm,opal</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,opal/oppanel.html b/doc/device-tree/ibm,opal/oppanel.html
index 10958dc..a4f1d58 100644
--- a/doc/device-tree/ibm,opal/oppanel.html
+++ b/doc/device-tree/ibm,opal/oppanel.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Operator Panel (oppanel) &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Operator Panel (oppanel) &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../../_static/classic.css" />
+ <link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
- <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
- <script src="../../_static/jquery.js"></script>
- <script src="../../_static/underscore.js"></script>
- <script src="../../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
@@ -32,11 +34,10 @@
<li class="right" >
<a href="nvram.html" title="nvram Device Tree Node"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" accesskey="U">ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Operator Panel (oppanel)</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" accesskey="U">ibm,opal</a> &#187;</li>
</ul>
</div>
@@ -66,7 +67,6 @@ and can pass buffers of the appropriate size to the OPAL calls.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -86,15 +86,17 @@ and can pass buffers of the appropriate size to the OPAL calls.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -111,16 +113,15 @@ and can pass buffers of the appropriate size to the OPAL calls.</p>
<li class="right" >
<a href="nvram.html" title="nvram Device Tree Node"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Operator Panel (oppanel)</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" >ibm,opal</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,opal/power-mgt.html b/doc/device-tree/ibm,opal/power-mgt.html
index bde515a..814f462 100644
--- a/doc/device-tree/ibm,opal/power-mgt.html
+++ b/doc/device-tree/ibm,opal/power-mgt.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>ibm,opal/power-mgt device tree entries &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>ibm,opal/power-mgt device tree entries &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../../_static/classic.css" />
+ <link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
- <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
- <script src="../../_static/jquery.js"></script>
- <script src="../../_static/underscore.js"></script>
- <script src="../../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
@@ -32,11 +34,10 @@
<li class="right" >
<a href="oppanel.html" title="Operator Panel (oppanel)"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" accesskey="U">ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,opal/power-mgt device tree entries</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" accesskey="U">ibm,opal</a> &#187;</li>
</ul>
</div>
@@ -176,7 +177,6 @@ ambient temperature, active core counts)</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -212,15 +212,17 @@ ambient temperature, active core counts)</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -237,16 +239,15 @@ ambient temperature, active core counts)</p>
<li class="right" >
<a href="oppanel.html" title="Operator Panel (oppanel)"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,opal/power-mgt device tree entries</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" >ibm,opal</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,opal/power-mgt/occ.html b/doc/device-tree/ibm,opal/power-mgt/occ.html
index bfaaf0b..d9bf2a7 100644
--- a/doc/device-tree/ibm,opal/power-mgt/occ.html
+++ b/doc/device-tree/ibm,opal/power-mgt/occ.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>ibm,opal/power-mgt/occ device tree entries &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>ibm,opal/power-mgt/occ device tree entries &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../../../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../../../_static/classic.css" />
+ <link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
- <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
- <script src="../../../_static/jquery.js"></script>
- <script src="../../../_static/underscore.js"></script>
- <script src="../../../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
@@ -32,12 +34,11 @@
<li class="right" >
<a href="../power-mgt.html" title="ibm,opal/power-mgt device tree entries"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-3"><a href="../power-mgt.html" accesskey="U">ibm,opal/power-mgt device tree entries</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,opal/power-mgt/occ device tree entries</a></li>
+ <li class="nav-item nav-item-2"><a href="../../ibm,opal.html" >ibm,opal</a> &#187;</li>
+ <li class="nav-item nav-item-3"><a href="../power-mgt.html" accesskey="U">ibm,opal/power-mgt device tree entries</a> &#187;</li>
</ul>
</div>
@@ -113,7 +114,6 @@ of a frequency domain.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -145,15 +145,17 @@ of a frequency domain.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -170,17 +172,16 @@ of a frequency domain.</p>
<li class="right" >
<a href="../power-mgt.html" title="ibm,opal/power-mgt device tree entries"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-3"><a href="../power-mgt.html" >ibm,opal/power-mgt device tree entries</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,opal/power-mgt/occ device tree entries</a></li>
+ <li class="nav-item nav-item-2"><a href="../../ibm,opal.html" >ibm,opal</a> &#187;</li>
+ <li class="nav-item nav-item-3"><a href="../power-mgt.html" >ibm,opal/power-mgt device tree entries</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,opal/power-mgt/powercap.html b/doc/device-tree/ibm,opal/power-mgt/powercap.html
index 1941bc5..d319491 100644
--- a/doc/device-tree/ibm,opal/power-mgt/powercap.html
+++ b/doc/device-tree/ibm,opal/power-mgt/powercap.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>power-mgt/powercap &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>power-mgt/powercap &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../../../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../../../_static/classic.css" />
+ <link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
- <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
- <script src="../../../_static/jquery.js"></script>
- <script src="../../../_static/underscore.js"></script>
- <script src="../../../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
@@ -32,12 +34,11 @@
<li class="right" >
<a href="occ.html" title="ibm,opal/power-mgt/occ device tree entries"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-3"><a href="../power-mgt.html" accesskey="U">ibm,opal/power-mgt device tree entries</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">power-mgt/powercap</a></li>
+ <li class="nav-item nav-item-2"><a href="../../ibm,opal.html" >ibm,opal</a> &#187;</li>
+ <li class="nav-item nav-item-3"><a href="../power-mgt.html" accesskey="U">ibm,opal/power-mgt device tree entries</a> &#187;</li>
</ul>
</div>
@@ -59,18 +60,18 @@ what powercap property to get/set which is defined in the child node.</p>
<p>The compatible property for the linux driver which will be
“ibm,opal-powercap”</p>
<p>Each child node has below properties:</p>
-<dl class="simple">
-<dt><cite>powercap-current</cite></dt><dd><p>Handle to indicate the current powercap</p>
-</dd>
-<dt><cite>powercap-min</cite></dt><dd><p>Absolute minimum possible powercap. This points to the soft powercap minimum
+<dl class="docutils">
+<dt><cite>powercap-current</cite></dt>
+<dd>Handle to indicate the current powercap</dd>
+<dt><cite>powercap-min</cite></dt>
+<dd>Absolute minimum possible powercap. This points to the soft powercap minimum
limit as exported by OCC. The powercap set in the soft powercap range may or
-may not be maintained.</p>
-</dd>
-<dt><cite>powercap-max</cite></dt><dd><p>Maximum possible powercap</p>
-</dd>
-<dt><cite>powercap-hard-min</cite></dt><dd><p>This value points to the hard minimum powercap limit. The powercap set above
-this limit is guaranteed unless there is a hardware failure</p>
-</dd>
+may not be maintained.</dd>
+<dt><cite>powercap-max</cite></dt>
+<dd>Maximum possible powercap</dd>
+<dt><cite>powercap-hard-min</cite></dt>
+<dd>This value points to the hard minimum powercap limit. The powercap set above
+this limit is guaranteed unless there is a hardware failure</dd>
</dl>
<p>Powercap handle uses the following encoding:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">|</span> <span class="n">Class</span> <span class="o">|</span> <span class="n">Reserved</span> <span class="o">|</span> <span class="n">Attribute</span> <span class="o">|</span>
@@ -97,7 +98,6 @@ the future.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -117,15 +117,17 @@ the future.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -142,17 +144,16 @@ the future.</p>
<li class="right" >
<a href="occ.html" title="ibm,opal/power-mgt/occ device tree entries"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-3"><a href="../power-mgt.html" >ibm,opal/power-mgt device tree entries</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">power-mgt/powercap</a></li>
+ <li class="nav-item nav-item-2"><a href="../../ibm,opal.html" >ibm,opal</a> &#187;</li>
+ <li class="nav-item nav-item-3"><a href="../power-mgt.html" >ibm,opal/power-mgt device tree entries</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,opal/power-mgt/psr.html b/doc/device-tree/ibm,opal/power-mgt/psr.html
index 13bc15a..84a46c0 100644
--- a/doc/device-tree/ibm,opal/power-mgt/psr.html
+++ b/doc/device-tree/ibm,opal/power-mgt/psr.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>power-mgt/psr &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>power-mgt/psr &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../../../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../../../_static/classic.css" />
+ <link rel="stylesheet" href="../../../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
- <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
- <script src="../../../_static/jquery.js"></script>
- <script src="../../../_static/underscore.js"></script>
- <script src="../../../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
@@ -32,12 +34,11 @@
<li class="right" >
<a href="powercap.html" title="power-mgt/powercap"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-3"><a href="../power-mgt.html" accesskey="U">ibm,opal/power-mgt device tree entries</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">power-mgt/psr</a></li>
+ <li class="nav-item nav-item-2"><a href="../../ibm,opal.html" >ibm,opal</a> &#187;</li>
+ <li class="nav-item nav-item-3"><a href="../power-mgt.html" accesskey="U">ibm,opal/power-mgt device tree entries</a> &#187;</li>
</ul>
</div>
@@ -57,17 +58,17 @@ tree.</p>
versus GPU.</p>
<p>Each child node in the “psr” node represents a configurable psr
sensor.</p>
-<dl class="simple">
-<dt>For example<span class="classifier">::</span></dt><dd><p>cpu-to-gpu&#64;1</p>
-</dd>
+<dl class="docutils">
+<dt>For example <span class="classifier-delimiter">:</span> <span class="classifier">::</span></dt>
+<dd>cpu-to-gpu&#64;1</dd>
</dl>
<p>The compatible property is set to “ibm,opal-power-shift-ratio”.</p>
<p>Each child node has below properties:</p>
-<dl class="simple">
-<dt><cite>handle</cite></dt><dd><p>Handle to indicate the type of psr</p>
-</dd>
-<dt><cite>label</cite></dt><dd><p>Name of the psr sensor</p>
-</dd>
+<dl class="docutils">
+<dt><cite>handle</cite></dt>
+<dd>Handle to indicate the type of psr</dd>
+<dt><cite>label</cite></dt>
+<dd>Name of the psr sensor</dd>
</dl>
<p>The format of the handle is internal, and <code class="docutils literal notranslate"><span class="pre">not</span></code> ABI, although
currently it uses the following encoding</p>
@@ -97,7 +98,6 @@ currently it uses the following encoding</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -117,15 +117,17 @@ currently it uses the following encoding</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -142,17 +144,16 @@ currently it uses the following encoding</p>
<li class="right" >
<a href="powercap.html" title="power-mgt/powercap"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-3"><a href="../power-mgt.html" >ibm,opal/power-mgt device tree entries</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">power-mgt/psr</a></li>
+ <li class="nav-item nav-item-2"><a href="../../ibm,opal.html" >ibm,opal</a> &#187;</li>
+ <li class="nav-item nav-item-3"><a href="../power-mgt.html" >ibm,opal/power-mgt device tree entries</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,opal/secvar.html b/doc/device-tree/ibm,opal/secvar.html
index f6c86c6..3ae56ec 100644
--- a/doc/device-tree/ibm,opal/secvar.html
+++ b/doc/device-tree/ibm,opal/secvar.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Secvar Binding &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Secvar Binding &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../../_static/classic.css" />
+ <link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
- <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
- <script src="../../_static/jquery.js"></script>
- <script src="../../_static/underscore.js"></script>
- <script src="../../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
@@ -32,11 +34,10 @@
<li class="right" >
<a href="power-mgt/psr.html" title="power-mgt/psr"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" accesskey="U">ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Secvar Binding</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" accesskey="U">ibm,opal</a> &#187;</li>
</ul>
</div>
@@ -60,11 +61,13 @@ system.</p>
variables. It will not be created if the system does not.</p>
<p>Properties:</p>
<ul>
-<li><p>compatible</p>
-<dl class="simple">
-<dt>Usage:</dt><dd><p>required</p>
+<li><p class="first">compatible</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">required</p>
</dd>
-<dt>Value type:</dt><dd><p>string</p>
+<dt>Value type:</dt>
+<dd><p class="first last">string</p>
</dd>
</dl>
<p>Definition:</p>
@@ -82,11 +85,13 @@ which defines the basic-level compatibility of the secvar implementation.
This includes the basic behavior of the API (excluding the data format),
and the expected device tree properties contained in this node.</p>
</li>
-<li><p>format</p>
-<dl class="simple">
-<dt>Usage:</dt><dd><p>required</p>
+<li><p class="first">format</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">required</p>
</dd>
-<dt>Value type:</dt><dd><p>string</p>
+<dt>Value type:</dt>
+<dd><p class="first last">string</p>
</dd>
</dl>
<p>This property defines the format of data passed in and out of the secvar
@@ -95,11 +100,13 @@ string in compatible.</p>
<p>The format defined by this string should be documented by the corresponding
backend.</p>
</li>
-<li><p>status</p>
-<dl class="simple">
-<dt>Usage:</dt><dd><p>required</p>
+<li><p class="first">status</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">required</p>
</dd>
-<dt>Value type:</dt><dd><p>string</p>
+<dt>Value type:</dt>
+<dd><p class="first last">string</p>
</dd>
</dl>
<p>Definition:</p>
@@ -113,11 +120,13 @@ are inaccessible for some reason.</p>
<p>Failures are NOT caused by malformed data loaded or processed in either
storage or backend drivers, as these are faults correctable by a user.</p>
</li>
-<li><p>update-status</p>
-<dl class="simple">
-<dt>Usage:</dt><dd><p>required</p>
+<li><p class="first">update-status</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">required</p>
</dd>
-<dt>Value type:</dt><dd><p>&lt;u64&gt;</p>
+<dt>Value type:</dt>
+<dd><p class="first last">&lt;u64&gt;</p>
</dd>
</dl>
<p>Definition:</p>
@@ -129,11 +138,13 @@ intended.</p>
Any additional error states that may be specific to a backend should
be stored in the backend node.</p>
</li>
-<li><p>max-var-size</p>
-<dl class="simple">
-<dt>Usage:</dt><dd><p>required</p>
+<li><p class="first">max-var-size</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">required</p>
</dd>
-<dt>Value type:</dt><dd><p>&lt;u64&gt;</p>
+<dt>Value type:</dt>
+<dd><p class="first last">&lt;u64&gt;</p>
</dd>
</dl>
<p>Definition:</p>
@@ -144,11 +155,13 @@ reject loading variables larger than this value.</p>
value is determined by the storage driver, and may differ across
platforms.</p>
</li>
-<li><p>max-var-key-len</p>
-<dl class="simple">
-<dt>Usage:</dt><dd><p>required</p>
+<li><p class="first">max-var-key-len</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">required</p>
</dd>
-<dt>Value type:</dt><dd><p>&lt;u64&gt;</p>
+<dt>Value type:</dt>
+<dd><p class="first last">&lt;u64&gt;</p>
</dd>
</dl>
<p>Definition:</p>
@@ -176,35 +189,35 @@ changed in code.</p>
that best fits its error condition. The following table defines the
general intent of each error code, check backend specific documentation
for more detail.</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 27%" />
-<col style="width: 73%" />
+<col width="27%" />
+<col width="73%" />
</colgroup>
-<tbody>
-<tr class="row-odd"><td><p>update-status</p></td>
-<td><p>Generic Reason</p></td>
+<tbody valign="top">
+<tr class="row-odd"><td>update-status</td>
+<td>Generic Reason</td>
</tr>
-<tr class="row-even"><td><p>OPAL_SUCCESS</p></td>
-<td><p>Updates were found and processed successfully</p></td>
+<tr class="row-even"><td>OPAL_SUCCESS</td>
+<td>Updates were found and processed successfully</td>
</tr>
-<tr class="row-odd"><td><p>OPAL_EMPTY</p></td>
-<td><p>No updates were found, none processed</p></td>
+<tr class="row-odd"><td>OPAL_EMPTY</td>
+<td>No updates were found, none processed</td>
</tr>
-<tr class="row-even"><td><p>OPAL_PARAMETER</p></td>
-<td><p>Malformed, or unexpected update data blob</p></td>
+<tr class="row-even"><td>OPAL_PARAMETER</td>
+<td>Malformed, or unexpected update data blob</td>
</tr>
-<tr class="row-odd"><td><p>OPAL_PERMISSION</p></td>
-<td><p>Update failed to apply, possible auth failure</p></td>
+<tr class="row-odd"><td>OPAL_PERMISSION</td>
+<td>Update failed to apply, possible auth failure</td>
</tr>
-<tr class="row-even"><td><p>OPAL_HARDWARE</p></td>
-<td><p>Misc. storage-related error</p></td>
+<tr class="row-even"><td>OPAL_HARDWARE</td>
+<td>Misc. storage-related error</td>
</tr>
-<tr class="row-odd"><td><p>OPAL_RESOURCE</p></td>
-<td><p>Out of space (reported by storage</p></td>
+<tr class="row-odd"><td>OPAL_RESOURCE</td>
+<td>Out of space (reported by storage</td>
</tr>
-<tr class="row-even"><td><p>OPAL_NO_MEM</p></td>
-<td><p>Out of memory</p></td>
+<tr class="row-even"><td>OPAL_NO_MEM</td>
+<td>Out of memory</td>
</tr>
</tbody>
</table>
@@ -225,7 +238,6 @@ PK, the system will be in “secure mode” until the PK is deleted.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -256,15 +268,17 @@ PK, the system will be in “secure mode” until the PK is deleted.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -281,16 +295,15 @@ PK, the system will be in “secure mode” until the PK is deleted.</p>
<li class="right" >
<a href="power-mgt/psr.html" title="power-mgt/psr"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Secvar Binding</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" >ibm,opal</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,opal/sensor-groups.html b/doc/device-tree/ibm,opal/sensor-groups.html
index 13bddda..559f8ae 100644
--- a/doc/device-tree/ibm,opal/sensor-groups.html
+++ b/doc/device-tree/ibm,opal/sensor-groups.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>ibm,opal/sensor-groups &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>ibm,opal/sensor-groups &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../../_static/classic.css" />
+ <link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
- <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
- <script src="../../_static/jquery.js"></script>
- <script src="../../_static/underscore.js"></script>
- <script src="../../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
@@ -32,11 +34,10 @@
<li class="right" >
<a href="secvar.html" title="Secvar Binding"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" accesskey="U">ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,opal/sensor-groups</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" accesskey="U">ibm,opal</a> &#187;</li>
</ul>
</div>
@@ -49,24 +50,24 @@
<span id="device-tree-ibm-opal-sensor-groups"></span><h1>ibm,opal/sensor-groups<a class="headerlink" href="#ibm-opal-sensor-groups" title="Permalink to this headline">¶</a></h1>
<p>This node contains all sensor groups defined in the system.
Each child node here represents a sensor group.</p>
-<dl class="simple">
-<dt>For example<span class="classifier">::</span></dt><dd><p><a class="reference external" href="mailto:occ-csm&#37;&#52;&#48;1c00020/">occ-csm<span>&#64;</span>1c00020/</a></p>
-</dd>
+<dl class="docutils">
+<dt>For example <span class="classifier-delimiter">:</span> <span class="classifier">::</span></dt>
+<dd><a class="reference external" href="mailto:occ-csm&#37;&#52;&#48;1c00020/">occ-csm<span>&#64;</span>1c00020/</a></dd>
</dl>
<p>The compatible property is set to “ibm,opal-sensor-group”</p>
<p>Each child node has below properties:</p>
-<dl class="simple">
-<dt><cite>type</cite></dt><dd><p>string to indicate the sensor group</p>
-</dd>
-<dt><cite>sensor-group-id</cite></dt><dd><p>Uniquely identifies a sensor group.</p>
-</dd>
-<dt><cite>ibm,chip-id</cite></dt><dd><p>This property is added if the sensor group is chip specific</p>
-</dd>
-<dt><cite>sensors</cite></dt><dd><p>Phandles of all sensors belonging to this sensor group</p>
-</dd>
-<dt><cite>ops</cite></dt><dd><p>Array of opal call numbers to indicate the available sensor group
-operations</p>
-</dd>
+<dl class="docutils">
+<dt><cite>type</cite></dt>
+<dd>string to indicate the sensor group</dd>
+<dt><cite>sensor-group-id</cite></dt>
+<dd>Uniquely identifies a sensor group.</dd>
+<dt><cite>ibm,chip-id</cite></dt>
+<dd>This property is added if the sensor group is chip specific</dd>
+<dt><cite>sensors</cite></dt>
+<dd>Phandles of all sensors belonging to this sensor group</dd>
+<dt><cite>ops</cite></dt>
+<dd>Array of opal call numbers to indicate the available sensor group
+operations</dd>
</dl>
<div class="highlight-dts notranslate"><div class="highlight"><pre><span></span><span class="nc">ibm,opal</span> <span class="p">{</span>
<span class="nc">sensor-groups</span> <span class="p">{</span>
@@ -87,7 +88,6 @@ operations</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -107,15 +107,17 @@ operations</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -132,16 +134,15 @@ operations</p>
<li class="right" >
<a href="secvar.html" title="Secvar Binding"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,opal/sensor-groups</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" >ibm,opal</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,opal/sensors.html b/doc/device-tree/ibm,opal/sensors.html
index abe2207..716200d 100644
--- a/doc/device-tree/ibm,opal/sensors.html
+++ b/doc/device-tree/ibm,opal/sensors.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>ibm,opal/sensors/ device tree nodes &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>ibm,opal/sensors/ device tree nodes &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../../_static/classic.css" />
+ <link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
- <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
- <script src="../../_static/jquery.js"></script>
- <script src="../../_static/underscore.js"></script>
- <script src="../../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
@@ -32,11 +34,10 @@
<li class="right" >
<a href="sensor-groups.html" title="ibm,opal/sensor-groups"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" accesskey="U">ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,opal/sensors/ device tree nodes</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" accesskey="U">ibm,opal</a> &#187;</li>
</ul>
</div>
@@ -54,17 +55,19 @@ which name follows this pattern :</p>
</pre></div>
</div>
<p>For example :</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">core</span><span class="o">-</span><span class="n">temp</span><span class="o">@</span><span class="mi">20</span><span class="o">/</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">core</span><span class="o">-</span><span class="n">temp</span><span class="nd">@20</span><span class="o">/</span>
</pre></div>
</div>
<p>Each node has a minimum set of properties describing the sensor :</p>
<ul>
-<li><p>a “compatible” property which should be “ibm,opal-sensor”</p></li>
-<li><p>a “sensor-type” property, which can be “temp”, “fan”, “power”.
+<li><p class="first">a “compatible” property which should be “ibm,opal-sensor”</p>
+</li>
+<li><p class="first">a “sensor-type” property, which can be “temp”, “fan”, “power”.
More will be added when new resources are supported. This type
is used “as is” by the Linux driver to map sensors in the sysfs
-interface of the hwmon framework of Linux.</p></li>
-<li><p>a “sensor-data” property giving a unique handler for the
+interface of the hwmon framework of Linux.</p>
+</li>
+<li><p class="first">a “sensor-data” property giving a unique handler for the
OPAL_SENSOR_READ call to be used by Linux to get the value of
a sensor attribute. This value is opaque to the OS but is <em>currently</em>
constructed using the following encoding :</p>
@@ -76,10 +79,12 @@ constructed using the following encoding :</p>
<p>The sensor family (FSP, DTS, etc) is used to dispatch the call to
the appriopriate skiboot component.</p>
</li>
-<li><p>a “sensor-status” property giving the state of the sensor. The
+<li><p class="first">a “sensor-status” property giving the state of the sensor. The
status bits have the slightly meanings depending on the resource
-type but testing against 0x6 should raise an alarm.</p></li>
-<li><p>an optional “label” property</p></li>
+type but testing against 0x6 should raise an alarm.</p>
+</li>
+<li><p class="first">an optional “label” property</p>
+</li>
</ul>
<p>Each node can have some extra properties depending on the resource
they represent. See the tree below for more information.</p>
@@ -142,7 +147,6 @@ they represent. See the tree below for more information.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -162,15 +166,17 @@ they represent. See the tree below for more information.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -187,16 +193,15 @@ they represent. See the tree below for more information.</p>
<li class="right" >
<a href="sensor-groups.html" title="ibm,opal/sensor-groups"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,opal/sensors/ device tree nodes</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" >ibm,opal</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,opal/sysparams.html b/doc/device-tree/ibm,opal/sysparams.html
index 81c9786..f8f3caf 100644
--- a/doc/device-tree/ibm,opal/sysparams.html
+++ b/doc/device-tree/ibm,opal/sysparams.html
@@ -1,23 +1,25 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>sysparams &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>sysparams &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../../_static/classic.css" />
+ <link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
- <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
- <script src="../../_static/jquery.js"></script>
- <script src="../../_static/underscore.js"></script>
- <script src="../../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
- <link rel="next" title="ibm,secureboot" href="../ibm%2Csecureboot.html" />
+ <link rel="next" title="ibm,secureboot" href="../ibm,secureboot.html" />
<link rel="prev" title="ibm,opal/sensors/ device tree nodes" href="sensors.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
@@ -27,16 +29,15 @@
<a href="../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
- <a href="../ibm%2Csecureboot.html" title="ibm,secureboot"
+ <a href="../ibm,secureboot.html" title="ibm,secureboot"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="sensors.html" title="ibm,opal/sensors/ device tree nodes"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" accesskey="U">ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">sysparams</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" accesskey="U">ibm,opal</a> &#187;</li>
</ul>
</div>
@@ -77,7 +78,6 @@ permissions.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -87,7 +87,7 @@ permissions.</p>
<p class="topless"><a href="sensors.html"
title="previous chapter">ibm,opal/sensors/ device tree nodes</a></p>
<h4>Next topic</h4>
- <p class="topless"><a href="../ibm%2Csecureboot.html"
+ <p class="topless"><a href="../ibm,secureboot.html"
title="next chapter">ibm,secureboot</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
@@ -97,15 +97,17 @@ permissions.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -117,21 +119,20 @@ permissions.</p>
<a href="../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
- <a href="../ibm%2Csecureboot.html" title="ibm,secureboot"
+ <a href="../ibm,secureboot.html" title="ibm,secureboot"
>next</a> |</li>
<li class="right" >
<a href="sensors.html" title="ibm,opal/sensors/ device tree nodes"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-2"><a href="../ibm%2Copal.html" >ibm,opal</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">sysparams</a></li>
+ <li class="nav-item nav-item-2"><a href="../ibm,opal.html" >ibm,opal</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,powerpc-cpu-features/binding.html b/doc/device-tree/ibm,powerpc-cpu-features/binding.html
index 066ddd6..c26a7ae 100644
--- a/doc/device-tree/ibm,powerpc-cpu-features/binding.html
+++ b/doc/device-tree/ibm,powerpc-cpu-features/binding.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>ibm,powerpc-cpu-features Binding &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>ibm,powerpc-cpu-features Binding &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../../_static/classic.css" />
+ <link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
- <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
- <script src="../../_static/jquery.js"></script>
- <script src="../../_static/underscore.js"></script>
- <script src="../../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="../vpd.html" title="VPD (Vital Product Data)"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,powerpc-cpu-features Binding</a></li>
+ <li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Device Tree</a> &#187;</li>
</ul>
</div>
@@ -60,23 +61,29 @@ assumed by parsers.</p>
<p>The node is optional but should be provided by new OPAL firmware.</p>
<p>Properties:</p>
<ul>
-<li><p>device_type</p>
-<dl class="simple">
-<dt>Usage:</dt><dd><p>required</p>
+<li><p class="first">device_type</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">required</p>
</dd>
-<dt>Value type:</dt><dd><p>string</p>
+<dt>Value type:</dt>
+<dd><p class="first last">string</p>
</dd>
-<dt>Definition:</dt><dd><p>“cpu-features”</p>
+<dt>Definition:</dt>
+<dd><p class="first last">“cpu-features”</p>
</dd>
</dl>
</li>
-<li><p>compatible</p>
-<dl class="simple">
-<dt>Usage:</dt><dd><p>required</p>
+<li><p class="first">compatible</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">required</p>
</dd>
-<dt>Value type:</dt><dd><p>string</p>
+<dt>Value type:</dt>
+<dd><p class="first last">string</p>
</dd>
-<dt>Definition:</dt><dd><p>“ibm,powerpc-cpu-features”</p>
+<dt>Definition:</dt>
+<dd><p class="first last">“ibm,powerpc-cpu-features”</p>
</dd>
</dl>
<p>This compatibility refers to backwards compatibility of the overall
@@ -84,11 +91,13 @@ design with parsers that behave according to these guidelines. This can
be extended in a backward compatible manner which would not warrant a
revision of the compatible property.</p>
</li>
-<li><p>isa</p>
-<dl class="simple">
-<dt>Usage:</dt><dd><p>required</p>
+<li><p class="first">isa</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">required</p>
</dd>
-<dt>Value type:</dt><dd><p>&lt;u32&gt;</p>
+<dt>Value type:</dt>
+<dd><p class="first last">&lt;u32&gt;</p>
</dd>
</dl>
<p>Definition:</p>
@@ -113,11 +122,13 @@ in the code where they are implemented in skiboot/core/cpufeatures.c</p>
<p>Presence of the node indicates the feature is available.</p>
<p>Properties:</p>
<ul>
-<li><p>isa</p>
-<dl class="simple">
-<dt>Usage:</dt><dd><p>required</p>
+<li><p class="first">isa</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">required</p>
</dd>
-<dt>Value type:</dt><dd><p>&lt;u32&gt;</p>
+<dt>Value type:</dt>
+<dd><p class="first last">&lt;u32&gt;</p>
</dd>
</dl>
<p>Definition:</p>
@@ -126,40 +137,50 @@ Software should filter out features when constraining the
environment to a particular ISA version.</p>
<p>Value is defined similarly to /cpus/features/isa</p>
</li>
-<li><p>usable-privilege</p>
-<dl>
-<dt>Usage:</dt><dd><p>required</p>
+<li><p class="first">usable-privilege</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">required</p>
</dd>
-<dt>Value type:</dt><dd><p>&lt;u32&gt; bit mask</p>
+<dt>Value type:</dt>
+<dd><p class="first last">&lt;u32&gt; bit mask</p>
</dd>
-<dt>Definition:</dt><dd><p>Bit numbers are LSB0</p>
-<dl class="simple">
-<dt>bit 0:</dt><dd><p>PR (problem state / user mode)</p>
+<dt>Definition:</dt>
+<dd><p class="first">Bit numbers are LSB0</p>
+<dl class="docutils">
+<dt>bit 0:</dt>
+<dd><p class="first last">PR (problem state / user mode)</p>
</dd>
-<dt>bit 1:</dt><dd><p>OS (privileged state)</p>
+<dt>bit 1:</dt>
+<dd><p class="first last">OS (privileged state)</p>
</dd>
-<dt>bit 2:</dt><dd><p>HV (hypervisor state)</p>
+<dt>bit 2:</dt>
+<dd><p class="first last">HV (hypervisor state)</p>
</dd>
</dl>
-<p>All other bits reserved and should be zero.</p>
+<p class="last">All other bits reserved and should be zero.</p>
</dd>
</dl>
<p>This property describes the privilege levels and/or software components
that can use the feature.</p>
<p>If bit 0 is set, then the hwcap-bit-nr property will exist.</p>
</li>
-<li><p>hv-support</p>
-<dl>
-<dt>Usage:</dt><dd><p>optional</p>
+<li><p class="first">hv-support</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">optional</p>
</dd>
-<dt>Value type:</dt><dd><p>&lt;u32&gt; bit mask</p>
+<dt>Value type:</dt>
+<dd><p class="first last">&lt;u32&gt; bit mask</p>
</dd>
-<dt>Definition:</dt><dd><p>Bit numbers are LSB0</p>
-<dl class="simple">
-<dt>bit 0:</dt><dd><p>HFSCR</p>
+<dt>Definition:</dt>
+<dd><p class="first">Bit numbers are LSB0</p>
+<dl class="docutils">
+<dt>bit 0:</dt>
+<dd><p class="first last">HFSCR</p>
</dd>
</dl>
-<p>All other bits reserved and should be zero.</p>
+<p class="last">All other bits reserved and should be zero.</p>
</dd>
</dl>
<p>This property describes the HV privilege support required to enable the
@@ -170,18 +191,22 @@ this feature.</p>
<p>If the HFSCR bit is set, then the hfscr-bit-nr property will exist and
the feature may be enabled by setting this bit in the HFSCR register.</p>
</li>
-<li><p>os-support</p>
-<dl>
-<dt>Usage:</dt><dd><p>optional</p>
+<li><p class="first">os-support</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">optional</p>
</dd>
-<dt>Value type:</dt><dd><p>&lt;u32&gt; bit mask</p>
+<dt>Value type:</dt>
+<dd><p class="first last">&lt;u32&gt; bit mask</p>
</dd>
-<dt>Definition:</dt><dd><p>Bit numbers are LSB0</p>
-<dl class="simple">
-<dt>bit 0:</dt><dd><p>FSCR</p>
+<dt>Definition:</dt>
+<dd><p class="first">Bit numbers are LSB0</p>
+<dl class="docutils">
+<dt>bit 0:</dt>
+<dd><p class="first last">FSCR</p>
</dd>
</dl>
-<p>All other bits reserved and should be zero.</p>
+<p class="last">All other bits reserved and should be zero.</p>
</dd>
</dl>
<p>This property describes the OS privilege support required to enable the
@@ -192,13 +217,16 @@ for this feature.</p>
<p>If the FSCR bit is set, then the fscr-bit-nr property will exist and
the feature may be enabled by setting this bit in the FSCR register.</p>
</li>
-<li><p>hfscr-bit-nr</p>
-<dl class="simple">
-<dt>Usage:</dt><dd><p>optional</p>
+<li><p class="first">hfscr-bit-nr</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">optional</p>
</dd>
-<dt>Value type:</dt><dd><p>&lt;u32&gt;</p>
+<dt>Value type:</dt>
+<dd><p class="first last">&lt;u32&gt;</p>
</dd>
-<dt>Definition:</dt><dd><p>HFSCR bit position (LSB0)</p>
+<dt>Definition:</dt>
+<dd><p class="first last">HFSCR bit position (LSB0)</p>
</dd>
</dl>
<p>This property exists when the hv-support property HFSCR bit is set. This
@@ -207,13 +235,16 @@ hypervisor must set in order to enable this feature.</p>
<p>This property also exists if an HFSCR bit corresponds with this feature.
This makes CPU feature parsing slightly simpler.</p>
</li>
-<li><p>fscr-bit-nr</p>
-<dl class="simple">
-<dt>Usage:</dt><dd><p>optional</p>
+<li><p class="first">fscr-bit-nr</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">optional</p>
</dd>
-<dt>Value type:</dt><dd><p>&lt;u32&gt;</p>
+<dt>Value type:</dt>
+<dd><p class="first last">&lt;u32&gt;</p>
</dd>
-<dt>Definition:</dt><dd><p>FSCR bit position (LSB0)</p>
+<dt>Definition:</dt>
+<dd><p class="first last">FSCR bit position (LSB0)</p>
</dd>
</dl>
<p>This property exists when the os-support property FSCR bit is set. This
@@ -222,13 +253,16 @@ operating system must set in order to enable this feature.</p>
<p>This property also exists if an FSCR bit corresponds with this feature.
This makes CPU feature parsing slightly simpler.</p>
</li>
-<li><p>hwcap-bit-nr</p>
-<dl class="simple">
-<dt>Usage:</dt><dd><p>optional</p>
+<li><p class="first">hwcap-bit-nr</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">optional</p>
</dd>
-<dt>Value type:</dt><dd><p>&lt;u32&gt;</p>
+<dt>Value type:</dt>
+<dd><p class="first last">&lt;u32&gt;</p>
</dd>
-<dt>Definition:</dt><dd><p>Linux ELF AUX vector bit position (LSB0)</p>
+<dt>Definition:</dt>
+<dd><p class="first last">Linux ELF AUX vector bit position (LSB0)</p>
</dd>
</dl>
<p>This property may exist when the usable-privilege property value has PR bit set.
@@ -244,20 +278,23 @@ advertised to userspace without a one-to-one hwcap bit number may not specify
this bit. Operating system will handle those bits specifically. All new
features usable by userspace will have a hwcap-bit-nr property.</p>
</li>
-<li><p>dependencies</p>
-<dl class="simple">
-<dt>Usage:</dt><dd><p>optional</p>
+<li><p class="first">dependencies</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">optional</p>
</dd>
-<dt>Value type:</dt><dd><p>&lt;prop-encoded-array&gt;</p>
+<dt>Value type:</dt>
+<dd><p class="first last">&lt;prop-encoded-array&gt;</p>
</dd>
</dl>
<p>Definition:</p>
<p>If this property exists then it is a list of phandles to cpu feature
nodes that must be enabled for this feature to be enabled.</p>
</li>
-<li><p>Custom properties of the feature</p>
-<dl class="simple">
-<dt>Usage:</dt><dd><p>optional</p>
+<li><p class="first">Custom properties of the feature</p>
+<dl class="docutils">
+<dt>Usage:</dt>
+<dd><p class="first last">optional</p>
</dd>
</dl>
<p>Definition:</p>
@@ -316,7 +353,6 @@ nodes that must be enabled for this feature to be enabled.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -346,15 +382,17 @@ nodes that must be enabled for this feature to be enabled.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -371,15 +409,14 @@ nodes that must be enabled for this feature to be enabled.</p>
<li class="right" >
<a href="../vpd.html" title="VPD (Vital Product Data)"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,powerpc-cpu-features Binding</a></li>
+ <li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,powerpc-cpu-features/design.html b/doc/device-tree/ibm,powerpc-cpu-features/design.html
index 2fc9120..d56b385 100644
--- a/doc/device-tree/ibm,powerpc-cpu-features/design.html
+++ b/doc/device-tree/ibm,powerpc-cpu-features/design.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>ibm,powerpc-cpu-features Design &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>ibm,powerpc-cpu-features Design &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../../_static/classic.css" />
+ <link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
- <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
- <script src="../../_static/jquery.js"></script>
- <script src="../../_static/underscore.js"></script>
- <script src="../../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../_static/language_data.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="binding.html" title="ibm,powerpc-cpu-features Binding"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,powerpc-cpu-features Design</a></li>
+ <li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Device Tree</a> &#187;</li>
</ul>
</div>
@@ -109,24 +110,24 @@ for this privilege level is implicit: if the software know how to use a
feature, it also knows how to enable it).</p>
<p>Feature node properties:</p>
<ul class="simple">
-<li><p>“isa”, the Power ISA version where this feature first became available.
-In case of an implementation specific feature</p></li>
-<li><p>“usable-privilege”, a bitmask (HV, OS, PR/user) specifying which privilege
-levels this feature may be used in.</p></li>
-<li><p>“hv-support”, a bitmask. If this exists, the hypervisor must do some work
+<li>“isa”, the Power ISA version where this feature first became available.
+In case of an implementation specific feature</li>
+<li>“usable-privilege”, a bitmask (HV, OS, PR/user) specifying which privilege
+levels this feature may be used in.</li>
+<li>“hv-support”, a bitmask. If this exists, the hypervisor must do some work
to enable support for lesser privilege levels. Bits can be set in this mask
to specify prescription/recipes to enable the feature without custom code.
If no bits are set, no recipe exists and custom code must be used. HFSCR
-register enable bit is the only such recipe currently.</p></li>
-<li><p>“os-support”, similar to hv-support. FSCR recipe.</p></li>
-<li><p>Features may have additional properties associated, must be documented with
-the feature.</p></li>
-<li><p>Recipes may have additional properties associated. HFSCR recipe has
-hfscr-bit-nr, and FSCR recipe has fscr-bit-nr.</p></li>
-<li><p>“dependencies” array of phandles. If this exists, it links to the
-features that must be enabled in order for this feature to be enabled.</p></li>
-<li><p>“hwcap-bit-nr” if it exists provides a Linux ELF AUXV HWCAP bit number that
-can be used to advertise this feature to userspace.</p></li>
+register enable bit is the only such recipe currently.</li>
+<li>“os-support”, similar to hv-support. FSCR recipe.</li>
+<li>Features may have additional properties associated, must be documented with
+the feature.</li>
+<li>Recipes may have additional properties associated. HFSCR recipe has
+hfscr-bit-nr, and FSCR recipe has fscr-bit-nr.</li>
+<li>“dependencies” array of phandles. If this exists, it links to the
+features that must be enabled in order for this feature to be enabled.</li>
+<li>“hwcap-bit-nr” if it exists provides a Linux ELF AUXV HWCAP bit number that
+can be used to advertise this feature to userspace.</li>
</ul>
<p>Together, these compatibility, support, and dependencies properties allow
unknown features to be enabled and advertised to lesser privilege levels
@@ -144,11 +145,11 @@ is left for implementations.</p>
to the ISA, or related performance characteristics.</p>
<p>Grouping should be made by one or a combination of those that:</p>
<ul class="simple">
-<li><p>Share common enablement requirements (e.g., share particular registers or
-firmware setup requirements).</p></li>
-<li><p>Share common usage patterns (e..g, likely to be used together).</p></li>
-<li><p>Are implemented with a particular new hardware unit.</p></li>
-<li><p>Are optional in the ISA.</p></li>
+<li>Share common enablement requirements (e.g., share particular registers or
+firmware setup requirements).</li>
+<li>Share common usage patterns (e..g, likely to be used together).</li>
+<li>Are implemented with a particular new hardware unit.</li>
+<li>Are optional in the ISA.</li>
</ul>
<p>Granularity can be debated, but fine grained and encompassing is generally
preferable. For example, memory management unit may be considered fundamental,
@@ -174,7 +175,6 @@ cases.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -205,15 +205,17 @@ cases.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -230,15 +232,14 @@ cases.</p>
<li class="right" >
<a href="binding.html" title="ibm,powerpc-cpu-features Binding"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,powerpc-cpu-features Design</a></li>
+ <li class="nav-item nav-item-1"><a href="../index.html" >Device Tree</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/ibm,secureboot.html b/doc/device-tree/ibm,secureboot.html
index ff8d213..66fe9f4 100644
--- a/doc/device-tree/ibm,secureboot.html
+++ b/doc/device-tree/ibm,secureboot.html
@@ -1,24 +1,26 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>ibm,secureboot &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>ibm,secureboot &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="IMC Device Tree Bindings" href="imc.html" />
- <link rel="prev" title="sysparams" href="ibm%2Copal/sysparams.html" />
+ <link rel="prev" title="sysparams" href="ibm,opal/sysparams.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
@@ -30,12 +32,11 @@
<a href="imc.html" title="IMC Device Tree Bindings"
accesskey="N">next</a> |</li>
<li class="right" >
- <a href="ibm%2Copal/sysparams.html" title="sysparams"
+ <a href="ibm,opal/sysparams.html" title="sysparams"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,secureboot</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
</ul>
</div>
@@ -124,7 +125,6 @@ clear-mfg-keys: this property exists only during manufacturing process
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -141,7 +141,7 @@ clear-mfg-keys: this property exists only during manufacturing process
</ul>
<h4>Previous topic</h4>
- <p class="topless"><a href="ibm%2Copal/sysparams.html"
+ <p class="topless"><a href="ibm,opal/sysparams.html"
title="previous chapter">sysparams</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="imc.html"
@@ -154,15 +154,17 @@ clear-mfg-keys: this property exists only during manufacturing process
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -177,17 +179,16 @@ clear-mfg-keys: this property exists only during manufacturing process
<a href="imc.html" title="IMC Device Tree Bindings"
>next</a> |</li>
<li class="right" >
- <a href="ibm%2Copal/sysparams.html" title="sysparams"
+ <a href="ibm,opal/sysparams.html" title="sysparams"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">ibm,secureboot</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/imc.html b/doc/device-tree/imc.html
index 7d31019..e50dd16 100644
--- a/doc/device-tree/imc.html
+++ b/doc/device-tree/imc.html
@@ -1,24 +1,26 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>IMC Device Tree Bindings &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>IMC Device Tree Bindings &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="P9 memory hierarchy" href="memory-hierarchy.html" />
- <link rel="prev" title="ibm,secureboot" href="ibm%2Csecureboot.html" />
+ <link rel="prev" title="ibm,secureboot" href="ibm,secureboot.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
@@ -30,12 +32,11 @@
<a href="memory-hierarchy.html" title="P9 memory hierarchy"
accesskey="N">next</a> |</li>
<li class="right" >
- <a href="ibm%2Csecureboot.html" title="ibm,secureboot"
+ <a href="ibm,secureboot.html" title="ibm,secureboot"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">IMC Device Tree Bindings</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
</ul>
</div>
@@ -134,26 +135,24 @@
<p>Trace scom is a 64 bit value which contains the event information for
IMC-trace mode. Following is the trace-scom layout.</p>
<p><strong>TRACE_IMC_SCOM bit representation</strong></p>
-<dl class="field-list simple">
-<dt class="field-odd">0-1</dt>
-<dd class="field-odd"><p>SAMPSEL</p>
-</dd>
-<dt class="field-even">2-33</dt>
-<dd class="field-even"><p>CPMC_LOAD</p>
-</dd>
-<dt class="field-odd">34-40</dt>
-<dd class="field-odd"><p>CPMC1SEL</p>
-</dd>
-<dt class="field-even">41-47</dt>
-<dd class="field-even"><p>CPMC2SEL</p>
-</dd>
-<dt class="field-odd">48-50</dt>
-<dd class="field-odd"><p>BUFFERSIZE</p>
-</dd>
-<dt class="field-even">51-63</dt>
-<dd class="field-even"><p>RESERVED</p>
-</dd>
-</dl>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">0-1:</th><td class="field-body">SAMPSEL</td>
+</tr>
+<tr class="field-even field"><th class="field-name">2-33:</th><td class="field-body">CPMC_LOAD</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">34-40:</th><td class="field-body">CPMC1SEL</td>
+</tr>
+<tr class="field-even field"><th class="field-name">41-47:</th><td class="field-body">CPMC2SEL</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">48-50:</th><td class="field-body">BUFFERSIZE</td>
+</tr>
+<tr class="field-even field"><th class="field-name">51-63:</th><td class="field-body">RESERVED</td>
+</tr>
+</tbody>
+</table>
<p><em>CPMC_LOAD</em> contains the sampling duration. <em>SAMPSEL</em> and <em>CPMC*SEL</em>
determines the event to count. <em>BUFFRSIZE</em> indicates the memory range.</p>
<p><em>BUFFERSIZE</em> can be</p>
@@ -168,7 +167,6 @@ b’100’ - 64K entries * 64 per entry = 4M
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -186,7 +184,7 @@ b’100’ - 64K entries * 64 per entry = 4M
</ul>
<h4>Previous topic</h4>
- <p class="topless"><a href="ibm%2Csecureboot.html"
+ <p class="topless"><a href="ibm,secureboot.html"
title="previous chapter">ibm,secureboot</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="memory-hierarchy.html"
@@ -199,15 +197,17 @@ b’100’ - 64K entries * 64 per entry = 4M
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -222,17 +222,16 @@ b’100’ - 64K entries * 64 per entry = 4M
<a href="memory-hierarchy.html" title="P9 memory hierarchy"
>next</a> |</li>
<li class="right" >
- <a href="ibm%2Csecureboot.html" title="ibm,secureboot"
+ <a href="ibm,secureboot.html" title="ibm,secureboot"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">IMC Device Tree Bindings</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/index.html b/doc/device-tree/index.html
index f01323e..7967184 100644
--- a/doc/device-tree/index.html
+++ b/doc/device-tree/index.html
@@ -1,23 +1,25 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Device Tree &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Device Tree &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="ibm,cvc" href="ibm%2Ccvc.html" />
+ <link rel="next" title="ibm,cvc" href="ibm,cvc.html" />
<link rel="prev" title="Device Tree" href="../device-tree.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
@@ -27,14 +29,13 @@
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
- <a href="ibm%2Ccvc.html" title="ibm,cvc"
+ <a href="ibm,cvc.html" title="ibm,cvc"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="../device-tree.html" title="Device Tree"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Device Tree</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -48,10 +49,10 @@
<p>Device Tree for OPAL. Please refer to Device Tree Spec.</p>
<div class="toctree-wrapper compound">
<ul>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Ccvc.html">ibm,cvc</a></li>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Cfirmware-versions.html">ibm,firmware-versions node</a></li>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Copal.html">ibm,opal</a></li>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Csecureboot.html">ibm,secureboot</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,cvc.html">ibm,cvc</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,firmware-versions.html">ibm,firmware-versions node</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,opal.html">ibm,opal</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,secureboot.html">ibm,secureboot</a></li>
<li class="toctree-l1"><a class="reference internal" href="imc.html">IMC Device Tree Bindings</a></li>
<li class="toctree-l1"><a class="reference internal" href="memory-hierarchy.html">P9 memory hierarchy</a></li>
<li class="toctree-l1"><a class="reference internal" href="nvlink.html">Nvlink Device Tree Bindings</a></li>
@@ -62,14 +63,13 @@
<li class="toctree-l1"><a class="reference internal" href="tpm.html">Trusted Platform Module (TPM)</a></li>
<li class="toctree-l1"><a class="reference internal" href="vas.html">Virtual Accelerator Switchboard (VAS)</a></li>
<li class="toctree-l1"><a class="reference internal" href="vpd.html">VPD (Vital Product Data)</a></li>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Cpowerpc-cpu-features/binding.html">ibm,powerpc-cpu-features Binding</a></li>
-<li class="toctree-l1"><a class="reference internal" href="ibm%2Cpowerpc-cpu-features/design.html">ibm,powerpc-cpu-features Design</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,powerpc-cpu-features/binding.html">ibm,powerpc-cpu-features Binding</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ibm,powerpc-cpu-features/design.html">ibm,powerpc-cpu-features Design</a></li>
</ul>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -79,7 +79,7 @@
<p class="topless"><a href="../device-tree.html"
title="previous chapter">Device Tree</a></p>
<h4>Next topic</h4>
- <p class="topless"><a href="ibm%2Ccvc.html"
+ <p class="topless"><a href="ibm,cvc.html"
title="next chapter">ibm,cvc</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
@@ -89,15 +89,17 @@
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -109,19 +111,18 @@
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
- <a href="ibm%2Ccvc.html" title="ibm,cvc"
+ <a href="ibm,cvc.html" title="ibm,cvc"
>next</a> |</li>
<li class="right" >
<a href="../device-tree.html" title="Device Tree"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Device Tree</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/memory-hierarchy.html b/doc/device-tree/memory-hierarchy.html
index 2d9dd87..1e4a291 100644
--- a/doc/device-tree/memory-hierarchy.html
+++ b/doc/device-tree/memory-hierarchy.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>P9 memory hierarchy &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>P9 memory hierarchy &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="imc.html" title="IMC Device Tree Bindings"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">P9 memory hierarchy</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
</ul>
</div>
@@ -50,8 +51,7 @@
of the processor. Device tree contains memory hierarchy so that one can
traverse from chip to DIMM like below:</p>
<blockquote>
-<div><p>xscom&#64;&lt;addr&gt;/mcbist&#64;&lt;mcbist_id&gt;/mcs&#64;&lt;mcs_id&gt;/mca&#64;&lt;mca_id&gt;/dimm&#64;&lt;resource_id&gt;</p>
-</div></blockquote>
+<div>xscom&#64;&lt;addr&gt;/mcbist&#64;&lt;mcbist_id&gt;/mcs&#64;&lt;mcs_id&gt;/mca&#64;&lt;mca_id&gt;/dimm&#64;&lt;resource_id&gt;</div></blockquote>
<p>Example of dimm node:</p>
<div class="highlight-dts notranslate"><div class="highlight"><pre><span></span><span class="nc">dimm</span><span class="nf">@d00e</span> <span class="p">{</span>
<span class="nf">memory-id</span> <span class="o">=</span> <span class="p">&lt;</span><span class="mh">0xc</span><span class="p">&gt;;</span> <span class="cm">/* DRAM Device Type. 0xc = DDR4 */</span>
@@ -71,7 +71,6 @@ traverse from chip to DIMM like below:</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -91,15 +90,17 @@ traverse from chip to DIMM like below:</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -116,15 +117,14 @@ traverse from chip to DIMM like below:</p>
<li class="right" >
<a href="imc.html" title="IMC Device Tree Bindings"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">P9 memory hierarchy</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/nvlink.html b/doc/device-tree/nvlink.html
index 0820847..b95239c 100644
--- a/doc/device-tree/nvlink.html
+++ b/doc/device-tree/nvlink.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Nvlink Device Tree Bindings &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Nvlink Device Tree Bindings &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="memory-hierarchy.html" title="P9 memory hierarchy"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Nvlink Device Tree Bindings</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
</ul>
</div>
@@ -196,7 +197,6 @@
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -225,15 +225,17 @@
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -250,15 +252,14 @@
<li class="right" >
<a href="memory-hierarchy.html" title="P9 memory hierarchy"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Nvlink Device Tree Bindings</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/nx.html b/doc/device-tree/nx.html
index afdb83a..70c826a 100644
--- a/doc/device-tree/nx.html
+++ b/doc/device-tree/nx.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Nest (NX) Accelerator Coprocessor &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Nest (NX) Accelerator Coprocessor &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="nvlink.html" title="Nvlink Device Tree Bindings"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Nest (NX) Accelerator Coprocessor</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
</ul>
</div>
@@ -114,7 +115,6 @@ Its nodes are not under the main nx node, they are located at:</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -143,15 +143,17 @@ Its nodes are not under the main nx node, they are located at:</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -168,15 +170,14 @@ Its nodes are not under the main nx node, they are located at:</p>
<li class="right" >
<a href="nvlink.html" title="Nvlink Device Tree Bindings"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Nest (NX) Accelerator Coprocessor</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/opencapi.html b/doc/device-tree/opencapi.html
index b8891cf..6cb25f4 100644
--- a/doc/device-tree/opencapi.html
+++ b/doc/device-tree/opencapi.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OpenCAPI Device Tree Bindings &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OpenCAPI Device Tree Bindings &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="nx.html" title="Nest (NX) Accelerator Coprocessor"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OpenCAPI Device Tree Bindings</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
</ul>
</div>
@@ -108,7 +109,6 @@ anything but may be used in future.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -137,15 +137,17 @@ anything but may be used in future.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -162,15 +164,14 @@ anything but may be used in future.</p>
<li class="right" >
<a href="nx.html" title="Nest (NX) Accelerator Coprocessor"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OpenCAPI Device Tree Bindings</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/pci.html b/doc/device-tree/pci.html
index 820d67d..9a880f3 100644
--- a/doc/device-tree/pci.html
+++ b/doc/device-tree/pci.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>PCI Device Tree Bindings &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>PCI Device Tree Bindings &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opencapi.html" title="OpenCAPI Device Tree Bindings"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">PCI Device Tree Bindings</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
</ul>
</div>
@@ -111,7 +112,6 @@
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -131,15 +131,17 @@
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -156,15 +158,14 @@
<li class="right" >
<a href="opencapi.html" title="OpenCAPI Device Tree Bindings"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">PCI Device Tree Bindings</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/reserved-memory.html b/doc/device-tree/reserved-memory.html
index 6d20716..a5d27eb 100644
--- a/doc/device-tree/reserved-memory.html
+++ b/doc/device-tree/reserved-memory.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>reserved-memory device tree nodes &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>reserved-memory device tree nodes &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="pci.html" title="PCI Device Tree Bindings"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">reserved-memory device tree nodes</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
</ul>
</div>
@@ -51,33 +52,31 @@ containing subnodes that represent each reserved memory region.</p>
<p>This follows the Linux specification for the /reserved-memory node,
described in the kernel source tree, in:</p>
<blockquote>
-<div><p>Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt</p>
-</div></blockquote>
+<div>Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt</div></blockquote>
<p>The top-level /reserved-memory node contains:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">#size-cells = &lt;2&gt;</span>
<span class="c1">#address-cells = &lt;2&gt;</span>
</pre></div>
</div>
<p>Addresses and sizes are all 64-bits.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">ranges</span></code></dt><dd><p>the empty ranges node indicates no translation of physical
-addresses in the subnodes.</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">ranges</span></code></dt>
+<dd>the empty ranges node indicates no translation of physical
+addresses in the subnodes.</dd>
</dl>
<p>The sub-nodes under the /reserved-memory node contain:</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">reg</span> <span class="pre">=</span> <span class="pre">&lt;address</span> <span class="pre">size&gt;</span></code></dt><dd><p>the address and size of the reserved memory region. The address
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">reg</span> <span class="pre">=</span> <span class="pre">&lt;address</span> <span class="pre">size&gt;</span></code></dt>
+<dd>the address and size of the reserved memory region. The address
and size values are two cells each, as signified by the top-level
-<code class="docutils literal notranslate"><span class="pre">#{address,size}-cells</span></code></p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">ibm,prd-label</span> <span class="pre">=</span> <span class="pre">&quot;string&quot;</span></code></dt><dd><p>a string token for use by the prd system. Specific ranges may be
-used by prd - those will be referenced by this label.</p>
-</dd>
+<code class="docutils literal notranslate"><span class="pre">#{address,size}-cells</span></code></dd>
+<dt><code class="docutils literal notranslate"><span class="pre">ibm,prd-label</span> <span class="pre">=</span> <span class="pre">&quot;string&quot;</span></code></dt>
+<dd>a string token for use by the prd system. Specific ranges may be
+used by prd - those will be referenced by this label.</dd>
</dl>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -97,15 +96,17 @@ used by prd - those will be referenced by this label.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -122,15 +123,14 @@ used by prd - those will be referenced by this label.</p>
<li class="right" >
<a href="pci.html" title="PCI Device Tree Bindings"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">reserved-memory device tree nodes</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/tpm.html b/doc/device-tree/tpm.html
index d541dbe..3ac71f7 100644
--- a/doc/device-tree/tpm.html
+++ b/doc/device-tree/tpm.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Trusted Platform Module (TPM) &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Trusted Platform Module (TPM) &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="reserved-memory.html" title="reserved-memory device tree nodes"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Trusted Platform Module (TPM)</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
</ul>
</div>
@@ -85,7 +86,6 @@ vtpm codes)</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -115,15 +115,17 @@ vtpm codes)</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -140,15 +142,14 @@ vtpm codes)</p>
<li class="right" >
<a href="reserved-memory.html" title="reserved-memory device tree nodes"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Trusted Platform Module (TPM)</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/vas.html b/doc/device-tree/vas.html
index e44a6ae..ad72836 100644
--- a/doc/device-tree/vas.html
+++ b/doc/device-tree/vas.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Virtual Accelerator Switchboard (VAS) &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Virtual Accelerator Switchboard (VAS) &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="tpm.html" title="Trusted Platform Module (TPM)"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Virtual Accelerator Switchboard (VAS)</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
</ul>
</div>
@@ -81,7 +82,6 @@ context address for the instance of VAS.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -101,15 +101,17 @@ context address for the instance of VAS.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -126,15 +128,14 @@ context address for the instance of VAS.</p>
<li class="right" >
<a href="tpm.html" title="Trusted Platform Module (TPM)"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Virtual Accelerator Switchboard (VAS)</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/device-tree/vpd.html b/doc/device-tree/vpd.html
index 84f1a83..a1f8101 100644
--- a/doc/device-tree/vpd.html
+++ b/doc/device-tree/vpd.html
@@ -1,23 +1,25 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>VPD (Vital Product Data) &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>VPD (Vital Product Data) &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="ibm,powerpc-cpu-features Binding" href="ibm%2Cpowerpc-cpu-features/binding.html" />
+ <link rel="next" title="ibm,powerpc-cpu-features Binding" href="ibm,powerpc-cpu-features/binding.html" />
<link rel="prev" title="Virtual Accelerator Switchboard (VAS)" href="vas.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
@@ -27,15 +29,14 @@
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
- <a href="ibm%2Cpowerpc-cpu-features/binding.html" title="ibm,powerpc-cpu-features Binding"
+ <a href="ibm,powerpc-cpu-features/binding.html" title="ibm,powerpc-cpu-features Binding"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="vas.html" title="Virtual Accelerator Switchboard (VAS)"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">VPD (Vital Product Data)</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Device Tree</a> &#187;</li>
</ul>
</div>
@@ -119,7 +120,6 @@ FRUs having parent-child relationship.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -129,7 +129,7 @@ FRUs having parent-child relationship.</p>
<p class="topless"><a href="vas.html"
title="previous chapter">Virtual Accelerator Switchboard (VAS)</a></p>
<h4>Next topic</h4>
- <p class="topless"><a href="ibm%2Cpowerpc-cpu-features/binding.html"
+ <p class="topless"><a href="ibm,powerpc-cpu-features/binding.html"
title="next chapter">ibm,powerpc-cpu-features Binding</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
@@ -139,15 +139,17 @@ FRUs having parent-child relationship.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -159,20 +161,19 @@ FRUs having parent-child relationship.</p>
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
- <a href="ibm%2Cpowerpc-cpu-features/binding.html" title="ibm,powerpc-cpu-features Binding"
+ <a href="ibm,powerpc-cpu-features/binding.html" title="ibm,powerpc-cpu-features Binding"
>next</a> |</li>
<li class="right" >
<a href="vas.html" title="Virtual Accelerator Switchboard (VAS)"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">VPD (Vital Product Data)</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Device Tree</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/error-logging.html b/doc/error-logging.html
index 5f63226..39e1503 100644
--- a/doc/error-logging.html
+++ b/doc/error-logging.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>How to log errors on OPAL &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>How to log errors on OPAL &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="console-log.html" title="SkiBoot Console Log"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">How to log errors on OPAL</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -64,16 +65,15 @@ these interfaces relevant error information is collected and later converted
to PEL format and then pushed to service processor.</p>
<p>Step 1: To report an error, invoke <code class="docutils literal notranslate"><span class="pre">opal_elog_create()</span></code> with required argument.</p>
<blockquote>
-<div><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">errorlog</span> <span class="pre">*opal_elog_create(struct</span> <span class="pre">opal_err_info</span> <span class="pre">*e_info,</span> <span class="pre">uint32_t</span> <span class="pre">tag);</span></code></p>
-</div></blockquote>
+<div><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">errorlog</span> <span class="pre">*opal_elog_create(struct</span> <span class="pre">opal_err_info</span> <span class="pre">*e_info,</span> <span class="pre">uint32_t</span> <span class="pre">tag);</span></code></div></blockquote>
<p>Parameters:</p>
<blockquote>
<div><ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">opal_err_info</span> <span class="pre">*e_info</span></code>
-Struct to hold information identifying error/event source.</p></li>
-<li><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">uint32_t</span> <span class="pre">tag:</span></code> Unique value to identify the data.</dt><dd><p>Ideal to have ASCII value for 4-byte string.</p>
-</dd>
+<li><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">opal_err_info</span> <span class="pre">*e_info</span></code>
+Struct to hold information identifying error/event source.</li>
+<li><dl class="first docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">uint32_t</span> <span class="pre">tag:</span></code> Unique value to identify the data.</dt>
+<dd>Ideal to have ASCII value for 4-byte string.</dd>
</dl>
</li>
</ul>
@@ -166,31 +166,34 @@ listed in <code class="docutils literal notranslate"><span class="pre">include/e
<span class="c1">#define OPAL_ABNORMAL_POWER_OFF 0xE0</span>
</pre></div>
</div>
-<dl>
-<dt><code class="docutils literal notranslate"><span class="pre">uint8_t</span> <span class="pre">opal_srctype</span></code>: SRC type, value should be OPAL_SRC_TYPE_ERROR.</dt><dd><p>SRC refers to System Reference Code.
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">uint8_t</span> <span class="pre">opal_srctype</span></code>: SRC type, value should be OPAL_SRC_TYPE_ERROR.</dt>
+<dd><p class="first">SRC refers to System Reference Code.
It is 4 byte hexa-decimal number that reflects the
current system state.
Eg: BB821010,</p>
<ul class="simple">
-<li><p>1st byte -&gt; BB -&gt; SRC Type</p></li>
-<li><p>2nd byte -&gt; 82 -&gt; Subsystem</p></li>
-<li><p>3rd, 4th byte -&gt; Component ID and Reason Code</p></li>
+<li>1st byte -&gt; BB -&gt; SRC Type</li>
+<li>2nd byte -&gt; 82 -&gt; Subsystem</li>
+<li>3rd, 4th byte -&gt; Component ID and Reason Code</li>
</ul>
-<p>SRC needs to be generated on the fly depending on the state
+<p class="last">SRC needs to be generated on the fly depending on the state
of the system. All the parameters needed to generate a SRC
should be provided during reporting of an event/error.</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint32_t</span> <span class="pre">reason_code</span></code>: Reason for failure as stated in <code class="docutils literal notranslate"><span class="pre">include/errorlog.h</span></code> for OPAL.</dt><dd><p>Eg: Reason code for code-update failures can be</p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">OPAL_RC_CU_INIT</span></code> -&gt; Initialisation failure</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">OPAL_RC_CU_FLASH</span></code> -&gt; Flash failure</p></li>
+<dt><code class="docutils literal notranslate"><span class="pre">uint32_t</span> <span class="pre">reason_code</span></code>: Reason for failure as stated in <code class="docutils literal notranslate"><span class="pre">include/errorlog.h</span></code> for OPAL.</dt>
+<dd><p class="first">Eg: Reason code for code-update failures can be</p>
+<ul class="last simple">
+<li><code class="docutils literal notranslate"><span class="pre">OPAL_RC_CU_INIT</span></code> -&gt; Initialisation failure</li>
+<li><code class="docutils literal notranslate"><span class="pre">OPAL_RC_CU_FLASH</span></code> -&gt; Flash failure</li>
</ul>
</dd>
</dl>
</div></blockquote>
-<dl>
-<dt>Step 2: Data can be appended to the user data section using the either of</dt><dd><p>the below two interfaces:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">log_append_data</span><span class="p">(</span><span class="n">struct</span> <span class="n">errorlog</span> <span class="o">*</span><span class="n">buf</span><span class="p">,</span> <span class="n">unsigned</span> <span class="n">char</span> <span class="o">*</span><span class="n">data</span><span class="p">,</span>
+<dl class="docutils">
+<dt>Step 2: Data can be appended to the user data section using the either of</dt>
+<dd><p class="first">the below two interfaces:</p>
+<div class="last highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">log_append_data</span><span class="p">(</span><span class="n">struct</span> <span class="n">errorlog</span> <span class="o">*</span><span class="n">buf</span><span class="p">,</span> <span class="n">unsigned</span> <span class="n">char</span> <span class="o">*</span><span class="n">data</span><span class="p">,</span>
<span class="n">uint16_t</span> <span class="n">size</span><span class="p">);</span>
</pre></div>
</div>
@@ -218,15 +221,16 @@ user data section of the error log.</p>
<p>Parameters:</p>
<blockquote>
<div><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">opal_errorlog</span> <span class="pre">*buf</span></code>: pointer returned by <code class="docutils literal notranslate"><span class="pre">opal_elog_create()</span></code> call.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">uint32_t</span> <span class="pre">tag</span></code>: Unique value to identify the data.</dt><dd><p>Ideal to have ASCII value for 4-byte string.</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">uint32_t</span> <span class="pre">tag</span></code>: Unique value to identify the data.</dt>
+<dd>Ideal to have ASCII value for 4-byte string.</dd>
</dl>
</div></blockquote>
-<dl>
-<dt>Step 3: There is a platform hook for the OPAL error log to be committed on any</dt><dd><p>service processor(Currently used for FSP and BMC based machines).</p>
+<dl class="docutils">
+<dt>Step 3: There is a platform hook for the OPAL error log to be committed on any</dt>
+<dd><p class="first">service processor(Currently used for FSP and BMC based machines).</p>
<p>Below is snippet of the code of how this hook is called.</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">log_commit</span><span class="p">(</span><span class="n">struct</span> <span class="n">errorlog</span> <span class="o">*</span><span class="n">elog</span><span class="p">)</span>
+<div class="last highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">void</span> <span class="n">log_commit</span><span class="p">(</span><span class="n">struct</span> <span class="n">errorlog</span> <span class="o">*</span><span class="n">elog</span><span class="p">)</span>
<span class="p">{</span>
<span class="o">....</span>
<span class="o">....</span>
@@ -243,7 +247,8 @@ user data section of the error log.</p>
</pre></div>
</div>
</dd>
-<dt>Step 3.1 FSP:</dt><dd><div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">.</span><span class="n">elog_commit</span> <span class="o">=</span> <span class="n">elog_fsp_commit</span>
+<dt>Step 3.1 FSP:</dt>
+<dd><div class="first highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">.</span><span class="n">elog_commit</span> <span class="o">=</span> <span class="n">elog_fsp_commit</span>
</pre></div>
</div>
<p>Once all the data for an error is logged in, the error needs to
@@ -252,11 +257,12 @@ be committed in FSP.</p>
internally converted to PEL format and then pushed to the FSP.
FSP then take cares of sending all logs including its own and
OPAL’s one to the POWERNV.</p>
-<p>OPAL maintains timeout field for all error logs it is sending to
+<p class="last">OPAL maintains timeout field for all error logs it is sending to
FSP. If it is not logged within allotted time period (e.g if FSP
is down), in that case OPAL sends those logs to POWERNV.</p>
</dd>
-<dt>Step 3.2 BMC:</dt><dd><div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">.</span><span class="n">elog_commit</span> <span class="o">=</span> <span class="n">ipmi_elog_commit</span>
+<dt>Step 3.2 BMC:</dt>
+<dd><div class="first highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">.</span><span class="n">elog_commit</span> <span class="o">=</span> <span class="n">ipmi_elog_commit</span>
</pre></div>
</div>
<p>In case of BMC machines, error logs are first converted to eSEL format.
@@ -279,7 +285,7 @@ i.e:</p>
<span class="p">}</span>
</pre></div>
</div>
-<p>After filling up the SEL header fields, OPAL copies the error log
+<p class="last">After filling up the SEL header fields, OPAL copies the error log
PEL data after the header section in the error log buffer. Then using
IPMI interface, eSEL gets logged in BMC.</p>
</dd>
@@ -306,10 +312,10 @@ is done with just one call.</p>
<p>FSP sends error log notification to OPAL via mailbox protocol.</p>
<p>OPAL maintains below lists:</p>
<ul class="simple">
-<li><p>Free list : List of free nodes.</p></li>
-<li><p>Pending list : List of nodes which is yet to be read by the POWERNV.</p></li>
-<li><p>Processed list : List of nodes which has been read but still waiting for
-acknowledgement.</p></li>
+<li>Free list : List of free nodes.</li>
+<li>Pending list : List of nodes which is yet to be read by the POWERNV.</li>
+<li>Processed list : List of nodes which has been read but still waiting for
+acknowledgement.</li>
</ul>
<p>Below is the structure of the node:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">struct</span> <span class="n">fsp_log_entry</span> <span class="p">{</span>
@@ -366,11 +372,11 @@ If it is run out of the buffers in the pool, it will log the message saying
<div class="section" id="note">
<h2>Note<a class="headerlink" href="#note" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>For more information regarding error logging and PEL format
-refer to PAPR doc and P7 PEL and SRC PLDD document.</p></li>
-<li><p>Refer to <code class="docutils literal notranslate"><span class="pre">include/errorlog.h</span></code> for all the error logging
+<li>For more information regarding error logging and PEL format
+refer to PAPR doc and P7 PEL and SRC PLDD document.</li>
+<li>Refer to <code class="docutils literal notranslate"><span class="pre">include/errorlog.h</span></code> for all the error logging
interface parameters and <code class="docutils literal notranslate"><span class="pre">include/pel.h</span></code> for PEL
-structures.</p></li>
+structures.</li>
</ul>
</div>
<div class="section" id="sample-error-logging">
@@ -560,7 +566,6 @@ structures.</p></li>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -595,15 +600,17 @@ structures.</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -620,14 +627,13 @@ structures.</p></li>
<li class="right" >
<a href="console-log.html" title="SkiBoot Console Log"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">How to log errors on OPAL</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/gcov.html b/doc/gcov.html
index 75a8dc9..d02f42b 100644
--- a/doc/gcov.html
+++ b/doc/gcov.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>GCOV for skiboot &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>GCOV for skiboot &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="bmc.html" title="OPAL &lt;–&gt; BMC interactions"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">GCOV for skiboot</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -100,7 +101,7 @@ from the skiboot memory image.</p>
<p>You can then run lcov:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">lcov</span> <span class="o">-</span><span class="n">b</span> <span class="o">.</span> <span class="o">-</span><span class="n">q</span> <span class="o">-</span><span class="n">c</span> <span class="o">-</span><span class="n">d</span> <span class="o">.</span> <span class="o">-</span><span class="n">o</span> <span class="n">skiboot</span><span class="o">-</span><span class="n">boot</span><span class="o">.</span><span class="n">info</span>
<span class="o">--</span><span class="n">gcov</span><span class="o">-</span><span class="n">tool</span>
-<span class="o">/</span><span class="n">opt</span><span class="o">/</span><span class="n">cross</span><span class="o">/</span><span class="n">gcc</span><span class="o">-</span><span class="mf">4.8.0</span><span class="o">-</span><span class="n">nolibc</span><span class="o">/</span><span class="n">powerpc64</span><span class="o">-</span><span class="n">linux</span><span class="o">/</span><span class="nb">bin</span><span class="o">/</span><span class="n">powerpc64</span><span class="o">-</span><span class="n">linux</span><span class="o">-</span><span class="n">gcov</span>
+<span class="o">/</span><span class="n">opt</span><span class="o">/</span><span class="n">cross</span><span class="o">/</span><span class="n">gcc</span><span class="o">-</span><span class="mf">4.8</span><span class="o">.</span><span class="mi">0</span><span class="o">-</span><span class="n">nolibc</span><span class="o">/</span><span class="n">powerpc64</span><span class="o">-</span><span class="n">linux</span><span class="o">/</span><span class="nb">bin</span><span class="o">/</span><span class="n">powerpc64</span><span class="o">-</span><span class="n">linux</span><span class="o">-</span><span class="n">gcov</span>
</pre></div>
</div>
<p><em>IMPORTANT</em> you should point lcov to the gcov for the compiler you used
@@ -109,7 +110,6 @@ to build skiboot, otherwise you’re likely to get errors.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -140,15 +140,17 @@ to build skiboot, otherwise you’re likely to get errors.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -165,14 +167,13 @@ to build skiboot, otherwise you’re likely to get errors.</p>
<li class="right" >
<a href="bmc.html" title="OPAL &lt;–&gt; BMC interactions"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">GCOV for skiboot</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/genindex.html b/doc/genindex.html
index f582966..6f82885 100644
--- a/doc/genindex.html
+++ b/doc/genindex.html
@@ -1,19 +1,22 @@
-<!DOCTYPE html>
-<html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Index &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Index &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="#" />
<link rel="search" title="Search" href="search.html" />
@@ -24,9 +27,8 @@
<li class="right" style="margin-right: 10px">
<a href="#" title="General Index"
accesskey="I">index</a></li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Index</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -43,22 +45,23 @@
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -69,14 +72,13 @@
<li class="right" style="margin-right: 10px">
<a href="#" title="General Index"
>index</a></li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Index</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/imc.html b/doc/imc.html
index 38744ab..50f2f74 100644
--- a/doc/imc.html
+++ b/doc/imc.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL/Skiboot In-Memory Collection (IMC) interface Documentation &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL/Skiboot In-Memory Collection (IMC) interface Documentation &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="xive.html" title="P9 XIVE Exploitation"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL/Skiboot In-Memory Collection (IMC) interface Documentation</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -148,7 +149,6 @@ device tree.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -180,15 +180,17 @@ device tree.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -205,14 +207,13 @@ device tree.</p>
<li class="right" >
<a href="xive.html" title="P9 XIVE Exploitation"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL/Skiboot In-Memory Collection (IMC) interface Documentation</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/index.html b/doc/index.html
index 993a0e8..8e07761 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>SkiBoot Documentation &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>SkiBoot Documentation &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -28,9 +30,8 @@
<li class="right" >
<a href="overview.html" title="Skiboot overview"
accesskey="N">next</a> |</li>
- <li class="nav-item nav-item-0"><a href="#">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">SkiBoot Documentation</a></li>
+ <li class="nav-item nav-item-0"><a href="#">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -222,10 +223,10 @@
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="device-tree/index.html">Device Tree</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="device-tree/ibm%2Ccvc.html">ibm,cvc</a></li>
-<li class="toctree-l2"><a class="reference internal" href="device-tree/ibm%2Cfirmware-versions.html">ibm,firmware-versions node</a></li>
-<li class="toctree-l2"><a class="reference internal" href="device-tree/ibm%2Copal.html">ibm,opal</a></li>
-<li class="toctree-l2"><a class="reference internal" href="device-tree/ibm%2Csecureboot.html">ibm,secureboot</a></li>
+<li class="toctree-l2"><a class="reference internal" href="device-tree/ibm,cvc.html">ibm,cvc</a></li>
+<li class="toctree-l2"><a class="reference internal" href="device-tree/ibm,firmware-versions.html">ibm,firmware-versions node</a></li>
+<li class="toctree-l2"><a class="reference internal" href="device-tree/ibm,opal.html">ibm,opal</a></li>
+<li class="toctree-l2"><a class="reference internal" href="device-tree/ibm,secureboot.html">ibm,secureboot</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-tree/imc.html">IMC Device Tree Bindings</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-tree/memory-hierarchy.html">P9 memory hierarchy</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-tree/nvlink.html">Nvlink Device Tree Bindings</a></li>
@@ -236,8 +237,8 @@
<li class="toctree-l2"><a class="reference internal" href="device-tree/tpm.html">Trusted Platform Module (TPM)</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-tree/vas.html">Virtual Accelerator Switchboard (VAS)</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-tree/vpd.html">VPD (Vital Product Data)</a></li>
-<li class="toctree-l2"><a class="reference internal" href="device-tree/ibm%2Cpowerpc-cpu-features/binding.html">ibm,powerpc-cpu-features Binding</a></li>
-<li class="toctree-l2"><a class="reference internal" href="device-tree/ibm%2Cpowerpc-cpu-features/design.html">ibm,powerpc-cpu-features Design</a></li>
+<li class="toctree-l2"><a class="reference internal" href="device-tree/ibm,powerpc-cpu-features/binding.html">ibm,powerpc-cpu-features Binding</a></li>
+<li class="toctree-l2"><a class="reference internal" href="device-tree/ibm,powerpc-cpu-features/design.html">ibm,powerpc-cpu-features Design</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="opal-api/index.html">OPAL API Documentation</a><ul>
@@ -488,6 +489,7 @@
<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-6.0.21.html">skiboot-6.0.21</a></li>
<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-6.0.22.html">skiboot-6.0.22</a></li>
<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-6.0.23.html">skiboot-6.0.23</a></li>
+<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-6.0.24.html">skiboot-6.0.24</a></li>
<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-6.0.3.html">skiboot-6.0.3</a></li>
<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-6.0.4.html">skiboot-6.0.4</a></li>
<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-6.0.5.html">skiboot-6.0.5</a></li>
@@ -525,7 +527,14 @@
<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-6.6.2.html">skiboot-6.6.2</a></li>
<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-6.6.3.html">skiboot-6.6.3</a></li>
<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-6.6.4.html">skiboot-6.6.4</a></li>
+<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-6.6.6.html">skiboot-6.6.6</a></li>
<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-6.7.html">skiboot-6.7</a></li>
+<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-6.7.1.html">skiboot-6.7.1</a></li>
+<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-6.7.2.html">skiboot-6.7.2</a></li>
+<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-6.7.3.html">skiboot-6.7.3</a></li>
+<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-6.8.html">skiboot-6.8</a></li>
+<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-6.8.1.html">skiboot-6.8.1</a></li>
+<li class="toctree-l2"><a class="reference internal" href="release-notes/skiboot-7.0.html">skiboot-7.0</a></li>
</ul>
</li>
</ul>
@@ -534,7 +543,6 @@
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -563,15 +571,17 @@
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -585,14 +595,13 @@
<li class="right" >
<a href="overview.html" title="Skiboot overview"
>next</a> |</li>
- <li class="nav-item nav-item-0"><a href="#">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">SkiBoot Documentation</a></li>
+ <li class="nav-item nav-item-0"><a href="#">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/memory.html b/doc/memory.html
index c6ec4c4..8041f6c 100644
--- a/doc/memory.html
+++ b/doc/memory.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Memory in skiboot &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Memory in skiboot &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="gcov.html" title="GCOV for skiboot"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Memory in skiboot</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -62,14 +63,14 @@ Now, it is 13631488 bytes after being bumped as part of the GCOV work.</p>
all the heap once skiboot became 2MB with GCOV.</p>
<p>Heap usage is printed before running the payload.</p>
<p>For example, as of writing, on a dual socket Tuleta:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">45215870591</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">SkiBoot</span> <span class="n">skiboot</span><span class="o">-</span><span class="mf">5.0.1</span><span class="o">-</span><span class="mi">94</span><span class="o">-</span><span class="n">gb759ce2</span> <span class="n">starting</span><span class="o">...</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">45215870591</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">SkiBoot</span> <span class="n">skiboot</span><span class="o">-</span><span class="mf">5.0</span><span class="o">.</span><span class="mi">1</span><span class="o">-</span><span class="mi">94</span><span class="o">-</span><span class="n">gb759ce2</span> <span class="n">starting</span><span class="o">...</span>
<span class="p">[</span><span class="mi">3680939340</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">CUPD</span><span class="p">:</span> <span class="n">T</span> <span class="n">side</span> <span class="n">MI</span> <span class="n">Keyword</span> <span class="o">=</span> <span class="n">SV830_027</span>
-<span class="p">[</span><span class="mi">3680942658</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">CUPD</span><span class="p">:</span> <span class="n">T</span> <span class="n">side</span> <span class="n">ML</span> <span class="n">Keyword</span> <span class="o">=</span> <span class="n">FW830</span><span class="mf">.00</span>
+<span class="p">[</span><span class="mi">3680942658</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">CUPD</span><span class="p">:</span> <span class="n">T</span> <span class="n">side</span> <span class="n">ML</span> <span class="n">Keyword</span> <span class="o">=</span> <span class="n">FW830</span><span class="o">.</span><span class="mi">00</span>
<span class="p">[</span><span class="mi">15404383291</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">Region</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">heap</span> <span class="n">free</span><span class="p">:</span> <span class="mi">5378072</span>
</pre></div>
</div>
<p>and on a palmetto:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">24748502575</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">SkiBoot</span> <span class="n">skiboot</span><span class="o">-</span><span class="mf">5.0.1</span><span class="o">-</span><span class="mi">94</span><span class="o">-</span><span class="n">gb759ce2</span> <span class="n">starting</span><span class="o">...</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">24748502575</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">SkiBoot</span> <span class="n">skiboot</span><span class="o">-</span><span class="mf">5.0</span><span class="o">.</span><span class="mi">1</span><span class="o">-</span><span class="mi">94</span><span class="o">-</span><span class="n">gb759ce2</span> <span class="n">starting</span><span class="o">...</span>
<span class="p">[</span><span class="mi">9870429550</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">Region</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">heap</span> <span class="n">free</span><span class="p">:</span> <span class="mi">10814856</span>
</pre></div>
</div>
@@ -85,7 +86,6 @@ where possible.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -113,15 +113,17 @@ where possible.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -138,14 +140,13 @@ where possible.</p>
<li class="right" >
<a href="gcov.html" title="GCOV for skiboot"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Memory in skiboot</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/mpipl.html b/doc/mpipl.html
index 2855b94..afeab38 100644
--- a/doc/mpipl.html
+++ b/doc/mpipl.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>MPIPL (aka FADUMP) Overview &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>MPIPL (aka FADUMP) Overview &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="power-management.html" title="Power Management"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">MPIPL (aka FADUMP) Overview</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -85,12 +86,11 @@ kernel in a format that GDB and crash can understand.</p>
<div class="section" id="device-tree">
<h2>Device tree<a class="headerlink" href="#device-tree" title="Permalink to this headline">¶</a></h2>
<p>We create new device tree node (<code class="docutils literal notranslate"><span class="pre">/ibm,opal/dump</span></code>) to pass dump details to Linux
-kernel from OPAL (see <a class="reference internal" href="device-tree/ibm%2Copal/dump.html#device-tree-ibm-opal-dump"><span class="std std-ref">Dump (MPIPL) Device Tree Binding</span></a>).</p>
+kernel from OPAL (see <a class="reference internal" href="device-tree/ibm,opal/dump.html#device-tree-ibm-opal-dump"><span class="std std-ref">Dump (MPIPL) Device Tree Binding</span></a>).</p>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -122,15 +122,17 @@ kernel from OPAL (see <a class="reference internal" href="device-tree/ibm%2Copal
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -147,14 +149,13 @@ kernel from OPAL (see <a class="reference internal" href="device-tree/ibm%2Copal
<li class="right" >
<a href="power-management.html" title="Power Management"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">MPIPL (aka FADUMP) Overview</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/nvlink.html b/doc/nvlink.html
index 836e788..d074472 100644
--- a/doc/nvlink.html
+++ b/doc/nvlink.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL/Skiboot Nvlink Interface Documentation &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL/Skiboot Nvlink Interface Documentation &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="memory.html" title="Memory in skiboot"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL/Skiboot Nvlink Interface Documentation</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -73,42 +74,42 @@ necessary device parameters. The only functionality available is
related to the setup of DMA windows.</p>
<div class="section" id="configuration-space-parameters">
<h3>Configuration Space Parameters<a class="headerlink" href="#configuration-space-parameters" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 17%" />
-<col style="width: 26%" />
-<col style="width: 57%" />
+<col width="17%" />
+<col width="26%" />
+<col width="57%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Vendor ID</p></td>
-<td><p>0x1014</p></td>
-<td><p>(IBM)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Vendor ID</td>
+<td>0x1014</td>
+<td>(IBM)</td>
</tr>
-<tr class="row-odd"><td><p>Device ID</p></td>
-<td><p>0x04ea</p></td>
-<td></td>
+<tr class="row-odd"><td>Device ID</td>
+<td>0x04ea</td>
+<td>&#160;</td>
</tr>
-<tr class="row-even"><td><p>Revision ID</p></td>
-<td><p>0x00</p></td>
-<td></td>
+<tr class="row-even"><td>Revision ID</td>
+<td>0x00</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p>Class</p></td>
-<td><p>0x068000 / 0x068001</p></td>
-<td><p>(Bridge Device Other, ProgIf = 0x0 / 0x1)</p></td>
+<tr class="row-odd"><td>Class</td>
+<td>0x068000 / 0x068001</td>
+<td>(Bridge Device Other, ProgIf = 0x0 / 0x1)</td>
</tr>
-<tr class="row-even"><td><p>BAR0/1</p></td>
-<td><p>TL/DL Registers</p></td>
-<td></td>
+<tr class="row-even"><td>BAR0/1</td>
+<td>TL/DL Registers</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p>BAR2/3</p></td>
-<td><p>GEN-ID Registers</p></td>
-<td><p>(Only for rev-id = 0x1)</p></td>
+<tr class="row-odd"><td>BAR2/3</td>
+<td>GEN-ID Registers</td>
+<td>(Only for rev-id = 0x1)</td>
</tr>
</tbody>
</table>
@@ -149,10 +150,9 @@ ordering mode through some yet to be designed mechanism.</p>
</div>
<p>Version</p>
<blockquote>
-<div><p>This refers to the version of the NPU config space. Used by device
+<div>This refers to the version of the NPU config space. Used by device
drivers to determine which fields of the config space they can
-expect to be available.</p>
-</div></blockquote>
+expect to be available.</div></blockquote>
<p>Procedure Control Register</p>
<blockquote>
<div><p>Used to start hardware procedures.</p>
@@ -165,20 +165,20 @@ procedure number depending on the procedure status field.</p>
<p>Procedure Numbers:</p>
<blockquote>
<div><ol class="arabic simple" start="0">
-<li><p>Abort in-progress procedure</p></li>
-<li><p>NOP</p></li>
-<li><p>Unsupported procedure</p></li>
-<li><p>Unsupported procedure</p></li>
-<li><p>Naples PHY - RESET</p></li>
-<li><p>Naples PHY - TX_ZCAL</p></li>
-<li><p>Naples PHY - RX_DCCAL</p></li>
-<li><p>Naples PHY - TX_RXCAL_ENABLE</p></li>
-<li><p>Naples PHY - TX_RXCAL_DISABLE</p></li>
-<li><p>Naples PHY - RX_TRAINING</p></li>
-<li><p>Naples NPU - RESET</p></li>
-<li><p>Naples PHY - PHY preterminate</p></li>
-<li><p>Naples PHY - PHY terminated</p></li>
-<li><p>Witherspoon TL credit validation</p></li>
+<li>Abort in-progress procedure</li>
+<li>NOP</li>
+<li>Unsupported procedure</li>
+<li>Unsupported procedure</li>
+<li>Naples PHY - RESET</li>
+<li>Naples PHY - TX_ZCAL</li>
+<li>Naples PHY - RX_DCCAL</li>
+<li>Naples PHY - TX_RXCAL_ENABLE</li>
+<li>Naples PHY - TX_RXCAL_DISABLE</li>
+<li>Naples PHY - RX_TRAINING</li>
+<li>Naples NPU - RESET</li>
+<li>Naples PHY - PHY preterminate</li>
+<li>Naples PHY - PHY terminated</li>
+<li>Witherspoon TL credit validation</li>
</ol>
</div></blockquote>
<p>Procedure 5 (TX_ZCAL) should only be run once. System firmware will
@@ -192,33 +192,30 @@ of the procedure number in the control register is complete and if
it completed successfully.</p>
<p>This register must be polled frequently to allow system firmware to
execute the procedures.</p>
-<dl class="simple">
-<dt>Fields:</dt><dd><p>Bit 31 - Procedure in progress
+<dl class="docutils">
+<dt>Fields:</dt>
+<dd>Bit 31 - Procedure in progress
Bit 30 - Procedure complete
-Bit 3-0 - Procedure completion code</p>
-</dd>
-<dt>Procedure completion codes:</dt><dd><p>0 - Procedure completed successfully.
+Bit 3-0 - Procedure completion code</dd>
+<dt>Procedure completion codes:</dt>
+<dd>0 - Procedure completed successfully.
1 - Transient failure. Procedure should be rerun.
2 - Permanent failure. Procedure will never complete successfully.
3 - Procedure aborted.
-4 - Unsupported procedure.</p>
-</dd>
+4 - Unsupported procedure.</dd>
</dl>
</div></blockquote>
<p>PCI Device Flag</p>
<blockquote>
-<div><p>Bit 0 - set if the GPU PCIe device associated with this nvlink was found.
-bit 1 - set if the DL has been taken out of reset.</p>
-</div></blockquote>
+<div>Bit 0 - set if the GPU PCIe device associated with this nvlink was found.
+bit 1 - set if the DL has been taken out of reset.</div></blockquote>
<p>Link Number</p>
<blockquote>
-<div><p>Physical link number this emulated PCI device is associated
-with. One of 0, 1, 4 or 5 (links 2 &amp; 3 do not exist on Naples).</p>
-</div></blockquote>
+<div>Physical link number this emulated PCI device is associated
+with. One of 0, 1, 4 or 5 (links 2 &amp; 3 do not exist on Naples).</div></blockquote>
<p>Reserved</p>
<blockquote>
-<div><p>These fields must be ignored and no value should be assumed.</p>
-</div></blockquote>
+<div>These fields must be ignored and no value should be assumed.</div></blockquote>
</div>
<div class="section" id="interrupts">
<h3>Interrupts<a class="headerlink" href="#interrupts" title="Permalink to this headline">¶</a></h3>
@@ -236,7 +233,6 @@ reporting.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -273,15 +269,17 @@ reporting.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -298,14 +296,13 @@ reporting.</p>
<li class="right" >
<a href="memory.html" title="Memory in skiboot"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL/Skiboot Nvlink Interface Documentation</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/objects.inv b/doc/objects.inv
index 7ab297f..6177374 100644
--- a/doc/objects.inv
+++ b/doc/objects.inv
Binary files differ
diff --git a/doc/opal-api/index.html b/doc/opal-api/index.html
index a8087f4..6bc7eec 100644
--- a/doc/opal-api/index.html
+++ b/doc/opal-api/index.html
@@ -1,24 +1,26 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL API Documentation &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL API Documentation &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="OPAL_CEC_POWER_DOWN" href="opal-cec-power-down-5.html" />
- <link rel="prev" title="ibm,powerpc-cpu-features Design" href="../device-tree/ibm%2Cpowerpc-cpu-features/design.html" />
+ <link rel="prev" title="ibm,powerpc-cpu-features Design" href="../device-tree/ibm,powerpc-cpu-features/design.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
@@ -30,11 +32,10 @@
<a href="opal-cec-power-down-5.html" title="OPAL_CEC_POWER_DOWN"
accesskey="N">next</a> |</li>
<li class="right" >
- <a href="../device-tree/ibm%2Cpowerpc-cpu-features/design.html" title="ibm,powerpc-cpu-features Design"
+ <a href="../device-tree/ibm,powerpc-cpu-features/design.html" title="ibm,powerpc-cpu-features Design"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL API Documentation</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -46,1121 +47,1121 @@
<div class="section" id="opal-api-documentation">
<span id="opal-api"></span><h1>OPAL API Documentation<a class="headerlink" href="#opal-api-documentation" title="Permalink to this headline">¶</a></h1>
<p>The OPAL API is the interface between an Operating System and OPAL.</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 41%" />
-<col style="width: 13%" />
-<col style="width: 22%" />
-<col style="width: 9%" />
-<col style="width: 15%" />
+<col width="41%" />
+<col width="13%" />
+<col width="22%" />
+<col width="9%" />
+<col width="15%" />
</colgroup>
-<tbody>
-<tr class="row-odd"><td><p>Name</p></td>
-<td><p>API Token ID</p></td>
-<td><p>Introduced</p></td>
-<td><p>Required
-as of</p></td>
-<td><p>Notes</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-test-0.html#opal-test"><span class="std std-ref">OPAL_TEST</span></a></p></td>
-<td><p>0</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-console-read-write-1-2.html#opal-console-write"><span class="std std-ref">OPAL_CONSOLE_WRITE</span></a></p></td>
-<td><p>1</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-console-read-write-1-2.html#opal-console-read"><span class="std std-ref">OPAL_CONSOLE_READ</span></a></p></td>
-<td><p>2</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-rtc-read-write-3-4.html#opal-rtc-read"><span class="std std-ref">OPAL_RTC_READ</span></a></p></td>
-<td><p>3</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-rtc-read-write-3-4.html#opal-rtc-write"><span class="std std-ref">OPAL_RTC_WRITE</span></a></p></td>
-<td><p>4</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-cec-power-down-5.html#opal-cec-power-down"><span class="std std-ref">OPAL_CEC_POWER_DOWN</span></a></p></td>
-<td><p>5</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-cec-reboot-6-116.html#opal-cec-reboot"><span class="std std-ref">OPAL_CEC_REBOOT</span></a></p></td>
-<td><p>6</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-nvram-read-write-7-8.html#opal-read-nvram"><span class="std std-ref">OPAL_READ_NVRAM</span></a></p></td>
-<td><p>7</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-nvram-read-write-7-8.html#opal-write-nvram"><span class="std std-ref">OPAL_WRITE_NVRAM</span></a></p></td>
-<td><p>8</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-handle-interrupt.html#opal-handle-interrupt"><span class="std std-ref">OPAL_HANDLE_INTERRUPT</span></a></p></td>
-<td><p>9</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-poll-events.html#opal-poll-events"><span class="std std-ref">OPAL_POLL_EVENTS</span></a></p></td>
-<td><p>10</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-pci-set-hub-tce-memory"><span class="std std-ref">OPAL_PCI_SET_HUB_TCE_MEMORY</span></a></p></td>
-<td><p>11</p></td>
-<td><p>N/A
+<tbody valign="top">
+<tr class="row-odd"><td>Name</td>
+<td>API Token ID</td>
+<td>Introduced</td>
+<td>Required
+as of</td>
+<td>Notes</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-test-0.html#opal-test"><span class="std std-ref">OPAL_TEST</span></a></td>
+<td>0</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-console-read-write-1-2.html#opal-console-write"><span class="std std-ref">OPAL_CONSOLE_WRITE</span></a></td>
+<td>1</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-console-read-write-1-2.html#opal-console-read"><span class="std std-ref">OPAL_CONSOLE_READ</span></a></td>
+<td>2</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-rtc-read-write-3-4.html#opal-rtc-read"><span class="std std-ref">OPAL_RTC_READ</span></a></td>
+<td>3</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-rtc-read-write-3-4.html#opal-rtc-write"><span class="std std-ref">OPAL_RTC_WRITE</span></a></td>
+<td>4</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-cec-power-down-5.html#opal-cec-power-down"><span class="std std-ref">OPAL_CEC_POWER_DOWN</span></a></td>
+<td>5</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-cec-reboot-6-116.html#opal-cec-reboot"><span class="std std-ref">OPAL_CEC_REBOOT</span></a></td>
+<td>6</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-nvram-read-write-7-8.html#opal-read-nvram"><span class="std std-ref">OPAL_READ_NVRAM</span></a></td>
+<td>7</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-nvram-read-write-7-8.html#opal-write-nvram"><span class="std std-ref">OPAL_WRITE_NVRAM</span></a></td>
+<td>8</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-handle-interrupt.html#opal-handle-interrupt"><span class="std std-ref">OPAL_HANDLE_INTERRUPT</span></a></td>
+<td>9</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-poll-events.html#opal-poll-events"><span class="std std-ref">OPAL_POLL_EVENTS</span></a></td>
+<td>10</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-pci-set-hub-tce-memory"><span class="std std-ref">OPAL_PCI_SET_HUB_TCE_MEMORY</span></a></td>
+<td>11</td>
+<td>N/A
Present only on
-internal systems.</p></td>
-<td></td>
-<td><p>Was POWER7
+internal systems.</td>
+<td>&#160;</td>
+<td>Was POWER7
p5ioc specific.
No use outside
-IBM development</p></td>
+IBM development</td>
</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-pci-set-phb-tce-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TCE_MEMORY</span></a></p></td>
-<td><p>12</p></td>
-<td><p>N/A
+<tr class="row-even"><td><a class="reference internal" href="#opal-pci-set-phb-tce-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TCE_MEMORY</span></a></td>
+<td>12</td>
+<td>N/A
Present only on
-internal systems.</p></td>
-<td></td>
-<td><p>Was POWER7
+internal systems.</td>
+<td>&#160;</td>
+<td>Was POWER7
p5ioc specific.
No use outside
-IBM development</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-config-read-write-13-14-15-16-17-18.html#opal-pci-config-read-byte"><span class="std std-ref">OPAL_PCI_CONFIG_READ_BYTE</span></a></p></td>
-<td><p>13</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-pci-config-read-write-13-14-15-16-17-18.html#opal-pci-config-read-half-word"><span class="std std-ref">OPAL_PCI_CONFIG_READ_HALF_WORD</span></a></p></td>
-<td><p>14</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-config-read-write-13-14-15-16-17-18.html#opal-pci-config-read-word"><span class="std std-ref">OPAL_PCI_CONFIG_READ_WORD</span></a></p></td>
-<td><p>15</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-pci-config-read-write-13-14-15-16-17-18.html#opal-pci-config-write-byte"><span class="std std-ref">OPAL_PCI_CONFIG_WRITE_BYTE</span></a></p></td>
-<td><p>16</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-config-read-write-13-14-15-16-17-18.html#opal-pci-config-write-half-word"><span class="std std-ref">OPAL_PCI_CONFIG_WRITE_HALF_WORD</span></a></p></td>
-<td><p>17</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-pci-config-read-write-13-14-15-16-17-18.html#opal-pci-config-write-word"><span class="std std-ref">OPAL_PCI_CONFIG_WRITE_WORD</span></a></p></td>
-<td><p>18</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-set-xive-19.html#opal-set-xive"><span class="std std-ref">OPAL_SET_XIVE</span></a></p></td>
-<td><p>19</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-get-xive-20.html#opal-get-xive"><span class="std std-ref">OPAL_GET_XIVE</span></a></p></td>
-<td><p>20</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-get-completion-token-status"><span class="std std-ref">OPAL_GET_COMPLETION_TOKEN_STATUS</span></a></p></td>
-<td><p>21</p></td>
-<td><p>Never</p></td>
-<td></td>
-<td><p>Never
-Implemented</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-register-opal-exception-handler"><span class="std std-ref">OPAL_REGISTER_OPAL_EXCEPTION_HANDLER</span></a></p></td>
-<td><p>22</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td></td>
-<td><p>Removed</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-eeh-freeze-status-23.html#opal-pci-eeh-freeze-status"><span class="std std-ref">OPAL_PCI_EEH_FREEZE_STATUS</span></a></p></td>
-<td><p>23</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-pci-shpc"><span class="std std-ref">OPAL_PCI_SHPC</span></a></p></td>
-<td><p>24</p></td>
-<td><p>Never</p></td>
-<td><p>POWER8</p></td>
-<td><p>Never
-Implemented</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-console-read-write-1-2.html#opal-console-write-buffer-space"><span class="std std-ref">OPAL_CONSOLE_WRITE_BUFFER_SPACE</span></a></p></td>
-<td><p>25</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-pci-eeh-freeze-clear-26.html#opal-pci-eeh-freeze-clear"><span class="std std-ref">OPAL_PCI_EEH_FREEZE_CLEAR</span></a></p></td>
-<td><p>26</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-phb-mmio-enable-27.html#opal-pci-phb-mmio-enable"><span class="std std-ref">OPAL_PCI_PHB_MMIO_ENABLE</span></a></p></td>
-<td><p>27</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-pci-set-phb-mem-window-28.html#opal-pci-set-phb-mem-window"><span class="std std-ref">OPAL_PCI_SET_PHB_MEM_WINDOW</span></a></p></td>
-<td><p>28</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-map-pe-mmio-window-29.html#opal-pci-map-pe-mmio-window"><span class="std std-ref">OPAL_PCI_MAP_PE_MMIO_WINDOW</span></a></p></td>
-<td><p>29</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-pci-set-phb-table-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TABLE_MEMORY</span></a></p></td>
-<td><p>30</p></td>
-<td><p>Never</p></td>
-<td><p>POWER8</p></td>
-<td><p>Never used or
-Implemented</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-set-pe-31.html#opal-pci-set-pe"><span class="std std-ref">OPAL_PCI_SET_PE</span></a></p></td>
-<td><p>31</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-pci-set-peltv-32.html#opal-pci-set-peltv"><span class="std std-ref">OPAL_PCI_SET_PELTV</span></a></p></td>
-<td><p>32</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-set-mve-33.html#opal-pci-set-mve"><span class="std std-ref">OPAL_PCI_SET_MVE</span></a></p></td>
-<td><p>33</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-pci-set-mve-enable-34.html#opal-pci-set-mve-enable"><span class="std std-ref">OPAL_PCI_SET_MVE_ENABLE</span></a></p></td>
-<td><p>34</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-pci-get-xive-reissue"><span class="std std-ref">OPAL_PCI_GET_XIVE_REISSUE</span></a></p></td>
-<td><p>35</p></td>
-<td><p>Never</p></td>
-<td></td>
-<td><p>Never used or
-Implemented</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-pci-set-xive-reissue"><span class="std std-ref">OPAL_PCI_SET_XIVE_REISSUE</span></a></p></td>
-<td><p>36</p></td>
-<td><p>Never</p></td>
-<td></td>
-<td><p>Never used or
-Implemented</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-set-xive-pe-37.html#opal-pci-set-xive-pe"><span class="std std-ref">OPAL_PCI_SET_XIVE_PE</span></a></p></td>
-<td><p>37</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-get-xive-source"><span class="std std-ref">OPAL_GET_XIVE_SOURCE</span></a></p></td>
-<td><p>38</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td><p>Never used,
-now removed.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-get-msi-39-40.html#opal-get-msi-32"><span class="std std-ref">OPAL_GET_MSI_32</span></a></p></td>
-<td><p>39</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-get-msi-39-40.html#opal-get-msi-64"><span class="std std-ref">OPAL_GET_MSI_64</span></a></p></td>
-<td><p>40</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-start-return-cpu-41-69.html#opal-start-cpu"><span class="std std-ref">OPAL_START_CPU</span></a></p></td>
-<td><p>41</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-query-cpu-status-42.html#opal-query-cpu-status"><span class="std std-ref">OPAL_QUERY_CPU_STATUS</span></a></p></td>
-<td><p>42</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-write-oppanel"><span class="std std-ref">OPAL_WRITE_OPPANEL</span></a></p></td>
-<td><p>43</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td><p>unimplemented</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-pci-map-pe-dma-window-44.html#opal-pci-map-pe-dma-window"><span class="std std-ref">OPAL_PCI_MAP_PE_DMA_WINDOW</span></a></p></td>
-<td><p>44</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-map-pe-dma-window-real-45.html#opal-pci-map-pe-dma-window-real"><span class="std std-ref">OPAL_PCI_MAP_PE_DMA_WINDOW_REAL</span></a></p></td>
-<td><p>45</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p>Never used</p></td>
-<td><p>46</p></td>
-<td></td>
-<td></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p>Never used</p></td>
-<td><p>47</p></td>
-<td></td>
-<td></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p>Never used</p></td>
-<td><p>48</p></td>
-<td></td>
-<td></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-reset-49.html#opal-pci-reset"><span class="std std-ref">OPAL_PCI_RESET</span></a></p></td>
-<td><p>49</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-pci-get-hub-diag-data-50.html#opal-pci-get-hub-diag-data"><span class="std std-ref">OPAL_PCI_GET_HUB_DIAG_DATA</span></a></p></td>
-<td><p>50</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-pci-get-phb-diag-data"><span class="std std-ref">OPAL_PCI_GET_PHB_DIAG_DATA</span></a></p></td>
-<td><p>51</p></td>
-<td><p>N/A</p></td>
-<td></td>
-<td><p>Only
+IBM development</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-config-read-write-13-14-15-16-17-18.html#opal-pci-config-read-byte"><span class="std std-ref">OPAL_PCI_CONFIG_READ_BYTE</span></a></td>
+<td>13</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-pci-config-read-write-13-14-15-16-17-18.html#opal-pci-config-read-half-word"><span class="std std-ref">OPAL_PCI_CONFIG_READ_HALF_WORD</span></a></td>
+<td>14</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-config-read-write-13-14-15-16-17-18.html#opal-pci-config-read-word"><span class="std std-ref">OPAL_PCI_CONFIG_READ_WORD</span></a></td>
+<td>15</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-pci-config-read-write-13-14-15-16-17-18.html#opal-pci-config-write-byte"><span class="std std-ref">OPAL_PCI_CONFIG_WRITE_BYTE</span></a></td>
+<td>16</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-config-read-write-13-14-15-16-17-18.html#opal-pci-config-write-half-word"><span class="std std-ref">OPAL_PCI_CONFIG_WRITE_HALF_WORD</span></a></td>
+<td>17</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-pci-config-read-write-13-14-15-16-17-18.html#opal-pci-config-write-word"><span class="std std-ref">OPAL_PCI_CONFIG_WRITE_WORD</span></a></td>
+<td>18</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-set-xive-19.html#opal-set-xive"><span class="std std-ref">OPAL_SET_XIVE</span></a></td>
+<td>19</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-get-xive-20.html#opal-get-xive"><span class="std std-ref">OPAL_GET_XIVE</span></a></td>
+<td>20</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-get-completion-token-status"><span class="std std-ref">OPAL_GET_COMPLETION_TOKEN_STATUS</span></a></td>
+<td>21</td>
+<td>Never</td>
+<td>&#160;</td>
+<td>Never
+Implemented</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-register-opal-exception-handler"><span class="std std-ref">OPAL_REGISTER_OPAL_EXCEPTION_HANDLER</span></a></td>
+<td>22</td>
+<td>v1.0 (Initial Release)</td>
+<td>&#160;</td>
+<td>Removed</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-eeh-freeze-status-23.html#opal-pci-eeh-freeze-status"><span class="std std-ref">OPAL_PCI_EEH_FREEZE_STATUS</span></a></td>
+<td>23</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-pci-shpc"><span class="std std-ref">OPAL_PCI_SHPC</span></a></td>
+<td>24</td>
+<td>Never</td>
+<td>POWER8</td>
+<td>Never
+Implemented</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-console-read-write-1-2.html#opal-console-write-buffer-space"><span class="std std-ref">OPAL_CONSOLE_WRITE_BUFFER_SPACE</span></a></td>
+<td>25</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-pci-eeh-freeze-clear-26.html#opal-pci-eeh-freeze-clear"><span class="std std-ref">OPAL_PCI_EEH_FREEZE_CLEAR</span></a></td>
+<td>26</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-phb-mmio-enable-27.html#opal-pci-phb-mmio-enable"><span class="std std-ref">OPAL_PCI_PHB_MMIO_ENABLE</span></a></td>
+<td>27</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-pci-set-phb-mem-window-28.html#opal-pci-set-phb-mem-window"><span class="std std-ref">OPAL_PCI_SET_PHB_MEM_WINDOW</span></a></td>
+<td>28</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-map-pe-mmio-window-29.html#opal-pci-map-pe-mmio-window"><span class="std std-ref">OPAL_PCI_MAP_PE_MMIO_WINDOW</span></a></td>
+<td>29</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-pci-set-phb-table-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TABLE_MEMORY</span></a></td>
+<td>30</td>
+<td>Never</td>
+<td>POWER8</td>
+<td>Never used or
+Implemented</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-set-pe-31.html#opal-pci-set-pe"><span class="std std-ref">OPAL_PCI_SET_PE</span></a></td>
+<td>31</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-pci-set-peltv-32.html#opal-pci-set-peltv"><span class="std std-ref">OPAL_PCI_SET_PELTV</span></a></td>
+<td>32</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-set-mve-33.html#opal-pci-set-mve"><span class="std std-ref">OPAL_PCI_SET_MVE</span></a></td>
+<td>33</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-pci-set-mve-enable-34.html#opal-pci-set-mve-enable"><span class="std std-ref">OPAL_PCI_SET_MVE_ENABLE</span></a></td>
+<td>34</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-pci-get-xive-reissue"><span class="std std-ref">OPAL_PCI_GET_XIVE_REISSUE</span></a></td>
+<td>35</td>
+<td>Never</td>
+<td>&#160;</td>
+<td>Never used or
+Implemented</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-pci-set-xive-reissue"><span class="std std-ref">OPAL_PCI_SET_XIVE_REISSUE</span></a></td>
+<td>36</td>
+<td>Never</td>
+<td>&#160;</td>
+<td>Never used or
+Implemented</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-set-xive-pe-37.html#opal-pci-set-xive-pe"><span class="std std-ref">OPAL_PCI_SET_XIVE_PE</span></a></td>
+<td>37</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-get-xive-source"><span class="std std-ref">OPAL_GET_XIVE_SOURCE</span></a></td>
+<td>38</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>Never used,
+now removed.</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-get-msi-39-40.html#opal-get-msi-32"><span class="std std-ref">OPAL_GET_MSI_32</span></a></td>
+<td>39</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-get-msi-39-40.html#opal-get-msi-64"><span class="std std-ref">OPAL_GET_MSI_64</span></a></td>
+<td>40</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-start-return-cpu-41-69.html#opal-start-cpu"><span class="std std-ref">OPAL_START_CPU</span></a></td>
+<td>41</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-query-cpu-status-42.html#opal-query-cpu-status"><span class="std std-ref">OPAL_QUERY_CPU_STATUS</span></a></td>
+<td>42</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-write-oppanel"><span class="std std-ref">OPAL_WRITE_OPPANEL</span></a></td>
+<td>43</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>unimplemented</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-pci-map-pe-dma-window-44.html#opal-pci-map-pe-dma-window"><span class="std std-ref">OPAL_PCI_MAP_PE_DMA_WINDOW</span></a></td>
+<td>44</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-map-pe-dma-window-real-45.html#opal-pci-map-pe-dma-window-real"><span class="std std-ref">OPAL_PCI_MAP_PE_DMA_WINDOW_REAL</span></a></td>
+<td>45</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td>Never used</td>
+<td>46</td>
+<td>&#160;</td>
+<td>&#160;</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td>Never used</td>
+<td>47</td>
+<td>&#160;</td>
+<td>&#160;</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td>Never used</td>
+<td>48</td>
+<td>&#160;</td>
+<td>&#160;</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-reset-49.html#opal-pci-reset"><span class="std std-ref">OPAL_PCI_RESET</span></a></td>
+<td>49</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-pci-get-hub-diag-data-50.html#opal-pci-get-hub-diag-data"><span class="std std-ref">OPAL_PCI_GET_HUB_DIAG_DATA</span></a></td>
+<td>50</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-pci-get-phb-diag-data"><span class="std std-ref">OPAL_PCI_GET_PHB_DIAG_DATA</span></a></td>
+<td>51</td>
+<td>N/A</td>
+<td>&#160;</td>
+<td>Only
implemented
prior to public
-release.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-pci-fence-phb"><span class="std std-ref">OPAL_PCI_FENCE_PHB</span></a></p></td>
-<td><p>52</p></td>
-<td><p>Never</p></td>
-<td></td>
-<td><p>Never
-implemented</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-reinit-53.html#opal-pci-reinit"><span class="std std-ref">OPAL_PCI_REINIT</span></a></p></td>
-<td><p>53</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-pci-mask-pe-error"><span class="std std-ref">OPAL_PCI_MASK_PE_ERROR</span></a></p></td>
-<td><p>54</p></td>
-<td><p>Never</p></td>
-<td></td>
-<td><p>Never
-implemented</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-set-slot-led-status"><span class="std std-ref">OPAL_SET_SLOT_LED_STATUS</span></a></p></td>
-<td><p>55</p></td>
-<td><p>Never</p></td>
-<td></td>
-<td><p>Never
-implemented</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-get-epow-status-56.html#opal-get-epow-status"><span class="std std-ref">OPAL_GET_EPOW_STATUS</span></a></p></td>
-<td><p>56</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-set-system-attention-led"><span class="std std-ref">OPAL_SET_SYSTEM_ATTENTION_LED</span></a></p></td>
-<td><p>57</p></td>
-<td><p>Never</p></td>
-<td></td>
-<td><p>Never
-implemented</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-reserved1"><span class="std std-ref">OPAL_RESERVED1</span></a></p></td>
-<td><p>58</p></td>
-<td><p>Never</p></td>
-<td></td>
-<td><p>Never
-implemented</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-reserved2"><span class="std std-ref">OPAL_RESERVED2</span></a></p></td>
-<td><p>59</p></td>
-<td><p>Never</p></td>
-<td></td>
-<td><p>Never
-implemented</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-pci-next-error-60.html#opal-pci-next-error"><span class="std std-ref">OPAL_PCI_NEXT_ERROR</span></a></p></td>
-<td><p>60</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-eeh-freeze-status-23.html#opal-pci-eeh-freeze-status2"><span class="std std-ref">OPAL_PCI_EEH_FREEZE_STATUS2</span></a></p></td>
-<td><p>61</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td><p>Removed, never
-used!</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-pci-poll-62.html#opal-pci-poll"><span class="std std-ref">OPAL_PCI_POLL</span></a></p></td>
-<td><p>62</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-msi-eoi-63.html#opal-pci-msi-eoi"><span class="std std-ref">OPAL_PCI_MSI_EOI</span></a></p></td>
-<td><p>63</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-pci-get-phb-diag-data2-64.html#opal-pci-get-phb-diag-data2"><span class="std std-ref">OPAL_PCI_GET_PHB_DIAG_DATA2</span></a></p></td>
-<td><p>64</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-xscom-read-write-65-66.html#opal-xscom-read"><span class="std std-ref">OPAL_XSCOM_READ</span></a></p></td>
-<td><p>65</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-xscom-read-write-65-66.html#opal-xscom-write"><span class="std std-ref">OPAL_XSCOM_WRITE</span></a></p></td>
-<td><p>66</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-lpc-read-write-67-68.html#opal-lpc-read"><span class="std std-ref">OPAL_LPC_READ</span></a></p></td>
-<td><p>67</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-lpc-read-write-67-68.html#opal-lpc-write"><span class="std std-ref">OPAL_LPC_WRITE</span></a></p></td>
-<td><p>68</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-start-return-cpu-41-69.html#opal-return-cpu"><span class="std std-ref">OPAL_RETURN_CPU</span></a></p></td>
-<td><p>69</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-reinit-cpus-70.html#opal-reinit-cpus"><span class="std std-ref">OPAL_REINIT_CPUS</span></a></p></td>
-<td><p>70</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-elog-71-72-73-74-75.html#opal-elog-read"><span class="std std-ref">OPAL_ELOG_READ</span></a></p></td>
-<td><p>71</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-elog-write"><span class="std std-ref">OPAL_ELOG_WRITE</span></a></p></td>
-<td><p>72</p></td>
-<td><p>N/A</p></td>
-<td></td>
-<td><p>Currently
-unused.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-elog-71-72-73-74-75.html#opal-elog-ack"><span class="std std-ref">OPAL_ELOG_ACK</span></a></p></td>
-<td><p>73</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-elog-71-72-73-74-75.html#opal-elog-resend"><span class="std std-ref">OPAL_ELOG_RESEND</span></a></p></td>
-<td><p>74</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-elog-71-72-73-74-75.html#opal-elog-size"><span class="std std-ref">OPAL_ELOG_SIZE</span></a></p></td>
-<td><p>75</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-code-update-76-77-78.html#opal-flash-validate"><span class="std std-ref">OPAL_FLASH_VALIDATE</span></a></p></td>
-<td><p>76</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-code-update-76-77-78.html#opal-flash-manage"><span class="std std-ref">OPAL_FLASH_MANAGE</span></a></p></td>
-<td><p>77</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-code-update-76-77-78.html#opal-flash-update"><span class="std std-ref">OPAL_FLASH_UPDATE</span></a></p></td>
-<td><p>78</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-resync-timebase-79.html#opal-resync-timebase"><span class="std std-ref">OPAL_RESYNC_TIMEBASE</span></a></p></td>
-<td><p>79</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-check-token-80.html#opal-check-token"><span class="std std-ref">OPAL_CHECK_TOKEN</span></a></p></td>
-<td><p>80</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-dump-81-82-83-84-94-101-102.html#opal-dump-init"><span class="std std-ref">OPAL_DUMP_INIT</span></a></p></td>
-<td><p>81</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-dump-81-82-83-84-94-101-102.html#opal-dump-info"><span class="std std-ref">OPAL_DUMP_INFO</span></a></p></td>
-<td><p>82</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-dump-81-82-83-84-94-101-102.html#opal-dump-read"><span class="std std-ref">OPAL_DUMP_READ</span></a></p></td>
-<td><p>83</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-dump-81-82-83-84-94-101-102.html#opal-dump-ack"><span class="std std-ref">OPAL_DUMP_ACK</span></a></p></td>
-<td><p>84</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-get-msg-85.html#opal-get-msg"><span class="std std-ref">OPAL_GET_MSG</span></a></p></td>
-<td><p>85</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-check-async-completion-86.html#opal-check-async-completion"><span class="std std-ref">OPAL_CHECK_ASYNC_COMPLETION</span></a></p></td>
-<td><p>86</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-sync-host-reboot-87.html#opal-sync-host-reboot"><span class="std std-ref">OPAL_SYNC_HOST_REBOOT</span></a></p></td>
-<td><p>87</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-sensor-read-88.html#opal-sensor-read"><span class="std std-ref">OPAL_SENSOR_READ</span></a></p></td>
-<td><p>88</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-param-89-90.html#opal-get-param"><span class="std std-ref">OPAL_GET_PARAM</span></a></p></td>
-<td><p>89</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-param-89-90.html#opal-set-param"><span class="std std-ref">OPAL_SET_PARAM</span></a></p></td>
-<td><p>90</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-dump-81-82-83-84-94-101-102.html#opal-dump-resend"><span class="std std-ref">OPAL_DUMP_RESEND</span></a></p></td>
-<td><p>91</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-elog-send"><span class="std std-ref">OPAL_ELOG_SEND</span></a></p></td>
-<td><p>92</p></td>
-<td><p>Never</p></td>
-<td></td>
-<td><p>Never used</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-set-phb-capi-mode-93.html#opal-pci-set-phb-capi-mode"><span class="std std-ref">OPAL_PCI_SET_PHB_CAPI_MODE</span></a></p></td>
-<td><p>93</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-dump-81-82-83-84-94-101-102.html#opal-dump-info2"><span class="std std-ref">OPAL_DUMP_INFO2</span></a></p></td>
-<td><p>94</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-write-oppanel-async-95.html#opal-write-oppanel-async"><span class="std std-ref">OPAL_WRITE_OPPANEL_ASYNC</span></a></p></td>
-<td><p>95</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-pci-err-inject-96.html#opal-pci-err-inject"><span class="std std-ref">OPAL_PCI_ERR_INJECT</span></a></p></td>
-<td><p>96</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-eeh-freeze-set-97.html#opal-pci-eeh-freeze-set"><span class="std std-ref">OPAL_PCI_EEH_FREEZE_SET</span></a></p></td>
-<td><p>97</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-handle-hmi-98-166.html#opal-handle-hmi"><span class="std std-ref">OPAL_HANDLE_HMI</span></a></p></td>
-<td><p>98</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-config-cpu-idle-state-99.html#opal-config-cpu-idle-state"><span class="std std-ref">OPAL_CONFIG_CPU_IDLE_STATE</span></a></p></td>
-<td><p>99</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-slw-set-reg-100.html#opal-slw-set-reg"><span class="std std-ref">OPAL_SLW_SET_REG</span></a></p></td>
-<td><p>100</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-dump-81-82-83-84-94-101-102.html#opal-register-dump-region"><span class="std std-ref">OPAL_REGISTER_DUMP_REGION</span></a></p></td>
-<td><p>101</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-dump-81-82-83-84-94-101-102.html#opal-unregister-dump-region"><span class="std std-ref">OPAL_UNREGISTER_DUMP_REGION</span></a></p></td>
-<td><p>102</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-read-write-tpo-dpo-103-104-105.html#opal-write-tpo"><span class="std std-ref">OPAL_WRITE_TPO</span></a></p></td>
-<td><p>103</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-read-write-tpo-dpo-103-104-105.html#opal-read-tpo"><span class="std std-ref">OPAL_READ_TPO</span></a></p></td>
-<td><p>104</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-read-write-tpo-dpo-103-104-105.html#opal-get-dpo-status"><span class="std std-ref">OPAL_GET_DPO_STATUS</span></a></p></td>
-<td><p>105</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-old-i2c-request"><span class="std std-ref">OPAL_OLD_I2C_REQUEST</span></a></p></td>
-<td><p>106</p></td>
-<td><p>Introduced and
+release.</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-pci-fence-phb"><span class="std std-ref">OPAL_PCI_FENCE_PHB</span></a></td>
+<td>52</td>
+<td>Never</td>
+<td>&#160;</td>
+<td>Never
+implemented</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-reinit-53.html#opal-pci-reinit"><span class="std std-ref">OPAL_PCI_REINIT</span></a></td>
+<td>53</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-pci-mask-pe-error"><span class="std std-ref">OPAL_PCI_MASK_PE_ERROR</span></a></td>
+<td>54</td>
+<td>Never</td>
+<td>&#160;</td>
+<td>Never
+implemented</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-set-slot-led-status"><span class="std std-ref">OPAL_SET_SLOT_LED_STATUS</span></a></td>
+<td>55</td>
+<td>Never</td>
+<td>&#160;</td>
+<td>Never
+implemented</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-get-epow-status-56.html#opal-get-epow-status"><span class="std std-ref">OPAL_GET_EPOW_STATUS</span></a></td>
+<td>56</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-set-system-attention-led"><span class="std std-ref">OPAL_SET_SYSTEM_ATTENTION_LED</span></a></td>
+<td>57</td>
+<td>Never</td>
+<td>&#160;</td>
+<td>Never
+implemented</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-reserved1"><span class="std std-ref">OPAL_RESERVED1</span></a></td>
+<td>58</td>
+<td>Never</td>
+<td>&#160;</td>
+<td>Never
+implemented</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-reserved2"><span class="std std-ref">OPAL_RESERVED2</span></a></td>
+<td>59</td>
+<td>Never</td>
+<td>&#160;</td>
+<td>Never
+implemented</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-pci-next-error-60.html#opal-pci-next-error"><span class="std std-ref">OPAL_PCI_NEXT_ERROR</span></a></td>
+<td>60</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-eeh-freeze-status-23.html#opal-pci-eeh-freeze-status2"><span class="std std-ref">OPAL_PCI_EEH_FREEZE_STATUS2</span></a></td>
+<td>61</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>Removed, never
+used!</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-pci-poll-62.html#opal-pci-poll"><span class="std std-ref">OPAL_PCI_POLL</span></a></td>
+<td>62</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-msi-eoi-63.html#opal-pci-msi-eoi"><span class="std std-ref">OPAL_PCI_MSI_EOI</span></a></td>
+<td>63</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-pci-get-phb-diag-data2-64.html#opal-pci-get-phb-diag-data2"><span class="std std-ref">OPAL_PCI_GET_PHB_DIAG_DATA2</span></a></td>
+<td>64</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-xscom-read-write-65-66.html#opal-xscom-read"><span class="std std-ref">OPAL_XSCOM_READ</span></a></td>
+<td>65</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-xscom-read-write-65-66.html#opal-xscom-write"><span class="std std-ref">OPAL_XSCOM_WRITE</span></a></td>
+<td>66</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-lpc-read-write-67-68.html#opal-lpc-read"><span class="std std-ref">OPAL_LPC_READ</span></a></td>
+<td>67</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-lpc-read-write-67-68.html#opal-lpc-write"><span class="std std-ref">OPAL_LPC_WRITE</span></a></td>
+<td>68</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-start-return-cpu-41-69.html#opal-return-cpu"><span class="std std-ref">OPAL_RETURN_CPU</span></a></td>
+<td>69</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-reinit-cpus-70.html#opal-reinit-cpus"><span class="std std-ref">OPAL_REINIT_CPUS</span></a></td>
+<td>70</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-elog-71-72-73-74-75.html#opal-elog-read"><span class="std std-ref">OPAL_ELOG_READ</span></a></td>
+<td>71</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-elog-write"><span class="std std-ref">OPAL_ELOG_WRITE</span></a></td>
+<td>72</td>
+<td>N/A</td>
+<td>&#160;</td>
+<td>Currently
+unused.</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-elog-71-72-73-74-75.html#opal-elog-ack"><span class="std std-ref">OPAL_ELOG_ACK</span></a></td>
+<td>73</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-elog-71-72-73-74-75.html#opal-elog-resend"><span class="std std-ref">OPAL_ELOG_RESEND</span></a></td>
+<td>74</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-elog-71-72-73-74-75.html#opal-elog-size"><span class="std std-ref">OPAL_ELOG_SIZE</span></a></td>
+<td>75</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-code-update-76-77-78.html#opal-flash-validate"><span class="std std-ref">OPAL_FLASH_VALIDATE</span></a></td>
+<td>76</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-code-update-76-77-78.html#opal-flash-manage"><span class="std std-ref">OPAL_FLASH_MANAGE</span></a></td>
+<td>77</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-code-update-76-77-78.html#opal-flash-update"><span class="std std-ref">OPAL_FLASH_UPDATE</span></a></td>
+<td>78</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-resync-timebase-79.html#opal-resync-timebase"><span class="std std-ref">OPAL_RESYNC_TIMEBASE</span></a></td>
+<td>79</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-check-token-80.html#opal-check-token"><span class="std std-ref">OPAL_CHECK_TOKEN</span></a></td>
+<td>80</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-dump-81-82-83-84-94-101-102.html#opal-dump-init"><span class="std std-ref">OPAL_DUMP_INIT</span></a></td>
+<td>81</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-dump-81-82-83-84-94-101-102.html#opal-dump-info"><span class="std std-ref">OPAL_DUMP_INFO</span></a></td>
+<td>82</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-dump-81-82-83-84-94-101-102.html#opal-dump-read"><span class="std std-ref">OPAL_DUMP_READ</span></a></td>
+<td>83</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-dump-81-82-83-84-94-101-102.html#opal-dump-ack"><span class="std std-ref">OPAL_DUMP_ACK</span></a></td>
+<td>84</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-get-msg-85.html#opal-get-msg"><span class="std std-ref">OPAL_GET_MSG</span></a></td>
+<td>85</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-check-async-completion-86.html#opal-check-async-completion"><span class="std std-ref">OPAL_CHECK_ASYNC_COMPLETION</span></a></td>
+<td>86</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-sync-host-reboot-87.html#opal-sync-host-reboot"><span class="std std-ref">OPAL_SYNC_HOST_REBOOT</span></a></td>
+<td>87</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-sensor-read-88.html#opal-sensor-read"><span class="std std-ref">OPAL_SENSOR_READ</span></a></td>
+<td>88</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-param-89-90.html#opal-get-param"><span class="std std-ref">OPAL_GET_PARAM</span></a></td>
+<td>89</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-param-89-90.html#opal-set-param"><span class="std std-ref">OPAL_SET_PARAM</span></a></td>
+<td>90</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-dump-81-82-83-84-94-101-102.html#opal-dump-resend"><span class="std std-ref">OPAL_DUMP_RESEND</span></a></td>
+<td>91</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-elog-send"><span class="std std-ref">OPAL_ELOG_SEND</span></a></td>
+<td>92</td>
+<td>Never</td>
+<td>&#160;</td>
+<td>Never used</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-set-phb-capi-mode-93.html#opal-pci-set-phb-capi-mode"><span class="std std-ref">OPAL_PCI_SET_PHB_CAPI_MODE</span></a></td>
+<td>93</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-dump-81-82-83-84-94-101-102.html#opal-dump-info2"><span class="std std-ref">OPAL_DUMP_INFO2</span></a></td>
+<td>94</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-write-oppanel-async-95.html#opal-write-oppanel-async"><span class="std std-ref">OPAL_WRITE_OPPANEL_ASYNC</span></a></td>
+<td>95</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-pci-err-inject-96.html#opal-pci-err-inject"><span class="std std-ref">OPAL_PCI_ERR_INJECT</span></a></td>
+<td>96</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-eeh-freeze-set-97.html#opal-pci-eeh-freeze-set"><span class="std std-ref">OPAL_PCI_EEH_FREEZE_SET</span></a></td>
+<td>97</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-handle-hmi-98-166.html#opal-handle-hmi"><span class="std std-ref">OPAL_HANDLE_HMI</span></a></td>
+<td>98</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-config-cpu-idle-state-99.html#opal-config-cpu-idle-state"><span class="std std-ref">OPAL_CONFIG_CPU_IDLE_STATE</span></a></td>
+<td>99</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-slw-set-reg-100.html#opal-slw-set-reg"><span class="std std-ref">OPAL_SLW_SET_REG</span></a></td>
+<td>100</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-dump-81-82-83-84-94-101-102.html#opal-register-dump-region"><span class="std std-ref">OPAL_REGISTER_DUMP_REGION</span></a></td>
+<td>101</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-dump-81-82-83-84-94-101-102.html#opal-unregister-dump-region"><span class="std std-ref">OPAL_UNREGISTER_DUMP_REGION</span></a></td>
+<td>102</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-read-write-tpo-dpo-103-104-105.html#opal-write-tpo"><span class="std std-ref">OPAL_WRITE_TPO</span></a></td>
+<td>103</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-read-write-tpo-dpo-103-104-105.html#opal-read-tpo"><span class="std std-ref">OPAL_READ_TPO</span></a></td>
+<td>104</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-read-write-tpo-dpo-103-104-105.html#opal-get-dpo-status"><span class="std std-ref">OPAL_GET_DPO_STATUS</span></a></td>
+<td>105</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-old-i2c-request"><span class="std std-ref">OPAL_OLD_I2C_REQUEST</span></a></td>
+<td>106</td>
+<td>Introduced and
deprecated in
<a class="reference internal" href="../release-notes/skiboot-4.0.html#skiboot-4-0"><span class="std std-ref">skiboot 4.0</span></a>.
Should be completely
-unused.</p></td>
-<td></td>
-<td><p>Do not use.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-ipmi-send-recv-107-108.html#opal-ipmi-send"><span class="std std-ref">OPAL_IPMI_SEND</span></a></p></td>
-<td><p>107</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-4.0.html#skiboot-4-0"><span class="std std-ref">skiboot 4.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-ipmi-send-recv-107-108.html#opal-ipmi-recv"><span class="std std-ref">OPAL_IPMI_RECV</span></a></p></td>
-<td><p>108</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-4.0.html#skiboot-4-0"><span class="std std-ref">skiboot 4.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-i2c-request-109.html#opal-i2c-request"><span class="std std-ref">OPAL_I2C_REQUEST</span></a></p></td>
-<td><p>109</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-4.0.html#skiboot-4-0"><span class="std std-ref">skiboot 4.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-flash-110-111-112.html#opal-flash-read"><span class="std std-ref">OPAL_FLASH_READ</span></a></p></td>
-<td><p>110</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.0.html#skiboot-5-0"><span class="std std-ref">skiboot 5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-flash-110-111-112.html#opal-flash-write"><span class="std std-ref">OPAL_FLASH_WRITE</span></a></p></td>
-<td><p>111</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.0.html#skiboot-5-0"><span class="std std-ref">skiboot 5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-flash-110-111-112.html#opal-flash-erase"><span class="std std-ref">OPAL_FLASH_ERASE</span></a></p></td>
-<td><p>112</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.0.html#skiboot-5-0"><span class="std std-ref">skiboot 5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-prd-msg-113.html#opal-prd-msg"><span class="std std-ref">OPAL_PRD_MSG</span></a></p></td>
-<td><p>113</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.0.html#skiboot-5-0"><span class="std std-ref">skiboot 5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-led-get-set-114-115.html#opal-leds-get-indicator"><span class="std std-ref">OPAL_LEDS_GET_INDICATOR</span></a></p></td>
-<td><p>114</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.0.html#skiboot-5-0"><span class="std std-ref">skiboot 5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-led-get-set-114-115.html#opal-leds-set-indicator"><span class="std std-ref">OPAL_LEDS_SET_INDICATOR</span></a></p></td>
-<td><p>115</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.0.html#skiboot-5-0"><span class="std std-ref">skiboot 5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-cec-reboot-6-116.html#opal-cec-reboot2"><span class="std std-ref">OPAL_CEC_REBOOT2</span></a></p></td>
-<td><p>116</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-console-read-write-1-2.html#opal-console-flush"><span class="std std-ref">OPAL_CONSOLE_FLUSH</span></a></p></td>
-<td><p>117</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.1.13.html#skiboot-5-1-13"><span class="std std-ref">skiboot-5.1.13</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-get-device-tree-118.html#opal-get-device-tree"><span class="std std-ref">OPAL_GET_DEVICE_TREE</span></a></p></td>
-<td><p>118</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-get-presence-state-119.html#opal-pci-get-presence-state"><span class="std std-ref">OPAL_PCI_GET_PRESENCE_STATE</span></a></p></td>
-<td><p>119</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-pci-get-power-state-120.html#opal-pci-get-power-state"><span class="std std-ref">OPAL_PCI_GET_POWER_STATE</span></a></p></td>
-<td><p>120</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-set-power-state-121.html#opal-pci-set-power-state"><span class="std std-ref">OPAL_PCI_SET_POWER_STATE</span></a></p></td>
-<td><p>121</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-int-get-xirr-122.html#opal-int-get-xirr"><span class="std std-ref">OPAL_INT_GET_XIRR</span></a></p></td>
-<td><p>122</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-int-set-cppr-123.html#opal-int-set-cppr"><span class="std std-ref">OPAL_INT_SET_CPPR</span></a></p></td>
-<td><p>123</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-int-eoi-124.html#opal-int-eoi"><span class="std std-ref">OPAL_INT_EOI</span></a></p></td>
-<td><p>124</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-int-set-mfrr-125.html#opal-int-set-mfrr"><span class="std std-ref">OPAL_INT_SET_MFRR</span></a></p></td>
-<td><p>125</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-pci-tce-kill-126.html#opal-pci-tce-kill"><span class="std std-ref">OPAL_PCI_TCE_KILL</span></a></p></td>
-<td><p>126</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-nmmu-set-ptcr-127.html#opal-nmmu-set-ptcr"><span class="std std-ref">OPAL_NMMU_SET_PTCR</span></a></p></td>
-<td><p>127</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="../xive.html#opal-xive-reset"><span class="std std-ref">OPAL_XIVE_RESET</span></a></p></td>
-<td><p>128</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="../xive.html#opal-xive-get-irq-info"><span class="std std-ref">OPAL_XIVE_GET_IRQ_INFO</span></a></p></td>
-<td><p>129</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="../xive.html#opal-xive-get-irq-config"><span class="std std-ref">OPAL_XIVE_GET_IRQ_CONFIG</span></a></p></td>
-<td><p>130</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="../xive.html#opal-xive-set-irq-config"><span class="std std-ref">OPAL_XIVE_SET_IRQ_CONFIG</span></a></p></td>
-<td><p>131</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="../xive.html#opal-xive-get-queue-info"><span class="std std-ref">OPAL_XIVE_GET_QUEUE_INFO</span></a></p></td>
-<td><p>132</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="../xive.html#opal-xive-set-queue-info"><span class="std std-ref">OPAL_XIVE_SET_QUEUE_INFO</span></a></p></td>
-<td><p>133</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="../xive.html#opal-xive-donate-page"><span class="std std-ref">OPAL_XIVE_DONATE_PAGE</span></a></p></td>
-<td><p>134</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="../xive.html#opal-xive-allocate-vp-block"><span class="std std-ref">OPAL_XIVE_ALLOCATE_VP_BLOCK</span></a></p></td>
-<td><p>135</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="../xive.html#opal-xive-free-vp-block"><span class="std std-ref">OPAL_XIVE_FREE_VP_BLOCK</span></a></p></td>
-<td><p>136</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="../xive.html#opal-xive-get-vp-info"><span class="std std-ref">OPAL_XIVE_GET_VP_INFO</span></a></p></td>
-<td><p>137</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="../xive.html#opal-xive-set-vp-info"><span class="std std-ref">OPAL_XIVE_SET_VP_INFO</span></a></p></td>
-<td><p>138</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="../xive.html#opal-xive-allocate-irq"><span class="std std-ref">OPAL_XIVE_ALLOCATE_IRQ</span></a></p></td>
-<td><p>139</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="../xive.html#opal-xive-free-irq"><span class="std std-ref">OPAL_XIVE_FREE_IRQ</span></a></p></td>
-<td><p>140</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="../xive.html#opal-xive-sync"><span class="std std-ref">OPAL_XIVE_SYNC</span></a></p></td>
-<td><p>141</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="../xive.html#opal-xive-dump"><span class="std std-ref">OPAL_XIVE_DUMP</span></a></p></td>
-<td><p>142</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="../xive.html#opal-xive-get-queue-state"><span class="std std-ref">OPAL_XIVE_GET_QUEUE_STATE</span></a></p></td>
-<td><p>143</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-6.3.html#skiboot-6-3"><span class="std std-ref">skiboot-6.3</span></a></p></td>
-<td></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="../xive.html#opal-xive-set-queue-state"><span class="std std-ref">OPAL_XIVE_SET_QUEUE_STATE</span></a></p></td>
-<td><p>144</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-6.3.html#skiboot-6-3"><span class="std std-ref">skiboot-6.3</span></a></p></td>
-<td></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-signal-system-reset-145.html#opal-signal-system-reset"><span class="std std-ref">OPAL_SIGNAL_SYSTEM_RESET</span></a></p></td>
-<td><p>145</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-npu2-146-147-148.html#opal-npu-init-context"><span class="std std-ref">OPAL_NPU_INIT_CONTEXT</span></a></p></td>
-<td><p>146</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-npu2-146-147-148.html#opal-npu-destroy-context"><span class="std std-ref">OPAL_NPU_DESTROY_CONTEXT</span></a></p></td>
-<td><p>147</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-npu2-146-147-148.html#opal-npu-map-lpar"><span class="std std-ref">OPAL_NPU_MAP_LPAR</span></a></p></td>
-<td><p>148</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-imc-counters.html#opal-imc-counters-init"><span class="std std-ref">OPAL_IMC_COUNTERS_INIT</span></a></p></td>
-<td><p>149</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.7.html#skiboot-5-7"><span class="std std-ref">skiboot-5.7</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-imc-counters.html#opal-imc-counters-start"><span class="std std-ref">OPAL_IMC_COUNTERS_START</span></a></p></td>
-<td><p>150</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.7.html#skiboot-5-7"><span class="std std-ref">skiboot-5.7</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-imc-counters.html#opal-imc-counters-stop"><span class="std std-ref">OPAL_IMC_COUNTERS_STOP</span></a></p></td>
-<td><p>151</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.7.html#skiboot-5-7"><span class="std std-ref">skiboot-5.7</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-powercap.html#opal-get-powercap"><span class="std std-ref">OPAL_GET_POWERCAP</span></a></p></td>
-<td><p>152</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-powercap.html#opal-set-powercap"><span class="std std-ref">OPAL_SET_POWERCAP</span></a></p></td>
-<td><p>153</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-power-shift-ratio.html#opal-get-power-shift-ratio"><span class="std std-ref">OPAL_GET_POWER_SHIFT_RATIO</span></a></p></td>
-<td><p>154</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-power-shift-ratio.html#opal-set-power-shift-ratio"><span class="std std-ref">OPAL_SET_POWER_SHIFT_RATIO</span></a></p></td>
-<td><p>155</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-sensor-group-enable-clear-163-156.html#opal-sensor-group-clear"><span class="std std-ref">OPAL_SENSOR_GROUP_CLEAR</span></a></p></td>
-<td><p>156</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-set-p2p-157.html#opal-pci-set-p2p"><span class="std std-ref">OPAL_PCI_SET_P2P</span></a></p></td>
-<td><p>157</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-quiesce-158.html#opal-quiesce"><span class="std std-ref">OPAL_QUIESCE</span></a></p></td>
-<td><p>158</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.10.html#skiboot-5-10"><span class="std std-ref">skiboot-5.10</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-npu2-opencapi-159-160-161-171-172.html#opal-npu-spa-setup"><span class="std std-ref">OPAL_NPU_SPA_SETUP</span></a></p></td>
-<td><p>159</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.11.html#skiboot-5-11"><span class="std std-ref">skiboot-5.11</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-npu2-opencapi-159-160-161-171-172.html#opal-npu-spa-clear-cache"><span class="std std-ref">OPAL_NPU_SPA_CLEAR_CACHE</span></a></p></td>
-<td><p>160</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.11.html#skiboot-5-11"><span class="std std-ref">skiboot-5.11</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-npu2-opencapi-159-160-161-171-172.html#opal-npu-tl-set"><span class="std std-ref">OPAL_NPU_TL_SET</span></a></p></td>
-<td><p>161</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.11.html#skiboot-5-11"><span class="std std-ref">skiboot-5.11</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-sensor-read-88.html#opal-sensor-read-u64"><span class="std std-ref">OPAL_SENSOR_READ_U64</span></a></p></td>
-<td><p>162</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.10.html#skiboot-5-10"><span class="std std-ref">skiboot-5.10</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-sensor-group-enable-clear-163-156.html#opal-sensor-group-enable"><span class="std std-ref">OPAL_SENSOR_GROUP_ENABLE</span></a></p></td>
-<td><p>163</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.10.html#skiboot-5-10"><span class="std std-ref">skiboot-5.10</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-pci-get-set-pbcq-tunnel-bar-164-165.html#opal-pci-get-pbcq-tunnel-bar"><span class="std std-ref">OPAL_PCI_GET_PBCQ_TUNNEL_BAR</span></a></p></td>
-<td><p>164</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.11.html#skiboot-5-11"><span class="std std-ref">skiboot-5.11</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-get-set-pbcq-tunnel-bar-164-165.html#opal-pci-set-pbcq-tunnel-bar"><span class="std std-ref">OPAL_PCI_SET_PBCQ_TUNNEL_BAR</span></a></p></td>
-<td><p>165</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.11.html#skiboot-5-11"><span class="std std-ref">skiboot-5.11</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-handle-hmi-98-166.html#opal-handle-hmi2"><span class="std std-ref">OPAL_HANDLE_HMI2</span></a></p></td>
-<td><p>166</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-6.0.html#skiboot-6-0"><span class="std std-ref">skiboot-6.0</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal_nx_coproc_init-167.html#opal-nx-coproc-init"><span class="std std-ref">OPAL_NX_COPROC_INIT</span></a></p></td>
-<td><p>167</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-6.1.html#skiboot-6-1"><span class="std std-ref">skiboot-6.1</span></a>
-<a class="reference internal" href="../release-notes/skiboot-6.0.5.html#skiboot-6-0-5"><span class="std std-ref">skiboot-6.0.5</span></a></p></td>
-<td></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-npu2-get-set-relaxed-order-168-169.html#opal-npu-set-relaxed-order"><span class="std std-ref">OPAL_NPU_SET_RELAXED_ORDER</span></a></p></td>
-<td><p>168</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-6.2.html#skiboot-6-2"><span class="std std-ref">skiboot-6.2</span></a></p></td>
-<td></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-npu2-get-set-relaxed-order-168-169.html#opal-npu-get-relaxed-order"><span class="std std-ref">OPAL_NPU_GET_RELAXED_ORDER</span></a></p></td>
-<td><p>169</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-6.2.html#skiboot-6-2"><span class="std std-ref">skiboot-6.2</span></a></p></td>
-<td></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="../xive.html#opal-xive-get-vp-state"><span class="std std-ref">OPAL_XIVE_GET_VP_STATE</span></a></p></td>
-<td><p>170</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-6.3.html#skiboot-6-3"><span class="std std-ref">skiboot-6.3</span></a></p></td>
-<td></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-npu2-opencapi-159-160-161-171-172.html#opal-npu-mem-alloc"><span class="std std-ref">OPAL_NPU_MEM_ALLOC</span></a></p></td>
-<td><p>171</p></td>
-<td><p>Future, likely 6.4</p></td>
-<td></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-npu2-opencapi-159-160-161-171-172.html#opal-npu-mem-release"><span class="std std-ref">OPAL_NPU_MEM_RELEASE</span></a></p></td>
-<td><p>172</p></td>
-<td><p>Future, likely 6.4</p></td>
-<td></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-mpipl-173-174.html#opal-mpipl-update"><span class="std std-ref">OPAL_MPIPL_UPDATE</span></a></p></td>
-<td><p>173</p></td>
-<td><p>Future, likely 6.4</p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-mpipl-173-174.html#opal-mpipl-register-tag"><span class="std std-ref">OPAL_MPIPL_REGISTER_TAG</span></a></p></td>
-<td><p>174</p></td>
-<td><p>Future, likely 6.4</p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-mpipl-173-174.html#opal-mpipl-query-tag"><span class="std std-ref">OPAL_MPIPL_QUERY_TAG</span></a></p></td>
-<td><p>175</p></td>
-<td><p>Future, likely 6.4</p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="opal-phb-flag-set-get-179-180.html#opal-phb-set-option"><span class="std std-ref">OPAL_PHB_SET_OPTION</span></a></p></td>
-<td><p>179</p></td>
-<td><p>Future, likely 6.6</p></td>
-<td><p>POWER9</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-phb-flag-set-get-179-180.html#opal-phb-get-option"><span class="std std-ref">OPAL_PHB_GET_OPTION</span></a></p></td>
-<td><p>180</p></td>
-<td><p>Future, likely 6.6</p></td>
-<td><p>POWER9</p></td>
-<td></td>
+unused.</td>
+<td>&#160;</td>
+<td>Do not use.</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-ipmi-send-recv-107-108.html#opal-ipmi-send"><span class="std std-ref">OPAL_IPMI_SEND</span></a></td>
+<td>107</td>
+<td><a class="reference internal" href="../release-notes/skiboot-4.0.html#skiboot-4-0"><span class="std std-ref">skiboot 4.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-ipmi-send-recv-107-108.html#opal-ipmi-recv"><span class="std std-ref">OPAL_IPMI_RECV</span></a></td>
+<td>108</td>
+<td><a class="reference internal" href="../release-notes/skiboot-4.0.html#skiboot-4-0"><span class="std std-ref">skiboot 4.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-i2c-request-109.html#opal-i2c-request"><span class="std std-ref">OPAL_I2C_REQUEST</span></a></td>
+<td>109</td>
+<td><a class="reference internal" href="../release-notes/skiboot-4.0.html#skiboot-4-0"><span class="std std-ref">skiboot 4.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-flash-110-111-112.html#opal-flash-read"><span class="std std-ref">OPAL_FLASH_READ</span></a></td>
+<td>110</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.0.html#skiboot-5-0"><span class="std std-ref">skiboot 5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-flash-110-111-112.html#opal-flash-write"><span class="std std-ref">OPAL_FLASH_WRITE</span></a></td>
+<td>111</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.0.html#skiboot-5-0"><span class="std std-ref">skiboot 5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-flash-110-111-112.html#opal-flash-erase"><span class="std std-ref">OPAL_FLASH_ERASE</span></a></td>
+<td>112</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.0.html#skiboot-5-0"><span class="std std-ref">skiboot 5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-prd-msg-113.html#opal-prd-msg"><span class="std std-ref">OPAL_PRD_MSG</span></a></td>
+<td>113</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.0.html#skiboot-5-0"><span class="std std-ref">skiboot 5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-led-get-set-114-115.html#opal-leds-get-indicator"><span class="std std-ref">OPAL_LEDS_GET_INDICATOR</span></a></td>
+<td>114</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.0.html#skiboot-5-0"><span class="std std-ref">skiboot 5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-led-get-set-114-115.html#opal-leds-set-indicator"><span class="std std-ref">OPAL_LEDS_SET_INDICATOR</span></a></td>
+<td>115</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.0.html#skiboot-5-0"><span class="std std-ref">skiboot 5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-cec-reboot-6-116.html#opal-cec-reboot2"><span class="std std-ref">OPAL_CEC_REBOOT2</span></a></td>
+<td>116</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-console-read-write-1-2.html#opal-console-flush"><span class="std std-ref">OPAL_CONSOLE_FLUSH</span></a></td>
+<td>117</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.1.13.html#skiboot-5-1-13"><span class="std std-ref">skiboot-5.1.13</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-get-device-tree-118.html#opal-get-device-tree"><span class="std std-ref">OPAL_GET_DEVICE_TREE</span></a></td>
+<td>118</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-get-presence-state-119.html#opal-pci-get-presence-state"><span class="std std-ref">OPAL_PCI_GET_PRESENCE_STATE</span></a></td>
+<td>119</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-pci-get-power-state-120.html#opal-pci-get-power-state"><span class="std std-ref">OPAL_PCI_GET_POWER_STATE</span></a></td>
+<td>120</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-set-power-state-121.html#opal-pci-set-power-state"><span class="std std-ref">OPAL_PCI_SET_POWER_STATE</span></a></td>
+<td>121</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-int-get-xirr-122.html#opal-int-get-xirr"><span class="std std-ref">OPAL_INT_GET_XIRR</span></a></td>
+<td>122</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-int-set-cppr-123.html#opal-int-set-cppr"><span class="std std-ref">OPAL_INT_SET_CPPR</span></a></td>
+<td>123</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-int-eoi-124.html#opal-int-eoi"><span class="std std-ref">OPAL_INT_EOI</span></a></td>
+<td>124</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-int-set-mfrr-125.html#opal-int-set-mfrr"><span class="std std-ref">OPAL_INT_SET_MFRR</span></a></td>
+<td>125</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-pci-tce-kill-126.html#opal-pci-tce-kill"><span class="std std-ref">OPAL_PCI_TCE_KILL</span></a></td>
+<td>126</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.3.0.html#skiboot-5-3-0"><span class="std std-ref">skiboot-5.3.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-nmmu-set-ptcr-127.html#opal-nmmu-set-ptcr"><span class="std std-ref">OPAL_NMMU_SET_PTCR</span></a></td>
+<td>127</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="../xive.html#opal-xive-reset"><span class="std std-ref">OPAL_XIVE_RESET</span></a></td>
+<td>128</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="../xive.html#opal-xive-get-irq-info"><span class="std std-ref">OPAL_XIVE_GET_IRQ_INFO</span></a></td>
+<td>129</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="../xive.html#opal-xive-get-irq-config"><span class="std std-ref">OPAL_XIVE_GET_IRQ_CONFIG</span></a></td>
+<td>130</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="../xive.html#opal-xive-set-irq-config"><span class="std std-ref">OPAL_XIVE_SET_IRQ_CONFIG</span></a></td>
+<td>131</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="../xive.html#opal-xive-get-queue-info"><span class="std std-ref">OPAL_XIVE_GET_QUEUE_INFO</span></a></td>
+<td>132</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="../xive.html#opal-xive-set-queue-info"><span class="std std-ref">OPAL_XIVE_SET_QUEUE_INFO</span></a></td>
+<td>133</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="../xive.html#opal-xive-donate-page"><span class="std std-ref">OPAL_XIVE_DONATE_PAGE</span></a></td>
+<td>134</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="../xive.html#opal-xive-allocate-vp-block"><span class="std std-ref">OPAL_XIVE_ALLOCATE_VP_BLOCK</span></a></td>
+<td>135</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="../xive.html#opal-xive-free-vp-block"><span class="std std-ref">OPAL_XIVE_FREE_VP_BLOCK</span></a></td>
+<td>136</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="../xive.html#opal-xive-get-vp-info"><span class="std std-ref">OPAL_XIVE_GET_VP_INFO</span></a></td>
+<td>137</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="../xive.html#opal-xive-set-vp-info"><span class="std std-ref">OPAL_XIVE_SET_VP_INFO</span></a></td>
+<td>138</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="../xive.html#opal-xive-allocate-irq"><span class="std std-ref">OPAL_XIVE_ALLOCATE_IRQ</span></a></td>
+<td>139</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="../xive.html#opal-xive-free-irq"><span class="std std-ref">OPAL_XIVE_FREE_IRQ</span></a></td>
+<td>140</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="../xive.html#opal-xive-sync"><span class="std std-ref">OPAL_XIVE_SYNC</span></a></td>
+<td>141</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="../xive.html#opal-xive-dump"><span class="std std-ref">OPAL_XIVE_DUMP</span></a></td>
+<td>142</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="../xive.html#opal-xive-get-queue-state"><span class="std std-ref">OPAL_XIVE_GET_QUEUE_STATE</span></a></td>
+<td>143</td>
+<td><a class="reference internal" href="../release-notes/skiboot-6.3.html#skiboot-6-3"><span class="std std-ref">skiboot-6.3</span></a></td>
+<td>&#160;</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="../xive.html#opal-xive-set-queue-state"><span class="std std-ref">OPAL_XIVE_SET_QUEUE_STATE</span></a></td>
+<td>144</td>
+<td><a class="reference internal" href="../release-notes/skiboot-6.3.html#skiboot-6-3"><span class="std std-ref">skiboot-6.3</span></a></td>
+<td>&#160;</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-signal-system-reset-145.html#opal-signal-system-reset"><span class="std std-ref">OPAL_SIGNAL_SYSTEM_RESET</span></a></td>
+<td>145</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-npu2-146-147-148.html#opal-npu-init-context"><span class="std std-ref">OPAL_NPU_INIT_CONTEXT</span></a></td>
+<td>146</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-npu2-146-147-148.html#opal-npu-destroy-context"><span class="std std-ref">OPAL_NPU_DESTROY_CONTEXT</span></a></td>
+<td>147</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-npu2-146-147-148.html#opal-npu-map-lpar"><span class="std std-ref">OPAL_NPU_MAP_LPAR</span></a></td>
+<td>148</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-imc-counters.html#opal-imc-counters-init"><span class="std std-ref">OPAL_IMC_COUNTERS_INIT</span></a></td>
+<td>149</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.7.html#skiboot-5-7"><span class="std std-ref">skiboot-5.7</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-imc-counters.html#opal-imc-counters-start"><span class="std std-ref">OPAL_IMC_COUNTERS_START</span></a></td>
+<td>150</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.7.html#skiboot-5-7"><span class="std std-ref">skiboot-5.7</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-imc-counters.html#opal-imc-counters-stop"><span class="std std-ref">OPAL_IMC_COUNTERS_STOP</span></a></td>
+<td>151</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.7.html#skiboot-5-7"><span class="std std-ref">skiboot-5.7</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-powercap.html#opal-get-powercap"><span class="std std-ref">OPAL_GET_POWERCAP</span></a></td>
+<td>152</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-powercap.html#opal-set-powercap"><span class="std std-ref">OPAL_SET_POWERCAP</span></a></td>
+<td>153</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-power-shift-ratio.html#opal-get-power-shift-ratio"><span class="std std-ref">OPAL_GET_POWER_SHIFT_RATIO</span></a></td>
+<td>154</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-power-shift-ratio.html#opal-set-power-shift-ratio"><span class="std std-ref">OPAL_SET_POWER_SHIFT_RATIO</span></a></td>
+<td>155</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-sensor-group-enable-clear-163-156.html#opal-sensor-group-clear"><span class="std std-ref">OPAL_SENSOR_GROUP_CLEAR</span></a></td>
+<td>156</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-set-p2p-157.html#opal-pci-set-p2p"><span class="std std-ref">OPAL_PCI_SET_P2P</span></a></td>
+<td>157</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-quiesce-158.html#opal-quiesce"><span class="std std-ref">OPAL_QUIESCE</span></a></td>
+<td>158</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.10.html#skiboot-5-10"><span class="std std-ref">skiboot-5.10</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-npu2-opencapi-159-160-161-171-172.html#opal-npu-spa-setup"><span class="std std-ref">OPAL_NPU_SPA_SETUP</span></a></td>
+<td>159</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.11.html#skiboot-5-11"><span class="std std-ref">skiboot-5.11</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-npu2-opencapi-159-160-161-171-172.html#opal-npu-spa-clear-cache"><span class="std std-ref">OPAL_NPU_SPA_CLEAR_CACHE</span></a></td>
+<td>160</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.11.html#skiboot-5-11"><span class="std std-ref">skiboot-5.11</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-npu2-opencapi-159-160-161-171-172.html#opal-npu-tl-set"><span class="std std-ref">OPAL_NPU_TL_SET</span></a></td>
+<td>161</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.11.html#skiboot-5-11"><span class="std std-ref">skiboot-5.11</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-sensor-read-88.html#opal-sensor-read-u64"><span class="std std-ref">OPAL_SENSOR_READ_U64</span></a></td>
+<td>162</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.10.html#skiboot-5-10"><span class="std std-ref">skiboot-5.10</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-sensor-group-enable-clear-163-156.html#opal-sensor-group-enable"><span class="std std-ref">OPAL_SENSOR_GROUP_ENABLE</span></a></td>
+<td>163</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.10.html#skiboot-5-10"><span class="std std-ref">skiboot-5.10</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-pci-get-set-pbcq-tunnel-bar-164-165.html#opal-pci-get-pbcq-tunnel-bar"><span class="std std-ref">OPAL_PCI_GET_PBCQ_TUNNEL_BAR</span></a></td>
+<td>164</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.11.html#skiboot-5-11"><span class="std std-ref">skiboot-5.11</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-get-set-pbcq-tunnel-bar-164-165.html#opal-pci-set-pbcq-tunnel-bar"><span class="std std-ref">OPAL_PCI_SET_PBCQ_TUNNEL_BAR</span></a></td>
+<td>165</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.11.html#skiboot-5-11"><span class="std std-ref">skiboot-5.11</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-handle-hmi-98-166.html#opal-handle-hmi2"><span class="std std-ref">OPAL_HANDLE_HMI2</span></a></td>
+<td>166</td>
+<td><a class="reference internal" href="../release-notes/skiboot-6.0.html#skiboot-6-0"><span class="std std-ref">skiboot-6.0</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal_nx_coproc_init-167.html#opal-nx-coproc-init"><span class="std std-ref">OPAL_NX_COPROC_INIT</span></a></td>
+<td>167</td>
+<td><a class="reference internal" href="../release-notes/skiboot-6.1.html#skiboot-6-1"><span class="std std-ref">skiboot-6.1</span></a>
+<a class="reference internal" href="../release-notes/skiboot-6.0.5.html#skiboot-6-0-5"><span class="std std-ref">skiboot-6.0.5</span></a></td>
+<td>&#160;</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-npu2-get-set-relaxed-order-168-169.html#opal-npu-set-relaxed-order"><span class="std std-ref">OPAL_NPU_SET_RELAXED_ORDER</span></a></td>
+<td>168</td>
+<td><a class="reference internal" href="../release-notes/skiboot-6.2.html#skiboot-6-2"><span class="std std-ref">skiboot-6.2</span></a></td>
+<td>&#160;</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-npu2-get-set-relaxed-order-168-169.html#opal-npu-get-relaxed-order"><span class="std std-ref">OPAL_NPU_GET_RELAXED_ORDER</span></a></td>
+<td>169</td>
+<td><a class="reference internal" href="../release-notes/skiboot-6.2.html#skiboot-6-2"><span class="std std-ref">skiboot-6.2</span></a></td>
+<td>&#160;</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="../xive.html#opal-xive-get-vp-state"><span class="std std-ref">OPAL_XIVE_GET_VP_STATE</span></a></td>
+<td>170</td>
+<td><a class="reference internal" href="../release-notes/skiboot-6.3.html#skiboot-6-3"><span class="std std-ref">skiboot-6.3</span></a></td>
+<td>&#160;</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-npu2-opencapi-159-160-161-171-172.html#opal-npu-mem-alloc"><span class="std std-ref">OPAL_NPU_MEM_ALLOC</span></a></td>
+<td>171</td>
+<td>Future, likely 6.4</td>
+<td>&#160;</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-npu2-opencapi-159-160-161-171-172.html#opal-npu-mem-release"><span class="std std-ref">OPAL_NPU_MEM_RELEASE</span></a></td>
+<td>172</td>
+<td>Future, likely 6.4</td>
+<td>&#160;</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-mpipl-173-174.html#opal-mpipl-update"><span class="std std-ref">OPAL_MPIPL_UPDATE</span></a></td>
+<td>173</td>
+<td>Future, likely 6.4</td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-mpipl-173-174.html#opal-mpipl-register-tag"><span class="std std-ref">OPAL_MPIPL_REGISTER_TAG</span></a></td>
+<td>174</td>
+<td>Future, likely 6.4</td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-mpipl-173-174.html#opal-mpipl-query-tag"><span class="std std-ref">OPAL_MPIPL_QUERY_TAG</span></a></td>
+<td>175</td>
+<td>Future, likely 6.4</td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="opal-phb-flag-set-get-179-180.html#opal-phb-set-option"><span class="std std-ref">OPAL_PHB_SET_OPTION</span></a></td>
+<td>179</td>
+<td>Future, likely 6.6</td>
+<td>POWER9</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-phb-flag-set-get-179-180.html#opal-phb-get-option"><span class="std std-ref">OPAL_PHB_GET_OPTION</span></a></td>
+<td>180</td>
+<td>Future, likely 6.6</td>
+<td>POWER9</td>
+<td>&#160;</td>
</tr>
</tbody>
</table>
@@ -1285,121 +1286,121 @@ unused.</p></td>
<h2>Removed Calls<a class="headerlink" href="#removed-calls" title="Permalink to this headline">¶</a></h2>
<p>Under <strong>very</strong> specific and careful circumstances, an OPAL call has been
removed and no longer supported.</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 46%" />
-<col style="width: 7%" />
-<col style="width: 23%" />
-<col style="width: 23%" />
+<col width="46%" />
+<col width="7%" />
+<col width="23%" />
+<col width="23%" />
</colgroup>
-<tbody>
-<tr class="row-odd"><td><p>Name</p></td>
-<td><p>API
-Token</p></td>
-<td><p>Introduced</p></td>
-<td><p>Removed</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-get-completion-token-status"><span class="std std-ref">OPAL_GET_COMPLETION_TOKEN_STATUS</span></a></p></td>
-<td><p>21</p></td>
-<td><p>Never</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-pci-shpc"><span class="std std-ref">OPAL_PCI_SHPC</span></a></p></td>
-<td><p>24</p></td>
-<td><p>Never</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-pci-set-phb-table-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TABLE_MEMORY</span></a></p></td>
-<td><p>30</p></td>
-<td><p>Never</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-pci-get-xive-reissue"><span class="std std-ref">OPAL_PCI_GET_XIVE_REISSUE</span></a></p></td>
-<td><p>35</p></td>
-<td><p>Never</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-pci-get-xive-reissue"><span class="std std-ref">OPAL_PCI_GET_XIVE_REISSUE</span></a></p></td>
-<td><p>36</p></td>
-<td><p>Never</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-pci-fence-phb"><span class="std std-ref">OPAL_PCI_FENCE_PHB</span></a></p></td>
-<td><p>52</p></td>
-<td><p>Never</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-pci-mask-pe-error"><span class="std std-ref">OPAL_PCI_MASK_PE_ERROR</span></a></p></td>
-<td><p>54</p></td>
-<td><p>Never</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-set-slot-led-status"><span class="std std-ref">OPAL_SET_SLOT_LED_STATUS</span></a></p></td>
-<td><p>55</p></td>
-<td><p>Never</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-set-system-attention-led"><span class="std std-ref">OPAL_SET_SYSTEM_ATTENTION_LED</span></a></p></td>
-<td><p>57</p></td>
-<td><p>Never</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-reserved1"><span class="std std-ref">OPAL_RESERVED1</span></a></p></td>
-<td><p>58</p></td>
-<td><p>Never</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-reserved2"><span class="std std-ref">OPAL_RESERVED2</span></a></p></td>
-<td><p>59</p></td>
-<td><p>Never</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-elog-send"><span class="std std-ref">OPAL_ELOG_SEND</span></a></p></td>
-<td><p>92</p></td>
-<td><p>pre-v1.0</p></td>
-<td><p>pre-v1.0</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-pci-get-phb-diag-data"><span class="std std-ref">OPAL_PCI_GET_PHB_DIAG_DATA</span></a></p></td>
-<td><p>51</p></td>
-<td><p>pre-v1.0</p></td>
-<td><p>pre-v1.0, with last
+<tbody valign="top">
+<tr class="row-odd"><td>Name</td>
+<td>API
+Token</td>
+<td>Introduced</td>
+<td>Removed</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-get-completion-token-status"><span class="std std-ref">OPAL_GET_COMPLETION_TOKEN_STATUS</span></a></td>
+<td>21</td>
+<td>Never</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-pci-shpc"><span class="std std-ref">OPAL_PCI_SHPC</span></a></td>
+<td>24</td>
+<td>Never</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-pci-set-phb-table-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TABLE_MEMORY</span></a></td>
+<td>30</td>
+<td>Never</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-pci-get-xive-reissue"><span class="std std-ref">OPAL_PCI_GET_XIVE_REISSUE</span></a></td>
+<td>35</td>
+<td>Never</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-pci-get-xive-reissue"><span class="std std-ref">OPAL_PCI_GET_XIVE_REISSUE</span></a></td>
+<td>36</td>
+<td>Never</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-pci-fence-phb"><span class="std std-ref">OPAL_PCI_FENCE_PHB</span></a></td>
+<td>52</td>
+<td>Never</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-pci-mask-pe-error"><span class="std std-ref">OPAL_PCI_MASK_PE_ERROR</span></a></td>
+<td>54</td>
+<td>Never</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-set-slot-led-status"><span class="std std-ref">OPAL_SET_SLOT_LED_STATUS</span></a></td>
+<td>55</td>
+<td>Never</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-set-system-attention-led"><span class="std std-ref">OPAL_SET_SYSTEM_ATTENTION_LED</span></a></td>
+<td>57</td>
+<td>Never</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-reserved1"><span class="std std-ref">OPAL_RESERVED1</span></a></td>
+<td>58</td>
+<td>Never</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-reserved2"><span class="std std-ref">OPAL_RESERVED2</span></a></td>
+<td>59</td>
+<td>Never</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-elog-send"><span class="std std-ref">OPAL_ELOG_SEND</span></a></td>
+<td>92</td>
+<td>pre-v1.0</td>
+<td>pre-v1.0</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-pci-get-phb-diag-data"><span class="std std-ref">OPAL_PCI_GET_PHB_DIAG_DATA</span></a></td>
+<td>51</td>
+<td>pre-v1.0</td>
+<td>pre-v1.0, with last
remnants removed in
-<a class="reference internal" href="../release-notes/skiboot-6.4.html#skiboot-6-4"><span class="std std-ref">skiboot-6.4</span></a></p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-get-xive-source"><span class="std std-ref">OPAL_GET_XIVE_SOURCE</span></a></p></td>
-<td><p>38</p></td>
-<td><p>v1.0 Initial Release</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-6.4.html#skiboot-6-4"><span class="std std-ref">skiboot-6.4</span></a></p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-write-oppanel"><span class="std std-ref">OPAL_WRITE_OPPANEL</span></a></p></td>
-<td><p>43</p></td>
-<td><p>pre-v1.0</p></td>
-<td><p>pre-v1.0</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-old-i2c-request"><span class="std std-ref">OPAL_OLD_I2C_REQUEST</span></a></p></td>
-<td><p>106</p></td>
-<td><p>v4.0</p></td>
-<td><p>v4.0</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-register-opal-exception-handler"><span class="std std-ref">OPAL_REGISTER_OPAL_EXCEPTION_HANDLER</span></a></p></td>
-<td><p>22</p></td>
-<td><p>v1.0 Initial Release</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.0.html#skiboot-5-0"><span class="std std-ref">skiboot 5.0</span></a></p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-pci-set-hub-tce-memory"><span class="std std-ref">OPAL_PCI_SET_HUB_TCE_MEMORY</span></a></p></td>
-<td><p>11</p></td>
-<td><p>pre-v1.0</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.2.0.html#skiboot-5-2-0"><span class="std std-ref">skiboot-5.2.0</span></a></p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-pci-set-phb-tce-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TCE_MEMORY</span></a></p></td>
-<td><p>12</p></td>
-<td><p>pre-v1.0</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.2.0.html#skiboot-5-2-0"><span class="std std-ref">skiboot-5.2.0</span></a></p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="opal-pci-eeh-freeze-status-23.html#opal-pci-eeh-freeze-status2"><span class="std std-ref">OPAL_PCI_EEH_FREEZE_STATUS2</span></a></p></td>
-<td><p>61</p></td>
-<td><p>v1.0 Initial Release</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-6.4.html#skiboot-6-4"><span class="std std-ref">skiboot-6.4</span></a></p></td>
+<a class="reference internal" href="../release-notes/skiboot-6.4.html#skiboot-6-4"><span class="std std-ref">skiboot-6.4</span></a></td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-get-xive-source"><span class="std std-ref">OPAL_GET_XIVE_SOURCE</span></a></td>
+<td>38</td>
+<td>v1.0 Initial Release</td>
+<td><a class="reference internal" href="../release-notes/skiboot-6.4.html#skiboot-6-4"><span class="std std-ref">skiboot-6.4</span></a></td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-write-oppanel"><span class="std std-ref">OPAL_WRITE_OPPANEL</span></a></td>
+<td>43</td>
+<td>pre-v1.0</td>
+<td>pre-v1.0</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-old-i2c-request"><span class="std std-ref">OPAL_OLD_I2C_REQUEST</span></a></td>
+<td>106</td>
+<td>v4.0</td>
+<td>v4.0</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-register-opal-exception-handler"><span class="std std-ref">OPAL_REGISTER_OPAL_EXCEPTION_HANDLER</span></a></td>
+<td>22</td>
+<td>v1.0 Initial Release</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.0.html#skiboot-5-0"><span class="std std-ref">skiboot 5.0</span></a></td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-pci-set-hub-tce-memory"><span class="std std-ref">OPAL_PCI_SET_HUB_TCE_MEMORY</span></a></td>
+<td>11</td>
+<td>pre-v1.0</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.2.0.html#skiboot-5-2-0"><span class="std std-ref">skiboot-5.2.0</span></a></td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-pci-set-phb-tce-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TCE_MEMORY</span></a></td>
+<td>12</td>
+<td>pre-v1.0</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.2.0.html#skiboot-5-2-0"><span class="std std-ref">skiboot-5.2.0</span></a></td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="opal-pci-eeh-freeze-status-23.html#opal-pci-eeh-freeze-status2"><span class="std std-ref">OPAL_PCI_EEH_FREEZE_STATUS2</span></a></td>
+<td>61</td>
+<td>v1.0 Initial Release</td>
+<td><a class="reference internal" href="../release-notes/skiboot-6.4.html#skiboot-6-4"><span class="std std-ref">skiboot-6.4</span></a></td>
</tr>
</tbody>
</table>
@@ -1552,7 +1553,6 @@ and bring-up purposes.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -1594,7 +1594,7 @@ and bring-up purposes.</p>
</ul>
<h4>Previous topic</h4>
- <p class="topless"><a href="../device-tree/ibm%2Cpowerpc-cpu-features/design.html"
+ <p class="topless"><a href="../device-tree/ibm,powerpc-cpu-features/design.html"
title="previous chapter">ibm,powerpc-cpu-features Design</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="opal-cec-power-down-5.html"
@@ -1607,15 +1607,17 @@ and bring-up purposes.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -1630,16 +1632,15 @@ and bring-up purposes.</p>
<a href="opal-cec-power-down-5.html" title="OPAL_CEC_POWER_DOWN"
>next</a> |</li>
<li class="right" >
- <a href="../device-tree/ibm%2Cpowerpc-cpu-features/design.html" title="ibm,powerpc-cpu-features Design"
+ <a href="../device-tree/ibm,powerpc-cpu-features/design.html" title="ibm,powerpc-cpu-features Design"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL API Documentation</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-cec-power-down-5.html b/doc/opal-api/opal-cec-power-down-5.html
index 4a51a79..2f8aa87 100644
--- a/doc/opal-api/opal-cec-power-down-5.html
+++ b/doc/opal-api/opal-cec-power-down-5.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_CEC_POWER_DOWN &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_CEC_POWER_DOWN &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="index.html" title="OPAL API Documentation"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_CEC_POWER_DOWN</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -69,11 +70,11 @@ should be called like the example code below:</p>
<div class="section" id="arguments">
<h2>Arguments<a class="headerlink" href="#arguments" title="Permalink to this headline">¶</a></h2>
<p><cite>uint64 request</cite> values as follows:</p>
-<dl class="simple">
-<dt>0</dt><dd><p>Power down normally</p>
-</dd>
-<dt>1</dt><dd><p>Power down immediately</p>
-</dd>
+<dl class="docutils">
+<dt>0</dt>
+<dd>Power down normally</dd>
+<dt>1</dt>
+<dd>Power down immediately</dd>
</dl>
<p>This OPAL call requests OPAL to power down the system. The exact difference
between a normal and immediate shutdown is platform specific.</p>
@@ -82,35 +83,35 @@ platform to only support some types of power down operations.</p>
</div>
<div class="section" id="return-values">
<h2>Return Values<a class="headerlink" href="#return-values" title="Permalink to this headline">¶</a></h2>
-<dl>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>the power down request was successful.
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>the power down request was successful.
This may/may not result in immediate power down. An OS should
spin in a loop after getting <a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a> as it is likely that there
-will be a delay before instructions stop being executed.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt><dd><p>unable to power down, try again later.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a></dt><dd><p>Unable to power down, call <a class="reference internal" href="opal-poll-events.html#opal-poll-events"><span class="std std-ref">OPAL_POLL_EVENTS</span></a> and try again.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>a parameter was incorrect</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>Something went wrong, and waiting and trying again is unlikely to be
+will be a delay before instructions stop being executed.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt>
+<dd>unable to power down, try again later.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a></dt>
+<dd>Unable to power down, call <a class="reference internal" href="opal-poll-events.html#opal-poll-events"><span class="std std-ref">OPAL_POLL_EVENTS</span></a> and try again.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>a parameter was incorrect</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd><p class="first">Something went wrong, and waiting and trying again is unlikely to be
successful. Although, considering that in a shutdown code path, there’s
unlikely to be any other valid option to take, retrying is perfectly valid.</p>
-<p>In older OPAL versions (prior to skiboot v5.9), on IBM FSP systems, this
+<p class="last">In older OPAL versions (prior to skiboot v5.9), on IBM FSP systems, this
return code was returned erroneously instead of <a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a> during an
FSP Reset/Reload.</p>
</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>this platform does not support being powered off. Practically speaking, this
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>this platform does not support being powered off. Practically speaking, this
should <strong>never</strong> be returned, but in various simulation or bring-up situations,
-it’s plausible it is, so code should handle this gracefully.</p>
-</dd>
+it’s plausible it is, so code should handle this gracefully.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -139,15 +140,17 @@ it’s plausible it is, so code should handle this gracefully.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -164,15 +167,14 @@ it’s plausible it is, so code should handle this gracefully.</p>
<li class="right" >
<a href="index.html" title="OPAL API Documentation"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_CEC_POWER_DOWN</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-cec-reboot-6-116.html b/doc/opal-api/opal-cec-reboot-6-116.html
index 805f3f4..1b199a3 100644
--- a/doc/opal-api/opal-cec-reboot-6-116.html
+++ b/doc/opal-api/opal-cec-reboot-6-116.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_CEC_REBOOT and OPAL_CEC_REBOOT2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_CEC_REBOOT and OPAL_CEC_REBOOT2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-cec-power-down-5.html" title="OPAL_CEC_POWER_DOWN"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_CEC_REBOOT and OPAL_CEC_REBOOT2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -51,19 +52,19 @@
</pre></div>
</div>
<p>There are two opal calls to invoke system reboot.</p>
-<dl class="simple">
-<dt><a class="reference internal" href="#opal-cec-reboot"><span class="std std-ref">OPAL_CEC_REBOOT</span></a></dt><dd><p>Original reboot call for a normal reboot.
+<dl class="docutils">
+<dt><a class="reference internal" href="#opal-cec-reboot"><span class="std std-ref">OPAL_CEC_REBOOT</span></a></dt>
+<dd>Original reboot call for a normal reboot.
It is recommended to first try <a class="reference internal" href="#opal-cec-reboot2"><span class="std std-ref">OPAL_CEC_REBOOT2</span></a>
(use <a class="reference internal" href="opal-check-token-80.html#opal-check-token"><span class="std std-ref">OPAL_CHECK_TOKEN</span></a> first), and then, if not available,
fall back to <a class="reference internal" href="#opal-cec-reboot"><span class="std std-ref">OPAL_CEC_REBOOT</span></a>.
All POWER9 systems shipped with support for <a class="reference internal" href="#opal-cec-reboot2"><span class="std std-ref">OPAL_CEC_REBOOT2</span></a>,
so it is safe to exclusively call the new call if an OS only targets POWER9
-and above.</p>
-</dd>
-<dt><a class="reference internal" href="#opal-cec-reboot2"><span class="std std-ref">OPAL_CEC_REBOOT2</span></a></dt><dd><p>Newer call for rebooting a system, supporting different types of reboots.
+and above.</dd>
+<dt><a class="reference internal" href="#opal-cec-reboot2"><span class="std std-ref">OPAL_CEC_REBOOT2</span></a></dt>
+<dd>Newer call for rebooting a system, supporting different types of reboots.
For example, the OS may request a reboot due to a platform or OS error,
-which may trigger host or BMC firmware to save debugging information.</p>
-</dd>
+which may trigger host or BMC firmware to save debugging information.</dd>
</dl>
<div class="section" id="opal-cec-reboot">
<span id="id1"></span><h2>OPAL_CEC_REBOOT<a class="headerlink" href="#opal-cec-reboot" title="Permalink to this headline">¶</a></h2>
@@ -111,56 +112,59 @@ of reboot, and falling back to a normal reboot if that type is not supported.</p
</div>
<div class="section" id="input-parameters">
<h3>Input parameters<a class="headerlink" href="#input-parameters" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">reboot_type</span></code></dt><dd><p>Type of reboot. (see below)</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">diag</span></code></dt><dd><p>Null-terminated string.</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">reboot_type</span></code></dt>
+<dd>Type of reboot. (see below)</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">diag</span></code></dt>
+<dd>Null-terminated string.</dd>
</dl>
<p>Depending on reboot type, this call will carry out additional steps
before triggering a reboot.</p>
</div>
<div class="section" id="return-codes">
<h3>Return Codes<a class="headerlink" href="#return-codes" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>The system will soon reboot. The OS should loop on <a class="reference internal" href="opal-poll-events.html#opal-poll-events"><span class="std std-ref">OPAL_POLL_EVENTS</span></a>
-in case there’s any work for OPAL to do.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a> or <a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a></dt><dd><p>OPAL is currently busy and can’t issue a reboot, call
-<a class="reference internal" href="opal-poll-events.html#opal-poll-events"><span class="std std-ref">OPAL_POLL_EVENTS</span></a> and retry reboot call.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>Unsupported reboot type (applicable to <a class="reference internal" href="#opal-cec-reboot2"><span class="std std-ref">OPAL_CEC_REBOOT2</span></a> only), retry
-with other reboot type.</p>
-</dd>
-<dt>Other error codes</dt><dd><p>Keep calling reboot and hope for the best? In theory this should never happen.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>The system will soon reboot. The OS should loop on <a class="reference internal" href="opal-poll-events.html#opal-poll-events"><span class="std std-ref">OPAL_POLL_EVENTS</span></a>
+in case there’s any work for OPAL to do.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a> or <a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a></dt>
+<dd>OPAL is currently busy and can’t issue a reboot, call
+<a class="reference internal" href="opal-poll-events.html#opal-poll-events"><span class="std std-ref">OPAL_POLL_EVENTS</span></a> and retry reboot call.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>Unsupported reboot type (applicable to <a class="reference internal" href="#opal-cec-reboot2"><span class="std std-ref">OPAL_CEC_REBOOT2</span></a> only), retry
+with other reboot type.</dd>
+<dt>Other error codes</dt>
+<dd>Keep calling reboot and hope for the best? In theory this should never happen.</dd>
</dl>
</div>
</div>
<div class="section" id="supported-reboot-types">
<h2>Supported reboot types:<a class="headerlink" href="#supported-reboot-types" title="Permalink to this headline">¶</a></h2>
-<dl>
-<dt>OPAL_REBOOT_NORMAL = 0</dt><dd><p>Behavior is as similar to that of opal_cec_reboot()</p>
-</dd>
-<dt>OPAL_REBOOT_PLATFORM_ERROR = 1</dt><dd><p>Log an error to the BMC and then trigger a system checkstop, using
+<dl class="docutils">
+<dt>OPAL_REBOOT_NORMAL = 0</dt>
+<dd>Behavior is as similar to that of opal_cec_reboot()</dd>
+<dt>OPAL_REBOOT_PLATFORM_ERROR = 1</dt>
+<dd><p class="first">Log an error to the BMC and then trigger a system checkstop, using
the information provided by â€ibm,sw-checkstop-fir’ property in the
device-tree. Post the checkstop trigger, OCC/BMC will collect
relevant data for error analysis and trigger a reboot.</p>
-<p>In absence of â€ibm,sw-checkstop-fir’ device property, this function
+<p class="last">In absence of â€ibm,sw-checkstop-fir’ device property, this function
will return with OPAL_UNSUPPORTED and no reboot will be triggered.</p>
</dd>
-<dt>OPAL_REBOOT_FULL_IPL = 2</dt><dd><p>Force a full IPL reboot rather than using fast reboot.</p>
-<p>On platforms that don’t support fast reboot, this is equivalent to a
+<dt>OPAL_REBOOT_FULL_IPL = 2</dt>
+<dd><p class="first">Force a full IPL reboot rather than using fast reboot.</p>
+<p class="last">On platforms that don’t support fast reboot, this is equivalent to a
normal reboot.</p>
</dd>
-<dt>OPAL_REBOOT_MPIPL = 3</dt><dd><p>Request for MPIPL reboot. Firmware will reboot the system and collect
+<dt>OPAL_REBOOT_MPIPL = 3</dt>
+<dd><p class="first">Request for MPIPL reboot. Firmware will reboot the system and collect
dump.</p>
-<p>On platforms that don’t support MPIPL, this is equivalent to a
+<p class="last">On platforms that don’t support MPIPL, this is equivalent to a
normal assert.</p>
</dd>
-<dt>Unsupported Reboot type</dt><dd><p>For unsupported reboot type, this function will return with
-OPAL_UNSUPPORTED and no reboot will be triggered.</p>
-</dd>
+<dt>Unsupported Reboot type</dt>
+<dd>For unsupported reboot type, this function will return with
+OPAL_UNSUPPORTED and no reboot will be triggered.</dd>
</dl>
<div class="section" id="debugging">
<h3>Debugging<a class="headerlink" href="#debugging" title="Permalink to this headline">¶</a></h3>
@@ -176,7 +180,6 @@ variable:</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -213,15 +216,17 @@ variable:</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -238,15 +243,14 @@ variable:</p>
<li class="right" >
<a href="opal-cec-power-down-5.html" title="OPAL_CEC_POWER_DOWN"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_CEC_REBOOT and OPAL_CEC_REBOOT2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-check-async-completion-86.html b/doc/opal-api/opal-check-async-completion-86.html
index ecb61a3..2dbf2a9 100644
--- a/doc/opal-api/opal-check-async-completion-86.html
+++ b/doc/opal-api/opal-check-async-completion-86.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_CHECK_ASYNC_COMPLETION &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_CHECK_ASYNC_COMPLETION &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-cec-reboot-6-116.html" title="OPAL_CEC_REBOOT and OPAL_CEC_REBOOT2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_CHECK_ASYNC_COMPLETION</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -54,30 +55,29 @@ completed. (see <a class="reference internal" href="opal-messages.html#opal-mess
</pre></div>
</div>
<p>Parameters:</p>
-<dl class="simple">
-<dt>buffer</dt><dd><p>buffer to copy message into</p>
-</dd>
-<dt>size</dt><dd><p>sizeof buffer to copy message into</p>
-</dd>
-<dt>token</dt><dd><p>async message token</p>
-</dd>
+<dl class="docutils">
+<dt>buffer</dt>
+<dd>buffer to copy message into</dd>
+<dt>size</dt>
+<dd>sizeof buffer to copy message into</dd>
+<dt>token</dt>
+<dd>async message token</dd>
</dl>
<p>Currently unused by Linux, but it is used by FreeBSD.</p>
<div class="section" id="return-values">
<h2>Return values<a class="headerlink" href="#return-values" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>buffer parameter is an invalid pointer (NULL or &gt; top of RAM).</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>message successfully copied to buffer.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt><dd><p>message is still pending and should be re-checked later.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>buffer parameter is an invalid pointer (NULL or &gt; top of RAM).</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>message successfully copied to buffer.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt>
+<dd>message is still pending and should be re-checked later.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -105,15 +105,17 @@ completed. (see <a class="reference internal" href="opal-messages.html#opal-mess
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -130,15 +132,14 @@ completed. (see <a class="reference internal" href="opal-messages.html#opal-mess
<li class="right" >
<a href="opal-cec-reboot-6-116.html" title="OPAL_CEC_REBOOT and OPAL_CEC_REBOOT2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_CHECK_ASYNC_COMPLETION</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-check-token-80.html b/doc/opal-api/opal-check-token-80.html
index 64428ed..8e541bf 100644
--- a/doc/opal-api/opal-check-token-80.html
+++ b/doc/opal-api/opal-check-token-80.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_CHECK_TOKEN &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_CHECK_TOKEN &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-check-async-completion-86.html" title="OPAL_CHECK_ASYNC_COMPLETION"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_CHECK_TOKEN</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -70,7 +71,6 @@ reason for a host OS to support this behaviour.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -90,15 +90,17 @@ reason for a host OS to support this behaviour.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -115,15 +117,14 @@ reason for a host OS to support this behaviour.</p>
<li class="right" >
<a href="opal-check-async-completion-86.html" title="OPAL_CHECK_ASYNC_COMPLETION"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_CHECK_TOKEN</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-code-update-76-77-78.html b/doc/opal-api/opal-code-update-76-77-78.html
index ac7161e..b6a1c3f 100644
--- a/doc/opal-api/opal-code-update-76-77-78.html
+++ b/doc/opal-api/opal-code-update-76-77-78.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Code Update on FSP based machine &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Code Update on FSP based machine &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-check-token-80.html" title="OPAL_CHECK_TOKEN"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Code Update on FSP based machine</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -59,35 +60,35 @@ implemented on FSP based machines.</p>
validation in OPAL:</p>
<blockquote>
<div><ul class="simple">
-<li><p>We do below sys parameters validation to confirm inband
+<li>We do below sys parameters validation to confirm inband
update is allowed.
- Platform is managed by HMC or not?.
-- Code update policy (inband code update allowed?).</p></li>
-<li><p>We parse candidate image header (first 4k bytes) to perform
+- Code update policy (inband code update allowed?).</li>
+<li>We parse candidate image header (first 4k bytes) to perform
below validations.
- Image magic number.
-- Image version to confirm image is valid for this platform.</p></li>
+- Image version to confirm image is valid for this platform.</li>
</ul>
</div></blockquote>
<div class="section" id="input">
<h3>Input<a class="headerlink" href="#input" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt>buffer</dt><dd><p>First 4k bytes of new image</p>
-</dd>
-<dt>size</dt><dd><p>Input buffer size</p>
-</dd>
+<dl class="docutils">
+<dt>buffer</dt>
+<dd>First 4k bytes of new image</dd>
+<dt>size</dt>
+<dd>Input buffer size</dd>
</dl>
</div>
<div class="section" id="output">
<h3>Output<a class="headerlink" href="#output" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt>buffer</dt><dd><p>Output result (current and new image version details)</p>
-</dd>
-<dt>size</dt><dd><p>Output buffer size</p>
-</dd>
-<dt>result</dt><dd><p>Token to identify what will happen if update is attempted
-See hw/fsp/fsp-codeupdate.h for token values.</p>
-</dd>
+<dl class="docutils">
+<dt>buffer</dt>
+<dd>Output result (current and new image version details)</dd>
+<dt>size</dt>
+<dd>Output buffer size</dd>
+<dt>result</dt>
+<dd>Token to identify what will happen if update is attempted
+See hw/fsp/fsp-codeupdate.h for token values.</dd>
</dl>
</div>
<div class="section" id="return-value">
@@ -105,8 +106,8 @@ See hw/fsp/fsp-codeupdate.h for token values.</p>
<p>Commit/Reject image.</p>
<blockquote>
<div><ul class="simple">
-<li><p>We can commit new image (T -&gt; P), if system is running with T side image.</p></li>
-<li><p>We can reject T side image, if system is running with P side image.</p></li>
+<li>We can commit new image (T -&gt; P), if system is running with T side image.</li>
+<li>We can reject T side image, if system is running with P side image.</li>
</ul>
</div></blockquote>
<p><strong>Note:</strong> If a platform is running from a T side image when an update is to be
@@ -115,11 +116,11 @@ image to the P side to allow the new image to be updated to the
temporary image area.</p>
<div class="section" id="id3">
<h3>Input<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt>op</dt><dd><p>Operation (1 : Commit /0 : Reject)</p>
-</dd>
-<dt>Return value</dt><dd><p>Commit operation status (0 : Success)</p>
-</dd>
+<dl class="docutils">
+<dt>op</dt>
+<dd>Operation (1 : Commit /0 : Reject)</dd>
+<dt>Return value</dt>
+<dd>Commit operation status (0 : Success)</dd>
</dl>
</div>
</div>
@@ -127,7 +128,7 @@ temporary image area.</p>
<span id="id4"></span><h2>OPAL_FLASH_UPDATE<a class="headerlink" href="#opal-flash-update" title="Permalink to this headline">¶</a></h2>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#define OPAL_FLASH_UPDATE 78</span>
-<span class="kt">int64_t</span> <span class="nf">fsp_opal_update_flash</span><span class="p">(</span><span class="k">struct</span> <span class="nc">opal_sg_list</span> <span class="o">*</span><span class="n">list</span><span class="p">);</span>
+<span class="kt">int64_t</span> <span class="nf">fsp_opal_update_flash</span><span class="p">(</span><span class="k">struct</span> <span class="n">opal_sg_list</span> <span class="o">*</span><span class="n">list</span><span class="p">);</span>
</pre></div>
</div>
<p>Update new image. It only sets the flag, actual update happens
@@ -138,32 +139,31 @@ via MBOX command.</p>
<p>FW update flow :</p>
<blockquote>
<div><ul class="simple">
-<li><dl class="simple">
-<dt>if (running side == T)</dt><dd><p>Swap P &amp; T side</p>
-</dd>
+<li><dl class="first docutils">
+<dt>if (running side == T)</dt>
+<dd>Swap P &amp; T side</dd>
</dl>
</li>
-<li><p>Start code update</p></li>
-<li><p>Delete T side LIDs</p></li>
-<li><p>Write LIDs</p></li>
-<li><p>Code update complete</p></li>
-<li><p>Deep IPL</p></li>
+<li>Start code update</li>
+<li>Delete T side LIDs</li>
+<li>Write LIDs</li>
+<li>Code update complete</li>
+<li>Deep IPL</li>
</ul>
</div></blockquote>
<div class="section" id="id5">
<h3>Input<a class="headerlink" href="#id5" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt>list</dt><dd><p>Real address of image scatter/gather list of the FW image</p>
-</dd>
-<dt>Return value:</dt><dd><p>Update operation status (0: update requested)</p>
-</dd>
+<dl class="docutils">
+<dt>list</dt>
+<dd>Real address of image scatter/gather list of the FW image</dd>
+<dt>Return value:</dt>
+<dd>Update operation status (0: update requested)</dd>
</dl>
</div>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -204,15 +204,17 @@ via MBOX command.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -229,15 +231,14 @@ via MBOX command.</p>
<li class="right" >
<a href="opal-check-token-80.html" title="OPAL_CHECK_TOKEN"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Code Update on FSP based machine</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-config-cpu-idle-state-99.html b/doc/opal-api/opal-config-cpu-idle-state-99.html
index 61d82ea..b5ce5fa 100644
--- a/doc/opal-api/opal-config-cpu-idle-state-99.html
+++ b/doc/opal-api/opal-config-cpu-idle-state-99.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_CONFIG_CPU_IDLE_STATE &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_CONFIG_CPU_IDLE_STATE &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-code-update-76-77-78.html" title="Code Update on FSP based machine"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_CONFIG_CPU_IDLE_STATE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -66,17 +67,16 @@ This is currently needed for the <cite>fastsleep_</cite> idle state, present on
systems.</p>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Applied workaround</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid state or enter/exit.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Applied workaround</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid state or enter/exit.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -104,15 +104,17 @@ systems.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -129,15 +131,14 @@ systems.</p>
<li class="right" >
<a href="opal-code-update-76-77-78.html" title="Code Update on FSP based machine"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_CONFIG_CPU_IDLE_STATE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-console-read-write-1-2.html b/doc/opal-api/opal-console-read-write-1-2.html
index 71bcef8..24e4451 100644
--- a/doc/opal-api/opal-console-read-write-1-2.html
+++ b/doc/opal-api/opal-console-read-write-1-2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL Console calls &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL Console calls &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-config-cpu-idle-state-99.html" title="OPAL_CONFIG_CPU_IDLE_STATE"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Console calls</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -47,45 +48,45 @@
<div class="section" id="opal-console-calls">
<h1>OPAL Console calls<a class="headerlink" href="#opal-console-calls" title="Permalink to this headline">¶</a></h1>
<p>There are four OPAL calls relating to the OPAL console:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 41%" />
-<col style="width: 13%" />
-<col style="width: 22%" />
-<col style="width: 9%" />
-<col style="width: 15%" />
+<col width="41%" />
+<col width="13%" />
+<col width="22%" />
+<col width="9%" />
+<col width="15%" />
</colgroup>
-<tbody>
-<tr class="row-odd"><td><p>Name</p></td>
-<td><p>API Token ID</p></td>
-<td><p>Introduced</p></td>
-<td><p>Required
-as of</p></td>
-<td><p>Notes</p></td>
+<tbody valign="top">
+<tr class="row-odd"><td>Name</td>
+<td>API Token ID</td>
+<td>Introduced</td>
+<td>Required
+as of</td>
+<td>Notes</td>
</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-console-write"><span class="std std-ref">OPAL_CONSOLE_WRITE</span></a></p></td>
-<td><p>1</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
+<tr class="row-even"><td><a class="reference internal" href="#opal-console-write"><span class="std std-ref">OPAL_CONSOLE_WRITE</span></a></td>
+<td>1</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-console-read"><span class="std std-ref">OPAL_CONSOLE_READ</span></a></p></td>
-<td><p>2</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-console-read"><span class="std std-ref">OPAL_CONSOLE_READ</span></a></td>
+<td>2</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-console-write-buffer-space"><span class="std std-ref">OPAL_CONSOLE_WRITE_BUFFER_SPACE</span></a></p></td>
-<td><p>25</p></td>
-<td><p>v1.0 (Initial Release)</p></td>
-<td><p>POWER8</p></td>
-<td></td>
+<tr class="row-even"><td><a class="reference internal" href="#opal-console-write-buffer-space"><span class="std std-ref">OPAL_CONSOLE_WRITE_BUFFER_SPACE</span></a></td>
+<td>25</td>
+<td>v1.0 (Initial Release)</td>
+<td>POWER8</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-console-flush"><span class="std std-ref">OPAL_CONSOLE_FLUSH</span></a></p></td>
-<td><p>117</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.1.13.html#skiboot-5-1-13"><span class="std std-ref">skiboot-5.1.13</span></a></p></td>
-<td><p>POWER9</p></td>
-<td></td>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-console-flush"><span class="std std-ref">OPAL_CONSOLE_FLUSH</span></a></td>
+<td>117</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.1.13.html#skiboot-5-1-13"><span class="std std-ref">skiboot-5.1.13</span></a></td>
+<td>POWER9</td>
+<td>&#160;</td>
</tr>
</tbody>
</table>
@@ -105,10 +106,10 @@ for it to simply be an in-memory buffer and only support writing.</p>
<p>Returns:</p>
<blockquote>
<div><ul class="simple">
-<li><p><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></p></li>
-<li><p><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a> on invalid term_number</p></li>
-<li><p><a class="reference internal" href="return-codes.html#opal-closed"><span class="std std-ref">OPAL_CLOSED</span></a> if console device closed</p></li>
-<li><p><a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a> if unable to write any of buffer</p></li>
+<li><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></li>
+<li><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a> on invalid term_number</li>
+<li><a class="reference internal" href="return-codes.html#opal-closed"><span class="std std-ref">OPAL_CLOSED</span></a> if console device closed</li>
+<li><a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a> if unable to write any of buffer</li>
</ul>
</div></blockquote>
<p><code class="docutils literal notranslate"><span class="pre">term_number</span></code> is the terminal number as represented in the device tree.
@@ -126,8 +127,8 @@ partial writes and not writing anything are valid.</p>
<p>Returns:</p>
<blockquote>
<div><ul class="simple">
-<li><p><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></p></li>
-<li><p><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a> on invalid term_number</p></li>
+<li><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></li>
+<li><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a> on invalid term_number</li>
</ul>
</div></blockquote>
<p>Returns the available buffer length for OPAL_CONSOLE_WRITE in <code class="docutils literal notranslate"><span class="pre">length</span></code>.
@@ -145,9 +146,9 @@ space to write your full message to the console with OPAL_CONSOLE_WRITE.</p>
<p>Returns:</p>
<blockquote>
<div><ul class="simple">
-<li><p><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></p></li>
-<li><p><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a> on invalid term_number</p></li>
-<li><p><a class="reference internal" href="return-codes.html#opal-closed"><span class="std std-ref">OPAL_CLOSED</span></a></p></li>
+<li><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></li>
+<li><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a> on invalid term_number</li>
+<li><a class="reference internal" href="return-codes.html#opal-closed"><span class="std std-ref">OPAL_CLOSED</span></a></li>
</ul>
</div></blockquote>
<p>Use <a class="reference internal" href="opal-poll-events.html#opal-poll-events"><span class="std std-ref">OPAL_POLL_EVENTS</span></a> for how to determine</p>
@@ -161,18 +162,17 @@ space to write your full message to the console with OPAL_CONSOLE_WRITE.</p>
<p>Returns:</p>
<blockquote>
<div><ul class="simple">
-<li><p><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></p></li>
-<li><p><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a> if the console does not implement a flush call</p></li>
-<li><p><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a> on invalid term_number</p></li>
-<li><p><a class="reference internal" href="return-codes.html#opal-partial"><span class="std std-ref">OPAL_PARTIAL</span></a> if more to flush, call again</p></li>
-<li><p><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a> if nothing was flushed this call</p></li>
+<li><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></li>
+<li><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a> if the console does not implement a flush call</li>
+<li><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a> on invalid term_number</li>
+<li><a class="reference internal" href="return-codes.html#opal-partial"><span class="std std-ref">OPAL_PARTIAL</span></a> if more to flush, call again</li>
+<li><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a> if nothing was flushed this call</li>
</ul>
</div></blockquote>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -203,15 +203,17 @@ space to write your full message to the console with OPAL_CONSOLE_WRITE.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -228,15 +230,14 @@ space to write your full message to the console with OPAL_CONSOLE_WRITE.</p>
<li class="right" >
<a href="opal-config-cpu-idle-state-99.html" title="OPAL_CONFIG_CPU_IDLE_STATE"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Console calls</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-dump-81-82-83-84-94-101-102.html b/doc/opal-api/opal-dump-81-82-83-84-94-101-102.html
index 70185e2..27c7915 100644
--- a/doc/opal-api/opal-dump-81-82-83-84-94-101-102.html
+++ b/doc/opal-api/opal-dump-81-82-83-84-94-101-102.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL Dumps &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL Dumps &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-console-read-write-1-2.html" title="OPAL Console calls"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Dumps</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -81,7 +82,7 @@ used by it.</p>
<span class="kt">int64_t</span> <span class="nf">opal_dump_init</span><span class="p">(</span><span class="kt">uint8_t</span> <span class="n">dump_type</span><span class="p">);</span>
<span class="kt">int64_t</span> <span class="nf">opal_dump_info</span><span class="p">(</span><span class="kt">uint32_t</span> <span class="o">*</span><span class="n">dump_id</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">dump_size</span><span class="p">);</span>
-<span class="kt">int64_t</span> <span class="nf">opal_dump_read</span><span class="p">(</span><span class="kt">uint32_t</span> <span class="n">dump_id</span><span class="p">,</span> <span class="k">struct</span> <span class="nc">opal_sg_list</span> <span class="o">*</span><span class="n">list</span><span class="p">);</span>
+<span class="kt">int64_t</span> <span class="nf">opal_dump_read</span><span class="p">(</span><span class="kt">uint32_t</span> <span class="n">dump_id</span><span class="p">,</span> <span class="k">struct</span> <span class="n">opal_sg_list</span> <span class="o">*</span><span class="n">list</span><span class="p">);</span>
<span class="kt">int64_t</span> <span class="nf">opal_dump_ack</span><span class="p">(</span><span class="kt">uint32_t</span> <span class="n">dump_id</span><span class="p">);</span>
<span class="kt">int64_t</span> <span class="nf">opal_dump_resend_notification</span><span class="p">(</span><span class="kt">void</span><span class="p">);</span>
<span class="kt">int64_t</span> <span class="nf">opal_dump_info2</span><span class="p">(</span><span class="kt">uint32_t</span> <span class="o">*</span><span class="n">dump_id</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">dump_size</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">dump_type</span><span class="p">);</span>
@@ -102,9 +103,9 @@ memory into some kind of crash dump for further analysis.</p>
<a class="reference internal" href="opal-check-token-80.html#opal-check-token"><span class="std std-ref">OPAL_CHECK_TOKEN</span></a> call to find out if <a class="reference internal" href="#opal-register-dump-region"><span class="std std-ref">OPAL_REGISTER_DUMP_REGION</span></a> is supported.</p>
<p><a class="reference internal" href="#opal-register-dump-region"><span class="std std-ref">OPAL_REGISTER_DUMP_REGION</span></a> accepts 3 parameters:</p>
<ul class="simple">
-<li><p>region ID</p></li>
-<li><p>address</p></li>
-<li><p>length</p></li>
+<li>region ID</li>
+<li>address</li>
+<li>length</li>
</ul>
<p>There is a range of region IDs that can be used by the host OS. A host OS should
start from OPAL_DUMP_REGION_HOST_END and work down if it wants to add a not well
@@ -170,14 +171,14 @@ is supported.</p>
ensure the call is valid.</p>
<div class="section" id="returns">
<h3>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Dump initiated</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Unsupported dump type. Currently only <code class="docutils literal notranslate"><span class="pre">DUMP_TYPE_FSP</span></code> is supported and
-only on FSP based platforms.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>Failed to ask service processor to initiated dump.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Dump initiated</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Unsupported dump type. Currently only <code class="docutils literal notranslate"><span class="pre">DUMP_TYPE_FSP</span></code> is supported and
+only on FSP based platforms.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>Failed to ask service processor to initiated dump.</dd>
</dl>
</div>
</div>
@@ -197,25 +198,25 @@ trees did. <a class="reference internal" href="#opal-dump-info"><span class="std
<span id="id7"></span><h2>OPAL_DUMP_READ<a class="headerlink" href="#opal-dump-read" title="Permalink to this headline">¶</a></h2>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#define OPAL_DUMP_READ 83</span>
-<span class="kt">int64_t</span> <span class="nf">opal_dump_read</span><span class="p">(</span><span class="kt">uint32_t</span> <span class="n">dump_id</span><span class="p">,</span> <span class="k">struct</span> <span class="nc">opal_sg_list</span> <span class="o">*</span><span class="n">list</span><span class="p">);</span>
+<span class="kt">int64_t</span> <span class="nf">opal_dump_read</span><span class="p">(</span><span class="kt">uint32_t</span> <span class="n">dump_id</span><span class="p">,</span> <span class="k">struct</span> <span class="n">opal_sg_list</span> <span class="o">*</span><span class="n">list</span><span class="p">);</span>
</pre></div>
</div>
<p>Read <code class="docutils literal notranslate"><span class="pre">dump_id</span></code> dump from the service processor into memory.</p>
<div class="section" id="id8">
<h3>Returns<a class="headerlink" href="#id8" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>Invalid Dump ID or internal error.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Insuffcient space to store dump.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a></dt><dd><p>Fetching dump, call <a class="reference internal" href="opal-poll-events.html#opal-poll-events"><span class="std std-ref">OPAL_POLL_EVENTS</span></a> to crank the state machine,
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>Invalid Dump ID or internal error.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Insuffcient space to store dump.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a></dt>
+<dd>Fetching dump, call <a class="reference internal" href="opal-poll-events.html#opal-poll-events"><span class="std std-ref">OPAL_POLL_EVENTS</span></a> to crank the state machine,
and call <a class="reference internal" href="#opal-dump-read"><span class="std std-ref">OPAL_DUMP_READ</span></a> again until neither <a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a>
-nor <a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a> are returned.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-partial"><span class="std std-ref">OPAL_PARTIAL</span></a></dt><dd><p>Only part of the dump was read.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Dump successfully read.</p>
-</dd>
+nor <a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a> are returned.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-partial"><span class="std std-ref">OPAL_PARTIAL</span></a></dt>
+<dd>Only part of the dump was read.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Dump successfully read.</dd>
</dl>
</div>
</div>
@@ -231,14 +232,14 @@ can re-claim the storage space used by the dump. Effectively, this is an
<code class="docutils literal notranslate"><span class="pre">unlink</span></code> style operation.</p>
<div class="section" id="id10">
<h3>Returns<a class="headerlink" href="#id10" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Dump successfully acknowledged.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>Failed to acknowledge the dump, e.g. could not communicate with service
-processor.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid dump ID.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Dump successfully acknowledged.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>Failed to acknowledge the dump, e.g. could not communicate with service
+processor.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid dump ID.</dd>
</dl>
</div>
</div>
@@ -254,9 +255,9 @@ cause OPAL to check if a dump is available and set the
<a class="reference internal" href="opal-poll-events.html#opal-event-dump-avail"><span class="std std-ref">OPAL_EVENT_DUMP_AVAIL = 0x400</span></a> bit in the next <a class="reference internal" href="opal-poll-events.html#opal-poll-events"><span class="std std-ref">OPAL_POLL_EVENTS</span></a> call.</p>
<div class="section" id="id12">
<h3>Returns<a class="headerlink" href="#id12" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Successfully reset <a class="reference internal" href="opal-poll-events.html#opal-event-dump-avail"><span class="std std-ref">OPAL_EVENT_DUMP_AVAIL = 0x400</span></a> bit.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Successfully reset <a class="reference internal" href="opal-poll-events.html#opal-event-dump-avail"><span class="std std-ref">OPAL_EVENT_DUMP_AVAIL = 0x400</span></a> bit.</dd>
</dl>
<p>In future, this may return other standard OPAL error codes.</p>
</div>
@@ -280,18 +281,17 @@ available for retreiving.</p>
<p>This call replaces <a class="reference internal" href="#opal-dump-info"><span class="std std-ref">OPAL_DUMP_INFO</span></a>.</p>
<div class="section" id="id14">
<h3>Returns<a class="headerlink" href="#id14" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Information retreived.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>No dump available or internal error.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Information retreived.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>No dump available or internal error.</dd>
</dl>
</div>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -347,15 +347,17 @@ available for retreiving.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -372,15 +374,14 @@ available for retreiving.</p>
<li class="right" >
<a href="opal-console-read-write-1-2.html" title="OPAL Console calls"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Dumps</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-elog-71-72-73-74-75.html b/doc/opal-api/opal-elog-71-72-73-74-75.html
index 8ede084..2d05a54 100644
--- a/doc/opal-api/opal-elog-71-72-73-74-75.html
+++ b/doc/opal-api/opal-elog-71-72-73-74-75.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_ELOG: Error logging &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_ELOG: Error logging &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-dump-81-82-83-84-94-101-102.html" title="OPAL Dumps"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_ELOG: Error logging</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -80,14 +81,14 @@ the <code class="docutils literal notranslate"><span class="pre">buffer</span></
</pre></div>
</div>
<p>Returns:</p>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></dt><dd><p>When there are no error logs to read, or <code class="docutils literal notranslate"><span class="pre">OPAL_ELOG</span></code> calls are done in the
-wrong order.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>The <code class="docutils literal notranslate"><span class="pre">id</span></code> does not match the log id that is available.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Error log is copied to <code class="docutils literal notranslate"><span class="pre">buffer</span></code>.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></dt>
+<dd>When there are no error logs to read, or <code class="docutils literal notranslate"><span class="pre">OPAL_ELOG</span></code> calls are done in the
+wrong order.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>The <code class="docutils literal notranslate"><span class="pre">id</span></code> does not match the log id that is available.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Error log is copied to <code class="docutils literal notranslate"><span class="pre">buffer</span></code>.</dd>
</dl>
<p>Other generic OPAL error codes may also be returned and should be treated
like <a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a>.</p>
@@ -103,11 +104,11 @@ memory/storage.</p>
</pre></div>
</div>
<p>Returns:</p>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>OPAL failed to send acknowledgement to the error log creator.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success!</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>OPAL failed to send acknowledgement to the error log creator.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success!</dd>
</dl>
<p>Other generic OPAL error codes may also be returned, and should be treated
like <a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a>.</p>
@@ -134,18 +135,17 @@ void.</p>
</pre></div>
</div>
<p>Returns:</p>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></dt><dd><p>There is no error log to fetch information about.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></dt>
+<dd>There is no error log to fetch information about.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success.</dd>
</dl>
<p>Other general OPAL errors may be returned.</p>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -176,15 +176,17 @@ void.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -201,15 +203,14 @@ void.</p>
<li class="right" >
<a href="opal-dump-81-82-83-84-94-101-102.html" title="OPAL Dumps"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_ELOG: Error logging</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-flash-110-111-112.html b/doc/opal-api/opal-flash-110-111-112.html
index f094737..3108eae 100644
--- a/doc/opal-api/opal-flash-110-111-112.html
+++ b/doc/opal-api/opal-flash-110-111-112.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL Flash calls &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL Flash calls &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-elog-71-72-73-74-75.html" title="OPAL_ELOG: Error logging"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Flash calls</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -54,7 +55,7 @@
</div>
<p>Multiple flash devices are supported by OPAL - each of these calls takes an id
parameter, which must match an ID found in the corresponding <code class="docutils literal notranslate"><span class="pre">ibm,opal/flash&#64;n</span></code>
-device tree node. See <a class="reference internal" href="../device-tree/ibm%2Copal/flash.html#device-tree-ibm-opal-flash"><span class="std std-ref">ibm,opal/flash device tree entries</span></a> for details of
+device tree node. See <a class="reference internal" href="../device-tree/ibm,opal/flash.html#device-tree-ibm-opal-flash"><span class="std std-ref">ibm,opal/flash device tree entries</span></a> for details of
the device tree bindings.</p>
<p>All operations on the flash device must be aligned to the block size of the
flash. This applies to both offset and size arguments.</p>
@@ -63,8 +64,8 @@ success, the calls will return <a class="reference internal" href="return-codes.
opal_async_completion message will be sent (with the appropriate token
argument) when the operation completes.</p>
<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>These calls can have higher than normal latency, spending many
+<p class="first admonition-title">Note</p>
+<p class="last">These calls can have higher than normal latency, spending many
<strong>milliseconds</strong> inside OPAL. This is due to the OPAL_FLASH_* calls
typically being backed by flash on the other side of the LPC bus,
which has a maximum transfer rate of 5MB/sec, or to/from flash attached
@@ -72,17 +73,17 @@ to the ast2400/ast2500 (the typical setup for OpenPOWER systems) of
only 1.75MB/sec.</p>
</div>
<p>All calls share the same return values:</p>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt><dd><p>operation started, an async completion will be triggered with the <code class="docutils literal notranslate"><span class="pre">token</span></code> argument</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>invalid flash id</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>invalid size or offset (alignment, or access beyond end of device)</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt><dd><p>flash in use</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>error accessing flash device</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt>
+<dd>operation started, an async completion will be triggered with the <code class="docutils literal notranslate"><span class="pre">token</span></code> argument</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>invalid flash id</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>invalid size or offset (alignment, or access beyond end of device)</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt>
+<dd>flash in use</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>error accessing flash device</dd>
</dl>
<div class="section" id="opal-flash-read">
<span id="id1"></span><h2>OPAL_FLASH_READ<a class="headerlink" href="#opal-flash-read" title="Permalink to this headline">¶</a></h2>
@@ -121,7 +122,6 @@ token when completed.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -151,15 +151,17 @@ token when completed.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -176,15 +178,14 @@ token when completed.</p>
<li class="right" >
<a href="opal-elog-71-72-73-74-75.html" title="OPAL_ELOG: Error logging"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Flash calls</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-get-device-tree-118.html b/doc/opal-api/opal-get-device-tree-118.html
index 5f37899..db99223 100644
--- a/doc/opal-api/opal-get-device-tree-118.html
+++ b/doc/opal-api/opal-get-device-tree-118.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_GET_DEVICE_TREE &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_GET_DEVICE_TREE &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-flash-110-111-112.html" title="OPAL Flash calls"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_GET_DEVICE_TREE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -52,38 +53,37 @@
</pre></div>
</div>
<p>Get device sub-tree.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">uint32_t</span> <span class="pre">phandle</span></code></dt><dd><p>root device node phandle of the device sub-tree</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">buf</span></code></dt><dd><p>FDT blob buffer or NULL</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">len</span></code></dt><dd><p>length of the FDT blob buffer</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">uint32_t</span> <span class="pre">phandle</span></code></dt>
+<dd>root device node phandle of the device sub-tree</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">buf</span></code></dt>
+<dd>FDT blob buffer or NULL</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">len</span></code></dt>
+<dd>length of the FDT blob buffer</dd>
</dl>
<p>Retrieve device sub-tree. The root node’s phandle is identified by &#64;phandle.
The typical use is for the kernel to update its device tree following a change
in hardware (e.g. PCI hotplug).</p>
<div class="section" id="return-codes">
<h2>Return Codes<a class="headerlink" href="#return-codes" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt>FDT blob size</dt><dd><p>returned FDT blob buffer size when <code class="docutils literal notranslate"><span class="pre">buf</span></code> is NULL</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>FDT blob is created successfully</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>invalid argument &#64;phandle or &#64;len</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>failure creating FDT blob when calculating its size</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-no-mem"><span class="std std-ref">OPAL_NO_MEM</span></a></dt><dd><p>not enough room in buffer for device sub-tree</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-empty"><span class="std std-ref">OPAL_EMPTY</span></a></dt><dd><p>failure creating FDT blob</p>
-</dd>
+<dl class="docutils">
+<dt>FDT blob size</dt>
+<dd>returned FDT blob buffer size when <code class="docutils literal notranslate"><span class="pre">buf</span></code> is NULL</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>FDT blob is created successfully</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>invalid argument &#64;phandle or &#64;len</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>failure creating FDT blob when calculating its size</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-no-mem"><span class="std std-ref">OPAL_NO_MEM</span></a></dt>
+<dd>not enough room in buffer for device sub-tree</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-empty"><span class="std std-ref">OPAL_EMPTY</span></a></dt>
+<dd>failure creating FDT blob</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -111,15 +111,17 @@ in hardware (e.g. PCI hotplug).</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -136,15 +138,14 @@ in hardware (e.g. PCI hotplug).</p>
<li class="right" >
<a href="opal-flash-110-111-112.html" title="OPAL Flash calls"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_GET_DEVICE_TREE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-get-epow-status-56.html b/doc/opal-api/opal-get-epow-status-56.html
index cd98fd5..b181399 100644
--- a/doc/opal-api/opal-get-epow-status-56.html
+++ b/doc/opal-api/opal-get-epow-status-56.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_GET_EPOW_STATUS &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_GET_EPOW_STATUS &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-get-device-tree-118.html" title="OPAL_GET_DEVICE_TREE"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_GET_EPOW_STATUS</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -97,17 +98,16 @@ compatibility is maintained.</p>
<p>At time of writing, this call is only implemented on FSP based systems.</p>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Successfully retreived status. Note, success is returned even if only
-able to retreive a subset of the EPOW classes.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Successfully retreived status. Note, success is returned even if only
+able to retreive a subset of the EPOW classes.</dd>
</dl>
<p>Other return codes may be returned in the future.</p>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -135,15 +135,17 @@ able to retreive a subset of the EPOW classes.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -160,15 +162,14 @@ able to retreive a subset of the EPOW classes.</p>
<li class="right" >
<a href="opal-get-device-tree-118.html" title="OPAL_GET_DEVICE_TREE"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_GET_EPOW_STATUS</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-get-msg-85.html b/doc/opal-api/opal-get-msg-85.html
index 6e9fe68..265ac8a 100644
--- a/doc/opal-api/opal-get-msg-85.html
+++ b/doc/opal-api/opal-get-msg-85.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_GET_MSG &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_GET_MSG &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-get-epow-status-56.html" title="OPAL_GET_EPOW_STATUS"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_GET_MSG</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -67,28 +68,27 @@ may safely ignore.</p>
bytes or opal-msg-size. It MUST NOT supply a buffer of &lt; 72 bytes.</p>
<div class="section" id="return-values">
<h2>Return values<a class="headerlink" href="#return-values" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-resource"><span class="std std-ref">OPAL_RESOURCE</span></a></dt><dd><p>no available message.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>buffer is NULL or size is &lt; 72 bytes.
-If buffer size &lt; 72 bytes, the message will NOT be discarded by OPAL.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-partial"><span class="std std-ref">OPAL_PARTIAL</span></a></dt><dd><p>If pending opal message is greater than supplied buffer.
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-resource"><span class="std std-ref">OPAL_RESOURCE</span></a></dt>
+<dd>no available message.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>buffer is NULL or size is &lt; 72 bytes.
+If buffer size &lt; 72 bytes, the message will NOT be discarded by OPAL.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-partial"><span class="std std-ref">OPAL_PARTIAL</span></a></dt>
+<dd>If pending opal message is greater than supplied buffer.
In this case the message is <em>DISCARDED</em> by OPAL.
This is to keep compatibility with host Operating Systems
with a hard coded opal-msg-size of 72 bytes.
<strong>NOT CURRENTLY IMPLEMENTED</strong>. Specified so that host OS can
prepare for the possible future with either a sensible
-error message or by gracefully ignoring such OPAL messages.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>message successfully copied to buffer.</p>
-</dd>
+error message or by gracefully ignoring such OPAL messages.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>message successfully copied to buffer.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -116,15 +116,17 @@ error message or by gracefully ignoring such OPAL messages.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -141,15 +143,14 @@ error message or by gracefully ignoring such OPAL messages.</p>
<li class="right" >
<a href="opal-get-epow-status-56.html" title="OPAL_GET_EPOW_STATUS"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_GET_MSG</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-get-msi-39-40.html b/doc/opal-api/opal-get-msi-39-40.html
index 0c924fc..ce166c3 100644
--- a/doc/opal-api/opal-get-msi-39-40.html
+++ b/doc/opal-api/opal-get-msi-39-40.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_GET_MSI_32 and OPAL_GET_MSI_64 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_GET_MSI_32 and OPAL_GET_MSI_64 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-get-msg-85.html" title="OPAL_GET_MSG"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_GET_MSI_32 and OPAL_GET_MSI_64</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -86,24 +87,24 @@ The host calls these functions to determine the PHB MSI DMA address and message
data to program into a PE PCIE function for a particular MVE and XIVE. The
msi_address parameter returns the MSI DMA address and the msi_data parameter
returns the MSI DMA message data value the PE uses to signal that interrupt.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>The <code class="docutils literal notranslate"><span class="pre">phb_id</span></code> parameter is the value from the PHB node <code class="docutils literal notranslate"><span class="pre">ibm,opal-phbid</span></code>
-property.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">mve_number</span></code></dt><dd><p>The <code class="docutils literal notranslate"><span class="pre">mve_number</span></code> is the index of an MVE used to authorize this PE to this
-MSI. For <code class="docutils literal notranslate"><span class="pre">ibm,opal-ioda2</span></code> PHBs, the MVE number argument is ignored.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">xive_number</span></code></dt><dd><p>The <code class="docutils literal notranslate"><span class="pre">xive_number</span></code> is the index of an XIVE that corresponds to a particular
-DMA address and message data value this PE will signal as an MSI ro MSI-X.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">msi_range</span></code></dt><dd><p>The msi_range parameter specifies the number of MSIs associated with the
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>The <code class="docutils literal notranslate"><span class="pre">phb_id</span></code> parameter is the value from the PHB node <code class="docutils literal notranslate"><span class="pre">ibm,opal-phbid</span></code>
+property.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">mve_number</span></code></dt>
+<dd>The <code class="docutils literal notranslate"><span class="pre">mve_number</span></code> is the index of an MVE used to authorize this PE to this
+MSI. For <code class="docutils literal notranslate"><span class="pre">ibm,opal-ioda2</span></code> PHBs, the MVE number argument is ignored.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">xive_number</span></code></dt>
+<dd>The <code class="docutils literal notranslate"><span class="pre">xive_number</span></code> is the index of an XIVE that corresponds to a particular
+DMA address and message data value this PE will signal as an MSI ro MSI-X.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">msi_range</span></code></dt>
+<dd>The msi_range parameter specifies the number of MSIs associated with the
in put MVE and XIVE, primarily for MSI-conventional Multiple Message
Enable &gt; 1 MSI. MSI requires consecutive MSIs per MSI address, and each
MSI DMA address must be unique for any given consecutive power of 2 set
of 32 message data values,. which in turn select particular PHB XIVEs.
This value must be a power of 2 value in the range of 0 to 32. OPAL
-returns <a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a> for values outside of this range.</p>
-</dd>
+returns <a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a> for values outside of this range.</dd>
</dl>
<p>For MSI conventional, the MSI address and message data returned apply to a
power of 2 sequential set of XIVRs starting from the xive_number for the
@@ -121,7 +122,6 @@ each MSI-X uniquely.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -150,15 +150,17 @@ each MSI-X uniquely.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -175,15 +177,14 @@ each MSI-X uniquely.</p>
<li class="right" >
<a href="opal-get-msg-85.html" title="OPAL_GET_MSG"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_GET_MSI_32 and OPAL_GET_MSI_64</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-get-xive-20.html b/doc/opal-api/opal-get-xive-20.html
index d6adede..e92e6c0 100644
--- a/doc/opal-api/opal-get-xive-20.html
+++ b/doc/opal-api/opal-get-xive-20.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_GET_XIVE &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_GET_XIVE &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-get-msi-39-40.html" title="OPAL_GET_MSI_32 and OPAL_GET_MSI_64"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_GET_XIVE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -55,21 +56,20 @@
interrupt source. See <a class="reference internal" href="opal-set-xive-19.html#opal-set-xive"><span class="std std-ref">OPAL_SET_XIVE</span></a> for details.</p>
<div class="section" id="parameters">
<h2>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">isn</span></code></dt><dd><p>The <code class="docutils literal notranslate"><span class="pre">isn</span></code> is the global interrupt number being queried</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">server_number</span></code></dt><dd><p>the <code class="docutils literal notranslate"><span class="pre">server_number</span></code> returns the mangled server (processor)
-that is set to receive that interrupt.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">priority</span></code></dt><dd><p>the <code class="docutils literal notranslate"><span class="pre">priority</span></code> returns the current interrupt priority setting
-for that interrupt.</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">isn</span></code></dt>
+<dd>The <code class="docutils literal notranslate"><span class="pre">isn</span></code> is the global interrupt number being queried</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">server_number</span></code></dt>
+<dd>the <code class="docutils literal notranslate"><span class="pre">server_number</span></code> returns the mangled server (processor)
+that is set to receive that interrupt.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">priority</span></code></dt>
+<dd>the <code class="docutils literal notranslate"><span class="pre">priority</span></code> returns the current interrupt priority setting
+for that interrupt.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -97,15 +97,17 @@ for that interrupt.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -122,15 +124,14 @@ for that interrupt.</p>
<li class="right" >
<a href="opal-get-msi-39-40.html" title="OPAL_GET_MSI_32 and OPAL_GET_MSI_64"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_GET_XIVE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-handle-hmi-98-166.html b/doc/opal-api/opal-handle-hmi-98-166.html
index 0695ae8..91685ee 100644
--- a/doc/opal-api/opal-handle-hmi-98-166.html
+++ b/doc/opal-api/opal-handle-hmi-98-166.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Hypervisor Maintenance Interrupt (HMI) &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Hypervisor Maintenance Interrupt (HMI) &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-get-xive-20.html" title="OPAL_GET_XIVE"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Hypervisor Maintenance Interrupt (HMI)</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -66,31 +67,31 @@ after handling the error.</p>
<h1>List of errors that causes HMI<a class="headerlink" href="#list-of-errors-that-causes-hmi" title="Permalink to this headline">¶</a></h1>
<blockquote>
<div><ul>
-<li><p>CPU Errors</p>
+<li><p class="first">CPU Errors</p>
<ul class="simple">
-<li><p>Processor Core checkstop</p></li>
-<li><p>Processor retry recovery</p></li>
-<li><p>NX/NPU/CAPP checkstop.</p></li>
+<li>Processor Core checkstop</li>
+<li>Processor retry recovery</li>
+<li>NX/NPU/CAPP checkstop.</li>
</ul>
</li>
-<li><p>Timer facility Errors</p>
+<li><p class="first">Timer facility Errors</p>
<ul class="simple">
-<li><p>ChipTOD Errors</p></li>
+<li>ChipTOD Errors</li>
</ul>
<blockquote>
<div><ul class="simple">
-<li><p>ChipTOD sync check and parity errors</p></li>
-<li><p>ChipTOD configuration register parity errors</p></li>
-<li><p>ChiTOD topology failover</p></li>
+<li>ChipTOD sync check and parity errors</li>
+<li>ChipTOD configuration register parity errors</li>
+<li>ChiTOD topology failover</li>
</ul>
</div></blockquote>
</li>
-<li><p>Timebase (TB) errors</p>
+<li><p class="first">Timebase (TB) errors</p>
<blockquote>
<div><ul class="simple">
-<li><p>TB parity/residue error</p></li>
-<li><p>TFMR parity and firmware control error</p></li>
-<li><p>DEC/HDEC/PURR/SPURR parity errors</p></li>
+<li>TB parity/residue error</li>
+<li>TFMR parity and firmware control error</li>
+<li>DEC/HDEC/PURR/SPURR parity errors</li>
</ul>
</div></blockquote>
</li>
@@ -177,20 +178,19 @@ were lost, and whether an event was generated.</p>
<span class="p">};</span>
</pre></div>
</div>
-<dl class="simple" id="opal-hmi-flags-tod-tb-fail">
-<dt>OPAL_HMI_FLAGS_TOD_TB_FAIL</dt><dd><p>The Time of Day (TOD) / Timebase facility has failed. This is probably fatal
+<dl class="docutils" id="opal-hmi-flags-tod-tb-fail">
+<dt>OPAL_HMI_FLAGS_TOD_TB_FAIL</dt>
+<dd>The Time of Day (TOD) / Timebase facility has failed. This is probably fatal
for the OS, and requires the OS to be very careful to not call any function
that may rely on it, usually as it heads down a <cite>panic()</cite> code path.
This code path should be <a class="reference internal" href="opal-cec-reboot-6-116.html#opal-cec-reboot2"><span class="std std-ref">OPAL_CEC_REBOOT2</span></a> with the OPAL_REBOOT_PLATFORM_ERROR
option. Details of the failure are likely delivered as part of HMI events if
-<cite>OPAL_HMI_FLAGS_NEW_EVENT</cite> is set.</p>
-</dd>
+<cite>OPAL_HMI_FLAGS_NEW_EVENT</cite> is set.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -222,15 +222,17 @@ option. Details of the failure are likely delivered as part of HMI events if
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -247,15 +249,14 @@ option. Details of the failure are likely delivered as part of HMI events if
<li class="right" >
<a href="opal-get-xive-20.html" title="OPAL_GET_XIVE"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Hypervisor Maintenance Interrupt (HMI)</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-handle-interrupt.html b/doc/opal-api/opal-handle-interrupt.html
index 58ffe8b..9a3e2f5 100644
--- a/doc/opal-api/opal-handle-interrupt.html
+++ b/doc/opal-api/opal-handle-interrupt.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_HANDLE_INTERRUPT &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_HANDLE_INTERRUPT &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-handle-hmi-98-166.html" title="Hypervisor Maintenance Interrupt (HMI)"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_HANDLE_INTERRUPT</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -46,7 +47,7 @@
<div class="section" id="opal-handle-interrupt">
<span id="id1"></span><h1>OPAL_HANDLE_INTERRUPT<a class="headerlink" href="#opal-handle-interrupt" title="Permalink to this headline">¶</a></h1>
-<p>The host OS must pass all interrupts in the <cite>opal-interrupts</cite> property of <a class="reference internal" href="../device-tree/ibm%2Copal.html#device-tree-ibm-opal"><span class="std std-ref">ibm,opal</span></a> in the device tree to OPAL.</p>
+<p>The host OS must pass all interrupts in the <cite>opal-interrupts</cite> property of <a class="reference internal" href="../device-tree/ibm,opal.html#device-tree-ibm-opal"><span class="std std-ref">ibm,opal</span></a> in the device tree to OPAL.</p>
<p>An example dt snippet is:</p>
<div class="highlight-dts notranslate"><div class="highlight"><pre><span></span><span class="nc">ibm,opal</span> <span class="p">{</span>
<span class="nf">opal-interrupts</span> <span class="o">=</span> <span class="p">&lt;</span><span class="mh">0x10</span> <span class="mh">0x11</span> <span class="mh">0x12</span> <span class="mh">0x13</span> <span class="mh">0x14</span> <span class="mh">0x20010</span> <span class="mh">0x20011</span> <span class="mh">0x20012</span> <span class="mh">0x20013</span> <span class="mh">0x20014</span> <span class="mh">0xffe</span> <span class="mh">0xfff</span> <span class="mh">0x17fe</span> <span class="mh">0x17ff</span> <span class="mh">0x2ffe</span> <span class="mh">0x2fff</span> <span class="mh">0x37fe</span> <span class="mh">0x37ff</span> <span class="mh">0x20ffe</span> <span class="mh">0x20fff</span> <span class="mh">0x217fe</span> <span class="mh">0x217ff</span> <span class="mh">0x22ffe</span> <span class="mh">0x22fff</span> <span class="mh">0x237fe</span> <span class="mh">0x237ff</span><span class="p">&gt;;</span>
@@ -56,18 +57,17 @@
<p>When the host OS gets any of these interrupts, it must call
<code class="docutils literal notranslate"><span class="pre">OPAL_HANDLE_INTERRUPT</span></code>.</p>
<p>The <code class="docutils literal notranslate"><span class="pre">OPAL_HANDLE_INTERRUPT</span></code> call takes two parameters, one input and one output.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">uint32_t</span> <span class="pre">isn</span></code></dt><dd><p>the interrupt</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">*outstanding_event_mask</span></code></dt><dd><p>returns outstanding events for host OS to handle</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">uint32_t</span> <span class="pre">isn</span></code></dt>
+<dd>the interrupt</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">*outstanding_event_mask</span></code></dt>
+<dd>returns outstanding events for host OS to handle</dd>
</dl>
<p>The host OS should then handle any outstanding events.</p>
<p>See <a class="reference internal" href="opal-poll-events.html#opal-poll-events"><span class="std std-ref">OPAL_POLL_EVENTS</span></a> for documentation on events.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -87,15 +87,17 @@
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -112,15 +114,14 @@
<li class="right" >
<a href="opal-handle-hmi-98-166.html" title="Hypervisor Maintenance Interrupt (HMI)"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_HANDLE_INTERRUPT</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-i2c-request-109.html b/doc/opal-api/opal-i2c-request-109.html
index 6380757..2d9f90d 100644
--- a/doc/opal-api/opal-i2c-request-109.html
+++ b/doc/opal-api/opal-i2c-request-109.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_I2C_REQUEST &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_I2C_REQUEST &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-handle-interrupt.html" title="OPAL_HANDLE_INTERRUPT"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_I2C_REQUEST</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -49,7 +50,7 @@
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#define OPAL_I2C_REQUEST 109</span>
<span class="cm">/* OPAL I2C request */</span>
-<span class="k">struct</span> <span class="nc">opal_i2c_request</span> <span class="p">{</span>
+<span class="k">struct</span> <span class="n">opal_i2c_request</span> <span class="p">{</span>
<span class="kt">uint8_t</span> <span class="n">type</span><span class="p">;</span>
<span class="cp">#define OPAL_I2C_RAW_READ 0</span>
<span class="cp">#define OPAL_I2C_RAW_WRITE 1</span>
@@ -67,47 +68,46 @@
<span class="p">};</span>
<span class="kt">int</span> <span class="nf">opal_i2c_request</span><span class="p">(</span><span class="kt">uint64_t</span> <span class="n">async_token</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">bus_id</span><span class="p">,</span>
- <span class="k">struct</span> <span class="nc">opal_i2c_request</span> <span class="o">*</span><span class="n">oreq</span><span class="p">);</span>
+ <span class="k">struct</span> <span class="n">opal_i2c_request</span> <span class="o">*</span><span class="n">oreq</span><span class="p">);</span>
</pre></div>
</div>
<p>Initiate I2C request using i2c master that OPAL controls.</p>
<div class="section" id="return-codes">
<h2>Return Codes<a class="headerlink" href="#return-codes" title="Permalink to this headline">¶</a></h2>
<p>Most return codes will come through as part of async completion.</p>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid request pointer, or bus ID.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>Unsupported operation. e.g. 10 bit addresses not yet supported.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-no-mem"><span class="std std-ref">OPAL_NO_MEM</span></a></dt><dd><p>Not enough free memory in OPAL to initiate request.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt><dd><p>Operation will complete asynchronously.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-i2c-timeout"><span class="std std-ref">OPAL_I2C_TIMEOUT</span></a></dt><dd><p>I2C operation initiated successfully, but timed out.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-i2c-invalid-cmd"><span class="std std-ref">OPAL_I2C_INVALID</span></a></dt><dd><p>Invalid i2c Command.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-i2c-lbus-parity"><span class="std std-ref">OPAL_I2C_LBUS_PARITY</span></a></dt><dd><p>I2C LBUS Parity error</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-i2c-bkend-overrun"><span class="std std-ref">OPAL_I2C_BKEND_OVERRUN</span></a></dt><dd><p>I2C Backend overrun.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-i2c-bkend-access"><span class="std std-ref">OPAL_I2C_BKEND_ACCESS</span></a></dt><dd><p>I2C Backend Access error.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-i2c-arbt-lost"><span class="std std-ref">OPAL_I2C_ARBT_LOST</span></a></dt><dd><p>I2C Bus Arbitration lost.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-i2c-nack-rcvd"><span class="std std-ref">OPAL_I2C_NACK_RCVD</span></a></dt><dd><p>I2C NACK received.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-i2c-stop-err"><span class="std std-ref">OPAL_I2C_STOP_ERR</span></a></dt><dd><p>I2C STOP error.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>I2C operation completed successfully. Typically only as part of
-async completion.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid request pointer, or bus ID.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>Unsupported operation. e.g. 10 bit addresses not yet supported.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-no-mem"><span class="std std-ref">OPAL_NO_MEM</span></a></dt>
+<dd>Not enough free memory in OPAL to initiate request.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt>
+<dd>Operation will complete asynchronously.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-i2c-timeout"><span class="std std-ref">OPAL_I2C_TIMEOUT</span></a></dt>
+<dd>I2C operation initiated successfully, but timed out.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-i2c-invalid-cmd"><span class="std std-ref">OPAL_I2C_INVALID</span></a></dt>
+<dd>Invalid i2c Command.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-i2c-lbus-parity"><span class="std std-ref">OPAL_I2C_LBUS_PARITY</span></a></dt>
+<dd>I2C LBUS Parity error</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-i2c-bkend-overrun"><span class="std std-ref">OPAL_I2C_BKEND_OVERRUN</span></a></dt>
+<dd>I2C Backend overrun.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-i2c-bkend-access"><span class="std std-ref">OPAL_I2C_BKEND_ACCESS</span></a></dt>
+<dd>I2C Backend Access error.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-i2c-arbt-lost"><span class="std std-ref">OPAL_I2C_ARBT_LOST</span></a></dt>
+<dd>I2C Bus Arbitration lost.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-i2c-nack-rcvd"><span class="std std-ref">OPAL_I2C_NACK_RCVD</span></a></dt>
+<dd>I2C NACK received.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-i2c-stop-err"><span class="std std-ref">OPAL_I2C_STOP_ERR</span></a></dt>
+<dd>I2C STOP error.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>I2C operation completed successfully. Typically only as part of
+async completion.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -135,15 +135,17 @@ async completion.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -160,15 +162,14 @@ async completion.</p>
<li class="right" >
<a href="opal-handle-interrupt.html" title="OPAL_HANDLE_INTERRUPT"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_I2C_REQUEST</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-imc-counters.html b/doc/opal-api/opal-imc-counters.html
index 54090a3..db50afb 100644
--- a/doc/opal-api/opal-imc-counters.html
+++ b/doc/opal-api/opal-imc-counters.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_IMC_COUNTERS_INIT &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_IMC_COUNTERS_INIT &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-i2c-request-109.html" title="OPAL_I2C_REQUEST"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_IMC_COUNTERS_INIT</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -64,27 +65,27 @@ This way OPAL can lock down and advertise only
supported device type and nest units.</p>
<div class="section" id="parameters">
<h2>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">uint32_t</span> <span class="pre">type</span></code></dt><dd><p>This parameter specifies the imc counter domain.
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">uint32_t</span> <span class="pre">type</span></code></dt>
+<dd>This parameter specifies the imc counter domain.
The value can be â€OPAL_IMC_COUNTERS_NEST’, â€OPAL_IMC_COUNTERS_CORE’
-or â€OPAL_IMC_COUNTERS_TRACE’.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">addr</span></code></dt><dd><p>This parameter must have a non-zero value.
-This value must be a physical address of the core.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">cpu_pir</span></code></dt><dd><p>This parameter specifices target cpu pir</p>
-</dd>
+or â€OPAL_IMC_COUNTERS_TRACE’.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">addr</span></code></dt>
+<dd>This parameter must have a non-zero value.
+This value must be a physical address of the core.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">cpu_pir</span></code></dt>
+<dd>This parameter specifices target cpu pir</dd>
</dl>
</div>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>In case of unsupported <code class="docutils literal notranslate"><span class="pre">type</span></code></p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>If any error in setting up the hardware.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>On succesfully initialized or even if init operation is a no-op.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>In case of unsupported <code class="docutils literal notranslate"><span class="pre">type</span></code></dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>If any error in setting up the hardware.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>On succesfully initialized or even if init operation is a no-op.</dd>
</dl>
</div>
</div>
@@ -94,24 +95,24 @@ This value must be a physical address of the core.</p>
counters for a specified domain (NEST/CORE/TRACE).</p>
<div class="section" id="id3">
<h2>Parameters<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">uint32_t</span> <span class="pre">type</span></code></dt><dd><p>This parameter specifies the imc counter domain.
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">uint32_t</span> <span class="pre">type</span></code></dt>
+<dd>This parameter specifies the imc counter domain.
The value can be â€OPAL_IMC_COUNTERS_NEST’,
-â€OPAL_IMC_COUNTERS_CORE’ or â€OPAL_IMC_COUNTERS_TRACE’.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">cpu_pir</span></code></dt><dd><p>This parameter specifices target cpu pir</p>
-</dd>
+â€OPAL_IMC_COUNTERS_CORE’ or â€OPAL_IMC_COUNTERS_TRACE’.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">cpu_pir</span></code></dt>
+<dd>This parameter specifices target cpu pir</dd>
</dl>
</div>
<div class="section" id="id4">
<h2>Returns<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>In case of Unsupported <code class="docutils literal notranslate"><span class="pre">type</span></code></p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>If any error in setting up the hardware.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>On successful execution of the operation for the given <code class="docutils literal notranslate"><span class="pre">type</span></code>.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>In case of Unsupported <code class="docutils literal notranslate"><span class="pre">type</span></code></dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>If any error in setting up the hardware.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>On successful execution of the operation for the given <code class="docutils literal notranslate"><span class="pre">type</span></code>.</dd>
</dl>
</div>
</div>
@@ -124,30 +125,29 @@ While STOP <em>may</em> run successfully without an associated
START call, this is not gaurenteed.</p>
<div class="section" id="id6">
<h2>Parameters<a class="headerlink" href="#id6" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">uint32_t</span> <span class="pre">type</span></code></dt><dd><p>This parameter specifies the imc counter domain.
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">uint32_t</span> <span class="pre">type</span></code></dt>
+<dd>This parameter specifies the imc counter domain.
The value can be â€OPAL_IMC_COUNTERS_NEST’,
-â€OPAL_IMC_COUNTERS_CORE’ or â€OPAL_IMC_COUNTERS_TRACE’</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">cpu_pir</span></code></dt><dd><p>This parameter specifices target cpu pir</p>
-</dd>
+â€OPAL_IMC_COUNTERS_CORE’ or â€OPAL_IMC_COUNTERS_TRACE’</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">cpu_pir</span></code></dt>
+<dd>This parameter specifices target cpu pir</dd>
</dl>
</div>
<div class="section" id="id7">
<h2>Returns<a class="headerlink" href="#id7" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>In case of Unsupported <code class="docutils literal notranslate"><span class="pre">type</span></code></p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>If any error in setting up the hardware.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>On successful execution of the operation for the given <code class="docutils literal notranslate"><span class="pre">type</span></code>.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>In case of Unsupported <code class="docutils literal notranslate"><span class="pre">type</span></code></dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>If any error in setting up the hardware.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>On successful execution of the operation for the given <code class="docutils literal notranslate"><span class="pre">type</span></code>.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -186,15 +186,17 @@ The value can be â€OPAL_IMC_COUNTERS_NEST’,
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -211,15 +213,14 @@ The value can be â€OPAL_IMC_COUNTERS_NEST’,
<li class="right" >
<a href="opal-i2c-request-109.html" title="OPAL_I2C_REQUEST"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_IMC_COUNTERS_INIT</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-int-eoi-124.html b/doc/opal-api/opal-int-eoi-124.html
index 8e8d214..f4f3f55 100644
--- a/doc/opal-api/opal-int-eoi-124.html
+++ b/doc/opal-api/opal-int-eoi-124.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_INT_EOI &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_INT_EOI &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-imc-counters.html" title="OPAL_IMC_COUNTERS_INIT"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_INT_EOI</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -64,7 +65,6 @@ such a device, the host OS MUST NOT use this call.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -84,15 +84,17 @@ such a device, the host OS MUST NOT use this call.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -109,15 +111,14 @@ such a device, the host OS MUST NOT use this call.</p>
<li class="right" >
<a href="opal-imc-counters.html" title="OPAL_IMC_COUNTERS_INIT"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_INT_EOI</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-int-get-xirr-122.html b/doc/opal-api/opal-int-get-xirr-122.html
index afd98a4..27a898d 100644
--- a/doc/opal-api/opal-int-get-xirr-122.html
+++ b/doc/opal-api/opal-int-get-xirr-122.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_INT_GET_XIRR &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_INT_GET_XIRR &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-int-eoi-124.html" title="OPAL_INT_EOI"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_INT_GET_XIRR</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -60,7 +61,6 @@ such a device, the host OS MUST NOT use this call.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -80,15 +80,17 @@ such a device, the host OS MUST NOT use this call.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -105,15 +107,14 @@ such a device, the host OS MUST NOT use this call.</p>
<li class="right" >
<a href="opal-int-eoi-124.html" title="OPAL_INT_EOI"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_INT_GET_XIRR</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-int-set-cppr-123.html b/doc/opal-api/opal-int-set-cppr-123.html
index d130c04..020c364 100644
--- a/doc/opal-api/opal-int-set-cppr-123.html
+++ b/doc/opal-api/opal-int-set-cppr-123.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_INT_SET_CPPR &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_INT_SET_CPPR &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-int-get-xirr-122.html" title="OPAL_INT_GET_XIRR"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_INT_SET_CPPR</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -60,7 +61,6 @@ such a device, the host OS MUST NOT use this call.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -80,15 +80,17 @@ such a device, the host OS MUST NOT use this call.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -105,15 +107,14 @@ such a device, the host OS MUST NOT use this call.</p>
<li class="right" >
<a href="opal-int-get-xirr-122.html" title="OPAL_INT_GET_XIRR"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_INT_SET_CPPR</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-int-set-mfrr-125.html b/doc/opal-api/opal-int-set-mfrr-125.html
index 1a4b1ac..5121fa9 100644
--- a/doc/opal-api/opal-int-set-mfrr-125.html
+++ b/doc/opal-api/opal-int-set-mfrr-125.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_INT_SET_MFRR &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_INT_SET_MFRR &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-int-set-cppr-123.html" title="OPAL_INT_SET_CPPR"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_INT_SET_MFRR</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -60,7 +61,6 @@ such a device, the host OS MUST NOT use this call.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -80,15 +80,17 @@ such a device, the host OS MUST NOT use this call.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -105,15 +107,14 @@ such a device, the host OS MUST NOT use this call.</p>
<li class="right" >
<a href="opal-int-set-cppr-123.html" title="OPAL_INT_SET_CPPR"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_INT_SET_MFRR</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-invalid-call--1.html b/doc/opal-api/opal-invalid-call--1.html
index a1d7181..3089894 100644
--- a/doc/opal-api/opal-invalid-call--1.html
+++ b/doc/opal-api/opal-invalid-call--1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_INVALID_CALL &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_INVALID_CALL &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-int-set-mfrr-125.html" title="OPAL_INT_SET_MFRR"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_INVALID_CALL</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -51,7 +52,6 @@
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -71,15 +71,17 @@
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -96,15 +98,14 @@
<li class="right" >
<a href="opal-int-set-mfrr-125.html" title="OPAL_INT_SET_MFRR"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_INVALID_CALL</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-ipmi-send-recv-107-108.html b/doc/opal-api/opal-ipmi-send-recv-107-108.html
index 5b03ac8..bd7d55e 100644
--- a/doc/opal-api/opal-ipmi-send-recv-107-108.html
+++ b/doc/opal-api/opal-ipmi-send-recv-107-108.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_IPMI_SEND &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_IPMI_SEND &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-invalid-call--1.html" title="OPAL_INVALID_CALL"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_IPMI_SEND</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@
<span class="n">OPAL_IPMI_MSG_FORMAT_VERSION_1</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
<span class="p">};</span>
-<span class="k">struct</span> <span class="nc">opal_ipmi_msg</span> <span class="p">{</span>
+<span class="k">struct</span> <span class="n">opal_ipmi_msg</span> <span class="p">{</span>
<span class="kt">uint8_t</span> <span class="n">version</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">netfn</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">cmd</span><span class="p">;</span>
@@ -60,35 +61,35 @@
<span class="p">};</span>
<span class="kt">int64_t</span> <span class="nf">opal_ipmi_send</span><span class="p">(</span><span class="kt">uint64_t</span> <span class="n">interface</span><span class="p">,</span>
- <span class="k">struct</span> <span class="nc">opal_ipmi_msg</span> <span class="o">*</span><span class="n">opal_ipmi_msg</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">msg_len</span><span class="p">);</span>
+ <span class="k">struct</span> <span class="n">opal_ipmi_msg</span> <span class="o">*</span><span class="n">opal_ipmi_msg</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">msg_len</span><span class="p">);</span>
</pre></div>
</div>
<p><a class="reference internal" href="#opal-ipmi-send"><span class="std std-ref">OPAL_IPMI_SEND</span></a> call will send an IPMI message to the service processor.</p>
<div class="section" id="parameters">
<h2>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">interface</span></code></dt><dd><p><code class="docutils literal notranslate"><span class="pre">interface</span></code> parameter is the value from the ipmi interface node <code class="docutils literal notranslate"><span class="pre">ibm,ipmi-interface-id</span></code></p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">opal_ipmi_msg</span></code></dt><dd><p><code class="docutils literal notranslate"><span class="pre">opal_ipmi_msg</span></code> is the pointer to a <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">opal_ipmi_msg</span></code> (see above)</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">msg_len</span></code></dt><dd><p>ipmi message request size</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">interface</span></code></dt>
+<dd><code class="docutils literal notranslate"><span class="pre">interface</span></code> parameter is the value from the ipmi interface node <code class="docutils literal notranslate"><span class="pre">ibm,ipmi-interface-id</span></code></dd>
+<dt><code class="docutils literal notranslate"><span class="pre">opal_ipmi_msg</span></code></dt>
+<dd><code class="docutils literal notranslate"><span class="pre">opal_ipmi_msg</span></code> is the pointer to a <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">opal_ipmi_msg</span></code> (see above)</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">msg_len</span></code></dt>
+<dd>ipmi message request size</dd>
</dl>
</div>
<div class="section" id="return-values">
<h2>Return Values<a class="headerlink" href="#return-values" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p><code class="docutils literal notranslate"><span class="pre">msg</span></code> queued successfully</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>invalid ipmi message request length <code class="docutils literal notranslate"><span class="pre">msg_len</span></code></p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>backend support is not present as block transfer/service processor ipmi routines are not
-initialized which are used for communication</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>in-correct opal ipmi message format version <code class="docutils literal notranslate"><span class="pre">opal_ipmi_msg-&gt;version</span></code></p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-resource"><span class="std std-ref">OPAL_RESOURCE</span></a></dt><dd><p>insufficient resources to create <code class="docutils literal notranslate"><span class="pre">ipmi_msg</span></code> structure</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd><code class="docutils literal notranslate"><span class="pre">msg</span></code> queued successfully</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>invalid ipmi message request length <code class="docutils literal notranslate"><span class="pre">msg_len</span></code></dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>backend support is not present as block transfer/service processor ipmi routines are not
+initialized which are used for communication</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>in-correct opal ipmi message format version <code class="docutils literal notranslate"><span class="pre">opal_ipmi_msg-&gt;version</span></code></dd>
+<dt><a class="reference internal" href="return-codes.html#opal-resource"><span class="std std-ref">OPAL_RESOURCE</span></a></dt>
+<dd>insufficient resources to create <code class="docutils literal notranslate"><span class="pre">ipmi_msg</span></code> structure</dd>
</dl>
</div>
</div>
@@ -100,7 +101,7 @@ initialized which are used for communication</p>
<span class="n">OPAL_IPMI_MSG_FORMAT_VERSION_1</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
<span class="p">};</span>
-<span class="k">struct</span> <span class="nc">opal_ipmi_msg</span> <span class="p">{</span>
+<span class="k">struct</span> <span class="n">opal_ipmi_msg</span> <span class="p">{</span>
<span class="kt">uint8_t</span> <span class="n">version</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">netfn</span><span class="p">;</span>
<span class="kt">uint8_t</span> <span class="n">cmd</span><span class="p">;</span>
@@ -108,39 +109,38 @@ initialized which are used for communication</p>
<span class="p">};</span>
<span class="kt">int64_t</span> <span class="n">opal_ipmi_recv</span><span class="p">(</span><span class="kt">uint64_t</span> <span class="n">interface</span><span class="p">,</span>
- <span class="k">struct</span> <span class="nc">opal_ipmi_msg</span> <span class="o">*</span><span class="n">opal_ipmi_msg</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="o">*</span><span class="n">msg_len</span><span class="p">)</span>
+ <span class="k">struct</span> <span class="n">opal_ipmi_msg</span> <span class="o">*</span><span class="n">opal_ipmi_msg</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="o">*</span><span class="n">msg_len</span><span class="p">)</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">OPAL_IPMI_RECV</span></code> call reads an ipmi message of type <code class="docutils literal notranslate"><span class="pre">ipmi_msg</span></code> from ipmi message
queue <code class="docutils literal notranslate"><span class="pre">msgq</span></code> into host OS structure <code class="docutils literal notranslate"><span class="pre">opal_ipmi_msg</span></code>.</p>
<div class="section" id="id3">
<h2>Parameters<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">interface</span></code></dt><dd><p><code class="docutils literal notranslate"><span class="pre">interface</span></code> parameter is the value from the ipmi interface node <code class="docutils literal notranslate"><span class="pre">ibm,ipmi-interface-id</span></code></p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">opal_ipmi_msg</span></code></dt><dd><p><code class="docutils literal notranslate"><span class="pre">opal_ipmi_msg</span></code> is the pointer to a <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">opal_ipmi_msg</span></code> (see above)</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">msg_len</span></code></dt><dd><p><code class="docutils literal notranslate"><span class="pre">msg_len</span></code> is the pointer to ipmi message response size</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">interface</span></code></dt>
+<dd><code class="docutils literal notranslate"><span class="pre">interface</span></code> parameter is the value from the ipmi interface node <code class="docutils literal notranslate"><span class="pre">ibm,ipmi-interface-id</span></code></dd>
+<dt><code class="docutils literal notranslate"><span class="pre">opal_ipmi_msg</span></code></dt>
+<dd><code class="docutils literal notranslate"><span class="pre">opal_ipmi_msg</span></code> is the pointer to a <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">opal_ipmi_msg</span></code> (see above)</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">msg_len</span></code></dt>
+<dd><code class="docutils literal notranslate"><span class="pre">msg_len</span></code> is the pointer to ipmi message response size</dd>
</dl>
</div>
<div class="section" id="id4">
<h2>Return Values<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>ipmi message dequeued from <code class="docutils literal notranslate"><span class="pre">msgq</span></code> queue and memory taken by it got released successfully</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-empty"><span class="std std-ref">OPAL_EMPTY</span></a></dt><dd><p><code class="docutils literal notranslate"><span class="pre">msgq</span></code> list is empty</p>
-</dd>
-<dt>ref:<cite>OPAL_PARAMETER</cite></dt><dd><p>invalid ipmi <code class="docutils literal notranslate"><span class="pre">interface</span></code> value</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>incorrect opal ipmi message format version <code class="docutils literal notranslate"><span class="pre">opal_ipmi_msg-&gt;version</span></code></p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>ipmi message dequeued from <code class="docutils literal notranslate"><span class="pre">msgq</span></code> queue and memory taken by it got released successfully</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-empty"><span class="std std-ref">OPAL_EMPTY</span></a></dt>
+<dd><code class="docutils literal notranslate"><span class="pre">msgq</span></code> list is empty</dd>
+<dt>ref:<cite>OPAL_PARAMETER</cite></dt>
+<dd>invalid ipmi <code class="docutils literal notranslate"><span class="pre">interface</span></code> value</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>incorrect opal ipmi message format version <code class="docutils literal notranslate"><span class="pre">opal_ipmi_msg-&gt;version</span></code></dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -174,15 +174,17 @@ queue <code class="docutils literal notranslate"><span class="pre">msgq</span></
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -199,15 +201,14 @@ queue <code class="docutils literal notranslate"><span class="pre">msgq</span></
<li class="right" >
<a href="opal-invalid-call--1.html" title="OPAL_INVALID_CALL"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_IPMI_SEND</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-led-get-set-114-115.html b/doc/opal-api/opal-led-get-set-114-115.html
index 17e26e2..c047c1e 100644
--- a/doc/opal-api/opal-led-get-set-114-115.html
+++ b/doc/opal-api/opal-led-get-set-114-115.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Service Indicators (LEDS) &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Service Indicators (LEDS) &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-ipmi-send-recv-107-108.html" title="OPAL_IPMI_SEND"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Service Indicators (LEDS)</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -55,53 +56,52 @@ indicator to know which part to replace.</p>
<p>Different types of indicators handled by LED code:</p>
<blockquote>
<div><ul class="simple">
-<li><dl class="simple">
-<dt>System attention indicator (Check log indicator)</dt><dd><p>Indicates there is a problem with the system that needs attention.</p>
-</dd>
+<li><dl class="first docutils">
+<dt>System attention indicator (Check log indicator)</dt>
+<dd>Indicates there is a problem with the system that needs attention.</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>Identify</dt><dd><p>Helps the user locate/identify a particular FRU or resource in the
-system.</p>
-</dd>
+<li><dl class="first docutils">
+<dt>Identify</dt>
+<dd>Helps the user locate/identify a particular FRU or resource in the
+system.</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>Fault</dt><dd><p>Indicates there is a problem with the FRU or resource at the
-location with which the indicator is associated.</p>
-</dd>
+<li><dl class="first docutils">
+<dt>Fault</dt>
+<dd>Indicates there is a problem with the FRU or resource at the
+location with which the indicator is associated.</dd>
</dl>
</li>
</ul>
</div></blockquote>
-<p>All LEDs are defined in the device tree (see <a class="reference internal" href="../device-tree/ibm%2Copal/led.html#device-tree-ibm-opal-leds"><span class="std std-ref">Service Indicators (LEDS)</span></a>).</p>
+<p>All LEDs are defined in the device tree (see <a class="reference internal" href="../device-tree/ibm,opal/led.html#device-tree-ibm-opal-leds"><span class="std std-ref">Service Indicators (LEDS)</span></a>).</p>
<div class="section" id="led-design">
<h2>LED Design<a class="headerlink" href="#led-design" title="Permalink to this headline">¶</a></h2>
<blockquote>
-<div><p>When it comes to implementation we can classify LEDs into two
-categories:</p>
-</div></blockquote>
+<div>When it comes to implementation we can classify LEDs into two
+categories:</div></blockquote>
<ol class="arabic simple">
-<li><p>Hypervisor (OPAL) controlled LEDs (All identify &amp; fault indicators)
+<li>Hypervisor (OPAL) controlled LEDs (All identify &amp; fault indicators)
During boot, we read/cache these LED details in OPAL (location code,
state, etc). We use cached data to serve read request from FSP/Host.
-And we use SPCN passthrough MBOX command to update these LED state.</p></li>
-<li><p>Service processor (FSP) controlled LEDs (System Attention Indicator)
+And we use SPCN passthrough MBOX command to update these LED state.</li>
+<li>Service processor (FSP) controlled LEDs (System Attention Indicator)
During boot, we read/cache this LED info using MBOX command. Later
anytime FSP updates this LED, it sends update system parameter
notification MBOX command. We use that data to update cached data.
-LED update request is sent via set/reset attn MBOX command.</p></li>
+LED update request is sent via set/reset attn MBOX command.</li>
</ol>
-<dl class="simple">
-<dt>LED update request:</dt><dd><p>Both FSP and Host will send LED update requests. We have to serialize
-SPCN passthrough command. Hence we maintain local queue.</p>
-</dd>
+<dl class="docutils">
+<dt>LED update request:</dt>
+<dd>Both FSP and Host will send LED update requests. We have to serialize
+SPCN passthrough command. Hence we maintain local queue.</dd>
</dl>
<p>Note:</p>
<blockquote>
<div><ul class="simple">
-<li><p>For more information regarding service indicator refer to PAPR spec
-(Service Indicators chapter).</p></li>
+<li>For more information regarding service indicator refer to PAPR spec
+(Service Indicators chapter).</li>
</ul>
</div></blockquote>
<p>There are two OPAL calls relating to LED operations.</p>
@@ -115,15 +115,15 @@ SPCN passthrough command. Hence we maintain local queue.</p>
</pre></div>
</div>
<p>Returns LED state for the given location code.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">loc_code</span></code></dt><dd><p>Location code of the LEDs.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">led_mask</span></code></dt><dd><p>LED types whose status is available (return by OPAL)</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">led_value</span></code></dt><dd><p>Status of the available LED types (return by OPAL)</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">max_led_type</span></code></dt><dd><p>Maximum number of supported LED types (Host/OPAL)</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">loc_code</span></code></dt>
+<dd>Location code of the LEDs.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">led_mask</span></code></dt>
+<dd>LED types whose status is available (return by OPAL)</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">led_value</span></code></dt>
+<dd>Status of the available LED types (return by OPAL)</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">max_led_type</span></code></dt>
+<dd>Maximum number of supported LED types (Host/OPAL)</dd>
</dl>
<p>The host will pass the location code of the LED types (loc_code) and
maximum number of LED types it understands (max_led_type). OPAL will
@@ -150,16 +150,16 @@ hw/fsp/fsp-leds.c for more deatails.</p>
</pre></div>
</div>
<p>Sets LED state for the given location code.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">loc_code</span></code></dt><dd><p>Location code of the LEDs to be set.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">led_mask</span></code></dt><dd><p>LED types whose status will be updated</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">led_value</span></code></dt><dd><p>Requested status of various LED types.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">max_led_type</span></code></dt><dd><p>Maximum number of supported LED types. If OPAL supports fewer LED types
-than requested, it will set <code class="docutils literal notranslate"><span class="pre">max_led_type</span></code> to the maximum it does support.</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">loc_code</span></code></dt>
+<dd>Location code of the LEDs to be set.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">led_mask</span></code></dt>
+<dd>LED types whose status will be updated</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">led_value</span></code></dt>
+<dd>Requested status of various LED types.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">max_led_type</span></code></dt>
+<dd>Maximum number of supported LED types. If OPAL supports fewer LED types
+than requested, it will set <code class="docutils literal notranslate"><span class="pre">max_led_type</span></code> to the maximum it does support.</dd>
</dl>
<p>The host will pass the location code of the LED types, mask, value
and maximum number of LED types it understands. OPAL will update
@@ -181,7 +181,6 @@ hw/fsp/fsp-leds.c for more deatails.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -211,15 +210,17 @@ hw/fsp/fsp-leds.c for more deatails.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -236,15 +237,14 @@ hw/fsp/fsp-leds.c for more deatails.</p>
<li class="right" >
<a href="opal-ipmi-send-recv-107-108.html" title="OPAL_IPMI_SEND"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Service Indicators (LEDS)</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-lpc-read-write-67-68.html b/doc/opal-api/opal-lpc-read-write-67-68.html
index df85829..68f21e4 100644
--- a/doc/opal-api/opal-lpc-read-write-67-68.html
+++ b/doc/opal-api/opal-lpc-read-write-67-68.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_LPC_READ &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_LPC_READ &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-led-get-set-114-115.html" title="Service Indicators (LEDS)"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_LPC_READ</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -69,34 +70,35 @@ From <code class="docutils literal notranslate"><span class="pre">addr</span></c
variable named <code class="docutils literal notranslate"><span class="pre">data</span></code>.</p>
<div class="section" id="parameters">
<h2>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">chip_id</span></code></dt><dd><p>The <code class="docutils literal notranslate"><span class="pre">chip_id</span></code> parameter contains value of the chip number identified at
-boot time.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">addr_type</span></code></dt><dd><p>The <code class="docutils literal notranslate"><span class="pre">addr_type</span></code> is one of the LPC supported address types.
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">chip_id</span></code></dt>
+<dd>The <code class="docutils literal notranslate"><span class="pre">chip_id</span></code> parameter contains value of the chip number identified at
+boot time.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">addr_type</span></code></dt>
+<dd><p class="first">The <code class="docutils literal notranslate"><span class="pre">addr_type</span></code> is one of the LPC supported address types.
Supported address types are:</p>
-<ul class="simple">
-<li><p>LPC memory,</p></li>
-<li><p>LPC IO and</p></li>
-<li><p>LPC firmware.</p></li>
+<ul class="last simple">
+<li>LPC memory,</li>
+<li>LPC IO and</li>
+<li>LPC firmware.</li>
</ul>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">addr</span></code></dt><dd><p>The <code class="docutils literal notranslate"><span class="pre">addr</span></code> from which the data has to be read.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">data</span></code></dt><dd><p>The <code class="docutils literal notranslate"><span class="pre">data</span></code> will be used to store the read data.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">sz</span></code></dt><dd><p>How many <code class="docutils literal notranslate"><span class="pre">sz</span></code> bytes to be read in to <code class="docutils literal notranslate"><span class="pre">data</span></code>.</p>
-</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">addr</span></code></dt>
+<dd>The <code class="docutils literal notranslate"><span class="pre">addr</span></code> from which the data has to be read.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">data</span></code></dt>
+<dd>The <code class="docutils literal notranslate"><span class="pre">data</span></code> will be used to store the read data.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">sz</span></code></dt>
+<dd>How many <code class="docutils literal notranslate"><span class="pre">sz</span></code> bytes to be read in to <code class="docutils literal notranslate"><span class="pre">data</span></code>.</dd>
</dl>
</div>
<div class="section" id="return-codes">
<h2>Return Codes<a class="headerlink" href="#return-codes" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Indicates either <code class="docutils literal notranslate"><span class="pre">chip_id</span></code> not found or <code class="docutils literal notranslate"><span class="pre">chip_id</span></code> doesn’t contain
-LPC information.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Indicates Success!</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Indicates either <code class="docutils literal notranslate"><span class="pre">chip_id</span></code> not found or <code class="docutils literal notranslate"><span class="pre">chip_id</span></code> doesn’t contain
+LPC information.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Indicates Success!</dd>
</dl>
</div>
</div>
@@ -124,40 +126,40 @@ LPC information.</p>
From <code class="docutils literal notranslate"><span class="pre">addr</span></code> for <code class="docutils literal notranslate"><span class="pre">addr_type</span></code> with write size <code class="docutils literal notranslate"><span class="pre">sz</span></code> bytes.</p>
<div class="section" id="id3">
<h2>Parameters<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">chip_id</span></code></dt><dd><p>The <code class="docutils literal notranslate"><span class="pre">chip_id</span></code> parameter contains value of the chip number identified at
-boot time.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">addr_type</span></code></dt><dd><p>The <code class="docutils literal notranslate"><span class="pre">addr_type</span></code> is one of the address types LPC supported.
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">chip_id</span></code></dt>
+<dd>The <code class="docutils literal notranslate"><span class="pre">chip_id</span></code> parameter contains value of the chip number identified at
+boot time.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">addr_type</span></code></dt>
+<dd><p class="first">The <code class="docutils literal notranslate"><span class="pre">addr_type</span></code> is one of the address types LPC supported.
Supported address types are:</p>
-<ul class="simple">
-<li><p>LPC memory,</p></li>
-<li><p>LPC IO and</p></li>
-<li><p>LPC firmware.</p></li>
+<ul class="last simple">
+<li>LPC memory,</li>
+<li>LPC IO and</li>
+<li>LPC firmware.</li>
</ul>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">addr</span></code></dt><dd><p>The <code class="docutils literal notranslate"><span class="pre">addr</span></code> to where the <code class="docutils literal notranslate"><span class="pre">data</span></code> need to be written.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">data</span></code></dt><dd><p>The <code class="docutils literal notranslate"><span class="pre">data</span></code> for writing.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">sz</span></code></dt><dd><p>How many <code class="docutils literal notranslate"><span class="pre">sz</span></code> bytes to write.</p>
-</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">addr</span></code></dt>
+<dd>The <code class="docutils literal notranslate"><span class="pre">addr</span></code> to where the <code class="docutils literal notranslate"><span class="pre">data</span></code> need to be written.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">data</span></code></dt>
+<dd>The <code class="docutils literal notranslate"><span class="pre">data</span></code> for writing.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">sz</span></code></dt>
+<dd>How many <code class="docutils literal notranslate"><span class="pre">sz</span></code> bytes to write.</dd>
</dl>
</div>
<div class="section" id="id4">
<h2>Return Codes<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Indicates either <code class="docutils literal notranslate"><span class="pre">chip_id</span></code> not found or <code class="docutils literal notranslate"><span class="pre">chip_id</span></code> doesn’t contain LPC
-information.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Indicates Success!</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Indicates either <code class="docutils literal notranslate"><span class="pre">chip_id</span></code> not found or <code class="docutils literal notranslate"><span class="pre">chip_id</span></code> doesn’t contain LPC
+information.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Indicates Success!</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -191,15 +193,17 @@ information.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -216,15 +220,14 @@ information.</p>
<li class="right" >
<a href="opal-led-get-set-114-115.html" title="Service Indicators (LEDS)"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_LPC_READ</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-messages.html b/doc/opal-api/opal-messages.html
index 65d0647..9aee22d 100644
--- a/doc/opal-api/opal-messages.html
+++ b/doc/opal-api/opal-messages.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_MESSAGE &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_MESSAGE &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-lpc-read-write-67-68.html" title="OPAL_LPC_READ"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_MESSAGE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -119,10 +120,10 @@ Version 0 is invalid version and unsupported.</p>
to V1 version.</p>
<p>Notes:</p>
<ul class="simple">
-<li><p>When adding new structure to the union in future, the version number
-must be bumped.</p></li>
-<li><p>All future versions must be backward compatible to all its older versions.</p></li>
-<li><p>Size of this structure should not exceed that of struct opal_msg.</p></li>
+<li>When adding new structure to the union in future, the version number
+must be bumped.</li>
+<li>All future versions must be backward compatible to all its older versions.</li>
+<li>Size of this structure should not exceed that of struct opal_msg.</li>
</ul>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">struct</span> <span class="n">OpalHMIEvent</span> <span class="p">{</span>
<span class="n">uint8_t</span> <span class="n">version</span><span class="p">;</span> <span class="o">/*</span> <span class="mh">0x00</span> <span class="o">*/</span>
@@ -255,7 +256,6 @@ this one supports passing more than 64bytes (8*8) of data.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -291,15 +291,17 @@ this one supports passing more than 64bytes (8*8) of data.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -316,15 +318,14 @@ this one supports passing more than 64bytes (8*8) of data.</p>
<li class="right" >
<a href="opal-lpc-read-write-67-68.html" title="OPAL_LPC_READ"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_MESSAGE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-mpipl-173-174.html b/doc/opal-api/opal-mpipl-173-174.html
index 34c0945..44a83f6 100644
--- a/doc/opal-api/opal-mpipl-173-174.html
+++ b/doc/opal-api/opal-mpipl-173-174.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL MPIPL APIs &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL MPIPL APIs &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-messages.html" title="OPAL_MESSAGE"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL MPIPL APIs</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -54,7 +55,7 @@
<p>These calls are used for MPIPL (Memory Preserving Initial Program Load).</p>
<p>It is an OPTIONAL part of the OPAL spec.</p>
<p>If a platform supports MPIPL, then we will have “/ibm,opal/dump” node in
-device tree (see <a class="reference internal" href="../device-tree/ibm%2Copal/dump.html#device-tree-ibm-opal-dump"><span class="std std-ref">Dump (MPIPL) Device Tree Binding</span></a>).</p>
+device tree (see <a class="reference internal" href="../device-tree/ibm,opal/dump.html#device-tree-ibm-opal-dump"><span class="std std-ref">Dump (MPIPL) Device Tree Binding</span></a>).</p>
</div>
<div class="section" id="opal-mpipl-update">
<span id="id1"></span><h1>OPAL_MPIPL_UPDATE<a class="headerlink" href="#opal-mpipl-update" title="Permalink to this headline">¶</a></h1>
@@ -75,43 +76,43 @@ device tree (see <a class="reference internal" href="../device-tree/ibm%2Copal/d
<div class="section" id="ops">
<h2>ops :<a class="headerlink" href="#ops" title="Permalink to this headline">¶</a></h2>
<blockquote>
-<div><dl class="simple">
-<dt>OPAL_MPIPL_ADD_RANGE</dt><dd><p>Add new entry to MPIPL table. Kernel will send src, dest and size.
+<div><dl class="docutils">
+<dt>OPAL_MPIPL_ADD_RANGE</dt>
+<dd>Add new entry to MPIPL table. Kernel will send src, dest and size.
During MPIPL content from source address is moved to destination address.
src = Source start address
dest = Destination start address
-size = size</p>
-</dd>
-<dt>OPAL_MPIPL_REMOVE_RANGE</dt><dd><p>Remove kernel requested entry from MPIPL table.
+size = size</dd>
+<dt>OPAL_MPIPL_REMOVE_RANGE</dt>
+<dd>Remove kernel requested entry from MPIPL table.
src = Source start address
dest = Destination start address
-size = ignore</p>
-</dd>
-<dt>OPAL_MPIPL_REMOVE_ALL</dt><dd><p>Remove all kernel passed entry from MPIPL table.
+size = ignore</dd>
+<dt>OPAL_MPIPL_REMOVE_ALL</dt>
+<dd>Remove all kernel passed entry from MPIPL table.
src = ignore
dest = ignore
-size = ignore</p>
-</dd>
-<dt>OPAL_MPIPL_FREE_PRESERVED_MEMORY</dt><dd><p>Post MPIPL, kernel will indicate OPAL that it has processed dump and
+size = ignore</dd>
+<dt>OPAL_MPIPL_FREE_PRESERVED_MEMORY</dt>
+<dd>Post MPIPL, kernel will indicate OPAL that it has processed dump and
it can clear/release metadata area.
src = ignore
dest = ignore
-size = ignore</p>
-</dd>
+size = ignore</dd>
</dl>
</div></blockquote>
</div>
<div class="section" id="return-values">
<h2>Return Values<a class="headerlink" href="#return-values" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_SUCCESS</span></code></dt><dd><p>Operation success</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARAMETER</span></code></dt><dd><p>Invalid parameter</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_RESOURCE</span></code></dt><dd><p>Ran out of space in MDST/MDDT table to add new entry</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_HARDWARE</span></code></dt><dd><p>Platform does not support fadump</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_SUCCESS</span></code></dt>
+<dd>Operation success</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARAMETER</span></code></dt>
+<dd>Invalid parameter</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_RESOURCE</span></code></dt>
+<dd>Ran out of space in MDST/MDDT table to add new entry</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_HARDWARE</span></code></dt>
+<dd>Platform does not support fadump</dd>
</dl>
</div>
</div>
@@ -137,11 +138,11 @@ kernel will use <cite>opal_mpipl_query_tag</cite> call to retrieve these tags.</
</div>
<div class="section" id="id3">
<h2>Return Values<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_SUCCESS</span></code></dt><dd><p>Operation success</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARAMETER</span></code></dt><dd><p>Invalid parameter</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_SUCCESS</span></code></dt>
+<dd>Operation success</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARAMETER</span></code></dt>
+<dd>Invalid parameter</dd>
</dl>
</div>
</div>
@@ -178,17 +179,16 @@ tag to retrieve metadata information and generate dump.</p>
</div>
<div class="section" id="id5">
<h2>Return Values<a class="headerlink" href="#id5" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_SUCCESS</span></code></dt><dd><p>Operation success</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARAMETER</span></code></dt><dd><p>Invalid parameter</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_SUCCESS</span></code></dt>
+<dd>Operation success</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARAMETER</span></code></dt>
+<dd>Invalid parameter</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -226,15 +226,17 @@ tag to retrieve metadata information and generate dump.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -251,15 +253,14 @@ tag to retrieve metadata information and generate dump.</p>
<li class="right" >
<a href="opal-messages.html" title="OPAL_MESSAGE"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL MPIPL APIs</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-nmmu-set-ptcr-127.html b/doc/opal-api/opal-nmmu-set-ptcr-127.html
index 1739c09..3a603d9 100644
--- a/doc/opal-api/opal-nmmu-set-ptcr-127.html
+++ b/doc/opal-api/opal-nmmu-set-ptcr-127.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_NMMU_SET_PTCR &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_NMMU_SET_PTCR &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-mpipl-173-174.html" title="OPAL MPIPL APIs"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_NMMU_SET_PTCR</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -51,29 +52,28 @@
<span class="n">int64</span> <span class="nf">opal_nmmu_set_ptcr</span><span class="p">(</span><span class="n">uint64</span> <span class="n">chip_id</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">ptcr</span><span class="p">);</span>
</pre></div>
</div>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">uint64</span> <span class="pre">chip_id</span></code></dt><dd><p>either the chip id containing the nest mmu who’s ptcr should be set
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">uint64</span> <span class="pre">chip_id</span></code></dt>
+<dd>either the chip id containing the nest mmu who’s ptcr should be set
or alternatively -1ULL to indicate all nest mmu ptcr’s should be set to
-the same value.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint64</span> <span class="pre">ptcr</span></code></dt><dd><p>ptcr value pointing to either the radix tables or hash tables.</p>
-</dd>
+the same value.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">uint64</span> <span class="pre">ptcr</span></code></dt>
+<dd>ptcr value pointing to either the radix tables or hash tables.</dd>
</dl>
<p>This OPAL call sets up the Nest MMU by pointing it at the radix page
table base or the hash page table base (HTABORG).</p>
<div class="section" id="return-values">
<h2>Return Values<a class="headerlink" href="#return-values" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>the PTCR was updated successful</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>a parameter was incorrect</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>the PTCR was updated successful</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>a parameter was incorrect</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -101,15 +101,17 @@ table base or the hash page table base (HTABORG).</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -126,15 +128,14 @@ table base or the hash page table base (HTABORG).</p>
<li class="right" >
<a href="opal-mpipl-173-174.html" title="OPAL MPIPL APIs"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_NMMU_SET_PTCR</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-npu2-146-147-148.html b/doc/opal-api/opal-npu2-146-147-148.html
index 9a4b6d9..94d8f9e 100644
--- a/doc/opal-api/opal-npu2-146-147-148.html
+++ b/doc/opal-api/opal-npu2-146-147-148.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL NPU2 calls &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL NPU2 calls &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-nmmu-set-ptcr-127.html" title="OPAL_NMMU_SET_PTCR"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL NPU2 calls</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -106,7 +107,6 @@ to 0.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -136,15 +136,17 @@ to 0.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -161,15 +163,14 @@ to 0.</p>
<li class="right" >
<a href="opal-nmmu-set-ptcr-127.html" title="OPAL_NMMU_SET_PTCR"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL NPU2 calls</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-npu2-get-set-relaxed-order-168-169.html b/doc/opal-api/opal-npu2-get-set-relaxed-order-168-169.html
index 4004bfd..c1f7a86 100644
--- a/doc/opal-api/opal-npu2-get-set-relaxed-order-168-169.html
+++ b/doc/opal-api/opal-npu2-get-set-relaxed-order-168-169.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_NPU_SET_RELAXED_ORDER &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_NPU_SET_RELAXED_ORDER &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-npu2-146-147-148.html" title="OPAL NPU2 calls"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_NPU_SET_RELAXED_ORDER</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -54,27 +55,27 @@
<span class="nb">bool</span> <span class="n">request_enabled</span>
</pre></div>
</div>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>OPAL ID of the PHB</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">bdfn</span></code></dt><dd><p>Bus-Device-Function number of the device</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">request_enabled</span></code></dt><dd><p>Requested state of relaxed memory ordering enablement</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>OPAL ID of the PHB</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">bdfn</span></code></dt>
+<dd>Bus-Device-Function number of the device</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">request_enabled</span></code></dt>
+<dd>Requested state of relaxed memory ordering enablement</dd>
</dl>
</div>
<div class="section" id="return-values">
<h2>Return values<a class="headerlink" href="#return-values" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_SUCCESS</span></code></dt><dd><p>Requested state set</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARAMETER</span></code></dt><dd><p>The given phb_id or bdfn is invalid or out of range</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_CONSTRAINED</span></code></dt><dd><p>Relaxed ordering can not be enabled until an enable request is made
-for every device on this PHB.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_RESOURCE</span></code></dt><dd><p>No more relaxed ordering sources are available</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_SUCCESS</span></code></dt>
+<dd>Requested state set</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARAMETER</span></code></dt>
+<dd>The given phb_id or bdfn is invalid or out of range</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_CONSTRAINED</span></code></dt>
+<dd>Relaxed ordering can not be enabled until an enable request is made
+for every device on this PHB.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_RESOURCE</span></code></dt>
+<dd>No more relaxed ordering sources are available</dd>
</dl>
</div>
</div>
@@ -87,25 +88,24 @@ for every device on this PHB.</p>
<span class="n">uint64_t</span> <span class="n">bdfn</span>
</pre></div>
</div>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>OPAL ID of the PHB</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">bdfn</span></code></dt><dd><p>Bus-Device-Function number of the device</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>OPAL ID of the PHB</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">bdfn</span></code></dt>
+<dd>Bus-Device-Function number of the device</dd>
</dl>
</div>
<div class="section" id="id4">
<h2>Return values<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h2>
<p>On success, the current relaxed ordering state is returned.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARAMETER</span></code></dt><dd><p>The given phb_id or bdfn is invalid.</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARAMETER</span></code></dt>
+<dd>The given phb_id or bdfn is invalid.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -139,15 +139,17 @@ for every device on this PHB.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -164,15 +166,14 @@ for every device on this PHB.</p>
<li class="right" >
<a href="opal-npu2-146-147-148.html" title="OPAL NPU2 calls"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_NPU_SET_RELAXED_ORDER</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-npu2-opencapi-159-160-161-171-172.html b/doc/opal-api/opal-npu2-opencapi-159-160-161-171-172.html
index b239978..5b36511 100644
--- a/doc/opal-api/opal-npu2-opencapi-159-160-161-171-172.html
+++ b/doc/opal-api/opal-npu2-opencapi-159-160-161-171-172.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_NPU_SPA_SETUP &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_NPU_SPA_SETUP &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-npu2-get-set-relaxed-order-168-169.html" title="OPAL_NPU_SET_RELAXED_ORDER"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_NPU_SPA_SETUP</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -59,26 +60,26 @@ mask (used for PASID to PE handle conversion) to <cite>PE_mask</cite>.</p>
<span class="n">uint64_t</span> <span class="n">PE_mask</span>
</pre></div>
</div>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>OPAL ID of PHB</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">bdfn</span></code></dt><dd><p>Bus-Device-Function number of OpenCAPI AFU</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">addr</span></code></dt><dd><p>Address of Shared Process Area, or NULL to disable SPA. Must be 4K aligned.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">PE_mask</span></code></dt><dd><p>Process Element mask for PASID to PE handle conversion</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>OPAL ID of PHB</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">bdfn</span></code></dt>
+<dd>Bus-Device-Function number of OpenCAPI AFU</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">addr</span></code></dt>
+<dd>Address of Shared Process Area, or NULL to disable SPA. Must be 4K aligned.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">PE_mask</span></code></dt>
+<dd>Process Element mask for PASID to PE handle conversion</dd>
</dl>
</div>
<div class="section" id="return-values">
<h2>Return Values<a class="headerlink" href="#return-values" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt>OPAL_SUCCESS</dt><dd><p>SPAP and PE mask were successfully set</p>
-</dd>
-<dt>OPAL_PARAMETER</dt><dd><p>A provided parameter was invalid</p>
-</dd>
-<dt>OPAL_BUSY</dt><dd><p>SPA is already enabled (or if addr is NULL, SPA is already disabled)</p>
-</dd>
+<dl class="docutils">
+<dt>OPAL_SUCCESS</dt>
+<dd>SPAP and PE mask were successfully set</dd>
+<dt>OPAL_PARAMETER</dt>
+<dd>A provided parameter was invalid</dd>
+<dt>OPAL_BUSY</dt>
+<dd>SPA is already enabled (or if addr is NULL, SPA is already disabled)</dd>
</dl>
</div>
</div>
@@ -93,24 +94,24 @@ mask (used for PASID to PE handle conversion) to <cite>PE_mask</cite>.</p>
<span class="n">uint64_t</span> <span class="n">PE_handle</span>
</pre></div>
</div>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>OPAL ID of PHB</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">bdfn</span></code></dt><dd><p>Bus-Device-Function number of OpenCAPI AFU</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">PE_handle</span></code></dt><dd><p>Handle of Process Element being cleared from SPA cache</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>OPAL ID of PHB</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">bdfn</span></code></dt>
+<dd>Bus-Device-Function number of OpenCAPI AFU</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">PE_handle</span></code></dt>
+<dd>Handle of Process Element being cleared from SPA cache</dd>
</dl>
</div>
<div class="section" id="id4">
<h2>Return Values<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt>OPAL_SUCCESS</dt><dd><p>PE was successfully cleared from SPA cache</p>
-</dd>
-<dt>OPAL_PARAMETER</dt><dd><p>A provided parameter was invalid</p>
-</dd>
-<dt>OPAL_BUSY</dt><dd><p>XSLO is currently invalidating a previously requested entry</p>
-</dd>
+<dl class="docutils">
+<dt>OPAL_SUCCESS</dt>
+<dd>PE was successfully cleared from SPA cache</dd>
+<dt>OPAL_PARAMETER</dt>
+<dd>A provided parameter was invalid</dd>
+<dt>OPAL_BUSY</dt>
+<dd>XSLO is currently invalidating a previously requested entry</dd>
</dl>
</div>
</div>
@@ -127,27 +128,27 @@ mask (used for PASID to PE handle conversion) to <cite>PE_mask</cite>.</p>
<span class="nb">int</span> <span class="n">rate_sz</span>
</pre></div>
</div>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>OPAL ID of PHB</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">bdfn</span></code></dt><dd><p>Bus-Device-Function number of OpenCAPI AFU</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">capabilities</span></code></dt><dd><p>Bitmap of TL templates the device can receive</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">rate_phys</span></code></dt><dd><p>Physical address of rates buffer</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">rate_sz</span></code></dt><dd><p>Size of rates buffer (must be equal to 32)</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>OPAL ID of PHB</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">bdfn</span></code></dt>
+<dd>Bus-Device-Function number of OpenCAPI AFU</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">capabilities</span></code></dt>
+<dd>Bitmap of TL templates the device can receive</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">rate_phys</span></code></dt>
+<dd>Physical address of rates buffer</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">rate_sz</span></code></dt>
+<dd>Size of rates buffer (must be equal to 32)</dd>
</dl>
</div>
<div class="section" id="id7">
<h2>Return Values<a class="headerlink" href="#id7" title="Permalink to this headline">¶</a></h2>
-<dl>
-<dt>OPAL_SUCCESS</dt><dd><p>OTL configuration was successfully updated</p>
-</dd>
-<dt>OPAL_PARAMETER</dt><dd><blockquote>
-<div><p>A provided parameter was invalid</p>
-</div></blockquote>
+<dl class="docutils">
+<dt>OPAL_SUCCESS</dt>
+<dd>OTL configuration was successfully updated</dd>
+<dt>OPAL_PARAMETER</dt>
+<dd><blockquote class="first last">
+<div>A provided parameter was invalid</div></blockquote>
</dd>
</dl>
</div>
@@ -166,26 +167,26 @@ can be allocated.</p>
<span class="n">uint64_t</span> <span class="o">*</span><span class="n">bar</span>
</pre></div>
</div>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>OPAL ID of PHB</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">bdfn</span></code></dt><dd><p>Bus-Device-Function number of OpenCAPI AFU</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">size</span></code></dt><dd><p>Size of requested LPC memory area in bytes</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">bar</span></code></dt><dd><p>Pointer to variable where base of LPC memory area will be returned</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>OPAL ID of PHB</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">bdfn</span></code></dt>
+<dd>Bus-Device-Function number of OpenCAPI AFU</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">size</span></code></dt>
+<dd>Size of requested LPC memory area in bytes</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">bar</span></code></dt>
+<dd>Pointer to variable where base of LPC memory area will be returned</dd>
</dl>
</div>
<div class="section" id="id10">
<h2>Return Values<a class="headerlink" href="#id10" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt>OPAL_SUCCESS</dt><dd><p>BAR setup completed successfully</p>
-</dd>
-<dt>OPAL_PARAMETER</dt><dd><p>A provided parameter was invalid</p>
-</dd>
-<dt>OPAL_RESOURCE</dt><dd><p>The BAR could not be assigned due to limitations</p>
-</dd>
+<dl class="docutils">
+<dt>OPAL_SUCCESS</dt>
+<dd>BAR setup completed successfully</dd>
+<dt>OPAL_PARAMETER</dt>
+<dd>A provided parameter was invalid</dd>
+<dt>OPAL_RESOURCE</dt>
+<dd>The BAR could not be assigned due to limitations</dd>
</dl>
</div>
</div>
@@ -199,27 +200,26 @@ can be allocated.</p>
<span class="n">uint32_t</span> <span class="n">bdfn</span>
</pre></div>
</div>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>OPAL ID of PHB</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">bdfn</span></code></dt><dd><p>Bus-Device-Function number of OpenCAPI AFU</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>OPAL ID of PHB</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">bdfn</span></code></dt>
+<dd>Bus-Device-Function number of OpenCAPI AFU</dd>
</dl>
</div>
<div class="section" id="id13">
<h2>Return Values<a class="headerlink" href="#id13" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt>OPAL_SUCCESS</dt><dd><p>BAR setup completed successfully</p>
-</dd>
-<dt>OPAL_PARAMETER</dt><dd><p>A provided parameter was invalid, or the specified device does not currently
-have LPC memory assigned</p>
-</dd>
+<dl class="docutils">
+<dt>OPAL_SUCCESS</dt>
+<dd>BAR setup completed successfully</dd>
+<dt>OPAL_PARAMETER</dt>
+<dd>A provided parameter was invalid, or the specified device does not currently
+have LPC memory assigned</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -268,15 +268,17 @@ have LPC memory assigned</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -293,15 +295,14 @@ have LPC memory assigned</p>
<li class="right" >
<a href="opal-npu2-get-set-relaxed-order-168-169.html" title="OPAL_NPU_SET_RELAXED_ORDER"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_NPU_SPA_SETUP</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-nvram-read-write-7-8.html b/doc/opal-api/opal-nvram-read-write-7-8.html
index 576b4c6..355b4ed 100644
--- a/doc/opal-api/opal-nvram-read-write-7-8.html
+++ b/doc/opal-api/opal-nvram-read-write-7-8.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL NVRAM &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL NVRAM &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-npu2-opencapi-159-160-161-171-172.html" title="OPAL_NPU_SPA_SETUP"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL NVRAM</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -55,7 +56,7 @@ neither does 8.4.1.2 “DASD Spin-up Control”. Not that the RTAS calls of
<p>LoPAPR has a minimum requirement of 8KB of Non-Volatile Memory. While this
requirement carries over, it’s important to note that historically all OPAL
systems have had roughly 500kb of NVRAM.</p>
-<p>See <a class="reference internal" href="../device-tree/ibm%2Copal/nvram.html#device-tree-ibm-opal-nvram"><span class="std std-ref">nvram Device Tree Node</span></a> for details on how NVRAM is represented
+<p>See <a class="reference internal" href="../device-tree/ibm,opal/nvram.html#device-tree-ibm-opal-nvram"><span class="std std-ref">nvram Device Tree Node</span></a> for details on how NVRAM is represented
in the device tree. It’s fairly simple, it looks like this:</p>
<div class="highlight-dts notranslate"><div class="highlight"><pre><span></span><span class="nc">nvram</span> <span class="p">{</span>
<span class="nf">compatible</span> <span class="o">=</span> <span class="s">&quot;ibm,opal-nvram&quot;</span><span class="p">;</span>
@@ -84,24 +85,24 @@ from storage.</p>
<span class="n">uint64_t</span> <span class="n">offset</span>
</pre></div>
</div>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">buffer</span></code></dt><dd><p>the data from nvram will be copied to <code class="docutils literal notranslate"><span class="pre">buffer</span></code></p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">size</span></code></dt><dd><p>the data of size <code class="docutils literal notranslate"><span class="pre">size</span></code> will be copied</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">offset</span></code></dt><dd><p>the data will be copied from address equal to base <code class="docutils literal notranslate"><span class="pre">nvram_image</span></code> plus <code class="docutils literal notranslate"><span class="pre">offset</span></code></p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">buffer</span></code></dt>
+<dd>the data from nvram will be copied to <code class="docutils literal notranslate"><span class="pre">buffer</span></code></dd>
+<dt><code class="docutils literal notranslate"><span class="pre">size</span></code></dt>
+<dd>the data of size <code class="docutils literal notranslate"><span class="pre">size</span></code> will be copied</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">offset</span></code></dt>
+<dd>the data will be copied from address equal to base <code class="docutils literal notranslate"><span class="pre">nvram_image</span></code> plus <code class="docutils literal notranslate"><span class="pre">offset</span></code></dd>
</dl>
</div>
<div class="section" id="return-values">
<h3>Return Values<a class="headerlink" href="#return-values" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>data from nvram to memory <code class="docutils literal notranslate"><span class="pre">buffer</span></code> copied successfully</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>a parameter <code class="docutils literal notranslate"><span class="pre">offset</span></code> or <code class="docutils literal notranslate"><span class="pre">size</span></code> was incorrect</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>either nvram is not initialized or permanent error related to nvram hardware.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>data from nvram to memory <code class="docutils literal notranslate"><span class="pre">buffer</span></code> copied successfully</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>a parameter <code class="docutils literal notranslate"><span class="pre">offset</span></code> or <code class="docutils literal notranslate"><span class="pre">size</span></code> was incorrect</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>either nvram is not initialized or permanent error related to nvram hardware.</dd>
</dl>
</div>
</div>
@@ -121,35 +122,34 @@ from memory <code class="docutils literal notranslate"><span class="pre">buffer<
<span class="n">uint64_t</span> <span class="n">offset</span>
</pre></div>
</div>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">buffer</span></code></dt><dd><p>data from <code class="docutils literal notranslate"><span class="pre">buffer</span></code> will be copied to nvram</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">size</span></code></dt><dd><p>the data of size <code class="docutils literal notranslate"><span class="pre">size</span></code> will be copied</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">offset</span></code></dt><dd><p>the data will be copied to address which is equal to base <code class="docutils literal notranslate"><span class="pre">nvram_image</span></code> plus <code class="docutils literal notranslate"><span class="pre">offset</span></code></p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">buffer</span></code></dt>
+<dd>data from <code class="docutils literal notranslate"><span class="pre">buffer</span></code> will be copied to nvram</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">size</span></code></dt>
+<dd>the data of size <code class="docutils literal notranslate"><span class="pre">size</span></code> will be copied</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">offset</span></code></dt>
+<dd>the data will be copied to address which is equal to base <code class="docutils literal notranslate"><span class="pre">nvram_image</span></code> plus <code class="docutils literal notranslate"><span class="pre">offset</span></code></dd>
</dl>
</div>
<div class="section" id="id4">
<h3>Return Values<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>data from memory <code class="docutils literal notranslate"><span class="pre">buffer</span></code> to actual nvram_image copied successfully</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>a parameter <code class="docutils literal notranslate"><span class="pre">offset</span></code> or <code class="docutils literal notranslate"><span class="pre">size</span></code> was incorrect</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>either nvram is not initialized or permanent error related to nvram hardware.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt><dd><p>OPAL is currently busy, retry the <a class="reference internal" href="#opal-write-nvram"><span class="std std-ref">OPAL_WRITE_NVRAM</span></a> call.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a></dt><dd><p>OPAL is currently busy, call <a class="reference internal" href="opal-poll-events.html#opal-poll-events"><span class="std std-ref">OPAL_POLL_EVENTS</span></a> and then retry <a class="reference internal" href="#opal-write-nvram"><span class="std std-ref">OPAL_WRITE_NVRAM</span></a></p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>data from memory <code class="docutils literal notranslate"><span class="pre">buffer</span></code> to actual nvram_image copied successfully</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>a parameter <code class="docutils literal notranslate"><span class="pre">offset</span></code> or <code class="docutils literal notranslate"><span class="pre">size</span></code> was incorrect</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>either nvram is not initialized or permanent error related to nvram hardware.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt>
+<dd>OPAL is currently busy, retry the <a class="reference internal" href="#opal-write-nvram"><span class="std std-ref">OPAL_WRITE_NVRAM</span></a> call.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a></dt>
+<dd>OPAL is currently busy, call <a class="reference internal" href="opal-poll-events.html#opal-poll-events"><span class="std std-ref">OPAL_POLL_EVENTS</span></a> and then retry <a class="reference internal" href="#opal-write-nvram"><span class="std std-ref">OPAL_WRITE_NVRAM</span></a></dd>
</dl>
</div>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -186,15 +186,17 @@ from memory <code class="docutils literal notranslate"><span class="pre">buffer<
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -211,15 +213,14 @@ from memory <code class="docutils literal notranslate"><span class="pre">buffer<
<li class="right" >
<a href="opal-npu2-opencapi-159-160-161-171-172.html" title="OPAL_NPU_SPA_SETUP"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL NVRAM</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-param-89-90.html b/doc/opal-api/opal-param-89-90.html
index f75c1bf..20b9acf 100644
--- a/doc/opal-api/opal-param-89-90.html
+++ b/doc/opal-api/opal-param-89-90.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Get/Set System Parameters &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Get/Set System Parameters &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-nvram-read-write-7-8.html" title="OPAL NVRAM"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Get/Set System Parameters</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@ firmware. However, some platforms may have other options not easily (or
possible to be) exposed over IPMI. These OPAL calls will read (and write)
these parameters.</p>
<p>The list of parameters is set at boot time, and is represented in the device
-tree (see <a class="reference internal" href="../device-tree/ibm%2Copal/sysparams.html#device-tree-ibm-opal-sysparams"><span class="std std-ref">sysparams</span></a> for details).</p>
+tree (see <a class="reference internal" href="../device-tree/ibm,opal/sysparams.html#device-tree-ibm-opal-sysparams"><span class="std std-ref">sysparams</span></a> for details).</p>
<p>Currently only implemented on FSP based systems.</p>
<div class="section" id="opal-get-param">
<span id="id1"></span><h2>OPAL_GET_PARAM<a class="headerlink" href="#opal-get-param" title="Permalink to this headline">¶</a></h2>
@@ -65,23 +66,23 @@ tree (see <a class="reference internal" href="../device-tree/ibm%2Copal/sysparam
<p>Get the current setting of <cite>param_id</cite>. This is an asynchronous call as OPAL may
need to communicate with a service processor. The <cite>param_id</cite> and <cite>length</cite> are
described in the device tree for each parameter (see
-<a class="reference internal" href="../device-tree/ibm%2Copal/sysparams.html#device-tree-ibm-opal-sysparams"><span class="std std-ref">sysparams</span></a> for details).</p>
+<a class="reference internal" href="../device-tree/ibm,opal/sysparams.html#device-tree-ibm-opal-sysparams"><span class="std std-ref">sysparams</span></a> for details).</p>
<div class="section" id="returns">
<h3>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>Hardware issue prevents retreiving parameter. e.g. FSP is offline or
-absent.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid <cite>param_id</cite></p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-permission"><span class="std std-ref">OPAL_PERMISSION</span></a></dt><dd><p>Not allowed to read parameter.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-no-mem"><span class="std std-ref">OPAL_NO_MEM</span></a></dt><dd><p>Not enough free memory in OPAL to process request.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>Other internal OPAL error</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt><dd><p>Request is submitted.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>Hardware issue prevents retreiving parameter. e.g. FSP is offline or
+absent.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid <cite>param_id</cite></dd>
+<dt><a class="reference internal" href="return-codes.html#opal-permission"><span class="std std-ref">OPAL_PERMISSION</span></a></dt>
+<dd>Not allowed to read parameter.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-no-mem"><span class="std std-ref">OPAL_NO_MEM</span></a></dt>
+<dd>Not enough free memory in OPAL to process request.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>Other internal OPAL error</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt>
+<dd>Request is submitted.</dd>
</dl>
</div>
</div>
@@ -96,30 +97,29 @@ absent.</p>
<p>Write a new setting for <cite>param_id</cite>. This is an asynchronous call as OPAL may
need to communicate with a service processor. The <cite>param_id</cite> and <cite>length</cite> are
described in the device tree for each parameter (see
-<a class="reference internal" href="../device-tree/ibm%2Copal/sysparams.html#device-tree-ibm-opal-sysparams"><span class="std std-ref">sysparams</span></a> for details).</p>
+<a class="reference internal" href="../device-tree/ibm,opal/sysparams.html#device-tree-ibm-opal-sysparams"><span class="std std-ref">sysparams</span></a> for details).</p>
<div class="section" id="id3">
<h3>Returns<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>Hardware issue prevents retreiving parameter. e.g. FSP is offline or
-absent.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid <cite>param_id</cite></p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-permission"><span class="std std-ref">OPAL_PERMISSION</span></a></dt><dd><p>Not allowed to write parameter.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-no-mem"><span class="std std-ref">OPAL_NO_MEM</span></a></dt><dd><p>Not enough free memory in OPAL to process request.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>Other internal OPAL error</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt><dd><p>Request is submitted.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>Hardware issue prevents retreiving parameter. e.g. FSP is offline or
+absent.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid <cite>param_id</cite></dd>
+<dt><a class="reference internal" href="return-codes.html#opal-permission"><span class="std std-ref">OPAL_PERMISSION</span></a></dt>
+<dd>Not allowed to write parameter.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-no-mem"><span class="std std-ref">OPAL_NO_MEM</span></a></dt>
+<dd>Not enough free memory in OPAL to process request.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>Other internal OPAL error</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt>
+<dd>Request is submitted.</dd>
</dl>
</div>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -154,15 +154,17 @@ absent.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -179,15 +181,14 @@ absent.</p>
<li class="right" >
<a href="opal-nvram-read-write-7-8.html" title="OPAL NVRAM"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Get/Set System Parameters</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-config-read-write-13-14-15-16-17-18.html b/doc/opal-api/opal-pci-config-read-write-13-14-15-16-17-18.html
index 8ce7185..bf6b64a 100644
--- a/doc/opal-api/opal-pci-config-read-write-13-14-15-16-17-18.html
+++ b/doc/opal-api/opal-pci-config-read-write-13-14-15-16-17-18.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL PCI Config Space Access &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL PCI Config Space Access &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-param-89-90.html" title="Get/Set System Parameters"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL PCI Config Space Access</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -49,22 +50,22 @@
<p>PCI Config space is read or written to through OPAL calls. All of these calls</p>
<div class="section" id="opal-pci-config-return-codes">
<span id="id1"></span><h2>OPAL_PCI_CONFIG_* Return codes<a class="headerlink" href="#opal-pci-config-return-codes" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Read/Write operation completed successfully.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid parameter. e.g. invalid <cite>phb_id</cite> or <cite>bus_dev_func</cite>.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>Invalid request for the hardware either permanently or in its
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Read/Write operation completed successfully.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid parameter. e.g. invalid <cite>phb_id</cite> or <cite>bus_dev_func</cite>.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>Invalid request for the hardware either permanently or in its
current state. Can also be a hardware problem, e.g. fenced or
-config access is currently blocked.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>Unsupported operation. For example, phb4 doesn’t support ASB config
-space writes.</p>
-</dd>
-<dt>Other return codes</dt><dd><p>Should be handled gracefully. For example, for any return code other than
+config access is currently blocked.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>Unsupported operation. For example, phb4 doesn’t support ASB config
+space writes.</dd>
+<dt>Other return codes</dt>
+<dd>Should be handled gracefully. For example, for any return code other than
<a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a>, Linux will return all bits set for the specified size
-for a read, and will ignore the error on a write.</p>
-</dd>
+for a read, and will ignore the error on a write.</dd>
</dl>
<div class="section" id="opal-pci-config-read-byte">
<span id="id2"></span><h3>OPAL_PCI_CONFIG_READ_BYTE<a class="headerlink" href="#opal-pci-config-read-byte" title="Permalink to this headline">¶</a></h3>
@@ -148,7 +149,6 @@ see <a class="reference internal" href="#opal-pci-config-return-codes"><span cla
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -184,15 +184,17 @@ see <a class="reference internal" href="#opal-pci-config-return-codes"><span cla
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -209,15 +211,14 @@ see <a class="reference internal" href="#opal-pci-config-return-codes"><span cla
<li class="right" >
<a href="opal-param-89-90.html" title="Get/Set System Parameters"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL PCI Config Space Access</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-eeh-freeze-clear-26.html b/doc/opal-api/opal-pci-eeh-freeze-clear-26.html
index 529bbe7..382d7b4 100644
--- a/doc/opal-api/opal-pci-eeh-freeze-clear-26.html
+++ b/doc/opal-api/opal-pci-eeh-freeze-clear-26.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_EEH_FREEZE_CLEAR &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_EEH_FREEZE_CLEAR &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-config-read-write-13-14-15-16-17-18.html" title="OPAL PCI Config Space Access"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_EEH_FREEZE_CLEAR</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -63,22 +64,21 @@
</div>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success!</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid PHB</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>PHB doesn’t support this operation.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>Hardware issue prevents completing operation. OPAL may have detected it
-being broken.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success!</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid PHB</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>PHB doesn’t support this operation.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>Hardware issue prevents completing operation. OPAL may have detected it
+being broken.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -106,15 +106,17 @@ being broken.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -131,15 +133,14 @@ being broken.</p>
<li class="right" >
<a href="opal-pci-config-read-write-13-14-15-16-17-18.html" title="OPAL PCI Config Space Access"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_EEH_FREEZE_CLEAR</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-eeh-freeze-set-97.html b/doc/opal-api/opal-pci-eeh-freeze-set-97.html
index 6841b4c..1cbd68d 100644
--- a/doc/opal-api/opal-pci-eeh-freeze-set-97.html
+++ b/doc/opal-api/opal-pci-eeh-freeze-set-97.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_EEH_FREEZE_SET &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_EEH_FREEZE_SET &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-eeh-freeze-clear-26.html" title="OPAL_PCI_EEH_FREEZE_CLEAR"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_EEH_FREEZE_SET</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -63,19 +64,18 @@
</div>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid parameter.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>Unsupported operation</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>Hardware in a bad state.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid parameter.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>Unsupported operation</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>Hardware in a bad state.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -103,15 +103,17 @@
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -128,15 +130,14 @@
<li class="right" >
<a href="opal-pci-eeh-freeze-clear-26.html" title="OPAL_PCI_EEH_FREEZE_CLEAR"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_EEH_FREEZE_SET</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-eeh-freeze-status-23.html b/doc/opal-api/opal-pci-eeh-freeze-status-23.html
index 204d518..03baa46 100644
--- a/doc/opal-api/opal-pci-eeh-freeze-status-23.html
+++ b/doc/opal-api/opal-pci-eeh-freeze-status-23.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_EEH_FREEZE_STATUS &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_EEH_FREEZE_STATUS &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-eeh-freeze-set-97.html" title="OPAL_PCI_EEH_FREEZE_SET"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_EEH_FREEZE_STATUS</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -74,29 +75,29 @@
</pre></div>
</div>
<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>The <code class="docutils literal notranslate"><span class="pre">phb_status</span></code> parameter is deprecated as
+<p class="first admonition-title">Note</p>
+<p class="last">The <code class="docutils literal notranslate"><span class="pre">phb_status</span></code> parameter is deprecated as
of <a class="reference internal" href="../release-notes/skiboot-6.3-rc1.html#skiboot-6-3-rc1"><span class="std std-ref">skiboot-6.3-rc1</span></a>. Linux only ever passed in NULL,
and this was safe. Supplying a pointer was previously <em>unsafe</em>.
Always pass NULL.</p>
</div>
<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>There once was a <a class="reference internal" href="#opal-pci-eeh-freeze-status2"><span class="std std-ref">OPAL_PCI_EEH_FREEZE_STATUS2</span></a> call, but it
+<p class="first admonition-title">Note</p>
+<p class="last">There once was a <a class="reference internal" href="#opal-pci-eeh-freeze-status2"><span class="std std-ref">OPAL_PCI_EEH_FREEZE_STATUS2</span></a> call, but it
was introduced in firmware and never used by any OS, so it has since
been removed from OPAL.</p>
</div>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid address or PHB.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>PHB does not support this operation.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>Hardware prohibited getting status, OPAL maybe marked it as broken.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Retreived status.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid address or PHB.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>PHB does not support this operation.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>Hardware prohibited getting status, OPAL maybe marked it as broken.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Retreived status.</dd>
</dl>
</div>
</div>
@@ -114,7 +115,6 @@ been used.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -143,15 +143,17 @@ been used.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -168,15 +170,14 @@ been used.</p>
<li class="right" >
<a href="opal-pci-eeh-freeze-set-97.html" title="OPAL_PCI_EEH_FREEZE_SET"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_EEH_FREEZE_STATUS</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-err-inject-96.html b/doc/opal-api/opal-pci-err-inject-96.html
index a6f7d12..3d90cd6 100644
--- a/doc/opal-api/opal-pci-err-inject-96.html
+++ b/doc/opal-api/opal-pci-err-inject-96.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_ERR_INJECT &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_ERR_INJECT &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-eeh-freeze-status-23.html" title="OPAL_PCI_EEH_FREEZE_STATUS"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_ERR_INJECT</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -85,20 +86,19 @@
<p>Inject an error, used to test OS and OPAL EEH handling.</p>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Error injected successfully.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid argument.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>PHB doesn’t support error injection or the specific error attempting to
-be injected.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Error injected successfully.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid argument.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>PHB doesn’t support error injection or the specific error attempting to
+be injected.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -126,15 +126,17 @@ be injected.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -151,15 +153,14 @@ be injected.</p>
<li class="right" >
<a href="opal-pci-eeh-freeze-status-23.html" title="OPAL_PCI_EEH_FREEZE_STATUS"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_ERR_INJECT</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-get-hub-diag-data-50.html b/doc/opal-api/opal-pci-get-hub-diag-data-50.html
index 1efcb0b..e521579 100644
--- a/doc/opal-api/opal-pci-get-hub-diag-data-50.html
+++ b/doc/opal-api/opal-pci-get-hub-diag-data-50.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_GET_HUB_DIAG_DATA &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_GET_HUB_DIAG_DATA &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-err-inject-96.html" title="OPAL_PCI_ERR_INJECT"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_GET_HUB_DIAG_DATA</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -60,24 +61,23 @@ is <cite>OPAL_EEH_SEV_INF</cite>, then the OS should call <a class="reference in
to retreive diagnostic data to log appropriately.</p>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Diagnostic data copied successfully</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid address, invalid hub ID, or insufficient space in buffer for
-diagnostic data.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>hub doesn’t support retreiving diagnostic data.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-closed"><span class="std std-ref">OPAL_CLOSED</span></a></dt><dd><p>No pending error.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>Something went wrong.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Diagnostic data copied successfully</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid address, invalid hub ID, or insufficient space in buffer for
+diagnostic data.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>hub doesn’t support retreiving diagnostic data.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-closed"><span class="std std-ref">OPAL_CLOSED</span></a></dt>
+<dd>No pending error.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>Something went wrong.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -105,15 +105,17 @@ diagnostic data.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -130,15 +132,14 @@ diagnostic data.</p>
<li class="right" >
<a href="opal-pci-err-inject-96.html" title="OPAL_PCI_ERR_INJECT"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_GET_HUB_DIAG_DATA</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-get-phb-diag-data2-64.html b/doc/opal-api/opal-pci-get-phb-diag-data2-64.html
index 017e833..20d5551 100644
--- a/doc/opal-api/opal-pci-get-phb-diag-data2-64.html
+++ b/doc/opal-api/opal-pci-get-phb-diag-data2-64.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_GET_PHB_DIAG_DATA2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_GET_PHB_DIAG_DATA2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-get-hub-diag-data-50.html" title="OPAL_PCI_GET_HUB_DIAG_DATA"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_GET_PHB_DIAG_DATA2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -68,14 +69,14 @@
<span class="n">OPAL_PHB4_NUM_PEST_REGS</span> <span class="o">=</span> <span class="mi">512</span>
<span class="p">};</span>
-<span class="k">struct</span> <span class="nc">OpalIoPhbErrorCommon</span> <span class="p">{</span>
+<span class="k">struct</span> <span class="n">OpalIoPhbErrorCommon</span> <span class="p">{</span>
<span class="n">__be32</span> <span class="n">version</span><span class="p">;</span>
<span class="n">__be32</span> <span class="n">ioType</span><span class="p">;</span>
<span class="n">__be32</span> <span class="n">len</span><span class="p">;</span>
<span class="p">};</span>
-<span class="k">struct</span> <span class="nc">OpalIoP7IOCPhbErrorData</span> <span class="p">{</span>
- <span class="k">struct</span> <span class="nc">OpalIoPhbErrorCommon</span> <span class="n">common</span><span class="p">;</span>
+<span class="k">struct</span> <span class="n">OpalIoP7IOCPhbErrorData</span> <span class="p">{</span>
+ <span class="k">struct</span> <span class="n">OpalIoPhbErrorCommon</span> <span class="n">common</span><span class="p">;</span>
<span class="n">__be32</span> <span class="n">brdgCtl</span><span class="p">;</span>
@@ -133,8 +134,8 @@
<span class="n">__be64</span> <span class="n">pestB</span><span class="p">[</span><span class="n">OPAL_P7IOC_NUM_PEST_REGS</span><span class="p">];</span>
<span class="p">};</span>
-<span class="k">struct</span> <span class="nc">OpalIoPhb3ErrorData</span> <span class="p">{</span>
- <span class="k">struct</span> <span class="nc">OpalIoPhbErrorCommon</span> <span class="n">common</span><span class="p">;</span>
+<span class="k">struct</span> <span class="n">OpalIoPhb3ErrorData</span> <span class="p">{</span>
+ <span class="k">struct</span> <span class="n">OpalIoPhbErrorCommon</span> <span class="n">common</span><span class="p">;</span>
<span class="n">__be32</span> <span class="n">brdgCtl</span><span class="p">;</span>
@@ -195,8 +196,8 @@
<span class="n">__be64</span> <span class="n">pestB</span><span class="p">[</span><span class="n">OPAL_PHB3_NUM_PEST_REGS</span><span class="p">];</span>
<span class="p">};</span>
-<span class="k">struct</span> <span class="nc">OpalIoPhb4ErrorData</span> <span class="p">{</span>
- <span class="k">struct</span> <span class="nc">OpalIoPhbErrorCommon</span> <span class="n">common</span><span class="p">;</span>
+<span class="k">struct</span> <span class="n">OpalIoPhb4ErrorData</span> <span class="p">{</span>
+ <span class="k">struct</span> <span class="n">OpalIoPhbErrorCommon</span> <span class="n">common</span><span class="p">;</span>
<span class="n">__be32</span> <span class="n">brdgCtl</span><span class="p">;</span>
@@ -279,13 +280,13 @@ is coming in.</p>
require less OS support.</p>
<div class="section" id="parameters">
<h2>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">phb_id</span></code></dt><dd><p>the ID of the PHB you want to retrieve data from</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">void</span> <span class="pre">*diag_buffer</span></code></dt><dd><p>an allocated buffer to store diag data in</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">diag_buffer_len</span></code></dt><dd><p>size in bytes of the diag buffer</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">phb_id</span></code></dt>
+<dd>the ID of the PHB you want to retrieve data from</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">void</span> <span class="pre">*diag_buffer</span></code></dt>
+<dd>an allocated buffer to store diag data in</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">diag_buffer_len</span></code></dt>
+<dd>size in bytes of the diag buffer</dd>
</dl>
</div>
<div class="section" id="calling">
@@ -298,21 +299,20 @@ diagnostics, defined in include/opal-api.h as <code class="docutils literal notr
</div>
<div class="section" id="return-codes">
<h2>Return Codes<a class="headerlink" href="#return-codes" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Diagnostic data has been retrieved and stored successfully</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>The given buffer is too small to store the diagnostic data</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>The PHB is in a broken state and its data cannot be retreived</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>Diagnostic data is not implemented for this PHB type</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Diagnostic data has been retrieved and stored successfully</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>The given buffer is too small to store the diagnostic data</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>The PHB is in a broken state and its data cannot be retreived</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>Diagnostic data is not implemented for this PHB type</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -342,15 +342,17 @@ diagnostics, defined in include/opal-api.h as <code class="docutils literal notr
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -367,15 +369,14 @@ diagnostics, defined in include/opal-api.h as <code class="docutils literal notr
<li class="right" >
<a href="opal-pci-get-hub-diag-data-50.html" title="OPAL_PCI_GET_HUB_DIAG_DATA"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_GET_PHB_DIAG_DATA2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-get-power-state-120.html b/doc/opal-api/opal-pci-get-power-state-120.html
index bf5c44f..b34d6c4 100644
--- a/doc/opal-api/opal-pci-get-power-state-120.html
+++ b/doc/opal-api/opal-pci-get-power-state-120.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_GET_POWER_STATE &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_GET_POWER_STATE &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-get-phb-diag-data2-64.html" title="OPAL_PCI_GET_PHB_DIAG_DATA2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_GET_POWER_STATE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -54,11 +55,11 @@
<p>Get PCI slot power state</p>
<div class="section" id="parameter">
<h2>Parameter<a class="headerlink" href="#parameter" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">id</span></code></dt><dd><p>PCI slot ID</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">data</span></code></dt><dd><p>memory buffer pointer for power state</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">id</span></code></dt>
+<dd>PCI slot ID</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">data</span></code></dt>
+<dd>memory buffer pointer for power state</dd>
</dl>
</div>
<div class="section" id="calling">
@@ -68,19 +69,18 @@ in buffer pointed by &#64;data.</p>
</div>
<div class="section" id="return-codes">
<h2>Return Codes<a class="headerlink" href="#return-codes" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>PCI slot’s power state is retrieved successfully</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>The indicated PCI slot isn’t found</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>Power state retrieval not supported on the PCI slot</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>PCI slot’s power state is retrieved successfully</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>The indicated PCI slot isn’t found</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>Power state retrieval not supported on the PCI slot</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -110,15 +110,17 @@ in buffer pointed by &#64;data.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -135,15 +137,14 @@ in buffer pointed by &#64;data.</p>
<li class="right" >
<a href="opal-pci-get-phb-diag-data2-64.html" title="OPAL_PCI_GET_PHB_DIAG_DATA2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_GET_POWER_STATE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-get-presence-state-119.html b/doc/opal-api/opal-pci-get-presence-state-119.html
index 325eb45..71845e2 100644
--- a/doc/opal-api/opal-pci-get-presence-state-119.html
+++ b/doc/opal-api/opal-pci-get-presence-state-119.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_GET_PRESENCE_STATE &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_GET_PRESENCE_STATE &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-get-power-state-120.html" title="OPAL_PCI_GET_POWER_STATE"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_GET_PRESENCE_STATE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -49,11 +50,11 @@
<p>Get PCI slot presence state</p>
<div class="section" id="parameters">
<h2>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">id</span></code></dt><dd><p>PCI slot ID</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">data</span></code></dt><dd><p>memory buffer pointer for presence state</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">id</span></code></dt>
+<dd>PCI slot ID</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">data</span></code></dt>
+<dd>memory buffer pointer for presence state</dd>
</dl>
</div>
<div class="section" id="calling">
@@ -66,19 +67,18 @@ state is stored in buffer pointed by &#64;data.</p>
</div>
<div class="section" id="return-codes">
<h2>Return Codes<a class="headerlink" href="#return-codes" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>PCI slot’s presence state is retrieved successfully</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>The indicated PCI slot isn’t found</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>Presence retrieval not supported on the PCI slot</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>PCI slot’s presence state is retrieved successfully</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>The indicated PCI slot isn’t found</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>Presence retrieval not supported on the PCI slot</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -108,15 +108,17 @@ state is stored in buffer pointed by &#64;data.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -133,15 +135,14 @@ state is stored in buffer pointed by &#64;data.</p>
<li class="right" >
<a href="opal-pci-get-power-state-120.html" title="OPAL_PCI_GET_POWER_STATE"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_GET_PRESENCE_STATE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-get-set-pbcq-tunnel-bar-164-165.html b/doc/opal-api/opal-pci-get-set-pbcq-tunnel-bar-164-165.html
index 955498d..8a1b64f 100644
--- a/doc/opal-api/opal-pci-get-set-pbcq-tunnel-bar-164-165.html
+++ b/doc/opal-api/opal-pci-get-set-pbcq-tunnel-bar-164-165.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_GET_PBCQ_TUNNEL_BAR &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_GET_PBCQ_TUNNEL_BAR &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-get-presence-state-119.html" title="OPAL_PCI_GET_PRESENCE_STATE"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_GET_PBCQ_TUNNEL_BAR</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -55,23 +56,23 @@
Bar register.</p>
<div class="section" id="parameters">
<h2>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>The value from the PHB node ibm,opal-phbid property for the device.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">addr</span></code></dt><dd><p>A pointer to where the address stored in the PBCQ Tunnel Bar register
-will be copied.</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>The value from the PHB node ibm,opal-phbid property for the device.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">addr</span></code></dt>
+<dd>A pointer to where the address stored in the PBCQ Tunnel Bar register
+will be copied.</dd>
</dl>
</div>
<div class="section" id="return-values">
<h2>Return Values<a class="headerlink" href="#return-values" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Operation was successful</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid PHB or addr parameter</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>Not supported by hardware</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Operation was successful</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid PHB or addr parameter</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>Not supported by hardware</dd>
</dl>
</div>
</div>
@@ -85,14 +86,15 @@ will be copied.</p>
<p>The host calls this function to set the PBCQ Tunnel Bar register.</p>
<div class="section" id="id3">
<h2>Parameters<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h2>
-<dl>
-<dt><cite>phb_id</cite></dt><dd><p>The value from the PHB node ibm,opal-phbid property for the device.</p>
-</dd>
-<dt><cite>addr</cite></dt><dd><p>The value of the address chosen for the PBCQ Tunnel Bar register.
+<dl class="docutils">
+<dt><cite>phb_id</cite></dt>
+<dd>The value from the PHB node ibm,opal-phbid property for the device.</dd>
+<dt><cite>addr</cite></dt>
+<dd><p class="first">The value of the address chosen for the PBCQ Tunnel Bar register.
If the address is 0, then the PBCQ Tunnel Bar register will be reset.
It the address is non-zero, then the PBCQ Tunnel Bar register will be
set with</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Bit</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">42</span><span class="p">]</span> <span class="n">Bit</span><span class="p">[</span><span class="mi">8</span><span class="p">:</span><span class="mi">50</span><span class="p">]</span> <span class="n">of</span> <span class="n">the</span> <span class="n">address</span>
+<div class="last highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Bit</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">42</span><span class="p">]</span> <span class="n">Bit</span><span class="p">[</span><span class="mi">8</span><span class="p">:</span><span class="mi">50</span><span class="p">]</span> <span class="n">of</span> <span class="n">the</span> <span class="n">address</span>
</pre></div>
</div>
</dd>
@@ -100,19 +102,18 @@ set with</p>
</div>
<div class="section" id="id4">
<h2>Return Values<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Operation was successful</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid PHB or addr parameter</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>Not supported by hardware</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Operation was successful</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid PHB or addr parameter</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>Not supported by hardware</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -146,15 +147,17 @@ set with</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -171,15 +174,14 @@ set with</p>
<li class="right" >
<a href="opal-pci-get-presence-state-119.html" title="OPAL_PCI_GET_PRESENCE_STATE"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_GET_PBCQ_TUNNEL_BAR</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-map-pe-dma-window-44.html b/doc/opal-api/opal-pci-map-pe-dma-window-44.html
index 38051de..2387f58 100644
--- a/doc/opal-api/opal-pci-map-pe-dma-window-44.html
+++ b/doc/opal-api/opal-pci-map-pe-dma-window-44.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_MAP_PE_DMA_WINDOW &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_MAP_PE_DMA_WINDOW &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-get-set-pbcq-tunnel-bar-164-165.html" title="OPAL_PCI_GET_PBCQ_TUNNEL_BAR"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_MAP_PE_DMA_WINDOW</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -67,29 +68,29 @@ address that is all zeros in the upper 32 bits reflects a DMA window enabled
for 32-bit DMA addresses.</p>
<p>The overall size of the DMA window in PCI memory is determined by the number
of tce_levels times the tce_table_size times the tce_page_size.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>is the value from the PHB node <code class="docutils literal notranslate"><span class="pre">ibm,opal-phbid</span></code> property.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">dma_window_number</span></code></dt><dd><p>specifies the DMA window</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>is the value from the PHB node <code class="docutils literal notranslate"><span class="pre">ibm,opal-phbid</span></code> property.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">dma_window_number</span></code></dt>
+<dd>specifies the DMA window</dd>
</dl>
<p>For ibm,opal-ioda PHBs the dma_window_number is an index from 0 to the PHB
total number of windows minus 1. For ibm,opal-ioda2 PHBs the DMA window_number
is an index from 0 to n-1, where n is the number of windows per window set,
within the window set associated with the specified PE number.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">pe_number</span></code></dt><dd><p>is the index of the PE that is authorized to DMA to this window
-address space in PCI memory,</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">tce_levels</span></code></dt><dd><p>is the number of TCE table levels in the translation hiearchy,
-from 1 to ibm,opal-dmawins property &lt;translation levels&gt;.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">tce_table_addr</span></code></dt><dd><p>is the 64-bit system real address of the first level (root,
-for mult-level) TCE table in the translation hiearchy.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">tce_table_size</span></code></dt><dd><p>is the size, in bytes, of each TCE table in the translation
-hierarchy. A value of â€0’ indicates to disable this DMA window.</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">pe_number</span></code></dt>
+<dd>is the index of the PE that is authorized to DMA to this window
+address space in PCI memory,</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">tce_levels</span></code></dt>
+<dd>is the number of TCE table levels in the translation hiearchy,
+from 1 to ibm,opal-dmawins property &lt;translation levels&gt;.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">tce_table_addr</span></code></dt>
+<dd>is the 64-bit system real address of the first level (root,
+for mult-level) TCE table in the translation hiearchy.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">tce_table_size</span></code></dt>
+<dd>is the size, in bytes, of each TCE table in the translation
+hierarchy. A value of â€0’ indicates to disable this DMA window.</dd>
</dl>
<p>For ibm,opal-ioda, this must be a value in the range from
128MB / tce_page_size to 256TB / tce_page_size, and must be in the format and
@@ -104,21 +105,21 @@ mapping the same PE to multiple DMA windows, so as to create a larger overall
DMA window, it is recommended to use consecutive DMA windows and each DMA
window should use a TCE table address that is offset by the win_size value of
predecessor DMA window.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">tce_page_size</span></code></dt><dd><p>is the size of PCI memory pages mapped to system real pages
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">tce_page_size</span></code></dt>
+<dd>is the size of PCI memory pages mapped to system real pages
through all TCE tables in the translation hierarchy. This must be the
same format as and match a value from the ibm,opal-dmawins property
&lt;dma-page-sizes&gt;. This page size applies to all TCE tables in the
-translation hierarchy.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">pci_start_addr</span></code></dt><dd><p>returns the starting address in PCI memory that corresponds
-to this DMA window based on the input translation parameter values.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">pci_mem_type</span></code></dt><dd><p>selects whether this DMA window should be created in 32-bit
+translation hierarchy.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">pci_start_addr</span></code></dt>
+<dd>returns the starting address in PCI memory that corresponds
+to this DMA window based on the input translation parameter values.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">pci_mem_type</span></code></dt>
+<dd>selects whether this DMA window should be created in 32-bit
or 64-bit PCI memory. The input values correspond to the same PCI memory
space locators as MMIO spaces in the ranges&lt;&gt; property – 0x2 indicated
-32-bit PCI memory and 0x3 indicates 64-bit memory.</p>
-</dd>
+32-bit PCI memory and 0x3 indicates 64-bit memory.</dd>
</dl>
<p>Window 0 for both ibm,opal-ioda and ibm,opal-ioda2 PHBs must be within 32-bit
PCI memory and this call return opal_parameter for calls that specify window
@@ -138,7 +139,6 @@ police this limitation.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -158,15 +158,17 @@ police this limitation.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -183,15 +185,14 @@ police this limitation.</p>
<li class="right" >
<a href="opal-pci-get-set-pbcq-tunnel-bar-164-165.html" title="OPAL_PCI_GET_PBCQ_TUNNEL_BAR"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_MAP_PE_DMA_WINDOW</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-map-pe-dma-window-real-45.html b/doc/opal-api/opal-pci-map-pe-dma-window-real-45.html
index af9c9a8..afd7d73 100644
--- a/doc/opal-api/opal-pci-map-pe-dma-window-real-45.html
+++ b/doc/opal-api/opal-pci-map-pe-dma-window-real-45.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_MAP_PE_DMA_WINDOW_REAL &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_MAP_PE_DMA_WINDOW_REAL &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-map-pe-dma-window-44.html" title="OPAL_PCI_MAP_PE_DMA_WINDOW"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_MAP_PE_DMA_WINDOW_REAL</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -65,35 +66,34 @@ system memory real address. The PHB passes PCI address bits 04:63 directly to
system real address bits 04:63 when PCI address bits 04:39 are within the
region specified by mem_addr t0 mem_addr + window_size.</p>
<p>The addresses must be 16MB aligned and a multiple of 16MB in size.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>is the value from the PHB node ibm,opal-phbid property.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">dma_window_number</span></code></dt><dd><p>specifies the DMA window</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>is the value from the PHB node ibm,opal-phbid property.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">dma_window_number</span></code></dt>
+<dd>specifies the DMA window</dd>
</dl>
<p>For ibm,opal-ioda PHBs the dma_window_number is an index from 0 to the PHB
total number of windows minus 1. For ibm,opal-ioda2 PHBs the DMA window_number
is an index from 0 to n-1, where n is the number of windows per window set,
within the window set associated with the specified PE number.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">pe_number</span></code></dt><dd><p>is the index of the PE that is authorized to DMA to this window
-address space in PCI memory,</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">mem_addr</span></code></dt><dd><p>is the starting 64-bit system real address mapped directly to the
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">pe_number</span></code></dt>
+<dd>is the index of the PE that is authorized to DMA to this window
+address space in PCI memory,</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">mem_addr</span></code></dt>
+<dd>is the starting 64-bit system real address mapped directly to the
starting address in PCI memory. Addresses below 4GB are zero in bits above
bit 32. This value must be aligned on a 16MB boundary; OPAL returns
-OPAL_PARAMETER for any value that is not a multiple of 16MB.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">window_size</span></code></dt><dd><p>is the size, in bytes, of the address range defined by this
+OPAL_PARAMETER for any value that is not a multiple of 16MB.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">window_size</span></code></dt>
+<dd>is the size, in bytes, of the address range defined by this
window. This value must be a multiple of 16MB; OPAL returns <a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a>
for any value that is not a multiple of 16MB. A value of â€0’ indicates to
-disable this DMA window.</p>
-</dd>
+disable this DMA window.</dd>
</dl>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -113,15 +113,17 @@ disable this DMA window.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -138,15 +140,14 @@ disable this DMA window.</p>
<li class="right" >
<a href="opal-pci-map-pe-dma-window-44.html" title="OPAL_PCI_MAP_PE_DMA_WINDOW"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_MAP_PE_DMA_WINDOW_REAL</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-map-pe-mmio-window-29.html b/doc/opal-api/opal-pci-map-pe-mmio-window-29.html
index 2830c59..b295e64 100644
--- a/doc/opal-api/opal-pci-map-pe-mmio-window-29.html
+++ b/doc/opal-api/opal-pci-map-pe-mmio-window-29.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_MAP_PE_MMIO_WINDOW &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_MAP_PE_MMIO_WINDOW &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-map-pe-dma-window-real-45.html" title="OPAL_PCI_MAP_PE_DMA_WINDOW_REAL"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_MAP_PE_MMIO_WINDOW</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -56,28 +57,29 @@
</pre></div>
</div>
<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>Appears to be POWER7 p7ioc specific. Likely to be removed soon.</p>
+<p class="first admonition-title">Note</p>
+<p class="last">Appears to be POWER7 p7ioc specific. Likely to be removed soon.</p>
</div>
<p><strong>WARNING:</strong> following documentation is from old sources, and is possibly
not representative of OPALv3 as implemented by skiboot. This should be
used as a starting point for full documentation.</p>
<p>The host calls this function to map a segment of MMIO address space to a PE.</p>
-<dl>
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>is the value from the PHB node ibm,opal-phbid property.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">window_type</span></code></dt><dd><p>specifies 32-bit or 64-bit PCI memory</p>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>is the value from the PHB node ibm,opal-phbid property.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">window_type</span></code></dt>
+<dd><p class="first">specifies 32-bit or 64-bit PCI memory</p>
<p>â€0’ selects PCI IO Space. ibm,opal-ioda2 PHBs do not support IO space,
and OPAL returns opal_unsupported if called for IO windows.</p>
<p>â€1’ selects 32-bit PCI memory space</p>
-<p>â€2’ selects 64 bit PCI memory space</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">window_num</span></code></dt><dd><p>is the MMIO window number within the specified PCI memory space</p>
+<p class="last">â€2’ selects 64 bit PCI memory space</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">segment_num</span></code></dt><dd><p>is an index from 0 to the number of segments minus 1 defined
+<dt><code class="docutils literal notranslate"><span class="pre">window_num</span></code></dt>
+<dd>is the MMIO window number within the specified PCI memory space</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">segment_num</span></code></dt>
+<dd>is an index from 0 to the number of segments minus 1 defined
or this window, and selects a particular segment within the specified
-window.</p>
-</dd>
+window.</dd>
</dl>
<p>Return value:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">phb</span><span class="p">)</span>
@@ -89,7 +91,6 @@ window.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -109,15 +110,17 @@ window.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -134,15 +137,14 @@ window.</p>
<li class="right" >
<a href="opal-pci-map-pe-dma-window-real-45.html" title="OPAL_PCI_MAP_PE_DMA_WINDOW_REAL"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_MAP_PE_MMIO_WINDOW</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-msi-eoi-63.html b/doc/opal-api/opal-pci-msi-eoi-63.html
index 56a4368..a2623b1 100644
--- a/doc/opal-api/opal-pci-msi-eoi-63.html
+++ b/doc/opal-api/opal-pci-msi-eoi-63.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_MSI_EOI &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_MSI_EOI &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-map-pe-mmio-window-29.html" title="OPAL_PCI_MAP_PE_MMIO_WINDOW"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_MSI_EOI</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -54,21 +55,20 @@
<p>Only required on PHB3 (POWER8) based systems.</p>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success!</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid PHB id or hwirq.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>Hardware or configuration issue.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>Unsupported on this PHB.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success!</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid PHB id or hwirq.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>Hardware or configuration issue.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>Unsupported on this PHB.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -96,15 +96,17 @@
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -121,15 +123,14 @@
<li class="right" >
<a href="opal-pci-map-pe-mmio-window-29.html" title="OPAL_PCI_MAP_PE_MMIO_WINDOW"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_MSI_EOI</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-next-error-60.html b/doc/opal-api/opal-pci-next-error-60.html
index 591008c..5d208f0 100644
--- a/doc/opal-api/opal-pci-next-error-60.html
+++ b/doc/opal-api/opal-pci-next-error-60.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_NEXT_ERROR &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_NEXT_ERROR &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-msi-eoi-63.html" title="OPAL_PCI_MSI_EOI"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_NEXT_ERROR</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -73,19 +74,18 @@
<p>Retreives details of a PCIe error.</p>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Successfully filled <cite>pci_error_type</cite> and <cite>severity</cite> with error details.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>Unsupported operation on this PHB.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid phb_id, or address for other arguments.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Successfully filled <cite>pci_error_type</cite> and <cite>severity</cite> with error details.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>Unsupported operation on this PHB.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid phb_id, or address for other arguments.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -113,15 +113,17 @@
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -138,15 +140,14 @@
<li class="right" >
<a href="opal-pci-msi-eoi-63.html" title="OPAL_PCI_MSI_EOI"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_NEXT_ERROR</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-phb-mmio-enable-27.html b/doc/opal-api/opal-pci-phb-mmio-enable-27.html
index 5731074..c7f2062 100644
--- a/doc/opal-api/opal-pci-phb-mmio-enable-27.html
+++ b/doc/opal-api/opal-pci-phb-mmio-enable-27.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_PHB_MMIO_ENABLE &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_PHB_MMIO_ENABLE &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-next-error-60.html" title="OPAL_PCI_NEXT_ERROR"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_PHB_MMIO_ENABLE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -53,8 +54,8 @@
</pre></div>
</div>
<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>Appears to be POWER7 p7ioc specific. Likely to be removed soon.</p>
+<p class="first admonition-title">Note</p>
+<p class="last">Appears to be POWER7 p7ioc specific. Likely to be removed soon.</p>
</div>
<p><strong>WARNING:</strong> following documentation is from old sources, and is possibly
not representative of OPALv3 as implemented by skiboot. This should be
@@ -74,23 +75,23 @@ partitions cannot issue CI loads/stores to these address spaces from the
processor (e.g.,via HPT).</p>
<p>OPAL returns <a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a> for calls to OPAL to enable them for PHBs that do
not support disable.</p>
-<dl>
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>is the value from the PHB node ibm,opal-phbid property.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">window_type</span></code></dt><dd><p>specifies 32-bit or 64-bit PCI memory</p>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>is the value from the PHB node ibm,opal-phbid property.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">window_type</span></code></dt>
+<dd><p class="first">specifies 32-bit or 64-bit PCI memory</p>
<p>â€0’ selects PCI IO Space</p>
<p>â€1’ selects 32-bit PCI memory space</p>
-<p>â€2’ selects 64 bit PCI memory space</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">window_num</span></code></dt><dd><p>is the MMIO window number within the specified PCI memory space</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">enable</span></code></dt><dd><p>specifies to enable or disable this MMIO window.</p>
+<p class="last">â€2’ selects 64 bit PCI memory space</p>
</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">window_num</span></code></dt>
+<dd>is the MMIO window number within the specified PCI memory space</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">enable</span></code></dt>
+<dd>specifies to enable or disable this MMIO window.</dd>
</dl>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -110,15 +111,17 @@ not support disable.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -135,15 +138,14 @@ not support disable.</p>
<li class="right" >
<a href="opal-pci-next-error-60.html" title="OPAL_PCI_NEXT_ERROR"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_PHB_MMIO_ENABLE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-poll-62.html b/doc/opal-api/opal-pci-poll-62.html
index 1c7376e..005b305 100644
--- a/doc/opal-api/opal-pci-poll-62.html
+++ b/doc/opal-api/opal-pci-poll-62.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_POLL &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_POLL &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-phb-mmio-enable-27.html" title="OPAL_PCI_PHB_MMIO_ENABLE"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_POLL</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -60,7 +61,6 @@ the caller to sleep.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -88,15 +88,17 @@ the caller to sleep.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -113,15 +115,14 @@ the caller to sleep.</p>
<li class="right" >
<a href="opal-pci-phb-mmio-enable-27.html" title="OPAL_PCI_PHB_MMIO_ENABLE"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_POLL</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-reinit-53.html b/doc/opal-api/opal-pci-reinit-53.html
index 8cbacc2..a88a72a 100644
--- a/doc/opal-api/opal-pci-reinit-53.html
+++ b/doc/opal-api/opal-pci-reinit-53.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_REINIT &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_REINIT &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-poll-62.html" title="OPAL_PCI_POLL"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_REINIT</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -61,24 +62,23 @@
</pre></div>
</div>
<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>Much glory awaits the one who fills in this documentation.</p>
+<p class="first admonition-title">Note</p>
+<p class="last">Much glory awaits the one who fills in this documentation.</p>
</div>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid PHB, scope, or device.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>Operation unsupported</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>Some hardware issue prevented the reinit.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid PHB, scope, or device.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>Operation unsupported</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>Some hardware issue prevented the reinit.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -106,15 +106,17 @@
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -131,15 +133,14 @@
<li class="right" >
<a href="opal-pci-poll-62.html" title="OPAL_PCI_POLL"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_REINIT</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-reset-49.html b/doc/opal-api/opal-pci-reset-49.html
index ec460db..8f5a0d6 100644
--- a/doc/opal-api/opal-pci-reset-49.html
+++ b/doc/opal-api/opal-pci-reset-49.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_RESET &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_RESET &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-reinit-53.html" title="OPAL_PCI_REINIT"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_RESET</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -72,20 +73,19 @@ call <a class="reference internal" href="opal-pci-poll-62.html#opal-pci-poll"><s
been made.</p>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid <code class="docutils literal notranslate"><span class="pre">id</span></code>, <code class="docutils literal notranslate"><span class="pre">reset_scope</span></code>, or <code class="docutils literal notranslate"><span class="pre">assert_state</span></code>.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>Operation is unsupported on <code class="docutils literal notranslate"><span class="pre">id</span></code>.</p>
-</dd>
-<dt>value &gt; 0</dt><dd><p>How many ms to wait for the state machine to crank.
-Call <a class="reference internal" href="opal-pci-poll-62.html#opal-pci-poll"><span class="std std-ref">OPAL_PCI_POLL</span></a> to crank the state machine further.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid <code class="docutils literal notranslate"><span class="pre">id</span></code>, <code class="docutils literal notranslate"><span class="pre">reset_scope</span></code>, or <code class="docutils literal notranslate"><span class="pre">assert_state</span></code>.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>Operation is unsupported on <code class="docutils literal notranslate"><span class="pre">id</span></code>.</dd>
+<dt>value &gt; 0</dt>
+<dd>How many ms to wait for the state machine to crank.
+Call <a class="reference internal" href="opal-pci-poll-62.html#opal-pci-poll"><span class="std std-ref">OPAL_PCI_POLL</span></a> to crank the state machine further.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -113,15 +113,17 @@ Call <a class="reference internal" href="opal-pci-poll-62.html#opal-pci-poll"><s
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -138,15 +140,14 @@ Call <a class="reference internal" href="opal-pci-poll-62.html#opal-pci-poll"><s
<li class="right" >
<a href="opal-pci-reinit-53.html" title="OPAL_PCI_REINIT"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_RESET</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-set-mve-33.html b/doc/opal-api/opal-pci-set-mve-33.html
index 9c19ba3..4447fd9 100644
--- a/doc/opal-api/opal-pci-set-mve-33.html
+++ b/doc/opal-api/opal-pci-set-mve-33.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_SET_MVE &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_SET_MVE &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-reset-49.html" title="OPAL_PCI_RESET"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_MVE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -59,13 +60,13 @@ used as a starting point for full documentation.</p>
including within the XIVE, to validate that the requester is authorized to
signal an interrupt to the associated DMA address for a message value that
selects a particular XIVE.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>is the value from the PHB node ibm,opal-phbid property.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">mve_number</span></code></dt><dd><p>is the index, from 0 to ibm,opal,ibm-num-msi-ports minus1</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">pe_number</span></code></dt><dd><p>is the index of a PE, from 0 to ibm,opal-num-pes minus 1.</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>is the value from the PHB node ibm,opal-phbid property.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">mve_number</span></code></dt>
+<dd>is the index, from 0 to ibm,opal,ibm-num-msi-ports minus1</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">pe_number</span></code></dt>
+<dd>is the index of a PE, from 0 to ibm,opal-num-pes minus 1.</dd>
</dl>
<p>This call maps an MVE to a PE and PE RID domain. OPAL uses the PELT to
determine the PE domain. OPAL treats this call as a NOP for IODA2 PHBs
@@ -80,7 +81,6 @@ and returns a status of OPAL_SUCCESS.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -100,15 +100,17 @@ and returns a status of OPAL_SUCCESS.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -125,15 +127,14 @@ and returns a status of OPAL_SUCCESS.</p>
<li class="right" >
<a href="opal-pci-reset-49.html" title="OPAL_PCI_RESET"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_MVE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-set-mve-enable-34.html b/doc/opal-api/opal-pci-set-mve-enable-34.html
index f5a00ee..2399934 100644
--- a/doc/opal-api/opal-pci-set-mve-enable-34.html
+++ b/doc/opal-api/opal-pci-set-mve-enable-34.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_SET_MVE_ENABLE &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_SET_MVE_ENABLE &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-set-mve-33.html" title="OPAL_PCI_SET_MVE"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_MVE_ENABLE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -61,14 +62,14 @@ not representative of OPALv3 as implemented by skiboot. This should be
used as a starting point for full documentation.</p>
<p>The host calls this function to enable or disable an MVE to respond to an MSI
DMA address and message data value.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>is the value from the PHB node ibm,opal-phbid property.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">mve_number</span></code></dt><dd><p>is the index, from 0 to ibm,opal,ibm-num-msi-ports minus1</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">state</span></code></dt><dd><p>A â€1’ value of the state parameter indicates to enable the MVE and a â€0’
-value indicates to disable the MVE.</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>is the value from the PHB node ibm,opal-phbid property.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">mve_number</span></code></dt>
+<dd>is the index, from 0 to ibm,opal,ibm-num-msi-ports minus1</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">state</span></code></dt>
+<dd>A â€1’ value of the state parameter indicates to enable the MVE and a â€0’
+value indicates to disable the MVE.</dd>
</dl>
<p>This call sets the MVE to an enabled (1) or disabled (0) state.</p>
<p>Return value:</p>
@@ -81,7 +82,6 @@ value indicates to disable the MVE.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -101,15 +101,17 @@ value indicates to disable the MVE.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -126,15 +128,14 @@ value indicates to disable the MVE.</p>
<li class="right" >
<a href="opal-pci-set-mve-33.html" title="OPAL_PCI_SET_MVE"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_MVE_ENABLE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-set-p2p-157.html b/doc/opal-api/opal-pci-set-p2p-157.html
index 5ea12fd..55ff982 100644
--- a/doc/opal-api/opal-pci-set-p2p-157.html
+++ b/doc/opal-api/opal-pci-set-p2p-157.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_SET_P2P &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_SET_P2P &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-set-mve-enable-34.html" title="OPAL_PCI_SET_MVE_ENABLE"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_P2P</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -60,33 +61,32 @@
<p>The host calls this function to enable PCI peer-to-peer on the PHBs.</p>
<div class="section" id="parameters">
<h2>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">phbid_init</span></code></dt><dd><p>is the value from the PHB node ibm,opal-phbid property for the device initiating the p2p operation</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">phbid_target</span></code></dt><dd><p>is the value from the PHB node ibm,opal-phbid property for the device targeted by the p2p operation</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">desc</span></code></dt><dd><p>tells whether the p2p operation is a store (OPAL_PCI_P2P_STORE) or load (OPAL_PCI_P2P_LOAD). Can be both.
-OPAL_PCI_P2P_ENABLE enables/disables the setting</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">pe_number</span></code></dt><dd><p>PE number for the initiating device</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phbid_init</span></code></dt>
+<dd>is the value from the PHB node ibm,opal-phbid property for the device initiating the p2p operation</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">phbid_target</span></code></dt>
+<dd>is the value from the PHB node ibm,opal-phbid property for the device targeted by the p2p operation</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">desc</span></code></dt>
+<dd>tells whether the p2p operation is a store (OPAL_PCI_P2P_STORE) or load (OPAL_PCI_P2P_LOAD). Can be both.
+OPAL_PCI_P2P_ENABLE enables/disables the setting</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">pe_number</span></code></dt>
+<dd>PE number for the initiating device</dd>
</dl>
</div>
<div class="section" id="return-values">
<h2>Return Values<a class="headerlink" href="#return-values" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Configuration was successful</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid PHB or mode parameter</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>Not supported by hardware</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Configuration was successful</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid PHB or mode parameter</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>Not supported by hardware</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -115,15 +115,17 @@ OPAL_PCI_P2P_ENABLE enables/disables the setting</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -140,15 +142,14 @@ OPAL_PCI_P2P_ENABLE enables/disables the setting</p>
<li class="right" >
<a href="opal-pci-set-mve-enable-34.html" title="OPAL_PCI_SET_MVE_ENABLE"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_P2P</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-set-pe-31.html b/doc/opal-api/opal-pci-set-pe-31.html
index e1e1887..6a94e6f 100644
--- a/doc/opal-api/opal-pci-set-pe-31.html
+++ b/doc/opal-api/opal-pci-set-pe-31.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_SET_PE &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_SET_PE &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-set-p2p-157.html" title="OPAL_PCI_SET_P2P"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_PE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -69,40 +70,42 @@ argument, for OPAL to correlate the RID (bus/dev/func) domain of the PE. If a
PE domain is changed, the host must call this to reset the PE bus/dev/func
domain and then call all other OPAL calls that map PHB IODA resources to
update those domains within PHB facilities.</p>
-<dl>
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>is the value from the PHB node ibm,opal-phbid property.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">pe_number</span></code></dt><dd><p>is the index of a PE, from 0 to ibm,opal-num-pes minus 1.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">bus_compare</span></code></dt><dd><p>is a value from 0 to 7 indicating which bus number
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>is the value from the PHB node ibm,opal-phbid property.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">pe_number</span></code></dt>
+<dd>is the index of a PE, from 0 to ibm,opal-num-pes minus 1.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">bus_compare</span></code></dt>
+<dd><p class="first">is a value from 0 to 7 indicating which bus number
bits define the range of buses in a PE domain:</p>
<p>0 = do not validate against RID bus number (PE = all bus numbers)</p>
-<dl class="simple">
-<dt>2 = compare high order 3 bits of RID bus number to high order 3 bits of</dt><dd><p>PE bus number</p>
-</dd>
-<dt>3 = compare high order 4 bits of RID bus number to high order 4 bits of</dt><dd><p>PE bus number</p>
-</dd>
-<dt>6 = compare high order 7 bits of RID bus number to high order 7 bits of</dt><dd><p>PE bus number</p>
-</dd>
+<dl class="docutils">
+<dt>2 = compare high order 3 bits of RID bus number to high order 3 bits of</dt>
+<dd>PE bus number</dd>
+<dt>3 = compare high order 4 bits of RID bus number to high order 4 bits of</dt>
+<dd>PE bus number</dd>
+<dt>6 = compare high order 7 bits of RID bus number to high order 7 bits of</dt>
+<dd>PE bus number</dd>
</dl>
-<p>7 = compare all bits of RID bus number to all bits of PE bus number</p>
+<p class="last">7 = compare all bits of RID bus number to all bits of PE bus number</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">dev_compare</span></code></dt><dd><p>indicates to compare the RID device number to the PE
+<dt><code class="docutils literal notranslate"><span class="pre">dev_compare</span></code></dt>
+<dd>indicates to compare the RID device number to the PE
device number or not. â€0’ signifies that the RID device number is not compared
– essentially all device numbers within the bus and function number range of
this PE are also within this PE. Non-zero signifies to compare the RID device
number to the PE device number, such that only that device number is in the PE
-domain, for all buses and function numbers in the PE domain.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">func_compare</span></code></dt><dd><p>indicates to compare the RID function number to the
+domain, for all buses and function numbers in the PE domain.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">func_compare</span></code></dt>
+<dd>indicates to compare the RID function number to the
PE function number or not. â€0’ signifies that the RID function number is not
compared – essentially all function numbers within the bus and device number
range of this PE are also within this PE. Non-zero signifies to compare the
RID function number to the PE function number, such that only that function
-number is in the PE domain, for all buses and device numbers in the PE domain.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">pe_action</span></code></dt><dd><p>is one of:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">enum</span> <span class="n">OpalPeAction</span> <span class="p">{</span>
+number is in the PE domain, for all buses and device numbers in the PE domain.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">pe_action</span></code></dt>
+<dd><p class="first">is one of:</p>
+<div class="last highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">enum</span> <span class="n">OpalPeAction</span> <span class="p">{</span>
<span class="n">OPAL_UNMAP_PE</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
<span class="n">OPAL_MAP_PE</span> <span class="o">=</span> <span class="mi">1</span>
<span class="p">};</span>
@@ -112,27 +115,27 @@ number is in the PE domain, for all buses and device numbers in the PE domain.</
</dl>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>If one of the following:</p>
-<blockquote>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd><p class="first">If one of the following:</p>
+<blockquote class="last">
<div><ul class="simple">
-<li><p>invalid phb</p></li>
-<li><p>invalid pe_action</p></li>
-<li><p>invalid bus_dev_func</p></li>
-<li><p>invalid bus_compare</p></li>
+<li>invalid phb</li>
+<li>invalid pe_action</li>
+<li>invalid bus_dev_func</li>
+<li>invalid bus_compare</li>
</ul>
</div></blockquote>
</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>PHB does not support set_pe operation</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>if operation was successful</p>
-</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>PHB does not support set_pe operation</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>if operation was successful</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -160,15 +163,17 @@ number is in the PE domain, for all buses and device numbers in the PE domain.</
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -185,15 +190,14 @@ number is in the PE domain, for all buses and device numbers in the PE domain.</
<li class="right" >
<a href="opal-pci-set-p2p-157.html" title="OPAL_PCI_SET_P2P"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_PE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-set-peltv-32.html b/doc/opal-api/opal-pci-set-peltv-32.html
index 5a7803c..ee90893 100644
--- a/doc/opal-api/opal-pci-set-peltv-32.html
+++ b/doc/opal-api/opal-pci-set-peltv-32.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_SET_PELTV &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_SET_PELTV &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-set-pe-31.html" title="OPAL_PCI_SET_PE"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_PELTV</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -58,25 +59,25 @@ use the source (and update the docs).</p>
<p>This call sets the PELTV of a parent PE to add or remove a PE number as a PE
within that parent PE domain. The host must call this function for each child
of a parent PE.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>is the value from the PHB node ibm,opal-phbid property</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">parent_pe</span></code></dt><dd><p>is the PE number of a PE that is higher in the PCI hierarchy
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>is the value from the PHB node ibm,opal-phbid property</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">parent_pe</span></code></dt>
+<dd>is the PE number of a PE that is higher in the PCI hierarchy
to other PEs, such that an error involving this parent PE should cause a
collateral PE freeze for PEs below this PE in the PCI hierarchy. For example
a switch upstream bridge is a PE that is parent to PEs reached through that
upstream bridge such that an error involving the upstream bridge
(e.g, ERR_FATAL) should cause the PHB to freeze all other PEs below that
upstream bridge (e.g., a downstream bridge, or devices below a downstream
-bridge).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">child_pe</span></code></dt><dd><p>is the PE number of a PE that is lower in the PCI hierarchy
+bridge).</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">child_pe</span></code></dt>
+<dd>is the PE number of a PE that is lower in the PCI hierarchy
than another PE, such that an error involving that other PE should cause a
collateral PE freeze for this child PE. For example a device below a
downstream bridge of a PCIE switch is a child PE that downstream bridge PE
and the upstream bridge PE of that switch – an ERR_Fatal from either bridge
-should result in a collateral freeze of that device PE.</p>
-</dd>
+should result in a collateral freeze of that device PE.</dd>
</dl>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">enum</span> <span class="n">OpalPeltvAction</span> <span class="p">{</span>
<span class="n">OPAL_REMOVE_PE_FROM_DOMAIN</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
@@ -100,7 +101,6 @@ PE bit in the parent PELTV results in an all-zeros value for that PELTV.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -120,15 +120,17 @@ PE bit in the parent PELTV results in an all-zeros value for that PELTV.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -145,15 +147,14 @@ PE bit in the parent PELTV results in an all-zeros value for that PELTV.</p>
<li class="right" >
<a href="opal-pci-set-pe-31.html" title="OPAL_PCI_SET_PE"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_PELTV</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-set-phb-capi-mode-93.html b/doc/opal-api/opal-pci-set-phb-capi-mode-93.html
index 1dbc029..5034f8e 100644
--- a/doc/opal-api/opal-pci-set-phb-capi-mode-93.html
+++ b/doc/opal-api/opal-pci-set-phb-capi-mode-93.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_SET_PHB_CAPI_MODE &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_SET_PHB_CAPI_MODE &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-set-peltv-32.html" title="OPAL_PCI_SET_PELTV"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_PHB_CAPI_MODE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -64,13 +65,13 @@
<p>Switch the CAPP attached to the given PHB in one of the supported CAPI modes.</p>
<div class="section" id="parameters">
<h2>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">phb_id</span></code></dt><dd><p>the ID of the PHB which identifies attached CAPP to perform mode switch on</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">mode</span></code></dt><dd><p>A mode id as described below</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">pe_number</span></code></dt><dd><p>PE number for the initiating device</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">phb_id</span></code></dt>
+<dd>the ID of the PHB which identifies attached CAPP to perform mode switch on</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">mode</span></code></dt>
+<dd>A mode id as described below</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">pe_number</span></code></dt>
+<dd>PE number for the initiating device</dd>
</dl>
</div>
<div class="section" id="calling">
@@ -100,37 +101,37 @@ CAPP-PSL transactions.</p>
<div class="section" id="notes">
<h2>Notes<a class="headerlink" href="#notes" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>If PHB is in PEC2 then requesting mode <cite>OPAL_PHB_CAPI_MODE_DMA_TVT1</cite> will
+<li>If PHB is in PEC2 then requesting mode <cite>OPAL_PHB_CAPI_MODE_DMA_TVT1</cite> will
allocate extra 16/8 dma read engines to the PHB depending on its stack
(stack 0/ stack 1). This is needed to improve the Direct-GPU DMA read
-performance for the Mellanox CX5 card.</p></li>
-<li><p>Mode <cite>OPAL_PHB_CAPI_MODE_PCIE</cite> not yet supported on Power-9.</p></li>
-<li><p>Requesting mode <cite>OPAL_PHB_CAPI_MODE_CAPI</cite> on Power-9 will disable fast-reboot.</p></li>
-<li><p>Modes <cite>OPAL_PHB_CAPI_MODE_DMA</cite>, <cite>OPAL_PHB_CAPI_MODE_SNOOP_OFF</cite> are
-not supported on Power-9 yet.</p></li>
+performance for the Mellanox CX5 card.</li>
+<li>Mode <cite>OPAL_PHB_CAPI_MODE_PCIE</cite> not supported on Power-9.</li>
+<li>Requesting mode <cite>OPAL_PHB_CAPI_MODE_CAPI</cite> on Power-9 will disable fast-reboot.</li>
+<li>Modes <cite>OPAL_PHB_CAPI_MODE_DMA</cite>, <cite>OPAL_PHB_CAPI_MODE_SNOOP_OFF</cite> are
+not supported on Power-9.</li>
+<li>CAPI is only supported on Power-8 and Power-9.</li>
</ul>
</div>
<div class="section" id="return-codes">
<h2>Return Codes<a class="headerlink" href="#return-codes" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Switch to the requested capi mode performed successfully.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>The requested value of mode or phb_id parameter is not valid.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>An error occurred while switching the CAPP to requested mode.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>Switching to requested capi mode is not possible at the moment</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-resource"><span class="std std-ref">OPAL_RESOURCE</span></a></dt><dd><p>CAPP ucode not available hence activating CAPP not supported.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt><dd><p>CAPP is presently in recovery-mode and mode switch cannot be performed.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Switch to the requested capi mode performed successfully.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>The requested value of mode or phb_id parameter is not valid.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>An error occurred while switching the CAPP to requested mode.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>Switching to requested capi mode is not possible at the moment</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-resource"><span class="std std-ref">OPAL_RESOURCE</span></a></dt>
+<dd>CAPP ucode not available hence activating CAPP not supported.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt>
+<dd>CAPP is presently in recovery-mode and mode switch cannot be performed.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -161,15 +162,17 @@ not supported on Power-9 yet.</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -186,15 +189,14 @@ not supported on Power-9 yet.</p></li>
<li class="right" >
<a href="opal-pci-set-peltv-32.html" title="OPAL_PCI_SET_PELTV"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_PHB_CAPI_MODE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-set-phb-mem-window-28.html b/doc/opal-api/opal-pci-set-phb-mem-window-28.html
index c92e075..b342c1c 100644
--- a/doc/opal-api/opal-pci-set-phb-mem-window-28.html
+++ b/doc/opal-api/opal-pci-set-phb-mem-window-28.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_SET_PHB_MEM_WINDOW &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_SET_PHB_MEM_WINDOW &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-set-phb-capi-mode-93.html" title="OPAL_PCI_SET_PHB_CAPI_MODE"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_PHB_MEM_WINDOW</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -57,8 +58,8 @@
</pre></div>
</div>
<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>Appears to be POWER7 p7ioc specific. Likely to be removed soon.</p>
+<p class="first admonition-title">Note</p>
+<p class="last">Appears to be POWER7 p7ioc specific. Likely to be removed soon.</p>
</div>
<p><strong>WARNING:</strong> following documentation is from old sources, and is possibly
not representative of OPALv3 as implemented by skiboot. This should be
@@ -68,27 +69,29 @@ PHBs. OPAL sets IO space for P7IOC and KVM cannot relocate this. KVM should
changes these windows only while all devices below the PHB are disabled for
PCI memory ops, and with the target window in disabled state (where supported
by PHB hardware).</p>
-<dl>
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>is the value from the PHB node ibm,opal-phbid property.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">window_type</span></code></dt><dd><p>specifies 32-bit or 64-bit PCI memory</p>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>is the value from the PHB node ibm,opal-phbid property.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">window_type</span></code></dt>
+<dd><p class="first">specifies 32-bit or 64-bit PCI memory</p>
<p>â€0’ selects IO space, and is not supported for relocation. OPAL
returns OPAL_UNSUPPORTED for this value.</p>
<p>â€1’ selects 32-bit PCI memory space</p>
-<p>â€2’ selects 64 bit PCI memory space</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">window_num</span></code></dt><dd><p>is the MMIO window number within the specified PCI memory space</p>
+<p class="last">â€2’ selects 64 bit PCI memory space</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">starting_real_address</span></code></dt><dd><p>specifies the location within sytsem (processor)real
+<dt><code class="docutils literal notranslate"><span class="pre">window_num</span></code></dt>
+<dd>is the MMIO window number within the specified PCI memory space</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">starting_real_address</span></code></dt>
+<dd>specifies the location within sytsem (processor)real
address space this MMIO window starts. This must be a location within the
-IO Hub or PHB node ibm,opal-mmio-real property.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">starting_pci_address</span></code></dt><dd><p>specifies the location within PCI 32 or 64-bit
+IO Hub or PHB node ibm,opal-mmio-real property.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">starting_pci_address</span></code></dt>
+<dd>specifies the location within PCI 32 or 64-bit
address space that this MMIO window starts. For 64-bit PCI memory, this
must be within the low order 60 bit (1 Exabyte) region of PCI memory.
-Addresses above 1EB are reserved to IODA definitions.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">segment_size</span></code></dt><dd><p>defines the segment size of this window, in the same format
+Addresses above 1EB are reserved to IODA definitions.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">segment_size</span></code></dt>
+<dd>defines the segment size of this window, in the same format
as and a matching value from the ibm,opal-memwin32/64 &lt;segment_size&gt;
property. The window total size, in bytes, is the segment_size times the
ibm,opal-memwin32/64 &lt;num_segments&gt; property and must not extend beyond
@@ -98,8 +101,7 @@ supported for the specifice window. The host must assure that the
cumulative address space for all enabled windows does not exceed the total
PHB 32-bit or 64-bit real address window space, or extend outside these
address ranges, and that no windows overlap each other in real or PCI
-address space. OPAL does not validate those conditions.</p>
-</dd>
+address space. OPAL does not validate those conditions.</dd>
</dl>
<p>A segment size of â€0’ indicates to disable this MMIO window. If the PHB
hardware does not support disabling a window, OPAL returns OPAL_UNSUPPORTED
@@ -118,7 +120,6 @@ ranges indicated in the PHB parent HDT hub node ibm,opal-mmio-real property.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -138,15 +139,17 @@ ranges indicated in the PHB parent HDT hub node ibm,opal-mmio-real property.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -163,15 +166,14 @@ ranges indicated in the PHB parent HDT hub node ibm,opal-mmio-real property.</p>
<li class="right" >
<a href="opal-pci-set-phb-capi-mode-93.html" title="OPAL_PCI_SET_PHB_CAPI_MODE"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_PHB_MEM_WINDOW</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-set-power-state-121.html b/doc/opal-api/opal-pci-set-power-state-121.html
index 7d49081..acfbfe5 100644
--- a/doc/opal-api/opal-pci-set-power-state-121.html
+++ b/doc/opal-api/opal-pci-set-power-state-121.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_SET_POWER_STATE &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_SET_POWER_STATE &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-set-phb-mem-window-28.html" title="OPAL_PCI_SET_PHB_MEM_WINDOW"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_POWER_STATE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -54,16 +55,16 @@
<p>Set PCI slot power state</p>
<div class="section" id="parameters">
<h2>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">async_token</span></code></dt><dd><p>Token of asynchronous message to be sent
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">async_token</span></code></dt>
+<dd>Token of asynchronous message to be sent
on completion of OPAL_PCI_SLOT_POWER_{OFF, ON}. It is
-ignored when &#64;data is OPAL_PCI_SLOT_{OFFLINE, ONLINE}.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">id</span></code></dt><dd><p>PCI slot ID</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">data</span></code></dt><dd><p>memory buffer pointer for the power state which
-can be one of OPAL_PCI_SLOT_POWER_{OFF, ON, OFFLINE, ONLINE}.</p>
-</dd>
+ignored when &#64;data is OPAL_PCI_SLOT_{OFFLINE, ONLINE}.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">id</span></code></dt>
+<dd>PCI slot ID</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">data</span></code></dt>
+<dd>memory buffer pointer for the power state which
+can be one of OPAL_PCI_SLOT_POWER_{OFF, ON, OFFLINE, ONLINE}.</dd>
</dl>
</div>
<div class="section" id="calling">
@@ -83,21 +84,20 @@ message will be sent.</p>
</div>
<div class="section" id="return-codes">
<h2>Return Codes<a class="headerlink" href="#return-codes" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>PCI hotplug on the slot is completed successfully</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt><dd><p>PCI hotplug needs further message to confirm</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>The indicated PCI slot isn’t found</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>Setting power state not supported on the PCI slot</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>PCI hotplug on the slot is completed successfully</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt>
+<dd>PCI hotplug needs further message to confirm</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>The indicated PCI slot isn’t found</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>Setting power state not supported on the PCI slot</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -127,15 +127,17 @@ message will be sent.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -152,15 +154,14 @@ message will be sent.</p>
<li class="right" >
<a href="opal-pci-set-phb-mem-window-28.html" title="OPAL_PCI_SET_PHB_MEM_WINDOW"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_POWER_STATE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-set-xive-pe-37.html b/doc/opal-api/opal-pci-set-xive-pe-37.html
index f835fd3..0bf16cd 100644
--- a/doc/opal-api/opal-pci-set-xive-pe-37.html
+++ b/doc/opal-api/opal-pci-set-xive-pe-37.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_SET_XIVE_PE &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_SET_XIVE_PE &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-set-power-state-121.html" title="OPAL_PCI_SET_POWER_STATE"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_XIVE_PE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -56,13 +57,13 @@ not representative of OPALv3 as implemented by skiboot. This should be
used as a starting point for full documentation.</p>
<p>The host calls this function to bind a PE to an XIVE. Only that PE may then
signal an MSI that selects this XIVE.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt><dd><p>is the value from the PHB node ibm,opal-phbid property.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">pe_number</span></code></dt><dd><p>is the index of a PE, from 0 to ibm,opal-num-pes minus 1.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">xive_number</span></code></dt><dd><p>is the index, from 0 to ibm,opal,ibm-num-msis minus (num_lsis+1)</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">phb_id</span></code></dt>
+<dd>is the value from the PHB node ibm,opal-phbid property.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">pe_number</span></code></dt>
+<dd>is the index of a PE, from 0 to ibm,opal-num-pes minus 1.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">xive_number</span></code></dt>
+<dd>is the index, from 0 to ibm,opal,ibm-num-msis minus (num_lsis+1)</dd>
</dl>
<p>This call maps the XIVR indexed by xive_num to the PE specified by
pe_number. For ibm,opal-ioda HW, the pe_number must match the pe_number
@@ -77,7 +78,6 @@ set in the MVE.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -97,15 +97,17 @@ set in the MVE.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -122,15 +124,14 @@ set in the MVE.</p>
<li class="right" >
<a href="opal-pci-set-power-state-121.html" title="OPAL_PCI_SET_POWER_STATE"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_SET_XIVE_PE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-pci-tce-kill-126.html b/doc/opal-api/opal-pci-tce-kill-126.html
index 78b5c20..d33d280 100644
--- a/doc/opal-api/opal-pci-tce-kill-126.html
+++ b/doc/opal-api/opal-pci-tce-kill-126.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PCI_TCE_KILL &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PCI_TCE_KILL &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-set-xive-pe-37.html" title="OPAL_PCI_SET_XIVE_PE"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_TCE_KILL</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -68,19 +69,19 @@ call if they don’t know the model specific invalidation method.</p>
PHB4, which means from POWER9 onwards it will be present.</p>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>if <code class="docutils literal notranslate"><span class="pre">phb_id</span></code> is invalid (or similar)</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>if PHB model doesn’t support this call. This is likely
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>if <code class="docutils literal notranslate"><span class="pre">phb_id</span></code> is invalid (or similar)</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>if PHB model doesn’t support this call. This is likely
true for systems before POWER9/PHB4.
Do <em>NOT</em> rely on this call existing for systems prior to
-POWER9 (i.e. PHB4).</p>
-</dd>
+POWER9 (i.e. PHB4).</dd>
</dl>
<p>Example code (from linux/arch/powerpc/platforms/powernv/pci-ioda.c)</p>
-<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">static</span> <span class="kr">inline</span> <span class="kt">void</span> <span class="nf">pnv_pci_ioda2_tce_invalidate_pe</span><span class="p">(</span><span class="k">struct</span> <span class="nc">pnv_ioda_pe</span> <span class="o">*</span><span class="n">pe</span><span class="p">)</span>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">static</span> <span class="kr">inline</span> <span class="kt">void</span> <span class="nf">pnv_pci_ioda2_tce_invalidate_pe</span><span class="p">(</span><span class="k">struct</span> <span class="n">pnv_ioda_pe</span> <span class="o">*</span><span class="n">pe</span><span class="p">)</span>
<span class="p">{</span>
- <span class="k">struct</span> <span class="nc">pnv_phb</span> <span class="o">*</span><span class="n">phb</span> <span class="o">=</span> <span class="n">pe</span><span class="o">-&gt;</span><span class="n">phb</span><span class="p">;</span>
+ <span class="k">struct</span> <span class="n">pnv_phb</span> <span class="o">*</span><span class="n">phb</span> <span class="o">=</span> <span class="n">pe</span><span class="o">-&gt;</span><span class="n">phb</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">phb</span><span class="o">-&gt;</span><span class="n">model</span> <span class="o">==</span> <span class="n">PNV_PHB_MODEL_PHB3</span> <span class="o">&amp;&amp;</span> <span class="n">phb</span><span class="o">-&gt;</span><span class="n">regs</span><span class="p">)</span>
<span class="n">pnv_pci_phb3_tce_invalidate_pe</span><span class="p">(</span><span class="n">pe</span><span class="p">);</span>
@@ -91,14 +92,14 @@ POWER9 (i.e. PHB4).</p>
</pre></div>
</div>
<p>and</p>
-<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span> <span class="nc">pnv_phb</span> <span class="o">*</span><span class="n">phb</span> <span class="o">=</span> <span class="n">pe</span><span class="o">-&gt;</span><span class="n">phb</span><span class="p">;</span>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span> <span class="n">pnv_phb</span> <span class="o">*</span><span class="n">phb</span> <span class="o">=</span> <span class="n">pe</span><span class="o">-&gt;</span><span class="n">phb</span><span class="p">;</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">shift</span> <span class="o">=</span> <span class="n">tbl</span><span class="o">-&gt;</span><span class="n">it_page_shift</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">phb</span><span class="o">-&gt;</span><span class="n">model</span> <span class="o">==</span> <span class="n">PNV_PHB_MODEL_PHB3</span> <span class="o">&amp;&amp;</span> <span class="n">phb</span><span class="o">-&gt;</span><span class="n">regs</span><span class="p">)</span>
<span class="n">pnv_pci_phb3_tce_invalidate</span><span class="p">(</span><span class="n">pe</span><span class="p">,</span> <span class="n">rm</span><span class="p">,</span> <span class="n">shift</span><span class="p">,</span>
<span class="n">index</span><span class="p">,</span> <span class="n">npages</span><span class="p">);</span>
<span class="k">else</span>
- <span class="n">opal_pci_tce_kill</span><span class="p">(</span><span class="n">phb</span><span class="o">-&gt;</span><span class="n">opal_id</span><span class="p">,</span>
+ <span class="nf">opal_pci_tce_kill</span><span class="p">(</span><span class="n">phb</span><span class="o">-&gt;</span><span class="n">opal_id</span><span class="p">,</span>
<span class="n">OPAL_PCI_TCE_KILL_PAGES</span><span class="p">,</span>
<span class="n">pe</span><span class="o">-&gt;</span><span class="n">pe_number</span><span class="p">,</span> <span class="mi">1u</span> <span class="o">&lt;&lt;</span> <span class="n">shift</span><span class="p">,</span>
<span class="n">index</span> <span class="o">&lt;&lt;</span> <span class="n">shift</span><span class="p">,</span> <span class="n">npages</span><span class="p">);</span>
@@ -108,7 +109,6 @@ POWER9 (i.e. PHB4).</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -136,15 +136,17 @@ POWER9 (i.e. PHB4).</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -161,15 +163,14 @@ POWER9 (i.e. PHB4).</p>
<li class="right" >
<a href="opal-pci-set-xive-pe-37.html" title="OPAL_PCI_SET_XIVE_PE"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PCI_TCE_KILL</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-phb-flag-set-get-179-180.html b/doc/opal-api/opal-phb-flag-set-get-179-180.html
index 3c20ec7..753aa9a 100644
--- a/doc/opal-api/opal-phb-flag-set-get-179-180.html
+++ b/doc/opal-api/opal-phb-flag-set-get-179-180.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PHB_SET_OPTION &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PHB_SET_OPTION &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-pci-tce-kill-126.html" title="OPAL_PCI_TCE_KILL"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PHB_SET_OPTION</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -64,13 +65,13 @@ writes it to the hardware.</p>
<p>OPAL_PHB_OPTION_MMIO_EEH_DISABLE: Disables EEH for all MMIO commands; allowed setting 0 or 1.</p>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>if either the call or the option is not supported</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>if PHB is unknown or a new setting is out of range</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>if either the call or the option is not supported</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>if PHB is unknown or a new setting is out of range</dd>
</dl>
</div>
</div>
@@ -85,20 +86,19 @@ writes it to the hardware.</p>
<p>For the list of supported options refer to OPAL_PHB_SET_OPTION above.</p>
<div class="section" id="id3">
<h2>Returns<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>if either the call or the option is not supported</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>if PHB is unknown or a new setting is out of range or no memory
-allocated for the return value</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>if either the call or the option is not supported</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>if PHB is unknown or a new setting is out of range or no memory
+allocated for the return value</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -130,15 +130,17 @@ allocated for the return value</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -155,15 +157,14 @@ allocated for the return value</p>
<li class="right" >
<a href="opal-pci-tce-kill-126.html" title="OPAL_PCI_TCE_KILL"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PHB_SET_OPTION</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-poll-events.html b/doc/opal-api/opal-poll-events.html
index 3ad13b9..b88b08e 100644
--- a/doc/opal-api/opal-poll-events.html
+++ b/doc/opal-api/opal-poll-events.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_POLL_EVENTS &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_POLL_EVENTS &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-phb-flag-set-get-179-180.html" title="OPAL_PHB_SET_OPTION"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_POLL_EVENTS</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -125,7 +126,6 @@ of calls for details.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -164,15 +164,17 @@ of calls for details.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -189,15 +191,14 @@ of calls for details.</p>
<li class="right" >
<a href="opal-phb-flag-set-get-179-180.html" title="OPAL_PHB_SET_OPTION"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_POLL_EVENTS</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-power-shift-ratio.html b/doc/opal-api/opal-power-shift-ratio.html
index 09460c9..cd3a673 100644
--- a/doc/opal-api/opal-power-shift-ratio.html
+++ b/doc/opal-api/opal-power-shift-ratio.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL Power Shift Ratio &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL Power Shift Ratio &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-poll-events.html" title="OPAL_POLL_EVENTS"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Power Shift Ratio</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -60,43 +61,43 @@ device-tree.</p>
for the completion.</p>
<div class="section" id="parameters">
<h3>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 30%" />
-<col style="width: 70%" />
+<col width="30%" />
+<col width="70%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>u32</p></td>
-<td><p>handle</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>u32</td>
+<td>handle</td>
</tr>
-<tr class="row-odd"><td><p>int</p></td>
-<td><p>token</p></td>
+<tr class="row-odd"><td>int</td>
+<td>token</td>
</tr>
-<tr class="row-even"><td><p>u32</p></td>
-<td><p>*ratio</p></td>
+<tr class="row-even"><td>u32</td>
+<td>*ratio</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="returns">
<h3>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid ratio pointer</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>No support for reading psr</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>Unable to procced due to the current hardware state</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt><dd><p>Request was sent and an async completion message will be sent with
-token and status of the request.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid ratio pointer</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>No support for reading psr</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>Unable to procced due to the current hardware state</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt>
+<dd>Request was sent and an async completion message will be sent with
+token and status of the request.</dd>
</dl>
</div>
</div>
@@ -108,58 +109,57 @@ asynchronus where the token parameter is used to wait for the
completion.</p>
<div class="section" id="id3">
<h3>Parameters<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 33%" />
-<col style="width: 67%" />
+<col width="33%" />
+<col width="67%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>u32</p></td>
-<td><p>handle</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>u32</td>
+<td>handle</td>
</tr>
-<tr class="row-odd"><td><p>int</p></td>
-<td><p>token</p></td>
+<tr class="row-odd"><td>int</td>
+<td>token</td>
</tr>
-<tr class="row-even"><td><p>u32</p></td>
-<td><p>ratio</p></td>
+<tr class="row-even"><td>u32</td>
+<td>ratio</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="id4">
<h3>Returns<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid ratio requested</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>No support for changing the ratio</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-permission"><span class="std std-ref">OPAL_PERMISSION</span></a></dt><dd><p>Hardware cannot take the request</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt><dd><p>Request was sent and an async completion message will be sent with
-token and status of the request.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>Unable to procced due to the current hardware state</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt><dd><p>Previous request in progress</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>Error in request response</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-timeout"><span class="std std-ref">OPAL_TIMEOUT</span></a></dt><dd><p>Timeout in request completion</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid ratio requested</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>No support for changing the ratio</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-permission"><span class="std std-ref">OPAL_PERMISSION</span></a></dt>
+<dd>Hardware cannot take the request</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt>
+<dd>Request was sent and an async completion message will be sent with
+token and status of the request.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>Unable to procced due to the current hardware state</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt>
+<dd>Previous request in progress</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>Error in request response</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-timeout"><span class="std std-ref">OPAL_TIMEOUT</span></a></dt>
+<dd>Timeout in request completion</dd>
</dl>
</div>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -196,15 +196,17 @@ token and status of the request.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -221,15 +223,14 @@ token and status of the request.</p>
<li class="right" >
<a href="opal-poll-events.html" title="OPAL_POLL_EVENTS"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Power Shift Ratio</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-powercap.html b/doc/opal-api/opal-powercap.html
index 3be423f..0cec2e7 100644
--- a/doc/opal-api/opal-powercap.html
+++ b/doc/opal-api/opal-powercap.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL Power Caps &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL Power Caps &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-power-shift-ratio.html" title="OPAL Power Shift Ratio"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Power Caps</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -47,7 +48,7 @@
<div class="section" id="opal-power-caps">
<span id="opal-powercap"></span><h1>OPAL Power Caps<a class="headerlink" href="#opal-power-caps" title="Permalink to this headline">¶</a></h1>
<p>Each entity that can be power capped is described in the device tree,
-see <a class="reference internal" href="../device-tree/ibm%2Copal/power-mgt/powercap.html#device-tree-ibm-opal-power-mgt-powercap"><span class="std std-ref">power-mgt/powercap</span></a>. The values for each
+see <a class="reference internal" href="../device-tree/ibm,opal/power-mgt/powercap.html#device-tree-ibm-opal-power-mgt-powercap"><span class="std std-ref">power-mgt/powercap</span></a>. The values for each
power cap aren’t in the device tree, but rather fetched using the
<a class="reference internal" href="#opal-get-powercap"><span class="std std-ref">OPAL_GET_POWERCAP</span></a> OPAL call. This is because there may be other
entities such as a service processor that can change the nature of the
@@ -67,43 +68,43 @@ for them possibly being changed by other factors or entities
for the completion.</p>
<div class="section" id="parameters">
<h3>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 33%" />
-<col style="width: 67%" />
+<col width="33%" />
+<col width="67%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>u32</p></td>
-<td><p>handle</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>u32</td>
+<td>handle</td>
</tr>
-<tr class="row-odd"><td><p>int</p></td>
-<td><p>token</p></td>
+<tr class="row-odd"><td>int</td>
+<td>token</td>
</tr>
-<tr class="row-even"><td><p>u32</p></td>
-<td><p>*pcap</p></td>
+<tr class="row-even"><td>u32</td>
+<td>*pcap</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="returns">
<h3>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid pcap pointer</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>No support for reading powercap sensor</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>Unable to procced due to the current hardware state</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt><dd><p>Request was sent and an async completion message will be sent with
-token and status of the request.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid pcap pointer</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>No support for reading powercap sensor</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>Unable to procced due to the current hardware state</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt>
+<dd>Request was sent and an async completion message will be sent with
+token and status of the request.</dd>
</dl>
</div>
</div>
@@ -121,42 +122,41 @@ future, this may change - but for now, the correct behaviour for an
Operating System is to not attempt to set them.</p>
<div class="section" id="id3">
<h3>Parameters<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt>::</dt><dd><p>u32 handle
+<dl class="docutils">
+<dt>::</dt>
+<dd>u32 handle
int token
-u32 pcap</p>
-</dd>
+u32 pcap</dd>
</dl>
</div>
<div class="section" id="id4">
<h3>Returns<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid powercap requested beyond powercap limits</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>No support for changing the powercap</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-permission"><span class="std std-ref">OPAL_PERMISSION</span></a></dt><dd><p>Hardware cannot take the request</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt><dd><p>Request was sent and an async completion message will be sent with
-token and status of the request.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>Unable to procced due to the current hardware state</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt><dd><p>Previous request in progress</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>Error in request response</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-timeout"><span class="std std-ref">OPAL_TIMEOUT</span></a></dt><dd><p>Timeout in request completion</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid powercap requested beyond powercap limits</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>No support for changing the powercap</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-permission"><span class="std std-ref">OPAL_PERMISSION</span></a></dt>
+<dd>Hardware cannot take the request</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt>
+<dd>Request was sent and an async completion message will be sent with
+token and status of the request.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>Unable to procced due to the current hardware state</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt>
+<dd>Previous request in progress</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>Error in request response</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-timeout"><span class="std std-ref">OPAL_TIMEOUT</span></a></dt>
+<dd>Timeout in request completion</dd>
</dl>
</div>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -193,15 +193,17 @@ token and status of the request.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -218,15 +220,14 @@ token and status of the request.</p>
<li class="right" >
<a href="opal-power-shift-ratio.html" title="OPAL Power Shift Ratio"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Power Caps</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-prd-msg-113.html b/doc/opal-api/opal-prd-msg-113.html
index 30d9268..039996a 100644
--- a/doc/opal-api/opal-prd-msg-113.html
+++ b/doc/opal-api/opal-prd-msg-113.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_PRD_MSG &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_PRD_MSG &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-powercap.html" title="OPAL Power Caps"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PRD_MSG</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -48,22 +49,21 @@
<span id="id1"></span><h1>OPAL_PRD_MSG<a class="headerlink" href="#opal-prd-msg" title="Permalink to this headline">¶</a></h1>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#define OPAL_PRD_MSG 113</span>
-<span class="kt">int64_t</span> <span class="nf">opal_prd_msg</span><span class="p">(</span><span class="k">struct</span> <span class="nc">opal_prd_msg</span> <span class="o">*</span><span class="n">msg</span><span class="p">);</span>
+<span class="kt">int64_t</span> <span class="nf">opal_prd_msg</span><span class="p">(</span><span class="k">struct</span> <span class="n">opal_prd_msg</span> <span class="o">*</span><span class="n">msg</span><span class="p">);</span>
</pre></div>
</div>
<p>The OPAL_PRD_MSG call is used to pass a struct opal_prd_msg from the HBRT
code into opal, and is paired with the <a class="reference internal" href="#opal-prd-msg"><span class="std std-ref">OPAL_PRD_MSG</span></a> message type.</p>
<div class="section" id="parameters">
<h2>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">opal_msg</span> <span class="pre">*msg</span></code></dt><dd><p>Passes an opal_msg, of type OPAL_PRD_MSG, from the OS to OPAL.</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">opal_msg</span> <span class="pre">*msg</span></code></dt>
+<dd>Passes an opal_msg, of type OPAL_PRD_MSG, from the OS to OPAL.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -91,15 +91,17 @@ code into opal, and is paired with the <a class="reference internal" href="#opal
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -116,15 +118,14 @@ code into opal, and is paired with the <a class="reference internal" href="#opal
<li class="right" >
<a href="opal-powercap.html" title="OPAL Power Caps"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_PRD_MSG</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-query-cpu-status-42.html b/doc/opal-api/opal-query-cpu-status-42.html
index 12e3998..2c212fc 100644
--- a/doc/opal-api/opal-query-cpu-status-42.html
+++ b/doc/opal-api/opal-query-cpu-status-42.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_QUERY_CPU_STATUS &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_QUERY_CPU_STATUS &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-prd-msg-113.html" title="OPAL_PRD_MSG"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_QUERY_CPU_STATUS</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -60,27 +61,26 @@
<p>Sets <cite>thread_status</cite> to be the state of the <cite>server_no</cite> CPU thread. CPU threads
can be owned by OPAL or the OS. Ownership changes based on <a class="reference internal" href="opal-start-return-cpu-41-69.html#opal-start-cpu"><span class="std std-ref">OPAL_START_CPU</span></a>
and <a class="reference internal" href="opal-start-return-cpu-41-69.html#opal-return-cpu"><span class="std std-ref">OPAL_RETURN_CPU</span></a>.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_THREAD_INACTIVE</span></code></dt><dd><p>Active in skiboot, not in OS. Skiboot owns the CPU thread.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_THREAD_STARTED</span></code></dt><dd><p>CPU has been started by OS, not owned by OPAL.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_THREAD_UNAVAILABLE</span></code></dt><dd><p>CPU is unavailable. e.g. is guarded out.</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_THREAD_INACTIVE</span></code></dt>
+<dd>Active in skiboot, not in OS. Skiboot owns the CPU thread.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_THREAD_STARTED</span></code></dt>
+<dd>CPU has been started by OS, not owned by OPAL.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_THREAD_UNAVAILABLE</span></code></dt>
+<dd>CPU is unavailable. e.g. is guarded out.</dd>
</dl>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid address for <cite>thread_status</cite>, invalid CPU, or CPU not in OPAL or OS.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Successfully retreived status.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid address for <cite>thread_status</cite>, invalid CPU, or CPU not in OPAL or OS.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Successfully retreived status.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -108,15 +108,17 @@ and <a class="reference internal" href="opal-start-return-cpu-41-69.html#opal-re
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -133,15 +135,14 @@ and <a class="reference internal" href="opal-start-return-cpu-41-69.html#opal-re
<li class="right" >
<a href="opal-prd-msg-113.html" title="OPAL_PRD_MSG"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_QUERY_CPU_STATUS</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-quiesce-158.html b/doc/opal-api/opal-quiesce-158.html
index cd13e8c..ae89a52 100644
--- a/doc/opal-api/opal-quiesce-158.html
+++ b/doc/opal-api/opal-quiesce-158.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_QUIESCE &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_QUIESCE &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-query-cpu-status-42.html" title="OPAL_QUERY_CPU_STATUS"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_QUIESCE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -59,66 +60,65 @@ ensure that CPUs are not holding locks, and is intended to be used with
<h2>Arguments<a class="headerlink" href="#arguments" title="Permalink to this headline">¶</a></h2>
<div class="section" id="quiesce-type">
<h3>quiesce_type<a class="headerlink" href="#quiesce-type" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt>QUIESCE_HOLD</dt><dd><p>Wait for all target(s) currently executing OPAL to
+<dl class="docutils">
+<dt>QUIESCE_HOLD</dt>
+<dd>Wait for all target(s) currently executing OPAL to
return to the host. Any new OPAL call that is made
-will be held off until QUIESCE_RESUME.</p>
-</dd>
-<dt>QUIESCE_REJECT</dt><dd><p>Wait for all target(s) currently executing OPAL to
+will be held off until QUIESCE_RESUME.</dd>
+<dt>QUIESCE_REJECT</dt>
+<dd>Wait for all target(s) currently executing OPAL to
return to the host. Any new OPAL call that is made
-will fail with OPAL_BUSY until QUIESCE_RESUME.</p>
-</dd>
-<dt>QUIESCE_LOCK_BREAK</dt><dd><p>After QUIESCE_HOLD or QUIESCE_REJECT is successful,
+will fail with OPAL_BUSY until QUIESCE_RESUME.</dd>
+<dt>QUIESCE_LOCK_BREAK</dt>
+<dd>After QUIESCE_HOLD or QUIESCE_REJECT is successful,
the CPU can call QUIESCE_LOCK_BREAK to skip all
locking in OPAL to give the best chance of making
progress in the crash/debug paths. The host should
ensure all other CPUs are stopped (e.g., with
OPAL_SIGNAL_SYSTEM_RESET) before this call is made, to
-avoid concurrency.</p>
-</dd>
-<dt>QUIESCE_RESUME</dt><dd><p>Undo the effects of QUIESCE_HOLD/QUIESCE_REJECT and
-QUIESCE_LOCK_BREAK calls.</p>
-</dd>
-<dt>QUIESCE_RESUME_FAST_REBOOT</dt><dd><p>As above, but also reset the tracking of OS calls
+avoid concurrency.</dd>
+<dt>QUIESCE_RESUME</dt>
+<dd>Undo the effects of QUIESCE_HOLD/QUIESCE_REJECT and
+QUIESCE_LOCK_BREAK calls.</dd>
+<dt>QUIESCE_RESUME_FAST_REBOOT</dt>
+<dd>As above, but also reset the tracking of OS calls
into firmware as part of fast reboot (secondaries
will never return to OS, but instead be released
-into a new OS boot).</p>
-</dd>
+into a new OS boot).</dd>
</dl>
</div>
<div class="section" id="target-cpu">
<h3>target_cpu<a class="headerlink" href="#target-cpu" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">cpu_nr</span> <span class="pre">&gt;=</span> <span class="pre">0</span></code></dt><dd><p>The cpu server number of the target cpu to reset.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">-1</span></code></dt><dd><p>All cpus except the current one should be quiesced.</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">cpu_nr</span> <span class="pre">&gt;=</span> <span class="pre">0</span></code></dt>
+<dd>The cpu server number of the target cpu to reset.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">-1</span></code></dt>
+<dd>All cpus except the current one should be quiesced.</dd>
</dl>
</div>
</div>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>The quiesce call was successful.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-partial"><span class="std std-ref">OPAL_PARTIAL</span></a></dt><dd><p>Some or all of the CPUs executing OPAL when the call was made did not
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>The quiesce call was successful.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-partial"><span class="std std-ref">OPAL_PARTIAL</span></a></dt>
+<dd>Some or all of the CPUs executing OPAL when the call was made did not
return to the host after a timeout of 1 second. This is a best effort
at quiescing OPAL, and QUIESCE_RESUME must be called to resume normal
-firmware operation.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>A parameter was incorrect.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt><dd><p>This CPU was not able to complete the operation, either because another
+firmware operation.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>A parameter was incorrect.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt>
+<dd>This CPU was not able to complete the operation, either because another
has concurrently started quiescing the system, or because it has not
successfully called QUIESCE_HOLD or QUIESCE_REJECT before attempting
-QUIESCE_LOCK_BREAK or QUIESCE_RESUME.</p>
-</dd>
+QUIESCE_LOCK_BREAK or QUIESCE_RESUME.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -151,15 +151,17 @@ QUIESCE_LOCK_BREAK or QUIESCE_RESUME.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -176,15 +178,14 @@ QUIESCE_LOCK_BREAK or QUIESCE_RESUME.</p>
<li class="right" >
<a href="opal-query-cpu-status-42.html" title="OPAL_QUERY_CPU_STATUS"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_QUIESCE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-read-write-tpo-dpo-103-104-105.html b/doc/opal-api/opal-read-write-tpo-dpo-103-104-105.html
index 0959e8d..c6422a0 100644
--- a/doc/opal-api/opal-read-write-tpo-dpo-103-104-105.html
+++ b/doc/opal-api/opal-read-write-tpo-dpo-103-104-105.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL Timed Power On and Delayed Power Off &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL Timed Power On and Delayed Power Off &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-quiesce-158.html" title="OPAL_QUIESCE"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Timed Power On and Delayed Power Off</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -96,19 +97,18 @@ number of seconds remaining for a forced system shutdown. This will enable
the host to schedule for shutdown voluntarily before timeout occurs.</p>
<div class="section" id="returns">
<h3>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p><code class="docutils literal notranslate"><span class="pre">dpo_timeout</span></code> is set to the number of seconds remaining before power is
-cut.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></dt><dd><p>A Delayed Power Off is not pending, <code class="docutils literal notranslate"><span class="pre">dpo_timeout</span></code> is set to zero.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd><code class="docutils literal notranslate"><span class="pre">dpo_timeout</span></code> is set to the number of seconds remaining before power is
+cut.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></dt>
+<dd>A Delayed Power Off is not pending, <code class="docutils literal notranslate"><span class="pre">dpo_timeout</span></code> is set to zero.</dd>
</dl>
</div>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -141,15 +141,17 @@ cut.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -166,15 +168,14 @@ cut.</p>
<li class="right" >
<a href="opal-quiesce-158.html" title="OPAL_QUIESCE"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Timed Power On and Delayed Power Off</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-reinit-cpus-70.html b/doc/opal-api/opal-reinit-cpus-70.html
index f9d6126..a826af3 100644
--- a/doc/opal-api/opal-reinit-cpus-70.html
+++ b/doc/opal-api/opal-reinit-cpus-70.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_REINIT_CPUS &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_REINIT_CPUS &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-read-write-tpo-dpo-103-104-105.html" title="OPAL Timed Power On and Delayed Power Off"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_REINIT_CPUS</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -92,17 +93,16 @@ use them to ensure compatibility in the future.</p>
</div>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success!</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>Processor does not suport reinit flags.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success!</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>Processor does not suport reinit flags.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -135,15 +135,17 @@ use them to ensure compatibility in the future.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -160,15 +162,14 @@ use them to ensure compatibility in the future.</p>
<li class="right" >
<a href="opal-read-write-tpo-dpo-103-104-105.html" title="OPAL Timed Power On and Delayed Power Off"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_REINIT_CPUS</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-resync-timebase-79.html b/doc/opal-api/opal-resync-timebase-79.html
index d388709..3ca4661 100644
--- a/doc/opal-api/opal-resync-timebase-79.html
+++ b/doc/opal-api/opal-resync-timebase-79.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_RESYNC_TIMEBASE &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_RESYNC_TIMEBASE &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-reinit-cpus-70.html" title="OPAL_REINIT_CPUS"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_RESYNC_TIMEBASE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -55,17 +56,16 @@
chiptod.</p>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Successfully resynced timebases (or it’s a no-op on this platform).</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>Failed to resync timebase.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Successfully resynced timebases (or it’s a no-op on this platform).</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>Failed to resync timebase.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -93,15 +93,17 @@ chiptod.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -118,15 +120,14 @@ chiptod.</p>
<li class="right" >
<a href="opal-reinit-cpus-70.html" title="OPAL_REINIT_CPUS"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_RESYNC_TIMEBASE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-rtc-read-write-3-4.html b/doc/opal-api/opal-rtc-read-write-3-4.html
index 1fca85c..d431ae8 100644
--- a/doc/opal-api/opal-rtc-read-write-3-4.html
+++ b/doc/opal-api/opal-rtc-read-write-3-4.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL Real Time Clock (RTC) APIs &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL Real Time Clock (RTC) APIs &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-resync-timebase-79.html" title="OPAL_RESYNC_TIMEBASE"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Real Time Clock (RTC) APIs</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -51,21 +52,23 @@
<p>Read the Real Time Clock.</p>
<div class="section" id="parameters">
<h3>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">uint32_t*</span> <span class="pre">year_month_day</span></code></dt><dd><p>the year, month and day formatted as follows:</p>
-<ul class="simple">
-<li><p>bits 0-15 is bcd formatted year (0100-9999)</p></li>
-<li><p>bits 16-23 is bcd formatted month (01-12)</p></li>
-<li><p>bits 24-31 is bcd formatted day (01-31)</p></li>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">uint32_t*</span> <span class="pre">year_month_day</span></code></dt>
+<dd><p class="first">the year, month and day formatted as follows:</p>
+<ul class="last simple">
+<li>bits 0-15 is bcd formatted year (0100-9999)</li>
+<li>bits 16-23 is bcd formatted month (01-12)</li>
+<li>bits 24-31 is bcd formatted day (01-31)</li>
</ul>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t*</span> <span class="pre">hour_minute_second_millisecond</span></code></dt><dd><p>the hour, minute, second and millisecond formatted as follows:</p>
-<ul class="simple">
-<li><p>bits 0-16 is reserved</p></li>
-<li><p>bits 17-24 is bcd formatted hour (00-23)</p></li>
-<li><p>bits 25-31 is bcd formatted minute (00-59)</p></li>
-<li><p>bits 32-39 is bcd formatted second (00-60)</p></li>
-<li><p>bits 40-63 is bcd formatted milliseconds (000000-999999)</p></li>
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t*</span> <span class="pre">hour_minute_second_millisecond</span></code></dt>
+<dd><p class="first">the hour, minute, second and millisecond formatted as follows:</p>
+<ul class="last simple">
+<li>bits 0-16 is reserved</li>
+<li>bits 17-24 is bcd formatted hour (00-23)</li>
+<li>bits 25-31 is bcd formatted minute (00-59)</li>
+<li>bits 32-39 is bcd formatted second (00-60)</li>
+<li>bits 40-63 is bcd formatted milliseconds (000000-999999)</li>
</ul>
</dd>
</dl>
@@ -95,21 +98,21 @@ return the retreived value rather than <a class="reference internal" href="retur
</div>
<div class="section" id="return-codes">
<h3>Return codes<a class="headerlink" href="#return-codes" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>parameters now contain the current time, or one read from cache.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>error in retrieving the time. May be transient error,
-may be permanent.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>year_month_day or hour_minute_second_millisecond parameters are NULL</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>something went wrong, Possibly reported in error log.
-This can be a transient error</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a></dt><dd><p>request is in flight</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt><dd><p>request may be in flight</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>parameters now contain the current time, or one read from cache.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>error in retrieving the time. May be transient error,
+may be permanent.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>year_month_day or hour_minute_second_millisecond parameters are NULL</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>something went wrong, Possibly reported in error log.
+This can be a transient error</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a></dt>
+<dd>request is in flight</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt>
+<dd>request may be in flight</dd>
</dl>
</div>
</div>
@@ -123,7 +126,6 @@ writes are ignored. There can only be one write in flight at any one time.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -157,15 +159,17 @@ writes are ignored. There can only be one write in flight at any one time.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -182,15 +186,14 @@ writes are ignored. There can only be one write in flight at any one time.</p>
<li class="right" >
<a href="opal-resync-timebase-79.html" title="OPAL_RESYNC_TIMEBASE"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Real Time Clock (RTC) APIs</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-secvar.html b/doc/opal-api/opal-secvar.html
index f318051..1c65cbb 100644
--- a/doc/opal-api/opal-secvar.html
+++ b/doc/opal-api/opal-secvar.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL Secure Variable API &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL Secure Variable API &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-rtc-read-write-3-4.html" title="OPAL Real Time Clock (RTC) APIs"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Secure Variable API</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -75,40 +76,40 @@ key.</p>
<span class="n">uint64_t</span> <span class="o">*</span><span class="n">data_size</span>
</pre></div>
</div>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">key</span></code></dt><dd><p>a buffer used to associate with the variable data. May
-be any encoding, but must not be all zeroes</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">key_len</span></code></dt><dd><p>size of the key buffer in bytes</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">data</span></code></dt><dd><p>return buffer to store the data blob of the requested variable if
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">key</span></code></dt>
+<dd>a buffer used to associate with the variable data. May
+be any encoding, but must not be all zeroes</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">key_len</span></code></dt>
+<dd>size of the key buffer in bytes</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">data</span></code></dt>
+<dd>return buffer to store the data blob of the requested variable if
a match was found. May be set to NULL to only query the size into
-<code class="docutils literal notranslate"><span class="pre">data_size</span></code></p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">data_size</span></code></dt><dd><p>reference to the size of the <code class="docutils literal notranslate"><span class="pre">data</span></code> buffer. OPAL sets this to
-the size of the requested variable if found.</p>
-</dd>
+<code class="docutils literal notranslate"><span class="pre">data_size</span></code></dd>
+<dt><code class="docutils literal notranslate"><span class="pre">data_size</span></code></dt>
+<dd>reference to the size of the <code class="docutils literal notranslate"><span class="pre">data</span></code> buffer. OPAL sets this to
+the size of the requested variable if found.</dd>
</dl>
</div>
<div class="section" id="return-values">
<h2>Return Values<a class="headerlink" href="#return-values" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_SUCCESS</span></code></dt><dd><p>the requested data blob was copied successfully. <code class="docutils literal notranslate"><span class="pre">data</span></code> was NULL,
-and the <code class="docutils literal notranslate"><span class="pre">data_size</span></code> value was set successfully</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARAMETER</span></code></dt><dd><p><code class="docutils literal notranslate"><span class="pre">key</span></code> is NULL.
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_SUCCESS</span></code></dt>
+<dd>the requested data blob was copied successfully. <code class="docutils literal notranslate"><span class="pre">data</span></code> was NULL,
+and the <code class="docutils literal notranslate"><span class="pre">data_size</span></code> value was set successfully</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARAMETER</span></code></dt>
+<dd><code class="docutils literal notranslate"><span class="pre">key</span></code> is NULL.
<code class="docutils literal notranslate"><span class="pre">key_len</span></code> is zero.
-<code class="docutils literal notranslate"><span class="pre">data_size</span></code> is NULL.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_EMPTY</span></code></dt><dd><p>no variable with the supplied <code class="docutils literal notranslate"><span class="pre">key</span></code> was found</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARTIAL</span></code></dt><dd><p>the buffer size provided in <code class="docutils literal notranslate"><span class="pre">data_size</span></code> was insufficient.
-<code class="docutils literal notranslate"><span class="pre">data_size</span></code> is set to the minimum required size.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_UNSUPPORTED</span></code></dt><dd><p>secure variables are not supported by the platform</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_RESOURCE</span></code></dt><dd><p>secure variables are supported, but did not initialize properly</p>
-</dd>
+<code class="docutils literal notranslate"><span class="pre">data_size</span></code> is NULL.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_EMPTY</span></code></dt>
+<dd>no variable with the supplied <code class="docutils literal notranslate"><span class="pre">key</span></code> was found</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARTIAL</span></code></dt>
+<dd>the buffer size provided in <code class="docutils literal notranslate"><span class="pre">data_size</span></code> was insufficient.
+<code class="docutils literal notranslate"><span class="pre">data_size</span></code> is set to the minimum required size.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_UNSUPPORTED</span></code></dt>
+<dd>secure variables are not supported by the platform</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_RESOURCE</span></code></dt>
+<dd>secure variables are supported, but did not initialize properly</dd>
</dl>
</div>
</div>
@@ -126,40 +127,40 @@ variable bank in sequence.</p>
<span class="n">uint64_t</span> <span class="n">key_buf_size</span>
</pre></div>
</div>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">key</span></code></dt><dd><p>name of the previous variable or empty. The key of the next
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">key</span></code></dt>
+<dd>name of the previous variable or empty. The key of the next
variable in sequence will be copied to <code class="docutils literal notranslate"><span class="pre">key</span></code>. If passed as empty,
-returns the first variable in the bank</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">key_len</span></code></dt><dd><p>length in bytes of the key in the <code class="docutils literal notranslate"><span class="pre">key</span></code> buffer. OPAL sets
-this to the length in bytes of the next variable in sequence</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">key_buf_size</span></code></dt><dd><p>maximum size of the <code class="docutils literal notranslate"><span class="pre">key</span></code> buffer. The next key will not be
-copied if this value is less than the length of the next key</p>
-</dd>
+returns the first variable in the bank</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">key_len</span></code></dt>
+<dd>length in bytes of the key in the <code class="docutils literal notranslate"><span class="pre">key</span></code> buffer. OPAL sets
+this to the length in bytes of the next variable in sequence</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">key_buf_size</span></code></dt>
+<dd>maximum size of the <code class="docutils literal notranslate"><span class="pre">key</span></code> buffer. The next key will not be
+copied if this value is less than the length of the next key</dd>
</dl>
</div>
<div class="section" id="id2">
<h2>Return Values<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_SUCCESS</span></code></dt><dd><p>the key and length of the next variable in sequence was copied
-successfully</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARAMETER</span></code></dt><dd><p><code class="docutils literal notranslate"><span class="pre">key</span></code> or <code class="docutils literal notranslate"><span class="pre">key_length</span></code> is NULL.
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_SUCCESS</span></code></dt>
+<dd>the key and length of the next variable in sequence was copied
+successfully</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARAMETER</span></code></dt>
+<dd><code class="docutils literal notranslate"><span class="pre">key</span></code> or <code class="docutils literal notranslate"><span class="pre">key_length</span></code> is NULL.
<code class="docutils literal notranslate"><span class="pre">key_size</span></code> is zero.
<code class="docutils literal notranslate"><span class="pre">key_length</span></code> is impossibly large. No variable with the associated
-<code class="docutils literal notranslate"><span class="pre">key</span></code> was found</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_EMPTY</span></code></dt><dd><p>end of list reached</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARTIAL</span></code></dt><dd><p>the size specified in <code class="docutils literal notranslate"><span class="pre">key_size</span></code> is insufficient for the next
+<code class="docutils literal notranslate"><span class="pre">key</span></code> was found</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_EMPTY</span></code></dt>
+<dd>end of list reached</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARTIAL</span></code></dt>
+<dd>the size specified in <code class="docutils literal notranslate"><span class="pre">key_size</span></code> is insufficient for the next
variable’s key length. <code class="docutils literal notranslate"><span class="pre">key_length</span></code> is set to the next variable’s
-length, but <code class="docutils literal notranslate"><span class="pre">key</span></code> is untouched</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_UNSUPPORTED</span></code></dt><dd><p>secure variables are not supported by the platform</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_RESOURCE</span></code></dt><dd><p>secure variables are supported, but did not initialize properly</p>
-</dd>
+length, but <code class="docutils literal notranslate"><span class="pre">key</span></code> is untouched</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_UNSUPPORTED</span></code></dt>
+<dd>secure variables are not supported by the platform</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_RESOURCE</span></code></dt>
+<dd>secure variables are supported, but did not initialize properly</dd>
</dl>
</div>
</div>
@@ -178,42 +179,41 @@ queue for processing on next boot.</p>
<span class="n">uint64_t</span> <span class="n">data_size</span>
</pre></div>
</div>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">key</span></code></dt><dd><p>a buffer used to associate with the variable data. May
-be any encoding, but must not be all zeroes</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">key_len</span></code></dt><dd><p>size of the key buffer in bytes</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">data</span></code></dt><dd><p>buffer containing the blob of data to enqueue</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">data_size</span></code></dt><dd><p>size of the <code class="docutils literal notranslate"><span class="pre">data</span></code> buffer</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">key</span></code></dt>
+<dd>a buffer used to associate with the variable data. May
+be any encoding, but must not be all zeroes</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">key_len</span></code></dt>
+<dd>size of the key buffer in bytes</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">data</span></code></dt>
+<dd>buffer containing the blob of data to enqueue</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">data_size</span></code></dt>
+<dd>size of the <code class="docutils literal notranslate"><span class="pre">data</span></code> buffer</dd>
</dl>
</div>
<div class="section" id="id4">
<h2>Return Values<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_SUCCESS</span></code></dt><dd><p>the variable was appended to the update queue bank successfully</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARAMETER</span></code></dt><dd><p><code class="docutils literal notranslate"><span class="pre">key</span></code> or <code class="docutils literal notranslate"><span class="pre">data</span></code> was NULL.
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_SUCCESS</span></code></dt>
+<dd>the variable was appended to the update queue bank successfully</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_PARAMETER</span></code></dt>
+<dd><code class="docutils literal notranslate"><span class="pre">key</span></code> or <code class="docutils literal notranslate"><span class="pre">data</span></code> was NULL.
<code class="docutils literal notranslate"><span class="pre">key</span></code> was empty.
<code class="docutils literal notranslate"><span class="pre">key_len</span></code> or <code class="docutils literal notranslate"><span class="pre">data_size</span></code> was zero.
-<code class="docutils literal notranslate"><span class="pre">key_len</span></code>, <code class="docutils literal notranslate"><span class="pre">data_size</span></code> is larger than the maximum size</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_NO_MEM</span></code></dt><dd><p>OPAL was unable to allocate memory for the variable update</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_HARDWARE</span></code></dt><dd><p>OPAL was unable to write the update to persistant storage</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_UNSUPPORTED</span></code></dt><dd><p>secure variables are not supported by the platform</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">OPAL_RESOURCE</span></code></dt><dd><p>secure variables are supported, but did not initialize properly</p>
-</dd>
+<code class="docutils literal notranslate"><span class="pre">key_len</span></code>, <code class="docutils literal notranslate"><span class="pre">data_size</span></code> is larger than the maximum size</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_NO_MEM</span></code></dt>
+<dd>OPAL was unable to allocate memory for the variable update</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_HARDWARE</span></code></dt>
+<dd>OPAL was unable to write the update to persistant storage</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_UNSUPPORTED</span></code></dt>
+<dd>secure variables are not supported by the platform</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">OPAL_RESOURCE</span></code></dt>
+<dd>secure variables are supported, but did not initialize properly</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -256,15 +256,17 @@ be any encoding, but must not be all zeroes</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -281,15 +283,14 @@ be any encoding, but must not be all zeroes</p>
<li class="right" >
<a href="opal-rtc-read-write-3-4.html" title="OPAL Real Time Clock (RTC) APIs"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Secure Variable API</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-sensor-group-enable-clear-163-156.html b/doc/opal-api/opal-sensor-group-enable-clear-163-156.html
index 47fb5d5..c7fb9fd 100644
--- a/doc/opal-api/opal-sensor-group-enable-clear-163-156.html
+++ b/doc/opal-api/opal-sensor-group-enable-clear-163-156.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL Sensor Groups &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL Sensor Groups &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-secvar.html" title="OPAL Secure Variable API"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Sensor Groups</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -46,7 +47,7 @@
<div class="section" id="opal-sensor-groups">
<span id="id1"></span><h1>OPAL Sensor Groups<a class="headerlink" href="#opal-sensor-groups" title="Permalink to this headline">¶</a></h1>
-<p>See <a class="reference internal" href="../device-tree/ibm%2Copal/sensor-groups.html#device-tree-ibm-opal-sensor-groups"><span class="std std-ref">ibm,opal/sensor-groups</span></a> for device tree layout.</p>
+<p>See <a class="reference internal" href="../device-tree/ibm,opal/sensor-groups.html#device-tree-ibm-opal-sensor-groups"><span class="std std-ref">ibm,opal/sensor-groups</span></a> for device tree layout.</p>
<div class="section" id="opal-sensor-group-enable">
<span id="id2"></span><h2>OPAL_SENSOR_GROUP_ENABLE<a class="headerlink" href="#opal-sensor-group-enable" title="Permalink to this headline">¶</a></h2>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#define OPAL_SENSOR_GROUP_ENABLE 163</span>
@@ -62,24 +63,24 @@ group by OCC to main memory.</p>
for the completion.</p>
<div class="section" id="returns">
<h3>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>No support to enable/disable the sensor group</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>Unable to procced due to the current hardware state</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-permission"><span class="std std-ref">OPAL_PERMISSION</span></a></dt><dd><p>Hardware cannot take the request</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt><dd><p>Request was sent and an async completion message will be sent with
-token and status of the request.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt><dd><p>Previous request in progress</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>Error in request response</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-timeout"><span class="std std-ref">OPAL_TIMEOUT</span></a></dt><dd><p>Timeout in request completion</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>No support to enable/disable the sensor group</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>Unable to procced due to the current hardware state</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-permission"><span class="std std-ref">OPAL_PERMISSION</span></a></dt>
+<dd>Hardware cannot take the request</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt>
+<dd>Request was sent and an async completion message will be sent with
+token and status of the request.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt>
+<dd>Previous request in progress</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>Error in request response</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-timeout"><span class="std std-ref">OPAL_TIMEOUT</span></a></dt>
+<dd>Timeout in request completion</dd>
</dl>
</div>
</div>
@@ -96,31 +97,30 @@ the type of sensor group which is exported via DT.</p>
for the completion.</p>
<div class="section" id="id4">
<h3>Returns<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>No support for clearing the sensor group</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>Unable to procced due to the current hardware state</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-permission"><span class="std std-ref">OPAL_PERMISSION</span></a></dt><dd><p>Hardware cannot take the request</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt><dd><p>Request was sent and an async completion message will be sent with
-token and status of the request.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt><dd><p>Previous request in progress</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>Error in request response</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-timeout"><span class="std std-ref">OPAL_TIMEOUT</span></a></dt><dd><p>Timeout in request completion</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>No support for clearing the sensor group</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>Unable to procced due to the current hardware state</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-permission"><span class="std std-ref">OPAL_PERMISSION</span></a></dt>
+<dd>Hardware cannot take the request</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt>
+<dd>Request was sent and an async completion message will be sent with
+token and status of the request.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt>
+<dd>Previous request in progress</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>Error in request response</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-timeout"><span class="std std-ref">OPAL_TIMEOUT</span></a></dt>
+<dd>Timeout in request completion</dd>
</dl>
</div>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -155,15 +155,17 @@ token and status of the request.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -180,15 +182,14 @@ token and status of the request.</p>
<li class="right" >
<a href="opal-secvar.html" title="OPAL Secure Variable API"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Sensor Groups</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-sensor-read-88.html b/doc/opal-api/opal-sensor-read-88.html
index bc23846..3b2dd44 100644
--- a/doc/opal-api/opal-sensor-read-88.html
+++ b/doc/opal-api/opal-sensor-read-88.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_SENSOR_READ &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_SENSOR_READ &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-sensor-group-enable-clear-163-156.html" title="OPAL Sensor Groups"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_SENSOR_READ</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -75,26 +76,26 @@ is present and gracefully fall back to <a class="reference internal" href="#opal
</div>
<div class="section" id="return-values">
<h2>Return values<a class="headerlink" href="#return-values" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success!</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>invalid sensor handle</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>platform does not support reading sensors.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt><dd><p>a request was sent and an async completion will
-be triggered with the &#64;token argument</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-partial"><span class="std std-ref">OPAL_PARTIAL</span></a></dt><dd><p>the request completed but the data returned is invalid</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a></dt><dd><p>a previous request is still pending</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-no-mem"><span class="std std-ref">OPAL_NO_MEM</span></a></dt><dd><p>allocation failed</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>communication failure with the FSP</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>FSP is not available</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success!</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>invalid sensor handle</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>platform does not support reading sensors.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt>
+<dd>a request was sent and an async completion will
+be triggered with the &#64;token argument</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-partial"><span class="std std-ref">OPAL_PARTIAL</span></a></dt>
+<dd>the request completed but the data returned is invalid</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a></dt>
+<dd>a previous request is still pending</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-no-mem"><span class="std std-ref">OPAL_NO_MEM</span></a></dt>
+<dd>allocation failed</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>communication failure with the FSP</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>FSP is not available</dd>
</dl>
</div>
</div>
@@ -118,7 +119,6 @@ is present and gracefully fall back to <a class="reference internal" href="#opal
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -148,15 +148,17 @@ is present and gracefully fall back to <a class="reference internal" href="#opal
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -173,15 +175,14 @@ is present and gracefully fall back to <a class="reference internal" href="#opal
<li class="right" >
<a href="opal-sensor-group-enable-clear-163-156.html" title="OPAL Sensor Groups"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_SENSOR_READ</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-set-xive-19.html b/doc/opal-api/opal-set-xive-19.html
index 3b0a09b..471a2a3 100644
--- a/doc/opal-api/opal-set-xive-19.html
+++ b/doc/opal-api/opal-set-xive-19.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_SET_XIVE &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_SET_XIVE &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-sensor-read-88.html" title="OPAL_SENSOR_READ"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_SET_XIVE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -58,39 +59,38 @@ the priority to 0xff one masks an interrupt).</p>
<p>WARNINGS:</p>
<blockquote>
<div><ul class="simple">
-<li><p>For MSIs or generally edge sensitive interrupts, OPAL provides no
+<li>For MSIs or generally edge sensitive interrupts, OPAL provides no
guarantee as to whether the interrupt will be latched if it occurs
while masked and replayed on unmask. It may or may not. The OS needs
to be aware of this. The current implementation will <em>not</em> replay,
-neither on P8 nor on P9 XICS emulation.</p></li>
-<li><p>When masking, there is no guarantee that the interrupt will not
+neither on P8 nor on P9 XICS emulation.</li>
+<li>When masking, there is no guarantee that the interrupt will not
still occur after this call returns. The reason is that it might
already be on its way past the source controller and latched into one
of the presenters. There is however a guarantee that it won’t replay
-indefinitely so it’s acceptable for the OS to simply ignore it.</p></li>
+indefinitely so it’s acceptable for the OS to simply ignore it.</li>
</ul>
</div></blockquote>
<div class="section" id="parameters">
<h2>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">isn</span></code></dt><dd><p>This is a global interrupt number as obtained from the device-tree
-“interrupts” or “interrupt-map” properties.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">server_number</span></code></dt><dd><p>is the mangled server (processor) that is to receive the
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">isn</span></code></dt>
+<dd>This is a global interrupt number as obtained from the device-tree
+“interrupts” or “interrupt-map” properties.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">server_number</span></code></dt>
+<dd>is the mangled server (processor) that is to receive the
interrupt request. The mangling means that the actual processor
number is shifted left by 2 bits, the bottom bits representing
the “link”. However links aren’t supported in OPAL so the bottom
-2 bits should be 0.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">priority</span></code></dt><dd><p>is the interrupt priority value applied to the interrupt
-(0=highest, 0xFF = lowest/disabled).</p>
-</dd>
+2 bits should be 0.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">priority</span></code></dt>
+<dd>is the interrupt priority value applied to the interrupt
+(0=highest, 0xFF = lowest/disabled).</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -118,15 +118,17 @@ the “link”. However links aren’t supported in OPAL so the bottom
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -143,15 +145,14 @@ the “link”. However links aren’t supported in OPAL so the bottom
<li class="right" >
<a href="opal-sensor-read-88.html" title="OPAL_SENSOR_READ"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_SET_XIVE</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-signal-system-reset-145.html b/doc/opal-api/opal-signal-system-reset-145.html
index 3598820..800559a 100644
--- a/doc/opal-api/opal-signal-system-reset-145.html
+++ b/doc/opal-api/opal-signal-system-reset-145.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_SIGNAL_SYSTEM_RESET &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_SIGNAL_SYSTEM_RESET &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-set-xive-19.html" title="OPAL_SET_XIVE"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_SIGNAL_SYSTEM_RESET</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -74,29 +75,28 @@ out of OPAL before being interrupted.</p>
</div>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt>OPAL_SUCCESS</dt><dd><p>The system reset requests to target CPU(s) was successful. This returns
+<dl class="docutils">
+<dt>OPAL_SUCCESS</dt>
+<dd>The system reset requests to target CPU(s) was successful. This returns
asynchronously without acknowledgement from targets that system reset
-interrupt processing has completed or even started.</p>
-</dd>
-<dt>OPAL_PARAMETER</dt><dd><p>A parameter was incorrect.</p>
-</dd>
-<dt>OPAL_HARDWARE</dt><dd><p>Hardware indicated failure during reset, some or all of the target CPUs
-may have the system reset delivered.</p>
-</dd>
-<dt>OPAL_CONSTRAINED</dt><dd><p>Platform does not support broadcast operations.</p>
-</dd>
-<dt>OPAL_PARTIAL</dt><dd><p>Platform can not reset sibling threads on the same core as requested.
-None of the specified CPUs are reset in this case.</p>
-</dd>
-<dt>OPAL_UNSUPPORTED</dt><dd><p>This processor/platform is not supported.</p>
-</dd>
+interrupt processing has completed or even started.</dd>
+<dt>OPAL_PARAMETER</dt>
+<dd>A parameter was incorrect.</dd>
+<dt>OPAL_HARDWARE</dt>
+<dd>Hardware indicated failure during reset, some or all of the target CPUs
+may have the system reset delivered.</dd>
+<dt>OPAL_CONSTRAINED</dt>
+<dd>Platform does not support broadcast operations.</dd>
+<dt>OPAL_PARTIAL</dt>
+<dd>Platform can not reset sibling threads on the same core as requested.
+None of the specified CPUs are reset in this case.</dd>
+<dt>OPAL_UNSUPPORTED</dt>
+<dd>This processor/platform is not supported.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -125,15 +125,17 @@ None of the specified CPUs are reset in this case.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -150,15 +152,14 @@ None of the specified CPUs are reset in this case.</p>
<li class="right" >
<a href="opal-set-xive-19.html" title="OPAL_SET_XIVE"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_SIGNAL_SYSTEM_RESET</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-slw-set-reg-100.html b/doc/opal-api/opal-slw-set-reg-100.html
index 2816191..55ebb93 100644
--- a/doc/opal-api/opal-slw-set-reg-100.html
+++ b/doc/opal-api/opal-slw-set-reg-100.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_SLW_SET_REG &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_SLW_SET_REG &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-signal-system-reset-145.html" title="OPAL_SIGNAL_SYSTEM_RESET"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_SLW_SET_REG</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -62,31 +63,30 @@ to inform the spr with their corresponding values with which they
must be restored.</p>
<div class="section" id="parameters">
<h2>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">cpu_pir</span></code></dt><dd><p>This parameter specifies the pir of the cpu for which the call is being made.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">sprn</span></code></dt><dd><p>This parameter specifies the spr number as mentioned in p9_stop_api.H for
-Power9 and p8_pore_table_gen_api.H for Power8.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">val</span></code></dt><dd><p>This parameter specifices value with which the spr should be restored.</p>
-</dd>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">cpu_pir</span></code></dt>
+<dd>This parameter specifies the pir of the cpu for which the call is being made.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">sprn</span></code></dt>
+<dd>This parameter specifies the spr number as mentioned in p9_stop_api.H for
+Power9 and p8_pore_table_gen_api.H for Power8.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">uint64_t</span> <span class="pre">val</span></code></dt>
+<dd>This parameter specifices value with which the spr should be restored.</dd>
</dl>
</div>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>On failure. The actual error code from the platform specific code is logged in the OPAL logs</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt><dd><p>If spr restore is not supported by pore engine.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>On success</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>On failure. The actual error code from the platform specific code is logged in the OPAL logs</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></dt>
+<dd>If spr restore is not supported by pore engine.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>On success</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -115,15 +115,17 @@ Power9 and p8_pore_table_gen_api.H for Power8.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -140,15 +142,14 @@ Power9 and p8_pore_table_gen_api.H for Power8.</p>
<li class="right" >
<a href="opal-signal-system-reset-145.html" title="OPAL_SIGNAL_SYSTEM_RESET"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_SLW_SET_REG</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-start-return-cpu-41-69.html b/doc/opal-api/opal-start-return-cpu-41-69.html
index 89544de..fa1bc2a 100644
--- a/doc/opal-api/opal-start-return-cpu-41-69.html
+++ b/doc/opal-api/opal-start-return-cpu-41-69.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Starting and stopping secondary CPUs &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Starting and stopping secondary CPUs &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-slw-set-reg-100.html" title="OPAL_SLW_SET_REG"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Starting and stopping secondary CPUs</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -57,18 +58,18 @@ CPUs.</p>
</div>
<div class="section" id="returns">
<h3>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>The CPU was instructed to start executing instructions from the specified
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>The CPU was instructed to start executing instructions from the specified
<cite>start_address</cite>.
This is an <em>asynchronous</em> operation, so it may take a short period of
-time before the CPU actually starts at that address.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid CPU.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></dt><dd><p>If the CPU thread is not in OPAL, or is being re-initialized through <a class="reference internal" href="opal-reinit-cpus-70.html#opal-reinit-cpus"><span class="std std-ref">OPAL_REINIT_CPUS</span></a></p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>Something else went horribly wrong.</p>
-</dd>
+time before the CPU actually starts at that address.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid CPU.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></dt>
+<dd>If the CPU thread is not in OPAL, or is being re-initialized through <a class="reference internal" href="opal-reinit-cpus-70.html#opal-reinit-cpus"><span class="std std-ref">OPAL_REINIT_CPUS</span></a></dd>
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>Something else went horribly wrong.</dd>
</dl>
</div>
</div>
@@ -94,7 +95,6 @@ you may also need to return control of the CPU to OPAL.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -129,15 +129,17 @@ you may also need to return control of the CPU to OPAL.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -154,15 +156,14 @@ you may also need to return control of the CPU to OPAL.</p>
<li class="right" >
<a href="opal-slw-set-reg-100.html" title="OPAL_SLW_SET_REG"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Starting and stopping secondary CPUs</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-sync-host-reboot-87.html b/doc/opal-api/opal-sync-host-reboot-87.html
index d8aee00..142882e 100644
--- a/doc/opal-api/opal-sync-host-reboot-87.html
+++ b/doc/opal-api/opal-sync-host-reboot-87.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_SYNC_HOST_REBOOT &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_SYNC_HOST_REBOOT &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-start-return-cpu-41-69.html" title="Starting and stopping secondary CPUs"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_SYNC_HOST_REBOOT</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -57,19 +58,18 @@ as a new error log being available for retreival).</p>
<p>It’s meant to be called in a loop until <a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a> is returned.</p>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success!</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a></dt><dd><p>not yet complete, call opal_sync_host_reboot() again, possibly with a short delay.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt><dd><p>Call opal_poll_events() and then retry opal_sync_host_reboot</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success!</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a></dt>
+<dd>not yet complete, call opal_sync_host_reboot() again, possibly with a short delay.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt>
+<dd>Call opal_poll_events() and then retry opal_sync_host_reboot</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -97,15 +97,17 @@ as a new error log being available for retreival).</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -122,15 +124,14 @@ as a new error log being available for retreival).</p>
<li class="right" >
<a href="opal-start-return-cpu-41-69.html" title="Starting and stopping secondary CPUs"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_SYNC_HOST_REBOOT</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-test-0.html b/doc/opal-api/opal-test-0.html
index 0e1f6a9..164dcb4 100644
--- a/doc/opal-api/opal-test-0.html
+++ b/doc/opal-api/opal-test-0.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_TEST &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_TEST &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-sync-host-reboot-87.html" title="OPAL_SYNC_HOST_REBOOT"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_TEST</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -81,7 +82,6 @@ have it.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -111,15 +111,17 @@ have it.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -136,15 +138,14 @@ have it.</p>
<li class="right" >
<a href="opal-sync-host-reboot-87.html" title="OPAL_SYNC_HOST_REBOOT"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_TEST</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-write-oppanel-async-95.html b/doc/opal-api/opal-write-oppanel-async-95.html
index 0a2e9de..0d1c015 100644
--- a/doc/opal-api/opal-write-oppanel-async-95.html
+++ b/doc/opal-api/opal-write-oppanel-async-95.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_WRITE_OPPANEL_ASYNC &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_WRITE_OPPANEL_ASYNC &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-test-0.html" title="OPAL_TEST"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_WRITE_OPPANEL_ASYNC</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -48,7 +49,7 @@
<span id="id1"></span><h1>OPAL_WRITE_OPPANEL_ASYNC<a class="headerlink" href="#opal-write-oppanel-async" title="Permalink to this headline">¶</a></h1>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#define OPAL_WRITE_OPPANEL_ASYNC 95</span>
-<span class="k">typedef</span> <span class="k">struct</span> <span class="nc">oppanel_line</span> <span class="p">{</span>
+<span class="k">typedef</span> <span class="k">struct</span> <span class="n">oppanel_line</span> <span class="p">{</span>
<span class="n">__be64</span> <span class="n">line</span><span class="p">;</span>
<span class="n">__be64</span> <span class="n">line_len</span><span class="p">;</span>
<span class="p">}</span> <span class="n">oppanel_line_t</span><span class="p">;</span>
@@ -64,7 +65,7 @@ It can be used to report on boot progress, failure, or witty messages from
a systems administrator.</p>
<p>A typical panel, as present on IBM FSP based machines, is two lines of 16
characters each.</p>
-<p>See <a class="reference internal" href="../device-tree/ibm%2Copal/oppanel.html#device-tree-ibm-opal-oppanel"><span class="std std-ref">Operator Panel (oppanel)</span></a> for how the panel is described in the
+<p>See <a class="reference internal" href="../device-tree/ibm,opal/oppanel.html#device-tree-ibm-opal-oppanel"><span class="std std-ref">Operator Panel (oppanel)</span></a> for how the panel is described in the
device tree. Not all systems have an operator panel.</p>
<p>Pass in an array of oppanel_line_t structs defining the ASCII characters
to display on each line of the oppanel. If there are two lines on the
@@ -74,24 +75,23 @@ you need to pass in both lines, and set the line_len of the first line
to zero.</p>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success! Typically this is async operation, so immediate success is
-unlikely.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt><dd><p>Request submitted asynchronously.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt><dd><p>Invalid <cite>lines</cite> or <cite>num_lines</cite></p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-no-mem"><span class="std std-ref">OPAL_NO_MEM</span></a></dt><dd><p>Not enough free memory in OPAL to complete the request.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt><dd><p>Other internal error.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success! Typically this is async operation, so immediate success is
+unlikely.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt>
+<dd>Request submitted asynchronously.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
+<dd>Invalid <cite>lines</cite> or <cite>num_lines</cite></dd>
+<dt><a class="reference internal" href="return-codes.html#opal-no-mem"><span class="std std-ref">OPAL_NO_MEM</span></a></dt>
+<dd>Not enough free memory in OPAL to complete the request.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></dt>
+<dd>Other internal error.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -119,15 +119,17 @@ unlikely.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -144,15 +146,14 @@ unlikely.</p>
<li class="right" >
<a href="opal-test-0.html" title="OPAL_TEST"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_WRITE_OPPANEL_ASYNC</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal-xscom-read-write-65-66.html b/doc/opal-api/opal-xscom-read-write-65-66.html
index ef6cd4b..0c33081 100644
--- a/doc/opal-api/opal-xscom-read-write-65-66.html
+++ b/doc/opal-api/opal-xscom-read-write-65-66.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_XSCOM_READ &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_XSCOM_READ &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-write-oppanel-async-95.html" title="OPAL_WRITE_OPPANEL_ASYNC"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_XSCOM_READ</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -57,29 +58,29 @@
<p>This is also needed by HBRT/<cite>opal-prd</cite>.</p>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success!</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>if operation failed</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></dt><dd><p>if CPU is asleep</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-xscom-busy"><span class="std std-ref">OPAL_XSCOM_BUSY</span></a></dt><dd><p>Alias for <a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a>.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-xscom-chiplet-off"><span class="std std-ref">OPAL_XSCOM_CHIPLET_OFF</span></a></dt><dd><p>Alias for <a class="reference internal" href="return-codes.html#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-xscom-partial-good"><span class="std std-ref">OPAL_XSCOM_PARTIAL_GOOD</span></a></dt><dd><p>XSCOM Partial Good</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-xscom-addr-error"><span class="std std-ref">OPAL_XSCOM_ADDR_ERROR</span></a></dt><dd><p>XSCOM Address Error</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-xscom-clock-error"><span class="std std-ref">OPAL_XSCOM_CLOCK_ERROR</span></a></dt><dd><p>XSCOM Clock Error</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-xscom-parity-error"><span class="std std-ref">OPAL_XSCOM_PARITY_ERROR</span></a></dt><dd><p>XSCOM Parity Error</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-xscom-timeout"><span class="std std-ref">OPAL_XSCOM_TIMEOUT</span></a></dt><dd><p>XSCOM Timeout</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-xscom-ctr-offlined"><span class="std std-ref">OPAL_XSCOM_CTR_OFFLINED</span></a></dt><dd><p>XSCOM Controller Offlined due to too many errors.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success!</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>if operation failed</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></dt>
+<dd>if CPU is asleep</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-xscom-busy"><span class="std std-ref">OPAL_XSCOM_BUSY</span></a></dt>
+<dd>Alias for <a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a>.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-xscom-chiplet-off"><span class="std std-ref">OPAL_XSCOM_CHIPLET_OFF</span></a></dt>
+<dd>Alias for <a class="reference internal" href="return-codes.html#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></dd>
+<dt><a class="reference internal" href="return-codes.html#opal-xscom-partial-good"><span class="std std-ref">OPAL_XSCOM_PARTIAL_GOOD</span></a></dt>
+<dd>XSCOM Partial Good</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-xscom-addr-error"><span class="std std-ref">OPAL_XSCOM_ADDR_ERROR</span></a></dt>
+<dd>XSCOM Address Error</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-xscom-clock-error"><span class="std std-ref">OPAL_XSCOM_CLOCK_ERROR</span></a></dt>
+<dd>XSCOM Clock Error</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-xscom-parity-error"><span class="std std-ref">OPAL_XSCOM_PARITY_ERROR</span></a></dt>
+<dd>XSCOM Parity Error</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-xscom-timeout"><span class="std std-ref">OPAL_XSCOM_TIMEOUT</span></a></dt>
+<dd>XSCOM Timeout</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-xscom-ctr-offlined"><span class="std std-ref">OPAL_XSCOM_CTR_OFFLINED</span></a></dt>
+<dd>XSCOM Controller Offlined due to too many errors.</dd>
</dl>
</div>
</div>
@@ -96,35 +97,34 @@
<p>This is also needed by HBRT/<cite>opal-prd</cite>.</p>
<div class="section" id="id3">
<h2>Returns<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt><dd><p>Success!</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt><dd><p>if operation failed</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></dt><dd><p>if CPU is asleep</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-xscom-busy"><span class="std std-ref">OPAL_XSCOM_BUSY</span></a></dt><dd><p>Alias for <a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a>.</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-xscom-chiplet-off"><span class="std std-ref">OPAL_XSCOM_CHIPLET_OFF</span></a></dt><dd><p>Alias for <a class="reference internal" href="return-codes.html#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-xscom-partial-good"><span class="std std-ref">OPAL_XSCOM_PARTIAL_GOOD</span></a></dt><dd><p>XSCOM Partial Good</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-xscom-addr-error"><span class="std std-ref">OPAL_XSCOM_ADDR_ERROR</span></a></dt><dd><p>XSCOM Address Error</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-xscom-clock-error"><span class="std std-ref">OPAL_XSCOM_CLOCK_ERROR</span></a></dt><dd><p>XSCOM Clock Error</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-xscom-parity-error"><span class="std std-ref">OPAL_XSCOM_PARITY_ERROR</span></a></dt><dd><p>XSCOM Parity Error</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-xscom-timeout"><span class="std std-ref">OPAL_XSCOM_TIMEOUT</span></a></dt><dd><p>XSCOM Timeout</p>
-</dd>
-<dt><a class="reference internal" href="return-codes.html#opal-xscom-ctr-offlined"><span class="std std-ref">OPAL_XSCOM_CTR_OFFLINED</span></a></dt><dd><p>XSCOM Controller Offlined due to too many errors.</p>
-</dd>
+<dl class="docutils">
+<dt><a class="reference internal" href="return-codes.html#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></dt>
+<dd>Success!</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
+<dd>if operation failed</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></dt>
+<dd>if CPU is asleep</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-xscom-busy"><span class="std std-ref">OPAL_XSCOM_BUSY</span></a></dt>
+<dd>Alias for <a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a>.</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-xscom-chiplet-off"><span class="std std-ref">OPAL_XSCOM_CHIPLET_OFF</span></a></dt>
+<dd>Alias for <a class="reference internal" href="return-codes.html#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></dd>
+<dt><a class="reference internal" href="return-codes.html#opal-xscom-partial-good"><span class="std std-ref">OPAL_XSCOM_PARTIAL_GOOD</span></a></dt>
+<dd>XSCOM Partial Good</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-xscom-addr-error"><span class="std std-ref">OPAL_XSCOM_ADDR_ERROR</span></a></dt>
+<dd>XSCOM Address Error</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-xscom-clock-error"><span class="std std-ref">OPAL_XSCOM_CLOCK_ERROR</span></a></dt>
+<dd>XSCOM Clock Error</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-xscom-parity-error"><span class="std std-ref">OPAL_XSCOM_PARITY_ERROR</span></a></dt>
+<dd>XSCOM Parity Error</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-xscom-timeout"><span class="std std-ref">OPAL_XSCOM_TIMEOUT</span></a></dt>
+<dd>XSCOM Timeout</dd>
+<dt><a class="reference internal" href="return-codes.html#opal-xscom-ctr-offlined"><span class="std std-ref">OPAL_XSCOM_CTR_OFFLINED</span></a></dt>
+<dd>XSCOM Controller Offlined due to too many errors.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -156,15 +156,17 @@
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -181,15 +183,14 @@
<li class="right" >
<a href="opal-write-oppanel-async-95.html" title="OPAL_WRITE_OPPANEL_ASYNC"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_XSCOM_READ</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/opal_nx_coproc_init-167.html b/doc/opal-api/opal_nx_coproc_init-167.html
index fa85e06..f7e9bf9 100644
--- a/doc/opal-api/opal_nx_coproc_init-167.html
+++ b/doc/opal-api/opal_nx_coproc_init-167.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL_NX_COPROC_INIT &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL_NX_COPROC_INIT &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal-xscom-read-write-65-66.html" title="OPAL_XSCOM_READ"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_NX_COPROC_INIT</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -66,20 +67,19 @@ GZIP per NX instance.</p>
</div>
<div class="section" id="returns">
<h2>Returns<a class="headerlink" href="#returns" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt>OPAL_SUCCESS</dt><dd><p>The call to reset readOffset and queued entries for high and normal
-FIFOs was successful.</p>
-</dd>
-<dt>OPAL_PARAMETER</dt><dd><p>Indicates invalid chip ID or NX coprocessor type.</p>
-</dd>
-<dt>OPAL_UNSUPPORTED</dt><dd><p>Not supported on P7 and P8.</p>
-</dd>
+<dl class="docutils">
+<dt>OPAL_SUCCESS</dt>
+<dd>The call to reset readOffset and queued entries for high and normal
+FIFOs was successful.</dd>
+<dt>OPAL_PARAMETER</dt>
+<dd>Indicates invalid chip ID or NX coprocessor type.</dd>
+<dt>OPAL_UNSUPPORTED</dt>
+<dd>Not supported on P7 and P8.</dd>
</dl>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -108,15 +108,17 @@ FIFOs was successful.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -133,15 +135,14 @@ FIFOs was successful.</p>
<li class="right" >
<a href="opal-xscom-read-write-65-66.html" title="OPAL_XSCOM_READ"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL_NX_COPROC_INIT</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/power9-changes.html b/doc/opal-api/power9-changes.html
index c3fba81..24354b9 100644
--- a/doc/opal-api/power9-changes.html
+++ b/doc/opal-api/power9-changes.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>POWER9 Changes to OPAL API &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>POWER9 Changes to OPAL API &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="opal_nx_coproc_init-167.html" title="OPAL_NX_COPROC_INIT"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">POWER9 Changes to OPAL API</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -61,33 +62,35 @@ POWER9, OPAL_UNSUPPORTED will be returned.</p>
<div class="section" id="device-tree">
<h2>Device Tree<a class="headerlink" href="#device-tree" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">/ibm,opal/</span></code> compatible property now just lists <code class="docutils literal notranslate"><span class="pre">ibm,opal-v3</span></code> and no longer <code class="docutils literal notranslate"><span class="pre">ibm,opal-v2</span></code> (power9 and above only)</p></li>
-<li><p>Use only <code class="docutils literal notranslate"><span class="pre">stdout-path</span></code> property from POWER9 and above as usage of <code class="docutils literal notranslate"><span class="pre">linux,stdout-path</span></code> is deprecated</p></li>
-<li><p>Rename <code class="docutils literal notranslate"><span class="pre">fsp-ipl-side</span></code> as <code class="docutils literal notranslate"><span class="pre">sp-ipl-side</span></code> in <code class="docutils literal notranslate"><span class="pre">/ipl-params</span></code></p></li>
-<li><p>Add interrupt-parent property for <code class="docutils literal notranslate"><span class="pre">/ibm,opal/ipmi</span></code> node on POWER9 and above
-to make use of OPAL irqchip rather than event interface in linux.</p></li>
+<li><code class="docutils literal notranslate"><span class="pre">/ibm,opal/</span></code> compatible property now just lists <code class="docutils literal notranslate"><span class="pre">ibm,opal-v3</span></code> and no longer <code class="docutils literal notranslate"><span class="pre">ibm,opal-v2</span></code> (power9 and above only)</li>
+<li>Use only <code class="docutils literal notranslate"><span class="pre">stdout-path</span></code> property from POWER9 and above as usage of <code class="docutils literal notranslate"><span class="pre">linux,stdout-path</span></code> is deprecated</li>
+<li>Rename <code class="docutils literal notranslate"><span class="pre">fsp-ipl-side</span></code> as <code class="docutils literal notranslate"><span class="pre">sp-ipl-side</span></code> in <code class="docutils literal notranslate"><span class="pre">/ipl-params</span></code></li>
+<li>Add interrupt-parent property for <code class="docutils literal notranslate"><span class="pre">/ibm,opal/ipmi</span></code> node on POWER9 and above
+to make use of OPAL irqchip rather than event interface in linux.</li>
</ul>
</div>
<div class="section" id="todo">
<h2>TODO<a class="headerlink" href="#todo" title="Permalink to this headline">¶</a></h2>
<p>Things we still have to do for POWER9:</p>
<ul>
-<li><p>PCI to use async API rather than returning delays</p></li>
-<li><p>deprecate/remove v1 APIs where there’s a V2</p></li>
-<li><p>Fix this FWTS warning:</p>
+<li><p class="first">PCI to use async API rather than returning delays</p>
+</li>
+<li><p class="first">deprecate/remove v1 APIs where there’s a V2</p>
+</li>
+<li><p class="first">Fix this FWTS warning:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">FAILED</span> <span class="p">[</span><span class="n">MEDIUM</span><span class="p">]</span> <span class="n">DeviceTreeBaseDTCWarnings</span><span class="p">:</span> <span class="n">Test</span> <span class="mi">3</span><span class="p">,</span> <span class="n">dtc</span> <span class="n">reports</span> <span class="n">warnings</span> <span class="kn">from</span>
-<span class="nn">device</span> <span class="n">tree</span><span class="p">:</span> <span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">flash</span><span class="o">@</span><span class="mi">0</span> <span class="n">has</span>
+<span class="nn">device</span> <span class="n">tree</span><span class="p">:</span> <span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">flash</span><span class="nd">@0</span> <span class="n">has</span>
<span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">8</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 0, #size-cells == 0)</span>
</pre></div>
</div>
</li>
-<li><p>Remove mi-version / ml-version from <code class="docutils literal notranslate"><span class="pre">/ibm,opal/firmware</span></code> and replace with something better and more portable</p></li>
+<li><p class="first">Remove mi-version / ml-version from <code class="docutils literal notranslate"><span class="pre">/ibm,opal/firmware</span></code> and replace with something better and more portable</p>
+</li>
</ul>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -117,15 +120,17 @@ to make use of OPAL irqchip rather than event interface in linux.</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -142,15 +147,14 @@ to make use of OPAL irqchip rather than event interface in linux.</p></li>
<li class="right" >
<a href="opal_nx_coproc_init-167.html" title="OPAL_NX_COPROC_INIT"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">POWER9 Changes to OPAL API</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-api/return-codes.html b/doc/opal-api/return-codes.html
index 7fa341d..339f9fc 100644
--- a/doc/opal-api/return-codes.html
+++ b/doc/opal-api/return-codes.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL API Return Codes &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL API Return Codes &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="power9-changes.html" title="POWER9 Changes to OPAL API"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL API Return Codes</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li>
</ul>
</div>
@@ -62,236 +63,236 @@ need to gracefully handle unknown error codes.</p>
<p>An OS running on POWER9 or above must handle all error codes as they were when
POWER9 was introduced. We use the placeholder “v1.0” version for
“since the dawn of time” even though there never was a skiboot v1.0</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 30%" />
-<col style="width: 17%" />
-<col style="width: 10%" />
-<col style="width: 10%" />
-<col style="width: 32%" />
+<col width="30%" />
+<col width="17%" />
+<col width="10%" />
+<col width="10%" />
+<col width="32%" />
</colgroup>
-<tbody>
-<tr class="row-odd"><td><p>Name</p></td>
-<td><p>Return Code</p></td>
-<td><p>POWER8 GA</p></td>
-<td><p>POWER9 GA</p></td>
-<td><p>skiboot version where introduced</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></p></td>
-<td><p>0</p></td>
-<td><p>YES</p></td>
-<td><p>YES</p></td>
-<td><p>v1.0 (initial release)</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></p></td>
-<td><p>-1</p></td>
-<td><p>YES</p></td>
-<td><p>YES</p></td>
-<td><p>v1.0 (initial release)</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></p></td>
-<td><p>-2</p></td>
-<td><p>YES</p></td>
-<td><p>YES</p></td>
-<td><p>v1.0 (initial release)</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-partial"><span class="std std-ref">OPAL_PARTIAL</span></a></p></td>
-<td><p>-3</p></td>
-<td><p>YES</p></td>
-<td><p>YES</p></td>
-<td><p>v1.0 (initial release)</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-constrained"><span class="std std-ref">OPAL_CONSTRAINED</span></a></p></td>
-<td><p>-4</p></td>
-<td><p>YES</p></td>
-<td><p>YES</p></td>
-<td><p>v1.0 (initial release)</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-closed"><span class="std std-ref">OPAL_CLOSED</span></a></p></td>
-<td><p>-5</p></td>
-<td><p>YES</p></td>
-<td><p>YES</p></td>
-<td><p>v1.0 (initial release)</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></p></td>
-<td><p>-6</p></td>
-<td><p>YES</p></td>
-<td><p>YES</p></td>
-<td><p>v1.0 (initial release)</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></p></td>
-<td><p>-7</p></td>
-<td><p>YES</p></td>
-<td><p>YES</p></td>
-<td><p>v1.0 (initial release)</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-permission"><span class="std std-ref">OPAL_PERMISSION</span></a></p></td>
-<td><p>-8</p></td>
-<td><p>YES</p></td>
-<td><p>YES</p></td>
-<td><p>v1.0 (initial release)</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-no-mem"><span class="std std-ref">OPAL_NO_MEM</span></a></p></td>
-<td><p>-9</p></td>
-<td><p>YES</p></td>
-<td><p>YES</p></td>
-<td><p>v1.0 (initial release)</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-resource"><span class="std std-ref">OPAL_RESOURCE</span></a></p></td>
-<td><p>-10</p></td>
-<td><p>YES</p></td>
-<td><p>YES</p></td>
-<td><p>v1.0 (initial release)</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></p></td>
-<td><p>-11</p></td>
-<td><p>YES</p></td>
-<td><p>YES</p></td>
-<td><p>v1.0 (initial release)</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a></p></td>
-<td><p>-12</p></td>
-<td><p>YES</p></td>
-<td><p>YES</p></td>
-<td><p>v1.0 (initial release)</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-hardware-frozen"><span class="std std-ref">OPAL_HARDWARE_FROZEN</span></a></p></td>
-<td><p>-13</p></td>
-<td><p>YES</p></td>
-<td><p>YES</p></td>
-<td><p>v1.0 (initial release)</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></p></td>
-<td><p>-14</p></td>
-<td><p>YES</p></td>
-<td><p>YES</p></td>
-<td><p>v1.0 (initial release)</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></p></td>
-<td><p>-15</p></td>
-<td><p>YES</p></td>
-<td><p>YES</p></td>
-<td><p>v1.0 (initial release)</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-empty"><span class="std std-ref">OPAL_EMPTY</span></a></p></td>
-<td><p>-16</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p>v4.0</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-i2c-timeout"><span class="std std-ref">OPAL_I2C_TIMEOUT</span></a></p></td>
-<td><p>-17</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-i2c-invalid-cmd"><span class="std std-ref">OPAL_I2C_INVALID</span></a></p></td>
-<td><p>-18</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-i2c-lbus-parity"><span class="std std-ref">OPAL_I2C_LBUS_PARITY</span></a></p></td>
-<td><p>-19</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-i2c-bkend-overrun"><span class="std std-ref">OPAL_I2C_BKEND_OVERRUN</span></a></p></td>
-<td><p>-20</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-i2c-bkend-access"><span class="std std-ref">OPAL_I2C_BKEND_ACCESS</span></a></p></td>
-<td><p>-21</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-i2c-arbt-lost"><span class="std std-ref">OPAL_I2C_ARBT_LOST</span></a></p></td>
-<td><p>-22</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-i2c-nack-rcvd"><span class="std std-ref">OPAL_I2C_NACK_RCVD</span></a></p></td>
-<td><p>-23</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-i2c-stop-err"><span class="std std-ref">OPAL_I2C_STOP_ERR</span></a></p></td>
-<td><p>-24</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-xscom-busy"><span class="std std-ref">OPAL_XSCOM_BUSY</span></a></p></td>
-<td><p>OPAL_BUSY</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-xscom-chiplet-off"><span class="std std-ref">OPAL_XSCOM_CHIPLET_OFF</span></a></p></td>
-<td><p>OPAL_WRONG_STATE</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-xscom-partial-good"><span class="std std-ref">OPAL_XSCOM_PARTIAL_GOOD</span></a></p></td>
-<td><p>-25</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-xscom-addr-error"><span class="std std-ref">OPAL_XSCOM_ADDR_ERROR</span></a></p></td>
-<td><p>-26</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-xscom-clock-error"><span class="std std-ref">OPAL_XSCOM_CLOCK_ERROR</span></a></p></td>
-<td><p>-27</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-xscom-parity-error"><span class="std std-ref">OPAL_XSCOM_PARITY_ERROR</span></a></p></td>
-<td><p>-28</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-xscom-timeout"><span class="std std-ref">OPAL_XSCOM_TIMEOUT</span></a></p></td>
-<td><p>-29</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-xscom-ctr-offlined"><span class="std std-ref">OPAL_XSCOM_CTR_OFFLINED</span></a></p></td>
-<td><p>-30</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-xive-provisioning"><span class="std std-ref">OPAL_XIVE_PROVISIONING</span></a></p></td>
-<td><p>-31</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#opal-xive-free-active"><span class="std std-ref">OPAL_XIVE_FREE_ACTIVE</span></a></p></td>
-<td><p>-32</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#opal-timeout"><span class="std std-ref">OPAL_TIMEOUT</span></a></p></td>
-<td><p>-33</p></td>
-<td><p>NO</p></td>
-<td><p>YES</p></td>
-<td><p><a class="reference internal" href="../release-notes/skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a></p></td>
+<tbody valign="top">
+<tr class="row-odd"><td>Name</td>
+<td>Return Code</td>
+<td>POWER8 GA</td>
+<td>POWER9 GA</td>
+<td>skiboot version where introduced</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-success"><span class="std std-ref">OPAL_SUCCESS</span></a></td>
+<td>0</td>
+<td>YES</td>
+<td>YES</td>
+<td>v1.0 (initial release)</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></td>
+<td>-1</td>
+<td>YES</td>
+<td>YES</td>
+<td>v1.0 (initial release)</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></td>
+<td>-2</td>
+<td>YES</td>
+<td>YES</td>
+<td>v1.0 (initial release)</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-partial"><span class="std std-ref">OPAL_PARTIAL</span></a></td>
+<td>-3</td>
+<td>YES</td>
+<td>YES</td>
+<td>v1.0 (initial release)</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-constrained"><span class="std std-ref">OPAL_CONSTRAINED</span></a></td>
+<td>-4</td>
+<td>YES</td>
+<td>YES</td>
+<td>v1.0 (initial release)</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-closed"><span class="std std-ref">OPAL_CLOSED</span></a></td>
+<td>-5</td>
+<td>YES</td>
+<td>YES</td>
+<td>v1.0 (initial release)</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></td>
+<td>-6</td>
+<td>YES</td>
+<td>YES</td>
+<td>v1.0 (initial release)</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-unsupported"><span class="std std-ref">OPAL_UNSUPPORTED</span></a></td>
+<td>-7</td>
+<td>YES</td>
+<td>YES</td>
+<td>v1.0 (initial release)</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-permission"><span class="std std-ref">OPAL_PERMISSION</span></a></td>
+<td>-8</td>
+<td>YES</td>
+<td>YES</td>
+<td>v1.0 (initial release)</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-no-mem"><span class="std std-ref">OPAL_NO_MEM</span></a></td>
+<td>-9</td>
+<td>YES</td>
+<td>YES</td>
+<td>v1.0 (initial release)</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-resource"><span class="std std-ref">OPAL_RESOURCE</span></a></td>
+<td>-10</td>
+<td>YES</td>
+<td>YES</td>
+<td>v1.0 (initial release)</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-internal-error"><span class="std std-ref">OPAL_INTERNAL_ERROR</span></a></td>
+<td>-11</td>
+<td>YES</td>
+<td>YES</td>
+<td>v1.0 (initial release)</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-busy-event"><span class="std std-ref">OPAL_BUSY_EVENT</span></a></td>
+<td>-12</td>
+<td>YES</td>
+<td>YES</td>
+<td>v1.0 (initial release)</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-hardware-frozen"><span class="std std-ref">OPAL_HARDWARE_FROZEN</span></a></td>
+<td>-13</td>
+<td>YES</td>
+<td>YES</td>
+<td>v1.0 (initial release)</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-wrong-state"><span class="std std-ref">OPAL_WRONG_STATE</span></a></td>
+<td>-14</td>
+<td>YES</td>
+<td>YES</td>
+<td>v1.0 (initial release)</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></td>
+<td>-15</td>
+<td>YES</td>
+<td>YES</td>
+<td>v1.0 (initial release)</td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-empty"><span class="std std-ref">OPAL_EMPTY</span></a></td>
+<td>-16</td>
+<td>NO</td>
+<td>YES</td>
+<td>v4.0</td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-i2c-timeout"><span class="std std-ref">OPAL_I2C_TIMEOUT</span></a></td>
+<td>-17</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-i2c-invalid-cmd"><span class="std std-ref">OPAL_I2C_INVALID</span></a></td>
+<td>-18</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-i2c-lbus-parity"><span class="std std-ref">OPAL_I2C_LBUS_PARITY</span></a></td>
+<td>-19</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-i2c-bkend-overrun"><span class="std std-ref">OPAL_I2C_BKEND_OVERRUN</span></a></td>
+<td>-20</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-i2c-bkend-access"><span class="std std-ref">OPAL_I2C_BKEND_ACCESS</span></a></td>
+<td>-21</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-i2c-arbt-lost"><span class="std std-ref">OPAL_I2C_ARBT_LOST</span></a></td>
+<td>-22</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-i2c-nack-rcvd"><span class="std std-ref">OPAL_I2C_NACK_RCVD</span></a></td>
+<td>-23</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-i2c-stop-err"><span class="std std-ref">OPAL_I2C_STOP_ERR</span></a></td>
+<td>-24</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.1.0.html#skiboot-5-1-0"><span class="std std-ref">skiboot-5.1.0</span></a></td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-xscom-busy"><span class="std std-ref">OPAL_XSCOM_BUSY</span></a></td>
+<td>OPAL_BUSY</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-xscom-chiplet-off"><span class="std std-ref">OPAL_XSCOM_CHIPLET_OFF</span></a></td>
+<td>OPAL_WRONG_STATE</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-xscom-partial-good"><span class="std std-ref">OPAL_XSCOM_PARTIAL_GOOD</span></a></td>
+<td>-25</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-xscom-addr-error"><span class="std std-ref">OPAL_XSCOM_ADDR_ERROR</span></a></td>
+<td>-26</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-xscom-clock-error"><span class="std std-ref">OPAL_XSCOM_CLOCK_ERROR</span></a></td>
+<td>-27</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-xscom-parity-error"><span class="std std-ref">OPAL_XSCOM_PARITY_ERROR</span></a></td>
+<td>-28</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-xscom-timeout"><span class="std std-ref">OPAL_XSCOM_TIMEOUT</span></a></td>
+<td>-29</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-xscom-ctr-offlined"><span class="std std-ref">OPAL_XSCOM_CTR_OFFLINED</span></a></td>
+<td>-30</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a></td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-xive-provisioning"><span class="std std-ref">OPAL_XIVE_PROVISIONING</span></a></td>
+<td>-31</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+</tr>
+<tr class="row-even"><td><a class="reference internal" href="#opal-xive-free-active"><span class="std std-ref">OPAL_XIVE_FREE_ACTIVE</span></a></td>
+<td>-32</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.5.0.html#skiboot-5-5-0"><span class="std std-ref">skiboot-5.5.0</span></a></td>
+</tr>
+<tr class="row-odd"><td><a class="reference internal" href="#opal-timeout"><span class="std std-ref">OPAL_TIMEOUT</span></a></td>
+<td>-33</td>
+<td>NO</td>
+<td>YES</td>
+<td><a class="reference internal" href="../release-notes/skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a></td>
</tr>
</tbody>
</table>
@@ -554,7 +555,6 @@ message.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -617,15 +617,17 @@ message.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -642,15 +644,14 @@ message.</p>
<li class="right" >
<a href="power9-changes.html" title="POWER9 Changes to OPAL API"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL API Return Codes</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/opal-spec.html b/doc/opal-spec.html
index 2841ef6..b929b2a 100644
--- a/doc/opal-spec.html
+++ b/doc/opal-spec.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>OPAL Specification &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>OPAL Specification &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="overview.html" title="Skiboot overview"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Specification</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -58,13 +59,13 @@ implementation. It is not recommended that you do this though.</p>
</div>
<div class="section" id="definitions">
<h2>Definitions<a class="headerlink" href="#definitions" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt>Host processor</dt><dd><p>the main POWER CPU (e.g. the POWER8 CPU)</p>
-</dd>
-<dt>Host OS</dt><dd><p>the operating system running on the host processor.</p>
-</dd>
-<dt>OPAL</dt><dd><p>OpenPOWER Abstraction Layer.</p>
-</dd>
+<dl class="docutils">
+<dt>Host processor</dt>
+<dd>the main POWER CPU (e.g. the POWER8 CPU)</dd>
+<dt>Host OS</dt>
+<dd>the operating system running on the host processor.</dd>
+<dt>OPAL</dt>
+<dd>OpenPOWER Abstraction Layer.</dd>
</dl>
</div>
<div class="section" id="what-is-opal">
@@ -74,36 +75,31 @@ POWER systems. There are several components to what makes up a firmware
image for OpenPower machines.</p>
<p>For example, there may be:</p>
<ul class="simple">
-<li><p>BMC firmware</p>
-<ul>
-<li><p>Firmware that runs purely on the BMC.</p></li>
-<li><p>On IBM systems that have an FSP rather than a BMC, there is FSP firmware</p></li>
-<li><p>While essential to having the machine function, this firmware is not
-part of the OPAL Specification.</p></li>
+<li>BMC firmware<ul>
+<li>Firmware that runs purely on the BMC.</li>
+<li>On IBM systems that have an FSP rather than a BMC, there is FSP firmware</li>
+<li>While essential to having the machine function, this firmware is not
+part of the OPAL Specification.</li>
</ul>
</li>
-<li><p>HostBoot</p>
-<ul>
-<li><p>HostBoot ( <a class="reference external" href="https://github.com/open-power/hostboot">https://github.com/open-power/hostboot</a> ) performs all
-processor, bus and memory initialization within IBM POWER based systems.</p></li>
+<li>HostBoot<ul>
+<li>HostBoot ( <a class="reference external" href="https://github.com/open-power/hostboot">https://github.com/open-power/hostboot</a> ) performs all
+processor, bus and memory initialization within IBM POWER based systems.</li>
</ul>
</li>
-<li><p>OCC Firmware</p>
-<ul>
-<li><p>On Chip Controller ( Firmware for OCC - a PPC405 core inside the IBM
-POWER8 in charge of keeping the system thermally and power safe ).</p></li>
+<li>OCC Firmware<ul>
+<li>On Chip Controller ( Firmware for OCC - a PPC405 core inside the IBM
+POWER8 in charge of keeping the system thermally and power safe ).</li>
</ul>
</li>
-<li><p>SkiBoot</p>
-<ul>
-<li><p>Boot and runtime services.</p></li>
+<li>SkiBoot<ul>
+<li>Boot and runtime services.</li>
</ul>
</li>
-<li><p>A linux kernel and initramfs incorporating petitboot</p>
-<ul>
-<li><p>The bootloader. This is where a user chooses what OS to boot, and
+<li>A linux kernel and initramfs incorporating petitboot<ul>
+<li>The bootloader. This is where a user chooses what OS to boot, and
petitboot will use kexec to switch to the host Operating System
-(for example, PowerKVM).</p></li>
+(for example, PowerKVM).</li>
</ul>
</li>
</ul>
@@ -119,18 +115,18 @@ Operating System. It does not dictate that any specific pieces of firmware
code be used, although re-inventing the wheel is strongly discouraged.</p>
<p>The OPAL Specification explicitly allows for:</p>
<ul class="simple">
-<li><p>A conforming implementation to not use any of the reference implementation
-code.</p></li>
-<li><p>A conforming implementation to use any 64bit POWER ISA conforming processor,
-and not be limited to the IBM POWER8.</p></li>
-<li><p>A conforming implementation to be a simulator, emulator or virtual environment</p></li>
-<li><p>A host OS other than Linux</p></li>
+<li>A conforming implementation to not use any of the reference implementation
+code.</li>
+<li>A conforming implementation to use any 64bit POWER ISA conforming processor,
+and not be limited to the IBM POWER8.</li>
+<li>A conforming implementation to be a simulator, emulator or virtual environment</li>
+<li>A host OS other than Linux</li>
</ul>
<p>Explicitly not covered in this specification:</p>
<ul class="simple">
-<li><p>A 32bit OPAL Specification
+<li>A 32bit OPAL Specification
There is no reason this couldn’t exist but the current specification is for
-64bit POWER systems only.</p></li>
+64bit POWER systems only.</li>
</ul>
</div>
<div class="section" id="boot-services">
@@ -151,39 +147,39 @@ know how to call OPAL runtime services.
[<strong>TODO</strong>: expand on this. ]</p>
<p>Explicitly not covered by the OPAL Specification:</p>
<ul class="simple">
-<li><p>Kernel module ABI for skiroot kernel</p></li>
-<li><p>Userspace environment of skiroot</p></li>
-<li><p>That skiroot is Linux.</p></li>
+<li>Kernel module ABI for skiroot kernel</li>
+<li>Userspace environment of skiroot</li>
+<li>That skiroot is Linux.</li>
</ul>
<p>Explicitly allowed:</p>
<ul class="simple">
-<li><p>Replacing the payload with something of equal/similar functionality
+<li>Replacing the payload with something of equal/similar functionality
(whether replacing skiroot with an implementation of Zork would be compliant
-is left as an exercise for the reader)</p></li>
+is left as an exercise for the reader)</li>
</ul>
</div>
<div class="section" id="payload-environment">
<h2>Payload Environment<a class="headerlink" href="#payload-environment" title="Permalink to this headline">¶</a></h2>
<p>The payload is started with:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 17%" />
-<col style="width: 83%" />
+<col width="17%" />
+<col width="83%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Register</p></th>
-<th class="head"><p>Value</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Register</th>
+<th class="head">Value</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>r3</p></td>
-<td><p>address of flattened device-tree (fdt)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>r3</td>
+<td>address of flattened device-tree (fdt)</td>
</tr>
-<tr class="row-odd"><td><p>r8</p></td>
-<td><p>OPAL base</p></td>
+<tr class="row-odd"><td>r8</td>
+<td>OPAL base</td>
</tr>
-<tr class="row-even"><td><p>r9</p></td>
-<td><p>OPAL entry</p></td>
+<tr class="row-even"><td>r9</td>
+<td>OPAL entry</td>
</tr>
</tbody>
</table>
@@ -192,11 +188,12 @@ is left as an exercise for the reader)</p></li>
<h2>Runtime Services<a class="headerlink" href="#runtime-services" title="Permalink to this headline">¶</a></h2>
<p>An OPAL Specification compliant system provides runtime services to the host
Operating System via a standard interface.</p>
-<dl class="simple">
-<dt>An OPAL call is made by calling opal_entry with:</dt><dd><ul class="simple">
-<li><p>r0: OPAL Token</p></li>
-<li><p>r2: OPAL Base</p></li>
-<li><p>r3..r10: Args (up to 8)</p></li>
+<dl class="docutils">
+<dt>An OPAL call is made by calling opal_entry with:</dt>
+<dd><ul class="first last simple">
+<li>r0: OPAL Token</li>
+<li>r2: OPAL Base</li>
+<li>r3..r10: Args (up to 8)</li>
</ul>
</dd>
</dl>
@@ -210,12 +207,12 @@ OPAL_CHECK_TOKEN to test for optional functionality.</p>
appropriately convert parameters before passing them to OPAL.</p>
<p>Machine state across OPAL calls:</p>
<ul class="simple">
-<li><p>r1 is preserved</p></li>
-<li><p>r12 is scratch</p></li>
-<li><p>r13 - 31 preserved</p></li>
-<li><p>64bit HV real mode</p></li>
-<li><p>big endian</p></li>
-<li><p>external interrupts disabled</p></li>
+<li>r1 is preserved</li>
+<li>r12 is scratch</li>
+<li>r13 - 31 preserved</li>
+<li>64bit HV real mode</li>
+<li>big endian</li>
+<li>external interrupts disabled</li>
</ul>
</div>
<div class="section" id="detecting-opal-support">
@@ -273,7 +270,6 @@ while more messages go to the in memory buffer.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -308,15 +304,17 @@ while more messages go to the in memory buffer.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -333,14 +331,13 @@ while more messages go to the in memory buffer.</p>
<li class="right" >
<a href="overview.html" title="Skiboot overview"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">OPAL Specification</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/overview.html b/doc/overview.html
index 4cddeae..31dd19b 100644
--- a/doc/overview.html
+++ b/doc/overview.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Skiboot overview &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Skiboot overview &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="index.html" title="SkiBoot Documentation"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Skiboot overview</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -51,78 +52,79 @@ Along with loading the bootloader, it provides some runtime
services to the OS (typically Linux).</p>
<div class="section" id="source-layout">
<h2>Source layout<a class="headerlink" href="#source-layout" title="Permalink to this headline">¶</a></h2>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 16%" />
-<col style="width: 84%" />
+<col width="16%" />
+<col width="84%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Directory</p></th>
-<th class="head"><p>Content</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Directory</th>
+<th class="head">Content</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>asm/</p></td>
-<td><p>small amount, mainly entry points</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>asm/</td>
+<td>small amount, mainly entry points</td>
</tr>
-<tr class="row-odd"><td><p>ccan/</p></td>
-<td><p>bits from <a class="reference external" href="https://ccodearchive.net/">CCAN</a></p></td>
+<tr class="row-odd"><td>ccan/</td>
+<td>bits from <a class="reference external" href="https://ccodearchive.net/">CCAN</a></td>
</tr>
-<tr class="row-even"><td><p>core/</p></td>
-<td><p>common code among machines.</p></td>
+<tr class="row-even"><td>core/</td>
+<td>common code among machines.</td>
</tr>
-<tr class="row-odd"><td><p>doc/</p></td>
-<td><p>not enough here</p></td>
+<tr class="row-odd"><td>doc/</td>
+<td>not enough here</td>
</tr>
-<tr class="row-even"><td><p>external/</p></td>
-<td><p>tools and userspace components</p></td>
+<tr class="row-even"><td>external/</td>
+<td>tools and userspace components</td>
</tr>
-<tr class="row-odd"><td><p>hdata/</p></td>
-<td><p>Parses HDAT from Hostboot/FSP into Device Tree</p></td>
+<tr class="row-odd"><td>hdata/</td>
+<td>Parses HDAT from Hostboot/FSP into Device Tree</td>
</tr>
-<tr class="row-even"><td><p>hw/</p></td>
-<td><p>drivers for things &amp; fsp things.</p></td>
+<tr class="row-even"><td>hw/</td>
+<td>drivers for things &amp; fsp things.</td>
</tr>
-<tr class="row-odd"><td><p>include/</p></td>
-<td><p>headers!</p></td>
+<tr class="row-odd"><td>include/</td>
+<td>headers!</td>
</tr>
-<tr class="row-even"><td><p>libc/</p></td>
-<td><p>tiny libc, originally from <a class="reference external" href="https://github.com/aik/SLOF/">SLOF</a></p></td>
+<tr class="row-even"><td>libc/</td>
+<td>tiny libc, originally from <a class="reference external" href="https://github.com/aik/SLOF/">SLOF</a></td>
</tr>
-<tr class="row-odd"><td><p>libfdt/</p></td>
-<td><p>Manipulate flattened device trees</p></td>
+<tr class="row-odd"><td>libfdt/</td>
+<td>Manipulate flattened device trees</td>
</tr>
-<tr class="row-even"><td><p>libflash/</p></td>
-<td><p>Lib for talking to flash and parsing FFS structs</p></td>
+<tr class="row-even"><td>libflash/</td>
+<td>Lib for talking to flash and parsing FFS structs</td>
</tr>
-<tr class="row-odd"><td><p>libpore/</p></td>
-<td><p>to manipulate PORE <a class="footnote-reference brackets" href="#id2" id="id1">1</a> engine.</p></td>
+<tr class="row-odd"><td>libpore/</td>
+<td>to manipulate PORE <a class="footnote-reference" href="#id2" id="id1">[1]</a> engine.</td>
</tr>
-<tr class="row-even"><td><p>libstb/</p></td>
-<td><p>See <a class="reference internal" href="stb.html#stb-overview"><span class="std std-ref">Secure and Trusted Boot Library (LibSTB) Documentation</span></a></p></td>
+<tr class="row-even"><td>libstb/</td>
+<td>See <a class="reference internal" href="stb.html#stb-overview"><span class="std std-ref">Secure and Trusted Boot Library (LibSTB) Documentation</span></a></td>
</tr>
-<tr class="row-odd"><td><p>libxz/</p></td>
-<td><p>The <a class="reference external" href="https://tukaani.org/xz/embedded.html">xz_embedded</a> library</p></td>
+<tr class="row-odd"><td>libxz/</td>
+<td>The <a class="reference external" href="https://tukaani.org/xz/embedded.html">xz_embedded</a> library</td>
</tr>
-<tr class="row-even"><td><p>opal-ci/</p></td>
-<td><p>Some scripts to help Continuous Integration testing</p></td>
+<tr class="row-even"><td>opal-ci/</td>
+<td>Some scripts to help Continuous Integration testing</td>
</tr>
-<tr class="row-odd"><td><p>platforms/</p></td>
-<td><p>Platform (machine/BMC) specific code</p></td>
+<tr class="row-odd"><td>platforms/</td>
+<td>Platform (machine/BMC) specific code</td>
</tr>
-<tr class="row-even"><td><p>test/</p></td>
-<td><p>Test scripts and binaries</p></td>
+<tr class="row-even"><td>test/</td>
+<td>Test scripts and binaries</td>
</tr>
</tbody>
</table>
-<dl class="footnote brackets">
-<dt class="label" id="id2"><span class="brackets"><a class="fn-backref" href="#id1">1</a></span></dt>
-<dd><p>Power On Reset Engine. Used to bring cores out of deep sleep states.
+<table class="docutils footnote" frame="void" id="id2" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>Power On Reset Engine. Used to bring cores out of deep sleep states.
For POWER9, this also includes the <cite>p9_stop_api</cite> which manipulates
the low level microcode to-reinit certain SPRs on transition out of
-a state losing STOP state.</p>
-</dd>
-</dl>
+a state losing STOP state.</td></tr>
+</tbody>
+</table>
<p>We have a spinlock implementation in <a class="reference external" href="https://github.com/open-power/skiboot/blob/v5.8/asm/lock.S">asm/lock.S</a>
Entry points are detailed in <a class="reference external" href="https://github.com/open-power/skiboot/blob/v5.8/asm/head.S">asm/head.S</a>
The main C entry point is in <a class="reference external" href="https://github.com/open-power/skiboot/blob/v5.8/core/init.c">core/init.c</a>: <a class="reference external" href="https://github.com/open-power/skiboot/blob/v5.8/core/init.c#L785">main_cpu_entry()</a></p>
@@ -130,54 +132,61 @@ The main C entry point is in <a class="reference external" href="https://github.
<div class="section" id="binaries">
<h2>Binaries<a class="headerlink" href="#binaries" title="Permalink to this headline">¶</a></h2>
<p>The following binaries are built:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 29%" />
-<col style="width: 71%" />
+<col width="29%" />
+<col width="71%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>File</p></th>
-<th class="head"><p>Purpose</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">File</th>
+<th class="head">Purpose</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>skiboot.lid</p></td>
-<td><p>Binary for flashing onto systems <a class="footnote-reference brackets" href="#id10" id="id7">2</a></p></td>
+<tbody valign="top">
+<tr class="row-even"><td>skiboot.lid</td>
+<td>Binary for flashing onto systems <a class="footnote-reference" href="#id10" id="id7">[2]</a></td>
</tr>
-<tr class="row-odd"><td><p>skiboot.lid.stb</p></td>
-<td><p>Secure and Trusted Boot container wrapped skiboot</p></td>
+<tr class="row-odd"><td>skiboot.lid.stb</td>
+<td>Secure and Trusted Boot container wrapped skiboot</td>
</tr>
-<tr class="row-even"><td><p><em>skiboot.lid.xz</em></p></td>
-<td><p>XZ compressed binary <a class="footnote-reference brackets" href="#id11" id="id8">3</a></p></td>
+<tr class="row-even"><td><em>skiboot.lid.xz</em></td>
+<td>XZ compressed binary <a class="footnote-reference" href="#id11" id="id8">[3]</a></td>
</tr>
-<tr class="row-odd"><td><p><em>skiboot.lid.xz.stb</em></p></td>
-<td><p>STB container wrapped XZ compressed skiboot <a class="footnote-reference brackets" href="#id12" id="id9">4</a></p></td>
+<tr class="row-odd"><td><em>skiboot.lid.xz.stb</em></td>
+<td>STB container wrapped XZ compressed skiboot <a class="footnote-reference" href="#id12" id="id9">[4]</a></td>
</tr>
-<tr class="row-even"><td><p>skiboot.elf</p></td>
-<td><p>is the elf binary of it, lid comes from this</p></td>
+<tr class="row-even"><td>skiboot.elf</td>
+<td>is the elf binary of it, lid comes from this</td>
</tr>
-<tr class="row-odd"><td><p>skiboot.map</p></td>
-<td><p>plain map of symbols</p></td>
+<tr class="row-odd"><td>skiboot.map</td>
+<td>plain map of symbols</td>
</tr>
</tbody>
</table>
-<dl class="footnote brackets">
-<dt class="label" id="id10"><span class="brackets"><a class="fn-backref" href="#id7">2</a></span></dt>
-<dd><p>Practically speaking, this is just IBM FSP based systems now. Since
+<table class="docutils footnote" frame="void" id="id10" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id7">[2]</a></td><td>Practically speaking, this is just IBM FSP based systems now. Since
the <cite>skiboot.lid</cite> size is now greater than 1MB, which is the size of
the default <cite>PAYLOAD</cite> PNOR partition size on OpenPOWER systems, you
-will want the <cite>skiboot.lid.xz</cite> or <cite>skiboot.lid.xz.stb</cite> instead.</p>
-</dd>
-<dt class="label" id="id11"><span class="brackets"><a class="fn-backref" href="#id8">3</a></span></dt>
-<dd><p>On OpenPOWER systems, hostboot will read and decompress XZ
+will want the <cite>skiboot.lid.xz</cite> or <cite>skiboot.lid.xz.stb</cite> instead.</td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="id11" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id8">[3]</a></td><td>On OpenPOWER systems, hostboot will read and decompress XZ
compressed payloads. This shortens boot time (less data to read),
adds a checksum over the <cite>PAYLOAD</cite> and saves valuable PNOR space.
-If in doubt, use this payload.</p>
-</dd>
-<dt class="label" id="id12"><span class="brackets"><a class="fn-backref" href="#id9">4</a></span></dt>
-<dd><p>If a secure boot system, use this payload.</p>
-</dd>
-</dl>
+If in doubt, use this payload.</td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="id12" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id9">[4]</a></td><td>If a secure boot system, use this payload.</td></tr>
+</tbody>
+</table>
</div>
<div class="section" id="booting">
<h2>Booting<a class="headerlink" href="#booting" title="Permalink to this headline">¶</a></h2>
@@ -232,22 +241,22 @@ OPAL is what we name the interface from skiboot to OS (Linux).</p>
<p>Each CPU gets a 16k stack, which is probably more than enough. Stack
should be used sparingly though.</p>
<p>Important memory locations:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 18%" />
-<col style="width: 82%" />
+<col width="18%" />
+<col width="82%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Location</p></th>
-<th class="head"><p>What’s there</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Location</th>
+<th class="head">What’s there</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>SKIBOOT_BASE</p></td>
-<td><p>where skiboot lives, of SKIBOOT_SIZE</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>SKIBOOT_BASE</td>
+<td>where skiboot lives, of SKIBOOT_SIZE</td>
</tr>
-<tr class="row-odd"><td><p>HEAP_BASE</p></td>
-<td><p>Where skiboot heap starts, of HEAP_SIZE</p></td>
+<tr class="row-odd"><td>HEAP_BASE</td>
+<td>Where skiboot heap starts, of HEAP_SIZE</td>
</tr>
</tbody>
</table>
@@ -263,7 +272,6 @@ file /sys/firmware/opal/msglog.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -297,15 +305,17 @@ file /sys/firmware/opal/msglog.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -322,14 +332,13 @@ file /sys/firmware/opal/msglog.</p>
<li class="right" >
<a href="index.html" title="SkiBoot Documentation"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Skiboot overview</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/pci-slot.html b/doc/pci-slot.html
index a4777c9..b491a2d 100644
--- a/doc/pci-slot.html
+++ b/doc/pci-slot.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>PCI Slots &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>PCI Slots &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="pci.html" title="PCI"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">PCI Slots</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -51,8 +52,8 @@ node of the corresponding parent PCI device. The slot operations are used
to accomodate requests from OS regarding the indicated PCI slot:</p>
<blockquote>
<div><ul class="simple">
-<li><p>PCI slot reset</p></li>
-<li><p>PCI slot property retrival</p></li>
+<li>PCI slot reset</li>
+<li>PCI slot property retrival</li>
</ul>
</div></blockquote>
<p>The PCI slots are expected to be created by individual platforms based on
@@ -72,58 +73,58 @@ partially. It’s usually done according to the VPD figured out by individual pl
<h2>PCI Slot Operations<a class="headerlink" href="#pci-slot-operations" title="Permalink to this headline">¶</a></h2>
<p>The following operations are supported to one particular PCI slot. More details
could be found from the definition of struct pci_slot_ops:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 28%" />
-<col style="width: 72%" />
+<col width="28%" />
+<col width="72%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Operation</p></th>
-<th class="head"><p>Definition</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Operation</th>
+<th class="head">Definition</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>get_presence_state</p></td>
-<td><p>Check if any adapter connected to slot</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>get_presence_state</td>
+<td>Check if any adapter connected to slot</td>
</tr>
-<tr class="row-odd"><td><p>get_link_state</p></td>
-<td><p>Retrieve PCIE link status: up, down, link width</p></td>
+<tr class="row-odd"><td>get_link_state</td>
+<td>Retrieve PCIE link status: up, down, link width</td>
</tr>
-<tr class="row-even"><td><p>get_power_state</p></td>
-<td><p>Retrieve the power status: on, off</p></td>
+<tr class="row-even"><td>get_power_state</td>
+<td>Retrieve the power status: on, off</td>
</tr>
-<tr class="row-odd"><td><p>get_attention_state</p></td>
-<td><p>Retrieve attention status: on, off, blinking</p></td>
+<tr class="row-odd"><td>get_attention_state</td>
+<td>Retrieve attention status: on, off, blinking</td>
</tr>
-<tr class="row-even"><td><p>get_latch_state</p></td>
-<td><p>Retrieve latch status</p></td>
+<tr class="row-even"><td>get_latch_state</td>
+<td>Retrieve latch status</td>
</tr>
-<tr class="row-odd"><td><p>set_power_state</p></td>
-<td><p>Configure the power status: on, off</p></td>
+<tr class="row-odd"><td>set_power_state</td>
+<td>Configure the power status: on, off</td>
</tr>
-<tr class="row-even"><td><p>set_attention_state</p></td>
-<td><p>Configure attention status: on, off, blinking</p></td>
+<tr class="row-even"><td>set_attention_state</td>
+<td>Configure attention status: on, off, blinking</td>
</tr>
-<tr class="row-odd"><td><p>prepare_link_change</p></td>
-<td><p>Prepare PCIE link status change</p></td>
+<tr class="row-odd"><td>prepare_link_change</td>
+<td>Prepare PCIE link status change</td>
</tr>
-<tr class="row-even"><td><p>poll_link</p></td>
-<td><p>Poll PCIE link until it’s up or down permanently</p></td>
+<tr class="row-even"><td>poll_link</td>
+<td>Poll PCIE link until it’s up or down permanently</td>
</tr>
-<tr class="row-odd"><td><p>creset</p></td>
-<td><p>Complete reset, only available to PHB slot</p></td>
+<tr class="row-odd"><td>creset</td>
+<td>Complete reset, only available to PHB slot</td>
</tr>
-<tr class="row-even"><td><p>freset</p></td>
-<td><p>Fundamental reset</p></td>
+<tr class="row-even"><td>freset</td>
+<td>Fundamental reset</td>
</tr>
-<tr class="row-odd"><td><p>hreset</p></td>
-<td><p>Hot reset</p></td>
+<tr class="row-odd"><td>hreset</td>
+<td>Hot reset</td>
</tr>
-<tr class="row-even"><td><p>poll</p></td>
-<td><p>Interface for OPAL API to drive internal state machine</p></td>
+<tr class="row-even"><td>poll</td>
+<td>Interface for OPAL API to drive internal state machine</td>
</tr>
-<tr class="row-odd"><td><p>add_properties</p></td>
-<td><p>Additional PCI slot properties seen by platform</p></td>
+<tr class="row-odd"><td>add_properties</td>
+<td>Additional PCI slot properties seen by platform</td>
</tr>
</tbody>
</table>
@@ -135,40 +136,40 @@ could be found from the definition of struct pci_slot_ops:</p>
node for a root port, a PCIE switch port, or a PCIE to PCIx bridge. If the
individual platforms (e.g. Firenze and Apollo) have VPD for the PCI slot, they
should extract the PCI slot properties from VPD and export them accordingly.</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 28%" />
-<col style="width: 72%" />
+<col width="28%" />
+<col width="72%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Property</p></th>
-<th class="head"><p>Definition</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Property</th>
+<th class="head">Definition</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>ibm,reset-by-firmware</p></td>
-<td><p>Boolean indicating whether the slot reset should be done in firmware</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>ibm,reset-by-firmware</td>
+<td>Boolean indicating whether the slot reset should be done in firmware</td>
</tr>
-<tr class="row-odd"><td><p>ibm,slot-pluggable</p></td>
-<td><p>Boolean indicating whether the slot is pluggable</p></td>
+<tr class="row-odd"><td>ibm,slot-pluggable</td>
+<td>Boolean indicating whether the slot is pluggable</td>
</tr>
-<tr class="row-even"><td><p>ibm,slot-surprise-pluggable</p></td>
-<td><p>Boolean indicating whether the slot supports surprise hotplug</p></td>
+<tr class="row-even"><td>ibm,slot-surprise-pluggable</td>
+<td>Boolean indicating whether the slot supports surprise hotplug</td>
</tr>
-<tr class="row-odd"><td><p>ibm,slot-broken-pdc</p></td>
-<td><p>Boolean indicating whether PDC (Presence Detection Change) is broken</p></td>
+<tr class="row-odd"><td>ibm,slot-broken-pdc</td>
+<td>Boolean indicating whether PDC (Presence Detection Change) is broken</td>
</tr>
-<tr class="row-even"><td><p>ibm,slot-power-ctl</p></td>
-<td><p>Boolean indicating whether the slot has power control</p></td>
+<tr class="row-even"><td>ibm,slot-power-ctl</td>
+<td>Boolean indicating whether the slot has power control</td>
</tr>
-<tr class="row-odd"><td><p>ibm,slot-wired-lanes</p></td>
-<td><p>The number of hardware lanes that are wired</p></td>
+<tr class="row-odd"><td>ibm,slot-wired-lanes</td>
+<td>The number of hardware lanes that are wired</td>
</tr>
-<tr class="row-even"><td><p>ibm,slot-pwr-led-ctl</p></td>
-<td><p>Presence of slot power led, and controlling entity</p></td>
+<tr class="row-even"><td>ibm,slot-pwr-led-ctl</td>
+<td>Presence of slot power led, and controlling entity</td>
</tr>
-<tr class="row-odd"><td><p>ibm,slot-attn-led-ctl</p></td>
-<td><p>Presence of slot ATTN led, and controlling entity</p></td>
+<tr class="row-odd"><td>ibm,slot-attn-led-ctl</td>
+<td>Presence of slot ATTN led, and controlling entity</td>
</tr>
</tbody>
</table>
@@ -213,22 +214,22 @@ those PCI slots, PERST pin is utilized to implement fundamental reset if externa
power management entity doesn’t exist.</p>
<p>For Apollo and Firenze platform, following PCI slot properties are exported through
PCI device tree node except those generic properties (as above):</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 32%" />
-<col style="width: 68%" />
+<col width="32%" />
+<col width="68%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Property</p></th>
-<th class="head"><p>Definition</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Property</th>
+<th class="head">Definition</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>ibm,slot-location-code</p></td>
-<td><p>System location code string for the slot connector</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>ibm,slot-location-code</td>
+<td>System location code string for the slot connector</td>
</tr>
-<tr class="row-odd"><td><p>ibm,slot-label</p></td>
-<td><p>Slot label, part of “ibm,slot-location-code”</p></td>
+<tr class="row-odd"><td>ibm,slot-label</td>
+<td>Slot label, part of “ibm,slot-location-code”</td>
</tr>
</tbody>
</table>
@@ -236,7 +237,6 @@ PCI device tree node except those generic properties (as above):</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -269,15 +269,17 @@ PCI device tree node except those generic properties (as above):</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -294,14 +296,13 @@ PCI device tree node except those generic properties (as above):</p>
<li class="right" >
<a href="pci.html" title="PCI"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">PCI Slots</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/pci.html b/doc/pci.html
index 1407f50..e82b74f 100644
--- a/doc/pci.html
+++ b/doc/pci.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>PCI &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>PCI &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="nvlink.html" title="OPAL/Skiboot Nvlink Interface Documentation"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">PCI</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -58,9 +59,9 @@ to help debug PCI issues. These are not ABI and may be changed or removed at
</div>
<div class="section" id="disable-eeh-mmio">
<h3>Disable EEH MMIO<a class="headerlink" href="#disable-eeh-mmio" title="Permalink to this headline">¶</a></h3>
-<dl class="simple">
-<dt>::</dt><dd><p>nvram -p ibm,skiboot –update-config pci-eeh-mmio=disabled</p>
-</dd>
+<dl class="docutils">
+<dt>::</dt>
+<dd>nvram -p ibm,skiboot –update-config pci-eeh-mmio=disabled</dd>
</dl>
</div>
<div class="section" id="check-for-rx-errors-after-link-training">
@@ -110,9 +111,9 @@ card.</p>
<div class="section" id="maximum-link-speed">
<h3>Maximum link speed<a class="headerlink" href="#maximum-link-speed" title="Permalink to this headline">¶</a></h3>
<p>Was useful during bringup on P9 DD1.</p>
-<dl class="simple">
-<dt>::</dt><dd><p>nvram -p ibm,skiboot –update-config pcie-max-link-speed=4</p>
-</dd>
+<dl class="docutils">
+<dt>::</dt>
+<dd>nvram -p ibm,skiboot –update-config pcie-max-link-speed=4</dd>
</dl>
</div>
<div class="section" id="ric-mata-mode">
@@ -175,8 +176,9 @@ parent) or 0 (not in the parent PE domain).</p>
<p>(<strong>WARNING</strong>: this was rescued from old internal documentation. Needs verification)</p>
<p>To setup MSIs:</p>
<ol class="arabic">
-<li><p>For ibm,opal-ioda PHBs, the host chooses an MVE for a PE to use and calls <code class="docutils literal notranslate"><span class="pre">opal_pci_set_mve(</span> <span class="pre">phb_id,</span> <span class="pre">mve_number,</span> <span class="pre">pe_number,)</span></code> to setup the MVE for the PE number. HAL treats this call as a NOP and returns hal_success status for ibm,opal-ioda2 PHBs.</p></li>
-<li><p>The host chooses an XIVE to use with a PE and calls
+<li><p class="first">For ibm,opal-ioda PHBs, the host chooses an MVE for a PE to use and calls <code class="docutils literal notranslate"><span class="pre">opal_pci_set_mve(</span> <span class="pre">phb_id,</span> <span class="pre">mve_number,</span> <span class="pre">pe_number,)</span></code> to setup the MVE for the PE number. HAL treats this call as a NOP and returns hal_success status for ibm,opal-ioda2 PHBs.</p>
+</li>
+<li><p class="first">The host chooses an XIVE to use with a PE and calls
a. <code class="docutils literal notranslate"><span class="pre">opal_pci_set_xive_pe(</span> <span class="pre">phb_id,</span> <span class="pre">xive_number,</span> <span class="pre">pe_number)</span></code> to authorize that PE to signal that XIVE as an interrupt. The host must call this function for each XIVE assigned to a particular PE, but may use this call for all XIVEs prior to calling <code class="docutils literal notranslate"><span class="pre">opel_pci_set_mve()</span></code> to bind the PE XIVEs to an MVE. For MSI conventional, the host must bind a unique MVE for each sequential set of 32 XIVEs.
b. The host forms the interrupt_source_number from the combination of the device tree MSI property base BUID and XIVE number, as an input to <code class="docutils literal notranslate"><span class="pre">opal_set_xive(interrupt_source_number,</span> <span class="pre">server_number,</span> <span class="pre">priority)</span></code> and <code class="docutils literal notranslate"><span class="pre">opal_get_xive(interrupt_source_number,</span> <span class="pre">server_number,</span> <span class="pre">priority)</span></code> to set or return the server and priority numbers within an XIVE.
c. <code class="docutils literal notranslate"><span class="pre">opal_get_msi_64[32](phb_id,</span> <span class="pre">mve_number,</span> <span class="pre">xive_num,</span> <span class="pre">msi_range,</span> <span class="pre">msi_address,</span> <span class="pre">message_data)</span></code> to determine the MSI DMA address (32 or 64 bit) and message data value for that xive.</p>
@@ -184,7 +186,8 @@ c. <code class="docutils literal notranslate"><span class="pre">opal_get_msi_64[
<div><p>For MSI conventional, the host uses this for each sequential power of 2 set of 1 to 32 MSIs, to determine the MSI DMA address and starting message data value for that MSI range. For MSI-X, the host calls this uniquely for each MSI interrupt with an msi_range input value of 1.</p>
</div></blockquote>
</li>
-<li><p>For <code class="docutils literal notranslate"><span class="pre">ibm,opal-ioda</span></code> PHBs, once the MVE and XIVRs are setup for a PE, the host calls <code class="docutils literal notranslate"><span class="pre">opal_pci_set_mve_enable(</span> <span class="pre">phb_id,</span> <span class="pre">mve_number,</span> <span class="pre">state)</span></code> to enable that MVE to be a valid target of MSI DMAs. The host may also call this function to disable an MVE when changing PE domains or states.</p></li>
+<li><p class="first">For <code class="docutils literal notranslate"><span class="pre">ibm,opal-ioda</span></code> PHBs, once the MVE and XIVRs are setup for a PE, the host calls <code class="docutils literal notranslate"><span class="pre">opal_pci_set_mve_enable(</span> <span class="pre">phb_id,</span> <span class="pre">mve_number,</span> <span class="pre">state)</span></code> to enable that MVE to be a valid target of MSI DMAs. The host may also call this function to disable an MVE when changing PE domains or states.</p>
+</li>
</ol>
</div>
<div class="section" id="ioda-dma-setup-sequences">
@@ -192,8 +195,8 @@ c. <code class="docutils literal notranslate"><span class="pre">opal_get_msi_64[
<p>(<strong>WARNING</strong>: this was rescued from old internal documentation. Needs verification)</p>
<p>To Manage DMA Windows :</p>
<ol class="arabic simple">
-<li><p>The host calls <code class="docutils literal notranslate"><span class="pre">opal_pci_map_pe_dma_window(</span> <span class="pre">phb_id,</span> <span class="pre">dma_window_number,</span> <span class="pre">pe_number,</span> <span class="pre">tce_levels,</span> <span class="pre">tce_table_addr,</span> <span class="pre">tce_table_size,</span> <span class="pre">tce_page_size,</span> <span class="pre">utin64_t*</span> <span class="pre">pci_start_addr</span> <span class="pre">)</span></code> to setup a DMA window for a PE to translate through a TCE table structure in KVM memory.</p></li>
-<li><p>The host calls <code class="docutils literal notranslate"><span class="pre">opal_pci_map_pe_dma_window_real(</span> <span class="pre">phb_id,</span> <span class="pre">dma_window_number,</span> <span class="pre">pe_number,</span> <span class="pre">mem_low_addr,</span> <span class="pre">mem_high_addr)</span></code> to setup a DMA window for a PE that is translated (but validated by the PHB as an untranlsated address space authorized to this PE).</p></li>
+<li>The host calls <code class="docutils literal notranslate"><span class="pre">opal_pci_map_pe_dma_window(</span> <span class="pre">phb_id,</span> <span class="pre">dma_window_number,</span> <span class="pre">pe_number,</span> <span class="pre">tce_levels,</span> <span class="pre">tce_table_addr,</span> <span class="pre">tce_table_size,</span> <span class="pre">tce_page_size,</span> <span class="pre">utin64_t*</span> <span class="pre">pci_start_addr</span> <span class="pre">)</span></code> to setup a DMA window for a PE to translate through a TCE table structure in KVM memory.</li>
+<li>The host calls <code class="docutils literal notranslate"><span class="pre">opal_pci_map_pe_dma_window_real(</span> <span class="pre">phb_id,</span> <span class="pre">dma_window_number,</span> <span class="pre">pe_number,</span> <span class="pre">mem_low_addr,</span> <span class="pre">mem_high_addr)</span></code> to setup a DMA window for a PE that is translated (but validated by the PHB as an untranlsated address space authorized to this PE).</li>
</ol>
</div>
<div class="section" id="device-tree-bindings">
@@ -203,7 +206,6 @@ c. <code class="docutils literal notranslate"><span class="pre">opal_get_msi_64[
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -244,15 +246,17 @@ c. <code class="docutils literal notranslate"><span class="pre">opal_get_msi_64[
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -269,14 +273,13 @@ c. <code class="docutils literal notranslate"><span class="pre">opal_get_msi_64[
<li class="right" >
<a href="nvlink.html" title="OPAL/Skiboot Nvlink Interface Documentation"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">PCI</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/platforms-and-cpus.html b/doc/platforms-and-cpus.html
index 4664fa7..983a52c 100644
--- a/doc/platforms-and-cpus.html
+++ b/doc/platforms-and-cpus.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Supported platforms &amp; CPUs &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Supported platforms &amp; CPUs &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="opal-spec.html" title="OPAL Specification"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Supported platforms &amp; CPUs</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -48,259 +49,310 @@
<p>NB. This file should only contain publicly available information.</p>
<div class="section" id="cpus">
<h2>CPUs<a class="headerlink" href="#cpus" title="Permalink to this headline">¶</a></h2>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 28%" />
-<col style="width: 28%" />
-<col style="width: 43%" />
+<col width="28%" />
+<col width="28%" />
+<col width="43%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Name</p></th>
-<th class="head"><p>PVR</p></th>
-<th class="head"><p>Other names</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Name</th>
+<th class="head">PVR</th>
+<th class="head">Other names</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Power8E</p></td>
-<td><p>0x004bxxxx</p></td>
-<td><p>Murano</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Power8E</td>
+<td>0x004bxxxx</td>
+<td>Murano</td>
</tr>
-<tr class="row-odd"><td><p>Power8</p></td>
-<td><p>0x004dxxxx</p></td>
-<td><p>Venice</p></td>
+<tr class="row-odd"><td>Power8</td>
+<td>0x004dxxxx</td>
+<td>Venice</td>
</tr>
-<tr class="row-even"><td><p>Power8NVL</p></td>
-<td><p>0x004cxxxx</p></td>
-<td><p>Naples (P8 with NVLink)</p></td>
+<tr class="row-even"><td>Power8NVL</td>
+<td>0x004cxxxx</td>
+<td>Naples (P8 with NVLink)</td>
</tr>
-<tr class="row-odd"><td><p>Power9N</p></td>
-<td><p>0x004e0xxx</p></td>
-<td><p>Nimbus 12 small core</p></td>
+<tr class="row-odd"><td>Power9N</td>
+<td>0x004e0xxx</td>
+<td>Nimbus 12 small core</td>
</tr>
-<tr class="row-even"><td><p>Power9N</p></td>
-<td><p>0x004e1xxx</p></td>
-<td><p>Nimbus 24 small core</p></td>
+<tr class="row-even"><td>Power9N</td>
+<td>0x004e1xxx</td>
+<td>Nimbus 24 small core</td>
</tr>
-<tr class="row-odd"><td><p>Power9C</p></td>
-<td><p>0x004e2xxx</p></td>
-<td><p>Cumulus 12 small core</p></td>
+<tr class="row-odd"><td>Power9C</td>
+<td>0x004e2xxx</td>
+<td>Cumulus 12 small core</td>
</tr>
-<tr class="row-even"><td><p>Power9C</p></td>
-<td><p>0x004e3xxx</p></td>
-<td><p>Cumulus 24 small core</p></td>
+<tr class="row-even"><td>Power9C</td>
+<td>0x004e3xxx</td>
+<td>Cumulus 24 small core</td>
</tr>
-<tr class="row-odd"><td><p>Power9P</p></td>
-<td><p>0x004fxxxx</p></td>
-<td><p>Axone</p></td>
+<tr class="row-odd"><td>Power9P</td>
+<td>0x004fxxxx</td>
+<td>Axone</td>
+</tr>
+<tr class="row-even"><td>Power10</td>
+<td>0x0080xxxx</td>
+<td>&#160;</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="platforms">
<h2>Platforms<a class="headerlink" href="#platforms" title="Permalink to this headline">¶</a></h2>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 7%" />
-<col style="width: 11%" />
-<col style="width: 10%" />
-<col style="width: 16%" />
-<col style="width: 23%" />
-<col style="width: 26%" />
-<col style="width: 8%" />
+<col width="7%" />
+<col width="11%" />
+<col width="10%" />
+<col width="16%" />
+<col width="23%" />
+<col width="26%" />
+<col width="8%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Platform</p></th>
-<th class="head"><p>Sub platform</p></th>
-<th class="head"><p>Host CPU(s)</p></th>
-<th class="head"><p>Manufacturer</p></th>
-<th class="head"><p>compatible</p></th>
-<th class="head"><p>Other names/Notes</p></th>
-<th class="head"><p>Link(s)</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Platform</th>
+<th class="head">Sub platform</th>
+<th class="head">Host CPU(s)</th>
+<th class="head">Manufacturer</th>
+<th class="head">compatible</th>
+<th class="head">Other names/Notes</th>
+<th class="head">Link(s)</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>astbmc</p></td>
-<td><p>barreleye</p></td>
-<td><p>Power8</p></td>
-<td><p>Ingrasys (Foxconn)</p></td>
-<td><p>“ingrasys,barreleye”</p></td>
-<td><p>Barreleye, Rackspace machine</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p>astbmc</p></td>
-<td><p>firestone</p></td>
-<td><p>Power8</p></td>
-<td><p>Wistron, IBM</p></td>
-<td><p>“ibm,firestone”</p></td>
-<td><p>Firestone, S822LC</p></td>
-<td><p><a class="footnote-reference brackets" href="#id10" id="id1">1</a></p></td>
-</tr>
-<tr class="row-even"><td><p>astbmc</p></td>
-<td><p>garrison</p></td>
-<td><p>Power8NVL</p></td>
-<td><p>IBM</p></td>
-<td><p>“ibm,garrison”</p></td>
-<td><p>Minsky, “S822LC for HPC”</p></td>
-<td><p><a class="footnote-reference brackets" href="#id11" id="id2">2</a></p></td>
-</tr>
-<tr class="row-odd"><td><p>astbmc</p></td>
-<td><p>habanero</p></td>
-<td><p>Power8</p></td>
-<td><p>Tyan</p></td>
-<td><p>“tyan,habanero”</p></td>
-<td><p>Habanero, TN71-BP012</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p>astbmc</p></td>
-<td><p>p8dtu</p></td>
-<td><p>Power8</p></td>
-<td><p>Supermicro</p></td>
-<td><p>“supermicro,p8dtu1u”</p></td>
-<td><p>Briggs, “S822LC for Big Data”</p></td>
-<td><p><a class="footnote-reference brackets" href="#id12" id="id3">3</a> <a class="footnote-reference brackets" href="#id14" id="id4">4</a></p></td>
-</tr>
-<tr class="row-odd"><td><p>astbmc</p></td>
-<td><p>p8dtu</p></td>
-<td><p>Power8</p></td>
-<td><p>Supermicro</p></td>
-<td><p>“supermicro,p8dtu2u”</p></td>
-<td><p>Stratton, S821LC</p></td>
-<td><p><a class="footnote-reference brackets" href="#id15" id="id5">5</a> <a class="footnote-reference brackets" href="#id17" id="id6">6</a></p></td>
-</tr>
-<tr class="row-even"><td><p>astbmc</p></td>
-<td><p>p8dnu</p></td>
-<td><p>Power8NVL</p></td>
-<td><p>Supermicro</p></td>
-<td><p>“supermicro,p8dnu(1u|2u)?”</p></td>
-<td></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p>astbmc</p></td>
-<td><p>palmetto</p></td>
-<td><p>Power8</p></td>
-<td><p>Tyan</p></td>
-<td><p>“tyan,palmetto”</p></td>
-<td><p>Palmetto, GN70-BP010</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p>astbmc</p></td>
-<td><p>vesnin</p></td>
-<td><p>Power8</p></td>
-<td><p>Yadro</p></td>
-<td><p>“YADRO,vesnin”</p></td>
-<td><p>VESNIN</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p>ibm-fsp</p></td>
-<td><p>firenze</p></td>
-<td><p>Power8E</p></td>
-<td><p>IBM</p></td>
-<td><p>“ibm,firenze”</p></td>
-<td><p>Tuleta, S812L, S822L</p></td>
-<td><p><a class="footnote-reference brackets" href="#id18" id="id7">7</a></p></td>
-</tr>
-<tr class="row-even"><td><p>rhesus</p></td>
-<td><p>n/a</p></td>
-<td><p>Power8E</p></td>
-<td></td>
-<td><p>“ibm,powernv”</p></td>
-<td><p>Rhesus, Google machine</p></td>
-<td></td>
+<tbody valign="top">
+<tr class="row-even"><td>astbmc</td>
+<td>barreleye</td>
+<td>Power8</td>
+<td>Ingrasys (Foxconn)</td>
+<td>“ingrasys,barreleye”</td>
+<td>Barreleye, Rackspace machine</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td>astbmc</td>
+<td>firestone</td>
+<td>Power8</td>
+<td>Wistron, IBM</td>
+<td>“ibm,firestone”</td>
+<td>Firestone, S822LC</td>
+<td><a class="footnote-reference" href="#id10" id="id1">[1]</a></td>
+</tr>
+<tr class="row-even"><td>astbmc</td>
+<td>garrison</td>
+<td>Power8NVL</td>
+<td>IBM</td>
+<td>“ibm,garrison”</td>
+<td>Minsky, “S822LC for HPC”</td>
+<td><a class="footnote-reference" href="#id11" id="id2">[2]</a></td>
+</tr>
+<tr class="row-odd"><td>astbmc</td>
+<td>habanero</td>
+<td>Power8</td>
+<td>Tyan</td>
+<td>“tyan,habanero”</td>
+<td>Habanero, TN71-BP012</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td>astbmc</td>
+<td>p8dtu</td>
+<td>Power8</td>
+<td>Supermicro</td>
+<td>“supermicro,p8dtu1u”</td>
+<td>Briggs, “S822LC for Big Data”</td>
+<td><a class="footnote-reference" href="#id12" id="id3">[3]</a> <a class="footnote-reference" href="#id14" id="id4">[4]</a></td>
+</tr>
+<tr class="row-odd"><td>astbmc</td>
+<td>p8dtu</td>
+<td>Power8</td>
+<td>Supermicro</td>
+<td>“supermicro,p8dtu2u”</td>
+<td>Stratton, S821LC</td>
+<td><a class="footnote-reference" href="#id15" id="id5">[5]</a> <a class="footnote-reference" href="#id17" id="id6">[6]</a></td>
+</tr>
+<tr class="row-even"><td>astbmc</td>
+<td>p8dnu</td>
+<td>Power8NVL</td>
+<td>Supermicro</td>
+<td>“supermicro,p8dnu(1u|2u)?”</td>
+<td>&#160;</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td>astbmc</td>
+<td>palmetto</td>
+<td>Power8</td>
+<td>Tyan</td>
+<td>“tyan,palmetto”</td>
+<td>Palmetto, GN70-BP010</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td>astbmc</td>
+<td>vesnin</td>
+<td>Power8</td>
+<td>Yadro</td>
+<td>“YADRO,vesnin”</td>
+<td>VESNIN</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td>ibm-fsp</td>
+<td>firenze</td>
+<td>Power8E</td>
+<td>IBM</td>
+<td>“ibm,firenze”</td>
+<td>Tuleta, S812L, S822L</td>
+<td><a class="footnote-reference" href="#id18" id="id7">[7]</a></td>
+</tr>
+<tr class="row-even"><td>rhesus</td>
+<td>n/a</td>
+<td>Power8E</td>
+<td>&#160;</td>
+<td>“ibm,powernv”</td>
+<td>Rhesus, Google machine</td>
+<td>&#160;</td>
+</tr>
+</tbody>
+</table>
+<table border="1" class="docutils">
+<colgroup>
+<col width="7%" />
+<col width="11%" />
+<col width="10%" />
+<col width="16%" />
+<col width="23%" />
+<col width="26%" />
+<col width="6%" />
+</colgroup>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Platform</th>
+<th class="head">Sub platform</th>
+<th class="head">Host CPU(s)</th>
+<th class="head">Manufacturer</th>
+<th class="head">compatible</th>
+<th class="head">Other names/Notes</th>
+<th class="head">Link(s)</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr class="row-even"><td>astbmc</td>
+<td>p9sdu</td>
+<td>Power9N</td>
+<td>Supermicro</td>
+<td>“supermicro,p9dsu”</td>
+<td>Boston, LC921/LC922</td>
+<td><a class="footnote-reference" href="#id19" id="id8">[8]</a></td>
+</tr>
+<tr class="row-odd"><td>astbmc</td>
+<td>romulus</td>
+<td>Power9N</td>
+<td>&#160;</td>
+<td>“ibm,romulus”</td>
+<td>Romulus</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td>astbmc</td>
+<td>talos</td>
+<td>Power9N</td>
+<td>Raptor</td>
+<td>“rcs,talos”</td>
+<td>Talos II, similar to Romulus</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td>astbmc</td>
+<td>blackbird</td>
+<td>Power9N</td>
+<td>Raptor</td>
+<td>“rcs,blackbird”</td>
+<td>Blackbrid</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td>astbmc</td>
+<td>witherspoon</td>
+<td>Power9N</td>
+<td>&#160;</td>
+<td>“ibm,witherspoon”</td>
+<td>Witherspoon, Newell, AC922</td>
+<td><a class="footnote-reference" href="#id20" id="id9">[9]</a></td>
+</tr>
+<tr class="row-odd"><td>astbmc</td>
+<td>zaius</td>
+<td>Power9N</td>
+<td>Ingrasys (Foxconn)</td>
+<td>“ingrasys,zaius”</td>
+<td>Zaius, Barreleye Gen2</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td>astbmc</td>
+<td>mihawk</td>
+<td>Power9N</td>
+<td>&#160;</td>
+<td>“{wistron,ibm},mihawk”</td>
+<td>Mihawk, IC922</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td>astbmc</td>
+<td>nicole</td>
+<td>Power9N</td>
+<td>Yadro</td>
+<td>“YADRO,nicole”</td>
+<td>Nicole</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td>ibm-fsp</td>
+<td>zz</td>
+<td>Power9N</td>
+<td>&#160;</td>
+<td>“ibm,zz-(1|2)s(2|4)u”</td>
+<td>&#160;</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-odd"><td>astbmc</td>
+<td>swift</td>
+<td>Power9P</td>
+<td>&#160;</td>
+<td>“ibm,swift”</td>
+<td>Swift</td>
+<td>&#160;</td>
+</tr>
+<tr class="row-even"><td>astbmc</td>
+<td>mowgli</td>
+<td>Power9N</td>
+<td>Wistron</td>
+<td>“ibm,mowgli”</td>
+<td>Mowgli</td>
+<td>&#160;</td>
</tr>
</tbody>
</table>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 7%" />
-<col style="width: 11%" />
-<col style="width: 10%" />
-<col style="width: 16%" />
-<col style="width: 23%" />
-<col style="width: 26%" />
-<col style="width: 6%" />
+<col width="7%" />
+<col width="11%" />
+<col width="10%" />
+<col width="16%" />
+<col width="23%" />
+<col width="26%" />
+<col width="6%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Platform</p></th>
-<th class="head"><p>Sub platform</p></th>
-<th class="head"><p>Host CPU(s)</p></th>
-<th class="head"><p>Manufacturer</p></th>
-<th class="head"><p>compatible</p></th>
-<th class="head"><p>Other names/Notes</p></th>
-<th class="head"><p>Link(s)</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Platform</th>
+<th class="head">Sub platform</th>
+<th class="head">Host CPU(s)</th>
+<th class="head">Manufacturer</th>
+<th class="head">compatible</th>
+<th class="head">Other names/Notes</th>
+<th class="head">Link(s)</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>astbmc</p></td>
-<td><p>p9sdu</p></td>
-<td><p>Power9</p></td>
-<td><p>Supermicro</p></td>
-<td><p>“supermicro,p9dsu”</p></td>
-<td><p>Boston, LC921/LC922</p></td>
-<td><p><a class="footnote-reference brackets" href="#id19" id="id8">8</a></p></td>
-</tr>
-<tr class="row-odd"><td><p>astbmc</p></td>
-<td><p>romulus</p></td>
-<td><p>Power9</p></td>
-<td></td>
-<td><p>“ibm,romulus”</p></td>
-<td><p>Romulus</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p>astbmc</p></td>
-<td><p>talos</p></td>
-<td><p>Power9</p></td>
-<td><p>Raptor</p></td>
-<td><p>“rcs,talos”</p></td>
-<td><p>Talos II, similar to Romulus</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p>astbmc</p></td>
-<td><p>blackbird</p></td>
-<td><p>Power9</p></td>
-<td><p>Raptor</p></td>
-<td><p>“rcs,blackbird”</p></td>
-<td><p>Blackbrid</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p>astbmc</p></td>
-<td><p>witherspoon</p></td>
-<td><p>Power9</p></td>
-<td></td>
-<td><p>“ibm,witherspoon”</p></td>
-<td><p>Witherspoon, Newell, AC922</p></td>
-<td><p><a class="footnote-reference brackets" href="#id20" id="id9">9</a></p></td>
-</tr>
-<tr class="row-odd"><td><p>astbmc</p></td>
-<td><p>zaius</p></td>
-<td><p>Power9</p></td>
-<td><p>Ingrasys (Foxconn)</p></td>
-<td><p>“ingrasys,zaius”</p></td>
-<td><p>Zaius, Barreleye Gen2</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p>astbmc</p></td>
-<td><p>mihawk</p></td>
-<td><p>Power9</p></td>
-<td></td>
-<td><p>“{wistron,ibm},mihawk”</p></td>
-<td><p>Mihawk, IC922</p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p>astbmc</p></td>
-<td><p>nicole</p></td>
-<td><p>Power9</p></td>
-<td><p>Yadro</p></td>
-<td><p>“YADRO,nicole”</p></td>
-<td><p>Nicole</p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p>ibm-fsp</p></td>
-<td><p>zz</p></td>
-<td><p>Power9</p></td>
-<td></td>
-<td><p>“ibm,zz-(1|2)s(2|4)u”</p></td>
-<td></td>
-<td></td>
+<tbody valign="top">
+<tr class="row-even"><td>astbmc</td>
+<td>rainier</td>
+<td>Power10</td>
+<td>&#160;</td>
+<td>“ibm,rainier”</td>
+<td>Rainier</td>
+<td>&#160;</td>
</tr>
</tbody>
</table>
@@ -313,48 +365,64 @@ platform for Skiboot. Once P8 hardware became available almost all
development (and testing) on P7 ceased. Anyone interested in using OPAL on
a P7 should look at one of the early <cite>v5.x</cite> releases.</p>
<p class="rubric">Footnotes</p>
-<dl class="footnote brackets">
-<dt class="label" id="id10"><span class="brackets"><a class="fn-backref" href="#id1">1</a></span></dt>
-<dd><p><a class="reference external" href="https://www.nextplatform.com/2015/10/08/ibm-back-in-hpc-with-power-systems-lc-clusters/">IBM Back In HPC With Power Systems LC Clusters</a></p>
-</dd>
-</dl>
-<dl class="footnote brackets">
-<dt class="label" id="id11"><span class="brackets"><a class="fn-backref" href="#id2">2</a></span></dt>
-<dd><p><a class="reference external" href="https://www.nextplatform.com/2016/09/08/refreshed-ibm-power-linux-systems-add-nvlink/">Refreshed IBM Power Linux Systems Add NVLink</a></p>
-</dd>
-</dl>
-<dl class="footnote brackets">
-<dt class="label" id="id12"><span class="brackets"><a class="fn-backref" href="#id3">3</a></span></dt>
-<dd><p><a class="reference external" href="https://www.nextplatform.com/2016/09/08/refreshed-ibm-power-linux-systems-add-nvlink/">Refreshed IBM Power Linux Systems Add NVLink</a></p>
-</dd>
-<dt class="label" id="id14"><span class="brackets"><a class="fn-backref" href="#id4">4</a></span></dt>
-<dd><p><a class="reference external" href="https://www.youtube.com/watch?v=TnW-NcLR28g">First Look IBM POWER8 S822LC 8001-22C (Briggs)</a></p>
-</dd>
-</dl>
-<dl class="footnote brackets">
-<dt class="label" id="id15"><span class="brackets"><a class="fn-backref" href="#id5">5</a></span></dt>
-<dd><p><a class="reference external" href="https://www.nextplatform.com/2016/09/08/refreshed-ibm-power-linux-systems-add-nvlink/">Refreshed IBM Power Linux Systems Add NVLink</a></p>
-</dd>
-<dt class="label" id="id17"><span class="brackets"><a class="fn-backref" href="#id6">6</a></span></dt>
-<dd><p><a class="reference external" href="https://www.youtube.com/watch?v=OM3wU4Uu8LI">First Look IBM POWER8 S821LC 8001-12C (Stratton)</a></p>
-</dd>
-<dt class="label" id="id18"><span class="brackets"><a class="fn-backref" href="#id7">7</a></span></dt>
-<dd><p><a class="reference external" href="https://www.itjungle.com/2018/05/14/boston-power9s-set-to-debut/">Boston Power9s Set To Debut</a></p>
-</dd>
-<dt class="label" id="id19"><span class="brackets"><a class="fn-backref" href="#id8">8</a></span></dt>
-<dd><p><a class="reference external" href="https://www.nextplatform.com/2017/12/05/power9-to-the-people/">POWER9 TO THE PEOPLE</a></p>
-</dd>
-</dl>
-<dl class="footnote brackets">
-<dt class="label" id="id20"><span class="brackets"><a class="fn-backref" href="#id9">9</a></span></dt>
-<dd><p><a class="reference external" href="https://www.ibm.com/au-en/marketplace/power-system-s812l-s822l">IBM Power System S812L and IBM Power System S822L</a></p>
-</dd>
-</dl>
+<table class="docutils footnote" frame="void" id="id10" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td><a class="reference external" href="https://www.nextplatform.com/2015/10/08/ibm-back-in-hpc-with-power-systems-lc-clusters/">IBM Back In HPC With Power Systems LC Clusters</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="id11" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td><a class="reference external" href="https://www.nextplatform.com/2016/09/08/refreshed-ibm-power-linux-systems-add-nvlink/">Refreshed IBM Power Linux Systems Add NVLink</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="id12" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id3">[3]</a></td><td><a class="reference external" href="https://www.nextplatform.com/2016/09/08/refreshed-ibm-power-linux-systems-add-nvlink/">Refreshed IBM Power Linux Systems Add NVLink</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="id14" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id4">[4]</a></td><td><a class="reference external" href="https://www.youtube.com/watch?v=TnW-NcLR28g">First Look IBM POWER8 S822LC 8001-22C (Briggs)</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="id15" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id5">[5]</a></td><td><a class="reference external" href="https://www.nextplatform.com/2016/09/08/refreshed-ibm-power-linux-systems-add-nvlink/">Refreshed IBM Power Linux Systems Add NVLink</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="id17" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id6">[6]</a></td><td><a class="reference external" href="https://www.youtube.com/watch?v=OM3wU4Uu8LI">First Look IBM POWER8 S821LC 8001-12C (Stratton)</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="id18" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id7">[7]</a></td><td><a class="reference external" href="https://www.itjungle.com/2018/05/14/boston-power9s-set-to-debut/">Boston Power9s Set To Debut</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="id19" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id8">[8]</a></td><td><a class="reference external" href="https://www.nextplatform.com/2017/12/05/power9-to-the-people/">POWER9 TO THE PEOPLE</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="id20" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id9">[9]</a></td><td><a class="reference external" href="https://www.ibm.com/au-en/marketplace/power-system-s812l-s822l">IBM Power System S812L and IBM Power System S822L</a></td></tr>
+</tbody>
+</table>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -384,15 +452,17 @@ a P7 should look at one of the early <cite>v5.x</cite> releases.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -409,14 +479,13 @@ a P7 should look at one of the early <cite>v5.x</cite> releases.</p>
<li class="right" >
<a href="opal-spec.html" title="OPAL Specification"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Supported platforms &amp; CPUs</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/power-management.html b/doc/power-management.html
index df3ec3b..a68b967 100644
--- a/doc/power-management.html
+++ b/doc/power-management.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Power Management &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Power Management &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="imc.html" title="OPAL/Skiboot In-Memory Collection (IMC) interface Documentation"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Power Management</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -45,7 +46,7 @@
<div class="section" id="power-management">
<h1>Power Management<a class="headerlink" href="#power-management" title="Permalink to this headline">¶</a></h1>
-<p>See <a class="reference internal" href="device-tree/ibm%2Copal/power-mgt.html#power-mgt-devtree"><span class="std std-ref">ibm,opal/power-mgt device tree entries</span></a> for device tree structure describing power management facilities.</p>
+<p>See <a class="reference internal" href="device-tree/ibm,opal/power-mgt.html#power-mgt-devtree"><span class="std std-ref">ibm,opal/power-mgt device tree entries</span></a> for device tree structure describing power management facilities.</p>
<div class="section" id="debugging">
<h2>Debugging<a class="headerlink" href="#debugging" title="Permalink to this headline">¶</a></h2>
<p>There exist a few debug knobs that can be set via nvram settings. These are
@@ -62,7 +63,6 @@ to disable all but stop 0,1,2, use ~0xE0000000.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -93,15 +93,17 @@ to disable all but stop 0,1,2, use ~0xE0000000.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -118,14 +120,13 @@ to disable all but stop 0,1,2, use ~0xE0000000.</p>
<li class="right" >
<a href="imc.html" title="OPAL/Skiboot In-Memory Collection (IMC) interface Documentation"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Power Management</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/process/CONTRIBUTING.html b/doc/process/CONTRIBUTING.html
index 537ff65..0700f23 100644
--- a/doc/process/CONTRIBUTING.html
+++ b/doc/process/CONTRIBUTING.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Contributing to skiboot &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Contributing to skiboot &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="dev-release-process.html" title="Development and Release Process"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Contributing to skiboot</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -44,18 +45,18 @@
<div class="body" role="main">
<div class="section" id="contributing-to-skiboot">
-<h1>Contributing to skiboot<a class="headerlink" href="#contributing-to-skiboot" title="Permalink to this headline">¶</a></h1>
+<span id="contributing-to-skiboot"></span><h1>Contributing to skiboot<a class="headerlink" href="#contributing-to-skiboot" title="Permalink to this headline">¶</a></h1>
<p>skiboot is OPAL (OpenPOWER Abstraction Layer) boot and runtime firmware for
POWER.</p>
<p>If you haven’t already, join us on IRC (#openpower on Freenode) and on
-the mailing list ( <a class="reference external" href="mailto:skiboot&#37;&#52;&#48;lists&#46;ozlabs&#46;org">skiboot<span>&#64;</span>lists<span>&#46;</span>ozlabs<span>&#46;</span>org</a> - subscribe by
-going to <a class="reference external" href="https://lists.ozlabs.org/listinfo/skiboot">https://lists.ozlabs.org/listinfo/skiboot</a> )</p>
+the mailing list ( skiboot&#64;lists.ozlabs.org - subscribe by
+going to https://lists.ozlabs.org/listinfo/skiboot )</p>
<p>While we do use GitHub Issues, patches are accepted via the mailing list.
We expect participants to adhere to the GitHub Community Guidelines (found
-at <a class="reference external" href="https://help.github.com/articles/github-community-guidelines/">https://help.github.com/articles/github-community-guidelines/</a> ).</p>
+at https://help.github.com/articles/github-community-guidelines/ ).</p>
<p>All contributions should have a Developer Certificate of Origin (see below).</p>
<div class="section" id="development-environment">
-<h2>Development Environment<a class="headerlink" href="#development-environment" title="Permalink to this headline">¶</a></h2>
+<span id="development-environment"></span><h2>Development Environment<a class="headerlink" href="#development-environment" title="Permalink to this headline">¶</a></h2>
<p>A host GCC of at least 4.9 is recommended (all modern Linux distributions
provide this).</p>
<p>You can build on x86-64, ppc64 or ppc64le, you just need a powerpc64 (BE)
@@ -63,51 +64,56 @@ cross compiler. The powerpc64le cross compilers packaged in Linux distributions
can build BE code, so they are fine.</p>
</div>
<div class="section" id="developer-certificate-of-origin">
-<h2>Developer Certificate of Origin<a class="headerlink" href="#developer-certificate-of-origin" title="Permalink to this headline">¶</a></h2>
-<p>Contributions to this project should conform to the <cite>Developer Certificate
-of Origin</cite> as defined at <a class="reference external" href="http://elinux.org/Developer_Certificate_Of_Origin">http://elinux.org/Developer_Certificate_Of_Origin</a>.
+<span id="developer-certificate-of-origin"></span><h2>Developer Certificate of Origin<a class="headerlink" href="#developer-certificate-of-origin" title="Permalink to this headline">¶</a></h2>
+<p>Contributions to this project should conform to the <code class="docutils literal notranslate"><span class="pre">Developer</span> <span class="pre">Certificate</span> <span class="pre">of</span> <span class="pre">Origin</span></code> as defined at http://elinux.org/Developer_Certificate_Of_Origin.
Commits to this project need to contain the following line to indicate
-the submitter accepts the DCO:
-<code class="docutils literal notranslate"><span class="pre">`</span>
-<span class="pre">Signed-off-by:</span> <span class="pre">Your</span> <span class="pre">Name</span> <span class="pre">&lt;your_email&#64;domain.com&gt;</span>
-<span class="pre">`</span></code>
-By contributing in this way, you agree to the terms as follows:
-<a href="#id1"><span class="problematic" id="id2">``</span></a>`
-Developer Certificate of Origin
-Version 1.1</p>
-<p>Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
-660 York Street, Suite 102,
-San Francisco, CA 94110 USA</p>
-<p>Everyone is permitted to copy and distribute verbatim copies of this
-license document, but changing it is not allowed.</p>
-<p>Developer’s Certificate of Origin 1.1</p>
-<p>By making a contribution to this project, I certify that:</p>
-<ol class="loweralpha simple">
-<li><p>The contribution was created in whole or in part by me and I
-have the right to submit it under the open source license
-indicated in the file; or</p></li>
-<li><p>The contribution is based upon previous work that, to the best
-of my knowledge, is covered under an appropriate open source
-license and I have the right under that license to submit that
-work with modifications, whether created in whole or in part
-by me, under the same open source license (unless I am
-permitted to submit under a different license), as indicated
-in the file; or</p></li>
-<li><p>The contribution was provided directly to me by some other
-person who certified (a), (b) or (c) and I have not modified
-it.</p></li>
-<li><p>I understand and agree that this project and the contribution
-are public and that a record of the contribution (including all
-personal information I submit with it, including my sign-off) is
-maintained indefinitely and may be redistributed consistent with
-this project or the open source license(s) involved.</p></li>
-</ol>
-<p><a href="#id3"><span class="problematic" id="id4">``</span></a><a href="#id5"><span class="problematic" id="id6">`</span></a></p>
+the submitter accepts the DCO:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Signed</span><span class="o">-</span><span class="n">off</span><span class="o">-</span><span class="n">by</span><span class="p">:</span> <span class="n">Your</span> <span class="n">Name</span> <span class="o">&lt;</span><span class="n">your_email</span><span class="nd">@domain</span><span class="o">.</span><span class="n">com</span><span class="o">&gt;</span>
+</pre></div>
+</div>
+<p>By contributing in this way, you agree to the terms as follows:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Developer</span> <span class="n">Certificate</span> <span class="n">of</span> <span class="n">Origin</span>
+<span class="n">Version</span> <span class="mf">1.1</span>
+
+<span class="n">Copyright</span> <span class="p">(</span><span class="n">C</span><span class="p">)</span> <span class="mi">2004</span><span class="p">,</span> <span class="mi">2006</span> <span class="n">The</span> <span class="n">Linux</span> <span class="n">Foundation</span> <span class="ow">and</span> <span class="n">its</span> <span class="n">contributors</span><span class="o">.</span>
+<span class="mi">660</span> <span class="n">York</span> <span class="n">Street</span><span class="p">,</span> <span class="n">Suite</span> <span class="mi">102</span><span class="p">,</span>
+<span class="n">San</span> <span class="n">Francisco</span><span class="p">,</span> <span class="n">CA</span> <span class="mi">94110</span> <span class="n">USA</span>
+
+<span class="n">Everyone</span> <span class="ow">is</span> <span class="n">permitted</span> <span class="n">to</span> <span class="n">copy</span> <span class="ow">and</span> <span class="n">distribute</span> <span class="n">verbatim</span> <span class="n">copies</span> <span class="n">of</span> <span class="n">this</span>
+<span class="n">license</span> <span class="n">document</span><span class="p">,</span> <span class="n">but</span> <span class="n">changing</span> <span class="n">it</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">allowed</span><span class="o">.</span>
+
+
+<span class="n">Developer</span><span class="s1">&#39;s Certificate of Origin 1.1</span>
+
+<span class="n">By</span> <span class="n">making</span> <span class="n">a</span> <span class="n">contribution</span> <span class="n">to</span> <span class="n">this</span> <span class="n">project</span><span class="p">,</span> <span class="n">I</span> <span class="n">certify</span> <span class="n">that</span><span class="p">:</span>
+
+<span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="n">The</span> <span class="n">contribution</span> <span class="n">was</span> <span class="n">created</span> <span class="ow">in</span> <span class="n">whole</span> <span class="ow">or</span> <span class="ow">in</span> <span class="n">part</span> <span class="n">by</span> <span class="n">me</span> <span class="ow">and</span> <span class="n">I</span>
+ <span class="n">have</span> <span class="n">the</span> <span class="n">right</span> <span class="n">to</span> <span class="n">submit</span> <span class="n">it</span> <span class="n">under</span> <span class="n">the</span> <span class="nb">open</span> <span class="n">source</span> <span class="n">license</span>
+ <span class="n">indicated</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">file</span><span class="p">;</span> <span class="ow">or</span>
+
+<span class="p">(</span><span class="n">b</span><span class="p">)</span> <span class="n">The</span> <span class="n">contribution</span> <span class="ow">is</span> <span class="n">based</span> <span class="n">upon</span> <span class="n">previous</span> <span class="n">work</span> <span class="n">that</span><span class="p">,</span> <span class="n">to</span> <span class="n">the</span> <span class="n">best</span>
+ <span class="n">of</span> <span class="n">my</span> <span class="n">knowledge</span><span class="p">,</span> <span class="ow">is</span> <span class="n">covered</span> <span class="n">under</span> <span class="n">an</span> <span class="n">appropriate</span> <span class="nb">open</span> <span class="n">source</span>
+ <span class="n">license</span> <span class="ow">and</span> <span class="n">I</span> <span class="n">have</span> <span class="n">the</span> <span class="n">right</span> <span class="n">under</span> <span class="n">that</span> <span class="n">license</span> <span class="n">to</span> <span class="n">submit</span> <span class="n">that</span>
+ <span class="n">work</span> <span class="k">with</span> <span class="n">modifications</span><span class="p">,</span> <span class="n">whether</span> <span class="n">created</span> <span class="ow">in</span> <span class="n">whole</span> <span class="ow">or</span> <span class="ow">in</span> <span class="n">part</span>
+ <span class="n">by</span> <span class="n">me</span><span class="p">,</span> <span class="n">under</span> <span class="n">the</span> <span class="n">same</span> <span class="nb">open</span> <span class="n">source</span> <span class="n">license</span> <span class="p">(</span><span class="n">unless</span> <span class="n">I</span> <span class="n">am</span>
+ <span class="n">permitted</span> <span class="n">to</span> <span class="n">submit</span> <span class="n">under</span> <span class="n">a</span> <span class="n">different</span> <span class="n">license</span><span class="p">),</span> <span class="k">as</span> <span class="n">indicated</span>
+ <span class="ow">in</span> <span class="n">the</span> <span class="n">file</span><span class="p">;</span> <span class="ow">or</span>
+
+<span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="n">The</span> <span class="n">contribution</span> <span class="n">was</span> <span class="n">provided</span> <span class="n">directly</span> <span class="n">to</span> <span class="n">me</span> <span class="n">by</span> <span class="n">some</span> <span class="n">other</span>
+ <span class="n">person</span> <span class="n">who</span> <span class="n">certified</span> <span class="p">(</span><span class="n">a</span><span class="p">),</span> <span class="p">(</span><span class="n">b</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="ow">and</span> <span class="n">I</span> <span class="n">have</span> <span class="ow">not</span> <span class="n">modified</span>
+ <span class="n">it</span><span class="o">.</span>
+
+<span class="p">(</span><span class="n">d</span><span class="p">)</span> <span class="n">I</span> <span class="n">understand</span> <span class="ow">and</span> <span class="n">agree</span> <span class="n">that</span> <span class="n">this</span> <span class="n">project</span> <span class="ow">and</span> <span class="n">the</span> <span class="n">contribution</span>
+ <span class="n">are</span> <span class="n">public</span> <span class="ow">and</span> <span class="n">that</span> <span class="n">a</span> <span class="n">record</span> <span class="n">of</span> <span class="n">the</span> <span class="n">contribution</span> <span class="p">(</span><span class="n">including</span> <span class="nb">all</span>
+ <span class="n">personal</span> <span class="n">information</span> <span class="n">I</span> <span class="n">submit</span> <span class="k">with</span> <span class="n">it</span><span class="p">,</span> <span class="n">including</span> <span class="n">my</span> <span class="n">sign</span><span class="o">-</span><span class="n">off</span><span class="p">)</span> <span class="ow">is</span>
+ <span class="n">maintained</span> <span class="n">indefinitely</span> <span class="ow">and</span> <span class="n">may</span> <span class="n">be</span> <span class="n">redistributed</span> <span class="n">consistent</span> <span class="k">with</span>
+ <span class="n">this</span> <span class="n">project</span> <span class="ow">or</span> <span class="n">the</span> <span class="nb">open</span> <span class="n">source</span> <span class="n">license</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="n">involved</span><span class="o">.</span>
+</pre></div>
+</div>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -136,15 +142,17 @@ this project or the open source license(s) involved.</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -161,14 +169,13 @@ this project or the open source license(s) involved.</p></li>
<li class="right" >
<a href="dev-release-process.html" title="Development and Release Process"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Contributing to skiboot</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/process/dev-release-process.html b/doc/process/dev-release-process.html
index 2185d1d..285670e 100644
--- a/doc/process/dev-release-process.html
+++ b/doc/process/dev-release-process.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Development and Release Process &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Development and Release Process &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="../platforms-and-cpus.html" title="Supported platforms &amp; CPUs"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Development and Release Process</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -57,40 +58,40 @@ device tree bindings) to come in <em>early</em> in the cycle.</p>
Linux process, but not a slave to it. For example, there is currently not
the volume of patches to justify a next tree.</p>
<p>Here’s how some of the recent (at time of writing) releases have gone:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 59%" />
-<col style="width: 41%" />
+<col width="59%" />
+<col width="41%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Date</p></th>
-<th class="head"><p>Release</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Date</th>
+<th class="head">Release</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Oct 31st 2017</p></td>
-<td><p>v5.9</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Oct 31st 2017</td>
+<td>v5.9</td>
</tr>
-<tr class="row-odd"><td><p>Feb 6th 2018</p></td>
-<td><p>v5.10-rc1</p></td>
+<tr class="row-odd"><td>Feb 6th 2018</td>
+<td>v5.10-rc1</td>
</tr>
-<tr class="row-even"><td><p>Feb 9th 2018</p></td>
-<td><p>v5.10-rc2</p></td>
+<tr class="row-even"><td>Feb 9th 2018</td>
+<td>v5.10-rc2</td>
</tr>
-<tr class="row-odd"><td><p>Feb 15th 2018</p></td>
-<td><p>v5.10-rc3</p></td>
+<tr class="row-odd"><td>Feb 15th 2018</td>
+<td>v5.10-rc3</td>
</tr>
-<tr class="row-even"><td><p>Feb 21st 2018</p></td>
-<td><p>v5.10-rc4</p></td>
+<tr class="row-even"><td>Feb 21st 2018</td>
+<td>v5.10-rc4</td>
</tr>
-<tr class="row-odd"><td><p>Feb 23rd 2018</p></td>
-<td><p>v5.10</p></td>
+<tr class="row-odd"><td>Feb 23rd 2018</td>
+<td>v5.10</td>
</tr>
-<tr class="row-even"><td><p>Mar 28th 2018</p></td>
-<td><p>v5.11-rc1</p></td>
+<tr class="row-even"><td>Mar 28th 2018</td>
+<td>v5.11-rc1</td>
</tr>
-<tr class="row-odd"><td><p>Apr 6th 2018</p></td>
-<td><p>v5.11</p></td>
+<tr class="row-odd"><td>Apr 6th 2018</td>
+<td>v5.11</td>
</tr>
</tbody>
</table>
@@ -98,7 +99,7 @@ the volume of patches to justify a next tree.</p>
<h2>Lifecycle of a patch<a class="headerlink" href="#lifecycle-of-a-patch" title="Permalink to this headline">¶</a></h2>
<p>Roughly speaking, a patch has the following lifecycle:</p>
<ul>
-<li><p>Design</p>
+<li><p class="first">Design</p>
<p>It is best to do design work in the open, although sometimes this is hard
when upcoming unannounced hardware is involved. Often, it can be useful to
post an RFC design or patch to encourage discussion. This is especially
@@ -110,7 +111,7 @@ getting the applicable code upstream. Different perspectives are important
in coming to elegant solutions, as is having more than one person understand
the reasoning behind design decisions.</p>
</li>
-<li><p>Review and Test</p>
+<li><p class="first">Review and Test</p>
<p>Once you think your patch is a state suitable for merging, send it to the
mailing list for others to review and test. Using <cite>git format-patch</cite> and
<cite>git send-email</cite> is good practice to ensure your patches survive being sent
@@ -123,7 +124,7 @@ testing code before we merge it is to limit any problems to the smallest
number of people possible, only merging code we are collectively confident
that will <em>improve</em> life for all users and developers.</p>
</li>
-<li><p>Merged to master</p>
+<li><p class="first">Merged to master</p>
<p>The maintainer as merged your patches to the development tree (the â€master’
git branch). Soon after this, many more people are going to be running your
code, so good review and testing helps ensure your inbox isn’t flooded with
@@ -131,11 +132,11 @@ bug reports.</p>
<p>If your patch has also been sent to the stable tree, it’s possible it also
gets merged there soonafter.</p>
</li>
-<li><p>Stable release</p>
+<li><p class="first">Stable release</p>
<p>Once a stable release is made, it’s likely that your code makes its way into
vendor’s firmware releases via their test cycles.</p>
</li>
-<li><p>Bug fixes and maintenance</p>
+<li><p class="first">Bug fixes and maintenance</p>
<p>Bugs are a fact of life, sometimes in our own code, sometimes in others, and
sometimes in hardware. After your patch is accepted, being available for
input on possible bugs found and possible fixes is invaluable so that all
@@ -164,7 +165,6 @@ or BSD-MIT license (see LICENSE files for specifics).</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -194,15 +194,17 @@ or BSD-MIT license (see LICENSE files for specifics).</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -219,14 +221,13 @@ or BSD-MIT license (see LICENSE files for specifics).</p>
<li class="right" >
<a href="../platforms-and-cpus.html" title="Supported platforms &amp; CPUs"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Development and Release Process</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/process/stable-skiboot-rules.html b/doc/process/stable-skiboot-rules.html
index 38fab08..ab39268 100644
--- a/doc/process/stable-skiboot-rules.html
+++ b/doc/process/stable-skiboot-rules.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Skiboot stable tree rules and releases &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Skiboot stable tree rules and releases &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="CONTRIBUTING.html" title="Contributing to skiboot"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Skiboot stable tree rules and releases</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -56,18 +57,16 @@ with my IBMer hat on, we’ll maintain branches that we ship in products.</p>
<div class="section" id="what-patches-are-accepted">
<h2>What patches are accepted?<a class="headerlink" href="#what-patches-are-accepted" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Patches must be obviously correct and tested</p>
-<ul>
-<li><p>A Tested-by signoff is <em>important</em></p></li>
+<li>Patches must be obviously correct and tested<ul>
+<li>A Tested-by signoff is <em>important</em></li>
</ul>
</li>
-<li><p>A patch must fix a real bug</p></li>
-<li><p>No trivial patches, such fixups belong in main branch</p></li>
-<li><p>Not fix a purely theoretical problem unless you can prove how
-it’s exploitable</p></li>
-<li><p>The patch, or an equivalent one, must already be in master</p>
-<ul>
-<li><p>Submitting to both at the same time is okay, but backporting is better</p></li>
+<li>A patch must fix a real bug</li>
+<li>No trivial patches, such fixups belong in main branch</li>
+<li>Not fix a purely theoretical problem unless you can prove how
+it’s exploitable</li>
+<li>The patch, or an equivalent one, must already be in master<ul>
+<li>Submitting to both at the same time is okay, but backporting is better</li>
</ul>
</li>
</ul>
@@ -76,42 +75,44 @@ it’s exploitable</p></li>
<h2>HOWTO submit to stable<a class="headerlink" href="#howto-submit-to-stable" title="Permalink to this headline">¶</a></h2>
<p>Two ways:</p>
<ol class="arabic">
-<li><p>Send patch to the <a class="reference external" href="mailto:skiboot-stable&#37;&#52;&#48;lists&#46;ozlabs&#46;org">skiboot-stable<span>&#64;</span>lists<span>&#46;</span>ozlabs<span>&#46;</span>org</a> list with
+<li><p class="first">Send patch to the <a class="reference external" href="mailto:skiboot-stable&#37;&#52;&#48;lists&#46;ozlabs&#46;org">skiboot-stable<span>&#64;</span>lists<span>&#46;</span>ozlabs<span>&#46;</span>org</a> list with
“[PATCH &lt;stable version&gt;]” in subject</p>
<ul>
-<li><p>This targets the patch <em>ONLY</em> to the stable branch.</p>
+<li><p class="first">This targets the patch <em>ONLY</em> to the stable branch.</p>
<ul class="simple">
-<li><p>Such commits will <em>NOT</em> be merged into master.</p></li>
+<li>Such commits will <em>NOT</em> be merged into master.</li>
</ul>
</li>
-<li><p>Use this when:</p>
+<li><p class="first">Use this when:</p>
<ol class="loweralpha simple">
-<li><p>cherry-picking a fix from master</p></li>
-<li><p>fixing something that is only broken in stable</p></li>
-<li><p>fix in stable needs to be completely different than in master</p></li>
+<li>cherry-picking a fix from master</li>
+<li>fixing something that is only broken in stable</li>
+<li>fix in stable needs to be completely different than in master</li>
</ol>
<p>If b or c: explain why.</p>
</li>
-<li><p>If cherry-picking, include the following at the top of your
+<li><p class="first">If cherry-picking, include the following at the top of your
commit message:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">commit</span> <span class="o">&lt;</span><span class="n">sha1</span><span class="o">&gt;</span> <span class="n">upstream</span><span class="o">.</span>
</pre></div>
</div>
</li>
-<li><p>If the patch has been modified, explain why in description.</p></li>
+<li><p class="first">If the patch has been modified, explain why in description.</p>
+</li>
</ul>
</li>
-<li><p>Add “Cc: <a class="reference external" href="mailto:skiboot-stable&#37;&#52;&#48;lists&#46;ozlabs&#46;org">skiboot-stable<span>&#64;</span>lists<span>&#46;</span>ozlabs<span>&#46;</span>org</a>” above your Signed-off-by line
+<li><p class="first">Add “Cc: <a class="reference external" href="mailto:skiboot-stable&#37;&#52;&#48;lists&#46;ozlabs&#46;org">skiboot-stable<span>&#64;</span>lists<span>&#46;</span>ozlabs<span>&#46;</span>org</a>” above your Signed-off-by line
when sending to skiboot&#64;</p>
<ul>
-<li><p>This targets the patch to master and stable.</p></li>
-<li><p>You can target a patch to a specific stable tree with:</p>
+<li><p class="first">This targets the patch to master and stable.</p>
+</li>
+<li><p class="first">You can target a patch to a specific stable tree with:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Cc</span><span class="p">:</span> <span class="n">skiboot</span><span class="o">-</span><span class="n">stable</span><span class="nd">@lists</span><span class="o">.</span><span class="n">ozlabs</span><span class="o">.</span><span class="n">org</span> <span class="c1"># 5.1.x</span>
</pre></div>
</div>
<p>and that will target it to the 5.1.x branch.</p>
</li>
-<li><p>You can ask for prerequisites to be cherry-picked:</p>
+<li><p class="first">You can ask for prerequisites to be cherry-picked:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Cc</span><span class="p">:</span> <span class="n">skiboot</span><span class="o">-</span><span class="n">stable</span><span class="nd">@lists</span><span class="o">.</span><span class="n">ozlabs</span><span class="o">.</span><span class="n">org</span> <span class="c1"># 5.1.x 55ae15b Ensure we run pollers in cpu_wait_job()</span>
<span class="n">Cc</span><span class="p">:</span> <span class="n">skiboot</span><span class="o">-</span><span class="n">stable</span><span class="nd">@lists</span><span class="o">.</span><span class="n">ozlabs</span><span class="o">.</span><span class="n">org</span> <span class="c1"># 5.1.x</span>
</pre></div>
@@ -119,8 +120,8 @@ when sending to skiboot&#64;</p>
<p>Which means:</p>
<blockquote>
<div><ol class="arabic simple">
-<li><p>please <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">cherry-pick</span> <span class="pre">55ae15b</span></code></p></li>
-<li><p>then apply this patch to 5.1.x”.</p></li>
+<li>please <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">cherry-pick</span> <span class="pre">55ae15b</span></code></li>
+<li>then apply this patch to 5.1.x”.</li>
</ol>
</div></blockquote>
</li>
@@ -131,15 +132,13 @@ when sending to skiboot&#64;</p>
<div class="section" id="trees">
<h2>Trees<a class="headerlink" href="#trees" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p><a class="reference external" href="https://github.com/open-power/skiboot/">https://github.com/open-power/skiboot/</a> (or via ssh at <code class="docutils literal notranslate"><span class="pre">git&#64;github.com:open-power/skiboot.git</span></code> )</p>
-<ul>
-<li><p>(branches are skiboot-X.Y.x - e.g. skiboot-5.1.x)</p></li>
+<li><a class="reference external" href="https://github.com/open-power/skiboot/">https://github.com/open-power/skiboot/</a> (or via ssh at <code class="docutils literal notranslate"><span class="pre">git&#64;github.com:open-power/skiboot.git</span></code> )<ul>
+<li>(branches are skiboot-X.Y.x - e.g. skiboot-5.1.x)</li>
</ul>
</li>
-<li><p>Some stable versions may last longer than others</p>
-<ul>
-<li><p>So there may be skiboot-5.1.x and skiboot-5.2.x actively maintained
-and skiboot-5.1.x could possibly outlast skiboot-5.2.x</p></li>
+<li>Some stable versions may last longer than others<ul>
+<li>So there may be skiboot-5.1.x and skiboot-5.2.x actively maintained
+and skiboot-5.1.x could possibly outlast skiboot-5.2.x</li>
</ul>
</li>
</ul>
@@ -147,7 +146,6 @@ and skiboot-5.1.x could possibly outlast skiboot-5.2.x</p></li>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -177,15 +175,17 @@ and skiboot-5.1.x could possibly outlast skiboot-5.2.x</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -202,14 +202,13 @@ and skiboot-5.1.x could possibly outlast skiboot-5.2.x</p></li>
<li class="right" >
<a href="CONTRIBUTING.html" title="Contributing to skiboot"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Skiboot stable tree rules and releases</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/process/versioning.html b/doc/process/versioning.html
index c14f34b..4425961 100644
--- a/doc/process/versioning.html
+++ b/doc/process/versioning.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Versioning Scheme of skiboot &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Versioning Scheme of skiboot &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="stable-skiboot-rules.html" title="Skiboot stable tree rules and releases"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Versioning Scheme of skiboot</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -50,10 +51,10 @@
<p>For roughly the first six months of public life, skiboot just presented a
git SHA1 as a version “number”. This was “user visible” in two places:</p>
<ol class="arabic simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">/sys/firmware/opal/msglog</span></code>
-the familiar <code class="docutils literal notranslate"><span class="pre">SkiBoot</span> <span class="pre">71664fd-dirty</span> <span class="pre">starting...</span></code> message</p></li>
-<li><p>device tree:
-<code class="docutils literal notranslate"><span class="pre">/proc/device-tree/ibm,opal/firmware/git-id</span></code></p></li>
+<li><code class="docutils literal notranslate"><span class="pre">/sys/firmware/opal/msglog</span></code>
+the familiar <code class="docutils literal notranslate"><span class="pre">SkiBoot</span> <span class="pre">71664fd-dirty</span> <span class="pre">starting...</span></code> message</li>
+<li>device tree:
+<code class="docutils literal notranslate"><span class="pre">/proc/device-tree/ibm,opal/firmware/git-id</span></code></li>
</ol>
<p>Builds were also referred to by date and by corresponding PowerKVM release.
Clearly, this was unlikely to be good practice going forward.</p>
@@ -70,21 +71,21 @@ only times you need to do something is if you are a) making an upstream
skiboot release or b) building firmware to release for your platform(s).</p>
<p>OPAL/skiboot has several consumers, for example:</p>
<ul class="simple">
-<li><p>IBM shipping POWER8 systems with an FSP (FW810.XX and future)</p></li>
-<li><p>OpenPower</p></li>
-<li><p>OpenPower partners manufacturing OpenPower systems</p></li>
-<li><p>developers, test and support needing to understand what code a system
-is running</p></li>
+<li>IBM shipping POWER8 systems with an FSP (FW810.XX and future)</li>
+<li>OpenPower</li>
+<li>OpenPower partners manufacturing OpenPower systems</li>
+<li>developers, test and support needing to understand what code a system
+is running</li>
</ul>
<p>and there are going to be several concurrent maintained releases in the wild,
likely build by different teams of people at different companies.</p>
<p>tl;dr; is you’re likely going to see version numbers like this (for the
hypothetical platforms â€ketchup’ and â€mustard’):</p>
<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">skiboot-4.0-ketchup-0</span></code></p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">skiboot-4.0-ketchup-1</span></code></p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">skiboot-4.1-mustard-4</span></code></p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">skiboot-4.1-ketchup-0</span></code></p></li>
+<li><code class="docutils literal notranslate"><span class="pre">skiboot-4.0-ketchup-0</span></code></li>
+<li><code class="docutils literal notranslate"><span class="pre">skiboot-4.0-ketchup-1</span></code></li>
+<li><code class="docutils literal notranslate"><span class="pre">skiboot-4.1-mustard-4</span></code></li>
+<li><code class="docutils literal notranslate"><span class="pre">skiboot-4.1-ketchup-0</span></code></li>
</ul>
<p>If you see <em>extra</em> things on the end of the version, then you’re running
a custom build from a developer
@@ -146,7 +147,6 @@ versioning scheme), otherwise the build will fail.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -176,15 +176,17 @@ versioning scheme), otherwise the build will fail.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -201,14 +203,13 @@ versioning scheme), otherwise the build will fail.</p>
<li class="right" >
<a href="stable-skiboot-rules.html" title="Skiboot stable tree rules and releases"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Versioning Scheme of skiboot</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/index.html b/doc/release-notes/index.html
index 65b76d9..7e60045 100644
--- a/doc/release-notes/index.html
+++ b/doc/release-notes/index.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Release Notes &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Release Notes &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="../opal-api/return-codes.html" title="OPAL API Return Codes"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Release Notes</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -169,6 +170,7 @@
<li class="toctree-l1"><a class="reference internal" href="skiboot-6.0.21.html">skiboot-6.0.21</a></li>
<li class="toctree-l1"><a class="reference internal" href="skiboot-6.0.22.html">skiboot-6.0.22</a></li>
<li class="toctree-l1"><a class="reference internal" href="skiboot-6.0.23.html">skiboot-6.0.23</a></li>
+<li class="toctree-l1"><a class="reference internal" href="skiboot-6.0.24.html">skiboot-6.0.24</a></li>
<li class="toctree-l1"><a class="reference internal" href="skiboot-6.0.3.html">skiboot-6.0.3</a></li>
<li class="toctree-l1"><a class="reference internal" href="skiboot-6.0.4.html">skiboot-6.0.4</a></li>
<li class="toctree-l1"><a class="reference internal" href="skiboot-6.0.5.html">skiboot-6.0.5</a></li>
@@ -206,13 +208,19 @@
<li class="toctree-l1"><a class="reference internal" href="skiboot-6.6.2.html">skiboot-6.6.2</a></li>
<li class="toctree-l1"><a class="reference internal" href="skiboot-6.6.3.html">skiboot-6.6.3</a></li>
<li class="toctree-l1"><a class="reference internal" href="skiboot-6.6.4.html">skiboot-6.6.4</a></li>
+<li class="toctree-l1"><a class="reference internal" href="skiboot-6.6.6.html">skiboot-6.6.6</a></li>
<li class="toctree-l1"><a class="reference internal" href="skiboot-6.7.html">skiboot-6.7</a></li>
+<li class="toctree-l1"><a class="reference internal" href="skiboot-6.7.1.html">skiboot-6.7.1</a></li>
+<li class="toctree-l1"><a class="reference internal" href="skiboot-6.7.2.html">skiboot-6.7.2</a></li>
+<li class="toctree-l1"><a class="reference internal" href="skiboot-6.7.3.html">skiboot-6.7.3</a></li>
+<li class="toctree-l1"><a class="reference internal" href="skiboot-6.8.html">skiboot-6.8</a></li>
+<li class="toctree-l1"><a class="reference internal" href="skiboot-6.8.1.html">skiboot-6.8.1</a></li>
+<li class="toctree-l1"><a class="reference internal" href="skiboot-7.0.html">skiboot-7.0</a></li>
</ul>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -232,15 +240,17 @@
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -257,14 +267,13 @@
<li class="right" >
<a href="../opal-api/return-codes.html" title="OPAL API Return Codes"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Release Notes</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-4.0.html b/doc/release-notes/skiboot-4.0.html
index c6553a4..64a17f0 100644
--- a/doc/release-notes/skiboot-4.0.html
+++ b/doc/release-notes/skiboot-4.0.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot 4.0 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot 4.0 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="index.html" title="Release Notes"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot 4.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,15 +54,14 @@ number.</p>
<p>This release introduced the following OPAL calls:</p>
<blockquote>
<div><ul class="simple">
-<li><p><a class="reference internal" href="../opal-api/opal-ipmi-send-recv-107-108.html#opal-ipmi-send"><span class="std std-ref">OPAL_IPMI_SEND</span></a></p></li>
-<li><p><a class="reference internal" href="../opal-api/opal-ipmi-send-recv-107-108.html#opal-ipmi-recv"><span class="std std-ref">OPAL_IPMI_RECV</span></a></p></li>
-<li><p><a class="reference internal" href="../opal-api/opal-i2c-request-109.html#opal-i2c-request"><span class="std std-ref">OPAL_I2C_REQUEST</span></a></p></li>
+<li><a class="reference internal" href="../opal-api/opal-ipmi-send-recv-107-108.html#opal-ipmi-send"><span class="std std-ref">OPAL_IPMI_SEND</span></a></li>
+<li><a class="reference internal" href="../opal-api/opal-ipmi-send-recv-107-108.html#opal-ipmi-recv"><span class="std std-ref">OPAL_IPMI_RECV</span></a></li>
+<li><a class="reference internal" href="../opal-api/opal-i2c-request-109.html#opal-i2c-request"><span class="std std-ref">OPAL_I2C_REQUEST</span></a></li>
</ul>
</div></blockquote>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -81,15 +81,17 @@ number.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -106,15 +108,14 @@ number.</p>
<li class="right" >
<a href="index.html" title="Release Notes"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot 4.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-4.1.1.html b/doc/release-notes/skiboot-4.1.1.html
index d5b5b4a..0757b47 100644
--- a/doc/release-notes/skiboot-4.1.1.html
+++ b/doc/release-notes/skiboot-4.1.1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot 4.1.1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot 4.1.1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-4.1.html" title="skiboot 4.1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot 4.1.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -49,45 +50,43 @@
<p>Skiboot 4.1 was released 30th January 2015.</p>
<blockquote>
<div><ul class="simple">
-<li><p>fsp: Avoid NULL dereference in case of invalid class_resp bits
-CQ: SW288484</p></li>
-<li><p>Makefile: Support CROSS_COMPILE as well as CROSS</p></li>
-<li><p>Additional unit testing:</p>
-<ul>
-<li><p>Tiny hello_world kernel</p></li>
-<li><p>Will run boot tests with hello_world and (if present) petitboot
-image in the POWER8 Functional simulator (mambo) (if present)</p></li>
-<li><p>Run CCAN unit tests as part of â€make check’</p></li>
-<li><p>Increased testing of PEL code</p></li>
-<li><p>unit test console-log</p></li>
-<li><p>skeleton libc unit tests</p></li>
+<li>fsp: Avoid NULL dereference in case of invalid class_resp bits
+CQ: SW288484</li>
+<li>Makefile: Support CROSS_COMPILE as well as CROSS</li>
+<li>Additional unit testing:<ul>
+<li>Tiny hello_world kernel</li>
+<li>Will run boot tests with hello_world and (if present) petitboot
+image in the POWER8 Functional simulator (mambo) (if present)</li>
+<li>Run CCAN unit tests as part of â€make check’</li>
+<li>Increased testing of PEL code</li>
+<li>unit test console-log</li>
+<li>skeleton libc unit tests</li>
</ul>
</li>
-<li><p>Fix compatible match for palmetto &amp; habanero
+<li>Fix compatible match for palmetto &amp; habanero
The strings should be “tyan,…” not “ibm,…”
-(N/A for IBM systems)</p></li>
-<li><p>i2c: Unify the frequencies to calculate bit rate divisor</p></li>
-<li><p>Unlock rtc cache lock when cache isn’t valid
-Could cause IPL crash on POWER7</p></li>
-<li><p>Initial documentation for OPAL API, ABI and Specification</p></li>
-<li><p>Add Firestone platform</p></li>
-<li><p>Fix crash when one socket wasn’t populated with a CPU
-LTC-Bugzilla: 120562</p></li>
-<li><p>Bug fix in RTC state machine which possibly led to RTC not working</p></li>
-<li><p>Makefile fixes for running with some GCC 4.9 compilers</p></li>
-<li><p>Add device tree properties for pstate vdd and vcs values</p></li>
-<li><p>cpuidle: Add validated metrics for idle states
-Export residency times in device tree</p></li>
-<li><p>Revert “platforms/astbmc: Temporary reboot workaround”
-(N/A for IBM systems)</p></li>
-<li><p>Fix buffer overrun in print_* functions.
-This could cause IPL failures or conceivably other runtime problems</p></li>
+(N/A for IBM systems)</li>
+<li>i2c: Unify the frequencies to calculate bit rate divisor</li>
+<li>Unlock rtc cache lock when cache isn’t valid
+Could cause IPL crash on POWER7</li>
+<li>Initial documentation for OPAL API, ABI and Specification</li>
+<li>Add Firestone platform</li>
+<li>Fix crash when one socket wasn’t populated with a CPU
+LTC-Bugzilla: 120562</li>
+<li>Bug fix in RTC state machine which possibly led to RTC not working</li>
+<li>Makefile fixes for running with some GCC 4.9 compilers</li>
+<li>Add device tree properties for pstate vdd and vcs values</li>
+<li>cpuidle: Add validated metrics for idle states
+Export residency times in device tree</li>
+<li>Revert “platforms/astbmc: Temporary reboot workaround”
+(N/A for IBM systems)</li>
+<li>Fix buffer overrun in print_* functions.
+This could cause IPL failures or conceivably other runtime problems</li>
</ul>
</div></blockquote>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -107,15 +106,17 @@ This could cause IPL failures or conceivably other runtime problems</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -132,15 +133,14 @@ This could cause IPL failures or conceivably other runtime problems</p></li>
<li class="right" >
<a href="skiboot-4.1.html" title="skiboot 4.1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot 4.1.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-4.1.html b/doc/release-notes/skiboot-4.1.html
index 5f1f983..cae3ea8 100644
--- a/doc/release-notes/skiboot-4.1.html
+++ b/doc/release-notes/skiboot-4.1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot 4.1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot 4.1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-4.0.html" title="skiboot 4.0"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot 4.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,49 +53,45 @@ mailing lists.</p>
<p>Changes include:</p>
<blockquote>
<div><ul class="simple">
-<li><p>We now build with -fstack-protector and -Werror</p></li>
-<li><p>Stack checking extensions when built with STACK_CHECK=1</p></li>
-<li><p>Reduced stack usage in some areas, -Wstack-usage=1024 now.</p>
-<ul>
-<li><p>Some functions could use 2kb stack, now all are &lt;1kb</p></li>
+<li>We now build with -fstack-protector and -Werror</li>
+<li>Stack checking extensions when built with STACK_CHECK=1</li>
+<li>Reduced stack usage in some areas, -Wstack-usage=1024 now.<ul>
+<li>Some functions could use 2kb stack, now all are &lt;1kb</li>
</ul>
</li>
-<li><p>Unsafe libc functions such as sprintf() have been removed</p></li>
-<li><p>Symbolic backtraces</p></li>
-<li><p>expose skiboot symbol map to OS (via device-tree)</p></li>
-<li><p>removed machine check interrupt patching in OPAL</p></li>
-<li><p>occ/hbrt: Call stopOCC() for implementing reset OCC command from FSP</p></li>
-<li><p>occ: Fix the low level ACK message sent to FSP on receiving {RESET/LOAD}_OCC</p></li>
-<li><p>hardening to errors of various FSP code</p>
-<ul>
-<li><p>fsp: Avoid NULL dereference in case of invalid class_resp bits-
-abort if device tree parsing fails</p></li>
-<li><p>FSP: Validate fsp_msg in fsp_queue_msg</p></li>
-<li><p>fsp-elog: Add various NULL checks</p></li>
+<li>Unsafe libc functions such as sprintf() have been removed</li>
+<li>Symbolic backtraces</li>
+<li>expose skiboot symbol map to OS (via device-tree)</li>
+<li>removed machine check interrupt patching in OPAL</li>
+<li>occ/hbrt: Call stopOCC() for implementing reset OCC command from FSP</li>
+<li>occ: Fix the low level ACK message sent to FSP on receiving {RESET/LOAD}_OCC</li>
+<li>hardening to errors of various FSP code<ul>
+<li>fsp: Avoid NULL dereference in case of invalid class_resp bits-
+abort if device tree parsing fails</li>
+<li>FSP: Validate fsp_msg in fsp_queue_msg</li>
+<li>fsp-elog: Add various NULL checks</li>
</ul>
</li>
-<li><p>Finessing of when to use error log vs prerror()</p></li>
-<li><p>More i2c work</p></li>
-<li><p>Can now run under Mambo simulator (see external/mambo/skiboot.tcl)
-(commonly known as “POWER8 Functional Simulator”)</p></li>
-<li><p>Document skiboot versioning scheme</p></li>
-<li><p>opal: Handle more TFAC errors.</p>
-<ul>
-<li><p>TB_RESIDUE_ERR, FW_CONTROL_ERR and CHIP_TOD_PARITY_ERR</p></li>
+<li>Finessing of when to use error log vs prerror()</li>
+<li>More i2c work</li>
+<li>Can now run under Mambo simulator (see external/mambo/skiboot.tcl)
+(commonly known as “POWER8 Functional Simulator”)</li>
+<li>Document skiboot versioning scheme</li>
+<li>opal: Handle more TFAC errors.<ul>
+<li>TB_RESIDUE_ERR, FW_CONTROL_ERR and CHIP_TOD_PARITY_ERR</li>
</ul>
</li>
-<li><p>ipmi: populate FRU data</p></li>
-<li><p>rtc: Add a generic rtc cache</p></li>
-<li><p>ipmi/rtc: use generic cache</p></li>
-<li><p>Error Logging backend for bmc based machines</p></li>
-<li><p>PSI: Drive link down on HIR</p></li>
-<li><p>occ: Fix clearing of OCC interrupt on remote fix</p></li>
+<li>ipmi: populate FRU data</li>
+<li>rtc: Add a generic rtc cache</li>
+<li>ipmi/rtc: use generic cache</li>
+<li>Error Logging backend for bmc based machines</li>
+<li>PSI: Drive link down on HIR</li>
+<li>occ: Fix clearing of OCC interrupt on remote fix</li>
</ul>
</div></blockquote>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -114,15 +111,17 @@ abort if device tree parsing fails</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -139,15 +138,14 @@ abort if device tree parsing fails</p></li>
<li class="right" >
<a href="skiboot-4.0.html" title="skiboot 4.0"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot 4.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.0.html b/doc/release-notes/skiboot-5.0.html
index e71f4d0..a9afd9f 100644
--- a/doc/release-notes/skiboot-5.0.html
+++ b/doc/release-notes/skiboot-5.0.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot 5.0 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot 5.0 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-4.1.1.html" title="skiboot 4.1.1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot 5.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -50,97 +51,116 @@
<p>Changes in 5.0 (since rc3):</p>
<blockquote>
<div><ul class="simple">
-<li><p>Fix chip id for nx coprocessors.</p></li>
-<li><p>hw/ipmi: Fix FW Boot Progress sensor</p></li>
-<li><p>bt: Add a temporary workaround for bmc dropping messages</p></li>
-<li><p>FSP/CUPD: Fix lock issue</p></li>
+<li>Fix chip id for nx coprocessors.</li>
+<li>hw/ipmi: Fix FW Boot Progress sensor</li>
+<li>bt: Add a temporary workaround for bmc dropping messages</li>
+<li>FSP/CUPD: Fix lock issue</li>
</ul>
</div></blockquote>
<p>Changes in rc3 (since rc2):</p>
<blockquote>
<div><ul class="simple">
-<li><p>add support for cec_power_down on mambo</p></li>
-<li><p>external/opal-prd: Use link register for cross-endian branch</p></li>
-<li><p>opal header file rework, Linux and skiboot now very closely match (API
-in opal-api.h)</p></li>
-<li><p>libflash: don’t use the low level interface if it doesn’t exist</p></li>
-<li><p>libflash/file: add file abstraction for libflash</p></li>
-<li><p>external: create a GUARD partition parsing utility</p></li>
+<li>add support for cec_power_down on mambo</li>
+<li>external/opal-prd: Use link register for cross-endian branch</li>
+<li>opal header file rework, Linux and skiboot now very closely match (API
+in opal-api.h)</li>
+<li>libflash: don’t use the low level interface if it doesn’t exist</li>
+<li>libflash/file: add file abstraction for libflash</li>
+<li>external: create a GUARD partition parsing utility</li>
</ul>
</div></blockquote>
<p>Changes in rc2 (since rc1):</p>
<blockquote>
<div><ul class="simple">
-<li><p>opal: Fix an issue where partial LID load causes opal to hang.</p></li>
-<li><p>nx: use proc_gen instead of param</p></li>
-<li><p>use chip id for NX engine Coproc Instance num</p></li>
-<li><p>Fix (hopefully) missing dot symbols in skiboot.map</p></li>
-<li><p>exceptions: Catch exceptions at boot time</p></li>
-<li><p>exceptions: Remove deprecated exception patching stuff</p></li>
-<li><p>mambo: Make mambo_utils.tcl optional</p></li>
-<li><p>mambo: Exit mambo when the simulation is stopped</p></li>
-<li><p>add NX register defines</p></li>
-<li><p>set NX crb input queues to 842 only</p></li>
-<li><p>core: Catch attempts to branch through a NULL pointer</p></li>
-<li><p>plat/firestone: Add missing platform hooks</p></li>
-<li><p>plat/firestone: Add missing platform hooks</p></li>
-<li><p>elog: Don’t call uninitialized platform elog_commit</p></li>
-<li><p>external/opal-prd: Use “official” switch-endian syscall</p></li>
-<li><p>hw/ipmi: Rework sensors and fix boot count sensor</p></li>
+<li>opal: Fix an issue where partial LID load causes opal to hang.</li>
+<li>nx: use proc_gen instead of param</li>
+<li>use chip id for NX engine Coproc Instance num</li>
+<li>Fix (hopefully) missing dot symbols in skiboot.map</li>
+<li>exceptions: Catch exceptions at boot time</li>
+<li>exceptions: Remove deprecated exception patching stuff</li>
+<li>mambo: Make mambo_utils.tcl optional</li>
+<li>mambo: Exit mambo when the simulation is stopped</li>
+<li>add NX register defines</li>
+<li>set NX crb input queues to 842 only</li>
+<li>core: Catch attempts to branch through a NULL pointer</li>
+<li>plat/firestone: Add missing platform hooks</li>
+<li>plat/firestone: Add missing platform hooks</li>
+<li>elog: Don’t call uninitialized platform elog_commit</li>
+<li>external/opal-prd: Use “official” switch-endian syscall</li>
+<li>hw/ipmi: Rework sensors and fix boot count sensor</li>
</ul>
</div></blockquote>
<p>Changes in rc1 (since 4.1.1):</p>
<p>General:</p>
<blockquote>
<div><ul>
-<li><p>big OPAL API documentation updates
+<li><p class="first">big OPAL API documentation updates
We now document around 19 OPAL calls. There’s still ~100 left to doc
-though :)</p></li>
-<li><p>skiboot can load FreeBSD kernel payload (thanks to Nathan Whitehorn)</p></li>
-<li><p>You can now run sparse by setting C=1 when building</p></li>
-<li><p>PSI: Revert the timeout for PSI link recovery to architected value
-now 30mins (prev 15)</p></li>
-<li><p>cpuidle: Add validated metrics for idle states</p></li>
-<li><p>core/flash: Add flash API
-OPAL_FLASH_(READ|WRITE|ERASE)</p></li>
-<li><p>capi: Dynamically calculate which CAPP port to use
-no longer hardwired to PHB0</p></li>
-<li><p>vpd: Use slca parent-child relationship to create vpd tree</p></li>
-<li><p>opal: Do not overwrite same HMI event for multiple HMI errors.
-Now Linux will get a HMI event for each HMI error</p></li>
-<li><p>HMI event v2 now includes information about checkstop</p></li>
-<li><p>HMI improvements, handle more conditions gracefully:</p>
+though :)</p>
+</li>
+<li><p class="first">skiboot can load FreeBSD kernel payload (thanks to Nathan Whitehorn)</p>
+</li>
+<li><p class="first">You can now run sparse by setting C=1 when building</p>
+</li>
+<li><p class="first">PSI: Revert the timeout for PSI link recovery to architected value
+now 30mins (prev 15)</p>
+</li>
+<li><p class="first">cpuidle: Add validated metrics for idle states</p>
+</li>
+<li><p class="first">core/flash: Add flash API
+OPAL_FLASH_(READ|WRITE|ERASE)</p>
+</li>
+<li><p class="first">capi: Dynamically calculate which CAPP port to use
+no longer hardwired to PHB0</p>
+</li>
+<li><p class="first">vpd: Use slca parent-child relationship to create vpd tree</p>
+</li>
+<li><p class="first">opal: Do not overwrite same HMI event for multiple HMI errors.
+Now Linux will get a HMI event for each HMI error</p>
+</li>
+<li><p class="first">HMI event v2 now includes information about checkstop</p>
+</li>
+<li><p class="first">HMI improvements, handle more conditions gracefully:</p>
<ul class="simple">
-<li><p>TB residue error</p></li>
-<li><p>TFMR firmware control error</p></li>
-<li><p>TFMR parity</p></li>
-<li><p>TFMR HDEC parity error</p></li>
-<li><p>TFMR DEC parity error</p></li>
-<li><p>TFMR SPURR/PURR parity error</p></li>
-<li><p>TB residue and HDEC parity HMI errors on split core</p></li>
+<li>TB residue error</li>
+<li>TFMR firmware control error</li>
+<li>TFMR parity</li>
+<li>TFMR HDEC parity error</li>
+<li>TFMR DEC parity error</li>
+<li>TFMR SPURR/PURR parity error</li>
+<li>TB residue and HDEC parity HMI errors on split core</li>
</ul>
</li>
-<li><p>hostservices: Cache lids prior to first load request</p></li>
-<li><p>Warn when pollers are called with a lock held
+<li><p class="first">hostservices: Cache lids prior to first load request</p>
+</li>
+<li><p class="first">Warn when pollers are called with a lock held
and keep track of lock depth.</p>
<p><strong>NOTE:</strong> This means we will get backtraces in skiboot msglog on FSP machines
This is a KNOWN ISSUE and is largely harmless.
There’s still a couple that we haven’t yet cleaned, these
messages can be thought of as a TODO list for developers.</p>
</li>
-<li><p>Don’t run pollers in time_wait if lock held</p></li>
-<li><p>pci: Don’t hang if we have only one CPU</p></li>
-<li><p>Detect recursive poller entry</p></li>
-<li><p>General cleanup</p></li>
-<li><p>Cleanup of opal.h so that we can have Linux and skiboot match</p></li>
-<li><p>add sparse annotations to opal.h</p></li>
-<li><p>Platform hooks for loading and preloading resources (LIDs)
+<li><p class="first">Don’t run pollers in time_wait if lock held</p>
+</li>
+<li><p class="first">pci: Don’t hang if we have only one CPU</p>
+</li>
+<li><p class="first">Detect recursive poller entry</p>
+</li>
+<li><p class="first">General cleanup</p>
+</li>
+<li><p class="first">Cleanup of opal.h so that we can have Linux and skiboot match</p>
+</li>
+<li><p class="first">add sparse annotations to opal.h</p>
+</li>
+<li><p class="first">Platform hooks for loading and preloading resources (LIDs)
This lays the groundwork for cutting 4-20 seconds off boot in a
-future skiboot release.</p></li>
-<li><p>Fix potential race when clearing OCC interrupt status</p></li>
-<li><p>Add platform operation for reading sensors</p>
+future skiboot release.</p>
+</li>
+<li><p class="first">Fix potential race when clearing OCC interrupt status</p>
+</li>
+<li><p class="first">Add platform operation for reading sensors</p>
<ul class="simple">
-<li><p>add support to read core and memory buffer temperatures</p></li>
+<li>add support to read core and memory buffer temperatures</li>
</ul>
</li>
</ul>
@@ -148,67 +168,66 @@ future skiboot release.</p></li>
<p>Mambo/POWER8 Functional Simulator:</p>
<blockquote>
<div><ul class="simple">
-<li><p>Replace is_mambo_chip() with a better quirks mechanism.</p></li>
-<li><p>Don’t hang if we only have one CPU and PCI.</p></li>
+<li>Replace is_mambo_chip() with a better quirks mechanism.</li>
+<li>Don’t hang if we only have one CPU and PCI.</li>
</ul>
</div></blockquote>
<p>BMC systems:</p>
<blockquote>
<div><ul class="simple">
-<li><p>BMC can load payload from flash</p></li>
-<li><p>IPMI on BMC systems: graceful poweroff and reboot</p></li>
-<li><p>IPMI on BMC systems: watchdog timer support</p></li>
-<li><p>IPMI on BMC systems: PNOR locking</p></li>
-<li><p>Support for IPMI progress sensor</p></li>
-<li><p>IPMI boot count sensor</p></li>
-<li><p>capi: Rework microcode flash download and CAPP upload
-load microcode on non-fsp systems</p></li>
-<li><p>NEW opal-prd userspace tool that handles PRD on non-FSP systems.
-and OPAL PRD calls to support it.</p></li>
-<li><p>Improvements to opal-prd, libflash, and ipmi</p></li>
-<li><p>ECC support in libflash</p></li>
-<li><p>Load CAPI micro code, enabling CAPI on OpenPower systems.</p></li>
-<li><p>Dynamically calculate which CAPP port to use, don’t hardcode to PHB0</p></li>
-<li><p>memboot flash backend</p></li>
+<li>BMC can load payload from flash</li>
+<li>IPMI on BMC systems: graceful poweroff and reboot</li>
+<li>IPMI on BMC systems: watchdog timer support</li>
+<li>IPMI on BMC systems: PNOR locking</li>
+<li>Support for IPMI progress sensor</li>
+<li>IPMI boot count sensor</li>
+<li>capi: Rework microcode flash download and CAPP upload
+load microcode on non-fsp systems</li>
+<li>NEW opal-prd userspace tool that handles PRD on non-FSP systems.
+and OPAL PRD calls to support it.</li>
+<li>Improvements to opal-prd, libflash, and ipmi</li>
+<li>ECC support in libflash</li>
+<li>Load CAPI micro code, enabling CAPI on OpenPower systems.</li>
+<li>Dynamically calculate which CAPP port to use, don’t hardcode to PHB0</li>
+<li>memboot flash backend</li>
</ul>
</div></blockquote>
<p>POWER8</p>
<blockquote>
<div><ul class="simple">
-<li><p>add nx-842 coproc support</p></li>
+<li>add nx-842 coproc support</li>
</ul>
</div></blockquote>
<p>FSP systems:</p>
<blockquote>
<div><ul class="simple">
-<li><p>Make abort() update sp attn area (like assert does)
-On FSP systems this gives better error logs/dumps when abort() is hit</p></li>
-<li><p>FSP/LEDS: Many improvements and bug fixes</p></li>
-<li><p>LED support for FSP machines
-Adds OPAL_LEDS_(GET|SET)_INDICATOR and device-tree bindings</p></li>
-<li><p>Refactor of fsp-rtc</p></li>
-<li><p>OCC loading fixes, including possible race condition where we would
-fail to IPL.</p></li>
+<li>Make abort() update sp attn area (like assert does)
+On FSP systems this gives better error logs/dumps when abort() is hit</li>
+<li>FSP/LEDS: Many improvements and bug fixes</li>
+<li>LED support for FSP machines
+Adds OPAL_LEDS_(GET|SET)_INDICATOR and device-tree bindings</li>
+<li>Refactor of fsp-rtc</li>
+<li>OCC loading fixes, including possible race condition where we would
+fail to IPL.</li>
</ul>
</div></blockquote>
<p>POWER7</p>
<blockquote>
<div><ul class="simple">
-<li><p>Fix unsupported return code of OPAL_(UN)REGISTER_DUMP_REGION on P7</p></li>
-<li><p>occ: Don’t do bad XSCOMs on P7
+<li>Fix unsupported return code of OPAL_(UN)REGISTER_DUMP_REGION on P7</li>
+<li>occ: Don’t do bad XSCOMs on P7
The OCC interrupt register only exists on P8, accessing it on P7 causes
-not only error logs but also causes PRD to eventually gard chips.</p></li>
-<li><p>cpu: Handle opal_reinit_cpus() more gracefully on P7
-no longer generate error logs</p></li>
-<li><p>libflash updates for openpower</p></li>
-<li><p>misc code cleanup</p></li>
-<li><p>add nx-842 coproc support</p></li>
+not only error logs but also causes PRD to eventually gard chips.</li>
+<li>cpu: Handle opal_reinit_cpus() more gracefully on P7
+no longer generate error logs</li>
+<li>libflash updates for openpower</li>
+<li>misc code cleanup</li>
+<li>add nx-842 coproc support</li>
</ul>
</div></blockquote>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -228,15 +247,17 @@ no longer generate error logs</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -253,15 +274,14 @@ no longer generate error logs</p></li>
<li class="right" >
<a href="skiboot-4.1.1.html" title="skiboot 4.1.1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot 5.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.0-beta1.html b/doc/release-notes/skiboot-5.1.0-beta1.html
index cd6e6b0..29b6b0b 100644
--- a/doc/release-notes/skiboot-5.1.0-beta1.html
+++ b/doc/release-notes/skiboot-5.1.0-beta1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.0-beta1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.0-beta1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.0.html" title="skiboot-5.1.0"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.0-beta1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -55,63 +56,56 @@ skiboot-5.0.5.</p>
<h2>New features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<p>Over skiboot-5.0, the following features have been added:</p>
<ul class="simple">
-<li><p>Centaur i2c support</p></li>
-<li><p>Add Naples chip (CPU, PHB, LPC serial interrupts) support</p></li>
-<li><p>Added qemu platform</p></li>
-<li><p>improvements to FSI error handling</p></li>
-<li><p>improvements in chip TOD failover (some only on FSP systems)</p></li>
-<li><p>Set Relative Priority Register (RPR) to recommended value</p>
-<ul>
-<li><p>this affects thread priority in SMT modes</p></li>
+<li>Centaur i2c support</li>
+<li>Add Naples chip (CPU, PHB, LPC serial interrupts) support</li>
+<li>Added qemu platform</li>
+<li>improvements to FSI error handling</li>
+<li>improvements in chip TOD failover (some only on FSP systems)</li>
+<li>Set Relative Priority Register (RPR) to recommended value<ul>
+<li>this affects thread priority in SMT modes</li>
</ul>
</li>
-<li><p>greatly reduce memory consumption by CPU stacks for non-present CPUs</p>
-<ul>
-<li><p>Previously we would reserve enough memory for max PIR for each CPU type.</p></li>
-<li><p>This fix frees up 77MB of RAM on a typical P8 system.</p></li>
+<li>greatly reduce memory consumption by CPU stacks for non-present CPUs<ul>
+<li>Previously we would reserve enough memory for max PIR for each CPU type.</li>
+<li>This fix frees up 77MB of RAM on a typical P8 system.</li>
</ul>
</li>
-<li><p>increased OPAL API documentation</p></li>
-<li><p>Asynchronous preloading of resources from FSP/flash</p>
-<ul>
-<li><p>improves boot time on some systems</p></li>
+<li>increased OPAL API documentation</li>
+<li>Asynchronous preloading of resources from FSP/flash<ul>
+<li>improves boot time on some systems</li>
</ul>
</li>
-<li><p>Basic Garrison platform support</p></li>
-<li><p>Add Mambo platform (P8 Functional Simulator, systemsim)</p>
-<ul>
-<li><p>includes fake NVRAM, RTC</p></li>
+<li>Basic Garrison platform support</li>
+<li>Add Mambo platform (P8 Functional Simulator, systemsim)<ul>
+<li>includes fake NVRAM, RTC</li>
</ul>
</li>
-<li><p>Support building with GCOV, increasing memory for skiboot binary to 2MB</p>
-<ul>
-<li><p>includes boot code coverage testing</p></li>
+<li>Support building with GCOV, increasing memory for skiboot binary to 2MB<ul>
+<li>includes boot code coverage testing</li>
</ul>
</li>
-<li><p>Increased skiboot HEAP size.</p>
-<ul>
-<li><p>We are not aware of any system where you would run out, but on large
-systems it was getting closer than we liked.</p></li>
+<li>Increased skiboot HEAP size.<ul>
+<li>We are not aware of any system where you would run out, but on large
+systems it was getting closer than we liked.</li>
</ul>
</li>
-<li><p>add boot_tests.sh for helping automate boot testing on FSP and BMC machines</p></li>
-<li><p>Versioning of pflash and gard utilities to help Linux (or other OS)
-distributions with packaging.</p></li>
-<li><p>OCC throttle status messages to host</p></li>
-<li><p>CAPP timebase sync (“ibm,capp-timebase-sync” in DT to indicate CAPP timebase
-was synced by OPAL)</p></li>
+<li>add boot_tests.sh for helping automate boot testing on FSP and BMC machines</li>
+<li>Versioning of pflash and gard utilities to help Linux (or other OS)
+distributions with packaging.</li>
+<li>OCC throttle status messages to host</li>
+<li>CAPP timebase sync (“ibm,capp-timebase-sync” in DT to indicate CAPP timebase
+was synced by OPAL)</li>
</ul>
</div>
<div class="section" id="new-features-for-fsp-based-machines">
<h2>New features for FSP based machines<a class="headerlink" href="#new-features-for-fsp-based-machines" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>in-band IPMI support</p></li>
-<li><p>ethernet adaptor location codes</p></li>
-<li><p>add DIMM frequency information to device tree</p></li>
-<li><p>improvements in FSP error log code paths</p></li>
-<li><p>fix some boot time memory leaks</p>
-<ul>
-<li><p>harmless to end user</p></li>
+<li>in-band IPMI support</li>
+<li>ethernet adaptor location codes</li>
+<li>add DIMM frequency information to device tree</li>
+<li>improvements in FSP error log code paths</li>
+<li>fix some boot time memory leaks<ul>
+<li>harmless to end user</li>
</ul>
</li>
</ul>
@@ -119,30 +113,28 @@ was synced by OPAL)</p></li>
<div class="section" id="new-features-for-ami-bmc-based-machines">
<h2>New features for AMI BMC based machines<a class="headerlink" href="#new-features-for-ami-bmc-based-machines" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>PCIe power workaround for K80</p></li>
-<li><p>Added support for Macronix 128Mbit flash chips</p></li>
-<li><p>Initial PRD support for Firestone platform</p></li>
-<li><p>improved reliability when BMC reboots</p></li>
+<li>PCIe power workaround for K80</li>
+<li>Added support for Macronix 128Mbit flash chips</li>
+<li>Initial PRD support for Firestone platform</li>
+<li>improved reliability when BMC reboots</li>
</ul>
</div>
<div class="section" id="bug-fixes">
<h2>Bug Fixes<a class="headerlink" href="#bug-fixes" title="Permalink to this headline">¶</a></h2>
<p>The following bugs have been fixed:</p>
<ul class="simple">
-<li><p>Increase PHB3 timeout for electrical links coming up to 2 seconds.</p>
-<ul>
-<li><p>fixes issues with some Mellanox cards</p></li>
+<li>Increase PHB3 timeout for electrical links coming up to 2 seconds.<ul>
+<li>fixes issues with some Mellanox cards</li>
</ul>
</li>
-<li><p>Hang in opal_reinit_cpus() that could prevent kdump from functioning</p></li>
-<li><p>PHB3: fix crash in phb3_init</p></li>
-<li><p>PHB3: fix crash with fenced PHB in phb3_init_hw()</p></li>
-<li><p>Fix bugs in hw/bt.c (interface for IPMI on BMC machines) that could possibly
-lead to a crash (dereferencing invalid address, deadlock)</p></li>
-<li><p>ipmi/sel: fix use-after-free</p></li>
-<li><p>Bug fixes in EEH handling</p>
-<ul>
-<li><p>opal_pci_next_error() cleared OPAL_EVENT_PCI_ERROR unconditionally, possibly leading to missed errors.</p></li>
+<li>Hang in opal_reinit_cpus() that could prevent kdump from functioning</li>
+<li>PHB3: fix crash in phb3_init</li>
+<li>PHB3: fix crash with fenced PHB in phb3_init_hw()</li>
+<li>Fix bugs in hw/bt.c (interface for IPMI on BMC machines) that could possibly
+lead to a crash (dereferencing invalid address, deadlock)</li>
+<li>ipmi/sel: fix use-after-free</li>
+<li>Bug fixes in EEH handling<ul>
+<li>opal_pci_next_error() cleared OPAL_EVENT_PCI_ERROR unconditionally, possibly leading to missed errors.</li>
</ul>
</li>
</ul>
@@ -150,17 +142,18 @@ lead to a crash (dereferencing invalid address, deadlock)</p></li>
<div class="section" id="fsp-specific-bugs-fixed">
<h2>FSP-specific bugs fixed:<a class="headerlink" href="#fsp-specific-bugs-fixed" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>(also fixed in skiboot-5.0.2) Fix race in firenze_get_slot_info() leading to
+<li><p class="first">(also fixed in skiboot-5.0.2) Fix race in firenze_get_slot_info() leading to
assert() with many PCI cards</p>
<p>With many PCI cards, we’d hit a race where calls to
firenze_add_pcidev_to_fsp_inventory would step on each other leading to
memory corruption and finally an assert() in the allocator being hit
during boot.</p>
</li>
-<li><p>PCIe power workaround for K80 cards</p></li>
-<li><p>/ibm,opal/led renamed to /ibm,opal/leds in Device Tree</p>
+<li><p class="first">PCIe power workaround for K80 cards</p>
+</li>
+<li><p class="first">/ibm,opal/led renamed to /ibm,opal/leds in Device Tree</p>
<ul class="simple">
-<li><p>compatible change as no FSP based systems shipped with skiboot-5.0</p></li>
+<li>compatible change as no FSP based systems shipped with skiboot-5.0</li>
</ul>
</li>
</ul>
@@ -168,31 +161,28 @@ during boot.</p>
<div class="section" id="general-improvements">
<h2>General improvements:<a class="headerlink" href="#general-improvements" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>don’t run pollers on non-boot CPUs in time_wait</p></li>
-<li><p>improvements to opal-prd, pflash, libflash</p>
-<ul>
-<li><p>including new blocklevel interface in libflash</p></li>
+<li>don’t run pollers on non-boot CPUs in time_wait</li>
+<li>improvements to opal-prd, pflash, libflash<ul>
+<li>including new blocklevel interface in libflash</li>
</ul>
</li>
-<li><p>many minor fixes to issues found by static analysis</p></li>
-<li><p>improvements in FSP error log code paths</p></li>
-<li><p>code cleanup in memory allocator</p></li>
-<li><p>Don’t expose individual nvram partitions in the device tree, just the whole
-flash device.</p></li>
-<li><p>build improvements for building on ppc64el host</p></li>
-<li><p>improvements in cpu_relax() for idle threads, needed for GCOV on large
-machines.</p></li>
-<li><p>Optimized memset() for POWER8, greatly reducing number of instructions
-executed for boot, which helps boot time in simulators.</p></li>
-<li><p>Major improvements in hello_world kernel</p>
-<ul>
-<li><p>Bloat of huge 17 instruction test case reduced to 10.</p></li>
+<li>many minor fixes to issues found by static analysis</li>
+<li>improvements in FSP error log code paths</li>
+<li>code cleanup in memory allocator</li>
+<li>Don’t expose individual nvram partitions in the device tree, just the whole
+flash device.</li>
+<li>build improvements for building on ppc64el host</li>
+<li>improvements in cpu_relax() for idle threads, needed for GCOV on large
+machines.</li>
+<li>Optimized memset() for POWER8, greatly reducing number of instructions
+executed for boot, which helps boot time in simulators.</li>
+<li>Major improvements in hello_world kernel<ul>
+<li>Bloat of huge 17 instruction test case reduced to 10.</li>
</ul>
</li>
-<li><p>Disable bust_locks for general calls of abort()</p>
-<ul>
-<li><p>Should enable better error messages during abort() when other users of
-LPC bus exist (e.g. flash)</p></li>
+<li>Disable bust_locks for general calls of abort()<ul>
+<li>Should enable better error messages during abort() when other users of
+LPC bus exist (e.g. flash)</li>
</ul>
</li>
</ul>
@@ -203,417 +193,417 @@ LPC bus exist (e.g. flash)</p></li>
3 employers found
A total of 13696 lines added, 2754 removed (delta 10942)</p>
<p>Developers with the most changesets</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 70%" />
-<col style="width: 30%" />
+<col width="70%" />
+<col width="30%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>Changesets</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">Changesets</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>101 (31.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>101 (31.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>32 (10.0%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>32 (10.0%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>31 (9.7%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>31 (9.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Vasant Hegde</p></td>
-<td><p>28 (8.7%)</p></td>
+<tr class="row-odd"><td>Vasant Hegde</td>
+<td>28 (8.7%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>27 (8.4%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>27 (8.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Kamalesh Babulal</p></td>
-<td><p>19 (5.9%)</p></td>
+<tr class="row-odd"><td>Kamalesh Babulal</td>
+<td>19 (5.9%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>12 (3.7%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>12 (3.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>12 (3.7%)</p></td>
+<tr class="row-odd"><td>Mahesh Salgaonkar</td>
+<td>12 (3.7%)</td>
</tr>
-<tr class="row-even"><td><p>Neelesh Gupta</p></td>
-<td><p>8 (2.5%)</p></td>
+<tr class="row-even"><td>Neelesh Gupta</td>
+<td>8 (2.5%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>8 (2.5%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>8 (2.5%)</td>
</tr>
-<tr class="row-even"><td><p>Joel Stanley</p></td>
-<td><p>8 (2.5%)</p></td>
+<tr class="row-even"><td>Joel Stanley</td>
+<td>8 (2.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>8 (2.5%)</p></td>
+<tr class="row-odd"><td>Ananth N Mavinakayanahalli</td>
+<td>8 (2.5%)</td>
</tr>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>6 (1.9%)</p></td>
+<tr class="row-even"><td>Gavin Shan</td>
+<td>6 (1.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>6 (1.9%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>6 (1.9%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Bonnard</p></td>
-<td><p>3 (0.9%)</p></td>
+<tr class="row-even"><td>Frederic Bonnard</td>
+<td>3 (0.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Vipin K Parashar</p></td>
-<td><p>2 (0.6%)</p></td>
+<tr class="row-odd"><td>Vipin K Parashar</td>
+<td>2 (0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>2 (0.6%)</p></td>
+<tr class="row-even"><td>Vaidyanathan Srinivasan</td>
+<td>2 (0.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Philippe Bergheaud</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Philippe Bergheaud</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Daniel Axtens</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Daniel Axtens</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Hari Bathini</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Hari Bathini</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Ellerman</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Michael Ellerman</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Andrei Warkentin</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Andrei Warkentin</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Dan Horák</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Dan Horák</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Anton Blanchard</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Anton Blanchard</td>
+<td>1 (0.3%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most changed lines</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 67%" />
-<col style="width: 33%" />
+<col width="67%" />
+<col width="33%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>Changed Lines</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">Changed Lines</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>3987 (27.9%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>3987 (27.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>3811 (26.6%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>3811 (26.6%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>1918 (13.4%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>1918 (13.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Jeremy Kerr</p></td>
-<td><p>1307 (9.1%)</p></td>
+<tr class="row-odd"><td>Jeremy Kerr</td>
+<td>1307 (9.1%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>886 (6.2%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>886 (6.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Vasant Hegde</p></td>
-<td><p>764 (5.3%)</p></td>
+<tr class="row-odd"><td>Vasant Hegde</td>
+<td>764 (5.3%)</td>
</tr>
-<tr class="row-even"><td><p>Neelesh Gupta</p></td>
-<td><p>473 (3.3%)</p></td>
+<tr class="row-even"><td>Neelesh Gupta</td>
+<td>473 (3.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Vipin K Parashar</p></td>
-<td><p>176 (1.2%)</p></td>
+<tr class="row-odd"><td>Vipin K Parashar</td>
+<td>176 (1.2%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>175 (1.2%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>175 (1.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Philippe Bergheaud</p></td>
-<td><p>171 (1.2%)</p></td>
+<tr class="row-odd"><td>Philippe Bergheaud</td>
+<td>171 (1.2%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>165 (1.2%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>165 (1.2%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>89 (0.6%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>89 (0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Bonnard</p></td>
-<td><p>78 (0.5%)</p></td>
+<tr class="row-even"><td>Frederic Bonnard</td>
+<td>78 (0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>73 (0.5%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>73 (0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Joel Stanley</p></td>
-<td><p>65 (0.5%)</p></td>
+<tr class="row-even"><td>Joel Stanley</td>
+<td>65 (0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Kamalesh Babulal</p></td>
-<td><p>63 (0.4%)</p></td>
+<tr class="row-odd"><td>Kamalesh Babulal</td>
+<td>63 (0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>47 (0.3%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>47 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Daniel Axtens</p></td>
-<td><p>31 (0.2%)</p></td>
+<tr class="row-odd"><td>Daniel Axtens</td>
+<td>31 (0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>22 (0.2%)</p></td>
+<tr class="row-even"><td>Ananth N Mavinakayanahalli</td>
+<td>22 (0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Anton Blanchard</p></td>
-<td><p>3 (0.0%)</p></td>
+<tr class="row-odd"><td>Anton Blanchard</td>
+<td>3 (0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>2 (0.0%)</p></td>
+<tr class="row-even"><td>Vaidyanathan Srinivasan</td>
+<td>2 (0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Hari Bathini</p></td>
-<td><p>2 (0.0%)</p></td>
+<tr class="row-odd"><td>Hari Bathini</td>
+<td>2 (0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Ellerman</p></td>
-<td><p>1 (0.0%)</p></td>
+<tr class="row-even"><td>Michael Ellerman</td>
+<td>1 (0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrei Warkentin</p></td>
-<td><p>1 (0.0%)</p></td>
+<tr class="row-odd"><td>Andrei Warkentin</td>
+<td>1 (0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Dan Horák</p></td>
-<td><p>1 (0.0%)</p></td>
+<tr class="row-even"><td>Dan Horák</td>
+<td>1 (0.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most lines removed:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 64%" />
-<col style="width: 36%" />
+<col width="64%" />
+<col width="36%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Vipin K Parashar</p></td>
-<td><p>105 (3.8%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Vipin K Parashar</td>
+<td>105 (3.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>24 (0.9%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>24 (0.9%)</td>
</tr>
-<tr class="row-even"><td><p>Hari Bathini</p></td>
-<td><p>1 (0.0%)</p></td>
+<tr class="row-even"><td>Hari Bathini</td>
+<td>1 (0.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most signoffs (total 214)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 64%" />
-<col style="width: 36%" />
+<col width="64%" />
+<col width="36%" />
</colgroup>
-<tbody>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>214 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>214 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most reviews (total 21)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 65%" />
-<col style="width: 35%" />
+<col width="65%" />
+<col width="35%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>7 (33.3%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>7 (33.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>3 (14.3%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>3 (14.3%)</td>
</tr>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>2 (9.5%)</p></td>
+<tr class="row-even"><td>Gavin Shan</td>
+<td>2 (9.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Kamalesh Babulal</p></td>
-<td><p>2 (9.5%)</p></td>
+<tr class="row-odd"><td>Kamalesh Babulal</td>
+<td>2 (9.5%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>2 (9.5%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>2 (9.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>1 (4.8%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>1 (4.8%)</td>
</tr>
-<tr class="row-even"><td><p>Andrei Warkentin</p></td>
-<td><p>1 (4.8%)</p></td>
+<tr class="row-even"><td>Andrei Warkentin</td>
+<td>1 (4.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Preeti U Murthy</p></td>
-<td><p>1 (4.8%)</p></td>
+<tr class="row-odd"><td>Preeti U Murthy</td>
+<td>1 (4.8%)</td>
</tr>
-<tr class="row-even"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>1 (4.8%)</p></td>
+<tr class="row-even"><td>Samuel Mendoza-Jonas</td>
+<td>1 (4.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>1 (4.8%)</p></td>
+<tr class="row-odd"><td>Ananth N Mavinakayanahalli</td>
+<td>1 (4.8%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most test credits (total 1)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 64%" />
-<col style="width: 36%" />
+<col width="64%" />
+<col width="36%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Chad Larson</p></td>
-<td><p>1 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Chad Larson</td>
+<td>1 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Developers who gave the most tested-by credits (total 1)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 64%" />
-<col style="width: 36%" />
+<col width="64%" />
+<col width="36%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>1 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Gavin Shan</td>
+<td>1 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most report credits (total 4)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 64%" />
-<col style="width: 36%" />
+<col width="64%" />
+<col width="36%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>2 (50.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>2 (50.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Chad Larson</p></td>
-<td><p>1 (25.0%)</p></td>
+<tr class="row-odd"><td>Chad Larson</td>
+<td>1 (25.0%)</td>
</tr>
-<tr class="row-even"><td><p>Andrei Warkentin</p></td>
-<td><p>1 (25.0%)</p></td>
+<tr class="row-even"><td>Andrei Warkentin</td>
+<td>1 (25.0%)</td>
</tr>
</tbody>
</table>
<p>Developers who gave the most report credits (total 4)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 64%" />
-<col style="width: 36%" />
+<col width="64%" />
+<col width="36%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>3 (75.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>3 (75.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>1 (25.0%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>1 (25.0%)</td>
</tr>
</tbody>
</table>
<p>Top changeset contributors by employer</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 65%" />
-<col style="width: 35%" />
+<col width="65%" />
+<col width="35%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>319 (99.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>319 (99.4%)</td>
</tr>
-<tr class="row-odd"><td><p><a class="reference external" href="mailto:dan&#37;&#52;&#48;danny&#46;cz">dan<span>&#64;</span>danny<span>&#46;</span>cz</a></p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td><a class="reference external" href="mailto:dan&#37;&#52;&#48;danny&#46;cz">dan<span>&#64;</span>danny<span>&#46;</span>cz</a></td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p><a class="reference external" href="mailto:andrey&#46;warkentin&#37;&#52;&#48;gmail&#46;com">andrey<span>&#46;</span>warkentin<span>&#64;</span>gmail<span>&#46;</span>com</a></p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td><a class="reference external" href="mailto:andrey&#46;warkentin&#37;&#52;&#48;gmail&#46;com">andrey<span>&#46;</span>warkentin<span>&#64;</span>gmail<span>&#46;</span>com</a></td>
+<td>1 (0.3%)</td>
</tr>
</tbody>
</table>
<p>Top lines changed by employer</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 65%" />
-<col style="width: 35%" />
+<col width="65%" />
+<col width="35%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>14309 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>14309 (100.0%)</td>
</tr>
-<tr class="row-odd"><td><p><a class="reference external" href="mailto:dan&#37;&#52;&#48;danny&#46;cz">dan<span>&#64;</span>danny<span>&#46;</span>cz</a></p></td>
-<td><p>1 (0.0%)</p></td>
+<tr class="row-odd"><td><a class="reference external" href="mailto:dan&#37;&#52;&#48;danny&#46;cz">dan<span>&#64;</span>danny<span>&#46;</span>cz</a></td>
+<td>1 (0.0%)</td>
</tr>
-<tr class="row-even"><td><p><a class="reference external" href="mailto:andrey&#46;warkentin&#37;&#52;&#48;gmail&#46;com">andrey<span>&#46;</span>warkentin<span>&#64;</span>gmail<span>&#46;</span>com</a></p></td>
-<td><p>1 (0.0%)</p></td>
+<tr class="row-even"><td><a class="reference external" href="mailto:andrey&#46;warkentin&#37;&#52;&#48;gmail&#46;com">andrey<span>&#46;</span>warkentin<span>&#64;</span>gmail<span>&#46;</span>com</a></td>
+<td>1 (0.0%)</td>
</tr>
</tbody>
</table>
<p>Employers with the most signoffs (total 214)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 64%" />
-<col style="width: 36%" />
+<col width="64%" />
+<col width="36%" />
</colgroup>
-<tbody>
-<tr class="row-odd"><td><p>IBM</p></td>
-<td><p>214 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-odd"><td>IBM</td>
+<td>214 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Employers with the most hackers (total 25)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 65%" />
-<col style="width: 35%" />
+<col width="65%" />
+<col width="35%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>23 (92.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>23 (92.0%)</td>
</tr>
-<tr class="row-odd"><td><p><a class="reference external" href="mailto:dan&#37;&#52;&#48;danny&#46;cz">dan<span>&#64;</span>danny<span>&#46;</span>cz</a></p></td>
-<td><p>1 (4.0%)</p></td>
+<tr class="row-odd"><td><a class="reference external" href="mailto:dan&#37;&#52;&#48;danny&#46;cz">dan<span>&#64;</span>danny<span>&#46;</span>cz</a></td>
+<td>1 (4.0%)</td>
</tr>
-<tr class="row-even"><td><p><a class="reference external" href="mailto:andrey&#46;warkentin&#37;&#52;&#48;gmail&#46;com">andrey<span>&#46;</span>warkentin<span>&#64;</span>gmail<span>&#46;</span>com</a></p></td>
-<td><p>1 (4.0%)</p></td>
+<tr class="row-even"><td><a class="reference external" href="mailto:andrey&#46;warkentin&#37;&#52;&#48;gmail&#46;com">andrey<span>&#46;</span>warkentin<span>&#64;</span>gmail<span>&#46;</span>com</a></td>
+<td>1 (4.0%)</td>
</tr>
</tbody>
</table>
@@ -622,7 +612,6 @@ A total of 13696 lines added, 2754 removed (delta 10942)</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -658,15 +647,17 @@ A total of 13696 lines added, 2754 removed (delta 10942)</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -683,15 +674,14 @@ A total of 13696 lines added, 2754 removed (delta 10942)</p>
<li class="right" >
<a href="skiboot-5.1.0.html" title="skiboot-5.1.0"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.0-beta1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.0-beta2.html b/doc/release-notes/skiboot-5.1.0-beta2.html
index 24314be..74a1b6c 100644
--- a/doc/release-notes/skiboot-5.1.0-beta2.html
+++ b/doc/release-notes/skiboot-5.1.0-beta2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.0-beta2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.0-beta2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.0-beta1.html" title="skiboot-5.1.0-beta1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.0-beta2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -55,12 +56,13 @@ skiboot-5.0.5 and everything from 5.1.0-beta1.</p>
<h2>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<p>Over skiboot-5.1.0-beta1, the following features have been added:</p>
<ul>
-<li><dl>
-<dt>opal-api: Add OPAL call to handle abnormal reboots.</dt><dd><p>OPAL_CEC_REBOOT2
+<li><dl class="first docutils">
+<dt>opal-api: Add OPAL call to handle abnormal reboots.</dt>
+<dd><p class="first">OPAL_CEC_REBOOT2
Currently it will support two reboot types (0). normal reboot, that
will behave similar to that of opal_cec_reboot() call, and
(1). platform error reboot.</p>
-<p>Long term, this is designed to replace OPAL_CEC_REBOOT.</p>
+<p class="last">Long term, this is designed to replace OPAL_CEC_REBOOT.</p>
</dd>
</dl>
</li>
@@ -70,52 +72,45 @@ will behave similar to that of opal_cec_reboot() call, and
<h2>Bug fixes<a class="headerlink" href="#bug-fixes" title="Permalink to this headline">¶</a></h2>
<p>Over skiboot-5.1.0-beta1, the following bugs have been fixed:</p>
<ul class="simple">
-<li><p>external/opal-prd: Only map each PRD range once</p>
-<ul>
-<li><p>could eventually lead to failing to map PRD ranges</p></li>
+<li>external/opal-prd: Only map each PRD range once<ul>
+<li>could eventually lead to failing to map PRD ranges</li>
</ul>
</li>
-<li><p>On skiboot crash, don’t try to print symbol when we didn’t find one</p>
-<ul>
-<li><p>makes backtrace prettier</p></li>
+<li>On skiboot crash, don’t try to print symbol when we didn’t find one<ul>
+<li>makes backtrace prettier</li>
</ul>
</li>
-<li><p>On skiboot crash, dump hssr0 and hsrr1 registers correctly.</p></li>
-<li><p>Better support old and biarch compilers</p>
-<ul>
-<li><p>test “new” compiler flags before using them</p></li>
-<li><p>Specify -mabi=elfv1 if supported (which means it’s needed)</p></li>
+<li>On skiboot crash, dump hssr0 and hsrr1 registers correctly.</li>
+<li>Better support old and biarch compilers<ul>
+<li>test “new” compiler flags before using them</li>
+<li>Specify -mabi=elfv1 if supported (which means it’s needed)</li>
</ul>
</li>
-<li><p>fix boot-coverage-report makefile target</p></li>
-<li><p>ipmi: Fix the opal_ipmi_recv() call to handle the error path</p>
-<ul>
-<li><p>Could make kernel a sad panda when in continues with other IPMI commands</p></li>
+<li>fix boot-coverage-report makefile target</li>
+<li>ipmi: Fix the opal_ipmi_recv() call to handle the error path<ul>
+<li>Could make kernel a sad panda when in continues with other IPMI commands</li>
</ul>
</li>
-<li><p>IPMI: truncate SELs at 2kb</p>
-<ul>
-<li><p>it’s the limit of the astbmc. We think.</p></li>
+<li>IPMI: truncate SELs at 2kb<ul>
+<li>it’s the limit of the astbmc. We think.</li>
</ul>
</li>
-<li><p>IPMI/SEL/PEL:</p>
-<ul>
-<li><p>As per PEL spec, we should log events with severity &gt;= 0x22 and “service
+<li>IPMI/SEL/PEL:<ul>
+<li>As per PEL spec, we should log events with severity &gt;= 0x22 and “service
action flag” is “on”. But in our case, all logs OPAL originagted logs
are makred as report externally.
-We now only report logs with severity &gt;= 0x22</p></li>
+We now only report logs with severity &gt;= 0x22</li>
</ul>
</li>
-<li><p>IPMI: fixes to eSEL logging</p></li>
-<li><p>hw/phb3: Change reserved PE to 255</p>
-<ul>
-<li><p>Currently, we have reserved PE#0 to which all RIDs are mapped prior
+<li>IPMI: fixes to eSEL logging</li>
+<li>hw/phb3: Change reserved PE to 255<ul>
+<li>Currently, we have reserved PE#0 to which all RIDs are mapped prior
to PE assignment request from kernel. The last M64 BAR is configured
to have shared mode. So we have to cut off the first M64 segment,
which corresponds to reserved PE#0 in kernel. If the first BAR
(for example PF’s IOV BAR) requires huge alignment in kernel, we
have to waste huge M64 space to accommodate the alignment. If we
-have reserved PE#256, the waste of M64 space will be avoided.</p></li>
+have reserved PE#256, the waste of M64 space will be avoided.</li>
</ul>
</li>
</ul>
@@ -123,10 +118,9 @@ have reserved PE#256, the waste of M64 space will be avoided.</p></li>
<div class="section" id="other-changes">
<h2>Other changes<a class="headerlink" href="#other-changes" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>unified version numbers for bundled utilities</p></li>
-<li><p>external/boot_test/boot_test.sh</p>
-<ul>
-<li><p>better usable for automated boot testing</p></li>
+<li>unified version numbers for bundled utilities</li>
+<li>external/boot_test/boot_test.sh<ul>
+<li>better usable for automated boot testing</li>
</ul>
</li>
</ul>
@@ -134,7 +128,6 @@ have reserved PE#256, the waste of M64 space will be avoided.</p></li>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -164,15 +157,17 @@ have reserved PE#256, the waste of M64 space will be avoided.</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -189,15 +184,14 @@ have reserved PE#256, the waste of M64 space will be avoided.</p></li>
<li class="right" >
<a href="skiboot-5.1.0-beta1.html" title="skiboot-5.1.0-beta1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.0-beta2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.0.html b/doc/release-notes/skiboot-5.1.0.html
index 6a25fd6..bbfbc2d 100644
--- a/doc/release-notes/skiboot-5.1.0.html
+++ b/doc/release-notes/skiboot-5.1.0.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.0 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.0 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.0.html" title="skiboot 5.0"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -54,66 +55,60 @@ release (5.0 was released April 14th 2015).</p>
skiboot-5.0.5 and everything from 5.1.0-beta1 and 5.1.0-beta2.</p>
<p>Over skiboot-5.1.0-beta2, we have the following changes:</p>
<ul class="simple">
-<li><p>opal_prd now supports multiple socket systems</p></li>
-<li><p>fix compiler warnings in gard and libflash</p></li>
+<li>opal_prd now supports multiple socket systems</li>
+<li>fix compiler warnings in gard and libflash</li>
</ul>
<p>Below are the changes introduced in previous skiboot-5.1.0 releases over
the previous stable release, skiboot-5.0:</p>
<div class="section" id="new-features">
<h2>New features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Add Naples chip (CPU, PHB, LPC serial interrupts) support</p></li>
-<li><p>Added qemu platform</p></li>
-<li><p>improvements to FSI error handling</p></li>
-<li><p>improvements in chip TOD failover (some only on FSP systems)</p></li>
-<li><p>Set Relative Priority Register (RPR) to recommended value</p>
-<ul>
-<li><p>this affects thread priority in SMT modes</p></li>
+<li>Add Naples chip (CPU, PHB, LPC serial interrupts) support</li>
+<li>Added qemu platform</li>
+<li>improvements to FSI error handling</li>
+<li>improvements in chip TOD failover (some only on FSP systems)</li>
+<li>Set Relative Priority Register (RPR) to recommended value<ul>
+<li>this affects thread priority in SMT modes</li>
</ul>
</li>
-<li><p>greatly reduce memory consumption by CPU stacks for non-present CPUs</p>
-<ul>
-<li><p>Previously we would reserve enough memory for max PIR for each CPU
-type.</p></li>
-<li><p>This fix frees up 77MB of RAM on a typical P8 system.</p></li>
+<li>greatly reduce memory consumption by CPU stacks for non-present CPUs<ul>
+<li>Previously we would reserve enough memory for max PIR for each CPU
+type.</li>
+<li>This fix frees up 77MB of RAM on a typical P8 system.</li>
</ul>
</li>
-<li><p>increased OPAL API documentation</p></li>
-<li><p>Asynchronous preloading of resources from FSP/flash</p>
-<ul>
-<li><p>improves boot time on some systems</p></li>
+<li>increased OPAL API documentation</li>
+<li>Asynchronous preloading of resources from FSP/flash<ul>
+<li>improves boot time on some systems</li>
</ul>
</li>
-<li><p>Basic Garrison platform support</p></li>
-<li><p>Add Mambo platform (P8 Functional Simulator, systemsim)</p>
-<ul>
-<li><p>includes fake NVRAM, RTC</p></li>
+<li>Basic Garrison platform support</li>
+<li>Add Mambo platform (P8 Functional Simulator, systemsim)<ul>
+<li>includes fake NVRAM, RTC</li>
</ul>
</li>
-<li><p>Support building with GCOV, increasing memory for skiboot binary to 2MB</p>
-<ul>
-<li><p>includes boot code coverage testing</p></li>
+<li>Support building with GCOV, increasing memory for skiboot binary to 2MB<ul>
+<li>includes boot code coverage testing</li>
</ul>
</li>
-<li><p>Increased skiboot HEAP size.</p>
-<ul>
-<li><p>We are not aware of any system where you would run out, but on large
-systems it was getting closer than we liked.</p></li>
+<li>Increased skiboot HEAP size.<ul>
+<li>We are not aware of any system where you would run out, but on large
+systems it was getting closer than we liked.</li>
</ul>
</li>
-<li><p>add boot_tests.sh for helping automate boot testing on FSP and BMC machines</p></li>
-<li><p>Versioning of pflash and gard utilities to help Linux (or other OS)
-distributions with packaging.</p></li>
-<li><p>OCC throttle status messages to host</p></li>
-<li><p>CAPP timebase sync (“ibm,capp-timebase-sync” in DT to indicate CAPP timebase
-was synced by OPAL)</p></li>
-<li><p>opal-api: Add OPAL call to handle abnormal reboots.</p></li>
+<li>add boot_tests.sh for helping automate boot testing on FSP and BMC machines</li>
+<li>Versioning of pflash and gard utilities to help Linux (or other OS)
+distributions with packaging.</li>
+<li>OCC throttle status messages to host</li>
+<li>CAPP timebase sync (“ibm,capp-timebase-sync” in DT to indicate CAPP timebase
+was synced by OPAL)</li>
+<li>opal-api: Add OPAL call to handle abnormal reboots.</li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">OPAL_CEC_REBOOT2</span></code> currently supports two reboot types:</p>
<blockquote>
<div><ol class="arabic simple" start="0">
-<li><p>normal reboot, that will behave similar to that of opal_cec_reboot() call</p></li>
-<li><p>platform error reboot.</p></li>
+<li>normal reboot, that will behave similar to that of opal_cec_reboot() call</li>
+<li>platform error reboot.</li>
</ol>
</div></blockquote>
<p>Long term, this is designed to replace OPAL_CEC_REBOOT.</p>
@@ -121,13 +116,12 @@ was synced by OPAL)</p></li>
<div class="section" id="new-features-for-fsp-based-machines">
<h2>New features for FSP based machines<a class="headerlink" href="#new-features-for-fsp-based-machines" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>in-band IPMI support</p></li>
-<li><p>ethernet adaptor location codes</p></li>
-<li><p>add DIMM frequency information to device tree</p></li>
-<li><p>improvements in FSP error log code paths</p></li>
-<li><p>fix some boot time memory leaks</p>
-<ul>
-<li><p>harmless to end user</p></li>
+<li>in-band IPMI support</li>
+<li>ethernet adaptor location codes</li>
+<li>add DIMM frequency information to device tree</li>
+<li>improvements in FSP error log code paths</li>
+<li>fix some boot time memory leaks<ul>
+<li>harmless to end user</li>
</ul>
</li>
</ul>
@@ -135,75 +129,67 @@ was synced by OPAL)</p></li>
<div class="section" id="new-features-for-ami-bmc-based-machines">
<h2>New features for AMI BMC based machines<a class="headerlink" href="#new-features-for-ami-bmc-based-machines" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>PCIe power workaround for K80</p></li>
-<li><p>Added support for Macronix 128Mbit flash chips</p></li>
-<li><p>Initial PRD support for Firestone platform</p></li>
-<li><p>improved reliability when BMC reboots</p></li>
+<li>PCIe power workaround for K80</li>
+<li>Added support for Macronix 128Mbit flash chips</li>
+<li>Initial PRD support for Firestone platform</li>
+<li>improved reliability when BMC reboots</li>
</ul>
</div>
<div class="section" id="the-following-bugs-have-been-fixed">
<h2>The following bugs have been fixed<a class="headerlink" href="#the-following-bugs-have-been-fixed" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Increase PHB3 timeout for electrical links coming up to 2 seconds.</p>
-<ul>
-<li><p>fixes issues with some Mellanox cards</p></li>
+<li>Increase PHB3 timeout for electrical links coming up to 2 seconds.<ul>
+<li>fixes issues with some Mellanox cards</li>
</ul>
</li>
-<li><p>Hang in opal_reinit_cpus() that could prevent kdump from functioning</p></li>
-<li><p>PHB3: fix crash in phb3_init</p></li>
-<li><p>PHB3: fix crash with fenced PHB in phb3_init_hw()</p></li>
-<li><p>Fix bugs in hw/bt.c (interface for IPMI on BMC machines) that could possibly
-lead to a crash (dereferencing invalid address, deadlock)</p></li>
-<li><p>ipmi/sel: fix use-after-free</p></li>
-<li><p>Bug fixes in EEH handling</p>
-<ul>
-<li><p>opal_pci_next_error() cleared OPAL_EVENT_PCI_ERROR unconditionally,
-possibly leading to missed errors.</p></li>
+<li>Hang in opal_reinit_cpus() that could prevent kdump from functioning</li>
+<li>PHB3: fix crash in phb3_init</li>
+<li>PHB3: fix crash with fenced PHB in phb3_init_hw()</li>
+<li>Fix bugs in hw/bt.c (interface for IPMI on BMC machines) that could possibly
+lead to a crash (dereferencing invalid address, deadlock)</li>
+<li>ipmi/sel: fix use-after-free</li>
+<li>Bug fixes in EEH handling<ul>
+<li>opal_pci_next_error() cleared OPAL_EVENT_PCI_ERROR unconditionally,
+possibly leading to missed errors.</li>
</ul>
</li>
-<li><p>external/opal-prd: Only map each PRD range once</p>
-<ul>
-<li><p>could eventually lead to failing to map PRD ranges</p></li>
+<li>external/opal-prd: Only map each PRD range once<ul>
+<li>could eventually lead to failing to map PRD ranges</li>
</ul>
</li>
-<li><p>On skiboot crash, don’t try to print symbol when we didn’t find one</p>
-<ul>
-<li><p>makes backtrace prettier</p></li>
+<li>On skiboot crash, don’t try to print symbol when we didn’t find one<ul>
+<li>makes backtrace prettier</li>
</ul>
</li>
-<li><p>On skiboot crash, dump hssr0 and hsrr1 registers correctly.</p></li>
-<li><p>Better support old and biarch compilers</p>
-<ul>
-<li><p>test “new” compiler flags before using them</p></li>
-<li><p>Specify -mabi=elfv1 if supported (which means it’s needed)</p></li>
+<li>On skiboot crash, dump hssr0 and hsrr1 registers correctly.</li>
+<li>Better support old and biarch compilers<ul>
+<li>test “new” compiler flags before using them</li>
+<li>Specify -mabi=elfv1 if supported (which means it’s needed)</li>
</ul>
</li>
-<li><p>fix boot-coverage-report makefile target</p></li>
-<li><p>ipmi: Fix the opal_ipmi_recv() call to handle the error path</p></li>
-<li><p>Could make kernel a sad panda when in continues with other IPMI commands</p></li>
-<li><p>IPMI: truncate SELs at 2kb</p>
-<ul>
-<li><p>it’s the limit of the astbmc. We think.</p></li>
+<li>fix boot-coverage-report makefile target</li>
+<li>ipmi: Fix the opal_ipmi_recv() call to handle the error path</li>
+<li>Could make kernel a sad panda when in continues with other IPMI commands</li>
+<li>IPMI: truncate SELs at 2kb<ul>
+<li>it’s the limit of the astbmc. We think.</li>
</ul>
</li>
-<li><p>IPMI/SEL/PEL:</p>
-<ul>
-<li><p>As per PEL spec, we should log events with severity &gt;= 0x22 and “service
+<li>IPMI/SEL/PEL:<ul>
+<li>As per PEL spec, we should log events with severity &gt;= 0x22 and “service
action flag” is “on”. But in our case, all logs OPAL originagted logs
are makred as report externally.
-We now only report logs with severity &gt;= 0x22</p></li>
+We now only report logs with severity &gt;= 0x22</li>
</ul>
</li>
-<li><p>IPMI: fixes to eSEL logging</p></li>
-<li><p>hw/phb3: Change reserved PE to 255</p>
-<ul>
-<li><p>Currently, we have reserved PE#0 to which all RIDs are mapped prior
+<li>IPMI: fixes to eSEL logging</li>
+<li>hw/phb3: Change reserved PE to 255<ul>
+<li>Currently, we have reserved PE#0 to which all RIDs are mapped prior
to PE assignment request from kernel. The last M64 BAR is configured
to have shared mode. So we have to cut off the first M64 segment,
which corresponds to reserved PE#0 in kernel. If the first BAR
(for example PF’s IOV BAR) requires huge alignment in kernel, we
have to waste huge M64 space to accommodate the alignment. If we
-have reserved PE#256, the waste of M64 space will be avoided.</p></li>
+have reserved PE#256, the waste of M64 space will be avoided.</li>
</ul>
</li>
</ul>
@@ -211,17 +197,18 @@ have reserved PE#256, the waste of M64 space will be avoided.</p></li>
<div class="section" id="fsp-specific-bugs-fixed">
<h2>FSP-specific bugs fixed<a class="headerlink" href="#fsp-specific-bugs-fixed" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>(also fixed in skiboot-5.0.2) Fix race in firenze_get_slot_info() leading to
+<li><p class="first">(also fixed in skiboot-5.0.2) Fix race in firenze_get_slot_info() leading to
assert() with many PCI cards</p>
<p>With many PCI cards, we’d hit a race where calls to
firenze_add_pcidev_to_fsp_inventory would step on each other leading to
memory corruption and finally an assert() in the allocator being hit
during boot.</p>
</li>
-<li><p>PCIe power workaround for K80 cards</p></li>
-<li><p>/ibm,opal/led renamed to /ibm,opal/leds in Device Tree</p>
+<li><p class="first">PCIe power workaround for K80 cards</p>
+</li>
+<li><p class="first">/ibm,opal/led renamed to /ibm,opal/leds in Device Tree</p>
<ul class="simple">
-<li><p>compatible change as no FSP based systems shipped with skiboot-5.0</p></li>
+<li>compatible change as no FSP based systems shipped with skiboot-5.0</li>
</ul>
</li>
</ul>
@@ -229,42 +216,37 @@ during boot.</p>
<div class="section" id="general-improvements">
<h2>General improvements<a class="headerlink" href="#general-improvements" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Preliminary Centaur i2c support</p>
-<ul>
-<li><p>lays framework for supporting Centaur i2c</p></li>
+<li>Preliminary Centaur i2c support<ul>
+<li>lays framework for supporting Centaur i2c</li>
</ul>
</li>
-<li><p>don’t run pollers on non-boot CPUs in time_wait</p></li>
-<li><p>improvements to opal-prd, pflash, libflash</p>
-<ul>
-<li><p>including new blocklevel interface in libflash</p></li>
+<li>don’t run pollers on non-boot CPUs in time_wait</li>
+<li>improvements to opal-prd, pflash, libflash<ul>
+<li>including new blocklevel interface in libflash</li>
</ul>
</li>
-<li><p>many minor fixes to issues found by static analysis</p></li>
-<li><p>improvements in FSP error log code paths</p></li>
-<li><p>code cleanup in memory allocator</p></li>
-<li><p>Don’t expose individual nvram partitions in the device tree, just the whole
-flash device.</p></li>
-<li><p>build improvements for building on ppc64el host</p></li>
-<li><p>improvements in cpu_relax() for idle threads, needed for GCOV on large
-machines.</p></li>
-<li><p>Optimized memset() for POWER8, greatly reducing number of instructions
-executed for boot, which helps boot time in simulators.</p></li>
-<li><p>Major improvements in hello_world kernel</p>
-<ul>
-<li><p>Bloat of huge 17 instruction test case reduced to 10.</p></li>
+<li>many minor fixes to issues found by static analysis</li>
+<li>improvements in FSP error log code paths</li>
+<li>code cleanup in memory allocator</li>
+<li>Don’t expose individual nvram partitions in the device tree, just the whole
+flash device.</li>
+<li>build improvements for building on ppc64el host</li>
+<li>improvements in cpu_relax() for idle threads, needed for GCOV on large
+machines.</li>
+<li>Optimized memset() for POWER8, greatly reducing number of instructions
+executed for boot, which helps boot time in simulators.</li>
+<li>Major improvements in hello_world kernel<ul>
+<li>Bloat of huge 17 instruction test case reduced to 10.</li>
</ul>
</li>
-<li><p>Disable bust_locks for general calls of abort()</p>
-<ul>
-<li><p>Should enable better error messages during abort() when other users of
-LPC bus exist (e.g. flash)</p></li>
+<li>Disable bust_locks for general calls of abort()<ul>
+<li>Should enable better error messages during abort() when other users of
+LPC bus exist (e.g. flash)</li>
</ul>
</li>
-<li><p>unified version numbers for bundled utilities</p></li>
-<li><p>external/boot_test/boot_test.sh</p>
-<ul>
-<li><p>better usable for automated boot testing</p></li>
+<li>unified version numbers for bundled utilities</li>
+<li>external/boot_test/boot_test.sh<ul>
+<li>better usable for automated boot testing</li>
</ul>
</li>
</ul>
@@ -275,430 +257,430 @@ LPC bus exist (e.g. flash)</p></li>
2 employers found
A total of 15868 lines added, 3359 removed (delta 12509)</p>
<p>Developers with the most changesets</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 67%" />
-<col style="width: 33%" />
+<col width="67%" />
+<col width="33%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>Changesets</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">Changesets</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>117 (31.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>117 (31.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Jeremy Kerr</p></td>
-<td><p>37 (9.9%)</p></td>
+<tr class="row-odd"><td>Jeremy Kerr</td>
+<td>37 (9.9%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>33 (8.9%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>33 (8.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Vasant Hegde</p></td>
-<td><p>32 (8.6%)</p></td>
+<tr class="row-odd"><td>Vasant Hegde</td>
+<td>32 (8.6%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>32 (8.6%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>32 (8.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Kamalesh Babulal</p></td>
-<td><p>22 (5.9%)</p></td>
+<tr class="row-odd"><td>Kamalesh Babulal</td>
+<td>22 (5.9%)</td>
</tr>
-<tr class="row-even"><td><p>Joel Stanley</p></td>
-<td><p>12 (3.2%)</p></td>
+<tr class="row-even"><td>Joel Stanley</td>
+<td>12 (3.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>12 (3.2%)</p></td>
+<tr class="row-odd"><td>Mahesh Salgaonkar</td>
+<td>12 (3.2%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>12 (3.2%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>12 (3.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Neelesh Gupta</p></td>
-<td><p>9 (2.4%)</p></td>
+<tr class="row-odd"><td>Neelesh Gupta</td>
+<td>9 (2.4%)</td>
</tr>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>8 (2.2%)</p></td>
+<tr class="row-even"><td>Gavin Shan</td>
+<td>8 (2.2%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>8 (2.2%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>8 (2.2%)</td>
</tr>
-<tr class="row-even"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>8 (2.2%)</p></td>
+<tr class="row-even"><td>Ananth N Mavinakayanahalli</td>
+<td>8 (2.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Vipin K Parashar</p></td>
-<td><p>6 (1.6%)</p></td>
+<tr class="row-odd"><td>Vipin K Parashar</td>
+<td>6 (1.6%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>6 (1.6%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>6 (1.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>3 (0.8%)</p></td>
+<tr class="row-odd"><td>Samuel Mendoza-Jonas</td>
+<td>3 (0.8%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Bonnard</p></td>
-<td><p>3 (0.8%)</p></td>
+<tr class="row-even"><td>Frederic Bonnard</td>
+<td>3 (0.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>2 (0.5%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>2 (0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>2 (0.5%)</p></td>
+<tr class="row-even"><td>Vaidyanathan Srinivasan</td>
+<td>2 (0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Philippe Bergheaud</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Philippe Bergheaud</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Daniel Axtens</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Daniel Axtens</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Hari Bathini</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Hari Bathini</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Ellerman</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Michael Ellerman</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Andrei Warkentin</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Andrei Warkentin</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Dan Horák</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Dan Horák</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Anton Blanchard</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Anton Blanchard</td>
+<td>1 (0.3%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most changed lines</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>4499 (27.3%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>4499 (27.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>3782 (22.9%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>3782 (22.9%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>1887 (11.4%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>1887 (11.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>1654 (10.0%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>1654 (10.0%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>959 (5.8%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>959 (5.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>886 (5.4%)</p></td>
+<tr class="row-odd"><td>Mahesh Salgaonkar</td>
+<td>886 (5.4%)</td>
</tr>
-<tr class="row-even"><td><p>Neelesh Gupta</p></td>
-<td><p>473 (2.9%)</p></td>
+<tr class="row-even"><td>Neelesh Gupta</td>
+<td>473 (2.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>387 (2.3%)</p></td>
+<tr class="row-odd"><td>Samuel Mendoza-Jonas</td>
+<td>387 (2.3%)</td>
</tr>
-<tr class="row-even"><td><p>Vipin K Parashar</p></td>
-<td><p>332 (2.0%)</p></td>
+<tr class="row-even"><td>Vipin K Parashar</td>
+<td>332 (2.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Philippe Bergheaud</p></td>
-<td><p>171 (1.0%)</p></td>
+<tr class="row-odd"><td>Philippe Bergheaud</td>
+<td>171 (1.0%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>165 (1.0%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>165 (1.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>151 (0.9%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>151 (0.9%)</td>
</tr>
-<tr class="row-even"><td><p>Joel Stanley</p></td>
-<td><p>105 (0.6%)</p></td>
+<tr class="row-even"><td>Joel Stanley</td>
+<td>105 (0.6%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>89 (0.5%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>89 (0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>83 (0.5%)</p></td>
+<tr class="row-even"><td>Gavin Shan</td>
+<td>83 (0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Frederic Bonnard</p></td>
-<td><p>76 (0.5%)</p></td>
+<tr class="row-odd"><td>Frederic Bonnard</td>
+<td>76 (0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Kamalesh Babulal</p></td>
-<td><p>65 (0.4%)</p></td>
+<tr class="row-even"><td>Kamalesh Babulal</td>
+<td>65 (0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>46 (0.3%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>46 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Daniel Axtens</p></td>
-<td><p>31 (0.2%)</p></td>
+<tr class="row-even"><td>Daniel Axtens</td>
+<td>31 (0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>22 (0.1%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>22 (0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>20 (0.1%)</p></td>
+<tr class="row-even"><td>Ananth N Mavinakayanahalli</td>
+<td>20 (0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Anton Blanchard</p></td>
-<td><p>3 (0.0%)</p></td>
+<tr class="row-odd"><td>Anton Blanchard</td>
+<td>3 (0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>2 (0.0%)</p></td>
+<tr class="row-even"><td>Vaidyanathan Srinivasan</td>
+<td>2 (0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Hari Bathini</p></td>
-<td><p>2 (0.0%)</p></td>
+<tr class="row-odd"><td>Hari Bathini</td>
+<td>2 (0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Ellerman</p></td>
-<td><p>1 (0.0%)</p></td>
+<tr class="row-even"><td>Michael Ellerman</td>
+<td>1 (0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrei Warkentin</p></td>
-<td><p>1 (0.0%)</p></td>
+<tr class="row-odd"><td>Andrei Warkentin</td>
+<td>1 (0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Dan Horák</p></td>
-<td><p>1 (0.0%)</p></td>
+<tr class="row-even"><td>Dan Horák</td>
+<td>1 (0.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most lines removed</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 31%" />
+<col width="69%" />
+<col width="31%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>24 (0.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Michael Neuling</td>
+<td>24 (0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Hari Bathini</p></td>
-<td><p>1 (0.0%)</p></td>
+<tr class="row-odd"><td>Hari Bathini</td>
+<td>1 (0.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most signoffs (total 253)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 31%" />
+<col width="69%" />
+<col width="31%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>249 (98.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>249 (98.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>4 (1.6%)</p></td>
+<tr class="row-odd"><td>Mahesh Salgaonkar</td>
+<td>4 (1.6%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most reviews (total 24)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 31%" />
+<col width="69%" />
+<col width="31%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>9 (37.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>9 (37.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>3 (12.5%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>3 (12.5%)</td>
</tr>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>2 (8.3%)</p></td>
+<tr class="row-even"><td>Gavin Shan</td>
+<td>2 (8.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Kamalesh Babulal</p></td>
-<td><p>2 (8.3%)</p></td>
+<tr class="row-odd"><td>Kamalesh Babulal</td>
+<td>2 (8.3%)</td>
</tr>
-<tr class="row-even"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>2 (8.3%)</p></td>
+<tr class="row-even"><td>Samuel Mendoza-Jonas</td>
+<td>2 (8.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>2 (8.3%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>2 (8.3%)</td>
</tr>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>1 (4.2%)</p></td>
+<tr class="row-even"><td>Stewart Smith</td>
+<td>1 (4.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrei Warkentin</p></td>
-<td><p>1 (4.2%)</p></td>
+<tr class="row-odd"><td>Andrei Warkentin</td>
+<td>1 (4.2%)</td>
</tr>
-<tr class="row-even"><td><p>Preeti U Murthy</p></td>
-<td><p>1 (4.2%)</p></td>
+<tr class="row-even"><td>Preeti U Murthy</td>
+<td>1 (4.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>1 (4.2%)</p></td>
+<tr class="row-odd"><td>Ananth N Mavinakayanahalli</td>
+<td>1 (4.2%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most test credits (total 1)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 31%" />
+<col width="69%" />
+<col width="31%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Chad Larson</p></td>
-<td><p>1 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Chad Larson</td>
+<td>1 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Developers who gave the most tested-by credits (total 1)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 31%" />
+<col width="69%" />
+<col width="31%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>1 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Gavin Shan</td>
+<td>1 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most report credits (total 4)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 31%" />
+<col width="69%" />
+<col width="31%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>2 (50.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>2 (50.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Chad Larson</p></td>
-<td><p>1 (25.0%)</p></td>
+<tr class="row-odd"><td>Chad Larson</td>
+<td>1 (25.0%)</td>
</tr>
-<tr class="row-even"><td><p>Andrei Warkentin</p></td>
-<td><p>1 (25.0%)</p></td>
+<tr class="row-even"><td>Andrei Warkentin</td>
+<td>1 (25.0%)</td>
</tr>
</tbody>
</table>
<p>Developers who gave the most report credits (total 4)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 31%" />
+<col width="69%" />
+<col width="31%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>3 (75.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>3 (75.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>1 (25.0%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>1 (25.0%)</td>
</tr>
</tbody>
</table>
<p>Top changeset contributors by employer</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>369 (99.2%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>369 (99.2%)</td>
</tr>
-<tr class="row-odd"><td><p>(Unknown)</p></td>
-<td><p>3 (0.8%)</p></td>
+<tr class="row-odd"><td>(Unknown)</td>
+<td>3 (0.8%)</td>
</tr>
</tbody>
</table>
<p>Top lines changed by employer</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 64%" />
-<col style="width: 36%" />
+<col width="64%" />
+<col width="36%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>16497 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>16497 (100.0%)</td>
</tr>
-<tr class="row-odd"><td><p>(Unknown)</p></td>
-<td><p>3 (0.0%)</p></td>
+<tr class="row-odd"><td>(Unknown)</td>
+<td>3 (0.0%)</td>
</tr>
</tbody>
</table>
<p>Employers with the most signoffs (total 253)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 66%" />
-<col style="width: 34%" />
+<col width="66%" />
+<col width="34%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>253 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>253 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Employers with the most hackers (total 27)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>24 (88.9%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>24 (88.9%)</td>
</tr>
-<tr class="row-odd"><td><p>(Unknown)</p></td>
-<td><p>3 (11.1%)</p></td>
+<tr class="row-odd"><td>(Unknown)</td>
+<td>3 (11.1%)</td>
</tr>
</tbody>
</table>
@@ -707,7 +689,6 @@ A total of 15868 lines added, 3359 removed (delta 12509)</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -743,15 +724,17 @@ A total of 15868 lines added, 3359 removed (delta 12509)</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -768,15 +751,14 @@ A total of 15868 lines added, 3359 removed (delta 12509)</p>
<li class="right" >
<a href="skiboot-5.0.html" title="skiboot 5.0"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.1.html b/doc/release-notes/skiboot-5.1.1.html
index dc8cd11..cbbf820 100644
--- a/doc/release-notes/skiboot-5.1.1.html
+++ b/doc/release-notes/skiboot-5.1.1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.0-beta2.html" title="skiboot-5.1.0-beta2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -54,11 +55,13 @@ release.</p>
<h2>Changes<a class="headerlink" href="#changes" title="Permalink to this headline">¶</a></h2>
<p>Over skiboot-5.1.0, we have the following changes:</p>
<ul>
-<li><p>Fix detection of compiler options on ancient GCC (e.g. gcc 4.4, shipped with
-RHEL6)</p></li>
-<li><p>ensure the GNUC version defines for GCOV are coming from target CC rather
-than host CC for extract-gcov</p></li>
-<li><p>phb3: Continue CAPP setup even if PHB is already in CAPP mode
+<li><p class="first">Fix detection of compiler options on ancient GCC (e.g. gcc 4.4, shipped with
+RHEL6)</p>
+</li>
+<li><p class="first">ensure the GNUC version defines for GCOV are coming from target CC rather
+than host CC for extract-gcov</p>
+</li>
+<li><p class="first">phb3: Continue CAPP setup even if PHB is already in CAPP mode
This fixes a critical bug in CAPI support.</p>
<p>CAPI requires that all faults are escalated into a fence, not a
freeze. This is done by setting bits in a number of MMIO
@@ -87,7 +90,6 @@ an inoperable state.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -115,15 +117,17 @@ an inoperable state.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -140,15 +144,14 @@ an inoperable state.</p>
<li class="right" >
<a href="skiboot-5.1.0-beta2.html" title="skiboot-5.1.0-beta2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.10.html b/doc/release-notes/skiboot-5.1.10.html
index 436568f..c518e43 100644
--- a/doc/release-notes/skiboot-5.1.10.html
+++ b/doc/release-notes/skiboot-5.1.10.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.10 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.10 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.1.html" title="skiboot-5.1.1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.10</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -55,7 +56,7 @@ fix release.</p>
<div class="section" id="ibm-fsp-machines">
<h2>IBM FSP machines<a class="headerlink" href="#ibm-fsp-machines" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>FSP: Handle Delayed Power Off initiated CEC shutdown with FSP in Reset/Reload</p>
+<li><p class="first">FSP: Handle Delayed Power Off initiated CEC shutdown with FSP in Reset/Reload</p>
<p>In a scenario where the DPO has been initiated, but the FSP then went into
reset before the CEC power down came in, OPAL may not give up the link since
it may never see the PSI interrupt. So, if we are in dpo_pending and an FSP
@@ -66,10 +67,11 @@ reset is detected via the DISR, give up the PSI link voluntarily.</p>
<div class="section" id="generic">
<h2>Generic<a class="headerlink" href="#generic" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>sensor: add a compatible property
+<li><p class="first">sensor: add a compatible property
OPAL needs an extra compatible property “ibm,opal-sensor” to make
-module autoload work smoothly in Linux for ibmpowernv driver.</p></li>
-<li><p>console: Completely flush output buffer before power down and reboot
+module autoload work smoothly in Linux for ibmpowernv driver.</p>
+</li>
+<li><p class="first">console: Completely flush output buffer before power down and reboot
Completely flush the output buffer of the console driver before
power down and reboot. Implements the flushing function for uart
consoles, which includes the astbmc and rhesus platforms.</p>
@@ -83,7 +85,6 @@ to that driver’s con_ops.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -112,15 +113,17 @@ to that driver’s con_ops.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -137,15 +140,14 @@ to that driver’s con_ops.</p>
<li class="right" >
<a href="skiboot-5.1.1.html" title="skiboot-5.1.1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.10</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.11.html b/doc/release-notes/skiboot-5.1.11.html
index 93c3e5a..6e659aa 100644
--- a/doc/release-notes/skiboot-5.1.11.html
+++ b/doc/release-notes/skiboot-5.1.11.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.11 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.11 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.10.html" title="skiboot-5.1.10"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.11</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -54,13 +55,12 @@ and released skiboot-5.1.10.</p>
<p>Skiboot 5.1.11 contains one additional bug fix over skiboot-5.1.10.</p>
<p>It is:</p>
<ul class="simple">
-<li><p>On IBM FSP machines, if IPMI/Serial console is not connected during shutdown
-or reboot, machine would enter termination state rather than shut down.</p></li>
+<li>On IBM FSP machines, if IPMI/Serial console is not connected during shutdown
+or reboot, machine would enter termination state rather than shut down.</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -80,15 +80,17 @@ or reboot, machine would enter termination state rather than shut down.</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -105,15 +107,14 @@ or reboot, machine would enter termination state rather than shut down.</p></li>
<li class="right" >
<a href="skiboot-5.1.10.html" title="skiboot-5.1.10"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.11</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.12.html b/doc/release-notes/skiboot-5.1.12.html
index 37501eb..81ff3af 100644
--- a/doc/release-notes/skiboot-5.1.12.html
+++ b/doc/release-notes/skiboot-5.1.12.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.12 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.12 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.11.html" title="skiboot-5.1.11"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.12</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,36 +54,37 @@
<div class="section" id="opal-prd">
<h2>opal-prd<a class="headerlink" href="#opal-prd" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Display an explict and obvious message if running on a system that does
+<li>Display an explict and obvious message if running on a system that does
not support opal-prd, such as an IBM FSP based POWER system, where the
-FSP takes on the role of opal-prd.</p></li>
+FSP takes on the role of opal-prd.</li>
</ul>
</div>
<div class="section" id="pflash">
<h2>pflash<a class="headerlink" href="#pflash" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Fix a missing (C) header
-- cherry-picked from master.</p></li>
+<li>Fix a missing (C) header
+- cherry-picked from master.</li>
</ul>
</div>
<div class="section" id="general">
<h2>General<a class="headerlink" href="#general" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Don’t link with libgcc
-- On some toolchains, we don’t have libgcc available.</p></li>
+<li>Don’t link with libgcc
+- On some toolchains, we don’t have libgcc available.</li>
</ul>
</div>
<div class="section" id="power8-phb-pcie-specific">
<h2>POWER8 PHB (PCIe) specific<a class="headerlink" href="#power8-phb-pcie-specific" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><dl>
-<dt>hw/phb3: Flush cache line after updating P/Q bits</dt><dd><p>When doing an MSI EOI, we update the P and Q bits in the IVE. That causes
+<li><dl class="first docutils">
+<dt>hw/phb3: Flush cache line after updating P/Q bits</dt>
+<dd><p class="first">When doing an MSI EOI, we update the P and Q bits in the IVE. That causes
the corresponding cache line to be dirty in the L3 which will cause a
subsequent update by the PHB (upon receiving the next MSI) to get a few
retries until it gets flushed.</p>
<p>We improve the situation (and thus performance) by doing a dcbf
instruction to force a flush of the update we do in SW.</p>
-<p>This improves interrupt performance, reducing latency per interrupt.
+<p class="last">This improves interrupt performance, reducing latency per interrupt.
The improvement will vary by workload.</p>
</dd>
</dl>
@@ -92,14 +94,14 @@ The improvement will vary by workload.</p>
<div class="section" id="ibm-fsp-based-machines">
<h2>IBM FSP based machines<a class="headerlink" href="#ibm-fsp-based-machines" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>FSP: Give up PSI link on shutdown
-This clears up some erroneous SRCs (error logs) in some situations.</p></li>
-<li><dl class="simple">
-<dt>Correctly report back Real Time Clock errors to host</dt><dd><p>Under certain rare error conditions, we could return an error code
+<li>FSP: Give up PSI link on shutdown
+This clears up some erroneous SRCs (error logs) in some situations.</li>
+<li><dl class="first docutils">
+<dt>Correctly report back Real Time Clock errors to host</dt>
+<dd>Under certain rare error conditions, we could return an error code
to the host OS that would cause current Linux kernels to get stuck
in an infinite loop during boot.
-This was introduced in skiboot-5.0-rc1.</p>
-</dd>
+This was introduced in skiboot-5.0-rc1.</dd>
</dl>
</li>
</ul>
@@ -107,7 +109,6 @@ This was introduced in skiboot-5.0-rc1.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -139,15 +140,17 @@ This was introduced in skiboot-5.0-rc1.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -164,15 +167,14 @@ This was introduced in skiboot-5.0-rc1.</p>
<li class="right" >
<a href="skiboot-5.1.11.html" title="skiboot-5.1.11"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.12</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.13.html b/doc/release-notes/skiboot-5.1.13.html
index 5c5de0e..5108172 100644
--- a/doc/release-notes/skiboot-5.1.13.html
+++ b/doc/release-notes/skiboot-5.1.13.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.13 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.13 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.12.html" title="skiboot-5.1.12"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.13</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,15 +53,15 @@
<div class="section" id="general">
<h2>General<a class="headerlink" href="#general" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>core/device.c: Sort nodes with <a class="reference external" href="mailto:name&#37;&#52;&#48;unit">name<span>&#64;</span>unit</a> names by unit</p>
+<li><p class="first">core/device.c: Sort nodes with <a class="reference external" href="mailto:name&#37;&#52;&#48;unit">name<span>&#64;</span>unit</a> names by unit</p>
<ul class="simple">
-<li><p>This gives predictable device tree ordering to the payload
-(usually petitboot)</p></li>
-<li><p>This means that utilities such as “lspci” will always return the same
-ordering.</p></li>
+<li>This gives predictable device tree ordering to the payload
+(usually petitboot)</li>
+<li>This means that utilities such as “lspci” will always return the same
+ordering.</li>
</ul>
</li>
-<li><p>Add OPAL_CONSOLE_FLUSH to the OPAL API
+<li><p class="first">Add OPAL_CONSOLE_FLUSH to the OPAL API
uart consoles only flush output when polled. The Linux kernel calls
these pollers frequently, except when in a panic state. As such, panic
messages are not fully printed unless the system is configured to reboot
@@ -77,15 +78,15 @@ fully printed out.</p>
<div class="section" id="capi">
<h2>CAPI<a class="headerlink" href="#capi" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>hmi: Identify the phb upon CAPI malfunction alert
+<li>hmi: Identify the phb upon CAPI malfunction alert
Previously, any error on a CAPI adapter would assume PHB0.
-This could cause issues on Firestone machines.</p></li>
+This could cause issues on Firestone machines.</li>
</ul>
</div>
<div class="section" id="gard-utility">
<h2>gard utility<a class="headerlink" href="#gard-utility" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Fix displaying â€cleared’ gard records
+<li><p class="first">Fix displaying â€cleared’ gard records
When a garded component is replaced hostboot detects this and updates the
gard partition.</p>
<p>Previously, there was ambiguity on if the gard record ID or the whole gard
@@ -96,14 +97,13 @@ record needed to be erased. This fix makes gard and hostboot agree.</p>
<div class="section" id="firestone-platform">
<h2>firestone platform<a class="headerlink" href="#firestone-platform" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>fix spacing in slot name
-The other SlotN names have no space.</p></li>
+<li>fix spacing in slot name
+The other SlotN names have no space.</li>
</ul>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -134,15 +134,17 @@ The other SlotN names have no space.</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -159,15 +161,14 @@ The other SlotN names have no space.</p></li>
<li class="right" >
<a href="skiboot-5.1.12.html" title="skiboot-5.1.12"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.13</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.14.html b/doc/release-notes/skiboot-5.1.14.html
index 7be2366..0fc38a7 100644
--- a/doc/release-notes/skiboot-5.1.14.html
+++ b/doc/release-notes/skiboot-5.1.14.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.14 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.14 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.13.html" title="skiboot-5.1.13"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.14</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -56,16 +57,15 @@ to the BMC VGA port.</p>
are wanting the neat offb framebuffer trick.</p>
<p>Changes are:</p>
<ul class="simple">
-<li><p>fsp: fix spelling of “advertise” in log message
-See: <a class="reference external" href="https://www.youtube.com/watch?v=8Gv0H-vPoDc">https://www.youtube.com/watch?v=8Gv0H-vPoDc</a></p></li>
-<li><p>Explicit 1:1 mapping in ranges properties have been added to PCI
+<li>fsp: fix spelling of “advertise” in log message
+See: <a class="reference external" href="https://www.youtube.com/watch?v=8Gv0H-vPoDc">https://www.youtube.com/watch?v=8Gv0H-vPoDc</a></li>
+<li>Explicit 1:1 mapping in ranges properties have been added to PCI
bridges. This allows a neat trick with offb and VGA ports that should
-probably not be told to young children.</p></li>
+probably not be told to young children.</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -85,15 +85,17 @@ probably not be told to young children.</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -110,15 +112,14 @@ probably not be told to young children.</p></li>
<li class="right" >
<a href="skiboot-5.1.13.html" title="skiboot-5.1.13"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.14</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.15.html b/doc/release-notes/skiboot-5.1.15.html
index fe47769..6822b66 100644
--- a/doc/release-notes/skiboot-5.1.15.html
+++ b/doc/release-notes/skiboot-5.1.15.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.15 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.15 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.14.html" title="skiboot-5.1.14"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.15</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -54,7 +55,6 @@ logging non-severe errors. As such, it is a minor bug fix update.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -74,15 +74,17 @@ logging non-severe errors. As such, it is a minor bug fix update.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -99,15 +101,14 @@ logging non-severe errors. As such, it is a minor bug fix update.</p>
<li class="right" >
<a href="skiboot-5.1.14.html" title="skiboot-5.1.14"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.15</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.16.html b/doc/release-notes/skiboot-5.1.16.html
index a3f3a0e..c3ce01c 100644
--- a/doc/release-notes/skiboot-5.1.16.html
+++ b/doc/release-notes/skiboot-5.1.16.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.16 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.16 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.15.html" title="skiboot-5.1.15"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.16</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -55,7 +56,7 @@
<div class="section" id="phb3-all-power8-platforms">
<h3>PHB3 (all POWER8 platforms)<a class="headerlink" href="#phb3-all-power8-platforms" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>hw/phb3: Ensure PQ bits are cleared in the IVC when masking IRQ
+<li><p class="first">hw/phb3: Ensure PQ bits are cleared in the IVC when masking IRQ
When we mask an interrupt, we may race with another interrupt coming
in from the hardware. If this occurs, the P and/or Q bit may end up
being set but we never EOI/clear them. This could result in a lost
@@ -65,8 +66,9 @@ being presented.</p>
interrupt masking at the same time as high interrupt load. The fix is
not specific to CAPI though.</p>
</li>
-<li><dl class="simple">
-<dt>hw/phb3: Fix potential race in EOI</dt><dd><p>When we EOI we need to clear the present (P) bit in the Interrupt
+<li><dl class="first docutils">
+<dt>hw/phb3: Fix potential race in EOI</dt>
+<dd><p class="first last">When we EOI we need to clear the present (P) bit in the Interrupt
Vector Cache (IVC). We must clear P ensuring that any additional
interrupts that come in aren’t lost while also maintaining coherency
with the Interrupt Vector Table (IVT).</p>
@@ -85,14 +87,14 @@ successful.</p>
<div class="section" id="fsp-platforms">
<h3>FSP platforms<a class="headerlink" href="#fsp-platforms" title="Permalink to this headline">¶</a></h3>
<ul class="simple">
-<li><p>OPAL:Handle mbox response with bad status:0x24 during FSP termination
-OPAL committed a predictive log with SRC BB822411 in some situations.</p></li>
+<li>OPAL:Handle mbox response with bad status:0x24 during FSP termination
+OPAL committed a predictive log with SRC BB822411 in some situations.</li>
</ul>
</div>
<div class="section" id="generic">
<h3>Generic<a class="headerlink" href="#generic" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>hmi: Fix a bug where partial hmi event was reported to host.
+<li><p class="first">hmi: Fix a bug where partial hmi event was reported to host.
This bug fix ensures the CPU PIR is reported correctly:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="p">[</span> <span class="mf">305.628283</span><span class="p">]</span> <span class="n">Fatal</span> <span class="n">Hypervisor</span> <span class="n">Maintenance</span> <span class="n">interrupt</span> <span class="p">[</span><span class="n">Not</span> <span class="n">recovered</span><span class="p">]</span>
<span class="p">[</span> <span class="mf">305.628341</span><span class="p">]</span> <span class="n">Error</span> <span class="n">detail</span><span class="p">:</span> <span class="n">Malfunction</span> <span class="n">Alert</span>
@@ -109,7 +111,6 @@ This bug fix ensures the CPU PIR is reported correctly:</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -142,15 +143,17 @@ This bug fix ensures the CPU PIR is reported correctly:</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -167,15 +170,14 @@ This bug fix ensures the CPU PIR is reported correctly:</p>
<li class="right" >
<a href="skiboot-5.1.15.html" title="skiboot-5.1.15"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.16</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.17.html b/doc/release-notes/skiboot-5.1.17.html
index 605ba2c..813d2e4 100644
--- a/doc/release-notes/skiboot-5.1.17.html
+++ b/doc/release-notes/skiboot-5.1.17.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.17 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.17 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.16.html" title="skiboot-5.1.16"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.17</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -54,18 +55,17 @@
<h2>Changes<a class="headerlink" href="#changes" title="Permalink to this headline">¶</a></h2>
<p>All platforms:</p>
<ul class="simple">
-<li><p>Fix a few typos in user visible (OPAL log) strings</p></li>
-<li><p>pci: Do a dummy config write to devices to establish bus number</p></li>
-<li><p>Make the XSCOM engine code more resilient to errors:
+<li>Fix a few typos in user visible (OPAL log) strings</li>
+<li>pci: Do a dummy config write to devices to establish bus number</li>
+<li>Make the XSCOM engine code more resilient to errors:
- hw/xscom: Reset XSCOM engine after querying sleeping core FIR
- hw/xscom: Reset XSCOM engine after finite number of retries when busy
-- xscom: Return OPAL_WRONG_STATE on XSCOM ops if CPU is asleep</p></li>
+- xscom: Return OPAL_WRONG_STATE on XSCOM ops if CPU is asleep</li>
</ul>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -93,15 +93,17 @@
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -118,15 +120,14 @@
<li class="right" >
<a href="skiboot-5.1.16.html" title="skiboot-5.1.16"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.17</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.18.html b/doc/release-notes/skiboot-5.1.18.html
index f0d9fe0..5b7cae4 100644
--- a/doc/release-notes/skiboot-5.1.18.html
+++ b/doc/release-notes/skiboot-5.1.18.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.18 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.18 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.17.html" title="skiboot-5.1.17"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.18</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,29 +54,28 @@
<p>Changes are:</p>
<p>All platforms:</p>
<ul class="simple">
-<li><p>opal/hmi: Fix a TOD HMI failure during a race condition.
-Rare race condition which meant we wouldn’t recover from TOD error</p></li>
-<li><p>hw/phb3: Update capi initialization sequence
+<li>opal/hmi: Fix a TOD HMI failure during a race condition.
+Rare race condition which meant we wouldn’t recover from TOD error</li>
+<li>hw/phb3: Update capi initialization sequence
The capi initialization sequence was revised in a circumvention
document when a â€link down’ error was converted from fatal to Endpoint
Recoverable. Other, non-capi, register setup was corrected even before
the initial open-source release of skiboot, but a few capi-related
registers were not updated then, so this patch fixes it.
The point is that a link-down error detected by the UTL logic will
-lead to an AIB fence, so that the CAPP unit can detect the error.</p></li>
+lead to an AIB fence, so that the CAPP unit can detect the error.</li>
</ul>
<p>FSP platforms:</p>
<ul class="simple">
-<li><p>FSP/ELOG: Fix OPAL generated elog resend logic</p></li>
-<li><p>FSP/ELOG: Fix possible event notifier hangs</p></li>
-<li><p>FSP/ELOG: Disable event notification if list is not consistent</p></li>
-<li><p>FSP/ELOG: Fix OPAL generated elog event notification</p></li>
-<li><p>FSP/ELOG: Disable event notification during kexec</p></li>
+<li>FSP/ELOG: Fix OPAL generated elog resend logic</li>
+<li>FSP/ELOG: Fix possible event notifier hangs</li>
+<li>FSP/ELOG: Disable event notification if list is not consistent</li>
+<li>FSP/ELOG: Fix OPAL generated elog event notification</li>
+<li>FSP/ELOG: Disable event notification during kexec</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -95,15 +95,17 @@ lead to an AIB fence, so that the CAPP unit can detect the error.</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -120,15 +122,14 @@ lead to an AIB fence, so that the CAPP unit can detect the error.</p></li>
<li class="right" >
<a href="skiboot-5.1.17.html" title="skiboot-5.1.17"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.18</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.19.html b/doc/release-notes/skiboot-5.1.19.html
index 1e452fa..1377b07 100644
--- a/doc/release-notes/skiboot-5.1.19.html
+++ b/doc/release-notes/skiboot-5.1.19.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.19 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.19 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.18.html" title="skiboot-5.1.18"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.19</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,49 +54,48 @@
<p>Changes are:</p>
<p>Generic:</p>
<ul class="simple">
-<li><p>Makefile: Disable stack protector due to gcc problems</p></li>
-<li><p>stack: Don’t recurse into __stack_chk_fail</p></li>
-<li><p>Makefile: Use -ffixed-r13
+<li>Makefile: Disable stack protector due to gcc problems</li>
+<li>stack: Don’t recurse into __stack_chk_fail</li>
+<li>Makefile: Use -ffixed-r13
We did not find evidence of this ever being a problem, but this fix
-is good and preventative.</p></li>
-<li><p>Limit number of “Poller recursion detected” errors to display
+is good and preventative.</li>
+<li>Limit number of “Poller recursion detected” errors to display
In some error conditions, we could spiral out of control on this
and spend all of our time printing the exact same backtrace.
-Limit it to 16 times, because 16 is a nice number.</p></li>
+Limit it to 16 times, because 16 is a nice number.</li>
</ul>
<p>FSP based Systems:</p>
<ul class="simple">
-<li><p>fsp: Don’t recurse pollers in ibm_fsp_terminate
+<li>fsp: Don’t recurse pollers in ibm_fsp_terminate
If we were to terminate in a poller, we’d call op_display() which
called pollers which hit the recursive poller warning, which ended
-in not much fun at all.</p></li>
+in not much fun at all.</li>
</ul>
<p>PCI:</p>
<ul class="simple">
-<li><p>hw/phb3: set PHB retry state correctly when fresetting during a creset</p></li>
-<li><dl class="simple">
-<dt>phb3: Lock the PHB on set_xive callbacks</dt><dd><p>Those are called by the interrupts core and thus skip the locking
-implicit in the PCI opal calls.</p>
-</dd>
+<li>hw/phb3: set PHB retry state correctly when fresetting during a creset</li>
+<li><dl class="first docutils">
+<dt>phb3: Lock the PHB on set_xive callbacks</dt>
+<dd>Those are called by the interrupts core and thus skip the locking
+implicit in the PCI opal calls.</dd>
</dl>
</li>
-<li><p>hw/{phb3, p7ioc}: Return success for freset on empty PHB
+<li>hw/{phb3, p7ioc}: Return success for freset on empty PHB
OPAL_CLOSED is returned when fundamental reset is issued on the
PHB who doesn’t have subordinate devices (root port excluded).
The kernel raises an error message, which is unnecessary. This
-returns OPAL_SUCCESS for this case to avoid the error message.</p></li>
-<li><p>hw/phb3: fix error handling in complete reset
+returns OPAL_SUCCESS for this case to avoid the error message.</li>
+<li>hw/phb3: fix error handling in complete reset
During a complete reset, when we get a timeout waiting for pending
transaction in state PHB3_STATE_CRESET_WAIT_CQ, we mark the PHB as broken
and return OPAL_PARAMETER.
Change the return code to OPAL_HARDWARE which is way more sensible, and set
the state to PHB3_STATE_FENCED so that the kernel can retry the complete
-reset.</p></li>
+reset.</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -115,15 +115,17 @@ reset.</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -140,15 +142,14 @@ reset.</p></li>
<li class="right" >
<a href="skiboot-5.1.18.html" title="skiboot-5.1.18"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.19</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.2.html b/doc/release-notes/skiboot-5.1.2.html
index 2ce9e4e..d05657f 100644
--- a/doc/release-notes/skiboot-5.1.2.html
+++ b/doc/release-notes/skiboot-5.1.2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.19.html" title="skiboot-5.1.19"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -55,7 +56,7 @@ release.</p>
<h2>Changes<a class="headerlink" href="#changes" title="Permalink to this headline">¶</a></h2>
<p>Over skiboot-5.1.1, we have the following changes:</p>
<ul>
-<li><p>phb3: Handle fence in phb3_pci_msi_check_q to fix hang</p>
+<li><p class="first">phb3: Handle fence in phb3_pci_msi_check_q to fix hang</p>
<p>If the PHB is fenced during phb3_pci_msi_check_q, it can get stuck in an
infinite loop waiting to lock the FFI. Further, as the phb lock is held
during this function it will prevent any other CPUs from dealing with
@@ -63,59 +64,61 @@ the fence, leading to the entire system hanging.</p>
<p>If the PHB_FFI_LOCK returns all Fs, return immediately to allow the
fence to be dealt with.</p>
</li>
-<li><p>phb3: Continue CAPP setup even if PHB is already in CAPP mode
-This fixes a critical bug in CAPI support.</p></li>
-<li><p>Platform hook for terminate call</p>
+<li><p class="first">phb3: Continue CAPP setup even if PHB is already in CAPP mode
+This fixes a critical bug in CAPI support.</p>
+</li>
+<li><p class="first">Platform hook for terminate call</p>
<ul class="simple">
-<li><p>on assert() or other firmware failure, we will make a SEL callout
-on ASTBMC platforms</p></li>
-<li><p>(slight) refactor of code for IBM-FSP platforms</p></li>
+<li>on assert() or other firmware failure, we will make a SEL callout
+on ASTBMC platforms</li>
+<li>(slight) refactor of code for IBM-FSP platforms</li>
</ul>
</li>
-<li><p>refactor slot naming code</p></li>
-<li><p>Slot names for Habanero platform</p></li>
-<li><p>misc improvements in userspace utilities (incl pflash, gard)</p></li>
-<li><p>build improvements</p>
+<li><p class="first">refactor slot naming code</p>
+</li>
+<li><p class="first">Slot names for Habanero platform</p>
+</li>
+<li><p class="first">misc improvements in userspace utilities (incl pflash, gard)</p>
+</li>
+<li><p class="first">build improvements</p>
<ul class="simple">
-<li><p>fixes for two compiler warnings were squashed in 5.1.1 commit,
-re-introduce the fixes.</p></li>
-<li><p>misc compiler/static analysis warning fixes</p></li>
+<li>fixes for two compiler warnings were squashed in 5.1.1 commit,
+re-introduce the fixes.</li>
+<li>misc compiler/static analysis warning fixes</li>
</ul>
</li>
-<li><p>gard utility:</p>
+<li><p class="first">gard utility:</p>
<ul class="simple">
-<li><p>If gard tool detects the GUARD PNOR partition is corrupted, it will
+<li>If gard tool detects the GUARD PNOR partition is corrupted, it will
pro-actively re-initialize it.
Modern Hostboot is more sensitive to the content of the GUARD partition
-in order to boot.</p></li>
-<li><p>Update record clearing to match Hostboots expectations
+in order to boot.</li>
+<li>Update record clearing to match Hostboots expectations
We now write ECC bytes throughout the whole partition.
-Without this fix, hostboot may not bring up the machine.</p></li>
-<li><p>In the event of a corrupted GUARD partition so that even the first entry
+Without this fix, hostboot may not bring up the machine.</li>
+<li>In the event of a corrupted GUARD partition so that even the first entry
cannot be read, the gard utility now provides the user with the option
-to wipe the entirety of the GUARD partition to attempt recovery.</p></li>
+to wipe the entirety of the GUARD partition to attempt recovery.</li>
</ul>
</li>
-<li><p>opal_prd utility:</p>
+<li><p class="first">opal_prd utility:</p>
<ul class="simple">
-<li><p>Add run command to pass through commands to HostBoot RunTime (HBRT)</p>
-<ul>
-<li><p>this is for OpenPower firmware developers only.</p></li>
+<li>Add run command to pass through commands to HostBoot RunTime (HBRT)<ul>
+<li>this is for OpenPower firmware developers only.</li>
</ul>
</li>
-<li><p>Add htmght-passthru command.</p>
-<ul>
-<li><p>this is for OpenPower firmware developers only.</p></li>
+<li>Add htmght-passthru command.<ul>
+<li>this is for OpenPower firmware developers only.</li>
</ul>
</li>
-<li><p>Add override interface to pass attribute-override information to HBRT.</p></li>
-<li><p>Server sends response in error path, so that client doesn’t block forever</p></li>
+<li>Add override interface to pass attribute-override information to HBRT.</li>
+<li>Server sends response in error path, so that client doesn’t block forever</li>
</ul>
</li>
-<li><p>external/mambo tcl scripts</p>
+<li><p class="first">external/mambo tcl scripts</p>
<ul class="simple">
-<li><p>Running little-endian kernels in mambo requires HILE to be set properly,
-which requires a bump in the machine’s pvr value to a DD2.x chip.</p></li>
+<li>Running little-endian kernels in mambo requires HILE to be set properly,
+which requires a bump in the machine’s pvr value to a DD2.x chip.</li>
</ul>
</li>
</ul>
@@ -127,260 +130,260 @@ Processed 67 csets from 11 developers
1 employers found
A total of 2258 lines added, 784 removed (delta 1474)</p>
<p>Developers with the most changesets</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 73%" />
-<col style="width: 27%" />
+<col width="73%" />
+<col width="27%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>24 (35.8%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>24 (35.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>18 (26.9%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>18 (26.9%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>8 (11.9%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>8 (11.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Neelesh Gupta</p></td>
-<td><p>5 (7.5%)</p></td>
+<tr class="row-odd"><td>Neelesh Gupta</td>
+<td>5 (7.5%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>5 (7.5%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>5 (7.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Daniel Axtens</p></td>
-<td><p>2 (3.0%)</p></td>
+<tr class="row-odd"><td>Daniel Axtens</td>
+<td>2 (3.0%)</td>
</tr>
-<tr class="row-even"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>1 (1.5%)</p></td>
+<tr class="row-even"><td>Samuel Mendoza-Jonas</td>
+<td>1 (1.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>1 (1.5%)</p></td>
+<tr class="row-odd"><td>Vaidyanathan Srinivasan</td>
+<td>1 (1.5%)</td>
</tr>
-<tr class="row-even"><td><p>Vipin K Parashar</p></td>
-<td><p>1 (1.5%)</p></td>
+<tr class="row-even"><td>Vipin K Parashar</td>
+<td>1 (1.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Ian Munsie</p></td>
-<td><p>1 (1.5%)</p></td>
+<tr class="row-odd"><td>Ian Munsie</td>
+<td>1 (1.5%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>1 (1.5%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>1 (1.5%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most changed lines</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 70%" />
-<col style="width: 30%" />
+<col width="70%" />
+<col width="30%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>969 (42.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Cyril Bur</td>
+<td>969 (42.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Neelesh Gupta</p></td>
-<td><p>433 (19.0%)</p></td>
+<tr class="row-odd"><td>Neelesh Gupta</td>
+<td>433 (19.0%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>304 (13.3%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>304 (13.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Vasant Hegde</p></td>
-<td><p>236 (10.3%)</p></td>
+<tr class="row-odd"><td>Vasant Hegde</td>
+<td>236 (10.3%)</td>
</tr>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>163 (7.1%)</p></td>
+<tr class="row-even"><td>Stewart Smith</td>
+<td>163 (7.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>135 (5.9%)</p></td>
+<tr class="row-odd"><td>Vaidyanathan Srinivasan</td>
+<td>135 (5.9%)</td>
</tr>
-<tr class="row-even"><td><p>Vipin K Parashar</p></td>
-<td><p>8 (0.4%)</p></td>
+<tr class="row-even"><td>Vipin K Parashar</td>
+<td>8 (0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Ian Munsie</p></td>
-<td><p>8 (0.4%)</p></td>
+<tr class="row-odd"><td>Ian Munsie</td>
+<td>8 (0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Daniel Axtens</p></td>
-<td><p>2 (0.1%)</p></td>
+<tr class="row-even"><td>Daniel Axtens</td>
+<td>2 (0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>2 (0.1%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>2 (0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>1 (0.0%)</p></td>
+<tr class="row-even"><td>Samuel Mendoza-Jonas</td>
+<td>1 (0.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most lines removed</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 28%" />
+<col width="72%" />
+<col width="28%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Daniel Axtens</p></td>
-<td><p>2 (0.3%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Daniel Axtens</td>
+<td>2 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>1 (0.1%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>1 (0.1%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most signoffs (total 44)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 70%" />
-<col style="width: 30%" />
+<col width="70%" />
+<col width="30%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>43 (97.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>43 (97.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Neelesh Gupta</p></td>
-<td><p>1 (2.3%)</p></td>
+<tr class="row-odd"><td>Neelesh Gupta</td>
+<td>1 (2.3%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most reviews (total 8)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 70%" />
-<col style="width: 30%" />
+<col width="70%" />
+<col width="30%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Patrick Williams</p></td>
-<td><p>5 (62.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Patrick Williams</td>
+<td>5 (62.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>3 (37.5%)</p></td>
+<tr class="row-odd"><td>Samuel Mendoza-Jonas</td>
+<td>3 (37.5%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most test credits (total 0)</p>
<p>Developers who gave the most tested-by credits (total 0)</p>
<p>Developers with the most report credits (total 1)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>1 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>1 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Developers who gave the most report credits (total 1)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>1 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Samuel Mendoza-Jonas</td>
+<td>1 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Top changeset contributors by employer</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>67 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>67 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Top lines changed by employer</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 66%" />
-<col style="width: 34%" />
+<col width="66%" />
+<col width="34%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>2281 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>2281 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Employers with the most signoffs (total 44)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>44 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>44 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Employers with the most hackers (total 11)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>11 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>11 (100.0%)</td>
</tr>
</tbody>
</table>
@@ -388,7 +391,6 @@ A total of 2258 lines added, 784 removed (delta 1474)</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -417,15 +419,17 @@ A total of 2258 lines added, 784 removed (delta 1474)</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -442,15 +446,14 @@ A total of 2258 lines added, 784 removed (delta 1474)</p>
<li class="right" >
<a href="skiboot-5.1.19.html" title="skiboot-5.1.19"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.20.html b/doc/release-notes/skiboot-5.1.20.html
index 5783c52..09fe593 100644
--- a/doc/release-notes/skiboot-5.1.20.html
+++ b/doc/release-notes/skiboot-5.1.20.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.20 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.20 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.2.html" title="skiboot-5.1.2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.20</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,7 +54,7 @@
All of the fixes have previously appeared in the 5.4.x stable series.</p>
<p>Changes are:</p>
<ul>
-<li><p>FSP/CONSOLE: Workaround for unresponsive ipmi daemon</p>
+<li><p class="first">FSP/CONSOLE: Workaround for unresponsive ipmi daemon</p>
<p>In some corner cases, where FSP is active but not responding to
console MBOX message (due to buggy IPMI) and we have heavy console
write happening from kernel, then eventually our console buffer
@@ -71,7 +72,7 @@ for new data. But in normal condition only FSP can update â€next_out’
pointer and if we touch that pointer, it may introduce some other
race conditions. Hence we decided to just new console write request.</p>
</li>
-<li><p>FSP: Set status field in response message for timed out message</p>
+<li><p class="first">FSP: Set status field in response message for timed out message</p>
<p>For timed out FSP messages, we set message status as “fsp_msg_timeout”.
But most FSP driver users (like surviellance) are ignoring this field.
They always look for FSP returned status value in callback function
@@ -88,17 +89,17 @@ response from FSP.</p>
<p>Here SURV code thought it got valid response from FSP. But actually we didn’t
receive response from FSP.</p>
</li>
-<li><p>FSP: Improve timeout message</p>
+<li><p class="first">FSP: Improve timeout message</p>
<p>Presently we print word0 and word1 in error log. word0 contains
sequence number and command class. One has to understand word0
format to identify command class.</p>
<p>Lets explicitly print command class, sub command etc.</p>
</li>
-<li><p>FSP/RTC: Remove local fsp_in_reset variable</p>
+<li><p class="first">FSP/RTC: Remove local fsp_in_reset variable</p>
<p>Now that we are using fsp_in_rr() to detect FSP reset/reload, fsp_in_reset
become redundant. Lets remove this local variable.</p>
</li>
-<li><p>FSP/RTC: Fix possible FSP R/R issue in rtc write path</p>
+<li><p class="first">FSP/RTC: Fix possible FSP R/R issue in rtc write path</p>
<p>fsp_opal_rtc_write() checks FSP status before queueing message to FSP. But if
FSP R/R starts before getting response to queued message then we will continue
to return OPAL_BUSY_EVENT to host. In some extreme condition host may
@@ -107,17 +108,17 @@ and return OPAL_SUCCESS to host.</p>
<p>This patch caches new values and returns OPAL_SUCCESS if FSP R/R is happening.
And once FSP is back we will send cached value to FSP.</p>
</li>
-<li><p>hw/fsp/rtc: read/write cached rtc tod on fsp hir.</p>
+<li><p class="first">hw/fsp/rtc: read/write cached rtc tod on fsp hir.</p>
<p>Currently fsp-rtc reads/writes the cached RTC TOD on an fsp
reset. Use latest fsp_in_rr() function to properly read the cached rtc
value when fsp reset initiated by the hir.</p>
<p>Below is the kernel trace when we set hw clock, when hir process starts.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">1727.775824</span><span class="p">]</span> <span class="n">NMI</span> <span class="n">watchdog</span><span class="p">:</span> <span class="n">BUG</span><span class="p">:</span> <span class="n">soft</span> <span class="n">lockup</span> <span class="o">-</span> <span class="n">CPU</span><span class="c1">#57 stuck for 23s! [hwclock:7688]</span>
<span class="p">[</span> <span class="mf">1727.775856</span><span class="p">]</span> <span class="n">Modules</span> <span class="n">linked</span> <span class="ow">in</span><span class="p">:</span> <span class="n">vmx_crypto</span> <span class="n">ibmpowernv</span> <span class="n">ipmi_powernv</span> <span class="n">uio_pdrv_genirq</span> <span class="n">ipmi_devintf</span> <span class="n">powernv_op_panel</span> <span class="n">uio</span> <span class="n">ipmi_msghandler</span> <span class="n">powernv_rng</span> <span class="n">leds_powernv</span> <span class="n">ip_tables</span> <span class="n">x_tables</span> <span class="n">autofs4</span> <span class="n">ses</span> <span class="n">enclosure</span> <span class="n">scsi_transport_sas</span> <span class="n">crc32c_vpmsum</span> <span class="n">lpfc</span> <span class="n">ipr</span> <span class="n">tg3</span> <span class="n">scsi_transport_fc</span>
-<span class="p">[</span> <span class="mf">1727.775883</span><span class="p">]</span> <span class="n">CPU</span><span class="p">:</span> <span class="mi">57</span> <span class="n">PID</span><span class="p">:</span> <span class="mi">7688</span> <span class="n">Comm</span><span class="p">:</span> <span class="n">hwclock</span> <span class="n">Not</span> <span class="n">tainted</span> <span class="mf">4.10.0</span><span class="o">-</span><span class="mi">14</span><span class="o">-</span><span class="n">generic</span> <span class="c1">#16-Ubuntu</span>
+<span class="p">[</span> <span class="mf">1727.775883</span><span class="p">]</span> <span class="n">CPU</span><span class="p">:</span> <span class="mi">57</span> <span class="n">PID</span><span class="p">:</span> <span class="mi">7688</span> <span class="n">Comm</span><span class="p">:</span> <span class="n">hwclock</span> <span class="n">Not</span> <span class="n">tainted</span> <span class="mf">4.10</span><span class="o">.</span><span class="mi">0</span><span class="o">-</span><span class="mi">14</span><span class="o">-</span><span class="n">generic</span> <span class="c1">#16-Ubuntu</span>
<span class="p">[</span> <span class="mf">1727.775883</span><span class="p">]</span> <span class="n">task</span><span class="p">:</span> <span class="n">c000000fdfdc8400</span> <span class="n">task</span><span class="o">.</span><span class="n">stack</span><span class="p">:</span> <span class="n">c000000fdfef4000</span>
<span class="p">[</span> <span class="mf">1727.775884</span><span class="p">]</span> <span class="n">NIP</span><span class="p">:</span> <span class="n">c00000000090540c</span> <span class="n">LR</span><span class="p">:</span> <span class="n">c0000000000846f4</span> <span class="n">CTR</span><span class="p">:</span> <span class="mi">000000003006</span><span class="n">dd70</span>
-<span class="p">[</span> <span class="mf">1727.775885</span><span class="p">]</span> <span class="n">REGS</span><span class="p">:</span> <span class="n">c000000fdfef79a0</span> <span class="n">TRAP</span><span class="p">:</span> <span class="mi">0901</span> <span class="n">Not</span> <span class="n">tainted</span> <span class="p">(</span><span class="mf">4.10.0</span><span class="o">-</span><span class="mi">14</span><span class="o">-</span><span class="n">generic</span><span class="p">)</span>
+<span class="p">[</span> <span class="mf">1727.775885</span><span class="p">]</span> <span class="n">REGS</span><span class="p">:</span> <span class="n">c000000fdfef79a0</span> <span class="n">TRAP</span><span class="p">:</span> <span class="mi">0901</span> <span class="n">Not</span> <span class="n">tainted</span> <span class="p">(</span><span class="mf">4.10</span><span class="o">.</span><span class="mi">0</span><span class="o">-</span><span class="mi">14</span><span class="o">-</span><span class="n">generic</span><span class="p">)</span>
<span class="p">[</span> <span class="mf">1727.775886</span><span class="p">]</span> <span class="n">MSR</span><span class="p">:</span> <span class="mi">9000000000009033</span> <span class="o">&lt;</span><span class="n">SF</span><span class="p">,</span><span class="n">HV</span><span class="p">,</span><span class="n">EE</span><span class="p">,</span><span class="n">ME</span><span class="p">,</span><span class="n">IR</span><span class="p">,</span><span class="n">DR</span><span class="p">,</span><span class="n">RI</span><span class="p">,</span><span class="n">LE</span><span class="o">&gt;</span>
<span class="p">[</span> <span class="mf">1727.775889</span><span class="p">]</span> <span class="n">CR</span><span class="p">:</span> <span class="mi">28024442</span> <span class="n">XER</span><span class="p">:</span> <span class="mi">20000000</span>
<span class="p">[</span> <span class="mf">1727.775890</span><span class="p">]</span> <span class="n">CFAR</span><span class="p">:</span> <span class="n">c00000000008472c</span> <span class="n">SOFTE</span><span class="p">:</span> <span class="mi">1</span>
@@ -143,8 +144,9 @@ value when fsp reset initiated by the hir.</p>
<p>With this fix ran fsp hir torture testcase in the above test
which is working fine.</p>
</li>
-<li><p>FSP/CHIPTOD: Return false in error path</p></li>
-<li><p>On FSP platforms: notify FSP of Platform Log ID after Host Initiated Reset Reload
+<li><p class="first">FSP/CHIPTOD: Return false in error path</p>
+</li>
+<li><p class="first">On FSP platforms: notify FSP of Platform Log ID after Host Initiated Reset Reload
Trigging a Host Initiated Reset (when the host detects the FSP has gone
out to lunch and should be rebooted), would cause “Unknown Command” messages
to appear in the OPAL log.</p>
@@ -159,7 +161,7 @@ to appear in the OPAL log.</p>
</pre></div>
</div>
</li>
-<li><p>hw/i2c: Fix early lock drop</p>
+<li><p class="first">hw/i2c: Fix early lock drop</p>
<p>When interacting with an I2C master the p8-i2c driver (common to p9)
aquires a per-master lock which it holds for the duration of it’s
interaction with the master. Unfortunately, when
@@ -169,7 +171,7 @@ contrary to the driver’s locking strategy which requires that the
caller aquire and drop the lock. This leads to a crash due to the
double unlock(), which skiboot treats as fatal.</p>
</li>
-<li><p>head.S: store all of LR and CTR</p>
+<li><p class="first">head.S: store all of LR and CTR</p>
<p>When saving the CTR and LR registers the skiboot exception handlers use the
â€stw’ instruction which only saves the lower 32 bits of the register. Given
these are both 64 bit registers this leads to some strange register dumps,
@@ -186,7 +188,7 @@ CR : 40004208 XER: 00000000
<p>In this dump the upper 32 bits of LR and CTR are actually stack gunk
which obscures the underlying issue.</p>
</li>
-<li><p>hw/fsp: Do not queue SP and SPCN class messages during reset/reload
+<li><p class="first">hw/fsp: Do not queue SP and SPCN class messages during reset/reload
In certain cases of communicating with the FSP (e.g. sensors), the OPAL FSP
driver returns a default code (async
completion) even though there is no known bound from the time of this error
@@ -199,7 +201,6 @@ knows to retry later.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -219,15 +220,17 @@ knows to retry later.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -244,15 +247,14 @@ knows to retry later.</p>
<li class="right" >
<a href="skiboot-5.1.2.html" title="skiboot-5.1.2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.20</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.21.html b/doc/release-notes/skiboot-5.1.21.html
index 6068faf..306e823 100644
--- a/doc/release-notes/skiboot-5.1.21.html
+++ b/doc/release-notes/skiboot-5.1.21.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.21 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.21 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.20.html" title="skiboot-5.1.20"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.21</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@
<p>This release contains one backported bug fix to the 5.1.x series.</p>
<p>Changes are:</p>
<ul>
-<li><p>FSP: Add check to detect FSP Reset/Reload inside fsp_sync_msg()</p>
+<li><p class="first">FSP: Add check to detect FSP Reset/Reload inside fsp_sync_msg()</p>
<p>During FSP Reset/Reload we move outstanding MBOX messages from msgq to
rr_queue including inflight message (fsp_reset_cmdclass()). But we are not
resetting inflight message state.</p>
@@ -66,7 +67,6 @@ if FSP is in R/R.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -86,15 +86,17 @@ if FSP is in R/R.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -111,15 +113,14 @@ if FSP is in R/R.</p>
<li class="right" >
<a href="skiboot-5.1.20.html" title="skiboot-5.1.20"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.21</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.3.html b/doc/release-notes/skiboot-5.1.3.html
index 83ea41a..c8fc8d4 100644
--- a/doc/release-notes/skiboot-5.1.3.html
+++ b/doc/release-notes/skiboot-5.1.3.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.3 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.3 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.21.html" title="skiboot-5.1.21"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -55,25 +56,29 @@ release.</p>
<h2>Changes<a class="headerlink" href="#changes" title="Permalink to this headline">¶</a></h2>
<p>Over skiboot-5.1.2, we have the following changes:</p>
<ul>
-<li><p>slot names for firestone platform</p></li>
-<li><p>fix display of LPC errors</p></li>
-<li><p>SBE based timer support</p>
+<li><p class="first">slot names for firestone platform</p>
+</li>
+<li><p class="first">fix display of LPC errors</p>
+</li>
+<li><p class="first">SBE based timer support</p>
<ul class="simple">
-<li><p>on supported platforms limits reliance on Linux heartbeat</p></li>
+<li>on supported platforms limits reliance on Linux heartbeat</li>
</ul>
</li>
-<li><p>fix use-after-free in fsp/ipmi</p></li>
-<li><p>fix hang on TOD/TB errors (time-of-day/timebase) on OpenPower systems</p>
+<li><p class="first">fix use-after-free in fsp/ipmi</p>
+</li>
+<li><p class="first">fix hang on TOD/TB errors (time-of-day/timebase) on OpenPower systems</p>
<ul class="simple">
-<li><p>On getting a Hypervizor Maintenance Interrupt to get the timebase
+<li>On getting a Hypervizor Maintenance Interrupt to get the timebase
back into a running state, we would call prlog which would use
the LPC UART console driver on OpenPower systems, which depends on
a working timebase, leading to a hang.
-We now don’t depend on a working timebase in this recovery codepath.</p></li>
+We now don’t depend on a working timebase in this recovery codepath.</li>
</ul>
</li>
-<li><p>enable prd for garrison platform</p></li>
-<li><p>PCI: Clear error bits after changing MPS
+<li><p class="first">enable prd for garrison platform</p>
+</li>
+<li><p class="first">PCI: Clear error bits after changing MPS
Chaning MPS on PCI upstream bridge might cause error bits set on
downstream endpoints when system boots into Linux as below case
shows:</p>
@@ -95,227 +100,227 @@ is changed. With the patch applied, no more error bits are seen.</p>
1 employers found
A total of 462 lines added, 163 removed (delta 299)</p>
<p>Developers with the most changesets</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 76%" />
-<col style="width: 24%" />
+<col width="76%" />
+<col width="24%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>5 (35.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>5 (35.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>4 (28.6%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>4 (28.6%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>2 (14.3%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>2 (14.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>1 (7.1%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>1 (7.1%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>1 (7.1%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>1 (7.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Neelesh Gupta</p></td>
-<td><p>1 (7.1%)</p></td>
+<tr class="row-odd"><td>Neelesh Gupta</td>
+<td>1 (7.1%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most changed lines</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 70%" />
-<col style="width: 30%" />
+<col width="70%" />
+<col width="30%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>407 (80.8%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>407 (80.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>23 (4.6%)</p></td>
+<tr class="row-odd"><td>Mahesh Salgaonkar</td>
+<td>23 (4.6%)</td>
</tr>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>19 (3.8%)</p></td>
+<tr class="row-even"><td>Gavin Shan</td>
+<td>19 (3.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>18 (3.6%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>18 (3.6%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>5 (1.0%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>5 (1.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Neelesh Gupta</p></td>
-<td><p>2 (0.4%)</p></td>
+<tr class="row-odd"><td>Neelesh Gupta</td>
+<td>2 (0.4%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most lines removed</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 70%" />
-<col style="width: 30%" />
+<col width="70%" />
+<col width="30%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>8 (4.9%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>8 (4.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Jeremy Kerr</p></td>
-<td><p>3 (1.8%)</p></td>
+<tr class="row-odd"><td>Jeremy Kerr</td>
+<td>3 (1.8%)</td>
</tr>
-<tr class="row-even"><td><p>Neelesh Gupta</p></td>
-<td><p>1 (0.6%)</p></td>
+<tr class="row-even"><td>Neelesh Gupta</td>
+<td>1 (0.6%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most signoffs (total 10)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>10 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>10 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most reviews (total 1)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Joel Stanley</p></td>
-<td><p>1 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Joel Stanley</td>
+<td>1 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most test credits (total 0)</p>
<p>Developers who gave the most tested-by credits (total 0)</p>
<p>Developers with the most report credits (total 1)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>John Walthour</p></td>
-<td><p>1 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>John Walthour</td>
+<td>1 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Developers who gave the most report credits (total 1)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>1 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Gavin Shan</td>
+<td>1 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Top changeset contributors by employer</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>14 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>14 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Top lines changed by employer</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>504 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>504 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Employers with the most signoffs (total 10)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>10 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>10 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Employers with the most hackers (total 6)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>6 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>6 (100.0%)</td>
</tr>
</tbody>
</table>
@@ -323,7 +328,6 @@ A total of 462 lines added, 163 removed (delta 299)</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -352,15 +356,17 @@ A total of 462 lines added, 163 removed (delta 299)</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -377,15 +383,14 @@ A total of 462 lines added, 163 removed (delta 299)</p>
<li class="right" >
<a href="skiboot-5.1.21.html" title="skiboot-5.1.21"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.4.html b/doc/release-notes/skiboot-5.1.4.html
index ddf03df..4a1bc4f 100644
--- a/doc/release-notes/skiboot-5.1.4.html
+++ b/doc/release-notes/skiboot-5.1.4.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.4 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.4 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.3.html" title="skiboot-5.1.3"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -56,7 +57,7 @@ release.</p>
<h2>Changes<a class="headerlink" href="#changes" title="Permalink to this headline">¶</a></h2>
<p>Over skiboot-5.1.3, we have the following changes:</p>
<ul>
-<li><p>Rate limit OPAL_MSG_OCC to only one outstanding message to host</p>
+<li><p class="first">Rate limit OPAL_MSG_OCC to only one outstanding message to host</p>
<p>In the event of a lot of OCC events (or many CPU cores), we could
send many OCC messages to the host, which if it wasn’t calling
opal_get_msg really often, would cause skiboot to malloc() additional
@@ -67,7 +68,7 @@ from Linux being able to call opal_get_msg, causing these to queue up
and get “opalmsg: No available node in the free list, allocating” warnings
followed by tonnes of backtraces of failing memory allocations.</p>
</li>
-<li><p>Ensure reserved memory ranges are exposed correctly to host
+<li><p class="first">Ensure reserved memory ranges are exposed correctly to host
(fix corrupted SLW image)</p>
<p>We seem to have not hit this on ASTBMC based OpenPower machines, but was
certainly hit on FSP based machines</p>
@@ -77,7 +78,6 @@ certainly hit on FSP based machines</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -105,15 +105,17 @@ certainly hit on FSP based machines</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -130,15 +132,14 @@ certainly hit on FSP based machines</p>
<li class="right" >
<a href="skiboot-5.1.3.html" title="skiboot-5.1.3"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.5.html b/doc/release-notes/skiboot-5.1.5.html
index dc2e293..e05c7c1 100644
--- a/doc/release-notes/skiboot-5.1.5.html
+++ b/doc/release-notes/skiboot-5.1.5.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.5 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.5 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.4.html" title="skiboot-5.1.4"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -58,25 +59,26 @@ fix release.</p>
<div class="section" id="generic">
<h2>Generic<a class="headerlink" href="#generic" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>centaur: Add indirect XSCOM support
+<li>centaur: Add indirect XSCOM support
Fixes a bug where opal-prd would not be able to recover from a bunch
-of errors as the indirect XSCOMs to centaurs would fail.</p></li>
-<li><p>xscom: Fix logging of indirect XSCOM errors
-Better logging of error messages.</p></li>
-<li><p>PHB3: Fix wrong PE number in error injection</p></li>
-<li><p>Improvement in boot_test.sh utility to support copying a pflash binary
-to BMCs.</p></li>
+of errors as the indirect XSCOMs to centaurs would fail.</li>
+<li>xscom: Fix logging of indirect XSCOM errors
+Better logging of error messages.</li>
+<li>PHB3: Fix wrong PE number in error injection</li>
+<li>Improvement in boot_test.sh utility to support copying a pflash binary
+to BMCs.</li>
</ul>
</div>
<div class="section" id="ast-bmc-machines">
<h2>AST BMC machines<a class="headerlink" href="#ast-bmc-machines" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><dl>
-<dt>ipmi-sel: Run power action immediately if host not up</dt><dd><p>Our normal sequence for a soft power action (IPMI â€power soft’ or
+<li><dl class="first docutils">
+<dt>ipmi-sel: Run power action immediately if host not up</dt>
+<dd><p class="first">Our normal sequence for a soft power action (IPMI â€power soft’ or
â€power cycle’) involve receiving a SEL from the BMC, sending a message
to Linux’s opal platform support which instructs the host OS to shut
down, and finally the host will request OPAL to cut power.</p>
-<p>When the host is not yet up we will send the message to /dev/null, and
+<p class="last">When the host is not yet up we will send the message to /dev/null, and
no action will be taken. This patches changes that behaviour to perform
the action immediately if we know how.</p>
</dd>
@@ -87,15 +89,14 @@ the action immediately if we know how.</p>
<div class="section" id="openpower-machines">
<h2>OpenPower machines:<a class="headerlink" href="#openpower-machines" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>opal-prd: Increase IPMI timeout to a slightly better value
+<li>opal-prd: Increase IPMI timeout to a slightly better value
Proactively bump the timeout to 5seconds to match current value in petitboot
-Observed in the wild that this fixes bugs for petitboot.</p></li>
+Observed in the wild that this fixes bugs for petitboot.</li>
</ul>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -126,15 +127,17 @@ Observed in the wild that this fixes bugs for petitboot.</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -151,15 +154,14 @@ Observed in the wild that this fixes bugs for petitboot.</p></li>
<li class="right" >
<a href="skiboot-5.1.4.html" title="skiboot-5.1.4"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.6.html b/doc/release-notes/skiboot-5.1.6.html
index 975489f..dbc8c9c 100644
--- a/doc/release-notes/skiboot-5.1.6.html
+++ b/doc/release-notes/skiboot-5.1.6.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.6 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.6 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.5.html" title="skiboot-5.1.5"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.6</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -57,7 +58,7 @@ fix release.</p>
<div class="section" id="generic">
<h3>Generic:<a class="headerlink" href="#generic" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>Ensure we run pollers in cpu_wait_job()</p>
+<li><p class="first">Ensure we run pollers in cpu_wait_job()</p>
<p>In root causing a bug on AST BMC Alistair found that pollers weren’t
being run for around 3800ms.</p>
<p>This could show as not resetting the boot count sensor on successful
@@ -68,7 +69,7 @@ boot.</p>
<div class="section" id="ast-bmc-machines">
<h3>AST BMC Machines<a class="headerlink" href="#ast-bmc-machines" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>hw/bt.c: Check for timeout after checking for message response</p>
+<li><p class="first">hw/bt.c: Check for timeout after checking for message response</p>
<p>When deciding if a BT message has timed out we should first check for
a message response. This will ensure that messages will not time out
if there was a delay calling the pollers.</p>
@@ -81,7 +82,6 @@ boot.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -113,15 +113,17 @@ boot.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -138,15 +140,14 @@ boot.</p>
<li class="right" >
<a href="skiboot-5.1.5.html" title="skiboot-5.1.5"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.6</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.7.html b/doc/release-notes/skiboot-5.1.7.html
index c0922ac..5eca0eb 100644
--- a/doc/release-notes/skiboot-5.1.7.html
+++ b/doc/release-notes/skiboot-5.1.7.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.7 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.7 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.6.html" title="skiboot-5.1.6"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.7</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -54,19 +55,19 @@ fix release with one important bug fix for FSP systems.</p>
<p>Over skiboot-5.1.6, we have the following changes:</p>
<p>Generic:</p>
<ul class="simple">
-<li><dl class="simple">
-<dt>PHB3: Retry fundamental reset</dt><dd><p>This introduces another PHB3 state (PHB3_STATE_FRESET_START)
+<li><dl class="first docutils">
+<dt>PHB3: Retry fundamental reset</dt>
+<dd>This introduces another PHB3 state (PHB3_STATE_FRESET_START)
allowing to redo fundamental reset if the link doesn’t come up
in time at the first attempt, to improve the robustness of PHB’s
fundamental reset. If the link comes up after the first reset,
-the 2nd reset won’t be issued at all.</p>
-</dd>
+the 2nd reset won’t be issued at all.</dd>
</dl>
</li>
</ul>
<p>FSP based systems:</p>
<ul>
-<li><p>hw/fsp/fsp-leds.c: use allocated buffer for FSP_CMD_GET_LED_LIST response</p>
+<li><p class="first">hw/fsp/fsp-leds.c: use allocated buffer for FSP_CMD_GET_LED_LIST response</p>
<p>This fixes a bug where we would overwrite roughly 4kb of memory belonging
to Linux when the FSP would ask firmware for a list of LEDs in the system.
This wouldn’t happen often (once before Linux was running and possibly
@@ -77,7 +78,6 @@ for this corruption to show up and be detected.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -97,15 +97,17 @@ for this corruption to show up and be detected.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -122,15 +124,14 @@ for this corruption to show up and be detected.</p>
<li class="right" >
<a href="skiboot-5.1.6.html" title="skiboot-5.1.6"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.7</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.8.html b/doc/release-notes/skiboot-5.1.8.html
index 91d4f3e..8289d07 100644
--- a/doc/release-notes/skiboot-5.1.8.html
+++ b/doc/release-notes/skiboot-5.1.8.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.8 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.8 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.7.html" title="skiboot-5.1.7"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.8</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,7 +54,7 @@
fix release, with a single fix for recovery from a (rare) error.</p>
<p>Over skiboot-5.1.7, we have the following change:</p>
<ul>
-<li><p>opal/hmi: Fix a soft lockup issue on Hypervisor Maintenance Interrupt
+<li><p class="first">opal/hmi: Fix a soft lockup issue on Hypervisor Maintenance Interrupt
for certain timebase errors.</p>
<p>We also introduce a timeout to handle the worst situation where all other
threads are badly stuck without setting a cleanup done bit. Under such
@@ -64,7 +65,6 @@ kernel.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -84,15 +84,17 @@ kernel.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -109,15 +111,14 @@ kernel.</p>
<li class="right" >
<a href="skiboot-5.1.7.html" title="skiboot-5.1.7"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.8</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.1.9.html b/doc/release-notes/skiboot-5.1.9.html
index d80ead0..5f1c2c4 100644
--- a/doc/release-notes/skiboot-5.1.9.html
+++ b/doc/release-notes/skiboot-5.1.9.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.1.9 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.1.9 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.8.html" title="skiboot-5.1.8"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.9</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,15 +54,14 @@
fix release, with a single fix to help diagnosis after a rare error condition.</p>
<p>Over skiboot-5.1.8, we have the following change:</p>
<ul class="simple">
-<li><p>opal/hmi: Signal PRD about NX unit checkstop.
+<li>opal/hmi: Signal PRD about NX unit checkstop.
We now signal Processor Recovery &amp; Diagnostics (PRD) correctly following
-an NX unit checkstop</p></li>
-<li><p>minor fix to the boot_test.sh test script</p></li>
+an NX unit checkstop</li>
+<li>minor fix to the boot_test.sh test script</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -81,15 +81,17 @@ an NX unit checkstop</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -106,15 +108,14 @@ an NX unit checkstop</p></li>
<li class="right" >
<a href="skiboot-5.1.8.html" title="skiboot-5.1.8"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.1.9</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.10-rc1.html b/doc/release-notes/skiboot-5.10-rc1.html
index a61b1ab..90baab7 100644
--- a/doc/release-notes/skiboot-5.10-rc1.html
+++ b/doc/release-notes/skiboot-5.10-rc1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.10-rc1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.10-rc1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.10.html" title="skiboot-5.10"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -60,12 +61,12 @@ This release will be targeted to early POWER9 systems.</p>
<div class="section" id="new-features">
<h2>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hdata: Parse IPL FW feature settings</p>
+<li><p class="first">hdata: Parse IPL FW feature settings</p>
<p>Add parsing for the firmware feature flags in the HDAT. This
indicates the settings of various parameters which are set at IPL time
by firmware.</p>
</li>
-<li><p>opal/xstop: Use nvram option to enable/disable sw checkstop.</p>
+<li><p class="first">opal/xstop: Use nvram option to enable/disable sw checkstop.</p>
<p>Add a mechanism to enable/disable sw checkstop by looking at nvram option
opal-sw-xstop=&lt;enable/disable&gt;.</p>
<p>For now this patch disables the sw checkstop trigger unless explicitly
@@ -86,7 +87,7 @@ checkstop by default.</p>
</pre></div>
</div>
</li>
-<li><p>hdata: Parse SPD data</p>
+<li><p class="first">hdata: Parse SPD data</p>
<blockquote>
<div><p>Parse SPD data and populate device tree.</p>
<p>list of properties parsing from SPD:</p>
@@ -108,12 +109,13 @@ checkstop by default.</p>
<p>Also update documentation.</p>
</div></blockquote>
</li>
-<li><p>hdata: Add memory hierarchy under xscom node</p>
+<li><p class="first">hdata: Add memory hierarchy under xscom node</p>
<p>We have memory to chip mapping but doesn’t have complete memory hierarchy.
This patch adds memory hierarchy under xscom node. This is specific to
P9 system as these hierarchy may change between processor generation.</p>
-<dl class="simple">
-<dt>It uses memory controller ID details and populates nodes like:</dt><dd><p>xscom&#64;&lt;addr&gt;/mcbist&#64;&lt;mcbist_id&gt;/mcs&#64;&lt;mcs_id&gt;/mca&#64;&lt;mca_id&gt;/dimm&#64;&lt;resource_id&gt;</p>
+<dl class="docutils">
+<dt>It uses memory controller ID details and populates nodes like:</dt>
+<dd><p class="first last">xscom&#64;&lt;addr&gt;/mcbist&#64;&lt;mcbist_id&gt;/mcs&#64;&lt;mcs_id&gt;/mca&#64;&lt;mca_id&gt;/dimm&#64;&lt;resource_id&gt;</p>
</dd>
</dl>
<p>Also this patch adds few properties under dimm node.
@@ -128,7 +130,7 @@ we look to enabling by default in the next release.</p>
around reboot and error conditions. See the full API documentation for details:
<a class="reference internal" href="../opal-api/opal-quiesce-158.html#opal-quiesce"><span class="std std-ref">OPAL_QUIESCE</span></a>.</p>
<ul>
-<li><p>fast-reboot: bare bones fast reboot implementation for POWER9</p>
+<li><p class="first">fast-reboot: bare bones fast reboot implementation for POWER9</p>
<p>This is an initial fast reboot implementation for p9 which has only been
tested on the Witherspoon platform, and without the use of NPUs, NX/VAS,
etc.</p>
@@ -136,19 +138,19 @@ etc.</p>
reboots. It is hidden behind the traditional fast-reboot experimental
nvram option, until more platforms and configurations are tested.</p>
</li>
-<li><p>fast-reboot: move boot CPU clean-up logically together with secondaries</p>
+<li><p class="first">fast-reboot: move boot CPU clean-up logically together with secondaries</p>
<p>Move the boot CPU clean-up and state transition to active, logically
together with secondaries. Don’t release secondaries from fast reboot
hold until everyone has cleaned up and transitioned to active.</p>
<p>This is cosmetic, but it is helpful to run the fast reboot state machine
the same way on all CPUs.</p>
</li>
-<li><p>fast-reboot: improve failure error messages</p>
+<li><p class="first">fast-reboot: improve failure error messages</p>
<p>Change existing failure error messages to PR_NOTICE so they get
printed to the console, and add some new ones. It’s not a more
severe class because it falls back to IPL on failure.</p>
</li>
-<li><p>fast-reboot: quiesce opal before initiating a fast reboot</p>
+<li><p class="first">fast-reboot: quiesce opal before initiating a fast reboot</p>
<p>Switch fast reboot to use quiescing rather than “wait for a while”.</p>
<p>If firmware can not be quiesced, then fast reboot is skipped. This
significantly improves the robustness of fast reboot in the face of
@@ -160,7 +162,7 @@ can be removed.</p>
reduce fast reboot times by nearly 200ms, because quiescing usually
takes very little time.</p>
</li>
-<li><p>core: Add support for quiescing OPAL</p>
+<li><p class="first">core: Add support for quiescing OPAL</p>
<p>Quiescing is ensuring all host controlled CPUs (except the current
one) are out of OPAL and prevented from entering. This can be use in
debug and shutdown paths, particularly with system reset sequences.</p>
@@ -170,7 +172,7 @@ adds logic to “hold” or “reject” at entry time, if OPAL is quiesced.</p>
can be used for shutdown, kexec, and before generating sreset IPIs for
debugging (so the debug code does not recurse into OPAL).</p>
</li>
-<li><p>dctl: p9 increase thread quiesce timeout</p>
+<li><p class="first">dctl: p9 increase thread quiesce timeout</p>
<p>We require all instructions to be completed before a thread is
considered stopped, by the dctl interface. Long running instructions
like cache misses and CI loads may take a significant amount of time
@@ -185,45 +187,46 @@ stuck in firmware.</p>
<h3>POWER9 power saving<a class="headerlink" href="#power9-power-saving" title="Permalink to this headline">¶</a></h3>
<p>There is much improved support for deeper sleep/idle (stop) states on POWER9.</p>
<ul>
-<li><p>OCC: Increase max pstate check on P9 to 255</p>
+<li><p class="first">OCC: Increase max pstate check on P9 to 255</p>
<p>This has changed from P8, we can now have &gt; 127 pstates.</p>
<p>This was observed on Boston during WoF bring up.</p>
</li>
-<li><p>SLW: Add idle state stop5 for DD2.0 and above</p>
+<li><p class="first">SLW: Add idle state stop5 for DD2.0 and above</p>
<p>Adding stop5 idle state with rough residency and latency numbers.</p>
</li>
-<li><p>SLW: Add p9_stop_api calls for IMC</p>
+<li><p class="first">SLW: Add p9_stop_api calls for IMC</p>
<p>Add p9_stop_api for EVENT_MASK and PDBAR scoms. These scoms are lost on
wakeup from stop11.</p>
</li>
-<li><p>SCOM restore for DARN and XIVE</p>
+<li><p class="first">SCOM restore for DARN and XIVE</p>
<p>While waking up from stop11, we want NCU_DARN_BAR to have enable bit set.
Without this stop_api call, the value restored is without enable bit set.
We loose NCU_SPEC_BAR when the quad goes into stop11, stop_api will
restore while waking up from stop11.</p>
</li>
-<li><p>SLW: Call p9_stop_api only if deep_states are enabled</p>
+<li><p class="first">SLW: Call p9_stop_api only if deep_states are enabled</p>
<p>All init time p9_stop_api calls have been isolated to slw_late_init. If
p9_stop_api fails, then the deep states can be excluded from device tree.</p>
<p>For p9_stop_api called after device-tree for cpuidle is created ,
has_deep_states will be used to check if this call is even required.</p>
</li>
-<li><p>Better handle errors in setting up sleep states (p9_stop_api)</p>
+<li><p class="first">Better handle errors in setting up sleep states (p9_stop_api)</p>
<p>We won’t put affected stop states in the device tree if the wakeup
engine is not present or has failed.</p>
</li>
-<li><p>SCOM Restore: Increased the EQ SCOM restore limit.</p>
+<li><p class="first">SCOM Restore: Increased the EQ SCOM restore limit.</p>
<p>Commit increases the SCOM restore limit from 16 to 31.</p>
</li>
-<li><p>hw/dts: retry special wakeup operation if core still gated</p>
+<li><p class="first">hw/dts: retry special wakeup operation if core still gated</p>
<p>It has been observed that in some cases the special wakeup
operation can “succeed” but the core is still in a gated/offline
state.</p>
<p>Check for this state after attempting to wakeup a core and retry
the wakeup if necessary.</p>
</li>
-<li><p>core/direct-controls: add function to read core gated state</p></li>
-<li><p>core/direct-controls: wait for core special wkup bit cleared</p>
+<li><p class="first">core/direct-controls: add function to read core gated state</p>
+</li>
+<li><p class="first">core/direct-controls: wait for core special wkup bit cleared</p>
<p>When clearing special wakeup bit on a core, wait until the
bit is actually cleared by the hardware in the status register
until returning success.</p>
@@ -232,18 +235,18 @@ special wakeup request is cleared but the firmware is still
processing the request and the next attempt to set the bit
reads an immediate success from the previous operation.</p>
</li>
-<li><p>p9_stop_api: PM: Added support for version control in SCOM restore entries.</p>
+<li><p class="first">p9_stop_api: PM: Added support for version control in SCOM restore entries.</p>
<ul class="simple">
-<li><p>adds version info in SCOM restore entry header</p></li>
-<li><p>adds version specific details in SCOM restore entry header</p></li>
-<li><p>retains old behaviour of SGPE Hcode’s base version</p></li>
+<li>adds version info in SCOM restore entry header</li>
+<li>adds version specific details in SCOM restore entry header</li>
+<li>retains old behaviour of SGPE Hcode’s base version</li>
</ul>
</li>
-<li><p>p9_stop_api: EQ SCOM Restore: Introduced version control in SCOM restore entry.</p>
+<li><p class="first">p9_stop_api: EQ SCOM Restore: Introduced version control in SCOM restore entry.</p>
<ul class="simple">
-<li><p>introduces version control in header of SCOM restore entry</p></li>
-<li><p>ensures backward compatibility</p></li>
-<li><p>introduces flexibility to handle any number of SCOM restore entry.</p></li>
+<li>introduces version control in header of SCOM restore entry</li>
+<li>ensures backward compatibility</li>
+<li>introduces flexibility to handle any number of SCOM restore entry.</li>
</ul>
</li>
</ul>
@@ -255,13 +258,13 @@ functionality that we have on POWER8 systems, that is, we have the mechanisms in
place to boot to petitboot (i.e. to BOOTKERNEL).</p>
<p>See the <a class="reference internal" href="../stb.html#stb-overview"><span class="std std-ref">Secure and Trusted Boot Library (LibSTB) Documentation</span></a> for full documentation of OPAL secure and trusted boot.</p>
<ul>
-<li><p>allow secure boot if not enforcing it</p>
+<li><p class="first">allow secure boot if not enforcing it</p>
<p>We check the secure boot containers no matter what, only <em>enforcing</em>
secure boot if we’re booting in secure mode. This gives us an extra
layer of checking firmware is legit even when secure mode isn’t enabled,
as well as being really useful for testing.</p>
</li>
-<li><p>libstb/(create|print)-container: Sync with sb-signing-utils</p>
+<li><p class="first">libstb/(create|print)-container: Sync with sb-signing-utils</p>
<p>The sb-signing-utils project has improved upon the skeleton
create-container tool that existed in skiboot, including
being able to (quite easily) create <em>signed</em> images.</p>
@@ -277,44 +280,45 @@ upstream project.</p>
at v0.3-5-gcb111c03ad7f
(Some discussion ongoing on the changes, another sync will come shortly)</p>
</li>
-<li><p>doc: update libstb documentation with POWER9 changes.
+<li><p class="first">doc: update libstb documentation with POWER9 changes.
See: <a class="reference internal" href="../stb.html#stb-overview"><span class="std std-ref">Secure and Trusted Boot Library (LibSTB) Documentation</span></a>.</p>
<p>POWER9 changes reflected in the libstb:</p>
<blockquote>
<div><ul class="simple">
-<li><p>bumped ibm,secureboot node to v2</p></li>
-<li><p>added ibm,cvc node</p></li>
-<li><p>hash-algo superseded by hw-key-hash-size</p></li>
+<li>bumped ibm,secureboot node to v2</li>
+<li>added ibm,cvc node</li>
+<li>hash-algo superseded by hw-key-hash-size</li>
</ul>
</div></blockquote>
</li>
-<li><p>libstb/cvc: update memory-region to point to /reserved-memory</p>
+<li><p class="first">libstb/cvc: update memory-region to point to /reserved-memory</p>
<p>The linux documentation, reserved-memory.txt, says that memory-region is
a phandle that pairs to a children of /reserved-memory.</p>
-<dl class="simple">
-<dt>This updates /ibm,secureboot/ibm,cvc/memory-region to point to</dt><dd><p>/reserved-memory/secure-crypt-algo-code instead of
+<dl class="docutils">
+<dt>This updates /ibm,secureboot/ibm,cvc/memory-region to point to</dt>
+<dd><p class="first last">/reserved-memory/secure-crypt-algo-code instead of
/ibm,hostboot/reserved-memory/secure-crypt-algo-code.</p>
</dd>
</dl>
</li>
-<li><p>libstb: add support for ibm,secureboot-v2</p>
+<li><p class="first">libstb: add support for ibm,secureboot-v2</p>
<p>ibm,secureboot-v2 changes:</p>
<blockquote>
<div><ul class="simple">
-<li><p>The Container Verification Code is represented by the ibm,cvc node.</p></li>
-<li><p>Each ibm,cvc child describes a CVC service.</p></li>
-<li><p>hash-algo is superseded by hw-key-hash-size.</p></li>
+<li>The Container Verification Code is represented by the ibm,cvc node.</li>
+<li>Each ibm,cvc child describes a CVC service.</li>
+<li>hash-algo is superseded by hw-key-hash-size.</li>
</ul>
</div></blockquote>
</li>
-<li><p>hdata/tpmrel.c: add ibm, cvc device tree node</p>
+<li><p class="first">hdata/tpmrel.c: add ibm, cvc device tree node</p>
<p>In P9, the Container Verification Code is stored in a hostboot reserved
memory and the list of provided CVC services is stored in the
TPMREL_IDATA_HASH_VERIF_OFFSETS idata array. Each CVC service has an
offset and version.</p>
<p>This adds the ibm,cvc device tree node and its documentation.</p>
</li>
-<li><p>hdata/tpmrel.c: add firmware event log info to the tpm node</p>
+<li><p class="first">hdata/tpmrel.c: add firmware event log info to the tpm node</p>
<p>This parses the firmware event log information from the
secureboot_tpm_info HDAT structure and add it to the tpm device tree
node.</p>
@@ -322,18 +326,18 @@ node.</p>
corresponding to a master processor that has a tpm device, however,
multiple tpm is not supported.</p>
</li>
-<li><p>hdata/spira: add ibm,secureboot node in P9</p>
+<li><p class="first">hdata/spira: add ibm,secureboot node in P9</p>
<p>In P9, skiboot builds the device tree from the HDAT. These are the
“ibm,secureboot” node changes compared to P8:</p>
<blockquote>
<div><ul class="simple">
-<li><p>The Container-Verification-Code (CVC), a.k.a. ROM code, is no longer
+<li>The Container-Verification-Code (CVC), a.k.a. ROM code, is no longer
stored in a secure ROM with static address. In P9, it is stored in a
hostboot reserved memory and each service provided also has a version,
-not only an offset.</p></li>
-<li><p>The hash-algo property is not provided via HDAT, instead it provides
+not only an offset.</li>
+<li>The hash-algo property is not provided via HDAT, instead it provides
the hw-key-hash-size, which is indeed the information required by the
-CVC to verify containers.</p></li>
+CVC to verify containers.</li>
</ul>
</div></blockquote>
<p>This parses the iplparams_sysparams HDAT structure and creates the
@@ -341,20 +345,20 @@ CVC to verify containers.</p></li>
<p>In “ibm,secureboot-v2”:</p>
<blockquote>
<div><ul class="simple">
-<li><p>hash-algo property is superseded by hw-key-hash-size.</p></li>
-<li><p>container verification code is explicitly described by a child node.
-Added in a subsequent patch.</p></li>
+<li>hash-algo property is superseded by hw-key-hash-size.</li>
+<li>container verification code is explicitly described by a child node.
+Added in a subsequent patch.</li>
</ul>
</div></blockquote>
-<p>See <a class="reference internal" href="../device-tree/ibm%2Csecureboot.html#device-tree-ibm-secureboot"><span class="std std-ref">ibm,secureboot</span></a> for documentation.</p>
+<p>See <a class="reference internal" href="../device-tree/ibm,secureboot.html#device-tree-ibm-secureboot"><span class="std std-ref">ibm,secureboot</span></a> for documentation.</p>
</li>
-<li><p>libstb/tpm_chip.c: define pr_fmt and fix messages logged</p>
+<li><p class="first">libstb/tpm_chip.c: define pr_fmt and fix messages logged</p>
<p>This defines pr_fmt and also fix messages logged:</p>
<blockquote>
<div><ul class="simple">
-<li><p>EV_SEPARATOR instead of 0xFFFFFFFF</p></li>
-<li><p>when an event is measured it also prints the tpm id, event type and
-event log length</p></li>
+<li>EV_SEPARATOR instead of 0xFFFFFFFF</li>
+<li>when an event is measured it also prints the tpm id, event type and
+event log length</li>
</ul>
</div></blockquote>
<p>Now we can filter the messages logged by libstb and its
@@ -363,7 +367,7 @@ sub-modules by running:</p>
</pre></div>
</div>
</li>
-<li><p>libstb/tss: update the list of event types supported</p>
+<li><p class="first">libstb/tss: update the list of event types supported</p>
<p>Skiboot, precisely the tpmLogMgr, initializes the firmware event log by
calculating its length so that a new event can be recorded without
exceeding the log size. In order to calculate the size, it walks through
@@ -373,29 +377,29 @@ of the log.</p>
<p>This updates the list of event types with all of those supported by
hostboot. Thus, skiboot can properly calculate the event log length.</p>
</li>
-<li><p>tpm_i2c_nuvoton: add nuvoton, npct601 to the compatible property</p>
+<li><p class="first">tpm_i2c_nuvoton: add nuvoton, npct601 to the compatible property</p>
<p>The linux kernel doesn’t have a driver compatible with
“nuvoton,npct650”, but it does have for “nuvoton,npct601”, which should
also be compatible with npct650.</p>
<p>This adds “nuvoton,npct601” to the compatible devtree property.</p>
</li>
-<li><p>libstb/trustedboot.c: import stb_final() from stb.c</p>
+<li><p class="first">libstb/trustedboot.c: import stb_final() from stb.c</p>
<p>The stb_final() primary goal is to measure the event EV_SEPARATOR
into PCR[0-7] when trusted boot is about to exit the boot services.</p>
<p>This imports the stb_final() from stb.c into trustedboot.c, but making
the following changes:</p>
<blockquote>
<div><ul class="simple">
-<li><p>Rename it to trustedboot_exit_boot_services().</p></li>
-<li><p>As specified in the TCG PC Client specification, EV_SEPARATOR events must
-be logged with the name 0xFFFFFF.</p></li>
-<li><p>Remove the ROM driver clean-up call.</p></li>
-<li><p>Don’t allow code to be measured in skiboot after
-trustedboot_exit_boot_services() is called.</p></li>
+<li>Rename it to trustedboot_exit_boot_services().</li>
+<li>As specified in the TCG PC Client specification, EV_SEPARATOR events must
+be logged with the name 0xFFFFFF.</li>
+<li>Remove the ROM driver clean-up call.</li>
+<li>Don’t allow code to be measured in skiboot after
+trustedboot_exit_boot_services() is called.</li>
</ul>
</div></blockquote>
</li>
-<li><p>libstb/cvc.c: import softrom behaviour from drivers/sw_driver.c</p>
+<li><p class="first">libstb/cvc.c: import softrom behaviour from drivers/sw_driver.c</p>
<p>Softrom is used only for testing with mambo. By setting
compatible=”ibm,secureboot-v1-softrom” in the “ibm,secureboot” node,
firmware images can be properly measured even if the
@@ -407,7 +411,7 @@ into cvc.c, but now softrom is implemented as a flag. When the flag is
set, the wrappers for the CVC services work the same way as in
sw_driver.c.</p>
</li>
-<li><p>libstb/trustedboot.c: import tb_measure() from stb.c</p>
+<li><p class="first">libstb/trustedboot.c: import tb_measure() from stb.c</p>
<p>This imports tb_measure() from stb.c, but now it calls the CVC sha512
wrapper to calculate the sha512 hash of the firmware image provided.</p>
<p>In trustedboot.c, the tb_measure() is renamed to trustedboot_measure().</p>
@@ -415,20 +419,22 @@ wrapper to calculate the sha512 hash of the firmware image provided.</p>
container payload hash calculated at boot time matches with the hash
found in the container header. A few reasons:</p>
<ul>
-<li><p>If the system admin wants the container header to be
+<li><p class="first">If the system admin wants the container header to be
checked/validated, the secure boot jumper must be set. Otherwise,
-the container header information may not be reliable.</p></li>
-<li><p>The container layout is expected to change over time. Skiboot
+the container header information may not be reliable.</p>
+</li>
+<li><p class="first">The container layout is expected to change over time. Skiboot
would need to maintain a parser for each container layout
-change.</p></li>
-<li><p>Skiboot could be checking the hash against a container version that
+change.</p>
+</li>
+<li><p class="first">Skiboot could be checking the hash against a container version that
is not supported by the Container-Verification-Code (CVC).</p>
<p>The tb_measure() calls are updated to trustedboot_measure() in a
subsequent patch.</p>
</li>
</ul>
</li>
-<li><p>libstb/secureboot.c: import sb_verify() from stb.c</p>
+<li><p class="first">libstb/secureboot.c: import sb_verify() from stb.c</p>
<p>This imports the sb_verify() function from stb.c, but now it calls the
CVC verify wrapper in order to verify signed firmware images. The
hw-key-hash and hw-key-hash-size initialized in secureboot.c are passed
@@ -442,29 +448,29 @@ sb_verify() calls are updated in a subsequent patch.</p>
<div class="section" id="xive">
<h2>XIVE<a class="headerlink" href="#xive" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>xive: Don’t bother cleaning up disabled EQs in reset</p>
+<li><p class="first">xive: Don’t bother cleaning up disabled EQs in reset</p>
<p>Additionally, warn if we find an enabled one that isn’t one
of the firmware built-in queues.</p>
</li>
-<li><p>xive: Warn on valid VPs found in abnormal cases</p>
+<li><p class="first">xive: Warn on valid VPs found in abnormal cases</p>
<p>If an allocated VP is left valid at xive_reset() or Linux tries
to free a valid (enabled) VP block, print errors. The former happens
occasionally if kdump’ing while KVM is running so keep it as a debug
message. The latter is a programming error in Linux so use a an
error log level.</p>
</li>
-<li><p>xive: Properly reserve built-in VPs in non-group mode</p>
+<li><p class="first">xive: Properly reserve built-in VPs in non-group mode</p>
<p>This is not normally used but if the #define is changed to
disable block group mode we would incorrectly clear the
buddy completely without marking the built-in VPs reserved.</p>
</li>
-<li><p>xive: Quieten debug messages in standard builds</p>
+<li><p class="first">xive: Quieten debug messages in standard builds</p>
<p>This makes a bunch of messages, especially the per-CPU ones,
only enabled in debug builds. This avoids clogging up the
OPAL logs with XIVE related messages that have proven not
being particularly useful for field defects.</p>
</li>
-<li><p>xive: Implement “single escalation” feature</p>
+<li><p class="first">xive: Implement “single escalation” feature</p>
<p>This adds a new VP flag to control the new DD2.0
“single escalation” feature.</p>
<p>This feature allows us to have a single escalation
@@ -473,42 +479,43 @@ interrupt per VP instead of one per queue.</p>
usable when that is enabled) and exploiting two new
hardware bits that will:</p>
<ul class="simple">
-<li><p>Make the normal queues (0..6) escalate unconditionally
-thus ignoring the ESe bits.</p></li>
-<li><p>Route the above escalations to queue 7</p></li>
-<li><p>Have queue 7 silently escalate without notification</p></li>
+<li>Make the normal queues (0..6) escalate unconditionally
+thus ignoring the ESe bits.</li>
+<li>Route the above escalations to queue 7</li>
+<li>Have queue 7 silently escalate without notification</li>
</ul>
<p>Thus the escalation of queue 7 becomes the one escalation
interrupt for all the other queues.</p>
</li>
-<li><p>xive: When disabling a VP, wipe all of its settings</p></li>
-<li><p>xive: Improve cleaning up of EQs</p>
+<li><p class="first">xive: When disabling a VP, wipe all of its settings</p>
+</li>
+<li><p class="first">xive: Improve cleaning up of EQs</p>
<p>Factors out the function that sets an EQ back to a clean
state and add a cleaning pass for queue left enabled
when freeing a block of VPs.</p>
</li>
-<li><p>xive: When disabling an EQ, wipe all of its settings</p>
+<li><p class="first">xive: When disabling an EQ, wipe all of its settings</p>
<p>This avoids having configuration bits left over</p>
</li>
-<li><p>xive: Define API for single-escalation VP mode</p>
+<li><p class="first">xive: Define API for single-escalation VP mode</p>
<p>This mode allows all queues of a VP to use the same
escalation interrupt, at the cost of losing priority 7.</p>
<p>This adds the definition and documentation of the API,
the implementation will come next.</p>
</li>
-<li><p>xive: Fix ability to clear some EQ flags</p>
+<li><p class="first">xive: Fix ability to clear some EQ flags</p>
<p>We could never clear “unconditional notify” and “escalate”</p>
</li>
-<li><p>xive: Update inits for DD2.0</p>
+<li><p class="first">xive: Update inits for DD2.0</p>
<p>This updates some inits based on information from the HW
designers. This includes enabling some new DD2.0 features
that we don’t yet exploit.</p>
</li>
-<li><p>xive: Ensure VC informational FIRs are masked</p>
+<li><p class="first">xive: Ensure VC informational FIRs are masked</p>
<p>Some HostBoot versions leave those as checkstop, they are harmless
and can sometimes occur during normal operations.</p>
</li>
-<li><p>xive: Fix occasional VC checkstops in xive_reset</p>
+<li><p class="first">xive: Fix occasional VC checkstops in xive_reset</p>
<p>The current workaround for the scrub bug described in
__xive_cache_scrub() has an issue in that it can leave
dirty invalid entries in the cache.</p>
@@ -519,20 +526,20 @@ of the cache.</p>
<p>This replaces the existing workaround with a new pair of
workarounds for VPs and EQs:</p>
<ul class="simple">
-<li><p>The VP one does the dummy watch on another entry than
+<li>The VP one does the dummy watch on another entry than
the one we scrubbed (which does the job of pushing old
stores out) using an entry that is known to be backed by
-a permanent indirect page.</p></li>
-<li><p>The EQ one switches to a more efficient workaround
+a permanent indirect page.</li>
+<li>The EQ one switches to a more efficient workaround
which consists of doing a non-side-effect ESB load from
-the EQ’s ESe control bits.</p></li>
+the EQ’s ESe control bits.</li>
</ul>
</li>
-<li><p>xive: Do not return a trigger page for an escalation interrupt</p>
+<li><p class="first">xive: Do not return a trigger page for an escalation interrupt</p>
<p>This is bogus, we don’t support them. (Thankfully the callers
didn’t actually try to use this on escalation interrupts).</p>
</li>
-<li><p>xive: Mark a freed IRQs IVE as valid and masked</p>
+<li><p class="first">xive: Mark a freed IRQs IVE as valid and masked</p>
<p>Removing the valid bit means a FIR will trip if it’s accessed
inadvertently. Under some circumstances, the XIVE will speculatively
access an IVE for a masked interrupt and trip it. So make sure that
@@ -543,13 +550,13 @@ freed entries are still marked valid (but masked).</p>
<div class="section" id="pci">
<h2>PCI<a class="headerlink" href="#pci" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>pci: Shared slot state synchronisation for hot reset</p>
+<li><p class="first">pci: Shared slot state synchronisation for hot reset</p>
<p>When a device is shared between two PHBs, it doesn’t get reset properly
unless both PHBs issue a hot reset at “the same time”. Practically this
means a hot reset needs to be issued on both sides, and neither should
bring the link up until the reset on both has completed.</p>
</li>
-<li><p>pci: Track peers of slots</p>
+<li><p class="first">pci: Track peers of slots</p>
<p>Witherspoon introduced a new concept where one physical slot is shared
between two PHBs. Making a slot aware of its peer enables syncing
between them where necessary.</p>
@@ -559,7 +566,7 @@ between them where necessary.</p>
<div class="section" id="phb4">
<h2>PHB4<a class="headerlink" href="#phb4" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>phb4: Change PCI MMIO timers</p>
+<li><p class="first">phb4: Change PCI MMIO timers</p>
<p>Currently we have a mismatch between the NCU and PCI timers for MMIO
accesses. The PCI timers must be lower than the NCU timers otherwise
it may cause checkstops.</p>
@@ -567,7 +574,7 @@ it may cause checkstops.</p>
be forwards and backwards compatible with expected hostboot changes to
the NCU timer.</p>
</li>
-<li><p>phb4: Change default GEN3 lane equalisation setting to 0x54</p>
+<li><p class="first">phb4: Change default GEN3 lane equalisation setting to 0x54</p>
<p>Currently our GEN3 lane equalisation settings are set to 0x77. Change
this to 0x54. This change will allow us to train at GEN3 in a shorter
time and more consistently.</p>
@@ -577,23 +584,23 @@ continuous time linear equalizers (CTLE) for the remote receiver port
and de-emphasis and pre-shoot for the remote transmitter port.</p>
<p>Machine Readable Workbooks (MRW) are moving to this new value also.</p>
</li>
-<li><p>phb4: Init changes</p>
+<li><p class="first">phb4: Init changes</p>
<p>These init changes for phb4 from the HW team.</p>
<p>Link down are now endpoint recoverable (ERC) rather than PHB fatal
errors.</p>
<p>BLIF Completion Timeout Error now generate an interrupt rather than
causing freeze events.</p>
</li>
-<li><p>phb4: Fix lane equalisation setting</p>
+<li><p class="first">phb4: Fix lane equalisation setting</p>
<p>Fix cut and paste from phb3. The sizes have changes now we have GEN4,
so the check here needs to change also</p>
<p>Without this we end up with the default settings (all â€7’) rather
than what’s in HDAT.</p>
</li>
-<li><p>hdata: Fix copying GEN4 lane equalisation settings</p>
+<li><p class="first">hdata: Fix copying GEN4 lane equalisation settings</p>
<p>These aren’t copied currently but should be.</p>
</li>
-<li><p>phb4: Fix PE mapping of M32 BAR</p>
+<li><p class="first">phb4: Fix PE mapping of M32 BAR</p>
<p>The M32 BAR is the PHB4 region used to map all the non-prefetchable
or 32-bit device BARs. It’s supposed to have its segments remapped
via the MDT and Linux relies on that to assign them individual PE#.</p>
@@ -601,12 +608,12 @@ via the MDT and Linux relies on that to assign them individual PE#.</p>
mode where PE# == segment#, thus causing EEH to freeze the wrong
device or PE#.</p>
</li>
-<li><p>phb4: Fix lost bit in PE number on config accesses</p>
+<li><p class="first">phb4: Fix lost bit in PE number on config accesses</p>
<p>A PE number can be up to 9 bits, using a uint8_t won’t fly..</p>
<p>That was causing error on config accesses to freeze the
wrong PE.</p>
</li>
-<li><p>phb4: Update inits</p>
+<li><p class="first">phb4: Update inits</p>
<p>New init value from HW folks for the fence enable register.</p>
<p>This clears bit 17 (CFG Write Error CA or UR response) and bit 22 (MMIO Write
DAT_ERR Indication) and sets bit 21 (MMIO CFG Pending Error)</p>
@@ -616,7 +623,7 @@ DAT_ERR Indication) and sets bit 21 (MMIO CFG Pending Error)</p>
<div class="section" id="capi">
<h2>CAPI<a class="headerlink" href="#capi" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>capi: Disable CAPP virtual machines</p>
+<li><p class="first">capi: Disable CAPP virtual machines</p>
<p>When exercising more than one CAPI accelerators simultaneously in
cache coherency mode, the verification team is seeing a deadlock. To
fix this a workaround of disabling CAPP virtual machines is
@@ -630,12 +637,12 @@ another CAPI is requesting) get stuck in the virtual machine queue by
a command ahead of it that is being retried by the same scenario in
the other CAPI. “</p>
</li>
-<li><p>capi: Perform capp recovery sequence only when PBCQ is idle</p>
+<li><p class="first">capi: Perform capp recovery sequence only when PBCQ is idle</p>
<p>Presently during a CRESET the CAPP recovery sequence can be executed
multiple times in case PBCQ on the PEC is still busy processing in/out
bound in-flight transactions.</p>
</li>
-<li><p>xive: Mask MMIO load/store to bad location FIR</p>
+<li><p class="first">xive: Mask MMIO load/store to bad location FIR</p>
<p>For opencapi, the trigger page of an interrupt is mapped to user
space. The intent is to write the page to raise an interrupt but
there’s nothing to prevent a user process from reading it, which has
@@ -645,7 +652,7 @@ location. It’s the recommendation from recent documentation and
hostboot is expected to mask it at some point. In the meantime, let’s
play it safe.</p>
</li>
-<li><p>phb4: Dump CAPP error registers when it asserts link down</p>
+<li><p class="first">phb4: Dump CAPP error registers when it asserts link down</p>
<p>This patch introduces a new function phb4_dump_app_err_regs() that
dumps CAPP error registers in case the PEC nestfir register indicates
that the fence was due to a CAPP error (BIT-24).</p>
@@ -653,23 +660,23 @@ that the fence was due to a CAPP error (BIT-24).</p>
issues. Registers that are dumped in phb4_dump_app_err_regs() are:</p>
<blockquote>
<div><ul class="simple">
-<li><p>CAPP FIR Register</p></li>
-<li><p>CAPP APC Master Error Report Register</p></li>
-<li><p>CAPP Snoop Error Report Register</p></li>
-<li><p>CAPP Transport Error Report Register</p></li>
-<li><p>CAPP TLBI Error Report Register</p></li>
-<li><p>CAPP Error Status and Control Register</p></li>
+<li>CAPP FIR Register</li>
+<li>CAPP APC Master Error Report Register</li>
+<li>CAPP Snoop Error Report Register</li>
+<li>CAPP Transport Error Report Register</li>
+<li>CAPP TLBI Error Report Register</li>
+<li>CAPP Error Status and Control Register</li>
</ul>
</div></blockquote>
</li>
-<li><p>capi: move the acknowledge of the HMI interrupt</p>
+<li><p class="first">capi: move the acknowledge of the HMI interrupt</p>
<p>We need to acknowledge an eventual HMI initiated by the previous forced
fence on the PHB to work around a non-existent PE in the phb4_creset()
function.
For this reason do_capp_recovery_scoms() is called now at the
beginning of the step: PHB4_SLOT_CRESET_WAIT_CQ</p>
</li>
-<li><p>capi: update ci store buffers and dma engines</p>
+<li><p class="first">capi: update ci store buffers and dma engines</p>
<p>The number of read (APC type traffic) and mmio store (MSG type traffic)
resources assigned to the CAPP is controlled by the CAPP control
register.</p>
@@ -682,27 +689,28 @@ to the CAPP for use.</p>
<div class="section" id="hmi">
<h2>HMI<a class="headerlink" href="#hmi" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>core/hmi: Display chip location code while displaying core FIR.</p></li>
-<li><p>core/hmi: Do not display FIR details if none of the bits are set.</p>
+<li><p class="first">core/hmi: Display chip location code while displaying core FIR.</p>
+</li>
+<li><p class="first">core/hmi: Do not display FIR details if none of the bits are set.</p>
<p>So that we don’t flood OPAL console logs with information that is not
useful.</p>
</li>
-<li><p>opal/hmi: HMI logging with location code info.</p>
+<li><p class="first">opal/hmi: HMI logging with location code info.</p>
<p>Add few HMI debug prints with location code info few additional info.</p>
<p>No functionality change.</p>
<p>With this patch the log messages will look like:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mf">210612.175196744</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="n">Received</span> <span class="n">HMI</span> <span class="n">interrupt</span><span class="p">:</span> <span class="n">HMER</span> <span class="o">=</span> <span class="mh">0x0840000000000000</span>
-<span class="p">[</span><span class="mf">210612.175200449</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">UOPWR</span><span class="mf">.1302</span><span class="n">LFA</span><span class="o">-</span><span class="n">Node0</span><span class="o">-</span><span class="n">Proc1</span><span class="p">]:</span> <span class="n">P</span><span class="p">:</span><span class="mi">8</span> <span class="n">C</span><span class="p">:</span><span class="mi">16</span> <span class="n">T</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span> <span class="n">TFMR</span><span class="p">(</span><span class="mi">2</span><span class="n">d12000870e04020</span><span class="p">)</span> <span class="n">Timer</span> <span class="n">Facility</span> <span class="n">Error</span>
+<span class="p">[</span><span class="mf">210612.175200449</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">UOPWR</span><span class="o">.</span><span class="mi">1302</span><span class="n">LFA</span><span class="o">-</span><span class="n">Node0</span><span class="o">-</span><span class="n">Proc1</span><span class="p">]:</span> <span class="n">P</span><span class="p">:</span><span class="mi">8</span> <span class="n">C</span><span class="p">:</span><span class="mi">16</span> <span class="n">T</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span> <span class="n">TFMR</span><span class="p">(</span><span class="mi">2</span><span class="n">d12000870e04020</span><span class="p">)</span> <span class="n">Timer</span> <span class="n">Facility</span> <span class="n">Error</span>
<span class="p">[</span><span class="mf">210660.259689526</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="n">Received</span> <span class="n">HMI</span> <span class="n">interrupt</span><span class="p">:</span> <span class="n">HMER</span> <span class="o">=</span> <span class="mh">0x2040000000000000</span>
-<span class="p">[</span><span class="mf">210660.259695649</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">UOPWR</span><span class="mf">.1302</span><span class="n">LFA</span><span class="o">-</span><span class="n">Node0</span><span class="o">-</span><span class="n">Proc0</span><span class="p">]:</span> <span class="n">P</span><span class="p">:</span><span class="mi">0</span> <span class="n">C</span><span class="p">:</span><span class="mi">16</span> <span class="n">T</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span> <span class="n">Processor</span> <span class="n">recovery</span> <span class="n">Done</span><span class="o">.</span>
+<span class="p">[</span><span class="mf">210660.259695649</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">UOPWR</span><span class="o">.</span><span class="mi">1302</span><span class="n">LFA</span><span class="o">-</span><span class="n">Node0</span><span class="o">-</span><span class="n">Proc0</span><span class="p">]:</span> <span class="n">P</span><span class="p">:</span><span class="mi">0</span> <span class="n">C</span><span class="p">:</span><span class="mi">16</span> <span class="n">T</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span> <span class="n">Processor</span> <span class="n">recovery</span> <span class="n">Done</span><span class="o">.</span>
</pre></div>
</div>
</li>
-<li><p>core/hmi: Use pr_fmt macro for tagging log messages</p>
+<li><p class="first">core/hmi: Use pr_fmt macro for tagging log messages</p>
<p>No functionality changes.</p>
</li>
-<li><p>opal: Get chip location code</p>
+<li><p class="first">opal: Get chip location code</p>
<p>and store it under proc_chip for quick reference during HMI handling
code.</p>
</li>
@@ -711,22 +719,22 @@ code.</p>
<div class="section" id="sensors">
<h2>Sensors<a class="headerlink" href="#sensors" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>occ-sensors: Fix up quad/gpu location mix-up</p>
+<li><p class="first">occ-sensors: Fix up quad/gpu location mix-up</p>
<p>The GPU and QUAD sensor location types are swapped compared to what
exists in the OCC code base which is authoritative. Fix them up.</p>
</li>
-<li><p>sensors: occ: Skip counter type of sensors</p>
+<li><p class="first">sensors: occ: Skip counter type of sensors</p>
<p>Don’t add counter type of sensors to device-tree as they don’t
fit into hwmon sensor interface.</p>
</li>
-<li><p>sensors: dts: Assert special wakeup on idle cores while reading temperature</p>
+<li><p class="first">sensors: dts: Assert special wakeup on idle cores while reading temperature</p>
<p>In P9, when a core enters a stop state, its clocks will be stopped
to save power and hence we will not be able to perform a SCOM
operation to read the DTS temperature sensor. Hence, assert
a special wakeup on cores that have entered a stop state in order to
successfully complete the SCOM operation.</p>
</li>
-<li><p>sensors: occ: Skip power sensors with zero sample value</p>
+<li><p class="first">sensors: occ: Skip power sensors with zero sample value</p>
<p>APSS is not available on platforms like Zaius, Romulus where OCC
can only measure Vdd (core) and Vdn (nest) power from the AVSbus
reading. So all the sensors for APSS channels will be populated
@@ -735,33 +743,34 @@ which point to the APSS channels will also be 0.</p>
<p>As per OCC team (Martha Broyles) zeroed power sensor means that the
system doesn’t have it. So this patch filters out these sensors.</p>
</li>
-<li><p>sensors: occ: Skip GPU sensors for non-gpu systems</p></li>
-<li><p>sensors: Fix dtc warning for new occ in-band sensors.</p>
+<li><p class="first">sensors: occ: Skip GPU sensors for non-gpu systems</p>
+</li>
+<li><p class="first">sensors: Fix dtc warning for new occ in-band sensors.</p>
<p>dtc complains about missing reg property when a DT node is having a
unit name or address but no reg property.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">sensors</span><span class="o">/</span><span class="n">vrm</span><span class="o">-</span><span class="ow">in</span><span class="nd">@c00004</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
<span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">sensors</span><span class="o">/</span><span class="n">gpu</span><span class="o">-</span><span class="ow">in</span><span class="nd">@c0001f</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
-<span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">sensor</span><span class="o">-</span><span class="n">groups</span><span class="o">/</span><span class="n">occ</span><span class="o">-</span><span class="n">js</span><span class="o">@</span><span class="mi">1</span><span class="n">c00040</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
+<span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">sensor</span><span class="o">-</span><span class="n">groups</span><span class="o">/</span><span class="n">occ</span><span class="o">-</span><span class="n">js</span><span class="nd">@1c00040</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
</pre></div>
</div>
<p>This patch fixes these warnings for new occ in-band sensors and also for
sensor-groups by adding necessary properties.</p>
</li>
-<li><p>sensors: Fix dtc warning for dts sensors.</p>
+<li><p class="first">sensors: Fix dtc warning for dts sensors.</p>
<p>dtc complains about missing reg property when a DT node is having a
unit name or address but no reg property.</p>
<p>Example warning for core dts sensor:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">sensors</span><span class="o">/</span><span class="n">core</span><span class="o">-</span><span class="n">temp</span><span class="o">@</span><span class="mi">5</span><span class="n">c</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
-<span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">sensors</span><span class="o">/</span><span class="n">core</span><span class="o">-</span><span class="n">temp</span><span class="o">@</span><span class="mi">804</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">sensors</span><span class="o">/</span><span class="n">core</span><span class="o">-</span><span class="n">temp</span><span class="nd">@5c</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
+<span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">sensors</span><span class="o">/</span><span class="n">core</span><span class="o">-</span><span class="n">temp</span><span class="nd">@804</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
</pre></div>
</div>
<p>This patch fixes this by adding necessary properties.</p>
</li>
-<li><p>hw/occ: Fix psr cpu-to-gpu sensors node dtc warning.</p>
+<li><p class="first">hw/occ: Fix psr cpu-to-gpu sensors node dtc warning.</p>
<p>dtc complains about missing reg property when a DT node is having a
unit name or address but no reg property.</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">power</span><span class="o">-</span><span class="n">mgt</span><span class="o">/</span><span class="n">psr</span><span class="o">/</span><span class="n">cpu</span><span class="o">-</span><span class="n">to</span><span class="o">-</span><span class="n">gpu</span><span class="o">@</span><span class="mi">0</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
-<span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">power</span><span class="o">-</span><span class="n">mgt</span><span class="o">/</span><span class="n">psr</span><span class="o">/</span><span class="n">cpu</span><span class="o">-</span><span class="n">to</span><span class="o">-</span><span class="n">gpu</span><span class="o">@</span><span class="mi">100</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">power</span><span class="o">-</span><span class="n">mgt</span><span class="o">/</span><span class="n">psr</span><span class="o">/</span><span class="n">cpu</span><span class="o">-</span><span class="n">to</span><span class="o">-</span><span class="n">gpu</span><span class="nd">@0</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
+<span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">power</span><span class="o">-</span><span class="n">mgt</span><span class="o">/</span><span class="n">psr</span><span class="o">/</span><span class="n">cpu</span><span class="o">-</span><span class="n">to</span><span class="o">-</span><span class="n">gpu</span><span class="nd">@100</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
</pre></div>
</div>
<p>This patch fixes this by adding necessary properties.</p>
@@ -771,7 +780,7 @@ unit name or address but no reg property.</p>
<div class="section" id="general-fixes">
<h2>General fixes<a class="headerlink" href="#general-fixes" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>lpc: Clear pending IRQs at boot</p>
+<li><p class="first">lpc: Clear pending IRQs at boot</p>
<p>When we come in from hostboot the LPC master has the bus reset indicator
set. This error isn’t handled until the host kernel unmasks interrupts,
at which point we get the following spurious error:</p>
@@ -782,7 +791,7 @@ at which point we get the following spurious error:</p>
<p>Fix this by clearing the various error bits in the LPC status register
before we initialise the skiboot LPC bus driver.</p>
</li>
-<li><p>hw/imc: Check ucode state before exposing units to Linux</p>
+<li><p class="first">hw/imc: Check ucode state before exposing units to Linux</p>
<p>disable_unavailable_units() checks whether the ucode
is in the running state before enabling the nest units
in the device tree. From a recent debug, it is found
@@ -796,24 +805,24 @@ condition in disable_unavailable_units() to check
for the ucode state in all the chip before enabling
the nest units in the device tree node.</p>
</li>
-<li><p>hdata/vpd: Add vendor property</p>
+<li><p class="first">hdata/vpd: Add vendor property</p>
<p>ibm,vpd blob contains VN field. Use that to populate vendor property
for various FRU’s.</p>
</li>
-<li><p>hdata/vpd: Fix DTC warnings</p>
+<li><p class="first">hdata/vpd: Fix DTC warnings</p>
<p>All the nodes under the vpd hierarchy have a unit address (their SLCA
index) but no reg properties. Add them and their size/address cells
to squash the warnings.</p>
</li>
-<li><p>HDAT/i2c: Fix SPD EEPROM compatible string</p>
+<li><p class="first">HDAT/i2c: Fix SPD EEPROM compatible string</p>
<p>Hostboot doesn’t give us accurate information about the DIMM SPD
devices. Hack around by assuming any EEPROM we find on the SPD I2C
master is an SPD EEPROM.</p>
</li>
-<li><p>hdata/i2c: Fix 512Kb EEPROM size</p>
+<li><p class="first">hdata/i2c: Fix 512Kb EEPROM size</p>
<p>There’s no such thing as a 412Kb EEPROM.</p>
</li>
-<li><p>libflash/mbox-flash: fall back to requesting lower MBOX versions from BMC</p>
+<li><p class="first">libflash/mbox-flash: fall back to requesting lower MBOX versions from BMC</p>
<p>Some BMC mbox implementations seem to sometimes mysteriously fail when trying
to negotiate v3 when they only support v2. To work around this, we
can fall back to requesting lower mbox protocol versions until we find
@@ -821,14 +830,14 @@ one that works.</p>
<p>In theory, this should already “just work”, but we have a counter example,
which this patch fixes.</p>
</li>
-<li><p>IPMI: Fix platform.cec_reboot() null ptr checks</p>
+<li><p class="first">IPMI: Fix platform.cec_reboot() null ptr checks</p>
<p>Kudos to Hugo Landau who reported this in:
<a class="reference external" href="https://github.com/open-power/skiboot/issues/142">https://github.com/open-power/skiboot/issues/142</a></p>
</li>
-<li><p>hdata: Add location code property to xscom node</p>
+<li><p class="first">hdata: Add location code property to xscom node</p>
<p>This patch adds chip location code property to xscom node.</p>
</li>
-<li><p>p8-i2c: Limit number of retry attempts</p>
+<li><p class="first">p8-i2c: Limit number of retry attempts</p>
<p>Current we will attempt to start an I2C transaction until it succeeds.
In the event that the OCC does not release the lock on an I2C bus this
results in an async token being held forever and the kernel thread that
@@ -836,54 +845,54 @@ started the transaction will block forever while waiting for an async
completion message. Fix this by limiting the number of attempts to
start the transaction.</p>
</li>
-<li><p>p8-i2c: Don’t write the watermark register at init</p>
+<li><p class="first">p8-i2c: Don’t write the watermark register at init</p>
<p>On P9 the I2C master is shared with the OCC. Currently the watermark
values are set once at init time which is bad for two reasons:</p>
<ol class="loweralpha simple">
-<li><p>We don’t take the OCC master lock before setting it. Which
-may cause issues if the OCC is currently using the master.</p></li>
-<li><p>The OCC might change the watermark levels and we need to reset
-them.</p></li>
+<li>We don’t take the OCC master lock before setting it. Which
+may cause issues if the OCC is currently using the master.</li>
+<li>The OCC might change the watermark levels and we need to reset
+them.</li>
</ol>
<p>Change this so that we set the watermark value when a new transaction
is started rather than at init time.</p>
</li>
-<li><p>hdata: Rename â€fsp-ipl-side’ as â€sp-ipl-side’</p>
+<li><p class="first">hdata: Rename â€fsp-ipl-side’ as â€sp-ipl-side’</p>
<p>as OPAL is building device tree for both FSP and BMC system.
Also I don’t see anyone using this property today. Hence renaming
should be fine.</p>
</li>
-<li><p>hdata/vpd: add support for parsing CPU VRML records</p>
+<li><p class="first">hdata/vpd: add support for parsing CPU VRML records</p>
<p>Allows skiboot to parse out the processor part/serial numbers
on OpenPOWER P9 machines.</p>
</li>
-<li><p>core/lock: Introduce atomic cmpxchg and implement try_lock with it</p>
+<li><p class="first">core/lock: Introduce atomic cmpxchg and implement try_lock with it</p>
<p>cmpxchg will be used in a subsequent change, and this reduces the
amount of asm code.</p>
</li>
-<li><p>direct-controls: add xscom error handling for p8</p>
+<li><p class="first">direct-controls: add xscom error handling for p8</p>
<p>Add xscom checks which will print something useful and return error
back to callers (which already have error handling plumbed in).</p>
</li>
-<li><p>direct-controls: p8 implementation of generic direct controls</p>
+<li><p class="first">direct-controls: p8 implementation of generic direct controls</p>
<p>This reworks the sreset functionality that was brought over from
fast-reboot, and fits it under the generic direct controls APIs.</p>
<p>The fast reboot APIs are implemented using generic direct controls,
which also makes them available on p9.</p>
</li>
-<li><p>fast-reboot: allow mambo fast reboot independent of CPU type</p>
+<li><p class="first">fast-reboot: allow mambo fast reboot independent of CPU type</p>
<p>Don’t tie mambo fast reboot to POWER8 CPU type.</p>
</li>
-<li><p>fast-reboot: remove delay after sreset</p>
+<li><p class="first">fast-reboot: remove delay after sreset</p>
<p>There is a 100ms delay when targets reach sreset which does not appear
to have a good purpose. Remove it and therefore reduce the sreset timeout
by the same amount.</p>
</li>
-<li><p>fast-reboot: add more barriers around cpu state changes</p>
+<li><p class="first">fast-reboot: add more barriers around cpu state changes</p>
<p>This is a bit of paranoia, but when a CPU changes state to signal it
has reached a particular point, all previous stores should be visible.</p>
</li>
-<li><p>fast-reboot: add sreset timeout detection and handling</p>
+<li><p class="first">fast-reboot: add sreset timeout detection and handling</p>
<p>Have the initiator wait for all its sreset targets to call in, and
time out after 200ms if they did not. Fail and revert to IPL reboot.</p>
<p>Testing indicates that after successful sreset_all_others(), it
@@ -891,22 +900,25 @@ takes less than 102ms (in hundreds of fast reboots) for secondaries
to call in. 100 of that is due to an initial delay, but core
un-splitting was not measured.</p>
</li>
-<li><p>fast-reboot: make spin loops consistent and SMT friendly</p></li>
-<li><p>fast-reboot: add sreset_all_others error handling</p>
+<li><p class="first">fast-reboot: make spin loops consistent and SMT friendly</p>
+</li>
+<li><p class="first">fast-reboot: add sreset_all_others error handling</p>
<p>Pass back failures from sreset_all_others, also change return codes to
OPAL form in sreset_all_prepare to match.</p>
<p>Errors will revert to the IPL path, so it’s not critical to completely
clean up everything if that would complicate things. Detecting the
error and failing is the important thing.</p>
</li>
-<li><p>fast-reboot: restore SMT priority on spin loop exit</p></li>
-<li><p>Add documentation for ibm, firmware-versions device tree node</p></li>
-<li><p>NX: Print read xscom config failures.</p>
+<li><p class="first">fast-reboot: restore SMT priority on spin loop exit</p>
+</li>
+<li><p class="first">Add documentation for ibm, firmware-versions device tree node</p>
+</li>
+<li><p class="first">NX: Print read xscom config failures.</p>
<p>Currently in NX, only write xscom config failures are tracing.
Add trace statements for read xscom config failures too.
No functional changes.</p>
</li>
-<li><p>hw/nx: Fix NX BAR assignments</p>
+<li><p class="first">hw/nx: Fix NX BAR assignments</p>
<p>The NX rng BAR is used by each core to source random numbers for the
DARN instruction. Currently we configure each core to use the NX rng of
the chip that it exists on. Unfortunately, the NX can be de-configured by
@@ -916,13 +928,13 @@ init path. This lets us check if the normal (chip local) NX is active
when configuring which NX a core should use so that we can fall back
gracefully.</p>
</li>
-<li><p>FSP-elog: Reduce verbosity of elog messages</p>
+<li><p class="first">FSP-elog: Reduce verbosity of elog messages</p>
<p>These messages just fill up the opal console log with useless messages
resulting in us losing useful information.</p>
<p>They have been like this since the first commit in skiboot. Make them
trace.</p>
</li>
-<li><p>core/bitmap: fix bitmap iteration limit corruption</p>
+<li><p class="first">core/bitmap: fix bitmap iteration limit corruption</p>
<p>The bitmap iterators did not reduce the number of bits to scan
when searching for the next bit, which would result in them
overrunning their bitmap.</p>
@@ -931,7 +943,7 @@ is that the xive reset code will keep zeroing memory until it
reaches a block of memory of MAX_EQ_COUNT &gt;&gt; 3 bits in length,
all zeroes.</p>
</li>
-<li><p>hw/imc: always enable “imc_nest_chip” exports property</p>
+<li><p class="first">hw/imc: always enable “imc_nest_chip” exports property</p>
<p>imc_dt_update_nest_node() adds a “imc_nest_chip” property
to the “exports” node (under opal_node) to view nest counter
region. This comes handy when debugging ucode runtime
@@ -946,7 +958,7 @@ enable the addition of “imc_nest_chip” property always.</p>
<div class="section" id="nvlink2">
<h2>NVLINK2<a class="headerlink" href="#nvlink2" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>npu2-hw-procedures.c: Correct phy lane mapping</p>
+<li><p class="first">npu2-hw-procedures.c: Correct phy lane mapping</p>
<p>Each NVLINK2 device is associated with a particular group of OBUS lanes via
a lane mask which is read from HDAT via the device-tree. However Skiboot’s
interpretation of lane mask was different to what is exported from the
@@ -957,7 +969,7 @@ represented by having lane-mask bit 23 set and lane-23 is represented by
lane-mask bit 0. This patch alters the Skiboot interpretation to match what
is passed from HDAT.</p>
</li>
-<li><p>npu2-hw-procedures.c: Power up lanes during ntl reset</p>
+<li><p class="first">npu2-hw-procedures.c: Power up lanes during ntl reset</p>
<p>Newer versions of Hostboot will not power up the NVLINK2 PHY lanes by
default. The phy_reset procedure already powers up the lanes but they also
need to be powered up in order to access the DL.</p>
@@ -965,31 +977,36 @@ need to be powered up in order to access the DL.</p>
of reset and get it into a working state. Therefore we also need to add
lane and clock power up to the reset_ntl procedure.</p>
</li>
-<li><p>npu2.c: Add PE error detection</p>
+<li><p class="first">npu2.c: Add PE error detection</p>
<p>Invalid accesses from the GPU can cause a specific PE to be frozen by the
NPU. Add an interrupt handler which reports the frozen PE to the operating
system via as an EEH event.</p>
</li>
-<li><p>npu2.c: Fix XIVE IRQ alignment</p></li>
-<li><p>npu2: hw-procedures: Refactor reset_ntl procedure</p>
+<li><p class="first">npu2.c: Fix XIVE IRQ alignment</p>
+</li>
+<li><p class="first">npu2: hw-procedures: Refactor reset_ntl procedure</p>
<p>Change the implementation of reset_ntl to match the latest programming
guide documentation.</p>
</li>
-<li><p>npu2: hw-procedures: Add phy_rx_clock_sel()</p>
+<li><p class="first">npu2: hw-procedures: Add phy_rx_clock_sel()</p>
<p>Change the RX clk mux control to be done by software instead of HW. This
avoids glitches caused by changing the mux setting.</p>
</li>
-<li><p>npu2: hw-procedures: Change phy_rx_clock_sel values</p>
+<li><p class="first">npu2: hw-procedures: Change phy_rx_clock_sel values</p>
<p>The clock selection bits we set here are inputs to a state machine.</p>
<p>DL clock select (bits 30-31)</p>
-<dl class="simple">
-<dt>0b00</dt><dd><p>lane 0 clock</p>
+<dl class="docutils">
+<dt>0b00</dt>
+<dd><p class="first last">lane 0 clock</p>
</dd>
-<dt>0b01</dt><dd><p>lane 7 clock</p>
+<dt>0b01</dt>
+<dd><p class="first last">lane 7 clock</p>
</dd>
-<dt>0b10</dt><dd><p>grid clock</p>
+<dt>0b10</dt>
+<dd><p class="first last">grid clock</p>
</dd>
-<dt>0b11</dt><dd><p>invalid/no-op</p>
+<dt>0b11</dt>
+<dd><p class="first last">invalid/no-op</p>
</dd>
</dl>
<p>To recover from a potential glitch, we need to ensure that the value we
@@ -1000,14 +1017,14 @@ state change for some bricks.</p>
<p>The way to force a state change in all cases is to switch to the grid
clock, and then back to a lane.</p>
</li>
-<li><p>npu2: hw-procedures: Manipulate IOVALID during training</p>
+<li><p class="first">npu2: hw-procedures: Manipulate IOVALID during training</p>
<p>Ensure that the IOVALID bit for this brick is raised at the start of
link training, in the reset_ntl procedure.</p>
<p>Then, to protect us from a glitch when the PHY clock turns off or gets
chopped, lower IOVALID for the duration of the phy_reset and
phy_rx_dccal procedures.</p>
</li>
-<li><p>npu2: hw-procedures: Add check_credits procedure</p>
+<li><p class="first">npu2: hw-procedures: Add check_credits procedure</p>
<p>As an immediate mitigation for a current hardware glitch, add a procedure
that can be used to validate NTL credit values. This will be called as a
safeguard to check that link training succeeded.</p>
@@ -1015,7 +1032,7 @@ safeguard to check that link training succeeded.</p>
system will experience a catastrophic failure shortly after the start of
link traffic.</p>
</li>
-<li><p>npu2: Print bdfn in NPU2DEV* logging macros</p>
+<li><p class="first">npu2: Print bdfn in NPU2DEV* logging macros</p>
<p>Revise the NPU2DEV{DBG,INF,ERR} logging macros to include the device’s
bdfn. It’s useful to know exactly which link we’re referring to.</p>
<blockquote>
@@ -1039,22 +1056,22 @@ bdfn. It’s useful to know exactly which link we’re referring to.</p>
</div>
</div></blockquote>
</li>
-<li><p>npu2: Move to new GPU memory map</p>
+<li><p class="first">npu2: Move to new GPU memory map</p>
<p>There are three different ways we configure the MCD and memory map.</p>
<ol class="arabic simple">
-<li><dl class="simple">
-<dt>Old way (current way)</dt><dd><p>Skiboot configures the MCD and puts GPUs at 4TB and below</p>
-</dd>
+<li><dl class="first docutils">
+<dt>Old way (current way)</dt>
+<dd>Skiboot configures the MCD and puts GPUs at 4TB and below</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>New way with MCD</dt><dd><p>Hostboot configures the MCD and skiboot puts GPU at 4TB and above</p>
-</dd>
+<li><dl class="first docutils">
+<dt>New way with MCD</dt>
+<dd>Hostboot configures the MCD and skiboot puts GPU at 4TB and above</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>New way without MCD</dt><dd><p>No one configures the MCD and skiboot puts GPU at 4TB and below</p>
-</dd>
+<li><dl class="first docutils">
+<dt>New way without MCD</dt>
+<dd>No one configures the MCD and skiboot puts GPU at 4TB and below</dd>
</dl>
</li>
</ol>
@@ -1068,7 +1085,7 @@ support existing hostboot.</p>
<p>Option 3 supports 6 GPUs and 4TB of memory but may have some
performance impact.</p>
</li>
-<li><p>phys-map: Rename GPU_MEM to GPU_MEM_4T_DOWN</p>
+<li><p class="first">phys-map: Rename GPU_MEM to GPU_MEM_4T_DOWN</p>
<p>This map is soon to be replaced, but we are going to keep it around
for a little while so that we support older hostboot firmware.</p>
</li>
@@ -1079,7 +1096,7 @@ for a little while so that we support older hostboot firmware.</p>
<div class="section" id="witherspoon">
<h3>Witherspoon<a class="headerlink" href="#witherspoon" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>Witherspoon: Remove old Witherspoon platform definition</p>
+<li><p class="first">Witherspoon: Remove old Witherspoon platform definition</p>
<p>An old Witherspoon platform definition was added to aid the transition from
versions of Hostboot which didn’t have the correct NVLINK2 HDAT information
available and/or planar VPD. These system should now be updated so remove
@@ -1092,7 +1109,7 @@ undefined behaviour which is more difficult to detect/debug than not
creating the NVLINK2 devices so remove the possibly incorrect default
behaviour.</p>
</li>
-<li><p>Witherspoon: Fix VPD EEPROM type</p>
+<li><p class="first">Witherspoon: Fix VPD EEPROM type</p>
<p>There are user-space tools that update the planar VPD via the sysfs
interface. Currently we do not get correct information from hostboot
about the exact type of the EEPROM so we need to manually fix it up
@@ -1104,7 +1121,7 @@ not standardised VPD EEPROM type.</p>
<div class="section" id="ibm-fsp-systems">
<h3>IBM FSP Systems<a class="headerlink" href="#ibm-fsp-systems" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>nvram: Fix â€missing’ nvram on FSP systems.</p>
+<li><p class="first">nvram: Fix â€missing’ nvram on FSP systems.</p>
<p>commit ba4d46fdd9eb (“console: Set log level from nvram”) wants to read
from NVRAM rather early. This works fine on BMC based systems as
nvram_init() is actually synchronous. This is not true for FSP systems
@@ -1130,12 +1147,12 @@ the NVRAM at all, ever, even after the NVRAM has loaded.</p>
<div class="section" id="utilities">
<h2>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Fix xscom-utils distclean target</p>
+<li><p class="first">Fix xscom-utils distclean target</p>
<p>In Debian/Ubuntu, the packaging system likes to have a full clean-up that
restores the tree back to original one, so add some files to the distclean
target.</p>
</li>
-<li><p>Add man pages for xscom-utils and pflash</p>
+<li><p class="first">Add man pages for xscom-utils and pflash</p>
<p>For the need of Debian/Ubuntu packaging, I inferred some initial man
pages from their help output.</p>
</li>
@@ -1143,40 +1160,40 @@ pages from their help output.</p>
<div class="section" id="gard">
<h3>gard<a class="headerlink" href="#gard" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>gard: Add tests</p>
+<li><p class="first">gard: Add tests</p>
<p>I hear Stewart likes these for some reason. Dunno why.</p>
</li>
-<li><p>gard: Add OpenBMC vPNOR support</p>
+<li><p class="first">gard: Add OpenBMC vPNOR support</p>
<p>A big-ol-hack to add some checking for OpenBMC’s vPNOR GUARD files under
/media/pnor-prsv. This isn’t ideal since it doesn’t handle the create
case well, but it’s better than nothing.</p>
</li>
-<li><p>gard: Always use MTD to access flash</p>
+<li><p class="first">gard: Always use MTD to access flash</p>
<p>Direct mode is generally either unsafe or unsupported. We should always
access the PNOR via an MTD device so make that the default. If someone
really needs direct mode, then they can use pflash.</p>
</li>
-<li><p>gard: Fix up do_create return values</p>
+<li><p class="first">gard: Fix up do_create return values</p>
<p>The return value of a subcommand is interpreted as a libflash error code
when it’s positive or some subcommand specific error when negative.
Currently the create subcommand always returns zero when exiting (even
for errors) so fix that.</p>
</li>
-<li><p>gard: Add usage message for -p</p>
+<li><p class="first">gard: Add usage message for -p</p>
<p>The -p argument only really makes sense when -f is specified. Print an
actual error message rather than just the usage blob.</p>
</li>
-<li><p>gard: Fix max instance count</p>
+<li><p class="first">gard: Fix max instance count</p>
<p>There’s an entire byte for the instance count rather than a nibble. Only
barf if the instance number is beyond 255 rather than 16.</p>
</li>
-<li><p>gard: Fix up path parsing</p>
+<li><p class="first">gard: Fix up path parsing</p>
<p>Currently we assume that the Unit ID can be used as an array index into
the chip_units[] structure. There are holes in the ID space though, so
this doesn’t actually work. Fix it up by walking the array looking for
the ID.</p>
</li>
-<li><p>gard: Set chip generation based on PVR</p>
+<li><p class="first">gard: Set chip generation based on PVR</p>
<p>Currently we assume that this tool is being used on a P8 system by
default and allow the user to override this behaviour using the -8 and
-9 command line arguments. When running on the host we can use the
@@ -1186,47 +1203,48 @@ when running on an ARM system. This tool didn’t even work when compiled
for ARM until recently and the OpenBMC vPNOR hack that we have currently
is broken for P9 systems that don’t use vPNOR (Zaius and Romulus).</p>
</li>
-<li><p>gard: Allow records with an ID of 0xffffffff</p>
+<li><p class="first">gard: Allow records with an ID of 0xffffffff</p>
<p>We currently assume that a record with an ID of 0xffffffff is invalid.
Apparently this is incorrect and we should display these records, so
expand the check to compare the entire record with 0xff rather than
just the ID.</p>
</li>
-<li><p>gard: create: Allow creating arbitrary GARD records</p>
+<li><p class="first">gard: create: Allow creating arbitrary GARD records</p>
<p>Add a new sub-command that allows us to create GARD records for
arbitrary chip units. There isn’t a whole lot of constraints on this and
that limits how useful it can be, but it does allow a user to GARD out
individual DIMMs, chips or cores from the BMC (or host) if needed.</p>
<p>There are a few caveats though:</p>
<ol class="arabic simple">
-<li><p>Not everything can, or should, have a GARD record applied it to.</p></li>
-<li><p>There is no validation that the unit actually exists. Doing that
+<li>Not everything can, or should, have a GARD record applied it to.</li>
+<li>There is no validation that the unit actually exists. Doing that
sort of validation requires something that understands the FAPI
targeting information (I think) and adding support for it here
-would require some knowledge from the system XML file.</p></li>
-<li><p>There’s no way to get a list of paths in the system.</p></li>
-<li><p>Although we can create a GARD record at runtime it won’t be applied
-until the next IPL.</p></li>
+would require some knowledge from the system XML file.</li>
+<li>There’s no way to get a list of paths in the system.</li>
+<li>Although we can create a GARD record at runtime it won’t be applied
+until the next IPL.</li>
</ol>
</li>
-<li><p>gard: Add path parsing support</p>
+<li><p class="first">gard: Add path parsing support</p>
<p>In order to support manual GARD records we need to be able to parse the
hardware unit path strings. This patch implements that.</p>
</li>
-<li><p>gard: list: Improve output</p>
+<li><p class="first">gard: list: Improve output</p>
<p>Display the full path to the GARDed hardware unit in each record rather
than relying on the output of <cite>gard show</cite> and convert do_list() to use
the iterator while we’re here.</p>
</li>
-<li><p>gard: {list, show}: Fix the Type field in the output</p>
+<li><p class="first">gard: {list, show}: Fix the Type field in the output</p>
<p>The output of <cite>gard list</cite> has a field named “Type”, however this
doesn’t actually indicate the type of the record. Rather, it
shows the type of the path used to identify the hardware being
GARDed. This is of pretty dubious value considering the Physical
path seems to always be used when referring to GARDed hardware.</p>
</li>
-<li><p>gard: Add P9 support</p></li>
-<li><p>gard: Update chip unit data</p>
+<li><p class="first">gard: Add P9 support</p>
+</li>
+<li><p class="first">gard: Update chip unit data</p>
<p>Source the list of units from the hostboot source rather than the
previous hard coded list. The list of path element types changes
between generations so we need to add a level of indirection to
@@ -1234,7 +1252,7 @@ accommodate P9. This also changes the names used to match those
printed by Hostboot at IPL time and paves the way to adding support
for manual GARD record creation.</p>
</li>
-<li><p>gard: show: Remove “Res Recovery” field</p>
+<li><p class="first">gard: show: Remove “Res Recovery” field</p>
<p>This field has never been populated by hostboot on OpenPower systems
so there’s no real point in reporting it’s contents.</p>
</li>
@@ -1245,26 +1263,26 @@ so there’s no real point in reporting it’s contents.</p>
<p>Anybody shipping libflash or pflash to interact with POWER9 systems must
upgrade to this version.</p>
<ul>
-<li><p>pflash: Support for volatile flag</p>
+<li><p class="first">pflash: Support for volatile flag</p>
<p>The volatile flag was added to the PNOR image to
indicate partitions that are cleared during a host
power off. Display this flag from the pflash command.</p>
</li>
-<li><p>pflash: Support for clean_on_ecc_error flag</p>
+<li><p class="first">pflash: Support for clean_on_ecc_error flag</p>
<p>Add the misc flag clear_on_ecc_error to libflash/pflash. This was
the only missing flag. The generator of the virtual PNOR image
relies on libflash/pflash to provide the partition information,
so all flags are needed to build an accurate virtual PNOR partition
table.</p>
</li>
-<li><p>pflash: Respect write(2) return values</p>
+<li><p class="first">pflash: Respect write(2) return values</p>
<p>The write(2) system call returns the number of bytes written, this is
important since it is entitled to write less than what we requested.
Currently we ignore the return value and assume it wrote everything we
requested. While in practice this is likely to always be the case, it
isn’t actually correct.</p>
</li>
-<li><p>external/pflash: Fix erasing within a single erase block</p>
+<li><p class="first">external/pflash: Fix erasing within a single erase block</p>
<p>It is possible to erase within a single erase block. Currently the
pflash code assumes that if the erase starts part way into an erase
block it is because it needs to be aligned up to the boundary with the
@@ -1272,7 +1290,7 @@ next erase block.</p>
<p>Doing an erase smaller than a single erase block will cause underflows
and looping forever on erase.</p>
</li>
-<li><p>external/pflash: Fix non-zero return code for successful read when size%256 != 0</p>
+<li><p class="first">external/pflash: Fix non-zero return code for successful read when size%256 != 0</p>
<p>When performing a read the return value from pflash is non-zero, even for
a successful read, when the size being read is not a multiple of 256.
This is because do_read_file returns the value from the write system
@@ -1283,17 +1301,20 @@ operation is successful the return code will seem to reflect an error.</p>
<p>Fix this by returning zero if the entire size was read correctly,
otherwise return the corresponding error code.</p>
</li>
-<li><p>libflash: Fix parity calculation on ARM</p>
+<li><p class="first">libflash: Fix parity calculation on ARM</p>
<p>To calculate the ECC syndrome we need to calculate the parity of a 64bit
number. On non-powerpc platforms we use the GCC builtin function
__builtin_parityl() to do this calculation. This is broken on 32bit ARM
where sizeof(unsigned long) is four bytes. Using __builtin_parityll()
instead cures this.</p>
</li>
-<li><p>libflash/mbox-flash: Add the ability to lock flash</p></li>
-<li><p>libflash/mbox-flash: Understand v3</p></li>
-<li><p>libflash/mbox-flash: Use BMC suggested timeout value</p></li>
-<li><p>libflash/mbox-flash: Simplify message sending</p>
+<li><p class="first">libflash/mbox-flash: Add the ability to lock flash</p>
+</li>
+<li><p class="first">libflash/mbox-flash: Understand v3</p>
+</li>
+<li><p class="first">libflash/mbox-flash: Use BMC suggested timeout value</p>
+</li>
+<li><p class="first">libflash/mbox-flash: Simplify message sending</p>
<p>hw/lpc-mbox no longer requires that the memory associated with messages
exist for the lifetime of the message. Once it has been sent to the BMC,
that is bmc_mbox_enqueue() returns, lpc-mbox does not need the message
@@ -1301,7 +1322,7 @@ to continue to exist. On the receiving side, lpc-mbox will ensure that a
message exists for the receiving callback function.</p>
<p>Remove all code to deal with allocating messages.</p>
</li>
-<li><p>hw/lpc-mbox: Simplify message bookkeeping and timeouts</p>
+<li><p class="first">hw/lpc-mbox: Simplify message bookkeeping and timeouts</p>
<p>Currently the hw/lpc-mbox layer keeps a pointer for the currently
in-flight message for the duration of the mbox call. This creates
problems when messages timeout, is that pointer still valid, what can we
@@ -1315,7 +1336,7 @@ hard to be sure is correct</p>
sequence number allocation and verification into lpc-mbox rather than
the caller.</p>
</li>
-<li><p>libflash/mbox-flash: Allow mbox-flash to tell the driver msg timeouts</p>
+<li><p class="first">libflash/mbox-flash: Allow mbox-flash to tell the driver msg timeouts</p>
<p>Currently when mbox-flash decides that a message times out the driver
has no way of knowing to drop the message and will continue waiting for
a response indefinitely preventing more messages from ever being sent.</p>
@@ -1324,8 +1345,9 @@ won’t ever respond to our outstanding message.</p>
<p>This patch provides a method for mbox-flash to tell the driver how long
it should wait before it no longer needs to care about the response.</p>
</li>
-<li><p>libflash/mbox-flash: Move sequence handling to driver level</p></li>
-<li><p>libflash/mbox-flash: Always close windows before opening a new window</p>
+<li><p class="first">libflash/mbox-flash: Move sequence handling to driver level</p>
+</li>
+<li><p class="first">libflash/mbox-flash: Always close windows before opening a new window</p>
<p>The MBOX protocol states that if an open window command fails then all
open windows are closed. Currently, if an open window command fails
mbox-flash will erroneously assume that the previously open window is
@@ -1334,7 +1356,8 @@ still open.</p>
open window command and then on success we’ll mark the new window as
open.</p>
</li>
-<li><p>libflash/mbox-flash: Add v2 error codes</p></li>
+<li><p class="first">libflash/mbox-flash: Add v2 error codes</p>
+</li>
</ul>
</div>
<div class="section" id="opal-prd">
@@ -1342,14 +1365,14 @@ open.</p>
<p>Anybody shipping <cite>opal-prd</cite> for POWER9 systems must upgrade <cite>opal-prd</cite> to
this new version.</p>
<ul>
-<li><p>prd: Log unsupported message type</p>
+<li><p class="first">prd: Log unsupported message type</p>
<p>Useful for debugging.</p>
<p>Sample output:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mf">29155.157050283</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">PRD</span><span class="p">:</span> <span class="n">Unsupported</span> <span class="n">prd</span> <span class="n">message</span> <span class="nb">type</span> <span class="p">:</span> <span class="mh">0xc</span>
</pre></div>
</div>
</li>
-<li><p>opal-prd: occ: Add support for runtime OCC load/start in ZZ</p>
+<li><p class="first">opal-prd: occ: Add support for runtime OCC load/start in ZZ</p>
<p>This patch adds support to handle OCC load/start event from FSP/PRD.
During IPL we send a success directly to FSP without invoking any HBRT
load routines on receiving OCC load mbox message from FSP. At runtime
@@ -1357,20 +1380,20 @@ we forward this event to host opal-prd.</p>
<p>This patch provides support for invoking OCC load/start HBRT routines
like load_pm_complex() and start_pm_complex() from opal-prd.</p>
</li>
-<li><p>opal-prd: Add support for runtime OCC reset in ZZ</p>
+<li><p class="first">opal-prd: Add support for runtime OCC reset in ZZ</p>
<p>This patch handles OCC_RESET runtime events in host opal-prd and also
provides support for calling â€hostinterface-&gt;wakeup()’ which is
required for doing the reset operation.</p>
</li>
-<li><p>prd: Enable error logging via firmware_request interface</p>
+<li><p class="first">prd: Enable error logging via firmware_request interface</p>
<p>In P9 HBRT sends error logs to FSP via firmware_request interface.
This patch adds support to parse error log and send it to FSP.</p>
</li>
-<li><p>prd: Add generic response structure inside prd_fw_msg</p>
+<li><p class="first">prd: Add generic response structure inside prd_fw_msg</p>
<p>This patch adds generic response structure. Also sync prd_fw_msg type
macros with hostboot.</p>
</li>
-<li><p>opal-prd: flush after logging to stdio in debug mode</p>
+<li><p class="first">opal-prd: flush after logging to stdio in debug mode</p>
<p>When in debug mode, flush after each log output. This makes it more
likely that we’ll catch failure reasons on severe errors.</p>
</li>
@@ -1380,7 +1403,7 @@ likely that we’ll catch failure reasons on severe errors.</p>
<div class="section" id="debugging-and-reliability-improvements">
<h2>Debugging and reliability improvements<a class="headerlink" href="#debugging-and-reliability-improvements" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>lock: Add additional lock auditing code</p>
+<li><p class="first">lock: Add additional lock auditing code</p>
<p>Keep track of lock owner name and replace lock_depth counter
with a per-cpu list of locks held by the cpu.</p>
<p>This allows us to print the actual locks held in case we hit
@@ -1389,30 +1412,30 @@ lock held.</p>
<p>It also allows us to warn (and drop them) if locks are still
held when returning to the OS or completing a scheduled job.</p>
</li>
-<li><p>Add support for new GCC 7 parametrized stack protector</p>
+<li><p class="first">Add support for new GCC 7 parametrized stack protector</p>
<p>This gives us per-cpu guard values as well. For now I just
XOR a magic constant with the CPU PIR value.</p>
</li>
-<li><p>Mambo: run hello_world and sreset_world tests with Secure and Trusted Boot</p>
+<li><p class="first">Mambo: run hello_world and sreset_world tests with Secure and Trusted Boot</p>
<p>We <em>disable</em> the secure boot part, but we keep the verified boot
part as we don’t currently have container verification code for Mambo.</p>
<p>We can run a small part of the code currently though.</p>
</li>
-<li><p>core/flash.c: extern function to get the name of a PNOR partition</p>
+<li><p class="first">core/flash.c: extern function to get the name of a PNOR partition</p>
<p>This adds the flash_map_resource_name() to allow skiboot subsystems to
lookup the name of a PNOR partition. Thus, we don’t need to duplicate
the same information in other places (e.g. libstb).</p>
</li>
-<li><p>libflash/mbox-flash: only wait for MBOX_DEFAULT_POLL_MS if busy</p>
+<li><p class="first">libflash/mbox-flash: only wait for MBOX_DEFAULT_POLL_MS if busy</p>
<p>This makes the mbox unit test run 300x quicker and seems to
shave about 6 seconds from boot time on Witherspoon.</p>
</li>
-<li><p>make check: Make valgrind optional</p>
+<li><p class="first">make check: Make valgrind optional</p>
<p>To (slightly) lower the barrier for contributions, we can make valgrind
optional with just a small amount of plumbing.</p>
<p>This allows make check to run successfully without valgrind.</p>
</li>
-<li><p>libflash/test: Add tests for mbox-flash</p>
+<li><p class="first">libflash/test: Add tests for mbox-flash</p>
<p>A first basic set of tests for mbox-flash. These tests do their testing
by stubbing out or otherwise replacing functions not in
libflash/mbox-flash.c. The stubbed out version of the function can then
@@ -1428,26 +1451,26 @@ correctness.</p>
<p>Full integration tests with a â€real’ BMC daemon are probably beyond the
scope of this repository.</p>
</li>
-<li><p>external/test/test.sh: fix VERSION substitution when no tags</p>
+<li><p class="first">external/test/test.sh: fix VERSION substitution when no tags</p>
<p>i.e. we get a hash rather than a version number</p>
<p>This seems to be occurring in Travis if it doesn’t pull a tag.</p>
</li>
-<li><p>external/test: make stripping out version number more robust</p>
+<li><p class="first">external/test: make stripping out version number more robust</p>
<p>For some bizarre reason, Travis started failing on this
substitution when there’d been zero code changes in this
area… This at least papers over whatever the problem is
for the time being.</p>
</li>
-<li><p>io: Add load_wait() helper</p>
+<li><p class="first">io: Add load_wait() helper</p>
<p>This uses the standard form twi/isync pair to ensure a load
is consumed by the core before continuing. This can be necessary
under some circumstances for example when having the following
sequence:</p>
<ul class="simple">
-<li><p>Store reg A</p></li>
-<li><p>Load reg A (ensure above store pushed out)</p></li>
-<li><p>delay loop</p></li>
-<li><p>Store reg A</p></li>
+<li>Store reg A</li>
+<li>Load reg A (ensure above store pushed out)</li>
+<li>delay loop</li>
+<li>Store reg A</li>
</ul>
<p>I.E., a mandatory delay between 2 stores. In theory the first store
is only guaranteed to reach the device after the load from the same
@@ -1456,7 +1479,7 @@ the delay loop without waiting for the return value from the load.</p>
<p>This construct enforces that the delay loop isn’t executed until
the load value has been returned.</p>
</li>
-<li><p>chiptod: Keep boot timestamps contiguous</p>
+<li><p class="first">chiptod: Keep boot timestamps contiguous</p>
<p>Currently we reset the timebase value to (almost) zero when
synchronising the timebase of each chip to the Chip TOD network which
results in this:</p>
@@ -1475,10 +1498,10 @@ the petikernel starts. e.g.</p>
</pre></div>
</div>
</li>
-<li><p>hdata/spira: Add missing newline to prlog() call</p>
+<li><p class="first">hdata/spira: Add missing newline to prlog() call</p>
<p>We’re missing a n here.</p>
</li>
-<li><p>opal/xscom: Add recovery for lost core wakeup SCOM failures.</p>
+<li><p class="first">opal/xscom: Add recovery for lost core wakeup SCOM failures.</p>
<p>Due to a hardware issue where core responding to SCOM was delayed due to
thread reconfiguration, leaves the SCOM logic in a state where the
subsequent SCOM to that core can get errors. This is affected for Core
@@ -1490,47 +1513,50 @@ clears the SCOM logic errors. After the clearing write is done the original
SCOM operation can be retried.</p>
<p>The SCOM timeout is reported as status 0x4 (Invalid address) in HMER[21-23].</p>
</li>
-<li><p>opal/xscom: Move the delay inside xscom_reset() function.</p>
+<li><p class="first">opal/xscom: Move the delay inside xscom_reset() function.</p>
<p>So caller of xscom_reset() does not have to bother about adding a delay
separately. Instead caller can control whether to add a delay or not using
second argument to xscom_reset().</p>
</li>
-<li><p>timer: Stop calling list_top() racily</p>
+<li><p class="first">timer: Stop calling list_top() racily</p>
<p>This will trip the debug checks in debug builds under some circumstances
and is actually a rather bad idea as we might look at a timer that is
concurrently being removed and modified, and thus incorrectly assume
there is no work to do.</p>
</li>
-<li><p>fsp: Bail out of HIR if FSP is resetting voluntarily</p>
+<li><p class="first">fsp: Bail out of HIR if FSP is resetting voluntarily</p>
<ol class="loweralpha simple">
-<li><p>Surveillance response times out and OPAL triggers a HIR</p></li>
-<li><p>Before the HIR process kicks in, OPAL gets a PSI interrupt indicating link down</p></li>
-<li><p>HIR process continues and OPAL tries to write to DRCR; PSI link inactive =&gt; xstop</p></li>
+<li>Surveillance response times out and OPAL triggers a HIR</li>
+<li>Before the HIR process kicks in, OPAL gets a PSI interrupt indicating link down</li>
+<li>HIR process continues and OPAL tries to write to DRCR; PSI link inactive =&gt; xstop</li>
</ol>
<p>OPAL should confirm that the FSP is not already in reset in the HIR path.</p>
</li>
-<li><p>sreset_kernel: only run SMT tests due to not supporting re-entry</p></li>
-<li><p>Use systemsim-p9 v1.1</p></li>
-<li><p>direct-controls: enable fast reboot direct controls for mambo</p>
+<li><p class="first">sreset_kernel: only run SMT tests due to not supporting re-entry</p>
+</li>
+<li><p class="first">Use systemsim-p9 v1.1</p>
+</li>
+<li><p class="first">direct-controls: enable fast reboot direct controls for mambo</p>
<p>Add mambo direct controls to stop threads, which is required for
reliable fast-reboot. Enable direct controls by default on mambo.</p>
</li>
-<li><p>core/opal: always verify cpu-&gt;pir on entry</p></li>
-<li><p>asm/head: add entry/exit calls</p>
+<li><p class="first">core/opal: always verify cpu-&gt;pir on entry</p>
+</li>
+<li><p class="first">asm/head: add entry/exit calls</p>
<p>Add entry and exit C functions that can do some more complex
checks before the opal proper call. This requires saving off
volatile registers that have arguments in them.</p>
</li>
-<li><p>core/lock: improve bust_locks</p>
+<li><p class="first">core/lock: improve bust_locks</p>
<p>Prevent try_lock from modifying the lock state when bust_locks is set.
unlock will not unlock it in that case, so locks will get taken and
never released while bust_locks is set.</p>
</li>
-<li><p>hw/occ: Log proper SCOM register names</p>
+<li><p class="first">hw/occ: Log proper SCOM register names</p>
<p>This patch fixes the logging of incorrect SCOM
register names.</p>
</li>
-<li><p>mambo: Add support for NUMA</p>
+<li><p class="first">mambo: Add support for NUMA</p>
<p>Currently the mambo scripts can do multiple chips, but only the first
ever has memory.</p>
<p>This patch adds support for having memory on each chip, with each
@@ -1538,12 +1564,12 @@ appearing as a separate NUMA node. Each node gets MEM_SIZE worth of
memory.</p>
<p>It’s opt-in, via <code class="docutils literal notranslate"><span class="pre">export</span> <span class="pre">MAMBO_NUMA=1</span></code>.</p>
</li>
-<li><p>external/mambo: Switch qtrace command to use plug-ins</p>
+<li><p class="first">external/mambo: Switch qtrace command to use plug-ins</p>
<p>The plug-in seems to be the preferred way to do this now, it works
better, and the qtracer emitter seems to generate invalid traces
in new mambo versions.</p>
</li>
-<li><p>asm/head: Loop after attn</p>
+<li><p class="first">asm/head: Loop after attn</p>
<p>We use the attn instruction to raise an error in early boot if OPAL
don’t recognise the PVR. It’s possible for hostboot to disable the
attn instruction before entering OPAL so add an extra busy loop after
@@ -1554,7 +1580,6 @@ the attn to prevent attempting to boot on an unknown processor.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -1607,15 +1632,17 @@ the attn to prevent attempting to boot on an unknown processor.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -1632,15 +1659,14 @@ the attn to prevent attempting to boot on an unknown processor.</p>
<li class="right" >
<a href="skiboot-5.10.html" title="skiboot-5.10"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.10-rc2.html b/doc/release-notes/skiboot-5.10-rc2.html
index b1b9504..72807ab 100644
--- a/doc/release-notes/skiboot-5.10-rc2.html
+++ b/doc/release-notes/skiboot-5.10-rc2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.10-rc2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.10-rc2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.10-rc1.html" title="skiboot-5.10-rc1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -58,8 +59,9 @@ being for all POWER8 and POWER9 platforms in op-build v1.21.
This release will be targeted to early POWER9 systems.</p>
<p>Over skiboot-5.10-rc1, we have the following changes:</p>
<ul>
-<li><p>hw/npu2: Implement logging HMI actions</p></li>
-<li><p>opal-prd: Fix FTBFS with -Werror=format-overflow</p>
+<li><p class="first">hw/npu2: Implement logging HMI actions</p>
+</li>
+<li><p class="first">opal-prd: Fix FTBFS with -Werror=format-overflow</p>
<p>i2c.c fails to compile with gcc7 and -Werror=format-overflow used in
Debian Unstable and Ubuntu 18.04 :</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>i2c.c: In function â€i2c_init’:
@@ -68,7 +70,7 @@ region of size 236 [-Werror=format-overflow=]
</pre></div>
</div>
</li>
-<li><p>core/exception: beautify exception handler, add MCE-involved registers</p>
+<li><p class="first">core/exception: beautify exception handler, add MCE-involved registers</p>
<p>Print DSISR and DAR, to help with deciphering machine check exceptions,
and improve the output a bit, decode NIP symbol, improve alignment, etc.
Also print a specific header for machine check, because we do expect to
@@ -101,7 +103,7 @@ see these if there is a hardware failure.</p>
</pre></div>
</div>
</li>
-<li><p>core/init: manage MSR[ME] explicitly, always enable</p>
+<li><p class="first">core/init: manage MSR[ME] explicitly, always enable</p>
<p>The current boot sequence inherits MSR[ME] from the IPL firmware, and
never changes it. Some environments disable MSR[ME] (e.g., mambo), and
others can enable it (hostboot).</p>
@@ -111,7 +113,7 @@ environment. Second, after installing our machine check handler,
MSR[ME] should be enabled to get some useful output rather than a
checkstop.</p>
</li>
-<li><p>fast-reboot: occ: Re-parse the pstate table during fast-reboot</p>
+<li><p class="first">fast-reboot: occ: Re-parse the pstate table during fast-reboot</p>
<p>OCC shares the frequency list to host by copying the pstate table to
main memory in HOMER. This table is parsed during boot to create
device-tree properties for frequency and pstate IDs. OCC can update
@@ -124,7 +126,7 @@ properties during fast-reboot.</p>
bias command. And this is mainly used by WOF team for
characterization purposes.</p>
</li>
-<li><p>fast-reboot: move pci_reset error handling into fast-reboot code</p>
+<li><p class="first">fast-reboot: move pci_reset error handling into fast-reboot code</p>
<p>pci_reset() currently does a platform reboot if it fails. It
should not know about fast-reboot at this level, so instead have
it return an error, and the fast reboot caller will do the
@@ -135,26 +137,28 @@ and all such fail-able operations before the CPU resets itself
and destroys its own stack. That’s not the case now, but that
should be the goal.</p>
</li>
-<li><p>capi: Fix the max tlbi divider and the directory size.</p>
+<li><p class="first">capi: Fix the max tlbi divider and the directory size.</p>
<p>Switch to 512KB mode (directory size) as we don’t use bit 48 of the tag
in addressing the array. This mode is controlled by the Snoop CAPI
Configuration Register.
Set the maximum of the number of data polls received before signaling
TLBI hang detect timer expired. The value of â€0000’ is equal to 16.</p>
</li>
-<li><p>npu2/tce: Fix page size checking</p>
+<li><p class="first">npu2/tce: Fix page size checking</p>
<p>The page size is encoded in the TVT data [59:63] as &#64;shift+11 but
the tce_kill handler does not do the math right; this fixes it.</p>
</li>
-<li><p>stb: Enforce secure boot if called before libstb initialized</p></li>
-<li><p>stb: Correctly error out when no PCR for resource</p></li>
-<li><p>core/init: move imc catalog preload init after the STB init.</p>
+<li><p class="first">stb: Enforce secure boot if called before libstb initialized</p>
+</li>
+<li><p class="first">stb: Correctly error out when no PCR for resource</p>
+</li>
+<li><p class="first">core/init: move imc catalog preload init after the STB init.</p>
<p>As a safer side move the imc catalog preload after the STB init
to make sure the imc catalog resource get’s verified and measured
properly during loading when both secure and trusted boot modes
are on.</p>
</li>
-<li><p>libstb: fix failure of calling trusted measure without STB initialization.</p>
+<li><p class="first">libstb: fix failure of calling trusted measure without STB initialization.</p>
<p>When we load a flash resource during OPAL init, STB calls trusted measure
to measure the given resource. There is a situation when a flash gets loaded
before STB initialization then trusted measure cannot measure properly.</p>
@@ -164,7 +168,7 @@ corresponding trusted init was done.</p>
and then do the loading of flash resources, by that way STB can properly
verify and measure the all resources.</p>
</li>
-<li><p>libstb: fix failure of calling cvc verify without STB initialization.</p>
+<li><p class="first">libstb: fix failure of calling cvc verify without STB initialization.</p>
<p>Currently in OPAL init time at various stages we are loading various
PNOR partition containers from the flash device. When we load a flash
resource STB calls the CVC verify and trusted measure(sha512) functions.
@@ -180,8 +184,9 @@ STB init was done.</p>
<p>And also we need a permanent fix in init path to ensure STB init gets
done at first place and then start loading all other flash resources.</p>
</li>
-<li><p>libstb/tpm_chip: Add missing new line to print messages.</p></li>
-<li><p>libstb: increase the log level of verify/measure messages to PR_NOTICE.</p>
+<li><p class="first">libstb/tpm_chip: Add missing new line to print messages.</p>
+</li>
+<li><p class="first">libstb: increase the log level of verify/measure messages to PR_NOTICE.</p>
<p>Currently libstb logs the verify and hash caluculation messages in
PR_INFO level. So when there is a secure boot enforcement happens
in loading last flash resource(Ex: BOOTKERNEL), the previous verify
@@ -193,7 +198,6 @@ So this patch fixes this by increasing the log level to PR_NOTICE.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -213,15 +217,17 @@ So this patch fixes this by increasing the log level to PR_NOTICE.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -238,15 +244,14 @@ So this patch fixes this by increasing the log level to PR_NOTICE.</p>
<li class="right" >
<a href="skiboot-5.10-rc1.html" title="skiboot-5.10-rc1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.10-rc3.html b/doc/release-notes/skiboot-5.10-rc3.html
index 2488180..cdd5b68 100644
--- a/doc/release-notes/skiboot-5.10-rc3.html
+++ b/doc/release-notes/skiboot-5.10-rc3.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.10-rc3 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.10-rc3 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.10-rc2.html" title="skiboot-5.10-rc2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10-rc3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -58,44 +59,45 @@ being for all POWER8 and POWER9 platforms in op-build v1.21.
This release will be targeted to early POWER9 systems.</p>
<p>Over skiboot-5.10-rc2, we have the following changes:</p>
<ul>
-<li><p>vas: Disable VAS/NX-842 on some P9 revisions</p>
+<li><p class="first">vas: Disable VAS/NX-842 on some P9 revisions</p>
<p>VAS/NX-842 are not functional on some P9 revisions, so disable them
in hardware and skip creating their device tree nodes.</p>
<p>Since the intent is to prevent OS from configuring VAS/NX, we remove
only the platform device nodes but leave the VAS/NX DT nodes under
xscom (i.e we don’t skip add_vas_node() in hdata/spira.c)</p>
</li>
-<li><p>phb4: Only escalate freezes on MMIO load where necessary</p>
+<li><p class="first">phb4: Only escalate freezes on MMIO load where necessary</p>
<p>In order to work around a hardware issue, MMIO load freezes were
escalated to fences on every chip. Now that hardware no longer requires
this, restrict escalation to the chips that actually need it.</p>
</li>
-<li><p>pflash: Fix makefile dependency issue</p></li>
-<li><p>DT: Add “version” property under ibm, firmware-versions node</p>
+<li><p class="first">pflash: Fix makefile dependency issue</p>
+</li>
+<li><p class="first">DT: Add “version” property under ibm, firmware-versions node</p>
<p>First line of VERSION section in PNOR contains firmware version.
Use that to add “version” property under firmware versions dt node.</p>
<p>Sample output:</p>
-<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">root@xxx2:/proc/device-tree/ibm,firmware-versions# </span>lsprop
+<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">root@xxx2:/proc/device-tree/ibm,firmware-versions#</span> lsprop
<span class="go">version &quot;witherspoon-ibm-OP9_v1.19_1.94&quot;</span>
</pre></div>
</div>
</li>
-<li><p>npu2: Disable TVT range check when in bypass mode</p>
+<li><p class="first">npu2: Disable TVT range check when in bypass mode</p>
<p>On POWER9 the GPUs need to be able to access the MMIO memory space. Therefore
the TVT range check needs to include the MMIO address space. As any possible
range check would cover all of memory anyway this patch just disables the TVT
range check all together when bypassing the TCE tables.</p>
</li>
-<li><p>hw/npu2: support creset of npu2 devices</p>
+<li><p class="first">hw/npu2: support creset of npu2 devices</p>
<p>creset calls in the hw procedure that resets the PHY, we don’t
take them out of reset, just put them in reset.</p>
<p>this fixes a kexec issue.</p>
</li>
-<li><p>ATTN: Enable flush instruction cache bit in HID register</p>
+<li><p class="first">ATTN: Enable flush instruction cache bit in HID register</p>
<p>In P9, we have to enable “flush the instruction cache” bit along with
“attn instruction support” bit to trigger attention.</p>
</li>
-<li><p>capi: Enable channel tag streaming for PHB in CAPP mode</p>
+<li><p class="first">capi: Enable channel tag streaming for PHB in CAPP mode</p>
<p>We re-enable channel tag streaming for PHB in CAPP mode as without it
PEC was waiting for cresp for each DMA write command before sending a
new DMA write command on the Powerbus. This resulted in much lower DMA
@@ -105,7 +107,7 @@ channel_streaming_en bit in PBCQ Hardware Configuration Register. Also
does some re-factoring of the code that updates this register to use
xscom_write_mask instead of xscom_read followed by a xscom_write.</p>
</li>
-<li><p>core/device.c: Fix dt_find_compatible_node</p>
+<li><p class="first">core/device.c: Fix dt_find_compatible_node</p>
<p>dt_find_compatible_node() and dt_find_compatible_node_on_chip() are used to
find device nodes under a parent/root node with a given compatible
property.</p>
@@ -125,7 +127,7 @@ called with prev == root. Instead we add a check to dt_next() such that
passing prev = NULL will cause it to start iterating from the first child
node (if any).</p>
</li>
-<li><p>stb: Put correct label (for skiboot) into container</p>
+<li><p class="first">stb: Put correct label (for skiboot) into container</p>
<p>Hostboot will expect the label field of the stb header to contain
“PAYLOAD” for skiboot or it will fail to load and run skiboot.</p>
<p>The failure looks something like this:</p>
@@ -152,7 +154,7 @@ node (if any).</p>
</pre></div>
</div>
</li>
-<li><p>hw/occ: Fix fast-reboot crash in P8 platforms.</p>
+<li><p class="first">hw/occ: Fix fast-reboot crash in P8 platforms.</p>
<p>commit 85a1de35cbe4 (“fast-boot: occ: Re-parse the pstate table during fast-boot” )
breaks the fast-reboot on P8 platforms while reiniting the OCC pstates. On P8
platforms OPAL adds additional two properties #address-cells and #size-cells
@@ -180,7 +182,6 @@ OCC pstates re-init in fast-reboot code path.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -200,15 +201,17 @@ OCC pstates re-init in fast-reboot code path.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -225,15 +228,14 @@ OCC pstates re-init in fast-reboot code path.</p>
<li class="right" >
<a href="skiboot-5.10-rc2.html" title="skiboot-5.10-rc2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10-rc3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.10-rc4.html b/doc/release-notes/skiboot-5.10-rc4.html
index c0f70aa..cdb7536 100644
--- a/doc/release-notes/skiboot-5.10-rc4.html
+++ b/doc/release-notes/skiboot-5.10-rc4.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.10-rc4 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.10-rc4 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.10-rc3.html" title="skiboot-5.10-rc3"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10-rc4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -58,24 +59,24 @@ being for all POWER8 and POWER9 platforms in op-build v1.21.
This release will be targeted to early POWER9 systems.</p>
<p>Over skiboot-5.10-rc3, we have the following changes:</p>
<ul>
-<li><p>core: Fix mismatched names between reserved memory nodes &amp; properties</p>
+<li><p class="first">core: Fix mismatched names between reserved memory nodes &amp; properties</p>
<p>OPAL exposes reserved memory regions through the device tree in both new
(nodes) and old (properties) formats.</p>
<p>However, the names used for these don’t match - we use a generated cell
address for the nodes, but the plain region name for the properties.</p>
<p>This fixes a warning from FWTS</p>
</li>
-<li><p>sensor-groups: occ: Add support to disable/enable sensor group</p>
+<li><p class="first">sensor-groups: occ: Add support to disable/enable sensor group</p>
<p>This patch adds a new opal call to enable/disable a sensor group. This
call is used to select the sensor groups that needs to be copied to
main memory by OCC at runtime.</p>
</li>
-<li><p>sensors: occ: Add energy counters</p>
+<li><p class="first">sensors: occ: Add energy counters</p>
<p>Export the accumulated power values as energy sensors. The accumulator
field of power sensors are used for representing energy counters which
can be exported as energy counters in Linux hwmon interface.</p>
</li>
-<li><p>sensors: Support reading u64 sensor values</p>
+<li><p class="first">sensors: Support reading u64 sensor values</p>
<p>This patch adds support to read u64 sensor values. This also adds
changes to the core and the backend implementation code to make this
API as the base call. Host can use this new API to read sensors
@@ -83,40 +84,42 @@ upto 64bits.</p>
<p>This adds a list to store the pointer to the kernel u32 buffer, for
older kernels making async sensor u32 reads.</p>
</li>
-<li><p>dt: add /cpus/ibm,powerpc-cpu-features device tree bindings</p>
+<li><p class="first">dt: add /cpus/ibm,powerpc-cpu-features device tree bindings</p>
<p>This is a new CPU feature advertising interface that is fine-grained,
extensible, aware of privilege levels, and gives control of features
to all levels of the stack (firmware, hypervisor, and OS).</p>
<p>The design and binding specification is described in detail in doc/.</p>
</li>
-<li><p>phb3/phb4/p7ioc: Document supported TCE sizes in DT</p>
+<li><p class="first">phb3/phb4/p7ioc: Document supported TCE sizes in DT</p>
<p>Add a new property, “ibm,supported-tce-sizes”, to advertise to Linux how
big the available TCE sizes are. Each value is a bit shift, from
smallest to largest.</p>
</li>
-<li><p>phb4: Fix TCE page size</p>
+<li><p class="first">phb4: Fix TCE page size</p>
<p>The page sizes for TCEs on P9 were inaccurate and just copied from PHB3,
so correct them.</p>
</li>
-<li><p>Revert “pci: Shared slot state synchronisation for hot reset”</p>
+<li><p class="first">Revert “pci: Shared slot state synchronisation for hot reset”</p>
<p>An issue was found in shared slot reset where the system can be stuck in
an infinite loop, pull the code out until there’s a proper fix.</p>
<p>This reverts commit 1172a6c57ff3c66f6361e572a1790cbcc0e5ff37.</p>
</li>
-<li><p>hdata/iohub: Use only wildcard slots for pluggables</p>
+<li><p class="first">hdata/iohub: Use only wildcard slots for pluggables</p>
<p>We don’t want to cause a VID:DID check against pluggable devices, as
they may use multiple devids.</p>
<p>Narrow the condition under which VID:DID is listed in the dt, so that
we’ll end up creating a wildcard slot for these instead.</p>
</li>
-<li><p>increase log verbosity in debug builds</p></li>
-<li><p>Add -debug to version on DEBUG builds</p></li>
-<li><p>cpu_wait_job: Correctly report time spent waiting for job</p></li>
+<li><p class="first">increase log verbosity in debug builds</p>
+</li>
+<li><p class="first">Add -debug to version on DEBUG builds</p>
+</li>
+<li><p class="first">cpu_wait_job: Correctly report time spent waiting for job</p>
+</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -136,15 +139,17 @@ we’ll end up creating a wildcard slot for these instead.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -161,15 +166,14 @@ we’ll end up creating a wildcard slot for these instead.</p>
<li class="right" >
<a href="skiboot-5.10-rc3.html" title="skiboot-5.10-rc3"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10-rc4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.10.1.html b/doc/release-notes/skiboot-5.10.1.html
index 1d03494..619bc06 100644
--- a/doc/release-notes/skiboot-5.10.1.html
+++ b/doc/release-notes/skiboot-5.10.1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.10.1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.10.1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.10-rc4.html" title="skiboot-5.10-rc4"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -51,8 +52,9 @@
<p>Over <a class="reference internal" href="skiboot-5.10.html#skiboot-5-10"><span class="std std-ref">skiboot-5.10</span></a>, we have an improvement for debugging NPU2/NVLink
problems and a bug fix. These changes are:</p>
<ul>
-<li><p>NPU2 HMIs: dump out a <em>LOT</em> of npu2 registers for debugging</p></li>
-<li><p>libflash/blocklevel: Correct miscalculation in blocklevel_smart_erase()</p>
+<li><p class="first">NPU2 HMIs: dump out a <em>LOT</em> of npu2 registers for debugging</p>
+</li>
+<li><p class="first">libflash/blocklevel: Correct miscalculation in blocklevel_smart_erase()</p>
<p>This fixes a bug in pflash.</p>
<p>If blocklevel_smart_erase() detects that the smart erase fits entire in
one erase block, it has an early bail path. In this path it miscaculates
@@ -64,7 +66,6 @@ write.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -84,15 +85,17 @@ write.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -109,15 +112,14 @@ write.</p>
<li class="right" >
<a href="skiboot-5.10-rc4.html" title="skiboot-5.10-rc4"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.10.2.html b/doc/release-notes/skiboot-5.10.2.html
index cb35ddc..8957752 100644
--- a/doc/release-notes/skiboot-5.10.2.html
+++ b/doc/release-notes/skiboot-5.10.2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.10.2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.10.2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.10.1.html" title="skiboot-5.10.1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -50,7 +51,7 @@
<a class="reference internal" href="skiboot-5.10.1.html#skiboot-5-10-1"><span class="std std-ref">skiboot-5.10.1</span></a> as the current stable release in the 5.10.x series.</p>
<p>Over <a class="reference internal" href="skiboot-5.10.1.html#skiboot-5-10-1"><span class="std std-ref">skiboot-5.10.1</span></a>, we have one improvement:</p>
<ul>
-<li><p>Tie tm-suspend fw-feature and opal_reinit_cpus() together</p>
+<li><p class="first">Tie tm-suspend fw-feature and opal_reinit_cpus() together</p>
<p>Currently opal_reinit_cpus(OPAL_REINIT_CPUS_TM_SUSPEND_DISABLED)
always returns OPAL_UNSUPPORTED.</p>
<p>This ties the tm suspend fw-feature to the
@@ -69,7 +70,6 @@ dynamically after boot. That is not the case currently though.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -89,15 +89,17 @@ dynamically after boot. That is not the case currently though.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -114,15 +116,14 @@ dynamically after boot. That is not the case currently though.</p>
<li class="right" >
<a href="skiboot-5.10.1.html" title="skiboot-5.10.1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.10.3.html b/doc/release-notes/skiboot-5.10.3.html
index d5bbcb5..aa431cf 100644
--- a/doc/release-notes/skiboot-5.10.3.html
+++ b/doc/release-notes/skiboot-5.10.3.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.10.3 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.10.3 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.10.2.html" title="skiboot-5.10.2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,14 +53,14 @@
due to the bug fixes and debugging enhancements in it.</p>
<p>Over <a class="reference internal" href="skiboot-5.10.2.html#skiboot-5-10-2"><span class="std std-ref">skiboot-5.10.2</span></a>, we have a few improvements and bug fixes:</p>
<ul>
-<li><p>NPU2: dump NPU2 registers on npu2 HMI</p>
+<li><p class="first">NPU2: dump NPU2 registers on npu2 HMI</p>
<p>Due to the nature of debugging npu2 issues, folk are wanting the
full list of NPU2 registers dumped when there’s a problem.</p>
<p>This is different than the solution introduced in 5.10.1
as there we would dump the registers in a way that would trigger a FIR
bit that would confuse PRD.</p>
</li>
-<li><p>npu2: Add performance tuning SCOM inits</p>
+<li><p class="first">npu2: Add performance tuning SCOM inits</p>
<p>Peer-to-peer GPU bandwidth latency testing has produced some tunable
values that improve performance. Add them to our device initialization.</p>
<p>File these under things that need to be cleaned up with nice #defines
@@ -68,10 +69,10 @@ for the register names and bitfields when we get time.</p>
topology, so introduce a helper to determine how many links go to a
single GPU.</p>
</li>
-<li><p>hw/npu2: Assign a unique LPARSHORTID per GPU</p>
+<li><p class="first">hw/npu2: Assign a unique LPARSHORTID per GPU</p>
<p>This gets used elsewhere to index items in the XTS tables.</p>
</li>
-<li><p>occ: Set up OCC messaging even if we fail to setup pstates</p>
+<li><p class="first">occ: Set up OCC messaging even if we fail to setup pstates</p>
<p>This means that we no longer hit this bug if we fail to get valid pstates
from the OCC.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>[console-pexpect]#echo 1 &gt; //sys/firmware/opal/sensor_groups//occ-csm0/clear
@@ -92,11 +93,11 @@ echo 1 &gt; //sys/firmware/opal/sensor_groups//occ-csm0/clear
</pre></div>
</div>
</li>
-<li><p>core/fast-reboot: disable fast reboot upon fundamental entry/exit/locking errors</p>
+<li><p class="first">core/fast-reboot: disable fast reboot upon fundamental entry/exit/locking errors</p>
<p>This disables fast reboot in several more cases where serious errors
like lock corruption or call re-entrancy are detected.</p>
</li>
-<li><p>core/opal: allow some re-entrant calls</p>
+<li><p class="first">core/opal: allow some re-entrant calls</p>
<p>This allows a small number of OPAL calls to succeed despite re-entering
the firmware, and rejects others rather than aborting.</p>
<p>This allows a system reset interrupt that interrupts OPAL to do something
@@ -105,11 +106,11 @@ stack traces to be printed, reboot the system.</p>
<p>Use OPAL_INTERNAL_ERROR when rejecting, rather than OPAL_BUSY, which is
used for many other things that does not mean a serious permanent error.</p>
</li>
-<li><p>core/opal: abort in case of re-entrant OPAL call</p>
+<li><p class="first">core/opal: abort in case of re-entrant OPAL call</p>
<p>The stack is already destroyed by the time we get here, so there
is not much point continuing.</p>
</li>
-<li><p>npu2: Disable fast reboot</p>
+<li><p class="first">npu2: Disable fast reboot</p>
<p>Fast reboot does not yet work right with the NPU. It’s been disabled on
NVLink and OpenCAPI machines. Do the same for NVLink2.</p>
<p>This amounts to a port of 3e4577939bbf (“npu: Fix broken fast reset”)
@@ -119,7 +120,6 @@ from the npu code to npu2.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -139,15 +139,17 @@ from the npu code to npu2.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -164,15 +166,14 @@ from the npu code to npu2.</p>
<li class="right" >
<a href="skiboot-5.10.2.html" title="skiboot-5.10.2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.10.4.html b/doc/release-notes/skiboot-5.10.4.html
index b16088c..cf360db 100644
--- a/doc/release-notes/skiboot-5.10.4.html
+++ b/doc/release-notes/skiboot-5.10.4.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.10.4 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.10.4 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.10.3.html" title="skiboot-5.10.3"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@
due to the bug fixes and debugging enhancements in it.</p>
<p>Over <a class="reference internal" href="skiboot-5.10.3.html#skiboot-5-10-3"><span class="std std-ref">skiboot-5.10.3</span></a>, we have one bug fix:</p>
<ul>
-<li><p>xive: disable store EOI support</p>
+<li><p class="first">xive: disable store EOI support</p>
<p>Hardware has limitations which would require to put a sync after each
store EOI to make sure the MMIO operations that change the ESB state
are ordered. This is a killer for performance and the PHBs do not
@@ -61,16 +62,15 @@ hardware is improved.</p>
<p>Also, while we are at changing the XIVE source flags, let’s fix the
settings for the PHB4s which should follow these rules :</p>
<ul class="simple">
-<li><p>SHIFT_BUG for DD10</p></li>
-<li><p>STORE_EOI for DD20 and if enabled</p></li>
-<li><p>TRIGGER_PAGE for DDx0 and if not STORE_EOI</p></li>
+<li>SHIFT_BUG for DD10</li>
+<li>STORE_EOI for DD20 and if enabled</li>
+<li>TRIGGER_PAGE for DDx0 and if not STORE_EOI</li>
</ul>
</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -90,15 +90,17 @@ settings for the PHB4s which should follow these rules :</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -115,15 +117,14 @@ settings for the PHB4s which should follow these rules :</p>
<li class="right" >
<a href="skiboot-5.10.3.html" title="skiboot-5.10.3"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.10.5.html b/doc/release-notes/skiboot-5.10.5.html
index 48e62b6..1e41efb 100644
--- a/doc/release-notes/skiboot-5.10.5.html
+++ b/doc/release-notes/skiboot-5.10.5.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.10.5 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.10.5 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.10.4.html" title="skiboot-5.10.4"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@
due to the bug fixes and debugging enhancements in it.</p>
<p>Over <a class="reference internal" href="skiboot-5.10.4.html#skiboot-5-10-4"><span class="std std-ref">skiboot-5.10.4</span></a>, we have four bug fixes:</p>
<ul>
-<li><p>npu2/hw-procedures: fence bricks on GPU reset</p>
+<li><p class="first">npu2/hw-procedures: fence bricks on GPU reset</p>
<p>The NPU workbook defines a way of fencing a brick and
getting the brick out of fence state. We do have an implementation
of bringing the brick out of fenced/quiesced state. We do
@@ -66,21 +67,21 @@ will flush the cache for the region of memory behind the GPU.</p>
<p>This patch does the following:</p>
<blockquote>
<div><ol class="arabic simple">
-<li><p>Implements a npu2_dev_fence_brick() function to set/clear
-fence state</p></li>
-<li><p>Clear FIR bits prior to clearing the fence status</p></li>
-<li><p>Clear’s the fence status</p></li>
-<li><p>We take the powerbus out of CQ fence much later now,
+<li>Implements a npu2_dev_fence_brick() function to set/clear
+fence state</li>
+<li>Clear FIR bits prior to clearing the fence status</li>
+<li>Clear’s the fence status</li>
+<li>We take the powerbus out of CQ fence much later now,
in credits_check() which is the last hardware procedure
-called after link training.</p></li>
+called after link training.</li>
</ol>
</div></blockquote>
</li>
-<li><p>hdata/spira: parse vpd to add part-number and serial-number to xscom&#64; node</p>
+<li><p class="first">hdata/spira: parse vpd to add part-number and serial-number to xscom&#64; node</p>
<p>Expected by FWTS and associates our processor with the part/serial
number, which is obviously a good thing for one’s own sanity.</p>
</li>
-<li><p>hw/imc: Check for pause_microcode_at_boot() return status</p>
+<li><p class="first">hw/imc: Check for pause_microcode_at_boot() return status</p>
<p>pause_microcode_at_boot() loops through all the chip’s ucode
control block and pause the ucode if it is in the running state.
But it does not fail if any of the chip’s ucode is not initialised.</p>
@@ -89,7 +90,7 @@ of the chip. Since pause_microcode_at_boot() is called just before
attaching the IMC device nodes in imc_init(), add code to check for
the function return.</p>
</li>
-<li><p>core/cpufeatures: Fix setting DARN and SCV HWCAP feature bits</p>
+<li><p class="first">core/cpufeatures: Fix setting DARN and SCV HWCAP feature bits</p>
<p>DARN and SCV has been assigned AT_HWCAP2 (32-63) bits:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">#define PPC_FEATURE2_DARN 0x00200000 /* darn random number insn */</span>
<span class="c1">#define PPC_FEATURE2_SCV 0x00100000 /* scv syscall */</span>
@@ -102,7 +103,6 @@ this patch.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -122,15 +122,17 @@ this patch.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -147,15 +149,14 @@ this patch.</p>
<li class="right" >
<a href="skiboot-5.10.4.html" title="skiboot-5.10.4"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.10.6.html b/doc/release-notes/skiboot-5.10.6.html
index 1738ea9..352c0de 100644
--- a/doc/release-notes/skiboot-5.10.6.html
+++ b/doc/release-notes/skiboot-5.10.6.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.10.6 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.10.6 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.10.5.html" title="skiboot-5.10.5"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10.6</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -54,7 +55,7 @@ especially due to the locking bug fixes.</p>
over as the main stable branch.</p>
<p>Over <a class="reference internal" href="skiboot-5.10.5.html#skiboot-5-10-5"><span class="std std-ref">skiboot-5.10.5</span></a>, we have the following fixes:</p>
<ul>
-<li><p>opal-prd: Do not error out on first failure for soft/hard offline.</p>
+<li><p class="first">opal-prd: Do not error out on first failure for soft/hard offline.</p>
<p>The memory errors (CEs and UEs) that are detected as part of background
memory scrubbing are reported by PRD asynchronously to opal-prd along with
affected memory ranges. hservice_memory_error() converts these ranges into
@@ -64,9 +65,9 @@ infrastructure.</p>
all the pages to soft/hard offline-ing if any of the page offline action
fails. e.g hard offline can fail for:</p>
<ul class="simple">
-<li><p>Pages that are not part of buddy managed pool.</p></li>
-<li><p>Pages that are reserved by kernel using memblock_reserved()</p></li>
-<li><p>Pages that are in use by kernel.</p></li>
+<li>Pages that are not part of buddy managed pool.</li>
+<li>Pages that are reserved by kernel using memblock_reserved()</li>
+<li>Pages that are in use by kernel.</li>
</ul>
<p>But for the pages that are in use by user space application, the hard
offline marks the page as hwpoison, sends SIGBUS signal to kill the
@@ -76,10 +77,10 @@ use by application or free. By stopping on first error we loose the
opportunity to hwpoison the subsequent pages which may be free or in use by
application. This patch fixes this issue.</p>
</li>
-<li><p>xive: fix missing unlock in error path</p>
+<li><p class="first">xive: fix missing unlock in error path</p>
<p>Found with sparse and some added lock annotations.</p>
</li>
-<li><p>OPAL_PCI_SET_POWER_STATE: fix locking in error paths</p>
+<li><p class="first">OPAL_PCI_SET_POWER_STATE: fix locking in error paths</p>
<p>Otherwise we could exit OPAL holding locks, potentially leading
to all sorts of problems later on.</p>
</li>
@@ -87,7 +88,6 @@ to all sorts of problems later on.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -107,15 +107,17 @@ to all sorts of problems later on.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -132,15 +134,14 @@ to all sorts of problems later on.</p>
<li class="right" >
<a href="skiboot-5.10.5.html" title="skiboot-5.10.5"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10.6</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.10.html b/doc/release-notes/skiboot-5.10.html
index dd0788d..1a7c448 100644
--- a/doc/release-notes/skiboot-5.10.html
+++ b/doc/release-notes/skiboot-5.10.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.10 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.10 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.1.9.html" title="skiboot-5.1.9"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -57,17 +58,17 @@ and <a class="reference internal" href="skiboot-5.4.9.html#skiboot-5-4-9"><span
<h2>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot-5.10-rc3:</p>
<ul>
-<li><p>sensor-groups: occ: Add support to disable/enable sensor group</p>
+<li><p class="first">sensor-groups: occ: Add support to disable/enable sensor group</p>
<p>This patch adds a new opal call to enable/disable a sensor group. This
call is used to select the sensor groups that needs to be copied to
main memory by OCC at runtime.</p>
</li>
-<li><p>sensors: occ: Add energy counters</p>
+<li><p class="first">sensors: occ: Add energy counters</p>
<p>Export the accumulated power values as energy sensors. The accumulator
field of power sensors are used for representing energy counters which
can be exported as energy counters in Linux hwmon interface.</p>
</li>
-<li><p>sensors: Support reading u64 sensor values</p>
+<li><p class="first">sensors: Support reading u64 sensor values</p>
<p>This patch adds support to read u64 sensor values. This also adds
changes to the core and the backend implementation code to make this
API as the base call. Host can use this new API to read sensors
@@ -75,7 +76,7 @@ upto 64bits.</p>
<p>This adds a list to store the pointer to the kernel u32 buffer, for
older kernels making async sensor u32 reads.</p>
</li>
-<li><p>dt: add /cpus/ibm,powerpc-cpu-features device tree bindings</p>
+<li><p class="first">dt: add /cpus/ibm,powerpc-cpu-features device tree bindings</p>
<p>This is a new CPU feature advertising interface that is fine-grained,
extensible, aware of privilege levels, and gives control of features
to all levels of the stack (firmware, hypervisor, and OS).</p>
@@ -84,11 +85,11 @@ to all levels of the stack (firmware, hypervisor, and OS).</p>
</ul>
<p>Since skiboot-5.10-rc2:</p>
<ul>
-<li><p>DT: Add “version” property under ibm, firmware-versions node</p>
+<li><p class="first">DT: Add “version” property under ibm, firmware-versions node</p>
<p>First line of VERSION section in PNOR contains firmware version.
Use that to add “version” property under firmware versions dt node.</p>
<p>Sample output:</p>
-<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">root@xxx2:/proc/device-tree/ibm,firmware-versions# </span>lsprop
+<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">root@xxx2:/proc/device-tree/ibm,firmware-versions#</span> lsprop
<span class="go">version &quot;witherspoon-ibm-OP9_v1.19_1.94&quot;</span>
</pre></div>
</div>
@@ -96,16 +97,16 @@ Use that to add “version” property under firmware versions dt node.</p>
</ul>
<p>Since skiboot-5.10-rc1:</p>
<ul class="simple">
-<li><p>hw/npu2: Implement logging HMI actions</p></li>
+<li>hw/npu2: Implement logging HMI actions</li>
</ul>
<p>Since skiboot-5.9:</p>
<ul>
-<li><p>hdata: Parse IPL FW feature settings</p>
+<li><p class="first">hdata: Parse IPL FW feature settings</p>
<p>Add parsing for the firmware feature flags in the HDAT. This
indicates the settings of various parameters which are set at IPL time
by firmware.</p>
</li>
-<li><p>opal/xstop: Use nvram option to enable/disable sw checkstop.</p>
+<li><p class="first">opal/xstop: Use nvram option to enable/disable sw checkstop.</p>
<p>Add a mechanism to enable/disable sw checkstop by looking at nvram option
opal-sw-xstop=&lt;enable/disable&gt;.</p>
<p>For now this patch disables the sw checkstop trigger unless explicitly
@@ -126,7 +127,7 @@ checkstop by default.</p>
</pre></div>
</div>
</li>
-<li><p>hdata: Parse SPD data</p>
+<li><p class="first">hdata: Parse SPD data</p>
<blockquote>
<div><p>Parse SPD data and populate device tree.</p>
<p>list of properties parsing from SPD:</p>
@@ -148,12 +149,13 @@ checkstop by default.</p>
<p>Also update documentation.</p>
</div></blockquote>
</li>
-<li><p>hdata: Add memory hierarchy under xscom node</p>
+<li><p class="first">hdata: Add memory hierarchy under xscom node</p>
<p>We have memory to chip mapping but doesn’t have complete memory hierarchy.
This patch adds memory hierarchy under xscom node. This is specific to
P9 system as these hierarchy may change between processor generation.</p>
-<dl class="simple">
-<dt>It uses memory controller ID details and populates nodes like:</dt><dd><p>xscom&#64;&lt;addr&gt;/mcbist&#64;&lt;mcbist_id&gt;/mcs&#64;&lt;mcs_id&gt;/mca&#64;&lt;mca_id&gt;/dimm&#64;&lt;resource_id&gt;</p>
+<dl class="docutils">
+<dt>It uses memory controller ID details and populates nodes like:</dt>
+<dd><p class="first last">xscom&#64;&lt;addr&gt;/mcbist&#64;&lt;mcbist_id&gt;/mcs&#64;&lt;mcs_id&gt;/mca&#64;&lt;mca_id&gt;/dimm&#64;&lt;resource_id&gt;</p>
</dd>
</dl>
<p>Also this patch adds few properties under dimm node.
@@ -168,7 +170,7 @@ we look to enabling by default in the next release.</p>
around reboot and error conditions. See the full API documentation for details:
<a class="reference internal" href="../opal-api/opal-quiesce-158.html#opal-quiesce"><span class="std std-ref">OPAL_QUIESCE</span></a>.</p>
<ul>
-<li><p>fast-reboot: bare bones fast reboot implementation for POWER9</p>
+<li><p class="first">fast-reboot: bare bones fast reboot implementation for POWER9</p>
<p>This is an initial fast reboot implementation for p9 which has only been
tested on the Witherspoon platform, and without the use of NPUs, NX/VAS,
etc.</p>
@@ -176,19 +178,19 @@ etc.</p>
reboots. It is hidden behind the traditional fast-reboot experimental
nvram option, until more platforms and configurations are tested.</p>
</li>
-<li><p>fast-reboot: move boot CPU clean-up logically together with secondaries</p>
+<li><p class="first">fast-reboot: move boot CPU clean-up logically together with secondaries</p>
<p>Move the boot CPU clean-up and state transition to active, logically
together with secondaries. Don’t release secondaries from fast reboot
hold until everyone has cleaned up and transitioned to active.</p>
<p>This is cosmetic, but it is helpful to run the fast reboot state machine
the same way on all CPUs.</p>
</li>
-<li><p>fast-reboot: improve failure error messages</p>
+<li><p class="first">fast-reboot: improve failure error messages</p>
<p>Change existing failure error messages to PR_NOTICE so they get
printed to the console, and add some new ones. It’s not a more
severe class because it falls back to IPL on failure.</p>
</li>
-<li><p>fast-reboot: quiesce opal before initiating a fast reboot</p>
+<li><p class="first">fast-reboot: quiesce opal before initiating a fast reboot</p>
<p>Switch fast reboot to use quiescing rather than “wait for a while”.</p>
<p>If firmware can not be quiesced, then fast reboot is skipped. This
significantly improves the robustness of fast reboot in the face of
@@ -200,7 +202,7 @@ can be removed.</p>
reduce fast reboot times by nearly 200ms, because quiescing usually
takes very little time.</p>
</li>
-<li><p>core: Add support for quiescing OPAL</p>
+<li><p class="first">core: Add support for quiescing OPAL</p>
<p>Quiescing is ensuring all host controlled CPUs (except the current
one) are out of OPAL and prevented from entering. This can be use in
debug and shutdown paths, particularly with system reset sequences.</p>
@@ -210,7 +212,7 @@ adds logic to “hold” or “reject” at entry time, if OPAL is quiesced.</p>
can be used for shutdown, kexec, and before generating sreset IPIs for
debugging (so the debug code does not recurse into OPAL).</p>
</li>
-<li><p>dctl: p9 increase thread quiesce timeout</p>
+<li><p class="first">dctl: p9 increase thread quiesce timeout</p>
<p>We require all instructions to be completed before a thread is
considered stopped, by the dctl interface. Long running instructions
like cache misses and CI loads may take a significant amount of time
@@ -225,45 +227,46 @@ stuck in firmware.</p>
<h3>POWER9 power saving<a class="headerlink" href="#power9-power-saving" title="Permalink to this headline">¶</a></h3>
<p>There is much improved support for deeper sleep/idle (stop) states on POWER9.</p>
<ul>
-<li><p>OCC: Increase max pstate check on P9 to 255</p>
+<li><p class="first">OCC: Increase max pstate check on P9 to 255</p>
<p>This has changed from P8, we can now have &gt; 127 pstates.</p>
<p>This was observed on Boston during WoF bring up.</p>
</li>
-<li><p>SLW: Add idle state stop5 for DD2.0 and above</p>
+<li><p class="first">SLW: Add idle state stop5 for DD2.0 and above</p>
<p>Adding stop5 idle state with rough residency and latency numbers.</p>
</li>
-<li><p>SLW: Add p9_stop_api calls for IMC</p>
+<li><p class="first">SLW: Add p9_stop_api calls for IMC</p>
<p>Add p9_stop_api for EVENT_MASK and PDBAR scoms. These scoms are lost on
wakeup from stop11.</p>
</li>
-<li><p>SCOM restore for DARN and XIVE</p>
+<li><p class="first">SCOM restore for DARN and XIVE</p>
<p>While waking up from stop11, we want NCU_DARN_BAR to have enable bit set.
Without this stop_api call, the value restored is without enable bit set.
We loose NCU_SPEC_BAR when the quad goes into stop11, stop_api will
restore while waking up from stop11.</p>
</li>
-<li><p>SLW: Call p9_stop_api only if deep_states are enabled</p>
+<li><p class="first">SLW: Call p9_stop_api only if deep_states are enabled</p>
<p>All init time p9_stop_api calls have been isolated to slw_late_init. If
p9_stop_api fails, then the deep states can be excluded from device tree.</p>
<p>For p9_stop_api called after device-tree for cpuidle is created ,
has_deep_states will be used to check if this call is even required.</p>
</li>
-<li><p>Better handle errors in setting up sleep states (p9_stop_api)</p>
+<li><p class="first">Better handle errors in setting up sleep states (p9_stop_api)</p>
<p>We won’t put affected stop states in the device tree if the wakeup
engine is not present or has failed.</p>
</li>
-<li><p>SCOM Restore: Increased the EQ SCOM restore limit.</p>
+<li><p class="first">SCOM Restore: Increased the EQ SCOM restore limit.</p>
<p>Commit increases the SCOM restore limit from 16 to 31.</p>
</li>
-<li><p>hw/dts: retry special wakeup operation if core still gated</p>
+<li><p class="first">hw/dts: retry special wakeup operation if core still gated</p>
<p>It has been observed that in some cases the special wakeup
operation can “succeed” but the core is still in a gated/offline
state.</p>
<p>Check for this state after attempting to wakeup a core and retry
the wakeup if necessary.</p>
</li>
-<li><p>core/direct-controls: add function to read core gated state</p></li>
-<li><p>core/direct-controls: wait for core special wkup bit cleared</p>
+<li><p class="first">core/direct-controls: add function to read core gated state</p>
+</li>
+<li><p class="first">core/direct-controls: wait for core special wkup bit cleared</p>
<p>When clearing special wakeup bit on a core, wait until the
bit is actually cleared by the hardware in the status register
until returning success.</p>
@@ -272,18 +275,18 @@ special wakeup request is cleared but the firmware is still
processing the request and the next attempt to set the bit
reads an immediate success from the previous operation.</p>
</li>
-<li><p>p9_stop_api: PM: Added support for version control in SCOM restore entries.</p>
+<li><p class="first">p9_stop_api: PM: Added support for version control in SCOM restore entries.</p>
<ul class="simple">
-<li><p>adds version info in SCOM restore entry header</p></li>
-<li><p>adds version specific details in SCOM restore entry header</p></li>
-<li><p>retains old behaviour of SGPE Hcode’s base version</p></li>
+<li>adds version info in SCOM restore entry header</li>
+<li>adds version specific details in SCOM restore entry header</li>
+<li>retains old behaviour of SGPE Hcode’s base version</li>
</ul>
</li>
-<li><p>p9_stop_api: EQ SCOM Restore: Introduced version control in SCOM restore entry.</p>
+<li><p class="first">p9_stop_api: EQ SCOM Restore: Introduced version control in SCOM restore entry.</p>
<ul class="simple">
-<li><p>introduces version control in header of SCOM restore entry</p></li>
-<li><p>ensures backward compatibility</p></li>
-<li><p>introduces flexibility to handle any number of SCOM restore entry.</p></li>
+<li>introduces version control in header of SCOM restore entry</li>
+<li>ensures backward compatibility</li>
+<li>introduces flexibility to handle any number of SCOM restore entry.</li>
</ul>
</li>
</ul>
@@ -296,7 +299,7 @@ place to boot to petitboot (i.e. to BOOTKERNEL).</p>
<p>See the <a class="reference internal" href="../stb.html#stb-overview"><span class="std std-ref">Secure and Trusted Boot Library (LibSTB) Documentation</span></a> for full documentation of OPAL secure and trusted boot.</p>
<p>Since skiboot-5.10-rc2:</p>
<ul>
-<li><p>stb: Put correct label (for skiboot) into container</p>
+<li><p class="first">stb: Put correct label (for skiboot) into container</p>
<p>Hostboot will expect the label field of the stb header to contain
“PAYLOAD” for skiboot or it will fail to load and run skiboot.</p>
<p>The failure looks something like this:</p>
@@ -326,15 +329,17 @@ place to boot to petitboot (i.e. to BOOTKERNEL).</p>
</ul>
<p>Since skiboot-5.10-rc1:</p>
<ul>
-<li><p>stb: Enforce secure boot if called before libstb initialized</p></li>
-<li><p>stb: Correctly error out when no PCR for resource</p></li>
-<li><p>core/init: move imc catalog preload init after the STB init.</p>
+<li><p class="first">stb: Enforce secure boot if called before libstb initialized</p>
+</li>
+<li><p class="first">stb: Correctly error out when no PCR for resource</p>
+</li>
+<li><p class="first">core/init: move imc catalog preload init after the STB init.</p>
<p>As a safer side move the imc catalog preload after the STB init
to make sure the imc catalog resource get’s verified and measured
properly during loading when both secure and trusted boot modes
are on.</p>
</li>
-<li><p>libstb: fix failure of calling trusted measure without STB initialization.</p>
+<li><p class="first">libstb: fix failure of calling trusted measure without STB initialization.</p>
<p>When we load a flash resource during OPAL init, STB calls trusted measure
to measure the given resource. There is a situation when a flash gets loaded
before STB initialization then trusted measure cannot measure properly.</p>
@@ -344,7 +349,7 @@ corresponding trusted init was done.</p>
and then do the loading of flash resources, by that way STB can properly
verify and measure the all resources.</p>
</li>
-<li><p>libstb: fix failure of calling cvc verify without STB initialization.</p>
+<li><p class="first">libstb: fix failure of calling cvc verify without STB initialization.</p>
<p>Currently in OPAL init time at various stages we are loading various
PNOR partition containers from the flash device. When we load a flash
resource STB calls the CVC verify and trusted measure(sha512) functions.
@@ -360,8 +365,9 @@ STB init was done.</p>
<p>And also we need a permanent fix in init path to ensure STB init gets
done at first place and then start loading all other flash resources.</p>
</li>
-<li><p>libstb/tpm_chip: Add missing new line to print messages.</p></li>
-<li><p>libstb: increase the log level of verify/measure messages to PR_NOTICE.</p>
+<li><p class="first">libstb/tpm_chip: Add missing new line to print messages.</p>
+</li>
+<li><p class="first">libstb: increase the log level of verify/measure messages to PR_NOTICE.</p>
<p>Currently libstb logs the verify and hash caluculation messages in
PR_INFO level. So when there is a secure boot enforcement happens
in loading last flash resource(Ex: BOOTKERNEL), the previous verify
@@ -372,13 +378,13 @@ So this patch fixes this by increasing the log level to PR_NOTICE.</p>
</ul>
<p>Since skiboot-5.9:</p>
<ul>
-<li><p>allow secure boot if not enforcing it</p>
+<li><p class="first">allow secure boot if not enforcing it</p>
<p>We check the secure boot containers no matter what, only <em>enforcing</em>
secure boot if we’re booting in secure mode. This gives us an extra
layer of checking firmware is legit even when secure mode isn’t enabled,
as well as being really useful for testing.</p>
</li>
-<li><p>libstb/(create|print)-container: Sync with sb-signing-utils</p>
+<li><p class="first">libstb/(create|print)-container: Sync with sb-signing-utils</p>
<p>The sb-signing-utils project has improved upon the skeleton
create-container tool that existed in skiboot, including
being able to (quite easily) create <em>signed</em> images.</p>
@@ -394,44 +400,45 @@ upstream project.</p>
at v0.3-5-gcb111c03ad7f
(Some discussion ongoing on the changes, another sync will come shortly)</p>
</li>
-<li><p>doc: update libstb documentation with POWER9 changes.
+<li><p class="first">doc: update libstb documentation with POWER9 changes.
See: <a class="reference internal" href="../stb.html#stb-overview"><span class="std std-ref">Secure and Trusted Boot Library (LibSTB) Documentation</span></a>.</p>
<p>POWER9 changes reflected in the libstb:</p>
<blockquote>
<div><ul class="simple">
-<li><p>bumped ibm,secureboot node to v2</p></li>
-<li><p>added ibm,cvc node</p></li>
-<li><p>hash-algo superseded by hw-key-hash-size</p></li>
+<li>bumped ibm,secureboot node to v2</li>
+<li>added ibm,cvc node</li>
+<li>hash-algo superseded by hw-key-hash-size</li>
</ul>
</div></blockquote>
</li>
-<li><p>libstb/cvc: update memory-region to point to /reserved-memory</p>
+<li><p class="first">libstb/cvc: update memory-region to point to /reserved-memory</p>
<p>The linux documentation, reserved-memory.txt, says that memory-region is
a phandle that pairs to a children of /reserved-memory.</p>
-<dl class="simple">
-<dt>This updates /ibm,secureboot/ibm,cvc/memory-region to point to</dt><dd><p>/reserved-memory/secure-crypt-algo-code instead of
+<dl class="docutils">
+<dt>This updates /ibm,secureboot/ibm,cvc/memory-region to point to</dt>
+<dd><p class="first last">/reserved-memory/secure-crypt-algo-code instead of
/ibm,hostboot/reserved-memory/secure-crypt-algo-code.</p>
</dd>
</dl>
</li>
-<li><p>libstb: add support for ibm,secureboot-v2</p>
+<li><p class="first">libstb: add support for ibm,secureboot-v2</p>
<p>ibm,secureboot-v2 changes:</p>
<blockquote>
<div><ul class="simple">
-<li><p>The Container Verification Code is represented by the ibm,cvc node.</p></li>
-<li><p>Each ibm,cvc child describes a CVC service.</p></li>
-<li><p>hash-algo is superseded by hw-key-hash-size.</p></li>
+<li>The Container Verification Code is represented by the ibm,cvc node.</li>
+<li>Each ibm,cvc child describes a CVC service.</li>
+<li>hash-algo is superseded by hw-key-hash-size.</li>
</ul>
</div></blockquote>
</li>
-<li><p>hdata/tpmrel.c: add ibm, cvc device tree node</p>
+<li><p class="first">hdata/tpmrel.c: add ibm, cvc device tree node</p>
<p>In P9, the Container Verification Code is stored in a hostboot reserved
memory and the list of provided CVC services is stored in the
TPMREL_IDATA_HASH_VERIF_OFFSETS idata array. Each CVC service has an
offset and version.</p>
<p>This adds the ibm,cvc device tree node and its documentation.</p>
</li>
-<li><p>hdata/tpmrel.c: add firmware event log info to the tpm node</p>
+<li><p class="first">hdata/tpmrel.c: add firmware event log info to the tpm node</p>
<p>This parses the firmware event log information from the
secureboot_tpm_info HDAT structure and add it to the tpm device tree
node.</p>
@@ -439,18 +446,18 @@ node.</p>
corresponding to a master processor that has a tpm device, however,
multiple tpm is not supported.</p>
</li>
-<li><p>hdata/spira: add ibm,secureboot node in P9</p>
+<li><p class="first">hdata/spira: add ibm,secureboot node in P9</p>
<p>In P9, skiboot builds the device tree from the HDAT. These are the
“ibm,secureboot” node changes compared to P8:</p>
<blockquote>
<div><ul class="simple">
-<li><p>The Container-Verification-Code (CVC), a.k.a. ROM code, is no longer
+<li>The Container-Verification-Code (CVC), a.k.a. ROM code, is no longer
stored in a secure ROM with static address. In P9, it is stored in a
hostboot reserved memory and each service provided also has a version,
-not only an offset.</p></li>
-<li><p>The hash-algo property is not provided via HDAT, instead it provides
+not only an offset.</li>
+<li>The hash-algo property is not provided via HDAT, instead it provides
the hw-key-hash-size, which is indeed the information required by the
-CVC to verify containers.</p></li>
+CVC to verify containers.</li>
</ul>
</div></blockquote>
<p>This parses the iplparams_sysparams HDAT structure and creates the
@@ -458,20 +465,20 @@ CVC to verify containers.</p></li>
<p>In “ibm,secureboot-v2”:</p>
<blockquote>
<div><ul class="simple">
-<li><p>hash-algo property is superseded by hw-key-hash-size.</p></li>
-<li><p>container verification code is explicitly described by a child node.
-Added in a subsequent patch.</p></li>
+<li>hash-algo property is superseded by hw-key-hash-size.</li>
+<li>container verification code is explicitly described by a child node.
+Added in a subsequent patch.</li>
</ul>
</div></blockquote>
-<p>See <a class="reference internal" href="../device-tree/ibm%2Csecureboot.html#device-tree-ibm-secureboot"><span class="std std-ref">ibm,secureboot</span></a> for documentation.</p>
+<p>See <a class="reference internal" href="../device-tree/ibm,secureboot.html#device-tree-ibm-secureboot"><span class="std std-ref">ibm,secureboot</span></a> for documentation.</p>
</li>
-<li><p>libstb/tpm_chip.c: define pr_fmt and fix messages logged</p>
+<li><p class="first">libstb/tpm_chip.c: define pr_fmt and fix messages logged</p>
<p>This defines pr_fmt and also fix messages logged:</p>
<blockquote>
<div><ul class="simple">
-<li><p>EV_SEPARATOR instead of 0xFFFFFFFF</p></li>
-<li><p>when an event is measured it also prints the tpm id, event type and
-event log length</p></li>
+<li>EV_SEPARATOR instead of 0xFFFFFFFF</li>
+<li>when an event is measured it also prints the tpm id, event type and
+event log length</li>
</ul>
</div></blockquote>
<p>Now we can filter the messages logged by libstb and its
@@ -480,7 +487,7 @@ sub-modules by running:</p>
</pre></div>
</div>
</li>
-<li><p>libstb/tss: update the list of event types supported</p>
+<li><p class="first">libstb/tss: update the list of event types supported</p>
<p>Skiboot, precisely the tpmLogMgr, initializes the firmware event log by
calculating its length so that a new event can be recorded without
exceeding the log size. In order to calculate the size, it walks through
@@ -490,29 +497,29 @@ of the log.</p>
<p>This updates the list of event types with all of those supported by
hostboot. Thus, skiboot can properly calculate the event log length.</p>
</li>
-<li><p>tpm_i2c_nuvoton: add nuvoton, npct601 to the compatible property</p>
+<li><p class="first">tpm_i2c_nuvoton: add nuvoton, npct601 to the compatible property</p>
<p>The linux kernel doesn’t have a driver compatible with
“nuvoton,npct650”, but it does have for “nuvoton,npct601”, which should
also be compatible with npct650.</p>
<p>This adds “nuvoton,npct601” to the compatible devtree property.</p>
</li>
-<li><p>libstb/trustedboot.c: import stb_final() from stb.c</p>
+<li><p class="first">libstb/trustedboot.c: import stb_final() from stb.c</p>
<p>The stb_final() primary goal is to measure the event EV_SEPARATOR
into PCR[0-7] when trusted boot is about to exit the boot services.</p>
<p>This imports the stb_final() from stb.c into trustedboot.c, but making
the following changes:</p>
<blockquote>
<div><ul class="simple">
-<li><p>Rename it to trustedboot_exit_boot_services().</p></li>
-<li><p>As specified in the TCG PC Client specification, EV_SEPARATOR events must
-be logged with the name 0xFFFFFF.</p></li>
-<li><p>Remove the ROM driver clean-up call.</p></li>
-<li><p>Don’t allow code to be measured in skiboot after
-trustedboot_exit_boot_services() is called.</p></li>
+<li>Rename it to trustedboot_exit_boot_services().</li>
+<li>As specified in the TCG PC Client specification, EV_SEPARATOR events must
+be logged with the name 0xFFFFFF.</li>
+<li>Remove the ROM driver clean-up call.</li>
+<li>Don’t allow code to be measured in skiboot after
+trustedboot_exit_boot_services() is called.</li>
</ul>
</div></blockquote>
</li>
-<li><p>libstb/cvc.c: import softrom behaviour from drivers/sw_driver.c</p>
+<li><p class="first">libstb/cvc.c: import softrom behaviour from drivers/sw_driver.c</p>
<p>Softrom is used only for testing with mambo. By setting
compatible=”ibm,secureboot-v1-softrom” in the “ibm,secureboot” node,
firmware images can be properly measured even if the
@@ -524,7 +531,7 @@ into cvc.c, but now softrom is implemented as a flag. When the flag is
set, the wrappers for the CVC services work the same way as in
sw_driver.c.</p>
</li>
-<li><p>libstb/trustedboot.c: import tb_measure() from stb.c</p>
+<li><p class="first">libstb/trustedboot.c: import tb_measure() from stb.c</p>
<p>This imports tb_measure() from stb.c, but now it calls the CVC sha512
wrapper to calculate the sha512 hash of the firmware image provided.</p>
<p>In trustedboot.c, the tb_measure() is renamed to trustedboot_measure().</p>
@@ -532,20 +539,22 @@ wrapper to calculate the sha512 hash of the firmware image provided.</p>
container payload hash calculated at boot time matches with the hash
found in the container header. A few reasons:</p>
<ul>
-<li><p>If the system admin wants the container header to be
+<li><p class="first">If the system admin wants the container header to be
checked/validated, the secure boot jumper must be set. Otherwise,
-the container header information may not be reliable.</p></li>
-<li><p>The container layout is expected to change over time. Skiboot
+the container header information may not be reliable.</p>
+</li>
+<li><p class="first">The container layout is expected to change over time. Skiboot
would need to maintain a parser for each container layout
-change.</p></li>
-<li><p>Skiboot could be checking the hash against a container version that
+change.</p>
+</li>
+<li><p class="first">Skiboot could be checking the hash against a container version that
is not supported by the Container-Verification-Code (CVC).</p>
<p>The tb_measure() calls are updated to trustedboot_measure() in a
subsequent patch.</p>
</li>
</ul>
</li>
-<li><p>libstb/secureboot.c: import sb_verify() from stb.c</p>
+<li><p class="first">libstb/secureboot.c: import sb_verify() from stb.c</p>
<p>This imports the sb_verify() function from stb.c, but now it calls the
CVC verify wrapper in order to verify signed firmware images. The
hw-key-hash and hw-key-hash-size initialized in secureboot.c are passed
@@ -559,29 +568,29 @@ sb_verify() calls are updated in a subsequent patch.</p>
<div class="section" id="xive">
<h2>XIVE<a class="headerlink" href="#xive" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>xive: Don’t bother cleaning up disabled EQs in reset</p>
+<li><p class="first">xive: Don’t bother cleaning up disabled EQs in reset</p>
<p>Additionally, warn if we find an enabled one that isn’t one
of the firmware built-in queues.</p>
</li>
-<li><p>xive: Warn on valid VPs found in abnormal cases</p>
+<li><p class="first">xive: Warn on valid VPs found in abnormal cases</p>
<p>If an allocated VP is left valid at xive_reset() or Linux tries
to free a valid (enabled) VP block, print errors. The former happens
occasionally if kdump’ing while KVM is running so keep it as a debug
message. The latter is a programming error in Linux so use a an
error log level.</p>
</li>
-<li><p>xive: Properly reserve built-in VPs in non-group mode</p>
+<li><p class="first">xive: Properly reserve built-in VPs in non-group mode</p>
<p>This is not normally used but if the #define is changed to
disable block group mode we would incorrectly clear the
buddy completely without marking the built-in VPs reserved.</p>
</li>
-<li><p>xive: Quieten debug messages in standard builds</p>
+<li><p class="first">xive: Quieten debug messages in standard builds</p>
<p>This makes a bunch of messages, especially the per-CPU ones,
only enabled in debug builds. This avoids clogging up the
OPAL logs with XIVE related messages that have proven not
being particularly useful for field defects.</p>
</li>
-<li><p>xive: Implement “single escalation” feature</p>
+<li><p class="first">xive: Implement “single escalation” feature</p>
<p>This adds a new VP flag to control the new DD2.0
“single escalation” feature.</p>
<p>This feature allows us to have a single escalation
@@ -590,42 +599,43 @@ interrupt per VP instead of one per queue.</p>
usable when that is enabled) and exploiting two new
hardware bits that will:</p>
<ul class="simple">
-<li><p>Make the normal queues (0..6) escalate unconditionally
-thus ignoring the ESe bits.</p></li>
-<li><p>Route the above escalations to queue 7</p></li>
-<li><p>Have queue 7 silently escalate without notification</p></li>
+<li>Make the normal queues (0..6) escalate unconditionally
+thus ignoring the ESe bits.</li>
+<li>Route the above escalations to queue 7</li>
+<li>Have queue 7 silently escalate without notification</li>
</ul>
<p>Thus the escalation of queue 7 becomes the one escalation
interrupt for all the other queues.</p>
</li>
-<li><p>xive: When disabling a VP, wipe all of its settings</p></li>
-<li><p>xive: Improve cleaning up of EQs</p>
+<li><p class="first">xive: When disabling a VP, wipe all of its settings</p>
+</li>
+<li><p class="first">xive: Improve cleaning up of EQs</p>
<p>Factors out the function that sets an EQ back to a clean
state and add a cleaning pass for queue left enabled
when freeing a block of VPs.</p>
</li>
-<li><p>xive: When disabling an EQ, wipe all of its settings</p>
+<li><p class="first">xive: When disabling an EQ, wipe all of its settings</p>
<p>This avoids having configuration bits left over</p>
</li>
-<li><p>xive: Define API for single-escalation VP mode</p>
+<li><p class="first">xive: Define API for single-escalation VP mode</p>
<p>This mode allows all queues of a VP to use the same
escalation interrupt, at the cost of losing priority 7.</p>
<p>This adds the definition and documentation of the API,
the implementation will come next.</p>
</li>
-<li><p>xive: Fix ability to clear some EQ flags</p>
+<li><p class="first">xive: Fix ability to clear some EQ flags</p>
<p>We could never clear “unconditional notify” and “escalate”</p>
</li>
-<li><p>xive: Update inits for DD2.0</p>
+<li><p class="first">xive: Update inits for DD2.0</p>
<p>This updates some inits based on information from the HW
designers. This includes enabling some new DD2.0 features
that we don’t yet exploit.</p>
</li>
-<li><p>xive: Ensure VC informational FIRs are masked</p>
+<li><p class="first">xive: Ensure VC informational FIRs are masked</p>
<p>Some HostBoot versions leave those as checkstop, they are harmless
and can sometimes occur during normal operations.</p>
</li>
-<li><p>xive: Fix occasional VC checkstops in xive_reset</p>
+<li><p class="first">xive: Fix occasional VC checkstops in xive_reset</p>
<p>The current workaround for the scrub bug described in
__xive_cache_scrub() has an issue in that it can leave
dirty invalid entries in the cache.</p>
@@ -636,20 +646,20 @@ of the cache.</p>
<p>This replaces the existing workaround with a new pair of
workarounds for VPs and EQs:</p>
<ul class="simple">
-<li><p>The VP one does the dummy watch on another entry than
+<li>The VP one does the dummy watch on another entry than
the one we scrubbed (which does the job of pushing old
stores out) using an entry that is known to be backed by
-a permanent indirect page.</p></li>
-<li><p>The EQ one switches to a more efficient workaround
+a permanent indirect page.</li>
+<li>The EQ one switches to a more efficient workaround
which consists of doing a non-side-effect ESB load from
-the EQ’s ESe control bits.</p></li>
+the EQ’s ESe control bits.</li>
</ul>
</li>
-<li><p>xive: Do not return a trigger page for an escalation interrupt</p>
+<li><p class="first">xive: Do not return a trigger page for an escalation interrupt</p>
<p>This is bogus, we don’t support them. (Thankfully the callers
didn’t actually try to use this on escalation interrupts).</p>
</li>
-<li><p>xive: Mark a freed IRQs IVE as valid and masked</p>
+<li><p class="first">xive: Mark a freed IRQs IVE as valid and masked</p>
<p>Removing the valid bit means a FIR will trip if it’s accessed
inadvertently. Under some circumstances, the XIVE will speculatively
access an IVE for a masked interrupt and trip it. So make sure that
@@ -661,21 +671,21 @@ freed entries are still marked valid (but masked).</p>
<h2>PCI<a class="headerlink" href="#pci" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot-5.10-rc3:</p>
<ul>
-<li><p>phb3/phb4/p7ioc: Document supported TCE sizes in DT</p>
+<li><p class="first">phb3/phb4/p7ioc: Document supported TCE sizes in DT</p>
<p>Add a new property, “ibm,supported-tce-sizes”, to advertise to Linux how
big the available TCE sizes are. Each value is a bit shift, from
smallest to largest.</p>
</li>
-<li><p>phb4: Fix TCE page size</p>
+<li><p class="first">phb4: Fix TCE page size</p>
<p>The page sizes for TCEs on P9 were inaccurate and just copied from PHB3,
so correct them.</p>
</li>
-<li><p>Revert “pci: Shared slot state synchronisation for hot reset”</p>
+<li><p class="first">Revert “pci: Shared slot state synchronisation for hot reset”</p>
<p>An issue was found in shared slot reset where the system can be stuck in
an infinite loop, pull the code out until there’s a proper fix.</p>
<p>This reverts commit 1172a6c57ff3c66f6361e572a1790cbcc0e5ff37.</p>
</li>
-<li><p>hdata/iohub: Use only wildcard slots for pluggables</p>
+<li><p class="first">hdata/iohub: Use only wildcard slots for pluggables</p>
<p>We don’t want to cause a VID:DID check against pluggable devices, as
they may use multiple devids.</p>
<p>Narrow the condition under which VID:DID is listed in the dt, so that
@@ -684,13 +694,13 @@ we’ll end up creating a wildcard slot for these instead.</p>
</ul>
<p>Since skiboot-5.9:</p>
<ul>
-<li><p>pci: Shared slot state synchronisation for hot reset</p>
+<li><p class="first">pci: Shared slot state synchronisation for hot reset</p>
<p>When a device is shared between two PHBs, it doesn’t get reset properly
unless both PHBs issue a hot reset at “the same time”. Practically this
means a hot reset needs to be issued on both sides, and neither should
bring the link up until the reset on both has completed.</p>
</li>
-<li><p>pci: Track peers of slots</p>
+<li><p class="first">pci: Track peers of slots</p>
<p>Witherspoon introduced a new concept where one physical slot is shared
between two PHBs. Making a slot aware of its peer enables syncing
between them where necessary.</p>
@@ -701,7 +711,7 @@ between them where necessary.</p>
<h2>PHB4<a class="headerlink" href="#phb4" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot-5.10-rc4:</p>
<ul>
-<li><p>phb4: Disable lane eq when retrying some nvidia GEN3 devices</p>
+<li><p class="first">phb4: Disable lane eq when retrying some nvidia GEN3 devices</p>
<p>This fixes these nvidia cards training at only GEN2 spends rather than
GEN3 by disabling PCIe lane equalisation.</p>
<p>Firstly we check if the card is in a whitelist. If it is and the link
@@ -712,7 +722,7 @@ a POWER9 chip issue.</p>
</ul>
<p>Since skiboot-5.10-rc2:</p>
<ul>
-<li><p>phb4: Only escalate freezes on MMIO load where necessary</p>
+<li><p class="first">phb4: Only escalate freezes on MMIO load where necessary</p>
<p>In order to work around a hardware issue, MMIO load freezes were
escalated to fences on every chip. Now that hardware no longer requires
this, restrict escalation to the chips that actually need it.</p>
@@ -720,7 +730,7 @@ this, restrict escalation to the chips that actually need it.</p>
</ul>
<p>Since skiboot-5.9:</p>
<ul>
-<li><p>phb4: Change PCI MMIO timers</p>
+<li><p class="first">phb4: Change PCI MMIO timers</p>
<p>Currently we have a mismatch between the NCU and PCI timers for MMIO
accesses. The PCI timers must be lower than the NCU timers otherwise
it may cause checkstops.</p>
@@ -728,7 +738,7 @@ it may cause checkstops.</p>
be forwards and backwards compatible with expected hostboot changes to
the NCU timer.</p>
</li>
-<li><p>phb4: Change default GEN3 lane equalisation setting to 0x54</p>
+<li><p class="first">phb4: Change default GEN3 lane equalisation setting to 0x54</p>
<p>Currently our GEN3 lane equalisation settings are set to 0x77. Change
this to 0x54. This change will allow us to train at GEN3 in a shorter
time and more consistently.</p>
@@ -738,23 +748,23 @@ continuous time linear equalizers (CTLE) for the remote receiver port
and de-emphasis and pre-shoot for the remote transmitter port.</p>
<p>Machine Readable Workbooks (MRW) are moving to this new value also.</p>
</li>
-<li><p>phb4: Init changes</p>
+<li><p class="first">phb4: Init changes</p>
<p>These init changes for phb4 from the HW team.</p>
<p>Link down are now endpoint recoverable (ERC) rather than PHB fatal
errors.</p>
<p>BLIF Completion Timeout Error now generate an interrupt rather than
causing freeze events.</p>
</li>
-<li><p>phb4: Fix lane equalisation setting</p>
+<li><p class="first">phb4: Fix lane equalisation setting</p>
<p>Fix cut and paste from phb3. The sizes have changes now we have GEN4,
so the check here needs to change also</p>
<p>Without this we end up with the default settings (all â€7’) rather
than what’s in HDAT.</p>
</li>
-<li><p>hdata: Fix copying GEN4 lane equalisation settings</p>
+<li><p class="first">hdata: Fix copying GEN4 lane equalisation settings</p>
<p>These aren’t copied currently but should be.</p>
</li>
-<li><p>phb4: Fix PE mapping of M32 BAR</p>
+<li><p class="first">phb4: Fix PE mapping of M32 BAR</p>
<p>The M32 BAR is the PHB4 region used to map all the non-prefetchable
or 32-bit device BARs. It’s supposed to have its segments remapped
via the MDT and Linux relies on that to assign them individual PE#.</p>
@@ -762,12 +772,12 @@ via the MDT and Linux relies on that to assign them individual PE#.</p>
mode where PE# == segment#, thus causing EEH to freeze the wrong
device or PE#.</p>
</li>
-<li><p>phb4: Fix lost bit in PE number on config accesses</p>
+<li><p class="first">phb4: Fix lost bit in PE number on config accesses</p>
<p>A PE number can be up to 9 bits, using a uint8_t won’t fly..</p>
<p>That was causing error on config accesses to freeze the
wrong PE.</p>
</li>
-<li><p>phb4: Update inits</p>
+<li><p class="first">phb4: Update inits</p>
<p>New init value from HW folks for the fence enable register.</p>
<p>This clears bit 17 (CFG Write Error CA or UR response) and bit 22 (MMIO Write
DAT_ERR Indication) and sets bit 21 (MMIO CFG Pending Error)</p>
@@ -778,7 +788,7 @@ DAT_ERR Indication) and sets bit 21 (MMIO CFG Pending Error)</p>
<h2>CAPI<a class="headerlink" href="#capi" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot-5.10-rc2:</p>
<ul>
-<li><p>capi: Enable channel tag streaming for PHB in CAPP mode</p>
+<li><p class="first">capi: Enable channel tag streaming for PHB in CAPP mode</p>
<p>We re-enable channel tag streaming for PHB in CAPP mode as without it
PEC was waiting for cresp for each DMA write command before sending a
new DMA write command on the Powerbus. This resulted in much lower DMA
@@ -791,7 +801,7 @@ xscom_write_mask instead of xscom_read followed by a xscom_write.</p>
</ul>
<p>Since skiboot-5.10-rc1:</p>
<ul>
-<li><p>capi: Fix the max tlbi divider and the directory size.</p>
+<li><p class="first">capi: Fix the max tlbi divider and the directory size.</p>
<p>Switch to 512KB mode (directory size) as we don’t use bit 48 of the tag
in addressing the array. This mode is controlled by the Snoop CAPI
Configuration Register.
@@ -801,7 +811,7 @@ TLBI hang detect timer expired. The value of â€0000’ is equal to 16.</p>
</ul>
<p>Since skiboot-5.9:</p>
<ul>
-<li><p>capi: Disable CAPP virtual machines</p>
+<li><p class="first">capi: Disable CAPP virtual machines</p>
<p>When exercising more than one CAPI accelerators simultaneously in
cache coherency mode, the verification team is seeing a deadlock. To
fix this a workaround of disabling CAPP virtual machines is
@@ -815,12 +825,12 @@ another CAPI is requesting) get stuck in the virtual machine queue by
a command ahead of it that is being retried by the same scenario in
the other CAPI. “</p>
</li>
-<li><p>capi: Perform capp recovery sequence only when PBCQ is idle</p>
+<li><p class="first">capi: Perform capp recovery sequence only when PBCQ is idle</p>
<p>Presently during a CRESET the CAPP recovery sequence can be executed
multiple times in case PBCQ on the PEC is still busy processing in/out
bound in-flight transactions.</p>
</li>
-<li><p>xive: Mask MMIO load/store to bad location FIR</p>
+<li><p class="first">xive: Mask MMIO load/store to bad location FIR</p>
<p>For opencapi, the trigger page of an interrupt is mapped to user
space. The intent is to write the page to raise an interrupt but
there’s nothing to prevent a user process from reading it, which has
@@ -830,7 +840,7 @@ location. It’s the recommendation from recent documentation and
hostboot is expected to mask it at some point. In the meantime, let’s
play it safe.</p>
</li>
-<li><p>phb4: Dump CAPP error registers when it asserts link down</p>
+<li><p class="first">phb4: Dump CAPP error registers when it asserts link down</p>
<p>This patch introduces a new function phb4_dump_app_err_regs() that
dumps CAPP error registers in case the PEC nestfir register indicates
that the fence was due to a CAPP error (BIT-24).</p>
@@ -838,23 +848,23 @@ that the fence was due to a CAPP error (BIT-24).</p>
issues. Registers that are dumped in phb4_dump_app_err_regs() are:</p>
<blockquote>
<div><ul class="simple">
-<li><p>CAPP FIR Register</p></li>
-<li><p>CAPP APC Master Error Report Register</p></li>
-<li><p>CAPP Snoop Error Report Register</p></li>
-<li><p>CAPP Transport Error Report Register</p></li>
-<li><p>CAPP TLBI Error Report Register</p></li>
-<li><p>CAPP Error Status and Control Register</p></li>
+<li>CAPP FIR Register</li>
+<li>CAPP APC Master Error Report Register</li>
+<li>CAPP Snoop Error Report Register</li>
+<li>CAPP Transport Error Report Register</li>
+<li>CAPP TLBI Error Report Register</li>
+<li>CAPP Error Status and Control Register</li>
</ul>
</div></blockquote>
</li>
-<li><p>capi: move the acknowledge of the HMI interrupt</p>
+<li><p class="first">capi: move the acknowledge of the HMI interrupt</p>
<p>We need to acknowledge an eventual HMI initiated by the previous forced
fence on the PHB to work around a non-existent PE in the phb4_creset()
function.
For this reason do_capp_recovery_scoms() is called now at the
beginning of the step: PHB4_SLOT_CRESET_WAIT_CQ</p>
</li>
-<li><p>capi: update ci store buffers and dma engines</p>
+<li><p class="first">capi: update ci store buffers and dma engines</p>
<p>The number of read (APC type traffic) and mmio store (MSG type traffic)
resources assigned to the CAPP is controlled by the CAPP control
register.</p>
@@ -867,27 +877,28 @@ to the CAPP for use.</p>
<div class="section" id="hmi">
<h2>HMI<a class="headerlink" href="#hmi" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>core/hmi: Display chip location code while displaying core FIR.</p></li>
-<li><p>core/hmi: Do not display FIR details if none of the bits are set.</p>
+<li><p class="first">core/hmi: Display chip location code while displaying core FIR.</p>
+</li>
+<li><p class="first">core/hmi: Do not display FIR details if none of the bits are set.</p>
<p>So that we don’t flood OPAL console logs with information that is not
useful.</p>
</li>
-<li><p>opal/hmi: HMI logging with location code info.</p>
+<li><p class="first">opal/hmi: HMI logging with location code info.</p>
<p>Add few HMI debug prints with location code info few additional info.</p>
<p>No functionality change.</p>
<p>With this patch the log messages will look like:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mf">210612.175196744</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="n">Received</span> <span class="n">HMI</span> <span class="n">interrupt</span><span class="p">:</span> <span class="n">HMER</span> <span class="o">=</span> <span class="mh">0x0840000000000000</span>
-<span class="p">[</span><span class="mf">210612.175200449</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">UOPWR</span><span class="mf">.1302</span><span class="n">LFA</span><span class="o">-</span><span class="n">Node0</span><span class="o">-</span><span class="n">Proc1</span><span class="p">]:</span> <span class="n">P</span><span class="p">:</span><span class="mi">8</span> <span class="n">C</span><span class="p">:</span><span class="mi">16</span> <span class="n">T</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span> <span class="n">TFMR</span><span class="p">(</span><span class="mi">2</span><span class="n">d12000870e04020</span><span class="p">)</span> <span class="n">Timer</span> <span class="n">Facility</span> <span class="n">Error</span>
+<span class="p">[</span><span class="mf">210612.175200449</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">UOPWR</span><span class="o">.</span><span class="mi">1302</span><span class="n">LFA</span><span class="o">-</span><span class="n">Node0</span><span class="o">-</span><span class="n">Proc1</span><span class="p">]:</span> <span class="n">P</span><span class="p">:</span><span class="mi">8</span> <span class="n">C</span><span class="p">:</span><span class="mi">16</span> <span class="n">T</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span> <span class="n">TFMR</span><span class="p">(</span><span class="mi">2</span><span class="n">d12000870e04020</span><span class="p">)</span> <span class="n">Timer</span> <span class="n">Facility</span> <span class="n">Error</span>
<span class="p">[</span><span class="mf">210660.259689526</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="n">Received</span> <span class="n">HMI</span> <span class="n">interrupt</span><span class="p">:</span> <span class="n">HMER</span> <span class="o">=</span> <span class="mh">0x2040000000000000</span>
-<span class="p">[</span><span class="mf">210660.259695649</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">UOPWR</span><span class="mf">.1302</span><span class="n">LFA</span><span class="o">-</span><span class="n">Node0</span><span class="o">-</span><span class="n">Proc0</span><span class="p">]:</span> <span class="n">P</span><span class="p">:</span><span class="mi">0</span> <span class="n">C</span><span class="p">:</span><span class="mi">16</span> <span class="n">T</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span> <span class="n">Processor</span> <span class="n">recovery</span> <span class="n">Done</span><span class="o">.</span>
+<span class="p">[</span><span class="mf">210660.259695649</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">UOPWR</span><span class="o">.</span><span class="mi">1302</span><span class="n">LFA</span><span class="o">-</span><span class="n">Node0</span><span class="o">-</span><span class="n">Proc0</span><span class="p">]:</span> <span class="n">P</span><span class="p">:</span><span class="mi">0</span> <span class="n">C</span><span class="p">:</span><span class="mi">16</span> <span class="n">T</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span> <span class="n">Processor</span> <span class="n">recovery</span> <span class="n">Done</span><span class="o">.</span>
</pre></div>
</div>
</li>
-<li><p>core/hmi: Use pr_fmt macro for tagging log messages</p>
+<li><p class="first">core/hmi: Use pr_fmt macro for tagging log messages</p>
<p>No functionality changes.</p>
</li>
-<li><p>opal: Get chip location code</p>
+<li><p class="first">opal: Get chip location code</p>
<p>and store it under proc_chip for quick reference during HMI handling
code.</p>
</li>
@@ -896,22 +907,22 @@ code.</p>
<div class="section" id="sensors">
<h2>Sensors<a class="headerlink" href="#sensors" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>occ-sensors: Fix up quad/gpu location mix-up</p>
+<li><p class="first">occ-sensors: Fix up quad/gpu location mix-up</p>
<p>The GPU and QUAD sensor location types are swapped compared to what
exists in the OCC code base which is authoritative. Fix them up.</p>
</li>
-<li><p>sensors: occ: Skip counter type of sensors</p>
+<li><p class="first">sensors: occ: Skip counter type of sensors</p>
<p>Don’t add counter type of sensors to device-tree as they don’t
fit into hwmon sensor interface.</p>
</li>
-<li><p>sensors: dts: Assert special wakeup on idle cores while reading temperature</p>
+<li><p class="first">sensors: dts: Assert special wakeup on idle cores while reading temperature</p>
<p>In P9, when a core enters a stop state, its clocks will be stopped
to save power and hence we will not be able to perform a SCOM
operation to read the DTS temperature sensor. Hence, assert
a special wakeup on cores that have entered a stop state in order to
successfully complete the SCOM operation.</p>
</li>
-<li><p>sensors: occ: Skip power sensors with zero sample value</p>
+<li><p class="first">sensors: occ: Skip power sensors with zero sample value</p>
<p>APSS is not available on platforms like Zaius, Romulus where OCC
can only measure Vdd (core) and Vdn (nest) power from the AVSbus
reading. So all the sensors for APSS channels will be populated
@@ -920,33 +931,34 @@ which point to the APSS channels will also be 0.</p>
<p>As per OCC team (Martha Broyles) zeroed power sensor means that the
system doesn’t have it. So this patch filters out these sensors.</p>
</li>
-<li><p>sensors: occ: Skip GPU sensors for non-gpu systems</p></li>
-<li><p>sensors: Fix dtc warning for new occ in-band sensors.</p>
+<li><p class="first">sensors: occ: Skip GPU sensors for non-gpu systems</p>
+</li>
+<li><p class="first">sensors: Fix dtc warning for new occ in-band sensors.</p>
<p>dtc complains about missing reg property when a DT node is having a
unit name or address but no reg property.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">sensors</span><span class="o">/</span><span class="n">vrm</span><span class="o">-</span><span class="ow">in</span><span class="nd">@c00004</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
<span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">sensors</span><span class="o">/</span><span class="n">gpu</span><span class="o">-</span><span class="ow">in</span><span class="nd">@c0001f</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
-<span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">sensor</span><span class="o">-</span><span class="n">groups</span><span class="o">/</span><span class="n">occ</span><span class="o">-</span><span class="n">js</span><span class="o">@</span><span class="mi">1</span><span class="n">c00040</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
+<span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">sensor</span><span class="o">-</span><span class="n">groups</span><span class="o">/</span><span class="n">occ</span><span class="o">-</span><span class="n">js</span><span class="nd">@1c00040</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
</pre></div>
</div>
<p>This patch fixes these warnings for new occ in-band sensors and also for
sensor-groups by adding necessary properties.</p>
</li>
-<li><p>sensors: Fix dtc warning for dts sensors.</p>
+<li><p class="first">sensors: Fix dtc warning for dts sensors.</p>
<p>dtc complains about missing reg property when a DT node is having a
unit name or address but no reg property.</p>
<p>Example warning for core dts sensor:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">sensors</span><span class="o">/</span><span class="n">core</span><span class="o">-</span><span class="n">temp</span><span class="o">@</span><span class="mi">5</span><span class="n">c</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
-<span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">sensors</span><span class="o">/</span><span class="n">core</span><span class="o">-</span><span class="n">temp</span><span class="o">@</span><span class="mi">804</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">sensors</span><span class="o">/</span><span class="n">core</span><span class="o">-</span><span class="n">temp</span><span class="nd">@5c</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
+<span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">sensors</span><span class="o">/</span><span class="n">core</span><span class="o">-</span><span class="n">temp</span><span class="nd">@804</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
</pre></div>
</div>
<p>This patch fixes this by adding necessary properties.</p>
</li>
-<li><p>hw/occ: Fix psr cpu-to-gpu sensors node dtc warning.</p>
+<li><p class="first">hw/occ: Fix psr cpu-to-gpu sensors node dtc warning.</p>
<p>dtc complains about missing reg property when a DT node is having a
unit name or address but no reg property.</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">power</span><span class="o">-</span><span class="n">mgt</span><span class="o">/</span><span class="n">psr</span><span class="o">/</span><span class="n">cpu</span><span class="o">-</span><span class="n">to</span><span class="o">-</span><span class="n">gpu</span><span class="o">@</span><span class="mi">0</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
-<span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">power</span><span class="o">-</span><span class="n">mgt</span><span class="o">/</span><span class="n">psr</span><span class="o">/</span><span class="n">cpu</span><span class="o">-</span><span class="n">to</span><span class="o">-</span><span class="n">gpu</span><span class="o">@</span><span class="mi">100</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">power</span><span class="o">-</span><span class="n">mgt</span><span class="o">/</span><span class="n">psr</span><span class="o">/</span><span class="n">cpu</span><span class="o">-</span><span class="n">to</span><span class="o">-</span><span class="n">gpu</span><span class="nd">@0</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
+<span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">power</span><span class="o">-</span><span class="n">mgt</span><span class="o">/</span><span class="n">psr</span><span class="o">/</span><span class="n">cpu</span><span class="o">-</span><span class="n">to</span><span class="o">-</span><span class="n">gpu</span><span class="nd">@100</span> <span class="n">has</span> <span class="n">a</span> <span class="n">unit</span> <span class="n">name</span><span class="p">,</span> <span class="n">but</span> <span class="n">no</span> <span class="n">reg</span> <span class="nb">property</span>
</pre></div>
</div>
<p>This patch fixes this by adding necessary properties.</p>
@@ -957,7 +969,7 @@ unit name or address but no reg property.</p>
<h2>General fixes<a class="headerlink" href="#general-fixes" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot-5.10-rc3:</p>
<ul>
-<li><p>core: Fix mismatched names between reserved memory nodes &amp; properties</p>
+<li><p class="first">core: Fix mismatched names between reserved memory nodes &amp; properties</p>
<p>OPAL exposes reserved memory regions through the device tree in both new
(nodes) and old (properties) formats.</p>
<p>However, the names used for these don’t match - we use a generated cell
@@ -967,14 +979,14 @@ address for the nodes, but the plain region name for the properties.</p>
</ul>
<p>Since skiboot-5.10-rc2:</p>
<ul>
-<li><p>vas: Disable VAS/NX-842 on some P9 revisions</p>
+<li><p class="first">vas: Disable VAS/NX-842 on some P9 revisions</p>
<p>VAS/NX-842 are not functional on some P9 revisions, so disable them
in hardware and skip creating their device tree nodes.</p>
<p>Since the intent is to prevent OS from configuring VAS/NX, we remove
only the platform device nodes but leave the VAS/NX DT nodes under
xscom (i.e we don’t skip add_vas_node() in hdata/spira.c)</p>
</li>
-<li><p>core/device.c: Fix dt_find_compatible_node</p>
+<li><p class="first">core/device.c: Fix dt_find_compatible_node</p>
<p>dt_find_compatible_node() and dt_find_compatible_node_on_chip() are used to
find device nodes under a parent/root node with a given compatible
property.</p>
@@ -995,7 +1007,7 @@ passing prev = NULL will cause it to start iterating from the first child
node (if any).</p>
<p>This manifested itself in a crash on boot on ZZ systems.</p>
</li>
-<li><p>hw/occ: Fix fast-reboot crash in P8 platforms.</p>
+<li><p class="first">hw/occ: Fix fast-reboot crash in P8 platforms.</p>
<p>commit 85a1de35cbe4 (“fast-boot: occ: Re-parse the pstate table during fast-boot” )
breaks the fast-reboot on P8 platforms while reiniting the OCC pstates. On P8
platforms OPAL adds additional two properties #address-cells and #size-cells
@@ -1022,7 +1034,7 @@ OCC pstates re-init in fast-reboot code path.</p>
</ul>
<p>Since skiboot-5.10-rc1:</p>
<ul>
-<li><p>fast-reboot: occ: Re-parse the pstate table during fast-reboot</p>
+<li><p class="first">fast-reboot: occ: Re-parse the pstate table during fast-reboot</p>
<p>OCC shares the frequency list to host by copying the pstate table to
main memory in HOMER. This table is parsed during boot to create
device-tree properties for frequency and pstate IDs. OCC can update
@@ -1035,7 +1047,7 @@ properties during fast-reboot.</p>
bias command. And this is mainly used by WOF team for
characterization purposes.</p>
</li>
-<li><p>fast-reboot: move pci_reset error handling into fast-reboot code</p>
+<li><p class="first">fast-reboot: move pci_reset error handling into fast-reboot code</p>
<p>pci_reset() currently does a platform reboot if it fails. It
should not know about fast-reboot at this level, so instead have
it return an error, and the fast reboot caller will do the
@@ -1049,7 +1061,7 @@ should be the goal.</p>
</ul>
<p>Since skiboot-5.9:</p>
<ul>
-<li><p>lpc: Clear pending IRQs at boot</p>
+<li><p class="first">lpc: Clear pending IRQs at boot</p>
<p>When we come in from hostboot the LPC master has the bus reset indicator
set. This error isn’t handled until the host kernel unmasks interrupts,
at which point we get the following spurious error:</p>
@@ -1060,7 +1072,7 @@ at which point we get the following spurious error:</p>
<p>Fix this by clearing the various error bits in the LPC status register
before we initialise the skiboot LPC bus driver.</p>
</li>
-<li><p>hw/imc: Check ucode state before exposing units to Linux</p>
+<li><p class="first">hw/imc: Check ucode state before exposing units to Linux</p>
<p>disable_unavailable_units() checks whether the ucode
is in the running state before enabling the nest units
in the device tree. From a recent debug, it is found
@@ -1074,24 +1086,24 @@ condition in disable_unavailable_units() to check
for the ucode state in all the chip before enabling
the nest units in the device tree node.</p>
</li>
-<li><p>hdata/vpd: Add vendor property</p>
+<li><p class="first">hdata/vpd: Add vendor property</p>
<p>ibm,vpd blob contains VN field. Use that to populate vendor property
for various FRU’s.</p>
</li>
-<li><p>hdata/vpd: Fix DTC warnings</p>
+<li><p class="first">hdata/vpd: Fix DTC warnings</p>
<p>All the nodes under the vpd hierarchy have a unit address (their SLCA
index) but no reg properties. Add them and their size/address cells
to squash the warnings.</p>
</li>
-<li><p>HDAT/i2c: Fix SPD EEPROM compatible string</p>
+<li><p class="first">HDAT/i2c: Fix SPD EEPROM compatible string</p>
<p>Hostboot doesn’t give us accurate information about the DIMM SPD
devices. Hack around by assuming any EEPROM we find on the SPD I2C
master is an SPD EEPROM.</p>
</li>
-<li><p>hdata/i2c: Fix 512Kb EEPROM size</p>
+<li><p class="first">hdata/i2c: Fix 512Kb EEPROM size</p>
<p>There’s no such thing as a 412Kb EEPROM.</p>
</li>
-<li><p>libflash/mbox-flash: fall back to requesting lower MBOX versions from BMC</p>
+<li><p class="first">libflash/mbox-flash: fall back to requesting lower MBOX versions from BMC</p>
<p>Some BMC mbox implementations seem to sometimes mysteriously fail when trying
to negotiate v3 when they only support v2. To work around this, we
can fall back to requesting lower mbox protocol versions until we find
@@ -1099,14 +1111,14 @@ one that works.</p>
<p>In theory, this should already “just work”, but we have a counter example,
which this patch fixes.</p>
</li>
-<li><p>IPMI: Fix platform.cec_reboot() null ptr checks</p>
+<li><p class="first">IPMI: Fix platform.cec_reboot() null ptr checks</p>
<p>Kudos to Hugo Landau who reported this in:
<a class="reference external" href="https://github.com/open-power/skiboot/issues/142">https://github.com/open-power/skiboot/issues/142</a></p>
</li>
-<li><p>hdata: Add location code property to xscom node</p>
+<li><p class="first">hdata: Add location code property to xscom node</p>
<p>This patch adds chip location code property to xscom node.</p>
</li>
-<li><p>p8-i2c: Limit number of retry attempts</p>
+<li><p class="first">p8-i2c: Limit number of retry attempts</p>
<p>Current we will attempt to start an I2C transaction until it succeeds.
In the event that the OCC does not release the lock on an I2C bus this
results in an async token being held forever and the kernel thread that
@@ -1114,54 +1126,54 @@ started the transaction will block forever while waiting for an async
completion message. Fix this by limiting the number of attempts to
start the transaction.</p>
</li>
-<li><p>p8-i2c: Don’t write the watermark register at init</p>
+<li><p class="first">p8-i2c: Don’t write the watermark register at init</p>
<p>On P9 the I2C master is shared with the OCC. Currently the watermark
values are set once at init time which is bad for two reasons:</p>
<ol class="loweralpha simple">
-<li><p>We don’t take the OCC master lock before setting it. Which
-may cause issues if the OCC is currently using the master.</p></li>
-<li><p>The OCC might change the watermark levels and we need to reset
-them.</p></li>
+<li>We don’t take the OCC master lock before setting it. Which
+may cause issues if the OCC is currently using the master.</li>
+<li>The OCC might change the watermark levels and we need to reset
+them.</li>
</ol>
<p>Change this so that we set the watermark value when a new transaction
is started rather than at init time.</p>
</li>
-<li><p>hdata: Rename â€fsp-ipl-side’ as â€sp-ipl-side’</p>
+<li><p class="first">hdata: Rename â€fsp-ipl-side’ as â€sp-ipl-side’</p>
<p>as OPAL is building device tree for both FSP and BMC system.
Also I don’t see anyone using this property today. Hence renaming
should be fine.</p>
</li>
-<li><p>hdata/vpd: add support for parsing CPU VRML records</p>
+<li><p class="first">hdata/vpd: add support for parsing CPU VRML records</p>
<p>Allows skiboot to parse out the processor part/serial numbers
on OpenPOWER P9 machines.</p>
</li>
-<li><p>core/lock: Introduce atomic cmpxchg and implement try_lock with it</p>
+<li><p class="first">core/lock: Introduce atomic cmpxchg and implement try_lock with it</p>
<p>cmpxchg will be used in a subsequent change, and this reduces the
amount of asm code.</p>
</li>
-<li><p>direct-controls: add xscom error handling for p8</p>
+<li><p class="first">direct-controls: add xscom error handling for p8</p>
<p>Add xscom checks which will print something useful and return error
back to callers (which already have error handling plumbed in).</p>
</li>
-<li><p>direct-controls: p8 implementation of generic direct controls</p>
+<li><p class="first">direct-controls: p8 implementation of generic direct controls</p>
<p>This reworks the sreset functionality that was brought over from
fast-reboot, and fits it under the generic direct controls APIs.</p>
<p>The fast reboot APIs are implemented using generic direct controls,
which also makes them available on p9.</p>
</li>
-<li><p>fast-reboot: allow mambo fast reboot independent of CPU type</p>
+<li><p class="first">fast-reboot: allow mambo fast reboot independent of CPU type</p>
<p>Don’t tie mambo fast reboot to POWER8 CPU type.</p>
</li>
-<li><p>fast-reboot: remove delay after sreset</p>
+<li><p class="first">fast-reboot: remove delay after sreset</p>
<p>There is a 100ms delay when targets reach sreset which does not appear
to have a good purpose. Remove it and therefore reduce the sreset timeout
by the same amount.</p>
</li>
-<li><p>fast-reboot: add more barriers around cpu state changes</p>
+<li><p class="first">fast-reboot: add more barriers around cpu state changes</p>
<p>This is a bit of paranoia, but when a CPU changes state to signal it
has reached a particular point, all previous stores should be visible.</p>
</li>
-<li><p>fast-reboot: add sreset timeout detection and handling</p>
+<li><p class="first">fast-reboot: add sreset timeout detection and handling</p>
<p>Have the initiator wait for all its sreset targets to call in, and
time out after 200ms if they did not. Fail and revert to IPL reboot.</p>
<p>Testing indicates that after successful sreset_all_others(), it
@@ -1169,22 +1181,25 @@ takes less than 102ms (in hundreds of fast reboots) for secondaries
to call in. 100 of that is due to an initial delay, but core
un-splitting was not measured.</p>
</li>
-<li><p>fast-reboot: make spin loops consistent and SMT friendly</p></li>
-<li><p>fast-reboot: add sreset_all_others error handling</p>
+<li><p class="first">fast-reboot: make spin loops consistent and SMT friendly</p>
+</li>
+<li><p class="first">fast-reboot: add sreset_all_others error handling</p>
<p>Pass back failures from sreset_all_others, also change return codes to
OPAL form in sreset_all_prepare to match.</p>
<p>Errors will revert to the IPL path, so it’s not critical to completely
clean up everything if that would complicate things. Detecting the
error and failing is the important thing.</p>
</li>
-<li><p>fast-reboot: restore SMT priority on spin loop exit</p></li>
-<li><p>Add documentation for ibm, firmware-versions device tree node</p></li>
-<li><p>NX: Print read xscom config failures.</p>
+<li><p class="first">fast-reboot: restore SMT priority on spin loop exit</p>
+</li>
+<li><p class="first">Add documentation for ibm, firmware-versions device tree node</p>
+</li>
+<li><p class="first">NX: Print read xscom config failures.</p>
<p>Currently in NX, only write xscom config failures are tracing.
Add trace statements for read xscom config failures too.
No functional changes.</p>
</li>
-<li><p>hw/nx: Fix NX BAR assignments</p>
+<li><p class="first">hw/nx: Fix NX BAR assignments</p>
<p>The NX rng BAR is used by each core to source random numbers for the
DARN instruction. Currently we configure each core to use the NX rng of
the chip that it exists on. Unfortunately, the NX can be de-configured by
@@ -1194,13 +1209,13 @@ init path. This lets us check if the normal (chip local) NX is active
when configuring which NX a core should use so that we can fall back
gracefully.</p>
</li>
-<li><p>FSP-elog: Reduce verbosity of elog messages</p>
+<li><p class="first">FSP-elog: Reduce verbosity of elog messages</p>
<p>These messages just fill up the opal console log with useless messages
resulting in us losing useful information.</p>
<p>They have been like this since the first commit in skiboot. Make them
trace.</p>
</li>
-<li><p>core/bitmap: fix bitmap iteration limit corruption</p>
+<li><p class="first">core/bitmap: fix bitmap iteration limit corruption</p>
<p>The bitmap iterators did not reduce the number of bits to scan
when searching for the next bit, which would result in them
overrunning their bitmap.</p>
@@ -1209,7 +1224,7 @@ is that the xive reset code will keep zeroing memory until it
reaches a block of memory of MAX_EQ_COUNT &gt;&gt; 3 bits in length,
all zeroes.</p>
</li>
-<li><p>hw/imc: always enable “imc_nest_chip” exports property</p>
+<li><p class="first">hw/imc: always enable “imc_nest_chip” exports property</p>
<p>imc_dt_update_nest_node() adds a “imc_nest_chip” property
to the “exports” node (under opal_node) to view nest counter
region. This comes handy when debugging ucode runtime
@@ -1225,13 +1240,13 @@ enable the addition of “imc_nest_chip” property always.</p>
<h2>NVLINK2<a class="headerlink" href="#nvlink2" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot-5.10-rc2:</p>
<ul>
-<li><p>npu2: Disable TVT range check when in bypass mode</p>
+<li><p class="first">npu2: Disable TVT range check when in bypass mode</p>
<p>On POWER9 the GPUs need to be able to access the MMIO memory space. Therefore
the TVT range check needs to include the MMIO address space. As any possible
range check would cover all of memory anyway this patch just disables the TVT
range check all together when bypassing the TCE tables.</p>
</li>
-<li><p>hw/npu2: support creset of npu2 devices</p>
+<li><p class="first">hw/npu2: support creset of npu2 devices</p>
<p>creset calls in the hw procedure that resets the PHY, we don’t
take them out of reset, just put them in reset.</p>
<p>this fixes a kexec issue.</p>
@@ -1239,14 +1254,14 @@ take them out of reset, just put them in reset.</p>
</ul>
<p>Since skiboot-5.10-rc1:</p>
<ul>
-<li><p>npu2/tce: Fix page size checking</p>
+<li><p class="first">npu2/tce: Fix page size checking</p>
<p>The page size is encoded in the TVT data [59:63] as &#64;shift+11 but
the tce_kill handler does not do the math right; this fixes it.</p>
</li>
</ul>
<p>Since skiboot-5.9:</p>
<ul>
-<li><p>npu2-hw-procedures.c: Correct phy lane mapping</p>
+<li><p class="first">npu2-hw-procedures.c: Correct phy lane mapping</p>
<p>Each NVLINK2 device is associated with a particular group of OBUS lanes via
a lane mask which is read from HDAT via the device-tree. However Skiboot’s
interpretation of lane mask was different to what is exported from the
@@ -1257,7 +1272,7 @@ represented by having lane-mask bit 23 set and lane-23 is represented by
lane-mask bit 0. This patch alters the Skiboot interpretation to match what
is passed from HDAT.</p>
</li>
-<li><p>npu2-hw-procedures.c: Power up lanes during ntl reset</p>
+<li><p class="first">npu2-hw-procedures.c: Power up lanes during ntl reset</p>
<p>Newer versions of Hostboot will not power up the NVLINK2 PHY lanes by
default. The phy_reset procedure already powers up the lanes but they also
need to be powered up in order to access the DL.</p>
@@ -1265,31 +1280,36 @@ need to be powered up in order to access the DL.</p>
of reset and get it into a working state. Therefore we also need to add
lane and clock power up to the reset_ntl procedure.</p>
</li>
-<li><p>npu2.c: Add PE error detection</p>
+<li><p class="first">npu2.c: Add PE error detection</p>
<p>Invalid accesses from the GPU can cause a specific PE to be frozen by the
NPU. Add an interrupt handler which reports the frozen PE to the operating
system via as an EEH event.</p>
</li>
-<li><p>npu2.c: Fix XIVE IRQ alignment</p></li>
-<li><p>npu2: hw-procedures: Refactor reset_ntl procedure</p>
+<li><p class="first">npu2.c: Fix XIVE IRQ alignment</p>
+</li>
+<li><p class="first">npu2: hw-procedures: Refactor reset_ntl procedure</p>
<p>Change the implementation of reset_ntl to match the latest programming
guide documentation.</p>
</li>
-<li><p>npu2: hw-procedures: Add phy_rx_clock_sel()</p>
+<li><p class="first">npu2: hw-procedures: Add phy_rx_clock_sel()</p>
<p>Change the RX clk mux control to be done by software instead of HW. This
avoids glitches caused by changing the mux setting.</p>
</li>
-<li><p>npu2: hw-procedures: Change phy_rx_clock_sel values</p>
+<li><p class="first">npu2: hw-procedures: Change phy_rx_clock_sel values</p>
<p>The clock selection bits we set here are inputs to a state machine.</p>
<p>DL clock select (bits 30-31)</p>
-<dl class="simple">
-<dt>0b00</dt><dd><p>lane 0 clock</p>
+<dl class="docutils">
+<dt>0b00</dt>
+<dd><p class="first last">lane 0 clock</p>
</dd>
-<dt>0b01</dt><dd><p>lane 7 clock</p>
+<dt>0b01</dt>
+<dd><p class="first last">lane 7 clock</p>
</dd>
-<dt>0b10</dt><dd><p>grid clock</p>
+<dt>0b10</dt>
+<dd><p class="first last">grid clock</p>
</dd>
-<dt>0b11</dt><dd><p>invalid/no-op</p>
+<dt>0b11</dt>
+<dd><p class="first last">invalid/no-op</p>
</dd>
</dl>
<p>To recover from a potential glitch, we need to ensure that the value we
@@ -1300,14 +1320,14 @@ state change for some bricks.</p>
<p>The way to force a state change in all cases is to switch to the grid
clock, and then back to a lane.</p>
</li>
-<li><p>npu2: hw-procedures: Manipulate IOVALID during training</p>
+<li><p class="first">npu2: hw-procedures: Manipulate IOVALID during training</p>
<p>Ensure that the IOVALID bit for this brick is raised at the start of
link training, in the reset_ntl procedure.</p>
<p>Then, to protect us from a glitch when the PHY clock turns off or gets
chopped, lower IOVALID for the duration of the phy_reset and
phy_rx_dccal procedures.</p>
</li>
-<li><p>npu2: hw-procedures: Add check_credits procedure</p>
+<li><p class="first">npu2: hw-procedures: Add check_credits procedure</p>
<p>As an immediate mitigation for a current hardware glitch, add a procedure
that can be used to validate NTL credit values. This will be called as a
safeguard to check that link training succeeded.</p>
@@ -1315,7 +1335,7 @@ safeguard to check that link training succeeded.</p>
system will experience a catastrophic failure shortly after the start of
link traffic.</p>
</li>
-<li><p>npu2: Print bdfn in NPU2DEV* logging macros</p>
+<li><p class="first">npu2: Print bdfn in NPU2DEV* logging macros</p>
<p>Revise the NPU2DEV{DBG,INF,ERR} logging macros to include the device’s
bdfn. It’s useful to know exactly which link we’re referring to.</p>
<blockquote>
@@ -1339,22 +1359,22 @@ bdfn. It’s useful to know exactly which link we’re referring to.</p>
</div>
</div></blockquote>
</li>
-<li><p>npu2: Move to new GPU memory map</p>
+<li><p class="first">npu2: Move to new GPU memory map</p>
<p>There are three different ways we configure the MCD and memory map.</p>
<ol class="arabic simple">
-<li><dl class="simple">
-<dt>Old way (current way)</dt><dd><p>Skiboot configures the MCD and puts GPUs at 4TB and below</p>
-</dd>
+<li><dl class="first docutils">
+<dt>Old way (current way)</dt>
+<dd>Skiboot configures the MCD and puts GPUs at 4TB and below</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>New way with MCD</dt><dd><p>Hostboot configures the MCD and skiboot puts GPU at 4TB and above</p>
-</dd>
+<li><dl class="first docutils">
+<dt>New way with MCD</dt>
+<dd>Hostboot configures the MCD and skiboot puts GPU at 4TB and above</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>New way without MCD</dt><dd><p>No one configures the MCD and skiboot puts GPU at 4TB and below</p>
-</dd>
+<li><dl class="first docutils">
+<dt>New way without MCD</dt>
+<dd>No one configures the MCD and skiboot puts GPU at 4TB and below</dd>
</dl>
</li>
</ol>
@@ -1368,7 +1388,7 @@ support existing hostboot.</p>
<p>Option 3 supports 6 GPUs and 4TB of memory but may have some
performance impact.</p>
</li>
-<li><p>phys-map: Rename GPU_MEM to GPU_MEM_4T_DOWN</p>
+<li><p class="first">phys-map: Rename GPU_MEM to GPU_MEM_4T_DOWN</p>
<p>This map is soon to be replaced, but we are going to keep it around
for a little while so that we support older hostboot firmware.</p>
</li>
@@ -1379,7 +1399,7 @@ for a little while so that we support older hostboot firmware.</p>
<div class="section" id="witherspoon">
<h3>Witherspoon<a class="headerlink" href="#witherspoon" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>Witherspoon: Remove old Witherspoon platform definition</p>
+<li><p class="first">Witherspoon: Remove old Witherspoon platform definition</p>
<p>An old Witherspoon platform definition was added to aid the transition from
versions of Hostboot which didn’t have the correct NVLINK2 HDAT information
available and/or planar VPD. These system should now be updated so remove
@@ -1392,7 +1412,7 @@ undefined behaviour which is more difficult to detect/debug than not
creating the NVLINK2 devices so remove the possibly incorrect default
behaviour.</p>
</li>
-<li><p>Witherspoon: Fix VPD EEPROM type</p>
+<li><p class="first">Witherspoon: Fix VPD EEPROM type</p>
<p>There are user-space tools that update the planar VPD via the sysfs
interface. Currently we do not get correct information from hostboot
about the exact type of the EEPROM so we need to manually fix it up
@@ -1404,7 +1424,7 @@ not standardised VPD EEPROM type.</p>
<div class="section" id="ibm-fsp-systems">
<h3>IBM FSP Systems<a class="headerlink" href="#ibm-fsp-systems" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>nvram: Fix â€missing’ nvram on FSP systems.</p>
+<li><p class="first">nvram: Fix â€missing’ nvram on FSP systems.</p>
<p>commit ba4d46fdd9eb (“console: Set log level from nvram”) wants to read
from NVRAM rather early. This works fine on BMC based systems as
nvram_init() is actually synchronous. This is not true for FSP systems
@@ -1431,7 +1451,7 @@ the NVRAM at all, ever, even after the NVRAM has loaded.</p>
<h2>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot-5.10-rc1:</p>
<ul>
-<li><p>opal-prd: Fix FTBFS with -Werror=format-overflow</p>
+<li><p class="first">opal-prd: Fix FTBFS with -Werror=format-overflow</p>
<p>i2c.c fails to compile with gcc7 and -Werror=format-overflow used in
Debian Unstable and Ubuntu 18.04 :</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>i2c.c: In function â€i2c_init’:
@@ -1443,12 +1463,12 @@ region of size 236 [-Werror=format-overflow=]
</ul>
<p>Since skiboot-5.9:</p>
<ul>
-<li><p>Fix xscom-utils distclean target</p>
+<li><p class="first">Fix xscom-utils distclean target</p>
<p>In Debian/Ubuntu, the packaging system likes to have a full clean-up that
restores the tree back to original one, so add some files to the distclean
target.</p>
</li>
-<li><p>Add man pages for xscom-utils and pflash</p>
+<li><p class="first">Add man pages for xscom-utils and pflash</p>
<p>For the need of Debian/Ubuntu packaging, I inferred some initial man
pages from their help output.</p>
</li>
@@ -1456,40 +1476,40 @@ pages from their help output.</p>
<div class="section" id="gard">
<h3>gard<a class="headerlink" href="#gard" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>gard: Add tests</p>
+<li><p class="first">gard: Add tests</p>
<p>I hear Stewart likes these for some reason. Dunno why.</p>
</li>
-<li><p>gard: Add OpenBMC vPNOR support</p>
+<li><p class="first">gard: Add OpenBMC vPNOR support</p>
<p>A big-ol-hack to add some checking for OpenBMC’s vPNOR GUARD files under
/media/pnor-prsv. This isn’t ideal since it doesn’t handle the create
case well, but it’s better than nothing.</p>
</li>
-<li><p>gard: Always use MTD to access flash</p>
+<li><p class="first">gard: Always use MTD to access flash</p>
<p>Direct mode is generally either unsafe or unsupported. We should always
access the PNOR via an MTD device so make that the default. If someone
really needs direct mode, then they can use pflash.</p>
</li>
-<li><p>gard: Fix up do_create return values</p>
+<li><p class="first">gard: Fix up do_create return values</p>
<p>The return value of a subcommand is interpreted as a libflash error code
when it’s positive or some subcommand specific error when negative.
Currently the create subcommand always returns zero when exiting (even
for errors) so fix that.</p>
</li>
-<li><p>gard: Add usage message for -p</p>
+<li><p class="first">gard: Add usage message for -p</p>
<p>The -p argument only really makes sense when -f is specified. Print an
actual error message rather than just the usage blob.</p>
</li>
-<li><p>gard: Fix max instance count</p>
+<li><p class="first">gard: Fix max instance count</p>
<p>There’s an entire byte for the instance count rather than a nibble. Only
barf if the instance number is beyond 255 rather than 16.</p>
</li>
-<li><p>gard: Fix up path parsing</p>
+<li><p class="first">gard: Fix up path parsing</p>
<p>Currently we assume that the Unit ID can be used as an array index into
the chip_units[] structure. There are holes in the ID space though, so
this doesn’t actually work. Fix it up by walking the array looking for
the ID.</p>
</li>
-<li><p>gard: Set chip generation based on PVR</p>
+<li><p class="first">gard: Set chip generation based on PVR</p>
<p>Currently we assume that this tool is being used on a P8 system by
default and allow the user to override this behaviour using the -8 and
-9 command line arguments. When running on the host we can use the
@@ -1499,47 +1519,48 @@ when running on an ARM system. This tool didn’t even work when compiled
for ARM until recently and the OpenBMC vPNOR hack that we have currently
is broken for P9 systems that don’t use vPNOR (Zaius and Romulus).</p>
</li>
-<li><p>gard: Allow records with an ID of 0xffffffff</p>
+<li><p class="first">gard: Allow records with an ID of 0xffffffff</p>
<p>We currently assume that a record with an ID of 0xffffffff is invalid.
Apparently this is incorrect and we should display these records, so
expand the check to compare the entire record with 0xff rather than
just the ID.</p>
</li>
-<li><p>gard: create: Allow creating arbitrary GARD records</p>
+<li><p class="first">gard: create: Allow creating arbitrary GARD records</p>
<p>Add a new sub-command that allows us to create GARD records for
arbitrary chip units. There isn’t a whole lot of constraints on this and
that limits how useful it can be, but it does allow a user to GARD out
individual DIMMs, chips or cores from the BMC (or host) if needed.</p>
<p>There are a few caveats though:</p>
<ol class="arabic simple">
-<li><p>Not everything can, or should, have a GARD record applied it to.</p></li>
-<li><p>There is no validation that the unit actually exists. Doing that
+<li>Not everything can, or should, have a GARD record applied it to.</li>
+<li>There is no validation that the unit actually exists. Doing that
sort of validation requires something that understands the FAPI
targeting information (I think) and adding support for it here
-would require some knowledge from the system XML file.</p></li>
-<li><p>There’s no way to get a list of paths in the system.</p></li>
-<li><p>Although we can create a GARD record at runtime it won’t be applied
-until the next IPL.</p></li>
+would require some knowledge from the system XML file.</li>
+<li>There’s no way to get a list of paths in the system.</li>
+<li>Although we can create a GARD record at runtime it won’t be applied
+until the next IPL.</li>
</ol>
</li>
-<li><p>gard: Add path parsing support</p>
+<li><p class="first">gard: Add path parsing support</p>
<p>In order to support manual GARD records we need to be able to parse the
hardware unit path strings. This patch implements that.</p>
</li>
-<li><p>gard: list: Improve output</p>
+<li><p class="first">gard: list: Improve output</p>
<p>Display the full path to the GARDed hardware unit in each record rather
than relying on the output of <cite>gard show</cite> and convert do_list() to use
the iterator while we’re here.</p>
</li>
-<li><p>gard: {list, show}: Fix the Type field in the output</p>
+<li><p class="first">gard: {list, show}: Fix the Type field in the output</p>
<p>The output of <cite>gard list</cite> has a field named “Type”, however this
doesn’t actually indicate the type of the record. Rather, it
shows the type of the path used to identify the hardware being
GARDed. This is of pretty dubious value considering the Physical
path seems to always be used when referring to GARDed hardware.</p>
</li>
-<li><p>gard: Add P9 support</p></li>
-<li><p>gard: Update chip unit data</p>
+<li><p class="first">gard: Add P9 support</p>
+</li>
+<li><p class="first">gard: Update chip unit data</p>
<p>Source the list of units from the hostboot source rather than the
previous hard coded list. The list of path element types changes
between generations so we need to add a level of indirection to
@@ -1547,7 +1568,7 @@ accommodate P9. This also changes the names used to match those
printed by Hostboot at IPL time and paves the way to adding support
for manual GARD record creation.</p>
</li>
-<li><p>gard: show: Remove “Res Recovery” field</p>
+<li><p class="first">gard: show: Remove “Res Recovery” field</p>
<p>This field has never been populated by hostboot on OpenPower systems
so there’s no real point in reporting it’s contents.</p>
</li>
@@ -1559,30 +1580,30 @@ so there’s no real point in reporting it’s contents.</p>
upgrade to this version.</p>
<p>Since skiboot-5.10-rc2:</p>
<ul class="simple">
-<li><p>pflash: Fix makefile dependency issue</p></li>
+<li>pflash: Fix makefile dependency issue</li>
</ul>
<p>Since skiboot-5.9:</p>
<ul>
-<li><p>pflash: Support for volatile flag</p>
+<li><p class="first">pflash: Support for volatile flag</p>
<p>The volatile flag was added to the PNOR image to
indicate partitions that are cleared during a host
power off. Display this flag from the pflash command.</p>
</li>
-<li><p>pflash: Support for clean_on_ecc_error flag</p>
+<li><p class="first">pflash: Support for clean_on_ecc_error flag</p>
<p>Add the misc flag clear_on_ecc_error to libflash/pflash. This was
the only missing flag. The generator of the virtual PNOR image
relies on libflash/pflash to provide the partition information,
so all flags are needed to build an accurate virtual PNOR partition
table.</p>
</li>
-<li><p>pflash: Respect write(2) return values</p>
+<li><p class="first">pflash: Respect write(2) return values</p>
<p>The write(2) system call returns the number of bytes written, this is
important since it is entitled to write less than what we requested.
Currently we ignore the return value and assume it wrote everything we
requested. While in practice this is likely to always be the case, it
isn’t actually correct.</p>
</li>
-<li><p>external/pflash: Fix erasing within a single erase block</p>
+<li><p class="first">external/pflash: Fix erasing within a single erase block</p>
<p>It is possible to erase within a single erase block. Currently the
pflash code assumes that if the erase starts part way into an erase
block it is because it needs to be aligned up to the boundary with the
@@ -1590,7 +1611,7 @@ next erase block.</p>
<p>Doing an erase smaller than a single erase block will cause underflows
and looping forever on erase.</p>
</li>
-<li><p>external/pflash: Fix non-zero return code for successful read when size%256 != 0</p>
+<li><p class="first">external/pflash: Fix non-zero return code for successful read when size%256 != 0</p>
<p>When performing a read the return value from pflash is non-zero, even for
a successful read, when the size being read is not a multiple of 256.
This is because do_read_file returns the value from the write system
@@ -1601,17 +1622,20 @@ operation is successful the return code will seem to reflect an error.</p>
<p>Fix this by returning zero if the entire size was read correctly,
otherwise return the corresponding error code.</p>
</li>
-<li><p>libflash: Fix parity calculation on ARM</p>
+<li><p class="first">libflash: Fix parity calculation on ARM</p>
<p>To calculate the ECC syndrome we need to calculate the parity of a 64bit
number. On non-powerpc platforms we use the GCC builtin function
__builtin_parityl() to do this calculation. This is broken on 32bit ARM
where sizeof(unsigned long) is four bytes. Using __builtin_parityll()
instead cures this.</p>
</li>
-<li><p>libflash/mbox-flash: Add the ability to lock flash</p></li>
-<li><p>libflash/mbox-flash: Understand v3</p></li>
-<li><p>libflash/mbox-flash: Use BMC suggested timeout value</p></li>
-<li><p>libflash/mbox-flash: Simplify message sending</p>
+<li><p class="first">libflash/mbox-flash: Add the ability to lock flash</p>
+</li>
+<li><p class="first">libflash/mbox-flash: Understand v3</p>
+</li>
+<li><p class="first">libflash/mbox-flash: Use BMC suggested timeout value</p>
+</li>
+<li><p class="first">libflash/mbox-flash: Simplify message sending</p>
<p>hw/lpc-mbox no longer requires that the memory associated with messages
exist for the lifetime of the message. Once it has been sent to the BMC,
that is bmc_mbox_enqueue() returns, lpc-mbox does not need the message
@@ -1619,7 +1643,7 @@ to continue to exist. On the receiving side, lpc-mbox will ensure that a
message exists for the receiving callback function.</p>
<p>Remove all code to deal with allocating messages.</p>
</li>
-<li><p>hw/lpc-mbox: Simplify message bookkeeping and timeouts</p>
+<li><p class="first">hw/lpc-mbox: Simplify message bookkeeping and timeouts</p>
<p>Currently the hw/lpc-mbox layer keeps a pointer for the currently
in-flight message for the duration of the mbox call. This creates
problems when messages timeout, is that pointer still valid, what can we
@@ -1633,7 +1657,7 @@ hard to be sure is correct</p>
sequence number allocation and verification into lpc-mbox rather than
the caller.</p>
</li>
-<li><p>libflash/mbox-flash: Allow mbox-flash to tell the driver msg timeouts</p>
+<li><p class="first">libflash/mbox-flash: Allow mbox-flash to tell the driver msg timeouts</p>
<p>Currently when mbox-flash decides that a message times out the driver
has no way of knowing to drop the message and will continue waiting for
a response indefinitely preventing more messages from ever being sent.</p>
@@ -1642,8 +1666,9 @@ won’t ever respond to our outstanding message.</p>
<p>This patch provides a method for mbox-flash to tell the driver how long
it should wait before it no longer needs to care about the response.</p>
</li>
-<li><p>libflash/mbox-flash: Move sequence handling to driver level</p></li>
-<li><p>libflash/mbox-flash: Always close windows before opening a new window</p>
+<li><p class="first">libflash/mbox-flash: Move sequence handling to driver level</p>
+</li>
+<li><p class="first">libflash/mbox-flash: Always close windows before opening a new window</p>
<p>The MBOX protocol states that if an open window command fails then all
open windows are closed. Currently, if an open window command fails
mbox-flash will erroneously assume that the previously open window is
@@ -1652,7 +1677,8 @@ still open.</p>
open window command and then on success we’ll mark the new window as
open.</p>
</li>
-<li><p>libflash/mbox-flash: Add v2 error codes</p></li>
+<li><p class="first">libflash/mbox-flash: Add v2 error codes</p>
+</li>
</ul>
</div>
<div class="section" id="opal-prd">
@@ -1660,14 +1686,14 @@ open.</p>
<p>Anybody shipping <cite>opal-prd</cite> for POWER9 systems must upgrade <cite>opal-prd</cite> to
this new version.</p>
<ul>
-<li><p>prd: Log unsupported message type</p>
+<li><p class="first">prd: Log unsupported message type</p>
<p>Useful for debugging.</p>
<p>Sample output:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mf">29155.157050283</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">PRD</span><span class="p">:</span> <span class="n">Unsupported</span> <span class="n">prd</span> <span class="n">message</span> <span class="nb">type</span> <span class="p">:</span> <span class="mh">0xc</span>
</pre></div>
</div>
</li>
-<li><p>opal-prd: occ: Add support for runtime OCC load/start in ZZ</p>
+<li><p class="first">opal-prd: occ: Add support for runtime OCC load/start in ZZ</p>
<p>This patch adds support to handle OCC load/start event from FSP/PRD.
During IPL we send a success directly to FSP without invoking any HBRT
load routines on receiving OCC load mbox message from FSP. At runtime
@@ -1675,20 +1701,20 @@ we forward this event to host opal-prd.</p>
<p>This patch provides support for invoking OCC load/start HBRT routines
like load_pm_complex() and start_pm_complex() from opal-prd.</p>
</li>
-<li><p>opal-prd: Add support for runtime OCC reset in ZZ</p>
+<li><p class="first">opal-prd: Add support for runtime OCC reset in ZZ</p>
<p>This patch handles OCC_RESET runtime events in host opal-prd and also
provides support for calling â€hostinterface-&gt;wakeup()’ which is
required for doing the reset operation.</p>
</li>
-<li><p>prd: Enable error logging via firmware_request interface</p>
+<li><p class="first">prd: Enable error logging via firmware_request interface</p>
<p>In P9 HBRT sends error logs to FSP via firmware_request interface.
This patch adds support to parse error log and send it to FSP.</p>
</li>
-<li><p>prd: Add generic response structure inside prd_fw_msg</p>
+<li><p class="first">prd: Add generic response structure inside prd_fw_msg</p>
<p>This patch adds generic response structure. Also sync prd_fw_msg type
macros with hostboot.</p>
</li>
-<li><p>opal-prd: flush after logging to stdio in debug mode</p>
+<li><p class="first">opal-prd: flush after logging to stdio in debug mode</p>
<p>When in debug mode, flush after each log output. This makes it more
likely that we’ll catch failure reasons on severe errors.</p>
</li>
@@ -1699,20 +1725,20 @@ likely that we’ll catch failure reasons on severe errors.</p>
<h2>Debugging and reliability improvements<a class="headerlink" href="#debugging-and-reliability-improvements" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot-5.10-rc3:</p>
<ul class="simple">
-<li><p>increase log verbosity in debug builds</p></li>
-<li><p>Add -debug to version on DEBUG builds</p></li>
-<li><p>cpu_wait_job: Correctly report time spent waiting for job</p></li>
+<li>increase log verbosity in debug builds</li>
+<li>Add -debug to version on DEBUG builds</li>
+<li>cpu_wait_job: Correctly report time spent waiting for job</li>
</ul>
<p>Since skiboot-5.10-rc2:</p>
<ul>
-<li><p>ATTN: Enable flush instruction cache bit in HID register</p>
+<li><p class="first">ATTN: Enable flush instruction cache bit in HID register</p>
<p>In P9, we have to enable “flush the instruction cache” bit along with
“attn instruction support” bit to trigger attention.</p>
</li>
</ul>
<p>Since skiboot-5.10-rc1:</p>
<ul>
-<li><p>core/init: manage MSR[ME] explicitly, always enable</p>
+<li><p class="first">core/init: manage MSR[ME] explicitly, always enable</p>
<p>The current boot sequence inherits MSR[ME] from the IPL firmware, and
never changes it. Some environments disable MSR[ME] (e.g., mambo), and
others can enable it (hostboot).</p>
@@ -1722,7 +1748,7 @@ environment. Second, after installing our machine check handler,
MSR[ME] should be enabled to get some useful output rather than a
checkstop.</p>
</li>
-<li><p>core/exception: beautify exception handler, add MCE-involved registers</p>
+<li><p class="first">core/exception: beautify exception handler, add MCE-involved registers</p>
<p>Print DSISR and DAR, to help with deciphering machine check exceptions,
and improve the output a bit, decode NIP symbol, improve alignment, etc.
Also print a specific header for machine check, because we do expect to
@@ -1758,7 +1784,7 @@ see these if there is a hardware failure.</p>
</ul>
<p>Since skiboot-5.9:</p>
<ul>
-<li><p>lock: Add additional lock auditing code</p>
+<li><p class="first">lock: Add additional lock auditing code</p>
<p>Keep track of lock owner name and replace lock_depth counter
with a per-cpu list of locks held by the cpu.</p>
<p>This allows us to print the actual locks held in case we hit
@@ -1767,30 +1793,30 @@ lock held.</p>
<p>It also allows us to warn (and drop them) if locks are still
held when returning to the OS or completing a scheduled job.</p>
</li>
-<li><p>Add support for new GCC 7 parametrized stack protector</p>
+<li><p class="first">Add support for new GCC 7 parametrized stack protector</p>
<p>This gives us per-cpu guard values as well. For now I just
XOR a magic constant with the CPU PIR value.</p>
</li>
-<li><p>Mambo: run hello_world and sreset_world tests with Secure and Trusted Boot</p>
+<li><p class="first">Mambo: run hello_world and sreset_world tests with Secure and Trusted Boot</p>
<p>We <em>disable</em> the secure boot part, but we keep the verified boot
part as we don’t currently have container verification code for Mambo.</p>
<p>We can run a small part of the code currently though.</p>
</li>
-<li><p>core/flash.c: extern function to get the name of a PNOR partition</p>
+<li><p class="first">core/flash.c: extern function to get the name of a PNOR partition</p>
<p>This adds the flash_map_resource_name() to allow skiboot subsystems to
lookup the name of a PNOR partition. Thus, we don’t need to duplicate
the same information in other places (e.g. libstb).</p>
</li>
-<li><p>libflash/mbox-flash: only wait for MBOX_DEFAULT_POLL_MS if busy</p>
+<li><p class="first">libflash/mbox-flash: only wait for MBOX_DEFAULT_POLL_MS if busy</p>
<p>This makes the mbox unit test run 300x quicker and seems to
shave about 6 seconds from boot time on Witherspoon.</p>
</li>
-<li><p>make check: Make valgrind optional</p>
+<li><p class="first">make check: Make valgrind optional</p>
<p>To (slightly) lower the barrier for contributions, we can make valgrind
optional with just a small amount of plumbing.</p>
<p>This allows make check to run successfully without valgrind.</p>
</li>
-<li><p>libflash/test: Add tests for mbox-flash</p>
+<li><p class="first">libflash/test: Add tests for mbox-flash</p>
<p>A first basic set of tests for mbox-flash. These tests do their testing
by stubbing out or otherwise replacing functions not in
libflash/mbox-flash.c. The stubbed out version of the function can then
@@ -1806,26 +1832,26 @@ correctness.</p>
<p>Full integration tests with a â€real’ BMC daemon are probably beyond the
scope of this repository.</p>
</li>
-<li><p>external/test/test.sh: fix VERSION substitution when no tags</p>
+<li><p class="first">external/test/test.sh: fix VERSION substitution when no tags</p>
<p>i.e. we get a hash rather than a version number</p>
<p>This seems to be occurring in Travis if it doesn’t pull a tag.</p>
</li>
-<li><p>external/test: make stripping out version number more robust</p>
+<li><p class="first">external/test: make stripping out version number more robust</p>
<p>For some bizarre reason, Travis started failing on this
substitution when there’d been zero code changes in this
area… This at least papers over whatever the problem is
for the time being.</p>
</li>
-<li><p>io: Add load_wait() helper</p>
+<li><p class="first">io: Add load_wait() helper</p>
<p>This uses the standard form twi/isync pair to ensure a load
is consumed by the core before continuing. This can be necessary
under some circumstances for example when having the following
sequence:</p>
<ul class="simple">
-<li><p>Store reg A</p></li>
-<li><p>Load reg A (ensure above store pushed out)</p></li>
-<li><p>delay loop</p></li>
-<li><p>Store reg A</p></li>
+<li>Store reg A</li>
+<li>Load reg A (ensure above store pushed out)</li>
+<li>delay loop</li>
+<li>Store reg A</li>
</ul>
<p>I.E., a mandatory delay between 2 stores. In theory the first store
is only guaranteed to reach the device after the load from the same
@@ -1834,7 +1860,7 @@ the delay loop without waiting for the return value from the load.</p>
<p>This construct enforces that the delay loop isn’t executed until
the load value has been returned.</p>
</li>
-<li><p>chiptod: Keep boot timestamps contiguous</p>
+<li><p class="first">chiptod: Keep boot timestamps contiguous</p>
<p>Currently we reset the timebase value to (almost) zero when
synchronising the timebase of each chip to the Chip TOD network which
results in this:</p>
@@ -1853,10 +1879,10 @@ the petikernel starts. e.g.</p>
</pre></div>
</div>
</li>
-<li><p>hdata/spira: Add missing newline to prlog() call</p>
+<li><p class="first">hdata/spira: Add missing newline to prlog() call</p>
<p>We’re missing a n here.</p>
</li>
-<li><p>opal/xscom: Add recovery for lost core wakeup SCOM failures.</p>
+<li><p class="first">opal/xscom: Add recovery for lost core wakeup SCOM failures.</p>
<p>Due to a hardware issue where core responding to SCOM was delayed due to
thread reconfiguration, leaves the SCOM logic in a state where the
subsequent SCOM to that core can get errors. This is affected for Core
@@ -1868,47 +1894,50 @@ clears the SCOM logic errors. After the clearing write is done the original
SCOM operation can be retried.</p>
<p>The SCOM timeout is reported as status 0x4 (Invalid address) in HMER[21-23].</p>
</li>
-<li><p>opal/xscom: Move the delay inside xscom_reset() function.</p>
+<li><p class="first">opal/xscom: Move the delay inside xscom_reset() function.</p>
<p>So caller of xscom_reset() does not have to bother about adding a delay
separately. Instead caller can control whether to add a delay or not using
second argument to xscom_reset().</p>
</li>
-<li><p>timer: Stop calling list_top() racily</p>
+<li><p class="first">timer: Stop calling list_top() racily</p>
<p>This will trip the debug checks in debug builds under some circumstances
and is actually a rather bad idea as we might look at a timer that is
concurrently being removed and modified, and thus incorrectly assume
there is no work to do.</p>
</li>
-<li><p>fsp: Bail out of HIR if FSP is resetting voluntarily</p>
+<li><p class="first">fsp: Bail out of HIR if FSP is resetting voluntarily</p>
<ol class="loweralpha simple">
-<li><p>Surveillance response times out and OPAL triggers a HIR</p></li>
-<li><p>Before the HIR process kicks in, OPAL gets a PSI interrupt indicating link down</p></li>
-<li><p>HIR process continues and OPAL tries to write to DRCR; PSI link inactive =&gt; xstop</p></li>
+<li>Surveillance response times out and OPAL triggers a HIR</li>
+<li>Before the HIR process kicks in, OPAL gets a PSI interrupt indicating link down</li>
+<li>HIR process continues and OPAL tries to write to DRCR; PSI link inactive =&gt; xstop</li>
</ol>
<p>OPAL should confirm that the FSP is not already in reset in the HIR path.</p>
</li>
-<li><p>sreset_kernel: only run SMT tests due to not supporting re-entry</p></li>
-<li><p>Use systemsim-p9 v1.1</p></li>
-<li><p>direct-controls: enable fast reboot direct controls for mambo</p>
+<li><p class="first">sreset_kernel: only run SMT tests due to not supporting re-entry</p>
+</li>
+<li><p class="first">Use systemsim-p9 v1.1</p>
+</li>
+<li><p class="first">direct-controls: enable fast reboot direct controls for mambo</p>
<p>Add mambo direct controls to stop threads, which is required for
reliable fast-reboot. Enable direct controls by default on mambo.</p>
</li>
-<li><p>core/opal: always verify cpu-&gt;pir on entry</p></li>
-<li><p>asm/head: add entry/exit calls</p>
+<li><p class="first">core/opal: always verify cpu-&gt;pir on entry</p>
+</li>
+<li><p class="first">asm/head: add entry/exit calls</p>
<p>Add entry and exit C functions that can do some more complex
checks before the opal proper call. This requires saving off
volatile registers that have arguments in them.</p>
</li>
-<li><p>core/lock: improve bust_locks</p>
+<li><p class="first">core/lock: improve bust_locks</p>
<p>Prevent try_lock from modifying the lock state when bust_locks is set.
unlock will not unlock it in that case, so locks will get taken and
never released while bust_locks is set.</p>
</li>
-<li><p>hw/occ: Log proper SCOM register names</p>
+<li><p class="first">hw/occ: Log proper SCOM register names</p>
<p>This patch fixes the logging of incorrect SCOM
register names.</p>
</li>
-<li><p>mambo: Add support for NUMA</p>
+<li><p class="first">mambo: Add support for NUMA</p>
<p>Currently the mambo scripts can do multiple chips, but only the first
ever has memory.</p>
<p>This patch adds support for having memory on each chip, with each
@@ -1916,12 +1945,12 @@ appearing as a separate NUMA node. Each node gets MEM_SIZE worth of
memory.</p>
<p>It’s opt-in, via <code class="docutils literal notranslate"><span class="pre">export</span> <span class="pre">MAMBO_NUMA=1</span></code>.</p>
</li>
-<li><p>external/mambo: Switch qtrace command to use plug-ins</p>
+<li><p class="first">external/mambo: Switch qtrace command to use plug-ins</p>
<p>The plug-in seems to be the preferred way to do this now, it works
better, and the qtracer emitter seems to generate invalid traces
in new mambo versions.</p>
</li>
-<li><p>asm/head: Loop after attn</p>
+<li><p class="first">asm/head: Loop after attn</p>
<p>We use the attn instruction to raise an error in early boot if OPAL
don’t recognise the PVR. It’s possible for hostboot to disable the
attn instruction before entering OPAL so add an extra busy loop after
@@ -1932,107 +1961,107 @@ the attn to prevent attempting to boot on an unknown processor.</p>
<div class="section" id="contributors">
<h2>Contributors<a class="headerlink" href="#contributors" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>302 csets from 32 developers</p></li>
-<li><p>3 employers found</p></li>
-<li><p>A total of 15919 lines added, 4786 removed (delta 11133)</p></li>
+<li>302 csets from 32 developers</li>
+<li>3 employers found</li>
+<li>A total of 15919 lines added, 4786 removed (delta 11133)</li>
</ul>
<p>Extending the analysis done for some previous releases, we can see our trends
in code review across versions:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 14%" />
-<col style="width: 12%" />
-<col style="width: 16%" />
-<col style="width: 18%" />
-<col style="width: 18%" />
-<col style="width: 22%" />
+<col width="14%" />
+<col width="12%" />
+<col width="16%" />
+<col width="18%" />
+<col width="18%" />
+<col width="22%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Release</p></th>
-<th class="head"><p>csets</p></th>
-<th class="head"><p>Ack %</p></th>
-<th class="head"><p>Reviews %</p></th>
-<th class="head"><p>Tested %</p></th>
-<th class="head"><p>Reported %</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Release</th>
+<th class="head">csets</th>
+<th class="head">Ack %</th>
+<th class="head">Reviews %</th>
+<th class="head">Tested %</th>
+<th class="head">Reported %</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>5.0</p></td>
-<td><p>329</p></td>
-<td><p>15 (5%)</p></td>
-<td><p>20 (6%)</p></td>
-<td><p>1 (0%)</p></td>
-<td><p>0 (0%)</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.1</p></td>
-<td><p>372</p></td>
-<td><p>13 (3%)</p></td>
-<td><p>38 (10%)</p></td>
-<td><p>1 (0%)</p></td>
-<td><p>4 (1%)</p></td>
-</tr>
-<tr class="row-even"><td><p>5.2-rc1</p></td>
-<td><p>334</p></td>
-<td><p>20 (6%)</p></td>
-<td><p>34 (10%)</p></td>
-<td><p>6 (2%)</p></td>
-<td><p>11 (3%)</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.3-rc1</p></td>
-<td><p>302</p></td>
-<td><p>36 (12%)</p></td>
-<td><p>53 (18%)</p></td>
-<td><p>4 (1%)</p></td>
-<td><p>5 (2%)</p></td>
-</tr>
-<tr class="row-even"><td><p>5.4</p></td>
-<td><p>361</p></td>
-<td><p>16 (4%)</p></td>
-<td><p>28 (8%)</p></td>
-<td><p>1 (0%)</p></td>
-<td><p>9 (2%)</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.5</p></td>
-<td><p>408</p></td>
-<td><p>11 (3%)</p></td>
-<td><p>48 (12%)</p></td>
-<td><p>14 (3%)</p></td>
-<td><p>10 (2%)</p></td>
-</tr>
-<tr class="row-even"><td><p>5.6</p></td>
-<td><p>87</p></td>
-<td><p>12 (14%)</p></td>
-<td><p>6 (7%)</p></td>
-<td><p>5 (6%)</p></td>
-<td><p>2 (2%)</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.7</p></td>
-<td><p>232</p></td>
-<td><p>30 (13%)</p></td>
-<td><p>32 (14%)</p></td>
-<td><p>5 (2%)</p></td>
-<td><p>2 (1%)</p></td>
-</tr>
-<tr class="row-even"><td><p>5.8</p></td>
-<td><p>157</p></td>
-<td><p>13 (8%)</p></td>
-<td><p>36 (23%)</p></td>
-<td><p>2 (1%)</p></td>
-<td><p>6 (4%)</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.9</p></td>
-<td><p>209</p></td>
-<td><p>15 (7%)</p></td>
-<td><p>78 (37%)</p></td>
-<td><p>3 (1%)</p></td>
-<td><p>10 (5%)</p></td>
-</tr>
-<tr class="row-even"><td><p>5.10</p></td>
-<td><p>302</p></td>
-<td><p>20 (6%)</p></td>
-<td><p>62 (21%)</p></td>
-<td><p>24 (8%)</p></td>
-<td><p>11 (4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>5.0</td>
+<td>329</td>
+<td>15 (5%)</td>
+<td>20 (6%)</td>
+<td>1 (0%)</td>
+<td>0 (0%)</td>
+</tr>
+<tr class="row-odd"><td>5.1</td>
+<td>372</td>
+<td>13 (3%)</td>
+<td>38 (10%)</td>
+<td>1 (0%)</td>
+<td>4 (1%)</td>
+</tr>
+<tr class="row-even"><td>5.2-rc1</td>
+<td>334</td>
+<td>20 (6%)</td>
+<td>34 (10%)</td>
+<td>6 (2%)</td>
+<td>11 (3%)</td>
+</tr>
+<tr class="row-odd"><td>5.3-rc1</td>
+<td>302</td>
+<td>36 (12%)</td>
+<td>53 (18%)</td>
+<td>4 (1%)</td>
+<td>5 (2%)</td>
+</tr>
+<tr class="row-even"><td>5.4</td>
+<td>361</td>
+<td>16 (4%)</td>
+<td>28 (8%)</td>
+<td>1 (0%)</td>
+<td>9 (2%)</td>
+</tr>
+<tr class="row-odd"><td>5.5</td>
+<td>408</td>
+<td>11 (3%)</td>
+<td>48 (12%)</td>
+<td>14 (3%)</td>
+<td>10 (2%)</td>
+</tr>
+<tr class="row-even"><td>5.6</td>
+<td>87</td>
+<td>12 (14%)</td>
+<td>6 (7%)</td>
+<td>5 (6%)</td>
+<td>2 (2%)</td>
+</tr>
+<tr class="row-odd"><td>5.7</td>
+<td>232</td>
+<td>30 (13%)</td>
+<td>32 (14%)</td>
+<td>5 (2%)</td>
+<td>2 (1%)</td>
+</tr>
+<tr class="row-even"><td>5.8</td>
+<td>157</td>
+<td>13 (8%)</td>
+<td>36 (23%)</td>
+<td>2 (1%)</td>
+<td>6 (4%)</td>
+</tr>
+<tr class="row-odd"><td>5.9</td>
+<td>209</td>
+<td>15 (7%)</td>
+<td>78 (37%)</td>
+<td>3 (1%)</td>
+<td>10 (5%)</td>
+</tr>
+<tr class="row-even"><td>5.10</td>
+<td>302</td>
+<td>20 (6%)</td>
+<td>62 (21%)</td>
+<td>24 (8%)</td>
+<td>11 (4%)</td>
</tr>
</tbody>
</table>
@@ -2047,666 +2076,666 @@ commits to code we bring in from hostboot/other firmware components. When
you exclude them, we’re back down to 2% getting Tested-by, which isn’t great.</p>
<div class="section" id="developers-with-the-most-changesets">
<h3>Developers with the most changesets<a class="headerlink" href="#developers-with-the-most-changesets" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>40</p></td>
-<td><p>(13.2%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>40</td>
+<td>(13.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Nicholas Piggin</p></td>
-<td><p>37</p></td>
-<td><p>(12.3%)</p></td>
+<tr class="row-odd"><td>Nicholas Piggin</td>
+<td>37</td>
+<td>(12.3%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>36</p></td>
-<td><p>(11.9%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>36</td>
+<td>(11.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>23</p></td>
-<td><p>(7.6%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>23</td>
+<td>(7.6%)</td>
</tr>
-<tr class="row-even"><td><p>Claudio Carvalho</p></td>
-<td><p>20</p></td>
-<td><p>(6.6%)</p></td>
+<tr class="row-even"><td>Claudio Carvalho</td>
+<td>20</td>
+<td>(6.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>19</p></td>
-<td><p>(6.3%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>19</td>
+<td>(6.3%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>13</p></td>
-<td><p>(4.3%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>13</td>
+<td>(4.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Shilpasri G Bhat</p></td>
-<td><p>12</p></td>
-<td><p>(4.0%)</p></td>
+<tr class="row-odd"><td>Shilpasri G Bhat</td>
+<td>12</td>
+<td>(4.0%)</td>
</tr>
-<tr class="row-even"><td><p>Reza Arbab</p></td>
-<td><p>12</p></td>
-<td><p>(4.0%)</p></td>
+<tr class="row-even"><td>Reza Arbab</td>
+<td>12</td>
+<td>(4.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>11</p></td>
-<td><p>(3.6%)</p></td>
+<tr class="row-odd"><td>Pridhiviraj Paidipeddi</td>
+<td>11</td>
+<td>(3.6%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>10</p></td>
-<td><p>(3.3%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>10</td>
+<td>(3.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Akshay Adiga</p></td>
-<td><p>10</p></td>
-<td><p>(3.3%)</p></td>
+<tr class="row-odd"><td>Akshay Adiga</td>
+<td>10</td>
+<td>(3.3%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>8</p></td>
-<td><p>(2.6%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>8</td>
+<td>(2.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>7</p></td>
-<td><p>(2.3%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>7</td>
+<td>(2.3%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>7</p></td>
-<td><p>(2.3%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>7</td>
+<td>(2.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaibhav Jain</p></td>
-<td><p>5</p></td>
-<td><p>(1.7%)</p></td>
+<tr class="row-odd"><td>Vaibhav Jain</td>
+<td>5</td>
+<td>(1.7%)</td>
</tr>
-<tr class="row-even"><td><p>Prem Shanker Jha</p></td>
-<td><p>4</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-even"><td>Prem Shanker Jha</td>
+<td>4</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Robert Lippert</p></td>
-<td><p>4</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-odd"><td>Robert Lippert</td>
+<td>4</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-even"><td><p>Frédéric Bonnard</p></td>
-<td><p>3</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-even"><td>Frédéric Bonnard</td>
+<td>3</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Christophe Lombard</p></td>
-<td><p>3</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-odd"><td>Christophe Lombard</td>
+<td>3</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>2</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>2</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Ellerman</p></td>
-<td><p>2</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-odd"><td>Michael Ellerman</td>
+<td>2</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-even"><td><p>Balbir Singh</p></td>
-<td><p>2</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-even"><td>Balbir Singh</td>
+<td>2</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>2</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>2</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-even"><td><p>Madhavan Srinivasan</p></td>
-<td><p>2</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-even"><td>Madhavan Srinivasan</td>
+<td>2</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Adriana Kobylak</p></td>
-<td><p>2</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-odd"><td>Adriana Kobylak</td>
+<td>2</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-even"><td><p>Sukadev Bhattiprolu</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Sukadev Bhattiprolu</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Alexey Kardashevskiy</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Alexey Kardashevskiy</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Barrat</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Frederic Barrat</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Ananth N Mavinakayanahalli</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Suraj Jitindar Singh</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Suraj Jitindar Singh</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Guilherme G. Piccoli</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Guilherme G. Piccoli</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-changed-lines">
<h3>Developers with the most changed lines<a class="headerlink" href="#developers-with-the-most-changed-lines" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 70%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="70%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>4284</p></td>
-<td><p>(24.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>4284</td>
+<td>(24.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Nicholas Piggin</p></td>
-<td><p>2924</p></td>
-<td><p>(16.7%)</p></td>
+<tr class="row-odd"><td>Nicholas Piggin</td>
+<td>2924</td>
+<td>(16.7%)</td>
</tr>
-<tr class="row-even"><td><p>Claudio Carvalho</p></td>
-<td><p>2476</p></td>
-<td><p>(14.2%)</p></td>
+<tr class="row-even"><td>Claudio Carvalho</td>
+<td>2476</td>
+<td>(14.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Shilpasri G Bhat</p></td>
-<td><p>1490</p></td>
-<td><p>(8.5%)</p></td>
+<tr class="row-odd"><td>Shilpasri G Bhat</td>
+<td>1490</td>
+<td>(8.5%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>1475</p></td>
-<td><p>(8.4%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>1475</td>
+<td>(8.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>1242</p></td>
-<td><p>(7.1%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>1242</td>
+<td>(7.1%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>736</p></td>
-<td><p>(4.2%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>736</td>
+<td>(4.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>498</p></td>
-<td><p>(2.8%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>498</td>
+<td>(2.8%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>299</p></td>
-<td><p>(1.7%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>299</td>
+<td>(1.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Akshay Adiga</p></td>
-<td><p>273</p></td>
-<td><p>(1.6%)</p></td>
+<tr class="row-odd"><td>Akshay Adiga</td>
+<td>273</td>
+<td>(1.6%)</td>
</tr>
-<tr class="row-even"><td><p>Reza Arbab</p></td>
-<td><p>231</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-even"><td>Reza Arbab</td>
+<td>231</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>225</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-odd"><td>Mahesh Salgaonkar</td>
+<td>225</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-even"><td><p>Balbir Singh</p></td>
-<td><p>213</p></td>
-<td><p>(1.2%)</p></td>
+<tr class="row-even"><td>Balbir Singh</td>
+<td>213</td>
+<td>(1.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Frédéric Bonnard</p></td>
-<td><p>169</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-odd"><td>Frédéric Bonnard</td>
+<td>169</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>142</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>142</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Robert Lippert</p></td>
-<td><p>97</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-odd"><td>Robert Lippert</td>
+<td>97</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>93</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>93</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Prem Shanker Jha</p></td>
-<td><p>92</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-odd"><td>Prem Shanker Jha</td>
+<td>92</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Christophe Lombard</p></td>
-<td><p>80</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-even"><td>Christophe Lombard</td>
+<td>80</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>78</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>78</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Ellerman</p></td>
-<td><p>72</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Michael Ellerman</td>
+<td>72</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Adriana Kobylak</p></td>
-<td><p>71</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Adriana Kobylak</td>
+<td>71</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Madhavan Srinivasan</p></td>
-<td><p>61</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Madhavan Srinivasan</td>
+<td>61</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Sukadev Bhattiprolu</p></td>
-<td><p>58</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Sukadev Bhattiprolu</td>
+<td>58</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Vaibhav Jain</p></td>
-<td><p>52</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Vaibhav Jain</td>
+<td>52</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Jeremy Kerr</p></td>
-<td><p>27</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>Jeremy Kerr</td>
+<td>27</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>16</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-even"><td>Ananth N Mavinakayanahalli</td>
+<td>16</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Frederic Barrat</p></td>
-<td><p>9</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-odd"><td>Frederic Barrat</td>
+<td>9</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>5</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>5</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Alexey Kardashevskiy</p></td>
-<td><p>3</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Alexey Kardashevskiy</td>
+<td>3</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Suraj Jitindar Singh</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Suraj Jitindar Singh</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Guilherme G. Piccoli</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Guilherme G. Piccoli</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-lines-removed">
<h3>Developers with the most lines removed<a class="headerlink" href="#developers-with-the-most-lines-removed" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>304</p></td>
-<td><p>(6.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Alistair Popple</td>
+<td>304</td>
+<td>(6.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-signoffs">
<h3>Developers with the most signoffs<a class="headerlink" href="#developers-with-the-most-signoffs" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>262</p></td>
-<td><p>(99.2%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>262</td>
+<td>(99.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Reza Arbab</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Reza Arbab</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-reviews">
<h3>Developers with the most reviews<a class="headerlink" href="#developers-with-the-most-reviews" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 74%" />
-<col style="width: 9%" />
-<col style="width: 16%" />
+<col width="74%" />
+<col width="9%" />
+<col width="16%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>8</p></td>
-<td><p>(13.6%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>8</td>
+<td>(13.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Balbir Singh</p></td>
-<td><p>5</p></td>
-<td><p>(8.5%)</p></td>
+<tr class="row-odd"><td>Balbir Singh</td>
+<td>5</td>
+<td>(8.5%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>5</p></td>
-<td><p>(8.5%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>5</td>
+<td>(8.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Gregory S. Still</p></td>
-<td><p>4</p></td>
-<td><p>(6.8%)</p></td>
+<tr class="row-odd"><td>Gregory S. Still</td>
+<td>4</td>
+<td>(6.8%)</td>
</tr>
-<tr class="row-even"><td><p>Nicholas Piggin</p></td>
-<td><p>4</p></td>
-<td><p>(6.8%)</p></td>
+<tr class="row-even"><td>Nicholas Piggin</td>
+<td>4</td>
+<td>(6.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Reza Arbab</p></td>
-<td><p>3</p></td>
-<td><p>(5.1%)</p></td>
+<tr class="row-odd"><td>Reza Arbab</td>
+<td>3</td>
+<td>(5.1%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>3</p></td>
-<td><p>(5.1%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>3</td>
+<td>(5.1%)</td>
</tr>
-<tr class="row-odd"><td><p>RANGANATHPRASAD G. BRAHMASAMUDRA</p></td>
-<td><p>3</p></td>
-<td><p>(5.1%)</p></td>
+<tr class="row-odd"><td>RANGANATHPRASAD G. BRAHMASAMUDRA</td>
+<td>3</td>
+<td>(5.1%)</td>
</tr>
-<tr class="row-even"><td><p>Jennifer A. Stofer</p></td>
-<td><p>3</p></td>
-<td><p>(5.1%)</p></td>
+<tr class="row-even"><td>Jennifer A. Stofer</td>
+<td>3</td>
+<td>(5.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>3</p></td>
-<td><p>(5.1%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>3</td>
+<td>(5.1%)</td>
</tr>
-<tr class="row-even"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>2</p></td>
-<td><p>(3.4%)</p></td>
+<tr class="row-even"><td>Vaidyanathan Srinivasan</td>
+<td>2</td>
+<td>(3.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Hostboot Team</p></td>
-<td><p>2</p></td>
-<td><p>(3.4%)</p></td>
+<tr class="row-odd"><td>Hostboot Team</td>
+<td>2</td>
+<td>(3.4%)</td>
</tr>
-<tr class="row-even"><td><p>Christian R. Geddes</p></td>
-<td><p>2</p></td>
-<td><p>(3.4%)</p></td>
+<tr class="row-even"><td>Christian R. Geddes</td>
+<td>2</td>
+<td>(3.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Frederic Barrat</p></td>
-<td><p>2</p></td>
-<td><p>(3.4%)</p></td>
+<tr class="row-odd"><td>Frederic Barrat</td>
+<td>2</td>
+<td>(3.4%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>2</p></td>
-<td><p>(3.4%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>2</td>
+<td>(3.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>1</p></td>
-<td><p>(1.7%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>1</td>
+<td>(1.7%)</td>
</tr>
-<tr class="row-even"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>1</p></td>
-<td><p>(1.7%)</p></td>
+<tr class="row-even"><td>CĂ©dric Le Goater</td>
+<td>1</td>
+<td>(1.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>1</p></td>
-<td><p>(1.7%)</p></td>
+<tr class="row-odd"><td>Samuel Mendoza-Jonas</td>
+<td>1</td>
+<td>(1.7%)</td>
</tr>
-<tr class="row-even"><td><p>Daniel M. Crowell</p></td>
-<td><p>1</p></td>
-<td><p>(1.7%)</p></td>
+<tr class="row-even"><td>Daniel M. Crowell</td>
+<td>1</td>
+<td>(1.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaibhav Jain</p></td>
-<td><p>1</p></td>
-<td><p>(1.7%)</p></td>
+<tr class="row-odd"><td>Vaibhav Jain</td>
+<td>1</td>
+<td>(1.7%)</td>
</tr>
-<tr class="row-even"><td><p>Madhavan Srinivasan</p></td>
-<td><p>1</p></td>
-<td><p>(1.7%)</p></td>
+<tr class="row-even"><td>Madhavan Srinivasan</td>
+<td>1</td>
+<td>(1.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Ellerman</p></td>
-<td><p>1</p></td>
-<td><p>(1.7%)</p></td>
+<tr class="row-odd"><td>Michael Ellerman</td>
+<td>1</td>
+<td>(1.7%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>1</p></td>
-<td><p>(1.7%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>1</td>
+<td>(1.7%)</td>
</tr>
-<tr class="row-odd"><td><p><strong>Total</strong></p></td>
-<td><p>59</p></td>
-<td><p>(100%)</p></td>
+<tr class="row-odd"><td><strong>Total</strong></td>
+<td>59</td>
+<td>(100%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-test-credits">
<h3>Developers with the most test credits<a class="headerlink" href="#developers-with-the-most-test-credits" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 75%" />
-<col style="width: 6%" />
-<col style="width: 19%" />
+<col width="75%" />
+<col width="6%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>FSP CI Jenkins</p></td>
-<td><p>4</p></td>
-<td><p>(16.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>FSP CI Jenkins</td>
+<td>4</td>
+<td>(16.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Jenkins Server</p></td>
-<td><p>4</p></td>
-<td><p>(16.7%)</p></td>
+<tr class="row-odd"><td>Jenkins Server</td>
+<td>4</td>
+<td>(16.7%)</td>
</tr>
-<tr class="row-even"><td><p>Hostboot CI</p></td>
-<td><p>4</p></td>
-<td><p>(16.7%)</p></td>
+<tr class="row-even"><td>Hostboot CI</td>
+<td>4</td>
+<td>(16.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>3</p></td>
-<td><p>(12.5%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>3</td>
+<td>(12.5%)</td>
</tr>
-<tr class="row-even"><td><p>Jenkins OP Build CI</p></td>
-<td><p>3</p></td>
-<td><p>(12.5%)</p></td>
+<tr class="row-even"><td>Jenkins OP Build CI</td>
+<td>3</td>
+<td>(12.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Jenkins OP HW</p></td>
-<td><p>2</p></td>
-<td><p>(8.3%)</p></td>
+<tr class="row-odd"><td>Jenkins OP HW</td>
+<td>2</td>
+<td>(8.3%)</td>
</tr>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>2</p></td>
-<td><p>(8.3%)</p></td>
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>2</td>
+<td>(8.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>1</p></td>
-<td><p>(4.2%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>1</td>
+<td>(4.2%)</td>
</tr>
-<tr class="row-even"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>1</p></td>
-<td><p>(4.2%)</p></td>
+<tr class="row-even"><td>Vaidyanathan Srinivasan</td>
+<td>1</td>
+<td>(4.2%)</td>
</tr>
-<tr class="row-odd"><td><p><strong>Total</strong></p></td>
-<td><p>24</p></td>
-<td><p>(100%)</p></td>
+<tr class="row-odd"><td><strong>Total</strong></td>
+<td>24</td>
+<td>(100%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-who-gave-the-most-tested-by-credits">
<h3>Developers who gave the most tested-by credits<a class="headerlink" href="#developers-who-gave-the-most-tested-by-credits" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 75%" />
-<col style="width: 6%" />
-<col style="width: 19%" />
+<col width="75%" />
+<col width="6%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Prem Shanker Jha</p></td>
-<td><p>17</p></td>
-<td><p>(70.8%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Prem Shanker Jha</td>
+<td>17</td>
+<td>(70.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>3</p></td>
-<td><p>(12.5%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>3</td>
+<td>(12.5%)</td>
</tr>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>2</p></td>
-<td><p>(8.3%)</p></td>
+<tr class="row-even"><td>Stewart Smith</td>
+<td>2</td>
+<td>(8.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Shilpasri G Bhat</p></td>
-<td><p>1</p></td>
-<td><p>(4.2%)</p></td>
+<tr class="row-odd"><td>Shilpasri G Bhat</td>
+<td>1</td>
+<td>(4.2%)</td>
</tr>
-<tr class="row-even"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>1</p></td>
-<td><p>(4.2%)</p></td>
+<tr class="row-even"><td>Ananth N Mavinakayanahalli</td>
+<td>1</td>
+<td>(4.2%)</td>
</tr>
-<tr class="row-odd"><td><p><strong>Total</strong></p></td>
-<td><p>24</p></td>
-<td><p>(100%)</p></td>
+<tr class="row-odd"><td><strong>Total</strong></td>
+<td>24</td>
+<td>(100%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-report-credits">
<h3>Developers with the most report credits<a class="headerlink" href="#developers-with-the-most-report-credits" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 75%" />
-<col style="width: 6%" />
-<col style="width: 19%" />
+<col width="75%" />
+<col width="6%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>2</p></td>
-<td><p>(18.2%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>2</td>
+<td>(18.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Ellerman</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-odd"><td>Michael Ellerman</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-even"><td><p>Deb McLemore</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-even"><td>Deb McLemore</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Brad Bishop</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-odd"><td>Brad Bishop</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-even"><td><p>Michel Normand</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-even"><td>Michel Normand</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Hugo Landau</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-odd"><td>Hugo Landau</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-even"><td><p>Minda Wei</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-even"><td>Minda Wei</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Francesco A Campisano</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-odd"><td>Francesco A Campisano</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-even"><td><p><strong>Total</strong></p></td>
-<td><p>11</p></td>
-<td><p>(100%)</p></td>
+<tr class="row-even"><td><strong>Total</strong></td>
+<td>11</td>
+<td>(100%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-who-gave-the-most-report-credits">
<h3>Developers who gave the most report credits<a class="headerlink" href="#developers-who-gave-the-most-report-credits" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 75%" />
-<col style="width: 6%" />
-<col style="width: 19%" />
+<col width="75%" />
+<col width="6%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>7</p></td>
-<td><p>(63.6%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>7</td>
+<td>(63.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Suraj Jitindar Singh</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-odd"><td>Suraj Jitindar Singh</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-even"><td><p>Frédéric Bonnard</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-even"><td>Frédéric Bonnard</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-odd"><td><p><strong>Total</strong></p></td>
-<td><p>11</p></td>
-<td><p>(100%)</p></td>
+<tr class="row-odd"><td><strong>Total</strong></td>
+<td>11</td>
+<td>(100%)</td>
</tr>
</tbody>
</table>
@@ -2714,106 +2743,106 @@ you exclude them, we’re back down to 2% getting Tested-by, which isn’t great
<div class="section" id="changesets-and-employers">
<h3>Changesets and Employers<a class="headerlink" href="#changesets-and-employers" title="Permalink to this headline">¶</a></h3>
<p>Top changeset contributors by employer:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Employer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Employer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>298</p></td>
-<td><p>(98.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>298</td>
+<td>(98.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Google</p></td>
-<td><p>3</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-odd"><td>Google</td>
+<td>3</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-even"><td><p>(Unknown)</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>(Unknown)</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
</tbody>
</table>
<p>Top lines changed by employer:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 67%" />
-<col style="width: 14%" />
-<col style="width: 19%" />
+<col width="67%" />
+<col width="14%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Employer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Employer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>17396</p></td>
-<td><p>(99.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>17396</td>
+<td>(99.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Google</p></td>
-<td><p>73</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Google</td>
+<td>73</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>(Unknown)</p></td>
-<td><p>24</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-even"><td>(Unknown)</td>
+<td>24</td>
+<td>(0.1%)</td>
</tr>
</tbody>
</table>
<p>Employers with the most signoffs (total 264):</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 65%" />
-<col style="width: 14%" />
-<col style="width: 22%" />
+<col width="65%" />
+<col width="14%" />
+<col width="22%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Employer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Employer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>264</p></td>
-<td><p>(100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>264</td>
+<td>(100.0%)</td>
</tr>
</tbody>
</table>
<p>Employers with the most hackers (total 33)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Employer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Employer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>31</p></td>
-<td><p>(93.9%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>31</td>
+<td>(93.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Google</p></td>
-<td><p>1</p></td>
-<td><p>(3.0%)</p></td>
+<tr class="row-odd"><td>Google</td>
+<td>1</td>
+<td>(3.0%)</td>
</tr>
-<tr class="row-even"><td><p>(Unknown)</p></td>
-<td><p>1</p></td>
-<td><p>(3.0%)</p></td>
+<tr class="row-even"><td>(Unknown)</td>
+<td>1</td>
+<td>(3.0%)</td>
</tr>
</tbody>
</table>
@@ -2822,7 +2851,6 @@ you exclude them, we’re back down to 2% getting Tested-by, which isn’t great
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -2888,15 +2916,17 @@ you exclude them, we’re back down to 2% getting Tested-by, which isn’t great
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -2913,15 +2943,14 @@ you exclude them, we’re back down to 2% getting Tested-by, which isn’t great
<li class="right" >
<a href="skiboot-5.1.9.html" title="skiboot-5.1.9"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.10</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.11-rc1.html b/doc/release-notes/skiboot-5.11-rc1.html
index 0b214f1..c91974e 100644
--- a/doc/release-notes/skiboot-5.11-rc1.html
+++ b/doc/release-notes/skiboot-5.11-rc1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.11-rc1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.11-rc1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.11.html" title="skiboot-5.11"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.11-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -63,7 +64,7 @@ This release is targeted to early POWER9 systems.</p>
<div class="section" id="new-platforms">
<h2>New Platforms<a class="headerlink" href="#new-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Add VESNIN platform support</p>
+<li><p class="first">Add VESNIN platform support</p>
<p>The Vesnin platform from YADRO is a 4 socked POWER8 system with up to 8TB
of memory with 460GB/s of memory bandwidth in only 2U. Many kudos to the
team from Yadro for submitting their code upstream!</p>
@@ -73,14 +74,14 @@ team from Yadro for submitting their code upstream!</p>
<div class="section" id="new-features">
<h2>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>fast-reboot: enable by default for POWER9</p>
+<li><p class="first">fast-reboot: enable by default for POWER9</p>
<ul class="simple">
-<li><p>Fast reboot is disabled if NPU2 is present or CAPI2/OpenCAPI is used</p></li>
+<li>Fast reboot is disabled if NPU2 is present or CAPI2/OpenCAPI is used</li>
</ul>
</li>
-<li><p>PCI tunneled operations on PHB4</p>
+<li><p class="first">PCI tunneled operations on PHB4</p>
<ul>
-<li><p>phb4: set PBCQ Tunnel BAR for tunneled operations</p>
+<li><p class="first">phb4: set PBCQ Tunnel BAR for tunneled operations</p>
<p>P9 supports PCI tunneled operations (atomics and as_notify) that are
initiated by devices.</p>
<p>A subset of the tunneled operations require a response, that must be
@@ -101,7 +102,7 @@ BAR Response register.</p>
all the devices connected to the same PHB, only one of these devices
will be able to use tunneled operations, at any time.</p>
</li>
-<li><p>phb4: set PHB CMPM registers for tunneled operations</p>
+<li><p class="first">phb4: set PHB CMPM registers for tunneled operations</p>
<p>P9 supports PCI tunneled operations (atomics and as_notify) that require
setting the PHB ASN Compare/Mask register with a 16-bit indication.</p>
<p>This register is currently initialized by enable_capi_mode(). But, as
@@ -114,7 +115,7 @@ in PCI mode.</p>
</li>
</ul>
</li>
-<li><p>Tie tm-suspend fw-feature and opal_reinit_cpus() together</p>
+<li><p class="first">Tie tm-suspend fw-feature and opal_reinit_cpus() together</p>
<p>Currently opal_reinit_cpus(OPAL_REINIT_CPUS_TM_SUSPEND_DISABLED)
always returns OPAL_UNSUPPORTED.</p>
<p>This ties the tm suspend fw-feature to the
@@ -134,7 +135,7 @@ dynamically after boot. That is not the case currently though.</p>
<div class="section" id="power-management">
<h2>Power Management<a class="headerlink" href="#power-management" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>SLW: Increase stop4-5 residency by 10x</p>
+<li><p class="first">SLW: Increase stop4-5 residency by 10x</p>
<p>Using DGEMM benchmark we observed there was a drop of 5-9% throughput with
and without stop4/5. In this benchmark the GPU waits on the cpu to wakeup
and provide the subsequent data block to compute. The wakup latency
@@ -142,7 +143,7 @@ accumulates over the run and shows up as a performance drop.</p>
<p>Linux enters stop4/5 more aggressively for its wakeup latency. Increasing
the residency from 1ms to 10ms makes the performance drop &lt;1%</p>
</li>
-<li><p>occ: Set up OCC messaging even if we fail to setup pstates</p>
+<li><p class="first">occ: Set up OCC messaging even if we fail to setup pstates</p>
<p>This means that we no longer hit this bug if we fail to get valid pstates
from the OCC.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>[console-pexpect]#echo 1 &gt; //sys/firmware/opal/sensor_groups//occ-csm0/clear
@@ -170,7 +171,7 @@ echo 1 &gt; //sys/firmware/opal/sensor_groups//occ-csm0/clear
OpenPOWER systems, most OpenBMC based systems) there have been some hardening
efforts in the event of the BMC being poorly behaved.</p>
<ul>
-<li><p>mbox: Reduce default BMC timeouts</p>
+<li><p class="first">mbox: Reduce default BMC timeouts</p>
<p>Rebooting a BMC can take 70 seconds. Skiboot cannot possibly spin for
70 seconds waiting for a BMC to come back. This also makes the current
default of 30 seconds a bit pointless, is it far too short to be a
@@ -180,7 +181,7 @@ and wrecking havoc inside host linux.</p>
that, reads and writes will fail but at least the host stays up.</p>
<p>Also refactored the waiting loop just a bit so that it’s easier to read.</p>
</li>
-<li><p>mbox: Harden against BMC daemon errors</p>
+<li><p class="first">mbox: Harden against BMC daemon errors</p>
<p>Bugs present in the BMC daemon mean that skiboot gets presented with
mbox windows of size zero. These windows cannot be valid and skiboot
already detects these conditions.</p>
@@ -207,7 +208,7 @@ continuously spitting it out.</p>
<p>Around fast-reboot we have made several improvements to harden the fast
reboot code paths and resort to a full IPL if something doesn’t look right.</p>
<ul>
-<li><p>core/fast-reboot: zero memory after fast reboot</p>
+<li><p class="first">core/fast-reboot: zero memory after fast reboot</p>
<p>This improves the security and predictability of the fast reboot
environment.</p>
<p>There can not be a secure fence between fast reboots, because a
@@ -219,7 +220,7 @@ just before the new kernel is loaded and booted into. This allows
image preloading to run concurrently, and will allow parallelisation
of the clearing in future.</p>
</li>
-<li><p>core/fast-reboot: verify mem regions before fast reboot</p>
+<li><p class="first">core/fast-reboot: verify mem regions before fast reboot</p>
<p>Run the mem_region sanity checkers before proceeding with fast
reboot.</p>
<p>This is the beginning of proactive sanity checks on opal data
@@ -227,19 +228,20 @@ for fast reboot (with complements the reactive disable_fast_reboot
cases). This is encouraged to re-use and share any kind of debug
code and unit test code.</p>
</li>
-<li><p>fast-reboot: occ: Only delete /ibm, opal/power-mgt nodes if they exist</p></li>
-<li><p>core/fast-reboot: disable fast reboot upon fundamental entry/exit/locking errors</p>
+<li><p class="first">fast-reboot: occ: Only delete /ibm, opal/power-mgt nodes if they exist</p>
+</li>
+<li><p class="first">core/fast-reboot: disable fast reboot upon fundamental entry/exit/locking errors</p>
<p>This disables fast reboot in several more cases where serious errors
like lock corruption or call re-entrancy are detected.</p>
</li>
-<li><p>capp: Disable fast-reboot whenever enable_capi_mode() is called</p>
+<li><p class="first">capp: Disable fast-reboot whenever enable_capi_mode() is called</p>
<p>This patch updates phb4_set_capi_mode() to disable fast-reboot
whenever enable_capi_mode() is called, irrespective to its return
value. This should prevent against a possibility of not disabling
fast-reboot when some changes to enable_capi_mode() causing return of
an error and leaving CAPP in enabled mode.</p>
</li>
-<li><p>fast-reboot: occ: Delete OCC child nodes in /ibm, opal/power-mgt</p>
+<li><p class="first">fast-reboot: occ: Delete OCC child nodes in /ibm, opal/power-mgt</p>
<p>Fast-reboot in P8 fails to re-init OCC data as there are chipwise OCC
nodes which are already present in the /ibm,opal/power-mgt node. These
per-chip nodes hold the voltage IDs for each pstate and these can be
@@ -251,7 +253,7 @@ the re-init code to re-parse and populate the pstate data.</p>
<div class="section" id="debugging-sreset-improvemens">
<h2>Debugging/SRESET improvemens<a class="headerlink" href="#debugging-sreset-improvemens" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>core/opal: allow some re-entrant calls</p>
+<li><p class="first">core/opal: allow some re-entrant calls</p>
<p>This allows a small number of OPAL calls to succeed despite re-entering
the firmware, and rejects others rather than aborting.</p>
<p>This allows a system reset interrupt that interrupts OPAL to do something
@@ -260,11 +262,11 @@ stack traces to be printed, reboot the system.</p>
<p>Use OPAL_INTERNAL_ERROR when rejecting, rather than OPAL_BUSY, which is
used for many other things that does not mean a serious permanent error.</p>
</li>
-<li><p>core/opal: abort in case of re-entrant OPAL call</p>
+<li><p class="first">core/opal: abort in case of re-entrant OPAL call</p>
<p>The stack is already destroyed by the time we get here, so there
is not much point continuing.</p>
</li>
-<li><p>core/lock: Add lock timeout warnings</p>
+<li><p class="first">core/lock: Add lock timeout warnings</p>
<p>There are currently no timeout warnings for locks in skiboot. We assume
that the lock will eventually become free, which may not always be the
case.</p>
@@ -273,7 +275,7 @@ than 5 seconds will throw a warning and stacktrace for that thread. This is
useful for debugging siturations where a lock which hang, waiting for the
lock to be freed.</p>
</li>
-<li><p>core/lock: Add deadlock detection</p>
+<li><p class="first">core/lock: Add deadlock detection</p>
<p>This adds simple deadlock detection. The detection looks for circular
dependencies in the lock requests. It will abort and display a stack trace
when a deadlock occurs.
@@ -281,7 +283,7 @@ The detection is enabled by DEBUG_LOCKS (enabled by default).
While the detection may have a slight performance overhead, as there are
not a huge number of locks in skiboot this overhead isn’t significant.</p>
</li>
-<li><p>core/hmi: report processor recovery reason from core FIR bits on P9</p>
+<li><p class="first">core/hmi: report processor recovery reason from core FIR bits on P9</p>
<p>When an error is encountered that causes processor recovery, HMI is
generated if the recovery was successful. The reason is recorded in
the core FIR, which gets copied into the WOF.</p>
@@ -296,7 +298,7 @@ msglog.</p>
<p>This patch would have been useful because it tells us exactly that
the problem is in the d-side ERAT:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">414.489690798</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="n">Received</span> <span class="n">HMI</span> <span class="n">interrupt</span><span class="p">:</span> <span class="n">HMER</span> <span class="o">=</span> <span class="mh">0x2040000000000000</span>
-<span class="p">[</span> <span class="mf">414.489693339</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">UOPWR</span><span class="mf">.0000000</span><span class="o">-</span><span class="n">Node0</span><span class="o">-</span><span class="n">Proc0</span><span class="p">]:</span> <span class="n">P</span><span class="p">:</span><span class="mi">0</span> <span class="n">C</span><span class="p">:</span><span class="mi">1</span> <span class="n">T</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span> <span class="n">Processor</span> <span class="n">recovery</span> <span class="n">occurred</span><span class="o">.</span>
+<span class="p">[</span> <span class="mf">414.489693339</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">UOPWR</span><span class="o">.</span><span class="mi">0000000</span><span class="o">-</span><span class="n">Node0</span><span class="o">-</span><span class="n">Proc0</span><span class="p">]:</span> <span class="n">P</span><span class="p">:</span><span class="mi">0</span> <span class="n">C</span><span class="p">:</span><span class="mi">1</span> <span class="n">T</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span> <span class="n">Processor</span> <span class="n">recovery</span> <span class="n">occurred</span><span class="o">.</span>
<span class="p">[</span> <span class="mf">414.489699837</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="n">Core</span> <span class="n">WOF</span> <span class="o">=</span> <span class="mh">0x0000000410000000</span> <span class="n">recovered</span> <span class="n">error</span><span class="p">:</span>
<span class="p">[</span> <span class="mf">414.489701543</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="n">LSU</span> <span class="o">-</span> <span class="n">SRAM</span> <span class="p">(</span><span class="n">DCACHE</span> <span class="n">parity</span><span class="p">,</span> <span class="n">etc</span><span class="p">)</span>
<span class="p">[</span> <span class="mf">414.489702341</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="n">LSU</span> <span class="o">-</span> <span class="n">ERAT</span> <span class="n">multi</span> <span class="n">hit</span>
@@ -310,7 +312,7 @@ print something more useful. Until then, this gives some good data.</p>
<div class="section" id="npu2-nvlink2-fixes">
<h2>NPU2/NVLink2 Fixes<a class="headerlink" href="#npu2-nvlink2-fixes" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>npu2: Add performance tuning SCOM inits</p>
+<li><p class="first">npu2: Add performance tuning SCOM inits</p>
<p>Peer-to-peer GPU bandwidth latency testing has produced some tunable
values that improve performance. Add them to our device initialization.</p>
<p>File these under things that need to be cleaned up with nice #defines
@@ -319,27 +321,27 @@ for the register names and bitfields when we get time.</p>
topology, so introduce a helper to determine how many links go to a
single GPU.</p>
</li>
-<li><p>hw/npu2: Assign a unique LPARSHORTID per GPU</p>
+<li><p class="first">hw/npu2: Assign a unique LPARSHORTID per GPU</p>
<p>This gets used elsewhere to index items in the XTS tables.</p>
</li>
-<li><p>NPU2: dump NPU2 registers on npu2 HMI</p>
+<li><p class="first">NPU2: dump NPU2 registers on npu2 HMI</p>
<p>Due to the nature of debugging npu2 issues, folk are wanting the
full list of NPU2 registers dumped when there’s a problem.</p>
</li>
-<li><p>npu2: Remove DD1 support</p>
+<li><p class="first">npu2: Remove DD1 support</p>
<p>Major changes in the NPU between DD1 and DD2 necessitated a fair bit of
revision-specific code.</p>
<p>Now that all our lab machines are DD2, we no longer test anything on DD1
and it’s time to get rid of it.</p>
<p>Remove DD1-specific code and abort probe if we’re running on a DD1 machine.</p>
</li>
-<li><p>npu2: Disable fast reboot</p>
+<li><p class="first">npu2: Disable fast reboot</p>
<p>Fast reboot does not yet work right with the NPU. It’s been disabled on
NVLink and OpenCAPI machines. Do the same for NVLink2.</p>
<p>This amounts to a port of 3e4577939bbf (“npu: Fix broken fast reset”)
from the npu code to npu2.</p>
</li>
-<li><p>npu2: Use unfiltered mode in XTS tables</p>
+<li><p class="first">npu2: Use unfiltered mode in XTS tables</p>
<p>The XTS_PID context table is limited to 256 possible pids/contexts. To
relieve this limitation, make use of “unfiltered mode” instead.</p>
<p>If an entry in the XTS_BDF table has the bit for unfiltered mode set, we
@@ -360,20 +362,20 @@ refcount, but keep things simple for now.</p>
<div class="section" id="capi-opencapi">
<h2>CAPI/OpenCAPI<a class="headerlink" href="#capi-opencapi" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>npu2-opencapi: Add OpenCAPI OPAL API calls</p>
+<li><p class="first">npu2-opencapi: Add OpenCAPI OPAL API calls</p>
<p>Add three OPAL API calls that are required by the ocxl driver.</p>
<ul>
-<li><p>OPAL_NPU_SPA_SETUP</p>
+<li><p class="first">OPAL_NPU_SPA_SETUP</p>
<p>The Shared Process Area (SPA) is a table containing one entry (a
“Process Element”) per memory context which can be accessed by the
OpenCAPI device.</p>
</li>
-<li><p>OPAL_NPU_SPA_CLEAR_CACHE</p>
+<li><p class="first">OPAL_NPU_SPA_CLEAR_CACHE</p>
<p>The NPU keeps a cache of recently accessed memory contexts. When a
Process Element is removed from the SPA, the cache for the link must be
cleared.</p>
</li>
-<li><p>OPAL_NPU_TL_SET</p>
+<li><p class="first">OPAL_NPU_TL_SET</p>
<p>The Transaction Layer specification defines several templates for
messages to be exchanged on the link. During link setup, the host and
device must negotiate what templates are supported on both sides and at
@@ -381,7 +383,7 @@ what rates those messages can be sent.</p>
</li>
</ul>
</li>
-<li><p>npu2-opencapi: Train OpenCAPI links and setup devices</p>
+<li><p class="first">npu2-opencapi: Train OpenCAPI links and setup devices</p>
<p>Scan the OpenCAPI links under the NPU, and for each link, reset the card,
set up a device, train the link and register a PHB.</p>
<p>Implement the necessary operations for the OpenCAPI PHB type.</p>
@@ -397,7 +399,7 @@ completely or to use the prbs31 test pattern.</p>
</pre></div>
</div>
</li>
-<li><p>npu2-hw-procedures: Add support for OpenCAPI PHY link training</p>
+<li><p class="first">npu2-hw-procedures: Add support for OpenCAPI PHY link training</p>
<p>Unlike NVLink, which uses the pci-virt framework to fake a PCI
configuration space for NVLink devices, the OpenCAPI device model presents
us with a real configuration space handled by the device over the OpenCAPI
@@ -406,11 +408,11 @@ link.</p>
probing, so that config space can be accessed, rather than having link
training being triggered by the Linux driver.</p>
</li>
-<li><p>npu2-opencapi: Configure NPU for OpenCAPI</p>
+<li><p class="first">npu2-opencapi: Configure NPU for OpenCAPI</p>
<p>Scan the device tree for NPUs with OpenCAPI links and configure the NPU per
the initialisation sequence in the NPU OpenCAPI workbook.</p>
</li>
-<li><p>capp: Make error in capp timebase sync a non-fatal error</p>
+<li><p class="first">capp: Make error in capp timebase sync a non-fatal error</p>
<p>Presently when we encounter an error while synchronizing capp timebase
with chip-tod at the end of enable_capi_mode() we return an
error. This has an to unintended consequences. First this will prevent
@@ -426,7 +428,7 @@ make the current implementation align with the one in kernel â€cxl’
driver which also assumes the PSL timebase sync errors as non-fatal
init error.</p>
</li>
-<li><p>npu2-opencapi: Fix assert on link reset during init</p>
+<li><p class="first">npu2-opencapi: Fix assert on link reset during init</p>
<p>We don’t support resetting an opencapi link yet.</p>
<p>Commit fe6d86b9 (“pci: Make fast reboot creset PHBs in parallel”)
tries resetting any PHB whose slot defines a â€run_sm’ callback. It
@@ -437,17 +439,18 @@ the â€freset’ callback, which is not yet defined for opencapi.</p>
log because the PHB cannot be reset, which is correct. It will all go
away when we add support for resetting an opencapi link.</p>
</li>
-<li><p>capp: Add lid definition for P9 DD-2.2</p>
+<li><p class="first">capp: Add lid definition for P9 DD-2.2</p>
<p>Update fsp_lid_map to include CAPP ucode lid for phb4-chipid ==
0x202d1 that corresponds to P9 DD-2.2 chip.</p>
</li>
-<li><p>capp: Disable fast-reboot when capp is enabled</p></li>
+<li><p class="first">capp: Disable fast-reboot when capp is enabled</p>
+</li>
</ul>
</div>
<div class="section" id="pci">
<h2>PCI<a class="headerlink" href="#pci" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>pci: Reduce log level of error message</p>
+<li><p class="first">pci: Reduce log level of error message</p>
<p>If a link doesn’t train, we can end up with error messages like this:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">63.027261959</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span> <span class="n">PHB</span><span class="c1">#0032[8:2]: LINK: Timeout waiting for electrical link</span>
<span class="p">[</span> <span class="mf">63.027265573</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span> <span class="n">PHB</span><span class="c1">#0032:00:00.0 Error -6 resetting</span>
@@ -458,7 +461,7 @@ the core PCI code and is confusing to print to the console.</p>
<p>This reduces the second print to debug level so it’s not seen by the
console by default.</p>
</li>
-<li><p>Revert “platforms/astbmc/slots.c: Allow comparison of bus numbers when matching slots”</p>
+<li><p class="first">Revert “platforms/astbmc/slots.c: Allow comparison of bus numbers when matching slots”</p>
<p>This reverts commit bda7cc4d0354eb3f66629d410b2afc08c79f795f.</p>
<p>Ben says:
It’s on purpose that we do NOT compare the bus numbers,
@@ -468,7 +471,7 @@ devfn’s along the way bcs the bus numbering isn’t fixed
this breaks all slot naming etc… stuff on anything using
the “skiboot” slot tables (P8 opp typically)</p>
</li>
-<li><p>core/pci-dt-slot: Fix booting with no slot map</p>
+<li><p class="first">core/pci-dt-slot: Fix booting with no slot map</p>
<p>Currently if you don’t have a slot map in the device tree in
/ibm,pcie-slots, you can crash with a back trace like this:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">CPU</span> <span class="mi">0034</span> <span class="n">Backtrace</span><span class="p">:</span>
@@ -521,25 +524,31 @@ entry point (ie. no HDAT).</p>
<div class="section" id="bugs-fixed">
<h2>Bugs Fixed<a class="headerlink" href="#bugs-fixed" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>xive: fix opal_xive_set_vp_info() error path</p>
+<li><p class="first">xive: fix opal_xive_set_vp_info() error path</p>
<p>In case of error, opal_xive_set_vp_info() will return without
unlocking the xive object. This is most certainly a typo.</p>
</li>
-<li><p>hw/imc: don’t access homer memory if it was not initialised</p>
+<li><p class="first">hw/imc: don’t access homer memory if it was not initialised</p>
<p>This can happen under mambo, at least.</p>
</li>
-<li><p>nvram: run nvram_validate() after nvram_reformat()</p>
+<li><p class="first">nvram: run nvram_validate() after nvram_reformat()</p>
<p>nvram_reformat() sets nvram_valid = true, but it does not set
skiboot_part_hdr. Call nvram_validate() instead, which sets
everything up properly.</p>
</li>
-<li><p>dts: Zero struct to avoid using uninitialised value</p></li>
-<li><p>hw/imc: Don’t dereference possible NULL</p></li>
-<li><p>libstb/create-container: munmap() signature file address</p></li>
-<li><p>npu2-opencapi: Fix memory leak</p></li>
-<li><p>npu2: Fix possible NULL dereference</p></li>
-<li><p>occ-sensors: Remove NULL checks after dereference</p></li>
-<li><p>core/ipmi-opal: Add interrupt-parent property for ipmi node on P9 and above.</p>
+<li><p class="first">dts: Zero struct to avoid using uninitialised value</p>
+</li>
+<li><p class="first">hw/imc: Don’t dereference possible NULL</p>
+</li>
+<li><p class="first">libstb/create-container: munmap() signature file address</p>
+</li>
+<li><p class="first">npu2-opencapi: Fix memory leak</p>
+</li>
+<li><p class="first">npu2: Fix possible NULL dereference</p>
+</li>
+<li><p class="first">occ-sensors: Remove NULL checks after dereference</p>
+</li>
+<li><p class="first">core/ipmi-opal: Add interrupt-parent property for ipmi node on P9 and above.</p>
<p>dtc complains below warning with newer 4.2+ kernels.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">dts</span><span class="p">:</span> <span class="ne">Warning</span> <span class="p">(</span><span class="n">interrupts_property</span><span class="p">):</span> <span class="n">Missing</span> <span class="n">interrupt</span><span class="o">-</span><span class="n">parent</span> <span class="k">for</span> <span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">ipmi</span>
</pre></div>
@@ -552,7 +561,7 @@ and above, which allows ipmi-opal to properly use the OPAL irqchip.</p>
<div class="section" id="other-fixes-and-improvements">
<h2>Other fixes and improvements<a class="headerlink" href="#other-fixes-and-improvements" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>core/cpu: discover stack region size before initialising memory regions</p>
+<li><p class="first">core/cpu: discover stack region size before initialising memory regions</p>
<p>Stack allocation first allocates a memory region sized to hold stacks
for all possible CPUs up to the maximum PIR of the architecture, zeros
the region, then initialises all stacks. Max PIR is 32768 on POWER9,
@@ -560,17 +569,17 @@ which is 512MB for stacks.</p>
<p>The stack region is then shrunk after CPUs are discovered, but this is
a bit of a hack, and it leaves a hole in the memory allocation regions
as it’s done after mem regions are initialised.</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mh">0x000000000000</span><span class="o">.</span><span class="mf">.00002</span><span class="n">fffffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">os</span><span class="o">-</span><span class="n">reserve</span> <span class="o">-</span> <span class="n">OS</span>
-<span class="mh">0x000030000000</span><span class="o">.</span><span class="mf">.0000303</span><span class="n">fffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">code</span> <span class="o">-</span> <span class="n">OPAL</span>
-<span class="mh">0x000030400000</span><span class="o">.</span><span class="mf">.000030</span><span class="n">ffffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">heap</span> <span class="o">-</span> <span class="n">OPAL</span>
-<span class="mh">0x000031000000</span><span class="o">.</span><span class="mf">.000031</span><span class="n">bfffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">data</span> <span class="o">-</span> <span class="n">OPAL</span>
-<span class="mh">0x000031c00000</span><span class="o">.</span><span class="mf">.000031</span><span class="n">c0ffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">stacks</span> <span class="o">-</span> <span class="n">OPAL</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mh">0x000000000000</span><span class="o">..</span><span class="mi">00002</span><span class="n">fffffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">os</span><span class="o">-</span><span class="n">reserve</span> <span class="o">-</span> <span class="n">OS</span>
+<span class="mh">0x000030000000</span><span class="o">..</span><span class="mi">0000303</span><span class="n">fffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">code</span> <span class="o">-</span> <span class="n">OPAL</span>
+<span class="mh">0x000030400000</span><span class="o">..</span><span class="mi">000030</span><span class="n">ffffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">heap</span> <span class="o">-</span> <span class="n">OPAL</span>
+<span class="mh">0x000031000000</span><span class="o">..</span><span class="mi">000031</span><span class="n">bfffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">data</span> <span class="o">-</span> <span class="n">OPAL</span>
+<span class="mh">0x000031c00000</span><span class="o">..</span><span class="mi">000031</span><span class="n">c0ffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">stacks</span> <span class="o">-</span> <span class="n">OPAL</span>
<span class="o">***</span> <span class="n">gap</span> <span class="o">***</span>
-<span class="mh">0x000051c00000</span><span class="o">.</span><span class="mf">.000051</span><span class="n">d01fff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">allocs</span><span class="o">-</span><span class="n">memory</span><span class="o">@</span><span class="mi">0</span> <span class="o">-</span> <span class="n">OPAL</span>
-<span class="mh">0x000051d02000</span><span class="o">.</span><span class="mf">.00007</span><span class="n">fffffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">allocs</span><span class="o">-</span><span class="n">memory</span><span class="o">@</span><span class="mi">0</span> <span class="o">-</span> <span class="n">OS</span>
-<span class="mh">0x000080000000</span><span class="o">.</span><span class="mf">.000080</span><span class="n">b3cdff</span> <span class="p">:</span> <span class="n">initramfs</span> <span class="o">-</span> <span class="n">OPAL</span>
-<span class="mh">0x000080b3ce00</span><span class="o">.</span><span class="mf">.000080</span><span class="n">b7cdff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">fake</span><span class="o">-</span><span class="n">nvram</span> <span class="o">-</span> <span class="n">OPAL</span>
-<span class="mh">0x000080b7ce00</span><span class="o">.</span><span class="mf">.0000</span><span class="n">ffffffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">allocs</span><span class="o">-</span><span class="n">memory</span><span class="o">@</span><span class="mi">0</span> <span class="o">-</span> <span class="n">OS</span>
+<span class="mh">0x000051c00000</span><span class="o">..</span><span class="mi">000051</span><span class="n">d01fff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">allocs</span><span class="o">-</span><span class="n">memory</span><span class="nd">@0</span> <span class="o">-</span> <span class="n">OPAL</span>
+<span class="mh">0x000051d02000</span><span class="o">..</span><span class="mi">00007</span><span class="n">fffffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">allocs</span><span class="o">-</span><span class="n">memory</span><span class="nd">@0</span> <span class="o">-</span> <span class="n">OS</span>
+<span class="mh">0x000080000000</span><span class="o">..</span><span class="mi">000080</span><span class="n">b3cdff</span> <span class="p">:</span> <span class="n">initramfs</span> <span class="o">-</span> <span class="n">OPAL</span>
+<span class="mh">0x000080b3ce00</span><span class="o">..</span><span class="mi">000080</span><span class="n">b7cdff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">fake</span><span class="o">-</span><span class="n">nvram</span> <span class="o">-</span> <span class="n">OPAL</span>
+<span class="mh">0x000080b7ce00</span><span class="o">..</span><span class="mi">0000</span><span class="n">ffffffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">allocs</span><span class="o">-</span><span class="n">memory</span><span class="nd">@0</span> <span class="o">-</span> <span class="n">OS</span>
</pre></div>
</div>
<p>This change moves zeroing into the per-cpu stack setup. The boot CPU
@@ -580,20 +589,21 @@ device tree, before mem regions are intialised.</p>
<p>This results in all memory being accounted within memory regions,
and less memory fragmentation of OPAL allocations.</p>
</li>
-<li><p>Make gard display show that a record is cleared</p>
+<li><p class="first">Make gard display show that a record is cleared</p>
<p>When clearing gard records, Hostboot only modifies the record_id
portion to be 0xFFFFFFFF. The remainder of the entry remains.
Without this change it can be confusing to users to know that
the record they are looking at is no longer valid.</p>
</li>
-<li><p>Reserve OPAL API number for opal_handle_hmi2 function.</p></li>
-<li><p>dts: spl_wakeup: Remove all workarounds in the spl wakeup logic</p>
+<li><p class="first">Reserve OPAL API number for opal_handle_hmi2 function.</p>
+</li>
+<li><p class="first">dts: spl_wakeup: Remove all workarounds in the spl wakeup logic</p>
<p>We coded few workarounds in special wakeup logic to handle the
buggy firmware. Now that is fixed remove them as they break the
special wakeup protocol. As per the spec we should not de-assert
beofre assert is complete. So follow this protocol.</p>
</li>
-<li><p>build: use thin archives rather than incremental linking</p>
+<li><p class="first">build: use thin archives rather than incremental linking</p>
<p>This changes to build system to use thin archives rather than
incremental linking for built-in.o, similar to recent change to Linux.
built-in.o is renamed to built-in.a, and is created as a thin archive
@@ -607,7 +617,7 @@ time optimisation in toolchains which might be interesting for skiboot
particularly for size reductions.</p>
<p>Size of build tree before this patch is 34.4MB, afterwards 23.1MB.</p>
</li>
-<li><p>core/init: Assert when kernel not found</p>
+<li><p class="first">core/init: Assert when kernel not found</p>
<p>If the kernel doesn’t load out of flash or there is nothing at
KERNEL_LOAD_BASE, we end up with an esoteric message as we try to
branch to out of skiboot into nothing</p>
@@ -632,7 +642,7 @@ branch to out of skiboot into nothing</p>
</pre></div>
</div>
</li>
-<li><p>core: Fix â€opal-runtime-size’ property</p>
+<li><p class="first">core: Fix â€opal-runtime-size’ property</p>
<p>We are populating â€opal-runtime-size’ before calculating actual stack size.
Hence we endup having wrong runtime size (ex: on P9 it shows ~540MB while
actual size is around ~40MB). Note that only device tree property is shows
@@ -640,7 +650,7 @@ wrong value, but reserved-memory reflects correct size.</p>
<p>init_all_cpus() calculates and updates actual stack size. Hence move this
function call before add_opal_node().</p>
</li>
-<li><p>mambo: Add fw-feature flags for security related settings</p>
+<li><p class="first">mambo: Add fw-feature flags for security related settings</p>
<p>Newer firmwares report some feature flags related to security
settings via HDAT. On real hardware skiboot translates these into
device tree properties. For testing purposes just create the
@@ -653,14 +663,15 @@ in src/usr/hdat/hdatiplparms.H.</p>
<p>Also add an environment variable for easily toggling the top-level
“security on” setting.</p>
</li>
-<li><p>direct-controls: mambo fix for multiple chips</p></li>
-<li><p>libflash/blocklevel: Correct miscalculation in blocklevel_smart_erase()</p>
+<li><p class="first">direct-controls: mambo fix for multiple chips</p>
+</li>
+<li><p class="first">libflash/blocklevel: Correct miscalculation in blocklevel_smart_erase()</p>
<p>If blocklevel_smart_erase() detects that the smart erase fits entire in
one erase block, it has an early bail path. In this path it miscaculates
where in the buffer the backend needs to read from to perform the final
write.</p>
</li>
-<li><p>libstb/secureboot: Fix logging of secure verify messages.</p>
+<li><p class="first">libstb/secureboot: Fix logging of secure verify messages.</p>
<p>Currently we are logging secure verify/enforce messages in PR_EMERG
level even when there is no secureboot mode enabled. So reduce the
log level to PR_ERR when secureboot mode is OFF.</p>
@@ -673,16 +684,17 @@ log level to PR_ERR when secureboot mode is OFF.</p>
as easily exporting the area of memory you need to dump to feed to
<cite>extract-gcov</cite>.</p>
<ul>
-<li><p>cpu_idle_job: relax a bit</p>
+<li><p class="first">cpu_idle_job: relax a bit</p>
<p>This <em>dramatically</em> improves kernel boot time with GCOV builds</p>
<p>from ~3minutes between loading kernel and switching the HILE
bit down to around 10 seconds.</p>
</li>
-<li><p>gcov: Another GCC, another gcov tweak</p></li>
-<li><p>Keep constructors with priorities</p>
+<li><p class="first">gcov: Another GCC, another gcov tweak</p>
+</li>
+<li><p class="first">Keep constructors with priorities</p>
<p>Fixes GCOV builds with gcc7, which uses this.</p>
</li>
-<li><p>gcov: Add gcov data struct to sysfs</p>
+<li><p class="first">gcov: Add gcov data struct to sysfs</p>
<p>Extracting the skiboot gcov data is currently a tedious process which
involves taking a mem dump of skiboot and searching for the gcov_info
struct.
@@ -694,7 +706,6 @@ data to be copied directly into userspace and processed.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -735,15 +746,17 @@ data to be copied directly into userspace and processed.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -760,15 +773,14 @@ data to be copied directly into userspace and processed.</p>
<li class="right" >
<a href="skiboot-5.11.html" title="skiboot-5.11"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.11-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.11.html b/doc/release-notes/skiboot-5.11.html
index 96e4000..a57a07f 100644
--- a/doc/release-notes/skiboot-5.11.html
+++ b/doc/release-notes/skiboot-5.11.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.11 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.11 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.10.6.html" title="skiboot-5.10.6"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.11</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -63,7 +64,7 @@ may be more 5.10.x stable releases, it will depend on demand.</p>
<div class="section" id="new-platforms">
<h2>New Platforms<a class="headerlink" href="#new-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Add VESNIN platform support</p>
+<li><p class="first">Add VESNIN platform support</p>
<p>The Vesnin platform from YADRO is a 4 socked POWER8 system with up to 8TB
of memory with 460GB/s of memory bandwidth in only 2U. Many kudos to the
team from Yadro for submitting their code upstream!</p>
@@ -73,14 +74,14 @@ team from Yadro for submitting their code upstream!</p>
<div class="section" id="new-features">
<h2>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>fast-reboot: enable by default for POWER9</p>
+<li><p class="first">fast-reboot: enable by default for POWER9</p>
<ul class="simple">
-<li><p>Fast reboot is disabled if NPU2 is present or CAPI2/OpenCAPI is used</p></li>
+<li>Fast reboot is disabled if NPU2 is present or CAPI2/OpenCAPI is used</li>
</ul>
</li>
-<li><p>PCI tunneled operations on PHB4</p>
+<li><p class="first">PCI tunneled operations on PHB4</p>
<ul>
-<li><p>phb4: set PBCQ Tunnel BAR for tunneled operations</p>
+<li><p class="first">phb4: set PBCQ Tunnel BAR for tunneled operations</p>
<p>P9 supports PCI tunneled operations (atomics and as_notify) that are
initiated by devices.</p>
<p>A subset of the tunneled operations require a response, that must be
@@ -101,7 +102,7 @@ BAR Response register.</p>
all the devices connected to the same PHB, only one of these devices
will be able to use tunneled operations, at any time.</p>
</li>
-<li><p>phb4: set PHB CMPM registers for tunneled operations</p>
+<li><p class="first">phb4: set PHB CMPM registers for tunneled operations</p>
<p>P9 supports PCI tunneled operations (atomics and as_notify) that require
setting the PHB ASN Compare/Mask register with a 16-bit indication.</p>
<p>This register is currently initialized by enable_capi_mode(). But, as
@@ -114,7 +115,7 @@ in PCI mode.</p>
</li>
</ul>
</li>
-<li><p>Tie tm-suspend fw-feature and opal_reinit_cpus() together</p>
+<li><p class="first">Tie tm-suspend fw-feature and opal_reinit_cpus() together</p>
<p>Currently opal_reinit_cpus(OPAL_REINIT_CPUS_TM_SUSPEND_DISABLED)
always returns OPAL_UNSUPPORTED.</p>
<p>This ties the tm suspend fw-feature to the
@@ -134,7 +135,7 @@ dynamically after boot. That is not the case currently though.</p>
<div class="section" id="power-management">
<h2>Power Management<a class="headerlink" href="#power-management" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>SLW: Increase stop4-5 residency by 10x</p>
+<li><p class="first">SLW: Increase stop4-5 residency by 10x</p>
<p>Using DGEMM benchmark we observed there was a drop of 5-9% throughput with
and without stop4/5. In this benchmark the GPU waits on the cpu to wakeup
and provide the subsequent data block to compute. The wakup latency
@@ -142,7 +143,7 @@ accumulates over the run and shows up as a performance drop.</p>
<p>Linux enters stop4/5 more aggressively for its wakeup latency. Increasing
the residency from 1ms to 10ms makes the performance drop &lt;1%</p>
</li>
-<li><p>occ: Set up OCC messaging even if we fail to setup pstates</p>
+<li><p class="first">occ: Set up OCC messaging even if we fail to setup pstates</p>
<p>This means that we no longer hit this bug if we fail to get valid pstates
from the OCC.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>[console-pexpect]#echo 1 &gt; //sys/firmware/opal/sensor_groups//occ-csm0/clear
@@ -170,7 +171,7 @@ echo 1 &gt; //sys/firmware/opal/sensor_groups//occ-csm0/clear
OpenPOWER systems, most OpenBMC based systems) there have been some hardening
efforts in the event of the BMC being poorly behaved.</p>
<ul>
-<li><p>mbox: Reduce default BMC timeouts</p>
+<li><p class="first">mbox: Reduce default BMC timeouts</p>
<p>Rebooting a BMC can take 70 seconds. Skiboot cannot possibly spin for
70 seconds waiting for a BMC to come back. This also makes the current
default of 30 seconds a bit pointless, is it far too short to be a
@@ -180,7 +181,7 @@ and wrecking havoc inside host linux.</p>
that, reads and writes will fail but at least the host stays up.</p>
<p>Also refactored the waiting loop just a bit so that it’s easier to read.</p>
</li>
-<li><p>mbox: Harden against BMC daemon errors</p>
+<li><p class="first">mbox: Harden against BMC daemon errors</p>
<p>Bugs present in the BMC daemon mean that skiboot gets presented with
mbox windows of size zero. These windows cannot be valid and skiboot
already detects these conditions.</p>
@@ -207,7 +208,7 @@ continuously spitting it out.</p>
<p>Around fast-reboot we have made several improvements to harden the fast
reboot code paths and resort to a full IPL if something doesn’t look right.</p>
<ul>
-<li><p>core/fast-reboot: zero memory after fast reboot</p>
+<li><p class="first">core/fast-reboot: zero memory after fast reboot</p>
<p>This improves the security and predictability of the fast reboot
environment.</p>
<p>There can not be a secure fence between fast reboots, because a
@@ -219,7 +220,7 @@ just before the new kernel is loaded and booted into. This allows
image preloading to run concurrently, and will allow parallelisation
of the clearing in future.</p>
</li>
-<li><p>core/fast-reboot: verify mem regions before fast reboot</p>
+<li><p class="first">core/fast-reboot: verify mem regions before fast reboot</p>
<p>Run the mem_region sanity checkers before proceeding with fast
reboot.</p>
<p>This is the beginning of proactive sanity checks on opal data
@@ -227,19 +228,20 @@ for fast reboot (with complements the reactive disable_fast_reboot
cases). This is encouraged to re-use and share any kind of debug
code and unit test code.</p>
</li>
-<li><p>fast-reboot: occ: Only delete /ibm, opal/power-mgt nodes if they exist</p></li>
-<li><p>core/fast-reboot: disable fast reboot upon fundamental entry/exit/locking errors</p>
+<li><p class="first">fast-reboot: occ: Only delete /ibm, opal/power-mgt nodes if they exist</p>
+</li>
+<li><p class="first">core/fast-reboot: disable fast reboot upon fundamental entry/exit/locking errors</p>
<p>This disables fast reboot in several more cases where serious errors
like lock corruption or call re-entrancy are detected.</p>
</li>
-<li><p>capp: Disable fast-reboot whenever enable_capi_mode() is called</p>
+<li><p class="first">capp: Disable fast-reboot whenever enable_capi_mode() is called</p>
<p>This patch updates phb4_set_capi_mode() to disable fast-reboot
whenever enable_capi_mode() is called, irrespective to its return
value. This should prevent against a possibility of not disabling
fast-reboot when some changes to enable_capi_mode() causing return of
an error and leaving CAPP in enabled mode.</p>
</li>
-<li><p>fast-reboot: occ: Delete OCC child nodes in /ibm, opal/power-mgt</p>
+<li><p class="first">fast-reboot: occ: Delete OCC child nodes in /ibm, opal/power-mgt</p>
<p>Fast-reboot in P8 fails to re-init OCC data as there are chipwise OCC
nodes which are already present in the /ibm,opal/power-mgt node. These
per-chip nodes hold the voltage IDs for each pstate and these can be
@@ -252,7 +254,7 @@ the re-init code to re-parse and populate the pstate data.</p>
<h2>Debugging/SRESET improvemens<a class="headerlink" href="#debugging-sreset-improvemens" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-5.11-rc1.html#skiboot-5-11-rc1"><span class="std std-ref">skiboot-5.11-rc1</span></a>:</p>
<ul>
-<li><p>core/cpu: Prevent clobbering of stack guard for boot-cpu</p>
+<li><p class="first">core/cpu: Prevent clobbering of stack guard for boot-cpu</p>
<p>Commit 90d53934c2da (“core/cpu: discover stack region size before
initialising memory regions”) introduced memzero for struct cpu_thread
in init_cpu_thread(). This has an unintended side effect of clobbering
@@ -277,7 +279,7 @@ CPU 0004 Backtrace:
<p>So the patch provides a fix by tweaking the memset() call in
init_cpu_thread() to skip over the stack-guard cannery.</p>
</li>
-<li><p>core/lock.c: ensure valid start value for lock spin duration warning</p>
+<li><p class="first">core/lock.c: ensure valid start value for lock spin duration warning</p>
<p>The previous fix in a8e6cc3f4 only addressed half of the problem, as
we could also get an invalid value for start, causing us to fail
in a weird way.</p>
@@ -298,7 +300,7 @@ and only checks the lock timeout if we got a valid start value.</p>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.10.html#skiboot-5-10"><span class="std std-ref">skiboot-5.10</span></a>:</p>
<ul>
-<li><p>core/opal: allow some re-entrant calls</p>
+<li><p class="first">core/opal: allow some re-entrant calls</p>
<p>This allows a small number of OPAL calls to succeed despite re-entering
the firmware, and rejects others rather than aborting.</p>
<p>This allows a system reset interrupt that interrupts OPAL to do something
@@ -307,11 +309,11 @@ stack traces to be printed, reboot the system.</p>
<p>Use OPAL_INTERNAL_ERROR when rejecting, rather than OPAL_BUSY, which is
used for many other things that does not mean a serious permanent error.</p>
</li>
-<li><p>core/opal: abort in case of re-entrant OPAL call</p>
+<li><p class="first">core/opal: abort in case of re-entrant OPAL call</p>
<p>The stack is already destroyed by the time we get here, so there
is not much point continuing.</p>
</li>
-<li><p>core/lock: Add lock timeout warnings</p>
+<li><p class="first">core/lock: Add lock timeout warnings</p>
<p>There are currently no timeout warnings for locks in skiboot. We assume
that the lock will eventually become free, which may not always be the
case.</p>
@@ -320,7 +322,7 @@ than 5 seconds will throw a warning and stacktrace for that thread. This is
useful for debugging siturations where a lock which hang, waiting for the
lock to be freed.</p>
</li>
-<li><p>core/lock: Add deadlock detection</p>
+<li><p class="first">core/lock: Add deadlock detection</p>
<p>This adds simple deadlock detection. The detection looks for circular
dependencies in the lock requests. It will abort and display a stack trace
when a deadlock occurs.
@@ -328,7 +330,7 @@ The detection is enabled by DEBUG_LOCKS (enabled by default).
While the detection may have a slight performance overhead, as there are
not a huge number of locks in skiboot this overhead isn’t significant.</p>
</li>
-<li><p>core/hmi: report processor recovery reason from core FIR bits on P9</p>
+<li><p class="first">core/hmi: report processor recovery reason from core FIR bits on P9</p>
<p>When an error is encountered that causes processor recovery, HMI is
generated if the recovery was successful. The reason is recorded in
the core FIR, which gets copied into the WOF.</p>
@@ -343,7 +345,7 @@ msglog.</p>
<p>This patch would have been useful because it tells us exactly that
the problem is in the d-side ERAT:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">414.489690798</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="n">Received</span> <span class="n">HMI</span> <span class="n">interrupt</span><span class="p">:</span> <span class="n">HMER</span> <span class="o">=</span> <span class="mh">0x2040000000000000</span>
-<span class="p">[</span> <span class="mf">414.489693339</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">UOPWR</span><span class="mf">.0000000</span><span class="o">-</span><span class="n">Node0</span><span class="o">-</span><span class="n">Proc0</span><span class="p">]:</span> <span class="n">P</span><span class="p">:</span><span class="mi">0</span> <span class="n">C</span><span class="p">:</span><span class="mi">1</span> <span class="n">T</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span> <span class="n">Processor</span> <span class="n">recovery</span> <span class="n">occurred</span><span class="o">.</span>
+<span class="p">[</span> <span class="mf">414.489693339</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">UOPWR</span><span class="o">.</span><span class="mi">0000000</span><span class="o">-</span><span class="n">Node0</span><span class="o">-</span><span class="n">Proc0</span><span class="p">]:</span> <span class="n">P</span><span class="p">:</span><span class="mi">0</span> <span class="n">C</span><span class="p">:</span><span class="mi">1</span> <span class="n">T</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span> <span class="n">Processor</span> <span class="n">recovery</span> <span class="n">occurred</span><span class="o">.</span>
<span class="p">[</span> <span class="mf">414.489699837</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="n">Core</span> <span class="n">WOF</span> <span class="o">=</span> <span class="mh">0x0000000410000000</span> <span class="n">recovered</span> <span class="n">error</span><span class="p">:</span>
<span class="p">[</span> <span class="mf">414.489701543</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="n">LSU</span> <span class="o">-</span> <span class="n">SRAM</span> <span class="p">(</span><span class="n">DCACHE</span> <span class="n">parity</span><span class="p">,</span> <span class="n">etc</span><span class="p">)</span>
<span class="p">[</span> <span class="mf">414.489702341</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="n">LSU</span> <span class="o">-</span> <span class="n">ERAT</span> <span class="n">multi</span> <span class="n">hit</span>
@@ -357,7 +359,7 @@ print something more useful. Until then, this gives some good data.</p>
<div class="section" id="npu2-nvlink2-fixes">
<h2>NPU2/NVLink2 Fixes<a class="headerlink" href="#npu2-nvlink2-fixes" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>npu2: Add performance tuning SCOM inits</p>
+<li><p class="first">npu2: Add performance tuning SCOM inits</p>
<p>Peer-to-peer GPU bandwidth latency testing has produced some tunable
values that improve performance. Add them to our device initialization.</p>
<p>File these under things that need to be cleaned up with nice #defines
@@ -366,27 +368,27 @@ for the register names and bitfields when we get time.</p>
topology, so introduce a helper to determine how many links go to a
single GPU.</p>
</li>
-<li><p>hw/npu2: Assign a unique LPARSHORTID per GPU</p>
+<li><p class="first">hw/npu2: Assign a unique LPARSHORTID per GPU</p>
<p>This gets used elsewhere to index items in the XTS tables.</p>
</li>
-<li><p>NPU2: dump NPU2 registers on npu2 HMI</p>
+<li><p class="first">NPU2: dump NPU2 registers on npu2 HMI</p>
<p>Due to the nature of debugging npu2 issues, folk are wanting the
full list of NPU2 registers dumped when there’s a problem.</p>
</li>
-<li><p>npu2: Remove DD1 support</p>
+<li><p class="first">npu2: Remove DD1 support</p>
<p>Major changes in the NPU between DD1 and DD2 necessitated a fair bit of
revision-specific code.</p>
<p>Now that all our lab machines are DD2, we no longer test anything on DD1
and it’s time to get rid of it.</p>
<p>Remove DD1-specific code and abort probe if we’re running on a DD1 machine.</p>
</li>
-<li><p>npu2: Disable fast reboot</p>
+<li><p class="first">npu2: Disable fast reboot</p>
<p>Fast reboot does not yet work right with the NPU. It’s been disabled on
NVLink and OpenCAPI machines. Do the same for NVLink2.</p>
<p>This amounts to a port of 3e4577939bbf (“npu: Fix broken fast reset”)
from the npu code to npu2.</p>
</li>
-<li><p>npu2: Use unfiltered mode in XTS tables</p>
+<li><p class="first">npu2: Use unfiltered mode in XTS tables</p>
<p>The XTS_PID context table is limited to 256 possible pids/contexts. To
relieve this limitation, make use of “unfiltered mode” instead.</p>
<p>If an entry in the XTS_BDF table has the bit for unfiltered mode set, we
@@ -408,7 +410,7 @@ refcount, but keep things simple for now.</p>
<h2>CAPI/OpenCAPI<a class="headerlink" href="#capi-opencapi" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-5.11-rc1.html#skiboot-5-11-rc1"><span class="std std-ref">skiboot-5.11-rc1</span></a>:</p>
<ul>
-<li><p>capi: Poll Err/Status register during CAPP recovery</p>
+<li><p class="first">capi: Poll Err/Status register during CAPP recovery</p>
<p>This patch updates do_capp_recovery_scoms() to poll the CAPP
Err/Status control register, check for CAPP-Recovery to complete/fail
based on indications of BITS-1,5,9 and then proceed with the
@@ -425,20 +427,20 @@ max time to failure for CAPP-Recovery.</p>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.10.html#skiboot-5-10"><span class="std std-ref">skiboot-5.10</span></a>:</p>
<ul>
-<li><p>npu2-opencapi: Add OpenCAPI OPAL API calls</p>
+<li><p class="first">npu2-opencapi: Add OpenCAPI OPAL API calls</p>
<p>Add three OPAL API calls that are required by the ocxl driver.</p>
<ul>
-<li><p>OPAL_NPU_SPA_SETUP</p>
+<li><p class="first">OPAL_NPU_SPA_SETUP</p>
<p>The Shared Process Area (SPA) is a table containing one entry (a
“Process Element”) per memory context which can be accessed by the
OpenCAPI device.</p>
</li>
-<li><p>OPAL_NPU_SPA_CLEAR_CACHE</p>
+<li><p class="first">OPAL_NPU_SPA_CLEAR_CACHE</p>
<p>The NPU keeps a cache of recently accessed memory contexts. When a
Process Element is removed from the SPA, the cache for the link must be
cleared.</p>
</li>
-<li><p>OPAL_NPU_TL_SET</p>
+<li><p class="first">OPAL_NPU_TL_SET</p>
<p>The Transaction Layer specification defines several templates for
messages to be exchanged on the link. During link setup, the host and
device must negotiate what templates are supported on both sides and at
@@ -446,7 +448,7 @@ what rates those messages can be sent.</p>
</li>
</ul>
</li>
-<li><p>npu2-opencapi: Train OpenCAPI links and setup devices</p>
+<li><p class="first">npu2-opencapi: Train OpenCAPI links and setup devices</p>
<p>Scan the OpenCAPI links under the NPU, and for each link, reset the card,
set up a device, train the link and register a PHB.</p>
<p>Implement the necessary operations for the OpenCAPI PHB type.</p>
@@ -462,7 +464,7 @@ completely or to use the prbs31 test pattern.</p>
</pre></div>
</div>
</li>
-<li><p>npu2-hw-procedures: Add support for OpenCAPI PHY link training</p>
+<li><p class="first">npu2-hw-procedures: Add support for OpenCAPI PHY link training</p>
<p>Unlike NVLink, which uses the pci-virt framework to fake a PCI
configuration space for NVLink devices, the OpenCAPI device model presents
us with a real configuration space handled by the device over the OpenCAPI
@@ -471,11 +473,11 @@ link.</p>
probing, so that config space can be accessed, rather than having link
training being triggered by the Linux driver.</p>
</li>
-<li><p>npu2-opencapi: Configure NPU for OpenCAPI</p>
+<li><p class="first">npu2-opencapi: Configure NPU for OpenCAPI</p>
<p>Scan the device tree for NPUs with OpenCAPI links and configure the NPU per
the initialisation sequence in the NPU OpenCAPI workbook.</p>
</li>
-<li><p>capp: Make error in capp timebase sync a non-fatal error</p>
+<li><p class="first">capp: Make error in capp timebase sync a non-fatal error</p>
<p>Presently when we encounter an error while synchronizing capp timebase
with chip-tod at the end of enable_capi_mode() we return an
error. This has an to unintended consequences. First this will prevent
@@ -491,7 +493,7 @@ make the current implementation align with the one in kernel â€cxl’
driver which also assumes the PSL timebase sync errors as non-fatal
init error.</p>
</li>
-<li><p>npu2-opencapi: Fix assert on link reset during init</p>
+<li><p class="first">npu2-opencapi: Fix assert on link reset during init</p>
<p>We don’t support resetting an opencapi link yet.</p>
<p>Commit fe6d86b9 (“pci: Make fast reboot creset PHBs in parallel”)
tries resetting any PHB whose slot defines a â€run_sm’ callback. It
@@ -502,18 +504,19 @@ the â€freset’ callback, which is not yet defined for opencapi.</p>
log because the PHB cannot be reset, which is correct. It will all go
away when we add support for resetting an opencapi link.</p>
</li>
-<li><p>capp: Add lid definition for P9 DD-2.2</p>
+<li><p class="first">capp: Add lid definition for P9 DD-2.2</p>
<p>Update fsp_lid_map to include CAPP ucode lid for phb4-chipid ==
0x202d1 that corresponds to P9 DD-2.2 chip.</p>
</li>
-<li><p>capp: Disable fast-reboot when capp is enabled</p></li>
+<li><p class="first">capp: Disable fast-reboot when capp is enabled</p>
+</li>
</ul>
</div>
<div class="section" id="pci">
<h2>PCI<a class="headerlink" href="#pci" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-5.11-rc1.html#skiboot-5-11-rc1"><span class="std std-ref">skiboot-5.11-rc1</span></a>:</p>
<ul>
-<li><p>phb4: Reset FIR/NFIR registers before PHB4 probe</p>
+<li><p class="first">phb4: Reset FIR/NFIR registers before PHB4 probe</p>
<p>The function phb4_probe_stack() resets “ETU Reset Register” to
unfreeze the PHB before it performs mmio access on the PHB. However in
case the FIR/NFIR registers are set while entering this function,
@@ -543,7 +546,7 @@ ETU reset to enable mmio access to the PHB.</p>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.10.html#skiboot-5-10"><span class="std std-ref">skiboot-5.10</span></a>:</p>
<ul>
-<li><p>pci: Reduce log level of error message</p>
+<li><p class="first">pci: Reduce log level of error message</p>
<p>If a link doesn’t train, we can end up with error messages like this:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">63.027261959</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span> <span class="n">PHB</span><span class="c1">#0032[8:2]: LINK: Timeout waiting for electrical link</span>
<span class="p">[</span> <span class="mf">63.027265573</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span> <span class="n">PHB</span><span class="c1">#0032:00:00.0 Error -6 resetting</span>
@@ -554,7 +557,7 @@ the core PCI code and is confusing to print to the console.</p>
<p>This reduces the second print to debug level so it’s not seen by the
console by default.</p>
</li>
-<li><p>Revert “platforms/astbmc/slots.c: Allow comparison of bus numbers when matching slots”</p>
+<li><p class="first">Revert “platforms/astbmc/slots.c: Allow comparison of bus numbers when matching slots”</p>
<p>This reverts commit bda7cc4d0354eb3f66629d410b2afc08c79f795f.</p>
<p>Ben says:
It’s on purpose that we do NOT compare the bus numbers,
@@ -564,7 +567,7 @@ devfn’s along the way bcs the bus numbering isn’t fixed
this breaks all slot naming etc… stuff on anything using
the “skiboot” slot tables (P8 opp typically)</p>
</li>
-<li><p>core/pci-dt-slot: Fix booting with no slot map</p>
+<li><p class="first">core/pci-dt-slot: Fix booting with no slot map</p>
<p>Currently if you don’t have a slot map in the device tree in
/ibm,pcie-slots, you can crash with a back trace like this:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">CPU</span> <span class="mi">0034</span> <span class="n">Backtrace</span><span class="p">:</span>
@@ -618,7 +621,7 @@ entry point (ie. no HDAT).</p>
<h2>Bugs Fixed<a class="headerlink" href="#bugs-fixed" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-5.11-rc1.html#skiboot-5-11-rc1"><span class="std std-ref">skiboot-5.11-rc1</span></a>:</p>
<ul>
-<li><p>cpufeatures: Fix setting DARN and SCV HWCAP feature bits</p>
+<li><p class="first">cpufeatures: Fix setting DARN and SCV HWCAP feature bits</p>
<p>DARN and SCV has been assigned AT_HWCAP2 (32-63) bits:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">#define PPC_FEATURE2_DARN 0x00200000 /* darn random number insn */</span>
<span class="c1">#define PPC_FEATURE2_SCV 0x00100000 /* scv syscall */</span>
@@ -627,7 +630,7 @@ entry point (ie. no HDAT).</p>
<p>A cpufeatures-aware OS will not advertise these to userspace without
this patch.</p>
</li>
-<li><p>xive: disable store EOI support</p>
+<li><p class="first">xive: disable store EOI support</p>
<p>Hardware has limitations which would require to put a sync after each
store EOI to make sure the MMIO operations that change the ESB state
are ordered. This is a killer for performance and the PHBs do not
@@ -636,33 +639,39 @@ hardware is improved.</p>
<p>Also, while we are at changing the XIVE source flags, let’s fix the
settings for the PHB4s which should follow these rules :</p>
<ul class="simple">
-<li><p>SHIFT_BUG for DD10</p></li>
-<li><p>STORE_EOI for DD20 and if enabled</p></li>
-<li><p>TRIGGER_PAGE for DDx0 and if not STORE_EOI</p></li>
+<li>SHIFT_BUG for DD10</li>
+<li>STORE_EOI for DD20 and if enabled</li>
+<li>TRIGGER_PAGE for DDx0 and if not STORE_EOI</li>
</ul>
</li>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.10.html#skiboot-5-10"><span class="std std-ref">skiboot-5.10</span></a>:</p>
<ul>
-<li><p>xive: fix opal_xive_set_vp_info() error path</p>
+<li><p class="first">xive: fix opal_xive_set_vp_info() error path</p>
<p>In case of error, opal_xive_set_vp_info() will return without
unlocking the xive object. This is most certainly a typo.</p>
</li>
-<li><p>hw/imc: don’t access homer memory if it was not initialised</p>
+<li><p class="first">hw/imc: don’t access homer memory if it was not initialised</p>
<p>This can happen under mambo, at least.</p>
</li>
-<li><p>nvram: run nvram_validate() after nvram_reformat()</p>
+<li><p class="first">nvram: run nvram_validate() after nvram_reformat()</p>
<p>nvram_reformat() sets nvram_valid = true, but it does not set
skiboot_part_hdr. Call nvram_validate() instead, which sets
everything up properly.</p>
</li>
-<li><p>dts: Zero struct to avoid using uninitialised value</p></li>
-<li><p>hw/imc: Don’t dereference possible NULL</p></li>
-<li><p>libstb/create-container: munmap() signature file address</p></li>
-<li><p>npu2-opencapi: Fix memory leak</p></li>
-<li><p>npu2: Fix possible NULL dereference</p></li>
-<li><p>occ-sensors: Remove NULL checks after dereference</p></li>
-<li><p>core/ipmi-opal: Add interrupt-parent property for ipmi node on P9 and above.</p>
+<li><p class="first">dts: Zero struct to avoid using uninitialised value</p>
+</li>
+<li><p class="first">hw/imc: Don’t dereference possible NULL</p>
+</li>
+<li><p class="first">libstb/create-container: munmap() signature file address</p>
+</li>
+<li><p class="first">npu2-opencapi: Fix memory leak</p>
+</li>
+<li><p class="first">npu2: Fix possible NULL dereference</p>
+</li>
+<li><p class="first">occ-sensors: Remove NULL checks after dereference</p>
+</li>
+<li><p class="first">core/ipmi-opal: Add interrupt-parent property for ipmi node on P9 and above.</p>
<p>dtc complains below warning with newer 4.2+ kernels.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">dts</span><span class="p">:</span> <span class="ne">Warning</span> <span class="p">(</span><span class="n">interrupts_property</span><span class="p">):</span> <span class="n">Missing</span> <span class="n">interrupt</span><span class="o">-</span><span class="n">parent</span> <span class="k">for</span> <span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">opal</span><span class="o">/</span><span class="n">ipmi</span>
</pre></div>
@@ -675,7 +684,7 @@ and above, which allows ipmi-opal to properly use the OPAL irqchip.</p>
<div class="section" id="other-fixes-and-improvements">
<h2>Other fixes and improvements<a class="headerlink" href="#other-fixes-and-improvements" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>core/cpu: discover stack region size before initialising memory regions</p>
+<li><p class="first">core/cpu: discover stack region size before initialising memory regions</p>
<p>Stack allocation first allocates a memory region sized to hold stacks
for all possible CPUs up to the maximum PIR of the architecture, zeros
the region, then initialises all stacks. Max PIR is 32768 on POWER9,
@@ -683,17 +692,17 @@ which is 512MB for stacks.</p>
<p>The stack region is then shrunk after CPUs are discovered, but this is
a bit of a hack, and it leaves a hole in the memory allocation regions
as it’s done after mem regions are initialised.</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mh">0x000000000000</span><span class="o">.</span><span class="mf">.00002</span><span class="n">fffffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">os</span><span class="o">-</span><span class="n">reserve</span> <span class="o">-</span> <span class="n">OS</span>
-<span class="mh">0x000030000000</span><span class="o">.</span><span class="mf">.0000303</span><span class="n">fffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">code</span> <span class="o">-</span> <span class="n">OPAL</span>
-<span class="mh">0x000030400000</span><span class="o">.</span><span class="mf">.000030</span><span class="n">ffffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">heap</span> <span class="o">-</span> <span class="n">OPAL</span>
-<span class="mh">0x000031000000</span><span class="o">.</span><span class="mf">.000031</span><span class="n">bfffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">data</span> <span class="o">-</span> <span class="n">OPAL</span>
-<span class="mh">0x000031c00000</span><span class="o">.</span><span class="mf">.000031</span><span class="n">c0ffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">stacks</span> <span class="o">-</span> <span class="n">OPAL</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mh">0x000000000000</span><span class="o">..</span><span class="mi">00002</span><span class="n">fffffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">os</span><span class="o">-</span><span class="n">reserve</span> <span class="o">-</span> <span class="n">OS</span>
+<span class="mh">0x000030000000</span><span class="o">..</span><span class="mi">0000303</span><span class="n">fffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">code</span> <span class="o">-</span> <span class="n">OPAL</span>
+<span class="mh">0x000030400000</span><span class="o">..</span><span class="mi">000030</span><span class="n">ffffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">heap</span> <span class="o">-</span> <span class="n">OPAL</span>
+<span class="mh">0x000031000000</span><span class="o">..</span><span class="mi">000031</span><span class="n">bfffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">data</span> <span class="o">-</span> <span class="n">OPAL</span>
+<span class="mh">0x000031c00000</span><span class="o">..</span><span class="mi">000031</span><span class="n">c0ffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">stacks</span> <span class="o">-</span> <span class="n">OPAL</span>
<span class="o">***</span> <span class="n">gap</span> <span class="o">***</span>
-<span class="mh">0x000051c00000</span><span class="o">.</span><span class="mf">.000051</span><span class="n">d01fff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">allocs</span><span class="o">-</span><span class="n">memory</span><span class="o">@</span><span class="mi">0</span> <span class="o">-</span> <span class="n">OPAL</span>
-<span class="mh">0x000051d02000</span><span class="o">.</span><span class="mf">.00007</span><span class="n">fffffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">allocs</span><span class="o">-</span><span class="n">memory</span><span class="o">@</span><span class="mi">0</span> <span class="o">-</span> <span class="n">OS</span>
-<span class="mh">0x000080000000</span><span class="o">.</span><span class="mf">.000080</span><span class="n">b3cdff</span> <span class="p">:</span> <span class="n">initramfs</span> <span class="o">-</span> <span class="n">OPAL</span>
-<span class="mh">0x000080b3ce00</span><span class="o">.</span><span class="mf">.000080</span><span class="n">b7cdff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">fake</span><span class="o">-</span><span class="n">nvram</span> <span class="o">-</span> <span class="n">OPAL</span>
-<span class="mh">0x000080b7ce00</span><span class="o">.</span><span class="mf">.0000</span><span class="n">ffffffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">allocs</span><span class="o">-</span><span class="n">memory</span><span class="o">@</span><span class="mi">0</span> <span class="o">-</span> <span class="n">OS</span>
+<span class="mh">0x000051c00000</span><span class="o">..</span><span class="mi">000051</span><span class="n">d01fff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">allocs</span><span class="o">-</span><span class="n">memory</span><span class="nd">@0</span> <span class="o">-</span> <span class="n">OPAL</span>
+<span class="mh">0x000051d02000</span><span class="o">..</span><span class="mi">00007</span><span class="n">fffffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">allocs</span><span class="o">-</span><span class="n">memory</span><span class="nd">@0</span> <span class="o">-</span> <span class="n">OS</span>
+<span class="mh">0x000080000000</span><span class="o">..</span><span class="mi">000080</span><span class="n">b3cdff</span> <span class="p">:</span> <span class="n">initramfs</span> <span class="o">-</span> <span class="n">OPAL</span>
+<span class="mh">0x000080b3ce00</span><span class="o">..</span><span class="mi">000080</span><span class="n">b7cdff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">fake</span><span class="o">-</span><span class="n">nvram</span> <span class="o">-</span> <span class="n">OPAL</span>
+<span class="mh">0x000080b7ce00</span><span class="o">..</span><span class="mi">0000</span><span class="n">ffffffff</span> <span class="p">:</span> <span class="n">ibm</span><span class="p">,</span><span class="n">firmware</span><span class="o">-</span><span class="n">allocs</span><span class="o">-</span><span class="n">memory</span><span class="nd">@0</span> <span class="o">-</span> <span class="n">OS</span>
</pre></div>
</div>
<p>This change moves zeroing into the per-cpu stack setup. The boot CPU
@@ -703,20 +712,21 @@ device tree, before mem regions are intialised.</p>
<p>This results in all memory being accounted within memory regions,
and less memory fragmentation of OPAL allocations.</p>
</li>
-<li><p>Make gard display show that a record is cleared</p>
+<li><p class="first">Make gard display show that a record is cleared</p>
<p>When clearing gard records, Hostboot only modifies the record_id
portion to be 0xFFFFFFFF. The remainder of the entry remains.
Without this change it can be confusing to users to know that
the record they are looking at is no longer valid.</p>
</li>
-<li><p>Reserve OPAL API number for opal_handle_hmi2 function.</p></li>
-<li><p>dts: spl_wakeup: Remove all workarounds in the spl wakeup logic</p>
+<li><p class="first">Reserve OPAL API number for opal_handle_hmi2 function.</p>
+</li>
+<li><p class="first">dts: spl_wakeup: Remove all workarounds in the spl wakeup logic</p>
<p>We coded few workarounds in special wakeup logic to handle the
buggy firmware. Now that is fixed remove them as they break the
special wakeup protocol. As per the spec we should not de-assert
beofre assert is complete. So follow this protocol.</p>
</li>
-<li><p>build: use thin archives rather than incremental linking</p>
+<li><p class="first">build: use thin archives rather than incremental linking</p>
<p>This changes to build system to use thin archives rather than
incremental linking for built-in.o, similar to recent change to Linux.
built-in.o is renamed to built-in.a, and is created as a thin archive
@@ -730,7 +740,7 @@ time optimisation in toolchains which might be interesting for skiboot
particularly for size reductions.</p>
<p>Size of build tree before this patch is 34.4MB, afterwards 23.1MB.</p>
</li>
-<li><p>core/init: Assert when kernel not found</p>
+<li><p class="first">core/init: Assert when kernel not found</p>
<p>If the kernel doesn’t load out of flash or there is nothing at
KERNEL_LOAD_BASE, we end up with an esoteric message as we try to
branch to out of skiboot into nothing</p>
@@ -755,7 +765,7 @@ branch to out of skiboot into nothing</p>
</pre></div>
</div>
</li>
-<li><p>core: Fix â€opal-runtime-size’ property</p>
+<li><p class="first">core: Fix â€opal-runtime-size’ property</p>
<p>We are populating â€opal-runtime-size’ before calculating actual stack size.
Hence we endup having wrong runtime size (ex: on P9 it shows ~540MB while
actual size is around ~40MB). Note that only device tree property is shows
@@ -763,7 +773,7 @@ wrong value, but reserved-memory reflects correct size.</p>
<p>init_all_cpus() calculates and updates actual stack size. Hence move this
function call before add_opal_node().</p>
</li>
-<li><p>mambo: Add fw-feature flags for security related settings</p>
+<li><p class="first">mambo: Add fw-feature flags for security related settings</p>
<p>Newer firmwares report some feature flags related to security
settings via HDAT. On real hardware skiboot translates these into
device tree properties. For testing purposes just create the
@@ -776,14 +786,15 @@ in src/usr/hdat/hdatiplparms.H.</p>
<p>Also add an environment variable for easily toggling the top-level
“security on” setting.</p>
</li>
-<li><p>direct-controls: mambo fix for multiple chips</p></li>
-<li><p>libflash/blocklevel: Correct miscalculation in blocklevel_smart_erase()</p>
+<li><p class="first">direct-controls: mambo fix for multiple chips</p>
+</li>
+<li><p class="first">libflash/blocklevel: Correct miscalculation in blocklevel_smart_erase()</p>
<p>If blocklevel_smart_erase() detects that the smart erase fits entire in
one erase block, it has an early bail path. In this path it miscaculates
where in the buffer the backend needs to read from to perform the final
write.</p>
</li>
-<li><p>libstb/secureboot: Fix logging of secure verify messages.</p>
+<li><p class="first">libstb/secureboot: Fix logging of secure verify messages.</p>
<p>Currently we are logging secure verify/enforce messages in PR_EMERG
level even when there is no secureboot mode enabled. So reduce the
log level to PR_ERR when secureboot mode is OFF.</p>
@@ -796,16 +807,17 @@ log level to PR_ERR when secureboot mode is OFF.</p>
as easily exporting the area of memory you need to dump to feed to
<cite>extract-gcov</cite>.</p>
<ul>
-<li><p>cpu_idle_job: relax a bit</p>
+<li><p class="first">cpu_idle_job: relax a bit</p>
<p>This <em>dramatically</em> improves kernel boot time with GCOV builds</p>
<p>from ~3minutes between loading kernel and switching the HILE
bit down to around 10 seconds.</p>
</li>
-<li><p>gcov: Another GCC, another gcov tweak</p></li>
-<li><p>Keep constructors with priorities</p>
+<li><p class="first">gcov: Another GCC, another gcov tweak</p>
+</li>
+<li><p class="first">Keep constructors with priorities</p>
<p>Fixes GCOV builds with gcc7, which uses this.</p>
</li>
-<li><p>gcov: Add gcov data struct to sysfs</p>
+<li><p class="first">gcov: Add gcov data struct to sysfs</p>
<p>Extracting the skiboot gcov data is currently a tedious process which
involves taking a mem dump of skiboot and searching for the gcov_info
struct.
@@ -817,7 +829,6 @@ data to be copied directly into userspace and processed.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -858,15 +869,17 @@ data to be copied directly into userspace and processed.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -883,15 +896,14 @@ data to be copied directly into userspace and processed.</p>
<li class="right" >
<a href="skiboot-5.10.6.html" title="skiboot-5.10.6"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.11</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.2.0-rc1.html b/doc/release-notes/skiboot-5.2.0-rc1.html
index f43ab4d..0510d09 100644
--- a/doc/release-notes/skiboot-5.2.0-rc1.html
+++ b/doc/release-notes/skiboot-5.2.0-rc1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.2.0-rc1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.2.0-rc1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.2.0.html" title="skiboot-5.2.0"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.2.0-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -59,41 +60,40 @@ bug fixing for future 5.2.0-rc releases.</p>
<h2>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<p>Over skiboot-5.1, the following features have been added:</p>
<ul class="simple">
-<li><p>Naples (P8’, i.e. P8 with NVLINK) processor support, including NVLINK.</p></li>
-<li><p>Improvements in gard, libflash/pflash and opal-prd utilities</p>
-<ul>
-<li><p>increased testing</p></li>
-<li><p>increased usability</p></li>
-<li><p>systemd scripts for opal-prd</p></li>
-<li><p>pflash can now use the /dev/mtd device to access BMC flash rather than
+<li>Naples (P8’, i.e. P8 with NVLINK) processor support, including NVLINK.</li>
+<li>Improvements in gard, libflash/pflash and opal-prd utilities<ul>
+<li>increased testing</li>
+<li>increased usability</li>
+<li>systemd scripts for opal-prd</li>
+<li>pflash can now use the /dev/mtd device to access BMC flash rather than
accessing it directly. It is <em>important</em> that you use –mtd if your
-BMC may otherwise know how to interact with its own flash.</p></li>
+BMC may otherwise know how to interact with its own flash.</li>
</ul>
</li>
-<li><p>support for Micron N25Q256Ax and N25Qx256Ax NOR flash.</p></li>
-<li><p>support for Winbond W25Q256BV NOR flash</p></li>
-<li><p>support for an emulated (“fake”) RTC clock, useful in simulators
-and during bringup</p></li>
-<li><p>Explicit 1:1 mapping in ranges properties have been added to PCI
+<li>support for Micron N25Q256Ax and N25Qx256Ax NOR flash.</li>
+<li>support for Winbond W25Q256BV NOR flash</li>
+<li>support for an emulated (“fake”) RTC clock, useful in simulators
+and during bringup</li>
+<li>Explicit 1:1 mapping in ranges properties have been added to PCI
bridges. This allows a neat trick with offb and VGA ports that should
-probably not be told to young children.</p></li>
-<li><p>Added support to read the V2 format of the OCC-OPAL memory region,
-which supports Workload Optimized Frequency (WOF)</p></li>
+probably not be told to young children.</li>
+<li>Added support to read the V2 format of the OCC-OPAL memory region,
+which supports Workload Optimized Frequency (WOF)</li>
</ul>
</div>
<div class="section" id="changes-in-behavior">
<h2>Changes in behavior<a class="headerlink" href="#changes-in-behavior" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Assigning OPAL IDs to PHBs is now fixed and based on the chip id and PHB
-index on that chip. On POWER7, we continue to use allocated numbers.</p></li>
-<li><p>We now query the BMC for BT capabilities rather than making assumptions</p></li>
+<li>Assigning OPAL IDs to PHBs is now fixed and based on the chip id and PHB
+index on that chip. On POWER7, we continue to use allocated numbers.</li>
+<li>We now query the BMC for BT capabilities rather than making assumptions</li>
</ul>
</div>
<div class="section" id="removed-support">
<h2>Removed support<a class="headerlink" href="#removed-support" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>p5ioc2 is no longer supported.
-This affects a grand total of two POWER7 systems in the world.</p></li>
+<li>p5ioc2 is no longer supported.
+This affects a grand total of two POWER7 systems in the world.</li>
</ul>
<p><strong>NOTE</strong>: It is planned that skiboot-5.2 will be the last release supporting
POWER7 machines.</p>
@@ -101,36 +101,36 @@ POWER7 machines.</p>
<div class="section" id="bugs-fixed">
<h2>Bugs fixed<a class="headerlink" href="#bugs-fixed" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>PHB3: Fix unexpected ER (all) on errinjct by PCI config</p></li>
-<li><p>hw/bt: timeout messages when BT interface isn’t functional</p></li>
-<li><p>On Habanero, Slot3 should have been “Slot 3”.</p></li>
-<li><p>We now completely flush the console buffer before power down and reboot</p></li>
-<li><p>For chips with ibm,occ-functional-state set to false, we don’t wait
+<li>PHB3: Fix unexpected ER (all) on errinjct by PCI config</li>
+<li>hw/bt: timeout messages when BT interface isn’t functional</li>
+<li>On Habanero, Slot3 should have been “Slot 3”.</li>
+<li>We now completely flush the console buffer before power down and reboot</li>
+<li>For chips with ibm,occ-functional-state set to false, we don’t wait
for the OCC to start. This caused needless delay in booting on simulators
-which did not simulate OCCs.</p></li>
-<li><p>Change OCC reset order to always reset slave OCCs first.</p></li>
-<li><p>slw: Remove overwrites for EX_PM_CORE_ECO_VRET and EX_PM_CORE_PFET_VRET
-(these were already initialized in hostboot)</p></li>
-<li><p>p8-i2c: send stop bit on timeouts.
-Some devices can otherwise leave the bus in a held state.</p></li>
+which did not simulate OCCs.</li>
+<li>Change OCC reset order to always reset slave OCCs first.</li>
+<li>slw: Remove overwrites for EX_PM_CORE_ECO_VRET and EX_PM_CORE_PFET_VRET
+(these were already initialized in hostboot)</li>
+<li>p8-i2c: send stop bit on timeouts.
+Some devices can otherwise leave the bus in a held state.</li>
</ul>
</div>
<div class="section" id="other-improvements">
<h2>Other improvements<a class="headerlink" href="#other-improvements" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>many fixes of compiler and static analysis warnings</p></li>
-<li><p>increased unit test coverage</p></li>
-<li><p>Unit test of “boot debian jessie installer”</p></li>
-<li><p>ability to plug in other simulators to run existing tests (e.g. simulator for
-non pegasus p8)</p></li>
-<li><p>Support using (patched) Qemu with PowerNV platform support for running
-unit tests.</p></li>
-<li><p>increased support for running with sparse</p></li>
-<li><p>We now build with -fstack-protector-strong if supported by the compiler</p></li>
-<li><p>We now build with -Werror for -Wformat</p></li>
-<li><p>pflash is now built as part of travis-ci and for Coverity Scan.</p></li>
-<li><p>There is now a RPM SPEC file that can be used as the basis for packaging
-skiboot and associated utilities.</p></li>
+<li>many fixes of compiler and static analysis warnings</li>
+<li>increased unit test coverage</li>
+<li>Unit test of “boot debian jessie installer”</li>
+<li>ability to plug in other simulators to run existing tests (e.g. simulator for
+non pegasus p8)</li>
+<li>Support using (patched) Qemu with PowerNV platform support for running
+unit tests.</li>
+<li>increased support for running with sparse</li>
+<li>We now build with -fstack-protector-strong if supported by the compiler</li>
+<li>We now build with -Werror for -Wformat</li>
+<li>pflash is now built as part of travis-ci and for Coverity Scan.</li>
+<li>There is now a RPM SPEC file that can be used as the basis for packaging
+skiboot and associated utilities.</li>
</ul>
<div class="section" id="contributors">
<h3>Contributors<a class="headerlink" href="#contributors" title="Permalink to this headline">¶</a></h3>
@@ -140,45 +140,45 @@ back, we have roughly the same number of changesets (372 for 5.1.0, 334 for
rate of development.</p>
<p>Complete statistics are included below (generated by gitdm), but I’d like to
draw attention to a couple of stats:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 19%" />
-<col style="width: 14%" />
-<col style="width: 17%" />
-<col style="width: 17%" />
-<col style="width: 14%" />
-<col style="width: 19%" />
+<col width="19%" />
+<col width="14%" />
+<col width="17%" />
+<col width="17%" />
+<col width="14%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Release</p></th>
-<th class="head"><p>csets</p></th>
-<th class="head"><p>Ack</p></th>
-<th class="head"><p>Reviews</p></th>
-<th class="head"><p>Tested</p></th>
-<th class="head"><p>Reported</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Release</th>
+<th class="head">csets</th>
+<th class="head">Ack</th>
+<th class="head">Reviews</th>
+<th class="head">Tested</th>
+<th class="head">Reported</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>5.0</p></td>
-<td><p>329</p></td>
-<td><p>15</p></td>
-<td><p>20</p></td>
-<td><p>1</p></td>
-<td><p>0</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.1</p></td>
-<td><p>372</p></td>
-<td><p>13</p></td>
-<td><p>38</p></td>
-<td><p>1</p></td>
-<td><p>4</p></td>
-</tr>
-<tr class="row-even"><td><p>5.2-rc1</p></td>
-<td><p>334</p></td>
-<td><p>20</p></td>
-<td><p>34</p></td>
-<td><p>6</p></td>
-<td><p>11</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>5.0</td>
+<td>329</td>
+<td>15</td>
+<td>20</td>
+<td>1</td>
+<td>0</td>
+</tr>
+<tr class="row-odd"><td>5.1</td>
+<td>372</td>
+<td>13</td>
+<td>38</td>
+<td>1</td>
+<td>4</td>
+</tr>
+<tr class="row-even"><td>5.2-rc1</td>
+<td>334</td>
+<td>20</td>
+<td>34</td>
+<td>6</td>
+<td>11</td>
</tr>
</tbody>
</table>
@@ -191,401 +191,401 @@ existing test teams to start commenting on the patches themselves.</p>
2 employers found
A total of 46172 lines added, 23274 removed (delta 22898)</p>
<p>Developers with the most changesets</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 70%" />
-<col style="width: 30%" />
+<col width="70%" />
+<col width="30%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>146 (43.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>146 (43.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>52 (15.6%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>52 (15.6%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>15 (4.5%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>15 (4.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>12 (3.6%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>12 (3.6%)</td>
</tr>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>12 (3.6%)</p></td>
+<tr class="row-even"><td>Gavin Shan</td>
+<td>12 (3.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>10 (3.0%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>10 (3.0%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>10 (3.0%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>10 (3.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>10 (3.0%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>10 (3.0%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>9 (2.7%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>9 (2.7%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>8 (2.4%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>8 (2.4%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>8 (2.4%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>8 (2.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>6 (1.8%)</p></td>
+<tr class="row-odd"><td>Samuel Mendoza-Jonas</td>
+<td>6 (1.8%)</td>
</tr>
-<tr class="row-even"><td><p>Neelesh Gupta</p></td>
-<td><p>6 (1.8%)</p></td>
+<tr class="row-even"><td>Neelesh Gupta</td>
+<td>6 (1.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Shilpasri G Bhat</p></td>
-<td><p>4 (1.2%)</p></td>
+<tr class="row-odd"><td>Shilpasri G Bhat</td>
+<td>4 (1.2%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>4 (1.2%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>4 (1.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>4 (1.2%)</p></td>
+<tr class="row-odd"><td>Mahesh Salgaonkar</td>
+<td>4 (1.2%)</td>
</tr>
-<tr class="row-even"><td><p>Vipin K Parashar</p></td>
-<td><p>3 (0.9%)</p></td>
+<tr class="row-even"><td>Vipin K Parashar</td>
+<td>3 (0.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Daniel Axtens</p></td>
-<td><p>3 (0.9%)</p></td>
+<tr class="row-odd"><td>Daniel Axtens</td>
+<td>3 (0.9%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>2 (0.6%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>2 (0.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Philippe Bergheaud</p></td>
-<td><p>2 (0.6%)</p></td>
+<tr class="row-odd"><td>Philippe Bergheaud</td>
+<td>2 (0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>2 (0.6%)</p></td>
+<tr class="row-even"><td>Ananth N Mavinakayanahalli</td>
+<td>2 (0.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaibhav Jain</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Vaibhav Jain</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Sam Mendoza-Jonas</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Sam Mendoza-Jonas</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Adriana Kobylak</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Adriana Kobylak</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Shreyas B. Prabhu</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Shreyas B. Prabhu</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Vaidyanathan Srinivasan</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Ian Munsie</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Ian Munsie</td>
+<td>1 (0.3%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most changed lines</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 67%" />
-<col style="width: 33%" />
+<col width="67%" />
+<col width="33%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>19533 (39.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>19533 (39.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>17920 (36.1%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>17920 (36.1%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>3285 (6.6%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>3285 (6.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Daniel Axtens</p></td>
-<td><p>2154 (4.3%)</p></td>
+<tr class="row-odd"><td>Daniel Axtens</td>
+<td>2154 (4.3%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>2028 (4.1%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>2028 (4.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>941 (1.9%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>941 (1.9%)</td>
</tr>
-<tr class="row-even"><td><p>Neelesh Gupta</p></td>
-<td><p>434 (0.9%)</p></td>
+<tr class="row-even"><td>Neelesh Gupta</td>
+<td>434 (0.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>294 (0.6%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>294 (0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>261 (0.5%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>261 (0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Vasant Hegde</p></td>
-<td><p>245 (0.5%)</p></td>
+<tr class="row-odd"><td>Vasant Hegde</td>
+<td>245 (0.5%)</td>
</tr>
-<tr class="row-even"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>209 (0.4%)</p></td>
+<tr class="row-even"><td>CĂ©dric Le Goater</td>
+<td>209 (0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Vipin K Parashar</p></td>
-<td><p>155 (0.3%)</p></td>
+<tr class="row-odd"><td>Vipin K Parashar</td>
+<td>155 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>153 (0.3%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>153 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>140 (0.3%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>140 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>135 (0.3%)</p></td>
+<tr class="row-even"><td>Vaidyanathan Srinivasan</td>
+<td>135 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>111 (0.2%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>111 (0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>81 (0.2%)</p></td>
+<tr class="row-even"><td>Samuel Mendoza-Jonas</td>
+<td>81 (0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Jeremy Kerr</p></td>
-<td><p>60 (0.1%)</p></td>
+<tr class="row-odd"><td>Jeremy Kerr</td>
+<td>60 (0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>58 (0.1%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>58 (0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaibhav Jain</p></td>
-<td><p>50 (0.1%)</p></td>
+<tr class="row-odd"><td>Vaibhav Jain</td>
+<td>50 (0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>43 (0.1%)</p></td>
+<tr class="row-even"><td>Ananth N Mavinakayanahalli</td>
+<td>43 (0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Shreyas B. Prabhu</p></td>
-<td><p>17 (0.0%)</p></td>
+<tr class="row-odd"><td>Shreyas B. Prabhu</td>
+<td>17 (0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Sam Mendoza-Jonas</p></td>
-<td><p>12 (0.0%)</p></td>
+<tr class="row-even"><td>Sam Mendoza-Jonas</td>
+<td>12 (0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>10 (0.0%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>10 (0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Ian Munsie</p></td>
-<td><p>8 (0.0%)</p></td>
+<tr class="row-even"><td>Ian Munsie</td>
+<td>8 (0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Philippe Bergheaud</p></td>
-<td><p>6 (0.0%)</p></td>
+<tr class="row-odd"><td>Philippe Bergheaud</td>
+<td>6 (0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Adriana Kobylak</p></td>
-<td><p>6 (0.0%)</p></td>
+<tr class="row-even"><td>Adriana Kobylak</td>
+<td>6 (0.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most lines removed</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 66%" />
-<col style="width: 34%" />
+<col width="66%" />
+<col width="34%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Daniel Axtens</p></td>
-<td><p>2149 (9.2%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Daniel Axtens</td>
+<td>2149 (9.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Shreyas B. Prabhu</p></td>
-<td><p>17 (0.1%)</p></td>
+<tr class="row-odd"><td>Shreyas B. Prabhu</td>
+<td>17 (0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>9 (0.0%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>9 (0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Vipin K Parashar</p></td>
-<td><p>2 (0.0%)</p></td>
+<tr class="row-odd"><td>Vipin K Parashar</td>
+<td>2 (0.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most signoffs (total 190)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 66%" />
-<col style="width: 34%" />
+<col width="66%" />
+<col width="34%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>188 (98.9%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>188 (98.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>1 (0.5%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>1 (0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Neelesh Gupta</p></td>
-<td><p>1 (0.5%)</p></td>
+<tr class="row-even"><td>Neelesh Gupta</td>
+<td>1 (0.5%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most reviews (total 34)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 66%" />
-<col style="width: 34%" />
+<col width="66%" />
+<col width="34%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Patrick Williams</p></td>
-<td><p>5 (14.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Patrick Williams</td>
+<td>5 (14.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>5 (14.7%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>5 (14.7%)</td>
</tr>
-<tr class="row-even"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>5 (14.7%)</p></td>
+<tr class="row-even"><td>CĂ©dric Le Goater</td>
+<td>5 (14.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Vasant Hegde</p></td>
-<td><p>4 (11.8%)</p></td>
+<tr class="row-odd"><td>Vasant Hegde</td>
+<td>4 (11.8%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>4 (11.8%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>4 (11.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Sam Mendoza-Jonas</p></td>
-<td><p>3 (8.8%)</p></td>
+<tr class="row-odd"><td>Sam Mendoza-Jonas</td>
+<td>3 (8.8%)</td>
</tr>
-<tr class="row-even"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>3 (8.8%)</p></td>
+<tr class="row-even"><td>Samuel Mendoza-Jonas</td>
+<td>3 (8.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>2 (5.9%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>2 (5.9%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>2 (5.9%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>2 (5.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaibhav Jain</p></td>
-<td><p>1 (2.9%)</p></td>
+<tr class="row-odd"><td>Vaibhav Jain</td>
+<td>1 (2.9%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most test credits (total 6)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 66%" />
-<col style="width: 34%" />
+<col width="66%" />
+<col width="34%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Vipin K Parashar</p></td>
-<td><p>3 (50.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Vipin K Parashar</td>
+<td>3 (50.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaibhav Jain</p></td>
-<td><p>2 (33.3%)</p></td>
+<tr class="row-odd"><td>Vaibhav Jain</td>
+<td>2 (33.3%)</td>
</tr>
-<tr class="row-even"><td><p>Gajendra B Bandhu1</p></td>
-<td><p>1 (16.7%)</p></td>
+<tr class="row-even"><td>Gajendra B Bandhu1</td>
+<td>1 (16.7%)</td>
</tr>
</tbody>
</table>
<p>Developers who gave the most tested-by credits (total 6)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 33%" />
+<col width="68%" />
+<col width="33%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>2 (33.3%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Gavin Shan</td>
+<td>2 (33.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>2 (33.3%)</p></td>
+<tr class="row-odd"><td>Ananth N Mavinakayanahalli</td>
+<td>2 (33.3%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>1 (16.7%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>1 (16.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>1 (16.7%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>1 (16.7%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most report credits (total 11)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 66%" />
-<col style="width: 34%" />
+<col width="66%" />
+<col width="34%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Vaibhav Jain</p></td>
-<td><p>2 (18.2%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Vaibhav Jain</td>
+<td>2 (18.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Paul Nguyen</p></td>
-<td><p>2 (18.2%)</p></td>
+<tr class="row-odd"><td>Paul Nguyen</td>
+<td>2 (18.2%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>1 (9.1%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>1 (9.1%)</td>
</tr>
-<tr class="row-even"><td><p>Aneesh Kumar K.V</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-even"><td>Aneesh Kumar K.V</td>
+<td>1 (9.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Dionysius d. Bell</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-odd"><td>Dionysius d. Bell</td>
+<td>1 (9.1%)</td>
</tr>
-<tr class="row-even"><td><p>Pradeep Ramanna</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-even"><td>Pradeep Ramanna</td>
+<td>1 (9.1%)</td>
</tr>
-<tr class="row-odd"><td><p>John Walthour</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-odd"><td>John Walthour</td>
+<td>1 (9.1%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>1 (9.1%)</td>
</tr>
</tbody>
</table>
<p>Developers who gave the most report credits (total 11)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 66%" />
-<col style="width: 34%" />
+<col width="66%" />
+<col width="34%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>6 (54.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Gavin Shan</td>
+<td>6 (54.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>3 (27.3%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>3 (27.3%)</td>
</tr>
-<tr class="row-even"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-even"><td>Samuel Mendoza-Jonas</td>
+<td>1 (9.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Shilpasri G Bhat</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-odd"><td>Shilpasri G Bhat</td>
+<td>1 (9.1%)</td>
</tr>
</tbody>
</table>
@@ -594,7 +594,6 @@ A total of 46172 lines added, 23274 removed (delta 22898)</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -629,15 +628,17 @@ A total of 46172 lines added, 23274 removed (delta 22898)</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -654,15 +655,14 @@ A total of 46172 lines added, 23274 removed (delta 22898)</p>
<li class="right" >
<a href="skiboot-5.2.0.html" title="skiboot-5.2.0"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.2.0-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.2.0-rc2.html b/doc/release-notes/skiboot-5.2.0-rc2.html
index d3787e0..b577b0a 100644
--- a/doc/release-notes/skiboot-5.2.0-rc2.html
+++ b/doc/release-notes/skiboot-5.2.0-rc2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.2.0-rc2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.2.0-rc2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.2.0-rc1.html" title="skiboot-5.2.0-rc1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.2.0-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -59,36 +60,35 @@ bug fixing for future 5.2.0-rc releases (if any - I hope this will be the last)<
<div class="section" id="new-platform">
<h2>New platform!<a class="headerlink" href="#new-platform" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Add Barreleye platform</p></li>
+<li>Add Barreleye platform</li>
</ul>
</div>
<div class="section" id="generic">
<h2>Generic<a class="headerlink" href="#generic" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>hw/p8-i2c: Speed up SMBUS_WRITE</p></li>
-<li><p>Fix early backtraces</p></li>
+<li>hw/p8-i2c: Speed up SMBUS_WRITE</li>
+<li>Fix early backtraces</li>
</ul>
</div>
<div class="section" id="fsp-platforms">
<h2>FSP Platforms<a class="headerlink" href="#fsp-platforms" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>fsp-sensor: rework device tree for sensors</p></li>
-<li><p>platforms/firenze: Fix I2C clock source frequency</p></li>
+<li>fsp-sensor: rework device tree for sensors</li>
+<li>platforms/firenze: Fix I2C clock source frequency</li>
</ul>
</div>
<div class="section" id="simics-simulator">
<h2>Simics simulator<a class="headerlink" href="#simics-simulator" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Enable Simics UART console</p></li>
+<li>Enable Simics UART console</li>
</ul>
</div>
<div class="section" id="mambo-simulator">
<h2>Mambo simulator<a class="headerlink" href="#mambo-simulator" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>platforms/mambo: Add terminate callback</p>
-<ul>
-<li><p>fix hang in multi-threaded mambo</p></li>
-<li><p>add multithreaded mambo tests</p></li>
+<li>platforms/mambo: Add terminate callback<ul>
+<li>fix hang in multi-threaded mambo</li>
+<li>add multithreaded mambo tests</li>
</ul>
</li>
</ul>
@@ -96,23 +96,23 @@ bug fixing for future 5.2.0-rc releases (if any - I hope this will be the last)<
<div class="section" id="ipmi">
<h2>IPMI<a class="headerlink" href="#ipmi" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>hw/ipmi: fix event data 1 for System Firmware Progress sensor</p></li>
-<li><p>ipmi: Log exact NetFn value in OPAL logs</p></li>
+<li>hw/ipmi: fix event data 1 for System Firmware Progress sensor</li>
+<li>ipmi: Log exact NetFn value in OPAL logs</li>
</ul>
</div>
<div class="section" id="ast-bmc-based-platforms">
<h2>AST BMC based platforms<a class="headerlink" href="#ast-bmc-based-platforms" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>hw/bt: allow BT driver to use different buffer size</p></li>
+<li>hw/bt: allow BT driver to use different buffer size</li>
</ul>
</div>
<div class="section" id="opal-prd-utility">
<h2>opal-prd utility<a class="headerlink" href="#opal-prd-utility" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><dl class="simple">
-<dt>opal-prd: Add debug output for firmware-driven OCC events</dt><dd><p>We indicate when we have a user-driven event, so add corresponding
-outputs for firmware-driven ones too.</p>
-</dd>
+<li><dl class="first docutils">
+<dt>opal-prd: Add debug output for firmware-driven OCC events</dt>
+<dd>We indicate when we have a user-driven event, so add corresponding
+outputs for firmware-driven ones too.</dd>
</dl>
</li>
</ul>
@@ -120,13 +120,12 @@ outputs for firmware-driven ones too.</p>
<div class="section" id="getscom-utility">
<h2>getscom utility<a class="headerlink" href="#getscom-utility" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Add Naples chip support</p></li>
+<li>Add Naples chip support</li>
</ul>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -162,15 +161,17 @@ outputs for firmware-driven ones too.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -187,15 +188,14 @@ outputs for firmware-driven ones too.</p>
<li class="right" >
<a href="skiboot-5.2.0-rc1.html" title="skiboot-5.2.0-rc1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.2.0-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.2.0.html b/doc/release-notes/skiboot-5.2.0.html
index 4b20960..566ec93 100644
--- a/doc/release-notes/skiboot-5.2.0.html
+++ b/doc/release-notes/skiboot-5.2.0.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.2.0 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.2.0 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.11-rc1.html" title="skiboot-5.11-rc1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.2.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -57,46 +58,45 @@ stable rules - see <a class="reference internal" href="../process/stable-skiboot
<h2>Changes since rc2<a class="headerlink" href="#changes-since-rc2" title="Permalink to this headline">¶</a></h2>
<p>Over skiboot-5.2.0-rc2, the following fixes are included:</p>
<ul class="simple">
-<li><p>Include â€extract-gcov’ in make clean.</p></li>
-<li><p>ipmi-sel: Fix esel event logger to handle early boot PANIC events</p></li>
-<li><p>IPMI: Enable synchronous eSEL logging option (for PANIC events)</p></li>
-<li><p>libflash/libffs: Reporting seeing all 0xFF bytes during init.</p></li>
-<li><p>ipmi-sel: Fix memory leak in error path</p></li>
+<li>Include â€extract-gcov’ in make clean.</li>
+<li>ipmi-sel: Fix esel event logger to handle early boot PANIC events</li>
+<li>IPMI: Enable synchronous eSEL logging option (for PANIC events)</li>
+<li>libflash/libffs: Reporting seeing all 0xFF bytes during init.</li>
+<li>ipmi-sel: Fix memory leak in error path</li>
</ul>
</div>
<div class="section" id="changes-since-rc1">
<h2>Changes since rc1<a class="headerlink" href="#changes-since-rc1" title="Permalink to this headline">¶</a></h2>
<p>Over skiboot-5.2.0-rc1, we have the following changes:</p>
<ul class="simple">
-<li><p>Add Barreleye platform</p></li>
+<li>Add Barreleye platform</li>
</ul>
<div class="section" id="generic">
<h3>Generic<a class="headerlink" href="#generic" title="Permalink to this headline">¶</a></h3>
<ul class="simple">
-<li><p>hw/p8-i2c: Speed up SMBUS_WRITE</p></li>
-<li><p>Fix early backtraces</p></li>
+<li>hw/p8-i2c: Speed up SMBUS_WRITE</li>
+<li>Fix early backtraces</li>
</ul>
</div>
<div class="section" id="fsp-platforms">
<h3>FSP Platforms<a class="headerlink" href="#fsp-platforms" title="Permalink to this headline">¶</a></h3>
<ul class="simple">
-<li><p>fsp-sensor: rework device tree for sensors</p></li>
-<li><p>platforms/firenze: Fix I2C clock source frequency</p></li>
+<li>fsp-sensor: rework device tree for sensors</li>
+<li>platforms/firenze: Fix I2C clock source frequency</li>
</ul>
</div>
<div class="section" id="simics-simulator">
<h3>Simics simulator<a class="headerlink" href="#simics-simulator" title="Permalink to this headline">¶</a></h3>
<ul class="simple">
-<li><p>Enable Simics UART console</p></li>
+<li>Enable Simics UART console</li>
</ul>
</div>
<div class="section" id="mambo-simulator">
<h3>Mambo simulator<a class="headerlink" href="#mambo-simulator" title="Permalink to this headline">¶</a></h3>
<ul class="simple">
-<li><p>platforms/mambo: Add terminate callback</p>
-<ul>
-<li><p>fix hang in multi-threaded mambo</p></li>
-<li><p>add multithreaded mambo tests</p></li>
+<li>platforms/mambo: Add terminate callback<ul>
+<li>fix hang in multi-threaded mambo</li>
+<li>add multithreaded mambo tests</li>
</ul>
</li>
</ul>
@@ -104,23 +104,23 @@ stable rules - see <a class="reference internal" href="../process/stable-skiboot
<div class="section" id="ipmi">
<h3>IPMI<a class="headerlink" href="#ipmi" title="Permalink to this headline">¶</a></h3>
<ul class="simple">
-<li><p>hw/ipmi: fix event data 1 for System Firmware Progress sensor</p></li>
-<li><p>ipmi: Log exact NetFn value in OPAL logs</p></li>
+<li>hw/ipmi: fix event data 1 for System Firmware Progress sensor</li>
+<li>ipmi: Log exact NetFn value in OPAL logs</li>
</ul>
</div>
<div class="section" id="ast-bmc-based-platforms">
<h3>AST BMC based platforms<a class="headerlink" href="#ast-bmc-based-platforms" title="Permalink to this headline">¶</a></h3>
<ul class="simple">
-<li><p>hw/bt: allow BT driver to use different buffer size</p></li>
+<li>hw/bt: allow BT driver to use different buffer size</li>
</ul>
</div>
<div class="section" id="opal-prd-utility">
<h3>opal-prd utility<a class="headerlink" href="#opal-prd-utility" title="Permalink to this headline">¶</a></h3>
<ul class="simple">
-<li><dl class="simple">
-<dt>opal-prd: Add debug output for firmware-driven OCC events</dt><dd><p>We indicate when we have a user-driven event, so add corresponding
-outputs for firmware-driven ones too.</p>
-</dd>
+<li><dl class="first docutils">
+<dt>opal-prd: Add debug output for firmware-driven OCC events</dt>
+<dd>We indicate when we have a user-driven event, so add corresponding
+outputs for firmware-driven ones too.</dd>
</dl>
</li>
</ul>
@@ -128,48 +128,47 @@ outputs for firmware-driven ones too.</p>
<div class="section" id="getscom-utility">
<h3>getscom utility<a class="headerlink" href="#getscom-utility" title="Permalink to this headline">¶</a></h3>
<ul class="simple">
-<li><p>Add Naples chip support</p></li>
+<li>Add Naples chip support</li>
</ul>
</div>
<div class="section" id="new-features">
<h3>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h3>
<p>Over skiboot-5.1, the following features have been added:</p>
<ul class="simple">
-<li><p>Naples (P8’, i.e. P8 with NVLINK) processor support, including NVLINK.</p></li>
-<li><p>Improvements in gard, libflash/pflash and opal-prd utilities</p>
-<ul>
-<li><p>increased testing</p></li>
-<li><p>increased usability</p></li>
-<li><p>systemd scripts for opal-prd</p></li>
-<li><p>pflash can now use the /dev/mtd device to access BMC flash rather than
+<li>Naples (P8’, i.e. P8 with NVLINK) processor support, including NVLINK.</li>
+<li>Improvements in gard, libflash/pflash and opal-prd utilities<ul>
+<li>increased testing</li>
+<li>increased usability</li>
+<li>systemd scripts for opal-prd</li>
+<li>pflash can now use the /dev/mtd device to access BMC flash rather than
accessing it directly. It is <em>important</em> that you use –mtd if your
-BMC may otherwise know how to interact with its own flash.</p></li>
+BMC may otherwise know how to interact with its own flash.</li>
</ul>
</li>
-<li><p>support for Micron N25Q256Ax and N25Qx256Ax NOR flash.</p></li>
-<li><p>support for Winbond W25Q256BV NOR flash</p></li>
-<li><p>support for an emulated (“fake”) RTC clock, useful in simulators
-and during bringup</p></li>
-<li><p>Explicit 1:1 mapping in ranges properties have been added to PCI
+<li>support for Micron N25Q256Ax and N25Qx256Ax NOR flash.</li>
+<li>support for Winbond W25Q256BV NOR flash</li>
+<li>support for an emulated (“fake”) RTC clock, useful in simulators
+and during bringup</li>
+<li>Explicit 1:1 mapping in ranges properties have been added to PCI
bridges. This allows a neat trick with offb and VGA ports that should
-probably not be told to young children.</p></li>
-<li><p>Added support to read the V2 format of the OCC-OPAL memory region,
-which supports Workload Optimized Frequency (WOF)</p></li>
+probably not be told to young children.</li>
+<li>Added support to read the V2 format of the OCC-OPAL memory region,
+which supports Workload Optimized Frequency (WOF)</li>
</ul>
</div>
<div class="section" id="changes-in-behavior">
<h3>Changes in behavior<a class="headerlink" href="#changes-in-behavior" title="Permalink to this headline">¶</a></h3>
<ul class="simple">
-<li><p>Assigning OPAL IDs to PHBs is now fixed and based on the chip id and PHB
-index on that chip. On POWER7, we continue to use allocated numbers.</p></li>
-<li><p>We now query the BMC for BT capabilities rather than making assumptions</p></li>
+<li>Assigning OPAL IDs to PHBs is now fixed and based on the chip id and PHB
+index on that chip. On POWER7, we continue to use allocated numbers.</li>
+<li>We now query the BMC for BT capabilities rather than making assumptions</li>
</ul>
</div>
<div class="section" id="removed-support">
<h3>Removed support<a class="headerlink" href="#removed-support" title="Permalink to this headline">¶</a></h3>
<ul class="simple">
-<li><p>p5ioc2 is no longer supported.
-This affects a grand total of two POWER7 systems in the world.</p></li>
+<li>p5ioc2 is no longer supported.
+This affects a grand total of two POWER7 systems in the world.</li>
</ul>
<p><strong>NOTE</strong>: It is planned that skiboot-5.2 will be the last release supporting
POWER7 machines.</p>
@@ -177,36 +176,36 @@ POWER7 machines.</p>
<div class="section" id="bugs-fixed">
<h3>Bugs fixed<a class="headerlink" href="#bugs-fixed" title="Permalink to this headline">¶</a></h3>
<ul class="simple">
-<li><p>PHB3: Fix unexpected ER (all) on errinjct by PCI config</p></li>
-<li><p>hw/bt: timeout messages when BT interface isn’t functional</p></li>
-<li><p>On Habanero, Slot3 should have been “Slot 3”.</p></li>
-<li><p>We now completely flush the console buffer before power down and reboot</p></li>
-<li><p>For chips with ibm,occ-functional-state set to false, we don’t wait
+<li>PHB3: Fix unexpected ER (all) on errinjct by PCI config</li>
+<li>hw/bt: timeout messages when BT interface isn’t functional</li>
+<li>On Habanero, Slot3 should have been “Slot 3”.</li>
+<li>We now completely flush the console buffer before power down and reboot</li>
+<li>For chips with ibm,occ-functional-state set to false, we don’t wait
for the OCC to start. This caused needless delay in booting on simulators
-which did not simulate OCCs.</p></li>
-<li><p>Change OCC reset order to always reset slave OCCs first.</p></li>
-<li><p>slw: Remove overwrites for EX_PM_CORE_ECO_VRET and EX_PM_CORE_PFET_VRET
-(these were already initialized in hostboot)</p></li>
-<li><p>p8-i2c: send stop bit on timeouts.
-Some devices can otherwise leave the bus in a held state.</p></li>
+which did not simulate OCCs.</li>
+<li>Change OCC reset order to always reset slave OCCs first.</li>
+<li>slw: Remove overwrites for EX_PM_CORE_ECO_VRET and EX_PM_CORE_PFET_VRET
+(these were already initialized in hostboot)</li>
+<li>p8-i2c: send stop bit on timeouts.
+Some devices can otherwise leave the bus in a held state.</li>
</ul>
</div>
<div class="section" id="other-improvements">
<h3>Other improvements<a class="headerlink" href="#other-improvements" title="Permalink to this headline">¶</a></h3>
<ul class="simple">
-<li><p>many fixes of compiler and static analysis warnings</p></li>
-<li><p>increased unit test coverage</p></li>
-<li><p>Unit test of “boot debian jessie installer”</p></li>
-<li><p>ability to plug in other simulators to run existing tests (e.g. simulator for
-non pegasus p8)</p></li>
-<li><p>Support using (patched) Qemu with PowerNV platform support for running
-unit tests.</p></li>
-<li><p>increased support for running with sparse</p></li>
-<li><p>We now build with -fstack-protector-strong if supported by the compiler</p></li>
-<li><p>We now build with -Werror for -Wformat</p></li>
-<li><p>pflash is now built as part of travis-ci and for Coverity Scan.</p></li>
-<li><p>There is now a RPM SPEC file that can be used as the basis for packaging
-skiboot and associated utilities.</p></li>
+<li>many fixes of compiler and static analysis warnings</li>
+<li>increased unit test coverage</li>
+<li>Unit test of “boot debian jessie installer”</li>
+<li>ability to plug in other simulators to run existing tests (e.g. simulator for
+non pegasus p8)</li>
+<li>Support using (patched) Qemu with PowerNV platform support for running
+unit tests.</li>
+<li>increased support for running with sparse</li>
+<li>We now build with -fstack-protector-strong if supported by the compiler</li>
+<li>We now build with -Werror for -Wformat</li>
+<li>pflash is now built as part of travis-ci and for Coverity Scan.</li>
+<li>There is now a RPM SPEC file that can be used as the basis for packaging
+skiboot and associated utilities.</li>
</ul>
</div>
</div>
@@ -218,45 +217,45 @@ back, we have roughly the same number of changesets (372 for 5.1.0, 334 for
rate of development.</p>
<p>Complete statistics are included below (generated by gitdm), but I’d like to
draw attention to a couple of stats:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 19%" />
-<col style="width: 14%" />
-<col style="width: 17%" />
-<col style="width: 17%" />
-<col style="width: 14%" />
-<col style="width: 19%" />
+<col width="19%" />
+<col width="14%" />
+<col width="17%" />
+<col width="17%" />
+<col width="14%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Release</p></th>
-<th class="head"><p>csets</p></th>
-<th class="head"><p>Ack</p></th>
-<th class="head"><p>Reviews</p></th>
-<th class="head"><p>Tested</p></th>
-<th class="head"><p>Reported</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Release</th>
+<th class="head">csets</th>
+<th class="head">Ack</th>
+<th class="head">Reviews</th>
+<th class="head">Tested</th>
+<th class="head">Reported</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>5.0</p></td>
-<td><p>329</p></td>
-<td><p>15</p></td>
-<td><p>20</p></td>
-<td><p>1</p></td>
-<td><p>0</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.1</p></td>
-<td><p>372</p></td>
-<td><p>13</p></td>
-<td><p>38</p></td>
-<td><p>1</p></td>
-<td><p>4</p></td>
-</tr>
-<tr class="row-even"><td><p>5.2-rc1</p></td>
-<td><p>334</p></td>
-<td><p>20</p></td>
-<td><p>34</p></td>
-<td><p>6</p></td>
-<td><p>11</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>5.0</td>
+<td>329</td>
+<td>15</td>
+<td>20</td>
+<td>1</td>
+<td>0</td>
+</tr>
+<tr class="row-odd"><td>5.1</td>
+<td>372</td>
+<td>13</td>
+<td>38</td>
+<td>1</td>
+<td>4</td>
+</tr>
+<tr class="row-even"><td>5.2-rc1</td>
+<td>334</td>
+<td>20</td>
+<td>34</td>
+<td>6</td>
+<td>11</td>
</tr>
</tbody>
</table>
@@ -269,401 +268,401 @@ existing test teams to start commenting on the patches themselves.</p>
2 employers found
A total of 46172 lines added, 23274 removed (delta 22898)</p>
<p>Developers with the most changesets</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 70%" />
-<col style="width: 30%" />
+<col width="70%" />
+<col width="30%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>146 (43.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>146 (43.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>52 (15.6%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>52 (15.6%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>15 (4.5%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>15 (4.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>12 (3.6%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>12 (3.6%)</td>
</tr>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>12 (3.6%)</p></td>
+<tr class="row-even"><td>Gavin Shan</td>
+<td>12 (3.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>10 (3.0%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>10 (3.0%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>10 (3.0%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>10 (3.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>10 (3.0%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>10 (3.0%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>9 (2.7%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>9 (2.7%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>8 (2.4%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>8 (2.4%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>8 (2.4%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>8 (2.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>6 (1.8%)</p></td>
+<tr class="row-odd"><td>Samuel Mendoza-Jonas</td>
+<td>6 (1.8%)</td>
</tr>
-<tr class="row-even"><td><p>Neelesh Gupta</p></td>
-<td><p>6 (1.8%)</p></td>
+<tr class="row-even"><td>Neelesh Gupta</td>
+<td>6 (1.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Shilpasri G Bhat</p></td>
-<td><p>4 (1.2%)</p></td>
+<tr class="row-odd"><td>Shilpasri G Bhat</td>
+<td>4 (1.2%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>4 (1.2%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>4 (1.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>4 (1.2%)</p></td>
+<tr class="row-odd"><td>Mahesh Salgaonkar</td>
+<td>4 (1.2%)</td>
</tr>
-<tr class="row-even"><td><p>Vipin K Parashar</p></td>
-<td><p>3 (0.9%)</p></td>
+<tr class="row-even"><td>Vipin K Parashar</td>
+<td>3 (0.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Daniel Axtens</p></td>
-<td><p>3 (0.9%)</p></td>
+<tr class="row-odd"><td>Daniel Axtens</td>
+<td>3 (0.9%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>2 (0.6%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>2 (0.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Philippe Bergheaud</p></td>
-<td><p>2 (0.6%)</p></td>
+<tr class="row-odd"><td>Philippe Bergheaud</td>
+<td>2 (0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>2 (0.6%)</p></td>
+<tr class="row-even"><td>Ananth N Mavinakayanahalli</td>
+<td>2 (0.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaibhav Jain</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Vaibhav Jain</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Sam Mendoza-Jonas</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Sam Mendoza-Jonas</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Adriana Kobylak</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Adriana Kobylak</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Shreyas B. Prabhu</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Shreyas B. Prabhu</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Vaidyanathan Srinivasan</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Ian Munsie</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Ian Munsie</td>
+<td>1 (0.3%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most changed lines</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 67%" />
-<col style="width: 33%" />
+<col width="67%" />
+<col width="33%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>19533 (39.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>19533 (39.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>17920 (36.1%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>17920 (36.1%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>3285 (6.6%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>3285 (6.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Daniel Axtens</p></td>
-<td><p>2154 (4.3%)</p></td>
+<tr class="row-odd"><td>Daniel Axtens</td>
+<td>2154 (4.3%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>2028 (4.1%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>2028 (4.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>941 (1.9%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>941 (1.9%)</td>
</tr>
-<tr class="row-even"><td><p>Neelesh Gupta</p></td>
-<td><p>434 (0.9%)</p></td>
+<tr class="row-even"><td>Neelesh Gupta</td>
+<td>434 (0.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>294 (0.6%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>294 (0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>261 (0.5%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>261 (0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Vasant Hegde</p></td>
-<td><p>245 (0.5%)</p></td>
+<tr class="row-odd"><td>Vasant Hegde</td>
+<td>245 (0.5%)</td>
</tr>
-<tr class="row-even"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>209 (0.4%)</p></td>
+<tr class="row-even"><td>CĂ©dric Le Goater</td>
+<td>209 (0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Vipin K Parashar</p></td>
-<td><p>155 (0.3%)</p></td>
+<tr class="row-odd"><td>Vipin K Parashar</td>
+<td>155 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>153 (0.3%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>153 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>140 (0.3%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>140 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>135 (0.3%)</p></td>
+<tr class="row-even"><td>Vaidyanathan Srinivasan</td>
+<td>135 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>111 (0.2%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>111 (0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>81 (0.2%)</p></td>
+<tr class="row-even"><td>Samuel Mendoza-Jonas</td>
+<td>81 (0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Jeremy Kerr</p></td>
-<td><p>60 (0.1%)</p></td>
+<tr class="row-odd"><td>Jeremy Kerr</td>
+<td>60 (0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>58 (0.1%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>58 (0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaibhav Jain</p></td>
-<td><p>50 (0.1%)</p></td>
+<tr class="row-odd"><td>Vaibhav Jain</td>
+<td>50 (0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>43 (0.1%)</p></td>
+<tr class="row-even"><td>Ananth N Mavinakayanahalli</td>
+<td>43 (0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Shreyas B. Prabhu</p></td>
-<td><p>17 (0.0%)</p></td>
+<tr class="row-odd"><td>Shreyas B. Prabhu</td>
+<td>17 (0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Sam Mendoza-Jonas</p></td>
-<td><p>12 (0.0%)</p></td>
+<tr class="row-even"><td>Sam Mendoza-Jonas</td>
+<td>12 (0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>10 (0.0%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>10 (0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Ian Munsie</p></td>
-<td><p>8 (0.0%)</p></td>
+<tr class="row-even"><td>Ian Munsie</td>
+<td>8 (0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Philippe Bergheaud</p></td>
-<td><p>6 (0.0%)</p></td>
+<tr class="row-odd"><td>Philippe Bergheaud</td>
+<td>6 (0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Adriana Kobylak</p></td>
-<td><p>6 (0.0%)</p></td>
+<tr class="row-even"><td>Adriana Kobylak</td>
+<td>6 (0.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most lines removed</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 66%" />
-<col style="width: 34%" />
+<col width="66%" />
+<col width="34%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Daniel Axtens</p></td>
-<td><p>2149 (9.2%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Daniel Axtens</td>
+<td>2149 (9.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Shreyas B. Prabhu</p></td>
-<td><p>17 (0.1%)</p></td>
+<tr class="row-odd"><td>Shreyas B. Prabhu</td>
+<td>17 (0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>9 (0.0%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>9 (0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Vipin K Parashar</p></td>
-<td><p>2 (0.0%)</p></td>
+<tr class="row-odd"><td>Vipin K Parashar</td>
+<td>2 (0.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most signoffs (total 190)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 66%" />
-<col style="width: 34%" />
+<col width="66%" />
+<col width="34%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>188 (98.9%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>188 (98.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>1 (0.5%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>1 (0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Neelesh Gupta</p></td>
-<td><p>1 (0.5%)</p></td>
+<tr class="row-even"><td>Neelesh Gupta</td>
+<td>1 (0.5%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most reviews (total 34)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 66%" />
-<col style="width: 34%" />
+<col width="66%" />
+<col width="34%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Patrick Williams</p></td>
-<td><p>5 (14.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Patrick Williams</td>
+<td>5 (14.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>5 (14.7%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>5 (14.7%)</td>
</tr>
-<tr class="row-even"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>5 (14.7%)</p></td>
+<tr class="row-even"><td>CĂ©dric Le Goater</td>
+<td>5 (14.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Vasant Hegde</p></td>
-<td><p>4 (11.8%)</p></td>
+<tr class="row-odd"><td>Vasant Hegde</td>
+<td>4 (11.8%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>4 (11.8%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>4 (11.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Sam Mendoza-Jonas</p></td>
-<td><p>3 (8.8%)</p></td>
+<tr class="row-odd"><td>Sam Mendoza-Jonas</td>
+<td>3 (8.8%)</td>
</tr>
-<tr class="row-even"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>3 (8.8%)</p></td>
+<tr class="row-even"><td>Samuel Mendoza-Jonas</td>
+<td>3 (8.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>2 (5.9%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>2 (5.9%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>2 (5.9%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>2 (5.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaibhav Jain</p></td>
-<td><p>1 (2.9%)</p></td>
+<tr class="row-odd"><td>Vaibhav Jain</td>
+<td>1 (2.9%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most test credits (total 6)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 66%" />
-<col style="width: 34%" />
+<col width="66%" />
+<col width="34%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Vipin K Parashar</p></td>
-<td><p>3 (50.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Vipin K Parashar</td>
+<td>3 (50.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaibhav Jain</p></td>
-<td><p>2 (33.3%)</p></td>
+<tr class="row-odd"><td>Vaibhav Jain</td>
+<td>2 (33.3%)</td>
</tr>
-<tr class="row-even"><td><p>Gajendra B Bandhu1</p></td>
-<td><p>1 (16.7%)</p></td>
+<tr class="row-even"><td>Gajendra B Bandhu1</td>
+<td>1 (16.7%)</td>
</tr>
</tbody>
</table>
<p>Developers who gave the most tested-by credits (total 6)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 33%" />
+<col width="68%" />
+<col width="33%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>2 (33.3%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Gavin Shan</td>
+<td>2 (33.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>2 (33.3%)</p></td>
+<tr class="row-odd"><td>Ananth N Mavinakayanahalli</td>
+<td>2 (33.3%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>1 (16.7%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>1 (16.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>1 (16.7%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>1 (16.7%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most report credits (total 11)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 66%" />
-<col style="width: 34%" />
+<col width="66%" />
+<col width="34%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Vaibhav Jain</p></td>
-<td><p>2 (18.2%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Vaibhav Jain</td>
+<td>2 (18.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Paul Nguyen</p></td>
-<td><p>2 (18.2%)</p></td>
+<tr class="row-odd"><td>Paul Nguyen</td>
+<td>2 (18.2%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>1 (9.1%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>1 (9.1%)</td>
</tr>
-<tr class="row-even"><td><p>Aneesh Kumar K.V</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-even"><td>Aneesh Kumar K.V</td>
+<td>1 (9.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Dionysius d. Bell</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-odd"><td>Dionysius d. Bell</td>
+<td>1 (9.1%)</td>
</tr>
-<tr class="row-even"><td><p>Pradeep Ramanna</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-even"><td>Pradeep Ramanna</td>
+<td>1 (9.1%)</td>
</tr>
-<tr class="row-odd"><td><p>John Walthour</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-odd"><td>John Walthour</td>
+<td>1 (9.1%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>1 (9.1%)</td>
</tr>
</tbody>
</table>
<p>Developers who gave the most report credits (total 11)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 66%" />
-<col style="width: 34%" />
+<col width="66%" />
+<col width="34%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>6 (54.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Gavin Shan</td>
+<td>6 (54.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>3 (27.3%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>3 (27.3%)</td>
</tr>
-<tr class="row-even"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-even"><td>Samuel Mendoza-Jonas</td>
+<td>1 (9.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Shilpasri G Bhat</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-odd"><td>Shilpasri G Bhat</td>
+<td>1 (9.1%)</td>
</tr>
</tbody>
</table>
@@ -671,7 +670,6 @@ A total of 46172 lines added, 23274 removed (delta 22898)</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -716,15 +714,17 @@ A total of 46172 lines added, 23274 removed (delta 22898)</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -741,15 +741,14 @@ A total of 46172 lines added, 23274 removed (delta 22898)</p>
<li class="right" >
<a href="skiboot-5.11-rc1.html" title="skiboot-5.11-rc1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.2.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.2.1.html b/doc/release-notes/skiboot-5.2.1.html
index 16a9ab2..d82925a 100644
--- a/doc/release-notes/skiboot-5.2.1.html
+++ b/doc/release-notes/skiboot-5.2.1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.2.1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.2.1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.2.0-rc2.html" title="skiboot-5.2.0-rc2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.2.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -59,22 +60,22 @@ stable rules - see <a class="reference internal" href="../process/stable-skiboot
<div class="section" id="pflash">
<h3>pflash<a class="headerlink" href="#pflash" title="Permalink to this headline">¶</a></h3>
<ul class="simple">
-<li><p>Allow building under yocto.
-Makefile fixes to enable building as part of an OpenBMC build.</p></li>
+<li>Allow building under yocto.
+Makefile fixes to enable building as part of an OpenBMC build.</li>
</ul>
</div>
<div class="section" id="garrison-platform">
<h3>Garrison platform<a class="headerlink" href="#garrison-platform" title="Permalink to this headline">¶</a></h3>
<ul class="simple">
-<li><p>Add PCIe and NPU slot location names</p></li>
-<li><p>hw/npu.c: Add ibm, npu-index property to npu device tree</p></li>
-<li><p>hmi: Add handling for NPU checkstops</p></li>
+<li>Add PCIe and NPU slot location names</li>
+<li>hw/npu.c: Add ibm, npu-index property to npu device tree</li>
+<li>hmi: Add handling for NPU checkstops</li>
</ul>
</div>
<div class="section" id="phb3-all-power8-platforms">
<h3>PHB3 (all POWER8 platforms)<a class="headerlink" href="#phb3-all-power8-platforms" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>hw/phb3: Ensure PQ bits are cleared in the IVC when masking IRQ
+<li><p class="first">hw/phb3: Ensure PQ bits are cleared in the IVC when masking IRQ
When we mask an interrupt, we may race with another interrupt coming
in from the hardware. If this occurs, the P and/or Q bit may end up
being set but we never EOI/clear them. This could result in a lost
@@ -84,7 +85,7 @@ being presented.</p>
interrupt masking at the same time as high interrupt load. The fix is
not specific to CAPI though.</p>
</li>
-<li><p>hw/phb3: Fix potential race in EOI
+<li><p class="first">hw/phb3: Fix potential race in EOI
When we EOI we need to clear the present (P) bit in the Interrupt
Vector Cache (IVC). We must clear P ensuring that any additional
interrupts that come in aren’t lost while also maintaining coherency
@@ -102,14 +103,14 @@ successful.</p>
<div class="section" id="fsp-platforms">
<h3>FSP platforms<a class="headerlink" href="#fsp-platforms" title="Permalink to this headline">¶</a></h3>
<ul class="simple">
-<li><p>OPAL:Handle mbox response with bad status:0x24 during FSP termination
-OPAL committed a predictive log with SRC BB822411 in some situations.</p></li>
+<li>OPAL:Handle mbox response with bad status:0x24 during FSP termination
+OPAL committed a predictive log with SRC BB822411 in some situations.</li>
</ul>
</div>
<div class="section" id="generic">
<h3>Generic<a class="headerlink" href="#generic" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>hmi: Fix a bug where partial hmi event was reported to host.
+<li><p class="first">hmi: Fix a bug where partial hmi event was reported to host.
This bug fix ensures the CPU PIR is reported correctly:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="p">[</span> <span class="mf">305.628283</span><span class="p">]</span> <span class="n">Fatal</span> <span class="n">Hypervisor</span> <span class="n">Maintenance</span> <span class="n">interrupt</span> <span class="p">[</span><span class="n">Not</span> <span class="n">recovered</span><span class="p">]</span>
<span class="p">[</span> <span class="mf">305.628341</span><span class="p">]</span> <span class="n">Error</span> <span class="n">detail</span><span class="p">:</span> <span class="n">Malfunction</span> <span class="n">Alert</span>
@@ -120,7 +121,8 @@ This bug fix ensures the CPU PIR is reported correctly:</p>
</pre></div>
</div>
</li>
-<li><p>xscom: Return OPAL_WRONG_STATE on XSCOM ops if CPU is asleep</p></li>
+<li><p class="first">xscom: Return OPAL_WRONG_STATE on XSCOM ops if CPU is asleep</p>
+</li>
</ul>
</div>
</div>
@@ -129,207 +131,207 @@ This bug fix ensures the CPU PIR is reported correctly:</p>
<p>Processed 15 csets from 7 developers
A total of 436 lines added, 59 removed (delta 377)</p>
<p>Developers with the most changesets</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 74%" />
-<col style="width: 26%" />
+<col width="74%" />
+<col width="26%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>7 (46.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Russell Currey</td>
+<td>7 (46.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>2 (13.3%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>2 (13.3%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>2 (13.3%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>2 (13.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Patrick Williams</p></td>
-<td><p>1 (6.7%)</p></td>
+<tr class="row-odd"><td>Patrick Williams</td>
+<td>1 (6.7%)</td>
</tr>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>1 (6.7%)</p></td>
+<tr class="row-even"><td>Stewart Smith</td>
+<td>1 (6.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Mamatha</p></td>
-<td><p>1 (6.7%)</p></td>
+<tr class="row-odd"><td>Mamatha</td>
+<td>1 (6.7%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>1 (6.7%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>1 (6.7%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most changed lines</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>215 (48.3%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Alistair Popple</td>
+<td>215 (48.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>140 (31.5%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>140 (31.5%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>55 (12.4%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>55 (12.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Mamatha</p></td>
-<td><p>15 (3.4%)</p></td>
+<tr class="row-odd"><td>Mamatha</td>
+<td>15 (3.4%)</td>
</tr>
-<tr class="row-even"><td><p>Patrick Williams</p></td>
-<td><p>9 (2.0%)</p></td>
+<tr class="row-even"><td>Patrick Williams</td>
+<td>9 (2.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>8 (1.8%)</p></td>
+<tr class="row-odd"><td>Mahesh Salgaonkar</td>
+<td>8 (1.8%)</td>
</tr>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>3 (0.7%)</p></td>
+<tr class="row-even"><td>Stewart Smith</td>
+<td>3 (0.7%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most lines removed</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Patrick Williams</p></td>
-<td><p>5 (8.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Patrick Williams</td>
+<td>5 (8.5%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most signoffs (total 30)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>15 (50.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>15 (50.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>7 (23.3%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>7 (23.3%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>2 (6.7%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>2 (6.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>2 (6.7%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>2 (6.7%)</td>
</tr>
-<tr class="row-even"><td><p>Patrick Williams</p></td>
-<td><p>1 (3.3%)</p></td>
+<tr class="row-even"><td>Patrick Williams</td>
+<td>1 (3.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>1 (3.3%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>1 (3.3%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>1 (3.3%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>1 (3.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Mamatha</p></td>
-<td><p>1 (3.3%)</p></td>
+<tr class="row-odd"><td>Mamatha</td>
+<td>1 (3.3%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most reviews (total 11)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>5 (45.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Alistair Popple</td>
+<td>5 (45.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>3 (27.3%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>3 (27.3%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>2 (18.2%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>2 (18.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>1 (9.1%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>1 (9.1%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most Acked-by (total 1)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>1 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Alistair Popple</td>
+<td>1 (100.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most test credits (total 3)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>2 (66.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>2 (66.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaibhav Jain</p></td>
-<td><p>1 (33.3%)</p></td>
+<tr class="row-odd"><td>Vaibhav Jain</td>
+<td>1 (33.3%)</td>
</tr>
</tbody>
</table>
<p>Developers who received the most tested-by credits (total 3)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>3 (100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Michael Neuling</td>
+<td>3 (100.0%)</td>
</tr>
</tbody>
</table>
@@ -337,7 +339,6 @@ A total of 436 lines added, 59 removed (delta 377)</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -373,15 +374,17 @@ A total of 436 lines added, 59 removed (delta 377)</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -398,15 +401,14 @@ A total of 436 lines added, 59 removed (delta 377)</p>
<li class="right" >
<a href="skiboot-5.2.0-rc2.html" title="skiboot-5.2.0-rc2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.2.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.2.2.html b/doc/release-notes/skiboot-5.2.2.html
index 71f8fc9..72197be 100644
--- a/doc/release-notes/skiboot-5.2.2.html
+++ b/doc/release-notes/skiboot-5.2.2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.2.2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.2.2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.2.1.html" title="skiboot-5.2.1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.2.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -60,15 +61,16 @@ stable rules - see <a class="reference internal" href="../process/stable-skiboot
<div class="section" id="p8nvl-garrison">
<h2>P8NVL/Garrison<a class="headerlink" href="#p8nvl-garrison" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><dl>
-<dt>PHB3: Fix corruption of pref window register</dt><dd><p>On P8+ Garrison platform, the root port’s pref window register might
+<li><dl class="first docutils">
+<dt>PHB3: Fix corruption of pref window register</dt>
+<dd><p class="first">On P8+ Garrison platform, the root port’s pref window register might
be not writable and we have to emulate the window because of hardware
defect. In order to detect that, we read the register content, write
inversed value and read the register content again. The register is
regarded as read-only if the values from the two continuous read are
same. However, the original register content isn’t written back and
it causes corruption on pref window register if it’s writable.</p>
-<p>This fixes the above issue by writing the original content back to
+<p class="last">This fixes the above issue by writing the original content back to
the register at the end.</p>
</dd>
</dl>
@@ -78,7 +80,6 @@ the register at the end.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -106,15 +107,17 @@ the register at the end.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -131,15 +134,14 @@ the register at the end.</p>
<li class="right" >
<a href="skiboot-5.2.1.html" title="skiboot-5.2.1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.2.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.2.3.html b/doc/release-notes/skiboot-5.2.3.html
index 624bb8f..10cc7df 100644
--- a/doc/release-notes/skiboot-5.2.3.html
+++ b/doc/release-notes/skiboot-5.2.3.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.2.3 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.2.3 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.2.2.html" title="skiboot-5.2.2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.2.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -61,17 +62,17 @@ stable rules - see <a class="reference internal" href="../process/stable-skiboot
<div class="section" id="openpower-platforms">
<h2>OpenPOWER platforms<a class="headerlink" href="#openpower-platforms" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>occ: Filter out entries from Pmin to Pmax in pstate table
+<li>occ: Filter out entries from Pmin to Pmax in pstate table
(cherry picked from commit eca02ee2e62cee115d921a01cea061782ce47cc7)
Without this fix, with newer OCC firmware on some OpenPOWER machines,
we would fail to parse the table from the OCC, which meant the host OS
-would not get a table of supported CPU frequencies.</p></li>
+would not get a table of supported CPU frequencies.</li>
</ul>
</div>
<div class="section" id="general">
<h2>General<a class="headerlink" href="#general" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>pci: Do a dummy config write to devices to establish bus number
+<li><p class="first">pci: Do a dummy config write to devices to establish bus number
(cherry picked from commit f46c1e506d199332b0f9741278c8ec35b3e39135)</p>
<blockquote>
<div><p>On PCI Express, devices need to know their own bus number in order
@@ -91,22 +92,23 @@ before it’s likely to send error packets upstream, we should thus do a
dummy configuration write to it as soon as possible after probing.</p>
</div></blockquote>
</li>
-<li><p>Fix GCC 6 warning in backtrace code
-(cherry picked from commit 793f6f5b32c96f2774bd955b6062c74a672317ca)</p></li>
-<li><p>Backport of user visible typo fixes
-partial cherry picked from 4c95b5e04e3c4f72e4005574f67cd6e365d3276f</p></li>
+<li><p class="first">Fix GCC 6 warning in backtrace code
+(cherry picked from commit 793f6f5b32c96f2774bd955b6062c74a672317ca)</p>
+</li>
+<li><p class="first">Backport of user visible typo fixes
+partial cherry picked from 4c95b5e04e3c4f72e4005574f67cd6e365d3276f</p>
+</li>
</ul>
</div>
<div class="section" id="utilities">
<h2>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Fix ARM build failure with parallel make</p></li>
+<li>Fix ARM build failure with parallel make</li>
</ul>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -136,15 +138,17 @@ partial cherry picked from 4c95b5e04e3c4f72e4005574f67cd6e365d3276f</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -161,15 +165,14 @@ partial cherry picked from 4c95b5e04e3c4f72e4005574f67cd6e365d3276f</p></li>
<li class="right" >
<a href="skiboot-5.2.2.html" title="skiboot-5.2.2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.2.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.2.4.html b/doc/release-notes/skiboot-5.2.4.html
index 0d626ec..90893e9 100644
--- a/doc/release-notes/skiboot-5.2.4.html
+++ b/doc/release-notes/skiboot-5.2.4.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.2.4 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.2.4 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.2.3.html" title="skiboot-5.2.3"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.2.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -60,10 +61,9 @@ stable rules - see <a class="reference internal" href="../process/stable-skiboot
<div class="section" id="all-platforms">
<h2>All platforms<a class="headerlink" href="#all-platforms" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Make the XSCOM engine code more resilient to errors:</p>
-<ul>
-<li><p>hw/xscom: Reset XSCOM engine after querying sleeping core FIR</p></li>
-<li><p>hw/xscom: Reset XSCOM engine after finite number of retries when busy</p></li>
+<li>Make the XSCOM engine code more resilient to errors:<ul>
+<li>hw/xscom: Reset XSCOM engine after querying sleeping core FIR</li>
+<li>hw/xscom: Reset XSCOM engine after finite number of retries when busy</li>
</ul>
</li>
</ul>
@@ -71,13 +71,12 @@ stable rules - see <a class="reference internal" href="../process/stable-skiboot
<div class="section" id="userspace-utilities">
<h2>Userspace utilities<a class="headerlink" href="#userspace-utilities" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>pflash build improvements</p></li>
+<li>pflash build improvements</li>
</ul>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -106,15 +105,17 @@ stable rules - see <a class="reference internal" href="../process/stable-skiboot
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -131,15 +132,14 @@ stable rules - see <a class="reference internal" href="../process/stable-skiboot
<li class="right" >
<a href="skiboot-5.2.3.html" title="skiboot-5.2.3"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.2.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.2.5.html b/doc/release-notes/skiboot-5.2.5.html
index 41ba410..989b807 100644
--- a/doc/release-notes/skiboot-5.2.5.html
+++ b/doc/release-notes/skiboot-5.2.5.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.2.5 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.2.5 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.2.4.html" title="skiboot-5.2.4"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.2.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,36 +53,35 @@
stable rules - see <a class="reference internal" href="../process/stable-skiboot-rules.html#stable-rules"><span class="std std-ref">Skiboot stable tree rules and releases</span></a>.</p>
<p>Over skiboot-5.2.4, the following fixes are included:</p>
<ul class="simple">
-<li><p>pflash: Fix the makefile
-(cherry picked from commit fd599965f723330da5ec55519c20cdb6aa2b3a2d)</p></li>
-<li><p>pflash: Clean up makefiles and resolve build race
-(cherry picked from commit c327eddd9b291a0e6e54001fa3b1e547bad3fca2)</p></li>
-<li><p>FSP/ELOG: Fix OPAL generated elog resend logic
-(cherry picked from commit a6d4a7884e95cb9c918b8a217c11e46b01218358)</p></li>
-<li><p>FSP/ELOG: Fix possible event notifier hangs
-(cherry picked from commit e7c8cba4ad773055f390632c2996d3242b633bf4)</p></li>
-<li><p>FSP/ELOG: Disable event notification if list is not consistent
-(cherry picked from commit 1fb10de164d3ca034193df81c1f5d007aec37781)</p></li>
-<li><p>FSP/ELOG: Improve elog event states
-(cherry picked from commit cec5750a4a86ff3f69e1d8817eda023f4d40c492)</p></li>
-<li><p>FSP/ELOG: Fix OPAL generated elog event notification
-(cherry picked from commit ec366ad4e2e871096fa4c614ad7e89f5bb6f884f)</p></li>
-<li><p>FSP/ELOG: Disable event notification during kexec
-(cherry picked from commit d2ae07fd97bb9408456279cec799f72cb78680a6)</p></li>
-<li><p>hw/xscom: Reset XSCOM engine after querying sleeping core FIR
-(cherry picked from commit 15cec493804ff14e6246eb1b65e9d0c7cb469a81)</p></li>
-<li><p>hw/xscom: Reset XSCOM engine after finite number of retries when busy
-(cherry picked from commit e761222593a1ae932cddbc81239b6a7cd98ddb70)</p></li>
-<li><p>xscom: Return OPAL_WRONG_STATE on XSCOM ops if CPU is asleep
-(cherry picked from commit 9c2d82394fd2303847cac4a665dee62556ca528a)</p></li>
-<li><p>fsp/console: Ignore data on unresponsive consoles
-(cherry picked from commit fd6b71fcc6912611ce81f455b4805f0531699d5e)</p></li>
-<li><p>SEL: Fix eSEL ID while logging eSEL event</p></li>
+<li>pflash: Fix the makefile
+(cherry picked from commit fd599965f723330da5ec55519c20cdb6aa2b3a2d)</li>
+<li>pflash: Clean up makefiles and resolve build race
+(cherry picked from commit c327eddd9b291a0e6e54001fa3b1e547bad3fca2)</li>
+<li>FSP/ELOG: Fix OPAL generated elog resend logic
+(cherry picked from commit a6d4a7884e95cb9c918b8a217c11e46b01218358)</li>
+<li>FSP/ELOG: Fix possible event notifier hangs
+(cherry picked from commit e7c8cba4ad773055f390632c2996d3242b633bf4)</li>
+<li>FSP/ELOG: Disable event notification if list is not consistent
+(cherry picked from commit 1fb10de164d3ca034193df81c1f5d007aec37781)</li>
+<li>FSP/ELOG: Improve elog event states
+(cherry picked from commit cec5750a4a86ff3f69e1d8817eda023f4d40c492)</li>
+<li>FSP/ELOG: Fix OPAL generated elog event notification
+(cherry picked from commit ec366ad4e2e871096fa4c614ad7e89f5bb6f884f)</li>
+<li>FSP/ELOG: Disable event notification during kexec
+(cherry picked from commit d2ae07fd97bb9408456279cec799f72cb78680a6)</li>
+<li>hw/xscom: Reset XSCOM engine after querying sleeping core FIR
+(cherry picked from commit 15cec493804ff14e6246eb1b65e9d0c7cb469a81)</li>
+<li>hw/xscom: Reset XSCOM engine after finite number of retries when busy
+(cherry picked from commit e761222593a1ae932cddbc81239b6a7cd98ddb70)</li>
+<li>xscom: Return OPAL_WRONG_STATE on XSCOM ops if CPU is asleep
+(cherry picked from commit 9c2d82394fd2303847cac4a665dee62556ca528a)</li>
+<li>fsp/console: Ignore data on unresponsive consoles
+(cherry picked from commit fd6b71fcc6912611ce81f455b4805f0531699d5e)</li>
+<li>SEL: Fix eSEL ID while logging eSEL event</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -101,15 +101,17 @@ stable rules - see <a class="reference internal" href="../process/stable-skiboot
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -126,15 +128,14 @@ stable rules - see <a class="reference internal" href="../process/stable-skiboot
<li class="right" >
<a href="skiboot-5.2.4.html" title="skiboot-5.2.4"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.2.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.3.0-rc1.html b/doc/release-notes/skiboot-5.3.0-rc1.html
index a3db22d..285fab3 100644
--- a/doc/release-notes/skiboot-5.3.0-rc1.html
+++ b/doc/release-notes/skiboot-5.3.0-rc1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.3.0-rc1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.3.0-rc1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.3.0.html" title="skiboot-5.3.0"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.0-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -58,45 +59,45 @@ and skiboot-5.2.4 (the existing stable releases).</p>
<div class="section" id="opal-api-device-tree">
<h2>OPAL API/Device Tree<a class="headerlink" href="#opal-api-device-tree" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><dl class="simple">
-<dt>Reserve OPAL API numbers for XICS emulation for XIVE</dt><dd><p>Additionally, we put in some skeleton docs for what’s coming,
+<li><dl class="first docutils">
+<dt>Reserve OPAL API numbers for XICS emulation for XIVE</dt>
+<dd>Additionally, we put in some skeleton docs for what’s coming,
key points being that this is for P9 and above, relies on a device
-being present in the device tree and is modelled on the PAPR calls.</p>
-</dd>
+being present in the device tree and is modelled on the PAPR calls.</dd>
</dl>
</li>
-<li><p>interrupts: Remove #interrupt-cells from ICP nodes</p></li>
-<li><p>Stop adding legacy linux, phandle to device tree, just add phandle
-No Linux kernel has ever existed for powernv that only knows linux,phandle.</p></li>
+<li>interrupts: Remove #interrupt-cells from ICP nodes</li>
+<li>Stop adding legacy linux, phandle to device tree, just add phandle
+No Linux kernel has ever existed for powernv that only knows linux,phandle.</li>
</ul>
</div>
<div class="section" id="power9">
<h2>POWER9<a class="headerlink" href="#power9" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Add base POWER9 support
+<li>Add base POWER9 support
In <em>NO WAY</em> is this geared towards real POWER9 hardware.
Suitable for use in simulators <em>only</em>, and even then, only if you
-intensely know what you’re doing.</p></li>
-<li><p>Document changes in OPAL API for POWER9
-Some things are going to change, we start documenting them.</p></li>
-<li><p>cpu: supply ibm,dec-bits via devicetree</p></li>
-<li><p>power9: Add example device tree for phb4</p></li>
-<li><p>device-tree: Only advertise ibm, opal-v3 (not v2) on POWER9 and above</p></li>
+intensely know what you’re doing.</li>
+<li>Document changes in OPAL API for POWER9
+Some things are going to change, we start documenting them.</li>
+<li>cpu: supply ibm,dec-bits via devicetree</li>
+<li>power9: Add example device tree for phb4</li>
+<li>device-tree: Only advertise ibm, opal-v3 (not v2) on POWER9 and above</li>
</ul>
</div>
<div class="section" id="capi">
<h2>CAPI<a class="headerlink" href="#capi" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>phb3: Test CAPI mode on both CAPP units on Naples</p></li>
-<li><p>hmi: Recover both CAPP units on Naples after malfunction alert</p></li>
-<li><p>chiptod: Sync timebase in both CAPP units on Naples</p></li>
-<li><p>phb3: Set CAPI mode for both CAPP units on Naples</p></li>
-<li><p>phb3: Load CAPP ucode to both CAPP units on Naples</p></li>
-<li><dl class="simple">
-<dt>phb3: Add support for CAPP DMA mode</dt><dd><p>The XSL used in the Mellanox CX4 card uses a DMA mode of CAPI, which
+<li>phb3: Test CAPI mode on both CAPP units on Naples</li>
+<li>hmi: Recover both CAPP units on Naples after malfunction alert</li>
+<li>chiptod: Sync timebase in both CAPP units on Naples</li>
+<li>phb3: Set CAPI mode for both CAPP units on Naples</li>
+<li>phb3: Load CAPP ucode to both CAPP units on Naples</li>
+<li><dl class="first docutils">
+<dt>phb3: Add support for CAPP DMA mode</dt>
+<dd>The XSL used in the Mellanox CX4 card uses a DMA mode of CAPI, which
requires a few registers configured specially. This adds a new mode to
-the OPAL_PCI_SET_PHB_CAPI_MODE API to enable CAPI in DMA mode.</p>
-</dd>
+the OPAL_PCI_SET_PHB_CAPI_MODE API to enable CAPI in DMA mode.</dd>
</dl>
</li>
</ul>
@@ -104,26 +105,26 @@ the OPAL_PCI_SET_PHB_CAPI_MODE API to enable CAPI in DMA mode.</p>
<div class="section" id="pci">
<h2>PCI<a class="headerlink" href="#pci" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>pci: Do a dummy config write to devices to establish bus number</p></li>
-<li><p>phb: Work around XSL bug sending PTE updates with wrong scope</p></li>
-<li><p>Support for PCI hotplug (if a platform supports it)</p></li>
+<li>pci: Do a dummy config write to devices to establish bus number</li>
+<li>phb: Work around XSL bug sending PTE updates with wrong scope</li>
+<li>Support for PCI hotplug (if a platform supports it)</li>
</ul>
</div>
<div class="section" id="garrison">
<h2>Garrison<a class="headerlink" href="#garrison" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>NVLink/NPU support</p></li>
-<li><p>Full garrison platform support.</p></li>
+<li>NVLink/NPU support</li>
+<li>Full garrison platform support.</li>
</ul>
</div>
<div class="section" id="bmc-based-platforms">
<h2>BMC based platforms<a class="headerlink" href="#bmc-based-platforms" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>bt: use the maximum retry count returned by the BMC</p></li>
-<li><dl class="simple">
-<dt>SEL: Fix eSEL ID while logging eSEL event</dt><dd><p>Commit 127a7dac added eSEL ID to SEL event in reverse order (0700 instead
-of 0007). This code fixes this issue by adding ID in proper order.</p>
-</dd>
+<li>bt: use the maximum retry count returned by the BMC</li>
+<li><dl class="first docutils">
+<dt>SEL: Fix eSEL ID while logging eSEL event</dt>
+<dd>Commit 127a7dac added eSEL ID to SEL event in reverse order (0700 instead
+of 0007). This code fixes this issue by adding ID in proper order.</dd>
</dl>
</li>
</ul>
@@ -131,29 +132,34 @@ of 0007). This code fixes this issue by adding ID in proper order.</p>
<div class="section" id="tests-simulation">
<h2>Tests/Simulation<a class="headerlink" href="#tests-simulation" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>test/hello_world: always use shutdown type zero</p></li>
-<li><p>make check: make test runs less noisy</p></li>
-<li><p>boot-tests: force booting from primary (non-golden) side</p></li>
-<li><p>mambo: Enable multicore configurations</p></li>
-<li><p>mambo: Flatten device tree at the end</p></li>
-<li><p>mambo: Increase memory to 4GB and change memory map</p></li>
-<li><p>Timebase quirk for slow simulators like AWAN and SIMICS</p></li>
-<li><p>chip: Add simics specific quirks</p></li>
-<li><p>mambo: Flash driver using bogus disk</p></li>
-<li><p>platform/mambo: Add a heartbeat time, making console more responsive</p></li>
-<li><p>mambo: Fix bt command and add little endian support</p></li>
+<li>test/hello_world: always use shutdown type zero</li>
+<li>make check: make test runs less noisy</li>
+<li>boot-tests: force booting from primary (non-golden) side</li>
+<li>mambo: Enable multicore configurations</li>
+<li>mambo: Flatten device tree at the end</li>
+<li>mambo: Increase memory to 4GB and change memory map</li>
+<li>Timebase quirk for slow simulators like AWAN and SIMICS</li>
+<li>chip: Add simics specific quirks</li>
+<li>mambo: Flash driver using bogus disk</li>
+<li>platform/mambo: Add a heartbeat time, making console more responsive</li>
+<li>mambo: Fix bt command and add little endian support</li>
</ul>
</div>
<div class="section" id="fsp-platforms">
<h2>FSP platforms<a class="headerlink" href="#fsp-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>beginnings of support for SPIRA-S structure</p></li>
-<li><p>Handle mbox response with bad status:0x24 during FSP termination</p></li>
-<li><p>FSP: Validate fsp_msg response memory allocation</p></li>
-<li><p>FSP/ELOG: Fix OPAL generated elog event notification</p></li>
-<li><p>FSP/ELOG: Disable event notification during kexec
-Possible crash if error log timing around kexec is unfortunate</p></li>
-<li><p>fsp/console: Ignore data on unresponsive consoles</p>
+<li><p class="first">beginnings of support for SPIRA-S structure</p>
+</li>
+<li><p class="first">Handle mbox response with bad status:0x24 during FSP termination</p>
+</li>
+<li><p class="first">FSP: Validate fsp_msg response memory allocation</p>
+</li>
+<li><p class="first">FSP/ELOG: Fix OPAL generated elog event notification</p>
+</li>
+<li><p class="first">FSP/ELOG: Disable event notification during kexec
+Possible crash if error log timing around kexec is unfortunate</p>
+</li>
+<li><p class="first">fsp/console: Ignore data on unresponsive consoles</p>
<blockquote>
<div><p>Linux kernels from v4.1 onwards will try to request an irq for each hvc
console using OPAL_EVENT_CONSOLE_INPUT, however because the IRQF_SHARED
@@ -171,38 +177,38 @@ read.</p>
<div class="section" id="hmi">
<h2>HMI<a class="headerlink" href="#hmi" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>hmi: Fix a bug where partial hmi event was reported to host.</p></li>
-<li><p>hmi: Add handling for NPU checkstops</p></li>
-<li><p>hmi: Only raise a catchall HMI if no other components have</p></li>
-<li><p>hmi: Rework HMI event handling of FIR read failure</p></li>
+<li>hmi: Fix a bug where partial hmi event was reported to host.</li>
+<li>hmi: Add handling for NPU checkstops</li>
+<li>hmi: Only raise a catchall HMI if no other components have</li>
+<li>hmi: Rework HMI event handling of FIR read failure</li>
</ul>
</div>
<div class="section" id="tools">
<h2>Tools<a class="headerlink" href="#tools" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><dl class="simple">
-<dt>external: Add a getsram command</dt><dd><p>The getsram command reads the OCC SRAM. This is useful for debug.</p>
-</dd>
+<li><dl class="first docutils">
+<dt>external: Add a getsram command</dt>
+<dd>The getsram command reads the OCC SRAM. This is useful for debug.</dd>
</dl>
</li>
-<li><p>bug fixes in flash utilities (pflash/gard)</p></li>
-<li><p>pflash: Allow building under yocto.</p></li>
-<li><p>external/opal-prd: Ensure that struct host_interfaces matches the thunk</p></li>
-<li><p>external/pflash: Handle incorrect cmd-line options better</p></li>
-<li><p>libflash: fix bug on reading truncated flash file</p></li>
-<li><p>pflash: add support for manipulating file rather than flash</p></li>
-<li><p>gard: fix compile error on ARM</p></li>
-<li><p>libflash: Add sanity checks to ffs init code.</p></li>
-<li><p>external: Add dynamically linked pflash</p></li>
+<li>bug fixes in flash utilities (pflash/gard)</li>
+<li>pflash: Allow building under yocto.</li>
+<li>external/opal-prd: Ensure that struct host_interfaces matches the thunk</li>
+<li>external/pflash: Handle incorrect cmd-line options better</li>
+<li>libflash: fix bug on reading truncated flash file</li>
+<li>pflash: add support for manipulating file rather than flash</li>
+<li>gard: fix compile error on ARM</li>
+<li>libflash: Add sanity checks to ffs init code.</li>
+<li>external: Add dynamically linked pflash</li>
</ul>
</div>
<div class="section" id="mambo">
<h2>Mambo<a class="headerlink" href="#mambo" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><dl class="simple">
-<dt>Test device tree for kernel location</dt><dd><p>This can reduce the boot time since the kernel no longer needs to
-relocate itself when loaded directly at 0.</p>
-</dd>
+<li><dl class="first docutils">
+<dt>Test device tree for kernel location</dt>
+<dd>This can reduce the boot time since the kernel no longer needs to
+relocate itself when loaded directly at 0.</dd>
</dl>
</li>
</ul>
@@ -210,73 +216,73 @@ relocate itself when loaded directly at 0.</p>
<div class="section" id="generic">
<h2>Generic<a class="headerlink" href="#generic" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>hw/lpc: Log LPC SYNC errors as OPAL_PLATFORM_ERR_EVT errors</p></li>
-<li><p>Explicitly disable the attn instruction on all CPUs on boot.</p></li>
-<li><p>hw/xscom: Reset XSCOM engine after finite number of retries when busy</p></li>
-<li><p>hw/xscom: Reset XSCOM engine after querying sleeping core FIR</p></li>
-<li><p>core/timer: Add support for platform specific heartbeat</p></li>
-<li><p>Fix GCOV_COUNTERS ifdef logic for GCC 6.0</p></li>
-<li><p>core: Fix backtrace for gcc 6
-fixes a compiler warning on GCC 6 and above</p></li>
-<li><dl class="simple">
-<dt>cpu: Don’t call time_wait with lock held</dt><dd><p>Also make the locking around re-init safer, properly block the
-OS from restarting a thread that was caught for re-init.</p>
-</dd>
+<li>hw/lpc: Log LPC SYNC errors as OPAL_PLATFORM_ERR_EVT errors</li>
+<li>Explicitly disable the attn instruction on all CPUs on boot.</li>
+<li>hw/xscom: Reset XSCOM engine after finite number of retries when busy</li>
+<li>hw/xscom: Reset XSCOM engine after querying sleeping core FIR</li>
+<li>core/timer: Add support for platform specific heartbeat</li>
+<li>Fix GCOV_COUNTERS ifdef logic for GCC 6.0</li>
+<li>core: Fix backtrace for gcc 6
+fixes a compiler warning on GCC 6 and above</li>
+<li><dl class="first docutils">
+<dt>cpu: Don’t call time_wait with lock held</dt>
+<dd>Also make the locking around re-init safer, properly block the
+OS from restarting a thread that was caught for re-init.</dd>
</dl>
</li>
-<li><p>flash: Increase the maximum number of flash devices</p></li>
+<li>flash: Increase the maximum number of flash devices</li>
</ul>
</div>
<div class="section" id="contributors">
<h2>Contributors<a class="headerlink" href="#contributors" title="Permalink to this headline">¶</a></h2>
<p>Extending the analysis done for the last few releases, we can see our trends
in code review across versions:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 19%" />
-<col style="width: 14%" />
-<col style="width: 17%" />
-<col style="width: 17%" />
-<col style="width: 14%" />
-<col style="width: 19%" />
+<col width="19%" />
+<col width="14%" />
+<col width="17%" />
+<col width="17%" />
+<col width="14%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Release</p></th>
-<th class="head"><p>csets</p></th>
-<th class="head"><p>Ack</p></th>
-<th class="head"><p>Reviews</p></th>
-<th class="head"><p>Tested</p></th>
-<th class="head"><p>Reported</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Release</th>
+<th class="head">csets</th>
+<th class="head">Ack</th>
+<th class="head">Reviews</th>
+<th class="head">Tested</th>
+<th class="head">Reported</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>5.0</p></td>
-<td><p>329</p></td>
-<td><p>15</p></td>
-<td><p>20</p></td>
-<td><p>1</p></td>
-<td><p>0</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.1</p></td>
-<td><p>372</p></td>
-<td><p>13</p></td>
-<td><p>38</p></td>
-<td><p>1</p></td>
-<td><p>4</p></td>
-</tr>
-<tr class="row-even"><td><p>5.2-rc1</p></td>
-<td><p>334</p></td>
-<td><p>20</p></td>
-<td><p>34</p></td>
-<td><p>6</p></td>
-<td><p>11</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.3-rc1</p></td>
-<td><p>302</p></td>
-<td><p>36</p></td>
-<td><p>53</p></td>
-<td><p>4</p></td>
-<td><p>5</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>5.0</td>
+<td>329</td>
+<td>15</td>
+<td>20</td>
+<td>1</td>
+<td>0</td>
+</tr>
+<tr class="row-odd"><td>5.1</td>
+<td>372</td>
+<td>13</td>
+<td>38</td>
+<td>1</td>
+<td>4</td>
+</tr>
+<tr class="row-even"><td>5.2-rc1</td>
+<td>334</td>
+<td>20</td>
+<td>34</td>
+<td>6</td>
+<td>11</td>
+</tr>
+<tr class="row-odd"><td>5.3-rc1</td>
+<td>302</td>
+<td>36</td>
+<td>53</td>
+<td>4</td>
+<td>5</td>
</tr>
</tbody>
</table>
@@ -285,422 +291,422 @@ in code review across versions:</p>
<p>Processed 302 csets from 31 developers
A total of 20887 lines added, 4540 removed (delta 16347)</p>
<p>Developers with the most changesets</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 31%" />
+<col width="69%" />
+<col width="31%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>82 (27.2%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>82 (27.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>36 (11.9%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>36 (11.9%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>28 (9.3%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>28 (9.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>25 (8.3%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>25 (8.3%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>24 (7.9%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>24 (7.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>14 (4.6%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>14 (4.6%)</td>
</tr>
-<tr class="row-even"><td><p>Brad Bishop</p></td>
-<td><p>12 (4.0%)</p></td>
+<tr class="row-even"><td>Brad Bishop</td>
+<td>12 (4.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Vipin K Parashar</p></td>
-<td><p>10 (3.3%)</p></td>
+<tr class="row-odd"><td>Vipin K Parashar</td>
+<td>10 (3.3%)</td>
</tr>
-<tr class="row-even"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>9 (3.0%)</p></td>
+<tr class="row-even"><td>CĂ©dric Le Goater</td>
+<td>9 (3.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Shreyas B. Prabhu</p></td>
-<td><p>8 (2.6%)</p></td>
+<tr class="row-odd"><td>Shreyas B. Prabhu</td>
+<td>8 (2.6%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>7 (2.3%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>7 (2.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Philippe Bergheaud</p></td>
-<td><p>6 (2.0%)</p></td>
+<tr class="row-odd"><td>Philippe Bergheaud</td>
+<td>6 (2.0%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>5 (1.7%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>5 (1.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Mukesh Ojha</p></td>
-<td><p>4 (1.3%)</p></td>
+<tr class="row-odd"><td>Mukesh Ojha</td>
+<td>4 (1.3%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>4 (1.3%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>4 (1.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Ian Munsie</p></td>
-<td><p>4 (1.3%)</p></td>
+<tr class="row-odd"><td>Ian Munsie</td>
+<td>4 (1.3%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>3 (1.0%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>3 (1.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Chris Smart</p></td>
-<td><p>3 (1.0%)</p></td>
+<tr class="row-odd"><td>Chris Smart</td>
+<td>3 (1.0%)</td>
</tr>
-<tr class="row-even"><td><p>Sam Mendoza-Jonas</p></td>
-<td><p>2 (0.7%)</p></td>
+<tr class="row-even"><td>Sam Mendoza-Jonas</td>
+<td>2 (0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>2 (0.7%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>2 (0.7%)</td>
</tr>
-<tr class="row-even"><td><p>Dinar Valeev</p></td>
-<td><p>2 (0.7%)</p></td>
+<tr class="row-even"><td>Dinar Valeev</td>
+<td>2 (0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Shilpasri G Bhat</p></td>
-<td><p>2 (0.7%)</p></td>
+<tr class="row-odd"><td>Shilpasri G Bhat</td>
+<td>2 (0.7%)</td>
</tr>
-<tr class="row-even"><td><p>Patrick Williams</p></td>
-<td><p>2 (0.7%)</p></td>
+<tr class="row-even"><td>Patrick Williams</td>
+<td>2 (0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Deb McLemore</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Deb McLemore</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Balbir Singh</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Balbir Singh</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Suraj Jitindar Singh</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Suraj Jitindar Singh</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Frederic Bonnard</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Frederic Bonnard</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Kamalesh Babulal</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Kamalesh Babulal</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Mamatha</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-odd"><td>Mamatha</td>
+<td>1 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>1 (0.3%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>1 (0.3%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most changed lines</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>7491 (34.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>7491 (34.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>4821 (22.1%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>4821 (22.1%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>4740 (21.7%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>4740 (21.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>1294 (5.9%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>1294 (5.9%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>620 (2.8%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>620 (2.8%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>470 (2.2%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>470 (2.2%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>338 (1.6%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>338 (1.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Shreyas B. Prabhu</p></td>
-<td><p>330 (1.5%)</p></td>
+<tr class="row-odd"><td>Shreyas B. Prabhu</td>
+<td>330 (1.5%)</td>
</tr>
-<tr class="row-even"><td><p>Vipin K Parashar</p></td>
-<td><p>305 (1.4%)</p></td>
+<tr class="row-even"><td>Vipin K Parashar</td>
+<td>305 (1.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>295 (1.4%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>295 (1.4%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>229 (1.1%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>229 (1.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Philippe Bergheaud</p></td>
-<td><p>170 (0.8%)</p></td>
+<tr class="row-odd"><td>Philippe Bergheaud</td>
+<td>170 (0.8%)</td>
</tr>
-<tr class="row-even"><td><p>Ian Munsie</p></td>
-<td><p>133 (0.6%)</p></td>
+<tr class="row-even"><td>Ian Munsie</td>
+<td>133 (0.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Dinar Valeev</p></td>
-<td><p>126 (0.6%)</p></td>
+<tr class="row-odd"><td>Dinar Valeev</td>
+<td>126 (0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Brad Bishop</p></td>
-<td><p>80 (0.4%)</p></td>
+<tr class="row-even"><td>Brad Bishop</td>
+<td>80 (0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>80 (0.4%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>80 (0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>62 (0.3%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>62 (0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Frederic Bonnard</p></td>
-<td><p>61 (0.3%)</p></td>
+<tr class="row-odd"><td>Frederic Bonnard</td>
+<td>61 (0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Sam Mendoza-Jonas</p></td>
-<td><p>32 (0.1%)</p></td>
+<tr class="row-even"><td>Sam Mendoza-Jonas</td>
+<td>32 (0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Chris Smart</p></td>
-<td><p>27 (0.1%)</p></td>
+<tr class="row-odd"><td>Chris Smart</td>
+<td>27 (0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>20 (0.1%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>20 (0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Patrick Williams</p></td>
-<td><p>18 (0.1%)</p></td>
+<tr class="row-odd"><td>Patrick Williams</td>
+<td>18 (0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Suraj Jitindar Singh</p></td>
-<td><p>17 (0.1%)</p></td>
+<tr class="row-even"><td>Suraj Jitindar Singh</td>
+<td>17 (0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Mamatha</p></td>
-<td><p>15 (0.1%)</p></td>
+<tr class="row-odd"><td>Mamatha</td>
+<td>15 (0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Mukesh Ojha</p></td>
-<td><p>8 (0.0%)</p></td>
+<tr class="row-even"><td>Mukesh Ojha</td>
+<td>8 (0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>8 (0.0%)</p></td>
+<tr class="row-odd"><td>Mahesh Salgaonkar</td>
+<td>8 (0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Joel Stanley</p></td>
-<td><p>4 (0.0%)</p></td>
+<tr class="row-even"><td>Joel Stanley</td>
+<td>4 (0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Balbir Singh</p></td>
-<td><p>4 (0.0%)</p></td>
+<tr class="row-odd"><td>Balbir Singh</td>
+<td>4 (0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Kamalesh Babulal</p></td>
-<td><p>2 (0.0%)</p></td>
+<tr class="row-even"><td>Kamalesh Babulal</td>
+<td>2 (0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Deb McLemore</p></td>
-<td><p>1 (0.0%)</p></td>
+<tr class="row-odd"><td>Deb McLemore</td>
+<td>1 (0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>1 (0.0%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>1 (0.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most lines removed</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Dinar Valeev</p></td>
-<td><p>68 (1.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Dinar Valeev</td>
+<td>68 (1.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Patrick Williams</p></td>
-<td><p>10 (0.2%)</p></td>
+<tr class="row-odd"><td>Patrick Williams</td>
+<td>10 (0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Mukesh Ojha</p></td>
-<td><p>4 (0.1%)</p></td>
+<tr class="row-even"><td>Mukesh Ojha</td>
+<td>4 (0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Kamalesh Babulal</p></td>
-<td><p>1 (0.0%)</p></td>
+<tr class="row-odd"><td>Kamalesh Babulal</td>
+<td>1 (0.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most signoffs (total 249)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>236 (94.8%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>236 (94.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>6 (2.4%)</p></td>
+<tr class="row-odd"><td>Vaidyanathan Srinivasan</td>
+<td>6 (2.4%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>3 (1.2%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>3 (1.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>2 (0.8%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>2 (0.8%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>1 (0.4%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>1 (0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Vipin K Parashar</p></td>
-<td><p>1 (0.4%)</p></td>
+<tr class="row-odd"><td>Vipin K Parashar</td>
+<td>1 (0.4%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most reviews (total 53)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>11 (20.8%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>11 (20.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>9 (17.0%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>9 (17.0%)</td>
</tr>
-<tr class="row-even"><td><p>Joel Stanley</p></td>
-<td><p>7 (13.2%)</p></td>
+<tr class="row-even"><td>Joel Stanley</td>
+<td>7 (13.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>7 (13.2%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>7 (13.2%)</td>
</tr>
-<tr class="row-even"><td><p>Mukesh Ojha</p></td>
-<td><p>5 (9.4%)</p></td>
+<tr class="row-even"><td>Mukesh Ojha</td>
+<td>5 (9.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>3 (5.7%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>3 (5.7%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>2 (3.8%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>2 (3.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>2 (3.8%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>2 (3.8%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>2 (3.8%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>2 (3.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>1 (1.9%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>1 (1.9%)</td>
</tr>
-<tr class="row-even"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>1 (1.9%)</p></td>
+<tr class="row-even"><td>Vaidyanathan Srinivasan</td>
+<td>1 (1.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Vipin K Parashar</p></td>
-<td><p>1 (1.9%)</p></td>
+<tr class="row-odd"><td>Vipin K Parashar</td>
+<td>1 (1.9%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Barrat</p></td>
-<td><p>1 (1.9%)</p></td>
+<tr class="row-even"><td>Frederic Barrat</td>
+<td>1 (1.9%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>1 (1.9%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>1 (1.9%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most test credits (total 4)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>2 (50.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>2 (50.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>1 (25.0%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>1 (25.0%)</td>
</tr>
-<tr class="row-even"><td><p>Vaibhav Jain</p></td>
-<td><p>1 (25.0%)</p></td>
+<tr class="row-even"><td>Vaibhav Jain</td>
+<td>1 (25.0%)</td>
</tr>
</tbody>
</table>
<p>Developers who gave the most tested-by credits (total 4)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>3 (75.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Michael Neuling</td>
+<td>3 (75.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>1 (25.0%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>1 (25.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most report credits (total 5)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Mukesh Ojha</p></td>
-<td><p>2 (40.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Mukesh Ojha</td>
+<td>2 (40.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>1 (20.0%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>1 (20.0%)</td>
</tr>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>1 (20.0%)</p></td>
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>1 (20.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Balbir Singh</p></td>
-<td><p>1 (20.0%)</p></td>
+<tr class="row-odd"><td>Balbir Singh</td>
+<td>1 (20.0%)</td>
</tr>
</tbody>
</table>
<p>Developers who gave the most report credits (total 5)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 32%" />
+<col width="68%" />
+<col width="32%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>2 (40.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Gavin Shan</td>
+<td>2 (40.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>2 (40.0%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>2 (40.0%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>1 (20.0%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>1 (20.0%)</td>
</tr>
</tbody>
</table>
@@ -708,7 +714,6 @@ A total of 20887 lines added, 4540 removed (delta 16347)</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -748,15 +753,17 @@ A total of 20887 lines added, 4540 removed (delta 16347)</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -773,15 +780,14 @@ A total of 20887 lines added, 4540 removed (delta 16347)</p>
<li class="right" >
<a href="skiboot-5.3.0.html" title="skiboot-5.3.0"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.0-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.3.0-rc2.html b/doc/release-notes/skiboot-5.3.0-rc2.html
index 0fdda4e..fef9b19 100644
--- a/doc/release-notes/skiboot-5.3.0-rc2.html
+++ b/doc/release-notes/skiboot-5.3.0-rc2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.3.0-rc2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.3.0-rc2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.3.0-rc1.html" title="skiboot-5.3.0-rc1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.0-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,23 +53,23 @@
<div class="section" id="pflash">
<h2>pflash<a class="headerlink" href="#pflash" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>pflash: Clean up makefiles and resolve build race</p></li>
-<li><p>pflash: use atexit for musl compatibility</p></li>
+<li>pflash: Clean up makefiles and resolve build race</li>
+<li>pflash: use atexit for musl compatibility</li>
</ul>
</div>
<div class="section" id="general">
<h2>General<a class="headerlink" href="#general" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>core/flash: Fix passing pointer instead of value</p></li>
+<li>core/flash: Fix passing pointer instead of value</li>
</ul>
</div>
<div class="section" id="power9">
<h2>POWER9<a class="headerlink" href="#power9" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><dl class="simple">
-<dt>mambo: Update Radix Tree Size as per ISA 3.0</dt><dd><p>In Linux we recently changed to this encoding, so we no longer boot.
-The associated Linux commit is b23d9c5b9c83c05e013aa52460f12a8365062cf4</p>
-</dd>
+<li><dl class="first docutils">
+<dt>mambo: Update Radix Tree Size as per ISA 3.0</dt>
+<dd>In Linux we recently changed to this encoding, so we no longer boot.
+The associated Linux commit is b23d9c5b9c83c05e013aa52460f12a8365062cf4</dd>
</dl>
</li>
</ul>
@@ -76,23 +77,22 @@ The associated Linux commit is b23d9c5b9c83c05e013aa52460f12a8365062cf4</p>
<div class="section" id="fsp-platforms">
<h2>FSP Platforms<a class="headerlink" href="#fsp-platforms" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>platforms/ibm-fsp: Fix incorrect struct member access and comparison</p></li>
-<li><p>FSP/MDST: Fix TCE alignment issue
+<li>platforms/ibm-fsp: Fix incorrect struct member access and comparison</li>
+<li>FSP/MDST: Fix TCE alignment issue
In some corner cases (like source memory size = 4097) we may
-endup doing wrong mapping and corrupting part of SYSDUMP.</p></li>
-<li><p>hdat/vpd: Add chip-id property to processor chip node under vpd</p></li>
+endup doing wrong mapping and corrupting part of SYSDUMP.</li>
+<li>hdat/vpd: Add chip-id property to processor chip node under vpd</li>
</ul>
</div>
<div class="section" id="capi">
<h2>CAPI<a class="headerlink" href="#capi" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>hw/phb3: Increase AIB TX command credit for DMA read in CAPP DMA mode</p></li>
+<li>hw/phb3: Increase AIB TX command credit for DMA read in CAPP DMA mode</li>
</ul>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -124,15 +124,17 @@ endup doing wrong mapping and corrupting part of SYSDUMP.</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -149,15 +151,14 @@ endup doing wrong mapping and corrupting part of SYSDUMP.</p></li>
<li class="right" >
<a href="skiboot-5.3.0-rc1.html" title="skiboot-5.3.0-rc1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.0-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.3.0.html b/doc/release-notes/skiboot-5.3.0.html
index 30dcbd6..21d83fc 100644
--- a/doc/release-notes/skiboot-5.3.0.html
+++ b/doc/release-notes/skiboot-5.3.0.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.3.0 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.3.0 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.2.5.html" title="skiboot-5.2.5"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -58,7 +59,6 @@ list of changes from skiboot-5.3.0.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -78,15 +78,17 @@ list of changes from skiboot-5.3.0.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -103,15 +105,14 @@ list of changes from skiboot-5.3.0.</p>
<li class="right" >
<a href="skiboot-5.2.5.html" title="skiboot-5.2.5"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.3.1.html b/doc/release-notes/skiboot-5.3.1.html
index adb3c5b..ddcd649 100644
--- a/doc/release-notes/skiboot-5.3.1.html
+++ b/doc/release-notes/skiboot-5.3.1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.3.1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.3.1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.3.0-rc2.html" title="skiboot-5.3.0-rc2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -55,42 +56,41 @@ a few minor bug fixes.</p>
<p>Over skiboot-5.3.0, the following fixes are included:</p>
<p>FSP systems:</p>
<ul class="simple">
-<li><dl class="simple">
-<dt>FSP/ELOG: elog_enable flag should be false by default</dt><dd><p>This issue is one of the corner case, which is related to recent change
+<li><dl class="first docutils">
+<dt>FSP/ELOG: elog_enable flag should be false by default</dt>
+<dd>This issue is one of the corner case, which is related to recent change
went upstream and only observed in the petitboot prompt, where we see
only one error log instead of getting all error log in
-/sys/firmware/opal/elog.</p>
-</dd>
+/sys/firmware/opal/elog.</dd>
</dl>
</li>
</ul>
<p>NVLink systems (i.e. Garrison):</p>
<ul class="simple">
-<li><dl class="simple">
-<dt>npu: reword “error” to indicate it’s actually a warning</dt><dd><p>Without this patch, you get spurious FirmWare Test Suite (FWTS) warnings
+<li><dl class="first docutils">
+<dt>npu: reword “error” to indicate it’s actually a warning</dt>
+<dd>Without this patch, you get spurious FirmWare Test Suite (FWTS) warnings
about NVLink not working on machines that aren’t fully populated with
-GPUs.</p>
-</dd>
+GPUs.</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>hmi: Clean up NPU FIR debug messages</dt><dd><p>With the skiboot log set to debug, the FIR (and related registers) were
+<li><dl class="first docutils">
+<dt>hmi: Clean up NPU FIR debug messages</dt>
+<dd>With the skiboot log set to debug, the FIR (and related registers) were
logged all in the same message. It was too much for one line, didn’t
-clarify if the numbers were in hex, and didn’t show leading zeroes.</p>
-</dd>
+clarify if the numbers were in hex, and didn’t show leading zeroes.</dd>
</dl>
</li>
</ul>
<p>General:</p>
<ul class="simple">
-<li><p>asm: Fix backtrace for unexpected exception</p></li>
-<li><p>correct the log level from PR_ERROR down to PR_INFO for some skiboot
-log messages.</p></li>
+<li>asm: Fix backtrace for unexpected exception</li>
+<li>correct the log level from PR_ERROR down to PR_INFO for some skiboot
+log messages.</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -110,15 +110,17 @@ log messages.</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -135,15 +137,14 @@ log messages.</p></li>
<li class="right" >
<a href="skiboot-5.3.0-rc2.html" title="skiboot-5.3.0-rc2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.3.2.html b/doc/release-notes/skiboot-5.3.2.html
index 317d1fd..afe178a 100644
--- a/doc/release-notes/skiboot-5.3.2.html
+++ b/doc/release-notes/skiboot-5.3.2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.3.2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.3.2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.3.1.html" title="skiboot-5.3.1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,24 +54,23 @@ skiboot (first released with 5.3.0 on August 2nd, 2016).</p>
a few minor bug fixes.</p>
<p>Over skiboot-5.3.1, the following fixes are included:</p>
<ul class="simple">
-<li><p>opal/hmi: Fix a TOD HMI failure during a race condition.
-Rare race condition which meant we wouldn’t recover from TOD error</p></li>
-<li><p>lpc: Log LPC SYNC errors as unrecoverable ones for manufacturing
+<li>opal/hmi: Fix a TOD HMI failure during a race condition.
+Rare race condition which meant we wouldn’t recover from TOD error</li>
+<li>lpc: Log LPC SYNC errors as unrecoverable ones for manufacturing
Only affects systems in manufacturing mode.
-No behaviour change when not in manufacturing mode.</p></li>
-<li><p>hw/phb3: Update capi initialization sequence
+No behaviour change when not in manufacturing mode.</li>
+<li>hw/phb3: Update capi initialization sequence
The capi initialization sequence was revised in a circumvention
document when a â€link down’ error was converted from fatal to Endpoint
Recoverable. Other, non-capi, register setup was corrected even before
the initial open-source release of skiboot, but a few capi-related
registers were not updated then, so this patch fixes it.
The point is that a link-down error detected by the UTL logic will
-lead to an AIB fence, so that the CAPP unit can detect the error.</p></li>
+lead to an AIB fence, so that the CAPP unit can detect the error.</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -90,15 +90,17 @@ lead to an AIB fence, so that the CAPP unit can detect the error.</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -115,15 +117,14 @@ lead to an AIB fence, so that the CAPP unit can detect the error.</p></li>
<li class="right" >
<a href="skiboot-5.3.1.html" title="skiboot-5.3.1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.3.3.html b/doc/release-notes/skiboot-5.3.3.html
index 4365843..b0c35ad 100644
--- a/doc/release-notes/skiboot-5.3.3.html
+++ b/doc/release-notes/skiboot-5.3.3.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.3.3 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.3.3 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.3.2.html" title="skiboot-5.3.2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,17 +54,16 @@ skiboot (first released with 5.3.0 on August 2nd, 2016).</p>
two bug fixes for machines utilizing the NPU (i.e. Garrison)</p>
<p>Over skiboot-5.3.2, the following fixes are included:</p>
<ul class="simple">
-<li><p>hw/npu: assert the NPU irq min is aligned.</p></li>
-<li><p>hw/npu: program NPU BUID reg properly
+<li>hw/npu: assert the NPU irq min is aligned.</li>
+<li>hw/npu: program NPU BUID reg properly
The NPU BUID register was incorrectly programmed resulting in npu
interrupt level 0 causing a PB_CENT_CRESP_ADDR_ERROR checkstop,
and irqs from npus in odd chips being aliased to and processed
-as the interrupts from the corresponding npu on the even chips.</p></li>
+as the interrupts from the corresponding npu on the even chips.</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -83,15 +83,17 @@ as the interrupts from the corresponding npu on the even chips.</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -108,15 +110,14 @@ as the interrupts from the corresponding npu on the even chips.</p></li>
<li class="right" >
<a href="skiboot-5.3.2.html" title="skiboot-5.3.2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.3.4.html b/doc/release-notes/skiboot-5.3.4.html
index 89473cb..0c4f335 100644
--- a/doc/release-notes/skiboot-5.3.4.html
+++ b/doc/release-notes/skiboot-5.3.4.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.3.4 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.3.4 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.3.3.html" title="skiboot-5.3.3"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,20 +54,19 @@ skiboot (first released with 5.3.0 on August 2nd, 2016).</p>
a couple of bug fixes, specifically around failing XSCOMs.</p>
<p>Over skiboot-5.3.3, the following fixes are included:</p>
<ul class="simple">
-<li><p>xscom: Initialize the data to a known value in xscom_read
+<li>xscom: Initialize the data to a known value in xscom_read
In case of error, don’t leave the data random. It helps debugging when
the user fails to check the error code. This happens due to a bug in the
-PRD wrapper app.</p></li>
-<li><p>xscom: Map all HMER status codes to OPAL errors</p></li>
-<li><p>centaur: Mark centaur offline after 10 consecutive access errors
+PRD wrapper app.</li>
+<li>xscom: Map all HMER status codes to OPAL errors</li>
+<li>centaur: Mark centaur offline after 10 consecutive access errors
This avoids spamming the logs when the centaur is dead and PRD
-constantly tries to access it</p></li>
-<li><p>nvlink: Fix bad PE number check in error inject code path (&lt;= rather than &lt;)</p></li>
+constantly tries to access it</li>
+<li>nvlink: Fix bad PE number check in error inject code path (&lt;= rather than &lt;)</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -86,15 +86,17 @@ constantly tries to access it</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -111,15 +113,14 @@ constantly tries to access it</p></li>
<li class="right" >
<a href="skiboot-5.3.3.html" title="skiboot-5.3.3"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.3.5.html b/doc/release-notes/skiboot-5.3.5.html
index 41b4698..19f33bc 100644
--- a/doc/release-notes/skiboot-5.3.5.html
+++ b/doc/release-notes/skiboot-5.3.5.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.3.5 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.3.5 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.3.4.html" title="skiboot-5.3.4"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,14 +54,13 @@ skiboot (first released with 5.3.0 on August 2nd, 2016).</p>
a couple of minor bug fixes: simply clarifying two error messages.</p>
<p>Over skiboot-5.3.4, the following fixes are included:</p>
<ul class="simple">
-<li><p>centaur: print message on disabling xscoms to centaur due to many errors</p></li>
-<li><p>slw: improve error message for SLW timer stuck
-We still register dump, but only to in memory console buffer by default.</p></li>
+<li>centaur: print message on disabling xscoms to centaur due to many errors</li>
+<li>slw: improve error message for SLW timer stuck
+We still register dump, but only to in memory console buffer by default.</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -80,15 +80,17 @@ We still register dump, but only to in memory console buffer by default.</p></li
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -105,15 +107,14 @@ We still register dump, but only to in memory console buffer by default.</p></li
<li class="right" >
<a href="skiboot-5.3.4.html" title="skiboot-5.3.4"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.3.6.html b/doc/release-notes/skiboot-5.3.6.html
index 87a2aad..20b65c0 100644
--- a/doc/release-notes/skiboot-5.3.6.html
+++ b/doc/release-notes/skiboot-5.3.6.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.3.6 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.3.6 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.3.5.html" title="skiboot-5.3.5"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.6</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,14 +54,13 @@ skiboot (first released with 5.3.0 on August 2nd, 2016).</p>
one minor bug fix.</p>
<p>Over skiboot-5.3.5, the following fixes are included:</p>
<ul class="simple">
-<li><p>SLW: Actually print the register dump only to memory
+<li>SLW: Actually print the register dump only to memory
A fix in 5.3.5 was only partially correct, we still had the log priority
-incorrect for dumping of the SLW registers.</p></li>
+incorrect for dumping of the SLW registers.</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -80,15 +80,17 @@ incorrect for dumping of the SLW registers.</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -105,15 +107,14 @@ incorrect for dumping of the SLW registers.</p></li>
<li class="right" >
<a href="skiboot-5.3.5.html" title="skiboot-5.3.5"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.6</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.3.7.html b/doc/release-notes/skiboot-5.3.7.html
index 0e8d012..0cd7660 100644
--- a/doc/release-notes/skiboot-5.3.7.html
+++ b/doc/release-notes/skiboot-5.3.7.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.3.7 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.3.7 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.3.6.html" title="skiboot-5.3.6"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.7</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -55,22 +56,24 @@ adapters to not be detected.</p>
<p>Over skiboot-5.3.6, the following fixes are included:</p>
<p>PCI:</p>
<ul>
-<li><dl>
-<dt>pci: Avoid hot resets at boot time</dt><dd><p>In the PCI post-fundamental reset code, a hot reset is performed at the
+<li><dl class="first docutils">
+<dt>pci: Avoid hot resets at boot time</dt>
+<dd><p class="first">In the PCI post-fundamental reset code, a hot reset is performed at the
end. This is causing issues at boot time as a reset signal is being sent
downstream before the links are up, which is causing issues on adapters
behind switches. No errors result in skiboot, but the adapters are not
usable in Linux as a result.</p>
-<p>This patch fixes some adapters not being configurable in Linux on some
+<p class="last">This patch fixes some adapters not being configurable in Linux on some
systems. The issue was not present in skiboot 5.2.x.</p>
</dd>
</dl>
</li>
-<li><dl>
-<dt>core/pci: Fix the power-off timeout in pci_slot_power_off()</dt><dd><p>The timeout should be 1000ms instead of 1000 ticks while powering
+<li><dl class="first docutils">
+<dt>core/pci: Fix the power-off timeout in pci_slot_power_off()</dt>
+<dd><p class="first">The timeout should be 1000ms instead of 1000 ticks while powering
off PCI slot in pci_slot_power_off(). Otherwise, it’s likely to
hit timeout powering off the PCI slot as below skiboot logs reveal:</p>
-<p>[47912590456,5] SkiBoot skiboot-5.3.6 starting…
+<p class="last">[47912590456,5] SkiBoot skiboot-5.3.6 starting…
(snip)
[5399532365,7] PHB#0005:02:11.0 Bus 0f..ff scanning…
[5399540804,7] PHB#0005:02:11.0 No card in slot
@@ -82,8 +85,9 @@ hit timeout powering off the PCI slot as below skiboot logs reveal:</p>
</ul>
<p>PRD:</p>
<ul>
-<li><dl class="simple">
-<dt>occ/prd/opal-prd: Queue OCC_RESET event message to host in OpenPOWER</dt><dd><p>During an OCC reset cycle the system is forced to Psafe pstate.
+<li><dl class="first docutils">
+<dt>occ/prd/opal-prd: Queue OCC_RESET event message to host in OpenPOWER</dt>
+<dd><p class="first last">During an OCC reset cycle the system is forced to Psafe pstate.
When OCC becomes active, the system has to be restored to its
last pstate as requested by host. So host needs to be notified
of OCC_RESET event or else system will continue to remian in
@@ -92,8 +96,9 @@ reset cycle.</p>
</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>opal-prd: Fix error code from scom_read &amp; scom_write</dt><dd><p>Currently, we always return a zero value from scom_read &amp; scom_write,
+<li><dl class="first docutils">
+<dt>opal-prd: Fix error code from scom_read &amp; scom_write</dt>
+<dd><p class="first last">Currently, we always return a zero value from scom_read &amp; scom_write,
so the HBRT implementation has no way of detecting errors during scom
operations.
This change uses the actual return value from the scom operation from
@@ -101,10 +106,11 @@ the kernel instead.</p>
</dd>
</dl>
</li>
-<li><dl>
-<dt>opal-prd: Add get_interface_capabilities to host interfaces</dt><dd><p>We need a way to indicate behaviour changes &amp; fixes in the prd
+<li><dl class="first docutils">
+<dt>opal-prd: Add get_interface_capabilities to host interfaces</dt>
+<dd><p class="first">We need a way to indicate behaviour changes &amp; fixes in the prd
interface, without requiring a major version bump.</p>
-<p>This change introduces the get_interface_capabilities callback,
+<p class="last">This change introduces the get_interface_capabilities callback,
returning a bitmask of capability flags, pertaining to â€sets’ of
capabilities. We currently return 0 for all.</p>
</dd>
@@ -113,18 +119,19 @@ capabilities. We currently return 0 for all.</p>
</ul>
<p>IBM FSP Platforms:</p>
<ul class="simple">
-<li><p>platforms/firenze: Fix clock frequency dt property</p></li>
-<li><p>platforms/firence: HDAT: Fix typo in nest-frequency property</p></li>
+<li>platforms/firenze: Fix clock frequency dt property</li>
+<li>platforms/firence: HDAT: Fix typo in nest-frequency property</li>
</ul>
<p>NVLink:</p>
<ul>
-<li><dl>
-<dt>hw/npu.c: Fix reserved PE#</dt><dd><p>Currently the reserved PE is set to NPU_NUM_OF_PES, which is one
+<li><dl class="first docutils">
+<dt>hw/npu.c: Fix reserved PE#</dt>
+<dd><p class="first">Currently the reserved PE is set to NPU_NUM_OF_PES, which is one
greater than the maximum PE resulting in the following kernel errors
at boot:</p>
<p>[ 0.000000] pnv_ioda_reserve_pe: Invalid PE 4 on PHB#4
[ 0.000000] pnv_ioda_reserve_pe: Invalid PE 4 on PHB#5</p>
-<p>Due to a HW errata PE#0 is already reserved in the kernel, so update
+<p class="last">Due to a HW errata PE#0 is already reserved in the kernel, so update
the opal-reserved-pe device-tree property to match this.</p>
</dd>
</dl>
@@ -133,7 +140,6 @@ the opal-reserved-pe device-tree property to match this.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -153,15 +159,17 @@ the opal-reserved-pe device-tree property to match this.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -178,15 +186,14 @@ the opal-reserved-pe device-tree property to match this.</p>
<li class="right" >
<a href="skiboot-5.3.6.html" title="skiboot-5.3.6"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.3.7</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.4.0-rc1.html b/doc/release-notes/skiboot-5.4.0-rc1.html
index 56a68c6..a26cbc1 100644
--- a/doc/release-notes/skiboot-5.4.0-rc1.html
+++ b/doc/release-notes/skiboot-5.4.0-rc1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.4.0-rc1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.4.0-rc1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.4.0.html" title="skiboot-5.4.0"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.0-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -59,24 +60,24 @@ is due by November 23rd 2016.</p>
<div class="section" id="new-features">
<h2>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Initial Trusted Boot support (see <a class="reference internal" href="../stb.html#stb-overview"><span class="std std-ref">Secure and Trusted Boot Library (LibSTB) Documentation</span></a>).
+<li><p class="first">Initial Trusted Boot support (see <a class="reference internal" href="../stb.html#stb-overview"><span class="std std-ref">Secure and Trusted Boot Library (LibSTB) Documentation</span></a>).
There are several limitations with this initial release:</p>
<blockquote>
<div><ul class="simple">
-<li><p>CAPP partition is not measured correctly</p></li>
-<li><p>Only Nuvoton TPM 2.0 is supported</p></li>
-<li><p>Requires hardware rework on late revision Habanero or Firestone boards
-in order to install TPM.</p></li>
+<li>CAPP partition is not measured correctly</li>
+<li>Only Nuvoton TPM 2.0 is supported</li>
+<li>Requires hardware rework on late revision Habanero or Firestone boards
+in order to install TPM.</li>
</ul>
</div></blockquote>
<ul class="simple">
-<li><p>Add i2c Nuvoton TPM 2.0 Driver</p></li>
-<li><p>romcode driver for POWER8 secure ROM</p></li>
-<li><p>See Device tree docs for tpm and ibm,secureboot nodes</p></li>
-<li><p>See main secure and trusted boot documentation.</p></li>
+<li>Add i2c Nuvoton TPM 2.0 Driver</li>
+<li>romcode driver for POWER8 secure ROM</li>
+<li>See Device tree docs for tpm and ibm,secureboot nodes</li>
+<li>See main secure and trusted boot documentation.</li>
</ul>
</li>
-<li><p>Fast reboot for P8</p>
+<li><p class="first">Fast reboot for P8</p>
<p>This makes reboot take an <em>awful</em> lot less time, somewhere between four
and ten times faster than a full IPL. It is currently experimental and not
enabled by default.
@@ -88,36 +89,37 @@ You can enable the experimental support via nvram option:</p>
in CAPI mode, we will currently <em>NOT</em> reset it back to plain PCI. There
are also some known issues in most simulators.</p>
</li>
-<li><p>Support <code class="docutils literal notranslate"><span class="pre">ibm,skiboot</span></code> NVRAM partition with skiboot configuration options.</p>
+<li><p class="first">Support <code class="docutils literal notranslate"><span class="pre">ibm,skiboot</span></code> NVRAM partition with skiboot configuration options.</p>
<ul class="simple">
-<li><p>These should generally only be used if you either completely know what
+<li>These should generally only be used if you either completely know what
you are doing or need to work around a skiboot bug. They are <strong>not</strong>
-intended for end users.</p></li>
-<li><p>Add support for supplying the kernel boot arguments from the <code class="docutils literal notranslate"><span class="pre">bootargs</span></code>
-configuration string in the <code class="docutils literal notranslate"><span class="pre">ibm,skiboot</span></code> NVRAM partition.</p></li>
-<li><p>Enabling the experimental fast reset feature is done via this method.</p></li>
+intended for end users.</li>
+<li>Add support for supplying the kernel boot arguments from the <code class="docutils literal notranslate"><span class="pre">bootargs</span></code>
+configuration string in the <code class="docutils literal notranslate"><span class="pre">ibm,skiboot</span></code> NVRAM partition.</li>
+<li>Enabling the experimental fast reset feature is done via this method.</li>
</ul>
</li>
-<li><p>Add support for nap mode on P8 while in skiboot</p>
+<li><p class="first">Add support for nap mode on P8 while in skiboot</p>
<ul class="simple">
-<li><p>While nap has been exposed to the Operating System since day 1, we have
+<li>While nap has been exposed to the Operating System since day 1, we have
not utilized low power states when in skiboot itself, leading to higher
power consumption during boot.
We only enable the functionality after the 0x100 vector has been
-patched, and we disable it before transferring control to Linux.</p></li>
+patched, and we disable it before transferring control to Linux.</li>
</ul>
</li>
-<li><p>libflash: add 128MB MX66L1G45G part</p></li>
-<li><p>Pointer validation of OPAL API call arguments.</p>
+<li><p class="first">libflash: add 128MB MX66L1G45G part</p>
+</li>
+<li><p class="first">Pointer validation of OPAL API call arguments.</p>
<ul class="simple">
-<li><p>If the kernel called an OPAL API with vmalloc’d address
+<li>If the kernel called an OPAL API with vmalloc’d address
or any other address range in real mode, we would hit
a problem with aliasing. Since the top 4 bits are ignored
in real mode, pointers from 0xc.. and 0xd.. (and other ranges)
could collide and lead to hard to solve bugs. This patch
adds the infrastructure for pointer validation and a simple
-test case for testing the API</p></li>
-<li><p>The checks validate pointers sent in using <code class="docutils literal notranslate"><span class="pre">opal_addr_valid()</span></code></p></li>
+test case for testing the API</li>
+<li>The checks validate pointers sent in using <code class="docutils literal notranslate"><span class="pre">opal_addr_valid()</span></code></li>
</ul>
</li>
</ul>
@@ -143,85 +145,100 @@ included in the Device Tree Specification.</p>
<div class="section" id="general">
<h2>General<a class="headerlink" href="#general" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Make console-log time more readable: seconds rather than timebase
-Log format is now <code class="docutils literal notranslate"><span class="pre">[SECONDS.(tb%512000000),LEVEL]</span></code></p></li>
-<li><p>Flash (PNOR) code improvements</p>
+<li><p class="first">Make console-log time more readable: seconds rather than timebase
+Log format is now <code class="docutils literal notranslate"><span class="pre">[SECONDS.(tb%512000000),LEVEL]</span></code></p>
+</li>
+<li><p class="first">Flash (PNOR) code improvements</p>
<ul class="simple">
-<li><p>flash: Make size 64 bit safe
+<li>flash: Make size 64 bit safe
This makes the size of flash 64 bit safe so that we can have flash
devices greater than 4GB. This is especially useful for mambo disks
-passed through to Linux.</p></li>
-<li><p>core/flash.c: load actual partition size
+passed through to Linux.</li>
+<li>core/flash.c: load actual partition size
We are downloading 0x20000 bytes from PNOR for CAPP, but currently the
-CAPP lid is only 40K.</p></li>
-<li><p>flash: Rework error paths and messages for multiple flash controllers
+CAPP lid is only 40K.</li>
+<li>flash: Rework error paths and messages for multiple flash controllers
Now that we have mambo bogusdisk flash, we can have many flash chips.
-This is resulting in some confusing output messages.</p></li>
+This is resulting in some confusing output messages.</li>
</ul>
</li>
-<li><p>core/init: Fix “failure of getting node in the free list” warning on boot.</p></li>
-<li><p>slw: improve error message for SLW timer stuck</p></li>
-<li><p>Centaur / XSCOM error handling</p>
+<li><p class="first">core/init: Fix “failure of getting node in the free list” warning on boot.</p>
+</li>
+<li><p class="first">slw: improve error message for SLW timer stuck</p>
+</li>
+<li><p class="first">Centaur / XSCOM error handling</p>
<ul class="simple">
-<li><p>print message on disabling xscoms to centaur due to many errors</p></li>
-<li><p>Mark centaur offline after 10 consecutive access errors</p></li>
+<li>print message on disabling xscoms to centaur due to many errors</li>
+<li>Mark centaur offline after 10 consecutive access errors</li>
</ul>
</li>
-<li><p>XSCOM improvements</p>
+<li><p class="first">XSCOM improvements</p>
<ul class="simple">
-<li><p>xscom: Map all HMER status codes to OPAL errors</p></li>
-<li><p>xscom: Initialize the data to a known value in <code class="docutils literal notranslate"><span class="pre">xscom_read</span></code>
+<li>xscom: Map all HMER status codes to OPAL errors</li>
+<li>xscom: Initialize the data to a known value in <code class="docutils literal notranslate"><span class="pre">xscom_read</span></code>
In case of error, don’t leave the data random. It helps debugging when
the user fails to check the error code. This happens due to a bug in the
-PRD wrapper app.</p></li>
-<li><p>chip: Add a quirk for when core direct control XSCOMs are missing</p></li>
+PRD wrapper app.</li>
+<li>chip: Add a quirk for when core direct control XSCOMs are missing</li>
</ul>
</li>
-<li><p>p8-i2c: Don’t crash if a centaur errored out</p></li>
-<li><p>cpu: Make endian switch message more informative</p></li>
-<li><p>cpu: Display number of started CPUs during boot</p></li>
-<li><p>core/init: ensure that HRMOR is zero at boot</p></li>
-<li><p>asm: Fix backtrace for unexpected exception</p></li>
-<li><p>cpu: Remove pollers calling heuristics from <code class="docutils literal notranslate"><span class="pre">cpu_wait_job</span></code>
+<li><p class="first">p8-i2c: Don’t crash if a centaur errored out</p>
+</li>
+<li><p class="first">cpu: Make endian switch message more informative</p>
+</li>
+<li><p class="first">cpu: Display number of started CPUs during boot</p>
+</li>
+<li><p class="first">core/init: ensure that HRMOR is zero at boot</p>
+</li>
+<li><p class="first">asm: Fix backtrace for unexpected exception</p>
+</li>
+<li><p class="first">cpu: Remove pollers calling heuristics from <code class="docutils literal notranslate"><span class="pre">cpu_wait_job</span></code>
This will be handled by <code class="docutils literal notranslate"><span class="pre">time_wait_ms()</span></code>. Also remove a useless
<code class="docutils literal notranslate"><span class="pre">smt_medium()</span></code>.
Note that this introduce a difference in behaviour: time_wait
will only call the pollers on the boot CPU while <code class="docutils literal notranslate"><span class="pre">cpu_wait_job()</span></code>
could call them on any. However, I can’t think of a case where
-this is a problem.</p></li>
-<li><p>cpu: Remove global job queue
+this is a problem.</p>
+</li>
+<li><p class="first">cpu: Remove global job queue
Instead, target a specific CPU for a global job at queuing time.
This will allow us to wake up the target using an interrupt when
implementing nap mode.
The algorithm used is to look for idle primary threads first, then
idle secondaries, and finally the less loaded thread. If nothing can
-be found, we fallback to a synchronous call.</p></li>
-<li><p>lpc: Log LPC SYNC errors as unrecoverable ones for manufacturing</p></li>
-<li><p>lpc: Optimize SerIRQ dispatch based on which PSI IRQ fired</p></li>
-<li><dl>
-<dt>interrupts: Add new source <code class="docutils literal notranslate"><span class="pre">-&gt;attributes()</span></code> callback</dt><dd><p>This allows a given source to provide per-interrupt attributes
+be found, we fallback to a synchronous call.</p>
+</li>
+<li><p class="first">lpc: Log LPC SYNC errors as unrecoverable ones for manufacturing</p>
+</li>
+<li><p class="first">lpc: Optimize SerIRQ dispatch based on which PSI IRQ fired</p>
+</li>
+<li><dl class="first docutils">
+<dt>interrupts: Add new source <code class="docutils literal notranslate"><span class="pre">-&gt;attributes()</span></code> callback</dt>
+<dd><p class="first">This allows a given source to provide per-interrupt attributes
such as whether it targets OPAL or Linux and it’s estimated
frequency.</p>
-<p>The former allows to get rid of the double set of ops used to
+<p class="last">The former allows to get rid of the double set of ops used to
decide which interrupts go where on some modules like the PHBs
and the latter will be eventually used to implement smart
caching of the source lookups.</p>
</dd>
</dl>
</li>
-<li><p>opal/hmi: Fix a TOD HMI failure during a race condition.</p></li>
-<li><p>platform: Add BT to Generic platform</p></li>
+<li><p class="first">opal/hmi: Fix a TOD HMI failure during a race condition.</p>
+</li>
+<li><p class="first">platform: Add BT to Generic platform</p>
+</li>
</ul>
</div>
<div class="section" id="nvram">
<h2>NVRAM<a class="headerlink" href="#nvram" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Support <code class="docutils literal notranslate"><span class="pre">ibm,skiboot</span></code> partition for skiboot specific configuration options</p></li>
-<li><dl class="simple">
-<dt>flash: Size NVRAM based on ECC for OpenPOWER platforms</dt><dd><p>If NVRAM has ECC (as per the ffs header) then the actual size of the
+<li>Support <code class="docutils literal notranslate"><span class="pre">ibm,skiboot</span></code> partition for skiboot specific configuration options</li>
+<li><dl class="first docutils">
+<dt>flash: Size NVRAM based on ECC for OpenPOWER platforms</dt>
+<dd>If NVRAM has ECC (as per the ffs header) then the actual size of the
partition is less than reported by the ffs header in the PNOR then the
-actual size of the partition is less than reported by the ffs header.</p>
-</dd>
+actual size of the partition is less than reported by the ffs header.</dd>
</dl>
</li>
</ul>
@@ -229,31 +246,31 @@ actual size of the partition is less than reported by the ffs header.</p>
<div class="section" id="nvlink-npu">
<h2>NVLink/NPU<a class="headerlink" href="#nvlink-npu" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Fix reserved PE#</p></li>
-<li><p>NPU bdfn allocation bugfix</p></li>
-<li><dl class="simple">
-<dt>Fix bad PE number check</dt><dd><p>NPUs have 4 PEs which are zero indexed, so {0, 1, 2, 3}. A bad PE number
+<li>Fix reserved PE#</li>
+<li>NPU bdfn allocation bugfix</li>
+<li><dl class="first docutils">
+<dt>Fix bad PE number check</dt>
+<dd>NPUs have 4 PEs which are zero indexed, so {0, 1, 2, 3}. A bad PE number
check in npu_err_inject checks if the PE number is greater than 4 as a
-fail case, so it would wrongly perform operations on a non-existant PE 4.</p>
-</dd>
+fail case, so it would wrongly perform operations on a non-existant PE 4.</dd>
</dl>
</li>
-<li><p>Use PCI virtual device</p></li>
-<li><p>assert the NPU irq min is aligned.</p></li>
-<li><p>program NPU BUID reg properly</p></li>
-<li><dl class="simple">
-<dt>npu: reword “error” to indicate it’s actually a warning</dt><dd><p>Incorrect FWTS annotation.
+<li>Use PCI virtual device</li>
+<li>assert the NPU irq min is aligned.</li>
+<li>program NPU BUID reg properly</li>
+<li><dl class="first docutils">
+<dt>npu: reword “error” to indicate it’s actually a warning</dt>
+<dd>Incorrect FWTS annotation.
Without this patch, you get spurious FirmWare Test Suite (FWTS) warnings
about NVLink not working on machines that aren’t fully populated with
-GPUs.</p>
-</dd>
+GPUs.</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>external: NPU hardware procedure script</dt><dd><p>Performing NPU hardware procedures requires some config space magic.
+<li><dl class="first docutils">
+<dt>external: NPU hardware procedure script</dt>
+<dd>Performing NPU hardware procedures requires some config space magic.
Put all that magic into a script, so you can just specify the target
-device and the procedure number.</p>
-</dd>
+device and the procedure number.</dd>
</dl>
</li>
</ul>
@@ -261,21 +278,29 @@ device and the procedure number.</p>
<div class="section" id="pci">
<h2>PCI<a class="headerlink" href="#pci" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Generic fixes</p>
+<li><p class="first">Generic fixes</p>
<ul>
-<li><p>Claim surprise hotplug capability</p></li>
-<li><p>Reserve PCI buses for RC’s slot</p></li>
-<li><p>Update PCI topology after power change</p></li>
-<li><p>Return slot cached power state</p></li>
-<li><p>Cache power state on slot without power control</p></li>
-<li><p>Avoid hot resets at boot time</p></li>
-<li><p>Fix initial PCIe slot power state</p></li>
-<li><p>Print CRS retry times
+<li><p class="first">Claim surprise hotplug capability</p>
+</li>
+<li><p class="first">Reserve PCI buses for RC’s slot</p>
+</li>
+<li><p class="first">Update PCI topology after power change</p>
+</li>
+<li><p class="first">Return slot cached power state</p>
+</li>
+<li><p class="first">Cache power state on slot without power control</p>
+</li>
+<li><p class="first">Avoid hot resets at boot time</p>
+</li>
+<li><p class="first">Fix initial PCIe slot power state</p>
+</li>
+<li><p class="first">Print CRS retry times
It’s useful to know the CRS retry times before the PCI device is
detected successfully. In PCI hot add case, it usually indicates
time consumed for the adapter’s firmware to be partially ready
-(responsive PCI config space).</p></li>
-<li><p>core/pci: Fix the power-off timeout in <code class="docutils literal notranslate"><span class="pre">pci_slot_power_off()</span></code>
+(responsive PCI config space).</p>
+</li>
+<li><p class="first">core/pci: Fix the power-off timeout in <code class="docutils literal notranslate"><span class="pre">pci_slot_power_off()</span></code>
The timeout should be 1000ms instead of 1000 ticks while powering
off PCI slot in <code class="docutils literal notranslate"><span class="pre">pci_slot_power_off()</span></code>. Otherwise, it’s likely to
hit timeout powering off the PCI slot as below skiboot logs reveal:</p>
@@ -285,17 +310,17 @@ hit timeout powering off the PCI slot as below skiboot logs reveal:</p>
</li>
</ul>
</li>
-<li><p>PHB3</p>
+<li><p class="first">PHB3</p>
<ul class="simple">
-<li><p>Override root slot’s <code class="docutils literal notranslate"><span class="pre">prepare_link_change()</span></code> with PHB’s</p></li>
-<li><p>Disable surprise link down event on PCI slots</p></li>
-<li><p>Disable ECRC on Broadcom adapter behind PMC switch</p></li>
+<li>Override root slot’s <code class="docutils literal notranslate"><span class="pre">prepare_link_change()</span></code> with PHB’s</li>
+<li>Disable surprise link down event on PCI slots</li>
+<li>Disable ECRC on Broadcom adapter behind PMC switch</li>
</ul>
</li>
-<li><p>astbmc platforms</p>
+<li><p class="first">astbmc platforms</p>
<ul class="simple">
-<li><p>Support dynamic PCI slot. We might insert a PCIe switch to PHB direct slot
-and the downstream ports of the PCIe switch supports PCI hotplug.</p></li>
+<li>Support dynamic PCI slot. We might insert a PCIe switch to PHB direct slot
+and the downstream ports of the PCIe switch supports PCI hotplug.</li>
</ul>
</li>
</ul>
@@ -303,13 +328,13 @@ and the downstream ports of the PCIe switch supports PCI hotplug.</p></li>
<div class="section" id="capi">
<h2>CAPI<a class="headerlink" href="#capi" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><dl class="simple">
-<dt>hw/phb3: Update capi initialization sequence</dt><dd><p>The capi initialization sequence was revised in a circumvention
+<li><dl class="first docutils">
+<dt>hw/phb3: Update capi initialization sequence</dt>
+<dd>The capi initialization sequence was revised in a circumvention
document when a â€link down’ error was converted from fatal to Endpoint
Recoverable. Other, non-capi, register setup was corrected even before
the initial open-source release of skiboot, but a few capi-related
-registers were not updated then, so this patch fixes it.</p>
-</dd>
+registers were not updated then, so this patch fixes it.</dd>
</dl>
</li>
</ul>
@@ -317,10 +342,10 @@ registers were not updated then, so this patch fixes it.</p>
<div class="section" id="ipmi">
<h2>IPMI<a class="headerlink" href="#ipmi" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><dl class="simple">
-<dt>core/ipmi: Set interrupt-parent property</dt><dd><p>This allows ipmi-opal to properly use the OPAL irqchip rather than
-falling back to the event interface in Linux.</p>
-</dd>
+<li><dl class="first docutils">
+<dt>core/ipmi: Set interrupt-parent property</dt>
+<dd>This allows ipmi-opal to properly use the OPAL irqchip rather than
+falling back to the event interface in Linux.</dd>
</dl>
</li>
</ul>
@@ -328,50 +353,51 @@ falling back to the event interface in Linux.</p>
<div class="section" id="mambo-simulator">
<h2>Mambo Simulator<a class="headerlink" href="#mambo-simulator" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Helpers for POWER9 Mambo.</p></li>
-<li><p>mambo: Advertise available RADIX page sizes</p></li>
-<li><p>mambo: Add section for kernel command line boot args
+<li>Helpers for POWER9 Mambo.</li>
+<li>mambo: Advertise available RADIX page sizes</li>
+<li>mambo: Add section for kernel command line boot args
Users can set kernel command line boot arguments for Mambo in a tcl
-script.</p></li>
-<li><p>mambo: add exception and qtrace helpers</p></li>
-<li><p>external/mambo: Update skiboot.tcl to add page-sizes nodes to device tree</p></li>
+script.</li>
+<li>mambo: add exception and qtrace helpers</li>
+<li>external/mambo: Update skiboot.tcl to add page-sizes nodes to device tree</li>
</ul>
</div>
<div class="section" id="simics-simulator">
<h2>Simics Simulator<a class="headerlink" href="#simics-simulator" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>chiptod: Enable ChipTOD in SIMICS</p></li>
+<li>chiptod: Enable ChipTOD in SIMICS</li>
</ul>
</div>
<div class="section" id="utilities">
<h2>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>pflash</p>
+<li><p class="first">pflash</p>
<ul class="simple">
-<li><p>fix harmless buffer overflow: <code class="docutils literal notranslate"><span class="pre">fl_total_size</span></code> was <code class="docutils literal notranslate"><span class="pre">uint32_t</span></code> not <code class="docutils literal notranslate"><span class="pre">uint64_t</span></code>.</p></li>
-<li><p>Don’t try to write protect when writing to flash file</p></li>
-<li><p>Misc small improvements to code and code style</p></li>
-<li><p>makefile bug fixes</p></li>
+<li>fix harmless buffer overflow: <code class="docutils literal notranslate"><span class="pre">fl_total_size</span></code> was <code class="docutils literal notranslate"><span class="pre">uint32_t</span></code> not <code class="docutils literal notranslate"><span class="pre">uint64_t</span></code>.</li>
+<li>Don’t try to write protect when writing to flash file</li>
+<li>Misc small improvements to code and code style</li>
+<li>makefile bug fixes</li>
</ul>
</li>
-<li><p>external/boot_tests</p>
+<li><p class="first">external/boot_tests</p>
<ul class="simple">
-<li><p>remove lid from the BMC after flashing</p></li>
-<li><p>add the nobooting option -N</p></li>
-<li><p>add arbitrary lid option -F</p></li>
+<li>remove lid from the BMC after flashing</li>
+<li>add the nobooting option -N</li>
+<li>add arbitrary lid option -F</li>
</ul>
</li>
-<li><dl>
-<dt><code class="docutils literal notranslate"><span class="pre">getscom</span></code> / <code class="docutils literal notranslate"><span class="pre">getsram</span></code> / <code class="docutils literal notranslate"><span class="pre">putscom</span></code>: Parse chip-id as hex</dt><dd><p>We print the chip-id in hex (without a leading 0x), but we fail to
+<li><dl class="first docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">getscom</span></code> / <code class="docutils literal notranslate"><span class="pre">getsram</span></code> / <code class="docutils literal notranslate"><span class="pre">putscom</span></code>: Parse chip-id as hex</dt>
+<dd><p class="first">We print the chip-id in hex (without a leading 0x), but we fail to
parse that same value correctly in <code class="docutils literal notranslate"><span class="pre">getscom</span></code> / <code class="docutils literal notranslate"><span class="pre">getsram</span></code> / <code class="docutils literal notranslate"><span class="pre">putscom</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># getscom -l</span>
<span class="o">...</span>
-<span class="mi">80000000</span> <span class="o">|</span> <span class="n">DD2</span><span class="mf">.0</span> <span class="o">|</span> <span class="n">Centaur</span> <span class="n">memory</span> <span class="n">buffer</span>
+<span class="mi">80000000</span> <span class="o">|</span> <span class="n">DD2</span><span class="o">.</span><span class="mi">0</span> <span class="o">|</span> <span class="n">Centaur</span> <span class="n">memory</span> <span class="n">buffer</span>
<span class="c1"># getscom -c 80000000 201140a</span>
<span class="n">Error</span> <span class="o">-</span><span class="mi">19</span> <span class="n">reading</span> <span class="n">XSCOM</span>
</pre></div>
</div>
-<p>Fix this by assuming base 16 when parsing chip-id.</p>
+<p class="last">Fix this by assuming base 16 when parsing chip-id.</p>
</dd>
</dl>
</li>
@@ -380,17 +406,17 @@ parse that same value correctly in <code class="docutils literal notranslate"><s
<div class="section" id="prd">
<h2>PRD<a class="headerlink" href="#prd" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>opal-prd: Fix error code from <code class="docutils literal notranslate"><span class="pre">scom_read</span></code> and <code class="docutils literal notranslate"><span class="pre">scom_write</span></code></p></li>
-<li><p>opal-prd: Add get_interface_capabilities to host interfaces</p></li>
-<li><p>opal-prd: fix for 64-bit pnor sizes</p></li>
-<li><dl class="simple">
-<dt>occ/prd/opal-prd: Queue OCC_RESET event message to host in OpenPOWER</dt><dd><p>During an OCC reset cycle the system is forced to Psafe pstate.
+<li>opal-prd: Fix error code from <code class="docutils literal notranslate"><span class="pre">scom_read</span></code> and <code class="docutils literal notranslate"><span class="pre">scom_write</span></code></li>
+<li>opal-prd: Add get_interface_capabilities to host interfaces</li>
+<li>opal-prd: fix for 64-bit pnor sizes</li>
+<li><dl class="first docutils">
+<dt>occ/prd/opal-prd: Queue OCC_RESET event message to host in OpenPOWER</dt>
+<dd>During an OCC reset cycle the system is forced to Psafe pstate.
When OCC becomes active, the system has to be restored to its
last pstate as requested by host. So host needs to be notified
of OCC_RESET event or else system will continue to remian in
Psafe state until host requests a new pstate after the OCC
-reset cycle.</p>
-</dd>
+reset cycle.</dd>
</dl>
</li>
</ul>
@@ -398,40 +424,45 @@ reset cycle.</p>
<div class="section" id="ibm-fsp-based-platforms">
<h2>IBM FSP Based Platforms<a class="headerlink" href="#ibm-fsp-based-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><dl class="simple">
-<dt>fsp/console: Allocate irq for each hvc console</dt><dd><p>Allocate an irq number for each hvc console and set its interrupt-parent
+<li><dl class="first docutils">
+<dt>fsp/console: Allocate irq for each hvc console</dt>
+<dd><p class="first last">Allocate an irq number for each hvc console and set its interrupt-parent
property so that Linux can use the opal irqchip instead of the
OPAL_EVENT_CONSOLE_INPUT interface.</p>
</dd>
</dl>
</li>
-<li><p>platforms/firenze: Fix clock frequency dt property:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">1.212366090</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span> <span class="n">DT</span><span class="p">:</span> <span class="n">Unexpected</span> <span class="nb">property</span> <span class="n">length</span> <span class="o">/</span><span class="n">xscom</span><span class="o">@</span><span class="mi">3</span><span class="n">fc0000000000</span><span class="o">/</span><span class="n">i2cm</span><span class="nd">@a0020</span><span class="o">/</span><span class="n">clock</span><span class="o">-</span><span class="n">frequency</span>
+<li><p class="first">platforms/firenze: Fix clock frequency dt property:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">1.212366090</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span> <span class="n">DT</span><span class="p">:</span> <span class="n">Unexpected</span> <span class="nb">property</span> <span class="n">length</span> <span class="o">/</span><span class="n">xscom</span><span class="nd">@3fc0000000000</span><span class="o">/</span><span class="n">i2cm</span><span class="nd">@a0020</span><span class="o">/</span><span class="n">clock</span><span class="o">-</span><span class="n">frequency</span>
</pre></div>
</div>
</li>
-<li><dl class="simple">
-<dt>HDAT: Fix typo in nest-frequency property</dt><dd><p>nest-frquency -&gt; nest-frequency</p>
+<li><dl class="first docutils">
+<dt>HDAT: Fix typo in nest-frequency property</dt>
+<dd><p class="first last">nest-frquency -&gt; nest-frequency</p>
</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>platforms/ibm-fsp: Use power_ctl bit when determining slot reset method</dt><dd><p>The power_ctl bit is used to represent if power management is available.
+<li><dl class="first docutils">
+<dt>platforms/ibm-fsp: Use power_ctl bit when determining slot reset method</dt>
+<dd><p class="first last">The power_ctl bit is used to represent if power management is available.
If power_ctl is set to true, then the I2C based external power management
functionality will be populated on the PCI slot. Otherwise we will try to
use the inband PERST as the fundamental reset, as before.</p>
</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>FSP/ELOG: Fix elog timeout issue</dt><dd><p>Presently we set timeout value as soon as we add elog to queue. If
+<li><dl class="first docutils">
+<dt>FSP/ELOG: Fix elog timeout issue</dt>
+<dd><p class="first last">Presently we set timeout value as soon as we add elog to queue. If
we have multiple elogs to write, it doesn’t consider queue wait time.
Instead set timeout value when we are actually sending elog to FSP.</p>
</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>FSP/ELOG: elog_enable flag should be false by default</dt><dd><p>This issue is one of the corner case, which is related to recent change
+<li><dl class="first docutils">
+<dt>FSP/ELOG: elog_enable flag should be false by default</dt>
+<dd><p class="first last">This issue is one of the corner case, which is related to recent change
went upstream and only observed in the petitboot prompt, where we see
only one error log instead of getting all error log in
<code class="docutils literal notranslate"><span class="pre">/sys/firmware/opal/elog</span></code>.</p>
@@ -443,115 +474,115 @@ only one error log instead of getting all error log in
<div class="section" id="power9">
<h2>POWER9<a class="headerlink" href="#power9" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>mambo: Make POWER9 look like DD2</p></li>
-<li><dl class="simple">
-<dt>flash: Move flash node under <code class="docutils literal notranslate"><span class="pre">ibm,opal/flash/</span></code></dt><dd><p>This changes the boot ABI, so it’s only active for P9 and later systems,
+<li>mambo: Make POWER9 look like DD2</li>
+<li><dl class="first docutils">
+<dt>flash: Move flash node under <code class="docutils literal notranslate"><span class="pre">ibm,opal/flash/</span></code></dt>
+<dd>This changes the boot ABI, so it’s only active for P9 and later systems,
even though it’s unrelated to hardware changes. There is an associated
-Linux change to properly search for this node as well.</p>
-</dd>
+Linux change to properly search for this node as well.</dd>
</dl>
</li>
-<li><p>core/cpu.c: Add OPAL call to setup Nest MMU</p></li>
-<li><p>psi: On p9, create an interrupt-map for routing PSI interrupts</p></li>
-<li><p>lpc: Add P9 LPC interrupts support</p></li>
-<li><p>chiptod: Basic P9 support</p></li>
-<li><p>psi: Add P9 support</p></li>
+<li>core/cpu.c: Add OPAL call to setup Nest MMU</li>
+<li>psi: On p9, create an interrupt-map for routing PSI interrupts</li>
+<li>lpc: Add P9 LPC interrupts support</li>
+<li>chiptod: Basic P9 support</li>
+<li>psi: Add P9 support</li>
</ul>
</div>
<div class="section" id="testing-and-debugging">
<h2>Testing and Debugging<a class="headerlink" href="#testing-and-debugging" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>test/qemu: bump qemu version used in CI, adds IPMI support</p></li>
-<li><p>platform/qemu: add BT and IPMI support
-Enables testing BT and IPMI functionality in the Qemu simulator</p></li>
-<li><p>init: In debug builds, enable debug output to console</p></li>
-<li><dl class="simple">
-<dt>mem_region: Be a bit smarter about poisoning</dt><dd><p>Don’t poison chunks that are already free and poison regions on
-first allocation. This speeds things up dramatically.</p>
-</dd>
+<li>test/qemu: bump qemu version used in CI, adds IPMI support</li>
+<li>platform/qemu: add BT and IPMI support
+Enables testing BT and IPMI functionality in the Qemu simulator</li>
+<li>init: In debug builds, enable debug output to console</li>
+<li><dl class="first docutils">
+<dt>mem_region: Be a bit smarter about poisoning</dt>
+<dd>Don’t poison chunks that are already free and poison regions on
+first allocation. This speeds things up dramatically.</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>libc: Use 8-bytes stores for non-0 memset too</dt><dd><p>Memory poisoning hammers this, so let’s be a bit smart about it and
-avoid falling back to byte stores when the data is not 0</p>
-</dd>
+<li><dl class="first docutils">
+<dt>libc: Use 8-bytes stores for non-0 memset too</dt>
+<dd>Memory poisoning hammers this, so let’s be a bit smart about it and
+avoid falling back to byte stores when the data is not 0</dd>
</dl>
</li>
-<li><p>fwts: add annotation for manufacturing mode</p></li>
-<li><p>check: Fix bugs in mem region tests</p></li>
-<li><dl class="simple">
-<dt>Don’t set -fstack-protector-all unconditionally</dt><dd><p>We set it already in DEBUG builds and we use -fstack-protector-strong
+<li>fwts: add annotation for manufacturing mode</li>
+<li>check: Fix bugs in mem region tests</li>
+<li><dl class="first docutils">
+<dt>Don’t set -fstack-protector-all unconditionally</dt>
+<dd>We set it already in DEBUG builds and we use -fstack-protector-strong
in release builds which provides most of the benefits and is more
-efficient.</p>
-</dd>
+efficient.</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>Build host programs (and checks) with debug enabled</dt><dd><p>This enables memory poisoning in allocations and list checking
-among other things.</p>
-</dd>
+<li><dl class="first docutils">
+<dt>Build host programs (and checks) with debug enabled</dt>
+<dd>This enables memory poisoning in allocations and list checking
+among other things.</dd>
</dl>
</li>
-<li><p>Add global DEBUG make flag</p></li>
+<li>Add global DEBUG make flag</li>
</ul>
</div>
<div class="section" id="contributors">
<h2>Contributors<a class="headerlink" href="#contributors" title="Permalink to this headline">¶</a></h2>
<p>Extending the analysis done for the last few releases, we can see our trends
in code review across versions:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 19%" />
-<col style="width: 14%" />
-<col style="width: 17%" />
-<col style="width: 17%" />
-<col style="width: 14%" />
-<col style="width: 19%" />
+<col width="19%" />
+<col width="14%" />
+<col width="17%" />
+<col width="17%" />
+<col width="14%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Release</p></th>
-<th class="head"><p>csets</p></th>
-<th class="head"><p>Ack</p></th>
-<th class="head"><p>Reviews</p></th>
-<th class="head"><p>Tested</p></th>
-<th class="head"><p>Reported</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Release</th>
+<th class="head">csets</th>
+<th class="head">Ack</th>
+<th class="head">Reviews</th>
+<th class="head">Tested</th>
+<th class="head">Reported</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>5.0</p></td>
-<td><p>329</p></td>
-<td><p>15</p></td>
-<td><p>20</p></td>
-<td><p>1</p></td>
-<td><p>0</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.1</p></td>
-<td><p>372</p></td>
-<td><p>13</p></td>
-<td><p>38</p></td>
-<td><p>1</p></td>
-<td><p>4</p></td>
-</tr>
-<tr class="row-even"><td><p>5.2-rc1</p></td>
-<td><p>334</p></td>
-<td><p>20</p></td>
-<td><p>34</p></td>
-<td><p>6</p></td>
-<td><p>11</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.3-rc1</p></td>
-<td><p>302</p></td>
-<td><p>36</p></td>
-<td><p>53</p></td>
-<td><p>4</p></td>
-<td><p>5</p></td>
-</tr>
-<tr class="row-even"><td><p>5.4-rc1</p></td>
-<td><p>278</p></td>
-<td><p>8</p></td>
-<td><p>19</p></td>
-<td><p>0</p></td>
-<td><p>4</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>5.0</td>
+<td>329</td>
+<td>15</td>
+<td>20</td>
+<td>1</td>
+<td>0</td>
+</tr>
+<tr class="row-odd"><td>5.1</td>
+<td>372</td>
+<td>13</td>
+<td>38</td>
+<td>1</td>
+<td>4</td>
+</tr>
+<tr class="row-even"><td>5.2-rc1</td>
+<td>334</td>
+<td>20</td>
+<td>34</td>
+<td>6</td>
+<td>11</td>
+</tr>
+<tr class="row-odd"><td>5.3-rc1</td>
+<td>302</td>
+<td>36</td>
+<td>53</td>
+<td>4</td>
+<td>5</td>
+</tr>
+<tr class="row-even"><td>5.4-rc1</td>
+<td>278</td>
+<td>8</td>
+<td>19</td>
+<td>0</td>
+<td>4</td>
</tr>
</tbody>
</table>
@@ -560,448 +591,448 @@ but that is not indicative of the size or complexity of these changes.</p>
<p>Processed 278 csets from 31 developers
A total of 17052 lines added, 4745 removed (delta 12307)</p>
<p>Developers with the most changesets</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 75%" />
-<col style="width: 6%" />
-<col style="width: 19%" />
+<col width="75%" />
+<col width="6%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>71</p></td>
-<td><p>(25.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>71</td>
+<td>(25.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>50</p></td>
-<td><p>(18.0%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>50</td>
+<td>(18.0%)</td>
</tr>
-<tr class="row-even"><td><p>Claudio Carvalho</p></td>
-<td><p>38</p></td>
-<td><p>(13.7%)</p></td>
+<tr class="row-even"><td>Claudio Carvalho</td>
+<td>38</td>
+<td>(13.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>20</p></td>
-<td><p>(7.2%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>20</td>
+<td>(7.2%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>18</p></td>
-<td><p>(6.5%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>18</td>
+<td>(6.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Mukesh Ojha</p></td>
-<td><p>9</p></td>
-<td><p>(3.2%)</p></td>
+<tr class="row-odd"><td>Mukesh Ojha</td>
+<td>9</td>
+<td>(3.2%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>7</p></td>
-<td><p>(2.5%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>7</td>
+<td>(2.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>7</p></td>
-<td><p>(2.5%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>7</td>
+<td>(2.5%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>7</p></td>
-<td><p>(2.5%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>7</td>
+<td>(2.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>6</p></td>
-<td><p>(2.2%)</p></td>
+<tr class="row-odd"><td>Pridhiviraj Paidipeddi</td>
+<td>6</td>
+<td>(2.2%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>6</p></td>
-<td><p>(2.2%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>6</td>
+<td>(2.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>4</p></td>
-<td><p>(1.4%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>4</td>
+<td>(1.4%)</td>
</tr>
-<tr class="row-even"><td><p>Sam Mendoza-Jonas</p></td>
-<td><p>3</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-even"><td>Sam Mendoza-Jonas</td>
+<td>3</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Vipin K Parashar</p></td>
-<td><p>3</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-odd"><td>Vipin K Parashar</td>
+<td>3</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-even"><td><p>Balbir Singh</p></td>
-<td><p>3</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-even"><td>Balbir Singh</td>
+<td>3</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>3</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-odd"><td>Mahesh Salgaonkar</td>
+<td>3</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Barrat</p></td>
-<td><p>3</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-even"><td>Frederic Barrat</td>
+<td>3</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Chris Smart</p></td>
-<td><p>2</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-odd"><td>Chris Smart</td>
+<td>2</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-even"><td><p>Jack Miller</p></td>
-<td><p>2</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-even"><td>Jack Miller</td>
+<td>2</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Patrick Williams</p></td>
-<td><p>2</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-odd"><td>Patrick Williams</td>
+<td>2</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>2</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>2</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Suraj Jitindar Singh</p></td>
-<td><p>2</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-odd"><td>Suraj Jitindar Singh</td>
+<td>2</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-even"><td><p>Milton Miller</p></td>
-<td><p>2</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-even"><td>Milton Miller</td>
+<td>2</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Shilpasri G Bhat</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Shilpasri G Bhat</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Bonnard</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Frederic Bonnard</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Breno Leitao</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Breno Leitao</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Anton Blanchard</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Anton Blanchard</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Nicholas Piggin</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Nicholas Piggin</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Nageswara R Sastry</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Nageswara R Sastry</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>CĂ©dric Le Goater</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most changed lines</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Claudio Carvalho</p></td>
-<td><p>6817</p></td>
-<td><p>(38.2%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Claudio Carvalho</td>
+<td>6817</td>
+<td>(38.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>4677</p></td>
-<td><p>(26.2%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>4677</td>
+<td>(26.2%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>2586</p></td>
-<td><p>(14.5%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>2586</td>
+<td>(14.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>1005</p></td>
-<td><p>(5.6%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>1005</td>
+<td>(5.6%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>509</p></td>
-<td><p>(2.9%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>509</td>
+<td>(2.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Mukesh Ojha</p></td>
-<td><p>361</p></td>
-<td><p>(2.0%)</p></td>
+<tr class="row-odd"><td>Mukesh Ojha</td>
+<td>361</td>
+<td>(2.0%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>343</p></td>
-<td><p>(1.9%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>343</td>
+<td>(1.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>343</p></td>
-<td><p>(1.9%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>343</td>
+<td>(1.9%)</td>
</tr>
-<tr class="row-even"><td><p>Balbir Singh</p></td>
-<td><p>227</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-even"><td>Balbir Singh</td>
+<td>227</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>194</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-odd"><td>Pridhiviraj Paidipeddi</td>
+<td>194</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>121</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>121</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>115</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>115</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Vipin K Parashar</p></td>
-<td><p>68</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Vipin K Parashar</td>
+<td>68</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>66</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>66</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>65</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>65</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Shilpasri G Bhat</p></td>
-<td><p>45</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Shilpasri G Bhat</td>
+<td>45</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Suraj Jitindar Singh</p></td>
-<td><p>41</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-even"><td>Suraj Jitindar Singh</td>
+<td>41</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Nicholas Piggin</p></td>
-<td><p>34</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>Nicholas Piggin</td>
+<td>34</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Sam Mendoza-Jonas</p></td>
-<td><p>33</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-even"><td>Sam Mendoza-Jonas</td>
+<td>33</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Jack Miller</p></td>
-<td><p>32</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>Jack Miller</td>
+<td>32</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Nageswara R Sastry</p></td>
-<td><p>32</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-even"><td>Nageswara R Sastry</td>
+<td>32</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Jeremy Kerr</p></td>
-<td><p>23</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-odd"><td>Jeremy Kerr</td>
+<td>23</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>21</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>21</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Chris Smart</p></td>
-<td><p>20</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-odd"><td>Chris Smart</td>
+<td>20</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Milton Miller</p></td>
-<td><p>19</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-even"><td>Milton Miller</td>
+<td>19</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Patrick Williams</p></td>
-<td><p>11</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-odd"><td>Patrick Williams</td>
+<td>11</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Barrat</p></td>
-<td><p>6</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Frederic Barrat</td>
+<td>6</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Anton Blanchard</p></td>
-<td><p>3</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Anton Blanchard</td>
+<td>3</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Bonnard</p></td>
-<td><p>2</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Frederic Bonnard</td>
+<td>2</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>2</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>2</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Breno Leitao</p></td>
-<td><p>2</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Breno Leitao</td>
+<td>2</td>
+<td>(0.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most lines removed</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>299</p></td>
-<td><p>(6.3%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Cyril Bur</td>
+<td>299</td>
+<td>(6.3%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most signoffs (total 226)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>219</p></td>
-<td><p>(96.9%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>219</td>
+<td>(96.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>4</p></td>
-<td><p>(1.8%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>4</td>
+<td>(1.8%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Jeremy Kerr</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Jeremy Kerr</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most reviews (total 19)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Mukesh Ojha</p></td>
-<td><p>5</p></td>
-<td><p>(26.3%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Mukesh Ojha</td>
+<td>5</td>
+<td>(26.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>4</p></td>
-<td><p>(21.1%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>4</td>
+<td>(21.1%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>3</p></td>
-<td><p>(15.8%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>3</td>
+<td>(15.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>3</p></td>
-<td><p>(15.8%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>3</td>
+<td>(15.8%)</td>
</tr>
-<tr class="row-even"><td><p>Balbir Singh</p></td>
-<td><p>2</p></td>
-<td><p>(10.5%)</p></td>
+<tr class="row-even"><td>Balbir Singh</td>
+<td>2</td>
+<td>(10.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>1</p></td>
-<td><p>(5.3%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>1</td>
+<td>(5.3%)</td>
</tr>
-<tr class="row-even"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>1</p></td>
-<td><p>(5.3%)</p></td>
+<tr class="row-even"><td>Vaidyanathan Srinivasan</td>
+<td>1</td>
+<td>(5.3%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most test credits (total 0)</p>
<p>Developers who gave the most tested-by credits (total 0)</p>
<p>Developers with the most report credits (total 4)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>1</p></td>
-<td><p>(25.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>1</td>
+<td>(25.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Li Meng</p></td>
-<td><p>1</p></td>
-<td><p>(25.0%)</p></td>
+<tr class="row-odd"><td>Li Meng</td>
+<td>1</td>
+<td>(25.0%)</td>
</tr>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>1</p></td>
-<td><p>(25.0%)</p></td>
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>1</td>
+<td>(25.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>1</p></td>
-<td><p>(25.0%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>1</td>
+<td>(25.0%)</td>
</tr>
</tbody>
</table>
<p>Developers who gave the most report credits (total 4)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"></th>
-<th class="head"></th>
-<th class="head"></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">&#160;</th>
+<th class="head">&#160;</th>
+<th class="head">&#160;</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>1</p></td>
-<td><p>(25.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Gavin Shan</td>
+<td>1</td>
+<td>(25.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Vasant Hegde</p></td>
-<td><p>1</p></td>
-<td><p>(25.0%)</p></td>
+<tr class="row-odd"><td>Vasant Hegde</td>
+<td>1</td>
+<td>(25.0%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>1</p></td>
-<td><p>(25.0%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>1</td>
+<td>(25.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>1</p></td>
-<td><p>(25.0%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>1</td>
+<td>(25.0%)</td>
</tr>
</tbody>
</table>
@@ -1009,7 +1040,6 @@ A total of 17052 lines added, 4745 removed (delta 12307)</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -1052,15 +1082,17 @@ A total of 17052 lines added, 4745 removed (delta 12307)</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -1077,15 +1109,14 @@ A total of 17052 lines added, 4745 removed (delta 12307)</p>
<li class="right" >
<a href="skiboot-5.4.0.html" title="skiboot-5.4.0"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.0-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.4.0-rc2.html b/doc/release-notes/skiboot-5.4.0-rc2.html
index 7730376..4884242 100644
--- a/doc/release-notes/skiboot-5.4.0-rc2.html
+++ b/doc/release-notes/skiboot-5.4.0-rc2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.4.0-rc2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.4.0-rc2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.4.0-rc1.html" title="skiboot-5.4.0-rc1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.0-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -68,7 +69,7 @@ loaded from PNOR by skiboot (namely the CAPP and BOOTKERNEL partitions).</p>
use the libflash backend. It is <em>NOT</em> enabled on IBM FSP based systems.
There is some support for some simulators though.</p>
<ul>
-<li><p>libstb/stb.c: ignore the secure mode flag unless forced in NVRAM</p>
+<li><p class="first">libstb/stb.c: ignore the secure mode flag unless forced in NVRAM</p>
<p>For this stage in Trusted Boot development, we are wishing to not
force Secure Mode through the whole firmware boot process, but we
are wanting to be able to test it (classic chicken and egg problem with
@@ -93,7 +94,7 @@ boot process has gone through secure mode.</p>
<div class="section" id="command-line-arguments-to-bootkernel">
<h2>Command line arguments to BOOTKERNEL<a class="headerlink" href="#command-line-arguments-to-bootkernel" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>core/init.c: Fix bootargs parsing</p>
+<li><p class="first">core/init.c: Fix bootargs parsing</p>
<p>Currently the bootargs are unconditionally deleted, which causes
a bug where the bootargs passed in by the device tree are lost.</p>
<p>This patch deletes bootargs only if it needs to be replaced by the NVRAM
@@ -106,21 +107,24 @@ using the NVRAM or a device tree.</p>
<div class="section" id="pflash-utility">
<h2>pflash utility<a class="headerlink" href="#pflash-utility" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>external/pflash: Make MTD accesses the default</p>
+<li><p class="first">external/pflash: Make MTD accesses the default</p>
<p>Now that BMC and host kernel mtd drivers exist and have matured we
should use them by default.</p>
<p>This is especially important since we seem to be telling everyone to use
pflash (pflash world domination plans are continuing on schedule).</p>
</li>
-<li><p>external/pflash: Catch incompatible combination of flags</p></li>
-<li><p>external/common: arm: Don’t error trying to wrprotect with MTD access</p></li>
-<li><p>libflash/libffs: Use blocklevel_smart_write() when updating partitions</p></li>
+<li><p class="first">external/pflash: Catch incompatible combination of flags</p>
+</li>
+<li><p class="first">external/common: arm: Don’t error trying to wrprotect with MTD access</p>
+</li>
+<li><p class="first">libflash/libffs: Use blocklevel_smart_write() when updating partitions</p>
+</li>
</ul>
</div>
<div class="section" id="other-changes">
<h2>Other changes<a class="headerlink" href="#other-changes" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>extract-gcov: build with -m64 if compiler supports it.</p>
+<li><p class="first">extract-gcov: build with -m64 if compiler supports it.</p>
<p>Fixes build break on 32bit ppc64 (e.g. PowerMac G5, where user space
is mostly 32bit).</p>
</li>
@@ -129,7 +133,7 @@ is mostly 32bit).</p>
<div class="section" id="fast-reset">
<h2>Fast Reset<a class="headerlink" href="#fast-reset" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>fast-reset: disable fast reboot in event of platform error</p>
+<li><p class="first">fast-reset: disable fast reboot in event of platform error</p>
<p>Most of the time, if we’re rebooting due to a platform error, we should
trigger a checkstop. However, if we haven’t been told what we should do
to trigger a checkstop (e.g. on an FSP machine), then we should still
@@ -137,8 +141,9 @@ fail to fast-reboot.</p>
<p>So, disable fast-reboot in the OPAL_CEC_REBOOT2 code path
for OPAL_REBOOT_PLATFORM_ERROR reboot type.</p>
</li>
-<li><p>fast-reboot: disable on FSP code update or unrecoverable HMI</p></li>
-<li><p>fast-reboot: abort fast reboot if CAPP attached</p>
+<li><p class="first">fast-reboot: disable on FSP code update or unrecoverable HMI</p>
+</li>
+<li><p class="first">fast-reboot: abort fast reboot if CAPP attached</p>
<p>If a PHB is in CAPI mode, we cannot safely fast reboot - the PHB will be
fenced during the reboot resulting in major problems when we load the new
kernel.</p>
@@ -155,12 +160,12 @@ reboot instead.</p>
<h2>OpenPOWER Platforms<a class="headerlink" href="#openpower-platforms" title="Permalink to this headline">¶</a></h2>
<p>For all hardware platforms that aren’t IBM FSP machines:</p>
<ul>
-<li><p>Revert “flash: Move flash node under ibm,opal/flash/”</p>
+<li><p class="first">Revert “flash: Move flash node under ibm,opal/flash/”</p>
<p>This reverts commit e1e6d009860d0ef60f9daf7a0fbe15f869516bd0.</p>
<p>Breaks DT enough that it makes people cranky, reverting for now.
This could break access to flash with existing kernels in POWER9 simulators</p>
</li>
-<li><p>flash: rework flash_load_resource to correctly read FFS/STB</p>
+<li><p class="first">flash: rework flash_load_resource to correctly read FFS/STB</p>
<p>This fixes the previous reverts of loading the CAPP partition with
STB headers (which broke CAPP partitions without STB headers).</p>
<p>The new logic fixes both CAPP partition loading with STB headers <em>and</em>
@@ -189,7 +194,7 @@ that.</p>
<div class="section" id="pci">
<h2>PCI<a class="headerlink" href="#pci" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>pci: Check power state before powering off slot</p>
+<li><p class="first">pci: Check power state before powering off slot</p>
<p>Prevents the erroneous “Error -1 powering off slot” error message.</p>
</li>
</ul>
@@ -199,258 +204,258 @@ that.</p>
<p>Since <a class="reference internal" href="skiboot-5.4.0-rc1.html#skiboot-5-4-0-rc1"><span class="std std-ref">skiboot-5.4.0-rc1</span></a>, we have 23 csets from 8 developers.</p>
<p>A total of 876 lines added, 621 removed (delta 255)</p>
<p>Developers with the most changesets</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 78%" />
-<col style="width: 3%" />
-<col style="width: 19%" />
+<col width="78%" />
+<col width="3%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>7</p></td>
-<td><p>(30.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>7</td>
+<td>(30.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>5</p></td>
-<td><p>(21.7%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>5</td>
+<td>(21.7%)</td>
</tr>
-<tr class="row-even"><td><p>Mukesh Ojha</p></td>
-<td><p>3</p></td>
-<td><p>(13.0%)</p></td>
+<tr class="row-even"><td>Mukesh Ojha</td>
+<td>3</td>
+<td>(13.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>3</p></td>
-<td><p>(13.0%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>3</td>
+<td>(13.0%)</td>
</tr>
-<tr class="row-even"><td><p>Claudio Carvalho</p></td>
-<td><p>2</p></td>
-<td><p>(8.7%)</p></td>
+<tr class="row-even"><td>Claudio Carvalho</td>
+<td>2</td>
+<td>(8.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Chris Smart</p></td>
-<td><p>1</p></td>
-<td><p>(4.3%)</p></td>
+<tr class="row-odd"><td>Chris Smart</td>
+<td>1</td>
+<td>(4.3%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>1</p></td>
-<td><p>(4.3%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>1</td>
+<td>(4.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Nageswara R Sastry</p></td>
-<td><p>1</p></td>
-<td><p>(4.3%)</p></td>
+<tr class="row-odd"><td>Nageswara R Sastry</td>
+<td>1</td>
+<td>(4.3%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most changed lines</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>424</p></td>
-<td><p>(45.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>424</td>
+<td>(45.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Mukesh Ojha</p></td>
-<td><p>204</p></td>
-<td><p>(22.0%)</p></td>
+<tr class="row-odd"><td>Mukesh Ojha</td>
+<td>204</td>
+<td>(22.0%)</td>
</tr>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>173</p></td>
-<td><p>(18.6%)</p></td>
+<tr class="row-even"><td>Gavin Shan</td>
+<td>173</td>
+<td>(18.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>69</p></td>
-<td><p>(7.4%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>69</td>
+<td>(7.4%)</td>
</tr>
-<tr class="row-even"><td><p>Claudio Carvalho</p></td>
-<td><p>35</p></td>
-<td><p>(3.8%)</p></td>
+<tr class="row-even"><td>Claudio Carvalho</td>
+<td>35</td>
+<td>(3.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>13</p></td>
-<td><p>(1.4%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>13</td>
+<td>(1.4%)</td>
</tr>
-<tr class="row-even"><td><p>Chris Smart</p></td>
-<td><p>8</p></td>
-<td><p>(0.9%)</p></td>
+<tr class="row-even"><td>Chris Smart</td>
+<td>8</td>
+<td>(0.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Nageswara R Sastry</p></td>
-<td><p>2</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>Nageswara R Sastry</td>
+<td>2</td>
+<td>(0.2%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most lines removed</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 78%" />
-<col style="width: 3%" />
-<col style="width: 19%" />
+<col width="78%" />
+<col width="3%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>9</p></td>
-<td><p>(1.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Gavin Shan</td>
+<td>9</td>
+<td>(1.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Chris Smart</p></td>
-<td><p>4</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-odd"><td>Chris Smart</td>
+<td>4</td>
+<td>(0.6%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most signoffs (total 16)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 73%" />
-<col style="width: 5%" />
-<col style="width: 22%" />
+<col width="73%" />
+<col width="5%" />
+<col width="22%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>16</p></td>
-<td><p>(100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>16</td>
+<td>(100.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most reviews (total 4)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 78%" />
-<col style="width: 3%" />
-<col style="width: 19%" />
+<col width="78%" />
+<col width="3%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>2</p></td>
-<td><p>(50.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>2</td>
+<td>(50.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>2</p></td>
-<td><p>(50.0%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>2</td>
+<td>(50.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most test credits (total 1)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 76%" />
-<col style="width: 3%" />
-<col style="width: 22%" />
+<col width="76%" />
+<col width="3%" />
+<col width="22%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>1</p></td>
-<td><p>(100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>1</td>
+<td>(100.0%)</td>
</tr>
</tbody>
</table>
<p>Developers who gave the most tested-by credits (total 1)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 76%" />
-<col style="width: 3%" />
-<col style="width: 22%" />
+<col width="76%" />
+<col width="3%" />
+<col width="22%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>1</p></td>
-<td><p>(100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Gavin Shan</td>
+<td>1</td>
+<td>(100.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most report credits (total 3)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 78%" />
-<col style="width: 3%" />
-<col style="width: 19%" />
+<col width="78%" />
+<col width="3%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>1</p></td>
-<td><p>(33.3%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>1</td>
+<td>(33.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrei Warkenti</p></td>
-<td><p>1</p></td>
-<td><p>(33.3%)</p></td>
+<tr class="row-odd"><td>Andrei Warkenti</td>
+<td>1</td>
+<td>(33.3%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>1</p></td>
-<td><p>(33.3%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>1</td>
+<td>(33.3%)</td>
</tr>
</tbody>
</table>
<p>Developers who gave the most report credits (total 3)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 78%" />
-<col style="width: 3%" />
-<col style="width: 19%" />
+<col width="78%" />
+<col width="3%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>2</p></td>
-<td><p>(66.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>2</td>
+<td>(66.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>1</p></td>
-<td><p>(33.3%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>1</td>
+<td>(33.3%)</td>
</tr>
</tbody>
</table>
@@ -458,7 +463,6 @@ that.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -493,15 +497,17 @@ that.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -518,15 +524,14 @@ that.</p>
<li class="right" >
<a href="skiboot-5.4.0-rc1.html" title="skiboot-5.4.0-rc1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.0-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.4.0-rc3.html b/doc/release-notes/skiboot-5.4.0-rc3.html
index bc24e14..c612648 100644
--- a/doc/release-notes/skiboot-5.4.0-rc3.html
+++ b/doc/release-notes/skiboot-5.4.0-rc3.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.4.0-rc3 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.4.0-rc3 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.4.0-rc2.html" title="skiboot-5.4.0-rc2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.0-rc3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -58,29 +59,28 @@ feel good about it. The aim is for skiboot-5.4.x to be in op-build v1.13, which
is due by November 23rd 2016.</p>
<p>Over <a class="reference internal" href="skiboot-5.4.0-rc2.html#skiboot-5-4-0-rc2"><span class="std std-ref">skiboot-5.4.0-rc2</span></a>, we have a few changes:</p>
<ul class="simple">
-<li><p>pflash: Fail when file is larger than partition
-You can still shoot yourself in the foot by passing –force.</p></li>
-<li><p>core/flash: Don’t do anything clever for OPAL_FLASH_{READ, WRITE, ERASE}
+<li>pflash: Fail when file is larger than partition
+You can still shoot yourself in the foot by passing –force.</li>
+<li>core/flash: Don’t do anything clever for OPAL_FLASH_{READ, WRITE, ERASE}
This fixes a bug where opal-prd and opal-gard could fail.
-Fixes: <a class="reference external" href="https://github.com/open-power/skiboot/issues/44">https://github.com/open-power/skiboot/issues/44</a></p></li>
-<li><p>boot-tests: force BMC to boot from non-golden side</p></li>
-<li><p>fast-reset: Send special reset sequence to operational CPUs only.
-Fixes fast-reset for cases where there are garded CPUs</p></li>
-<li><p>Secure/Trusted boot: be much clearer about what is being measured where.</p></li>
-<li><p>Secure/Trusted boot: be more resilient to disabled TPM(s).</p></li>
-<li><p>Secure/Trusted boot: The <code class="docutils literal notranslate"><span class="pre">force-secure-mode</span></code> NVRAM setting introduced
+Fixes: <a class="reference external" href="https://github.com/open-power/skiboot/issues/44">https://github.com/open-power/skiboot/issues/44</a></li>
+<li>boot-tests: force BMC to boot from non-golden side</li>
+<li>fast-reset: Send special reset sequence to operational CPUs only.
+Fixes fast-reset for cases where there are garded CPUs</li>
+<li>Secure/Trusted boot: be much clearer about what is being measured where.</li>
+<li>Secure/Trusted boot: be more resilient to disabled TPM(s).</li>
+<li>Secure/Trusted boot: The <code class="docutils literal notranslate"><span class="pre">force-secure-mode</span></code> NVRAM setting introduced
temporarily in <a class="reference internal" href="skiboot-5.4.0-rc2.html#skiboot-5-4-0-rc2"><span class="std std-ref">skiboot-5.4.0-rc2</span></a> has changed behaviour. Now, by
default, the <code class="docutils literal notranslate"><span class="pre">secure-mode</span></code> flag in the device tree is obeyed. As always,
any skiboot NVRAM options are in no way ABI, API or supported and may cause
unfinished verbose analogies to appear in release notes relating to the
-dangers of using developer only options.</p></li>
-<li><p>gard: Fix compiler warning on modern GCC targetting ARM 32-bit</p></li>
-<li><p>opal-prd: systemd scripts improvements, only run on supported systems</p></li>
+dangers of using developer only options.</li>
+<li>gard: Fix compiler warning on modern GCC targetting ARM 32-bit</li>
+<li>opal-prd: systemd scripts improvements, only run on supported systems</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -100,15 +100,17 @@ dangers of using developer only options.</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -125,15 +127,14 @@ dangers of using developer only options.</p></li>
<li class="right" >
<a href="skiboot-5.4.0-rc2.html" title="skiboot-5.4.0-rc2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.0-rc3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.4.0-rc4.html b/doc/release-notes/skiboot-5.4.0-rc4.html
index 12c65b6..75bddcf 100644
--- a/doc/release-notes/skiboot-5.4.0-rc4.html
+++ b/doc/release-notes/skiboot-5.4.0-rc4.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.4.0-rc4 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.4.0-rc4 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.4.0-rc3.html" title="skiboot-5.4.0-rc3"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.0-rc4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -61,7 +62,7 @@ definition. The aim is for skiboot-5.4.x to be in op-build v1.13, which is due
by November 23rd 2016.</p>
<p>Over <a class="reference internal" href="skiboot-5.4.0-rc3.html#skiboot-5-4-0-rc3"><span class="std std-ref">skiboot-5.4.0-rc3</span></a>, we have a few changes:</p>
<ul>
-<li><p>Add BMC platform to enable correct OEM IPMI commands</p>
+<li><p class="first">Add BMC platform to enable correct OEM IPMI commands</p>
<p>An out of tree platform (p8dtu) uses a different IPMI OEM command
for IPMI_PARTIAL_ADD_ESEL. This exposed some assumptions about the BMC
implementation in our core code.</p>
@@ -70,22 +71,25 @@ that is present. We allow it to be set at runtime rather than purely
statically in struct platform as it’s possible to have differing BMC
implementations on the one machine (e.g. AMI BMC or OpenBMC).</p>
</li>
-<li><p>hw/ipmi-sensor: Fix setting of firmware progress sensor properly.</p>
+<li><p class="first">hw/ipmi-sensor: Fix setting of firmware progress sensor properly.</p>
<p>On FSP systems, OPAL was incorrectly setting firmware status
on a sensor id “00” which doesn’t exist.</p>
</li>
-<li><p>pflash: remove stray d in from info message</p></li>
-<li><p>libflash/pflash: support whole chip erase on mtd access</p></li>
-<li><p>boot_test: fix typo in console message</p></li>
-<li><p>core/pci: Fix criteria in pci_cfg_reg_filter(), i.e. NVLink didn’t work.</p></li>
-<li><p>Remove KERNEL_COMMAND_LINE mention from config.h</p>
+<li><p class="first">pflash: remove stray d in from info message</p>
+</li>
+<li><p class="first">libflash/pflash: support whole chip erase on mtd access</p>
+</li>
+<li><p class="first">boot_test: fix typo in console message</p>
+</li>
+<li><p class="first">core/pci: Fix criteria in pci_cfg_reg_filter(), i.e. NVLink didn’t work.</p>
+</li>
+<li><p class="first">Remove KERNEL_COMMAND_LINE mention from config.h</p>
<p>We removed the functionality but not the define.</p>
</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -105,15 +109,17 @@ on a sensor id “00” which doesn’t exist.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -130,15 +136,14 @@ on a sensor id “00” which doesn’t exist.</p>
<li class="right" >
<a href="skiboot-5.4.0-rc3.html" title="skiboot-5.4.0-rc3"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.0-rc4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.4.0.html b/doc/release-notes/skiboot-5.4.0.html
index 6f40f38..adf47b3 100644
--- a/doc/release-notes/skiboot-5.4.0.html
+++ b/doc/release-notes/skiboot-5.4.0.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.4.0 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.4.0 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.3.7.html" title="skiboot-5.3.7"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -56,14 +57,16 @@ and <a class="reference internal" href="skiboot-5.1.18.html#skiboot-5-1-18"><spa
releases work, see <a class="reference internal" href="../process/stable-skiboot-rules.html#stable-rules"><span class="std std-ref">Skiboot stable tree rules and releases</span></a> for details.</p>
<p>Over <a class="reference internal" href="skiboot-5.4.0-rc4.html#skiboot-5-4-0-rc4"><span class="std std-ref">skiboot-5.4.0-rc4</span></a>, we have a few changes:</p>
<ul>
-<li><p>libstb: bump up the byte timeout for tpm i2c requests</p>
+<li><p class="first">libstb: bump up the byte timeout for tpm i2c requests</p>
<p>This bumps up the byte timeout for tpm i2c requests from 10ms to 30ms.
Some p8dtu systems are getting i2c request timeout.</p>
</li>
-<li><p>external/pflash: Perform the correct cleanup when -F is used to operate on
-a file.</p></li>
-<li><p>Add SuperMicro p8dtu1u and p8dtu2u platforms</p></li>
-<li><p>Revert “core/ipmi: Set interrupt-parent property”.
+<li><p class="first">external/pflash: Perform the correct cleanup when -F is used to operate on
+a file.</p>
+</li>
+<li><p class="first">Add SuperMicro p8dtu1u and p8dtu2u platforms</p>
+</li>
+<li><p class="first">Revert “core/ipmi: Set interrupt-parent property”.
This reverts commit d997e482705d9fdff8e25fcbe07fb56008f96ae1 (introduced
in 5.4.0-rc1)</p>
<p>A problem was found with pre 4.2 linux kernels where a spurious WARNING
@@ -76,16 +79,17 @@ so we can just revert it.</p>
</pre></div>
</div>
</li>
-<li><p>libflash/libffs: Fix possible NULL dereference</p></li>
+<li><p class="first">libflash/libffs: Fix possible NULL dereference</p>
+</li>
</ul>
<div class="section" id="previous-release-candidates">
<h2>Previous Release Candidates<a class="headerlink" href="#previous-release-candidates" title="Permalink to this headline">¶</a></h2>
<p>There were four release candidates for skiboot 5.4.0:</p>
<ul class="simple">
-<li><p><a class="reference internal" href="skiboot-5.4.0-rc4.html#skiboot-5-4-0-rc4"><span class="std std-ref">skiboot-5.4.0-rc4</span></a></p></li>
-<li><p><a class="reference internal" href="skiboot-5.4.0-rc3.html#skiboot-5-4-0-rc3"><span class="std std-ref">skiboot-5.4.0-rc3</span></a></p></li>
-<li><p><a class="reference internal" href="skiboot-5.4.0-rc2.html#skiboot-5-4-0-rc2"><span class="std std-ref">skiboot-5.4.0-rc2</span></a></p></li>
-<li><p><a class="reference internal" href="skiboot-5.4.0-rc1.html#skiboot-5-4-0-rc1"><span class="std std-ref">skiboot-5.4.0-rc1</span></a></p></li>
+<li><a class="reference internal" href="skiboot-5.4.0-rc4.html#skiboot-5-4-0-rc4"><span class="std std-ref">skiboot-5.4.0-rc4</span></a></li>
+<li><a class="reference internal" href="skiboot-5.4.0-rc3.html#skiboot-5-4-0-rc3"><span class="std std-ref">skiboot-5.4.0-rc3</span></a></li>
+<li><a class="reference internal" href="skiboot-5.4.0-rc2.html#skiboot-5-4-0-rc2"><span class="std std-ref">skiboot-5.4.0-rc2</span></a></li>
+<li><a class="reference internal" href="skiboot-5.4.0-rc1.html#skiboot-5-4-0-rc1"><span class="std std-ref">skiboot-5.4.0-rc1</span></a></li>
</ul>
<div class="section" id="changes-since-skiboot-5-3">
<h3>Changes since skiboot 5.3<a class="headerlink" href="#changes-since-skiboot-5-3" title="Permalink to this headline">¶</a></h3>
@@ -95,56 +99,58 @@ so we can just revert it.</p>
<div class="section" id="new-features">
<h2>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Add SuperMicro p8dtu1u and p8dtu2u platforms</p></li>
-<li><p>Initial Trusted Boot support (see <a class="reference internal" href="../stb.html#stb-overview"><span class="std std-ref">Secure and Trusted Boot Library (LibSTB) Documentation</span></a>).
+<li><p class="first">Add SuperMicro p8dtu1u and p8dtu2u platforms</p>
+</li>
+<li><p class="first">Initial Trusted Boot support (see <a class="reference internal" href="../stb.html#stb-overview"><span class="std std-ref">Secure and Trusted Boot Library (LibSTB) Documentation</span></a>).
There are several limitations with this initial release:</p>
<blockquote>
<div><ul class="simple">
-<li><p>Only Nuvoton TPM 2.0 is supported</p></li>
-<li><p>Requires hardware rework on late revision Habanero or Firestone boards
-in order to install TPM.</p></li>
+<li>Only Nuvoton TPM 2.0 is supported</li>
+<li>Requires hardware rework on late revision Habanero or Firestone boards
+in order to install TPM.</li>
</ul>
</div></blockquote>
<ul class="simple">
-<li><p>Add i2c Nuvoton TPM 2.0 Driver</p></li>
-<li><p>romcode driver for POWER8 secure ROM</p></li>
-<li><p>See Device tree docs: <a class="reference internal" href="../device-tree/tpm.html#device-tree-tpm"><span class="std std-ref">Trusted Platform Module (TPM)</span></a> and <a class="reference internal" href="../device-tree/ibm%2Csecureboot.html#device-tree-ibm-secureboot"><span class="std std-ref">ibm,secureboot</span></a></p></li>
-<li><p>See <a class="reference internal" href="../stb.html#stb-overview"><span class="std std-ref">Secure and Trusted Boot Library (LibSTB) Documentation</span></a></p></li>
+<li>Add i2c Nuvoton TPM 2.0 Driver</li>
+<li>romcode driver for POWER8 secure ROM</li>
+<li>See Device tree docs: <a class="reference internal" href="../device-tree/tpm.html#device-tree-tpm"><span class="std std-ref">Trusted Platform Module (TPM)</span></a> and <a class="reference internal" href="../device-tree/ibm,secureboot.html#device-tree-ibm-secureboot"><span class="std std-ref">ibm,secureboot</span></a></li>
+<li>See <a class="reference internal" href="../stb.html#stb-overview"><span class="std std-ref">Secure and Trusted Boot Library (LibSTB) Documentation</span></a></li>
</ul>
</li>
-<li><p>Support <code class="docutils literal notranslate"><span class="pre">ibm,skiboot</span></code> NVRAM partition with skiboot configuration options.</p>
+<li><p class="first">Support <code class="docutils literal notranslate"><span class="pre">ibm,skiboot</span></code> NVRAM partition with skiboot configuration options.</p>
<ul class="simple">
-<li><p>These should generally only be used if you either completely know what
+<li>These should generally only be used if you either completely know what
you are doing or need to work around a skiboot bug. They are <strong>not</strong>
-intended for end users and are <em>explicitly</em> <strong>NOT ABI</strong>.</p></li>
-<li><p>Add support for supplying the kernel boot arguments from the <code class="docutils literal notranslate"><span class="pre">bootargs</span></code>
-configuration string in the <code class="docutils literal notranslate"><span class="pre">ibm,skiboot</span></code> NVRAM partition.</p></li>
-<li><p>Enabling the experimental fast reset feature is done via this method.</p></li>
+intended for end users and are <em>explicitly</em> <strong>NOT ABI</strong>.</li>
+<li>Add support for supplying the kernel boot arguments from the <code class="docutils literal notranslate"><span class="pre">bootargs</span></code>
+configuration string in the <code class="docutils literal notranslate"><span class="pre">ibm,skiboot</span></code> NVRAM partition.</li>
+<li>Enabling the experimental fast reset feature is done via this method.</li>
</ul>
</li>
-<li><p>Add support for nap mode on P8 while in skiboot</p>
+<li><p class="first">Add support for nap mode on P8 while in skiboot</p>
<ul class="simple">
-<li><p>While nap has been exposed to the Operating System since day 1, we have
+<li>While nap has been exposed to the Operating System since day 1, we have
not utilized low power states when in skiboot itself, leading to higher
power consumption during boot.
We only enable the functionality after the 0x100 vector has been
-patched, and we disable it before transferring control to Linux.</p></li>
+patched, and we disable it before transferring control to Linux.</li>
</ul>
</li>
-<li><p>libflash: add 128MB MX66L1G45G part</p></li>
-<li><p>Pointer validation of OPAL API call arguments.</p>
+<li><p class="first">libflash: add 128MB MX66L1G45G part</p>
+</li>
+<li><p class="first">Pointer validation of OPAL API call arguments.</p>
<ul class="simple">
-<li><p>If the kernel called an OPAL API with vmalloc’d address
+<li>If the kernel called an OPAL API with vmalloc’d address
or any other address range in real mode, we would hit
a problem with aliasing. Since the top 4 bits are ignored
in real mode, pointers from 0xc.. and 0xd.. (and other ranges)
could collide and lead to hard to solve bugs. This patch
adds the infrastructure for pointer validation and a simple
-test case for testing the API</p></li>
-<li><p>The checks validate pointers sent in using <code class="docutils literal notranslate"><span class="pre">opal_addr_valid()</span></code></p></li>
+test case for testing the API</li>
+<li>The checks validate pointers sent in using <code class="docutils literal notranslate"><span class="pre">opal_addr_valid()</span></code></li>
</ul>
</li>
-<li><p>Fast reboot for P8</p>
+<li><p class="first">Fast reboot for P8</p>
<p>This makes reboot take an <em>awful</em> lot less time, somewhere between four
and ten times faster than a full IPL. It is currently experimental and not
enabled by default.
@@ -156,7 +162,7 @@ You can enable the experimental support via nvram option:</p>
the kinks with fast-reset, we are <em>not</em> enabling it by default in 5.4.</p>
<p>Notably, fast reset will <em>not</em> happen in the following scenarios:</p>
<ul>
-<li><p>platform error</p>
+<li><p class="first">platform error</p>
<p>Most of the time, if we’re rebooting due to a platform error, we should
trigger a checkstop. However, if we haven’t been told what we should do
to trigger a checkstop (e.g. on an FSP machine), then we should still
@@ -164,9 +170,11 @@ fail to fast-reboot.</p>
<p>So, fast-reboot is disabled in the OPAL_CEC_REBOOT2 code path
for the OPAL_REBOOT_PLATFORM_ERROR reboot type.</p>
</li>
-<li><p>FSP code update</p></li>
-<li><p>Unrecoverable HMI</p></li>
-<li><p>A PHB is in CAPI mode</p>
+<li><p class="first">FSP code update</p>
+</li>
+<li><p class="first">Unrecoverable HMI</p>
+</li>
+<li><p class="first">A PHB is in CAPI mode</p>
<p>If a PHB is in CAPI mode, we cannot safely fast reboot - the PHB will be
fenced during the reboot resulting in major problems when we load the new
kernel.</p>
@@ -202,85 +210,100 @@ included in the Device Tree Specification.</p>
<div class="section" id="general">
<h2>General<a class="headerlink" href="#general" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Make console-log time more readable: seconds rather than timebase
-Log format is now <code class="docutils literal notranslate"><span class="pre">[SECONDS.(tb%512000000),LEVEL]</span></code></p></li>
-<li><p>Flash (PNOR) code improvements</p>
+<li><p class="first">Make console-log time more readable: seconds rather than timebase
+Log format is now <code class="docutils literal notranslate"><span class="pre">[SECONDS.(tb%512000000),LEVEL]</span></code></p>
+</li>
+<li><p class="first">Flash (PNOR) code improvements</p>
<ul class="simple">
-<li><p>flash: Make size 64 bit safe
+<li>flash: Make size 64 bit safe
This makes the size of flash 64 bit safe so that we can have flash
devices greater than 4GB. This is especially useful for mambo disks
-passed through to Linux.</p></li>
-<li><p>core/flash.c: load actual partition size
+passed through to Linux.</li>
+<li>core/flash.c: load actual partition size
We are downloading 0x20000 bytes from PNOR for CAPP, but currently the
-CAPP lid is only 40K.</p></li>
-<li><p>flash: Rework error paths and messages for multiple flash controllers
+CAPP lid is only 40K.</li>
+<li>flash: Rework error paths and messages for multiple flash controllers
Now that we have mambo bogusdisk flash, we can have many flash chips.
-This is resulting in some confusing output messages.</p></li>
+This is resulting in some confusing output messages.</li>
</ul>
</li>
-<li><p>core/init: Fix “failure of getting node in the free list” warning on boot.</p></li>
-<li><p>slw: improve error message for SLW timer stuck</p></li>
-<li><p>Centaur / XSCOM error handling</p>
+<li><p class="first">core/init: Fix “failure of getting node in the free list” warning on boot.</p>
+</li>
+<li><p class="first">slw: improve error message for SLW timer stuck</p>
+</li>
+<li><p class="first">Centaur / XSCOM error handling</p>
<ul class="simple">
-<li><p>print message on disabling xscoms to centaur due to many errors</p></li>
-<li><p>Mark centaur offline after 10 consecutive access errors</p></li>
+<li>print message on disabling xscoms to centaur due to many errors</li>
+<li>Mark centaur offline after 10 consecutive access errors</li>
</ul>
</li>
-<li><p>XSCOM improvements</p>
+<li><p class="first">XSCOM improvements</p>
<ul class="simple">
-<li><p>xscom: Map all HMER status codes to OPAL errors</p></li>
-<li><p>xscom: Initialize the data to a known value in <code class="docutils literal notranslate"><span class="pre">xscom_read</span></code>
+<li>xscom: Map all HMER status codes to OPAL errors</li>
+<li>xscom: Initialize the data to a known value in <code class="docutils literal notranslate"><span class="pre">xscom_read</span></code>
In case of error, don’t leave the data random. It helps debugging when
the user fails to check the error code. This happens due to a bug in the
-PRD wrapper app.</p></li>
-<li><p>chip: Add a quirk for when core direct control XSCOMs are missing</p></li>
+PRD wrapper app.</li>
+<li>chip: Add a quirk for when core direct control XSCOMs are missing</li>
</ul>
</li>
-<li><p>p8-i2c: Don’t crash if a centaur errored out</p></li>
-<li><p>cpu: Make endian switch message more informative</p></li>
-<li><p>cpu: Display number of started CPUs during boot</p></li>
-<li><p>core/init: ensure that HRMOR is zero at boot</p></li>
-<li><p>asm: Fix backtrace for unexpected exception</p></li>
-<li><p>cpu: Remove pollers calling heuristics from <code class="docutils literal notranslate"><span class="pre">cpu_wait_job</span></code>
+<li><p class="first">p8-i2c: Don’t crash if a centaur errored out</p>
+</li>
+<li><p class="first">cpu: Make endian switch message more informative</p>
+</li>
+<li><p class="first">cpu: Display number of started CPUs during boot</p>
+</li>
+<li><p class="first">core/init: ensure that HRMOR is zero at boot</p>
+</li>
+<li><p class="first">asm: Fix backtrace for unexpected exception</p>
+</li>
+<li><p class="first">cpu: Remove pollers calling heuristics from <code class="docutils literal notranslate"><span class="pre">cpu_wait_job</span></code>
This will be handled by <code class="docutils literal notranslate"><span class="pre">time_wait_ms()</span></code>. Also remove a useless
<code class="docutils literal notranslate"><span class="pre">smt_medium()</span></code>.
Note that this introduce a difference in behaviour: time_wait
will only call the pollers on the boot CPU while <code class="docutils literal notranslate"><span class="pre">cpu_wait_job()</span></code>
could call them on any. However, I can’t think of a case where
-this is a problem.</p></li>
-<li><p>cpu: Remove global job queue
+this is a problem.</p>
+</li>
+<li><p class="first">cpu: Remove global job queue
Instead, target a specific CPU for a global job at queuing time.
This will allow us to wake up the target using an interrupt when
implementing nap mode.
The algorithm used is to look for idle primary threads first, then
idle secondaries, and finally the less loaded thread. If nothing can
-be found, we fallback to a synchronous call.</p></li>
-<li><p>lpc: Log LPC SYNC errors as unrecoverable ones for manufacturing</p></li>
-<li><p>lpc: Optimize SerIRQ dispatch based on which PSI IRQ fired</p></li>
-<li><dl>
-<dt>interrupts: Add new source <code class="docutils literal notranslate"><span class="pre">-&gt;attributes()</span></code> callback</dt><dd><p>This allows a given source to provide per-interrupt attributes
+be found, we fallback to a synchronous call.</p>
+</li>
+<li><p class="first">lpc: Log LPC SYNC errors as unrecoverable ones for manufacturing</p>
+</li>
+<li><p class="first">lpc: Optimize SerIRQ dispatch based on which PSI IRQ fired</p>
+</li>
+<li><dl class="first docutils">
+<dt>interrupts: Add new source <code class="docutils literal notranslate"><span class="pre">-&gt;attributes()</span></code> callback</dt>
+<dd><p class="first">This allows a given source to provide per-interrupt attributes
such as whether it targets OPAL or Linux and it’s estimated
frequency.</p>
-<p>The former allows to get rid of the double set of ops used to
+<p class="last">The former allows to get rid of the double set of ops used to
decide which interrupts go where on some modules like the PHBs
and the latter will be eventually used to implement smart
caching of the source lookups.</p>
</dd>
</dl>
</li>
-<li><p>opal/hmi: Fix a TOD HMI failure during a race condition.</p></li>
-<li><p>platform: Add BT to Generic platform</p></li>
+<li><p class="first">opal/hmi: Fix a TOD HMI failure during a race condition.</p>
+</li>
+<li><p class="first">platform: Add BT to Generic platform</p>
+</li>
</ul>
</div>
<div class="section" id="nvram">
<h2>NVRAM<a class="headerlink" href="#nvram" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Support <code class="docutils literal notranslate"><span class="pre">ibm,skiboot</span></code> partition for skiboot specific configuration options</p></li>
-<li><dl class="simple">
-<dt>flash: Size NVRAM based on ECC for OpenPOWER platforms</dt><dd><p>If NVRAM has ECC (as per the ffs header) then the actual size of the
+<li>Support <code class="docutils literal notranslate"><span class="pre">ibm,skiboot</span></code> partition for skiboot specific configuration options</li>
+<li><dl class="first docutils">
+<dt>flash: Size NVRAM based on ECC for OpenPOWER platforms</dt>
+<dd>If NVRAM has ECC (as per the ffs header) then the actual size of the
partition is less than reported by the ffs header in the PNOR then the
-actual size of the partition is less than reported by the ffs header.</p>
-</dd>
+actual size of the partition is less than reported by the ffs header.</dd>
</dl>
</li>
</ul>
@@ -288,31 +311,31 @@ actual size of the partition is less than reported by the ffs header.</p>
<div class="section" id="nvlink-npu">
<h2>NVLink/NPU<a class="headerlink" href="#nvlink-npu" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Fix reserved PE#</p></li>
-<li><p>NPU bdfn allocation bugfix</p></li>
-<li><dl class="simple">
-<dt>Fix bad PE number check</dt><dd><p>NPUs have 4 PEs which are zero indexed, so {0, 1, 2, 3}. A bad PE number
+<li>Fix reserved PE#</li>
+<li>NPU bdfn allocation bugfix</li>
+<li><dl class="first docutils">
+<dt>Fix bad PE number check</dt>
+<dd>NPUs have 4 PEs which are zero indexed, so {0, 1, 2, 3}. A bad PE number
check in npu_err_inject checks if the PE number is greater than 4 as a
-fail case, so it would wrongly perform operations on a non-existant PE 4.</p>
-</dd>
+fail case, so it would wrongly perform operations on a non-existant PE 4.</dd>
</dl>
</li>
-<li><p>Use PCI virtual device</p></li>
-<li><p>assert the NPU irq min is aligned.</p></li>
-<li><p>program NPU BUID reg properly</p></li>
-<li><dl class="simple">
-<dt>npu: reword “error” to indicate it’s actually a warning</dt><dd><p>Incorrect FWTS annotation.
+<li>Use PCI virtual device</li>
+<li>assert the NPU irq min is aligned.</li>
+<li>program NPU BUID reg properly</li>
+<li><dl class="first docutils">
+<dt>npu: reword “error” to indicate it’s actually a warning</dt>
+<dd>Incorrect FWTS annotation.
Without this patch, you get spurious FirmWare Test Suite (FWTS) warnings
about NVLink not working on machines that aren’t fully populated with
-GPUs.</p>
-</dd>
+GPUs.</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>external: NPU hardware procedure script</dt><dd><p>Performing NPU hardware procedures requires some config space magic.
+<li><dl class="first docutils">
+<dt>external: NPU hardware procedure script</dt>
+<dd>Performing NPU hardware procedures requires some config space magic.
Put all that magic into a script, so you can just specify the target
-device and the procedure number.</p>
-</dd>
+device and the procedure number.</dd>
</dl>
</li>
</ul>
@@ -320,21 +343,29 @@ device and the procedure number.</p>
<div class="section" id="pci">
<h2>PCI<a class="headerlink" href="#pci" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Generic fixes</p>
+<li><p class="first">Generic fixes</p>
<ul>
-<li><p>Claim surprise hotplug capability</p></li>
-<li><p>Reserve PCI buses for RC’s slot</p></li>
-<li><p>Update PCI topology after power change</p></li>
-<li><p>Return slot cached power state</p></li>
-<li><p>Cache power state on slot without power control</p></li>
-<li><p>Avoid hot resets at boot time</p></li>
-<li><p>Fix initial PCIe slot power state</p></li>
-<li><p>Print CRS retry times
+<li><p class="first">Claim surprise hotplug capability</p>
+</li>
+<li><p class="first">Reserve PCI buses for RC’s slot</p>
+</li>
+<li><p class="first">Update PCI topology after power change</p>
+</li>
+<li><p class="first">Return slot cached power state</p>
+</li>
+<li><p class="first">Cache power state on slot without power control</p>
+</li>
+<li><p class="first">Avoid hot resets at boot time</p>
+</li>
+<li><p class="first">Fix initial PCIe slot power state</p>
+</li>
+<li><p class="first">Print CRS retry times
It’s useful to know the CRS retry times before the PCI device is
detected successfully. In PCI hot add case, it usually indicates
time consumed for the adapter’s firmware to be partially ready
-(responsive PCI config space).</p></li>
-<li><p>core/pci: Fix the power-off timeout in <code class="docutils literal notranslate"><span class="pre">pci_slot_power_off()</span></code>
+(responsive PCI config space).</p>
+</li>
+<li><p class="first">core/pci: Fix the power-off timeout in <code class="docutils literal notranslate"><span class="pre">pci_slot_power_off()</span></code>
The timeout should be 1000ms instead of 1000 ticks while powering
off PCI slot in <code class="docutils literal notranslate"><span class="pre">pci_slot_power_off()</span></code>. Otherwise, it’s likely to
hit timeout powering off the PCI slot as below skiboot logs reveal:</p>
@@ -342,21 +373,22 @@ hit timeout powering off the PCI slot as below skiboot logs reveal:</p>
</pre></div>
</div>
</li>
-<li><p>pci: Check power state before powering off slot.
-Prevents the erroneous “Error -1 powering off slot” error message.</p></li>
+<li><p class="first">pci: Check power state before powering off slot.
+Prevents the erroneous “Error -1 powering off slot” error message.</p>
+</li>
</ul>
</li>
-<li><p>PHB3</p>
+<li><p class="first">PHB3</p>
<ul class="simple">
-<li><p>Override root slot’s <code class="docutils literal notranslate"><span class="pre">prepare_link_change()</span></code> with PHB’s</p></li>
-<li><p>Disable surprise link down event on PCI slots</p></li>
-<li><p>Disable ECRC on Broadcom adapter behind PMC switch</p></li>
+<li>Override root slot’s <code class="docutils literal notranslate"><span class="pre">prepare_link_change()</span></code> with PHB’s</li>
+<li>Disable surprise link down event on PCI slots</li>
+<li>Disable ECRC on Broadcom adapter behind PMC switch</li>
</ul>
</li>
-<li><p>astbmc platforms</p>
+<li><p class="first">astbmc platforms</p>
<ul class="simple">
-<li><p>Support dynamic PCI slot. We might insert a PCIe switch to PHB direct slot
-and the downstream ports of the PCIe switch supports PCI hotplug.</p></li>
+<li>Support dynamic PCI slot. We might insert a PCIe switch to PHB direct slot
+and the downstream ports of the PCIe switch supports PCI hotplug.</li>
</ul>
</li>
</ul>
@@ -364,13 +396,13 @@ and the downstream ports of the PCIe switch supports PCI hotplug.</p></li>
<div class="section" id="capi">
<h2>CAPI<a class="headerlink" href="#capi" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><dl class="simple">
-<dt>hw/phb3: Update capi initialization sequence</dt><dd><p>The capi initialization sequence was revised in a circumvention
+<li><dl class="first docutils">
+<dt>hw/phb3: Update capi initialization sequence</dt>
+<dd>The capi initialization sequence was revised in a circumvention
document when a â€link down’ error was converted from fatal to Endpoint
Recoverable. Other, non-capi, register setup was corrected even before
the initial open-source release of skiboot, but a few capi-related
-registers were not updated then, so this patch fixes it.</p>
-</dd>
+registers were not updated then, so this patch fixes it.</dd>
</dl>
</li>
</ul>
@@ -378,59 +410,67 @@ registers were not updated then, so this patch fixes it.</p>
<div class="section" id="mambo-simulator">
<h2>Mambo Simulator<a class="headerlink" href="#mambo-simulator" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Helpers for POWER9 Mambo.</p></li>
-<li><p>mambo: Advertise available RADIX page sizes</p></li>
-<li><p>mambo: Add section for kernel command line boot args
+<li>Helpers for POWER9 Mambo.</li>
+<li>mambo: Advertise available RADIX page sizes</li>
+<li>mambo: Add section for kernel command line boot args
Users can set kernel command line boot arguments for Mambo in a tcl
-script.</p></li>
-<li><p>mambo: add exception and qtrace helpers</p></li>
-<li><p>external/mambo: Update skiboot.tcl to add page-sizes nodes to device tree</p></li>
+script.</li>
+<li>mambo: add exception and qtrace helpers</li>
+<li>external/mambo: Update skiboot.tcl to add page-sizes nodes to device tree</li>
</ul>
</div>
<div class="section" id="simics-simulator">
<h2>Simics Simulator<a class="headerlink" href="#simics-simulator" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>chiptod: Enable ChipTOD in SIMICS</p></li>
+<li>chiptod: Enable ChipTOD in SIMICS</li>
</ul>
</div>
<div class="section" id="utilities">
<h2>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>pflash</p>
+<li><p class="first">pflash</p>
<ul>
-<li><p>fix harmless buffer overflow: <code class="docutils literal notranslate"><span class="pre">fl_total_size</span></code> was <code class="docutils literal notranslate"><span class="pre">uint32_t</span></code> not <code class="docutils literal notranslate"><span class="pre">uint64_t</span></code>.</p></li>
-<li><p>Don’t try to write protect when writing to flash file</p></li>
-<li><p>Misc small improvements to code and code style</p></li>
-<li><p>makefile bug fixes</p></li>
-<li><p>external/pflash: Make MTD accesses the default</p>
+<li><p class="first">fix harmless buffer overflow: <code class="docutils literal notranslate"><span class="pre">fl_total_size</span></code> was <code class="docutils literal notranslate"><span class="pre">uint32_t</span></code> not <code class="docutils literal notranslate"><span class="pre">uint64_t</span></code>.</p>
+</li>
+<li><p class="first">Don’t try to write protect when writing to flash file</p>
+</li>
+<li><p class="first">Misc small improvements to code and code style</p>
+</li>
+<li><p class="first">makefile bug fixes</p>
+</li>
+<li><p class="first">external/pflash: Make MTD accesses the default</p>
<p>Now that BMC and host kernel mtd drivers exist and have matured we
should use them by default.</p>
<p>This is especially important since we seem to be telling everyone to use
pflash (pflash world domination plans are continuing on schedule).</p>
</li>
-<li><p>external/pflash: Catch incompatible combination of flags</p></li>
-<li><p>external/common: arm: Don’t error trying to wrprotect with MTD access</p></li>
-<li><p>libflash/libffs: Use blocklevel_smart_write() when updating partitions</p></li>
+<li><p class="first">external/pflash: Catch incompatible combination of flags</p>
+</li>
+<li><p class="first">external/common: arm: Don’t error trying to wrprotect with MTD access</p>
+</li>
+<li><p class="first">libflash/libffs: Use blocklevel_smart_write() when updating partitions</p>
+</li>
</ul>
</li>
-<li><p>external/boot_tests</p>
+<li><p class="first">external/boot_tests</p>
<ul class="simple">
-<li><p>remove lid from the BMC after flashing</p></li>
-<li><p>add the nobooting option -N</p></li>
-<li><p>add arbitrary lid option -F</p></li>
+<li>remove lid from the BMC after flashing</li>
+<li>add the nobooting option -N</li>
+<li>add arbitrary lid option -F</li>
</ul>
</li>
-<li><dl>
-<dt><code class="docutils literal notranslate"><span class="pre">getscom</span></code> / <code class="docutils literal notranslate"><span class="pre">getsram</span></code> / <code class="docutils literal notranslate"><span class="pre">putscom</span></code>: Parse chip-id as hex</dt><dd><p>We print the chip-id in hex (without a leading 0x), but we fail to
+<li><dl class="first docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">getscom</span></code> / <code class="docutils literal notranslate"><span class="pre">getsram</span></code> / <code class="docutils literal notranslate"><span class="pre">putscom</span></code>: Parse chip-id as hex</dt>
+<dd><p class="first">We print the chip-id in hex (without a leading 0x), but we fail to
parse that same value correctly in <code class="docutils literal notranslate"><span class="pre">getscom</span></code> / <code class="docutils literal notranslate"><span class="pre">getsram</span></code> / <code class="docutils literal notranslate"><span class="pre">putscom</span></code></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># getscom -l</span>
<span class="o">...</span>
-<span class="mi">80000000</span> <span class="o">|</span> <span class="n">DD2</span><span class="mf">.0</span> <span class="o">|</span> <span class="n">Centaur</span> <span class="n">memory</span> <span class="n">buffer</span>
+<span class="mi">80000000</span> <span class="o">|</span> <span class="n">DD2</span><span class="o">.</span><span class="mi">0</span> <span class="o">|</span> <span class="n">Centaur</span> <span class="n">memory</span> <span class="n">buffer</span>
<span class="c1"># getscom -c 80000000 201140a</span>
<span class="n">Error</span> <span class="o">-</span><span class="mi">19</span> <span class="n">reading</span> <span class="n">XSCOM</span>
</pre></div>
</div>
-<p>Fix this by assuming base 16 when parsing chip-id.</p>
+<p class="last">Fix this by assuming base 16 when parsing chip-id.</p>
</dd>
</dl>
</li>
@@ -439,17 +479,17 @@ parse that same value correctly in <code class="docutils literal notranslate"><s
<div class="section" id="prd">
<h2>PRD<a class="headerlink" href="#prd" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>opal-prd: Fix error code from <code class="docutils literal notranslate"><span class="pre">scom_read</span></code> and <code class="docutils literal notranslate"><span class="pre">scom_write</span></code></p></li>
-<li><p>opal-prd: Add get_interface_capabilities to host interfaces</p></li>
-<li><p>opal-prd: fix for 64-bit pnor sizes</p></li>
-<li><dl class="simple">
-<dt>occ/prd/opal-prd: Queue OCC_RESET event message to host in OpenPOWER</dt><dd><p>During an OCC reset cycle the system is forced to Psafe pstate.
+<li>opal-prd: Fix error code from <code class="docutils literal notranslate"><span class="pre">scom_read</span></code> and <code class="docutils literal notranslate"><span class="pre">scom_write</span></code></li>
+<li>opal-prd: Add get_interface_capabilities to host interfaces</li>
+<li>opal-prd: fix for 64-bit pnor sizes</li>
+<li><dl class="first docutils">
+<dt>occ/prd/opal-prd: Queue OCC_RESET event message to host in OpenPOWER</dt>
+<dd>During an OCC reset cycle the system is forced to Psafe pstate.
When OCC becomes active, the system has to be restored to its
last pstate as requested by host. So host needs to be notified
of OCC_RESET event or else system will continue to remian in
Psafe state until host requests a new pstate after the OCC
-reset cycle.</p>
-</dd>
+reset cycle.</dd>
</dl>
</li>
</ul>
@@ -457,40 +497,45 @@ reset cycle.</p>
<div class="section" id="ibm-fsp-based-platforms">
<h2>IBM FSP Based Platforms<a class="headerlink" href="#ibm-fsp-based-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><dl class="simple">
-<dt>fsp/console: Allocate irq for each hvc console</dt><dd><p>Allocate an irq number for each hvc console and set its interrupt-parent
+<li><dl class="first docutils">
+<dt>fsp/console: Allocate irq for each hvc console</dt>
+<dd><p class="first last">Allocate an irq number for each hvc console and set its interrupt-parent
property so that Linux can use the opal irqchip instead of the
OPAL_EVENT_CONSOLE_INPUT interface.</p>
</dd>
</dl>
</li>
-<li><p>platforms/firenze: Fix clock frequency dt property:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">1.212366090</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span> <span class="n">DT</span><span class="p">:</span> <span class="n">Unexpected</span> <span class="nb">property</span> <span class="n">length</span> <span class="o">/</span><span class="n">xscom</span><span class="o">@</span><span class="mi">3</span><span class="n">fc0000000000</span><span class="o">/</span><span class="n">i2cm</span><span class="nd">@a0020</span><span class="o">/</span><span class="n">clock</span><span class="o">-</span><span class="n">frequency</span>
+<li><p class="first">platforms/firenze: Fix clock frequency dt property:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">1.212366090</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span> <span class="n">DT</span><span class="p">:</span> <span class="n">Unexpected</span> <span class="nb">property</span> <span class="n">length</span> <span class="o">/</span><span class="n">xscom</span><span class="nd">@3fc0000000000</span><span class="o">/</span><span class="n">i2cm</span><span class="nd">@a0020</span><span class="o">/</span><span class="n">clock</span><span class="o">-</span><span class="n">frequency</span>
</pre></div>
</div>
</li>
-<li><dl class="simple">
-<dt>HDAT: Fix typo in nest-frequency property</dt><dd><p>nest-frquency -&gt; nest-frequency</p>
+<li><dl class="first docutils">
+<dt>HDAT: Fix typo in nest-frequency property</dt>
+<dd><p class="first last">nest-frquency -&gt; nest-frequency</p>
</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>platforms/ibm-fsp: Use power_ctl bit when determining slot reset method</dt><dd><p>The power_ctl bit is used to represent if power management is available.
+<li><dl class="first docutils">
+<dt>platforms/ibm-fsp: Use power_ctl bit when determining slot reset method</dt>
+<dd><p class="first last">The power_ctl bit is used to represent if power management is available.
If power_ctl is set to true, then the I2C based external power management
functionality will be populated on the PCI slot. Otherwise we will try to
use the inband PERST as the fundamental reset, as before.</p>
</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>FSP/ELOG: Fix elog timeout issue</dt><dd><p>Presently we set timeout value as soon as we add elog to queue. If
+<li><dl class="first docutils">
+<dt>FSP/ELOG: Fix elog timeout issue</dt>
+<dd><p class="first last">Presently we set timeout value as soon as we add elog to queue. If
we have multiple elogs to write, it doesn’t consider queue wait time.
Instead set timeout value when we are actually sending elog to FSP.</p>
</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>FSP/ELOG: elog_enable flag should be false by default</dt><dd><p>This issue is one of the corner case, which is related to recent change
+<li><dl class="first docutils">
+<dt>FSP/ELOG: elog_enable flag should be false by default</dt>
+<dd><p class="first last">This issue is one of the corner case, which is related to recent change
went upstream and only observed in the petitboot prompt, where we see
only one error log instead of getting all error log in
<code class="docutils literal notranslate"><span class="pre">/sys/firmware/opal/elog</span></code>.</p>
@@ -505,54 +550,54 @@ only one error log instead of getting all error log in
only for use in simulators. If working on hardware, use more recent skiboot
or development branches. We will not be backporting POWER9 fixes to 5.4.x.</p>
<ul class="simple">
-<li><p>mambo: Make POWER9 look like DD2</p></li>
-<li><p>core/cpu.c: Add OPAL call to setup Nest MMU</p></li>
-<li><p>psi: On p9, create an interrupt-map for routing PSI interrupts</p></li>
-<li><p>lpc: Add P9 LPC interrupts support</p></li>
-<li><p>chiptod: Basic P9 support</p></li>
-<li><p>psi: Add P9 support</p></li>
+<li>mambo: Make POWER9 look like DD2</li>
+<li>core/cpu.c: Add OPAL call to setup Nest MMU</li>
+<li>psi: On p9, create an interrupt-map for routing PSI interrupts</li>
+<li>lpc: Add P9 LPC interrupts support</li>
+<li>chiptod: Basic P9 support</li>
+<li>psi: Add P9 support</li>
</ul>
</div>
<div class="section" id="testing-and-debugging">
<h2>Testing and Debugging<a class="headerlink" href="#testing-and-debugging" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>test/qemu: bump qemu version used in CI, adds IPMI support</p></li>
-<li><p>platform/qemu: add BT and IPMI support
-Enables testing BT and IPMI functionality in the Qemu simulator</p></li>
-<li><p>init: In debug builds, enable debug output to console</p></li>
-<li><dl class="simple">
-<dt>mem_region: Be a bit smarter about poisoning</dt><dd><p>Don’t poison chunks that are already free and poison regions on
-first allocation. This speeds things up dramatically.</p>
-</dd>
+<li>test/qemu: bump qemu version used in CI, adds IPMI support</li>
+<li>platform/qemu: add BT and IPMI support
+Enables testing BT and IPMI functionality in the Qemu simulator</li>
+<li>init: In debug builds, enable debug output to console</li>
+<li><dl class="first docutils">
+<dt>mem_region: Be a bit smarter about poisoning</dt>
+<dd>Don’t poison chunks that are already free and poison regions on
+first allocation. This speeds things up dramatically.</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>libc: Use 8-bytes stores for non-0 memset too</dt><dd><p>Memory poisoning hammers this, so let’s be a bit smart about it and
-avoid falling back to byte stores when the data is not 0</p>
-</dd>
+<li><dl class="first docutils">
+<dt>libc: Use 8-bytes stores for non-0 memset too</dt>
+<dd>Memory poisoning hammers this, so let’s be a bit smart about it and
+avoid falling back to byte stores when the data is not 0</dd>
</dl>
</li>
-<li><p>fwts: add annotation for manufacturing mode</p></li>
-<li><p>check: Fix bugs in mem region tests</p></li>
-<li><dl class="simple">
-<dt>Don’t set -fstack-protector-all unconditionally</dt><dd><p>We set it already in DEBUG builds and we use -fstack-protector-strong
+<li>fwts: add annotation for manufacturing mode</li>
+<li>check: Fix bugs in mem region tests</li>
+<li><dl class="first docutils">
+<dt>Don’t set -fstack-protector-all unconditionally</dt>
+<dd>We set it already in DEBUG builds and we use -fstack-protector-strong
in release builds which provides most of the benefits and is more
-efficient.</p>
-</dd>
+efficient.</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>Build host programs (and checks) with debug enabled</dt><dd><p>This enables memory poisoning in allocations and list checking
-among other things.</p>
-</dd>
+<li><dl class="first docutils">
+<dt>Build host programs (and checks) with debug enabled</dt>
+<dd>This enables memory poisoning in allocations and list checking
+among other things.</dd>
</dl>
</li>
-<li><p>Add global DEBUG make flag</p></li>
+<li>Add global DEBUG make flag</li>
</ul>
<div class="section" id="command-line-arguments-to-bootkernel">
<h3>Command line arguments to BOOTKERNEL<a class="headerlink" href="#command-line-arguments-to-bootkernel" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>core/init.c: Fix bootargs parsing</p>
+<li><p class="first">core/init.c: Fix bootargs parsing</p>
<p>Currently the bootargs are unconditionally deleted, which causes
a bug where the bootargs passed in by the device tree are lost.</p>
<p>This patch deletes bootargs only if it needs to be replaced by the NVRAM
@@ -565,7 +610,7 @@ using the NVRAM or a device tree.</p>
<div class="section" id="other-changes">
<h3>Other changes<a class="headerlink" href="#other-changes" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>extract-gcov: build with -m64 if compiler supports it.</p>
+<li><p class="first">extract-gcov: build with -m64 if compiler supports it.</p>
<p>Fixes build break on 32bit ppc64 (e.g. PowerMac G5, where user space
is mostly 32bit).</p>
</li>
@@ -574,7 +619,7 @@ is mostly 32bit).</p>
<div class="section" id="flash-on-openpower-platforms">
<h3>Flash on OpenPOWER platforms<a class="headerlink" href="#flash-on-openpower-platforms" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>flash: rework flash_load_resource to correctly read FFS/STB</p>
+<li><p class="first">flash: rework flash_load_resource to correctly read FFS/STB</p>
<p>This fixes the previous reverts of loading the CAPP partition with
STB headers (which broke CAPP partitions without STB headers).</p>
<p>The new logic fixes both CAPP partition loading with STB headers <em>and</em>
@@ -604,66 +649,66 @@ that.</p>
<h3>Contributors<a class="headerlink" href="#contributors" title="Permalink to this headline">¶</a></h3>
<p>Extending the analysis done for the last few releases, we can see our trends
in code review across versions:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 19%" />
-<col style="width: 14%" />
-<col style="width: 17%" />
-<col style="width: 17%" />
-<col style="width: 14%" />
-<col style="width: 19%" />
+<col width="19%" />
+<col width="14%" />
+<col width="17%" />
+<col width="17%" />
+<col width="14%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Release</p></th>
-<th class="head"><p>csets</p></th>
-<th class="head"><p>Ack</p></th>
-<th class="head"><p>Reviews</p></th>
-<th class="head"><p>Tested</p></th>
-<th class="head"><p>Reported</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Release</th>
+<th class="head">csets</th>
+<th class="head">Ack</th>
+<th class="head">Reviews</th>
+<th class="head">Tested</th>
+<th class="head">Reported</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>5.0</p></td>
-<td><p>329</p></td>
-<td><p>15</p></td>
-<td><p>20</p></td>
-<td><p>1</p></td>
-<td><p>0</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.1</p></td>
-<td><p>372</p></td>
-<td><p>13</p></td>
-<td><p>38</p></td>
-<td><p>1</p></td>
-<td><p>4</p></td>
-</tr>
-<tr class="row-even"><td><p>5.2-rc1</p></td>
-<td><p>334</p></td>
-<td><p>20</p></td>
-<td><p>34</p></td>
-<td><p>6</p></td>
-<td><p>11</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.3-rc1</p></td>
-<td><p>302</p></td>
-<td><p>36</p></td>
-<td><p>53</p></td>
-<td><p>4</p></td>
-<td><p>5</p></td>
-</tr>
-<tr class="row-even"><td><p>5.4-rc1</p></td>
-<td><p>278</p></td>
-<td><p>8</p></td>
-<td><p>19</p></td>
-<td><p>0</p></td>
-<td><p>4</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.4.0</p></td>
-<td><p>361</p></td>
-<td><p>16</p></td>
-<td><p>28</p></td>
-<td><p>1</p></td>
-<td><p>9</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>5.0</td>
+<td>329</td>
+<td>15</td>
+<td>20</td>
+<td>1</td>
+<td>0</td>
+</tr>
+<tr class="row-odd"><td>5.1</td>
+<td>372</td>
+<td>13</td>
+<td>38</td>
+<td>1</td>
+<td>4</td>
+</tr>
+<tr class="row-even"><td>5.2-rc1</td>
+<td>334</td>
+<td>20</td>
+<td>34</td>
+<td>6</td>
+<td>11</td>
+</tr>
+<tr class="row-odd"><td>5.3-rc1</td>
+<td>302</td>
+<td>36</td>
+<td>53</td>
+<td>4</td>
+<td>5</td>
+</tr>
+<tr class="row-even"><td>5.4-rc1</td>
+<td>278</td>
+<td>8</td>
+<td>19</td>
+<td>0</td>
+<td>4</td>
+</tr>
+<tr class="row-odd"><td>5.4.0</td>
+<td>361</td>
+<td>16</td>
+<td>28</td>
+<td>1</td>
+<td>9</td>
</tr>
</tbody>
</table>
@@ -673,510 +718,510 @@ nothing like an impending release to get people to look closer.</p>
<p>Processed 361 csets from 34 developers
A total of 20206 lines added, 5843 removed (delta 14363)</p>
<p>Developers with the most changesets:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>105</p></td>
-<td><p>(29.1%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>105</td>
+<td>(29.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>50</p></td>
-<td><p>(13.9%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>50</td>
+<td>(13.9%)</td>
</tr>
-<tr class="row-even"><td><p>Claudio Carvalho</p></td>
-<td><p>47</p></td>
-<td><p>(13.0%)</p></td>
+<tr class="row-even"><td>Claudio Carvalho</td>
+<td>47</td>
+<td>(13.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>24</p></td>
-<td><p>(6.6%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>24</td>
+<td>(6.6%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>20</p></td>
-<td><p>(5.5%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>20</td>
+<td>(5.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>18</p></td>
-<td><p>(5.0%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>18</td>
+<td>(5.0%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>12</p></td>
-<td><p>(3.3%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>12</td>
+<td>(3.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Mukesh Ojha</p></td>
-<td><p>12</p></td>
-<td><p>(3.3%)</p></td>
+<tr class="row-odd"><td>Mukesh Ojha</td>
+<td>12</td>
+<td>(3.3%)</td>
</tr>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>7</p></td>
-<td><p>(1.9%)</p></td>
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>7</td>
+<td>(1.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Vasant Hegde</p></td>
-<td><p>7</p></td>
-<td><p>(1.9%)</p></td>
+<tr class="row-odd"><td>Vasant Hegde</td>
+<td>7</td>
+<td>(1.9%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>7</p></td>
-<td><p>(1.9%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>7</td>
+<td>(1.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>4</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>4</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>4</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>4</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>4</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-odd"><td>Mahesh Salgaonkar</td>
+<td>4</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-even"><td><p>Nageswara R Sastry</p></td>
-<td><p>4</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-even"><td>Nageswara R Sastry</td>
+<td>4</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Chris Smart</p></td>
-<td><p>3</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-odd"><td>Chris Smart</td>
+<td>3</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-even"><td><p>Sam Mendoza-Jonas</p></td>
-<td><p>3</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-even"><td>Sam Mendoza-Jonas</td>
+<td>3</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Vipin K Parashar</p></td>
-<td><p>3</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-odd"><td>Vipin K Parashar</td>
+<td>3</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-even"><td><p>Balbir Singh</p></td>
-<td><p>3</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-even"><td>Balbir Singh</td>
+<td>3</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Frederic Barrat</p></td>
-<td><p>3</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-odd"><td>Frederic Barrat</td>
+<td>3</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-even"><td><p>leoluo</p></td>
-<td><p>2</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-even"><td>leoluo</td>
+<td>2</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Rafael Fonseca</p></td>
-<td><p>2</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-odd"><td>Rafael Fonseca</td>
+<td>2</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Jack Miller</p></td>
-<td><p>2</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-even"><td>Jack Miller</td>
+<td>2</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Patrick Williams</p></td>
-<td><p>2</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-odd"><td>Patrick Williams</td>
+<td>2</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>2</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>2</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Suraj Jitindar Singh</p></td>
-<td><p>2</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-odd"><td>Suraj Jitindar Singh</td>
+<td>2</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Milton Miller</p></td>
-<td><p>2</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-even"><td>Milton Miller</td>
+<td>2</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Frederic Bonnard</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Frederic Bonnard</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Breno Leitao</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Breno Leitao</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Anton Blanchard</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Anton Blanchard</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Nicholas Piggin</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Nicholas Piggin</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most changed lines:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Claudio Carvalho</p></td>
-<td><p>6947</p></td>
-<td><p>(32.9%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Claudio Carvalho</td>
+<td>6947</td>
+<td>(32.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>6667</p></td>
-<td><p>(31.6%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>6667</td>
+<td>(31.6%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>2586</p></td>
-<td><p>(12.3%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>2586</td>
+<td>(12.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>1185</p></td>
-<td><p>(5.6%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>1185</td>
+<td>(5.6%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>692</p></td>
-<td><p>(3.3%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>692</td>
+<td>(3.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Mukesh Ojha</p></td>
-<td><p>565</p></td>
-<td><p>(2.7%)</p></td>
+<tr class="row-odd"><td>Mukesh Ojha</td>
+<td>565</td>
+<td>(2.7%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>343</p></td>
-<td><p>(1.6%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>343</td>
+<td>(1.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>343</p></td>
-<td><p>(1.6%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>343</td>
+<td>(1.6%)</td>
</tr>
-<tr class="row-even"><td><p>leoluo</p></td>
-<td><p>269</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-even"><td>leoluo</td>
+<td>269</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>236</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-odd"><td>Pridhiviraj Paidipeddi</td>
+<td>236</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-even"><td><p>Balbir Singh</p></td>
-<td><p>227</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-even"><td>Balbir Singh</td>
+<td>227</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>211</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>211</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-even"><td><p>Nageswara R Sastry</p></td>
-<td><p>132</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-even"><td>Nageswara R Sastry</td>
+<td>132</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>115</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>115</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Vipin K Parashar</p></td>
-<td><p>68</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Vipin K Parashar</td>
+<td>68</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>66</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>66</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>65</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>65</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>50</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>Mahesh Salgaonkar</td>
+<td>50</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>45</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>45</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Suraj Jitindar Singh</p></td>
-<td><p>41</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>Suraj Jitindar Singh</td>
+<td>41</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Nicholas Piggin</p></td>
-<td><p>34</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-even"><td>Nicholas Piggin</td>
+<td>34</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Sam Mendoza-Jonas</p></td>
-<td><p>33</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>Sam Mendoza-Jonas</td>
+<td>33</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Jack Miller</p></td>
-<td><p>32</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-even"><td>Jack Miller</td>
+<td>32</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Chris Smart</p></td>
-<td><p>28</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-odd"><td>Chris Smart</td>
+<td>28</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>23</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>23</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Milton Miller</p></td>
-<td><p>19</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-odd"><td>Milton Miller</td>
+<td>19</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Joel Stanley</p></td>
-<td><p>13</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-even"><td>Joel Stanley</td>
+<td>13</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>13</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>13</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Rafael Fonseca</p></td>
-<td><p>12</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-even"><td>Rafael Fonseca</td>
+<td>12</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Patrick Williams</p></td>
-<td><p>11</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-odd"><td>Patrick Williams</td>
+<td>11</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Barrat</p></td>
-<td><p>6</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Frederic Barrat</td>
+<td>6</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Anton Blanchard</p></td>
-<td><p>3</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Anton Blanchard</td>
+<td>3</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Bonnard</p></td>
-<td><p>2</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Frederic Bonnard</td>
+<td>2</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Breno Leitao</p></td>
-<td><p>2</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Breno Leitao</td>
+<td>2</td>
+<td>(0.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most lines removed:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 74%" />
-<col style="width: 9%" />
-<col style="width: 17%" />
+<col width="74%" />
+<col width="9%" />
+<col width="17%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>206</p></td>
-<td><p>(3.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Cyril Bur</td>
+<td>206</td>
+<td>(3.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Rafael Fonseca</p></td>
-<td><p>8</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-odd"><td>Rafael Fonseca</td>
+<td>8</td>
+<td>(0.1%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most signoffs (total 278):</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>268</p></td>
-<td><p>(96.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>268</td>
+<td>(96.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>4</p></td>
-<td><p>(1.4%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>4</td>
+<td>(1.4%)</td>
</tr>
-<tr class="row-even"><td><p>Jim Yuan</p></td>
-<td><p>2</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-even"><td>Jim Yuan</td>
+<td>2</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Jeremy Kerr</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Jeremy Kerr</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most reviews (total 28):</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>6</p></td>
-<td><p>(21.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>6</td>
+<td>(21.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Vasant Hegde</p></td>
-<td><p>5</p></td>
-<td><p>(17.9%)</p></td>
+<tr class="row-odd"><td>Vasant Hegde</td>
+<td>5</td>
+<td>(17.9%)</td>
</tr>
-<tr class="row-even"><td><p>Mukesh Ojha</p></td>
-<td><p>5</p></td>
-<td><p>(17.9%)</p></td>
+<tr class="row-even"><td>Mukesh Ojha</td>
+<td>5</td>
+<td>(17.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>3</p></td>
-<td><p>(10.7%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>3</td>
+<td>(10.7%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>3</p></td>
-<td><p>(10.7%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>3</td>
+<td>(10.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>2</p></td>
-<td><p>(7.1%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>2</td>
+<td>(7.1%)</td>
</tr>
-<tr class="row-even"><td><p>Balbir Singh</p></td>
-<td><p>2</p></td>
-<td><p>(7.1%)</p></td>
+<tr class="row-even"><td>Balbir Singh</td>
+<td>2</td>
+<td>(7.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>1</p></td>
-<td><p>(3.6%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>1</td>
+<td>(3.6%)</td>
</tr>
-<tr class="row-even"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>1</p></td>
-<td><p>(3.6%)</p></td>
+<tr class="row-even"><td>Vaidyanathan Srinivasan</td>
+<td>1</td>
+<td>(3.6%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most test credits (total 1):</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 70%" />
-<col style="width: 8%" />
-<col style="width: 22%" />
+<col width="70%" />
+<col width="8%" />
+<col width="22%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>1</p></td>
-<td><p>(100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>1</td>
+<td>(100.0%)</td>
</tr>
</tbody>
</table>
<p>Developers who gave the most tested-by credits (total 1):</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 70%" />
-<col style="width: 8%" />
-<col style="width: 22%" />
+<col width="70%" />
+<col width="8%" />
+<col width="22%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>1</p></td>
-<td><p>(100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Gavin Shan</td>
+<td>1</td>
+<td>(100.0%)</td>
</tr>
</tbody>
</table>
<p>Developers with the most report credits (total 9):</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 70%" />
-<col style="width: 8%" />
-<col style="width: 22%" />
+<col width="70%" />
+<col width="8%" />
+<col width="22%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>3</p></td>
-<td><p>(33.3%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>3</td>
+<td>(33.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>1</p></td>
-<td><p>(11.1%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>1</td>
+<td>(11.1%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>1</p></td>
-<td><p>(11.1%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>1</td>
+<td>(11.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>1</p></td>
-<td><p>(11.1%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>1</td>
+<td>(11.1%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>1</p></td>
-<td><p>(11.1%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>1</td>
+<td>(11.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrei Warkenti</p></td>
-<td><p>1</p></td>
-<td><p>(11.1%)</p></td>
+<tr class="row-odd"><td>Andrei Warkenti</td>
+<td>1</td>
+<td>(11.1%)</td>
</tr>
-<tr class="row-even"><td><p>Li Meng</p></td>
-<td><p>1</p></td>
-<td><p>(11.1%)</p></td>
+<tr class="row-even"><td>Li Meng</td>
+<td>1</td>
+<td>(11.1%)</td>
</tr>
</tbody>
</table>
@@ -1185,7 +1230,6 @@ A total of 20206 lines added, 5843 removed (delta 14363)</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -1236,15 +1280,17 @@ A total of 20206 lines added, 5843 removed (delta 14363)</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -1261,15 +1307,14 @@ A total of 20206 lines added, 5843 removed (delta 14363)</p>
<li class="right" >
<a href="skiboot-5.3.7.html" title="skiboot-5.3.7"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.4.1.html b/doc/release-notes/skiboot-5.4.1.html
index a03b2c2..b0389d4 100644
--- a/doc/release-notes/skiboot-5.4.1.html
+++ b/doc/release-notes/skiboot-5.4.1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.4.1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.4.1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.4.0-rc4.html" title="skiboot-5.4.0-rc4"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -50,27 +51,26 @@
<a class="reference internal" href="skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a> as the current stable release.</p>
<p>Over <a class="reference internal" href="skiboot-5.4.0.html#skiboot-5-4-0"><span class="std std-ref">skiboot-5.4.0</span></a>, we have a few changes:</p>
<ul class="simple">
-<li><p>Nuvoton i2c TPM driver: bug fixes and improvements, especially around
-timeouts and error handling.</p></li>
-<li><p>Limit number of “Poller recursion detected” errors to display.
+<li>Nuvoton i2c TPM driver: bug fixes and improvements, especially around
+timeouts and error handling.</li>
+<li>Limit number of “Poller recursion detected” errors to display.
In some error conditions, we could spiral out of control on this
-and spend all of our time printing the exact same backtrace.</p></li>
-<li><p>slw: do SLW timer testing while holding xscom lock.
+and spend all of our time printing the exact same backtrace.</li>
+<li>slw: do SLW timer testing while holding xscom lock.
In some situations without this, it could take long enough to get
the xscom lock that the 1ms timeout would expire and we’d falsely
-think the SLW timer didn’t work when in fact it did.</p></li>
-<li><p>p8i2c: Use calculated poll_interval when booting OPAL.
+think the SLW timer didn’t work when in fact it did.</li>
+<li>p8i2c: Use calculated poll_interval when booting OPAL.
Otherwise we’d default to 2seconds (TIMER_POLL) during boot on
chips with a functional i2c interrupt, leading to slow i2c
-during boot (or hitting timeouts instead).</p></li>
-<li><p>i2c: More efficiently run TPM I2C operations during boot, avoiding hitting
-timeouts</p></li>
-<li><p>fsp: Don’t recurse pollers in ibm_fsp_terminate</p></li>
+during boot (or hitting timeouts instead).</li>
+<li>i2c: More efficiently run TPM I2C operations during boot, avoiding hitting
+timeouts</li>
+<li>fsp: Don’t recurse pollers in ibm_fsp_terminate</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -90,15 +90,17 @@ timeouts</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -115,15 +117,14 @@ timeouts</p></li>
<li class="right" >
<a href="skiboot-5.4.0-rc4.html" title="skiboot-5.4.0-rc4"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.4.10.html b/doc/release-notes/skiboot-5.4.10.html
index 0c04cd2..c56e6fc 100644
--- a/doc/release-notes/skiboot-5.4.10.html
+++ b/doc/release-notes/skiboot-5.4.10.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.4.10 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.4.10 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.4.1.html" title="skiboot-5.4.1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.10</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -50,7 +51,7 @@
<a class="reference internal" href="skiboot-5.4.9.html#skiboot-5-4-9"><span class="std std-ref">skiboot-5.4.9</span></a> as the current stable release in the 5.4.x series.</p>
<p>Over <a class="reference internal" href="skiboot-5.4.9.html#skiboot-5-4-9"><span class="std std-ref">skiboot-5.4.9</span></a>, we have a few bug fixes:</p>
<ul>
-<li><p>opal-prd: Do not error out on first failure for soft/hard offline.</p>
+<li><p class="first">opal-prd: Do not error out on first failure for soft/hard offline.</p>
<p>The memory errors (CEs and UEs) that are detected as part of background
memory scrubbing are reported by PRD asynchronously to opal-prd along with
affected memory ranges. hservice_memory_error() converts these ranges into
@@ -60,9 +61,9 @@ infrastructure.</p>
all the pages to soft/hard offline-ing if any of the page offline action
fails. e.g hard offline can fail for:</p>
<ul class="simple">
-<li><p>Pages that are not part of buddy managed pool.</p></li>
-<li><p>Pages that are reserved by kernel using memblock_reserved()</p></li>
-<li><p>Pages that are in use by kernel.</p></li>
+<li>Pages that are not part of buddy managed pool.</li>
+<li>Pages that are reserved by kernel using memblock_reserved()</li>
+<li>Pages that are in use by kernel.</li>
</ul>
<p>But for the pages that are in use by user space application, the hard
offline marks the page as hwpoison, sends SIGBUS signal to kill the
@@ -72,11 +73,11 @@ use by application or free. By stopping on first error we loose the
opportunity to hwpoison the subsequent pages which may be free or in use by
application. This patch fixes this issue.</p>
</li>
-<li><p>OPAL_PCI_SET_POWER_STATE: fix locking in error paths</p>
+<li><p class="first">OPAL_PCI_SET_POWER_STATE: fix locking in error paths</p>
<p>Otherwise we could exit OPAL holding locks, potentially leading
to all sorts of problems later on.</p>
</li>
-<li><p>p8-i2c: Limit number of retry attempts</p>
+<li><p class="first">p8-i2c: Limit number of retry attempts</p>
<p>Current we will attempt to start an I2C transaction until it succeeds.
In the event that the OCC does not release the lock on an I2C bus this
results in an async token being held forever and the kernel thread that
@@ -84,7 +85,7 @@ started the transaction will block forever while waiting for an async
completion message. Fix this by limiting the number of attempts to
start the transaction.</p>
</li>
-<li><p>FSP/CONSOLE: Disable notification on unresponsive consoles</p>
+<li><p class="first">FSP/CONSOLE: Disable notification on unresponsive consoles</p>
<p>Commit fd6b71fc fixed the situation where ipmi console was open (hvc0) but got
data on different console (hvc1).</p>
<p>During FSP R/R OPAL closes all consoles. After R/R complete FSP requests to
@@ -97,7 +98,6 @@ for each console. Latest kernel works fine without this patch.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -117,15 +117,17 @@ for each console. Latest kernel works fine without this patch.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -142,15 +144,14 @@ for each console. Latest kernel works fine without this patch.</p>
<li class="right" >
<a href="skiboot-5.4.1.html" title="skiboot-5.4.1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.10</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.4.11.html b/doc/release-notes/skiboot-5.4.11.html
index 0844b80..cc7a905 100644
--- a/doc/release-notes/skiboot-5.4.11.html
+++ b/doc/release-notes/skiboot-5.4.11.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.4.11 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.4.11 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.4.10.html" title="skiboot-5.4.10"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.11</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -51,18 +52,19 @@
<p>Over <a class="reference internal" href="skiboot-5.4.10.html#skiboot-5-4-10"><span class="std std-ref">skiboot-5.4.10</span></a>, we have below bug fix to support inband ipmi
interface:</p>
<ul>
-<li><p>FSP/IPMI: Handle FSP reset reload
+<li><p class="first">FSP/IPMI: Handle FSP reset reload
FSP IPMI driver serializes ipmi messages. It sends message to FSP and waits
for response before sending new message. It works fine as long as we get
response from FSP on time.</p>
<p>If we have inflight ipmi message during FSP R/R, we will not get resonse
from FSP. So if we initiate inband FSP R/R then all subsequent inband ipmi
message gets blocked.</p>
-<dl class="simple">
-<dt>Sequence:</dt><dd><ul class="simple">
-<li><p>ipmitool mc reset cold</p></li>
-<li><p>&lt;FSP R/R complete&gt;</p></li>
-<li><p>ipmitool &lt;any command&gt; &lt;– gets blocked</p></li>
+<dl class="docutils">
+<dt>Sequence:</dt>
+<dd><ul class="first last simple">
+<li>ipmitool mc reset cold</li>
+<li>&lt;FSP R/R complete&gt;</li>
+<li>ipmitool &lt;any command&gt; &lt;– gets blocked</li>
</ul>
</dd>
</dl>
@@ -72,7 +74,6 @@ message gets blocked.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -92,15 +93,17 @@ message gets blocked.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -117,15 +120,14 @@ message gets blocked.</p>
<li class="right" >
<a href="skiboot-5.4.10.html" title="skiboot-5.4.10"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.11</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.4.12.html b/doc/release-notes/skiboot-5.4.12.html
index 3480f2f..9ceb3a1 100644
--- a/doc/release-notes/skiboot-5.4.12.html
+++ b/doc/release-notes/skiboot-5.4.12.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.4.12 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.4.12 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.4.11.html" title="skiboot-5.4.11"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.12</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -51,12 +52,11 @@
<p>Over <a class="reference internal" href="skiboot-5.4.11.html#skiboot-5-4-11"><span class="std std-ref">skiboot-5.4.11</span></a>, we have below bug fix to support FSP based
system :</p>
<ul class="simple">
-<li><p>FSP/NVRAM: Do not assert in vNVRAM statistics call</p></li>
+<li>FSP/NVRAM: Do not assert in vNVRAM statistics call</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -76,15 +76,17 @@ system :</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -101,15 +103,14 @@ system :</p>
<li class="right" >
<a href="skiboot-5.4.11.html" title="skiboot-5.4.11"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.12</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.4.2.html b/doc/release-notes/skiboot-5.4.2.html
index 7c1e0c1..f97dfce 100644
--- a/doc/release-notes/skiboot-5.4.2.html
+++ b/doc/release-notes/skiboot-5.4.2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.4.2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.4.2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.4.12.html" title="skiboot-5.4.12"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -51,13 +52,12 @@
<p>Over <a class="reference internal" href="skiboot-5.4.1.html#skiboot-5-4-1"><span class="std std-ref">skiboot-5.4.1</span></a>, we have two bug fixes exclusively aimed at machines
with TPMs:</p>
<ul class="simple">
-<li><p>i2c: Add nuvoton TPM quirk, disallowing i2cdetect as it can hard lock the TPM</p></li>
-<li><p>p8-i2c improve I2C reset code path, solves getting stuck resetting i2c engine</p></li>
+<li>i2c: Add nuvoton TPM quirk, disallowing i2cdetect as it can hard lock the TPM</li>
+<li>p8-i2c improve I2C reset code path, solves getting stuck resetting i2c engine</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -77,15 +77,17 @@ with TPMs:</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -102,15 +104,14 @@ with TPMs:</p>
<li class="right" >
<a href="skiboot-5.4.12.html" title="skiboot-5.4.12"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.4.3.html b/doc/release-notes/skiboot-5.4.3.html
index 0f80067..1b50571 100644
--- a/doc/release-notes/skiboot-5.4.3.html
+++ b/doc/release-notes/skiboot-5.4.3.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.4.3 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.4.3 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.4.2.html" title="skiboot-5.4.2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -50,18 +51,17 @@
<a class="reference internal" href="skiboot-5.4.2.html#skiboot-5-4-2"><span class="std std-ref">skiboot-5.4.2</span></a> as the current stable release.</p>
<p>Over <a class="reference internal" href="skiboot-5.4.2.html#skiboot-5-4-2"><span class="std std-ref">skiboot-5.4.2</span></a>, we have a small number of bug fixes:</p>
<ul class="simple">
-<li><p>Makefile: Disable stack protector due to gcc problems</p></li>
-<li><p>Makefile: Use -ffixed-r13.
-We use r13 for our own stuff, make sure it’s properly fixed</p></li>
-<li><p>phb3: Lock the PHB on set_xive callbacks</p></li>
-<li><p>arch_flash_arm: Don’t assume mtd labels are short</p></li>
-<li><p>Stop using 3-operand cmp[l][i] for latest binutils</p></li>
-<li><p>hw/phb3: fix error handling in complete reset</p></li>
+<li>Makefile: Disable stack protector due to gcc problems</li>
+<li>Makefile: Use -ffixed-r13.
+We use r13 for our own stuff, make sure it’s properly fixed</li>
+<li>phb3: Lock the PHB on set_xive callbacks</li>
+<li>arch_flash_arm: Don’t assume mtd labels are short</li>
+<li>Stop using 3-operand cmp[l][i] for latest binutils</li>
+<li>hw/phb3: fix error handling in complete reset</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -81,15 +81,17 @@ We use r13 for our own stuff, make sure it’s properly fixed</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -106,15 +108,14 @@ We use r13 for our own stuff, make sure it’s properly fixed</p></li>
<li class="right" >
<a href="skiboot-5.4.2.html" title="skiboot-5.4.2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.4.4.html b/doc/release-notes/skiboot-5.4.4.html
index 1b17617..8a610f9 100644
--- a/doc/release-notes/skiboot-5.4.4.html
+++ b/doc/release-notes/skiboot-5.4.4.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.4.4 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.4.4 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.4.3.html" title="skiboot-5.4.3"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -50,7 +51,7 @@
<a class="reference internal" href="skiboot-5.4.3.html#skiboot-5-4-3"><span class="std std-ref">skiboot-5.4.3</span></a> as the current stable release in the 5.4.x series.</p>
<p>Over <a class="reference internal" href="skiboot-5.4.3.html#skiboot-5-4-3"><span class="std std-ref">skiboot-5.4.3</span></a>, we have a small number of bug fixes:</p>
<ul>
-<li><p>hw/fsp: Do not queue SP and SPCN class messages during reset/reload
+<li><p class="first">hw/fsp: Do not queue SP and SPCN class messages during reset/reload
In certain cases of communicating with the FSP (e.g. sensors), the OPAL FSP
driver returns a default code (async
completion) even though there is no known bound from the time of this error
@@ -59,7 +60,7 @@ leading to soft-lockup on the host side.</p>
<p>Mitigate both these (known) cases by returning OPAL_BUSY so the host driver
knows to retry later.</p>
</li>
-<li><p>core/pci: Fix PCIe slot’s presence
+<li><p class="first">core/pci: Fix PCIe slot’s presence
According to PCIe spec, the presence bit is hardcoded to 1 if PCIe
switch downstream port doesn’t support slot capability. The register
used for the check in pcie_slot_get_presence_state() is wrong. It
@@ -87,7 +88,7 @@ register. Otherwise, we always have present bit on the PCI topology.</p>
</pre></div>
</div>
</li>
-<li><p>core/pci: More reliable way to update PCI slot power state</p>
+<li><p class="first">core/pci: More reliable way to update PCI slot power state</p>
<p>The power control bit (SLOT_CTL, offset: PCIe cap + 0x18) isn’t
reliable enough to reflect the PCI slot’s power state. Instead,
the power indication bits are more reliable comparatively. This
@@ -115,12 +116,12 @@ have this issue on the integrated PLX 8718 switch.</p>
<p>This updates the cached PCI slot’s power state using the power
indication bits instead of power control bit, to fix above issue.</p>
</li>
-<li><p>core/pci: Avoid hreset after freset</p></li>
+<li><p class="first">core/pci: Avoid hreset after freset</p>
+</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -140,15 +141,17 @@ indication bits instead of power control bit, to fix above issue.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -165,15 +168,14 @@ indication bits instead of power control bit, to fix above issue.</p>
<li class="right" >
<a href="skiboot-5.4.3.html" title="skiboot-5.4.3"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.4.5.html b/doc/release-notes/skiboot-5.4.5.html
index f6b99b3..19c53ff 100644
--- a/doc/release-notes/skiboot-5.4.5.html
+++ b/doc/release-notes/skiboot-5.4.5.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.4.5 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.4.5 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.4.4.html" title="skiboot-5.4.4"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -50,7 +51,7 @@
<a class="reference internal" href="skiboot-5.4.4.html#skiboot-5-4-4"><span class="std std-ref">skiboot-5.4.4</span></a> as the current stable release in the 5.4.x series.</p>
<p>Over <a class="reference internal" href="skiboot-5.4.4.html#skiboot-5-4-4"><span class="std std-ref">skiboot-5.4.4</span></a>, we have a small number of bug fixes:</p>
<ul>
-<li><p>On FSP platforms: notify FSP of Platform Log ID after Host Initiated Reset Reload
+<li><p class="first">On FSP platforms: notify FSP of Platform Log ID after Host Initiated Reset Reload
Trigging a Host Initiated Reset (when the host detects the FSP has gone
out to lunch and should be rebooted), would cause “Unknown Command” messages
to appear in the OPAL log.</p>
@@ -65,7 +66,7 @@ to appear in the OPAL log.</p>
</pre></div>
</div>
</li>
-<li><p>hw/i2c: Fix early lock drop</p>
+<li><p class="first">hw/i2c: Fix early lock drop</p>
<p>When interacting with an I2C master the p8-i2c driver (common to p9)
aquires a per-master lock which it holds for the duration of it’s
interaction with the master. Unfortunately, when
@@ -75,7 +76,7 @@ contrary to the driver’s locking strategy which requires that the
caller aquire and drop the lock. This leads to a crash due to the
double unlock(), which skiboot treats as fatal.</p>
</li>
-<li><p>head.S: store all of LR and CTR</p>
+<li><p class="first">head.S: store all of LR and CTR</p>
<p>When saving the CTR and LR registers the skiboot exception handlers use the
â€stw’ instruction which only saves the lower 32 bits of the register. Given
these are both 64 bit registers this leads to some strange register dumps,
@@ -96,7 +97,6 @@ which obscures the underlying issue.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -116,15 +116,17 @@ which obscures the underlying issue.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -141,15 +143,14 @@ which obscures the underlying issue.</p>
<li class="right" >
<a href="skiboot-5.4.4.html" title="skiboot-5.4.4"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.4.6.html b/doc/release-notes/skiboot-5.4.6.html
index 03ac52f..9ee41c9 100644
--- a/doc/release-notes/skiboot-5.4.6.html
+++ b/doc/release-notes/skiboot-5.4.6.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.4.6 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.4.6 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.4.5.html" title="skiboot-5.4.5"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.6</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -51,7 +52,7 @@
<p>Over <a class="reference internal" href="skiboot-5.4.5.html#skiboot-5-4-5"><span class="std std-ref">skiboot-5.4.5</span></a>, we have a small number of bug fixes for
FSP based platforms:</p>
<ul>
-<li><p>FSP/CONSOLE: Workaround for unresponsive ipmi daemon</p>
+<li><p class="first">FSP/CONSOLE: Workaround for unresponsive ipmi daemon</p>
<p>In some corner cases, where FSP is active but not responding to
console MBOX message (due to buggy IPMI) and we have heavy console
write happening from kernel, then eventually our console buffer
@@ -69,7 +70,7 @@ for new data. But in normal condition only FSP can update â€next_out’
pointer and if we touch that pointer, it may introduce some other
race conditions. Hence we decided to just new console write request.</p>
</li>
-<li><p>FSP: Set status field in response message for timed out message</p>
+<li><p class="first">FSP: Set status field in response message for timed out message</p>
<p>For timed out FSP messages, we set message status as “fsp_msg_timeout”.
But most FSP driver users (like surviellance) are ignoring this field.
They always look for FSP returned status value in callback function
@@ -86,17 +87,17 @@ response from FSP.</p>
<p>Here SURV code thought it got valid response from FSP. But actually we didn’t
receive response from FSP.</p>
</li>
-<li><p>FSP: Improve timeout message</p>
+<li><p class="first">FSP: Improve timeout message</p>
<p>Presently we print word0 and word1 in error log. word0 contains
sequence number and command class. One has to understand word0
format to identify command class.</p>
<p>Lets explicitly print command class, sub command etc.</p>
</li>
-<li><p>FSP/RTC: Remove local fsp_in_reset variable</p>
+<li><p class="first">FSP/RTC: Remove local fsp_in_reset variable</p>
<p>Now that we are using fsp_in_rr() to detect FSP reset/reload, fsp_in_reset
become redundant. Lets remove this local variable.</p>
</li>
-<li><p>FSP/RTC: Fix possible FSP R/R issue in rtc write path</p>
+<li><p class="first">FSP/RTC: Fix possible FSP R/R issue in rtc write path</p>
<p>fsp_opal_rtc_write() checks FSP status before queueing message to FSP. But if
FSP R/R starts before getting response to queued message then we will continue
to return OPAL_BUSY_EVENT to host. In some extreme condition host may
@@ -105,17 +106,17 @@ and return OPAL_SUCCESS to host.</p>
<p>This patch caches new values and returns OPAL_SUCCESS if FSP R/R is happening.
And once FSP is back we will send cached value to FSP.</p>
</li>
-<li><p>hw/fsp/rtc: read/write cached rtc tod on fsp hir.</p>
+<li><p class="first">hw/fsp/rtc: read/write cached rtc tod on fsp hir.</p>
<p>Currently fsp-rtc reads/writes the cached RTC TOD on an fsp
reset. Use latest fsp_in_rr() function to properly read the cached rtc
value when fsp reset initiated by the hir.</p>
<p>Below is the kernel trace when we set hw clock, when hir process starts.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">1727.775824</span><span class="p">]</span> <span class="n">NMI</span> <span class="n">watchdog</span><span class="p">:</span> <span class="n">BUG</span><span class="p">:</span> <span class="n">soft</span> <span class="n">lockup</span> <span class="o">-</span> <span class="n">CPU</span><span class="c1">#57 stuck for 23s! [hwclock:7688]</span>
<span class="p">[</span> <span class="mf">1727.775856</span><span class="p">]</span> <span class="n">Modules</span> <span class="n">linked</span> <span class="ow">in</span><span class="p">:</span> <span class="n">vmx_crypto</span> <span class="n">ibmpowernv</span> <span class="n">ipmi_powernv</span> <span class="n">uio_pdrv_genirq</span> <span class="n">ipmi_devintf</span> <span class="n">powernv_op_panel</span> <span class="n">uio</span> <span class="n">ipmi_msghandler</span> <span class="n">powernv_rng</span> <span class="n">leds_powernv</span> <span class="n">ip_tables</span> <span class="n">x_tables</span> <span class="n">autofs4</span> <span class="n">ses</span> <span class="n">enclosure</span> <span class="n">scsi_transport_sas</span> <span class="n">crc32c_vpmsum</span> <span class="n">lpfc</span> <span class="n">ipr</span> <span class="n">tg3</span> <span class="n">scsi_transport_fc</span>
-<span class="p">[</span> <span class="mf">1727.775883</span><span class="p">]</span> <span class="n">CPU</span><span class="p">:</span> <span class="mi">57</span> <span class="n">PID</span><span class="p">:</span> <span class="mi">7688</span> <span class="n">Comm</span><span class="p">:</span> <span class="n">hwclock</span> <span class="n">Not</span> <span class="n">tainted</span> <span class="mf">4.10.0</span><span class="o">-</span><span class="mi">14</span><span class="o">-</span><span class="n">generic</span> <span class="c1">#16-Ubuntu</span>
+<span class="p">[</span> <span class="mf">1727.775883</span><span class="p">]</span> <span class="n">CPU</span><span class="p">:</span> <span class="mi">57</span> <span class="n">PID</span><span class="p">:</span> <span class="mi">7688</span> <span class="n">Comm</span><span class="p">:</span> <span class="n">hwclock</span> <span class="n">Not</span> <span class="n">tainted</span> <span class="mf">4.10</span><span class="o">.</span><span class="mi">0</span><span class="o">-</span><span class="mi">14</span><span class="o">-</span><span class="n">generic</span> <span class="c1">#16-Ubuntu</span>
<span class="p">[</span> <span class="mf">1727.775883</span><span class="p">]</span> <span class="n">task</span><span class="p">:</span> <span class="n">c000000fdfdc8400</span> <span class="n">task</span><span class="o">.</span><span class="n">stack</span><span class="p">:</span> <span class="n">c000000fdfef4000</span>
<span class="p">[</span> <span class="mf">1727.775884</span><span class="p">]</span> <span class="n">NIP</span><span class="p">:</span> <span class="n">c00000000090540c</span> <span class="n">LR</span><span class="p">:</span> <span class="n">c0000000000846f4</span> <span class="n">CTR</span><span class="p">:</span> <span class="mi">000000003006</span><span class="n">dd70</span>
-<span class="p">[</span> <span class="mf">1727.775885</span><span class="p">]</span> <span class="n">REGS</span><span class="p">:</span> <span class="n">c000000fdfef79a0</span> <span class="n">TRAP</span><span class="p">:</span> <span class="mi">0901</span> <span class="n">Not</span> <span class="n">tainted</span> <span class="p">(</span><span class="mf">4.10.0</span><span class="o">-</span><span class="mi">14</span><span class="o">-</span><span class="n">generic</span><span class="p">)</span>
+<span class="p">[</span> <span class="mf">1727.775885</span><span class="p">]</span> <span class="n">REGS</span><span class="p">:</span> <span class="n">c000000fdfef79a0</span> <span class="n">TRAP</span><span class="p">:</span> <span class="mi">0901</span> <span class="n">Not</span> <span class="n">tainted</span> <span class="p">(</span><span class="mf">4.10</span><span class="o">.</span><span class="mi">0</span><span class="o">-</span><span class="mi">14</span><span class="o">-</span><span class="n">generic</span><span class="p">)</span>
<span class="p">[</span> <span class="mf">1727.775886</span><span class="p">]</span> <span class="n">MSR</span><span class="p">:</span> <span class="mi">9000000000009033</span> <span class="o">&lt;</span><span class="n">SF</span><span class="p">,</span><span class="n">HV</span><span class="p">,</span><span class="n">EE</span><span class="p">,</span><span class="n">ME</span><span class="p">,</span><span class="n">IR</span><span class="p">,</span><span class="n">DR</span><span class="p">,</span><span class="n">RI</span><span class="p">,</span><span class="n">LE</span><span class="o">&gt;</span>
<span class="p">[</span> <span class="mf">1727.775889</span><span class="p">]</span> <span class="n">CR</span><span class="p">:</span> <span class="mi">28024442</span> <span class="n">XER</span><span class="p">:</span> <span class="mi">20000000</span>
<span class="p">[</span> <span class="mf">1727.775890</span><span class="p">]</span> <span class="n">CFAR</span><span class="p">:</span> <span class="n">c00000000008472c</span> <span class="n">SOFTE</span><span class="p">:</span> <span class="mi">1</span>
@@ -141,12 +142,12 @@ value when fsp reset initiated by the hir.</p>
<p>With this fix ran fsp hir torture testcase in the above test
which is working fine.</p>
</li>
-<li><p>FSP/CHIPTOD: Return false in error path</p></li>
+<li><p class="first">FSP/CHIPTOD: Return false in error path</p>
+</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -166,15 +167,17 @@ which is working fine.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -191,15 +194,14 @@ which is working fine.</p>
<li class="right" >
<a href="skiboot-5.4.5.html" title="skiboot-5.4.5"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.6</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.4.7.html b/doc/release-notes/skiboot-5.4.7.html
index 490f279..cc0e7ca 100644
--- a/doc/release-notes/skiboot-5.4.7.html
+++ b/doc/release-notes/skiboot-5.4.7.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.4.7 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.4.7 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.4.6.html" title="skiboot-5.4.6"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.7</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -50,7 +51,7 @@
<a class="reference internal" href="skiboot-5.4.6.html#skiboot-5-4-6"><span class="std std-ref">skiboot-5.4.6</span></a> as the current stable release in the 5.4.x series.</p>
<p>Over <a class="reference internal" href="skiboot-5.4.6.html#skiboot-5-4-6"><span class="std std-ref">skiboot-5.4.6</span></a>, we have two backported bug fixes for FSP platforms:</p>
<ul>
-<li><p>FSP: Add check to detect FSP Reset/Reload inside fsp_sync_msg()</p>
+<li><p class="first">FSP: Add check to detect FSP Reset/Reload inside fsp_sync_msg()</p>
<p>During FSP Reset/Reload we move outstanding MBOX messages from msgq to
rr_queue including inflight message (fsp_reset_cmdclass()). But we are not
resetting inflight message state.</p>
@@ -60,7 +61,7 @@ endup waiting in fsp_sync_msg() until everything becomes normal.</p>
<p>This patch adds fsp_in_rr() check to fsp_sync_msg() and return error to
caller if FSP is in R/R.</p>
</li>
-<li><p>platforms/ibm-fsp/firenze: Fix PCI slot power-off pattern</p>
+<li><p class="first">platforms/ibm-fsp/firenze: Fix PCI slot power-off pattern</p>
<p>When powering off the PCI slot, the corresponding bits should
be set to 0bxx00xx00 instead of 0bxx11xx11. Otherwise, the
specified PCI slot can’t be put into power-off state. Fortunately,
@@ -70,7 +71,6 @@ it didn’t introduce any side-effects so far.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -90,15 +90,17 @@ it didn’t introduce any side-effects so far.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -115,15 +117,14 @@ it didn’t introduce any side-effects so far.</p>
<li class="right" >
<a href="skiboot-5.4.6.html" title="skiboot-5.4.6"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.7</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.4.8.html b/doc/release-notes/skiboot-5.4.8.html
index 4a9ba36..6637939 100644
--- a/doc/release-notes/skiboot-5.4.8.html
+++ b/doc/release-notes/skiboot-5.4.8.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.4.8 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.4.8 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.4.7.html" title="skiboot-5.4.7"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.8</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -50,11 +51,11 @@
<a class="reference internal" href="skiboot-5.4.7.html#skiboot-5-4-7"><span class="std std-ref">skiboot-5.4.7</span></a> as the current stable release in the 5.4.x series.</p>
<p>Over <a class="reference internal" href="skiboot-5.4.7.html#skiboot-5-4-7"><span class="std std-ref">skiboot-5.4.7</span></a>, we have a few bug fixes for FSP platforms:</p>
<ul>
-<li><p>libflash/file: Handle short read()s and write()s correctly</p>
+<li><p class="first">libflash/file: Handle short read()s and write()s correctly</p>
<p>Currently we don’t move the buffer along for a short read() or write()
and nor do we request only the remaining amount.</p>
</li>
-<li><p>FSP/NVRAM: Handle “get vNVRAM statistics” command</p>
+<li><p class="first">FSP/NVRAM: Handle “get vNVRAM statistics” command</p>
<p>FSP sends MBOX command (cmd : 0xEB, subcmd : 0x05, mod : 0x00) to get vNVRAM
statistics. OPAL doesn’t maintain any such statistics. Hence return
FSP_STATUS_INVALID_SUBCMD.</p>
@@ -68,14 +69,14 @@ FSP_STATUS_INVALID_SUBCMD.</p>
</div>
</div></blockquote>
</li>
-<li><p>FSP/CONSOLE: Limit number of error logging</p>
+<li><p class="first">FSP/CONSOLE: Limit number of error logging</p>
<p>Commit c8a7535f (FSP/CONSOLE: Workaround for unresponsive ipmi daemon, added
in skiboot 5.4.6 and 5.7-rc1) added error logging when buffer is full. In some
corner cases kernel may call this function multiple time and we may endup logging
error again and again.</p>
<p>This patch fixes it by generating error log only once.</p>
</li>
-<li><p>FSP/CONSOLE: Fix fsp_console_write_buffer_space() call</p>
+<li><p class="first">FSP/CONSOLE: Fix fsp_console_write_buffer_space() call</p>
<p>Kernel calls fsp_console_write_buffer_space() to check console buffer space
availability. If there is enough buffer space to write data, then kernel will
call fsp_console_write() to write actual data.</p>
@@ -91,7 +92,7 @@ point we will start timer with timeout of SER_BUFFER_OUT_TIMEOUT (10 secs).
If situation is not improved within 10 seconds means something went bad. Lets
return OPAL_RESOURCE so that kernel can drop console write and continue.</p>
</li>
-<li><p>FSP/CONSOLE: Close SOL session during R/R</p>
+<li><p class="first">FSP/CONSOLE: Close SOL session during R/R</p>
<p>Presently we are not closing SOL and FW console sessions during R/R. Host will
continue to write to SOL buffer during FSP R/R. If there is heavy console write
operation happening during FSP R/R (like running <cite>top</cite> command inside console),
@@ -117,7 +118,7 @@ we may see RCU stalls (like below) in kernel.</p>
</div>
<p>Hence lets close SOL (and FW console) during FSP R/R.</p>
</li>
-<li><p>FSP/CONSOLE: Do not associate unavailable console</p>
+<li><p class="first">FSP/CONSOLE: Do not associate unavailable console</p>
<p>Presently OPAL sends associate/unassociate MBOX command for all
FSP serial console (like below OPAL message). We have to check
console is available or not before sending this message.</p>
@@ -127,73 +128,73 @@ console is available or not before sending this message.</p>
</pre></div>
</div>
</li>
-<li><p>FSP: Disable PSI link whenever FSP tells OPAL about impending Reset/Reload</p>
+<li><p class="first">FSP: Disable PSI link whenever FSP tells OPAL about impending Reset/Reload</p>
<p>Commit 42d5d047 fixed scenario where DPO has been initiated, but FSP went
into reset before the CEC power down came in. But this is generic issue
that can happen in normal shutdown path as well.</p>
<p>Hence disable PSI link as soon as we detect FSP impending R/R.</p>
</li>
-<li><p>fsp: return OPAL_BUSY_EVENT on failure sending FSP_CMD_POWERDOWN_NORM
+<li><p class="first">fsp: return OPAL_BUSY_EVENT on failure sending FSP_CMD_POWERDOWN_NORM
Also, return OPAL_BUSY_EVENT on failure sending FSP_CMD_REBOOT / DEEP_REBOOT.</p>
<p>We had a race condition between FSP Reset/Reload and powering down
the system from the host:</p>
<p>Roughly:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 2%" />
-<col style="width: 29%" />
-<col style="width: 69%" />
+<col width="2%" />
+<col width="29%" />
+<col width="69%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>#</p></th>
-<th class="head"><p>FSP</p></th>
-<th class="head"><p>Host</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">#</th>
+<th class="head">FSP</th>
+<th class="head">Host</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>1</p></td>
-<td><p>Power on</p></td>
-<td></td>
+<tbody valign="top">
+<tr class="row-even"><td>1</td>
+<td>Power on</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p>2</p></td>
-<td></td>
-<td><p>Power on</p></td>
+<tr class="row-odd"><td>2</td>
+<td>&#160;</td>
+<td>Power on</td>
</tr>
-<tr class="row-even"><td><p>3</p></td>
-<td><p>(inject EPOW)</p></td>
-<td></td>
+<tr class="row-even"><td>3</td>
+<td>(inject EPOW)</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p>4</p></td>
-<td><p>(trigger FSP R/R)</p></td>
-<td></td>
+<tr class="row-odd"><td>4</td>
+<td>(trigger FSP R/R)</td>
+<td>&#160;</td>
</tr>
-<tr class="row-even"><td><p>5</p></td>
-<td></td>
-<td><p>Processes EPOW event, starts shutting down</p></td>
+<tr class="row-even"><td>5</td>
+<td>&#160;</td>
+<td>Processes EPOW event, starts shutting down</td>
</tr>
-<tr class="row-odd"><td><p>6</p></td>
-<td></td>
-<td><p>calls OPAL_CEC_POWER_DOWN</p></td>
+<tr class="row-odd"><td>6</td>
+<td>&#160;</td>
+<td>calls OPAL_CEC_POWER_DOWN</td>
</tr>
-<tr class="row-even"><td><p>7</p></td>
-<td><p>(is still in R/R)</p></td>
-<td></td>
+<tr class="row-even"><td>7</td>
+<td>(is still in R/R)</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p>8</p></td>
-<td></td>
-<td><p>gets OPAL_INTERNAL_ERROR, spins in opal_poll_events</p></td>
+<tr class="row-odd"><td>8</td>
+<td>&#160;</td>
+<td>gets OPAL_INTERNAL_ERROR, spins in opal_poll_events</td>
</tr>
-<tr class="row-even"><td><p>9</p></td>
-<td><p>(FSP comes back)</p></td>
-<td></td>
+<tr class="row-even"><td>9</td>
+<td>(FSP comes back)</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p>10</p></td>
-<td></td>
-<td><p>spinning in opal_poll_events</p></td>
+<tr class="row-odd"><td>10</td>
+<td>&#160;</td>
+<td>spinning in opal_poll_events</td>
</tr>
-<tr class="row-even"><td><p>11</p></td>
-<td><p>(thinks host is running)</p></td>
-<td></td>
+<tr class="row-even"><td>11</td>
+<td>(thinks host is running)</td>
+<td>&#160;</td>
</tr>
</tbody>
</table>
@@ -232,7 +233,6 @@ Reset/Reload handling before we power off the system.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -252,15 +252,17 @@ Reset/Reload handling before we power off the system.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -277,15 +279,14 @@ Reset/Reload handling before we power off the system.</p>
<li class="right" >
<a href="skiboot-5.4.7.html" title="skiboot-5.4.7"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.8</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.4.9.html b/doc/release-notes/skiboot-5.4.9.html
index db1f5ef..d1afd97 100644
--- a/doc/release-notes/skiboot-5.4.9.html
+++ b/doc/release-notes/skiboot-5.4.9.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.4.9 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.4.9 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.4.8.html" title="skiboot-5.4.8"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.9</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -50,7 +51,7 @@
<a class="reference internal" href="skiboot-5.4.8.html#skiboot-5-4-8"><span class="std std-ref">skiboot-5.4.8</span></a> as the current stable release in the 5.4.x series.</p>
<p>Over <a class="reference internal" href="skiboot-5.4.8.html#skiboot-5-4-8"><span class="std std-ref">skiboot-5.4.8</span></a>, we have one new feature:</p>
<ul>
-<li><p>Parse IPL FW feature settings</p>
+<li><p class="first">Parse IPL FW feature settings</p>
<p>Add parsing for the firmware feature flags in the HDAT. This
indicates the settings of various parameters which are set at IPL time
by firmware.</p>
@@ -59,7 +60,6 @@ by firmware.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -79,15 +79,17 @@ by firmware.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -104,15 +106,14 @@ by firmware.</p>
<li class="right" >
<a href="skiboot-5.4.8.html" title="skiboot-5.4.8"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.4.9</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.5.0-rc1.html b/doc/release-notes/skiboot-5.5.0-rc1.html
index 89af06f..bdfdef1 100644
--- a/doc/release-notes/skiboot-5.5.0-rc1.html
+++ b/doc/release-notes/skiboot-5.5.0-rc1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.5.0-rc1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.5.0-rc1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.5.0.html" title="skiboot-5.5.0"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.5.0-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -64,15 +65,14 @@ and issues: <a class="reference external" href="https://github.com/open-power/sk
<div class="section" id="new-platforms">
<h2>New Platforms<a class="headerlink" href="#new-platforms" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>SuperMicro’s (SMC) P8DNU: An astbmc based POWER8 platform</p></li>
-<li><p>Add a generic platform to help with bringup of new systems.</p></li>
-<li><p>Four POWER9 based systems (NOTE: All POWER9 systems should be considered
-for bringup use only at this point):</p>
-<ul>
-<li><p>Romulus</p></li>
-<li><p>Witherspoon (a POWER9 system with NVLink2 attached GPUs)</p></li>
-<li><p>Zaius (OpenCompute platform, also known as “Barreleye 2”)</p></li>
-<li><p>ZZ (FSP based system)</p></li>
+<li>SuperMicro’s (SMC) P8DNU: An astbmc based POWER8 platform</li>
+<li>Add a generic platform to help with bringup of new systems.</li>
+<li>Four POWER9 based systems (NOTE: All POWER9 systems should be considered
+for bringup use only at this point):<ul>
+<li>Romulus</li>
+<li>Witherspoon (a POWER9 system with NVLink2 attached GPUs)</li>
+<li>Zaius (OpenCompute platform, also known as “Barreleye 2”)</li>
+<li>ZZ (FSP based system)</li>
</ul>
</li>
</ul>
@@ -80,7 +80,7 @@ for bringup use only at this point):</p>
<div class="section" id="new-features">
<h2>New features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>System reset IPI facility and Mambo implementation
+<li><p class="first">System reset IPI facility and Mambo implementation
Add an opal call <a class="reference internal" href="../opal-api/opal-signal-system-reset-145.html#opal-signal-system-reset"><span class="std std-ref">OPAL_SIGNAL_SYSTEM_RESET</span></a> which allows system reset
exceptions to be raised on other CPUs and act as an NMI IPI. There
is an initial simple Mambo implementation, but allowances are made
@@ -90,9 +90,10 @@ hardware (see <a class="reference external" href="https://patchwork.ozlabs.org/p
makes it into a future release.</p>
<p>This implements an in-band NMI equivalent.</p>
</li>
-<li><p>add CONTRIBUTING.md, ensuring that people new to the project have a one-stop
-place to find out how to get started.</p></li>
-<li><p>interrupts: Add optional name for OPAL interrupts</p>
+<li><p class="first">add CONTRIBUTING.md, ensuring that people new to the project have a one-stop
+place to find out how to get started.</p>
+</li>
+<li><p class="first">interrupts: Add optional name for OPAL interrupts</p>
<p>This adds the infrastructure for an interrupt source to provide
a name for an interrupt directed toward OPAL. Those names will
be put into an “opal-interrupts-names” property which is a
@@ -100,13 +101,13 @@ standard DT string list corresponding 1:1 with the “opal-interrupts”
property. PSI interrupts get names, and this is visible in Linux
through /proc/interrupts</p>
</li>
-<li><p>platform: add OPAL_REBOOT_FULL_IPL reboot type</p>
+<li><p class="first">platform: add OPAL_REBOOT_FULL_IPL reboot type</p>
<p>There may be circumstances in which a user wants to force a full IPL reboot
rather than using fast reboot. Add a new reboot type, OPAL_REBOOT_FULL_IPL,
that disables fast reboot. On platforms which don’t support fast reboot,
this will be equivalent to a normal reboot.</p>
</li>
-<li><p>phb3: Trick to allow control of the PCIe link width and speed</p>
+<li><p class="first">phb3: Trick to allow control of the PCIe link width and speed</p>
<p>This implements a hook inside OPAL that catches 16 and 32 bit writes
to the link status register of the PHB.</p>
<p>It allows you to write a new speed or a new width, and OPAL will then
@@ -140,12 +141,12 @@ cause the PHB to renegociate.</p>
</div>
</div></blockquote>
</li>
-<li><p>core/init: Add hdat-map property to OPAL node.</p>
+<li><p class="first">core/init: Add hdat-map property to OPAL node.</p>
<p>Exports the HDAT heap to the OS. This allows the OS to view the HDAT heap
directly. This allows us to view the HDAT area without having to use
getmemproc.</p>
</li>
-<li><p>Add a generic platform: If /bmc in device tree, attempt to init one
+<li><p class="first">Add a generic platform: If /bmc in device tree, attempt to init one
For the most part, this gets us somewhere on some OpenPOWER systems
before there’s a platform file for that machine.</p>
<p>Useful in bringup only, and marked as such with scary looking log
@@ -156,8 +157,9 @@ messages.</p>
<div class="section" id="core">
<h2>Core<a class="headerlink" href="#core" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>asm: Don’t try to set LPCR:LPES1 on P8 and P9, the bit doesn’t exist.</p></li>
-<li><p>pci: Add a framework for quirks</p>
+<li><p class="first">asm: Don’t try to set LPCR:LPES1 on P8 and P9, the bit doesn’t exist.</p>
+</li>
+<li><p class="first">pci: Add a framework for quirks</p>
<p>In future we may want to be able to do fixups for specific PCI devices in
skiboot, so add a small framework for doing this.</p>
<p>This is not intended for the same purposes as quirks in the Linux kernel,
@@ -166,17 +168,22 @@ configured. This is intended to enable having a custom path to make
changes that don’t directly interact with the PCI device, for example
adding device tree entries.</p>
</li>
-<li><p>hw/slw: fix possible NULL dereference</p></li>
-<li><p>slw: Print enabled stop states on boot</p></li>
-<li><p>uart: Fix Linux pass-through policy, provide NVRAM override option</p></li>
-<li><p>libc/stdio/vsnprintf.c: add explicit fallthrough, this silences a recent
-(GCC 7.x) warning</p></li>
-<li><p>init: print the FDT blob size in decimal</p></li>
-<li><p>init: Print some more info before booting linux</p>
+<li><p class="first">hw/slw: fix possible NULL dereference</p>
+</li>
+<li><p class="first">slw: Print enabled stop states on boot</p>
+</li>
+<li><p class="first">uart: Fix Linux pass-through policy, provide NVRAM override option</p>
+</li>
+<li><p class="first">libc/stdio/vsnprintf.c: add explicit fallthrough, this silences a recent
+(GCC 7.x) warning</p>
+</li>
+<li><p class="first">init: print the FDT blob size in decimal</p>
+</li>
+<li><p class="first">init: Print some more info before booting linux</p>
<p>The kernel command line from nvram and the stdout-path are
useful to know when debugging console related problems.</p>
</li>
-<li><p>Makefile: Disable stack protector due to gcc problems</p>
+<li><p class="first">Makefile: Disable stack protector due to gcc problems</p>
<p>Depending on how it was built, gcc will use the canary from a global
(works for us) or from the TLS (doesn’t work for us and accesses
random stuff instead).</p>
@@ -184,68 +191,102 @@ random stuff instead).</p>
to force use of globals, but in the meantime, disable the stack
protector.</p>
</li>
-<li><p>Stop using 3-operand cmp[l][i] for latest binutils
+<li><p class="first">Stop using 3-operand cmp[l][i] for latest binutils
Since a5721ba270, binutils does not support 3-operand cmp[l][i].
-This adds (previously optional) parameter L.</p></li>
-<li><p>buddy: Add a simple generic buddy allocator</p></li>
-<li><p>stack: Don’t recurse into __stack_chk_fail</p></li>
-<li><p>Makefile: Use -ffixed-r13
-We use r13 for our own stuff, make sure it’s properly fixed</p></li>
-<li><p>Always set ibm,occ-functional-state correctly</p></li>
-<li><p>psi: fix the xive registers initialization on P8, which seems to be fine
-for real HW but causes a lof of pain under qemu</p></li>
-<li><p>slw: Set PSSCR value for idle states</p></li>
-<li><p>Limit number of “Poller recursion detected” errors to display</p>
+This adds (previously optional) parameter L.</p>
+</li>
+<li><p class="first">buddy: Add a simple generic buddy allocator</p>
+</li>
+<li><p class="first">stack: Don’t recurse into __stack_chk_fail</p>
+</li>
+<li><p class="first">Makefile: Use -ffixed-r13
+We use r13 for our own stuff, make sure it’s properly fixed</p>
+</li>
+<li><p class="first">Always set ibm,occ-functional-state correctly</p>
+</li>
+<li><p class="first">psi: fix the xive registers initialization on P8, which seems to be fine
+for real HW but causes a lof of pain under qemu</p>
+</li>
+<li><p class="first">slw: Set PSSCR value for idle states</p>
+</li>
+<li><p class="first">Limit number of “Poller recursion detected” errors to display</p>
<p>In some error conditions, we could spiral out of control on this
and spend all of our time printing the exact same backtrace.</p>
<p>Limit it to 16 times, because 16 is a nice number.</p>
</li>
-<li><p>slw: do SLW timer testing while holding xscom lock</p>
+<li><p class="first">slw: do SLW timer testing while holding xscom lock</p>
<p>We add some routines that let a caller get the xscom lock once and
then do a bunch of xscoms while holding it.
In some situations without this, it could take long enough to get
the xscom lock that the 1ms timeout would expire and we’d falsely
think the SLW timer didn’t work when in fact it did.</p>
</li>
-<li><p>wait_for_resource_loaded: don’t needlessly sleep for 5ms</p></li>
-<li><p>run pollers in cpu_process_local_jobs() if running job synchonously</p></li>
-<li><p>fsp: Don’t recurse pollers in ibm_fsp_terminate</p></li>
-<li><p>chiptod: More hardening against -1 chip ID</p></li>
-<li><p>interrupts: Rewrite/correct doc for opal_set/get_xive</p></li>
-<li><p>cpu: Don’t enable nap mode/PM mode on non-P8</p></li>
-<li><p>platform: Call generic platform probe and init UART there</p></li>
-<li><p>psi: Don’t register more interrupts than the HW supports</p></li>
-<li><p>psi: Add DT option to disable LPC interrupts</p></li>
+<li><p class="first">wait_for_resource_loaded: don’t needlessly sleep for 5ms</p>
+</li>
+<li><p class="first">run pollers in cpu_process_local_jobs() if running job synchonously</p>
+</li>
+<li><p class="first">fsp: Don’t recurse pollers in ibm_fsp_terminate</p>
+</li>
+<li><p class="first">chiptod: More hardening against -1 chip ID</p>
+</li>
+<li><p class="first">interrupts: Rewrite/correct doc for opal_set/get_xive</p>
+</li>
+<li><p class="first">cpu: Don’t enable nap mode/PM mode on non-P8</p>
+</li>
+<li><p class="first">platform: Call generic platform probe and init UART there</p>
+</li>
+<li><p class="first">psi: Don’t register more interrupts than the HW supports</p>
+</li>
+<li><p class="first">psi: Add DT option to disable LPC interrupts</p>
+</li>
</ul>
</div>
<div class="section" id="i2c-and-tpm">
<h2>I2C and TPM<a class="headerlink" href="#i2c-and-tpm" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>p8i2c: Use calculated poll_interval when booting OPAL
+<li><p class="first">p8i2c: Use calculated poll_interval when booting OPAL
Otherwise we’d default to 2seconds (TIMER_POLL) during boot on
chips with a functional i2c interrupt, leading to slow i2c
-during boot (or hitting timeouts instead).</p></li>
-<li><p>i2c: Add i2c_run_req() to crank the state machine for a request</p></li>
-<li><p>tpm_i2c_nuvoton: work out the polling time using mftb()</p></li>
-<li><p>tpm_i2c_nuvoton: handle errors after reading the tpm fifo</p></li>
-<li><p>tpm_i2c_nuvoton: cleanup variables in tpm_read_fifo()</p></li>
-<li><p>tpm_i2c_nuvoton: handle errors after writting the tpm fifo</p></li>
-<li><p>tpm_i2c_nuvoton: cleanup variables in tpm_write_fifo()</p></li>
-<li><p>tpm_i2c_nuvoton: handle errors after writing sts.commandReady in step 5</p></li>
-<li><p>tpm_i2c_nuvoton: handle errors after writing sts.go</p></li>
-<li><p>tpm_i2c_nuvoton: handle errors after checking the tpm fifo status</p></li>
-<li><p>tpm_i2c_nuvoton: return burst_count in tpm_read_burst_count()</p></li>
-<li><p>tpm_i2c_nuvoton: isolate the code that handles the TPM_TIMEOUT_D timeout</p></li>
-<li><p>tpm_i2c_nuvoton: handle errors after reading sts.commandReady</p></li>
-<li><p>tpm_i2c_nuvoton: add tpm_status_read_byte()</p></li>
-<li><p>tpm_i2c_nuvoton: add tpm_check_status()</p></li>
-<li><p>tpm_i2c_nuvoton: rename defines to shorter names</p></li>
-<li><p>tpm_i2c_interface: decouple rc from being done with i2c request</p></li>
-<li><p>tpm_i2c_interface: set timeout before each request</p></li>
-<li><p>i2c: Add nuvoton quirk, disallowing i2cdetect as it locks TPM</p>
+during boot (or hitting timeouts instead).</p>
+</li>
+<li><p class="first">i2c: Add i2c_run_req() to crank the state machine for a request</p>
+</li>
+<li><p class="first">tpm_i2c_nuvoton: work out the polling time using mftb()</p>
+</li>
+<li><p class="first">tpm_i2c_nuvoton: handle errors after reading the tpm fifo</p>
+</li>
+<li><p class="first">tpm_i2c_nuvoton: cleanup variables in tpm_read_fifo()</p>
+</li>
+<li><p class="first">tpm_i2c_nuvoton: handle errors after writting the tpm fifo</p>
+</li>
+<li><p class="first">tpm_i2c_nuvoton: cleanup variables in tpm_write_fifo()</p>
+</li>
+<li><p class="first">tpm_i2c_nuvoton: handle errors after writing sts.commandReady in step 5</p>
+</li>
+<li><p class="first">tpm_i2c_nuvoton: handle errors after writing sts.go</p>
+</li>
+<li><p class="first">tpm_i2c_nuvoton: handle errors after checking the tpm fifo status</p>
+</li>
+<li><p class="first">tpm_i2c_nuvoton: return burst_count in tpm_read_burst_count()</p>
+</li>
+<li><p class="first">tpm_i2c_nuvoton: isolate the code that handles the TPM_TIMEOUT_D timeout</p>
+</li>
+<li><p class="first">tpm_i2c_nuvoton: handle errors after reading sts.commandReady</p>
+</li>
+<li><p class="first">tpm_i2c_nuvoton: add tpm_status_read_byte()</p>
+</li>
+<li><p class="first">tpm_i2c_nuvoton: add tpm_check_status()</p>
+</li>
+<li><p class="first">tpm_i2c_nuvoton: rename defines to shorter names</p>
+</li>
+<li><p class="first">tpm_i2c_interface: decouple rc from being done with i2c request</p>
+</li>
+<li><p class="first">tpm_i2c_interface: set timeout before each request</p>
+</li>
+<li><p class="first">i2c: Add nuvoton quirk, disallowing i2cdetect as it locks TPM</p>
<p>p8-i2c reset things manually in some error conditions</p>
</li>
-<li><p>stb: create-container and wrap skiboot in Secure/Trusted Boot container</p>
+<li><p class="first">stb: create-container and wrap skiboot in Secure/Trusted Boot container</p>
<p>We produce <strong>UNSIGNED</strong> skiboot.lid.stb and skiboot.lid.xz.stb as build
artifacts.</p>
<p>These are suitable blobs for flashing onto Trusted Boot enabled op-build
@@ -258,7 +299,7 @@ make Hostboot behave.</p>
<div class="section" id="pci">
<h2>PCI<a class="headerlink" href="#pci" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>core/pci: Support SRIOV VFs</p>
+<li><p class="first">core/pci: Support SRIOV VFs</p>
<p>Currently, skiboot can’t see SRIOV VFs. It introduces some troubles
as I can see: The device initialization logic (phb-&gt;ops-&gt;device_init())
isn’t applied to VFs, meaning we have to maintain same and duplicated
@@ -279,12 +320,12 @@ register PCI config register filter against PCICAP_EXP_DEVCTL. The
filter’s handler caches what is written to MPS field and returns
the cached value on read, to eliminate the gap mentioned as above.</p>
</li>
-<li><p>core/pci: Avoid hreset after freset</p>
+<li><p class="first">core/pci: Avoid hreset after freset</p>
<p>Commit 5ac71c9 (“pci: Avoid hot resets at boot time”) missed to
avoid hot reset after fundamental reset for PCIe common slots.</p>
<p>This fixes it.</p>
</li>
-<li><p>core/pci: Enforce polling PCIe link in hot-add path</p>
+<li><p class="first">core/pci: Enforce polling PCIe link in hot-add path</p>
<p>In surprise hot-add path, the power state isn’t changed on hardware.
Instead, we set the cached power state (&#64;slot-&gt;power_state) and
return OPAL_SUCCESS. The upper layer starts the PCI probing immediately
@@ -295,24 +336,28 @@ we do have PCI adpater connected to the slot.</p>
upper layer to poll the PCIe link before probing the PCI devices
behind the slot in surprise and managed hot-add paths.</p>
</li>
-<li><dl>
-<dt>hw/phb3: fix error handling in complete reset</dt><dd><p>During a complete reset, when we get a timeout waiting for pending
+<li><dl class="first docutils">
+<dt>hw/phb3: fix error handling in complete reset</dt>
+<dd><p class="first">During a complete reset, when we get a timeout waiting for pending
transaction in state PHB3_STATE_CRESET_WAIT_CQ, we mark the PHB as
permanently broken.</p>
-<p>Set the state to PHB3_STATE_FENCED so that the kernel can retry the
+<p class="last">Set the state to PHB3_STATE_FENCED so that the kernel can retry the
complete reset.</p>
</dd>
</dl>
</li>
-<li><p>phb3: Lock the PHB on set_xive callbacks</p></li>
+<li><p class="first">phb3: Lock the PHB on set_xive callbacks</p>
+</li>
</ul>
</div>
<div class="section" id="p8dnu-platform">
<h2>p8dnu platform<a class="headerlink" href="#p8dnu-platform" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>astbmc/p8dnu: Enable PCI slot’s power supply on PEX9733 in hot-add path</p></li>
-<li><p>astbmc/p8dnu: Enable PCI slot’s power supply on PEX8718 in hot-add path</p></li>
-<li><p>core/pci: Mark broken PDC on slots without surprise hotplug capability</p>
+<li><p class="first">astbmc/p8dnu: Enable PCI slot’s power supply on PEX9733 in hot-add path</p>
+</li>
+<li><p class="first">astbmc/p8dnu: Enable PCI slot’s power supply on PEX8718 in hot-add path</p>
+</li>
+<li><p class="first">core/pci: Mark broken PDC on slots without surprise hotplug capability</p>
<p>We has to support surprise hotplug on PCI slots that don’t support
it on hardware. So we’re fully utilizing the PCIe link state change
event to detect the events (hot-remove and hot-add). The PDC (Presence
@@ -322,7 +367,7 @@ PEX8718 on superMicro’s machines.</p>
device-tree, to indicate the PDC isn’t reliable on those (software
claimed) surprise pluggable slots.</p>
</li>
-<li><p>core/pci: Fix PCIe slot’s presence</p>
+<li><p class="first">core/pci: Fix PCIe slot’s presence</p>
<p>According to PCIe spec, the presence bit is hardcoded to 1 if PCIe
switch downstream port doesn’t support slot capability. The register
used for the check in pcie_slot_get_presence_state() is wrong. It
@@ -350,7 +395,7 @@ The issue is found on Supermicro’s p8dtu2u machine:</p>
</pre></div>
</div>
</li>
-<li><p>core/pci: More reliable way to update PCI slot power state</p>
+<li><p class="first">core/pci: More reliable way to update PCI slot power state</p>
<p>The power control bit (SLOT_CTL, offset: PCIe cap + 0x18) isn’t
reliable enough to reflect the PCI slot’s power state. Instead,
the power indication bits are more reliable comparatively. This
@@ -384,26 +429,28 @@ have this issue on the integrated PLX 8718 switch.</p>
<div class="section" id="utilities">
<h2>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>opal-prd: Direct systemd to always restart opal-prd
-Always restart the opal-prd daemon, irrespective of why it stopped.</p></li>
-<li><p>external/ffspart: Simple C program to be able to make an FFS partition</p></li>
-<li><p>getscom: Add chip info for P9.</p></li>
-<li><p>gard: Fix make dist target</p></li>
-<li><p>pflash/libflash: arch_flash_arm: Don’t assume mtd labels are short</p></li>
+<li>opal-prd: Direct systemd to always restart opal-prd
+Always restart the opal-prd daemon, irrespective of why it stopped.</li>
+<li>external/ffspart: Simple C program to be able to make an FFS partition</li>
+<li>getscom: Add chip info for P9.</li>
+<li>gard: Fix make dist target</li>
+<li>pflash/libflash: arch_flash_arm: Don’t assume mtd labels are short</li>
</ul>
</div>
<div class="section" id="libffs">
<h2>libffs<a class="headerlink" href="#libffs" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>libffs: Understand how to create FFS partition TOCs and entries.</p></li>
+<li>libffs: Understand how to create FFS partition TOCs and entries.</li>
</ul>
</div>
<div class="section" id="bmc-based-systems">
<h2>BMC Based systems<a class="headerlink" href="#bmc-based-systems" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>platforms/astbmc: Support PCI slots for palmetto</p></li>
-<li><p>habanero/slottable: Remove Network Mezz(2, 0) from PHB1.</p></li>
-<li><p>BMC/PCI: Check slot tables against detected devices
+<li><p class="first">platforms/astbmc: Support PCI slots for palmetto</p>
+</li>
+<li><p class="first">habanero/slottable: Remove Network Mezz(2, 0) from PHB1.</p>
+</li>
+<li><p class="first">BMC/PCI: Check slot tables against detected devices
On BMC machines, we have slot tables of built in PHBs, slots and devices
that are physically present in the system (such as the BMC itself). We
can use these tables to check what we <em>detected</em> against what <em>should</em>
@@ -414,7 +461,7 @@ patch helps in that we get a skiboot error message, and at some point
in the future when we pump them up to the OS we could get a big friendly
error message telling you you’re having a bad day.</p>
</li>
-<li><p>pci/quirk: Populate device tree for AST2400 VGA</p>
+<li><p class="first">pci/quirk: Populate device tree for AST2400 VGA</p>
<p>Adding these properties enables the kernel to function in the same way
that it would if it could no longer access BMC configuration registers
through a backdoor, which may become the default in future.</p>
@@ -424,78 +471,101 @@ support this. Isolating the BMC and the host from each other is
important if they are owned by different parties; for example, a cloud
provider renting machines “bare metal”.</p>
</li>
-<li><p>astbmc/pnor: Use mbox-flash for flash accesses</p>
+<li><p class="first">astbmc/pnor: Use mbox-flash for flash accesses</p>
<p>If the BMC is MBOX protocol aware, request flash reads/writes over the
MBOX regs. This inits the blocklevel for pnor access with mbox-flash.</p>
</li>
-<li><p>ast: Account for differences between 2400 vs 2500</p></li>
-<li><p>platform: set default bmc_platform
+<li><p class="first">ast: Account for differences between 2400 vs 2500</p>
+</li>
+<li><p class="first">platform: set default bmc_platform
The bmc_platform pointer is set to NULL by default and on non-AMI BMC
platforms. As a result a few places in hw/ipmi/ipmi-sel.c will blindly
-dereference a NULL pointer.</p></li>
+dereference a NULL pointer.</p>
+</li>
</ul>
</div>
<div class="section" id="power9">
<h2>POWER9<a class="headerlink" href="#power9" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>external: Update xscom utils for type 1 indirect accesses</p></li>
-<li><p>xscom: Harden indirect writes</p></li>
-<li><p>xscom: Add POWER9 scom reset</p></li>
-<li><p>homer : Enable HOMER region reservation for POWER9</p></li>
-<li><p>slw: Define stop idle states for P9 DD1</p></li>
-<li><p>slw: Fix parsing of supported STOP states</p></li>
-<li><p>slw: only enable supported STOP states</p></li>
-<li><p>dts: add support for p9 cores</p></li>
-<li><p>asm: Add POWER9 case to init_shared_sprs</p>
+<li><p class="first">external: Update xscom utils for type 1 indirect accesses</p>
+</li>
+<li><p class="first">xscom: Harden indirect writes</p>
+</li>
+<li><p class="first">xscom: Add POWER9 scom reset</p>
+</li>
+<li><p class="first">homer : Enable HOMER region reservation for POWER9</p>
+</li>
+<li><p class="first">slw: Define stop idle states for P9 DD1</p>
+</li>
+<li><p class="first">slw: Fix parsing of supported STOP states</p>
+</li>
+<li><p class="first">slw: only enable supported STOP states</p>
+</li>
+<li><p class="first">dts: add support for p9 cores</p>
+</li>
+<li><p class="first">asm: Add POWER9 case to init_shared_sprs</p>
<p>For now, setup the HID and HMEER. We’ll add more as we get
good default values from HW.</p>
</li>
-<li><p>xive/psi/lpc: Handle proper clearing of LPC SerIRQ latch on POWER9 DD1</p></li>
-<li><p>lpc: Mark the power9 LPC bus as compatible with power8</p></li>
-<li><p>Fix typo in PIR mask for POWER9. Fixes booting multi-chip.</p></li>
-<li><p>vpd: add vpd_valid() to check keyword VPD blobs</p>
+<li><p class="first">xive/psi/lpc: Handle proper clearing of LPC SerIRQ latch on POWER9 DD1</p>
+</li>
+<li><p class="first">lpc: Mark the power9 LPC bus as compatible with power8</p>
+</li>
+<li><p class="first">Fix typo in PIR mask for POWER9. Fixes booting multi-chip.</p>
+</li>
+<li><p class="first">vpd: add vpd_valid() to check keyword VPD blobs</p>
<p>Adds a function to check whether a blob is a valid IBM ASCII keyword
VPD blob. This allows us to recognise when we do and do not have a VPD
blob and act accordingly.</p>
</li>
-<li><p>core/cpu.c: Use a device-tree node to detect nest mmu presence
+<li><p class="first">core/cpu.c: Use a device-tree node to detect nest mmu presence
The nest mmu address scom was hardcoded which could lead to boot
failure on POWER9 systems without a nest mmu. For example Mambo
doesn’t model the nest mmu which results in failure when
-calling opal_nmmu_set_ptcr() during kernel load.</p></li>
-<li><p>psi: Fix P9 BAR setup on multi-chips</p></li>
+calling opal_nmmu_set_ptcr() during kernel load.</p>
+</li>
+<li><p class="first">psi: Fix P9 BAR setup on multi-chips</p>
+</li>
</ul>
<p>PHB4:</p>
<blockquote>
<div><ul>
-<li><p>phb4: Fix TVE encoding for start address</p></li>
-<li><p>phb4: Always assign powerbus BARs</p>
+<li><p class="first">phb4: Fix TVE encoding for start address</p>
+</li>
+<li><p class="first">phb4: Always assign powerbus BARs</p>
<p>HostBoot configure them with weird values that confuse us, instead
let’s just own the assignment. This is temporary, I will centralize
memory map management next but this gets us going.</p>
</li>
-<li><p>phb4: Fix endian issue with link control2/status2 registers
-Fixes training at larger than PCIe Gen1 speeds.</p></li>
-<li><p>phb4: Add ability to log config space access
-Useful for debugging</p></li>
-<li><p>phb4: Change debug prints
+<li><p class="first">phb4: Fix endian issue with link control2/status2 registers
+Fixes training at larger than PCIe Gen1 speeds.</p>
+</li>
+<li><p class="first">phb4: Add ability to log config space access
+Useful for debugging</p>
+</li>
+<li><p class="first">phb4: Change debug prints
Currently we print “PHB4” and mean either “PHB version 4” or “PHB
-number 4” which can be quite confusing.</p></li>
-<li><p>phb4: Fix config space enable bits on DD1</p></li>
-<li><p>phb4: Fix location of EEH enable bits</p></li>
-<li><p>phb4: Fix setting of max link speed</p></li>
-<li><p>phb4: Updated inits as of PHB4 spec 0.52</p></li>
+number 4” which can be quite confusing.</p>
+</li>
+<li><p class="first">phb4: Fix config space enable bits on DD1</p>
+</li>
+<li><p class="first">phb4: Fix location of EEH enable bits</p>
+</li>
+<li><p class="first">phb4: Fix setting of max link speed</p>
+</li>
+<li><p class="first">phb4: Updated inits as of PHB4 spec 0.52</p>
+</li>
</ul>
</div></blockquote>
<p>HDAT fixes:</p>
<blockquote>
<div><ul>
-<li><p>hdat: Parse BMC nodes much earlier</p>
+<li><p class="first">hdat: Parse BMC nodes much earlier</p>
<p>This moves the parsing of the BMC and LPC details to the start of the
HDAT parsing. This allows us to enable the Skiboot log console earlier
so we can get debug output while parsing the rest of the HDAT.</p>
</li>
-<li><p>astbmc: Don’t do P8 PSI or DT fixups on P9</p>
+<li><p class="first">astbmc: Don’t do P8 PSI or DT fixups on P9</p>
<p>Previously the HDAT format was only ever used with IBM hardware so it
would store vital product data (VPD) blobs in the IBM ASCII Keyword VPD
format. With P9 HDAT is used on OpenPower machines which use Industry
@@ -506,7 +576,7 @@ under the “spd” property rather than the “ibm,vpd” property. This patch
adds support for recognising these blobs and placing them in the
appropriate DT property.</p>
</li>
-<li><p>hdat: Add __packed to all HDAT structures and workaround HB reserve</p>
+<li><p class="first">hdat: Add __packed to all HDAT structures and workaround HB reserve</p>
<p>Some HDAT structures aren’t properly aligned. We were using __packed
on some but not others and got at least one wrong (HB reserve). This
adds it everywhere to avoid such problems.</p>
@@ -516,39 +586,63 @@ assertion failure later on in mem_regions.c.</p>
<p>So also add a test to skip any region starting at 0 until we can
undertand that better and have it fixed one way or another.</p>
</li>
-<li><p>hdat: Ignore broken memory reserves</p>
+<li><p class="first">hdat: Ignore broken memory reserves</p>
<p>Ignore HDAT memory reserves &gt; 512MB. These are considered bogus and
workaround known HDAT bugs.</p>
</li>
-<li><p>hdat: Add BMC device-tree node for P9 OpenPOWER systems</p></li>
-<li><p>hdat: Fix interrupt &amp; device_type of UART node</p>
+<li><p class="first">hdat: Add BMC device-tree node for P9 OpenPOWER systems</p>
+</li>
+<li><p class="first">hdat: Fix interrupt &amp; device_type of UART node</p>
<p>The interrupt should use a standard “interrupts” property. The UART
node also need a device_type=”serial” property for historical reasons
otherwise Linux won’t pick it up.</p>
</li>
-<li><p>parse and export STOP levels</p></li>
-<li><p>add new sppcrd_chip_info fields</p></li>
-<li><p>add radix-AP-encodings</p></li>
-<li><p>stop using proc_int_line in favor of pir</p></li>
-<li><p>rename add_icp() to add_xics_icp()</p></li>
-<li><p>Add support for PHB4</p></li>
-<li><p>create XIVE nodes under each xscom node</p></li>
-<li><p>Add P9 compatible property</p></li>
-<li><p>Parse hostboot memory reservations from HDAT</p></li>
-<li><p>Add new fields to IPL params structure and update sys family for p9.</p></li>
-<li><p>Fix ibm,pa-features for all CPU types</p></li>
-<li><p>Fix XSCOM nodes for P9</p></li>
-<li><p>Remove deprecated â€ibm, mem-interleave-scope’ from DT on POWER9</p></li>
-<li><p>Grab system model name from HDAT when available</p></li>
-<li><p>Grab vendor information from HDAT when available</p></li>
-<li><p>SPIRA-H/S changes for P9</p></li>
-<li><p>Add BMC and LPC IOPATH support</p></li>
-<li><p>handle ISDIMM SPD blobs</p></li>
-<li><p>make HDIF_child() print more useful errors</p></li>
-<li><p>Add PSI HB xscom details</p></li>
-<li><p>Add new fields to proc_init_data structure</p></li>
-<li><p>Add processor version check for hs service ntuple</p></li>
-<li><p>add_iplparams_serial - Validate HDIF_get_iarray_size() return value</p></li>
+<li><p class="first">parse and export STOP levels</p>
+</li>
+<li><p class="first">add new sppcrd_chip_info fields</p>
+</li>
+<li><p class="first">add radix-AP-encodings</p>
+</li>
+<li><p class="first">stop using proc_int_line in favor of pir</p>
+</li>
+<li><p class="first">rename add_icp() to add_xics_icp()</p>
+</li>
+<li><p class="first">Add support for PHB4</p>
+</li>
+<li><p class="first">create XIVE nodes under each xscom node</p>
+</li>
+<li><p class="first">Add P9 compatible property</p>
+</li>
+<li><p class="first">Parse hostboot memory reservations from HDAT</p>
+</li>
+<li><p class="first">Add new fields to IPL params structure and update sys family for p9.</p>
+</li>
+<li><p class="first">Fix ibm,pa-features for all CPU types</p>
+</li>
+<li><p class="first">Fix XSCOM nodes for P9</p>
+</li>
+<li><p class="first">Remove deprecated â€ibm, mem-interleave-scope’ from DT on POWER9</p>
+</li>
+<li><p class="first">Grab system model name from HDAT when available</p>
+</li>
+<li><p class="first">Grab vendor information from HDAT when available</p>
+</li>
+<li><p class="first">SPIRA-H/S changes for P9</p>
+</li>
+<li><p class="first">Add BMC and LPC IOPATH support</p>
+</li>
+<li><p class="first">handle ISDIMM SPD blobs</p>
+</li>
+<li><p class="first">make HDIF_child() print more useful errors</p>
+</li>
+<li><p class="first">Add PSI HB xscom details</p>
+</li>
+<li><p class="first">Add new fields to proc_init_data structure</p>
+</li>
+<li><p class="first">Add processor version check for hs service ntuple</p>
+</li>
+<li><p class="first">add_iplparams_serial - Validate HDIF_get_iarray_size() return value</p>
+</li>
</ul>
</div></blockquote>
<p>XIVE:</p>
@@ -557,124 +651,131 @@ the changes that have gone into skiboot 5.5.0-rc1 for the new XIVE hardware
that is present in POWER9:</p>
<blockquote>
<div><ul class="simple">
-<li><p>xive: Enable backlog on queues</p></li>
-<li><p>xive: Use for_each_present_cpu() for setting up XIVE</p></li>
-<li><p>xive: Fix logic in opal_xive_get_xirr()</p></li>
-<li><p>xive: Properly initialize new VP and EQ structures</p></li>
-<li><p>xive: Improve/fix EOI of LSIs</p></li>
-<li><p>xive: Add FIXME comments about mask/umask races</p></li>
-<li><p>xive: Fix memory barrier in opal_xive_get_xirr()</p></li>
-<li><p>xive: Don’t try to find a target EQ for prio 0xff</p></li>
-<li><p>xive: Bump table sizes in direct mode</p></li>
-<li><p>xive: Properly register escalation interrupts</p></li>
-<li><p>xive: Split the OPAL irq flags from the internal ones</p></li>
-<li><p>xive: Don’t touch ESB masks unless masking/unmasking</p></li>
-<li><p>xive: Fix xive_get_ir_targetting()</p></li>
-<li><p>xive: Cleanup escalation PQ on queue change</p></li>
-<li><p>xive: Add <em>any chip</em> for allocating interrupts</p></li>
-<li><p>xive: Add chip_id to get_vp_info</p></li>
-<li><p>xive: Add opal_xive_get/set_vp_info</p></li>
-<li><p>xive: Add VP alloc/free OPAL functions</p></li>
-<li><p>xive: Workaround for bad DD1 checker</p></li>
-<li><p>xive: Add more checks for exploitation mode</p></li>
-<li><p>xive: Add support for EOIs via OPAL</p></li>
-<li><p>xive/phb4: Work around broken LSI control on P9 DD1</p></li>
-<li><p>xive: Forward interrupt names callback</p></li>
-<li><p>xive: Export opal_xive_reset() arguments in OPAL API</p></li>
-<li><p>xive: Add interrupt allocator</p></li>
-<li><p>xive: Implement xive_reset</p></li>
-<li><p>xive: Don’t assert if xive_get_vp() fails</p></li>
-<li><p>xive: Expose exploitation mode DT properties</p></li>
-<li><p>xive: Use a constant for max# of chips</p></li>
-<li><p>xive: Keep track of which interrupts were ever enabled
-In order to speed up xive reset</p></li>
-<li><p>xive: Implement internal VP allocator</p></li>
-<li><p>xive: Add xive_get/set_queue_info</p></li>
-<li><p>xive: Add helpers to encode and decode VP numbers</p></li>
-<li><p>xive: Add API to donate pages in indirect mode</p></li>
-<li><p>xive: Add asynchronous cache updates and update irq targetting</p></li>
-<li><p>xive: Split xive_provision_cpu() and use cache watch for VP</p></li>
-<li><p>xive: Add cache scrub to push watch updates to memory</p></li>
-<li><p>xive: Mark XIVE owned EQs with a specific flag</p></li>
-<li><p>xive: Use an allocator for EQDs</p></li>
-<li><p>xive: Break assumption that block ID == chip ID</p></li>
-<li><p>xive/phb4: Handle bad ESB offsets in PHB4 DD1</p></li>
-<li><p>xive: Implement get/set_irq_config APIs</p></li>
-<li><p>xive: Rework xive_set_eq_info() to store all info even when masking</p></li>
-<li><p>xive: Implement cache watch and use it for EQs</p></li>
-<li><p>xive: Add locking to some API calls</p></li>
-<li><p>xive: Add opal_xive_get_irq_info()</p></li>
-<li><p>xive: Add CPU node “interrupts” properties representing the IPIs</p></li>
-<li><p>xive: Add basic opal_xive_reset() call and exploitation mode</p></li>
-<li><p>xive: Add support for escalation interrupts</p></li>
-<li><p>xive: OPAL API update</p></li>
-<li><p>xive: Add some dump facility for debugging</p></li>
-<li><p>xive: Document exploitation mode
-(Pretty much work in progress)</p></li>
-<li><p>xive: Indirect table entries must have top bits “type” set</p></li>
-<li><p>xive: Remove unused field and clarify comment</p></li>
-<li><p>xive: Provide a way to override some IPI sources</p></li>
-<li><p>xive: Add helper to retrieve an IPI trigger port</p></li>
-<li><p>xive: Fix IPI EOI logic in opal_xive_eoi()</p></li>
-<li><p>xive: Don’t try to EOI a masked source</p></li>
-<li><p>xive: Fix comments in xive_source_set_xive()</p></li>
-<li><p>xive: Fix comments in xive_get_ive()</p></li>
-<li><p>xive: Configure forwarding ports</p></li>
-<li><p>xive: Fix mangling of interrupt server# in opal_get/set_xive()</p></li>
-<li><p>xive: Fix interrupt number mangling</p></li>
+<li>xive: Enable backlog on queues</li>
+<li>xive: Use for_each_present_cpu() for setting up XIVE</li>
+<li>xive: Fix logic in opal_xive_get_xirr()</li>
+<li>xive: Properly initialize new VP and EQ structures</li>
+<li>xive: Improve/fix EOI of LSIs</li>
+<li>xive: Add FIXME comments about mask/umask races</li>
+<li>xive: Fix memory barrier in opal_xive_get_xirr()</li>
+<li>xive: Don’t try to find a target EQ for prio 0xff</li>
+<li>xive: Bump table sizes in direct mode</li>
+<li>xive: Properly register escalation interrupts</li>
+<li>xive: Split the OPAL irq flags from the internal ones</li>
+<li>xive: Don’t touch ESB masks unless masking/unmasking</li>
+<li>xive: Fix xive_get_ir_targetting()</li>
+<li>xive: Cleanup escalation PQ on queue change</li>
+<li>xive: Add <em>any chip</em> for allocating interrupts</li>
+<li>xive: Add chip_id to get_vp_info</li>
+<li>xive: Add opal_xive_get/set_vp_info</li>
+<li>xive: Add VP alloc/free OPAL functions</li>
+<li>xive: Workaround for bad DD1 checker</li>
+<li>xive: Add more checks for exploitation mode</li>
+<li>xive: Add support for EOIs via OPAL</li>
+<li>xive/phb4: Work around broken LSI control on P9 DD1</li>
+<li>xive: Forward interrupt names callback</li>
+<li>xive: Export opal_xive_reset() arguments in OPAL API</li>
+<li>xive: Add interrupt allocator</li>
+<li>xive: Implement xive_reset</li>
+<li>xive: Don’t assert if xive_get_vp() fails</li>
+<li>xive: Expose exploitation mode DT properties</li>
+<li>xive: Use a constant for max# of chips</li>
+<li>xive: Keep track of which interrupts were ever enabled
+In order to speed up xive reset</li>
+<li>xive: Implement internal VP allocator</li>
+<li>xive: Add xive_get/set_queue_info</li>
+<li>xive: Add helpers to encode and decode VP numbers</li>
+<li>xive: Add API to donate pages in indirect mode</li>
+<li>xive: Add asynchronous cache updates and update irq targetting</li>
+<li>xive: Split xive_provision_cpu() and use cache watch for VP</li>
+<li>xive: Add cache scrub to push watch updates to memory</li>
+<li>xive: Mark XIVE owned EQs with a specific flag</li>
+<li>xive: Use an allocator for EQDs</li>
+<li>xive: Break assumption that block ID == chip ID</li>
+<li>xive/phb4: Handle bad ESB offsets in PHB4 DD1</li>
+<li>xive: Implement get/set_irq_config APIs</li>
+<li>xive: Rework xive_set_eq_info() to store all info even when masking</li>
+<li>xive: Implement cache watch and use it for EQs</li>
+<li>xive: Add locking to some API calls</li>
+<li>xive: Add opal_xive_get_irq_info()</li>
+<li>xive: Add CPU node “interrupts” properties representing the IPIs</li>
+<li>xive: Add basic opal_xive_reset() call and exploitation mode</li>
+<li>xive: Add support for escalation interrupts</li>
+<li>xive: OPAL API update</li>
+<li>xive: Add some dump facility for debugging</li>
+<li>xive: Document exploitation mode
+(Pretty much work in progress)</li>
+<li>xive: Indirect table entries must have top bits “type” set</li>
+<li>xive: Remove unused field and clarify comment</li>
+<li>xive: Provide a way to override some IPI sources</li>
+<li>xive: Add helper to retrieve an IPI trigger port</li>
+<li>xive: Fix IPI EOI logic in opal_xive_eoi()</li>
+<li>xive: Don’t try to EOI a masked source</li>
+<li>xive: Fix comments in xive_source_set_xive()</li>
+<li>xive: Fix comments in xive_get_ive()</li>
+<li>xive: Configure forwarding ports</li>
+<li>xive: Fix mangling of interrupt server# in opal_get/set_xive()</li>
+<li>xive: Fix interrupt number mangling</li>
</ul>
</div></blockquote>
</div>
<div class="section" id="fast-reboot">
<h2>Fast-reboot<a class="headerlink" href="#fast-reboot" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>fast-reboot: creset PHBs on fast reboot
+<li>fast-reboot: creset PHBs on fast reboot
On fast reboot, perform a creset of all PHBs. This ensures that any PHBs
-that are fenced will be working after the reboot.</p></li>
-<li><p>fast-reboot: Enable fast reboot with CAPI adapters in CAPI mode
-CAPI mode is disabled as part of OPAL_SYNC_HOST_REBOOT.</p></li>
-<li><p>opal/fast-reboot: set fw_progress sensor status with IPMI_FW_PCI_INIT.</p></li>
+that are fenced will be working after the reboot.</li>
+<li>fast-reboot: Enable fast reboot with CAPI adapters in CAPI mode
+CAPI mode is disabled as part of OPAL_SYNC_HOST_REBOOT.</li>
+<li>opal/fast-reboot: set fw_progress sensor status with IPMI_FW_PCI_INIT.</li>
</ul>
</div>
<div class="section" id="capi">
<h2>CAPI<a class="headerlink" href="#capi" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>hmi: Print CAPP FIR information when handling CAPP malfunction alerts</p></li>
+<li>hmi: Print CAPP FIR information when handling CAPP malfunction alerts</li>
</ul>
</div>
<div class="section" id="fsp-based-systems">
<h2>FSP based systems<a class="headerlink" href="#fsp-based-systems" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>hw/fsp: Do not queue SP and SPCN class messages during reset/reload
+<li>hw/fsp: Do not queue SP and SPCN class messages during reset/reload
This could cause soft lockups if FSP reset reload was done while in OPAL
During FSP R/R, the FSP is inaccessible and will lose state. Messages to the
-FSP are generally queued for sending later.</p></li>
+FSP are generally queued for sending later.</li>
</ul>
</div>
<div class="section" id="tests">
<h2>Tests<a class="headerlink" href="#tests" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><dl class="simple">
-<dt>core/test/run-trace: Reduce number of samples when running under valgrind</dt><dd><p>This reduces â€make check’ run time by ~10 seconds on my laptop,
+<li><dl class="first docutils">
+<dt>core/test/run-trace: Reduce number of samples when running under valgrind</dt>
+<dd><p class="first last">This reduces â€make check’ run time by ~10 seconds on my laptop,
and just the run-trace test itself takes 15 seconds less (under valgrind).</p>
</dd>
</dl>
</li>
-<li><p>test/sreset_world: Kind of like Hello World, but from the SRESET vector.
-A regression test for the mambo implementation of OPAL_SIGNAL_SYSTEM_RESET.</p></li>
-<li><dl>
-<dt>nvram-format: Fix endian issues</dt><dd><p>NVRAM formats are always BE, so let’s use the sparse annotation to catch
+<li><p class="first">test/sreset_world: Kind of like Hello World, but from the SRESET vector.
+A regression test for the mambo implementation of OPAL_SIGNAL_SYSTEM_RESET.</p>
+</li>
+<li><dl class="first docutils">
+<dt>nvram-format: Fix endian issues</dt>
+<dd><p class="first">NVRAM formats are always BE, so let’s use the sparse annotation to catch
any issues (and correct said issues).</p>
-<p>On LE platforms, the test was erroneously passing as with building the
+<p class="last">On LE platforms, the test was erroneously passing as with building the
nvram-format code on LE we were produces an incorrect NVRAM image.</p>
</dd>
</dl>
</li>
-<li><p>test/hello_world: use P9MAMBO to differentiate from P8</p></li>
-<li><p>hdata_to_dt: Specify PVR on command line</p></li>
-<li><p>hdata/test: Add DTS output for the test cases</p></li>
-<li><p>hdata/test: strip blobs from the DT output</p></li>
-<li><p>mambo: add mprintf()</p>
+<li><p class="first">test/hello_world: use P9MAMBO to differentiate from P8</p>
+</li>
+<li><p class="first">hdata_to_dt: Specify PVR on command line</p>
+</li>
+<li><p class="first">hdata/test: Add DTS output for the test cases</p>
+</li>
+<li><p class="first">hdata/test: strip blobs from the DT output</p>
+</li>
+<li><p class="first">mambo: add mprintf()</p>
<blockquote>
<div><p>mprintf() is printf(), but it goes straight to the mambo console. This
allows it to be independent of Skiboot’s actual console infrastructure
@@ -682,18 +783,25 @@ so it can be used for debugging the console drivers and for debugging
code that runs before the console is setup.</p>
</div></blockquote>
</li>
-<li><p>generate-fwts-olog: add support for parsing prerror()</p></li>
-<li><dl class="simple">
-<dt>Add bitmap test</dt><dd><p>The worst test suite ever</p>
+<li><p class="first">generate-fwts-olog: add support for parsing prerror()</p>
+</li>
+<li><dl class="first docutils">
+<dt>Add bitmap test</dt>
+<dd><p class="first last">The worst test suite ever</p>
</dd>
</dl>
</li>
-<li><p>mambo_utils: add ascii output to hexdump</p></li>
-<li><p>mambo_utils: add p_str &lt;addr&gt; [limit]</p></li>
-<li><p>mambo_utils: make p return a value</p></li>
-<li><p>hello_world: print out full path of missing MAMBO_BINARY</p></li>
-<li><p>print-stb-container: Fix build on centos7</p></li>
-<li><p>Travis-ci improvements:
+<li><p class="first">mambo_utils: add ascii output to hexdump</p>
+</li>
+<li><p class="first">mambo_utils: add p_str &lt;addr&gt; [limit]</p>
+</li>
+<li><p class="first">mambo_utils: make p return a value</p>
+</li>
+<li><p class="first">hello_world: print out full path of missing MAMBO_BINARY</p>
+</li>
+<li><p class="first">print-stb-container: Fix build on centos7</p>
+</li>
+<li><p class="first">Travis-ci improvements:
- install expect on ubuntu 12.04, disable qemu on 16.04/latest
- build and test more on centos7
- hello_world: run p9 mambo tests
@@ -702,22 +810,28 @@ code that runs before the console is setup.</p>
- install systemsim-p9
- enable fedora25
- always pull new docker image
-- add fedora rawhide</p></li>
-<li><p>Add fwts annotation for duplicate DT node entries.</p>
+- add fedora rawhide</p>
+</li>
+<li><p class="first">Add fwts annotation for duplicate DT node entries.</p>
<blockquote>
<div><p>Reference bug: <a class="reference external" href="https://github.com/open-power/op-build/issues/751">https://github.com/open-power/op-build/issues/751</a></p>
</div></blockquote>
</li>
-<li><p>external/fwts: Add â€last-tag’ to FWTS olog output
+<li><p class="first">external/fwts: Add â€last-tag’ to FWTS olog output
This isn’t so useful at the moment, but this will make cleaning out
-crufty old error definitions much easier.</p></li>
-<li><p>external/fwts: Add FWTS olog merge script
+crufty old error definitions much easier.</p>
+</li>
+<li><p class="first">external/fwts: Add FWTS olog merge script
A script to merge olog error definitions from multiple skiboot versions
into a single olog JSON file. Will prompt when conflicting patterns are
-found to update the pattern, or add both.</p></li>
-<li><p>mambo: fake NVRAM support</p></li>
-<li><p>mambo: Add Fake NVRAM driver</p></li>
-<li><p>external/mambo: add shortcut to print all GPRs</p></li>
+found to update the pattern, or add both.</p>
+</li>
+<li><p class="first">mambo: fake NVRAM support</p>
+</li>
+<li><p class="first">mambo: Add Fake NVRAM driver</p>
+</li>
+<li><p class="first">external/mambo: add shortcut to print all GPRs</p>
+</li>
</ul>
</div>
<div class="section" id="contributors">
@@ -726,298 +840,298 @@ found to update the pattern, or add both.</p></li>
A total of 18105 lines added, 16499 removed (delta 1606)</p>
<div class="section" id="developers-with-the-most-changesets">
<h3>Developers with the most changesets<a class="headerlink" href="#developers-with-the-most-changesets" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>138</p></td>
-<td><p>(38.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>138</td>
+<td>(38.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>56</p></td>
-<td><p>(15.4%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>56</td>
+<td>(15.4%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>47</p></td>
-<td><p>(12.9%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>47</td>
+<td>(12.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>18</p></td>
-<td><p>(5.0%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>18</td>
+<td>(5.0%)</td>
</tr>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>15</p></td>
-<td><p>(4.1%)</p></td>
+<tr class="row-even"><td>Gavin Shan</td>
+<td>15</td>
+<td>(4.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Claudio Carvalho</p></td>
-<td><p>14</p></td>
-<td><p>(3.9%)</p></td>
+<tr class="row-odd"><td>Claudio Carvalho</td>
+<td>14</td>
+<td>(3.9%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>11</p></td>
-<td><p>(3.0%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>11</td>
+<td>(3.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>11</p></td>
-<td><p>(3.0%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>11</td>
+<td>(3.0%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>11</p></td>
-<td><p>(3.0%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>11</td>
+<td>(3.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>5</p></td>
-<td><p>(1.4%)</p></td>
+<tr class="row-odd"><td>Ananth N Mavinakayanahalli</td>
+<td>5</td>
+<td>(1.4%)</td>
</tr>
-<tr class="row-even"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>5</p></td>
-<td><p>(1.4%)</p></td>
+<tr class="row-even"><td>CĂ©dric Le Goater</td>
+<td>5</td>
+<td>(1.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>5</p></td>
-<td><p>(1.4%)</p></td>
+<tr class="row-odd"><td>Pridhiviraj Paidipeddi</td>
+<td>5</td>
+<td>(1.4%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>4</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>4</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Nicholas Piggin</p></td>
-<td><p>4</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-odd"><td>Nicholas Piggin</td>
+<td>4</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>3</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>3</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>2</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>2</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Jack Miller</p></td>
-<td><p>2</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-even"><td>Jack Miller</td>
+<td>2</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Chris Smart</p></td>
-<td><p>2</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-odd"><td>Chris Smart</td>
+<td>2</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Matt Brown</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Matt Brown</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Ellerman</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Michael Ellerman</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Barrat</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Frederic Barrat</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Hank Chang</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Hank Chang</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Willie Liauw</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Willie Liauw</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Werner Fischer</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Werner Fischer</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Patrick Williams</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Patrick Williams</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Joel Stanley</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Joel Stanley</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Alexey Kardashevskiy</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Alexey Kardashevskiy</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-changed-lines">
<h3>Developers with the most changed lines<a class="headerlink" href="#developers-with-the-most-changed-lines" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 13%" />
-<col style="width: 18%" />
+<col width="69%" />
+<col width="13%" />
+<col width="18%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>17961</p></td>
-<td><p>(56.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>17961</td>
+<td>(56.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>5509</p></td>
-<td><p>(17.4%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>5509</td>
+<td>(17.4%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>2801</p></td>
-<td><p>(8.8%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>2801</td>
+<td>(8.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>1649</p></td>
-<td><p>(5.2%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>1649</td>
+<td>(5.2%)</td>
</tr>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>653</p></td>
-<td><p>(2.1%)</p></td>
+<tr class="row-even"><td>Gavin Shan</td>
+<td>653</td>
+<td>(2.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Claudio Carvalho</p></td>
-<td><p>489</p></td>
-<td><p>(1.5%)</p></td>
+<tr class="row-odd"><td>Claudio Carvalho</td>
+<td>489</td>
+<td>(1.5%)</td>
</tr>
-<tr class="row-even"><td><p>Willie Liauw</p></td>
-<td><p>361</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-even"><td>Willie Liauw</td>
+<td>361</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>340</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-odd"><td>Ananth N Mavinakayanahalli</td>
+<td>340</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>315</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>315</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>240</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>240</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>228</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>228</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Nicholas Piggin</p></td>
-<td><p>219</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-odd"><td>Nicholas Piggin</td>
+<td>219</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>207</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>207</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>158</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>158</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Jack Miller</p></td>
-<td><p>127</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Jack Miller</td>
+<td>127</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>126</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>126</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Chris Smart</p></td>
-<td><p>95</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Chris Smart</td>
+<td>95</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Hank Chang</p></td>
-<td><p>56</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>Hank Chang</td>
+<td>56</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>47</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>47</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>39</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>39</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Matt Brown</p></td>
-<td><p>29</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-even"><td>Matt Brown</td>
+<td>29</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Ellerman</p></td>
-<td><p>3</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Michael Ellerman</td>
+<td>3</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Alexey Kardashevskiy</p></td>
-<td><p>2</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Alexey Kardashevskiy</td>
+<td>2</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Frederic Barrat</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Frederic Barrat</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Werner Fischer</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Werner Fischer</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Jeremy Kerr</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Jeremy Kerr</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Patrick Williams</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Patrick Williams</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-lines-removed">
<h3>Developers with the most lines removed<a class="headerlink" href="#developers-with-the-most-lines-removed" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 13%" />
-<col style="width: 18%" />
+<col width="69%" />
+<col width="13%" />
+<col width="18%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>8810</p></td>
-<td><p>(53.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>8810</td>
+<td>(53.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>98</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-odd"><td>Ananth N Mavinakayanahalli</td>
+<td>98</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>9</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>9</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Ellerman</p></td>
-<td><p>3</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Michael Ellerman</td>
+<td>3</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Werner Fischer</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Werner Fischer</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
</tbody>
</table>
@@ -1025,50 +1139,50 @@ A total of 18105 lines added, 16499 removed (delta 1606)</p>
<div class="section" id="developers-with-the-most-signoffs">
<h3>Developers with the most signoffs<a class="headerlink" href="#developers-with-the-most-signoffs" title="Permalink to this headline">¶</a></h3>
<p>Total 322</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 67%" />
-<col style="width: 14%" />
-<col style="width: 19%" />
+<col width="67%" />
+<col width="14%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>307</p></td>
-<td><p>(95.3%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>307</td>
+<td>(95.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>6</p></td>
-<td><p>(1.9%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>6</td>
+<td>(1.9%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>3</p></td>
-<td><p>(0.9%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>3</td>
+<td>(0.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>2</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>2</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Vaidyanathan Srinivasan</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Hank Chang</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Hank Chang</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Jack Miller</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Jack Miller</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
</tbody>
</table>
@@ -1076,62 +1190,62 @@ A total of 18105 lines added, 16499 removed (delta 1606)</p>
<div class="section" id="developers-with-the-most-reviews">
<h3>Developers with the most reviews<a class="headerlink" href="#developers-with-the-most-reviews" title="Permalink to this headline">¶</a></h3>
<p>Total: 45</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 67%" />
-<col style="width: 14%" />
-<col style="width: 19%" />
+<col width="67%" />
+<col width="14%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>10</p></td>
-<td><p>(22.2%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>10</td>
+<td>(22.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>9</p></td>
-<td><p>(20.0%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>9</td>
+<td>(20.0%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>6</p></td>
-<td><p>(13.3%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>6</td>
+<td>(13.3%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>5</p></td>
-<td><p>(11.1%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>5</td>
+<td>(11.1%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>4</p></td>
-<td><p>(8.9%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>4</td>
+<td>(8.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>3</p></td>
-<td><p>(6.7%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>3</td>
+<td>(6.7%)</td>
</tr>
-<tr class="row-even"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>2</p></td>
-<td><p>(4.4%)</p></td>
+<tr class="row-even"><td>Vaidyanathan Srinivasan</td>
+<td>2</td>
+<td>(4.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>2</p></td>
-<td><p>(4.4%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>2</td>
+<td>(4.4%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Barrat</p></td>
-<td><p>2</p></td>
-<td><p>(4.4%)</p></td>
+<tr class="row-even"><td>Frederic Barrat</td>
+<td>2</td>
+<td>(4.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>1</p></td>
-<td><p>(2.2%)</p></td>
+<tr class="row-odd"><td>Mahesh Salgaonkar</td>
+<td>1</td>
+<td>(2.2%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>1</p></td>
-<td><p>(2.2%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>1</td>
+<td>(2.2%)</td>
</tr>
</tbody>
</table>
@@ -1139,42 +1253,42 @@ A total of 18105 lines added, 16499 removed (delta 1606)</p>
<div class="section" id="developers-with-the-most-test-credits">
<h3>Developers with the most test credits<a class="headerlink" href="#developers-with-the-most-test-credits" title="Permalink to this headline">¶</a></h3>
<p>Total 11</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 67%" />
-<col style="width: 14%" />
-<col style="width: 19%" />
+<col width="67%" />
+<col width="14%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Willie Liauw</p></td>
-<td><p>4</p></td>
-<td><p>(36.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Willie Liauw</td>
+<td>4</td>
+<td>(36.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Claudio Carvalho</p></td>
-<td><p>3</p></td>
-<td><p>(27.3%)</p></td>
+<tr class="row-odd"><td>Claudio Carvalho</td>
+<td>3</td>
+<td>(27.3%)</td>
</tr>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-even"><td>Gavin Shan</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Chris Smart</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-odd"><td>Chris Smart</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
</tbody>
</table>
@@ -1182,38 +1296,38 @@ A total of 18105 lines added, 16499 removed (delta 1606)</p>
<div class="section" id="developers-who-gave-the-most-tested-by-credits">
<h3>Developers who gave the most tested-by credits<a class="headerlink" href="#developers-who-gave-the-most-tested-by-credits" title="Permalink to this headline">¶</a></h3>
<p>Total 11</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 13%" />
-<col style="width: 18%" />
+<col width="68%" />
+<col width="13%" />
+<col width="18%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>4</p></td>
-<td><p>(36.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Gavin Shan</td>
+<td>4</td>
+<td>(36.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>4</p></td>
-<td><p>(36.4%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>4</td>
+<td>(36.4%)</td>
</tr>
-<tr class="row-even"><td><p>Chris Smart</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-even"><td>Chris Smart</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
-<tr class="row-even"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>1</p></td>
-<td><p>(9.1%)</p></td>
+<tr class="row-even"><td>Ananth N Mavinakayanahalli</td>
+<td>1</td>
+<td>(9.1%)</td>
</tr>
</tbody>
</table>
@@ -1221,34 +1335,34 @@ A total of 18105 lines added, 16499 removed (delta 1606)</p>
<div class="section" id="developers-with-the-most-report-credits">
<h3>Developers with the most report credits<a class="headerlink" href="#developers-with-the-most-report-credits" title="Permalink to this headline">¶</a></h3>
<p>Total 7</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Hank Chang</p></td>
-<td><p>4</p></td>
-<td><p>(57.1%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Hank Chang</td>
+<td>4</td>
+<td>(57.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Guilherme G. Piccoli</p></td>
-<td><p>1</p></td>
-<td><p>(14.3%)</p></td>
+<tr class="row-odd"><td>Guilherme G. Piccoli</td>
+<td>1</td>
+<td>(14.3%)</td>
</tr>
-<tr class="row-even"><td><p>Colin Ian King</p></td>
-<td><p>1</p></td>
-<td><p>(14.3%)</p></td>
+<tr class="row-even"><td>Colin Ian King</td>
+<td>1</td>
+<td>(14.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Pradipta Ghosh</p></td>
-<td><p>1</p></td>
-<td><p>(14.3%)</p></td>
+<tr class="row-odd"><td>Pradipta Ghosh</td>
+<td>1</td>
+<td>(14.3%)</td>
</tr>
</tbody>
</table>
@@ -1256,30 +1370,30 @@ A total of 18105 lines added, 16499 removed (delta 1606)</p>
<div class="section" id="developers-who-gave-the-most-report-credits">
<h3>Developers who gave the most report credits<a class="headerlink" href="#developers-who-gave-the-most-report-credits" title="Permalink to this headline">¶</a></h3>
<p>Total 7</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>5</p></td>
-<td><p>(71.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Gavin Shan</td>
+<td>5</td>
+<td>(71.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>1</p></td>
-<td><p>(14.3%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>1</td>
+<td>(14.3%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>1</p></td>
-<td><p>(14.3%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>1</td>
+<td>(14.3%)</td>
</tr>
</tbody>
</table>
@@ -1288,7 +1402,6 @@ A total of 18105 lines added, 16499 removed (delta 1606)</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -1341,15 +1454,17 @@ A total of 18105 lines added, 16499 removed (delta 1606)</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -1366,15 +1481,14 @@ A total of 18105 lines added, 16499 removed (delta 1606)</p>
<li class="right" >
<a href="skiboot-5.5.0.html" title="skiboot-5.5.0"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.5.0-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.5.0-rc2.html b/doc/release-notes/skiboot-5.5.0-rc2.html
index 5aee6ff..1d31c77 100644
--- a/doc/release-notes/skiboot-5.5.0-rc2.html
+++ b/doc/release-notes/skiboot-5.5.0-rc2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.5.0-rc2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.5.0-rc2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.5.0-rc1.html" title="skiboot-5.5.0-rc1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.5.0-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -64,7 +65,7 @@ and issues: <a class="reference external" href="https://github.com/open-power/sk
<div class="section" id="nvlink2">
<h2>NVLINK2<a class="headerlink" href="#nvlink2" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Introduce NPU2 support</p>
+<li><p class="first">Introduce NPU2 support</p>
<p>NVLink2 is a new feature introduced on POWER9 systems. It is an
evolution of of the NVLink1 feature included in POWER8+ systems but
adds several new features including support for GPU address
@@ -76,7 +77,7 @@ can be shared between implementations in the firmware.</p>
<p>This patch adds basic hardware initialisation and exposure of the
virtual NVLink2 PCIe devices to the running OS.</p>
</li>
-<li><p>npu2: Add OPAL calls for nvlink2 address translation services (see <a class="reference internal" href="../opal-api/opal-npu2-146-147-148.html#opal-npu2"><span class="std std-ref">OPAL NPU2 calls</span></a>)</p>
+<li><p class="first">npu2: Add OPAL calls for nvlink2 address translation services (see <a class="reference internal" href="../opal-api/opal-npu2-146-147-148.html#opal-npu2"><span class="std std-ref">OPAL NPU2 calls</span></a>)</p>
<p>Adds three OPAL calls for interacting with NPU2 devices:
<a class="reference internal" href="../opal-api/opal-npu2-146-147-148.html#opal-npu-init-context"><span class="std std-ref">OPAL_NPU_INIT_CONTEXT</span></a>, <a class="reference internal" href="../opal-api/opal-npu2-146-147-148.html#opal-npu-destroy-context"><span class="std std-ref">OPAL_NPU_DESTROY_CONTEXT</span></a> and
<a class="reference internal" href="../opal-api/opal-npu2-146-147-148.html#opal-npu-map-lpar"><span class="std std-ref">OPAL_NPU_MAP_LPAR</span></a>.</p>
@@ -88,34 +89,35 @@ virtual NVLink2 PCIe devices to the running OS.</p>
<div class="section" id="power9">
<h2>POWER9<a class="headerlink" href="#power9" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hdata/memory: ignore homer and occ reserved ranges</p>
+<li><p class="first">hdata/memory: ignore homer and occ reserved ranges</p>
<p>We populate these from the HOMER BARs in the PBA directly. There’s no
need to take the hostboot supplied values so just ignore the
corresponding reserved ranges.</p>
</li>
-<li><p>hdata/vpd: Parse the OpenPOWER OPFR record</p>
+<li><p class="first">hdata/vpd: Parse the OpenPOWER OPFR record</p>
<p>Parse the OpenPOWER FRU VPD (OPFR) record on OpenPOWER instead
of the VINI records.</p>
</li>
-<li><p>hdata/vpd: Parse additional VINI records</p>
+<li><p class="first">hdata/vpd: Parse additional VINI records</p>
<p>These records provide hardware version details, CCIN extension information,
card type details and hardware characteristics of the FRU</p>
</li>
-<li><p>hdata/cpu: account for p9 shared caches</p>
+<li><p class="first">hdata/cpu: account for p9 shared caches</p>
<p>On P9 the L2 and L3 caches are shared between pairs of SMT=4 cores.
Currently this is not accounted for when creating caches nodes in
the device tree. This patch adds additional checking so that a
cache node is only created for the first core in the pair and
the second core will reference the cache correctly.</p>
</li>
-<li><p>hdata: print backtraces on HDAT errors</p></li>
-<li><p>hdat: ignore zero length reserves</p>
+<li><p class="first">hdata: print backtraces on HDAT errors</p>
+</li>
+<li><p class="first">hdat: ignore zero length reserves</p>
<p>Hostboot can export reserved regions with a length of zero and these
should be ignored rather than being turned into reserved range. While
we’re here fix a memory leak by moving the “too large” region check
to before we allocate space for the label.</p>
</li>
-<li><p>SLW: Add init for power9 power management</p>
+<li><p class="first">SLW: Add init for power9 power management</p>
<p>This patch adds new function to init core for power9 power management.
SPECIAL_WKUP_* SCOM registers, if set, can hold the cores from going into
idle states. Hence, clear PPM_SPECIAL_WKUP_HYP_REG scom register for each
@@ -126,7 +128,7 @@ core during init. (This init are not required for MAMBO)</p>
<div class="section" id="pci">
<h2>PCI<a class="headerlink" href="#pci" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hw/phb3: Adjust ECRC on root port dynamically</p>
+<li><p class="first">hw/phb3: Adjust ECRC on root port dynamically</p>
<p>The Samsung NVMe adapter is lost when it’s connected to PMC 8546 PCIe
switch, until ECRC is disabled on the root port. We found similar issue
prevously when Broadcom adapter is connected to same part of PCIe switch
@@ -143,24 +145,26 @@ last PMC 8546 switch port is destroyed (in PCI hot remove scenario).
Except PHB’s reinitialization after complete reset, the ECRC on
root port is untouched.</p>
</li>
-<li><p>core/pci: Fix lost NVMe adapter behind PMC 8546 switch</p>
+<li><p class="first">core/pci: Fix lost NVMe adapter behind PMC 8546 switch</p>
<p>The NVMe adapter in below PCI topology is lost. The root cause is
the presence bit on its PCI slot is missed, but the PCIe link has
been up. The PCI core doesn’t probe the adapter behind the slot,
leading to lost NVMe adapter in the particular case.</p>
<ul class="simple">
-<li><p>PHB3 root port</p></li>
-<li><p>PLX switch 8748 (10b5:8748)</p></li>
-<li><p>PLX swich 9733 (10b5:9733)</p></li>
-<li><p>PMC 8546 swtich (11f8:8546)</p></li>
-<li><p>NVMe adapter (1c58:0023)</p></li>
+<li>PHB3 root port</li>
+<li>PLX switch 8748 (10b5:8748)</li>
+<li>PLX swich 9733 (10b5:9733)</li>
+<li>PMC 8546 swtich (11f8:8546)</li>
+<li>NVMe adapter (1c58:0023)</li>
</ul>
<p>This fixes the issue by overriding the PCI slot presence bit with
PCIe link state bit.</p>
</li>
-<li><p>hw/phb4: Locate AER capability position if necessary</p></li>
-<li><p>core/pci: Disable surprise hotplug on root port</p></li>
-<li><p>core/pci: Ignore PCI slot capability on root port</p>
+<li><p class="first">hw/phb4: Locate AER capability position if necessary</p>
+</li>
+<li><p class="first">core/pci: Disable surprise hotplug on root port</p>
+</li>
+<li><p class="first">core/pci: Ignore PCI slot capability on root port</p>
<p>We are creating PCI slot on root port, where the PCI slot isn’t
supported from hardware. For this case, we shouldn’t read the PCI
slot capability from hardware. When bogus data returned from the
@@ -171,11 +175,11 @@ without hardware support.</p>
isn’t set in hardware (pcie_cap + 0x2). Otherwise, the PCI slot’s
capability list is retrieved from hardware (pcie_cap + 0x14).</p>
</li>
-<li><p>phb4: Default to PCIe GEN2 on DD1</p>
+<li><p class="first">phb4: Default to PCIe GEN2 on DD1</p>
<p>Default to PCIe GEN2 link speeds on DD1 for stability.</p>
<p>Can be overridden using nvram pcie-max-link-speed=4 parameter.</p>
</li>
-<li><p>phb3/4: Set max link speed via nvram</p>
+<li><p class="first">phb3/4: Set max link speed via nvram</p>
<p>This adds an nvram parameter pcie-max-link-speed to configure the max
speed of the pcie link. This can be set from the petitboot prompt
using:</p>
@@ -190,7 +194,7 @@ global to all PHBs.</p>
<div class="section" id="tests">
<h2>Tests<a class="headerlink" href="#tests" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Mambo/Qemu boot tests: expect (and fail) on checkstop</p>
+<li><p class="first">Mambo/Qemu boot tests: expect (and fail) on checkstop</p>
<p>This allows us to fail a lot faster if we checkstop</p>
</li>
</ul>
@@ -198,7 +202,6 @@ global to all PHBs.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -229,15 +232,17 @@ global to all PHBs.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -254,15 +259,14 @@ global to all PHBs.</p>
<li class="right" >
<a href="skiboot-5.5.0-rc1.html" title="skiboot-5.5.0-rc1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.5.0-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.5.0-rc3.html b/doc/release-notes/skiboot-5.5.0-rc3.html
index 5a11dfe..b6acd48 100644
--- a/doc/release-notes/skiboot-5.5.0-rc3.html
+++ b/doc/release-notes/skiboot-5.5.0-rc3.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.5.0-rc3 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.5.0-rc3 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.5.0-rc2.html" title="skiboot-5.5.0-rc2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.5.0-rc3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -62,35 +63,38 @@ period. Expected release dates and contents are tracked using GitHub milestone
and issues: <a class="reference external" href="https://github.com/open-power/skiboot/milestones">https://github.com/open-power/skiboot/milestones</a></p>
<p>Over <a class="reference internal" href="skiboot-5.5.0-rc2.html#skiboot-5-5-0-rc2"><span class="std std-ref">skiboot-5.5.0-rc2</span></a>, we have the following changes:</p>
<ul>
-<li><p>xive: Fix setting of remote NVT VSD</p>
+<li><p class="first">xive: Fix setting of remote NVT VSD</p>
<p>This fixes a checkstop when using my XIVE exploitation mode on some multi-chip machines.</p>
</li>
-<li><p>core/init: Use â€_’ as separator in names of “exports” properties</p>
+<li><p class="first">core/init: Use â€_’ as separator in names of “exports” properties</p>
<p>The names of the properties under /ibm,opal/firmware/exports are used
directly by Linux to create files in sysfs. To remain consistent with
the existing naming of OPAL sysfs files, use â€_’ as the separator.</p>
-<dl>
-<dt>In particular for the symbol map which is already exported separately,</dt><dd><p>it’s cleaner for the two files to have the same name, eg:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">sys</span><span class="o">/</span><span class="n">firmware</span><span class="o">/</span><span class="n">opal</span><span class="o">/</span><span class="n">exports</span><span class="o">/</span><span class="n">symbol_map</span>
+<dl class="docutils">
+<dt>In particular for the symbol map which is already exported separately,</dt>
+<dd><p class="first">it’s cleaner for the two files to have the same name, eg:</p>
+<div class="last highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">sys</span><span class="o">/</span><span class="n">firmware</span><span class="o">/</span><span class="n">opal</span><span class="o">/</span><span class="n">exports</span><span class="o">/</span><span class="n">symbol_map</span>
<span class="o">/</span><span class="n">sys</span><span class="o">/</span><span class="n">firmware</span><span class="o">/</span><span class="n">opal</span><span class="o">/</span><span class="n">symbol_map</span>
</pre></div>
</div>
</dd>
</dl>
</li>
-<li><p>hdata: fix reservation size</p>
+<li><p class="first">hdata: fix reservation size</p>
<p>The hostboot reserved ranges are [start, end] pairs rather than
[start, end) so we need to stick a +1 in there to calculate the
size properly.</p>
</li>
-<li><p>hdat: Add model-name property for OpenPower system</p></li>
-<li><p>hdat: Read description from ibm, vpd binary blob</p></li>
-<li><p>hdat: Populate model property with â€Unknown’ in error path</p></li>
+<li><p class="first">hdat: Add model-name property for OpenPower system</p>
+</li>
+<li><p class="first">hdat: Read description from ibm, vpd binary blob</p>
+</li>
+<li><p class="first">hdat: Populate model property with â€Unknown’ in error path</p>
+</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -110,15 +114,17 @@ size properly.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -135,15 +141,14 @@ size properly.</p>
<li class="right" >
<a href="skiboot-5.5.0-rc2.html" title="skiboot-5.5.0-rc2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.5.0-rc3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.5.0.html b/doc/release-notes/skiboot-5.5.0.html
index ad19d2d..b930684 100644
--- a/doc/release-notes/skiboot-5.5.0.html
+++ b/doc/release-notes/skiboot-5.5.0.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.5.0 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.5.0 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.4.9.html" title="skiboot-5.4.9"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.5.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -63,19 +64,19 @@ and issues: <a class="reference external" href="https://github.com/open-power/sk
<h2>Changes in skiboot-5.5.0<a class="headerlink" href="#changes-in-skiboot-5-5-0" title="Permalink to this headline">¶</a></h2>
<p>See changes in the release candidates:</p>
<ul class="simple">
-<li><p><a class="reference internal" href="skiboot-5.5.0-rc1.html#skiboot-5-5-0-rc1"><span class="std std-ref">skiboot-5.5.0-rc1</span></a></p></li>
-<li><p><a class="reference internal" href="skiboot-5.5.0-rc2.html#skiboot-5-5-0-rc2"><span class="std std-ref">skiboot-5.5.0-rc2</span></a></p></li>
-<li><p><a class="reference internal" href="skiboot-5.5.0-rc3.html#skiboot-5-5-0-rc3"><span class="std std-ref">skiboot-5.5.0-rc3</span></a></p></li>
+<li><a class="reference internal" href="skiboot-5.5.0-rc1.html#skiboot-5-5-0-rc1"><span class="std std-ref">skiboot-5.5.0-rc1</span></a></li>
+<li><a class="reference internal" href="skiboot-5.5.0-rc2.html#skiboot-5-5-0-rc2"><span class="std std-ref">skiboot-5.5.0-rc2</span></a></li>
+<li><a class="reference internal" href="skiboot-5.5.0-rc3.html#skiboot-5-5-0-rc3"><span class="std std-ref">skiboot-5.5.0-rc3</span></a></li>
</ul>
</div>
<div class="section" id="changes-since-skiboot-5-5-0-rc3">
<h2>Changes since skiboot-5.5.0-rc3<a class="headerlink" href="#changes-since-skiboot-5-5-0-rc3" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hdat: parse processor attached i2c devices</p>
+<li><p class="first">hdat: parse processor attached i2c devices</p>
<p>Adds basic parsing for i2c devices that are attached to the processor
I2C interfaces. This is mainly VPD SEEPROMs.</p>
</li>
-<li><p>libflash/blocklevel: Add blocklevel_smart_erase()</p>
+<li><p class="first">libflash/blocklevel: Add blocklevel_smart_erase()</p>
<p>With recent changes to flash drivers in linux not all erase blocks are
4K anymore. While most level of the pflash/gard tool stacks were written
to not mind, it turns out there are bugs which means not 4K erase block
@@ -87,22 +88,26 @@ which they are usually not with 64K erase blocks.</p>
least) pflash and the gard tool don’t need to worry about the problem
anymore.</p>
</li>
-<li><p>external/pflash: Use blocklevel_smart_erase()</p></li>
-<li><p>external/gard: Use blocklevel_smart_erase()</p></li>
-<li><p>libstb/create-container: Add full container build and sign with imprint keys</p>
+<li><p class="first">external/pflash: Use blocklevel_smart_erase()</p>
+</li>
+<li><p class="first">external/gard: Use blocklevel_smart_erase()</p>
+</li>
+<li><p class="first">libstb/create-container: Add full container build and sign with imprint keys</p>
<p>This adds support for writing all the public key and signature fields to the
container header, and for dumping the prefix and software headers so they may
may be signed, and for signing those headers with the imprint keys.</p>
</li>
-<li><p>asm: do not set SDR1 on POWER9. This register does not exist in ISAv3.</p></li>
+<li><p class="first">asm: do not set SDR1 on POWER9. This register does not exist in ISAv3.</p>
+</li>
</ul>
<p>Testing:</p>
<ul>
-<li><p>mambo: Allow setting the Linux command line from the environment</p>
+<li><p class="first">mambo: Allow setting the Linux command line from the environment</p>
<p>For automated testing it’s helpful to be able to set the Linux command
line via an environment variable.</p>
</li>
-<li><p>mambo: Add util function for breaking on console output</p></li>
+<li><p class="first">mambo: Add util function for breaking on console output</p>
+</li>
</ul>
</div>
<div class="section" id="contributors">
@@ -112,66 +117,66 @@ line via an environment variable.</p>
<p>A total of 24073 lines added, 16759 removed (delta 7314)</p>
<p>Extending the analysis done for the last few releases, we can see our trends
in code review across versions:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 19%" />
-<col style="width: 14%" />
-<col style="width: 17%" />
-<col style="width: 17%" />
-<col style="width: 14%" />
-<col style="width: 19%" />
+<col width="19%" />
+<col width="14%" />
+<col width="17%" />
+<col width="17%" />
+<col width="14%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Release</p></th>
-<th class="head"><p>csets</p></th>
-<th class="head"><p>Ack</p></th>
-<th class="head"><p>Reviews</p></th>
-<th class="head"><p>Tested</p></th>
-<th class="head"><p>Reported</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Release</th>
+<th class="head">csets</th>
+<th class="head">Ack</th>
+<th class="head">Reviews</th>
+<th class="head">Tested</th>
+<th class="head">Reported</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>5.0</p></td>
-<td><p>329</p></td>
-<td><p>15</p></td>
-<td><p>20</p></td>
-<td><p>1</p></td>
-<td><p>0</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.1</p></td>
-<td><p>372</p></td>
-<td><p>13</p></td>
-<td><p>38</p></td>
-<td><p>1</p></td>
-<td><p>4</p></td>
-</tr>
-<tr class="row-even"><td><p>5.2-rc1</p></td>
-<td><p>334</p></td>
-<td><p>20</p></td>
-<td><p>34</p></td>
-<td><p>6</p></td>
-<td><p>11</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.3-rc1</p></td>
-<td><p>302</p></td>
-<td><p>36</p></td>
-<td><p>53</p></td>
-<td><p>4</p></td>
-<td><p>5</p></td>
-</tr>
-<tr class="row-even"><td><p>5.4.0</p></td>
-<td><p>361</p></td>
-<td><p>16</p></td>
-<td><p>28</p></td>
-<td><p>1</p></td>
-<td><p>9</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.5.0</p></td>
-<td><p>408</p></td>
-<td><p>11</p></td>
-<td><p>48</p></td>
-<td><p>14</p></td>
-<td><p>10</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>5.0</td>
+<td>329</td>
+<td>15</td>
+<td>20</td>
+<td>1</td>
+<td>0</td>
+</tr>
+<tr class="row-odd"><td>5.1</td>
+<td>372</td>
+<td>13</td>
+<td>38</td>
+<td>1</td>
+<td>4</td>
+</tr>
+<tr class="row-even"><td>5.2-rc1</td>
+<td>334</td>
+<td>20</td>
+<td>34</td>
+<td>6</td>
+<td>11</td>
+</tr>
+<tr class="row-odd"><td>5.3-rc1</td>
+<td>302</td>
+<td>36</td>
+<td>53</td>
+<td>4</td>
+<td>5</td>
+</tr>
+<tr class="row-even"><td>5.4.0</td>
+<td>361</td>
+<td>16</td>
+<td>28</td>
+<td>1</td>
+<td>9</td>
+</tr>
+<tr class="row-odd"><td>5.5.0</td>
+<td>408</td>
+<td>11</td>
+<td>48</td>
+<td>14</td>
+<td>10</td>
</tr>
</tbody>
</table>
@@ -181,310 +186,310 @@ review, we’re much closer. For tested-by, we’ve set a new record, which is
excellent!</p>
<div class="section" id="developers-with-the-most-changesets">
<h3>Developers with the most changesets<a class="headerlink" href="#developers-with-the-most-changesets" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>139</p></td>
-<td><p>(34.1%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>139</td>
+<td>(34.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>60</p></td>
-<td><p>(14.7%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>60</td>
+<td>(14.7%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>54</p></td>
-<td><p>(13.2%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>54</td>
+<td>(13.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>23</p></td>
-<td><p>(5.6%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>23</td>
+<td>(5.6%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>20</p></td>
-<td><p>(4.9%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>20</td>
+<td>(4.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Vasant Hegde</p></td>
-<td><p>15</p></td>
-<td><p>(3.7%)</p></td>
+<tr class="row-odd"><td>Vasant Hegde</td>
+<td>15</td>
+<td>(3.7%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>15</p></td>
-<td><p>(3.7%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>15</td>
+<td>(3.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Claudio Carvalho</p></td>
-<td><p>14</p></td>
-<td><p>(3.4%)</p></td>
+<tr class="row-odd"><td>Claudio Carvalho</td>
+<td>14</td>
+<td>(3.4%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>11</p></td>
-<td><p>(2.7%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>11</td>
+<td>(2.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>9</p></td>
-<td><p>(2.2%)</p></td>
+<tr class="row-odd"><td>Ananth N Mavinakayanahalli</td>
+<td>9</td>
+<td>(2.2%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>6</p></td>
-<td><p>(1.5%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>6</td>
+<td>(1.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Nicholas Piggin</p></td>
-<td><p>5</p></td>
-<td><p>(1.2%)</p></td>
+<tr class="row-odd"><td>Nicholas Piggin</td>
+<td>5</td>
+<td>(1.2%)</td>
</tr>
-<tr class="row-even"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>5</p></td>
-<td><p>(1.2%)</p></td>
+<tr class="row-even"><td>CĂ©dric Le Goater</td>
+<td>5</td>
+<td>(1.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>5</p></td>
-<td><p>(1.2%)</p></td>
+<tr class="row-odd"><td>Pridhiviraj Paidipeddi</td>
+<td>5</td>
+<td>(1.2%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Ellerman</p></td>
-<td><p>4</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-even"><td>Michael Ellerman</td>
+<td>4</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Shilpasri G Bhat</p></td>
-<td><p>4</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-odd"><td>Shilpasri G Bhat</td>
+<td>4</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>3</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>3</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Jack Miller</p></td>
-<td><p>2</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-odd"><td>Jack Miller</td>
+<td>2</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Chris Smart</p></td>
-<td><p>2</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-even"><td>Chris Smart</td>
+<td>2</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Dave Heller</p></td>
-<td><p>1</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>Dave Heller</td>
+<td>1</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Akshay Adiga</p></td>
-<td><p>1</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-even"><td>Akshay Adiga</td>
+<td>1</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Reza Arbab</p></td>
-<td><p>1</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>Reza Arbab</td>
+<td>1</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Matt Brown</p></td>
-<td><p>1</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-even"><td>Matt Brown</td>
+<td>1</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Frederic Barrat</p></td>
-<td><p>1</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>Frederic Barrat</td>
+<td>1</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Hank Chang</p></td>
-<td><p>1</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-even"><td>Hank Chang</td>
+<td>1</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Willie Liauw</p></td>
-<td><p>1</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>Willie Liauw</td>
+<td>1</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Werner Fischer</p></td>
-<td><p>1</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-even"><td>Werner Fischer</td>
+<td>1</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Jeremy Kerr</p></td>
-<td><p>1</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>Jeremy Kerr</td>
+<td>1</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Patrick Williams</p></td>
-<td><p>1</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-even"><td>Patrick Williams</td>
+<td>1</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>1</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>1</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Alexey Kardashevskiy</p></td>
-<td><p>1</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-even"><td>Alexey Kardashevskiy</td>
+<td>1</td>
+<td>(0.2%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-changed-lines">
<h3>Developers with the most changed lines<a class="headerlink" href="#developers-with-the-most-changed-lines" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 13%" />
-<col style="width: 18%" />
+<col width="68%" />
+<col width="13%" />
+<col width="18%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>18278</p></td>
-<td><p>(48.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>18278</td>
+<td>(48.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>5512</p></td>
-<td><p>(14.6%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>5512</td>
+<td>(14.6%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>3184</p></td>
-<td><p>(8.4%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>3184</td>
+<td>(8.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>3102</p></td>
-<td><p>(8.2%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>3102</td>
+<td>(8.2%)</td>
</tr>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>2757</p></td>
-<td><p>(7.3%)</p></td>
+<tr class="row-even"><td>Stewart Smith</td>
+<td>2757</td>
+<td>(7.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>802</p></td>
-<td><p>(2.1%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>802</td>
+<td>(2.1%)</td>
</tr>
-<tr class="row-even"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>544</p></td>
-<td><p>(1.4%)</p></td>
+<tr class="row-even"><td>Ananth N Mavinakayanahalli</td>
+<td>544</td>
+<td>(1.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Claudio Carvalho</p></td>
-<td><p>489</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-odd"><td>Claudio Carvalho</td>
+<td>489</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-even"><td><p>Dave Heller</p></td>
-<td><p>425</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-even"><td>Dave Heller</td>
+<td>425</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Willie Liauw</p></td>
-<td><p>361</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-odd"><td>Willie Liauw</td>
+<td>361</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>315</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>315</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>290</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>290</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>253</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>253</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Shilpasri G Bhat</p></td>
-<td><p>228</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-odd"><td>Shilpasri G Bhat</td>
+<td>228</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Nicholas Piggin</p></td>
-<td><p>222</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-even"><td>Nicholas Piggin</td>
+<td>222</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Reza Arbab</p></td>
-<td><p>198</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-odd"><td>Reza Arbab</td>
+<td>198</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>158</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>158</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Jack Miller</p></td>
-<td><p>127</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Jack Miller</td>
+<td>127</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>126</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>CĂ©dric Le Goater</td>
+<td>126</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Chris Smart</p></td>
-<td><p>95</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Chris Smart</td>
+<td>95</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Akshay Adiga</p></td>
-<td><p>57</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-even"><td>Akshay Adiga</td>
+<td>57</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Hank Chang</p></td>
-<td><p>56</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-odd"><td>Hank Chang</td>
+<td>56</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>47</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>47</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Ellerman</p></td>
-<td><p>29</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-odd"><td>Michael Ellerman</td>
+<td>29</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Matt Brown</p></td>
-<td><p>29</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-even"><td>Matt Brown</td>
+<td>29</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Alexey Kardashevskiy</p></td>
-<td><p>2</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Alexey Kardashevskiy</td>
+<td>2</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Barrat</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Frederic Barrat</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Werner Fischer</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Werner Fischer</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Patrick Williams</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Patrick Williams</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Joel Stanley</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Joel Stanley</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-lines-removed">
<h3>Developers with the most lines removed<a class="headerlink" href="#developers-with-the-most-lines-removed" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 13%" />
-<col style="width: 18%" />
+<col width="68%" />
+<col width="13%" />
+<col width="18%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>8516</p></td>
-<td><p>(50.8%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>8516</td>
+<td>(50.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Werner Fischer</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Werner Fischer</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
</tbody>
</table>
@@ -492,54 +497,54 @@ excellent!</p>
<div class="section" id="developers-with-the-most-signoffs">
<h3>Developers with the most signoffs<a class="headerlink" href="#developers-with-the-most-signoffs" title="Permalink to this headline">¶</a></h3>
<p>Total: 364</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 67%" />
-<col style="width: 14%" />
-<col style="width: 19%" />
+<col width="67%" />
+<col width="14%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>348</p></td>
-<td><p>(95.6%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>348</td>
+<td>(95.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>6</p></td>
-<td><p>(1.6%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>6</td>
+<td>(1.6%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>3</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>3</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>2</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>2</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Vaidyanathan Srinivasan</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Hank Chang</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Hank Chang</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Jack Miller</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Jack Miller</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
</tbody>
</table>
@@ -547,62 +552,62 @@ excellent!</p>
<div class="section" id="developers-with-the-most-reviews">
<h3>Developers with the most reviews<a class="headerlink" href="#developers-with-the-most-reviews" title="Permalink to this headline">¶</a></h3>
<p>Total 50</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 67%" />
-<col style="width: 14%" />
-<col style="width: 19%" />
+<col width="67%" />
+<col width="14%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>14</p></td>
-<td><p>(28.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>14</td>
+<td>(28.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>9</p></td>
-<td><p>(18.0%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>9</td>
+<td>(18.0%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>6</p></td>
-<td><p>(12.0%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>6</td>
+<td>(12.0%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>5</p></td>
-<td><p>(10.0%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>5</td>
+<td>(10.0%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>4</p></td>
-<td><p>(8.0%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>4</td>
+<td>(8.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>3</p></td>
-<td><p>(6.0%)</p></td>
+<tr class="row-odd"><td>Vaidyanathan Srinivasan</td>
+<td>3</td>
+<td>(6.0%)</td>
</tr>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>3</p></td>
-<td><p>(6.0%)</p></td>
+<tr class="row-even"><td>Gavin Shan</td>
+<td>3</td>
+<td>(6.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>2</p></td>
-<td><p>(4.0%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>2</td>
+<td>(4.0%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Barrat</p></td>
-<td><p>2</p></td>
-<td><p>(4.0%)</p></td>
+<tr class="row-even"><td>Frederic Barrat</td>
+<td>2</td>
+<td>(4.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>1</p></td>
-<td><p>(2.0%)</p></td>
+<tr class="row-odd"><td>Mahesh Salgaonkar</td>
+<td>1</td>
+<td>(2.0%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>1</p></td>
-<td><p>(2.0%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>1</td>
+<td>(2.0%)</td>
</tr>
</tbody>
</table>
@@ -610,46 +615,46 @@ excellent!</p>
<div class="section" id="developers-with-the-most-test-credits">
<h3>Developers with the most test credits<a class="headerlink" href="#developers-with-the-most-test-credits" title="Permalink to this headline">¶</a></h3>
<p>Total 14</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 67%" />
-<col style="width: 14%" />
-<col style="width: 19%" />
+<col width="67%" />
+<col width="14%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Willie Liauw</p></td>
-<td><p>4</p></td>
-<td><p>(28.6%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Willie Liauw</td>
+<td>4</td>
+<td>(28.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Mark E Schreiter</p></td>
-<td><p>3</p></td>
-<td><p>(21.4%)</p></td>
+<tr class="row-odd"><td>Mark E Schreiter</td>
+<td>3</td>
+<td>(21.4%)</td>
</tr>
-<tr class="row-even"><td><p>Claudio Carvalho</p></td>
-<td><p>3</p></td>
-<td><p>(21.4%)</p></td>
+<tr class="row-even"><td>Claudio Carvalho</td>
+<td>3</td>
+<td>(21.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>1</p></td>
-<td><p>(7.1%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>1</td>
+<td>(7.1%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>1</p></td>
-<td><p>(7.1%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>1</td>
+<td>(7.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>1</p></td>
-<td><p>(7.1%)</p></td>
+<tr class="row-odd"><td>Pridhiviraj Paidipeddi</td>
+<td>1</td>
+<td>(7.1%)</td>
</tr>
-<tr class="row-even"><td><p>Chris Smart</p></td>
-<td><p>1</p></td>
-<td><p>(7.1%)</p></td>
+<tr class="row-even"><td>Chris Smart</td>
+<td>1</td>
+<td>(7.1%)</td>
</tr>
</tbody>
</table>
@@ -657,38 +662,38 @@ excellent!</p>
<div class="section" id="developers-who-gave-the-most-tested-by-credits">
<h3>Developers who gave the most tested-by credits<a class="headerlink" href="#developers-who-gave-the-most-tested-by-credits" title="Permalink to this headline">¶</a></h3>
<p>Total 14</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>7</p></td>
-<td><p>(50.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Gavin Shan</td>
+<td>7</td>
+<td>(50.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>4</p></td>
-<td><p>(28.6%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>4</td>
+<td>(28.6%)</td>
</tr>
-<tr class="row-even"><td><p>Chris Smart</p></td>
-<td><p>1</p></td>
-<td><p>(7.1%)</p></td>
+<tr class="row-even"><td>Chris Smart</td>
+<td>1</td>
+<td>(7.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>1</p></td>
-<td><p>(7.1%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>1</td>
+<td>(7.1%)</td>
</tr>
-<tr class="row-even"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>1</p></td>
-<td><p>(7.1%)</p></td>
+<tr class="row-even"><td>Ananth N Mavinakayanahalli</td>
+<td>1</td>
+<td>(7.1%)</td>
</tr>
</tbody>
</table>
@@ -696,38 +701,38 @@ excellent!</p>
<div class="section" id="developers-with-the-most-report-credits">
<h3>Developers with the most report credits<a class="headerlink" href="#developers-with-the-most-report-credits" title="Permalink to this headline">¶</a></h3>
<p>Total 10</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 78%" />
-<col style="width: 3%" />
-<col style="width: 19%" />
+<col width="78%" />
+<col width="3%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Hank Chang</p></td>
-<td><p>4</p></td>
-<td><p>(40.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Hank Chang</td>
+<td>4</td>
+<td>(40.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Mark E Schreiter</p></td>
-<td><p>3</p></td>
-<td><p>(30.0%)</p></td>
+<tr class="row-odd"><td>Mark E Schreiter</td>
+<td>3</td>
+<td>(30.0%)</td>
</tr>
-<tr class="row-even"><td><p>Guilherme G. Piccoli</p></td>
-<td><p>1</p></td>
-<td><p>(10.0%)</p></td>
+<tr class="row-even"><td>Guilherme G. Piccoli</td>
+<td>1</td>
+<td>(10.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Colin Ian King</p></td>
-<td><p>1</p></td>
-<td><p>(10.0%)</p></td>
+<tr class="row-odd"><td>Colin Ian King</td>
+<td>1</td>
+<td>(10.0%)</td>
</tr>
-<tr class="row-even"><td><p>Pradipta Ghosh</p></td>
-<td><p>1</p></td>
-<td><p>(10.0%)</p></td>
+<tr class="row-even"><td>Pradipta Ghosh</td>
+<td>1</td>
+<td>(10.0%)</td>
</tr>
</tbody>
</table>
@@ -735,90 +740,90 @@ excellent!</p>
<div class="section" id="developers-who-gave-the-most-report-credits">
<h3>Developers who gave the most report credits<a class="headerlink" href="#developers-who-gave-the-most-report-credits" title="Permalink to this headline">¶</a></h3>
<p>Total 10</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 78%" />
-<col style="width: 3%" />
-<col style="width: 19%" />
+<col width="78%" />
+<col width="3%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>8</p></td>
-<td><p>(80.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Gavin Shan</td>
+<td>8</td>
+<td>(80.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>1</p></td>
-<td><p>(10.0%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>1</td>
+<td>(10.0%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>1</p></td>
-<td><p>(10.0%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>1</td>
+<td>(10.0%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="top-changeset-contributors-by-employer">
<h3>Top changeset contributors by employer<a class="headerlink" href="#top-changeset-contributors-by-employer" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Employer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Employer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>406</p></td>
-<td><p>(99.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>406</td>
+<td>(99.5%)</td>
</tr>
-<tr class="row-odd"><td><p>SuperMicro</p></td>
-<td><p>1</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>SuperMicro</td>
+<td>1</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Thomas-Krenn AG</p></td>
-<td><p>1</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-even"><td>Thomas-Krenn AG</td>
+<td>1</td>
+<td>(0.2%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="top-lines-changed-by-employer">
<h3>Top lines changed by employer<a class="headerlink" href="#top-lines-changed-by-employer" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 68%" />
-<col style="width: 14%" />
-<col style="width: 19%" />
+<col width="68%" />
+<col width="14%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Employer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Employer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>37329</p></td>
-<td><p>(99.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>37329</td>
+<td>(99.0%)</td>
</tr>
-<tr class="row-odd"><td><p>SuperMicro</p></td>
-<td><p>361</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-odd"><td>SuperMicro</td>
+<td>361</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-even"><td><p>Thomas-Krenn AG</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Thomas-Krenn AG</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
</tbody>
</table>
@@ -826,26 +831,26 @@ excellent!</p>
<div class="section" id="employers-with-the-most-signoffs">
<h3>Employers with the most signoffs<a class="headerlink" href="#employers-with-the-most-signoffs" title="Permalink to this headline">¶</a></h3>
<p>Total 364</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Employer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Employer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>363</p></td>
-<td><p>(99.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>363</td>
+<td>(99.7%)</td>
</tr>
-<tr class="row-odd"><td><p>(Unknown)</p></td>
-<td><p>1</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>(Unknown)</td>
+<td>1</td>
+<td>(0.3%)</td>
</tr>
</tbody>
</table>
@@ -853,30 +858,30 @@ excellent!</p>
<div class="section" id="employers-with-the-most-hackers">
<h3>Employers with the most hackers<a class="headerlink" href="#employers-with-the-most-hackers" title="Permalink to this headline">¶</a></h3>
<p>Total 31</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Employer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Employer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>29</p></td>
-<td><p>(93.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>29</td>
+<td>(93.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Thomas-Krenn AG</p></td>
-<td><p>1</p></td>
-<td><p>(3.2%)</p></td>
+<tr class="row-odd"><td>Thomas-Krenn AG</td>
+<td>1</td>
+<td>(3.2%)</td>
</tr>
-<tr class="row-even"><td><p>SuperMicro</p></td>
-<td><p>1</p></td>
-<td><p>(3.2%)</p></td>
+<tr class="row-even"><td>SuperMicro</td>
+<td>1</td>
+<td>(3.2%)</td>
</tr>
</tbody>
</table>
@@ -885,7 +890,6 @@ excellent!</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -930,15 +934,17 @@ excellent!</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -955,15 +961,14 @@ excellent!</p>
<li class="right" >
<a href="skiboot-5.4.9.html" title="skiboot-5.4.9"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.5.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.6.0-rc1.html b/doc/release-notes/skiboot-5.6.0-rc1.html
index d6f6085..d14cc58 100644
--- a/doc/release-notes/skiboot-5.6.0-rc1.html
+++ b/doc/release-notes/skiboot-5.6.0-rc1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.6.0-rc1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.6.0-rc1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.6.0.html" title="skiboot-5.6.0"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.6.0-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -71,43 +72,51 @@ and issues: <a class="reference external" href="https://github.com/open-power/sk
<p>XIVE:</p>
<blockquote>
<div><ul>
-<li><p>xive: Clear emulation mode queue on reset</p></li>
-<li><p>xive: Fixes/improvements to xive reset for multi-chip systems</p></li>
-<li><p>xive: Synchronize after disable IRQs in opal_xive_reset()</p></li>
-<li><p>xive: Workaround a problem with indirect TM access</p></li>
-<li><p>hdata: Make FSPv1 work again
-One less thing to work around for those crazy enough to try.</p></li>
-<li><p>xive: Log more information in opal_xive_dump() for emulation state</p>
+<li><p class="first">xive: Clear emulation mode queue on reset</p>
+</li>
+<li><p class="first">xive: Fixes/improvements to xive reset for multi-chip systems</p>
+</li>
+<li><p class="first">xive: Synchronize after disable IRQs in opal_xive_reset()</p>
+</li>
+<li><p class="first">xive: Workaround a problem with indirect TM access</p>
+</li>
+<li><p class="first">hdata: Make FSPv1 work again
+One less thing to work around for those crazy enough to try.</p>
+</li>
+<li><p class="first">xive: Log more information in opal_xive_dump() for emulation state</p>
<p>Add a counter of total interrupts taken by a CPU, dump the
queue buffer both before and after the current pointer,
and also display the HW state of the queue descriptor and
the PQ state of the IPI.</p>
</li>
-<li><p>xive: Add a per-cpu logging mechanism to XICS emulation</p>
+<li><p class="first">xive: Add a per-cpu logging mechanism to XICS emulation</p>
<p>This is a small 32-entries rolling buffer that logs a few
operations. It’s useful to debug odd problems. The output
is printed when opal_xive_dump() is called.</p>
</li>
-<li><p>xive: Check queues for duplicates in DEBUG builds.</p>
+<li><p class="first">xive: Check queues for duplicates in DEBUG builds.</p>
<p>There should never be duplicate interrupts in a queue.
This adds code to check that when looking at the queue
content. Since it can be a performance loss, this is only
done for debug builds.</p>
</li>
-<li><p>xive+phb4: Fix exposing trigger page to Linux</p></li>
+<li><p class="first">xive+phb4: Fix exposing trigger page to Linux</p>
+</li>
</ul>
</div></blockquote>
<p>HDAT Parsing:</p>
<blockquote>
<div><ul>
-<li><p>hdata/spira.c: Add device-tree bindings for nest mmu</p></li>
-<li><p>hdata/i2c: Workaround broken i2c devices</p></li>
-<li><p>hdata: indicate when booted with elevated risk level</p>
+<li><p class="first">hdata/spira.c: Add device-tree bindings for nest mmu</p>
+</li>
+<li><p class="first">hdata/i2c: Workaround broken i2c devices</p>
+</li>
+<li><p class="first">hdata: indicate when booted with elevated risk level</p>
<p>When the system is IPLed with an elevated risk level Hostboot will
set a flag in the IPL parameters structure. Parse and export this
in the device tree at: /ipl-params/sys-params/elevated-risk-level</p>
</li>
-<li><p>hdata: Respect OCC and HOMER resevations</p>
+<li><p class="first">hdata: Respect OCC and HOMER resevations</p>
<p>In the past we’ve ignored these since Hostboot insisted in exporting
broken reservations and the OCC was not being used yet. This situation
seems to have resolved itself so we should respect the reservations that
@@ -117,7 +126,7 @@ hostboot provides.</p>
</div></blockquote>
<p>I2C:</p>
<ul>
-<li><p>i2c: Add interrupts support on P9</p>
+<li><p class="first">i2c: Add interrupts support on P9</p>
<p>Some older revisions of hostboot populate the host i2c device fields
with all zero entires. Detect and ignore these so we don’t crash on
boot.</p>
@@ -151,7 +160,7 @@ CPU 0034 Backtrace:
<p>PHB4:</p>
<blockquote>
<div><ul>
-<li><p>phb4: Enforce root complex config space size of 2048</p>
+<li><p class="first">phb4: Enforce root complex config space size of 2048</p>
<p>The root complex config space size on PHB4 is 2048. This patch sets
that size and enforces it when trying to read/write the config space
in the root complex.</p>
@@ -159,26 +168,29 @@ in the root complex.</p>
cause an EEH on the PHB.</p>
<p>If too high, reads returns 1s and writes are silently dropped.</p>
</li>
-<li><p>phb4: Add an option for disabling EEH MMIO in nvram</p>
+<li><p class="first">phb4: Add an option for disabling EEH MMIO in nvram</p>
<p>Having the option to disable EEH for MMIO without rebuilding skiboot
could be useful for testing, so check for pci-eeh-mmio=disabled in nvram.</p>
<p>This is not designed to be a supported option or configuration, just
an option that’s useful in bringup and development of POWER9 systems.</p>
</li>
-<li><p>phb4: Fix slot presence detect</p>
+<li><p class="first">phb4: Fix slot presence detect</p>
<p>This has the nice side effect of improving boot times since we no
longer waste time tring to train links that don’t have anything
present.</p>
</li>
-<li><p>phb4: Enable EEH for MMIO</p></li>
-<li><p>phb4: Implement fence check</p></li>
-<li><p>phb4: Implement diag data</p></li>
+<li><p class="first">phb4: Enable EEH for MMIO</p>
+</li>
+<li><p class="first">phb4: Implement fence check</p>
+</li>
+<li><p class="first">phb4: Implement diag data</p>
+</li>
</ul>
</div></blockquote>
<p>OCC:</p>
<blockquote>
<div><ul>
-<li><p>occ/irq: Fix SCOM address and irq reasons for P9 OCC</p>
+<li><p class="first">occ/irq: Fix SCOM address and irq reasons for P9 OCC</p>
<p>This patch fixes the SCOM address for OCC_MISC register which is used
for OCC interupts. In P9, OCC sends an interrupt to notify change in
the shared memory like throttle status. This patch handles this
@@ -189,38 +201,39 @@ interrupt reason.</p>
<p>PRD:</p>
<blockquote>
<div><ul class="simple">
-<li><p>prd: Fix PRD scoms for P9</p></li>
+<li>prd: Fix PRD scoms for P9</li>
</ul>
</div></blockquote>
<p>NX/DARN:</p>
<blockquote>
<div><ul class="simple">
-<li><p>nx: Add POWER9 DARN support</p></li>
+<li>nx: Add POWER9 DARN support</li>
</ul>
</div></blockquote>
<p>NPU2:</p>
<blockquote>
<div><ul>
-<li><p>npu2: Do not attempt to initialise non DD1 hardware</p>
+<li><p class="first">npu2: Do not attempt to initialise non DD1 hardware</p>
<p>There are significant changes to hardware register addresses and
meanings on newer chip revisions making them unlikely to work
correctly with the existing code. Better to fail clearly and early.</p>
</li>
-<li><p>npu, npu2: Describe diag data size in device tree</p></li>
+<li><p class="first">npu, npu2: Describe diag data size in device tree</p>
+</li>
</ul>
</div></blockquote>
<p>Memory Reservation:</p>
<blockquote>
<div><ul>
-<li><p>mem_region: Add reserved regions after memory init</p>
+<li><p class="first">mem_region: Add reserved regions after memory init</p>
<p>When a new memory region is added (e.g for memory reserved by firmware)
the list of existing memory regions is iterated through and a cut-out is
made in any existing region that overlaps with the new one. Prior to the
HDAT reservations being made the region init process was always:</p>
<blockquote>
<div><ol class="arabic simple">
-<li><p>Create regions from the memory&#64;&lt;addr&gt; DT nodes. (mostly large)</p></li>
-<li><p>Create reserved regions from the device-tree. (mostly small)</p></li>
+<li>Create regions from the memory&#64;&lt;addr&gt; DT nodes. (mostly large)</li>
+<li>Create reserved regions from the device-tree. (mostly small)</li>
</ol>
</div></blockquote>
<p>When adding new regions we have assumed that the new region will only
@@ -238,7 +251,7 @@ reservations are handled.</p>
<div class="section" id="pci">
<h2>PCI<a class="headerlink" href="#pci" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>pci: Describe PHB diag data size in device tree</p>
+<li><p class="first">pci: Describe PHB diag data size in device tree</p>
<p>Linux hardcodes the PHB diag data buffer at (as of this commit) 8192 bytes.
This has been enough for P7IOC and PHB3, but the 512 PEs of PHB4 pushes
the diag data blob over this size. Rather than just increasing the
@@ -249,8 +262,9 @@ and PHB3.</p>
<p>P7IOC communicates both hub and PHB data using this buffer, so when
setting the size, use whichever struct is largest.</p>
</li>
-<li><p>hdata/i2c: Fix bus and clock frequencies</p></li>
-<li><p>ibm-fsp: use opal-prd on p9 and above</p>
+<li><p class="first">hdata/i2c: Fix bus and clock frequencies</p>
+</li>
+<li><p class="first">ibm-fsp: use opal-prd on p9 and above</p>
<p>Previously the PRD tooling ran on the FSP, but it was moved into
userspace on the host for OpenPower systems. For P9 this system
was adopted for FSP systems too.</p>
@@ -260,19 +274,20 @@ was adopted for FSP systems too.</p>
<div class="section" id="i2c">
<h2>I2C<a class="headerlink" href="#i2c" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>i2c: Remove old hack for bad clock frequency</p>
+<li><p class="first">i2c: Remove old hack for bad clock frequency</p>
<p>This hack dates back to ancient P8 hostboots. The value
it would use if it detected the “bad” value was incorrect
anyway.</p>
</li>
-<li><p>i2c: Log the engine clock frequency at boot</p></li>
+<li><p class="first">i2c: Log the engine clock frequency at boot</p>
+</li>
</ul>
</div>
<div class="section" id="fsp-systems">
<h2>FSP Systems<a class="headerlink" href="#fsp-systems" title="Permalink to this headline">¶</a></h2>
<p>These include the Apollo, Firenze and ZZ platforms.</p>
<ul>
-<li><p>Remove multiple logging for un-handled fsp sub commands.</p>
+<li><p class="first">Remove multiple logging for un-handled fsp sub commands.</p>
<p>If any new or unknown command need to be handled, just log
un-hnadled message from only fsp, not required from fsp-dpo.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">cat</span> <span class="o">/</span><span class="n">sys</span><span class="o">/</span><span class="n">firmware</span><span class="o">/</span><span class="n">opal</span><span class="o">/</span><span class="n">msglog</span> <span class="o">|</span> <span class="n">grep</span> <span class="o">-</span><span class="n">i</span> <span class="p">,</span><span class="mi">3</span>
@@ -284,7 +299,7 @@ un-hnadled message from only fsp, not required from fsp-dpo.</p>
</pre></div>
</div>
</li>
-<li><p>FSP: Notify FSP of Platform Log ID after Host Initiated Reset Reload</p>
+<li><p class="first">FSP: Notify FSP of Platform Log ID after Host Initiated Reset Reload</p>
<p>Trigging a Host Initiated Reset (when the host detects the FSP has gone
out to lunch and should be rebooted), would cause “Unknown Command” messages
to appear in the OPAL log.</p>
@@ -312,8 +327,9 @@ error log explains why you rebooted me?”. So, we tell it.</p>
<div class="section" id="misc">
<h2>Misc<a class="headerlink" href="#misc" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hdata_to_dt: Misc improvements in the utility and unit test</p></li>
-<li><p>GCC7: fixes for -Wimplicit-fallthrough expected regexes</p>
+<li><p class="first">hdata_to_dt: Misc improvements in the utility and unit test</p>
+</li>
+<li><p class="first">GCC7: fixes for -Wimplicit-fallthrough expected regexes</p>
<p>It turns out GCC7 adds a useful warning and does fancy things like
parsing your comments to work out that you intended to do the fallthrough.
There’s a few places where we don’t match the regex. Fix them, as it’s
@@ -322,13 +338,16 @@ harmless to do so.</p>
<p>While we do not have everything needed to start building successfully
with GCC7 (well, at least doing so warning clean), it’s a start.</p>
</li>
-<li><p>hdata/i2c: avoid possible int32_t overflow</p>
+<li><p class="first">hdata/i2c: avoid possible int32_t overflow</p>
<p>We’re safe up until engine number 524288. Found by static analysis (of course)</p>
</li>
-<li><p>tpm_i2c_nuvoton: fix use-after-free in tpm_register_chip failure path</p></li>
-<li><p>mambo: Fix reserved-ranges node</p></li>
-<li><p>external/mambo: add helper for machine checks</p></li>
-<li><p>console: Set log level from nvram</p>
+<li><p class="first">tpm_i2c_nuvoton: fix use-after-free in tpm_register_chip failure path</p>
+</li>
+<li><p class="first">mambo: Fix reserved-ranges node</p>
+</li>
+<li><p class="first">external/mambo: add helper for machine checks</p>
+</li>
+<li><p class="first">console: Set log level from nvram</p>
<p>This adds two new nvram options to set the console log level for the
driver/uart and in memory. These are called log-level-memory and
log-level-driver.</p>
@@ -344,11 +363,15 @@ warning, notice, printf, info, debug, trace or insane. ie.</p>
</pre></div>
</div>
</li>
-<li><p>npu: Implement Function Level Reset (FLR)</p></li>
-<li><p>mbox: Sanitize interrupts registers</p></li>
-<li><p>xive: Fix potential for lost IPIs when manipulating CPPR</p></li>
-<li><p>xive: Don’t double EOI interrupts that have an EOI override</p></li>
-<li><p>libflash/file: Only use 64bit MTD erase ioctl() when needed</p>
+<li><p class="first">npu: Implement Function Level Reset (FLR)</p>
+</li>
+<li><p class="first">mbox: Sanitize interrupts registers</p>
+</li>
+<li><p class="first">xive: Fix potential for lost IPIs when manipulating CPPR</p>
+</li>
+<li><p class="first">xive: Don’t double EOI interrupts that have an EOI override</p>
+</li>
+<li><p class="first">libflash/file: Only use 64bit MTD erase ioctl() when needed</p>
<p>We recently made MTD 64 bit safe in e5720d3fe94 which now requires the
64 bit MTD erase ioctl. Unfortunately this ioctl is not present in
older kernels used by some BMC vendors that use pflash.</p>
@@ -367,178 +390,178 @@ will be returned from from the function.</p>
A total of 2496 lines added, 641 removed (delta 1855)</p>
<div class="section" id="developers-with-the-most-changesets">
<h3>Developers with the most changesets<a class="headerlink" href="#developers-with-the-most-changesets" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 75%" />
-<col style="width: 6%" />
-<col style="width: 19%" />
+<col width="75%" />
+<col width="6%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>17</p></td>
-<td><p>(21.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>17</td>
+<td>(21.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>17</p></td>
-<td><p>(21.0%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>17</td>
+<td>(21.0%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>16</p></td>
-<td><p>(19.8%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>16</td>
+<td>(19.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>9</p></td>
-<td><p>(11.1%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>9</td>
+<td>(11.1%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>8</p></td>
-<td><p>(9.9%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>8</td>
+<td>(9.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>5</p></td>
-<td><p>(6.2%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>5</td>
+<td>(6.2%)</td>
</tr>
-<tr class="row-even"><td><p><a class="reference external" href="mailto:ppaidipe&#37;&#52;&#48;linux&#46;vnet&#46;ibm&#46;com">ppaidipe<span>&#64;</span>linux<span>&#46;</span>vnet<span>&#46;</span>ibm<span>&#46;</span>com</a></p></td>
-<td><p>1</p></td>
-<td><p>(1.2%)</p></td>
+<tr class="row-even"><td><a class="reference external" href="mailto:ppaidipe&#37;&#52;&#48;linux&#46;vnet&#46;ibm&#46;com">ppaidipe<span>&#64;</span>linux<span>&#46;</span>vnet<span>&#46;</span>ibm<span>&#46;</span>com</a></td>
+<td>1</td>
+<td>(1.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Dave Heller</p></td>
-<td><p>1</p></td>
-<td><p>(1.2%)</p></td>
+<tr class="row-odd"><td>Dave Heller</td>
+<td>1</td>
+<td>(1.2%)</td>
</tr>
-<tr class="row-even"><td><p>Jeff Scheel</p></td>
-<td><p>1</p></td>
-<td><p>(1.2%)</p></td>
+<tr class="row-even"><td>Jeff Scheel</td>
+<td>1</td>
+<td>(1.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Nicholas Piggin</p></td>
-<td><p>1</p></td>
-<td><p>(1.2%)</p></td>
+<tr class="row-odd"><td>Nicholas Piggin</td>
+<td>1</td>
+<td>(1.2%)</td>
</tr>
-<tr class="row-even"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>1</p></td>
-<td><p>(1.2%)</p></td>
+<tr class="row-even"><td>Ananth N Mavinakayanahalli</td>
+<td>1</td>
+<td>(1.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>1</p></td>
-<td><p>(1.2%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>1</td>
+<td>(1.2%)</td>
</tr>
-<tr class="row-even"><td><p>Alexey Kardashevskiy</p></td>
-<td><p>1</p></td>
-<td><p>(1.2%)</p></td>
+<tr class="row-even"><td>Alexey Kardashevskiy</td>
+<td>1</td>
+<td>(1.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Jim Yuan</p></td>
-<td><p>1</p></td>
-<td><p>(1.2%)</p></td>
+<tr class="row-odd"><td>Jim Yuan</td>
+<td>1</td>
+<td>(1.2%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>1</p></td>
-<td><p>(1.2%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>1</td>
+<td>(1.2%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-changed-lines">
<h3>Developers with the most changed lines<a class="headerlink" href="#developers-with-the-most-changed-lines" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 73%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="73%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>748</p></td>
-<td><p>(28.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Michael Neuling</td>
+<td>748</td>
+<td>(28.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>405</p></td>
-<td><p>(15.4%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>405</td>
+<td>(15.4%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>360</p></td>
-<td><p>(13.7%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>360</td>
+<td>(13.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>297</p></td>
-<td><p>(11.3%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>297</td>
+<td>(11.3%)</td>
</tr>
-<tr class="row-even"><td><p>Nicholas Piggin</p></td>
-<td><p>187</p></td>
-<td><p>(7.1%)</p></td>
+<tr class="row-even"><td>Nicholas Piggin</td>
+<td>187</td>
+<td>(7.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>183</p></td>
-<td><p>(7.0%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>183</td>
+<td>(7.0%)</td>
</tr>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>175</p></td>
-<td><p>(6.6%)</p></td>
+<tr class="row-even"><td>Stewart Smith</td>
+<td>175</td>
+<td>(6.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Shilpasri G Bhat</p></td>
-<td><p>79</p></td>
-<td><p>(3.0%)</p></td>
+<tr class="row-odd"><td>Shilpasri G Bhat</td>
+<td>79</td>
+<td>(3.0%)</td>
</tr>
-<tr class="row-even"><td><p>Jim Yuan</p></td>
-<td><p>56</p></td>
-<td><p>(2.1%)</p></td>
+<tr class="row-even"><td>Jim Yuan</td>
+<td>56</td>
+<td>(2.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>45</p></td>
-<td><p>(1.7%)</p></td>
+<tr class="row-odd"><td>Ananth N Mavinakayanahalli</td>
+<td>45</td>
+<td>(1.7%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>38</p></td>
-<td><p>(1.4%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>38</td>
+<td>(1.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Alexey Kardashevskiy</p></td>
-<td><p>37</p></td>
-<td><p>(1.4%)</p></td>
+<tr class="row-odd"><td>Alexey Kardashevskiy</td>
+<td>37</td>
+<td>(1.4%)</td>
</tr>
-<tr class="row-even"><td><p>Jeff Scheel</p></td>
-<td><p>19</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-even"><td>Jeff Scheel</td>
+<td>19</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Dave Heller</p></td>
-<td><p>2</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-odd"><td>Dave Heller</td>
+<td>2</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-lines-removed">
<h3>Developers with the most lines removed<a class="headerlink" href="#developers-with-the-most-lines-removed" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 73%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="73%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>1</p></td>
-<td><p>(0.2%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>1</td>
+<td>(0.2%)</td>
</tr>
</tbody>
</table>
@@ -546,30 +569,30 @@ A total of 2496 lines added, 641 removed (delta 1855)</p>
<div class="section" id="developers-with-the-most-signoffs">
<h3>Developers with the most signoffs<a class="headerlink" href="#developers-with-the-most-signoffs" title="Permalink to this headline">¶</a></h3>
<p>Total of 73.</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 71%" />
-<col style="width: 9%" />
-<col style="width: 20%" />
+<col width="71%" />
+<col width="9%" />
+<col width="20%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>56</p></td>
-<td><p>(76.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>56</td>
+<td>(76.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>16</p></td>
-<td><p>(21.9%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>16</td>
+<td>(21.9%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>1</p></td>
-<td><p>(1.4%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>1</td>
+<td>(1.4%)</td>
</tr>
</tbody>
</table>
@@ -577,34 +600,34 @@ A total of 2496 lines added, 641 removed (delta 1855)</p>
<div class="section" id="developers-with-the-most-reviews">
<h3>Developers with the most reviews<a class="headerlink" href="#developers-with-the-most-reviews" title="Permalink to this headline">¶</a></h3>
<p>Total of 6.</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 71%" />
-<col style="width: 9%" />
-<col style="width: 20%" />
+<col width="71%" />
+<col width="9%" />
+<col width="20%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>3</p></td>
-<td><p>(50.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>3</td>
+<td>(50.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>1</p></td>
-<td><p>(16.7%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>1</td>
+<td>(16.7%)</td>
</tr>
-<tr class="row-even"><td><p>Gavin Shan</p></td>
-<td><p>1</p></td>
-<td><p>(16.7%)</p></td>
+<tr class="row-even"><td>Gavin Shan</td>
+<td>1</td>
+<td>(16.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>1</p></td>
-<td><p>(16.7%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>1</td>
+<td>(16.7%)</td>
</tr>
</tbody>
</table>
@@ -612,34 +635,34 @@ A total of 2496 lines added, 641 removed (delta 1855)</p>
<div class="section" id="developers-with-the-most-test-credits">
<h3>Developers with the most test credits<a class="headerlink" href="#developers-with-the-most-test-credits" title="Permalink to this headline">¶</a></h3>
<p>Total of 5.</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 71%" />
-<col style="width: 9%" />
-<col style="width: 20%" />
+<col width="71%" />
+<col width="9%" />
+<col width="20%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>2</p></td>
-<td><p>(40.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>2</td>
+<td>(40.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>1</p></td>
-<td><p>(20.0%)</p></td>
+<tr class="row-odd"><td>Vaidyanathan Srinivasan</td>
+<td>1</td>
+<td>(20.0%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>1</p></td>
-<td><p>(20.0%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>1</td>
+<td>(20.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Ellerman</p></td>
-<td><p>1</p></td>
-<td><p>(20.0%)</p></td>
+<tr class="row-odd"><td>Michael Ellerman</td>
+<td>1</td>
+<td>(20.0%)</td>
</tr>
</tbody>
</table>
@@ -647,30 +670,30 @@ A total of 2496 lines added, 641 removed (delta 1855)</p>
<div class="section" id="developers-who-gave-the-most-tested-by-credits">
<h3>Developers who gave the most tested-by credits<a class="headerlink" href="#developers-who-gave-the-most-tested-by-credits" title="Permalink to this headline">¶</a></h3>
<p>Total of 5.</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 71%" />
-<col style="width: 9%" />
-<col style="width: 20%" />
+<col width="71%" />
+<col width="9%" />
+<col width="20%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>2</p></td>
-<td><p>(40.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>2</td>
+<td>(40.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>2</p></td>
-<td><p>(40.0%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>2</td>
+<td>(40.0%)</td>
</tr>
-<tr class="row-even"><td><p>Nicholas Piggin</p></td>
-<td><p>1</p></td>
-<td><p>(20.0%)</p></td>
+<tr class="row-even"><td>Nicholas Piggin</td>
+<td>1</td>
+<td>(20.0%)</td>
</tr>
</tbody>
</table>
@@ -678,26 +701,26 @@ A total of 2496 lines added, 641 removed (delta 1855)</p>
<div class="section" id="developers-with-the-most-report-credits">
<h3>Developers with the most report credits<a class="headerlink" href="#developers-with-the-most-report-credits" title="Permalink to this headline">¶</a></h3>
<p>Total of 2.</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 73%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="73%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>1</p></td>
-<td><p>(50.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>1</td>
+<td>(50.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>1</p></td>
-<td><p>(50.0%)</p></td>
+<tr class="row-odd"><td>Pridhiviraj Paidipeddi</td>
+<td>1</td>
+<td>(50.0%)</td>
</tr>
</tbody>
</table>
@@ -705,22 +728,22 @@ A total of 2496 lines added, 641 removed (delta 1855)</p>
<div class="section" id="developers-who-gave-the-most-report-credits">
<h3>Developers who gave the most report credits<a class="headerlink" href="#developers-who-gave-the-most-report-credits" title="Permalink to this headline">¶</a></h3>
<p>Total of 2.</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 8%" />
-<col style="width: 22%" />
+<col width="69%" />
+<col width="8%" />
+<col width="22%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>2</p></td>
-<td><p>(100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>2</td>
+<td>(100.0%)</td>
</tr>
</tbody>
</table>
@@ -728,52 +751,52 @@ A total of 2496 lines added, 641 removed (delta 1855)</p>
<div class="section" id="top-changeset-contributors-by-employer">
<h3>Top changeset contributors by employer<a class="headerlink" href="#top-changeset-contributors-by-employer" title="Permalink to this headline">¶</a></h3>
<p>Total of 2.</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 71%" />
-<col style="width: 9%" />
-<col style="width: 20%" />
+<col width="71%" />
+<col width="9%" />
+<col width="20%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Employer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Employer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>80</p></td>
-<td><p>(98.8%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>80</td>
+<td>(98.8%)</td>
</tr>
-<tr class="row-odd"><td><p>SuperMicro</p></td>
-<td><p>1</p></td>
-<td><p>(1.2%)</p></td>
+<tr class="row-odd"><td>SuperMicro</td>
+<td>1</td>
+<td>(1.2%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="top-lines-changed-by-employer">
<h3>Top lines changed by employer<a class="headerlink" href="#top-lines-changed-by-employer" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Employer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Employer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>2576</p></td>
-<td><p>(97.9%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>2576</td>
+<td>(97.9%)</td>
</tr>
-<tr class="row-odd"><td><p>SuperMicro</p></td>
-<td><p>56</p></td>
-<td><p>(2.1%)</p></td>
+<tr class="row-odd"><td>SuperMicro</td>
+<td>56</td>
+<td>(2.1%)</td>
</tr>
</tbody>
</table>
@@ -781,22 +804,22 @@ A total of 2496 lines added, 641 removed (delta 1855)</p>
<div class="section" id="employers-with-the-most-signoffs">
<h3>Employers with the most signoffs<a class="headerlink" href="#employers-with-the-most-signoffs" title="Permalink to this headline">¶</a></h3>
<p>Total 73.</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 8%" />
-<col style="width: 22%" />
+<col width="69%" />
+<col width="8%" />
+<col width="22%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Employer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Employer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>73</p></td>
-<td><p>(100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>73</td>
+<td>(100.0%)</td>
</tr>
</tbody>
</table>
@@ -804,26 +827,26 @@ A total of 2496 lines added, 641 removed (delta 1855)</p>
<div class="section" id="employers-with-the-most-hackers">
<h3>Employers with the most hackers<a class="headerlink" href="#employers-with-the-most-hackers" title="Permalink to this headline">¶</a></h3>
<p>Total 15.</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 71%" />
-<col style="width: 9%" />
-<col style="width: 20%" />
+<col width="71%" />
+<col width="9%" />
+<col width="20%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Employer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Employer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>14</p></td>
-<td><p>(93.3%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>14</td>
+<td>(93.3%)</td>
</tr>
-<tr class="row-odd"><td><p>SuperMicro</p></td>
-<td><p>1</p></td>
-<td><p>(6.7%)</p></td>
+<tr class="row-odd"><td>SuperMicro</td>
+<td>1</td>
+<td>(6.7%)</td>
</tr>
</tbody>
</table>
@@ -832,7 +855,6 @@ A total of 2496 lines added, 641 removed (delta 1855)</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -881,15 +903,17 @@ A total of 2496 lines added, 641 removed (delta 1855)</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -906,15 +930,14 @@ A total of 2496 lines added, 641 removed (delta 1855)</p>
<li class="right" >
<a href="skiboot-5.6.0.html" title="skiboot-5.6.0"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.6.0-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.6.0-rc2.html b/doc/release-notes/skiboot-5.6.0-rc2.html
index ab7bf77..72ad4f5 100644
--- a/doc/release-notes/skiboot-5.6.0-rc2.html
+++ b/doc/release-notes/skiboot-5.6.0-rc2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.6.0-rc2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.6.0-rc2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.6.0-rc1.html" title="skiboot-5.6.0-rc1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.6.0-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -63,7 +64,7 @@ period. Expected release dates and contents are tracked using GitHub milestone
and issues: <a class="reference external" href="https://github.com/open-power/skiboot/milestones">https://github.com/open-power/skiboot/milestones</a></p>
<p>Over <a class="reference internal" href="skiboot-5.6.0-rc1.html#skiboot-5-6-0-rc1"><span class="std std-ref">skiboot-5.6.0-rc1</span></a>, we have the following changes:</p>
<ul>
-<li><p>hw/i2c: Fix early lock drop</p>
+<li><p class="first">hw/i2c: Fix early lock drop</p>
<p>When interacting with an I2C master the p8-i2c driver (common to p9)
aquires a per-master lock which it holds for the duration of it’s
interaction with the master. Unfortunately, when
@@ -73,7 +74,7 @@ contrary to the driver’s locking strategy which requires that the
caller aquire and drop the lock. This leads to a crash due to the
double unlock(), which skiboot treats as fatal.</p>
</li>
-<li><p>mambo: Add skiboot/linux symbol lookup</p>
+<li><p class="first">mambo: Add skiboot/linux symbol lookup</p>
<p>Adds the skisym and linsym commands which can be used to find the
address of a Linux or Skiboot symbol. To function this requires
the user to provide the SKIBOOT_MAP and VMLINUX_MAP environmental
@@ -81,13 +82,13 @@ variables which indicate which skiboot.map and System.map files
should be used.</p>
<p>Examples:</p>
<ul>
-<li><p>Look up a symbol address:</p>
+<li><p class="first">Look up a symbol address:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">systemsim</span> <span class="o">%</span> <span class="n">skisym</span> <span class="o">.</span><span class="n">load_and_boot_kernel</span>
<span class="mh">0x0000000030013a08</span>
</pre></div>
</div>
</li>
-<li><p>Set a breakpoint there:</p>
+<li><p class="first">Set a breakpoint there:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">systemsim</span> <span class="o">%</span> <span class="n">b</span> <span class="p">[</span><span class="n">skisym</span> <span class="o">.</span><span class="n">load_and_boot_kernel</span><span class="p">]</span>
<span class="n">breakpoint</span> <span class="nb">set</span> <span class="n">at</span> <span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">0</span><span class="p">]:</span> <span class="mh">0x0000000030013a08</span> <span class="p">(</span><span class="mh">0x0000000030013A08</span><span class="p">)</span> <span class="n">Enc</span><span class="p">:</span><span class="mh">0x7D800026</span> <span class="p">:</span> <span class="n">mfcr</span> <span class="n">r12</span>
</pre></div>
@@ -95,7 +96,7 @@ should be used.</p>
</li>
</ul>
</li>
-<li><p>libstb: Fix build in OpenSSL 1.1</p>
+<li><p class="first">libstb: Fix build in OpenSSL 1.1</p>
<p>The build failure was as follows:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>[ HOSTCC ] libstb/create-container.c
In file included from /usr/include/openssl/asn1.h:24:0,
@@ -113,7 +114,6 @@ libstb/create-container.c:104:31: error: dereferencing pointer to incomplete
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -133,15 +133,17 @@ libstb/create-container.c:104:31: error: dereferencing pointer to incomplete
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -158,15 +160,14 @@ libstb/create-container.c:104:31: error: dereferencing pointer to incomplete
<li class="right" >
<a href="skiboot-5.6.0-rc1.html" title="skiboot-5.6.0-rc1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.6.0-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.6.0.html b/doc/release-notes/skiboot-5.6.0.html
index f6d129a..ea88eda 100644
--- a/doc/release-notes/skiboot-5.6.0.html
+++ b/doc/release-notes/skiboot-5.6.0.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.6.0 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.6.0 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.5.0-rc3.html" title="skiboot-5.5.0-rc3"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.6.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -61,15 +62,14 @@ skiboot master.</p>
<h2>Changes in skiboot-5.6.0<a class="headerlink" href="#changes-in-skiboot-5-6-0" title="Permalink to this headline">¶</a></h2>
<p>See changes in the release candidates:</p>
<ul class="simple">
-<li><p><a class="reference internal" href="skiboot-5.6.0-rc1.html#skiboot-5-6-0-rc1"><span class="std std-ref">skiboot-5.6.0-rc1</span></a></p></li>
-<li><p><a class="reference internal" href="skiboot-5.6.0-rc2.html#skiboot-5-6-0-rc2"><span class="std std-ref">skiboot-5.6.0-rc2</span></a></p></li>
+<li><a class="reference internal" href="skiboot-5.6.0-rc1.html#skiboot-5-6-0-rc1"><span class="std std-ref">skiboot-5.6.0-rc1</span></a></li>
+<li><a class="reference internal" href="skiboot-5.6.0-rc2.html#skiboot-5-6-0-rc2"><span class="std std-ref">skiboot-5.6.0-rc2</span></a></li>
</ul>
<p>The final 5.6.0 release has no functional changes over the 5.6.0-rc2.</p>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -97,15 +97,17 @@ skiboot master.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -122,15 +124,14 @@ skiboot master.</p>
<li class="right" >
<a href="skiboot-5.5.0-rc3.html" title="skiboot-5.5.0-rc3"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.6.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.7-rc1.html b/doc/release-notes/skiboot-5.7-rc1.html
index b57f43e..5c2a157 100644
--- a/doc/release-notes/skiboot-5.7-rc1.html
+++ b/doc/release-notes/skiboot-5.7-rc1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.7-rc1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.7-rc1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.7.html" title="skiboot-5.7"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.7-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -66,13 +67,13 @@ and issues: <a class="reference external" href="https://github.com/open-power/sk
<h2>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<p>New features in this release for POWER9 systems:</p>
<ul class="simple">
-<li><p>In Memory Counters (IMC) (See <a class="reference internal" href="../imc.html#imc"><span class="std std-ref">OPAL/Skiboot In-Memory Collection (IMC) interface Documentation</span></a> for details)</p></li>
-<li><p>phb4: Activate shared PCI slot on witherspoon (see <a class="reference internal" href="#shared-slot-5-7-rc1-rn"><span class="std std-ref">Shared Slot</span></a>)</p></li>
-<li><p>phb4 capi (i.e. CAPI2): Enable capi mode for PHB4 (see <a class="reference internal" href="#capi2-5-7-rc1-rn"><span class="std std-ref">CAPI on PHB4</span></a>)</p></li>
+<li>In Memory Counters (IMC) (See <a class="reference internal" href="../imc.html#imc"><span class="std std-ref">OPAL/Skiboot In-Memory Collection (IMC) interface Documentation</span></a> for details)</li>
+<li>phb4: Activate shared PCI slot on witherspoon (see <a class="reference internal" href="#shared-slot-5-7-rc1-rn"><span class="std std-ref">Shared Slot</span></a>)</li>
+<li>phb4 capi (i.e. CAPI2): Enable capi mode for PHB4 (see <a class="reference internal" href="#capi2-5-7-rc1-rn"><span class="std std-ref">CAPI on PHB4</span></a>)</li>
</ul>
<p>New feature for IBM FSP based systems:</p>
<ul>
-<li><p>fsp/tpo: Provide support for disabling TPO alarm</p>
+<li><p class="first">fsp/tpo: Provide support for disabling TPO alarm</p>
<p>This patch adds support for disabling a preconfigured
Timed-Power-On(TPO) alarm on FSP based systems. Presently once a TPO alarm
is configured from the kernel it will be triggered even if its
@@ -92,15 +93,15 @@ opal to disable TPO alarm.</p>
<p>This release includes the first support for POWER9 DD2 chips. Future releases
will likely contain more bug fixes, this release has booted on real hardware.</p>
<ul>
-<li><p>hdata: Reserve Trace Areas</p>
+<li><p class="first">hdata: Reserve Trace Areas</p>
<p>When hostboot is configured to setup in memory tracing it will reserve
some memory for use by the hardware tracing facility. We need to mark
these areas as off limits to the operating system and firmware.</p>
</li>
-<li><p>hdata: Make out-of-range idata print at PR_DEBUG</p>
+<li><p class="first">hdata: Make out-of-range idata print at PR_DEBUG</p>
<p>Some fields just aren’t populated on some systems.</p>
</li>
-<li><p>hdata: Ignore unnamed memory reservations.</p>
+<li><p class="first">hdata: Ignore unnamed memory reservations.</p>
<p>Hostboot should name any and all memory reservations that it provides.
Currently some hostboots export a broken reservation covering the first
256MB of memory and this causes the system to crash at boot due to an
@@ -109,19 +110,19 @@ region (which covers the first 768MB of memory).</p>
<p>According to the hostboot team unnamed reservations are invalid and can
be ignored.</p>
</li>
-<li><p>hdata: Check the Host I2C devices array version</p>
+<li><p class="first">hdata: Check the Host I2C devices array version</p>
<p>Currently this is not populated on FSP machines which causes some
obnoxious errors to appear in the boot log. We also only want to
parse version 1 of this structure since future versions will completely
change the array item format.</p>
</li>
-<li><p>Ensure P9 DD1 workarounds apply only to Nimbus</p>
+<li><p class="first">Ensure P9 DD1 workarounds apply only to Nimbus</p>
<p>The workarounds for P9 DD1 are only needed for Nimbus. P9 Cumulus will
be DD1 but don’t need these same workarounds.</p>
<p>This patch ensures the P9 DD1 workarounds only apply to Nimbus. It
also renames some things to make clear what’s what.</p>
</li>
-<li><p>cpu: Cleanup AMR and IAMR when re-initializing CPUs</p>
+<li><p class="first">cpu: Cleanup AMR and IAMR when re-initializing CPUs</p>
<p>There’s a bug in current Linux kernels leaving crap in those registers
accross kexec and not sanitizing them on boot. This breaks kexec under
some circumstances (such as booting a hash kernel from a radix one
@@ -133,10 +134,10 @@ and shouldn’t have adverse effects.</p>
well such as restoring some other SPRs to their default value in
the future.</p>
</li>
-<li><p>Set POWER9 RPR SPR to 0x00000103070F1F3F. Same value as P8.</p>
+<li><p class="first">Set POWER9 RPR SPR to 0x00000103070F1F3F. Same value as P8.</p>
<p>Without this, thread priorities inside a core don’t work.</p>
</li>
-<li><p>cpu: Support setting HID[RADIX] and set it by default on P9</p>
+<li><p class="first">cpu: Support setting HID[RADIX] and set it by default on P9</p>
<p>This adds new opal_reinit_cpus() flags to setup radix or hash
mode in HID[8] on POWER9.</p>
<p>By default HID[8] will be set. On P9 DD1.0, Linux will change
@@ -146,16 +147,17 @@ will work.</p>
<p>Newer kernels built for hash will call this to clear the HID bit
and thus get the full size of the TLB as an optimization.</p>
</li>
-<li><p>Add “cleanup_global_tlb” for P9 and later</p>
+<li><p class="first">Add “cleanup_global_tlb” for P9 and later</p>
<p>Uses broadcast TLBIE’s to cleanup the TLB on all cores and on
the nest MMU</p>
</li>
-<li><p>xive: DD2.0 updates</p>
+<li><p class="first">xive: DD2.0 updates</p>
<p>Add support for StoreEOI, fix StoreEOI MMIO offset in ESB page,
and other cleanups</p>
</li>
-<li><p>Update default TSCR value for P9 as recommended by HW folk.</p></li>
-<li><p>xive: Fix initialisation of xive_cpu_state struct</p>
+<li><p class="first">Update default TSCR value for P9 as recommended by HW folk.</p>
+</li>
+<li><p class="first">xive: Fix initialisation of xive_cpu_state struct</p>
<p>When using XIVE emulation with DEBUG=1, we run into crashes in log_add()
due to the xive_cpu_state-&gt;log_pos being uninitialised (and thus, with
DEBUG enabled, initialised to the poison value of 0x99999999).</p>
@@ -167,11 +169,11 @@ DEBUG enabled, initialised to the poison value of 0x99999999).</p>
enabled and change CPU frequencies. Doing so does require other firmware
components to also support this (otherwise the frequency will not be set).</p>
<ul>
-<li><p>occ: Skip setting cores to nominal frequency in P9</p>
+<li><p class="first">occ: Skip setting cores to nominal frequency in P9</p>
<p>In P9, once OCC is up, it is supposed to setup the cores to nominal
frequency. So skip this step in OPAL.</p>
</li>
-<li><p>occ: Fix Pstate ordering for P9</p>
+<li><p class="first">occ: Fix Pstate ordering for P9</p>
<p>In P9 the pstate values are positive. They are continuous set of
unsigned integers [0 to +N] where Pmax is 0 and Pmin is N. The
linear ordering of pstates for P9 has changed compared to P8.
@@ -180,7 +182,7 @@ is 0 and Pmin is -N. This patch adds helper routines to abstract
pstate comparison with pmax and adds sanity pstate limit checks.
This patch also fixes pstate arithmetic by using labs().</p>
</li>
-<li><p>p8-i2c: occ: Add support for OCC to use I2C engines</p>
+<li><p class="first">p8-i2c: occ: Add support for OCC to use I2C engines</p>
<p>This patch adds support to share the I2C engines with host and OCC.
OCC uses I2C engines to read DIMM temperatures and to communicate with
GPU. OCC Flag register is used for locking between host and OCC. Host
@@ -192,20 +194,20 @@ an interrupt to indicate the change in ownership.</p>
<div class="section" id="opal-prd-prd">
<h3>opal-prd/PRD<a class="headerlink" href="#opal-prd-prd" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>opal-prd: Handle SBE passthrough message passing</p>
+<li><p class="first">opal-prd: Handle SBE passthrough message passing</p>
<p>This patch adds support to send SBE pass through command to HBRT.</p>
</li>
-<li><p>SBE: Add passthrough command support</p>
+<li><p class="first">SBE: Add passthrough command support</p>
<p>SBE sends passthrough command. We have to capture this interrupt and
send event to HBRT via opal-prd (user space daemon).</p>
</li>
-<li><p>opal-prd: hook up reset_pm_complex</p>
+<li><p class="first">opal-prd: hook up reset_pm_complex</p>
<p>This change provides the facility to invoke HBRT’s reset_pm_complex, in
the same manner is done with process_occ_reset previously.</p>
<p>We add a control command for <cite>opal-prd pm-complex reset</cite>, which is just
an alias for occ_reset at this stage.</p>
</li>
-<li><p>prd: Implement firmware side of opaque PRD channel</p>
+<li><p class="first">prd: Implement firmware side of opaque PRD channel</p>
<p>This change introduces the firmware side of the opaque HBRT &lt;–&gt; OPAL
message channel. We define a base message format to be shared with HBRT
(in include/prd-fw-msg.h), and allow firmware requests and responses to
@@ -213,27 +215,28 @@ be sent over this channel.</p>
<p>We don’t currently have any notifications defined, so have nothing to do
for firmware_notify() at this stage.</p>
</li>
-<li><p>opal-prd: Add firmware_request &amp; firmware_notify implementations</p>
+<li><p class="first">opal-prd: Add firmware_request &amp; firmware_notify implementations</p>
<p>This change adds the implementation of firmware_request() and
firmware_notify(). To do this, we need to add a message queue, so that
we can properly handle out-of-order messages coming from firmware.</p>
</li>
-<li><p>opal-prd: Add support for variable-sized messages</p>
+<li><p class="first">opal-prd: Add support for variable-sized messages</p>
<p>With the introductuion of the opaque firmware channel, we want to
support variable-sized messages. Rather than expecting to read an
entire â€struct opal_prd_msg’ in one read() call, we can split this
over mutiple reads, potentially expanding our message buffer.</p>
</li>
-<li><p>opal-prd: Sync hostboot interfaces with HBRT</p>
+<li><p class="first">opal-prd: Sync hostboot interfaces with HBRT</p>
<p>This change adds new callbacks defined for p9, and the base thunks for
the added calls.</p>
</li>
-<li><p>opal-prd: interpret log level prefixes from HBRT</p>
+<li><p class="first">opal-prd: interpret log level prefixes from HBRT</p>
<p>Interpret the (optional) *_MRK log prefixes on HBRT messages, and set
the syslog log priority to suit.</p>
</li>
-<li><p>opal-prd: Add occ reset to usage text</p></li>
-<li><p>opal-prd: allow different chips for occ control actions</p>
+<li><p class="first">opal-prd: Add occ reset to usage text</p>
+</li>
+<li><p class="first">opal-prd: allow different chips for occ control actions</p>
<p>The <cite>occ reset</cite> and <cite>occ error</cite> actions can both take a chip id
argument, but we’re currently just using zero. This change changes the
control message format to pass the chip ID from the control process to
@@ -244,20 +247,20 @@ the opal-prd daemon.</p>
<div class="section" id="pci-phb4">
<h3>PCI/PHB4<a class="headerlink" href="#pci-phb4" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>phb4: Fix number of index bits in IODA tables</p>
+<li><p class="first">phb4: Fix number of index bits in IODA tables</p>
<p>On PHB4 the number of index bits in the IODA table address register
was bumped to 10 bits to accomodate for 1024 MSIs and 1024 TVEs (DD2).</p>
<p>However our macro only defined the field to be 9 bits, thus causing
“interesting” behaviours on some systems.</p>
</li>
-<li><p>phb4: Harden init with bad PHBs</p>
+<li><p class="first">phb4: Harden init with bad PHBs</p>
<p>Currently if we read all 1’s from the EEH or IRQ capabilities, we end
up train wrecking on some other random code (eg. an assert() in xive).</p>
<p>This hardens the PHB4 code to look for these bad reads and more
gracefully fails the init for that PHB alone. This allows the rest of
the system to boot and ignore those bad PHBs.</p>
</li>
-<li><p>phb4 capi (i.e. CAPI2): Handle HMI events</p>
+<li><p class="first">phb4 capi (i.e. CAPI2): Handle HMI events</p>
<p>Find the CAPP on the chip associated with the HMI event for PHB4.
The recovery mode (re-initialization of the capp, resume of functional
operations) is only available with P9 DD2. A new patch will be provided
@@ -265,7 +268,7 @@ to support this feature.</p>
</li>
</ul>
<ul id="capi2-5-7-rc1-rn">
-<li><p>phb4 capi (i.e. CAPI2): Enable capi mode for PHB4</p>
+<li><p class="first">phb4 capi (i.e. CAPI2): Enable capi mode for PHB4</p>
<p>Enable the Coherently attached processor interface. The PHB is used as
a CAPI interface.
CAPI Adapters can be connected to either PEC0 or PEC2. Single port
@@ -274,7 +277,7 @@ Adapter can be only connected to PEC2
* CAPP0 attached to PHB0(PEC0 - single port)
* CAPP1 attached to PHB3(PEC2 - single or dual port)</p>
</li>
-<li><p>hw/phb4: Rework phb4_get_presence_state()</p>
+<li><p class="first">hw/phb4: Rework phb4_get_presence_state()</p>
<p>There are two issues in current implementation: It should return errcode
visibile to Linux, which has prefix OPAL_*. The code isn’t very obvious.</p>
<p>This returns OPAL_HARDWARE when the PHB is broken. Otherwise, OPAL_SUCCESS
@@ -282,28 +285,29 @@ is always returned. In the mean while, It refactors the code to make it
obvious: OPAL_PCI_SLOT_PRESENT is returned when the presence signal (low active)
or PCIe link is active. Otherwise, OPAL_PCI_SLOT_EMPTY is returned.</p>
</li>
-<li><p>phb4: Error injection for config space</p>
+<li><p class="first">phb4: Error injection for config space</p>
<p>Implement CFG (config space) error injection.</p>
<p>This works the same as PHB3. MMIO and DMA error injection require a
rewrite, so they’re unsupported for now.</p>
<p>While it’s not feature complete, this at least provides an easy way to
inject an error that will trigger EEH.</p>
</li>
-<li><p>phb4: Error clear implementation</p></li>
-<li><p>phb4: Mask link down errors during reset</p>
+<li><p class="first">phb4: Error clear implementation</p>
+</li>
+<li><p class="first">phb4: Mask link down errors during reset</p>
<p>During a hot reset the PCI link will drop, so we need to mask link down
events to prevent unnecessary errors.</p>
</li>
-<li><p>phb4: Implement root port initialization</p>
+<li><p class="first">phb4: Implement root port initialization</p>
<p>phb4_root_port_init() was a NOP before, so fix that.</p>
</li>
-<li><p>phb4: Complete reset implementation</p>
+<li><p class="first">phb4: Complete reset implementation</p>
<p>This implements complete reset (creset) functionality for POWER9 DD1.</p>
<p>Only partially tested and contends with some DD1 errata, but it’s a start.</p>
</li>
</ul>
<ul id="shared-slot-5-7-rc1-rn">
-<li><p>phb4: Activate shared PCI slot on witherspoon</p>
+<li><p class="first">phb4: Activate shared PCI slot on witherspoon</p>
<p>Witherspoon systems come with a â€shared’ PCI slot: physically, it
looks like a x16 slot, but it’s actually two x8 slots connected to two
PHBs of two different chips. Taking advantage of it requires some
@@ -324,12 +328,13 @@ then the presence bit of the second slot is not set, so this patch
does nothing. The x8 (or less) adapter should work like on any other
physical slot.</p>
</li>
-<li><p>phb4: Block D-state power management on direct slots</p>
+<li><p class="first">phb4: Block D-state power management on direct slots</p>
<p>As current revisions of PHB4 don’t properly handle the resulting
L1 link transition.</p>
</li>
-<li><p>phb4: Call pci config filters</p></li>
-<li><p>phb4: Mask out write-1-to-clear registers in RC cfg</p>
+<li><p class="first">phb4: Call pci config filters</p>
+</li>
+<li><p class="first">phb4: Mask out write-1-to-clear registers in RC cfg</p>
<p>The root complex config space only supports 4-byte accesses. Thus, when
the client requests a smaller size write, we do a read-modify-write to
the register.</p>
@@ -340,15 +345,16 @@ write back those 1’s and clear the corresponding bit.</p>
<p>This avoids it by masking out those magic bits from the “old” value
read from the register.</p>
</li>
-<li><p>phb4: Properly mask out link down errors during reset</p></li>
-<li><p>phb3/4: Silence a useless warning</p>
+<li><p class="first">phb4: Properly mask out link down errors during reset</p>
+</li>
+<li><p class="first">phb3/4: Silence a useless warning</p>
<p>PHB’s don’t have base location codes on non-FSP systems and it’s
normal.</p>
</li>
-<li><p>phb4: Workaround bug in spec 053</p>
+<li><p class="first">phb4: Workaround bug in spec 053</p>
<p>Wait for DLP PGRESET to clear <em>after</em> lifting the PCIe core reset</p>
</li>
-<li><p>phb4: DD2.0 updates</p>
+<li><p class="first">phb4: DD2.0 updates</p>
<p>Support StoreEOI, full complements of PEs (twice as big TVT)
and other updates.</p>
<p>Also renumber init steps to match spec 063</p>
@@ -359,56 +365,57 @@ and other updates.</p>
<h3>NPU2<a class="headerlink" href="#npu2" title="Permalink to this headline">¶</a></h3>
<p>Note that currently NPU2 support is limited to POWER9 DD1 hardware.</p>
<ul>
-<li><p>platforms/astbmc/witherspoon.c: Add NPU2 slot mappings</p>
+<li><p class="first">platforms/astbmc/witherspoon.c: Add NPU2 slot mappings</p>
<p>For NVLink2 to function PCIe devices need to be associated with the right
NVLinks. This association is supposed to be passed down to Skiboot via HDAT but
those fields are still not correctly filled out. To work around this we add slot
tables for the NVLinks similar to what we have for P8+.</p>
</li>
-<li><p>hw/npu2.c: Fix device aperture calculation</p>
+<li><p class="first">hw/npu2.c: Fix device aperture calculation</p>
<p>The POWER9 NPU2 implements an address compression scheme to compress 56-bit P9
physical addresses to 47-bit GPU addresses. System software needs to know both
addresses, unfortunately the calculation of the compressed address was
incorrect. Fix it here.</p>
</li>
-<li><p>hw/npu2.c: Change MCD BAR allocation order</p>
+<li><p class="first">hw/npu2.c: Change MCD BAR allocation order</p>
<p>MCD BARs need to be correctly aligned to the size of the region. As GPU
memory is allocated from the top of memory down we should start allocating
from the highest GPU memory address to the lowest to ensure correct
alignment.</p>
</li>
-<li><p>NPU2: Add flag to nvlink config space indicating DL reset state</p>
+<li><p class="first">NPU2: Add flag to nvlink config space indicating DL reset state</p>
<p>Device drivers need to be able to determine if the DL is out of reset or
not so they can safely probe to see if links have already been trained.
This patch adds a flag to the vendor specific config space indicating if
the DL is out of reset.</p>
</li>
-<li><p>hw/npu2.c: Hardcode MSR_SF when setting up npu XTS contexts</p>
+<li><p class="first">hw/npu2.c: Hardcode MSR_SF when setting up npu XTS contexts</p>
<p>We don’t support anything other than 64-bit mode for address translations so we
can safely hardcode it.</p>
</li>
-<li><p>hw/npu2-hw-procedures.c: Add nvram option to override zcal calculations</p>
+<li><p class="first">hw/npu2-hw-procedures.c: Add nvram option to override zcal calculations</p>
<p>In some rare cases the zcal state machine may fail and flag an error. According
to hardware designers it is sometimes ok to ignore this failure and use nominal
values for the calculations. In this case we add a nvram variable
(nv_zcal_override) which will cause skiboot to ignore the failure and use the
nominal value specified in nvram.</p>
</li>
-<li><p>npu2: Fix npu2_{read,write}_4b()</p>
+<li><p class="first">npu2: Fix npu2_{read,write}_4b()</p>
<p>When writing or reading 4-byte values, we need to use the upper half of
the 64-bit SCOM register.</p>
<p>Fix npu2_{read,write}_4b() and their callers to use uint32_t, and
appropriately shift the value being written or returned.</p>
</li>
-<li><p>hw/npu2.c: Fix opal_npu_map_lpar to search for existing BDF</p></li>
-<li><p>hw/npu2-hw-procedures.c: Fix running of zcal procedure</p>
+<li><p class="first">hw/npu2.c: Fix opal_npu_map_lpar to search for existing BDF</p>
+</li>
+<li><p class="first">hw/npu2-hw-procedures.c: Fix running of zcal procedure</p>
<blockquote>
<div><p>The zcal procedure should only be run once per obus (ie. once per group of 3
links). Clean up the code and fix the potential buffer overflow due to a typo.
Also updates the zcal settings to their proper values.</p>
</div></blockquote>
</li>
-<li><p>hw/npu2.c: Add memory coherence directory programming</p>
+<li><p class="first">hw/npu2.c: Add memory coherence directory programming</p>
<p>The memory coherence directory (MCD) needs to know which system memory addresses
belong to the GPU. This amounts to setting a BAR and a size in the MCD to cover
the addresses assigned to each of the GPUs. To ease assignment we assume GPUs
@@ -420,20 +427,20 @@ are assigned memory in a contiguous block per chip.</p>
<div class="section" id="pflash-libflash">
<h2>pflash/libflash<a class="headerlink" href="#pflash-libflash" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>libflash/libffs: Zero checksum words</p>
+<li><p class="first">libflash/libffs: Zero checksum words</p>
<p>On writing ffs entries to flash libffs doesn’t zero checksum words
before calculating the checksum across the entire structure. This causes
an inaccurate calculation of the checksum as it may calculate a checksum
on non-zero checksum bytes.</p>
</li>
-<li><p>libffs: Fix ffs_lookup_part() return value</p>
+<li><p class="first">libffs: Fix ffs_lookup_part() return value</p>
<p>It would return success when the part wasn’t found</p>
</li>
-<li><p>libflash/libffs: Correctly update the actual size of the partition</p>
+<li><p class="first">libflash/libffs: Correctly update the actual size of the partition</p>
<p>libffs has been updating FFS partition information in the wrong place
which leads to incomplete erases and corruption.</p>
</li>
-<li><p>libflash: Initialise entries list earlier</p>
+<li><p class="first">libflash: Initialise entries list earlier</p>
<p>In the bail-out path we call ffs_close() to tear down the partially
initialised ffs_handle. ffs_close() expects the entries list to be
initialised so we need to do that earlier to prevent a null pointer
@@ -446,7 +453,7 @@ dereference.</p>
<p>mbox-flash is the emerging standard way of talking to host PNOR flash
on POWER9 systems.</p>
<ul>
-<li><p>libflash/mbox-flash: Implement MARK_WRITE_ERASED mbox call</p>
+<li><p class="first">libflash/mbox-flash: Implement MARK_WRITE_ERASED mbox call</p>
<p>Version two of the mbox-flash protocol defines a new command:
MARK_WRITE_ERASED.</p>
<p>This command provides a simple way to mark a region of flash as all 0xff
@@ -456,7 +463,7 @@ the BMC to deal with the flash correctly, however in v1 it was ambiguous
what a client should do if the flash should be erased but not actually
written to. This allows of a optimal path to resolve this problem.</p>
</li>
-<li><p>libflash/mbox-flash: Update to V2 of the protocol</p>
+<li><p class="first">libflash/mbox-flash: Update to V2 of the protocol</p>
<p>Updated version 2 of the protocol can be found at:
<a class="reference external" href="https://github.com/openbmc/mboxbridge/blob/master/Documentation/mbox_protocol.md">https://github.com/openbmc/mboxbridge/blob/master/Documentation/mbox_protocol.md</a></p>
<p>This commit changes mbox-flash such that it will preferentially talk
@@ -467,7 +474,7 @@ consistency and usability.
Version two includes more attention bits - these are now dealt with at a
simple level.</p>
</li>
-<li><p>libflash/mbox-flash: Implement MARK_WRITE_ERASED mbox call</p>
+<li><p class="first">libflash/mbox-flash: Implement MARK_WRITE_ERASED mbox call</p>
<p>Version two of the mbox-flash protocol defines a new command:
MARK_WRITE_ERASED.</p>
<p>This command provides a simple way to mark a region of flash as all 0xff
@@ -477,7 +484,7 @@ the BMC to deal with the flash correctly, however in v1 it was ambiguous
what a client should do if the flash should be erased but not actually
written to. This allows of a optimal path to resolve this problem.</p>
</li>
-<li><p>libflash/mbox-flash: Update to V2 of the protocol</p>
+<li><p class="first">libflash/mbox-flash: Update to V2 of the protocol</p>
<p>Updated version 2 of the protocol can be found at:
<a class="reference external" href="https://github.com/openbmc/mboxbridge/blob/master/Documentation/mbox_protocol.md">https://github.com/openbmc/mboxbridge/blob/master/Documentation/mbox_protocol.md</a></p>
<p>This commit changes mbox-flash such that it will preferentially talk
@@ -488,7 +495,7 @@ consistency and usability.
Version two includes more attention bits - these are now dealt with at a
simple level.</p>
</li>
-<li><p>hw/lpc-mbox: Use message registers for interrupts</p>
+<li><p class="first">hw/lpc-mbox: Use message registers for interrupts</p>
<p>Currently the BMC raises the interrupt using the BMC control register.
It does so on all accesses to the 16 â€data’ registers meaning that when
the BMC only wants to set the ATTN (on which we have interrupts enabled)
@@ -501,33 +508,37 @@ interrupts on the protocol defined â€response’ data byte.</p>
<div class="section" id="general-fixes">
<h2>General fixes<a class="headerlink" href="#general-fixes" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Reduce log level on non-error log messages</p>
+<li><p class="first">Reduce log level on non-error log messages</p>
<p>90% of what we print isn’t useful to a normal user. This
dramatically reduces the amount of messages printed by
OPAL in normal circumstances.</p>
</li>
-<li><p>init: Silence messages and call ourselves “OPAL”</p></li>
-<li><p>psi: Switch to ESB mode later</p>
+<li><p class="first">init: Silence messages and call ourselves “OPAL”</p>
+</li>
+<li><p class="first">psi: Switch to ESB mode later</p>
<p>There’s an errata, if we switch to ESB mode before setting up
the various ESB mode related registers, a pending interrupts
can go wrong.</p>
</li>
-<li><p>lpc: Enable “new” SerIRQ mode</p></li>
-<li><p>hw/ipmi/ipmi-sel: missing newline in prlog warning</p></li>
-<li><p>p8-i2c OCC lock: fix locking in p9_i2c_bus_owner_change</p></li>
-<li><p>Convert important polling loops to spin at lowest SMT priority</p>
+<li><p class="first">lpc: Enable “new” SerIRQ mode</p>
+</li>
+<li><p class="first">hw/ipmi/ipmi-sel: missing newline in prlog warning</p>
+</li>
+<li><p class="first">p8-i2c OCC lock: fix locking in p9_i2c_bus_owner_change</p>
+</li>
+<li><p class="first">Convert important polling loops to spin at lowest SMT priority</p>
<p>The pattern of calling cpu_relax() inside a polling loop does
not suit the powerpc SMT priority instructions. Prefrred is to
set a low priority then spin until break condition is reached,
then restore priority.</p>
</li>
-<li><p>Improve cpu_idle when PM is disabled</p>
+<li><p class="first">Improve cpu_idle when PM is disabled</p>
<p>Split cpu_idle() into cpu_idle_delay() and cpu_idle_job() rather than
requesting the idle type as a function argument. Have those functions
provide a default polling (non-PM) implentation which spin at the
lowest SMT priority.</p>
</li>
-<li><p>core/fdt: Always add a reserve map</p>
+<li><p class="first">core/fdt: Always add a reserve map</p>
<p>Currently we skip adding the reserved ranges block to the generated
FDT blob if we are excluding the root node. This can result in a DTB
that dtc will barf on because the reserved memory ranges overlap with
@@ -575,7 +586,7 @@ the start of the dt_struct block. As an example:</p>
</pre></div>
</div>
</li>
-<li><p>hw/lpc-mbox: Use message registers for interrupts</p>
+<li><p class="first">hw/lpc-mbox: Use message registers for interrupts</p>
<p>Currently the BMC raises the interrupt using the BMC control register.
It does so on all accesses to the 16 â€data’ registers meaning that when
the BMC only wants to set the ATTN (on which we have interrupts enabled)
@@ -588,15 +599,15 @@ interrupts on the protocol defined â€response’ data byte.</p>
<div class="section" id="pci">
<h2>PCI<a class="headerlink" href="#pci" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>pci: Wait 20ms before checking presence detect on PCIe</p>
+<li><p class="first">pci: Wait 20ms before checking presence detect on PCIe</p>
<p>As the PHB presence logic has a debounce timer that can take
a while to settle.</p>
</li>
-<li><p>phb3+iov: Fixup support for config space filters</p>
+<li><p class="first">phb3+iov: Fixup support for config space filters</p>
<p>The filter should be called before the HW access and its
return value control whether to perform the access or not</p>
</li>
-<li><p>core/pci: Use PCI slot’s power facality in pci_enable_bridge()</p>
+<li><p class="first">core/pci: Use PCI slot’s power facality in pci_enable_bridge()</p>
<p>The current implmentation has incorrect assumptions: there is
always a PCI slot associated with root port and PCIe switch
downstream port and all of them are capable to change its
@@ -608,17 +619,17 @@ I2C slave devices used to control the power states on Tuleta.</p>
<p>In order to use the PCI slot’s methods to manage the power
states, this does:</p>
<ul class="simple">
-<li><p>Introduce PCI_SLOT_FLAG_ENFORCE, indicates the request operation
-is enforced to be applied.</p></li>
-<li><p>pci_enable_bridge() is split into 3 functions: pci_bridge_power_on()
+<li>Introduce PCI_SLOT_FLAG_ENFORCE, indicates the request operation
+is enforced to be applied.</li>
+<li>pci_enable_bridge() is split into 3 functions: pci_bridge_power_on()
to power it on; pci_enable_bridge() as a place holder and
-pci_bridge_wait_link() to wait the downstream link to come up.</p></li>
-<li><p>In pci_bridge_power_on(), the PCI slot’s specific power management
+pci_bridge_wait_link() to wait the downstream link to come up.</li>
+<li>In pci_bridge_power_on(), the PCI slot’s specific power management
methods are used if there is a PCI slot associated with the PCIe
-switch downstream port or root port.</p></li>
+switch downstream port or root port.</li>
</ul>
</li>
-<li><p>platforms/astbmc/slots.c: Allow comparison of bus numbers when matching slots</p>
+<li><p class="first">platforms/astbmc/slots.c: Allow comparison of bus numbers when matching slots</p>
<p>When matching devices on multiple down stream PLX busses we need to compare more
than just the device-id of the PCIe BDFN, so increase the mask to do so.</p>
</li>
@@ -627,8 +638,9 @@ than just the device-id of the PCIe BDFN, so increase the mask to do so.</p>
<div class="section" id="tests-and-simulators">
<h2>Tests and simulators<a class="headerlink" href="#tests-and-simulators" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>boot-tests: add OpenBMC support</p></li>
-<li><p>boot_test.sh: Add SMC BMC support</p>
+<li><p class="first">boot-tests: add OpenBMC support</p>
+</li>
+<li><p class="first">boot_test.sh: Add SMC BMC support</p>
<p>Your BMC needs a special debug image flashed to use this, the exact
image and methods aren’t something I can publish here, but if you work
for IBM or SMC you can find out from the right sources.</p>
@@ -642,8 +654,9 @@ we don’t publicise too broadly (because Security Through Obscurity is
and we can’t scp, but we can anonymous rsync!</p>
<p>You also need a pflash binary to copy over.</p>
</li>
-<li><p>hdata_to_dt: Add PVR overrides to the usage text</p></li>
-<li><p>mambo: Add a reservation for the initramfs</p>
+<li><p class="first">hdata_to_dt: Add PVR overrides to the usage text</p>
+</li>
+<li><p class="first">mambo: Add a reservation for the initramfs</p>
<p>On most systems the initramfs is loaded inside the part of memory
reserved for the OS [0x0-0x30000000] and skiboot will never touch it.
On mambo it’s loaded at 0x80000000 and if you’re unlucky skiboot can
@@ -652,43 +665,43 @@ allocate over the top of it and corrupt the initramfs blob.</p>
memory since it’s marked as reserved, but the kernel might also free it
anyway.</p>
</li>
-<li><p>mambo: Update P9 PVR to reflect Scale out 24 core chips</p>
+<li><p class="first">mambo: Update P9 PVR to reflect Scale out 24 core chips</p>
<p>The P9 PVR bits 48:51 don’t indicate a revision but instead different
configurations. From BookIV we have:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 17%" />
-<col style="width: 83%" />
+<col width="17%" />
+<col width="83%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Bits</p></th>
-<th class="head"><p>Configuration</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Bits</th>
+<th class="head">Configuration</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>0</p></td>
-<td><p>Scale out 12 cores</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>0</td>
+<td>Scale out 12 cores</td>
</tr>
-<tr class="row-odd"><td><p>1</p></td>
-<td><p>Scale out 24 cores</p></td>
+<tr class="row-odd"><td>1</td>
+<td>Scale out 24 cores</td>
</tr>
-<tr class="row-even"><td><p>2</p></td>
-<td><p>Scale up 12 cores</p></td>
+<tr class="row-even"><td>2</td>
+<td>Scale up 12 cores</td>
</tr>
-<tr class="row-odd"><td><p>3</p></td>
-<td><p>Scale up 24 cores</p></td>
+<tr class="row-odd"><td>3</td>
+<td>Scale up 24 cores</td>
</tr>
</tbody>
</table>
<p>Skiboot will mostly the use “Scale out 24 core” configuration
(ie. SMT4 not SMT8) so reflect this in mambo.</p>
</li>
-<li><p>core: Move enable_mambo_console() into chip initialisation</p>
+<li><p class="first">core: Move enable_mambo_console() into chip initialisation</p>
<p>Rather than having a wart in main_cpu_entry() that initialises the mambo
console, we can move it into init_chips() which is where we discover that we’re
on mambo.</p>
</li>
-<li><p>mambo: Create multiple chips when we have multiple CPUs</p>
+<li><p class="first">mambo: Create multiple chips when we have multiple CPUs</p>
<p>Currently when we boot mambo with multiple CPUs, we create multiple CPU nodes in
the device tree, and each claims to be on a separate chip.</p>
<p>However we don’t create multiple xscom nodes, which means skiboot only knows
@@ -703,7 +716,7 @@ separate chip created. This then enables Linux to see multiple chips:</p>
</pre></div>
</div>
</li>
-<li><p>chip: Add support for discovering chips on mambo</p>
+<li><p class="first">chip: Add support for discovering chips on mambo</p>
<p>Currently the only way for skiboot to discover chips is by looking for xscom
nodes. But on mambo it’s currently not possible to create multiple xscom nodes,
which means we can only simulate a single chip system.</p>
@@ -712,18 +725,18 @@ node, and use that to instantiate multiple chips.</p>
<p>Add a check in init_chip() that we’re not clobbering an already initialised
chip, now that we have two places that initialise chips.</p>
</li>
-<li><p>mambo: Make xscom claim to be DD 2.0</p>
+<li><p class="first">mambo: Make xscom claim to be DD 2.0</p>
<p>In the mambo tcl we set the CPU version to DD 2.0, because mambo is not
bug compatible with DD 1.</p>
<p>But in xscom_read_cfam_chipid() we have a hard coded value, to work
around the lack of the f000f register, which claims to be P9 DD 1.0.</p>
<p>This doesn’t seem to cause crashes or anything, but at boot we do see:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">0.003893084</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">XSCOM</span><span class="p">:</span> <span class="n">chip</span> <span class="mh">0x0</span> <span class="n">at</span> <span class="mh">0x1a0000000000</span> <span class="p">[</span><span class="n">P9N</span> <span class="n">DD1</span><span class="mf">.0</span><span class="p">]</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">0.003893084</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">XSCOM</span><span class="p">:</span> <span class="n">chip</span> <span class="mh">0x0</span> <span class="n">at</span> <span class="mh">0x1a0000000000</span> <span class="p">[</span><span class="n">P9N</span> <span class="n">DD1</span><span class="o">.</span><span class="mi">0</span><span class="p">]</span>
</pre></div>
</div>
<p>So fix it to claim that the xscom is also DD 2.0 to match the CPU.</p>
</li>
-<li><p>mambo: Match whole string when looking up symbols with linsym/skisym</p>
+<li><p class="first">mambo: Match whole string when looking up symbols with linsym/skisym</p>
<p>linsym/skisym use a regex to match the symbol name, and accepts a
partial match against the entry in the symbol map, which can lead to
somewhat confusing results, eg:</p>
@@ -742,8 +755,9 @@ that the symbol has to match against the whole entry, eg:</p>
</pre></div>
</div>
</li>
-<li><p>Disable nap on P8 Mambo, public release has bugs</p></li>
-<li><p>mambo: Allow loading multiple CPIOs</p>
+<li><p class="first">Disable nap on P8 Mambo, public release has bugs</p>
+</li>
+<li><p class="first">mambo: Allow loading multiple CPIOs</p>
<p>Currently we have support for loading a single CPIO and telling Linux to
use it as the initrd. But the Linux code actually supports having
multiple CPIOs contiguously in memory, between initrd-start and end, and
@@ -756,7 +770,7 @@ filenames, but we could make it space, colon, whatever. Or we could add
a new environment variable entirely. The code also supports trimming
whitespace from the values, so you can have “cpio1, cpio2”.</p>
</li>
-<li><p>hdata/test: Add memory reservations to hdata_to_dt</p>
+<li><p class="first">hdata/test: Add memory reservations to hdata_to_dt</p>
<p>Currently memory reservations are parsed, but since they are not
processed until mem_region_init() they don’t appear in the output
device tree blob. Several bugs have been found with memory reservations
@@ -769,14 +783,15 @@ dtb to appear in standard out.</p>
<div class="section" id="ibm-fsp-systems">
<h2>IBM FSP systems<a class="headerlink" href="#ibm-fsp-systems" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>FSP/CONSOLE: Fix possible NULL dereference</p></li>
-<li><p>platforms/ibm-fsp/firenze: Fix PCI slot power-off pattern</p>
+<li><p class="first">FSP/CONSOLE: Fix possible NULL dereference</p>
+</li>
+<li><p class="first">platforms/ibm-fsp/firenze: Fix PCI slot power-off pattern</p>
<p>When powering off the PCI slot, the corresponding bits should
be set to 0bxx00xx00 instead of 0bxx11xx11. Otherwise, the
specified PCI slot can’t be put into power-off state. Fortunately,
it didn’t introduce any side-effects so far.</p>
</li>
-<li><p>FSP/CONSOLE: Workaround for unresponsive ipmi daemon</p>
+<li><p class="first">FSP/CONSOLE: Workaround for unresponsive ipmi daemon</p>
<p>We use TCE mapped area to write data to console. Console header
(fsp_serbuf_hdr) is modified by both FSP and OPAL (OPAL updates
next_in pointer in fsp_serbuf_hdr and FSP updates next_out pointer).</p>
@@ -797,7 +812,7 @@ everything becomes normal.</p>
when cosole is full. Side effect of this patch is, we may endup dropping
latest console data. But better to drop console data than system hang.</p>
</li>
-<li><p>FSP: Set status field in response message for timed out message</p>
+<li><p class="first">FSP: Set status field in response message for timed out message</p>
<p>For timed out FSP messages, we set message status as “fsp_msg_timeout”.
But most FSP driver users (like surviellance) are ignoring this field.
They always look for FSP returned status value in callback function
@@ -815,19 +830,21 @@ response from FSP.</p>
receive response from FSP.</p>
<p>This patch fixes above issue by updating status field in response structure.</p>
</li>
-<li><p>FSP: Improve timeout message</p></li>
-<li><p>FSP/RTC: Fix possible FSP R/R issue in rtc write path</p></li>
-<li><p>hw/fsp/rtc: read/write cached rtc tod on fsp hir.</p>
+<li><p class="first">FSP: Improve timeout message</p>
+</li>
+<li><p class="first">FSP/RTC: Fix possible FSP R/R issue in rtc write path</p>
+</li>
+<li><p class="first">hw/fsp/rtc: read/write cached rtc tod on fsp hir.</p>
<p>Currently fsp-rtc reads/writes the cached RTC TOD on an fsp
reset. Use latest fsp_in_rr() function to properly read the cached rtc
value when fsp reset initiated by the hir.</p>
<p>Below is the kernel trace when we set hw clock, when hir process starts.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">1727.775824</span><span class="p">]</span> <span class="n">NMI</span> <span class="n">watchdog</span><span class="p">:</span> <span class="n">BUG</span><span class="p">:</span> <span class="n">soft</span> <span class="n">lockup</span> <span class="o">-</span> <span class="n">CPU</span><span class="c1">#57 stuck for 23s! [hwclock:7688]</span>
<span class="p">[</span> <span class="mf">1727.775856</span><span class="p">]</span> <span class="n">Modules</span> <span class="n">linked</span> <span class="ow">in</span><span class="p">:</span> <span class="n">vmx_crypto</span> <span class="n">ibmpowernv</span> <span class="n">ipmi_powernv</span> <span class="n">uio_pdrv_genirq</span> <span class="n">ipmi_devintf</span> <span class="n">powernv_op_panel</span> <span class="n">uio</span> <span class="n">ipmi_msghandler</span> <span class="n">powernv_rng</span> <span class="n">leds_powernv</span> <span class="n">ip_tables</span> <span class="n">x_tables</span> <span class="n">autofs4</span> <span class="n">ses</span> <span class="n">enclosure</span> <span class="n">scsi_transport_sas</span> <span class="n">crc32c_vpmsum</span> <span class="n">lpfc</span> <span class="n">ipr</span> <span class="n">tg3</span> <span class="n">scsi_transport_fc</span>
-<span class="p">[</span> <span class="mf">1727.775883</span><span class="p">]</span> <span class="n">CPU</span><span class="p">:</span> <span class="mi">57</span> <span class="n">PID</span><span class="p">:</span> <span class="mi">7688</span> <span class="n">Comm</span><span class="p">:</span> <span class="n">hwclock</span> <span class="n">Not</span> <span class="n">tainted</span> <span class="mf">4.10.0</span><span class="o">-</span><span class="mi">14</span><span class="o">-</span><span class="n">generic</span> <span class="c1">#16-Ubuntu</span>
+<span class="p">[</span> <span class="mf">1727.775883</span><span class="p">]</span> <span class="n">CPU</span><span class="p">:</span> <span class="mi">57</span> <span class="n">PID</span><span class="p">:</span> <span class="mi">7688</span> <span class="n">Comm</span><span class="p">:</span> <span class="n">hwclock</span> <span class="n">Not</span> <span class="n">tainted</span> <span class="mf">4.10</span><span class="o">.</span><span class="mi">0</span><span class="o">-</span><span class="mi">14</span><span class="o">-</span><span class="n">generic</span> <span class="c1">#16-Ubuntu</span>
<span class="p">[</span> <span class="mf">1727.775883</span><span class="p">]</span> <span class="n">task</span><span class="p">:</span> <span class="n">c000000fdfdc8400</span> <span class="n">task</span><span class="o">.</span><span class="n">stack</span><span class="p">:</span> <span class="n">c000000fdfef4000</span>
<span class="p">[</span> <span class="mf">1727.775884</span><span class="p">]</span> <span class="n">NIP</span><span class="p">:</span> <span class="n">c00000000090540c</span> <span class="n">LR</span><span class="p">:</span> <span class="n">c0000000000846f4</span> <span class="n">CTR</span><span class="p">:</span> <span class="mi">000000003006</span><span class="n">dd70</span>
-<span class="p">[</span> <span class="mf">1727.775885</span><span class="p">]</span> <span class="n">REGS</span><span class="p">:</span> <span class="n">c000000fdfef79a0</span> <span class="n">TRAP</span><span class="p">:</span> <span class="mi">0901</span> <span class="n">Not</span> <span class="n">tainted</span> <span class="p">(</span><span class="mf">4.10.0</span><span class="o">-</span><span class="mi">14</span><span class="o">-</span><span class="n">generic</span><span class="p">)</span>
+<span class="p">[</span> <span class="mf">1727.775885</span><span class="p">]</span> <span class="n">REGS</span><span class="p">:</span> <span class="n">c000000fdfef79a0</span> <span class="n">TRAP</span><span class="p">:</span> <span class="mi">0901</span> <span class="n">Not</span> <span class="n">tainted</span> <span class="p">(</span><span class="mf">4.10</span><span class="o">.</span><span class="mi">0</span><span class="o">-</span><span class="mi">14</span><span class="o">-</span><span class="n">generic</span><span class="p">)</span>
<span class="p">[</span> <span class="mf">1727.775886</span><span class="p">]</span> <span class="n">MSR</span><span class="p">:</span> <span class="mi">9000000000009033</span> <span class="o">&lt;</span><span class="n">SF</span><span class="p">,</span><span class="n">HV</span><span class="p">,</span><span class="n">EE</span><span class="p">,</span><span class="n">ME</span><span class="p">,</span><span class="n">IR</span><span class="p">,</span><span class="n">DR</span><span class="p">,</span><span class="n">RI</span><span class="p">,</span><span class="n">LE</span><span class="o">&gt;</span>
<span class="p">[</span> <span class="mf">1727.775889</span><span class="p">]</span> <span class="n">CR</span><span class="p">:</span> <span class="mi">28024442</span> <span class="n">XER</span><span class="p">:</span> <span class="mi">20000000</span>
<span class="p">[</span> <span class="mf">1727.775890</span><span class="p">]</span> <span class="n">CFAR</span><span class="p">:</span> <span class="n">c00000000008472c</span> <span class="n">SOFTE</span><span class="p">:</span> <span class="mi">1</span>
@@ -854,20 +871,20 @@ value when fsp reset initiated by the hir.</p>
<p>With this fix ran fsp hir torture testcase in the above test
which is working fine.</p>
</li>
-<li><p>occ: Set return variable to correct value</p>
+<li><p class="first">occ: Set return variable to correct value</p>
<p>When entering this section of code rc will be zero. If fsp_mkmsg() fails
the code responsible for printing an error message won’t be set.
Resetting rc should allow for the error case to trigger if fsp_mkmsg
fails.</p>
</li>
-<li><p>capp: Fix hang when CAPP microcode LID is missing on FSP machine</p>
+<li><p class="first">capp: Fix hang when CAPP microcode LID is missing on FSP machine</p>
<p>When the LID is absent, we fail early with an error from
start_preload_resource. In that case, capp_ucode_info.load_result
isn’t set properly causing a subsequent capp_lid_download() to
call wait_for_resource_loaded() on something that isn’t being
loaded, thus hanging.</p>
</li>
-<li><p>FSP: Add check to detect FSP R/R inside fsp_sync_msg()</p>
+<li><p class="first">FSP: Add check to detect FSP R/R inside fsp_sync_msg()</p>
<p>OPAL sends MBOX message to FSP and updates message state from fsp_msg_queued
-&gt; fsp_msg_sent. fsp_sync_msg() queues message and waits until we get response
from FSP. During FSP R/R we move outstanding MBOX messages from msgq to rr_queue
@@ -876,12 +893,13 @@ inflight message state.</p>
<p>In extreme croner case where we sent message to FSP via fsp_sync_msg() path
and FSP R/R happens before getting respose from FSP, then we will endup waiting
in fsp_sync_msg() until everything becomes normal.</p>
-<dl class="simple">
-<dt>This patch adds fsp_in_rr() check to fsp_sync_msg() and return error to caller</dt><dd><p>if FSP is in R/R.</p>
+<dl class="docutils">
+<dt>This patch adds fsp_in_rr() check to fsp_sync_msg() and return error to caller</dt>
+<dd><p class="first last">if FSP is in R/R.</p>
</dd>
</dl>
</li>
-<li><p>FSP: Add check to detect FSP R/R inside fsp_sync_msg()</p>
+<li><p class="first">FSP: Add check to detect FSP R/R inside fsp_sync_msg()</p>
<p>OPAL sends MBOX message to FSP and updates message state from fsp_msg_queued
-&gt; fsp_msg_sent. fsp_sync_msg() queues message and waits until we get response
from FSP. During FSP R/R we move outstanding MBOX messages from msgq to rr_queue
@@ -890,32 +908,34 @@ inflight message state.</p>
<p>In extreme croner case where we sent message to FSP via fsp_sync_msg() path
and FSP R/R happens before getting respose from FSP, then we will endup waiting
in fsp_sync_msg() until everything becomes normal.</p>
-<dl class="simple">
-<dt>This patch adds fsp_in_rr() check to fsp_sync_msg() and return error to caller</dt><dd><p>if FSP is in R/R.</p>
+<dl class="docutils">
+<dt>This patch adds fsp_in_rr() check to fsp_sync_msg() and return error to caller</dt>
+<dd><p class="first last">if FSP is in R/R.</p>
</dd>
</dl>
</li>
-<li><p>capp: Fix hang when CAPP microcode LID is missing on FSP machine</p>
+<li><p class="first">capp: Fix hang when CAPP microcode LID is missing on FSP machine</p>
<p>When the LID is absent, we fail early with an error from
start_preload_resource. In that case, capp_ucode_info.load_result
isn’t set properly causing a subsequent capp_lid_download() to
call wait_for_resource_loaded() on something that isn’t being
loaded, thus hanging.</p>
</li>
-<li><p>FSP/CONSOLE: Do not free fsp_msg in error path</p>
+<li><p class="first">FSP/CONSOLE: Do not free fsp_msg in error path</p>
<p>as we reuse same msg to send next output message.</p>
</li>
-<li><p>platform/zz: Acknowledge OCC_LOAD mbox message in ZZ</p>
+<li><p class="first">platform/zz: Acknowledge OCC_LOAD mbox message in ZZ</p>
<p>In P9 FSP box, OCC image is pre-loaded. So do not handle the load
command and send SUCCESS to FSP on recieving OCC_LOAD mbox message.</p>
</li>
-<li><p>FSP/RTC: Improve error log</p></li>
+<li><p class="first">FSP/RTC: Improve error log</p>
+</li>
</ul>
</div>
<div class="section" id="astbmc-systems">
<h2>astbmc systems<a class="headerlink" href="#astbmc-systems" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>platforms/astbmc: Don’t validate model on palmetto</p>
+<li><p class="first">platforms/astbmc: Don’t validate model on palmetto</p>
<p>The platform isn’t compatible with palmetto until the root device-tree
node’s “model” property is NULL or “palmetto”. However, we could have
“TN71-BP012” for the property on palmetto.</p>
@@ -931,7 +951,6 @@ on palmetto, meaning we check the “compatible” property only.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -973,15 +992,17 @@ on palmetto, meaning we check the “compatible” property only.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -998,15 +1019,14 @@ on palmetto, meaning we check the “compatible” property only.</p>
<li class="right" >
<a href="skiboot-5.7.html" title="skiboot-5.7"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.7-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.7-rc2.html b/doc/release-notes/skiboot-5.7-rc2.html
index da094b0..986c91e 100644
--- a/doc/release-notes/skiboot-5.7-rc2.html
+++ b/doc/release-notes/skiboot-5.7-rc2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.7-rc2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.7-rc2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.7-rc1.html" title="skiboot-5.7-rc1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.7-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -67,8 +68,9 @@ and issues: <a class="reference external" href="https://github.com/open-power/sk
should be considered in development and skiboot 5.7 is certainly <strong>NOT</strong>
suitable for POWER9 production environments.</p>
<ul>
-<li><p>HDAT: Add IPMI sensor data under /bmc node</p></li>
-<li><p>numa/associativity: Add a new level of NUMA for GPU’s</p>
+<li><p class="first">HDAT: Add IPMI sensor data under /bmc node</p>
+</li>
+<li><p class="first">numa/associativity: Add a new level of NUMA for GPU’s</p>
<p>Today we have an issue where the NUMA nodes corresponding
to GPU’s have the same affinity/distance as normal memory
nodes. Our reference-points today supports two levels
@@ -76,16 +78,16 @@ nodes. Our reference-points today supports two levels
systems. This patch adds a new level [0x4, X, 0x2] and
uses node-id as at all levels for the GPU.</p>
</li>
-<li><p>xive: Enable memory backing of queues</p>
+<li><p class="first">xive: Enable memory backing of queues</p>
<p>This dedicates 6x64k pages of memory permanently for the XIVE to
use for internal queue overflow. This allows the XIVE to deal with
some corner cases where the internal queues might prove insufficient.</p>
</li>
-<li><p>xive: Properly get rid of donated indirect pages during reset</p>
+<li><p class="first">xive: Properly get rid of donated indirect pages during reset</p>
<p>Otherwise they keep being used accross kexec causing memory
corruption in subsequent kernels once KVM has been used.</p>
</li>
-<li><p>cpu: Better handle unknown flags in opal_reinit_cpus()</p>
+<li><p class="first">cpu: Better handle unknown flags in opal_reinit_cpus()</p>
<p>At the moment, if we get passed flags we don’t know about, we
return OPAL_UNSUPPORTED but we still perform whatever actions
was requied by the flags we do support. Additionally, on P8,
@@ -96,22 +98,22 @@ be careful at least on P8, but to avoid future issues let’s clean
that up, make sure we only use slw_reinit() when HILE isn’t
supported.</p>
</li>
-<li><p>cpu: Unconditionally cleanup TLBs on P9 in opal_reinit_cpus()</p>
+<li><p class="first">cpu: Unconditionally cleanup TLBs on P9 in opal_reinit_cpus()</p>
<p>This can work around problems where Linux fails to properly
cleanup part or all of the TLB on kexec.</p>
</li>
-<li><p>Fix scom addresses for power9 nx checkstop hmi handling.</p>
+<li><p class="first">Fix scom addresses for power9 nx checkstop hmi handling.</p>
<p>Scom addresses for NX status, DMA &amp; ENGINE FIR and PBI FIR has changed
for Power9. Fixup thoes while handling nx checkstop for Power9.</p>
</li>
-<li><p>Fix scom addresses for power9 core checkstop hmi handling.</p>
+<li><p class="first">Fix scom addresses for power9 core checkstop hmi handling.</p>
<p>Scom addresses for CORE FIR (Fault Isolation Register) and Malfunction
Alert Register has changed for Power9. Fixup those while handling core
checkstop for Power9.</p>
<p>Without this change HMI handler fails to check for correct reason for
core checkstop on Power9.</p>
</li>
-<li><p>core/mem_region: check return value of add_region</p>
+<li><p class="first">core/mem_region: check return value of add_region</p>
<p>The only sensible thing to do if this fails is to abort() as we’ve
likely just failed reserving reserved memory regions, and nothing
good comes from that.</p>
@@ -120,7 +122,7 @@ good comes from that.</p>
<div class="section" id="phb4">
<h3>PHB4<a class="headerlink" href="#phb4" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>phb4: Do more retries on link training failures
+<li><p class="first">phb4: Do more retries on link training failures
Currently we only retry once when we have a link training failure.
This changes this to be 3 retries as 1 retry is not giving us enough
reliablity.</p>
@@ -129,7 +131,7 @@ incorrectly detect a link presence when there really is nothing
present. I’ll post a followup patch to optimise our timings to help
mitigate this later.</p>
</li>
-<li><p>phb4: Workaround phy lockup by doing full PHB reset on retry</p>
+<li><p class="first">phb4: Workaround phy lockup by doing full PHB reset on retry</p>
<p>For PHB4 it’s possible that the phy may end up in a bad state where it
can no longer recieve data. This can manifest as the link not
retraining. A simple PERST will not clear this. The PHB must be
@@ -139,44 +141,44 @@ completely reset.</p>
state (lower speed or narrower width). This patch doesn’t attempt to
fix that (will come later).</p>
</li>
-<li><p>pci: Add ability to trace timing</p>
+<li><p class="first">pci: Add ability to trace timing</p>
<p>PCI link training is responsible for a huge chunk of the skiboot boot
time, so add the ability to trace it waiting in the main state
machine.</p>
</li>
-<li><p>pci: Print resetting PHB notice at higher log level</p>
+<li><p class="first">pci: Print resetting PHB notice at higher log level</p>
<p>Currently during boot there a long delay while we wait for the PHBs to
be reset and train. During this time, there is no output from skiboot
and the last message doesn’t give an indication of what’s happening.</p>
<p>This boosts the PHB reset message from info to notice so users can see
what’s happening during this long period of waiting.</p>
</li>
-<li><p>phb4: Only set one bit in nfir</p>
+<li><p class="first">phb4: Only set one bit in nfir</p>
<p>The MPIPL procedure says to only set bit 26 when forcing the PEC into
freeze mode. Currently we set bits 24-27.</p>
<p>This changes the code to follow spec and only set bit 26.</p>
</li>
-<li><p>phb4: Fix order of pfir/nfir clearing in CRESET</p>
+<li><p class="first">phb4: Fix order of pfir/nfir clearing in CRESET</p>
<p>According to the workbook, pfir must be cleared before the nfir.
The way we have it now causes the nfir to not clear properly in some
error circumstances.</p>
<p>This swaps the order to match the workbook.</p>
</li>
-<li><p>phb4: Remove incorrect state transition</p>
+<li><p class="first">phb4: Remove incorrect state transition</p>
<p>When waiting in PHB4_SLOT_CRESET_WAIT_CQ for transations to end, we
incorrectly move onto the next state. Generally we don’t hit this as
the transactions have ended already anyway.</p>
<p>This removes the incorrect state transition.</p>
</li>
-<li><p>phb4: Set default lane equalisation</p>
+<li><p class="first">phb4: Set default lane equalisation</p>
<p>Set default lane equalisation if there is nothing in the device-tree.</p>
<p>Default value taken from hdat and confirmed by hardware team. Neatens
the code up a bit too.</p>
</li>
-<li><p>hdata: Fix phb4 lane-eq property generation</p>
+<li><p class="first">hdata: Fix phb4 lane-eq property generation</p>
<p>The lane-eq data we get from hdat is all 7s but what we end up in the
device tree is:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">xscom</span><span class="o">@</span><span class="mi">603</span><span class="n">fc00000000</span><span class="o">/</span><span class="n">pbcq</span><span class="o">@</span><span class="mi">4010</span><span class="n">c00</span><span class="o">/</span><span class="n">stack</span><span class="o">@</span><span class="mi">0</span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">lane</span><span class="o">-</span><span class="n">eq</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">xscom</span><span class="nd">@603fc00000000</span><span class="o">/</span><span class="n">pbcq</span><span class="nd">@4010c00</span><span class="o">/</span><span class="n">stack</span><span class="nd">@0</span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">lane</span><span class="o">-</span><span class="n">eq</span>
<span class="mi">00000000</span> <span class="mi">31</span><span class="n">c339e0</span> <span class="mi">00000000</span> <span class="mi">0000000</span><span class="n">c</span>
<span class="mi">00000000</span> <span class="mi">00000000</span> <span class="mi">00000000</span> <span class="mi">00000000</span>
<span class="mi">00000000</span> <span class="mi">31</span><span class="n">c30000</span> <span class="mi">77777777</span> <span class="mi">77777777</span>
@@ -186,26 +188,26 @@ device tree is:</p>
<p>This fixes grabbing the properties from hdat and fixes the call to put
them in the device tree.</p>
</li>
-<li><p>phb4: Fix PHB4 fence recovery.</p>
+<li><p class="first">phb4: Fix PHB4 fence recovery.</p>
<p>We had a few problems:</p>
<ul class="simple">
-<li><p>We used the wrong register to trigger the reset (spec bug)</p></li>
-<li><p>We should clear the PFIR and NFIR while the reset is asserted</p></li>
-<li><p>… and in the right order !</p></li>
-<li><p>We should only apply the DD1 workaround after the reset has
-been lifted.</p></li>
-<li><p>We should ensure we use ASB whenever we are fenced or doing a
-CRESET</p></li>
-<li><p>Make config ops write with ASB</p></li>
+<li>We used the wrong register to trigger the reset (spec bug)</li>
+<li>We should clear the PFIR and NFIR while the reset is asserted</li>
+<li>… and in the right order !</li>
+<li>We should only apply the DD1 workaround after the reset has
+been lifted.</li>
+<li>We should ensure we use ASB whenever we are fenced or doing a
+CRESET</li>
+<li>Make config ops write with ASB</li>
</ul>
</li>
-<li><p>phb4: Verbose EEH options</p>
+<li><p class="first">phb4: Verbose EEH options</p>
<p>Enabled via nvram pci-eeh-verbose=true. ie.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">nvram</span> <span class="o">-</span><span class="n">p</span> <span class="n">ibm</span><span class="p">,</span><span class="n">skiboot</span> <span class="o">--</span><span class="n">update</span><span class="o">-</span><span class="n">config</span> <span class="n">pci</span><span class="o">-</span><span class="n">eeh</span><span class="o">-</span><span class="n">verbose</span><span class="o">=</span><span class="n">true</span>
</pre></div>
</div>
</li>
-<li><p>phb4: Print more info when PHB fences</p>
+<li><p class="first">phb4: Print more info when PHB fences</p>
<p>For now at PHBERR level. We don’t have room in the diags data
passed to Linux for these unfortunately.</p>
</li>
@@ -215,19 +217,18 @@ passed to Linux for these unfortunately.</p>
<div class="section" id="testing-development">
<h2>Testing/development<a class="headerlink" href="#testing-development" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>lpc: remove double LPC prefix from messages</p></li>
-<li><p>opal-ci/fetch-debian-jessie-installer: follow redirects
-Fixes some CI failures</p></li>
-<li><p>test/qemu-jessie: bail out fast on kernel panic</p></li>
-<li><p>test/qemu-jessie: dump boot log on failure</p></li>
-<li><p>travis: add fedora26</p></li>
-<li><p>xz: add fallthrough annotations to silence GCC7 warning</p></li>
+<li>lpc: remove double LPC prefix from messages</li>
+<li>opal-ci/fetch-debian-jessie-installer: follow redirects
+Fixes some CI failures</li>
+<li>test/qemu-jessie: bail out fast on kernel panic</li>
+<li>test/qemu-jessie: dump boot log on failure</li>
+<li>travis: add fedora26</li>
+<li>xz: add fallthrough annotations to silence GCC7 warning</li>
</ul>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -259,15 +260,17 @@ Fixes some CI failures</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -284,15 +287,14 @@ Fixes some CI failures</p></li>
<li class="right" >
<a href="skiboot-5.7-rc1.html" title="skiboot-5.7-rc1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.7-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.7.html b/doc/release-notes/skiboot-5.7.html
index 21a1031..d1f2438 100644
--- a/doc/release-notes/skiboot-5.7.html
+++ b/doc/release-notes/skiboot-5.7.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.7 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.7 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.6.0-rc2.html" title="skiboot-5.6.0-rc2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.7</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -64,13 +65,13 @@ and issues: <a class="reference external" href="https://github.com/open-power/sk
<p>Since <a class="reference internal" href="skiboot-5.6.0.html#skiboot-5-6-0"><span class="std std-ref">skiboot-5.6.0</span></a>, we have a few new features:</p>
<p>New features in this release for POWER9 systems:</p>
<ul class="simple">
-<li><p>In Memory Counters (IMC) (See <a class="reference internal" href="../imc.html#imc"><span class="std std-ref">OPAL/Skiboot In-Memory Collection (IMC) interface Documentation</span></a> for details)</p></li>
-<li><p>phb4: Activate shared PCI slot on witherspoon (see <a class="reference internal" href="#shared-slot-rn"><span class="std std-ref">Shared Slot</span></a>)</p></li>
-<li><p>phb4 capi (i.e. CAPI2): Enable capi mode for PHB4 (see <a class="reference internal" href="#capi2-rn"><span class="std std-ref">CAPI on PHB4</span></a>)</p></li>
+<li>In Memory Counters (IMC) (See <a class="reference internal" href="../imc.html#imc"><span class="std std-ref">OPAL/Skiboot In-Memory Collection (IMC) interface Documentation</span></a> for details)</li>
+<li>phb4: Activate shared PCI slot on witherspoon (see <a class="reference internal" href="#shared-slot-rn"><span class="std std-ref">Shared Slot</span></a>)</li>
+<li>phb4 capi (i.e. CAPI2): Enable capi mode for PHB4 (see <a class="reference internal" href="#capi2-rn"><span class="std std-ref">CAPI on PHB4</span></a>)</li>
</ul>
<p>New feature for IBM FSP based systems:</p>
<ul>
-<li><p>fsp/tpo: Provide support for disabling TPO alarm</p>
+<li><p class="first">fsp/tpo: Provide support for disabling TPO alarm</p>
<p>This patch adds support for disabling a preconfigured
Timed-Power-On(TPO) alarm on FSP based systems. Presently once a TPO alarm
is configured from the kernel it will be triggered even if its
@@ -91,20 +92,21 @@ should be considered in development and skiboot 5.7 is certainly <strong>NOT</st
suitable for POWER9 production environments.</p>
<p>Since <a class="reference internal" href="skiboot-5.7-rc2.html#skiboot-5-7-rc2"><span class="std std-ref">skiboot-5.7-rc2</span></a>:</p>
<ul>
-<li><p>platform/witherspoon: Enable eSEL logging</p>
+<li><p class="first">platform/witherspoon: Enable eSEL logging</p>
<p>OpenBMC stack added IPMI OEM extension to log eSEL events.
Lets enable eSEL logging from OPAL side.</p>
<p>See: <a class="reference external" href="https://github.com/openbmc/openpower-host-ipmi-oem/blob/d9296050bcece5c2eca5ede0932d944b0ced66c9/oemhandler.cpp#L142">https://github.com/openbmc/openpower-host-ipmi-oem/blob/d9296050bcece5c2eca5ede0932d944b0ced66c9/oemhandler.cpp#L142</a>
(yes, that is the documentation)</p>
</li>
-<li><p>hdat/i2c: Fix array version check</p></li>
-<li><p>mem_region: Check for no-map in reserved nodes</p>
+<li><p class="first">hdat/i2c: Fix array version check</p>
+</li>
+<li><p class="first">mem_region: Check for no-map in reserved nodes</p>
<p>Regions with the no-map property should be handled seperately to
“normal” firmware reservations. When creating mem_region regions
from a reserved-memory DT node use the no-map property to select
the right reservation type.</p>
</li>
-<li><p>hdata/memory: Add memory reservations to the DT</p>
+<li><p class="first">hdata/memory: Add memory reservations to the DT</p>
<p>Currently we just add these to a list of pre-boot reserved regions
which is then converted into a the contents of the /reserved-memory/
node just before Skiboot jumps into the firmware kernel.</p>
@@ -118,8 +120,9 @@ makes the HDAT parser do the same.</p>
</ul>
<p>Since Since <a class="reference internal" href="skiboot-5.7-rc1.html#skiboot-5-7-rc1"><span class="std std-ref">skiboot-5.7-rc1</span></a>:</p>
<ul>
-<li><p>HDAT: Add IPMI sensor data under /bmc node</p></li>
-<li><p>numa/associativity: Add a new level of NUMA for GPU’s</p>
+<li><p class="first">HDAT: Add IPMI sensor data under /bmc node</p>
+</li>
+<li><p class="first">numa/associativity: Add a new level of NUMA for GPU’s</p>
<p>Today we have an issue where the NUMA nodes corresponding
to GPU’s have the same affinity/distance as normal memory
nodes. Our reference-points today supports two levels
@@ -127,16 +130,16 @@ nodes. Our reference-points today supports two levels
systems. This patch adds a new level [0x4, X, 0x2] and
uses node-id as at all levels for the GPU.</p>
</li>
-<li><p>xive: Enable memory backing of queues</p>
+<li><p class="first">xive: Enable memory backing of queues</p>
<p>This dedicates 6x64k pages of memory permanently for the XIVE to
use for internal queue overflow. This allows the XIVE to deal with
some corner cases where the internal queues might prove insufficient.</p>
</li>
-<li><p>xive: Properly get rid of donated indirect pages during reset</p>
+<li><p class="first">xive: Properly get rid of donated indirect pages during reset</p>
<p>Otherwise they keep being used accross kexec causing memory
corruption in subsequent kernels once KVM has been used.</p>
</li>
-<li><p>cpu: Better handle unknown flags in opal_reinit_cpus()</p>
+<li><p class="first">cpu: Better handle unknown flags in opal_reinit_cpus()</p>
<p>At the moment, if we get passed flags we don’t know about, we
return OPAL_UNSUPPORTED but we still perform whatever actions
was requied by the flags we do support. Additionally, on P8,
@@ -147,22 +150,22 @@ be careful at least on P8, but to avoid future issues let’s clean
that up, make sure we only use slw_reinit() when HILE isn’t
supported.</p>
</li>
-<li><p>cpu: Unconditionally cleanup TLBs on P9 in opal_reinit_cpus()</p>
+<li><p class="first">cpu: Unconditionally cleanup TLBs on P9 in opal_reinit_cpus()</p>
<p>This can work around problems where Linux fails to properly
cleanup part or all of the TLB on kexec.</p>
</li>
-<li><p>Fix scom addresses for power9 nx checkstop hmi handling.</p>
+<li><p class="first">Fix scom addresses for power9 nx checkstop hmi handling.</p>
<p>Scom addresses for NX status, DMA &amp; ENGINE FIR and PBI FIR has changed
for Power9. Fixup thoes while handling nx checkstop for Power9.</p>
</li>
-<li><p>Fix scom addresses for power9 core checkstop hmi handling.</p>
+<li><p class="first">Fix scom addresses for power9 core checkstop hmi handling.</p>
<p>Scom addresses for CORE FIR (Fault Isolation Register) and Malfunction
Alert Register has changed for Power9. Fixup those while handling core
checkstop for Power9.</p>
<p>Without this change HMI handler fails to check for correct reason for
core checkstop on Power9.</p>
</li>
-<li><p>core/mem_region: check return value of add_region</p>
+<li><p class="first">core/mem_region: check return value of add_region</p>
<p>The only sensible thing to do if this fails is to abort() as we’ve
likely just failed reserving reserved memory regions, and nothing
good comes from that.</p>
@@ -170,15 +173,15 @@ good comes from that.</p>
</ul>
<p>Since Since <a class="reference internal" href="skiboot-5.6.0.html#skiboot-5-6-0"><span class="std std-ref">skiboot-5.6.0</span></a>:</p>
<ul>
-<li><p>hdata: Reserve Trace Areas</p>
+<li><p class="first">hdata: Reserve Trace Areas</p>
<p>When hostboot is configured to setup in memory tracing it will reserve
some memory for use by the hardware tracing facility. We need to mark
these areas as off limits to the operating system and firmware.</p>
</li>
-<li><p>hdata: Make out-of-range idata print at PR_DEBUG</p>
+<li><p class="first">hdata: Make out-of-range idata print at PR_DEBUG</p>
<p>Some fields just aren’t populated on some systems.</p>
</li>
-<li><p>hdata: Ignore unnamed memory reservations.</p>
+<li><p class="first">hdata: Ignore unnamed memory reservations.</p>
<p>Hostboot should name any and all memory reservations that it provides.
Currently some hostboots export a broken reservation covering the first
256MB of memory and this causes the system to crash at boot due to an
@@ -187,19 +190,19 @@ region (which covers the first 768MB of memory).</p>
<p>According to the hostboot team unnamed reservations are invalid and can
be ignored.</p>
</li>
-<li><p>hdata: Check the Host I2C devices array version</p>
+<li><p class="first">hdata: Check the Host I2C devices array version</p>
<p>Currently this is not populated on FSP machines which causes some
obnoxious errors to appear in the boot log. We also only want to
parse version 1 of this structure since future versions will completely
change the array item format.</p>
</li>
-<li><p>Ensure P9 DD1 workarounds apply only to Nimbus</p>
+<li><p class="first">Ensure P9 DD1 workarounds apply only to Nimbus</p>
<p>The workarounds for P9 DD1 are only needed for Nimbus. P9 Cumulus will
be DD1 but don’t need these same workarounds.</p>
<p>This patch ensures the P9 DD1 workarounds only apply to Nimbus. It
also renames some things to make clear what’s what.</p>
</li>
-<li><p>cpu: Cleanup AMR and IAMR when re-initializing CPUs</p>
+<li><p class="first">cpu: Cleanup AMR and IAMR when re-initializing CPUs</p>
<p>There’s a bug in current Linux kernels leaving crap in those registers
accross kexec and not sanitizing them on boot. This breaks kexec under
some circumstances (such as booting a hash kernel from a radix one
@@ -211,10 +214,10 @@ and shouldn’t have adverse effects.</p>
well such as restoring some other SPRs to their default value in
the future.</p>
</li>
-<li><p>Set POWER9 RPR SPR to 0x00000103070F1F3F. Same value as P8.</p>
+<li><p class="first">Set POWER9 RPR SPR to 0x00000103070F1F3F. Same value as P8.</p>
<p>Without this, thread priorities inside a core don’t work.</p>
</li>
-<li><p>cpu: Support setting HID[RADIX] and set it by default on P9</p>
+<li><p class="first">cpu: Support setting HID[RADIX] and set it by default on P9</p>
<p>This adds new opal_reinit_cpus() flags to setup radix or hash
mode in HID[8] on POWER9.</p>
<p>By default HID[8] will be set. On P9 DD1.0, Linux will change
@@ -224,16 +227,17 @@ will work.</p>
<p>Newer kernels built for hash will call this to clear the HID bit
and thus get the full size of the TLB as an optimization.</p>
</li>
-<li><p>Add “cleanup_global_tlb” for P9 and later</p>
+<li><p class="first">Add “cleanup_global_tlb” for P9 and later</p>
<p>Uses broadcast TLBIE’s to cleanup the TLB on all cores and on
the nest MMU</p>
</li>
-<li><p>xive: DD2.0 updates</p>
+<li><p class="first">xive: DD2.0 updates</p>
<p>Add support for StoreEOI, fix StoreEOI MMIO offset in ESB page,
and other cleanups</p>
</li>
-<li><p>Update default TSCR value for P9 as recommended by HW folk.</p></li>
-<li><p>xive: Fix initialisation of xive_cpu_state struct</p>
+<li><p class="first">Update default TSCR value for P9 as recommended by HW folk.</p>
+</li>
+<li><p class="first">xive: Fix initialisation of xive_cpu_state struct</p>
<p>When using XIVE emulation with DEBUG=1, we run into crashes in log_add()
due to the xive_cpu_state-&gt;log_pos being uninitialised (and thus, with
DEBUG enabled, initialised to the poison value of 0x99999999).</p>
@@ -243,7 +247,7 @@ DEBUG enabled, initialised to the poison value of 0x99999999).</p>
<h3>PHB4<a class="headerlink" href="#phb4" title="Permalink to this headline">¶</a></h3>
<p>Since <a class="reference internal" href="skiboot-5.7-rc2.html#skiboot-5-7-rc2"><span class="std std-ref">skiboot-5.7-rc2</span></a>:</p>
<ul>
-<li><p>phb4: Add link training trace mode</p>
+<li><p class="first">phb4: Add link training trace mode</p>
<p>Add a mode to PHB4 to trace training process closely. This activates
as soon as PERST is deasserted and produces human readable output of
the process.</p>
@@ -271,14 +275,14 @@ timeout but will fall through to the default training code once done.</p>
</pre></div>
</div>
</li>
-<li><p>phb4: Improve reset and link training timing</p>
+<li><p class="first">phb4: Improve reset and link training timing</p>
<p>This improves PHB reset and link training timing.</p>
</li>
-<li><p>phb4: Add phb4_check_reg() to sanity check failures</p>
+<li><p class="first">phb4: Add phb4_check_reg() to sanity check failures</p>
<p>This adds a function phb4_check_reg() to sanity check when we do MMIO
reads from the PHB to make sure it’s not fenced.</p>
</li>
-<li><p>phb4: Remove retry on electrical link timeout</p>
+<li><p class="first">phb4: Remove retry on electrical link timeout</p>
<p>Currently we retry if we don’t detect an electrical link. This is
pointless as all devices should respond in the given time.</p>
<p>This patches removes this retry and just returns OPAL_HARDWARE if we
@@ -287,28 +291,28 @@ don’t detect an electrical link.</p>
that have badly wired presence detect (ie. says a device is present
when there isn’t).</p>
</li>
-<li><p>phb4: Read PERST signal rather than assuming it’s asserted</p>
+<li><p class="first">phb4: Read PERST signal rather than assuming it’s asserted</p>
<p>Currently we assume on boot that PERST is asserted so that we can skip
having to assert it ourselves.</p>
<p>This instead reads the PERST status and determines if we need to
assert it based on that.</p>
</li>
-<li><p>phb4: Fix endian of TLP headers print</p>
+<li><p class="first">phb4: Fix endian of TLP headers print</p>
<p>Byte swap TLP headers so they are the same as the PCIe spec.</p>
</li>
-<li><p>phb4: Change timeouts prints to error level</p>
+<li><p class="first">phb4: Change timeouts prints to error level</p>
<p>If the link doesn’t have a electrical link or the link doesn’t train
we should make that more obvious to the user.</p>
</li>
-<li><p>phb4: Better logs why the slot didn’t work</p>
+<li><p class="first">phb4: Better logs why the slot didn’t work</p>
<p>Better logs why the slot didn’t work and make it a PR_ERR so users
see it by default.</p>
</li>
-<li><p>phb4: Force verbose EEH logging</p>
+<li><p class="first">phb4: Force verbose EEH logging</p>
<p>Force verbose EEH. This is a heavy handed and we should turn if off
later as things stabilise, but is useful for now.</p>
</li>
-<li><p>phb4: Initialization sequence updates</p>
+<li><p class="first">phb4: Initialization sequence updates</p>
<p>Mostly errata workarounds, some DD1 specific.</p>
<p>The step Init_5 was moved to Init_16, so the numbering was updated to
reflect this.</p>
@@ -316,7 +320,7 @@ reflect this.</p>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.7-rc1.html#skiboot-5-7-rc1"><span class="std std-ref">skiboot-5.7-rc1</span></a>:</p>
<ul>
-<li><p>phb4: Do more retries on link training failures
+<li><p class="first">phb4: Do more retries on link training failures
Currently we only retry once when we have a link training failure.
This changes this to be 3 retries as 1 retry is not giving us enough
reliablity.</p>
@@ -325,7 +329,7 @@ incorrectly detect a link presence when there really is nothing
present. I’ll post a followup patch to optimise our timings to help
mitigate this later.</p>
</li>
-<li><p>phb4: Workaround phy lockup by doing full PHB reset on retry</p>
+<li><p class="first">phb4: Workaround phy lockup by doing full PHB reset on retry</p>
<p>For PHB4 it’s possible that the phy may end up in a bad state where it
can no longer recieve data. This can manifest as the link not
retraining. A simple PERST will not clear this. The PHB must be
@@ -335,44 +339,44 @@ completely reset.</p>
state (lower speed or narrower width). This patch doesn’t attempt to
fix that (will come later).</p>
</li>
-<li><p>pci: Add ability to trace timing</p>
+<li><p class="first">pci: Add ability to trace timing</p>
<p>PCI link training is responsible for a huge chunk of the skiboot boot
time, so add the ability to trace it waiting in the main state
machine.</p>
</li>
-<li><p>pci: Print resetting PHB notice at higher log level</p>
+<li><p class="first">pci: Print resetting PHB notice at higher log level</p>
<p>Currently during boot there a long delay while we wait for the PHBs to
be reset and train. During this time, there is no output from skiboot
and the last message doesn’t give an indication of what’s happening.</p>
<p>This boosts the PHB reset message from info to notice so users can see
what’s happening during this long period of waiting.</p>
</li>
-<li><p>phb4: Only set one bit in nfir</p>
+<li><p class="first">phb4: Only set one bit in nfir</p>
<p>The MPIPL procedure says to only set bit 26 when forcing the PEC into
freeze mode. Currently we set bits 24-27.</p>
<p>This changes the code to follow spec and only set bit 26.</p>
</li>
-<li><p>phb4: Fix order of pfir/nfir clearing in CRESET</p>
+<li><p class="first">phb4: Fix order of pfir/nfir clearing in CRESET</p>
<p>According to the workbook, pfir must be cleared before the nfir.
The way we have it now causes the nfir to not clear properly in some
error circumstances.</p>
<p>This swaps the order to match the workbook.</p>
</li>
-<li><p>phb4: Remove incorrect state transition</p>
+<li><p class="first">phb4: Remove incorrect state transition</p>
<p>When waiting in PHB4_SLOT_CRESET_WAIT_CQ for transations to end, we
incorrectly move onto the next state. Generally we don’t hit this as
the transactions have ended already anyway.</p>
<p>This removes the incorrect state transition.</p>
</li>
-<li><p>phb4: Set default lane equalisation</p>
+<li><p class="first">phb4: Set default lane equalisation</p>
<p>Set default lane equalisation if there is nothing in the device-tree.</p>
<p>Default value taken from hdat and confirmed by hardware team. Neatens
the code up a bit too.</p>
</li>
-<li><p>hdata: Fix phb4 lane-eq property generation</p>
+<li><p class="first">hdata: Fix phb4 lane-eq property generation</p>
<p>The lane-eq data we get from hdat is all 7s but what we end up in the
device tree is:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">xscom</span><span class="o">@</span><span class="mi">603</span><span class="n">fc00000000</span><span class="o">/</span><span class="n">pbcq</span><span class="o">@</span><span class="mi">4010</span><span class="n">c00</span><span class="o">/</span><span class="n">stack</span><span class="o">@</span><span class="mi">0</span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">lane</span><span class="o">-</span><span class="n">eq</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">xscom</span><span class="nd">@603fc00000000</span><span class="o">/</span><span class="n">pbcq</span><span class="nd">@4010c00</span><span class="o">/</span><span class="n">stack</span><span class="nd">@0</span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">lane</span><span class="o">-</span><span class="n">eq</span>
<span class="mi">00000000</span> <span class="mi">31</span><span class="n">c339e0</span> <span class="mi">00000000</span> <span class="mi">0000000</span><span class="n">c</span>
<span class="mi">00000000</span> <span class="mi">00000000</span> <span class="mi">00000000</span> <span class="mi">00000000</span>
<span class="mi">00000000</span> <span class="mi">31</span><span class="n">c30000</span> <span class="mi">77777777</span> <span class="mi">77777777</span>
@@ -382,46 +386,46 @@ device tree is:</p>
<p>This fixes grabbing the properties from hdat and fixes the call to put
them in the device tree.</p>
</li>
-<li><p>phb4: Fix PHB4 fence recovery.</p>
+<li><p class="first">phb4: Fix PHB4 fence recovery.</p>
<p>We had a few problems:</p>
<ul class="simple">
-<li><p>We used the wrong register to trigger the reset (spec bug)</p></li>
-<li><p>We should clear the PFIR and NFIR while the reset is asserted</p></li>
-<li><p>… and in the right order !</p></li>
-<li><p>We should only apply the DD1 workaround after the reset has
-been lifted.</p></li>
-<li><p>We should ensure we use ASB whenever we are fenced or doing a
-CRESET</p></li>
-<li><p>Make config ops write with ASB</p></li>
+<li>We used the wrong register to trigger the reset (spec bug)</li>
+<li>We should clear the PFIR and NFIR while the reset is asserted</li>
+<li>… and in the right order !</li>
+<li>We should only apply the DD1 workaround after the reset has
+been lifted.</li>
+<li>We should ensure we use ASB whenever we are fenced or doing a
+CRESET</li>
+<li>Make config ops write with ASB</li>
</ul>
</li>
-<li><p>phb4: Verbose EEH options</p>
+<li><p class="first">phb4: Verbose EEH options</p>
<p>Enabled via nvram pci-eeh-verbose=true. ie.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">nvram</span> <span class="o">-</span><span class="n">p</span> <span class="n">ibm</span><span class="p">,</span><span class="n">skiboot</span> <span class="o">--</span><span class="n">update</span><span class="o">-</span><span class="n">config</span> <span class="n">pci</span><span class="o">-</span><span class="n">eeh</span><span class="o">-</span><span class="n">verbose</span><span class="o">=</span><span class="n">true</span>
</pre></div>
</div>
</li>
-<li><p>phb4: Print more info when PHB fences</p>
+<li><p class="first">phb4: Print more info when PHB fences</p>
<p>For now at PHBERR level. We don’t have room in the diags data
passed to Linux for these unfortunately.</p>
</li>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.6.0.html#skiboot-5-6-0"><span class="std std-ref">skiboot-5.6.0</span></a>:</p>
<ul>
-<li><p>phb4: Fix number of index bits in IODA tables</p>
+<li><p class="first">phb4: Fix number of index bits in IODA tables</p>
<p>On PHB4 the number of index bits in the IODA table address register
was bumped to 10 bits to accomodate for 1024 MSIs and 1024 TVEs (DD2).</p>
<p>However our macro only defined the field to be 9 bits, thus causing
“interesting” behaviours on some systems.</p>
</li>
-<li><p>phb4: Harden init with bad PHBs</p>
+<li><p class="first">phb4: Harden init with bad PHBs</p>
<p>Currently if we read all 1’s from the EEH or IRQ capabilities, we end
up train wrecking on some other random code (eg. an assert() in xive).</p>
<p>This hardens the PHB4 code to look for these bad reads and more
gracefully fails the init for that PHB alone. This allows the rest of
the system to boot and ignore those bad PHBs.</p>
</li>
-<li><p>phb4 capi (i.e. CAPI2): Handle HMI events</p>
+<li><p class="first">phb4 capi (i.e. CAPI2): Handle HMI events</p>
<p>Find the CAPP on the chip associated with the HMI event for PHB4.
The recovery mode (re-initialization of the capp, resume of functional
operations) is only available with P9 DD2. A new patch will be provided
@@ -429,7 +433,7 @@ to support this feature.</p>
</li>
</ul>
<ul id="capi2-rn">
-<li><p>phb4 capi (i.e. CAPI2): Enable capi mode for PHB4</p>
+<li><p class="first">phb4 capi (i.e. CAPI2): Enable capi mode for PHB4</p>
<p>Enable the Coherently attached processor interface. The PHB is used as
a CAPI interface.
CAPI Adapters can be connected to either PEC0 or PEC2. Single port
@@ -438,7 +442,7 @@ Adapter can be only connected to PEC2
* CAPP0 attached to PHB0(PEC0 - single port)
* CAPP1 attached to PHB3(PEC2 - single or dual port)</p>
</li>
-<li><p>hw/phb4: Rework phb4_get_presence_state()</p>
+<li><p class="first">hw/phb4: Rework phb4_get_presence_state()</p>
<p>There are two issues in current implementation: It should return errcode
visibile to Linux, which has prefix OPAL_*. The code isn’t very obvious.</p>
<p>This returns OPAL_HARDWARE when the PHB is broken. Otherwise, OPAL_SUCCESS
@@ -446,28 +450,29 @@ is always returned. In the mean while, It refactors the code to make it
obvious: OPAL_PCI_SLOT_PRESENT is returned when the presence signal (low active)
or PCIe link is active. Otherwise, OPAL_PCI_SLOT_EMPTY is returned.</p>
</li>
-<li><p>phb4: Error injection for config space</p>
+<li><p class="first">phb4: Error injection for config space</p>
<p>Implement CFG (config space) error injection.</p>
<p>This works the same as PHB3. MMIO and DMA error injection require a
rewrite, so they’re unsupported for now.</p>
<p>While it’s not feature complete, this at least provides an easy way to
inject an error that will trigger EEH.</p>
</li>
-<li><p>phb4: Error clear implementation</p></li>
-<li><p>phb4: Mask link down errors during reset</p>
+<li><p class="first">phb4: Error clear implementation</p>
+</li>
+<li><p class="first">phb4: Mask link down errors during reset</p>
<p>During a hot reset the PCI link will drop, so we need to mask link down
events to prevent unnecessary errors.</p>
</li>
-<li><p>phb4: Implement root port initialization</p>
+<li><p class="first">phb4: Implement root port initialization</p>
<p>phb4_root_port_init() was a NOP before, so fix that.</p>
</li>
-<li><p>phb4: Complete reset implementation</p>
+<li><p class="first">phb4: Complete reset implementation</p>
<p>This implements complete reset (creset) functionality for POWER9 DD1.</p>
<p>Only partially tested and contends with some DD1 errata, but it’s a start.</p>
</li>
</ul>
<ul id="shared-slot-rn">
-<li><p>phb4: Activate shared PCI slot on witherspoon</p>
+<li><p class="first">phb4: Activate shared PCI slot on witherspoon</p>
<p>Witherspoon systems come with a â€shared’ PCI slot: physically, it
looks like a x16 slot, but it’s actually two x8 slots connected to two
PHBs of two different chips. Taking advantage of it requires some
@@ -488,12 +493,13 @@ then the presence bit of the second slot is not set, so this patch
does nothing. The x8 (or less) adapter should work like on any other
physical slot.</p>
</li>
-<li><p>phb4: Block D-state power management on direct slots</p>
+<li><p class="first">phb4: Block D-state power management on direct slots</p>
<p>As current revisions of PHB4 don’t properly handle the resulting
L1 link transition.</p>
</li>
-<li><p>phb4: Call pci config filters</p></li>
-<li><p>phb4: Mask out write-1-to-clear registers in RC cfg</p>
+<li><p class="first">phb4: Call pci config filters</p>
+</li>
+<li><p class="first">phb4: Mask out write-1-to-clear registers in RC cfg</p>
<p>The root complex config space only supports 4-byte accesses. Thus, when
the client requests a smaller size write, we do a read-modify-write to
the register.</p>
@@ -504,15 +510,16 @@ write back those 1’s and clear the corresponding bit.</p>
<p>This avoids it by masking out those magic bits from the “old” value
read from the register.</p>
</li>
-<li><p>phb4: Properly mask out link down errors during reset</p></li>
-<li><p>phb3/4: Silence a useless warning</p>
+<li><p class="first">phb4: Properly mask out link down errors during reset</p>
+</li>
+<li><p class="first">phb3/4: Silence a useless warning</p>
<p>PHB’s don’t have base location codes on non-FSP systems and it’s
normal.</p>
</li>
-<li><p>phb4: Workaround bug in spec 053</p>
+<li><p class="first">phb4: Workaround bug in spec 053</p>
<p>Wait for DLP PGRESET to clear <em>after</em> lifting the PCIe core reset</p>
</li>
-<li><p>phb4: DD2.0 updates</p>
+<li><p class="first">phb4: DD2.0 updates</p>
<p>Support StoreEOI, full complements of PEs (twice as big TVT)
and other updates.</p>
<p>Also renumber init steps to match spec 063</p>
@@ -524,56 +531,57 @@ and other updates.</p>
<p>Note that currently NPU2 support is limited to POWER9 DD1 hardware.</p>
<p>Since <a class="reference internal" href="skiboot-5.6.0.html#skiboot-5-6-0"><span class="std std-ref">skiboot-5.6.0</span></a>:</p>
<ul>
-<li><p>platforms/astbmc/witherspoon.c: Add NPU2 slot mappings</p>
+<li><p class="first">platforms/astbmc/witherspoon.c: Add NPU2 slot mappings</p>
<p>For NVLink2 to function PCIe devices need to be associated with the right
NVLinks. This association is supposed to be passed down to Skiboot via HDAT but
those fields are still not correctly filled out. To work around this we add slot
tables for the NVLinks similar to what we have for P8+.</p>
</li>
-<li><p>hw/npu2.c: Fix device aperture calculation</p>
+<li><p class="first">hw/npu2.c: Fix device aperture calculation</p>
<p>The POWER9 NPU2 implements an address compression scheme to compress 56-bit P9
physical addresses to 47-bit GPU addresses. System software needs to know both
addresses, unfortunately the calculation of the compressed address was
incorrect. Fix it here.</p>
</li>
-<li><p>hw/npu2.c: Change MCD BAR allocation order</p>
+<li><p class="first">hw/npu2.c: Change MCD BAR allocation order</p>
<p>MCD BARs need to be correctly aligned to the size of the region. As GPU
memory is allocated from the top of memory down we should start allocating
from the highest GPU memory address to the lowest to ensure correct
alignment.</p>
</li>
-<li><p>NPU2: Add flag to nvlink config space indicating DL reset state</p>
+<li><p class="first">NPU2: Add flag to nvlink config space indicating DL reset state</p>
<p>Device drivers need to be able to determine if the DL is out of reset or
not so they can safely probe to see if links have already been trained.
This patch adds a flag to the vendor specific config space indicating if
the DL is out of reset.</p>
</li>
-<li><p>hw/npu2.c: Hardcode MSR_SF when setting up npu XTS contexts</p>
+<li><p class="first">hw/npu2.c: Hardcode MSR_SF when setting up npu XTS contexts</p>
<p>We don’t support anything other than 64-bit mode for address translations so we
can safely hardcode it.</p>
</li>
-<li><p>hw/npu2-hw-procedures.c: Add nvram option to override zcal calculations</p>
+<li><p class="first">hw/npu2-hw-procedures.c: Add nvram option to override zcal calculations</p>
<p>In some rare cases the zcal state machine may fail and flag an error. According
to hardware designers it is sometimes ok to ignore this failure and use nominal
values for the calculations. In this case we add a nvram variable
(nv_zcal_override) which will cause skiboot to ignore the failure and use the
nominal value specified in nvram.</p>
</li>
-<li><p>npu2: Fix npu2_{read,write}_4b()</p>
+<li><p class="first">npu2: Fix npu2_{read,write}_4b()</p>
<p>When writing or reading 4-byte values, we need to use the upper half of
the 64-bit SCOM register.</p>
<p>Fix npu2_{read,write}_4b() and their callers to use uint32_t, and
appropriately shift the value being written or returned.</p>
</li>
-<li><p>hw/npu2.c: Fix opal_npu_map_lpar to search for existing BDF</p></li>
-<li><p>hw/npu2-hw-procedures.c: Fix running of zcal procedure</p>
+<li><p class="first">hw/npu2.c: Fix opal_npu_map_lpar to search for existing BDF</p>
+</li>
+<li><p class="first">hw/npu2-hw-procedures.c: Fix running of zcal procedure</p>
<blockquote>
<div><p>The zcal procedure should only be run once per obus (ie. once per group of 3
links). Clean up the code and fix the potential buffer overflow due to a typo.
Also updates the zcal settings to their proper values.</p>
</div></blockquote>
</li>
-<li><p>hw/npu2.c: Add memory coherence directory programming</p>
+<li><p class="first">hw/npu2.c: Add memory coherence directory programming</p>
<p>The memory coherence directory (MCD) needs to know which system memory addresses
belong to the GPU. This amounts to setting a BAR and a size in the MCD to cover
the addresses assigned to each of the GPUs. To ease assignment we assume GPUs
@@ -588,11 +596,11 @@ enabled and change CPU frequencies. Doing so does require other firmware
components to also support this (otherwise the frequency will not be set).</p>
<p>Since <a class="reference internal" href="skiboot-5.6.0.html#skiboot-5-6-0"><span class="std std-ref">skiboot-5.6.0</span></a>:</p>
<ul>
-<li><p>occ: Skip setting cores to nominal frequency in P9</p>
+<li><p class="first">occ: Skip setting cores to nominal frequency in P9</p>
<p>In P9, once OCC is up, it is supposed to setup the cores to nominal
frequency. So skip this step in OPAL.</p>
</li>
-<li><p>occ: Fix Pstate ordering for P9</p>
+<li><p class="first">occ: Fix Pstate ordering for P9</p>
<p>In P9 the pstate values are positive. They are continuous set of
unsigned integers [0 to +N] where Pmax is 0 and Pmin is N. The
linear ordering of pstates for P9 has changed compared to P8.
@@ -601,7 +609,7 @@ is 0 and Pmin is -N. This patch adds helper routines to abstract
pstate comparison with pmax and adds sanity pstate limit checks.
This patch also fixes pstate arithmetic by using labs().</p>
</li>
-<li><p>p8-i2c: occ: Add support for OCC to use I2C engines</p>
+<li><p class="first">p8-i2c: occ: Add support for OCC to use I2C engines</p>
<p>This patch adds support to share the I2C engines with host and OCC.
OCC uses I2C engines to read DIMM temperatures and to communicate with
GPU. OCC Flag register is used for locking between host and OCC. Host
@@ -614,20 +622,20 @@ an interrupt to indicate the change in ownership.</p>
<h3>opal-prd/PRD<a class="headerlink" href="#opal-prd-prd" title="Permalink to this headline">¶</a></h3>
<p>Since <a class="reference internal" href="skiboot-5.6.0.html#skiboot-5-6-0"><span class="std std-ref">skiboot-5.6.0</span></a>:</p>
<ul>
-<li><p>opal-prd: Handle SBE passthrough message passing</p>
+<li><p class="first">opal-prd: Handle SBE passthrough message passing</p>
<p>This patch adds support to send SBE pass through command to HBRT.</p>
</li>
-<li><p>SBE: Add passthrough command support</p>
+<li><p class="first">SBE: Add passthrough command support</p>
<p>SBE sends passthrough command. We have to capture this interrupt and
send event to HBRT via opal-prd (user space daemon).</p>
</li>
-<li><p>opal-prd: hook up reset_pm_complex</p>
+<li><p class="first">opal-prd: hook up reset_pm_complex</p>
<p>This change provides the facility to invoke HBRT’s reset_pm_complex, in
the same manner is done with process_occ_reset previously.</p>
<p>We add a control command for <cite>opal-prd pm-complex reset</cite>, which is just
an alias for occ_reset at this stage.</p>
</li>
-<li><p>prd: Implement firmware side of opaque PRD channel</p>
+<li><p class="first">prd: Implement firmware side of opaque PRD channel</p>
<p>This change introduces the firmware side of the opaque HBRT &lt;–&gt; OPAL
message channel. We define a base message format to be shared with HBRT
(in include/prd-fw-msg.h), and allow firmware requests and responses to
@@ -635,27 +643,28 @@ be sent over this channel.</p>
<p>We don’t currently have any notifications defined, so have nothing to do
for firmware_notify() at this stage.</p>
</li>
-<li><p>opal-prd: Add firmware_request &amp; firmware_notify implementations</p>
+<li><p class="first">opal-prd: Add firmware_request &amp; firmware_notify implementations</p>
<p>This change adds the implementation of firmware_request() and
firmware_notify(). To do this, we need to add a message queue, so that
we can properly handle out-of-order messages coming from firmware.</p>
</li>
-<li><p>opal-prd: Add support for variable-sized messages</p>
+<li><p class="first">opal-prd: Add support for variable-sized messages</p>
<p>With the introductuion of the opaque firmware channel, we want to
support variable-sized messages. Rather than expecting to read an
entire â€struct opal_prd_msg’ in one read() call, we can split this
over mutiple reads, potentially expanding our message buffer.</p>
</li>
-<li><p>opal-prd: Sync hostboot interfaces with HBRT</p>
+<li><p class="first">opal-prd: Sync hostboot interfaces with HBRT</p>
<p>This change adds new callbacks defined for p9, and the base thunks for
the added calls.</p>
</li>
-<li><p>opal-prd: interpret log level prefixes from HBRT</p>
+<li><p class="first">opal-prd: interpret log level prefixes from HBRT</p>
<p>Interpret the (optional) *_MRK log prefixes on HBRT messages, and set
the syslog log priority to suit.</p>
</li>
-<li><p>opal-prd: Add occ reset to usage text</p></li>
-<li><p>opal-prd: allow different chips for occ control actions</p>
+<li><p class="first">opal-prd: Add occ reset to usage text</p>
+</li>
+<li><p class="first">opal-prd: allow different chips for occ control actions</p>
<p>The <cite>occ reset</cite> and <cite>occ error</cite> actions can both take a chip id
argument, but we’re currently just using zero. This change changes the
control message format to pass the chip ID from the control process to
@@ -668,7 +677,7 @@ the opal-prd daemon.</p>
<h2>IBM FSP based platforms<a class="headerlink" href="#ibm-fsp-based-platforms" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-5.7-rc2.html#skiboot-5-7-rc2"><span class="std std-ref">skiboot-5.7-rc2</span></a>:</p>
<ul>
-<li><p>FSP/CONSOLE: Do not enable input irq in write path</p>
+<li><p class="first">FSP/CONSOLE: Do not enable input irq in write path</p>
<p>We use irq for reading input from console, but not in output path.
Hence do not enable input irq in write path.</p>
<p>Fixes : 583c8203 (fsp/console: Allocate irq for each hvc console)</p>
@@ -676,14 +685,15 @@ Hence do not enable input irq in write path.</p>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.6.0.html#skiboot-5-6-0"><span class="std std-ref">skiboot-5.6.0</span></a>:</p>
<ul>
-<li><p>FSP/CONSOLE: Fix possible NULL dereference</p></li>
-<li><p>platforms/ibm-fsp/firenze: Fix PCI slot power-off pattern</p>
+<li><p class="first">FSP/CONSOLE: Fix possible NULL dereference</p>
+</li>
+<li><p class="first">platforms/ibm-fsp/firenze: Fix PCI slot power-off pattern</p>
<p>When powering off the PCI slot, the corresponding bits should
be set to 0bxx00xx00 instead of 0bxx11xx11. Otherwise, the
specified PCI slot can’t be put into power-off state. Fortunately,
it didn’t introduce any side-effects so far.</p>
</li>
-<li><p>FSP/CONSOLE: Workaround for unresponsive ipmi daemon</p>
+<li><p class="first">FSP/CONSOLE: Workaround for unresponsive ipmi daemon</p>
<p>We use TCE mapped area to write data to console. Console header
(fsp_serbuf_hdr) is modified by both FSP and OPAL (OPAL updates
next_in pointer in fsp_serbuf_hdr and FSP updates next_out pointer).</p>
@@ -704,7 +714,7 @@ everything becomes normal.</p>
when cosole is full. Side effect of this patch is, we may endup dropping
latest console data. But better to drop console data than system hang.</p>
</li>
-<li><p>FSP: Set status field in response message for timed out message</p>
+<li><p class="first">FSP: Set status field in response message for timed out message</p>
<p>For timed out FSP messages, we set message status as “fsp_msg_timeout”.
But most FSP driver users (like surviellance) are ignoring this field.
They always look for FSP returned status value in callback function
@@ -722,19 +732,21 @@ response from FSP.</p>
receive response from FSP.</p>
<p>This patch fixes above issue by updating status field in response structure.</p>
</li>
-<li><p>FSP: Improve timeout message</p></li>
-<li><p>FSP/RTC: Fix possible FSP R/R issue in rtc write path</p></li>
-<li><p>hw/fsp/rtc: read/write cached rtc tod on fsp hir.</p>
+<li><p class="first">FSP: Improve timeout message</p>
+</li>
+<li><p class="first">FSP/RTC: Fix possible FSP R/R issue in rtc write path</p>
+</li>
+<li><p class="first">hw/fsp/rtc: read/write cached rtc tod on fsp hir.</p>
<p>Currently fsp-rtc reads/writes the cached RTC TOD on an fsp
reset. Use latest fsp_in_rr() function to properly read the cached rtc
value when fsp reset initiated by the hir.</p>
<p>Below is the kernel trace when we set hw clock, when hir process starts.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">1727.775824</span><span class="p">]</span> <span class="n">NMI</span> <span class="n">watchdog</span><span class="p">:</span> <span class="n">BUG</span><span class="p">:</span> <span class="n">soft</span> <span class="n">lockup</span> <span class="o">-</span> <span class="n">CPU</span><span class="c1">#57 stuck for 23s! [hwclock:7688]</span>
<span class="p">[</span> <span class="mf">1727.775856</span><span class="p">]</span> <span class="n">Modules</span> <span class="n">linked</span> <span class="ow">in</span><span class="p">:</span> <span class="n">vmx_crypto</span> <span class="n">ibmpowernv</span> <span class="n">ipmi_powernv</span> <span class="n">uio_pdrv_genirq</span> <span class="n">ipmi_devintf</span> <span class="n">powernv_op_panel</span> <span class="n">uio</span> <span class="n">ipmi_msghandler</span> <span class="n">powernv_rng</span> <span class="n">leds_powernv</span> <span class="n">ip_tables</span> <span class="n">x_tables</span> <span class="n">autofs4</span> <span class="n">ses</span> <span class="n">enclosure</span> <span class="n">scsi_transport_sas</span> <span class="n">crc32c_vpmsum</span> <span class="n">lpfc</span> <span class="n">ipr</span> <span class="n">tg3</span> <span class="n">scsi_transport_fc</span>
-<span class="p">[</span> <span class="mf">1727.775883</span><span class="p">]</span> <span class="n">CPU</span><span class="p">:</span> <span class="mi">57</span> <span class="n">PID</span><span class="p">:</span> <span class="mi">7688</span> <span class="n">Comm</span><span class="p">:</span> <span class="n">hwclock</span> <span class="n">Not</span> <span class="n">tainted</span> <span class="mf">4.10.0</span><span class="o">-</span><span class="mi">14</span><span class="o">-</span><span class="n">generic</span> <span class="c1">#16-Ubuntu</span>
+<span class="p">[</span> <span class="mf">1727.775883</span><span class="p">]</span> <span class="n">CPU</span><span class="p">:</span> <span class="mi">57</span> <span class="n">PID</span><span class="p">:</span> <span class="mi">7688</span> <span class="n">Comm</span><span class="p">:</span> <span class="n">hwclock</span> <span class="n">Not</span> <span class="n">tainted</span> <span class="mf">4.10</span><span class="o">.</span><span class="mi">0</span><span class="o">-</span><span class="mi">14</span><span class="o">-</span><span class="n">generic</span> <span class="c1">#16-Ubuntu</span>
<span class="p">[</span> <span class="mf">1727.775883</span><span class="p">]</span> <span class="n">task</span><span class="p">:</span> <span class="n">c000000fdfdc8400</span> <span class="n">task</span><span class="o">.</span><span class="n">stack</span><span class="p">:</span> <span class="n">c000000fdfef4000</span>
<span class="p">[</span> <span class="mf">1727.775884</span><span class="p">]</span> <span class="n">NIP</span><span class="p">:</span> <span class="n">c00000000090540c</span> <span class="n">LR</span><span class="p">:</span> <span class="n">c0000000000846f4</span> <span class="n">CTR</span><span class="p">:</span> <span class="mi">000000003006</span><span class="n">dd70</span>
-<span class="p">[</span> <span class="mf">1727.775885</span><span class="p">]</span> <span class="n">REGS</span><span class="p">:</span> <span class="n">c000000fdfef79a0</span> <span class="n">TRAP</span><span class="p">:</span> <span class="mi">0901</span> <span class="n">Not</span> <span class="n">tainted</span> <span class="p">(</span><span class="mf">4.10.0</span><span class="o">-</span><span class="mi">14</span><span class="o">-</span><span class="n">generic</span><span class="p">)</span>
+<span class="p">[</span> <span class="mf">1727.775885</span><span class="p">]</span> <span class="n">REGS</span><span class="p">:</span> <span class="n">c000000fdfef79a0</span> <span class="n">TRAP</span><span class="p">:</span> <span class="mi">0901</span> <span class="n">Not</span> <span class="n">tainted</span> <span class="p">(</span><span class="mf">4.10</span><span class="o">.</span><span class="mi">0</span><span class="o">-</span><span class="mi">14</span><span class="o">-</span><span class="n">generic</span><span class="p">)</span>
<span class="p">[</span> <span class="mf">1727.775886</span><span class="p">]</span> <span class="n">MSR</span><span class="p">:</span> <span class="mi">9000000000009033</span> <span class="o">&lt;</span><span class="n">SF</span><span class="p">,</span><span class="n">HV</span><span class="p">,</span><span class="n">EE</span><span class="p">,</span><span class="n">ME</span><span class="p">,</span><span class="n">IR</span><span class="p">,</span><span class="n">DR</span><span class="p">,</span><span class="n">RI</span><span class="p">,</span><span class="n">LE</span><span class="o">&gt;</span>
<span class="p">[</span> <span class="mf">1727.775889</span><span class="p">]</span> <span class="n">CR</span><span class="p">:</span> <span class="mi">28024442</span> <span class="n">XER</span><span class="p">:</span> <span class="mi">20000000</span>
<span class="p">[</span> <span class="mf">1727.775890</span><span class="p">]</span> <span class="n">CFAR</span><span class="p">:</span> <span class="n">c00000000008472c</span> <span class="n">SOFTE</span><span class="p">:</span> <span class="mi">1</span>
@@ -761,20 +773,20 @@ value when fsp reset initiated by the hir.</p>
<p>With this fix ran fsp hir torture testcase in the above test
which is working fine.</p>
</li>
-<li><p>occ: Set return variable to correct value</p>
+<li><p class="first">occ: Set return variable to correct value</p>
<p>When entering this section of code rc will be zero. If fsp_mkmsg() fails
the code responsible for printing an error message won’t be set.
Resetting rc should allow for the error case to trigger if fsp_mkmsg
fails.</p>
</li>
-<li><p>capp: Fix hang when CAPP microcode LID is missing on FSP machine</p>
+<li><p class="first">capp: Fix hang when CAPP microcode LID is missing on FSP machine</p>
<p>When the LID is absent, we fail early with an error from
start_preload_resource. In that case, capp_ucode_info.load_result
isn’t set properly causing a subsequent capp_lid_download() to
call wait_for_resource_loaded() on something that isn’t being
loaded, thus hanging.</p>
</li>
-<li><p>FSP: Add check to detect FSP R/R inside fsp_sync_msg()</p>
+<li><p class="first">FSP: Add check to detect FSP R/R inside fsp_sync_msg()</p>
<p>OPAL sends MBOX message to FSP and updates message state from fsp_msg_queued
-&gt; fsp_msg_sent. fsp_sync_msg() queues message and waits until we get response
from FSP. During FSP R/R we move outstanding MBOX messages from msgq to rr_queue
@@ -783,12 +795,13 @@ inflight message state.</p>
<p>In extreme croner case where we sent message to FSP via fsp_sync_msg() path
and FSP R/R happens before getting respose from FSP, then we will endup waiting
in fsp_sync_msg() until everything becomes normal.</p>
-<dl class="simple">
-<dt>This patch adds fsp_in_rr() check to fsp_sync_msg() and return error to caller</dt><dd><p>if FSP is in R/R.</p>
+<dl class="docutils">
+<dt>This patch adds fsp_in_rr() check to fsp_sync_msg() and return error to caller</dt>
+<dd><p class="first last">if FSP is in R/R.</p>
</dd>
</dl>
</li>
-<li><p>FSP: Add check to detect FSP R/R inside fsp_sync_msg()</p>
+<li><p class="first">FSP: Add check to detect FSP R/R inside fsp_sync_msg()</p>
<p>OPAL sends MBOX message to FSP and updates message state from fsp_msg_queued
-&gt; fsp_msg_sent. fsp_sync_msg() queues message and waits until we get response
from FSP. During FSP R/R we move outstanding MBOX messages from msgq to rr_queue
@@ -797,33 +810,35 @@ inflight message state.</p>
<p>In extreme croner case where we sent message to FSP via fsp_sync_msg() path
and FSP R/R happens before getting respose from FSP, then we will endup waiting
in fsp_sync_msg() until everything becomes normal.</p>
-<dl class="simple">
-<dt>This patch adds fsp_in_rr() check to fsp_sync_msg() and return error to caller</dt><dd><p>if FSP is in R/R.</p>
+<dl class="docutils">
+<dt>This patch adds fsp_in_rr() check to fsp_sync_msg() and return error to caller</dt>
+<dd><p class="first last">if FSP is in R/R.</p>
</dd>
</dl>
</li>
-<li><p>capp: Fix hang when CAPP microcode LID is missing on FSP machine</p>
+<li><p class="first">capp: Fix hang when CAPP microcode LID is missing on FSP machine</p>
<p>When the LID is absent, we fail early with an error from
start_preload_resource. In that case, capp_ucode_info.load_result
isn’t set properly causing a subsequent capp_lid_download() to
call wait_for_resource_loaded() on something that isn’t being
loaded, thus hanging.</p>
</li>
-<li><p>FSP/CONSOLE: Do not free fsp_msg in error path</p>
+<li><p class="first">FSP/CONSOLE: Do not free fsp_msg in error path</p>
<p>as we reuse same msg to send next output message.</p>
</li>
-<li><p>platform/zz: Acknowledge OCC_LOAD mbox message in ZZ</p>
+<li><p class="first">platform/zz: Acknowledge OCC_LOAD mbox message in ZZ</p>
<p>In P9 FSP box, OCC image is pre-loaded. So do not handle the load
command and send SUCCESS to FSP on recieving OCC_LOAD mbox message.</p>
</li>
-<li><p>FSP/RTC: Improve error log</p></li>
+<li><p class="first">FSP/RTC: Improve error log</p>
+</li>
</ul>
</div>
<div class="section" id="astbmc-systems">
<h2>astbmc systems<a class="headerlink" href="#astbmc-systems" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-5.6.0.html#skiboot-5-6-0"><span class="std std-ref">skiboot-5.6.0</span></a>:</p>
<ul>
-<li><p>platforms/astbmc: Don’t validate model on palmetto</p>
+<li><p class="first">platforms/astbmc: Don’t validate model on palmetto</p>
<p>The platform isn’t compatible with palmetto until the root device-tree
node’s “model” property is NULL or “palmetto”. However, we could have
“TN71-BP012” for the property on palmetto.</p>
@@ -840,43 +855,48 @@ on palmetto, meaning we check the “compatible” property only.</p>
<h2>General<a class="headerlink" href="#general" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-5.7-rc2.html#skiboot-5-7-rc2"><span class="std std-ref">skiboot-5.7-rc2</span></a>:</p>
<ul>
-<li><p>core/pci: Fix mem-leak on fast-reboot</p>
+<li><p class="first">core/pci: Fix mem-leak on fast-reboot</p>
<p>Fast-reboot has a memory leak which causes the system to crash after about
250 fast-reboots. The patch fixes the memory leak.
The cause of the leak was the pci_device’s being freed, without freeing
the pci_slot within it.</p>
</li>
-<li><p>gcov: properly handle gard and pflash code coverage</p></li>
+<li><p class="first">gcov: properly handle gard and pflash code coverage</p>
+</li>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.6.0.html#skiboot-5-6-0"><span class="std std-ref">skiboot-5.6.0</span></a>:</p>
<ul>
-<li><p>Reduce log level on non-error log messages</p>
+<li><p class="first">Reduce log level on non-error log messages</p>
<p>90% of what we print isn’t useful to a normal user. This
dramatically reduces the amount of messages printed by
OPAL in normal circumstances.</p>
</li>
-<li><p>init: Silence messages and call ourselves “OPAL”</p></li>
-<li><p>psi: Switch to ESB mode later</p>
+<li><p class="first">init: Silence messages and call ourselves “OPAL”</p>
+</li>
+<li><p class="first">psi: Switch to ESB mode later</p>
<p>There’s an errata, if we switch to ESB mode before setting up
the various ESB mode related registers, a pending interrupts
can go wrong.</p>
</li>
-<li><p>lpc: Enable “new” SerIRQ mode</p></li>
-<li><p>hw/ipmi/ipmi-sel: missing newline in prlog warning</p></li>
-<li><p>p8-i2c OCC lock: fix locking in p9_i2c_bus_owner_change</p></li>
-<li><p>Convert important polling loops to spin at lowest SMT priority</p>
+<li><p class="first">lpc: Enable “new” SerIRQ mode</p>
+</li>
+<li><p class="first">hw/ipmi/ipmi-sel: missing newline in prlog warning</p>
+</li>
+<li><p class="first">p8-i2c OCC lock: fix locking in p9_i2c_bus_owner_change</p>
+</li>
+<li><p class="first">Convert important polling loops to spin at lowest SMT priority</p>
<p>The pattern of calling cpu_relax() inside a polling loop does
not suit the powerpc SMT priority instructions. Prefrred is to
set a low priority then spin until break condition is reached,
then restore priority.</p>
</li>
-<li><p>Improve cpu_idle when PM is disabled</p>
+<li><p class="first">Improve cpu_idle when PM is disabled</p>
<p>Split cpu_idle() into cpu_idle_delay() and cpu_idle_job() rather than
requesting the idle type as a function argument. Have those functions
provide a default polling (non-PM) implentation which spin at the
lowest SMT priority.</p>
</li>
-<li><p>core/fdt: Always add a reserve map</p>
+<li><p class="first">core/fdt: Always add a reserve map</p>
<p>Currently we skip adding the reserved ranges block to the generated
FDT blob if we are excluding the root node. This can result in a DTB
that dtc will barf on because the reserved memory ranges overlap with
@@ -924,7 +944,7 @@ the start of the dt_struct block. As an example:</p>
</pre></div>
</div>
</li>
-<li><p>hw/lpc-mbox: Use message registers for interrupts</p>
+<li><p class="first">hw/lpc-mbox: Use message registers for interrupts</p>
<p>Currently the BMC raises the interrupt using the BMC control register.
It does so on all accesses to the 16 â€data’ registers meaning that when
the BMC only wants to set the ATTN (on which we have interrupts enabled)
@@ -938,15 +958,15 @@ interrupts on the protocol defined â€response’ data byte.</p>
<h2>PCI<a class="headerlink" href="#pci" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-5.6.0.html#skiboot-5-6-0"><span class="std std-ref">skiboot-5.6.0</span></a>:</p>
<ul>
-<li><p>pci: Wait 20ms before checking presence detect on PCIe</p>
+<li><p class="first">pci: Wait 20ms before checking presence detect on PCIe</p>
<p>As the PHB presence logic has a debounce timer that can take
a while to settle.</p>
</li>
-<li><p>phb3+iov: Fixup support for config space filters</p>
+<li><p class="first">phb3+iov: Fixup support for config space filters</p>
<p>The filter should be called before the HW access and its
return value control whether to perform the access or not</p>
</li>
-<li><p>core/pci: Use PCI slot’s power facality in pci_enable_bridge()</p>
+<li><p class="first">core/pci: Use PCI slot’s power facality in pci_enable_bridge()</p>
<p>The current implmentation has incorrect assumptions: there is
always a PCI slot associated with root port and PCIe switch
downstream port and all of them are capable to change its
@@ -958,17 +978,17 @@ I2C slave devices used to control the power states on Tuleta.</p>
<p>In order to use the PCI slot’s methods to manage the power
states, this does:</p>
<ul class="simple">
-<li><p>Introduce PCI_SLOT_FLAG_ENFORCE, indicates the request operation
-is enforced to be applied.</p></li>
-<li><p>pci_enable_bridge() is split into 3 functions: pci_bridge_power_on()
+<li>Introduce PCI_SLOT_FLAG_ENFORCE, indicates the request operation
+is enforced to be applied.</li>
+<li>pci_enable_bridge() is split into 3 functions: pci_bridge_power_on()
to power it on; pci_enable_bridge() as a place holder and
-pci_bridge_wait_link() to wait the downstream link to come up.</p></li>
-<li><p>In pci_bridge_power_on(), the PCI slot’s specific power management
+pci_bridge_wait_link() to wait the downstream link to come up.</li>
+<li>In pci_bridge_power_on(), the PCI slot’s specific power management
methods are used if there is a PCI slot associated with the PCIe
-switch downstream port or root port.</p></li>
+switch downstream port or root port.</li>
</ul>
</li>
-<li><p>platforms/astbmc/slots.c: Allow comparison of bus numbers when matching slots</p>
+<li><p class="first">platforms/astbmc/slots.c: Allow comparison of bus numbers when matching slots</p>
<p>When matching devices on multiple down stream PLX busses we need to compare more
than just the device-id of the PCIe BDFN, so increase the mask to do so.</p>
</li>
@@ -978,13 +998,14 @@ than just the device-id of the PCIe BDFN, so increase the mask to do so.</p>
<h2>Debugging, Tests and simulators<a class="headerlink" href="#debugging-tests-and-simulators" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-5.7-rc2.html#skiboot-5-7-rc2"><span class="std std-ref">skiboot-5.7-rc2</span></a>:</p>
<ul>
-<li><p>boot_tests: add PFLASH_TO_COPY for OpenBMC</p></li>
-<li><p>travis: Add debian stretch and unstable</p>
+<li><p class="first">boot_tests: add PFLASH_TO_COPY for OpenBMC</p>
+</li>
+<li><p class="first">travis: Add debian stretch and unstable</p>
<p>At the moment, we mark them both as being able to fail, as we’re
hitting an assert in one of the unit tests on debian stretch, and
that hasn’t yet been chased down.</p>
</li>
-<li><p>core/backtrace: Serialise printing backtraces</p>
+<li><p class="first">core/backtrace: Serialise printing backtraces</p>
<p>Add a lock so that only one thread can print a backtrace at a time.
This should prevent multiple threads from garbaling each other’s
backtraces.</p>
@@ -992,18 +1013,19 @@ backtraces.</p>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.7-rc1.html#skiboot-5-7-rc1"><span class="std std-ref">skiboot-5.7-rc1</span></a>:</p>
<ul class="simple">
-<li><p>lpc: remove double LPC prefix from messages</p></li>
-<li><p>opal-ci/fetch-debian-jessie-installer: follow redirects
-Fixes some CI failures</p></li>
-<li><p>test/qemu-jessie: bail out fast on kernel panic</p></li>
-<li><p>test/qemu-jessie: dump boot log on failure</p></li>
-<li><p>travis: add fedora26</p></li>
-<li><p>xz: add fallthrough annotations to silence GCC7 warning</p></li>
+<li>lpc: remove double LPC prefix from messages</li>
+<li>opal-ci/fetch-debian-jessie-installer: follow redirects
+Fixes some CI failures</li>
+<li>test/qemu-jessie: bail out fast on kernel panic</li>
+<li>test/qemu-jessie: dump boot log on failure</li>
+<li>travis: add fedora26</li>
+<li>xz: add fallthrough annotations to silence GCC7 warning</li>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.6.0.html#skiboot-5-6-0"><span class="std std-ref">skiboot-5.6.0</span></a>:</p>
<ul>
-<li><p>boot-tests: add OpenBMC support</p></li>
-<li><p>boot_test.sh: Add SMC BMC support</p>
+<li><p class="first">boot-tests: add OpenBMC support</p>
+</li>
+<li><p class="first">boot_test.sh: Add SMC BMC support</p>
<p>Your BMC needs a special debug image flashed to use this, the exact
image and methods aren’t something I can publish here, but if you work
for IBM or SMC you can find out from the right sources.</p>
@@ -1017,8 +1039,9 @@ we don’t publicise too broadly (because Security Through Obscurity is
and we can’t scp, but we can anonymous rsync!</p>
<p>You also need a pflash binary to copy over.</p>
</li>
-<li><p>hdata_to_dt: Add PVR overrides to the usage text</p></li>
-<li><p>mambo: Add a reservation for the initramfs</p>
+<li><p class="first">hdata_to_dt: Add PVR overrides to the usage text</p>
+</li>
+<li><p class="first">mambo: Add a reservation for the initramfs</p>
<p>On most systems the initramfs is loaded inside the part of memory
reserved for the OS [0x0-0x30000000] and skiboot will never touch it.
On mambo it’s loaded at 0x80000000 and if you’re unlucky skiboot can
@@ -1027,43 +1050,43 @@ allocate over the top of it and corrupt the initramfs blob.</p>
memory since it’s marked as reserved, but the kernel might also free it
anyway.</p>
</li>
-<li><p>mambo: Update P9 PVR to reflect Scale out 24 core chips</p>
+<li><p class="first">mambo: Update P9 PVR to reflect Scale out 24 core chips</p>
<p>The P9 PVR bits 48:51 don’t indicate a revision but instead different
configurations. From BookIV we have:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 17%" />
-<col style="width: 83%" />
+<col width="17%" />
+<col width="83%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Bits</p></th>
-<th class="head"><p>Configuration</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Bits</th>
+<th class="head">Configuration</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>0</p></td>
-<td><p>Scale out 12 cores</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>0</td>
+<td>Scale out 12 cores</td>
</tr>
-<tr class="row-odd"><td><p>1</p></td>
-<td><p>Scale out 24 cores</p></td>
+<tr class="row-odd"><td>1</td>
+<td>Scale out 24 cores</td>
</tr>
-<tr class="row-even"><td><p>2</p></td>
-<td><p>Scale up 12 cores</p></td>
+<tr class="row-even"><td>2</td>
+<td>Scale up 12 cores</td>
</tr>
-<tr class="row-odd"><td><p>3</p></td>
-<td><p>Scale up 24 cores</p></td>
+<tr class="row-odd"><td>3</td>
+<td>Scale up 24 cores</td>
</tr>
</tbody>
</table>
<p>Skiboot will mostly the use “Scale out 24 core” configuration
(ie. SMT4 not SMT8) so reflect this in mambo.</p>
</li>
-<li><p>core: Move enable_mambo_console() into chip initialisation</p>
+<li><p class="first">core: Move enable_mambo_console() into chip initialisation</p>
<p>Rather than having a wart in main_cpu_entry() that initialises the mambo
console, we can move it into init_chips() which is where we discover that we’re
on mambo.</p>
</li>
-<li><p>mambo: Create multiple chips when we have multiple CPUs</p>
+<li><p class="first">mambo: Create multiple chips when we have multiple CPUs</p>
<p>Currently when we boot mambo with multiple CPUs, we create multiple CPU nodes in
the device tree, and each claims to be on a separate chip.</p>
<p>However we don’t create multiple xscom nodes, which means skiboot only knows
@@ -1078,7 +1101,7 @@ separate chip created. This then enables Linux to see multiple chips:</p>
</pre></div>
</div>
</li>
-<li><p>chip: Add support for discovering chips on mambo</p>
+<li><p class="first">chip: Add support for discovering chips on mambo</p>
<p>Currently the only way for skiboot to discover chips is by looking for xscom
nodes. But on mambo it’s currently not possible to create multiple xscom nodes,
which means we can only simulate a single chip system.</p>
@@ -1087,18 +1110,18 @@ node, and use that to instantiate multiple chips.</p>
<p>Add a check in init_chip() that we’re not clobbering an already initialised
chip, now that we have two places that initialise chips.</p>
</li>
-<li><p>mambo: Make xscom claim to be DD 2.0</p>
+<li><p class="first">mambo: Make xscom claim to be DD 2.0</p>
<p>In the mambo tcl we set the CPU version to DD 2.0, because mambo is not
bug compatible with DD 1.</p>
<p>But in xscom_read_cfam_chipid() we have a hard coded value, to work
around the lack of the f000f register, which claims to be P9 DD 1.0.</p>
<p>This doesn’t seem to cause crashes or anything, but at boot we do see:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">0.003893084</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">XSCOM</span><span class="p">:</span> <span class="n">chip</span> <span class="mh">0x0</span> <span class="n">at</span> <span class="mh">0x1a0000000000</span> <span class="p">[</span><span class="n">P9N</span> <span class="n">DD1</span><span class="mf">.0</span><span class="p">]</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">0.003893084</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">XSCOM</span><span class="p">:</span> <span class="n">chip</span> <span class="mh">0x0</span> <span class="n">at</span> <span class="mh">0x1a0000000000</span> <span class="p">[</span><span class="n">P9N</span> <span class="n">DD1</span><span class="o">.</span><span class="mi">0</span><span class="p">]</span>
</pre></div>
</div>
<p>So fix it to claim that the xscom is also DD 2.0 to match the CPU.</p>
</li>
-<li><p>mambo: Match whole string when looking up symbols with linsym/skisym</p>
+<li><p class="first">mambo: Match whole string when looking up symbols with linsym/skisym</p>
<p>linsym/skisym use a regex to match the symbol name, and accepts a
partial match against the entry in the symbol map, which can lead to
somewhat confusing results, eg:</p>
@@ -1117,8 +1140,9 @@ that the symbol has to match against the whole entry, eg:</p>
</pre></div>
</div>
</li>
-<li><p>Disable nap on P8 Mambo, public release has bugs</p></li>
-<li><p>mambo: Allow loading multiple CPIOs</p>
+<li><p class="first">Disable nap on P8 Mambo, public release has bugs</p>
+</li>
+<li><p class="first">mambo: Allow loading multiple CPIOs</p>
<p>Currently we have support for loading a single CPIO and telling Linux to
use it as the initrd. But the Linux code actually supports having
multiple CPIOs contiguously in memory, between initrd-start and end, and
@@ -1131,7 +1155,7 @@ filenames, but we could make it space, colon, whatever. Or we could add
a new environment variable entirely. The code also supports trimming
whitespace from the values, so you can have “cpio1, cpio2”.</p>
</li>
-<li><p>hdata/test: Add memory reservations to hdata_to_dt</p>
+<li><p class="first">hdata/test: Add memory reservations to hdata_to_dt</p>
<p>Currently memory reservations are parsed, but since they are not
processed until mem_region_init() they don’t appear in the output
device tree blob. Several bugs have been found with memory reservations
@@ -1145,7 +1169,7 @@ dtb to appear in standard out.</p>
<h2>pflash/libffs<a class="headerlink" href="#pflash-libffs" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-5.7-rc2.html#skiboot-5-7-rc2"><span class="std std-ref">skiboot-5.7-rc2</span></a>:</p>
<ul>
-<li><p>pflash option to retrieve PNOR partition flags</p>
+<li><p class="first">pflash option to retrieve PNOR partition flags</p>
<p>This commit extends pflash with an option to retrieve and print
information for a particular partition, including the content from
“pflash -i” and a verbose list of set miscellaneous flags. -i option
@@ -1156,20 +1180,20 @@ included in libflash/test.</p>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.6.0.html#skiboot-5-6-0"><span class="std std-ref">skiboot-5.6.0</span></a>:</p>
<ul>
-<li><p>libflash/libffs: Zero checksum words</p>
+<li><p class="first">libflash/libffs: Zero checksum words</p>
<p>On writing ffs entries to flash libffs doesn’t zero checksum words
before calculating the checksum across the entire structure. This causes
an inaccurate calculation of the checksum as it may calculate a checksum
on non-zero checksum bytes.</p>
</li>
-<li><p>libffs: Fix ffs_lookup_part() return value</p>
+<li><p class="first">libffs: Fix ffs_lookup_part() return value</p>
<p>It would return success when the part wasn’t found</p>
</li>
-<li><p>libflash/libffs: Correctly update the actual size of the partition</p>
+<li><p class="first">libflash/libffs: Correctly update the actual size of the partition</p>
<p>libffs has been updating FFS partition information in the wrong place
which leads to incomplete erases and corruption.</p>
</li>
-<li><p>libflash: Initialise entries list earlier</p>
+<li><p class="first">libflash: Initialise entries list earlier</p>
<p>In the bail-out path we call ffs_close() to tear down the partially
initialised ffs_handle. ffs_close() expects the entries list to be
initialised so we need to do that earlier to prevent a null pointer
@@ -1182,7 +1206,7 @@ dereference.</p>
<p>mbox-flash is the emerging standard way of talking to host PNOR flash
on POWER9 systems.</p>
<ul>
-<li><p>libflash/mbox-flash: Implement MARK_WRITE_ERASED mbox call</p>
+<li><p class="first">libflash/mbox-flash: Implement MARK_WRITE_ERASED mbox call</p>
<p>Version two of the mbox-flash protocol defines a new command:
MARK_WRITE_ERASED.</p>
<p>This command provides a simple way to mark a region of flash as all 0xff
@@ -1192,7 +1216,7 @@ the BMC to deal with the flash correctly, however in v1 it was ambiguous
what a client should do if the flash should be erased but not actually
written to. This allows of a optimal path to resolve this problem.</p>
</li>
-<li><p>libflash/mbox-flash: Update to V2 of the protocol</p>
+<li><p class="first">libflash/mbox-flash: Update to V2 of the protocol</p>
<p>Updated version 2 of the protocol can be found at:
<a class="reference external" href="https://github.com/openbmc/mboxbridge/blob/master/Documentation/mbox_protocol.md">https://github.com/openbmc/mboxbridge/blob/master/Documentation/mbox_protocol.md</a></p>
<p>This commit changes mbox-flash such that it will preferentially talk
@@ -1203,7 +1227,7 @@ consistency and usability.
Version two includes more attention bits - these are now dealt with at a
simple level.</p>
</li>
-<li><p>libflash/mbox-flash: Implement MARK_WRITE_ERASED mbox call</p>
+<li><p class="first">libflash/mbox-flash: Implement MARK_WRITE_ERASED mbox call</p>
<p>Version two of the mbox-flash protocol defines a new command:
MARK_WRITE_ERASED.</p>
<p>This command provides a simple way to mark a region of flash as all 0xff
@@ -1213,7 +1237,7 @@ the BMC to deal with the flash correctly, however in v1 it was ambiguous
what a client should do if the flash should be erased but not actually
written to. This allows of a optimal path to resolve this problem.</p>
</li>
-<li><p>libflash/mbox-flash: Update to V2 of the protocol</p>
+<li><p class="first">libflash/mbox-flash: Update to V2 of the protocol</p>
<p>Updated version 2 of the protocol can be found at:
<a class="reference external" href="https://github.com/openbmc/mboxbridge/blob/master/Documentation/mbox_protocol.md">https://github.com/openbmc/mboxbridge/blob/master/Documentation/mbox_protocol.md</a></p>
<p>This commit changes mbox-flash such that it will preferentially talk
@@ -1224,7 +1248,7 @@ consistency and usability.
Version two includes more attention bits - these are now dealt with at a
simple level.</p>
</li>
-<li><p>hw/lpc-mbox: Use message registers for interrupts</p>
+<li><p class="first">hw/lpc-mbox: Use message registers for interrupts</p>
<p>Currently the BMC raises the interrupt using the BMC control register.
It does so on all accesses to the 16 â€data’ registers meaning that when
the BMC only wants to set the ATTN (on which we have interrupts enabled)
@@ -1237,86 +1261,86 @@ interrupts on the protocol defined â€response’ data byte.</p>
<div class="section" id="contributors">
<h2>Contributors<a class="headerlink" href="#contributors" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Processed 232 csets from 29 developers.</p></li>
-<li><p>1 employer found</p></li>
-<li><p>A total of 13043 lines added, 2517 removed (delta 10526)</p></li>
+<li>Processed 232 csets from 29 developers.</li>
+<li>1 employer found</li>
+<li>A total of 13043 lines added, 2517 removed (delta 10526)</li>
</ul>
<p>Extending the analysis done for some previous releases, we can see our trends
in code review across versions:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 14%" />
-<col style="width: 12%" />
-<col style="width: 16%" />
-<col style="width: 18%" />
-<col style="width: 18%" />
-<col style="width: 22%" />
+<col width="14%" />
+<col width="12%" />
+<col width="16%" />
+<col width="18%" />
+<col width="18%" />
+<col width="22%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Release</p></th>
-<th class="head"><p>csets</p></th>
-<th class="head"><p>Ack %</p></th>
-<th class="head"><p>Reviews %</p></th>
-<th class="head"><p>Tested %</p></th>
-<th class="head"><p>Reported %</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Release</th>
+<th class="head">csets</th>
+<th class="head">Ack %</th>
+<th class="head">Reviews %</th>
+<th class="head">Tested %</th>
+<th class="head">Reported %</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>5.0</p></td>
-<td><p>329</p></td>
-<td><p>15 (5%)</p></td>
-<td><p>20 (6%)</p></td>
-<td><p>1 (0%)</p></td>
-<td><p>0 (0%)</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.1</p></td>
-<td><p>372</p></td>
-<td><p>13 (3%)</p></td>
-<td><p>38 (10%)</p></td>
-<td><p>1 (0%)</p></td>
-<td><p>4 (1%)</p></td>
-</tr>
-<tr class="row-even"><td><p>5.2-rc1</p></td>
-<td><p>334</p></td>
-<td><p>20 (6%)</p></td>
-<td><p>34 (10%)</p></td>
-<td><p>6 (2%)</p></td>
-<td><p>11 (3%)</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.3-rc1</p></td>
-<td><p>302</p></td>
-<td><p>36 (12%)</p></td>
-<td><p>53 (18%)</p></td>
-<td><p>4 (1%)</p></td>
-<td><p>5 (2%)</p></td>
-</tr>
-<tr class="row-even"><td><p>5.4</p></td>
-<td><p>361</p></td>
-<td><p>16 (4%)</p></td>
-<td><p>28 (8%)</p></td>
-<td><p>1 (0%)</p></td>
-<td><p>9 (2%)</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.5</p></td>
-<td><p>408</p></td>
-<td><p>11 (3%)</p></td>
-<td><p>48 (12%)</p></td>
-<td><p>14 (3%)</p></td>
-<td><p>10 (2%)</p></td>
-</tr>
-<tr class="row-even"><td><p>5.6</p></td>
-<td><p>87</p></td>
-<td><p>12 (14%)</p></td>
-<td><p>6 (7%)</p></td>
-<td><p>5 (6%)</p></td>
-<td><p>2 (2%)</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.7</p></td>
-<td><p>232</p></td>
-<td><p>30 (13%)</p></td>
-<td><p>32 (14%)</p></td>
-<td><p>5 (2%)</p></td>
-<td><p>2 (1%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>5.0</td>
+<td>329</td>
+<td>15 (5%)</td>
+<td>20 (6%)</td>
+<td>1 (0%)</td>
+<td>0 (0%)</td>
+</tr>
+<tr class="row-odd"><td>5.1</td>
+<td>372</td>
+<td>13 (3%)</td>
+<td>38 (10%)</td>
+<td>1 (0%)</td>
+<td>4 (1%)</td>
+</tr>
+<tr class="row-even"><td>5.2-rc1</td>
+<td>334</td>
+<td>20 (6%)</td>
+<td>34 (10%)</td>
+<td>6 (2%)</td>
+<td>11 (3%)</td>
+</tr>
+<tr class="row-odd"><td>5.3-rc1</td>
+<td>302</td>
+<td>36 (12%)</td>
+<td>53 (18%)</td>
+<td>4 (1%)</td>
+<td>5 (2%)</td>
+</tr>
+<tr class="row-even"><td>5.4</td>
+<td>361</td>
+<td>16 (4%)</td>
+<td>28 (8%)</td>
+<td>1 (0%)</td>
+<td>9 (2%)</td>
+</tr>
+<tr class="row-odd"><td>5.5</td>
+<td>408</td>
+<td>11 (3%)</td>
+<td>48 (12%)</td>
+<td>14 (3%)</td>
+<td>10 (2%)</td>
+</tr>
+<tr class="row-even"><td>5.6</td>
+<td>87</td>
+<td>12 (14%)</td>
+<td>6 (7%)</td>
+<td>5 (6%)</td>
+<td>2 (2%)</td>
+</tr>
+<tr class="row-odd"><td>5.7</td>
+<td>232</td>
+<td>30 (13%)</td>
+<td>32 (14%)</td>
+<td>5 (2%)</td>
+<td>2 (1%)</td>
</tr>
</tbody>
</table>
@@ -1324,268 +1348,268 @@ in code review across versions:</p>
ever on both, as well as being right up there on absolute numbers.</p>
<div class="section" id="developers-with-the-most-changesets">
<h3>Developers with the most changesets<a class="headerlink" href="#developers-with-the-most-changesets" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>41</p></td>
-<td><p>(17.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>41</td>
+<td>(17.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>31</p></td>
-<td><p>(13.4%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>31</td>
+<td>(13.4%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>28</p></td>
-<td><p>(12.1%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>28</td>
+<td>(12.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>18</p></td>
-<td><p>(7.8%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>18</td>
+<td>(7.8%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>18</p></td>
-<td><p>(7.8%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>18</td>
+<td>(7.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Jeremy Kerr</p></td>
-<td><p>12</p></td>
-<td><p>(5.2%)</p></td>
+<tr class="row-odd"><td>Jeremy Kerr</td>
+<td>12</td>
+<td>(5.2%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>11</p></td>
-<td><p>(4.7%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>11</td>
+<td>(4.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>10</p></td>
-<td><p>(4.3%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>10</td>
+<td>(4.3%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>9</p></td>
-<td><p>(3.9%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>9</td>
+<td>(3.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Ellerman</p></td>
-<td><p>9</p></td>
-<td><p>(3.9%)</p></td>
+<tr class="row-odd"><td>Michael Ellerman</td>
+<td>9</td>
+<td>(3.9%)</td>
</tr>
-<tr class="row-even"><td><p>Madhavan Srinivasan</p></td>
-<td><p>7</p></td>
-<td><p>(3.0%)</p></td>
+<tr class="row-even"><td>Madhavan Srinivasan</td>
+<td>7</td>
+<td>(3.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>6</p></td>
-<td><p>(2.6%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>6</td>
+<td>(2.6%)</td>
</tr>
-<tr class="row-even"><td><p>Christophe Lombard</p></td>
-<td><p>5</p></td>
-<td><p>(2.2%)</p></td>
+<tr class="row-even"><td>Christophe Lombard</td>
+<td>5</td>
+<td>(2.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Shilpasri G Bhat</p></td>
-<td><p>5</p></td>
-<td><p>(2.2%)</p></td>
+<tr class="row-odd"><td>Shilpasri G Bhat</td>
+<td>5</td>
+<td>(2.2%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>3</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>3</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Nicholas Piggin</p></td>
-<td><p>3</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-odd"><td>Nicholas Piggin</td>
+<td>3</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>2</p></td>
-<td><p>(0.9%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>2</td>
+<td>(0.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Anju T Sudhakar</p></td>
-<td><p>2</p></td>
-<td><p>(0.9%)</p></td>
+<tr class="row-odd"><td>Anju T Sudhakar</td>
+<td>2</td>
+<td>(0.9%)</td>
</tr>
-<tr class="row-even"><td><p>Hemant Kumar</p></td>
-<td><p>2</p></td>
-<td><p>(0.9%)</p></td>
+<tr class="row-even"><td>Hemant Kumar</td>
+<td>2</td>
+<td>(0.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Matt Brown</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Matt Brown</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Tritz</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Michael Tritz</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Balbir Singh</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Balbir Singh</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Frederic Barrat</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Frederic Barrat</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Jeffery</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Andrew Jeffery</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Pridhiviraj Paidipeddi</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Reza Arbab</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Reza Arbab</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Suraj Jitindar Singh</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Suraj Jitindar Singh</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Vaibhav Jain</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Vaibhav Jain</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-changed-lines">
<h3>Developers with the most changed lines<a class="headerlink" href="#developers-with-the-most-changed-lines" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Hemant Kumar</p></td>
-<td><p>3056</p></td>
-<td><p>(23.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Hemant Kumar</td>
+<td>3056</td>
+<td>(23.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>1826</p></td>
-<td><p>(13.7%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>1826</td>
+<td>(13.7%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>1348</p></td>
-<td><p>(10.1%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>1348</td>
+<td>(10.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Christophe Lombard</p></td>
-<td><p>937</p></td>
-<td><p>(7.0%)</p></td>
+<tr class="row-odd"><td>Christophe Lombard</td>
+<td>937</td>
+<td>(7.0%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>770</p></td>
-<td><p>(5.8%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>770</td>
+<td>(5.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Madhavan Srinivasan</p></td>
-<td><p>755</p></td>
-<td><p>(5.7%)</p></td>
+<tr class="row-odd"><td>Madhavan Srinivasan</td>
+<td>755</td>
+<td>(5.7%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>731</p></td>
-<td><p>(5.5%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>731</td>
+<td>(5.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>674</p></td>
-<td><p>(5.1%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>674</td>
+<td>(5.1%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>477</p></td>
-<td><p>(3.6%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>477</td>
+<td>(3.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>414</p></td>
-<td><p>(3.1%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>414</td>
+<td>(3.1%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>396</p></td>
-<td><p>(3.0%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>396</td>
+<td>(3.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>336</p></td>
-<td><p>(2.5%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>336</td>
+<td>(2.5%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>308</p></td>
-<td><p>(2.3%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>308</td>
+<td>(2.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>300</p></td>
-<td><p>(2.3%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>300</td>
+<td>(2.3%)</td>
</tr>
-<tr class="row-even"><td><p>Anju T Sudhakar</p></td>
-<td><p>300</p></td>
-<td><p>(2.3%)</p></td>
+<tr class="row-even"><td>Anju T Sudhakar</td>
+<td>300</td>
+<td>(2.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Tritz</p></td>
-<td><p>167</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-odd"><td>Michael Tritz</td>
+<td>167</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Barrat</p></td>
-<td><p>113</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-even"><td>Frederic Barrat</td>
+<td>113</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Nicholas Piggin</p></td>
-<td><p>93</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-odd"><td>Nicholas Piggin</td>
+<td>93</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>76</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>76</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Ellerman</p></td>
-<td><p>66</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-odd"><td>Michael Ellerman</td>
+<td>66</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Suraj Jitindar Singh</p></td>
-<td><p>59</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Suraj Jitindar Singh</td>
+<td>59</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>53</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>53</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Joel Stanley</p></td>
-<td><p>20</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-even"><td>Joel Stanley</td>
+<td>20</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Balbir Singh</p></td>
-<td><p>12</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-odd"><td>Balbir Singh</td>
+<td>12</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Reza Arbab</p></td>
-<td><p>10</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-even"><td>Reza Arbab</td>
+<td>10</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaibhav Jain</p></td>
-<td><p>9</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-odd"><td>Vaibhav Jain</td>
+<td>9</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>2</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>2</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Matt Brown</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Matt Brown</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Jeffery</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Andrew Jeffery</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
</tbody>
</table>
@@ -1593,46 +1617,46 @@ ever on both, as well as being right up there on absolute numbers.</p>
<div class="section" id="developers-with-the-most-signoffs">
<h3>Developers with the most signoffs<a class="headerlink" href="#developers-with-the-most-signoffs" title="Permalink to this headline">¶</a></h3>
<p>(total 242)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>201</p></td>
-<td><p>(83.1%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>201</td>
+<td>(83.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>29</p></td>
-<td><p>(12.0%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>29</td>
+<td>(12.0%)</td>
</tr>
-<tr class="row-even"><td><p>Madhavan Srinivasan</p></td>
-<td><p>4</p></td>
-<td><p>(1.7%)</p></td>
+<tr class="row-even"><td>Madhavan Srinivasan</td>
+<td>4</td>
+<td>(1.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Suraj Jitindar Singh</p></td>
-<td><p>3</p></td>
-<td><p>(1.2%)</p></td>
+<tr class="row-odd"><td>Suraj Jitindar Singh</td>
+<td>3</td>
+<td>(1.2%)</td>
</tr>
-<tr class="row-even"><td><p>Anju T Sudhakar</p></td>
-<td><p>2</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-even"><td>Anju T Sudhakar</td>
+<td>2</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Hemant Kumar</p></td>
-<td><p>2</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-odd"><td>Hemant Kumar</td>
+<td>2</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
</tbody>
</table>
@@ -1640,54 +1664,54 @@ ever on both, as well as being right up there on absolute numbers.</p>
<div class="section" id="developers-with-the-most-reviews">
<h3>Developers with the most reviews<a class="headerlink" href="#developers-with-the-most-reviews" title="Permalink to this headline">¶</a></h3>
<p>(total 32)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>8</p></td>
-<td><p>(25.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>8</td>
+<td>(25.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>7</p></td>
-<td><p>(21.9%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>7</td>
+<td>(21.9%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>5</p></td>
-<td><p>(15.6%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>5</td>
+<td>(15.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Frederic Barrat</p></td>
-<td><p>5</p></td>
-<td><p>(15.6%)</p></td>
+<tr class="row-odd"><td>Frederic Barrat</td>
+<td>5</td>
+<td>(15.6%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Jeffery</p></td>
-<td><p>2</p></td>
-<td><p>(6.2%)</p></td>
+<tr class="row-even"><td>Andrew Jeffery</td>
+<td>2</td>
+<td>(6.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Gavin Shan</p></td>
-<td><p>2</p></td>
-<td><p>(6.2%)</p></td>
+<tr class="row-odd"><td>Gavin Shan</td>
+<td>2</td>
+<td>(6.2%)</td>
</tr>
-<tr class="row-even"><td><p>Joel Stanley</p></td>
-<td><p>1</p></td>
-<td><p>(3.1%)</p></td>
+<tr class="row-even"><td>Joel Stanley</td>
+<td>1</td>
+<td>(3.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>1</p></td>
-<td><p>(3.1%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>1</td>
+<td>(3.1%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>1</p></td>
-<td><p>(3.1%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>1</td>
+<td>(3.1%)</td>
</tr>
</tbody>
</table>
@@ -1695,34 +1719,34 @@ ever on both, as well as being right up there on absolute numbers.</p>
<div class="section" id="developers-with-the-most-test-credits">
<h3>Developers with the most test credits<a class="headerlink" href="#developers-with-the-most-test-credits" title="Permalink to this headline">¶</a></h3>
<p>(total 5)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 70%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="70%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>2</p></td>
-<td><p>(40.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>2</td>
+<td>(40.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>1</p></td>
-<td><p>(20.0%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>1</td>
+<td>(20.0%)</td>
</tr>
-<tr class="row-even"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>1</p></td>
-<td><p>(20.0%)</p></td>
+<tr class="row-even"><td>Ananth N Mavinakayanahalli</td>
+<td>1</td>
+<td>(20.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Ellerman</p></td>
-<td><p>1</p></td>
-<td><p>(20.0%)</p></td>
+<tr class="row-odd"><td>Michael Ellerman</td>
+<td>1</td>
+<td>(20.0%)</td>
</tr>
</tbody>
</table>
@@ -1730,34 +1754,34 @@ ever on both, as well as being right up there on absolute numbers.</p>
<div class="section" id="developers-who-gave-the-most-tested-by-credits">
<h3>Developers who gave the most tested-by credits<a class="headerlink" href="#developers-who-gave-the-most-tested-by-credits" title="Permalink to this headline">¶</a></h3>
<p>(total 5)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>2</p></td>
-<td><p>(40.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>2</td>
+<td>(40.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Vasant Hegde</p></td>
-<td><p>1</p></td>
-<td><p>(20.0%)</p></td>
+<tr class="row-odd"><td>Vasant Hegde</td>
+<td>1</td>
+<td>(20.0%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>1</p></td>
-<td><p>(20.0%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>1</td>
+<td>(20.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Ellerman</p></td>
-<td><p>1</p></td>
-<td><p>(20.0%)</p></td>
+<tr class="row-odd"><td>Michael Ellerman</td>
+<td>1</td>
+<td>(20.0%)</td>
</tr>
</tbody>
</table>
@@ -1765,26 +1789,26 @@ ever on both, as well as being right up there on absolute numbers.</p>
<div class="section" id="developers-with-the-most-report-credits">
<h3>Developers with the most report credits<a class="headerlink" href="#developers-with-the-most-report-credits" title="Permalink to this headline">¶</a></h3>
<p>(total 2)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>1</p></td>
-<td><p>(50.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>1</td>
+<td>(50.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Alastair D’Silva</p></td>
-<td><p>1</p></td>
-<td><p>(50.0%)</p></td>
+<tr class="row-odd"><td>Alastair D’Silva</td>
+<td>1</td>
+<td>(50.0%)</td>
</tr>
</tbody>
</table>
@@ -1792,26 +1816,26 @@ ever on both, as well as being right up there on absolute numbers.</p>
<div class="section" id="developers-who-gave-the-most-report-credits">
<h3>Developers who gave the most report credits<a class="headerlink" href="#developers-who-gave-the-most-report-credits" title="Permalink to this headline">¶</a></h3>
<p>(total 2)</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>1</p></td>
-<td><p>(50.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>1</td>
+<td>(50.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>1</p></td>
-<td><p>(50.0%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>1</td>
+<td>(50.0%)</td>
</tr>
</tbody>
</table>
@@ -1820,7 +1844,6 @@ ever on both, as well as being right up there on absolute numbers.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -1873,15 +1896,17 @@ ever on both, as well as being right up there on absolute numbers.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -1898,15 +1923,14 @@ ever on both, as well as being right up there on absolute numbers.</p>
<li class="right" >
<a href="skiboot-5.6.0-rc2.html" title="skiboot-5.6.0-rc2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.7</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.8-rc1.html b/doc/release-notes/skiboot-5.8-rc1.html
index 771267f..432f865 100644
--- a/doc/release-notes/skiboot-5.8-rc1.html
+++ b/doc/release-notes/skiboot-5.8-rc1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.8-rc1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.8-rc1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.8.html" title="skiboot-5.8"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.8-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -61,18 +62,18 @@ bringup efforts.</p>
<div class="section" id="new-features">
<h2>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>sensors: occ: Add support to clear sensor groups</p>
+<li><p class="first">sensors: occ: Add support to clear sensor groups</p>
<p>Adds a generic API to clear sensor groups. OCC inband sensor groups
such as CSM, Profiler and Job Scheduler can be cleared using this API.
It will clear the min/max of all sensors belonging to OCC sensor
groups.</p>
</li>
-<li><p>sensors: occ: Add CSM_{min/max} sensors</p>
+<li><p class="first">sensors: occ: Add CSM_{min/max} sensors</p>
<p>HWMON’s lowest/highest attribute is used by CSM agent, so map min/max
device-tree properties “sensor-data-min” and “sensor-data-max” to
the min/max of CSM.</p>
</li>
-<li><p>sensors: occ: Add support for OCC inband sensors</p>
+<li><p class="first">sensors: occ: Add support for OCC inband sensors</p>
<p>Add support to parse and export OCC inband sensors which are copied
by OCC to main memory in P9. Each OCC writes three buffers which
includes one names buffer for sensor meta data and two buffers for
@@ -83,29 +84,29 @@ can be read from the other buffer. The sensors are updated every
<code class="docutils literal notranslate"><span class="pre">/ibm,opal/sensors</span></code> device-tree node which can be exported by the
ibmpowernv-hwmon driver in Linux.</p>
</li>
-<li><p>psr: occ: Add support to change power-shifting-ratio</p>
+<li><p class="first">psr: occ: Add support to change power-shifting-ratio</p>
<p>Add support to set the CPU-GPU power shifting ratio which is used by
the OCC power capping algorithm. PSR value of 100 takes all power away
from CPU first and a PSR value of 0 caps GPU first.</p>
</li>
-<li><p>powercap: occ: Add a generic powercap framework</p>
+<li><p class="first">powercap: occ: Add a generic powercap framework</p>
<p>This patch adds a generic powercap framework and exports OCC powercap
sensors using which system powercap can be set inband through OPAL-OCC
command-response interface.</p>
</li>
-<li><p>phb4: Enable PCI peer-to-peer</p>
+<li><p class="first">phb4: Enable PCI peer-to-peer</p>
<p>P9 supports PCI peer-to-peer: a PCI device can write directly to the
mmio space of another PCI device. It completely by-passes the CPU.</p>
<p>It requires some configuration on the PHBs involved:</p>
<ol class="arabic simple">
-<li><p>on the initiating side, the address for the read/write operation is
+<li>on the initiating side, the address for the read/write operation is
in the mmio space of the target, i.e. well outside the range normally
-allowed. So we disable range-checking on the TVT entry in bypass mode.</p></li>
-<li><p>on the target side, we need to explicitly enable p2p by setting a
+allowed. So we disable range-checking on the TVT entry in bypass mode.</li>
+<li>on the target side, we need to explicitly enable p2p by setting a
bit in a configuration register. It has the side-effect of reserving
an outbound (as seen from the CPU) store queue for p2p. Therefore we
only enable p2p on the PHBs using it, as we don’t want to waste the
-resource if we don’t have to.</p></li>
+resource if we don’t have to.</li>
</ol>
<p>P9 supports p2p mmio writes. Reads are currently only supported if the
two devices are under the same PHB but that is expected to change in
@@ -114,19 +115,21 @@ configuration, so we report an error for the time being.</p>
<p>The patch adds a new OPAL call to allow the OS to declare a p2p
(initiator, target) pair.</p>
</li>
-<li><p>NX 842 and GZIP support on POWER9</p></li>
+<li><p class="first">NX 842 and GZIP support on POWER9</p>
+</li>
</ul>
</div>
<div class="section" id="power9-dd2">
<h2>POWER9 DD2<a class="headerlink" href="#power9-dd2" title="Permalink to this headline">¶</a></h2>
<p>Further support for POWER9 DD2 revision chips. Notable changes include:</p>
<ul>
-<li><p>xscom: Grab P9 DD2 revision level</p></li>
-<li><p>vas: Set mmio enable bits in DD2</p>
+<li><p class="first">xscom: Grab P9 DD2 revision level</p>
+</li>
+<li><p class="first">vas: Set mmio enable bits in DD2</p>
<p>POWER9 DD2 added some new “enable” bits that must be set for VAS to
work. These bits were unused in DD1.</p>
</li>
-<li><p>hdat: Add POWER9 DD2.0 specific pa_features</p>
+<li><p class="first">hdat: Add POWER9 DD2.0 specific pa_features</p>
<p>Same as the default but with TM off.</p>
</li>
</ul>
@@ -134,20 +137,22 @@ work. These bits were unused in DD1.</p>
<div class="section" id="power9">
<h2>POWER9<a class="headerlink" href="#power9" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Base NPU2 support on POWER9 DD2</p></li>
-<li><p>hdata/i2c: Work around broken I2C array version</p>
+<li><p class="first">Base NPU2 support on POWER9 DD2</p>
+</li>
+<li><p class="first">hdata/i2c: Work around broken I2C array version</p>
<p>Work around a bug in the I2C devices array that shows the
array version as being v2 when only the v1 data is populated.</p>
</li>
-<li><p>Recognize the 2s2u zz platform</p>
+<li><p class="first">Recognize the 2s2u zz platform</p>
<p>OPAL currently doesn’t know about the 2s2u zz. It recognizes such a
box as a generic BMC machine and fails to boot. Add the 2s2u as a
supported platform.</p>
<p>There will subsequently be a 2s2u-L system which may have a different
compatible property, which will need to be handled later.</p>
</li>
-<li><p>hdata/spira: POWER9 NX isn’t software compatible with P7/P8 NX, don’t claim so</p></li>
-<li><p>NX: Add P9 NX support for gzip compression engine</p>
+<li><p class="first">hdata/spira: POWER9 NX isn’t software compatible with P7/P8 NX, don’t claim so</p>
+</li>
+<li><p class="first">NX: Add P9 NX support for gzip compression engine</p>
<p>Power 9 introduces NX gzip compression engine. This patch adds gzip
compression support in NX. Virtual Accelerator Switch (VAS) is used to
access NX gzip engine and the channel configuration will be done with
@@ -159,33 +164,41 @@ also enables other registers to enable / disable the engine.</p>
<p>Creates the following device-tree entries to provide RxFIFO address,
RxFIFO size, Fifo priority, lpid, pid and tid values so that kernel
can drive P9 NX gzip engine.</p>
-<dl>
-<dt>The following nodes are located under an xscom node: ::</dt><dd><blockquote>
+<dl class="docutils">
+<dt>The following nodes are located under an xscom node: ::</dt>
+<dd><blockquote class="first">
<div><p>/xscom&#64;&lt;xscom_addr&gt;/nx&#64;&lt;nx_addr&gt;</p>
<p>/ibm,gzip-high-fifo : High priority gzip RxFIFO
/ibm,gzip-normal-fifo : Normal priority gzip RxFIFO</p>
</div></blockquote>
<p>Each RxFIFO node contain:s</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">compatible</span></code></dt><dd><p><code class="docutils literal notranslate"><span class="pre">ibm,p9-nx-gzip</span></code></p>
+<dl class="last docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">compatible</span></code></dt>
+<dd><p class="first last"><code class="docutils literal notranslate"><span class="pre">ibm,p9-nx-gzip</span></code></p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">priority</span></code></dt><dd><p>High or Normal</p>
+<dt><code class="docutils literal notranslate"><span class="pre">priority</span></code></dt>
+<dd><p class="first last">High or Normal</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">rx-fifo-address</span></code></dt><dd><p>RxFIFO address</p>
+<dt><code class="docutils literal notranslate"><span class="pre">rx-fifo-address</span></code></dt>
+<dd><p class="first last">RxFIFO address</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">rx-fifo-size</span></code></dt><dd><p>RxFIFO size</p>
+<dt><code class="docutils literal notranslate"><span class="pre">rx-fifo-size</span></code></dt>
+<dd><p class="first last">RxFIFO size</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">lpid</span></code></dt><dd><p>0xfff (1’s for 12 bits in UMAC notify match register)</p>
+<dt><code class="docutils literal notranslate"><span class="pre">lpid</span></code></dt>
+<dd><p class="first last">0xfff (1’s for 12 bits in UMAC notify match register)</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">pid</span></code></dt><dd><p>gzip coprocessor type</p>
+<dt><code class="docutils literal notranslate"><span class="pre">pid</span></code></dt>
+<dd><p class="first last">gzip coprocessor type</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">tid</span></code></dt><dd><p>counter for gzip</p>
+<dt><code class="docutils literal notranslate"><span class="pre">tid</span></code></dt>
+<dd><p class="first last">counter for gzip</p>
</dd>
</dl>
</dd>
</dl>
</li>
-<li><p>NX: Add P9 NX support for 842 compression engine</p>
+<li><p class="first">NX: Add P9 NX support for 842 compression engine</p>
<p>This patch adds changes needed for 842 compression engine on power 9.
Virtual Accelerator Switch (VAS) is used to access NX 842 engine on P9
and the channel setup will be done with receive FIFO. So RxFIFO
@@ -201,36 +214,45 @@ values so that kernel can drive P9 NX 842 engine.</p>
<blockquote>
<div><p>The following nodes are located under an xscom node:
<code class="docutils literal notranslate"><span class="pre">/xscom&#64;&lt;xscom_addr&gt;/nx&#64;&lt;nx_addr&gt;</span></code></p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">/ibm,842-high-fifo</span></code></dt><dd><p>High priority 842 RxFIFO</p>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">/ibm,842-high-fifo</span></code></dt>
+<dd><p class="first last">High priority 842 RxFIFO</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">/ibm,842-normal-fifo</span></code></dt><dd><p>Normal priority 842 RxFIFO</p>
+<dt><code class="docutils literal notranslate"><span class="pre">/ibm,842-normal-fifo</span></code></dt>
+<dd><p class="first last">Normal priority 842 RxFIFO</p>
</dd>
</dl>
<p>Each RxFIFO node contains:</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">compatible</span></code></dt><dd><p>ibm,p9-nx-842</p>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">compatible</span></code></dt>
+<dd><p class="first last">ibm,p9-nx-842</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">priority</span></code></dt><dd><p>High or Normal</p>
+<dt><code class="docutils literal notranslate"><span class="pre">priority</span></code></dt>
+<dd><p class="first last">High or Normal</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">rx-fifo-address</span></code></dt><dd><p>RxFIFO address</p>
+<dt><code class="docutils literal notranslate"><span class="pre">rx-fifo-address</span></code></dt>
+<dd><p class="first last">RxFIFO address</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">rx-fifo-size</span></code></dt><dd><p>RXFIFO size</p>
+<dt><code class="docutils literal notranslate"><span class="pre">rx-fifo-size</span></code></dt>
+<dd><p class="first last">RXFIFO size</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">lpid</span></code></dt><dd><p>0xfff (1’s for 12 bits set in UMAC notify match register)</p>
+<dt><code class="docutils literal notranslate"><span class="pre">lpid</span></code></dt>
+<dd><p class="first last">0xfff (1’s for 12 bits set in UMAC notify match register)</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">pid</span></code></dt><dd><p>842 coprocessor type</p>
+<dt><code class="docutils literal notranslate"><span class="pre">pid</span></code></dt>
+<dd><p class="first last">842 coprocessor type</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">tid</span></code></dt><dd><p>Counter for 842</p>
+<dt><code class="docutils literal notranslate"><span class="pre">tid</span></code></dt>
+<dd><p class="first last">Counter for 842</p>
</dd>
</dl>
</div></blockquote>
</li>
-<li><p>vas: Create MMIO device tree node</p>
+<li><p class="first">vas: Create MMIO device tree node</p>
<p>Create a device tree node for VAS and add properties that Linux
will need to configure/use VAS.</p>
</li>
-<li><p>opal: Extract sw checkstop fir address from HDAT.</p>
+<li><p class="first">opal: Extract sw checkstop fir address from HDAT.</p>
<p>Extract sw checkstop fir address info from HDAT and populate device tree
node ibm,sw-checkstop-fir.</p>
<p>This patch is required for OPAL_CEC_REBOOT2 OPAL call to work as expected
@@ -248,11 +270,11 @@ populated:</p>
<div class="section" id="phb4">
<h2>PHB4<a class="headerlink" href="#phb4" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hdat: Fix PCIe GEN4 lane-eq setting for DD2</p>
+<li><p class="first">hdat: Fix PCIe GEN4 lane-eq setting for DD2</p>
<p>For PCIe GEN4, DD2 uses only 1 byte per PCIe lane for the lane-eq
settings (DD1 uses 2 bytes)</p>
</li>
-<li><p>pci: Wait for CRS and switch link when restoring bus numbers</p>
+<li><p class="first">pci: Wait for CRS and switch link when restoring bus numbers</p>
<p>When a complete reset occurs, after the PHB recovers it propagates a
reset down the wire to every device. At the same time, skiboot talks to
every device in order to restore the state of devices to what they were
@@ -263,12 +285,12 @@ before the link was up and the device could respond.</p>
<p>Fix this by retrying CRS until the device responds correctly, and for
devices behind a switch, making sure the switch has its link up first.</p>
</li>
-<li><p>pci: Track whether a PCI device is a virtual function</p>
+<li><p class="first">pci: Track whether a PCI device is a virtual function</p>
<p>This can be checked from config space, but we will need to know this when
restoring the PCI topology, and it is not always safe to access config
space during this period.</p>
</li>
-<li><p>phb4: Enhanced PCIe training tracing</p>
+<li><p class="first">phb4: Enhanced PCIe training tracing</p>
<p>This add more details to the PCI training tracing (aka Rick Mata
mode). It enables the PCIe Link Training and Status State
Machine (LTSSM) tracing and details on speed and link width.</p>
@@ -293,26 +315,27 @@ Machine (LTSSM) tracing and details on speed and link width.</p>
</pre></div>
</div>
</li>
-<li><p>phb4: Fix reading wrong size registers in EEH dump</p>
+<li><p class="first">phb4: Fix reading wrong size registers in EEH dump</p>
<p>These registers are supposed to be 16bit, and it makes part of the
register dump misleading.</p>
</li>
-<li><p>phb4: Ignore slot state if performing complete reset</p>
+<li><p class="first">phb4: Ignore slot state if performing complete reset</p>
<p>If a PHB is being completely reset, its state is about to be blown away
anyway, so if it’s not in an appropriate state, creset it regardless.</p>
</li>
-<li><p>phb4: Prepare for link down when creset called from kernel</p>
+<li><p class="first">phb4: Prepare for link down when creset called from kernel</p>
<p>phb4_creset() is typically called by functions that prepare the link
to go down. In cases where creset() is called directly by the kernel,
this isn’t the case and it can cause issues. Prepare for link down in
creset, just like we do in freset and hreset.</p>
</li>
-<li><p>phb4: Skip attempting to fix PHBs broken on boot</p>
+<li><p class="first">phb4: Skip attempting to fix PHBs broken on boot</p>
<p>If a PHB is marked broken it didn’t work on boot, and if it didn’t work
on boot then there’s no point trying to recover it later</p>
</li>
-<li><p>phb4: Fix duplicate in EEH register dump</p></li>
-<li><p>phb4: Be more conservative on link presence timeout</p>
+<li><p class="first">phb4: Fix duplicate in EEH register dump</p>
+</li>
+<li><p class="first">phb4: Be more conservative on link presence timeout</p>
<p>In this patch we tuned our link timing to be more agressive:
<code class="docutils literal notranslate"><span class="pre">cf960e2884</span> <span class="pre">phb4:</span> <span class="pre">Improve</span> <span class="pre">reset</span> <span class="pre">and</span> <span class="pre">link</span> <span class="pre">training</span> <span class="pre">timing</span></code></p>
<p>Cards should take only 32ms but unfortunately we’ve seen some take
@@ -322,12 +345,12 @@ status but no electrical link is present (which we’ve seen). Since we
have to wait 1 second between PERST and touching config space anyway,
it shouldn’t hurt too much.</p>
</li>
-<li><p>phb4: Assert PERST before PHB reset</p>
+<li><p class="first">phb4: Assert PERST before PHB reset</p>
<p>Currently we don’t assert PERST before issuing a PHB reset. This means
any link issues while resetting the PHB will be logged as errors.</p>
<p>This asserts PERST before we start resetting the PHB to avoid this.</p>
</li>
-<li><p>Revert “phb4: Read PERST signal rather than assuming it’s asserted”</p>
+<li><p class="first">Revert “phb4: Read PERST signal rather than assuming it’s asserted”</p>
<p>This reverts commit b42ff2b904165addf32e77679cebb94a08086966</p>
<p>The original patch assumes that PERST has been asserted well before (&gt;
250ms) we hit here (ie. during hostboot).</p>
@@ -338,32 +361,32 @@ before we hit this code.</p>
skip_perst to determine if PERST should be asserted or not. This
allows us to keep the speed optimisation on boot.</p>
</li>
-<li><p>phb4: Set REGB error enables based on link state</p>
+<li><p class="first">phb4: Set REGB error enables based on link state</p>
<p>Currently we always set these enables when initing the PHB. If the
link is already down, we shouldn’t set them as it may cause spurious
errors.</p>
<p>This changes the code to only sets them if the link is up.</p>
</li>
-<li><p>phb4: Mark PHB as fenced on creset</p>
+<li><p class="first">phb4: Mark PHB as fenced on creset</p>
<p>If we have to inject an error to trigger recover, we end up not
marking the PHB as fenced in the PHB struct. This fixes that.</p>
</li>
-<li><p>phb4: Clear errors before deasserting reset</p>
+<li><p class="first">phb4: Clear errors before deasserting reset</p>
<p>During reset we may have logged some errors (eg. due to the link going
down).</p>
<p>Hence before we deassert PERST or Hot Reset, we need to clear these
errors. This ensures that once link training starts, only new errors
are logged.</p>
</li>
-<li><p>phb4: Disable device config space access when fenced</p>
+<li><p class="first">phb4: Disable device config space access when fenced</p>
<p>On DD2 you can’t access device config space when fenced, so just
disable access whenever we are fenced.</p>
</li>
-<li><p>phb4: Dump devctl and devstat registers</p>
+<li><p class="first">phb4: Dump devctl and devstat registers</p>
<p>Dump devctl and devstat registers. These would have been useful when
debugging the MPS issue.</p>
</li>
-<li><p>phb4: Only clear some PHB config space registers on errors</p>
+<li><p class="first">phb4: Only clear some PHB config space registers on errors</p>
<p>Currently on error we clear the entire PHB config space. This is a
problem as the PCIe Maximum Payload Size (MPS) negotiation may have
already occurred. Clearing MPS in the PHB back to a default of 128
@@ -380,7 +403,7 @@ error.</p>
<div class="section" id="utilities">
<h2>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>external/xscom-utils: Add <code class="docutils literal notranslate"><span class="pre">--list-bits</span></code></p>
+<li><p class="first">external/xscom-utils: Add <code class="docutils literal notranslate"><span class="pre">--list-bits</span></code></p>
<p>When using getscom/putscom it’s helpful to know what bits are set in the
register. This patch adds an option to print out which bits are set
along with the value that was read/written to the register. Note that
@@ -392,13 +415,13 @@ since that’s what the XSCOM documentation uses.</p>
<div class="section" id="opal-prd">
<h2>opal-prd<a class="headerlink" href="#opal-prd" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>opal-prd: Do not pass pnor file while starting daemon.</p>
+<li><p class="first">opal-prd: Do not pass pnor file while starting daemon.</p>
<p>This change to the included systemd init file means opal-prd can
start and run on IBM FSP based systems.</p>
<p>We do not have pnor support on all the system. Also we have logic to
autodetect PNOR. Hence do not pass <code class="docutils literal notranslate"><span class="pre">--pnor</span></code> by default.</p>
</li>
-<li><p>opal-prd: Disable pnor access interface on FSP system</p>
+<li><p class="first">opal-prd: Disable pnor access interface on FSP system</p>
<p>On FSP system host does not have access to PNOR. Hence disable PNOR
access interfaces.</p>
</li>
@@ -407,23 +430,23 @@ access interfaces.</p>
<div class="section" id="opal-sensors">
<h2>OPAL Sensors<a class="headerlink" href="#opal-sensors" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>sensor-groups : occ: Add â€ops’ DT property</p>
+<li><p class="first">sensor-groups : occ: Add â€ops’ DT property</p>
<p>Add new device-tree property â€ops’ to define different operations
supported on each sensor-group.</p>
</li>
-<li><p>OCC: Map OCC sensor to a chip-id</p>
+<li><p class="first">OCC: Map OCC sensor to a chip-id</p>
<p>Parse device tree to get chip-id for OCC sensor.</p>
</li>
-<li><p>HDAT: Add chip-id property to ipmi sensors</p>
+<li><p class="first">HDAT: Add chip-id property to ipmi sensors</p>
<p>Presently we do not have a way to map sensor to chip id. Hence we are
always passing chip id 0 for occ_reset request (see occ_sensor_id_to_chip()).</p>
<p>This patch adds chip-id property to sensors (whenever its available) so that
we can map occ sensor to chip-id and pass valid chip-id to occ_reset request.</p>
</li>
-<li><p>xive: Check for valid PIR index when decoding</p>
+<li><p class="first">xive: Check for valid PIR index when decoding</p>
<p>This fixes an unlikely but possible assert() fail on kdump.</p>
</li>
-<li><p>sensors: occ: Skip the deconfigured core sensors</p>
+<li><p class="first">sensors: occ: Skip the deconfigured core sensors</p>
<p>This patch skips the deconfigured cores from the core sensors while
parsing the sensor names in the main memory as these sensor values are
not updated by OCC.</p>
@@ -433,35 +456,38 @@ not updated by OCC.</p>
<div class="section" id="tests">
<h2>Tests<a class="headerlink" href="#tests" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hdata_to_dt: use a realistic PVR and chip revision</p></li>
-<li><p>nx: PR_INFO that NX RNG and Crypto not yet supported on POWER9</p></li>
-<li><p>external/pflash: Add tests</p></li>
-<li><p>external/pflash: Reinstate the progress bars</p>
+<li><p class="first">hdata_to_dt: use a realistic PVR and chip revision</p>
+</li>
+<li><p class="first">nx: PR_INFO that NX RNG and Crypto not yet supported on POWER9</p>
+</li>
+<li><p class="first">external/pflash: Add tests</p>
+</li>
+<li><p class="first">external/pflash: Reinstate the progress bars</p>
<p>Recent work did some optimising which unfortunately removed some of the
progress bars in pflash.</p>
<p>It turns out that there’s only one thing people prefer to correctly
programmed flash chips, it is the ability to watch little equals
characters go across their screens for potentially minutes.</p>
</li>
-<li><p>external/pflash: Correct erase alignment checks</p>
+<li><p class="first">external/pflash: Correct erase alignment checks</p>
<p>pflash should check the alignment of addresses and sizes when asked to
erase. There are two possibilities:</p>
<ol class="arabic simple">
-<li><p>The user has specified sizes manually in which case pflash should
+<li>The user has specified sizes manually in which case pflash should
be as flexible as possible, blocklevel_smart_erase() permits this. To
prevent possible mistakes pflash will require –force to perform a
-manual erase of unaligned sizes.</p></li>
-<li><p>The user used -P to specify a partition, partitions aren’t
+manual erase of unaligned sizes.</li>
+<li>The user used -P to specify a partition, partitions aren’t
necessarily erase granule aligned anymore, blocklevel_smart_erase() can
handle. In this it doesn’t make sense to warn/error about misalignment
since the misalignment is inherent to the FFS partition and not really
-user input.</p></li>
+user input.</li>
</ol>
</li>
-<li><p>external/pflash: Check the result of strtoul</p>
+<li><p class="first">external/pflash: Check the result of strtoul</p>
<p>Also add 0x in front of –info output to avoid a copy and paste mistake.</p>
</li>
-<li><p>libflash/file: Break up MTD erase ioctl() calls</p>
+<li><p class="first">libflash/file: Break up MTD erase ioctl() calls</p>
<p>Unfortunately not all drivers are created equal and several drivers on
which pflash relies block in the kernel for quite some time and ignore
signals.</p>
@@ -477,14 +503,15 @@ performance penalty to breaking up the erase ioctl()s.</p>
<div class="section" id="general">
<h2>General<a class="headerlink" href="#general" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>opal-msg: Increase the max-async completion count by max chips possible</p></li>
-<li><p>occ: Add support for OPAL-OCC command/response interface</p>
+<li><p class="first">opal-msg: Increase the max-async completion count by max chips possible</p>
+</li>
+<li><p class="first">occ: Add support for OPAL-OCC command/response interface</p>
<p>This patch adds support for a shared memory based command/response
interface between OCC and OPAL. In HOMER, there is an OPAL command
buffer and an OCC response buffer which is used to send inband
commands to OCC.</p>
</li>
-<li><p>HDAT/device-tree: only add lid-type on pre-POWER9 systems</p>
+<li><p class="first">HDAT/device-tree: only add lid-type on pre-POWER9 systems</p>
<p>Largely a relic of back when we had multiple entry points into OPAL depending
on which mechanism on an FSP we were using to get loaded, this isn’t needed
on modern P9 as we only have one entry point (we don’t do the PHYP LID hack).</p>
@@ -494,7 +521,6 @@ on modern P9 as we only have one entry point (we don’t do the PHYP LID hack).<
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -530,15 +556,17 @@ on modern P9 as we only have one entry point (we don’t do the PHYP LID hack).<
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -555,15 +583,14 @@ on modern P9 as we only have one entry point (we don’t do the PHYP LID hack).<
<li class="right" >
<a href="skiboot-5.8.html" title="skiboot-5.8"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.8-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.8.html b/doc/release-notes/skiboot-5.8.html
index 1239d7f..9600712 100644
--- a/doc/release-notes/skiboot-5.8.html
+++ b/doc/release-notes/skiboot-5.8.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.8 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.8 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.7-rc2.html" title="skiboot-5.7-rc2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.8</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -57,18 +58,18 @@ do not currently expect to do any 5.7.x stable releases.</p>
<div class="section" id="new-features">
<h2>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>sensors: occ: Add support to clear sensor groups</p>
+<li><p class="first">sensors: occ: Add support to clear sensor groups</p>
<p>Adds a generic API to clear sensor groups. OCC inband sensor groups
such as CSM, Profiler and Job Scheduler can be cleared using this API.
It will clear the min/max of all sensors belonging to OCC sensor
groups.</p>
</li>
-<li><p>sensors: occ: Add CSM_{min/max} sensors</p>
+<li><p class="first">sensors: occ: Add CSM_{min/max} sensors</p>
<p>HWMON’s lowest/highest attribute is used by CSM agent, so map min/max
device-tree properties “sensor-data-min” and “sensor-data-max” to
the min/max of CSM.</p>
</li>
-<li><p>sensors: occ: Add support for OCC inband sensors</p>
+<li><p class="first">sensors: occ: Add support for OCC inband sensors</p>
<p>Add support to parse and export OCC inband sensors which are copied
by OCC to main memory in P9. Each OCC writes three buffers which
includes one names buffer for sensor meta data and two buffers for
@@ -79,29 +80,29 @@ can be read from the other buffer. The sensors are updated every
<code class="docutils literal notranslate"><span class="pre">/ibm,opal/sensors</span></code> device-tree node which can be exported by the
ibmpowernv-hwmon driver in Linux.</p>
</li>
-<li><p>psr: occ: Add support to change power-shifting-ratio</p>
+<li><p class="first">psr: occ: Add support to change power-shifting-ratio</p>
<p>Add support to set the CPU-GPU power shifting ratio which is used by
the OCC power capping algorithm. PSR value of 100 takes all power away
from CPU first and a PSR value of 0 caps GPU first.</p>
</li>
-<li><p>powercap: occ: Add a generic powercap framework</p>
+<li><p class="first">powercap: occ: Add a generic powercap framework</p>
<p>This patch adds a generic powercap framework and exports OCC powercap
sensors using which system powercap can be set inband through OPAL-OCC
command-response interface.</p>
</li>
-<li><p>phb4: Enable PCI peer-to-peer</p>
+<li><p class="first">phb4: Enable PCI peer-to-peer</p>
<p>P9 supports PCI peer-to-peer: a PCI device can write directly to the
mmio space of another PCI device. It completely by-passes the CPU.</p>
<p>It requires some configuration on the PHBs involved:</p>
<ol class="arabic simple">
-<li><p>on the initiating side, the address for the read/write operation is
+<li>on the initiating side, the address for the read/write operation is
in the mmio space of the target, i.e. well outside the range normally
-allowed. So we disable range-checking on the TVT entry in bypass mode.</p></li>
-<li><p>on the target side, we need to explicitly enable p2p by setting a
+allowed. So we disable range-checking on the TVT entry in bypass mode.</li>
+<li>on the target side, we need to explicitly enable p2p by setting a
bit in a configuration register. It has the side-effect of reserving
an outbound (as seen from the CPU) store queue for p2p. Therefore we
only enable p2p on the PHBs using it, as we don’t want to waste the
-resource if we don’t have to.</p></li>
+resource if we don’t have to.</li>
</ol>
<p>P9 supports p2p mmio writes. Reads are currently only supported if the
two devices are under the same PHB but that is expected to change in
@@ -110,19 +111,21 @@ configuration, so we report an error for the time being.</p>
<p>The patch adds a new OPAL call to allow the OS to declare a p2p
(initiator, target) pair.</p>
</li>
-<li><p>NX 842 and GZIP support on POWER9</p></li>
+<li><p class="first">NX 842 and GZIP support on POWER9</p>
+</li>
</ul>
</div>
<div class="section" id="power9-dd2">
<h2>POWER9 DD2<a class="headerlink" href="#power9-dd2" title="Permalink to this headline">¶</a></h2>
<p>Further support for POWER9 DD2 revision chips. Notable changes include:</p>
<ul>
-<li><p>xscom: Grab P9 DD2 revision level</p></li>
-<li><p>vas: Set mmio enable bits in DD2</p>
+<li><p class="first">xscom: Grab P9 DD2 revision level</p>
+</li>
+<li><p class="first">vas: Set mmio enable bits in DD2</p>
<p>POWER9 DD2 added some new “enable” bits that must be set for VAS to
work. These bits were unused in DD1.</p>
</li>
-<li><p>hdat: Add POWER9 DD2.0 specific pa_features</p>
+<li><p class="first">hdat: Add POWER9 DD2.0 specific pa_features</p>
<p>Same as the default but with TM off.</p>
</li>
</ul>
@@ -131,17 +134,17 @@ work. These bits were unused in DD1.</p>
<h2>POWER9<a class="headerlink" href="#power9" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-5.8-rc1.html#skiboot-5-8-rc1"><span class="std std-ref">skiboot-5.8-rc1</span></a>:</p>
<ul>
-<li><p>hw/npu2.c: Add ibm,nvlink-speed device-tree property</p>
+<li><p class="first">hw/npu2.c: Add ibm,nvlink-speed device-tree property</p>
<p>NVLink2 links can support multiple different speeds. However the device driver
has no way of determining which speed was programmed so pass it down as a device
tree property.</p>
</li>
-<li><p>hw/npu2-hw-procedures.c: Update PHY_RESET procedure</p>
+<li><p class="first">hw/npu2-hw-procedures.c: Update PHY_RESET procedure</p>
<p>Newer versions of Hostboot will have various clocks powered down by default
to save power. Therefore we need to power them up before accessing the OBUS
PHY.</p>
</li>
-<li><p>p8-i2c: Fix random data corruption (POWER9 specific)
+<li><p class="first">p8-i2c: Fix random data corruption (POWER9 specific)
While waiting for the OCC to signal that it has finished using the I2C
master we put the master into the, poorly named, occache_dis state.
While in this state the transaction hasn’t been started, but
@@ -154,7 +157,7 @@ actually doing anything.</p>
<p>If the transaction was a I2C read, the resulting output will be a
zeroed data buffer.</p>
</li>
-<li><p>hw/p8-i2c: Fix OCC locking (POWER9 specific)</p>
+<li><p class="first">hw/p8-i2c: Fix OCC locking (POWER9 specific)</p>
<p>There’s a few issues with the Host&lt;-&gt;OCC I2C bus handshaking. First up,
skiboot is currently examining the wrong bit when checking if the OCC
is currently using the bus. Secondly, when we need to wait for the OCC
@@ -167,9 +170,10 @@ failure in the recovery thread. All of this is bad.</p>
<p>This patch addresses all these issues and sets the recovery timeout to
10ms.</p>
</li>
-<li><p>vas: export chip-id to vas platform device
-This is needed so VAS in the kernel can perform cpu to vas id mapping.</p></li>
-<li><p>slw: Modify the power9 stop0_lite latency &amp; residency</p>
+<li><p class="first">vas: export chip-id to vas platform device
+This is needed so VAS in the kernel can perform cpu to vas id mapping.</p>
+</li>
+<li><p class="first">slw: Modify the power9 stop0_lite latency &amp; residency</p>
<p>Currently skiboot exposes the exit-latency for stop0_lite as 200ns and
the target-residency to be 2us.</p>
<p>However, the kernel cpu-idle infrastructure rounds up the latency to
@@ -194,20 +198,22 @@ switches.</p>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.7.html#skiboot-5-7"><span class="std std-ref">skiboot-5.7</span></a>:</p>
<ul>
-<li><p>Base NPU2 support on POWER9 DD2</p></li>
-<li><p>hdata/i2c: Work around broken I2C array version</p>
+<li><p class="first">Base NPU2 support on POWER9 DD2</p>
+</li>
+<li><p class="first">hdata/i2c: Work around broken I2C array version</p>
<p>Work around a bug in the I2C devices array that shows the
array version as being v2 when only the v1 data is populated.</p>
</li>
-<li><p>Recognize the 2s2u zz platform</p>
+<li><p class="first">Recognize the 2s2u zz platform</p>
<p>OPAL currently doesn’t know about the 2s2u zz. It recognizes such a
box as a generic BMC machine and fails to boot. Add the 2s2u as a
supported platform.</p>
<p>There will subsequently be a 2s2u-L system which may have a different
compatible property, which will need to be handled later.</p>
</li>
-<li><p>hdata/spira: POWER9 NX isn’t software compatible with P7/P8 NX, don’t claim so</p></li>
-<li><p>NX: Add P9 NX support for gzip compression engine</p>
+<li><p class="first">hdata/spira: POWER9 NX isn’t software compatible with P7/P8 NX, don’t claim so</p>
+</li>
+<li><p class="first">NX: Add P9 NX support for gzip compression engine</p>
<p>Power 9 introduces NX gzip compression engine. This patch adds gzip
compression support in NX. Virtual Accelerator Switch (VAS) is used to
access NX gzip engine and the channel configuration will be done with
@@ -219,33 +225,41 @@ also enables other registers to enable / disable the engine.</p>
<p>Creates the following device-tree entries to provide RxFIFO address,
RxFIFO size, Fifo priority, lpid, pid and tid values so that kernel
can drive P9 NX gzip engine.</p>
-<dl>
-<dt>The following nodes are located under an xscom node: ::</dt><dd><blockquote>
+<dl class="docutils">
+<dt>The following nodes are located under an xscom node: ::</dt>
+<dd><blockquote class="first">
<div><p>/xscom&#64;&lt;xscom_addr&gt;/nx&#64;&lt;nx_addr&gt;</p>
<p>/ibm,gzip-high-fifo : High priority gzip RxFIFO
/ibm,gzip-normal-fifo : Normal priority gzip RxFIFO</p>
</div></blockquote>
<p>Each RxFIFO node contain:s</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">compatible</span></code></dt><dd><p><code class="docutils literal notranslate"><span class="pre">ibm,p9-nx-gzip</span></code></p>
+<dl class="last docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">compatible</span></code></dt>
+<dd><p class="first last"><code class="docutils literal notranslate"><span class="pre">ibm,p9-nx-gzip</span></code></p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">priority</span></code></dt><dd><p>High or Normal</p>
+<dt><code class="docutils literal notranslate"><span class="pre">priority</span></code></dt>
+<dd><p class="first last">High or Normal</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">rx-fifo-address</span></code></dt><dd><p>RxFIFO address</p>
+<dt><code class="docutils literal notranslate"><span class="pre">rx-fifo-address</span></code></dt>
+<dd><p class="first last">RxFIFO address</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">rx-fifo-size</span></code></dt><dd><p>RxFIFO size</p>
+<dt><code class="docutils literal notranslate"><span class="pre">rx-fifo-size</span></code></dt>
+<dd><p class="first last">RxFIFO size</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">lpid</span></code></dt><dd><p>0xfff (1’s for 12 bits in UMAC notify match register)</p>
+<dt><code class="docutils literal notranslate"><span class="pre">lpid</span></code></dt>
+<dd><p class="first last">0xfff (1’s for 12 bits in UMAC notify match register)</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">pid</span></code></dt><dd><p>gzip coprocessor type</p>
+<dt><code class="docutils literal notranslate"><span class="pre">pid</span></code></dt>
+<dd><p class="first last">gzip coprocessor type</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">tid</span></code></dt><dd><p>counter for gzip</p>
+<dt><code class="docutils literal notranslate"><span class="pre">tid</span></code></dt>
+<dd><p class="first last">counter for gzip</p>
</dd>
</dl>
</dd>
</dl>
</li>
-<li><p>NX: Add P9 NX support for 842 compression engine</p>
+<li><p class="first">NX: Add P9 NX support for 842 compression engine</p>
<p>This patch adds changes needed for 842 compression engine on power 9.
Virtual Accelerator Switch (VAS) is used to access NX 842 engine on P9
and the channel setup will be done with receive FIFO. So RxFIFO
@@ -261,36 +275,45 @@ values so that kernel can drive P9 NX 842 engine.</p>
<blockquote>
<div><p>The following nodes are located under an xscom node:
<code class="docutils literal notranslate"><span class="pre">/xscom&#64;&lt;xscom_addr&gt;/nx&#64;&lt;nx_addr&gt;</span></code></p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">/ibm,842-high-fifo</span></code></dt><dd><p>High priority 842 RxFIFO</p>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">/ibm,842-high-fifo</span></code></dt>
+<dd><p class="first last">High priority 842 RxFIFO</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">/ibm,842-normal-fifo</span></code></dt><dd><p>Normal priority 842 RxFIFO</p>
+<dt><code class="docutils literal notranslate"><span class="pre">/ibm,842-normal-fifo</span></code></dt>
+<dd><p class="first last">Normal priority 842 RxFIFO</p>
</dd>
</dl>
<p>Each RxFIFO node contains:</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">compatible</span></code></dt><dd><p>ibm,p9-nx-842</p>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">compatible</span></code></dt>
+<dd><p class="first last">ibm,p9-nx-842</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">priority</span></code></dt><dd><p>High or Normal</p>
+<dt><code class="docutils literal notranslate"><span class="pre">priority</span></code></dt>
+<dd><p class="first last">High or Normal</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">rx-fifo-address</span></code></dt><dd><p>RxFIFO address</p>
+<dt><code class="docutils literal notranslate"><span class="pre">rx-fifo-address</span></code></dt>
+<dd><p class="first last">RxFIFO address</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">rx-fifo-size</span></code></dt><dd><p>RXFIFO size</p>
+<dt><code class="docutils literal notranslate"><span class="pre">rx-fifo-size</span></code></dt>
+<dd><p class="first last">RXFIFO size</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">lpid</span></code></dt><dd><p>0xfff (1’s for 12 bits set in UMAC notify match register)</p>
+<dt><code class="docutils literal notranslate"><span class="pre">lpid</span></code></dt>
+<dd><p class="first last">0xfff (1’s for 12 bits set in UMAC notify match register)</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">pid</span></code></dt><dd><p>842 coprocessor type</p>
+<dt><code class="docutils literal notranslate"><span class="pre">pid</span></code></dt>
+<dd><p class="first last">842 coprocessor type</p>
</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">tid</span></code></dt><dd><p>Counter for 842</p>
+<dt><code class="docutils literal notranslate"><span class="pre">tid</span></code></dt>
+<dd><p class="first last">Counter for 842</p>
</dd>
</dl>
</div></blockquote>
</li>
-<li><p>vas: Create MMIO device tree node</p>
+<li><p class="first">vas: Create MMIO device tree node</p>
<p>Create a device tree node for VAS and add properties that Linux
will need to configure/use VAS.</p>
</li>
-<li><p>opal: Extract sw checkstop fir address from HDAT.</p>
+<li><p class="first">opal: Extract sw checkstop fir address from HDAT.</p>
<p>Extract sw checkstop fir address info from HDAT and populate device tree
node ibm,sw-checkstop-fir.</p>
<p>This patch is required for OPAL_CEC_REBOOT2 OPAL call to work as expected
@@ -308,11 +331,11 @@ populated:</p>
<div class="section" id="phb4">
<h2>PHB4<a class="headerlink" href="#phb4" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hdat: Fix PCIe GEN4 lane-eq setting for DD2</p>
+<li><p class="first">hdat: Fix PCIe GEN4 lane-eq setting for DD2</p>
<p>For PCIe GEN4, DD2 uses only 1 byte per PCIe lane for the lane-eq
settings (DD1 uses 2 bytes)</p>
</li>
-<li><p>pci: Wait for CRS and switch link when restoring bus numbers</p>
+<li><p class="first">pci: Wait for CRS and switch link when restoring bus numbers</p>
<p>When a complete reset occurs, after the PHB recovers it propagates a
reset down the wire to every device. At the same time, skiboot talks to
every device in order to restore the state of devices to what they were
@@ -323,12 +346,12 @@ before the link was up and the device could respond.</p>
<p>Fix this by retrying CRS until the device responds correctly, and for
devices behind a switch, making sure the switch has its link up first.</p>
</li>
-<li><p>pci: Track whether a PCI device is a virtual function</p>
+<li><p class="first">pci: Track whether a PCI device is a virtual function</p>
<p>This can be checked from config space, but we will need to know this when
restoring the PCI topology, and it is not always safe to access config
space during this period.</p>
</li>
-<li><p>phb4: Enhanced PCIe training tracing</p>
+<li><p class="first">phb4: Enhanced PCIe training tracing</p>
<p>This add more details to the PCI training tracing (aka Rick Mata
mode). It enables the PCIe Link Training and Status State
Machine (LTSSM) tracing and details on speed and link width.</p>
@@ -353,26 +376,27 @@ Machine (LTSSM) tracing and details on speed and link width.</p>
</pre></div>
</div>
</li>
-<li><p>phb4: Fix reading wrong size registers in EEH dump</p>
+<li><p class="first">phb4: Fix reading wrong size registers in EEH dump</p>
<p>These registers are supposed to be 16bit, and it makes part of the
register dump misleading.</p>
</li>
-<li><p>phb4: Ignore slot state if performing complete reset</p>
+<li><p class="first">phb4: Ignore slot state if performing complete reset</p>
<p>If a PHB is being completely reset, its state is about to be blown away
anyway, so if it’s not in an appropriate state, creset it regardless.</p>
</li>
-<li><p>phb4: Prepare for link down when creset called from kernel</p>
+<li><p class="first">phb4: Prepare for link down when creset called from kernel</p>
<p>phb4_creset() is typically called by functions that prepare the link
to go down. In cases where creset() is called directly by the kernel,
this isn’t the case and it can cause issues. Prepare for link down in
creset, just like we do in freset and hreset.</p>
</li>
-<li><p>phb4: Skip attempting to fix PHBs broken on boot</p>
+<li><p class="first">phb4: Skip attempting to fix PHBs broken on boot</p>
<p>If a PHB is marked broken it didn’t work on boot, and if it didn’t work
on boot then there’s no point trying to recover it later</p>
</li>
-<li><p>phb4: Fix duplicate in EEH register dump</p></li>
-<li><p>phb4: Be more conservative on link presence timeout</p>
+<li><p class="first">phb4: Fix duplicate in EEH register dump</p>
+</li>
+<li><p class="first">phb4: Be more conservative on link presence timeout</p>
<p>In this patch we tuned our link timing to be more agressive:
<code class="docutils literal notranslate"><span class="pre">cf960e2884</span> <span class="pre">phb4:</span> <span class="pre">Improve</span> <span class="pre">reset</span> <span class="pre">and</span> <span class="pre">link</span> <span class="pre">training</span> <span class="pre">timing</span></code></p>
<p>Cards should take only 32ms but unfortunately we’ve seen some take
@@ -382,12 +406,12 @@ status but no electrical link is present (which we’ve seen). Since we
have to wait 1 second between PERST and touching config space anyway,
it shouldn’t hurt too much.</p>
</li>
-<li><p>phb4: Assert PERST before PHB reset</p>
+<li><p class="first">phb4: Assert PERST before PHB reset</p>
<p>Currently we don’t assert PERST before issuing a PHB reset. This means
any link issues while resetting the PHB will be logged as errors.</p>
<p>This asserts PERST before we start resetting the PHB to avoid this.</p>
</li>
-<li><p>Revert “phb4: Read PERST signal rather than assuming it’s asserted”</p>
+<li><p class="first">Revert “phb4: Read PERST signal rather than assuming it’s asserted”</p>
<p>This reverts commit b42ff2b904165addf32e77679cebb94a08086966</p>
<p>The original patch assumes that PERST has been asserted well before (&gt;
250ms) we hit here (ie. during hostboot).</p>
@@ -398,32 +422,32 @@ before we hit this code.</p>
skip_perst to determine if PERST should be asserted or not. This
allows us to keep the speed optimisation on boot.</p>
</li>
-<li><p>phb4: Set REGB error enables based on link state</p>
+<li><p class="first">phb4: Set REGB error enables based on link state</p>
<p>Currently we always set these enables when initing the PHB. If the
link is already down, we shouldn’t set them as it may cause spurious
errors.</p>
<p>This changes the code to only sets them if the link is up.</p>
</li>
-<li><p>phb4: Mark PHB as fenced on creset</p>
+<li><p class="first">phb4: Mark PHB as fenced on creset</p>
<p>If we have to inject an error to trigger recover, we end up not
marking the PHB as fenced in the PHB struct. This fixes that.</p>
</li>
-<li><p>phb4: Clear errors before deasserting reset</p>
+<li><p class="first">phb4: Clear errors before deasserting reset</p>
<p>During reset we may have logged some errors (eg. due to the link going
down).</p>
<p>Hence before we deassert PERST or Hot Reset, we need to clear these
errors. This ensures that once link training starts, only new errors
are logged.</p>
</li>
-<li><p>phb4: Disable device config space access when fenced</p>
+<li><p class="first">phb4: Disable device config space access when fenced</p>
<p>On DD2 you can’t access device config space when fenced, so just
disable access whenever we are fenced.</p>
</li>
-<li><p>phb4: Dump devctl and devstat registers</p>
+<li><p class="first">phb4: Dump devctl and devstat registers</p>
<p>Dump devctl and devstat registers. These would have been useful when
debugging the MPS issue.</p>
</li>
-<li><p>phb4: Only clear some PHB config space registers on errors</p>
+<li><p class="first">phb4: Only clear some PHB config space registers on errors</p>
<p>Currently on error we clear the entire PHB config space. This is a
problem as the PCIe Maximum Payload Size (MPS) negotiation may have
already occurred. Clearing MPS in the PHB back to a default of 128
@@ -440,7 +464,7 @@ error.</p>
<div class="section" id="utilities">
<h2>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>external/xscom-utils: Add <code class="docutils literal notranslate"><span class="pre">--list-bits</span></code></p>
+<li><p class="first">external/xscom-utils: Add <code class="docutils literal notranslate"><span class="pre">--list-bits</span></code></p>
<p>When using getscom/putscom it’s helpful to know what bits are set in the
register. This patch adds an option to print out which bits are set
along with the value that was read/written to the register. Note that
@@ -452,13 +476,13 @@ since that’s what the XSCOM documentation uses.</p>
<div class="section" id="opal-prd">
<h2>opal-prd<a class="headerlink" href="#opal-prd" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>opal-prd: Do not pass pnor file while starting daemon.</p>
+<li><p class="first">opal-prd: Do not pass pnor file while starting daemon.</p>
<p>This change to the included systemd init file means opal-prd can
start and run on IBM FSP based systems.</p>
<p>We do not have pnor support on all the system. Also we have logic to
autodetect PNOR. Hence do not pass <code class="docutils literal notranslate"><span class="pre">--pnor</span></code> by default.</p>
</li>
-<li><p>opal-prd: Disable pnor access interface on FSP system</p>
+<li><p class="first">opal-prd: Disable pnor access interface on FSP system</p>
<p>On FSP system host does not have access to PNOR. Hence disable PNOR
access interfaces.</p>
</li>
@@ -467,23 +491,23 @@ access interfaces.</p>
<div class="section" id="opal-sensors">
<h2>OPAL Sensors<a class="headerlink" href="#opal-sensors" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>sensor-groups : occ: Add â€ops’ DT property</p>
+<li><p class="first">sensor-groups : occ: Add â€ops’ DT property</p>
<p>Add new device-tree property â€ops’ to define different operations
supported on each sensor-group.</p>
</li>
-<li><p>OCC: Map OCC sensor to a chip-id</p>
+<li><p class="first">OCC: Map OCC sensor to a chip-id</p>
<p>Parse device tree to get chip-id for OCC sensor.</p>
</li>
-<li><p>HDAT: Add chip-id property to ipmi sensors</p>
+<li><p class="first">HDAT: Add chip-id property to ipmi sensors</p>
<p>Presently we do not have a way to map sensor to chip id. Hence we are
always passing chip id 0 for occ_reset request (see occ_sensor_id_to_chip()).</p>
<p>This patch adds chip-id property to sensors (whenever its available) so that
we can map occ sensor to chip-id and pass valid chip-id to occ_reset request.</p>
</li>
-<li><p>xive: Check for valid PIR index when decoding</p>
+<li><p class="first">xive: Check for valid PIR index when decoding</p>
<p>This fixes an unlikely but possible assert() fail on kdump.</p>
</li>
-<li><p>sensors: occ: Skip the deconfigured core sensors</p>
+<li><p class="first">sensors: occ: Skip the deconfigured core sensors</p>
<p>This patch skips the deconfigured cores from the core sensors while
parsing the sensor names in the main memory as these sensor values are
not updated by OCC.</p>
@@ -494,7 +518,7 @@ not updated by OCC.</p>
<h2>IBM FSP systems<a class="headerlink" href="#ibm-fsp-systems" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-5.8-rc1.html#skiboot-5-8-rc1"><span class="std std-ref">skiboot-5.8-rc1</span></a>:</p>
<ul>
-<li><p>mktime: fix off-by-one error calling days_in_month</p>
+<li><p class="first">mktime: fix off-by-one error calling days_in_month</p>
<p>From auditing all the mktime() users, there seems to be only a <em>very</em>
small window around new years day where we could possibly return
incorrect data to the OS, and even then, there would have to be FSP
@@ -507,41 +531,44 @@ on other machines.</p>
<h2>Tests<a class="headerlink" href="#tests" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-5.8-rc1.html#skiboot-5-8-rc1"><span class="std std-ref">skiboot-5.8-rc1</span></a>:</p>
<ul class="simple">
-<li><p>travis: Debian Stretch must pass</p></li>
-<li><p>test kernels: link with -N</p></li>
-<li><p>core/test/run-msg: don’t depend on unittest mem layout</p></li>
+<li>travis: Debian Stretch must pass</li>
+<li>test kernels: link with -N</li>
+<li>core/test/run-msg: don’t depend on unittest mem layout</li>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.7.html#skiboot-5-7"><span class="std std-ref">skiboot-5.7</span></a>:</p>
<ul>
-<li><p>hdata_to_dt: use a realistic PVR and chip revision</p></li>
-<li><p>nx: PR_INFO that NX RNG and Crypto not yet supported on POWER9</p></li>
-<li><p>external/pflash: Add tests</p></li>
-<li><p>external/pflash: Reinstate the progress bars</p>
+<li><p class="first">hdata_to_dt: use a realistic PVR and chip revision</p>
+</li>
+<li><p class="first">nx: PR_INFO that NX RNG and Crypto not yet supported on POWER9</p>
+</li>
+<li><p class="first">external/pflash: Add tests</p>
+</li>
+<li><p class="first">external/pflash: Reinstate the progress bars</p>
<p>Recent work did some optimising which unfortunately removed some of the
progress bars in pflash.</p>
<p>It turns out that there’s only one thing people prefer to correctly
programmed flash chips, it is the ability to watch little equals
characters go across their screens for potentially minutes.</p>
</li>
-<li><p>external/pflash: Correct erase alignment checks</p>
+<li><p class="first">external/pflash: Correct erase alignment checks</p>
<p>pflash should check the alignment of addresses and sizes when asked to
erase. There are two possibilities:</p>
<ol class="arabic simple">
-<li><p>The user has specified sizes manually in which case pflash should
+<li>The user has specified sizes manually in which case pflash should
be as flexible as possible, blocklevel_smart_erase() permits this. To
prevent possible mistakes pflash will require –force to perform a
-manual erase of unaligned sizes.</p></li>
-<li><p>The user used -P to specify a partition, partitions aren’t
+manual erase of unaligned sizes.</li>
+<li>The user used -P to specify a partition, partitions aren’t
necessarily erase granule aligned anymore, blocklevel_smart_erase() can
handle. In this it doesn’t make sense to warn/error about misalignment
since the misalignment is inherent to the FFS partition and not really
-user input.</p></li>
+user input.</li>
</ol>
</li>
-<li><p>external/pflash: Check the result of strtoul</p>
+<li><p class="first">external/pflash: Check the result of strtoul</p>
<p>Also add 0x in front of –info output to avoid a copy and paste mistake.</p>
</li>
-<li><p>libflash/file: Break up MTD erase ioctl() calls</p>
+<li><p class="first">libflash/file: Break up MTD erase ioctl() calls</p>
<p>Unfortunately not all drivers are created equal and several drivers on
which pflash relies block in the kernel for quite some time and ignore
signals.</p>
@@ -558,20 +585,21 @@ performance penalty to breaking up the erase ioctl()s.</p>
<h2>General<a class="headerlink" href="#general" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-5.8-rc1.html#skiboot-5-8-rc1"><span class="std std-ref">skiboot-5.8-rc1</span></a>:</p>
<ul class="simple">
-<li><p>gcov: support GCC 7.1+</p></li>
-<li><p>Tests build and pass on Debian
-A few things related to the Debian toolchain.</p></li>
+<li>gcov: support GCC 7.1+</li>
+<li>Tests build and pass on Debian
+A few things related to the Debian toolchain.</li>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.7.html#skiboot-5-7"><span class="std std-ref">skiboot-5.7</span></a>:</p>
<ul>
-<li><p>opal-msg: Increase the max-async completion count by max chips possible</p></li>
-<li><p>occ: Add support for OPAL-OCC command/response interface</p>
+<li><p class="first">opal-msg: Increase the max-async completion count by max chips possible</p>
+</li>
+<li><p class="first">occ: Add support for OPAL-OCC command/response interface</p>
<p>This patch adds support for a shared memory based command/response
interface between OCC and OPAL. In HOMER, there is an OPAL command
buffer and an OCC response buffer which is used to send inband
commands to OCC.</p>
</li>
-<li><p>HDAT/device-tree: only add lid-type on pre-POWER9 systems</p>
+<li><p class="first">HDAT/device-tree: only add lid-type on pre-POWER9 systems</p>
<p>Largely a relic of back when we had multiple entry points into OPAL depending
on which mechanism on an FSP we were using to get loaded, this isn’t needed
on modern P9 as we only have one entry point (we don’t do the PHYP LID hack).</p>
@@ -581,394 +609,394 @@ on modern P9 as we only have one entry point (we don’t do the PHYP LID hack).<
<div class="section" id="contributors">
<h2>Contributors<a class="headerlink" href="#contributors" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>Processed 156 csets from 17 developers</p></li>
-<li><p>1 employers found</p></li>
-<li><p>A total of 6888 lines added, 1089 removed (delta 5799)</p></li>
+<li>Processed 156 csets from 17 developers</li>
+<li>1 employers found</li>
+<li>A total of 6888 lines added, 1089 removed (delta 5799)</li>
</ul>
<div class="section" id="developers-with-the-most-changesets">
<h3>Developers with the most changesets<a class="headerlink" href="#developers-with-the-most-changesets" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>35</p></td>
-<td><p>(22.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Cyril Bur</td>
+<td>35</td>
+<td>(22.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>32</p></td>
-<td><p>(20.5%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>32</td>
+<td>(20.5%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>23</p></td>
-<td><p>(14.7%)</p></td>
+<tr class="row-even"><td>Michael Neuling</td>
+<td>23</td>
+<td>(14.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Sukadev Bhattiprolu</p></td>
-<td><p>11</p></td>
-<td><p>(7.1%)</p></td>
+<tr class="row-odd"><td>Sukadev Bhattiprolu</td>
+<td>11</td>
+<td>(7.1%)</td>
</tr>
-<tr class="row-even"><td><p>Reza Arbab</p></td>
-<td><p>10</p></td>
-<td><p>(6.4%)</p></td>
+<tr class="row-even"><td>Reza Arbab</td>
+<td>10</td>
+<td>(6.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>9</p></td>
-<td><p>(5.8%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>9</td>
+<td>(5.8%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>9</p></td>
-<td><p>(5.8%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>9</td>
+<td>(5.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>5</p></td>
-<td><p>(3.2%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>5</td>
+<td>(3.2%)</td>
</tr>
-<tr class="row-even"><td><p>Haren Myneni</p></td>
-<td><p>5</p></td>
-<td><p>(3.2%)</p></td>
+<tr class="row-even"><td>Haren Myneni</td>
+<td>5</td>
+<td>(3.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>4</p></td>
-<td><p>(2.6%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>4</td>
+<td>(2.6%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>4</p></td>
-<td><p>(2.6%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>4</td>
+<td>(2.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Nicholas Piggin</p></td>
-<td><p>3</p></td>
-<td><p>(1.9%)</p></td>
+<tr class="row-odd"><td>Nicholas Piggin</td>
+<td>3</td>
+<td>(1.9%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>2</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>2</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Gautham R. Shenoy</p></td>
-<td><p>1</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-odd"><td>Gautham R. Shenoy</td>
+<td>1</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>1</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>1</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>1</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-odd"><td>Ananth N Mavinakayanahalli</td>
+<td>1</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Barrat</p></td>
-<td><p>1</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-even"><td>Frederic Barrat</td>
+<td>1</td>
+<td>(0.6%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-changed-lines">
<h3>Developers with the most changed lines<a class="headerlink" href="#developers-with-the-most-changed-lines" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 70%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="70%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>1935</p></td>
-<td><p>(27.9%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>1935</td>
+<td>(27.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>1868</p></td>
-<td><p>(26.9%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>1868</td>
+<td>(26.9%)</td>
</tr>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>866</p></td>
-<td><p>(12.5%)</p></td>
+<tr class="row-even"><td>Stewart Smith</td>
+<td>866</td>
+<td>(12.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Sukadev Bhattiprolu</p></td>
-<td><p>663</p></td>
-<td><p>(9.5%)</p></td>
+<tr class="row-odd"><td>Sukadev Bhattiprolu</td>
+<td>663</td>
+<td>(9.5%)</td>
</tr>
-<tr class="row-even"><td><p>Haren Myneni</p></td>
-<td><p>584</p></td>
-<td><p>(8.4%)</p></td>
+<tr class="row-even"><td>Haren Myneni</td>
+<td>584</td>
+<td>(8.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>384</p></td>
-<td><p>(5.5%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>384</td>
+<td>(5.5%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Barrat</p></td>
-<td><p>168</p></td>
-<td><p>(2.4%)</p></td>
+<tr class="row-even"><td>Frederic Barrat</td>
+<td>168</td>
+<td>(2.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Reza Arbab</p></td>
-<td><p>98</p></td>
-<td><p>(1.4%)</p></td>
+<tr class="row-odd"><td>Reza Arbab</td>
+<td>98</td>
+<td>(1.4%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>98</p></td>
-<td><p>(1.4%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>98</td>
+<td>(1.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Vasant Hegde</p></td>
-<td><p>93</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-odd"><td>Vasant Hegde</td>
+<td>93</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>77</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>77</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>60</p></td>
-<td><p>(0.9%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>60</td>
+<td>(0.9%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>28</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>28</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>11</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>11</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Gautham R. Shenoy</p></td>
-<td><p>6</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-even"><td>Gautham R. Shenoy</td>
+<td>6</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>Nicholas Piggin</p></td>
-<td><p>4</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-odd"><td>Nicholas Piggin</td>
+<td>4</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Ananth N Mavinakayanahalli</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Ananth N Mavinakayanahalli</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-signoffs">
<h3>Developers with the most signoffs<a class="headerlink" href="#developers-with-the-most-signoffs" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>124</p></td>
-<td><p>(97.6%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>124</td>
+<td>(97.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>2</p></td>
-<td><p>(1.6%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>2</td>
+<td>(1.6%)</td>
</tr>
-<tr class="row-even"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>1</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-even"><td>Vaidyanathan Srinivasan</td>
+<td>1</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Total</p></td>
-<td><p>127</p></td>
-<td><p>(100%)</p></td>
+<tr class="row-odd"><td>Total</td>
+<td>127</td>
+<td>(100%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-reviews">
<h3>Developers with the most reviews<a class="headerlink" href="#developers-with-the-most-reviews" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 75%" />
-<col style="width: 6%" />
-<col style="width: 19%" />
+<col width="75%" />
+<col width="6%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>19</p></td>
-<td><p>(52.8%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Samuel Mendoza-Jonas</td>
+<td>19</td>
+<td>(52.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>11</p></td>
-<td><p>(30.6%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>11</td>
+<td>(30.6%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>2</p></td>
-<td><p>(5.6%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>2</td>
+<td>(5.6%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>1</p></td>
-<td><p>(2.8%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>1</td>
+<td>(2.8%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>1</p></td>
-<td><p>(2.8%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>1</td>
+<td>(2.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Reza Arbab</p></td>
-<td><p>1</p></td>
-<td><p>(2.8%)</p></td>
+<tr class="row-odd"><td>Reza Arbab</td>
+<td>1</td>
+<td>(2.8%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>1</p></td>
-<td><p>(2.8%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>1</td>
+<td>(2.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Total</p></td>
-<td><p>36</p></td>
-<td><p>(100%)</p></td>
+<tr class="row-odd"><td>Total</td>
+<td>36</td>
+<td>(100%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-test-credits">
<h3>Developers with the most test credits<a class="headerlink" href="#developers-with-the-most-test-credits" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 75%" />
-<col style="width: 6%" />
-<col style="width: 19%" />
+<col width="75%" />
+<col width="6%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>1</p></td>
-<td><p>(50.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>1</td>
+<td>(50.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Hari Bathini</p></td>
-<td><p>1</p></td>
-<td><p>(50.0%)</p></td>
+<tr class="row-odd"><td>Hari Bathini</td>
+<td>1</td>
+<td>(50.0%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-who-gave-the-most-tested-by-credits">
<h3>Developers who gave the most tested-by credits<a class="headerlink" href="#developers-who-gave-the-most-tested-by-credits" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 75%" />
-<col style="width: 6%" />
-<col style="width: 19%" />
+<col width="75%" />
+<col width="6%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>1</p></td>
-<td><p>(50.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Russell Currey</td>
+<td>1</td>
+<td>(50.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>1</p></td>
-<td><p>(50.0%)</p></td>
+<tr class="row-odd"><td>Mahesh Salgaonkar</td>
+<td>1</td>
+<td>(50.0%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-report-credits">
<h3>Developers with the most report credits<a class="headerlink" href="#developers-with-the-most-report-credits" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 75%" />
-<col style="width: 6%" />
-<col style="width: 19%" />
+<col width="75%" />
+<col width="6%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Anton Blanchard</p></td>
-<td><p>1</p></td>
-<td><p>(16.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Anton Blanchard</td>
+<td>1</td>
+<td>(16.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Mark Linimon</p></td>
-<td><p>1</p></td>
-<td><p>(16.7%)</p></td>
+<tr class="row-odd"><td>Mark Linimon</td>
+<td>1</td>
+<td>(16.7%)</td>
</tr>
-<tr class="row-even"><td><p>Pavaman Subramaniyam</p></td>
-<td><p>1</p></td>
-<td><p>(16.7%)</p></td>
+<tr class="row-even"><td>Pavaman Subramaniyam</td>
+<td>1</td>
+<td>(16.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>1</p></td>
-<td><p>(16.7%)</p></td>
+<tr class="row-odd"><td>Pridhiviraj Paidipeddi</td>
+<td>1</td>
+<td>(16.7%)</td>
</tr>
-<tr class="row-even"><td><p>Rob Lippert</p></td>
-<td><p>1</p></td>
-<td><p>(16.7%)</p></td>
+<tr class="row-even"><td>Rob Lippert</td>
+<td>1</td>
+<td>(16.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>1</p></td>
-<td><p>(16.7%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>1</td>
+<td>(16.7%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-who-gave-the-most-report-credits">
<h3>Developers who gave the most report credits<a class="headerlink" href="#developers-who-gave-the-most-report-credits" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 75%" />
-<col style="width: 6%" />
-<col style="width: 19%" />
+<col width="75%" />
+<col width="6%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>2</p></td>
-<td><p>(33.3%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>2</td>
+<td>(33.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>1</p></td>
-<td><p>(16.7%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>1</td>
+<td>(16.7%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>1</p></td>
-<td><p>(16.7%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>1</td>
+<td>(16.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>1</p></td>
-<td><p>(16.7%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>1</td>
+<td>(16.7%)</td>
</tr>
-<tr class="row-even"><td><p>Gautham R. Shenoy</p></td>
-<td><p>1</p></td>
-<td><p>(16.7%)</p></td>
+<tr class="row-even"><td>Gautham R. Shenoy</td>
+<td>1</td>
+<td>(16.7%)</td>
</tr>
</tbody>
</table>
@@ -977,7 +1005,6 @@ on modern P9 as we only have one entry point (we don’t do the PHYP LID hack).<
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -1025,15 +1052,17 @@ on modern P9 as we only have one entry point (we don’t do the PHYP LID hack).<
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -1050,15 +1079,14 @@ on modern P9 as we only have one entry point (we don’t do the PHYP LID hack).<
<li class="right" >
<a href="skiboot-5.7-rc2.html" title="skiboot-5.7-rc2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.8</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.9-rc1.html b/doc/release-notes/skiboot-5.9-rc1.html
index fe8dec4..035b25f 100644
--- a/doc/release-notes/skiboot-5.9-rc1.html
+++ b/doc/release-notes/skiboot-5.9-rc1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.9-rc1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.9-rc1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.9.html" title="skiboot-5.9"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -62,7 +63,7 @@ This release will be targetted to early POWER9 systems.</p>
<div class="section" id="power8">
<h3>POWER8<a class="headerlink" href="#power8" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>fast-reset by default (if possible)</p>
+<li><p class="first">fast-reset by default (if possible)</p>
<p>Currently, this is limited to POWER8 systems.</p>
<p>A normal reboot will, rather than doing a full IPL, go through a
fast reboot procedure. This reduces the “reboot to petitboot” time
@@ -73,10 +74,10 @@ from minutes to a handful of seconds.</p>
<div class="section" id="power9">
<h3>POWER9<a class="headerlink" href="#power9" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>POWER9 power management during boot</p>
+<li><p class="first">POWER9 power management during boot</p>
<p>Less power should be consumed during boot.</p>
</li>
-<li><p>OPAL_SIGNAL_SYSTEM_RESET for POWER9</p>
+<li><p class="first">OPAL_SIGNAL_SYSTEM_RESET for POWER9</p>
<p>This implements OPAL_SIGNAL_SYSTEM_RESET, using scom registers to
quiesce the target thread and raise a system reset exception on it.
It has been tested on DD2 with stop0 ESL=0 and ESL=1 shallow power
@@ -84,20 +85,20 @@ saving modes.</p>
<p>DD1 is not implemented because it is sufficiently different as to
make support difficult.</p>
</li>
-<li><p>Enable deep idle states for POWER9</p>
+<li><p class="first">Enable deep idle states for POWER9</p>
<ul>
-<li><p>SLW: Add support for p9_stop_api</p>
+<li><p class="first">SLW: Add support for p9_stop_api</p>
<p>p9_stop_api’s are used to set SPR state on a core wakeup form a deeper
low power state. p9_stop_api uses low level platform formware and
self-restore microcode to restore the sprs to requested values.</p>
<p>Code is taken from :
<a class="reference external" href="https://github.com/open-power/hostboot/tree/master/src/import/chips/p9/procedures/utils/stopreg">https://github.com/open-power/hostboot/tree/master/src/import/chips/p9/procedures/utils/stopreg</a></p>
</li>
-<li><p>SLW: Removing timebase related flags for stop4</p>
+<li><p class="first">SLW: Removing timebase related flags for stop4</p>
<p>When a core enters stop4, it does not loose decrementer and time base.
Hence removing flags OPAL_PM_DEC_STOP and OPAL_PM_TIMEBASE_STOP.</p>
</li>
-<li><p>SLW: Allow deep states if homer address is known</p>
+<li><p class="first">SLW: Allow deep states if homer address is known</p>
<p>Use a common variable has_wakeup_engine instead of has_slw to tell if
the:
- SLW image is populated in case of power8
@@ -105,18 +106,18 @@ the:
<p>Currently we expect CME to be loaded if homer address is known ( except
for simulators)</p>
</li>
-<li><p>SLW: Configure self-restore for HRMOR</p>
+<li><p class="first">SLW: Configure self-restore for HRMOR</p>
<p>Make a stop api call using libpore to restore HRMOR register. HRMOR needs
to be cleared so that when thread exits stop, they arrives at linux
system_reset vector (0x100).</p>
</li>
-<li><p>SLW: Add opal_slw_set_reg support for power9</p>
+<li><p class="first">SLW: Add opal_slw_set_reg support for power9</p>
<p>This OPAL call is made from Linux to OPAL to configure values in
various SPRs after wakeup from a deep idle state.</p>
</li>
</ul>
</li>
-<li><p>PHB4: CAPP recovery</p>
+<li><p class="first">PHB4: CAPP recovery</p>
<p>CAPP recovery is initiated when a CAPP Machine Check is detected.
The capp recovery procedure is initiated via a Hypervisor Maintenance
interrupt (HMI).</p>
@@ -127,37 +128,37 @@ being asserted. The system continues running and the CAPP and PSL will
be re-initialized.</p>
<p>This implements CAPP recovery for POWER9 systems</p>
</li>
-<li><p>Add <code class="docutils literal notranslate"><span class="pre">wafer-location</span></code> property for POWER9</p>
+<li><p class="first">Add <code class="docutils literal notranslate"><span class="pre">wafer-location</span></code> property for POWER9</p>
<p>Extract wafer-location from ECID and add property under xscom node.
- bits 64:71 are the chip x location (7:0)
- bits 72:79 are the chip y location (7:0)</p>
<p>Sample output:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="o">@</span><span class="mi">623</span><span class="n">fc00000000</span><span class="p">]</span><span class="c1"># lsprop ecid</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="nd">@623fc00000000</span><span class="p">]</span><span class="c1"># lsprop ecid</span>
<span class="n">ecid</span> <span class="mi">019</span><span class="n">a00d4</span> <span class="mi">03100718</span> <span class="mi">852</span><span class="n">c0000</span> <span class="mi">00</span><span class="n">fd7911</span>
-<span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="o">@</span><span class="mi">623</span><span class="n">fc00000000</span><span class="p">]</span><span class="c1"># lsprop wafer-location</span>
+<span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="nd">@623fc00000000</span><span class="p">]</span><span class="c1"># lsprop wafer-location</span>
<span class="n">wafer</span><span class="o">-</span><span class="n">location</span> <span class="mi">00000085</span> <span class="mi">0000002</span><span class="n">c</span>
</pre></div>
</div>
</li>
-<li><p>Add <code class="docutils literal notranslate"><span class="pre">wafer-id</span></code> property for POWER9</p>
+<li><p class="first">Add <code class="docutils literal notranslate"><span class="pre">wafer-id</span></code> property for POWER9</p>
<p>Wafer id is derived from ECID data.
- bits 4:63 are the wafer id ( ten 6 bit fields each containing a code)</p>
<p>Sample output:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="o">@</span><span class="mi">623</span><span class="n">fc00000000</span><span class="p">]</span><span class="c1"># lsprop ecid</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="nd">@623fc00000000</span><span class="p">]</span><span class="c1"># lsprop ecid</span>
<span class="n">ecid</span> <span class="mi">019</span><span class="n">a00d4</span> <span class="mi">03100718</span> <span class="mi">852</span><span class="n">c0000</span> <span class="mi">00</span><span class="n">fd7911</span>
-<span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="o">@</span><span class="mi">623</span><span class="n">fc00000000</span><span class="p">]</span><span class="c1"># lsprop wafer-id</span>
+<span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="nd">@623fc00000000</span><span class="p">]</span><span class="c1"># lsprop wafer-id</span>
<span class="n">wafer</span><span class="o">-</span><span class="nb">id</span> <span class="s2">&quot;6Q0DG340SO&quot;</span>
</pre></div>
</div>
</li>
-<li><p>Add <code class="docutils literal notranslate"><span class="pre">ecid</span></code> property under <code class="docutils literal notranslate"><span class="pre">xscom</span></code> node for POWER9.
+<li><p class="first">Add <code class="docutils literal notranslate"><span class="pre">ecid</span></code> property under <code class="docutils literal notranslate"><span class="pre">xscom</span></code> node for POWER9.
Sample output:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="o">@</span><span class="mi">623</span><span class="n">fc00000000</span><span class="p">]</span><span class="c1"># lsprop ecid</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="nd">@623fc00000000</span><span class="p">]</span><span class="c1"># lsprop ecid</span>
<span class="n">ecid</span> <span class="mi">019</span><span class="n">a00d4</span> <span class="mi">03100718</span> <span class="mi">852</span><span class="n">c0000</span> <span class="mi">00</span><span class="n">fd7911</span>
</pre></div>
</div>
</li>
-<li><p>Add ibm,firmware-versions device tree node</p>
+<li><p class="first">Add ibm,firmware-versions device tree node</p>
<p>In P8, hostboot provides mini device tree. It contains <code class="docutils literal notranslate"><span class="pre">/ibm,firmware-versions</span></code>
node which has various firmware component version details.</p>
<p>In P9, OPAL is building device tree. This patch adds support to parse VERSION
@@ -182,12 +183,12 @@ section of PNOR and create <code class="docutils literal notranslate"><span clas
<div class="section" id="id2">
<h2>POWER9<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Disable Transactional Memory on Power9 DD 2.1</p>
+<li><p class="first">Disable Transactional Memory on Power9 DD 2.1</p>
<p>Update pa_features_p9[] to disable TM (Transactional Memory). On DD 2.1
TM is not usable by Linux without other workarounds, so skiboot must
disable it.</p>
</li>
-<li><p>xscom: Do not print error message for â€chiplet offline’ return values</p>
+<li><p class="first">xscom: Do not print error message for â€chiplet offline’ return values</p>
<p>xscom_read/write operations returns CHIPLET_OFFLINE when chiplet is offline.
Some multicast xscom_read/write requests from HBRT results in xscom operation
on offline chiplet(s) and printing below warnings in OPAL console:</p>
@@ -198,25 +199,25 @@ on offline chiplet(s) and printing below warnings in OPAL console:</p>
<p>Some SCOM users can deal correctly with this error code (notably opal-prd),
so the error message is (in practice) erroneous.</p>
</li>
-<li><p>IMC: Fix the core_imc_event_mask</p>
+<li><p class="first">IMC: Fix the core_imc_event_mask</p>
<p>CORE_IMC_EVENT_MASK is a scom that contains bits to control event sampling for
different machine state for core imc. The current event-mask setting sample
events only on host kernel (hypervisor) and host userspace.</p>
<p>Patch to enable the sampling of events in other machine states (like guest
kernel and guest userspace).</p>
</li>
-<li><p>IMC: Update the nest_pmus array with occ/gpe microcode uav updates</p>
+<li><p class="first">IMC: Update the nest_pmus array with occ/gpe microcode uav updates</p>
<p>OOC/gpe nest microcode maintains the list of individual nest units
supported. Sync the recent updates to the UAV with nest_pmus array.</p>
<p>For reference occ/gpr microcode link for the UAV:
<a class="reference external" href="https://github.com/open-power/occ/blob/master/src/occ_gpe1/gpe1_24x7.h">https://github.com/open-power/occ/blob/master/src/occ_gpe1/gpe1_24x7.h</a></p>
</li>
-<li><p>Parse IOSLOT information from HDAT</p>
+<li><p class="first">Parse IOSLOT information from HDAT</p>
<p>Add structure definitions that describe the physical PCIe topology of
a system and parse them into the device-tree based PCIe slot
description.</p>
</li>
-<li><p>idle: user context state loss flags fix for stop states</p>
+<li><p class="first">idle: user context state loss flags fix for stop states</p>
<p>The “lite” stop variants with PSSCR[ESL]=PSSCR[EC]=1 do not lose user
context, while the non-lite variants do (ESL: enable state loss).</p>
<p>Some of the POWER9 idle states had these wrong.</p>
@@ -225,13 +226,14 @@ context, while the non-lite variants do (ESL: enable state loss).</p>
<div class="section" id="capi">
<h3>CAPI<a class="headerlink" href="#capi" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>POWER9 DD2 update</p>
+<li><p class="first">POWER9 DD2 update</p>
<p>The CAPI initialization sequence has been updated in DD2.
This patch adapts to the changes, retaining compatibility with DD1.
The patch includes some changes to DD1 fix-ups as well.</p>
</li>
-<li><p>Load CAPP microcode for POWER9 DD2.0 and DD2.1</p></li>
-<li><p>capi: Mask Psl Credit timeout error for POWER9</p>
+<li><p class="first">Load CAPP microcode for POWER9 DD2.0 and DD2.1</p>
+</li>
+<li><p class="first">capi: Mask Psl Credit timeout error for POWER9</p>
<p>Mask the PSL credit timeout error in CAPP FIR Mask register
bit(46). As per the h/w team this error is now deprecated and shouldn’t
cause any fir-action for P9.</p>
@@ -247,89 +249,96 @@ HDAT based on VPD, you now <em>MUST</em> have correct VPD programmed or we will
are not booting a Sequoia Witherspoon planar. In the case of booting with
old VPD and/or Hostboot, we print a <strong>giant scary warning</strong> in order to scare you.</p>
<ul>
-<li><p>npu2: Read slot label from the HDAT link node</p>
+<li><p class="first">npu2: Read slot label from the HDAT link node</p>
<p>Binding GPU to emulated NPU PCI devices is done using the slot labels
since the NPU devices do not have a patching slot node we need to
copy the label in here.</p>
</li>
-<li><p>npu2: Copy link speed from the npu HDAT node</p>
+<li><p class="first">npu2: Copy link speed from the npu HDAT node</p>
<p>This needs to be in the PCI device node so the speed of the NVLink
can be passed to the GPU driver.</p>
</li>
-<li><p>npu2: hw-procedures: Add settings to PHY_RESET</p>
+<li><p class="first">npu2: hw-procedures: Add settings to PHY_RESET</p>
<p>Set a few new values in the PHY_RESET procedure, as specified by our
updated programming guide documentation.</p>
</li>
-<li><p>Parse NVLink information from HDAT</p>
+<li><p class="first">Parse NVLink information from HDAT</p>
<p>Add the per-chip structures that descibe how the A-Bus/NVLink/OpenCAPI
phy is configured. This generates the <a class="reference external" href="mailto:npu&#37;&#52;&#48;xyz">npu<span>&#64;</span>xyz</a> nodes for each chip on
systems that support it.</p>
</li>
-<li><p>npu2: Add vendor cap for IRQ testing</p>
+<li><p class="first">npu2: Add vendor cap for IRQ testing</p>
<p>Provide a way to test recoverable data link interrupts via a new
vendor capability byte.</p>
</li>
-<li><p>npu2: Enable recoverable data link (no-stall) interrupts</p>
+<li><p class="first">npu2: Enable recoverable data link (no-stall) interrupts</p>
<p>Allow the NPU2 to trigger “recoverable data link” interrupts.</p>
</li>
-<li><p>npu2: Implement basic FLR (Function Level Reset)</p></li>
-<li><p>npu2: hw-procedures: Update PHY DC calibration procedure</p></li>
-<li><p>npu2: hw-procedures: Change rx_pr_phase_step value</p></li>
+<li><p class="first">npu2: Implement basic FLR (Function Level Reset)</p>
+</li>
+<li><p class="first">npu2: hw-procedures: Update PHY DC calibration procedure</p>
+</li>
+<li><p class="first">npu2: hw-procedures: Change rx_pr_phase_step value</p>
+</li>
</ul>
</div>
<div class="section" id="xive">
<h3>XIVE<a class="headerlink" href="#xive" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>xive: Fix opal_xive_dump_tm() to access W2 properly.
-The HW only supported limited access sizes.</p></li>
-<li><p>xive: Make opal_xive_allocate_irq() properly try all chips</p>
+<li><p class="first">xive: Fix opal_xive_dump_tm() to access W2 properly.
+The HW only supported limited access sizes.</p>
+</li>
+<li><p class="first">xive: Make opal_xive_allocate_irq() properly try all chips</p>
<p>When requested via OPAL_XIVE_ANY_CHIP, we need to try all
chips. We first try the current one (on which the caller
sits) and if that fails, we iterate all chips until the
allocation succeeds.</p>
</li>
-<li><p>xive: Fix initialization &amp; cleanup of HW thread contexts</p>
+<li><p class="first">xive: Fix initialization &amp; cleanup of HW thread contexts</p>
<p>Instead of trying to “pull” everything and clear VT (which didn’t
work and caused some FIRs to be set), instead just clear and then
set the PTER thread enable bit. This has the side effect of
completely resetting the corresponding thread context.</p>
<p>This fixes the spurrious XIVE FIRs reported by PRD and fircheck</p>
</li>
-<li><p>xive: Add debug option for detecting misrouted IPI in emulation</p>
+<li><p class="first">xive: Add debug option for detecting misrouted IPI in emulation</p>
<p>This is high overhead so we don’t enable it by default even
in debug builds, it’s also a bit messy, but it allowed me to
detect and debug a locking issue earlier so it can be useful.</p>
</li>
-<li><p>xive: Increase the interrupt “gap” on debug builds</p>
+<li><p class="first">xive: Increase the interrupt “gap” on debug builds</p>
<p>We normally allocate IPIs from 0x10. Make that 0x1000 on debug
builds to limit the chances of overlapping with Linux interrupt
numbers which makes debugging code that confuses them easier.</p>
<p>Also add a warning in emulation if we get an interrupt in the
queue whose number is below the gap.</p>
</li>
-<li><p>xive: Fix locking around cache scrub &amp; watch</p>
+<li><p class="first">xive: Fix locking around cache scrub &amp; watch</p>
<p>Thankfully the missing locking only affects debug code and
init code that doesn’t run concurrently. Also adds a DEBUG
option that checks the lock is properly held.</p>
</li>
-<li><p>xive: Workaround HW issue with scrub facility</p>
+<li><p class="first">xive: Workaround HW issue with scrub facility</p>
<p>Without this, we sometimes don’t observe from a CPU the
values written to the ENDs or NVTs via the cache watch.</p>
</li>
-<li><p>xive: Add exerciser for cache watch/scrub facility in DEBUG builds</p></li>
-<li><p>xive: Make assertion in xive_eq_for_target() more informative</p></li>
-<li><p>xive: Add debug code to check initial cache updates</p></li>
-<li><p>xive: Ensure pressure relief interrupts are disabled</p>
+<li><p class="first">xive: Add exerciser for cache watch/scrub facility in DEBUG builds</p>
+</li>
+<li><p class="first">xive: Make assertion in xive_eq_for_target() more informative</p>
+</li>
+<li><p class="first">xive: Add debug code to check initial cache updates</p>
+</li>
+<li><p class="first">xive: Ensure pressure relief interrupts are disabled</p>
<p>We don’t use them and we hijack the VP field with their
configuration to store the EQ reference, so make sure the
kernel or guest can’t turn them back on by doing MMIO
writes to ACK#</p>
</li>
-<li><p>xive: Don’t try setting the reserved ACK# field in VPs</p>
+<li><p class="first">xive: Don’t try setting the reserved ACK# field in VPs</p>
<p>That doesn’t work, the HW doesn’t implement it in the cache
watch facility anyway.</p>
</li>
-<li><p>xive: Remove useless memory barriers in VP/EQ inits</p>
+<li><p class="first">xive: Remove useless memory barriers in VP/EQ inits</p>
<p>We no longer update “live” memory structures, we use a temporary
copy on the stack and update the actual memory structure using
the cache watch, so those barriers are pointless.</p>
@@ -339,19 +348,19 @@ the cache watch, so those barriers are pointless.</p>
<div class="section" id="phb4">
<h3>PHB4<a class="headerlink" href="#phb4" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>phb4: Mask RXE_ARB: DEC Stage Valid Error</p>
+<li><p class="first">phb4: Mask RXE_ARB: DEC Stage Valid Error</p>
<p>Change the inits to mask out the RXE ARB: DEC Stage Valid Error (bit
370. This has been a fatal error but should be informational only.</p>
<p>This update will be in the next version of the phb4 workbook.</p>
</li>
-<li><p>phb4: Add additional adapter to retrain whitelist</p>
+<li><p class="first">phb4: Add additional adapter to retrain whitelist</p>
<p>The single port version of the ConnectX-5 has a different device ID 0x1017.
Updated descriptions to match pciutils database.</p>
</li>
-<li><p>PHB4: Default to PCIe GEN3 on POWER9 DD2.00</p>
+<li><p class="first">PHB4: Default to PCIe GEN3 on POWER9 DD2.00</p>
<p>You can use the NVRAM override for DD2.00 screened parts.</p>
</li>
-<li><p>phb4: Retrain link if degraded</p>
+<li><p class="first">phb4: Retrain link if degraded</p>
<p>On P9 Scale Out (Nimbus) DD2.0 and Scale in (Cumulus) DD1.0 (and
below) the PCIe PHY can lockup causing training issues. This can cause
a degradation in speed or width in ~5% of training cases (depending on
@@ -379,7 +388,7 @@ card.</p>
<div class="section" id="ibm-fsp-platforms">
<h2>IBM FSP platforms<a class="headerlink" href="#ibm-fsp-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>FSP/NVRAM: Handle “get vNVRAM statistics” command</p>
+<li><p class="first">FSP/NVRAM: Handle “get vNVRAM statistics” command</p>
<p>FSP sends MBOX command (cmd : 0xEB, subcmd : 0x05, mod : 0x00) to get vNVRAM
statistics. OPAL doesn’t maintain any such statistics. Hence return
FSP_STATUS_INVALID_SUBCMD.</p>
@@ -391,11 +400,12 @@ FSP_STATUS_INVALID_SUBCMD.</p>
</pre></div>
</div>
</li>
-<li><p>fsp: Move common prints to trace</p>
+<li><p class="first">fsp: Move common prints to trace</p>
<p>These two prints just end up filling the skiboot logs on any machine
that’s been booted for more than a few hours.</p>
-<dl class="simple">
-<dt>They have never been useful, so make them trace level. They were: ::</dt><dd><p>SURV: Received heartbeat acknowledge from FSP
+<dl class="docutils">
+<dt>They have never been useful, so make them trace level. They were: ::</dt>
+<dd><p class="first last">SURV: Received heartbeat acknowledge from FSP
SURV: Sending the heartbeat command to FSP</p>
</dd>
</dl>
@@ -405,7 +415,7 @@ SURV: Sending the heartbeat command to FSP</p>
<div class="section" id="bmc-based-systems">
<h2>BMC based systems<a class="headerlink" href="#bmc-based-systems" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hw/lpc-uart: read from RBR to clear character timeout interrupts</p>
+<li><p class="first">hw/lpc-uart: read from RBR to clear character timeout interrupts</p>
<p>When using the aspeed SUART, we see a condition where the UART sends
continuous character timeout interrupts. This change adds a (heavily
commented) dummy read from the RBR to clear the interrupt condition on
@@ -413,14 +423,15 @@ init.</p>
<p>This was observed on p9dsu systems, but likely applies to other systems
using the SUART.</p>
</li>
-<li><p>astbmc: Add methods for handing Device Tree based slots
-e.g. ones from HDAT on POWER9.</p></li>
+<li><p class="first">astbmc: Add methods for handing Device Tree based slots
+e.g. ones from HDAT on POWER9.</p>
+</li>
</ul>
</div>
<div class="section" id="general">
<h2>General<a class="headerlink" href="#general" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>ipmi: Convert common debug prints to trace</p>
+<li><p class="first">ipmi: Convert common debug prints to trace</p>
<p>OPAL logs messages for every IPMI request from host. Sometime OPAL console
is filled with only these messages. This path is pretty stable now and
we have enough logs to cover bad path. Hence lets convert these debug
@@ -432,11 +443,11 @@ message to trace/info message. Examples are:</p>
</pre></div>
</div>
</li>
-<li><p>libflash/file: Handle short read()s and write()s correctly</p>
+<li><p class="first">libflash/file: Handle short read()s and write()s correctly</p>
<p>Currently we don’t move the buffer along for a short read() or write()
and nor do we request only the remaining amount.</p>
</li>
-<li><p>hw/p8-i2c: Rework timeout handling</p>
+<li><p class="first">hw/p8-i2c: Rework timeout handling</p>
<p>Currently we treat a timeout as a hard failure and will automatically
fail any transations that hit their timeout. This results in
unnecessarily failing I2C requests if interrupts are dropped, etc.
@@ -447,7 +458,7 @@ handling to check the status and continue the transaction if it can.
if it can while logging an error if it detects a timeout due to a
dropped interrupt.</p>
</li>
-<li><p>core/flash: Only expect ELF header for BOOTKERNEL partition flash resource</p>
+<li><p class="first">core/flash: Only expect ELF header for BOOTKERNEL partition flash resource</p>
<p>When loading a flash resource which isn’t signed (secure and trusted
boot) and which doesn’t have a subpartition, we assume it’s the
BOOTKERNEL since previously this was the only such resource. Thus we
@@ -467,7 +478,7 @@ the FFS header. Also set the return code on error so we don’t
erroneously return OPAL_SUCCESS. Add a check that the resource will fit
in the supplied buffer to prevent buffer overrun.</p>
</li>
-<li><p>flash: Support adding the no-erase property to flash</p>
+<li><p class="first">flash: Support adding the no-erase property to flash</p>
<p>The mbox protocol explicitly states that an erase is not required
before a write. This means that issuing an erase from userspace,
through the mtd device, and back returns a successful operation
@@ -484,7 +495,7 @@ MTD_NO_ERASE flag from the device tree property.</p>
<div class="section" id="utilities">
<h2>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>external/gard: Clear entire guard partition instead of entry by entry</p>
+<li><p class="first">external/gard: Clear entire guard partition instead of entry by entry</p>
<p>When using the current implementation of the gard tool to ecc clear the
entire GUARD partition it is done one gard record at a time. While this
may be ok when accessing the actual flash this is very slow when done
@@ -496,50 +507,51 @@ entire buffer. Then we can do one big erase and write of the entire
partition. This reduces the time to clear the guard partition to on the
order of 4 seconds.</p>
</li>
-<li><p>opal-prd: Fix opal-prd command line options</p>
+<li><p class="first">opal-prd: Fix opal-prd command line options</p>
<p>HBRT OCC reset interface depends on service processor type.</p>
<ul class="simple">
-<li><p>FSP: reset_pm_complex()</p></li>
-<li><p>BMC: process_occ_reset()</p></li>
+<li>FSP: reset_pm_complex()</li>
+<li>BMC: process_occ_reset()</li>
</ul>
<p>We have both <cite>occ</cite> and <cite>pm-complex</cite> command line interfaces.
This patch adds support to dispaly appropriate message depending
on system type.</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 6%" />
-<col style="width: 39%" />
-<col style="width: 55%" />
+<col width="6%" />
+<col width="39%" />
+<col width="55%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>SP</p></th>
-<th class="head"><p>Command</p></th>
-<th class="head"><p>Action</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">SP</th>
+<th class="head">Command</th>
+<th class="head">Action</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>FSP</p></td>
-<td><p>opal-prd occ</p></td>
-<td><p>display error message</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>FSP</td>
+<td>opal-prd occ</td>
+<td>display error message</td>
</tr>
-<tr class="row-odd"><td><p>FSP</p></td>
-<td><p>opal-prd pm-complex</p></td>
-<td><p>Call pm_complex_reset()</p></td>
+<tr class="row-odd"><td>FSP</td>
+<td>opal-prd pm-complex</td>
+<td>Call pm_complex_reset()</td>
</tr>
-<tr class="row-even"><td><p>BMC</p></td>
-<td><p>opal-prd occ</p></td>
-<td><p>Call process_occ_reset()</p></td>
+<tr class="row-even"><td>BMC</td>
+<td>opal-prd occ</td>
+<td>Call process_occ_reset()</td>
</tr>
-<tr class="row-odd"><td><p>BMC</p></td>
-<td><p>opal-prd pm-complex</p></td>
-<td><p>display error message</p></td>
+<tr class="row-odd"><td>BMC</td>
+<td>opal-prd pm-complex</td>
+<td>display error message</td>
</tr>
</tbody>
</table>
</li>
-<li><p>opal-prd: detect service processor type and
-then make appropriate occ reset call.</p></li>
-<li><p>pflash: Fix erase command for unaligned start address</p>
+<li><p class="first">opal-prd: detect service processor type and
+then make appropriate occ reset call.</p>
+</li>
+<li><p class="first">pflash: Fix erase command for unaligned start address</p>
<p>The erase_range() function handles erasing the flash for a given start
address and length, and can handle an unaligned start address and
length. However in the unaligned start address case we are incorrectly
@@ -549,13 +561,14 @@ address was then we probably want to do that before we overide the
origin start address. So rearrange the code so that this is indeed the
case.</p>
</li>
-<li><p>external/gard: Print an error if run on an FSP system</p></li>
+<li><p class="first">external/gard: Print an error if run on an FSP system</p>
+</li>
</ul>
</div>
<div class="section" id="simulators">
<h2>Simulators<a class="headerlink" href="#simulators" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>mambo: Add mambo socket program</p>
+<li><p class="first">mambo: Add mambo socket program</p>
<p>This adds a program that can be run inside a mambo simulator in linux
userspace which enables TCP sockets to be proxied in and out of the
simulator to the host.</p>
@@ -563,15 +576,15 @@ simulator to the host.</p>
drivers/infrastructure to run.</p>
<p>Run inside the simulator:</p>
<ul class="simple">
-<li><p>to forward host ssh connections to sim ssh server:
+<li>to forward host ssh connections to sim ssh server:
<code class="docutils literal notranslate"><span class="pre">./mambo-socket-proxy</span> <span class="pre">-h</span> <span class="pre">10022</span> <span class="pre">-s</span> <span class="pre">22</span></code>, then connect to port 10022
-on your host with <code class="docutils literal notranslate"><span class="pre">ssh</span> <span class="pre">-p</span> <span class="pre">10022</span> <span class="pre">localhost</span></code></p></li>
-<li><p>to allow http proxy access from inside the sim to local http proxy:
-<code class="docutils literal notranslate"><span class="pre">./mambo-socket-proxy</span> <span class="pre">-b</span> <span class="pre">proxy.mynetwork</span> <span class="pre">-h</span> <span class="pre">3128</span> <span class="pre">-s</span> <span class="pre">3128</span></code></p></li>
+on your host with <code class="docutils literal notranslate"><span class="pre">ssh</span> <span class="pre">-p</span> <span class="pre">10022</span> <span class="pre">localhost</span></code></li>
+<li>to allow http proxy access from inside the sim to local http proxy:
+<code class="docutils literal notranslate"><span class="pre">./mambo-socket-proxy</span> <span class="pre">-b</span> <span class="pre">proxy.mynetwork</span> <span class="pre">-h</span> <span class="pre">3128</span> <span class="pre">-s</span> <span class="pre">3128</span></code></li>
</ul>
<p>Multiple connections are supported.</p>
</li>
-<li><p>idle: disable stop*_lite POWER9 idle states for Mambo platform</p>
+<li><p class="first">idle: disable stop*_lite POWER9 idle states for Mambo platform</p>
<p>Mambo prior to Mambo.7.8.21 had a bug where the stop idle instruction
with PSSCR[ESL]=PSSCR[EC]=0 would resume with MSR set as though it had
taken a system reset interrupt.</p>
@@ -585,7 +598,6 @@ lite stop states for the mambo platform for now.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -629,15 +641,17 @@ lite stop states for the mambo platform for now.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -654,15 +668,14 @@ lite stop states for the mambo platform for now.</p>
<li class="right" >
<a href="skiboot-5.9.html" title="skiboot-5.9"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.9-rc2.html b/doc/release-notes/skiboot-5.9-rc2.html
index 75a4da8..11074bf 100644
--- a/doc/release-notes/skiboot-5.9-rc2.html
+++ b/doc/release-notes/skiboot-5.9-rc2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.9-rc2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.9-rc2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.9-rc1.html" title="skiboot-5.9-rc1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -58,16 +59,17 @@ being for all POWER8 and POWER9 platforms in op-build v1.20 (Due October 18th).
This release will be targetted to early POWER9 systems.</p>
<p>Over <a class="reference internal" href="skiboot-5.9-rc1.html#skiboot-5-9-rc1"><span class="std std-ref">skiboot-5.9-rc1</span></a>, we have the following changes:</p>
<ul>
-<li><p>opal-prd: Fix memory leak</p></li>
-<li><p>hdata/i2c: update the list of known i2c devs</p>
+<li><p class="first">opal-prd: Fix memory leak</p>
+</li>
+<li><p class="first">hdata/i2c: update the list of known i2c devs</p>
<p>This updates the list of known i2c devices - as of HDAT spec v10.5e - so
that they can be properly identified during the hdat parsing.</p>
</li>
-<li><p>hdata/i2c: log unknown i2c devices</p>
+<li><p class="first">hdata/i2c: log unknown i2c devices</p>
<p>An i2c device is unknown if either the i2c device list is outdated or
the device is marked as unknown (0xFF) in the hdat.</p>
</li>
-<li><p>opal/cpu: Mark the core as bad while disabling threads of the core.</p>
+<li><p class="first">opal/cpu: Mark the core as bad while disabling threads of the core.</p>
<p>If any of the core fails to sync its TB during chipTOD initialization,
all the threads of that core are disabled. But this does not make
linux kernel to ignore the core/cpus. It crashes while bringing them up
@@ -98,7 +100,7 @@ enter ? for help
</pre></div>
</div>
</li>
-<li><p>hw/imc: pause microcode at boot</p>
+<li><p class="first">hw/imc: pause microcode at boot</p>
<p>IMC nest counters has both in-band (ucode access) and out of
band access to it. Since not all nest counter configurations
are supported by ucode, out of band tools are used to characterize
@@ -114,7 +116,7 @@ and OPAL_IMC_COUNTERS_STOP API calls should be used to start and pause
these IMC engines. <cite>doc/opal-api/opal-imc-counters.rst</cite> details the
OPAL APIs and their usage.</p>
</li>
-<li><p>xive: Fix VP free block group mode false-positive parameter check</p>
+<li><p class="first">xive: Fix VP free block group mode false-positive parameter check</p>
<p>The check to ensure the buddy allocation idx is aligned to its
allocation order was not taking into account the allocation split.
This would result in opal_xive_free_vp_block failures despite
@@ -132,33 +134,33 @@ in the host:</p>
</pre></div>
</div>
</li>
-<li><p>hw/p8-i2c: Fix deadlock in p9_i2c_bus_owner_change</p>
+<li><p class="first">hw/p8-i2c: Fix deadlock in p9_i2c_bus_owner_change</p>
<p>When debugging a system where Linux was taking soft lockup errors with
two CPUs stuck in OPAL:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 50%" />
-<col style="width: 50%" />
+<col width="50%" />
+<col width="50%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>CPU0</p></th>
-<th class="head"><p>CPU1</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">CPU0</th>
+<th class="head">CPU1</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>lock</p></td>
-<td></td>
+<tbody valign="top">
+<tr class="row-even"><td>lock</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p>p8_i2c_recover</p></td>
-<td></td>
+<tr class="row-odd"><td>p8_i2c_recover</td>
+<td>&#160;</td>
</tr>
-<tr class="row-even"><td><p>opal_handle_interrupt</p></td>
-<td><p>sync_timer
+<tr class="row-even"><td>opal_handle_interrupt</td>
+<td>sync_timer
cancel_timer
p9_i2c_bus_owner_change
occ_p9_interrupt
xive_source_interrupt
-opal_handle_interrupt</p></td>
+opal_handle_interrupt</td>
</tr>
</tbody>
</table>
@@ -167,13 +169,13 @@ p9_i2c_bus_owner_change() has taken master-&gt;lock, but then is stuck waiting
for all timers to complete. We deadlock.</p>
<p>Fix this by using cancel_timer_async().</p>
</li>
-<li><p>FSP/CONSOLE: Limit number of error logging</p>
+<li><p class="first">FSP/CONSOLE: Limit number of error logging</p>
<p>Commit c8a7535f (FSP/CONSOLE: Workaround for unresponsive ipmi daemon) added
error logging when buffer is full. In some corner cases kernel may call this
function multiple time and we may endup logging error again and again.</p>
<p>This patch fixes it by generating error log only once.</p>
</li>
-<li><p>FSP/CONSOLE: Fix fsp_console_write_buffer_space() call</p>
+<li><p class="first">FSP/CONSOLE: Fix fsp_console_write_buffer_space() call</p>
<p>Kernel calls fsp_console_write_buffer_space() to check console buffer space
availability. If there is enough buffer space to write data, then kernel will
call fsp_console_write() to write actual data.</p>
@@ -189,7 +191,7 @@ point we will start timer with timeout of SER_BUFFER_OUT_TIMEOUT (10 secs).
If situation is not improved within 10 seconds means something went bad. Lets
return OPAL_RESOURCE so that kernel can drop console write and continue.</p>
</li>
-<li><p>FSP/CONSOLE: Close SOL session during R/R</p>
+<li><p class="first">FSP/CONSOLE: Close SOL session during R/R</p>
<p>Presently we are not closing SOL and FW console sessions during R/R. Host will
continue to write to SOL buffer during FSP R/R. If there is heavy console write
operation happening during FSP R/R (like running <cite>top</cite> command inside console),
@@ -214,7 +216,7 @@ we may see RCU stalls (like below) in kernel.</p>
</div>
<p>Hence lets close SOL (and FW console) during FSP R/R.</p>
</li>
-<li><p>FSP/CONSOLE: Do not associate unavailable console</p>
+<li><p class="first">FSP/CONSOLE: Do not associate unavailable console</p>
<p>Presently OPAL sends associate/unassociate MBOX command for all
FSP serial console (like below OPAL message). We have to check
console is available or not before sending this message.</p>
@@ -223,73 +225,73 @@ console is available or not before sending this message.</p>
</pre></div>
</div>
</li>
-<li><p>FSP: Disable PSI link whenever FSP tells OPAL about impending R/R</p>
+<li><p class="first">FSP: Disable PSI link whenever FSP tells OPAL about impending R/R</p>
<p>Commit 42d5d047 fixed scenario where DPO has been initiated, but FSP went
into reset before the CEC power down came in. But this is generic issue
that can happen in normal shutdown path as well.</p>
<p>Hence disable PSI link as soon as we detect FSP impending R/R.</p>
</li>
-<li><p>fsp: return OPAL_BUSY_EVENT on failure sending FSP_CMD_POWERDOWN_NORM
+<li><p class="first">fsp: return OPAL_BUSY_EVENT on failure sending FSP_CMD_POWERDOWN_NORM
Also, return OPAL_BUSY_EVENT on failure sending FSP_CMD_REBOOT / DEEP_REBOOT.</p>
<p>We had a race condition between FSP Reset/Reload and powering down
the system from the host:</p>
<p>Roughly:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 2%" />
-<col style="width: 29%" />
-<col style="width: 69%" />
+<col width="2%" />
+<col width="29%" />
+<col width="69%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>#</p></th>
-<th class="head"><p>FSP</p></th>
-<th class="head"><p>Host</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">#</th>
+<th class="head">FSP</th>
+<th class="head">Host</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>1</p></td>
-<td><p>Power on</p></td>
-<td></td>
+<tbody valign="top">
+<tr class="row-even"><td>1</td>
+<td>Power on</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p>2</p></td>
-<td></td>
-<td><p>Power on</p></td>
+<tr class="row-odd"><td>2</td>
+<td>&#160;</td>
+<td>Power on</td>
</tr>
-<tr class="row-even"><td><p>3</p></td>
-<td><p>(inject EPOW)</p></td>
-<td></td>
+<tr class="row-even"><td>3</td>
+<td>(inject EPOW)</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p>4</p></td>
-<td><p>(trigger FSP R/R)</p></td>
-<td></td>
+<tr class="row-odd"><td>4</td>
+<td>(trigger FSP R/R)</td>
+<td>&#160;</td>
</tr>
-<tr class="row-even"><td><p>5</p></td>
-<td></td>
-<td><p>Processes EPOW event, starts shutting down</p></td>
+<tr class="row-even"><td>5</td>
+<td>&#160;</td>
+<td>Processes EPOW event, starts shutting down</td>
</tr>
-<tr class="row-odd"><td><p>6</p></td>
-<td></td>
-<td><p>calls OPAL_CEC_POWER_DOWN</p></td>
+<tr class="row-odd"><td>6</td>
+<td>&#160;</td>
+<td>calls OPAL_CEC_POWER_DOWN</td>
</tr>
-<tr class="row-even"><td><p>7</p></td>
-<td><p>(is still in R/R)</p></td>
-<td></td>
+<tr class="row-even"><td>7</td>
+<td>(is still in R/R)</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p>8</p></td>
-<td></td>
-<td><p>gets OPAL_INTERNAL_ERROR, spins in opal_poll_events</p></td>
+<tr class="row-odd"><td>8</td>
+<td>&#160;</td>
+<td>gets OPAL_INTERNAL_ERROR, spins in opal_poll_events</td>
</tr>
-<tr class="row-even"><td><p>9</p></td>
-<td><p>(FSP comes back)</p></td>
-<td></td>
+<tr class="row-even"><td>9</td>
+<td>(FSP comes back)</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p>10</p></td>
-<td></td>
-<td><p>spinning in opal_poll_events</p></td>
+<tr class="row-odd"><td>10</td>
+<td>&#160;</td>
+<td>spinning in opal_poll_events</td>
</tr>
-<tr class="row-even"><td><p>11</p></td>
-<td><p>(thinks host is running)</p></td>
-<td></td>
+<tr class="row-even"><td>11</td>
+<td>(thinks host is running)</td>
+<td>&#160;</td>
</tr>
</tbody>
</table>
@@ -328,7 +330,6 @@ Reset/Reload handling before we power off the system.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -348,15 +349,17 @@ Reset/Reload handling before we power off the system.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -373,15 +376,14 @@ Reset/Reload handling before we power off the system.</p>
<li class="right" >
<a href="skiboot-5.9-rc1.html" title="skiboot-5.9-rc1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.9-rc3.html b/doc/release-notes/skiboot-5.9-rc3.html
index ef798bb..fb45750 100644
--- a/doc/release-notes/skiboot-5.9-rc3.html
+++ b/doc/release-notes/skiboot-5.9-rc3.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.9-rc3 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.9-rc3 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.9-rc2.html" title="skiboot-5.9-rc2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9-rc3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -58,17 +59,18 @@ being for all POWER8 and POWER9 platforms in op-build v1.20 (Due October 18th).
This release will be targetted to early POWER9 systems.</p>
<p>Over <a class="reference internal" href="skiboot-5.9-rc2.html#skiboot-5-9-rc2"><span class="std std-ref">skiboot-5.9-rc2</span></a>, we have the following changes:</p>
<ul>
-<li><p>Improvements to vpd device tree entries</p>
+<li><p class="first">Improvements to vpd device tree entries</p>
<p>Previously we would miss some properties</p>
</li>
-<li><p>Revert “npu2: Add vendor cap for IRQ testing”</p>
+<li><p class="first">Revert “npu2: Add vendor cap for IRQ testing”</p>
<p>This reverts commit 9817c9e29b6fe00daa3a0e4420e69a97c90eb373 which seems to
break setting the PCI dev flag and the link number in the PCIe vendor
specific config space. This leads to the device driver attempting to
re-init the DL when it shouldn’t which can cause HMI’s.</p>
</li>
-<li><p>hw/imc: Fix IMC Catalog load for DD2.X processors</p></li>
-<li><p>cpu: Add OPAL_REINIT_CPUS_TM_SUSPEND_DISABLED</p>
+<li><p class="first">hw/imc: Fix IMC Catalog load for DD2.X processors</p>
+</li>
+<li><p class="first">cpu: Add OPAL_REINIT_CPUS_TM_SUSPEND_DISABLED</p>
<p>Add a new CPU reinit flag, “TM Suspend Disabled”, which requests that
CPUs be configured so that TM (Transactional Memory) suspend mode is
disabled.</p>
@@ -80,7 +82,6 @@ determine the status and return an appropriate error code.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -100,15 +101,17 @@ determine the status and return an appropriate error code.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -125,15 +128,14 @@ determine the status and return an appropriate error code.</p>
<li class="right" >
<a href="skiboot-5.9-rc2.html" title="skiboot-5.9-rc2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9-rc3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.9-rc4.html b/doc/release-notes/skiboot-5.9-rc4.html
index 3ec0a4c..5a847ff 100644
--- a/doc/release-notes/skiboot-5.9-rc4.html
+++ b/doc/release-notes/skiboot-5.9-rc4.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.9-rc4 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.9-rc4 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.9-rc3.html" title="skiboot-5.9-rc3"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9-rc4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -59,27 +60,29 @@ so we’re running a bit behind there).
This release will be targetted to early POWER9 systems.</p>
<p>Over <a class="reference internal" href="skiboot-5.9-rc3.html#skiboot-5-9-rc3"><span class="std std-ref">skiboot-5.9-rc3</span></a>, we have the following changes:</p>
<ul>
-<li><p>phb4: Fix PCIe GEN4 on DD2.1 and above</p>
-<dl class="simple">
-<dt>In this change:</dt><dd><p>eef0e197ab PHB4: Default to PCIe GEN3 on POWER9 DD2.00</p>
+<li><p class="first">phb4: Fix PCIe GEN4 on DD2.1 and above</p>
+<dl class="docutils">
+<dt>In this change:</dt>
+<dd><p class="first last">eef0e197ab PHB4: Default to PCIe GEN3 on POWER9 DD2.00</p>
</dd>
</dl>
<p>We clamped DD2.00 parts to GEN3 but unfortunately this change also
applies to DD2.1 and above.</p>
<p>This fixes this to only apply to DD2.00.</p>
</li>
-<li><p>occ-sensors : Add OCC inband sensor region to exports
-(useful for debugging)</p></li>
+<li><p class="first">occ-sensors : Add OCC inband sensor region to exports
+(useful for debugging)</p>
+</li>
</ul>
<p>Two SRESET fixes:</p>
<ul>
-<li><p>core: direct-controls: Fix clearing of special wakeup</p>
+<li><p class="first">core: direct-controls: Fix clearing of special wakeup</p>
<p>â€special_wakeup_count’ is incremented on successfully asserting
special wakeup. So we will never clear the special wakeup if we
check â€special_wakeup_count’ to be zero. Fix this issue by checking
the â€special_wakeup_count’ to 1 in dctl_clear_special_wakeup().</p>
</li>
-<li><p>core/direct-controls: increase special wakeup timeout on POWER9</p>
+<li><p class="first">core/direct-controls: increase special wakeup timeout on POWER9</p>
<p>Some instances have been observed where the special wakeup assert
times out. The current timeout is too short for deeper sleep states.
Hostboot uses 100ms, so match that.</p>
@@ -88,7 +91,6 @@ Hostboot uses 100ms, so match that.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -108,15 +110,17 @@ Hostboot uses 100ms, so match that.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -133,15 +137,14 @@ Hostboot uses 100ms, so match that.</p>
<li class="right" >
<a href="skiboot-5.9-rc3.html" title="skiboot-5.9-rc3"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9-rc4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.9-rc5.html b/doc/release-notes/skiboot-5.9-rc5.html
index 385edeb..00c005c 100644
--- a/doc/release-notes/skiboot-5.9-rc5.html
+++ b/doc/release-notes/skiboot-5.9-rc5.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.9-rc5 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.9-rc5 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.9-rc4.html" title="skiboot-5.9-rc4"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9-rc5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -60,9 +61,11 @@ so we’re running a bit behind there).
This release will be targetted to early POWER9 systems.</p>
<p>Over <a class="reference internal" href="skiboot-5.9-rc3.html#skiboot-5-9-rc3"><span class="std std-ref">skiboot-5.9-rc3</span></a>, we have the following changes:</p>
<ul>
-<li><p>opal/hmi: Workaround Power9 hw logic bug for couple of TFMR TB errors.</p></li>
-<li><p>opal/hmi: Fix TB reside and HDEC parity error recovery for power9</p></li>
-<li><p>phb4: Escalate freeze to fence to avoid checkstop</p>
+<li><p class="first">opal/hmi: Workaround Power9 hw logic bug for couple of TFMR TB errors.</p>
+</li>
+<li><p class="first">opal/hmi: Fix TB reside and HDEC parity error recovery for power9</p>
+</li>
+<li><p class="first">phb4: Escalate freeze to fence to avoid checkstop</p>
<p>Freeze events such as MMIO loads can cause the PHB to lose it’s
limited powerbus credits. If all credits are used and a further MMIO
will cause a checkstop.</p>
@@ -70,11 +73,11 @@ will cause a checkstop.</p>
fence. The fence will cause a full PHB reset which resets the powerbus
credits and avoids the checkstop.</p>
</li>
-<li><p>phb4: Update some init registers</p>
+<li><p class="first">phb4: Update some init registers</p>
<p>New inits based on next PHB4 workbook. Increases some timeouts to
avoid some spurious error conditions.</p>
</li>
-<li><p>phb4: Enable PHB MMIO in phb4_root_port_init()</p>
+<li><p class="first">phb4: Enable PHB MMIO in phb4_root_port_init()</p>
<p>Linux EEH flow is somewhat broken. It saves the PCIe config space of
the PHB on boot, which it then uses to restore on EEH recovery. It
does this to restore MMIO bars and some other pieces.</p>
@@ -94,12 +97,12 @@ fail.</p>
phb4_root_port_init().</p>
<p>With this we can recovery from a PHB fence event on POWER9.</p>
</li>
-<li><p>phb4: Reduce link degraded message log level to debug</p>
+<li><p class="first">phb4: Reduce link degraded message log level to debug</p>
<p>If we hit this message we’ll retry and fix the problem. If we run out
of retries and can’t fix the problem, we’ll still print a log message
at error level indicating a problem.</p>
</li>
-<li><p>phb4: Fix GEN3 for DD2.00</p>
+<li><p class="first">phb4: Fix GEN3 for DD2.00</p>
<p>In this fix: <code class="docutils literal notranslate"><span class="pre">62ac7631ae</span></code> “phb4: Fix PCIe GEN4 on DD2.1 and above”,
We fixed DD2.1 GEN4 but broke DD2.00 as GEN3.</p>
<p>This fixes DD2.00 back to GEN3. This time for sure!</p>
@@ -108,7 +111,6 @@ We fixed DD2.1 GEN4 but broke DD2.00 as GEN3.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -128,15 +130,17 @@ We fixed DD2.1 GEN4 but broke DD2.00 as GEN3.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -153,15 +157,14 @@ We fixed DD2.1 GEN4 but broke DD2.00 as GEN3.</p>
<li class="right" >
<a href="skiboot-5.9-rc4.html" title="skiboot-5.9-rc4"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9-rc5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.9.1.html b/doc/release-notes/skiboot-5.9.1.html
index a1a0893..579161e 100644
--- a/doc/release-notes/skiboot-5.9.1.html
+++ b/doc/release-notes/skiboot-5.9.1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.9.1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.9.1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.9-rc5.html" title="skiboot-5.9-rc5"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -51,18 +52,18 @@
<p>Over <a class="reference internal" href="skiboot-5.9.html#skiboot-5-9"><span class="std std-ref">skiboot-5.9</span></a>, we have two NPU2 (NVLink2) fixes and two XIVE
bug fixes:</p>
<ul>
-<li><p>npu2: hw-procedures: Refactor reset_ntl procedure</p>
+<li><p class="first">npu2: hw-procedures: Refactor reset_ntl procedure</p>
<p>Change the implementation of reset_ntl to match the latest programming
guide documentation.</p>
</li>
-<li><p>npu2: hw-procedures: Add phy_rx_clock_sel()</p>
+<li><p class="first">npu2: hw-procedures: Add phy_rx_clock_sel()</p>
<p>Change the RX clk mux control to be done by software instead of HW. This
avoids glitches caused by changing the mux setting.</p>
</li>
-<li><p>xive: Fix ability to clear some EQ flags</p>
+<li><p class="first">xive: Fix ability to clear some EQ flags</p>
<p>We could never clear “unconditional notify” and “escalate”</p>
</li>
-<li><p>xive: Update inits for DD2.0</p>
+<li><p class="first">xive: Update inits for DD2.0</p>
<p>This updates some inits based on information from the HW
designers. This includes enabling some new DD2.0 features
that we don’t yet exploit.</p>
@@ -71,7 +72,6 @@ that we don’t yet exploit.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -91,15 +91,17 @@ that we don’t yet exploit.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -116,15 +118,14 @@ that we don’t yet exploit.</p>
<li class="right" >
<a href="skiboot-5.9-rc5.html" title="skiboot-5.9-rc5"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.9.2.html b/doc/release-notes/skiboot-5.9.2.html
index 05a9d2f..a07855c 100644
--- a/doc/release-notes/skiboot-5.9.2.html
+++ b/doc/release-notes/skiboot-5.9.2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.9.2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.9.2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.9.1.html" title="skiboot-5.9.1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,13 +53,13 @@
POWER9 platforms to avoid conflicting with the OCC use and an important
NPU2 (NVLink2) fix.</p>
<ul>
-<li><p>phb4: Fix lane equalisation setting</p>
+<li><p class="first">phb4: Fix lane equalisation setting</p>
<p>Fix cut and paste from phb3. The sizes have changes now we have GEN4,
so the check here needs to change also</p>
<p>Without this we end up with the default settings (all â€7’) rather
than what’s in HDAT.</p>
</li>
-<li><p>phb4: Fix PE mapping of M32 BAR</p>
+<li><p class="first">phb4: Fix PE mapping of M32 BAR</p>
<p>The M32 BAR is the PHB4 region used to map all the non-prefetchable
or 32-bit device BARs. It’s supposed to have its segments remapped
via the MDT and Linux relies on that to assign them individual PE#.</p>
@@ -66,25 +67,25 @@ via the MDT and Linux relies on that to assign them individual PE#.</p>
mode where PE# == segment#, thus causing EEH to freeze the wrong
device or PE#.</p>
</li>
-<li><p>phb4: Fix lost bit in PE number on config accesses</p>
+<li><p class="first">phb4: Fix lost bit in PE number on config accesses</p>
<p>A PE number can be up to 9 bits, using a uint8_t won’t fly..</p>
<p>That was causing error on config accesses to freeze the
wrong PE.</p>
</li>
-<li><p>phb4: Update inits</p>
+<li><p class="first">phb4: Update inits</p>
<p>New init value from HW folks for the fence enable register.</p>
<p>This clears bit 17 (CFG Write Error CA or UR response) and bit 22 (MMIO Write
DAT_ERR Indication) and sets bit 21 (MMIO CFG Pending Error)</p>
</li>
-<li><p>npu2: Move to new GPU memory map</p>
+<li><p class="first">npu2: Move to new GPU memory map</p>
<p>There are three different ways we configure the MCD and memory map.</p>
<ol class="arabic simple">
-<li><p>Old way (current way)
-Skiboot configures the MCD and puts GPUs at 4TB and below</p></li>
-<li><p>New way with MCD
-Hostboot configures the MCD and skiboot puts GPU at 4TB and above</p></li>
-<li><p>New way without MCD
-No one configures the MCD and skiboot puts GPU at 4TB and below</p></li>
+<li>Old way (current way)
+Skiboot configures the MCD and puts GPUs at 4TB and below</li>
+<li>New way with MCD
+Hostboot configures the MCD and skiboot puts GPU at 4TB and above</li>
+<li>New way without MCD
+No one configures the MCD and skiboot puts GPU at 4TB and below</li>
</ol>
<p>The change keeps option 1 and adds options 2 and 3.</p>
<p>The different configurations are detected using certain scoms (see
@@ -96,14 +97,14 @@ support existing hostboot.</p>
<p>Option 3 supports 6 GPUs and 4TB of memory but may have some
performance impact.</p>
</li>
-<li><p>p8-i2c: Don’t write the watermark register at init</p>
+<li><p class="first">p8-i2c: Don’t write the watermark register at init</p>
<p>On P9 the I2C master is shared with the OCC. Currently the watermark
values are set once at init time which is bad for two reasons:</p>
<ol class="loweralpha simple">
-<li><p>We don’t take the OCC master lock before setting it. Which
-may cause issues if the OCC is currently using the master.</p></li>
-<li><p>The OCC might change the watermark levels and we need to reset
-them.</p></li>
+<li>We don’t take the OCC master lock before setting it. Which
+may cause issues if the OCC is currently using the master.</li>
+<li>The OCC might change the watermark levels and we need to reset
+them.</li>
</ol>
<p>Change this so that we set the watermark value when a new transaction
is started rather than at init time.</p>
@@ -112,7 +113,6 @@ is started rather than at init time.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -132,15 +132,17 @@ is started rather than at init time.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -157,15 +159,14 @@ is started rather than at init time.</p>
<li class="right" >
<a href="skiboot-5.9.1.html" title="skiboot-5.9.1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.9.3.html b/doc/release-notes/skiboot-5.9.3.html
index 614e2c8..c1a9f59 100644
--- a/doc/release-notes/skiboot-5.9.3.html
+++ b/doc/release-notes/skiboot-5.9.3.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.9.3 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.9.3 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.9.2.html" title="skiboot-5.9.2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,7 +54,7 @@ machine to crash hard in the event of hardware error rather than crash
mysteriously later on whenever the NVLink2 links are used.</p>
<p>That fix is:</p>
<ul>
-<li><p>npu2: hw-procedures: Add check_credits procedure</p>
+<li><p class="first">npu2: hw-procedures: Add check_credits procedure</p>
<p>As an immediate mitigator for a current hardware glitch, add a procedure
that can be used to validate NTL credit values. This will be called as a
safeguard to check that link training succeeded.</p>
@@ -65,7 +66,6 @@ link traffic.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -85,15 +85,17 @@ link traffic.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -110,15 +112,14 @@ link traffic.</p>
<li class="right" >
<a href="skiboot-5.9.2.html" title="skiboot-5.9.2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.9.4.html b/doc/release-notes/skiboot-5.9.4.html
index 5a45050..78c4148 100644
--- a/doc/release-notes/skiboot-5.9.4.html
+++ b/doc/release-notes/skiboot-5.9.4.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.9.4 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.9.4 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.9.3.html" title="skiboot-5.9.3"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,9 +54,10 @@ a potential glitch (the one <a class="reference internal" href="skiboot-5.9.3.ht
than let a system continue to run until it mysteriously crashed later on).</p>
<p>That fix is in two parts:</p>
<ul>
-<li><p>npu2: hw-procedures: Change phy_rx_clock_sel values to recover from a
-potential glitch.</p></li>
-<li><p>npu2: hw-procedures: Manipulate IOVALID during training</p>
+<li><p class="first">npu2: hw-procedures: Change phy_rx_clock_sel values to recover from a
+potential glitch.</p>
+</li>
+<li><p class="first">npu2: hw-procedures: Manipulate IOVALID during training</p>
<p>Ensure that the IOVALID bit for this brick is raised at the start of
link training, in the reset_ntl procedure.</p>
<p>Then, to protect us from a glitch when the PHY clock turns off or gets
@@ -66,7 +68,6 @@ phy_rx_dccal procedures.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -86,15 +87,17 @@ phy_rx_dccal procedures.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -111,15 +114,14 @@ phy_rx_dccal procedures.</p>
<li class="right" >
<a href="skiboot-5.9.3.html" title="skiboot-5.9.3"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.9.5.html b/doc/release-notes/skiboot-5.9.5.html
index f639621..ccc5c24 100644
--- a/doc/release-notes/skiboot-5.9.5.html
+++ b/doc/release-notes/skiboot-5.9.5.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.9.5 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.9.5 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.9.4.html" title="skiboot-5.9.4"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -50,12 +51,13 @@
<a class="reference internal" href="skiboot-5.9.4.html#skiboot-5-9-4"><span class="std std-ref">skiboot-5.9.4</span></a> as the current stable release in the 5.9.x series.</p>
<p>Over <a class="reference internal" href="skiboot-5.9.4.html#skiboot-5-9-4"><span class="std std-ref">skiboot-5.9.4</span></a>, we have a few bug fixes, they are:</p>
<ul>
-<li><p>Fix <em>extremely</em> rare race in timer code.</p></li>
-<li><p>xive: Ensure VC informational FIRs are masked</p>
+<li><p class="first">Fix <em>extremely</em> rare race in timer code.</p>
+</li>
+<li><p class="first">xive: Ensure VC informational FIRs are masked</p>
<p>Some HostBoot versions leave those as checkstop, they are harmless
and can sometimes occur during normal operations.</p>
</li>
-<li><p>xive: Fix occasional VC checkstops in xive_reset</p>
+<li><p class="first">xive: Fix occasional VC checkstops in xive_reset</p>
<p>The current workaround for the scrub bug described in
__xive_cache_scrub() has an issue in that it can leave
dirty invalid entries in the cache.</p>
@@ -66,25 +68,25 @@ of the cache.</p>
<p>This replaces the existing workaround with a new pair of
workarounds for VPs and EQs:</p>
<ul class="simple">
-<li><p>The VP one does the dummy watch on another entry than
+<li>The VP one does the dummy watch on another entry than
the one we scrubbed (which does the job of pushing old
stores out) using an entry that is known to be backed by
-a permanent indirect page.</p></li>
-<li><p>The EQ one switches to a more efficient workaround
+a permanent indirect page.</li>
+<li>The EQ one switches to a more efficient workaround
which consists of doing a non-side-effect ESB load from
-the EQ’s ESe control bits.</p></li>
+the EQ’s ESe control bits.</li>
</ul>
</li>
-<li><p>io: Add load_wait() helper</p>
+<li><p class="first">io: Add load_wait() helper</p>
<p>This uses the standard form twi/isync pair to ensure a load
is consumed by the core before continuing. This can be necessary
under some circumstances for example when having the following
sequence:</p>
<ul class="simple">
-<li><p>Store reg A</p></li>
-<li><p>Load reg A (ensure above store pushed out)</p></li>
-<li><p>delay loop</p></li>
-<li><p>Store reg A</p></li>
+<li>Store reg A</li>
+<li>Load reg A (ensure above store pushed out)</li>
+<li>delay loop</li>
+<li>Store reg A</li>
</ul>
<p>IE, a mandatory delay between 2 stores. In theory the first store
is only guaranteed to rach the device after the load from the same
@@ -93,17 +95,17 @@ the delay loop without waiting for the return value from the load.</p>
<p>This construct enforces that the delay loop isn’t executed until
the load value has been returned.</p>
</li>
-<li><p>xive: Do not return a trigger page for an escalation interrupt</p>
+<li><p class="first">xive: Do not return a trigger page for an escalation interrupt</p>
<p>This is bogus, we don’t support them. (Thankfully the callers
didn’t actually try to use this on escalation interrupts).</p>
</li>
-<li><p>xive: Mark a freed IRQ’s IVE as valid and masked</p>
+<li><p class="first">xive: Mark a freed IRQ’s IVE as valid and masked</p>
<p>Removing the valid bit means a FIR will trip if it’s accessed
inadvertently. Under some circumstances, the XIVE will speculatively
access an IVE for a masked interrupt and trip it. So make sure that
freed entries are still marked valid (but masked).</p>
</li>
-<li><p>hw/nx: Fix NX BAR assignments</p>
+<li><p class="first">hw/nx: Fix NX BAR assignments</p>
<p>The NX rng BAR is used by each core to source random numbers for the
DARN instruction. Currently we configure each core to use the NX rng of
the chip that it exists on. Unfortunately, the NX can be deconfigured by
@@ -117,7 +119,6 @@ gracefully.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -137,15 +138,17 @@ gracefully.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -162,15 +165,14 @@ gracefully.</p>
<li class="right" >
<a href="skiboot-5.9.4.html" title="skiboot-5.9.4"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.9.6.html b/doc/release-notes/skiboot-5.9.6.html
index 81ade06..0e023d6 100644
--- a/doc/release-notes/skiboot-5.9.6.html
+++ b/doc/release-notes/skiboot-5.9.6.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.9.6 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.9.6 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.9.5.html" title="skiboot-5.9.5"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.6</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -50,12 +51,13 @@
<a class="reference internal" href="skiboot-5.9.5.html#skiboot-5-9-5"><span class="std std-ref">skiboot-5.9.5</span></a> as the current stable release in the 5.9.x series.</p>
<p>Over <a class="reference internal" href="skiboot-5.9.5.html#skiboot-5-9-5"><span class="std std-ref">skiboot-5.9.5</span></a>, we have a few bug fixes, they are:</p>
<ul>
-<li><p>sensors: occ: Skip counter type of sensors</p>
+<li><p class="first">sensors: occ: Skip counter type of sensors</p>
<p>Don’t add counter type of sensors to device-tree as they don’t
fit into hwmon sensor interface.</p>
</li>
-<li><p>p9_stop_api updates to support IMC across deep stop states.</p></li>
-<li><p>opal/xscom: Add recovery for lost core wakeup scom failures.</p>
+<li><p class="first">p9_stop_api updates to support IMC across deep stop states.</p>
+</li>
+<li><p class="first">opal/xscom: Add recovery for lost core wakeup scom failures.</p>
<p>Due to a hardware issue where core responding to scom was delayed due to
thread reconfiguration, leaves the SCOM logic in a state where the
subsequent scom to that core can get errors. This is affected for Core
@@ -71,7 +73,6 @@ scom operation can be retried.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -91,15 +92,17 @@ scom operation can be retried.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -116,15 +119,14 @@ scom operation can be retried.</p>
<li class="right" >
<a href="skiboot-5.9.5.html" title="skiboot-5.9.5"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.6</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.9.7.html b/doc/release-notes/skiboot-5.9.7.html
index 686e9a4..745aef7 100644
--- a/doc/release-notes/skiboot-5.9.7.html
+++ b/doc/release-notes/skiboot-5.9.7.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.9.7 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.9.7 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.9.6.html" title="skiboot-5.9.6"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.7</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -50,7 +51,7 @@
<a class="reference internal" href="skiboot-5.9.6.html#skiboot-5-9-6"><span class="std std-ref">skiboot-5.9.6</span></a> as the current stable release in the 5.9.x series.</p>
<p>Over <a class="reference internal" href="skiboot-5.9.6.html#skiboot-5-9-6"><span class="std std-ref">skiboot-5.9.6</span></a>, we have two bug fixes, they are:</p>
<ul>
-<li><p>phb4: Change PCI MMIO timers</p>
+<li><p class="first">phb4: Change PCI MMIO timers</p>
<p>Currently we have a mismatch between the NCU and PCI timers for MMIO
accesses. The PCI timers must be lower than the NCU timers otherwise
it may cause checkstops.</p>
@@ -58,7 +59,7 @@ it may cause checkstops.</p>
be forwards and backwards compatible with expected hostboot changes to
the NCU timer.</p>
</li>
-<li><p>p8-i2c: Limit number of retry attempts</p>
+<li><p class="first">p8-i2c: Limit number of retry attempts</p>
<p>Currently we will attempt to start an I2C transaction until it succeeds.
In the event that the OCC does not release the lock on an I2C bus this
results in an async token being held forever and the kernel thread that
@@ -70,7 +71,6 @@ start the transaction.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -90,15 +90,17 @@ start the transaction.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -115,15 +117,14 @@ start the transaction.</p>
<li class="right" >
<a href="skiboot-5.9.6.html" title="skiboot-5.9.6"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.7</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.9.8.html b/doc/release-notes/skiboot-5.9.8.html
index c2c7b70..7eda477 100644
--- a/doc/release-notes/skiboot-5.9.8.html
+++ b/doc/release-notes/skiboot-5.9.8.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.9.8 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.9.8 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.9.7.html" title="skiboot-5.9.7"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.8</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -50,7 +51,7 @@
<a class="reference internal" href="skiboot-5.9.7.html#skiboot-5-9-7"><span class="std std-ref">skiboot-5.9.7</span></a> as the current stable release in the 5.9.x series.</p>
<p>Over <a class="reference internal" href="skiboot-5.9.7.html#skiboot-5-9-7"><span class="std std-ref">skiboot-5.9.7</span></a>, we have one new feature:</p>
<ul>
-<li><p>Parse IPL FW feature settings</p>
+<li><p class="first">Parse IPL FW feature settings</p>
<p>Add parsing for the firmware feature flags in the HDAT. This
indicates the settings of various parameters which are set at IPL time
by firmware.</p>
@@ -59,7 +60,6 @@ by firmware.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -79,15 +79,17 @@ by firmware.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -104,15 +106,14 @@ by firmware.</p>
<li class="right" >
<a href="skiboot-5.9.7.html" title="skiboot-5.9.7"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.8</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.9.9.html b/doc/release-notes/skiboot-5.9.9.html
index b1c223c..c8019ac 100644
--- a/doc/release-notes/skiboot-5.9.9.html
+++ b/doc/release-notes/skiboot-5.9.9.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.9.9 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.9.9 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.9.8.html" title="skiboot-5.9.8"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.9</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -50,11 +51,11 @@
<a class="reference internal" href="skiboot-5.9.8.html#skiboot-5-9-8"><span class="std std-ref">skiboot-5.9.8</span></a> as the current stable release in the 5.9.x series.</p>
<p>Over <a class="reference internal" href="skiboot-5.9.8.html#skiboot-5-9-8"><span class="std std-ref">skiboot-5.9.8</span></a>, we have two bug fixes and a build fix, they are:</p>
<ul>
-<li><p>OPAL_PCI_SET_POWER_STATE: fix locking in error paths</p>
+<li><p class="first">OPAL_PCI_SET_POWER_STATE: fix locking in error paths</p>
<p>Otherwise we could exit OPAL holding locks, potentially leading
to all sorts of problems later on.</p>
</li>
-<li><p>lpc: Clear pending IRQs at boot</p>
+<li><p class="first">lpc: Clear pending IRQs at boot</p>
<p>When we come in from hostboot the LPC master has the bus reset indicator
set. This error isn’t handled until the host kernel unmasks interrupts,
at which point we get the following suprious error:</p>
@@ -65,12 +66,12 @@ at which point we get the following suprious error:</p>
<p>Fix this by clearing the various error bits in the LPC status register
before we initalise the skiboot LPC bus driver.</p>
</li>
-<li><p>stb: Build fixes in constructing secure and trusted boot header</p></li>
+<li><p class="first">stb: Build fixes in constructing secure and trusted boot header</p>
+</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -90,15 +91,17 @@ before we initalise the skiboot LPC bus driver.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -115,15 +118,14 @@ before we initalise the skiboot LPC bus driver.</p>
<li class="right" >
<a href="skiboot-5.9.8.html" title="skiboot-5.9.8"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9.9</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-5.9.html b/doc/release-notes/skiboot-5.9.html
index 9ef93c6..945f8a0 100644
--- a/doc/release-notes/skiboot-5.9.html
+++ b/doc/release-notes/skiboot-5.9.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-5.9 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-5.9 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.8-rc1.html" title="skiboot-5.8-rc1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -62,7 +63,7 @@ There may be some 5.9.x stable releases, depending on what issues are found.</p>
<div class="section" id="power8">
<h3>POWER8<a class="headerlink" href="#power8" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>fast-reset by default (if possible)</p>
+<li><p class="first">fast-reset by default (if possible)</p>
<p>Currently, this is limited to POWER8 systems.</p>
<p>A normal reboot will, rather than doing a full IPL, go through a
fast reboot procedure. This reduces the “reboot to petitboot” time
@@ -74,18 +75,18 @@ from minutes to a handful of seconds.</p>
<h3>POWER9<a class="headerlink" href="#power9" title="Permalink to this headline">¶</a></h3>
<p>Since <a class="reference internal" href="skiboot-5.9-rc3.html#skiboot-5-9-rc3"><span class="std std-ref">skiboot-5.9-rc3</span></a>:</p>
<ul class="simple">
-<li><p>occ-sensors : Add OCC inband sensor region to exports
-(useful for debugging)</p></li>
+<li>occ-sensors : Add OCC inband sensor region to exports
+(useful for debugging)</li>
</ul>
<p>Two SRESET fixes (see below for feature description):</p>
<ul>
-<li><p>core: direct-controls: Fix clearing of special wakeup</p>
+<li><p class="first">core: direct-controls: Fix clearing of special wakeup</p>
<p>â€special_wakeup_count’ is incremented on successfully asserting
special wakeup. So we will never clear the special wakeup if we
check â€special_wakeup_count’ to be zero. Fix this issue by checking
the â€special_wakeup_count’ to 1 in dctl_clear_special_wakeup().</p>
</li>
-<li><p>core/direct-controls: increase special wakeup timeout on POWER9</p>
+<li><p class="first">core/direct-controls: increase special wakeup timeout on POWER9</p>
<p>Some instances have been observed where the special wakeup assert
times out. The current timeout is too short for deeper sleep states.
Hostboot uses 100ms, so match that.</p>
@@ -103,10 +104,10 @@ determine the status and return an appropriate error code.</p>
</div></blockquote>
<p>Since <a class="reference internal" href="skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a>:</p>
<ul>
-<li><p>POWER9 power management during boot</p>
+<li><p class="first">POWER9 power management during boot</p>
<p>Less power should be consumed during boot.</p>
</li>
-<li><p>OPAL_SIGNAL_SYSTEM_RESET for POWER9</p>
+<li><p class="first">OPAL_SIGNAL_SYSTEM_RESET for POWER9</p>
<p>This implements OPAL_SIGNAL_SYSTEM_RESET, using scom registers to
quiesce the target thread and raise a system reset exception on it.
It has been tested on DD2 with stop0 ESL=0 and ESL=1 shallow power
@@ -114,20 +115,20 @@ saving modes.</p>
<p>DD1 is not implemented because it is sufficiently different as to
make support difficult.</p>
</li>
-<li><p>Enable deep idle states for POWER9</p>
+<li><p class="first">Enable deep idle states for POWER9</p>
<ul>
-<li><p>SLW: Add support for p9_stop_api</p>
+<li><p class="first">SLW: Add support for p9_stop_api</p>
<p>p9_stop_api’s are used to set SPR state on a core wakeup form a deeper
low power state. p9_stop_api uses low level platform formware and
self-restore microcode to restore the sprs to requested values.</p>
<p>Code is taken from :
<a class="reference external" href="https://github.com/open-power/hostboot/tree/master/src/import/chips/p9/procedures/utils/stopreg">https://github.com/open-power/hostboot/tree/master/src/import/chips/p9/procedures/utils/stopreg</a></p>
</li>
-<li><p>SLW: Removing timebase related flags for stop4</p>
+<li><p class="first">SLW: Removing timebase related flags for stop4</p>
<p>When a core enters stop4, it does not loose decrementer and time base.
Hence removing flags OPAL_PM_DEC_STOP and OPAL_PM_TIMEBASE_STOP.</p>
</li>
-<li><p>SLW: Allow deep states if homer address is known</p>
+<li><p class="first">SLW: Allow deep states if homer address is known</p>
<p>Use a common variable has_wakeup_engine instead of has_slw to tell if
the:
- SLW image is populated in case of power8
@@ -135,18 +136,18 @@ the:
<p>Currently we expect CME to be loaded if homer address is known ( except
for simulators)</p>
</li>
-<li><p>SLW: Configure self-restore for HRMOR</p>
+<li><p class="first">SLW: Configure self-restore for HRMOR</p>
<p>Make a stop api call using libpore to restore HRMOR register. HRMOR needs
to be cleared so that when thread exits stop, they arrives at linux
system_reset vector (0x100).</p>
</li>
-<li><p>SLW: Add opal_slw_set_reg support for power9</p>
+<li><p class="first">SLW: Add opal_slw_set_reg support for power9</p>
<p>This OPAL call is made from Linux to OPAL to configure values in
various SPRs after wakeup from a deep idle state.</p>
</li>
</ul>
</li>
-<li><p>PHB4: CAPP recovery</p>
+<li><p class="first">PHB4: CAPP recovery</p>
<p>CAPP recovery is initiated when a CAPP Machine Check is detected.
The capp recovery procedure is initiated via a Hypervisor Maintenance
interrupt (HMI).</p>
@@ -157,37 +158,37 @@ being asserted. The system continues running and the CAPP and PSL will
be re-initialized.</p>
<p>This implements CAPP recovery for POWER9 systems</p>
</li>
-<li><p>Add <code class="docutils literal notranslate"><span class="pre">wafer-location</span></code> property for POWER9</p>
+<li><p class="first">Add <code class="docutils literal notranslate"><span class="pre">wafer-location</span></code> property for POWER9</p>
<p>Extract wafer-location from ECID and add property under xscom node.
- bits 64:71 are the chip x location (7:0)
- bits 72:79 are the chip y location (7:0)</p>
<p>Sample output:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="o">@</span><span class="mi">623</span><span class="n">fc00000000</span><span class="p">]</span><span class="c1"># lsprop ecid</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="nd">@623fc00000000</span><span class="p">]</span><span class="c1"># lsprop ecid</span>
<span class="n">ecid</span> <span class="mi">019</span><span class="n">a00d4</span> <span class="mi">03100718</span> <span class="mi">852</span><span class="n">c0000</span> <span class="mi">00</span><span class="n">fd7911</span>
-<span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="o">@</span><span class="mi">623</span><span class="n">fc00000000</span><span class="p">]</span><span class="c1"># lsprop wafer-location</span>
+<span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="nd">@623fc00000000</span><span class="p">]</span><span class="c1"># lsprop wafer-location</span>
<span class="n">wafer</span><span class="o">-</span><span class="n">location</span> <span class="mi">00000085</span> <span class="mi">0000002</span><span class="n">c</span>
</pre></div>
</div>
</li>
-<li><p>Add <code class="docutils literal notranslate"><span class="pre">wafer-id</span></code> property for POWER9</p>
+<li><p class="first">Add <code class="docutils literal notranslate"><span class="pre">wafer-id</span></code> property for POWER9</p>
<p>Wafer id is derived from ECID data.
- bits 4:63 are the wafer id ( ten 6 bit fields each containing a code)</p>
<p>Sample output:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="o">@</span><span class="mi">623</span><span class="n">fc00000000</span><span class="p">]</span><span class="c1"># lsprop ecid</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="nd">@623fc00000000</span><span class="p">]</span><span class="c1"># lsprop ecid</span>
<span class="n">ecid</span> <span class="mi">019</span><span class="n">a00d4</span> <span class="mi">03100718</span> <span class="mi">852</span><span class="n">c0000</span> <span class="mi">00</span><span class="n">fd7911</span>
-<span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="o">@</span><span class="mi">623</span><span class="n">fc00000000</span><span class="p">]</span><span class="c1"># lsprop wafer-id</span>
+<span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="nd">@623fc00000000</span><span class="p">]</span><span class="c1"># lsprop wafer-id</span>
<span class="n">wafer</span><span class="o">-</span><span class="nb">id</span> <span class="s2">&quot;6Q0DG340SO&quot;</span>
</pre></div>
</div>
</li>
-<li><p>Add <code class="docutils literal notranslate"><span class="pre">ecid</span></code> property under <code class="docutils literal notranslate"><span class="pre">xscom</span></code> node for POWER9.
+<li><p class="first">Add <code class="docutils literal notranslate"><span class="pre">ecid</span></code> property under <code class="docutils literal notranslate"><span class="pre">xscom</span></code> node for POWER9.
Sample output:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="o">@</span><span class="mi">623</span><span class="n">fc00000000</span><span class="p">]</span><span class="c1"># lsprop ecid</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">root</span><span class="nd">@wsp</span> <span class="n">xscom</span><span class="nd">@623fc00000000</span><span class="p">]</span><span class="c1"># lsprop ecid</span>
<span class="n">ecid</span> <span class="mi">019</span><span class="n">a00d4</span> <span class="mi">03100718</span> <span class="mi">852</span><span class="n">c0000</span> <span class="mi">00</span><span class="n">fd7911</span>
</pre></div>
</div>
</li>
-<li><p>Add ibm,firmware-versions device tree node</p>
+<li><p class="first">Add ibm,firmware-versions device tree node</p>
<p>In P8, hostboot provides mini device tree. It contains <code class="docutils literal notranslate"><span class="pre">/ibm,firmware-versions</span></code>
node which has various firmware component version details.</p>
<p>In P9, OPAL is building device tree. This patch adds support to parse VERSION
@@ -213,14 +214,14 @@ section of PNOR and create <code class="docutils literal notranslate"><span clas
<h2>POWER9<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-5.9-rc5.html#skiboot-5-9-rc5"><span class="std std-ref">skiboot-5.9-rc5</span></a>:</p>
<ul>
-<li><p>Suppress XSCOM chiplet-offline errors on P9</p>
+<li><p class="first">Suppress XSCOM chiplet-offline errors on P9</p>
<p>Workaround on P9: PRD does operations it <em>knows</em> will fail with this
error to work around a hardware issue where accesses via the PIB
(FSI or OCC) work as expected, accesses via the ADU (what xscom goes
through) do not. The chip logic will always return all FFs if there
is any error on the scom.</p>
</li>
-<li><p>asm/head: initialize preferred DSCR value</p>
+<li><p class="first">asm/head: initialize preferred DSCR value</p>
<p>POWER7/8 use DSCR=0. POWER9 preferred value has “stride-N” enabled.</p>
</li>
</ul>
@@ -250,7 +251,7 @@ in the host:</p>
</div>
</div></blockquote>
<ul>
-<li><p>hw/imc: pause microcode at boot</p>
+<li><p class="first">hw/imc: pause microcode at boot</p>
<p>IMC nest counters has both in-band (ucode access) and out of
band access to it. Since not all nest counter configurations
are supported by ucode, out of band tools are used to characterize
@@ -266,23 +267,23 @@ and OPAL_IMC_COUNTERS_STOP API calls should be used to start and pause
these IMC engines. <cite>doc/opal-api/opal-imc-counters.rst</cite> details the
OPAL APIs and their usage.</p>
</li>
-<li><p>hdata/i2c: update the list of known i2c devs</p>
+<li><p class="first">hdata/i2c: update the list of known i2c devs</p>
<p>This updates the list of known i2c devices - as of HDAT spec v10.5e - so
that they can be properly identified during the hdat parsing.</p>
</li>
-<li><p>hdata/i2c: log unknown i2c devices</p>
+<li><p class="first">hdata/i2c: log unknown i2c devices</p>
<p>An i2c device is unknown if either the i2c device list is outdated or
the device is marked as unknown (0xFF) in the hdat.</p>
</li>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a>:</p>
<ul>
-<li><p>Disable Transactional Memory on Power9 DD 2.1</p>
+<li><p class="first">Disable Transactional Memory on Power9 DD 2.1</p>
<p>Update pa_features_p9[] to disable TM (Transactional Memory). On DD 2.1
TM is not usable by Linux without other workarounds, so skiboot must
disable it.</p>
</li>
-<li><p>xscom: Do not print error message for â€chiplet offline’ return values</p>
+<li><p class="first">xscom: Do not print error message for â€chiplet offline’ return values</p>
<p>xscom_read/write operations returns CHIPLET_OFFLINE when chiplet is offline.
Some multicast xscom_read/write requests from HBRT results in xscom operation
on offline chiplet(s) and printing below warnings in OPAL console:</p>
@@ -293,25 +294,25 @@ on offline chiplet(s) and printing below warnings in OPAL console:</p>
<p>Some SCOM users can deal correctly with this error code (notably opal-prd),
so the error message is (in practice) erroneous.</p>
</li>
-<li><p>IMC: Fix the core_imc_event_mask</p>
+<li><p class="first">IMC: Fix the core_imc_event_mask</p>
<p>CORE_IMC_EVENT_MASK is a scom that contains bits to control event sampling for
different machine state for core imc. The current event-mask setting sample
events only on host kernel (hypervisor) and host userspace.</p>
<p>Patch to enable the sampling of events in other machine states (like guest
kernel and guest userspace).</p>
</li>
-<li><p>IMC: Update the nest_pmus array with occ/gpe microcode uav updates</p>
+<li><p class="first">IMC: Update the nest_pmus array with occ/gpe microcode uav updates</p>
<p>OOC/gpe nest microcode maintains the list of individual nest units
supported. Sync the recent updates to the UAV with nest_pmus array.</p>
<p>For reference occ/gpr microcode link for the UAV:
<a class="reference external" href="https://github.com/open-power/occ/blob/master/src/occ_gpe1/gpe1_24x7.h">https://github.com/open-power/occ/blob/master/src/occ_gpe1/gpe1_24x7.h</a></p>
</li>
-<li><p>Parse IOSLOT information from HDAT</p>
+<li><p class="first">Parse IOSLOT information from HDAT</p>
<p>Add structure definitions that describe the physical PCIe topology of
a system and parse them into the device-tree based PCIe slot
description.</p>
</li>
-<li><p>idle: user context state loss flags fix for stop states</p>
+<li><p class="first">idle: user context state loss flags fix for stop states</p>
<p>The “lite” stop variants with PSSCR[ESL]=PSSCR[EC]=1 do not lose user
context, while the non-lite variants do (ESL: enable state loss).</p>
<p>Some of the POWER9 idle states had these wrong.</p>
@@ -320,13 +321,14 @@ context, while the non-lite variants do (ESL: enable state loss).</p>
<div class="section" id="capi">
<h3>CAPI<a class="headerlink" href="#capi" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>POWER9 DD2 update</p>
+<li><p class="first">POWER9 DD2 update</p>
<p>The CAPI initialization sequence has been updated in DD2.
This patch adapts to the changes, retaining compatibility with DD1.
The patch includes some changes to DD1 fix-ups as well.</p>
</li>
-<li><p>Load CAPP microcode for POWER9 DD2.0 and DD2.1</p></li>
-<li><p>capi: Mask Psl Credit timeout error for POWER9</p>
+<li><p class="first">Load CAPP microcode for POWER9 DD2.0 and DD2.1</p>
+</li>
+<li><p class="first">capi: Mask Psl Credit timeout error for POWER9</p>
<p>Mask the PSL credit timeout error in CAPP FIR Mask register
bit(46). As per the h/w team this error is now deprecated and shouldn’t
cause any fir-action for P9.</p>
@@ -344,96 +346,102 @@ old VPD and/or Hostboot, we print a <strong>giant scary warning</strong> in orde
<p>Since <a class="reference internal" href="skiboot-5.9-rc2.html#skiboot-5-9-rc2"><span class="std std-ref">skiboot-5.9-rc2</span></a>:
- Revert “npu2: Add vendor cap for IRQ testing”</p>
<blockquote>
-<div><p>This reverts commit 9817c9e29b6fe00daa3a0e4420e69a97c90eb373 which seems to
+<div>This reverts commit 9817c9e29b6fe00daa3a0e4420e69a97c90eb373 which seems to
break setting the PCI dev flag and the link number in the PCIe vendor
specific config space. This leads to the device driver attempting to
-re-init the DL when it shouldn’t which can cause HMI’s.</p>
-</div></blockquote>
+re-init the DL when it shouldn’t which can cause HMI’s.</div></blockquote>
<p>Since <a class="reference internal" href="skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a>:</p>
<ul>
-<li><p>npu2: Read slot label from the HDAT link node</p>
+<li><p class="first">npu2: Read slot label from the HDAT link node</p>
<p>Binding GPU to emulated NPU PCI devices is done using the slot labels
since the NPU devices do not have a patching slot node we need to
copy the label in here.</p>
</li>
-<li><p>npu2: Copy link speed from the npu HDAT node</p>
+<li><p class="first">npu2: Copy link speed from the npu HDAT node</p>
<p>This needs to be in the PCI device node so the speed of the NVLink
can be passed to the GPU driver.</p>
</li>
-<li><p>npu2: hw-procedures: Add settings to PHY_RESET</p>
+<li><p class="first">npu2: hw-procedures: Add settings to PHY_RESET</p>
<p>Set a few new values in the PHY_RESET procedure, as specified by our
updated programming guide documentation.</p>
</li>
-<li><p>Parse NVLink information from HDAT</p>
+<li><p class="first">Parse NVLink information from HDAT</p>
<p>Add the per-chip structures that descibe how the A-Bus/NVLink/OpenCAPI
phy is configured. This generates the <a class="reference external" href="mailto:npu&#37;&#52;&#48;xyz">npu<span>&#64;</span>xyz</a> nodes for each chip on
systems that support it.</p>
</li>
-<li><p>npu2: Add vendor cap for IRQ testing</p>
+<li><p class="first">npu2: Add vendor cap for IRQ testing</p>
<p>Provide a way to test recoverable data link interrupts via a new
vendor capability byte.</p>
</li>
-<li><p>npu2: Enable recoverable data link (no-stall) interrupts</p>
+<li><p class="first">npu2: Enable recoverable data link (no-stall) interrupts</p>
<p>Allow the NPU2 to trigger “recoverable data link” interrupts.</p>
</li>
-<li><p>npu2: Implement basic FLR (Function Level Reset)</p></li>
-<li><p>npu2: hw-procedures: Update PHY DC calibration procedure</p></li>
-<li><p>npu2: hw-procedures: Change rx_pr_phase_step value</p></li>
+<li><p class="first">npu2: Implement basic FLR (Function Level Reset)</p>
+</li>
+<li><p class="first">npu2: hw-procedures: Update PHY DC calibration procedure</p>
+</li>
+<li><p class="first">npu2: hw-procedures: Change rx_pr_phase_step value</p>
+</li>
</ul>
</div>
<div class="section" id="xive">
<h3>XIVE<a class="headerlink" href="#xive" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>xive: Fix opal_xive_dump_tm() to access W2 properly.
-The HW only supported limited access sizes.</p></li>
-<li><p>xive: Make opal_xive_allocate_irq() properly try all chips</p>
+<li><p class="first">xive: Fix opal_xive_dump_tm() to access W2 properly.
+The HW only supported limited access sizes.</p>
+</li>
+<li><p class="first">xive: Make opal_xive_allocate_irq() properly try all chips</p>
<p>When requested via OPAL_XIVE_ANY_CHIP, we need to try all
chips. We first try the current one (on which the caller
sits) and if that fails, we iterate all chips until the
allocation succeeds.</p>
</li>
-<li><p>xive: Fix initialization &amp; cleanup of HW thread contexts</p>
+<li><p class="first">xive: Fix initialization &amp; cleanup of HW thread contexts</p>
<p>Instead of trying to “pull” everything and clear VT (which didn’t
work and caused some FIRs to be set), instead just clear and then
set the PTER thread enable bit. This has the side effect of
completely resetting the corresponding thread context.</p>
<p>This fixes the spurrious XIVE FIRs reported by PRD and fircheck</p>
</li>
-<li><p>xive: Add debug option for detecting misrouted IPI in emulation</p>
+<li><p class="first">xive: Add debug option for detecting misrouted IPI in emulation</p>
<p>This is high overhead so we don’t enable it by default even
in debug builds, it’s also a bit messy, but it allowed me to
detect and debug a locking issue earlier so it can be useful.</p>
</li>
-<li><p>xive: Increase the interrupt “gap” on debug builds</p>
+<li><p class="first">xive: Increase the interrupt “gap” on debug builds</p>
<p>We normally allocate IPIs from 0x10. Make that 0x1000 on debug
builds to limit the chances of overlapping with Linux interrupt
numbers which makes debugging code that confuses them easier.</p>
<p>Also add a warning in emulation if we get an interrupt in the
queue whose number is below the gap.</p>
</li>
-<li><p>xive: Fix locking around cache scrub &amp; watch</p>
+<li><p class="first">xive: Fix locking around cache scrub &amp; watch</p>
<p>Thankfully the missing locking only affects debug code and
init code that doesn’t run concurrently. Also adds a DEBUG
option that checks the lock is properly held.</p>
</li>
-<li><p>xive: Workaround HW issue with scrub facility</p>
+<li><p class="first">xive: Workaround HW issue with scrub facility</p>
<p>Without this, we sometimes don’t observe from a CPU the
values written to the ENDs or NVTs via the cache watch.</p>
</li>
-<li><p>xive: Add exerciser for cache watch/scrub facility in DEBUG builds</p></li>
-<li><p>xive: Make assertion in xive_eq_for_target() more informative</p></li>
-<li><p>xive: Add debug code to check initial cache updates</p></li>
-<li><p>xive: Ensure pressure relief interrupts are disabled</p>
+<li><p class="first">xive: Add exerciser for cache watch/scrub facility in DEBUG builds</p>
+</li>
+<li><p class="first">xive: Make assertion in xive_eq_for_target() more informative</p>
+</li>
+<li><p class="first">xive: Add debug code to check initial cache updates</p>
+</li>
+<li><p class="first">xive: Ensure pressure relief interrupts are disabled</p>
<p>We don’t use them and we hijack the VP field with their
configuration to store the EQ reference, so make sure the
kernel or guest can’t turn them back on by doing MMIO
writes to ACK#</p>
</li>
-<li><p>xive: Don’t try setting the reserved ACK# field in VPs</p>
+<li><p class="first">xive: Don’t try setting the reserved ACK# field in VPs</p>
<p>That doesn’t work, the HW doesn’t implement it in the cache
watch facility anyway.</p>
</li>
-<li><p>xive: Remove useless memory barriers in VP/EQ inits</p>
+<li><p class="first">xive: Remove useless memory barriers in VP/EQ inits</p>
<p>We no longer update “live” memory structures, we use a temporary
copy on the stack and update the actual memory structure using
the cache watch, so those barriers are pointless.</p>
@@ -444,7 +452,7 @@ the cache watch, so those barriers are pointless.</p>
<h3>PHB4<a class="headerlink" href="#phb4" title="Permalink to this headline">¶</a></h3>
<p>Since <a class="reference internal" href="skiboot-5.9-rc4.html#skiboot-5-9-rc4"><span class="std std-ref">skiboot-5.9-rc4</span></a>:</p>
<ul>
-<li><p>phb4: Escalate freeze to fence to avoid checkstop</p>
+<li><p class="first">phb4: Escalate freeze to fence to avoid checkstop</p>
<p>Freeze events such as MMIO loads can cause the PHB to lose it’s
limited powerbus credits. If all credits are used and a further MMIO
will cause a checkstop.</p>
@@ -452,11 +460,11 @@ will cause a checkstop.</p>
fence. The fence will cause a full PHB reset which resets the powerbus
credits and avoids the checkstop.</p>
</li>
-<li><p>phb4: Update some init registers</p>
+<li><p class="first">phb4: Update some init registers</p>
<p>New inits based on next PHB4 workbook. Increases some timeouts to
avoid some spurious error conditions.</p>
</li>
-<li><p>phb4: Enable PHB MMIO in phb4_root_port_init()</p>
+<li><p class="first">phb4: Enable PHB MMIO in phb4_root_port_init()</p>
<p>Linux EEH flow is somewhat broken. It saves the PCIe config space of
the PHB on boot, which it then uses to restore on EEH recovery. It
does this to restore MMIO bars and some other pieces.</p>
@@ -476,12 +484,12 @@ fail.</p>
phb4_root_port_init().</p>
<p>With this we can recovery from a PHB fence event on POWER9.</p>
</li>
-<li><p>phb4: Reduce link degraded message log level to debug</p>
+<li><p class="first">phb4: Reduce link degraded message log level to debug</p>
<p>If we hit this message we’ll retry and fix the problem. If we run out
of retries and can’t fix the problem, we’ll still print a log message
at error level indicating a problem.</p>
</li>
-<li><p>phb4: Fix GEN3 for DD2.00</p>
+<li><p class="first">phb4: Fix GEN3 for DD2.00</p>
<p>In this fix: <code class="docutils literal notranslate"><span class="pre">62ac7631ae</span> <span class="pre">phb4:</span> <span class="pre">Fix</span> <span class="pre">PCIe</span> <span class="pre">GEN4</span> <span class="pre">on</span> <span class="pre">DD2.1</span> <span class="pre">and</span> <span class="pre">above</span></code>
We fixed DD2.1 GEN4 but broke DD2.00 as GEN3.</p>
<p>This fixes DD2.00 back to GEN3. This time for sure!</p>
@@ -490,9 +498,9 @@ We fixed DD2.1 GEN4 but broke DD2.00 as GEN3.</p>
<p>Since <a class="reference internal" href="skiboot-5.9-rc3.html#skiboot-5-9-rc3"><span class="std std-ref">skiboot-5.9-rc3</span></a>:
- phb4: Fix PCIe GEN4 on DD2.1 and above</p>
<blockquote>
-<div><dl class="simple">
-<dt>In this change:</dt><dd><p>eef0e197ab PHB4: Default to PCIe GEN3 on POWER9 DD2.00</p>
-</dd>
+<div><dl class="docutils">
+<dt>In this change:</dt>
+<dd>eef0e197ab PHB4: Default to PCIe GEN3 on POWER9 DD2.00</dd>
</dl>
<p>We clamped DD2.00 parts to GEN3 but unfortunately this change also
applies to DD2.1 and above.</p>
@@ -500,19 +508,19 @@ applies to DD2.1 and above.</p>
</div></blockquote>
<p>Since <a class="reference internal" href="skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a>:</p>
<ul>
-<li><p>phb4: Mask RXE_ARB: DEC Stage Valid Error</p>
+<li><p class="first">phb4: Mask RXE_ARB: DEC Stage Valid Error</p>
<p>Change the inits to mask out the RXE ARB: DEC Stage Valid Error (bit
370. This has been a fatal error but should be informational only.</p>
<p>This update will be in the next version of the phb4 workbook.</p>
</li>
-<li><p>phb4: Add additional adapter to retrain whitelist</p>
+<li><p class="first">phb4: Add additional adapter to retrain whitelist</p>
<p>The single port version of the ConnectX-5 has a different device ID 0x1017.
Updated descriptions to match pciutils database.</p>
</li>
-<li><p>PHB4: Default to PCIe GEN3 on POWER9 DD2.00</p>
+<li><p class="first">PHB4: Default to PCIe GEN3 on POWER9 DD2.00</p>
<p>You can use the NVRAM override for DD2.00 screened parts.</p>
</li>
-<li><p>phb4: Retrain link if degraded</p>
+<li><p class="first">phb4: Retrain link if degraded</p>
<p>On P9 Scale Out (Nimbus) DD2.0 and Scale in (Cumulus) DD1.0 (and
below) the PCIe PHY can lockup causing training issues. This can cause
a degradation in speed or width in ~5% of training cases (depending on
@@ -551,13 +559,13 @@ for each console. Latest kernel works fine without this patch.</p>
</div></blockquote>
<p>Since <a class="reference internal" href="skiboot-5.9-rc1.html#skiboot-5-9-rc1"><span class="std std-ref">skiboot-5.9-rc1</span></a>:</p>
<ul>
-<li><p>FSP/CONSOLE: Limit number of error logging</p>
+<li><p class="first">FSP/CONSOLE: Limit number of error logging</p>
<p>Commit c8a7535f (FSP/CONSOLE: Workaround for unresponsive ipmi daemon) added
error logging when buffer is full. In some corner cases kernel may call this
function multiple time and we may endup logging error again and again.</p>
<p>This patch fixes it by generating error log only once.</p>
</li>
-<li><p>FSP/CONSOLE: Fix fsp_console_write_buffer_space() call</p>
+<li><p class="first">FSP/CONSOLE: Fix fsp_console_write_buffer_space() call</p>
<p>Kernel calls fsp_console_write_buffer_space() to check console buffer space
availability. If there is enough buffer space to write data, then kernel will
call fsp_console_write() to write actual data.</p>
@@ -573,7 +581,7 @@ point we will start timer with timeout of SER_BUFFER_OUT_TIMEOUT (10 secs).
If situation is not improved within 10 seconds means something went bad. Lets
return OPAL_RESOURCE so that kernel can drop console write and continue.</p>
</li>
-<li><p>FSP/CONSOLE: Close SOL session during R/R</p>
+<li><p class="first">FSP/CONSOLE: Close SOL session during R/R</p>
<p>Presently we are not closing SOL and FW console sessions during R/R. Host will
continue to write to SOL buffer during FSP R/R. If there is heavy console write
operation happening during FSP R/R (like running <cite>top</cite> command inside console),
@@ -598,7 +606,7 @@ we may see RCU stalls (like below) in kernel.</p>
</div>
<p>Hence lets close SOL (and FW console) during FSP R/R.</p>
</li>
-<li><p>FSP/CONSOLE: Do not associate unavailable console</p>
+<li><p class="first">FSP/CONSOLE: Do not associate unavailable console</p>
<p>Presently OPAL sends associate/unassociate MBOX command for all
FSP serial console (like below OPAL message). We have to check
console is available or not before sending this message.</p>
@@ -607,73 +615,73 @@ console is available or not before sending this message.</p>
</pre></div>
</div>
</li>
-<li><p>FSP: Disable PSI link whenever FSP tells OPAL about impending R/R</p>
+<li><p class="first">FSP: Disable PSI link whenever FSP tells OPAL about impending R/R</p>
<p>Commit 42d5d047 fixed scenario where DPO has been initiated, but FSP went
into reset before the CEC power down came in. But this is generic issue
that can happen in normal shutdown path as well.</p>
<p>Hence disable PSI link as soon as we detect FSP impending R/R.</p>
</li>
-<li><p>fsp: return OPAL_BUSY_EVENT on failure sending FSP_CMD_POWERDOWN_NORM
+<li><p class="first">fsp: return OPAL_BUSY_EVENT on failure sending FSP_CMD_POWERDOWN_NORM
Also, return OPAL_BUSY_EVENT on failure sending FSP_CMD_REBOOT / DEEP_REBOOT.</p>
<p>We had a race condition between FSP Reset/Reload and powering down
the system from the host:</p>
<p>Roughly:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 2%" />
-<col style="width: 29%" />
-<col style="width: 69%" />
+<col width="2%" />
+<col width="29%" />
+<col width="69%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>#</p></th>
-<th class="head"><p>FSP</p></th>
-<th class="head"><p>Host</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">#</th>
+<th class="head">FSP</th>
+<th class="head">Host</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>1</p></td>
-<td><p>Power on</p></td>
-<td></td>
+<tbody valign="top">
+<tr class="row-even"><td>1</td>
+<td>Power on</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p>2</p></td>
-<td></td>
-<td><p>Power on</p></td>
+<tr class="row-odd"><td>2</td>
+<td>&#160;</td>
+<td>Power on</td>
</tr>
-<tr class="row-even"><td><p>3</p></td>
-<td><p>(inject EPOW)</p></td>
-<td></td>
+<tr class="row-even"><td>3</td>
+<td>(inject EPOW)</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p>4</p></td>
-<td><p>(trigger FSP R/R)</p></td>
-<td></td>
+<tr class="row-odd"><td>4</td>
+<td>(trigger FSP R/R)</td>
+<td>&#160;</td>
</tr>
-<tr class="row-even"><td><p>5</p></td>
-<td></td>
-<td><p>Processes EPOW event, starts shutting down</p></td>
+<tr class="row-even"><td>5</td>
+<td>&#160;</td>
+<td>Processes EPOW event, starts shutting down</td>
</tr>
-<tr class="row-odd"><td><p>6</p></td>
-<td></td>
-<td><p>calls OPAL_CEC_POWER_DOWN</p></td>
+<tr class="row-odd"><td>6</td>
+<td>&#160;</td>
+<td>calls OPAL_CEC_POWER_DOWN</td>
</tr>
-<tr class="row-even"><td><p>7</p></td>
-<td><p>(is still in R/R)</p></td>
-<td></td>
+<tr class="row-even"><td>7</td>
+<td>(is still in R/R)</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p>8</p></td>
-<td></td>
-<td><p>gets OPAL_INTERNAL_ERROR, spins in opal_poll_events</p></td>
+<tr class="row-odd"><td>8</td>
+<td>&#160;</td>
+<td>gets OPAL_INTERNAL_ERROR, spins in opal_poll_events</td>
</tr>
-<tr class="row-even"><td><p>9</p></td>
-<td><p>(FSP comes back)</p></td>
-<td></td>
+<tr class="row-even"><td>9</td>
+<td>(FSP comes back)</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p>10</p></td>
-<td></td>
-<td><p>spinning in opal_poll_events</p></td>
+<tr class="row-odd"><td>10</td>
+<td>&#160;</td>
+<td>spinning in opal_poll_events</td>
</tr>
-<tr class="row-even"><td><p>11</p></td>
-<td><p>(thinks host is running)</p></td>
-<td></td>
+<tr class="row-even"><td>11</td>
+<td>(thinks host is running)</td>
+<td>&#160;</td>
</tr>
</tbody>
</table>
@@ -711,7 +719,7 @@ Reset/Reload handling before we power off the system.</p>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a>:</p>
<ul>
-<li><p>FSP/NVRAM: Handle “get vNVRAM statistics” command</p>
+<li><p class="first">FSP/NVRAM: Handle “get vNVRAM statistics” command</p>
<p>FSP sends MBOX command (cmd : 0xEB, subcmd : 0x05, mod : 0x00) to get vNVRAM
statistics. OPAL doesn’t maintain any such statistics. Hence return
FSP_STATUS_INVALID_SUBCMD.</p>
@@ -723,11 +731,12 @@ FSP_STATUS_INVALID_SUBCMD.</p>
</pre></div>
</div>
</li>
-<li><p>fsp: Move common prints to trace</p>
+<li><p class="first">fsp: Move common prints to trace</p>
<p>These two prints just end up filling the skiboot logs on any machine
that’s been booted for more than a few hours.</p>
-<dl class="simple">
-<dt>They have never been useful, so make them trace level. They were: ::</dt><dd><p>SURV: Received heartbeat acknowledge from FSP
+<dl class="docutils">
+<dt>They have never been useful, so make them trace level. They were: ::</dt>
+<dd><p class="first last">SURV: Received heartbeat acknowledge from FSP
SURV: Sending the heartbeat command to FSP</p>
</dd>
</dl>
@@ -737,7 +746,7 @@ SURV: Sending the heartbeat command to FSP</p>
<div class="section" id="bmc-based-systems">
<h2>BMC based systems<a class="headerlink" href="#bmc-based-systems" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hw/lpc-uart: read from RBR to clear character timeout interrupts</p>
+<li><p class="first">hw/lpc-uart: read from RBR to clear character timeout interrupts</p>
<p>When using the aspeed SUART, we see a condition where the UART sends
continuous character timeout interrupts. This change adds a (heavily
commented) dummy read from the RBR to clear the interrupt condition on
@@ -745,15 +754,16 @@ init.</p>
<p>This was observed on p9dsu systems, but likely applies to other systems
using the SUART.</p>
</li>
-<li><p>astbmc: Add methods for handing Device Tree based slots
-e.g. ones from HDAT on POWER9.</p></li>
+<li><p class="first">astbmc: Add methods for handing Device Tree based slots
+e.g. ones from HDAT on POWER9.</p>
+</li>
</ul>
</div>
<div class="section" id="general">
<h2>General<a class="headerlink" href="#general" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-5.9-rc5.html#skiboot-5-9-rc5"><span class="std std-ref">skiboot-5.9-rc5</span></a>:</p>
<ul>
-<li><p>p8-i2c: Further timeout reworks</p>
+<li><p class="first">p8-i2c: Further timeout reworks</p>
<p>This patch reworks the way timeouts are set so that rather than imposing
a hard deadline based on the transaction length it uses a
kick-the-can-down-the-road approach where the timeout will be reset each
@@ -764,7 +774,7 @@ as unusually slow or broken devices.</p>
timeout handler. This is help to improve the robustness of the driver and
prepare for a more substantial rework of the driver as a whole later on.</p>
</li>
-<li><p>npu: Fix broken fast reset</p>
+<li><p class="first">npu: Fix broken fast reset</p>
<p>0679f61244b “fast-reset: by default (if possible)” broke NPU - now
the NV links does not get enabled after reboot.</p>
<p>This disables fast reboot for NPU machines till a better solution is found.</p>
@@ -772,39 +782,39 @@ the NV links does not get enabled after reboot.</p>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.9-rc2.html#skiboot-5-9-rc2"><span class="std std-ref">skiboot-5.9-rc2</span></a>:</p>
<ul>
-<li><p>Improvements to vpd device tree entries</p>
+<li><p class="first">Improvements to vpd device tree entries</p>
<p>Previously we would miss some properties</p>
</li>
</ul>
<p>Since <a class="reference internal" href="skiboot-5.9-rc1.html#skiboot-5-9-rc1"><span class="std std-ref">skiboot-5.9-rc1</span></a>:</p>
<ul>
-<li><p>hw/p8-i2c: Fix deadlock in p9_i2c_bus_owner_change</p>
+<li><p class="first">hw/p8-i2c: Fix deadlock in p9_i2c_bus_owner_change</p>
<p>When debugging a system where Linux was taking soft lockup errors with
two CPUs stuck in OPAL:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 50%" />
-<col style="width: 50%" />
+<col width="50%" />
+<col width="50%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>CPU0</p></th>
-<th class="head"><p>CPU1</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">CPU0</th>
+<th class="head">CPU1</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>lock</p></td>
-<td></td>
+<tbody valign="top">
+<tr class="row-even"><td>lock</td>
+<td>&#160;</td>
</tr>
-<tr class="row-odd"><td><p>p8_i2c_recover</p></td>
-<td></td>
+<tr class="row-odd"><td>p8_i2c_recover</td>
+<td>&#160;</td>
</tr>
-<tr class="row-even"><td><p>opal_handle_interrupt</p></td>
-<td><p>sync_timer
+<tr class="row-even"><td>opal_handle_interrupt</td>
+<td>sync_timer
cancel_timer
p9_i2c_bus_owner_change
occ_p9_interrupt
xive_source_interrupt
-opal_handle_interrupt</p></td>
+opal_handle_interrupt</td>
</tr>
</tbody>
</table>
@@ -813,7 +823,7 @@ p9_i2c_bus_owner_change() has taken master-&gt;lock, but then is stuck waiting
for all timers to complete. We deadlock.</p>
<p>Fix this by using cancel_timer_async().</p>
</li>
-<li><p>opal/cpu: Mark the core as bad while disabling threads of the core.</p>
+<li><p class="first">opal/cpu: Mark the core as bad while disabling threads of the core.</p>
<p>If any of the core fails to sync its TB during chipTOD initialization,
all the threads of that core are disabled. But this does not make
linux kernel to ignore the core/cpus. It crashes while bringing them up
@@ -847,7 +857,7 @@ enter ? for help
</ul>
<p>Since <a class="reference internal" href="skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a>:</p>
<ul>
-<li><p>ipmi: Convert common debug prints to trace</p>
+<li><p class="first">ipmi: Convert common debug prints to trace</p>
<p>OPAL logs messages for every IPMI request from host. Sometime OPAL console
is filled with only these messages. This path is pretty stable now and
we have enough logs to cover bad path. Hence lets convert these debug
@@ -859,11 +869,11 @@ message to trace/info message. Examples are:</p>
</pre></div>
</div>
</li>
-<li><p>libflash/file: Handle short read()s and write()s correctly</p>
+<li><p class="first">libflash/file: Handle short read()s and write()s correctly</p>
<p>Currently we don’t move the buffer along for a short read() or write()
and nor do we request only the remaining amount.</p>
</li>
-<li><p>hw/p8-i2c: Rework timeout handling</p>
+<li><p class="first">hw/p8-i2c: Rework timeout handling</p>
<p>Currently we treat a timeout as a hard failure and will automatically
fail any transations that hit their timeout. This results in
unnecessarily failing I2C requests if interrupts are dropped, etc.
@@ -874,7 +884,7 @@ handling to check the status and continue the transaction if it can.
if it can while logging an error if it detects a timeout due to a
dropped interrupt.</p>
</li>
-<li><p>core/flash: Only expect ELF header for BOOTKERNEL partition flash resource</p>
+<li><p class="first">core/flash: Only expect ELF header for BOOTKERNEL partition flash resource</p>
<p>When loading a flash resource which isn’t signed (secure and trusted
boot) and which doesn’t have a subpartition, we assume it’s the
BOOTKERNEL since previously this was the only such resource. Thus we
@@ -894,7 +904,7 @@ the FFS header. Also set the return code on error so we don’t
erroneously return OPAL_SUCCESS. Add a check that the resource will fit
in the supplied buffer to prevent buffer overrun.</p>
</li>
-<li><p>flash: Support adding the no-erase property to flash</p>
+<li><p class="first">flash: Support adding the no-erase property to flash</p>
<p>The mbox protocol explicitly states that an erase is not required
before a write. This means that issuing an erase from userspace,
through the mtd device, and back returns a successful operation
@@ -914,7 +924,7 @@ MTD_NO_ERASE flag from the device tree property.</p>
- opal-prd: Fix memory leak</p>
<p>Since <a class="reference internal" href="skiboot-5.8.html#skiboot-5-8"><span class="std std-ref">skiboot-5.8</span></a>:</p>
<ul>
-<li><p>external/gard: Clear entire guard partition instead of entry by entry</p>
+<li><p class="first">external/gard: Clear entire guard partition instead of entry by entry</p>
<p>When using the current implementation of the gard tool to ecc clear the
entire GUARD partition it is done one gard record at a time. While this
may be ok when accessing the actual flash this is very slow when done
@@ -926,50 +936,51 @@ entire buffer. Then we can do one big erase and write of the entire
partition. This reduces the time to clear the guard partition to on the
order of 4 seconds.</p>
</li>
-<li><p>opal-prd: Fix opal-prd command line options</p>
+<li><p class="first">opal-prd: Fix opal-prd command line options</p>
<p>HBRT OCC reset interface depends on service processor type.</p>
<ul class="simple">
-<li><p>FSP: reset_pm_complex()</p></li>
-<li><p>BMC: process_occ_reset()</p></li>
+<li>FSP: reset_pm_complex()</li>
+<li>BMC: process_occ_reset()</li>
</ul>
<p>We have both <cite>occ</cite> and <cite>pm-complex</cite> command line interfaces.
This patch adds support to dispaly appropriate message depending
on system type.</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 6%" />
-<col style="width: 39%" />
-<col style="width: 55%" />
+<col width="6%" />
+<col width="39%" />
+<col width="55%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>SP</p></th>
-<th class="head"><p>Command</p></th>
-<th class="head"><p>Action</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">SP</th>
+<th class="head">Command</th>
+<th class="head">Action</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>FSP</p></td>
-<td><p>opal-prd occ</p></td>
-<td><p>display error message</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>FSP</td>
+<td>opal-prd occ</td>
+<td>display error message</td>
</tr>
-<tr class="row-odd"><td><p>FSP</p></td>
-<td><p>opal-prd pm-complex</p></td>
-<td><p>Call pm_complex_reset()</p></td>
+<tr class="row-odd"><td>FSP</td>
+<td>opal-prd pm-complex</td>
+<td>Call pm_complex_reset()</td>
</tr>
-<tr class="row-even"><td><p>BMC</p></td>
-<td><p>opal-prd occ</p></td>
-<td><p>Call process_occ_reset()</p></td>
+<tr class="row-even"><td>BMC</td>
+<td>opal-prd occ</td>
+<td>Call process_occ_reset()</td>
</tr>
-<tr class="row-odd"><td><p>BMC</p></td>
-<td><p>opal-prd pm-complex</p></td>
-<td><p>display error message</p></td>
+<tr class="row-odd"><td>BMC</td>
+<td>opal-prd pm-complex</td>
+<td>display error message</td>
</tr>
</tbody>
</table>
</li>
-<li><p>opal-prd: detect service processor type and
-then make appropriate occ reset call.</p></li>
-<li><p>pflash: Fix erase command for unaligned start address</p>
+<li><p class="first">opal-prd: detect service processor type and
+then make appropriate occ reset call.</p>
+</li>
+<li><p class="first">pflash: Fix erase command for unaligned start address</p>
<p>The erase_range() function handles erasing the flash for a given start
address and length, and can handle an unaligned start address and
length. However in the unaligned start address case we are incorrectly
@@ -979,13 +990,14 @@ address was then we probably want to do that before we overide the
origin start address. So rearrange the code so that this is indeed the
case.</p>
</li>
-<li><p>external/gard: Print an error if run on an FSP system</p></li>
+<li><p class="first">external/gard: Print an error if run on an FSP system</p>
+</li>
</ul>
</div>
<div class="section" id="simulators">
<h2>Simulators<a class="headerlink" href="#simulators" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>mambo: Add mambo socket program</p>
+<li><p class="first">mambo: Add mambo socket program</p>
<p>This adds a program that can be run inside a mambo simulator in linux
userspace which enables TCP sockets to be proxied in and out of the
simulator to the host.</p>
@@ -993,15 +1005,15 @@ simulator to the host.</p>
drivers/infrastructure to run.</p>
<p>Run inside the simulator:</p>
<ul class="simple">
-<li><p>to forward host ssh connections to sim ssh server:
+<li>to forward host ssh connections to sim ssh server:
<code class="docutils literal notranslate"><span class="pre">./mambo-socket-proxy</span> <span class="pre">-h</span> <span class="pre">10022</span> <span class="pre">-s</span> <span class="pre">22</span></code>, then connect to port 10022
-on your host with <code class="docutils literal notranslate"><span class="pre">ssh</span> <span class="pre">-p</span> <span class="pre">10022</span> <span class="pre">localhost</span></code></p></li>
-<li><p>to allow http proxy access from inside the sim to local http proxy:
-<code class="docutils literal notranslate"><span class="pre">./mambo-socket-proxy</span> <span class="pre">-b</span> <span class="pre">proxy.mynetwork</span> <span class="pre">-h</span> <span class="pre">3128</span> <span class="pre">-s</span> <span class="pre">3128</span></code></p></li>
+on your host with <code class="docutils literal notranslate"><span class="pre">ssh</span> <span class="pre">-p</span> <span class="pre">10022</span> <span class="pre">localhost</span></code></li>
+<li>to allow http proxy access from inside the sim to local http proxy:
+<code class="docutils literal notranslate"><span class="pre">./mambo-socket-proxy</span> <span class="pre">-b</span> <span class="pre">proxy.mynetwork</span> <span class="pre">-h</span> <span class="pre">3128</span> <span class="pre">-s</span> <span class="pre">3128</span></code></li>
</ul>
<p>Multiple connections are supported.</p>
</li>
-<li><p>idle: disable stop*_lite POWER9 idle states for Mambo platform</p>
+<li><p class="first">idle: disable stop*_lite POWER9 idle states for Mambo platform</p>
<p>Mambo prior to Mambo.7.8.21 had a bug where the stop idle instruction
with PSSCR[ESL]=PSSCR[EC]=0 would resume with MSR set as though it had
taken a system reset interrupt.</p>
@@ -1015,100 +1027,100 @@ lite stop states for the mambo platform for now.</p>
<div class="section" id="contributors">
<h2>Contributors<a class="headerlink" href="#contributors" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
-<li><p>209 csets from 32 developers</p></li>
-<li><p>2 employers found</p></li>
-<li><p>A total of 9619 lines added, 1612 removed (delta 8007)</p></li>
+<li>209 csets from 32 developers</li>
+<li>2 employers found</li>
+<li>A total of 9619 lines added, 1612 removed (delta 8007)</li>
</ul>
<p>Extending the analysis done for some previous releases, we can see our trends
in code review across versions:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 14%" />
-<col style="width: 12%" />
-<col style="width: 16%" />
-<col style="width: 18%" />
-<col style="width: 18%" />
-<col style="width: 22%" />
+<col width="14%" />
+<col width="12%" />
+<col width="16%" />
+<col width="18%" />
+<col width="18%" />
+<col width="22%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Release</p></th>
-<th class="head"><p>csets</p></th>
-<th class="head"><p>Ack %</p></th>
-<th class="head"><p>Reviews %</p></th>
-<th class="head"><p>Tested %</p></th>
-<th class="head"><p>Reported %</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Release</th>
+<th class="head">csets</th>
+<th class="head">Ack %</th>
+<th class="head">Reviews %</th>
+<th class="head">Tested %</th>
+<th class="head">Reported %</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>5.0</p></td>
-<td><p>329</p></td>
-<td><p>15 (5%)</p></td>
-<td><p>20 (6%)</p></td>
-<td><p>1 (0%)</p></td>
-<td><p>0 (0%)</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.1</p></td>
-<td><p>372</p></td>
-<td><p>13 (3%)</p></td>
-<td><p>38 (10%)</p></td>
-<td><p>1 (0%)</p></td>
-<td><p>4 (1%)</p></td>
-</tr>
-<tr class="row-even"><td><p>5.2-rc1</p></td>
-<td><p>334</p></td>
-<td><p>20 (6%)</p></td>
-<td><p>34 (10%)</p></td>
-<td><p>6 (2%)</p></td>
-<td><p>11 (3%)</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.3-rc1</p></td>
-<td><p>302</p></td>
-<td><p>36 (12%)</p></td>
-<td><p>53 (18%)</p></td>
-<td><p>4 (1%)</p></td>
-<td><p>5 (2%)</p></td>
-</tr>
-<tr class="row-even"><td><p>5.4</p></td>
-<td><p>361</p></td>
-<td><p>16 (4%)</p></td>
-<td><p>28 (8%)</p></td>
-<td><p>1 (0%)</p></td>
-<td><p>9 (2%)</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.5</p></td>
-<td><p>408</p></td>
-<td><p>11 (3%)</p></td>
-<td><p>48 (12%)</p></td>
-<td><p>14 (3%)</p></td>
-<td><p>10 (2%)</p></td>
-</tr>
-<tr class="row-even"><td><p>5.6</p></td>
-<td><p>87</p></td>
-<td><p>12 (14%)</p></td>
-<td><p>6 (7%)</p></td>
-<td><p>5 (6%)</p></td>
-<td><p>2 (2%)</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.7</p></td>
-<td><p>232</p></td>
-<td><p>30 (13%)</p></td>
-<td><p>32 (14%)</p></td>
-<td><p>5 (2%)</p></td>
-<td><p>2 (1%)</p></td>
-</tr>
-<tr class="row-even"><td><p>5.8</p></td>
-<td><p>157</p></td>
-<td><p>13 (8%)</p></td>
-<td><p>36 (23%)</p></td>
-<td><p>2 (1%)</p></td>
-<td><p>6 (4%)</p></td>
-</tr>
-<tr class="row-odd"><td><p>5.9</p></td>
-<td><p>209</p></td>
-<td><p>15 (7%)</p></td>
-<td><p>78 (37%)</p></td>
-<td><p>3 (1%)</p></td>
-<td><p>10 (5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>5.0</td>
+<td>329</td>
+<td>15 (5%)</td>
+<td>20 (6%)</td>
+<td>1 (0%)</td>
+<td>0 (0%)</td>
+</tr>
+<tr class="row-odd"><td>5.1</td>
+<td>372</td>
+<td>13 (3%)</td>
+<td>38 (10%)</td>
+<td>1 (0%)</td>
+<td>4 (1%)</td>
+</tr>
+<tr class="row-even"><td>5.2-rc1</td>
+<td>334</td>
+<td>20 (6%)</td>
+<td>34 (10%)</td>
+<td>6 (2%)</td>
+<td>11 (3%)</td>
+</tr>
+<tr class="row-odd"><td>5.3-rc1</td>
+<td>302</td>
+<td>36 (12%)</td>
+<td>53 (18%)</td>
+<td>4 (1%)</td>
+<td>5 (2%)</td>
+</tr>
+<tr class="row-even"><td>5.4</td>
+<td>361</td>
+<td>16 (4%)</td>
+<td>28 (8%)</td>
+<td>1 (0%)</td>
+<td>9 (2%)</td>
+</tr>
+<tr class="row-odd"><td>5.5</td>
+<td>408</td>
+<td>11 (3%)</td>
+<td>48 (12%)</td>
+<td>14 (3%)</td>
+<td>10 (2%)</td>
+</tr>
+<tr class="row-even"><td>5.6</td>
+<td>87</td>
+<td>12 (14%)</td>
+<td>6 (7%)</td>
+<td>5 (6%)</td>
+<td>2 (2%)</td>
+</tr>
+<tr class="row-odd"><td>5.7</td>
+<td>232</td>
+<td>30 (13%)</td>
+<td>32 (14%)</td>
+<td>5 (2%)</td>
+<td>2 (1%)</td>
+</tr>
+<tr class="row-even"><td>5.8</td>
+<td>157</td>
+<td>13 (8%)</td>
+<td>36 (23%)</td>
+<td>2 (1%)</td>
+<td>6 (4%)</td>
+</tr>
+<tr class="row-odd"><td>5.9</td>
+<td>209</td>
+<td>15 (7%)</td>
+<td>78 (37%)</td>
+<td>3 (1%)</td>
+<td>10 (5%)</td>
</tr>
</tbody>
</table>
@@ -1117,558 +1129,558 @@ patches that got “Reviewed-by” and if we exclude them, we’re back to 14%,
which is more like what I’d expect.</p>
<div class="section" id="developers-with-the-most-changesets">
<h3>Developers with the most changesets<a class="headerlink" href="#developers-with-the-most-changesets" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>28</p></td>
-<td><p>(13.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>28</td>
+<td>(13.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Vasant Hegde</p></td>
-<td><p>25</p></td>
-<td><p>(12.0%)</p></td>
+<tr class="row-odd"><td>Vasant Hegde</td>
+<td>25</td>
+<td>(12.0%)</td>
</tr>
-<tr class="row-even"><td><p>Joel Stanley</p></td>
-<td><p>25</p></td>
-<td><p>(12.0%)</p></td>
+<tr class="row-even"><td>Joel Stanley</td>
+<td>25</td>
+<td>(12.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>24</p></td>
-<td><p>(11.5%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>24</td>
+<td>(11.5%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>20</p></td>
-<td><p>(9.6%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>20</td>
+<td>(9.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>16</p></td>
-<td><p>(7.7%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>16</td>
+<td>(7.7%)</td>
</tr>
-<tr class="row-even"><td><p>Nicholas Piggin</p></td>
-<td><p>12</p></td>
-<td><p>(5.7%)</p></td>
+<tr class="row-even"><td>Nicholas Piggin</td>
+<td>12</td>
+<td>(5.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Akshay Adiga</p></td>
-<td><p>8</p></td>
-<td><p>(3.8%)</p></td>
+<tr class="row-odd"><td>Akshay Adiga</td>
+<td>8</td>
+<td>(3.8%)</td>
</tr>
-<tr class="row-even"><td><p>Madhavan Srinivasan</p></td>
-<td><p>7</p></td>
-<td><p>(3.3%)</p></td>
+<tr class="row-even"><td>Madhavan Srinivasan</td>
+<td>7</td>
+<td>(3.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Reza Arbab</p></td>
-<td><p>6</p></td>
-<td><p>(2.9%)</p></td>
+<tr class="row-odd"><td>Reza Arbab</td>
+<td>6</td>
+<td>(2.9%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>3</p></td>
-<td><p>(1.4%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>3</td>
+<td>(1.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Claudio Carvalho</p></td>
-<td><p>3</p></td>
-<td><p>(1.4%)</p></td>
+<tr class="row-odd"><td>Claudio Carvalho</td>
+<td>3</td>
+<td>(1.4%)</td>
</tr>
-<tr class="row-even"><td><p>Suraj Jitindar Singh</p></td>
-<td><p>3</p></td>
-<td><p>(1.4%)</p></td>
+<tr class="row-even"><td>Suraj Jitindar Singh</td>
+<td>3</td>
+<td>(1.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Sam Bobroff</p></td>
-<td><p>3</p></td>
-<td><p>(1.4%)</p></td>
+<tr class="row-odd"><td>Sam Bobroff</td>
+<td>3</td>
+<td>(1.4%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>2</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>2</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Ellerman</p></td>
-<td><p>2</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-odd"><td>Michael Ellerman</td>
+<td>2</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>2</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>2</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaibhav Jain</p></td>
-<td><p>2</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-odd"><td>Vaibhav Jain</td>
+<td>2</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>2</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>2</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>2</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>2</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-even"><td><p>Christophe Lombard</p></td>
-<td><p>2</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-even"><td>Christophe Lombard</td>
+<td>2</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Daniel Black</p></td>
-<td><p>2</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-odd"><td>Daniel Black</td>
+<td>2</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-even"><td><p>Alexey Kardashevskiy</p></td>
-<td><p>1</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-even"><td>Alexey Kardashevskiy</td>
+<td>1</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>1</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>1</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Anton Blanchard</p></td>
-<td><p>1</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-even"><td>Anton Blanchard</td>
+<td>1</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Guilherme G. Piccoli</p></td>
-<td><p>1</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-odd"><td>Guilherme G. Piccoli</td>
+<td>1</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-even"><td><p>John W Walthour</p></td>
-<td><p>1</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-even"><td>John W Walthour</td>
+<td>1</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Anju T Sudhakar</p></td>
-<td><p>1</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-odd"><td>Anju T Sudhakar</td>
+<td>1</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Balbir Singh</p></td>
-<td><p>1</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-even"><td>Balbir Singh</td>
+<td>1</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>1</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>1</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-even"><td><p>William A. Kennington III</p></td>
-<td><p>1</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-even"><td>William A. Kennington III</td>
+<td>1</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Sukadev Bhattiprolu</p></td>
-<td><p>1</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-odd"><td>Sukadev Bhattiprolu</td>
+<td>1</td>
+<td>(0.5%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-changed-lines">
<h3>Developers with the most changed lines<a class="headerlink" href="#developers-with-the-most-changed-lines" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 70%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="70%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Akshay Adiga</p></td>
-<td><p>2731</p></td>
-<td><p>(27.9%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Akshay Adiga</td>
+<td>2731</td>
+<td>(27.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>1512</p></td>
-<td><p>(15.5%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>1512</td>
+<td>(15.5%)</td>
</tr>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>1355</p></td>
-<td><p>(13.9%)</p></td>
+<tr class="row-even"><td>Stewart Smith</td>
+<td>1355</td>
+<td>(13.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Nicholas Piggin</p></td>
-<td><p>929</p></td>
-<td><p>(9.5%)</p></td>
+<tr class="row-odd"><td>Nicholas Piggin</td>
+<td>929</td>
+<td>(9.5%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>827</p></td>
-<td><p>(8.5%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>827</td>
+<td>(8.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>719</p></td>
-<td><p>(7.4%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>719</td>
+<td>(7.4%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>522</p></td>
-<td><p>(5.3%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>522</td>
+<td>(5.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Madhavan Srinivasan</p></td>
-<td><p>180</p></td>
-<td><p>(1.8%)</p></td>
+<tr class="row-odd"><td>Madhavan Srinivasan</td>
+<td>180</td>
+<td>(1.8%)</td>
</tr>
-<tr class="row-even"><td><p>Sam Bobroff</p></td>
-<td><p>172</p></td>
-<td><p>(1.8%)</p></td>
+<tr class="row-even"><td>Sam Bobroff</td>
+<td>172</td>
+<td>(1.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Christophe Lombard</p></td>
-<td><p>170</p></td>
-<td><p>(1.7%)</p></td>
+<tr class="row-odd"><td>Christophe Lombard</td>
+<td>170</td>
+<td>(1.7%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh Salgaonkar</p></td>
-<td><p>166</p></td>
-<td><p>(1.7%)</p></td>
+<tr class="row-even"><td>Mahesh Salgaonkar</td>
+<td>166</td>
+<td>(1.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>125</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>125</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-even"><td><p>Joel Stanley</p></td>
-<td><p>70</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-even"><td>Joel Stanley</td>
+<td>70</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Reza Arbab</p></td>
-<td><p>64</p></td>
-<td><p>(0.7%)</p></td>
+<tr class="row-odd"><td>Reza Arbab</td>
+<td>64</td>
+<td>(0.7%)</td>
</tr>
-<tr class="row-even"><td><p>Claudio Carvalho</p></td>
-<td><p>51</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-even"><td>Claudio Carvalho</td>
+<td>51</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Suraj Jitindar Singh</p></td>
-<td><p>42</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Suraj Jitindar Singh</td>
+<td>42</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>28</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>28</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Jeremy Kerr</p></td>
-<td><p>25</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Jeremy Kerr</td>
+<td>25</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Ellerman</p></td>
-<td><p>21</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-even"><td>Michael Ellerman</td>
+<td>21</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>18</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>18</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>17</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>17</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaibhav Jain</p></td>
-<td><p>8</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-odd"><td>Vaibhav Jain</td>
+<td>8</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-even"><td><p>Daniel Black</p></td>
-<td><p>6</p></td>
-<td><p>(0.1%)</p></td>
+<tr class="row-even"><td>Daniel Black</td>
+<td>6</td>
+<td>(0.1%)</td>
</tr>
-<tr class="row-odd"><td><p>William A. Kennington III</p></td>
-<td><p>4</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>William A. Kennington III</td>
+<td>4</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Sukadev Bhattiprolu</p></td>
-<td><p>4</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Sukadev Bhattiprolu</td>
+<td>4</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Alexey Kardashevskiy</p></td>
-<td><p>3</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Alexey Kardashevskiy</td>
+<td>3</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>John W Walthour</p></td>
-<td><p>3</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>John W Walthour</td>
+<td>3</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Balbir Singh</p></td>
-<td><p>3</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Balbir Singh</td>
+<td>3</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Guilherme G. Piccoli</p></td>
-<td><p>2</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Guilherme G. Piccoli</td>
+<td>2</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Anton Blanchard</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Anton Blanchard</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Anju T Sudhakar</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Anju T Sudhakar</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-lines-removed">
<h3>Developers with the most lines removed<a class="headerlink" href="#developers-with-the-most-lines-removed" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 70%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="70%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>28</p></td>
-<td><p>(1.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Alistair Popple</td>
+<td>28</td>
+<td>(1.7%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-signoffs">
<h3>Developers with the most signoffs<a class="headerlink" href="#developers-with-the-most-signoffs" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 72%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="72%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>180</p></td>
-<td><p>(97.8%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>180</td>
+<td>(97.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Shilpasri G Bhat</p></td>
-<td><p>2</p></td>
-<td><p>(1.1%)</p></td>
+<tr class="row-odd"><td>Shilpasri G Bhat</td>
+<td>2</td>
+<td>(1.1%)</td>
</tr>
-<tr class="row-even"><td><p>Mukesh Ojha</p></td>
-<td><p>1</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-even"><td>Mukesh Ojha</td>
+<td>1</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>1</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>1</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Total</p></td>
-<td><p>184</p></td>
-<td><p>(100%)</p></td>
+<tr class="row-even"><td>Total</td>
+<td>184</td>
+<td>(100%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-reviews">
<h3>Developers with the most reviews<a class="headerlink" href="#developers-with-the-most-reviews" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 75%" />
-<col style="width: 6%" />
-<col style="width: 19%" />
+<col width="75%" />
+<col width="6%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Michael Neuling</p></td>
-<td><p>25</p></td>
-<td><p>(32.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Michael Neuling</td>
+<td>25</td>
+<td>(32.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>25</p></td>
-<td><p>(32.5%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>25</td>
+<td>(32.5%)</td>
</tr>
-<tr class="row-even"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>9</p></td>
-<td><p>(11.7%)</p></td>
+<tr class="row-even"><td>Vaidyanathan Srinivasan</td>
+<td>9</td>
+<td>(11.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Oliver O’Halloran</p></td>
-<td><p>4</p></td>
-<td><p>(5.2%)</p></td>
+<tr class="row-odd"><td>Oliver O’Halloran</td>
+<td>4</td>
+<td>(5.2%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>3</p></td>
-<td><p>(3.9%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>3</td>
+<td>(3.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Frederic Barrat</p></td>
-<td><p>2</p></td>
-<td><p>(2.6%)</p></td>
+<tr class="row-odd"><td>Frederic Barrat</td>
+<td>2</td>
+<td>(2.6%)</td>
</tr>
-<tr class="row-even"><td><p>Suraj Jitindar Singh</p></td>
-<td><p>2</p></td>
-<td><p>(2.6%)</p></td>
+<tr class="row-even"><td>Suraj Jitindar Singh</td>
+<td>2</td>
+<td>(2.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Vasant Hegde</p></td>
-<td><p>2</p></td>
-<td><p>(2.6%)</p></td>
+<tr class="row-odd"><td>Vasant Hegde</td>
+<td>2</td>
+<td>(2.6%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Jeffery</p></td>
-<td><p>1</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-even"><td>Andrew Jeffery</td>
+<td>1</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>1</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-odd"><td>Samuel Mendoza-Jonas</td>
+<td>1</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-even"><td><p>Alexey Kardashevskiy</p></td>
-<td><p>1</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-even"><td>Alexey Kardashevskiy</td>
+<td>1</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>1</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>1</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-even"><td><p>Akshay Adiga</p></td>
-<td><p>1</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-even"><td>Akshay Adiga</td>
+<td>1</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Total</p></td>
-<td><p>77</p></td>
-<td><p>(100%)</p></td>
+<tr class="row-odd"><td>Total</td>
+<td>77</td>
+<td>(100%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-test-credits">
<h3>Developers with the most test credits<a class="headerlink" href="#developers-with-the-most-test-credits" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 73%" />
-<col style="width: 5%" />
-<col style="width: 22%" />
+<col width="73%" />
+<col width="5%" />
+<col width="22%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>3</p></td>
-<td><p>(100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>3</td>
+<td>(100.0%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-who-gave-the-most-tested-by-credits">
<h3>Developers who gave the most tested-by credits<a class="headerlink" href="#developers-who-gave-the-most-tested-by-credits" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 75%" />
-<col style="width: 6%" />
-<col style="width: 19%" />
+<col width="75%" />
+<col width="6%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>2</p></td>
-<td><p>(66.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>2</td>
+<td>(66.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>1</p></td>
-<td><p>(33.3%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>1</td>
+<td>(33.3%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-report-credits">
<h3>Developers with the most report credits<a class="headerlink" href="#developers-with-the-most-report-credits" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 75%" />
-<col style="width: 6%" />
-<col style="width: 19%" />
+<col width="75%" />
+<col width="6%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>6</p></td>
-<td><p>(60.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Pridhiviraj Paidipeddi</td>
+<td>6</td>
+<td>(60.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>1</p></td>
-<td><p>(10.0%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>1</td>
+<td>(10.0%)</td>
</tr>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>1</p></td>
-<td><p>(10.0%)</p></td>
+<tr class="row-even"><td>Stewart Smith</td>
+<td>1</td>
+<td>(10.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Shriya</p></td>
-<td><p>1</p></td>
-<td><p>(10.0%)</p></td>
+<tr class="row-odd"><td>Shriya</td>
+<td>1</td>
+<td>(10.0%)</td>
</tr>
-<tr class="row-even"><td><p>Robert Lippert</p></td>
-<td><p>1</p></td>
-<td><p>(10.0%)</p></td>
+<tr class="row-even"><td>Robert Lippert</td>
+<td>1</td>
+<td>(10.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Total</p></td>
-<td><p>10</p></td>
-<td><p>(100%)</p></td>
+<tr class="row-odd"><td>Total</td>
+<td>10</td>
+<td>(100%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-who-gave-the-most-report-credits">
<h3>Developers who gave the most report credits<a class="headerlink" href="#developers-who-gave-the-most-report-credits" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 75%" />
-<col style="width: 6%" />
-<col style="width: 19%" />
+<col width="75%" />
+<col width="6%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>3</p></td>
-<td><p>(30.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>3</td>
+<td>(30.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Suraj Jitindar Singh</p></td>
-<td><p>3</p></td>
-<td><p>(30.0%)</p></td>
+<tr class="row-odd"><td>Suraj Jitindar Singh</td>
+<td>3</td>
+<td>(30.0%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>2</p></td>
-<td><p>(20.0%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>2</td>
+<td>(20.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>1</p></td>
-<td><p>(10.0%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>1</td>
+<td>(10.0%)</td>
</tr>
-<tr class="row-even"><td><p>Madhavan Srinivasan</p></td>
-<td><p>1</p></td>
-<td><p>(10.0%)</p></td>
+<tr class="row-even"><td>Madhavan Srinivasan</td>
+<td>1</td>
+<td>(10.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Total</p></td>
-<td><p>10</p></td>
-<td><p>(100%)</p></td>
+<tr class="row-odd"><td>Total</td>
+<td>10</td>
+<td>(100%)</td>
</tr>
</tbody>
</table>
@@ -1676,94 +1688,94 @@ which is more like what I’d expect.</p>
<div class="section" id="changesets-and-employers">
<h3>Changesets and Employers<a class="headerlink" href="#changesets-and-employers" title="Permalink to this headline">¶</a></h3>
<p>Top changeset contributors by employer:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 73%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="73%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Employer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Employer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>208</p></td>
-<td><p>(99.5%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>208</td>
+<td>(99.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Google</p></td>
-<td><p>1</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-odd"><td>Google</td>
+<td>1</td>
+<td>(0.5%)</td>
</tr>
</tbody>
</table>
<p>Top lines changed by employer:</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 10%" />
-<col style="width: 21%" />
+<col width="69%" />
+<col width="10%" />
+<col width="21%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Employer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Employer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>9776</p></td>
-<td><p>(100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>9776</td>
+<td>(100.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Google</p></td>
-<td><p>4</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Google</td>
+<td>4</td>
+<td>(0.0%)</td>
</tr>
</tbody>
</table>
<p>Employers with the most signoffs (total 184):</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 71%" />
-<col style="width: 8%" />
-<col style="width: 21%" />
+<col width="71%" />
+<col width="8%" />
+<col width="21%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Employer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Employer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>184</p></td>
-<td><p>(100.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>184</td>
+<td>(100.0%)</td>
</tr>
</tbody>
</table>
<p>Employers with the most hackers (total 32):</p>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 73%" />
-<col style="width: 8%" />
-<col style="width: 19%" />
+<col width="73%" />
+<col width="8%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Employer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Employer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>31</p></td>
-<td><p>(96.9%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>31</td>
+<td>(96.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Google</p></td>
-<td><p>1</p></td>
-<td><p>(3.1%)</p></td>
+<tr class="row-odd"><td>Google</td>
+<td>1</td>
+<td>(3.1%)</td>
</tr>
</tbody>
</table>
@@ -1772,7 +1784,6 @@ which is more like what I’d expect.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -1829,15 +1840,17 @@ which is more like what I’d expect.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -1854,15 +1867,14 @@ which is more like what I’d expect.</p>
<li class="right" >
<a href="skiboot-5.8-rc1.html" title="skiboot-5.8-rc1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-5.9</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0-rc1.html b/doc/release-notes/skiboot-6.0-rc1.html
index efc3664..b8df086 100644
--- a/doc/release-notes/skiboot-6.0-rc1.html
+++ b/doc/release-notes/skiboot-6.0-rc1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0-rc1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0-rc1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.html" title="skiboot-6.0"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -62,7 +63,7 @@ being for all POWER8 and POWER9 platforms in op-build v2.0.</p>
<div class="section" id="new-features">
<h2>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Disable stop states from OPAL</p>
+<li><p class="first">Disable stop states from OPAL</p>
<p>On ZZ, stop4,5,11 are enabled for PowerVM, even though doing
so may cause problems with OPAL due to bugs in hcode.</p>
<p>For other platforms, this isn’t so much of an issue as
@@ -78,48 +79,48 @@ from being problematic.</p>
</div>
<p>This nvram override will disable <em>all</em> stop states.</p>
</li>
-<li><p>interrupts: Create an “interrupts” property in the OPAL node</p>
+<li><p class="first">interrupts: Create an “interrupts” property in the OPAL node</p>
<p>Deprecate the old “opal-interrupts”, it’s still there, but the new
property follows the standard and allow us to specify whether an
interrupt is level or edge sensitive.</p>
<p>Similarly create “interrupt-names” whose content is identical to
“opal-interrupts-names”.</p>
</li>
-<li><p>SBE: Add timer support on POWER9</p>
+<li><p class="first">SBE: Add timer support on POWER9</p>
<p>SBE on P9 provides one shot programmable timer facility. We can use this
to implement OPAL timers and hence limit the reliance on the Linux
heartbeat (similar to HW timer facility provided by SLW on P8).</p>
</li>
-<li><p>Add SBE driver support</p>
+<li><p class="first">Add SBE driver support</p>
<p>SBE (Self Boot Engine) on P9 has two different jobs:
- Boot the chip up to the point the core is functional
- Provide various services like timer, scom, stash MPIPL, etc., at runtime</p>
<p>We will use SBE for various purposes like timer, MPIPL, etc.</p>
</li>
-<li><p>opal:hmi: Add missing processor recovery reason string.</p>
+<li><p class="first">opal:hmi: Add missing processor recovery reason string.</p>
<p>With this patch now we see reason string printed for CORE_WOF[43] bit.</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">477.352234986</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">U78D3</span><span class="mf">.001</span><span class="o">.</span><span class="n">WZS004A</span><span class="o">-</span><span class="n">P1</span><span class="o">-</span><span class="n">C48</span><span class="p">]:</span> <span class="n">P</span><span class="p">:</span><span class="mi">8</span> <span class="n">C</span><span class="p">:</span><span class="mi">22</span> <span class="n">T</span><span class="p">:</span><span class="mi">3</span><span class="p">:</span> <span class="n">Processor</span> <span class="n">recovery</span> <span class="n">occurred</span><span class="o">.</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">477.352234986</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">U78D3</span><span class="o">.</span><span class="mf">001.</span><span class="n">WZS004A</span><span class="o">-</span><span class="n">P1</span><span class="o">-</span><span class="n">C48</span><span class="p">]:</span> <span class="n">P</span><span class="p">:</span><span class="mi">8</span> <span class="n">C</span><span class="p">:</span><span class="mi">22</span> <span class="n">T</span><span class="p">:</span><span class="mi">3</span><span class="p">:</span> <span class="n">Processor</span> <span class="n">recovery</span> <span class="n">occurred</span><span class="o">.</span>
<span class="p">[</span> <span class="mf">477.352240742</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="n">Core</span> <span class="n">WOF</span> <span class="o">=</span> <span class="mh">0x0000000000100000</span> <span class="n">recovered</span> <span class="n">error</span><span class="p">:</span>
<span class="p">[</span> <span class="mf">477.352242181</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="n">PC</span> <span class="o">-</span> <span class="n">Thread</span> <span class="n">hang</span> <span class="n">recovery</span>
</pre></div>
</div>
</li>
-<li><p>Add DIMM actual speed to device tree</p>
+<li><p class="first">Add DIMM actual speed to device tree</p>
<p>Recent HDAT provides DIMM actuall speed. Lets add this to device tree.</p>
</li>
-<li><p>Fix DIMM size property</p>
+<li><p class="first">Fix DIMM size property</p>
<p>Today we parse vpd blob to get DIMM size information. This is limited
to FSP based system. HDAT provides DIMM size value. Lets use that to
populate device tree. So that we can get size information on BMC based
system as well.</p>
</li>
-<li><p>PCI: Set slot power limit when supported</p>
+<li><p class="first">PCI: Set slot power limit when supported</p>
<p>The PCIe slot capability can be implemented in a root or switch
downstream port to set the maximum power a card is allowed to draw
from the system. This patch adds support for setting the power limit
when the platform has defined one.</p>
</li>
-<li><p>hdata/spira: parse vpd to add part-number and serial-number to xscom&#64; node</p>
+<li><p class="first">hdata/spira: parse vpd to add part-number and serial-number to xscom&#64; node</p>
<p>Expected by FWTS and associates our processor with the part/serial
number, which is obviously a good thing for one’s own sanity.</p>
</li>
@@ -127,35 +128,38 @@ number, which is obviously a good thing for one’s own sanity.</p>
<div class="section" id="improved-hmi-handling">
<h3>Improved HMI Handling<a class="headerlink" href="#improved-hmi-handling" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>opal/hmi: Add documentation for opal_handle_hmi2 call</p></li>
-<li><p>opal/hmi: Generate hmi event for recovered HDEC parity error.</p></li>
-<li><p>opal/hmi: check thread 0 tfmr to validate latched tfmr errors.</p>
+<li><p class="first">opal/hmi: Add documentation for opal_handle_hmi2 call</p>
+</li>
+<li><p class="first">opal/hmi: Generate hmi event for recovered HDEC parity error.</p>
+</li>
+<li><p class="first">opal/hmi: check thread 0 tfmr to validate latched tfmr errors.</p>
<p>Due to P9 errata, HDEC parity and TB residue errors are latched for
non-zero threads 1-3 even if they are cleared. But these are not
latched on thread 0. Hence, use xscom SCOMC/SCOMD to read thread 0 tfmr
value and ignore them on non-zero threads if they are not present on
thread 0.</p>
</li>
-<li><p>opal/hmi: Print additional debug information in rendezvous.</p></li>
-<li><p>opal/hmi: Fix handling of TFMR parity/corrupt error.</p>
+<li><p class="first">opal/hmi: Print additional debug information in rendezvous.</p>
+</li>
+<li><p class="first">opal/hmi: Fix handling of TFMR parity/corrupt error.</p>
<p>While testing TFMR parity/corrupt error it has been observed that HMIs are
delivered twice for this error</p>
<blockquote>
<div><ul class="simple">
-<li><p>First time HMI is delivered with HMER[4,5]=1 and TFMR[60]=1.</p></li>
-<li><p>Second time HMI is delivered with HMER[4,5]=1 and TFMR[60]=0 with valid TB.</p></li>
+<li>First time HMI is delivered with HMER[4,5]=1 and TFMR[60]=1.</li>
+<li>Second time HMI is delivered with HMER[4,5]=1 and TFMR[60]=0 with valid TB.</li>
</ul>
</div></blockquote>
<p>On second HMI we end up throwing “HMI: TB invalid without core error
reported” even though TB is in a valid state.</p>
</li>
-<li><p>opal/hmi: Stop flooding HMI event for TOD errors.</p>
+<li><p class="first">opal/hmi: Stop flooding HMI event for TOD errors.</p>
<p>Fix the issue where every thread on the chip sends HMI event to host for
TOD errors. TOD errors are reported to all the core/threads on the chip.
Any one thread can fix the error and send event. Rest of the threads don’t
need to send HMI event unnecessarily.</p>
</li>
-<li><p>opal/hmi: Fix soft lockups during TOD errors</p>
+<li><p class="first">opal/hmi: Fix soft lockups during TOD errors</p>
<p>There are some TOD errors which do not affect working of TOD and TB. They
stay in valid state. Hence we don’t need rendez vous for TOD errors that
does not affect TB working.</p>
@@ -173,7 +177,7 @@ as a core-global error and hence avoiding rendez-vous path completely.
Instead threads that see TFMR[51]=1 will now take different path that
just do the TOD error recovery.</p>
</li>
-<li><p>opal/hmi: Do not send HMI event if no errors are found.</p>
+<li><p class="first">opal/hmi: Do not send HMI event if no errors are found.</p>
<p>For TOD errors, all the cores in the chip get HMIs. Any one thread from any
core can fix the issue and TFMR will have error conditions cleared. Rest of
the threads need take any action if TOD errors are already cleared. Hence
@@ -182,7 +186,7 @@ recovery path. Initialize recover = -1, so that if no errors found that
thread need not send a HMI event to linux. This helps in stop flooding host
with hmi event by every thread even there are no errors found.</p>
</li>
-<li><p>opal/hmi: Initialize the hmi event with old value of HMER.</p>
+<li><p class="first">opal/hmi: Initialize the hmi event with old value of HMER.</p>
<p>Do this before we check for TFAC errors. Otherwise the event at host console
shows no error reported in HMER register.</p>
<p>Without this patch the console event show HMER with all zeros</p>
@@ -200,33 +204,33 @@ shows no error reported in HMER register.</p>
</pre></div>
</div>
</li>
-<li><p>opal/hmi: Rework HMI handling of TFAC errors</p>
+<li><p class="first">opal/hmi: Rework HMI handling of TFAC errors</p>
<p>This patch reworks the HMI handling for TFAC errors by introducing
4 rendez-vous points improve the thread synchronization while handling
timebase errors that requires all thread to clear dirty data from TB/HDEC
register before clearing the errors.</p>
</li>
-<li><p>opal/hmi: Don’t bother passing HMER to pre-recovery cleanup</p>
+<li><p class="first">opal/hmi: Don’t bother passing HMER to pre-recovery cleanup</p>
<p>The test for TFAC error is now redundant so we remove it and
remove the HMER argument.</p>
</li>
-<li><p>opal/hmi: Move timer related error handling to a separate function</p>
+<li><p class="first">opal/hmi: Move timer related error handling to a separate function</p>
<p>Currently no functional change. This is a first step to completely
rewriting how these things are handled.</p>
</li>
-<li><p>opal/hmi: Add a new opal_handle_hmi2 that returns direct info to Linux</p>
+<li><p class="first">opal/hmi: Add a new opal_handle_hmi2 that returns direct info to Linux</p>
<p>It returns a 64-bit flags mask currently set to provide info
about which timer facilities were lost, and whether an event
was generated.</p>
</li>
-<li><p>opal/hmi: Remove races in clearing HMER</p>
+<li><p class="first">opal/hmi: Remove races in clearing HMER</p>
<p>Writing to HMER acts as an “AND”. The current code writes back the
value we originally read with the bits we handled cleared. This is
racy, if a new bit gets set in HW after the original read, we’ll end
up clearing it without handling it.</p>
<p>Instead, use an all 1’s mask with only the bit handled cleared.</p>
</li>
-<li><p>opal/hmi: Don’t re-read HMER multiple times</p>
+<li><p class="first">opal/hmi: Don’t re-read HMER multiple times</p>
<p>We want to make sure all reporting and actions are based
upon the same snapshot of HMER in case bits get added
by HW while we are in OPAL.</p>
@@ -241,7 +245,7 @@ PNOR images as the existing tooling used by <cite>op-build</cite>. The plan is t
switch <cite>op-build</cite> to use this infrastructure in the not too distant
future.</p>
<ul>
-<li><p>libflash/blocklevel: Make read/write be ECC agnostic for callers</p>
+<li><p class="first">libflash/blocklevel: Make read/write be ECC agnostic for callers</p>
<p>The blocklevel abstraction allows for regions of the backing store to be
marked as ECC protected so that blocklevel can decode/encode the ECC
bytes into the buffer automatically without the caller having to be ECC
@@ -265,7 +269,7 @@ knows of the presence of ECC then it will deal with all cases.</p>
<p>This also commit removes code in the gard tool which compensated for
inadequacies no longer present in blocklevel.</p>
</li>
-<li><p>libflash/blocklevel: Return region start from ecc_protected()</p>
+<li><p class="first">libflash/blocklevel: Return region start from ecc_protected()</p>
<p>Currently all ecc_protected() does is say if a region is ECC protected
or not. Knowing a region is ECC protected is one thing but there isn’t
much that can be done afterwards if this is the only known fact. A lot
@@ -274,18 +278,20 @@ more can be done if the caller is told where the ECC region begins.</p>
read/and writes. This allows for more flexibility calling read and write
without knowing exactly how the backing store is organised.</p>
</li>
-<li><p>libflash/ecc: Add helpers to align a position within an ecc buffer</p>
+<li><p class="first">libflash/ecc: Add helpers to align a position within an ecc buffer</p>
<p>As part of ongoing work to make ECC invisible to higher levels up the
stack this function converts a â€position’ which should be ECC agnostic
to the equivalent position within an ECC region starting at a specified
location.</p>
</li>
-<li><p>libflash/ecc: Add functions to deal with unaligned ECC memcpy</p></li>
-<li><p>external/ffspart: Improve error output</p></li>
-<li><p>libffs: Fix bad checks for partition overlap</p>
+<li><p class="first">libflash/ecc: Add functions to deal with unaligned ECC memcpy</p>
+</li>
+<li><p class="first">external/ffspart: Improve error output</p>
+</li>
+<li><p class="first">libffs: Fix bad checks for partition overlap</p>
<p>Not all TOCs are written at zero</p>
</li>
-<li><p>libflash/libffs: Allow caller to specifiy header partition</p>
+<li><p class="first">libflash/libffs: Allow caller to specifiy header partition</p>
<p>An FFS TOC is comprised of two parts. A small header which has a magic
and very minimmal information about the TOC which will be common to all
partitions, things like number of patritions, block sizes and the like.
@@ -303,7 +309,7 @@ for the â€part’ partition.</p>
partition. The caller can not and libffs will provide a sensible
default.</p>
</li>
-<li><p>libflash/libffs: Refcount ffs entries</p>
+<li><p class="first">libflash/libffs: Refcount ffs entries</p>
<p>Currently consumers can add an new ffs entry to multiple headers, this
is fine but freeing any of the headers will cause the entry to be freed,
this causes double free problems.</p>
@@ -313,47 +319,51 @@ reference to the entry, which they may well reuse at some other point.</p>
references.</p>
<p>This patch also removes the pointless return value of ffs_hdr_free()</p>
</li>
-<li><p>libflash/libffs: Switch to storing header entries in an array</p>
+<li><p class="first">libflash/libffs: Switch to storing header entries in an array</p>
<p>Since the libffs no longer needs to sort the entries as they get added
it makes little sense to have the complexity of a linked list when an
array will suffice.</p>
</li>
-<li><p>libflash/libffs: Remove backup partition from TOC generation code</p>
+<li><p class="first">libflash/libffs: Remove backup partition from TOC generation code</p>
<p>It turns out this code was messy and not all that reliable. Doing it at
the library level adds complexity to the library and restrictions to the
caller.</p>
<p>A simpler approach can be achived with the just instantiating multiple
ffs_header structures pointing to different parts of the same file.</p>
</li>
-<li><p>libflash/libffs: Remove the â€sides’ from the FFS TOC generation code</p>
+<li><p class="first">libflash/libffs: Remove the â€sides’ from the FFS TOC generation code</p>
<p>It turns out this code was messy and not all that reliable. Doing it at
the library level adds complexity to the library and restrictions to the
caller.</p>
<p>A simpler approach can be achived with the just instantiating multiple
ffs_header structures pointing to different parts of the same file.</p>
</li>
-<li><p>libflash/libffs: Always add entries to the end of the TOC</p>
+<li><p class="first">libflash/libffs: Always add entries to the end of the TOC</p>
<p>It turns out that sorted order isn’t the best idea. This removes
flexibility from the caller. If the user wants their partitions in
sorted order, they should insert them in sorted order.</p>
</li>
-<li><p>external/ffspart: Remove side, order and backup options</p>
+<li><p class="first">external/ffspart: Remove side, order and backup options</p>
<p>These options are currently flakey in libflash/libffs so there isn’t
much point to being able to use them in ffspart.</p>
<p>Future reworks planned for libflash/libffs will render these options
redundant anyway.</p>
</li>
-<li><p>libflash/libffs: ffs_close() should use ffs_hdr_free()</p></li>
-<li><p>libflash/libffs: Add setter for a partitions actual size</p></li>
-<li><p>pflash: Use ffs_entry_user_to_string() to standardise flag strings</p></li>
-<li><p>libffs: Standardise ffs partition flags</p>
+<li><p class="first">libflash/libffs: ffs_close() should use ffs_hdr_free()</p>
+</li>
+<li><p class="first">libflash/libffs: Add setter for a partitions actual size</p>
+</li>
+<li><p class="first">pflash: Use ffs_entry_user_to_string() to standardise flag strings</p>
+</li>
+<li><p class="first">libffs: Standardise ffs partition flags</p>
<p>It seems we’ve developed a character respresentation for ffs partition
flags. Currently only pflash really prints them so it hasn’t been a
problem but now ffspart wants to read them in from user input.</p>
<p>It is important that what libffs reads and what pflash prints remain
consistent, we should move the code into libffs to avoid problems.</p>
</li>
-<li><p>external/ffspart: Allow # comments in input file</p></li>
+<li><p class="first">external/ffspart: Allow # comments in input file</p>
+</li>
</ul>
</div>
</div>
@@ -363,7 +373,7 @@ consistent, we should move the code into libffs to avoid problems.</p>
a number of updates, and the patches once carried by SuperMicro are now
upstream.</p>
<ul>
-<li><p>p9dsu: detect p9dsu variant even when hostboot doesn’t tell us</p>
+<li><p class="first">p9dsu: detect p9dsu variant even when hostboot doesn’t tell us</p>
<p>The SuperMicro BMC can tell us what riser type we have, which dictates
the PCI slot tables. Usually, in an environment that a customer would
experience, Hostboot will do the query with an SMC specific patch
@@ -375,21 +385,25 @@ ourselves and setting the slot table appropriately. We do this
syncronously in platform init so that we don’t start probing
PCI before we setup the slot table.</p>
</li>
-<li><p>p9dsu: add slot power limit.</p></li>
-<li><p>p9dsu: add pci slot table for Boston LC 1U/2U and Boston LA/ESS.</p></li>
-<li><p>p9dsu HACK: fix system-vpd eeprom</p></li>
-<li><p>p9dsu: change esel command from AMI to IBM 0x3a.</p></li>
+<li><p class="first">p9dsu: add slot power limit.</p>
+</li>
+<li><p class="first">p9dsu: add pci slot table for Boston LC 1U/2U and Boston LA/ESS.</p>
+</li>
+<li><p class="first">p9dsu HACK: fix system-vpd eeprom</p>
+</li>
+<li><p class="first">p9dsu: change esel command from AMI to IBM 0x3a.</p>
+</li>
</ul>
</div>
<div class="section" id="zz-platform-changes">
<h2>ZZ Platform Changes<a class="headerlink" href="#zz-platform-changes" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hdata/i2c: Fix up pci hotplug labels</p>
+<li><p class="first">hdata/i2c: Fix up pci hotplug labels</p>
<p>These labels are used on the devices used to do PCIe slot power control
for implementing PCIe hotplug. I’m not sure how they ended up as
“eeprom-pgood” and “eeprom-controller” since that doesn’t make any sense.</p>
</li>
-<li><p>hdata/i2c: Ignore multi-port I2C devices</p>
+<li><p class="first">hdata/i2c: Ignore multi-port I2C devices</p>
<p>Recent FSP firmware builds add support for multi-port I2C devices such
as the GPIO expanders used for the presence detect of OpenCAPI devices
and the PCIe hotplug controllers used to power cycle PCIe slots on ZZ.</p>
@@ -401,14 +415,14 @@ specific handler so that we generate the correct DT bindings. Currently
we don’t and there is no immediate need for this support so just ignore
the multi-port devices for now.</p>
</li>
-<li><p>hdata/i2c: Replace <cite>i2c_</cite> prefix with <cite>dev_</cite></p>
+<li><p class="first">hdata/i2c: Replace <cite>i2c_</cite> prefix with <cite>dev_</cite></p>
<p>The current naming scheme makes it easy to conflate “i2cm_port” and
“i2c_port.” The latter is used to describe multi-port I2C devices such
as GPIO expanders and multi-channel PCIe hotplug controllers. Rename
i2c_port to dev_port to make the two a bit more distinct.</p>
<p>Also rename i2c_addr to dev_addr for consistency.</p>
</li>
-<li><p>hdata/i2c: Ignore CFAM I2C master</p>
+<li><p class="first">hdata/i2c: Ignore CFAM I2C master</p>
<p>Recent FSP firmware builds put in information about the CFAM I2C master
in addition the to host I2C masters accessible via XSCOM. Odds are this
information should not be there since there’s no handshaking between the
@@ -418,7 +432,7 @@ we need to deal with it.</p>
master. Without this it will create a bogus i2cm&#64;&lt;addr&gt; which migh cause
issues.</p>
</li>
-<li><p>ZZ: hw/imc: Add support to load imc catalog lid file</p>
+<li><p class="first">ZZ: hw/imc: Add support to load imc catalog lid file</p>
<p>Add support to load the imc catalog from a lid file packaged
as part of the system firmware. Lid number allocated
is 0x80f00103.lid.</p>
@@ -428,16 +442,19 @@ is 0x80f00103.lid.</p>
<div class="section" id="bugs-fixed">
<h2>Bugs Fixed<a class="headerlink" href="#bugs-fixed" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>core: Fix iteration condition to skip garded cpu</p></li>
-<li><p>uart: fix uart_opal_flush to take console lock over uart_con_flush
+<li><p class="first">core: Fix iteration condition to skip garded cpu</p>
+</li>
+<li><p class="first">uart: fix uart_opal_flush to take console lock over uart_con_flush
This bug meant that OPAL_CONSOLE_FLUSH didn’t take the appropriate locks.
-Luckily, since this call is only currently used in the crash path.</p></li>
-<li><p>xive: fix missing unlock in error path</p></li>
-<li><p>OPAL_PCI_SET_POWER_STATE: fix locking in error paths</p>
+Luckily, since this call is only currently used in the crash path.</p>
+</li>
+<li><p class="first">xive: fix missing unlock in error path</p>
+</li>
+<li><p class="first">OPAL_PCI_SET_POWER_STATE: fix locking in error paths</p>
<p>Otherwise we could exit OPAL holding locks, potentially leading
to all sorts of problems later on.</p>
</li>
-<li><p>hw/slw: Don’t assert on a unknown chip</p>
+<li><p class="first">hw/slw: Don’t assert on a unknown chip</p>
<p>For some reason skiboot populates nodes in /cpus/ for the cores on
chips that are deconfigured. As a result Linux includes the threads
of those cores in it’s set of possible CPUs in the system and attempts
@@ -449,12 +466,12 @@ structure for that chip either. In turn, this results in an assertion
failure when calling opal_slw_set_reg() since it expects the chip
structure to exist. Fix this up and print an error instead.</p>
</li>
-<li><p>opal/hmi: Generate one event per core for processor recovery.</p>
+<li><p class="first">opal/hmi: Generate one event per core for processor recovery.</p>
<p>Processor recovery is per core error. All threads on that core receive
HMI. All threads don’t need to generate HMI event for same error.</p>
<p>Let thread 0 only generate the event.</p>
</li>
-<li><p>sensors: Dont add DTS sensors when OCC inband sensors are available</p>
+<li><p class="first">sensors: Dont add DTS sensors when OCC inband sensors are available</p>
<p>There are two sets of core temperature sensors today. One is DTS scom
based core temperature sensors and the second group is the sensors
provided by OCC. DTS is the highest temperature among the different
@@ -466,18 +483,18 @@ updated by OCC to main memory.</p>
compared to reading OCC sensors which is as good as reading memory.
So dont add DTS sensors when OCC sensors are available.</p>
</li>
-<li><p>core/fast-reboot: Increase timeout for dctl sreset to 1sec</p>
+<li><p class="first">core/fast-reboot: Increase timeout for dctl sreset to 1sec</p>
<p>Direct control xscom can take more time to complete. We seem to
wait too little on Boston failing fast-reboot for no good reason.</p>
<p>Increase timeout to 1 sec as a reasonable value for sreset to be delivered
and core to start executing instructions.</p>
</li>
-<li><p>occ: sensors-groups: Add DT properties to mark HWMON sensor groups</p>
+<li><p class="first">occ: sensors-groups: Add DT properties to mark HWMON sensor groups</p>
<p>Fix the sensor type to match HWMON sensor types. Add compatible flag
to indicate the environmental sensor groups so that operations on
these groups can be handled by HWMON linux interface.</p>
</li>
-<li><p>core: Correctly load initramfs in stb container</p>
+<li><p class="first">core: Correctly load initramfs in stb container</p>
<p>Skiboot does not calculate the actual size and start location of the
initramfs if it is wrapped by an STB container (for example if loading
an initramfs from the ROOTFS partition).</p>
@@ -487,8 +504,9 @@ load_initramfs() is called after load_kernel() move the call to
trustedboot_exit_boot_services() into load_and_boot_kernel() so it is
called after both of these.</p>
</li>
-<li><p>hdat/i2c.c: quieten “v2 found, parsing as v1”</p></li>
-<li><p>hw/imc: Check for pause_microcode_at_boot() return status</p>
+<li><p class="first">hdat/i2c.c: quieten “v2 found, parsing as v1”</p>
+</li>
+<li><p class="first">hw/imc: Check for pause_microcode_at_boot() return status</p>
<p>pause_microcode_at_boot() loops through all the chip’s ucode
control block and pause the ucode if it is in the running state.
But it does not fail if any of the chip’s ucode is not initialised.</p>
@@ -500,20 +518,20 @@ the function return.</p>
</ul>
<p>Slot location code fixes:</p>
<ul>
-<li><p>npu2: Use ibm, loc-code rather than ibm, slot-label</p>
+<li><p class="first">npu2: Use ibm, loc-code rather than ibm, slot-label</p>
<p>The ibm,slot-label property is to name the slot that appears under a
PCIe bridge. In the past we (ab)used the slot tables to attach names
to GPU devices and their corresponding NVLinks which resulted in npu2.c
using slot-label as a location code rather than as a way to name slots.</p>
<p>Fix this up since it’s confusing.</p>
</li>
-<li><p>hdata/slots: Apply slot label to the parent slot</p>
+<li><p class="first">hdata/slots: Apply slot label to the parent slot</p>
<p>Slot names only really make sense when applied to an actual slot rather
than a device. On witherspoon the GPU devices have a name associated with
the device rather than the slot for the GPUs. Add a hack that moves the
slot label to the parent slot rather than on the device itself.</p>
</li>
-<li><p>pci-dt-slot: Big ol’ cleanup</p>
+<li><p class="first">pci-dt-slot: Big ol’ cleanup</p>
<p>The underlying data that we get from HDAT can only really describe a
PCIe system. As such we can simplify the devicetree slot lookup code
by only caring about the important cases, namly, root ports and switch
@@ -527,7 +545,7 @@ EEHed devices under that port.</p>
<div class="section" id="opal-prd">
<h3>opal-prd<a class="headerlink" href="#opal-prd" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>opal-prd: Insert powernv_flash module</p>
+<li><p class="first">opal-prd: Insert powernv_flash module</p>
<p>Explictly load powernv_flash module on BMC based system so that we are sure
that flash device is created before starting opal-prd daemon.</p>
<p>Note that I have replaced pnor_available() check with is_fsp_system(). As we
@@ -539,7 +557,7 @@ detect flash device. Hence pnor_available() becomes redundant check.</p>
<div class="section" id="npu2-nvlink2">
<h3>NPU2/NVLINK2<a class="headerlink" href="#npu2-nvlink2" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>npu2/hw-procedures: fence bricks on GPU reset</p>
+<li><p class="first">npu2/hw-procedures: fence bricks on GPU reset</p>
<p>The NPU workbook defines a way of fencing a brick and
getting the brick out of fence state. We do have an implementation
of bringing the brick out of fenced/quiesced state. We do
@@ -552,16 +570,16 @@ that prior to and after reset, the operating system components
will flush the cache for the region of memory behind the GPU.</p>
<p>This patch does the following:</p>
<ol class="arabic simple">
-<li><p>Implements a npu2_dev_fence_brick() function to set/clear
-fence state</p></li>
-<li><p>Clear FIR bits prior to clearing the fence status</p></li>
-<li><p>Clear’s the fence status</p></li>
-<li><p>We take the powerbus out of CQ fence much later now,
+<li>Implements a npu2_dev_fence_brick() function to set/clear
+fence state</li>
+<li>Clear FIR bits prior to clearing the fence status</li>
+<li>Clear’s the fence status</li>
+<li>We take the powerbus out of CQ fence much later now,
in credits_check() which is the last hardware procedure
-called after link training.</p></li>
+called after link training.</li>
</ol>
</li>
-<li><p>hw/npu2.c: Remove static configuration of NPU2 register</p>
+<li><p class="first">hw/npu2.c: Remove static configuration of NPU2 register</p>
<p>The NPU_SM_CONFIG0 register currently needs to be configured in Skiboot to
select NVLink mode, however Hostboot should configure other bits in this
register.</p>
@@ -573,7 +591,7 @@ the specific system configuration. Therefore Skiboot should not alter it.</p>
not. Hostboot does not configure this bit so Skiboot should continue to
configure it.</p>
</li>
-<li><p>npu2: Improve log output of GPU-to-link mapping</p>
+<li><p class="first">npu2: Improve log output of GPU-to-link mapping</p>
<p>Debugging issues related to unconnected NVLinks can be a little less
irritating if we use the NPU2DEV{DBG,INF}() macros instead of prlog().</p>
<p>In short, change this:</p>
@@ -595,17 +613,17 @@ irritating if we use the NPU2DEV{DBG,INF}() macros instead of prlog().</p>
</pre></div>
</div>
</li>
-<li><p>npu2: Move NPU2_XTS_BDF_MAP_VALID assignment to context init</p>
+<li><p class="first">npu2: Move NPU2_XTS_BDF_MAP_VALID assignment to context init</p>
<p>A bad GPU or other condition may leave us with a subset of links that
never get initialized. If an ATSD is sent to one of those bricks, it
will never complete, leaving us waiting forever for a response:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">watchdog</span><span class="p">:</span> <span class="n">BUG</span><span class="p">:</span> <span class="n">soft</span> <span class="n">lockup</span> <span class="o">-</span> <span class="n">CPU</span><span class="c1">#23 stuck for 23s! [acos:2050]</span>
<span class="o">...</span>
<span class="n">Modules</span> <span class="n">linked</span> <span class="ow">in</span><span class="p">:</span> <span class="n">nvidia_uvm</span><span class="p">(</span><span class="n">O</span><span class="p">)</span> <span class="n">nvidia</span><span class="p">(</span><span class="n">O</span><span class="p">)</span>
-<span class="n">CPU</span><span class="p">:</span> <span class="mi">23</span> <span class="n">PID</span><span class="p">:</span> <span class="mi">2050</span> <span class="n">Comm</span><span class="p">:</span> <span class="n">acos</span> <span class="n">Tainted</span><span class="p">:</span> <span class="n">G</span> <span class="n">W</span> <span class="n">O</span> <span class="mf">4.14.0</span> <span class="c1">#2</span>
+<span class="n">CPU</span><span class="p">:</span> <span class="mi">23</span> <span class="n">PID</span><span class="p">:</span> <span class="mi">2050</span> <span class="n">Comm</span><span class="p">:</span> <span class="n">acos</span> <span class="n">Tainted</span><span class="p">:</span> <span class="n">G</span> <span class="n">W</span> <span class="n">O</span> <span class="mf">4.14</span><span class="o">.</span><span class="mi">0</span> <span class="c1">#2</span>
<span class="n">task</span><span class="p">:</span> <span class="n">c0000000285cfc00</span> <span class="n">task</span><span class="o">.</span><span class="n">stack</span><span class="p">:</span> <span class="n">c000001fea860000</span>
<span class="n">NIP</span><span class="p">:</span> <span class="n">c0000000000abdf0</span> <span class="n">LR</span><span class="p">:</span> <span class="n">c0000000000acc48</span> <span class="n">CTR</span><span class="p">:</span> <span class="n">c0000000000ace60</span>
-<span class="n">REGS</span><span class="p">:</span> <span class="n">c000001fea863550</span> <span class="n">TRAP</span><span class="p">:</span> <span class="mi">0901</span> <span class="n">Tainted</span><span class="p">:</span> <span class="n">G</span> <span class="n">W</span> <span class="n">O</span> <span class="p">(</span><span class="mf">4.14.0</span><span class="p">)</span>
+<span class="n">REGS</span><span class="p">:</span> <span class="n">c000001fea863550</span> <span class="n">TRAP</span><span class="p">:</span> <span class="mi">0901</span> <span class="n">Tainted</span><span class="p">:</span> <span class="n">G</span> <span class="n">W</span> <span class="n">O</span> <span class="p">(</span><span class="mf">4.14</span><span class="o">.</span><span class="mi">0</span><span class="p">)</span>
<span class="n">MSR</span><span class="p">:</span> <span class="mi">9000000000009033</span> <span class="o">&lt;</span><span class="n">SF</span><span class="p">,</span><span class="n">HV</span><span class="p">,</span><span class="n">EE</span><span class="p">,</span><span class="n">ME</span><span class="p">,</span><span class="n">IR</span><span class="p">,</span><span class="n">DR</span><span class="p">,</span><span class="n">RI</span><span class="p">,</span><span class="n">LE</span><span class="o">&gt;</span> <span class="n">CR</span><span class="p">:</span> <span class="mi">28004484</span> <span class="n">XER</span><span class="p">:</span> <span class="mi">20040000</span>
<span class="n">CFAR</span><span class="p">:</span> <span class="n">c0000000000abdf4</span> <span class="n">SOFTE</span><span class="p">:</span> <span class="mi">1</span>
<span class="n">GPR00</span><span class="p">:</span> <span class="n">c0000000000acc48</span> <span class="n">c000001fea8637d0</span> <span class="n">c0000000011f7c00</span> <span class="n">c000001fea863820</span>
@@ -613,7 +631,7 @@ will never complete, leaving us waiting forever for a response:</p>
<span class="n">GPR08</span><span class="p">:</span> <span class="mi">0000000000000001</span> <span class="mi">0000000000000080</span> <span class="n">c000201cc7cb7750</span> <span class="n">ffffffffffffffff</span>
<span class="n">GPR12</span><span class="p">:</span> <span class="mi">0000000000008000</span> <span class="n">c000000003167e80</span>
<span class="n">NIP</span> <span class="p">[</span><span class="n">c0000000000abdf0</span><span class="p">]</span> <span class="n">mmio_invalidate_wait</span><span class="o">+</span><span class="mh">0x90</span><span class="o">/</span><span class="mh">0xc0</span>
-<span class="n">LR</span> <span class="p">[</span><span class="n">c0000000000acc48</span><span class="p">]</span> <span class="n">mmio_invalidate</span><span class="o">.</span><span class="n">isra</span><span class="mf">.11</span><span class="o">+</span><span class="mh">0x158</span><span class="o">/</span><span class="mh">0x370</span>
+<span class="n">LR</span> <span class="p">[</span><span class="n">c0000000000acc48</span><span class="p">]</span> <span class="n">mmio_invalidate</span><span class="o">.</span><span class="n">isra</span><span class="o">.</span><span class="mi">11</span><span class="o">+</span><span class="mh">0x158</span><span class="o">/</span><span class="mh">0x370</span>
</pre></div>
</div>
<p>ATSDs are only sent to bricks which have a valid entry in the XTS_BDF
@@ -625,7 +643,7 @@ we make it all the way to creating a context for the BDF.</p>
<div class="section" id="secure-and-trusted-boot">
<h3>Secure and Trusted Boot<a class="headerlink" href="#secure-and-trusted-boot" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>hdata/tpmrel: detect tpm not present by looking up the stinfo-&gt;status</p>
+<li><p class="first">hdata/tpmrel: detect tpm not present by looking up the stinfo-&gt;status</p>
<p>Skiboot detects if tpm is present by checking if a secureboot_tpm_info
entry exists. However, if a tpm is not present, hostboot also creates a
secureboot_tpm_info entry. In this case, hostboot creates an empty
@@ -639,21 +657,22 @@ issue, reproduced when skiboot is running on a system that has no tpm.</p>
<div class="section" id="pci">
<h3>PCI<a class="headerlink" href="#pci" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>phb4: Restore bus numbers after CRS</p>
+<li><p class="first">phb4: Restore bus numbers after CRS</p>
<p>Currently we restore PCIe bus numbers right after the link is
up. Unfortunately as this point we haven’t done CRS so config space
may not be accessible.</p>
<p>This moves the bus number restore till after CRS has happened.</p>
</li>
-<li><p>romulus: Add a barebones slot table</p></li>
-<li><p>phb4: Quieten and improve “Timeout waiting for electrical link”</p>
+<li><p class="first">romulus: Add a barebones slot table</p>
+</li>
+<li><p class="first">phb4: Quieten and improve “Timeout waiting for electrical link”</p>
<p>This happens normally if a slot doesn’t have a working HW presence
detect and relies instead of inband presence detect.</p>
<p>The message we display is scary and not very useful unless ou
are debugging, so quiten it up and change it to something more
meaningful.</p>
</li>
-<li><p>pcie-slot: Don’t fail powering on an already on switch</p>
+<li><p class="first">pcie-slot: Don’t fail powering on an already on switch</p>
<p>If the power state is already the required value, return
OPAL_SUCCESS rather than OPAL_PARAMETER to avoid spurrious
errors during boot.</p>
@@ -663,7 +682,7 @@ errors during boot.</p>
<div class="section" id="capi-opencapi">
<h3>CAPI/OpenCAPI<a class="headerlink" href="#capi-opencapi" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>capi: Keep the current mmio windows in the mbt cache table.</p>
+<li><p class="first">capi: Keep the current mmio windows in the mbt cache table.</p>
<p>When the phb is used as a CAPI interface, the current mmio windows list
is cleaned before adding the capi and the prefetchable memory (M64)
windows, which implies that the non-prefetchable BAR is no more
@@ -671,7 +690,7 @@ configured.
This patch allows to set only the mbt bar to pass capi mmio window and
to keep, as defined, the other mmio values (M32 and M64).</p>
</li>
-<li><p>npu2-opencapi: Fix â€link internal error’ FIR, take 2</p>
+<li><p class="first">npu2-opencapi: Fix â€link internal error’ FIR, take 2</p>
<p>When setting up an opencapi link, we set the transport muxes first,
then set the PHY training config register, which includes disabling
nvlink mode for the bricks. That’s the order of the init sequence, as
@@ -680,10 +699,12 @@ found in the NPU workbook.</p>
OLL FIR Register for the 2 links when we configure the transport
muxes. Presumably because nvlink is not disabled yet and we are
configuring the transport muxes for opencapi.</p>
-<dl class="simple">
-<dt>bit 60:</dt><dd><p>link0 internal error</p>
+<dl class="docutils">
+<dt>bit 60:</dt>
+<dd><p class="first last">link0 internal error</p>
</dd>
-<dt>bit 61:</dt><dd><p>link1 internal error</p>
+<dt>bit 61:</dt>
+<dd><p class="first last">link1 internal error</p>
</dd>
</dl>
<p>Overall the current setup ends up being correct and everything works,
@@ -692,7 +713,7 @@ but we raise 2 FIR bits.</p>
the transport muxes. Incidentally, this is what the scripts from the
opencapi enablement team were doing all along.</p>
</li>
-<li><p>npu2-opencapi: Fix â€link internal error’ FIR, take 1</p>
+<li><p class="first">npu2-opencapi: Fix â€link internal error’ FIR, take 1</p>
<p>When we setup a link, we always enable ODL0 and ODL1 at the same time
in the PHY training config register, even though we are setting up
only one OTL/ODL, so it raises a “link internal error” FIR bit in the
@@ -701,10 +722,10 @@ as we’ll eventually setup the second link, but there’s no reason to
raise that FIR bit.</p>
<p>The fix is simply to only enable the ODL we are using for the link.</p>
</li>
-<li><p>phb4: Do not set the PBCQ Tunnel BAR register when enabling capi mode.</p>
+<li><p class="first">phb4: Do not set the PBCQ Tunnel BAR register when enabling capi mode.</p>
<p>The cxl driver will set the capi value, like other drivers already do.</p>
</li>
-<li><p>phb4: set TVT1 for tunneled operations in capi mode</p>
+<li><p class="first">phb4: set TVT1 for tunneled operations in capi mode</p>
<p>The ASN indication is used for tunneled operations (as_notify and
atomics). Tunneled operation messages can be sent in PCI mode as
well as CAPI mode.</p>
@@ -721,7 +742,7 @@ to prevent as_notify messages from being dropped.</p>
<div class="section" id="debugging-testing-improvements">
<h2>Debugging/Testing improvements<a class="headerlink" href="#debugging-testing-improvements" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>core/stack: backtrace unwind basic OPAL call details</p>
+<li><p class="first">core/stack: backtrace unwind basic OPAL call details</p>
<p>Put OPAL callers’ r1 into the stack back chain, and then use that to
unwind back to the OPAL entry frame (as opposed to boot entry, which
has a 0 back chain).</p>
@@ -747,7 +768,7 @@ a debugging opal call. This will allow Linux’s BUG() or xmon to
also print the Linux back trace in case of a NMI or MCE or watchdog
lockup that hits in OPAL.</p>
</li>
-<li><p>asm/head: implement quiescing without stack or clobbering regs</p>
+<li><p class="first">asm/head: implement quiescing without stack or clobbering regs</p>
<p>Quiescing currently is implmeented in C in opal_entry before the
opal call handler is called. This works well enough for simple
cases like fast reset when one CPU wants all others out of the way.</p>
@@ -764,7 +785,7 @@ returned to or re-entered during this period.</p>
interrupted with sreset if the quiesce times out, and it can be
interrupted by MCEs as well. These still have the issues above.</p>
</li>
-<li><p>core/opal: Allow poller re-entry if OPAL was re-entered</p>
+<li><p class="first">core/opal: Allow poller re-entry if OPAL was re-entered</p>
<p>If an NMI interrupts the middle of running pollers and the OS
invokes pollers again (e.g., for console output), the poller
re-entrancy check will prevent it from running and spam the
@@ -774,7 +795,7 @@ OPAL re-entrancy is something different and is detected elsewhere.
Avoid the poller recursion check if OPAL has been re-entered. This
is a best-effort attempt to cope with errors.</p>
</li>
-<li><p>core/opal: Emergency stack for re-entry</p>
+<li><p class="first">core/opal: Emergency stack for re-entry</p>
<p>This detects OPAL being re-entered by the OS, and switches to an
emergency stack if it was. This protects the firmware’s main stack
from re-entrancy and allows the OS to use NMI facilities for crash
@@ -788,9 +809,10 @@ removed by 80eee1946 (“opal: Remove machine check interrupt patching
in OPAL.”). So it is possible the size could be tightened again, but
that would require further analysis.</p>
</li>
-<li><p>hdat_to_dt: hash_prop the same on all platforms
-Fixes this unit test on ppc64le hosts.</p></li>
-<li><p>mambo: Add persistent memory disk support</p>
+<li><p class="first">hdat_to_dt: hash_prop the same on all platforms
+Fixes this unit test on ppc64le hosts.</p>
+</li>
+<li><p class="first">mambo: Add persistent memory disk support</p>
<p>This adds support to for mapping disks images using persistent
memory. Disks can be added by setting this ENV variable:</p>
<blockquote>
@@ -802,7 +824,7 @@ available since mambo commit 0131f0fc08 (from 24/4/2018).</p>
<p>This also needs the of_pmem.c driver in Linux which is only available
since v4.17. It works with powernv_defconfig + CONFIG_OF_PMEM.</p>
</li>
-<li><p>external/mambo: Add di command to decode instructions</p>
+<li><p class="first">external/mambo: Add di command to decode instructions</p>
<p>By default you get 16 instructions but you can specify the number you
want. i.e.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">systemsim</span> <span class="o">%</span> <span class="n">di</span> <span class="mh">0x100</span> <span class="mi">4</span>
@@ -814,7 +836,7 @@ want. i.e.</p>
</div>
<p>Using di since it’s what xmon uses.</p>
</li>
-<li><p>mambo/mambo_utils.tcl: Inject an MCE at a specified address</p>
+<li><p class="first">mambo/mambo_utils.tcl: Inject an MCE at a specified address</p>
<p>Currently we don’t support injecting an MCE on a specific address.
This is useful for testing functionality like memcpy_mcsafe()
(see <a class="reference external" href="https://patchwork.ozlabs.org/cover/893339/">https://patchwork.ozlabs.org/cover/893339/</a>)</p>
@@ -830,13 +852,13 @@ inject_mce_ue_on_addr $addr
</div>
<p>This would cause an mce on any r1 or r1 based access</p>
</li>
-<li><p>external/mambo: improve helper for machine checks</p>
+<li><p class="first">external/mambo: improve helper for machine checks</p>
<p>Improve workarounds for stop injection, because mambo often will
trigger on 0x104/204 when injecting sreset/mces.</p>
<p>This also adds a workaround to skip injecting on reservations to
avoid infinite loops when doing inject_mce_step.</p>
</li>
-<li><p>travis: Enable ppc64le builds</p>
+<li><p class="first">travis: Enable ppc64le builds</p>
<p>At least on the IBM Travis Enterprise instance, we can now do
ppc64le builds!</p>
<p>We can only build a subset of our matrix due to availability of
@@ -844,17 +866,17 @@ ppc64le distros. The Dockerfiles need some tweaking to only
attempt to install (x86_64 only) Mambo binaries, as well as the
build scripts.</p>
</li>
-<li><p>external: Add “lpc” tool</p>
+<li><p class="first">external: Add “lpc” tool</p>
<p>This is a little front-end to the lpc debugfs files to access
the LPC bus from userspace on the host.</p>
</li>
-<li><p>core/test/run-trace: fix on ppc64el</p></li>
+<li><p class="first">core/test/run-trace: fix on ppc64el</p>
+</li>
</ul>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -897,15 +919,17 @@ the LPC bus from userspace on the host.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -922,15 +946,14 @@ the LPC bus from userspace on the host.</p>
<li class="right" >
<a href="skiboot-6.0.html" title="skiboot-6.0"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0-rc2.html b/doc/release-notes/skiboot-6.0-rc2.html
index 18cce65..0555128 100644
--- a/doc/release-notes/skiboot-6.0-rc2.html
+++ b/doc/release-notes/skiboot-6.0-rc2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0-rc2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0-rc2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0-rc1.html" title="skiboot-6.0-rc1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -61,7 +62,7 @@ after this -rc if things look okay), with skiboot 6.0
being for all POWER8 and POWER9 platforms in op-build v2.0.</p>
<p>Over skiboot-6.0-rc1, we have the following changes:</p>
<ul>
-<li><p>Update default stop-state-disable mask to cut only stop11</p>
+<li><p class="first">Update default stop-state-disable mask to cut only stop11</p>
<p>Stability improvements in microcode for stop4/stop5 are
available in upstream hcode images. Stop4 and stop5 can
be safely enabled by default.</p>
@@ -75,27 +76,28 @@ are any issues with stop4/5.</p>
run a hcode image <em>different</em> than the default in op-build (set
<cite>BR2_HCODE_LATEST_VERSION=y</cite> in your config)</p>
</li>
-<li><p>ibm,firmware-versions: add hcode to device tree</p>
+<li><p class="first">ibm,firmware-versions: add hcode to device tree</p>
<p>op-build commit 736a08b996e292a449c4996edb264011dfe56a40
added hcode to the VERSION partition, let’s parse it out
and let the user know.</p>
</li>
-<li><p>ipmi: Add BMC firmware version to device tree</p>
+<li><p class="first">ipmi: Add BMC firmware version to device tree</p>
<p>BMC Get device ID command gives BMC firmware version details. Lets add this
to device tree. User space tools will use this information to display BMC
version details.</p>
</li>
-<li><p>mambo: Enable XER CA32 and OV32 bits on P9</p>
+<li><p class="first">mambo: Enable XER CA32 and OV32 bits on P9</p>
<p>POWER9 adds 32 bit carry and overflow bits to the XER, but we need to
set the relevant CTRL1 bit to enable them.</p>
</li>
-<li><p>Makefile: Fix building natively on ppc64le</p>
+<li><p class="first">Makefile: Fix building natively on ppc64le</p>
<p>When on ppc64le and CROSS is not set by the environment, make assumes
ppc64 and sets a default CROSS. Check for ppc64le as well, so that
â€make’ works out of the box on ppc64le.</p>
</li>
-<li><p>p9dsu: timeout for variant detection, default to 2uess</p></li>
-<li><p>core/direct-controls: improve p9_stop_thread error handling</p>
+<li><p class="first">p9dsu: timeout for variant detection, default to 2uess</p>
+</li>
+<li><p class="first">core/direct-controls: improve p9_stop_thread error handling</p>
<p>p9_stop_thread should fail the operation if it finds the thread was
already quiescd. This implies something else is doing direct controls
on the thread (e.g., pdbg) or there is some exceptional condition we
@@ -111,7 +113,7 @@ to de-assert the core_stop control if it fails to quiesce the thread.
After timing out here, the thread may eventually quiesce and get
stuck, but that’s simpler to debug than undefied behaviour.</p>
</li>
-<li><p>core/direct-controls: fix p9_cont_thread for stopped/inactive threads</p>
+<li><p class="first">core/direct-controls: fix p9_cont_thread for stopped/inactive threads</p>
<p>Firstly, p9_cont_thread should check that the thread actually was
quiesced before it tries to resume it. Anything could happen if we
try this from an arbitrary thread state.</p>
@@ -119,7 +121,7 @@ try this from an arbitrary thread state.</p>
a stop idle state), we must not send a core_start direct control,
clear_maint must be used in these cases.</p>
</li>
-<li><p>occ: Use major version number while checking the pstate table format</p>
+<li><p class="first">occ: Use major version number while checking the pstate table format</p>
<p>The minor version increments of the pstate table are backward
compatible. The minor version is changed when the pstate table
remains same and the existing reserved bytes are used for pointing
@@ -127,7 +129,7 @@ new data. So use only major version number while parsing the pstate
table. This will allow old skiboot to parse the pstate table and
handle minor version updates.</p>
</li>
-<li><p>hmi: Clear unknown debug trigger</p>
+<li><p class="first">hmi: Clear unknown debug trigger</p>
<p>On some systems, seeing hangs like this when Linux starts:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">170.027252763</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">OCC</span><span class="p">:</span> <span class="n">All</span> <span class="n">Chip</span> <span class="n">Rdy</span> <span class="n">after</span> <span class="mi">0</span> <span class="n">ms</span>
<span class="p">[</span> <span class="mf">170.062930145</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">INIT</span><span class="p">:</span> <span class="n">Starting</span> <span class="n">kernel</span> <span class="n">at</span> <span class="mh">0x20011000</span><span class="p">,</span> <span class="n">fdt</span> <span class="n">at</span> <span class="mh">0x30ae0530</span> <span class="mi">366247</span> <span class="nb">bytes</span><span class="p">)</span>
@@ -148,17 +150,17 @@ hmi_debug_trigger function in the kernel is set up.</p>
<p>This clears the HMI in Skiboot and reports to the kernel instead of
bringing down the machine.</p>
</li>
-<li><p>core/hmi: assign flags=0 in case nothing set by handle_hmi_exception</p>
+<li><p class="first">core/hmi: assign flags=0 in case nothing set by handle_hmi_exception</p>
<p>Theoretically we could have returned junk to the OS in this parameter.</p>
</li>
-<li><p>SLW: Fix mambo boot to use stop states</p>
+<li><p class="first">SLW: Fix mambo boot to use stop states</p>
<p>After commit 35c66b8ce5a2 (“SLW: Move MAMBO simulator checks to
slw_init”), mambo boot no longer calls add_cpu_idle_state_properties()
and as such we never enable stop states.</p>
<p>After adding the call back, we get more testing coverage as well
as faster mambo SMT boots.</p>
</li>
-<li><p>phb4: Hardware init updates</p>
+<li><p class="first">phb4: Hardware init updates</p>
<p>CFG Write Request Timeout was incorrectly set to informational and not
fatal for both non-CAPI and CAPI, so set it to fatal. This was a
mistake in the specification. Correcting this fixes a niche bug in
@@ -169,14 +171,16 @@ This fixes an extremely rare and unreproducible bug, though the current
timings don’t make sense since they’re higher than the NCU timeout (16)
which will checkstop the machine anyway.</p>
</li>
-<li><p>SLW: quieten â€Configuring self-restore’ for DARN,NCU_SPEC_BAR and HRMOR</p></li>
-<li><p>Experimental support for building with Clang</p></li>
-<li><p>Improvements to testing and Travis CI</p></li>
+<li><p class="first">SLW: quieten â€Configuring self-restore’ for DARN,NCU_SPEC_BAR and HRMOR</p>
+</li>
+<li><p class="first">Experimental support for building with Clang</p>
+</li>
+<li><p class="first">Improvements to testing and Travis CI</p>
+</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -196,15 +200,17 @@ which will checkstop the machine anyway.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -221,15 +227,14 @@ which will checkstop the machine anyway.</p>
<li class="right" >
<a href="skiboot-6.0-rc1.html" title="skiboot-6.0-rc1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.1.html b/doc/release-notes/skiboot-6.0.1.html
index 0b71fa5..708b7de 100644
--- a/doc/release-notes/skiboot-6.0.1.html
+++ b/doc/release-notes/skiboot-6.0.1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0-rc2.html" title="skiboot-6.0-rc2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,10 +53,10 @@
due to the bug fixes and debugging enhancements in it.</p>
<p>Over <a class="reference internal" href="skiboot-6.0.html#skiboot-6-0"><span class="std std-ref">skiboot-6.0</span></a>, we have two bug fixes:</p>
<ul>
-<li><p>OpenBMC: use 0x3a as OEM command for partial add esel.</p>
+<li><p class="first">OpenBMC: use 0x3a as OEM command for partial add esel.</p>
<p>This fixes the bug where skiboot would never send an eSEL to the BMC.</p>
</li>
-<li><p>Add location code to NPU2 HMI logging</p>
+<li><p class="first">Add location code to NPU2 HMI logging</p>
<p>The current HMI error message does not specifiy where the HMI
error occured.</p>
<p>The original error message was</p>
@@ -63,7 +64,7 @@ error occured.</p>
</pre></div>
</div>
<p>The enhanced error message is</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">NPU2</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">UOPWR</span><span class="mf">.0000000</span><span class="o">-</span><span class="n">Node0</span><span class="o">-</span><span class="n">Proc0</span><span class="p">]</span> <span class="n">P</span><span class="p">:</span><span class="mi">0</span> <span class="n">FIR</span><span class="c1">#0 FIR 0x0000100000000000 mask 0x009a48180f03ffff</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">NPU2</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">UOPWR</span><span class="o">.</span><span class="mi">0000000</span><span class="o">-</span><span class="n">Node0</span><span class="o">-</span><span class="n">Proc0</span><span class="p">]</span> <span class="n">P</span><span class="p">:</span><span class="mi">0</span> <span class="n">FIR</span><span class="c1">#0 FIR 0x0000100000000000 mask 0x009a48180f03ffff</span>
</pre></div>
</div>
</li>
@@ -71,7 +72,6 @@ error occured.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -91,15 +91,17 @@ error occured.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -116,15 +118,14 @@ error occured.</p>
<li class="right" >
<a href="skiboot-6.0-rc2.html" title="skiboot-6.0-rc2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.10.html b/doc/release-notes/skiboot-6.0.10.html
index 127fdfb..9415197 100644
--- a/doc/release-notes/skiboot-6.0.10.html
+++ b/doc/release-notes/skiboot-6.0.10.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.10 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.10 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.1.html" title="skiboot-6.0.1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.10</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,11 +53,12 @@
due to the bug fixes it contains.</p>
<p>The bug fixes are:</p>
<ul>
-<li><p>Recognise signed VERSION partition</p></li>
-<li><p>hdata/i2c: Skip unknown device type</p>
+<li><p class="first">Recognise signed VERSION partition</p>
+</li>
+<li><p class="first">hdata/i2c: Skip unknown device type</p>
<p>Do not add unknown I2C devices to device tree.</p>
</li>
-<li><p>hdata/i2c: Make SPD workaround more workaroundy</p>
+<li><p class="first">hdata/i2c: Make SPD workaround more workaroundy</p>
<p>We have a hack in the I2C device parser to fix up entries generated by
hostboot for the DIMM SPD devices. For some reason they get reported as
128Kbit EEPROMs which is bad since those have a different I2C interface
@@ -67,18 +69,18 @@ also has a different I2C interface.</p>
<p>To fix both these problems for any eeprom we find on that bus to have
the compatible string of “spd”.</p>
</li>
-<li><p>hdata/i2c: Add whitelisting for Host I2C devices</p>
+<li><p class="first">hdata/i2c: Add whitelisting for Host I2C devices</p>
<p>Many of the devices that we get information about through HDAT are for
use by firmware rather than the host operating system. This patch adds
a boolean flag to hdat_i2c_info structure that indicates whether devices
with a given purpose should be reserved for use inside of OPAL (or some
other firmware component, such as the OCC).</p>
</li>
-<li><p>Add fast-reboot property to /ibm,opal DT node</p>
+<li><p class="first">Add fast-reboot property to /ibm,opal DT node</p>
<p>this means that if it’s permanently disabled on boot, the test suite can
pick that up and not try a fast reboot test.</p>
</li>
-<li><p>libflash: Add ipmi-hiomap (currently for Witherspoon only)</p>
+<li><p class="first">libflash: Add ipmi-hiomap (currently for Witherspoon only)</p>
<p>ipmi-hiomap implements the PNOR access control protocol formerly known
as “the mbox protocol” but uses IPMI instead of the AST LPC mailbox as a
transport. As there is no-longer any mailbox involved in this alternate
@@ -87,23 +89,25 @@ been renamed to “the hiomap protoocol” (Host I/O Mapping protocol). The
same commands and events are used though this client-side implementation
assumes v2 of the protocol is supported by the BMC.</p>
</li>
-<li><p>AMI BMC: use 0x3a as OEM command</p>
+<li><p class="first">AMI BMC: use 0x3a as OEM command</p>
<p>The 0x3a OEM command is for IBM commands, while 0x32 was for AMI ones.
Sometime in the P8 timeframe, AMI BMCs were changed to listen for our
commands on either 0x32 or 0x3a. Since 0x3a is the direction forward,
we’ll use that, as P9 machines with AMI BMCs probably also want these
to work, and let’s not bet that 0x32 will continue to be okay.</p>
</li>
-<li><p>astbmc: Set romulus BMC type to OpenBMC</p></li>
-<li><p>Fixes to bulid with GCC8</p></li>
-<li><p>phb4/capp: Use link width to allocate STQ engines to CAPP</p>
+<li><p class="first">astbmc: Set romulus BMC type to OpenBMC</p>
+</li>
+<li><p class="first">Fixes to bulid with GCC8</p>
+</li>
+<li><p class="first">phb4/capp: Use link width to allocate STQ engines to CAPP</p>
<p>Update phb4_init_capp_regs() to allocates STQ Engines to CAPP/PEC2
based on link width instead of always assuming it to x8.</p>
<p>Also re-factor the function slightly to evaluate the link-width only
once and cache it so that it can also be used to allocate DMA read
engines.</p>
</li>
-<li><p>phb4/capp: Update the expected Eye-catcher for CAPP ucode lid</p>
+<li><p class="first">phb4/capp: Update the expected Eye-catcher for CAPP ucode lid</p>
<p>Currently on a FSP based P9 system load_capp_code() expects CAPP ucode
lid header to have eye-catcher magic of â€CAPPPSLL’. However skiboot
currently supports CAPP ucode only lids that have a eye-catcher magic
@@ -119,7 +123,6 @@ value of â€CAPPLIDH’ instead of â€CAPPPSLL’.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -139,15 +142,17 @@ value of â€CAPPLIDH’ instead of â€CAPPPSLL’.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -164,15 +169,14 @@ value of â€CAPPLIDH’ instead of â€CAPPPSLL’.</p>
<li class="right" >
<a href="skiboot-6.0.1.html" title="skiboot-6.0.1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.10</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.11.html b/doc/release-notes/skiboot-6.0.11.html
index 2a36cc6..a87eb14 100644
--- a/doc/release-notes/skiboot-6.0.11.html
+++ b/doc/release-notes/skiboot-6.0.11.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.11 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.11 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.10.html" title="skiboot-6.0.10"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.11</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@
due to the bug fixes it contains.</p>
<p>The bug fixes are:</p>
<ul>
-<li><p>phb4/capp: Only reset FIR bits that cause capp machine check</p>
+<li><p class="first">phb4/capp: Only reset FIR bits that cause capp machine check</p>
<p>During CAPP recovery do_capp_recovery_scoms() will reset the CAPP Fir
register just after CAPP recovery is completed. This has an
unintentional side effect of preventing PRD from analyzing and
@@ -64,7 +65,7 @@ only reset fir bits that cause CAPP machine check (local xstop). This
is done by reading the CAPP Fir Action0/1 &amp; Mask registers and
generating a mask which is then written on CAPP_FIR_CLEAR register.</p>
</li>
-<li><p>phb4: Check for RX errors after link training</p>
+<li><p class="first">phb4: Check for RX errors after link training</p>
<p>Some PHB4 PHYs can get stuck in a bad state where they are constantly
retraining the link. This happens transparently to skiboot and Linux
but will causes PCIe to be slow. Resetting the PHB4 clears the
@@ -82,21 +83,26 @@ retrain the link. i.e.</p>
</pre></div>
</div>
</li>
-<li><p>core/flash: Log return code when ffs_init() fails</p></li>
-<li><p>libflash/ipmi-hiomap: Use error codes rather than abort()</p></li>
-<li><p>libflash/ipmi-hiomap: Restore window state on window/protocol reset</p></li>
-<li><p>libflash/ipmi-hiomap: Improve event handling</p></li>
-<li><p>p9dsu: Describe platform BMC register configuration</p>
+<li><p class="first">core/flash: Log return code when ffs_init() fails</p>
+</li>
+<li><p class="first">libflash/ipmi-hiomap: Use error codes rather than abort()</p>
+</li>
+<li><p class="first">libflash/ipmi-hiomap: Restore window state on window/protocol reset</p>
+</li>
+<li><p class="first">libflash/ipmi-hiomap: Improve event handling</p>
+</li>
+<li><p class="first">p9dsu: Describe platform BMC register configuration</p>
<p>Provide the p9dsu-specific BMC configuration values required for the
host kernel to drive the VGA display correctly.</p>
</li>
-<li><p>p9dsu: Add HIOMAP-over-IPMI support</p></li>
-<li><p>libflash/ipmi-hiomap: Cleanup allocation on init failure</p></li>
+<li><p class="first">p9dsu: Add HIOMAP-over-IPMI support</p>
+</li>
+<li><p class="first">libflash/ipmi-hiomap: Cleanup allocation on init failure</p>
+</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -116,15 +122,17 @@ host kernel to drive the VGA display correctly.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -141,15 +149,14 @@ host kernel to drive the VGA display correctly.</p>
<li class="right" >
<a href="skiboot-6.0.10.html" title="skiboot-6.0.10"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.11</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.12.html b/doc/release-notes/skiboot-6.0.12.html
index 402adb6..b3182b3 100644
--- a/doc/release-notes/skiboot-6.0.12.html
+++ b/doc/release-notes/skiboot-6.0.12.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.12 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.12 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.11.html" title="skiboot-6.0.11"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.12</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@
due to the bug fixes it contains.</p>
<p>The bug fixes are:</p>
<ul>
-<li><p>hiomap: quieten warning on failing to move a window</p>
+<li><p class="first">hiomap: quieten warning on failing to move a window</p>
<p>This isn’t <em>necessarily</em> an error that we should complain loudly about.
If, for example, the BMC enforces the Read Only flag on a FFS partition,
opening a write window <em>should</em> fail, and we do indeed test this in
@@ -60,12 +61,12 @@ op-test.</p>
<p>Thus we deal with the error in a well known path: returning an error
code and then it’s eventually a userspace problem.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Respect daemon presence and flash control</p></li>
+<li><p class="first">libflash/ipmi-hiomap: Respect daemon presence and flash control</p>
+</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -85,15 +86,17 @@ code and then it’s eventually a userspace problem.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -110,15 +113,14 @@ code and then it’s eventually a userspace problem.</p>
<li class="right" >
<a href="skiboot-6.0.11.html" title="skiboot-6.0.11"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.12</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.13.html b/doc/release-notes/skiboot-6.0.13.html
index 17b7967..1b0cf45 100644
--- a/doc/release-notes/skiboot-6.0.13.html
+++ b/doc/release-notes/skiboot-6.0.13.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.13 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.13 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.12.html" title="skiboot-6.0.12"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.13</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -54,7 +55,7 @@ already. This release is made exclusively so OpenBMC can ship an updated pflash
from a tagged release.</p>
<p>The pflash change is:</p>
<ul>
-<li><p>pflash: Add –skip option for reading</p>
+<li><p class="first">pflash: Add –skip option for reading</p>
<p>Add a –skip=N option to pflash to skip N number of bytes when reading.
This would allow users to print the VERSION partition without the STB
header by specifying the –skip=4096 argument, and it’s a more generic
@@ -64,7 +65,6 @@ solution rather than making pflash depend on secure/trusted boot code.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -84,15 +84,17 @@ solution rather than making pflash depend on secure/trusted boot code.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -109,15 +111,14 @@ solution rather than making pflash depend on secure/trusted boot code.</p>
<li class="right" >
<a href="skiboot-6.0.12.html" title="skiboot-6.0.12"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.13</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.14.html b/doc/release-notes/skiboot-6.0.14.html
index d5ddc03..ebeb504 100644
--- a/doc/release-notes/skiboot-6.0.14.html
+++ b/doc/release-notes/skiboot-6.0.14.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.14 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.14 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.13.html" title="skiboot-6.0.13"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.14</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@
due to the bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul>
-<li><p>libflash: Don’t merge ECC-protected ranges</p>
+<li><p class="first">libflash: Don’t merge ECC-protected ranges</p>
<p>Libflash currently merges contiguous ECC-protected ranges, but doesn’t
check that the ECC bytes at the end of the first and start of the second
range actually match sanely. More importantly, if blocklevel_read() is
@@ -71,7 +72,7 @@ regions like below:</p>
</pre></div>
</div>
</li>
-<li><p>ipmi: Reduce ipmi_queue_msg_sync() polling loop time to 10ms.</p>
+<li><p class="first">ipmi: Reduce ipmi_queue_msg_sync() polling loop time to 10ms.</p>
<p>On a plain boot with hiomap, this reduces the time spent in OPAL
by ~170ms on p9dsu. This is due to hiomap (currently) using
synchronous IPMI messages.</p>
@@ -80,7 +81,7 @@ operations with hiomap, as we’ll spend typically 10-20ms in OPAL
rather than 100-200ms. It’s not an ideal solution to that, but
it’s a quick and obvious win for jitter.</p>
</li>
-<li><p>opal-prd: Fix opal-prd crash</p>
+<li><p class="first">opal-prd: Fix opal-prd crash</p>
<p>Crash log without this patch:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">opal</span><span class="o">-</span><span class="n">prd</span><span class="p">[</span><span class="mi">2864</span><span class="p">]:</span> <span class="n">unhandled</span> <span class="n">signal</span> <span class="mi">11</span> <span class="n">at</span> <span class="mi">0000000000029320</span> <span class="n">nip</span> <span class="mi">00000</span> <span class="mi">00102012830</span> <span class="n">lr</span> <span class="mi">0000000102016890</span> <span class="n">code</span> <span class="mi">1</span>
</pre></div>
@@ -90,7 +91,6 @@ it’s a quick and obvious win for jitter.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -110,15 +110,17 @@ it’s a quick and obvious win for jitter.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -135,15 +137,14 @@ it’s a quick and obvious win for jitter.</p>
<li class="right" >
<a href="skiboot-6.0.13.html" title="skiboot-6.0.13"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.14</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.15.html b/doc/release-notes/skiboot-6.0.15.html
index 5f2554e..e2dd8e6 100644
--- a/doc/release-notes/skiboot-6.0.15.html
+++ b/doc/release-notes/skiboot-6.0.15.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.15 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.15 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.14.html" title="skiboot-6.0.14"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.15</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@
due to the bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul>
-<li><p>i2c: Fix i2c request hang during opal init if timers are not checked</p>
+<li><p class="first">i2c: Fix i2c request hang during opal init if timers are not checked</p>
<p>If an i2c request cannot go through the first time, because the bus is
found in error and need a reset or it’s locked by the OCC for example,
the underlying i2c implementation is using timers to manage the
@@ -63,13 +64,13 @@ with an i2c request which will not move foward and skiboot hangs.</p>
<p>Fix it by explicitly checking the timers if we are waiting for an i2c
request to complete and it seems to be taking a while.</p>
</li>
-<li><p>opal-prd: hservice: Enable hservice-&gt;wakeup() in BMC</p>
+<li><p class="first">opal-prd: hservice: Enable hservice-&gt;wakeup() in BMC</p>
<p>This patch enables HBRT to use HYP special wakeup register in openBMC
which until now was only used in FSP based machines.</p>
<p>This patch also adds a capability check for opal-prd so that HBRT can
decide if the host special wakeup register can be used.</p>
</li>
-<li><p>npu2: Advertise correct TCE page size</p>
+<li><p class="first">npu2: Advertise correct TCE page size</p>
<p>The P9 NPU workbook says that only 4K/64K/16M/256M page size are supported
and in fact npu2_map_pe_dma_window() supports just these but in absence of
the “ibm,supported-tce-sizes” property Linux assumes the default P9 PHB4
@@ -82,7 +83,6 @@ fall back to 4K/64K TCEs.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -102,15 +102,17 @@ fall back to 4K/64K TCEs.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -127,15 +129,14 @@ fall back to 4K/64K TCEs.</p>
<li class="right" >
<a href="skiboot-6.0.14.html" title="skiboot-6.0.14"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.15</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.16.html b/doc/release-notes/skiboot-6.0.16.html
index e6b5cba..77f11b1 100644
--- a/doc/release-notes/skiboot-6.0.16.html
+++ b/doc/release-notes/skiboot-6.0.16.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.16 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.16 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.15.html" title="skiboot-6.0.15"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.16</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,19 +53,19 @@
due to the bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul>
-<li><p>p9dsu: Fix p9dsu default variant</p>
+<li><p class="first">p9dsu: Fix p9dsu default variant</p>
<p>Add the default when no riser_id is returned from the ipmi query.</p>
<p>This addresses: <a class="reference external" href="https://github.com/open-power/boston-openpower/issues/1369">https://github.com/open-power/boston-openpower/issues/1369</a></p>
<p>Allow a little more time for BMC reply and cleanup some label strings.</p>
</li>
-<li><p>p9dsu: Fix p9dsu slot tables</p>
+<li><p class="first">p9dsu: Fix p9dsu slot tables</p>
<p>Set the attributes on the slot tables to account for
builtin or pluggable etypes, this will allow pci
enumeration to calculate subordinate buses.</p>
<p>Update some slot label strings.</p>
<p>Add WIO Slot5 which is standard on the ESS config.</p>
</li>
-<li><p>phb4: Generate checkstop on AIB ECC corr/uncorr for DD2.0 parts</p>
+<li><p class="first">phb4: Generate checkstop on AIB ECC corr/uncorr for DD2.0 parts</p>
<p>On DD2.0 parts, PCIe ECC protection is not warranted in the response
data path. Thus, for these parts, we need to flag any ECC errors
detected from the adjacent AIB RX Data path so the part can be
@@ -72,7 +73,7 @@ replaced.</p>
<p>This patch configures the FIRs so that we escalate these AIB ECC
errors to a checkstop so the parts can be replaced.</p>
</li>
-<li><p>core/lock: Stop drop_my_locks() from always causing abort</p>
+<li><p class="first">core/lock: Stop drop_my_locks() from always causing abort</p>
<p>Fix an erroneous failure in an error path that looked like this:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>LOCK ERROR: Releasing lock we don&#39;t hold depth @0x30493d20 (state: 0x0000000000000001)
[13836.000173140,0] Aborting!
@@ -88,7 +89,6 @@ CPU 0000 Backtrace:
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -108,15 +108,17 @@ CPU 0000 Backtrace:
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -133,15 +135,14 @@ CPU 0000 Backtrace:
<li class="right" >
<a href="skiboot-6.0.15.html" title="skiboot-6.0.15"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.16</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.17.html b/doc/release-notes/skiboot-6.0.17.html
index 3ffda45..5254f0d 100644
--- a/doc/release-notes/skiboot-6.0.17.html
+++ b/doc/release-notes/skiboot-6.0.17.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.17 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.17 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.16.html" title="skiboot-6.0.16"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.17</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,20 +53,22 @@
due to the bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul>
-<li><p>core/opal: Print PIR value in exit path, which is useful for debugging.</p></li>
-<li><p>core/ipmi: Improve error message</p></li>
-<li><p>hdata: Fix dtc warnings</p>
+<li><p class="first">core/opal: Print PIR value in exit path, which is useful for debugging.</p>
+</li>
+<li><p class="first">core/ipmi: Improve error message</p>
+</li>
+<li><p class="first">hdata: Fix dtc warnings</p>
<p>Fix dtc warnings related to mcbist node</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="o">@</span><span class="mi">623</span><span class="n">fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="o">@</span><span class="mi">1</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
-<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="o">@</span><span class="mi">623</span><span class="n">fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="o">@</span><span class="mi">2</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
-<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="o">@</span><span class="mi">603</span><span class="n">fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="o">@</span><span class="mi">1</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
-<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="o">@</span><span class="mi">603</span><span class="n">fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="o">@</span><span class="mi">2</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="nd">@623fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="nd">@1</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
+<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="nd">@623fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="nd">@2</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
+<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="nd">@603fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="nd">@1</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
+<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="nd">@603fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="nd">@2</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
</pre></div>
</div>
<p>Ideally we should add proper xscom range here… but we are not getting that
information in HDAT today. Lets fix warning until we get proper data in HDAT.</p>
</li>
-<li><p>hdata/test: workaround dtc bugs</p>
+<li><p class="first">hdata/test: workaround dtc bugs</p>
<p>In dtc v1.4.5 to at least v1.4.7 there have been a few bugs introduced
that change the layout of what’s produced in the dts. In order to be
immune from them, we should use the (provided) dtdiff utility, but we
@@ -75,7 +78,7 @@ conversion will.</p>
<p>This fixes a bunch of unit test failures on the version of dtc shipped
with recent Linux distros such as Fedora 29.</p>
</li>
-<li><p>firmware-versions: Add test case for parsing VERSION</p>
+<li><p class="first">firmware-versions: Add test case for parsing VERSION</p>
<p>Also make it possible to use with afl-lop/afl-fuzz just to help make
<em>sure</em> we’re all good.</p>
<p>Additionally, if we hit a entry in VERSION that is larger than our
@@ -84,14 +87,14 @@ stack. This is only a problem if VERSION isn’t trusted, which as of
4b8cc05a94513816d43fb8bd6178896b430af08f it is verified as part of
Secure Boot.</p>
</li>
-<li><p>core/cpu: HID update race</p>
+<li><p class="first">core/cpu: HID update race</p>
<p>If the per-core HID register is updated concurrently by multiple
threads, updates can get lost. This has been observed during fast
reboot where the HILE bit does not get cleared on all cores, which
can cause machine check exception interrupts to crash.</p>
<p>Fix this by only updating HID on thread0.</p>
</li>
-<li><p>cpufeatures: Always advertise POWER8NVL as DD2</p>
+<li><p class="first">cpufeatures: Always advertise POWER8NVL as DD2</p>
<p>Despite the major version of PVR being 1 (0x004c0100) for POWER8NVL,
these chips are functionally equalent to P8/P8E DD2 levels.</p>
<p>This advertises POWER8NVL as DD2. As the result, skiboot adds
@@ -104,7 +107,6 @@ of missing LPCR_PECEDH.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -124,15 +126,17 @@ of missing LPCR_PECEDH.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -149,15 +153,14 @@ of missing LPCR_PECEDH.</p>
<li class="right" >
<a href="skiboot-6.0.16.html" title="skiboot-6.0.16"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.17</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.18.html b/doc/release-notes/skiboot-6.0.18.html
index 173508b..9a998d8 100644
--- a/doc/release-notes/skiboot-6.0.18.html
+++ b/doc/release-notes/skiboot-6.0.18.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.18 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.18 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.17.html" title="skiboot-6.0.17"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.18</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -55,7 +56,7 @@ for powercap, ipmi-hiomap and BMC communication driver.</p>
<div class="section" id="powercap">
<h2>powercap<a class="headerlink" href="#powercap" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>powercap: occ: Fix the powercapping range allowed for user</p>
+<li><p class="first">powercap: occ: Fix the powercapping range allowed for user</p>
<p>OCC provides two limits for minimum powercap. One being hard powercap
minimum which is guaranteed by OCC and the other one is a soft
powercap minimum which is lesser than hard-min and may or may not be
@@ -70,20 +71,21 @@ limit.</p>
<div class="section" id="ipmi-hiomap">
<h2>IPMI-HIOMAP<a class="headerlink" href="#ipmi-hiomap" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>ipmi-hiomap test case enhancements/fixes.</p></li>
-<li><p>libflash/ipmi-hiomap: Enforce message size for empty response</p>
+<li><p class="first">ipmi-hiomap test case enhancements/fixes.</p>
+</li>
+<li><p class="first">libflash/ipmi-hiomap: Enforce message size for empty response</p>
<p>The protocol defines the response to the associated messages as empty
except for the command ID and sequence fields. If the BMC is returning
extra data consider the message malformed.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Remove unused close handling</p>
+<li><p class="first">libflash/ipmi-hiomap: Remove unused close handling</p>
<p>Issuing a HIOMAP_C_CLOSE is not required by the protocol specification,
rather a close can be implicit in a subsequent
CREATE_{READ,WRITE}_WINDOW request. The implicit close provides an
opportunity to reduce LPC traffic and the implementation takes up that
optimisation, so remove the case from the IPMI callback handler.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Overhaul event handling</p>
+<li><p class="first">libflash/ipmi-hiomap: Overhaul event handling</p>
<p>Reworking the event handling was inspired by a bug report by Vasant
where the host would get wedged on multiple flash access attempts in the
face of a persistent error state on the BMC-side. The cause of this bug
@@ -94,18 +96,18 @@ HIOMAP_E_DAEMON_READY is clear in the prior calls.</p>
<p>Regardless, there were other correctness and efficiency problems with
the handling strategy:</p>
<ul class="simple">
-<li><p>Ack-able event state was not restored in the face of errors in the
-process of re-establishing protocol state</p></li>
-<li><p>It forced needless window restoration with respect to the context in
-which ipmi_hiomap_handle_events() was called.</p></li>
-<li><p>Tests for HIOMAP_E_DAEMON_READY and HIOMAP_E_FLASH_LOST were redundant
-with the overhauled error handling introduced in the previous patch</p></li>
+<li>Ack-able event state was not restored in the face of errors in the
+process of re-establishing protocol state</li>
+<li>It forced needless window restoration with respect to the context in
+which ipmi_hiomap_handle_events() was called.</li>
+<li>Tests for HIOMAP_E_DAEMON_READY and HIOMAP_E_FLASH_LOST were redundant
+with the overhauled error handling introduced in the previous patch</li>
</ul>
<p>Fix all of the above issues and add comments to explain the event
handling flow.</p>
<p>Tests for correctness follow later in the series.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Overhaul error handling</p>
+<li><p class="first">libflash/ipmi-hiomap: Overhaul error handling</p>
<p>The aim is to improve the robustness with respect to absence of the
BMC-side daemon. The current error handling roughly mirrors what was
done for the mailbox implementation, but there’s room for improvement.</p>
@@ -123,30 +125,31 @@ operation no attempt is made to recover it on the spot, instead the
error is returned up the stack and the caller can choose how it wishes
to respond.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Fix leak of msg in callback</p></li>
+<li><p class="first">libflash/ipmi-hiomap: Fix leak of msg in callback</p>
+</li>
</ul>
</div>
<div class="section" id="bmc-communication">
<h2>BMC communication<a class="headerlink" href="#bmc-communication" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>core/ipmi: Add ipmi sync messages to top of the list</p>
+<li><p class="first">core/ipmi: Add ipmi sync messages to top of the list</p>
<p>In ipmi_queue_msg_sync() path OPAL will wait until it gets response from
BMC. If we do not get response ontime we may endup in kernel hardlockups.
Hence lets add sync messages to top of the queue. This will reduces the
chance of hardlockups.</p>
</li>
-<li><p>hw/bt: Introduce separate list for synchronous messages</p>
+<li><p class="first">hw/bt: Introduce separate list for synchronous messages</p>
<p>BT send logic always sends top of bt message list to BMC. Once BMC reads the
message, it clears the interrupt and bt_idle() becomes true.</p>
<p>bt_add_ipmi_msg_head() adds message to top of the list. If bt message list
is not empty then:</p>
<blockquote>
<div><ul class="simple">
-<li><p>if bt_idle() is true then we will endup sending message to BMC before
+<li>if bt_idle() is true then we will endup sending message to BMC before
getting response from BMC for inflight message. Looks like on some
-BMC implementation this results in message timeout.</p></li>
-<li><p>else we endup starting message timer without actually sending message
-to BMC.. which is not correct.</p></li>
+BMC implementation this results in message timeout.</li>
+<li>else we endup starting message timer without actually sending message
+to BMC.. which is not correct.</li>
</ul>
</div></blockquote>
<p>This patch introduces separate list to track synchronous messages.
@@ -155,14 +158,14 @@ will always process this queue before processing normal queue.</p>
<p>Finally this patch introduces new variable (inflight_bt_msg) to track
inflight message. This will point to current inflight message.</p>
</li>
-<li><p>hw/bt: Fix message retry handler</p>
+<li><p class="first">hw/bt: Fix message retry handler</p>
<p>In some corner cases (like BMC reboot), bt_send_and_unlock() starts
message timer, but won’t send message to BMC as driver is not free to
send message. bt_expire_old_msg() function enables H2B interrupt without
actually sending message.</p>
<p>This patch fixes above issue.</p>
</li>
-<li><p>ipmi/power: Fix system reboot issue</p>
+<li><p class="first">ipmi/power: Fix system reboot issue</p>
<p>Kernel makes reboot/shudown OPAL call for reboot/shutdown. Once kernel
gets response from OPAL it runs opal_poll_events() until firmware
handles the request.</p>
@@ -175,7 +178,7 @@ reboot/shutdown the system using BMC interface.</p>
then it will resend the message. At some stage BMC will be ready to accept
message and handles IPMI message.</p>
</li>
-<li><p>hw/bt: Add backend interface to disable ipmi message retry option</p>
+<li><p class="first">hw/bt: Add backend interface to disable ipmi message retry option</p>
<p>During boot OPAL makes IPMI_GET_BT_CAPS call to BMC to get BT interface
capabilities which includes IPMI message max resend count, message
timeout, etc,. Most of the time OPAL gets response from BMC within
@@ -198,7 +201,7 @@ messages to asynhrounous one.</p>
<div class="section" id="phb3">
<h2>PHB3<a class="headerlink" href="#phb3" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hw/phb3/naples: Disable D-states</p>
+<li><p class="first">hw/phb3/naples: Disable D-states</p>
<p>Putting “Mellanox Technologies MT27700 Family [ConnectX-4] [15b3:1013]”
(more precisely, the second of 2 its PCI functions, no matter in what
order) into the D3 state causes EEH with the “PCT timeout” error.
@@ -212,7 +215,6 @@ installing a config space access filter (copied from PHB4).</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -243,15 +245,17 @@ installing a config space access filter (copied from PHB4).</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -268,15 +272,14 @@ installing a config space access filter (copied from PHB4).</p>
<li class="right" >
<a href="skiboot-6.0.17.html" title="skiboot-6.0.17"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.18</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.19.html b/doc/release-notes/skiboot-6.0.19.html
index d34dffd..bdb3912 100644
--- a/doc/release-notes/skiboot-6.0.19.html
+++ b/doc/release-notes/skiboot-6.0.19.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.19 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.19 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.18.html" title="skiboot-6.0.18"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.19</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@
due to the bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul>
-<li><p>p9dsu: Undo slot label name changes</p>
+<li><p class="first">p9dsu: Undo slot label name changes</p>
<p>During some code updates the slot labels were updated to reflect
the phb layout, however expectations were that the slot labels be
aligned with the riser card slots and not the system planar slots.</p>
@@ -70,14 +71,13 @@ at all. It also doesn’t help that <em>consistently</em> there is <em>never</em
any review on slot tables, and we’ve had things be wrong in the past.
Combine this with not upstream Hostboot patches.]</p>
</li>
-<li><p>p9dsu: Fix slot labels for p9dsu2u</p>
+<li><p class="first">p9dsu: Fix slot labels for p9dsu2u</p>
<p>Update the slot labels for the p9dsu2u tables.</p>
</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -97,15 +97,17 @@ Combine this with not upstream Hostboot patches.]</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -122,15 +124,14 @@ Combine this with not upstream Hostboot patches.]</p>
<li class="right" >
<a href="skiboot-6.0.18.html" title="skiboot-6.0.18"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.19</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.2.html b/doc/release-notes/skiboot-6.0.2.html
index 16ae908..f422976 100644
--- a/doc/release-notes/skiboot-6.0.2.html
+++ b/doc/release-notes/skiboot-6.0.2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.19.html" title="skiboot-6.0.19"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -51,7 +52,7 @@
<p>It is recommended that 6.0.2 be used instead of any previous 6.0.x version.</p>
<p>Over <a class="reference internal" href="skiboot-6.0.1.html#skiboot-6-0-1"><span class="std std-ref">skiboot-6.0.1</span></a>, we one bug fix:</p>
<ul>
-<li><p>cpu: Clear PCR SPR in opal_reinit_cpus()</p>
+<li><p class="first">cpu: Clear PCR SPR in opal_reinit_cpus()</p>
<p>Currently if Linux boots with a non-zero PCR, things can go bad where
some early userspace programs can take illegal instructions. This is
being fixed in Linux, but in the mean time, we should cleanup in
@@ -64,7 +65,6 @@ a kdump from a kernel running a p8 compat guest</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -84,15 +84,17 @@ a kdump from a kernel running a p8 compat guest</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -109,15 +111,14 @@ a kdump from a kernel running a p8 compat guest</p>
<li class="right" >
<a href="skiboot-6.0.19.html" title="skiboot-6.0.19"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.20.html b/doc/release-notes/skiboot-6.0.20.html
index 64d6e5d..743aebb 100644
--- a/doc/release-notes/skiboot-6.0.20.html
+++ b/doc/release-notes/skiboot-6.0.20.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.20 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.20 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.2.html" title="skiboot-6.0.2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.20</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@
due to the bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul>
-<li><p>core/flash: Retry requests as necessary in flash_load_resource()</p>
+<li><p class="first">core/flash: Retry requests as necessary in flash_load_resource()</p>
<p>We would like to successfully boot if we have a dependency on the BMC
for flash even if the BMC is not current ready to service flash
requests. On the assumption that it will become ready, retry for several
@@ -89,7 +90,7 @@ CPU 0040 Backtrace:
no delay for e.g. the host kernel, just for asynchronously loaded
resources during boot.</p>
</li>
-<li><p>pci/iov: Remove skiboot VF tracking</p>
+<li><p class="first">pci/iov: Remove skiboot VF tracking</p>
<p>This feature was added a few years ago in response to a request to make
the MaxPayloadSize (MPS) field of a Virtual Function match the MPS of the
Physical Function that hosts it.</p>
@@ -105,19 +106,19 @@ enabled and then disabled prior to rebooting. This patch fixes the bug by
removing the code entirely. This patch has no impact on SR-IOV support on
the host operating system.</p>
</li>
-<li><p>hw/xscom: Enable sw xstop by default on p9</p>
+<li><p class="first">hw/xscom: Enable sw xstop by default on p9</p>
<p>This was disabled at some point during bringup to make life easier for
the lab folks trying to debug NVLink issues. This hack really should
have never made it out into the wild though, so we now have the
following situation occuring in the field:</p>
<blockquote>
<div><ol class="arabic simple">
-<li><p>A bad happens</p></li>
-<li><p>The host kernel recieves an unrecoverable HMI and calls into OPAL to
-request a platform reboot.</p></li>
-<li><p>OPAL rejects the reboot attempt and returns to the kernel with
-OPAL_PARAMETER.</p></li>
-<li><p>Kernel panics and attempts to kexec into a kdump kernel.</p></li>
+<li>A bad happens</li>
+<li>The host kernel recieves an unrecoverable HMI and calls into OPAL to
+request a platform reboot.</li>
+<li>OPAL rejects the reboot attempt and returns to the kernel with
+OPAL_PARAMETER.</li>
+<li>Kernel panics and attempts to kexec into a kdump kernel.</li>
</ol>
</div></blockquote>
<p>A side effect of the HMI seems to be CPUs becoming stuck which results
@@ -129,7 +130,7 @@ state as a side effect of the HMI.</p>
default. If people still want to turn it off they can using the nvram
override.</p>
</li>
-<li><p>opal/hmi: Initialize the hmi event with old value of TFMR.</p>
+<li><p class="first">opal/hmi: Initialize the hmi event with old value of TFMR.</p>
<p>Do this before we fix TFAC errors. Otherwise the event at host console
shows no thread error reported in TFMR register.</p>
<p>Without this patch the console event show TFMR with no thread error:
@@ -148,7 +149,7 @@ shows no thread error reported in TFMR register.</p>
</pre></div>
</div>
</li>
-<li><p>libflash/ipmi-hiomap: Fix blocks count issue</p>
+<li><p class="first">libflash/ipmi-hiomap: Fix blocks count issue</p>
<p>We convert data size to block count and pass block count to BMC.
If data size is not block aligned then we endup sending block count
less than actual data. BMC will write partial data to flash memory.</p>
@@ -163,7 +164,7 @@ less than actual data. BMC will write partial data to flash memory.</p>
flush data to flash.</p>
<p>Lets fix this issue by adjusting block count before sending it to BMC.</p>
</li>
-<li><p>Fix hang in pnv_platform_error_reboot path due to TOD failure.</p>
+<li><p class="first">Fix hang in pnv_platform_error_reboot path due to TOD failure.</p>
<p>On TOD failure, with TB stuck, when linux heads down to
pnv_platform_error_reboot() path due to unrecoverable hmi event, the panic
cpu gets stuck in OPAL inside ipmi_queue_msg_sync(). At this time, rest
@@ -214,8 +215,9 @@ returns immediately without calling pollers and hence we end up looping
forever. This patch fixes this hang by calling opal_run_pollers() in TB
failed state as well.</p>
</li>
-<li><p>core/ipmi: Print correct netfn value</p></li>
-<li><p>core/lock: don’t set bust_locks on lock error</p>
+<li><p class="first">core/ipmi: Print correct netfn value</p>
+</li>
+<li><p class="first">core/lock: don’t set bust_locks on lock error</p>
<p>bust_locks is a big hammer that guarantees a mess if it’s set while
all other threads are not stopped.</p>
<p>I propose removing this in the lock error paths. In debugging the
@@ -234,7 +236,6 @@ busting locks.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -254,15 +255,17 @@ busting locks.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -279,15 +282,14 @@ busting locks.</p>
<li class="right" >
<a href="skiboot-6.0.2.html" title="skiboot-6.0.2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.20</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.21.html b/doc/release-notes/skiboot-6.0.21.html
index 9a75463..d41b2e7 100644
--- a/doc/release-notes/skiboot-6.0.21.html
+++ b/doc/release-notes/skiboot-6.0.21.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.21 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.21 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.20.html" title="skiboot-6.0.20"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.21</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,12 +53,11 @@
due to the bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul class="simple">
-<li><p>npu2/hw-procedures: Remove assertion from check_credits()</p></li>
+<li>npu2/hw-procedures: Remove assertion from check_credits()</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -77,15 +77,17 @@ due to the bug fixes it contains.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -102,15 +104,14 @@ due to the bug fixes it contains.</p>
<li class="right" >
<a href="skiboot-6.0.20.html" title="skiboot-6.0.20"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.21</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.22.html b/doc/release-notes/skiboot-6.0.22.html
index 157c04e..41bbaa9 100644
--- a/doc/release-notes/skiboot-6.0.22.html
+++ b/doc/release-notes/skiboot-6.0.22.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.22 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.22 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.21.html" title="skiboot-6.0.21"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.22</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,15 +53,14 @@
due to the bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul class="simple">
-<li><p>errorlog: Increase the severity of abnormal reboot events</p></li>
-<li><p>eSEL: Make sure PANIC logs are sent to BMC before calling assert</p></li>
-<li><p>core/ipmi: Fix use-after-free</p></li>
-<li><p>ipmi: ensure forward progress on ipmi_queue_msg_sync()</p></li>
+<li>errorlog: Increase the severity of abnormal reboot events</li>
+<li>eSEL: Make sure PANIC logs are sent to BMC before calling assert</li>
+<li>core/ipmi: Fix use-after-free</li>
+<li>ipmi: ensure forward progress on ipmi_queue_msg_sync()</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -80,15 +80,17 @@ due to the bug fixes it contains.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -105,15 +107,14 @@ due to the bug fixes it contains.</p>
<li class="right" >
<a href="skiboot-6.0.21.html" title="skiboot-6.0.21"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.22</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.23.html b/doc/release-notes/skiboot-6.0.23.html
index abbbd6f..b4be344 100644
--- a/doc/release-notes/skiboot-6.0.23.html
+++ b/doc/release-notes/skiboot-6.0.23.html
@@ -1,23 +1,25 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.23 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.23 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="skiboot-6.0.3" href="skiboot-6.0.3.html" />
+ <link rel="next" title="skiboot-6.0.24" href="skiboot-6.0.24.html" />
<link rel="prev" title="skiboot-6.0.22" href="skiboot-6.0.22.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
@@ -27,15 +29,14 @@
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
- <a href="skiboot-6.0.3.html" title="skiboot-6.0.3"
+ <a href="skiboot-6.0.24.html" title="skiboot-6.0.24"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="skiboot-6.0.22.html" title="skiboot-6.0.22"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.23</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,13 +53,12 @@
due to the bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul class="simple">
-<li><p>npu2: Clear fence on all bricks</p></li>
-<li><p>npu2: Clear fence state for a brick being reset</p></li>
+<li>npu2: Clear fence on all bricks</li>
+<li>npu2: Clear fence state for a brick being reset</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -68,8 +68,8 @@ due to the bug fixes it contains.</p>
<p class="topless"><a href="skiboot-6.0.22.html"
title="previous chapter">skiboot-6.0.22</a></p>
<h4>Next topic</h4>
- <p class="topless"><a href="skiboot-6.0.3.html"
- title="next chapter">skiboot-6.0.3</a></p>
+ <p class="topless"><a href="skiboot-6.0.24.html"
+ title="next chapter">skiboot-6.0.24</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
@@ -78,15 +78,17 @@ due to the bug fixes it contains.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -98,20 +100,19 @@ due to the bug fixes it contains.</p>
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
- <a href="skiboot-6.0.3.html" title="skiboot-6.0.3"
+ <a href="skiboot-6.0.24.html" title="skiboot-6.0.24"
>next</a> |</li>
<li class="right" >
<a href="skiboot-6.0.22.html" title="skiboot-6.0.22"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.23</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.24.html b/doc/release-notes/skiboot-6.0.24.html
new file mode 100644
index 0000000..d1930e7
--- /dev/null
+++ b/doc/release-notes/skiboot-6.0.24.html
@@ -0,0 +1,120 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.24 &#8212; skiboot e32e57e
+ documentation</title>
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
+
+ <link rel="index" title="Index" href="../genindex.html" />
+ <link rel="search" title="Search" href="../search.html" />
+ <link rel="next" title="skiboot-6.0.3" href="skiboot-6.0.3.html" />
+ <link rel="prev" title="skiboot-6.0.23" href="skiboot-6.0.23.html" />
+ </head><body>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ accesskey="I">index</a></li>
+ <li class="right" >
+ <a href="skiboot-6.0.3.html" title="skiboot-6.0.3"
+ accesskey="N">next</a> |</li>
+ <li class="right" >
+ <a href="skiboot-6.0.23.html" title="skiboot-6.0.23"
+ accesskey="P">previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
+ </ul>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body" role="main">
+
+ <div class="section" id="skiboot-6-0-24">
+<span id="id1"></span><h1>skiboot-6.0.24<a class="headerlink" href="#skiboot-6-0-24" title="Permalink to this headline">¶</a></h1>
+<p>skiboot 6.0.24 was released on Wednesday September 29th, 2021. It replaces
+<a class="reference internal" href="skiboot-6.0.23.html#skiboot-6-0-23"><span class="std std-ref">skiboot-6.0.23</span></a> as the current stable release in the 6.0.x series.</p>
+<p>It is recommended that 6.0.24 be used instead of any previous 6.0.x version
+due to the bug fixes it contains.</p>
+<p>Bug fixes included in this release are:</p>
+<ul class="simple">
+<li>phb4: Disable TCE cache line buffer</li>
+<li>SBE: Check timer state before scheduling timer</li>
+<li>SBE: Rate limit timer requests</li>
+<li>SBE: Account cancelled timer request</li>
+</ul>
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+ <div class="sphinxsidebarwrapper">
+ <h4>Previous topic</h4>
+ <p class="topless"><a href="skiboot-6.0.23.html"
+ title="previous chapter">skiboot-6.0.23</a></p>
+ <h4>Next topic</h4>
+ <p class="topless"><a href="skiboot-6.0.3.html"
+ title="next chapter">skiboot-6.0.3</a></p>
+ <div role="note" aria-label="source link">
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="../_sources/release-notes/skiboot-6.0.24.rst.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ </div>
+<div id="searchbox" style="display: none" role="search">
+ <h3>Quick search</h3>
+ <div class="searchformwrapper">
+ <form class="search" action="../search.html" method="get">
+ <input type="text" name="q" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ </div>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ >index</a></li>
+ <li class="right" >
+ <a href="skiboot-6.0.3.html" title="skiboot-6.0.3"
+ >next</a> |</li>
+ <li class="right" >
+ <a href="skiboot-6.0.23.html" title="skiboot-6.0.23"
+ >previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
+ </ul>
+ </div>
+ <div class="footer" role="contentinfo">
+ &#169; Copyright 2016-2017, IBM, others.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.3.html b/doc/release-notes/skiboot-6.0.3.html
index 70db06c..1762491 100644
--- a/doc/release-notes/skiboot-6.0.3.html
+++ b/doc/release-notes/skiboot-6.0.3.html
@@ -1,24 +1,26 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.3 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.3 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="skiboot-6.0.4" href="skiboot-6.0.4.html" />
- <link rel="prev" title="skiboot-6.0.23" href="skiboot-6.0.23.html" />
+ <link rel="prev" title="skiboot-6.0.24" href="skiboot-6.0.24.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
@@ -30,12 +32,11 @@
<a href="skiboot-6.0.4.html" title="skiboot-6.0.4"
accesskey="N">next</a> |</li>
<li class="right" >
- <a href="skiboot-6.0.23.html" title="skiboot-6.0.23"
+ <a href="skiboot-6.0.24.html" title="skiboot-6.0.24"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@
<p>Over <a class="reference internal" href="#skiboot-6-0-3"><span class="std std-ref">skiboot-6.0.3</span></a>, we have bug fixes related to i2c booting in
secure mode, and general functionality with a TPM present. These changes are:</p>
<ul>
-<li><p>p8-i2c: Remove force reset</p>
+<li><p class="first">p8-i2c: Remove force reset</p>
<p>Force reset was added as an attempt to work around some issues with TPM
devices locking up their I2C bus. In that particular case the problem
was that the device would hold the SCL line down permanently due to a
@@ -67,22 +68,22 @@ by software. Without this force reset is impossible to implement.</p>
<p>This patch removes the force reset functionality entirely since:</p>
<blockquote>
<div><ol class="loweralpha simple">
-<li><p>it doesn’t do what it’s supposed to, and</p></li>
-<li><p>it’s butt ugly code</p></li>
+<li>it doesn’t do what it’s supposed to, and</li>
+<li>it’s butt ugly code</li>
</ol>
</div></blockquote>
<p>Additionally, turn p8_i2c_reset_engine() into p8_i2c_reset_port().
There’s no need to reset every port on a master in response to an
error that occurred on a specific port.</p>
</li>
-<li><p>libstb/i2c-driver: Bump max timeout</p>
+<li><p class="first">libstb/i2c-driver: Bump max timeout</p>
<p>We have observed some TPMs clock streching the I2C bus for signifigant
amounts of time when processing commands. The same TPMs also have
errata that can result in permernantly locking up a bus in response to
an I2C transaction they don’t understand. Using an excessively long
timeout to prevent this in the field.</p>
</li>
-<li><p>Add TPM timeout workaround</p>
+<li><p class="first">Add TPM timeout workaround</p>
<p>Set the default timeout for any bus containing a TPM to one second. This
is needed to work around a bug in the firmware of certain TPMs that will
clock strech the I2C port the for up to a second. Additionally, when the
@@ -94,15 +95,14 @@ system since the TPM is powered by standby power.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h4>Previous topic</h4>
- <p class="topless"><a href="skiboot-6.0.23.html"
- title="previous chapter">skiboot-6.0.23</a></p>
+ <p class="topless"><a href="skiboot-6.0.24.html"
+ title="previous chapter">skiboot-6.0.24</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="skiboot-6.0.4.html"
title="next chapter">skiboot-6.0.4</a></p>
@@ -114,15 +114,17 @@ system since the TPM is powered by standby power.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -137,17 +139,16 @@ system since the TPM is powered by standby power.</p>
<a href="skiboot-6.0.4.html" title="skiboot-6.0.4"
>next</a> |</li>
<li class="right" >
- <a href="skiboot-6.0.23.html" title="skiboot-6.0.23"
+ <a href="skiboot-6.0.24.html" title="skiboot-6.0.24"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.4.html b/doc/release-notes/skiboot-6.0.4.html
index a707f8f..4927cbe 100644
--- a/doc/release-notes/skiboot-6.0.4.html
+++ b/doc/release-notes/skiboot-6.0.4.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.4 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.4 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.3.html" title="skiboot-6.0.3"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,7 +54,7 @@
(especially in HPC environments), and one is an opal-prd fix.</p>
<p>Changes are:</p>
<ul>
-<li><p>SLW: Remove stop1_lite and stop2_lite</p>
+<li><p class="first">SLW: Remove stop1_lite and stop2_lite</p>
<p>stop1_lite has been removed since it adds no additional benefit
over stop0_lite. stop2_lite has been removed since currently it adds
minimal benefit over stop2. However, the benefit is eclipsed by the time
@@ -66,7 +67,7 @@ we expose to the OS, the idea being to bring them back in a new
DT representation so that only an OS that knows what to do will
do things with them.</p>
</li>
-<li><p>opal-prd: Do not error out on first failure for soft/hard offline.</p>
+<li><p class="first">opal-prd: Do not error out on first failure for soft/hard offline.</p>
<p>The memory errors (CEs and UEs) that are detected as part of background
memory scrubbing are reported by PRD asynchronously to opal-prd along with
affected memory ranges. hservice_memory_error() converts these ranges into
@@ -76,9 +77,9 @@ infrastructure.</p>
all the pages to soft/hard offline-ing if any of the page offline action
fails. e.g hard offline can fail for:</p>
<ul class="simple">
-<li><p>Pages that are not part of buddy managed pool.</p></li>
-<li><p>Pages that are reserved by kernel using memblock_reserved()</p></li>
-<li><p>Pages that are in use by kernel.</p></li>
+<li>Pages that are not part of buddy managed pool.</li>
+<li>Pages that are reserved by kernel using memblock_reserved()</li>
+<li>Pages that are in use by kernel.</li>
</ul>
<p>But for the pages that are in use by user space application, the hard
offline marks the page as hwpoison, sends SIGBUS signal to kill the
@@ -92,7 +93,6 @@ application. This patch fixes this issue.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -112,15 +112,17 @@ application. This patch fixes this issue.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -137,15 +139,14 @@ application. This patch fixes this issue.</p>
<li class="right" >
<a href="skiboot-6.0.3.html" title="skiboot-6.0.3"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.5.html b/doc/release-notes/skiboot-6.0.5.html
index a6249c3..1412254 100644
--- a/doc/release-notes/skiboot-6.0.5.html
+++ b/doc/release-notes/skiboot-6.0.5.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.5 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.5 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.4.html" title="skiboot-6.0.4"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -54,11 +55,11 @@ for NVLINK2 and NX.</p>
<div class="section" id="pci-phb4">
<h2>PCI/PHB4<a class="headerlink" href="#pci-phb4" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>phb4: Delay training till after PERST is deasserted</p>
+<li><p class="first">phb4: Delay training till after PERST is deasserted</p>
<p>This helps some cards train on the second PERST (ie fast-reboot). The
reason is not clear why but it helps, so YOLO!</p>
</li>
-<li><p>pci: Fix PCI_DEVICE_ID()</p>
+<li><p class="first">pci: Fix PCI_DEVICE_ID()</p>
<p>The vendor ID is 16 bits not 8. This error leaves the top of the vendor
ID in the bottom bits of the device ID, which resulted in e.g. a failure
to run the PCI quirk for the AST VGA device.</p>
@@ -69,7 +70,7 @@ to run the PCI quirk for the AST VGA device.</p>
<div class="section" id="phb4-capi">
<h2>PHB4/CAPI<a class="headerlink" href="#phb4-capi" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>phb4/capp: Calculate STQ/DMA read engines based on link-width for PEC</p>
+<li><p class="first">phb4/capp: Calculate STQ/DMA read engines based on link-width for PEC</p>
<p>Presently in CAPI mode the number of STQ/DMA-read engines allocated on
PEC2 for CAPP is fixed to 6 and 0-30 respectively irrespective of the
PCI link width. These values are only suitable for x8 cards and
@@ -80,7 +81,7 @@ getting stalled due to insufficient STQs.</p>
in x16 mode and if yes then we allocate 4/0-47 STQ/DMA-read engines
for the CAPP traffic.</p>
</li>
-<li><p>capi: Select the correct IODA table entry for the mbt cache.</p>
+<li><p class="first">capi: Select the correct IODA table entry for the mbt cache.</p>
<p>With the current code, the capi mmio window is not correctly configured
in the IODA table entry. The first entry (generally the non-prefetchable
BAR) is overwrriten.
@@ -91,7 +92,7 @@ This patch sets the capi window bar at the right place.</p>
<div class="section" id="sensors">
<h2>Sensors<a class="headerlink" href="#sensors" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>occ: sensors: Fix the size of the phandle array â€sensors’ in DT</p>
+<li><p class="first">occ: sensors: Fix the size of the phandle array â€sensors’ in DT</p>
<p>Fixes: 99505c03f493 (present in v5.10-rc4)</p>
</li>
</ul>
@@ -99,11 +100,11 @@ This patch sets the capi window bar at the right place.</p>
<div class="section" id="npu2-nvlink2">
<h2>NPU2/NVLINK2<a class="headerlink" href="#npu2-nvlink2" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>npu2/hw-procedures: Fence bricks via NTL instead of MISC</p>
+<li><p class="first">npu2/hw-procedures: Fence bricks via NTL instead of MISC</p>
<p>There are a couple of places we can set/unset fence for a brick:</p>
<ol class="arabic simple">
-<li><p>MISC register: NPU2_MISC_FENCE_STATE</p></li>
-<li><p>NTL register for the brick: NPU2_NTL_MISC_CFG1(ndev)</p></li>
+<li>MISC register: NPU2_MISC_FENCE_STATE</li>
+<li>NTL register for the brick: NPU2_NTL_MISC_CFG1(ndev)</li>
</ol>
<p>Recent testing of ATS in combination with GPU reset has exposed a side
effect of using (1); if fence is set for all six bricks, it triggers a
@@ -114,7 +115,7 @@ Replace the call which sets fence with a write to (2). Remove the
corresponding unset call entirely. It’s unneeded because the procedures
already do a progression from full fence to half to idle using (2).</p>
</li>
-<li><p>opal/hmi: Display correct chip id while printing NPU FIRs.</p>
+<li><p class="first">opal/hmi: Display correct chip id while printing NPU FIRs.</p>
<p>HMIs for NPU xstops are broadcasted to all chips. All cores on all the
chips receive HMI. HMI handler correctly identifies and extracts the
NPU FIR details from affected chip, but while printing FIR data it
@@ -127,11 +128,11 @@ may not be correct. This patch fixes this issue.</p>
<div class="section" id="vpd">
<h2>VPD<a class="headerlink" href="#vpd" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>vpd: Add vendor property to processor node</p>
+<li><p class="first">vpd: Add vendor property to processor node</p>
<p>Processor FRU vpd doesn’t contain vendor detail. We have to parse
module VPD to get vendor detail.</p>
</li>
-<li><p>vpd: Sanitize VPD data</p>
+<li><p class="first">vpd: Sanitize VPD data</p>
<p>On OpenPower system, VPD keyword size tells us the maximum size of the data.
But they fill trailing end with space (0x20) instead of NULL. Also spec
doesn’t stop user to have space (0x20) within actual data.</p>
@@ -142,7 +143,7 @@ doesn’t stop user to have space (0x20) within actual data.</p>
<div class="section" id="nx-vas-for-power9">
<h2>NX/VAS for POWER9<a class="headerlink" href="#nx-vas-for-power9" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>NX: Add NX coprocessor init opal call</p>
+<li><p class="first">NX: Add NX coprocessor init opal call</p>
<p>The read offset (4:11) in Receive FIFO control register is incremented
by FIFO size whenever CRB read by NX. But the index in RxFIFO has to
match with the corresponding entry in FIFO maintained by VAS in kernel.
@@ -159,7 +160,6 @@ readOffset (4:11) and Queued (15:23) in RxFIFO control register.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -192,15 +192,17 @@ readOffset (4:11) and Queued (15:23) in RxFIFO control register.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -217,15 +219,14 @@ readOffset (4:11) and Queued (15:23) in RxFIFO control register.</p>
<li class="right" >
<a href="skiboot-6.0.4.html" title="skiboot-6.0.4"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.6.html b/doc/release-notes/skiboot-6.0.6.html
index 2c4cf33..4726734 100644
--- a/doc/release-notes/skiboot-6.0.6.html
+++ b/doc/release-notes/skiboot-6.0.6.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.6 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.6 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.5.html" title="skiboot-6.0.5"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.6</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -54,7 +55,7 @@ being used.</p>
<p>Over <a class="reference internal" href="skiboot-6.0.5.html#skiboot-6-0-5"><span class="std std-ref">skiboot-6.0.5</span></a> we have several important performance related bug
fixes and one stability bug fix:</p>
<ul>
-<li><p>phb4/CAPI: Reallocate PEC2 DMA-Read engines to improve GPU-Direct bandwidth</p>
+<li><p class="first">phb4/CAPI: Reallocate PEC2 DMA-Read engines to improve GPU-Direct bandwidth</p>
<p>We reallocate additional 16/8 DMA-Read engines allocated to stack0/1
on PEC2 respectively. This is needed to improve bandwidth available to
the Mellanox CX5 adapter when trying to read GPU memory (GPU-Direct).</p>
@@ -66,7 +67,7 @@ respectively on PEC2. This is done by populating the
XPEC_PCI_PRDSTKOVR and XPEC_NEST_READ_STACK_OVERRIDE as suggested by
the h/w team.</p>
</li>
-<li><p>phb4: Disable nodal scoped DMA accesses when PB pump mode is enabled</p>
+<li><p class="first">phb4: Disable nodal scoped DMA accesses when PB pump mode is enabled</p>
<p>By default when a PCIe device issues a read request via the PHB it is first
issued with nodal scope. When accessing GPU memory the NPU does not know at the
time of response if the requested memory page is off node or not. Therefore
@@ -80,7 +81,7 @@ treated differently. Therefore we avoid disabling nodal scope on large boxes
which have pump mode disabled to avoid all PHB requests being broadcast to
multiple chips.</p>
</li>
-<li><p>npu2/hw-procedures: Enable parity and credit overflow checks</p>
+<li><p class="first">npu2/hw-procedures: Enable parity and credit overflow checks</p>
<p>Enable these error checking features by setting the appropriate bits in
our one-off initialization of each “NTL Misc Config 2” register.</p>
<p>The exception is NDL RX parity checking, which should be disabled during
@@ -90,7 +91,6 @@ the link training procedures.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -110,15 +110,17 @@ the link training procedures.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -135,15 +137,14 @@ the link training procedures.</p>
<li class="right" >
<a href="skiboot-6.0.5.html" title="skiboot-6.0.5"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.6</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.7.html b/doc/release-notes/skiboot-6.0.7.html
index d841c10..5a2976f 100644
--- a/doc/release-notes/skiboot-6.0.7.html
+++ b/doc/release-notes/skiboot-6.0.7.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.7 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.7 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.6.html" title="skiboot-6.0.6"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.7</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,7 +54,7 @@ due to it containing a workaround for hardware errata in the XIVE interrupt
controller (present on POWER9 systems).</p>
<p>The bug fix is:</p>
<ul>
-<li><p>xive: Disable block tracker</p>
+<li><p class="first">xive: Disable block tracker</p>
<p>Due to some HW errata, the block tracking facility (performance optimisation
for large systems) should be disabled on Nimbus chips. Disable it unconditionally
for now.</p>
@@ -62,7 +63,6 @@ for now.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -82,15 +82,17 @@ for now.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -107,15 +109,14 @@ for now.</p>
<li class="right" >
<a href="skiboot-6.0.6.html" title="skiboot-6.0.6"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.7</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.8.html b/doc/release-notes/skiboot-6.0.8.html
index bccd743..0ab5f9c 100644
--- a/doc/release-notes/skiboot-6.0.8.html
+++ b/doc/release-notes/skiboot-6.0.8.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.8 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.8 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.7.html" title="skiboot-6.0.7"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.8</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@
due to the bug fixes it contains.</p>
<p>The bug fixes are:</p>
<ul>
-<li><p>i2c: Ensure ordering between i2c_request_send() and completion</p>
+<li><p class="first">i2c: Ensure ordering between i2c_request_send() and completion</p>
<p>i2c_request_send loops waiting for a flag “uc.done” set by
the completion routine, and then look for a result code
also set by that same completion.</p>
@@ -61,13 +62,13 @@ processor, so we need to order the stores to uc and the reads
from uc so that uc.done is stored last and tested first using
memory barriers.</p>
</li>
-<li><p>i2c: Fix multiple-enqueue of the same request on NACK</p>
+<li><p class="first">i2c: Fix multiple-enqueue of the same request on NACK</p>
<p>i2c_request_send() will retry the request if the error is a NAK,
however it forgets to clear the “ud.done” flag. It will thus
loop again and try to re-enqueue the same request causing internal
request list corruption.</p>
</li>
-<li><p>phb4: Disable 32-bit MSI in capi mode</p>
+<li><p class="first">phb4: Disable 32-bit MSI in capi mode</p>
<p>If a capi device does a DMA write targeting an address lower than 4GB,
it does so through a 32-bit operation, per the PCI spec. In capi mode,
the first TVE entry is configured in bypass mode, so the address is
@@ -79,7 +80,7 @@ interpret the DMA write as a MSI, which very likely results in an EEH
<p>We can fix it by disabling 32-bit MSI when switching the PHB to capi
mode. Capi devices are 64-bit.</p>
</li>
-<li><p>capp: Fix the capp recovery timeout comparison</p>
+<li><p class="first">capp: Fix the capp recovery timeout comparison</p>
<p>The current capp recovery timeout control loop in
do_capp_recovery_scoms() uses a wrong comparison for return value of
tb_compare(). This may cause do_capp_recovery_scoms() to report an
@@ -87,7 +88,7 @@ timeout earlier than the 168ms stipulated time.</p>
<p>The patch fixes this by updating the loop timeout control branch in
do_capp_recovery_scoms() to use the correct enum tb_cmpval.</p>
</li>
-<li><p>phb4/capp: Update DMA read engines set in APC_FSM_READ_MASK based on link-width</p>
+<li><p class="first">phb4/capp: Update DMA read engines set in APC_FSM_READ_MASK based on link-width</p>
<p>Commit 47c09cdfe7a3(“phb4/capp: Calculate STQ/DMA read engines based
on link-width for PEC”) update the CAPP init sequence by calculating
the needed STQ/DMA-read engines based on link width and populating it
@@ -97,12 +98,12 @@ with the value set in CAPP APC FSM Read Machine Mask Register.</p>
width of the stack on PEC2 and populate the same values as previously
populated in PEC CAPP_CNTL register.</p>
</li>
-<li><p>core/cpu: Call memset with proper cpu_thread offset</p></li>
+<li><p class="first">core/cpu: Call memset with proper cpu_thread offset</p>
+</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -122,15 +123,17 @@ populated in PEC CAPP_CNTL register.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -147,15 +150,14 @@ populated in PEC CAPP_CNTL register.</p>
<li class="right" >
<a href="skiboot-6.0.7.html" title="skiboot-6.0.7"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.8</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.9.html b/doc/release-notes/skiboot-6.0.9.html
index 275fee6..d6392cc 100644
--- a/doc/release-notes/skiboot-6.0.9.html
+++ b/doc/release-notes/skiboot-6.0.9.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0.9 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0.9 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.8.html" title="skiboot-6.0.8"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.9</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@
due to the bug fixes it contains.</p>
<p>The bug fixes are:</p>
<ul>
-<li><p>opal/hmi: Ignore debug trigger inject core FIR.</p>
+<li><p class="first">opal/hmi: Ignore debug trigger inject core FIR.</p>
<p>Core FIR[60] is a side effect of the work around for the CI Vector Load
issue in DD2.1. Usually this gets delivered as HMI with HMER[17] where
Linux already ignores it. But it looks like in some cases we may happen
@@ -60,7 +61,7 @@ to see CORE_FIR[60] while we are already in Malfunction Alert HMI
(HMER[0]) due to other reasons e.g. CAPI recovery or NPU xstop. If that
happens then just ignore it instead of crashing kernel as not recoverable.</p>
</li>
-<li><p>opal/hmi: Handle early HMIs on thread0 when secondaries are still in OPAL.</p>
+<li><p class="first">opal/hmi: Handle early HMIs on thread0 when secondaries are still in OPAL.</p>
<p>When primary thread receives a CORE level HMI for timer facility errors
while secondaries are still in OPAL, thread 0 ends up in rendez-vous
waiting for secondaries to get into hmi handling. This is because OPAL
@@ -108,38 +109,39 @@ this very eary stage we already doomed.</p>
</pre></div>
</div>
</li>
-<li><p>hw/bt.c: quieten all the noisy BT/IPMI messages</p></li>
-<li><p>npu2: Use correct kill type for TCE invalidation</p>
+<li><p class="first">hw/bt.c: quieten all the noisy BT/IPMI messages</p>
+</li>
+<li><p class="first">npu2: Use correct kill type for TCE invalidation</p>
<p>kill_type is enum of OPAL_PCI_TCE_KILL_PAGES, OPAL_PCI_TCE_KILL_PE,
OPAL_PCI_TCE_KILL_ALL and phb4_tce_kill() gets it right but
npu2_tce_kill() uses OPAL_PCI_TCE_KILL which is an OPAL API token.</p>
</li>
-<li><p>hw/npu2-opencapi: Fix setting of supported OpenCAPI templates</p>
+<li><p class="first">hw/npu2-opencapi: Fix setting of supported OpenCAPI templates</p>
<p>In opal_npu_tl_set(), we made a typo that means the OPAL_NPU_TL_SET call
may not clear the enable bits for templates that were previously enabled
but are now disabled.</p>
<p>Fix the typo so we clear NPU2_OTL_CONFIG1_TX_TEMP2_EN as well as
TEMP{1,3}_EN.</p>
</li>
-<li><p>phb4: Workaround PHB errata with CFG write UR/CA errors</p>
+<li><p class="first">phb4: Workaround PHB errata with CFG write UR/CA errors</p>
<p>If the PHB encounters a UR or CA status on a CFG write, it will
incorrectly freeze the wrong PE. Instead of using the PE# specified
in the CONFIG_ADDRESS register, it will use the PE# of whatever
MMIO occurred last.</p>
<p>Work around this disabling freeze on such errors</p>
</li>
-<li><p>phb4: Handle allocation errors in phb4_eeh_dump_regs()</p>
+<li><p class="first">phb4: Handle allocation errors in phb4_eeh_dump_regs()</p>
<p>If the zalloc fails (and it can be a rather large allocation),
we will overwite memory at 0 instead of failing.</p>
</li>
-<li><p>phb4: Don’t try to access non-existent PEST entries</p>
+<li><p class="first">phb4: Don’t try to access non-existent PEST entries</p>
<p>In a POWER9 chip, some PHB4s have 256 PEs, some have 512.</p>
<p>Currently, the diagnostics code retrieves 512 unconditionally,
which is wrong and causes us to incorrectly report bogus values
for the “high” PEs on the small PHBs.</p>
<p>Use the actual number of implemented PEs instead</p>
</li>
-<li><p>phb4: Don’t probe a PHB if its garded</p>
+<li><p class="first">phb4: Don’t probe a PHB if its garded</p>
<p>Presently phb4_probe_stack() causes an exception while trying to probe
a PHB if its garded. This causes skiboot to go into a reboot loop with
following exception log:</p>
@@ -168,7 +170,6 @@ something wrong with the PHB.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -188,15 +189,17 @@ something wrong with the PHB.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -213,15 +216,14 @@ something wrong with the PHB.</p>
<li class="right" >
<a href="skiboot-6.0.8.html" title="skiboot-6.0.8"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0.9</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.0.html b/doc/release-notes/skiboot-6.0.html
index 75e7611..c54a0a0 100644
--- a/doc/release-notes/skiboot-6.0.html
+++ b/doc/release-notes/skiboot-6.0.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.0 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.0 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-5.9.9.html" title="skiboot-5.9.9"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -61,7 +62,7 @@ stable releases). We do <em>not</em> expect any further stable releases in the
<h2>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<p>Since 6.0-rc1:</p>
<ul>
-<li><p>Update default stop-state-disable mask to cut only stop11</p>
+<li><p class="first">Update default stop-state-disable mask to cut only stop11</p>
<p>Stability improvements in microcode for stop4/stop5 are
available in upstream hcode images. Stop4 and stop5 can
be safely enabled by default.</p>
@@ -75,12 +76,12 @@ are any issues with stop4/5.</p>
run a hcode image <em>different</em> than the default in op-build (set
<cite>BR2_HCODE_LATEST_VERSION=y</cite> in your config)</p>
</li>
-<li><p>ibm,firmware-versions: add hcode to device tree</p>
+<li><p class="first">ibm,firmware-versions: add hcode to device tree</p>
<p>op-build commit 736a08b996e292a449c4996edb264011dfe56a40
added hcode to the VERSION partition, let’s parse it out
and let the user know.</p>
</li>
-<li><p>ipmi: Add BMC firmware version to device tree</p>
+<li><p class="first">ipmi: Add BMC firmware version to device tree</p>
<p>BMC Get device ID command gives BMC firmware version details. Lets add this
to device tree. User space tools will use this information to display BMC
version details.</p>
@@ -88,7 +89,7 @@ version details.</p>
</ul>
<p>Since 5.11:</p>
<ul>
-<li><p>Disable stop states from OPAL</p>
+<li><p class="first">Disable stop states from OPAL</p>
<p>On ZZ, stop4,5,11 are enabled for PowerVM, even though doing
so may cause problems with OPAL due to bugs in hcode.</p>
<p>For other platforms, this isn’t so much of an issue as
@@ -104,48 +105,48 @@ from being problematic.</p>
</div>
<p>This nvram override will disable <em>all</em> stop states.</p>
</li>
-<li><p>interrupts: Create an “interrupts” property in the OPAL node</p>
+<li><p class="first">interrupts: Create an “interrupts” property in the OPAL node</p>
<p>Deprecate the old “opal-interrupts”, it’s still there, but the new
property follows the standard and allow us to specify whether an
interrupt is level or edge sensitive.</p>
<p>Similarly create “interrupt-names” whose content is identical to
“opal-interrupts-names”.</p>
</li>
-<li><p>SBE: Add timer support on POWER9</p>
+<li><p class="first">SBE: Add timer support on POWER9</p>
<p>SBE on P9 provides one shot programmable timer facility. We can use this
to implement OPAL timers and hence limit the reliance on the Linux
heartbeat (similar to HW timer facility provided by SLW on P8).</p>
</li>
-<li><p>Add SBE driver support</p>
+<li><p class="first">Add SBE driver support</p>
<p>SBE (Self Boot Engine) on P9 has two different jobs:
- Boot the chip up to the point the core is functional
- Provide various services like timer, scom, stash MPIPL, etc., at runtime</p>
<p>We will use SBE for various purposes like timer, MPIPL, etc.</p>
</li>
-<li><p>opal:hmi: Add missing processor recovery reason string.</p>
+<li><p class="first">opal:hmi: Add missing processor recovery reason string.</p>
<p>With this patch now we see reason string printed for CORE_WOF[43] bit.</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">477.352234986</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">U78D3</span><span class="mf">.001</span><span class="o">.</span><span class="n">WZS004A</span><span class="o">-</span><span class="n">P1</span><span class="o">-</span><span class="n">C48</span><span class="p">]:</span> <span class="n">P</span><span class="p">:</span><span class="mi">8</span> <span class="n">C</span><span class="p">:</span><span class="mi">22</span> <span class="n">T</span><span class="p">:</span><span class="mi">3</span><span class="p">:</span> <span class="n">Processor</span> <span class="n">recovery</span> <span class="n">occurred</span><span class="o">.</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">477.352234986</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="p">[</span><span class="n">Loc</span><span class="p">:</span> <span class="n">U78D3</span><span class="o">.</span><span class="mf">001.</span><span class="n">WZS004A</span><span class="o">-</span><span class="n">P1</span><span class="o">-</span><span class="n">C48</span><span class="p">]:</span> <span class="n">P</span><span class="p">:</span><span class="mi">8</span> <span class="n">C</span><span class="p">:</span><span class="mi">22</span> <span class="n">T</span><span class="p">:</span><span class="mi">3</span><span class="p">:</span> <span class="n">Processor</span> <span class="n">recovery</span> <span class="n">occurred</span><span class="o">.</span>
<span class="p">[</span> <span class="mf">477.352240742</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="n">Core</span> <span class="n">WOF</span> <span class="o">=</span> <span class="mh">0x0000000000100000</span> <span class="n">recovered</span> <span class="n">error</span><span class="p">:</span>
<span class="p">[</span> <span class="mf">477.352242181</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">HMI</span><span class="p">:</span> <span class="n">PC</span> <span class="o">-</span> <span class="n">Thread</span> <span class="n">hang</span> <span class="n">recovery</span>
</pre></div>
</div>
</li>
-<li><p>Add DIMM actual speed to device tree</p>
+<li><p class="first">Add DIMM actual speed to device tree</p>
<p>Recent HDAT provides DIMM actuall speed. Lets add this to device tree.</p>
</li>
-<li><p>Fix DIMM size property</p>
+<li><p class="first">Fix DIMM size property</p>
<p>Today we parse vpd blob to get DIMM size information. This is limited
to FSP based system. HDAT provides DIMM size value. Lets use that to
populate device tree. So that we can get size information on BMC based
system as well.</p>
</li>
-<li><p>PCI: Set slot power limit when supported</p>
+<li><p class="first">PCI: Set slot power limit when supported</p>
<p>The PCIe slot capability can be implemented in a root or switch
downstream port to set the maximum power a card is allowed to draw
from the system. This patch adds support for setting the power limit
when the platform has defined one.</p>
</li>
-<li><p>hdata/spira: parse vpd to add part-number and serial-number to xscom&#64; node</p>
+<li><p class="first">hdata/spira: parse vpd to add part-number and serial-number to xscom&#64; node</p>
<p>Expected by FWTS and associates our processor with the part/serial
number, which is obviously a good thing for one’s own sanity.</p>
</li>
@@ -153,35 +154,38 @@ number, which is obviously a good thing for one’s own sanity.</p>
<div class="section" id="improved-hmi-handling">
<h3>Improved HMI Handling<a class="headerlink" href="#improved-hmi-handling" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>opal/hmi: Add documentation for opal_handle_hmi2 call</p></li>
-<li><p>opal/hmi: Generate hmi event for recovered HDEC parity error.</p></li>
-<li><p>opal/hmi: check thread 0 tfmr to validate latched tfmr errors.</p>
+<li><p class="first">opal/hmi: Add documentation for opal_handle_hmi2 call</p>
+</li>
+<li><p class="first">opal/hmi: Generate hmi event for recovered HDEC parity error.</p>
+</li>
+<li><p class="first">opal/hmi: check thread 0 tfmr to validate latched tfmr errors.</p>
<p>Due to P9 errata, HDEC parity and TB residue errors are latched for
non-zero threads 1-3 even if they are cleared. But these are not
latched on thread 0. Hence, use xscom SCOMC/SCOMD to read thread 0 tfmr
value and ignore them on non-zero threads if they are not present on
thread 0.</p>
</li>
-<li><p>opal/hmi: Print additional debug information in rendezvous.</p></li>
-<li><p>opal/hmi: Fix handling of TFMR parity/corrupt error.</p>
+<li><p class="first">opal/hmi: Print additional debug information in rendezvous.</p>
+</li>
+<li><p class="first">opal/hmi: Fix handling of TFMR parity/corrupt error.</p>
<p>While testing TFMR parity/corrupt error it has been observed that HMIs are
delivered twice for this error</p>
<blockquote>
<div><ul class="simple">
-<li><p>First time HMI is delivered with HMER[4,5]=1 and TFMR[60]=1.</p></li>
-<li><p>Second time HMI is delivered with HMER[4,5]=1 and TFMR[60]=0 with valid TB.</p></li>
+<li>First time HMI is delivered with HMER[4,5]=1 and TFMR[60]=1.</li>
+<li>Second time HMI is delivered with HMER[4,5]=1 and TFMR[60]=0 with valid TB.</li>
</ul>
</div></blockquote>
<p>On second HMI we end up throwing “HMI: TB invalid without core error
reported” even though TB is in a valid state.</p>
</li>
-<li><p>opal/hmi: Stop flooding HMI event for TOD errors.</p>
+<li><p class="first">opal/hmi: Stop flooding HMI event for TOD errors.</p>
<p>Fix the issue where every thread on the chip sends HMI event to host for
TOD errors. TOD errors are reported to all the core/threads on the chip.
Any one thread can fix the error and send event. Rest of the threads don’t
need to send HMI event unnecessarily.</p>
</li>
-<li><p>opal/hmi: Fix soft lockups during TOD errors</p>
+<li><p class="first">opal/hmi: Fix soft lockups during TOD errors</p>
<p>There are some TOD errors which do not affect working of TOD and TB. They
stay in valid state. Hence we don’t need rendez vous for TOD errors that
does not affect TB working.</p>
@@ -199,7 +203,7 @@ as a core-global error and hence avoiding rendez-vous path completely.
Instead threads that see TFMR[51]=1 will now take different path that
just do the TOD error recovery.</p>
</li>
-<li><p>opal/hmi: Do not send HMI event if no errors are found.</p>
+<li><p class="first">opal/hmi: Do not send HMI event if no errors are found.</p>
<p>For TOD errors, all the cores in the chip get HMIs. Any one thread from any
core can fix the issue and TFMR will have error conditions cleared. Rest of
the threads need take any action if TOD errors are already cleared. Hence
@@ -208,7 +212,7 @@ recovery path. Initialize recover = -1, so that if no errors found that
thread need not send a HMI event to linux. This helps in stop flooding host
with hmi event by every thread even there are no errors found.</p>
</li>
-<li><p>opal/hmi: Initialize the hmi event with old value of HMER.</p>
+<li><p class="first">opal/hmi: Initialize the hmi event with old value of HMER.</p>
<p>Do this before we check for TFAC errors. Otherwise the event at host console
shows no error reported in HMER register.</p>
<p>Without this patch the console event show HMER with all zeros</p>
@@ -226,33 +230,33 @@ shows no error reported in HMER register.</p>
</pre></div>
</div>
</li>
-<li><p>opal/hmi: Rework HMI handling of TFAC errors</p>
+<li><p class="first">opal/hmi: Rework HMI handling of TFAC errors</p>
<p>This patch reworks the HMI handling for TFAC errors by introducing
4 rendez-vous points improve the thread synchronization while handling
timebase errors that requires all thread to clear dirty data from TB/HDEC
register before clearing the errors.</p>
</li>
-<li><p>opal/hmi: Don’t bother passing HMER to pre-recovery cleanup</p>
+<li><p class="first">opal/hmi: Don’t bother passing HMER to pre-recovery cleanup</p>
<p>The test for TFAC error is now redundant so we remove it and
remove the HMER argument.</p>
</li>
-<li><p>opal/hmi: Move timer related error handling to a separate function</p>
+<li><p class="first">opal/hmi: Move timer related error handling to a separate function</p>
<p>Currently no functional change. This is a first step to completely
rewriting how these things are handled.</p>
</li>
-<li><p>opal/hmi: Add a new opal_handle_hmi2 that returns direct info to Linux</p>
+<li><p class="first">opal/hmi: Add a new opal_handle_hmi2 that returns direct info to Linux</p>
<p>It returns a 64-bit flags mask currently set to provide info
about which timer facilities were lost, and whether an event
was generated.</p>
</li>
-<li><p>opal/hmi: Remove races in clearing HMER</p>
+<li><p class="first">opal/hmi: Remove races in clearing HMER</p>
<p>Writing to HMER acts as an “AND”. The current code writes back the
value we originally read with the bits we handled cleared. This is
racy, if a new bit gets set in HW after the original read, we’ll end
up clearing it without handling it.</p>
<p>Instead, use an all 1’s mask with only the bit handled cleared.</p>
</li>
-<li><p>opal/hmi: Don’t re-read HMER multiple times</p>
+<li><p class="first">opal/hmi: Don’t re-read HMER multiple times</p>
<p>We want to make sure all reporting and actions are based
upon the same snapshot of HMER in case bits get added
by HW while we are in OPAL.</p>
@@ -267,7 +271,7 @@ PNOR images as the existing tooling used by <cite>op-build</cite>. The plan is t
switch <cite>op-build</cite> to use this infrastructure in the not too distant
future.</p>
<ul>
-<li><p>libflash/blocklevel: Make read/write be ECC agnostic for callers</p>
+<li><p class="first">libflash/blocklevel: Make read/write be ECC agnostic for callers</p>
<p>The blocklevel abstraction allows for regions of the backing store to be
marked as ECC protected so that blocklevel can decode/encode the ECC
bytes into the buffer automatically without the caller having to be ECC
@@ -291,7 +295,7 @@ knows of the presence of ECC then it will deal with all cases.</p>
<p>This also commit removes code in the gard tool which compensated for
inadequacies no longer present in blocklevel.</p>
</li>
-<li><p>libflash/blocklevel: Return region start from ecc_protected()</p>
+<li><p class="first">libflash/blocklevel: Return region start from ecc_protected()</p>
<p>Currently all ecc_protected() does is say if a region is ECC protected
or not. Knowing a region is ECC protected is one thing but there isn’t
much that can be done afterwards if this is the only known fact. A lot
@@ -300,18 +304,20 @@ more can be done if the caller is told where the ECC region begins.</p>
read/and writes. This allows for more flexibility calling read and write
without knowing exactly how the backing store is organised.</p>
</li>
-<li><p>libflash/ecc: Add helpers to align a position within an ecc buffer</p>
+<li><p class="first">libflash/ecc: Add helpers to align a position within an ecc buffer</p>
<p>As part of ongoing work to make ECC invisible to higher levels up the
stack this function converts a â€position’ which should be ECC agnostic
to the equivalent position within an ECC region starting at a specified
location.</p>
</li>
-<li><p>libflash/ecc: Add functions to deal with unaligned ECC memcpy</p></li>
-<li><p>external/ffspart: Improve error output</p></li>
-<li><p>libffs: Fix bad checks for partition overlap</p>
+<li><p class="first">libflash/ecc: Add functions to deal with unaligned ECC memcpy</p>
+</li>
+<li><p class="first">external/ffspart: Improve error output</p>
+</li>
+<li><p class="first">libffs: Fix bad checks for partition overlap</p>
<p>Not all TOCs are written at zero</p>
</li>
-<li><p>libflash/libffs: Allow caller to specifiy header partition</p>
+<li><p class="first">libflash/libffs: Allow caller to specifiy header partition</p>
<p>An FFS TOC is comprised of two parts. A small header which has a magic
and very minimmal information about the TOC which will be common to all
partitions, things like number of patritions, block sizes and the like.
@@ -329,7 +335,7 @@ for the â€part’ partition.</p>
partition. The caller can not and libffs will provide a sensible
default.</p>
</li>
-<li><p>libflash/libffs: Refcount ffs entries</p>
+<li><p class="first">libflash/libffs: Refcount ffs entries</p>
<p>Currently consumers can add an new ffs entry to multiple headers, this
is fine but freeing any of the headers will cause the entry to be freed,
this causes double free problems.</p>
@@ -339,47 +345,51 @@ reference to the entry, which they may well reuse at some other point.</p>
references.</p>
<p>This patch also removes the pointless return value of ffs_hdr_free()</p>
</li>
-<li><p>libflash/libffs: Switch to storing header entries in an array</p>
+<li><p class="first">libflash/libffs: Switch to storing header entries in an array</p>
<p>Since the libffs no longer needs to sort the entries as they get added
it makes little sense to have the complexity of a linked list when an
array will suffice.</p>
</li>
-<li><p>libflash/libffs: Remove backup partition from TOC generation code</p>
+<li><p class="first">libflash/libffs: Remove backup partition from TOC generation code</p>
<p>It turns out this code was messy and not all that reliable. Doing it at
the library level adds complexity to the library and restrictions to the
caller.</p>
<p>A simpler approach can be achived with the just instantiating multiple
ffs_header structures pointing to different parts of the same file.</p>
</li>
-<li><p>libflash/libffs: Remove the â€sides’ from the FFS TOC generation code</p>
+<li><p class="first">libflash/libffs: Remove the â€sides’ from the FFS TOC generation code</p>
<p>It turns out this code was messy and not all that reliable. Doing it at
the library level adds complexity to the library and restrictions to the
caller.</p>
<p>A simpler approach can be achived with the just instantiating multiple
ffs_header structures pointing to different parts of the same file.</p>
</li>
-<li><p>libflash/libffs: Always add entries to the end of the TOC</p>
+<li><p class="first">libflash/libffs: Always add entries to the end of the TOC</p>
<p>It turns out that sorted order isn’t the best idea. This removes
flexibility from the caller. If the user wants their partitions in
sorted order, they should insert them in sorted order.</p>
</li>
-<li><p>external/ffspart: Remove side, order and backup options</p>
+<li><p class="first">external/ffspart: Remove side, order and backup options</p>
<p>These options are currently flakey in libflash/libffs so there isn’t
much point to being able to use them in ffspart.</p>
<p>Future reworks planned for libflash/libffs will render these options
redundant anyway.</p>
</li>
-<li><p>libflash/libffs: ffs_close() should use ffs_hdr_free()</p></li>
-<li><p>libflash/libffs: Add setter for a partitions actual size</p></li>
-<li><p>pflash: Use ffs_entry_user_to_string() to standardise flag strings</p></li>
-<li><p>libffs: Standardise ffs partition flags</p>
+<li><p class="first">libflash/libffs: ffs_close() should use ffs_hdr_free()</p>
+</li>
+<li><p class="first">libflash/libffs: Add setter for a partitions actual size</p>
+</li>
+<li><p class="first">pflash: Use ffs_entry_user_to_string() to standardise flag strings</p>
+</li>
+<li><p class="first">libffs: Standardise ffs partition flags</p>
<p>It seems we’ve developed a character respresentation for ffs partition
flags. Currently only pflash really prints them so it hasn’t been a
problem but now ffspart wants to read them in from user input.</p>
<p>It is important that what libffs reads and what pflash prints remain
consistent, we should move the code into libffs to avoid problems.</p>
</li>
-<li><p>external/ffspart: Allow # comments in input file</p></li>
+<li><p class="first">external/ffspart: Allow # comments in input file</p>
+</li>
</ul>
</div>
</div>
@@ -390,11 +400,11 @@ a number of updates, and the patches once carried by SuperMicro are now
upstream.</p>
<p>Since 6.0-rc1:</p>
<ul class="simple">
-<li><p>p9dsu: timeout for variant detection, default to 2uess</p></li>
+<li>p9dsu: timeout for variant detection, default to 2uess</li>
</ul>
<p>Since 5.11:</p>
<ul>
-<li><p>p9dsu: detect p9dsu variant even when hostboot doesn’t tell us</p>
+<li><p class="first">p9dsu: detect p9dsu variant even when hostboot doesn’t tell us</p>
<p>The SuperMicro BMC can tell us what riser type we have, which dictates
the PCI slot tables. Usually, in an environment that a customer would
experience, Hostboot will do the query with an SMC specific patch
@@ -406,21 +416,25 @@ ourselves and setting the slot table appropriately. We do this
syncronously in platform init so that we don’t start probing
PCI before we setup the slot table.</p>
</li>
-<li><p>p9dsu: add slot power limit.</p></li>
-<li><p>p9dsu: add pci slot table for Boston LC 1U/2U and Boston LA/ESS.</p></li>
-<li><p>p9dsu HACK: fix system-vpd eeprom</p></li>
-<li><p>p9dsu: change esel command from AMI to IBM 0x3a.</p></li>
+<li><p class="first">p9dsu: add slot power limit.</p>
+</li>
+<li><p class="first">p9dsu: add pci slot table for Boston LC 1U/2U and Boston LA/ESS.</p>
+</li>
+<li><p class="first">p9dsu HACK: fix system-vpd eeprom</p>
+</li>
+<li><p class="first">p9dsu: change esel command from AMI to IBM 0x3a.</p>
+</li>
</ul>
</div>
<div class="section" id="zz-platform-changes">
<h2>ZZ Platform Changes<a class="headerlink" href="#zz-platform-changes" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hdata/i2c: Fix up pci hotplug labels</p>
+<li><p class="first">hdata/i2c: Fix up pci hotplug labels</p>
<p>These labels are used on the devices used to do PCIe slot power control
for implementing PCIe hotplug. I’m not sure how they ended up as
“eeprom-pgood” and “eeprom-controller” since that doesn’t make any sense.</p>
</li>
-<li><p>hdata/i2c: Ignore multi-port I2C devices</p>
+<li><p class="first">hdata/i2c: Ignore multi-port I2C devices</p>
<p>Recent FSP firmware builds add support for multi-port I2C devices such
as the GPIO expanders used for the presence detect of OpenCAPI devices
and the PCIe hotplug controllers used to power cycle PCIe slots on ZZ.</p>
@@ -432,14 +446,14 @@ specific handler so that we generate the correct DT bindings. Currently
we don’t and there is no immediate need for this support so just ignore
the multi-port devices for now.</p>
</li>
-<li><p>hdata/i2c: Replace <cite>i2c_</cite> prefix with <cite>dev_</cite></p>
+<li><p class="first">hdata/i2c: Replace <cite>i2c_</cite> prefix with <cite>dev_</cite></p>
<p>The current naming scheme makes it easy to conflate “i2cm_port” and
“i2c_port.” The latter is used to describe multi-port I2C devices such
as GPIO expanders and multi-channel PCIe hotplug controllers. Rename
i2c_port to dev_port to make the two a bit more distinct.</p>
<p>Also rename i2c_addr to dev_addr for consistency.</p>
</li>
-<li><p>hdata/i2c: Ignore CFAM I2C master</p>
+<li><p class="first">hdata/i2c: Ignore CFAM I2C master</p>
<p>Recent FSP firmware builds put in information about the CFAM I2C master
in addition the to host I2C masters accessible via XSCOM. Odds are this
information should not be there since there’s no handshaking between the
@@ -449,7 +463,7 @@ we need to deal with it.</p>
master. Without this it will create a bogus i2cm&#64;&lt;addr&gt; which migh cause
issues.</p>
</li>
-<li><p>ZZ: hw/imc: Add support to load imc catalog lid file</p>
+<li><p class="first">ZZ: hw/imc: Add support to load imc catalog lid file</p>
<p>Add support to load the imc catalog from a lid file packaged
as part of the system firmware. Lid number allocated
is 0x80f00103.lid.</p>
@@ -460,7 +474,7 @@ is 0x80f00103.lid.</p>
<h2>Bugs Fixed<a class="headerlink" href="#bugs-fixed" title="Permalink to this headline">¶</a></h2>
<p>Since 6.0-rc2:</p>
<ul>
-<li><p>core/opal: Fix recursion check in opal_run_pollers()</p>
+<li><p class="first">core/opal: Fix recursion check in opal_run_pollers()</p>
<p>An earlier commit introduced a counter variable poller_recursion to
limit to the number number of error messages shown when opal_pollers
are run recursively. However the check for the counter value was
@@ -471,11 +485,11 @@ the conditional branch with some re-factoring so that opal_poller
recursion is not erroneously allowed after poll_recursion is detected
first 16 times.</p>
</li>
-<li><p>phb4: Print WOF registers on fence detect</p>
+<li><p class="first">phb4: Print WOF registers on fence detect</p>
<p>Without the WOF registers it’s hard to figure out what went wrong first,
so print those when we print the FIRs when a fence is detected.</p>
</li>
-<li><p>p9dsu: detect variant in init only if probe fails to found.</p>
+<li><p class="first">p9dsu: detect variant in init only if probe fails to found.</p>
<p>Currently the slot table init happens twice in both probe and init
functions due to the variant detection logic called with in-correct
condition check.</p>
@@ -483,7 +497,7 @@ condition check.</p>
</ul>
<p>Since 6.0-rc1:</p>
<ul>
-<li><p>core/direct-controls: improve p9_stop_thread error handling</p>
+<li><p class="first">core/direct-controls: improve p9_stop_thread error handling</p>
<p>p9_stop_thread should fail the operation if it finds the thread was
already quiescd. This implies something else is doing direct controls
on the thread (e.g., pdbg) or there is some exceptional condition we
@@ -499,7 +513,7 @@ to de-assert the core_stop control if it fails to quiesce the thread.
After timing out here, the thread may eventually quiesce and get
stuck, but that’s simpler to debug than undefied behaviour.</p>
</li>
-<li><p>core/direct-controls: fix p9_cont_thread for stopped/inactive threads</p>
+<li><p class="first">core/direct-controls: fix p9_cont_thread for stopped/inactive threads</p>
<p>Firstly, p9_cont_thread should check that the thread actually was
quiesced before it tries to resume it. Anything could happen if we
try this from an arbitrary thread state.</p>
@@ -507,7 +521,7 @@ try this from an arbitrary thread state.</p>
a stop idle state), we must not send a core_start direct control,
clear_maint must be used in these cases.</p>
</li>
-<li><p>hmi: Clear unknown debug trigger</p>
+<li><p class="first">hmi: Clear unknown debug trigger</p>
<p>On some systems, seeing hangs like this when Linux starts:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">170.027252763</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">OCC</span><span class="p">:</span> <span class="n">All</span> <span class="n">Chip</span> <span class="n">Rdy</span> <span class="n">after</span> <span class="mi">0</span> <span class="n">ms</span>
<span class="p">[</span> <span class="mf">170.062930145</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">INIT</span><span class="p">:</span> <span class="n">Starting</span> <span class="n">kernel</span> <span class="n">at</span> <span class="mh">0x20011000</span><span class="p">,</span> <span class="n">fdt</span> <span class="n">at</span> <span class="mh">0x30ae0530</span> <span class="mi">366247</span> <span class="nb">bytes</span><span class="p">)</span>
@@ -528,17 +542,17 @@ hmi_debug_trigger function in the kernel is set up.</p>
<p>This clears the HMI in Skiboot and reports to the kernel instead of
bringing down the machine.</p>
</li>
-<li><p>core/hmi: assign flags=0 in case nothing set by handle_hmi_exception</p>
+<li><p class="first">core/hmi: assign flags=0 in case nothing set by handle_hmi_exception</p>
<p>Theoretically we could have returned junk to the OS in this parameter.</p>
</li>
-<li><p>SLW: Fix mambo boot to use stop states</p>
+<li><p class="first">SLW: Fix mambo boot to use stop states</p>
<p>After commit 35c66b8ce5a2 (“SLW: Move MAMBO simulator checks to
slw_init”), mambo boot no longer calls add_cpu_idle_state_properties()
and as such we never enable stop states.</p>
<p>After adding the call back, we get more testing coverage as well
as faster mambo SMT boots.</p>
</li>
-<li><p>phb4: Hardware init updates</p>
+<li><p class="first">phb4: Hardware init updates</p>
<p>CFG Write Request Timeout was incorrectly set to informational and not
fatal for both non-CAPI and CAPI, so set it to fatal. This was a
mistake in the specification. Correcting this fixes a niche bug in
@@ -549,20 +563,24 @@ This fixes an extremely rare and unreproducible bug, though the current
timings don’t make sense since they’re higher than the NCU timeout (16)
which will checkstop the machine anyway.</p>
</li>
-<li><p>SLW: quieten â€Configuring self-restore’ for DARN,NCU_SPEC_BAR and HRMOR</p></li>
+<li><p class="first">SLW: quieten â€Configuring self-restore’ for DARN,NCU_SPEC_BAR and HRMOR</p>
+</li>
</ul>
<p>Since 5.11:</p>
<ul>
-<li><p>core: Fix iteration condition to skip garded cpu</p></li>
-<li><p>uart: fix uart_opal_flush to take console lock over uart_con_flush
+<li><p class="first">core: Fix iteration condition to skip garded cpu</p>
+</li>
+<li><p class="first">uart: fix uart_opal_flush to take console lock over uart_con_flush
This bug meant that OPAL_CONSOLE_FLUSH didn’t take the appropriate locks.
-Luckily, since this call is only currently used in the crash path.</p></li>
-<li><p>xive: fix missing unlock in error path</p></li>
-<li><p>OPAL_PCI_SET_POWER_STATE: fix locking in error paths</p>
+Luckily, since this call is only currently used in the crash path.</p>
+</li>
+<li><p class="first">xive: fix missing unlock in error path</p>
+</li>
+<li><p class="first">OPAL_PCI_SET_POWER_STATE: fix locking in error paths</p>
<p>Otherwise we could exit OPAL holding locks, potentially leading
to all sorts of problems later on.</p>
</li>
-<li><p>hw/slw: Don’t assert on a unknown chip</p>
+<li><p class="first">hw/slw: Don’t assert on a unknown chip</p>
<p>For some reason skiboot populates nodes in /cpus/ for the cores on
chips that are deconfigured. As a result Linux includes the threads
of those cores in it’s set of possible CPUs in the system and attempts
@@ -574,12 +592,12 @@ structure for that chip either. In turn, this results in an assertion
failure when calling opal_slw_set_reg() since it expects the chip
structure to exist. Fix this up and print an error instead.</p>
</li>
-<li><p>opal/hmi: Generate one event per core for processor recovery.</p>
+<li><p class="first">opal/hmi: Generate one event per core for processor recovery.</p>
<p>Processor recovery is per core error. All threads on that core receive
HMI. All threads don’t need to generate HMI event for same error.</p>
<p>Let thread 0 only generate the event.</p>
</li>
-<li><p>sensors: Dont add DTS sensors when OCC inband sensors are available</p>
+<li><p class="first">sensors: Dont add DTS sensors when OCC inband sensors are available</p>
<p>There are two sets of core temperature sensors today. One is DTS scom
based core temperature sensors and the second group is the sensors
provided by OCC. DTS is the highest temperature among the different
@@ -591,18 +609,18 @@ updated by OCC to main memory.</p>
compared to reading OCC sensors which is as good as reading memory.
So dont add DTS sensors when OCC sensors are available.</p>
</li>
-<li><p>core/fast-reboot: Increase timeout for dctl sreset to 1sec</p>
+<li><p class="first">core/fast-reboot: Increase timeout for dctl sreset to 1sec</p>
<p>Direct control xscom can take more time to complete. We seem to
wait too little on Boston failing fast-reboot for no good reason.</p>
<p>Increase timeout to 1 sec as a reasonable value for sreset to be delivered
and core to start executing instructions.</p>
</li>
-<li><p>occ: sensors-groups: Add DT properties to mark HWMON sensor groups</p>
+<li><p class="first">occ: sensors-groups: Add DT properties to mark HWMON sensor groups</p>
<p>Fix the sensor type to match HWMON sensor types. Add compatible flag
to indicate the environmental sensor groups so that operations on
these groups can be handled by HWMON linux interface.</p>
</li>
-<li><p>core: Correctly load initramfs in stb container</p>
+<li><p class="first">core: Correctly load initramfs in stb container</p>
<p>Skiboot does not calculate the actual size and start location of the
initramfs if it is wrapped by an STB container (for example if loading
an initramfs from the ROOTFS partition).</p>
@@ -612,8 +630,9 @@ load_initramfs() is called after load_kernel() move the call to
trustedboot_exit_boot_services() into load_and_boot_kernel() so it is
called after both of these.</p>
</li>
-<li><p>hdat/i2c.c: quieten “v2 found, parsing as v1”</p></li>
-<li><p>hw/imc: Check for pause_microcode_at_boot() return status</p>
+<li><p class="first">hdat/i2c.c: quieten “v2 found, parsing as v1”</p>
+</li>
+<li><p class="first">hw/imc: Check for pause_microcode_at_boot() return status</p>
<p>pause_microcode_at_boot() loops through all the chip’s ucode
control block and pause the ucode if it is in the running state.
But it does not fail if any of the chip’s ucode is not initialised.</p>
@@ -625,20 +644,20 @@ the function return.</p>
</ul>
<p>Slot location code fixes:</p>
<ul>
-<li><p>npu2: Use ibm, loc-code rather than ibm, slot-label</p>
+<li><p class="first">npu2: Use ibm, loc-code rather than ibm, slot-label</p>
<p>The ibm,slot-label property is to name the slot that appears under a
PCIe bridge. In the past we (ab)used the slot tables to attach names
to GPU devices and their corresponding NVLinks which resulted in npu2.c
using slot-label as a location code rather than as a way to name slots.</p>
<p>Fix this up since it’s confusing.</p>
</li>
-<li><p>hdata/slots: Apply slot label to the parent slot</p>
+<li><p class="first">hdata/slots: Apply slot label to the parent slot</p>
<p>Slot names only really make sense when applied to an actual slot rather
than a device. On witherspoon the GPU devices have a name associated with
the device rather than the slot for the GPUs. Add a hack that moves the
slot label to the parent slot rather than on the device itself.</p>
</li>
-<li><p>pci-dt-slot: Big ol’ cleanup</p>
+<li><p class="first">pci-dt-slot: Big ol’ cleanup</p>
<p>The underlying data that we get from HDAT can only really describe a
PCIe system. As such we can simplify the devicetree slot lookup code
by only caring about the important cases, namly, root ports and switch
@@ -652,7 +671,7 @@ EEHed devices under that port.</p>
<div class="section" id="opal-prd">
<h3>opal-prd<a class="headerlink" href="#opal-prd" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>opal-prd: Insert powernv_flash module</p>
+<li><p class="first">opal-prd: Insert powernv_flash module</p>
<p>Explictly load powernv_flash module on BMC based system so that we are sure
that flash device is created before starting opal-prd daemon.</p>
<p>Note that I have replaced pnor_available() check with is_fsp_system(). As we
@@ -664,7 +683,7 @@ detect flash device. Hence pnor_available() becomes redundant check.</p>
<div class="section" id="npu2-nvlink2">
<h3>NPU2/NVLINK2<a class="headerlink" href="#npu2-nvlink2" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>npu2/hw-procedures: fence bricks on GPU reset</p>
+<li><p class="first">npu2/hw-procedures: fence bricks on GPU reset</p>
<p>The NPU workbook defines a way of fencing a brick and
getting the brick out of fence state. We do have an implementation
of bringing the brick out of fenced/quiesced state. We do
@@ -677,16 +696,16 @@ that prior to and after reset, the operating system components
will flush the cache for the region of memory behind the GPU.</p>
<p>This patch does the following:</p>
<ol class="arabic simple">
-<li><p>Implements a npu2_dev_fence_brick() function to set/clear
-fence state</p></li>
-<li><p>Clear FIR bits prior to clearing the fence status</p></li>
-<li><p>Clear’s the fence status</p></li>
-<li><p>We take the powerbus out of CQ fence much later now,
+<li>Implements a npu2_dev_fence_brick() function to set/clear
+fence state</li>
+<li>Clear FIR bits prior to clearing the fence status</li>
+<li>Clear’s the fence status</li>
+<li>We take the powerbus out of CQ fence much later now,
in credits_check() which is the last hardware procedure
-called after link training.</p></li>
+called after link training.</li>
</ol>
</li>
-<li><p>hw/npu2.c: Remove static configuration of NPU2 register</p>
+<li><p class="first">hw/npu2.c: Remove static configuration of NPU2 register</p>
<p>The NPU_SM_CONFIG0 register currently needs to be configured in Skiboot to
select NVLink mode, however Hostboot should configure other bits in this
register.</p>
@@ -698,7 +717,7 @@ the specific system configuration. Therefore Skiboot should not alter it.</p>
not. Hostboot does not configure this bit so Skiboot should continue to
configure it.</p>
</li>
-<li><p>npu2: Improve log output of GPU-to-link mapping</p>
+<li><p class="first">npu2: Improve log output of GPU-to-link mapping</p>
<p>Debugging issues related to unconnected NVLinks can be a little less
irritating if we use the NPU2DEV{DBG,INF}() macros instead of prlog().</p>
<p>In short, change this:</p>
@@ -720,17 +739,17 @@ irritating if we use the NPU2DEV{DBG,INF}() macros instead of prlog().</p>
</pre></div>
</div>
</li>
-<li><p>npu2: Move NPU2_XTS_BDF_MAP_VALID assignment to context init</p>
+<li><p class="first">npu2: Move NPU2_XTS_BDF_MAP_VALID assignment to context init</p>
<p>A bad GPU or other condition may leave us with a subset of links that
never get initialized. If an ATSD is sent to one of those bricks, it
will never complete, leaving us waiting forever for a response:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">watchdog</span><span class="p">:</span> <span class="n">BUG</span><span class="p">:</span> <span class="n">soft</span> <span class="n">lockup</span> <span class="o">-</span> <span class="n">CPU</span><span class="c1">#23 stuck for 23s! [acos:2050]</span>
<span class="o">...</span>
<span class="n">Modules</span> <span class="n">linked</span> <span class="ow">in</span><span class="p">:</span> <span class="n">nvidia_uvm</span><span class="p">(</span><span class="n">O</span><span class="p">)</span> <span class="n">nvidia</span><span class="p">(</span><span class="n">O</span><span class="p">)</span>
-<span class="n">CPU</span><span class="p">:</span> <span class="mi">23</span> <span class="n">PID</span><span class="p">:</span> <span class="mi">2050</span> <span class="n">Comm</span><span class="p">:</span> <span class="n">acos</span> <span class="n">Tainted</span><span class="p">:</span> <span class="n">G</span> <span class="n">W</span> <span class="n">O</span> <span class="mf">4.14.0</span> <span class="c1">#2</span>
+<span class="n">CPU</span><span class="p">:</span> <span class="mi">23</span> <span class="n">PID</span><span class="p">:</span> <span class="mi">2050</span> <span class="n">Comm</span><span class="p">:</span> <span class="n">acos</span> <span class="n">Tainted</span><span class="p">:</span> <span class="n">G</span> <span class="n">W</span> <span class="n">O</span> <span class="mf">4.14</span><span class="o">.</span><span class="mi">0</span> <span class="c1">#2</span>
<span class="n">task</span><span class="p">:</span> <span class="n">c0000000285cfc00</span> <span class="n">task</span><span class="o">.</span><span class="n">stack</span><span class="p">:</span> <span class="n">c000001fea860000</span>
<span class="n">NIP</span><span class="p">:</span> <span class="n">c0000000000abdf0</span> <span class="n">LR</span><span class="p">:</span> <span class="n">c0000000000acc48</span> <span class="n">CTR</span><span class="p">:</span> <span class="n">c0000000000ace60</span>
-<span class="n">REGS</span><span class="p">:</span> <span class="n">c000001fea863550</span> <span class="n">TRAP</span><span class="p">:</span> <span class="mi">0901</span> <span class="n">Tainted</span><span class="p">:</span> <span class="n">G</span> <span class="n">W</span> <span class="n">O</span> <span class="p">(</span><span class="mf">4.14.0</span><span class="p">)</span>
+<span class="n">REGS</span><span class="p">:</span> <span class="n">c000001fea863550</span> <span class="n">TRAP</span><span class="p">:</span> <span class="mi">0901</span> <span class="n">Tainted</span><span class="p">:</span> <span class="n">G</span> <span class="n">W</span> <span class="n">O</span> <span class="p">(</span><span class="mf">4.14</span><span class="o">.</span><span class="mi">0</span><span class="p">)</span>
<span class="n">MSR</span><span class="p">:</span> <span class="mi">9000000000009033</span> <span class="o">&lt;</span><span class="n">SF</span><span class="p">,</span><span class="n">HV</span><span class="p">,</span><span class="n">EE</span><span class="p">,</span><span class="n">ME</span><span class="p">,</span><span class="n">IR</span><span class="p">,</span><span class="n">DR</span><span class="p">,</span><span class="n">RI</span><span class="p">,</span><span class="n">LE</span><span class="o">&gt;</span> <span class="n">CR</span><span class="p">:</span> <span class="mi">28004484</span> <span class="n">XER</span><span class="p">:</span> <span class="mi">20040000</span>
<span class="n">CFAR</span><span class="p">:</span> <span class="n">c0000000000abdf4</span> <span class="n">SOFTE</span><span class="p">:</span> <span class="mi">1</span>
<span class="n">GPR00</span><span class="p">:</span> <span class="n">c0000000000acc48</span> <span class="n">c000001fea8637d0</span> <span class="n">c0000000011f7c00</span> <span class="n">c000001fea863820</span>
@@ -738,7 +757,7 @@ will never complete, leaving us waiting forever for a response:</p>
<span class="n">GPR08</span><span class="p">:</span> <span class="mi">0000000000000001</span> <span class="mi">0000000000000080</span> <span class="n">c000201cc7cb7750</span> <span class="n">ffffffffffffffff</span>
<span class="n">GPR12</span><span class="p">:</span> <span class="mi">0000000000008000</span> <span class="n">c000000003167e80</span>
<span class="n">NIP</span> <span class="p">[</span><span class="n">c0000000000abdf0</span><span class="p">]</span> <span class="n">mmio_invalidate_wait</span><span class="o">+</span><span class="mh">0x90</span><span class="o">/</span><span class="mh">0xc0</span>
-<span class="n">LR</span> <span class="p">[</span><span class="n">c0000000000acc48</span><span class="p">]</span> <span class="n">mmio_invalidate</span><span class="o">.</span><span class="n">isra</span><span class="mf">.11</span><span class="o">+</span><span class="mh">0x158</span><span class="o">/</span><span class="mh">0x370</span>
+<span class="n">LR</span> <span class="p">[</span><span class="n">c0000000000acc48</span><span class="p">]</span> <span class="n">mmio_invalidate</span><span class="o">.</span><span class="n">isra</span><span class="o">.</span><span class="mi">11</span><span class="o">+</span><span class="mh">0x158</span><span class="o">/</span><span class="mh">0x370</span>
</pre></div>
</div>
<p>ATSDs are only sent to bricks which have a valid entry in the XTS_BDF
@@ -750,7 +769,7 @@ we make it all the way to creating a context for the BDF.</p>
<div class="section" id="secure-and-trusted-boot">
<h3>Secure and Trusted Boot<a class="headerlink" href="#secure-and-trusted-boot" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>hdata/tpmrel: detect tpm not present by looking up the stinfo-&gt;status</p>
+<li><p class="first">hdata/tpmrel: detect tpm not present by looking up the stinfo-&gt;status</p>
<p>Skiboot detects if tpm is present by checking if a secureboot_tpm_info
entry exists. However, if a tpm is not present, hostboot also creates a
secureboot_tpm_info entry. In this case, hostboot creates an empty
@@ -764,21 +783,22 @@ issue, reproduced when skiboot is running on a system that has no tpm.</p>
<div class="section" id="pci">
<h3>PCI<a class="headerlink" href="#pci" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>phb4: Restore bus numbers after CRS</p>
+<li><p class="first">phb4: Restore bus numbers after CRS</p>
<p>Currently we restore PCIe bus numbers right after the link is
up. Unfortunately as this point we haven’t done CRS so config space
may not be accessible.</p>
<p>This moves the bus number restore till after CRS has happened.</p>
</li>
-<li><p>romulus: Add a barebones slot table</p></li>
-<li><p>phb4: Quieten and improve “Timeout waiting for electrical link”</p>
+<li><p class="first">romulus: Add a barebones slot table</p>
+</li>
+<li><p class="first">phb4: Quieten and improve “Timeout waiting for electrical link”</p>
<p>This happens normally if a slot doesn’t have a working HW presence
detect and relies instead of inband presence detect.</p>
<p>The message we display is scary and not very useful unless ou
are debugging, so quiten it up and change it to something more
meaningful.</p>
</li>
-<li><p>pcie-slot: Don’t fail powering on an already on switch</p>
+<li><p class="first">pcie-slot: Don’t fail powering on an already on switch</p>
<p>If the power state is already the required value, return
OPAL_SUCCESS rather than OPAL_PARAMETER to avoid spurrious
errors during boot.</p>
@@ -788,7 +808,7 @@ errors during boot.</p>
<div class="section" id="capi-opencapi">
<h3>CAPI/OpenCAPI<a class="headerlink" href="#capi-opencapi" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>capi: Keep the current mmio windows in the mbt cache table.</p>
+<li><p class="first">capi: Keep the current mmio windows in the mbt cache table.</p>
<p>When the phb is used as a CAPI interface, the current mmio windows list
is cleaned before adding the capi and the prefetchable memory (M64)
windows, which implies that the non-prefetchable BAR is no more
@@ -796,7 +816,7 @@ configured.
This patch allows to set only the mbt bar to pass capi mmio window and
to keep, as defined, the other mmio values (M32 and M64).</p>
</li>
-<li><p>npu2-opencapi: Fix â€link internal error’ FIR, take 2</p>
+<li><p class="first">npu2-opencapi: Fix â€link internal error’ FIR, take 2</p>
<p>When setting up an opencapi link, we set the transport muxes first,
then set the PHY training config register, which includes disabling
nvlink mode for the bricks. That’s the order of the init sequence, as
@@ -805,10 +825,12 @@ found in the NPU workbook.</p>
OLL FIR Register for the 2 links when we configure the transport
muxes. Presumably because nvlink is not disabled yet and we are
configuring the transport muxes for opencapi.</p>
-<dl class="simple">
-<dt>bit 60:</dt><dd><p>link0 internal error</p>
+<dl class="docutils">
+<dt>bit 60:</dt>
+<dd><p class="first last">link0 internal error</p>
</dd>
-<dt>bit 61:</dt><dd><p>link1 internal error</p>
+<dt>bit 61:</dt>
+<dd><p class="first last">link1 internal error</p>
</dd>
</dl>
<p>Overall the current setup ends up being correct and everything works,
@@ -817,7 +839,7 @@ but we raise 2 FIR bits.</p>
the transport muxes. Incidentally, this is what the scripts from the
opencapi enablement team were doing all along.</p>
</li>
-<li><p>npu2-opencapi: Fix â€link internal error’ FIR, take 1</p>
+<li><p class="first">npu2-opencapi: Fix â€link internal error’ FIR, take 1</p>
<p>When we setup a link, we always enable ODL0 and ODL1 at the same time
in the PHY training config register, even though we are setting up
only one OTL/ODL, so it raises a “link internal error” FIR bit in the
@@ -826,10 +848,10 @@ as we’ll eventually setup the second link, but there’s no reason to
raise that FIR bit.</p>
<p>The fix is simply to only enable the ODL we are using for the link.</p>
</li>
-<li><p>phb4: Do not set the PBCQ Tunnel BAR register when enabling capi mode.</p>
+<li><p class="first">phb4: Do not set the PBCQ Tunnel BAR register when enabling capi mode.</p>
<p>The cxl driver will set the capi value, like other drivers already do.</p>
</li>
-<li><p>phb4: set TVT1 for tunneled operations in capi mode</p>
+<li><p class="first">phb4: set TVT1 for tunneled operations in capi mode</p>
<p>The ASN indication is used for tunneled operations (as_notify and
atomics). Tunneled operation messages can be sent in PCI mode as
well as CAPI mode.</p>
@@ -847,21 +869,23 @@ to prevent as_notify messages from being dropped.</p>
<h2>Debugging/Testing improvements<a class="headerlink" href="#debugging-testing-improvements" title="Permalink to this headline">¶</a></h2>
<p>Since 6.0-rc1:</p>
<ul>
-<li><p>mambo: Enable XER CA32 and OV32 bits on P9</p>
+<li><p class="first">mambo: Enable XER CA32 and OV32 bits on P9</p>
<p>POWER9 adds 32 bit carry and overflow bits to the XER, but we need to
set the relevant CTRL1 bit to enable them.</p>
</li>
-<li><p>Makefile: Fix building natively on ppc64le</p>
+<li><p class="first">Makefile: Fix building natively on ppc64le</p>
<p>When on ppc64le and CROSS is not set by the environment, make assumes
ppc64 and sets a default CROSS. Check for ppc64le as well, so that
â€make’ works out of the box on ppc64le.</p>
</li>
-<li><p>Experimental support for building with Clang</p></li>
-<li><p>Improvements to testing and Travis CI</p></li>
+<li><p class="first">Experimental support for building with Clang</p>
+</li>
+<li><p class="first">Improvements to testing and Travis CI</p>
+</li>
</ul>
<p>Since 5.11:</p>
<ul>
-<li><p>core/stack: backtrace unwind basic OPAL call details</p>
+<li><p class="first">core/stack: backtrace unwind basic OPAL call details</p>
<p>Put OPAL callers’ r1 into the stack back chain, and then use that to
unwind back to the OPAL entry frame (as opposed to boot entry, which
has a 0 back chain).</p>
@@ -887,7 +911,7 @@ a debugging opal call. This will allow Linux’s BUG() or xmon to
also print the Linux back trace in case of a NMI or MCE or watchdog
lockup that hits in OPAL.</p>
</li>
-<li><p>asm/head: implement quiescing without stack or clobbering regs</p>
+<li><p class="first">asm/head: implement quiescing without stack or clobbering regs</p>
<p>Quiescing currently is implmeented in C in opal_entry before the
opal call handler is called. This works well enough for simple
cases like fast reset when one CPU wants all others out of the way.</p>
@@ -904,7 +928,7 @@ returned to or re-entered during this period.</p>
interrupted with sreset if the quiesce times out, and it can be
interrupted by MCEs as well. These still have the issues above.</p>
</li>
-<li><p>core/opal: Allow poller re-entry if OPAL was re-entered</p>
+<li><p class="first">core/opal: Allow poller re-entry if OPAL was re-entered</p>
<p>If an NMI interrupts the middle of running pollers and the OS
invokes pollers again (e.g., for console output), the poller
re-entrancy check will prevent it from running and spam the
@@ -914,7 +938,7 @@ OPAL re-entrancy is something different and is detected elsewhere.
Avoid the poller recursion check if OPAL has been re-entered. This
is a best-effort attempt to cope with errors.</p>
</li>
-<li><p>core/opal: Emergency stack for re-entry</p>
+<li><p class="first">core/opal: Emergency stack for re-entry</p>
<p>This detects OPAL being re-entered by the OS, and switches to an
emergency stack if it was. This protects the firmware’s main stack
from re-entrancy and allows the OS to use NMI facilities for crash
@@ -928,9 +952,10 @@ removed by 80eee1946 (“opal: Remove machine check interrupt patching
in OPAL.”). So it is possible the size could be tightened again, but
that would require further analysis.</p>
</li>
-<li><p>hdat_to_dt: hash_prop the same on all platforms
-Fixes this unit test on ppc64le hosts.</p></li>
-<li><p>mambo: Add persistent memory disk support</p>
+<li><p class="first">hdat_to_dt: hash_prop the same on all platforms
+Fixes this unit test on ppc64le hosts.</p>
+</li>
+<li><p class="first">mambo: Add persistent memory disk support</p>
<p>This adds support to for mapping disks images using persistent
memory. Disks can be added by setting this ENV variable:</p>
<blockquote>
@@ -942,7 +967,7 @@ available since mambo commit 0131f0fc08 (from 24/4/2018).</p>
<p>This also needs the of_pmem.c driver in Linux which is only available
since v4.17. It works with powernv_defconfig + CONFIG_OF_PMEM.</p>
</li>
-<li><p>external/mambo: Add di command to decode instructions</p>
+<li><p class="first">external/mambo: Add di command to decode instructions</p>
<p>By default you get 16 instructions but you can specify the number you
want. i.e.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">systemsim</span> <span class="o">%</span> <span class="n">di</span> <span class="mh">0x100</span> <span class="mi">4</span>
@@ -954,7 +979,7 @@ want. i.e.</p>
</div>
<p>Using di since it’s what xmon uses.</p>
</li>
-<li><p>mambo/mambo_utils.tcl: Inject an MCE at a specified address</p>
+<li><p class="first">mambo/mambo_utils.tcl: Inject an MCE at a specified address</p>
<p>Currently we don’t support injecting an MCE on a specific address.
This is useful for testing functionality like memcpy_mcsafe()
(see <a class="reference external" href="https://patchwork.ozlabs.org/cover/893339/">https://patchwork.ozlabs.org/cover/893339/</a>)</p>
@@ -970,13 +995,13 @@ inject_mce_ue_on_addr $addr
</div>
<p>This would cause an mce on any r1 or r1 based access</p>
</li>
-<li><p>external/mambo: improve helper for machine checks</p>
+<li><p class="first">external/mambo: improve helper for machine checks</p>
<p>Improve workarounds for stop injection, because mambo often will
trigger on 0x104/204 when injecting sreset/mces.</p>
<p>This also adds a workaround to skip injecting on reservations to
avoid infinite loops when doing inject_mce_step.</p>
</li>
-<li><p>travis: Enable ppc64le builds</p>
+<li><p class="first">travis: Enable ppc64le builds</p>
<p>At least on the IBM Travis Enterprise instance, we can now do
ppc64le builds!</p>
<p>We can only build a subset of our matrix due to availability of
@@ -984,17 +1009,17 @@ ppc64le distros. The Dockerfiles need some tweaking to only
attempt to install (x86_64 only) Mambo binaries, as well as the
build scripts.</p>
</li>
-<li><p>external: Add “lpc” tool</p>
+<li><p class="first">external: Add “lpc” tool</p>
<p>This is a little front-end to the lpc debugfs files to access
the LPC bus from userspace on the host.</p>
</li>
-<li><p>core/test/run-trace: fix on ppc64el</p></li>
+<li><p class="first">core/test/run-trace: fix on ppc64el</p>
+</li>
</ul>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -1037,15 +1062,17 @@ the LPC bus from userspace on the host.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -1062,15 +1089,14 @@ the LPC bus from userspace on the host.</p>
<li class="right" >
<a href="skiboot-5.9.9.html" title="skiboot-5.9.9"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.0</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.1-rc1.html b/doc/release-notes/skiboot-6.1-rc1.html
index bd126db..a6c0012 100644
--- a/doc/release-notes/skiboot-6.1-rc1.html
+++ b/doc/release-notes/skiboot-6.1-rc1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.1-rc1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.1-rc1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.1.html" title="skiboot-6.1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.1-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -63,32 +64,33 @@ many release candidates.</p>
<div class="section" id="general-changes-and-bug-fixes">
<h2>General changes and bug fixes<a class="headerlink" href="#general-changes-and-bug-fixes" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>GCC8 build fixes</p></li>
-<li><p>Add prepare_hbrt_update to hbrt interfaces</p>
+<li><p class="first">GCC8 build fixes</p>
+</li>
+<li><p class="first">Add prepare_hbrt_update to hbrt interfaces</p>
<p>Add placeholder support for prepare_hbrt_update call into
hostboot runtime (opal-prd) code. This interface is only
called as part of a concurrent code update on a FSP based
system.</p>
</li>
-<li><p>cpu: Clear PCR SPR in opal_reinit_cpus()</p>
+<li><p class="first">cpu: Clear PCR SPR in opal_reinit_cpus()</p>
<p>Currently if Linux boots with a non-zero PCR, things can go bad where
some early userspace programs can take illegal instructions. This is
being fixed in Linux, but in the mean time, we should cleanup in
skiboot also.</p>
</li>
-<li><p>pci: Fix PCI_DEVICE_ID()</p>
+<li><p class="first">pci: Fix PCI_DEVICE_ID()</p>
<p>The vendor ID is 16 bits not 8. This error leaves the top of the vendor
ID in the bottom bits of the device ID, which resulted in e.g. a failure
to run the PCI quirk for the AST VGA device.</p>
</li>
-<li><p>Quieten console output on boot</p>
+<li><p class="first">Quieten console output on boot</p>
<p>We print out a whole bunch of things on boot, most of which aren’t
interesting, so we should <em>not</em> print them instead.</p>
<p>Printing things like what CPUs we found and what PCI devices we found
<em>are</em> useful, so continue to do that. But we don’t need to splat out
a bunch of things that are always going to be true.</p>
</li>
-<li><p>core/console: fix deadlock when printing with console lock held</p>
+<li><p class="first">core/console: fix deadlock when printing with console lock held</p>
<p>Some debugging options will print while the console lock is held,
which is why the console lock is taken as a recursive lock.
However console_write calls __flush_console, which will drop and
@@ -115,7 +117,7 @@ to a deadlock without this:</p>
</pre></div>
</div>
</li>
-<li><p>opal-prd: Do not error out on first failure for soft/hard offline.</p>
+<li><p class="first">opal-prd: Do not error out on first failure for soft/hard offline.</p>
<p>The memory errors (CEs and UEs) that are detected as part of background
memory scrubbing are reported by PRD asynchronously to opal-prd along with
affected memory ranges. hservice_memory_error() converts these ranges into
@@ -125,9 +127,9 @@ infrastructure.</p>
all the pages to soft/hard offline-ing if any of the page offline action
fails. e.g hard offline can fail for:</p>
<ul class="simple">
-<li><p>Pages that are not part of buddy managed pool.</p></li>
-<li><p>Pages that are reserved by kernel using memblock_reserved()</p></li>
-<li><p>Pages that are in use by kernel.</p></li>
+<li>Pages that are not part of buddy managed pool.</li>
+<li>Pages that are reserved by kernel using memblock_reserved()</li>
+<li>Pages that are in use by kernel.</li>
</ul>
<p>But for the pages that are in use by user space application, the hard
offline marks the page as hwpoison, sends SIGBUS signal to kill the
@@ -137,7 +139,7 @@ use by application or free. By stopping on first error we loose the
opportunity to hwpoison the subsequent pages which may be free or in use by
application. This patch fixes this issue.</p>
</li>
-<li><p>libflash/blocklevel_write: Fix missing error handling</p>
+<li><p class="first">libflash/blocklevel_write: Fix missing error handling</p>
<p>Caught by scan-build, we seem to trap the errors in rc, but
not take any recovery action during blocklevel_write.</p>
</li>
@@ -145,7 +147,7 @@ not take any recovery action during blocklevel_write.</p>
<div class="section" id="i2c">
<h3>I2C<a class="headerlink" href="#i2c" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>p8-i2c: fix wrong request status when a reset is needed</p>
+<li><p class="first">p8-i2c: fix wrong request status when a reset is needed</p>
<p>If the bus is found in error state when starting a new request, the
engine is reset and we enter recovery. However, once complete, the
reset operation shows a status of complete in the status register. So
@@ -154,7 +156,7 @@ request is complete, even though it hasn’t run yet.</p>
<p>So don’t update any request status while we are in recovery, as
nothing useful for the request is supposed to happen in that state.</p>
</li>
-<li><p>p8-i2c: Remove force reset</p>
+<li><p class="first">p8-i2c: Remove force reset</p>
<p>Force reset was added as an attempt to work around some issues with TPM
devices locking up their I2C bus. In that particular case the problem
was that the device would hold the SCL line down permanently due to a
@@ -168,21 +170,21 @@ D. Diagnostic mode allows the SCL and SDA lines to be driven directly
by software. Without this force reset is impossible to implement.</p>
<p>This patch removes the force reset functionality entirely since:</p>
<ol class="loweralpha simple">
-<li><p>it doesn’t do what it’s supposed to, and</p></li>
-<li><p>it’s butt ugly code</p></li>
+<li>it doesn’t do what it’s supposed to, and</li>
+<li>it’s butt ugly code</li>
</ol>
<p>Additionally, turn p8_i2c_reset_engine() into p8_i2c_reset_port().
There’s no need to reset every port on a master in response to an
error that occurred on a specific port.</p>
</li>
-<li><p>libstb/i2c-driver: Bump max timeout</p>
+<li><p class="first">libstb/i2c-driver: Bump max timeout</p>
<p>We have observed some TPMs clock streching the I2C bus for signifigant
amounts of time when processing commands. The same TPMs also have
errata that can result in permernantly locking up a bus in response to
an I2C transaction they don’t understand. Using an excessively long
timeout to prevent this in the field.</p>
</li>
-<li><p>hdata: Add TPM timeout workaround</p>
+<li><p class="first">hdata: Add TPM timeout workaround</p>
<p>Set the default timeout for any bus containing a TPM to one second. This
is needed to work around a bug in the firmware of certain TPMs that will
clock strech the I2C port the for up to a second. Additionally, when the
@@ -190,7 +192,7 @@ TPM is clock streching it responds to a STOP condition on the bus by
bricking itself. Clearing this error requires a hard power cycle of the
system since the TPM is powered by standby power.</p>
</li>
-<li><p>p8-i2c: Allow a per-port default timeout</p>
+<li><p class="first">p8-i2c: Allow a per-port default timeout</p>
<p>Add support for setting a default timeout for the I2C port to the
device-tree. This is consumed by skiboot.</p>
</li>
@@ -199,26 +201,26 @@ device-tree. This is consumed by skiboot.</p>
<div class="section" id="ipmi-watchdog">
<h3>IPMI Watchdog<a class="headerlink" href="#ipmi-watchdog" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>ipmi-watchdog: Support handling re-initialization</p>
+<li><p class="first">ipmi-watchdog: Support handling re-initialization</p>
<p>Watchdog resets can return an error code from the BMC indicating that
the BMC watchdog was not initialized. Currently we abort skiboot due to
a missing error handler. This patch implements handling
re-initialization for the watchdog, automatically saving the last
watchdog set values and re-issuing them if needed.</p>
</li>
-<li><p>ipmi-watchdog: The stop action should disable reset</p>
+<li><p class="first">ipmi-watchdog: The stop action should disable reset</p>
<p>Otherwise it is possible for the reset timer to elapse and trigger the
watchdog to wake back up. This doesn’t affect the behavior of the
system since we are providing a NONE action to the BMC. However we would
like to avoid the action from taking place if possible.</p>
</li>
-<li><p>ipmi-watchdog: Add a flag to determine if we are still ticking</p>
+<li><p class="first">ipmi-watchdog: Add a flag to determine if we are still ticking</p>
<p>This makes it easier for future changes to ensure that the watchdog
stops ticking and doesn’t requeue itself for execution in the
background. This way it is safe for resets to be performed after the
ticks are assumed to be stopped and it won’t start the timer again.</p>
</li>
-<li><p>ipmi-watchdog: (prepare for) not disabling at shutdown</p>
+<li><p class="first">ipmi-watchdog: (prepare for) not disabling at shutdown</p>
<p>The op-build linux kernel has been configured to support the ipmi
watchdog. This driver will always handle the watchdog by either leaving
it enabled if configured, or by disabling it during module load if no
@@ -229,7 +231,7 @@ any point during skiboot execution.</p>
development) mix and match old BOOTKERNEL with new skiboot and we don’t
want to break that too obviously.</p>
</li>
-<li><p>ipmi-watchdog: Don’t reset the watchdog twice</p>
+<li><p class="first">ipmi-watchdog: Don’t reset the watchdog twice</p>
<p>There is no clarification for why this change was needed, but presumably
this is due to a buggy BMC implementation where the Watchdog Set command
was processed concurrently or after the initial Watchdog Reset. This
@@ -237,7 +239,7 @@ inversion would cause the watchdog to stop since the DONT_STOP bit was
not set. Since we are now using the DONT_STOP bit during initialization,
the watchdog should not be stopped even if an inversion occurs.</p>
</li>
-<li><p>ipmi-watchdog: Make it possible to set DONT_STOP</p>
+<li><p class="first">ipmi-watchdog: Make it possible to set DONT_STOP</p>
<p>The IPMI standard supports setting a DONT_STOP bit during an Watchdog
Set operation. Most of the time we don’t want to stop the Watchdog when
updating the settings so we should be using this bit. This patch makes
@@ -246,7 +248,7 @@ stopped. This only changes the behavior of the watchdog during the
initial settings update when initializing skiboot. The watchdog is no
longer disabled and then immediately re-enabled.</p>
</li>
-<li><p>ipmi-watchdog: WD_POWER_CYCLE_ACTION -&gt; WD_RESET_ACTION</p>
+<li><p class="first">ipmi-watchdog: WD_POWER_CYCLE_ACTION -&gt; WD_RESET_ACTION</p>
<p>The IPMI specification denotes that action 0x1 is Host Reset and 0x3 is
Host Power Cycle. Use the correct name for Reset in our watchdog code.</p>
</li>
@@ -256,7 +258,7 @@ Host Power Cycle. Use the correct name for Reset in our watchdog code.</p>
<div class="section" id="power8-platforms">
<h2>POWER8 platforms<a class="headerlink" href="#power8-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>astbmc: Enable mbox depending on scratch reg</p>
+<li><p class="first">astbmc: Enable mbox depending on scratch reg</p>
<p>P8 boxes can opt in for mbox pnor support if they set the scratch
register bit to indicate it is supported.</p>
</li>
@@ -265,7 +267,7 @@ register bit to indicate it is supported.</p>
<div class="section" id="simulator-platforms">
<h2>Simulator platforms<a class="headerlink" href="#simulator-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>plat/qemu: add PNOR support</p>
+<li><p class="first">plat/qemu: add PNOR support</p>
<p>To access the PNOR, OPAL/skiboot drives the BMC SPI controller using
the iLPC2AHB device of the BMC SuperIO controller and accesses the
flash contents using the LPC FW address space on which the PNOR is
@@ -277,7 +279,7 @@ ARM). The AHB window giving access to the contents of the BMC SPI
controller flash modules is mapped on the LPC FW address space.</p>
<p>The change should be compatible for machine without PNOR support.</p>
</li>
-<li><p>external/mambo: Add support for readline if it exists</p>
+<li><p class="first">external/mambo: Add support for readline if it exists</p>
<p>Add support for tclreadline package if it is present.
This patch loads the package and uses it when the
simulation stops for any reason.</p>
@@ -287,7 +289,7 @@ simulation stops for any reason.</p>
<div class="section" id="fsp-based-platforms">
<h2>FSP based platforms<a class="headerlink" href="#fsp-based-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Disable fast reboot on FSP IPL side change</p>
+<li><p class="first">Disable fast reboot on FSP IPL side change</p>
<p>If FSP changes next IPL side, then disable fast reboot.</p>
<p>sample output:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">620.196442259</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">FSP</span><span class="p">:</span> <span class="n">Got</span> <span class="n">sysparam</span> <span class="n">update</span><span class="p">,</span> <span class="n">param</span> <span class="n">ID</span> <span class="mh">0xf0000007</span>
@@ -296,7 +298,7 @@ simulation stops for any reason.</p>
</pre></div>
</div>
</li>
-<li><p>fsp/console: Always establish OPAL console API backend</p>
+<li><p class="first">fsp/console: Always establish OPAL console API backend</p>
<p>Currently we only call set_opal_console() to establish the backend
used by the OPAL console API if we find at least one FSP serial
port in HDAT.</p>
@@ -311,15 +313,16 @@ node names.</p>
<div class="section" id="ast-bmc-based-platforms">
<h2>AST BMC based platforms<a class="headerlink" href="#ast-bmc-based-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>AMI BMC: use 0x3a as OEM command</p>
+<li><p class="first">AMI BMC: use 0x3a as OEM command</p>
<p>The 0x3a OEM command is for IBM commands, while 0x32 was for AMI ones.
Sometime in the P8 timeframe, AMI BMCs were changed to listen for our
commands on either 0x32 or 0x3a. Since 0x3a is the direction forward,
we’ll use that, as P9 machines with AMI BMCs probably also want these
to work, and let’s not bet that 0x32 will continue to be okay.</p>
</li>
-<li><p>astbmc: Set romulus BMC type to OpenBMC</p></li>
-<li><p>platform/astbmc: Do not delete compatible property</p>
+<li><p class="first">astbmc: Set romulus BMC type to OpenBMC</p>
+</li>
+<li><p class="first">platform/astbmc: Do not delete compatible property</p>
<p>P9 onwards OPAL is building device tree for BMC based system using
HDAT. We are populating bmc/compatible node with bmc version. Hence
do not delete this property.</p>
@@ -329,7 +332,7 @@ do not delete this property.</p>
<div class="section" id="utilities">
<h2>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>external/xscom-utils: Add python library for xscom access</p>
+<li><p class="first">external/xscom-utils: Add python library for xscom access</p>
<p>Patch adds a simple python library module for xscom access.
It directly manipulate the â€/access’ file for scom read
and write from debugfs â€scom’ directory.</p>
@@ -341,7 +344,7 @@ and write from debugfs â€scom’ directory.</p>
</pre></div>
</div>
<p>Sample output for above getscom.py:</p>
-<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp"># </span>./getscom.py -l
+<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">#</span> ./getscom.py -l
<span class="go">Chip ID | Rev | Chip type</span>
<span class="go">---------|-------|-----------</span>
<span class="go">00000008 | DD2.0 | P9 (Nimbus) processor</span>
@@ -349,14 +352,14 @@ and write from debugfs â€scom’ directory.</p>
</pre></div>
</div>
</li>
-<li><p>ffspart: Don’t require user to create blank partitions manually</p>
+<li><p class="first">ffspart: Don’t require user to create blank partitions manually</p>
<p>Add â€â€“allow-empty’ which allows the filename for a given partition to
be blank. If set ffspart will set that part of the PNOR file â€blank’ and
set ECC bits if required.
Without this option behaviour is unchanged and ffspart will return an
error if it can not find the partition file.</p>
</li>
-<li><p>pflash: Use correct prefix when installing</p>
+<li><p class="first">pflash: Use correct prefix when installing</p>
<p>pflash uses lowercase prefix when running make install in it’s
direcetory, but uppercase PREFIX when running it in shared. Use
lowercase everywhere.</p>
@@ -368,13 +371,13 @@ been carrying for years.</p>
<div class="section" id="power9">
<h2>POWER9<a class="headerlink" href="#power9" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>occ-sensor: Avoid using uninitialised struct cpu_thread</p>
+<li><p class="first">occ-sensor: Avoid using uninitialised struct cpu_thread</p>
<p>When adding the sensors in occ_sensors_init, if the type is not
OCC_SENSOR_LOC_CORE, then the loop to find â€c’ will not be executed.
Then c-&gt;pir is used for both of the the add_sensor_node calls below.</p>
<p>This provides a default value of 0 instead.</p>
</li>
-<li><p>NX: Add NX coprocessor init opal call</p>
+<li><p class="first">NX: Add NX coprocessor init opal call</p>
<p>The read offset (4:11) in Receive FIFO control register is incremented
by FIFO size whenever CRB read by NX. But the index in RxFIFO has to
match with the corresponding entry in FIFO maintained by VAS in kernel.
@@ -385,7 +388,7 @@ It could cause CRB failure / timeout from NX.</p>
<p>This patch adds nx_coproc_init opal call for kernel to initialize
readOffset (4:11) and Queued (15:23) in RxFIFO control register.</p>
</li>
-<li><p>SLW: Remove stop1_lite and stop2_lite</p>
+<li><p class="first">SLW: Remove stop1_lite and stop2_lite</p>
<p>stop1_lite has been removed since it adds no additional benefit
over stop0_lite. stop2_lite has been removed since currently it adds
minimal benefit over stop2. However, the benefit is eclipsed by the time
@@ -398,7 +401,7 @@ we expose to the OS, the idea being to bring them back in a new
DT representation so that only an OS that knows what to do will
do things with them.</p>
</li>
-<li><p>cpu: Use STOP1 on POWER9 for idle/sleep inside OPAL</p>
+<li><p class="first">cpu: Use STOP1 on POWER9 for idle/sleep inside OPAL</p>
<p>The current code requests STOP3, which means it gets STOP2 in practice.</p>
<p>STOP2 has proven to occasionally be unreliable depending on FW
version and chip revision, it also requires a functional CME,
@@ -409,12 +412,12 @@ for something that is only used a few seconds during boot.</p>
<div class="section" id="npu2-nvlink2-and-opencapi">
<h3>NPU2 (NVLink2 and OpenCAPI)<a class="headerlink" href="#npu2-nvlink2-and-opencapi" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>npu2: Reset NVLinks on hot reset</p>
+<li><p class="first">npu2: Reset NVLinks on hot reset</p>
<p>This effectively fences GPU RAM on GPU reset so the host system
does not have to crash every time we stop a KVM guest with a GPU
passed through.</p>
</li>
-<li><p>npu2-opencapi: reduce number of retries to train the link</p>
+<li><p class="first">npu2-opencapi: reduce number of retries to train the link</p>
<p>We’ve been reliably training the opencapi link on the first attempt
for quite a while. Furthermore, if it doesn’t train on the first
attempt, retries haven’t been that useful. So let’s reduce the number
@@ -422,14 +425,14 @@ of attempts we do to train the link.</p>
<p>2 retries = 3 attempts to train.</p>
<p>Each (failed) training sequence costs about 3 seconds.</p>
</li>
-<li><p>opal/hmi: Display correct chip id while printing NPU FIRs.</p>
+<li><p class="first">opal/hmi: Display correct chip id while printing NPU FIRs.</p>
<p>HMIs for NPU xstops are broadcasted to all chips. All cores on all the
chips receive HMI. HMI handler correctly identifies and extracts the
NPU FIR details from affected chip, but while printing FIR data it
prints chip id and location code details of this_cpu()-&gt;chip_id which
may not be correct. This patch fixes this issue.</p>
</li>
-<li><p>npu2-opencapi: Fix link state to report link down</p>
+<li><p class="first">npu2-opencapi: Fix link state to report link down</p>
<p>The PHB callback â€get_link_state’ is always reporting the link width,
irrespective of the link status and even when the link is down. It is
causing too much work (and failures) when the PHB is probed during pci
@@ -437,7 +440,7 @@ init.
The fix is to look at the link status first and report the link as
down when appropriate.</p>
</li>
-<li><p>npu2-opencapi: Cleanup traces printed during link training</p>
+<li><p class="first">npu2-opencapi: Cleanup traces printed during link training</p>
<p>Now that links may train in parallel, traces shown during training can
be all mixed up. So add a prefix to all the traces to clearly identify
the chip and link the trace refers to:</p>
@@ -448,7 +451,7 @@ the chip and link the trace refers to:</p>
traces which would need work. But that code is being reworked to be
better integrated with opencapi and nvidia, so leave it alone for now.</p>
</li>
-<li><p>npu2-opencapi: Train links on fundamental reset</p>
+<li><p class="first">npu2-opencapi: Train links on fundamental reset</p>
<p>Reorder our link training steps so that they are executed on
fundamental reset instead of during the initial setup. Skiboot always
call a fundamental reset on all the PHBs during pci init.</p>
@@ -459,16 +462,16 @@ adapter reset from linux. We’ll need the reset callbacks of the PHB to
be defined. We have to handle the various delays differently, since a
linux thread shouldn’t stay stuck waiting in opal for too long.</p>
</li>
-<li><p>npu2-opencapi: Rework adapter reset</p>
+<li><p class="first">npu2-opencapi: Rework adapter reset</p>
<p>Rework a bit the code to reset the opencapi adapter:</p>
<ul class="simple">
-<li><p>make clearer which i2c pin is resetting which device</p></li>
-<li><p>break the reset operation in smaller chunks. This is really to
-prepare for a future patch.</p></li>
+<li>make clearer which i2c pin is resetting which device</li>
+<li>break the reset operation in smaller chunks. This is really to
+prepare for a future patch.</li>
</ul>
<p>No functional changes.</p>
</li>
-<li><p>npu2-opencapi: Use presence detection</p>
+<li><p class="first">npu2-opencapi: Use presence detection</p>
<p>Presence detection is not part of the opencapi specification. So each
platform may choose to implement it the way it wants.</p>
<p>All current platforms implement it through an i2c device where we can
@@ -488,7 +491,6 @@ in a later patch.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -529,15 +531,17 @@ in a later patch.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -554,15 +558,14 @@ in a later patch.</p>
<li class="right" >
<a href="skiboot-6.1.html" title="skiboot-6.1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.1-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.1.html b/doc/release-notes/skiboot-6.1.html
index 2167bae..65e8be8 100644
--- a/doc/release-notes/skiboot-6.1.html
+++ b/doc/release-notes/skiboot-6.1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.0.9.html" title="skiboot-6.0.9"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -62,22 +63,23 @@ going in.</p>
<h2>General changes and bug fixes<a class="headerlink" href="#general-changes-and-bug-fixes" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-6.1-rc1.html#skiboot-6-1-rc1"><span class="std std-ref">skiboot-6.1-rc1</span></a>:</p>
<ul>
-<li><p>slw: Fix trivial typo in debug message</p></li>
-<li><p>vpd: Add vendor property to processor node</p>
+<li><p class="first">slw: Fix trivial typo in debug message</p>
+</li>
+<li><p class="first">vpd: Add vendor property to processor node</p>
<p>Processor FRU vpd doesn’t contain vendor detail. We have to parse
module VPD to get vendor detail.</p>
</li>
-<li><p>vpd: Sanitize VPD data</p>
+<li><p class="first">vpd: Sanitize VPD data</p>
<p>On OpenPower system, VPD keyword size tells us the maximum size of the data.
But they fill trailing end with space (0x20) instead of NULL. Also spec
doesn’t stop user to have space (0x20) within actual data.</p>
<p>This patch discards trailing spaces before populating device tree.</p>
</li>
-<li><p>core: always flush console before stopping</p>
+<li><p class="first">core: always flush console before stopping</p>
<p>This catches a few cases (e.g., fast reboot failure messages) that
don’t always make it to the console before the machine is rebooted.</p>
</li>
-<li><p>core/cpu: parallelise global CPU register setting jobs</p>
+<li><p class="first">core/cpu: parallelise global CPU register setting jobs</p>
<p>On a 176 thread system, before:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">122.319923233</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">OPAL</span><span class="p">:</span> <span class="n">Switch</span> <span class="n">to</span> <span class="n">big</span><span class="o">-</span><span class="n">endian</span> <span class="n">OS</span>
<span class="p">[</span> <span class="mf">126.317897467</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">OPAL</span><span class="p">:</span> <span class="n">Switch</span> <span class="n">to</span> <span class="n">little</span><span class="o">-</span><span class="n">endian</span> <span class="n">OS</span>
@@ -89,7 +91,7 @@ don’t always make it to the console before the machine is rebooted.</p>
</pre></div>
</div>
</li>
-<li><p>init, occ: Initialise OCC earlier on BMC systems</p>
+<li><p class="first">init, occ: Initialise OCC earlier on BMC systems</p>
<p>We need to use the OCC to obtain presence data for the SXM2 slots on
Witherspoon systems. This is needed to determine device type for NVLink
GPUs and OpenCAPI devices which can be plugged into the same slot. Support
@@ -107,32 +109,33 @@ its current location.</p>
</ul>
<p>Since <a class="reference internal" href="skiboot-6.0.html#skiboot-6-0"><span class="std std-ref">skiboot-6.0</span></a>:</p>
<ul>
-<li><p>GCC8 build fixes</p></li>
-<li><p>Add prepare_hbrt_update to hbrt interfaces</p>
+<li><p class="first">GCC8 build fixes</p>
+</li>
+<li><p class="first">Add prepare_hbrt_update to hbrt interfaces</p>
<p>Add placeholder support for prepare_hbrt_update call into
hostboot runtime (opal-prd) code. This interface is only
called as part of a concurrent code update on a FSP based
system.</p>
</li>
-<li><p>cpu: Clear PCR SPR in opal_reinit_cpus()</p>
+<li><p class="first">cpu: Clear PCR SPR in opal_reinit_cpus()</p>
<p>Currently if Linux boots with a non-zero PCR, things can go bad where
some early userspace programs can take illegal instructions. This is
being fixed in Linux, but in the mean time, we should cleanup in
skiboot also.</p>
</li>
-<li><p>pci: Fix PCI_DEVICE_ID()</p>
+<li><p class="first">pci: Fix PCI_DEVICE_ID()</p>
<p>The vendor ID is 16 bits not 8. This error leaves the top of the vendor
ID in the bottom bits of the device ID, which resulted in e.g. a failure
to run the PCI quirk for the AST VGA device.</p>
</li>
-<li><p>Quieten console output on boot</p>
+<li><p class="first">Quieten console output on boot</p>
<p>We print out a whole bunch of things on boot, most of which aren’t
interesting, so we should <em>not</em> print them instead.</p>
<p>Printing things like what CPUs we found and what PCI devices we found
<em>are</em> useful, so continue to do that. But we don’t need to splat out
a bunch of things that are always going to be true.</p>
</li>
-<li><p>core/console: fix deadlock when printing with console lock held</p>
+<li><p class="first">core/console: fix deadlock when printing with console lock held</p>
<p>Some debugging options will print while the console lock is held,
which is why the console lock is taken as a recursive lock.
However console_write calls __flush_console, which will drop and
@@ -159,7 +162,7 @@ to a deadlock without this:</p>
</pre></div>
</div>
</li>
-<li><p>opal-prd: Do not error out on first failure for soft/hard offline.</p>
+<li><p class="first">opal-prd: Do not error out on first failure for soft/hard offline.</p>
<p>The memory errors (CEs and UEs) that are detected as part of background
memory scrubbing are reported by PRD asynchronously to opal-prd along with
affected memory ranges. hservice_memory_error() converts these ranges into
@@ -169,9 +172,9 @@ infrastructure.</p>
all the pages to soft/hard offline-ing if any of the page offline action
fails. e.g hard offline can fail for:</p>
<ul class="simple">
-<li><p>Pages that are not part of buddy managed pool.</p></li>
-<li><p>Pages that are reserved by kernel using memblock_reserved()</p></li>
-<li><p>Pages that are in use by kernel.</p></li>
+<li>Pages that are not part of buddy managed pool.</li>
+<li>Pages that are reserved by kernel using memblock_reserved()</li>
+<li>Pages that are in use by kernel.</li>
</ul>
<p>But for the pages that are in use by user space application, the hard
offline marks the page as hwpoison, sends SIGBUS signal to kill the
@@ -181,7 +184,7 @@ use by application or free. By stopping on first error we loose the
opportunity to hwpoison the subsequent pages which may be free or in use by
application. This patch fixes this issue.</p>
</li>
-<li><p>libflash/blocklevel_write: Fix missing error handling</p>
+<li><p class="first">libflash/blocklevel_write: Fix missing error handling</p>
<p>Caught by scan-build, we seem to trap the errors in rc, but
not take any recovery action during blocklevel_write.</p>
</li>
@@ -189,7 +192,7 @@ not take any recovery action during blocklevel_write.</p>
<div class="section" id="i2c">
<h3>I2C<a class="headerlink" href="#i2c" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>p8-i2c: fix wrong request status when a reset is needed</p>
+<li><p class="first">p8-i2c: fix wrong request status when a reset is needed</p>
<p>If the bus is found in error state when starting a new request, the
engine is reset and we enter recovery. However, once complete, the
reset operation shows a status of complete in the status register. So
@@ -198,7 +201,7 @@ request is complete, even though it hasn’t run yet.</p>
<p>So don’t update any request status while we are in recovery, as
nothing useful for the request is supposed to happen in that state.</p>
</li>
-<li><p>p8-i2c: Remove force reset</p>
+<li><p class="first">p8-i2c: Remove force reset</p>
<p>Force reset was added as an attempt to work around some issues with TPM
devices locking up their I2C bus. In that particular case the problem
was that the device would hold the SCL line down permanently due to a
@@ -212,21 +215,21 @@ D. Diagnostic mode allows the SCL and SDA lines to be driven directly
by software. Without this force reset is impossible to implement.</p>
<p>This patch removes the force reset functionality entirely since:</p>
<ol class="loweralpha simple">
-<li><p>it doesn’t do what it’s supposed to, and</p></li>
-<li><p>it’s butt ugly code</p></li>
+<li>it doesn’t do what it’s supposed to, and</li>
+<li>it’s butt ugly code</li>
</ol>
<p>Additionally, turn p8_i2c_reset_engine() into p8_i2c_reset_port().
There’s no need to reset every port on a master in response to an
error that occurred on a specific port.</p>
</li>
-<li><p>libstb/i2c-driver: Bump max timeout</p>
+<li><p class="first">libstb/i2c-driver: Bump max timeout</p>
<p>We have observed some TPMs clock streching the I2C bus for signifigant
amounts of time when processing commands. The same TPMs also have
errata that can result in permernantly locking up a bus in response to
an I2C transaction they don’t understand. Using an excessively long
timeout to prevent this in the field.</p>
</li>
-<li><p>hdata: Add TPM timeout workaround</p>
+<li><p class="first">hdata: Add TPM timeout workaround</p>
<p>Set the default timeout for any bus containing a TPM to one second. This
is needed to work around a bug in the firmware of certain TPMs that will
clock strech the I2C port the for up to a second. Additionally, when the
@@ -234,7 +237,7 @@ TPM is clock streching it responds to a STOP condition on the bus by
bricking itself. Clearing this error requires a hard power cycle of the
system since the TPM is powered by standby power.</p>
</li>
-<li><p>p8-i2c: Allow a per-port default timeout</p>
+<li><p class="first">p8-i2c: Allow a per-port default timeout</p>
<p>Add support for setting a default timeout for the I2C port to the
device-tree. This is consumed by skiboot.</p>
</li>
@@ -243,26 +246,26 @@ device-tree. This is consumed by skiboot.</p>
<div class="section" id="ipmi-watchdog">
<h3>IPMI Watchdog<a class="headerlink" href="#ipmi-watchdog" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>ipmi-watchdog: Support handling re-initialization</p>
+<li><p class="first">ipmi-watchdog: Support handling re-initialization</p>
<p>Watchdog resets can return an error code from the BMC indicating that
the BMC watchdog was not initialized. Currently we abort skiboot due to
a missing error handler. This patch implements handling
re-initialization for the watchdog, automatically saving the last
watchdog set values and re-issuing them if needed.</p>
</li>
-<li><p>ipmi-watchdog: The stop action should disable reset</p>
+<li><p class="first">ipmi-watchdog: The stop action should disable reset</p>
<p>Otherwise it is possible for the reset timer to elapse and trigger the
watchdog to wake back up. This doesn’t affect the behavior of the
system since we are providing a NONE action to the BMC. However we would
like to avoid the action from taking place if possible.</p>
</li>
-<li><p>ipmi-watchdog: Add a flag to determine if we are still ticking</p>
+<li><p class="first">ipmi-watchdog: Add a flag to determine if we are still ticking</p>
<p>This makes it easier for future changes to ensure that the watchdog
stops ticking and doesn’t requeue itself for execution in the
background. This way it is safe for resets to be performed after the
ticks are assumed to be stopped and it won’t start the timer again.</p>
</li>
-<li><p>ipmi-watchdog: (prepare for) not disabling at shutdown</p>
+<li><p class="first">ipmi-watchdog: (prepare for) not disabling at shutdown</p>
<p>The op-build linux kernel has been configured to support the ipmi
watchdog. This driver will always handle the watchdog by either leaving
it enabled if configured, or by disabling it during module load if no
@@ -273,7 +276,7 @@ any point during skiboot execution.</p>
development) mix and match old BOOTKERNEL with new skiboot and we don’t
want to break that too obviously.</p>
</li>
-<li><p>ipmi-watchdog: Don’t reset the watchdog twice</p>
+<li><p class="first">ipmi-watchdog: Don’t reset the watchdog twice</p>
<p>There is no clarification for why this change was needed, but presumably
this is due to a buggy BMC implementation where the Watchdog Set command
was processed concurrently or after the initial Watchdog Reset. This
@@ -281,7 +284,7 @@ inversion would cause the watchdog to stop since the DONT_STOP bit was
not set. Since we are now using the DONT_STOP bit during initialization,
the watchdog should not be stopped even if an inversion occurs.</p>
</li>
-<li><p>ipmi-watchdog: Make it possible to set DONT_STOP</p>
+<li><p class="first">ipmi-watchdog: Make it possible to set DONT_STOP</p>
<p>The IPMI standard supports setting a DONT_STOP bit during an Watchdog
Set operation. Most of the time we don’t want to stop the Watchdog when
updating the settings so we should be using this bit. This patch makes
@@ -290,7 +293,7 @@ stopped. This only changes the behavior of the watchdog during the
initial settings update when initializing skiboot. The watchdog is no
longer disabled and then immediately re-enabled.</p>
</li>
-<li><p>ipmi-watchdog: WD_POWER_CYCLE_ACTION -&gt; WD_RESET_ACTION</p>
+<li><p class="first">ipmi-watchdog: WD_POWER_CYCLE_ACTION -&gt; WD_RESET_ACTION</p>
<p>The IPMI specification denotes that action 0x1 is Host Reset and 0x3 is
Host Power Cycle. Use the correct name for Reset in our watchdog code.</p>
</li>
@@ -300,7 +303,7 @@ Host Power Cycle. Use the correct name for Reset in our watchdog code.</p>
<div class="section" id="power8-platforms">
<h2>POWER8 platforms<a class="headerlink" href="#power8-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>astbmc: Enable mbox depending on scratch reg</p>
+<li><p class="first">astbmc: Enable mbox depending on scratch reg</p>
<p>P8 boxes can opt in for mbox pnor support if they set the scratch
register bit to indicate it is supported.</p>
</li>
@@ -310,7 +313,7 @@ register bit to indicate it is supported.</p>
<h2>Simulator platforms<a class="headerlink" href="#simulator-platforms" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-6.1-rc1.html#skiboot-6-1-rc1"><span class="std std-ref">skiboot-6.1-rc1</span></a>:</p>
<ul>
-<li><p>pmem: volatile bindings for the poorly enabled</p>
+<li><p class="first">pmem: volatile bindings for the poorly enabled</p>
<p>PMEM_DISK bindings were added, but they rely on a rather
recent mmap feature. This patch steals from those bindings
to add volatile bindings. I’ve used these bindings with
@@ -321,7 +324,7 @@ should not expect any data to be saved/retrieved.</p>
</ul>
<p>Since <a class="reference internal" href="skiboot-6.0.html#skiboot-6-0"><span class="std std-ref">skiboot-6.0</span></a>:</p>
<ul>
-<li><p>plat/qemu: add PNOR support</p>
+<li><p class="first">plat/qemu: add PNOR support</p>
<p>To access the PNOR, OPAL/skiboot drives the BMC SPI controller using
the iLPC2AHB device of the BMC SuperIO controller and accesses the
flash contents using the LPC FW address space on which the PNOR is
@@ -333,7 +336,7 @@ ARM). The AHB window giving access to the contents of the BMC SPI
controller flash modules is mapped on the LPC FW address space.</p>
<p>The change should be compatible for machine without PNOR support.</p>
</li>
-<li><p>external/mambo: Add support for readline if it exists</p>
+<li><p class="first">external/mambo: Add support for readline if it exists</p>
<p>Add support for tclreadline package if it is present.
This patch loads the package and uses it when the
simulation stops for any reason.</p>
@@ -343,7 +346,7 @@ simulation stops for any reason.</p>
<div class="section" id="fsp-based-platforms">
<h2>FSP based platforms<a class="headerlink" href="#fsp-based-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Disable fast reboot on FSP IPL side change</p>
+<li><p class="first">Disable fast reboot on FSP IPL side change</p>
<p>If FSP changes next IPL side, then disable fast reboot.</p>
<p>sample output:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">620.196442259</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">FSP</span><span class="p">:</span> <span class="n">Got</span> <span class="n">sysparam</span> <span class="n">update</span><span class="p">,</span> <span class="n">param</span> <span class="n">ID</span> <span class="mh">0xf0000007</span>
@@ -352,7 +355,7 @@ simulation stops for any reason.</p>
</pre></div>
</div>
</li>
-<li><p>fsp/console: Always establish OPAL console API backend</p>
+<li><p class="first">fsp/console: Always establish OPAL console API backend</p>
<p>Currently we only call set_opal_console() to establish the backend
used by the OPAL console API if we find at least one FSP serial
port in HDAT.</p>
@@ -367,15 +370,16 @@ node names.</p>
<div class="section" id="ast-bmc-based-platforms">
<h2>AST BMC based platforms<a class="headerlink" href="#ast-bmc-based-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>AMI BMC: use 0x3a as OEM command</p>
+<li><p class="first">AMI BMC: use 0x3a as OEM command</p>
<p>The 0x3a OEM command is for IBM commands, while 0x32 was for AMI ones.
Sometime in the P8 timeframe, AMI BMCs were changed to listen for our
commands on either 0x32 or 0x3a. Since 0x3a is the direction forward,
we’ll use that, as P9 machines with AMI BMCs probably also want these
to work, and let’s not bet that 0x32 will continue to be okay.</p>
</li>
-<li><p>astbmc: Set romulus BMC type to OpenBMC</p></li>
-<li><p>platform/astbmc: Do not delete compatible property</p>
+<li><p class="first">astbmc: Set romulus BMC type to OpenBMC</p>
+</li>
+<li><p class="first">platform/astbmc: Do not delete compatible property</p>
<p>P9 onwards OPAL is building device tree for BMC based system using
HDAT. We are populating bmc/compatible node with bmc version. Hence
do not delete this property.</p>
@@ -385,7 +389,7 @@ do not delete this property.</p>
<div class="section" id="utilities">
<h2>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>external/xscom-utils: Add python library for xscom access</p>
+<li><p class="first">external/xscom-utils: Add python library for xscom access</p>
<p>Patch adds a simple python library module for xscom access.
It directly manipulate the â€/access’ file for scom read
and write from debugfs â€scom’ directory.</p>
@@ -397,7 +401,7 @@ and write from debugfs â€scom’ directory.</p>
</pre></div>
</div>
<p>Sample output for above getscom.py:</p>
-<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp"># </span>./getscom.py -l
+<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">#</span> ./getscom.py -l
<span class="go">Chip ID | Rev | Chip type</span>
<span class="go">---------|-------|-----------</span>
<span class="go">00000008 | DD2.0 | P9 (Nimbus) processor</span>
@@ -405,14 +409,14 @@ and write from debugfs â€scom’ directory.</p>
</pre></div>
</div>
</li>
-<li><p>ffspart: Don’t require user to create blank partitions manually</p>
+<li><p class="first">ffspart: Don’t require user to create blank partitions manually</p>
<p>Add â€â€“allow-empty’ which allows the filename for a given partition to
be blank. If set ffspart will set that part of the PNOR file â€blank’ and
set ECC bits if required.
Without this option behaviour is unchanged and ffspart will return an
error if it can not find the partition file.</p>
</li>
-<li><p>pflash: Use correct prefix when installing</p>
+<li><p class="first">pflash: Use correct prefix when installing</p>
<p>pflash uses lowercase prefix when running make install in it’s
direcetory, but uppercase PREFIX when running it in shared. Use
lowercase everywhere.</p>
@@ -425,23 +429,23 @@ been carrying for years.</p>
<h2>POWER9<a class="headerlink" href="#power9" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-6.1-rc1.html#skiboot-6-1-rc1"><span class="std std-ref">skiboot-6.1-rc1</span></a>:</p>
<ul>
-<li><p>occ: sensors: Fix the size of the phandle array â€sensors’ in DT</p>
+<li><p class="first">occ: sensors: Fix the size of the phandle array â€sensors’ in DT</p>
<p>Fixes: 99505c03f493 (present in v5.10-rc4)</p>
</li>
-<li><p>phb4: Delay training till after PERST is deasserted</p>
+<li><p class="first">phb4: Delay training till after PERST is deasserted</p>
<p>This helps some cards train on the second PERST (ie fast-reboot). The
reason is not clear why but it helps, so YOLO!</p>
</li>
</ul>
<p>Since <a class="reference internal" href="skiboot-6.0.html#skiboot-6-0"><span class="std std-ref">skiboot-6.0</span></a>:</p>
<ul>
-<li><p>occ-sensor: Avoid using uninitialised struct cpu_thread</p>
+<li><p class="first">occ-sensor: Avoid using uninitialised struct cpu_thread</p>
<p>When adding the sensors in occ_sensors_init, if the type is not
OCC_SENSOR_LOC_CORE, then the loop to find â€c’ will not be executed.
Then c-&gt;pir is used for both of the the add_sensor_node calls below.</p>
<p>This provides a default value of 0 instead.</p>
</li>
-<li><p>NX: Add NX coprocessor init opal call</p>
+<li><p class="first">NX: Add NX coprocessor init opal call</p>
<p>The read offset (4:11) in Receive FIFO control register is incremented
by FIFO size whenever CRB read by NX. But the index in RxFIFO has to
match with the corresponding entry in FIFO maintained by VAS in kernel.
@@ -452,7 +456,7 @@ It could cause CRB failure / timeout from NX.</p>
<p>This patch adds nx_coproc_init opal call for kernel to initialize
readOffset (4:11) and Queued (15:23) in RxFIFO control register.</p>
</li>
-<li><p>SLW: Remove stop1_lite and stop2_lite</p>
+<li><p class="first">SLW: Remove stop1_lite and stop2_lite</p>
<p>stop1_lite has been removed since it adds no additional benefit
over stop0_lite. stop2_lite has been removed since currently it adds
minimal benefit over stop2. However, the benefit is eclipsed by the time
@@ -465,7 +469,7 @@ we expose to the OS, the idea being to bring them back in a new
DT representation so that only an OS that knows what to do will
do things with them.</p>
</li>
-<li><p>cpu: Use STOP1 on POWER9 for idle/sleep inside OPAL</p>
+<li><p class="first">cpu: Use STOP1 on POWER9 for idle/sleep inside OPAL</p>
<p>The current code requests STOP3, which means it gets STOP2 in practice.</p>
<p>STOP2 has proven to occasionally be unreliable depending on FW
version and chip revision, it also requires a functional CME,
@@ -477,17 +481,17 @@ for something that is only used a few seconds during boot.</p>
<h3>NPU2 (NVLink2 and OpenCAPI)<a class="headerlink" href="#npu2-nvlink2-and-opencapi" title="Permalink to this headline">¶</a></h3>
<p>Since <a class="reference internal" href="skiboot-6.1-rc1.html#skiboot-6-1-rc1"><span class="std std-ref">skiboot-6.1-rc1</span></a>:</p>
<ul>
-<li><p>capi: Select the correct IODA table entry for the mbt cache.</p>
+<li><p class="first">capi: Select the correct IODA table entry for the mbt cache.</p>
<p>With the current code, the capi mmio window is not correctly configured
in the IODA table entry. The first entry (generally the non-prefetchable
BAR) is overwrriten.
This patch sets the capi window bar at the right place.</p>
</li>
-<li><p>npu2/hw-procedures: Fence bricks via NTL instead of MISC</p>
+<li><p class="first">npu2/hw-procedures: Fence bricks via NTL instead of MISC</p>
<p>There are a couple of places we can set/unset fence for a brick:</p>
<ol class="arabic simple">
-<li><p>MISC register: NPU2_MISC_FENCE_STATE</p></li>
-<li><p>NTL register for the brick: NPU2_NTL_MISC_CFG1(ndev)</p></li>
+<li>MISC register: NPU2_MISC_FENCE_STATE</li>
+<li>NTL register for the brick: NPU2_NTL_MISC_CFG1(ndev)</li>
</ol>
<p>Recent testing of ATS in combination with GPU reset has exposed a side
effect of using (1); if fence is set for all six bricks, it triggers a
@@ -498,7 +502,7 @@ Replace the call which sets fence with a write to (2). Remove the
corresponding unset call entirely. It’s unneeded because the procedures
already do a progression from full fence to half to idle using (2).</p>
</li>
-<li><p>phb4/capp: Calculate STQ/DMA read engines based on link-width for PEC</p>
+<li><p class="first">phb4/capp: Calculate STQ/DMA read engines based on link-width for PEC</p>
<p>Presently in CAPI mode the number of STQ/DMA-read engines allocated on
PEC2 for CAPP is fixed to 6 and 0-30 respectively irrespective of the
PCI link width. These values are only suitable for x8 cards and
@@ -510,7 +514,7 @@ in x16 mode and if yes then we allocate 4/0-47 STQ/DMA-read engines
for the CAPP traffic.</p>
<p>Fixes: 37ea3cfdc852 (present in v5.7-rc1)</p>
</li>
-<li><p>npu2: Use same compatible string for NVLink and OpenCAPI link nodes in device tree</p>
+<li><p class="first">npu2: Use same compatible string for NVLink and OpenCAPI link nodes in device tree</p>
<p>Currently, we distinguish between NPU links for NVLink devices and OpenCAPI
devices through the use of two different compatible strings - ibm,npu-link
and ibm,npu-link-opencapi.</p>
@@ -529,7 +533,7 @@ device type dynamically.</p>
consumed directly by Linux, so this shouldn’t break anything (other than
internal BML lab environments).</p>
</li>
-<li><p>occ: Add support for GPU presence detection</p>
+<li><p class="first">occ: Add support for GPU presence detection</p>
<p>On the Witherspoon platform, we need to distinguish between NVLink GPUs and
OpenCAPI accelerators. In order to do this, we first need to find out
whether the SXM2 socket is populated.</p>
@@ -547,7 +551,7 @@ link training to fail.</p>
<p>This will be used in later patches to fix up the NPU2 probe path for
OpenCAPI support on Witherspoon.</p>
</li>
-<li><p>hw/npu2, core/hmi: Use NPU instead of NPU2 as log message prefix</p>
+<li><p class="first">hw/npu2, core/hmi: Use NPU instead of NPU2 as log message prefix</p>
<p>The NPU2{DBG,INF,ERR} macros use “NPU%d” as a prefix to identify messages
relating to a particular NPU.</p>
<p>It’s slightly confusing to have per-NPU messages prefixed with “NPU0” or
@@ -559,12 +563,12 @@ confusion with the original npu.c code since that’s only for P8.</p>
</ul>
<p>Since <a class="reference internal" href="skiboot-6.0.html#skiboot-6-0"><span class="std std-ref">skiboot-6.0</span></a>:</p>
<ul>
-<li><p>npu2: Reset NVLinks on hot reset</p>
+<li><p class="first">npu2: Reset NVLinks on hot reset</p>
<p>This effectively fences GPU RAM on GPU reset so the host system
does not have to crash every time we stop a KVM guest with a GPU
passed through.</p>
</li>
-<li><p>npu2-opencapi: reduce number of retries to train the link</p>
+<li><p class="first">npu2-opencapi: reduce number of retries to train the link</p>
<p>We’ve been reliably training the opencapi link on the first attempt
for quite a while. Furthermore, if it doesn’t train on the first
attempt, retries haven’t been that useful. So let’s reduce the number
@@ -572,14 +576,14 @@ of attempts we do to train the link.</p>
<p>2 retries = 3 attempts to train.</p>
<p>Each (failed) training sequence costs about 3 seconds.</p>
</li>
-<li><p>opal/hmi: Display correct chip id while printing NPU FIRs.</p>
+<li><p class="first">opal/hmi: Display correct chip id while printing NPU FIRs.</p>
<p>HMIs for NPU xstops are broadcasted to all chips. All cores on all the
chips receive HMI. HMI handler correctly identifies and extracts the
NPU FIR details from affected chip, but while printing FIR data it
prints chip id and location code details of this_cpu()-&gt;chip_id which
may not be correct. This patch fixes this issue.</p>
</li>
-<li><p>npu2-opencapi: Fix link state to report link down</p>
+<li><p class="first">npu2-opencapi: Fix link state to report link down</p>
<p>The PHB callback â€get_link_state’ is always reporting the link width,
irrespective of the link status and even when the link is down. It is
causing too much work (and failures) when the PHB is probed during pci
@@ -587,7 +591,7 @@ init.
The fix is to look at the link status first and report the link as
down when appropriate.</p>
</li>
-<li><p>npu2-opencapi: Cleanup traces printed during link training</p>
+<li><p class="first">npu2-opencapi: Cleanup traces printed during link training</p>
<p>Now that links may train in parallel, traces shown during training can
be all mixed up. So add a prefix to all the traces to clearly identify
the chip and link the trace refers to:</p>
@@ -598,7 +602,7 @@ the chip and link the trace refers to:</p>
traces which would need work. But that code is being reworked to be
better integrated with opencapi and nvidia, so leave it alone for now.</p>
</li>
-<li><p>npu2-opencapi: Train links on fundamental reset</p>
+<li><p class="first">npu2-opencapi: Train links on fundamental reset</p>
<p>Reorder our link training steps so that they are executed on
fundamental reset instead of during the initial setup. Skiboot always
call a fundamental reset on all the PHBs during pci init.</p>
@@ -609,16 +613,16 @@ adapter reset from linux. We’ll need the reset callbacks of the PHB to
be defined. We have to handle the various delays differently, since a
linux thread shouldn’t stay stuck waiting in opal for too long.</p>
</li>
-<li><p>npu2-opencapi: Rework adapter reset</p>
+<li><p class="first">npu2-opencapi: Rework adapter reset</p>
<p>Rework a bit the code to reset the opencapi adapter:</p>
<ul class="simple">
-<li><p>make clearer which i2c pin is resetting which device</p></li>
-<li><p>break the reset operation in smaller chunks. This is really to
-prepare for a future patch.</p></li>
+<li>make clearer which i2c pin is resetting which device</li>
+<li>break the reset operation in smaller chunks. This is really to
+prepare for a future patch.</li>
</ul>
<p>No functional changes.</p>
</li>
-<li><p>npu2-opencapi: Use presence detection</p>
+<li><p class="first">npu2-opencapi: Use presence detection</p>
<p>Presence detection is not part of the opencapi specification. So each
platform may choose to implement it the way it wants.</p>
<p>All current platforms implement it through an i2c device where we can
@@ -639,11 +643,11 @@ in a later patch.</p>
<h2>Testing and CI<a class="headerlink" href="#testing-and-ci" title="Permalink to this headline">¶</a></h2>
<p>Since <a class="reference internal" href="skiboot-6.1-rc1.html#skiboot-6-1-rc1"><span class="std std-ref">skiboot-6.1-rc1</span></a>:</p>
<ul>
-<li><p>test/qemu: start building qemu again, and use our built qemu for tests</p>
+<li><p class="first">test/qemu: start building qemu again, and use our built qemu for tests</p>
<p>We need to use QEMU_BIN rather than QEMU as the makefiles define
QEMU already.</p>
</li>
-<li><p>opal-ci: qemu: Use the powernv-3.0 branch</p>
+<li><p class="first">opal-ci: qemu: Use the powernv-3.0 branch</p>
<p>This is based off the current development version of Qemu, and
importantly it contains the patch that allows skiboot and Linux to clear
the PCR that we require to boot.</p>
@@ -653,7 +657,6 @@ the PCR that we require to boot.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -695,15 +698,17 @@ the PCR that we require to boot.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -720,15 +725,14 @@ the PCR that we require to boot.</p>
<li class="right" >
<a href="skiboot-6.0.9.html" title="skiboot-6.0.9"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.2-rc1.html b/doc/release-notes/skiboot-6.2-rc1.html
index dbd6880..37c8353 100644
--- a/doc/release-notes/skiboot-6.2-rc1.html
+++ b/doc/release-notes/skiboot-6.2-rc1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.2-rc1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.2-rc1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.2.html" title="skiboot-6.2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.2-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -61,7 +62,7 @@ did).</p>
<div class="section" id="general">
<h2>General<a class="headerlink" href="#general" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>cpu: Quieten OS endian switch messages</p>
+<li><p class="first">cpu: Quieten OS endian switch messages</p>
<p>Users see these when loading an OS from Petitboot:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">119.486794100</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">OPAL</span><span class="p">:</span> <span class="n">Switch</span> <span class="n">to</span> <span class="n">big</span><span class="o">-</span><span class="n">endian</span> <span class="n">OS</span>
<span class="p">[</span> <span class="mf">120.022302604</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">OPAL</span><span class="p">:</span> <span class="n">Switch</span> <span class="n">to</span> <span class="n">little</span><span class="o">-</span><span class="n">endian</span> <span class="n">OS</span>
@@ -71,18 +72,18 @@ did).</p>
on. Switch them to PR_INFO so they still appear in the log, but not on
the serial console.</p>
</li>
-<li><p>Recognise signed VERSION partition</p>
+<li><p class="first">Recognise signed VERSION partition</p>
<p>A few things need to change to support a signed VERSION partition:</p>
<ul class="simple">
-<li><p>A signed VERSION partition will be 4K + SECURE_BOOT_HEADERS_SIZE (4K).</p></li>
-<li><p>The VERSION partition needs to be loaded after secure/trusted boot is
-set up, and therefore after nvram_init().</p></li>
-<li><p>Added to the trustedboot resources array.</p></li>
+<li>A signed VERSION partition will be 4K + SECURE_BOOT_HEADERS_SIZE (4K).</li>
+<li>The VERSION partition needs to be loaded after secure/trusted boot is
+set up, and therefore after nvram_init().</li>
+<li>Added to the trustedboot resources array.</li>
</ul>
<p>This also moves the ipmi_dt_add_bmc_info() call to after
flash_dt_add_fw_version() since it adds info to ibm,firmware-versions.</p>
</li>
-<li><p>Run pollers in time_wait() when not booting</p>
+<li><p class="first">Run pollers in time_wait() when not booting</p>
<p>This only bit us hard with hiomap in one scenario.</p>
<p>Our OPAL API has been OPAL_POLL_EVENTS may be needed to make forward
progress on ongoing operations, and the internal to skiboot API has been
@@ -112,7 +113,7 @@ to be, rather than have this odd case of “time_wait() for a condition
that could also be tripped by an interrupt works fine unless the OS is
up and running but hasn’t set interrupts up yet”.</p>
</li>
-<li><p>ipmi: Reduce ipmi_queue_msg_sync() polling loop time to 10ms</p>
+<li><p class="first">ipmi: Reduce ipmi_queue_msg_sync() polling loop time to 10ms</p>
<p>On a plain boot, this reduces the time spent in OPAL by ~170ms on
p9dsu. This is due to hiomap (currently) using synchronous IPMI
messages.</p>
@@ -121,10 +122,13 @@ operations for hiomap, as we’ll spend typically 10-20ms in OPAL
rather than 100-200ms. It’s not an ideal solution to that, but
it’s a quick and obvious win for jitter.</p>
</li>
-<li><p>core/device: NULL pointer dereference fix</p></li>
-<li><p>core/flash: NULL pointer dereference fixes</p></li>
-<li><p>core/cpu: Call memset with proper cpu_thread offset</p></li>
-<li><p>libflash: Add ipmi-hiomap, and prefer it for PNOR access</p>
+<li><p class="first">core/device: NULL pointer dereference fix</p>
+</li>
+<li><p class="first">core/flash: NULL pointer dereference fixes</p>
+</li>
+<li><p class="first">core/cpu: Call memset with proper cpu_thread offset</p>
+</li>
+<li><p class="first">libflash: Add ipmi-hiomap, and prefer it for PNOR access</p>
<p>ipmi-hiomap implements the PNOR access control protocol formerly known
as “the mbox protocol” but uses IPMI instead of the AST LPC mailbox as a
transport. As there is no-longer any mailbox involved in this alternate
@@ -139,7 +143,7 @@ removal.</p>
but as it is on life-support effective immediately we may as well just
remove it entirely when the time is right.</p>
</li>
-<li><p>opal/hmi: Handle early HMIs on thread0 when secondaries are still in OPAL.</p>
+<li><p class="first">opal/hmi: Handle early HMIs on thread0 when secondaries are still in OPAL.</p>
<p>When primary thread receives a CORE level HMI for timer facility errors
while secondaries are still in OPAL, thread 0 ends up in rendez-vous
waiting for secondaries to get into hmi handling. This is because OPAL
@@ -187,18 +191,18 @@ this very eary stage we already doomed.</p>
</pre></div>
</div>
</li>
-<li><p>core/cpu: Fix memory allocation for job array</p>
+<li><p class="first">core/cpu: Fix memory allocation for job array</p>
<p>fixes: 7a3f307e core/cpu: parallelise global CPU register setting jobs</p>
<p>This bug would result in boot-hang on some configurations due to
cpu_wait_job() endlessly waiting for the last bogus jobs[cpu-&gt;pir] pointer.</p>
</li>
-<li><p>i2c: Fix multiple-enqueue of the same request on NACK</p>
+<li><p class="first">i2c: Fix multiple-enqueue of the same request on NACK</p>
<p>i2c_request_send() will retry the request if the error is a NAK,
however it forgets to clear the “ud.done” flag. It will thus
loop again and try to re-enqueue the same request causing internal
request list corruption.</p>
</li>
-<li><p>i2c: Ensure ordering between i2c_request_send() and completion</p>
+<li><p class="first">i2c: Ensure ordering between i2c_request_send() and completion</p>
<p>i2c_request_send loops waiting for a flag “uc.done” set by
the completion routine, and then look for a result code
also set by that same completion.</p>
@@ -207,7 +211,7 @@ processor, so we need to order the stores to uc and the reads
from uc so that uc.done is stored last and tested first using
memory barriers.</p>
</li>
-<li><p>pci: Clarify power down logic</p>
+<li><p class="first">pci: Clarify power down logic</p>
<p>Currently pci_scan_bus() unconditionally calls pci_slot_set_power_state()
when it’s finished scanning a bus. This is one of those things that
makes you go “WHAT?” when you first see it and frankly the skiboot PCI
@@ -217,7 +221,7 @@ code could do with less of that.</p>
<div class="section" id="fast-reboot">
<h3>Fast Reboot<a class="headerlink" href="#fast-reboot" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>fast-reboot: parallel memory clearing</p>
+<li><p class="first">fast-reboot: parallel memory clearing</p>
<p>Arbitrarily pick 16GB as the unit of parallelism, and
split up clearing memory into jobs and schedule them
node-local to the memory (or on node 0 if we can’t
@@ -228,7 +232,7 @@ fast-reboot on a 256GB Boston system.</p>
zeroing all of RAM, so we may as well do them at the same time
and cut a few seconds off the total fast reboot time.</p>
</li>
-<li><p>fast-reboot: verify firmware “romem” checksum</p>
+<li><p class="first">fast-reboot: verify firmware “romem” checksum</p>
<p>This takes a checksum of skiboot memory after boot that should be
unchanged during OS operation, and verifies it before allowing a
fast reboot.</p>
@@ -238,13 +242,13 @@ during boot.</p>
<p>This helps to improve the integrity of firmware against host and
runtime firmware memory scribble bugs.</p>
</li>
-<li><p>core/fast-reboot: print the fast reboot disable reason</p>
+<li><p class="first">core/fast-reboot: print the fast reboot disable reason</p>
<p>Once things start to go wrong, disable_fast_reboot can be called a
number of times, so make the first reason sticky, and also print it
to the console at disable time. This helps with making sense of
fast reboot disables.</p>
</li>
-<li><p>Add fast-reboot property to /ibm,opal DT node</p>
+<li><p class="first">Add fast-reboot property to /ibm,opal DT node</p>
<p>this means that if it’s permanently disabled on boot, the test suite can
pick that up and not try a fast reboot test.</p>
</li>
@@ -254,23 +258,23 @@ pick that up and not try a fast reboot test.</p>
<div class="section" id="utilities">
<h2>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>pflash: Add –skip option for reading</p>
+<li><p class="first">pflash: Add –skip option for reading</p>
<p>Add a –skip=N option to pflash to skip N number of bytes when reading.
This would allow users to print the VERSION partition without the STB
header by specifying the –skip=4096 argument, and it’s a more generic
solution rather than making pflash depend on secure/trusted boot code.</p>
</li>
-<li><p>xscom-utils: Rework getsram</p>
+<li><p class="first">xscom-utils: Rework getsram</p>
<p>Allow specifying a file on the command line to read OCC SRAM data into.
If no file is specified then we print it to stdout as text. This is a
bit inconsistent, but it retains compatibility with the existing tool.</p>
</li>
-<li><p>xscom-utils/getsram: Make it work on P9</p>
+<li><p class="first">xscom-utils/getsram: Make it work on P9</p>
<p>The XSCOM base address of the OCC control registers changed slightly
between P8 and P9. Fix this up and add a bit of PVR checking so we look
in the right place.</p>
</li>
-<li><p>opal-prd: Fix opal-prd crash</p>
+<li><p class="first">opal-prd: Fix opal-prd crash</p>
<p>Presently callback function from HBRT uses r11 to point to target function
pointer. r12 is garbage. This works fine when we compile with “-no-pie” option
(as we don’t use r12 to calculate TOC).</p>
@@ -287,39 +291,40 @@ entry point. So that we can calculate TOC properly.</p>
<div class="section" id="development-and-debugging">
<h2>Development and Debugging<a class="headerlink" href="#development-and-debugging" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>core/lock: Use try_lock_caller() in lock_caller() to capture owner</p>
+<li><p class="first">core/lock: Use try_lock_caller() in lock_caller() to capture owner</p>
<p>Otherwise we can get reports of core/lock.c owning the lock, which is
not helpful when tracking down ownership issues.</p>
</li>
-<li><p>core/flash: Emit a warning if Skiboot version doesn’t match</p>
+<li><p class="first">core/flash: Emit a warning if Skiboot version doesn’t match</p>
<p>This means you’ll get a warning that you’ve modified skiboot separately
to the rest of the PNOR image, which can be useful in determining what
firmware is actually running on a machine.</p>
</li>
-<li><p>gcov: link in ctors* as newer GCC doesn’t group them all</p>
+<li><p class="first">gcov: link in ctors* as newer GCC doesn’t group them all</p>
<p>It seems that newer toolchains get us multiple ctors sections to link in
rather than just one. If we discard them (as we were doing), then we
don’t have a working gcov build (and we get the “doesn’t look sane”
warning on boot).</p>
</li>
-<li><p>core/flash: Log return code when ffs_init() fails</p>
+<li><p class="first">core/flash: Log return code when ffs_init() fails</p>
<p>Knowing the return code is at least better than not knowing the return
code.</p>
</li>
-<li><p>gcov: Fix building with GCC8</p></li>
-<li><p>travis/ci: rework Dockerfiles to produce build artifacts</p>
+<li><p class="first">gcov: Fix building with GCC8</p>
+</li>
+<li><p class="first">travis/ci: rework Dockerfiles to produce build artifacts</p>
<p>ubuntu-latest was also missing clang, as ubuntu-latest is closer to
ubuntu 18.04 than 16.04</p>
</li>
-<li><p>cpu: add cpu_queue_job_on_node()</p>
+<li><p class="first">cpu: add cpu_queue_job_on_node()</p>
<p>Add a job scheduling API which will run the job on the requested
chip_id (or return failure).</p>
</li>
-<li><p>opal-ci: Build old dtc version for fedora 28</p>
+<li><p class="first">opal-ci: Build old dtc version for fedora 28</p>
<p>There are patches that will go into dtc to fix the issues we hit, but
for the moment let’s just build and use a slightly older version.</p>
</li>
-<li><p>mem_region: Merge similar allocations when dumping</p>
+<li><p class="first">mem_region: Merge similar allocations when dumping</p>
<p>Currently we print one line for each allocation done at runtime when
dumping the memory allocations. We do a few thousand allocations at
boot so this can result in a huge amount of text being printed which
@@ -338,7 +343,7 @@ suppressed at the default log level, which probably isn’t something you
want considering we only dump the allocations when we run out of skiboot
heap space.</p>
</li>
-<li><p>core/lock: fix timeout warning causing a deadlock false positive</p>
+<li><p class="first">core/lock: fix timeout warning causing a deadlock false positive</p>
<p>If a lock waiter exceeds the warning timeout, it prints a message
while still registered as requesting the lock. Printing the message
can take locks, so if one is held when the owner of the original
@@ -348,11 +353,11 @@ detection, which brings down the system.</p>
KVM guest, where the timebase was not returned to host timebase
before calling the HMI handler.</p>
</li>
-<li><p>hw/p8-i2c: Print the set error bits</p>
+<li><p class="first">hw/p8-i2c: Print the set error bits</p>
<p>This is purely to save me from having to look it up every time someone
gets an I2C error.</p>
</li>
-<li><p>init: Fix starting stripped kernel</p>
+<li><p class="first">init: Fix starting stripped kernel</p>
<p>Currently if we try to run a raw/stripped binary kernel (ie. without
the elf header) we crash with:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>[ 0.008757768,5] INIT: Waiting for kernel...
@@ -368,12 +373,12 @@ the elf header) we crash with:</p>
<p>This is because we haven’t set kernel_entry correctly in this path.
This fixes it.</p>
</li>
-<li><p>cpu: Better output when waiting for a very long job</p>
+<li><p class="first">cpu: Better output when waiting for a very long job</p>
<p>Instead of printing at the end if the job took more than 1s,
print in the loop every 30s along with a backtrace. This will
give us some output if the job is deadlocked.</p>
</li>
-<li><p>lock: Fix interactions between lock dependency checker and stack checker</p>
+<li><p class="first">lock: Fix interactions between lock dependency checker and stack checker</p>
<p>The lock dependency checker does a few nasty things that can cause
re-entrancy deadlocks in conjunction with the stack checker or
in fact other debug tests.</p>
@@ -390,22 +395,24 @@ avoid deadlocks with the UART driver.</p>
option from DEBUG_LOCKS as well, in case we chose to disable it
by default later on.</p>
</li>
-<li><p>xscom-utils/adu_scoms.py: run 2to3 over it</p></li>
-<li><p>clang: -Wno-error=ignored-attributes</p></li>
+<li><p class="first">xscom-utils/adu_scoms.py: run 2to3 over it</p>
+</li>
+<li><p class="first">clang: -Wno-error=ignored-attributes</p>
+</li>
</ul>
<div class="section" id="mambo-platform">
<h3>Mambo Platform<a class="headerlink" href="#mambo-platform" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>mambo: Merge PMEM_DISK and PMEM_VOLATILE code</p>
+<li><p class="first">mambo: Merge PMEM_DISK and PMEM_VOLATILE code</p>
<p>PMEM_VOLATILE and PMEM_DISK can’t be used together and are basically
copies of the same code.</p>
<p>This merges the two and allows them used together. Same API is kept.</p>
</li>
-<li><p>hw/chiptod: test QUIRK_NO_CHIPTOD in opal_resync_timebase</p>
+<li><p class="first">hw/chiptod: test QUIRK_NO_CHIPTOD in opal_resync_timebase</p>
<p>This allows some test coverage of deep stop states in Linux with
Mambo.</p>
</li>
-<li><p>core/mem_region: mambo reserve kernel payload areas</p>
+<li><p class="first">core/mem_region: mambo reserve kernel payload areas</p>
<p>Mambo image payloads get overwritten by the OS and by
fast reboot memory clearing because they have no region
defined. Add them, which allows fast reboot to work.</p>
@@ -415,7 +422,7 @@ defined. Add them, which allows fast reboot to work.</p>
<div class="section" id="qemu-platform">
<h3>Qemu platform<a class="headerlink" href="#qemu-platform" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>nx: Don’t abort on missing NX when using a QEMU machine</p>
+<li><p class="first">nx: Don’t abort on missing NX when using a QEMU machine</p>
<p>These don’t have an NX node (and probably never will) as they
don’t provide any coprocessor. However, the DARN instruction
works so this abort is unnecessary.</p>
@@ -426,7 +433,7 @@ works so this abort is unnecessary.</p>
<div class="section" id="power8-platforms">
<h2>POWER8 Platforms<a class="headerlink" href="#power8-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>SBE-p8: Do all sbe timer update with xscom lock held</p>
+<li><p class="first">SBE-p8: Do all sbe timer update with xscom lock held</p>
<p>Without this, on some P8 platforms, we could (falsely) think the SBE timer
had stalled getting the dreaded “timer stuck” message.</p>
<p>The code was doing the mftb() to set the start of the timeout period while
@@ -439,7 +446,7 @@ so do it that way.</p>
<div class="section" id="vesnin-platform">
<h3>Vesnin Platform<a class="headerlink" href="#vesnin-platform" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>platforms/astbmc/vesnin: Send list of PCI devices to BMC through IPMI</p>
+<li><p class="first">platforms/astbmc/vesnin: Send list of PCI devices to BMC through IPMI</p>
<p>Implements sending a list of installed PCI devices through IPMI protocol.
Each PCI device description is sent as a standalone IPMI message.
A list of devices can be gathered from separate messages using the
@@ -452,19 +459,21 @@ updated at the start of synchronization session.</p>
<div class="section" id="power9-platforms">
<h2>POWER9 Platforms<a class="headerlink" href="#power9-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>STOP API: API conditionally supports 255 SCOM restore entries for each quad.</p></li>
-<li><p>hdata/i2c: Skip unknown device type</p>
+<li><p class="first">STOP API: API conditionally supports 255 SCOM restore entries for each quad.</p>
+</li>
+<li><p class="first">hdata/i2c: Skip unknown device type</p>
<p>Do not add unknown I2C devices to device tree.</p>
</li>
-<li><p>hdata/i2c: Add whitelisting for Host I2C devices</p>
+<li><p class="first">hdata/i2c: Add whitelisting for Host I2C devices</p>
<p>Many of the devices that we get information about through HDAT are for
use by firmware rather than the host operating system. This patch adds
a boolean flag to hdat_i2c_info structure that indicates whether devices
with a given purpose should be reserved for use inside of OPAL (or some
other firmware component, such as the OCC).</p>
</li>
-<li><p>hdata/iohub: Fix Cumulus Hub ID number</p></li>
-<li><p>opal/hmi: Wakeup the cpu before reading core_fir</p>
+<li><p class="first">hdata/iohub: Fix Cumulus Hub ID number</p>
+</li>
+<li><p class="first">opal/hmi: Wakeup the cpu before reading core_fir</p>
<p>When stop state 5 is enabled, reading the core_fir during an HMI can
result in a xscom read error with xscom_read() returning an
OPAL_XSCOM_PARTIAL_GOOD error code and core_fir value of all FFs. At
@@ -476,12 +485,12 @@ reading the core_fir. Hence this patch wraps the call to
read_core_fir() within calls to dctl_set_special_wakeup() and
dctl_clear_special_wakeup().</p>
</li>
-<li><p>xive: Disable block tracker</p>
+<li><p class="first">xive: Disable block tracker</p>
<p>Due to some HW errata, the block tracking facility (performance optimisation
for large systems) should be disabled on Nimbus chips. Disable it unconditionally
for now.</p>
</li>
-<li><p>opal/hmi: Ignore debug trigger inject core FIR.</p>
+<li><p class="first">opal/hmi: Ignore debug trigger inject core FIR.</p>
<p>Core FIR[60] is a side effect of the work around for the CI Vector Load
issue in DD2.1. Usually this gets delivered as HMI with HMER[17] where
Linux already ignores it. But it looks like in some cases we may happen
@@ -489,16 +498,16 @@ to see CORE_FIR[60] while we are already in Malfunction Alert HMI
(HMER[0]) due to other reasons e.g. CAPI recovery or NPU xstop. If that
happens then just ignore it instead of crashing kernel as not recoverable.</p>
</li>
-<li><p>hdata: Make sure reserved node name starts with “ibm, “</p>
+<li><p class="first">hdata: Make sure reserved node name starts with “ibm, “</p>
<p>HDAT does not provide consistent label format for reserved memory label.
Few starts with “ibm,” while few other starts with component name.</p>
</li>
-<li><p>hdata: Fix dtc warnings</p>
+<li><p class="first">hdata: Fix dtc warnings</p>
<p>Fix dtc warnings related to mcbist node.</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="o">@</span><span class="mi">623</span><span class="n">fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="o">@</span><span class="mi">1</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
-<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="o">@</span><span class="mi">623</span><span class="n">fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="o">@</span><span class="mi">2</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
-<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="o">@</span><span class="mi">603</span><span class="n">fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="o">@</span><span class="mi">1</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
-<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="o">@</span><span class="mi">603</span><span class="n">fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="o">@</span><span class="mi">2</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="nd">@623fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="nd">@1</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
+<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="nd">@623fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="nd">@2</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
+<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="nd">@603fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="nd">@1</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
+<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="nd">@603fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="nd">@2</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
</pre></div>
</div>
<p>Ideally we should add proper xscom range here… but we are not getting that
@@ -508,7 +517,7 @@ information in HDAT today. Lets fix warning until we get proper data in HDAT.</p
<div class="section" id="phb4">
<h3>PHB4<a class="headerlink" href="#phb4" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>phb4: Generate checkstop on AIB ECC corr/uncorr for DD2.0 parts</p>
+<li><p class="first">phb4: Generate checkstop on AIB ECC corr/uncorr for DD2.0 parts</p>
<p>On DD2.0 parts, PCIe ECC protection is not warranted in the response
data path. Thus, for these parts, we need to flag any ECC errors
detected from the adjacent AIB RX Data path so the part can be
@@ -516,7 +525,7 @@ replaced.</p>
<p>This patch configures the FIRs so that we escalate these AIB ECC
errors to a checkstop so the parts can be replaced.</p>
</li>
-<li><p>phb4: Reset pfir and nfir if new errors reported during ETU reset</p>
+<li><p class="first">phb4: Reset pfir and nfir if new errors reported during ETU reset</p>
<p>During fast-reboot new PEC errors can be latched even after ETU-Reset
is asserted. This will result in values of variables nfir_cache and
pfir_cache to be out of sync.</p>
@@ -530,7 +539,7 @@ ETU-reset was asserted, report these new errors and reset the
nfir/pfir registers. This should bring the ETU out of reset
successfully.</p>
</li>
-<li><p>phb4: Disable nodal scoped DMA accesses when PB pump mode is enabled</p>
+<li><p class="first">phb4: Disable nodal scoped DMA accesses when PB pump mode is enabled</p>
<p>By default when a PCIe device issues a read request via the PHB it is first
issued with nodal scope. When accessing GPU memory the NPU does not know at the
time of response if the requested memory page is off node or not. Therefore
@@ -544,7 +553,7 @@ treated differently. Therefore we avoid disabling nodal scope on large boxes
which have pump mode disabled to avoid all PHB requests being broadcast to
multiple chips.</p>
</li>
-<li><p>phb4/capp: Only reset FIR bits that cause capp machine check</p>
+<li><p class="first">phb4/capp: Only reset FIR bits that cause capp machine check</p>
<p>During CAPP recovery do_capp_recovery_scoms() will reset the CAPP Fir
register just after CAPP recovery is completed. This has an
unintentional side effect of preventing PRD from analyzing and
@@ -556,7 +565,7 @@ only reset fir bits that cause CAPP machine check (local xstop). This
is done by reading the CAPP Fir Action0/1 &amp; Mask registers and
generating a mask which is then written on CAPP_FIR_CLEAR register.</p>
</li>
-<li><p>phb4: Check for RX errors after link training</p>
+<li><p class="first">phb4: Check for RX errors after link training</p>
<p>Some PHB4 PHYs can get stuck in a bad state where they are constantly
retraining the link. This happens transparently to skiboot and Linux
but will causes PCIe to be slow. Resetting the PHB4 clears the
@@ -574,20 +583,20 @@ retrain the link. ie</p>
</pre></div>
</div>
</li>
-<li><p>hw/phb4: Add a helper to dump the PELT-V</p>
+<li><p class="first">hw/phb4: Add a helper to dump the PELT-V</p>
<p>The “Partitionable Endpoint Lookup Table (Vector)” is used by the PHB
when processing EEH events. The PELT-V defines which PEs should be
additionally frozen in the event of an error being flagged on a
given PE. Knowing the state of the PELT-V is sometimes useful for
debugging PHB issues so this patch adds a helper to dump it.</p>
</li>
-<li><p>hw/phb4: Print the PEs in the EEH dump in hex</p>
+<li><p class="first">hw/phb4: Print the PEs in the EEH dump in hex</p>
<p>Linux always displays the PE number in hexidecimal while skiboot
displays the PEST index (PE number) in decimal. This makes correlating
errors between Skiboot and Linux more annoying than it should be so
this patch makes Skiboot print the PEST number in hex.</p>
</li>
-<li><p>phb4: Reallocate PEC2 DMA-Read engines to improve GPU-Direct bandwidth</p>
+<li><p class="first">phb4: Reallocate PEC2 DMA-Read engines to improve GPU-Direct bandwidth</p>
<p>We reallocate additional 16/8 DMA-Read engines allocated to stack0/1
on PEC2 respectively. This is needed to improve bandwidth available to
the Mellanox CX5 adapter when trying to read GPU memory (GPU-Direct).</p>
@@ -599,7 +608,7 @@ respectively on PEC2. This is done by populating the
XPEC_PCI_PRDSTKOVR and XPEC_NEST_READ_STACK_OVERRIDE as suggested by
the h/w team.</p>
</li>
-<li><p>phb4: Enable PHB MMIO-0/1 Bars only when mmio window exists</p>
+<li><p class="first">phb4: Enable PHB MMIO-0/1 Bars only when mmio window exists</p>
<p>Presently phb4_probe_stack() will always enable PHB MMIO0/1 windows
even if they doesn’t exist in phy_map. Hence we do some minor shuffling
in the phb4_probe_stack() so that MMIO-0/1 Bars are only enabled if
@@ -607,7 +616,7 @@ there corresponding MMIO window exists in the phy_map. In case phy_map
for an mmio window is â€0’ we set the corresponding BAR register to
â€0’.</p>
</li>
-<li><p>hw/phb4: Use local_alloc for phb4 structures</p>
+<li><p class="first">hw/phb4: Use local_alloc for phb4 structures</p>
<p>Struct phb4 is fairly heavyweight at 283664 bytes. On systems with
6x PHBs per socket this results in using 3.2MB of heap space the PHB
structures alone. This is a fairly large chunk of our 12MB heap and
@@ -617,7 +626,7 @@ FDT blob.</p>
<p>This patch switches to using local_alloc() for the PHB structures
so they don’t consume too large a portion of our 12MB heap space.</p>
</li>
-<li><p>phb4: Fix typo in disable lane eq code</p>
+<li><p class="first">phb4: Fix typo in disable lane eq code</p>
<p>In this commit</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">commit</span> <span class="mi">737</span><span class="n">c0ba3d72b8aab05a765a9fc111a48faac0f75</span>
<span class="n">Author</span><span class="p">:</span> <span class="n">Michael</span> <span class="n">Neuling</span> <span class="o">&lt;</span><span class="n">mikey</span><span class="nd">@neuling</span><span class="o">.</span><span class="n">org</span><span class="o">&gt;</span>
@@ -629,7 +638,7 @@ so they don’t consume too large a portion of our 12MB heap space.</p>
<p>It worked previously as if only phase 2 (PH2) is set it, skips phase 2
and phase 3 (PH3).</p>
</li>
-<li><p>phb4: Don’t probe a PHB if its garded</p>
+<li><p class="first">phb4: Don’t probe a PHB if its garded</p>
<p>Presently phb4_probe_stack() causes an exception while trying to probe
a PHB if its garded. This causes skiboot to go into a reboot loop with
following exception log:</p>
@@ -654,18 +663,18 @@ PHB Version registers that cause the fatal MCE.</p>
populate the PHB Bar register fails, which indicates that there is
something wrong with the PHB.</p>
</li>
-<li><p>phb4: Workaround PHB errata with CFG write UR/CA errors</p>
+<li><p class="first">phb4: Workaround PHB errata with CFG write UR/CA errors</p>
<p>If the PHB encounters a UR or CA status on a CFG write, it will
incorrectly freeze the wrong PE. Instead of using the PE# specified
in the CONFIG_ADDRESS register, it will use the PE# of whatever
MMIO occurred last.</p>
<p>Work around this disabling freeze on such errors</p>
</li>
-<li><p>phb4: Handle allocation errors in phb4_eeh_dump_regs()</p>
+<li><p class="first">phb4: Handle allocation errors in phb4_eeh_dump_regs()</p>
<p>If the zalloc fails (and it can be a rather large allocation),
we will overwite memory at 0 instead of failing.</p>
</li>
-<li><p>phb4: Don’t try to access non-existent PEST entries</p>
+<li><p class="first">phb4: Don’t try to access non-existent PEST entries</p>
<p>In a POWER9 chip, some PHB4s have 256 PEs, some have 512.</p>
<p>Currently, the diagnostics code retrieves 512 unconditionally,
which is wrong and causes us to incorrectly report bogus values
@@ -677,14 +686,14 @@ for the “high” PEs on the small PHBs.</p>
<div class="section" id="capi2">
<h3>CAPI2<a class="headerlink" href="#capi2" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>phb4/capp: Use link width to allocate STQ engines to CAPP</p>
+<li><p class="first">phb4/capp: Use link width to allocate STQ engines to CAPP</p>
<p>Update phb4_init_capp_regs() to allocates STQ Engines to CAPP/PEC2
based on link width instead of always assuming it to x8.</p>
<p>Also re-factor the function slightly to evaluate the link-width only
once and cache it so that it can also be used to allocate DMA read
engines.</p>
</li>
-<li><p>phb4/capp: Update DMA read engines set in APC_FSM_READ_MASK based on link-width</p>
+<li><p class="first">phb4/capp: Update DMA read engines set in APC_FSM_READ_MASK based on link-width</p>
<p>Commit 47c09cdfe7a3(“phb4/capp: Calculate STQ/DMA read engines based
on link-width for PEC”) update the CAPP init sequence by calculating
the needed STQ/DMA-read engines based on link width and populating it
@@ -694,7 +703,7 @@ with the value set in CAPP APC FSM Read Machine Mask Register.</p>
width of the stack on PEC2 and populate the same values as previously
populated in PEC CAPP_CNTL register.</p>
</li>
-<li><p>capp: Fix the capp recovery timeout comparison</p>
+<li><p class="first">capp: Fix the capp recovery timeout comparison</p>
<p>The current capp recovery timeout control loop in
do_capp_recovery_scoms() uses a wrong comparison for return value of
tb_compare(). This may cause do_capp_recovery_scoms() to report an
@@ -702,7 +711,7 @@ timeout earlier than the 168ms stipulated time.</p>
<p>The patch fixes this by updating the loop timeout control branch in
do_capp_recovery_scoms() to use the correct enum tb_cmpval.</p>
</li>
-<li><p>phb4: Disable 32-bit MSI in capi mode</p>
+<li><p class="first">phb4: Disable 32-bit MSI in capi mode</p>
<p>If a capi device does a DMA write targeting an address lower than 4GB,
it does so through a 32-bit operation, per the PCI spec. In capi mode,
the first TVE entry is configured in bypass mode, so the address is
@@ -719,7 +728,7 @@ mode. Capi devices are 64-bit.</p>
<div class="section" id="nvlink2">
<h3>NVLINK2<a class="headerlink" href="#nvlink2" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>npu2: Add support for relaxed-ordering mode</p>
+<li><p class="first">npu2: Add support for relaxed-ordering mode</p>
<p>Some device drivers support out of order access to GPU memory. This does
not affect the CPU view of memory but it does affect the GPU view of
memory. It should only be enabled if the GPU driver has requested it.</p>
@@ -729,18 +738,19 @@ ordering to be enabled per PCIe root port. So the code here doesn’t
enable relaxed ordering until it has been explicitly requested for every
device on the port.</p>
</li>
-<li><p>Add the other 7 ATSD registers to the device tree.</p></li>
-<li><p>npu2/hw-procedures: Don’t open code NPU2_NTL_MISC_CFG2_BRICK_ENABLE</p>
+<li><p class="first">Add the other 7 ATSD registers to the device tree.</p>
+</li>
+<li><p class="first">npu2/hw-procedures: Don’t open code NPU2_NTL_MISC_CFG2_BRICK_ENABLE</p>
<p>Name this bit properly. There’s a lot more cleanup like this to be done,
but I’m catching this one now as part of some related changes.</p>
</li>
-<li><p>npu2/hw-procedures: Enable parity and credit overflow checks</p>
+<li><p class="first">npu2/hw-procedures: Enable parity and credit overflow checks</p>
<p>Enable these error checking features by setting the appropriate bits in
our one-off initialization of each “NTL Misc Config 2” register.</p>
<p>The exception is NDL RX parity checking, which should be disabled during
the link training procedures.</p>
</li>
-<li><p>npu2: Use correct kill type for TCE invalidation</p>
+<li><p class="first">npu2: Use correct kill type for TCE invalidation</p>
<p>kill_type is enum of OPAL_PCI_TCE_KILL_PAGES, OPAL_PCI_TCE_KILL_PE,
OPAL_PCI_TCE_KILL_ALL and phb4_tce_kill() gets it right but
npu2_tce_kill() uses OPAL_PCI_TCE_KILL which is an OPAL API token.</p>
@@ -751,8 +761,9 @@ npu2_tce_kill() uses OPAL_PCI_TCE_KILL which is an OPAL API token.</p>
<div class="section" id="opencapi">
<h3>OpenCAPI<a class="headerlink" href="#opencapi" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>Support OpenCAPI on Witherspoon platform</p></li>
-<li><p>npu2-opencapi: Enable presence detection on ZZ</p>
+<li><p class="first">Support OpenCAPI on Witherspoon platform</p>
+</li>
+<li><p class="first">npu2-opencapi: Enable presence detection on ZZ</p>
<p>Presence detection for opencapi adapters was broken for ZZ planars v3
and below. All ZZ systems currently used in the lab have had their
planar upgraded, so we can now remove the override we had to force
@@ -764,7 +775,7 @@ change. In the unlikely case somebody tries opencapi on an old ZZ, the
presence detection through i2c will show that no adapter is present
and skiboot won’t try to access or train the link.</p>
</li>
-<li><p>npu2-opencapi: Don’t send commands to NPU when link is down</p>
+<li><p class="first">npu2-opencapi: Don’t send commands to NPU when link is down</p>
<p>Even if an opencapi link is down, we currently always try to issue a
config read operation when probing for PCI devices, because of the
default scan map used for an opencapi PHB. The config operation fails,
@@ -774,11 +785,11 @@ there’s no reason to do the config operation. To fix it, we keep the
scan map blank by default, and only add a device once the link is
trained.</p>
</li>
-<li><p>opal/hmi: Catch NPU2 HMIs for opencapi</p>
+<li><p class="first">opal/hmi: Catch NPU2 HMIs for opencapi</p>
<p>HMIs for NPU2 are filtered with the â€compatible’ string of the PHB, so
add opencapi to the mix.</p>
</li>
-<li><p>occ: Wait if OCC GPU presence status not immediately available</p>
+<li><p class="first">occ: Wait if OCC GPU presence status not immediately available</p>
<p>It takes a few seconds for the OCC to set everything up in order to read
GPU presence. At present, we try to kick off OCC initialisation as early as
possible to maximise the time it has to read GPU presence.</p>
@@ -787,7 +798,7 @@ occ_get_gpu_presence() so that on the first time we try to get GPU presence
we keep trying for up to 2 seconds. Experimentally this seems to be
adequate.</p>
</li>
-<li><p>hw/npu2-hw-procedures: Enable RX auto recal on OpenCAPI links</p>
+<li><p class="first">hw/npu2-hw-procedures: Enable RX auto recal on OpenCAPI links</p>
<p>The RX_RC_ENABLE_AUTO_RECAL flag is required on OpenCAPI but not NVLink.</p>
<p>Traditionally, Hostboot sets this value according to the machine type.
However, now that Witherspoon supports both NVLink and OpenCAPI, it can’t
@@ -795,7 +806,7 @@ tell whether or not a link is OpenCAPI.</p>
<p>So instead, set it in skiboot, where it will only be triggered after we’ve
done device detection and found an OpenCAPI device.</p>
</li>
-<li><p>hw/npu2-opencapi: Fix setting of supported OpenCAPI templates</p>
+<li><p class="first">hw/npu2-opencapi: Fix setting of supported OpenCAPI templates</p>
<p>In opal_npu_tl_set(), we made a typo that means the OPAL_NPU_TL_SET call
may not clear the enable bits for templates that were previously enabled
but are now disabled.</p>
@@ -807,8 +818,9 @@ TEMP{1,3}_EN.</p>
<div class="section" id="barreleye-g2-and-zaius-platforms">
<h3>Barreleye G2 and Zaius platforms<a class="headerlink" href="#barreleye-g2-and-zaius-platforms" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>zaius: Add a slot table</p></li>
-<li><p>zaius: Add slots for the Barreleye G2 HDD rack</p>
+<li><p class="first">zaius: Add a slot table</p>
+</li>
+<li><p class="first">zaius: Add slots for the Barreleye G2 HDD rack</p>
<p>The Barreleye G2 is distinct from the Zaius in that it features a 24
Bay NVMe/SATA HDD rack. To provide meaningful slot names for each NVMe
device we need to define a slot table for the NVMe capable HDD bays.</p>
@@ -832,7 +844,7 @@ of the 9797 that supports the HDD rack.</p>
<div class="section" id="fsp-based-platforms-firenze-and-zz">
<h3>FSP based platforms (firenze and ZZ)<a class="headerlink" href="#fsp-based-platforms-firenze-and-zz" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>phb4/capp: Update the expected Eye-catcher for CAPP ucode lid</p>
+<li><p class="first">phb4/capp: Update the expected Eye-catcher for CAPP ucode lid</p>
<p>Currently on a FSP based P9 system load_capp_code() expects CAPP ucode
lid header to have eye-catcher magic of â€CAPPPSLL’. However skiboot
currently supports CAPP ucode only lids that have a eye-catcher magic
@@ -844,7 +856,7 @@ error message:</p>
<p>We fix this issue by updating load_capp_ucode() to use the eye-catcher
value of â€CAPPLIDH’ instead of â€CAPPPSLL’.</p>
</li>
-<li><p>FSP: Improve Reset/Reload log message</p>
+<li><p class="first">FSP: Improve Reset/Reload log message</p>
<p>Below message is confusing. Lets make it clear.</p>
<p>FSP sends “R/R complete notification” whenever there is a dump. We use <cite>flag</cite>
to identify whether its its R/R completion -OR- just new dump notification.</p>
@@ -859,7 +871,7 @@ to identify whether its its R/R completion -OR- just new dump notification.</p>
<div class="section" id="witherspoon-platform">
<h3>Witherspoon platform<a class="headerlink" href="#witherspoon-platform" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>platforms/astbmc/witherspoon: Implement OpenCAPI support</p>
+<li><p class="first">platforms/astbmc/witherspoon: Implement OpenCAPI support</p>
<p>OpenCAPI on Witherspoon is slightly more involved than on Zaius and ZZ, due
to the OpenCAPI links using the SXM2 connectors that are used for NVLink
GPUs.</p>
@@ -878,7 +890,6 @@ things like device reset, so for now, we only enable 1 brick per device.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -929,15 +940,17 @@ things like device reset, so for now, we only enable 1 brick per device.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -954,15 +967,14 @@ things like device reset, so for now, we only enable 1 brick per device.</p>
<li class="right" >
<a href="skiboot-6.2.html" title="skiboot-6.2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.2-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.2-rc2.html b/doc/release-notes/skiboot-6.2-rc2.html
index 5c688be..52e24f5 100644
--- a/doc/release-notes/skiboot-6.2-rc2.html
+++ b/doc/release-notes/skiboot-6.2-rc2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.2-rc2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.2-rc2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.2-rc1.html" title="skiboot-6.2-rc1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.2-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -56,16 +57,18 @@ stable releases).</p>
<p>For how the skiboot stable releases work, see <a class="reference internal" href="../process/stable-skiboot-rules.html#stable-rules"><span class="std std-ref">Skiboot stable tree rules and releases</span></a> for details.</p>
<p>Over <a class="reference internal" href="skiboot-6.2-rc1.html#skiboot-6-2-rc1"><span class="std std-ref">skiboot-6.2-rc1</span></a>, we have the following changes:</p>
<ul>
-<li><p>npu2-opencapi: Log extra information on link training failure</p></li>
-<li><p>npu2-opencapi: Detect if link trained in degraded mode</p></li>
-<li><p>platform/firenze: Fix branch-to-null crash</p>
+<li><p class="first">npu2-opencapi: Log extra information on link training failure</p>
+</li>
+<li><p class="first">npu2-opencapi: Detect if link trained in degraded mode</p>
+</li>
+<li><p class="first">platform/firenze: Fix branch-to-null crash</p>
<p>When the bus alloc and free methods were removed we missed a case in the
Firenze platform slot code that relied on the the bus-specific method to
the bus pointer in the request structure. This results in a
branch-to-null during boot and a crash. This patch fixes it by
initialising it manually here.</p>
</li>
-<li><p>libflash: Don’t merge ECC-protected ranges</p>
+<li><p class="first">libflash: Don’t merge ECC-protected ranges</p>
<p>Libflash currently merges contiguous ECC-protected ranges, but doesn’t
check that the ECC bytes at the end of the first and start of the second
range actually match sanely. More importantly, if blocklevel_read() is
@@ -84,11 +87,11 @@ regions like below:</p>
</pre></div>
</div>
</li>
-<li><p>libflash: Restore blocklevel tests</p>
+<li><p class="first">libflash: Restore blocklevel tests</p>
<p>This fell out in f58be46 “libflash/test: Rewrite Makefile.check to
improve scalability”. Add it back in as test-blocklevel.</p>
</li>
-<li><p>Warn on long OPAL calls</p>
+<li><p class="first">Warn on long OPAL calls</p>
<p>Measure entry/exit time for OPAL calls and warn appropriately if the
calls take too long (&gt;100ms gets us a DEBUG log, &gt; 1000ms gets us a
warning).</p>
@@ -97,11 +100,15 @@ warning).</p>
<div class="section" id="ci-testing-and-utilities">
<h2>CI, testing, and utilities<a class="headerlink" href="#ci-testing-and-utilities" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>travis: Coverity fixed their SSL cert</p></li>
-<li><p>opal-ci: Use ubuntu:rolling for Ubuntu latest image</p></li>
-<li><p>ffspart: Add test for eraseblock size</p></li>
-<li><p>ffspart: Add toc test</p></li>
-<li><p>hdata/test: workaround dtc bugs</p>
+<li><p class="first">travis: Coverity fixed their SSL cert</p>
+</li>
+<li><p class="first">opal-ci: Use ubuntu:rolling for Ubuntu latest image</p>
+</li>
+<li><p class="first">ffspart: Add test for eraseblock size</p>
+</li>
+<li><p class="first">ffspart: Add toc test</p>
+</li>
+<li><p class="first">hdata/test: workaround dtc bugs</p>
<p>In dtc v1.4.5 to at least v1.4.7 there have been a few bugs introduced
that change the layout of what’s produced in the dts. In order to be
immune from them, we should use the (provided) dtdiff utility, but we
@@ -116,7 +123,6 @@ with recent Linux distros such as Fedora 29.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -144,15 +150,17 @@ with recent Linux distros such as Fedora 29.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -169,15 +177,14 @@ with recent Linux distros such as Fedora 29.</p>
<li class="right" >
<a href="skiboot-6.2-rc1.html" title="skiboot-6.2-rc1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.2-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.2.1.html b/doc/release-notes/skiboot-6.2.1.html
index 8452826..8edbc57 100644
--- a/doc/release-notes/skiboot-6.2.1.html
+++ b/doc/release-notes/skiboot-6.2.1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.2.1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.2.1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.2-rc2.html" title="skiboot-6.2-rc2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.2.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,26 +53,28 @@
due to the bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul>
-<li><p>libflash/ecc: Fix compilation warning with gcc9</p>
+<li><p class="first">libflash/ecc: Fix compilation warning with gcc9</p>
<p>Fixes: <a class="reference external" href="https://github.com/open-power/skiboot/issues/218">https://github.com/open-power/skiboot/issues/218</a></p>
</li>
-<li><p>core/opal: Print PIR value in exit path, useful for debugging</p></li>
-<li><p>core/ipmi: Improve error message</p></li>
-<li><p>firmware-versions: Add test case for parsing VERSION</p>
+<li><p class="first">core/opal: Print PIR value in exit path, useful for debugging</p>
+</li>
+<li><p class="first">core/ipmi: Improve error message</p>
+</li>
+<li><p class="first">firmware-versions: Add test case for parsing VERSION</p>
<p>If we hit a entry in VERSION that is larger than our
buffer size, we skip over it gracefully rather than overwriting the
stack. This is only a problem if VERSION isn’t trusted, which as of
4b8cc05a94513816d43fb8bd6178896b430af08f it is verified as part of
Secure Boot.</p>
</li>
-<li><p>core/cpu: HID update race</p>
+<li><p class="first">core/cpu: HID update race</p>
<p>If the per-core HID register is updated concurrently by multiple
threads, updates can get lost. This has been observed during fast
reboot where the HILE bit does not get cleared on all cores, which
can cause machine check exception interrupts to crash.</p>
<p>Fix this by only updating HID on thread0.</p>
</li>
-<li><p>cpufeatures: Always advertise POWER8NVL as DD2</p>
+<li><p class="first">cpufeatures: Always advertise POWER8NVL as DD2</p>
<p>Despite the major version of PVR being 1 (0x004c0100) for POWER8NVL,
these chips are functionally equalent to P8/P8E DD2 levels.</p>
<p>This advertises POWER8NVL as DD2. As the result, skiboot adds
@@ -80,14 +83,14 @@ the linux kernel can use hypervisor doorbell messages to wake secondary
threads; otherwise “KVM: CPU %d seems to be stuck” would appear because
of missing LPCR_PECEDH.</p>
</li>
-<li><p>p9dsu: Fix p9dsu slot tables</p>
+<li><p class="first">p9dsu: Fix p9dsu slot tables</p>
<p>Set the attributes on the slot tables to account for
builtin or pluggable etypes, this will allow pci
enumeration to calculate subordinate buses.</p>
<p>Update some slot label strings.</p>
<p>Add WIO Slot5 which is standard on the ESS config.</p>
</li>
-<li><p>core/lock: Stop drop_my_locks() from always causing abort</p>
+<li><p class="first">core/lock: Stop drop_my_locks() from always causing abort</p>
<p>The loop in drop_my_locks() looks like this:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">while</span><span class="p">((</span><span class="n">l</span> <span class="o">=</span> <span class="n">list_pop</span><span class="p">(</span><span class="o">&amp;</span><span class="n">this_cpu</span><span class="p">()</span><span class="o">-&gt;</span><span class="n">locks_held</span><span class="p">,</span> <span class="n">struct</span> <span class="n">lock</span><span class="p">,</span> <span class="nb">list</span><span class="p">))</span> <span class="o">!=</span> <span class="n">NULL</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">warn</span><span class="p">)</span>
@@ -110,7 +113,7 @@ CPU 0000 Backtrace:
</div>
<p>To fix this, change list_pop() to list_top().</p>
</li>
-<li><p>p9dsu: Fix p9dsu default variant</p>
+<li><p class="first">p9dsu: Fix p9dsu default variant</p>
<p>Add the default when no riser_id is returned from the ipmi query.</p>
<p>Allow a little more time for BMC reply and cleanup some label strings.</p>
</li>
@@ -118,7 +121,6 @@ CPU 0000 Backtrace:
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -138,15 +140,17 @@ CPU 0000 Backtrace:
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -163,15 +167,14 @@ CPU 0000 Backtrace:
<li class="right" >
<a href="skiboot-6.2-rc2.html" title="skiboot-6.2-rc2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.2.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.2.2.html b/doc/release-notes/skiboot-6.2.2.html
index 496ded8..53161b9 100644
--- a/doc/release-notes/skiboot-6.2.2.html
+++ b/doc/release-notes/skiboot-6.2.2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.2.2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.2.2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.2.1.html" title="skiboot-6.2.1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.2.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -55,7 +56,7 @@ for powercap, ipmi-hiomap, astbmc and BMC communication driver.</p>
<div class="section" id="powercap">
<h2>powercap<a class="headerlink" href="#powercap" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>powercap: occ: Fix the powercapping range allowed for user</p>
+<li><p class="first">powercap: occ: Fix the powercapping range allowed for user</p>
<p>OCC provides two limits for minimum powercap. One being hard powercap
minimum which is guaranteed by OCC and the other one is a soft
powercap minimum which is lesser than hard-min and may or may not be
@@ -70,10 +71,10 @@ limit.</p>
<div class="section" id="astbmc">
<h2>ASTBMC<a class="headerlink" href="#astbmc" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>astbmc: Enable IPMI HIOMAP for AMI platforms</p>
+<li><p class="first">astbmc: Enable IPMI HIOMAP for AMI platforms</p>
<p>Required for Habanero, Palmetto and Romulus.</p>
</li>
-<li><p>astbmc: Try IPMI HIOMAP for P8 (again)</p>
+<li><p class="first">astbmc: Try IPMI HIOMAP for P8 (again)</p>
<p>The HIOMAP protocol was developed after the release of P8 in preparation
for P9. As a consequence P9 always uses it, but it has rarely been
enabled for P8. P8DTU has recently added IPMI HIOMAP support to its BMC
@@ -83,7 +84,7 @@ the fallback was to mbox, which will only work for P9.</p>
<p>Tested on Garrison, Palmetto without HIOMAP, Palmetto with HIOMAP, and
Witherspoon.</p>
</li>
-<li><p>ast-io: Rework ast_sio_is_enabled() test sequence</p>
+<li><p class="first">ast-io: Rework ast_sio_is_enabled() test sequence</p>
<p>The postcondition of probing with a lock sequence is easier to make
correct than with unlock. The original implementation left SuperIO
locked after execution which broke an assumption of some callers.</p>
@@ -95,8 +96,9 @@ Witherspoon.</p>
<div class="section" id="p8dtu">
<h2>P8DTU<a class="headerlink" href="#p8dtu" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>p8dtu: Enable HIOMAP support</p></li>
-<li><p>p8dtu: Configure BMC graphics</p>
+<li><p class="first">p8dtu: Enable HIOMAP support</p>
+</li>
+<li><p class="first">p8dtu: Configure BMC graphics</p>
<p>We can no-longer read the values from the BMC in the way we have in the
past. Values were provided by Eric Chen of SMC.</p>
</li>
@@ -105,20 +107,21 @@ past. Values were provided by Eric Chen of SMC.</p>
<div class="section" id="ipmi-hiomap">
<h2>IPMI-HIOMAP<a class="headerlink" href="#ipmi-hiomap" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>ipmi-hiomap test case enhancements/fixes.</p></li>
-<li><p>libflash/ipmi-hiomap: Enforce message size for empty response</p>
+<li><p class="first">ipmi-hiomap test case enhancements/fixes.</p>
+</li>
+<li><p class="first">libflash/ipmi-hiomap: Enforce message size for empty response</p>
<p>The protocol defines the response to the associated messages as empty
except for the command ID and sequence fields. If the BMC is returning
extra data consider the message malformed.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Remove unused close handling</p>
+<li><p class="first">libflash/ipmi-hiomap: Remove unused close handling</p>
<p>Issuing a HIOMAP_C_CLOSE is not required by the protocol specification,
rather a close can be implicit in a subsequent
CREATE_{READ,WRITE}_WINDOW request. The implicit close provides an
opportunity to reduce LPC traffic and the implementation takes up that
optimisation, so remove the case from the IPMI callback handler.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Overhaul event handling</p>
+<li><p class="first">libflash/ipmi-hiomap: Overhaul event handling</p>
<p>Reworking the event handling was inspired by a bug report by Vasant
where the host would get wedged on multiple flash access attempts in the
face of a persistent error state on the BMC-side. The cause of this bug
@@ -129,18 +132,18 @@ HIOMAP_E_DAEMON_READY is clear in the prior calls.</p>
<p>Regardless, there were other correctness and efficiency problems with
the handling strategy:</p>
<ul class="simple">
-<li><p>Ack-able event state was not restored in the face of errors in the
-process of re-establishing protocol state</p></li>
-<li><p>It forced needless window restoration with respect to the context in
-which ipmi_hiomap_handle_events() was called.</p></li>
-<li><p>Tests for HIOMAP_E_DAEMON_READY and HIOMAP_E_FLASH_LOST were redundant
-with the overhauled error handling introduced in the previous patch</p></li>
+<li>Ack-able event state was not restored in the face of errors in the
+process of re-establishing protocol state</li>
+<li>It forced needless window restoration with respect to the context in
+which ipmi_hiomap_handle_events() was called.</li>
+<li>Tests for HIOMAP_E_DAEMON_READY and HIOMAP_E_FLASH_LOST were redundant
+with the overhauled error handling introduced in the previous patch</li>
</ul>
<p>Fix all of the above issues and add comments to explain the event
handling flow.</p>
<p>Tests for correctness follow later in the series.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Overhaul error handling</p>
+<li><p class="first">libflash/ipmi-hiomap: Overhaul error handling</p>
<p>The aim is to improve the robustness with respect to absence of the
BMC-side daemon. The current error handling roughly mirrors what was
done for the mailbox implementation, but there’s room for improvement.</p>
@@ -158,30 +161,31 @@ operation no attempt is made to recover it on the spot, instead the
error is returned up the stack and the caller can choose how it wishes
to respond.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Fix leak of msg in callback</p></li>
+<li><p class="first">libflash/ipmi-hiomap: Fix leak of msg in callback</p>
+</li>
</ul>
</div>
<div class="section" id="bmc-communication">
<h2>BMC communication<a class="headerlink" href="#bmc-communication" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>core/ipmi: Add ipmi sync messages to top of the list</p>
+<li><p class="first">core/ipmi: Add ipmi sync messages to top of the list</p>
<p>In ipmi_queue_msg_sync() path OPAL will wait until it gets response from
BMC. If we do not get response ontime we may endup in kernel hardlockups.
Hence lets add sync messages to top of the queue. This will reduces the
chance of hardlockups.</p>
</li>
-<li><p>hw/bt: Introduce separate list for synchronous messages</p>
+<li><p class="first">hw/bt: Introduce separate list for synchronous messages</p>
<p>BT send logic always sends top of bt message list to BMC. Once BMC reads the
message, it clears the interrupt and bt_idle() becomes true.</p>
<p>bt_add_ipmi_msg_head() adds message to top of the list. If bt message list
is not empty then:</p>
<blockquote>
<div><ul class="simple">
-<li><p>if bt_idle() is true then we will endup sending message to BMC before
+<li>if bt_idle() is true then we will endup sending message to BMC before
getting response from BMC for inflight message. Looks like on some
-BMC implementation this results in message timeout.</p></li>
-<li><p>else we endup starting message timer without actually sending message
-to BMC.. which is not correct.</p></li>
+BMC implementation this results in message timeout.</li>
+<li>else we endup starting message timer without actually sending message
+to BMC.. which is not correct.</li>
</ul>
</div></blockquote>
<p>This patch introduces separate list to track synchronous messages.
@@ -190,14 +194,14 @@ will always process this queue before processing normal queue.</p>
<p>Finally this patch introduces new variable (inflight_bt_msg) to track
inflight message. This will point to current inflight message.</p>
</li>
-<li><p>hw/bt: Fix message retry handler</p>
+<li><p class="first">hw/bt: Fix message retry handler</p>
<p>In some corner cases (like BMC reboot), bt_send_and_unlock() starts
message timer, but won’t send message to BMC as driver is not free to
send message. bt_expire_old_msg() function enables H2B interrupt without
actually sending message.</p>
<p>This patch fixes above issue.</p>
</li>
-<li><p>ipmi/power: Fix system reboot issue</p>
+<li><p class="first">ipmi/power: Fix system reboot issue</p>
<p>Kernel makes reboot/shudown OPAL call for reboot/shutdown. Once kernel
gets response from OPAL it runs opal_poll_events() until firmware
handles the request.</p>
@@ -210,7 +214,7 @@ reboot/shutdown the system using BMC interface.</p>
then it will resend the message. At some stage BMC will be ready to accept
message and handles IPMI message.</p>
</li>
-<li><p>hw/bt: Add backend interface to disable ipmi message retry option</p>
+<li><p class="first">hw/bt: Add backend interface to disable ipmi message retry option</p>
<p>During boot OPAL makes IPMI_GET_BT_CAPS call to BMC to get BT interface
capabilities which includes IPMI message max resend count, message
timeout, etc,. Most of the time OPAL gets response from BMC within
@@ -228,7 +232,7 @@ greatly reduces kernel hardlock up issues.</p>
<p>This is short term fix. Long term solution is to convert all synchronous
messages to asynhrounous one.</p>
</li>
-<li><p>qemu: bt device isn’t always hanging off /</p>
+<li><p class="first">qemu: bt device isn’t always hanging off /</p>
<p>Just use the normal for_each_compatible instead.</p>
<p>Otherwise in the qemu model as executed by op-test,
we wouldn’t go down the astbmc_init() path, thus not having flash.</p>
@@ -238,7 +242,7 @@ we wouldn’t go down the astbmc_init() path, thus not having flash.</p>
<div class="section" id="phb3">
<h2>PHB3<a class="headerlink" href="#phb3" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hw/phb3/naples: Disable D-states</p>
+<li><p class="first">hw/phb3/naples: Disable D-states</p>
<p>Putting “Mellanox Technologies MT27700 Family [ConnectX-4] [15b3:1013]”
(more precisely, the second of 2 its PCI functions, no matter in what
order) into the D3 state causes EEH with the “PCT timeout” error.
@@ -252,7 +256,6 @@ installing a config space access filter (copied from PHB4).</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -285,15 +288,17 @@ installing a config space access filter (copied from PHB4).</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -310,15 +315,14 @@ installing a config space access filter (copied from PHB4).</p>
<li class="right" >
<a href="skiboot-6.2.1.html" title="skiboot-6.2.1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.2.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.2.3.html b/doc/release-notes/skiboot-6.2.3.html
index a2f6132..810ef49 100644
--- a/doc/release-notes/skiboot-6.2.3.html
+++ b/doc/release-notes/skiboot-6.2.3.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.2.3 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.2.3 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.2.2.html" title="skiboot-6.2.2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.2.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@
due to the bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul>
-<li><p>p9dsu: Undo slot label name changes</p>
+<li><p class="first">p9dsu: Undo slot label name changes</p>
<p>During some code updates the slot labels were updated to reflect
the phb layout, however expectations were that the slot labels be
aligned with the riser card slots and not the system planar slots.</p>
@@ -70,10 +71,10 @@ at all. It also doesn’t help that <em>consistently</em> there is <em>never</em
any review on slot tables, and we’ve had things be wrong in the past.
Combine this with not upstream Hostboot patches.]</p>
</li>
-<li><p>p9dsu: Fix slot labels for p9dsu2u</p>
+<li><p class="first">p9dsu: Fix slot labels for p9dsu2u</p>
<p>Update the slot labels for the p9dsu2u tables.</p>
</li>
-<li><p>fast-reboot: occ: Call occ_pstates_init() on fast-reset on all machines</p>
+<li><p class="first">fast-reboot: occ: Call occ_pstates_init() on fast-reset on all machines</p>
<p>Commit 815417dcda2e (“init, occ: Initialise OCC earlier on BMC systems”)
conditionally invoked occ_pstates_init() only on FSP based systems in
load_and_boot_kernel(). Due to this pstate table is re-parsed on FSP
@@ -84,7 +85,6 @@ this by invoking occ_pstates_init() on all boxes during fast-reboot.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -104,15 +104,17 @@ this by invoking occ_pstates_init() on all boxes during fast-reboot.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -129,15 +131,14 @@ this by invoking occ_pstates_init() on all boxes during fast-reboot.</p>
<li class="right" >
<a href="skiboot-6.2.2.html" title="skiboot-6.2.2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.2.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.2.4.html b/doc/release-notes/skiboot-6.2.4.html
index 61022e3..ddaec3e 100644
--- a/doc/release-notes/skiboot-6.2.4.html
+++ b/doc/release-notes/skiboot-6.2.4.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.2.4 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.2.4 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.2.3.html" title="skiboot-6.2.3"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.2.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@
due to the bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul>
-<li><p>core/flash: Retry requests as necessary in flash_load_resource()</p>
+<li><p class="first">core/flash: Retry requests as necessary in flash_load_resource()</p>
<p>We would like to successfully boot if we have a dependency on the BMC
for flash even if the BMC is not current ready to service flash
requests. On the assumption that it will become ready, retry for several
@@ -89,7 +90,7 @@ CPU 0040 Backtrace:
no delay for e.g. the host kernel, just for asynchronously loaded
resources during boot.</p>
</li>
-<li><p>pci/iov: Remove skiboot VF tracking</p>
+<li><p class="first">pci/iov: Remove skiboot VF tracking</p>
<p>This feature was added a few years ago in response to a request to make
the MaxPayloadSize (MPS) field of a Virtual Function match the MPS of the
Physical Function that hosts it.</p>
@@ -105,13 +106,13 @@ enabled and then disabled prior to rebooting. This patch fixes the bug by
removing the code entirely. This patch has no impact on SR-IOV support on
the host operating system.</p>
</li>
-<li><p>astbmc: Handle failure to initialise raw flash</p>
+<li><p class="first">astbmc: Handle failure to initialise raw flash</p>
<p>Initialising raw flash lead to a dead assignment to rc. Check the return
code and take the failure path as necessary. Both before and after the
fix we see output along the lines of the following when flash_init()
fails:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">53.283182881</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">IRQ</span><span class="p">:</span> <span class="n">Registering</span> <span class="mf">0800..0</span><span class="n">ff7</span> <span class="n">ops</span> <span class="o">@</span><span class="mh">0x300d4b98</span> <span class="p">(</span><span class="n">data</span> <span class="mh">0x3052b9d8</span><span class="p">)</span>
-<span class="p">[</span> <span class="mf">53.283184335</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">IRQ</span><span class="p">:</span> <span class="n">Registering</span> <span class="mi">0</span><span class="n">ff8</span><span class="o">.</span><span class="mf">.0</span><span class="n">fff</span> <span class="n">ops</span> <span class="o">@</span><span class="mh">0x300d4bc8</span> <span class="p">(</span><span class="n">data</span> <span class="mh">0x3052b9d8</span><span class="p">)</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">53.283182881</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">IRQ</span><span class="p">:</span> <span class="n">Registering</span> <span class="mf">0800.</span><span class="o">.</span><span class="mi">0</span><span class="n">ff7</span> <span class="n">ops</span> <span class="nd">@0x300d4b98</span> <span class="p">(</span><span class="n">data</span> <span class="mh">0x3052b9d8</span><span class="p">)</span>
+<span class="p">[</span> <span class="mf">53.283184335</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">IRQ</span><span class="p">:</span> <span class="n">Registering</span> <span class="mi">0</span><span class="n">ff8</span><span class="o">..</span><span class="mi">0</span><span class="n">fff</span> <span class="n">ops</span> <span class="nd">@0x300d4bc8</span> <span class="p">(</span><span class="n">data</span> <span class="mh">0x3052b9d8</span><span class="p">)</span>
<span class="p">[</span> <span class="mf">53.283185513</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">PHB</span><span class="c1">#0000: Initializing PHB...</span>
<span class="p">[</span> <span class="mf">53.288260827</span><span class="p">,</span><span class="mi">4</span><span class="p">]</span> <span class="n">FLASH</span><span class="p">:</span> <span class="n">Can</span><span class="s1">&#39;t load resource id:0. No system flash found</span>
<span class="p">[</span> <span class="mf">53.288354442</span><span class="p">,</span><span class="mi">4</span><span class="p">]</span> <span class="n">FLASH</span><span class="p">:</span> <span class="n">Can</span><span class="s1">&#39;t load resource id:1. No system flash found</span>
@@ -148,19 +149,19 @@ of executing from unexpected memory locations. As such the issue is
reduced to down to a fix for poor error hygene in the original change
and a resolution for a Coverity warning (famous last words etc).</p>
</li>
-<li><p>hw/xscom: Enable sw xstop by default on p9</p>
+<li><p class="first">hw/xscom: Enable sw xstop by default on p9</p>
<p>This was disabled at some point during bringup to make life easier for
the lab folks trying to debug NVLink issues. This hack really should
have never made it out into the wild though, so we now have the
following situation occuring in the field:</p>
<blockquote>
<div><ol class="arabic simple">
-<li><p>A bad happens</p></li>
-<li><p>The host kernel recieves an unrecoverable HMI and calls into OPAL to
-request a platform reboot.</p></li>
-<li><p>OPAL rejects the reboot attempt and returns to the kernel with
-OPAL_PARAMETER.</p></li>
-<li><p>Kernel panics and attempts to kexec into a kdump kernel.</p></li>
+<li>A bad happens</li>
+<li>The host kernel recieves an unrecoverable HMI and calls into OPAL to
+request a platform reboot.</li>
+<li>OPAL rejects the reboot attempt and returns to the kernel with
+OPAL_PARAMETER.</li>
+<li>Kernel panics and attempts to kexec into a kdump kernel.</li>
</ol>
</div></blockquote>
<p>A side effect of the HMI seems to be CPUs becoming stuck which results
@@ -172,7 +173,7 @@ state as a side effect of the HMI.</p>
default. If people still want to turn it off they can using the nvram
override.</p>
</li>
-<li><p>opal/hmi: Initialize the hmi event with old value of TFMR.</p>
+<li><p class="first">opal/hmi: Initialize the hmi event with old value of TFMR.</p>
<p>Do this before we fix TFAC errors. Otherwise the event at host console
shows no thread error reported in TFMR register.</p>
<p>Without this patch the console event show TFMR with no thread error:
@@ -191,7 +192,7 @@ shows no thread error reported in TFMR register.</p>
</pre></div>
</div>
</li>
-<li><p>libflash/ipmi-hiomap: Fix blocks count issue</p>
+<li><p class="first">libflash/ipmi-hiomap: Fix blocks count issue</p>
<p>We convert data size to block count and pass block count to BMC.
If data size is not block aligned then we endup sending block count
less than actual data. BMC will write partial data to flash memory.</p>
@@ -206,7 +207,7 @@ less than actual data. BMC will write partial data to flash memory.</p>
flush data to flash.</p>
<p>Lets fix this issue by adjusting block count before sending it to BMC.</p>
</li>
-<li><p>Fix hang in pnv_platform_error_reboot path due to TOD failure.</p>
+<li><p class="first">Fix hang in pnv_platform_error_reboot path due to TOD failure.</p>
<p>On TOD failure, with TB stuck, when linux heads down to
pnv_platform_error_reboot() path due to unrecoverable hmi event, the panic
cpu gets stuck in OPAL inside ipmi_queue_msg_sync(). At this time, rest
@@ -257,15 +258,15 @@ returns immediately without calling pollers and hence we end up looping
forever. This patch fixes this hang by calling opal_run_pollers() in TB
failed state as well.</p>
</li>
-<li><p>core/ipmi: Print correct netfn value</p></li>
-<li><p>libffs: Fix string truncation gcc warning.</p>
+<li><p class="first">core/ipmi: Print correct netfn value</p>
+</li>
+<li><p class="first">libffs: Fix string truncation gcc warning.</p>
<p>Use memcpy as other libffs functions do.</p>
</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -285,15 +286,17 @@ failed state as well.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -310,15 +313,14 @@ failed state as well.</p>
<li class="right" >
<a href="skiboot-6.2.3.html" title="skiboot-6.2.3"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.2.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.2.html b/doc/release-notes/skiboot-6.2.html
index 696d92f..233f633 100644
--- a/doc/release-notes/skiboot-6.2.html
+++ b/doc/release-notes/skiboot-6.2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.1-rc1.html" title="skiboot-6.1-rc1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -62,7 +63,7 @@ did).</p>
<h2>General<a class="headerlink" href="#general" title="Permalink to this headline">¶</a></h2>
<p>Since v6.2-rc2:</p>
<ul>
-<li><p>i2c: Fix i2c request hang during opal init if timers are not checked</p>
+<li><p class="first">i2c: Fix i2c request hang during opal init if timers are not checked</p>
<p>If an i2c request cannot go through the first time, because the bus is
found in error and need a reset or it’s locked by the OCC for example,
the underlying i2c implementation is using timers to manage the
@@ -76,7 +77,7 @@ request to complete and it seems to be taking a while.</p>
</ul>
<p>Since v6.1:</p>
<ul>
-<li><p>cpu: Quieten OS endian switch messages</p>
+<li><p class="first">cpu: Quieten OS endian switch messages</p>
<p>Users see these when loading an OS from Petitboot:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">119.486794100</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">OPAL</span><span class="p">:</span> <span class="n">Switch</span> <span class="n">to</span> <span class="n">big</span><span class="o">-</span><span class="n">endian</span> <span class="n">OS</span>
<span class="p">[</span> <span class="mf">120.022302604</span><span class="p">,</span><span class="mi">5</span><span class="p">]</span> <span class="n">OPAL</span><span class="p">:</span> <span class="n">Switch</span> <span class="n">to</span> <span class="n">little</span><span class="o">-</span><span class="n">endian</span> <span class="n">OS</span>
@@ -86,18 +87,18 @@ request to complete and it seems to be taking a while.</p>
on. Switch them to PR_INFO so they still appear in the log, but not on
the serial console.</p>
</li>
-<li><p>Recognise signed VERSION partition</p>
+<li><p class="first">Recognise signed VERSION partition</p>
<p>A few things need to change to support a signed VERSION partition:</p>
<ul class="simple">
-<li><p>A signed VERSION partition will be 4K + SECURE_BOOT_HEADERS_SIZE (4K).</p></li>
-<li><p>The VERSION partition needs to be loaded after secure/trusted boot is
-set up, and therefore after nvram_init().</p></li>
-<li><p>Added to the trustedboot resources array.</p></li>
+<li>A signed VERSION partition will be 4K + SECURE_BOOT_HEADERS_SIZE (4K).</li>
+<li>The VERSION partition needs to be loaded after secure/trusted boot is
+set up, and therefore after nvram_init().</li>
+<li>Added to the trustedboot resources array.</li>
</ul>
<p>This also moves the ipmi_dt_add_bmc_info() call to after
flash_dt_add_fw_version() since it adds info to ibm,firmware-versions.</p>
</li>
-<li><p>Run pollers in time_wait() when not booting</p>
+<li><p class="first">Run pollers in time_wait() when not booting</p>
<p>This only bit us hard with hiomap in one scenario.</p>
<p>Our OPAL API has been OPAL_POLL_EVENTS may be needed to make forward
progress on ongoing operations, and the internal to skiboot API has been
@@ -127,7 +128,7 @@ to be, rather than have this odd case of “time_wait() for a condition
that could also be tripped by an interrupt works fine unless the OS is
up and running but hasn’t set interrupts up yet”.</p>
</li>
-<li><p>ipmi: Reduce ipmi_queue_msg_sync() polling loop time to 10ms</p>
+<li><p class="first">ipmi: Reduce ipmi_queue_msg_sync() polling loop time to 10ms</p>
<p>On a plain boot, this reduces the time spent in OPAL by ~170ms on
p9dsu. This is due to hiomap (currently) using synchronous IPMI
messages.</p>
@@ -136,10 +137,13 @@ operations for hiomap, as we’ll spend typically 10-20ms in OPAL
rather than 100-200ms. It’s not an ideal solution to that, but
it’s a quick and obvious win for jitter.</p>
</li>
-<li><p>core/device: NULL pointer dereference fix</p></li>
-<li><p>core/flash: NULL pointer dereference fixes</p></li>
-<li><p>core/cpu: Call memset with proper cpu_thread offset</p></li>
-<li><p>libflash: Add ipmi-hiomap, and prefer it for PNOR access</p>
+<li><p class="first">core/device: NULL pointer dereference fix</p>
+</li>
+<li><p class="first">core/flash: NULL pointer dereference fixes</p>
+</li>
+<li><p class="first">core/cpu: Call memset with proper cpu_thread offset</p>
+</li>
+<li><p class="first">libflash: Add ipmi-hiomap, and prefer it for PNOR access</p>
<p>ipmi-hiomap implements the PNOR access control protocol formerly known
as “the mbox protocol” but uses IPMI instead of the AST LPC mailbox as a
transport. As there is no-longer any mailbox involved in this alternate
@@ -154,7 +158,7 @@ removal.</p>
but as it is on life-support effective immediately we may as well just
remove it entirely when the time is right.</p>
</li>
-<li><p>opal/hmi: Handle early HMIs on thread0 when secondaries are still in OPAL.</p>
+<li><p class="first">opal/hmi: Handle early HMIs on thread0 when secondaries are still in OPAL.</p>
<p>When primary thread receives a CORE level HMI for timer facility errors
while secondaries are still in OPAL, thread 0 ends up in rendez-vous
waiting for secondaries to get into hmi handling. This is because OPAL
@@ -202,18 +206,18 @@ this very eary stage we already doomed.</p>
</pre></div>
</div>
</li>
-<li><p>core/cpu: Fix memory allocation for job array</p>
+<li><p class="first">core/cpu: Fix memory allocation for job array</p>
<p>fixes: 7a3f307e core/cpu: parallelise global CPU register setting jobs</p>
<p>This bug would result in boot-hang on some configurations due to
cpu_wait_job() endlessly waiting for the last bogus jobs[cpu-&gt;pir] pointer.</p>
</li>
-<li><p>i2c: Fix multiple-enqueue of the same request on NACK</p>
+<li><p class="first">i2c: Fix multiple-enqueue of the same request on NACK</p>
<p>i2c_request_send() will retry the request if the error is a NAK,
however it forgets to clear the “ud.done” flag. It will thus
loop again and try to re-enqueue the same request causing internal
request list corruption.</p>
</li>
-<li><p>i2c: Ensure ordering between i2c_request_send() and completion</p>
+<li><p class="first">i2c: Ensure ordering between i2c_request_send() and completion</p>
<p>i2c_request_send loops waiting for a flag “uc.done” set by
the completion routine, and then look for a result code
also set by that same completion.</p>
@@ -222,7 +226,7 @@ processor, so we need to order the stores to uc and the reads
from uc so that uc.done is stored last and tested first using
memory barriers.</p>
</li>
-<li><p>pci: Clarify power down logic</p>
+<li><p class="first">pci: Clarify power down logic</p>
<p>Currently pci_scan_bus() unconditionally calls pci_slot_set_power_state()
when it’s finished scanning a bus. This is one of those things that
makes you go “WHAT?” when you first see it and frankly the skiboot PCI
@@ -232,7 +236,7 @@ code could do with less of that.</p>
<div class="section" id="fast-reboot">
<h3>Fast Reboot<a class="headerlink" href="#fast-reboot" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>fast-reboot: parallel memory clearing</p>
+<li><p class="first">fast-reboot: parallel memory clearing</p>
<p>Arbitrarily pick 16GB as the unit of parallelism, and
split up clearing memory into jobs and schedule them
node-local to the memory (or on node 0 if we can’t
@@ -243,7 +247,7 @@ fast-reboot on a 256GB Boston system.</p>
zeroing all of RAM, so we may as well do them at the same time
and cut a few seconds off the total fast reboot time.</p>
</li>
-<li><p>fast-reboot: verify firmware “romem” checksum</p>
+<li><p class="first">fast-reboot: verify firmware “romem” checksum</p>
<p>This takes a checksum of skiboot memory after boot that should be
unchanged during OS operation, and verifies it before allowing a
fast reboot.</p>
@@ -253,13 +257,13 @@ during boot.</p>
<p>This helps to improve the integrity of firmware against host and
runtime firmware memory scribble bugs.</p>
</li>
-<li><p>core/fast-reboot: print the fast reboot disable reason</p>
+<li><p class="first">core/fast-reboot: print the fast reboot disable reason</p>
<p>Once things start to go wrong, disable_fast_reboot can be called a
number of times, so make the first reason sticky, and also print it
to the console at disable time. This helps with making sense of
fast reboot disables.</p>
</li>
-<li><p>Add fast-reboot property to /ibm,opal DT node</p>
+<li><p class="first">Add fast-reboot property to /ibm,opal DT node</p>
<p>this means that if it’s permanently disabled on boot, the test suite can
pick that up and not try a fast reboot test.</p>
</li>
@@ -270,24 +274,24 @@ pick that up and not try a fast reboot test.</p>
<h2>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h2>
<p>Since v6.2-rc2:</p>
<ul>
-<li><p>opal-prd: hservice: Enable hservice-&gt;wakeup() in BMC</p>
+<li><p class="first">opal-prd: hservice: Enable hservice-&gt;wakeup() in BMC</p>
<p>This patch enables HBRT to use HYP special wakeup register in openBMC
which until now was only used in FSP based machines.</p>
<p>This patch also adds a capability check for opal-prd so that HBRT can
decide if the host special wakeup register can be used.</p>
</li>
-<li><p>ffspart: Support flashing already ECC protected images</p>
+<li><p class="first">ffspart: Support flashing already ECC protected images</p>
<p>We do this by assuming filenames with â€.ecc’ in them are already ECC
protected.</p>
<p>This solves a practical problem in transitioning op-build to use ffspart
for pnor assembly rather than three perl scripts and a lot of XML.</p>
<p>We also update the ffspart tests to take into account ECC requirements.</p>
</li>
-<li><p>ffspart: Increase MAX_LINE to above PATH_MAX</p>
+<li><p class="first">ffspart: Increase MAX_LINE to above PATH_MAX</p>
<p>Otherwise we saw failures in CI and the ~221 character paths Jankins
likes to have.</p>
</li>
-<li><p>libflash/file: greatly increase perf of file_erase()</p>
+<li><p class="first">libflash/file: greatly increase perf of file_erase()</p>
<p>Do 4096 byte chunks not 8 byte chunks. A ffspart invocation constructing
a 64MB PNOR goes from a couple of seconds to ~0.1seconds with this
patch.</p>
@@ -315,30 +319,30 @@ regions like below:</p>
</div>
</div></blockquote>
<ul>
-<li><p>libflash: Restore blocklevel tests</p>
+<li><p class="first">libflash: Restore blocklevel tests</p>
<p>This fell out in f58be46 “libflash/test: Rewrite Makefile.check to
improve scalability”. Add it back in as test-blocklevel.</p>
</li>
</ul>
<p>Since v6.1:</p>
<ul>
-<li><p>pflash: Add –skip option for reading</p>
+<li><p class="first">pflash: Add –skip option for reading</p>
<p>Add a –skip=N option to pflash to skip N number of bytes when reading.
This would allow users to print the VERSION partition without the STB
header by specifying the –skip=4096 argument, and it’s a more generic
solution rather than making pflash depend on secure/trusted boot code.</p>
</li>
-<li><p>xscom-utils: Rework getsram</p>
+<li><p class="first">xscom-utils: Rework getsram</p>
<p>Allow specifying a file on the command line to read OCC SRAM data into.
If no file is specified then we print it to stdout as text. This is a
bit inconsistent, but it retains compatibility with the existing tool.</p>
</li>
-<li><p>xscom-utils/getsram: Make it work on P9</p>
+<li><p class="first">xscom-utils/getsram: Make it work on P9</p>
<p>The XSCOM base address of the OCC control registers changed slightly
between P8 and P9. Fix this up and add a bit of PVR checking so we look
in the right place.</p>
</li>
-<li><p>opal-prd: Fix opal-prd crash</p>
+<li><p class="first">opal-prd: Fix opal-prd crash</p>
<p>Presently callback function from HBRT uses r11 to point to target function
pointer. r12 is garbage. This works fine when we compile with “-no-pie” option
(as we don’t use r12 to calculate TOC).</p>
@@ -357,45 +361,45 @@ entry point. So that we can calculate TOC properly.</p>
<p>Since v6.1-rc1:
- Warn on long OPAL calls</p>
<blockquote>
-<div><p>Measure entry/exit time for OPAL calls and warn appropriately if the
+<div>Measure entry/exit time for OPAL calls and warn appropriately if the
calls take too long (&gt;100ms gets us a DEBUG log, &gt; 1000ms gets us a
-warning).</p>
-</div></blockquote>
+warning).</div></blockquote>
<p>Since v6.1:</p>
<ul>
-<li><p>core/lock: Use try_lock_caller() in lock_caller() to capture owner</p>
+<li><p class="first">core/lock: Use try_lock_caller() in lock_caller() to capture owner</p>
<p>Otherwise we can get reports of core/lock.c owning the lock, which is
not helpful when tracking down ownership issues.</p>
</li>
-<li><p>core/flash: Emit a warning if Skiboot version doesn’t match</p>
+<li><p class="first">core/flash: Emit a warning if Skiboot version doesn’t match</p>
<p>This means you’ll get a warning that you’ve modified skiboot separately
to the rest of the PNOR image, which can be useful in determining what
firmware is actually running on a machine.</p>
</li>
-<li><p>gcov: link in ctors* as newer GCC doesn’t group them all</p>
+<li><p class="first">gcov: link in ctors* as newer GCC doesn’t group them all</p>
<p>It seems that newer toolchains get us multiple ctors sections to link in
rather than just one. If we discard them (as we were doing), then we
don’t have a working gcov build (and we get the “doesn’t look sane”
warning on boot).</p>
</li>
-<li><p>core/flash: Log return code when ffs_init() fails</p>
+<li><p class="first">core/flash: Log return code when ffs_init() fails</p>
<p>Knowing the return code is at least better than not knowing the return
code.</p>
</li>
-<li><p>gcov: Fix building with GCC8</p></li>
-<li><p>travis/ci: rework Dockerfiles to produce build artifacts</p>
+<li><p class="first">gcov: Fix building with GCC8</p>
+</li>
+<li><p class="first">travis/ci: rework Dockerfiles to produce build artifacts</p>
<p>ubuntu-latest was also missing clang, as ubuntu-latest is closer to
ubuntu 18.04 than 16.04</p>
</li>
-<li><p>cpu: add cpu_queue_job_on_node()</p>
+<li><p class="first">cpu: add cpu_queue_job_on_node()</p>
<p>Add a job scheduling API which will run the job on the requested
chip_id (or return failure).</p>
</li>
-<li><p>opal-ci: Build old dtc version for fedora 28</p>
+<li><p class="first">opal-ci: Build old dtc version for fedora 28</p>
<p>There are patches that will go into dtc to fix the issues we hit, but
for the moment let’s just build and use a slightly older version.</p>
</li>
-<li><p>mem_region: Merge similar allocations when dumping</p>
+<li><p class="first">mem_region: Merge similar allocations when dumping</p>
<p>Currently we print one line for each allocation done at runtime when
dumping the memory allocations. We do a few thousand allocations at
boot so this can result in a huge amount of text being printed which
@@ -414,7 +418,7 @@ suppressed at the default log level, which probably isn’t something you
want considering we only dump the allocations when we run out of skiboot
heap space.</p>
</li>
-<li><p>core/lock: fix timeout warning causing a deadlock false positive</p>
+<li><p class="first">core/lock: fix timeout warning causing a deadlock false positive</p>
<p>If a lock waiter exceeds the warning timeout, it prints a message
while still registered as requesting the lock. Printing the message
can take locks, so if one is held when the owner of the original
@@ -424,11 +428,11 @@ detection, which brings down the system.</p>
KVM guest, where the timebase was not returned to host timebase
before calling the HMI handler.</p>
</li>
-<li><p>hw/p8-i2c: Print the set error bits</p>
+<li><p class="first">hw/p8-i2c: Print the set error bits</p>
<p>This is purely to save me from having to look it up every time someone
gets an I2C error.</p>
</li>
-<li><p>init: Fix starting stripped kernel</p>
+<li><p class="first">init: Fix starting stripped kernel</p>
<p>Currently if we try to run a raw/stripped binary kernel (ie. without
the elf header) we crash with:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>[ 0.008757768,5] INIT: Waiting for kernel...
@@ -444,12 +448,12 @@ the elf header) we crash with:</p>
<p>This is because we haven’t set kernel_entry correctly in this path.
This fixes it.</p>
</li>
-<li><p>cpu: Better output when waiting for a very long job</p>
+<li><p class="first">cpu: Better output when waiting for a very long job</p>
<p>Instead of printing at the end if the job took more than 1s,
print in the loop every 30s along with a backtrace. This will
give us some output if the job is deadlocked.</p>
</li>
-<li><p>lock: Fix interactions between lock dependency checker and stack checker</p>
+<li><p class="first">lock: Fix interactions between lock dependency checker and stack checker</p>
<p>The lock dependency checker does a few nasty things that can cause
re-entrancy deadlocks in conjunction with the stack checker or
in fact other debug tests.</p>
@@ -466,16 +470,19 @@ avoid deadlocks with the UART driver.</p>
option from DEBUG_LOCKS as well, in case we chose to disable it
by default later on.</p>
</li>
-<li><p>xscom-utils/adu_scoms.py: run 2to3 over it</p></li>
-<li><p>clang: -Wno-error=ignored-attributes</p></li>
+<li><p class="first">xscom-utils/adu_scoms.py: run 2to3 over it</p>
+</li>
+<li><p class="first">clang: -Wno-error=ignored-attributes</p>
+</li>
</ul>
</div>
<div class="section" id="ci-testing-and-utilities">
<h2>CI, testing, and utilities<a class="headerlink" href="#ci-testing-and-utilities" title="Permalink to this headline">¶</a></h2>
<p>Since v6.1-rc2:</p>
<ul>
-<li><p>opal-ci: Drop fedora27, add fedora29</p></li>
-<li><p>ci: Bump Qemu version</p>
+<li><p class="first">opal-ci: Drop fedora27, add fedora29</p>
+</li>
+<li><p class="first">ci: Bump Qemu version</p>
<p>This moves the qemu version to qemu-powernv-for-skiboot-7 which is based
on upstream’s 3.1.0, and supports a Power9 machine.</p>
<p>It also includes a fix for the skiboot XSCOM errors:</p>
@@ -485,7 +492,7 @@ on upstream’s 3.1.0, and supports a Power9 machine.</p>
<p>There is no modelling of the xscom behaviour but the reads/writes
now succeed which is enough for skiboot to not error out.</p>
</li>
-<li><p>test: Update qemu arguments to use bmc simulator</p>
+<li><p class="first">test: Update qemu arguments to use bmc simulator</p>
<p>THe qemu skiboot platform as of 8340a9642bba (“plat/qemu: use the common
OpenPOWER routines to initialize”) uses the common aspeed BMC setup
routines. This means a BT interface is always set up, and if the
@@ -502,15 +509,15 @@ corresponding Qemu model is not present the timeout is 30 seconds.</p>
<p>Avoid this by adding the bmc simulator model to the Qemu powernv
machine.</p>
</li>
-<li><p>ci: Add opal-utils to Debian unstable</p>
+<li><p class="first">ci: Add opal-utils to Debian unstable</p>
<p>This puts a â€pflash’ in the users PATH, allowing more test coverage of
ffspart.</p>
</li>
-<li><p>ci: Drop P8 mambo from Debian unstable</p>
+<li><p class="first">ci: Drop P8 mambo from Debian unstable</p>
<p>Debian Unstable has removed OpenSSL 1.0.0 from the repository so mambo
no longer runs:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">/</span><span class="n">opt</span><span class="o">/</span><span class="n">ibm</span><span class="o">/</span><span class="n">systemsim</span><span class="o">-</span><span class="n">p8</span><span class="o">/</span><span class="nb">bin</span><span class="o">/</span><span class="n">systemsim</span><span class="o">-</span><span class="n">pegasus</span><span class="p">:</span> <span class="n">error</span> <span class="k">while</span> <span class="n">loading</span> <span class="n">shared</span>
-<span class="n">libraries</span><span class="p">:</span> <span class="n">libcrypto</span><span class="o">.</span><span class="n">so</span><span class="mf">.1.0.0</span><span class="p">:</span> <span class="n">cannot</span> <span class="nb">open</span> <span class="n">shared</span> <span class="nb">object</span> <span class="n">file</span><span class="p">:</span> <span class="n">No</span> <span class="n">such</span>
+<span class="n">libraries</span><span class="p">:</span> <span class="n">libcrypto</span><span class="o">.</span><span class="n">so</span><span class="o">.</span><span class="mf">1.0</span><span class="o">.</span><span class="mi">0</span><span class="p">:</span> <span class="n">cannot</span> <span class="nb">open</span> <span class="n">shared</span> <span class="nb">object</span> <span class="n">file</span><span class="p">:</span> <span class="n">No</span> <span class="n">such</span>
<span class="n">file</span> <span class="ow">or</span> <span class="n">directory</span>
</pre></div>
</div>
@@ -518,25 +525,26 @@ no longer runs:</p>
skipped.</p>
<p>Tracked in <a class="reference external" href="https://github.com/open-power/op-build/issues/2519">https://github.com/open-power/op-build/issues/2519</a></p>
</li>
-<li><p>ci: Add dtc dependencies for rawhide</p>
+<li><p class="first">ci: Add dtc dependencies for rawhide</p>
<p>Both F28 and Rawhide build their own dtc version. Rawhide was missing
the required build deps.</p>
</li>
-<li><p>ci: Update Debian unstable packages</p>
+<li><p class="first">ci: Update Debian unstable packages</p>
<p>This syncs Debian unstable with Ubuntu 18.04 in order to get the clang
package. It also adds qemu to the Debian install, which makes sense
Debian also has 2.12.</p>
</li>
-<li><p>ci: Use Ubuntu latest config for Debian unstable</p>
+<li><p class="first">ci: Use Ubuntu latest config for Debian unstable</p>
<p>Debian unstable has the same GCOV issue with 8.2 as Ubuntu latest so it
makes sense to share configurations there.</p>
</li>
-<li><p>ci: Disable GCOV builds in ubuntu-latest</p>
+<li><p class="first">ci: Disable GCOV builds in ubuntu-latest</p>
<p>They are known to be broken with GCC 8.2:
<a class="reference external" href="https://github.com/open-power/skiboot/issues/206">https://github.com/open-power/skiboot/issues/206</a></p>
</li>
-<li><p>ci: Update gcov comment in Fedora 28</p></li>
-<li><p>plat/qemu: fix platform initialization when the BT device is not present</p>
+<li><p class="first">ci: Update gcov comment in Fedora 28</p>
+</li>
+<li><p class="first">plat/qemu: fix platform initialization when the BT device is not present</p>
<p>A QEMU PowerNV machine does not necessarily have a BT device. It needs
to be defined on the command line with :</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">device</span> <span class="n">ipmi</span><span class="o">-</span><span class="n">bmc</span><span class="o">-</span><span class="n">sim</span><span class="p">,</span><span class="nb">id</span><span class="o">=</span><span class="n">bmc0</span> <span class="o">-</span><span class="n">device</span> <span class="n">isa</span><span class="o">-</span><span class="n">ipmi</span><span class="o">-</span><span class="n">bt</span><span class="p">,</span><span class="n">bmc</span><span class="o">=</span><span class="n">bmc0</span><span class="p">,</span><span class="n">irq</span><span class="o">=</span><span class="mi">10</span>
@@ -548,11 +556,15 @@ that such a device is present and if not, skip the AST initialization.</p>
</ul>
<p>Since v6.1-rc1:</p>
<ul>
-<li><p>travis: Coverity fixed their SSL cert</p></li>
-<li><p>opal-ci: Use ubuntu:rolling for Ubuntu latest image</p></li>
-<li><p>ffspart: Add test for eraseblock size</p></li>
-<li><p>ffspart: Add toc test</p></li>
-<li><p>hdata/test: workaround dtc bugs</p>
+<li><p class="first">travis: Coverity fixed their SSL cert</p>
+</li>
+<li><p class="first">opal-ci: Use ubuntu:rolling for Ubuntu latest image</p>
+</li>
+<li><p class="first">ffspart: Add test for eraseblock size</p>
+</li>
+<li><p class="first">ffspart: Add toc test</p>
+</li>
+<li><p class="first">hdata/test: workaround dtc bugs</p>
<p>In dtc v1.4.5 to at least v1.4.7 there have been a few bugs introduced
that change the layout of what’s produced in the dts. In order to be
immune from them, we should use the (provided) dtdiff utility, but we
@@ -566,16 +578,16 @@ with recent Linux distros such as Fedora 29.</p>
<div class="section" id="mambo-platform">
<h3>Mambo Platform<a class="headerlink" href="#mambo-platform" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>mambo: Merge PMEM_DISK and PMEM_VOLATILE code</p>
+<li><p class="first">mambo: Merge PMEM_DISK and PMEM_VOLATILE code</p>
<p>PMEM_VOLATILE and PMEM_DISK can’t be used together and are basically
copies of the same code.</p>
<p>This merges the two and allows them used together. Same API is kept.</p>
</li>
-<li><p>hw/chiptod: test QUIRK_NO_CHIPTOD in opal_resync_timebase</p>
+<li><p class="first">hw/chiptod: test QUIRK_NO_CHIPTOD in opal_resync_timebase</p>
<p>This allows some test coverage of deep stop states in Linux with
Mambo.</p>
</li>
-<li><p>core/mem_region: mambo reserve kernel payload areas</p>
+<li><p class="first">core/mem_region: mambo reserve kernel payload areas</p>
<p>Mambo image payloads get overwritten by the OS and by
fast reboot memory clearing because they have no region
defined. Add them, which allows fast reboot to work.</p>
@@ -587,14 +599,13 @@ defined. Add them, which allows fast reboot to work.</p>
<p>Since v6.2-rc2:
- plat/qemu: use the common OpenPOWER routines to initialize</p>
<blockquote>
-<div><p>Back in 2016, we did not have a large support of the PowerNV devices
+<div>Back in 2016, we did not have a large support of the PowerNV devices
under QEMU and we were using our own custom ones. This has changed and
we can now use all the common init routines of the OpenPOWER
-platforms.</p>
-</div></blockquote>
+platforms.</div></blockquote>
<p>Since v6.1:</p>
<ul>
-<li><p>nx: Don’t abort on missing NX when using a QEMU machine</p>
+<li><p class="first">nx: Don’t abort on missing NX when using a QEMU machine</p>
<p>These don’t have an NX node (and probably never will) as they
don’t provide any coprocessor. However, the DARN instruction
works so this abort is unnecessary.</p>
@@ -605,7 +616,7 @@ works so this abort is unnecessary.</p>
<div class="section" id="power8-platforms">
<h2>POWER8 Platforms<a class="headerlink" href="#power8-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>SBE-p8: Do all sbe timer update with xscom lock held</p>
+<li><p class="first">SBE-p8: Do all sbe timer update with xscom lock held</p>
<p>Without this, on some P8 platforms, we could (falsely) think the SBE timer
had stalled getting the dreaded “timer stuck” message.</p>
<p>The code was doing the mftb() to set the start of the timeout period while
@@ -618,7 +629,7 @@ so do it that way.</p>
<div class="section" id="vesnin-platform">
<h3>Vesnin Platform<a class="headerlink" href="#vesnin-platform" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>platforms/astbmc/vesnin: Send list of PCI devices to BMC through IPMI</p>
+<li><p class="first">platforms/astbmc/vesnin: Send list of PCI devices to BMC through IPMI</p>
<p>Implements sending a list of installed PCI devices through IPMI protocol.
Each PCI device description is sent as a standalone IPMI message.
A list of devices can be gathered from separate messages using the
@@ -631,19 +642,21 @@ updated at the start of synchronization session.</p>
<div class="section" id="power9-platforms">
<h2>POWER9 Platforms<a class="headerlink" href="#power9-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>STOP API: API conditionally supports 255 SCOM restore entries for each quad.</p></li>
-<li><p>hdata/i2c: Skip unknown device type</p>
+<li><p class="first">STOP API: API conditionally supports 255 SCOM restore entries for each quad.</p>
+</li>
+<li><p class="first">hdata/i2c: Skip unknown device type</p>
<p>Do not add unknown I2C devices to device tree.</p>
</li>
-<li><p>hdata/i2c: Add whitelisting for Host I2C devices</p>
+<li><p class="first">hdata/i2c: Add whitelisting for Host I2C devices</p>
<p>Many of the devices that we get information about through HDAT are for
use by firmware rather than the host operating system. This patch adds
a boolean flag to hdat_i2c_info structure that indicates whether devices
with a given purpose should be reserved for use inside of OPAL (or some
other firmware component, such as the OCC).</p>
</li>
-<li><p>hdata/iohub: Fix Cumulus Hub ID number</p></li>
-<li><p>opal/hmi: Wakeup the cpu before reading core_fir</p>
+<li><p class="first">hdata/iohub: Fix Cumulus Hub ID number</p>
+</li>
+<li><p class="first">opal/hmi: Wakeup the cpu before reading core_fir</p>
<p>When stop state 5 is enabled, reading the core_fir during an HMI can
result in a xscom read error with xscom_read() returning an
OPAL_XSCOM_PARTIAL_GOOD error code and core_fir value of all FFs. At
@@ -655,12 +668,12 @@ reading the core_fir. Hence this patch wraps the call to
read_core_fir() within calls to dctl_set_special_wakeup() and
dctl_clear_special_wakeup().</p>
</li>
-<li><p>xive: Disable block tracker</p>
+<li><p class="first">xive: Disable block tracker</p>
<p>Due to some HW errata, the block tracking facility (performance optimisation
for large systems) should be disabled on Nimbus chips. Disable it unconditionally
for now.</p>
</li>
-<li><p>opal/hmi: Ignore debug trigger inject core FIR.</p>
+<li><p class="first">opal/hmi: Ignore debug trigger inject core FIR.</p>
<p>Core FIR[60] is a side effect of the work around for the CI Vector Load
issue in DD2.1. Usually this gets delivered as HMI with HMER[17] where
Linux already ignores it. But it looks like in some cases we may happen
@@ -668,16 +681,16 @@ to see CORE_FIR[60] while we are already in Malfunction Alert HMI
(HMER[0]) due to other reasons e.g. CAPI recovery or NPU xstop. If that
happens then just ignore it instead of crashing kernel as not recoverable.</p>
</li>
-<li><p>hdata: Make sure reserved node name starts with “ibm, “</p>
+<li><p class="first">hdata: Make sure reserved node name starts with “ibm, “</p>
<p>HDAT does not provide consistent label format for reserved memory label.
Few starts with “ibm,” while few other starts with component name.</p>
</li>
-<li><p>hdata: Fix dtc warnings</p>
+<li><p class="first">hdata: Fix dtc warnings</p>
<p>Fix dtc warnings related to mcbist node.</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="o">@</span><span class="mi">623</span><span class="n">fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="o">@</span><span class="mi">1</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
-<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="o">@</span><span class="mi">623</span><span class="n">fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="o">@</span><span class="mi">2</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
-<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="o">@</span><span class="mi">603</span><span class="n">fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="o">@</span><span class="mi">1</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
-<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="o">@</span><span class="mi">603</span><span class="n">fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="o">@</span><span class="mi">2</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="nd">@623fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="nd">@1</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
+<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="nd">@623fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="nd">@2</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
+<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="nd">@603fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="nd">@1</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
+<span class="ne">Warning</span> <span class="p">(</span><span class="n">reg_format</span><span class="p">):</span> <span class="s2">&quot;reg&quot;</span> <span class="nb">property</span> <span class="ow">in</span> <span class="o">/</span><span class="n">xscom</span><span class="nd">@603fc00000000</span><span class="o">/</span><span class="n">mcbist</span><span class="nd">@2</span> <span class="n">has</span> <span class="n">invalid</span> <span class="n">length</span> <span class="p">(</span><span class="mi">4</span> <span class="nb">bytes</span><span class="p">)</span> <span class="p">(</span><span class="c1">#address-cells == 1, #size-cells == 1)</span>
</pre></div>
</div>
<p>Ideally we should add proper xscom range here… but we are not getting that
@@ -687,7 +700,7 @@ information in HDAT today. Lets fix warning until we get proper data in HDAT.</p
<div class="section" id="phb4">
<h3>PHB4<a class="headerlink" href="#phb4" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>phb4: Generate checkstop on AIB ECC corr/uncorr for DD2.0 parts</p>
+<li><p class="first">phb4: Generate checkstop on AIB ECC corr/uncorr for DD2.0 parts</p>
<p>On DD2.0 parts, PCIe ECC protection is not warranted in the response
data path. Thus, for these parts, we need to flag any ECC errors
detected from the adjacent AIB RX Data path so the part can be
@@ -695,7 +708,7 @@ replaced.</p>
<p>This patch configures the FIRs so that we escalate these AIB ECC
errors to a checkstop so the parts can be replaced.</p>
</li>
-<li><p>phb4: Reset pfir and nfir if new errors reported during ETU reset</p>
+<li><p class="first">phb4: Reset pfir and nfir if new errors reported during ETU reset</p>
<p>During fast-reboot new PEC errors can be latched even after ETU-Reset
is asserted. This will result in values of variables nfir_cache and
pfir_cache to be out of sync.</p>
@@ -709,7 +722,7 @@ ETU-reset was asserted, report these new errors and reset the
nfir/pfir registers. This should bring the ETU out of reset
successfully.</p>
</li>
-<li><p>phb4: Disable nodal scoped DMA accesses when PB pump mode is enabled</p>
+<li><p class="first">phb4: Disable nodal scoped DMA accesses when PB pump mode is enabled</p>
<p>By default when a PCIe device issues a read request via the PHB it is first
issued with nodal scope. When accessing GPU memory the NPU does not know at the
time of response if the requested memory page is off node or not. Therefore
@@ -723,7 +736,7 @@ treated differently. Therefore we avoid disabling nodal scope on large boxes
which have pump mode disabled to avoid all PHB requests being broadcast to
multiple chips.</p>
</li>
-<li><p>phb4/capp: Only reset FIR bits that cause capp machine check</p>
+<li><p class="first">phb4/capp: Only reset FIR bits that cause capp machine check</p>
<p>During CAPP recovery do_capp_recovery_scoms() will reset the CAPP Fir
register just after CAPP recovery is completed. This has an
unintentional side effect of preventing PRD from analyzing and
@@ -735,7 +748,7 @@ only reset fir bits that cause CAPP machine check (local xstop). This
is done by reading the CAPP Fir Action0/1 &amp; Mask registers and
generating a mask which is then written on CAPP_FIR_CLEAR register.</p>
</li>
-<li><p>phb4: Check for RX errors after link training</p>
+<li><p class="first">phb4: Check for RX errors after link training</p>
<p>Some PHB4 PHYs can get stuck in a bad state where they are constantly
retraining the link. This happens transparently to skiboot and Linux
but will causes PCIe to be slow. Resetting the PHB4 clears the
@@ -753,20 +766,20 @@ retrain the link. ie</p>
</pre></div>
</div>
</li>
-<li><p>hw/phb4: Add a helper to dump the PELT-V</p>
+<li><p class="first">hw/phb4: Add a helper to dump the PELT-V</p>
<p>The “Partitionable Endpoint Lookup Table (Vector)” is used by the PHB
when processing EEH events. The PELT-V defines which PEs should be
additionally frozen in the event of an error being flagged on a
given PE. Knowing the state of the PELT-V is sometimes useful for
debugging PHB issues so this patch adds a helper to dump it.</p>
</li>
-<li><p>hw/phb4: Print the PEs in the EEH dump in hex</p>
+<li><p class="first">hw/phb4: Print the PEs in the EEH dump in hex</p>
<p>Linux always displays the PE number in hexidecimal while skiboot
displays the PEST index (PE number) in decimal. This makes correlating
errors between Skiboot and Linux more annoying than it should be so
this patch makes Skiboot print the PEST number in hex.</p>
</li>
-<li><p>phb4: Reallocate PEC2 DMA-Read engines to improve GPU-Direct bandwidth</p>
+<li><p class="first">phb4: Reallocate PEC2 DMA-Read engines to improve GPU-Direct bandwidth</p>
<p>We reallocate additional 16/8 DMA-Read engines allocated to stack0/1
on PEC2 respectively. This is needed to improve bandwidth available to
the Mellanox CX5 adapter when trying to read GPU memory (GPU-Direct).</p>
@@ -778,7 +791,7 @@ respectively on PEC2. This is done by populating the
XPEC_PCI_PRDSTKOVR and XPEC_NEST_READ_STACK_OVERRIDE as suggested by
the h/w team.</p>
</li>
-<li><p>phb4: Enable PHB MMIO-0/1 Bars only when mmio window exists</p>
+<li><p class="first">phb4: Enable PHB MMIO-0/1 Bars only when mmio window exists</p>
<p>Presently phb4_probe_stack() will always enable PHB MMIO0/1 windows
even if they doesn’t exist in phy_map. Hence we do some minor shuffling
in the phb4_probe_stack() so that MMIO-0/1 Bars are only enabled if
@@ -786,7 +799,7 @@ there corresponding MMIO window exists in the phy_map. In case phy_map
for an mmio window is â€0’ we set the corresponding BAR register to
â€0’.</p>
</li>
-<li><p>hw/phb4: Use local_alloc for phb4 structures</p>
+<li><p class="first">hw/phb4: Use local_alloc for phb4 structures</p>
<p>Struct phb4 is fairly heavyweight at 283664 bytes. On systems with
6x PHBs per socket this results in using 3.2MB of heap space the PHB
structures alone. This is a fairly large chunk of our 12MB heap and
@@ -796,7 +809,7 @@ FDT blob.</p>
<p>This patch switches to using local_alloc() for the PHB structures
so they don’t consume too large a portion of our 12MB heap space.</p>
</li>
-<li><p>phb4: Fix typo in disable lane eq code</p>
+<li><p class="first">phb4: Fix typo in disable lane eq code</p>
<p>In this commit</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">commit</span> <span class="mi">737</span><span class="n">c0ba3d72b8aab05a765a9fc111a48faac0f75</span>
<span class="n">Author</span><span class="p">:</span> <span class="n">Michael</span> <span class="n">Neuling</span> <span class="o">&lt;</span><span class="n">mikey</span><span class="nd">@neuling</span><span class="o">.</span><span class="n">org</span><span class="o">&gt;</span>
@@ -808,7 +821,7 @@ so they don’t consume too large a portion of our 12MB heap space.</p>
<p>It worked previously as if only phase 2 (PH2) is set it, skips phase 2
and phase 3 (PH3).</p>
</li>
-<li><p>phb4: Don’t probe a PHB if its garded</p>
+<li><p class="first">phb4: Don’t probe a PHB if its garded</p>
<p>Presently phb4_probe_stack() causes an exception while trying to probe
a PHB if its garded. This causes skiboot to go into a reboot loop with
following exception log:</p>
@@ -833,18 +846,18 @@ PHB Version registers that cause the fatal MCE.</p>
populate the PHB Bar register fails, which indicates that there is
something wrong with the PHB.</p>
</li>
-<li><p>phb4: Workaround PHB errata with CFG write UR/CA errors</p>
+<li><p class="first">phb4: Workaround PHB errata with CFG write UR/CA errors</p>
<p>If the PHB encounters a UR or CA status on a CFG write, it will
incorrectly freeze the wrong PE. Instead of using the PE# specified
in the CONFIG_ADDRESS register, it will use the PE# of whatever
MMIO occurred last.</p>
<p>Work around this disabling freeze on such errors</p>
</li>
-<li><p>phb4: Handle allocation errors in phb4_eeh_dump_regs()</p>
+<li><p class="first">phb4: Handle allocation errors in phb4_eeh_dump_regs()</p>
<p>If the zalloc fails (and it can be a rather large allocation),
we will overwite memory at 0 instead of failing.</p>
</li>
-<li><p>phb4: Don’t try to access non-existent PEST entries</p>
+<li><p class="first">phb4: Don’t try to access non-existent PEST entries</p>
<p>In a POWER9 chip, some PHB4s have 256 PEs, some have 512.</p>
<p>Currently, the diagnostics code retrieves 512 unconditionally,
which is wrong and causes us to incorrectly report bogus values
@@ -856,14 +869,14 @@ for the “high” PEs on the small PHBs.</p>
<div class="section" id="capi2">
<h3>CAPI2<a class="headerlink" href="#capi2" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>phb4/capp: Use link width to allocate STQ engines to CAPP</p>
+<li><p class="first">phb4/capp: Use link width to allocate STQ engines to CAPP</p>
<p>Update phb4_init_capp_regs() to allocates STQ Engines to CAPP/PEC2
based on link width instead of always assuming it to x8.</p>
<p>Also re-factor the function slightly to evaluate the link-width only
once and cache it so that it can also be used to allocate DMA read
engines.</p>
</li>
-<li><p>phb4/capp: Update DMA read engines set in APC_FSM_READ_MASK based on link-width</p>
+<li><p class="first">phb4/capp: Update DMA read engines set in APC_FSM_READ_MASK based on link-width</p>
<p>Commit 47c09cdfe7a3(“phb4/capp: Calculate STQ/DMA read engines based
on link-width for PEC”) update the CAPP init sequence by calculating
the needed STQ/DMA-read engines based on link width and populating it
@@ -873,7 +886,7 @@ with the value set in CAPP APC FSM Read Machine Mask Register.</p>
width of the stack on PEC2 and populate the same values as previously
populated in PEC CAPP_CNTL register.</p>
</li>
-<li><p>capp: Fix the capp recovery timeout comparison</p>
+<li><p class="first">capp: Fix the capp recovery timeout comparison</p>
<p>The current capp recovery timeout control loop in
do_capp_recovery_scoms() uses a wrong comparison for return value of
tb_compare(). This may cause do_capp_recovery_scoms() to report an
@@ -881,7 +894,7 @@ timeout earlier than the 168ms stipulated time.</p>
<p>The patch fixes this by updating the loop timeout control branch in
do_capp_recovery_scoms() to use the correct enum tb_cmpval.</p>
</li>
-<li><p>phb4: Disable 32-bit MSI in capi mode</p>
+<li><p class="first">phb4: Disable 32-bit MSI in capi mode</p>
<p>If a capi device does a DMA write targeting an address lower than 4GB,
it does so through a 32-bit operation, per the PCI spec. In capi mode,
the first TVE entry is configured in bypass mode, so the address is
@@ -911,12 +924,12 @@ as part of the reset sequence. L1 is write through, so doesn’t need to be purg
</pre></div>
</div>
<ol class="arabic" start="2">
-<li><p>check this is off in all caches to know purge completed</p>
+<li><p class="first">check this is off in all caches to know purge completed</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">getspy</span> <span class="n">pu</span><span class="o">.</span><span class="n">ex</span> <span class="n">EXP</span><span class="o">.</span><span class="n">L2</span><span class="o">.</span><span class="n">L2MISC</span><span class="o">.</span><span class="n">L2CERRS</span><span class="o">.</span><span class="n">PRD_PURGE_CMD_REG_BUSY</span> <span class="o">-</span><span class="nb">all</span>
</pre></div>
</div>
</li>
-<li><div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">putspy</span> <span class="n">pu</span><span class="o">.</span><span class="n">ex</span> <span class="n">EXP</span><span class="o">.</span><span class="n">L2</span><span class="o">.</span><span class="n">L2MISC</span><span class="o">.</span><span class="n">L2CERRS</span><span class="o">.</span><span class="n">PRD_PURGE_CMD_TRIGGER</span> <span class="n">OFF</span> <span class="o">-</span><span class="nb">all</span>
+<li><div class="first highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">putspy</span> <span class="n">pu</span><span class="o">.</span><span class="n">ex</span> <span class="n">EXP</span><span class="o">.</span><span class="n">L2</span><span class="o">.</span><span class="n">L2MISC</span><span class="o">.</span><span class="n">L2CERRS</span><span class="o">.</span><span class="n">PRD_PURGE_CMD_TRIGGER</span> <span class="n">OFF</span> <span class="o">-</span><span class="nb">all</span>
</pre></div>
</div>
</li>
@@ -928,7 +941,7 @@ as part of the reset sequence. L1 is write through, so doesn’t need to be purg
</pre></div>
</div>
<ol class="arabic" start="2">
-<li><p>Ensure that the purge has completed by checking the status bit:</p>
+<li><p class="first">Ensure that the purge has completed by checking the status bit:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">getspy</span> <span class="n">pu</span><span class="o">.</span><span class="n">ex</span> <span class="n">EXP</span><span class="o">.</span><span class="n">L3</span><span class="o">.</span><span class="n">L3_MISC</span><span class="o">.</span><span class="n">L3CERRS</span><span class="o">.</span><span class="n">L3_PRD_PURGE_REQ</span> <span class="o">-</span><span class="nb">all</span>
</pre></div>
</div>
@@ -942,14 +955,14 @@ as part of the reset sequence. L1 is write through, so doesn’t need to be purg
</ol>
</div></blockquote>
<ul>
-<li><p>npu2: Return sensible PCI error when not frozen</p>
+<li><p class="first">npu2: Return sensible PCI error when not frozen</p>
<p>The current kernel calls OPAL_PCI_EEH_FREEZE_STATUS with an uninitialized
&#64;pci_error_type parameter and then analyzes it even if the OPAL call
returned OPAL_SUCCESS. This is results in unexpected EEH events and NPU
freezes.</p>
<p>This initializes &#64;pci_error_type and &#64;severity to known safe values.</p>
</li>
-<li><p>npu2: Advertise correct TCE page size</p>
+<li><p class="first">npu2: Advertise correct TCE page size</p>
<p>The P9 NPU workbook says that only 4K/64K/16M/256M page size are supported
and in fact npu2_map_pe_dma_window() supports just these but in absence of
the “ibm,supported-tce-sizes” property Linux assumes the default P9 PHB4
@@ -961,7 +974,7 @@ fall back to 4K/64K TCEs.</p>
</ul>
<p>Since v6.1:</p>
<ul>
-<li><p>npu2: Add support for relaxed-ordering mode</p>
+<li><p class="first">npu2: Add support for relaxed-ordering mode</p>
<p>Some device drivers support out of order access to GPU memory. This does
not affect the CPU view of memory but it does affect the GPU view of
memory. It should only be enabled if the GPU driver has requested it.</p>
@@ -971,18 +984,19 @@ ordering to be enabled per PCIe root port. So the code here doesn’t
enable relaxed ordering until it has been explicitly requested for every
device on the port.</p>
</li>
-<li><p>Add the other 7 ATSD registers to the device tree.</p></li>
-<li><p>npu2/hw-procedures: Don’t open code NPU2_NTL_MISC_CFG2_BRICK_ENABLE</p>
+<li><p class="first">Add the other 7 ATSD registers to the device tree.</p>
+</li>
+<li><p class="first">npu2/hw-procedures: Don’t open code NPU2_NTL_MISC_CFG2_BRICK_ENABLE</p>
<p>Name this bit properly. There’s a lot more cleanup like this to be done,
but I’m catching this one now as part of some related changes.</p>
</li>
-<li><p>npu2/hw-procedures: Enable parity and credit overflow checks</p>
+<li><p class="first">npu2/hw-procedures: Enable parity and credit overflow checks</p>
<p>Enable these error checking features by setting the appropriate bits in
our one-off initialization of each “NTL Misc Config 2” register.</p>
<p>The exception is NDL RX parity checking, which should be disabled during
the link training procedures.</p>
</li>
-<li><p>npu2: Use correct kill type for TCE invalidation</p>
+<li><p class="first">npu2: Use correct kill type for TCE invalidation</p>
<p>kill_type is enum of OPAL_PCI_TCE_KILL_PAGES, OPAL_PCI_TCE_KILL_PE,
OPAL_PCI_TCE_KILL_ALL and phb4_tce_kill() gets it right but
npu2_tce_kill() uses OPAL_PCI_TCE_KILL which is an OPAL API token.</p>
@@ -994,13 +1008,14 @@ npu2_tce_kill() uses OPAL_PCI_TCE_KILL which is an OPAL API token.</p>
<h3>OpenCAPI<a class="headerlink" href="#opencapi" title="Permalink to this headline">¶</a></h3>
<p>Since v6.2-rc1:</p>
<ul class="simple">
-<li><p>npu2-opencapi: Log extra information on link training failure</p></li>
-<li><p>npu2-opencapi: Detect if link trained in degraded mode</p></li>
+<li>npu2-opencapi: Log extra information on link training failure</li>
+<li>npu2-opencapi: Detect if link trained in degraded mode</li>
</ul>
<p>Since v6.1:</p>
<ul>
-<li><p>Support OpenCAPI on Witherspoon platform</p></li>
-<li><p>npu2-opencapi: Enable presence detection on ZZ</p>
+<li><p class="first">Support OpenCAPI on Witherspoon platform</p>
+</li>
+<li><p class="first">npu2-opencapi: Enable presence detection on ZZ</p>
<p>Presence detection for opencapi adapters was broken for ZZ planars v3
and below. All ZZ systems currently used in the lab have had their
planar upgraded, so we can now remove the override we had to force
@@ -1012,7 +1027,7 @@ change. In the unlikely case somebody tries opencapi on an old ZZ, the
presence detection through i2c will show that no adapter is present
and skiboot won’t try to access or train the link.</p>
</li>
-<li><p>npu2-opencapi: Don’t send commands to NPU when link is down</p>
+<li><p class="first">npu2-opencapi: Don’t send commands to NPU when link is down</p>
<p>Even if an opencapi link is down, we currently always try to issue a
config read operation when probing for PCI devices, because of the
default scan map used for an opencapi PHB. The config operation fails,
@@ -1022,11 +1037,11 @@ there’s no reason to do the config operation. To fix it, we keep the
scan map blank by default, and only add a device once the link is
trained.</p>
</li>
-<li><p>opal/hmi: Catch NPU2 HMIs for opencapi</p>
+<li><p class="first">opal/hmi: Catch NPU2 HMIs for opencapi</p>
<p>HMIs for NPU2 are filtered with the â€compatible’ string of the PHB, so
add opencapi to the mix.</p>
</li>
-<li><p>occ: Wait if OCC GPU presence status not immediately available</p>
+<li><p class="first">occ: Wait if OCC GPU presence status not immediately available</p>
<p>It takes a few seconds for the OCC to set everything up in order to read
GPU presence. At present, we try to kick off OCC initialisation as early as
possible to maximise the time it has to read GPU presence.</p>
@@ -1035,7 +1050,7 @@ occ_get_gpu_presence() so that on the first time we try to get GPU presence
we keep trying for up to 2 seconds. Experimentally this seems to be
adequate.</p>
</li>
-<li><p>hw/npu2-hw-procedures: Enable RX auto recal on OpenCAPI links</p>
+<li><p class="first">hw/npu2-hw-procedures: Enable RX auto recal on OpenCAPI links</p>
<p>The RX_RC_ENABLE_AUTO_RECAL flag is required on OpenCAPI but not NVLink.</p>
<p>Traditionally, Hostboot sets this value according to the machine type.
However, now that Witherspoon supports both NVLink and OpenCAPI, it can’t
@@ -1043,7 +1058,7 @@ tell whether or not a link is OpenCAPI.</p>
<p>So instead, set it in skiboot, where it will only be triggered after we’ve
done device detection and found an OpenCAPI device.</p>
</li>
-<li><p>hw/npu2-opencapi: Fix setting of supported OpenCAPI templates</p>
+<li><p class="first">hw/npu2-opencapi: Fix setting of supported OpenCAPI templates</p>
<p>In opal_npu_tl_set(), we made a typo that means the OPAL_NPU_TL_SET call
may not clear the enable bits for templates that were previously enabled
but are now disabled.</p>
@@ -1055,8 +1070,9 @@ TEMP{1,3}_EN.</p>
<div class="section" id="barreleye-g2-and-zaius-platforms">
<h3>Barreleye G2 and Zaius platforms<a class="headerlink" href="#barreleye-g2-and-zaius-platforms" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>zaius: Add a slot table</p></li>
-<li><p>zaius: Add slots for the Barreleye G2 HDD rack</p>
+<li><p class="first">zaius: Add a slot table</p>
+</li>
+<li><p class="first">zaius: Add slots for the Barreleye G2 HDD rack</p>
<p>The Barreleye G2 is distinct from the Zaius in that it features a 24
Bay NVMe/SATA HDD rack. To provide meaningful slot names for each NVMe
device we need to define a slot table for the NVMe capable HDD bays.</p>
@@ -1082,15 +1098,14 @@ of the 9797 that supports the HDD rack.</p>
<p>Since v6.2-rc1:
- platform/firenze: Fix branch-to-null crash</p>
<blockquote>
-<div><p>When the bus alloc and free methods were removed we missed a case in the
+<div>When the bus alloc and free methods were removed we missed a case in the
Firenze platform slot code that relied on the the bus-specific method to
the bus pointer in the request structure. This results in a
branch-to-null during boot and a crash. This patch fixes it by
-initialising it manually here.</p>
-</div></blockquote>
+initialising it manually here.</div></blockquote>
<p>Since v6.1:</p>
<ul>
-<li><p>phb4/capp: Update the expected Eye-catcher for CAPP ucode lid</p>
+<li><p class="first">phb4/capp: Update the expected Eye-catcher for CAPP ucode lid</p>
<p>Currently on a FSP based P9 system load_capp_code() expects CAPP ucode
lid header to have eye-catcher magic of â€CAPPPSLL’. However skiboot
currently supports CAPP ucode only lids that have a eye-catcher magic
@@ -1102,7 +1117,7 @@ error message:</p>
<p>We fix this issue by updating load_capp_ucode() to use the eye-catcher
value of â€CAPPLIDH’ instead of â€CAPPPSLL’.</p>
</li>
-<li><p>FSP: Improve Reset/Reload log message</p>
+<li><p class="first">FSP: Improve Reset/Reload log message</p>
<p>Below message is confusing. Lets make it clear.</p>
<p>FSP sends “R/R complete notification” whenever there is a dump. We use <cite>flag</cite>
to identify whether its its R/R completion -OR- just new dump notification.</p>
@@ -1117,7 +1132,7 @@ to identify whether its its R/R completion -OR- just new dump notification.</p>
<div class="section" id="witherspoon-platform">
<h3>Witherspoon platform<a class="headerlink" href="#witherspoon-platform" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>platforms/astbmc/witherspoon: Implement OpenCAPI support</p>
+<li><p class="first">platforms/astbmc/witherspoon: Implement OpenCAPI support</p>
<p>OpenCAPI on Witherspoon is slightly more involved than on Zaius and ZZ, due
to the OpenCAPI links using the SXM2 connectors that are used for NVLink
GPUs.</p>
@@ -1139,672 +1154,672 @@ things like device reset, so for now, we only enable 1 brick per device.</p>
A total of 9146 lines were added, and 2610 removed (delta 6536).</p>
<div class="section" id="developers-with-the-most-changesets">
<h3>Developers with the most changesets<a class="headerlink" href="#developers-with-the-most-changesets" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 75%" />
-<col style="width: 6%" />
-<col style="width: 19%" />
+<col width="75%" />
+<col width="6%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>58</p></td>
-<td><p>(24.2%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>58</td>
+<td>(24.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Jeffery</p></td>
-<td><p>30</p></td>
-<td><p>(12.5%)</p></td>
+<tr class="row-odd"><td>Andrew Jeffery</td>
+<td>30</td>
+<td>(12.5%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>27</p></td>
-<td><p>(11.2%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>27</td>
+<td>(11.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>17</p></td>
-<td><p>(7.1%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>17</td>
+<td>(7.1%)</td>
</tr>
-<tr class="row-even"><td><p>Vaibhav Jain</p></td>
-<td><p>14</p></td>
-<td><p>(5.8%)</p></td>
+<tr class="row-even"><td>Vaibhav Jain</td>
+<td>14</td>
+<td>(5.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>12</p></td>
-<td><p>(5.0%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>12</td>
+<td>(5.0%)</td>
</tr>
-<tr class="row-even"><td><p>Frederic Barrat</p></td>
-<td><p>11</p></td>
-<td><p>(4.6%)</p></td>
+<tr class="row-even"><td>Frederic Barrat</td>
+<td>11</td>
+<td>(4.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Nicholas Piggin</p></td>
-<td><p>11</p></td>
-<td><p>(4.6%)</p></td>
+<tr class="row-odd"><td>Nicholas Piggin</td>
+<td>11</td>
+<td>(4.6%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>10</p></td>
-<td><p>(4.2%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>10</td>
+<td>(4.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Vasant Hegde</p></td>
-<td><p>9</p></td>
-<td><p>(3.8%)</p></td>
+<tr class="row-odd"><td>Vasant Hegde</td>
+<td>9</td>
+<td>(3.8%)</td>
</tr>
-<tr class="row-even"><td><p>Reza Arbab</p></td>
-<td><p>8</p></td>
-<td><p>(3.3%)</p></td>
+<tr class="row-even"><td>Reza Arbab</td>
+<td>8</td>
+<td>(3.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>5</p></td>
-<td><p>(2.1%)</p></td>
+<tr class="row-odd"><td>Samuel Mendoza-Jonas</td>
+<td>5</td>
+<td>(2.1%)</td>
</tr>
-<tr class="row-even"><td><p>Alexey Kardashevskiy</p></td>
-<td><p>4</p></td>
-<td><p>(1.7%)</p></td>
+<tr class="row-even"><td>Alexey Kardashevskiy</td>
+<td>4</td>
+<td>(1.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>4</p></td>
-<td><p>(1.7%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>4</td>
+<td>(1.7%)</td>
</tr>
-<tr class="row-even"><td><p>Prem Shanker Jha</p></td>
-<td><p>3</p></td>
-<td><p>(1.2%)</p></td>
+<tr class="row-even"><td>Prem Shanker Jha</td>
+<td>3</td>
+<td>(1.2%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>2</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>2</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-even"><td><p>Rashmica Gupta</p></td>
-<td><p>2</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-even"><td>Rashmica Gupta</td>
+<td>2</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh J Salgaonkar</p></td>
-<td><p>2</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-odd"><td>Mahesh J Salgaonkar</td>
+<td>2</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-even"><td><p>Alistair Popple</p></td>
-<td><p>2</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-even"><td>Alistair Popple</td>
+<td>2</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Shilpasri G Bhat</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Shilpasri G Bhat</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Adriana Kobylak</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Adriana Kobylak</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Madhavan Srinivasan</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Madhavan Srinivasan</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Artem Senichev</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Artem Senichev</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Russell Currey</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Russell Currey</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Vaidyanathan Srinivasan</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Cyril Bur</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Cyril Bur</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-even"><td><p>Jeremy Kerr</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-even"><td>Jeremy Kerr</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Ellerman</p></td>
-<td><p>1</p></td>
-<td><p>(0.4%)</p></td>
+<tr class="row-odd"><td>Michael Ellerman</td>
+<td>1</td>
+<td>(0.4%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-changed-lines">
<h3>Developers with the most changed lines<a class="headerlink" href="#developers-with-the-most-changed-lines" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Andrew Jeffery</p></td>
-<td><p>2861</p></td>
-<td><p>(29.3%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Andrew Jeffery</td>
+<td>2861</td>
+<td>(29.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Stewart Smith</p></td>
-<td><p>1891</p></td>
-<td><p>(19.4%)</p></td>
+<tr class="row-odd"><td>Stewart Smith</td>
+<td>1891</td>
+<td>(19.4%)</td>
</tr>
-<tr class="row-even"><td><p>Prem Shanker Jha</p></td>
-<td><p>1046</p></td>
-<td><p>(10.7%)</p></td>
+<tr class="row-even"><td>Prem Shanker Jha</td>
+<td>1046</td>
+<td>(10.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>799</p></td>
-<td><p>(8.2%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>799</td>
+<td>(8.2%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>649</p></td>
-<td><p>(6.6%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>649</td>
+<td>(6.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Reza Arbab</p></td>
-<td><p>441</p></td>
-<td><p>(4.5%)</p></td>
+<tr class="row-odd"><td>Reza Arbab</td>
+<td>441</td>
+<td>(4.5%)</td>
</tr>
-<tr class="row-even"><td><p>Nicholas Piggin</p></td>
-<td><p>412</p></td>
-<td><p>(4.2%)</p></td>
+<tr class="row-even"><td>Nicholas Piggin</td>
+<td>412</td>
+<td>(4.2%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaibhav Jain</p></td>
-<td><p>278</p></td>
-<td><p>(2.8%)</p></td>
+<tr class="row-odd"><td>Vaibhav Jain</td>
+<td>278</td>
+<td>(2.8%)</td>
</tr>
-<tr class="row-even"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>250</p></td>
-<td><p>(2.6%)</p></td>
+<tr class="row-even"><td>CĂ©dric Le Goater</td>
+<td>250</td>
+<td>(2.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Frederic Barrat</p></td>
-<td><p>168</p></td>
-<td><p>(1.7%)</p></td>
+<tr class="row-odd"><td>Frederic Barrat</td>
+<td>168</td>
+<td>(1.7%)</td>
</tr>
-<tr class="row-even"><td><p>Rashmica Gupta</p></td>
-<td><p>161</p></td>
-<td><p>(1.6%)</p></td>
+<tr class="row-even"><td>Rashmica Gupta</td>
+<td>161</td>
+<td>(1.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>152</p></td>
-<td><p>(1.6%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>152</td>
+<td>(1.6%)</td>
</tr>
-<tr class="row-even"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>138</p></td>
-<td><p>(1.4%)</p></td>
+<tr class="row-even"><td>Benjamin Herrenschmidt</td>
+<td>138</td>
+<td>(1.4%)</td>
</tr>
-<tr class="row-odd"><td><p>Artem Senichev</p></td>
-<td><p>101</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-odd"><td>Artem Senichev</td>
+<td>101</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-even"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>83</p></td>
-<td><p>(0.9%)</p></td>
+<tr class="row-even"><td>Samuel Mendoza-Jonas</td>
+<td>83</td>
+<td>(0.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>82</p></td>
-<td><p>(0.8%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>82</td>
+<td>(0.8%)</td>
</tr>
-<tr class="row-even"><td><p>Michael Ellerman</p></td>
-<td><p>61</p></td>
-<td><p>(0.6%)</p></td>
+<tr class="row-even"><td>Michael Ellerman</td>
+<td>61</td>
+<td>(0.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Mahesh J Salgaonkar</p></td>
-<td><p>50</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-odd"><td>Mahesh J Salgaonkar</td>
+<td>50</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>44</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>44</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Alexey Kardashevskiy</p></td>
-<td><p>32</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Alexey Kardashevskiy</td>
+<td>32</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Adriana Kobylak</p></td>
-<td><p>29</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-even"><td>Adriana Kobylak</td>
+<td>29</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>18</p></td>
-<td><p>(0.2%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>18</td>
+<td>(0.2%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>4</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>4</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Madhavan Srinivasan</p></td>
-<td><p>3</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Madhavan Srinivasan</td>
+<td>3</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Cyril Bur</p></td>
-<td><p>3</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Cyril Bur</td>
+<td>3</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Jeremy Kerr</p></td>
-<td><p>3</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Jeremy Kerr</td>
+<td>3</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-even"><td><p>Russell Currey</p></td>
-<td><p>2</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Russell Currey</td>
+<td>2</td>
+<td>(0.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>2</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-odd"><td>Vaidyanathan Srinivasan</td>
+<td>2</td>
+<td>(0.0%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-lines-removed">
<h3>Developers with the most lines removed<a class="headerlink" href="#developers-with-the-most-lines-removed" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>205</p></td>
-<td><p>(7.9%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>CĂ©dric Le Goater</td>
+<td>205</td>
+<td>(7.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>8</p></td>
-<td><p>(0.3%)</p></td>
+<tr class="row-odd"><td>Samuel Mendoza-Jonas</td>
+<td>8</td>
+<td>(0.3%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>1</p></td>
-<td><p>(0.0%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>1</td>
+<td>(0.0%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-signoffs">
<h3>Developers with the most signoffs<a class="headerlink" href="#developers-with-the-most-signoffs" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>182</p></td>
-<td><p>(95.3%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>182</td>
+<td>(95.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>3</p></td>
-<td><p>(1.6%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>3</td>
+<td>(1.6%)</td>
</tr>
-<tr class="row-even"><td><p>Akshay Adiga</p></td>
-<td><p>2</p></td>
-<td><p>(1.0%)</p></td>
+<tr class="row-even"><td>Akshay Adiga</td>
+<td>2</td>
+<td>(1.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Christophe Lombard</p></td>
-<td><p>1</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-odd"><td>Christophe Lombard</td>
+<td>1</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Ryan Grimm</p></td>
-<td><p>1</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-even"><td>Ryan Grimm</td>
+<td>1</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>1</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>1</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh J Salgaonkar</p></td>
-<td><p>1</p></td>
-<td><p>(0.5%)</p></td>
+<tr class="row-even"><td>Mahesh J Salgaonkar</td>
+<td>1</td>
+<td>(0.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Total</p></td>
-<td><p>191</p></td>
-<td></td>
+<tr class="row-odd"><td>Total</td>
+<td>191</td>
+<td>&#160;</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-reviews">
<h3>Developers with the most reviews<a class="headerlink" href="#developers-with-the-most-reviews" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 74%" />
-<col style="width: 9%" />
-<col style="width: 16%" />
+<col width="74%" />
+<col width="9%" />
+<col width="16%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>15</p></td>
-<td><p>(19.7%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>15</td>
+<td>(19.7%)</td>
</tr>
-<tr class="row-odd"><td><p>Frederic Barrat</p></td>
-<td><p>11</p></td>
-<td><p>(14.5%)</p></td>
+<tr class="row-odd"><td>Frederic Barrat</td>
+<td>11</td>
+<td>(14.5%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>9</p></td>
-<td><p>(11.8%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>9</td>
+<td>(11.8%)</td>
</tr>
-<tr class="row-odd"><td><p>Alistair Popple</p></td>
-<td><p>8</p></td>
-<td><p>(10.5%)</p></td>
+<tr class="row-odd"><td>Alistair Popple</td>
+<td>8</td>
+<td>(10.5%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>5</p></td>
-<td><p>(6.6%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>5</td>
+<td>(6.6%)</td>
</tr>
-<tr class="row-odd"><td><p>Samuel Mendoza-Jonas</p></td>
-<td><p>4</p></td>
-<td><p>(5.3%)</p></td>
+<tr class="row-odd"><td>Samuel Mendoza-Jonas</td>
+<td>4</td>
+<td>(5.3%)</td>
</tr>
-<tr class="row-even"><td><p>Christophe Lombard</p></td>
-<td><p>3</p></td>
-<td><p>(3.9%)</p></td>
+<tr class="row-even"><td>Christophe Lombard</td>
+<td>3</td>
+<td>(3.9%)</td>
</tr>
-<tr class="row-odd"><td><p>Gregory S. Still</p></td>
-<td><p>3</p></td>
-<td><p>(3.9%)</p></td>
+<tr class="row-odd"><td>Gregory S. Still</td>
+<td>3</td>
+<td>(3.9%)</td>
</tr>
-<tr class="row-even"><td><p>Mahesh J Salgaonkar</p></td>
-<td><p>2</p></td>
-<td><p>(2.6%)</p></td>
+<tr class="row-even"><td>Mahesh J Salgaonkar</td>
+<td>2</td>
+<td>(2.6%)</td>
</tr>
-<tr class="row-odd"><td><p>RANGANATHPRASAD G. BRAHMASAMUDRA</p></td>
-<td><p>2</p></td>
-<td><p>(2.6%)</p></td>
+<tr class="row-odd"><td>RANGANATHPRASAD G. BRAHMASAMUDRA</td>
+<td>2</td>
+<td>(2.6%)</td>
</tr>
-<tr class="row-even"><td><p>Jennifer A. Stofer</p></td>
-<td><p>2</p></td>
-<td><p>(2.6%)</p></td>
+<tr class="row-even"><td>Jennifer A. Stofer</td>
+<td>2</td>
+<td>(2.6%)</td>
</tr>
-<tr class="row-odd"><td><p>AMIT J. TENDOLKAR</p></td>
-<td><p>2</p></td>
-<td><p>(2.6%)</p></td>
+<tr class="row-odd"><td>AMIT J. TENDOLKAR</td>
+<td>2</td>
+<td>(2.6%)</td>
</tr>
-<tr class="row-even"><td><p>Christian R. Geddes</p></td>
-<td><p>2</p></td>
-<td><p>(2.6%)</p></td>
+<tr class="row-even"><td>Christian R. Geddes</td>
+<td>2</td>
+<td>(2.6%)</td>
</tr>
-<tr class="row-odd"><td><p>CĂ©dric Le Goater</p></td>
-<td><p>1</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-odd"><td>CĂ©dric Le Goater</td>
+<td>1</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-even"><td><p>Shilpasri G Bhat</p></td>
-<td><p>1</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-even"><td>Shilpasri G Bhat</td>
+<td>1</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Daniel M. Crowell</p></td>
-<td><p>1</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-odd"><td>Daniel M. Crowell</td>
+<td>1</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-even"><td><p>Alexey Kardashevskiy</p></td>
-<td><p>1</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-even"><td>Alexey Kardashevskiy</td>
+<td>1</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Joel Stanley</p></td>
-<td><p>1</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-odd"><td>Joel Stanley</td>
+<td>1</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-even"><td><p>Vaibhav Jain</p></td>
-<td><p>1</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-even"><td>Vaibhav Jain</td>
+<td>1</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Nicholas Piggin</p></td>
-<td><p>1</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-odd"><td>Nicholas Piggin</td>
+<td>1</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Jeffery</p></td>
-<td><p>1</p></td>
-<td><p>(1.3%)</p></td>
+<tr class="row-even"><td>Andrew Jeffery</td>
+<td>1</td>
+<td>(1.3%)</td>
</tr>
-<tr class="row-odd"><td><p>Total</p></td>
-<td><p>76</p></td>
-<td></td>
+<tr class="row-odd"><td>Total</td>
+<td>76</td>
+<td>&#160;</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-test-credits">
<h3>Developers with the most test credits<a class="headerlink" href="#developers-with-the-most-test-credits" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Jenkins Server</p></td>
-<td><p>3</p></td>
-<td><p>(12.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Jenkins Server</td>
+<td>3</td>
+<td>(12.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Cronus HW CI</p></td>
-<td><p>3</p></td>
-<td><p>(12.0%)</p></td>
+<tr class="row-odd"><td>Cronus HW CI</td>
+<td>3</td>
+<td>(12.0%)</td>
</tr>
-<tr class="row-even"><td><p>Hostboot CI</p></td>
-<td><p>3</p></td>
-<td><p>(12.0%)</p></td>
+<tr class="row-even"><td>Hostboot CI</td>
+<td>3</td>
+<td>(12.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Jenkins OP Build CI</p></td>
-<td><p>3</p></td>
-<td><p>(12.0%)</p></td>
+<tr class="row-odd"><td>Jenkins OP Build CI</td>
+<td>3</td>
+<td>(12.0%)</td>
</tr>
-<tr class="row-even"><td><p>FSP CI Jenkins</p></td>
-<td><p>3</p></td>
-<td><p>(12.0%)</p></td>
+<tr class="row-even"><td>FSP CI Jenkins</td>
+<td>3</td>
+<td>(12.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Jenkins OP HW</p></td>
-<td><p>3</p></td>
-<td><p>(12.0%)</p></td>
+<tr class="row-odd"><td>Jenkins OP HW</td>
+<td>3</td>
+<td>(12.0%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>2</p></td>
-<td><p>(8.0%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>2</td>
+<td>(8.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Donnellan</p></td>
-<td><p>1</p></td>
-<td><p>(4.0%)</p></td>
+<tr class="row-odd"><td>Andrew Donnellan</td>
+<td>1</td>
+<td>(4.0%)</td>
</tr>
-<tr class="row-even"><td><p>Oliver O’Halloran</p></td>
-<td><p>1</p></td>
-<td><p>(4.0%)</p></td>
+<tr class="row-even"><td>Oliver O’Halloran</td>
+<td>1</td>
+<td>(4.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Andrew Jeffery</p></td>
-<td><p>1</p></td>
-<td><p>(4.0%)</p></td>
+<tr class="row-odd"><td>Andrew Jeffery</td>
+<td>1</td>
+<td>(4.0%)</td>
</tr>
-<tr class="row-even"><td><p>HWSV CI</p></td>
-<td><p>1</p></td>
-<td><p>(4.0%)</p></td>
+<tr class="row-even"><td>HWSV CI</td>
+<td>1</td>
+<td>(4.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Artem Senichev</p></td>
-<td><p>1</p></td>
-<td><p>(4.0%)</p></td>
+<tr class="row-odd"><td>Artem Senichev</td>
+<td>1</td>
+<td>(4.0%)</td>
</tr>
-<tr class="row-even"><td><p>Total</p></td>
-<td><p>25</p></td>
-<td></td>
+<tr class="row-even"><td>Total</td>
+<td>25</td>
+<td>&#160;</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-who-gave-the-most-tested-by-credits">
<h3>Developers who gave the most tested-by credits<a class="headerlink" href="#developers-who-gave-the-most-tested-by-credits" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Prem Shanker Jha</p></td>
-<td><p>19</p></td>
-<td><p>(76.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Prem Shanker Jha</td>
+<td>19</td>
+<td>(76.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Frederic Barrat</p></td>
-<td><p>2</p></td>
-<td><p>(8.0%)</p></td>
+<tr class="row-odd"><td>Frederic Barrat</td>
+<td>2</td>
+<td>(8.0%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Jeffery</p></td>
-<td><p>1</p></td>
-<td><p>(4.0%)</p></td>
+<tr class="row-even"><td>Andrew Jeffery</td>
+<td>1</td>
+<td>(4.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaibhav Jain</p></td>
-<td><p>1</p></td>
-<td><p>(4.0%)</p></td>
+<tr class="row-odd"><td>Vaibhav Jain</td>
+<td>1</td>
+<td>(4.0%)</td>
</tr>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>1</p></td>
-<td><p>(4.0%)</p></td>
+<tr class="row-even"><td>Stewart Smith</td>
+<td>1</td>
+<td>(4.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Benjamin Herrenschmidt</p></td>
-<td><p>1</p></td>
-<td><p>(4.0%)</p></td>
+<tr class="row-odd"><td>Benjamin Herrenschmidt</td>
+<td>1</td>
+<td>(4.0%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-with-the-most-report-credits">
<h3>Developers with the most report credits<a class="headerlink" href="#developers-with-the-most-report-credits" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>2</p></td>
-<td><p>(25.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>2</td>
+<td>(25.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Frederic Barrat</p></td>
-<td><p>1</p></td>
-<td><p>(12.5%)</p></td>
+<tr class="row-odd"><td>Frederic Barrat</td>
+<td>1</td>
+<td>(12.5%)</td>
</tr>
-<tr class="row-even"><td><p>Dawn Sylvia</p></td>
-<td><p>1</p></td>
-<td><p>(12.5%)</p></td>
+<tr class="row-even"><td>Dawn Sylvia</td>
+<td>1</td>
+<td>(12.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Meng Li</p></td>
-<td><p>1</p></td>
-<td><p>(12.5%)</p></td>
+<tr class="row-odd"><td>Meng Li</td>
+<td>1</td>
+<td>(12.5%)</td>
</tr>
-<tr class="row-even"><td><p>Tyler Seredynski</p></td>
-<td><p>1</p></td>
-<td><p>(12.5%)</p></td>
+<tr class="row-even"><td>Tyler Seredynski</td>
+<td>1</td>
+<td>(12.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Pridhiviraj Paidipeddi</p></td>
-<td><p>1</p></td>
-<td><p>(12.5%)</p></td>
+<tr class="row-odd"><td>Pridhiviraj Paidipeddi</td>
+<td>1</td>
+<td>(12.5%)</td>
</tr>
-<tr class="row-even"><td><p>Stephanie Swanson</p></td>
-<td><p>1</p></td>
-<td><p>(12.5%)</p></td>
+<tr class="row-even"><td>Stephanie Swanson</td>
+<td>1</td>
+<td>(12.5%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="developers-who-gave-the-most-report-credits">
<h3>Developers who gave the most report credits<a class="headerlink" href="#developers-who-gave-the-most-report-credits" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>Stewart Smith</p></td>
-<td><p>2</p></td>
-<td><p>(25.0%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>Stewart Smith</td>
+<td>2</td>
+<td>(25.0%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaidyanathan Srinivasan</p></td>
-<td><p>2</p></td>
-<td><p>(25.0%)</p></td>
+<tr class="row-odd"><td>Vaidyanathan Srinivasan</td>
+<td>2</td>
+<td>(25.0%)</td>
</tr>
-<tr class="row-even"><td><p>Vasant Hegde</p></td>
-<td><p>1</p></td>
-<td><p>(12.5%)</p></td>
+<tr class="row-even"><td>Vasant Hegde</td>
+<td>1</td>
+<td>(12.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Vaibhav Jain</p></td>
-<td><p>1</p></td>
-<td><p>(12.5%)</p></td>
+<tr class="row-odd"><td>Vaibhav Jain</td>
+<td>1</td>
+<td>(12.5%)</td>
</tr>
-<tr class="row-even"><td><p>Andrew Donnellan</p></td>
-<td><p>1</p></td>
-<td><p>(12.5%)</p></td>
+<tr class="row-even"><td>Andrew Donnellan</td>
+<td>1</td>
+<td>(12.5%)</td>
</tr>
-<tr class="row-odd"><td><p>Michael Neuling</p></td>
-<td><p>1</p></td>
-<td><p>(12.5%)</p></td>
+<tr class="row-odd"><td>Michael Neuling</td>
+<td>1</td>
+<td>(12.5%)</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="employers-with-the-most-hackers">
<h3>Employers with the most hackers<a class="headerlink" href="#employers-with-the-most-hackers" title="Permalink to this headline">¶</a></h3>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 69%" />
-<col style="width: 11%" />
-<col style="width: 19%" />
+<col width="69%" />
+<col width="11%" />
+<col width="19%" />
</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Developer</p></th>
-<th class="head"><p>#</p></th>
-<th class="head"><p>%</p></th>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Developer</th>
+<th class="head">#</th>
+<th class="head">%</th>
</tr>
</thead>
-<tbody>
-<tr class="row-even"><td><p>IBM</p></td>
-<td><p>27</p></td>
-<td><p>(96.4%)</p></td>
+<tbody valign="top">
+<tr class="row-even"><td>IBM</td>
+<td>27</td>
+<td>(96.4%)</td>
</tr>
-<tr class="row-odd"><td><p>YADRO</p></td>
-<td><p>1</p></td>
-<td><p>(3.6%)</p></td>
+<tr class="row-odd"><td>YADRO</td>
+<td>1</td>
+<td>(3.6%)</td>
</tr>
</tbody>
</table>
@@ -1813,7 +1828,6 @@ A total of 9146 lines were added, and 2610 removed (delta 6536).</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -1878,15 +1892,17 @@ A total of 9146 lines were added, and 2610 removed (delta 6536).</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -1903,15 +1919,14 @@ A total of 9146 lines were added, and 2610 removed (delta 6536).</p>
<li class="right" >
<a href="skiboot-6.1-rc1.html" title="skiboot-6.1-rc1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.3-rc1.html b/doc/release-notes/skiboot-6.3-rc1.html
index 4758d1f..792b92e 100644
--- a/doc/release-notes/skiboot-6.3-rc1.html
+++ b/doc/release-notes/skiboot-6.3-rc1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.3-rc1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.3-rc1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.3.html" title="skiboot-6.3"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -62,11 +63,11 @@ did).</p>
<div class="section" id="new-features">
<span id="skiboot-6-3-rc1-new-features"></span><h2>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hw/imc: Enable opal calls to init/start/stop IMC Trace mode</p>
+<li><p class="first">hw/imc: Enable opal calls to init/start/stop IMC Trace mode</p>
<p>New OPAL APIs for In-Memory Collection Counter infrastructure(IMC),
including a new device type called OPAL_IMC_COUNTERS_TRACE.</p>
</li>
-<li><p>xive: Add calls to save/restore the queues and VPs HW state</p>
+<li><p class="first">xive: Add calls to save/restore the queues and VPs HW state</p>
<p>To be able to support migration of guests using the XIVE native
exploitation mode, (where the queue is effectively owned by the
guest), KVM needs to be able to save and restore the HW-modified
@@ -76,7 +77,7 @@ of the VP from the NVT structure : the VP interrupt pending bits.</p>
<p>However, there is no need to set back the NVT structure on P9. P10
should be the same.</p>
</li>
-<li><p>witherspoon: Add nvlink2 interconnect information</p>
+<li><p class="first">witherspoon: Add nvlink2 interconnect information</p>
<p>GPUs on Redbud and Sequoia platforms are interconnected in groups of
2 or 3 GPUs. The problem with that is if the user decides to pass a single
GPU from a group to the userspace, we need to ensure that links between
@@ -87,21 +88,22 @@ disable links to peer GPUs, we need a topology map.</p>
of peer GPUs and NVLink2 bridges. The index in the property is a GPU link
number.</p>
</li>
-<li><p>platforms/romulus: Also support talos</p>
+<li><p class="first">platforms/romulus: Also support talos</p>
<p>The two are similar enough and I’d like to have a slot table for our
Talos.</p>
</li>
-<li><p>OpenCAPI support! (see <a class="reference internal" href="#skiboot-6-3-rc1-opencapi"><span class="std std-ref">OpenCAPI</span></a> section)</p></li>
-<li><p>opal/hmi: set a flag to inform OS that TOD/TB has failed.</p>
+<li><p class="first">OpenCAPI support! (see <a class="reference internal" href="#skiboot-6-3-rc1-opencapi"><span class="std std-ref">OpenCAPI</span></a> section)</p>
+</li>
+<li><p class="first">opal/hmi: set a flag to inform OS that TOD/TB has failed.</p>
<p>Set a flag to indicate OS about TOD/TB failure as part of new
opal_handle_hmi2 handler. This flag then can be used by OS to make sure
functions depending on TB value (e.g. udelay()) are aware of TB not
ticking.</p>
</li>
-<li><p>astbmc: Enable IPMI HIOMAP for AMI platforms</p>
+<li><p class="first">astbmc: Enable IPMI HIOMAP for AMI platforms</p>
<p>Required for Habanero, Palmetto and Romulus.</p>
</li>
-<li><p>power-mgmt : occ : Add â€freq-domain-mask’ DT property</p>
+<li><p class="first">power-mgmt : occ : Add â€freq-domain-mask’ DT property</p>
<p>Add a new device-tree property freq-domain-indicator to define group of
CPUs which would share same frequency. This property has been added under
power-mgmt node. It is a bitmask.</p>
@@ -121,7 +123,7 @@ recent frequency value requested by the CPUs in the quad.</p>
the Quad to the maximum of the latest frequency requested by each of
the component cores.</p>
</li>
-<li><p>powercap: occ: Fix the powercapping range allowed for user</p>
+<li><p class="first">powercap: occ: Fix the powercapping range allowed for user</p>
<p>OCC provides two limits for minimum powercap. One being hard powercap
minimum which is guaranteed by OCC and the other one is a soft
powercap minimum which is lesser than hard-min and may or may not be
@@ -131,7 +133,7 @@ minimum as the “powercap-min” DT property. And it also adds a new
DT property called “powercap-hard-min” to export the hard-min powercap
limit.</p>
</li>
-<li><p>Add NVDIMM support</p>
+<li><p class="first">Add NVDIMM support</p>
<p>NVDIMMs are memory modules that use a battery backup system to allow the
contents RAM to be saved to non-volatile storage if system power goes
away unexpectedly. This allows them to be used a high-performance
@@ -141,7 +143,7 @@ via the HDAT. We need to parse out the NVDIMM memory ranges and create
memory regions with the “pmem-region” compatible label to make them
available to the host.</p>
</li>
-<li><p>core/exceptions: implement support for MCE interrupts in powersave</p>
+<li><p class="first">core/exceptions: implement support for MCE interrupts in powersave</p>
<p>The ISA specifies that MCE interrupts in power saving modes will enter
at 0x200 with powersave bits in SRR1 set. This is not currently
supported properly, the MCE will just happen like a normal interrupt,
@@ -150,15 +152,15 @@ etc).</p>
<p>So check the power save bits similarly to the sreset vector, and
handle this properly.</p>
</li>
-<li><p>core/exceptions: allow recoverable sreset exceptions</p>
+<li><p class="first">core/exceptions: allow recoverable sreset exceptions</p>
<p>This requires implementing the MSR[RI] bit. Then just allow all
non-fatal sreset exceptions to recover.</p>
</li>
-<li><p>core/exceptions: implement an exception handler for non-powersave sresets</p>
+<li><p class="first">core/exceptions: implement an exception handler for non-powersave sresets</p>
<p>Detect non-powersave sresets and send them to the normal exception
handler which prints registers and stack.</p>
</li>
-<li><p>Add PVR_TYPE_P9P</p>
+<li><p class="first">Add PVR_TYPE_P9P</p>
<p>Enable a new PVR to get us running on another p9 variant.</p>
</li>
</ul>
@@ -166,7 +168,7 @@ handler which prints registers and stack.</p>
<div class="section" id="deprecated-removed-features">
<h2>Deprecated/Removed Features<a class="headerlink" href="#deprecated-removed-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>opal: Deprecate reading the PHB status</p>
+<li><p class="first">opal: Deprecate reading the PHB status</p>
<p>The OPAL_PCI_EEH_FREEZE_STATUS call takes a bunch of parameters, one of
them is &#64;phb_status. It is defined as __be64* and always NULL in
the current Linux upstream but if anyone ever decides to read that status,
@@ -177,7 +179,7 @@ corruption; p7ioc-phb has the same issue.</p>
the error message from PHB4 to the affected OPAL handlers.</p>
<p>As far as we can tell, nobody has ever used this and thus it’s safe to remove.</p>
</li>
-<li><p>Remove POWER9N DD1 support</p>
+<li><p class="first">Remove POWER9N DD1 support</p>
<p>This is not a shipping product and is no longer supported by Linux
or other firmware components.</p>
</li>
@@ -186,15 +188,17 @@ or other firmware components.</p>
<div class="section" id="general">
<h2>General<a class="headerlink" href="#general" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>core/i2c: Various bits of refactoring</p></li>
-<li><p>refactor backtrace generation infrastructure</p></li>
-<li><p>astbmc: Handle failure to initialise raw flash</p>
+<li><p class="first">core/i2c: Various bits of refactoring</p>
+</li>
+<li><p class="first">refactor backtrace generation infrastructure</p>
+</li>
+<li><p class="first">astbmc: Handle failure to initialise raw flash</p>
<p>Initialising raw flash lead to a dead assignment to rc. Check the return
code and take the failure path as necessary. Both before and after the
fix we see output along the lines of the following when flash_init()
fails:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">53.283182881</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">IRQ</span><span class="p">:</span> <span class="n">Registering</span> <span class="mf">0800..0</span><span class="n">ff7</span> <span class="n">ops</span> <span class="o">@</span><span class="mh">0x300d4b98</span> <span class="p">(</span><span class="n">data</span> <span class="mh">0x3052b9d8</span><span class="p">)</span>
-<span class="p">[</span> <span class="mf">53.283184335</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">IRQ</span><span class="p">:</span> <span class="n">Registering</span> <span class="mi">0</span><span class="n">ff8</span><span class="o">.</span><span class="mf">.0</span><span class="n">fff</span> <span class="n">ops</span> <span class="o">@</span><span class="mh">0x300d4bc8</span> <span class="p">(</span><span class="n">data</span> <span class="mh">0x3052b9d8</span><span class="p">)</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">53.283182881</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">IRQ</span><span class="p">:</span> <span class="n">Registering</span> <span class="mf">0800.</span><span class="o">.</span><span class="mi">0</span><span class="n">ff7</span> <span class="n">ops</span> <span class="nd">@0x300d4b98</span> <span class="p">(</span><span class="n">data</span> <span class="mh">0x3052b9d8</span><span class="p">)</span>
+<span class="p">[</span> <span class="mf">53.283184335</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">IRQ</span><span class="p">:</span> <span class="n">Registering</span> <span class="mi">0</span><span class="n">ff8</span><span class="o">..</span><span class="mi">0</span><span class="n">fff</span> <span class="n">ops</span> <span class="nd">@0x300d4bc8</span> <span class="p">(</span><span class="n">data</span> <span class="mh">0x3052b9d8</span><span class="p">)</span>
<span class="p">[</span> <span class="mf">53.283185513</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">PHB</span><span class="c1">#0000: Initializing PHB...</span>
<span class="p">[</span> <span class="mf">53.288260827</span><span class="p">,</span><span class="mi">4</span><span class="p">]</span> <span class="n">FLASH</span><span class="p">:</span> <span class="n">Can</span><span class="s1">&#39;t load resource id:0. No system flash found</span>
<span class="p">[</span> <span class="mf">53.288354442</span><span class="p">,</span><span class="mi">4</span><span class="p">]</span> <span class="n">FLASH</span><span class="p">:</span> <span class="n">Can</span><span class="s1">&#39;t load resource id:1. No system flash found</span>
@@ -231,7 +235,7 @@ of executing from unexpected memory locations. As such the issue is
reduced to down to a fix for poor error hygene in the original change
and a resolution for a Coverity warning (famous last words etc).</p>
</li>
-<li><p>core/flash: Retry requests as necessary in flash_load_resource()</p>
+<li><p class="first">core/flash: Retry requests as necessary in flash_load_resource()</p>
<p>We would like to successfully boot if we have a dependency on the BMC
for flash even if the BMC is not current ready to service flash
requests. On the assumption that it will become ready, retry for several
@@ -268,14 +272,14 @@ CPU 0040 Backtrace:
no delay for e.g. the host kernel, just for asynchronously loaded
resources during boot.</p>
</li>
-<li><p>fast-reboot: occ: Call occ_pstates_init() on fast-reset on all machines</p>
+<li><p class="first">fast-reboot: occ: Call occ_pstates_init() on fast-reset on all machines</p>
<p>Commit 815417dcda2e (“init, occ: Initialise OCC earlier on BMC systems”)
conditionally invoked occ_pstates_init() only on FSP based systems in
load_and_boot_kernel(). Due to this pstate table is re-parsed on FSP
system and skipped on BMC system during fast-reboot. So this patch fixes
this by invoking occ_pstates_init() on all boxes during fast-reboot.</p>
</li>
-<li><p>opal/hmi: Don’t retry TOD recovery if it is already in failed state.</p>
+<li><p class="first">opal/hmi: Don’t retry TOD recovery if it is already in failed state.</p>
<p>On TOD failure, all cores/thread receives HMI and very first thread that
gets interrupt fixes the TOD where as others just resets the respective
HMER error bit and return. But when TOD is unrecoverable, all the threads
@@ -284,7 +288,7 @@ opal. Set a global flag when TOD is unrecoverable so that rest of the
threads go back to linux immediately avoiding lock ups in system
reboot/panic path.</p>
</li>
-<li><p>hw/bt: Do not disable ipmi message retry during OPAL boot</p>
+<li><p class="first">hw/bt: Do not disable ipmi message retry during OPAL boot</p>
<p>Currently OPAL doesn’t know whether BMC is functioning or not. If BMC is
down (like BMC reboot), then we keep on retry sending message to BMC. So
in some corner cases we may hit hard lockup issue in kernel.</p>
@@ -293,7 +297,7 @@ for now commit 01f977c3 added option to disable message retry in synchronous.
But this fix is not required during boot. Hence lets disable IPMI message
retry during OPAL boot.</p>
</li>
-<li><p>hdata/memory: Fix warning message</p>
+<li><p class="first">hdata/memory: Fix warning message</p>
<p>Even though we added memory to device tree, we are getting below warning.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">57.136949696</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span> <span class="n">Unable</span> <span class="n">to</span> <span class="n">use</span> <span class="n">memory</span> <span class="nb">range</span> <span class="mi">0</span> <span class="kn">from</span> <span class="nn">MSAREA</span> <span class="mi">0</span>
<span class="p">[</span> <span class="mf">57.137049753</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span> <span class="n">Unable</span> <span class="n">to</span> <span class="n">use</span> <span class="n">memory</span> <span class="nb">range</span> <span class="mi">0</span> <span class="kn">from</span> <span class="nn">MSAREA</span> <span class="mi">1</span>
@@ -302,7 +306,7 @@ retry during OPAL boot.</p>
</pre></div>
</div>
</li>
-<li><p>hw/bt: Add backend interface to disable ipmi message retry option</p>
+<li><p class="first">hw/bt: Add backend interface to disable ipmi message retry option</p>
<p>During boot OPAL makes IPMI_GET_BT_CAPS call to BMC to get BT interface
capabilities which includes IPMI message max resend count, message
timeout, etc,. Most of the time OPAL gets response from BMC within
@@ -320,7 +324,7 @@ greatly reduces kernel hardlock up issues.</p>
<p>This is short term fix. Long term solution is to convert all synchronous
messages to asynhrounous one.</p>
</li>
-<li><p>ipmi/power: Fix system reboot issue</p>
+<li><p class="first">ipmi/power: Fix system reboot issue</p>
<p>Kernel makes reboot/shudown OPAL call for reboot/shutdown. Once kernel
gets response from OPAL it runs opal_poll_events() until firmware
handles the request.</p>
@@ -333,7 +337,7 @@ reboot/shutdown the system using BMC interface.</p>
then it will resend the message. At some stage BMC will be ready to accept
message and handles IPMI message.</p>
</li>
-<li><p>firmware-versions: Add test case for parsing VERSION</p>
+<li><p class="first">firmware-versions: Add test case for parsing VERSION</p>
<p>Also make it possible to use with afl-lop/afl-fuzz just to help make
<em>sure</em> we’re all good.</p>
<p>Additionally, if we hit a entry in VERSION that is larger than our
@@ -342,19 +346,19 @@ stack. This is only a problem if VERSION isn’t trusted, which as of
4b8cc05a94513816d43fb8bd6178896b430af08f it is verified as part of
Secure Boot.</p>
</li>
-<li><p>core/fast-reboot: improve NMI handling during fast reset</p>
+<li><p class="first">core/fast-reboot: improve NMI handling during fast reset</p>
<p>Improve sreset and MCE handling in fast reboot. Switch the HILE bit
off before copying OPAL’s exception vectors, so NMIs can be handled
properly. Also disable MSR[ME] while the vectors are being overwritten</p>
</li>
-<li><p>core/cpu: HID update race</p>
+<li><p class="first">core/cpu: HID update race</p>
<p>If the per-core HID register is updated concurrently by multiple
threads, updates can get lost. This has been observed during fast
reboot where the HILE bit does not get cleared on all cores, which
can cause machine check exception interrupts to crash.</p>
<p>Fix this by only updating HID on thread0.</p>
</li>
-<li><p>SLW: Print verbose info on errors only</p>
+<li><p class="first">SLW: Print verbose info on errors only</p>
<p>Change print level from debug to warning for reporting
bad EC_PPM_SPECIAL_WKUP_* scom values. To reduce cluttering
in the log print only on error.</p>
@@ -364,8 +368,9 @@ in the log print only on error.</p>
<div class="section" id="ibm-fsp-based-platforms">
<h2>IBM FSP based platforms<a class="headerlink" href="#ibm-fsp-based-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>platforms/firenze: Rework I2C controller fixups</p></li>
-<li><p>platforms/zz: Re-enable LXVPD slot information parsing</p>
+<li><p class="first">platforms/firenze: Rework I2C controller fixups</p>
+</li>
+<li><p class="first">platforms/zz: Re-enable LXVPD slot information parsing</p>
<p>From memory this was disabled in the distant past since we were waiting
for an updates to the LXPVD format. It looks like that never happened
so re-enable it for the ZZ platform so that we can get PCI slot location
@@ -376,7 +381,7 @@ codes on ZZ.</p>
<div class="section" id="hiomap">
<h2>HIOMAP<a class="headerlink" href="#hiomap" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>astbmc: Try IPMI HIOMAP for P8</p>
+<li><p class="first">astbmc: Try IPMI HIOMAP for P8</p>
<p>The HIOMAP protocol was developed after the release of P8 in preparation
for P9. As a consequence P9 always uses it, but it has rarely been
enabled for P8. P8DTU has recently added IPMI HIOMAP support to its BMC
@@ -384,19 +389,19 @@ firmware, so enable its use in skiboot with P8 machines. Doing so
requires some rework to ensure fallback works correctly as in the past
the fallback was to mbox, which will only work for P9.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Enforce message size for empty response</p>
+<li><p class="first">libflash/ipmi-hiomap: Enforce message size for empty response</p>
<p>The protocol defines the response to the associated messages as empty
except for the command ID and sequence fields. If the BMC is returning
extra data consider the message malformed.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Remove unused close handling</p>
+<li><p class="first">libflash/ipmi-hiomap: Remove unused close handling</p>
<p>Issuing a HIOMAP_C_CLOSE is not required by the protocol specification,
rather a close can be implicit in a subsequent
CREATE_{READ,WRITE}_WINDOW request. The implicit close provides an
opportunity to reduce LPC traffic and the implementation takes up that
optimisation, so remove the case from the IPMI callback handler.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Overhaul event handling</p>
+<li><p class="first">libflash/ipmi-hiomap: Overhaul event handling</p>
<p>Reworking the event handling was inspired by a bug report by Vasant
where the host would get wedged on multiple flash access attempts in the
face of a persistent error state on the BMC-side. The cause of this bug
@@ -407,17 +412,17 @@ HIOMAP_E_DAEMON_READY is clear in the prior calls.</p>
<p>Regardless, there were other correctness and efficiency problems with
the handling strategy:</p>
<ul class="simple">
-<li><p>Ack-able event state was not restored in the face of errors in the
-process of re-establishing protocol state</p></li>
-<li><p>It forced needless window restoration with respect to the context in
-which ipmi_hiomap_handle_events() was called.</p></li>
-<li><p>Tests for HIOMAP_E_DAEMON_READY and HIOMAP_E_FLASH_LOST were redundant
-with the overhauled error handling introduced in the previous patch</p></li>
+<li>Ack-able event state was not restored in the face of errors in the
+process of re-establishing protocol state</li>
+<li>It forced needless window restoration with respect to the context in
+which ipmi_hiomap_handle_events() was called.</li>
+<li>Tests for HIOMAP_E_DAEMON_READY and HIOMAP_E_FLASH_LOST were redundant
+with the overhauled error handling introduced in the previous patch</li>
</ul>
<p>Fix all of the above issues and add comments to explain the event
handling flow.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Overhaul error handling</p>
+<li><p class="first">libflash/ipmi-hiomap: Overhaul error handling</p>
<p>The aim is to improve the robustness with respect to absence of the
BMC-side daemon. The current error handling roughly mirrors what was
done for the mailbox implementation, but there’s room for improvement.</p>
@@ -435,13 +440,14 @@ operation no attempt is made to recover it on the spot, instead the
error is returned up the stack and the caller can choose how it wishes
to respond.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Fix leak of msg in callback</p></li>
+<li><p class="first">libflash/ipmi-hiomap: Fix leak of msg in callback</p>
+</li>
</ul>
</div>
<div class="section" id="power8">
<h2>POWER8<a class="headerlink" href="#power8" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hw/phb3/naples: Disable D-states</p>
+<li><p class="first">hw/phb3/naples: Disable D-states</p>
<p>Putting “Mellanox Technologies MT27700 Family [ConnectX-4] [15b3:1013]”
(more precisely, the second of 2 its PCI functions, no matter in what
order) into the D3 state causes EEH with the “PCT timeout” error.
@@ -450,7 +456,7 @@ seem to have this issue.</p>
<p>This disables D-states changing for devices on root buses on Naples by
installing a config space access filter (copied from PHB4).</p>
</li>
-<li><p>cpufeatures: Always advertise POWER8NVL as DD2</p>
+<li><p class="first">cpufeatures: Always advertise POWER8NVL as DD2</p>
<p>Despite the major version of PVR being 1 (0x004c0100) for POWER8NVL,
these chips are functionally equalent to P8/P8E DD2 levels.</p>
<p>This advertises POWER8NVL as DD2. As the result, skiboot adds
@@ -463,20 +469,21 @@ of missing LPCR_PECEDH.</p>
<div class="section" id="p8dtu-platform">
<h3>p8dtu Platform<a class="headerlink" href="#p8dtu-platform" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>p8dtu: Configure BMC graphics</p>
+<li><p class="first">p8dtu: Configure BMC graphics</p>
<p>We can no-longer read the values from the BMC in the way we have in the
past. Values were provided by Eric Chen of SMC.</p>
</li>
-<li><p>p8dtu: Enable HIOMAP support</p></li>
+<li><p class="first">p8dtu: Enable HIOMAP support</p>
+</li>
</ul>
</div>
<div class="section" id="vesnin-platform">
<h3>Vesnin Platform<a class="headerlink" href="#vesnin-platform" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>platforms/vesnin: Disable PCIe port bifurcation</p>
+<li><p class="first">platforms/vesnin: Disable PCIe port bifurcation</p>
<p>PCIe ports connected to CPU1 and CPU3 now work as x16 instead of x8x8.</p>
</li>
-<li><p>Fix hang in pnv_platform_error_reboot path due to TOD failure.</p>
+<li><p class="first">Fix hang in pnv_platform_error_reboot path due to TOD failure.</p>
<p>On TOD failure, with TB stuck, when linux heads down to
pnv_platform_error_reboot() path due to unrecoverable hmi event, the panic
cpu gets stuck in OPAL inside ipmi_queue_msg_sync(). At this time, rest
@@ -533,19 +540,19 @@ failed state as well.</p>
<div class="section" id="power9">
<span id="skiboot-6-3-rc1-power9"></span><h2>POWER9<a class="headerlink" href="#power9" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Retry link training at PCIe GEN1 if presence detected but training repeatedly failed</p>
+<li><p class="first">Retry link training at PCIe GEN1 if presence detected but training repeatedly failed</p>
<p>Certain older PCIe 1.0 devices will not train unless the training process starts at GEN1 speeds.
As a last resort when a device will not train, fall back to GEN1 speed for the last training attempt.</p>
<p>This is verified to fix devices based on the Conexant CX23888 on the Talos II platform.</p>
</li>
-<li><p>hw/phb4: Drop FRESET_DEASSERT_DELAY state</p>
+<li><p class="first">hw/phb4: Drop FRESET_DEASSERT_DELAY state</p>
<p>The delay between the ASSERT_DELAY and DEASSERT_DELAY states is set to
one timebase tick. This state seems to have been a hold over from PHB3
where it was used to add a 1s delay between de-asserting PERST and
polling the link for the CAPI FPGA. There’s no requirement for that here
since the link polling on PHB4 is a bit smarter so we should be fine.</p>
</li>
-<li><p>hw/phb4: Factor out PERST control</p>
+<li><p class="first">hw/phb4: Factor out PERST control</p>
<p>Some time ago Mikey added some code work around a bug we found where a
certain RAID card wouldn’t come back again after a fast-reboot. The
workaround is setting the Link Disable bit before asserting PERST and
@@ -554,13 +561,13 @@ clear it after de-asserting PERST.</p>
This patch moves the PERST control into its own function to reduce
duplication and to the workaround is applied in all circumstances.</p>
</li>
-<li><p>hw/phb4: Remove FRESET presence check</p>
+<li><p class="first">hw/phb4: Remove FRESET presence check</p>
<p>When we do an freset the first step is to check if a card is present in
the slot. However, this only occurs when we enter phb4_freset() with the
slot state set to SLOT_NORMAL. This occurs in:</p>
<ol class="loweralpha simple">
-<li><p>The creset path, and</p></li>
-<li><p>When the OS manually requests an FRESET via an OPAL call.</p></li>
+<li>The creset path, and</li>
+<li>When the OS manually requests an FRESET via an OPAL call.</li>
</ol>
<p>(a) is problematic because in the boot path the generic code will put the
slot into FRESET_START manually before calling into phb4_freset(). This
@@ -575,7 +582,7 @@ the slot’s PERST signal being left asserted. This isn’t currently an issue,
but if we want to support hotplug of devices into the root port it will
be.</p>
</li>
-<li><p>hw/phb4: Skip FRESET PERST when coming from CRESET</p>
+<li><p class="first">hw/phb4: Skip FRESET PERST when coming from CRESET</p>
<p>PERST is asserted at the beginning of the CRESET process to prevent
the downstream device from interacting with the host while the PHB logic
is being reset and re-initialised. There is at least a 100ms wait during
@@ -586,13 +593,13 @@ to the 250ms PERST wait period that we typically use and sets the
skip_perst flag so that we don’t wait this time again in the FRESET
handler.</p>
</li>
-<li><p>hw/phb4: Look for the hub-id from in the PBCQ node</p>
+<li><p class="first">hw/phb4: Look for the hub-id from in the PBCQ node</p>
<p>The hub-id is stored in the PBCQ node rather than the stack node so we
never add it to the PHB node. This breaks the lxvpd slot lookup code
since the hub-id is encoded in the VPD record that we need to find the
slot information.</p>
</li>
-<li><p>hdata/iohub: Look for IOVPD on P9</p>
+<li><p class="first">hdata/iohub: Look for IOVPD on P9</p>
<p>P8 and P9 use the same IO VPD setup, so we need to load the IOHUB VPD on
P9 systems too.</p>
</li>
@@ -600,7 +607,7 @@ P9 systems too.</p>
<div class="section" id="capi2">
<h3>CAPI2<a class="headerlink" href="#capi2" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>capp/phb4: Prevent HMI from getting triggered when disabling CAPP</p>
+<li><p class="first">capp/phb4: Prevent HMI from getting triggered when disabling CAPP</p>
<p>While disabling CAPP an HMI gets triggered as soon as ETU is put in
reset mode. This is caused as before we can disabled CAPP, it detects
PHB link going down and triggers an HMI requesting Opal to perform
@@ -613,7 +620,7 @@ phb4_creset(). Also now since bringing down the PHB link now wont
trigger an HMI and CAPP recovery, hence we manually set the
PHB4_CAPP_RECOVERY flag on the phb to force recovery during creset.</p>
</li>
-<li><p>phb4/capp: Implement sequence to disable CAPP and enable fast-reset</p>
+<li><p class="first">phb4/capp: Implement sequence to disable CAPP and enable fast-reset</p>
<p>We implement h/w sequence to disable CAPP in disable_capi_mode() and
with it also enable fast-reset for CAPI mode in phb4_set_capi_mode().</p>
<p>Sequence to disable CAPP is executed in three phases. The first two
@@ -625,7 +632,7 @@ phb4_init_ioda3() is because by the time Opal PCI reset state machine
reaches this function the PHB is already un-fenced and its
configuration registers accessible via mmio.</p>
</li>
-<li><p>capp/phb4: Force CAPP to PCIe mode during kernel shutdown</p>
+<li><p class="first">capp/phb4: Force CAPP to PCIe mode during kernel shutdown</p>
<p>This patch introduces a new opal syncer for PHB4 named
phb4_host_sync_reset(). We register this opal syncer when CAPP is
activated successfully in phb4_set_capi_mode() so that it will be
@@ -641,14 +648,14 @@ ensure that Opal slot reset state machine makes forward progress.</p>
<div class="section" id="witherspoon-platform">
<h3>Witherspoon Platform<a class="headerlink" href="#witherspoon-platform" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>platforms/witherspoon: Make PCIe shared slot error message more informative</p>
+<li><p class="first">platforms/witherspoon: Make PCIe shared slot error message more informative</p>
<p>If we’re missing chips for some reason, we print a warning when configuring
the PCIe shared slot.</p>
<p>The warning doesn’t really make it clear what “shared slot” is, and if it’s
printed, it’ll come right after a bunch of messages about NPU setup, so
let’s clarify the message to explicitly mention PCI.</p>
</li>
-<li><p>witherspoon: Add nvlink2 interconnect information</p>
+<li><p class="first">witherspoon: Add nvlink2 interconnect information</p>
<p>See <a class="reference internal" href="#skiboot-6-3-rc1-new-features"><span class="std std-ref">New Features</span></a> for details.</p>
</li>
</ul>
@@ -656,7 +663,7 @@ let’s clarify the message to explicitly mention PCI.</p>
<div class="section" id="zaius-platform">
<h3>Zaius Platform<a class="headerlink" href="#zaius-platform" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>zaius: Add BMC description</p>
+<li><p class="first">zaius: Add BMC description</p>
<p>Frederic reported that Zaius was failing with a NULL dereference when
trying to initialise IPMI HIOMAP. It turns out that the BMC wasn’t
described at all, so add a description.</p>
@@ -666,7 +673,7 @@ described at all, so add a description.</p>
<div class="section" id="p9dsu-platform">
<h3>p9dsu platform<a class="headerlink" href="#p9dsu-platform" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>p9dsu: Fix p9dsu default variant</p>
+<li><p class="first">p9dsu: Fix p9dsu default variant</p>
<p>Add the default when no riser_id is returned from the ipmi query.</p>
<p>Allow a little more time for BMC reply and cleanup some label strings.</p>
</li>
@@ -677,22 +684,22 @@ described at all, so add a description.</p>
<h2>PCIe<a class="headerlink" href="#pcie" title="Permalink to this headline">¶</a></h2>
<p>See <a class="reference internal" href="#skiboot-6-3-rc1-power9"><span class="std std-ref">POWER9</span></a> for POWER9 specific PCIe changes.</p>
<ul>
-<li><p>core/pcie-slot: Don’t bail early in the power on case</p>
+<li><p class="first">core/pcie-slot: Don’t bail early in the power on case</p>
<p>Exiting early in the power off case makes sense since we can’t disable
slot power (or assert PERST) for suprise hotplug slots. However, we
should not exit early in the power-on case since it’s possible slot
power may have been disabled (or just not enabled at boot time).</p>
</li>
-<li><p>firenze-pci: Always init slot info from LXVPD</p>
+<li><p class="first">firenze-pci: Always init slot info from LXVPD</p>
<p>We can slot information from the LXVPD without having power control
information about that slot. This patch changes the init path so that
we always override the add_properties() call rather than only when we
have power control information about the slot.</p>
</li>
-<li><p>fsp/lxvpd: Print more LXVPD slot information</p>
+<li><p class="first">fsp/lxvpd: Print more LXVPD slot information</p>
<p>Useful to know since it changes the behaviour of the slot core.</p>
</li>
-<li><p>core/pcie-slot: Set power state from the PWRCTL flag</p>
+<li><p class="first">core/pcie-slot: Set power state from the PWRCTL flag</p>
<p>For some reason we look at the power control indicator and use that to
determine if the slot is “off” rather than the power control flag that
is used to power down the slot.</p>
@@ -700,7 +707,7 @@ is used to power down the slot.</p>
assumed to be powered on if there’s no slot capability, or if there’s
no power control available.</p>
</li>
-<li><p>core/pci: Increase the max slot string size</p>
+<li><p class="first">core/pci: Increase the max slot string size</p>
<p>The maximum string length for the slot label / device location code in
the PCI summary is currently 32 characters. This results in some IBM
location codes being truncated due to their length, e.g.</p>
@@ -720,7 +727,7 @@ since that’s the maximum length for a location code.</p>
<div class="section" id="opencapi">
<span id="skiboot-6-3-rc1-opencapi"></span><h2>OpenCAPI<a class="headerlink" href="#opencapi" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>npu2/hw-procedures: Fix parallel zcal for opencapi</p>
+<li><p class="first">npu2/hw-procedures: Fix parallel zcal for opencapi</p>
<p>For opencapi, we currently do impedance calibration when initializing
the PHY for the device, which could run in parallel if we have
multiple opencapi devices. But if 2 devices are on the same
@@ -729,17 +736,17 @@ bad results and is useless anyway since it only needs to be done once
per obus.</p>
<p>This patch splits the opencapi PHY reset in 2 parts:</p>
<ul class="simple">
-<li><p>a â€init’ part called serially at boot. That’s when zcal is done. If
+<li>a â€init’ part called serially at boot. That’s when zcal is done. If
we have 2 devices on the same socket, the zcal won’t be redone,
since we’re called serially and we’ll see it has already be done for
-the obus</p></li>
-<li><p>a â€reset’ part called during fundamental reset as a prereq for link
-training. It does the PHY setup for a set of lanes and the dccal.</p></li>
+the obus</li>
+<li>a â€reset’ part called during fundamental reset as a prereq for link
+training. It does the PHY setup for a set of lanes and the dccal.</li>
</ul>
<p>The PHY team confirmed there’s no dependency between zcal and the
other reset steps and it can be moved earlier.</p>
</li>
-<li><p>npu2-hw-procedures: Fix zcal in mixed opencapi and nvlink mode</p>
+<li><p class="first">npu2-hw-procedures: Fix zcal in mixed opencapi and nvlink mode</p>
<p>The zcal procedure needs to be run once per obus. We keep track of
which obus is already calibrated in an array indexed by the obus
number. However, the obus number is inferred from the brick index,
@@ -747,7 +754,7 @@ which works well for nvlink but not for opencapi.</p>
<p>Create an obus_index() function, which, from a device, returns the
correct obus index, irrespective of the device type.</p>
</li>
-<li><p>npu2-opencapi: Fix adapter reset when using 2 adapters</p>
+<li><p class="first">npu2-opencapi: Fix adapter reset when using 2 adapters</p>
<p>If two opencapi adapters are on the same obus, we may try to train the
two links in parallel at boot time, when all the PCI links are being
trained. Both links use the same i2c controller to handle the reset
@@ -757,14 +764,14 @@ current state of the i2c controller (and use locking).</p>
<p>This went mostly unnoticed as you need to have 2 opencapi cards on the
same socket and links tended to train anyway because of the retries.</p>
</li>
-<li><p>npu2-opencapi: Extend delay after releasing reset on adapter</p>
+<li><p class="first">npu2-opencapi: Extend delay after releasing reset on adapter</p>
<p>Give more time to the FPGA to process the reset signal. The previous
delay, 5ms, is too short for newer adapters with bigger FPGAs. Extend
it to 250ms.
Ultimately, that delay will likely end up being added to the opencapi
specification, but we are not there yet.</p>
</li>
-<li><p>npu2-opencapi: ODL should be in reset when enabled</p>
+<li><p class="first">npu2-opencapi: ODL should be in reset when enabled</p>
<p>We haven’t hit any problem so far, but from the ODL designer, the ODL
should be in reset when it is enabled.</p>
<p>The ODL remains in reset until we start a fundamental reset to
@@ -774,7 +781,7 @@ link. Asserting is therefore useless at boot, since the ODL is already
in reset, but we keep it as it’s only a scom write and it’s needed
when we reset/retrain from the OS.</p>
</li>
-<li><p>npu2-opencapi: Keep ODL and adapter in reset at the same time</p>
+<li><p class="first">npu2-opencapi: Keep ODL and adapter in reset at the same time</p>
<p>Split the function to assert and deassert the reset signal on the ODL,
so that we can keep the ODL in reset while we reset the adapter,
therefore having a window where both sides are in reset.</p>
@@ -783,7 +790,7 @@ need to split the ODL reset function for the following patch and it
will become useful/required later when we introduce resetting an
opencapi link from the OS.</p>
</li>
-<li><p>npu2-opencapi: Setup perf counters to detect CRC errors</p>
+<li><p class="first">npu2-opencapi: Setup perf counters to detect CRC errors</p>
<p>It’s possible to set up performance counters for the PLL to detect
various conditions for the links in nvlink or opencapi mode. Since
those counters are currently unused, let’s configure them when an obus
@@ -800,7 +807,7 @@ configured to be reset after each read.</p>
<div class="section" id="nvlink2">
<h2>NVLINK2<a class="headerlink" href="#nvlink2" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>npu2: Allow ATSD for LPAR other than 0</p>
+<li><p class="first">npu2: Allow ATSD for LPAR other than 0</p>
<p>Each XTS MMIO ATSD# register is accompanied by another register -
XTS MMIO ATSD0 LPARID# - which controls LPID filtering for ATSD
transactions.</p>
@@ -811,7 +818,7 @@ the LPAR. The link number is used for an ATSD index.</p>
<p>ATSD6&amp;7 stay mapped to the host (LPAR=0) all the time which seems to be
acceptable price for the simplicity.</p>
</li>
-<li><p>npu2: Add XTS_BDF_MAP wildcard refcount</p>
+<li><p class="first">npu2: Add XTS_BDF_MAP wildcard refcount</p>
<p>Currently PID wildcard is programmed into the NPU once and never cleared
up. This works for the bare metal as MSR does not change while the host
OS is running.</p>
@@ -827,7 +834,7 @@ and should be smaller than NPU2_XTS_BDF_MAP_SIZE (defined as 16).</p>
<div class="section" id="debugging-and-simulation">
<h2>Debugging and simulation<a class="headerlink" href="#debugging-and-simulation" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>external/mambo: Error out if kernel is too large</p>
+<li><p class="first">external/mambo: Error out if kernel is too large</p>
<p>If you’re trying to boot a gigantic kernel in mambo (which you can
reproduce by building a kernel with CONFIG_MODULES=n) you’ll get
misleading errors like:</p>
@@ -846,14 +853,14 @@ Making PAYLOAD_ADDR further back is one way to do this but if there’s a
less gross way to generally work around this very niche problem, I can
suggest that instead.</p>
</li>
-<li><p>external/mambo: Populate kernel-base-address in the DT</p>
+<li><p class="first">external/mambo: Populate kernel-base-address in the DT</p>
<p>skiboot.tcl defines PAYLOAD_ADDR as 0x20000000, which is the default in
skiboot. This is also the default in skiboot unless kernel-base-address
is set in the device tree.</p>
<p>If you change PAYLOAD_ADDR to something else for mambo, skiboot won’t
see it because it doesn’t set that DT property, so fix it so that it does.</p>
</li>
-<li><p>external/mambo: allow CPU targeting for most debug utils</p>
+<li><p class="first">external/mambo: allow CPU targeting for most debug utils</p>
<p>Debug util functions target CPU 0:0:0 by default Some can be
overidden explicitly per invocation, and others can’t at all.
Even for those that can be overidden, it is a pain to type
@@ -862,20 +869,20 @@ them out when you’re debugging a particular thread.</p>
target to be changed. Wire that up that default to all other utils.
Provide a new â€S’ step command which only steps the target CPU.</p>
</li>
-<li><p>qemu: bt device isn’t always hanging off /</p>
+<li><p class="first">qemu: bt device isn’t always hanging off /</p>
<p>Just use the normal for_each_compatible instead.</p>
<p>Otherwise in the qemu model as executed by op-test,
we wouldn’t go down the astbmc_init() path, thus not having flash.</p>
</li>
-<li><p>devicetree: Add p9-simics.dts</p>
+<li><p class="first">devicetree: Add p9-simics.dts</p>
<p>Add a p9-based devicetree that’s suitable for use with Simics.</p>
</li>
-<li><p>devicetree: Move power9-phb4.dts</p>
+<li><p class="first">devicetree: Move power9-phb4.dts</p>
<p>Clean up the formatting of power9-phb4.dts and move it to
external/devicetree/p9.dts. This sets us up to include it as the basis
for other trees.</p>
</li>
-<li><p>devicetree: Add nx node to power9-phb4.dts</p>
+<li><p class="first">devicetree: Add nx node to power9-phb4.dts</p>
<p>A (non-qemu) p9 without an nx node will assert in p9_darn_init():</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>dt_for_each_compatible(dt_root, nx, &quot;ibm,power9-nx&quot;)
break;
@@ -888,17 +895,17 @@ if (!nx) {
</div>
<p>Since NX is this essential, add it to the device tree.</p>
</li>
-<li><p>devicetree: Fix typo in power9-phb4.dts</p>
+<li><p class="first">devicetree: Fix typo in power9-phb4.dts</p>
<p>Change “impi” to “ipmi”.</p>
</li>
-<li><p>devicetree: Fix syntax error in power9-phb4.dts</p>
+<li><p class="first">devicetree: Fix syntax error in power9-phb4.dts</p>
<p>Remove the extra space causing this:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Error</span><span class="p">:</span> <span class="n">power9</span><span class="o">-</span><span class="n">phb4</span><span class="o">.</span><span class="n">dts</span><span class="p">:</span><span class="mf">156.15</span><span class="o">-</span><span class="mi">16</span> <span class="n">syntax</span> <span class="n">error</span>
<span class="n">FATAL</span> <span class="n">ERROR</span><span class="p">:</span> <span class="n">Unable</span> <span class="n">to</span> <span class="n">parse</span> <span class="nb">input</span> <span class="n">tree</span>
</pre></div>
</div>
</li>
-<li><p>core/init: enable machine check on secondaries</p>
+<li><p class="first">core/init: enable machine check on secondaries</p>
<p>Secondary CPUs currently run with MSR[ME]=0 during boot, whih means
if they take a machine check, the system will checkstop.</p>
<p>Enable ME where possible and allow them to print registers.</p>
@@ -908,11 +915,11 @@ if they take a machine check, the system will checkstop.</p>
<div class="section" id="utilities">
<h2>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>pflash: Don’t try update RO ToC</p>
+<li><p class="first">pflash: Don’t try update RO ToC</p>
<p>In the future it’s likely the ToC will be marked as read-only. Don’t
error out by assuming its writable.</p>
</li>
-<li><p>pflash: Support encoding/decoding ECC’d partitions</p>
+<li><p class="first">pflash: Support encoding/decoding ECC’d partitions</p>
<p>With the new –ecc option, pflash can add/remove ECC when
reading/writing flash partitions protected by ECC.</p>
<p>This is <em>not</em> flawless with current PNORs out in the wild though, as
@@ -929,7 +936,6 @@ out” to support reading the “valid” data from existing PNOR images.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -978,15 +984,17 @@ out” to support reading the “valid” data from existing PNOR images.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -1003,15 +1011,14 @@ out” to support reading the “valid” data from existing PNOR images.</p>
<li class="right" >
<a href="skiboot-6.3.html" title="skiboot-6.3"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.3-rc2.html b/doc/release-notes/skiboot-6.3-rc2.html
index d0a8ca8..9af55bf 100644
--- a/doc/release-notes/skiboot-6.3-rc2.html
+++ b/doc/release-notes/skiboot-6.3-rc2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.3-rc2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.3-rc2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.3-rc1.html" title="skiboot-6.3-rc1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -57,7 +58,7 @@ stable releases).</p>
<p>For how the skiboot stable releases work, see <a class="reference internal" href="../process/stable-skiboot-rules.html#stable-rules"><span class="std std-ref">Skiboot stable tree rules and releases</span></a> for details.</p>
<p>Over <a class="reference internal" href="skiboot-6.3-rc1.html#skiboot-6-3-rc1"><span class="std std-ref">skiboot-6.3-rc1</span></a>, we have the following changes:</p>
<ul>
-<li><p>libflash/ipmi-hiomap: Fix blocks count issue</p>
+<li><p class="first">libflash/ipmi-hiomap: Fix blocks count issue</p>
<p>We convert data size to block count and pass block count to BMC.
If data size is not block aligned then we endup sending block count
less than actual data. BMC will write partial data to flash memory.</p>
@@ -71,13 +72,13 @@ less than actual data. BMC will write partial data to flash memory.</p>
<p>In this case HIOMAP sent data with block count=0 and hence BMC didn’t
flush data to flash.</p>
</li>
-<li><p>opal/hmi: Never trust a cow!</p>
+<li><p class="first">opal/hmi: Never trust a cow!</p>
<p>With opencapi, it’s fairly common to trigger HMIs during AFU
development on the FPGA, by not replying in time to an NPU command,
for example. So shift the blame reported by that cow to avoid crowding
my mailbox.</p>
</li>
-<li><p>hw/npu2: Dump (more) npu2 registers on link error and HMIs</p>
+<li><p class="first">hw/npu2: Dump (more) npu2 registers on link error and HMIs</p>
<p>We were already logging some NPU registers during an HMI. This patch
cleans up a bit how it is done and separates what is global from what
is specific to nvlink or opencapi.</p>
@@ -88,7 +89,7 @@ registers of the brick which hit the error.</p>
allow for proper debugging. For each register, we print the name as
found in the NPU workbook, the scom address and the register value.</p>
</li>
-<li><p>hw/npu2: Report errors to the OS if an OpenCAPI brick is fenced</p>
+<li><p class="first">hw/npu2: Report errors to the OS if an OpenCAPI brick is fenced</p>
<p>Now that the NPU may report interrupts due to the link going down
unexpectedly, report those errors to the OS when queried by the
â€next_error’ PHB callback.</p>
@@ -96,7 +97,7 @@ unexpectedly, report those errors to the OS when queried by the
unexpectedly. So we report the PHB as dead, so that the OS can log the
proper message, notify the drivers and take the devices down.</p>
</li>
-<li><p>hw/npu2: Fix OpenCAPI PE assignment</p>
+<li><p class="first">hw/npu2: Fix OpenCAPI PE assignment</p>
<p>When we support mixing NVLink and OpenCAPI devices on the same NPU, we’re
going to have to share the same range of 16 PE numbers between NVLink and
OpenCAPI PHBs.</p>
@@ -108,13 +109,13 @@ half that is used for OpenCAPI, with a fixed PE number assigned per brick.</p>
<p>As the PE assignment for OpenCAPI devices is fixed, set the PE once
during device init and then ignore calls to the set_pe() operation.</p>
</li>
-<li><p>opal-api: Reserve 2 OPAL API calls for future OpenCAPI LPC use</p>
+<li><p class="first">opal-api: Reserve 2 OPAL API calls for future OpenCAPI LPC use</p>
<p>OpenCAPI Lowest Point of Coherency (LPC) memory is going to require
some extra OPAL calls to set up NPU BARs. These calls will most likely be
called OPAL_NPU_LPC_ALLOC and OPAL_NPU_LPC_RELEASE, we’re not quite ready
to upstream that code yet though.</p>
</li>
-<li><p>cpufeatures: Add tm-suspend-hypervisor-assist and tm-suspend-xer-so-bug node</p>
+<li><p class="first">cpufeatures: Add tm-suspend-hypervisor-assist and tm-suspend-xer-so-bug node</p>
<p>tm-suspend-hypervisor-assist for P9 &gt;=DD2.2
And a tm-suspend-xer-so-bug node for P9 DD2.2 only.</p>
<p>I also treat P9P as P9 DD2.3 and add a unit test for the cpufeatures
@@ -125,7 +126,6 @@ infrastructure.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -145,15 +145,17 @@ infrastructure.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -170,15 +172,14 @@ infrastructure.</p>
<li class="right" >
<a href="skiboot-6.3-rc1.html" title="skiboot-6.3-rc1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3-rc2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.3-rc3.html b/doc/release-notes/skiboot-6.3-rc3.html
index df00b34..b20ffe8 100644
--- a/doc/release-notes/skiboot-6.3-rc3.html
+++ b/doc/release-notes/skiboot-6.3-rc3.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.3-rc3 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.3-rc3 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.3-rc2.html" title="skiboot-6.3-rc2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3-rc3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -58,7 +59,7 @@ stable releases).</p>
<p>For how the skiboot stable releases work, see <a class="reference internal" href="../process/stable-skiboot-rules.html#stable-rules"><span class="std std-ref">Skiboot stable tree rules and releases</span></a> for details.</p>
<p>Over <a class="reference internal" href="skiboot-6.3-rc2.html#skiboot-6-3-rc2"><span class="std std-ref">skiboot-6.3-rc2</span></a>, we have the following changes:</p>
<ul>
-<li><p>Expose PNOR Flash partitions to host MTD driver via devicetree</p>
+<li><p class="first">Expose PNOR Flash partitions to host MTD driver via devicetree</p>
<p>This makes it possible for the host to directly address each
partition without requiring each application to directly parse
the FFS headers. This has been in use for some time already to
@@ -66,7 +67,7 @@ allow BOOTKERNFW partition updates from the host.</p>
<p>All partitions except BOOTKERNFW are marked readonly.</p>
<p>The BOOTKERNFW partition is currently exclusively used by the TalosII platform</p>
</li>
-<li><p>Write boot progress to LPC port 80h</p>
+<li><p class="first">Write boot progress to LPC port 80h</p>
<p>This is an adaptation of what we currently do for op_display() on FSP
machines, inventing an encoding for what we can write into the single
byte at LPC port 80h.</p>
@@ -78,19 +79,19 @@ all about compromise.</p>
display that display these codes. So far, this has only been driven by
hostboot (see hostboot commit 90ec2e65314c).</p>
</li>
-<li><p>Write boot progress to LPC ports 81 and 82</p>
+<li><p class="first">Write boot progress to LPC ports 81 and 82</p>
<p>There’s a thought to write more extensive boot progress codes to LPC
ports 81 and 82 to supplement/replace any reliance on port 80.</p>
<p>We want to still emit port 80 for platforms like Zaius and Barreleye
that have the physical display. Ports 81 and 82 can be monitored by a
BMC though.</p>
</li>
-<li><p>Copy and convert Romulus descriptors to Talos</p>
+<li><p class="first">Copy and convert Romulus descriptors to Talos</p>
<p>Talos II has some hardware differences from Romulus, therefore
we cannot guarantee Talos II == Romulus in skiboot. Copy and
slightly modify the Romulus files for Talos II.</p>
</li>
-<li><p>npu2: Disable Probe-to-Invalid-Return-Modified-or-Owned snarfing by default</p>
+<li><p class="first">npu2: Disable Probe-to-Invalid-Return-Modified-or-Owned snarfing by default</p>
<p>V100 GPUs are known to violate NVLink2 protocol in some cases (one is when
memory was accessed by the CPU and they by GPU using so called block
linear mapping) and issue double probes to NPU which can cope with this
@@ -112,8 +113,9 @@ a bare metal). To enable snarfing, the user needs to run:</p>
</div>
<p>and reboot the host system.</p>
</li>
-<li><p>hw/npu2: Show name of opencapi error interrupts</p></li>
-<li><p>core/pci: Use PHB io-base-location by default for PHB slots</p>
+<li><p class="first">hw/npu2: Show name of opencapi error interrupts</p>
+</li>
+<li><p class="first">core/pci: Use PHB io-base-location by default for PHB slots</p>
<p>On witherspoon only the GPU slots and the three pluggable PCI slots
(SLOT0, 1, 2) have platform defined slot names. For builtin devices such
as the SATA controller or the PLX switch that fans out to the GPU slots
@@ -122,13 +124,13 @@ we have no location codes which some people consider an issue.</p>
the root port device default to the ibm,io-base-location-code which is
typically the location code for the system itself.</p>
<p>e.g.</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pciex</span><span class="o">@</span><span class="mi">600</span><span class="n">c3c0100000</span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">loc</span><span class="o">-</span><span class="n">code</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pciex</span><span class="nd">@600c3c0100000</span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">loc</span><span class="o">-</span><span class="n">code</span>
<span class="s2">&quot;UOPWR.0000000-Node0-Proc0&quot;</span>
-<span class="n">pciex</span><span class="o">@</span><span class="mi">600</span><span class="n">c3c0100000</span><span class="o">/</span><span class="n">pci</span><span class="o">@</span><span class="mi">0</span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">loc</span><span class="o">-</span><span class="n">code</span>
+<span class="n">pciex</span><span class="nd">@600c3c0100000</span><span class="o">/</span><span class="n">pci</span><span class="nd">@0</span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">loc</span><span class="o">-</span><span class="n">code</span>
<span class="s2">&quot;UOPWR.0000000-Node0-Proc0&quot;</span>
-<span class="n">pciex</span><span class="o">@</span><span class="mi">600</span><span class="n">c3c0100000</span><span class="o">/</span><span class="n">pci</span><span class="o">@</span><span class="mi">0</span><span class="o">/</span><span class="n">usb</span><span class="o">-</span><span class="n">xhci</span><span class="o">@</span><span class="mi">0</span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">loc</span><span class="o">-</span><span class="n">code</span>
+<span class="n">pciex</span><span class="nd">@600c3c0100000</span><span class="o">/</span><span class="n">pci</span><span class="nd">@0</span><span class="o">/</span><span class="n">usb</span><span class="o">-</span><span class="n">xhci</span><span class="nd">@0</span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">loc</span><span class="o">-</span><span class="n">code</span>
<span class="s2">&quot;UOPWR.0000000-Node0&quot;</span>
</pre></div>
</div>
@@ -136,7 +138,7 @@ typically the location code for the system itself.</p>
processor they are attached to, while the usb-xhci device under the
root port has a location code of the system itself.</p>
</li>
-<li><p>hw/phb4: Read ibm,loc-code from PBCQ node</p>
+<li><p class="first">hw/phb4: Read ibm,loc-code from PBCQ node</p>
<p>On P9 the PBCQs are subdivided by stacks which implement the PCI Express
logic. When phb4 was forked from phb3 most of the properties that were
in the pbcq node moved into the stack node, but ibm,loc-code was not one
@@ -144,8 +146,9 @@ of them. This patch fixes the phb4 init sequence to read the base
location code from the PBCQ node (parent of the stack node) rather than
the stack node itself.</p>
</li>
-<li><p>hw/xscom: add missing P9P chip name</p></li>
-<li><p>asm/head: balance branches to avoid link stack predictor mispredicts</p>
+<li><p class="first">hw/xscom: add missing P9P chip name</p>
+</li>
+<li><p class="first">asm/head: balance branches to avoid link stack predictor mispredicts</p>
<p>The Linux wrapper for OPAL call and return is arranged like this:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">__opal_call</span><span class="p">:</span>
<span class="n">mflr</span> <span class="n">r0</span>
@@ -164,16 +167,19 @@ the stack node itself.</p>
with a blr. This unbalances the link stack predictor and will cause
mispredicts back up the return stack.</p>
</li>
-<li><p>external/mambo: also invoke readline for the non-autorun case</p></li>
-<li><p>asm/head.S: set POWER9 radix HID bit at entry</p>
+<li><p class="first">external/mambo: also invoke readline for the non-autorun case</p>
+</li>
+<li><p class="first">asm/head.S: set POWER9 radix HID bit at entry</p>
<p>When running in virtual memory mode, the radix MMU hid bit should not
be changed, so set this in the initial boot SPR setup.</p>
<p>As a side effect, fast reboot also has HID0:RADIX bit set by the
shared spr init, so no need for an explicit call.</p>
</li>
-<li><p>opal-prd: Fix memory leak in is-fsp-system check</p></li>
-<li><p>opal-prd: Check malloc return value</p></li>
-<li><p>hw/phb4: Squash the IO bridge window</p>
+<li><p class="first">opal-prd: Fix memory leak in is-fsp-system check</p>
+</li>
+<li><p class="first">opal-prd: Check malloc return value</p>
+</li>
+<li><p class="first">hw/phb4: Squash the IO bridge window</p>
<p>The PCI-PCI bridge spec says that bridges that implement an IO window
should hardcode the IO base and limit registers to zero.
Unfortunately, these registers only define the upper bits of the IO
@@ -194,27 +200,27 @@ interprets as a disabled window.</p>
</pre></div>
</div>
</li>
-<li><p>build: link with –orphan-handling=warn</p>
+<li><p class="first">build: link with –orphan-handling=warn</p>
<p>The linker can warn when the linker script does not explicitly place
all sections. These orphan sections are placed according to
heuristics, which may not always be desirable. Enable this warning.</p>
</li>
-<li><p>build: -fno-asynchronous-unwind-tables</p>
+<li><p class="first">build: -fno-asynchronous-unwind-tables</p>
<p>skiboot does not use unwind tables, this option saves about 100kB,
mostly from .text.</p>
</li>
-<li><p>hw/xscom: Enable sw xstop by default on p9</p>
+<li><p class="first">hw/xscom: Enable sw xstop by default on p9</p>
<p>This was disabled at some point during bringup to make life easier for
the lab folks trying to debug NVLink issues. This hack really should
have never made it out into the wild though, so we now have the
following situation occuring in the field:</p>
<ol class="arabic simple">
-<li><p>A bad happens</p></li>
-<li><p>The host kernel recieves an unrecoverable HMI and calls into OPAL to
-request a platform reboot.</p></li>
-<li><p>OPAL rejects the reboot attempt and returns to the kernel with
-OPAL_PARAMETER.</p></li>
-<li><p>Kernel panics and attempts to kexec into a kdump kernel.</p></li>
+<li>A bad happens</li>
+<li>The host kernel recieves an unrecoverable HMI and calls into OPAL to
+request a platform reboot.</li>
+<li>OPAL rejects the reboot attempt and returns to the kernel with
+OPAL_PARAMETER.</li>
+<li>Kernel panics and attempts to kexec into a kdump kernel.</li>
</ol>
<p>A side effect of the HMI seems to be CPUs becoming stuck which results
in the initialisation of the kdump kernel taking a extremely long time
@@ -225,7 +231,7 @@ state as a side effect of the HMI.</p>
default. If people still want to turn it off they can using the nvram
override.</p>
</li>
-<li><p>opal/hmi: Initialize the hmi event with old value of TFMR.</p>
+<li><p class="first">opal/hmi: Initialize the hmi event with old value of TFMR.</p>
<p>Do this before we fix TFAC errors. Otherwise the event at host console
shows no thread error reported in TFMR register.</p>
<p>Without this patch the console event show TFMR with no thread error:
@@ -248,7 +254,6 @@ shows no thread error reported in TFMR register.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -268,15 +273,17 @@ shows no thread error reported in TFMR register.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -293,15 +300,14 @@ shows no thread error reported in TFMR register.</p>
<li class="right" >
<a href="skiboot-6.3-rc2.html" title="skiboot-6.3-rc2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3-rc3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.3.1.html b/doc/release-notes/skiboot-6.3.1.html
index 4d344c4..bf7f535 100644
--- a/doc/release-notes/skiboot-6.3.1.html
+++ b/doc/release-notes/skiboot-6.3.1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.3.1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.3.1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.3-rc3.html" title="skiboot-6.3-rc3"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@
due to the bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul>
-<li><p>platforms/astbmc: Check for SBE validation step</p>
+<li><p class="first">platforms/astbmc: Check for SBE validation step</p>
<p>On some POWER8 astbmc systems an update to the SBE requires pausing at
runtime to ensure integrity of the SBE. If this is required the BMC will
set a chassis boot option IPMI flag using the OEM parameter 0x62. If
@@ -63,7 +64,7 @@ it in a bad state and unable to be used for timer operations. To
workaround this the flag is checked as soon as possible (ie. when IPMI
and the console are set up), and once complete the system is rebooted.</p>
</li>
-<li><p>ipmi: ensure forward progress on ipmi_queue_msg_sync()</p>
+<li><p class="first">ipmi: ensure forward progress on ipmi_queue_msg_sync()</p>
<p>BT responses are handled using a timer doing the polling. To hope to
get an answer to an IPMI synchronous message, the timer needs to run.</p>
<p>We can’t just check all timers though as there may be a timer that
@@ -75,7 +76,7 @@ backend needs, then we should be fine.</p>
<p>This issue shows up very quickly under QEMU when loading the first
flash resource with the IPMI HIOMAP backend.</p>
</li>
-<li><p>pci/iov: Remove skiboot VF tracking</p>
+<li><p class="first">pci/iov: Remove skiboot VF tracking</p>
<p>This feature was added a few years ago in response to a request to make
the MaxPayloadSize (MPS) field of a Virtual Function match the MPS of the
Physical Function that hosts it.</p>
@@ -95,7 +96,6 @@ the host operating system.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -115,15 +115,17 @@ the host operating system.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -140,15 +142,14 @@ the host operating system.</p>
<li class="right" >
<a href="skiboot-6.3-rc3.html" title="skiboot-6.3-rc3"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.3.2.html b/doc/release-notes/skiboot-6.3.2.html
index 2e3024c..8154680 100644
--- a/doc/release-notes/skiboot-6.3.2.html
+++ b/doc/release-notes/skiboot-6.3.2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.3.2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.3.2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.3.1.html" title="skiboot-6.3.1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,11 +53,11 @@
bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul>
-<li><p>npu2: Purge cache when resetting a GPU</p>
+<li><p class="first">npu2: Purge cache when resetting a GPU</p>
<p>After putting all a GPU’s links in reset, do a cache purge in case we
have CPU cache lines belonging to the now-unaccessible GPU memory.</p>
</li>
-<li><p>npu2: Reset NVLinks when resetting a GPU</p>
+<li><p class="first">npu2: Reset NVLinks when resetting a GPU</p>
<p>Resetting a V100 GPU brings its NVLinks down and if an NPU tries using
those, an HMI occurs. We were lucky not to observe this as the bare metal
does not normally reset a GPU and when passed through, GPUs are usually
@@ -67,7 +68,7 @@ brings HMIs.</p>
so when the host system issues secondary bus reset to the slot, it resets
associated NVLinks.</p>
</li>
-<li><p>hw/phb4: Assert Link Disable bit after ETU init</p>
+<li><p class="first">hw/phb4: Assert Link Disable bit after ETU init</p>
<p>The cursed RAID card in ozrom1 has a bug where it ignores PERST being
asserted. The PCIe Base spec is a little vague about what happens
while PERST is asserted, but it does clearly specify that when
@@ -156,7 +157,7 @@ seems to avoid the Completion Timeout. With the patch applied we get:</p>
</pre></div>
</div>
</li>
-<li><p>npu2: Reset PID wildcard and refcounter when mapped to LPID</p>
+<li><p class="first">npu2: Reset PID wildcard and refcounter when mapped to LPID</p>
<p>Since 105d80f85b “npu2: Use unfiltered mode in XTS tables” we do not
register every PID in the XTS table so the table has one entry per LPID.
Then we added a reference counter to keep track of the entry use when
@@ -170,7 +171,7 @@ XTS entries and does not update the XTS table which breaks ATS.</p>
<p>This adds the reference counter and the XTS entry reset when a GPU is
assigned to LPID and we cannot rely on the kernel to clean that up.</p>
</li>
-<li><p>hw/phb4: Use read/write_reg in assert_perst</p>
+<li><p class="first">hw/phb4: Use read/write_reg in assert_perst</p>
<p>While the PHB is fenced we can’t use the MMIO interface to access PHB
registers. While processing a complete reset we inject a PHB fence to
isolate the PHB from the rest of the system because the PHB won’t
@@ -186,7 +187,7 @@ when the system was fast-reset.</p>
<p>This patch fixes the problem by replacing the raw {in|out}_be64()
accessors with the phb4_{read|write}_reg() functions.</p>
</li>
-<li><p>opal-prd: Fix prd message size issue</p>
+<li><p class="first">opal-prd: Fix prd message size issue</p>
<p>If prd messages size is insufficient then read_prd_msg() call fails with
below error. And caller is not reallocating sufficient buffer. Also its
hard to guess the size.</p>
@@ -199,11 +200,11 @@ hard to guess the size.</p>
<p>Lets use opal-msg-size device tree property to allocate memory
for prd message.</p>
</li>
-<li><p>npu2: Fix clearing the FIR bits</p>
+<li><p class="first">npu2: Fix clearing the FIR bits</p>
<p>FIR registers are SCOM-only so they cannot be accesses with the indirect
write, and yet we use SCOM-based addresses for these; fix this.</p>
</li>
-<li><p>opal-gard: Account for ECC size when clearing partition</p>
+<li><p class="first">opal-gard: Account for ECC size when clearing partition</p>
<p>When â€opal-gard clear all’ is run, it works by erasing the GUARD then
using blockevel_smart_write() to write nothing to the partition. This
second write call is needed because we rely on libflash to set the ECC
@@ -218,7 +219,7 @@ partially overwritten when the command is used. This patch fixes the
problem by reducing the length we would normally write by the number
of ECC bytes required.</p>
</li>
-<li><p>nvram: Flag dangerous NVRAM options</p>
+<li><p class="first">nvram: Flag dangerous NVRAM options</p>
<p>Most nvram options used by skiboot are just for debug or testing for
regressions. They should never be used long term.</p>
<p>We’ve hit a number of issues in testing and the field where nvram
@@ -227,7 +228,7 @@ after, resulting in crashes or real bugs being masked.</p>
<p>This patch marks most nvram options used by skiboot as dangerous and
prints a chicken to remind users of the problem.</p>
</li>
-<li><p>devicetree: Don’t set path to dtc in makefile</p>
+<li><p class="first">devicetree: Don’t set path to dtc in makefile</p>
<p>By setting the path we fail to build under buildroot which has it’s own
set of host tools in PATH, but not at /usr/bin.</p>
<p>Keep the variable so it can be set if need be but default to whatever
@@ -237,7 +238,6 @@ set of host tools in PATH, but not at /usr/bin.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -257,15 +257,17 @@ set of host tools in PATH, but not at /usr/bin.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -282,15 +284,14 @@ set of host tools in PATH, but not at /usr/bin.</p>
<li class="right" >
<a href="skiboot-6.3.1.html" title="skiboot-6.3.1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.3.3.html b/doc/release-notes/skiboot-6.3.3.html
index af7eb21..5209844 100644
--- a/doc/release-notes/skiboot-6.3.3.html
+++ b/doc/release-notes/skiboot-6.3.3.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.3.3 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.3.3 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.3.2.html" title="skiboot-6.3.2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,7 +53,7 @@
due to the bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul>
-<li><p>struct p9_sbe_msg doesn’t need to be packed</p>
+<li><p class="first">struct p9_sbe_msg doesn’t need to be packed</p>
<p>Only the reg member is sent anywhere (via xscom_write), so the structure
does not need to be packed.</p>
</li>
@@ -66,8 +67,8 @@ ointer value [-Werror=address-of-packed-member]
</pre></div>
</div>
<ul class="simple">
-<li><p>hdata/vpd: fix printing (char*)0x00
-GCC9 now catches this bug:</p></li>
+<li>hdata/vpd: fix printing (char*)0x00
+GCC9 now catches this bug:</li>
</ul>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>In file included from hdata/vpd.c:17:
In function â€vpd_vini_parse’,
@@ -86,7 +87,7 @@ cc1: all warnings being treated as errors
</pre></div>
</div>
<ul class="simple">
-<li><p>errorlog: Prevent alignment error building with gcc9.</p></li>
+<li>errorlog: Prevent alignment error building with gcc9.</li>
</ul>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>Fixes this build error:
[ 52s] hw/fsp/fsp-elog-write.c: In function &#39;opal_elog_read&#39;:
@@ -97,7 +98,7 @@ in an unaligned pointer value [-Werror=address-of-packed-member]
</pre></div>
</div>
<ul>
-<li><p>Support BMC IPMI heartbeat command</p>
+<li><p class="first">Support BMC IPMI heartbeat command</p>
<p>A few years ago, the OpenBMC code added support for a “heartbeat”
command to send to the host. This command is used after the BMC is reset
to check if the host is running. Support was never added to the host
@@ -111,12 +112,12 @@ the command though since no action is needed). Here’s the tested output
of this patch in the host console (with debug enabled):
IPMI: BMC issued heartbeat command: 00</p>
</li>
-<li><p>Add: add mihawk platform file</p></li>
+<li><p class="first">Add: add mihawk platform file</p>
+</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -136,15 +137,17 @@ IPMI: BMC issued heartbeat command: 00</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -161,15 +164,14 @@ IPMI: BMC issued heartbeat command: 00</p>
<li class="right" >
<a href="skiboot-6.3.2.html" title="skiboot-6.3.2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.3.4.html b/doc/release-notes/skiboot-6.3.4.html
index 1a9d02c..41118be 100644
--- a/doc/release-notes/skiboot-6.3.4.html
+++ b/doc/release-notes/skiboot-6.3.4.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.3.4 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.3.4 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.3.3.html" title="skiboot-6.3.3"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,22 +53,25 @@
due to the bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul>
-<li><p>hw/phb4: Prevent register accesses when in reset</p></li>
-<li><p>core/platform: Actually disable fast-reboot on P8</p></li>
-<li><p>xive: fix return value of opal_xive_allocate_irq()</p></li>
-<li><p>hw/phb4: Use standard MIN/MAX macro definitions</p>
+<li><p class="first">hw/phb4: Prevent register accesses when in reset</p>
+</li>
+<li><p class="first">core/platform: Actually disable fast-reboot on P8</p>
+</li>
+<li><p class="first">xive: fix return value of opal_xive_allocate_irq()</p>
+</li>
+<li><p class="first">hw/phb4: Use standard MIN/MAX macro definitions</p>
<p>The max() macro definition incorrectly returns the minimum value. The
max() macro is used to ensure that PERST has been asserted for 250ms and
that we wait 100ms seconds for the ETU logic in the CRESET_START PHB4
PCI slot state. However, by returning the minimum value there is no
guarantee that either of these requirements are met.</p>
</li>
-<li><p>doc/requirements.txt: pin docutils at 0.14</p></li>
+<li><p class="first">doc/requirements.txt: pin docutils at 0.14</p>
+</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -87,15 +91,17 @@ guarantee that either of these requirements are met.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -112,15 +118,14 @@ guarantee that either of these requirements are met.</p>
<li class="right" >
<a href="skiboot-6.3.3.html" title="skiboot-6.3.3"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.3.5.html b/doc/release-notes/skiboot-6.3.5.html
index b84fc59..806e36d 100644
--- a/doc/release-notes/skiboot-6.3.5.html
+++ b/doc/release-notes/skiboot-6.3.5.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.3.5 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.3.5 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.3.4.html" title="skiboot-6.3.4"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,13 +53,12 @@
due to the bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul class="simple">
-<li><p>uart: Drop console write data if BMC becomes unresponsive</p></li>
-<li><p>core/ipmi: Fix use-after-free</p></li>
+<li>uart: Drop console write data if BMC becomes unresponsive</li>
+<li>core/ipmi: Fix use-after-free</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -78,15 +78,17 @@ due to the bug fixes it contains.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -103,15 +105,14 @@ due to the bug fixes it contains.</p>
<li class="right" >
<a href="skiboot-6.3.4.html" title="skiboot-6.3.4"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.3.html b/doc/release-notes/skiboot-6.3.html
index e326ad9..71a7f97 100644
--- a/doc/release-notes/skiboot-6.3.html
+++ b/doc/release-notes/skiboot-6.3.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.3 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.3 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.2.4.html" title="skiboot-6.2.4"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -58,11 +59,11 @@ stable releases).</p>
<div class="section" id="new-features">
<span id="skiboot-6-3-new-features"></span><h2>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hw/imc: Enable opal calls to init/start/stop IMC Trace mode</p>
+<li><p class="first">hw/imc: Enable opal calls to init/start/stop IMC Trace mode</p>
<p>New OPAL APIs for In-Memory Collection Counter infrastructure(IMC),
including a new device type called OPAL_IMC_COUNTERS_TRACE.</p>
</li>
-<li><p>xive: Add calls to save/restore the queues and VPs HW state</p>
+<li><p class="first">xive: Add calls to save/restore the queues and VPs HW state</p>
<p>To be able to support migration of guests using the XIVE native
exploitation mode, (where the queue is effectively owned by the
guest), KVM needs to be able to save and restore the HW-modified
@@ -72,7 +73,7 @@ of the VP from the NVT structure : the VP interrupt pending bits.</p>
<p>However, there is no need to set back the NVT structure on P9. P10
should be the same.</p>
</li>
-<li><p>witherspoon: Add nvlink2 interconnect information</p>
+<li><p class="first">witherspoon: Add nvlink2 interconnect information</p>
<p>GPUs on Redbud and Sequoia platforms are interconnected in groups of
2 or 3 GPUs. The problem with that is if the user decides to pass a single
GPU from a group to the userspace, we need to ensure that links between
@@ -83,21 +84,22 @@ disable links to peer GPUs, we need a topology map.</p>
of peer GPUs and NVLink2 bridges. The index in the property is a GPU link
number.</p>
</li>
-<li><p>platforms/romulus: Also support talos</p>
+<li><p class="first">platforms/romulus: Also support talos</p>
<p>The two are similar enough and I’d like to have a slot table for our
Talos.</p>
</li>
-<li><p>OpenCAPI support! (see <a class="reference internal" href="#skiboot-6-3-opencapi"><span class="std std-ref">OpenCAPI</span></a> section)</p></li>
-<li><p>opal/hmi: set a flag to inform OS that TOD/TB has failed.</p>
+<li><p class="first">OpenCAPI support! (see <a class="reference internal" href="#skiboot-6-3-opencapi"><span class="std std-ref">OpenCAPI</span></a> section)</p>
+</li>
+<li><p class="first">opal/hmi: set a flag to inform OS that TOD/TB has failed.</p>
<p>Set a flag to indicate OS about TOD/TB failure as part of new
opal_handle_hmi2 handler. This flag then can be used by OS to make sure
functions depending on TB value (e.g. udelay()) are aware of TB not
ticking.</p>
</li>
-<li><p>astbmc: Enable IPMI HIOMAP for AMI platforms</p>
+<li><p class="first">astbmc: Enable IPMI HIOMAP for AMI platforms</p>
<p>Required for Habanero, Palmetto and Romulus.</p>
</li>
-<li><p>power-mgmt : occ : Add â€freq-domain-mask’ DT property</p>
+<li><p class="first">power-mgmt : occ : Add â€freq-domain-mask’ DT property</p>
<p>Add a new device-tree property freq-domain-indicator to define group of
CPUs which would share same frequency. This property has been added under
power-mgmt node. It is a bitmask.</p>
@@ -117,7 +119,7 @@ recent frequency value requested by the CPUs in the quad.</p>
the Quad to the maximum of the latest frequency requested by each of
the component cores.</p>
</li>
-<li><p>powercap: occ: Fix the powercapping range allowed for user</p>
+<li><p class="first">powercap: occ: Fix the powercapping range allowed for user</p>
<p>OCC provides two limits for minimum powercap. One being hard powercap
minimum which is guaranteed by OCC and the other one is a soft
powercap minimum which is lesser than hard-min and may or may not be
@@ -127,7 +129,7 @@ minimum as the “powercap-min” DT property. And it also adds a new
DT property called “powercap-hard-min” to export the hard-min powercap
limit.</p>
</li>
-<li><p>Add NVDIMM support</p>
+<li><p class="first">Add NVDIMM support</p>
<p>NVDIMMs are memory modules that use a battery backup system to allow the
contents RAM to be saved to non-volatile storage if system power goes
away unexpectedly. This allows them to be used a high-performance
@@ -137,7 +139,7 @@ via the HDAT. We need to parse out the NVDIMM memory ranges and create
memory regions with the “pmem-region” compatible label to make them
available to the host.</p>
</li>
-<li><p>core/exceptions: implement support for MCE interrupts in powersave</p>
+<li><p class="first">core/exceptions: implement support for MCE interrupts in powersave</p>
<p>The ISA specifies that MCE interrupts in power saving modes will enter
at 0x200 with powersave bits in SRR1 set. This is not currently
supported properly, the MCE will just happen like a normal interrupt,
@@ -146,21 +148,21 @@ etc).</p>
<p>So check the power save bits similarly to the sreset vector, and
handle this properly.</p>
</li>
-<li><p>core/exceptions: allow recoverable sreset exceptions</p>
+<li><p class="first">core/exceptions: allow recoverable sreset exceptions</p>
<p>This requires implementing the MSR[RI] bit. Then just allow all
non-fatal sreset exceptions to recover.</p>
</li>
-<li><p>core/exceptions: implement an exception handler for non-powersave sresets</p>
+<li><p class="first">core/exceptions: implement an exception handler for non-powersave sresets</p>
<p>Detect non-powersave sresets and send them to the normal exception
handler which prints registers and stack.</p>
</li>
-<li><p>Add PVR_TYPE_P9P</p>
+<li><p class="first">Add PVR_TYPE_P9P</p>
<p>Enable a new PVR to get us running on another p9 variant.</p>
</li>
</ul>
<p>Since v6.3-rc2:</p>
<ul>
-<li><p>Expose PNOR Flash partitions to host MTD driver via devicetree</p>
+<li><p class="first">Expose PNOR Flash partitions to host MTD driver via devicetree</p>
<p>This makes it possible for the host to directly address each
partition without requiring each application to directly parse
the FFS headers. This has been in use for some time already to
@@ -168,7 +170,7 @@ allow BOOTKERNFW partition updates from the host.</p>
<p>All partitions except BOOTKERNFW are marked readonly.</p>
<p>The BOOTKERNFW partition is currently exclusively used by the TalosII platform</p>
</li>
-<li><p>Write boot progress to LPC port 80h</p>
+<li><p class="first">Write boot progress to LPC port 80h</p>
<p>This is an adaptation of what we currently do for op_display() on FSP
machines, inventing an encoding for what we can write into the single
byte at LPC port 80h.</p>
@@ -180,14 +182,14 @@ all about compromise.</p>
display that display these codes. So far, this has only been driven by
hostboot (see hostboot commit 90ec2e65314c).</p>
</li>
-<li><p>Write boot progress to LPC ports 81 and 82</p>
+<li><p class="first">Write boot progress to LPC ports 81 and 82</p>
<p>There’s a thought to write more extensive boot progress codes to LPC
ports 81 and 82 to supplement/replace any reliance on port 80.</p>
<p>We want to still emit port 80 for platforms like Zaius and Barreleye
that have the physical display. Ports 81 and 82 can be monitored by a
BMC though.</p>
</li>
-<li><p>Add Talos II platform</p>
+<li><p class="first">Add Talos II platform</p>
<p>Talos II has some hardware differences from Romulus, therefore
we cannot guarantee Talos II == Romulus in skiboot. Copy and
slightly modify the Romulus files for Talos II.</p>
@@ -195,7 +197,7 @@ slightly modify the Romulus files for Talos II.</p>
</ul>
<p>Since v6.3-rc1:</p>
<ul>
-<li><p>cpufeatures: Add tm-suspend-hypervisor-assist and tm-suspend-xer-so-bug node</p>
+<li><p class="first">cpufeatures: Add tm-suspend-hypervisor-assist and tm-suspend-xer-so-bug node</p>
<p>tm-suspend-hypervisor-assist for P9 &gt;=DD2.2
And a tm-suspend-xer-so-bug node for P9 DD2.2 only.</p>
<p>I also treat P9P as P9 DD2.3 and add a unit test for the cpufeatures
@@ -207,7 +209,7 @@ infrastructure.</p>
<div class="section" id="deprecated-removed-features">
<h2>Deprecated/Removed Features<a class="headerlink" href="#deprecated-removed-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>opal: Deprecate reading the PHB status</p>
+<li><p class="first">opal: Deprecate reading the PHB status</p>
<p>The OPAL_PCI_EEH_FREEZE_STATUS call takes a bunch of parameters, one of
them is &#64;phb_status. It is defined as __be64* and always NULL in
the current Linux upstream but if anyone ever decides to read that status,
@@ -218,14 +220,14 @@ corruption; p7ioc-phb has the same issue.</p>
the error message from PHB4 to the affected OPAL handlers.</p>
<p>As far as we can tell, nobody has ever used this and thus it’s safe to remove.</p>
</li>
-<li><p>Remove POWER9N DD1 support</p>
+<li><p class="first">Remove POWER9N DD1 support</p>
<p>This is not a shipping product and is no longer supported by Linux
or other firmware components.</p>
</li>
</ul>
<p>Since v6.3-rc3:</p>
<ul>
-<li><p>Disable fast-reset for POWER8</p>
+<li><p class="first">Disable fast-reset for POWER8</p>
<p>There is a bug with fast-reset when CPU cores are busy, which can be
reproduced by running <cite>stress</cite> and then trying <cite>reboot -ff</cite> (this is
what the op-test test cases FastRebootHostStress and
@@ -244,15 +246,17 @@ pdbg patches: <a class="reference external" href="https://patchwork.ozlabs.org/p
<div class="section" id="general">
<h2>General<a class="headerlink" href="#general" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>core/i2c: Various bits of refactoring</p></li>
-<li><p>refactor backtrace generation infrastructure</p></li>
-<li><p>astbmc: Handle failure to initialise raw flash</p>
+<li><p class="first">core/i2c: Various bits of refactoring</p>
+</li>
+<li><p class="first">refactor backtrace generation infrastructure</p>
+</li>
+<li><p class="first">astbmc: Handle failure to initialise raw flash</p>
<p>Initialising raw flash lead to a dead assignment to rc. Check the return
code and take the failure path as necessary. Both before and after the
fix we see output along the lines of the following when flash_init()
fails:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">53.283182881</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">IRQ</span><span class="p">:</span> <span class="n">Registering</span> <span class="mf">0800..0</span><span class="n">ff7</span> <span class="n">ops</span> <span class="o">@</span><span class="mh">0x300d4b98</span> <span class="p">(</span><span class="n">data</span> <span class="mh">0x3052b9d8</span><span class="p">)</span>
-<span class="p">[</span> <span class="mf">53.283184335</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">IRQ</span><span class="p">:</span> <span class="n">Registering</span> <span class="mi">0</span><span class="n">ff8</span><span class="o">.</span><span class="mf">.0</span><span class="n">fff</span> <span class="n">ops</span> <span class="o">@</span><span class="mh">0x300d4bc8</span> <span class="p">(</span><span class="n">data</span> <span class="mh">0x3052b9d8</span><span class="p">)</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">53.283182881</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">IRQ</span><span class="p">:</span> <span class="n">Registering</span> <span class="mf">0800.</span><span class="o">.</span><span class="mi">0</span><span class="n">ff7</span> <span class="n">ops</span> <span class="nd">@0x300d4b98</span> <span class="p">(</span><span class="n">data</span> <span class="mh">0x3052b9d8</span><span class="p">)</span>
+<span class="p">[</span> <span class="mf">53.283184335</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">IRQ</span><span class="p">:</span> <span class="n">Registering</span> <span class="mi">0</span><span class="n">ff8</span><span class="o">..</span><span class="mi">0</span><span class="n">fff</span> <span class="n">ops</span> <span class="nd">@0x300d4bc8</span> <span class="p">(</span><span class="n">data</span> <span class="mh">0x3052b9d8</span><span class="p">)</span>
<span class="p">[</span> <span class="mf">53.283185513</span><span class="p">,</span><span class="mi">7</span><span class="p">]</span> <span class="n">PHB</span><span class="c1">#0000: Initializing PHB...</span>
<span class="p">[</span> <span class="mf">53.288260827</span><span class="p">,</span><span class="mi">4</span><span class="p">]</span> <span class="n">FLASH</span><span class="p">:</span> <span class="n">Can</span><span class="s1">&#39;t load resource id:0. No system flash found</span>
<span class="p">[</span> <span class="mf">53.288354442</span><span class="p">,</span><span class="mi">4</span><span class="p">]</span> <span class="n">FLASH</span><span class="p">:</span> <span class="n">Can</span><span class="s1">&#39;t load resource id:1. No system flash found</span>
@@ -289,7 +293,7 @@ of executing from unexpected memory locations. As such the issue is
reduced to down to a fix for poor error hygene in the original change
and a resolution for a Coverity warning (famous last words etc).</p>
</li>
-<li><p>core/flash: Retry requests as necessary in flash_load_resource()</p>
+<li><p class="first">core/flash: Retry requests as necessary in flash_load_resource()</p>
<p>We would like to successfully boot if we have a dependency on the BMC
for flash even if the BMC is not current ready to service flash
requests. On the assumption that it will become ready, retry for several
@@ -326,14 +330,14 @@ CPU 0040 Backtrace:
no delay for e.g. the host kernel, just for asynchronously loaded
resources during boot.</p>
</li>
-<li><p>fast-reboot: occ: Call occ_pstates_init() on fast-reset on all machines</p>
+<li><p class="first">fast-reboot: occ: Call occ_pstates_init() on fast-reset on all machines</p>
<p>Commit 815417dcda2e (“init, occ: Initialise OCC earlier on BMC systems”)
conditionally invoked occ_pstates_init() only on FSP based systems in
load_and_boot_kernel(). Due to this pstate table is re-parsed on FSP
system and skipped on BMC system during fast-reboot. So this patch fixes
this by invoking occ_pstates_init() on all boxes during fast-reboot.</p>
</li>
-<li><p>opal/hmi: Don’t retry TOD recovery if it is already in failed state.</p>
+<li><p class="first">opal/hmi: Don’t retry TOD recovery if it is already in failed state.</p>
<p>On TOD failure, all cores/thread receives HMI and very first thread that
gets interrupt fixes the TOD where as others just resets the respective
HMER error bit and return. But when TOD is unrecoverable, all the threads
@@ -342,7 +346,7 @@ opal. Set a global flag when TOD is unrecoverable so that rest of the
threads go back to linux immediately avoiding lock ups in system
reboot/panic path.</p>
</li>
-<li><p>hw/bt: Do not disable ipmi message retry during OPAL boot</p>
+<li><p class="first">hw/bt: Do not disable ipmi message retry during OPAL boot</p>
<p>Currently OPAL doesn’t know whether BMC is functioning or not. If BMC is
down (like BMC reboot), then we keep on retry sending message to BMC. So
in some corner cases we may hit hard lockup issue in kernel.</p>
@@ -351,7 +355,7 @@ for now commit 01f977c3 added option to disable message retry in synchronous.
But this fix is not required during boot. Hence lets disable IPMI message
retry during OPAL boot.</p>
</li>
-<li><p>hdata/memory: Fix warning message</p>
+<li><p class="first">hdata/memory: Fix warning message</p>
<p>Even though we added memory to device tree, we are getting below warning.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span> <span class="mf">57.136949696</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span> <span class="n">Unable</span> <span class="n">to</span> <span class="n">use</span> <span class="n">memory</span> <span class="nb">range</span> <span class="mi">0</span> <span class="kn">from</span> <span class="nn">MSAREA</span> <span class="mi">0</span>
<span class="p">[</span> <span class="mf">57.137049753</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span> <span class="n">Unable</span> <span class="n">to</span> <span class="n">use</span> <span class="n">memory</span> <span class="nb">range</span> <span class="mi">0</span> <span class="kn">from</span> <span class="nn">MSAREA</span> <span class="mi">1</span>
@@ -360,7 +364,7 @@ retry during OPAL boot.</p>
</pre></div>
</div>
</li>
-<li><p>hw/bt: Add backend interface to disable ipmi message retry option</p>
+<li><p class="first">hw/bt: Add backend interface to disable ipmi message retry option</p>
<p>During boot OPAL makes IPMI_GET_BT_CAPS call to BMC to get BT interface
capabilities which includes IPMI message max resend count, message
timeout, etc,. Most of the time OPAL gets response from BMC within
@@ -378,7 +382,7 @@ greatly reduces kernel hardlock up issues.</p>
<p>This is short term fix. Long term solution is to convert all synchronous
messages to asynhrounous one.</p>
</li>
-<li><p>ipmi/power: Fix system reboot issue</p>
+<li><p class="first">ipmi/power: Fix system reboot issue</p>
<p>Kernel makes reboot/shudown OPAL call for reboot/shutdown. Once kernel
gets response from OPAL it runs opal_poll_events() until firmware
handles the request.</p>
@@ -391,7 +395,7 @@ reboot/shutdown the system using BMC interface.</p>
then it will resend the message. At some stage BMC will be ready to accept
message and handles IPMI message.</p>
</li>
-<li><p>firmware-versions: Add test case for parsing VERSION</p>
+<li><p class="first">firmware-versions: Add test case for parsing VERSION</p>
<p>Also make it possible to use with afl-lop/afl-fuzz just to help make
<em>sure</em> we’re all good.</p>
<p>Additionally, if we hit a entry in VERSION that is larger than our
@@ -400,19 +404,19 @@ stack. This is only a problem if VERSION isn’t trusted, which as of
4b8cc05a94513816d43fb8bd6178896b430af08f it is verified as part of
Secure Boot.</p>
</li>
-<li><p>core/fast-reboot: improve NMI handling during fast reset</p>
+<li><p class="first">core/fast-reboot: improve NMI handling during fast reset</p>
<p>Improve sreset and MCE handling in fast reboot. Switch the HILE bit
off before copying OPAL’s exception vectors, so NMIs can be handled
properly. Also disable MSR[ME] while the vectors are being overwritten</p>
</li>
-<li><p>core/cpu: HID update race</p>
+<li><p class="first">core/cpu: HID update race</p>
<p>If the per-core HID register is updated concurrently by multiple
threads, updates can get lost. This has been observed during fast
reboot where the HILE bit does not get cleared on all cores, which
can cause machine check exception interrupts to crash.</p>
<p>Fix this by only updating HID on thread0.</p>
</li>
-<li><p>SLW: Print verbose info on errors only</p>
+<li><p class="first">SLW: Print verbose info on errors only</p>
<p>Change print level from debug to warning for reporting
bad EC_PPM_SPECIAL_WKUP_* scom values. To reduce cluttering
in the log print only on error.</p>
@@ -420,8 +424,9 @@ in the log print only on error.</p>
</ul>
<p>Since v6.3-rc2:</p>
<ul>
-<li><p>hw/xscom: add missing P9P chip name</p></li>
-<li><p>asm/head: balance branches to avoid link stack predictor mispredicts</p>
+<li><p class="first">hw/xscom: add missing P9P chip name</p>
+</li>
+<li><p class="first">asm/head: balance branches to avoid link stack predictor mispredicts</p>
<p>The Linux wrapper for OPAL call and return is arranged like this:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">__opal_call</span><span class="p">:</span>
<span class="n">mflr</span> <span class="n">r0</span>
@@ -440,23 +445,24 @@ in the log print only on error.</p>
with a blr. This unbalances the link stack predictor and will cause
mispredicts back up the return stack.</p>
</li>
-<li><p>external/mambo: also invoke readline for the non-autorun case</p></li>
-<li><p>asm/head.S: set POWER9 radix HID bit at entry</p>
+<li><p class="first">external/mambo: also invoke readline for the non-autorun case</p>
+</li>
+<li><p class="first">asm/head.S: set POWER9 radix HID bit at entry</p>
<p>When running in virtual memory mode, the radix MMU hid bit should not
be changed, so set this in the initial boot SPR setup.</p>
<p>As a side effect, fast reboot also has HID0:RADIX bit set by the
shared spr init, so no need for an explicit call.</p>
</li>
-<li><p>build: link with –orphan-handling=warn</p>
+<li><p class="first">build: link with –orphan-handling=warn</p>
<p>The linker can warn when the linker script does not explicitly place
all sections. These orphan sections are placed according to
heuristics, which may not always be desirable. Enable this warning.</p>
</li>
-<li><p>build: -fno-asynchronous-unwind-tables</p>
+<li><p class="first">build: -fno-asynchronous-unwind-tables</p>
<p>skiboot does not use unwind tables, this option saves about 100kB,
mostly from .text.</p>
</li>
-<li><p>opal/hmi: Initialize the hmi event with old value of TFMR.</p>
+<li><p class="first">opal/hmi: Initialize the hmi event with old value of TFMR.</p>
<p>Do this before we fix TFAC errors. Otherwise the event at host console
shows no thread error reported in TFMR register.</p>
<p>Without this patch the console event show TFMR with no thread error:
@@ -480,8 +486,9 @@ shows no thread error reported in TFMR register.</p>
<div class="section" id="ibm-fsp-based-platforms">
<h2>IBM FSP based platforms<a class="headerlink" href="#ibm-fsp-based-platforms" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>platforms/firenze: Rework I2C controller fixups</p></li>
-<li><p>platforms/zz: Re-enable LXVPD slot information parsing</p>
+<li><p class="first">platforms/firenze: Rework I2C controller fixups</p>
+</li>
+<li><p class="first">platforms/zz: Re-enable LXVPD slot information parsing</p>
<p>From memory this was disabled in the distant past since we were waiting
for an updates to the LXPVD format. It looks like that never happened
so re-enable it for the ZZ platform so that we can get PCI slot location
@@ -492,7 +499,7 @@ codes on ZZ.</p>
<div class="section" id="hiomap">
<h2>HIOMAP<a class="headerlink" href="#hiomap" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>astbmc: Try IPMI HIOMAP for P8</p>
+<li><p class="first">astbmc: Try IPMI HIOMAP for P8</p>
<p>The HIOMAP protocol was developed after the release of P8 in preparation
for P9. As a consequence P9 always uses it, but it has rarely been
enabled for P8. P8DTU has recently added IPMI HIOMAP support to its BMC
@@ -500,19 +507,19 @@ firmware, so enable its use in skiboot with P8 machines. Doing so
requires some rework to ensure fallback works correctly as in the past
the fallback was to mbox, which will only work for P9.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Enforce message size for empty response</p>
+<li><p class="first">libflash/ipmi-hiomap: Enforce message size for empty response</p>
<p>The protocol defines the response to the associated messages as empty
except for the command ID and sequence fields. If the BMC is returning
extra data consider the message malformed.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Remove unused close handling</p>
+<li><p class="first">libflash/ipmi-hiomap: Remove unused close handling</p>
<p>Issuing a HIOMAP_C_CLOSE is not required by the protocol specification,
rather a close can be implicit in a subsequent
CREATE_{READ,WRITE}_WINDOW request. The implicit close provides an
opportunity to reduce LPC traffic and the implementation takes up that
optimisation, so remove the case from the IPMI callback handler.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Overhaul event handling</p>
+<li><p class="first">libflash/ipmi-hiomap: Overhaul event handling</p>
<p>Reworking the event handling was inspired by a bug report by Vasant
where the host would get wedged on multiple flash access attempts in the
face of a persistent error state on the BMC-side. The cause of this bug
@@ -523,17 +530,17 @@ HIOMAP_E_DAEMON_READY is clear in the prior calls.</p>
<p>Regardless, there were other correctness and efficiency problems with
the handling strategy:</p>
<ul class="simple">
-<li><p>Ack-able event state was not restored in the face of errors in the
-process of re-establishing protocol state</p></li>
-<li><p>It forced needless window restoration with respect to the context in
-which ipmi_hiomap_handle_events() was called.</p></li>
-<li><p>Tests for HIOMAP_E_DAEMON_READY and HIOMAP_E_FLASH_LOST were redundant
-with the overhauled error handling introduced in the previous patch</p></li>
+<li>Ack-able event state was not restored in the face of errors in the
+process of re-establishing protocol state</li>
+<li>It forced needless window restoration with respect to the context in
+which ipmi_hiomap_handle_events() was called.</li>
+<li>Tests for HIOMAP_E_DAEMON_READY and HIOMAP_E_FLASH_LOST were redundant
+with the overhauled error handling introduced in the previous patch</li>
</ul>
<p>Fix all of the above issues and add comments to explain the event
handling flow.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Overhaul error handling</p>
+<li><p class="first">libflash/ipmi-hiomap: Overhaul error handling</p>
<p>The aim is to improve the robustness with respect to absence of the
BMC-side daemon. The current error handling roughly mirrors what was
done for the mailbox implementation, but there’s room for improvement.</p>
@@ -551,11 +558,12 @@ operation no attempt is made to recover it on the spot, instead the
error is returned up the stack and the caller can choose how it wishes
to respond.</p>
</li>
-<li><p>libflash/ipmi-hiomap: Fix leak of msg in callback</p></li>
+<li><p class="first">libflash/ipmi-hiomap: Fix leak of msg in callback</p>
+</li>
</ul>
<p>Since v6.3-rc1:</p>
<ul>
-<li><p>libflash/ipmi-hiomap: Fix blocks count issue</p>
+<li><p class="first">libflash/ipmi-hiomap: Fix blocks count issue</p>
<p>We convert data size to block count and pass block count to BMC.
If data size is not block aligned then we endup sending block count
less than actual data. BMC will write partial data to flash memory.</p>
@@ -574,7 +582,7 @@ flush data to flash.</p>
<div class="section" id="power8">
<h2>POWER8<a class="headerlink" href="#power8" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hw/phb3/naples: Disable D-states</p>
+<li><p class="first">hw/phb3/naples: Disable D-states</p>
<p>Putting “Mellanox Technologies MT27700 Family [ConnectX-4] [15b3:1013]”
(more precisely, the second of 2 its PCI functions, no matter in what
order) into the D3 state causes EEH with the “PCT timeout” error.
@@ -583,7 +591,7 @@ seem to have this issue.</p>
<p>This disables D-states changing for devices on root buses on Naples by
installing a config space access filter (copied from PHB4).</p>
</li>
-<li><p>cpufeatures: Always advertise POWER8NVL as DD2</p>
+<li><p class="first">cpufeatures: Always advertise POWER8NVL as DD2</p>
<p>Despite the major version of PVR being 1 (0x004c0100) for POWER8NVL,
these chips are functionally equalent to P8/P8E DD2 levels.</p>
<p>This advertises POWER8NVL as DD2. As the result, skiboot adds
@@ -596,20 +604,21 @@ of missing LPCR_PECEDH.</p>
<div class="section" id="p8dtu-platform">
<h3>p8dtu Platform<a class="headerlink" href="#p8dtu-platform" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>p8dtu: Configure BMC graphics</p>
+<li><p class="first">p8dtu: Configure BMC graphics</p>
<p>We can no-longer read the values from the BMC in the way we have in the
past. Values were provided by Eric Chen of SMC.</p>
</li>
-<li><p>p8dtu: Enable HIOMAP support</p></li>
+<li><p class="first">p8dtu: Enable HIOMAP support</p>
+</li>
</ul>
</div>
<div class="section" id="vesnin-platform">
<h3>Vesnin Platform<a class="headerlink" href="#vesnin-platform" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>platforms/vesnin: Disable PCIe port bifurcation</p>
+<li><p class="first">platforms/vesnin: Disable PCIe port bifurcation</p>
<p>PCIe ports connected to CPU1 and CPU3 now work as x16 instead of x8x8.</p>
</li>
-<li><p>Fix hang in pnv_platform_error_reboot path due to TOD failure.</p>
+<li><p class="first">Fix hang in pnv_platform_error_reboot path due to TOD failure.</p>
<p>On TOD failure, with TB stuck, when linux heads down to
pnv_platform_error_reboot() path due to unrecoverable hmi event, the panic
cpu gets stuck in OPAL inside ipmi_queue_msg_sync(). At this time, rest
@@ -666,19 +675,19 @@ failed state as well.</p>
<div class="section" id="power9">
<span id="skiboot-6-3-power9"></span><h2>POWER9<a class="headerlink" href="#power9" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Retry link training at PCIe GEN1 if presence detected but training repeatedly failed</p>
+<li><p class="first">Retry link training at PCIe GEN1 if presence detected but training repeatedly failed</p>
<p>Certain older PCIe 1.0 devices will not train unless the training process starts at GEN1 speeds.
As a last resort when a device will not train, fall back to GEN1 speed for the last training attempt.</p>
<p>This is verified to fix devices based on the Conexant CX23888 on the Talos II platform.</p>
</li>
-<li><p>hw/phb4: Drop FRESET_DEASSERT_DELAY state</p>
+<li><p class="first">hw/phb4: Drop FRESET_DEASSERT_DELAY state</p>
<p>The delay between the ASSERT_DELAY and DEASSERT_DELAY states is set to
one timebase tick. This state seems to have been a hold over from PHB3
where it was used to add a 1s delay between de-asserting PERST and
polling the link for the CAPI FPGA. There’s no requirement for that here
since the link polling on PHB4 is a bit smarter so we should be fine.</p>
</li>
-<li><p>hw/phb4: Factor out PERST control</p>
+<li><p class="first">hw/phb4: Factor out PERST control</p>
<p>Some time ago Mikey added some code work around a bug we found where a
certain RAID card wouldn’t come back again after a fast-reboot. The
workaround is setting the Link Disable bit before asserting PERST and
@@ -687,13 +696,13 @@ clear it after de-asserting PERST.</p>
This patch moves the PERST control into its own function to reduce
duplication and to the workaround is applied in all circumstances.</p>
</li>
-<li><p>hw/phb4: Remove FRESET presence check</p>
+<li><p class="first">hw/phb4: Remove FRESET presence check</p>
<p>When we do an freset the first step is to check if a card is present in
the slot. However, this only occurs when we enter phb4_freset() with the
slot state set to SLOT_NORMAL. This occurs in:</p>
<ol class="loweralpha simple">
-<li><p>The creset path, and</p></li>
-<li><p>When the OS manually requests an FRESET via an OPAL call.</p></li>
+<li>The creset path, and</li>
+<li>When the OS manually requests an FRESET via an OPAL call.</li>
</ol>
<p>(a) is problematic because in the boot path the generic code will put the
slot into FRESET_START manually before calling into phb4_freset(). This
@@ -708,7 +717,7 @@ the slot’s PERST signal being left asserted. This isn’t currently an issue,
but if we want to support hotplug of devices into the root port it will
be.</p>
</li>
-<li><p>hw/phb4: Skip FRESET PERST when coming from CRESET</p>
+<li><p class="first">hw/phb4: Skip FRESET PERST when coming from CRESET</p>
<p>PERST is asserted at the beginning of the CRESET process to prevent
the downstream device from interacting with the host while the PHB logic
is being reset and re-initialised. There is at least a 100ms wait during
@@ -719,20 +728,20 @@ to the 250ms PERST wait period that we typically use and sets the
skip_perst flag so that we don’t wait this time again in the FRESET
handler.</p>
</li>
-<li><p>hw/phb4: Look for the hub-id from in the PBCQ node</p>
+<li><p class="first">hw/phb4: Look for the hub-id from in the PBCQ node</p>
<p>The hub-id is stored in the PBCQ node rather than the stack node so we
never add it to the PHB node. This breaks the lxvpd slot lookup code
since the hub-id is encoded in the VPD record that we need to find the
slot information.</p>
</li>
-<li><p>hdata/iohub: Look for IOVPD on P9</p>
+<li><p class="first">hdata/iohub: Look for IOVPD on P9</p>
<p>P8 and P9 use the same IO VPD setup, so we need to load the IOHUB VPD on
P9 systems too.</p>
</li>
</ul>
<p>Since v6.3-rc2:</p>
<ul>
-<li><p>hw/phb4: Squash the IO bridge window</p>
+<li><p class="first">hw/phb4: Squash the IO bridge window</p>
<p>The PCI-PCI bridge spec says that bridges that implement an IO window
should hardcode the IO base and limit registers to zero.
Unfortunately, these registers only define the upper bits of the IO
@@ -753,18 +762,18 @@ interprets as a disabled window.</p>
</pre></div>
</div>
</li>
-<li><p>hw/xscom: Enable sw xstop by default on p9</p>
+<li><p class="first">hw/xscom: Enable sw xstop by default on p9</p>
<p>This was disabled at some point during bringup to make life easier for
the lab folks trying to debug NVLink issues. This hack really should
have never made it out into the wild though, so we now have the
following situation occuring in the field:</p>
<ol class="arabic simple">
-<li><p>A bad happens</p></li>
-<li><p>The host kernel recieves an unrecoverable HMI and calls into OPAL to
-request a platform reboot.</p></li>
-<li><p>OPAL rejects the reboot attempt and returns to the kernel with
-OPAL_PARAMETER.</p></li>
-<li><p>Kernel panics and attempts to kexec into a kdump kernel.</p></li>
+<li>A bad happens</li>
+<li>The host kernel recieves an unrecoverable HMI and calls into OPAL to
+request a platform reboot.</li>
+<li>OPAL rejects the reboot attempt and returns to the kernel with
+OPAL_PARAMETER.</li>
+<li>Kernel panics and attempts to kexec into a kdump kernel.</li>
</ol>
<p>A side effect of the HMI seems to be CPUs becoming stuck which results
in the initialisation of the kdump kernel taking a extremely long time
@@ -779,7 +788,7 @@ override.</p>
<div class="section" id="capi2">
<h3>CAPI2<a class="headerlink" href="#capi2" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>capp/phb4: Prevent HMI from getting triggered when disabling CAPP</p>
+<li><p class="first">capp/phb4: Prevent HMI from getting triggered when disabling CAPP</p>
<p>While disabling CAPP an HMI gets triggered as soon as ETU is put in
reset mode. This is caused as before we can disabled CAPP, it detects
PHB link going down and triggers an HMI requesting Opal to perform
@@ -792,7 +801,7 @@ phb4_creset(). Also now since bringing down the PHB link now wont
trigger an HMI and CAPP recovery, hence we manually set the
PHB4_CAPP_RECOVERY flag on the phb to force recovery during creset.</p>
</li>
-<li><p>phb4/capp: Implement sequence to disable CAPP and enable fast-reset</p>
+<li><p class="first">phb4/capp: Implement sequence to disable CAPP and enable fast-reset</p>
<p>We implement h/w sequence to disable CAPP in disable_capi_mode() and
with it also enable fast-reset for CAPI mode in phb4_set_capi_mode().</p>
<p>Sequence to disable CAPP is executed in three phases. The first two
@@ -804,7 +813,7 @@ phb4_init_ioda3() is because by the time Opal PCI reset state machine
reaches this function the PHB is already un-fenced and its
configuration registers accessible via mmio.</p>
</li>
-<li><p>capp/phb4: Force CAPP to PCIe mode during kernel shutdown</p>
+<li><p class="first">capp/phb4: Force CAPP to PCIe mode during kernel shutdown</p>
<p>This patch introduces a new opal syncer for PHB4 named
phb4_host_sync_reset(). We register this opal syncer when CAPP is
activated successfully in phb4_set_capi_mode() so that it will be
@@ -820,14 +829,14 @@ ensure that Opal slot reset state machine makes forward progress.</p>
<div class="section" id="witherspoon-platform">
<h3>Witherspoon Platform<a class="headerlink" href="#witherspoon-platform" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>platforms/witherspoon: Make PCIe shared slot error message more informative</p>
+<li><p class="first">platforms/witherspoon: Make PCIe shared slot error message more informative</p>
<p>If we’re missing chips for some reason, we print a warning when configuring
the PCIe shared slot.</p>
<p>The warning doesn’t really make it clear what “shared slot” is, and if it’s
printed, it’ll come right after a bunch of messages about NPU setup, so
let’s clarify the message to explicitly mention PCI.</p>
</li>
-<li><p>witherspoon: Add nvlink2 interconnect information</p>
+<li><p class="first">witherspoon: Add nvlink2 interconnect information</p>
<p>See <a class="reference internal" href="#skiboot-6-3-new-features"><span class="std std-ref">New Features</span></a> for details.</p>
</li>
</ul>
@@ -835,7 +844,7 @@ let’s clarify the message to explicitly mention PCI.</p>
<div class="section" id="zaius-platform">
<h3>Zaius Platform<a class="headerlink" href="#zaius-platform" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>zaius: Add BMC description</p>
+<li><p class="first">zaius: Add BMC description</p>
<p>Frederic reported that Zaius was failing with a NULL dereference when
trying to initialise IPMI HIOMAP. It turns out that the BMC wasn’t
described at all, so add a description.</p>
@@ -845,7 +854,7 @@ described at all, so add a description.</p>
<div class="section" id="p9dsu-platform">
<h3>p9dsu platform<a class="headerlink" href="#p9dsu-platform" title="Permalink to this headline">¶</a></h3>
<ul>
-<li><p>p9dsu: Fix p9dsu default variant</p>
+<li><p class="first">p9dsu: Fix p9dsu default variant</p>
<p>Add the default when no riser_id is returned from the ipmi query.</p>
<p>Allow a little more time for BMC reply and cleanup some label strings.</p>
</li>
@@ -856,22 +865,22 @@ described at all, so add a description.</p>
<h2>PCIe<a class="headerlink" href="#pcie" title="Permalink to this headline">¶</a></h2>
<p>See <a class="reference internal" href="#skiboot-6-3-power9"><span class="std std-ref">POWER9</span></a> for POWER9 specific PCIe changes.</p>
<ul>
-<li><p>core/pcie-slot: Don’t bail early in the power on case</p>
+<li><p class="first">core/pcie-slot: Don’t bail early in the power on case</p>
<p>Exiting early in the power off case makes sense since we can’t disable
slot power (or assert PERST) for suprise hotplug slots. However, we
should not exit early in the power-on case since it’s possible slot
power may have been disabled (or just not enabled at boot time).</p>
</li>
-<li><p>firenze-pci: Always init slot info from LXVPD</p>
+<li><p class="first">firenze-pci: Always init slot info from LXVPD</p>
<p>We can slot information from the LXVPD without having power control
information about that slot. This patch changes the init path so that
we always override the add_properties() call rather than only when we
have power control information about the slot.</p>
</li>
-<li><p>fsp/lxvpd: Print more LXVPD slot information</p>
+<li><p class="first">fsp/lxvpd: Print more LXVPD slot information</p>
<p>Useful to know since it changes the behaviour of the slot core.</p>
</li>
-<li><p>core/pcie-slot: Set power state from the PWRCTL flag</p>
+<li><p class="first">core/pcie-slot: Set power state from the PWRCTL flag</p>
<p>For some reason we look at the power control indicator and use that to
determine if the slot is “off” rather than the power control flag that
is used to power down the slot.</p>
@@ -879,7 +888,7 @@ is used to power down the slot.</p>
assumed to be powered on if there’s no slot capability, or if there’s
no power control available.</p>
</li>
-<li><p>core/pci: Increase the max slot string size</p>
+<li><p class="first">core/pci: Increase the max slot string size</p>
<p>The maximum string length for the slot label / device location code in
the PCI summary is currently 32 characters. This results in some IBM
location codes being truncated due to their length, e.g.</p>
@@ -897,7 +906,7 @@ since that’s the maximum length for a location code.</p>
</ul>
<p>Since v6.3-rc3:</p>
<ul>
-<li><p>pci: Try harder to add meaningful ibm,loc-code</p>
+<li><p class="first">pci: Try harder to add meaningful ibm,loc-code</p>
<p>We keep the existing logic of looking to the parent for the slot-label or
slot-location-code, but we add logic to (if all that fails) we look
directly for the slot-location-code (as this should give us the correct
@@ -926,13 +935,13 @@ we have no location codes which some people consider an issue.</p>
the root port device default to the ibm,io-base-location-code which is
typically the location code for the system itself.</p>
<p>e.g.</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pciex</span><span class="o">@</span><span class="mi">600</span><span class="n">c3c0100000</span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">loc</span><span class="o">-</span><span class="n">code</span>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pciex</span><span class="nd">@600c3c0100000</span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">loc</span><span class="o">-</span><span class="n">code</span>
<span class="s2">&quot;UOPWR.0000000-Node0-Proc0&quot;</span>
-<span class="n">pciex</span><span class="o">@</span><span class="mi">600</span><span class="n">c3c0100000</span><span class="o">/</span><span class="n">pci</span><span class="o">@</span><span class="mi">0</span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">loc</span><span class="o">-</span><span class="n">code</span>
+<span class="n">pciex</span><span class="nd">@600c3c0100000</span><span class="o">/</span><span class="n">pci</span><span class="nd">@0</span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">loc</span><span class="o">-</span><span class="n">code</span>
<span class="s2">&quot;UOPWR.0000000-Node0-Proc0&quot;</span>
-<span class="n">pciex</span><span class="o">@</span><span class="mi">600</span><span class="n">c3c0100000</span><span class="o">/</span><span class="n">pci</span><span class="o">@</span><span class="mi">0</span><span class="o">/</span><span class="n">usb</span><span class="o">-</span><span class="n">xhci</span><span class="o">@</span><span class="mi">0</span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">loc</span><span class="o">-</span><span class="n">code</span>
+<span class="n">pciex</span><span class="nd">@600c3c0100000</span><span class="o">/</span><span class="n">pci</span><span class="nd">@0</span><span class="o">/</span><span class="n">usb</span><span class="o">-</span><span class="n">xhci</span><span class="nd">@0</span><span class="o">/</span><span class="n">ibm</span><span class="p">,</span><span class="n">loc</span><span class="o">-</span><span class="n">code</span>
<span class="s2">&quot;UOPWR.0000000-Node0&quot;</span>
</pre></div>
</div>
@@ -941,7 +950,7 @@ processor they are attached to, while the usb-xhci device under the
root port has a location code of the system itself.</p>
</div></blockquote>
<ul>
-<li><p>hw/phb4: Read ibm,loc-code from PBCQ node</p>
+<li><p class="first">hw/phb4: Read ibm,loc-code from PBCQ node</p>
<p>On P9 the PBCQs are subdivided by stacks which implement the PCI Express
logic. When phb4 was forked from phb3 most of the properties that were
in the pbcq node moved into the stack node, but ibm,loc-code was not one
@@ -954,7 +963,7 @@ the stack node itself.</p>
<div class="section" id="opencapi">
<span id="skiboot-6-3-opencapi"></span><h2>OpenCAPI<a class="headerlink" href="#opencapi" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>npu2/hw-procedures: Fix parallel zcal for opencapi</p>
+<li><p class="first">npu2/hw-procedures: Fix parallel zcal for opencapi</p>
<p>For opencapi, we currently do impedance calibration when initializing
the PHY for the device, which could run in parallel if we have
multiple opencapi devices. But if 2 devices are on the same
@@ -963,17 +972,17 @@ bad results and is useless anyway since it only needs to be done once
per obus.</p>
<p>This patch splits the opencapi PHY reset in 2 parts:</p>
<ul class="simple">
-<li><p>a â€init’ part called serially at boot. That’s when zcal is done. If
+<li>a â€init’ part called serially at boot. That’s when zcal is done. If
we have 2 devices on the same socket, the zcal won’t be redone,
since we’re called serially and we’ll see it has already be done for
-the obus</p></li>
-<li><p>a â€reset’ part called during fundamental reset as a prereq for link
-training. It does the PHY setup for a set of lanes and the dccal.</p></li>
+the obus</li>
+<li>a â€reset’ part called during fundamental reset as a prereq for link
+training. It does the PHY setup for a set of lanes and the dccal.</li>
</ul>
<p>The PHY team confirmed there’s no dependency between zcal and the
other reset steps and it can be moved earlier.</p>
</li>
-<li><p>npu2-hw-procedures: Fix zcal in mixed opencapi and nvlink mode</p>
+<li><p class="first">npu2-hw-procedures: Fix zcal in mixed opencapi and nvlink mode</p>
<p>The zcal procedure needs to be run once per obus. We keep track of
which obus is already calibrated in an array indexed by the obus
number. However, the obus number is inferred from the brick index,
@@ -981,7 +990,7 @@ which works well for nvlink but not for opencapi.</p>
<p>Create an obus_index() function, which, from a device, returns the
correct obus index, irrespective of the device type.</p>
</li>
-<li><p>npu2-opencapi: Fix adapter reset when using 2 adapters</p>
+<li><p class="first">npu2-opencapi: Fix adapter reset when using 2 adapters</p>
<p>If two opencapi adapters are on the same obus, we may try to train the
two links in parallel at boot time, when all the PCI links are being
trained. Both links use the same i2c controller to handle the reset
@@ -991,14 +1000,14 @@ current state of the i2c controller (and use locking).</p>
<p>This went mostly unnoticed as you need to have 2 opencapi cards on the
same socket and links tended to train anyway because of the retries.</p>
</li>
-<li><p>npu2-opencapi: Extend delay after releasing reset on adapter</p>
+<li><p class="first">npu2-opencapi: Extend delay after releasing reset on adapter</p>
<p>Give more time to the FPGA to process the reset signal. The previous
delay, 5ms, is too short for newer adapters with bigger FPGAs. Extend
it to 250ms.
Ultimately, that delay will likely end up being added to the opencapi
specification, but we are not there yet.</p>
</li>
-<li><p>npu2-opencapi: ODL should be in reset when enabled</p>
+<li><p class="first">npu2-opencapi: ODL should be in reset when enabled</p>
<p>We haven’t hit any problem so far, but from the ODL designer, the ODL
should be in reset when it is enabled.</p>
<p>The ODL remains in reset until we start a fundamental reset to
@@ -1008,7 +1017,7 @@ link. Asserting is therefore useless at boot, since the ODL is already
in reset, but we keep it as it’s only a scom write and it’s needed
when we reset/retrain from the OS.</p>
</li>
-<li><p>npu2-opencapi: Keep ODL and adapter in reset at the same time</p>
+<li><p class="first">npu2-opencapi: Keep ODL and adapter in reset at the same time</p>
<p>Split the function to assert and deassert the reset signal on the ODL,
so that we can keep the ODL in reset while we reset the adapter,
therefore having a window where both sides are in reset.</p>
@@ -1017,7 +1026,7 @@ need to split the ODL reset function for the following patch and it
will become useful/required later when we introduce resetting an
opencapi link from the OS.</p>
</li>
-<li><p>npu2-opencapi: Setup perf counters to detect CRC errors</p>
+<li><p class="first">npu2-opencapi: Setup perf counters to detect CRC errors</p>
<p>It’s possible to set up performance counters for the PLL to detect
various conditions for the links in nvlink or opencapi mode. Since
those counters are currently unused, let’s configure them when an obus
@@ -1032,13 +1041,13 @@ configured to be reset after each read.</p>
</ul>
<p>Since v6.3-rc1:</p>
<ul>
-<li><p>opal/hmi: Never trust a cow!</p>
+<li><p class="first">opal/hmi: Never trust a cow!</p>
<p>With opencapi, it’s fairly common to trigger HMIs during AFU
development on the FPGA, by not replying in time to an NPU command,
for example. So shift the blame reported by that cow to avoid crowding
my mailbox.</p>
</li>
-<li><p>hw/npu2: Dump (more) npu2 registers on link error and HMIs</p>
+<li><p class="first">hw/npu2: Dump (more) npu2 registers on link error and HMIs</p>
<p>We were already logging some NPU registers during an HMI. This patch
cleans up a bit how it is done and separates what is global from what
is specific to nvlink or opencapi.</p>
@@ -1049,7 +1058,7 @@ registers of the brick which hit the error.</p>
allow for proper debugging. For each register, we print the name as
found in the NPU workbook, the scom address and the register value.</p>
</li>
-<li><p>hw/npu2: Report errors to the OS if an OpenCAPI brick is fenced</p>
+<li><p class="first">hw/npu2: Report errors to the OS if an OpenCAPI brick is fenced</p>
<p>Now that the NPU may report interrupts due to the link going down
unexpectedly, report those errors to the OS when queried by the
â€next_error’ PHB callback.</p>
@@ -1057,7 +1066,7 @@ unexpectedly, report those errors to the OS when queried by the
unexpectedly. So we report the PHB as dead, so that the OS can log the
proper message, notify the drivers and take the devices down.</p>
</li>
-<li><p>hw/npu2: Fix OpenCAPI PE assignment</p>
+<li><p class="first">hw/npu2: Fix OpenCAPI PE assignment</p>
<p>When we support mixing NVLink and OpenCAPI devices on the same NPU, we’re
going to have to share the same range of 16 PE numbers between NVLink and
OpenCAPI PHBs.</p>
@@ -1069,7 +1078,7 @@ half that is used for OpenCAPI, with a fixed PE number assigned per brick.</p>
<p>As the PE assignment for OpenCAPI devices is fixed, set the PE once
during device init and then ignore calls to the set_pe() operation.</p>
</li>
-<li><p>opal-api: Reserve 2 OPAL API calls for future OpenCAPI LPC use</p>
+<li><p class="first">opal-api: Reserve 2 OPAL API calls for future OpenCAPI LPC use</p>
<p>OpenCAPI Lowest Point of Coherency (LPC) memory is going to require
some extra OPAL calls to set up NPU BARs. These calls will most likely be
called OPAL_NPU_LPC_ALLOC and OPAL_NPU_LPC_RELEASE, we’re not quite ready
@@ -1080,7 +1089,7 @@ to upstream that code yet though.</p>
<div class="section" id="nvlink2">
<h2>NVLINK2<a class="headerlink" href="#nvlink2" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>npu2: Allow ATSD for LPAR other than 0</p>
+<li><p class="first">npu2: Allow ATSD for LPAR other than 0</p>
<p>Each XTS MMIO ATSD# register is accompanied by another register -
XTS MMIO ATSD0 LPARID# - which controls LPID filtering for ATSD
transactions.</p>
@@ -1091,7 +1100,7 @@ the LPAR. The link number is used for an ATSD index.</p>
<p>ATSD6&amp;7 stay mapped to the host (LPAR=0) all the time which seems to be
acceptable price for the simplicity.</p>
</li>
-<li><p>npu2: Add XTS_BDF_MAP wildcard refcount</p>
+<li><p class="first">npu2: Add XTS_BDF_MAP wildcard refcount</p>
<p>Currently PID wildcard is programmed into the NPU once and never cleared
up. This works for the bare metal as MSR does not change while the host
OS is running.</p>
@@ -1128,13 +1137,13 @@ a bare metal). To enable snarfing, the user needs to run:</p>
<p>and reboot the host system.</p>
</div></blockquote>
<ul class="simple">
-<li><p>hw/npu2: Show name of opencapi error interrupts</p></li>
+<li>hw/npu2: Show name of opencapi error interrupts</li>
</ul>
</div>
<div class="section" id="debugging-and-simulation">
<h2>Debugging and simulation<a class="headerlink" href="#debugging-and-simulation" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>external/mambo: Error out if kernel is too large</p>
+<li><p class="first">external/mambo: Error out if kernel is too large</p>
<p>If you’re trying to boot a gigantic kernel in mambo (which you can
reproduce by building a kernel with CONFIG_MODULES=n) you’ll get
misleading errors like:</p>
@@ -1153,14 +1162,14 @@ Making PAYLOAD_ADDR further back is one way to do this but if there’s a
less gross way to generally work around this very niche problem, I can
suggest that instead.</p>
</li>
-<li><p>external/mambo: Populate kernel-base-address in the DT</p>
+<li><p class="first">external/mambo: Populate kernel-base-address in the DT</p>
<p>skiboot.tcl defines PAYLOAD_ADDR as 0x20000000, which is the default in
skiboot. This is also the default in skiboot unless kernel-base-address
is set in the device tree.</p>
<p>If you change PAYLOAD_ADDR to something else for mambo, skiboot won’t
see it because it doesn’t set that DT property, so fix it so that it does.</p>
</li>
-<li><p>external/mambo: allow CPU targeting for most debug utils</p>
+<li><p class="first">external/mambo: allow CPU targeting for most debug utils</p>
<p>Debug util functions target CPU 0:0:0 by default Some can be
overidden explicitly per invocation, and others can’t at all.
Even for those that can be overidden, it is a pain to type
@@ -1169,20 +1178,20 @@ them out when you’re debugging a particular thread.</p>
target to be changed. Wire that up that default to all other utils.
Provide a new â€S’ step command which only steps the target CPU.</p>
</li>
-<li><p>qemu: bt device isn’t always hanging off /</p>
+<li><p class="first">qemu: bt device isn’t always hanging off /</p>
<p>Just use the normal for_each_compatible instead.</p>
<p>Otherwise in the qemu model as executed by op-test,
we wouldn’t go down the astbmc_init() path, thus not having flash.</p>
</li>
-<li><p>devicetree: Add p9-simics.dts</p>
+<li><p class="first">devicetree: Add p9-simics.dts</p>
<p>Add a p9-based devicetree that’s suitable for use with Simics.</p>
</li>
-<li><p>devicetree: Move power9-phb4.dts</p>
+<li><p class="first">devicetree: Move power9-phb4.dts</p>
<p>Clean up the formatting of power9-phb4.dts and move it to
external/devicetree/p9.dts. This sets us up to include it as the basis
for other trees.</p>
</li>
-<li><p>devicetree: Add nx node to power9-phb4.dts</p>
+<li><p class="first">devicetree: Add nx node to power9-phb4.dts</p>
<p>A (non-qemu) p9 without an nx node will assert in p9_darn_init():</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>dt_for_each_compatible(dt_root, nx, &quot;ibm,power9-nx&quot;)
break;
@@ -1195,17 +1204,17 @@ if (!nx) {
</div>
<p>Since NX is this essential, add it to the device tree.</p>
</li>
-<li><p>devicetree: Fix typo in power9-phb4.dts</p>
+<li><p class="first">devicetree: Fix typo in power9-phb4.dts</p>
<p>Change “impi” to “ipmi”.</p>
</li>
-<li><p>devicetree: Fix syntax error in power9-phb4.dts</p>
+<li><p class="first">devicetree: Fix syntax error in power9-phb4.dts</p>
<p>Remove the extra space causing this:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Error</span><span class="p">:</span> <span class="n">power9</span><span class="o">-</span><span class="n">phb4</span><span class="o">.</span><span class="n">dts</span><span class="p">:</span><span class="mf">156.15</span><span class="o">-</span><span class="mi">16</span> <span class="n">syntax</span> <span class="n">error</span>
<span class="n">FATAL</span> <span class="n">ERROR</span><span class="p">:</span> <span class="n">Unable</span> <span class="n">to</span> <span class="n">parse</span> <span class="nb">input</span> <span class="n">tree</span>
</pre></div>
</div>
</li>
-<li><p>core/init: enable machine check on secondaries</p>
+<li><p class="first">core/init: enable machine check on secondaries</p>
<p>Secondary CPUs currently run with MSR[ME]=0 during boot, whih means
if they take a machine check, the system will checkstop.</p>
<p>Enable ME where possible and allow them to print registers.</p>
@@ -1215,11 +1224,11 @@ if they take a machine check, the system will checkstop.</p>
<div class="section" id="utilities">
<h2>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>pflash: Don’t try update RO ToC</p>
+<li><p class="first">pflash: Don’t try update RO ToC</p>
<p>In the future it’s likely the ToC will be marked as read-only. Don’t
error out by assuming its writable.</p>
</li>
-<li><p>pflash: Support encoding/decoding ECC’d partitions</p>
+<li><p class="first">pflash: Support encoding/decoding ECC’d partitions</p>
<p>With the new –ecc option, pflash can add/remove ECC when
reading/writing flash partitions protected by ECC.</p>
<p>This is <em>not</em> flawless with current PNORs out in the wild though, as
@@ -1234,14 +1243,13 @@ out” to support reading the “valid” data from existing PNOR images.</p>
</ul>
<p>Since v6.3-rc2:</p>
<ul class="simple">
-<li><p>opal-prd: Fix memory leak in is-fsp-system check</p></li>
-<li><p>opal-prd: Check malloc return value</p></li>
+<li>opal-prd: Fix memory leak in is-fsp-system check</li>
+<li>opal-prd: Check malloc return value</li>
</ul>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -1290,15 +1298,17 @@ out” to support reading the “valid” data from existing PNOR images.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -1315,15 +1325,14 @@ out” to support reading the “valid” data from existing PNOR images.</p>
<li class="right" >
<a href="skiboot-6.2.4.html" title="skiboot-6.2.4"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.4-rc1.html b/doc/release-notes/skiboot-6.4-rc1.html
index 61d05e2..236dd7d 100644
--- a/doc/release-notes/skiboot-6.4-rc1.html
+++ b/doc/release-notes/skiboot-6.4-rc1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.4-rc1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.4-rc1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.4.html" title="skiboot-6.4"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.4-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -59,14 +60,14 @@ stable releases).</p>
<div class="section" id="new-features">
<span id="skiboot-6-4-rc1-new-features"></span><h2>New features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>platforms/nicole: Add new platform</p>
+<li><p class="first">platforms/nicole: Add new platform</p>
<p>The platform is a new platform from YADRO, it’s a storage controller for
TATLIN server. It’s Based on IBM Romulus reference design (POWER9).</p>
</li>
-<li><p>platform/zz: Add new platform type</p>
+<li><p class="first">platform/zz: Add new platform type</p>
<p>We have new platform type under ZZ. Lets add them. With this fix</p>
</li>
-<li><p>nvram: Flag dangerous NVRAM options</p>
+<li><p class="first">nvram: Flag dangerous NVRAM options</p>
<p>Most nvram options used by skiboot are just for debug or testing for
regressions. They should never be used long term.</p>
<p>We’ve hit a number of issues in testing and the field where nvram
@@ -75,7 +76,7 @@ after, resulting in crashes or real bugs being masked.</p>
<p>This patch marks most nvram options used by skiboot as dangerous and
prints a chicken to remind users of the problem.</p>
</li>
-<li><p>hw/phb3: Add verbose EEH output</p>
+<li><p class="first">hw/phb3: Add verbose EEH output</p>
<p>Add support for the pci-eeh-verbose NVRAM flag on PHB3. We’ve had this
on PHB4 since forever and it has proven very useful when debugging EEH
issues. When testing changes to the Linux kernel’s EEH implementation
@@ -85,21 +86,21 @@ XMON.</p>
<p>Note that unlike PHB4 we do not enable verbose mode by default. The
nvram option must be used to explicitly enable it.</p>
</li>
-<li><p>Experimental support for building without FSP code</p>
+<li><p class="first">Experimental support for building without FSP code</p>
<p>Now, with CONFIG_FSP=0/1 we have:</p>
<ul class="simple">
-<li><p>1.6M/1.4M skiboot.lid</p></li>
-<li><p>323K/375K skiboot.lid.xz</p></li>
+<li>1.6M/1.4M skiboot.lid</li>
+<li>323K/375K skiboot.lid.xz</li>
</ul>
</li>
-<li><p>doc: travis-ci deploy docs!</p>
+<li><p class="first">doc: travis-ci deploy docs!</p>
<p>Documentation is now automatically deployed if you configure Travis CI
appropriately (we have done this for the open-power branch of skiboot)</p>
</li>
-<li><p>Big OPAL API Documentation improvement</p>
+<li><p class="first">Big OPAL API Documentation improvement</p>
<p>A lot more OPAL API calls are now (at least somewhat) documented.</p>
</li>
-<li><p>opal/hmi: Report NPU2 checkstop reason</p>
+<li><p class="first">opal/hmi: Report NPU2 checkstop reason</p>
<p>The NPU2 is currently not passing any information to linux to explain
the cause of an HMI. NPU2 has three Fault Isolation Registers and over
30 of those FIR bits are configured to raise an HMI by default. We
@@ -107,29 +108,29 @@ won’t be able to fit all possible state in the 32-bit xstop_reason
field of the HMI event, but we can still try to encode up to 4 HMI
reasons.</p>
</li>
-<li><p>opal-msg: Enhance opal-get-msg API</p>
+<li><p class="first">opal-msg: Enhance opal-get-msg API</p>
<p>Linux uses <a class="reference internal" href="../opal-api/opal-get-msg-85.html#opal-get-msg"><span class="std std-ref">OPAL_GET_MSG</span></a> API to get OPAL messages. This interface
supports upto 8 params (64 bytes). We have a requirement to send bigger data to
Linux. This patch enhances OPAL to send bigger data to Linux.</p>
<ul class="simple">
-<li><p>Linux will use “opal-msg-size” device tree property to allocate memory for
-OPAL messages (previous patch increased “opal-msg-size” to 64K).</p></li>
-<li><p>Replaced <cite>reserved</cite> field in “struct opal_msg” with <cite>size</cite>. So that Linux
-side opal_get_msg user can detect actual data size.</p></li>
-<li><p>If buffer size &lt; actual message size, then opal_get_msg will copy partial
-data and return OPAL_PARTIAL to Linux.</p></li>
-<li><p>Add new variable “extended” to “opal_msg_entry” structure to keep track
+<li>Linux will use “opal-msg-size” device tree property to allocate memory for
+OPAL messages (previous patch increased “opal-msg-size” to 64K).</li>
+<li>Replaced <cite>reserved</cite> field in “struct opal_msg” with <cite>size</cite>. So that Linux
+side opal_get_msg user can detect actual data size.</li>
+<li>If buffer size &lt; actual message size, then opal_get_msg will copy partial
+data and return OPAL_PARTIAL to Linux.</li>
+<li>Add new variable “extended” to “opal_msg_entry” structure to keep track
of messages that has more than 64byte data. We will allocate separate
memory for these messages and once kernel consumes message we will
-release that memory.</p></li>
+release that memory.</li>
</ul>
</li>
-<li><p>core/opal: Increase opal-msg-size size</p>
+<li><p class="first">core/opal: Increase opal-msg-size size</p>
<p>Kernel will use <cite>opal-msg-size</cite> property to allocate memory for opal_msg.
We want to send bigger data from OPAL to kernel. Hence increase
opal-msg-size to 64K.</p>
</li>
-<li><p>hw/npu2-opencapi: Add initial support for allocating OpenCAPI LPC memory</p>
+<li><p class="first">hw/npu2-opencapi: Add initial support for allocating OpenCAPI LPC memory</p>
<p>Lowest Point of Coherency (LPC) memory allows the host to access memory on
an OpenCAPI device.</p>
<p>Define 2 OPAL calls, <a class="reference internal" href="../opal-api/opal-npu2-opencapi-159-160-161-171-172.html#opal-npu-mem-alloc"><span class="std std-ref">OPAL_NPU_MEM_ALLOC</span></a> and <a class="reference internal" href="../opal-api/opal-npu2-opencapi-159-160-161-171-172.html#opal-npu-mem-release"><span class="std std-ref">OPAL_NPU_MEM_RELEASE</span></a>, for
@@ -140,7 +141,7 @@ are restricted to a single range of 4TB, on a single OpenCAPI device per
chip. In future, we’ll use some chip ID extension magic to give us more
space, and some sort of allocator to assign ranges to more than one device.</p>
</li>
-<li><p>core/fast-reboot: Add im-feeling-lucky option</p>
+<li><p class="first">core/fast-reboot: Add im-feeling-lucky option</p>
<p>Fast reboot gets disabled for a number of reasons e.g. the availability
of nvlink. However this doesn’t actually affect the ability to perform fast
reboot if no nvlink device is actually present.</p>
@@ -148,7 +149,7 @@ reboot if no nvlink device is actually present.</p>
“im-feeling-lucky” then perform the fast-reboot irrespective of if it’s
previously been disabled.</p>
</li>
-<li><p>platforms/astbmc: Check for SBE validation step</p>
+<li><p class="first">platforms/astbmc: Check for SBE validation step</p>
<p>On some POWER8 astbmc systems an update to the SBE requires pausing at
runtime to ensure integrity of the SBE. If this is required the BMC will
set a chassis boot option IPMI flag using the OEM parameter 0x62. If
@@ -159,16 +160,16 @@ it in a bad state and unable to be used for timer operations. To
workaround this the flag is checked as soon as possible (ie. when IPMI
and the console are set up), and once complete the system is rebooted.</p>
</li>
-<li><p>Add P9 DIO interrupt support</p>
+<li><p class="first">Add P9 DIO interrupt support</p>
<p>On P9 there are GPIO port 0, 1, 2 for GPIO interrupt, and DIO interrupt
is used to handle the interrupts.</p>
<p>Add support to the DIO interrupts:</p>
<ol class="arabic simple">
-<li><p>Add dio_interrupt_register(chip, port, callback) to register the
-interrupt</p></li>
-<li><p>Add dio_interrupt_deregister(chip, port, callback) to deregister;</p></li>
-<li><p>When interrupt on the port occurs, callback is invoked, and the
-interrupt status is cleared.</p></li>
+<li>Add dio_interrupt_register(chip, port, callback) to register the
+interrupt</li>
+<li>Add dio_interrupt_deregister(chip, port, callback) to deregister;</li>
+<li>When interrupt on the port occurs, callback is invoked, and the
+interrupt status is cleared.</li>
</ol>
</li>
</ul>
@@ -176,7 +177,7 @@ interrupt status is cleared.</p></li>
<div class="section" id="removed-features">
<h2>Removed features<a class="headerlink" href="#removed-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>pci/iov: Remove skiboot VF tracking</p>
+<li><p class="first">pci/iov: Remove skiboot VF tracking</p>
<p>This feature was added a few years ago in response to a request to make
the MaxPayloadSize (MPS) field of a Virtual Function match the MPS of the
Physical Function that hosts it.</p>
@@ -192,7 +193,7 @@ enabled and then disabled prior to rebooting. This patch fixes the bug by
removing the code entirely. This patch has no impact on SR-IOV support on
the host operating system.</p>
</li>
-<li><p>Remove POWER7 and POWER7+ support</p>
+<li><p class="first">Remove POWER7 and POWER7+ support</p>
<p>It’s been a good long while since either OPAL POWER7 user touched a
machine, and even longer since they’d have been okay using an old
version rather than tracking master.</p>
@@ -200,28 +201,28 @@ version rather than tracking master.</p>
long time, so it’s pretty safe to assume that it’s very much bitrotted.</p>
<p>It also saves a whole 14kb of xz compressed payload space.</p>
</li>
-<li><p>Remove remnants of <a class="reference internal" href="../opal-api/index.html#opal-pci-get-phb-diag-data"><span class="std std-ref">OPAL_PCI_GET_PHB_DIAG_DATA</span></a></p>
+<li><p class="first">Remove remnants of <a class="reference internal" href="../opal-api/index.html#opal-pci-get-phb-diag-data"><span class="std std-ref">OPAL_PCI_GET_PHB_DIAG_DATA</span></a></p>
<p>Never present in a public OPAL release, and only kernels prior to 3.11
would ever attempt to call it.</p>
</li>
-<li><p>Remove unused <a class="reference internal" href="../opal-api/index.html#opal-get-xive-source"><span class="std std-ref">OPAL_GET_XIVE_SOURCE</span></a></p>
+<li><p class="first">Remove unused <a class="reference internal" href="../opal-api/index.html#opal-get-xive-source"><span class="std std-ref">OPAL_GET_XIVE_SOURCE</span></a></p>
<p>While this call was technically implemented by skiboot, no code has ever called
it, and it was only ever implemented for the p7ioc-phb back-end (i.e. POWER7).
Since this call was unused in Linux, and that POWER7 with OPAL was only ever
available internally, so it should be safe to remove the call.</p>
</li>
-<li><p>Remove unused <a class="reference internal" href="../opal-api/index.html#opal-pci-get-xive-reissue"><span class="std std-ref">OPAL_PCI_GET_XIVE_REISSUE</span></a> and <a class="reference internal" href="../opal-api/index.html#opal-pci-set-xive-reissue"><span class="std std-ref">OPAL_PCI_SET_XIVE_REISSUE</span></a></p>
+<li><p class="first">Remove unused <a class="reference internal" href="../opal-api/index.html#opal-pci-get-xive-reissue"><span class="std std-ref">OPAL_PCI_GET_XIVE_REISSUE</span></a> and <a class="reference internal" href="../opal-api/index.html#opal-pci-set-xive-reissue"><span class="std std-ref">OPAL_PCI_SET_XIVE_REISSUE</span></a></p>
<p>These seem to be remnants of one of the OPAL incarnations prior to
OPALv3. These calls have never been implemented in skiboot, and never
used by an upstream kernel (nor a PowerKVM kernel).</p>
<p>It’s rather safe to just document them as never existing.</p>
</li>
-<li><p>Remove never implemented <a class="reference internal" href="../opal-api/index.html#opal-pci-set-phb-table-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TABLE_MEMORY</span></a> and document why</p>
+<li><p class="first">Remove never implemented <a class="reference internal" href="../opal-api/index.html#opal-pci-set-phb-table-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TABLE_MEMORY</span></a> and document why</p>
<p>Not ever used by upstream linux or PowerKVM tree. Never implemented in
skiboot (not even in ancient internal only tree).</p>
<p>So, it’s incredibly safe to remove.</p>
</li>
-<li><p>Remove unused <a class="reference internal" href="../opal-api/opal-pci-eeh-freeze-status-23.html#opal-pci-eeh-freeze-status2"><span class="std std-ref">OPAL_PCI_EEH_FREEZE_STATUS2</span></a></p>
+<li><p class="first">Remove unused <a class="reference internal" href="../opal-api/opal-pci-eeh-freeze-status-23.html#opal-pci-eeh-freeze-status2"><span class="std std-ref">OPAL_PCI_EEH_FREEZE_STATUS2</span></a></p>
<p>This call was introduced all the way back at the end of 2012, before
OPAL was public. The #define for the OPAL call was introduced to the
Linux kernel in June 2013, and the call was never used in any kernel
@@ -229,15 +230,15 @@ tree ever (as far as we can find).</p>
<p>Thus, it’s quite safe to remove this completely unused and completely
untested OPAL call.</p>
</li>
-<li><p>Document the long removed <a class="reference internal" href="../opal-api/index.html#opal-register-opal-exception-handler"><span class="std std-ref">OPAL_REGISTER_OPAL_EXCEPTION_HANDLER</span></a> call</p>
+<li><p class="first">Document the long removed <a class="reference internal" href="../opal-api/index.html#opal-register-opal-exception-handler"><span class="std std-ref">OPAL_REGISTER_OPAL_EXCEPTION_HANDLER</span></a> call</p>
<p>I’m pretty sure this was removed in one of our first ever service packs.</p>
<p>Fixes: <a class="reference external" href="https://github.com/open-power/skiboot/issues/98">https://github.com/open-power/skiboot/issues/98</a></p>
</li>
-<li><p>Remove last remnants of <a class="reference internal" href="../opal-api/index.html#opal-pci-set-phb-tce-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TCE_MEMORY</span></a> and <a class="reference internal" href="../opal-api/index.html#opal-pci-set-hub-tce-memory"><span class="std std-ref">OPAL_PCI_SET_HUB_TCE_MEMORY</span></a></p>
+<li><p class="first">Remove last remnants of <a class="reference internal" href="../opal-api/index.html#opal-pci-set-phb-tce-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TCE_MEMORY</span></a> and <a class="reference internal" href="../opal-api/index.html#opal-pci-set-hub-tce-memory"><span class="std std-ref">OPAL_PCI_SET_HUB_TCE_MEMORY</span></a></p>
<p>Since we have not supported p5ioc systems since skiboot 5.2, it’s pretty
safe to just wholesale remove these OPAL calls now.</p>
</li>
-<li><p>Remove remnants of <a class="reference internal" href="../opal-api/index.html#opal-pci-set-phb-tce-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TCE_MEMORY</span></a></p>
+<li><p class="first">Remove remnants of <a class="reference internal" href="../opal-api/index.html#opal-pci-set-phb-tce-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TCE_MEMORY</span></a></p>
<p>There’s no reason we need remnants hanging around that aren’t used, so
remove them and save a handful of bytes at runtime.</p>
<p>Simultaneously, document the OPAL call removal.</p>
@@ -247,16 +248,16 @@ remove them and save a handful of bytes at runtime.</p>
<div class="section" id="secure-and-trusted-boot">
<h2>Secure and Trusted Boot<a class="headerlink" href="#secure-and-trusted-boot" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>trustedboot: Change PCR and event_type for the skiboot events</p>
+<li><p class="first">trustedboot: Change PCR and event_type for the skiboot events</p>
<p>The existing skiboot events are being logged as EV_ACTION, however, the
TCG PC Client spec says that EV_ACTION events should have one of the
pre-defined strings in the event field recorded in the event log. For
instance:</p>
<ul class="simple">
-<li><p>“Calling Ready to Boot”,</p></li>
-<li><p>“Entering ROM Based Setup”,</p></li>
-<li><p>“User Password Entered”, and</p></li>
-<li><p>“Start Option ROM Scan.</p></li>
+<li>“Calling Ready to Boot”,</li>
+<li>“Entering ROM Based Setup”,</li>
+<li>“User Password Entered”, and</li>
+<li>“Start Option ROM Scan.</li>
</ul>
<p>None of the EV_ACTION pre-defined strings are applicable to the existing
skiboot events. Based on recent discussions with other POWER teams, this
@@ -275,9 +276,9 @@ to PCR[4,5,6] and logged as EV_COMPACT_HASH.</p>
EV_COMPACT_HASH seems to be the most adequate one due to its
flexibility. According to the TCG PC Client spec:</p>
<ul class="simple">
-<li><p>May be used for any PCR except 0, 1, 2 and 3.</p></li>
-<li><p>The event field may be informative or may be hashed to generate the
-digest field, depending on the component recording the event.</p></li>
+<li>May be used for any PCR except 0, 1, 2 and 3.</li>
+<li>The event field may be informative or may be hashed to generate the
+digest field, depending on the component recording the event.</li>
</ul>
<p>Additionally, the PCR[4,5] seem to be the most adequate PCRs. They would
be used for skiboot and some skiroot events. According to the TCG PC
@@ -286,10 +287,10 @@ transition between the pre-OS and OS-present state of the platform.
PCR[4], along with PCR[5], identifies the initial OS loader.</p>
<p>In summary, for skiboot events:</p>
<ul class="simple">
-<li><p>Events that represents data should be extended to PCR 4.</p></li>
-<li><p>Events that represents config should be extended to PCR 5.</p></li>
-<li><p>For the lack of an event type that fits the specific purpose,
-both data and config events should be logged as EV_COMPACT_HASH.</p></li>
+<li>Events that represents data should be extended to PCR 4.</li>
+<li>Events that represents config should be extended to PCR 5.</li>
+<li>For the lack of an event type that fits the specific purpose,
+both data and config events should be logged as EV_COMPACT_HASH.</li>
</ul>
</li>
</ul>
@@ -297,7 +298,7 @@ both data and config events should be logged as EV_COMPACT_HASH.</p></li>
<div class="section" id="sensors">
<h2>Sensors<a class="headerlink" href="#sensors" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>occ-sensors: Check if OCC is reset while reading inband sensors</p>
+<li><p class="first">occ-sensors: Check if OCC is reset while reading inband sensors</p>
<p>OCC may not be able to mark the sensor buffer as invalid while going
down RESET. If OCC never comes back we will continue to read the stale
sensor data. So verify if OCC is reset while reading the sensor values
@@ -308,7 +309,7 @@ and propagate the appropriate error.</p>
<div class="section" id="ipmi">
<h2>IPMI<a class="headerlink" href="#ipmi" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>ipmi: ensure forward progress on ipmi_queue_msg_sync()</p>
+<li><p class="first">ipmi: ensure forward progress on ipmi_queue_msg_sync()</p>
<p>BT responses are handled using a timer doing the polling. To hope to
get an answer to an IPMI synchronous message, the timer needs to run.</p>
<p>We can’t just check all timers though as there may be a timer that
@@ -325,7 +326,7 @@ flash resource with the IPMI HIOMAP backend.</p>
<div class="section" id="npu2">
<h2>NPU2<a class="headerlink" href="#npu2" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>npu2: Increase timeout for L2/L3 cache purging</p>
+<li><p class="first">npu2: Increase timeout for L2/L3 cache purging</p>
<p>On NVLink2 bridge reset, we purge all L2/L3 caches in the system.
This is an asynchronous operation, we have a 2ms timeout here. There are
reports that this is not enough and “PURGE L3 on core xxx timed out”
@@ -334,11 +335,11 @@ messages appear (for the reference: on the test setup this takes
<p>This defines the timeout as a macro and changes this from 2ms to 20ms.</p>
<p>This adds a tracepoint to tell how long it took to purge all the caches.</p>
</li>
-<li><p>npu2: Purge cache when resetting a GPU</p>
+<li><p class="first">npu2: Purge cache when resetting a GPU</p>
<p>After putting all a GPU’s links in reset, do a cache purge in case we
have CPU cache lines belonging to the now-unaccessible GPU memory.</p>
</li>
-<li><p>npu2-opencapi: Mask 2 XSL errors</p>
+<li><p class="first">npu2-opencapi: Mask 2 XSL errors</p>
<p>Commit f8dfd699f584 (“hw/npu2: Setup an error interrupt on some
opencapi FIRs”) converted some FIR bits default action from system
checkstop to raising an error interrupt. For 2 XSL error events that
@@ -351,7 +352,7 @@ those 2 XSL errors. The error will also be picked up by the OTL logic,
which is per link. So we’ll still get an error interrupt, but only on
the relevant link, and the other opencapi adapter can stay functional.</p>
</li>
-<li><p>npu2: Clear fence state for a brick being reset</p>
+<li><p class="first">npu2: Clear fence state for a brick being reset</p>
<p>Resetting a GPU before resetting an NVLink leads to occasional HMIs
which fence some bricks and prevent the “reset_ntl” procedure from
succeeding at the “reset_ntl_release” step - the host system requires
@@ -359,11 +360,11 @@ reboot; there may be other cases like this as well.</p>
<p>This adds clearing of the fence bit in NPU.MISC.FENCE_STATE for
the NVLink which we are about to reset.</p>
</li>
-<li><p>npu2: Fix clearing the FIR bits</p>
+<li><p class="first">npu2: Fix clearing the FIR bits</p>
<p>FIR registers are SCOM-only so they cannot be accesses with the indirect
write, and yet we use SCOM-based addresses for these; fix this.</p>
</li>
-<li><p>npu2: Reset NVLinks when resetting a GPU</p>
+<li><p class="first">npu2: Reset NVLinks when resetting a GPU</p>
<p>Resetting a V100 GPU brings its NVLinks down and if an NPU tries using
those, an HMI occurs. We were lucky not to observe this as the bare metal
does not normally reset a GPU and when passed through, GPUs are usually
@@ -374,7 +375,7 @@ brings HMIs.</p>
so when the host system issues secondary bus reset to the slot, it resets
associated NVLinks.</p>
</li>
-<li><p>npu2: Reset PID wildcard and refcounter when mapped to LPID</p>
+<li><p class="first">npu2: Reset PID wildcard and refcounter when mapped to LPID</p>
<p>Since 105d80f85b “npu2: Use unfiltered mode in XTS tables” we do not
register every PID in the XTS table so the table has one entry per LPID.
Then we added a reference counter to keep track of the entry use when
@@ -393,7 +394,7 @@ assigned to LPID and we cannot rely on the kernel to clean that up.</p>
<div class="section" id="phb4">
<h2>PHB4<a class="headerlink" href="#phb4" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>hw/phb4: Make phb4_training_trace() more general</p>
+<li><p class="first">hw/phb4: Make phb4_training_trace() more general</p>
<p>phb4_training_trace() is used to monitor the Link Training Status
State Machine (LTSSM) of the PHB’s data link layer. Currently it is only
used to observe the LTSSM while bringing up the link, but sometimes it’s
@@ -402,7 +403,7 @@ secondary bus reset). This patch renames it to phb4_link_trace() and
allows the target LTSSM state and a flexible timeout to help in these
situations.</p>
</li>
-<li><p>hw/phb4: Make pci-tracing print at PR_NOTICE</p>
+<li><p class="first">hw/phb4: Make pci-tracing print at PR_NOTICE</p>
<p>When pci-tracing is enabled we print each trace status message and the
final trace status at PR_ERROR. The final status messages are similar to
those printed when we fail to train in the non-pci-tracing path and this
@@ -411,7 +412,7 @@ has resulted in spurious op-test failures.</p>
they’re not accidently interpreted as actual error messages. PR_NOTICE
messages are still printed to the console during boot.</p>
</li>
-<li><p>hw/phb4: Use read/write_reg in assert_perst</p>
+<li><p class="first">hw/phb4: Use read/write_reg in assert_perst</p>
<p>While the PHB is fenced we can’t use the MMIO interface to access PHB
registers. While processing a complete reset we inject a PHB fence to
isolate the PHB from the rest of the system because the PHB won’t
@@ -427,7 +428,7 @@ when the system was fast-reset.</p>
<p>This patch fixes the problem by replacing the raw {in|out}_be64()
accessors with the phb4_{read|write}_reg() functions.</p>
</li>
-<li><p>hw/phb4: Assert Link Disable bit after ETU init</p>
+<li><p class="first">hw/phb4: Assert Link Disable bit after ETU init</p>
<p>The cursed RAID card in ozrom1 has a bug where it ignores PERST being
asserted. The PCIe Base spec is a little vague about what happens
while PERST is asserted, but it does clearly specify that when
@@ -521,22 +522,23 @@ seems to avoid the Completion Timeout. With the patch applied we get:</p>
<div class="section" id="simulators">
<h2>Simulators<a class="headerlink" href="#simulators" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>external/mambo: Bump default POWER9 to Nimbus DD2.3</p></li>
-<li><p>external/mambo: fix tcl startup code for mambo bogus net (repost)</p>
+<li><p class="first">external/mambo: Bump default POWER9 to Nimbus DD2.3</p>
+</li>
+<li><p class="first">external/mambo: fix tcl startup code for mambo bogus net (repost)</p>
<p>This fixes a couple issues with external/mambo/skiboot.tcl so I can use the
mambo bogus net.</p>
<ul class="simple">
-<li><p>newer distros (ubuntu 18.04) allow tap device to have a user specified
-name instead of just tapN so we need to pass in a name not a number.</p></li>
-<li><p>need some kind of default for net_mac, and need the mconfig for it
-to be set from an env var.</p></li>
+<li>newer distros (ubuntu 18.04) allow tap device to have a user specified
+name instead of just tapN so we need to pass in a name not a number.</li>
+<li>need some kind of default for net_mac, and need the mconfig for it
+to be set from an env var.</li>
</ul>
</li>
-<li><p>skiboot.tcl: Add option to wait for GDB server connection</p>
+<li><p class="first">skiboot.tcl: Add option to wait for GDB server connection</p>
<p>Add an environment variable which makes Mambo wait for a connection
from gdb prior to starting simulation.</p>
</li>
-<li><p>mambo: Integrate addr2line into backtrace command</p>
+<li><p class="first">mambo: Integrate addr2line into backtrace command</p>
<p>Gives nice output like this:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">systemsim</span> <span class="o">%</span> <span class="n">bt</span>
<span class="n">pc</span><span class="p">:</span> <span class="mh">0xC0000000002BF3D4</span> <span class="n">_savegpr0_28</span><span class="o">+</span><span class="mh">0x0</span>
@@ -555,7 +557,7 @@ from gdb prior to starting simulation.</p>
</pre></div>
</div>
</li>
-<li><p>mambo: Add addr2func for symbol resolution</p>
+<li><p class="first">mambo: Add addr2func for symbol resolution</p>
<p>If you supply a VMLINUX_MAP/SKIBOOT_MAP/USER_MAP addr2func can guess
at your symbol name. i.e.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">systemsim</span> <span class="o">%</span> <span class="n">p</span> <span class="n">pc</span>
@@ -565,36 +567,36 @@ at your symbol name. i.e.</p>
</pre></div>
</div>
</li>
-<li><p>lpc-port80h: Don’t write port 80h when running under Simics</p>
+<li><p class="first">lpc-port80h: Don’t write port 80h when running under Simics</p>
<p>Simics doesn’t model LPC port 80h. Writing to it terminates the
simulation due to an invalid LPC memory access. This patch adds a
check to ensure port 80h isn’t accessed if we are running under
Simics.</p>
</li>
-<li><p>device-tree: speed up fdt building on slow simulators</p>
+<li><p class="first">device-tree: speed up fdt building on slow simulators</p>
<p>Trade size for speed and avoid de-duplicating strings in the fdt.
This costs about 2kB in fdt size, and saves about 8 million instructions
(almost half of all instructions) booting skiboot in mambo.</p>
</li>
-<li><p>fast-reboot:: skip read-only memory checksum for slow simulators</p>
+<li><p class="first">fast-reboot:: skip read-only memory checksum for slow simulators</p>
<p>Skip the fast reboot checksum, which costs about 4 million cycles
booting skiboot in mambo.</p>
</li>
-<li><p>nx: remove check on the “qemu, powernv” property</p>
+<li><p class="first">nx: remove check on the “qemu, powernv” property</p>
<p>commit 95f7b3b9698b (“nx: Don’t abort on missing NX when using a QEMU
machine”) introduced a check on the property “qemu,powernv” to skip NX
initialization when running under a QEMU machine.</p>
<p>The QEMU platforms now expose a QUIRK_NO_RNG in the chip. Testing the
“qemu,powernv” property is not necessary anymore.</p>
</li>
-<li><p>plat/qemu: add a POWER8 and POWER9 platform</p>
+<li><p class="first">plat/qemu: add a POWER8 and POWER9 platform</p>
<p>These new QEMU platforms have characteristics closer to real OpenPOWER
systems that we use today and define a different BMC depending on the
CPU type. New platform properties are introduced for each,
“qemu,powernv8”, “qemu,powernv9” and these should be compatible with
existing QEMUs which only expose the “qemu,powernv” property</p>
</li>
-<li><p>libc/string: speed up common string functions</p>
+<li><p class="first">libc/string: speed up common string functions</p>
<p>Use compiler builtins for the string functions, and compile the
libc/string/ directory with -O2.</p>
<p>This reduces instructions booting skiboot in mambo by 2.9 million in
@@ -603,7 +605,7 @@ increase.</p>
<p>This can result in the compiler warning more cases of string function
problems.</p>
</li>
-<li><p>external/mambo: Add an option to exit Mambo when the system is shutdown</p>
+<li><p class="first">external/mambo: Add an option to exit Mambo when the system is shutdown</p>
<p>Automatically exiting can be convenient for scripting. Will also exit
due to a HW crash (eg. unhandled exception).</p>
</li>
@@ -612,7 +614,7 @@ due to a HW crash (eg. unhandled exception).</p>
<div class="section" id="vesnin-platform">
<h2>VESNIN platform<a class="headerlink" href="#vesnin-platform" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>platforms/vesnin: PCI inventory via IPMI OEM</p>
+<li><p class="first">platforms/vesnin: PCI inventory via IPMI OEM</p>
<p>Replace raw protocol with OEM message supported by OpenBMC’s IPMI
plugins.</p>
<p>BMC-side implementation (IPMI plug-in):
@@ -623,7 +625,7 @@ plugins.</p>
<div class="section" id="utilities">
<h2>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>opal-gard: Account for ECC size when clearing partition</p>
+<li><p class="first">opal-gard: Account for ECC size when clearing partition</p>
<p>When â€opal-gard clear all’ is run, it works by erasing the GUARD then
using blockevel_smart_write() to write nothing to the partition. This
second write call is needed because we rely on libflash to set the ECC
@@ -643,20 +645,21 @@ of ECC bytes required.</p>
<div class="section" id="build-and-debugging">
<h2>Build and debugging<a class="headerlink" href="#build-and-debugging" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Disable -Waddress-of-packed-member for GCC9</p>
+<li><p class="first">Disable -Waddress-of-packed-member for GCC9</p>
<p>We throw a bunch of errors in errorlog code otherwise, which we should
fix, but we don’t <em>have</em> to yet.</p>
</li>
-<li><p>Fix a lot of sparse warnings</p></li>
-<li><p>With new GCC comes larger GCOV binaries</p>
+<li><p class="first">Fix a lot of sparse warnings</p>
+</li>
+<li><p class="first">With new GCC comes larger GCOV binaries</p>
<p>So we need to change our heap size to make more room for data/bss
without having to change where the console is or have more fun moving
things about.</p>
</li>
-<li><p>Intentionally discard fini_array sections</p>
+<li><p class="first">Intentionally discard fini_array sections</p>
<p>Produced in a SKIBOOT_GCOV=1 build, and never called by skiboot.</p>
</li>
-<li><p>external/trace: Add follow option to dump_trace</p>
+<li><p class="first">external/trace: Add follow option to dump_trace</p>
<p>When monitoring traces, an option like the tail command’s â€-f’ (follow)
is very useful. This option continues to append to the output as more
data arrives. Add an â€-f’ option to allow dump_trace to operate
@@ -666,7 +669,7 @@ accompanies â€-f’. This controls how often new input will be polled. Add
a â€-s’ option that will make dump_trace sleep for N milliseconds before
checking for new input.</p>
</li>
-<li><p>external/trace: Add support for dumping multiple buffers</p>
+<li><p class="first">external/trace: Add support for dumping multiple buffers</p>
<p>dump_trace only can dump one trace buffer at a time. It would be handy
to be able to dump multiple buffers and to see the entries from these
buffers displayed in correct timestamp order. Each trace buffer is
@@ -676,7 +679,7 @@ heap does not have a â€heap_replace’ operation. We need to â€heap_pop’
then â€heap_push’ to replace the root which means rebalancing twice
instead of once.</p>
</li>
-<li><p>external/trace: mmap trace buffers in dump_trace</p>
+<li><p class="first">external/trace: mmap trace buffers in dump_trace</p>
<p>The current lseek/read approach used in dump_trace does not correctly
handle certain aspects of the buffers. It does not use the start and end
position that is part of the buffer so it will not begin from the
@@ -690,12 +693,12 @@ that are already unit tested. However this requires a kernel where the
trace buffer sysfs nodes are able to be mmaped (see
<a class="reference external" href="https://patchwork.ozlabs.org/patch/1056786/">https://patchwork.ozlabs.org/patch/1056786/</a>)</p>
</li>
-<li><p>core/trace: Export trace buffers to sysfs</p>
+<li><p class="first">core/trace: Export trace buffers to sysfs</p>
<p>Every property in the device-tree under /ibm,opal/firmware/exports has a
sysfs node created in /firmware/opal/exports. Add properties with the
physical address and size for each trace buffer so they are exported.</p>
</li>
-<li><p>core/trace: Add pir number to debug_descriptor</p>
+<li><p class="first">core/trace: Add pir number to debug_descriptor</p>
<p>The names given to the trace buffers when exported to sysfs should show
what cpu they are associated with to make it easier to understand there
output. The debug_descriptor currently stores the address and length of
@@ -704,7 +707,7 @@ tree. Extend debug_descriptor to include a cpu associated with each
trace. This will be used for creating properties in the device-tree
under /ibm,opal/firmware/exports/.</p>
</li>
-<li><p>core/trace: Change trace buffer size</p>
+<li><p class="first">core/trace: Change trace buffer size</p>
<p>We want to be able to mmap the trace buffers to be used by the
dump_trace tool. As mmaping is done in terms of pages it makes sense
that the size of the trace buffers should be page aligned. This is
@@ -713,7 +716,7 @@ beginning of the trace and the room left for an extra trace entry at the
end of the buffer. Change the size of the buffer itself so that the
entire trace buffer size will be page aligned.</p>
</li>
-<li><p>core/trace: Change buffer alignment from 4K to 64K</p>
+<li><p class="first">core/trace: Change buffer alignment from 4K to 64K</p>
<p>We want to be able to mmap the trace buffers to be used by the
dump_trace tool. This means that the trace bufferes must be page
aligned. Currently they are aligned to 4K. Most power systems have a
@@ -727,19 +730,19 @@ through sysfs. To get around this change the address that is exposed to
sysfs to be the trace_info struct. This means the lock in trace_info is
now visible too.</p>
</li>
-<li><p>external/trace: Use correct width integer byte swapping</p>
+<li><p class="first">external/trace: Use correct width integer byte swapping</p>
<p>The trace_repeat struct uses be16 for storing the number of repeats.
Currently be32_to_cpu conversion is used to display this member. This
produces an incorrect value. Use be16_to_cpu instead.</p>
</li>
-<li><p>core/trace: Put boot_tracebuf in correct location.</p>
+<li><p class="first">core/trace: Put boot_tracebuf in correct location.</p>
<p>A position for the boot_tracebuf is allocated in skiboot.lds.S.
However, without a __section attribute the boot trace buffer is not
placed in the correct location, meaning that it also will not be
correctly aligned. Add the __section attribute to ensure it will be
placed in its allocated position.</p>
</li>
-<li><p>core/lock: Add debug options to store backtrace of where lock was taken</p>
+<li><p class="first">core/lock: Add debug options to store backtrace of where lock was taken</p>
<p>Contrary to popular belief, skiboot developers are imperfect and
occasionally write locking bugs. When we exit skiboot, we check if we’re
still holding any locks, and if so, we print an error with a list of the
@@ -755,7 +758,7 @@ DEBUG=1.</p>
because the locks used by the memory allocator take up too much room in the
fake skiboot heap.)</p>
</li>
-<li><p>libfdt: upgrade to upstream dtc.git 243176c</p>
+<li><p class="first">libfdt: upgrade to upstream dtc.git 243176c</p>
<p>Upgrade libfdt/ to github.com/dgibson/dtc.git 243176c (“Fix bogus
error on rebuild”)</p>
<p>This copies dtc/libfdt/ to skiboot/libfdt/, with the only change in
@@ -765,8 +768,8 @@ or mostly eliminated by cutting out fdt version checks and unused
code, but tracking upstream is a bigger benefit at the moment.</p>
<p>This loses commits:</p>
<ul class="simple">
-<li><p>14ed2b842f61 (“libfdt: add basic sanity check to fdt_open_into”)</p></li>
-<li><p>bc7bb3d12bc1 (“sparse: fix declaration of fdt_strerror”)</p></li>
+<li>14ed2b842f61 (“libfdt: add basic sanity check to fdt_open_into”)</li>
+<li>bc7bb3d12bc1 (“sparse: fix declaration of fdt_strerror”)</li>
</ul>
<p>As well as some prehistoric similar kinds of things, which is the
punishment for us not being good downstream citizens and sending
@@ -778,7 +781,6 @@ in future.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -816,15 +818,17 @@ in future.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -841,15 +845,14 @@ in future.</p>
<li class="right" >
<a href="skiboot-6.4.html" title="skiboot-6.4"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.4-rc1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.4.html b/doc/release-notes/skiboot-6.4.html
index 1e41493..a2f017b 100644
--- a/doc/release-notes/skiboot-6.4.html
+++ b/doc/release-notes/skiboot-6.4.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.4 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.4 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.3.5.html" title="skiboot-6.3.5"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -58,7 +59,7 @@ and <a class="reference internal" href="skiboot-6.3.2.html#skiboot-6-3-2"><span
<span id="skiboot-6-4-new-features"></span><h2>New features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot v6.4-rc1:</p>
<ul>
-<li><p>npu2-opencapi: Add opencapi support on ZZ</p>
+<li><p class="first">npu2-opencapi: Add opencapi support on ZZ</p>
<p>This patch adds opencapi support on ZZ. It hard-codes the required
device tree entries for the NPU and links. The alternative was to use
HDAT, but it somehow proved too painful to do.</p>
@@ -69,14 +70,14 @@ detection will skip link training.</p>
</ul>
<p>Since skiboot v6.3:</p>
<ul>
-<li><p>platforms/nicole: Add new platform</p>
+<li><p class="first">platforms/nicole: Add new platform</p>
<p>The platform is a new platform from YADRO, it’s a storage controller for
TATLIN server. It’s Based on IBM Romulus reference design (POWER9).</p>
</li>
-<li><p>platform/zz: Add new platform type</p>
+<li><p class="first">platform/zz: Add new platform type</p>
<p>We have new platform type under ZZ. Lets add them. With this fix</p>
</li>
-<li><p>nvram: Flag dangerous NVRAM options</p>
+<li><p class="first">nvram: Flag dangerous NVRAM options</p>
<p>Most nvram options used by skiboot are just for debug or testing for
regressions. They should never be used long term.</p>
<p>We’ve hit a number of issues in testing and the field where nvram
@@ -85,7 +86,7 @@ after, resulting in crashes or real bugs being masked.</p>
<p>This patch marks most nvram options used by skiboot as dangerous and
prints a chicken to remind users of the problem.</p>
</li>
-<li><p>hw/phb3: Add verbose EEH output</p>
+<li><p class="first">hw/phb3: Add verbose EEH output</p>
<p>Add support for the pci-eeh-verbose NVRAM flag on PHB3. We’ve had this
on PHB4 since forever and it has proven very useful when debugging EEH
issues. When testing changes to the Linux kernel’s EEH implementation
@@ -95,21 +96,21 @@ XMON.</p>
<p>Note that unlike PHB4 we do not enable verbose mode by default. The
nvram option must be used to explicitly enable it.</p>
</li>
-<li><p>Experimental support for building without FSP code</p>
+<li><p class="first">Experimental support for building without FSP code</p>
<p>Now, with CONFIG_FSP=0/1 we have:</p>
<ul class="simple">
-<li><p>1.6M/1.4M skiboot.lid</p></li>
-<li><p>323K/375K skiboot.lid.xz</p></li>
+<li>1.6M/1.4M skiboot.lid</li>
+<li>323K/375K skiboot.lid.xz</li>
</ul>
</li>
-<li><p>doc: travis-ci deploy docs!</p>
+<li><p class="first">doc: travis-ci deploy docs!</p>
<p>Documentation is now automatically deployed if you configure Travis CI
appropriately (we have done this for the open-power branch of skiboot)</p>
</li>
-<li><p>Big OPAL API Documentation improvement</p>
+<li><p class="first">Big OPAL API Documentation improvement</p>
<p>A lot more OPAL API calls are now (at least somewhat) documented.</p>
</li>
-<li><p>opal/hmi: Report NPU2 checkstop reason</p>
+<li><p class="first">opal/hmi: Report NPU2 checkstop reason</p>
<p>The NPU2 is currently not passing any information to linux to explain
the cause of an HMI. NPU2 has three Fault Isolation Registers and over
30 of those FIR bits are configured to raise an HMI by default. We
@@ -117,29 +118,29 @@ won’t be able to fit all possible state in the 32-bit xstop_reason
field of the HMI event, but we can still try to encode up to 4 HMI
reasons.</p>
</li>
-<li><p>opal-msg: Enhance opal-get-msg API</p>
+<li><p class="first">opal-msg: Enhance opal-get-msg API</p>
<p>Linux uses <a class="reference internal" href="../opal-api/opal-get-msg-85.html#opal-get-msg"><span class="std std-ref">OPAL_GET_MSG</span></a> API to get OPAL messages. This interface
supports upto 8 params (64 bytes). We have a requirement to send bigger data to
Linux. This patch enhances OPAL to send bigger data to Linux.</p>
<ul class="simple">
-<li><p>Linux will use “opal-msg-size” device tree property to allocate memory for
-OPAL messages (previous patch increased “opal-msg-size” to 64K).</p></li>
-<li><p>Replaced <cite>reserved</cite> field in “struct opal_msg” with <cite>size</cite>. So that Linux
-side opal_get_msg user can detect actual data size.</p></li>
-<li><p>If buffer size &lt; actual message size, then opal_get_msg will copy partial
-data and return OPAL_PARTIAL to Linux.</p></li>
-<li><p>Add new variable “extended” to “opal_msg_entry” structure to keep track
+<li>Linux will use “opal-msg-size” device tree property to allocate memory for
+OPAL messages (previous patch increased “opal-msg-size” to 64K).</li>
+<li>Replaced <cite>reserved</cite> field in “struct opal_msg” with <cite>size</cite>. So that Linux
+side opal_get_msg user can detect actual data size.</li>
+<li>If buffer size &lt; actual message size, then opal_get_msg will copy partial
+data and return OPAL_PARTIAL to Linux.</li>
+<li>Add new variable “extended” to “opal_msg_entry” structure to keep track
of messages that has more than 64byte data. We will allocate separate
memory for these messages and once kernel consumes message we will
-release that memory.</p></li>
+release that memory.</li>
</ul>
</li>
-<li><p>core/opal: Increase opal-msg-size size</p>
+<li><p class="first">core/opal: Increase opal-msg-size size</p>
<p>Kernel will use <cite>opal-msg-size</cite> property to allocate memory for opal_msg.
We want to send bigger data from OPAL to kernel. Hence increase
opal-msg-size to 64K.</p>
</li>
-<li><p>hw/npu2-opencapi: Add initial support for allocating OpenCAPI LPC memory</p>
+<li><p class="first">hw/npu2-opencapi: Add initial support for allocating OpenCAPI LPC memory</p>
<p>Lowest Point of Coherency (LPC) memory allows the host to access memory on
an OpenCAPI device.</p>
<p>Define 2 OPAL calls, <a class="reference internal" href="../opal-api/opal-npu2-opencapi-159-160-161-171-172.html#opal-npu-mem-alloc"><span class="std std-ref">OPAL_NPU_MEM_ALLOC</span></a> and <a class="reference internal" href="../opal-api/opal-npu2-opencapi-159-160-161-171-172.html#opal-npu-mem-release"><span class="std std-ref">OPAL_NPU_MEM_RELEASE</span></a>, for
@@ -150,7 +151,7 @@ are restricted to a single range of 4TB, on a single OpenCAPI device per
chip. In future, we’ll use some chip ID extension magic to give us more
space, and some sort of allocator to assign ranges to more than one device.</p>
</li>
-<li><p>core/fast-reboot: Add im-feeling-lucky option</p>
+<li><p class="first">core/fast-reboot: Add im-feeling-lucky option</p>
<p>Fast reboot gets disabled for a number of reasons e.g. the availability
of nvlink. However this doesn’t actually affect the ability to perform fast
reboot if no nvlink device is actually present.</p>
@@ -158,7 +159,7 @@ reboot if no nvlink device is actually present.</p>
“im-feeling-lucky” then perform the fast-reboot irrespective of if it’s
previously been disabled.</p>
</li>
-<li><p>platforms/astbmc: Check for SBE validation step</p>
+<li><p class="first">platforms/astbmc: Check for SBE validation step</p>
<p>On some POWER8 astbmc systems an update to the SBE requires pausing at
runtime to ensure integrity of the SBE. If this is required the BMC will
set a chassis boot option IPMI flag using the OEM parameter 0x62. If
@@ -169,16 +170,16 @@ it in a bad state and unable to be used for timer operations. To
workaround this the flag is checked as soon as possible (ie. when IPMI
and the console are set up), and once complete the system is rebooted.</p>
</li>
-<li><p>Add P9 DIO interrupt support</p>
+<li><p class="first">Add P9 DIO interrupt support</p>
<p>On P9 there are GPIO port 0, 1, 2 for GPIO interrupt, and DIO interrupt
is used to handle the interrupts.</p>
<p>Add support to the DIO interrupts:</p>
<ol class="arabic simple">
-<li><p>Add dio_interrupt_register(chip, port, callback) to register the
-interrupt</p></li>
-<li><p>Add dio_interrupt_deregister(chip, port, callback) to deregister;</p></li>
-<li><p>When interrupt on the port occurs, callback is invoked, and the
-interrupt status is cleared.</p></li>
+<li>Add dio_interrupt_register(chip, port, callback) to register the
+interrupt</li>
+<li>Add dio_interrupt_deregister(chip, port, callback) to deregister;</li>
+<li>When interrupt on the port occurs, callback is invoked, and the
+interrupt status is cleared.</li>
</ol>
</li>
</ul>
@@ -187,7 +188,7 @@ interrupt status is cleared.</p></li>
<h2>Removed features<a class="headerlink" href="#removed-features" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot v6.3:</p>
<ul>
-<li><p>pci/iov: Remove skiboot VF tracking</p>
+<li><p class="first">pci/iov: Remove skiboot VF tracking</p>
<p>This feature was added a few years ago in response to a request to make
the MaxPayloadSize (MPS) field of a Virtual Function match the MPS of the
Physical Function that hosts it.</p>
@@ -203,7 +204,7 @@ enabled and then disabled prior to rebooting. This patch fixes the bug by
removing the code entirely. This patch has no impact on SR-IOV support on
the host operating system.</p>
</li>
-<li><p>Remove POWER7 and POWER7+ support</p>
+<li><p class="first">Remove POWER7 and POWER7+ support</p>
<p>It’s been a good long while since either OPAL POWER7 user touched a
machine, and even longer since they’d have been okay using an old
version rather than tracking master.</p>
@@ -211,28 +212,28 @@ version rather than tracking master.</p>
long time, so it’s pretty safe to assume that it’s very much bitrotted.</p>
<p>It also saves a whole 14kb of xz compressed payload space.</p>
</li>
-<li><p>Remove remnants of <a class="reference internal" href="../opal-api/index.html#opal-pci-get-phb-diag-data"><span class="std std-ref">OPAL_PCI_GET_PHB_DIAG_DATA</span></a></p>
+<li><p class="first">Remove remnants of <a class="reference internal" href="../opal-api/index.html#opal-pci-get-phb-diag-data"><span class="std std-ref">OPAL_PCI_GET_PHB_DIAG_DATA</span></a></p>
<p>Never present in a public OPAL release, and only kernels prior to 3.11
would ever attempt to call it.</p>
</li>
-<li><p>Remove unused <a class="reference internal" href="../opal-api/index.html#opal-get-xive-source"><span class="std std-ref">OPAL_GET_XIVE_SOURCE</span></a></p>
+<li><p class="first">Remove unused <a class="reference internal" href="../opal-api/index.html#opal-get-xive-source"><span class="std std-ref">OPAL_GET_XIVE_SOURCE</span></a></p>
<p>While this call was technically implemented by skiboot, no code has ever called
it, and it was only ever implemented for the p7ioc-phb back-end (i.e. POWER7).
Since this call was unused in Linux, and that POWER7 with OPAL was only ever
available internally, so it should be safe to remove the call.</p>
</li>
-<li><p>Remove unused <a class="reference internal" href="../opal-api/index.html#opal-pci-get-xive-reissue"><span class="std std-ref">OPAL_PCI_GET_XIVE_REISSUE</span></a> and <a class="reference internal" href="../opal-api/index.html#opal-pci-set-xive-reissue"><span class="std std-ref">OPAL_PCI_SET_XIVE_REISSUE</span></a></p>
+<li><p class="first">Remove unused <a class="reference internal" href="../opal-api/index.html#opal-pci-get-xive-reissue"><span class="std std-ref">OPAL_PCI_GET_XIVE_REISSUE</span></a> and <a class="reference internal" href="../opal-api/index.html#opal-pci-set-xive-reissue"><span class="std std-ref">OPAL_PCI_SET_XIVE_REISSUE</span></a></p>
<p>These seem to be remnants of one of the OPAL incarnations prior to
OPALv3. These calls have never been implemented in skiboot, and never
used by an upstream kernel (nor a PowerKVM kernel).</p>
<p>It’s rather safe to just document them as never existing.</p>
</li>
-<li><p>Remove never implemented <a class="reference internal" href="../opal-api/index.html#opal-pci-set-phb-table-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TABLE_MEMORY</span></a> and document why</p>
+<li><p class="first">Remove never implemented <a class="reference internal" href="../opal-api/index.html#opal-pci-set-phb-table-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TABLE_MEMORY</span></a> and document why</p>
<p>Not ever used by upstream linux or PowerKVM tree. Never implemented in
skiboot (not even in ancient internal only tree).</p>
<p>So, it’s incredibly safe to remove.</p>
</li>
-<li><p>Remove unused <a class="reference internal" href="../opal-api/opal-pci-eeh-freeze-status-23.html#opal-pci-eeh-freeze-status2"><span class="std std-ref">OPAL_PCI_EEH_FREEZE_STATUS2</span></a></p>
+<li><p class="first">Remove unused <a class="reference internal" href="../opal-api/opal-pci-eeh-freeze-status-23.html#opal-pci-eeh-freeze-status2"><span class="std std-ref">OPAL_PCI_EEH_FREEZE_STATUS2</span></a></p>
<p>This call was introduced all the way back at the end of 2012, before
OPAL was public. The #define for the OPAL call was introduced to the
Linux kernel in June 2013, and the call was never used in any kernel
@@ -240,15 +241,15 @@ tree ever (as far as we can find).</p>
<p>Thus, it’s quite safe to remove this completely unused and completely
untested OPAL call.</p>
</li>
-<li><p>Document the long removed <a class="reference internal" href="../opal-api/index.html#opal-register-opal-exception-handler"><span class="std std-ref">OPAL_REGISTER_OPAL_EXCEPTION_HANDLER</span></a> call</p>
+<li><p class="first">Document the long removed <a class="reference internal" href="../opal-api/index.html#opal-register-opal-exception-handler"><span class="std std-ref">OPAL_REGISTER_OPAL_EXCEPTION_HANDLER</span></a> call</p>
<p>I’m pretty sure this was removed in one of our first ever service packs.</p>
<p>Fixes: <a class="reference external" href="https://github.com/open-power/skiboot/issues/98">https://github.com/open-power/skiboot/issues/98</a></p>
</li>
-<li><p>Remove last remnants of <a class="reference internal" href="../opal-api/index.html#opal-pci-set-phb-tce-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TCE_MEMORY</span></a> and <a class="reference internal" href="../opal-api/index.html#opal-pci-set-hub-tce-memory"><span class="std std-ref">OPAL_PCI_SET_HUB_TCE_MEMORY</span></a></p>
+<li><p class="first">Remove last remnants of <a class="reference internal" href="../opal-api/index.html#opal-pci-set-phb-tce-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TCE_MEMORY</span></a> and <a class="reference internal" href="../opal-api/index.html#opal-pci-set-hub-tce-memory"><span class="std std-ref">OPAL_PCI_SET_HUB_TCE_MEMORY</span></a></p>
<p>Since we have not supported p5ioc systems since skiboot 5.2, it’s pretty
safe to just wholesale remove these OPAL calls now.</p>
</li>
-<li><p>Remove remnants of <a class="reference internal" href="../opal-api/index.html#opal-pci-set-phb-tce-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TCE_MEMORY</span></a></p>
+<li><p class="first">Remove remnants of <a class="reference internal" href="../opal-api/index.html#opal-pci-set-phb-tce-memory"><span class="std std-ref">OPAL_PCI_SET_PHB_TCE_MEMORY</span></a></p>
<p>There’s no reason we need remnants hanging around that aren’t used, so
remove them and save a handful of bytes at runtime.</p>
<p>Simultaneously, document the OPAL call removal.</p>
@@ -259,16 +260,16 @@ remove them and save a handful of bytes at runtime.</p>
<h2>Secure and Trusted Boot<a class="headerlink" href="#secure-and-trusted-boot" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot v6.3:</p>
<ul>
-<li><p>trustedboot: Change PCR and event_type for the skiboot events</p>
+<li><p class="first">trustedboot: Change PCR and event_type for the skiboot events</p>
<p>The existing skiboot events are being logged as EV_ACTION, however, the
TCG PC Client spec says that EV_ACTION events should have one of the
pre-defined strings in the event field recorded in the event log. For
instance:</p>
<ul class="simple">
-<li><p>“Calling Ready to Boot”,</p></li>
-<li><p>“Entering ROM Based Setup”,</p></li>
-<li><p>“User Password Entered”, and</p></li>
-<li><p>“Start Option ROM Scan.</p></li>
+<li>“Calling Ready to Boot”,</li>
+<li>“Entering ROM Based Setup”,</li>
+<li>“User Password Entered”, and</li>
+<li>“Start Option ROM Scan.</li>
</ul>
<p>None of the EV_ACTION pre-defined strings are applicable to the existing
skiboot events. Based on recent discussions with other POWER teams, this
@@ -287,9 +288,9 @@ to PCR[4,5,6] and logged as EV_COMPACT_HASH.</p>
EV_COMPACT_HASH seems to be the most adequate one due to its
flexibility. According to the TCG PC Client spec:</p>
<ul class="simple">
-<li><p>May be used for any PCR except 0, 1, 2 and 3.</p></li>
-<li><p>The event field may be informative or may be hashed to generate the
-digest field, depending on the component recording the event.</p></li>
+<li>May be used for any PCR except 0, 1, 2 and 3.</li>
+<li>The event field may be informative or may be hashed to generate the
+digest field, depending on the component recording the event.</li>
</ul>
<p>Additionally, the PCR[4,5] seem to be the most adequate PCRs. They would
be used for skiboot and some skiroot events. According to the TCG PC
@@ -298,10 +299,10 @@ transition between the pre-OS and OS-present state of the platform.
PCR[4], along with PCR[5], identifies the initial OS loader.</p>
<p>In summary, for skiboot events:</p>
<ul class="simple">
-<li><p>Events that represents data should be extended to PCR 4.</p></li>
-<li><p>Events that represents config should be extended to PCR 5.</p></li>
-<li><p>For the lack of an event type that fits the specific purpose,
-both data and config events should be logged as EV_COMPACT_HASH.</p></li>
+<li>Events that represents data should be extended to PCR 4.</li>
+<li>Events that represents config should be extended to PCR 5.</li>
+<li>For the lack of an event type that fits the specific purpose,
+both data and config events should be logged as EV_COMPACT_HASH.</li>
</ul>
</li>
</ul>
@@ -310,7 +311,7 @@ both data and config events should be logged as EV_COMPACT_HASH.</p></li>
<h2>Sensors<a class="headerlink" href="#sensors" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot v6.3:</p>
<ul>
-<li><p>occ-sensors: Check if OCC is reset while reading inband sensors</p>
+<li><p class="first">occ-sensors: Check if OCC is reset while reading inband sensors</p>
<p>OCC may not be able to mark the sensor buffer as invalid while going
down RESET. If OCC never comes back we will continue to read the stale
sensor data. So verify if OCC is reset while reading the sensor values
@@ -322,7 +323,7 @@ and propagate the appropriate error.</p>
<h2>IPMI<a class="headerlink" href="#ipmi" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot v6.3:</p>
<ul>
-<li><p>ipmi: ensure forward progress on ipmi_queue_msg_sync()</p>
+<li><p class="first">ipmi: ensure forward progress on ipmi_queue_msg_sync()</p>
<p>BT responses are handled using a timer doing the polling. To hope to
get an answer to an IPMI synchronous message, the timer needs to run.</p>
<p>We can’t just check all timers though as there may be a timer that
@@ -340,14 +341,14 @@ flash resource with the IPMI HIOMAP backend.</p>
<h2>NPU2<a class="headerlink" href="#npu2" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot v6.4-rc1:</p>
<ul>
-<li><p>witherspoon: Add nvlink peers in finalise_dt()</p>
+<li><p class="first">witherspoon: Add nvlink peers in finalise_dt()</p>
<p>This information is consumed by Linux so it needs to be in the DT. Move
it to finalise_dt().</p>
</li>
</ul>
<p>Since skiboot v6.3:</p>
<ul>
-<li><p>npu2: Increase timeout for L2/L3 cache purging</p>
+<li><p class="first">npu2: Increase timeout for L2/L3 cache purging</p>
<p>On NVLink2 bridge reset, we purge all L2/L3 caches in the system.
This is an asynchronous operation, we have a 2ms timeout here. There are
reports that this is not enough and “PURGE L3 on core xxx timed out”
@@ -356,11 +357,11 @@ messages appear (for the reference: on the test setup this takes
<p>This defines the timeout as a macro and changes this from 2ms to 20ms.</p>
<p>This adds a tracepoint to tell how long it took to purge all the caches.</p>
</li>
-<li><p>npu2: Purge cache when resetting a GPU</p>
+<li><p class="first">npu2: Purge cache when resetting a GPU</p>
<p>After putting all a GPU’s links in reset, do a cache purge in case we
have CPU cache lines belonging to the now-unaccessible GPU memory.</p>
</li>
-<li><p>npu2-opencapi: Mask 2 XSL errors</p>
+<li><p class="first">npu2-opencapi: Mask 2 XSL errors</p>
<p>Commit f8dfd699f584 (“hw/npu2: Setup an error interrupt on some
opencapi FIRs”) converted some FIR bits default action from system
checkstop to raising an error interrupt. For 2 XSL error events that
@@ -373,7 +374,7 @@ those 2 XSL errors. The error will also be picked up by the OTL logic,
which is per link. So we’ll still get an error interrupt, but only on
the relevant link, and the other opencapi adapter can stay functional.</p>
</li>
-<li><p>npu2: Clear fence state for a brick being reset</p>
+<li><p class="first">npu2: Clear fence state for a brick being reset</p>
<p>Resetting a GPU before resetting an NVLink leads to occasional HMIs
which fence some bricks and prevent the “reset_ntl” procedure from
succeeding at the “reset_ntl_release” step - the host system requires
@@ -381,11 +382,11 @@ reboot; there may be other cases like this as well.</p>
<p>This adds clearing of the fence bit in NPU.MISC.FENCE_STATE for
the NVLink which we are about to reset.</p>
</li>
-<li><p>npu2: Fix clearing the FIR bits</p>
+<li><p class="first">npu2: Fix clearing the FIR bits</p>
<p>FIR registers are SCOM-only so they cannot be accesses with the indirect
write, and yet we use SCOM-based addresses for these; fix this.</p>
</li>
-<li><p>npu2: Reset NVLinks when resetting a GPU</p>
+<li><p class="first">npu2: Reset NVLinks when resetting a GPU</p>
<p>Resetting a V100 GPU brings its NVLinks down and if an NPU tries using
those, an HMI occurs. We were lucky not to observe this as the bare metal
does not normally reset a GPU and when passed through, GPUs are usually
@@ -396,7 +397,7 @@ brings HMIs.</p>
so when the host system issues secondary bus reset to the slot, it resets
associated NVLinks.</p>
</li>
-<li><p>npu2: Reset PID wildcard and refcounter when mapped to LPID</p>
+<li><p class="first">npu2: Reset PID wildcard and refcounter when mapped to LPID</p>
<p>Since 105d80f85b “npu2: Use unfiltered mode in XTS tables” we do not
register every PID in the XTS table so the table has one entry per LPID.
Then we added a reference counter to keep track of the entry use when
@@ -416,7 +417,7 @@ assigned to LPID and we cannot rely on the kernel to clean that up.</p>
<h2>PHB4<a class="headerlink" href="#phb4" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot v6.3:</p>
<ul>
-<li><p>hw/phb4: Make phb4_training_trace() more general</p>
+<li><p class="first">hw/phb4: Make phb4_training_trace() more general</p>
<p>phb4_training_trace() is used to monitor the Link Training Status
State Machine (LTSSM) of the PHB’s data link layer. Currently it is only
used to observe the LTSSM while bringing up the link, but sometimes it’s
@@ -425,7 +426,7 @@ secondary bus reset). This patch renames it to phb4_link_trace() and
allows the target LTSSM state and a flexible timeout to help in these
situations.</p>
</li>
-<li><p>hw/phb4: Make pci-tracing print at PR_NOTICE</p>
+<li><p class="first">hw/phb4: Make pci-tracing print at PR_NOTICE</p>
<p>When pci-tracing is enabled we print each trace status message and the
final trace status at PR_ERROR. The final status messages are similar to
those printed when we fail to train in the non-pci-tracing path and this
@@ -434,7 +435,7 @@ has resulted in spurious op-test failures.</p>
they’re not accidently interpreted as actual error messages. PR_NOTICE
messages are still printed to the console during boot.</p>
</li>
-<li><p>hw/phb4: Use read/write_reg in assert_perst</p>
+<li><p class="first">hw/phb4: Use read/write_reg in assert_perst</p>
<p>While the PHB is fenced we can’t use the MMIO interface to access PHB
registers. While processing a complete reset we inject a PHB fence to
isolate the PHB from the rest of the system because the PHB won’t
@@ -450,7 +451,7 @@ when the system was fast-reset.</p>
<p>This patch fixes the problem by replacing the raw {in|out}_be64()
accessors with the phb4_{read|write}_reg() functions.</p>
</li>
-<li><p>hw/phb4: Assert Link Disable bit after ETU init</p>
+<li><p class="first">hw/phb4: Assert Link Disable bit after ETU init</p>
<p>The cursed RAID card in ozrom1 has a bug where it ignores PERST being
asserted. The PCIe Base spec is a little vague about what happens
while PERST is asserted, but it does clearly specify that when
@@ -545,22 +546,23 @@ seems to avoid the Completion Timeout. With the patch applied we get:</p>
<h2>Simulators<a class="headerlink" href="#simulators" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot v6.3:</p>
<ul>
-<li><p>external/mambo: Bump default POWER9 to Nimbus DD2.3</p></li>
-<li><p>external/mambo: fix tcl startup code for mambo bogus net (repost)</p>
+<li><p class="first">external/mambo: Bump default POWER9 to Nimbus DD2.3</p>
+</li>
+<li><p class="first">external/mambo: fix tcl startup code for mambo bogus net (repost)</p>
<p>This fixes a couple issues with external/mambo/skiboot.tcl so I can use the
mambo bogus net.</p>
<ul class="simple">
-<li><p>newer distros (ubuntu 18.04) allow tap device to have a user specified
-name instead of just tapN so we need to pass in a name not a number.</p></li>
-<li><p>need some kind of default for net_mac, and need the mconfig for it
-to be set from an env var.</p></li>
+<li>newer distros (ubuntu 18.04) allow tap device to have a user specified
+name instead of just tapN so we need to pass in a name not a number.</li>
+<li>need some kind of default for net_mac, and need the mconfig for it
+to be set from an env var.</li>
</ul>
</li>
-<li><p>skiboot.tcl: Add option to wait for GDB server connection</p>
+<li><p class="first">skiboot.tcl: Add option to wait for GDB server connection</p>
<p>Add an environment variable which makes Mambo wait for a connection
from gdb prior to starting simulation.</p>
</li>
-<li><p>mambo: Integrate addr2line into backtrace command</p>
+<li><p class="first">mambo: Integrate addr2line into backtrace command</p>
<p>Gives nice output like this:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">systemsim</span> <span class="o">%</span> <span class="n">bt</span>
<span class="n">pc</span><span class="p">:</span> <span class="mh">0xC0000000002BF3D4</span> <span class="n">_savegpr0_28</span><span class="o">+</span><span class="mh">0x0</span>
@@ -579,7 +581,7 @@ from gdb prior to starting simulation.</p>
</pre></div>
</div>
</li>
-<li><p>mambo: Add addr2func for symbol resolution</p>
+<li><p class="first">mambo: Add addr2func for symbol resolution</p>
<p>If you supply a VMLINUX_MAP/SKIBOOT_MAP/USER_MAP addr2func can guess
at your symbol name. i.e.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">systemsim</span> <span class="o">%</span> <span class="n">p</span> <span class="n">pc</span>
@@ -589,36 +591,36 @@ at your symbol name. i.e.</p>
</pre></div>
</div>
</li>
-<li><p>lpc-port80h: Don’t write port 80h when running under Simics</p>
+<li><p class="first">lpc-port80h: Don’t write port 80h when running under Simics</p>
<p>Simics doesn’t model LPC port 80h. Writing to it terminates the
simulation due to an invalid LPC memory access. This patch adds a
check to ensure port 80h isn’t accessed if we are running under
Simics.</p>
</li>
-<li><p>device-tree: speed up fdt building on slow simulators</p>
+<li><p class="first">device-tree: speed up fdt building on slow simulators</p>
<p>Trade size for speed and avoid de-duplicating strings in the fdt.
This costs about 2kB in fdt size, and saves about 8 million instructions
(almost half of all instructions) booting skiboot in mambo.</p>
</li>
-<li><p>fast-reboot:: skip read-only memory checksum for slow simulators</p>
+<li><p class="first">fast-reboot:: skip read-only memory checksum for slow simulators</p>
<p>Skip the fast reboot checksum, which costs about 4 million cycles
booting skiboot in mambo.</p>
</li>
-<li><p>nx: remove check on the “qemu, powernv” property</p>
+<li><p class="first">nx: remove check on the “qemu, powernv” property</p>
<p>commit 95f7b3b9698b (“nx: Don’t abort on missing NX when using a QEMU
machine”) introduced a check on the property “qemu,powernv” to skip NX
initialization when running under a QEMU machine.</p>
<p>The QEMU platforms now expose a QUIRK_NO_RNG in the chip. Testing the
“qemu,powernv” property is not necessary anymore.</p>
</li>
-<li><p>plat/qemu: add a POWER8 and POWER9 platform</p>
+<li><p class="first">plat/qemu: add a POWER8 and POWER9 platform</p>
<p>These new QEMU platforms have characteristics closer to real OpenPOWER
systems that we use today and define a different BMC depending on the
CPU type. New platform properties are introduced for each,
“qemu,powernv8”, “qemu,powernv9” and these should be compatible with
existing QEMUs which only expose the “qemu,powernv” property</p>
</li>
-<li><p>libc/string: speed up common string functions</p>
+<li><p class="first">libc/string: speed up common string functions</p>
<p>Use compiler builtins for the string functions, and compile the
libc/string/ directory with -O2.</p>
<p>This reduces instructions booting skiboot in mambo by 2.9 million in
@@ -627,7 +629,7 @@ increase.</p>
<p>This can result in the compiler warning more cases of string function
problems.</p>
</li>
-<li><p>external/mambo: Add an option to exit Mambo when the system is shutdown</p>
+<li><p class="first">external/mambo: Add an option to exit Mambo when the system is shutdown</p>
<p>Automatically exiting can be convenient for scripting. Will also exit
due to a HW crash (eg. unhandled exception).</p>
</li>
@@ -637,7 +639,7 @@ due to a HW crash (eg. unhandled exception).</p>
<h2>VESNIN platform<a class="headerlink" href="#vesnin-platform" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot v6.3:</p>
<ul>
-<li><p>platforms/vesnin: PCI inventory via IPMI OEM</p>
+<li><p class="first">platforms/vesnin: PCI inventory via IPMI OEM</p>
<p>Replace raw protocol with OEM message supported by OpenBMC’s IPMI
plugins.</p>
<p>BMC-side implementation (IPMI plug-in):
@@ -649,7 +651,7 @@ plugins.</p>
<h2>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot v6.3:</p>
<ul>
-<li><p>opal-gard: Account for ECC size when clearing partition</p>
+<li><p class="first">opal-gard: Account for ECC size when clearing partition</p>
<p>When â€opal-gard clear all’ is run, it works by erasing the GUARD then
using blockevel_smart_write() to write nothing to the partition. This
second write call is needed because we rely on libflash to set the ECC
@@ -670,20 +672,21 @@ of ECC bytes required.</p>
<h2>Build and debugging<a class="headerlink" href="#build-and-debugging" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot v6.3:</p>
<ul>
-<li><p>Disable -Waddress-of-packed-member for GCC9</p>
+<li><p class="first">Disable -Waddress-of-packed-member for GCC9</p>
<p>We throw a bunch of errors in errorlog code otherwise, which we should
fix, but we don’t <em>have</em> to yet.</p>
</li>
-<li><p>Fix a lot of sparse warnings</p></li>
-<li><p>With new GCC comes larger GCOV binaries</p>
+<li><p class="first">Fix a lot of sparse warnings</p>
+</li>
+<li><p class="first">With new GCC comes larger GCOV binaries</p>
<p>So we need to change our heap size to make more room for data/bss
without having to change where the console is or have more fun moving
things about.</p>
</li>
-<li><p>Intentionally discard fini_array sections</p>
+<li><p class="first">Intentionally discard fini_array sections</p>
<p>Produced in a SKIBOOT_GCOV=1 build, and never called by skiboot.</p>
</li>
-<li><p>external/trace: Add follow option to dump_trace</p>
+<li><p class="first">external/trace: Add follow option to dump_trace</p>
<p>When monitoring traces, an option like the tail command’s â€-f’ (follow)
is very useful. This option continues to append to the output as more
data arrives. Add an â€-f’ option to allow dump_trace to operate
@@ -693,7 +696,7 @@ accompanies â€-f’. This controls how often new input will be polled. Add
a â€-s’ option that will make dump_trace sleep for N milliseconds before
checking for new input.</p>
</li>
-<li><p>external/trace: Add support for dumping multiple buffers</p>
+<li><p class="first">external/trace: Add support for dumping multiple buffers</p>
<p>dump_trace only can dump one trace buffer at a time. It would be handy
to be able to dump multiple buffers and to see the entries from these
buffers displayed in correct timestamp order. Each trace buffer is
@@ -703,7 +706,7 @@ heap does not have a â€heap_replace’ operation. We need to â€heap_pop’
then â€heap_push’ to replace the root which means rebalancing twice
instead of once.</p>
</li>
-<li><p>external/trace: mmap trace buffers in dump_trace</p>
+<li><p class="first">external/trace: mmap trace buffers in dump_trace</p>
<p>The current lseek/read approach used in dump_trace does not correctly
handle certain aspects of the buffers. It does not use the start and end
position that is part of the buffer so it will not begin from the
@@ -717,12 +720,12 @@ that are already unit tested. However this requires a kernel where the
trace buffer sysfs nodes are able to be mmaped (see
<a class="reference external" href="https://patchwork.ozlabs.org/patch/1056786/">https://patchwork.ozlabs.org/patch/1056786/</a>)</p>
</li>
-<li><p>core/trace: Export trace buffers to sysfs</p>
+<li><p class="first">core/trace: Export trace buffers to sysfs</p>
<p>Every property in the device-tree under /ibm,opal/firmware/exports has a
sysfs node created in /firmware/opal/exports. Add properties with the
physical address and size for each trace buffer so they are exported.</p>
</li>
-<li><p>core/trace: Add pir number to debug_descriptor</p>
+<li><p class="first">core/trace: Add pir number to debug_descriptor</p>
<p>The names given to the trace buffers when exported to sysfs should show
what cpu they are associated with to make it easier to understand there
output. The debug_descriptor currently stores the address and length of
@@ -731,7 +734,7 @@ tree. Extend debug_descriptor to include a cpu associated with each
trace. This will be used for creating properties in the device-tree
under /ibm,opal/firmware/exports/.</p>
</li>
-<li><p>core/trace: Change trace buffer size</p>
+<li><p class="first">core/trace: Change trace buffer size</p>
<p>We want to be able to mmap the trace buffers to be used by the
dump_trace tool. As mmaping is done in terms of pages it makes sense
that the size of the trace buffers should be page aligned. This is
@@ -740,7 +743,7 @@ beginning of the trace and the room left for an extra trace entry at the
end of the buffer. Change the size of the buffer itself so that the
entire trace buffer size will be page aligned.</p>
</li>
-<li><p>core/trace: Change buffer alignment from 4K to 64K</p>
+<li><p class="first">core/trace: Change buffer alignment from 4K to 64K</p>
<p>We want to be able to mmap the trace buffers to be used by the
dump_trace tool. This means that the trace bufferes must be page
aligned. Currently they are aligned to 4K. Most power systems have a
@@ -754,19 +757,19 @@ through sysfs. To get around this change the address that is exposed to
sysfs to be the trace_info struct. This means the lock in trace_info is
now visible too.</p>
</li>
-<li><p>external/trace: Use correct width integer byte swapping</p>
+<li><p class="first">external/trace: Use correct width integer byte swapping</p>
<p>The trace_repeat struct uses be16 for storing the number of repeats.
Currently be32_to_cpu conversion is used to display this member. This
produces an incorrect value. Use be16_to_cpu instead.</p>
</li>
-<li><p>core/trace: Put boot_tracebuf in correct location.</p>
+<li><p class="first">core/trace: Put boot_tracebuf in correct location.</p>
<p>A position for the boot_tracebuf is allocated in skiboot.lds.S.
However, without a __section attribute the boot trace buffer is not
placed in the correct location, meaning that it also will not be
correctly aligned. Add the __section attribute to ensure it will be
placed in its allocated position.</p>
</li>
-<li><p>core/lock: Add debug options to store backtrace of where lock was taken</p>
+<li><p class="first">core/lock: Add debug options to store backtrace of where lock was taken</p>
<p>Contrary to popular belief, skiboot developers are imperfect and
occasionally write locking bugs. When we exit skiboot, we check if we’re
still holding any locks, and if so, we print an error with a list of the
@@ -782,7 +785,7 @@ DEBUG=1.</p>
because the locks used by the memory allocator take up too much room in the
fake skiboot heap.)</p>
</li>
-<li><p>libfdt: upgrade to upstream dtc.git 243176c</p>
+<li><p class="first">libfdt: upgrade to upstream dtc.git 243176c</p>
<p>Upgrade libfdt/ to github.com/dgibson/dtc.git 243176c (“Fix bogus
error on rebuild”)</p>
<p>This copies dtc/libfdt/ to skiboot/libfdt/, with the only change in
@@ -792,8 +795,8 @@ or mostly eliminated by cutting out fdt version checks and unused
code, but tracking upstream is a bigger benefit at the moment.</p>
<p>This loses commits:</p>
<ul class="simple">
-<li><p>14ed2b842f61 (“libfdt: add basic sanity check to fdt_open_into”)</p></li>
-<li><p>bc7bb3d12bc1 (“sparse: fix declaration of fdt_strerror”)</p></li>
+<li>14ed2b842f61 (“libfdt: add basic sanity check to fdt_open_into”)</li>
+<li>bc7bb3d12bc1 (“sparse: fix declaration of fdt_strerror”)</li>
</ul>
<p>As well as some prehistoric similar kinds of things, which is the
punishment for us not being good downstream citizens and sending
@@ -806,7 +809,7 @@ in future.</p>
<h2>General Fixes<a class="headerlink" href="#general-fixes" title="Permalink to this headline">¶</a></h2>
<p>Since skiboot v6.4-rc1:</p>
<ul>
-<li><p>libflash: Fix broken continuations</p>
+<li><p class="first">libflash: Fix broken continuations</p>
<p>Some of the libflash debug messages don’t print a newlines at the end of
the line and assume that the next print will be contigious with the
last. This isn’t true in skiboot since log messages are prefixed with a
@@ -826,7 +829,6 @@ statement.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -865,15 +867,17 @@ statement.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -890,15 +894,14 @@ statement.</p>
<li class="right" >
<a href="skiboot-6.3.5.html" title="skiboot-6.3.5"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.5.1.html b/doc/release-notes/skiboot-6.5.1.html
index cd0f8ef..bddf843 100644
--- a/doc/release-notes/skiboot-6.5.1.html
+++ b/doc/release-notes/skiboot-6.5.1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.5.1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.5.1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.5.html" title="skiboot-6.5"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.5.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,18 +53,17 @@
bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul class="simple">
-<li><p>core/ipmi: Fix use-after-free</p></li>
-<li><p>blocklevel: smart_write: Fix unaligned writes to ECC partitions</p></li>
-<li><p>gard: Fix data corruption when clearing single records</p></li>
-<li><p>core/platform: Actually disable fast-reboot on P8</p></li>
-<li><p>xive: fix return value of opal_xive_allocate_irq()</p></li>
-<li><p>MPIPL: struct opal_mpipl_fadump doesn’t needs to be packed</p></li>
-<li><p>core/flash: Validate secure boot content size</p></li>
+<li>core/ipmi: Fix use-after-free</li>
+<li>blocklevel: smart_write: Fix unaligned writes to ECC partitions</li>
+<li>gard: Fix data corruption when clearing single records</li>
+<li>core/platform: Actually disable fast-reboot on P8</li>
+<li>xive: fix return value of opal_xive_allocate_irq()</li>
+<li>MPIPL: struct opal_mpipl_fadump doesn’t needs to be packed</li>
+<li>core/flash: Validate secure boot content size</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -83,15 +83,17 @@ bug fixes it contains.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -108,15 +110,14 @@ bug fixes it contains.</p>
<li class="right" >
<a href="skiboot-6.5.html" title="skiboot-6.5"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.5.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.5.2.html b/doc/release-notes/skiboot-6.5.2.html
index 41d46c4..db482a8 100644
--- a/doc/release-notes/skiboot-6.5.2.html
+++ b/doc/release-notes/skiboot-6.5.2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.5.2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.5.2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.5.1.html" title="skiboot-6.5.1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.5.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,18 +54,17 @@ bug fixes it contains.</p>
<p>Bug fixes included in this release are:
- libstb/tpm: block access to unknown i2c devs on the tpm bus</p>
<ul class="simple">
-<li><p>slw: slw_reinit fix array overrun</p></li>
-<li><p>IPMI: Trigger OPAL TI in abort path.</p></li>
-<li><p>platform/mihawk: Add system VPD EEPROM to I2C bus</p></li>
-<li><p>platform/mihawk: Detect old system compatible string</p></li>
-<li><p>npu2/hw-procedures: Remove assertion from check_credits()</p></li>
-<li><p>npu2-opencapi: Fix integer promotion bug in LPC allocation</p></li>
-<li><p>hw/port80: Squash No SYNC error</p></li>
+<li>slw: slw_reinit fix array overrun</li>
+<li>IPMI: Trigger OPAL TI in abort path.</li>
+<li>platform/mihawk: Add system VPD EEPROM to I2C bus</li>
+<li>platform/mihawk: Detect old system compatible string</li>
+<li>npu2/hw-procedures: Remove assertion from check_credits()</li>
+<li>npu2-opencapi: Fix integer promotion bug in LPC allocation</li>
+<li>hw/port80: Squash No SYNC error</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -84,15 +84,17 @@ bug fixes it contains.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -109,15 +111,14 @@ bug fixes it contains.</p>
<li class="right" >
<a href="skiboot-6.5.1.html" title="skiboot-6.5.1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.5.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.5.3.html b/doc/release-notes/skiboot-6.5.3.html
index 5873b94..027d054 100644
--- a/doc/release-notes/skiboot-6.5.3.html
+++ b/doc/release-notes/skiboot-6.5.3.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.5.3 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.5.3 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.5.2.html" title="skiboot-6.5.2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.5.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,16 +54,15 @@ bug fixes it contains.</p>
<p>Bug fixes included in this release are:
- npu2-opencapi: Don’t drive reset signal permanently</p>
<ul class="simple">
-<li><p>mpipl: Rework memory reservation for OPAL dump</p></li>
-<li><p>mpipl: Disable fast-reboot during post MPIPL boot</p></li>
-<li><p>hdata: Update MPIPL support IPL parameter</p></li>
-<li><p>xscom: Don’t log xscom errors caused by OPAL calls</p></li>
-<li><p>npu2: Clear fence on all bricks</p></li>
+<li>mpipl: Rework memory reservation for OPAL dump</li>
+<li>mpipl: Disable fast-reboot during post MPIPL boot</li>
+<li>hdata: Update MPIPL support IPL parameter</li>
+<li>xscom: Don’t log xscom errors caused by OPAL calls</li>
+<li>npu2: Clear fence on all bricks</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -82,15 +82,17 @@ bug fixes it contains.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -107,15 +109,14 @@ bug fixes it contains.</p>
<li class="right" >
<a href="skiboot-6.5.2.html" title="skiboot-6.5.2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.5.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.5.4.html b/doc/release-notes/skiboot-6.5.4.html
index bfeec33..8fc2c98 100644
--- a/doc/release-notes/skiboot-6.5.4.html
+++ b/doc/release-notes/skiboot-6.5.4.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.5.4 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.5.4 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.5.3.html" title="skiboot-6.5.3"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.5.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,12 +54,11 @@ bug fixes it contains.</p>
<p>Bug fixes included in this release are:
- errorlog: Increase the severity of abnormal reboot events</p>
<ul class="simple">
-<li><p>eSEL: Make sure PANIC logs are sent to BMC before calling assert</p></li>
+<li>eSEL: Make sure PANIC logs are sent to BMC before calling assert</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -78,15 +78,17 @@ bug fixes it contains.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -103,15 +105,14 @@ bug fixes it contains.</p>
<li class="right" >
<a href="skiboot-6.5.3.html" title="skiboot-6.5.3"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.5.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.5.html b/doc/release-notes/skiboot-6.5.html
index c8563f2..ffbbecc 100644
--- a/doc/release-notes/skiboot-6.5.html
+++ b/doc/release-notes/skiboot-6.5.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.5 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.5 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.4-rc1.html" title="skiboot-6.4-rc1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -59,7 +60,6 @@ reliable creation of crash dumps, and for crash dumps fro OPAL.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -87,15 +87,17 @@ reliable creation of crash dumps, and for crash dumps fro OPAL.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -112,15 +114,14 @@ reliable creation of crash dumps, and for crash dumps fro OPAL.</p>
<li class="right" >
<a href="skiboot-6.4-rc1.html" title="skiboot-6.4-rc1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.5</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.6.1.html b/doc/release-notes/skiboot-6.6.1.html
index 8efc45c..5406152 100644
--- a/doc/release-notes/skiboot-6.6.1.html
+++ b/doc/release-notes/skiboot-6.6.1.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.6.1 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.6.1 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.6.html" title="skiboot-6.6"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.6.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,20 +53,19 @@
bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul class="simple">
-<li><p>occ: Fix false negatives in wait_for_all_occ_init()</p></li>
-<li><p>uart: Drop console write data if BMC becomes unresponsive</p></li>
-<li><p>hw/phys-map: Fix OCAPI_MEM BAR values</p></li>
-<li><p>Detect fused core mode and bail out</p></li>
-<li><p>platform/mihawk: Tune equalization settings for opencapi</p></li>
-<li><p>hdata/memory.c: Fix “Inconsistent MSAREA” warnings</p></li>
-<li><p>PSI: Convert prerror to PR_NOTICE</p></li>
-<li><p>sensors: occ: Fix a bug when sensor values are zero</p></li>
-<li><p>sensors: occ: Fix the GPU detection code</p></li>
+<li>occ: Fix false negatives in wait_for_all_occ_init()</li>
+<li>uart: Drop console write data if BMC becomes unresponsive</li>
+<li>hw/phys-map: Fix OCAPI_MEM BAR values</li>
+<li>Detect fused core mode and bail out</li>
+<li>platform/mihawk: Tune equalization settings for opencapi</li>
+<li>hdata/memory.c: Fix “Inconsistent MSAREA” warnings</li>
+<li>PSI: Convert prerror to PR_NOTICE</li>
+<li>sensors: occ: Fix a bug when sensor values are zero</li>
+<li>sensors: occ: Fix the GPU detection code</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -85,15 +85,17 @@ bug fixes it contains.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -110,15 +112,14 @@ bug fixes it contains.</p>
<li class="right" >
<a href="skiboot-6.6.html" title="skiboot-6.6"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.6.1</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.6.2.html b/doc/release-notes/skiboot-6.6.2.html
index b7913a7..4a1dc0e 100644
--- a/doc/release-notes/skiboot-6.6.2.html
+++ b/doc/release-notes/skiboot-6.6.2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.6.2 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.6.2 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.6.1.html" title="skiboot-6.6.1"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.6.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,13 +53,12 @@
bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul class="simple">
-<li><p>fsp: Skip sysdump retrieval only in MPIPL boot</p></li>
-<li><p>platform/mihawk: Fix IPMI double-free</p></li>
+<li>fsp: Skip sysdump retrieval only in MPIPL boot</li>
+<li>platform/mihawk: Fix IPMI double-free</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -78,15 +78,17 @@ bug fixes it contains.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -103,15 +105,14 @@ bug fixes it contains.</p>
<li class="right" >
<a href="skiboot-6.6.1.html" title="skiboot-6.6.1"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.6.2</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.6.3.html b/doc/release-notes/skiboot-6.6.3.html
index a7e33f5..3269731 100644
--- a/doc/release-notes/skiboot-6.6.3.html
+++ b/doc/release-notes/skiboot-6.6.3.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.6.3 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.6.3 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.6.2.html" title="skiboot-6.6.2"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.6.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,15 +53,14 @@
bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul class="simple">
-<li><p>fsp/dump: Handle non-MPIPL scenario</p></li>
-<li><p>hw/phb4: Verify AER support before initialising AER regs</p></li>
-<li><p>hw/phb4: Actually enable error reporting</p></li>
-<li><p>hdata: Add new “smp-cable-connector” VPD keyword</p></li>
+<li>fsp/dump: Handle non-MPIPL scenario</li>
+<li>hw/phb4: Verify AER support before initialising AER regs</li>
+<li>hw/phb4: Actually enable error reporting</li>
+<li>hdata: Add new “smp-cable-connector” VPD keyword</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -80,15 +80,17 @@ bug fixes it contains.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -105,15 +107,14 @@ bug fixes it contains.</p>
<li class="right" >
<a href="skiboot-6.6.2.html" title="skiboot-6.6.2"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.6.3</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.6.4.html b/doc/release-notes/skiboot-6.6.4.html
index b6ab14f..fb9d02a 100644
--- a/doc/release-notes/skiboot-6.6.4.html
+++ b/doc/release-notes/skiboot-6.6.4.html
@@ -1,23 +1,25 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.6.4 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.6.4 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="skiboot-6.7" href="skiboot-6.7.html" />
+ <link rel="next" title="skiboot-6.6.6" href="skiboot-6.6.6.html" />
<link rel="prev" title="skiboot-6.6.3" href="skiboot-6.6.3.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
@@ -27,15 +29,14 @@
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
- <a href="skiboot-6.7.html" title="skiboot-6.7"
+ <a href="skiboot-6.6.6.html" title="skiboot-6.6.6"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="skiboot-6.6.3.html" title="skiboot-6.6.3"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.6.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -52,13 +53,12 @@
bug fixes it contains.</p>
<p>Bug fixes included in this release are:</p>
<ul class="simple">
-<li><p>asm/head: fix power save wakeup register corruption</p></li>
-<li><p>FSP/NVRAM: Do not assert in vNVRAM statistics call</p></li>
+<li>asm/head: fix power save wakeup register corruption</li>
+<li>FSP/NVRAM: Do not assert in vNVRAM statistics call</li>
</ul>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -68,8 +68,8 @@ bug fixes it contains.</p>
<p class="topless"><a href="skiboot-6.6.3.html"
title="previous chapter">skiboot-6.6.3</a></p>
<h4>Next topic</h4>
- <p class="topless"><a href="skiboot-6.7.html"
- title="next chapter">skiboot-6.7</a></p>
+ <p class="topless"><a href="skiboot-6.6.6.html"
+ title="next chapter">skiboot-6.6.6</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
@@ -78,15 +78,17 @@ bug fixes it contains.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -98,20 +100,19 @@ bug fixes it contains.</p>
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
- <a href="skiboot-6.7.html" title="skiboot-6.7"
+ <a href="skiboot-6.6.6.html" title="skiboot-6.6.6"
>next</a> |</li>
<li class="right" >
<a href="skiboot-6.6.3.html" title="skiboot-6.6.3"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.6.4</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.6.6.html b/doc/release-notes/skiboot-6.6.6.html
new file mode 100644
index 0000000..3e0f2ea
--- /dev/null
+++ b/doc/release-notes/skiboot-6.6.6.html
@@ -0,0 +1,117 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.6.6 &#8212; skiboot e32e57e
+ documentation</title>
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
+
+ <link rel="index" title="Index" href="../genindex.html" />
+ <link rel="search" title="Search" href="../search.html" />
+ <link rel="next" title="skiboot-6.7" href="skiboot-6.7.html" />
+ <link rel="prev" title="skiboot-6.6.4" href="skiboot-6.6.4.html" />
+ </head><body>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ accesskey="I">index</a></li>
+ <li class="right" >
+ <a href="skiboot-6.7.html" title="skiboot-6.7"
+ accesskey="N">next</a> |</li>
+ <li class="right" >
+ <a href="skiboot-6.6.4.html" title="skiboot-6.6.4"
+ accesskey="P">previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
+ </ul>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body" role="main">
+
+ <div class="section" id="skiboot-6-6-6">
+<span id="id1"></span><h1>skiboot-6.6.6<a class="headerlink" href="#skiboot-6-6-6" title="Permalink to this headline">¶</a></h1>
+<p>skiboot 6.6.6 was released on Wednesday September 29, 2021. It replaces
+<span class="xref std std-ref">skiboot-6.6.5</span> as the current stable release in the 6.6.x series.</p>
+<p>It is recommended that v6.6.6 be used instead of v6.6.5 version due to the
+bug fixes it contains.</p>
+<p>Bug fixes included in this release are:</p>
+<ul class="simple">
+<li>phb4: Disable TCE cache line buffer</li>
+</ul>
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+ <div class="sphinxsidebarwrapper">
+ <h4>Previous topic</h4>
+ <p class="topless"><a href="skiboot-6.6.4.html"
+ title="previous chapter">skiboot-6.6.4</a></p>
+ <h4>Next topic</h4>
+ <p class="topless"><a href="skiboot-6.7.html"
+ title="next chapter">skiboot-6.7</a></p>
+ <div role="note" aria-label="source link">
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="../_sources/release-notes/skiboot-6.6.6.rst.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ </div>
+<div id="searchbox" style="display: none" role="search">
+ <h3>Quick search</h3>
+ <div class="searchformwrapper">
+ <form class="search" action="../search.html" method="get">
+ <input type="text" name="q" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ </div>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ >index</a></li>
+ <li class="right" >
+ <a href="skiboot-6.7.html" title="skiboot-6.7"
+ >next</a> |</li>
+ <li class="right" >
+ <a href="skiboot-6.6.4.html" title="skiboot-6.6.4"
+ >previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
+ </ul>
+ </div>
+ <div class="footer" role="contentinfo">
+ &#169; Copyright 2016-2017, IBM, others.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.6.html b/doc/release-notes/skiboot-6.6.html
index 2511e61..5662470 100644
--- a/doc/release-notes/skiboot-6.6.html
+++ b/doc/release-notes/skiboot-6.6.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.6 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.6 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -32,10 +34,9 @@
<li class="right" >
<a href="skiboot-6.5.4.html" title="skiboot-6.5.4"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.6</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -56,20 +57,20 @@ of internal refactorings and new features on the way.</p>
<div class="section" id="new-features">
<span id="skiboot-6-6-new-features"></span><h2>New features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Skiboot is now dual licensed as Apache 2.0 -OR- GPLv2+</p>
+<li><p class="first">Skiboot is now dual licensed as Apache 2.0 -OR- GPLv2+</p>
<p>There are some files still licensed Apache 2.0 only due to contributions
that we are unable to change the license of, but they are the minority.</p>
</li>
-<li><p>Skiboot can now be built as little endian, thanks to Team Nick.</p>
+<li><p class="first">Skiboot can now be built as little endian, thanks to Team Nick.</p>
<p>Doing so requires building with: make LITTLE_ENDIAN=1</p>
</li>
-<li><p>OpenCAPI reset support</p>
+<li><p class="first">OpenCAPI reset support</p>
<p>This is to allow FPGA-based OpenCAPI devices to be re-flashed with a new
device image, then reset to activate the new image. Although it is based
on top of the existing PCI Hotplug support it does require some OS changes
to function.</p>
</li>
-<li><p>The <a class="reference internal" href="../opal-api/opal-phb-flag-set-get-179-180.html#opal-phb-set-option"><span class="std std-ref">OPAL_PHB_SET_OPTION</span></a> and <a class="reference internal" href="../opal-api/opal-phb-flag-set-get-179-180.html#opal-phb-get-option"><span class="std std-ref">OPAL_PHB_GET_OPTION</span></a> OPAL calls</p>
+<li><p class="first">The <a class="reference internal" href="../opal-api/opal-phb-flag-set-get-179-180.html#opal-phb-set-option"><span class="std std-ref">OPAL_PHB_SET_OPTION</span></a> and <a class="reference internal" href="../opal-api/opal-phb-flag-set-get-179-180.html#opal-phb-get-option"><span class="std std-ref">OPAL_PHB_GET_OPTION</span></a> OPAL calls</p>
<p>These OPAL calls provide the OS with a means for controlling per-PHB
settings. Currently this allows the OS to enable or disable the the “Global
MMIO EEH Disable” and “4GTE” settings which are available on Power9 / PHB4.
@@ -80,7 +81,7 @@ See the PHB specification for more details.</p>
<div class="section" id="removed-features">
<h2>Removed features<a class="headerlink" href="#removed-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Fast-reboot is now disabled by default.</p>
+<li><p class="first">Fast-reboot is now disabled by default.</p>
<p>Fast-reboot will continue to be supported, but as an opt-in feature rather
than the default. From the commit (ee07f2c68160) message:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">This</span> <span class="n">has</span> <span class="n">two</span> <span class="n">user</span> <span class="n">visible</span> <span class="n">changes</span><span class="p">:</span>
@@ -105,7 +106,6 @@ than the default. From the commit (ee07f2c68160) message:</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -134,15 +134,17 @@ than the default. From the commit (ee07f2c68160) message:</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -159,15 +161,14 @@ than the default. From the commit (ee07f2c68160) message:</p>
<li class="right" >
<a href="skiboot-6.5.4.html" title="skiboot-6.5.4"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.6</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.7.1.html b/doc/release-notes/skiboot-6.7.1.html
new file mode 100644
index 0000000..8a2cbcc
--- /dev/null
+++ b/doc/release-notes/skiboot-6.7.1.html
@@ -0,0 +1,126 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.7.1 &#8212; skiboot e32e57e
+ documentation</title>
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
+
+ <link rel="index" title="Index" href="../genindex.html" />
+ <link rel="search" title="Search" href="../search.html" />
+ <link rel="next" title="skiboot-6.7.2" href="skiboot-6.7.2.html" />
+ <link rel="prev" title="skiboot-6.7" href="skiboot-6.7.html" />
+ </head><body>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ accesskey="I">index</a></li>
+ <li class="right" >
+ <a href="skiboot-6.7.2.html" title="skiboot-6.7.2"
+ accesskey="N">next</a> |</li>
+ <li class="right" >
+ <a href="skiboot-6.7.html" title="skiboot-6.7"
+ accesskey="P">previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
+ </ul>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body" role="main">
+
+ <div class="section" id="skiboot-6-7-1">
+<span id="id1"></span><h1>skiboot-6.7.1<a class="headerlink" href="#skiboot-6-7-1" title="Permalink to this headline">¶</a></h1>
+<p>skiboot 6.7.1 was released on Wednesday January 06, 2021. It replaces
+<a class="reference internal" href="skiboot-6.7.html#skiboot-6-7"><span class="std std-ref">skiboot-6.7</span></a> as the current stable release in the 6.7.x series.</p>
+<p>It is recommended that 6.7.1 be used instead of 6.7 version due to the
+bug fixes it contains.</p>
+<p>Bug fixes included in this release are:</p>
+<ul class="simple">
+<li>SBE: Account cancelled timer request</li>
+<li>SBE: Rate limit timer requests</li>
+<li>SBE: Check timer state before scheduling timer</li>
+<li>platform/mowgli: Limit PHB0/(pec0) to gen3 speed</li>
+<li>Revert “mowgli: Limit slot1 to Gen3 by default”</li>
+<li>xscom: Fix xscom error logging caused due to xscom OPAL call</li>
+<li>xive/p9: Remove assert from xive_eq_for_target()</li>
+<li>Fix possible deadlock with DEBUG build</li>
+<li>core/platform: Fallback to full_reboot if fast-reboot fails</li>
+<li>core/cpu: fix next_ungarded_primary</li>
+</ul>
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+ <div class="sphinxsidebarwrapper">
+ <h4>Previous topic</h4>
+ <p class="topless"><a href="skiboot-6.7.html"
+ title="previous chapter">skiboot-6.7</a></p>
+ <h4>Next topic</h4>
+ <p class="topless"><a href="skiboot-6.7.2.html"
+ title="next chapter">skiboot-6.7.2</a></p>
+ <div role="note" aria-label="source link">
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="../_sources/release-notes/skiboot-6.7.1.rst.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ </div>
+<div id="searchbox" style="display: none" role="search">
+ <h3>Quick search</h3>
+ <div class="searchformwrapper">
+ <form class="search" action="../search.html" method="get">
+ <input type="text" name="q" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ </div>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ >index</a></li>
+ <li class="right" >
+ <a href="skiboot-6.7.2.html" title="skiboot-6.7.2"
+ >next</a> |</li>
+ <li class="right" >
+ <a href="skiboot-6.7.html" title="skiboot-6.7"
+ >previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
+ </ul>
+ </div>
+ <div class="footer" role="contentinfo">
+ &#169; Copyright 2016-2017, IBM, others.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.7.2.html b/doc/release-notes/skiboot-6.7.2.html
new file mode 100644
index 0000000..afb6e6c
--- /dev/null
+++ b/doc/release-notes/skiboot-6.7.2.html
@@ -0,0 +1,124 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.7.2 &#8212; skiboot e32e57e
+ documentation</title>
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
+
+ <link rel="index" title="Index" href="../genindex.html" />
+ <link rel="search" title="Search" href="../search.html" />
+ <link rel="next" title="skiboot-6.7.3" href="skiboot-6.7.3.html" />
+ <link rel="prev" title="skiboot-6.7.1" href="skiboot-6.7.1.html" />
+ </head><body>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ accesskey="I">index</a></li>
+ <li class="right" >
+ <a href="skiboot-6.7.3.html" title="skiboot-6.7.3"
+ accesskey="N">next</a> |</li>
+ <li class="right" >
+ <a href="skiboot-6.7.1.html" title="skiboot-6.7.1"
+ accesskey="P">previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
+ </ul>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body" role="main">
+
+ <div class="section" id="skiboot-6-7-2">
+<span id="id1"></span><h1>skiboot-6.7.2<a class="headerlink" href="#skiboot-6-7-2" title="Permalink to this headline">¶</a></h1>
+<p>skiboot 6.7.2 was released on Wednesday June 30, 2021. It replaces
+<a class="reference internal" href="skiboot-6.7.1.html#skiboot-6-7-1"><span class="std std-ref">skiboot-6.7.1</span></a> as the current stable release in the 6.7.x series.</p>
+<p>It is recommended that 6.7.2 be used instead of 6.7.1 version due to the
+bug fixes it contains.</p>
+<p>Bug fixes included in this release are:</p>
+<ul class="simple">
+<li>secvar: fix endian conversion</li>
+<li>secvar/secvar_util: Properly free memory on zalloc fail</li>
+<li>edk2-compat-process.c: Remove repetitive debug print statements</li>
+<li>phb4: Avoid MMIO load freeze escalation on every chip</li>
+<li>phb4: Disable TCE cache line buffer</li>
+<li>hw/imc: Disable only nest_imc devices if pause_microcode() fail</li>
+<li>hw/imc: move imc_init() towards end main_cpu_entry()</li>
+<li>Fix lock error when BT IRQ preempt BT timer</li>
+</ul>
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+ <div class="sphinxsidebarwrapper">
+ <h4>Previous topic</h4>
+ <p class="topless"><a href="skiboot-6.7.1.html"
+ title="previous chapter">skiboot-6.7.1</a></p>
+ <h4>Next topic</h4>
+ <p class="topless"><a href="skiboot-6.7.3.html"
+ title="next chapter">skiboot-6.7.3</a></p>
+ <div role="note" aria-label="source link">
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="../_sources/release-notes/skiboot-6.7.2.rst.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ </div>
+<div id="searchbox" style="display: none" role="search">
+ <h3>Quick search</h3>
+ <div class="searchformwrapper">
+ <form class="search" action="../search.html" method="get">
+ <input type="text" name="q" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ </div>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ >index</a></li>
+ <li class="right" >
+ <a href="skiboot-6.7.3.html" title="skiboot-6.7.3"
+ >next</a> |</li>
+ <li class="right" >
+ <a href="skiboot-6.7.1.html" title="skiboot-6.7.1"
+ >previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
+ </ul>
+ </div>
+ <div class="footer" role="contentinfo">
+ &#169; Copyright 2016-2017, IBM, others.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.7.3.html b/doc/release-notes/skiboot-6.7.3.html
new file mode 100644
index 0000000..072db72
--- /dev/null
+++ b/doc/release-notes/skiboot-6.7.3.html
@@ -0,0 +1,124 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.7.3 &#8212; skiboot e32e57e
+ documentation</title>
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
+
+ <link rel="index" title="Index" href="../genindex.html" />
+ <link rel="search" title="Search" href="../search.html" />
+ <link rel="next" title="skiboot-6.8" href="skiboot-6.8.html" />
+ <link rel="prev" title="skiboot-6.7.2" href="skiboot-6.7.2.html" />
+ </head><body>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ accesskey="I">index</a></li>
+ <li class="right" >
+ <a href="skiboot-6.8.html" title="skiboot-6.8"
+ accesskey="N">next</a> |</li>
+ <li class="right" >
+ <a href="skiboot-6.7.2.html" title="skiboot-6.7.2"
+ accesskey="P">previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
+ </ul>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body" role="main">
+
+ <div class="section" id="skiboot-6-7-3">
+<span id="id1"></span><h1>skiboot-6.7.3<a class="headerlink" href="#skiboot-6-7-3" title="Permalink to this headline">¶</a></h1>
+<p>skiboot 6.7.3 was released on Thursday July 22, 2021. It replaces
+<a class="reference internal" href="skiboot-6.7.2.html#skiboot-6-7-2"><span class="std std-ref">skiboot-6.7.2</span></a> as the current stable release in the 6.7.x series.</p>
+<p>It is recommended that 6.7.3 be used instead of 6.7.2 version due to the
+bug fixes it contains.</p>
+<p>Bug fixes included in this release are:</p>
+<ul class="simple">
+<li>pkcs7: pkcs7_get_content_info_type should reset <a href="#id2"><span class="problematic" id="id3">*</span></a>p on error</li>
+<li>secvar/backend: fix a memory leak in get_pkcs7</li>
+<li>secvar/backend: fix an integer underflow bug</li>
+<li>secvar/backend: Don’t overread data in auth descriptor</li>
+<li>secvar: return error if verify_signature runs out of ESLs</li>
+<li>secvar: return error if validate_esl has extra data</li>
+<li>secvar: Make <cite>validate_esl_list</cite> iterate through esl chain</li>
+<li>secvar: ensure ESL buf size is at least what ESL header expects</li>
+</ul>
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+ <div class="sphinxsidebarwrapper">
+ <h4>Previous topic</h4>
+ <p class="topless"><a href="skiboot-6.7.2.html"
+ title="previous chapter">skiboot-6.7.2</a></p>
+ <h4>Next topic</h4>
+ <p class="topless"><a href="skiboot-6.8.html"
+ title="next chapter">skiboot-6.8</a></p>
+ <div role="note" aria-label="source link">
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="../_sources/release-notes/skiboot-6.7.3.rst.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ </div>
+<div id="searchbox" style="display: none" role="search">
+ <h3>Quick search</h3>
+ <div class="searchformwrapper">
+ <form class="search" action="../search.html" method="get">
+ <input type="text" name="q" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ </div>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ >index</a></li>
+ <li class="right" >
+ <a href="skiboot-6.8.html" title="skiboot-6.8"
+ >next</a> |</li>
+ <li class="right" >
+ <a href="skiboot-6.7.2.html" title="skiboot-6.7.2"
+ >previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
+ </ul>
+ </div>
+ <div class="footer" role="contentinfo">
+ &#169; Copyright 2016-2017, IBM, others.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.7.html b/doc/release-notes/skiboot-6.7.html
index f665deb..b57654a 100644
--- a/doc/release-notes/skiboot-6.7.html
+++ b/doc/release-notes/skiboot-6.7.html
@@ -1,23 +1,26 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>skiboot-6.7 &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.7 &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
- <link rel="prev" title="skiboot-6.6.4" href="skiboot-6.6.4.html" />
+ <link rel="next" title="skiboot-6.7.1" href="skiboot-6.7.1.html" />
+ <link rel="prev" title="skiboot-6.6.6" href="skiboot-6.6.6.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
@@ -26,12 +29,14 @@
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
- <a href="skiboot-6.6.4.html" title="skiboot-6.6.4"
+ <a href="skiboot-6.7.1.html" title="skiboot-6.7.1"
+ accesskey="N">next</a> |</li>
+ <li class="right" >
+ <a href="skiboot-6.6.6.html" title="skiboot-6.6.6"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.7</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
</ul>
</div>
@@ -53,19 +58,19 @@ difficult-to-guess name.</p>
<div class="section" id="new-features">
<span id="skiboot-6-7-new-features"></span><h2>New features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p>Secure Variable support</p>
+<li><p class="first">Secure Variable support</p>
<p>The secure variable API provides the host operating system with space to
store cryptographic keys for OS secure boot. The security comes from the
requirement that all secure variable updates be cryptographically signed
so the keys used to verify the secure boot chain can only be updated by
a user authorized to do so.</p>
</li>
-<li><p>Fleetwood platform support</p>
+<li><p class="first">Fleetwood platform support</p>
<p>Support was added for the multi-node IBM Fleetwood systems. This support
was largely for internal IBM testing purposes and is not, and will not, ever
be offically supported.</p>
</li>
-<li><p>Mowgli platform support</p>
+<li><p class="first">Mowgli platform support</p>
<p>Support was added for the Mowgli platform built by Wistron.</p>
</li>
</ul>
@@ -73,7 +78,6 @@ be offically supported.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -88,8 +92,11 @@ be offically supported.</p>
</ul>
<h4>Previous topic</h4>
- <p class="topless"><a href="skiboot-6.6.4.html"
- title="previous chapter">skiboot-6.6.4</a></p>
+ <p class="topless"><a href="skiboot-6.6.6.html"
+ title="previous chapter">skiboot-6.6.6</a></p>
+ <h4>Next topic</h4>
+ <p class="topless"><a href="skiboot-6.7.1.html"
+ title="next chapter">skiboot-6.7.1</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
@@ -98,15 +105,17 @@ be offically supported.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -118,17 +127,19 @@ be offically supported.</p>
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
- <a href="skiboot-6.6.4.html" title="skiboot-6.6.4"
+ <a href="skiboot-6.7.1.html" title="skiboot-6.7.1"
+ >next</a> |</li>
+ <li class="right" >
+ <a href="skiboot-6.6.6.html" title="skiboot-6.6.6"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
documentation</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">skiboot-6.7</a></li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.8.1.html b/doc/release-notes/skiboot-6.8.1.html
new file mode 100644
index 0000000..3be720f
--- /dev/null
+++ b/doc/release-notes/skiboot-6.8.1.html
@@ -0,0 +1,125 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.8.1 &#8212; skiboot e32e57e
+ documentation</title>
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
+
+ <link rel="index" title="Index" href="../genindex.html" />
+ <link rel="search" title="Search" href="../search.html" />
+ <link rel="next" title="skiboot-7.0" href="skiboot-7.0.html" />
+ <link rel="prev" title="skiboot-6.8" href="skiboot-6.8.html" />
+ </head><body>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ accesskey="I">index</a></li>
+ <li class="right" >
+ <a href="skiboot-7.0.html" title="skiboot-7.0"
+ accesskey="N">next</a> |</li>
+ <li class="right" >
+ <a href="skiboot-6.8.html" title="skiboot-6.8"
+ accesskey="P">previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
+ </ul>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body" role="main">
+
+ <div class="section" id="skiboot-6-8-1">
+<span id="id1"></span><h1>skiboot-6.8.1<a class="headerlink" href="#skiboot-6-8-1" title="Permalink to this headline">¶</a></h1>
+<p>skiboot 6.8.1 was released on Thursday July 22, 2021. It replaces
+<a class="reference internal" href="skiboot-6.8.html#skiboot-6-8"><span class="std std-ref">skiboot-6.8</span></a> as the current stable release in the 6.8.x series.</p>
+<p>It is recommended that 6.8.1 be used instead of 6.8 version due to the
+bug fixes it contains.</p>
+<p>Bug fixes included in this release are:</p>
+<ul class="simple">
+<li>pkcs7: pkcs7_get_content_info_type should reset <a href="#id2"><span class="problematic" id="id3">*</span></a>p on error</li>
+<li>secvar/backend: fix a memory leak in get_pkcs7</li>
+<li>secvar/backend: fix an integer underflow bug</li>
+<li>secvar/backend: Don’t overread data in auth descriptor</li>
+<li>secvar: return error if verify_signature runs out of ESLs</li>
+<li>secvar: return error if validate_esl has extra data</li>
+<li>secvar: Make <cite>validate_esl_list</cite> iterate through esl chain</li>
+<li>secvar: ensure ESL buf size is at least what ESL header expects</li>
+<li>secvar: fix endian conversion</li>
+</ul>
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+ <div class="sphinxsidebarwrapper">
+ <h4>Previous topic</h4>
+ <p class="topless"><a href="skiboot-6.8.html"
+ title="previous chapter">skiboot-6.8</a></p>
+ <h4>Next topic</h4>
+ <p class="topless"><a href="skiboot-7.0.html"
+ title="next chapter">skiboot-7.0</a></p>
+ <div role="note" aria-label="source link">
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="../_sources/release-notes/skiboot-6.8.1.rst.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ </div>
+<div id="searchbox" style="display: none" role="search">
+ <h3>Quick search</h3>
+ <div class="searchformwrapper">
+ <form class="search" action="../search.html" method="get">
+ <input type="text" name="q" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ </div>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ >index</a></li>
+ <li class="right" >
+ <a href="skiboot-7.0.html" title="skiboot-7.0"
+ >next</a> |</li>
+ <li class="right" >
+ <a href="skiboot-6.8.html" title="skiboot-6.8"
+ >previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
+ </ul>
+ </div>
+ <div class="footer" role="contentinfo">
+ &#169; Copyright 2016-2017, IBM, others.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-6.8.html b/doc/release-notes/skiboot-6.8.html
new file mode 100644
index 0000000..f44bf26
--- /dev/null
+++ b/doc/release-notes/skiboot-6.8.html
@@ -0,0 +1,115 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-6.8 &#8212; skiboot e32e57e
+ documentation</title>
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
+
+ <link rel="index" title="Index" href="../genindex.html" />
+ <link rel="search" title="Search" href="../search.html" />
+ <link rel="next" title="skiboot-6.8.1" href="skiboot-6.8.1.html" />
+ <link rel="prev" title="skiboot-6.7.3" href="skiboot-6.7.3.html" />
+ </head><body>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ accesskey="I">index</a></li>
+ <li class="right" >
+ <a href="skiboot-6.8.1.html" title="skiboot-6.8.1"
+ accesskey="N">next</a> |</li>
+ <li class="right" >
+ <a href="skiboot-6.7.3.html" title="skiboot-6.7.3"
+ accesskey="P">previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
+ </ul>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body" role="main">
+
+ <div class="section" id="skiboot-6-8">
+<span id="id1"></span><h1>skiboot-6.8<a class="headerlink" href="#skiboot-6-8" title="Permalink to this headline">¶</a></h1>
+<p>skiboot v6.8 was released on Friday May 28th 2021. It is the first release
+of skiboot 6.8 series, which becomes the new stable release following the
+<a class="reference internal" href="skiboot-6.7.html#skiboot-6-7"><span class="std std-ref">skiboot-6.7</span></a> release, first released Tuesday November 3rd 2020.</p>
+<p>This release is entirely focused on bug-fixes and probably first time we have
+not added any new feature. However, this is expected as development has
+largely shifted towards enabling future processor.</p>
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+ <div class="sphinxsidebarwrapper">
+ <h4>Previous topic</h4>
+ <p class="topless"><a href="skiboot-6.7.3.html"
+ title="previous chapter">skiboot-6.7.3</a></p>
+ <h4>Next topic</h4>
+ <p class="topless"><a href="skiboot-6.8.1.html"
+ title="next chapter">skiboot-6.8.1</a></p>
+ <div role="note" aria-label="source link">
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="../_sources/release-notes/skiboot-6.8.rst.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ </div>
+<div id="searchbox" style="display: none" role="search">
+ <h3>Quick search</h3>
+ <div class="searchformwrapper">
+ <form class="search" action="../search.html" method="get">
+ <input type="text" name="q" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ </div>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ >index</a></li>
+ <li class="right" >
+ <a href="skiboot-6.8.1.html" title="skiboot-6.8.1"
+ >next</a> |</li>
+ <li class="right" >
+ <a href="skiboot-6.7.3.html" title="skiboot-6.7.3"
+ >previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
+ </ul>
+ </div>
+ <div class="footer" role="contentinfo">
+ &#169; Copyright 2016-2017, IBM, others.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/doc/release-notes/skiboot-7.0.html b/doc/release-notes/skiboot-7.0.html
new file mode 100644
index 0000000..84ec450
--- /dev/null
+++ b/doc/release-notes/skiboot-7.0.html
@@ -0,0 +1,130 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>skiboot-7.0 &#8212; skiboot e32e57e
+ documentation</title>
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
+
+ <link rel="index" title="Index" href="../genindex.html" />
+ <link rel="search" title="Search" href="../search.html" />
+ <link rel="prev" title="skiboot-6.8.1" href="skiboot-6.8.1.html" />
+ </head><body>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ accesskey="I">index</a></li>
+ <li class="right" >
+ <a href="skiboot-6.8.1.html" title="skiboot-6.8.1"
+ accesskey="P">previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> &#187;</li>
+ </ul>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body" role="main">
+
+ <div class="section" id="skiboot-7-0">
+<span id="id1"></span><h1>skiboot-7.0<a class="headerlink" href="#skiboot-7-0" title="Permalink to this headline">¶</a></h1>
+<p>skiboot v7.0 was released on Tuesday Oct 26th 2021. It is the first release
+of skiboot 7.0 series, which becomes the new stable release following the
+<a class="reference internal" href="skiboot-6.8.html#skiboot-6-8"><span class="std std-ref">skiboot-6.8</span></a> release, first released Friday May 28th 2021.</p>
+<p>This release contains all required feature to support POWER10 systems. This
+shoule be considered as minimal skiboot version required for POWER10 systems.</p>
+<div class="section" id="new-features">
+<h2>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h2>
+<div class="section" id="power10">
+<h3>POWER10<a class="headerlink" href="#power10" title="Permalink to this headline">¶</a></h3>
+<p>Below is the list of major feature apart from base POWER10 enablement related
+changes.</p>
+<ul class="simple">
+<li>Denali and rainier platform support</li>
+<li>XIVE2 interrupt controller support</li>
+<li>PHB5 support</li>
+<li>Support for OpenCAPI Persistent Memory devices</li>
+<li>Power management stop states and PState (OCC) support</li>
+</ul>
+</div>
+</div>
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+ <div class="sphinxsidebarwrapper">
+ <h3><a href="../index.html">Table of Contents</a></h3>
+ <ul>
+<li><a class="reference internal" href="#">skiboot-7.0</a><ul>
+<li><a class="reference internal" href="#new-features">New Features</a><ul>
+<li><a class="reference internal" href="#power10">POWER10</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+
+ <h4>Previous topic</h4>
+ <p class="topless"><a href="skiboot-6.8.1.html"
+ title="previous chapter">skiboot-6.8.1</a></p>
+ <div role="note" aria-label="source link">
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="../_sources/release-notes/skiboot-7.0.rst.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ </div>
+<div id="searchbox" style="display: none" role="search">
+ <h3>Quick search</h3>
+ <div class="searchformwrapper">
+ <form class="search" action="../search.html" method="get">
+ <input type="text" name="q" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ </div>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ >index</a></li>
+ <li class="right" >
+ <a href="skiboot-6.8.1.html" title="skiboot-6.8.1"
+ >previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> &#187;</li>
+ </ul>
+ </div>
+ <div class="footer" role="contentinfo">
+ &#169; Copyright 2016-2017, IBM, others.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/doc/search.html b/doc/search.html
index 8c99b4e..31a995c 100644
--- a/doc/search.html
+++ b/doc/search.html
@@ -1,26 +1,31 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Search &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Search &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
- <script src="_static/searchtools.js"></script>
- <script src="_static/language_data.js"></script>
+ <script type="text/javascript" src="_static/searchtools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="#" />
- <script src="searchindex.js" defer></script>
+ <script type="text/javascript">
+ jQuery(function() { Search.loadIndex("searchindex.js"); });
+ </script>
+
+ <script type="text/javascript" id="searchindexloader"></script>
</head><body>
@@ -30,9 +35,8 @@
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Search</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -42,36 +46,29 @@
<div class="body" role="main">
<h1 id="search-documentation">Search</h1>
-
<div id="fallback" class="admonition warning">
- <script>$('#fallback').hide();</script>
+ <script type="text/javascript">$('#fallback').hide();</script>
<p>
Please activate JavaScript to enable the search
functionality.
</p>
</div>
-
-
<p>
- Searching for multiple words only shows matches that contain
- all words.
+ From here you can search these documents. Enter your search
+ words into the box below and click "search". Note that the search
+ function will automatically search for all of the words. Pages
+ containing fewer words won't appear in the result list.
</p>
-
-
<form action="" method="get">
- <input type="text" name="q" aria-labelledby="search-documentation" value="" />
+ <input type="text" name="q" value="" />
<input type="submit" value="search" />
<span id="search-progress" style="padding-left: 10px"></span>
</form>
-
-
<div id="search-results">
</div>
-
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -87,14 +84,13 @@
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Search</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/searchindex.js b/doc/searchindex.js
index 6642b2d..e7b65cc 100644
--- a/doc/searchindex.js
+++ b/doc/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["bmc","console-log","device-tree","device-tree/ibm,cvc","device-tree/ibm,firmware-versions","device-tree/ibm,opal","device-tree/ibm,opal/diagnostics","device-tree/ibm,opal/dump","device-tree/ibm,opal/firmware","device-tree/ibm,opal/flash","device-tree/ibm,opal/led","device-tree/ibm,opal/nvram","device-tree/ibm,opal/oppanel","device-tree/ibm,opal/power-mgt","device-tree/ibm,opal/power-mgt/occ","device-tree/ibm,opal/power-mgt/powercap","device-tree/ibm,opal/power-mgt/psr","device-tree/ibm,opal/secvar","device-tree/ibm,opal/sensor-groups","device-tree/ibm,opal/sensors","device-tree/ibm,opal/sysparams","device-tree/ibm,powerpc-cpu-features/binding","device-tree/ibm,powerpc-cpu-features/design","device-tree/ibm,secureboot","device-tree/imc","device-tree/index","device-tree/memory-hierarchy","device-tree/nvlink","device-tree/nx","device-tree/opencapi","device-tree/pci","device-tree/reserved-memory","device-tree/tpm","device-tree/vas","device-tree/vpd","error-logging","gcov","imc","index","memory","mpipl","nvlink","opal-api/index","opal-api/opal-cec-power-down-5","opal-api/opal-cec-reboot-6-116","opal-api/opal-check-async-completion-86","opal-api/opal-check-token-80","opal-api/opal-code-update-76-77-78","opal-api/opal-config-cpu-idle-state-99","opal-api/opal-console-read-write-1-2","opal-api/opal-dump-81-82-83-84-94-101-102","opal-api/opal-elog-71-72-73-74-75","opal-api/opal-flash-110-111-112","opal-api/opal-get-device-tree-118","opal-api/opal-get-epow-status-56","opal-api/opal-get-msg-85","opal-api/opal-get-msi-39-40","opal-api/opal-get-xive-20","opal-api/opal-handle-hmi-98-166","opal-api/opal-handle-interrupt","opal-api/opal-i2c-request-109","opal-api/opal-imc-counters","opal-api/opal-int-eoi-124","opal-api/opal-int-get-xirr-122","opal-api/opal-int-set-cppr-123","opal-api/opal-int-set-mfrr-125","opal-api/opal-invalid-call--1","opal-api/opal-ipmi-send-recv-107-108","opal-api/opal-led-get-set-114-115","opal-api/opal-lpc-read-write-67-68","opal-api/opal-messages","opal-api/opal-mpipl-173-174","opal-api/opal-nmmu-set-ptcr-127","opal-api/opal-npu2-146-147-148","opal-api/opal-npu2-get-set-relaxed-order-168-169","opal-api/opal-npu2-opencapi-159-160-161-171-172","opal-api/opal-nvram-read-write-7-8","opal-api/opal-param-89-90","opal-api/opal-pci-config-read-write-13-14-15-16-17-18","opal-api/opal-pci-eeh-freeze-clear-26","opal-api/opal-pci-eeh-freeze-set-97","opal-api/opal-pci-eeh-freeze-status-23","opal-api/opal-pci-err-inject-96","opal-api/opal-pci-get-hub-diag-data-50","opal-api/opal-pci-get-phb-diag-data2-64","opal-api/opal-pci-get-power-state-120","opal-api/opal-pci-get-presence-state-119","opal-api/opal-pci-get-set-pbcq-tunnel-bar-164-165","opal-api/opal-pci-map-pe-dma-window-44","opal-api/opal-pci-map-pe-dma-window-real-45","opal-api/opal-pci-map-pe-mmio-window-29","opal-api/opal-pci-msi-eoi-63","opal-api/opal-pci-next-error-60","opal-api/opal-pci-phb-mmio-enable-27","opal-api/opal-pci-poll-62","opal-api/opal-pci-reinit-53","opal-api/opal-pci-reset-49","opal-api/opal-pci-set-mve-33","opal-api/opal-pci-set-mve-enable-34","opal-api/opal-pci-set-p2p-157","opal-api/opal-pci-set-pe-31","opal-api/opal-pci-set-peltv-32","opal-api/opal-pci-set-phb-capi-mode-93","opal-api/opal-pci-set-phb-mem-window-28","opal-api/opal-pci-set-power-state-121","opal-api/opal-pci-set-xive-pe-37","opal-api/opal-pci-tce-kill-126","opal-api/opal-phb-flag-set-get-179-180","opal-api/opal-poll-events","opal-api/opal-power-shift-ratio","opal-api/opal-powercap","opal-api/opal-prd-msg-113","opal-api/opal-query-cpu-status-42","opal-api/opal-quiesce-158","opal-api/opal-read-write-tpo-dpo-103-104-105","opal-api/opal-reinit-cpus-70","opal-api/opal-resync-timebase-79","opal-api/opal-rtc-read-write-3-4","opal-api/opal-secvar","opal-api/opal-sensor-group-enable-clear-163-156","opal-api/opal-sensor-read-88","opal-api/opal-set-xive-19","opal-api/opal-signal-system-reset-145","opal-api/opal-slw-set-reg-100","opal-api/opal-start-return-cpu-41-69","opal-api/opal-sync-host-reboot-87","opal-api/opal-test-0","opal-api/opal-write-oppanel-async-95","opal-api/opal-xscom-read-write-65-66","opal-api/opal_nx_coproc_init-167","opal-api/power9-changes","opal-api/return-codes","opal-spec","overview","pci","pci-slot","platforms-and-cpus","power-management","process/CONTRIBUTING","process/dev-release-process","process/stable-skiboot-rules","process/versioning","release-notes/index","release-notes/skiboot-4.0","release-notes/skiboot-4.1","release-notes/skiboot-4.1.1","release-notes/skiboot-5.0","release-notes/skiboot-5.1.0","release-notes/skiboot-5.1.0-beta1","release-notes/skiboot-5.1.0-beta2","release-notes/skiboot-5.1.1","release-notes/skiboot-5.1.10","release-notes/skiboot-5.1.11","release-notes/skiboot-5.1.12","release-notes/skiboot-5.1.13","release-notes/skiboot-5.1.14","release-notes/skiboot-5.1.15","release-notes/skiboot-5.1.16","release-notes/skiboot-5.1.17","release-notes/skiboot-5.1.18","release-notes/skiboot-5.1.19","release-notes/skiboot-5.1.2","release-notes/skiboot-5.1.20","release-notes/skiboot-5.1.21","release-notes/skiboot-5.1.3","release-notes/skiboot-5.1.4","release-notes/skiboot-5.1.5","release-notes/skiboot-5.1.6","release-notes/skiboot-5.1.7","release-notes/skiboot-5.1.8","release-notes/skiboot-5.1.9","release-notes/skiboot-5.10","release-notes/skiboot-5.10-rc1","release-notes/skiboot-5.10-rc2","release-notes/skiboot-5.10-rc3","release-notes/skiboot-5.10-rc4","release-notes/skiboot-5.10.1","release-notes/skiboot-5.10.2","release-notes/skiboot-5.10.3","release-notes/skiboot-5.10.4","release-notes/skiboot-5.10.5","release-notes/skiboot-5.10.6","release-notes/skiboot-5.11","release-notes/skiboot-5.11-rc1","release-notes/skiboot-5.2.0","release-notes/skiboot-5.2.0-rc1","release-notes/skiboot-5.2.0-rc2","release-notes/skiboot-5.2.1","release-notes/skiboot-5.2.2","release-notes/skiboot-5.2.3","release-notes/skiboot-5.2.4","release-notes/skiboot-5.2.5","release-notes/skiboot-5.3.0","release-notes/skiboot-5.3.0-rc1","release-notes/skiboot-5.3.0-rc2","release-notes/skiboot-5.3.1","release-notes/skiboot-5.3.2","release-notes/skiboot-5.3.3","release-notes/skiboot-5.3.4","release-notes/skiboot-5.3.5","release-notes/skiboot-5.3.6","release-notes/skiboot-5.3.7","release-notes/skiboot-5.4.0","release-notes/skiboot-5.4.0-rc1","release-notes/skiboot-5.4.0-rc2","release-notes/skiboot-5.4.0-rc3","release-notes/skiboot-5.4.0-rc4","release-notes/skiboot-5.4.1","release-notes/skiboot-5.4.10","release-notes/skiboot-5.4.11","release-notes/skiboot-5.4.12","release-notes/skiboot-5.4.2","release-notes/skiboot-5.4.3","release-notes/skiboot-5.4.4","release-notes/skiboot-5.4.5","release-notes/skiboot-5.4.6","release-notes/skiboot-5.4.7","release-notes/skiboot-5.4.8","release-notes/skiboot-5.4.9","release-notes/skiboot-5.5.0","release-notes/skiboot-5.5.0-rc1","release-notes/skiboot-5.5.0-rc2","release-notes/skiboot-5.5.0-rc3","release-notes/skiboot-5.6.0","release-notes/skiboot-5.6.0-rc1","release-notes/skiboot-5.6.0-rc2","release-notes/skiboot-5.7","release-notes/skiboot-5.7-rc1","release-notes/skiboot-5.7-rc2","release-notes/skiboot-5.8","release-notes/skiboot-5.8-rc1","release-notes/skiboot-5.9","release-notes/skiboot-5.9-rc1","release-notes/skiboot-5.9-rc2","release-notes/skiboot-5.9-rc3","release-notes/skiboot-5.9-rc4","release-notes/skiboot-5.9-rc5","release-notes/skiboot-5.9.1","release-notes/skiboot-5.9.2","release-notes/skiboot-5.9.3","release-notes/skiboot-5.9.4","release-notes/skiboot-5.9.5","release-notes/skiboot-5.9.6","release-notes/skiboot-5.9.7","release-notes/skiboot-5.9.8","release-notes/skiboot-5.9.9","release-notes/skiboot-6.0","release-notes/skiboot-6.0-rc1","release-notes/skiboot-6.0-rc2","release-notes/skiboot-6.0.1","release-notes/skiboot-6.0.10","release-notes/skiboot-6.0.11","release-notes/skiboot-6.0.12","release-notes/skiboot-6.0.13","release-notes/skiboot-6.0.14","release-notes/skiboot-6.0.15","release-notes/skiboot-6.0.16","release-notes/skiboot-6.0.17","release-notes/skiboot-6.0.18","release-notes/skiboot-6.0.19","release-notes/skiboot-6.0.2","release-notes/skiboot-6.0.20","release-notes/skiboot-6.0.21","release-notes/skiboot-6.0.22","release-notes/skiboot-6.0.23","release-notes/skiboot-6.0.3","release-notes/skiboot-6.0.4","release-notes/skiboot-6.0.5","release-notes/skiboot-6.0.6","release-notes/skiboot-6.0.7","release-notes/skiboot-6.0.8","release-notes/skiboot-6.0.9","release-notes/skiboot-6.1","release-notes/skiboot-6.1-rc1","release-notes/skiboot-6.2","release-notes/skiboot-6.2-rc1","release-notes/skiboot-6.2-rc2","release-notes/skiboot-6.2.1","release-notes/skiboot-6.2.2","release-notes/skiboot-6.2.3","release-notes/skiboot-6.2.4","release-notes/skiboot-6.3","release-notes/skiboot-6.3-rc1","release-notes/skiboot-6.3-rc2","release-notes/skiboot-6.3-rc3","release-notes/skiboot-6.3.1","release-notes/skiboot-6.3.2","release-notes/skiboot-6.3.3","release-notes/skiboot-6.3.4","release-notes/skiboot-6.3.5","release-notes/skiboot-6.4","release-notes/skiboot-6.4-rc1","release-notes/skiboot-6.5","release-notes/skiboot-6.5.1","release-notes/skiboot-6.5.2","release-notes/skiboot-6.5.3","release-notes/skiboot-6.5.4","release-notes/skiboot-6.6","release-notes/skiboot-6.6.1","release-notes/skiboot-6.6.2","release-notes/skiboot-6.6.3","release-notes/skiboot-6.6.4","release-notes/skiboot-6.7","secvar/driver-api","secvar/edk2","secvar/secboot_tpm","stb","vas","xive","xscom-node-bindings"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["bmc.rst","console-log.rst","device-tree.rst","device-tree/ibm,cvc.rst","device-tree/ibm,firmware-versions.rst","device-tree/ibm,opal.rst","device-tree/ibm,opal/diagnostics.rst","device-tree/ibm,opal/dump.rst","device-tree/ibm,opal/firmware.rst","device-tree/ibm,opal/flash.rst","device-tree/ibm,opal/led.rst","device-tree/ibm,opal/nvram.rst","device-tree/ibm,opal/oppanel.rst","device-tree/ibm,opal/power-mgt.rst","device-tree/ibm,opal/power-mgt/occ.rst","device-tree/ibm,opal/power-mgt/powercap.rst","device-tree/ibm,opal/power-mgt/psr.rst","device-tree/ibm,opal/secvar.rst","device-tree/ibm,opal/sensor-groups.rst","device-tree/ibm,opal/sensors.rst","device-tree/ibm,opal/sysparams.rst","device-tree/ibm,powerpc-cpu-features/binding.rst","device-tree/ibm,powerpc-cpu-features/design.rst","device-tree/ibm,secureboot.rst","device-tree/imc.rst","device-tree/index.rst","device-tree/memory-hierarchy.rst","device-tree/nvlink.rst","device-tree/nx.rst","device-tree/opencapi.rst","device-tree/pci.rst","device-tree/reserved-memory.rst","device-tree/tpm.rst","device-tree/vas.rst","device-tree/vpd.rst","error-logging.rst","gcov.rst","imc.rst","index.rst","memory.rst","mpipl.rst","nvlink.rst","opal-api/index.rst","opal-api/opal-cec-power-down-5.rst","opal-api/opal-cec-reboot-6-116.rst","opal-api/opal-check-async-completion-86.rst","opal-api/opal-check-token-80.rst","opal-api/opal-code-update-76-77-78.rst","opal-api/opal-config-cpu-idle-state-99.rst","opal-api/opal-console-read-write-1-2.rst","opal-api/opal-dump-81-82-83-84-94-101-102.rst","opal-api/opal-elog-71-72-73-74-75.rst","opal-api/opal-flash-110-111-112.rst","opal-api/opal-get-device-tree-118.rst","opal-api/opal-get-epow-status-56.rst","opal-api/opal-get-msg-85.rst","opal-api/opal-get-msi-39-40.rst","opal-api/opal-get-xive-20.rst","opal-api/opal-handle-hmi-98-166.rst","opal-api/opal-handle-interrupt.rst","opal-api/opal-i2c-request-109.rst","opal-api/opal-imc-counters.rst","opal-api/opal-int-eoi-124.rst","opal-api/opal-int-get-xirr-122.rst","opal-api/opal-int-set-cppr-123.rst","opal-api/opal-int-set-mfrr-125.rst","opal-api/opal-invalid-call--1.rst","opal-api/opal-ipmi-send-recv-107-108.rst","opal-api/opal-led-get-set-114-115.rst","opal-api/opal-lpc-read-write-67-68.rst","opal-api/opal-messages.rst","opal-api/opal-mpipl-173-174.rst","opal-api/opal-nmmu-set-ptcr-127.rst","opal-api/opal-npu2-146-147-148.rst","opal-api/opal-npu2-get-set-relaxed-order-168-169.rst","opal-api/opal-npu2-opencapi-159-160-161-171-172.rst","opal-api/opal-nvram-read-write-7-8.rst","opal-api/opal-param-89-90.rst","opal-api/opal-pci-config-read-write-13-14-15-16-17-18.rst","opal-api/opal-pci-eeh-freeze-clear-26.rst","opal-api/opal-pci-eeh-freeze-set-97.rst","opal-api/opal-pci-eeh-freeze-status-23.rst","opal-api/opal-pci-err-inject-96.rst","opal-api/opal-pci-get-hub-diag-data-50.rst","opal-api/opal-pci-get-phb-diag-data2-64.rst","opal-api/opal-pci-get-power-state-120.rst","opal-api/opal-pci-get-presence-state-119.rst","opal-api/opal-pci-get-set-pbcq-tunnel-bar-164-165.rst","opal-api/opal-pci-map-pe-dma-window-44.rst","opal-api/opal-pci-map-pe-dma-window-real-45.rst","opal-api/opal-pci-map-pe-mmio-window-29.rst","opal-api/opal-pci-msi-eoi-63.rst","opal-api/opal-pci-next-error-60.rst","opal-api/opal-pci-phb-mmio-enable-27.rst","opal-api/opal-pci-poll-62.rst","opal-api/opal-pci-reinit-53.rst","opal-api/opal-pci-reset-49.rst","opal-api/opal-pci-set-mve-33.rst","opal-api/opal-pci-set-mve-enable-34.rst","opal-api/opal-pci-set-p2p-157.rst","opal-api/opal-pci-set-pe-31.rst","opal-api/opal-pci-set-peltv-32.rst","opal-api/opal-pci-set-phb-capi-mode-93.rst","opal-api/opal-pci-set-phb-mem-window-28.rst","opal-api/opal-pci-set-power-state-121.rst","opal-api/opal-pci-set-xive-pe-37.rst","opal-api/opal-pci-tce-kill-126.rst","opal-api/opal-phb-flag-set-get-179-180.rst","opal-api/opal-poll-events.rst","opal-api/opal-power-shift-ratio.rst","opal-api/opal-powercap.rst","opal-api/opal-prd-msg-113.rst","opal-api/opal-query-cpu-status-42.rst","opal-api/opal-quiesce-158.rst","opal-api/opal-read-write-tpo-dpo-103-104-105.rst","opal-api/opal-reinit-cpus-70.rst","opal-api/opal-resync-timebase-79.rst","opal-api/opal-rtc-read-write-3-4.rst","opal-api/opal-secvar.rst","opal-api/opal-sensor-group-enable-clear-163-156.rst","opal-api/opal-sensor-read-88.rst","opal-api/opal-set-xive-19.rst","opal-api/opal-signal-system-reset-145.rst","opal-api/opal-slw-set-reg-100.rst","opal-api/opal-start-return-cpu-41-69.rst","opal-api/opal-sync-host-reboot-87.rst","opal-api/opal-test-0.rst","opal-api/opal-write-oppanel-async-95.rst","opal-api/opal-xscom-read-write-65-66.rst","opal-api/opal_nx_coproc_init-167.rst","opal-api/power9-changes.rst","opal-api/return-codes.rst","opal-spec.rst","overview.rst","pci.rst","pci-slot.rst","platforms-and-cpus.rst","power-management.rst","process/CONTRIBUTING.md","process/dev-release-process.rst","process/stable-skiboot-rules.rst","process/versioning.rst","release-notes/index.rst","release-notes/skiboot-4.0.rst","release-notes/skiboot-4.1.rst","release-notes/skiboot-4.1.1.rst","release-notes/skiboot-5.0.rst","release-notes/skiboot-5.1.0.rst","release-notes/skiboot-5.1.0-beta1.rst","release-notes/skiboot-5.1.0-beta2.rst","release-notes/skiboot-5.1.1.rst","release-notes/skiboot-5.1.10.rst","release-notes/skiboot-5.1.11.rst","release-notes/skiboot-5.1.12.rst","release-notes/skiboot-5.1.13.rst","release-notes/skiboot-5.1.14.rst","release-notes/skiboot-5.1.15.rst","release-notes/skiboot-5.1.16.rst","release-notes/skiboot-5.1.17.rst","release-notes/skiboot-5.1.18.rst","release-notes/skiboot-5.1.19.rst","release-notes/skiboot-5.1.2.rst","release-notes/skiboot-5.1.20.rst","release-notes/skiboot-5.1.21.rst","release-notes/skiboot-5.1.3.rst","release-notes/skiboot-5.1.4.rst","release-notes/skiboot-5.1.5.rst","release-notes/skiboot-5.1.6.rst","release-notes/skiboot-5.1.7.rst","release-notes/skiboot-5.1.8.rst","release-notes/skiboot-5.1.9.rst","release-notes/skiboot-5.10.rst","release-notes/skiboot-5.10-rc1.rst","release-notes/skiboot-5.10-rc2.rst","release-notes/skiboot-5.10-rc3.rst","release-notes/skiboot-5.10-rc4.rst","release-notes/skiboot-5.10.1.rst","release-notes/skiboot-5.10.2.rst","release-notes/skiboot-5.10.3.rst","release-notes/skiboot-5.10.4.rst","release-notes/skiboot-5.10.5.rst","release-notes/skiboot-5.10.6.rst","release-notes/skiboot-5.11.rst","release-notes/skiboot-5.11-rc1.rst","release-notes/skiboot-5.2.0.rst","release-notes/skiboot-5.2.0-rc1.rst","release-notes/skiboot-5.2.0-rc2.rst","release-notes/skiboot-5.2.1.rst","release-notes/skiboot-5.2.2.rst","release-notes/skiboot-5.2.3.rst","release-notes/skiboot-5.2.4.rst","release-notes/skiboot-5.2.5.rst","release-notes/skiboot-5.3.0.rst","release-notes/skiboot-5.3.0-rc1.rst","release-notes/skiboot-5.3.0-rc2.rst","release-notes/skiboot-5.3.1.rst","release-notes/skiboot-5.3.2.rst","release-notes/skiboot-5.3.3.rst","release-notes/skiboot-5.3.4.rst","release-notes/skiboot-5.3.5.rst","release-notes/skiboot-5.3.6.rst","release-notes/skiboot-5.3.7.rst","release-notes/skiboot-5.4.0.rst","release-notes/skiboot-5.4.0-rc1.rst","release-notes/skiboot-5.4.0-rc2.rst","release-notes/skiboot-5.4.0-rc3.rst","release-notes/skiboot-5.4.0-rc4.rst","release-notes/skiboot-5.4.1.rst","release-notes/skiboot-5.4.10.rst","release-notes/skiboot-5.4.11.rst","release-notes/skiboot-5.4.12.rst","release-notes/skiboot-5.4.2.rst","release-notes/skiboot-5.4.3.rst","release-notes/skiboot-5.4.4.rst","release-notes/skiboot-5.4.5.rst","release-notes/skiboot-5.4.6.rst","release-notes/skiboot-5.4.7.rst","release-notes/skiboot-5.4.8.rst","release-notes/skiboot-5.4.9.rst","release-notes/skiboot-5.5.0.rst","release-notes/skiboot-5.5.0-rc1.rst","release-notes/skiboot-5.5.0-rc2.rst","release-notes/skiboot-5.5.0-rc3.rst","release-notes/skiboot-5.6.0.rst","release-notes/skiboot-5.6.0-rc1.rst","release-notes/skiboot-5.6.0-rc2.rst","release-notes/skiboot-5.7.rst","release-notes/skiboot-5.7-rc1.rst","release-notes/skiboot-5.7-rc2.rst","release-notes/skiboot-5.8.rst","release-notes/skiboot-5.8-rc1.rst","release-notes/skiboot-5.9.rst","release-notes/skiboot-5.9-rc1.rst","release-notes/skiboot-5.9-rc2.rst","release-notes/skiboot-5.9-rc3.rst","release-notes/skiboot-5.9-rc4.rst","release-notes/skiboot-5.9-rc5.rst","release-notes/skiboot-5.9.1.rst","release-notes/skiboot-5.9.2.rst","release-notes/skiboot-5.9.3.rst","release-notes/skiboot-5.9.4.rst","release-notes/skiboot-5.9.5.rst","release-notes/skiboot-5.9.6.rst","release-notes/skiboot-5.9.7.rst","release-notes/skiboot-5.9.8.rst","release-notes/skiboot-5.9.9.rst","release-notes/skiboot-6.0.rst","release-notes/skiboot-6.0-rc1.rst","release-notes/skiboot-6.0-rc2.rst","release-notes/skiboot-6.0.1.rst","release-notes/skiboot-6.0.10.rst","release-notes/skiboot-6.0.11.rst","release-notes/skiboot-6.0.12.rst","release-notes/skiboot-6.0.13.rst","release-notes/skiboot-6.0.14.rst","release-notes/skiboot-6.0.15.rst","release-notes/skiboot-6.0.16.rst","release-notes/skiboot-6.0.17.rst","release-notes/skiboot-6.0.18.rst","release-notes/skiboot-6.0.19.rst","release-notes/skiboot-6.0.2.rst","release-notes/skiboot-6.0.20.rst","release-notes/skiboot-6.0.21.rst","release-notes/skiboot-6.0.22.rst","release-notes/skiboot-6.0.23.rst","release-notes/skiboot-6.0.3.rst","release-notes/skiboot-6.0.4.rst","release-notes/skiboot-6.0.5.rst","release-notes/skiboot-6.0.6.rst","release-notes/skiboot-6.0.7.rst","release-notes/skiboot-6.0.8.rst","release-notes/skiboot-6.0.9.rst","release-notes/skiboot-6.1.rst","release-notes/skiboot-6.1-rc1.rst","release-notes/skiboot-6.2.rst","release-notes/skiboot-6.2-rc1.rst","release-notes/skiboot-6.2-rc2.rst","release-notes/skiboot-6.2.1.rst","release-notes/skiboot-6.2.2.rst","release-notes/skiboot-6.2.3.rst","release-notes/skiboot-6.2.4.rst","release-notes/skiboot-6.3.rst","release-notes/skiboot-6.3-rc1.rst","release-notes/skiboot-6.3-rc2.rst","release-notes/skiboot-6.3-rc3.rst","release-notes/skiboot-6.3.1.rst","release-notes/skiboot-6.3.2.rst","release-notes/skiboot-6.3.3.rst","release-notes/skiboot-6.3.4.rst","release-notes/skiboot-6.3.5.rst","release-notes/skiboot-6.4.rst","release-notes/skiboot-6.4-rc1.rst","release-notes/skiboot-6.5.rst","release-notes/skiboot-6.5.1.rst","release-notes/skiboot-6.5.2.rst","release-notes/skiboot-6.5.3.rst","release-notes/skiboot-6.5.4.rst","release-notes/skiboot-6.6.rst","release-notes/skiboot-6.6.1.rst","release-notes/skiboot-6.6.2.rst","release-notes/skiboot-6.6.3.rst","release-notes/skiboot-6.6.4.rst","release-notes/skiboot-6.7.rst","secvar/driver-api.rst","secvar/edk2.rst","secvar/secboot_tpm.rst","stb.rst","vas.rst","xive.rst","xscom-node-bindings.rst"],objects:{},objnames:{},objtypes:{},terms:{"0":[1,2,4,8,9,16,21,22,24,27,28,29,30,33,35,36,38,39,41,42,43,44,46,47,48,49,51,54,56,58,60,69,70,71,73,81,82,87,88,89,90,92,93,96,97,98,100,101,102,103,105,106,107,113,115,117,121,122,126,130,131,132,133,134,137,139,141,142,150,153,161,162,164,171,172,173,174,177,181,182,183,187,189,190,195,196,197,198,199,200,201,207,213,214,215,217,226,227,228,229,230,231,232,233,237,272,273,274,275,276,277,279,280,281,282,283,284,286,287,288,290,291,297,305,308,309],"00":[4,30,35,39,117,164,182,183,206,213,220,231,232,235,236,246,247,281,282,284,287,308],"000":[1,24,84,171,172,245],"0000":[134,171,173,182,229,230,246,247,256,272,273,277,280,281,282,284],"00000":[27,254,274,275],"000000":[117,201],"0000000":[26,171,172,182,183,249,281,284],"00000000":[35,157,162,171,173,182,183,187,201,214,224,226,228,272,273,281,284],"0000000000000000":[162,171,173,182,183,215,226,227,246,247],"0000000000000001":[246,247],"0000000000000010":[182,183,224],"0000000000000028":[182,183],"0000000000000080":[246,247],"0000000000000180":[162,214],"0000000000001f00":224,"0000000000001f10":[182,183,271,274,275],"0000000000008000":[246,247],"0000000000029320":[254,274,275],"0000000002000000":[246,247],"0000000020004208":[182,183],"0000000028024442":[162,215,226,227],"0000000030002648":224,"0000000030002700":[182,271,272,273,274,275],"0000000030002718":[280,281,282],"0000000030002770":[182,183],"00000000300027b4":[171,173],"00000000300029f4":[171,174],"0000000030002a4c":[261,280,281,282],"0000000030005128":[162,215,226,227],"00000000300051c4":[182,183],"00000000300051dc":[246,247],"0000000030012c70":[272,273],"00000000300130cc":[272,273],"000000003001362c":[182,183],"000000003001364c":224,"000000003001367c":[171,174],"0000000030013b0c":182,"0000000030013bbc":182,"00000000300142d8":[171,174],"000000003001447c":[182,183],"00000000300144c8":[182,183,224],"00000000300146d8":[261,280,281,282],"000000003001480c":[272,273],"0000000030014814":[280,281,282],"00000000300149e8":[171,173],"0000000030014ca4":[271,274,275],"0000000030014cb0":[182,183],"0000000030014d04":[182,183],"0000000030015050":182,"0000000030015164":[280,281,282],"000000003001571c":[272,273],"00000000300168fc":[162,214],"0000000030016968":[162,214],"0000000030017ff0":[182,183],"0000000030018db8":224,"00000000300190ac":[272,273],"00000000300192e0":[272,273],"0000000030019aa8":182,"0000000030019c70":[256,277],"0000000030019e38":[182,183],"000000003001a03c":[171,174],"000000003001a040":[256,277],"000000003001a0c4":[256,277],"000000003001a51c":[271,274,275],"000000003001a548":[246,247],"000000003001af60":[261,280,281,282],"000000003001afdc":[261,280,281,282],"000000003001b274":[280,281,282],"000000003001b2f0":[280,281,282],"000000003001b520":182,"000000003001baac":[246,247],"000000003001bcbc":[246,247],"000000003001bd18":182,"000000003001d840":[256,277],"000000003001e27c":[182,183],"000000003001e588":[182,183],"000000003001ee74":[182,183],"0000000030024804":224,"00000000300248b8":224,"0000000030024b50":224,"000000003002586c":[171,174],"0000000030025c6c":224,"000000003002602c":[182,183],"0000000030026040":[182,183],"0000000030026054":[182,183],"00000000300267d8":[171,174],"000000003002682c":[182,183],"0000000030026a28":[171,174],"0000000030026cf0":[261,280,281,282],"000000003002760c":[182,183],"0000000030028170":[271,274,275],"000000003002ad68":[171,173],"000000003002ad80":[171,173],"0000000030030240":[178,182,183],"0000000030030258":[178,182,183],"000000003003025c":[178,182,183],"0000000030030e08":[182,183],"00000000300347bc":[272,273],"0000000030034844":[272,273],"00000000300364a4":[272,273],"000000003003e434":[178,182,183],"000000003003ea3c":[171,174],"000000003004ab48":[272,273],"000000003006dd70":[162,215,226,227],"000000003006ecb0":[271,274,275],"000000003006ecd4":[271,274,275],"0000000030090c28":224,"000000003009102c":[182,183],"0000000030091054":[182,183],"0000000030093d80":[171,173],"0000000030093ffc":224,"000000003009abec":224,"00000000300b3dc6":[182,183],"00000000300b4f3e":[182,183],"00000000300b58bc":[171,173],"00000000300b5964":[171,173],"00000000300b98a0":[271,274,275],"00000000300bb6d2":[182,183],"00000000300be6fb":[182,183],"00000000300c5b70":182,"00000000300cb808":[272,273],"00000000300cb910":[272,273],"00000000300fd500":[182,183],"0000000030767d38":[182,183],"0000000031c03370":[272,273],"0000000031c03410":[272,273],"0000000031c034b0":[272,273],"0000000031c03540":[272,273],"0000000031c03600":[272,273],"0000000031c036d0":[272,273],"0000000031c03780":[272,273],"0000000031c03930":[256,277],"0000000031c03970":[272,273],"0000000031c039c0":[256,277],"0000000031c03a00":[272,273],"0000000031c03a50":[256,277],"0000000031c03af0":[256,277],"0000000031c03b90":[272,273],"0000000031c03ba0":[246,247],"0000000031c03bc0":[171,173],"0000000031c03bd0":[171,173],"0000000031c03c20":[246,247],"0000000031c03ca0":[246,247],"0000000031c03d20":[246,247],"0000000031c03d50":[272,273],"0000000031c03e30":[272,273],"0000000031c03f00":[272,273],"0000000031c13ab0":182,"0000000031c13b50":182,"0000000031c13be0":182,"0000000031c13c60":182,"0000000031c13d00":182,"0000000031c13d90":182,"0000000031c13e30":182,"0000000031c13f00":182,"0000000031c20000":[182,183],"0000000031c23670":[182,183],"0000000031c23910":[182,183],"0000000031c23930":[182,183],"0000000031cc37e0":[271,274,275],"0000000031cc3860":[271,274,275],"0000000031cc3a40":[271,274,275],"0000000031cc3c20":[271,274,275],"0000000031cc3e30":[271,274,275],"0000000031cc3f00":[271,274,275],"0000000031cd3370":[182,183],"0000000031cd3410":[182,183],"0000000031cd3490":[182,183],"0000000031cd3670":[182,183],"0000000031cd36a0":224,"0000000031cd3730":224,"0000000031cd37b0":224,"0000000031cd3840":224,"0000000031cd3850":[182,183],"0000000031cd38e0":[182,183],"0000000031cd3960":[182,183],"0000000031cd3a10":224,"0000000031cd3a30":[182,183],"0000000031cd3aa0":224,"0000000031cd3ab0":224,"0000000031cd3ac0":[182,183],"0000000031cd3b30":224,"0000000031cd3ba0":[182,183],"0000000031cd3bd0":224,"0000000031cd3cb0":[182,183],"0000000031cd3cf0":224,"0000000031cd3d40":[182,183],"0000000031cd3e00":[182,183],"0000000031cd3e30":224,"0000000031cd3e80":[182,183],"0000000031cd3f00":[182,183,224],"0000000031d43c60":[280,281,282],"0000000031d43ce0":[280,281,282],"0000000031d43d60":[280,281,282],"0000000031d43e30":[280,281,282],"0000000031d43f00":[280,281,282],"0000000031d639d0":[171,174],"0000000031d63a60":[171,174],"0000000031d63ae0":[171,174],"0000000031d63b70":[171,174],"0000000031d63c10":[171,174],"0000000031d63d90":[171,174],"0000000031d63e70":[171,174],"0000000031d63f00":[171,174],"0000000031e03ca0":[261,280,281,282],"0000000031e03d20":[261,280,281,282],"0000000031e03da0":[261,280,281,282],"0000000031e03e70":[261,280,281,282],"0000000031e03f00":[261,280,281,282],"0000000031fc4000":[162,215,226,227],"0000000102016890":[254,274,275],"00000008":[178,182,183,272,273],"0000000c":[171,172,226,228],"00000010":35,"0000001f":[229,230],"00000020":35,"0000002c":[231,232],"00000030":35,"00000032":[171,172],"00000040":35,"00000048":35,"00000050":35,"00000060":35,"00000070":35,"00000080":35,"00000085":[231,232],"00000090":35,"000000a0":35,"000000b0":35,"000000bd":[171,172],"000000c0":35,"000000d0":35,"000000e0":35,"000000f0":35,"00000100":35,"00000110":35,"00000120":35,"00000130":35,"00000140":35,"00000150":35,"00000160":35,"00000170":35,"00000180":35,"00000190":35,"000001a0":35,"000001b0":35,"000001c0":35,"000001d0":35,"000001e0":35,"0000080000000000":182,"000008e8":[157,187],"00000fff":[281,284],"00002000":35,"00002fffffff":[182,183],"0000303fffff":[182,183],"000030ffffff":[182,183],"000031bfffff":[182,183],"000031c0ffff":[182,183],"00004000":[171,172],"000051d01fff":[182,183],"00006":[231,233],"00007fffffff":[182,183],"0000802c":[171,172],"000080b3cdff":[182,183],"000080b7cdff":[182,183],"0000ccc1":[271,274,275],"0000ccc2":[271,274,275],"0000ccc3":[271,274,275],"0000d007":[171,172],"0000ffffffff":[182,183],"0001":[134,164,226,229,230,281,282,286,290,291],"000173140":[256,277],"0003080000000000":182,"0004":[182,220],"0004100026000000":[246,247],"0005":[201,202,203],"0006":[246,247],"0007":193,"000ft":236,"001":[10,24,34,246,247],"00102012830":[254,274,275],"0018":[271,274,275],"0022":[213,220],"0023":221,"0028":[280,281,282],"003":84,"0032":[182,183],"0032768":34,"003287941":[171,173],"0034":[182,183,224],"00340000":35,"003561769":[171,173],"003579628":[171,173],"003584268":[171,173],"003590812":[171,173],"003597355":[171,173],"003603480":[171,173],"003609930":[171,173],"003615698":[171,173],"003622799":[171,173],"003893084":[226,227],"0040":[226,227,261,280,281,282],"0048":[226,227],"0054":[226,227],"0058":[171,174],"005968779":[171,173],"005974102":[171,173],"005978696":[171,173],"005985239":[171,173],"005991782":[171,173],"005998130":[171,173],"006002769":[171,173],"006008069":[171,173],"006015170":[171,173],"007197688":[182,183],"008":84,"008757768":[274,275],"008762937":[274,275],"008768171":[274,275],"008779241":[274,275],"009f0000":35,"00e2147":34,"00e2148":34,"00fd7911":[231,232],"01":[20,117,213,220,246,247,308],"010":24,"0100":117,"01004154":35,"01005300":35,"011":24,"0123":[213,220],"0131f0fc08":[246,247],"014035267":[182,183],"014042254":[182,183],"014042685":[182,183],"014049556":[182,183],"014054237":[182,183],"014060472":[182,183],"014069947":[182,183],"014085574":[182,183],"014090118":[182,183],"014096243":[182,183],"014102546":[182,183],"014108538":[182,183],"014114756":[182,183],"014120301":[182,183],"016947149":[182,183],"017047348":[274,275],"017054251":[274,275],"017059054":[274,275],"017065371":[274,275],"017073254":[182,183],"017138048":[182,183],"017198375":[182,183],"017263210":[182,183],"017352517":[182,183],"017419778":[182,183],"017502425":[182,183],"017586924":[182,183],"017643873":[182,183],"017767091":[182,183],"017855707":[182,183],"017943944":[182,183],"018024709":[182,183],"018117716":[182,183],"018195974":[182,183],"018278350":[182,183],"018353795":[182,183],"018424362":[182,183],"018533159":[182,183],"018642725":[182,183],"018737925":[182,183],"018794428":[182,183],"019971181":[178,182,183],"019a00d4":[231,232],"01f977c3":[281,282],"02":[20,35,201,202,203,213,220,231,232,281,282],"0200":[178,182,183],"02000008":35,"02000500":35,"02000566":35,"020098392":[178,182,183],"02021c6":[231,232],"022302604":[274,275],"027252763":[246,248],"027261959":[182,183],"027265573":[182,183],"028c":[286,290,291],"03":[20,213,220,286,299],"03100718":[231,232],"036327572":[231,232],"03dc":220,"04":[89,171,173,213,220,274,275,290,291],"044921238":[171,172],"046347408":[271,274,275],"048578101":[171,172],"04c1":[281,284],"05":[35,213,220,231,233],"05012000":[229,230],"051049676":[171,172],"051160609":[271,274,275],"053":[226,227],"053503542":[171,172],"053560375":[171,172,245],"053564560":[171,172,245],"055359021":[271,274,275],"055361439":[271,274,275],"057182864":[171,172],"059666137":[171,172],"06":[164,213,220,298],"062930145":[246,248],"063":[226,227],"0679f61244b":231,"07":[21,35,213,220],"0700":193,"073820164":[271,274,275],"074707590":[261,280,281,282],"075198880":[261,280,281,282],"075201618":[261,280,281,282],"07b":22,"07fb":[226,227],"08":[213,220,231,233],"0800":[280,281,282],"083d":[178,182,183],"0840000000000000":[246,247,261,280,281,284],"084846885":290,"086164489":290,"086235699":[261,280,281,282],"0901":[162,215,226,227,246,247],"09090953":35,"092274807":[271,274,275],"092689829":[231,232],"096834019":[134,229,230],"096995141":[134,229,230],"09cfacb":4,"0b00":[171,172],"0b01":[171,172],"0b10":[171,172],"0b11":[171,172],"0beta":4,"0bxx00xx00":[216,226,227],"0bxx11xx11":[216,226,227],"0f":201,"0ff7":[280,281,282],"0ff8":[280,281,282],"0fff":[280,281,282],"0m":[134,226,229,230,286,290,291],"0u":229,"0x":[36,126,202,203,229,230],"0x0":[0,2,3,5,7,8,9,13,24,27,29,30,34,41,112,134,171,172,173,182,183,226,227,231,233,245,274,275,290,291],"0x00":[35,41,70,217,231,232,287],"0x0000":[286,290,291],"0x00000000":[15,16,35,171,172,242,245,281,282],"0x000000000000":[182,183],"0x0000000000000000":[171,174,281,282],"0x0000000000000001":[256,277],"0x0000000000000100":[246,247],"0x0000000000000104":[246,247],"0x0000000000000108":[246,247],"0x000000000000010c":[246,247],"0x0000000000000e40":[281,282],"0x000000000000a83c":[271,274,275],"0x0000000000100000":[2,246,247],"0x00000000003e0000":2,"0x0000000000400000":2,"0x000000000041fae0":[290,291],"0x000000000041fb50":[290,291],"0x000000000041fbd0":[290,291],"0x000000000041fc00":[290,291],"0x000000000041fc40":[290,291],"0x000000000041fc80":[290,291],"0x000000000041fd80":[290,291],"0x000000000041fe10":[290,291],"0x000000000041fe80":[290,291],"0x000000000041fef0":[290,291],"0x000000000041ff90":[290,291],"0x0000000000600450":2,"0x0000000000c00000":2,"0x0000000000e00000":2,"0x000000003":15,"0x0000000030000000":2,"0x0000000030000010":[281,282],"0x00000000300051e4":[261,280,281,282],"0x0000000030013a08":225,"0x000000003001dce4":[261,280,281,282],"0x000000003001dd3c":[261,280,281,282],"0x000000003002c128":[261,280,281,282],"0x000000003002ecf8":[261,280,281,282],"0x0000000030030be0":[261,280,281,282],"0x00000000300a7b18":[261,280,281,282],"0x00000000300a7c34":[261,280,281,282],"0x00000000300aa5f8":[261,280,281,282],"0x00000000300aaadc":[261,280,281,282],"0x00000000300ab1d8":[261,280,281,282],"0x0000000030400000":2,"0x0000000031000000":2,"0x0000000031c236e0":[261,280,281,282],"0x0000000031c23760":[261,280,281,282],"0x0000000031c237f0":[261,280,281,282],"0x0000000031c23880":[261,280,281,282],"0x0000000031c23950":[261,280,281,282],"0x0000000031c23a90":[261,280,281,282],"0x0000000031c23b30":[261,280,281,282],"0x0000000031c23bf0":[261,280,281,282],"0x0000000031c23c90":[261,280,281,282],"0x0000000031c23d20":[261,280,281,282],"0x0000000031e00000":2,"0x00000000deadbeef":224,"0x00000001":[15,226,227],"0x0000000101000000":226,"0x00000002":15,"0x00000003":[226,227],"0x0000000400000000":2,"0x0000000410000000":[182,183],"0x00000007fe200000":2,"0x00000007fe600000":2,"0x00000008":18,"0x0000001101000000":[134,229,230,286,290,291],"0x00000100":16,"0x00000103070f1f3f":[226,227],"0x00000175":18,"0x00000176":18,"0x00000177":18,"0x00000178":18,"0x00000179":18,"0x0000017a":18,"0x0000017b":18,"0x0000017c":18,"0x00000884":[217,231,233],"0x0000100000000000":249,"0x0000100101000000":226,"0x0000102101000000":[134,229,230,286,290,291],"0x0000105101000000":[286,290,291],"0x0000144083000000":[134,229,230],"0x0000144104000000":[134,229,230],"0x0000144883000000":[286,290,291],"0x0000154883000000":[134,229,230,286,290,291],"0x0000154904000000":[134,229,230],"0x0000180101000000":226,"0x0000182101000000":[134,229,230],"0x0000183101000000":[134,229,230,286,290,291],"0x00001c5081000000":[134,229,230],"0x00001c5083000000":[134,229,230],"0x00001c5101000000":[134,229,230],"0x00001c5103000000":[134,229,230],"0x00001c5104000000":[134,229,230],"0x00001c5881000000":[286,290,291],"0x00001c5883000000":[286,290,291],"0x00001d0811000000":226,"0x000030000000":[182,183],"0x000030400000":[182,183],"0x000031000000":[182,183],"0x000031c00000":[182,183],"0x0000400000000000":[246,248],"0x000051c00000":[182,183],"0x000051d02000":[182,183],"0x000080000000":[182,183],"0x000080b3ce00":[182,183],"0x000080b7ce00":[182,183],"0x0000909101000000":[286,290,291],"0x0001":[19,54],"0x0002":[19,54],"0x0003":19,"0x0004":[54,182],"0x0008":54,"0x00080000":48,"0x000f":220,"0x00100000":[180,182],"0x0017d907":23,"0x00200000":[180,182],"0x004bxxxx":136,"0x004c0100":[257,277,281,282],"0x004cxxxx":136,"0x004dxxxx":136,"0x004e0xxx":136,"0x004e1200":182,"0x004e1xxx":136,"0x004e2xxx":136,"0x004e3xxx":136,"0x004fxxxx":136,"0x00800020":19,"0x0080100000000000":249,"0x00810001":19,"0x009a48180f01ffff":249,"0x009a48180f03ffff":249,"0x00e4":[171,172],"0x01":[0,35,50,60,70,231,233],"0x01963000":290,"0x01964000":290,"0x01965000":290,"0x01c00020":18,"0x01c10190":305,"0x01c10191":305,"0x02":[0,35,41,50,70,231,232],"0x03":[35,50,70],"0x04":[0,35,70],"0x04ea":41,"0x05":[70,217,231,232],"0x06":274,"0x068000":41,"0x068001":41,"0x08":35,"0x0840000000000000":[171,172,271,274,275],"0x0841":[271,274,275],"0x0842":[271,274,275],"0x0843":[271,274,275],"0x0844":[271,274,275],"0x0845":[271,274,275],"0x0846":[271,274,275],"0x0847":[271,274,275],"0x09":[41,171,174],"0x0f":0,"0x0f000004":2,"0x0ff0":220,"0x1":[0,2,3,9,13,14,20,24,27,29,30,41,99,107,112,134,171,172,272,273,303],"0x10":[2,5,12,24,30,35,59,231,232,290,291],"0x100":[2,27,122,182,183,202,203,231,232,246,247],"0x1000":[2,9,17,30,231,232,254,274,276,281,284],"0x10000":[2,32],"0x100000":2,"0x10000000":30,"0x100000000":[27,226,227],"0x10000003":5,"0x1000000a":27,"0x1000000b":27,"0x10000017":32,"0x10000032":20,"0x1000006b":10,"0x1000006f":10,"0x100000fd":23,"0x1000012e":4,"0x1000023a":24,"0x1000023d":24,"0x10000241":24,"0x10000242":24,"0x100002a0":13,"0x100002bc":27,"0x100002bd":27,"0x100002be":27,"0x100002bf":[9,27],"0x100002c0":27,"0x100002f5":27,"0x100002f7":27,"0x100002fc":27,"0x100002fd":27,"0x100002fe":27,"0x100002ff":27,"0x100003b8":14,"0x10000abc":27,"0x10000def":27,"0x1000a7":5,"0x10077":5,"0x1014":[27,30,41],"0x1017":[231,232],"0x10200000":24,"0x1020013":274,"0x104":[246,247],"0x10414e43":34,"0x10f":3,"0x11":[5,59],"0x110":[2,3,217,231,233],"0x11000":13,"0x111":3,"0x114":224,"0x118":24,"0x11c":[231,233],"0x11e1a300":13,"0x11e4":224,"0x12":[5,59],"0x120":2,"0x126":30,"0x12c":[182,246,247],"0x13":[0,5,59],"0x130":[217,231,233],"0x134":[261,272,273,280,281,282],"0x138":224,"0x14":[0,5,59,221],"0x140":[261,280,281,282],"0x142":34,"0x14233":34,"0x15":[2,30],"0x150":[261,280,281,282],"0x158":[246,247],"0x15d9ad1c":26,"0x164":[261,280,281,282],"0x164d3322":34,"0x168":[231,233],"0x169626d2c":[226,227],"0x16c":[182,183],"0x170":[231,233],"0x17fe":[5,59],"0x17ff":[5,59],"0x18":[2,213,220],"0x180":[182,183,271,274,275],"0x180000":24,"0x1801010":5,"0x184":[272,273],"0x186a0":13,"0x188":182,"0x18c":[217,231,233],"0x1903010":5,"0x198":[217,224,231,233],"0x1a0000000000":[226,227],"0x1a00001f":[274,275],"0x1a05010":5,"0x1b0":[162,215,226,227],"0x1b07010":5,"0x1b3f5":8,"0x1b8":[261,271,274,275,280,281,282],"0x1c":[2,272,273,290,291],"0x1c0":[182,272,273,280,281,282],"0x1c09010":5,"0x1c8":[231,233],"0x1d01d6d1":23,"0x1d0b010":5,"0x1d4":[261,280,281,282],"0x1d4d3142":34,"0x1d8":[261,280,281,282],"0x1d9e":[182,183],"0x1e":30,"0x1e00":[171,174],"0x1e07":[171,174],"0x1e0d010":5,"0x1e848000":2,"0x1f":[1,30],"0x1f00":224,"0x1f0f010":5,"0x1f4":[231,233],"0x1fc":[231,233],"0x1ff":30,"0x1fffffff":[137,246,248],"0x2":[2,5,12,13,20,24,27,29,30,88,99,107,112,221,226,228,303],"0x20":[2,13,19,35,182,183,231,232,233,267,272,290,291],"0x200":[30,281,282],"0x2000":30,"0x20000":[30,202,203],"0x2000000":30,"0x20000000":[7,261,274,275,280,281,282],"0x20000020":2,"0x20010":[5,59],"0x20010800":[171,172,242],"0x20011":[5,59],"0x20011000":[246,248],"0x20012":[5,59],"0x20013":[5,59],"0x20014":[5,59],"0x2010000":2,"0x2010900":2,"0x2011010":5,"0x2012000":2,"0x2012400":2,"0x20202020":34,"0x202d1":[182,183],"0x2040000000000000":[171,172,182,183],"0x20434501":34,"0x205a4c37":8,"0x20e65f75":23,"0x20ffe":[5,59],"0x20fff":[5,59],"0x21":[2,35],"0x2113010":5,"0x217fe":59,"0x217ff":59,"0x2180":30,"0x22":[2,35,147,149],"0x22071917":34,"0x2215010":5,"0x22ffe":[5,59],"0x22fff":[5,59],"0x23":[2,35],"0x2317010":5,"0x237fe":[5,59],"0x237ff":[5,59],"0x238":[217,231,233],"0x24":[2,35,157,171,173,187,193,290,291],"0x240000":36,"0x2419010":5,"0x25":2,"0x250":[217,231,233],"0x251b010":5,"0x26":2,"0x261d010":5,"0x27":2,"0x274":[231,233],"0x28":[2,182,183],"0x28000000":7,"0x2ac":[182,183],"0x2b010a84":182,"0x2c":[27,29,171,174,224,231,233,261,280,281,282],"0x2cac0a94":34,"0x2f4":[217,231,233],"0x2ffe":[5,59],"0x2fff":[5,59],"0x2x":35,"0x3":[2,5,13,27,29,30,88,171,172,226,228,272,273],"0x30":[2,13,20,35,171,174,182,183,224,226,227,231,233],"0x300000":34,"0x30000000":[2,5,36,226,227],"0x300000004":[226,227],"0x30000020":2,"0x300050c0":5,"0x3003e434":[178,182,183],"0x3007a000":5,"0x3007b010":5,"0x3008c3f0":5,"0x300ac650":8,"0x300d4b98":[280,281,282],"0x300d4bc8":[280,281,282],"0x3023ec40":36,"0x30313133":34,"0x3031464e":34,"0x304":[231,233],"0x30400000":2,"0x3044ad90":[182,183],"0x3044b230":[274,275],"0x30453231":34,"0x30493d20":[256,277],"0x3052b9d8":[280,281,282],"0x305ed930":[171,173],"0x30800a88":[261,280,281,282],"0x30ae0530":[246,248],"0x31":274,"0x31000000":2,"0x31304354":34,"0x31434304":34,"0x31565a02":34,"0x31e00000":2,"0x32":[26,250,272,273],"0x320":[290,291],"0x32313437":34,"0x32a902cb":34,"0x3300000001":[226,227],"0x33cf4000":[178,182,183],"0x34":[2,182,183,261,280,281,282],"0x34010042":34,"0x340b157c":34,"0x3438534e":34,"0x35":2,"0x350":224,"0x35324645":34,"0x358":[171,174],"0x370":[246,247],"0x370c0000":34,"0x37305f30":8,"0x3735205a":8,"0x37fe":[5,59],"0x37ff":[5,59],"0x38":[2,162,215,226,227,272,273],"0x38c":[272,273],"0x39c":[261,280,281,282],"0x3a":[231,232,246,247,249,250,272,273],"0x3b":[226,227,231,232],"0x3b001010":5,"0x3b103010":5,"0x3b205010":5,"0x3b307010":5,"0x3b409010":5,"0x3b9aca00":13,"0x3c":[246,247],"0x3c435333":34,"0x3e":202,"0x3e0000":2,"0x3f":2,"0x3f8":2,"0x3fc00":2,"0x3ffff":2,"0x4":[2,5,20,27,30,99,117,171,172,226,228,242],"0x40":[3,23,30,35,182,226,227,231,233],"0x400":[17,50],"0x4000":[2,26],"0x40000":[2,24],"0x400000":2,"0x4000000":9,"0x40030":58,"0x4011400":30,"0x4011440":30,"0x40d487ff":23,"0x41":35,"0x42010":[261,280,281,283],"0x42018":[261,280,281,283],"0x4239":34,"0x424a3030":34,"0x44":[35,182,183],"0x440b400":34,"0x45":35,"0x45000020":[231,233],"0x45000040":[231,233],"0x45000060":[231,233],"0x45000080":[231,233],"0x45043030":34,"0x454":[162,215,226,227],"0x466a42a3":23,"0x47003":13,"0x47c":[290,291],"0x48":[5,34,35,55,70,162,171,174,182,183,215,226,227],"0x484f5220":34,"0x485702":34,"0x4b0":[217,231,233],"0x4b4b4b4b":35,"0x4c":[162,171,174,182,183,215,224,226,227,246,247,261,271,274,275,280,281,282],"0x4c1":30,"0x4c373730":8,"0x4c4c4c4c":35,"0x4d49205a":8,"0x4d6ee0c9":23,"0x4e494452":34,"0x4ea":27,"0x4x":35,"0x5":[2,27,171,172],"0x50":[3,35,231,233,272,273],"0x5011000":29,"0x504e0730":34,"0x50520881":34,"0x5053424b":305,"0x50973c87":34,"0x515dc2a5":23,"0x533c9b37":35,"0x54":[171,172,182,231,233,256,277],"0x54045649":34,"0x54380000":30,"0x543c0000":30,"0x543e2000":30,"0x54545454":30,"0x54c":[271,274,275],"0x57":32,"0x570":[217,231,233,271,274,275],"0x58":[231,233],"0x5a":220,"0x5a0":[217,231,233],"0x5a618f4d":34,"0x5b0":[271,274,275],"0x5c":[182,217,231,233,261,280,281,282],"0x5c0":[217,231,233],"0x5cb3614d":34,"0x5f303735":8,"0x6":[2,19],"0x60":[35,182,256,277],"0x600":[217,231,233],"0x6000000":34,"0x60000000":30,"0x600450":2,"0x600c1":30,"0x600c3":30,"0x60200":30,"0x60400":[27,30],"0x617":30,"0x62":[0,285,290,291],"0x622":30,"0x62c":[272,273],"0x630":[162,215,226,227],"0x64":[27,256,261,277,280,281,282],"0x6504603":34,"0x68":[217,231,233,261,272,273,280,281,282,290,291],"0x680":[280,281,282],"0x6c":[231,233],"0x7":[2,30],"0x70":[35,182,183],"0x706369652d736c6f":[226,227],"0x71f9c40":34,"0x7303045":34,"0x7380ed6a":23,"0x74":[272,273,290,291],"0x7473000000000003":[226,227],"0x75":1,"0x77":[1,171,172],"0x77777777":30,"0x78":[34,290,291],"0x788":[226,227],"0x78f":29,"0x795fea0d":23,"0x7a":35,"0x7b8":[226,227],"0x7c":[261,280,281,282,290,291],"0x7c8":[226,227],"0x7d0":5,"0x7d800026":225,"0x7f":[14,32],"0x7f3":[226,227],"0x7fff0000":30,"0x8":[2,5,24,27],"0x80":[2,35,50,135,261,272,273,280,281,282],"0x800":[2,27],"0x8000":2,"0x80000":2,"0x800000":2,"0x8000000":7,"0x80000000":[27,29,30,226,227],"0x8000000000000000":150,"0x80000001":19,"0x80020000":2,"0x80021000":2,"0x80022000":2,"0x80023000":2,"0x80024000":2,"0x80025000":2,"0x80026000":2,"0x80027000":2,"0x8010c3f":27,"0x8010c7f":27,"0x8013c00":27,"0x802c":26,"0x803":[226,227],"0x80d":13,"0x80f00103":[246,247],"0x81003":13,"0x82e":13,"0x84":[217,231,233],"0x844":[271,274,275],"0x84cc0052":34,"0x850":13,"0x86c":[171,174],"0x871":13,"0x88":[231,233,261,280,281,282,290,291],"0x892":13,"0x8b3":13,"0x8c":[182,183],"0x8c0":[162,215,226,227],"0x8d":34,"0x8d5":13,"0x8e":8,"0x8f6":13,"0x9":27,"0x90":[35,224,246,247],"0x900":27,"0x90000":[11,76],"0x9000000000000000":[281,282],"0x9000000002803002":[261,280,281,282],"0x90000755":[171,174],"0x9010c3f":29,"0x9012000":2,"0x9012400":2,"0x9013c00":2,"0x9013c40":2,"0x917":13,"0x938":13,"0x94":[261,280,281,282],"0x95":1,"0x95a":13,"0x97b":13,"0x98":[7,24,217,231,233,290,291],"0x984":[171,174],"0x985e80f1":34,"0x989680":13,"0x99999999":[226,227],"0x99c":13,"0x9a00000":5,"0x9bd":13,"0x9c":18,"0x9c40":13,"0x9d":274,"0x9df":13,"0x9e":274,"0x9f":274,"0x9f0":[246,247],"0xa":[246,247],"0xa0":[35,274],"0xa00":13,"0xa011":220,"0xa21":13,"0xa42":13,"0xa64":13,"0xa64ab07d":[246,247],"0xa64bb17d":[246,247],"0xa6e2207d":[246,247],"0xa85":13,"0xa9db06b8":23,"0xaa":3,"0xaa6":13,"0xac7":13,"0xae4":[280,281,282],"0xae9":13,"0xb0":[162,215,226,227,261,280,281,282],"0xb0000002":35,"0xb0020":2,"0xb0a":13,"0xb2b":13,"0xb30":[261,280,281,282],"0xb4":[231,233],"0xb4866546":23,"0xb4c":13,"0xb67d219d":23,"0xb6e":13,"0xb8":[162,215,226,227,231,233,272,273],"0xb8f":13,"0xb98":14,"0xbb0":13,"0xbc":[261,280,281,282],"0xbd1":13,"0xbf3":13,"0xc":[2,20,26,30,162,171,172,202,203,215,226,227,261,280,281,282],"0xc0":[0,2,246,247],"0xc00":308,"0xc000":308,"0xc00000":2,"0xc00000000000ac60":[290,291],"0xc00000000000b65c":[261,280,281,282],"0xc000000000020e78":[290,291],"0xc000000000027890":[226,227],"0xc000000000028e5c":[261,280,281,282],"0xc000000000030b84":[261,280,281,282],"0xc0000000000310b0":[261,280,281,282],"0xc00000000004e0f4":[290,291],"0xc00000000004f054":[290,291],"0xc0000000000500cc":[290,291],"0xc000000000050bf8":[290,291],"0xc0000000000a7168":[261,280,281,282],"0xc0000000000a9060":[261,280,281,282],"0xc0000000000ac9b8":[261,280,281,282],"0xc0000000000b1c44":[290,291],"0xc0000000000b2424":[290,291],"0xc00000000012d6c8":[261,280,281,282],"0xc00000000012da28":[261,280,281,282],"0xc0000000001366f4":[261,280,281,282],"0xc00000000018a570":[261,280,281,282],"0xc0000000001f9510":[290,291],"0xc0000000002a68f8":[290,291],"0xc0000000002bf3d4":[290,291],"0xc0000000003a0880":[290,291],"0xc0000000003a4f14":[290,291],"0xc0000000003a5328":[290,291],"0xc0000000004792d4":[261,280,281,282],"0xc0000000006d3b90":[246,247],"0xc000000000aa8054":[226,227],"0xc00000000fe00000":[231,233],"0xc0000003f9f41000":[231,233],"0xc000001fea6e7870":[261,280,281,282],"0xc000001fea6e78c0":[261,280,281,282],"0xc000001fea6e7960":[261,280,281,282],"0xc000001fea6e7990":[261,280,281,282],"0xc000001fea6e7ad0":[261,280,281,282],"0xc000001fea6e7b40":[261,280,281,282],"0xc000001fea6e7b60":[261,280,281,282],"0xc000001fea6e7bd0":[261,280,281,282],"0xc000001fea6e7c80":[261,280,281,282],"0xc000001fea6e7d20":[261,280,281,282],"0xc000001fea6e7db0":[261,280,281,282],"0xc000001fea6e7e20":[261,280,281,282],"0xc0300000":30,"0xc14":13,"0xc3":0,"0xc35":13,"0xc4":[246,247],"0xc56":13,"0xc594c31":34,"0xc7":2,"0xc78":13,"0xc8":[272,273],"0xc99":13,"0xcba":13,"0xcc":[261,280,281,282],"0xcdb":13,"0xce0900":[162,214,224],"0xcfd":13,"0xd":[24,202,203],"0xd0":[35,182,261,280,281,282],"0xd00":308,"0xd000":308,"0xd00dfeed":[226,227],"0xd00e":26,"0xd1569c53":34,"0xd1e":13,"0xd2":26,"0xd3f":13,"0xd4":[162,215,226,227,261,280,281,282],"0xd54775d5":23,"0xd60":13,"0xd8":[30,171,174],"0xd82":13,"0xd9d714ab":34,"0xda3":13,"0xdc":[182,183],"0xdda4f986":34,"0xe0":[35,162,215,226,227],"0xe00000":2,"0xe0000000":[137,246,247,248],"0xe2f541f":23,"0xe40":[182,183],"0xe6":29,"0xe7":29,"0xe8":29,"0xeb":[217,231,232],"0xec":[261,280,281,282],"0xf0":[162,215,226,227,231,232],"0xf000":[281,284],"0xf0000000":30,"0xf0000001":20,"0xf0000003":20,"0xf0000007":[272,273],"0xf0000012":20,"0xf0000016":20,"0xf000001d":20,"0xf0000023":20,"0xf0000024":20,"0xf0000025":20,"0xf0000026":20,"0xf0000027":20,"0xf0092df9":[246,247],"0xf010800":30,"0xf010840":30,"0xf010900":30,"0xf1e000":29,"0xf4":[256,277],"0xf5552d00":2,"0xf6":2,"0xf9fc5095":23,"0xfa0":13,"0xfb708535":23,"0xfc":[261,280,281,282],"0xfc000":30,"0xfcff8":30,"0xfcff9":30,"0xfcffa":30,"0xfcffb":30,"0xfd450000":32,"0xfddf8000":14,"0xfe200000":2,"0xfe600000":2,"0xfeedf00d":126,"0xff":[27,30,50,121,171,172,184,220,226,227,231,233,308],"0xff00":27,"0xff8":30,"0xffe":[5,59],"0xfff":[5,28,59,229,230],"0xfff0":[14,281,282],"0xfff8":[14,281,282],"0xffffff":[171,172],"0xffffffd5":13,"0xffffffd6":13,"0xffffffd7":13,"0xffffffd8":13,"0xffffffd9":13,"0xffffffda":13,"0xffffffdb":13,"0xffffffdc":13,"0xffffffdd":13,"0xffffffde":13,"0xffffffdf":13,"0xffffffe0":13,"0xffffffe1":13,"0xffffffe2":13,"0xffffffe3":13,"0xffffffe4":13,"0xffffffe5":13,"0xffffffe6":13,"0xffffffe7":13,"0xffffffe8":13,"0xffffffe9":13,"0xffffffea":13,"0xffffffeb":13,"0xffffffec":13,"0xffffffed":13,"0xffffffee":13,"0xffffffef":13,"0xfffffff":[246,247],"0xfffffff0":13,"0xfffffff1":13,"0xfffffff2":13,"0xfffffff3":13,"0xfffffff4":13,"0xfffffff5":13,"0xfffffff6":13,"0xfffffff7":13,"0xfffffff8":13,"0xfffffff9":13,"0xfffffffa":13,"0xfffffffb":13,"0xfffffffc":13,"0xfffffffd":13,"0xfffffffe":13,"0xffffffff":[2,13,171,172,182,183,308],"0xffffffffffffffff":182,"0xffffxxxx":[270,274,275],"1":[1,2,4,5,9,14,16,19,21,24,27,28,33,35,36,38,39,41,42,43,44,46,47,48,49,51,52,54,56,58,60,66,67,69,70,71,76,79,80,81,82,84,88,89,90,92,93,96,97,98,100,101,102,103,105,107,113,115,122,131,132,133,134,136,137,138,140,141,142,146,171,172,174,177,178,182,183,184,185,186,188,189,190,191,192,193,196,202,203,204,205,206,211,213,215,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,238,246,247,248,251,254,257,260,261,267,268,271,274,275,276,278,280,281,282,284,286,290,291,294,297,299,305,308,309],"10":[37,38,42,60,82,131,135,139,142,147,148,152,161,162,164,182,183,184,185,193,198,202,203,209,215,217,219,220,226,227,229,231,233,246,247,248,251,254,261,267,272,274,275,276,280,281,282,300,308],"100":[24,42,123,146,147,148,161,164,171,172,187,202,204,224,229,230,231,254,274,275,286,290,291,308],"1000":[21,34,95,201,202,203],"100000000":27,"1000m":[201,202,203,229,230,274,276],"1001":34,"10022":[231,232],"1004":135,"1005":[135,203],"1006":135,"100kb":[281,284],"100m":[171,172,229,230,231,235,274,276,281,282,286,288,290,291],"101":[42,50,148,274],"1013":[258,278,281,282],"1016b":305,"102":[42,50,138],"10200000":24,"1024":[144,226,227,305],"102849137":[134,229,230],"102m":[171,172],"103":[42,114],"104":[42,114,225],"104341838":[134,229,230],"104357444":[134,229,230],"104580394":[134,229,230],"1046":274,"105":[42,114,147,148,202],"10526":226,"105578525":[134,229,230],"1056786":[290,291],"105d80f85b":[286,290,291],"106":42,"107":[42,67],"1072":37,"10784at":35,"108":[42,67],"10814856":39,"1089":229,"109":[42,60],"109239162":[162,214,224],"10942":148,"109790675":[246,248],"109792716":[246,248],"109794695":[246,248],"109796689":[246,248],"10b5":221,"10k":[274,275],"10m":[182,183,202,229,254,274,275],"10th":[144,146,170,195,285,295],"10u":229,"10x":[182,183],"11":[37,38,42,58,82,131,139,142,147,153,161,171,173,184,185,187,193,201,202,203,210,217,219,220,224,226,229,231,233,246,247,248,252,254,267,272,273,274,275,281,282,290,291],"110":[42,52,84,162,214,224],"1100":[274,275],"110728970":[271,274,275],"111":[42,52,184,185],"111280784":[217,231,232],"11133":171,"112":[42,52],"112763075":[134,229,230],"112778956":[134,229,230],"113":[42,111,226],"113002083":[134,229,230],"114":[42,68],"114833873":[134,229,230],"114848832":[134,229,230],"114854650":[134,229,230],"115":[42,68,202,203],"115200":2,"116":[42,44],"117":[42,49,147,178,182,183],"1172a6c57ff3c66f6361e572a1790cbcc0e5ff37":[171,175],"11768":[272,273],"118":[42,53],"1185":202,"119":[42,274,275],"11f8":221,"11m":[134,229,230],"11th":[151,202,217,219,220,221,222,232,246,267,272,273,274,275,276,283],"12":[28,37,38,42,82,117,131,136,142,147,148,154,171,172,184,185,187,193,202,219,220,226,227,229,230,231,253,274,281,287,308],"120":[42,84,85,274,275],"120562":145,"121":[42,104,203],"122":[42,63,272],"123":[42,64],"123021":[157,187],"12307":203,"123259359":[134,229,230],"124":[42,62,229],"1242":171,"125":[42,65,231],"12509":147,"1258":37,"12582912":39,"126":[42,193,219,220,272],"127":[42,72,171,172,219,220,229],"127a7dac":193,"128":[35,37,42,84,229,230,231,232],"128k":41,"128kb":41,"128kbit":250,"128mb":[88,202,203],"128mbit":[147,148],"129":42,"1294":193,"12c":136,"12k":[274,275],"12m":226,"12mb":[274,275],"12th":[152,190,201,220,221,222,227,228,252,271],"13":[38,42,49,78,82,131,142,148,155,161,171,184,185,187,193,202,203,204,205,206,219,220,224,226,231,233,254,275,281,282],"130":42,"13029":[182,183],"1302lfa":[171,172],"13043":226,"13049":[182,183],"1306":37,"1307":148,"131":42,"132":[42,202],"133":[42,193],"134":42,"1348":226,"135":[42,161,184,185,231,232],"1355":231,"1356":[231,232],"136":42,"13631488":39,"1369":256,"136949696":[281,282],"13696":148,"137":42,"137049753":[281,282],"137152335":[281,282],"137251218":[281,282],"138":[42,220,274],"13836":[256,277],"139":[42,219],"13th":[151,152,153,168,169,198,228,241],"14":[4,38,42,78,82,131,142,148,156,162,164,171,184,185,186,193,203,215,219,220,224,226,227,229,231,232,246,247,255,274,276,288],"140":[42,184,185,187],"140976918":182,"140976993":182,"141":42,"141737656":[134,229,230],"141752318":[134,229,230],"141757964":[134,229,230],"142":[42,171,172],"143":42,"14309":148,"14339":[274,275],"14363":202,"144":[42,171,172],"145":42,"146":[42,73,184,185],"147":[42,73],"1474":161,"1475":171,"148":[42,73],"149":42,"1490":171,"14ed2b842f61":[290,291],"14kb":[290,291],"14m":[134,229,230],"14th":[147,148,149,154,199,215,237,253,274,281,282,283,284],"15":[4,38,42,78,82,117,131,142,146,157,171,173,178,182,183,184,185,187,193,202,203,219,220,224,226,231,256,267,272,273,274,281,282],"150":42,"151":[42,147,176,224],"1512":231,"152":[42,274],"153":[42,184,185],"154":42,"15404383291":39,"155":[42,184,185],"156":[42,119,229,281,282],"157":[42,99,171,231],"157050283":[171,172],"1572864":36,"158":[42,113,219,220],"15868":147,"159":42,"15919":171,"15b3":[258,278,281,282],"15cec493804ff14e6246eb1b65e9d0c7cb469a81":191,"15d9acb6":[171,172],"15th":[139,155,164,165,174,242],"16":[38,42,78,82,88,102,117,127,131,142,158,160,162,171,172,173,182,183,184,185,188,189,190,193,202,203,204,213,215,217,219,220,221,222,224,226,227,229,231,233,246,247,248,257,267,268,272,273,274,275,281,282,283,308],"160":42,"1602":37,"1606":220,"161":[42,274],"1612":231,"162":[42,120],"163":[42,119,161,164],"16347":193,"16384":[171,172],"164":[42,87],"1644":37,"1649":220,"16497":147,"16499":220,"165":[42,87,147,148],"1654":147,"166":[42,58,231],"167":[42,226],"16759":219,"168":[42,229,274],"168m":[182,270,274,275],"169":[42,171],"16944":[217,231,232],"16945":[217,231,232],"16bit":[229,230],"16gb":[274,275],"16k":[24,35,133],"16kb":[246,247],"16m":[255,274],"16mb":89,"16th":[156,157,160,162,184,190,192,193,212,224,233,238,249,270,290,292,297],"16x2":12,"17":[38,42,78,82,117,131,142,147,148,159,171,172,184,185,191,192,193,202,213,220,224,225,226,227,229,231,232,238,246,247,248,258,261,271,274,275,280,281,282,287],"170":[42,193,231,246,248],"17052":203,"170m":[254,274,275],"171":[42,147,148,246,248],"172":[42,231],"1727":[162,215,226,227],"173":[42,71,204],"17396":171,"174":[42,71,254,274,276],"175":[42,71,148,224],"175196744":[171,172],"175200449":[171,172],"176":[118,148,272],"177":118,"178":118,"179":[42,107],"17920":[184,185],"17961":220,"17m":[134,229,230],"17th":[147,157,184,185,186,187,188,189,200,203,232,233,255],"18":[38,42,78,82,131,142,160,161,164,171,173,184,185,187,193,202,203,204,205,206,219,220,226,227,228,231,259,274,275,290,291],"180":[42,107,231],"18105":220,"182":274,"1826":226,"18278":219,"183":224,"184":231,"1843200":2,"185":281,"1855":224,"1867mhz":[246,248],"1868":229,"187":224,"188":[162,184,185,214,224],"1887":147,"188811484":[171,172],"189":[171,172],"1891":274,"18th":[150,158,161,162,163,232,233,234,235,236,260],"19":[38,42,82,121,131,142,146,148,161,162,164,171,202,203,219,220,221,222,223,224,225,226,227,228,229,230,261,274,282,283,284],"190":[184,185],"1900":84,"1908":84,"191":[136,274],"1918":148,"1935":229,"194":203,"1940":84,"1948":84,"19533":[184,185],"1961":37,"196442259":[272,273],"196444501":[272,273],"196445389":[272,273],"198":219,"19_1":[171,174],"19e5":[213,220],"19th":[143,159,163,169,170,216,225,235,259,268,275,279],"1aa0":84,"1aa8":84,"1ab0":84,"1b":305,"1bb7503":4,"1c00":[34,84],"1c00020":18,"1c00040":[171,172],"1c08":84,"1c40":84,"1c48":84,"1c58":221,"1e00":34,"1eb":103,"1fb10de164d3ca034193df81c1f5d007aec37781":191,"1g":[255,274],"1k":305,"1kb":[144,290,291],"1m":[24,182,183,207,220,274,275],"1mb":[133,182,183],"1s":[224,274,275,281,282],"1sec":[246,247],"1second":274,"1st":[35,166,167,176,193,194,247,286],"1u":[106,136,229,246,247],"1ull":[58,72],"1x":220,"2":[1,2,4,13,14,21,24,29,30,31,33,34,35,37,38,41,42,44,49,54,56,58,60,69,70,71,76,79,80,81,82,84,90,92,93,96,100,102,103,115,121,122,131,133,134,136,137,139,140,142,147,148,164,171,172,178,182,183,192,193,197,201,202,203,204,212,217,219,220,224,226,227,229,230,231,232,233,239,241,246,247,248,257,258,265,267,268,271,272,273,281,282,283,284,287,290,291,295,297,300,308],"20":[2,8,19,27,37,38,42,57,73,131,142,146,147,163,171,172,174,184,185,193,202,203,219,220,224,226,229,230,231,232,233,234,235,236,245,258,262,278,281,282,290,291],"200":[34,157,162,171,173,187,214,224],"20000000":[162,171,173,215,226,227],"20000020":2,"20004204":[182,183],"20010a80":[171,172,242],"20010abf":[171,172,242],"2004":138,"20040000":[178,182,183,246,247],"2006":138,"200ea":[280,281,282],"200m":[171,172,254,274,275],"200n":229,"201":226,"2010000":2,"2010900":2,"201140a":[202,203],"2012":[290,291],"2012000":2,"2012400":2,"2013":[290,291],"2014":[42,143,144],"2015":[35,145,146,147,148,149,150,151,152,153,154,161,164,165,166,167,168,169,170,184,185,186,187,188,189,274,275],"20150728":35,"2016":[154,155,156,157,158,159,160,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,211,219,220,221,222,274],"20161028":4,"2017":[139,160,162,163,171,172,173,174,175,212,213,214,215,216,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243],"20170217":4,"2018":[139,171,172,173,174,175,176,177,178,179,180,181,182,183,208,218,244,245,246,247,248,249,250,251,252,253,254,255,260,265,266,267,268,269,270,271,272,273,274,275,276,281,282,283,284],"2019":[209,256,257,258,259,261,277,278,279,280,281,282,283,284,285,286,287,288,290,291,292,293,294,297],"201d1":[254,274,276],"201ffe000000":[261,280,281,282],"201fff800000":[261,280,281,282],"2020":[210,262,263,264,289,295,296,297,298,299,300,301,302],"20202020":35,"20206":202,"2028":[184,185],"2035":[226,227],"204":[204,246,247],"2040000000000000":[182,183],"2048":224,"205":274,"2050":[246,247],"2051":[226,227],"2053616d":35,"206":[202,274],"20657272":35,"20697320":35,"207":220,"2070":21,"20757365":35,"208":231,"2082":[217,231,233],"20887":193,"209":[171,184,185,231],"20m":[226,227,254,274,275,290,291],"20th":[160,234,235,257,277,296],"20x":[274,275],"21":[38,42,131,142,148,171,172,173,174,175,193,202,203,204,219,224,226,231,232,233,234,235,236,238,242,263],"210612":[171,172],"210660":[171,172],"211":[171,173,202],"211bd05":4,"212":272,"212366090":[202,203],"213":[171,287],"214":148,"2149":[184,185],"215":187,"2154":[184,185],"216":[246,247],"216942479":[280,281,282],"217051132":[280,281,282],"217127508":[280,281,282],"217249886":[280,281,282],"218":277,"219":[203,220],"21st":[139,148,158,159,162,175],"22":[37,38,42,131,142,147,148,171,172,183,193,202,204,220,229,231,232,238,246,247,264,272,274,275],"221":274,"221294487":[280,281,282],"221397429":[280,281,282],"221471414":[280,281,282],"222":219,"222791151":[171,172],"222977933":[171,172],"223466021":1,"2237":[246,247],"225":171,"2258":161,"226":203,"226860117":[162,215,226,227],"226901445":[162,215,226,227],"226903251":[162,215,226,227],"227":[202,203],"227994012":[217,231,233],"227997540":[217,231,233],"228":[219,220],"2281":161,"22898":[184,185],"229":193,"22c":136,"22nd":[163,210,224,225,230,239,243,273,297,301,302],"23":[38,42,81,117,131,142,148,162,164,171,172,182,183,187,202,203,204,215,219,226,227,229,231,242,246,247,267,272,273],"2302":[261,280,281,284],"231":171,"23153":[217,231,233],"23154":[217,231,233],"232":[171,226,231],"232114723":[162,214,224],"232183823":[271,274,275],"23274":[184,185],"233":[281,283],"234":[171,172],"236":[161,171,173,193,202],"238270428":[246,248],"23m":[286,290,291],"23rd":[139,171,182,183,203,204,205,206,236,265],"24":[2,29,42,117,131,136,147,148,161,171,172,193,202,225,226,227,228,231,246,247,274,275,308],"240":[220,274],"2400":[34,220],"2401":34,"24073":219,"242":226,"243176c":[290,291],"245":[184,185],"24748502575":39,"2476":171,"249":[147,193],"2496":224,"24m":[286,290,291],"24th":[180,223,224,225,226,227,228,293],"25":[27,37,42,49,117,131,147,148,171,193,203,226,231,274],"250":[226,274],"2500":220,"250638683":[271,274,275],"250m":[229,230,281,282,288],"251240444":224,"251300274":224,"251339330":224,"251363654":224,"251409207":224,"251444114":224,"251478314":224,"251500346":224,"2517":226,"2519":274,"252083372":224,"253":[147,219],"254089525":[261,280,281,282],"254159668":[261,280,281,282],"254769":[217,231,233],"255":[134,147,149,171,172,173,204,251,274,275],"256":[84,147,149,171,172,182,183,271,274,275],"256gb":[274,275],"256k":24,"256kb":88,"256m":[220,255,274],"256mb":[88,226,227],"256tb":88,"2572":[231,233],"2576":224,"2586":[202,203],"259":[271,274,275],"259689526":[171,172],"259695649":[171,172],"25th":[193,226,229,230],"26":[42,79,131,148,161,203,226,228,229],"261":[184,185],"2610":274,"262":171,"264":171,"267271":[261,280,281,284],"267305":[261,280,281,284],"267320":[261,280,281,284],"267330":[261,280,281,284],"268":202,"269":[202,261,280,281,282],"269092904":[271,274,275],"26th":[159,160,165,166,185,196,204],"27":[42,93,131,147,148,171,184,185,187,193,220,226,228,229,231,274,309],"270":287,"273":171,"2731":231,"2745":[178,182,183],"2754":148,"2757":219,"278":[202,203,274],"27th":[154,155,187,188,254,263],"28":[35,42,103,131,148,164,171,193,202,219,220,224,226,229,231,274,275,286,309],"2800":34,"28004484":[246,247],"2801":[34,220],"28024442":[162,215,226,227],"280u":[290,291],"283182881":[280,281,282],"283184335":[280,281,282],"283185513":[280,281,282],"283664":[274,275],"285":[271,274,275],"286":[271,274,275],"2861":274,"2864":[254,274,275],"287":[271,274,275],"288260827":[280,281,282],"288354442":[280,281,282],"289":[271,274,275],"28th":[139,178,181,183,191,194,208,220,245,266],"29":[42,90,131,202,219,220,226,257,274,276],"290":[219,271,274,275],"2900":34,"2901":34,"2902":34,"2903":34,"2904":34,"2905":34,"291":[271,274,275],"29155":[171,172],"2924":171,"293":[271,274,275],"293393485":[217,231,232],"294":[184,185,271,274,275],"295":[193,271,274,275],"297":[224,271,274,275],"297462587":[261,280,281,282],"297737995":[261,280,281,282],"298":171,"299":[164,171,203],"29m":[286,290,291],"29th":[157,158,207,240,276,282],"2a00":34,"2b841bf0ef1b":267,"2d12000870e04020":[171,172],"2d343241":35,"2e":8,"2e12002870e04000":[271,274,275],"2e12002870e14000":[271,274,275],"2e205365":35,"2e205468":35,"2fbffff4":[162,215,226,227],"2g6b2":[26,171,172],"2k":35,"2kb":[144,147,149,290,291],"2m":[24,255,274,290,291],"2mb":[39,147,148,274,275],"2nd":[35,168,192,195,196,197,198,199,200,201,202,203,204,205,206,211,251,284],"2s2u":[229,230],"2second":[207,220],"2to3":[274,275],"2u":[136,182,183,229,246,247],"2uess":[246,248],"3":[1,2,4,14,21,29,33,35,38,41,42,44,50,51,54,58,60,70,71,76,79,80,81,82,84,92,96,100,102,115,130,131,133,134,136,142,147,148,161,162,165,171,172,173,174,179,182,183,184,185,187,190,203,204,205,206,213,214,215,217,219,220,221,222,224,226,227,228,229,230,231,232,233,238,240,245,246,247,254,261,266,271,272,273,274,275,276,280,290,291,296,301,308,309],"30":[8,41,42,131,171,172,182,183,187,204,219,225,226,229,231,267,272,274,275,290,291,308],"300":[226,231,233],"3000":21,"30000000":36,"30000020":2,"300000f8":224,"30034018300a343c":224,"30034018300c5ab0":224,"3003438800000018":[162,214],"3003438830823f50":[162,214],"300cb808":[272,273],"300x":[171,172],"3010":21,"302":[171,193,202,203,219,226,231],"3020":21,"304":[161,171],"305":[157,187,193],"3056":226,"307":220,"307245135":[261,280,281,282],"308":226,"30m":[202,286,290,291],"30min":146,"30th":[145,151,170,189,190],"31":[21,41,42,100,117,131,132,147,148,171,172,187,193,202,203,219,225,226,231,281,282,286,287,309],"3102":219,"3103":34,"3128":[231,232],"31303738":35,"31343130":35,"315":[219,220],"317897467":272,"3184":219,"318805":[178,182,183],"318808":[178,182,183],"318812":[178,182,183],"318813":[178,182,183],"318815":[178,182,183],"318817":[178,182,183],"318821":[178,182,183],"318823":[178,182,183],"318825":[178,182,183],"318826":[178,182,183],"318831":[178,182,183],"319":148,"319923233":272,"31c30000":[226,228],"31c339e0":[226,228],"31m":[134,229,230],"31st":[139,171,172,173,174,175,229,231,232,233,234,235,236,250],"32":[2,4,8,9,13,21,42,56,75,78,88,89,90,93,101,103,117,131,134,147,148,162,171,172,180,182,193,202,203,205,214,217,220,224,226,229,231,233,236,238,246,248,270,274,275,281,282,286,290,291],"321":148,"3212000870e04000":[261,280,281,284],"3212000870e14010":[261,280,281,284],"322":220,"323k":[290,291],"32768":[182,183],"32812":[171,172],"3285":[184,185],"329":[171,184,185,193,202,203,219,226,231],"32b":305,"32bit":[132,171,172,202,204,224],"32k":[24,305],"32m":[229,230],"33":[24,42,97,131,147,148,171,172,184,185,187,202,203,204,213,220,229,231,243],"330":193,"332":147,"334":[171,184,185,193,202,203,219,226,231],"334119453":[254,274,276],"3359":147,"336":226,"338":193,"33m":[286,290,291],"34":[24,42,98,171,182,183,184,185,193,202,203,219,226,231],"340":220,"340598554":[162,214,224],"340600126":[162,214,224],"3407872":36,"342933439":[280,281,282],"343":[202,203],"34415400":35,"348":219,"35":[42,161,164,204,229],"352234986":[246,247],"352240742":[246,247],"352242181":[246,247],"35c66b8ce5a2":[246,248],"35m":[134,229,230],"36":[42,171,184,185,193,202,203,219,220,225,226,229,231],"360":224,"361":[171,202,203,219,220,226,231],"363":[219,220],"363723191":[261,280,281,282],"364":219,"366247":[246,248],"366587062":[171,172],"3680939340":39,"3680942658":39,"369":147,"36asf2g72pz":[26,171,172],"36m":[286,290,291],"37":[8,42,105,147,161,171,224,231],"370":[231,232],"372":[147,171,184,185,193,202,203,219,226,231],"37329":219,"374813167":[171,172],"375k":[290,291],"377":187,"3782":147,"37ea3cfdc852":272,"38":[42,171,184,185,193,202,203,219,220,224,226,231,233],"3800m":167,"3811":148,"38323836":35,"384":229,"384670488":[217,231,232],"3860000a":[162,215,226,227],"387":147,"38810028":[162,215,226,227],"388458416":[261,280,281,283],"38a10020":[162,215,226,227],"39":[42,56,89,117,184,185,220],"390":[261,280,281,282,287],"390645":[261,280,281,282],"391":[261,280,281,282,287],"392":[261,280,281,282],"39200000":[162,215,226,227],"393":[261,280,281,282],"394a00147d5a03a6":[178,182,183],"396":226,"3970":[261,280,281,283],"3987":148,"398756487":[261,280,281,283],"3a00":34,"3a01":34,"3b":[14,305],"3b3c5962f432":267,"3c12000870e04000":[246,247],"3d":14,"3db397ea5892a":[274,275],"3e4577939bbf":[178,182,183],"3f":14,"3f8":2,"3fc0000000000":[2,27,202,203],"3fff000400000":27,"3ffff80020000":2,"3m":[274,275],"3mb":36,"3minut":[182,183],"3rd":[35,196,213,221,227,269,281,288,290,291,292,302],"4":[1,2,4,14,21,24,26,27,33,35,36,37,38,41,42,58,60,70,76,81,82,92,96,100,102,115,131,132,133,134,135,136,138,139,141,142,146,147,148,150,161,162,164,166,171,172,173,174,175,178,180,182,183,184,185,187,191,193,199,201,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,238,241,246,247,248,257,258,267,272,273,274,275,276,278,281,282,289,292,308,309],"40":[3,24,42,56,117,171,193,219,224,226,231,233,274,275],"40000":2,"40000000":[231,233],"400000000":2,"40000004":[171,173],"40002202":[182,183],"40004208":[162,214,224],"4010c00":[226,228],"401719351":[271,274,275],"405":224,"406":219,"406259572":[271,274,275],"406351956":[274,275],"406354278":[274,275],"406355968":[274,275],"407":164,"408":[171,219,226,231],"40896":[171,174],"409002056":[271,274,275],"409596439":[261,280,281,283],"4096":[171,173,253,274,275],"4097":194,"40k":[202,203],"40mb":[182,183],"41":[14,24,34,42,124,202,203,226,229,230],"410373292":[171,174],"410488745":[171,174],"410615534":[271,274,275],"410694290":[171,174],"410799664":226,"410802000":226,"410806624":226,"410808848":226,"410812176":226,"412":274,"412kb":[171,172],"414":[182,183,226],"4154":35,"415444519":[271,274,275],"416":287,"417170176":226,"419641401":[271,274,275],"419644124":[271,274,275],"419650678":[271,274,275],"419652744":[271,274,275],"419653051":[271,274,275],"419654725":[271,274,275],"419654916":[271,274,275],"419655234":[271,274,275],"419658025":[271,274,275],"419658406":[271,274,275],"419663095":[271,274,275],"419897507":[261,280,281,283],"42":[14,42,87,112,161,171,172,231,233],"423255262":[261,280,281,282],"423958816":[231,232],"424":204,"42423832":35,"425":219,"425109779":[271,274,275],"427456821":[271,274,275],"4284":171,"429870681":[271,274,275],"42a":35,"42a10784at":35,"42d5d047":[217,231,233],"43":[42,161,184,185,246,247,286],"430774496":[231,232],"430797392":[231,232],"431668496":[231,232],"431793837":[162,214,224],"432509048":[162,215,226,227],"433":161,"434":[184,185],"434549250":[271,274,275],"436":187,"436289104":226,"436373312":226,"436420752":226,"436967856":226,"437349574":[254,274,276],"437426306":[254,274,276],"437482240":226,"437996864":226,"438000048":226,"439299889":272,"439919343":[254,274,276],"44":[14,42,88,161,205,246,247,274],"440m":[229,230],"441":274,"445910944":[271,274,275],"4499":147,"45":[4,14,42,89,187,202,203,204,213,220,224],"45215870591":39,"453092828":[261,280,281,282],"453202605":[261,280,281,282],"453247064":[261,280,281,282],"453289682":[261,280,281,282],"4540":193,"4548004c":35,"4572726f":35,"458004252":[171,172],"458147358":[171,172],"46":[4,8,14,42,147,187,231,232,287],"460gb":[182,183],"46172":[184,185],"462":164,"462749486":[280,281,282],"462819095":[280,281,282],"462894236":[280,281,282],"462967071":[280,281,282],"463033077":[280,281,282],"463144847":[280,281,282],"4637":[217,231,233],"464":[162,214,224],"466":[162,214,224],"4677":203,"469323643":272,"47":[14,24,42,148,202,219,220,226,227,267,272],"470":193,"473":[147,148],"4740":193,"474110465":[217,231,232],"4745":203,"477":[226,246,247],"4786":171,"47912590456":201,"47c09cdfe7a3":[270,274,275],"48":[14,24,42,171,173,187,219,226,227,231],"48002888":[178,182,183],"4821":193,"483":[35,274,275],"485":202,"486794100":[274,275],"489":[219,220],"489690798":[182,183],"489693339":[182,183],"489699837":[182,183],"489701543":[182,183],"489702341":[182,183],"49":[14,42,96],"494892796":1,"498":171,"49m":226,"4a":14,"4b":[14,305],"4b000107":35,"4b4b4b4b":35,"4b77f61d":[162,215,226,227],"4b8cc05a94513816d43fb8bd6178896b430af08f":[257,277,281,282],"4bfffe6d":[162,215,226,227],"4bit":1,"4c":[8,14],"4c4c4c4c":35,"4c95b5e04e3c4f72e4005574f67cd6e365d3276f":189,"4d":[8,14],"4d54001c":35,"4e":14,"4f":14,"4gb":[88,89,107,193,202,203,270,274,275],"4gte":297,"4k":[24,47,75,88,219,255,274,275,281,284,290,291,306,308],"4kb":[168,246,247],"4kbit":250,"4m":[24,290,291],"4mb":[182,183],"4tb":[75,171,172,238,290,291],"4th":[35,153,154,164,179,189,197,209,289],"5":[1,2,4,8,27,33,35,37,38,39,41,42,43,49,70,81,82,92,96,102,131,134,136,140,142,246,247,248,257,261,268,272,273,274,275,276,280,281,282,287,290,291,297,308],"50":[3,14,24,37,42,83,87,147,148,171,172,184,185,187,193,202,203,204,219,224,226,229,274],"500":34,"500kb":76,"501":2,"5011000":29,"5013":[217,231,233],"504":164,"50480030":35,"50530050":35,"509":203,"50m":[171,172,243],"51":[14,24,42,226,227,231,246,247,290],"512":[1,84,224,271,274,275],"512000000":[1,202,203],"512gb":[171,172,238],"512k":24,"512kb":[171,172,173],"512mb":[182,183,220],"51m":[134,229,230],"52":[14,42,171,184,185,220,229,274,275,287],"5209":[246,248],"522":231,"524288":224,"524d":34,"526ff79":4,"52fe":34,"53":[14,42,95,171,174,193,202,203,219,220,226,231,261,280,281,282,284],"53255":[171,172],"533c9b37":35,"53616d70":35,"5378072":39,"5399532365":201,"5399540804":201,"5399576870":[201,202,203],"54":[14,42,184,185,219],"5401431782":201,"540mb":[182,183],"541":[171,174],"544":219,"54686973":35,"549748":[261,280,281,282],"55":[14,42,187],"5509":220,"5512":219,"5544003c":35,"554400a7":35,"55480018":35,"55ae15b":140,"56":[14,34,42,54,219,220,224,226,227],"565":202,"56532f5":4,"566":[182,183],"57":[8,14,32,42,162,215,219,220,226,227,280,281,282],"5799":229,"58":[14,42,171,184,185,246,247,274],"583c8203":226,"584":229,"5843":202,"59":[14,42,117,171,173,187,226,246,247,261,280,281,284],"590":[274,275],"591547":[182,183],"591648":[182,183],"591714":[182,183],"593":[261,280,281,282],"594":[261,280,281,283],"5a":14,"5ac71c9":220,"5b":14,"5c":[14,171,172],"5d":14,"5e":[14,231,233],"5f":14,"5gt":220,"5kb":[290,291],"5m":[220,281,282],"5mb":52,"5second":166,"5th":[165,188,189,190,198,218,222,244,256],"6":[1,2,33,35,38,42,44,81,82,96,100,131,136,139,142,147,148,164,168,171,172,182,183,184,185,187,189,193,201,202,203,204,216,217,219,220,226,227,228,229,230,231,232,233,238,243],"60":[14,42,92,103,117,184,185,219,229,231,246,247,271,274,275],"60000000":[162,215,226,227],"6002":[217,231,233],"600c3c0100000":[281,284],"600c3c0300000":30,"600e800000000":29,"603fc00000000":[29,226,228,257,274,275],"60ce59ccd0e9":221,"61":[14,42,81,171,193,246,247,274],"61207361":35,"615":[280,281,282],"61626364":35,"616d706c":35,"61726520":35,"62":[14,42,94,161,171,193,202],"620":[193,272,273],"621":204,"623fc00000000":[231,232,257,274,275],"628283":[157,187],"628341":[157,187],"628388":[157,187],"628423":[157,187],"628458":[157,187],"62ac7631a":[231,236],"63":[14,21,24,42,58,89,91,117,148,171,173,180,182,183,231,232],"6367640":[274,275],"6374696f":35,"64":[2,14,24,31,32,33,35,37,41,42,58,84,88,89,90,93,103,134,138,162,202,203,214,224,226,227,231,232,246,247,270,274,275,290,291,308,309],"641":224,"64206461":35,"64756d6d":35,"649":274,"64bit":[120,132,171,172,175,224],"64byte":[70,290,291],"64k":[2,24,41,219,255,274,290,291,308],"64mb":274,"65":[14,42,128,147,148,202,203],"65206572":35,"652533":[246,247],"652651":[246,247],"652766":[246,247],"652837":[246,247],"653":220,"6536":274,"65637469":35,"65666768":35,"6572726f":35,"65736520":35,"65840":[171,174],"65881":[171,174],"66":[14,42,128,187,202,203,204,226,231],"660":138,"663":229,"6656":36,"6667":202,"66696e65":35,"67":[14,42,69,161],"67207361":35,"674":226,"67547":[171,174],"67560":[171,174],"67561":[171,174],"6767696e":35,"67845":[171,174],"67954":[171,174],"67998":[171,174],"67999":[171,174],"68":[14,42,69,193,202,203,213,220],"68000":[171,174],"68001":[171,174],"68002":[171,174],"68003":[171,174],"68004":[171,174],"6817":203,"6888":229,"69":[14,37,42,124,204],"692":202,"6947":202,"694794":220,"696a6b6c":35,"69902":[162,215,226,227],"6a":14,"6a00709":[231,232],"6a78496":4,"6b":14,"6c":14,"6c652065":35,"6d":14,"6d6e6f70":35,"6d706c65":35,"6e":14,"6e203200":35,"6f":14,"6f6e3100":35,"6f722053":35,"6m":[290,291],"6q0dg340so":[231,232],"6th":[139,166,172,177,182,199,246,247,248,258,278,287],"6x":[274,275],"6x64k":[226,228],"7":[1,2,33,35,37,38,42,60,76,82,100,131,136,142,147,148,161,162,164,169,171,172,182,183,184,185,187,193,202,203,204,205,206,215,217,219,220,224,229,230,231,232,233,238,244,246,247,248,254,257,261,267,270,271,272,274,275,276,280,281,282,283,284,290,308],"70":[14,42,115,171,172,182,183,231],"70023":[162,215,226,227],"706c6520":35,"71":[14,42,51,171,203,220,231,232],"71664fd":141,"71727374":35,"719":231,"72":[42,51,55,70,171,172,231,232],"72205361":35,"72206465":35,"72206c6f":35,"726f7220":35,"726f7273":35,"72726f72":35,"73":[42,51,148,171,182,183,224],"731":226,"7314":219,"736":171,"736a08b996e292a449c4996edb264011dfe56a40":[246,248],"737572":[261,280,281,284],"737596":[261,280,281,284],"737611":[261,280,281,284],"737621":[261,280,281,284],"737c0ba3d72b8aab05a765a9fc111a48faac0f75":[274,275],"74":[42,51],"74612073":35,"748":224,"7491":193,"75":[42,51,147,148,193],"751":220,"753417":[246,247],"753498":[246,247],"753509":[246,247],"753518":[246,247],"755":226,"75767778":35,"75mb":52,"76":[42,47,147,224,226,274],"764":148,"7688":[162,215,226,227],"768mb":[226,227],"77":[42,47,229,231],"770":226,"775824":[162,215,226,227],"775856":[162,215,226,227],"775883":[162,215,226,227],"775884":[162,215,226,227],"775885":[162,215,226,227],"775886":[162,215,226,227],"775889":[162,215,226,227],"775890":[162,215,226,227],"775897":[162,215,226,227],"775899":[162,215,226,227],"775900":[162,215,226,227],"775901":[162,215,226,227],"775903":[162,215,226,227],"775904":[162,215,226,227],"775906":[162,215,226,227],"775907":[162,215,226,227],"775908":[162,215,226,227],"775909":[162,215,226,227],"775911":[162,215,226,227],"77777777":[226,228],"77mb":[147,148],"78":[42,47,148,171,231],"780u":[290,291],"78125":27,"784":161,"79":[42,116,224,231,232],"790":182,"790275m":182,"79206572":35,"793f6f5b32c96f2774bd955b6062c74a672317ca":189,"797a00":35,"799":274,"7a3f307":[274,275],"7bcbc78c":267,"7c7b1b7848002514":[182,183],"7c7b1b7848002524":[182,183],"7c7f1b78":[162,215,226,227],"7c832378":[162,215,226,227],"7ffddf8000":14,"7s":[226,228],"7th":[167,200,219,223,224,225,262,264],"8":[1,2,33,36,38,42,70,76,78,82,87,102,115,123,130,131,132,134,136,142,147,148,161,164,170,171,172,173,174,175,178,182,183,184,185,187,193,202,203,204,213,218,219,220,224,226,227,231,232,233,234,235,236,245,246,247,251,259,261,267,268,271,272,273,274,275,279,280,281,282,283,286,290,291],"80":[42,46,164,171,172,193,219,224,281,282,284],"800":34,"80000000":[202,203],"8000000002880005":201,"80002000":35,"8001":136,"8007":231,"8013c00":27,"802":219,"803":37,"804":[37,171,172],"8040000000000000":[157,187],"80610028":[162,215,226,227],"80eee1946":[246,247],"80h":[281,284,290,291],"81":[37,42,50,184,185,224,281,284],"815417dcda2e":[279,281,282],"8192":224,"82":[35,42,50,193,274,281,284],"824":34,"827":231,"828363":[217,231,233],"828365":[217,231,233],"828368":[217,231,233],"828375":[217,231,233],"828376":[217,231,233],"828382":[217,231,233],"828384":[217,231,233],"828389":[217,231,233],"828391":[217,231,233],"828394":[217,231,233],"828396":[217,231,233],"828399":[217,231,233],"828403":[217,231,233],"8286":35,"83":[42,50,147,226,274],"8340a9642bba":274,"84":[42,50],"842":[28,129,146,171,174,229,230],"85":[42,55],"8516":219,"852c0000":[231,232],"8546":221,"85a1de35cbe4":[171,174],"85cf528":4,"86":[42,45],"866":229,"87":[42,125,171,226,231],"8718":[213,220],"8748":221,"876":204,"87m":[134,229,230],"88":[42,120,147],"8810":220,"883898":[231,233],"886":[147,148],"89":[42,77,147,148],"893339":[246,247],"8b":305,"8gt":220,"8gv0h":155,"8k":24,"8kb":76,"8tb":[182,183],"8th":[167,168,201,206,220,221,222,291],"8x":[286,290,291],"9":[1,4,35,38,42,43,82,102,123,131,136,138,139,142,145,147,148,151,161,164,171,172,173,174,175,178,182,183,184,185,187,193,202,203,204,208,213,217,219,220,224,226,227,229,230,246,247,248,250,259,272,273,274,279,287,290,291],"90":[42,77,226,227],"900":34,"9000000000001000":[162,171,173,182,183,214,224],"9000000000001003":[162,215,226,227],"9000000000009033":[162,215,226,227,246,247],"9000000000201000":[162,182,183,214,224],"9000000000201002":[178,182,183],"900000000280b033":[231,233],"9000000030001000":[171,173],"9005":[286,290,291],"9078f8268922":[286,290,291],"90d53934c2da":182,"90ec2e65314c":[281,284],"91":[37,42,50],"91210028":[162,215,226,227],"9146":274,"92":[42,148,171],"929":231,"93":[42,102,171,219,224,226,229,287],"937":226,"94":[39,42,50,171,174,178,182,183,193],"941":[184,185],"94110":138,"947741":202,"947793":202,"947838":202,"95":[42,127,219,220,274],"959":147,"95f7b3b9698b":[290,291],"96":[42,82,202,203,231,274],"9619":231,"96593":281,"969":161,"97":[42,80,161,171,224,229,231],"9727fe3":[231,232],"9733":[213,220,221],"9776":231,"9797":[274,275],"97m":[286,290,291],"98":[24,42,58,147,171,184,185,220,224,229,290,291],"9817c9e29b6fe00daa3a0e4420e69a97c90eb373":[231,234],"9870429550":39,"99":[42,48,147,148,171,219,231],"9944":37,"99505c03f493":[267,272],"9999":117,"999999":117,"99m":[286,290,291],"9c2d82394fd2303847cac4a665dee62556ca528a":191,"9c73e9f":[231,232],"9th":[139,155,156,161,164,169,173,186,214,248,261,280,294],"\u00ecbm":23,"abstract":[51,106,118,132,138,146,226,227,246,247,308],"boolean":[135,250,274,275],"break":[2,171,172,174,182,183,202,204,219,220,224,226,227,229,230,231,234,272,273,281,282,286,290,291],"byte":[1,11,14,34,35,39,47,55,69,70,75,76,78,84,88,89,103,118,130,161,162,171,172,173,182,183,184,202,203,215,224,226,227,229,230,231,232,246,247,248,253,254,257,261,272,273,274,275,276,280,281,282,284,286,290,291,305,308],"c\u00e9dric":[147,148,171,184,185,193,202,203,219,220,229,274],"case":[2,14,17,22,35,44,46,50,55,58,61,68,70,73,104,114,120,122,124,134,135,144,145,147,148,149,150,160,162,163,164,171,172,173,177,178,180,182,183,194,195,198,202,203,205,213,215,216,217,220,221,226,227,228,229,230,231,232,233,241,246,247,248,250,251,257,258,261,265,268,271,272,273,274,275,276,277,278,280,281,282,283,284,286,290,291,303,305,308],"catch":[146,171,172,202,204,220,246,247,272,274,275,287],"char":[35,44,68,118,287,303],"class":[15,16,19,27,30,41,54,162,171,172,213,215,220,258,278,281,282],"const":[35,49,68,303,306],"default":[1,2,4,14,20,41,132,133,162,171,172,182,183,189,195,199,202,203,204,205,207,213,220,221,226,227,228,229,230,231,232,235,238,246,247,248,255,256,261,265,268,272,273,274,275,277,280,281,282,284,286,290,291,297,305,308],"do":[0,2,4,13,22,35,36,37,39,41,42,43,44,47,49,70,90,93,95,100,106,108,115,120,124,130,132,133,138,139,141,146,150,153,157,158,162,171,172,173,174,178,179,180,181,182,183,187,189,193,194,202,203,204,205,207,208,210,213,217,219,220,223,224,225,226,227,228,229,230,231,232,233,234,235,236,241,246,247,248,250,252,258,261,265,266,267,272,273,274,275,278,280,281,282,284,285,286,287,290,291,297,301,302,303,305,308],"enum":[20,35,46,54,58,67,69,70,71,79,80,81,82,84,92,95,96,98,100,101,102,106,107,112,115,270,271,274,275],"export":[14,15,41,109,119,133,135,145,171,172,175,182,183,220,221,222,224,226,227,229,230,231,235,258,278,281,282,290,291,307],"final":[108,139,147,148,166,171,172,173,174,175,176,181,182,183,202,203,206,217,220,221,222,223,224,225,227,228,230,231,232,233,234,235,236,247,248,258,272,278,281,282,283,284,290,291],"float":[21,22],"fr\u00e9d\u00e9ric":171,"function":[2,6,17,22,35,39,41,42,44,56,57,58,61,69,70,74,75,87,88,89,90,93,97,98,99,100,101,103,105,108,121,132,134,144,145,146,147,148,151,154,161,162,171,172,173,174,180,182,183,184,185,189,202,203,204,206,207,215,217,219,220,221,223,224,225,226,227,229,230,231,232,233,246,247,248,250,257,258,261,265,272,273,274,275,277,278,280,281,282,285,286,287,290,291,297,303,306,308],"hor\u00e1k":[147,148],"import":[36,51,76,133,139,140,165,168,171,172,184,185,189,201,202,203,204,220,226,227,228,231,232,238,246,247,258,267,268,272,273,278,303],"int":[35,43,44,60,73,75,106,109,110,117,119,120,128,204,303,306],"long":[2,42,75,93,108,147,149,171,172,182,183,202,204,207,209,217,220,226,227,228,231,233,246,247,258,259,261,265,272,273,274,275,276,278,279,280,281,282,284,286,290,291],"new":[1,4,5,19,21,22,28,35,40,44,47,54,58,70,71,73,77,107,108,113,118,125,130,131,133,134,139,140,146,154,157,162,173,174,175,187,188,189,190,192,193,195,196,197,198,199,200,201,204,205,206,209,215,218,219,221,222,223,225,228,233,234,235,236,237,238,241,244,248,258,266,272,273,274,275,276,278,283,284,300,303,305,306,308],"null":[35,43,44,45,53,55,75,81,117,118,144,145,146,166,171,172,174,182,183,202,217,220,226,227,231,233,261,267,272,274,275,276,277,280,281,282,287,303],"public":[23,42,81,118,133,138,141,219,226,227,290,291,306],"return":[17,35,38,41,42,46,49,51,52,56,57,58,59,62,66,68,73,88,89,90,93,97,98,101,103,105,108,121,130,134,135,146,153,154,158,160,161,162,163,171,172,173,174,177,180,181,182,183,187,191,193,201,202,203,208,213,214,215,216,217,220,221,224,225,226,227,228,229,231,232,233,234,241,246,247,248,251,252,256,258,261,266,270,272,273,274,275,277,278,280,281,282,284,285,286,288,290,291,293,303,308],"short":[42,124,125,182,183,212,217,219,220,221,222,224,225,226,227,228,230,231,232,235,246,247,258,278,281,282,291],"static":[1,39,62,64,65,88,106,114,115,125,126,147,148,161,171,172,184,185,206,217,224,226,227,231,233,246,247,306],"switch":[0,58,101,102,132,133,135,146,171,172,173,182,183,201,202,203,213,220,221,226,227,229,230,241,246,247,248,270,272,274,275,281,282,284,286,290,291,304,305,308],"throw":[182,183,220,246,247,290,291],"transient":[41,117],"true":[4,106,134,171,172,182,183,202,203,204,226,227,228,231,232,258,272,273,278,281,282,290,308],"try":[5,43,44,49,113,131,147,149,162,171,172,182,183,193,202,203,204,215,217,220,224,226,227,229,230,231,232,233,241,246,248,250,261,268,270,271,272,273,274,275,278,280,281,282,284,286,290,291,308],"var":[17,290,291,303],"void":[35,44,50,51,58,83,84,106,116,118,124,125,217,231,233,303,306],"while":[1,2,13,20,28,40,41,42,43,44,50,61,76,81,93,102,103,108,117,121,131,132,133,138,157,171,172,173,174,179,182,183,187,189,191,193,201,202,203,207,208,217,219,220,221,224,226,227,228,229,230,231,232,233,243,246,247,248,250,255,261,267,271,272,273,274,275,277,280,281,282,284,286,287,290,291,297,303,305,308],A:[0,2,4,14,16,21,22,39,42,44,49,50,55,58,70,75,87,88,89,98,100,102,103,113,114,122,127,131,132,135,138,139,140,145,147,148,161,164,171,172,178,180,182,183,184,185,187,193,200,202,203,204,219,220,224,226,227,228,229,231,232,234,236,238,241,246,247,261,265,272,273,274,275,280,281,282,284,287,290,291,308],AND:[14,246,247,281,282],AT:[35,132],ATS:[73,221,267,272,286,290,291],And:[37,61,68,71,162,171,172,173,215,220,229,258,278,281,282,283,286],As:[0,17,22,43,58,113,130,140,141,147,149,154,155,156,171,172,173,174,182,183,193,202,203,204,205,220,226,227,229,231,232,239,246,247,250,257,272,274,275,277,278,280,281,282,283,284,290,291,303,308],At:[35,39,54,75,118,162,171,172,215,217,226,227,228,229,230,231,233,246,247,258,261,274,275,278,280,281,282,286,290,291,303,305],BE:[130,138,220],Be:[202,203,229,230],But:[37,147,149,162,163,171,173,180,181,182,183,208,215,216,217,226,227,231,233,246,247,261,266,267,270,271,272,273,274,275,280,281,282],By:[17,138,171,172,181,208,226,227,246,247,266,268,272,273,274,275,286,308],FOR:101,For:[0,2,4,13,14,15,16,17,18,19,21,22,24,28,35,37,39,42,44,46,51,56,62,63,64,65,68,70,78,88,89,101,103,105,107,109,110,115,119,121,126,131,132,133,134,135,137,139,140,141,161,162,171,172,173,174,175,177,182,183,184,185,193,202,203,204,205,206,215,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,246,247,248,250,254,272,273,274,275,276,281,282,283,284,290,291,303,305,308],IF:[101,204],IS:101,If:[0,1,2,4,7,9,12,13,21,22,34,35,42,47,48,50,51,55,61,62,63,64,65,68,70,71,75,83,87,100,102,103,107,108,114,117,118,123,124,127,130,131,132,133,134,135,138,139,140,141,147,149,151,154,157,160,161,162,168,171,172,176,182,183,187,193,202,203,204,208,209,215,217,219,220,223,224,226,227,229,230,231,232,233,236,246,247,248,251,252,255,257,258,261,268,270,271,272,273,274,275,277,278,280,281,282,283,284,285,286,290,291,303,304,305,306,308],In:[2,4,13,14,16,17,22,24,33,35,38,40,42,43,44,46,50,55,58,61,68,70,84,110,114,118,120,123,124,131,133,135,136,151,160,161,162,163,165,167,171,172,173,174,176,182,183,188,189,193,194,198,201,202,203,204,207,208,213,214,215,216,217,220,222,224,225,226,227,229,230,231,232,233,235,236,241,243,246,247,248,250,257,258,261,265,270,271,272,273,274,275,276,278,280,281,282,283,285,286,287,290,291,297,304,305,306,308],It:[1,2,4,8,17,21,23,32,35,41,42,43,44,47,49,50,55,58,66,71,76,83,87,104,106,109,114,121,125,126,127,132,133,134,135,139,143,144,152,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,305,308],Its:[28,70,306],NO:[131,193,304],NOT:[1,2,5,15,17,49,55,62,63,64,65,76,100,106,114,115,132,140,171,173,182,183,202,203,204,205,206,220,226,228,274,275,303,305],No:[0,17,42,50,70,74,83,109,110,118,119,140,165,171,172,193,196,201,238,246,247,251,272,273,274,275,280,281,282,294,303],Not:[2,35,51,60,76,77,87,93,99,106,127,129,132,140,157,162,171,172,178,182,183,187,215,226,227,246,247,290,291],OF:[76,281],ON:[104,135,220,274],OR:[217,231,233,274,275,297,309],Of:58,On:[0,2,5,8,12,28,38,40,41,42,44,52,54,61,74,115,123,132,133,134,135,137,146,147,149,150,152,153,162,164,171,172,174,182,183,184,185,188,189,202,203,206,214,220,221,226,227,229,230,231,232,238,246,247,248,254,256,258,261,265,267,268,272,273,274,275,278,280,281,282,284,285,286,290,291,303,305],One:[41,46,134,162,215,224,231,232,246,247,258,278,281,282,308,309],Or:[2,226,227],Such:[37,140],THE:136,THe:274,TO:[136,178,182,183],That:[4,22,36,124,132,153,171,172,173,177,182,183,226,227,231,232,238,239,240,246,247,274,275,281,282,308],The:[0,1,2,4,5,6,8,9,10,12,13,14,15,16,17,18,19,21,22,23,28,29,30,31,32,34,35,36,37,40,41,42,43,44,49,51,52,53,54,55,56,57,58,59,61,68,69,70,73,74,75,76,77,81,84,85,86,87,88,89,90,93,97,98,99,100,101,102,103,104,105,108,109,110,111,113,117,118,119,120,121,122,123,124,129,131,132,133,134,135,138,139,140,141,145,146,148,149,150,153,154,157,159,160,162,171,172,173,174,175,178,180,181,182,183,185,186,187,188,189,193,194,196,197,201,202,203,204,205,206,208,213,217,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,238,241,242,243,246,247,248,249,250,251,252,253,255,258,259,261,265,266,267,268,269,270,271,272,273,274,275,277,278,279,280,281,282,283,284,285,286,288,290,291,297,302,303,304,305,306,308,309],Their:28,Then:[35,36,135,171,172,182,183,220,231,232,240,246,248,272,273,281,282,286,290,291],There:[2,4,14,22,35,39,41,44,46,47,49,50,51,52,68,73,81,108,117,121,131,132,133,134,137,146,171,172,173,174,175,182,183,184,185,202,203,204,206,220,221,224,226,227,228,229,230,231,238,246,247,248,251,265,267,270,272,273,274,275,281,282,284,287,290,291,297,303,308,309],These:[0,2,5,9,10,13,14,19,29,34,35,37,41,42,47,51,52,58,69,71,73,77,132,134,137,171,172,176,182,183,202,203,220,221,224,229,230,231,232,236,246,247,265,267,272,274,275,281,283,284,290,291,297,303,305,306,308],To:[0,4,35,124,131,134,136,157,171,172,182,183,187,204,222,224,225,226,227,229,230,231,232,236,250,251,267,272,273,274,275,277,281,282,284,285,290,291,303,307],WITH:220,Will:[8,52,145,220,290,291,308],With:[22,28,133,136,147,148,162,164,171,172,195,202,204,206,215,219,220,225,226,227,229,230,231,236,246,247,267,272,273,274,275,281,282,283,286,290,291],_4b:[226,227],_:222,___backtrac:[246,247],___print_backtrac:[246,247],__be16:60,__be32:[60,70,84],__be64:[58,60,70,84,127,281,282,306],__builtin_parityl:[171,172],__dt_add_property_cel:[171,174,224],__flush_consol:[272,273],__next_timer_interrupt:37,__noreturn:[217,231,233],__opal_cal:[281,284],__opal_flush_consol:[290,291],__pack:220,__secondary_cpu_entri:[182,183],__section:[290,291],__stack_chk_fail:[160,182,220],__trigger_attn:40,__try_lock:[274,275],__unus:42,__va_args__:287,__xive_cache_scrub:[171,172,241],_abort:[171,174,182,183,224,246,247,256,261,271,274,275,277,280,281,282],_be64:[286,290,291],_en:[271,274,275],_indic:[10,146],_lite:[231,232],_mrk:[226,227],_occ:144,_prlog:[272,273,287],_reg:[286,290,291],_savegpr0_28:[290,291],_window:[258,278,281,282],a000:34,a001:34,a0020:[202,203],a103:220,a200:34,a300:34,a5721ba270:220,a6d4a7884e95cb9c918b8a217c11e46b01218358:191,a8e6cc3f4:182,aa:[213,220],ab:[2,213,220,246,247],abc123456:34,abcdefgh:35,abcdefghijkl:35,abcdefghijklmnopqrstuvwxyz:35,abi:[15,16,44,132,133,134,137,145,202,203,205],abil:[4,22,171,172,184,185,220,226,228,229,230,237,290,291,308],abiv2:[274,275],abl:[2,22,51,54,55,113,117,118,131,162,165,166,171,172,173,174,182,183,204,206,215,219,220,226,227,246,247,258,272,273,278,281,282,290,291,308],abnorm:[147,149,171,172,263,296],abort:[0,41,144,146,147,148,171,173,174,178,182,183,202,204,224,226,228,251,256,261,271,272,273,274,275,277,280,281,282,290,291,294],about:[0,2,22,34,35,50,51,58,62,63,64,65,70,84,128,131,132,141,146,170,171,172,173,182,183,189,195,202,203,204,205,206,217,219,220,226,227,228,229,230,231,233,246,247,250,252,272,273,274,275,281,282,284,286,290,291,306,307,308],abov:[2,4,5,8,10,15,44,58,62,63,64,65,67,89,103,107,113,130,131,132,135,140,162,171,172,182,183,188,193,213,215,220,224,226,227,231,235,236,238,241,246,247,258,272,273,274,275,278,281,282,308],absenc:[44,46,255,258,274,278,281,282],absent:[8,77,226,227,308],absolut:[15,132,219,226],abwmgmt:220,ac922:136,acceler:[25,38,171,172,229,230,272],accept:[2,17,38,46,50,51,121,138,139,226,227,258,274,275,278,281,282],access:[1,9,10,20,28,38,42,52,60,69,107,122,133,135,146,150,171,172,174,180,182,183,184,185,189,194,198,202,203,204,206,220,224,226,227,229,230,231,232,233,236,238,241,243,246,247,250,258,265,268,271,272,273,274,275,278,281,282,284,286,288,290,291,294,306,308],accessor:[286,290,291],accid:[290,291],accident:[226,227],accommod:[70,147,149,171,172],accomod:[135,226,227],accompani:[281,282,290,291],accomplish:[40,221],accord:[21,68,135,171,172,213,220,226,227,228,274,275,281,284,290,291,304,309],accordingli:[104,108,135,220],account:[182,183,220,221,231,233,254,256,274,276,277,286,290,291],accross:[226,227,228,308],accumul:[37,171,175,182,183],accur:[171,172,308],accuraci:100,achiev:[58,220,246,247,274,275],achiv:[246,247],ack:[50,51,139,144,171,184,185,187,193,202,203,219,226,231,232,258,278,281,282],ack_id:51,acknowledg:[35,50,51,122,162,171,172,215,226,227,231,232,287],aco:[246,247],across:[2,4,17,40,71,115,124,132,171,193,202,203,219,226,227,229,230,231,242,305],act:[220,246,247,274,275],action0:[251,274,275],action:[35,54,58,70,147,149,166,171,173,181,182,183,208,226,227,228,229,231,232,246,247,266,272,273,287,290,291,303],activ:[2,13,40,58,68,70,102,112,114,134,140,161,162,171,172,201,202,203,215,219,223,226,227,241,251,272,273,274,275,281,282,290,297,303,305],actual:[2,24,35,47,58,68,76,104,121,123,124,132,135,162,171,172,174,182,183,195,200,201,202,203,213,214,215,217,220,221,226,227,229,231,232,233,241,246,247,248,250,254,258,261,265,267,271,272,273,274,275,276,278,280,281,282,283,286,288,290,291,293,297,300,304,308],actual_s:[231,232],actuals:[202,204],ad:[3,5,9,13,18,19,22,24,35,54,70,104,115,131,135,147,148,149,151,155,161,164,171,172,174,181,184,185,187,193,202,203,204,217,219,220,224,226,227,229,230,231,232,233,246,247,248,261,265,271,272,273,274,275,278,280,281,282,285,286,287,290,291,302],adapt:[86,102,104,135,154,201,202,203,213,220,221,226,227,229,230,231,232,268,272,273,274,275,281,282,284,290,291],adaptor:[147,148],add:[2,22,34,35,40,50,71,86,101,104,130,132,133,134,135,136,139,140,144,145,146,147,148,149,151,154,161,162,163,166,171,172,173,174,175,178,180,182,183,184,186,187,193,194,201,202,203,206,211,215,216,218,219,220,221,222,224,225,226,227,228,229,230,231,232,234,235,237,238,239,241,242,244,246,247,248,249,250,251,253,255,256,257,258,265,266,267,272,273,274,275,276,277,278,281,282,283,284,286,287,290,291,294,300,303,305,306],add_cpu_idle_state_properti:[246,248],add_icp:220,add_iplparams_seri:220,add_opal_nod:[182,183],add_properti:[135,281,282],add_region:[226,228],add_sensor_nod:[272,273],add_vas_nod:[171,174],add_xics_icp:220,addit:[2,17,22,29,35,44,70,131,135,141,145,152,157,165,171,172,174,187,221,226,231,232,246,247,248,259,266,268,272,273,274,275,279,286,290,291,297,302,303,308],addition:[2,22,132,139,171,172,193,226,228,231,246,247,257,261,265,272,273,274,275,280,281,282,285,290,291,308],addr2func:[290,291],addr2lin:[290,291],addr:[26,28,50,60,61,69,75,82,87,103,171,172,220,224,246,247,308,309],addr_typ:69,address:[2,3,5,8,9,14,24,27,28,29,30,31,32,33,36,47,50,56,60,61,69,71,73,75,76,81,83,87,88,89,90,92,93,97,98,103,112,124,128,130,132,134,141,147,148,171,172,173,174,175,178,182,183,202,203,204,220,221,224,225,226,227,228,229,230,231,232,242,245,246,247,256,257,270,272,273,274,275,281,282,283,284,286,287,290,291,306,308,309],adequ:[131,274,275,290,291],adher:[17,138,171,172],adiga:[171,219,231,274],adjac:[256,274,275],adjust:[2,221,261,280,308],admin:[171,172],administr:[12,127],adopt:[192,224],adpat:220,adriana:[171,184,185,274],adu:231,adu_scom:[272,273,274,275],advanc:[1,213,220],advantag:[155,182,183,226,227],advers:[226,227],advertis:[7,21,22,61,155,171,175,180,182,193,202,203,226,227,255,257,274,277,281,282],aer:[84,164,221,300],affect:[58,147,148,171,172,181,184,185,196,208,231,232,242,246,247,258,266,267,272,273,274,275,278,281,282,290,291,303],affin:[2,226,228],afl:[257,281,282],afraid:139,after:[0,2,4,13,35,37,39,40,43,50,58,61,70,104,113,115,121,135,139,147,148,152,153,154,157,158,162,164,167,168,170,171,172,173,174,177,179,180,182,183,187,189,190,191,193,198,201,202,203,208,209,213,214,219,220,221,224,226,227,228,229,230,231,232,236,239,241,242,246,247,248,251,254,261,263,267,271,272,273,274,275,276,278,280,281,282,284,286,287,289,290,291,293,303,308],afterward:[182,183,246,247,303],afu:[75,182,183,281,283,290,291],ag:219,again:[35,43,49,50,62,125,131,188,217,224,231,233,246,247,265,270,272,273,274,275,278,281,282,303,308],against:[4,19,100,171,172,175,182,183,220,226,227,257,274,275,276,303,305,306],agent:[229,230],aggreg:[182,183],aggress:[182,183],agnost:[37,246,247],ago:[42,261,280,281,282,285,287,290,291],agre:[138,154],agress:[229,230],ahb:[272,273],ahead:[171,172,246,247],aib:[159,194,196,256,274,275],aid:[171,172,231,233],aim:[22,132,139,203,204,205,206,211,219,258,278,281,282],air:34,aka:[2,7,38,189,224,225,229,230,308],akshai:[171,219,231,274],alarm:[19,226,227],alastair:226,alert:[1,58,154,157,187,193,220,224,226,228,271,274,275,281,282],alexei:[171,219,220,224,231,274],algo:[23,171,172],algorithm:[17,28,202,203,229,230,274,275],alia:[128,131,226,227],alias:[197,202,203],align:[9,52,56,75,89,147,149,171,172,173,182,183,194,197,202,203,219,220,226,227,229,230,231,233,246,247,259,261,279,280,281,283,287,290,291,308],alimit:120,alink:37,alistair:[147,148,167,171,184,185,187,193,202,203,219,220,224,226,229,231,274],all:[1,2,4,8,13,14,17,18,19,21,22,23,24,28,31,32,34,35,36,39,40,42,44,51,52,58,59,68,70,71,72,76,78,81,88,93,100,101,103,106,107,113,115,116,117,118,120,122,124,127,131,132,133,134,136,137,138,139,140,144,147,148,149,150,151,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,174,175,180,181,182,183,184,185,186,188,189,191,192,193,195,198,201,202,203,204,205,206,207,208,209,214,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,238,245,246,247,248,257,258,259,261,264,266,267,268,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,290,291,295,302,303,305,306,308],allevi:[265,272,273],alloc:[0,2,22,24,32,35,39,54,61,70,73,75,84,102,107,118,120,131,134,147,148,165,168,171,172,182,183,184,185,193,202,203,220,221,224,226,227,231,232,233,246,247,250,251,267,268,271,272,274,275,276,281,282,286,290,291,294,303,305,307,308],alloc_ord:308,allot:35,allow:[0,4,13,16,21,22,28,29,41,46,47,51,54,70,77,84,89,106,107,110,132,138,139,154,155,161,168,171,172,173,178,182,183,184,185,186,187,193,202,203,206,219,220,221,222,224,225,226,227,228,229,230,231,232,246,247,248,253,256,258,261,265,272,273,274,275,277,278,281,282,283,284,290,291,297,306,308],almost:[136,171,172,290,291],alon:[226,227,272,273,274,275],along:[2,37,73,76,133,171,174,181,182,183,208,217,226,227,229,230,231,232,246,247,266,272,273,274,275,280,281,282,290,291,308],alongwith:[58,246,247],alreadi:[41,75,108,121,133,134,138,140,150,161,171,172,178,182,183,184,185,201,202,203,222,226,227,228,229,230,231,232,246,247,248,251,253,267,271,272,273,274,275,281,282,283,284,287,290,291,305,308],also:[1,2,4,7,17,21,22,24,28,32,33,35,37,40,50,51,69,73,78,100,102,113,121,124,128,131,132,133,134,139,141,146,147,148,151,157,169,171,172,173,174,175,179,182,183,187,193,202,203,204,213,217,220,224,226,227,228,229,230,231,232,233,235,238,242,246,247,250,251,254,255,257,258,259,260,261,265,267,270,272,273,274,275,276,278,279,280,281,282,283,284,285,286,290,291,303,305,306,308],alter:[171,172,246,247,305],altern:[37,40,72,162,215,250,274,275,290],although:[16,43,49,50,51,70,117,120,132,139,171,172,219,231,232,286,290,291,297],alwai:[2,8,41,55,58,61,66,70,81,131,134,141,154,162,171,172,173,177,182,183,184,185,193,201,202,203,204,205,213,215,220,224,226,227,229,230,231,232,234,246,247,250,256,257,258,261,272,273,274,275,277,278,280,281,282,284,285,286,290,291,305,308],am:[138,219],ambient:[13,54,70],ambigu:[154,217,226,227,231,233],ami:[0,156,206,220,246,247,250,272,273,278,281,282],amit:274,among:[133,202,203,246,247],amount:[12,13,35,50,127,131,133,171,172,178,182,183,217,221,226,227,231,232,265,272,273,274,275,281,284,308],amr:[226,227],an:[0,1,2,4,5,9,12,13,16,17,19,21,22,23,28,30,35,37,41,42,43,44,45,47,49,50,51,52,54,55,56,57,58,59,61,62,63,64,65,66,67,68,70,71,74,77,82,83,84,86,88,89,90,93,96,97,98,101,102,104,105,106,107,108,109,110,111,114,118,119,120,121,124,127,128,130,131,132,133,134,138,139,140,141,143,146,147,148,150,151,153,155,156,157,159,160,161,162,165,170,171,172,173,174,175,176,180,182,183,184,185,187,193,196,201,202,203,204,206,208,214,215,219,220,221,224,225,226,227,228,229,230,231,232,233,234,238,239,241,243,246,247,248,249,250,251,252,253,254,255,256,258,261,265,266,270,271,272,273,274,275,278,280,281,282,283,284,285,286,287,290,291,297,303,304,305,306,307,308],analog:205,analysi:[44,50,147,148,161,171,184,185,193,202,203,219,224,226,231,246,247,280,281,282],analyz:[58,70,251,274,275],ananth:[147,148,171,184,185,219,220,224,226,229],anchor:34,ancient:[46,150,224,290,291],andrei:[147,148,202,204],andrew:[147,171,184,185,187,193,202,203,204,219,220,224,226,229,231,274],aneesh:[184,185],ani:[0,1,2,4,5,13,17,23,35,37,39,42,43,44,49,55,56,58,59,60,61,78,81,89,96,113,117,118,120,132,133,134,135,137,139,141,147,148,154,157,161,165,171,172,174,178,179,180,181,182,183,186,187,193,202,203,204,205,208,209,216,217,220,223,224,225,226,227,228,229,230,231,232,233,234,235,236,246,247,248,249,250,251,252,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,277,278,279,280,281,282,283,284,287,288,289,290,291,303,304,305,308],anju:[226,231],annoi:[246,247,274,275],annot:[141,146,181,202,203,220,226,228],anonym:[226,227],anoth:[22,41,58,101,113,132,157,162,168,171,172,182,183,187,214,220,225,229,230,241,270,274,275,281,282,286,290,291,308],answer:[285,290,291],anticip:22,anton:[147,148,202,203,229,231],anybodi:[139,171,172],anymor:[219,229,230,259,279,290,291,308],anyon:[42,136,171,172,281,282],anyth:[0,29,49,115,132,133,182,183,205,221,224,226,227,229,246,248,265,272,273,285,290,291,303,308],anytim:68,anywai:[171,174,182,183,184,185,224,226,227,228,229,230,231,232,246,247,248,281,282],anywher:[133,259,279,287],ap:[139,220],apach:[139,297],apart:[202,204],apc:[171,172,270,274,275],apc_fsm_read_mask:[270,274,275],apertur:[226,227],api:[7,17,38,40,49,51,70,84,104,120,123,132,133,135,139,145,146,147,148,149,154,171,172,175,182,183,202,203,205,217,220,229,230,231,232,233,246,247,261,271,272,273,274,275,280,281,282,283,285,286,290,291,302,306],apollo:[38,224],app:[198,202,203],appar:[171,172],appear:[21,39,41,42,90,93,103,162,171,172,205,214,224,226,227,231,232,246,247,257,265,272,273,274,275,277,281,282,287,290,291,304],append:[35,118,226,227,290,291,303],appli:[17,47,48,52,56,76,88,121,140,164,171,172,182,183,220,226,227,228,231,232,235,246,247,272,273,281,282,286,290,291,303,304,308],applic:[4,34,35,44,139,181,208,266,272,273,281,284,290,291,303,307,309],appriopri:19,approach:[162,215,226,231,246,247,274,275,290,291,302],appropri:[1,12,13,17,23,40,52,73,83,122,132,138,139,171,172,220,226,227,229,230,231,232,234,246,247,268,272,273,274,275,276,286,290,291,303,308],approxim:236,apr:139,april:[146,147,148,149,157,158,179,180,182,187,188,219,220,221,222,223,224,225,246,247,248,264,283,297,302],apss:[171,172,272],aquir:[162,214,225],ar:[0,1,2,4,6,9,12,13,14,15,16,17,19,21,22,27,28,29,31,32,34,35,36,37,38,39,40,41,44,47,49,50,51,52,56,58,62,67,68,69,70,71,73,74,76,77,86,89,100,102,103,104,107,108,110,113,115,117,118,120,122,123,124,127,130,131,132,133,134,135,137,138,139,141,144,146,147,148,149,150,151,154,155,157,159,160,162,163,164,165,169,171,172,173,174,175,176,177,178,179,181,182,183,184,185,187,188,189,190,191,193,195,196,197,198,199,200,201,202,203,204,205,208,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,236,238,239,241,242,243,244,245,246,247,248,250,251,252,254,255,256,257,258,259,261,262,263,264,265,266,267,268,270,271,272,273,274,275,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,293,294,295,296,297,298,299,300,301,303,304,305,306,308,309],arb:[231,232],arbab:[171,219,226,229,231,274],arbitr:60,arbitrari:[13,171,172,202,203,246,248],arbitrarili:[246,247,274,275],arch:106,arch_cpu_idl:37,arch_flash_arm:[212,220],architect:[2,21,22,132,146],architectur:[22,182,183],archiv:[182,183],area:[7,47,71,75,139,144,146,171,172,182,183,220,226,227,274,275,308],aren:[110,121,157,171,172,182,183,187,195,202,203,204,219,220,226,227,229,230,231,236,239,266,272,273,290,291,308],arg:[126,132,202,203],arguabl:[274,275],argument:[2,35,50,52,53,56,82,92,100,101,108,117,120,134,171,172,174,182,183,203,220,226,227,246,247,253,274,275,286,287,303,308],aris:[231,232,274,275,303],arisen:[246,247],arithmet:[226,227,308],arizona:236,arm:[171,172,189,193,202,204,205,272,273],around:[35,50,106,120,139,146,167,171,172,174,182,183,184,185,193,198,202,203,207,220,224,226,227,228,229,230,231,232,236,238,240,246,247,259,265,271,272,273,274,275,279,281,282,286,290,291],arrai:[18,21,22,54,127,171,172,173,226,227,229,230,231,232,246,247,267,272,274,275,281,282,294],arrang:[281,284],arriv:[13,231,232,290,291],artem:274,articl:138,artifact:[220,274,275,306],as_notifi:[182,183,246,247],asb:[78,226,228],ascend:308,ascii:[2,34,35,127,220],asid:302,ask:[50,71,140,168,171,173,182,224,229,230,246,247,285,290,291],asleep:[128,158,187,191],asm:[12,133,171,172,195,202,203,219,220,231,246,247,281,284,301],asn1:225,asn:[182,183,246,247],aspe:[231,232,272,273,274],aspect:[290,291],assembl:[274,306],assert:[0,23,44,50,62,146,147,148,161,171,172,182,183,197,202,203,210,220,226,227,228,229,230,231,232,235,239,246,247,248,258,261,262,263,272,273,274,275,278,280,281,282,286,288,290,291,294,296,301,305],assert_delai:[281,282],assert_fail:[261,280,281,282],assert_perst:[286,290,291],assert_st:96,assess:306,assign:[41,75,134,147,149,171,172,178,180,182,183,184,185,220,226,227,238,241,246,247,248,280,281,282,283,286,290,291,308],assist:[58,70,281,283],associ:[5,22,27,29,30,41,56,61,68,73,88,89,97,118,130,135,143,171,172,180,184,185,194,203,217,226,227,228,231,233,246,247,258,278,281,282,286,290,291,308],assum:[2,21,22,41,58,100,132,154,171,172,174,177,182,183,202,203,212,220,224,226,227,229,230,231,232,246,247,248,250,254,255,258,268,272,273,274,275,276,278,280,281,282,284,290,291],assumpt:[171,172,184,185,206,220,226,227,261,278,280,281,282,308],assur:[93,103],ast2400:[52,220],ast2500:52,ast:[220,250,267,274,275,278],ast_sio_is_en:278,astbmc:[0,136,145,147,149,151,161,165,182,183,202,203,220,231,232,250,272,273,274,275,280,281,282,285,290,291],astbmc_init:[278,281,282],asychron:[104,135],async:[5,45,52,60,109,110,119,120,127,130,131,162,171,172,175,208,213,229,230,243],async_token:[60,68,77,104,114,127],asynchron:[43,52,60,77,104,108,110,117,120,122,124,125,127,131,135,147,148,181,208,220,261,266,272,273,280,281,282,284,290,291],asynchronu:[109,110,119],asynhroun:[258,278,281,282],at24c04:250,at8286:35,at_hwcap2:[21,22,180,182],at_hwcap:[21,22],at_hwcapx:21,atexit:194,atkkkk:35,atllll:35,atom:[133,171,172,182,183,246,247,305],atr:[267,272],atsd0:[281,282],atsd6:[281,282],atsd:[246,247,274,275,281,282],attach:[26,52,102,180,202,204,219,220,226,227,246,247,267,268,272,274,275,281,284,308],attain:13,attempt:[39,47,82,108,110,113,122,146,150,161,168,171,172,174,178,182,183,202,203,208,220,221,224,226,228,229,230,231,234,243,246,247,258,261,265,272,273,278,280,281,282,284,286,290,291,303],attent:[4,10,68,135,171,174,184,185,226,227],attest:306,attn:[40,68,70,135,146,171,172,174,193,226,227],attn_ack:70,attnbtn:[213,220],attr:19,attribut:[15,19,35,161,184,185,202,203,229,230,256,274,275,277,290,291,305],audit:[171,172,229],aug:287,august:[147,149,150,159,160,161,162,163,184,185,186,187,188,189,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,229,230,231,232,233,234,235,236,269,270,292,297],auth:[17,303],authent:304,author:[38,56,88,89,97,118,134,274,275,302],authorit:[171,172],auto:[274,275],autodetect:[229,230],autofs4:[162,215,226,227],autoload:151,autom:[147,148,149,171,219],automat:[28,47,68,133,141,231,232,246,247,272,273,274,290,291,306],autorun:[281,284],aux:21,auxpwr:164,auxv:22,avail:[0,10,13,16,18,19,21,22,30,34,41,42,44,49,50,51,55,58,68,73,74,83,102,108,109,115,120,125,131,135,136,139,153,162,165,171,172,175,177,182,183,202,203,204,213,217,220,226,227,229,230,231,233,246,247,248,268,272,274,275,281,282,287,290,291,297,305,308],averag:[246,247],avoid:[0,5,37,39,58,113,144,145,147,149,160,169,171,172,182,183,198,201,202,203,207,213,220,224,226,227,228,229,230,231,236,237,238,246,247,268,272,273,274,275,281,282,283,284,286,290,291],avsbu:[171,172],aw:[202,203],awai:[5,171,172,182,183,229,230,238,281,282],await:95,awan:193,awar:[50,58,121,147,148,171,172,175,180,182,220,246,247,281,282],awfulli:[290,291],axon:136,axten:[147,148,161,184,185],b0000002:35,b0020:2,b23d9c5b9c83c05e013aa52460f12a8365062cf4:194,b42ff2b904165addf32e77679cebb94a08086966:[229,230],b8b4c79d4419:[286,290,291],b:[2,4,24,36,39,134,138,140,141,184,185,193,225,231,232,265,272,273,274,275],ba4d46fdd9eb:[171,172],babul:[147,148,193],back:[35,42,44,52,58,96,120,124,136,153,162,164,171,172,174,182,183,184,185,188,202,203,215,217,219,224,226,227,228,229,230,231,232,233,236,241,246,247,248,255,266,272,273,274,275,276,281,282,284,290,291,308],backdoor:220,backend:[17,23,42,60,67,117,144,146,171,175,176,182,183,204,258,261,272,273,278,280,281,282,285,290,291],background:[181,208,266,272,273],backlog:220,backplan:34,backport:[140,162,163,189,202,216],backtrac:[144,146,147,149,160,165,171,174,182,183,184,186,189,193,195,202,203,207,220,221,224,226,231,233,246,247,256,261,271,272,273,274,275,277,280,281,282,290,291],backup:[2,58,246,247,281,282],backward:[2,21,22,54,70,171,172,177,182,183,243,248,307],bad:[0,2,80,134,146,157,171,172,187,193,198,202,203,217,220,224,226,227,228,229,231,232,233,238,246,247,250,251,260,261,270,271,272,273,274,275,280,281,282,284,285,286,290,291],baddllp:164,badli:[134,169,226,231,232,272,273,290,291],badtlp:164,bai:[274,275],bail:[150,171,172,176,182,183,226,227,228,281,282,298],bake:[202,204],balanc:[16,281,284],balbir:[171,193,202,203,226,231],band:[35,37,147,148,171,172,220,231,233,281,282],bandhu1:[184,185],bandwidth:[24,37,41,102,178,182,183,268,274,275],bank:[118,303,306],bar0:41,bar2:41,bar:[2,33,41,75,87,147,149,171,172,182,183,220,221,226,227,229,230,231,236,238,241,246,247,267,271,272,274,275,281,283,290,291,298],bare:[0,2,171,172,220,246,247,281,282,284,286,290,291],barebon:[246,247],barf:[171,172,182,183,226,227],barrat:[171,193,202,203,219,220,226,229,231,274],barreley:[136,184,186,220,281,284],barrier:[171,172,220,231,232,270,274,275],basd:68,base:[2,5,8,14,20,22,24,28,30,32,34,35,37,38,42,50,54,68,72,75,76,77,88,91,112,127,132,133,134,135,136,138,139,140,141,144,156,157,160,164,165,168,171,172,175,185,187,204,210,215,227,229,230,236,237,246,247,250,255,258,267,270,278,279,284,286,290,291,297,308,309],base_addr:24,basi:[182,183,184,185,246,247,248,272,273,274,275,276,281,282,283,284,290,291,292],basic:[17,36,58,126,134,147,148,171,172,202,203,219,220,221,231,232,246,247,274,275,290,291,306,308],bathini:[147,148,229],batteri:[70,281,282],baud:2,bb821010:35,bb821410:35,bb822411:[157,187],bb:35,bc7bb3d12bc1:[290,291],bc:[182,183],bcd:117,bcm57810:164,bda7cc4d0354eb3f66629d410b2afc08c79f795f:[182,183],bdf:[73,182,183,226,227,246,247],bdfn:[74,75,171,172,202,203,226,227,274,275],be16:[290,291],be16_to_cpu:[290,291],be32_to_cpu:[290,291],beaus:[274,275],beautifi:[171,173],becam:[22,39,136],becaus:[108,110,113,122,134,135,136,160,171,172,173,182,183,188,193,217,220,224,226,227,231,232,233,234,239,246,247,248,255,257,261,267,271,272,274,275,277,280,281,282,284,286,290,291,297],becom:[70,131,148,149,162,163,171,172,173,174,175,182,183,185,186,193,201,202,203,204,205,206,215,216,217,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,246,247,248,258,261,273,274,275,276,278,280,281,282,283,284,289,290,291,292,297,298,302],been:[0,4,13,14,22,35,41,42,58,62,70,81,84,96,100,108,112,117,131,134,135,139,140,144,148,149,151,154,155,171,172,178,180,182,183,184,185,202,203,204,217,221,224,226,227,228,229,230,231,232,233,235,241,246,247,250,254,257,258,261,266,272,273,274,275,276,277,278,280,281,282,284,286,288,290,291,297,303,305,308],befor:[0,4,21,22,39,42,43,44,52,70,86,96,106,113,114,117,122,124,130,132,133,135,139,147,149,151,159,162,163,168,171,172,173,174,180,181,182,183,184,185,189,196,201,202,203,204,206,208,209,215,216,217,220,221,224,226,227,228,229,230,231,232,233,236,238,241,245,246,247,248,258,261,263,266,267,272,273,274,275,278,280,281,282,284,286,290,291,296,300,303,308],beforehand:224,begin:[4,171,172,182,183,193,246,247,281,282,290,291,303],behav:[21,134,147,149,182,183,220,231,232,274,275,290,291],behavior:[17,44,272,273,303],behaviour:[22,46,110,166,171,172,182,183,196,201,202,203,205,226,227,246,248,272,273,274,281,282,308],behind:[5,104,135,139,171,172,180,201,202,203,220,221,229,230,235,236,246,247,272,281,284],being:[4,22,39,43,50,52,57,58,70,75,79,108,110,117,122,123,124,125,131,139,147,148,157,160,162,165,167,171,172,173,174,175,182,183,187,193,197,201,205,208,213,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,243,246,247,248,254,257,258,260,261,264,265,266,268,272,273,274,275,276,277,278,281,282,286,287,290,291,308],belief:[290,291],bell:[184,185],belong:[14,18,140,168,226,227,229,230,274,286,290,291],below:[1,2,4,15,16,17,18,19,22,26,35,43,44,47,70,89,93,101,102,103,131,134,138,141,147,162,164,171,172,173,174,177,182,183,184,185,193,201,202,203,209,210,213,215,217,220,221,226,227,231,232,233,238,254,272,273,274,275,276,281,282,286,290,291,303,308],ben:[182,183],benchmark:[182,183,229,274,275],benefit:[202,203,226,266,272,273,290,291],benjamin:[147,148,161,164,171,184,185,193,202,203,219,220,224,226,229,231,274],beofr:[182,183],beor:[246,247],bergheaud:[147,148,184,185,193],best:[4,17,44,113,132,138,139,220,246,247,261,280,281,285,290,291,303],bet:[250,272,273],beta1:[4,38,142,147,149,184,185],beta2:[38,142,147],beta:[147,148,149,182],better:[2,35,130,140,141,146,147,148,149,162,166,171,172,182,183,193,215,220,224,226,227,228,231,232,261,272,273,274,275,290,291],between:[4,14,16,22,29,41,42,43,46,110,132,133,157,171,172,175,182,183,187,202,203,213,217,220,221,226,227,229,230,231,233,241,243,246,247,261,267,270,272,273,274,275,281,282,283,286,290,291,303,306,308],beyond:[22,52,103,110,130,171,172],bf898ec5cb:[231,236],bhat:[147,148,171,184,185,193,202,203,219,220,224,226,229,231,274],bhattiprolu:[171,229,231],bia:[171,173],biarch:[147,149],bias:[182,183],bifurc:[281,282],big:[2,13,42,132,136,146,171,172,175,220,226,227,231,232,246,247,261,272,273,274,275,280,281,282,290,291],bigger:[182,183,281,282,290,291],bin:[36,226,227,274,286],binari:[2,4,17,34,35,38,147,148,166,182,183,222,226,227,246,247,274,275,280,281,282,290,291],bind:[5,9,22,25,31,37,38,40,52,71,97,105,110,133,139,146,171,175,202,203,224,231,232,246,247,272],binutil:[212,220],bishop:[171,193],bit:[2,9,13,14,19,21,22,24,28,29,31,32,33,35,37,41,48,50,54,58,60,68,70,73,78,87,88,89,90,93,100,101,103,108,115,117,121,124,130,132,133,134,135,144,145,150,153,157,162,164,169,171,172,173,174,175,178,180,182,183,184,185,187,193,202,203,205,206,213,214,216,217,220,221,224,226,227,228,229,230,231,232,233,235,236,238,240,241,245,246,247,248,251,257,267,268,270,271,272,273,274,275,277,281,282,283,284,286,290,291,303,305,308,309],bitbak:[272,273],bitfield:[178,182,183],bitmap:[75,171,172,220],bitmask:[14,22,108,201,281,282],bitrot:[290,291],bitwis:[14,281,282],bizarr:[42,171,172],black:231,blackbird:136,blackbrid:136,blacklist:303,blame:[281,283],blanchard:[147,148,202,203,229,231],blank:[171,172,272,273,274,275],blif:[171,172],blindli:220,blink:135,bloat:[147,148],blob:[3,17,34,53,118,171,172,220,222,224,226,227,231,232,246,247,274,275,303,306],block:[2,9,52,67,78,133,161,171,172,176,180,182,183,193,208,209,219,220,226,227,229,230,231,233,243,246,247,261,269,274,275,280,281,283,284,294,308],blockevel_smart_writ:[286,290,291],blocklevel:[147,148,176,182,183,219,220,246,247,258,261,274,276,278,280,281,282,293],blocklevel_get_info:[280,281,282],blocklevel_raw_:[246,247],blocklevel_raw_writ:[261,280,281,282],blocklevel_read:[246,247,254,274,276],blocklevel_smart_eras:[176,182,183,219,229,230],blocklevel_smart_writ:[202,204],blocklevel_writ:[246,247,261,272,273,280,281,282],blown:[229,230],blr:[281,284],bmc0:274,bmc:[5,8,34,35,38,40,44,132,133,144,146,154,155,156,171,172,182,183,185,202,203,204,205,206,224,226,227,228,229,230,246,247,248,249,250,251,252,255,256,261,263,274,275,277,279,280,281,282,283,284,285,287,289,290,291,296,298],bmc_mbox_enqueu:[171,172],bmc_platform:220,bml:[272,274,275],bn_num_byt:225,board:[2,202,203],bobroff:231,bogu:[171,172,193,220,221,231,241,246,247,271,274,275,290,291],bogusdisk:[202,203],bogusnet:[231,232],bone:[171,172],bonnard:[147,148,171,193,202,203],book:22,bookiv:[226,227],bookkeep:[171,172],bool:[63,74,119],boost:[13,171,172,226,228],boot:[0,1,4,5,7,8,17,20,23,36,37,38,39,68,69,71,76,77,113,115,118,127,129,134,137,138,145,146,147,148,149,153,161,164,167,173,174,177,182,183,184,185,193,194,201,202,203,205,207,220,221,224,226,227,228,229,230,231,232,233,236,245,248,250,253,254,257,258,260,261,265,267,271,272,273,274,275,276,277,278,280,281,282,284,285,286,293,295,299,302,303,305,308],boot_cpu:182,boot_cpuid_phi:[226,227],boot_entri:[182,224,271,272,273,274,275,280,281,282],boot_test:[147,148,149,166,170,202,203,206,226,227],boot_tracebuf:[290,291],bootarg:[202,203,204],bootkernel:[171,172,173,231,232,272,273],bootkernfw:[281,284],bootload:[132,133,155],borrow:304,boston:[134,136,171,172,224,231,232,246,247,256,274,275],both:[2,24,44,52,68,88,95,99,108,117,127,140,162,171,172,173,175,182,183,193,202,203,204,213,214,220,224,226,227,231,232,233,246,247,248,250,268,270,272,273,274,275,277,280,281,282,284,290,291,305,306,308,309],bother:[171,172,246,247],bottom:[121,246,247,258,267,272,273,278,281,282],bound:[28,162,171,172,213,231,236],boundari:[89,171,172],box:[226,227,229,230,246,248,268,272,273,274,275,279,281,282,284],bp010:136,bp012:[136,226,227],br2_hcode_latest_vers:[246,248],brad:[171,193],brahmasamudra:[171,274],branch:[38,140,141,146,147,148,149,181,182,183,202,226,227,246,270,272,274,275,276,281,284,290,291],brdgctl:84,breakeven:13,breakpoint:225,breath:273,breno:[202,203],brick:[171,172,180,240,246,247,264,265,267,272,273,274,275,281,282,283,290,291,295],bridg:[2,30,41,101,135,155,164,184,185,189,213,220,231,236,246,247,281,282,284,290,291],briefli:42,brielfi:42,brigg:[136,259,279],bring:[42,43,133,161,171,172,180,182,183,220,231,233,246,247,248,266,272,273,274,275,281,282,286,290,291],bringup:[2,134,136,182,183,184,185,219,220,221,222,223,224,225,227,230,261,280,281,284],broadcast:[122,226,227,267,268,272,273,274,275],broadcom:[164,202,203,221],broader:139,broadli:[226,227],broke:[202,204,231,236,278],broken:[79,81,84,135,140,160,171,172,178,182,183,220,224,226,227,229,230,231,236,274,275,281,284,285,290,291],brought:[171,172,226,227],brown:[219,220,226],broyl:[171,172],bsd:139,bss:[290,291],bt:[146,147,148,167,171,172,184,185,186,193,202,203,231,232,258,271,274,278,281,282,285,290,291],bt_add_ipmi_msg_head:[258,278],bt_expire_old_msg:[258,278],bt_idl:[258,278],bt_send_and_unlock:[258,278],bu:[2,30,33,34,52,60,69,74,75,82,100,132,134,147,148,158,171,172,182,183,184,185,189,193,201,208,213,220,224,226,227,229,230,231,232,236,243,245,246,247,250,255,265,272,273,274,275,276,286,290,291,294],buddi:[171,172,181,208,220,231,233,266,272,273],buf:[35,52,53,171,173,306],buffer:[1,2,5,12,17,28,35,45,47,49,50,51,52,53,55,60,75,76,77,83,84,85,86,104,118,132,133,145,146,151,154,162,168,171,172,175,176,182,183,184,185,186,199,202,203,215,217,224,226,227,229,230,231,232,233,246,247,257,274,275,277,281,282,286,290,291,307,308],buffer_ra:60,buffers:24,buffrsiz:24,bug:[2,131,139,140,145,146,150,151,152,153,154,156,157,158,159,160,161,162,163,165,166,167,168,169,170,171,172,173,174,175,176,178,179,180,181,186,187,188,189,190,191,192,193,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,241,242,243,245,248,249,250,251,252,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,293,294,295,296,297,298,299,300,301,302,308],bugfix:[150,161,164,201,202,203],buggi:[162,182,183,215,226,227,272,273],bugzilla:145,buid:[134,197,202,203],build:[4,22,24,34,38,138,139,141,144,146,147,148,161,171,172,173,174,175,182,183,184,185,187,189,190,191,193,194,202,203,204,205,206,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,245,246,247,248,259,272,273,274,275,276,279,281,282,283,284,286,287,297,306],buildroot:[4,231,232,233,286],built:[36,132,133,141,144,171,172,182,183,184,185,220,226,227,272,297,302],builtin:[171,172,256,277,281,284,290,291],bulid:250,bump:[39,70,161,166,171,172,201,202,203,220,226,227,229,230,265,272,273,274,275,290,291],bunch:[133,166,171,172,220,257,272,273,274,276,281,282,290,291],bundl:[147,149],bur:[147,148,161,171,184,185,193,202,203,204,219,220,224,226,229,231,274],burst_count:220,bus_compar:100,bus_dev_func:[78,100],bus_id:60,bus_mask:134,busagentstatu:84,buse:[100,135,202,203,256,258,277,278,281,282],busi:[44,76,158,162,171,172,182,190,191,193,214,217,225,231,233,281],buss:[226,227],bust:261,bust_lock:[147,148,171,172,261],butt:[265,272,273],bwmgmt:220,bypass:[35,171,174,229,230,246,247,270,274,275],c000000000009674:[217,231,233],c00000000000b118:[231,233],c00000000000b184:[162,215,226,227],c00000000002e2d8:[231,233],c00000000002f0e0:[231,233],c00000000006b078:[231,233],c00000000006b22c:[231,233],c00000000006bc68:[231,233],c0000000000846e8:[162,215,226,227],c0000000000846f4:[162,215,226,227],c000000000084710:[162,215,226,227],c00000000008472c:[162,215,226,227],c0000000000851a8:[217,231,233],c00000000008b0f0:[231,233],c0000000000abdf0:[246,247],c0000000000abdf4:[246,247],c0000000000acc48:[246,247],c0000000000ace60:[246,247],c0000000000de4e8:[231,233],c0000000000ecb98:[217,231,233],c0000000000ed3dc:[217,231,233],c0000000000f4650:[217,231,233],c00000000013b6b0:[217,231,233],c00000000013ba34:[217,231,233],c0000000001b9880:[231,233],c0000000001b9890:[231,233],c00000000035b1f4:[162,215,226,227],c00000000035bab4:[162,215,226,227],c00000000041c3ac:[231,233],c0000000008a8780:[231,233],c000000000900828:[162,215,226,227],c000000000902364:[162,215,226,227],c00000000090540c:[162,215,226,227],c00000000099e644:[217,231,233],c0000000011f7c00:[246,247],c0000000012778c8:[246,247],c00000000127a560:[246,247],c00000000144c900:[162,215,226,227],c000000003167e80:[246,247],c00000000fba0100:[162,215,226,227],c0000000285cfc00:[246,247],c00000003fa7bd80:[178,182,183],c0000003f277b730:[231,233],c0000003f277b9b0:[231,233],c0000003f277ba50:[231,233],c0000003f277ba70:[231,233],c0000003f277bac0:[231,233],c0000003f277bb10:[231,233],c0000003f277bbc0:[231,233],c0000003f277bc50:[231,233],c0000003f277bc70:[231,233],c0000003f277bce0:[231,233],c0000003f277be30:[231,233],c000000f1633fa00:[217,231,233],c000000f1633fae0:[217,231,233],c000000f1633fb60:[217,231,233],c000000f1633fb90:[217,231,233],c000000f1633fc60:[217,231,233],c000000f1633fcf0:[217,231,233],c000000f1633fd80:[217,231,233],c000000f1633fe30:[217,231,233],c000000fdfdc8400:[162,215,226,227],c000000fdfef4000:[162,215,226,227],c000000fdfef79a0:[162,215,226,227],c000000fdfef7c20:[162,215,226,227],c000000fdfef7c60:[162,215,226,227],c000000fdfef7ca0:[162,215,226,227],c000000fdfef7d40:[162,215,226,227],c000000fdfef7de0:[162,215,226,227],c000000fdfef7e30:[162,215,226,227],c000001fea860000:[246,247],c000001fea863550:[246,247],c000001fea8637d0:[246,247],c000001fea863820:[246,247],c00004:[171,172],c0001f:[171,172],c000201cc7cb7750:[246,247],c00:84,c0:274,c11:[281,282],c13:34,c18:84,c1:[10,261,280,281,282],c327eddd9b291a0e6e54001fa3b1e547bad3fca2:191,c40:84,c48:[246,247,271,274,275],c80:84,c88:84,c8a7535f:[217,231,233],c:[21,22,36,68,106,108,133,134,138,140,141,146,147,148,153,154,167,168,171,172,173,174,182,183,187,201,202,203,204,217,220,224,225,226,227,229,231,233,246,247,261,265,271,272,273,274,275,280,281,282,287,290,291,298],ca32:[246,248],ca:[138,171,172,238,271,274,275],cabl:300,cach:[2,68,75,102,108,115,117,144,145,146,153,157,162,171,172,174,180,182,183,187,202,203,213,215,220,221,226,227,231,232,241,246,247,250,267,272,274,275,281,282,286,290,291,308],cachelin:[274,275],calcul:[27,29,53,108,133,145,146,171,172,182,183,207,220,222,226,227,231,232,246,247,256,267,270,272,274,275,277,305,306,309],calibr:[231,232,281,282],call:[1,5,9,12,15,16,18,19,20,35,37,38,40,41,43,44,46,47,48,50,51,54,56,57,58,59,61,62,63,64,65,66,67,68,70,71,72,76,77,78,81,83,87,88,89,90,93,96,97,98,99,100,101,103,105,106,107,108,109,110,111,113,114,115,118,119,120,121,122,123,124,125,126,128,129,131,132,133,134,135,143,144,146,147,148,149,150,154,160,161,162,164,165,167,171,172,173,174,175,178,180,182,183,193,202,203,210,215,217,220,221,224,226,227,228,229,230,231,232,233,239,246,247,248,254,255,258,261,263,267,268,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,290,291,295,296,297,301,303,306,308],call_cvc_sha512:306,call_cvc_verifi:306,callback:[160,162,171,172,182,183,184,186,201,202,203,212,215,220,226,227,258,272,273,274,275,278,280,281,282,283,290,291],caller:[94,117,131,162,163,171,172,173,214,216,220,225,226,227,231,232,241,246,247,258,272,273,278,281,282,286,290,291,303,306,308],callout:[161,171,174],calucul:[171,173],cam_valu:308,came:[151,217,231,233],campisano:171,can:[0,1,2,4,5,7,9,10,12,13,14,16,17,19,21,22,23,24,26,28,35,36,37,40,41,44,47,49,50,52,54,55,58,61,62,63,64,65,68,70,71,74,75,78,84,88,96,99,104,108,109,110,112,113,114,117,118,119,120,121,122,127,130,131,132,133,134,137,138,139,140,144,146,151,159,160,161,162,171,172,173,174,175,181,182,183,184,185,193,196,202,203,204,205,206,208,211,215,216,217,219,220,221,224,225,226,227,228,229,230,231,232,233,234,236,238,239,241,242,246,247,248,250,251,253,255,256,257,258,259,260,261,265,266,267,268,270,271,272,273,274,275,277,278,279,280,281,282,283,284,285,286,290,291,297,302,303,304,305,306,307,308],canari:220,cancel_tim:[231,233],cancel_timer_async:[231,233],candid:[47,172,173,174,175,183,185,186,193,203,204,205,206,219,220,221,222,223,224,225,226,227,228,230,231,232,233,234,235,236,247,248,272,273,275,276,282,283,284,291],canneri:182,cannot:[84,93,102,103,109,110,119,131,139,161,171,173,182,183,202,204,226,227,255,274,275,281,284,286,290,291,305,308],canon:22,cap:[38,41,42,70,109,213,220,229,230,231,232,234],capabl:[10,21,22,56,75,132,164,184,185,201,202,203,213,220,221,226,227,231,232,246,247,255,258,274,275,278,281,282],capac:139,capi2:[182,183,226,227],capi:[30,102,146,150,157,159,161,173,174,187,196,204,226,227,248,268,270,271,272,274,275,281,282],capp0:[226,227],capp1:[226,227],capp:[1,4,30,58,102,146,147,148,150,159,161,171,172,174,182,183,193,194,196,202,203,204,220,226,227,231,232,250,251,254,267,270,272,274,275,276,280,281,282],capp_cntl:[270,274,275],capp_fir_clear:[251,274,275],capp_lid_download:[226,227],capp_ucode_info:[226,227],cappabl:15,capplidh:[250,274,275],capppsll:[250,274,275],captur:[50,189,220,226,227,274,275],card:[34,102,134,147,148,150,171,172,182,183,193,201,213,220,221,226,227,229,230,231,232,246,247,251,259,267,268,272,274,275,279,281,282,286,290,291],care:[7,35,40,42,58,133,171,172,226,228,246,247,281,282,308],carefulli:[133,261],carol:220,carri:[44,76,246,247,248,272,273,274,275],carvalho:[171,202,203,204,219,220,231],cascad:[182,183,305],cast:[171,172,182],cat:[37,162,213,214,220,224,226,227],catalog:[24,171,173,231,234,246,247],catastroph:[171,172,239],catchal:193,catcher:[250,274,275],categori:[54,68],caught:[182,193,272,273],caus:[13,17,38,39,42,50,51,73,101,122,129,134,145,146,150,153,154,162,164,165,167,171,172,174,175,182,183,184,185,188,197,201,202,204,205,214,220,221,224,226,227,228,229,230,231,232,234,236,237,238,239,243,246,247,248,251,256,257,258,267,270,271,272,273,274,275,277,278,281,282,284,290,291,295,305,308],caveat:[171,172],cc0:[84,139],cc1:287,cc8:84,cc:[140,150],ccan:[133,139,145,290,291],ccin:[34,221,287],cd:[202,203],ce0900:[162,214,224],ce:[181,208,266,272,273],ceas:[136,193],cec5750a4a86ff3f69e1d8817eda023f4d40c492:191,cec:[151,217,231,233],cec_power_down:146,cec_reboot:[171,172],cell:[2,3,5,9,14,24,30,31,69,130,171,172,174,175,193,257,274,275,308,309],centaur:[2,19,147,148,166,198,199,202,203],center:231,centos6:220,centos7:220,central:220,cert:[274,276],certain:[51,109,131,132,133,153,162,165,169,171,172,213,238,265,272,273,281,282,290,291,308],certainli:[165,182,183,226,228],certif:38,certifi:138,cesta:164,cf960e2884:[229,230],cfam:[246,247],cfar:[162,171,173,178,182,183,214,215,224,226,227,246,247,261,271,274,275,280,281,282],cfg:[84,171,172,226,227,238,246,248,271,274,275],chad:[147,148],chain:[246,247,302,306],chanc:[113,171,172,231,232,258,261,274,275,278,280,281,282],chane:164,chang:[1,2,4,14,15,17,22,38,42,44,53,54,70,84,100,103,104,109,110,112,115,121,134,135,137,138,139,141,144,146,147,148,151,155,159,160,162,163,168,169,170,172,173,174,175,176,177,179,182,183,186,192,193,194,195,196,201,203,205,206,207,213,221,222,225,227,228,230,232,233,234,235,236,237,238,240,243,248,250,253,257,258,259,265,266,275,276,277,278,279,280,281,282,283,284,286,290,291,297,303,308],changeset:[147,148,161,164,184,185,187,193,202,203,204],channel:[171,172,174,226,227,229,230,246,247],channel_streaming_en:[171,174],chapter:[2,68],charact:[4,34,127,226,229,230,231,232,246,247,274,281,282],character:[13,171,173,231,233],characterist:[13,22,221,290,291],charg:132,chase:226,chassi:[38,285,290,291],check:[17,22,35,45,50,51,58,61,68,100,101,135,144,145,157,162,163,167,171,172,173,174,175,178,180,182,183,187,193,198,202,203,204,213,215,216,217,219,220,221,224,226,227,228,229,230,231,232,233,235,238,239,241,246,247,248,251,254,255,257,258,259,261,267,268,271,272,274,275,276,277,278,279,280,281,282,284,285,287,290,291,303,304,306],check_credit:[171,172,239,262,294],check_imc_device_typ:61,check_statu:[272,273],check_tim:[274,275],checker:[182,183,220,274,275],checkout:[182,183],checkstop:[44,58,70,146,170,171,172,173,187,193,197,202,204,221,222,226,228,229,230,231,232,236,241,243,246,248,256,261,274,275,280,281,282,284,290,291],checkstop_type_cor:70,checkstop_type_nx:70,checksum:[133,226,227,274,275,290,291],chen:[278,281,282],cherri:[140,153,189,191],chicken:[204,286,290,291],child:[2,3,15,16,17,18,21,23,34,101,132,134,146,171,172,174,182,183],child_p:[101,134],children:[2,155,171,172,174,184,185,220],chip:[2,13,18,19,24,26,28,30,33,34,38,41,58,69,70,72,129,132,134,146,147,148,161,171,172,174,180,182,183,184,185,186,193,194,197,202,203,206,207,220,222,224,226,227,229,230,231,232,241,245,246,247,248,251,257,261,267,268,269,271,272,273,274,275,277,280,281,282,284,290,291,308,309],chip_id:[69,70,72,129,220,246,247,267,272,273,274,275,308],chip_tod_parity_err:144,chip_unit:[171,172],chipid:[24,182,183],chiplet:[38,231,232,267,272],chiplet_offlin:[231,232],chiptod:[2,58,116,162,171,172,193,202,203,215,220,231,233,274,275,309],chiptod_capp_timebase_sync:[182,183],chiptod_init:[171,172],chipwis:[182,183],chitod:58,choos:[13,132,133,134,217,231,233,258,272,273,278,281,282],chop:[171,172,240],chose:[2,42,95,134,226,227,251,274,275],chosen:[87,229],chri:[193,202,203,204,219,220],christian:[171,274],christoph:[171,226,231,274],chronolog:306,chunk:[133,202,203,226,228,229,230,272,273,274,275,308],ci:[28,93,133,171,172,184,185,202,203,220,226,228,246,248,271,275,290,291],circa:[274,275],circular:[1,133,182,183],circumst:[42,171,172,220,226,227,228,241,246,247,281,282],circumvent:[159,196,202,203],citizen:[290,291],claim:[50,202,203,220,226,227,229,230],clamp:[231,235],clang:[246,248,274,275],clarif:[272,273],clarifi:[131,195,199,220,274,275,281,282],clash:[272,273],class_resp:[144,145],classic:204,classif:35,classifi:[68,135],claudio:[171,202,203,204,219,220,231],clean:[36,108,130,146,171,172,178,182,183,184,191,194,195,220,224,226,227,228,241,246,247,281,282,283,286,290,291,308],clean_on_ecc_error:[171,172],cleaner:222,cleanli:[226,227],cleanup:[48,146,147,148,169,202,220,226,227,228,231,232,246,247,251,256,260,272,273,274,275,277,281,282,308],cleanup_global_tlb:[226,227],clear:[0,23,58,71,75,101,108,119,134,144,146,147,148,153,154,157,161,164,171,172,173,177,178,180,182,183,187,209,220,221,224,226,227,228,229,230,231,232,235,237,238,242,245,246,247,248,251,257,258,259,260,261,264,265,267,270,271,272,273,274,275,277,278,279,280,281,282,285,286,290,291,293,295,303,305,308],clear_maint:[246,248],clear_on_ecc_error:[171,172],clearanc:23,clearer:[205,272,273],clearli:[141,224,272,273,286,290,291],clever:205,client:[161,171,172,226,227,250,274,275,290,291],clk:[171,172,237],clobber:[182,226,227,246,247,308],clock:[2,30,38,42,128,153,162,171,172,184,185,186,201,202,203,215,224,226,227,229,240,265,266,272,273],clog:[171,172],close:[38,39,49,134,146,171,172,208,217,226,231,233,258,278,281,282],closer:[147,148,171,184,185,202,219,274,275,290,291],closest:2,cloud:220,cluster:136,clutter:[281,282],cmd:[67,193,217,231,232,274],cmdcplt:[213,220],cme:[231,232,272,273],cmp:[212,220],cmpm:[182,183],cmpxchg:[171,172],co:261,coalesc:308,code:[0,2,3,10,21,22,23,26,27,30,32,34,35,38,39,41,42,43,50,51,54,55,56,58,68,81,93,94,106,108,111,120,123,128,130,132,133,134,135,138,139,141,144,145,146,147,148,153,158,160,161,162,171,172,173,174,175,178,180,184,185,189,190,193,198,201,202,203,204,206,211,213,215,217,219,220,221,224,226,227,228,229,230,231,232,233,234,241,246,247,249,251,252,253,254,259,261,265,267,270,271,272,273,274,275,276,279,280,281,282,283,284,285,287,290,291,298,308],codepath:164,codeupd:47,coher:[27,75,157,171,172,187,221,226,227,281,283,290,291],cold:[209,305],colin:[219,220],collater:101,collect:[24,35,38,44,61,132,139,226,227,281,282,308],collid:[202,203],collis:[2,308],colon:[226,227],column:131,com:[132,138,140,148,155,171,172,176,205,219,220,221,222,224,225,226,227,228,231,232,256,274,277,281,283,290,291],combin:[22,28,134,150,202,204,259,267,272,279,281,284,286,290,291,303,306,308],come:[2,60,68,84,100,101,133,139,147,148,150,157,168,171,172,182,183,187,193,202,217,224,226,227,228,231,233,245,246,247,259,279,281,282,290,291,302],comm:[162,178,182,183,215,226,227,231,233,246,247],comma:[226,227],command:[0,37,47,60,68,107,131,144,147,149,161,162,171,172,173,174,193,194,203,206,209,214,215,217,219,220,224,225,226,227,229,230,231,232,233,236,246,247,248,249,250,258,265,272,273,274,275,278,281,282,283,286,287,290,291,305,306,307],commandreadi:220,comment:[38,132,139,184,185,220,224,231,232,246,247,258,274,278,281,282],commit:[35,47,138,139,140,141,157,161,171,172,174,175,182,183,187,189,191,193,194,202,204,208,217,220,221,224,226,227,229,230,231,232,233,234,236,246,247,248,270,274,275,279,281,282,284,287,290,291,297],common:[4,13,22,28,35,84,133,162,202,204,214,219,220,221,225,231,232,246,247,274,281,283,290,291,308],commonli:[51,144],commun:[0,28,40,50,58,67,77,120,138,139,162,213,217,224,226,227,231,233,281,282,303],compani:141,compar:[4,68,97,100,171,172,182,183,213,220,226,227,229,246,247,281,282,305,306],comparison:[4,182,183,194,226,227,270,274,275],compat:[3,5,6,7,8,9,10,11,12,15,16,17,18,19,20,21,22,23,24,27,28,29,30,32,33,46,54,55,62,63,64,65,70,76,108,114,115,130,132,136,145,147,148,151,171,172,174,177,182,183,194,220,226,227,229,230,231,232,243,246,247,248,250,260,272,273,274,275,281,282,290,291,294,307,308,309],compatibil:132,compens:[246,247],compil:[36,138,145,147,149,150,161,171,172,173,184,185,193,202,204,205,274,275,277,290,291],complain:[171,172,182,183,251,252,274,275],complement:[42,182,183,226,227],complet:[0,13,24,35,41,42,45,47,52,60,73,75,78,79,104,108,109,110,113,117,119,120,122,125,127,132,133,135,140,151,160,162,171,172,177,182,183,184,185,192,202,203,204,208,209,212,213,220,221,226,227,228,229,230,231,232,233,241,243,246,247,251,255,258,270,272,273,274,275,278,281,282,285,286,290,291,305,306,308],complex:[16,37,135,171,172,203,220,224,226,227,231,232,246,247,281,284,303],compliant:[132,261,280,285,290,291],complic:[0,134,171,172,231,232,290,291],compon:[0,2,4,14,15,19,21,22,35,109,131,132,133,141,154,171,172,174,180,193,226,227,231,232,246,247,250,274,275,281,282,290,291,303,305,306],component_id:35,compress:[133,226,227,229,230,290,291],compris:[135,246,247,306],compromis:[281,284,303,305],comput:[33,182,183,202,204,274,275],con_need_flush:[272,273],con_op:151,concaten:306,conceiv:145,concept:[171,172,304],conceptu:[182,183],concurr:[113,117,141,171,172,182,183,231,232,257,272,273,277,281,282,308],condit:[13,17,70,103,146,153,157,159,160,162,170,171,172,175,182,183,187,196,202,203,207,215,217,220,226,227,231,232,233,236,246,247,248,261,265,272,273,274,275,280,281,282],condition:[157,187,274,275,279,281,282],conex:[281,282],confid:139,config:[1,27,30,38,41,42,44,133,134,135,137,150,158,171,172,182,183,184,185,189,193,202,203,204,206,220,221,224,226,227,228,229,230,231,232,234,236,238,246,247,248,251,256,258,259,261,268,274,275,277,278,279,280,281,282,284,285,286,290,291,297,307],config_address:[271,274,275],config_disable_vg_not_si:[246,247],config_enable_snarf_cpm:[281,284],config_fsp:[290,291],config_modul:[281,282],config_nvlink_mod:[246,247],config_of_pmem:[246,247],configur:[0,2,16,20,22,28,37,54,57,58,73,75,76,91,99,115,134,135,147,149,154,171,172,173,174,182,183,189,193,201,202,203,220,221,224,226,227,229,230,231,232,233,234,236,238,241,246,247,248,251,256,261,267,270,272,273,274,275,278,280,281,282,285,290,291,306,308],confirm:[17,47,104,141,171,172,226,228,281,282],conflat:[246,247],conflict:[0,220,238,308],conform:[4,46,49,126,131,132,138],confus:[178,182,183,202,203,220,226,227,231,232,246,247,272,274,275,281,282,290,291],congratul:132,conjunct:[41,274,275,305],connect:[2,27,41,135,152,182,183,220,221,226,227,231,232,272,273,281,282,290,291],connector:[34,135,274,275,300],connectx:[231,232,258,278,281,282],consecut:[56,88,198,202,203],consequ:[115,171,172,182,183,278,281,282],conserv:[171,172,229,230],consid:[22,42,43,171,172,182,183,202,203,220,226,228,231,246,247,258,274,275,278,281,282,284,303,304,305,308],consider:38,consist:[2,138,159,171,172,191,202,204,222,226,227,241,246,247,259,274,275,279,305,309],consol:[0,5,20,38,42,122,145,151,152,154,162,164,171,172,173,178,182,183,184,185,186,191,193,199,202,203,206,208,215,217,219,220,224,226,227,231,232,233,246,247,248,261,272,273,274,275,280,281,284,285,287,289,290,291,298,308],console_log_level:1,console_unlock:[217,231,233,290,291],console_writ:[272,273],constant:[17,22,171,172,220],constantli:[134,198,251,274,275],constrain:21,constraint:[38,171,172],construct:[19,141,171,172,202,204,241,245,274],constructor:[182,183],consum:[17,22,29,32,41,70,141,171,172,202,203,231,232,241,246,247,272,273,274,275,286,290,291],consumpt:[16,147,148,202,203],contain:[2,3,4,9,14,17,18,21,22,23,24,26,27,28,31,33,35,38,69,70,72,73,104,117,118,127,129,132,133,136,138,140,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,182,183,184,185,186,187,188,189,190,191,192,193,195,196,197,198,199,200,201,202,203,204,205,206,215,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,246,247,248,250,251,252,254,255,256,257,258,259,261,262,263,264,265,267,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,293,294,295,296,297,298,299,300,301,303,308],contend:[226,227],content:[1,2,7,36,40,69,71,76,133,161,171,172,188,202,204,219,220,221,222,224,225,226,227,228,246,247,272,273,281,282,293,308],context:[13,33,40,73,124,133,182,183,226,227,229,231,232,246,247,255,258,274,278,281,282],context_switch2:229,contigi:290,contigu:[171,172,226,227,254,274,276,308],continu:[22,37,108,133,147,149,150,161,162,171,172,178,182,183,184,185,188,201,202,203,204,215,217,219,223,226,227,231,232,233,240,241,246,247,250,272,273,281,282,290,291,297,304],contrari:[162,214,225,290,291],contribut:[38,139,171,172,220,297],contributor:[138,161],control2:220,control:[1,2,22,23,27,29,33,35,37,38,41,58,60,62,63,64,65,68,76,77,113,121,124,128,129,132,133,135,146,160,164,171,172,173,175,180,182,183,202,203,207,213,220,226,227,229,230,231,232,233,235,237,241,243,246,247,248,250,252,257,267,269,270,272,273,274,275,277,281,282,284,286,290,291,297,303,308],convei:[231,232],conveni:[290,291,303],convent:[2,56,120,134,290,291],convers:[75,257,274,276,290,291],convert:[35,132,159,171,172,181,196,202,203,208,226,227,231,232,246,247,258,261,266,272,273,278,280,281,282,283,284,290,291,298],cool:54,coordin:22,cope:[246,247,281,284],copi:[2,35,40,45,50,51,55,58,76,83,87,108,118,119,138,166,171,172,173,175,182,183,226,227,229,230,231,232,246,247,258,274,275,278,281,282,284,290,291,307],coproc:146,coprocessor:[25,38,129,146,229,230,267,272,273,274,275],copyright:138,core:[2,14,19,21,22,38,40,58,61,70,116,122,131,132,133,136,146,154,157,158,160,165,171,172,173,174,175,178,180,182,183,187,190,191,193,194,201,202,203,204,205,206,213,221,222,226,227,228,229,230,231,232,233,235,241,242,246,247,248,251,256,257,258,261,263,267,270,271,272,273,274,275,277,278,280,281,282,284,288,289,290,291,293,298,303,308],core_fir:[271,274,275],core_imc_event_mask:[231,232],core_start:[246,248],core_stop:[246,248],core_wof:[246,247],corner:[162,163,194,195,202,203,215,216,217,226,227,228,231,233,258,278,281,282],corpor:164,corr:[256,274,275],correct:[2,17,35,44,67,100,101,110,131,140,141,159,171,172,174,175,176,182,183,189,195,196,200,202,203,206,213,220,226,227,228,229,230,231,232,246,247,248,254,255,258,259,261,267,270,271,272,273,274,275,276,278,279,280,281,282,290,291,305],correctli:[55,117,141,147,149,153,157,160,165,170,171,172,173,175,177,182,183,187,202,203,204,217,220,221,224,226,227,229,230,231,232,236,246,247,251,255,267,272,273,274,275,278,281,282,290,291],correl:[84,100,229,274,275],correrr:164,correrrorstatu:84,correspond:[2,9,13,17,21,41,52,56,58,69,88,108,118,123,134,135,141,147,149,153,171,172,173,182,183,184,186,197,216,220,221,226,227,228,231,232,246,247,267,272,273,274,275,305,308],corrupt:[147,148,161,165,168,171,172,178,182,183,188,194,226,227,228,229,246,247,261,270,274,275,281,282,293,301,305],cosmet:[171,172],cosol:[162,215,226,227],cost:[102,171,172,272,273,290,291],could:[0,22,42,44,50,51,75,114,129,135,140,141,144,145,147,148,149,153,154,157,160,165,167,171,172,181,182,183,187,189,201,202,203,204,205,207,208,220,224,226,227,229,230,237,245,246,247,248,255,260,267,270,272,273,274,275,281,282,290,291],couldn:132,count:[0,13,24,35,36,37,69,134,146,157,167,171,172,187,193,221,229,230,231,251,258,261,274,275,278,280,281,282,283,290,291],counter:[28,37,61,171,172,175,224,226,227,229,230,231,233,242,246,274,275,281,282,286,290,291],coupl:[134,146,184,185,198,199,220,231,236,267,272,274,290,291],cours:[224,259,279],cover:[132,138,171,172,174,184,185,226,227,231,232,246,247,261,274,276,280,281,282,308],coverag:[36,147,148,149,184,185,226,246,248,272,273,274,275],cow:[281,283],cp_m:[281,284],cpio1:[226,227],cpio2:[226,227],cpio:[226,227],cpm:[281,284],cpmc1sel:24,cpmc2sel:24,cpmc:[24,37],cpmc_load:[24,37],cpp:226,cppr:[64,224,308],cpu0:[231,233],cpu1:[231,233,281,282],cpu3:[281,282],cpu:[2,14,16,25,38,42,58,61,62,65,71,75,109,112,113,115,122,123,128,131,132,133,145,146,147,148,157,158,161,162,165,171,172,173,174,175,178,182,183,187,189,191,193,202,203,205,215,217,220,221,224,226,227,228,229,230,231,232,233,234,246,247,256,257,260,261,270,271,272,273,274,275,277,280,281,282,284,286,290,291,306,308],cpu_features_t:[182,183],cpu_idl:[226,227],cpu_idle_delai:[226,227],cpu_idle_job:[182,183,226,227],cpu_nr:[113,122],cpu_pir:[61,123],cpu_process_job:[182,183],cpu_process_local_job:220,cpu_queue_job_on_nod:[274,275],cpu_relax:[147,148,226,227],cpu_target:113,cpu_thread:[182,270,272,273,274,275],cpu_to_gpu_0:16,cpu_to_gpu_1:16,cpu_up:[231,233],cpu_wait_job:[140,167,171,175,202,203,274,275],cpufeatur:[21,22,180,182,257,277,281,282,283],cpuhp_invoke_callback:[231,233],cpuhp_up_callback:[231,233],cpuidl:[13,145,146,171,172,229],cpuinfo:2,cq:[145,180,246,247],cq_sm:[281,284],cr:[162,171,173,178,182,183,202,203,214,215,224,226,227,229,230,246,247],crank:[44,50,94,96,220,229,285,290,291],cranki:204,crap:[226,227],crash:[40,50,113,122,132,145,147,148,149,162,171,172,174,182,183,193,202,203,214,224,225,226,227,228,231,232,233,239,240,246,247,254,257,261,271,272,273,274,275,276,277,280,281,282,284,285,286,290,291,292],crazi:[220,224],crb:[146,267,272,273],crc32c_vpmsum:[162,215,226,227],crc:[281,282],creat:[2,7,17,21,22,23,35,40,41,53,58,62,63,64,65,67,71,88,132,135,138,140,141,146,162,171,172,173,174,175,182,183,202,203,215,219,220,221,222,224,225,226,227,229,230,231,232,246,247,272,273,281,282,286,290,291,306],create_:[258,278,281,282],creation:[7,171,172,292],creator:[35,51],credit:[41,147,148,161,164,172,184,185,187,193,194,202,203,204,232,236,239,268,275],credits_check:[180,246,247],creset:[135,160,171,172,174,182,183,220,226,227,228,229,230,274,275,281,282,286,290,291],creset_start:288,cresp:[171,174],crit:[1,224],criteria:206,critic:[2,19,39,140,150,161,171,172,251,274,275,305],croner:[226,227],cronu:[274,281,282],cross:[36,138,145,146,246,248],cross_compil:145,crowd:[281,283],crowel:[171,274],crtm:[290,291],crufti:220,crypt:[171,172],crypto:[229,230],cryptograph:302,cset:[147,148,161,164,171,184,185,187,193,202,203,204,219,220,224,226,229,231],csm0:[178,182,183],csm:[18,229,230],csm_:[229,230],cssver:35,ct:28,ctl:135,ctle:[171,172],ctor:[274,275],ctr:[162,171,173,178,182,183,214,215,224,226,227,246,247],ctrl1:[246,248],ctx:[258,278,281,282],cumul:103,cumulu:[134,136,226,227,231,232,274,275],cupd:[20,39,146,272,273],cure:[171,172],currei:[171,184,185,187,193,202,203,219,220,224,226,229,231,274],current:[2,4,9,15,16,17,19,20,21,22,29,35,37,38,42,43,44,45,47,48,50,55,57,58,62,68,70,73,74,75,76,77,78,83,106,108,109,110,113,115,117,119,120,121,122,131,132,133,134,135,139,147,149,153,162,166,171,172,173,174,175,176,177,178,179,180,181,182,183,185,186,188,189,190,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,293,294,295,296,297,298,299,300,301,303,304,305,308,309],curs:[286,290,291],custom:[21,22,34,141,220,246,247,274],cut:[36,114,135,139,146,147,149,166,171,172,173,174,175,183,202,220,221,222,224,225,227,228,230,232,233,234,235,236,238,246,247,248,274,275,290,291],cvc:[23,25,38,171,172,173],cx23888:[281,282],cx4:193,cx5:[102,226,227,268,274,275],cxl:[182,183,246,247,268,274,275],cycl:[24,37,42,69,139,166,193,201,202,203,219,220,221,222,223,224,225,226,227,228,230,246,247,257,261,265,272,273,274,275,276,280,281,282,290,291,302],cyle:231,cyril:[147,148,161,171,184,185,193,202,203,204,219,220,224,226,229,231,274],cz:148,d002:34,d003:34,d00:84,d00e:26,d00f:[171,172],d08:84,d2ae07fd97bb9408456279cec799f72cb78680a6:191,d3:[258,278,281,282],d40:84,d48:84,d66a00d7:[162,215,226,227],d695626:4,d7efe30:4,d80:84,d88:84,d9296050bcece5c2eca5ede0932d944b0ced66c9:226,d997e482705d9fdff8e25fcbe07fb56008f96ae1:202,d:[2,4,35,36,42,70,81,147,148,160,171,172,182,183,184,185,202,203,206,207,220,226,227,231,257,258,265,272,273,274,275,277,278,281,282,290,291],da:35,daemon:[6,162,171,172,182,183,215,217,220,226,227,229,230,231,233,246,247,252,258,278,281,282],dai:[58,117,164,202,203,220,229,248],daily20170201:4,dan:[147,148],danger:[205,286,290,291],daniel:[147,148,161,171,184,185,231,274],danni:148,dar:[171,173,178,182,183,231,233],darn:[21,171,172,180,182,224,241,246,248,274,275],dasd:[34,76],dat_err:[171,172,238],data0:0,data1:35,data2:35,data3:35,data:[2,12,14,17,19,23,25,30,35,37,38,41,44,56,60,67,68,69,70,71,76,78,83,84,85,86,95,98,104,118,119,120,133,134,136,144,162,171,172,173,174,182,183,184,186,189,191,193,198,202,203,208,213,215,217,220,221,224,226,227,228,229,230,231,232,233,238,242,246,247,248,256,257,258,261,267,272,273,274,275,278,280,281,282,283,286,287,289,290,291,293,298,303,305,306,309],data_len:306,data_s:118,databas:[231,232],datadefin:305,date:[34,101,139,141,171,172,219,220,221,222,224,225,226,227,228,274,275,281,284],dave:[219,224],dawn:[131,274],days_in_month:229,db:304,dbg:[171,172,246,247,272],dc0:84,dc8:84,dc:[231,232],dcach:[182,183],dcbf:153,dccal:[281,282],dcm:2,dco:138,dctl:[171,172,246,247],dctl_clear_special_wakeup:[231,235,274,275],dctl_set_special_wakeup:[274,275],dd10:[179,182],dd1:[134,182,183,220,221,224,226,227,228,229,230,231,232,281,282],dd20:[179,182],dd2:[134,161,171,172,177,182,183,202,203,226,227,228,231,232,234,235,236,237,246,248,256,257,271,272,273,274,275,277,281,282,283,290,291],dd:[36,182,183,226,227,231,232],ddr4:[26,171,172],ddr:26,ddx0:[179,182],de:[35,171,172,182,183,246,248,274,275,281,282,286,290,291],dead:[58,198,280,281,282,283],deadlin:231,deadlock:[147,148,171,172,182,183,231,233,246,247,261,272,273,274,275],deal:[161,171,172,226,227,228,231,232,246,247,248,252],dealt:[51,161,226,227],deassert:[134,226,229,230,267,272,281,282,286,290,291],deassert_delai:[281,282],deatail:68,deb:[171,193],debat:22,debian:[4,171,172,173,184,185,226,228,229,274],debounc:[226,227],debug:[35,38,50,113,122,128,133,141,150,175,176,178,179,180,184,186,193,195,198,220,224,227,229,230,231,232,233,235,236,248,249,257,261,271,272,273,276,277,280,283,284,286,287,308],debug_descriptor:[1,290,291],debug_lock:[133,182,183,274,275],debug_locks_backtrac:[290,291],debugf:[246,247,272,273],debugg:[171,172,246,247],debut:136,dec:[58,146,193,209,231,232,261,280,281,284],decemb:[144,153,154,211,241,242,243,255,274,281,282,283,284,294],decent:[281,284],decid:[2,162,167,171,172,202,203,215,255,274,281,282],decim:[35,220,274,275],deciph:[171,173],decis:[22,139,266,272,273,306],declar:[39,171,172,229,230,290,291,303],decod:[93,171,173,189,213,220,229,230,246,247,281,282,284],decode_core_fir:[274,275],decompress:133,deconfigur:[229,230,241,246,247],decoupl:220,decreas:204,decrement:[231,232],dedic:[37,135,226,228],deem:139,deep:[13,47,133,171,172,231,232,242,246,247,274,275],deep_reboot:[217,231,233],deep_stat:[171,172],deeper:[13,171,172,231,232,235],default_machine_kexec:[231,233],defect:[171,172,188],defererenc:[286,290,291],defin:[0,1,2,4,13,15,17,18,21,35,42,43,44,45,46,47,48,50,51,52,53,54,55,56,57,58,60,62,63,64,65,67,68,69,70,71,72,73,76,77,78,79,80,81,82,83,84,85,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,107,111,112,113,114,115,116,118,119,120,121,123,124,125,126,127,128,131,132,133,134,138,146,150,171,172,174,178,180,182,183,189,206,220,226,227,229,230,246,247,258,272,273,274,275,278,281,282,284,286,287,290,291,303,305,306,308,309],define_log_entri:35,definit:[2,17,21,22,38,103,135,171,172,182,183,206,220,226,227,231,232,288,303,308],degrad:[35,226,228,231,232,236,274,276],delai:[38,42,43,70,125,130,151,167,171,172,184,185,224,226,228,241,242,261,267,271,272,273,274,275,280,281,282,286,290,291,308],delet:[17,47,51,182,183,202,204,272,273],deliv:[58,122,246,247,271,274,275],delta:[147,148,161,164,171,184,185,187,193,202,203,204,219,220,224,226,229,231,274],demand:[172,173,174,175,182,183],denot:[14,24,27,35,272,273,281,282],dep:274,depend:[14,17,19,21,22,35,40,41,44,88,102,123,134,164,171,172,173,174,175,178,182,183,220,229,230,231,232,253,255,261,272,273,274,275,280,281,282,290,291,303,308,309],depict:34,deploi:[22,290,291],deprec:[42,81,84,130,132,146,220,231,232,246,247],depth:[146,256,277],dequeu:67,deref:[171,174,182,183],derefer:[144,145,182,183,202,220,226,227,274,275,281,282],dereferenc:[147,148,171,174,225],deregist:[290,291],deriv:[35,58,76,171,172,231,232],desc:[24,99,287],descib:[231,232],describ:[2,3,6,8,9,10,13,16,17,19,21,22,23,31,32,35,37,77,102,110,117,127,132,133,137,171,172,175,220,224,231,232,241,246,247,248,251,281,282,308],descript:[4,17,21,24,34,35,70,140,222,231,232,274,275,281,282],descriptor:[1,40,99,224,284,308],design:[4,21,25,38,39,41,42,126,133,139,141,147,149,171,172,175,224,226,227,231,237,246,247,272,273,281,282,284,290,291,305],desir:[17,23,281,284,308],despit:[178,182,183,231,233,257,277,281,282],dest:71,destin:[7,71,259,279],destroi:[73,171,173,178,182,183,221,246,247,274,275],detail:[7,10,17,40,41,44,47,49,51,52,57,58,68,70,76,77,92,108,115,132,133,134,135,157,171,172,173,174,175,182,183,187,193,202,203,204,205,206,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,246,247,248,261,267,272,273,274,275,276,280,281,282,283,284,290,291,297,303,308],detect:[0,2,5,23,38,58,61,79,86,134,135,146,150,151,154,159,160,161,162,163,168,171,172,173,176,178,181,182,183,188,196,201,202,203,206,207,208,214,215,216,217,220,224,225,226,227,228,229,230,231,232,233,238,246,247,248,251,256,266,272,273,274,275,276,281,282,284,286,290,291,294,298],detector:[182,183],determin:[4,13,17,24,41,42,46,49,56,70,88,97,131,132,134,177,178,182,183,202,203,204,226,227,229,230,231,234,246,247,272,273,274,275,281,282,283,303,305],dev:[41,100,133,134,166,184,185,231,233,234,246,247,286,290,291,294],dev_:[246,247],dev_addr:[246,247],dev_compar:100,dev_mask:134,dev_port:[246,247],devcmdstatu:84,devctl:[229,230],develop:[23,42,50,83,136,141,144,146,147,148,161,164,172,184,185,187,193,202,203,204,205,227,246,247,272,273,278,281,282,283,290,291,302,303,306],developer_certificate_of_origin:138,devfn:[182,183],deviat:303,devic:[0,3,5,12,16,17,20,21,26,32,33,34,37,38,39,44,49,52,53,55,59,61,62,63,64,65,68,69,70,71,73,74,75,76,77,84,87,93,95,99,100,101,102,103,104,109,110,114,119,120,121,127,129,132,133,135,137,139,141,144,145,146,147,148,154,155,158,160,171,172,173,174,175,177,178,180,182,183,184,185,186,187,189,201,202,203,204,205,213,219,220,221,224,226,227,228,229,230,231,232,233,234,236,238,241,242,246,247,248,250,258,260,261,265,267,268,270,272,273,274,275,278,280,281,282,283,284,286,290,291,297,303,305,306],device_init:220,device_tree_max_s:133,device_typ:[2,21,26,27,30,171,172,220],devicestatu:84,devicetre:[31,133,193,231,232,246,247,281,282,284,286],devicetreebasedtcwarn:130,devid:[171,175],devsecstatu:84,devsta:164,devstat:[229,230],devtre:[171,172,204],dfp:2,dgemm:[182,183],dgibson:[290,291],di:[217,231,233,246,247],diag:[30,44,84,224,226,228],diag_buff:[83,84],diag_buffer_len:[83,84],diagnos:[50,171,172,182,183],diagnosi:170,diagnost:[5,83,84,170,265,271,272,273,274,275],diagost:[265,272,273],dial:[281,284],dictat:[132,206,246,247],did:[50,113,118,160,171,172,175,184,185,207,213,220,229,230,274,275,282,285,286,290,291],didn:[147,149,157,162,165,171,172,182,187,195,206,207,215,216,220,226,227,229,230,231,232,241,246,247,261,274,275,280,281,283],dif:[257,274,276],diff:141,differ:[2,4,14,17,20,22,28,43,44,46,68,84,131,135,138,139,140,141,154,171,172,178,184,186,202,203,204,206,208,220,221,226,227,229,230,231,232,238,241,246,247,248,250,268,272,273,274,275,281,284,290,291,305,308],differenti:220,difficult:[171,172,182,183,231,232,261,302],difficulti:220,digest:[290,291,306],digest_s:306,digit:[4,21],dimm14:26,dimm7:[171,172],dimm:[2,26,34,147,148,171,172,220,226,227,246,247,250],dinar:193,dio:[290,291],dio_interrupt_deregist:[290,291],dio_interrupt_regist:[290,291],dionysiu:[184,185],dir_typ:35,direcetori:[272,273],direct:[26,58,102,171,172,173,182,183,202,203,220,226,227,231,235,246,247,248,250,268,272,273,274,275,287,306,308],directli:[89,128,133,138,141,171,172,182,183,184,185,193,220,221,222,226,227,229,230,246,247,261,265,272,273,274,275,280,281,282,284,308,309],directori:[19,22,133,171,173,226,227,272,273,274,290,291],dirti:[4,141,153,171,172,231,232,241,246,247,258,261,278,280,281,282,283],disabl:[0,5,22,32,41,44,74,75,88,89,93,98,99,102,103,107,115,119,121,132,147,148,159,160,171,172,173,174,175,177,178,179,182,183,191,193,199,202,203,204,205,208,212,217,220,221,224,226,227,229,230,231,232,233,234,246,247,248,250,258,261,268,269,270,271,272,273,274,275,278,280,281,282,284,285,286,288,290,291,293,295,297,308],disable_capi_mod:[281,282],disable_fast_reboot:[182,183,274,275,297],disable_unavailable_unit:[61,171,172],disallow:[211,220],discard:[35,55,267,272,274,275,290,291,308],disclaim:139,discourag:132,discov:[182,183,226,227],discret:308,discuss:[139,171,172,290,291],disk1:[246,247],disk2:[246,247],disk:[193,202,203,246,247],dispali:[231,232],dispatch:[19,202,203,308],displai:[12,127,153,154,160,164,171,172,182,183,202,203,207,220,224,231,232,246,247,248,251,267,272,273,274,275,281,284,290,291],disposit:[58,70],disr:151,dist:220,distanc:[226,228],distant:[246,247,281,282],distclean:[171,172],distinct:[2,88,246,247,274,275,309],distinguish:[28,29,272],distribut:[14,133,138,139,147,148,281,282],distro:[246,247,257,274,276,290,291],divid:[1,171,173],divisor:145,dl:[171,172,226,227,231,234],dl_lock:[274,275],dlactiv:220,dlp:[182,226,227,286,290,291],dlx:[281,282],dma0errorlog0:84,dma0errorlog1:84,dma0errorstatu:84,dma0firsterrorstatu:84,dma1errorlog0:84,dma1errorlog1:84,dma1errorstatu:84,dma1firsterrorstatu:84,dma:[38,41,56,88,89,97,98,102,107,125,171,172,174,189,193,194,226,227,228,250,267,268,270,272,274,275],dma_addr:106,dma_window_numb:[88,89,134],dmawin:88,dmesg:50,do_capp_recovery_scom:[171,172,182,251,270,274,275],do_creat:[171,172],do_idl:37,do_list:[171,172],do_read_fil:[171,172],do_vfs_ioctl:[162,215,226,227],doc:[5,35,101,132,133,146,171,172,175,193,202,203,217,220,231,233,288,290,291,306],docker:220,dockerfil:[246,247,274,275],document:[0,2,17,21,22,23,24,27,31,35,56,59,70,73,88,89,90,93,95,97,98,100,101,103,105,117,130,131,132,133,134,138,144,145,146,147,148,159,171,172,175,184,185,186,187,188,189,190,191,193,196,220,226,227,229,230,231,232,237,246,247,290,291,303,307,308],docutil:288,doe:[1,2,4,12,17,21,22,35,37,40,43,49,51,61,62,63,64,65,68,71,75,76,81,88,93,100,103,114,115,120,122,124,132,133,134,139,141,146,153,171,172,173,174,178,180,181,182,183,208,219,220,224,226,227,229,230,231,232,233,236,241,243,246,247,249,251,253,257,261,266,268,270,272,273,274,275,277,280,281,282,284,286,287,290,291,297],doesn:[0,2,50,51,62,63,64,65,69,78,79,82,83,106,120,135,146,160,161,168,171,172,182,183,202,203,206,213,217,220,221,226,227,228,229,230,231,232,236,246,247,254,259,265,267,272,273,274,275,276,279,281,282,283,287,290,291,293,297,308],domain:[13,61,97,100,101,134,138,281,282,308],domin:[202,204],don:[2,44,70,106,133,146,147,148,149,153,160,164,171,172,173,174,175,182,183,184,185,193,198,202,203,204,205,207,208,212,213,217,219,220,224,226,227,228,229,230,231,232,237,238,241,242,246,247,248,254,256,259,261,265,266,271,272,273,274,275,276,277,279,281,282,286,290,291,295,308],donat:[133,220,226,228,308],done:[0,2,4,13,14,22,35,51,135,150,169,171,172,173,182,183,193,202,203,219,220,223,224,226,227,229,230,231,232,236,237,242,246,247,251,258,260,268,270,272,273,274,275,278,281,282,283,290,291,303,308],donnellan:[147,171,184,185,187,193,202,203,204,219,220,224,226,229,231,274],dont:[246,247],dont_stop:[272,273],doom:[271,274,275],doorbel:[257,277,281,282],dot:146,doubl:[162,202,203,214,224,225,226,228,246,247,281,284,299,305],doubt:133,down:[0,2,35,43,50,51,58,61,70,135,144,151,152,159,162,166,171,172,174,182,183,184,185,195,196,202,203,214,217,220,224,226,227,229,230,231,232,233,246,248,261,265,272,273,274,275,278,280,281,282,283,286,290,291],down_128b_data_xf:24,download:[146,202,203],downport:[274,275],downsid:[226,227],downstream:[93,101,135,164,201,202,203,213,220,226,227,246,247,281,282,290,291],dozen:1,dpo:[114,151,162,214,217,224,231,233],dpo_pend:151,dpo_timeout:114,dr:[73,141,162,215,226,227,246,247],draft:132,dram:26,dramat:[182,183,202,203,226,227],draw:[184,185,246,247],drcr:[171,172],dread:[274,275],drive:[135,144,229,230,251,272,273,295],driven:[184,186,265,272,273,281,284],driver:[1,15,17,19,23,28,41,61,133,151,162,164,171,172,182,183,184,186,193,202,203,204,207,209,213,214,215,219,220,224,225,226,227,229,230,231,232,233,234,236,245,246,247,248,258,265,267,268,272,273,274,275,278,281,283,284,304,306,308],drop:[38,42,130,146,162,171,172,182,183,214,215,217,224,225,226,227,231,232,233,246,247,272,273,274,281,282,289,298],drop_my_lock:[256,277],dscr:231,dsisr:[171,173,178,182,183,231,233],dt:[2,19,22,24,37,59,119,147,148,171,172,174,175,182,183,201,202,203,204,220,224,226,227,229,230,231,232,246,247,250,257,258,266,267,272,273,274,275,276,278,281,282,290],dt_attach_root:224,dt_find_compatible_nod:[171,174],dt_find_compatible_node_on_chip:[171,174],dt_find_properti:[182,183],dt_for_each_compat:[281,282],dt_next:[171,174],dt_node_is_compat:[182,183,281,282],dt_root:[281,282],dt_slot_get_slot_info:[182,183],dt_struct:[226,227],dtb:[226,227,257,274,276],dtc:[130,171,172,182,183,226,227,257,274,275,276,286,290,291],dtdiff:[257,274,276],dual:[2,39,226,227,281,284,297],dubiou:[171,172],due:[44,52,75,109,110,119,128,160,162,171,172,178,179,180,181,182,183,198,199,201,202,203,204,205,206,212,214,215,217,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,242,246,247,248,249,250,251,252,254,255,256,257,258,259,261,262,263,264,265,267,269,270,271,272,273,274,275,277,278,279,280,281,282,283,285,286,287,288,289,290,291,293,294,295,296,297,298,299,300,301,303,304,305],dumm:35,dummi:[35,158,171,172,189,193,231,232,241,272,273],dump:[5,36,38,42,44,71,108,146,147,149,162,171,172,176,178,182,183,199,200,214,215,217,219,220,224,226,227,228,229,230,231,233,246,247,261,274,275,280,281,282,283,284,290,291,292,295,300,308],dump_id:50,dump_siz:50,dump_trac:[290,291],dump_typ:50,dump_type_fsp:50,dump_type_si:50,dump_type_sma:50,dump_work_fn:[217,231,233],dunno:[171,172],duplic:[171,172,174,220,224,226,229,230,274,275,281,282,290,291],durat:[24,37,76,162,171,172,182,214,225,240],dure:[0,1,4,7,13,23,28,35,39,43,47,58,68,71,76,122,129,133,134,147,148,152,153,157,159,160,161,162,163,168,171,172,173,174,182,183,184,185,187,191,193,196,201,202,203,204,207,208,209,213,216,217,220,221,226,227,228,229,230,231,232,233,236,240,241,246,247,251,255,257,258,259,261,267,268,271,272,273,274,275,276,277,278,279,280,281,282,283,284,290,291,295,303,305,306,308],dword:135,dynam:[39,110,146,177,182,183,193,202,203,221,224,272,308],e00:84,e08:84,e1e6d009860d0ef60f9daf7a0fbe15f869516bd0:204,e40:84,e48:84,e5720d3fe94:224,e761222593a1ae932cddbc81239b6a7cd98ddb70:191,e7c8cba4ad773055f390632c2996d3242b633bf4:191,e80:84,e8810020:[162,215,226,227],e88:84,e:[1,4,21,22,23,33,35,36,37,41,42,50,51,53,58,60,77,78,93,101,104,106,109,110,112,113,122,124,132,134,135,139,140,141,147,148,150,154,162,171,172,173,174,181,184,185,195,197,202,204,206,208,213,219,220,224,226,227,229,230,231,232,233,246,247,248,251,255,258,261,266,267,271,272,273,274,275,278,280,281,282,284,290,291,303,306,309],e_info:35,ea:[281,282,308],each:[2,3,4,10,13,14,15,16,17,18,19,21,22,28,31,33,34,37,41,49,51,52,56,58,61,73,77,84,88,101,103,110,124,127,129,133,134,139,146,147,148,149,171,172,174,175,179,182,183,193,202,203,206,208,220,221,226,227,229,230,231,232,241,246,248,268,272,273,274,275,281,282,283,284,290,291,303,304,306,308,309],eari:[271,274,275],earli:[8,50,132,135,136,139,150,162,168,171,172,173,174,175,176,182,183,184,186,214,224,225,226,227,231,232,233,234,235,236,246,247,248,258,260,271,272,273,274,275,278,281,282,303],earlier:[70,96,133,220,226,227,231,232,246,270,272,274,275,279,281,282],earliest:5,early_setup:[226,227],early_setup_secondari:[226,227],earnest:227,eas:[226,227],easi:[150,226,227,246,247],easier:[171,172,182,183,220,231,232,261,272,273,278,280,281,284,290,291],easili:[77,171,172,182,183,246,247,274,275],eb0500:[217,231,232],ec0:84,ec366ad4e2e871096fa4c614ad7e89f5bb6f884f:191,ec8:84,ec:[225,231,232,286,290,291],ec_ppm_special_wkup_:[281,282],eca02ee2e62cee115d921a01cea061782ce47cc7:189,ecc:[146,161,171,172,202,203,226,231,232,246,247,254,256,272,273,274,275,276,277,281,282,286,290,291,293],ecc_protect:[246,247],eccb:[2,69],ecdsa_sig:225,ecdsa_sig_st:225,echo:[150,178,182,183],ecid:[38,231,232],eclips:[266,272,273],ecmd_ppc:224,ecrc:[202,203,221],ed:309,edg:[121,246,247,308],edk2:17,ee07f2c68160:297,ee:[162,215,226,227,246,247,271,274,275],eef0e197ab:[231,235],eeh:[41,42,82,107,147,148,150,171,172,220,224,226,227,228,229,230,231,236,238,246,247,258,270,274,275,278,281,282,290,291,297],eeh_action_token:[79,80],eeh_freeze_statu:[281,282],eeprom:[2,171,172,220,246,247,250,294],effect:[50,113,154,162,171,172,182,215,216,224,226,227,229,230,231,232,241,251,261,267,271,272,273,274,275,280,281,282,284,286,290,291,303,308],effici:[13,171,172,202,203,207,241,258,278,281,282,290,291],effort:[113,139,182,183,220,221,222,224,225,227,230,246,247,290,291],efi:304,efram:[246,247],eg:[35,222,226,227,229,230,290,291,309],egg:204,eh:35,eight:[70,286,290,291],either:[5,12,13,17,20,23,28,35,55,56,69,72,76,78,101,107,108,113,115,133,143,171,172,182,183,202,203,204,220,226,227,231,232,233,246,247,250,272,273,288,290,291,305,308],elaps:[272,273],electr:[147,148,182,183,226,229,230,246,247,286,290,291,309],electron:309,eleg:139,element:[68,75,171,172,182,183],elev:224,elf:[21,22,133,182,183,202,204,231,232,274,275,280,281,282],elfv1:[147,149],elimin:[220,290,291],elinux:138,ellerman:[147,148,171,219,220,224,226,231,274],elog:[35,144,146,159,171,172,191,193,195,202,203,287],elog_buff:51,elog_commit:[35,146],elog_en:[195,202,203],elog_fsp_commit:35,elog_head_st:35,elog_id:51,elog_read_max_record:35,elog_s:[35,51],elog_state_fetch:35,elog_state_fetched_data:35,elog_state_fetched_info:35,elog_state_host_info:35,elog_state_non:35,elog_state_reject:35,elog_typ:[35,51],elog_write_max_record:35,elogid:35,els:[44,106,124,133,201,202,203,217,220,231,233,246,248,258,274,275,278,281,282],elsewher:[178,182,183,246,247],email:139,emerg:[1,224,226,227,246,247],emit:[202,274,275,281,284],emitt:[171,172],emphasi:[171,172],employ:[147,148,161,164,184,185,226,229],empti:[2,31,62,67,86,118,131,160,220,246,247,258,272,273,277,278,281,282,303],emul:[38,62,63,64,65,121,132,171,172,184,185,188,193,220,224,226,227,231,232,308],enabl:[1,13,17,21,22,23,32,36,37,44,56,58,74,75,88,93,98,99,102,103,114,119,134,146,147,148,155,157,164,171,172,173,174,175,179,182,183,184,186,187,193,202,203,204,206,220,221,224,226,227,228,229,230,231,232,236,237,238,246,247,248,255,258,261,265,268,270,271,272,273,274,275,278,280,281,282,284,285,287,290,291,297,300,302,306,307,308],enable_capi_mod:[171,174,182,183,267,268,272,274,275],enable_mambo_consol:[226,227],enc:[225,246,247],enclosur:[10,34,162,215,226,227],encod:[2,15,16,19,21,33,56,118,120,171,172,173,194,220,246,247,281,282,284,290,291,308,309],encompas:[246,247],encompass:22,encount:[182,183,258,271,274,275,278,281,282,286,290,291],encourag:[2,139,182,183,184,185],end:[4,17,42,52,68,108,118,141,147,148,157,160,165,171,172,173,175,182,183,187,188,193,201,202,203,204,222,226,227,228,229,230,231,232,233,238,246,247,248,254,255,261,267,271,272,273,274,275,276,280,281,282,284,290,291,302,308],endian:[13,42,132,146,161,193,202,203,220,226,246,248,261,272,274,275,280,281,282,297],endlessli:[274,275],endpoint:[38,159,164,171,172,196,202,203,221,274,275],endup:[162,163,182,183,194,215,216,217,226,227,231,233,258,261,278,280,281,283],energi:[171,175],enforc:[23,120,171,172,173,182,183,220,224,226,227,241,252,258,278,281,282,285,290,291,303,306],engin:[28,37,61,102,123,133,146,158,171,172,190,191,193,211,224,226,227,228,229,230,231,233,246,247,250,267,268,270,272,273,274,275,308],enhanc:[70,178,179,180,229,230,246,247,249,258,278,290,291],enough:[53,60,77,127,132,133,147,148,202,204,207,213,217,220,224,226,228,231,232,233,246,247,250,265,266,272,273,274,275,281,282,290,291,305,308],enqueu:[118,270,274,275],enqueue_upd:303,enrol:[17,304],ensur:[0,13,41,50,86,113,115,120,122,133,139,140,150,154,157,165,167,171,172,173,180,182,183,187,189,193,202,203,217,220,226,227,228,229,230,231,232,233,240,241,246,247,257,258,263,270,272,273,274,275,276,278,281,282,285,288,290,291,305,306,308],enter:[0,13,17,48,133,152,171,172,178,182,183,226,227,229,231,232,233,246,247,272,273,281,282,286,290,291],enterpris:[246,247],entir:[139,161,171,172,176,182,183,202,204,224,226,227,229,230,231,232,258,261,265,267,272,273,274,275,278,280,281,282,284,285,290,291,306],entireti:161,entiti:[16,110,135,281,290,291,308],entitl:[171,172],entranc:[178,182,183,246,247,274,275],entrant:[178,182,183],entri:[2,5,12,22,24,35,40,48,52,71,75,88,97,101,129,132,133,137,146,161,162,171,172,178,182,183,189,202,204,214,215,220,224,226,227,229,230,231,232,234,241,246,247,250,257,258,267,270,271,272,273,274,275,276,277,278,281,282,284,286,290,291,306,308],enumer:[135,256,277],env:[246,247,290,291],environ:[21,36,38,141,171,172,173,182,183,219,226,227,228,246,247,248,266,272,290,291],environment:[13,54,70,225,246,247],eoi:[153,157,179,182,187,220,224,308],ep:[281,282],epoch:4,epow:[54,70,217,231,233],epub_prc_fw_verification_err:[171,174],epub_prc_hb_cod:[171,174],eq:[30,171,172,220,226,228,229,230,231,232,237,241,274,275,308],eqd:[220,308],equal:[2,4,75,76,89,103,132,171,172,173,229,230,257,277,281,282,298,308],equalis:[171,172,226,228,238],equival:[44,76,140,220,246,247,308],er:[35,184,185],era:219,eras:[9,52,146,154,171,172,176,182,183,205,206,219,224,226,227,229,230,231,232,258,278,281,282,286,290,291],erase_rang:[231,232],eraseblock:[274,276],erat:[182,183],erc:[171,172],erect:[286,290,291],eric:[278,281,282],err:[1,134,171,172,182,224,251,272,274,275],err_fat:101,err_injct_inbounda:150,err_len:35,errata:[201,226,227,246,247,265,269,271,272,273,274,275],errcod:[104,135,226,227],errinjct:[184,185],errl:35,erro:35,erron:[43,153,171,172,182,202,204,220,231,232,246,256,258,278,281,282],error:[2,17,36,38,41,42,44,50,52,55,60,61,70,76,77,78,82,83,84,92,94,101,102,109,110,117,119,123,125,127,128,131,132,144,146,147,148,149,150,153,154,156,157,158,159,160,161,162,163,164,166,169,170,171,172,173,174,178,181,182,183,184,187,189,190,193,195,196,198,199,201,202,203,204,207,208,212,213,215,216,217,220,221,222,224,225,226,227,228,229,230,231,232,233,234,236,238,239,242,245,246,247,248,249,250,251,252,254,255,256,257,258,261,265,266,267,268,270,271,272,273,274,275,276,277,278,280,281,282,283,284,286,287,290,291,294,295,300,303,304,308],errorclass:84,errordata:84,errorlog:[35,263,287,290,291,296],es:[35,171,172,241],esb:[171,172,179,182,220,226,227,241,308],escal:[150,171,172,174,220,231,236,237,241,246,248,256,274,275,308],escalate_irq:308,esel:[35,147,149,184,191,193,226,246,247,249,263,296],esl:[231,232],esoter:[182,183],especi:[0,139,171,172,181,182,184,185,202,203,204,207,226,228,266,268],ess:[246,247,256,259,277,279],essenti:[100,132,133,171,173,281,282],establish:[158,189,193,258,272,273,278,281,282],estim:[202,203],etc:[2,14,17,19,22,68,162,171,172,173,182,183,215,226,227,229,231,232,246,247,258,278,280,281,282,303,305,308],ethernet:[34,147,148,164],etu:[84,182,274,275,281,282,286,288,290,291],etyp:[256,277],ev_act:[290,291],ev_compact_hash:[290,291],ev_platform_config_flag:[290,291],ev_post_cod:[290,291],ev_s_crtm_cont:[290,291],ev_separ:[171,172],evalu:[250,274,275],even:[2,5,22,50,54,61,122,131,134,139,141,150,159,161,162,171,172,178,182,183,184,185,193,196,197,202,203,204,213,220,226,227,229,231,232,246,247,261,272,273,274,275,280,281,282,284,290,291,297,308],event:[1,4,32,35,37,38,50,51,58,59,70,104,108,117,125,130,146,147,149,150,157,159,161,165,171,172,182,183,184,186,187,191,193,201,202,203,204,208,217,220,226,227,231,232,233,236,239,243,246,247,250,251,258,261,263,274,275,278,280,281,282,284,290,291,296,306],event_mask:[171,172],event_sever:35,event_subtyp:35,event_typ:[290,291],eventu:[130,146,147,149,162,171,172,182,183,202,203,215,226,227,238,246,247,248,252,261,274,275,280,281,282],ever:[5,42,50,81,83,131,160,171,172,193,202,204,220,226,259,279,281,282,290,291,302],everi:[0,22,35,58,74,133,139,162,171,174,193,203,204,205,215,224,226,227,229,230,231,232,246,247,265,268,272,273,274,275,286,290,291,308],everybodi:[133,141],everyon:[138,148,171,172,202,204],everyth:[0,147,149,162,163,171,172,182,183,215,216,224,226,227,231,232,246,247,261,274,275,281,282,284],everywher:[133,220,272,273],evict:[171,172],evid:160,evmrev:35,evolut:221,evolv:139,ex:[171,173,182,183,217,231,233,274],ex_pm_core_eco_vret:[184,185],ex_pm_core_pfet_vret:[184,185],exabyt:103,exact:[2,22,43,58,160,171,172,182,183,184,186,207,220,226,227,259,274,275,279],exactli:[2,56,100,171,172,182,183,239,246,247,281,284],examin:[171,229],exampl:[1,9,13,14,15,16,18,19,22,26,30,34,35,37,39,43,44,51,59,70,78,88,101,106,109,113,119,120,126,131,132,137,139,140,141,147,149,150,162,171,172,173,182,183,193,203,214,220,225,226,227,231,232,241,246,247,248,252,255,272,273,274,275,281,282,283,303,305,308],exce:[70,103,224,274,275],exceed:[171,172,274],excel:219,except:[4,34,58,70,76,113,122,135,146,154,162,171,172,173,174,178,182,183,195,202,203,214,217,220,221,224,231,232,233,246,248,257,258,268,271,274,275,277,278,281,282,284,290,291,303,308],exception_entri:[182,183,224,271,274,275],excess:[265,272,273,303],exchang:[182,183],exclud:[17,160,171,172,226,227,231],exclus:[44,102,133,211,253,281,284,303],execut:[0,13,37,41,43,61,113,124,131,132,133,147,148,162,171,172,182,183,215,226,227,231,232,241,246,247,261,272,273,274,275,278,280,281,282,306,308],exercis:[132,165,171,172,231,232],exhibit:260,exist:[2,4,17,20,21,22,23,40,41,42,62,63,64,65,66,81,86,106,108,131,132,134,135,137,146,147,148,171,172,182,183,184,185,193,202,203,204,206,219,220,222,224,226,227,228,238,241,246,247,248,271,272,273,274,275,281,282,290,291,297,306,308],exit:[13,48,146,171,172,178,181,182,183,208,229,231,232,245,246,247,257,258,261,274,276,277,278,280,281,282,290,291,303],exp:274,expand:[132,171,172,226,227,246,247,304],expans:287,expect:[0,13,17,41,71,135,138,141,161,171,172,173,174,180,181,182,183,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,239,243,246,247,248,250,259,272,274,275,279,282,283,284,291,302,303,305,308],experi:[162,171,172,215,239,246,247],experienc:[246,247,261,280,281,284],experiment:[13,171,172,202,203,246,248,274,275,290,291],expert:139,expir:[171,173,207,220],explain:[140,141,217,224,231,233,258,278,281,282,286,290,291],explan:[1,51],explicit:[21,22,155,184,185,220,281,284,308],explicitli:[132,162,171,172,173,193,202,215,229,230,231,232,246,247,255,274,275,281,282,284,290,291],explict:153,explictli:[246,247],exploit:[38,140,171,172,220,222,237,281,282],expos:[2,13,31,41,77,118,133,144,147,148,165,171,172,175,202,203,206,220,221,224,229,266,267,272,273,281,284,290,291,303,308],exposur:[221,308],express:[2,17,189,213,220,281,284],extend:[2,21,34,35,73,103,130,171,193,202,203,219,221,226,231,281,282,290,291,306,308],extens:[22,144,171,175,220,221,226,281,284,290,291,303,308],extern:[2,35,62,132,133,135,144,146,147,149,161,171,172,193,202,203,204,219,220,224,229,230,231,232,246,247,272,273,281,282,284,290,291],extra:[19,58,102,115,133,134,141,151,171,172,258,268,274,275,276,278,281,282,283,286,290,291],extra_vers:141,extract:[38,135,150,182,183,184,202,204,229,230,231,232,267,272,273],extrem:[162,163,215,216,217,226,227,231,233,241,246,248,261,280,281,284],ey:[250,274,275],eyebal:[184,185],eyecatch:1,f000f:[226,227],f28:274,f42fc40:141,f46c1e506d199332b0f9741278c8ec35b3e39135:189,f58be46:[274,276],f7b8f65:4,f821ffc1:[162,215,226,227],f8dfd699f584:[290,291],f9210020:[162,215,226,227],f:[36,171,172,202,203,287,290,291],f_part:[202,204],facal:[226,227],face:[171,172,258,278,281,282],facil:[11,21,58,70,100,114,132,137,171,172,220,226,227,231,232,246,247,257,261,269,271,274,275,277,280,281,282,284,308],fact:[139,207,220,246,247,255,274,275,308],factor:[110,171,172,174,246,250,274,275,281,282,286,290,291],fadump:[7,38,71],fail:[0,17,35,50,51,58,68,73,113,116,120,128,130,132,141,144,146,147,149,165,166,171,172,173,174,178,180,181,182,183,189,193,198,202,203,204,205,208,220,221,224,226,227,228,229,230,231,232,233,234,236,246,247,248,251,252,254,258,261,266,271,272,273,274,275,276,278,280,281,282,286,290,291,303,304,306,308],failov:[58,147,148],failur:[15,17,35,39,40,41,51,53,54,58,68,70,120,122,123,127,129,131,145,159,161,169,171,172,173,174,180,181,182,183,189,193,196,202,203,208,217,220,224,225,226,227,228,229,231,232,233,239,242,246,247,251,256,257,261,266,267,272,273,274,275,276,280,281,282,290,291,303,308],fair:[182,183],fairli:[76,140,226,227,274,275,281,283,290,291],fake:[147,148,182,183,184,185,220,226,227,290,291],fall:[44,120,171,172,202,203,226,246,247,255,274,281,282],fallback:[202,203,241,278,281,282],fallthrough:[220,224,226,228],fals:[35,162,184,185,195,202,203,207,215,220,231,233,261,274,275,298],fam:19,famili:[19,220,258,278,281,282],familiar:[4,140,141],famou:[171,172,280,281,282],fan:[19,281,284],fanci:[133,224],fapi:[171,172],far:[171,172,182,183,216,226,227,246,247,281,282,284,290,291],fast:[13,44,48,102,113,173,174,178,202,203,205,226,228,231,232,246,247,250,257,261,267,272,273,277,279,280,281,282,284,285,286,288,290,291,293,295,297,305],fast_reboot_entri:[171,174,261,280,281,282],fast_reset_entri:[171,174,261,280,281,282],faster:[202,203,221,246,248],fastreboothoststress:281,fastreboothoststresstortur:281,fastsleep_:[13,48],fatal:[19,58,131,157,159,162,171,172,173,182,183,187,196,202,203,214,225,231,232,246,248,261,271,274,275,280,281,282],fatalerr:164,fault:[10,17,34,35,58,68,150,226,228,290,291,307],favor:220,favour:[13,202,204],fb:36,fd599965f723330da5ec55519c20cdb6aa2b3a2d:191,fd6b71fc:[208,231],fd6b71fcc6912611ce81f455b4805f0531699d5:191,fdt:[2,53,132,182,183,220,226,227,246,248,261,274,275,280,281,282,290,291],fdt_begin_nod:[226,227],fdt_offset_ptr:[290,291],fdt_open_into:[290,291],fdt_prop:[226,227],fdt_strerror:[290,291],fdtdump:[226,227],fe6d86b9:[182,183],feasibl:261,featur:[2,5,25,38,40,50,139,175,177,180,218,221,237,244,257,261,268,272,274,275,277,280,284,285,308],feb:[139,185,274,275],februari:[171,172,173,174,175,182,183,256,257,277],fedora25:220,fedora26:[226,228],fedora27:274,fedora29:274,fedora:[220,224,257,274,275,276],feed:[182,183],feedback:303,feel:[202,203,204,205,290,291,297],fell:[274,276],fenc:[78,147,148,150,159,161,171,172,174,180,182,183,196,202,204,220,224,226,228,229,230,231,236,238,246,247,264,267,272,273,281,282,283,286,290,291,295],fence_st:[290,291],fetch:[35,37,50,51,62,76,83,110,133,135,226,228,306],few:[0,1,2,29,70,134,137,141,153,157,158,159,160,162,171,172,178,182,183,193,195,196,201,202,203,204,205,206,207,208,217,219,220,224,226,227,228,229,230,231,232,238,241,242,251,257,258,261,272,273,274,275,276,278,280,281,282,285,287,290,291,303,305],fewer:[68,70,203],ff:[133,193,201,202,203,204,219,220,226,227,229,230,231,232,246,247,252,254,261,274,275,276,280,281,282,284,287],fffffffffffffff4:[162,215,226,227],fffffffffffffff8:[182,183],ffffffffffffffff:[246,247,254,274,276],ffi:161,ffix:[160,212,220],ffs_close:[226,227,246,247],ffs_entry_user_to_str:[246,247],ffs_handl:[226,227],ffs_hdr_free:[246,247],ffs_header:[246,247],ffs_init:[251,274,275],ffs_lookup_part:[226,227],ffspart:[220,272,273,274,276],field:[0,24,29,33,34,35,41,162,171,172,174,175,189,202,204,215,219,220,224,226,227,231,232,246,247,258,261,265,272,273,278,280,281,282,284,285,286,290,291,303,308],fifo:[28,129,220,229,230,267,272,273],fifth:236,figur:[68,135,246,274,275],file:[13,24,36,131,133,136,138,139,141,146,171,172,178,182,183,184,185,193,202,203,204,205,217,220,222,224,225,226,227,229,230,231,232,246,247,272,273,274,275,281,284,287,290,291,297],file_eras:274,filenam:[226,227,272,273,274],filesystem:[226,227],fill:[35,54,92,95,108,171,172,226,227,231,232,267,272,281,282],filter:[21,132,171,172,189,220,226,227,246,247,258,274,275,278,281,282,286,290,291],fimwar:306,finalise_dt:290,find:[27,36,50,114,147,149,152,160,171,172,174,220,225,226,227,246,248,250,272,273,274,275,281,282,290,291,306],find_next_bit:37,fine:[2,22,35,138,162,171,172,175,208,209,215,217,220,226,227,231,233,246,247,271,274,275,281,282,285,290,291,308],finess:144,fini_arrai:[290,291],finish:[224,229,274,275],finit:[158,190,191,193],fip:[224,274,275],fir:[44,58,158,171,172,178,180,182,183,190,191,193,195,220,226,228,229,230,231,232,241,246,247,249,251,256,267,271,272,273,274,275,281,282,286,290,291],fircheck:[231,232],fire:[202,203],firenc:201,firenz:[38,136,184,186,201,202,203,216,224,226,227,276,281,282],firenze_add_pcidev_to_fsp_inventori:[147,148],firenze_get_slot_info:[147,148],fireston:[136,145,146,147,148,164,202,203,258,278,281,282],firmli:189,firmwar:[0,2,3,5,6,7,21,22,23,25,32,35,38,39,40,41,42,44,50,54,58,68,69,71,77,81,109,113,123,124,130,132,133,135,138,139,140,141,146,161,162,168,171,172,173,174,175,177,178,182,183,184,186,189,195,202,203,204,206,214,218,221,222,224,226,227,231,232,244,246,247,248,250,257,258,261,265,272,273,274,275,277,278,281,282,286,290,291,308],firmware_notifi:[226,227],firmware_request:[171,172,226,227],first:[2,21,22,35,36,42,44,47,51,56,61,69,70,71,81,88,117,118,124,127,133,136,139,141,143,146,147,148,149,150,161,167,168,171,172,173,174,175,181,182,183,184,185,186,187,188,189,190,192,193,195,196,197,198,199,200,201,202,203,204,205,206,208,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,241,246,247,248,254,255,259,266,267,268,270,271,272,273,274,275,276,279,281,282,283,284,285,286,290,291,292,297,302,304,305,306,308,309],first_frozen_p:92,firstli:[171,226,227,246,248],firwar:306,fischer:[219,220],fit:[2,17,171,172,176,182,183,231,232,242,290,291,308],five:[51,231],fix:[2,37,130,134,139,140,144,145,146,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,173,174,175,176,178,179,180,181,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,219,220,221,222,223,224,225,226,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,245,248,249,250,251,252,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,291,293,294,295,296,297,298,299,300,301,302],fixm:[131,220],fixup:[140,220,226,227,228,281,282],fk:35,fl_total_s:[202,203],flag:[0,30,35,41,47,58,60,107,115,130,147,149,171,172,179,182,183,193,195,201,202,203,204,205,218,220,224,226,227,228,229,231,232,234,237,244,246,247,248,250,252,256,270,272,273,274,275,281,282,285,286,290,291,304,305,308],flakei:[246,247],flash:[1,5,35,36,38,42,76,130,133,146,147,148,171,172,173,182,183,184,185,193,194,203,204,205,219,220,229,230,231,232,246,247,251,252,254,258,261,272,273,274,275,276,278,280,281,282,283,284,285,290,291,293,297,303,304,306],flash_dt_add_fw_vers:[274,275],flash_init:[280,281,282],flash_load_resourc:[202,204,261,280,281,282],flash_map_resource_nam:[171,172],flash_nvram_writ:[261,280,281,282],flat:2,flatten:[132,133,193,226],flawless:[281,282],fleetwood:302,flexibl:[2,84,171,172,173,182,183,229,230,246,247,290,291],flight:[117,120,171,172,281,284],flip:305,flood:[139,171,172,246,247],flow:[47,182,231,236,258,278,281,282,303],flr:[224,231,232],fluke:[231,232],flush:[49,151,153,154,171,172,174,180,184,185,241,246,247,258,261,272,278,280,281,282,283],fly:[35,171,172,238],fmt:35,fno:[281,284],focu:[132,185,186],folk:[171,172,178,182,183,226,227,238,261,280,281,284],follow:[1,2,4,15,16,17,19,23,24,30,31,35,43,53,56,88,89,90,93,97,98,100,102,103,105,117,132,133,135,138,139,140,141,143,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,179,180,181,182,183,184,185,186,187,188,189,190,191,193,194,195,196,197,198,199,200,201,202,203,204,205,206,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,241,245,246,247,248,258,261,271,272,273,274,275,276,278,280,281,282,283,284,286,290,291,292,297,302,303,305,306,308,309],followup:[226,228],fonseca:202,foo:131,foot:205,footnot:136,for_each_compat:[278,281,282],for_each_present_cpu:220,forc:[44,70,114,153,171,172,182,193,201,202,203,204,205,220,226,228,229,230,231,236,258,265,271,272,273,274,275,278,281,282,297],foreign:[178,182,183],foresight:22,forev:[161,171,172,208,243,246,247,261,280,281,282,290,291],forget:[270,274,275],forgotten:[42,308],fork:[38,281,284],form:[2,21,34,35,118,132,134,171,172,182,202,203,231,232,241],formal:22,format:[1,2,15,16,17,28,34,35,40,51,67,70,84,88,103,117,135,139,162,171,173,175,184,185,202,203,215,220,226,227,248,257,274,275,276,281,282,287,303,304,306,308,309],former:[171,172,180,202,203,246,247],formerli:[250,274,275],formwar:[231,232],forse:171,fortun:[216,226,227],forward:[73,93,141,171,172,220,231,232,243,250,263,272,273,274,275,281,282,285,290,291],found:[1,4,9,17,21,22,23,41,52,69,85,86,104,118,131,135,138,139,147,148,161,162,164,167,171,172,175,181,182,183,184,185,202,203,213,215,219,220,221,224,226,227,229,231,246,247,251,255,272,273,274,275,280,281,282,283,303,306],foundat:138,four:[49,171,172,180,202,203,220,274,275],fourth:[175,206,235],foward:[255,274],foxconn:136,fpga:[281,282,283,297],fraction:1,fragment:[39,182,183],frame:[246,247],framebuff:155,framework:[19,147,162,182,183,215,220,226,227,229,230],francesco:171,francisco:138,frankli:[274,275],freder:[147,148,171,193,202,203,219,220,226,229,231,274,281,282],free:[2,7,35,39,50,60,61,77,127,131,147,148,164,165,171,172,181,182,183,202,203,208,220,224,226,227,231,233,246,247,258,263,266,272,273,274,276,278,289,293,299,308],freebsd:[45,146],freed:[171,172,182,183,226,241,246,247,308],freenod:138,freez:[101,150,171,172,174,226,228,231,232,236,238,271,274,275],freeze_st:81,freq:[2,5,13,281,282],freq_max_in_domain:[14,281,282],freq_most_recently_set:[14,281,282],frequenc:[2,14,30,34,70,145,147,148,171,172,173,184,185,186,189,201,202,203,224,226,227,246,248,281,282],frequent:[41,154],freset:[135,160,182,183,213,220,226,229,230,281,282,286,290,291],freset_deassert_delai:[281,282],freset_start:[281,282],fresh:[246,247],freshli:[202,204],fridai:[146,151,152,153,157,159,162,171,173,182,185,196,197,202,211,214,218,219,225,242,243,244,246,251,260,263,269,271,273,274,281,282,285,292,296,299],friendli:[171,172,220],fro:292,from:[0,2,3,5,7,12,13,22,26,28,30,36,37,38,40,42,44,47,50,51,52,54,56,58,67,68,69,70,71,73,75,76,78,81,84,87,88,89,90,93,97,98,99,100,101,103,105,106,108,111,116,117,121,122,123,124,127,129,130,131,132,133,134,135,139,140,141,144,146,147,148,149,150,151,153,157,159,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,178,182,183,184,185,187,188,189,191,192,193,195,196,197,201,202,203,204,205,206,209,213,215,216,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,236,237,238,240,241,245,246,247,248,250,251,253,254,255,256,257,258,259,260,262,266,267,270,272,273,274,275,276,277,278,279,280,281,282,283,284,286,287,290,291,294,297,302,303,304,305,306,307,308,309],front:[229,230,246,247],frozen:[171,172,274,275],frquenci:[202,203],fru:[10,34,68,144,171,172,221,267,272,281],fs:161,fscr:[21,22],fsi:[0,147,148,231],fsm:[270,274,275],fsp:[1,8,12,19,20,36,38,40,42,43,50,54,68,77,108,120,127,130,132,133,136,141,144,145,146,152,155,159,160,161,162,163,164,165,168,191,195,201,204,206,207,208,209,210,213,214,215,216,217,230,233,246,247,250,255,279,284,287,290,291,299,300,301],fsp_cmd_get_led_list:168,fsp_cmd_powerdown_norm:[217,231,233],fsp_cmd_reboot:[217,231,233],fsp_cmd_tpo_dis:[226,227],fsp_cmd_tpo_writ:[226,227],fsp_console_read:193,fsp_console_writ:[217,231,233],fsp_console_write_buffer_spac:[217,231,233],fsp_in_reset:[162,215],fsp_in_rr:[162,163,215,216,226,227],fsp_lid_map:[182,183],fsp_log_entri:35,fsp_mkmsg:[226,227],fsp_msg:[144,193,226,227],fsp_msg_queu:[226,227],fsp_msg_sent:[226,227],fsp_msg_timeout:[162,215,226,227],fsp_opal_get_param:77,fsp_opal_manage_flash:47,fsp_opal_rtc_writ:[162,215],fsp_opal_set_param:77,fsp_opal_tpo_writ:[114,226,227],fsp_opal_update_flash:47,fsp_opal_validate_flash:47,fsp_queue_msg:144,fsp_reset_cmdclass:[163,216,226,227],fsp_serbuf_hdr:[226,227],fsp_status_invalid_subcmd:[217,231,232],fsp_sync_msg:[163,216,217,226,227,231,233],fsp_trigger_reset:[162,214,215,224,226,227],fspresetreload:[162,215,226,227],fspv1:224,fstack:[144,184,185,202,203],ftbf:[171,173],full:[1,44,49,56,88,89,90,93,97,98,103,105,115,134,139,162,171,172,178,182,183,184,185,193,202,203,215,217,219,220,226,227,228,231,232,233,236,267,272,297,308],full_purg:274,fulli:[154,195,202,203,220,281,308],fun:[160,165,290,291],func:[82,100,134],func_compar:100,fundament:[22,135,160,168,178,182,183,201,202,203,220,272,273,281,282],funni:290,further:[17,23,50,73,96,104,135,161,171,182,183,229,230,231,236,246,247,248,272,281,282,308],furthermor:[118,272,273,304],fuse:298,futur:[1,5,15,16,22,29,35,38,50,51,54,55,70,84,110,115,131,132,139,141,146,177,182,183,185,186,220,221,226,227,228,229,230,231,234,246,247,272,273,274,275,281,282,283,290,291,302,303,307,308],fuzz:[257,281,282],fw810:[42,141],fw830:39,fw840:8,fw:[0,2,7,20,35,47,146,171,172,177,182,183,217,218,226,227,231,233,244,272,273,286,308],fw_control_err:144,fw_progress:220,fwrite:36,fwt:[130,171,175,180,195,202,203,220,246,247],g123456789abc:4,g16b7ae641037:136,g23118ce:[231,232],g23f147e:141,g2:[281,284],g319c6e1:[231,233],g5:[202,204],g78d89280c3f9:4,g:[1,4,21,22,23,35,36,50,51,53,58,60,77,78,93,101,104,109,110,112,113,122,124,132,135,139,140,141,147,148,150,162,171,172,173,178,181,182,183,184,185,193,202,203,204,206,208,213,217,219,220,224,226,229,231,232,233,246,247,248,258,261,266,267,271,272,273,274,275,278,280,281,282,284,290,291,303,306],ga2:4,ga:[8,131,273],gain:[171,172],gajendra:[184,185],gang:[274,275],gap:[182,183,220,231,232],garante:308,garbag:[274,275],garbal:226,garbl:261,gard:[146,147,148,161,182,183,184,185,193,205,219,220,226,231,232,246,247,271,274,275,286,290,291,293],garrison:[136,147,148,164,195,197,258,278,281,282],gate:[171,172],gather:[37,40,47,50,134,231,232,274,275],gaurente:61,gautham:229,gave:[147,148,161,164,184,185,193,202,203,204],gavin:[147,148,164,184,185,193,202,203,204,219,220,224,226],gb759ce2:39,gbp:27,gcb111c03ad7f:[171,172],gcc7:[171,173,182,183,224,226,228],gcc8:[250,272,273,274,275],gcc9:[277,287,290,291],gcc:[36,138,145,150,160,171,172,182,183,189,193,205,212,220,229,231,233,274,275,280,290,291],gcda:36,gcid:[274,309],gcov:[38,39,147,148,150,182,183,184,202,204,226,229,274,275,290,291],gcov_count:193,gcov_info:[182,183],gcov_info_list:36,gdb:[40,290,291],gear:193,gedd:[171,274],gen1:[134,220,229,230,281,282,286,290,291],gen2:[136,171,221],gen3:[134,171,172,220,229,230,231,232,235,236,274,275,286,290,291],gen4:[134,171,172,229,230,231,235,236,238,286,290,291],gen:[213,220],gener:[7,14,17,21,22,24,27,28,29,35,36,38,39,51,58,71,84,88,120,121,130,133,135,140,141,144,146,159,160,162,168,175,182,183,185,191,195,215,217,220,221,228,233,246,247,250,251,253,256,261,265,267,291,303,304],genid:35,geometri:308,get:[1,10,15,19,20,24,26,35,36,38,39,42,43,47,53,54,55,58,59,71,81,84,85,86,124,131,133,134,139,140,146,147,148,150,153,160,161,162,163,164,165,171,172,173,178,180,182,183,189,195,202,203,207,209,211,215,216,217,220,224,226,227,228,229,230,231,232,233,240,242,245,246,247,248,250,251,255,257,258,260,261,267,271,272,273,274,275,276,277,278,280,281,282,285,286,290,291,297,308],get_attention_st:135,get_interface_cap:[201,202,203],get_irq_config:308,get_latch_st:135,get_link_st:[135,272,273],get_power_st:135,get_presence_st:135,get_vp_info:220,get_xiv:[220,308],getmemproc:[36,220],getscom:[202,203,220,229,230,272,273],getsigraw:225,getspi:274,getsram:[193,202,203,274,275],gf1b53c7:[231,232],gging:35,ghosh:[219,220],giant:[231,232],gigabit:164,gigant:[281,282],girq:308,git:[8,132,139,140,141,143,171,172,290,291],gitdm:[184,185],github:[36,132,138,140,171,172,176,205,219,220,221,222,224,225,226,227,228,231,232,256,274,277,281,283,290,291],give:[13,14,19,22,35,113,130,134,140,146,151,153,154,171,172,175,182,183,217,220,226,228,231,233,246,247,248,251,266,272,273,274,275,281,282,290,291,303],given:[2,22,56,61,68,73,74,75,84,102,123,132,135,162,171,172,173,174,202,203,214,221,226,231,232,250,271,272,273,274,275,290,291,303,308],glibc:22,glitch:[171,172,237,239,240],global:[57,121,202,203,220,221,246,247,272,274,275,281,282,283,297,305,308],glori:95,glue_cache_lin:42,gmail:148,gn70:136,gnuc:150,go:[5,12,39,44,70,132,138,139,141,171,172,178,182,183,193,202,203,220,221,226,227,229,230,231,232,238,246,247,255,260,271,272,273,274,275,278,281,282,283,284,290,291],goal:[68,139,171,172,173,272,273],goater:[147,148,171,184,185,193,202,203,219,220,229,274],goe:[1,35,100,171,172,220,231,274,281,282,283],golden:[193,205],gone:[131,139,162,204,214,220,224],good:[0,2,22,51,128,139,141,160,171,172,180,182,183,203,204,205,219,220,223,226,227,228,246,247,248,257,258,261,266,272,273,278,280,281,282,284,290,291,306,308],goog:2,googl:[136,171,231],got:[38,67,68,162,171,172,182,208,214,215,220,224,226,227,231,245,259,272,273,279],governor:13,gpe1_24x7:[231,232],gpe:[231,232],gpio:[226,227,246,247,290,291],gplv2:297,gpr00:[162,171,173,182,183,215,226,227,246,247],gpr01:[171,173,182,183],gpr02:[182,183],gpr03:[182,183],gpr04:[162,182,183,215,226,227,246,247],gpr05:[182,183],gpr06:[182,183],gpr07:[182,183],gpr08:[162,182,183,215,226,227,246,247],gpr09:[182,183],gpr10:[182,183],gpr11:[182,183],gpr12:[162,182,183,215,226,227,246,247],gpr13:[182,183],gpr14:[182,183],gpr15:[182,183],gpr16:[171,173,182,183],gpr17:[171,173,182,183],gpr18:[182,183],gpr19:[182,183],gpr20:[182,183],gpr21:[182,183],gpr22:[182,183],gpr23:[182,183],gpr24:[182,183],gpr25:[182,183],gpr26:[182,183],gpr27:[182,183],gpr28:[182,183],gpr29:[182,183],gpr30:[182,183],gpr31:[182,183],gpr:[220,224,231,232,246,247,281,282],gpu1:[246,247],gpu2:[246,247],gpu3:[246,247],gpu4:[246,247],gpu5:[246,247],gpu:[16,41,73,102,109,171,172,174,178,180,182,183,195,202,203,220,221,226,227,228,229,230,231,232,238,246,247,267,268,272,273,274,275,281,282,284,286,290,291,298],gpu_mem:[171,172],gpu_mem_4t_down:[171,172],grab:[220,226,228,229,230],grace:[0,70,146],gracefulli:[43,55,78,120,131,132,146,171,172,226,227,241,257,277,281,282],grain:[22,171,175],grand:[184,185],granul:[2,229,230],granular:[22,181,208,266,272,273],graphic:[2,278,281,282],great:[171,182,183,193],greater:[4,55,133,201,202,203],greatli:[147,148,258,274,278,281,282],gregori:[171,274],grep:[5,36,162,171,172,214,224],grid:[171,172],grimm:274,gross:[281,282],ground:303,groundwork:146,group:[5,14,22,29,38,41,42,51,171,172,175,226,227,229,230,231,233,246,247,268,274,275,281,282,308],group_hndl:119,gt:[213,220],guarante:[13,15,62,121,171,172,241,258,261,278,281,282,284,288,308],guard:[112,146,161,171,172,182,231,232,286,290,291],guess:[171,172,274,275,286,290,291,302],guest:[22,93,231,232,233,260,272,273,274,275,281,282,284,286,290,291,308],guid:[22,41,171,172,231,232,237],guidelin:[21,138],guidinglight:10,guilherm:[171,219,220,231],gunk:[162,214],gupta:[147,148,161,164,184,185,274],gzip:[28,129,229,230],h2b:[258,278],h:[1,35,39,47,70,84,123,131,133,146,171,172,182,183,206,220,225,226,227,231,232,268,274,275,281,282,287,306],h_cppr:64,h_eoi:62,h_ipi:65,h_m_s_m:117,ha:[0,2,3,7,14,15,16,17,18,19,21,22,28,33,35,37,41,42,51,52,58,62,69,70,71,76,81,84,93,108,112,113,114,117,122,130,131,133,134,135,139,140,141,148,151,154,155,162,167,171,172,173,176,177,178,179,180,182,183,189,193,201,202,203,204,205,214,215,217,220,221,223,224,226,227,228,229,230,231,232,233,234,241,245,246,247,250,251,254,257,258,261,266,267,272,273,274,275,276,277,278,280,281,282,284,285,286,288,290,291,297,302,303,305,306,308,309],habanero:[4,136,145,161,184,185,202,203,220,278,281,282],hack:[171,172,182,183,224,229,230,231,236,246,247,250,261,280,281,284,285,286,290,291],hacker:[147,148,161,164,171,231],had:[42,76,132,147,152,171,172,184,185,200,202,204,217,226,228,229,230,231,232,233,246,247,258,259,274,275,278,279,281,282,290,291,308],hal:134,hal_success:134,half:[78,115,182,226,227,267,272,281,283,290,291,305],halfwai:122,halloran:[171,184,185,187,193,202,203,219,220,224,226,229,231,274],halt:[125,303,305,306],hammer:[202,203,261],hand:[2,135,226,231,232,272,290,291,303,305,308],handi:[171,172,290,291],handl:[2,15,16,21,37,38,41,42,43,59,68,70,75,78,82,109,110,117,119,120,131,133,134,144,146,147,148,149,151,157,160,161,169,171,172,173,182,183,184,187,193,202,203,204,207,209,212,217,219,220,224,226,227,228,229,230,231,232,233,245,248,251,255,258,261,271,272,273,274,275,278,280,281,282,284,285,286,287,290,291,300,303,307,308],handle_error:131,handle_hmi_except:[246,248],handler:[19,42,58,120,122,162,171,172,173,214,220,226,228,229,231,246,247,258,267,272,273,274,275,278,281,282,286,290,291,308],handler_address:42,handshak:[229,246,247],hang:[58,146,147,148,159,161,162,164,171,173,182,183,184,186,191,215,226,227,246,247,248,255,261,267,272,274,275,278,280,281,282,290,291],hank:[219,220],happen:[2,44,47,70,131,134,148,162,163,168,171,172,173,182,183,198,202,203,215,216,217,226,227,228,231,232,233,246,247,248,251,261,265,270,271,272,273,274,275,280,281,282,284,286,290,291,306,308],hard:[15,51,55,139,171,172,181,189,202,203,208,211,226,227,231,232,239,240,246,248,258,265,266,272,273,274,275,278,281,282,286,290],hardcod:[146,213,220,224,226,227,281,284],harden:[144,182,183,220,226,227],harder:281,hardlock:[258,278,281,282],hardlockup:[182,183,258,278,281,282],hardwar:[15,21,22,23,27,28,29,36,37,40,41,53,61,68,76,77,78,79,80,81,83,87,91,93,95,99,103,107,109,110,119,122,131,132,135,136,139,157,165,171,172,173,174,178,179,180,182,183,187,188,193,202,203,204,220,221,224,226,227,228,231,232,239,242,246,247,248,269,272,273,274,275,281,283,284,292,303,306,308],hardwir:146,haren:229,hari:[147,148,229],harmless:[146,147,148,171,172,182,183,202,203,224,241,246,247],has_deep_st:[171,172],has_slw:[231,232],has_wakeup_engin:[231,232],hash:[22,23,72,73,115,143,171,172,173,226,227,290,291,305,306],hash_prop:[246,247],hasn:[226,228,229,246,247,272,273,274,275,297,308],hat:140,have:[0,2,4,5,12,13,14,17,19,20,21,22,24,28,29,32,34,35,36,37,42,43,49,50,51,52,55,61,68,70,71,75,76,77,79,81,96,100,114,122,126,127,130,131,132,133,134,135,138,139,144,146,148,149,150,151,153,154,155,157,160,161,162,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,193,194,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,257,258,259,261,265,266,267,268,271,272,273,274,275,276,278,279,280,281,282,283,284,286,290,291,303,304,305,306,308],haven:[138,146,202,204,246,247,272,273,274,275,281,282,286,290,291],havoc:[182,183],hb:[2,220,246,247],hba:[274,275],hbrt:[70,111,128,144,161,171,172,201,226,227,231,232,255,272,273,274,275],hcode:[171,172,246,247,248],hdat:[2,34,40,133,171,172,177,182,183,194,201,202,203,218,219,220,221,222,224,226,227,228,229,230,231,232,233,238,244,246,247,250,257,259,272,273,274,275,279,281,282,290],hdat_i2c_info:[250,274,275],hdat_to_dt:[246,247,257,274,276],hdata:[133,171,172,174,175,180,220,221,222,224,226,227,228,229,230,231,233,246,247,250,257,272,273,274,275,276,281,282,287,295,298,300],hdata_to_dt:[220,224,226,227,229,230],hdatiplparm:[182,183],hdd:[274,275],hdec:[58,146,231,236,246,247,271,274,275],hdif_child:220,hdif_get_iarray_s:220,hdt:103,head:[58,133,141,162,171,172,184,185,214,231,246,247,261,280,281,282,284,301],header:[2,35,47,133,146,153,171,172,173,174,182,183,202,203,204,219,226,227,231,232,245,246,247,250,253,261,274,275,280,281,282,284,290,291,304,305,306],heap:[2,38,131,133,147,148,165,182,183,220,274,275,290,291],heap_bas:133,heap_pop:[290,291],heap_push:[290,291],heap_replac:[290,291],heap_siz:133,hear:[171,172],heartbeat:[162,164,193,215,226,227,231,232,246,247,287],heavi:[162,215,217,226,227,231,233,246,247],heavili:[109,135,231,232,274,275],heavyweight:[274,275],hegd:[147,148,161,171,184,185,193,202,203,204,219,220,224,226,229,231,274],hei:224,heighten:303,held:[113,146,161,171,172,184,185,193,208,231,232,243,254,261,272,273,274,275,276,285,290,291],heller:[219,224],hello:[220,246,247],hello_world:[145,147,148,171,172,193,220],help:[2,5,19,35,49,58,68,133,134,138,139,147,148,169,170,171,172,173,198,202,203,219,220,226,228,229,230,231,233,246,247,257,259,266,267,272,274,275,279,281,282,290,291],helper:[133,171,172,178,182,183,202,203,220,224,226,227,241,246,247,272,274,275],hemant:226,henc:[68,102,162,171,172,174,181,182,183,208,215,217,221,226,229,230,231,232,233,236,246,247,258,261,266,270,271,272,273,274,275,278,280,281,282,283,290,291],here:[2,18,22,29,37,51,73,131,132,133,139,141,162,171,172,178,182,183,184,185,202,215,221,226,227,229,230,231,232,238,246,248,257,258,259,265,272,273,274,275,276,278,279,281,282,286,287,290,291,308],herrenschmidt:[147,148,161,164,171,184,185,193,202,203,219,220,224,226,229,231,274],heterogen:22,heurist:[202,203,281,284],hex:[35,195,202,203,274,275],hexa:35,hexadecim:[2,4],hexdump:220,hexidecim:[274,275],hfscr:[21,22],hid0:[281,284],hid:[115,171,174,220,226,227,257,277,281,282,284],hidden:[171,172,308],hiearchi:88,hierarch:[182,183],hierarchi:[17,25,34,38,88,101,171,172,304,305],high:[28,41,68,70,100,118,129,139,157,171,172,187,217,224,229,230,231,232,233,271,274,275,281,282,305],higher:[52,101,132,202,203,226,228,246,247,248,304,308],highest:[13,121,226,227,229,230,246,247],highli:141,hijack:[171,172,231,232,246,247],hilari:[171,174],hile:[124,130,161,182,183,226,228,257,277,281,282],hint:[24,171,172,303],hiomap:[250,251,252,254,261,274,275,280,283,285,290,291],hiomap_c_clos:[258,278,281,282],hiomap_e_daemon_readi:[258,278,281,282],hiomap_e_flash_lost:[258,278,281,282],hiomap_queue_msg_sync:[261,280,281,282],hiomap_window_mov:[258,261,278,280,281,282],hir:[144,162,171,172,215,224,226,227],histor:[2,76,133,220],histori:[38,132],hit:[50,131,146,147,148,160,165,171,172,174,178,182,183,201,202,203,207,220,226,228,229,230,231,232,236,246,247,248,257,274,275,277,281,282,283,286,290,291],hmc:[20,47],hmeer:[58,220],hmer:[58,70,157,171,172,182,183,187,198,202,203,242,246,247,248,261,271,274,275,280,281,282,284],hmi:[38,42,70,146,154,157,159,169,170,173,176,178,180,182,183,187,195,196,202,203,204,220,226,227,228,231,232,234,236,248,249,261,267,271,272,273,274,275,280,281,282,283,284,286,290,291],hmi_debug_trigg:[246,248],hmi_event_handl:[261,280,281,282],hmi_tfmr_error:182,hnadl:224,hold:[1,35,58,113,122,162,171,172,181,182,183,207,208,214,220,221,225,245,246,247,256,265,272,273,274,275,277,281,282,290,291],holder:[226,227],hole:[171,172,182,183],homer:[2,14,171,173,182,183,220,221,224,229,230,231,232],hood:[231,232],hook:[35,135,146,161,181,208,220,226,227,261,266,272,273,280,281,282,303,305],hookup:[181,208,266,272,273],hope:[44,171,186,206,220,285,290,291],hopefulli:[146,206],horribl:124,host:[0,2,12,23,30,35,40,42,44,46,47,50,51,55,56,57,58,59,62,63,64,65,67,68,70,77,87,88,89,90,93,97,98,99,100,101,103,105,106,113,114,115,118,121,124,128,131,132,134,136,138,147,148,150,153,157,162,164,165,166,171,172,173,175,182,183,187,189,193,201,202,203,204,208,213,214,215,217,220,224,226,227,229,230,231,232,233,245,246,247,250,251,255,258,261,272,273,274,275,278,280,281,282,284,285,286,287,290,291,302],host_interfac:193,host_load_payload:[171,174],hostboot:[4,40,132,133,154,161,171,172,173,174,177,182,183,184,185,204,220,221,222,224,226,227,229,230,231,232,234,235,238,241,243,245,246,247,250,259,272,273,274,275,279,281,282,284,290,291,306],hostcc:225,hostinterfac:[171,172],hostservic:146,hot:[86,104,135,171,172,175,201,202,203,220,221,226,227,229,230,272,273],hotplug:[27,35,38,53,104,193,202,203,213,220,221,229,230,246,247,281,282,297],hour:[117,231,232,261,280,281,284],hour_minute_second_millisecond:117,how:[2,4,5,16,17,22,37,38,49,50,69,71,76,94,96,114,127,132,139,140,166,171,172,173,174,175,178,182,183,184,185,193,202,203,204,205,206,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,246,247,248,258,259,272,273,274,275,276,278,279,281,282,283,284,286,290,291,303],howev:[5,14,77,88,121,135,150,171,172,175,182,183,188,189,193,202,203,204,220,221,226,227,229,231,232,238,241,246,247,250,254,255,259,266,270,272,273,274,275,276,279,281,282,286,287,288,290,291,302,303,304,305,308],howto:38,hpc:[136,266],hpt:93,hr_min:[114,226,227],hreset:[135,213,220,229,230,274],hrfid:[281,284],hrmor:[202,203,231,232,246,248],hs:220,hservic:[255,274],hservice_memory_error:[181,208,266,272,273],hsprg0:[246,247],hsprg1:[246,247],hsrr0:[162,171,173,182,183,214,224],hsrr1:[147,149,162,171,173,182,183,214,224],hss:2,hssr0:[147,149],htaborg:72,htmght:161,html:[202,203],http:[36,132,133,138,140,155,171,172,176,205,219,220,221,222,224,225,226,227,228,229,231,232,246,247,256,274,277,281,283,290,291],hub:[83,103,224,274,275,281,282],hub_id:[42,83],huge:[147,148,149,182,183,226,228,274,275,297],hugo:[171,172],human:[21,22,132,134,226],humid:54,hundr:[171,172],hurt:[229,230],hv:[21,22,73,132,162,178,182,183,215,226,227,246,247],hvc0:[208,231],hvc1:[208,231],hvc:[193,202,203,226],hvsi:[217,231,233],hw:[2,23,47,68,105,108,133,146,147,148,149,153,157,158,159,160,162,167,168,171,172,173,174,178,180,182,183,184,185,186,187,190,191,193,194,196,197,201,202,203,206,212,213,214,215,220,221,224,225,226,227,229,231,232,233,234,236,237,238,239,240,241,246,247,258,261,262,267,268,269,271,272,273,274,275,278,280,281,282,283,284,286,287,288,290,291,294,298,300,308],hw_key_hash:306,hw_key_hash_s:306,hwcap:[21,22,180,182],hwclock:[162,215,226,227],hwirq:[91,202],hwmon:[19,171,172,175,229,230,242,246,247],hwpoison:[181,208,266,272,273],hwrng:28,hwsv:274,hygen:[280,281,282],hyp:[255,274],hypervisor:[21,22,33,35,37,38,42,68,70,130,157,169,171,175,182,183,187,231,232,246,247,257,261,277,280,281,282,283,284,308],hypervizor:164,hypothet:[21,141],i2c:[0,60,131,135,144,145,147,148,162,171,172,173,184,185,186,202,203,207,208,211,214,219,225,226,227,229,230,231,232,233,238,243,246,247,250,255,265,270,274,275,281,282,294],i2c_:[246,247],i2c_addr:[246,247],i2c_init:[171,173],i2c_port:[246,247],i2c_request_send:[270,274,275],i2c_run_req:220,i2cdetect:[211,220],i2cm:[202,203,246,247],i2cm_port:[246,247],i3f8:2,i5:35,i:[1,2,33,35,38,42,62,63,64,65,106,134,138,154,162,171,172,174,182,183,184,185,186,195,197,202,203,206,212,214,219,220,224,226,227,228,229,230,231,246,247,250,251,255,261,271,272,274,275,281,282,283,284,290,291,309],iamr:[226,227],ian:[161,184,185,193,219,220],ibm:[1,2,7,8,10,11,12,15,16,20,24,25,26,27,28,29,30,31,33,34,38,39,40,41,42,43,44,46,50,52,55,56,59,62,63,64,65,67,70,71,76,83,84,87,88,89,90,93,97,98,99,100,101,103,105,114,119,127,130,132,133,134,135,136,137,141,145,147,148,152,161,164,174,175,182,183,184,185,187,193,194,201,204,216,219,220,221,222,224,228,230,246,247,248,250,251,255,257,272,273,274,275,277,284,290,291,297,302,303,305,306,307,308,309],ibm_fsp_termin:[160,207,220],ibmer:140,ibmpowernv:[151,162,215,226,227,229,230],ic922:136,icp:[2,193],icswx:28,id:[1,2,8,9,18,19,20,24,26,27,28,29,30,33,34,35,42,49,50,51,52,60,67,70,72,73,74,75,83,84,85,86,91,94,96,102,104,129,132,141,146,154,162,171,172,173,174,182,183,184,185,191,193,194,202,203,206,214,220,224,226,227,228,229,230,231,232,246,248,258,267,272,273,274,275,278,280,281,282,286,290,291,308,309],idata:[171,172,226,227],idea:[42,171,172,226,227,246,247,266,272,273,308],ideal:[2,35,131,171,172,173,254,257,274,275,281,282,303,308],ident:[73,120,141,246,247],identif:[34,189],identifi:[10,13,14,18,19,22,33,35,39,47,50,51,53,68,69,102,104,109,119,129,143,154,162,171,172,215,231,233,267,272,273,274,275,290,291,306],idl:[48,145,146,147,148,171,172,202,203,220,221,226,227,229,231,232,246,248,267,272,273],idsel:69,idx:[231,233],ie:[0,1,2,13,73,182,183,224,226,227,228,229,230,241,267,272,274,275,285,290,291,308],ifdef:193,iff:[274,275],ignor:[4,5,22,41,55,56,68,70,71,78,93,104,108,117,121,162,171,172,191,193,202,203,204,215,220,221,224,226,227,229,230,231,233,236,246,247,271,274,275,281,283,286,290,291,308],ii:[38,136,164,281,282,284],iif:182,iii:[38,231],ijklmnopqrstuvwx:35,ili:19,illeg:[260,272,273],ilpc2ahb:[272,273],im:[290,291,297],ima_catalog:37,imag:[0,2,4,8,17,23,36,47,132,145,165,171,172,182,183,220,226,227,231,232,246,247,248,274,275,276,281,282,290,291,297,306],imc:[25,38,61,171,172,173,180,182,183,226,227,231,232,233,234,242,246,247,281,282],imc_dt_update_nest_nod:[171,172],imc_init:[180,246,247],imc_nest_chip:[171,172],img:[246,247],imit:70,immedi:[43,104,117,127,135,161,166,171,172,220,229,239,246,247,261,272,273,274,275,280,281,282,286,290,291,303,305],immun:[257,274,276],impact:[171,172,238,261,266,272,273,280,285,290,291],imped:[281,282],impend:[54,202,217,231,233],imperfect:[290,291],impi:[281,282],implement:[17,21,22,37,42,46,47,49,50,54,55,56,68,77,83,84,88,89,90,93,97,98,101,103,105,120,121,126,131,132,133,135,144,151,162,171,172,173,175,180,181,182,183,201,202,203,204,206,208,214,220,221,224,226,227,231,232,237,246,247,250,255,258,265,266,271,272,273,274,275,278,281,282,284,290,291,303,305,306,308],implent:[226,227],impli:[21,246,247,248,308],implic:[274,275,303],implicit:[22,160,258,278,281,282,308],implmeent:[246,247],implment:[226,227],importantli:[246,247,254,272,274,276],impos:231,imposs:[118,265,272,273,281,282,297],imprint:[219,306],improperli:305,improv:[102,139,146,153,161,162,166,168,173,176,177,178,179,190,191,199,202,203,204,205,207,211,215,217,220,224,226,227,229,230,231,233,234,248,251,257,258,268,274,275,276,277,278,281,282,290,291],in_be64:[286,290,291],inaccess:[17,220],inaccur:[171,175,226,227],inact:[171,172,246,248],inadequ:131,inadequaci:[246,247],inadvert:[171,172,241],inband:[47,202,203,209,229,230,231,235,246,247,290,291],inbox:139,inc:[133,213,220,290,291],incant:[226,227],incarn:[42,290,291],incas:61,incident:[246,247],incl:161,includ:[2,4,17,28,32,35,37,70,84,97,102,115,131,133,138,140,144,146,147,148,151,163,171,172,174,182,183,184,185,187,188,189,190,191,195,196,197,198,199,200,201,202,203,216,221,224,225,226,227,229,230,231,232,236,237,246,247,253,254,255,256,257,258,259,261,262,263,264,267,274,275,277,278,279,280,281,282,285,286,287,288,289,290,291,293,294,295,296,298,299,300,301,303,304,305],incom:[217,231,233],incompat:[22,202,204],incomplet:[54,134,171,172,225,226,227,231,232],inconsist:[274,275,298],incorpor:[132,140],incorrect:[43,67,72,76,113,122,171,172,193,194,200,202,203,220,224,226,227,228,229,254,274,276,290,291],incorrectli:[50,150,171,172,197,206,226,228,231,232,246,248,254,271,274,275,276,288],increas:[4,39,134,145,147,148,166,171,172,173,175,182,183,184,185,193,194,202,204,224,226,227,228,229,230,231,232,235,236,246,247,263,272,273,274,281,282,290,291,296],incred:[290,291],increment:[58,154,182,183,231,235,248,267,272,273,274,275],inde:[1,132,171,172,226,227,231,232,252],indefinit:[121,138,171,172],independ:[143,171,172,220],indetermin:303,index:[2,9,27,29,30,35,56,88,89,90,97,98,100,105,106,171,172,178,182,183,184,185,187,202,203,226,227,229,230,254,267,272,273,274,275,276,280,281,282,305,308],indic:[0,2,5,7,11,14,15,16,18,20,21,22,23,24,31,32,35,37,38,40,42,46,50,58,69,70,71,72,85,86,88,89,98,100,102,103,104,110,114,122,129,131,135,138,147,148,171,172,182,183,184,185,186,195,201,202,203,204,213,218,220,224,225,226,227,228,229,230,231,236,238,244,245,246,247,250,261,268,271,272,273,274,275,280,281,282,284,285,290,291,303,308],indicatg:308,indirect:[166,171,172,220,224,226,228,241,286,290,291],individu:[21,22,135,147,148,171,172,202,204,231,232,238,308],individud:308,indivisu:47,industri:[133,220],inf:[171,172,246,247,272],infer:[171,172,281,282,306],infinit:[153,161,171,175,246,247],inflight:[163,209,216,226,227,258,278],inflight_bt_msg:[258,278],info:[1,35,36,58,68,70,171,172,206,217,220,224,226,228,229,230,231,232,233,246,247,274,275,281,282,308],inform:[0,2,4,7,19,22,23,24,27,32,34,35,37,40,44,50,51,54,58,68,69,70,71,110,123,132,134,136,138,141,146,147,148,161,171,172,202,203,220,221,224,226,227,231,232,237,241,246,247,248,250,257,272,273,274,275,276,281,282,290,291,305,306,307,308],infrastrcutur:37,infrastructur:[61,141,181,202,203,204,208,220,229,231,232,246,247,266,272,273,281,282,283],ing:[50,171,172,181,208,266,272,273],ingrasi:136,inher:[229,230],inherit:[171,173],init:[0,6,37,61,70,133,171,172,173,174,178,182,183,184,193,202,203,204,220,221,222,224,226,227,228,229,230,231,232,234,236,237,238,241,246,247,248,251,255,261,267,270,272,273,274,275,279,280,281,282,283,284,286,290,291],init_16:226,init_5:226,init_all_cpu:[182,183],init_boot_cpu:182,init_chip:[226,227],init_cpu_thread:182,init_shared_spr:220,initalis:245,initi:[0,17,28,35,37,38,41,42,49,50,60,61,67,71,76,89,99,102,118,124,129,131,132,133,135,136,145,147,148,151,159,161,162,171,172,173,178,180,182,183,184,185,196,198,202,203,209,214,215,217,220,224,226,227,229,230,231,232,233,246,247,258,261,267,268,272,273,274,275,278,280,281,282,284,286,290,291,303,304,306,308],initialis:[0,35,41,171,172,180,182,183,221,224,226,227,246,247,261,272,274,275,276,279,280,281,282,284,286,290,291,300],initramf:[132,182,183,226,227,246,247],initramfs_load_bas:7,initrd:[7,226,227],inject:[82,150,166,198,217,226,227,229,230,231,233,246,247,261,271,274,275,280,281,284,286,290,291],inject_mce_step:[246,247],inject_mce_ue_on_addr:[246,247],inkl:[202,204],inlin:[106,287],inoper:150,input:[2,35,56,59,88,134,139,146,171,172,182,183,226,229,230,246,247,281,282,290,291],input_output:35,ins:[171,172],insan:[1,224],insert:[86,135,202,203,246,247,308],insid:[40,42,52,131,132,163,171,172,182,183,216,217,220,224,226,227,231,232,233,246,247,250,261,272,273,274,275,280,281,282,308],insist:224,insn:[180,182],inspect:0,inspir:[139,258,278,281,282],instal:[4,36,171,173,184,185,202,203,220,226,228,246,247,258,272,273,274,275,278,281,282],instanc:[28,33,129,146,171,172,226,231,235,246,247,272,281,290,291],instanci:220,instanti:[135,226,227,246,247],instead:[2,5,42,43,50,62,63,64,65,81,84,113,133,141,146,171,172,173,174,175,178,179,180,181,182,183,193,194,195,201,202,203,204,207,213,216,220,221,226,227,229,231,232,237,238,246,247,248,249,250,251,252,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,277,278,279,280,281,282,285,286,287,288,289,290,291,293,294,295,296,298,299,300,301,308],instr:[281,282],instruct:[0,13,21,22,28,37,40,43,124,147,148,153,162,166,171,172,174,193,214,215,226,227,231,232,241,246,247,260,272,273,274,275,281,282,290,291,307],insuffci:50,insuffic:226,insuffici:[54,67,83,118,171,172,226,228,267,272,286],int16_t:54,int32_t:[113,122,224],int64:[43,72],int64_t:[42,44,45,46,47,48,49,50,52,53,54,55,56,57,58,62,63,64,65,67,68,69,71,76,77,78,79,80,81,82,83,84,85,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,111,112,113,114,115,116,120,121,122,123,124,125,127,308],intc:[62,63,64,65,308],integ:[131,226,227,290,291,294,308],integr:[114,133,171,172,213,220,238,261,272,273,274,275,285,290,291],intend:[0,4,17,22,35,88,113,202,203,220,224,226,227,281,282,290,291,303,308],intens:193,intent:[17,171,172,174],intention:[290,291],interact:[38,52,73,150,162,171,172,184,185,214,220,221,225,274,275,281,282,303],interconnect:[41,281,282],interest:[136,182,183,202,226,227,246,247,272,273,306],interfac:[6,9,10,19,21,24,27,28,38,42,52,58,61,67,130,132,135,146,147,148,161,171,172,175,184,185,201,202,203,209,219,221,226,227,229,230,231,232,242,246,247,250,258,272,273,274,278,281,282,286,290,291,308],interfer:[281,282],interlav:2,interleav:[2,220],interlock:[213,220],intermedi:[229,230],intern:[16,35,42,46,50,54,77,83,120,127,134,135,144,202,203,220,226,228,231,232,246,247,265,270,272,273,274,275,290,291,297,302,303,305,308],internal_create_group:[231,233],interpret:[55,171,172,202,204,226,227,270,274,275,281,284,290,291,306],interrupt:[2,5,27,30,33,35,37,38,40,42,56,57,59,62,63,64,65,70,97,121,122,130,132,134,144,146,147,148,151,153,157,160,164,169,171,172,173,178,182,183,187,193,197,202,203,207,220,224,226,227,229,231,232,241,245,246,247,248,257,258,261,269,271,274,275,277,278,280,281,282,283,284,290,291,303,305,307,308],interrupt_source_numb:134,interrupts_properti:[182,183],intersect:224,interupt:224,intial:303,intialis:[182,183],introduc:[42,49,58,81,131,133,143,147,153,161,162,168,169,171,172,178,182,183,201,202,203,205,215,216,220,221,226,227,229,230,246,247,257,258,268,274,275,276,278,281,282,290,291],introduct:42,introductuion:[226,227],invalid:[45,48,49,50,52,53,58,60,67,70,71,74,75,77,78,79,80,81,82,83,87,91,92,95,96,99,100,102,106,109,110,112,120,124,127,129,130,131,144,145,147,148,171,172,173,182,201,226,227,231,232,241,242,246,247,250,257,258,271,274,275,278,281,282,284,286,290,291],invalu:139,invent:[132,281,284],inventori:[290,291],invers:[188,272,273],invis:[246,247],invoc:[61,274,281,282],invok:[28,35,44,171,172,226,227,246,247,279,281,282,284,290,291],involv:[22,44,101,138,139,166,171,173,182,183,229,230,250,274,275],io:[2,36,69,83,90,93,103,171,172,241,278,281,282,284],ioa:82,ioctl:[224,229,230],ioda2:[27,29,56,88,89,90,97,101,134],ioda3:30,ioda:[38,88,89,100,103,105,106,226,227,267,272],iohub:[171,175,274,275,281,282],iommu:[286,290,291],iopath:220,ioslot:[231,232],iotyp:84,iov:[147,149,226,227,261,280,285,290,291],iovalid:[171,172,240],iovpd:[281,282],ip_tabl:[162,215,226,227],ipi:[171,172,220,224,231,232,246,247,308],ipl:[40,44,47,51,130,145,146,171,172,173,182,183,202,203,204,218,220,224,231,232,244,272,273,292,295],iplparams_sysparam:[171,172],ipmi:[1,20,35,38,67,77,130,131,144,146,147,148,149,152,162,164,166,171,172,182,183,202,206,208,209,215,217,220,226,227,228,229,230,231,232,233,246,248,250,251,252,254,256,257,261,263,271,274,275,277,280,281,282,283,285,287,289,293,294,299],ipmi_chassis_control:[258,278,281,282],ipmi_devintf:[162,215,226,227],ipmi_dt_add_bmc_info:[274,275],ipmi_elog_commit:35,ipmi_fw_pci_init:220,ipmi_get_bt_cap:[258,278,281,282],ipmi_hiomap_handle_ev:[258,278,281,282],ipmi_hiomap_read:[258,278,281,282],ipmi_hiomap_writ:[261,280,281,282],ipmi_msg:67,ipmi_msghandl:[162,215,226,227],ipmi_partial_add_esel:206,ipmi_powernv:[162,215,226,227],ipmi_queue_msg_sync:[254,258,261,263,274,275,278,280,281,282,285,290,291],ipmitool:209,ipol:70,ipoll_ack:70,ipoll_mask:70,ipoll_statu:70,ipr:[162,215,226,227],ir:[162,215,226,227,246,247],irc:138,irq:[2,33,157,171,172,187,193,197,202,203,208,220,224,226,227,231,232,234,241,245,274,280,281,282,307,308],irq_happen:[231,233],irqchip:[130,182,183,202,203],irqdomain:202,irqf_shar:193,irrespect:[134,182,183,220,251,267,272,273,274,275,281,282,290,291],irrit:[246,247],is_fsp_system:[246,247],is_mambo_chip:146,isa:[2,13,21,22,122,132,194,274,281,282],isav3:219,isdimm:220,isn:[2,57,59,85,86,104,121,133,135,139,145,171,172,182,183,184,185,188,213,220,221,226,227,228,229,230,231,232,241,245,246,247,252,257,272,274,275,277,278,281,282,284,290,291,308],isol:[58,68,171,172,220,226,228,286,290,291],isra:[246,247],issu:[44,70,73,77,79,91,93,95,117,133,134,138,146,147,148,151,154,160,162,168,169,171,172,173,174,175,176,178,181,182,183,188,193,194,195,201,202,203,205,208,213,214,215,217,219,220,221,222,224,225,226,227,228,229,230,231,232,233,235,238,241,242,246,247,248,250,256,258,261,265,266,267,268,271,272,273,274,275,277,278,280,281,282,283,284,285,286,287,290,291,305,308],istep:[171,174],isync:[171,172,241],it_page_shift:106,item:[178,182,183,226,227,309],iter:[118,171,172,174,224,231,232,246,247,277,303],its:[1,2,7,14,17,35,40,53,58,70,71,76,78,84,102,121,131,133,135,138,139,171,172,173,182,183,184,185,201,202,203,220,221,226,227,229,230,231,233,238,246,247,258,268,271,272,274,275,278,281,282,286,290,291,306,308],itself:[2,36,68,114,131,171,173,182,183,193,202,203,220,224,226,228,229,230,246,247,253,260,261,265,272,273,280,281,284,290,291,306,308],iv:[38,153,171,172,241],ivalid:66,ivc:[157,187],ivt:[157,187,308],ivt_addr:134,ivt_len:134,j:274,jack:[202,203,219,220],jain:[171,184,185,187,193,226,231,274],jan:262,jankin:274,januari:[145,154,155,160,162,212,218,244],jeff:224,jefferi:[226,231,274],jenkin:[171,231,233,274],jennif:[171,274],jeremi:[147,148,164,171,184,185,193,202,203,219,220,226,231,274],jessi:[184,185,226,228],jha:[171,274],jiffi:[217,231,233],jim:[202,224],jitindar:[171,193,202,203,226,231],jitter:[133,254,274,275],job:[171,172,175,202,203,220,229,230,241,246,247,271,272,274,275],joel:[147,148,164,184,185,187,193,202,203,219,220,226,231,274],john:[164,184,185,231],join:138,jona:[147,148,161,171,184,185,193,202,203,229,231,274],js:[171,172],json:220,juli:[148,158,159,190,191,193,194,226,227,228,229,230,267,268,272,274,275,276,286,290,291,299],jump:[133,226],jumper:[23,171,172,220],june:[189,190,214,215,273,289,290,291,298],junk:[246,248],junkcod:229,just:[1,2,16,35,42,43,58,108,130,133,138,141,147,148,162,171,172,174,175,177,180,182,183,193,202,203,204,215,220,221,224,226,227,228,229,230,231,232,246,247,251,255,257,261,265,271,272,273,274,275,278,280,281,282,285,286,290,291,297,303,306,308],just_pol:63,justifi:139,k0:[224,274],k80:[147,148],k:[3,37,147,148,161,171,172,184,185,193,202,203,290,291,306],kamalesh:[147,148,193],kardashevskii:[171,219,220,224,231,274],kcore:36,kdump:[40,61,147,148,171,172,229,230,260,261,280,281,284],keen:1,keep:[1,2,39,44,55,109,132,139,146,162,171,172,182,183,213,215,217,220,226,227,228,229,230,231,233,238,246,247,261,274,275,280,281,282,286,290,291,308],kei:[17,23,73,118,171,172,173,193,219,302,305,306],kek:304,kennington:231,kept:[2,274,275,305],kernel:[2,5,7,13,14,17,22,23,24,31,32,37,40,41,42,43,50,53,70,71,106,118,128,129,130,132,139,140,145,146,147,148,149,150,153,154,155,160,161,162,169,171,172,175,177,178,181,182,183,193,201,202,203,204,208,213,215,217,220,224,226,227,228,229,230,231,232,233,243,245,246,247,248,251,257,258,260,261,266,267,268,271,272,273,274,275,277,278,280,281,282,284,286,290,291,303,304,305,307],kernel_command_lin:[202,204,206],kernel_entri:[274,275],kernel_kexec:[231,233],kernel_load_bas:[7,182,183],kerr:[147,148,164,171,184,185,193,202,203,219,220,226,231,274],ketchup:141,kexec:[2,50,51,61,124,125,129,132,159,171,172,174,191,193,226,227,228,229,230,231,233,261,267,272,273,280,281,284,286,290,291,305,308],kexec_cor:[231,233],key_buf_s:118,key_len:118,key_length:118,key_siz:118,keyword:[2,39,220,267,272,300],kick:[5,96,171,172,231,274,275],kill:[106,181,208,260,266,271,272,273,274,275],kill_typ:[106,271,274,275],killer:[179,182],kind:[13,35,50,182,183,220,290,291],king:[219,220],kink:202,kkkk:35,kmsg_dump:[261,280,281,282],kn:[290,291],knob:[134,137,251,274,275],know:[2,12,22,42,62,63,64,65,68,106,128,131,132,162,166,171,172,173,182,183,184,185,189,193,202,203,213,220,224,226,227,228,229,230,231,246,247,248,259,266,268,272,273,274,275,279,281,282],knowledg:[138,171,172,202,203],known:[0,12,134,144,146,162,171,172,198,202,203,213,220,226,227,231,232,233,241,246,247,250,252,258,274,275,278,281,282,284,306],kobylak:[171,184,185,274],krenn:219,kthread:[217,231,233,261,280,281,282],kudo:[171,172,182,183],kumar:[184,185,226],kvm:[93,103,134,171,172,226,227,228,231,233,257,272,273,274,275,277,281,282],kworker:[217,231,233],l0:[134,229,230,286,290,291],l142:226,l1:[226,227,274],l2:[2,221,274,290,291],l2cac_flush:274,l2cerr:274,l2misc:274,l3:[2,153,221,274,290,291],l3_misc:274,l3_prd_purge_req:274,l3_prd_purge_ttyp:274,l3cerr:274,l:[1,35,202,203,212,220,229,230,272,273,277,287],la:[246,247],lab:[182,183,226,227,261,272,273,274,275,280,281,284],label:[16,19,31,34,135,171,174,212,220,221,226,231,232,246,247,256,259,274,275,277,279,281,282],lack:[21,131,226,227,261,290,291,304],lai:[146,147],lan:1,landau:[171,172],lane:[2,27,29,30,135,171,172,213,220,226,228,229,230,238,274,275,281,282,286,290,291],lane_eq:2,laptop:220,larg:[41,118,133,136,146,147,148,171,184,185,221,224,229,230,231,268,269,271,274,275,281,282,284,302,305],larger:[17,39,55,88,118,205,219,220,229,230,257,268,274,275,277,281,282,290,291],largest:[171,175,224,308],larson:[147,148],last:[14,35,41,42,140,147,149,171,173,180,184,185,186,193,201,202,203,206,219,220,221,226,228,246,247,270,271,272,273,274,275,277,280,281,282,284,290,291,305],last_comp_vers:[226,227],latch:[121,135,220,246,247,267,272,274,275],late:[0,202,203,226,228,272],latenc:[13,52,153,171,172,178,182,183,229,254,268,274,275],later:[2,7,28,30,33,35,42,43,45,68,70,131,134,151,162,180,181,203,208,213,217,220,226,227,228,229,230,231,232,233,239,240,245,246,247,258,272,273,274,275,278,281,282,286,290,291],latest:[14,162,171,172,208,212,215,220,226,227,231,237,274,275,276,281,282],latter:[171,172,180,202,203,246,247,306],launch:272,layer:[58,70,132,138,171,172,182,183,220,261,280,281,282,290,291,308],layout:[24,38,41,119,171,172,219,229,231,232,257,259,274,276,279],lbu:60,lc921:136,lc922:136,lc:[136,246,247],lcd:[12,127],lcov:36,ld:[281,284,290,291],ldbar:37,le:[130,147,148,162,171,184,185,193,202,203,215,219,220,226,227,229,246,247,274],lead:[4,147,148,149,159,161,162,164,171,172,180,181,182,183,189,193,195,196,202,203,204,207,208,213,214,220,221,225,226,227,231,232,234,245,246,247,272,273,280,281,282,290,291],leak:[147,148,156,182,183,184,221,226,231,233,258,278,281,282,284],least:[2,39,41,49,55,70,130,138,171,172,182,183,219,220,224,226,227,228,246,247,257,272,273,274,275,276,281,282,290,291,308],leav:[0,171,172,174,182,183,184,185,198,202,203,221,226,227,241,242,246,247,267,272,273,281,282,285,290,291,303,308],led:[5,34,38,42,135,145,146,147,148,168,182,183],led_mask:68,led_valu:68,leds_powernv:[162,215,226,227],left:[4,22,121,132,146,171,172,272,273,278,281,282,290,291,308],legaci:[193,308],legit:[171,172],leitao:[202,203],lemerrormask:84,lemfir:84,lemwof:84,len:[17,20,35,53,84,171,173,231,232],length:[12,33,41,49,50,53,54,67,77,118,130,171,172,202,203,221,231,232,257,274,275,281,282,286,290,291,305],leoluo:202,less:[4,21,84,118,133,141,171,172,182,183,193,202,203,217,220,224,226,227,231,232,233,246,247,261,274,275,280,281,282,283,290,291],lesser:[21,22,258,278,281,282],let:[162,171,172,177,179,182,183,202,203,215,217,220,226,228,231,232,233,240,241,246,247,248,250,257,258,261,272,273,274,275,278,280,281,282,286,290,291],letter:4,level:[2,8,14,17,21,22,31,33,38,88,118,123,128,133,144,146,171,172,173,175,182,183,195,197,202,203,219,220,223,224,226,227,228,229,230,231,232,236,238,246,247,248,257,271,272,273,274,275,277,281,282,287,290,291,304,305,308,309],lexic:4,li:[202,203,274],liauw:[219,220],lib:133,libc:[133,139,144,145,202,203,220,290,291],libcrypto:274,libfdt:[133,290,291],libff:[184,202,204,227,246,247,280],libflash:[133,146,147,148,176,182,183,184,185,192,193,202,203,204,206,217,219,220,224,226,229,230,231,232,250,251,252,254,258,261,272,273,274,275,276,277,278,280,281,282,283,286,290,291],libgcc:153,libpor:[133,231,232],librari:[22,23,38,133,171,172,202,203,246,247,272,273,274],libstb:[23,38,133,171,172,173,182,183,202,203,204,219,225,265,272,273,294],libtool:192,libvirt:[286,290,291],libxz:133,licens:[20,38,138,297],lid:[36,47,133,135,146,182,183,202,203,220,226,227,229,230,246,247,250,254,274,275,276,280,281,282,290,291],life:[139,141,261,274,275,280,281,284],lifecycl:[8,38],lifetim:[171,172],lift:[226,227,228],light:306,lightpath:10,like:[1,8,10,13,22,26,29,36,39,42,43,44,50,51,58,70,76,90,93,103,106,117,125,131,133,134,135,139,141,146,147,148,162,171,172,174,178,182,183,184,185,189,193,194,201,202,203,215,217,220,224,226,227,228,229,230,231,232,233,246,247,248,254,256,258,261,270,271,272,273,274,275,276,277,278,280,281,282,283,284,290,291,303,305],limit:[2,15,35,50,51,70,75,88,109,110,131,132,139,147,149,160,164,165,171,172,179,182,183,202,203,207,208,217,220,221,226,227,231,232,233,236,243,246,247,258,278,281,282,283,284,305,308],line:[12,62,76,102,127,138,140,147,148,153,161,164,172,173,174,182,184,185,187,193,195,203,227,232,265,272,273,275,280,281,282,286,290,291,308],line_len:127,linear:[171,172,226,227,281,284],linimon:229,link0:[246,247],link1:[246,247],link:[22,27,29,35,41,121,135,136,144,146,147,148,151,153,159,162,168,171,172,178,180,182,183,193,196,201,202,203,213,214,215,217,220,221,224,226,227,228,229,230,231,232,233,234,236,239,240,246,247,250,251,258,261,267,268,270,272,273,274,275,276,278,280,281,282,283,284,286,287,290,291,303],linker:[182,183,281,284],linkstat:[213,220],linkstatu:84,linsym:[225,226,227],linux:[2,4,5,7,8,9,10,15,19,20,21,22,23,27,31,32,34,35,36,40,41,42,43,45,50,71,78,81,106,108,130,132,133,134,136,138,139,140,146,147,148,151,153,154,164,165,166,168,171,172,175,182,183,193,194,201,202,203,204,217,219,220,222,224,225,226,227,228,229,230,231,232,233,236,238,246,247,248,251,255,257,260,261,266,271,272,273,274,275,276,277,280,281,282,284,290,291,308],lippert:[171,229,231],lirq:308,list:[2,8,10,13,14,21,22,24,35,37,38,42,47,50,67,76,77,107,118,130,131,132,138,139,140,144,146,159,165,168,171,172,173,175,178,182,183,191,192,202,203,220,221,224,226,227,229,230,231,232,233,246,247,258,270,274,275,277,278,281,283,290,291,303,304,308],list_check:[272,273],list_check_nod:[272,273],list_del:[277,287],list_head:303,list_nod:35,list_pop:277,list_top:[171,172,277],listen:[250,272,273],listinfo:138,lite:[231,232,266,272,273],liter:81,littl:[132,161,171,172,193,229,230,246,247,248,256,272,274,275,277,281,282,286,290,291,297],little_endian:297,live:[133,231,232,297],ll:[140,171,172,175,220,226,228,231,236,246,247,250,254,272,273,274,275,280,281,282,290,291],llll:35,llx:126,lnksta:220,lo:35,load:[0,7,13,17,40,70,71,93,99,132,133,144,146,157,171,172,173,174,178,182,183,187,193,202,203,204,220,226,227,229,230,231,232,234,236,241,246,247,250,254,261,271,272,273,274,275,276,280,281,282,285,286,290,291,303,305],load_and_boot_kernel:[171,174,225,246,247,261,272,273,279,280,281,282],load_capp_cod:[250,274,275],load_capp_ucod:[250,274,275],load_initramf:[246,247],load_kernel:[246,247],load_pm_complex:[171,172],load_reg_addr:[281,284],load_result:[226,227],load_wait:[171,172,241],loader:[17,132,290,291],loc:[26,34,171,172,182,183,246,247,249,271,274,275,281,284],loc_cod:[68,281,282],local:[68,162,171,172,182,215,231,232,241,251,274,275],local_alloc:[274,275],localhost:[231,232],locat:[1,5,10,22,28,34,37,40,68,88,103,133,134,135,147,148,171,172,187,193,220,221,226,227,229,230,231,232,241,246,247,249,267,272,273,274,275,280,281,282,284,290,291,303,308,309],lock:[61,113,122,133,145,146,160,161,162,171,172,178,181,182,183,193,207,208,211,212,214,220,225,226,227,229,231,232,233,238,243,245,246,247,255,256,261,265,272,273,274,275,277,278,281,282,285,290,291,308],lock_cal:[272,273,274,275],lock_depth:[171,172],lock_error:[256,277],lockabl:304,locks_held:277,lockup:[134,162,169,182,183,213,215,220,226,227,228,231,232,233,246,247,248,281,282],lof:220,log2:308,log:[2,5,32,38,42,44,50,68,83,117,123,125,126,134,144,145,146,147,148,149,153,155,156,157,158,162,166,171,172,173,175,182,183,184,186,187,191,193,195,196,198,200,201,202,203,214,215,217,220,224,226,227,228,229,230,231,232,233,236,246,247,248,249,251,254,261,263,271,272,274,275,276,280,281,282,283,286,290,291,295,296,306],log_add:[226,227],log_add_sect:35,log_append_data:35,log_append_msg:35,log_commit:35,log_data:287,log_id:35,log_po:[226,227],log_simple_error:[35,272,273],log_siz:35,logger:184,logic:[17,28,37,40,58,157,159,171,172,182,183,187,191,193,196,202,204,220,226,227,229,230,231,236,242,246,247,258,274,275,278,281,282,284,288,290,291,303,305,308],login:[226,227],lombard:[171,226,231,274],longer:[42,50,108,130,140,146,171,172,174,178,182,183,184,185,193,194,202,204,220,224,226,227,228,229,230,231,232,246,247,248,250,272,273,274,275,278,281,282,287,290,291,308],look:[4,5,6,12,29,35,68,70,76,134,136,141,162,171,172,174,182,183,184,185,202,203,204,215,217,220,224,225,226,227,229,230,231,233,246,247,248,251,256,258,270,271,272,273,274,275,277,278,281,282,290,291],lookup:[73,171,172,202,203,225,246,247,274,275,281,282],loop:[43,44,125,153,161,171,172,175,180,182,183,226,227,241,246,247,254,261,270,271,272,273,274,275,277,280,281,282],loos:[171,172,181,208,231,232,266,272,273],lop:[257,281,282],lopapr:[22,76],lose:[133,171,172,220,231,232,236,290,291,308],loss:[13,35,123,224,231,232,305,308],lost:[58,60,151,157,171,172,187,202,204,221,224,238,242,246,247,257,277,281,282,305,308],lot:[133,157,165,171,172,176,187,202,203,221,246,247,255,273,274,275,281,282,290,291,297],loudli:252,low:[13,69,70,103,123,128,133,144,146,202,203,226,227,231,232,274,275,281,284,287,290,291],lower:[2,101,162,171,172,174,214,226,228,240,243,270,272,273,274,275,281,283,308],lowercas:[272,273],lowest:[75,121,226,227,229,230,272,273,281,283,290,291],lpar:[73,182,183,281,282],lparid:[73,281,282],lparshort:[182,183],lparshortid:[178,182,183],lpc:[2,52,69,75,147,148,164,171,172,193,196,202,203,220,226,227,228,231,232,245,246,247,250,258,272,273,274,275,278,281,282,283,284,290,291,294,309],lpcr:[73,220],lpcr_pecedh:[257,277,281,282],lpes1:220,lpfc:[162,215,226,227],lpid:[28,73,229,230,246,247,281,282,286,290,291],lr:[162,171,173,178,182,183,214,215,224,226,227,231,233,246,247,254,261,274,275,280,281,282,284,290,291],lsb0:21,lseek:[290,291],lsi:[41,220,308],lspci:[150,154,164,213,220,281,284],lsprop:[171,172,174,229,230,231,232],lsu:[182,183],ltc:[145,171,172],ltssm:[134,229,230,286,290,291],luck:[270,274,275],lucki:[171,172,202,203,286,290,291,297],luckili:[202,204,246,247],lunch:[162,214,224],lxpvd:[281,282],lxvpd:[281,282],ly:[14,281,282],m32:[171,172,238,246,247],m64:[30,147,149,202,204,246,247],m:[171,178,182,183,206,246,247,274,275,290,291],mabi:[147,149],machin:[2,4,12,22,30,35,36,38,40,42,44,50,68,94,96,124,127,132,133,134,135,136,144,145,146,152,154,161,165,171,172,173,178,182,183,184,185,189,195,197,202,203,204,206,211,213,220,222,224,226,227,228,229,230,231,232,239,246,247,248,250,251,255,257,258,259,261,270,272,273,274,275,277,278,279,281,282,284,286,290,291,308],machine_kexec:[231,233],macro:[35,171,172,226,227,246,247,272,287,288,290,291],macronix:[1,147,148,171,172],made:[2,5,13,19,22,48,50,74,96,113,123,132,133,139,148,171,172,182,183,217,220,224,231,232,233,253,255,258,259,261,271,274,275,278,279,280,281,282,284],madhavan:[171,226,231,274],magic:[47,133,171,172,202,203,226,227,246,247,250,274,275,290,291,305],mahesh:[147,148,164,171,184,185,187,193,202,203,219,220,226,229,231,274],mai:[0,1,4,8,14,15,16,17,20,21,22,29,31,35,36,41,42,43,44,47,50,51,54,55,58,61,70,73,77,79,88,93,105,109,110,114,115,117,118,121,122,124,126,131,132,133,134,135,137,138,140,151,157,161,162,171,172,173,174,175,177,181,182,183,184,185,187,188,189,194,205,208,213,215,217,219,220,223,224,225,226,227,228,229,230,231,232,233,238,243,245,246,247,248,249,255,258,260,261,265,266,267,270,271,272,273,274,275,278,280,281,282,283,284,285,287,290,291,292,303,304,305,308],mail:[138,139,144],mailbox:[35,250,258,274,275,278,281,282,283],main:[28,37,119,132,133,140,141,171,173,175,181,182,203,226,228,229,230,246,247,302,303],main_cpu_entri:[133,182,224,226,227,271,272,273,274,275,280,281,282],mainli:[133,171,173,219,220,221,222,224,225,227,230,272],maintain:[1,5,15,35,54,68,129,133,138,139,140,141,157,171,172,173,174,175,182,183,187,202,203,204,205,206,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,246,247,248,267,272,273,274,275,276,281,282,283,284,290,291,308],mainten:[38,42,70,139,157,164,169,182,183,187,231,232,246,247,261,280,281,284],major:[132,147,148,182,183,201,202,204,248,257,277,281,282,305],make:[2,21,22,36,40,44,58,62,63,64,65,109,113,129,130,132,138,139,141,145,146,147,149,151,154,158,161,162,171,172,173,175,179,182,183,184,185,189,190,193,202,203,204,212,215,220,224,226,227,228,229,230,231,232,233,241,246,247,248,250,253,257,258,259,261,263,265,266,272,273,274,275,278,279,280,281,282,284,285,290,291,296,297,306,308],makefil:[145,147,149,160,171,174,187,191,194,202,203,212,220,246,248,272,274,276,286,290,291],makr:[147,149],malform:[17,229,230,258,278,281,282,303,304],malfunct:[58,154,157,187,193,220,226,228,271,274,275,281,282],malici:[0,182,183],malloc:[39,165,281,284],mamatha:[187,193],mambo:[36,144,145,146,147,148,161,171,172,173,182,183,194,219,220,221,224,225,226,227,231,232,246,247,248,272,273,281,282,284,290,291],mambo_binari:220,mambo_numa:[171,172],mambo_util:[146,220,246,247],man:[171,172],manag:[14,16,20,22,35,38,47,58,109,132,134,135,171,173,181,202,203,208,220,221,231,232,255,266,272,273,274,290,291,308],mandatori:[2,171,172,241],mangl:[57,121,220,308],mani:[2,20,22,50,52,69,94,96,114,128,139,146,147,148,165,178,182,183,184,185,199,202,203,226,228,231,232,246,247,250,273,274,275,290,291],manifest:[171,226,228,229,230,267,272],manipul:[133,171,172,193,224,240,272,273],manner:[21,226,227,246,247,303,305],manual:[115,133,171,172,182,183,220,229,230,258,272,273,274,275,276,278,281,282],manufactur:[23,26,34,128,136,141,171,172,196,202,203],map32:88,map:[1,8,19,30,36,38,41,88,89,90,97,100,105,121,133,134,135,144,146,147,149,155,171,172,182,183,184,185,193,194,198,202,203,220,222,225,226,227,229,230,238,246,247,250,272,273,274,275,281,282,284,286,290,291,298,308,309],map_pci_dev_to_slot:[182,183],map_pe_dma_window:88,map_pe_mmio_window:90,mar:[139,286],march:[155,156,157,176,177,178,183,184,185,186,190,192,193,220,258,259,263,278,279,282,295,296],margin:[134,182,183,251,274,275],mark:[81,160,171,172,181,182,183,198,202,203,208,219,220,226,227,229,230,231,233,241,246,247,248,261,266,272,273,274,275,276,280,281,282,283,284,286,290,291],mark_write_eras:[226,227],martha:[171,172],mask:[5,21,22,27,29,30,58,68,75,82,121,134,137,157,171,172,174,182,183,187,220,226,227,231,232,241,246,247,248,249,251,270,274,275,281,282,286,290,291,308],master:[0,2,58,60,133,139,140,141,153,162,171,172,214,219,223,225,226,227,229,231,232,233,236,238,245,246,247,265,272,273,290,291],mata:[229,230],match:[2,9,28,51,52,88,103,105,118,129,145,146,161,166,171,172,174,175,182,183,189,193,201,220,224,226,227,228,229,230,231,232,235,237,246,247,248,254,261,267,272,273,274,275,276,280,281,282,285,290,291,305,308],math:[22,171,173],matrix:[246,247],matt:[219,220,226],matter:[4,171,172,202,204,258,278,281,282],matur:[202,204],mavinakayanah:[147,148,171,184,185,219,220,224,226,229],max:[15,17,54,60,70,134,147,148,171,172,173,182,183,220,221,229,230,251,258,265,272,273,274,275,278,281,282,286,288,290,291],max_eq_count:[171,172],max_led_typ:68,max_lin:274,maxim:220,maximis:[41,274,275],maximum:[13,14,15,17,52,54,55,68,75,102,110,118,171,173,182,183,193,201,229,230,246,247,267,268,272,274,275,281,282,303],maxmimum:308,maxpayloads:[261,280,285,290,291],mayb:[81,202,204,248],mbedtls_sha512:[171,172],mbox:[35,47,68,157,162,163,171,172,187,193,215,216,217,220,224,231,232,233,250,272,273,274,275,278,281,282],mbox_default_poll_m:[171,172],mbox_protocol:[226,227],mboxbridg:[226,227],mboxd:[258,278,281,282],mbt:[246,247,267,272],mc:[2,24,26,171,172,209],mca:[26,171,172],mca_id:[26,171,172],mcbist:[26,171,172,257,274,275],mcbist_id:[26,171,172],mcd:[171,172,226,227,238],mce:[22,171,172,173,182,183,246,247,271,274,275,281,282],mclemor:[171,193],mconfig:[290,291],mcs3:24,mcs_id:[26,171,172],md:[139,220,226,227],mddt:[40,71],mdelai:[217,231,233],mdrt:40,mdst:[40,71,194],mdt:[171,172,238],me:[138,162,171,173,178,182,183,215,224,226,227,231,232,246,247,274,275,281,282],mean:[2,19,22,50,58,62,70,86,106,121,132,139,140,141,146,147,149,154,171,172,178,182,183,217,219,220,224,226,227,229,230,231,232,233,241,246,247,250,254,260,271,272,273,274,275,276,277,281,282,286,290,291,297,303,308],meaning:[246,247,274,275,281],meant:[125,159,189,196,246,247,274,275,308],meantim:[171,172,202,204,220],measur:[13,171,172,173,202,203,204,205,274,276,306],mechan:[2,41,51,146,171,172,220,224,226,227,229,230,231,234,281,282,303,305],media:[171,172],medium:130,mellanox:[102,147,148,182,183,193,220,226,227,258,268,274,275,278,281,282,286,290,291],mem:[19,109,133,182,183,202,203,220,226,229],mem_addr:89,mem_high_addr:134,mem_low_addr:134,mem_map:39,mem_region:[182,183,202,203,220,224,226,228,274,275],mem_region_init:[226,227],mem_siz:[171,172],member:[70,194,287,290,291],memblock_reserv:[181,208,266,272,273],memboot:146,memcon:5,memcpi:[70,76,246,247,280],memcpy_mcsaf:[246,247],memori:[1,2,3,5,7,17,21,22,23,24,25,28,32,34,36,38,40,49,50,51,60,61,67,69,70,71,74,75,76,77,85,86,88,89,90,93,103,104,107,115,118,119,127,131,132,134,146,147,148,156,165,168,171,172,173,174,175,180,181,182,183,184,185,193,194,199,200,202,203,208,213,220,221,224,226,227,228,229,230,231,232,233,234,238,246,247,248,261,266,268,270,271,272,273,274,275,280,281,282,283,284,286,290,291,292,295,298,303,306,308],memory_pars:[171,172],memreserv:[2,226,227],memset:[147,148,182,202,203,270,274,275],memwin32:103,memzero:182,mendoza:[147,148,161,171,184,185,193,202,203,229,231,274],meng:[202,203,274],mention:[68,123,132,206,220,281,282],merg:[139,140,206,220,224,254,274,275,276,290,291,308],mess:261,messag:[1,35,38,45,49,52,54,55,56,58,67,70,97,98,104,109,110,111,114,119,120,127,131,132,134,135,140,141,144,146,147,148,153,154,155,160,162,163,165,166,167,171,172,173,178,182,183,184,185,189,195,199,201,202,203,204,206,208,209,213,214,215,216,217,220,224,226,227,228,231,232,233,236,243,246,247,249,250,254,257,258,261,267,271,272,273,274,275,277,278,281,282,283,285,286,290,291,297],message_data:[56,134],messi:[231,232,246,247],met:[261,280,281,282,288],meta:[229,230],metadata:[7,21,22,40,71],metal:[0,220,281,282,284,286,290,291],method:[1,22,48,51,106,171,172,202,203,226,227,231,232,246,247,274,276,305],metric:[145,146],mezz:220,mfcr:225,mfg:[23,305],mflr:[281,284],mfrr:65,mfspr:[246,247],mftb:[220,274,275],mgmt:[171,174,281,282],mgt:[5,110,137,171,172,174,182,183],mi:[39,130,281,284],mib:24,michael:[147,148,161,171,184,185,187,193,202,203,204,219,220,224,226,229,231,274,275],michel:171,micro:146,microcod:[8,37,61,133,146,171,172,226,227,231,232,233,246,248],microcontrol:37,micron:[184,185],microsecond:229,mid:[185,186],middl:[246,247,258,278,281,282],migh:[246,247],might:[2,51,121,135,164,171,172,182,183,188,189,202,203,226,227,228,238,281,284,308],migrat:[281,282],mihawk:[136,287,292,294,298,299],mikei:[274,275,281,282],mileston:[219,220,221,222,224,225,226,227,228],miller:[202,203,219,220],milliecond:108,million:[290,291],millisecond:[52,94,96,117,229,230,290,291],milton:[202,203],min:[15,197,202,203,229,230,258,278,281,282,288],mind:219,minda:171,mini:[133,231,232],minim:[88,132,266,272,273,303],minimium:110,minimm:[246,247],minimum:[13,15,19,39,41,76,110,118,258,272,273,278,281,282,288,308],minor:[21,147,148,150,151,156,158,159,160,161,162,164,166,167,168,169,170,195,196,199,200,248,274,275,282,297],minski:136,minu:[22,88,89,90,97,100,105],minus1:[97,98],minut:[0,117,229,230,231,232,261,280,281,282],mirror:[14,223,258,278,281,282],misalign:[229,230,246,247],misbehav:[290,291],misc:[17,35,146,161,171,172,202,203,267,268,272,274,275,281,284,290,291,303],miscacul:[176,182,183],miscalcul:[176,182,183],miscellan:[2,35,226],misguid:[261,280,285,290,291],mislead:[229,230,250,274,275,281,282],mismatch:[171,172,175,213,220,243,267,272,273],mispredict:[281,284],misrout:[231,232],miss:[21,46,84,146,147,148,153,171,172,173,181,182,183,202,203,220,221,226,227,231,232,234,246,247,257,272,273,274,275,276,277,281,282,284,290,291],mistak:[229,230,246,248],mistyp:[274,275],mit:139,mitig:[162,171,172,213,226,228,239],mix:[171,172,272,273,274,275,281,282,283],mixtur:29,mktime:229,ml:[39,130],mmap:[24,61,246,247,272,290,291],mmape:[290,291],mme:56,mmio0:[274,275],mmio:[30,38,84,88,90,93,103,107,150,171,172,174,179,182,224,226,227,229,230,231,232,236,238,243,246,247,267,271,272,274,275,281,282,286,290,291,297,308,309],mmio_addr:309,mmio_invalid:[246,247],mmio_invalidate_wait:[246,247],mmio_window:134,mmioerrorlog0:84,mmioerrorlog1:84,mmioerrorstatu:84,mmiofirsterrorstatu:84,mmu:[2,22,72,73,202,203,220,221,224,226,227,281,284],mnopqrstuvwxyz:35,mo:[281,284],mod:[217,231,232],mod_secure_verify_compon:[171,174],mode:[10,13,21,22,23,38,41,73,99,102,115,132,147,148,149,150,161,171,172,173,174,182,183,193,194,196,202,203,204,205,220,222,224,226,227,228,229,230,231,232,233,234,238,246,247,265,267,268,270,272,273,274,275,276,281,282,284,286,290,291,298,303,304,306,308],model:[2,35,62,63,64,65,106,107,182,183,193,220,222,226,227,272,273,274,278,281,282,290,291],modern:[138,161,205,229,230],modif:[16,138,141],modifi:[134,138,139,140,171,172,182,183,226,227,229,251,253,274,275,281,282,284,308],modul:[2,25,26,38,129,132,139,151,162,171,172,202,203,215,226,227,246,247,267,272,273,281,282,306],moduleid:[171,174],moment:[102,179,182,220,226,227,228,229,246,247,272,273,274,275,281,282,290,291],mondai:[160,181,193,203,208,212,221,227,233,236,245,252,255,266,275,286,291,294],monitor:[2,37,281,284,290,291],month:[117,141],more:[2,16,17,19,21,22,35,49,50,62,68,70,73,74,84,88,130,131,132,133,135,139,144,146,154,158,160,161,164,171,172,173,174,175,178,182,183,190,193,202,203,205,207,213,220,224,226,227,228,229,230,231,232,241,246,247,248,250,253,254,256,258,274,275,276,277,278,281,282,283,284,290,291,292,297,303,305,306,308],moreov:[266,272,273],most:[14,17,29,60,140,141,147,148,161,162,164,172,182,183,184,185,187,193,202,203,204,215,227,230,258,272,273,278,281,282,283,284,286,290,291,303,308],mostli:[2,29,202,204,224,226,227,231,281,282,284,290,291,308],motherboard:0,motiv:[5,220],mount:220,move:[35,37,70,71,163,171,172,173,182,183,203,204,216,217,219,220,221,222,224,225,226,227,228,231,232,238,241,246,247,248,252,255,272,274,275,281,282,284,286,290,291,308],mover:34,mowgli:302,mp:[164,220,229,230,261,280,285,290,291],mpipl:[5,38,42,44,182,226,228,246,247,292,293,295,299,300],mpipl_op:71,mple:35,mprintf:220,mrl:[213,220],mrw:[171,172,246,247],ms:[34,96,171,174,246,248,261,280,281,282],msarea:[281,282,298],msg:[5,55,67,70,111,171,172,226,227,229,230,231,232,258,261,278,280,281,282,286,287,290,291],msg_len:67,msg_type:70,msglog:[133,141,146,162,171,172,182,183,214,224],msgq:[67,163,216,226,227],msi:[30,38,56,97,98,105,121,153,213,220,226,227,270,274,275],msi_address:[56,134],msi_data:56,msi_rang:[56,134],msr:[73,122,162,171,173,178,182,183,215,226,227,231,232,233,246,247,261,271,274,275,280,281,282],msr_sf:[226,227],mt27700:[258,278,281,282],mt:35,mtd:[171,172,184,185,202,204,206,212,220,224,229,230,231,232,281,284],mtd_no_eras:[231,232],mtlr:[281,284],mtspr:[246,247],much:[22,71,95,117,160,165,171,172,174,178,180,182,183,195,205,219,220,224,229,230,246,247,272,273,274,275,281,282,286,290,291,308],mukesh:[193,202,203,204,231],mult:88,multi:[0,58,182,183,184,186,220,222,224,246,247,302],multicast:[231,232],multicor:193,multipl:[2,4,35,49,52,56,61,73,88,89,117,146,147,171,172,175,182,183,202,203,217,220,224,226,227,229,230,231,232,233,246,247,257,258,268,270,274,275,277,278,281,282,290,291],multiplex:37,multipli:21,multithread:[184,186],munmap:[182,183],munsi:[161,184,185,193],murano:[136,226,228],murthi:[147,148],musl:194,must:[2,4,5,9,13,17,21,22,41,49,51,52,55,56,58,59,61,62,63,64,65,70,75,88,89,100,101,103,105,110,113,115,117,118,123,124,126,131,132,134,140,141,157,171,172,173,182,183,187,220,226,228,229,230,231,232,243,246,248,254,274,276,281,290,291,303,304,305,306,308],mustard:141,mutipl:[41,226,227],mutual:303,mux:[171,172,237,246,247],mve:[56,97,98,105,134],mve_numb:[56,97,98,134],mx66l1g45g:[202,203],mxxxl51235f:[1,171,172],my:[138,140,220,222,281,283,284],mydisk:[246,247],myneni:229,mynetwork:[231,232],mysim:[36,246,247],mysteri:[171,172,239,240,285,290,291],n0:[224,274],n110:84,n120:84,n25q256ax:[184,185],n25qx256ax:[184,185],n:[4,9,13,35,42,44,52,88,89,126,136,145,147,148,171,172,184,185,202,203,219,220,224,226,227,229,231,253,274,275,277,281,282,287,290,291,308,309],nack:[60,270,274,275],nageswara:[202,203,204],nak:[270,274,275,281,282],name:[1,2,8,13,15,16,17,18,19,20,21,22,24,26,34,42,49,69,118,131,132,133,134,136,138,141,154,161,164,171,172,175,178,182,183,187,204,220,222,224,226,227,229,230,246,247,250,259,272,273,274,275,279,281,282,283,284,290,291,302,309],namli:[246,247],nap:[13,202,203,220,226,227],napl:[27,41,136,147,148,184,185,186,193,258,278,281,282],narrow:[171,175,226,228],nasti:[274,275],nathan:146,nativ:[246,248,281,282,308],natur:[55,110,178,182,183,246,247,286,290,291,304,308],nb:136,nbw:[182,183],nc00:84,nc18:84,nc40:84,nc80:84,nc88:84,ncc0:84,ncc8:84,ncu:[171,172,243,246,248],ncu_darn_bar:[171,172],ncu_spec_bar:[171,172,246,248],nd00:84,nd08:84,nd1:[271,274,275,281,282],nd40:84,nd48:84,nd80:84,nd88:84,ndc0:84,ndc8:84,ndev:[267,272],ndl:[268,274,275],ne00:84,ne08:84,ne40:84,ne48:84,neagtiv:[226,227],nearli:[171,172],neat:[155,184,185],neaten:[226,228],necessari:[35,41,171,172,174,182,183,221,241,246,248,258,261,272,278,280,281,282,290,291,303,308],necessarili:[229,230,252,274],necessit:[182,183],need:[2,4,5,7,13,20,35,36,41,44,48,51,58,68,69,77,102,104,109,115,118,120,121,124,127,128,129,131,132,133,134,135,138,140,141,147,148,149,151,154,157,171,172,173,174,175,176,178,180,182,183,187,189,193,201,202,203,204,219,220,221,222,224,226,227,229,230,231,232,238,241,246,247,248,255,256,257,265,268,270,272,273,274,275,276,281,282,284,285,286,287,290,291,293,297,303,304,307,308],needless:[184,185,258,278,281,282],needlessli:[1,220],neelesh:[147,148,161,164,184,185],neg:[22,131,171,172,298,308],negoti:[171,172,182,183,229,230],neither:[50,76,121,139,171,172],nest:[24,25,38,61,72,73,171,172,201,202,203,220,221,224,226,227,231,232,233,246,247],nest_pmu:[231,232],nestfir:[171,172],net:[35,290,291],net_mac:[290,291],netfn:[67,184,186,231,232,261,274,280],network:[171,172,220],netxtrem:164,neul:[147,148,161,171,184,185,187,193,202,203,204,219,220,224,226,229,231,274,275],never:[41,42,43,44,81,113,131,139,151,157,171,172,173,187,224,226,227,231,232,235,237,246,247,248,249,259,261,274,275,279,280,281,282,283,284,286,287,290,291,308],new_properti:[171,174,224],newcpu:22,newel:136,newer:[44,68,171,172,182,183,189,224,226,227,229,274,275,281,282,290,291,308],newinsn:21,newli:[58,308],newlin:[171,172,226,227,290],next:[2,20,22,35,41,50,55,118,139,153,157,171,172,187,217,220,226,227,228,231,232,233,236,272,273,282,283,284,290,297,305],next_error:[281,283],next_in:[226,227],next_out:[162,215,226,227],nfir:[84,182,226,228,274,275],nfir_cach:[274,275],nfirmask:84,nfirwof:84,nguyen:[184,185],nia:[261,280,281,282],nibbl:[171,172],nice:[160,178,182,183,220,224,226,227,290,291],nich:[246,248,281,282],nichola:[171,202,203,219,220,224,226,229,231,274],nick:297,nicol:[136,290,291],nimbu:[26,134,136,226,227,231,232,269,272,273,274,275,290,291],nip:[162,171,173,178,182,183,215,226,227,246,247,254,274,275],nmi:[162,215,220,226,227,246,247,281,282],nmmu:[73,182,183,267,272],nobodi:[281,282],noboot:[202,203],nodal:[268,274,275],node0:[26,171,172,182,183,249,281,284],node:[3,6,8,9,10,14,15,16,18,20,22,23,25,26,27,28,29,32,33,34,35,38,40,52,53,56,67,69,70,71,76,87,88,89,90,93,97,98,99,100,101,103,104,105,114,130,132,135,154,165,171,172,174,175,180,182,183,193,194,202,203,204,220,221,224,226,227,228,229,230,231,232,246,247,250,257,267,268,272,273,274,275,281,282,283,284,290,291,302,303,305,308,309],noisi:[193,271],noitifi:[229,230],nolibc:36,nomcount:[274,275],nomin:[226,227],non:[2,4,56,61,76,87,100,131,146,147,148,156,159,171,172,174,182,183,184,185,193,196,202,203,205,213,220,224,226,227,231,232,238,241,246,247,248,260,261,267,271,272,273,274,275,280,281,282,284,285,290,291,300,303,306],none:[17,108,122,131,171,172,182,183,261,272,273,281,284,290,291,303,308],nonfatalerr:164,nop:[41,97,134,226,227],nor:[50,121,184,185,217,231,232,246,247,248,290,291,308],normal:[0,28,43,44,52,113,122,128,129,134,135,147,149,150,162,163,166,171,172,202,204,213,215,216,217,220,224,226,227,228,229,230,231,232,233,241,246,247,251,258,261,274,275,278,280,281,282,284,286,290,291,308],normand:171,nornmal:28,north:236,notabal:[231,232],notabl:[50,188,202,229,230,231,232],note:[1,2,4,6,15,42,47,49,51,54,68,70,73,76,95,100,101,136,146,171,172,182,183,184,185,192,202,203,204,205,208,220,226,227,229,230,231,232,246,247,248,274,275,281,282,287,290,291,305,308],noth:[49,171,172,182,183,189,202,203,204,220,226,227,228,231,232,246,247,248,272,273,286,287,290,291],notic:[1,193,202,204,224,226,228,258,278,281,282],notif:[0,35,50,51,68,70,125,159,171,172,191,193,208,226,227,231,274,275,308],notifi:[28,35,70,159,162,171,172,191,201,202,203,214,224,229,230,237,281,283,308],novemb:[143,151,152,153,202,203,204,205,206,207,219,220,221,222,237,238,239,240,251,252,253,254,275,276,302],now:[2,4,24,36,39,42,51,70,110,117,130,132,133,141,144,146,147,149,161,162,164,170,171,172,173,174,180,182,183,184,185,186,187,188,189,190,191,202,203,204,205,206,215,220,224,226,227,228,229,230,231,232,238,246,247,254,255,261,269,271,272,273,274,275,276,280,281,282,283,284,286,287,290,291,297,304,305,308],npage:106,npcq:[27,29],npct601:[32,171,172],npct650:[32,171,172],npu0:272,npu1:272,npu2:[29,38,42,171,172,173,174,176,178,180,221,224,229,230,231,232,234,237,238,239,240,249,255,262,264,268,271,274,275,276,281,282,283,284,286,294,295],npu2_:[226,227],npu2_dev_bind_pci_dev:[246,247],npu2_dev_fence_brick:[180,246,247,267,272],npu2_map_pe_dma_window:[255,274],npu2_misc_fence_st:[267,272],npu2_ntl_misc_cfg1:[267,272],npu2_ntl_misc_cfg2_brick_en:[274,275],npu2_otl_config1_tx_temp2_en:[271,274,275],npu2_tce_kil:[255,271,274,275],npu2_xts_bdf_map_s:[281,282],npu2_xts_bdf_map_valid:[246,247],npu2dev:[171,172,246,247],npu3:292,npu6:[171,172,246,247],npu:[27,41,58,75,171,172,178,180,182,183,187,193,195,197,201,224,226,227,231,232,246,247,249,255,267,268,271,272,273,274,275,281,282,283,284,286,290,291],npu_err_inject:[202,203],npu_num_of_p:201,npu_sm_config0:[246,247],nr:[21,22],ns16550:2,ns:13,ntl:[41,171,172,239,267,268,272,274,275],ntupl:220,num:[5,20,30,97,98,100,105,146],num_lin:127,num_lsi:105,num_seg:103,numa:[27,171,172,226,227,228],number:[1,2,4,13,18,19,21,22,26,27,28,29,33,34,35,41,46,47,49,50,56,57,68,69,70,74,75,88,89,90,93,99,100,101,102,103,113,114,120,121,122,123,129,134,135,139,141,143,147,148,149,150,158,160,162,166,171,172,173,178,180,182,183,184,185,189,190,191,193,195,198,202,203,207,208,212,213,214,215,217,220,224,226,227,229,230,231,232,233,234,236,238,241,243,246,247,248,253,267,271,272,273,274,275,281,282,283,286,290,291,297,305,306,308,309],numinstruct:[281,282],nuvoton:[32,171,172,202,203,207,211,220],nv:[41,231,303,304],nv_zcal_overrid:[226,227],nvdimm:[281,282],nvidia:[171,246,247,272,273,274,275],nvidia_uvm:[246,247],nvlink1:221,nvlink2:[73,178,220,226,227,229,237,238,239,240,268,284,290,291],nvlink:[25,29,37,38,136,176,178,182,183,184,185,193,195,198,201,206,226,227,229,231,232,246,247,261,272,273,274,275,280,281,282,283,284,286,290,291],nvme:[213,220,221,274,275],nvram:[1,5,20,38,42,44,77,134,137,147,148,171,172,182,183,204,205,210,217,220,221,224,226,227,228,229,230,231,232,246,247,248,251,261,274,275,280,281,282,284,286,290,291,297,301,307],nvram_imag:76,nvram_init:[171,172,173,274,275],nvram_pstore_writ:[261,280,281,282],nvram_reformat:[182,183],nvram_valid:[182,183],nvram_write_os_partit:[261,280,281,282],nvt:[222,231,232,281,282,308],nx842:[267,272,273],nx:[2,25,38,58,70,129,146,170,171,172,174,224,226,228,229,230,241,272,273,274,275,281,282,290,291,307],nx_addr:[28,229,230],nx_coproc_init:[267,272,273],o2:[290,291],o:[35,36,171,182,183,184,185,187,193,202,203,219,220,224,226,229,231,246,247,250,274,275,281,284],obei:[205,281],object:[182,183,274],oblivi:[171,173],obnoxi:[226,227],obscur:[162,214,226,227,281,282],observ:[166,171,172,182,183,195,202,203,220,231,232,235,246,247,257,261,265,272,273,277,280,281,282,284,286,290,291],obsolet:50,obtain:[35,70,121,143,272,308],obu:[171,172,226,227,229,281,282],obus_index:[281,282],obviou:[153,226,227,254,274,275],obvious:[140,180,226,227,246,247,272,273],ocapi:[272,273],ocapi_mem:298,occ:[2,4,13,15,18,37,44,70,119,132,141,144,146,147,148,165,171,172,173,174,175,178,182,183,184,185,186,189,193,201,202,203,208,220,221,224,229,230,231,232,235,238,242,243,246,247,248,250,255,258,261,267,272,273,274,275,278,279,280,281,282,290,291,298],occ_error:70,occ_get_gpu_pres:[272,274,275],occ_gpe1:[231,232],occ_load:[70,226,227],occ_max_throttle_statu:70,occ_misc:224,occ_p9_interrupt:[231,233],occ_pstates_init:[171,174,272,273,279,281,282],occ_reset:[70,171,172,201,202,203,226,227,229,230],occ_sensor_id_to_chip:[229,230],occ_sensor_loc_cor:[272,273],occ_sensors_init:[272,273],occ_throttl:70,occache_di:229,occasion:[171,172,241,272,273,290,291],occupi:133,occur:[0,4,17,70,102,114,121,134,157,171,172,182,183,187,219,220,229,230,241,242,246,247,249,251,261,265,271,272,273,274,275,280,281,282,284,285,286,287,290,291,304],occurr:[182,183,308],oct:[42,139,210,288,301],octob:[151,166,167,168,169,170,171,172,173,174,175,201,203,204,217,231,232,233,234,235,236,250,271,293],ocxl:[182,183],odd:[197,202,204,224,246,247,274,275,286,290,291],oddli:250,odl0:[246,247],odl1:[246,247],odl:[246,247,281,282],oem:[0,206,226,249,250,272,273,285,287,290,291],oemhandl:226,of_pmem:[246,247],off:[0,13,38,42,43,73,96,104,109,113,135,138,139,140,146,147,149,151,171,172,173,182,183,201,202,203,204,216,217,226,227,229,230,231,233,240,261,268,272,274,275,278,280,281,282,284,297],off_dt_str:[226,227],off_dt_struct:[226,227],off_mem_rsvmap:[226,227],offb:[155,184,185],offer:[22,286,290,291],offet:308,offic:302,offici:146,offlin:[77,104,128,171,172,181,198,202,203,208,231,232,266,272,273],offload:37,offset:[3,9,24,27,29,52,76,78,88,108,129,135,171,172,213,219,220,221,222,224,225,226,227,228,267,270,272,273,274,275,308],often:[5,139,165,168,246,247,281,284,290,291],ointer:287,ojha:[193,202,203,204,231],ok:[2,226,227,231,232],okai:[2,5,17,26,30,32,132,140,171,172,248,250,272,273,274,275,281,282,290,291],ol:[171,172,246,247],old:[2,4,5,42,56,58,88,89,90,93,97,98,100,101,103,105,134,147,149,162,171,172,175,215,220,224,226,227,231,232,238,241,246,247,248,250,261,272,273,274,275,280,281,284,290,291,294,305,308],older:[22,43,68,70,140,155,171,172,175,208,224,229,230,231,272,273,274,275,281,282,307],oliv:[171,184,185,187,193,202,203,219,220,224,226,229,231,274],oll:[246,247],olog:220,ommit:2,on1:35,onc:[0,27,35,36,37,39,41,50,81,117,134,135,136,139,147,149,162,168,171,172,215,217,220,224,226,227,228,229,230,231,233,238,246,247,248,250,258,272,273,274,275,278,281,282,283,285,290,291,303,304,306,308],one:[0,2,4,10,16,21,22,23,26,33,35,41,49,50,56,59,68,69,70,75,86,95,100,102,104,106,108,113,117,121,124,127,132,133,135,136,139,140,145,146,147,149,152,156,163,165,168,171,172,173,176,177,179,180,182,183,188,189,193,195,200,201,202,203,204,206,217,218,220,224,226,227,228,229,230,231,232,233,238,239,240,241,242,244,246,247,253,258,260,265,266,268,272,273,274,275,278,281,282,284,286,290,291,303,305,306,308,309],ones:[2,68,171,172,184,186,196,202,203,220,226,227,231,232,250,258,259,267,272,273,274,278,279],ongo:[171,172,246,247,274,275],onli:[1,2,5,8,17,19,20,22,23,24,34,35,41,42,43,44,46,47,49,50,52,54,55,58,60,61,68,70,73,75,77,81,83,88,91,100,101,103,105,115,117,118,122,127,128,130,131,132,133,134,135,136,139,140,141,146,147,148,149,154,161,162,165,168,171,172,173,174,175,182,183,188,193,195,196,199,200,202,203,204,205,214,215,217,220,221,224,226,227,228,229,230,231,232,233,235,238,241,246,247,248,250,251,252,255,257,258,259,260,266,267,272,273,274,275,277,278,279,281,282,283,284,286,287,290,291,297,299,302,303,305,306,308],onlin:104,ontim:[258,278],onto:[133,182,183,220,226,228],onward:[70,106,193,272,273,309],ooc:[231,232],op9_v1:[171,174],op:[18,47,61,88,90,97,98,101,103,105,116,139,158,162,171,172,173,174,175,182,183,187,191,202,203,204,205,206,215,219,220,221,222,223,224,225,226,227,228,229,230,232,233,234,235,236,246,247,248,252,259,272,273,274,275,276,278,279,280,281,282,283,284,290,291,303,306],op_displai:[160,281,284],opal:[7,8,10,11,12,15,16,20,21,22,24,25,27,30,31,40,43,44,45,46,47,48,51,54,55,56,58,59,60,61,62,63,64,65,66,67,68,70,72,74,75,77,79,81,82,84,87,88,89,90,93,95,97,98,99,100,101,102,103,105,106,108,111,112,113,115,120,121,122,123,124,125,126,127,128,129,133,134,135,136,137,138,139,141,143,144,145,146,147,148,149,151,154,157,158,159,160,162,166,169,170,173,174,175,178,181,182,183,185,187,191,195,196,198,201,202,203,204,205,206,207,208,213,214,215,217,220,221,222,224,228,231,232,233,236,242,245,248,250,251,254,255,257,258,261,266,267,271,272,273,274,275,276,277,278,280,281,282,283,284,285,286,290,291,292,294,295,297,303],opal_:[146,226,227],opal_abnormal_power_off:35,opal_add_pe_to_domain:101,opal_addr_valid:[202,203],opal_assert_reset:96,opal_async_complet:[52,60,77,104,109,110,119,120,127,220],opal_async_exampl:131,opal_async_get_token:131,opal_async_wait:131,opal_attn:35,opal_busi:[43,44,45,49,50,52,75,76,102,109,110,113,117,119,125,128,162,178,182,183,213,214,217,225,231,233,281,282,308],opal_busy_ev:[43,44,49,50,76,108,117,120,125,162,215,217,226,227,231,233],opal_cal:[46,290,291],opal_capacity_upgrade_ev:35,opal_cec_hardwar:35,opal_cec_power_down:[38,42,217,231,233],opal_cec_reboot2:[38,40,42,58,147,149,202,204,229,230],opal_cec_reboot:[38,40,42,147,149],opal_check_async_complet:[38,42],opal_check_complet:45,opal_check_token:[38,42,44,50,51,120,131,132,290,291],opal_chip:35,opal_clos:[49,83,160],opal_concurrent_maintenance_ev:35,opal_config_cpu_idle_st:[38,42],opal_console_flush:[42,154,246,247],opal_console_read:42,opal_console_writ:[42,226,227],opal_console_write_buffer_spac:42,opal_constrain:[74,122],opal_deassert_reset:96,opal_disable_mv:98,opal_dump_ack:42,opal_dump_info2:42,opal_dump_info:42,opal_dump_init:42,opal_dump_read:42,opal_dump_region_host_end:50,opal_dump_region_host_start:50,opal_dump_region_log_buf:50,opal_dump_resend:42,opal_dump_resend_notif:50,opal_dynamic_reconfig_ev:35,opal_eeh_action_clear_freeze_al:[79,80],opal_eeh_action_clear_freeze_dma:[79,80],opal_eeh_action_clear_freeze_mmio:[79,80],opal_eeh_action_set_freeze_al:[79,80],opal_eeh_action_set_freeze_dma:[79,80],opal_eeh_action_set_freeze_mmio:[79,80],opal_eeh_ioc_error:[81,83,92],opal_eeh_no_error:[81,92],opal_eeh_pe_dma_error:[81,92],opal_eeh_pe_error:[81,92],opal_eeh_pe_mmio_error:[81,92],opal_eeh_phb_error:[81,92],opal_eeh_sev_inf:[83,92],opal_eeh_sev_ioc_dead:92,opal_eeh_sev_no_error:92,opal_eeh_sev_pe_:92,opal_eeh_sev_phb_dead:92,opal_eeh_sev_phb_fenc:92,opal_eeh_stopped_dma_freez:81,opal_eeh_stopped_mmio_dma_freez:81,opal_eeh_stopped_mmio_freez:81,opal_eeh_stopped_not_frozen:81,opal_eeh_stopped_perm_unavail:81,opal_eeh_stopped_reset:81,opal_eeh_stopped_temp_unavail:81,opal_elog:[38,42],opal_elog_ack:42,opal_elog_cr:35,opal_elog_read:[42,287],opal_elog_resend:42,opal_elog_s:42,opal_elog_writ:51,opal_empti:[17,53,67,118,303],opal_enable_mv:98,opal_entri:[132,246,247,261,280,281,282],opal_epow_non:54,opal_epow_over_ambient_temp:54,opal_epow_over_internal_temp:54,opal_epow_up:54,opal_err_info:35,opal_err_inject_func_ioa_dma_rd_addr:82,opal_err_inject_func_ioa_dma_rd_data:82,opal_err_inject_func_ioa_dma_rd_mast:82,opal_err_inject_func_ioa_dma_rd_target:82,opal_err_inject_func_ioa_dma_wr_addr:82,opal_err_inject_func_ioa_dma_wr_data:82,opal_err_inject_func_ioa_dma_wr_mast:82,opal_err_inject_func_ioa_dma_wr_target:82,opal_err_inject_func_ioa_ld_cfg_addr:82,opal_err_inject_func_ioa_ld_cfg_data:82,opal_err_inject_func_ioa_ld_io_addr:82,opal_err_inject_func_ioa_ld_io_data:82,opal_err_inject_func_ioa_ld_mem_addr:82,opal_err_inject_func_ioa_ld_mem_data:82,opal_err_inject_func_ioa_st_cfg_addr:82,opal_err_inject_func_ioa_st_cfg_data:82,opal_err_inject_func_ioa_st_io_addr:82,opal_err_inject_func_ioa_st_io_data:82,opal_err_inject_func_ioa_st_mem_addr:82,opal_err_inject_func_ioa_st_mem_data:82,opal_err_inject_type_ioa_bus_err64:82,opal_err_inject_type_ioa_bus_err:82,opal_error_event_typ:35,opal_error_pan:35,opal_errorlog:35,opal_event_console_input:[193,202,203],opal_event_dump_avail:50,opal_event_msg_pend:70,opal_event_pci_error:[147,148],opal_event_rtc:117,opal_except:42,opal_external_env:35,opal_flash_:[9,52,146,205],opal_flash_eras:42,opal_flash_manag:42,opal_flash_read:42,opal_flash_upd:42,opal_flash_valid:42,opal_flash_writ:42,opal_flash_xxx:9,opal_flush_consol:[290,291],opal_get:220,opal_get_device_tre:[38,42,135],opal_get_dpo_statu:[42,70],opal_get_epow_statu:[38,42,70],opal_get_messag:70,opal_get_msg:[38,42,70,165,290,291],opal_get_msi_32:[38,42],opal_get_msi_64:[38,42,134],opal_get_param:[20,42],opal_get_power_shift_ratio:42,opal_get_powercap:[15,42],opal_get_x:[38,42,134,308],opal_get_xive_sourc:[290,291],opal_handle_hmi2:[38,42,182,183,246,247,281,282],opal_handle_hmi:[38,42],opal_handle_interrupt:[38,42,133,231,233],opal_hardwar:[17,52,61,67,71,76,77,78,79,80,81,84,91,95,102,109,110,116,117,118,119,120,122,128,160,162,215,226,227,303],opal_hmi_flags_dec_lost:58,opal_hmi_flags_hdec_lost:58,opal_hmi_flags_new_ev:58,opal_hmi_flags_tb_resync:58,opal_hmi_flags_tod_tb_fail:58,opal_i2c_addr_10:60,opal_i2c_arbt_lost:60,opal_i2c_bkend_access:60,opal_i2c_bkend_overrun:60,opal_i2c_invalid:60,opal_i2c_invalid_cmd:131,opal_i2c_lbus_par:60,opal_i2c_nack_rcvd:60,opal_i2c_raw_read:60,opal_i2c_raw_writ:60,opal_i2c_request:[38,42,143],opal_i2c_sm_read:60,opal_i2c_sm_writ:60,opal_i2c_stop_err:60,opal_i2c_timeout:60,opal_id:106,opal_imc_counter_stop:61,opal_imc_counters_cor:61,opal_imc_counters_init:[37,38,42,231,233],opal_imc_counters_nest:61,opal_imc_counters_start:[38,42,231,233],opal_imc_counters_stop:[38,42,171,172,231,233],opal_imc_counters_trac:[61,281,282],opal_info:35,opal_input_output_err_evt:35,opal_int_eoi:[38,42],opal_int_get_xirr:[38,42],opal_int_set_cppr:[38,42],opal_int_set_mfrr:[38,42],opal_internal_error:[43,50,51,53,77,83,109,110,117,119,120,123,124,127,178,182,183,217,231,233],opal_invalid_cal:[38,42],opal_io_devic:35,opal_io_subsystem:35,opal_ipmi_msg:67,opal_ipmi_msg_format_version_1:67,opal_ipmi_recv:[38,42,131,143,147,149,231,232],opal_ipmi_send:[38,42,143,231,232],opal_leds_:[10,146],opal_leds_get_ind:42,opal_leds_set_ind:42,opal_lpc_:2,opal_lpc_fw:69,opal_lpc_io:69,opal_lpc_mem:69,opal_lpc_read:[2,38,42],opal_lpc_writ:[38,42],opal_map_p:100,opal_memory_subsystem:35,opal_messag:[38,42,45,55],opal_misc:35,opal_misc_err_evt:35,opal_miscellaneous_info_onli:35,opal_mpipl_add_rang:71,opal_mpipl_fadump:293,opal_mpipl_free_preserved_memori:71,opal_mpipl_query_tag:[38,40,42],opal_mpipl_register_tag:[38,42],opal_mpipl_remove_al:71,opal_mpipl_remove_rang:71,opal_mpipl_tag:71,opal_mpipl_tag_boot_mem:71,opal_mpipl_tag_cpu:71,opal_mpipl_tag_kernel:71,opal_mpipl_tag_op:71,opal_mpipl_upd:[38,40,42],opal_msg:[70,111,290,291],opal_msg_async_comp:135,opal_msg_dpo:114,opal_msg_entri:[290,291],opal_msg_epow:54,opal_msg_hmi_evt:58,opal_msg_occ:165,opal_msg_typ:70,opal_na:35,opal_nmmu_set_ptcr:[38,42,220],opal_no_mem:[17,53,60,77,118,120,127,303],opal_nod:[171,172],opal_normal_sys_platform_shutdown:35,opal_npu_destroy_context:[42,182,183,221],opal_npu_get_relaxed_ord:[38,42],opal_npu_init_context:[42,182,183,221],opal_npu_lpc_alloc:[281,283],opal_npu_lpc_releas:[281,283],opal_npu_map_lpar:[42,221,226,227,281,282],opal_npu_mem_alloc:[38,42,290,291],opal_npu_mem_releas:[38,42,290,291],opal_npu_set_relaxed_ord:[38,42],opal_npu_spa_clear_cach:[38,42,182,183],opal_npu_spa_setup:[38,42,182,183],opal_npu_tl_set:[38,42,182,183,271,274,275],opal_nvram_writ:[261,280,281,282],opal_nx_coproc_init:[38,42],opal_occ_msg:70,opal_p7ioc_num_pest_reg:84,opal_paramet:[17,42,43,45,46,48,49,50,51,52,53,55,56,60,61,66,67,69,71,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,112,113,117,118,120,122,124,127,129,160,246,247,261,280,281,284,303,308],opal_parti:[49,50,55,113,118,120,122,290,291],opal_pci_config_read_byt:42,opal_pci_config_read_half_word:42,opal_pci_config_read_word:42,opal_pci_config_write_byt:42,opal_pci_config_write_half_word:42,opal_pci_config_write_word:42,opal_pci_eeh_freeze_clear:[38,42],opal_pci_eeh_freeze_set:[38,42],opal_pci_eeh_freeze_statu:[38,42,274,281,282],opal_pci_eeh_freeze_status2:[38,42,290,291],opal_pci_err_inject:[38,42],opal_pci_get_hub_diag_data:[38,42],opal_pci_get_pbcq_tunnel_bar:[38,42],opal_pci_get_phb_diag_data2:[38,42],opal_pci_get_phb_diag_data:[84,290,291],opal_pci_get_power_st:[38,42],opal_pci_get_presence_st:[38,42],opal_pci_get_xive_reissu:[290,291],opal_pci_map_pe_dma_window:[38,42,134],opal_pci_map_pe_dma_window_r:[38,42,134],opal_pci_map_pe_mmio_window:[38,42,134],opal_pci_msi_eoi:[38,42],opal_pci_next_error:[38,42,83,147,148],opal_pci_p2p_en:99,opal_pci_p2p_load:99,opal_pci_p2p_stor:99,opal_pci_phb_mmio_en:[38,42,134],opal_pci_pol:[38,42,96],opal_pci_reinit:[38,42],opal_pci_reset:[38,42],opal_pci_set_hub_tce_memori:[290,291],opal_pci_set_mv:[38,42,134],opal_pci_set_mve_en:[38,42,134],opal_pci_set_p2p:[38,42],opal_pci_set_p:[38,42,134],opal_pci_set_pbcq_tunnel_bar:[38,42],opal_pci_set_peltv:[38,42,134],opal_pci_set_phb_capi_mod:[38,42,193],opal_pci_set_phb_mem_window:[38,42],opal_pci_set_phb_mmio_window:134,opal_pci_set_phb_table_memori:[134,290,291],opal_pci_set_phb_tce_memori:[290,291],opal_pci_set_power_st:[38,42,135,181,208,245,246,247],opal_pci_set_xive_p:[38,42,134],opal_pci_set_xive_reissu:[290,291],opal_pci_slot_:104,opal_pci_slot_empti:[226,227],opal_pci_slot_offlin:[104,135],opal_pci_slot_onlin:[104,135],opal_pci_slot_power_:[104,135],opal_pci_slot_pres:[226,227],opal_pci_tce_kil:[38,42,271,274,275],opal_pci_tce_kill_al:[106,271,274,275],opal_pci_tce_kill_p:[106,271,274,275],opal_pci_tce_kill_pag:[106,271,274,275],opal_permiss:[17,77,109,110,119,303],opal_phb3_num_pest_reg:84,opal_phb4_num_pest_reg:84,opal_phb_capi_mode_capi:102,opal_phb_capi_mode_dma:102,opal_phb_capi_mode_dma_tvt1:102,opal_phb_capi_mode_pci:102,opal_phb_capi_mode_snoop_off:102,opal_phb_capi_mode_snoop_on:102,opal_phb_error_data_type_p7ioc:84,opal_phb_error_data_type_phb3:84,opal_phb_error_data_type_phb4:84,opal_phb_error_data_version_1:84,opal_phb_get_opt:[38,42,297],opal_phb_option_mmio_eeh_dis:107,opal_phb_option_tve1_4gb:107,opal_phb_set_opt:[38,42,297],opal_platform_err_evt:[35,193],opal_platform_firmwar:35,opal_pm_dec_stop:[231,232],opal_pm_sleep_enabled_er1:48,opal_pm_timebase_stop:[231,232],opal_pol:[171,172,246],opal_poll_ev:[38,42,43,44,49,50,59,76,117,125,131,217,231,233,246,247,258,274,275,278,281,282],opal_power_cool:35,opal_prd:[147,161],opal_prd_msg:[38,42,70,226,227],opal_prd_msg_typ:70,opal_prd_msg_type_attn:70,opal_prd_msg_type_attn_ack:70,opal_prd_msg_type_fini:70,opal_prd_msg_type_init:70,opal_prd_msg_type_occ_error:70,opal_prd_msg_type_occ_reset:70,opal_predictive_err_degraded_perf:35,opal_predictive_err_fault_rectify_boot_degrade_perf:35,opal_predictive_err_fault_rectify_reboot:35,opal_predictive_err_gener:35,opal_predictive_err_loss_of_redund:35,opal_prev_reported_err_rectifi:35,opal_processor_subsystem:35,opal_query_cpu_statu:[38,42],opal_quiesc:[38,42,122,171,172],opal_rc_attn:35,opal_rc_cu_flash:35,opal_rc_cu_init:35,opal_rc_surve_statu:35,opal_read_nvram:42,opal_read_tpo:42,opal_reboot_full_ipl:[44,220],opal_reboot_mpipl:44,opal_reboot_norm:44,opal_reboot_platform_error:[44,58,202,204],opal_recovered_err_gener:35,opal_register_dump_region:42,opal_register_exc_handl:42,opal_register_opal_exception_handl:[290,291],opal_reinit_cpu:[38,42,124,146,147,148,177,182,183,226,227,228,260,272,273],opal_reinit_cpus_hile_b:115,opal_reinit_cpus_hile_l:115,opal_reinit_cpus_tm_suspend_dis:[177,182,183,231,234],opal_reinit_pci_dev:95,opal_remove_pe_from_domain:101,opal_reset_pci_fundament:96,opal_reset_pci_hot:96,opal_reset_pci_ioda_t:96,opal_reset_pci_link:96,opal_reset_phb_complet:96,opal_reset_phb_error:96,opal_resourc:[17,55,67,71,73,74,75,102,118,217,231,233,303],opal_resource_dealloc_err_evt:35,opal_resource_dealloc_event_notifi:35,opal_resource_sparing_ev:35,opal_resync_timebas:[38,42,274,275],opal_return:[162,215,226,227,281,284],opal_return_cpu:[42,112,115],opal_rtc_read:[42,108],opal_rtc_writ:[42,108],opal_run_pol:[246,247,261,280,281,282],opal_secvar_enqueu:118,opal_secvar_enqueue_upd:[38,42,303],opal_secvar_get:[38,42],opal_secvar_get_next:[38,42],opal_sensor_group_clear:42,opal_sensor_group_en:42,opal_sensor_read:[19,38,42],opal_sensor_read_u64:[38,42],opal_set:[220,308],opal_set_irq_config:308,opal_set_param:[20,42],opal_set_power_shift_ratio:42,opal_set_powercap:[15,42],opal_set_rtc_tim:[162,215,226,227],opal_set_x:[38,42,57,134,308],opal_sg_list:[47,50],opal_signal_system_reset:[38,42,113,220,231,232],opal_slw_set_reg:[38,42,231,232,246,247],opal_softwar:35,opal_src_type_error:35,opal_srctyp:35,opal_start_cpu:[42,112,131],opal_start_cpu_thread:124,opal_success:[17,43,44,45,48,49,50,51,53,54,55,60,61,67,69,71,72,74,75,76,78,79,81,82,83,84,85,86,87,91,92,93,94,97,99,100,102,104,107,108,109,110,112,113,114,115,116,117,118,119,120,122,123,124,125,127,128,129,135,160,162,215,220,226,227,231,232,246,247,274,303],opal_surveillance_err:35,opal_sync_host_reboot:[38,42,220],opal_sys_resource_deconfig_prior_err:35,opal_sys_resources_deconfig_by_us:35,opal_syscool_insf:54,opal_sysepow_cool:54,opal_sysepow_max:54,opal_sysepow_pow:54,opal_sysepow_temp:54,opal_sysparam_read:20,opal_sysparam_rw:20,opal_sysparam_writ:20,opal_syspower_chng:[54,70],opal_syspower_fail:[54,70],opal_syspower_inc:70,opal_syspower_incl:54,opal_syspower_up:54,opal_systemp_amb:54,opal_systemp_hmd:54,opal_systemp_int:54,opal_test:[38,42],opal_test_func:126,opal_thread_inact:112,opal_thread_start:112,opal_thread_unavail:112,opal_timeout:[109,110,119],opal_token_abs:46,opal_token_pres:46,opal_tpo_writ:[226,227],opal_trace_entri:[246,247],opal_unmap_p:100,opal_unrecoverable_err_degrade_perf:35,opal_unrecoverable_err_gener:35,opal_unrecoverable_err_loss_of_funct:35,opal_unrecoverable_err_loss_redund:35,opal_unrecoverable_err_loss_redundancy_perf:35,opal_unregister_dump_region:42,opal_unsupport:[42,43,44,49,50,60,67,73,78,79,80,81,82,83,84,85,86,87,88,90,91,92,93,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,115,118,119,120,122,123,129,130,134,177,182,183,226,228],opal_unsuppsort:93,opal_write_nvram:[42,261,274,275,280,281,282],opal_write_oppanel_async:[38,42],opal_write_tpo:42,opal_wrong_st:[51,114,124,128,158,187,191],opal_xive_alloc_vp:308,opal_xive_alloc_vp_block:[231,233,308],opal_xive_allocate_irq:[42,231,232,288,293],opal_xive_allocate_vp_block:42,opal_xive_any_chip:[231,232],opal_xive_donate_pag:42,opal_xive_dump:[42,224],opal_xive_dump_tm:[231,232],opal_xive_eoi:220,opal_xive_eq_always_notifi:308,opal_xive_eq_en:308,opal_xive_eq_escal:308,opal_xive_free_act:308,opal_xive_free_irq:42,opal_xive_free_vp_block:[42,231,233],opal_xive_get:220,opal_xive_get_irq_config:42,opal_xive_get_irq_info:[42,220],opal_xive_get_queue_info:42,opal_xive_get_queue_st:42,opal_xive_get_vp_info:42,opal_xive_get_vp_st:42,opal_xive_get_xirr:220,opal_xive_irq_eoi_via_fw:308,opal_xive_irq_lsi:308,opal_xive_irq_mask_via_fw:308,opal_xive_irq_shift_bug:308,opal_xive_irq_store_eoi:308,opal_xive_irq_trigger_pag:308,opal_xive_provis:308,opal_xive_reset:[42,220,224],opal_xive_set:308,opal_xive_set_irq_config:42,opal_xive_set_queue_info:42,opal_xive_set_queue_st:42,opal_xive_set_vp_info:[42,182,183],opal_xive_sync:42,opal_xive_vp_en:308,opal_xive_vp_single_escal:308,opal_xscom_addr_error:128,opal_xscom_busi:128,opal_xscom_chiplet_off:128,opal_xscom_clock_error:128,opal_xscom_ctr_offlin:128,opal_xscom_parity_error:128,opal_xscom_partial_good:[128,274,275],opal_xscom_read:[38,42],opal_xscom_timeout:128,opal_xscom_writ:[38,42],opalchecktokenstatu:46,opaleehfreezeactiontoken:[79,80],opalepowstatu:54,opalerrinjectfunc:82,opalerrinjecttyp:82,opalfreezest:81,opalhmi_error_malfunc_alert:70,opalhmi_xstoptyp:70,opalhmiev:70,opalio:84,opaliop7iocphberrordata:84,opaliophb3errordata:[84,281,282],opaliophb4errordata:84,opaliophberrorcommon:84,opallpcaddresstyp:69,opalmsg:165,opalmveenableact:98,opalpcierrorsever:92,opalpcireinitscop:95,opalpciresetscop:[95,96],opalpciresetst:96,opalpcistatustoken:[81,92],opalpeact:100,opalpeltvact:101,opalphbopt:107,opalsyscool:54,opalsysepow:54,opalsysparamperm:20,opalsyspow:54,opalsystemp:54,opalthreadstatu:112,opalv3:[42,56,88,89,90,93,97,98,101,103,105,290,291],opaqu:[19,120,226,227,308],opb:2,opdirti:4,opel_pci_set_mv:134,open:[2,4,19,36,132,138,139,140,144,159,171,172,176,196,202,203,205,208,219,220,221,222,224,225,226,227,228,231,232,252,256,261,267,272,273,274,275,277,280,281,282,283,290,291,303],openbmc:[171,172,182,183,187,206,226,227,249,250,253,255,272,273,274,287,290,291],opencapi:[25,38,75,171,172,178,231,232,271,276,283,284,290,291,294,295,297,298],opencomput:220,openpow:[52,132,133,138,141,146,161,164,165,171,172,182,183,201,203,220,221,222,224,226,256,267,272,274,290,291],openpower1:[4,178,182,183,231,233],openssl:[225,274],oper:[0,5,13,18,21,35,37,38,42,43,44,47,50,51,52,55,60,61,68,71,76,78,79,80,81,87,92,95,96,99,100,108,110,113,122,124,125,127,128,131,132,146,171,172,173,174,179,180,182,183,201,202,203,205,207,217,224,226,227,229,230,231,232,233,241,242,246,247,248,250,254,258,261,270,272,273,274,275,278,280,281,282,283,285,290,291,302,303,306],operand:[212,220],opfr:221,opp:[182,183],oppanel:[5,127],oppanel_lin:127,oppanel_line_t:127,opportun:[58,70,130,171,172,181,208,217,229,231,233,258,266,272,273,278,281,282],oppos:[246,247],opt:[36,107,171,172,272,273,274,297],optesthmihandl:182,optim:[13,134,147,148,171,172,184,185,202,203,226,227,231,232,251,274,275,286,290,291],optimis:[182,183,226,227,228,229,230,258,269,274,275,278,281,282],option:[0,2,4,5,17,19,21,22,43,50,58,71,77,107,114,115,132,134,141,146,150,161,171,172,184,193,202,203,204,205,217,220,224,226,227,228,229,230,231,232,233,238,246,247,253,258,272,273,274,275,278,281,282,284,285,286,290,291,297,303,306,308,309],order:[2,4,6,13,21,22,41,51,58,74,100,103,109,115,118,133,154,161,171,172,174,179,182,184,185,188,189,193,202,203,204,220,226,227,228,229,230,231,232,233,246,247,257,258,270,272,274,275,276,278,281,282,286,290,291,297,304,306,308],oreq:60,org:[133,138,140,220,229,246,247,274,275,281,290,291],organ:135,organis:[246,247],origin:[38,39,44,133,171,172,188,189,229,230,231,232,242,246,247,249,272,274,275,278,280,281,282],originagt:[147,149],orphan:[281,284],os:[0,5,12,17,19,21,22,23,33,35,38,40,41,42,43,44,46,50,54,55,58,59,61,62,63,64,65,67,70,81,82,83,84,93,96,100,106,111,112,113,114,115,118,120,121,124,128,131,132,135,144,147,148,153,166,171,172,174,175,180,182,183,189,193,217,220,221,224,226,227,229,230,231,233,246,247,248,266,271,272,273,274,275,281,282,283,290,291,297,302,303,304,305,308],oss:[131,266,272,273],other:[2,10,13,21,41,43,44,50,51,52,54,77,78,92,100,101,102,103,110,113,115,127,131,132,133,135,136,138,139,140,145,147,148,151,154,159,161,162,169,171,172,173,178,193,196,203,215,217,220,221,226,227,229,230,231,232,233,236,246,247,248,250,258,261,271,272,274,275,278,280,281,282,285,287,290,291,303,304,305,308,309],otherwis:[36,70,86,129,135,141,171,172,181,184,185,201,202,203,207,208,213,216,220,221,226,227,228,231,232,243,245,246,247,257,261,272,273,274,275,277,278,280,281,282,284,290,291,308],otl:[75,246,247,290,291],ou:[246,247],our:[39,41,108,139,147,149,160,162,166,171,172,173,178,180,182,183,193,202,203,206,207,212,215,217,219,220,226,227,228,229,230,231,232,233,246,247,250,257,268,272,273,274,275,277,281,282,290,291],ourselv:[226,227,246,247],out:[1,2,5,17,21,35,36,40,41,44,49,50,54,60,68,71,74,84,87,107,112,114,122,133,134,135,141,147,148,150,154,160,162,165,167,171,172,173,174,175,176,180,181,182,183,189,202,203,206,207,208,214,215,219,220,224,226,227,228,229,230,231,232,233,235,236,241,246,247,248,251,259,261,266,267,272,273,274,275,276,279,280,281,282,283,284,286,290,291,298,303,306],out_eoi_pag:308,out_epow:54,out_esb_shift:308,out_escalate_irq:308,out_flag:[58,308],out_lirq:308,out_prio:308,out_qeoi_pag:308,out_qflag:308,out_qindex:308,out_qpag:308,out_qsiz:308,out_qtoggl:308,out_src_chip:308,out_stat:308,out_trig_pag:308,out_vp:308,out_xirr:63,outbound:[229,230],outdat:[231,233],outgo:189,outlast:140,outlin:35,output:[1,19,37,38,59,132,134,151,154,162,171,172,173,174,184,186,202,203,215,219,220,224,226,227,228,229,230,231,232,246,247,272,273,274,275,280,281,282,287,290,291,308],outsid:[42,56,103,229,230],outstand:[51,59,108,163,165,171,172,216,226,227],outstanding_event_mask:59,ov32:[246,248],over:[0,1,20,40,41,54,70,76,77,81,109,130,131,132,133,139,147,148,149,150,151,152,155,161,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,251,257,258,260,261,265,266,267,268,272,273,274,275,276,277,278,280,281,282,283,284,290,291,305,308],overal:[2,21,68,88,184,185,246,247,303,308],overflow:[37,171,173,202,203,224,226,227,228,246,248,268,274,275,287,290,291],overhaul:[258,278,281,282],overhead:[13,37,182,183,231,232],overid:[231,232],overidden:[281,282],overlai:84,overlap:[95,103,224,226,227,231,232,246,247,281,282],overrid:[135,161,171,172,202,203,204,220,221,224,226,227,231,232,246,247,261,274,275,280,281,282,284],overridden:221,overrun:[60,145,171,172,231,232,294],overview:7,overwit:[271,274,275],overwrit:[7,146,168,184,185,246,247,257,277,281,282,290,291],overwritten:[2,274,275,281,282,286,290,291],overwrriten:[267,272],own:[2,14,21,35,58,112,133,139,171,172,173,180,184,185,189,212,217,220,226,231,233,246,247,274,275,281,282,284,286,308],owner:[17,23,171,172,274,275,277,306,308],ownership:[112,226,227,274,275],ozlab:[138,140,220,229,246,247,281,290,291],ozrom1:[286,290,291],p00:[224,274],p0:[261,280,281,282],p10:[281,282],p1:[10,34,246,247,271,274,275,281,282],p2p:[99,229,230],p344fb62:[231,232],p5ioc2:[184,185],p5ioc:[42,290,291],p7:[28,35,129,136,146,229,230],p7ioc:[42,84,90,93,103,135,160,171,175,224,281,282,290,291],p7ioccsr:84,p7iocplssr:84,p89:[231,233],p8:[0,2,14,121,129,136,146,147,148,162,171,172,174,182,183,184,185,186,188,202,203,208,211,214,220,224,225,226,227,228,229,230,231,232,233,238,243,246,247,250,257,260,265,272,273,274,275,277,278,281,282,288,293],p8_i2c_check_initial_statu:[162,214,225],p8_i2c_check_statu:229,p8_i2c_recov:[231,233],p8_i2c_reset_engin:[265,272,273],p8_i2c_reset_port:[265,272,273],p8_pore_gen_cpufreq_fix:123,p8_pore_table_gen_api:123,p8dnu:136,p8dtu1u:[136,202],p8dtu2u:[136,202,213,220],p8dtu:[4,136,202,206],p8e:[257,277,281,282],p8i2c:[207,220],p98b6d83:[231,232],p9:[14,25,28,33,34,38,62,63,64,65,121,134,162,171,172,174,175,182,183,193,202,203,214,220,221,224,225,226,227,228,229,230,231,232,238,246,247,248,250,255,261,265,272,273,274,275,278,280,281,282,283,284,287,290,291,302,303],p9_cont_thread:[246,248],p9_darn_init:[281,282],p9_i2c_bus_owner_chang:[226,227,231,233],p9_sbe_msg:287,p9_sbe_msg_send:287,p9_sbe_termin:40,p9_stop_api:[123,133,171,172,231,232,242],p9_stop_save_cpureg:123,p9_stop_thread:[246,248],p9dsu2u:[259,279],p9dsu:[134,136,224,231,232,248,251,254,256,259,274,275,277,279],p9mambo:220,p9n:[177,182,183,226,227,274],p9p:[281,283,284],p9sdu:136,p:[1,4,8,35,44,47,134,137,153,157,171,172,182,183,187,202,203,220,221,224,226,228,229,230,231,232,246,247,248,249,251,271,274,275,281,284,286,287,290,291,297,307,308],p_str:220,pa:[2,22,220],pa_featur:[229,230],pa_features_p9:[231,232],paca:[231,233],pack:[140,287,290,291,293,305],packag:[4,37,138,147,148,171,172,184,185,246,247,272,273,274],packet:[189,229,230],pad:[70,305],page:[2,72,88,115,171,172,173,175,181,202,203,208,220,224,226,227,228,241,255,266,268,272,273,274,275,290,291,308],pai:4,paidipeddi:[171,193,202,203,204,219,220,224,226,229,231,274],pain:[220,281,282,290],pair:[111,171,172,221,222,229,230,241,308],palmetto:[39,136,145,220,226,227,278,281,282],panda:[147,149],panel:[5,127],panic:[58,154,171,172,184,226,228,261,263,280,281,282,284,296],panic_flush_kmsg_end:[261,280,281,282],paper:[171,172],papr:[2,35,62,63,64,65,68,193,281],par:229,paragraph:100,parallel:[58,182,183,189,272,273,274,275,281,282],parallelis:[182,183,272,274,275],param:[20,70,130,146,171,173,220,224,272,273,290,291],param_id:77,paramet:[0,9,20,35,38,42,43,45,46,47,49,50,51,52,56,59,68,70,71,72,73,78,80,81,88,98,100,103,113,119,122,131,132,171,172,218,220,221,224,231,233,244,246,247,248,274,281,282,285,290,291,295,303,306,308],parametr:[171,172],paranoia:[171,172],parashar:[147,148,161,184,185,193,202,203],parent:[2,30,33,34,101,103,130,134,135,146,171,174,182,183,189,202,203,246,247,281,284,308,309],parent_p:[101,134],pariti:[58,60,128,146,171,172,182,183,231,236,246,247,261,268,271,274,275,280,281,284],paritit:[286,290,291],pars:[21,22,34,36,47,133,144,146,171,172,173,174,180,182,183,189,202,203,204,218,219,220,221,224,226,227,229,230,231,232,233,244,246,247,248,257,267,272,277,279,281,282,284],parse_arg:[272,273],parse_hdat:224,parse_i2c_dev:224,parser:[2,21,171,172,224,226,246,247,250],part:[2,4,22,26,28,34,35,37,39,44,50,58,60,68,71,88,113,114,130,132,135,138,139,141,145,171,172,180,181,182,184,185,187,194,202,203,204,208,219,220,221,226,227,228,229,230,231,232,235,240,246,247,256,257,266,272,273,274,275,277,281,282,290,291,297,308],parti:[220,306],partial:[49,128,131,135,146,157,187,189,193,200,202,203,204,226,227,249,261,280,281,283,286,290,291,308],particip:138,particular:[5,21,22,28,35,46,56,68,73,88,90,93,97,118,134,135,141,171,172,178,182,183,221,222,226,265,272,273,281,282,283,306],particularli:[171,172,182,183,274,275],partid:128,partit:[9,28,37,93,133,146,147,148,154,161,171,172,173,202,203,204,205,220,221,226,227,229,230,231,232,246,247,248,250,252,253,254,272,273,274,275,276,281,282,284,286,290,291,293,305],partition:[274,275],partner:141,pasid:[73,75],pass:[0,2,7,12,17,22,34,35,40,47,50,54,55,59,68,70,71,81,89,110,111,118,127,132,133,161,171,172,174,194,202,203,204,205,220,226,227,228,229,230,231,232,246,247,261,272,273,274,280,281,282,283,284,286,290,291,303,308],passthrough:[68,226,227],passthru:161,password:[290,291],past:[33,121,171,172,224,229,230,238,246,247,259,278,279,281,282,307],patch:[38,134,138,144,146,154,159,162,163,164,166,171,172,173,174,175,180,181,182,183,184,185,195,196,201,202,203,204,208,209,214,215,216,217,219,220,221,224,226,227,228,229,230,231,232,233,238,241,246,247,250,251,254,255,256,258,259,261,265,266,267,270,271,272,273,274,275,276,278,279,280,281,282,283,284,285,286,287,290,291],patchwork:[220,246,247,281,290,291],path:[6,13,20,39,41,43,58,86,104,113,130,147,148,149,156,161,162,163,171,172,173,174,176,181,182,183,184,198,202,203,204,208,211,215,216,217,220,222,224,226,227,231,232,233,241,245,246,247,252,256,257,258,261,272,274,275,277,278,280,281,282,285,286,290,291,294,308],path_max:274,patrick:[161,184,185,187,193,202,203,219,220],patrit:[246,247],pattern:[19,22,39,182,183,216,220,226,227,231,233,303],paul:[184,185],paus:[0,180,231,233,246,247,285,290,291],pause_microcode_at_boot:[180,246,247],pavaman:229,pave:[171,172],payload:[0,38,39,133,146,154,171,172,174,202,204,220,229,230,270,274,275,290,291,303,306],payload_addr:[281,282],pb:[268,274,275],pb_cent_cresp_addr_error:197,pba:[2,221],pbcq:[2,27,87,171,172,174,182,183,226,228,246,247,281,282,284],pbi:[226,228],pc:[171,172,231,233,242,246,247,272,273,281,282,290,291],pcap:110,pcb:[2,309],pcb_addr:[128,274,309],pci0000:150,pci:[0,2,25,37,38,42,53,84,85,86,88,89,90,93,96,99,101,103,104,106,130,146,147,148,150,155,158,160,164,175,184,185,189,201,206,213,216,228,229,230,231,232,234,236,238,243,256,258,261,270,272,273,274,275,277,278,280,281,282,284,285,286,288,290,291,297],pci_addr:103,pci_bridge_power_on:[226,227],pci_bridge_wait_link:[226,227],pci_cfg_reg_filt:206,pci_command_mast:[231,236],pci_devic:[220,226,261,280,285,290,291],pci_device_id:[267,272,273],pci_enable_bridg:[226,227],pci_error_typ:[81,92,274],pci_get_slot_info:135,pci_mem_s:89,pci_mem_typ:88,pci_reset:[171,173],pci_scan_bu:[182,183,274,275],pci_scan_on:[182,183],pci_scan_phb:[182,183],pci_setup_phb:135,pci_slot:226,pci_slot_flag_enforc:[226,227],pci_slot_op:135,pci_slot_power_off:[201,202,203],pci_slot_set_power_st:[274,275],pci_start_addr:[88,89,134],pcicap_exp_cap_slot:221,pcicap_exp_devctl:220,pcicap_exp_slotctl:[226,227],pcie:[41,56,92,100,101,134,135,147,148,164,171,182,183,187,189,202,203,213,220,221,226,227,229,230,231,232,234,235,236,246,247,251,256,268,274,275,286,290,291],pcie_cap:221,pcie_slot_get_presence_st:[213,220],pciecap_exp_devctl:220,pciecap_sriov_ctrl_vf:220,pciex:[27,29,30,281,284],pciutil:[231,232],pcix:135,pcr:[171,172,173,260,272,273,290,291,306],pct:[258,278,281,282],pd:220,pdbar:[37,171,172],pdbg:[246,248,281,282],pdc:[135,220],pdf:[202,203],pe:[2,30,38,56,75,88,89,90,97,99,100,101,102,105,106,147,149,166,171,172,198,201,202,203,224,226,227,231,236,238,271,274,275,281,283,308],pe_act:100,pe_handl:75,pe_mask:75,pe_numb:[79,80,81,82,88,89,90,97,99,100,102,105,106,134],pec0:[226,227],pec2:[102,226,227,250,267,268,270,272,274,275],pec:[30,171,172,174,226,228,267,270,272,274,275,281,282],peek:1,peer:[99,171,172,178,182,183,229,230,281,282,290],pegasu:[184,185,274],pel:[38,51,145,147,149],pelt:[97,134,274,275],peltv:[30,101],peltv_addr:134,penalti:[229,230],pend:[4,35,45,55,62,83,108,114,120,160,162,171,172,214,220,224,226,227,238,245,281,282],peopl:[1,136,139,141,202,204,220,229,230,261,272,273,280,281,284],per:[2,14,24,26,37,41,56,58,75,88,89,129,147,149,153,162,171,172,178,182,183,194,202,203,214,224,225,226,227,229,230,231,232,238,246,247,257,270,272,273,274,275,277,281,282,283,286,290,291,297,308,309],percentag:226,perf:[37,274,281,282],perfect:[246,247,274,275,281],perfectli:[2,43],perform:[0,2,13,22,35,37,41,47,50,96,102,131,132,133,134,153,166,171,172,173,174,176,178,179,182,183,201,202,203,220,224,226,227,228,229,230,231,232,236,238,246,247,258,261,266,268,269,271,272,273,274,275,278,280,281,282,284,290,291,303,306,308],peridoci:37,period:[35,37,42,58,124,219,220,221,222,224,225,226,227,228,229,230,246,247,258,274,275,278,281,282],perl:[36,274],perm:[20,272,273],perman:[41,76,78,117,131,135,171,172,173,178,182,183,220,226,228,241,250,265,272,273,274,275,295],permanantli:[226,227],permernantli:[265,272,273],permiss:[20,131],permit:[17,138,229,230],persist:[17,118,246,247,258,278,281,282,303],person:[134,138,139],perspect:139,perst:[134,135,202,203,226,228,229,230,267,272,281,282,286,288,290,291],pertain:201,pest:[30,271,274,275],pesta:84,pestb:84,petikernel:[171,172],petitboot:[0,4,36,71,132,145,154,166,171,172,195,202,203,220,221,231,232,260,274,275],pex8718:220,pex9733:220,pex9797:[274,275],pex:[213,220],pexpect:[178,182,183],pf:[147,149,220,261,280,285,290,291],pfir:[226,228,274,275],pfir_cach:[274,275],pflash:[147,148,161,166,174,176,184,185,190,191,193,202,203,205,206,219,220,224,229,230,231,232,246,247,253,272,273,274,275,281,282],pflash_to_copi:226,pg:182,pgood:[246,247],pgreset:[226,227],ph2:[274,275],ph3:[274,275],ph:35,phandl:[2,3,4,5,7,8,9,10,13,14,18,20,21,22,23,24,26,27,29,30,32,33,34,53,104,135,171,172,193,226,227,267,272,281,282],phase:[1,274,275,281,282],phb0:[146,154,226,227],phb1:220,phb3:[84,91,135,147,148,149,150,153,159,160,161,166,168,171,172,175,184,185,188,193,194,196,202,203,212,220,221,224,226,227,238,281,282,284,290,291],phb3_init:[147,148],phb3_init_capp_error:150,phb3_init_hw:[147,148],phb3_pci_msi_check_q:161,phb3_set_capi_mod:150,phb3_state_creset_wait_cq:[160,220],phb3_state_fenc:[160,220],phb3_state_freset_start:168,phb4:[78,84,106,134,174,175,179,182,183,193,220,221,224,235,236,238,243,246,247,248,250,251,255,256,258,268,270,271,272,278,281,282,284,286,288,297,300],phb4_:[286,290,291],phb4_assert_perst:[286,290,291],phb4_capp_recoveri:[281,282],phb4_check_reg:226,phb4_creset:[171,172,182,229,230,274,275,281,282],phb4_dump_app_err_reg:[171,172],phb4_eeh_dump_reg:[271,274,275],phb4_freset:[281,282,286,290,291],phb4_get_presence_st:[226,227],phb4_host_sync_reset:[281,282],phb4_hw_init:[286,290,291],phb4_init_capp_reg:[250,270,274,275],phb4_init_hw:[286,290,291],phb4_init_ioda3:[182,183,281,282],phb4_link_trac:[290,291],phb4_probe_stack:[182,271,274,275],phb4_root_port_init:[226,227,231,236],phb4_set_capi_mod:[182,183,281,282],phb4_slot_creset_wait_cq:[171,172,226,228],phb4_tce_kil:[271,274,275],phb4_training_trac:[290,291],phb:[2,27,29,30,41,42,56,74,75,79,81,82,84,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,105,106,107,134,135,147,148,150,154,160,161,168,171,172,174,179,182,183,184,185,193,201,202,203,204,212,220,221,224,226,227,228,229,230,231,232,236,246,247,251,259,261,268,270,271,272,273,274,275,279,280,281,282,283,284,286,290,291,297,308],phb_ffi_lock:161,phb_id:[42,56,73,74,75,78,79,80,81,82,84,87,88,89,90,91,92,93,95,97,98,100,101,102,103,105,106,107,134],phb_statu:[81,281,282],phbcsr:84,phberr:[226,228],phberrorlog0:84,phberrorlog1:84,phberrorstatu:84,phbfirsterrorstatu:84,phbid:[30,56,87,88,89,90,93,97,98,99,100,101,103,105],phbid_init:99,phbid_target:99,phbpblerrorlog0:84,phbpblerrorlog1:84,phbpblerrorstatu:[84,229,230],phbpblfirsterrorstatu:84,phbpciedlperrorlog1:84,phbpciedlperrorlog2:84,phbpciedlperrorstatu:84,phbplssr:84,phbregberrorlog0:84,phbregberrorlog1:84,phbregberrorstatu:84,phbregbfirsterrorstatu:84,phbrxearberrorlog0:84,phbrxearberrorlog1:84,phbrxearberrorstatu:84,phbrxearbfirsterrorstatu:84,phbrxemrgerrorlog0:84,phbrxemrgerrorlog1:84,phbrxemrgerrorstatu:84,phbrxemrgfirsterrorstatu:84,phbrxetceerrorlog0:84,phbrxetceerrorlog1:84,phbrxetceerrorstatu:84,phbrxetcefirsterrorstatu:84,phbtxeerrorlog0:84,phbtxeerrorlog1:84,phbtxeerrorstatu:84,phbtxefirsterrorstatu:84,phbver:84,philipp:[147,148,184,185,193],phosphor:[290,291],phy:[2,27,29,41,134,171,172,174,182,183,226,228,229,231,232,240,246,247,251,274,275,281,282,298],phy_map:[274,275],phy_reset:[171,172,229,231,232,240],phy_rx_clock_sel:[171,172,237,240],phy_rx_dccal:[171,172,240],phyp:[229,230],physic:[2,12,23,31,41,61,75,127,135,171,172,220,226,227,231,232,261,280,281,284,285,290,291,308],pib:[2,231],piccoli:[171,219,220,231],pick:[140,153,189,191,220,250,274,275,290,291,308],pid:[28,73,129,162,178,182,183,215,226,227,229,230,231,233,246,247,281,282,286,290,291],pie:[274,275],piec:[35,132,231,236],piggin:[171,202,203,219,220,224,226,229,231,274],pile:2,pin:[69,135,272,273,288,290,291],pir:[2,14,19,61,70,123,147,148,157,171,172,178,182,183,187,220,229,230,257,271,272,273,274,275,277,281,282,290,291,308],pk:[17,304],place:[141,171,172,173,220,224,226,227,246,267,272,273,274,275,281,284,290,291,306],placehold:[131,272,273],placement:[182,183],plai:[171,172,281,283],plain:[133,171,175,203,254,274,275],plan:[172,173,174,175,183,184,185,186,193,194,202,203,204,205,220,221,222,224,225,227,228,230,232,233,234,235,236,246,247,248],planar:[171,172,231,232,259,272,273,274,275,279],plat:[20,146,272,273,274,290,291],platform:[0,2,4,5,17,20,23,25,33,35,38,41,43,44,46,47,50,51,71,77,106,114,116,118,120,122,123,124,132,133,135,141,145,146,147,148,149,151,158,159,161,162,164,166,173,174,175,178,185,188,201,206,214,215,216,217,221,222,225,227,228,229,230,233,234,235,236,238,248,251,261,276,278,280,284,285,286,287,288,292,293,294,297,298,299,302,303,306],platformw:23,plausibl:43,pldd:35,ple:35,pleas:[25,140,171],plid:[171,174,224],pll:[281,282],plu:[76,108,141],plug:[171,172,184,185,226,227,267,272,274,275,290,291],pluggabl:[135,171,175,220,256,277,281,284],plugin:[290,291],plumb:[171,172],plx:[135,213,220,221,226,227,281,284],pm:[171,172,220,226,227,231,232],pm_complex_reset:[231,232],pm_gp1:13,pm_mcs3_:24,pmax:[189,226,227],pmc:[202,203,221],pmcr:14,pmem0:[246,247],pmem1:[246,247],pmem:[272,281,282],pmem_disk:[246,247,272,274,275],pmem_volatil:[272,274,275],pmi:37,pmin:[189,226,227],pmu:37,pnor:[7,133,146,161,171,172,173,174,202,203,204,220,226,227,229,230,231,232,246,247,250,272,273,274,275,281,282,284,303,304,306],pnor_avail:[246,247],pnor_init:[246,247],pnppnp:2,pnv_ioda_p:106,pnv_ioda_reserve_p:201,pnv_pci_ioda2_tce_invalidate_p:106,pnv_pci_phb3_tce_invalid:106,pnv_pci_phb3_tce_invalidate_p:106,pnv_phb:106,pnv_phb_model_phb3:106,pnv_platform_error_reboot:[261,280,281,282],pnv_power_off:[217,231,233],pnv_prepare_going_down:[217,231,233],point:[1,2,3,5,13,15,21,22,24,27,35,36,37,39,56,61,68,72,75,84,85,86,88,89,90,93,97,98,101,103,104,105,108,133,141,159,162,171,172,174,178,182,183,193,196,215,217,220,226,227,228,229,230,231,233,245,246,247,248,258,261,272,273,274,275,278,280,281,283,284,286,290,291,308],pointer:[35,45,49,60,67,71,75,81,85,86,87,104,109,110,146,162,171,172,175,182,183,194,202,203,215,220,224,225,226,227,274,275,276,281,282,287,308],pointless:[182,183,226,231,232,246,247],poison:[202,203,226,227],poke:1,polic:88,polici:[20,22,47,182,183,220],poll:[41,108,134,135,154,171,172,173,182,220,226,227,229,230,254,274,275,281,282,285,286,290,291],poll_interv:[207,220],poll_link:135,poll_recurs:246,poller:[140,146,147,148,154,160,167,202,203,207,217,220,231,233,246,247,255,261,274,275,280,281,282],poller_recurs:246,pool:[35,181,208,266,272,273,308],poor:[280,281,282],poorli:[150,182,183,229,272],poppl:[147,148,171,184,185,187,193,202,203,219,220,224,226,229,231,274],popul:[2,15,35,135,144,145,171,172,180,182,183,195,202,203,220,221,222,224,226,227,229,230,231,232,246,247,267,268,270,271,272,273,274,275,281,282,308],popular:[290,291],pore:[123,133],port80:294,port80h:[290,291],port:[1,2,20,26,33,97,98,132,135,146,155,160,171,172,178,182,183,184,185,188,202,203,213,220,221,226,227,231,232,246,247,265,272,273,274,275,281,282,284,290,291,309],portabl:130,portion:[139,182,183,220,274,275],portstatusreg:84,posit:[21,22,46,62,114,171,172,221,226,227,231,233,246,247,254,261,274,275,276,290,291],possibl:[2,5,15,17,22,39,55,56,77,84,88,89,90,93,97,98,101,102,103,105,109,110,115,117,125,127,139,140,145,146,147,148,159,162,168,171,172,174,181,182,183,189,191,193,202,204,206,208,215,220,224,226,227,228,229,230,231,232,246,247,248,257,259,266,267,268,272,273,274,275,279,281,282,284,285,290,291,303,305,308],post:[7,37,44,71,139,201,226,228,295,308],postcondit:278,postfix:22,potenti:[146,157,171,172,181,187,208,224,226,227,229,230,240,245,246,247,266,272,273,308],power7:[42,50,83,90,93,103,115,130,136,145,146,184,185,231,290,291,309],power8:[2,4,5,8,12,13,14,19,22,27,34,42,48,49,91,115,123,130,131,132,133,136,141,144,145,146,147,148,171,172,173,174,175,182,183,202,203,220,221,222,224,225,226,227,228,230,233,234,235,236,247,248,285,290,291,309],power8nvl:[136,257,277,281,282],power9:[4,5,8,13,14,22,29,30,33,37,38,41,42,44,49,58,106,115,120,123,131,133,136,173,174,175,182,183,204,219,222,223,225,233,234,235,236,238,246,247,248,269,271,284,290,291,297,309],power9c:136,power9n:[136,281,282],power9p:136,power:[0,2,4,5,19,21,22,28,33,34,35,36,38,40,41,42,43,54,56,70,85,102,104,118,122,123,130,132,133,134,135,136,138,140,147,148,151,153,166,174,175,176,184,185,201,202,203,204,205,213,216,217,219,220,221,222,224,225,228,229,230,231,232,233,246,247,256,258,265,272,273,274,275,277,278,281,282,283,290,291,301,304,305,308],power_ctl:[202,203],power_st:220,powerbu:[102,171,174,180,220,231,236,246,247],powercap:[13,110,229,230,281,282],powerflt:[213,220],powerkvm:[50,132,141,143,290,291],powermac:[202,204],powernv8:[290,291],powernv9:[290,291],powernv:[2,35,106,132,136,184,185,193,272,273,274,281,282,286,290,291],powernv_defconfig:[246,247],powernv_flash:[246,247],powernv_op_panel:[162,215,226,227],powernv_rng:[162,215,226,227],poweroff:[70,146],powerpc64:[36,138],powerpc64l:138,powerpc:[2,25,38,106,139,150,171,172,175,226,227,231,236,257,277,281,282],powersav:[13,281,282],powervm:[132,246,247],ppaidip:224,ppc405:132,ppc64:[138,202,204,246,248],ppc64el:[147,148,246,247],ppc64le:[138,246,247,248],ppc:[2,308],ppc_featur:22,ppc_feature2_darn:[180,182],ppc_feature2_scv:[180,182],ppc_stk_lroff:[281,284],ppm_special_wkup_hyp_reg:221,ppr:[246,247],pq:[157,187,220,224,308],pr:[21,22,73],pr_alert:1,pr_crit:1,pr_debug:[1,226,227],pr_emerg:[1,182,183],pr_err:[1,182,183,226,277],pr_error:[195,290,291],pr_fmt:[171,172,287],pr_info:[1,171,173,195,229,230,274,275],pr_insan:1,pr_notic:[1,171,172,173,274,275,290,291,298],pr_printf:1,pr_trace:1,pr_warn:[1,287],prabhu:[184,185,193],practic:[2,38,43,133,139,171,172,217,231,232,233,272,273,274],pradeep:[184,185],pradipta:[219,220],pratic:[281,282],prbs31:[182,183],prd:[6,31,128,146,147,148,149,164,166,170,173,178,181,185,193,198,201,205,208,220,224,231,232,233,251,254,255,266,272,273,274,275,281,284,286],prd_fw_msg:[171,172],prd_purge_cmd_reg_busi:274,prd_purge_cmd_trigg:274,prd_purge_cmd_typ:274,pre:[4,35,42,171,172,202,226,227,229,230,246,247,248,290,291,308],precis:[2,22,171,172,258,278,281,282,306],preconfigur:[226,227],predecessor:88,predict:[13,35,154,157,182,183,187,229,284],predictor:[281,284],preeti:[147,148],pref:188,prefac:22,prefer:[22,109,139,171,172,221,229,230,231,233,274,275,308],preferenti:[226,227],prefetch:[171,172,238,246,247,267,272],prefix:[2,24,219,226,227,228,246,247,272,273,290],prefr:[226,227],prehistor:[290,291],preliminari:[147,171,172,202],preload:[146,147,148,171,173,182,183],prem:[171,274],prepar:[55,125,135,226,229,230,231,272,273,278,281,282,286,290,291],prepare_hbrt_upd:[272,273],prepare_link_chang:[135,202,203],prereq:[281,282],prerequisit:140,prerror:[35,144,220,298],prescript:22,presdet:[213,220],presenc:[2,6,21,22,23,46,51,58,86,132,134,135,213,220,221,224,226,227,228,229,230,246,247,252,272,273,274,275,281,282,286,290,291],present:[2,4,5,8,12,13,22,28,29,32,33,34,41,42,46,48,50,51,67,70,75,84,102,106,114,120,121,127,132,139,141,145,147,148,157,162,171,172,173,177,182,183,187,193,201,202,203,206,213,215,217,220,224,226,227,228,229,230,231,233,246,247,258,265,267,269,271,272,273,274,275,278,281,282,290,291,305,308],preserv:[2,7,40,71,132,292,305],preset:[171,172],pressur:[231,232],presum:[42,246,247,272,273],pretermin:41,pretti:[1,108,117,171,172,202,203,220,231,232,246,247,285,290,291],prettier:[147,149],prev:[146,171,174],preval:151,prevent:[77,79,95,147,148,160,161,171,172,174,182,183,202,204,226,227,229,230,231,232,246,247,250,251,254,265,267,272,273,274,275,276,281,282,284,286,287,288,290,291,303,305,308],previou:[109,110,118,119,120,138,143,147,171,172,173,174,178,179,180,181,182,203,204,217,226,231,232,233,246,247,249,250,251,252,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,277,278,279,280,281,282,287,288,289,290,291,304,308],previous:[73,75,81,147,148,154,162,171,172,220,224,226,227,231,232,234,270,271,274,275,286,290,291,308],prevous:221,price:[281,282],pridhiviraj:[171,193,202,203,204,219,220,224,226,229,231,274],primari:[2,35,58,171,172,193,202,203,246,247,271,274,275],primarili:56,principl:39,print:[0,1,39,126,134,147,149,154,160,162,171,172,173,178,182,183,199,200,202,203,207,215,220,221,224,226,227,228,229,230,231,232,236,246,247,253,257,261,267,272,273,274,275,277,280,281,282,283,286,287,290,291],print_:145,printf:[1,35,36,44,126,220,224,226,227],printk:[217,231,233],prio:[220,308],prior:[5,8,42,43,100,106,120,134,146,147,149,165,180,202,204,224,231,232,246,247,258,261,278,280,281,282,285,290,291,303,304,305],prioriti:[1,28,57,62,68,121,129,132,134,147,148,171,172,174,182,183,200,226,227,229,230,308],privat:[35,139,305],privileg:[21,22,171,175],prlog:[1,164,171,172,226,227,246,247,277,287],pro:161,proactiv:[166,182,183],probabl:[58,133,155,171,172,184,185,231,232,250,259,261,272,273,274,275,279],probe:[0,86,135,182,183,189,220,221,226,227,246,247,261,271,272,273,274,275,278,280,281,282,284],probe_phb4:[271,274,275],problem:[21,50,68,78,134,139,140,145,160,171,172,173,176,178,181,182,183,202,203,204,208,212,219,220,224,226,227,228,229,230,231,232,236,238,245,246,247,250,251,252,257,258,265,272,273,274,275,277,278,281,282,284,286,287,290,291],problemat:[2,246,247,281,282],proc0:[171,172,182,183,249,281,284],proc1:[171,172],proc:[2,36,37,70,109,110,119,141,171,174,220,226,227],proc_chip:[171,172,246,247],proc_gen:146,proc_init_data:220,proc_int_lin:220,proce:[131,182,261,280,281,282],procedur:[40,41,171,172,174,180,182,183,202,203,226,227,228,229,231,232,237,239,240,246,247,262,267,268,272,273,274,275,281,282,290,291,294,303,305],proceed:[182,183,246,248],process:[0,17,23,28,35,37,71,73,75,77,118,122,133,134,147,148,161,162,164,171,172,173,182,183,184,185,187,193,197,202,203,204,215,217,219,220,221,224,226,227,229,230,231,233,258,265,272,273,274,275,278,281,282,286,290,291,304,305,307,309],process_occ_reset:[226,227,231,232],process_one_work:[217,231,233,261,280,281,282],processor:[2,5,6,14,26,28,33,34,35,40,43,44,50,51,57,58,67,68,70,73,77,93,103,110,114,115,120,121,122,130,132,134,170,171,172,180,182,183,184,185,194,219,220,226,227,231,232,234,241,246,247,257,267,270,272,273,274,275,277,281,282,284,302,308],procudur:41,produc:[2,134,141,178,182,183,220,226,257,274,275,276,281,282,290,291],product:[25,26,38,140,141,171,172,202,203,204,205,206,220,226,228,281,282,302,306,308],profil:[229,230],prog:[213,220,281,284],progif:41,program:[37,40,41,56,71,171,172,197,202,203,220,226,227,229,230,231,232,237,260,272,273,274,275,281,282,308],programm:[246,247],progress:[0,35,41,96,109,110,113,119,127,146,184,186,204,206,220,229,230,263,267,272,274,275,281,282,284,285,290,291],prohibit:81,project:[22,138,171,172,182,183,202,203,220,281],promin:[202,203],promot:294,prompt:[171,172,195,202,203,220,221],prone:220,prop:21,propag:[229,230,290,291],proper:[7,171,172,175,193,220,226,227,257,270,274,275,281,283],properli:[2,17,118,133,161,162,171,172,173,182,183,193,197,202,203,206,212,213,215,220,222,226,227,228,229,230,231,232,233,238,274,275,281,282,286,290,291,303,304,306],properti:[2,6,7,8,9,10,13,14,15,16,17,18,19,20,21,22,24,29,34,38,44,56,59,69,70,84,87,88,89,90,93,97,98,99,100,101,103,105,110,114,121,130,132,134,145,151,155,171,172,173,174,175,182,183,184,185,187,194,201,202,203,204,220,222,226,227,228,229,230,231,232,234,246,247,250,255,257,258,267,272,273,274,275,278,281,282,284,286,290,291,304,307,308,309],propos:[182,183,231,232,261,290,291,303],propreti:[114,204],proprietari:28,protect:[171,172,202,203,240,246,247,254,256,274,275,276,281,282,303,305],protector:[144,160,171,172,184,185,202,203,212,220],protocol:[22,35,171,172,182,183,220,226,227,231,232,250,251,258,274,275,278,281,282,284,290,291],protoocol:[250,274,275],prove:[140,226,228,290,306],proven:[171,172,272,273,290,291],provid:[0,2,9,21,22,23,28,34,35,37,41,44,51,58,71,75,118,119,120,121,123,132,133,138,139,157,161,171,172,182,183,187,189,202,203,220,221,224,225,226,227,229,230,231,232,233,246,247,251,257,258,272,273,274,275,276,278,281,282,284,290,291,297,302,303,304,306,307,308],provis:308,proxi:[231,232],prsv:[171,172],ps:35,psafe:[201,202,203],pseri:132,pseudo:[131,272,273],psi:[2,144,146,151,153,171,172,202,203,217,220,226,227,231,233,298],psihb:2,psl:[102,171,172,182,183,231,232],psr:[13,109,171,172,229,230],psscr:[220,231,232],pstate:[70,145,171,172,173,174,178,182,183,189,201,202,203,226,227,248,279,281,282],pstore_dump:[261,280,281,282],ptcr:72,pte:193,pter:[231,232],ptr:[41,171,172],pu:274,publicis:[226,227],publicli:[136,272],publish:[40,226,227,306],pull:[122,171,172,175,220,231,232],pump:[220,268,274,275],punish:[290,291],punt:[182,183],pure:[2,66,132,133,140,143,206,274,275],purg:[274,286,290,291],purpos:[2,4,41,42,83,133,134,140,171,172,173,182,183,220,231,232,246,247,250,274,275,290,291,302,308],purr:[2,58,146],push:[35,171,172,220,224,241,258,278,281,282],put:[2,13,35,56,58,133,171,172,174,179,182,183,193,202,203,204,205,206,216,220,226,227,228,229,238,246,247,258,274,278,281,282,286,290,291],putmemproc:224,putscom:[182,202,203,229,230],putspi:274,pvr:[136,161,171,172,182,220,226,227,229,230,257,274,275,277,281,282],pvr_type_p9p:[281,282],pwc:115,pwr:135,pwrctl:[281,282],py:[226,227,272,273,274,275],python:[202,203,272,273],q:[36,153,157,187,217,231,233,308],qemu:[132,147,148,184,185,202,203,220,221,226,228,272,273,278,281,282,285,286,290,291],qemu_bin:272,qflag:308,qindex:308,qpage:308,qsize:308,qtoggl:308,qtrace:[171,172,202,203],qtracer:[171,172],quad:[14,171,172,274,275,281,282],quadrat:[274,275],qualiti:139,queri:[54,57,70,71,74,118,158,171,172,184,185,190,191,193,231,234,246,247,256,272,273,274,275,277,281,282,283,308],question:[229,230],queu:[62,67,70,129,162,202,203,215,220,267,271,272,273,274,275],queue:[35,38,62,67,68,118,131,146,162,165,171,172,201,202,203,213,215,220,224,226,227,228,229,230,231,232,258,274,278,281,282,304],quick:[171,172,254,274,275],quicker:[171,172],quickli:[182,183,267,272,285,290,291],quiesc:[113,180,182,231,232,246,247,248],quiescd:[246,248],quiesce_hold:113,quiesce_lock_break:113,quiesce_reject:113,quiesce_resum:113,quiesce_resume_fast_reboot:113,quiescent:308,quiet:[1,272],quieten:[171,172,246,247,248,252,271,272,273,274,275],quirk:[146,193,202,203,211,220,267,272,273],quirk_no_chiptod:[274,275],quirk_no_rng:[290,291],quit:[44,150,171,172,182,183,220,229,230,250,272,273,274,275,281,283,290,291,306],quiten:[246,247],r0:[132,281,284],r10:132,r11:[274,275,281,284],r12:[132,225,274,275],r13:[132,160,212,220,246,247,281,282],r1:[132,246,247,281,282,284],r2:[132,281,282],r3:132,r8:132,r9:[132,246,247],r:[35,162,163,171,174,182,183,202,203,204,208,209,214,215,216,217,220,224,225,226,227,229,231,233,246,247,256,261,271,272,273,274,275,277,280,281,282],ra:[281,282],race:[146,147,148,157,159,162,171,172,187,191,194,196,202,203,215,217,220,229,231,233,241,246,247,257,277,281,282,308],rach:241,raci:[246,247],racili:[171,172],rack:[274,275],rackspac:136,radix:[72,115,194,202,203,220,226,227,281,284],rafael:202,raid:[281,282,286,290,291],rais:[19,108,122,160,171,172,182,183,193,220,226,227,229,230,231,232,240,246,247,274,275,290,291,303,307],ram:[45,147,148,272,273,274,275,281,282],ramanna:[184,185],ran:[71,162,165,215,224,226,227],random:[28,171,172,180,182,198,202,203,220,226,227,229,231,232,241,259,279],rang:[2,7,13,15,24,30,31,40,50,56,74,88,89,93,100,103,107,134,147,149,155,165,171,172,174,181,182,183,184,185,202,203,208,220,221,222,224,226,227,229,230,242,254,257,258,266,272,273,274,275,276,278,281,282,283,290,291,308,309],ranganathprasad:[171,274],raptor:136,rare:[153,159,169,170,196,226,227,241,246,247,248,278,281,282],rashmica:274,rate:[2,52,75,145,165,182,183,184,185],rate_phi:75,rate_sz:75,rather:[1,42,44,76,110,115,117,130,131,132,144,150,152,171,172,173,177,178,182,183,184,185,193,198,202,203,206,220,221,222,224,226,227,229,230,231,232,238,239,240,246,247,250,251,253,254,257,258,259,261,271,272,273,274,275,277,278,279,280,281,282,284,286,290,291,297,303,304],ratio:[16,38,42,229,230],raw:[2,182,183,202,203,274,275,280,281,282,286,290,291],rawhid:[220,224,274],rbr:[231,232],rc1:[5,38,42,81,139,142,146,153,171,173,182,186,192,194,202,204,217,219,221,223,225,226,228,229,231,233,246,248,267,272,274,276,281,283,290],rc2:[8,38,139,142,146,171,174,192,202,205,219,222,223,226,231,234,246,274,281,284],rc3:[38,139,142,146,171,175,202,206,231,235,236,281],rc4:[4,38,139,142,171,202,231,267,272],rc5:[38,142,231],rc:[35,43,44,70,117,131,135,136,171,174,185,186,202,203,217,220,226,227,231,233,248,254,272,273,274,276,280,281,282,286,291],rc_rom_verifi:[171,174],rcu:[193,208,217,231,233],rcu_dynticks_eqs_exit:37,rcu_idle_ent:37,rcu_sch:[217,231,233],rcx:139,rdy:[171,174,246,248,261,280,281,282],re:[1,2,19,36,37,40,45,50,58,124,132,139,140,141,157,161,171,172,173,174,178,182,183,184,185,187,189,193,202,204,206,217,219,220,221,224,226,227,228,229,231,232,233,234,235,236,246,247,248,250,253,257,258,261,266,270,272,273,274,275,276,278,279,280,281,282,283,284,286,290,291,297,302,308],reach:[0,50,101,118,171,172,226,227,258,278,281,282,286,290,291,308],reaction:51,reactiv:[182,183],read:[0,2,9,12,20,28,35,37,41,50,51,52,67,68,69,70,76,77,78,87,102,107,108,109,110,117,120,128,129,132,133,146,161,162,171,172,175,176,182,183,184,185,188,193,194,202,203,204,205,208,215,217,220,221,222,224,226,227,229,230,231,232,246,247,250,251,252,253,254,258,261,267,268,270,271,272,273,274,275,276,278,280,281,282,284,286,290,291],read_core_fir:[274,275],read_prd_msg:286,readabl:[21,22,35,132,134,171,172,202,203,226],reader:[132,290,291],readi:[35,202,203,258,261,278,280,281,282,283,290,291],readlin:[272,273,281,284],readm:[290,291],readoffset:[129,267,272,273],readonli:[220,281,284],real:[36,37,38,41,42,47,60,88,89,93,103,132,134,140,153,171,172,178,182,183,193,202,203,220,227,231,232,272,273,286,290,291,308],realist:[229,230],realiti:[246,247],realli:[165,171,172,202,204,226,227,228,229,230,246,247,261,272,273,274,275,280,281,282,284],realloc:[268,274,275,286],reap:13,rearrang:[231,232],reason:[5,17,35,42,46,50,51,58,70,121,122,132,139,171,172,182,183,220,224,226,227,228,238,246,247,250,253,258,267,271,272,273,274,275,278,281,282,290,291,302,303,304],reason_cod:35,reasoncod:[171,174],reassoci:[217,231,233],rebalanc:[290,291],reboot2:40,reboot:[0,35,40,47,51,70,102,113,145,146,147,148,149,151,152,154,162,173,174,178,184,185,202,203,204,214,224,226,231,232,246,247,250,257,258,261,263,267,271,272,273,277,278,279,280,281,282,284,285,288,290,291,293,295,296,297,305],reboot_typ:44,rebuild:[224,246,247,290,291],recal:[274,275],recalcul:305,receipt:54,receiv:[28,35,57,60,70,75,104,121,129,131,133,144,153,162,166,171,172,173,182,183,187,189,215,220,226,227,229,230,231,232,246,247,248,258,267,271,272,273,274,275,278,281,282,283,287,306],recent:[14,139,140,171,172,182,183,194,195,202,203,219,220,224,229,230,231,232,246,247,257,267,272,274,276,278,281,282,290,291],reciev:[226,227,228,261,280,281,284],recip:[22,246,248],recipi:[272,273],recogn:[229,230,308],recognis:[171,172,220,250,274,275],recommend:[2,44,88,132,138,147,148,157,165,171,172,178,179,180,181,226,227,249,250,251,252,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,277,278,279,280,285,286,287,288,289,293,294,295,296,298,299,300,301,303,308],reconfigur:[171,172,242],reconstitut:308,record:[51,84,138,154,161,171,172,182,183,219,221,231,232,281,282,290,291,293,306,308],record_id:[182,183],record_typ:35,recov:[58,70,150,157,159,162,166,171,172,178,182,183,187,193,196,215,226,227,229,230,240,246,247,258,261,278,280,281,282,284,286,290,291,305],recover:[58,122,159,171,172,196,202,203,231,232,271,274,275,281,282],recoveri:[6,58,70,102,134,146,150,161,164,169,170,171,172,181,182,183,208,226,227,228,229,230,231,232,236,242,246,247,251,258,266,270,271,272,273,274,275,278,281,282,283,286,290,291],recurs:[146,160,171,172,207,220,246,247,272,273],redbud:[281,282],redefin:305,redirect:[155,226,228],redistribut:138,redo:168,redon:[281,282],reduc:[102,144,147,148,153,171,172,182,183,193,220,226,227,231,232,236,254,258,272,273,274,275,278,280,281,282,286,290,291],reduct:[182,183],redund:[35,162,215,246,247,258,278,281,282],ref:[35,58,67],refactor:[146,161,171,172,182,183,226,227,237,281,282,297],refcount:[182,183,246,247,281,282,286,290,291],refer:[5,9,10,13,21,24,25,35,37,41,68,70,73,107,118,126,131,132,141,171,172,217,220,221,226,228,231,232,233,246,247,272,273,286,290,291,303],referenc:[2,31,303],reflect:[35,88,171,172,182,183,213,220,226,227,246,247,259,279],reformat:[274,275,305],refresh:136,refus:[213,220],reg:[2,3,9,13,24,26,27,28,29,30,31,32,33,69,84,106,130,162,171,172,178,182,183,197,202,203,215,220,226,227,241,245,246,247,257,272,273,274,275,287,300,308,309],reg_format:[130,257,274,275],regard:[35,68,86,135,188,189],regardless:[182,183,229,230,258,278,281,282,308],regb:[84,229,230],regex:[224,226,227],region:[2,3,27,31,33,38,39,50,89,103,171,172,173,175,180,182,183,184,185,202,203,220,221,224,226,227,228,231,235,238,246,247,254,261,274,275,276,280,281,282,303,305,306],regist:[2,13,21,22,28,40,42,50,51,58,69,70,71,84,87,115,122,129,132,135,146,147,148,149,150,159,162,171,172,173,174,176,178,182,183,188,193,195,196,197,199,200,202,203,213,214,219,220,221,224,226,227,228,229,230,231,232,236,238,242,245,246,247,248,251,255,257,261,267,268,270,271,272,273,274,275,277,280,281,282,283,284,286,288,290,291,301,306,308,309],register_consol:[290,291],register_dump_region:146,register_early_udbg_consol:[290,291],registr:[7,38,71,208,231],regress:[13,220,246,247,281,284,286,290,291],regular:[4,29,219,220,221,222,223,224,225,226,227,228,246,247,274,275,303],reimplement:135,reinit:[95,115,133,171,174,231,234],reinit_scop:95,reiniti:[115,221],reinstat:[229,230],reject:[17,47,171,172,178,182,183,246,247,261,280,281,284],rel:[133,147,148,184,185,291],relai:131,relat:[17,22,35,41,49,58,61,68,69,70,76,131,159,171,172,182,183,195,196,202,203,205,220,226,227,229,231,232,246,247,257,265,268,272,274,275,290,291,303,308],relationship:[34,146],relax:[41,74,182,183,274,275],releas:[4,35,42,49,67,71,75,81,113,131,132,136,141,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302],relev:[13,29,35,42,44,246,247,248,290,291,308],reli:[5,58,101,106,131,132,135,171,172,182,183,193,202,204,229,230,238,246,247,272,274,275,276,281,282,286,290,291,308],reliabl:[70,147,148,213,220,226,228,246,247,272,273,281,292],relianc:[164,246,247,281,284],relic:[132,229,230],relief:[231,232],reliev:[182,183],reload:[43,129,151,162,163,209,213,214,215,216,217,220,224,229,231,233,267,272,273,274,275],reloc:[103,193],remain:[1,37,39,41,70,108,114,171,172,173,182,183,202,203,217,222,226,227,231,232,246,247,248,258,274,275,278,281,282,286,290,291,305,308],remaind:[4,182,183],remap:[171,172,238,272,273],remian:[201,202,203],remind:[286,290,291],remnant:[42,290,291],remot:[144,171,172,222,259,279,306],remov:[0,2,22,38,44,61,71,81,90,93,101,103,104,130,134,135,136,137,144,146,147,148,161,162,164,172,174,179,182,183,187,193,202,203,204,206,215,221,226,228,229,230,232,241,246,247,254,258,261,262,265,266,267,272,273,275,276,278,280,285,286,294,303,307,308],renam:[130,147,148,171,172,182,183,220,226,227,246,247,250,274,275,290,291],render:[246,247,305],rendez:[246,247,271,274,275],rendezv:[246,247],renegoci:220,rent:220,renumb:[226,227],reorder:[272,273],repeat:[290,291],repeatedli:[281,282],replac:[1,8,34,42,50,68,130,132,146,147,148,149,154,171,172,176,177,178,179,180,181,188,189,190,195,196,197,198,199,200,201,202,204,207,208,209,210,211,212,213,214,215,216,217,218,237,238,239,240,241,242,243,244,245,246,247,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,274,275,277,278,279,280,281,284,285,286,287,288,289,290,291,293,294,295,296,298,299,300,301],replai:[121,306,308],repli:[139,256,277,281,282,283],repo:36,report:[17,35,36,41,58,70,117,127,130,132,139,147,148,149,153,157,161,164,169,172,174,175,177,181,182,183,184,185,187,193,202,203,204,208,230,232,242,246,247,248,250,251,258,261,266,267,270,271,272,273,275,278,280,281,282,283,284,290,291,300,303,304,308],report_cl_pair:308,report_error:35,repositori:[171,172,274],repost:[162,215,290,291],repres:[2,4,14,15,16,18,19,21,28,31,33,34,49,56,76,77,88,89,90,93,97,98,103,105,121,135,171,172,175,202,203,220,281,282,290,291,306,308,309],represent:[2,24,132,266,272,273],reproduc:[246,247,281,282],reprogram:58,requent:131,request:[14,23,28,37,41,43,44,47,50,58,60,67,68,70,71,73,74,75,76,77,78,84,96,97,102,108,109,110,115,117,118,119,120,121,122,127,129,131,135,139,146,147,149,162,166,171,172,182,183,189,193,201,202,203,208,213,215,217,220,226,227,229,230,231,232,234,246,248,255,258,261,268,270,272,273,274,275,276,278,280,281,282,284,285,290,291,307,308],request_en:74,requeu:[272,273],requi:[226,228],requir:[0,2,4,17,21,22,28,35,41,42,46,49,52,56,58,70,76,84,91,117,118,122,126,130,131,132,135,147,149,150,161,162,171,172,174,179,182,183,193,201,202,203,214,217,221,224,225,226,227,229,230,231,232,233,246,247,248,251,258,265,266,272,273,274,275,278,281,282,283,284,285,286,288,290,291,297,302,303,306,308],requisit:40,requr:23,requri:73,rerun:41,rescu:134,resend:[35,50,51,159,171,172,191,258,278,281,282],reserv:[0,3,7,15,16,21,23,24,25,30,32,35,38,39,41,42,60,103,117,131,132,133,139,147,148,149,165,171,172,175,181,182,183,193,201,202,203,208,220,221,222,224,226,227,228,229,230,231,232,246,247,248,250,261,266,272,273,274,275,280,281,283,285,290,291,295,306,308],reserved2:60,reserved_1:70,reset:[0,1,4,41,43,50,68,70,87,96,100,113,122,129,133,134,135,144,150,151,158,160,162,163,167,168,171,172,173,174,175,178,180,182,183,184,185,190,191,193,201,202,203,205,209,211,212,213,214,215,216,217,220,221,224,226,227,228,229,230,231,232,233,236,238,241,245,246,247,251,255,258,261,264,265,267,272,273,274,275,278,279,280,281,282,286,287,288,290,291,295,297,303,308],reset_ntl:[171,172,237,240,290,291],reset_ntl_releas:[290,291],reset_partit:[231,232,286,290,291],reset_pm_complex:[226,227,231,232],reset_scop:96,resev:[224,226],resid:[13,145,171,172,182,183,229,231,236],residu:[58,146,246,247],resili:[158,190,205],resist:[118,303,305],resolut:[280,281,282,290,291],resolv:[171,172,191,194,224,226,227],resons:209,resort:[5,182,183,281,282,305],resourc:[0,19,37,67,68,100,131,134,139,146,147,148,171,172,173,204,229,230,231,232,261,266,272,273,274,275,280,281,282,285,290,291],resource_dealloc:35,resource_id:[26,171,172],resp_siz:[231,232],respect:[5,34,58,171,172,224,252,258,267,268,272,274,275,278,281,282,284,303,308],respond:[98,162,171,172,215,226,227,229,230,242,258,265,272,273,278,281,282,286,290,291,305],respons:[35,67,70,73,108,109,110,117,119,157,161,162,167,168,171,172,182,183,187,193,202,203,209,215,217,226,227,228,229,230,231,233,238,246,247,256,258,261,265,267,268,272,273,274,275,278,280,281,282,285,287,290,291,303,306,308],respos:[163,216,226,227],respresent:[246,247],rest:[51,220,226,227,246,247,261,274,275,280,281,282,286,290,291,303],restart:[162,193,215,220,226,227,261,280,281,282,286,290,291],restor:[13,123,171,172,201,202,203,226,227,229,230,231,232,236,246,247,248,251,258,274,275,276,278,281,282,308],restrict:[171,174,246,247,290,291],restructur:[202,203],result:[4,14,40,43,47,56,101,108,131,139,150,157,171,172,174,182,183,187,197,201,202,203,204,208,213,220,226,227,229,230,231,232,233,243,246,247,254,257,258,261,265,267,270,272,273,274,275,276,277,278,280,281,282,284,285,286,287,290,291,306,308],resum:[0,113,226,227,231,232,246,248],resvp:[261,280,285,290,291],resync:[58,116],resynchronis:116,ret:[231,232],ret_from_kernel_thread:[217,231,233,261,280,281,282],retain:[171,172,231,232,274,275],retrain:[226,228,231,232,251,274,275,281,282],retreiv:[50,54,77,81,83,84,92,110,112,117,125],retri:[43,44,58,76,125,134,153,158,160,162,168,171,172,190,191,193,202,203,208,213,215,217,220,226,227,228,229,230,231,232,233,236,242,243,258,261,268,270,272,273,274,275,278,280,281,282,286,290,291],retriev:[7,38,40,51,53,71,84,85,86,117,118,135,220,221,226,271,272,274,275,281,282,299,308],retrigg:308,retriv:[70,135],returend:42,reus:[41,226,227,246,247],rev:[41,134,164,213,220,251,272,273,274,275],reveal:[201,202,203],revers:[171,172,193],revert:[145,146,171,172,175,182,183,202,204,229,230,231,234],review:[2,132,139,147,148,161,164,184,185,187,193,202,203,204,259,279],revis:[21,26,27,30,41,134,141,159,171,172,174,182,183,196,202,203,224,226,227,229,230,231,232,272,273],revisit:[171,172,272,273],revolv:[274,275],reword:[195,202,203],rework:[146,171,172,184,186,193,202,203,204,220,226,227,231,232,246,247,258,272,273,274,275,278,281,282,295],rewrit:[220,226,227,231,232,246,247,274,276],reza:[171,219,226,229,231,274],rfc:[139,220],rhel6:150,rhesu:[2,136,151],ri:[122,162,178,182,183,215,226,227,246,247,281,282],rick:[229,230],rid:[16,97,100,134,147,149,182,183,189,202,203,226,228,272],right:[2,28,37,138,152,171,173,178,182,183,184,185,226,227,228,246,247,258,267,271,272,274,275,278,281,282],ring:308,riser:[246,247,259,279],riser_id:[256,277,281,282],risk:[224,272,280,281,282],rlen:225,rm:106,rmw:[226,227],rng:[171,172,229,230,241],ro:[56,281,282],road:231,rob:229,robert:[171,231],robust:[168,171,172,231,258,278,281,282],role:[153,281,283],roll:[224,274,276],rollov:164,rom:[23,171,172,202,203,290,291,306],romcod:[202,203],romem:[274,275],romulu:[136,171,172,220,246,247,250,272,273,278,281,282,284,290,291],room:[53,226,228,258,278,281,282,290,291],root:[33,34,38,53,88,132,135,160,167,171,172,174,188,202,203,221,224,226,227,231,232,246,247,258,274,275,278,281,282,284,290,291,306],rootcmplxstatu:84,rooterrorstatu:84,rootf:[246,247],ror:35,rough:[22,171,172],roughli:[36,76,139,141,168,184,185,217,229,231,233,258,278,281,282,305],round:229,rout:[2,41,58,171,172,189,202,203,308],routin:[67,171,172,220,226,227,246,247,270,274,275],rpm:[4,184,185],rpr:[147,148,226,227],rr:224,rr_queue:[163,216,226,227],rrba_addr:134,rsrc:34,rst0027:10,rst:[202,203,231,233,303,306],rsv3:84,rsync:[226,227],rta:76,rtc:[38,42,108,114,144,145,146,147,148,162,184,185,215,226,227],rtc_dev_ioctl:[162,215,226,227],rtc_read_timeout_m:108,rtc_set_tim:[162,215,226,227],rtt:[30,101],rtt_addr:134,rule:[2,4,38,139,171,172,173,174,175,179,182,183,184,185,186,187,188,189,190,191,192,193,195,202,203,204,205,206,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,246,247,248,272,273,274,275,276,281,282,283,284,290,291,308],run:[6,8,13,17,21,27,35,36,37,39,41,42,47,58,61,70,73,131,132,133,139,140,141,144,145,146,147,148,153,161,164,165,166,167,168,171,172,174,180,182,183,184,185,193,205,207,217,220,221,226,227,229,230,231,232,233,235,236,240,246,247,248,257,258,260,261,267,271,272,273,274,275,276,278,280,281,282,284,285,286,287,290,291,306],run_command:[272,273],run_sm:[182,183,281,282],runtim:[0,1,4,5,6,38,39,51,133,138,145,161,168,171,172,175,182,183,206,246,247,254,272,273,274,275,285,290,291,308],russel:[171,184,185,187,193,202,203,219,220,224,226,229,231,274],rx:[28,171,172,229,230,237,251,256,268,274,275,286,290,291],rx_dccal:41,rx_fifo_address:28,rx_pr_phase_step:[231,232],rx_rc_enable_auto_rec:[274,275],rx_train:41,rxe:[231,232],rxe_arb:[231,232],rxerr:164,rxfifo:[28,129,229,230,267,272,273],ryan:274,s002204:[213,220],s0:[40,224,274],s1:224,s64:120,s812l:136,s821lc:136,s822l:136,s822lc:136,s:[1,2,4,28,35,43,44,50,51,53,68,70,72,75,76,84,85,86,104,109,113,116,118,121,122,125,130,133,134,135,136,138,139,140,141,146,147,149,151,161,162,166,168,171,172,173,174,175,177,178,179,180,182,183,184,185,188,189,193,195,201,202,203,204,205,206,212,213,214,217,219,220,221,222,224,225,226,227,228,229,230,231,232,234,236,238,241,246,247,248,250,252,253,254,255,256,257,258,259,261,265,267,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,290,291,297,303,305,306,308,309],sa:35,sad:[147,149],safe:[42,44,55,70,81,132,171,172,202,203,204,224,226,227,229,230,246,247,248,272,273,274,280,281,282,290,291,305],safeguard:[171,172,239],safer:[171,173,193],safeti:131,sai:[35,70,150,171,172,182,183,226,228,246,247,255,274,275,281,284,290,291,308],said:[139,220,274,275],salgaonkar:[147,148,164,171,184,185,187,193,202,203,219,220,226,229,231,274],sam:[35,184,185,193,202,203,231],same:[0,2,14,17,22,28,37,44,52,70,72,88,95,100,103,108,117,120,122,131,134,138,140,141,146,154,157,160,171,172,173,174,178,182,183,184,185,187,188,195,202,203,207,217,220,221,222,226,227,228,229,230,231,232,233,241,246,247,248,250,257,265,268,270,272,273,274,275,276,281,282,283,284,286,290,291,303,305,308],sampl:[24,37,38,162,171,172,174,215,217,220,226,227,231,232,246,247,261,272,273,280,281,283,286],sampsel:24,samsung:221,samuel:[147,148,161,171,184,185,229,231,274],san:138,sandwich:4,sane:[171,172,254,274,275,276],sanit:[224,226,227,267,272],saniti:[61,180,182,183,193,226,227,246,247,290,291],sapphir:2,sastri:[202,203,204],sata:[274,275,281,284],saturdai:[200,298],save:[1,13,44,50,122,133,162,214,229,231,232,236,272,273,274,275,281,282,284,290,291,301,306,308],saw:274,sb:[171,172,306],sb_verifi:[171,172],sbe:[38,40,164,182,226,227,231,232,246,247,274,275,285,287,290,291],sbin:182,scalabl:[274,276],scale:[24,134,189,226,227,231,232],scan:[58,171,172,182,183,184,185,201,272,273,274,275,290,291],scare:[202,231,232],scari:[220,231,232,246,247],scatter:47,scenario:[0,51,113,135,151,171,172,202,217,221,231,233,258,261,274,275,278,280,281,282,300,305],schedul:[114,133,171,172,202,204,229,230,274,275],scheel:224,scheme:[4,38,120,132,143,144,226,227,246,247,303,308],schreiter:219,scl:[265,272,273],scom:[2,13,27,29,37,61,171,172,178,182,183,201,220,221,224,226,227,228,231,232,238,242,246,247,272,273,274,275,281,282,283,286,290,291,309],scom_read:[201,202,203],scom_writ:[201,202,203],scomc:[246,247],scomd:[246,247],scome:[246,247],scope:[35,95,171,172,193,220,268,274,275],score:226,scp:[226,227],scratch:[132,272,273],screen:[127,220,229,230,231,232],scribbl:[274,275],script:[6,133,161,170,171,172,184,185,202,203,205,220,226,227,246,247,274,281,284,290,291],scrub:[171,172,181,208,220,231,232,241,266,272,273],scsi_transport_fc:[162,215,226,227],scsi_transport_sa:[162,215,226,227],scv:[21,180,182],sda:[265,272,273],sdr1:219,se:[162,215,226,227],search:[171,172,174,182,183,203,226,227],sec:[52,217,231,233,246,247],secboot_tpmnv_control_index:305,secboot_tpmnv_vars_index:305,second:[1,2,70,113,114,117,127,146,147,148,149,150,162,171,172,173,182,183,184,185,186,187,188,189,190,191,202,203,204,215,217,220,221,225,226,227,228,229,230,231,232,233,246,247,248,254,258,265,267,272,273,274,275,276,278,281,282,283,286,288,290,291,308],secondari:[2,38,42,58,113,133,171,172,202,203,257,271,274,275,277,281,282,286,290,291],secondary_cpu_entri:[182,183],secondary_wait:[182,183],secondli:[182,183,226,227,229],secti:35,sectio:35,section1:35,section:[4,17,35,39,58,76,132,171,174,202,203,226,227,231,232,274,275,281,282,284,290,291,303,305],sector:[229,230],secur:[23,38,42,133,173,174,182,183,202,203,205,220,226,227,231,232,245,253,257,265,272,273,274,275,277,281,282,293,302,303,305],secure_boot_headers_s:[274,275],secureboot:[3,17,25,38,171,172,174,182,183,202,203,303,305,306],secureboot_init:306,secureboot_tpm_info:[171,172,246,247],secureboot_verifi:[171,172,306],secvar:5,secvar_backend_driv:303,secvar_flag_protect:[303,305],secvar_flag_volatil:303,secvar_nod:303,secvar_storage_driv:303,secvar_update_bank:303,secvar_variable_bank:303,see:[1,2,4,5,7,17,19,24,27,29,37,40,41,44,45,47,50,52,55,56,57,58,59,62,63,64,65,67,68,70,71,76,77,78,108,110,115,119,122,127,132,133,134,137,138,139,141,144,151,155,171,172,173,174,175,182,183,184,185,186,187,188,189,190,191,192,193,195,202,203,204,205,206,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,238,246,247,248,271,272,273,274,275,276,280,281,282,283,284,285,290,291,297,303,305,306,307,308],seem:[81,140,165,171,172,202,204,220,224,226,227,229,231,234,246,247,255,257,258,259,261,272,273,274,275,277,278,279,280,281,282,284,286,290,291,303],seen:[24,135,157,164,171,182,183,187,220,229,230],seeprom:[0,219],segment:[2,30,90,103,134,147,149,171,172,238,281,284],segment_num:90,segment_numb:134,segment_s:[103,134],sel:[0,24,35,37,147,148,149,161,166,184,191,193,220,226,227,287],sel_head:35,select:[17,20,22,28,56,88,90,93,97,103,105,171,172,175,226,229,246,247,267,272,281,282],self:[123,182,183,231,232,246,247,248,303],semant:308,send:[0,35,47,51,58,67,68,70,71,139,140,150,161,162,165,166,171,172,174,181,184,185,189,193,202,203,205,208,209,215,217,220,224,226,227,229,230,231,232,233,246,247,248,249,258,261,266,271,272,273,274,275,278,280,281,282,283,287,290,291,305,306,307],senichev:274,sens:[171,172,229,230,246,247,248,274,275,281,282,290,291,308],sensibl:[55,141,160,226,228,246,247,274,303],sensist:23,sensit:[13,121,161,246,247,308],sensor:[5,15,16,38,42,54,110,120,146,151,162,167,175,182,183,184,186,206,213,220,226,228,231,235,242,246,247,272,273,298],sensor_data:120,sensor_group:[178,182,183],sensor_handl:120,sensor_hndl:120,sensor_num:35,sensor_typ:35,senstiv:23,sent:[0,35,41,52,68,104,109,110,114,119,120,134,135,139,144,163,171,172,182,183,201,202,203,216,226,227,231,232,246,247,258,261,263,274,275,278,280,281,282,283,287,296],sep:[231,233,300],separ:[2,4,35,51,108,132,171,172,208,222,226,227,231,246,247,258,274,275,278,281,283,290,291,308],seper:[224,226],septemb:[161,163,164,165,166,197,198,199,200,216],seq:[231,232,274],sequenc:[38,118,133,135,159,162,166,171,172,173,182,183,196,202,203,205,209,215,226,231,232,241,246,247,258,270,272,273,274,275,278,280,281,282,284],sequenti:[56,134,304],sequoia:[231,232,281,282],ser_buffer_out_timeout:[217,231,233],seredynski:274,seri:[35,130,139,162,163,171,176,177,178,179,180,181,184,187,188,189,192,202,208,209,210,213,214,215,216,217,218,221,231,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,277,278,279,280,281,285,286,287,288,289,293,294,295,296,297,298,299,300,301,302,303],serial:[1,2,26,34,35,68,132,147,148,152,171,172,180,209,217,220,231,233,246,247,272,273,274,275,281,282],serialis:226,seriou:[178,182,183],serirq:[202,203,220,226,227],serv:[68,281,282],server:[2,57,113,121,122,134,161,171,172,220,231,232,274,290,291,308],server_no:[112,124],server_numb:[57,121,134],servic:[0,3,5,34,35,38,42,43,44,50,51,67,73,77,110,114,120,133,140,147,149,171,172,220,221,231,232,246,247,261,280,281,282,290,291],session:[217,231,233,274,275],set:[0,1,2,4,10,14,15,16,17,18,19,20,21,22,35,38,41,42,47,48,50,56,57,58,61,68,70,72,73,74,75,78,87,88,89,93,98,99,101,103,104,105,107,108,109,110,112,114,115,118,121,122,123,124,127,130,131,134,135,136,137,146,147,148,150,157,160,161,162,164,169,171,172,173,177,178,179,180,182,183,184,185,187,193,195,201,202,203,204,205,206,215,216,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,234,236,237,238,244,245,246,247,248,250,251,256,261,265,267,268,270,271,272,273,274,275,277,280,281,282,283,284,285,286,290,291,297,298,303,305,308],set_attention_st:135,set_capi_mod:[281,282],set_irq_config:220,set_mv:97,set_mve_en:98,set_opal_consol:[272,273],set_p:[100,281,283],set_peltv:101,set_phb_mem_window:103,set_power_st:135,set_queue_info:220,set_vp_info:220,set_wdt:[272,273],set_xiv:[160,212,220,308],set_xive_p:105,setpci:220,setter:[246,247],settl:[226,227],setup:[22,38,41,48,52,71,73,75,150,159,161,178,182,183,196,202,203,220,221,226,227,229,230,246,247,272,273,274,280,281,282,284,286,290,291,304],setup_arch:[290,291],sever:[35,58,70,83,92,130,132,141,147,149,156,171,172,178,182,183,202,203,221,226,227,229,230,246,247,258,261,263,267,268,274,278,280,281,282,284,290,291,296],sevic:40,sf:[73,162,178,182,183,215,226,227,246,247],sgpe:[171,172],sh:[147,148,149,166,170,171,172,178,182,183,226,227],sha1:[140,141,143,306],sha1sum:141,sha256:[305,306],sha512:[3,171,172,173],shake:202,shall:308,shallow:[231,232],shan:[147,148,164,184,185,193,202,203,204,219,220,224,226],shanker:[171,274],shape:[22,272,273],share:[14,22,32,52,75,139,147,149,171,172,173,175,182,183,221,224,226,227,229,230,238,272,273,274,281,282,283,284,290,291,306],shave:[171,172],shenoi:229,shield:306,shift:[2,16,38,42,106,121,171,173,175,226,227,229,230,281,283,302,308],shift_bug:[179,182],shilpasri:[147,148,171,184,185,193,202,203,219,220,224,226,229,231,274],ship:[42,44,139,140,141,147,148,150,171,172,253,257,259,273,274,276,279,281,282],shoot:[108,171,172,205],shortcut:220,shorten:133,shorter:[171,172,220],shortli:[114,171,172,182,236,239,281,282],shot:[246,247],should:[1,2,3,4,5,7,16,17,19,21,22,24,28,32,33,35,36,39,41,42,43,44,45,49,50,51,55,56,58,59,61,70,72,73,76,78,83,84,88,89,90,93,97,98,101,103,105,110,113,121,122,123,128,131,132,133,134,135,136,138,140,141,145,147,148,149,150,155,162,167,171,172,173,174,179,182,183,184,185,189,195,201,202,203,204,205,206,213,214,216,217,220,221,224,225,226,227,228,229,230,231,232,233,241,243,246,247,248,250,251,252,257,260,261,268,269,272,273,274,275,276,280,281,282,284,285,286,290,291,297,303,305,308],shouldn:[2,221,226,227,229,230,231,232,234,272,273,308],show:[4,162,164,167,168,171,172,182,183,195,214,224,229,230,246,247,260,261,272,273,274,275,280,281,284,285,290,291],shown:[2,70,246,272,273],shreya:[184,185,193],shriya:231,shrunk:[182,183],shudown:[258,278,281,282],shuffl:[274,275],shut:[51,152,166,171,174,217,231,233],shutdown:[0,43,47,70,113,114,122,151,152,153,171,172,193,217,231,233,258,272,273,278,281,282,290,291],sibl:[2,122,171,174,266,272,273],side:[4,8,26,39,47,52,130,162,171,172,173,182,183,193,205,213,215,216,224,226,227,229,230,231,232,241,246,247,250,251,258,261,267,271,272,273,274,275,278,280,281,282,284,286,287,290,291],sigbu:[181,208,266,272,273],sigil:260,sign:[3,13,17,23,138,139,140,171,172,219,231,232,250,273,274,275,302,304],signal:[17,56,58,97,105,108,117,131,134,170,171,172,173,181,201,208,226,227,229,230,231,232,254,266,272,273,274,275,281,282,295,303,304],signal_system_reset:122,signatur:[17,35,182,183,219,225,303,304,306],signifi:[31,56,100,108,132],signific:[29,171,172,182,183,224,281,283,308],significantli:[171,172,221,229,230,254,274,275],signifig:[265,272,273],signoff:[140,147,148,161,164,184,185,187,193,202,203,204],silenc:[220,226,227,228],silent:[171,172,224],silva:226,sim:[231,232,274,290,291],simic:[193,281,282,290,291],similar:[22,29,41,44,106,114,122,124,127,132,136,147,149,182,183,219,220,221,222,224,225,226,227,228,246,247,272,273,274,275,281,282,290,291,304,305],similarli:[2,21,182,183,246,247,272,273,281,282,290,291],simpl:[35,37,39,46,76,171,172,182,183,202,203,220,226,227,228,246,247,272,273,274,275,286,290,291,303,306,308],simpler:[21,246,247,248,290,291],simpli:[49,108,121,171,172,182,183,199,246,247],simplic:[68,281,282],simplifi:[171,172,246,247],simul:[36,43,132,133,144,145,146,147,148,185,204,246,248,274],simultan:[171,172,290,291,308],sinc:[2,14,37,42,58,81,117,131,133,146,147,151,152,171,172,174,180,182,183,193,203,204,205,206,220,224,226,227,228,229,230,231,232,233,246,247,248,250,265,266,272,273,274,275,281,282,283,284,286,287,290,291,302],singh:[171,193,202,203,226,231],singl:[4,14,30,39,41,78,132,133,169,170,171,172,178,182,183,220,226,227,231,232,246,247,261,268,272,274,275,281,282,284,290,291,293,303,308,309],sit:[2,231,232],site:[202,203],situat:[13,43,122,131,153,157,169,171,173,187,207,208,217,220,224,229,230,231,233,260,261,265,272,273,280,281,282,284,290,291,303],situr:[182,183],six:[139,141,219,220,221,222,223,224,225,226,227,228,267,272],size:[2,3,5,8,9,11,12,14,17,23,24,26,28,30,31,32,34,35,36,39,45,47,50,51,52,53,55,60,67,69,70,71,75,76,78,84,88,89,103,118,130,132,133,134,147,148,171,172,173,174,175,182,183,184,186,194,202,203,204,217,219,220,222,224,226,227,229,230,231,232,233,238,246,247,255,257,258,261,267,270,272,273,274,275,276,277,278,280,281,282,283,286,290,291,293,303,305,306,308,309],size_dt_str:[226,227],size_dt_struct:[226,227],size_t:[35,306],sizeof:[35,45,171,172],skeleton:[145,171,172,193],skiboot:[0,2,3,4,8,19,21,22,24,27,30,32,34,42,43,44,46,49,50,56,81,88,89,90,93,97,98,101,103,105,112,126,131,132,134,135,136,137,139,142,305,306,307],skiboot_bas:[133,274,275],skiboot_boot_test:[226,227],skiboot_gcov:[36,290,291],skiboot_initrd:[226,227],skiboot_map:[225,290,291],skiboot_part_hdr:[182,183],skiboot_s:133,skiboot_vers:141,skip:[36,113,160,171,172,174,182,220,226,227,229,230,242,246,247,250,253,257,274,275,277,279,281,282,286,290,291,299,303],skip_perst:[229,230,281,282,286,290,291],skiroot:[132,290,291],skisym:[225,226,227],slave:[139,184,185,226,227],slb:2,slca:[146,171,172],sleep:[13,48,94,133,158,171,172,190,191,193,220,231,235,246,247,272,273,290,291],slight:[161,182,183],slightli:[19,21,166,171,172,202,204,219,220,221,222,224,225,226,227,228,250,272,274,275,281,284,290,291],slof:133,slot0:[281,284],slot3:[184,185],slot5:[256,277],slot:[2,38,85,86,104,154,161,164,171,172,175,182,183,184,185,187,201,202,203,204,213,216,220,221,224,226,227,229,230,231,232,246,247,256,259,261,267,268,272,274,275,276,277,279,280,281,282,284,286,288,290,291],slot_ctl:[213,220],slot_norm:[281,282],slotclk:220,slotn:154,slotstatu:84,slottabl:220,slow:[44,108,117,134,193,207,217,220,231,232,233,251,274,275,290,291],slower:[229,230,246,247],slowli:[229,230,261],sltsta:[213,220],slw:[2,165,171,172,182,183,184,185,199,200,202,203,207,220,221,226,228,229,231,232,246,247,248,266,272,273,281,282,294],slw_init:[246,248],slw_late_init:[171,172],slw_reinit:[226,228,294],small:[12,84,127,131,133,136,171,172,178,182,183,202,203,212,213,214,215,220,224,229,230,246,247,271,273,274,275,305],smaller:[2,171,172,226,227,268,272,273,274,275,281,282,305],smallest:[139,171,175],smart:[176,182,183,193,202,203,204,219,220,246,247,266,272,273],smart_writ:293,smarter:[202,203,281,282],smbus_writ:[184,186],smc:[0,220,226,227,246,247,278,281,282],smith:[132,147,148,161,164,171,184,185,187,193,202,203,204,219,220,224,226,229,231,274],sml:32,smoothli:151,smp:[226,227,231,233,300],smp_handle_nmi_ipi:[261,280,281,282],sms_atn:0,smt4:[226,227],smt8:[226,227],smt:[147,148,171,172,221,226,227,246,248,266,272,273],smt_medium:[202,203],snapshot:[37,246,247],snarf:[281,284],snip:[182,201,224,271,274,275,281,282],snippet:[35,37,59],snoop:[102,171,172,173],snooz:229,so:[1,2,5,8,12,13,17,20,21,26,28,35,37,39,41,43,44,50,51,55,73,76,81,88,93,115,121,122,124,127,129,132,133,135,138,139,140,141,146,147,149,151,159,160,161,162,171,172,173,174,175,177,178,179,182,183,184,186,194,196,201,202,203,204,209,213,215,216,217,219,220,221,222,224,226,227,228,229,230,231,232,233,234,235,236,238,241,246,247,248,250,253,255,256,258,259,261,266,267,270,271,272,273,274,275,278,279,280,281,282,283,284,285,286,287,290,291,297,302,303,304,308,309],soc:[272,273],sock:[182,183],socket:[39,58,145,147,171,172,231,232,238,272,274,275,281,282],sodium:284,soft:[15,162,166,169,178,181,182,183,208,213,215,220,226,227,231,233,246,247,258,266,272,273,278,281,282],softrom:[171,172],softwar:[21,22,44,131,171,172,219,220,226,227,229,230,237,261,265,272,273,280,281,284,306,308],sol:[217,231,233],solicit:139,solid:182,solut:[139,171,172,178,226,227,231,242,253,254,258,274,275,278,281,282],solv:[202,203,211,246,247,274,275],some:[0,1,2,5,6,16,17,19,20,21,22,35,41,42,43,50,51,58,70,73,76,77,93,95,100,113,115,118,122,124,125,131,132,133,134,135,138,139,140,141,144,145,147,148,151,153,157,160,162,171,172,173,174,177,178,181,182,183,184,185,187,189,190,193,194,195,201,202,203,204,206,207,208,214,215,217,220,222,224,226,227,228,229,230,231,232,233,234,235,236,237,238,241,246,247,248,250,251,256,258,259,260,261,265,266,267,269,271,272,273,274,275,277,278,279,280,281,282,283,284,285,286,290,291,297,303,308],somebodi:[274,275],somehow:290,someon:[171,172,224,274,275],someth:[1,2,20,42,43,83,117,124,125,130,131,132,140,141,171,172,174,178,182,183,217,226,227,231,233,246,247,248,265,271,272,273,274,275,281,282,303],sometim:[58,109,139,151,171,172,226,227,231,232,241,250,272,273,274,275,290,291],somewhat:[13,226,227,231,236,290,291,308],somewher:[81,131,202,203,220,236,246,247,254,274,276,303],sonam:192,soon:[44,90,93,103,131,134,139,171,172,189,202,203,217,226,231,233,281,282,285,290,291],soonaft:139,sort:[2,4,154,171,172,181,208,245,246,247,290,291],sourc:[22,31,35,38,40,56,57,71,74,88,89,90,93,97,98,100,101,103,105,121,138,144,159,171,172,179,182,183,184,186,189,194,196,202,203,220,226,227,241,274,275,290,291,306,308],sourceid:84,sp:[130,146,162,171,172,213,220,231,232,233,261,274,275,280,281,282],spa:[75,182,183],space:[1,2,17,27,30,36,38,42,49,50,71,83,88,89,90,93,103,133,134,147,149,150,154,162,171,172,174,181,182,183,202,203,204,208,215,217,220,221,224,226,227,229,230,231,233,234,236,246,247,248,258,261,266,267,272,273,274,275,278,280,281,282,285,286,290,291,302,303,305,307,308,309],spam:[198,246,247,248,281,282],span:88,spap:75,sparingli:133,spars:[146,181,184,185,220,290,291],spcn:[68,162,213,220],spd:[171,172,220,250],speak:[43,133,139,140],spec:[25,49,68,71,114,132,147,149,182,183,184,185,189,213,220,226,227,228,231,233,261,267,270,272,274,275,280,281,284,285,286,290,291],special:[4,13,70,171,172,182,183,193,205,226,227,231,235,255,274,308],special_wakeup_count:[231,235],special_wkup_:221,specif:[0,1,2,4,17,18,21,22,28,29,31,38,42,43,51,58,70,82,83,90,93,103,106,107,115,118,123,131,133,134,139,140,145,157,173,175,182,183,187,193,198,202,203,220,226,227,229,230,231,232,234,246,247,248,251,258,261,265,272,273,274,275,276,278,280,281,282,283,285,290,291,297,303,308,309],specifi:[13,21,22,27,29,37,40,51,52,55,56,61,71,75,78,88,89,90,93,103,105,118,122,123,124,141,147,149,171,172,182,183,202,203,216,220,226,227,229,230,231,232,246,247,253,258,271,274,275,278,281,282,286,290,291,308,309],specific:[61,103,123],specifii:[246,247,249],specul:[171,172,180,241,246,247],speed:[2,27,41,182,183,184,186,202,203,220,221,226,228,229,230,231,232,246,247,281,282,286,290,291],spell:155,spend:[52,160,171,207,220,254,274,275,281,282,308],spent:[171,175,254,274,275],sphinx:[202,203],spi:[272,273],spin:[43,44,76,124,171,172,182,183,217,226,227,231,233,274,275],spinlock:133,spinloop:133,spira:[171,172,174,180,193,220,224,229,230,246,247],spirah:40,spiral:[160,207,220],spit:[182,183],spl:[182,183],spl_wakeup:[182,183],splat:[272,273],split:[30,47,146,171,172,220,224,226,227,231,233,258,274,275,278,281,282,283,305],spot:[258,278,281,282],sppcrd_chip_info:220,spr:[13,37,123,133,226,227,231,232,246,247,260,272,273,281,284],sprintf:144,sprn:123,sptr:[271,274,275],spuriou:[171,172,195,202,203,229,230,231,236,290,291],spurr:[2,58,146],spurriou:[231,232,246,247],squash:[161,171,172,281,284,294],sr:[261,280,285,290,291],sram:[182,183,193,274,275],src:[35,71,153,157,182,183,187,231,232],srci_priority_high:[171,174],sreset:[171,172,178,220,231,235,246,247,248,281,282],sreset_all_oth:[171,172],sreset_all_prepar:[171,172],sreset_kernel:[171,172],sreset_world:[171,172,220],srinivasan:[147,148,161,171,184,185,193,202,203,219,220,224,226,229,231,274],sriov:220,srr0:[162,171,173,182,183,214,224],srr1:[122,162,171,173,182,183,214,224,281,282],ssd:[281,282],ssh:[140,162,215,226,227,231,232],ssl:[274,276],st:220,stabil:[134,171,172,221,246,248,251,268,274,275],stabilis:[139,219,220,221,222,224,225,226,227,228],stabilti:[286,290,291],stabl:[38,139,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302],stack0:[268,274,275],stack1:[268,274,275],stack:[2,22,23,30,102,133,144,147,148,160,162,171,172,173,175,178,182,183,212,214,215,219,220,226,227,228,231,232,246,247,257,258,261,270,272,273,274,275,277,278,280,281,282,284,290,291,306],stack_check:144,stacktrac:[182,183],stage:[0,135,171,173,204,226,227,231,232,258,271,274,275,278,281,282,305],stai:[35,182,183,246,247,272,273,281,282,290,291],stale:[290,291,308],stall:[193,208,217,231,232,233,267,272,274,275],stand:[32,202,204],standalon:[274,275,306],standard:[2,28,35,41,50,132,133,171,172,220,226,227,241,246,247,256,272,273,277,288],standardis:[171,172,246,247],standbi:[265,272,273],stanlei:[147,148,164,184,185,187,193,202,203,219,220,226,231,274],start:[2,4,8,22,24,33,37,38,39,41,42,47,50,52,56,58,61,70,71,88,89,90,93,96,97,98,101,103,105,112,113,122,131,132,133,134,141,162,171,172,173,174,182,183,184,185,193,201,202,203,208,214,215,217,220,222,224,226,227,229,230,231,232,233,236,238,239,240,241,243,246,247,248,254,258,261,271,272,273,274,275,276,278,280,281,282,286,290,291,308],start_address:124,start_here_common:[290,291],start_kernel:[290,291],start_pm_complex:[171,172],start_preload_resourc:[226,227],starting_pci_address:[103,134],starting_real_address:[103,134],startup:[58,290,291],stash:[246,247],stat:[184,185,202,274],state:[0,17,19,21,35,40,42,44,48,50,54,58,68,74,78,80,84,85,86,94,96,98,101,103,104,108,109,110,112,115,119,123,124,131,132,133,134,135,139,145,146,150,152,154,160,162,163,164,168,171,172,175,179,180,182,184,185,191,201,202,203,204,213,215,216,220,221,224,226,227,228,229,230,231,232,234,235,242,246,247,248,251,256,258,261,264,265,266,271,272,273,274,275,277,278,280,281,282,283,284,285,286,288,290,291,303,304,305,306,308],statement:[171,172,290],statist:[184,185,193,210,217,231,232,301],statr:14,statu:[2,19,26,30,32,35,41,47,54,58,68,70,81,97,103,104,109,110,112,119,134,135,146,147,148,157,162,171,172,174,180,182,183,187,193,198,202,203,206,213,215,220,224,226,227,228,229,230,231,232,234,242,245,246,247,271,272,273,274,275,281,282,284,286,290,291,306],status2:220,stb:[133,171,172,173,174,202,204,220,245,246,247,253,274,275],stb_final:[171,172],std:[246,247,281,284],stdio:[171,172,220],stdout:[130,220,274,275],steal:[165,272],step:[35,44,58,147,148,171,172,220,226,227,246,247,272,273,274,275,281,282,285,290,291,303],stephani:274,stewart:[132,141,147,148,161,164,171,172,184,185,187,193,202,203,204,219,220,224,226,229,231,259,274,279],stick:[2,222],sticki:[267,272,274,275],still:[1,35,45,120,121,130,146,171,172,182,199,200,202,204,205,217,220,224,226,227,228,231,232,233,236,241,246,247,261,271,272,273,274,275,280,281,282,284,290,291,297,308],stinfo:[246,247],stipul:[270,274,275],stock:34,stofer:[171,274],stomp:[133,182],stop0:[231,232,246,248],stop0_lit:[229,266,272,273],stop11:[171,172,246,248],stop1:[272,273],stop1_lit:[266,272,273],stop2:[266,272,273],stop2_lit:[266,272,273],stop3:[272,273],stop4:[182,183,231,232,246,247,248],stop5:[171,172,246,248],stop:[13,21,37,38,39,42,43,48,51,58,60,61,113,133,146,157,171,172,181,184,185,187,193,208,212,217,220,231,232,233,242,246,247,248,256,261,265,266,267,272,273,274,275,277,281,282,284],stop_api:[171,172],stope:61,stopocc:144,stopreg:[231,232],storag:[17,50,51,76,118,281,282,290,291],store:[2,3,17,23,37,50,51,58,69,76,84,85,86,87,93,99,104,118,132,162,171,172,175,178,179,182,183,202,203,214,219,220,229,230,231,232,241,246,247,270,274,275,281,282,290,291,302,303,304,305,306,308],store_eoi:[179,182],storeeoi:[226,227,308],stq:[250,267,270,272,274,275],strai:206,straight:220,straightforward:[274,275],strang:[162,214],strategi:[14,68,162,214,225,258,278,281,282],stratton:[136,259,279],stream:[171,174,226,227],strech:[265,272,273],street:138,stress:[171,172,281],stretch:[226,229],strict:22,stride:231,string:[2,4,5,17,18,21,22,31,35,44,70,126,132,135,141,145,158,171,172,182,183,202,203,220,226,227,246,247,250,256,272,274,275,277,280,281,282,287,290,291,294,305,306,308],strip:[4,171,172,220,274,275],strong:[171,172,184,185,202,203],strongli:[132,139,165,182,183,219,223,303],strtoul:[229,230],struct:[35,47,50,60,67,70,84,106,111,127,133,135,182,183,193,194,206,220,224,225,226,227,229,230,272,273,274,275,277,281,282,287,290,291,293,303],structur:[34,35,36,40,58,67,70,84,133,134,137,171,172,193,220,224,226,227,231,232,246,247,250,261,274,275,276,280,281,282,285,287,290,291,303,304,308],stub:[171,172],stuck:[58,134,153,161,162,169,171,172,175,199,202,203,211,215,226,227,231,233,246,247,248,251,257,261,272,273,274,275,277,280,281,282,284],stuff:[146,182,183,212,220],stupid:2,stw:[162,214],style:[2,4,50,202,203],suart:[231,232],sub:[9,31,35,53,60,135,136,162,171,172,215,224,309],subaddr:60,subaddr_sz:60,subcmd:[217,231,232],subcommand:[171,172],subdivid:[281,284],subesqu:[229,230],subject:[140,303,308],submit:[38,77,118,127,138,182,183,224],submitt:138,subnod:31,subordin:[160,256,277],subpartit:[1,202,204,231,232],subramaniyam:229,subscrib:138,subsect:303,subsequ:[2,22,117,153,171,172,181,182,183,189,208,209,226,227,228,229,230,242,258,266,272,273,278,281,282,303,306],subset:[22,54,182,183,229,230,246,247],subsi:35,substanti:231,substitut:[171,172],subsystem:[35,171,172],subsystem_id:35,subtl:[285,290,291],succe:[115,131,171,172,178,182,183,208,231,232,243,274],succeed:[131,171,172,239,290,291],succesfulli:[61,308],success:[40,43,47,51,52,54,61,69,71,72,73,74,79,87,91,99,100,107,109,110,113,115,119,120,122,123,125,127,128,129,131,157,160,162,167,171,172,181,182,183,187,208,215,217,226,227,231,232,233,266,272,273],successfulli:[17,41,45,50,51,53,54,55,60,61,67,70,75,76,78,82,83,84,85,86,92,102,104,112,113,116,118,131,171,172,182,202,203,224,231,235,261,274,275,280,281,282,303,304,308],sucess:[258,278,281,282],sudhakar:[226,231],sudo:[281,284],sue:[180,246,247],suffic:[246,247],suffici:[22,49,231,232,286,308],suggest:[171,172,219,223,268,274,275,280,281,282],suit:[5,108,138,195,202,203,220,226,227,250,274,275],suitabl:[139,182,183,193,202,220,226,228,231,246,247,267,272,274,275,281,282,308],sukadev:[171,229,231],summari:[22,58,70,130,261,280,281,282,290,291,303],superio:[272,273,278],supermicro:[4,136,202,213,219,220,224,246,247,259,279],supersed:[23,58,171,172],superset:22,suport:115,supplement:[281,284],suppli:[34,36,55,70,73,81,118,135,193,202,203,220,221,231,232,290,291],support:[2,4,5,6,10,11,17,19,20,21,22,24,26,28,30,36,37,38,41,42,43,46,49,50,51,52,58,60,61,67,68,69,70,71,73,78,79,81,82,83,84,85,86,87,90,93,99,100,102,103,104,106,107,109,110,114,115,118,119,120,121,122,123,129,130,131,135,139,141,145,146,147,148,149,150,153,155,161,164,166,171,172,174,175,179,180,182,183,186,189,193,202,203,204,205,206,209,210,213,219,220,221,223,224,226,227,228,229,230,231,232,233,238,241,242,246,247,248,250,251,255,261,265,271,272,273,274,275,278,280,281,282,283,285,287,290,291,292,295,297,300,302,303,306,307,308],suppos:[171,172,182,183,226,227,229,230,238,265,272,273],suppress:[231,274,275],supriou:245,supris:[281,282],suraj:[171,193,202,203,226,231],sure:[2,58,129,171,172,173,179,182,183,212,220,226,227,228,229,230,231,232,236,241,246,247,257,263,274,275,281,282,290,291,296,308],surpris:[2,135,202,203,220,221],surv:[35,162,215,226,227,231,232],surveil:[20,35,171,172],surviel:[162,215,226,227],surviv:[139,182,183],suspend:[115,177,182,183,231,234,281,283],sv830_027:39,sw288484:145,sw:[44,153,171,172,229,230,261,280,281,284,308],sw_driver:[171,172],swanson:274,swap:[47,171,172,182,183,226,228,290,291,305],swdn:[281,282],swich:221,swift:292,swirchboard:28,switchboard:[25,38],swtich:221,sxm2:[272,274,275],sy:[47,133,141,150,162,171,172,178,182,183,195,202,203,213,214,220,222,224,231,232],sychron:220,sylvia:274,symbol:[8,133,144,146,147,149,171,173,222,225,226,227,290,291],symbol_map:222,symptom:35,sync:[30,58,147,148,171,172,179,182,183,193,196,202,203,226,227,231,232,233,258,274,275,278,290,291,294],sync_msg:[261,280,281,282],sync_tim:[231,233],syncer:[281,282],synchon:220,synchron:[58,76,171,172,182,183,184,202,203,224,246,247,254,258,270,274,275,278,281,282,285,290,291,308],synchronis:[157,171,172,175,187],synchrou:[258,278,281,282],syncron:[246,247],syncronis:41,syndrom:[171,172],syntax:[44,281,282],sys_ioctl:[162,215,226,227],sys_reboot:[231,233],sys_reset_al:122,sys_reset_all_oth:122,syscal:[146,180,182],sysdump:[194,299],sysf:[19,133,171,172,182,183,222,224,290,291],syslog:[226,227],sysparam:[5,77,272,273],system:[0,1,2,4,5,10,12,15,16,17,18,19,20,21,22,24,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47,48,50,51,52,54,55,58,62,63,64,65,68,70,76,83,88,89,91,93,103,106,108,109,110,113,114,118,122,127,131,132,133,135,136,141,145,146,147,148,153,154,156,160,161,162,164,168,173,174,175,178,180,182,183,184,185,186,188,195,196,201,202,203,204,205,206,210,215,217,221,222,225,228,230,233,234,235,236,239,240,246,247,248,250,258,259,261,265,267,269,272,273,274,275,278,279,280,281,282,283,284,285,286,290,291,294,302,304,305,306,308],system_cal:[162,215,226,227,231,233],system_reset:[231,232],systemd:[6,184,185,205,220,229,230],systemsim:[147,148,171,172,220,225,226,227,246,247,272,274,290,291],sytsem:103,sz:69,t0:[89,261,280,281,282],t:[0,1,2,8,39,44,47,50,51,62,63,64,65,69,70,78,79,82,83,85,86,104,106,110,120,121,132,133,135,138,139,145,146,147,148,149,150,153,157,159,160,161,162,164,165,167,168,171,172,173,174,175,182,183,184,185,187,188,193,195,196,198,202,203,204,205,206,207,208,212,213,215,216,217,219,220,221,224,226,227,228,229,230,231,232,233,234,236,237,238,239,241,242,245,246,247,248,252,254,256,257,258,259,261,265,266,267,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,290,291,293,295,297,308],ta:35,tabl:[4,14,30,35,40,71,72,88,97,134,157,171,172,173,174,178,182,183,187,189,220,226,227,246,247,248,256,259,267,272,274,275,277,279,281,282,284,286,290,291,303],tack:[226,227],tag:[7,35,40,71,139,141,152,171,172,173,174,206,220,226,227,253,282,283,284,286,290,291],tag_val:71,tail:[4,258,278,290,291],taint:[162,178,182,183,215,226,227,246,247],take:[7,9,14,15,35,40,43,50,52,54,58,59,70,100,108,109,110,119,124,139,153,171,172,173,174,180,181,182,183,184,187,188,189,192,202,203,204,207,219,220,221,223,226,227,229,230,231,233,238,246,247,248,255,258,260,261,272,273,274,275,276,278,280,281,282,283,284,287,290,291,303],taken:[14,41,67,115,166,171,172,224,226,228,231,232,233,272,273,281,282,290,291,308],tale:[259,279],talk:[44,133,171,172,220,226,227,229,230,246,247],talo:[136,281,282,284],talosii:[281,284],tamper:[118,303,305],tap:[290,291],tapn:[290,291],target:[5,23,28,41,44,58,61,99,103,113,120,121,122,134,140,147,149,150,171,172,173,174,175,182,183,188,202,203,205,220,221,222,224,225,227,229,230,231,232,233,234,235,236,246,247,270,274,275,281,282,286,290,291,308],task:[133,162,215,217,226,227,231,233,246,247],tatlin:[290,291],tb:[58,146,164,202,203,231,233,236,246,247,261,271,274,275,280,281,282],tb_cmpval:[270,274,275],tb_compar:[270,274,275],tb_measur:[171,172],tb_residue_err:144,tbd:[2,308],tbl:106,tce:[30,88,89,106,134,171,173,174,175,194,226,227,255,271,274,275],tce_kil:[171,173],tce_level:[88,134],tce_mem_addr:42,tce_mem_s:42,tce_page_s:[88,134],tce_siz:106,tce_tabl:88,tce_table_addr:[88,134],tce_table_s:[88,134],tcg:[171,172,290,291,306],tcl:[144,146,161,182,183,202,203,226,227,246,247,281,282,290,291],tclreadlin:[272,273],tcp:[231,232],team:[141,171,172,173,182,183,184,185,226,227,228,231,232,246,247,268,274,275,281,282,283,290,291,297],tear:[226,227,246,248],technic:[42,290,291],technolog:[182,183,213,220,258,278,281,282],tediou:[182,183],tell:[51,99,141,171,172,182,183,202,204,217,220,224,226,227,231,232,233,246,247,267,272,274,275,281,282,290,291],temp:[19,171,172,271,274,275],temperatur:[13,19,54,70,146,171,172,226,227,229,230,246,247],templat:[75,135,182,183,271,274,275],temporari:[7,47,131,145,146,220,231,232,307,308],temporarili:[205,286,290,291,308],temporarli:[266,272,273],ten:[202,203,231,232],tenant:0,tend:[281,282],tendolkar:274,term:[138,147,149,226,227,258,272,273,278,281,282,286,290,291],term_numb:49,termin:[41,44,49,152,157,160,161,184,186,187,193,274,290,291],terribl:[274,275],test:[2,5,19,38,66,82,126,130,132,133,134,136,139,140,141,145,147,148,149,161,162,164,170,172,178,184,185,186,187,195,204,205,207,215,232,234,248,250,252,257,258,267,270,271,273,275,277,278,281,282,283,284,286,287,290,291,302],testcas:[162,182,215,226,227],text:[35,127,132,139,202,203,226,227,274,275,281,284,290,291],textual:[1,12,132],tfac:[70,144,246,247,261,280,281,284],tfmr:[58,70,146,171,172,231,236,246,247,261,271,274,275,280,281,284],tfmr_pariti:70,tg3:[162,215,226,227],th:35,than:[4,16,17,42,44,50,52,55,68,70,76,78,88,101,108,115,117,118,130,131,132,133,139,140,144,147,148,150,152,162,171,172,173,174,177,178,182,183,184,185,193,198,201,202,203,204,205,206,215,217,220,221,222,224,226,227,229,230,231,232,233,238,239,240,241,243,246,247,248,250,251,253,254,257,258,259,261,270,272,273,274,275,277,278,279,280,281,282,283,284,286,290,291,297,303,304,308],thank:[146,148,224,297],thankfulli:[171,172,231,232,241],thei:[1,2,4,19,21,22,28,35,37,41,50,106,122,123,128,131,134,135,138,150,162,165,171,172,175,182,183,189,202,203,215,219,220,226,227,228,229,230,231,232,233,239,241,242,243,245,246,247,248,250,251,258,261,265,267,271,272,273,274,275,278,280,281,282,284,286,290,291,297,303,304,305,308],them:[2,13,42,58,93,110,115,117,124,132,134,135,147,149,157,171,172,174,175,178,181,182,183,187,193,202,203,204,208,220,221,224,226,227,228,229,230,231,232,233,238,241,246,247,248,257,266,271,272,273,274,275,276,281,282,284,286,290,291,308],themselv:[41,184,185],theoret:[140,246,248],theori:[2,44,171,172,241,274,275],therefor:[88,150,171,172,174,229,230,246,247,268,274,275,281,282,284,303,305,309],thermal:[51,109,132,258,278,281,282],thet:308,thi:[0,1,2,3,4,5,7,9,12,13,14,15,17,18,19,20,21,22,23,24,26,27,28,29,31,33,35,36,37,39,40,41,42,43,44,46,47,48,49,50,51,52,54,55,56,57,58,61,62,63,64,65,68,69,70,71,72,73,74,76,77,79,81,83,84,87,88,89,90,91,92,93,95,96,97,98,99,100,101,102,103,105,106,107,108,109,110,113,114,115,116,117,118,119,120,121,122,123,124,125,127,128,129,130,131,132,133,134,136,138,139,140,141,143,145,146,147,148,149,150,151,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308],thin:[182,183],thing:[1,2,36,77,130,133,141,165,171,172,173,178,180,182,183,193,202,203,220,224,226,227,228,229,230,231,232,236,239,246,247,248,259,260,266,272,273,274,275,279,281,290,291,308],think:[2,81,139,147,149,162,171,172,202,203,207,215,217,220,226,227,229,231,233,261,272,273,274,275,286,290,291],third:[161,174,188,205,222,234,281,282,284],this_cpu:[267,272,273,277],thoe:[226,228],thoma:219,those:[2,4,21,22,29,31,35,37,100,103,131,135,141,150,160,162,164,171,172,182,183,189,202,203,214,219,220,224,226,227,228,231,232,241,246,247,250,258,272,274,275,278,281,282,283,286,290,291,308],though:[2,50,131,132,133,139,146,157,162,171,172,177,182,183,187,203,204,213,231,232,246,247,248,250,261,272,273,274,275,280,281,282,283,284,285,287,290,291,308],thought:[132,146,162,215,226,227,281,284],thousand:[274,275],thrash:[274,275],thread0:[257,271,274,275,277,281,282],thread:[2,14,28,37,40,58,112,116,122,124,133,147,148,169,171,172,182,183,184,186,193,202,203,208,217,226,227,229,230,231,232,233,242,243,246,247,248,257,258,261,266,271,272,273,274,275,277,278,280,281,282,284,308],thread_statu:112,three:[4,23,47,52,73,171,172,182,183,221,229,230,238,274,281,282,284,290,291,304,306],threshold:[13,134,251,274,275],thrill:219,throttl:[16,70,109,147,148,224],throttle_statu:70,through:[1,9,10,20,26,31,41,50,58,60,70,77,78,88,101,118,120,122,124,133,134,135,146,161,171,172,175,180,202,203,204,220,224,226,227,229,230,231,232,246,247,250,255,257,259,270,272,273,274,275,276,279,281,282,284,286,290,291,303],throughout:161,throughput:[171,172,182,183],thu:[2,14,41,44,54,110,153,160,171,172,189,226,227,231,232,238,252,256,259,270,272,274,275,278,279,281,282,290,291,308],thunk:[193,226,227],thursdai:[158,174,176,178,188,189,191,194,210,228,229,235,238,261,268,270,276,280,283,284,288,289,293,300,301],ti:[177,182,183,294],tick:[58,201,202,203,229,272,273,281,282],tick_nohz_idle_stop_tick:37,tid:[28,229,230,246,247],tie:[171,172,177,182,183],tighten:[246,247],tild:4,till:[231,246,247,267,272,286,290,291],tima:308,time:[1,5,13,35,37,38,40,41,42,44,54,58,60,69,77,88,103,108,115,124,129,131,133,134,137,139,140,141,145,146,147,148,150,153,157,160,162,164,165,167,168,171,172,173,175,178,180,182,183,187,193,201,202,203,204,207,209,213,215,217,218,220,224,226,227,228,229,230,231,232,233,235,236,238,244,246,247,248,254,255,256,258,260,261,265,266,268,270,272,273,274,275,276,277,278,280,281,282,283,284,286,290,291,303,308],time_wait:[146,147,148,193,202,203,261,274,275,280,281,282],time_wait_m:[202,203,261,280,281,282],time_wait_pol:[261,280,281,282],timebas:[1,2,30,58,108,116,147,148,164,169,171,172,182,183,193,202,203,229,231,232,246,247,274,275,281,282],timefram:[250,272,273],timeout:[35,109,110,113,114,119,128,146,147,148,160,162,164,166,167,169,171,172,182,183,184,185,201,202,203,207,215,217,220,226,227,229,230,231,232,233,235,236,242,243,246,247,248,258,265,267,270,271,272,273,274,275,278,281,282,286,290,291],timer:[5,58,70,146,164,171,172,173,193,199,202,203,207,217,220,226,227,229,230,231,233,241,243,246,247,255,258,261,271,272,273,274,275,278,280,281,284,285,290,291],timer_pol:[207,220],timestamp:[35,171,172,290,291],tini:[133,145],tl:[75,141,220],tlb:[2,115,226,227,228],tlbi:[171,172,173,267,272],tlbie:[226,227],tlp:[226,229,230],tlphdr1:84,tlphdr2:84,tlphdr3:84,tlphdr4:84,tm:[115,177,182,183,224,229,230,231,232,234,281,283],tm_suspend_en:[177,182,183],tmp:[182,183],tn71:[136,226,227],toc:[220,246,247,274,275,276,281,282],tod:[2,58,147,148,159,162,164,171,172,182,183,196,202,203,215,226,227,246,247,261,280,281,282],todai:[42,171,172,226,228,246,247,257,274,275,281,284,290,291],todo:[49,51,101,108,117,131,132,146,304],togeth:[22,171,172,174,177,182,183,274,275,308],toggl:[182,183,308],token:[31,42,45,46,47,49,51,52,70,104,109,110,119,120,126,131,132,135,171,172,178,182,183,208,243,246,247,271,272,273,274,275,308],told:[155,184,185,202,204,246,247],tonn:165,too:[22,84,128,130,171,172,182,183,184,186,195,202,203,221,224,226,227,228,229,230,231,235,246,247,272,273,274,275,276,281,282,290,291],took:[274,275,290,291],tool:[0,17,36,128,133,146,161,171,172,219,224,231,232,233,246,247,248,274,275,286,290,291,306],toolchain:[153,182,183,229,274,275],top:[14,17,31,37,45,140,147,148,161,164,171,174,182,183,202,203,217,220,226,227,231,233,246,247,258,267,272,273,278,297,309],topic:[272,273],topolog:[2,58,178,182,183,202,203,213,220,221,229,230,231,232,274,275,281,282],topology_add_dev:[231,233],tortur:[162,215,226,227],total:[24,35,88,89,103,147,148,161,164,171,184,185,187,193,202,203,204,219,220,224,226,229,231,261,274,275],totals:[202,204,226,227],touch:[162,215,220,226,227,229,230,290,291],toward:[193,204,220,221,222,224,225,227,230,261,272,280,281,282,302],tpm:[2,25,38,171,172,202,203,205,207,211,246,247,265,272,273,294,303,304,306],tpm_check_statu:220,tpm_chip:[171,172,173],tpm_i2c_interfac:220,tpm_i2c_nuvoton:[171,172,220,224],tpm_not_pres:[246,247],tpm_read_burst_count:220,tpm_read_fifo:220,tpm_register_chip:224,tpm_statu:[246,247],tpm_status_read_byt:220,tpm_timeout_d:220,tpm_write_fifo:220,tpmlogmgr:[171,172,306],tpmlogmgr_addev:306,tpmrel:[171,172,246,247],tpmrel_idata_hash_verif_offset:[171,172],tpo:[114,226,227],trace:[1,5,38,61,133,134,162,171,172,174,178,182,183,215,217,220,224,226,227,228,229,230,231,232,233,246,247,272,273,281,282,286,290,291],trace_:24,trace_cycl:37,trace_imc:[24,37],trace_imc_scom:24,trace_info:[290,291],trace_repeat:[290,291],tracepoint:[290,291],track:[113,146,171,172,217,219,220,221,222,224,225,226,227,228,229,230,231,233,258,261,269,274,275,278,280,281,282,285,286,290,291],tracker:[269,274,275],trade:[109,290,291],tradit:[2,171,172,308],tradition:[274,275],traffic:[102,171,172,239,258,267,272,278,281,282],trail:[267,272],train:[171,172,180,182,183,220,224,226,227,228,229,230,231,232,239,240,246,247,251,261,267,268,272,273,274,275,276,280,281,282,286,290,291],trajectori:[184,185],trampl:[246,248],transact:[21,102,115,160,162,171,172,182,183,208,214,220,225,226,228,229,231,232,234,238,243,265,272,273,281,282],transat:[226,228,231,232],transfer:[41,52,67,202,203],transit:[133,144,171,172,226,227,228,274,281,282,290,291],translat:[31,73,88,89,107,115,134,182,183,221,226,227,246,247],transmitt:[171,172],transpar:[132,134,251,274,275,308],transpend:164,transport:[171,172,246,247,250,258,274,275,278,281,282],trap:[162,178,182,183,215,226,227,246,247,272,273],travers:26,travi:[171,172,184,185,220,224,226,228,229,246,247,248,274,275,276,290,291],treat:[51,97,134,162,214,215,225,226,227,231,232,261,268,274,275,280,281,283,285,287,290,291,303],tree:[3,5,12,16,17,20,21,22,26,33,34,37,38,39,42,44,49,50,52,53,55,59,62,63,64,65,68,70,71,76,77,84,104,109,110,114,119,120,121,127,129,132,133,135,137,139,141,144,145,146,147,148,154,155,171,172,173,174,175,177,182,183,184,185,186,187,188,189,190,191,194,195,201,202,203,204,205,206,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,242,246,247,248,250,259,267,272,273,274,275,276,279,281,282,283,284,286,290,291,303,305,306],trend:[171,193,202,203,219,226,231],trerr:220,tri:[171,172,182,183,198,217,220,231,233,236,246,248,251,255,265,271,272,273,274,275,286,290,291],trick:[155,184,185,220],tricki:[220,308],trig:[162,214,224],trigger:[0,44,52,120,150,171,172,174,178,182,183,202,204,217,220,224,226,227,228,229,230,231,232,233,241,246,247,248,267,271,272,273,274,275,281,282,283,290,291,294,308],trigger_pag:[179,182],trim:[226,227],tring:224,trip:[171,172,241,274,275],tritz:226,trivial:[140,272],troubl:220,troublesom:[231,236],truncat:[147,149,193,280,281,282],trust:[23,25,38,133,173,202,203,205,220,231,232,245,253,257,274,275,277,281,282,283],trustedboot:[171,172,274,275,290,291,306],trustedboot_exit_boot_servic:[171,172,246,247],trustedboot_measur:[171,172,306],trustedbootcmd:306,try_lock:[171,172],try_lock_cal:[272,273,274,275],tscr:[226,227],tss:[171,172,306],tss_nv_writelock:305,tucson:236,tuesdai:[163,172,177,180,190,192,198,206,207,216,220,224,226,230,231,237,247,254,256,259,262,264,279,290,295,302],tuleta:[39,42,136,226,227],tunabl:[178,182,183],tune:[178,182,183,229,230,298],tunnel:[87,182,183,246,247],tupl:14,turn:[1,13,35,56,133,171,172,219,221,224,226,229,230,231,232,240,246,247,261,265,272,273,280,281,282,284,290,291,308],tve:[107,220,226,227,270,274,275],tvt1:[246,247],tvt:[171,173,174,226,227,229,230,246,247],tweak:[182,183,246,247],twi:[171,172,241],twice:[36,226,227,246,247,272,273,274,275,290,291,303],two:[1,2,4,14,31,35,37,41,44,59,68,100,108,127,132,133,139,140,141,147,149,150,161,171,172,173,174,182,183,184,185,188,197,199,211,216,222,224,226,227,228,229,230,231,232,233,235,237,238,240,243,245,246,247,248,249,258,266,267,272,274,275,278,281,282,297,303,305,306,308,309],tx:[171,172,194],tx_rxcal_dis:41,tx_rxcal_en:41,tx_zcal:41,txt:[21,22,31,171,172,288],tyan:[136,145],tyler:274,type:[0,2,10,16,17,18,19,21,22,24,26,27,28,29,30,34,35,37,40,43,50,51,54,60,61,67,68,69,70,82,83,84,106,109,111,119,120,129,132,135,147,148,149,151,171,172,174,178,182,183,189,193,202,204,220,221,225,226,227,229,230,231,232,242,246,247,250,268,271,272,273,274,275,281,282,290,291,303,308,309],typedef:127,typic:[2,16,22,50,52,53,60,76,86,104,127,131,133,134,147,148,182,183,229,230,254,274,275,281,282,284,308],typo:[158,182,183,189,201,202,203,206,220,226,227,271,272,274,275,281,282],u32:[21,109,110,119,120,171,175,305],u64:[17,68,71,120,171,175,305],u78c9:[10,34],u78d3:[246,247,271,274,275,281,282],u8:305,u:[70,136,147,148],uart:[1,2,151,154,164,184,186,220,224,231,232,246,247,274,275,289,298],uart_con_flush:[246,247],uart_opal_flush:[246,247],uav:[231,232],ubuntu:[162,171,172,173,215,220,226,227,274,275,276,290,291],uc:[270,274,275],ucod:[4,102,171,172,180,182,183,193,231,232,233,246,247,250,254,274,275,276,280,281,282],ud:[35,270,274,275],udbg_opal_putc:[290,291],udbg_writ:[290,291],udelai:[58,281,282],ue:[181,208,246,247,266,272,273],uefi:[290,291],ugli:[265,272,273],uglier:[226,227],uh:35,ui:12,uint16_t:[35,57,74,78,81,88,89,90,92,93,99,103,121],uint32_t:[35,44,47,50,53,56,57,59,60,61,62,63,65,69,75,77,78,82,91,97,98,101,105,106,113,114,117,120,121,128,129,202,203,226,227,308],uint64:[43,72],uint64_t:[42,45,46,47,48,50,51,52,53,55,56,59,60,61,67,68,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,112,114,115,117,118,123,124,126,127,128,202,203,303,308],uint8_t:[35,47,49,50,56,57,60,64,65,67,70,78,81,96,100,101,112,121,171,172,238,306,308],uio:[162,215,226,227],uio_pdrv_genirq:[162,215,226,227],ultim:[182,183,281,282],ultra_turbo:13,ultravisor:308,umac:[28,229,230],umask:220,un:[146,171,172,224,281,282],unabl:[43,49,58,109,110,118,119,246,247,281,282,285,290,291,297],unaccess:[286,290,291],unalign:[229,230,231,232,246,247,287,293],unannounc:139,unassign:21,unassoci:[217,231,233],unauthor:303,unavail:[112,217,231,233],unavoid:22,unawar:[246,247],unbal:[281,284],unchang:[272,273,274,275,308],unclear:[246,247],uncompress:132,uncondit:[171,172,237],uncondition:[147,148,171,172,202,203,204,226,228,231,232,269,271,274,275,303],unconnect:[246,247],uncorr:[256,274,275],uncorrect:[254,274,276],uncorrerr:164,uncorrerrorstatu:84,undefi:[246,248],undefin:[70,171,172,286,290,291,305],under:[2,6,8,9,10,13,22,28,31,42,58,70,113,114,132,138,139,144,153,169,171,172,174,175,178,182,183,187,193,194,203,204,220,222,226,227,228,229,230,231,232,236,241,246,247,274,281,282,284,285,286,290,291,305],underflow:[171,172],underli:[162,171,172,214,231,232,241,246,247,255,274,308],underneath:[22,44],understand:[40,68,138,139,141,162,171,172,215,220,265,272,273,290,291],undertand:220,undesir:[122,171,174,231,233],undo:[113,259,279],unexpect:[17,51,162,171,172,173,184,185,195,202,203,214,224,255,274,280,281,282,303,306],unexpectedli:[274,281,282,283,290,291],unfilt:[182,183,286,290,291],unfinish:205,unflatten:135,unfortun:[0,157,162,171,172,187,193,214,221,224,225,226,227,228,229,230,231,232,235,236,241,246,247,274,275,281,284,285,290,291],unfreez:182,ungat:[266,272,273],unhandl:[162,214,217,224,231,232,254,274,275,290,291],unhappi:[231,232],unifi:[2,145,147,149,182,183],unimpl:42,uniniti:[146,274],uninitialis:[182,183,226,227,272,273],unintend:[182,183],unintent:[251,274,275],union:70,uniqu:[18,19,22,28,33,35,56,88,120,134,178,182,183,281,308],unit:[2,22,34,38,61,145,154,157,159,170,171,172,182,183,184,185,187,193,196,224,226,231,232,246,247,257,274,275,276,281,283,290,291],unittest:229,unknown:[22,35,61,107,131,147,162,171,172,214,219,222,224,226,228,231,233,245,246,247,248,250,272,274,275,287,294],unless:[2,15,17,88,134,138,140,154,155,171,172,173,204,220,231,232,246,247,274,275,281,282,308],unlik:[43,96,120,127,141,182,183,224,229,230,231,232,273,274,275,281,283,290,291,303,305,308],unlink:50,unlock:[145,162,171,172,181,182,183,214,225,246,247,256,274,275,277,278,305],unlock_check:277,unlucki:[226,227],unmask:[121,171,172,220,245,308],unmodifi:308,unnam:[226,227],unnecessari:[160,226,227,274,275,308],unnecessarili:[231,232,246,247],unneed:[267,272],unnot:[231,232,281,282,290],unpack:[226,227],unpatch:193,unplug:[27,213,220],unrecover:[17,35,171,172,178,182,183,196,202,203,204,261,280,281,282,284],unregist:[40,50,71],unrel:203,unreli:[162,171,172,215,217,226,227,231,233,272,273],unreproduc:[246,248],unrespons:[162,191,193,208,215,217,226,227,231,233,289,298],unsaf:[81,144,171,172],unset:[267,272],unsign:[35,106,171,172,220,226,227],unspecifi:308,unstabl:[171,173,226,274],unsupport:[22,29,41,44,50,60,61,70,73,78,80,91,92,95,96,131,132,146,171,172,226,227,281,282,308],unsuppreq:164,unsuspect:[290,291],untest:[290,291],unthrottl:70,until:[0,4,17,42,44,50,62,74,108,113,117,125,135,153,163,165,171,172,174,175,179,182,183,201,202,203,204,205,208,216,217,220,221,224,226,227,229,230,231,232,233,240,241,243,245,255,257,258,261,265,271,272,273,274,275,278,280,281,282,285,290,291,308],untim:[171,174],untouch:[118,221],untranls:134,untransl:89,unus:[42,45,51,108,220,229,230,258,261,278,280,281,282,290,291,303,305],unusu:231,unwind:[246,247,281,284],uopwr:[26,171,172,182,183,249,281,284],up:[17,23,27,29,35,42,43,50,54,61,70,72,73,75,76,101,108,114,130,132,135,140,147,148,149,151,153,157,161,165,166,168,171,172,173,175,178,181,182,183,184,186,187,191,194,195,201,202,203,208,219,220,221,224,225,226,227,228,229,230,231,232,233,238,241,246,247,248,250,255,258,260,261,265,266,271,272,273,274,275,278,280,281,282,283,284,285,286,290,291,303,306,308],upcom:139,updat:[0,1,2,4,24,35,37,38,42,44,53,62,63,64,65,68,70,71,72,75,100,101,108,118,124,134,137,146,153,154,156,157,159,161,162,165,171,172,173,174,182,183,187,193,194,196,201,202,203,204,213,215,220,221,224,226,227,228,229,230,231,232,233,236,237,238,242,246,247,248,250,251,253,254,256,257,258,259,267,270,272,273,274,275,276,277,278,279,281,282,284,285,286,290,291,295,297,302,303,305,307],update_bank:303,upgrad:[22,157,171,172,226,253,272,273,274,275,290,291],upload:146,upon:[13,14,48,84,138,153,154,171,172,178,182,183,204,246,247],upper:[88,162,214,220,226,227,281,283,284],uppercas:[272,273],upstream:[50,101,139,140,141,164,171,172,182,183,189,195,202,203,246,247,248,259,274,279,281,282,283,290,291],uptick:219,upto:[35,120,171,175,290,291],ur:[171,172,238,271,274,275],urgent:134,us:[0,1,2,3,7,9,13,14,15,16,17,19,21,22,23,24,27,28,29,31,35,36,37,39,40,41,42,43,44,45,49,50,51,52,53,54,55,56,58,60,62,63,64,65,67,68,69,70,71,73,75,81,82,83,84,86,88,89,90,93,95,97,98,101,102,103,104,105,106,107,109,110,111,113,115,117,118,119,120,121,122,123,127,128,130,131,132,133,134,135,136,137,138,139,140,141,144,146,147,148,149,155,160,162,164,168,171,172,173,174,175,177,178,179,180,181,182,183,184,185,186,189,193,194,201,202,203,204,205,206,207,208,212,213,214,215,217,219,220,221,222,224,225,226,227,228,229,230,231,232,233,235,236,238,239,240,241,246,247,248,249,250,251,252,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,293,294,295,296,297,298,299,300,301,302,303,305,306,307,308],usa:138,usabl:[21,22,27,50,147,149,171,172,184,185,201,220,226,227,231,232,308],usag:[4,17,21,22,39,130,144,171,172,226,227,231,233,272,273,274,275,303],usb:[34,281,284],useless:[171,172,182,183,202,203,226,227,231,232,281,282],user:[0,1,2,17,21,22,23,33,35,36,68,104,115,132,139,141,147,148,158,161,162,171,172,173,181,182,183,184,186,189,198,202,203,204,208,215,220,225,226,227,228,229,230,231,232,246,247,248,253,258,266,267,272,273,274,275,278,281,282,284,286,290,291,297,302,304,307,308],user_map:[290,291],userdata1:[171,174],userdata2:[171,174],userspac:[6,17,21,22,132,133,146,161,180,182,183,224,231,232,246,247,252,260,272,273,281,282],usr:[182,183,225,286],usual:[2,58,70,77,135,154,171,172,202,203,219,226,227,246,247,267,271,272,274,275,286,290,291,308],utc:[231,233],util:[36,135,146,147,148,149,161,166,185,193,197,219,224,246,247,257,303,305,306],utilis:37,utin64_t:134,utl:[84,159,196],v0:[171,172],v100:[281,282,284,286,290,291],v10:[231,233],v1:[2,4,17,23,42,49,70,130,131,171,172,173,174,175,183,203,204,205,206,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,246,247,257,274,276],v2:[3,4,5,22,23,70,95,130,132,146,171,172,182,183,184,185,193,213,220,226,227,229,230,246,247,248,250,272,273,274,275,276,281,282,283,284,290,291],v3:[5,10,13,21,70,112,130,132,171,172,193,274,275],v4:[5,42,131,132,193,246,247,272,273],v5:[43,136,139,171,172,173,174,175,182,183,226,227,228,229,230,231,232,233,234,235,236,259,267,272,279],v6:[30,136,246,247,248,259,267,272,273,274,275,276,279,281,282,283,284,289,290,291,292,297,302],v:[4,155,184,185,274,275],va:[25,28,38,171,172,174,229,230,272,273],vagu:[286,290,291],vaibhav:[171,184,185,187,193,226,231,274],vaidyanathan:[147,148,161,171,184,185,193,202,203,219,220,224,229,231,274],val:[123,128],valeev:193,valgrind:[171,172,220],valid:[9,17,23,35,38,41,43,47,49,50,56,70,97,100,102,103,117,134,144,145,146,162,171,172,178,182,183,193,202,203,215,220,226,227,229,230,231,232,239,241,246,247,258,270,274,275,278,281,282,285,286,290,291,293,304,308],validate_mask:134,valu:[1,2,4,5,13,14,15,17,19,21,23,24,28,31,35,37,41,52,56,58,61,62,68,69,70,88,89,90,93,95,96,97,98,100,101,102,103,105,107,108,110,114,117,121,123,126,128,129,132,134,145,146,147,148,161,162,166,171,172,173,175,178,182,183,184,186,188,194,198,201,202,203,204,213,215,220,221,224,226,227,228,229,230,231,232,233,238,239,240,241,246,247,248,250,251,257,258,261,267,270,271,272,273,274,275,277,278,280,281,282,283,284,287,288,290,291,293,298,303,305,306,308],valuabl:133,vari:[1,35,153,259,274,275,279],variabl:[1,17,23,38,42,44,69,75,76,141,162,182,183,204,215,219,220,225,226,227,231,232,246,247,258,274,275,278,281,284,286,290,291,302,303],variable_bank:303,variant:[231,232,246,247,248,256,277,281,282,304],variat:132,varieti:[274,275,282],variou:[2,4,27,29,35,37,43,68,144,171,172,173,218,226,227,229,231,232,244,245,246,247,258,272,273,274,275,278,281,282,303,306,308],vas_addr:33,vasant:[147,148,161,171,184,185,193,202,203,204,219,220,224,226,229,231,258,274,278,281,282],vc:[14,145,171,172,241,308],vcpu:308,vcss:13,vdd:[13,145,171,172],vdid:[274,275],vdn:[171,172],ve:[36,147,171,202,219,224,226,228,229,230,246,247,259,260,272,273,274,275,279,281,282,286,290,291],vector:[21,22,134,157,171,173,187,202,203,220,231,232,233,271,274,275,281,282],vendor:[2,26,27,30,34,139,140,171,172,220,224,226,227,231,232,234,267,272,273,286,290,291],venic:136,ver:35,verbatim:138,verbos:[171,172,175,205,226,228,281,282,290,291],veri:[1,4,5,22,41,42,58,146,171,172,182,202,203,217,226,227,229,231,232,233,236,246,247,261,270,271,272,273,274,275,280,281,282,284,285,290,291,305],verif:[3,23,38,134,171,172],verifi:[3,23,150,171,172,173,182,183,204,257,259,274,275,277,279,281,282,286,290,291,300,302],versa:[109,281,282],version:[1,2,3,8,21,22,24,25,26,35,38,41,42,43,46,47,50,67,70,84,115,130,131,132,138,140,143,144,147,148,149,150,171,172,173,174,175,178,179,180,181,188,189,190,192,193,195,196,197,198,199,200,201,202,203,219,220,221,224,226,227,229,230,231,232,233,241,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,285,286,287,288,289,290,291,293,294,295,296,298,299,300,301,305,308],versu:[16,202],vesnin:[136,182,183],vf:[220,261,280,285,290,291],vga:[155,184,185,220,251,267,272,273],via:[2,13,17,20,35,37,40,41,47,61,68,70,77,93,109,119,120,132,134,137,138,139,140,144,151,163,171,172,182,183,193,202,203,216,219,220,221,224,226,227,228,229,230,231,232,238,246,247,267,268,272,274,275,281,282,284,286,287,290,291,304,305,308],vice:[109,281,282],vid:[14,171,175],view:[12,171,172,220,274,275],vini:221,violat:[281,284],vipin:[147,148,161,184,185,193,202,203],virt:[182,183],virtual:[2,25,28,35,38,132,171,172,182,183,202,203,221,229,230,261,274,275,280,281,282,284,285,290,291,308],visibil:[226,227],visibl:[0,2,141,158,171,172,189,220,272,290,291,297,308],vital:[25,38,220],vmalloc:[202,203],vmlinux:132,vmlinux_map:[225,290,291],vmx:2,vmx_crypto:[162,215,226,227],vn:[171,172],vnet:224,vnvram:[210,217,231,232,301],volatil:[76,171,172,213,220,272,281,282,303],voltag:[13,14,182,183,229,230],volum:139,voluntarili:[114,151,171,172],vou:[246,247,271,274,275],vp:[171,172,220,231,232,233,241,281,282,308],vp_id:308,vpd:[2,25,38,135,146,171,172,180,194,219,220,221,222,231,232,234,246,247,272,281,282,287,294,300,308],vpd_data_pars:287,vpd_valid:220,vpd_vini_pars:287,vpnor:[171,172],vpodc:155,vprintk_emit:[217,231,233],vprlog:[272,273],vrm:[171,172],vrml:[171,172],vs:[13,35,109,144,220],vsd:222,vsnprintf:220,vsu:[157,187],vsx2:21,vsx:[2,22],vt:[231,232],vtpm:32,vv:[164,213,220],w25q256bv:[184,185],w2:[231,232],w:[171,172,220,231,232,246,247,268,274,275,281,282],wa:[5,39,41,42,43,45,49,50,58,70,72,75,76,81,83,87,99,100,109,110,113,118,119,120,122,124,129,130,131,132,134,136,138,141,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,308],waddress:[290,291],wafer:[231,232,309],wai:[20,22,36,37,44,58,61,77,117,121,138,139,140,160,171,172,173,178,180,182,183,193,201,205,213,220,224,226,227,228,229,230,231,232,234,238,246,247,250,261,272,273,274,275,278,280,281,282,284,285,290,291,297,308],wait:[0,35,43,96,108,109,110,113,117,119,120,131,160,161,162,163,171,172,174,175,182,183,184,185,202,203,208,209,213,216,220,226,227,228,229,230,231,233,241,243,246,247,248,255,258,261,270,271,272,273,274,275,278,280,281,282,285,286,288,290,291],wait_for_all_occ_init:298,wait_for_resource_load:[220,226,227],wait_tim:[286,290,291],waiter:[274,275],waitin:[286,290,291],wake:[122,171,172,202,203,246,247,257,272,273,274,275,277,281,282],wakeup:[122,171,172,182,183,231,232,235,242,255,274,275,301],wakup:[182,183],walk:[115,171,172,174,182,183],walthour:[164,184,185,231],want:[1,2,17,35,50,84,124,127,133,155,157,171,172,175,178,182,183,187,204,217,220,226,227,229,230,231,232,233,246,247,250,261,272,273,274,275,280,281,282,284,285,290,291,308],warkenti:[202,204],warkentin:[147,148],warn:[1,19,54,56,70,88,89,90,93,97,98,101,103,105,108,121,130,132,134,146,147,160,161,165,171,172,175,182,183,184,185,189,193,195,202,203,205,220,224,226,227,228,229,230,231,232,252,257,274,275,276,277,280,281,282,284,287,290,291,298],warrant:[21,256,274,275],wart:[226,227],wasn:[145,165,226,227,254,274,276,281,282],wast:[1,147,149,224,229,230],watch:[155,171,172,220,229,230,231,232,241],watchdog:[5,38,146,162,215,226,227,246,247,248],watermark:[171,172,238],wd_power_cycle_act:[272,273],wd_reset_act:[272,273],we:[1,2,4,17,19,24,26,29,35,36,39,40,42,43,47,50,51,68,71,95,108,120,130,131,132,133,134,138,139,140,141,144,146,147,148,149,150,151,152,153,157,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,193,194,195,196,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,254,255,256,257,258,259,260,261,265,266,267,268,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,288,290,291,297,302,304,308],weather:70,web:12,wed:[154,155,156,231,233],wedg:[258,278,281,282],wednesdai:[175,179,183,184,186,187,192,195,199,201,204,205,209,213,215,217,222,223,232,234,239,240,241,248,249,250,253,257,258,265,267,272,277,278,287,297,302],week:[139,203,204,205,206,219,220,221,222,223,224,225,226,227,228,282,283,284],wei:171,weird:[182,220],welcom:[132,202,203],well:[1,39,50,125,132,133,145,171,172,174,182,183,203,217,219,224,226,227,229,230,231,232,233,246,247,248,252,254,261,271,272,274,275,276,280,281,282,290,291],went:[43,83,117,124,151,195,202,203,217,231,232,233,246,259,279,281,282,286,290,291],were:[4,17,39,42,46,58,75,131,141,143,159,160,161,171,174,175,184,185,195,196,202,203,219,220,229,230,231,232,246,247,250,258,259,271,272,273,274,275,276,278,279,281,282,283,284,286,290,291,303,304,308],weren:[167,171,172,238,281],werner:[219,220],werror:[144,171,173,184,185,287],wformat:[184,185],what:[1,2,4,15,17,22,38,47,51,84,109,110,130,133,141,157,171,172,182,183,187,193,202,203,204,205,220,226,227,228,229,230,231,232,238,246,247,248,257,258,265,266,272,273,274,275,276,278,281,282,283,284,286,290,291,303,306,308],whatev:[139,171,172,226,227,228,261,271,274,275,280,285,286,290,291],wheel:132,when:[0,2,4,13,19,21,22,23,24,33,35,37,41,47,50,51,52,53,58,59,68,70,88,89,101,104,108,113,115,120,121,122,123,124,130,131,132,133,134,139,140,141,144,145,146,147,148,149,153,154,156,157,158,159,160,162,164,165,166,167,168,171,172,173,174,177,178,182,183,184,185,186,187,189,190,191,193,196,198,201,202,203,204,205,207,214,215,216,217,220,221,222,224,225,226,227,228,229,230,231,232,233,234,238,240,241,245,246,247,248,251,253,255,256,258,261,265,267,268,270,271,272,273,274,275,276,277,278,280,281,282,283,284,285,286,287,288,290,291,293,297,298,303,304,305,306,307,308],whenev:[40,182,183,217,226,228,229,230,231,233,239,267,272,273,274,275],where:[0,1,3,4,21,22,28,33,35,36,39,40,42,50,58,62,63,64,65,68,69,70,75,87,88,89,103,106,109,110,114,119,124,130,131,132,133,134,144,146,147,148,151,153,157,162,163,166,168,169,171,172,173,174,175,176,178,182,183,187,193,195,202,203,204,205,208,215,216,217,220,221,224,226,227,228,229,230,231,232,233,235,238,242,246,247,249,251,257,258,260,268,271,272,273,274,275,277,278,281,282,286,290,291,303,308,309],wherea:13,whether:[2,24,32,37,58,68,70,88,99,121,132,135,138,171,172,202,203,220,226,227,229,230,246,247,250,272,274,275,281,282,303,306,308],which:[0,1,2,3,9,13,14,15,16,17,19,21,22,24,27,28,29,33,35,37,41,44,50,52,56,58,62,67,68,69,70,73,76,84,88,93,100,102,104,106,108,109,118,119,120,122,123,129,133,134,135,140,141,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,178,179,180,181,182,183,184,185,186,187,188,189,190,192,193,195,196,201,202,203,204,205,206,208,214,215,217,218,219,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,238,241,242,244,245,246,247,248,250,251,254,255,256,257,258,261,266,267,268,270,271,272,273,274,275,276,277,278,280,281,282,283,284,286,287,290,291,292,297,302,303,305,306,308,309],whichev:224,whih:[281,282],whilst:[171,174],white:303,whitehorn:146,whitelist:[134,171,231,232,250,274,275],whitespac:[171,226,227,231],who:[1,4,72,95,138,141,147,148,160,161,164,172,184,185,187,193,202,203,204,246,247,259,279],whoever:133,whole:[138,147,148,154,161,171,172,204,206,226,227,229,230,231,261,272,273,274,275,281,282,290,291,305,308],wholesal:[290,291],whose:[68,182,183,231,232,246,247],whta:1,why:[70,140,171,172,220,224,226,246,247,267,272,273,286,290,291],wide:[14,20,171,172,281,282],width:[134,135,220,226,228,229,230,231,232,250,267,270,272,273,274,275,286,290,291],wild:[141,166,261,280,281,282,284],wildcard:[171,175,182,183,281,282,286,290,291],willi:[219,220],william:[161,184,185,187,193,202,203,219,220,231],wimplicit:224,win:[254,274,275],win_siz:88,win_size32:88,win_size_32:88,win_size_64:88,winbond:[184,185],window:[30,33,41,88,89,90,93,103,134,171,172,182,183,188,229,246,247,251,252,258,267,272,273,274,275,278,281,282,284],window_id:[88,89],window_num:[90,93,103,134],window_numb:[88,89],window_s:89,window_typ:[90,93,103,134],winkl:13,wio:[256,277],wipe:[161,171,172,308],wire:[27,29,135,189,226,229,230,281,282],wise:[14,281,282],wish:[140,204,258,278,281,282],wistron:[136,302],witherspoon:[41,134,136,174,182,183,220,226,227,231,232,246,247,250,272,273,278,284,290],within:[35,58,88,89,90,93,97,100,101,103,109,132,134,171,172,182,183,206,217,226,231,233,246,247,254,258,267,272,274,275,276,278,281,282,308],without:[5,21,22,37,42,61,89,100,104,122,135,161,169,171,172,173,174,180,182,183,189,195,201,202,203,204,207,208,220,221,224,226,227,228,229,231,232,238,241,246,247,253,254,258,261,265,271,272,273,274,275,278,280,281,282,284,290,291,304,308],witti:127,wkup:[171,172],wno:[274,275],woefulli:134,wof:[13,171,172,173,182,183,184,185,246,247],woken:[182,183],won:[121,150,168,171,172,182,183,220,226,227,238,258,272,273,274,275,278,281,282,286,290,291,308],wont:[182,281,282],word0:[162,215,226,227],word1:[162,215,226,227],word:[13,35,78,226,227,261,280,281,282,285,290,291,308],work:[2,5,13,17,22,39,42,44,49,50,84,130,138,139,144,145,151,162,164,171,172,173,174,175,178,182,183,193,195,202,203,204,205,206,207,208,209,215,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,240,246,247,248,250,259,261,265,271,272,273,274,275,276,278,279,281,282,283,284,286,290,291,308],workaround:[48,145,146,147,148,162,171,172,182,183,193,208,215,217,220,224,226,227,228,231,232,233,236,241,246,247,250,257,265,269,271,272,273,274,275,276,281,282,285,286,290,291],workaroundi:250,workbook:[171,172,180,182,183,226,228,231,232,236,246,247,248,255,274,281,283],worker_thread:[217,231,233,261,280,281,282],workflow:[184,185],workload:[13,109,153,157,184,185,187],workqueu:[217,231,233],world:[20,171,172,184,185,202,204,220,246,247,274,275,281],worri:219,wors:[150,182,183,246,248],worst:[169,220],worth:[171,172],would:[2,4,5,14,21,22,42,46,58,81,132,133,141,146,147,148,152,153,154,162,164,165,166,168,171,172,174,178,179,182,183,189,202,203,204,207,214,220,224,226,227,229,230,231,232,233,234,240,246,247,248,249,253,257,258,261,265,272,273,274,275,277,278,280,281,282,286,290,291],wouldn:[159,168,196,278,281,282],wrap:[133,171,172,220,246,247,274,275,290,291],wrapper:[35,50,120,171,172,198,202,203,281,284,306],wreck:[182,183,226,227],writ:220,writabl:[188,281,282],write:[1,2,9,12,13,24,28,37,39,40,41,47,49,52,54,61,69,76,77,78,107,108,117,118,127,128,139,146,158,161,162,171,172,173,174,176,182,183,188,189,193,202,203,205,215,217,219,220,224,226,227,228,229,230,231,232,233,238,242,246,247,248,252,258,261,267,270,271,272,273,274,275,278,280,281,282,283,284,286,287,289,290,291,293,298,303,305],write_reg:[286,290,291],writelock:305,writer:[290,291],written:[0,1,41,52,69,78,171,172,188,219,220,226,227,229,230,231,232,246,247,251,274,275,286,290,291,303,305],wrong:[43,51,83,117,124,129,131,166,171,172,182,183,193,194,201,213,220,226,227,228,229,230,231,232,238,246,250,259,270,271,272,273,274,275,279,281,284],wrongli:[202,203],wrote:[171,172],wrprotect:[202,204],wsp:[231,232],wspoon:[171,172],wstack:144,www:155,wzs004a:[246,247,271,274,275,281,282],wzs007x:34,x08:[134,229,230,286,290,291],x16:[134,220,226,227,229,230,267,272,281,282,286,290,291],x1:220,x2:2,x86:[138,281,284],x86_64:[246,247],x8:[226,227,250,267,272,274,275,281,282],x8x8:[281,282],x:[2,35,36,56,134,136,140,161,162,163,165,171,172,173,174,175,176,177,178,179,180,181,182,183,184,187,188,189,192,201,202,203,204,205,206,208,209,210,213,214,215,216,217,218,220,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,277,278,279,280,285,286,287,288,289,293,294,295,296,298,299,300,301,309],x_tabl:[162,215,226,227],xer:[162,171,173,178,182,183,214,215,224,226,227,246,247,248,281,283],xhci:[281,284],xic:[62,63,64,65,121,193,224,308],xicp:2,xirr:[62,308],xive:[38,56,62,97,105,134,179,181,182,183,193,220,222,224,226,227,228,229,230,233,237,241,246,247,269,274,275,281,282,288,293],xive_cpu_st:[226,227],xive_dump_emu:308,xive_dump_tm_hyp:308,xive_dump_tm_o:308,xive_dump_tm_pool:308,xive_dump_tm_us:308,xive_dump_vp:308,xive_eq_for_target:[231,232],xive_get:220,xive_get_:220,xive_get_ir_target:220,xive_get_vp:220,xive_num:[56,105,134],xive_numb:[56,105,134],xive_provision_cpu:220,xive_reset:[171,172,220,241],xive_set_eq_info:220,xive_source_interrupt:[231,233],xive_source_set_x:220,xive_sync_ea:308,xive_sync_queu:308,xivr:[56,105,134],xlink:37,xml:[4,171,172,274,286,290,291],xmon:[171,172,178,182,183,246,247,290,291],xor:[171,172],xpec_nest_capp_cntl:[270,274,275],xpec_nest_read_stack_overrid:[268,274,275],xpec_pci_prdstkovr:[268,274,275],xscom:[2,26,27,28,29,30,38,128,146,158,166,171,172,174,180,182,187,190,191,193,198,199,202,203,207,220,226,227,228,229,230,231,232,242,246,247,257,261,271,272,273,274,275,280,281,284,286,290,291,295],xscom_addr:[28,229,230],xscom_read:[128,171,174,198,202,203,231,232,274,275],xscom_read_cfam_chipid:[226,227],xscom_reset:[171,172],xscom_writ:[128,171,174,271,274,275,287],xscom_write_mask:[171,174],xsl:[193,290,291],xslo:75,xstop:[44,171,172,238,251,261,267,271,272,273,274,275,280,281,284],xstop_error:70,xstop_reason:[70,290,291],xstop_typ:70,xt:[73,178,182,183,226,227,281,282,286,290,291],xts_bdf:[182,183,246,247],xts_bdf_map:[281,282],xts_pid:[182,183],xup:[162,214,224],xx:[2,21,141],xxx2:[171,174],xxx:[84,290,291],xxxx:2,xyz:[231,232],xz:[133,220,226,228,290,291],xz_embed:133,y:[35,140,231,232,246,248,309],y_m_d:[114,117,226,227],yadro:[136,182,183,274,290,291],ye:[131,226,267,272],year:[117,229,261,272,273,280,285,287,290,291],year_month_dai:117,yet:[35,41,60,102,125,146,166,171,172,178,182,183,219,220,224,226,229,230,237,246,247,272,273,274,275,281,282,283,286,290,291,308],yield:[14,281,282],yl10113bj001:34,yocto:[187,193],yolo:[267,272],york:138,you:[1,2,36,44,58,81,84,110,124,127,131,132,133,138,139,140,141,146,147,148,155,171,172,182,183,184,185,193,195,202,203,204,205,217,219,220,223,224,226,227,229,230,231,232,233,246,247,248,253,260,274,275,281,282,290,291,308],young:[155,184,185],your:[49,138,139,140,141,184,185,224,226,227,228,231,232,246,248,290,291],your_email:138,yourself:205,youtub:155,yuan:[202,224],yz:35,zaiu:[136,171,172,220,246,247,272,273,284],zalloc:[271,274,275],zcal:[226,227,281,282],zero:[1,4,21,61,87,88,89,100,101,114,118,127,171,172,182,183,193,195,201,202,203,221,224,226,227,229,231,235,246,247,260,261,272,273,274,275,280,281,282,284,285,290,291,298,303,305,306],zeroiz:303,zlib:28,zone:[246,247],zork:132,zz24p1:286,zz:[134,136,171,172,220,224,226,227,229,230,231,232,272,273,281,282,290,291]},titles:["OPAL &lt;\u2013&gt; BMC interactions","SkiBoot Console Log","Device Tree","ibm,cvc","ibm,firmware-versions node","ibm,opal","ibm,opal/diagnostics device tree entries","Dump (MPIPL) Device Tree Binding","System Firmware","ibm,opal/flash device tree entries","Service Indicators (LEDS)","nvram Device Tree Node","Operator Panel (oppanel)","ibm,opal/power-mgt device tree entries","ibm,opal/power-mgt/occ device tree entries","power-mgt/powercap","power-mgt/psr","Secvar Binding","ibm,opal/sensor-groups","ibm,opal/sensors/ device tree nodes","sysparams","ibm,powerpc-cpu-features Binding","ibm,powerpc-cpu-features Design","ibm,secureboot","IMC Device Tree Bindings","Device Tree","P9 memory hierarchy","Nvlink Device Tree Bindings","Nest (NX) Accelerator Coprocessor","OpenCAPI Device Tree Bindings","PCI Device Tree Bindings","reserved-memory device tree nodes","Trusted Platform Module (TPM)","Virtual Accelerator Switchboard (VAS)","VPD (Vital Product Data)","How to log errors on OPAL","GCOV for skiboot","OPAL/Skiboot In-Memory Collection (IMC) interface Documentation","SkiBoot Documentation","Memory in skiboot","MPIPL (aka FADUMP) Overview","OPAL/Skiboot Nvlink Interface Documentation","OPAL API Documentation","OPAL_CEC_POWER_DOWN","OPAL_CEC_REBOOT and OPAL_CEC_REBOOT2","OPAL_CHECK_ASYNC_COMPLETION","OPAL_CHECK_TOKEN","Code Update on FSP based machine","OPAL_CONFIG_CPU_IDLE_STATE","OPAL Console calls","OPAL Dumps","OPAL_ELOG: Error logging","OPAL Flash calls","OPAL_GET_DEVICE_TREE","OPAL_GET_EPOW_STATUS","OPAL_GET_MSG","OPAL_GET_MSI_32 and OPAL_GET_MSI_64","OPAL_GET_XIVE","Hypervisor Maintenance Interrupt (HMI)","OPAL_HANDLE_INTERRUPT","OPAL_I2C_REQUEST","OPAL_IMC_COUNTERS_INIT","OPAL_INT_EOI","OPAL_INT_GET_XIRR","OPAL_INT_SET_CPPR","OPAL_INT_SET_MFRR","OPAL_INVALID_CALL","OPAL_IPMI_SEND","Service Indicators (LEDS)","OPAL_LPC_READ","OPAL_MESSAGE","OPAL MPIPL APIs","OPAL_NMMU_SET_PTCR","OPAL NPU2 calls","OPAL_NPU_SET_RELAXED_ORDER","OPAL_NPU_SPA_SETUP","OPAL NVRAM","Get/Set System Parameters","OPAL PCI Config Space Access","OPAL_PCI_EEH_FREEZE_CLEAR","OPAL_PCI_EEH_FREEZE_SET","OPAL_PCI_EEH_FREEZE_STATUS","OPAL_PCI_ERR_INJECT","OPAL_PCI_GET_HUB_DIAG_DATA","OPAL_PCI_GET_PHB_DIAG_DATA2","OPAL_PCI_GET_POWER_STATE","OPAL_PCI_GET_PRESENCE_STATE","OPAL_PCI_GET_PBCQ_TUNNEL_BAR","OPAL_PCI_MAP_PE_DMA_WINDOW","OPAL_PCI_MAP_PE_DMA_WINDOW_REAL","OPAL_PCI_MAP_PE_MMIO_WINDOW","OPAL_PCI_MSI_EOI","OPAL_PCI_NEXT_ERROR","OPAL_PCI_PHB_MMIO_ENABLE","OPAL_PCI_POLL","OPAL_PCI_REINIT","OPAL_PCI_RESET","OPAL_PCI_SET_MVE","OPAL_PCI_SET_MVE_ENABLE","OPAL_PCI_SET_P2P","OPAL_PCI_SET_PE","OPAL_PCI_SET_PELTV","OPAL_PCI_SET_PHB_CAPI_MODE","OPAL_PCI_SET_PHB_MEM_WINDOW","OPAL_PCI_SET_POWER_STATE","OPAL_PCI_SET_XIVE_PE","OPAL_PCI_TCE_KILL","OPAL_PHB_SET_OPTION","OPAL_POLL_EVENTS","OPAL Power Shift Ratio","OPAL Power Caps","OPAL_PRD_MSG","OPAL_QUERY_CPU_STATUS","OPAL_QUIESCE","OPAL Timed Power On and Delayed Power Off","OPAL_REINIT_CPUS","OPAL_RESYNC_TIMEBASE","OPAL Real Time Clock (RTC) APIs","OPAL Secure Variable API","OPAL Sensor Groups","OPAL_SENSOR_READ","OPAL_SET_XIVE","OPAL_SIGNAL_SYSTEM_RESET","OPAL_SLW_SET_REG","Starting and stopping secondary CPUs","OPAL_SYNC_HOST_REBOOT","OPAL_TEST","OPAL_WRITE_OPPANEL_ASYNC","OPAL_XSCOM_READ","OPAL_NX_COPROC_INIT","POWER9 Changes to OPAL API","OPAL API Return Codes","OPAL Specification","Skiboot overview","PCI","PCI Slots","Supported platforms &amp; CPUs","Power Management","Contributing to skiboot","Development and Release Process","Skiboot stable tree rules and releases","Versioning Scheme of skiboot","Release Notes","skiboot 4.0","skiboot 4.1","skiboot 4.1.1","skiboot 5.0","skiboot-5.1.0","skiboot-5.1.0-beta1","skiboot-5.1.0-beta2","skiboot-5.1.1","skiboot-5.1.10","skiboot-5.1.11","skiboot-5.1.12","skiboot-5.1.13","skiboot-5.1.14","skiboot-5.1.15","skiboot-5.1.16","skiboot-5.1.17","skiboot-5.1.18","skiboot-5.1.19","skiboot-5.1.2","skiboot-5.1.20","skiboot-5.1.21","skiboot-5.1.3","skiboot-5.1.4","skiboot-5.1.5","skiboot-5.1.6","skiboot-5.1.7","skiboot-5.1.8","skiboot-5.1.9","skiboot-5.10","skiboot-5.10-rc1","skiboot-5.10-rc2","skiboot-5.10-rc3","skiboot-5.10-rc4","skiboot-5.10.1","skiboot-5.10.2","skiboot-5.10.3","skiboot-5.10.4","skiboot-5.10.5","skiboot-5.10.6","skiboot-5.11","skiboot-5.11-rc1","skiboot-5.2.0","skiboot-5.2.0-rc1","skiboot-5.2.0-rc2","skiboot-5.2.1","skiboot-5.2.2","skiboot-5.2.3","skiboot-5.2.4","skiboot-5.2.5","skiboot-5.3.0","skiboot-5.3.0-rc1","skiboot-5.3.0-rc2","skiboot-5.3.1","skiboot-5.3.2","skiboot-5.3.3","skiboot-5.3.4","skiboot-5.3.5","skiboot-5.3.6","skiboot-5.3.7","skiboot-5.4.0","skiboot-5.4.0-rc1","skiboot-5.4.0-rc2","skiboot-5.4.0-rc3","skiboot-5.4.0-rc4","skiboot-5.4.1","skiboot-5.4.10","skiboot-5.4.11","skiboot-5.4.12","skiboot-5.4.2","skiboot-5.4.3","skiboot-5.4.4","skiboot-5.4.5","skiboot-5.4.6","skiboot-5.4.7","skiboot-5.4.8","skiboot-5.4.9","skiboot-5.5.0","skiboot-5.5.0-rc1","skiboot-5.5.0-rc2","skiboot-5.5.0-rc3","skiboot-5.6.0","skiboot-5.6.0-rc1","skiboot-5.6.0-rc2","skiboot-5.7","skiboot-5.7-rc1","skiboot-5.7-rc2","skiboot-5.8","skiboot-5.8-rc1","skiboot-5.9","skiboot-5.9-rc1","skiboot-5.9-rc2","skiboot-5.9-rc3","skiboot-5.9-rc4","skiboot-5.9-rc5","skiboot-5.9.1","skiboot-5.9.2","skiboot-5.9.3","skiboot-5.9.4","skiboot-5.9.5","skiboot-5.9.6","skiboot-5.9.7","skiboot-5.9.8","skiboot-5.9.9","skiboot-6.0","skiboot-6.0-rc1","skiboot-6.0-rc2","skiboot-6.0.1","skiboot-6.0.10","skiboot-6.0.11","skiboot-6.0.12","skiboot-6.0.13","skiboot-6.0.14","skiboot-6.0.15","skiboot-6.0.16","skiboot-6.0.17","skiboot-6.0.18","skiboot-6.0.19","skiboot-6.0.2","skiboot-6.0.20","skiboot-6.0.21","skiboot-6.0.22","skiboot-6.0.23","skiboot-6.0.3","skiboot-6.0.4","skiboot-6.0.5","skiboot-6.0.6","skiboot-6.0.7","skiboot-6.0.8","skiboot-6.0.9","skiboot-6.1","skiboot-6.1-rc1","skiboot-6.2","skiboot-6.2-rc1","skiboot-6.2-rc2","skiboot-6.2.1","skiboot-6.2.2","skiboot-6.2.3","skiboot-6.2.4","skiboot-6.3","skiboot-6.3-rc1","skiboot-6.3-rc2","skiboot-6.3-rc3","skiboot-6.3.1","skiboot-6.3.2","skiboot-6.3.3","skiboot-6.3.4","skiboot-6.3.5","skiboot-6.4","skiboot-6.4-rc1","skiboot-6.5","skiboot-6.5.1","skiboot-6.5.2","skiboot-6.5.3","skiboot-6.5.4","skiboot-6.6","skiboot-6.6.1","skiboot-6.6.2","skiboot-6.6.3","skiboot-6.6.4","skiboot-6.7","Secvar Drivers","Skiboot edk2-compatible Secure Variable Backend","secboot_tpm secvar storage driver for P9 platforms","Secure and Trusted Boot Library (LibSTB) Documentation","Virtual Accelerator Switchboard (VAS)","P9 XIVE Exploitation","XSCOM Bindings"],titleterms:{"0":[143,146,147,148,149,184,185,186,192,193,194,202,203,204,205,206,219,220,221,222,223,224,225,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271],"0x1":108,"0x10":108,"0x100":108,"0x2":108,"0x20":108,"0x200":108,"0x4":108,"0x40":108,"0x400":108,"0x8":108,"0x80":108,"0x800":108,"1":[144,145,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,176,187,195,207,237,249,272,273,277,285,293,298],"10":[151,171,172,173,174,175,176,177,178,179,180,181,208,250],"11":[152,182,183,209,251],"12":[153,210,252],"13":[154,253],"14":[155,254],"15":[156,255],"16":[157,256],"17":[158,257],"18":[159,258],"19":[160,259],"2":[161,177,184,185,186,187,188,189,190,191,196,211,238,260,274,275,276,277,278,279,280,286,294,299],"20":[162,261],"21":[163,262],"22":263,"23":264,"3":[164,178,189,192,193,194,195,196,197,198,199,200,201,202,212,239,265,279,281,282,283,284,285,286,287,288,289,295,300],"4":[143,144,145,165,179,190,198,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,240,266,280,288,290,291,296,301],"5":[146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,267,289,292,293,294,295,296],"6":[167,181,200,215,223,224,225,242,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302],"7":[168,201,216,226,227,228,243,269,302],"8":[169,217,229,230,244,270],"9":[170,218,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,271],"case":304,"function":126,"new":[147,148,149,171,172,182,183,184,185,186,202,203,220,224,226,227,229,230,231,232,246,247,281,282,290,291,292,297,302],"return":[43,44,45,47,48,50,53,54,55,60,61,67,69,71,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87,91,92,94,95,96,99,100,102,104,106,107,109,110,112,113,114,115,116,117,118,119,120,122,123,124,125,126,127,128,129,131,304],"var":305,A:303,In:37,On:[17,37,114,139],The:147,abi:38,acceler:[28,33,307],accept:140,access:78,after:134,aka:40,all:[157,187,190],ami:[147,148],api:[37,42,71,117,118,130,131,193,303,308],apollo:135,ar:140,argument:[43,113,115,122,126,129,202,204],ast:[166,167,184,186,272,273],astbmc:[226,227,278],author:132,backend:[303,304],background:22,bank:305,barreley:[274,275],base:[13,47,147,148,153,182,183,184,186,193,202,203,220,226,231,232,272,273,274,275,281,282],been:147,behavior:[184,185],beta1:148,beta2:149,binari:133,bind:[7,17,21,24,27,29,30,41,134,304,309],bmc:[0,147,148,166,167,184,186,193,220,231,232,258,272,273,278],boot:[40,132,133,171,172,204,246,247,290,291,306],bootkernel:[202,204],branch:139,bug:[50,147,148,149,182,183,184,185,246,247,272,273],build:[36,290,291],call:[42,49,52,73,84,85,86,102,104,117],candid:202,cap:110,capabl:41,capi2:[274,275,281,282],capi:[154,171,172,182,183,193,194,202,203,220,231,232,246,247,267],caus:58,certif:138,chang:[130,149,150,157,158,161,164,165,166,167,171,184,185,187,202,204,219,220,223,224,226,229,231,246,247,272,273,274],changeset:[171,219,220,224,226,229,231,274],chassi:0,check:134,chip:[14,37],chiplet:309,ci:[272,274,276],clock:[0,117],close:139,code:[17,44,47,53,60,69,78,84,85,86,102,104,117,131,182,183,303,304,306],collect:[37,40],command:[202,204],comment:2,commun:[258,278],compat:[2,303,304],compress:28,config:78,configur:41,consider:141,consol:[1,49],constraint:35,contain:306,contribut:138,contributor:[147,148,164,171,184,185,187,193,202,203,204,219,220,224,226,229,231,274],control:[0,305],coprocessor:28,core:[13,37,220],counter:24,coverag:[182,183],cpu:[13,21,22,124,136],credit:[171,219,220,224,226,229,231,274],current:141,cvc:[3,306],data:[34,36],dd2:[229,230],debug:[1,44,134,137,171,172,182,183,202,203,226,246,247,274,275,281,282,290,291],defin:22,definit:132,degrad:134,delai:114,deprec:[281,282],design:[22,35,68],detect:132,develop:[38,138,139,171,219,220,224,226,228,229,231,274,275],devic:[2,6,7,9,11,13,14,19,24,25,27,29,30,31,40,41,130,134,193,304,308],diagnost:6,disabl:[134,137],dl:41,dma:134,document:[37,38,41,42,202,203,306],domain:14,driver:[303,305],drop:136,dump:[7,35,40,50],ecid:309,edk2:304,eeh:134,employ:[171,219,224,231,274],emul:[27,41],endpoint:309,enforc:17,entri:[6,9,13,14],environ:[132,138],error:[35,51,58,134],event:[24,308],exampl:[2,3,4,17,21,23,32],exploit:308,extract:36,fadump:40,fast:[5,171,172,182,183,204,220,274,275],featur:[21,22,147,148,149,171,172,182,183,184,185,202,203,220,226,227,229,230,231,232,246,247,281,282,290,291,292,297,302],ffspart:[246,247],firenz:[135,274,275],fireston:154,firmwar:[4,8,306],fix:[147,148,149,171,172,182,183,184,185,227,246,247,272,273,290],flag:[13,303],flash:[9,52,202,226,227],follow:147,fork:139,format:[8,305],freq:14,frequenc:13,from:35,fsp:[35,47,147,148,151,153,157,171,172,184,186,187,193,194,202,203,220,224,226,227,229,231,232,272,273,274,275,281,282],futur:42,g2:[274,275],gard:[154,171,172],garrison:[187,188,193],gave:[171,219,220,224,226,229,231,274],gcov:36,gen:41,gener:[2,41,147,148,151,153,154,157,166,167,171,172,184,186,187,189,193,194,202,203,226,227,229,230,231,232,272,273,274,275,281,282,290,308],get:77,getscom:[184,186],got:35,gpu:27,group:[18,119],guid:38,guidelin:22,hacker:[219,224,274],handl:[58,246,247],have:147,heap:39,heartbeat:5,hierarchi:26,hiomap:[258,278,281,282],histori:141,hmi:[58,171,172,193,246,247],hotplug:135,how:35,howto:140,hypervisor:58,i2c:[220,224,272,273],i:308,ibm:[3,4,5,6,9,13,14,17,18,19,21,22,23,151,153,171,172,202,203,226,227,229,231,232,281,282],id:[13,14,41],idl:13,ii:308,iii:308,imc:[24,37],improv:[147,148,171,172,182,183,184,185,246,247],improvemen:[182,183],indic:[10,68,305],initi:40,input:[44,47],interact:0,interfac:[22,35,37,41,133],intern:38,interrupt:[41,58,133],ioda:134,ipmi:[0,184,186,203,258,272,273,278,290,291],iv:308,kei:304,layout:[133,305],led:[10,68],level:[1,5,24],libff:[220,226],libflash:[171,172,227,246,247],librari:306,libstb:306,licens:139,lifecycl:139,line:[171,202,204,219,220,224,226,229,231,274],link:134,list:58,load_bank:303,lock:[303,305],log:[1,35,51,132,133],machin:[47,147,148,151,153,166,167],mainten:58,mambo:[184,186,193,202,203,274,275],manag:[137,182,183,226,227],map:2,mask:[13,14],mata:134,max:13,max_var_s:303,maximum:134,mbox:[182,183,226,227],memori:[26,27,31,37,39,133],messag:0,mgt:[13,14,15,16],mhz:13,mi:8,min:13,misc:224,ml:8,mmio:134,mode:[17,24,37,134],modul:32,most:[171,219,220,224,226,229,231,274],mpipl:[7,40,71],ms:5,msi:134,nest:[28,37],node:[2,4,5,7,11,17,19,21,24,31],nomin:13,note:[35,38,102,142,303],npu2:[73,182,183,226,227,246,247,267,272,273,290,291],npu:[29,202,203],nv:305,nvlink2:[171,172,182,183,221,231,232,246,247,267,272,273,274,275,281,282],nvlink:[27,41,202,203],nvram:[11,76,202,203],nx:[28,267],obsolet:23,occ:[14,226,227],off:[37,114],op:71,opal:[0,5,6,9,13,14,17,18,19,35,37,38,41,42,49,50,52,71,73,76,78,109,110,114,117,118,119,130,131,132,153,171,172,184,186,193,226,227,229,230,246,247,308],opal_async_complet:131,opal_busi:131,opal_busy_ev:131,opal_cec_power_down:43,opal_cec_reboot2:44,opal_cec_reboot:44,opal_check_async_complet:45,opal_check_token:46,opal_clos:131,opal_config_cpu_idle_st:48,opal_console_flush:49,opal_console_read:49,opal_console_writ:49,opal_console_write_buffer_spac:49,opal_constrain:131,opal_dump_ack:50,opal_dump_info2:50,opal_dump_info:50,opal_dump_init:50,opal_dump_read:50,opal_dump_resend:50,opal_elog:51,opal_elog_ack:51,opal_elog_read:51,opal_elog_resend:51,opal_elog_s:51,opal_elog_send:42,opal_elog_writ:42,opal_empti:131,opal_event_console_input:108,opal_event_console_output:108,opal_event_dump_avail:108,opal_event_epow:108,opal_event_error_log:108,opal_event_error_log_avail:108,opal_event_led_statu:108,opal_event_msg_pend:108,opal_event_nvram:108,opal_event_opal_intern:108,opal_event_pci_error:108,opal_event_rtc:108,opal_flash_eras:52,opal_flash_manag:47,opal_flash_read:52,opal_flash_upd:47,opal_flash_valid:47,opal_flash_writ:52,opal_get_completion_token_statu:42,opal_get_device_tre:53,opal_get_dpo_statu:114,opal_get_epow_statu:54,opal_get_msg:55,opal_get_msi_32:56,opal_get_msi_64:56,opal_get_param:77,opal_get_power_shift_ratio:109,opal_get_powercap:110,opal_get_x:57,opal_get_xive_sourc:42,opal_handle_hmi2:58,opal_handle_hmi:58,opal_handle_interrupt:59,opal_hardwar:131,opal_hardware_frozen:131,opal_i2c_arbt_lost:131,opal_i2c_bkend_access:131,opal_i2c_bkend_overrun:131,opal_i2c_invalid:131,opal_i2c_lbus_par:131,opal_i2c_nack_rcvd:131,opal_i2c_request:60,opal_i2c_stop_err:131,opal_i2c_timeout:131,opal_imc_counters_init:61,opal_imc_counters_start:61,opal_imc_counters_stop:61,opal_int_eoi:62,opal_int_get_xirr:63,opal_int_set_cppr:64,opal_int_set_mfrr:65,opal_internal_error:131,opal_invalid_cal:66,opal_ipmi_recv:67,opal_ipmi_send:67,opal_leds_get_ind:68,opal_leds_set_ind:68,opal_lpc_read:69,opal_lpc_writ:69,opal_messag:70,opal_mpipl_query_tag:71,opal_mpipl_register_tag:71,opal_mpipl_upd:71,opal_msg_async_comp:70,opal_msg_dpo:70,opal_msg_epow:70,opal_msg_hmi_evt:70,opal_msg_mem_err:70,opal_msg_occ:70,opal_msg_prd2:70,opal_msg_prd:70,opal_msg_shutdown:70,opal_nmmu_set_ptcr:72,opal_no_mem:131,opal_npu_destroy_context:73,opal_npu_get_relaxed_ord:74,opal_npu_init_context:73,opal_npu_map_lpar:73,opal_npu_mem_alloc:75,opal_npu_mem_releas:75,opal_npu_set_relaxed_ord:74,opal_npu_spa_clear_cach:75,opal_npu_spa_setup:75,opal_npu_tl_set:75,opal_nx_coproc_init:129,opal_old_i2c_request:42,opal_paramet:131,opal_parti:131,opal_pci_config_:78,opal_pci_config_read_byt:78,opal_pci_config_read_half_word:78,opal_pci_config_read_word:78,opal_pci_config_write_byt:78,opal_pci_config_write_half_word:78,opal_pci_config_write_word:78,opal_pci_eeh_freeze_clear:79,opal_pci_eeh_freeze_set:80,opal_pci_eeh_freeze_statu:81,opal_pci_eeh_freeze_status2:81,opal_pci_err_inject:82,opal_pci_fence_phb:42,opal_pci_get_hub_diag_data:83,opal_pci_get_pbcq_tunnel_bar:87,opal_pci_get_phb_diag_data2:84,opal_pci_get_phb_diag_data:42,opal_pci_get_power_st:85,opal_pci_get_presence_st:86,opal_pci_get_xive_reissu:42,opal_pci_map_pe_dma_window:88,opal_pci_map_pe_dma_window_r:89,opal_pci_map_pe_mmio_window:90,opal_pci_mask_pe_error:42,opal_pci_msi_eoi:91,opal_pci_next_error:92,opal_pci_phb_mmio_en:93,opal_pci_pol:94,opal_pci_reinit:95,opal_pci_reset:96,opal_pci_set_hub_tce_memori:42,opal_pci_set_mv:97,opal_pci_set_mve_en:98,opal_pci_set_p2p:99,opal_pci_set_p:100,opal_pci_set_pbcq_tunnel_bar:87,opal_pci_set_peltv:101,opal_pci_set_phb_capi_mod:102,opal_pci_set_phb_mem_window:103,opal_pci_set_phb_table_memori:42,opal_pci_set_phb_tce_memori:42,opal_pci_set_power_st:104,opal_pci_set_xive_p:105,opal_pci_set_xive_reissu:42,opal_pci_shpc:42,opal_pci_tce_kil:106,opal_permiss:131,opal_phb_get_opt:107,opal_phb_set_opt:107,opal_poll_ev:108,opal_prd_msg:111,opal_query_cpu_statu:112,opal_quiesc:113,opal_read_nvram:76,opal_read_tpo:114,opal_register_dump_region:50,opal_register_opal_exception_handl:42,opal_reinit_cpu:[115,130],opal_reinit_cpus_mmu_hash:115,opal_reinit_cpus_mmu_radix:115,opal_reinit_cpus_tm_suspend_dis:115,opal_reserved1:42,opal_reserved2:42,opal_resourc:131,opal_resync_timebas:116,opal_return_cpu:124,opal_rtc_read:117,opal_rtc_writ:117,opal_secvar_enqueue_upd:118,opal_secvar_get:118,opal_secvar_get_next:118,opal_sensor_group_clear:119,opal_sensor_group_en:119,opal_sensor_read:120,opal_sensor_read_u64:120,opal_set_param:77,opal_set_power_shift_ratio:109,opal_set_powercap:110,opal_set_slot_led_statu:42,opal_set_system_attention_l:42,opal_set_x:121,opal_signal_system_reset:122,opal_slw_set_reg:123,opal_start_cpu:124,opal_success:131,opal_sync_host_reboot:125,opal_test:126,opal_timeout:131,opal_unregister_dump_region:50,opal_unsupport:131,opal_write_nvram:76,opal_write_oppanel:42,opal_write_oppanel_async:127,opal_write_tpo:114,opal_wrong_st:131,opal_xive_allocate_irq:308,opal_xive_allocate_vp_block:308,opal_xive_donate_pag:308,opal_xive_dump:308,opal_xive_eoi:308,opal_xive_free_act:131,opal_xive_free_irq:308,opal_xive_free_vp_block:308,opal_xive_get_irq_config:308,opal_xive_get_irq_info:308,opal_xive_get_queue_info:308,opal_xive_get_queue_st:308,opal_xive_get_vp_info:308,opal_xive_get_vp_st:308,opal_xive_provis:131,opal_xive_reset:308,opal_xive_set_irq_config:308,opal_xive_set_queue_info:308,opal_xive_set_queue_st:308,opal_xive_set_vp_info:308,opal_xive_sync:308,opal_xscom_addr_error:131,opal_xscom_busi:131,opal_xscom_chiplet_off:131,opal_xscom_clock_error:131,opal_xscom_ctr_offlin:131,opal_xscom_parity_error:131,opal_xscom_partial_good:131,opal_xscom_read:128,opal_xscom_timeout:131,opal_xscom_writ:128,opencapi:[29,182,183,246,247,272,273,274,275,281,282],openpow:[166,189,202,204],oper:[12,135,308],oppanel:12,option:32,origin:138,os:133,other:[149,182,183,184,185,202,204],output:[35,47],overview:[22,37,38,40,41,118,133,304,305],p8dnu:220,p8dtu:[278,281,282],p8nvl:188,p9:[26,304,305,308],p9dsu:[246,247,281,282],panel:12,paramet:[41,44,57,58,61,67,69,74,75,76,77,84,85,86,87,99,102,104,109,110,111,117,118,120,121,123],patch:[139,140],payload:132,pci:[27,29,30,41,78,134,135,171,172,182,183,193,202,203,204,220,221,224,226,227,246,247,267],pcie:[153,281,282],pe:134,pel:35,persist:305,pflash:[153,171,172,187,194,204,226,227],phb3:[157,187,258,278],phb4:[171,172,226,227,228,229,230,231,232,267,274,275,290,291],phb:153,physic:305,platform:[32,136,154,157,171,172,182,183,184,186,187,189,190,193,194,202,203,204,220,224,226,231,232,246,247,272,273,274,275,281,282,290,291,304,305],pmicr:13,pnor:305,post_process:303,power8:[153,157,187,231,232,272,273,274,275,281,282],power9:[130,171,172,193,194,202,203,220,221,224,226,227,228,229,230,231,232,267,272,273,274,275,281,282],power:[13,14,15,16,109,110,114,137,171,172,182,183,226,227],powercap:[15,258,278],powerpc:[21,22],practic:141,prd:[153,171,172,184,186,202,203,226,227,229,230,246,247],pre_process:303,presenc:305,previou:202,process:[38,139,303],product:34,properti:[3,4,5,23,32,135],psr:16,psscr:13,pstate:[13,14],qemu:[274,275],queue:308,quick:303,quiesc:[171,172],quiesce_typ:113,ratio:109,rc1:[172,183,184,185,193,203,220,224,227,230,232,247,273,275,282,291],rc2:[173,184,186,194,204,221,225,228,233,248,276,283],rc3:[174,205,219,222,234,284],rc4:[175,206,235],rc5:236,real:[0,117],reboot:[5,44,171,172,182,183,220,274,275],reg:14,region:309,regist:41,registr:40,releas:[38,139,140,142,202],reliabl:[171,172],remov:[42,171,184,185,219,220,224,231,274,281,282,290,291,297],report:[171,219,220,224,226,229,231,274],requir:[3,23,32],reserv:[2,31],reset:[204,305],retrain:134,retriev:35,review:[171,219,220,224,226,229,231,274],ric:134,rng:28,root:2,rtc:117,rule:140,run:14,runtim:132,rx:134,sampl:35,save:[171,172],sbe:0,scheme:141,scom:24,secboot:305,secboot_tpm:305,secondari:124,secur:[17,118,171,172,204,246,247,290,291,304,306],secureboot:23,secvar:[17,303,305],sensor:[0,18,19,119,171,172,229,230,267,290,291],sequenc:134,servic:[10,68,132,306],set:77,setup:134,sha512:306,shift:109,sign:306,signoff:[171,219,220,224,226,229,231,274],simic:[184,186,202,203],simul:[184,186,193,202,203,226,227,231,232,272,273,281,282,290,291],sinc:[184,202,219],skiboot:[1,36,37,38,39,41,133,138,140,141,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,304],slot:135,sourc:[133,139],space:[41,78],special:304,specif:[41,132,137,147,148,153,171,172],speed:134,sreset:[182,183],stabl:140,start:124,stat:161,state:[13,137],statu:[17,303,304],stop:[124,137],storag:[303,305],store_init:303,submit:140,support:[0,44,132,136,184,185],switchboard:[33,307],sysparam:20,system:[8,77,171,172,220,224,226,227,229,231,232],tabl:17,target_cpu:113,test:[36,171,182,183,193,202,203,219,220,221,224,226,227,228,229,230,231,246,247,272,274,276],time:[0,114,117],tl:41,todo:130,tool:193,top:[5,24,219,224],tpm:[32,220,305],trace:[24,37],train:134,tree:[2,6,7,9,11,13,14,19,24,25,27,29,30,31,40,41,130,134,140,193,304,308],trust:[32,171,172,204,246,247,290,291,306],turbo:13,type:44,ultra:13,unit:[24,36,37],updat:[17,47,304,308],userspac:190,util:[154,171,172,184,186,189,190,202,203,204,220,229,230,231,232,272,273,274,275,276,281,282,290,291],va:[33,267,307],valid:[0,303],valu:[43,45,47,55,67,71,72,74,75,76,87,99,118,120],variabl:[118,304,305],vcss:14,vdd:14,vendor:41,verbos:134,verif:306,verifi:306,version:[4,141],vesnin:[274,275,281,282,290,291],virtual:[33,307],vital:34,vpd:[34,267],vs:303,watchdog:[0,272,273],what:[132,140],who:[171,219,220,224,226,229,231,274],witherspoon:[171,172,274,275,281,282],write_bank:303,xive:[171,172,231,232,308],xscom:309,zaiu:[274,275,281,282],zz:[246,247,274,275]}}) \ No newline at end of file
+Search.setIndex({docnames:["bmc","console-log","device-tree","device-tree/ibm,cvc","device-tree/ibm,firmware-versions","device-tree/ibm,opal","device-tree/ibm,opal/diagnostics","device-tree/ibm,opal/dump","device-tree/ibm,opal/firmware","device-tree/ibm,opal/flash","device-tree/ibm,opal/led","device-tree/ibm,opal/nvram","device-tree/ibm,opal/oppanel","device-tree/ibm,opal/power-mgt","device-tree/ibm,opal/power-mgt/occ","device-tree/ibm,opal/power-mgt/powercap","device-tree/ibm,opal/power-mgt/psr","device-tree/ibm,opal/secvar","device-tree/ibm,opal/sensor-groups","device-tree/ibm,opal/sensors","device-tree/ibm,opal/sysparams","device-tree/ibm,powerpc-cpu-features/binding","device-tree/ibm,powerpc-cpu-features/design","device-tree/ibm,secureboot","device-tree/imc","device-tree/index","device-tree/memory-hierarchy","device-tree/nvlink","device-tree/nx","device-tree/opencapi","device-tree/pci","device-tree/reserved-memory","device-tree/tpm","device-tree/vas","device-tree/vpd","error-logging","gcov","imc","index","memory","mpipl","nvlink","opal-api/index","opal-api/opal-cec-power-down-5","opal-api/opal-cec-reboot-6-116","opal-api/opal-check-async-completion-86","opal-api/opal-check-token-80","opal-api/opal-code-update-76-77-78","opal-api/opal-config-cpu-idle-state-99","opal-api/opal-console-read-write-1-2","opal-api/opal-dump-81-82-83-84-94-101-102","opal-api/opal-elog-71-72-73-74-75","opal-api/opal-flash-110-111-112","opal-api/opal-get-device-tree-118","opal-api/opal-get-epow-status-56","opal-api/opal-get-msg-85","opal-api/opal-get-msi-39-40","opal-api/opal-get-xive-20","opal-api/opal-handle-hmi-98-166","opal-api/opal-handle-interrupt","opal-api/opal-i2c-request-109","opal-api/opal-imc-counters","opal-api/opal-int-eoi-124","opal-api/opal-int-get-xirr-122","opal-api/opal-int-set-cppr-123","opal-api/opal-int-set-mfrr-125","opal-api/opal-invalid-call--1","opal-api/opal-ipmi-send-recv-107-108","opal-api/opal-led-get-set-114-115","opal-api/opal-lpc-read-write-67-68","opal-api/opal-messages","opal-api/opal-mpipl-173-174","opal-api/opal-nmmu-set-ptcr-127","opal-api/opal-npu2-146-147-148","opal-api/opal-npu2-get-set-relaxed-order-168-169","opal-api/opal-npu2-opencapi-159-160-161-171-172","opal-api/opal-nvram-read-write-7-8","opal-api/opal-param-89-90","opal-api/opal-pci-config-read-write-13-14-15-16-17-18","opal-api/opal-pci-eeh-freeze-clear-26","opal-api/opal-pci-eeh-freeze-set-97","opal-api/opal-pci-eeh-freeze-status-23","opal-api/opal-pci-err-inject-96","opal-api/opal-pci-get-hub-diag-data-50","opal-api/opal-pci-get-phb-diag-data2-64","opal-api/opal-pci-get-power-state-120","opal-api/opal-pci-get-presence-state-119","opal-api/opal-pci-get-set-pbcq-tunnel-bar-164-165","opal-api/opal-pci-map-pe-dma-window-44","opal-api/opal-pci-map-pe-dma-window-real-45","opal-api/opal-pci-map-pe-mmio-window-29","opal-api/opal-pci-msi-eoi-63","opal-api/opal-pci-next-error-60","opal-api/opal-pci-phb-mmio-enable-27","opal-api/opal-pci-poll-62","opal-api/opal-pci-reinit-53","opal-api/opal-pci-reset-49","opal-api/opal-pci-set-mve-33","opal-api/opal-pci-set-mve-enable-34","opal-api/opal-pci-set-p2p-157","opal-api/opal-pci-set-pe-31","opal-api/opal-pci-set-peltv-32","opal-api/opal-pci-set-phb-capi-mode-93","opal-api/opal-pci-set-phb-mem-window-28","opal-api/opal-pci-set-power-state-121","opal-api/opal-pci-set-xive-pe-37","opal-api/opal-pci-tce-kill-126","opal-api/opal-phb-flag-set-get-179-180","opal-api/opal-poll-events","opal-api/opal-power-shift-ratio","opal-api/opal-powercap","opal-api/opal-prd-msg-113","opal-api/opal-query-cpu-status-42","opal-api/opal-quiesce-158","opal-api/opal-read-write-tpo-dpo-103-104-105","opal-api/opal-reinit-cpus-70","opal-api/opal-resync-timebase-79","opal-api/opal-rtc-read-write-3-4","opal-api/opal-secvar","opal-api/opal-sensor-group-enable-clear-163-156","opal-api/opal-sensor-read-88","opal-api/opal-set-xive-19","opal-api/opal-signal-system-reset-145","opal-api/opal-slw-set-reg-100","opal-api/opal-start-return-cpu-41-69","opal-api/opal-sync-host-reboot-87","opal-api/opal-test-0","opal-api/opal-write-oppanel-async-95","opal-api/opal-xscom-read-write-65-66","opal-api/opal_nx_coproc_init-167","opal-api/power9-changes","opal-api/return-codes","opal-spec","overview","pci","pci-slot","platforms-and-cpus","power-management","process/CONTRIBUTING","process/dev-release-process","process/stable-skiboot-rules","process/versioning","release-notes/index","release-notes/skiboot-4.0","release-notes/skiboot-4.1","release-notes/skiboot-4.1.1","release-notes/skiboot-5.0","release-notes/skiboot-5.1.0","release-notes/skiboot-5.1.0-beta1","release-notes/skiboot-5.1.0-beta2","release-notes/skiboot-5.1.1","release-notes/skiboot-5.1.10","release-notes/skiboot-5.1.11","release-notes/skiboot-5.1.12","release-notes/skiboot-5.1.13","release-notes/skiboot-5.1.14","release-notes/skiboot-5.1.15","release-notes/skiboot-5.1.16","release-notes/skiboot-5.1.17","release-notes/skiboot-5.1.18","release-notes/skiboot-5.1.19","release-notes/skiboot-5.1.2","release-notes/skiboot-5.1.20","release-notes/skiboot-5.1.21","release-notes/skiboot-5.1.3","release-notes/skiboot-5.1.4","release-notes/skiboot-5.1.5","release-notes/skiboot-5.1.6","release-notes/skiboot-5.1.7","release-notes/skiboot-5.1.8","release-notes/skiboot-5.1.9","release-notes/skiboot-5.10","release-notes/skiboot-5.10-rc1","release-notes/skiboot-5.10-rc2","release-notes/skiboot-5.10-rc3","release-notes/skiboot-5.10-rc4","release-notes/skiboot-5.10.1","release-notes/skiboot-5.10.2","release-notes/skiboot-5.10.3","release-notes/skiboot-5.10.4","release-notes/skiboot-5.10.5","release-notes/skiboot-5.10.6","release-notes/skiboot-5.11","release-notes/skiboot-5.11-rc1","release-notes/skiboot-5.2.0","release-notes/skiboot-5.2.0-rc1","release-notes/skiboot-5.2.0-rc2","release-notes/skiboot-5.2.1","release-notes/skiboot-5.2.2","release-notes/skiboot-5.2.3","release-notes/skiboot-5.2.4","release-notes/skiboot-5.2.5","release-notes/skiboot-5.3.0","release-notes/skiboot-5.3.0-rc1","release-notes/skiboot-5.3.0-rc2","release-notes/skiboot-5.3.1","release-notes/skiboot-5.3.2","release-notes/skiboot-5.3.3","release-notes/skiboot-5.3.4","release-notes/skiboot-5.3.5","release-notes/skiboot-5.3.6","release-notes/skiboot-5.3.7","release-notes/skiboot-5.4.0","release-notes/skiboot-5.4.0-rc1","release-notes/skiboot-5.4.0-rc2","release-notes/skiboot-5.4.0-rc3","release-notes/skiboot-5.4.0-rc4","release-notes/skiboot-5.4.1","release-notes/skiboot-5.4.10","release-notes/skiboot-5.4.11","release-notes/skiboot-5.4.12","release-notes/skiboot-5.4.2","release-notes/skiboot-5.4.3","release-notes/skiboot-5.4.4","release-notes/skiboot-5.4.5","release-notes/skiboot-5.4.6","release-notes/skiboot-5.4.7","release-notes/skiboot-5.4.8","release-notes/skiboot-5.4.9","release-notes/skiboot-5.5.0","release-notes/skiboot-5.5.0-rc1","release-notes/skiboot-5.5.0-rc2","release-notes/skiboot-5.5.0-rc3","release-notes/skiboot-5.6.0","release-notes/skiboot-5.6.0-rc1","release-notes/skiboot-5.6.0-rc2","release-notes/skiboot-5.7","release-notes/skiboot-5.7-rc1","release-notes/skiboot-5.7-rc2","release-notes/skiboot-5.8","release-notes/skiboot-5.8-rc1","release-notes/skiboot-5.9","release-notes/skiboot-5.9-rc1","release-notes/skiboot-5.9-rc2","release-notes/skiboot-5.9-rc3","release-notes/skiboot-5.9-rc4","release-notes/skiboot-5.9-rc5","release-notes/skiboot-5.9.1","release-notes/skiboot-5.9.2","release-notes/skiboot-5.9.3","release-notes/skiboot-5.9.4","release-notes/skiboot-5.9.5","release-notes/skiboot-5.9.6","release-notes/skiboot-5.9.7","release-notes/skiboot-5.9.8","release-notes/skiboot-5.9.9","release-notes/skiboot-6.0","release-notes/skiboot-6.0-rc1","release-notes/skiboot-6.0-rc2","release-notes/skiboot-6.0.1","release-notes/skiboot-6.0.10","release-notes/skiboot-6.0.11","release-notes/skiboot-6.0.12","release-notes/skiboot-6.0.13","release-notes/skiboot-6.0.14","release-notes/skiboot-6.0.15","release-notes/skiboot-6.0.16","release-notes/skiboot-6.0.17","release-notes/skiboot-6.0.18","release-notes/skiboot-6.0.19","release-notes/skiboot-6.0.2","release-notes/skiboot-6.0.20","release-notes/skiboot-6.0.21","release-notes/skiboot-6.0.22","release-notes/skiboot-6.0.23","release-notes/skiboot-6.0.24","release-notes/skiboot-6.0.3","release-notes/skiboot-6.0.4","release-notes/skiboot-6.0.5","release-notes/skiboot-6.0.6","release-notes/skiboot-6.0.7","release-notes/skiboot-6.0.8","release-notes/skiboot-6.0.9","release-notes/skiboot-6.1","release-notes/skiboot-6.1-rc1","release-notes/skiboot-6.2","release-notes/skiboot-6.2-rc1","release-notes/skiboot-6.2-rc2","release-notes/skiboot-6.2.1","release-notes/skiboot-6.2.2","release-notes/skiboot-6.2.3","release-notes/skiboot-6.2.4","release-notes/skiboot-6.3","release-notes/skiboot-6.3-rc1","release-notes/skiboot-6.3-rc2","release-notes/skiboot-6.3-rc3","release-notes/skiboot-6.3.1","release-notes/skiboot-6.3.2","release-notes/skiboot-6.3.3","release-notes/skiboot-6.3.4","release-notes/skiboot-6.3.5","release-notes/skiboot-6.4","release-notes/skiboot-6.4-rc1","release-notes/skiboot-6.5","release-notes/skiboot-6.5.1","release-notes/skiboot-6.5.2","release-notes/skiboot-6.5.3","release-notes/skiboot-6.5.4","release-notes/skiboot-6.6","release-notes/skiboot-6.6.1","release-notes/skiboot-6.6.2","release-notes/skiboot-6.6.3","release-notes/skiboot-6.6.4","release-notes/skiboot-6.6.6","release-notes/skiboot-6.7","release-notes/skiboot-6.7.1","release-notes/skiboot-6.7.2","release-notes/skiboot-6.7.3","release-notes/skiboot-6.8","release-notes/skiboot-6.8.1","release-notes/skiboot-7.0","secvar/driver-api","secvar/edk2","secvar/secboot_tpm","stb","vas","xive","xscom-node-bindings"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,sphinx:55},filenames:["bmc.rst","console-log.rst","device-tree.rst","device-tree/ibm,cvc.rst","device-tree/ibm,firmware-versions.rst","device-tree/ibm,opal.rst","device-tree/ibm,opal/diagnostics.rst","device-tree/ibm,opal/dump.rst","device-tree/ibm,opal/firmware.rst","device-tree/ibm,opal/flash.rst","device-tree/ibm,opal/led.rst","device-tree/ibm,opal/nvram.rst","device-tree/ibm,opal/oppanel.rst","device-tree/ibm,opal/power-mgt.rst","device-tree/ibm,opal/power-mgt/occ.rst","device-tree/ibm,opal/power-mgt/powercap.rst","device-tree/ibm,opal/power-mgt/psr.rst","device-tree/ibm,opal/secvar.rst","device-tree/ibm,opal/sensor-groups.rst","device-tree/ibm,opal/sensors.rst","device-tree/ibm,opal/sysparams.rst","device-tree/ibm,powerpc-cpu-features/binding.rst","device-tree/ibm,powerpc-cpu-features/design.rst","device-tree/ibm,secureboot.rst","device-tree/imc.rst","device-tree/index.rst","device-tree/memory-hierarchy.rst","device-tree/nvlink.rst","device-tree/nx.rst","device-tree/opencapi.rst","device-tree/pci.rst","device-tree/reserved-memory.rst","device-tree/tpm.rst","device-tree/vas.rst","device-tree/vpd.rst","error-logging.rst","gcov.rst","imc.rst","index.rst","memory.rst","mpipl.rst","nvlink.rst","opal-api/index.rst","opal-api/opal-cec-power-down-5.rst","opal-api/opal-cec-reboot-6-116.rst","opal-api/opal-check-async-completion-86.rst","opal-api/opal-check-token-80.rst","opal-api/opal-code-update-76-77-78.rst","opal-api/opal-config-cpu-idle-state-99.rst","opal-api/opal-console-read-write-1-2.rst","opal-api/opal-dump-81-82-83-84-94-101-102.rst","opal-api/opal-elog-71-72-73-74-75.rst","opal-api/opal-flash-110-111-112.rst","opal-api/opal-get-device-tree-118.rst","opal-api/opal-get-epow-status-56.rst","opal-api/opal-get-msg-85.rst","opal-api/opal-get-msi-39-40.rst","opal-api/opal-get-xive-20.rst","opal-api/opal-handle-hmi-98-166.rst","opal-api/opal-handle-interrupt.rst","opal-api/opal-i2c-request-109.rst","opal-api/opal-imc-counters.rst","opal-api/opal-int-eoi-124.rst","opal-api/opal-int-get-xirr-122.rst","opal-api/opal-int-set-cppr-123.rst","opal-api/opal-int-set-mfrr-125.rst","opal-api/opal-invalid-call--1.rst","opal-api/opal-ipmi-send-recv-107-108.rst","opal-api/opal-led-get-set-114-115.rst","opal-api/opal-lpc-read-write-67-68.rst","opal-api/opal-messages.rst","opal-api/opal-mpipl-173-174.rst","opal-api/opal-nmmu-set-ptcr-127.rst","opal-api/opal-npu2-146-147-148.rst","opal-api/opal-npu2-get-set-relaxed-order-168-169.rst","opal-api/opal-npu2-opencapi-159-160-161-171-172.rst","opal-api/opal-nvram-read-write-7-8.rst","opal-api/opal-param-89-90.rst","opal-api/opal-pci-config-read-write-13-14-15-16-17-18.rst","opal-api/opal-pci-eeh-freeze-clear-26.rst","opal-api/opal-pci-eeh-freeze-set-97.rst","opal-api/opal-pci-eeh-freeze-status-23.rst","opal-api/opal-pci-err-inject-96.rst","opal-api/opal-pci-get-hub-diag-data-50.rst","opal-api/opal-pci-get-phb-diag-data2-64.rst","opal-api/opal-pci-get-power-state-120.rst","opal-api/opal-pci-get-presence-state-119.rst","opal-api/opal-pci-get-set-pbcq-tunnel-bar-164-165.rst","opal-api/opal-pci-map-pe-dma-window-44.rst","opal-api/opal-pci-map-pe-dma-window-real-45.rst","opal-api/opal-pci-map-pe-mmio-window-29.rst","opal-api/opal-pci-msi-eoi-63.rst","opal-api/opal-pci-next-error-60.rst","opal-api/opal-pci-phb-mmio-enable-27.rst","opal-api/opal-pci-poll-62.rst","opal-api/opal-pci-reinit-53.rst","opal-api/opal-pci-reset-49.rst","opal-api/opal-pci-set-mve-33.rst","opal-api/opal-pci-set-mve-enable-34.rst","opal-api/opal-pci-set-p2p-157.rst","opal-api/opal-pci-set-pe-31.rst","opal-api/opal-pci-set-peltv-32.rst","opal-api/opal-pci-set-phb-capi-mode-93.rst","opal-api/opal-pci-set-phb-mem-window-28.rst","opal-api/opal-pci-set-power-state-121.rst","opal-api/opal-pci-set-xive-pe-37.rst","opal-api/opal-pci-tce-kill-126.rst","opal-api/opal-phb-flag-set-get-179-180.rst","opal-api/opal-poll-events.rst","opal-api/opal-power-shift-ratio.rst","opal-api/opal-powercap.rst","opal-api/opal-prd-msg-113.rst","opal-api/opal-query-cpu-status-42.rst","opal-api/opal-quiesce-158.rst","opal-api/opal-read-write-tpo-dpo-103-104-105.rst","opal-api/opal-reinit-cpus-70.rst","opal-api/opal-resync-timebase-79.rst","opal-api/opal-rtc-read-write-3-4.rst","opal-api/opal-secvar.rst","opal-api/opal-sensor-group-enable-clear-163-156.rst","opal-api/opal-sensor-read-88.rst","opal-api/opal-set-xive-19.rst","opal-api/opal-signal-system-reset-145.rst","opal-api/opal-slw-set-reg-100.rst","opal-api/opal-start-return-cpu-41-69.rst","opal-api/opal-sync-host-reboot-87.rst","opal-api/opal-test-0.rst","opal-api/opal-write-oppanel-async-95.rst","opal-api/opal-xscom-read-write-65-66.rst","opal-api/opal_nx_coproc_init-167.rst","opal-api/power9-changes.rst","opal-api/return-codes.rst","opal-spec.rst","overview.rst","pci.rst","pci-slot.rst","platforms-and-cpus.rst","power-management.rst","process/CONTRIBUTING.md","process/dev-release-process.rst","process/stable-skiboot-rules.rst","process/versioning.rst","release-notes/index.rst","release-notes/skiboot-4.0.rst","release-notes/skiboot-4.1.rst","release-notes/skiboot-4.1.1.rst","release-notes/skiboot-5.0.rst","release-notes/skiboot-5.1.0.rst","release-notes/skiboot-5.1.0-beta1.rst","release-notes/skiboot-5.1.0-beta2.rst","release-notes/skiboot-5.1.1.rst","release-notes/skiboot-5.1.10.rst","release-notes/skiboot-5.1.11.rst","release-notes/skiboot-5.1.12.rst","release-notes/skiboot-5.1.13.rst","release-notes/skiboot-5.1.14.rst","release-notes/skiboot-5.1.15.rst","release-notes/skiboot-5.1.16.rst","release-notes/skiboot-5.1.17.rst","release-notes/skiboot-5.1.18.rst","release-notes/skiboot-5.1.19.rst","release-notes/skiboot-5.1.2.rst","release-notes/skiboot-5.1.20.rst","release-notes/skiboot-5.1.21.rst","release-notes/skiboot-5.1.3.rst","release-notes/skiboot-5.1.4.rst","release-notes/skiboot-5.1.5.rst","release-notes/skiboot-5.1.6.rst","release-notes/skiboot-5.1.7.rst","release-notes/skiboot-5.1.8.rst","release-notes/skiboot-5.1.9.rst","release-notes/skiboot-5.10.rst","release-notes/skiboot-5.10-rc1.rst","release-notes/skiboot-5.10-rc2.rst","release-notes/skiboot-5.10-rc3.rst","release-notes/skiboot-5.10-rc4.rst","release-notes/skiboot-5.10.1.rst","release-notes/skiboot-5.10.2.rst","release-notes/skiboot-5.10.3.rst","release-notes/skiboot-5.10.4.rst","release-notes/skiboot-5.10.5.rst","release-notes/skiboot-5.10.6.rst","release-notes/skiboot-5.11.rst","release-notes/skiboot-5.11-rc1.rst","release-notes/skiboot-5.2.0.rst","release-notes/skiboot-5.2.0-rc1.rst","release-notes/skiboot-5.2.0-rc2.rst","release-notes/skiboot-5.2.1.rst","release-notes/skiboot-5.2.2.rst","release-notes/skiboot-5.2.3.rst","release-notes/skiboot-5.2.4.rst","release-notes/skiboot-5.2.5.rst","release-notes/skiboot-5.3.0.rst","release-notes/skiboot-5.3.0-rc1.rst","release-notes/skiboot-5.3.0-rc2.rst","release-notes/skiboot-5.3.1.rst","release-notes/skiboot-5.3.2.rst","release-notes/skiboot-5.3.3.rst","release-notes/skiboot-5.3.4.rst","release-notes/skiboot-5.3.5.rst","release-notes/skiboot-5.3.6.rst","release-notes/skiboot-5.3.7.rst","release-notes/skiboot-5.4.0.rst","release-notes/skiboot-5.4.0-rc1.rst","release-notes/skiboot-5.4.0-rc2.rst","release-notes/skiboot-5.4.0-rc3.rst","release-notes/skiboot-5.4.0-rc4.rst","release-notes/skiboot-5.4.1.rst","release-notes/skiboot-5.4.10.rst","release-notes/skiboot-5.4.11.rst","release-notes/skiboot-5.4.12.rst","release-notes/skiboot-5.4.2.rst","release-notes/skiboot-5.4.3.rst","release-notes/skiboot-5.4.4.rst","release-notes/skiboot-5.4.5.rst","release-notes/skiboot-5.4.6.rst","release-notes/skiboot-5.4.7.rst","release-notes/skiboot-5.4.8.rst","release-notes/skiboot-5.4.9.rst","release-notes/skiboot-5.5.0.rst","release-notes/skiboot-5.5.0-rc1.rst","release-notes/skiboot-5.5.0-rc2.rst","release-notes/skiboot-5.5.0-rc3.rst","release-notes/skiboot-5.6.0.rst","release-notes/skiboot-5.6.0-rc1.rst","release-notes/skiboot-5.6.0-rc2.rst","release-notes/skiboot-5.7.rst","release-notes/skiboot-5.7-rc1.rst","release-notes/skiboot-5.7-rc2.rst","release-notes/skiboot-5.8.rst","release-notes/skiboot-5.8-rc1.rst","release-notes/skiboot-5.9.rst","release-notes/skiboot-5.9-rc1.rst","release-notes/skiboot-5.9-rc2.rst","release-notes/skiboot-5.9-rc3.rst","release-notes/skiboot-5.9-rc4.rst","release-notes/skiboot-5.9-rc5.rst","release-notes/skiboot-5.9.1.rst","release-notes/skiboot-5.9.2.rst","release-notes/skiboot-5.9.3.rst","release-notes/skiboot-5.9.4.rst","release-notes/skiboot-5.9.5.rst","release-notes/skiboot-5.9.6.rst","release-notes/skiboot-5.9.7.rst","release-notes/skiboot-5.9.8.rst","release-notes/skiboot-5.9.9.rst","release-notes/skiboot-6.0.rst","release-notes/skiboot-6.0-rc1.rst","release-notes/skiboot-6.0-rc2.rst","release-notes/skiboot-6.0.1.rst","release-notes/skiboot-6.0.10.rst","release-notes/skiboot-6.0.11.rst","release-notes/skiboot-6.0.12.rst","release-notes/skiboot-6.0.13.rst","release-notes/skiboot-6.0.14.rst","release-notes/skiboot-6.0.15.rst","release-notes/skiboot-6.0.16.rst","release-notes/skiboot-6.0.17.rst","release-notes/skiboot-6.0.18.rst","release-notes/skiboot-6.0.19.rst","release-notes/skiboot-6.0.2.rst","release-notes/skiboot-6.0.20.rst","release-notes/skiboot-6.0.21.rst","release-notes/skiboot-6.0.22.rst","release-notes/skiboot-6.0.23.rst","release-notes/skiboot-6.0.24.rst","release-notes/skiboot-6.0.3.rst","release-notes/skiboot-6.0.4.rst","release-notes/skiboot-6.0.5.rst","release-notes/skiboot-6.0.6.rst","release-notes/skiboot-6.0.7.rst","release-notes/skiboot-6.0.8.rst","release-notes/skiboot-6.0.9.rst","release-notes/skiboot-6.1.rst","release-notes/skiboot-6.1-rc1.rst","release-notes/skiboot-6.2.rst","release-notes/skiboot-6.2-rc1.rst","release-notes/skiboot-6.2-rc2.rst","release-notes/skiboot-6.2.1.rst","release-notes/skiboot-6.2.2.rst","release-notes/skiboot-6.2.3.rst","release-notes/skiboot-6.2.4.rst","release-notes/skiboot-6.3.rst","release-notes/skiboot-6.3-rc1.rst","release-notes/skiboot-6.3-rc2.rst","release-notes/skiboot-6.3-rc3.rst","release-notes/skiboot-6.3.1.rst","release-notes/skiboot-6.3.2.rst","release-notes/skiboot-6.3.3.rst","release-notes/skiboot-6.3.4.rst","release-notes/skiboot-6.3.5.rst","release-notes/skiboot-6.4.rst","release-notes/skiboot-6.4-rc1.rst","release-notes/skiboot-6.5.rst","release-notes/skiboot-6.5.1.rst","release-notes/skiboot-6.5.2.rst","release-notes/skiboot-6.5.3.rst","release-notes/skiboot-6.5.4.rst","release-notes/skiboot-6.6.rst","release-notes/skiboot-6.6.1.rst","release-notes/skiboot-6.6.2.rst","release-notes/skiboot-6.6.3.rst","release-notes/skiboot-6.6.4.rst","release-notes/skiboot-6.6.6.rst","release-notes/skiboot-6.7.rst","release-notes/skiboot-6.7.1.rst","release-notes/skiboot-6.7.2.rst","release-notes/skiboot-6.7.3.rst","release-notes/skiboot-6.8.rst","release-notes/skiboot-6.8.1.rst","release-notes/skiboot-7.0.rst","secvar/driver-api.rst","secvar/edk2.rst","secvar/secboot_tpm.rst","stb.rst","vas.rst","xive.rst","xscom-node-bindings.rst"],objects:{},objnames:{},objtypes:{},terms:{"0000000000001f00":224,"0000000000001f10":[182,183,272,275,276],"00000000300027b4":[171,173],"00000000300029f4":[171,174],"0000000030002a4c":[261,281,282,283],"00000000300051c4":[182,183],"00000000300051dc":[246,247],"0000000030012c70":[273,274],"00000000300130cc":[273,274],"000000003001362c":[182,183],"000000003001364c":224,"000000003001367c":[171,174],"0000000030013b0c":182,"0000000030013bbc":182,"00000000300142d8":[171,174],"000000003001447c":[182,183],"00000000300144c8":[182,183,224],"00000000300146d8":[261,281,282,283],"000000003001480c":[273,274],"00000000300149e8":[171,173],"0000000030014ca4":[272,275,276],"0000000030014cb0":[182,183],"0000000030014d04":[182,183],"000000003001571c":[273,274],"00000000300168fc":[162,214],"0000000030017ff0":[182,183],"0000000030018db8":224,"00000000300190ac":[273,274],"00000000300192e0":[273,274],"0000000030019aa8":182,"0000000030019c70":[256,278],"0000000030019e38":[182,183],"000000003001a03c":[171,174],"000000003001a040":[256,278],"000000003001a0c4":[256,278],"000000003001a51c":[272,275,276],"000000003001a548":[246,247],"000000003001af60":[261,281,282,283],"000000003001afdc":[261,281,282,283],"000000003001b274":[281,282,283],"000000003001b2f0":[281,282,283],"000000003001b520":182,"000000003001baac":[246,247],"000000003001bcbc":[246,247],"000000003001bd18":182,"000000003001d840":[256,278],"000000003001e27c":[182,183],"000000003001e588":[182,183],"000000003001ee74":[182,183],"00000000300248b8":224,"0000000030024b50":224,"000000003002586c":[171,174],"0000000030025c6c":224,"000000003002602c":[182,183],"00000000300267d8":[171,174],"000000003002682c":[182,183],"0000000030026a28":[171,174],"0000000030026cf0":[261,281,282,283],"000000003002760c":[182,183],"000000003002ad68":[171,173],"000000003002ad80":[171,173],"000000003003025c":[178,182,183],"0000000030030e08":[182,183],"00000000300347bc":[273,274],"00000000300364a4":[273,274],"000000003003e434":[178,182,183],"000000003003ea3c":[171,174],"000000003004ab48":[273,274],"000000003006dd70":[162,215,226,227],"000000003006ecb0":[272,275,276],"000000003006ecd4":[272,275,276],"0000000030090c28":224,"000000003009102c":[182,183],"0000000030093d80":[171,173],"0000000030093ffc":224,"000000003009abec":224,"00000000300b3dc6":[182,183],"00000000300b4f3e":[182,183],"00000000300b58bc":[171,173],"00000000300b5964":[171,173],"00000000300b98a0":[272,275,276],"00000000300bb6d2":[182,183],"00000000300be6fb":[182,183],"00000000300c5b70":182,"00000000300cb808":[273,274],"00000000300cb910":[273,274],"00000000300fd500":[182,183],"0000000030767d38":[182,183],"0000000031c03370":[273,274],"0000000031c03410":[273,274],"0000000031c034b0":[273,274],"0000000031c03540":[273,274],"0000000031c03600":[273,274],"0000000031c036d0":[273,274],"0000000031c03780":[273,274],"0000000031c03930":[256,278],"0000000031c03970":[273,274],"0000000031c039c0":[256,278],"0000000031c03a00":[273,274],"0000000031c03a50":[256,278],"0000000031c03af0":[256,278],"0000000031c03b90":[273,274],"0000000031c03ba0":[246,247],"0000000031c03bc0":[171,173],"0000000031c03bd0":[171,173],"0000000031c03c20":[246,247],"0000000031c03ca0":[246,247],"0000000031c03d20":[246,247],"0000000031c03d50":[273,274],"0000000031c03e30":[273,274],"0000000031c03f00":[273,274],"0000000031c13ab0":182,"0000000031c13b50":182,"0000000031c13be0":182,"0000000031c13c60":182,"0000000031c13d00":182,"0000000031c13d90":182,"0000000031c13e30":182,"0000000031c13f00":182,"0000000031c20000":[182,183],"0000000031c23670":[182,183],"0000000031c23910":[182,183],"0000000031c23930":[182,183],"0000000031cc37e0":[272,275,276],"0000000031cc3860":[272,275,276],"0000000031cc3a40":[272,275,276],"0000000031cc3c20":[272,275,276],"0000000031cc3e30":[272,275,276],"0000000031cc3f00":[272,275,276],"0000000031cd3370":[182,183],"0000000031cd3410":[182,183],"0000000031cd3490":[182,183],"0000000031cd3670":[182,183],"0000000031cd36a0":224,"0000000031cd3730":224,"0000000031cd37b0":224,"0000000031cd3840":224,"0000000031cd3850":[182,183],"0000000031cd38e0":[182,183],"0000000031cd3960":[182,183],"0000000031cd3a10":224,"0000000031cd3a30":[182,183],"0000000031cd3aa0":224,"0000000031cd3ab0":224,"0000000031cd3ac0":[182,183],"0000000031cd3b30":224,"0000000031cd3ba0":[182,183],"0000000031cd3bd0":224,"0000000031cd3cb0":[182,183],"0000000031cd3cf0":224,"0000000031cd3d40":[182,183],"0000000031cd3e00":[182,183],"0000000031cd3e30":224,"0000000031cd3e80":[182,183],"0000000031cd3f00":[182,183,224],"0000000031d43c60":[281,282,283],"0000000031d43ce0":[281,282,283],"0000000031d43d60":[281,282,283],"0000000031d43e30":[281,282,283],"0000000031d43f00":[281,282,283],"0000000031d639d0":[171,174],"0000000031d63a60":[171,174],"0000000031d63ae0":[171,174],"0000000031d63b70":[171,174],"0000000031d63c10":[171,174],"0000000031d63d90":[171,174],"0000000031d63e70":[171,174],"0000000031d63f00":[171,174],"0000000031e03ca0":[261,281,282,283],"0000000031e03d20":[261,281,282,283],"0000000031e03da0":[261,281,282,283],"0000000031e03e70":[261,281,282,283],"0000000031e03f00":[261,281,282,283],"0000000031fc4000":[162,215,226,227],"0000000c":[171,172,226,228],"0000001f":[229,230],"0000002c":[231,232],"000000a0":35,"000000b0":35,"000000bd":[171,172],"000000c0":35,"000000d0":35,"000000e0":35,"000000f0":35,"000001a0":35,"000001b0":35,"000001c0":35,"000001d0":35,"000001e0":35,"000008e8":[157,187],"00000fff":[282,285],"00002fffffff":[182,183],"0000303fffff":[182,183],"000030ffffff":[182,183],"000031bfffff":[182,183],"000031c0ffff":[182,183],"000051d01fff":[182,183],"00007fffffff":[182,183],"0000802c":[171,172],"000080b3cdff":[182,183],"000080b7cdff":[182,183],"0000ccc1":[272,275,276],"0000ccc2":[272,275,276],"0000ccc3":[272,275,276],"0000d007":[171,172],"0000ffffffff":[182,183],"000ft":236,"009f0000":35,"00e2147":34,"00e2148":34,"00fd7911":[231,232],"0131f0fc08":[246,247],"019a00d4":[231,232],"01f977c3":[282,283],"02021c6":[231,232],"028c":[287,291,292],"03dc":220,"04c1":[282,285],"0679f61244b":231,"07b":22,"07fb":[226,227],"083d":[178,182,183],"09cfacb":4,"0b00":[171,172],"0b01":[171,172],"0b10":[171,172],"0b11":[171,172],"0beta":4,"0bxx00xx00":[216,226,227],"0bxx11xx11":[216,226,227],"0ff7":[281,282,283],"0ff8":[281,282,283],"0fff":[281,282,283],"0ms":[134,226,229,230,287,291,292],"0us":229,"0x0":[0,2,3,5,7,8,9,13,24,27,29,30,34,41,112,134,171,172,173,182,183,226,227,231,233,245,275,276,291,292],"0x00":[35,41,70,217,231,232,288],"0x0000":[287,291,292],"0x00000000":[15,16,35,171,172,242,245,282,283],"0x000000000000":[182,183],"0x0000000000000000":[171,174,282,283],"0x0000000000000001":[256,278],"0x0000000000000100":[246,247],"0x0000000000000104":[246,247],"0x0000000000000108":[246,247],"0x000000000000010c":[246,247],"0x0000000000000e40":[282,283],"0x000000000000a83c":[272,275,276],"0x0000000000100000":[2,246,247],"0x00000000003e0000":2,"0x0000000000400000":2,"0x000000000041fae0":[291,292],"0x000000000041fb50":[291,292],"0x000000000041fbd0":[291,292],"0x000000000041fc00":[291,292],"0x000000000041fc40":[291,292],"0x000000000041fc80":[291,292],"0x000000000041fd80":[291,292],"0x000000000041fe10":[291,292],"0x000000000041fe80":[291,292],"0x000000000041fef0":[291,292],"0x000000000041ff90":[291,292],"0x0000000000600450":2,"0x0000000000c00000":2,"0x0000000000e00000":2,"0x000000003":15,"0x0000000030000000":2,"0x0000000030000010":[282,283],"0x00000000300051e4":[261,281,282,283],"0x0000000030013a08":225,"0x000000003001dce4":[261,281,282,283],"0x000000003001dd3c":[261,281,282,283],"0x000000003002c128":[261,281,282,283],"0x000000003002ecf8":[261,281,282,283],"0x0000000030030be0":[261,281,282,283],"0x00000000300a7b18":[261,281,282,283],"0x00000000300a7c34":[261,281,282,283],"0x00000000300aa5f8":[261,281,282,283],"0x00000000300aaadc":[261,281,282,283],"0x00000000300ab1d8":[261,281,282,283],"0x0000000030400000":2,"0x0000000031000000":2,"0x0000000031c236e0":[261,281,282,283],"0x0000000031c23760":[261,281,282,283],"0x0000000031c237f0":[261,281,282,283],"0x0000000031c23880":[261,281,282,283],"0x0000000031c23950":[261,281,282,283],"0x0000000031c23a90":[261,281,282,283],"0x0000000031c23b30":[261,281,282,283],"0x0000000031c23bf0":[261,281,282,283],"0x0000000031c23c90":[261,281,282,283],"0x0000000031c23d20":[261,281,282,283],"0x0000000031e00000":2,"0x00000000deadbeef":224,"0x00000001":[15,226,227],"0x0000000101000000":226,"0x00000002":15,"0x00000003":[226,227],"0x0000000400000000":2,"0x0000000410000000":[182,183],"0x00000007fe200000":2,"0x00000007fe600000":2,"0x00000008":18,"0x0000001101000000":[134,229,230,287,291,292],"0x00000100":16,"0x00000103070f1f3f":[226,227],"0x00000175":18,"0x00000176":18,"0x00000177":18,"0x00000178":18,"0x00000179":18,"0x0000017a":18,"0x0000017b":18,"0x0000017c":18,"0x00000884":[217,231,233],"0x0000100000000000":249,"0x0000100101000000":226,"0x0000102101000000":[134,229,230,287,291,292],"0x0000105101000000":[287,291,292],"0x0000144083000000":[134,229,230],"0x0000144104000000":[134,229,230],"0x0000144883000000":[287,291,292],"0x0000154883000000":[134,229,230,287,291,292],"0x0000154904000000":[134,229,230],"0x0000180101000000":226,"0x0000182101000000":[134,229,230],"0x0000183101000000":[134,229,230,287,291,292],"0x00001c5081000000":[134,229,230],"0x00001c5083000000":[134,229,230],"0x00001c5101000000":[134,229,230],"0x00001c5103000000":[134,229,230],"0x00001c5104000000":[134,229,230],"0x00001c5881000000":[287,291,292],"0x00001c5883000000":[287,291,292],"0x00001d0811000000":226,"0x000030000000":[182,183],"0x000030400000":[182,183],"0x000031000000":[182,183],"0x000031c00000":[182,183],"0x0000400000000000":[246,248],"0x000051c00000":[182,183],"0x000051d02000":[182,183],"0x000080000000":[182,183],"0x000080b3ce00":[182,183],"0x000080b7ce00":[182,183],"0x0000909101000000":[287,291,292],"0x0001":[19,54],"0x0002":[19,54],"0x0003":19,"0x0004":[54,182],"0x0008":54,"0x00080000":48,"0x000f":220,"0x00100000":[180,182],"0x0017d907":23,"0x00200000":[180,182],"0x004bxxxx":136,"0x004c0100":[257,278,282,283],"0x004cxxxx":136,"0x004dxxxx":136,"0x004e0xxx":136,"0x004e1200":182,"0x004e1xxx":136,"0x004e2xxx":136,"0x004e3xxx":136,"0x004fxxxx":136,"0x00800020":19,"0x0080100000000000":249,"0x0080xxxx":136,"0x00810001":19,"0x009a48180f01ffff":249,"0x009a48180f03ffff":249,"0x00e4":[171,172],"0x01":[0,35,50,60,70,231,233],"0x01963000":291,"0x01964000":291,"0x01965000":291,"0x01c00020":18,"0x01c10190":313,"0x01c10191":313,"0x02":[0,35,41,50,70,231,232],"0x03":[35,50,70],"0x04":[0,35,70],"0x04ea":41,"0x05":[70,217,231,232],"0x06":275,"0x068000":41,"0x068001":41,"0x08":35,"0x0840000000000000":[171,172,272,275,276],"0x0841":[272,275,276],"0x0842":[272,275,276],"0x0843":[272,275,276],"0x0844":[272,275,276],"0x0845":[272,275,276],"0x0846":[272,275,276],"0x0847":[272,275,276],"0x09":[41,171,174],"0x0f":0,"0x0f000004":2,"0x0ff0":220,"0x1":[0,2,3,9,13,14,20,24,27,29,30,41,99,107,112,134,171,172,273,274,311],"0x10":[2,5,12,24,30,35,59,231,232,291,292],"0x100":[2,27,122,182,183,202,203,231,232,246,247],"0x1000":[2,9,17,30,231,232,254,275,277,282,285],"0x10000":[2,32],"0x100000":2,"0x10000000":30,"0x100000000":[27,226,227],"0x10000003":5,"0x1000000a":27,"0x1000000b":27,"0x10000017":32,"0x10000032":20,"0x1000006b":10,"0x1000006f":10,"0x100000fd":23,"0x1000012e":4,"0x1000023a":24,"0x1000023d":24,"0x10000241":24,"0x10000242":24,"0x100002a0":13,"0x100002bc":27,"0x100002bd":27,"0x100002be":27,"0x100002bf":[9,27],"0x100002c0":27,"0x100002f5":27,"0x100002f7":27,"0x100002fc":27,"0x100002fd":27,"0x100002fe":27,"0x100002ff":27,"0x100003b8":14,"0x10000abc":27,"0x10000def":27,"0x1000a7":5,"0x10077":5,"0x1014":[27,30,41],"0x1017":[231,232],"0x10200000":24,"0x1020013":275,"0x104":[246,247],"0x10414e43":34,"0x10f":3,"0x11":[5,59],"0x110":[2,3,217,231,233],"0x11000":13,"0x111":3,"0x114":224,"0x118":24,"0x11c":[231,233],"0x11e1a300":13,"0x11e4":224,"0x12":[5,59],"0x120":2,"0x126":30,"0x12c":[182,246,247],"0x13":[0,5,59],"0x130":[217,231,233],"0x134":[261,273,274,281,282,283],"0x138":224,"0x14":[0,5,59,221],"0x140":[261,281,282,283],"0x142":34,"0x14233":34,"0x15":[2,30],"0x150":[261,281,282,283],"0x158":[246,247],"0x15d9ad1c":26,"0x164":[261,281,282,283],"0x164d3322":34,"0x168":[231,233],"0x169626d2c":[226,227],"0x16c":[182,183],"0x170":[231,233],"0x17fe":[5,59],"0x17ff":[5,59],"0x18":[2,213,220],"0x180":[182,183,272,275,276],"0x180000":24,"0x1801010":5,"0x184":[273,274],"0x186a0":13,"0x188":182,"0x18c":[217,231,233],"0x1903010":5,"0x198":[217,224,231,233],"0x1a0000000000":[226,227],"0x1a00001f":[275,276],"0x1a05010":5,"0x1b0":[162,215,226,227],"0x1b07010":5,"0x1b3f5":8,"0x1b8":[261,272,275,276,281,282,283],"0x1c":[2,273,274,291,292],"0x1c0":[182,273,274,281,282,283],"0x1c09010":5,"0x1c8":[231,233],"0x1d01d6d1":23,"0x1d0b010":5,"0x1d4":[261,281,282,283],"0x1d4d3142":34,"0x1d8":[261,281,282,283],"0x1d9e":[182,183],"0x1e":30,"0x1e00":[171,174],"0x1e07":[171,174],"0x1e0d010":5,"0x1e848000":2,"0x1f":[1,30],"0x1f00":224,"0x1f0f010":5,"0x1f4":[231,233],"0x1fc":[231,233],"0x1ff":30,"0x1fffffff":[137,246,248],"0x2":[2,5,12,13,20,24,27,29,30,88,99,107,112,221,226,228,311],"0x20":[2,13,19,35,182,183,231,232,233,268,273,291,292],"0x200":[30,282,283],"0x2000":30,"0x20000":[30,202,203],"0x2000000":30,"0x20000000":[7,261,275,276,281,282,283],"0x20000020":2,"0x20010":[5,59],"0x20010800":[171,172,242],"0x20011":[5,59],"0x20011000":[246,248],"0x20012":[5,59],"0x20013":[5,59],"0x20014":[5,59],"0x2010000":2,"0x2010900":2,"0x2011010":5,"0x2012000":2,"0x2012400":2,"0x20202020":34,"0x202d1":[182,183],"0x2040000000000000":[171,172,182,183],"0x20434501":34,"0x205a4c37":8,"0x20e65f75":23,"0x20ffe":[5,59],"0x20fff":[5,59],"0x21":[2,35],"0x2113010":5,"0x217fe":59,"0x217ff":59,"0x2180":30,"0x22":[2,35,147,149],"0x22071917":34,"0x2215010":5,"0x22ffe":[5,59],"0x22fff":[5,59],"0x23":[2,35],"0x2317010":5,"0x237fe":[5,59],"0x237ff":[5,59],"0x238":[217,231,233],"0x24":[2,35,157,171,173,187,193,291,292],"0x240000":36,"0x2419010":5,"0x25":2,"0x250":[217,231,233],"0x251b010":5,"0x26":2,"0x261d010":5,"0x27":2,"0x274":[231,233],"0x28":[2,182,183],"0x28000000":7,"0x2ac":[182,183],"0x2b010a84":182,"0x2c":[27,29,171,174,224,231,233,261,281,282,283],"0x2cac0a94":34,"0x2f4":[217,231,233],"0x2ffe":[5,59],"0x2fff":[5,59],"0x2x":35,"0x3":[2,5,13,27,29,30,88,171,172,226,228,273,274],"0x30":[2,13,20,35,171,174,182,183,224,226,227,231,233],"0x300000":34,"0x30000000":[2,5,36,226,227],"0x300000004":[226,227],"0x30000020":2,"0x300050c0":5,"0x3003e434":[178,182,183],"0x3007a000":5,"0x3007b010":5,"0x3008c3f0":5,"0x300ac650":8,"0x300d4b98":[281,282,283],"0x300d4bc8":[281,282,283],"0x3023ec40":36,"0x30313133":34,"0x3031464e":34,"0x304":[231,233],"0x30400000":2,"0x3044ad90":[182,183],"0x3044b230":[275,276],"0x30453231":34,"0x30493d20":[256,278],"0x3052b9d8":[281,282,283],"0x305ed930":[171,173],"0x30800a88":[261,281,282,283],"0x30ae0530":[246,248],"0x31":275,"0x31000000":2,"0x31304354":34,"0x31434304":34,"0x31565a02":34,"0x31e00000":2,"0x32":[26,250,273,274],"0x320":[291,292],"0x32313437":34,"0x32a902cb":34,"0x3300000001":[226,227],"0x33cf4000":[178,182,183],"0x34":[2,182,183,261,281,282,283],"0x34010042":34,"0x340b157c":34,"0x3438534e":34,"0x35":2,"0x350":224,"0x35324645":34,"0x358":[171,174],"0x370":[246,247],"0x370c0000":34,"0x37305f30":8,"0x3735205a":8,"0x37fe":[5,59],"0x37ff":[5,59],"0x38":[2,162,215,226,227,273,274],"0x38c":[273,274],"0x39c":[261,281,282,283],"0x3a":[231,232,246,247,249,250,273,274],"0x3b":[226,227,231,232],"0x3b001010":5,"0x3b103010":5,"0x3b205010":5,"0x3b307010":5,"0x3b409010":5,"0x3b9aca00":13,"0x3c":[246,247],"0x3c435333":34,"0x3e":202,"0x3e0000":2,"0x3f":2,"0x3f8":2,"0x3fc00":2,"0x3ffff":2,"0x4":[2,5,20,27,30,99,117,171,172,226,228,242],"0x40":[3,23,30,35,182,226,227,231,233],"0x400":[17,50],"0x4000":[2,26],"0x40000":[2,24],"0x400000":2,"0x4000000":9,"0x40030":58,"0x4011400":30,"0x4011440":30,"0x40d487ff":23,"0x41":35,"0x42010":[261,281,282,284],"0x42018":[261,281,282,284],"0x4239":34,"0x424a3030":34,"0x44":[35,182,183],"0x440b400":34,"0x45":35,"0x45000020":[231,233],"0x45000040":[231,233],"0x45000060":[231,233],"0x45000080":[231,233],"0x45043030":34,"0x454":[162,215,226,227],"0x466a42a3":23,"0x47003":13,"0x47c":[291,292],"0x48":[5,34,35,55,70,162,171,174,182,183,215,226,227],"0x484f5220":34,"0x485702":34,"0x4b0":[217,231,233],"0x4b4b4b4b":35,"0x4c":[162,171,174,182,183,215,224,226,227,246,247,261,272,275,276,281,282,283],"0x4c1":30,"0x4c373730":8,"0x4c4c4c4c":35,"0x4d49205a":8,"0x4d6ee0c9":23,"0x4e494452":34,"0x4ea":27,"0x4x":35,"0x5":[2,27,171,172],"0x50":[3,35,231,233,273,274],"0x5011000":29,"0x504e0730":34,"0x50520881":34,"0x5053424b":313,"0x50973c87":34,"0x515dc2a5":23,"0x533c9b37":35,"0x54":[171,172,182,231,233,256,278],"0x54045649":34,"0x54380000":30,"0x543c0000":30,"0x543e2000":30,"0x54545454":30,"0x54c":[272,275,276],"0x57":32,"0x570":[217,231,233,272,275,276],"0x58":[231,233],"0x5a":220,"0x5a0":[217,231,233],"0x5a618f4d":34,"0x5b0":[272,275,276],"0x5c":[182,217,231,233,261,281,282,283],"0x5c0":[217,231,233],"0x5cb3614d":34,"0x5f303735":8,"0x6":[2,19],"0x60":[35,182,256,278],"0x600":[217,231,233],"0x6000000":34,"0x60000000":30,"0x600450":2,"0x600c1":30,"0x600c3":30,"0x60200":30,"0x60400":[27,30],"0x617":30,"0x62":[0,286,291,292],"0x622":30,"0x62c":[273,274],"0x630":[162,215,226,227],"0x64":[27,256,261,278,281,282,283],"0x6504603":34,"0x68":[217,231,233,261,273,274,281,282,283,291,292],"0x680":[281,282,283],"0x6c":[231,233],"0x7":[2,30],"0x70":[35,182,183],"0x706369652d736c6f":[226,227],"0x71f9c40":34,"0x7303045":34,"0x7380ed6a":23,"0x74":[273,274,291,292],"0x7473000000000003":[226,227],"0x75":1,"0x77":[1,171,172],"0x77777777":30,"0x78":[34,291,292],"0x788":[226,227],"0x78f":29,"0x795fea0d":23,"0x7a":35,"0x7b8":[226,227],"0x7c":[261,281,282,283,291,292],"0x7c8":[226,227],"0x7d0":5,"0x7d800026":225,"0x7f":[14,32],"0x7f3":[226,227],"0x7fff0000":30,"0x8":[2,5,24,27],"0x80":[2,35,50,135,261,273,274,281,282,283],"0x800":[2,27],"0x8000":2,"0x80000":2,"0x800000":2,"0x8000000":7,"0x80000000":[27,29,30,226,227],"0x8000000000000000":150,"0x80000001":19,"0x80020000":2,"0x80021000":2,"0x80022000":2,"0x80023000":2,"0x80024000":2,"0x80025000":2,"0x80026000":2,"0x80027000":2,"0x8010c3f":27,"0x8010c7f":27,"0x8013c00":27,"0x802c":26,"0x803":[226,227],"0x80d":13,"0x80f00103":[246,247],"0x81003":13,"0x82e":13,"0x84":[217,231,233],"0x844":[272,275,276],"0x84cc0052":34,"0x850":13,"0x86c":[171,174],"0x871":13,"0x88":[231,233,261,281,282,283,291,292],"0x892":13,"0x8b3":13,"0x8c":[182,183],"0x8c0":[162,215,226,227],"0x8d":34,"0x8d5":13,"0x8e":8,"0x8f6":13,"0x9":27,"0x90":[35,224,246,247],"0x900":27,"0x90000":[11,76],"0x9000000000000000":[282,283],"0x9000000002803002":[261,281,282,283],"0x90000755":[171,174],"0x9010c3f":29,"0x9012000":2,"0x9012400":2,"0x9013c00":2,"0x9013c40":2,"0x917":13,"0x938":13,"0x94":[261,281,282,283],"0x95":1,"0x95a":13,"0x97b":13,"0x98":[7,24,217,231,233,291,292],"0x984":[171,174],"0x985e80f1":34,"0x989680":13,"0x99999999":[226,227],"0x99c":13,"0x9a00000":5,"0x9bd":13,"0x9c":18,"0x9c40":13,"0x9d":275,"0x9df":13,"0x9e":275,"0x9f":275,"0x9f0":[246,247],"0xa":[246,247],"0xa0":[35,275],"0xa00":13,"0xa011":220,"0xa21":13,"0xa42":13,"0xa64":13,"0xa64ab07d":[246,247],"0xa64bb17d":[246,247],"0xa6e2207d":[246,247],"0xa85":13,"0xa9db06b8":23,"0xaa":3,"0xaa6":13,"0xac7":13,"0xae4":[281,282,283],"0xae9":13,"0xb0":[162,215,226,227,261,281,282,283],"0xb0000002":35,"0xb0020":2,"0xb0a":13,"0xb2b":13,"0xb30":[261,281,282,283],"0xb4":[231,233],"0xb4866546":23,"0xb4c":13,"0xb67d219d":23,"0xb6e":13,"0xb8":[162,215,226,227,231,233,273,274],"0xb8f":13,"0xb98":14,"0xbb0":13,"0xbc":[261,281,282,283],"0xbd1":13,"0xbf3":13,"0xc":[2,20,26,30,162,171,172,202,203,215,226,227,261,281,282,283],"0xc0":[0,2,246,247],"0xc00":316,"0xc000":316,"0xc00000":2,"0xc00000000000ac60":[291,292],"0xc00000000000b65c":[261,281,282,283],"0xc000000000020e78":[291,292],"0xc000000000027890":[226,227],"0xc000000000028e5c":[261,281,282,283],"0xc000000000030b84":[261,281,282,283],"0xc0000000000310b0":[261,281,282,283],"0xc00000000004e0f4":[291,292],"0xc00000000004f054":[291,292],"0xc0000000000500cc":[291,292],"0xc000000000050bf8":[291,292],"0xc0000000000a7168":[261,281,282,283],"0xc0000000000a9060":[261,281,282,283],"0xc0000000000ac9b8":[261,281,282,283],"0xc0000000000b1c44":[291,292],"0xc0000000000b2424":[291,292],"0xc00000000012d6c8":[261,281,282,283],"0xc00000000012da28":[261,281,282,283],"0xc0000000001366f4":[261,281,282,283],"0xc00000000018a570":[261,281,282,283],"0xc0000000001f9510":[291,292],"0xc0000000002a68f8":[291,292],"0xc0000000002bf3d4":[291,292],"0xc0000000003a0880":[291,292],"0xc0000000003a4f14":[291,292],"0xc0000000003a5328":[291,292],"0xc0000000004792d4":[261,281,282,283],"0xc0000000006d3b90":[246,247],"0xc000000000aa8054":[226,227],"0xc00000000fe00000":[231,233],"0xc0000003f9f41000":[231,233],"0xc000001fea6e7870":[261,281,282,283],"0xc000001fea6e78c0":[261,281,282,283],"0xc000001fea6e7960":[261,281,282,283],"0xc000001fea6e7990":[261,281,282,283],"0xc000001fea6e7ad0":[261,281,282,283],"0xc000001fea6e7b40":[261,281,282,283],"0xc000001fea6e7b60":[261,281,282,283],"0xc000001fea6e7bd0":[261,281,282,283],"0xc000001fea6e7c80":[261,281,282,283],"0xc000001fea6e7d20":[261,281,282,283],"0xc000001fea6e7db0":[261,281,282,283],"0xc000001fea6e7e20":[261,281,282,283],"0xc0300000":30,"0xc14":13,"0xc3":0,"0xc35":13,"0xc4":[246,247],"0xc56":13,"0xc594c31":34,"0xc7":2,"0xc78":13,"0xc8":[273,274],"0xc99":13,"0xcba":13,"0xcc":[261,281,282,283],"0xcdb":13,"0xce0900":[162,214,224],"0xcfd":13,"0xd":[24,202,203],"0xd0":[35,182,261,281,282,283],"0xd00":316,"0xd000":316,"0xd00dfeed":[226,227],"0xd00e":26,"0xd1569c53":34,"0xd1e":13,"0xd2":26,"0xd3f":13,"0xd4":[162,215,226,227,261,281,282,283],"0xd54775d5":23,"0xd60":13,"0xd8":[30,171,174],"0xd82":13,"0xd9d714ab":34,"0xda3":13,"0xdc":[182,183],"0xdda4f986":34,"0xe0":[35,162,215,226,227],"0xe00000":2,"0xe0000000":[137,246,247,248],"0xe2f541f":23,"0xe40":[182,183],"0xe6":29,"0xe7":29,"0xe8":29,"0xeb":[217,231,232],"0xec":[261,281,282,283],"0xf0":[162,215,226,227,231,232],"0xf000":[282,285],"0xf0000000":30,"0xf0000001":20,"0xf0000003":20,"0xf0000007":[273,274],"0xf0000012":20,"0xf0000016":20,"0xf000001d":20,"0xf0000023":20,"0xf0000024":20,"0xf0000025":20,"0xf0000026":20,"0xf0000027":20,"0xf0092df9":[246,247],"0xf010800":30,"0xf010840":30,"0xf010900":30,"0xf1e000":29,"0xf4":[256,278],"0xf5552d00":2,"0xf6":2,"0xf9fc5095":23,"0xfa0":13,"0xfb708535":23,"0xfc":[261,281,282,283],"0xfc000":30,"0xfcff8":30,"0xfcff9":30,"0xfcffa":30,"0xfcffb":30,"0xfd450000":32,"0xfddf8000":14,"0xfe200000":2,"0xfe600000":2,"0xfeedf00d":126,"0xff":[27,30,50,121,171,172,184,220,226,227,231,233,316],"0xff00":27,"0xff8":30,"0xffe":[5,59],"0xfff":[5,28,59,229,230],"0xfff0":[14,282,283],"0xfff8":[14,282,283],"0xffffff":[171,172],"0xffffffd5":13,"0xffffffd6":13,"0xffffffd7":13,"0xffffffd8":13,"0xffffffd9":13,"0xffffffda":13,"0xffffffdb":13,"0xffffffdc":13,"0xffffffdd":13,"0xffffffde":13,"0xffffffdf":13,"0xffffffe0":13,"0xffffffe1":13,"0xffffffe2":13,"0xffffffe3":13,"0xffffffe4":13,"0xffffffe5":13,"0xffffffe6":13,"0xffffffe7":13,"0xffffffe8":13,"0xffffffe9":13,"0xffffffea":13,"0xffffffeb":13,"0xffffffec":13,"0xffffffed":13,"0xffffffee":13,"0xffffffef":13,"0xfffffff":[246,247],"0xfffffff0":13,"0xfffffff1":13,"0xfffffff2":13,"0xfffffff3":13,"0xfffffff4":13,"0xfffffff5":13,"0xfffffff6":13,"0xfffffff7":13,"0xfffffff8":13,"0xfffffff9":13,"0xfffffffa":13,"0xfffffffb":13,"0xfffffffc":13,"0xfffffffd":13,"0xfffffffe":13,"0xffffffff":[2,13,171,172,182,183,316],"0xffffffffffffffff":182,"0xffffxxxx":[271,275,276],"1000m":[201,202,203,229,230,275,277],"100kb":[282,285],"100m":[171,172,229,230,231,235,275,277,282,283,287,289,291,292],"1016b":313,"102m":[171,172],"105d80f85b":[287,291,292],"10784at":35,"10b5":221,"10k":[275,276],"10m":[182,183,202,229,254,275,276],"10th":[144,146,170,195,286,296],"10u":229,"10x":[182,183],"1172a6c57ff3c66f6361e572a1790cbcc0e5ff37":[171,175],"11f8":221,"11m":[134,229,230],"11th":[151,202,217,219,220,221,222,232,246,268,273,274,275,276,277,284],"127a7dac":193,"128k":41,"128kb":41,"128kbit":250,"128mb":[88,202,203],"128mbit":[147,148],"12c":136,"12k":[275,276],"12m":226,"12mb":[275,276],"12th":[152,190,201,220,221,222,227,228,252,272],"1302lfa":[171,172],"13th":[151,152,153,168,169,198,228,241],"14ed2b842f61":[291,292],"14kb":[291,292],"14m":[134,229,230],"14th":[147,148,149,154,199,215,237,253,275,282,283,284,285],"15b3":[258,279,282,283],"15cec493804ff14e6246eb1b65e9d0c7cb469a81":191,"15d9acb6":[171,172],"15th":[139,155,164,165,174,242],"168m":[182,271,275,276],"16bit":[229,230],"16gb":[275,276],"16k":[24,35,133],"16kb":[246,247],"16m":[255,275],"16mb":89,"16th":[156,157,160,162,184,190,192,193,212,224,233,238,249,271,291,293,298],"16x2":12,"170m":[254,275,276],"17m":[134,229,230],"17th":[147,157,184,185,186,187,188,189,200,203,232,233,255],"1867mhz":[246,248],"18th":[150,158,161,162,163,232,233,234,235,236,260],"19_1":[171,174],"19e5":[213,220],"19th":[143,159,163,169,170,216,225,235,259,269,276,280],"1aa0":84,"1aa8":84,"1ab0":84,"1bb7503":4,"1c00":[34,84],"1c00020":18,"1c00040":[171,172],"1c08":84,"1c40":84,"1c48":84,"1c58":221,"1e00":34,"1eb":103,"1fb10de164d3ca034193df81c1f5d007aec37781":191,"1kb":[144,291,292],"1mb":[133,182,183],"1ms":[182,183,207,220,275,276],"1sec":[246,247],"1second":275,"1st":[35,166,167,176,193,194,247,287],"1ull":[58,72],"1us":229,"20010a80":[171,172,242],"20010abf":[171,172,242],"200ea":[281,282,283],"200m":[171,172,254,275,276],"200n":229,"201140a":[202,203],"201d1":[254,275,277],"201ffe000000":[261,281,282,283],"201fff800000":[261,281,282,283],"2053616d":35,"20m":[226,227,254,275,276,291,292],"20th":[160,234,235,257,278,297],"20x":[275,276],"211bd05":4,"21st":[139,148,158,159,162,175],"22c":136,"22nd":[163,210,224,225,230,239,243,274,298,302,304],"23m":[287,291,292],"23rd":[139,171,182,183,203,204,205,206,236,266],"23s":[162,215,226,227,246,247],"243176c":[291,292],"24m":[287,291,292],"24th":[180,223,224,225,226,227,228,294],"250m":[229,230,282,283,289],"256gb":[275,276],"256k":24,"256kb":88,"256m":[220,255,275],"256mb":[88,226,227],"256tb":88,"25th":[193,226,229,230],"26th":[159,160,165,166,185,196,204,310],"27th":[154,155,187,188,254,263],"280u":[291,292],"28th":[139,178,181,183,191,194,208,220,245,267,308,310],"29m":[287,291,292],"29th":[157,158,207,240,265,277,283],"2a00":34,"2b841bf0ef1b":268,"2d12000870e04020":[171,172],"2d343241":35,"2e12002870e04000":[272,275,276],"2e12002870e14000":[272,275,276],"2e205365":35,"2e205468":35,"2fbffff4":[162,215,226,227],"2g6b2":[26,171,172],"2kb":[144,147,149,291,292],"2mb":[39,147,148,275,276],"2ms":[291,292],"2nd":[35,168,192,195,196,197,198,199,200,201,202,203,204,205,206,211,251,285],"2s2u":[229,230],"2second":[207,220],"2to3":[275,276],"2uess":[246,248],"2us":229,"300000f8":224,"30034018300a343c":224,"30034018300c5ab0":224,"3003438830823f50":[162,214],"300cb808":[273,274],"300x":[171,172],"30m":[202,287,291,292],"30min":146,"30s":[275,276],"30th":[145,151,170,189,190],"31c30000":[226,228],"31c339e0":[226,228],"31m":[134,229,230],"31st":[139,171,172,173,174,175,229,231,232,233,234,235,236,250],"3212000870e04000":[261,281,282,285],"3212000870e14010":[261,281,282,285],"323k":[291,292],"32b":313,"32bit":[132,171,172,202,204,224],"32k":[24,313],"32m":[229,230],"33m":[287,291,292],"35c66b8ce5a2":[246,248],"35m":[134,229,230],"36asf2g72pz":[26,171,172],"36m":[287,291,292],"375k":[291,292],"37ea3cfdc852":273,"3800m":167,"3860000a":[162,215,226,227],"38a10020":[162,215,226,227],"394a00147d5a03a6":[178,182,183],"3a00":34,"3a01":34,"3b3c5962f432":268,"3c12000870e04000":[246,247],"3db397ea5892a":[275,276],"3e4577939bbf":[178,182,183],"3f8":2,"3fc0000000000":[2,27,202,203],"3fff000400000":27,"3ffff80020000":2,"3mb":36,"3minut":[182,183],"3ms":[275,276],"3rd":[35,196,213,221,227,270,282,289,291,292,293,304,308],"4010c00":[226,228],"40k":[202,203],"40mb":[182,183],"412kb":[171,172],"42a":35,"42a10784at":35,"42d5d047":[217,231,233],"440m":[229,230],"4548004c":35,"4572726f":35,"460gb":[182,183],"47c09cdfe7a3":[271,275,276],"49m":226,"4b000107":35,"4b4b4b4b":35,"4b77f61d":[162,215,226,227],"4b8cc05a94513816d43fb8bd6178896b430af08f":[257,278,282,283],"4bfffe6d":[162,215,226,227],"4bit":1,"4c4c4c4c":35,"4c95b5e04e3c4f72e4005574f67cd6e365d3276f":189,"4d54001c":35,"4gb":[88,89,107,193,202,203,271,275,276],"4gte":298,"4kb":[168,246,247],"4kbit":250,"4mb":[182,183],"4tb":[75,171,172,238,291,292],"4th":[35,153,154,164,179,189,197,209,290],"500kb":76,"50m":[171,172,243],"512gb":[171,172,238],"512k":24,"512kb":[171,172,173],"512mb":[182,183,220],"51m":[134,229,230],"524d":34,"526ff79":4,"52fe":34,"52s":288,"533c9b37":35,"53616d70":35,"540mb":[182,183],"5544003c":35,"554400a7":35,"55ae15b":140,"56532f5":4,"583c8203":226,"5ac71c9":220,"5gt":220,"5kb":[291,292],"5mb":52,"5ms":[220,282,283],"5second":166,"5th":[165,188,189,190,198,218,222,244,256],"600c3c0100000":[282,285],"600c3c0300000":30,"600e800000000":29,"603fc00000000":[29,226,228,257,275,276],"60ce59ccd0e9":221,"616d706c":35,"623fc00000000":[231,232,257,275,276],"62ac7631a":[231,236],"6374696f":35,"64756d6d":35,"64bit":[120,132,171,172,175,224],"64byte":[70,291,292],"64k":[2,24,41,219,255,275,291,292,316],"64mb":275,"6572726f":35,"66696e65":35,"6767696e":35,"696a6b6c":35,"6a00709":[231,232],"6a78496":4,"6c652065":35,"6d6e6f70":35,"6d706c65":35,"6e203200":35,"6f6e3100":35,"6f722053":35,"6q0dg340so":[231,232],"6th":[139,166,172,177,182,199,246,247,248,258,279,288],"6x64k":[226,228],"706c6520":35,"71664fd":141,"72206c6f":35,"726f7220":35,"726f7273":35,"72726f72":35,"736a08b996e292a449c4996edb264011dfe56a40":[246,248],"737c0ba3d72b8aab05a765a9fc111a48faac0f75":[275,276],"75mb":52,"768mb":[226,227],"77mb":[147,148],"780u":[291,292],"790275m":182,"793f6f5b32c96f2774bd955b6062c74a672317ca":189,"797a00":35,"7a3f307":[275,276],"7bcbc78c":268,"7c7b1b7848002514":[182,183],"7c7b1b7848002524":[182,183],"7c7f1b78":[162,215,226,227],"7c832378":[162,215,226,227],"7ffddf8000":14,"7th":[167,200,219,223,224,225,262,264],"8013c00":27,"80eee1946":[246,247],"80h":[282,285,291,292],"815417dcda2e":[280,282,283],"8340a9642bba":275,"852c0000":[231,232],"85a1de35cbe4":[171,174],"85cf528":4,"87m":[134,229,230],"8gt":220,"8gv0h":155,"8kb":76,"8tb":[182,183],"8th":[167,168,201,206,220,221,222,292],"900000000280b033":[231,233],"9078f8268922":[287,291,292],"90d53934c2da":182,"90ec2e65314c":[282,285],"95f7b3b9698b":[291,292],"9727fe3":[231,232],"97m":[287,291,292],"9817c9e29b6fe00daa3a0e4420e69a97c90eb373":[231,234],"99505c03f493":[268,273],"99m":[287,291,292],"9c2d82394fd2303847cac4a665dee62556ca528a":191,"9c73e9f":[231,232],"9th":[139,155,156,161,164,169,173,186,214,248,261,281,295],"\u00ecbm":23,"abstract":[51,106,118,132,138,146,226,227,246,247,316],"boolean":[135,250,275,276],"break":[2,171,172,174,182,183,202,204,219,220,224,226,227,229,230,231,234,273,274,282,283,287,291,292],"byte":[1,11,14,34,35,39,47,55,69,70,75,76,78,84,88,89,103,118,130,161,162,171,172,173,182,183,184,202,203,215,224,226,227,229,230,231,232,246,247,248,253,254,257,261,273,274,275,276,277,281,282,283,285,287,291,292,313,316],"c\u00e9dric":[147,148,171,184,185,193,202,203,219,220,229,275],"case":[2,14,17,22,35,44,46,50,55,58,61,68,70,73,104,114,120,122,124,134,135,144,145,147,148,149,150,160,162,163,164,171,172,173,177,178,180,182,183,194,195,198,202,203,205,213,215,216,217,220,221,226,227,228,229,230,231,232,233,241,246,247,248,250,251,257,258,261,266,269,272,273,274,275,276,277,278,279,281,282,283,284,285,287,291,292,311,313,316],"catch":[146,171,172,202,204,220,246,247,273,275,276,288],"char":[35,44,68,118,288,311],"class":[15,16,19,27,30,41,54,162,171,172,213,215,220,258,279,282,283],"const":[35,49,68,311,314],"default":[1,2,4,14,20,41,132,133,162,171,172,182,183,189,195,199,202,203,204,205,207,213,220,221,226,227,228,229,230,231,232,235,238,246,247,248,255,256,261,266,269,273,274,275,276,278,281,282,283,285,287,291,292,298,305,313,316],"enum":[20,35,46,54,58,67,69,70,71,79,80,81,82,84,92,95,96,98,100,101,102,106,107,112,115,271,272,275,276],"export":[14,15,41,109,119,133,135,145,171,172,175,182,183,220,221,222,224,226,227,229,230,231,235,258,279,282,283,291,292,315],"final":[108,139,147,148,166,171,172,173,174,175,176,181,182,183,202,203,206,217,220,221,222,223,224,225,227,228,230,231,232,233,234,235,236,247,248,258,273,279,282,283,284,285,291,292],"float":[21,22],"fr\u00e9d\u00e9ric":171,"function":[2,6,17,22,35,39,41,42,44,56,57,58,61,69,70,74,75,87,88,89,90,93,97,98,99,100,101,103,105,108,121,132,134,144,145,146,147,148,151,154,161,162,171,172,173,174,180,182,183,184,185,189,202,203,204,206,207,215,217,219,220,221,223,224,225,226,227,229,230,231,232,233,246,247,248,250,257,258,261,266,273,274,275,276,278,279,281,282,283,286,287,288,291,292,298,311,314,316],"hor\u00e1k":[147,148],"import":[36,51,76,133,139,140,165,168,171,172,184,185,189,201,202,203,204,220,226,227,228,231,232,238,246,247,258,268,269,273,274,279,311],"int":[35,43,44,60,73,75,106,109,110,117,119,120,128,204,311,314],"long":[2,42,75,93,108,147,149,171,172,182,183,202,204,207,209,217,220,226,227,228,231,233,246,247,258,259,261,266,273,274,275,276,277,279,280,281,282,283,285,287,291,292],"new":[1,4,5,19,21,22,28,35,40,44,47,54,58,70,71,73,77,107,108,113,118,125,130,131,133,134,139,140,146,154,157,162,173,174,175,187,188,189,190,192,193,195,196,197,198,199,200,201,204,205,206,209,215,218,219,221,222,223,225,228,233,234,235,236,237,238,241,244,248,258,267,273,274,275,276,277,279,284,285,301,308,311,313,314,316],"null":[35,43,44,45,53,55,75,81,117,118,144,145,146,166,171,172,174,182,183,202,217,220,226,227,231,233,261,268,273,275,276,277,278,281,282,283,288,311],"public":[23,42,81,118,133,138,141,219,226,227,291,292,314],"return":[17,35,38,41,42,46,49,51,52,56,57,58,59,62,66,68,73,88,89,90,93,97,98,101,103,105,108,121,130,134,135,146,153,154,158,160,161,162,163,171,172,173,174,177,180,181,182,183,187,191,193,201,202,203,208,213,214,215,216,217,220,221,224,225,226,227,228,229,231,232,233,234,241,246,247,248,251,252,256,258,261,267,271,273,274,275,276,278,279,281,282,283,285,286,287,289,291,292,294,307,309,311,316],"short":[42,124,125,182,183,212,217,219,220,221,222,224,225,226,227,228,230,231,232,235,246,247,258,279,282,283,292],"static":[1,39,62,64,65,88,106,114,115,125,126,147,148,161,171,172,184,185,206,217,224,226,227,231,233,246,247,314],"switch":[0,58,101,102,132,133,135,146,171,172,173,182,183,201,202,203,213,220,221,226,227,229,230,241,246,247,248,271,273,275,276,282,283,285,287,291,292,312,313,316],"throw":[182,183,220,246,247,291,292],"transient":[41,117],"true":[4,106,134,171,172,182,183,202,203,204,226,227,228,231,232,258,273,274,279,282,283,291,316],"try":[5,43,44,49,113,131,147,149,162,171,172,182,183,193,202,203,204,215,217,220,224,226,227,229,230,231,232,233,241,246,248,250,261,269,271,272,273,274,275,276,279,281,282,283,285,287,291,292,316],"var":[17,291,292,311],"void":[35,44,50,51,58,83,84,106,116,118,124,125,217,231,233,311,314],"while":[1,2,13,20,28,40,41,42,43,44,50,61,76,81,93,102,103,108,117,121,131,132,133,138,157,171,172,173,174,179,182,183,187,189,191,193,201,202,203,207,208,217,219,220,221,224,226,227,228,229,230,231,232,233,243,246,247,248,250,255,261,268,272,273,274,275,276,278,281,282,283,285,287,288,291,292,298,311,313,316],AND:[14,246,247,282,283],APs:139,ARE:132,ATS:[73,221,268,273,287,291,292],Added:[3,147,148,171,172,184,185,275,276],Adding:[171,172,220,224,261,281,286,291,292],And:[37,61,68,71,162,171,172,173,215,220,229,258,279,282,283,284,287],Are:22,Bus:[60,74,75,201,231,232],But:[37,147,149,162,163,171,173,180,181,182,183,208,215,216,217,226,227,231,233,246,247,261,267,268,271,272,273,274,275,276,281,282,283],CEs:[181,208,267,273,274],CRS:[202,203,229,230,246,247],DTS:[19,24,37,171,172,220,246,247],Doing:[171,172,226,227,246,247,279,282,283,298],EAS:316,ECCed:[287,291,292],EQs:[171,172,220,241,316],ESe:[171,172,241],Eye:[250,275,276],FFS:[133,202,204,219,220,226,227,229,230,231,232,246,247,252,261,281,282,283,285],FFs:[231,275,276],FOR:101,For:[0,2,4,13,14,15,16,17,18,19,21,22,24,28,35,37,39,42,44,46,51,56,62,63,64,65,68,70,78,88,89,101,103,105,107,109,110,115,119,121,126,131,132,133,134,135,137,139,140,141,161,162,171,172,173,174,175,177,182,183,184,185,193,202,203,204,205,206,215,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,246,247,248,250,254,273,274,275,276,277,282,283,284,285,291,292,311,313,316],IDs:[2,35,50,171,173,182,183,184,185,316],IVE:[153,171,172,241],Its:[28,70,314],KNS:[291,292],MCS:24,MCs:2,MPS:[164,220,229,230,261,281,286,291,292],NOT:[1,2,5,15,17,49,55,62,63,64,65,76,100,106,114,115,132,140,171,173,182,183,202,203,204,205,206,220,226,228,275,276,311,313],Not:[2,35,51,60,76,77,87,93,99,106,127,129,132,140,157,162,171,172,178,182,183,187,215,226,227,246,247,291,292],One:[41,46,134,162,215,224,231,232,246,247,258,279,282,283,316,317],PEs:[88,101,134,202,203,224,226,227,272,275,276],Res:[19,171,172],Such:[37,140],THE:136,THe:275,TLS:220,That:[4,22,36,124,132,153,171,172,173,177,182,183,226,227,231,232,238,239,240,246,247,275,276,282,283,316],The:[0,1,2,4,5,6,8,9,10,12,13,14,15,16,17,18,19,21,22,23,28,29,30,31,32,34,35,36,37,40,41,42,43,44,49,51,52,53,54,55,56,57,58,59,61,68,69,70,73,74,75,76,77,81,84,85,86,87,88,89,90,93,97,98,99,100,101,102,103,104,105,108,109,110,111,113,117,118,119,120,121,122,123,124,129,131,132,133,134,135,138,139,140,141,145,146,148,149,150,153,154,157,159,160,162,171,172,173,174,175,178,180,181,182,183,185,186,187,188,189,193,194,196,197,201,202,203,204,205,206,208,213,217,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,238,241,242,243,246,247,248,249,250,251,252,253,255,258,259,261,266,267,268,269,270,271,272,273,274,275,276,278,279,280,281,282,283,284,285,286,287,289,291,292,298,304,311,312,313,314,316,317],Their:28,Then:[35,36,135,171,172,182,183,220,231,232,240,246,248,273,274,282,283,287,291,292],There:[2,4,14,22,35,39,41,44,46,47,49,50,51,52,68,73,81,108,117,121,131,132,133,134,137,146,171,172,173,174,175,182,183,184,185,202,203,204,206,220,221,224,226,227,228,229,230,231,238,246,247,248,251,266,268,271,273,274,275,276,282,283,285,288,291,292,298,311,316,317],These:[0,2,5,9,10,13,14,19,29,34,35,37,41,42,47,51,52,58,69,71,73,77,132,134,137,171,172,176,182,183,202,203,220,221,224,229,230,231,232,236,246,247,266,268,273,275,276,282,284,285,291,292,298,311,313,314,316],UEs:[181,208,267,273,274],UPS:[54,70,114],Use:[2,42,49,50,81,130,140,146,160,162,171,172,174,175,178,182,183,202,203,204,207,212,215,219,220,222,226,227,231,232,246,247,248,250,251,272,273,274,275,276,277,281,282,285,287,289,291,292],Used:[27,29,41,70,133],Useful:[171,172,220,282,283],Uses:[70,226,227],Using:[35,139,171,172,182,183,246,247,266,273,274],VAS:[25,28,38,171,172,174,229,230,273,274],VFs:[220,261,281,286,291,292],VPs:[171,172,231,232,241,282,283,316],Vcs:14,WITH:220,Was:[42,134],Will:[8,52,145,220,291,292,316],With:[22,28,133,136,147,148,162,164,171,172,195,202,204,206,215,219,220,225,226,227,229,230,231,236,246,247,268,273,274,275,276,282,283,284,287,291,292],XTS:[73,178,182,183,226,227,282,283,287,291,292],YES:131,_4b:[226,227],___backtrac:[246,247],___print_backtrac:[246,247],__be16:60,__be32:[60,70,84],__be64:[58,60,70,84,127,282,283,314],__builtin_parityl:[171,172],__dt_add_property_cel:[171,174,224],__flush_consol:[273,274],__next_timer_interrupt:37,__noreturn:[217,231,233],__opal_cal:[282,285],__opal_flush_consol:[291,292],__pack:220,__secondary_cpu_entri:[182,183],__section:[291,292],__stack_chk_fail:[160,182,220],__trigger_attn:40,__try_lock:[275,276],__unus:42,__va_args__:288,__xive_cache_scrub:[171,172,241],_abort:[171,174,182,183,224,246,247,256,261,272,275,276,278,281,282,283],_be64:[287,291,292],_en:[272,275,276],_indic:[10,146],_lite:[231,232],_mrk:[226,227],_occ:144,_prlog:[273,274,288],_reg:[287,291,292],_savegpr0_28:[291,292],_window:[258,279,282,283],a000:34,a001:34,a0020:[202,203],a103:220,a200:34,a300:34,a5721ba270:220,a6d4a7884e95cb9c918b8a217c11e46b01218358:191,a8e6cc3f4:182,abc123456:34,abcdefgh:35,abcdefghijkl:35,abcdefghijklmnopqrstuvwxyz:35,abi:[15,16,44,132,133,134,137,145,202,203,205],abil:[4,22,171,172,184,185,220,226,228,229,230,237,291,292,316],abiv2:[275,276],abl:[2,22,51,54,55,113,117,118,131,162,165,166,171,172,173,174,182,183,204,206,215,219,220,226,227,246,247,258,273,274,279,282,283,291,292,316],abnorm:[147,149,171,172,263,297],abort:[0,41,144,146,147,148,171,173,174,178,182,183,202,204,224,226,228,251,256,261,272,273,274,275,276,278,281,282,283,291,292,295],about:[0,2,22,34,35,50,51,58,62,63,64,65,70,84,128,131,132,141,146,170,171,172,173,182,183,189,195,202,203,204,205,206,217,219,220,226,227,228,229,230,231,233,246,247,250,252,273,274,275,276,282,283,285,287,291,292,314,315,316],abov:[2,4,5,8,10,15,44,58,62,63,64,65,67,89,103,107,113,130,131,132,135,140,162,171,172,182,183,188,193,213,215,220,224,226,227,231,235,236,238,241,246,247,258,273,274,275,276,279,282,283,316],absenc:[44,46,255,258,275,279,282,283],absent:[8,77,226,227,316],absolut:[15,132,219,226],abwmgmt:220,ac922:136,acceler:[25,38,171,172,229,230,273],accept:[2,17,38,46,50,51,121,138,139,226,227,258,275,276,279,282,283],access:[1,9,10,20,28,38,42,52,60,69,107,122,133,135,146,150,171,172,174,180,182,183,184,185,189,194,198,202,203,204,206,220,224,226,227,229,230,231,232,233,236,238,241,243,246,247,250,258,266,269,272,273,274,275,276,279,282,283,285,287,289,291,292,295,314,316],accessor:[287,291,292],accid:[291,292],accident:[226,227],accommod:[70,147,149,171,172],accomod:[135,226,227],accompani:[282,283,291,292],accomplish:[40,221],accord:[21,68,135,171,172,213,220,226,227,228,275,276,282,285,291,292,312,317],accordingli:[104,108,135,220],account:[182,183,220,221,231,233,254,256,265,275,277,278,287,291,292,305],accross:[226,227,228,316],accumul:[37,171,175,182,183],accur:[171,172,316],accuraci:100,achiev:[58,220,246,247,275,276],achiv:[246,247],ack:[50,51,139,144,171,184,185,187,193,202,203,219,226,231,232,258,279,282,283],ack_id:51,acknowledg:[35,50,51,122,162,171,172,215,226,227,231,232,288],aco:[246,247],across:[2,4,17,40,71,115,124,132,171,193,202,203,219,226,227,229,230,231,242,313],act:[220,246,247,275,276],action0:[251,275,276],action:[35,54,58,70,147,149,166,171,173,181,182,183,208,226,227,228,229,231,232,246,247,267,273,274,288,291,292,311],activ:[2,13,40,58,68,70,102,112,114,134,140,161,162,171,172,201,202,203,215,219,223,226,227,241,251,273,274,275,276,282,283,291,298,311,313],actual:[2,24,35,47,58,68,76,104,121,123,124,132,135,162,171,172,174,182,183,195,200,201,202,203,213,214,215,217,220,221,226,227,229,231,232,233,241,246,247,248,250,254,258,261,266,268,272,273,274,275,276,277,279,281,282,283,284,287,289,291,292,294,298,301,312,316],actual_s:[231,232],actuals:[202,204],adapt:[86,102,104,135,154,201,202,203,213,220,221,226,227,229,230,231,232,269,273,274,275,276,282,283,285,291,292],adaptor:[147,148],add:[2,22,34,35,40,50,71,86,101,104,130,132,133,134,135,136,139,140,144,145,146,147,148,149,151,154,161,162,163,166,171,172,173,174,175,178,180,182,183,184,186,187,193,194,201,202,203,206,211,215,216,218,219,220,221,222,224,225,226,227,228,229,230,231,232,234,235,237,238,239,241,242,244,246,247,248,249,250,251,253,255,256,257,258,266,267,268,273,274,275,276,277,278,279,282,283,284,285,287,288,291,292,295,301,311,313,314],add_cpu_idle_state_properti:[246,248],add_icp:220,add_iplparams_seri:220,add_opal_nod:[182,183],add_properti:[135,282,283],add_region:[226,228],add_sensor_nod:[273,274],add_vas_nod:[171,174],add_xics_icp:220,added:[9,13,18,19,22,24,35,54,104,115,131,135,147,148,149,155,161,164,171,172,181,184,185,187,193,202,203,204,217,219,220,224,226,227,229,230,231,232,233,246,247,248,261,266,273,274,275,276,279,281,282,283,286,287,288,291,292,304,308],adding:[5,70,104,135,151,171,172,174,193,220,224,226,227,231,232,246,247,248,272,273,274,275,276,291,292],addit:[2,17,22,29,35,44,70,131,135,141,145,152,157,165,171,172,174,187,221,226,231,232,246,247,248,259,267,269,273,274,275,276,280,287,291,292,298,304,311,316],addition:[2,22,132,139,171,172,193,226,228,231,246,247,257,261,266,273,274,275,276,281,282,283,286,291,292,316],addr2func:[291,292],addr2lin:[291,292],addr:[26,28,50,60,61,69,75,82,87,103,171,172,220,224,246,247,316,317],addr_typ:69,address:[2,3,5,8,9,14,24,27,28,29,30,31,32,33,36,47,50,56,60,61,69,71,73,75,76,81,83,87,88,89,90,92,93,97,98,103,112,124,128,130,132,134,141,147,148,171,172,173,174,175,178,182,183,202,203,204,220,221,224,225,226,227,228,229,230,231,232,242,245,246,247,256,257,271,273,274,275,276,282,283,284,285,287,288,291,292,314,316,317],adequ:[131,275,276,291,292],adher:[17,138,171,172],adiga:[171,219,231,275],adjac:[256,275,276],adjust:[2,221,261,281,316],admin:[171,172],administr:[12,127],adopt:[192,224],adpat:220,adriana:[171,184,185,275],adu:231,adu_scom:[273,274,275,276],advanc:[1,213,220],advantag:[155,182,183,226,227],advers:[226,227],advertis:[7,21,22,61,155,171,175,180,182,193,202,203,226,227,255,257,275,278,282,283],aer:[84,164,221,301],affect:[58,147,148,171,172,181,184,185,196,208,231,232,242,246,247,258,267,268,273,274,275,276,279,282,283,291,292,311],affin:[2,226,228],afl:[257,282,283],afraid:139,after:[0,2,4,13,35,37,39,40,43,50,58,61,70,104,113,115,121,135,139,147,148,152,153,154,157,158,162,164,167,168,170,171,172,173,174,177,179,180,182,183,187,189,190,191,193,198,201,202,203,208,209,213,214,219,220,221,224,226,227,228,229,230,231,232,236,239,241,242,246,247,248,251,254,261,263,268,272,273,274,275,276,277,279,281,282,283,285,287,288,290,291,292,294,311,316],afterward:[182,183,246,247,311],afu:[75,182,183,282,284,291,292],again:[35,43,49,50,62,125,131,188,217,224,231,233,246,247,266,271,273,274,275,276,279,282,283,311,316],against:[4,19,100,171,172,175,182,183,220,226,227,257,275,276,277,311,313,314],agent:[229,230],aggreg:[182,183],aggress:[182,183],agnost:[37,246,247],ago:[42,261,281,282,283,286,288,291,292],agre:[138,154],agress:[229,230],ahb:[273,274],ahead:[171,172,246,247],aib:[159,194,196,256,275,276],aid:[171,172,231,233],aim:[22,132,139,203,204,205,206,211,219,258,279,282,283],air:34,aka:[2,7,38,189,224,225,229,230,316],akshai:[171,219,231,275],alarm:[19,226,227],alastair:226,alert:[1,58,154,157,187,193,220,224,226,228,272,275,276,282,283],alexei:[171,219,220,224,231,275],algo:[23,171,172],algorithm:[17,28,202,203,229,230,275,276],alia:[128,131,226,227],alias:[197,202,203],align:[9,52,56,75,89,147,149,171,172,173,182,183,194,197,202,203,219,220,226,227,229,230,231,233,246,247,259,261,280,281,282,284,288,291,292,316],alimit:120,alink:37,alistair:[147,148,167,171,184,185,187,193,202,203,219,220,224,226,229,231,275],all:[1,2,4,8,13,14,17,18,19,21,22,23,24,28,31,32,34,35,36,39,40,42,44,51,52,58,59,68,70,71,72,76,78,81,88,93,100,101,103,106,107,113,115,116,117,118,120,122,124,127,131,132,133,134,136,137,138,139,140,144,147,148,149,150,151,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,174,175,180,181,182,183,184,185,186,188,189,191,192,193,195,198,201,202,203,204,205,206,207,208,209,214,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,238,245,246,247,248,257,258,259,261,264,267,268,269,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,291,292,296,304,310,311,313,314,316],allevi:[266,273,274],alloc:[0,2,22,24,32,35,39,54,61,70,73,75,84,102,107,118,120,131,134,147,148,165,168,171,172,182,183,184,185,193,202,203,220,221,224,226,227,231,232,233,246,247,250,251,268,269,272,273,275,276,277,282,283,287,291,292,295,311,313,315,316],alloc_ord:316,allot:35,allow:[0,4,13,16,21,22,28,29,41,46,47,51,54,70,77,84,89,106,107,110,132,138,139,154,155,161,168,171,172,173,178,182,183,184,185,186,187,193,202,203,206,219,220,221,222,224,225,226,227,228,229,230,231,232,246,247,248,253,256,258,261,266,273,274,275,276,278,279,282,283,284,285,291,292,298,314,316],almost:[136,171,172,291,292],alon:[226,227,273,274,275,276],along:[2,37,73,76,133,171,174,181,182,183,208,217,226,227,229,230,231,232,246,247,267,273,274,275,276,281,282,283,291,292,316],alongwith:[58,246,247],alreadi:[41,75,108,121,133,134,138,140,150,161,171,172,178,182,183,184,185,201,202,203,222,226,227,228,229,230,231,232,246,247,248,251,253,268,272,273,274,275,276,282,283,284,285,288,291,292,313,316],also:[1,2,4,7,17,21,22,24,28,32,33,35,37,40,50,51,69,73,78,100,102,113,121,124,128,131,132,133,134,139,141,146,147,148,151,157,169,171,172,173,174,175,179,182,183,187,193,202,203,204,213,217,220,224,226,227,228,229,230,231,232,233,235,238,242,246,247,250,251,254,255,257,258,259,260,261,266,268,271,273,274,275,276,277,279,280,281,282,283,284,285,286,287,291,292,311,313,314,316],alter:[171,172,246,247,313],altern:[37,40,72,162,215,250,275,276,291],although:[16,43,49,50,51,70,117,120,132,139,171,172,219,231,232,287,291,292,298],alwai:[2,8,41,55,58,61,66,70,81,131,134,141,154,162,171,172,173,177,182,183,184,185,193,201,202,203,204,205,213,215,220,224,226,227,229,230,231,232,234,246,247,250,256,257,258,261,273,274,275,276,278,279,281,282,283,285,286,287,291,292,313,316],ambient:[13,54,70],ambigu:[154,217,226,227,231,233],ami:[0,156,206,220,246,247,250,273,274,279,282,283],amit:275,among:[133,202,203,246,247],amount:[12,13,35,50,127,131,133,171,172,178,182,183,217,221,226,227,231,232,266,273,274,275,276,282,285,316],amr:[226,227],analog:205,analysi:[44,50,147,148,161,171,184,185,193,202,203,219,224,226,231,246,247,281,282,283],analyz:[58,70,251,275,276],ananth:[147,148,171,184,185,219,220,224,226,229],anchor:34,ancient:[46,150,224,291,292],andrei:[147,148,202,204],andrew:[147,171,184,185,187,193,202,203,204,219,220,224,226,229,231,275],aneesh:[184,185],ani:[0,1,2,4,5,13,17,23,35,37,39,42,43,44,49,55,56,58,59,60,61,78,81,89,96,113,117,118,120,132,133,134,135,137,139,141,147,148,154,157,161,165,171,172,174,178,179,180,181,182,183,186,187,193,202,203,204,205,208,209,216,217,220,223,224,225,226,227,228,229,230,231,232,233,234,235,236,246,247,248,249,250,251,252,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,278,279,280,281,282,283,284,285,288,289,290,291,292,308,311,312,313,316],anju:[226,231],annoi:[246,247,275,276],annot:[141,146,181,202,203,220,226,228],anonym:[226,227],anoth:[22,41,58,101,113,132,157,162,168,171,172,182,183,187,214,220,225,229,230,241,271,275,276,282,283,287,291,292,316],answer:[286,291,292],anticip:22,anton:[147,148,202,203,229,231],anybodi:[139,171,172],anymor:[219,229,230,259,280,291,292,316],anyon:[42,136,171,172,282,283],anyth:[0,29,49,115,132,133,182,183,205,221,224,226,227,229,246,248,266,273,274,286,291,292,311,316],anytim:68,anywai:[171,174,182,183,184,185,224,226,227,228,229,230,231,232,246,247,248,282,283],anywher:[133,259,280,288],apach:[139,298],apart:[202,204,310],apc:[171,172,271,275,276],apc_fsm_read_mask:[271,275,276],apertur:[226,227],api:[7,17,38,40,49,51,70,84,104,120,123,132,133,135,139,145,146,147,148,149,154,171,172,175,182,183,202,203,205,217,220,229,230,231,232,233,246,247,261,272,273,274,275,276,281,282,283,284,286,287,291,292,304,314],apollo:[38,224],app:[198,202,203],appar:[171,172],appear:[21,39,41,42,90,93,103,162,171,172,205,214,224,226,227,231,232,246,247,257,266,273,274,275,276,278,282,283,288,291,292,312],append:[35,118,226,227,291,292,311],appli:[17,47,48,52,56,76,88,121,140,164,171,172,182,183,220,226,227,228,231,232,235,246,247,273,274,282,283,287,291,292,311,312,316],applic:[4,34,35,44,139,181,208,267,273,274,282,285,291,292,311,315,317],appriopri:19,approach:[162,215,226,231,246,247,275,276,291,292,304],appropri:[1,12,13,17,23,40,52,73,83,122,132,138,139,171,172,220,226,227,229,230,231,232,234,246,247,269,273,274,275,276,277,287,291,292,311,316],approxim:236,apr:139,april:[146,147,148,149,157,158,179,180,182,187,188,219,220,221,222,223,224,225,246,247,248,264,284,298,304],apss:[171,172,273],aquir:[162,214,225],arb:[231,232],arbab:[171,219,226,229,231,275],arbitr:60,arbitrari:[13,171,172,202,203,246,248],arbitrarili:[246,247,275,276],arch:106,arch_cpu_idl:37,arch_flash_arm:[212,220],architect:[2,21,22,132,146],architectur:[22,182,183],archiv:[182,183],area:[7,47,71,75,139,144,146,171,172,182,183,220,226,227,275,276,316],aren:[110,121,157,171,172,182,183,187,195,202,203,204,219,220,226,227,229,230,231,236,239,267,273,274,291,292,316],arg:[126,132,202,203],arguabl:[275,276],argument:[2,35,50,52,53,56,82,92,100,101,108,117,120,134,171,172,174,182,183,203,220,226,227,246,247,253,275,276,287,288,311,316],aris:[231,232,275,276,311],arisen:[246,247],arithmet:[226,227,316],arizona:236,arm:[171,172,189,193,202,204,205,273,274],around:[35,50,106,120,139,146,167,171,172,174,182,183,184,185,193,198,202,203,207,220,224,226,227,228,229,230,231,232,236,238,240,246,247,259,266,272,273,274,275,276,280,282,283,287,291,292],arrai:[18,21,22,54,127,171,172,173,226,227,229,230,231,232,246,247,268,273,275,276,282,283,295],arrang:[282,285],arriv:[13,231,232,291,292],artem:275,articl:138,artifact:[220,275,276,314],as_notifi:[182,183,246,247],asb:[78,226,228],ascend:316,ascii:[2,34,35,127,220],asid:304,ask:[50,71,140,168,171,173,182,224,229,230,246,247,286,291,292],asleep:[128,158,187,191],asm:[12,133,171,172,195,202,203,219,220,231,246,247,282,285,302],asn1:225,asn:[182,183,246,247],aspe:[231,232,273,274,275],aspect:[291,292],assembl:[275,314],assert:[0,23,44,50,62,146,147,148,161,171,172,182,183,197,202,203,210,220,226,227,228,229,230,231,232,235,239,246,247,248,258,261,262,263,273,274,275,276,279,281,282,283,287,289,291,292,295,297,302,305,313],assert_delai:[282,283],assert_fail:[261,281,282,283],assert_perst:[287,291,292],assert_st:96,assess:314,assign:[41,75,134,147,149,171,172,178,180,182,183,184,185,220,226,227,238,241,246,247,248,281,282,283,284,287,291,292,316],assist:[58,70,282,284],associ:[5,22,27,29,30,41,56,61,68,73,88,89,97,118,130,135,143,171,172,180,184,185,194,203,217,226,227,228,231,233,246,247,258,279,282,283,287,291,292,316],assum:[2,21,22,41,58,100,132,154,171,172,174,177,182,183,202,203,212,220,224,226,227,229,230,231,232,246,247,248,250,254,255,258,269,273,274,275,276,277,279,281,282,283,285,291,292],assumpt:[171,172,184,185,206,220,226,227,261,279,281,282,283,316],assur:[93,103],ast2400:[52,220],ast2500:52,ast:[220,250,268,275,276,279],ast_sio_is_en:279,astbmc:[0,136,145,147,149,151,161,165,182,183,202,203,220,231,232,250,273,274,275,276,281,282,283,286,291,292],astbmc_init:[279,282,283],asychron:[104,135],async:[5,45,52,60,109,110,119,120,127,130,131,162,171,172,175,208,213,229,230,243],async_token:[60,68,77,104,114,127],asynchron:[43,52,60,77,104,108,110,117,120,122,124,125,127,131,135,147,148,181,208,220,261,267,273,274,281,282,283,285,291,292],asynchronu:[109,110,119],asynhroun:[258,279,282,283],at24c04:250,at8286:35,at_hwcap2:[21,22,180,182],at_hwcap:[21,22],at_hwcapx:21,atexit:194,atkkkk:35,atllll:35,atom:[133,171,172,182,183,246,247,313],atr:[268,273],atsd0:[282,283],atsd6:[282,283],atsd:[246,247,275,276,282,283],attach:[26,52,102,180,202,204,219,220,226,227,246,247,268,269,273,275,276,282,285,316],attain:13,attempt:[39,47,82,108,110,113,122,146,150,161,168,171,172,174,178,182,183,202,203,208,220,221,224,226,228,229,230,231,234,243,246,247,258,261,266,273,274,279,281,282,283,285,287,291,292,311],attent:[4,10,68,135,171,174,184,185,226,227],attest:314,attn:[40,68,70,135,146,171,172,174,193,226,227],attn_ack:70,attnbtn:[213,220],attr:19,attribut:[15,19,35,161,184,185,202,203,229,230,256,275,276,278,291,292,313],audit:[171,172,229],aug:288,august:[147,149,150,159,160,161,162,163,184,185,186,187,188,189,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,229,230,231,232,233,234,235,236,270,271,293,298],auth:[17,307,309,311],authent:312,author:[38,56,88,89,97,118,134,275,276,304],authorit:[171,172],auto:[275,276],autodetect:[229,230],autofs4:[162,215,226,227],autoload:151,autom:[147,148,149,171,219],automat:[28,47,68,133,141,231,232,246,247,273,274,275,291,292,314],autorun:[282,285],aux:21,auxpwr:164,auxv:22,avail:[0,10,13,16,18,19,21,22,30,34,41,42,44,49,50,51,55,58,68,73,74,83,102,108,109,115,120,125,131,135,136,139,153,162,165,171,172,175,177,182,183,202,203,204,213,217,220,226,227,229,230,231,233,246,247,248,269,273,275,276,282,283,288,291,292,298,313,316],averag:[246,247],avoid:[0,5,37,39,58,113,144,145,147,149,160,169,171,172,182,183,198,201,202,203,207,213,220,224,226,227,228,229,230,231,236,237,238,246,247,269,273,274,275,276,282,283,284,285,287,291,292,306],avsbu:[171,172],awai:[5,171,172,182,183,229,230,238,282,283],await:95,awan:193,awar:[50,58,121,147,148,171,172,175,180,182,220,246,247,282,283],awful:[202,203],awfulli:[291,292],axon:136,axten:[147,148,161,184,185],b0000002:35,b0020:2,b23d9c5b9c83c05e013aa52460f12a8365062cf4:194,b42ff2b904165addf32e77679cebb94a08086966:[229,230],b8b4c79d4419:[287,291,292],ba4d46fdd9eb:[171,172],babul:[147,148,193],back:[35,42,44,52,58,96,120,124,136,153,162,164,171,172,174,182,183,184,185,188,202,203,215,217,219,224,226,227,228,229,230,231,232,233,236,241,246,247,248,255,267,273,274,275,276,277,282,283,285,291,292,316],backdoor:220,backend:[17,23,42,60,67,117,144,146,171,175,176,182,183,204,258,261,273,274,279,281,282,283,286,291,292,307,309],background:[181,208,267,273,274],backlog:220,backplan:34,backport:[140,162,163,189,202,216],backtrac:[144,146,147,149,160,165,171,174,182,183,184,186,189,193,195,202,203,207,220,221,224,226,231,233,246,247,256,261,272,273,274,275,276,278,281,282,283,291,292],backup:[2,58,246,247,282,283],backward:[2,21,22,54,70,171,172,177,182,183,243,248,315],bad:[0,2,80,134,146,157,171,172,187,193,198,202,203,217,220,224,226,227,228,229,231,232,233,238,246,247,250,251,260,261,271,272,273,274,275,276,281,282,283,285,286,287,291,292],baddllp:164,badli:[134,169,226,231,232,273,274,291,292],badtlp:164,bai:[275,276],bail:[150,171,172,176,182,183,226,227,228,282,283,299],bake:[202,204],balanc:[16,282,285],balbir:[171,193,202,203,226,231],band:[35,37,147,148,171,172,220,231,233,282,283],bandhu1:[184,185],bandwidth:[24,37,41,102,178,182,183,269,275,276],bank:[118,311,314],bar0:41,bar2:41,bar:[2,33,41,75,87,147,149,171,172,182,183,220,221,226,227,229,230,231,236,238,241,246,247,268,272,273,275,276,282,284,291,292,299],bare:[0,2,171,172,220,246,247,282,283,285,287,291,292],barebon:[246,247],barf:[171,172,182,183,226,227],barrat:[171,193,202,203,219,220,226,229,231,275],barreley:[136,184,186,220,282,285],barrier:[171,172,220,231,232,271,275,276],basd:68,base:[2,5,8,14,20,22,24,28,30,32,34,35,37,38,42,50,54,68,72,75,76,77,88,91,112,127,132,133,134,135,136,138,139,140,141,144,156,157,160,164,165,168,171,172,175,185,187,204,210,215,227,229,230,236,237,246,247,250,255,258,268,271,279,280,285,287,291,292,298,310,316,317],base_addr:24,basi:[182,183,184,185,246,247,248,273,274,275,276,277,282,283,284,285,291,292,293],basic:[17,36,58,126,134,147,148,171,172,202,203,219,220,221,231,232,246,247,275,276,291,292,314,316],bathini:[147,148,229],batteri:[70,282,283],baud:2,bb821010:35,bb821410:35,bb822411:[157,187],bc7bb3d12bc1:[291,292],bcd:117,bcm57810:164,bcs:[182,183],bda7cc4d0354eb3f66629d410b2afc08c79f795f:[182,183],bdf:[73,182,183,226,227,246,247],bdfn:[74,75,171,172,202,203,226,227,275,276],be16:[291,292],be16_to_cpu:[291,292],be32_to_cpu:[291,292],beaus:[275,276],beautifi:[171,173],becam:[22,39,136],becaus:[108,110,113,122,134,135,136,160,171,172,173,182,183,188,193,217,220,224,226,227,231,232,233,234,239,246,247,248,255,257,261,268,272,273,275,276,278,281,282,283,285,287,291,292,298],becom:[70,131,148,149,162,163,171,172,173,174,175,182,183,185,186,193,201,202,203,204,205,206,215,216,217,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,246,247,248,258,261,274,275,276,277,279,281,282,283,284,285,290,291,292,293,298,299,304,308,310],been:[0,4,13,14,22,35,41,42,58,62,70,81,84,96,100,108,112,117,131,134,135,139,140,144,148,149,151,154,155,171,172,178,180,182,183,184,185,202,203,204,217,221,224,226,227,228,229,230,231,232,233,235,241,246,247,250,254,257,258,261,267,273,274,275,276,277,278,279,281,282,283,285,287,289,291,292,298,311,313,316],befor:[0,4,21,22,39,42,43,44,52,70,86,96,106,113,114,117,122,124,130,132,133,135,139,147,149,151,159,162,163,168,171,172,173,174,180,181,182,183,184,185,189,196,201,202,203,204,206,208,209,215,216,217,220,221,224,226,227,228,229,230,231,232,233,236,238,241,245,246,247,248,258,261,263,265,267,268,273,274,275,276,279,281,282,283,285,287,291,292,297,301,305,311,316],beforehand:224,begin:[4,171,172,182,183,193,246,247,282,283,291,292,311],behav:[21,134,147,149,182,183,220,231,232,275,276,291,292],behavior:[17,44,273,274,311],behaviour:[22,46,110,166,171,172,182,183,196,201,202,203,205,226,227,246,248,273,274,275,282,283,316],behind:[5,104,135,139,171,172,180,201,202,203,220,221,229,230,235,236,246,247,273,282,285],being:[4,22,39,43,50,52,57,58,70,75,79,108,110,117,122,123,124,125,131,139,147,148,157,160,162,165,167,171,172,173,174,175,182,183,187,193,197,201,205,208,213,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,243,246,247,248,254,257,258,260,261,264,266,267,269,273,274,275,276,277,278,279,282,283,287,288,291,292,316],belief:[291,292],bell:[184,185],belong:[14,18,140,168,226,227,229,230,275,287,291,292],below:[1,2,4,15,16,17,18,19,22,26,35,43,44,47,70,89,93,101,102,103,131,134,138,141,147,162,164,171,172,173,174,177,182,183,184,185,193,201,202,203,209,210,213,215,217,220,221,226,227,231,232,233,238,254,273,274,275,276,277,282,283,287,291,292,310,311,316],ben:[182,183],benchmark:[182,183,229,275,276],benefit:[202,203,226,267,273,274,291,292],benjamin:[147,148,161,164,171,184,185,193,202,203,219,220,224,226,229,231,275],beofr:[182,183],beor:[246,247],bergheaud:[147,148,184,185,193],best:[4,17,44,113,132,138,139,220,246,247,261,281,282,286,291,292,311],bet:[250,273,274],beta1:[4,38,142,147,149,184,185],beta2:[38,142,147],beta:[147,148,149,182],better:[2,35,130,140,141,146,147,148,149,162,166,171,172,182,183,193,215,220,224,226,227,228,231,232,261,273,274,275,276,291,292],between:[4,14,16,22,29,41,42,43,46,110,132,133,157,171,172,175,182,183,187,202,203,213,217,220,221,226,227,229,230,231,233,241,243,246,247,261,268,271,273,274,275,276,282,283,284,287,291,292,311,314,316],beyond:[22,52,103,110,130,171,172],bf898ec5cb:[231,236],bhat:[147,148,171,184,185,193,202,203,219,220,224,226,229,231,275],bhattiprolu:[171,229,231],bia:[171,173],biarch:[147,149],bias:[182,183],bifurc:[282,283],big:[2,13,42,132,136,146,171,172,175,220,226,227,231,232,246,247,261,273,274,275,276,281,282,283,291,292],bigger:[182,183,282,283,291,292],bin:[36,226,227,275,287],binari:[2,4,17,34,35,38,147,148,166,182,183,222,226,227,246,247,275,276,281,282,283,291,292],bind:[5,9,22,25,31,37,38,40,52,71,97,105,110,133,139,146,171,175,202,203,224,231,232,246,247,273],binutil:[212,220],bishop:[171,193],bit:[2,9,13,14,19,21,22,24,28,29,31,32,33,35,37,41,48,50,54,58,60,68,70,73,78,87,88,89,90,93,100,101,103,108,115,117,121,124,130,132,133,134,135,144,145,150,153,157,162,164,169,171,172,173,174,175,178,180,182,183,184,185,187,193,202,203,205,206,213,214,216,217,220,221,224,226,227,228,229,230,231,232,233,235,236,238,240,241,245,246,247,248,251,257,268,269,271,272,273,274,275,276,278,282,283,284,285,287,291,292,311,313,316,317],bitbak:[273,274],bitfield:[178,182,183],bitmap:[75,171,172,220],bitmask:[14,22,108,201,282,283],bitrot:[291,292],bitwis:[14,282,283],bizarr:[42,171,172],black:231,blackbird:136,blackbrid:136,blacklist:311,blame:[282,284],blanchard:[147,148,202,203,229,231],blank:[171,172,273,274,275,276],blif:[171,172],blindli:220,blink:135,bloat:[147,148],blob:[3,17,34,53,118,171,172,220,222,224,226,227,231,232,246,247,275,276,311,314],block:[2,9,52,67,78,133,161,171,172,176,180,182,183,193,208,209,219,220,226,227,229,230,231,233,243,246,247,261,270,275,276,281,282,284,285,295,316],blockevel_smart_writ:[287,291,292],blocklevel:[147,148,176,182,183,219,220,246,247,258,261,275,277,279,281,282,283,294],blocklevel_get_info:[281,282,283],blocklevel_raw_:[246,247],blocklevel_raw_writ:[261,281,282,283],blocklevel_read:[246,247,254,275,277],blocklevel_smart_eras:[176,182,183,219,229,230],blocklevel_smart_writ:[202,204],blocklevel_writ:[246,247,261,273,274,281,282,283],blown:[229,230],blr:[282,285],bmc0:275,bmc:[5,8,34,35,38,40,44,132,133,144,146,154,155,156,171,172,182,183,185,202,203,204,205,206,224,226,227,228,229,230,246,247,248,249,250,251,252,255,256,261,263,275,276,278,280,281,282,283,284,285,286,288,290,291,292,297,299],bmc_mbox_enqueu:[171,172],bmc_platform:220,bml:[273,275,276],bn_num_byt:225,board:[2,202,203],bobroff:231,bogu:[171,172,193,220,221,231,241,246,247,272,275,276,291,292],bogusdisk:[202,203],bogusnet:[231,232],bone:[171,172],bonnard:[147,148,171,193,202,203],book:22,bookiv:[226,227],bookkeep:[171,172],bool:[63,74,119],boost:[13,171,172,226,228],boot:[0,1,4,5,7,8,17,20,23,36,37,38,39,68,69,71,76,77,113,115,118,127,129,134,137,138,145,146,147,148,149,153,161,164,167,173,174,177,182,183,184,185,193,194,201,202,203,205,207,220,221,224,226,227,228,229,230,231,232,233,236,245,248,250,253,254,257,258,260,261,266,268,272,273,274,275,276,277,278,279,281,282,283,285,286,287,294,296,300,304,311,313,316],boot_cpu:182,boot_cpuid_phi:[226,227],boot_entri:[182,224,272,273,274,275,276,281,282,283],boot_test:[147,148,149,166,170,202,203,206,226,227],boot_tracebuf:[291,292],bootarg:[202,203,204],bootkernel:[171,172,173,231,232,273,274],bootkernfw:[282,285],bootload:[132,133,155],borrow:312,boston:[134,136,171,172,224,231,232,246,247,256,275,276],both:[2,24,44,52,68,88,95,99,108,117,127,140,162,171,172,173,175,182,183,193,202,203,204,213,214,220,224,226,227,231,232,233,246,247,248,250,269,271,273,274,275,276,278,281,282,283,285,291,292,313,314,316,317],bother:[171,172,246,247],bottom:[121,246,247,258,268,273,274,279,282,283],bound:[28,162,171,172,213,231,236],boundari:[89,171,172],box:[226,227,229,230,246,248,269,273,274,275,276,280,282,283,285],bp010:136,bp012:[136,226,227],br2_hcode_latest_vers:[246,248],brad:[171,193],brahmasamudra:[171,275],branch:[38,140,141,146,147,148,149,181,182,183,202,226,227,246,271,273,275,276,277,282,285,291,292],brdgctl:84,breakeven:13,breakpoint:225,breath:274,breno:[202,203],brick:[171,172,180,240,246,247,264,266,268,273,274,275,276,282,283,284,291,292,296],bridg:[2,30,41,101,135,155,164,184,185,189,213,220,231,236,246,247,282,283,285,291,292],briefli:42,brielfi:42,brigg:[136,259,280],bring:[42,43,133,161,171,172,180,182,183,220,231,233,246,247,248,267,273,274,275,276,282,283,287,291,292],bringup:[2,134,136,182,183,184,185,219,220,221,222,223,224,225,227,230,261,281,282,285],broadcast:[122,226,227,268,269,273,274,275,276],broadcom:[164,202,203,221],broader:139,broadli:[226,227],broke:[202,204,231,236,279],broken:[79,81,84,135,140,160,171,172,178,182,183,220,224,226,227,229,230,231,236,275,276,282,285,286,291,292],brought:[171,172,226,227],brown:[219,220,226],broyl:[171,172],bsd:139,bss:[291,292],bt_add_ipmi_msg_head:[258,279],bt_expire_old_msg:[258,279],bt_idl:[258,279],bt_send_and_unlock:[258,279],buddi:[171,172,181,208,220,231,233,267,273,274],buf:[35,52,53,171,173,307,309,314],buffer:[1,2,5,12,17,28,35,45,47,49,50,51,52,53,55,60,75,76,77,83,84,85,86,104,118,132,133,145,146,151,154,162,168,171,172,175,176,182,183,184,185,186,199,202,203,215,217,224,226,227,229,230,231,232,233,246,247,257,265,275,276,278,282,283,287,291,292,303,306,315,316],buffer_ra:60,buffers:24,buffrsiz:24,bug:[2,131,139,140,145,146,150,151,152,153,154,156,157,158,159,160,161,162,163,165,166,167,168,169,170,171,172,173,174,175,176,178,179,180,181,186,187,188,189,190,191,192,193,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,241,242,243,245,248,249,250,251,252,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,316],bugfix:[150,161,164,201,202,203],buggi:[162,182,183,215,226,227,273,274],bugzilla:145,buid:[134,197,202,203],build:[4,22,24,34,38,138,139,141,144,146,147,148,161,171,172,173,174,175,182,183,184,185,187,189,190,191,193,194,202,203,204,205,206,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,245,246,247,248,259,273,274,275,276,277,280,282,283,284,285,287,288,298,305,314],buildroot:[4,231,232,233,287],built:[36,132,133,141,144,171,172,182,183,184,185,220,226,227,273,298,304],builtin:[171,172,256,278,282,285,291,292],bulid:250,bump:[39,70,161,166,171,172,201,202,203,220,226,227,229,230,266,273,274,275,276,291,292],bunch:[133,166,171,172,220,257,273,274,275,277,282,283,291,292],bundl:[147,149],bur:[147,148,161,171,184,185,193,202,203,204,219,220,224,226,229,231,275],burst_count:220,bus:[2,30,33,34,52,60,69,82,100,132,134,147,148,158,171,172,182,183,184,185,189,193,208,213,220,224,226,227,229,230,231,236,243,245,246,247,250,255,266,273,274,275,276,277,287,291,292,295],bus_compar:100,bus_dev_func:[78,100],bus_id:60,bus_mask:134,busagentstatu:84,buse:[100,135,202,203,256,258,278,279,282,283],busi:[44,76,158,162,171,172,182,190,191,193,214,217,225,231,233,282],buss:[226,227],bust:261,bust_lock:[147,148,171,172,261],butt:[266,273,274],bwmgmt:220,bypass:[35,171,174,229,230,246,247,271,275,276],c000000000009674:[217,231,233],c00000000000b118:[231,233],c00000000000b184:[162,215,226,227],c00000000002e2d8:[231,233],c00000000002f0e0:[231,233],c00000000006b078:[231,233],c00000000006b22c:[231,233],c00000000006bc68:[231,233],c0000000000846e8:[162,215,226,227],c0000000000846f4:[162,215,226,227],c000000000084710:[162,215,226,227],c00000000008472c:[162,215,226,227],c0000000000851a8:[217,231,233],c00000000008b0f0:[231,233],c0000000000abdf0:[246,247],c0000000000abdf4:[246,247],c0000000000acc48:[246,247],c0000000000ace60:[246,247],c0000000000de4e8:[231,233],c0000000000ecb98:[217,231,233],c0000000000ed3dc:[217,231,233],c0000000000f4650:[217,231,233],c00000000013b6b0:[217,231,233],c00000000013ba34:[217,231,233],c0000000001b9880:[231,233],c0000000001b9890:[231,233],c00000000035b1f4:[162,215,226,227],c00000000035bab4:[162,215,226,227],c00000000041c3ac:[231,233],c0000000008a8780:[231,233],c000000000900828:[162,215,226,227],c000000000902364:[162,215,226,227],c00000000090540c:[162,215,226,227],c00000000099e644:[217,231,233],c0000000011f7c00:[246,247],c0000000012778c8:[246,247],c00000000127a560:[246,247],c00000000144c900:[162,215,226,227],c000000003167e80:[246,247],c00000000fba0100:[162,215,226,227],c0000000285cfc00:[246,247],c00000003fa7bd80:[178,182,183],c0000003f277b730:[231,233],c0000003f277b9b0:[231,233],c0000003f277ba50:[231,233],c0000003f277ba70:[231,233],c0000003f277bac0:[231,233],c0000003f277bb10:[231,233],c0000003f277bbc0:[231,233],c0000003f277bc50:[231,233],c0000003f277bc70:[231,233],c0000003f277bce0:[231,233],c0000003f277be30:[231,233],c000000f1633fa00:[217,231,233],c000000f1633fae0:[217,231,233],c000000f1633fb60:[217,231,233],c000000f1633fb90:[217,231,233],c000000f1633fc60:[217,231,233],c000000f1633fcf0:[217,231,233],c000000f1633fd80:[217,231,233],c000000f1633fe30:[217,231,233],c000000fdfdc8400:[162,215,226,227],c000000fdfef4000:[162,215,226,227],c000000fdfef79a0:[162,215,226,227],c000000fdfef7c20:[162,215,226,227],c000000fdfef7c60:[162,215,226,227],c000000fdfef7ca0:[162,215,226,227],c000000fdfef7d40:[162,215,226,227],c000000fdfef7de0:[162,215,226,227],c000000fdfef7e30:[162,215,226,227],c000001fea860000:[246,247],c000001fea863550:[246,247],c000001fea8637d0:[246,247],c000001fea863820:[246,247],c00004:[171,172],c0001f:[171,172],c000201cc7cb7750:[246,247],c00:84,c11:[282,283],c13:34,c18:84,c327eddd9b291a0e6e54001fa3b1e547bad3fca2:191,c40:84,c48:[246,247,272,275,276],c80:84,c88:84,c8a7535f:[217,231,233],ca32:[246,248],cabl:301,cach:[2,68,75,102,108,115,117,144,145,146,153,157,162,171,172,174,180,182,183,187,202,203,213,215,220,221,226,227,231,232,241,246,247,250,265,268,273,275,276,282,283,287,291,292,303,306,316],cachelin:[275,276],calcul:[27,29,53,108,133,145,146,171,172,182,183,207,220,222,226,227,231,232,246,247,256,268,271,273,275,276,278,313,314,317],calibr:[231,232,282,283],call:[1,5,9,12,15,16,18,19,20,35,37,38,40,41,43,44,46,47,48,50,51,54,56,57,58,59,61,62,63,64,65,66,67,68,70,71,72,76,77,78,81,83,87,88,89,90,93,96,97,98,99,100,101,103,105,106,107,108,109,110,111,113,114,115,118,119,120,121,122,123,124,125,126,128,129,131,132,133,134,135,143,144,146,147,148,149,150,154,160,161,162,164,165,167,171,172,173,174,175,178,180,182,183,193,202,203,210,215,217,220,221,224,226,227,228,229,230,231,232,233,239,246,247,248,254,255,258,261,263,268,269,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,291,292,296,297,298,302,305,311,314,316],call_cvc_sha512:314,call_cvc_verifi:314,callback:[160,162,171,172,182,183,184,186,201,202,203,212,215,220,226,227,258,273,274,275,276,279,281,282,283,284,291,292],caller:[94,117,131,162,163,171,172,173,214,216,220,225,226,227,231,232,241,246,247,258,273,274,279,282,283,287,291,292,311,314,316],callout:[161,171,174],calucul:[171,173],cam_valu:316,came:[151,217,231,233],campisano:171,can:[0,1,2,4,5,7,9,10,12,13,14,16,17,19,21,22,23,24,26,28,35,36,37,40,41,44,47,49,50,52,54,55,58,61,62,63,64,65,68,70,71,74,75,78,84,88,96,99,104,108,109,110,112,113,114,117,118,119,120,121,122,127,130,131,132,133,134,137,138,139,140,144,146,151,159,160,161,162,171,172,173,174,175,181,182,183,184,185,193,196,202,203,204,205,206,208,211,215,216,217,219,220,221,224,225,226,227,228,229,230,231,232,233,234,236,238,239,241,242,246,247,248,250,251,253,255,256,257,258,259,260,261,266,267,268,269,271,272,273,274,275,276,278,279,280,281,282,283,284,285,286,287,291,292,298,304,311,312,313,314,315,316],canari:220,cancel:[265,305],cancel_tim:[231,233],cancel_timer_async:[231,233],candid:[47,172,173,174,175,183,185,186,193,203,204,205,206,219,220,221,222,223,224,225,226,227,228,230,231,232,233,234,235,236,247,248,273,274,276,277,283,284,285,292],canneri:182,cannot:[84,93,102,103,109,110,119,131,139,161,171,173,182,183,202,204,226,227,255,275,276,282,285,287,291,292,313,316],canon:22,cap:[38,41,42,70,109,213,220,229,230,231,232,234],capabl:[10,21,22,56,75,132,164,184,185,201,202,203,213,220,221,226,227,231,232,246,247,255,258,275,276,279,282,283],capac:139,capi2:[182,183,226,227],capi:[30,102,146,150,157,159,161,173,174,187,196,204,226,227,248,269,271,272,273,275,276,282,283],capp0:[226,227],capp1:[226,227],capp:[1,4,30,58,102,146,147,148,150,159,161,171,172,174,182,183,193,194,196,202,203,204,220,226,227,231,232,250,251,254,268,271,273,275,276,277,281,282,283],capp_cntl:[271,275,276],capp_fir_clear:[251,275,276],capp_lid_download:[226,227],capp_ucode_info:[226,227],cappabl:15,capplidh:[250,275,276],capppsll:[250,275,276],captur:[50,189,220,226,227,275,276],card:[34,102,134,147,148,150,171,172,182,183,193,201,213,220,221,226,227,229,230,231,232,246,247,251,259,268,269,273,275,276,280,282,283,287,291,292],care:[7,35,40,42,58,133,171,172,226,228,246,247,282,283,316],carefulli:[133,261],carol:220,carri:[44,76,246,247,248,273,274,275,276],carvalho:[171,202,203,204,219,220,231],cascad:[182,183,313],cast:[171,172,182],cat:[37,162,213,214,220,224,226,227],catalog:[24,171,173,231,234,246,247],catastroph:[171,172,239],catchal:193,catcher:[250,275,276],categori:[54,68],caught:[182,193,273,274],caus:[13,17,38,39,42,50,51,73,101,122,129,134,145,146,150,153,154,162,164,165,167,171,172,174,175,182,183,184,185,188,197,201,202,204,205,214,220,221,224,226,227,228,229,230,231,232,234,236,237,238,239,243,246,247,248,251,256,257,258,268,271,272,273,274,275,276,278,279,282,283,285,291,292,296,305,313,316],caveat:[171,172],cc0:[84,139],cc1:288,cc8:84,ccan:[133,139,145,291,292],ccin:[34,221,288],ce0900:[162,214,224],ceas:[136,193],cec5750a4a86ff3f69e1d8817eda023f4d40c492:191,cec:[151,217,231,233],cec_power_down:146,cec_reboot:[171,172],cell:[2,3,5,9,14,24,30,31,69,130,171,172,174,175,193,257,275,276,316,317],centaur:[2,19,147,148,166,198,199,202,203],center:231,centos6:220,centos7:220,central:220,cert:[275,277],certain:[51,109,131,132,133,153,162,165,169,171,172,213,238,266,273,274,282,283,291,292,316],certainli:[165,182,183,226,228],certif:38,certifi:138,cesta:164,cf960e2884:[229,230],cfam:[246,247],cfar:[162,171,173,178,182,183,214,215,224,226,227,246,247,261,272,275,276,281,282,283],cfg:[84,171,172,226,227,238,246,248,272,275,276],chad:[147,148],chain:[246,247,304,307,309,314],chanc:[113,171,172,231,232,258,261,275,276,279,281,282,283],chane:164,chang:[1,2,4,14,15,17,22,38,42,44,53,54,70,84,100,103,104,109,110,112,115,121,134,135,137,138,139,141,144,146,147,148,151,155,159,160,162,163,168,169,170,172,173,174,175,176,177,179,182,183,186,192,193,194,195,196,201,203,205,206,207,213,221,222,225,227,228,230,232,233,234,235,236,237,238,240,243,248,250,253,257,258,259,266,267,276,277,278,279,280,281,282,283,284,285,287,291,292,298,310,311,316],changeset:[147,148,161,164,184,185,187,193,202,203,204],channel:[171,172,174,226,227,229,230,246,247],channel_streaming_en:[171,174],chapter:[2,68],charact:[4,34,127,226,229,230,231,232,246,247,275,282,283],character:[13,171,173,231,233],characterist:[13,22,221,291,292],charg:132,chase:226,chassi:[38,286,291,292],check:[17,22,35,45,50,51,58,61,68,100,101,135,144,145,157,162,163,167,171,172,173,174,175,178,180,182,183,187,193,198,202,203,204,213,215,216,217,219,220,221,224,226,227,228,229,230,231,232,233,235,238,239,241,246,247,248,251,254,255,257,258,259,261,265,268,269,272,273,275,276,277,278,279,280,281,282,283,285,286,288,291,292,305,311,312,314],check_credit:[171,172,239,262,295],check_imc_device_typ:61,check_statu:[273,274],check_tim:[275,276],checker:[182,183,220,275,276],checkout:[182,183],checkstop:[44,58,70,146,170,171,172,173,187,193,197,202,204,221,222,226,228,229,230,231,232,236,241,243,246,248,256,261,275,276,281,282,283,285,291,292],checkstop_type_cor:70,checkstop_type_nx:70,checksum:[133,226,227,275,276,291,292],chen:[279,282,283],cherri:[140,153,189,191],chicken:[204,287,291,292],child:[2,3,15,16,17,18,21,23,34,101,132,134,146,171,172,174,182,183],child_p:[101,134],children:[2,155,171,172,174,184,185,220],chip:[2,13,18,19,24,26,28,30,33,34,38,41,58,69,70,72,129,132,134,146,147,148,161,171,172,174,180,182,183,184,185,186,193,194,197,202,203,206,207,220,222,224,226,227,229,230,231,232,241,245,246,247,248,251,257,261,268,269,270,272,273,274,275,276,278,281,282,283,285,291,292,306,316,317],chip_id:[69,70,72,129,220,246,247,268,273,274,275,276,316],chip_tod_parity_err:144,chip_unit:[171,172],chipid:[24,182,183],chiplet:[38,231,232,268,273],chiplet_offlin:[231,232],chiptod:[2,58,116,162,171,172,193,202,203,215,220,231,233,275,276,317],chiptod_capp_timebase_sync:[182,183],chiptod_init:[171,172],chipwis:[182,183],chitod:58,choos:[13,132,133,134,217,231,233,258,273,274,279,282,283],chop:[171,172,240],chose:[2,42,95,134,226,227,251,275,276],chosen:[87,229],chri:[193,202,203,204,219,220],christian:[171,275],christoph:[171,226,231,275],chronolog:314,chunk:[133,202,203,226,228,229,230,273,274,275,276,316],circa:[275,276],circular:[1,133,182,183],circumst:[42,171,172,220,226,227,228,241,246,247,282,283],circumvent:[159,196,202,203],citizen:[291,292],claim:[50,202,203,220,226,227,229,230],clamp:[231,235],clang:[246,248,275,276],clarif:[273,274],clarifi:[131,195,199,220,275,276,282,283],clash:[273,274],class_resp:[144,145],classic:204,classif:35,classifi:[68,135],claudio:[171,202,203,204,219,220,231],clean:[36,108,130,146,171,172,178,182,183,184,191,194,195,220,224,226,227,228,241,246,247,282,283,284,287,291,292,316],clean_on_ecc_error:[171,172],cleaner:222,cleanli:[226,227],cleanup:[48,146,147,148,169,202,220,226,227,228,231,232,246,247,251,256,260,273,274,275,276,278,282,283,316],cleanup_global_tlb:[226,227],clear:[0,23,58,71,75,101,108,119,134,144,146,147,148,153,154,157,161,164,171,172,173,177,178,180,182,183,187,209,220,221,224,226,227,228,229,230,231,232,235,237,238,242,245,246,247,248,251,257,258,259,260,261,264,266,268,271,272,273,274,275,276,278,279,280,281,282,283,286,287,291,292,294,296,311,313,316],clear_maint:[246,248],clear_on_ecc_error:[171,172],clearanc:23,clearer:[205,273,274],clearli:[141,224,273,274,287,291,292],clever:205,client:[161,171,172,226,227,250,275,276,291,292],clk:[171,172,237],clobber:[182,226,227,246,247,316],clock:[2,30,38,42,128,153,162,171,172,184,185,186,201,202,203,215,224,226,227,229,240,266,267,273,274],clog:[171,172],close:[38,39,49,134,146,171,172,208,217,226,231,233,258,279,282,283],closer:[147,148,171,184,185,202,219,275,276,291,292],closest:2,cloud:220,cluster:136,clutter:[282,283],cmd:[67,193,217,231,232,275],cmdcplt:[213,220],cme:[231,232,273,274],cmp:[212,220],cmpm:[182,183],cmpxchg:[171,172],coalesc:316,code:[0,2,3,10,21,22,23,26,27,30,32,34,35,38,39,41,42,43,50,51,54,55,56,58,68,81,93,94,106,108,111,120,123,128,130,132,133,134,135,138,139,141,144,145,146,147,148,153,158,160,161,162,171,172,173,174,175,178,180,184,185,189,190,193,198,201,202,203,204,206,211,213,215,217,219,220,221,224,226,227,228,229,230,231,232,233,234,241,246,247,249,251,252,253,254,259,261,266,268,271,272,273,274,275,276,277,280,281,282,283,284,285,286,288,291,292,299,316],codepath:164,codeupd:47,coher:[27,75,157,171,172,187,221,226,227,282,284,291,292],cold:[209,313],colin:[219,220],collater:101,collect:[24,35,38,44,61,132,139,226,227,282,283,316],collid:[202,203],collis:[2,316],colon:[226,227],column:131,com:[132,138,140,148,155,171,172,176,205,219,220,221,222,224,225,226,227,228,231,232,256,275,278,282,284,291,292],combin:[22,28,134,150,202,204,259,268,273,280,282,285,287,291,292,311,314,316],come:[2,60,68,84,100,101,133,139,147,148,150,157,168,171,172,182,183,187,193,202,217,224,226,227,228,231,233,245,246,247,259,280,282,283,291,292,304],comm:[162,178,182,183,215,226,227,231,233,246,247],comma:[226,227],command:[0,37,47,60,68,107,131,144,147,149,161,162,171,172,173,174,193,194,203,206,209,214,215,217,219,220,224,225,226,227,229,230,231,232,233,236,246,247,248,249,250,258,266,273,274,275,276,279,282,283,284,287,288,291,292,313,314,315],commandreadi:220,comment:[38,132,139,184,185,220,224,231,232,246,247,258,275,279,282,283],commit:[35,47,138,139,140,141,157,161,171,172,174,175,182,183,187,189,191,193,194,202,204,208,217,220,221,224,226,227,229,230,231,232,233,234,236,246,247,248,271,275,276,280,282,283,285,288,291,292,298],common:[4,13,22,28,35,84,133,162,202,204,214,219,220,221,225,231,232,246,247,275,282,284,291,292,316],commonli:[51,144],commun:[0,28,40,50,58,67,77,120,138,139,162,213,217,224,226,227,231,233,282,283,311],compani:141,compar:[4,68,97,100,171,172,182,183,213,220,226,227,229,246,247,282,283,313,314],comparison:[4,182,183,194,226,227,271,275,276],compat:[3,5,6,7,8,9,10,11,12,15,16,17,18,19,20,21,22,23,24,27,28,29,30,32,33,46,54,55,62,63,64,65,70,76,108,114,115,130,132,136,145,147,148,151,171,172,174,177,182,183,194,220,226,227,229,230,231,232,243,246,247,248,250,260,273,274,275,276,282,283,291,292,295,306,315,316,317],compatibil:132,compens:[246,247],compil:[36,138,145,147,149,150,161,171,172,173,184,185,193,202,204,205,275,276,278,291,292],complain:[171,172,182,183,251,252,275,276],complement:[42,182,183,226,227],complet:[0,13,24,35,41,42,45,47,52,60,73,75,78,79,104,108,109,110,113,117,119,120,122,125,127,132,133,135,140,151,160,162,171,172,177,182,183,184,185,192,202,203,204,208,209,212,213,220,221,226,227,228,229,230,231,232,233,241,243,246,247,251,255,258,271,273,274,275,276,279,282,283,286,287,291,292,313,314,316],complex:[16,37,135,171,172,203,220,224,226,227,231,232,246,247,282,285,311],compliant:[132,261,281,286,291,292],complic:[0,134,171,172,231,232,291,292],compon:[0,2,4,14,15,19,21,22,35,109,131,132,133,141,154,171,172,174,180,193,226,227,231,232,246,247,250,275,276,282,283,291,292,311,313,314],component_id:35,compress:[133,226,227,229,230,291,292],compris:[135,246,247,314],compromis:[282,285,311,313],comput:[33,182,183,202,204,275,276],con_need_flush:[273,274],con_op:151,concaten:314,conceiv:145,concept:[171,172,312],conceptu:[182,183],concurr:[113,117,141,171,172,182,183,231,232,257,273,274,278,282,283,316],condit:[13,17,70,103,146,153,157,159,160,162,170,171,172,175,182,183,187,196,202,203,207,215,217,220,226,227,231,232,233,236,246,247,248,261,266,273,274,275,276,281,282,283],condition:[157,187,275,276,280,282,283],conex:[282,283],confid:139,config:[1,27,30,38,41,42,44,133,134,135,137,150,158,171,172,182,183,184,185,189,193,202,203,204,206,220,221,224,226,227,228,229,230,231,232,234,236,238,246,247,248,251,256,258,259,261,269,275,276,278,279,280,281,282,283,285,286,287,291,292,298,315],config_address:[272,275,276],config_disable_vg_not_si:[246,247],config_enable_snarf_cpm:[282,285],config_fsp:[291,292],config_modul:[282,283],config_nvlink_mod:[246,247],config_of_pmem:[246,247],configur:[0,2,16,20,22,28,37,54,57,58,73,75,76,91,99,115,134,135,147,149,154,171,172,173,174,182,183,189,193,201,202,203,220,221,224,226,227,229,230,231,232,233,234,236,238,241,246,247,248,251,256,261,268,271,273,274,275,276,279,281,282,283,286,291,292,314,316],confirm:[17,47,104,141,171,172,226,228,282,283],conflat:[246,247],conflict:[0,220,238,316],conform:[4,46,49,126,131,132,138],confus:[178,182,183,202,203,220,226,227,231,232,246,247,273,275,276,282,283,291,292],congratul:132,conjunct:[41,275,276,313],connect:[2,27,41,135,152,182,183,220,221,226,227,231,232,273,274,282,283,291,292],connector:[34,135,275,276,301],connectx:[231,232,258,279,282,283],consecut:[56,88,198,202,203],consequ:[115,171,172,182,183,279,282,283],conserv:[171,172,229,230],consid:[22,42,43,171,172,182,183,202,203,220,226,228,231,246,247,258,275,276,279,282,283,285,310,311,312,313,316],consider:38,consist:[2,138,159,171,172,191,202,204,222,226,227,241,246,247,259,275,276,280,313,317],consol:[0,5,20,38,42,122,145,151,152,154,162,164,171,172,173,178,182,183,184,185,186,191,193,199,202,203,206,208,215,217,219,220,224,226,227,231,232,233,246,247,248,261,273,274,275,276,281,282,285,286,288,290,291,292,299,316],console_log_level:1,console_unlock:[217,231,233,291,292],console_writ:[273,274],constant:[17,22,171,172,220],constantli:[134,198,251,275,276],constrain:21,constraint:[38,171,172],construct:[19,141,171,172,202,204,241,245,275],constructor:[182,183],consum:[17,22,29,32,41,70,141,171,172,202,203,231,232,241,246,247,273,274,275,276,287,291,292],consumpt:[16,147,148,202,203],contain:[2,3,4,9,14,17,18,21,22,23,24,26,27,28,31,33,35,38,69,70,72,73,104,117,118,127,129,132,133,136,138,140,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,182,183,184,185,186,187,188,189,190,191,192,193,195,196,197,198,199,200,201,202,203,204,205,206,215,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,246,247,248,250,251,252,254,255,256,257,258,259,261,262,263,264,265,266,268,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,294,295,296,297,298,299,300,301,302,303,305,306,307,309,310,311,316],contend:[226,227],content:[1,2,7,36,40,69,71,76,133,161,171,172,188,202,204,219,220,221,222,224,225,226,227,228,246,247,273,274,282,283,294,316],context:[13,33,40,73,124,133,182,183,226,227,229,231,232,246,247,255,258,275,279,282,283],context_switch2:229,contigi:291,contigu:[171,172,226,227,254,275,277,316],continu:[22,37,108,133,147,149,150,161,162,171,172,178,182,183,184,185,188,201,202,203,204,215,217,219,223,226,227,231,232,233,240,241,246,247,250,273,274,282,283,291,292,298,312],contrari:[162,214,225,291,292],contribut:[38,139,171,172,220,298],contributor:[138,161],control2:220,control:[1,2,22,23,27,29,33,35,37,38,41,58,60,62,63,64,65,68,76,77,113,121,124,128,129,132,133,135,146,160,164,171,172,173,175,180,182,183,202,203,207,213,220,226,227,229,230,231,232,233,235,237,241,243,246,247,248,250,252,257,268,270,271,273,274,275,276,278,282,283,285,287,291,292,298,310,311,316],convei:[231,232],conveni:[291,292,311],convent:[2,56,120,134,291,292],convers:[75,257,275,277,291,292,306,309],convert:[35,132,159,171,172,181,196,202,203,208,226,227,231,232,246,247,258,261,267,273,274,279,281,282,283,284,285,291,292,299],cool:54,coordin:22,cope:[246,247,282,285],copi:[2,35,40,45,50,51,55,58,76,83,87,108,118,119,138,166,171,172,173,175,182,183,226,227,229,230,231,232,246,247,258,275,276,279,282,283,285,291,292,315],coproc:146,coprocessor:[25,38,129,146,229,230,268,273,274,275,276],copyright:138,core:[2,14,19,21,22,38,40,58,61,70,116,122,131,132,133,136,146,154,157,158,160,165,171,172,173,174,175,178,180,182,183,187,190,191,193,194,201,202,203,204,205,206,213,221,222,226,227,228,229,230,231,232,233,235,241,242,246,247,248,251,256,257,258,261,263,268,271,272,273,274,275,276,278,279,281,282,283,285,289,290,291,292,294,299,305,311,316],core_fir:[272,275,276],core_imc_event_mask:[231,232],core_start:[246,248],core_stop:[246,248],core_wof:[246,247],corner:[162,163,194,195,202,203,215,216,217,226,227,228,231,233,258,279,282,283],corpor:164,corr:[256,275,276],correct:[2,17,35,44,67,100,101,110,131,140,141,159,171,172,174,175,176,182,183,189,195,196,200,202,203,206,213,220,226,227,228,229,230,231,232,246,247,248,254,255,258,259,261,268,271,272,273,274,275,276,277,279,280,281,282,283,291,292,313],correctli:[55,117,141,147,149,153,157,160,165,170,171,172,173,175,177,182,183,187,202,203,204,217,220,221,224,226,227,229,230,231,232,236,246,247,251,255,268,273,274,275,276,279,282,283,291,292],correl:[84,100,229,275,276],correrr:164,correrrorstatu:84,correspond:[2,9,13,17,21,41,52,56,58,69,88,108,118,123,134,135,141,147,149,153,171,172,173,182,183,184,186,197,216,220,221,226,227,228,231,232,246,247,268,273,274,275,276,313,316],corrupt:[147,148,161,165,168,171,172,178,182,183,188,194,226,227,228,229,246,247,261,271,275,276,282,283,294,302,313],cosmet:[171,172],cosol:[162,215,226,227],cost:[102,171,172,273,274,291,292],could:[0,22,42,44,50,51,75,114,129,135,140,141,144,145,147,148,149,153,154,157,160,165,167,171,172,181,182,183,187,189,201,202,203,204,205,207,208,220,224,226,227,229,230,237,245,246,247,248,255,260,268,271,273,274,275,276,282,283,291,292],couldn:132,count:[0,13,24,35,36,37,69,134,146,157,167,171,172,187,193,221,229,230,231,251,258,261,275,276,279,281,282,283,284,291,292],counter:[28,37,61,171,172,175,224,226,227,229,230,231,233,242,246,275,276,282,283,287,291,292],coupl:[134,146,184,185,198,199,220,231,236,268,273,275,291,292],cours:[224,259,280],cover:[132,138,171,172,174,184,185,226,227,231,232,246,247,261,275,277,281,282,283,316],coverag:[36,147,148,149,184,185,226,246,248,273,274,275,276],cow:[282,284],cp_m:[282,285],cpio1:[226,227],cpio2:[226,227],cpio:[226,227],cpm:[282,285],cpmc1sel:24,cpmc2sel:24,cpmc:[24,37],cpmc_load:[24,37],cpp:226,cppr:[64,224,316],cpu0:[231,233],cpu1:[231,233,282,283],cpu3:[282,283],cpu:[2,14,16,25,38,42,58,61,62,65,71,75,109,112,113,115,122,123,128,131,132,133,145,146,147,148,157,158,161,162,165,171,172,173,174,175,178,182,183,187,189,191,193,202,203,205,215,217,220,221,224,226,227,228,229,230,231,232,233,234,246,247,256,257,260,261,271,272,273,274,275,276,278,281,282,283,285,287,291,292,305,314,316],cpu_features_t:[182,183],cpu_idl:[226,227],cpu_idle_delai:[226,227],cpu_idle_job:[182,183,226,227],cpu_nr:[113,122],cpu_pir:[61,123],cpu_process_job:[182,183],cpu_process_local_job:220,cpu_queue_job_on_nod:[275,276],cpu_relax:[147,148,226,227],cpu_target:113,cpu_thread:[182,271,273,274,275,276],cpu_to_gpu_0:16,cpu_to_gpu_1:16,cpu_up:[231,233],cpu_wait_job:[140,167,171,175,202,203,275,276],cpufeatur:[21,22,180,182,257,278,282,283,284],cpuhp_invoke_callback:[231,233],cpuhp_up_callback:[231,233],cpuidl:[13,145,146,171,172,229],cpuinfo:2,cq_sm:[282,285],crank:[44,50,94,96,220,229,286,291,292],cranki:204,crap:[226,227],crash:[40,50,113,122,132,145,147,148,149,162,171,172,174,182,183,193,202,203,214,224,225,226,227,228,231,232,233,239,240,246,247,254,257,261,272,273,274,275,276,277,278,281,282,283,285,286,287,291,292,293],crazi:[220,224],crb:[146,268,273,274],crc32c_vpmsum:[162,215,226,227],crc:[282,283],creat:[2,7,17,21,22,23,35,40,41,53,58,62,63,64,65,67,71,88,132,135,138,140,141,146,162,171,172,173,174,175,182,183,202,203,215,219,220,221,222,224,225,226,227,229,230,231,232,246,247,273,274,282,283,287,291,292,314],create_:[258,279,282,283],creation:[7,171,172,293],creator:[35,51],credit:[41,147,148,161,164,172,184,185,187,193,194,202,203,204,232,236,239,269,276],credits_check:[180,246,247],creset:[135,160,171,172,174,182,183,220,226,227,228,229,230,275,276,282,283,287,291,292],creset_start:289,cresp:[171,174],crit:[1,224],criteria:206,critic:[2,19,39,140,150,161,171,172,251,275,276,313],croner:[226,227],cronu:[275,282,283],cross:[36,138,145,146,246,248],cross_compil:145,crowd:[282,284],crowel:[171,275],crtm:[291,292],crufti:220,crypt:[171,172],crypto:[229,230],cryptograph:304,cset:[147,148,161,164,171,184,185,187,193,202,203,204,219,220,224,226,229,231],csm0:[178,182,183],csm:[18,229,230],csm_:[229,230],cssver:35,ctl:135,ctle:[171,172],ctor:[275,276],ctr:[162,171,173,178,182,183,214,215,224,226,227,246,247],ctrl1:[246,248],ctx:[258,279,282,283],cumul:103,cumulu:[134,136,226,227,231,232,275,276],cupd:[20,39,146,273,274],cure:[171,172],currei:[171,184,185,187,193,202,203,219,220,224,226,229,231,275],current:[2,4,9,15,16,17,19,20,21,22,29,35,37,38,42,43,44,45,47,48,50,55,57,58,62,68,70,73,74,75,76,77,78,83,106,108,109,110,113,115,117,119,120,121,122,131,132,133,134,135,139,147,149,153,162,166,171,172,173,174,175,176,177,178,179,180,181,182,183,185,186,188,189,190,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,294,295,296,297,298,299,300,301,302,303,305,306,307,309,311,312,313,316,317],curs:[287,291,292],custom:[21,22,34,141,220,246,247,275],cut:[36,114,135,139,146,147,149,166,171,172,173,174,175,183,202,220,221,222,224,225,227,228,230,232,233,234,235,236,238,246,247,248,275,276,291,292],cvc:[23,25,38,171,172,173],cx23888:[282,283],cx4:193,cx5:[102,226,227,269,275,276],cxl:[182,183,246,247,269,275,276],cycl:[24,37,42,69,139,166,193,201,202,203,219,220,221,222,223,224,225,226,227,228,230,246,247,257,261,266,273,274,275,276,277,281,282,283,291,292,304],cyle:231,cyril:[147,148,161,171,184,185,193,202,203,204,219,220,224,226,229,231,275],d002:34,d003:34,d00:84,d00e:26,d00f:[171,172],d08:84,d2ae07fd97bb9408456279cec799f72cb78680a6:191,d40:84,d48:84,d66a00d7:[162,215,226,227],d695626:4,d7efe30:4,d80:84,d88:84,d9296050bcece5c2eca5ede0932d944b0ced66c9:226,d997e482705d9fdff8e25fcbe07fb56008f96ae1:202,daemon:[6,162,171,172,182,183,215,217,220,226,227,229,230,231,233,246,247,252,258,279,282,283],dai:[58,117,164,202,203,220,229,248],daily20170201:4,dan:[147,148],danger:[205,287,291,292],daniel:[147,148,161,171,184,185,231,275],danni:148,dar:[171,173,178,182,183,231,233],darn:[21,171,172,180,182,224,241,246,248,275,276],dasd:[34,76],dat_err:[171,172,238],data0:0,data1:35,data2:35,data3:35,data:[2,12,14,17,19,23,25,30,35,37,38,41,44,56,60,67,68,69,70,71,76,78,83,84,85,86,95,98,104,118,119,120,133,134,136,144,162,171,172,173,174,182,183,184,186,189,191,193,198,202,203,208,213,215,217,220,221,224,226,227,228,229,230,231,232,233,238,242,246,247,248,256,257,258,261,268,273,274,275,276,279,281,282,283,284,287,288,290,291,292,294,299,307,309,311,313,314,317],data_len:314,data_s:118,databas:[231,232],datadefin:313,date:[34,101,139,141,171,172,219,220,221,222,224,225,226,227,228,275,276,282,285],dave:[219,224],dawn:[131,275],days_in_month:229,dbg:[171,172,246,247,273],dc0:84,dc8:84,dcach:[182,183],dcbf:153,dccal:[282,283],dcm:2,dco:138,dctl:[171,172,246,247],dctl_clear_special_wakeup:[231,235,275,276],dctl_set_special_wakeup:[275,276],dd10:[179,182],dd1:[134,182,183,220,221,224,226,227,228,229,230,231,232,282,283],dd20:[179,182],dd2:[134,161,171,172,177,182,183,202,203,226,227,228,231,232,234,235,236,237,246,248,256,257,272,273,274,275,276,278,282,283,284,291,292],ddr4:[26,171,172],ddr:26,ddx0:[179,182],dead:[58,198,281,282,283,284],deadlin:231,deadlock:[147,148,171,172,182,183,231,233,246,247,261,273,274,275,276,305],deal:[161,171,172,226,227,228,231,232,246,247,248,252],dealt:[51,161,226,227],deassert:[134,226,229,230,268,273,282,283,287,291,292],deassert_delai:[282,283],deatail:68,deb:[171,193],debat:22,debian:[4,171,172,173,184,185,226,228,229,275],debounc:[226,227],debug:[35,38,50,113,122,128,133,141,150,175,176,178,179,180,184,186,193,195,198,220,224,227,229,230,231,232,233,235,236,248,249,257,261,272,273,274,277,278,281,284,285,287,288,305,306,316],debug_descriptor:[1,291,292],debug_lock:[133,182,183,275,276],debug_locks_backtrac:[291,292],debugf:[246,247,273,274],debugg:[171,172,246,247],debut:136,dec:[58,146,193,209,231,232,261,281,282,285],decemb:[144,153,154,211,241,242,243,255,275,282,283,284,285,295],decent:[282,285],decid:[2,162,167,171,172,202,203,215,255,275,282,283],decim:[35,220,275,276],deciph:[171,173],decis:[22,139,267,273,274,314],declar:[39,171,172,229,230,291,292,311],decod:[93,171,173,189,213,220,229,230,246,247,282,283,285],decode_core_fir:[275,276],decompress:133,deconfigur:[229,230,241,246,247],decoupl:220,decreas:204,decrement:[231,232],dedic:[37,135,226,228],deem:139,deep:[13,47,133,171,172,231,232,242,246,247,275,276],deep_reboot:[217,231,233],deep_stat:[171,172],deeper:[13,171,172,231,232,235],default_machine_kexec:[231,233],defect:[171,172,188],defererenc:[287,291,292],defin:[0,1,2,4,13,15,17,18,21,35,42,43,44,45,46,47,48,50,51,52,53,54,55,56,57,58,60,62,63,64,65,67,68,69,70,71,72,73,76,77,78,79,80,81,82,83,84,85,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,107,111,112,113,114,115,116,118,119,120,121,123,124,125,126,127,128,131,132,133,134,138,146,150,171,172,174,178,180,182,183,189,206,220,226,227,229,230,246,247,258,273,274,275,276,279,282,283,285,287,288,291,292,311,313,314,316,317],define_log_entri:35,definit:[2,17,21,22,38,103,135,171,172,182,183,206,220,226,227,231,232,289,311,316],degrad:[35,226,228,231,232,236,275,277],delai:[38,42,43,70,125,130,151,167,171,172,184,185,224,226,228,241,242,261,268,272,273,274,275,276,281,282,283,287,291,292,316],delet:[17,47,51,182,183,202,204,273,274],deliv:[58,122,246,247,272,275,276],delta:[147,148,161,164,171,184,185,187,193,202,203,204,219,220,224,226,229,231,275],demand:[172,173,174,175,182,183],denali:310,denot:[14,24,27,35,273,274,282,283],dep:275,depend:[14,17,19,21,22,35,40,41,44,88,102,123,134,164,171,172,173,174,175,178,182,183,220,229,230,231,232,253,255,261,273,274,275,276,281,282,283,291,292,311,316,317],depict:34,deploi:[22,291,292],deprec:[42,81,84,130,132,146,220,231,232,246,247],depth:[146,256,278],dequeu:67,deref:[171,174,182,183],derefer:[144,145,182,183,202,220,226,227,275,276,282,283],dereferenc:[147,148,171,174,225],deregist:[291,292],deriv:[35,58,76,171,172,231,232],desc:[24,99,288],descib:[231,232],describ:[2,3,6,8,9,10,13,16,17,19,21,22,23,31,32,35,37,77,102,110,117,127,132,133,137,171,172,175,220,224,231,232,241,246,247,248,251,282,283,316],descript:[4,17,21,24,34,35,70,140,222,231,232,275,276,282,283],descriptor:[1,40,99,224,285,307,309,316],design:[4,21,25,38,39,41,42,126,133,139,141,147,149,171,172,175,224,226,227,231,237,246,247,273,274,282,283,285,291,292,313],desir:[17,23,282,285,316],despit:[178,182,183,231,233,257,278,282,283],dest:71,destin:[7,71,259,280],destroi:[73,171,173,178,182,183,221,246,247,275,276],detail:[7,10,17,40,41,44,47,49,51,52,57,58,68,70,76,77,92,108,115,132,133,134,135,157,171,172,173,174,175,182,183,187,193,202,203,204,205,206,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,246,247,248,261,268,273,274,275,276,277,281,282,283,284,285,291,292,298,311,316],detect:[0,2,5,23,38,58,61,79,86,134,135,146,150,151,154,159,160,161,162,163,168,171,172,173,176,178,181,182,183,188,196,201,202,203,206,207,208,214,215,216,217,220,224,225,226,227,228,229,230,231,232,233,238,246,247,248,251,256,267,273,274,275,276,277,282,283,285,287,291,292,295,299],detector:[182,183],determin:[4,13,17,24,41,42,46,49,56,70,88,97,131,132,134,177,178,182,183,202,203,204,226,227,229,230,231,234,246,247,273,274,275,276,282,283,284,311,313],dev:[41,100,133,134,166,184,185,231,233,234,246,247,287,291,292,295],dev_:[246,247],dev_addr:[246,247],dev_compar:100,dev_mask:134,dev_port:[246,247],devcmdstatu:84,devctl:[229,230],develop:[23,42,50,83,136,141,144,146,147,148,161,164,172,184,185,187,193,202,203,204,205,227,246,247,273,274,279,282,283,284,291,292,304,308,311,314],devfn:[182,183],deviat:311,devic:[0,3,5,12,16,17,20,21,26,32,33,34,37,38,39,44,49,52,53,55,59,61,62,63,64,65,68,69,70,71,73,74,75,76,77,84,87,93,95,99,100,101,102,103,104,109,110,114,119,120,121,127,129,132,133,135,137,139,141,144,145,146,147,148,154,155,158,160,171,172,173,174,175,177,178,180,182,183,184,185,186,187,189,201,202,203,204,205,213,219,220,221,224,226,227,228,229,230,231,232,233,234,236,238,241,242,246,247,248,250,258,260,261,266,268,269,271,273,274,275,276,279,281,282,283,284,285,287,291,292,298,306,310,311,313,314],device_init:220,device_tree_max_s:133,device_typ:[2,21,26,27,30,171,172,220],devicestatu:84,devicetre:[31,133,193,231,232,246,247,282,283,285,287],devicetreebasedtcwarn:130,devid:[171,175],devsecstatu:84,devsta:164,devstat:[229,230],devtre:[171,172,204],dfp:2,dgemm:[182,183],dgibson:[291,292],diag:[30,44,84,224,226,228],diag_buff:[83,84],diag_buffer_len:[83,84],diagnos:[50,171,172,182,183],diagnosi:170,diagnost:[5,83,84,170,266,272,273,274,275,276],diagost:[266,273,274],dial:[282,285],dictat:[132,206,246,247],did:[50,113,118,160,171,172,175,184,185,207,213,220,229,230,275,276,283,286,287,291,292],didn:[147,149,157,162,165,171,172,182,187,195,206,207,215,216,220,226,227,229,230,231,232,241,246,247,261,275,276,281,282,284],died:[217,231,233],dif:[257,275,277],diff:141,differ:[2,4,14,17,20,22,28,43,44,46,68,84,131,135,138,139,140,141,154,171,172,178,184,186,202,203,204,206,208,220,221,226,227,229,230,231,232,238,241,246,247,248,250,269,273,274,275,276,282,285,291,292,313,316],differenti:220,difficult:[171,172,182,183,231,232,261,304],difficulti:220,digest:[291,292,314],digest_s:314,digit:[4,21],dimm14:26,dimm7:[171,172],dimm:[2,26,34,147,148,171,172,220,226,227,246,247,250],dinar:193,dio:[291,292],dio_interrupt_deregist:[291,292],dio_interrupt_regist:[291,292],dionysiu:[184,185],dir_typ:35,direcetori:[273,274],direct:[26,58,102,171,172,173,182,183,202,203,220,226,227,231,235,246,247,248,250,269,273,274,275,276,288,314,316],directli:[89,128,133,138,141,171,172,182,183,184,185,193,220,221,222,226,227,229,230,246,247,261,266,273,274,275,276,281,282,283,285,316,317],directori:[19,22,133,171,173,226,227,273,274,275,291,292],dirti:[4,141,153,171,172,231,232,241,246,247,258,261,279,281,282,283,284],disabl:[0,5,22,32,41,44,74,75,88,89,93,98,99,102,103,107,115,119,121,132,147,148,159,160,171,172,173,174,175,177,178,179,182,183,191,193,199,202,203,204,205,208,212,217,220,221,224,226,227,229,230,231,232,233,234,246,247,248,250,258,261,265,269,270,271,272,273,274,275,276,279,281,282,283,285,286,287,289,291,292,294,296,298,303,306,316],disable_capi_mod:[282,283],disable_fast_reboot:[182,183,275,276,298],disable_unavailable_unit:[61,171,172],disallow:[211,220],discard:[35,55,268,273,275,276,291,292,316],disclaim:139,discourag:132,discov:[182,183,226,227],discret:316,discuss:[139,171,172,291,292],disk1:[246,247],disk2:[246,247],disk:[193,202,203,246,247],dispali:[231,232],dispatch:[19,202,203,316],displai:[12,127,153,154,160,164,171,172,182,183,202,203,207,220,224,231,232,246,247,248,251,268,273,274,275,276,282,285,291,292],disposit:[58,70],disr:151,dist:220,distanc:[226,228],distant:[246,247,282,283],distclean:[171,172],distinct:[2,88,246,247,275,276,317],distinguish:[28,29,273],distribut:[14,133,138,139,147,148,282,283],distro:[246,247,257,275,277,291,292],divid:[1,171,173],divisor:145,dl_lock:[275,276],dlactiv:220,dlp:[182,226,227,287,291,292],dlx:[282,283],dma0errorlog0:84,dma0errorlog1:84,dma0errorstatu:84,dma0firsterrorstatu:84,dma1errorlog0:84,dma1errorlog1:84,dma1errorstatu:84,dma1firsterrorstatu:84,dma:[38,41,56,88,89,97,98,102,107,125,171,172,174,189,193,194,226,227,228,250,268,269,271,273,275,276],dma_addr:106,dma_window_numb:[88,89,134],dmawin:88,dmesg:50,do_capp_recovery_scom:[171,172,182,251,271,275,276],do_creat:[171,172],do_idl:37,do_list:[171,172],do_read_fil:[171,172],do_vfs_ioctl:[162,215,226,227],doc:[5,35,101,132,133,146,171,172,175,193,202,203,217,220,231,233,289,291,292,314],docker:220,dockerfil:[246,247,275,276],document:[0,2,17,21,22,23,24,27,31,35,56,59,70,73,88,89,90,93,95,97,98,100,101,103,105,117,130,131,132,133,134,138,144,145,146,147,148,159,171,172,175,184,185,186,187,188,189,190,191,193,196,220,226,227,229,230,231,232,237,246,247,291,292,311,315,316],docutil:289,doe:[1,2,4,12,17,21,22,35,37,40,43,49,51,61,62,63,64,65,68,71,75,76,81,88,93,100,103,114,115,120,122,124,132,133,134,139,141,146,153,171,172,173,174,178,180,181,182,183,208,219,220,224,226,227,229,230,231,232,233,236,241,243,246,247,249,251,253,257,261,267,269,271,273,274,275,276,278,281,282,283,285,287,288,291,292,298],doesn:[0,2,50,51,62,63,64,65,69,78,79,82,83,106,120,135,146,160,161,168,171,172,182,183,202,203,206,213,217,220,221,226,227,228,229,230,231,232,236,246,247,254,259,266,268,273,274,275,276,277,280,282,283,284,288,291,292,294,298,316],doing:[0,108,133,141,153,171,172,174,193,194,202,203,219,220,223,224,226,228,229,231,232,241,246,247,248,275,276,286,287,291,292,316],domain:[13,61,97,100,101,134,138,282,283,316],domin:[202,204],don:[2,44,70,106,133,146,147,148,149,153,160,164,171,172,173,174,175,182,183,184,185,193,198,202,203,204,205,207,208,212,213,217,219,220,224,226,227,228,229,230,231,232,237,238,241,242,246,247,248,254,256,259,261,266,267,272,273,274,275,276,277,278,280,282,283,287,291,292,296,307,309,316],donat:[133,220,226,228,316],done:[0,2,4,13,14,22,35,51,135,150,169,171,172,173,182,183,193,202,203,219,220,223,224,226,227,229,230,231,232,236,237,242,246,247,251,258,260,269,271,273,274,275,276,279,282,283,284,291,292,311,316],donnellan:[147,171,184,185,187,193,202,203,204,219,220,224,226,229,231,275],dont:[246,247],dont_stop:[273,274],doom:[272,275,276],doorbel:[257,278,282,283],dot:146,doubl:[162,202,203,214,224,225,226,228,246,247,282,285,300,313],doubt:133,down:[0,2,35,43,50,51,58,61,70,135,144,151,152,159,162,166,171,172,174,182,183,184,185,195,196,202,203,214,217,220,224,226,227,229,230,231,232,233,246,248,261,266,273,274,275,276,279,281,282,283,284,287,291,292],down_128b_data_xf:24,download:[146,202,203],downport:[275,276],downsid:[226,227],downstream:[93,101,135,164,201,202,203,213,220,226,227,246,247,282,283,291,292],dozen:1,dpo:[114,151,162,214,217,224,231,233],dpo_pend:151,dpo_timeout:114,draft:132,dram:26,dramat:[182,183,202,203,226,227],draw:[184,185,246,247],drcr:[171,172],dread:[275,276],drive:[135,144,229,230,251,273,274,296],driven:[184,186,266,273,274,282,285],driver:[1,15,17,19,23,28,41,61,133,151,162,164,171,172,182,183,184,186,193,202,203,204,207,209,213,214,215,219,220,224,225,226,227,229,230,231,232,233,234,236,245,246,247,248,258,266,268,269,273,274,275,276,279,282,284,285,312,314,316],drop:[38,42,130,146,162,171,172,182,183,214,215,217,224,225,226,227,231,232,233,246,247,273,274,275,282,283,290,299],drop_my_lock:[256,278],dscr:231,dsisr:[171,173,178,182,183,231,233],dt_attach_root:224,dt_find_compatible_nod:[171,174],dt_find_compatible_node_on_chip:[171,174],dt_find_properti:[182,183],dt_for_each_compat:[282,283],dt_next:[171,174],dt_node_is_compat:[182,183,282,283],dt_root:[282,283],dt_slot_get_slot_info:[182,183],dt_struct:[226,227],dtb:[226,227,257,275,277],dtc:[130,171,172,182,183,226,227,257,275,276,277,287,291,292],dtdiff:[257,275,277],dts:[2,171,172,182,183,220,226,227,257,275,277,282,283],dual:[2,39,226,227,282,285,298],dubiou:[171,172],due:[44,52,75,109,110,119,128,160,162,171,172,178,179,180,181,182,183,198,199,201,202,203,204,205,206,212,214,215,217,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,242,246,247,248,249,250,251,252,254,255,256,257,258,259,261,262,263,264,265,266,268,270,271,272,273,274,275,276,278,279,280,281,282,283,284,286,287,288,289,290,291,292,294,295,296,297,298,299,300,301,302,303,305,306,307,309,311,312,313],dumm:35,dummi:[35,158,171,172,189,193,231,232,241,273,274],dump:[5,36,38,42,44,71,108,146,147,149,162,171,172,176,178,182,183,199,200,214,215,217,219,220,224,226,227,228,229,230,231,233,246,247,261,275,276,281,282,283,284,285,291,292,293,296,301,316],dump_id:50,dump_siz:50,dump_trac:[291,292],dump_typ:50,dump_type_fsp:50,dump_type_si:50,dump_type_sma:50,dump_work_fn:[217,231,233],dunno:[171,172],duplic:[171,172,174,220,224,226,229,230,275,276,282,283,291,292],durat:[24,37,76,162,171,172,182,214,225,240],dure:[0,1,4,7,13,23,28,35,39,43,47,58,68,71,76,122,129,133,134,147,148,152,153,157,159,160,161,162,163,168,171,172,173,174,182,183,184,185,187,191,193,196,201,202,203,204,207,208,209,213,216,217,220,221,226,227,228,229,230,231,232,233,236,240,241,246,247,251,255,257,258,259,261,268,269,272,273,274,275,276,277,278,279,280,281,282,283,284,285,291,292,296,311,313,314,316],dword:135,dynam:[39,110,146,177,182,183,193,202,203,221,224,273,316],e00:84,e08:84,e1e6d009860d0ef60f9daf7a0fbe15f869516bd0:204,e40:84,e48:84,e5720d3fe94:224,e761222593a1ae932cddbc81239b6a7cd98ddb70:191,e7c8cba4ad773055f390632c2996d3242b633bf4:191,e80:84,e8810020:[162,215,226,227],e88:84,e_info:35,each:[2,3,4,10,13,14,15,16,17,18,19,21,22,28,31,33,34,37,41,49,51,52,56,58,61,73,77,84,88,101,103,110,124,127,129,133,134,139,146,147,148,149,171,172,174,175,179,182,183,193,202,203,206,208,220,221,226,227,229,230,231,232,241,246,248,269,273,274,275,276,282,283,284,285,291,292,311,312,314,316,317],eari:[272,275,276],earli:[8,50,132,135,136,139,150,162,168,171,172,173,174,175,176,182,183,184,186,214,224,225,226,227,231,232,233,234,235,236,246,247,248,258,260,272,273,274,275,276,279,282,283,311],earlier:[70,96,133,220,226,227,231,232,246,271,273,275,276,280,282,283],earliest:5,early_setup:[226,227],early_setup_secondari:[226,227],earnest:227,eas:[226,227],easi:[150,226,227,246,247],easier:[171,172,182,183,220,231,232,261,273,274,279,281,282,285,291,292],easili:[77,171,172,182,183,246,247,275,276],eb0500:[217,231,232],ec0:84,ec366ad4e2e871096fa4c614ad7e89f5bb6f884f:191,ec8:84,ec_ppm_special_wkup_:[282,283],eca02ee2e62cee115d921a01cea061782ce47cc7:189,ecc:[146,161,171,172,202,203,226,231,232,246,247,254,256,273,274,275,276,277,278,282,283,287,291,292,294],ecc_protect:[246,247],eccb:[2,69],ecdsa_sig:225,ecdsa_sig_st:225,echo:[150,178,182,183],ecid:[38,231,232],eclips:[267,273,274],ecmd_ppc:224,ecrc:[202,203,221],edg:[121,246,247,316],edk2:[17,306],ee07f2c68160:298,eef0e197ab:[231,235],eeh:[41,42,82,107,147,148,150,171,172,220,224,226,227,228,229,230,231,236,238,246,247,258,271,275,276,279,282,283,291,292,298],eeh_action_token:[79,80],eeh_freeze_statu:[282,283],eeprom:[2,171,172,220,246,247,250,295],effect:[50,113,154,162,171,172,182,215,216,224,226,227,229,230,231,232,241,251,261,268,272,273,274,275,276,281,282,283,285,287,291,292,311,316],effici:[13,171,172,202,203,207,241,258,279,282,283,291,292],effort:[113,139,182,183,220,221,222,224,225,227,230,246,247,291,292],efi:312,efram:[246,247],egg:204,eight:[70,287,291,292],either:[5,12,13,17,20,23,28,35,55,56,69,72,76,78,101,107,108,113,115,133,143,171,172,182,183,202,203,204,220,226,227,231,232,233,246,247,250,273,274,289,291,292,313,316],elaps:[273,274],electr:[147,148,182,183,226,229,230,246,247,287,291,292,317],electron:317,eleg:139,element:[68,75,171,172,182,183],elev:224,elf:[21,22,133,182,183,202,204,231,232,275,276,281,282,283],elfv1:[147,149],elimin:[220,291,292],elinux:138,ellerman:[147,148,171,219,220,224,226,231,275],elog:[35,144,146,159,171,172,191,193,195,202,203,288],elog_buff:51,elog_commit:[35,146],elog_en:[195,202,203],elog_fsp_commit:35,elog_head_st:35,elog_id:51,elog_read_max_record:35,elog_s:[35,51],elog_state_fetch:35,elog_state_fetched_data:35,elog_state_fetched_info:35,elog_state_host_info:35,elog_state_non:35,elog_state_reject:35,elog_typ:[35,51],elog_write_max_record:35,elogid:35,els:[44,106,124,133,201,202,203,217,220,231,233,246,248,258,275,276,279,282,283],elsewher:[178,182,183,246,247],email:139,emerg:[1,224,226,227,246,247],emit:[202,275,276,282,285],emitt:[171,172],emphasi:[171,172],employ:[147,148,161,164,184,185,226,229],empti:[2,31,62,67,86,118,131,160,220,246,247,258,273,274,278,279,282,283,311],emul:[38,62,63,64,65,121,132,171,172,184,185,188,193,220,224,226,227,231,232,316],enabl:[1,13,17,21,22,23,32,36,37,44,56,58,74,75,88,93,98,99,102,103,114,119,134,146,147,148,155,157,164,171,172,173,174,175,179,182,183,184,186,187,193,202,203,204,206,220,221,224,226,227,228,229,230,231,232,236,237,238,246,247,248,255,258,261,266,269,271,272,273,274,275,276,279,281,282,283,285,286,288,291,292,298,301,304,308,310,314,315,316],enable_capi_mod:[171,174,182,183,268,269,273,275,276],enable_mambo_consol:[226,227],enc:[225,246,247],enclosur:[10,34,162,215,226,227],encod:[2,15,16,19,21,33,56,118,120,171,172,173,194,220,246,247,282,283,285,291,292,316,317],encompas:[246,247],encompass:22,encount:[182,183,258,272,275,276,279,282,283,287,291,292],encourag:[2,139,182,183,184,185],end:[4,17,42,52,68,108,118,141,147,148,157,160,165,171,172,173,175,182,183,187,188,193,201,202,203,204,222,226,227,228,229,230,231,232,233,238,246,247,248,254,255,261,268,272,273,274,275,276,277,281,282,283,285,291,292,304,306,316],endian:[13,42,132,146,161,193,202,203,220,226,246,248,261,273,275,276,281,282,283,298,306,309],endlessli:[275,276],endpoint:[38,159,164,171,172,196,202,203,221,275,276],endup:[162,163,182,183,194,215,216,217,226,227,231,233,258,261,279,281,282,284],energi:[171,175],enforc:[23,120,171,172,173,182,183,220,224,226,227,241,252,258,279,282,283,286,291,292,311,314],engin:[28,37,61,102,123,133,146,158,171,172,190,191,193,211,224,226,227,228,229,230,231,233,246,247,250,268,269,271,273,274,275,276,316],enhanc:[70,178,179,180,229,230,246,247,249,258,279,291,292],enough:[53,60,77,127,132,133,147,148,202,204,207,213,217,220,224,226,228,231,232,233,246,247,250,266,267,273,274,275,276,282,283,291,292,313,316],enqueu:[118,271,275,276],enqueue_upd:311,enrol:[17,312],ensur:[0,13,41,50,86,113,115,120,122,133,139,140,150,154,157,165,167,171,172,173,180,182,183,187,189,193,202,203,217,220,226,227,228,229,230,231,232,233,240,241,246,247,257,258,263,271,273,274,275,276,277,279,282,283,286,289,291,292,307,309,313,314,316],enter:[0,13,17,48,133,152,171,172,178,182,183,226,227,229,231,232,233,246,247,273,274,282,283,287,291,292],enterpris:[246,247],entir:[139,161,171,172,176,182,183,202,204,224,226,227,229,230,231,232,258,261,266,268,273,274,275,276,279,281,282,283,285,286,291,292,308,314],entireti:161,entiti:[16,110,135,282,291,292,316],entitl:[171,172],entranc:[178,182,183,246,247,275,276],entrant:[178,182,183],entri:[2,5,12,22,24,35,40,48,52,71,75,88,97,101,129,132,133,137,146,161,162,171,172,178,182,183,189,202,204,214,215,220,224,226,227,229,230,231,232,234,241,246,247,250,257,258,268,271,272,273,274,275,276,277,278,279,282,283,285,287,291,292,314,316],enumer:[135,256,278],env:[246,247,291,292],environ:[21,36,38,141,171,172,173,182,183,219,226,227,228,246,247,248,267,273,291,292],environment:[13,54,70,225,246,247],eoi:[153,157,179,182,187,220,224,316],epoch:4,epow:[54,70,217,231,233],epub_prc_fw_verification_err:[171,174],epub_prc_hb_cod:[171,174],eqd:[220,316],equal:[2,4,75,76,89,103,132,171,172,173,229,230,257,278,282,283,299,316],equalis:[171,172,226,228,238],equival:[44,76,140,220,246,247,316],era:219,eras:[9,52,146,154,171,172,176,182,183,205,206,219,224,226,227,229,230,231,232,258,279,282,283,287,291,292],erase_rang:[231,232],eraseblock:[275,277],erat:[182,183],erc:[171,172],erect:[287,291,292],eric:[279,282,283],err:[1,134,171,172,182,224,251,273,275,276],err_fat:101,err_injct_inbounda:150,err_len:35,errata:[201,226,227,246,247,266,270,272,273,274,275,276],errcod:[104,135,226,227],errinjct:[184,185],errl:35,erro:35,erron:[43,153,171,172,182,202,204,220,231,232,246,256,258,279,282,283],error:[2,17,36,38,41,42,44,50,52,55,60,61,70,76,77,78,82,83,84,92,94,101,102,109,110,117,119,123,125,127,128,131,132,144,146,147,148,149,150,153,154,156,157,158,159,160,161,162,163,164,166,169,170,171,172,173,174,178,181,182,183,184,187,189,190,193,195,196,198,199,201,202,203,204,207,208,212,213,215,216,217,220,221,222,224,225,226,227,228,229,230,231,232,233,234,236,238,239,242,245,246,247,248,249,250,251,252,254,255,256,257,258,261,266,267,268,269,271,272,273,274,275,276,277,278,279,281,282,283,284,285,287,288,291,292,295,296,301,305,306,307,309,311,312,316],errorclass:84,errordata:84,errorlog:[35,263,288,291,292,297],esb:[171,172,179,182,220,226,227,241,316],escal:[150,171,172,174,220,231,236,237,241,246,248,256,275,276,306,316],escalate_irq:316,ese:35,esel:[35,147,149,184,191,193,226,246,247,249,263,297],esl:[231,232,307,309],esoter:[182,183],especi:[0,139,171,172,181,182,184,185,202,203,204,207,226,228,267,269],ess:[246,247,256,259,278,280],essenti:[100,132,133,171,173,282,283],establish:[158,189,193,258,273,274,279,282,283],estim:[202,203],etc:[2,14,17,19,22,68,162,171,172,173,182,183,215,226,227,229,231,232,246,247,258,279,281,282,283,311,313,316],ethernet:[34,147,148,164],etu:[84,182,275,276,282,283,287,289,291,292],etyp:[256,278],ev_act:[291,292],ev_compact_hash:[291,292],ev_platform_config_flag:[291,292],ev_post_cod:[291,292],ev_s_crtm_cont:[291,292],ev_separ:[171,172],evalu:[250,275,276],even:[2,5,22,50,54,61,122,131,134,139,141,150,159,161,162,171,172,178,182,183,184,185,193,196,197,202,203,204,213,220,226,227,229,231,232,246,247,261,273,274,275,276,281,282,283,285,291,292,298,316],event:[1,4,32,35,37,38,50,51,58,59,70,104,108,117,125,130,146,147,149,150,157,159,161,165,171,172,182,183,184,186,187,191,193,201,202,203,204,208,217,220,226,227,231,232,233,236,239,243,246,247,250,251,258,261,263,275,276,279,281,282,283,285,291,292,297,314],event_mask:[171,172],event_sever:35,event_subtyp:35,event_typ:[291,292],eventu:[130,146,147,149,162,171,172,182,183,202,203,215,226,227,238,246,247,248,252,261,275,276,281,282,283],ever:[5,42,50,81,83,131,160,171,172,193,202,204,220,226,259,280,282,283,291,292,304],everi:[0,22,35,58,74,133,139,162,171,174,193,203,204,205,215,224,226,227,229,230,231,232,246,247,266,269,273,274,275,276,287,291,292,306,316],everybodi:[133,141],everyon:[138,148,171,172,202,204],everyth:[0,147,149,162,163,171,172,182,183,215,216,224,226,227,231,232,246,247,261,275,276,282,283,285],everywher:[133,220,273,274],evict:[171,172],evid:160,evmrev:35,evolut:221,evolv:139,ex_pm_core_eco_vret:[184,185],ex_pm_core_pfet_vret:[184,185],exabyt:103,exact:[2,22,43,58,160,171,172,182,183,184,186,207,220,226,227,259,275,276,280],exactli:[2,56,100,171,172,182,183,239,246,247,282,285],examin:[171,229],exampl:[1,9,13,14,15,16,18,19,22,26,30,34,35,37,39,43,44,51,59,70,78,88,101,106,109,113,119,120,126,131,132,137,139,140,141,147,149,150,162,171,172,173,182,183,193,203,214,220,225,226,227,231,232,241,246,247,248,252,255,273,274,275,276,282,283,284,311,313,316],exce:[70,103,224,275,276],exceed:[171,172,275],excel:219,except:[4,34,58,70,76,113,122,135,146,154,162,171,172,173,174,178,182,183,195,202,203,214,217,220,221,224,231,232,233,246,248,257,258,269,272,275,276,278,279,282,283,285,291,292,311,316],exception_entri:[182,183,224,272,275,276],excess:[266,273,274,311],exchang:[182,183],exclud:[17,160,171,172,226,227,231],exclus:[44,102,133,211,253,282,285,311],execut:[0,13,37,41,43,61,113,124,131,132,133,147,148,162,171,172,182,183,215,226,227,231,232,241,246,247,261,273,274,275,276,279,281,282,283,314,316],exercis:[132,165,171,172,231,232],exhibit:260,exist:[2,4,17,20,21,22,23,40,41,42,62,63,64,65,66,81,86,106,108,131,132,134,135,137,146,147,148,171,172,182,183,184,185,193,202,203,204,206,219,220,222,224,226,227,228,238,241,246,247,248,272,273,274,275,276,282,283,291,292,298,314,316],exit:[13,48,146,171,172,178,181,182,183,208,229,231,232,245,246,247,257,258,261,275,277,278,279,281,282,283,291,292,311],exp:275,expand:[132,171,172,226,227,246,247,312],expans:288,expect:[0,13,17,41,71,135,138,141,161,171,172,173,174,180,181,182,183,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,239,243,246,247,248,250,259,273,275,276,280,283,284,285,292,304,307,308,309,311,313,316],experi:[162,171,172,215,239,246,247],experienc:[246,247,261,281,282,285],experiment:[13,171,172,202,203,246,248,275,276,291,292],expert:139,expir:[171,173,207,220],explain:[140,141,217,224,231,233,258,279,282,283,287,291,292],explan:[1,51],explicit:[21,22,155,184,185,220,282,285,316],explicitli:[132,162,171,172,173,193,202,215,229,230,231,232,246,247,255,275,276,282,283,285,291,292],explict:153,explictli:[246,247],exploit:[38,140,171,172,220,222,237,282,283],expos:[2,13,31,41,77,118,133,144,147,148,165,171,172,175,202,203,206,220,221,224,229,267,268,273,274,282,285,291,292,311,316],exposur:[221,316],express:[2,17,189,213,220,282,285],extend:[2,21,34,35,73,103,130,171,193,202,203,219,221,226,231,282,283,291,292,314,316],extens:[22,144,171,175,220,221,226,282,285,291,292,311,316],extern:[2,35,62,132,133,135,144,146,147,149,161,171,172,193,202,203,204,219,220,224,229,230,231,232,246,247,273,274,282,283,285,291,292],extra:[19,58,102,115,133,134,141,151,171,172,258,269,275,276,277,279,282,283,284,287,291,292,307,309],extra_vers:141,extract:[38,135,150,182,183,184,202,204,229,230,231,232,268,273,274],extrem:[162,163,215,216,217,226,227,231,233,241,246,248,261,281,282,285],eye:[250,275,276],eyebal:[184,185],eyecatch:1,f000f:[226,227],f28:275,f42fc40:141,f46c1e506d199332b0f9741278c8ec35b3e39135:189,f58be46:[275,277],f7b8f65:4,f821ffc1:[162,215,226,227],f8dfd699f584:[291,292],f9210020:[162,215,226,227],f_part:[202,204],facal:[226,227],face:[171,172,258,279,282,283],facil:[11,21,58,70,100,114,132,137,171,172,220,226,227,231,232,246,247,257,261,270,272,275,276,278,281,282,283,285,316],fact:[139,207,220,246,247,255,275,276,316],factor:[110,171,172,174,246,250,275,276,282,283,287,291,292],fadump:[7,38,71],fail:[0,17,35,50,51,58,68,73,113,116,120,128,130,132,141,144,146,147,149,165,166,171,172,173,174,178,180,181,182,183,189,193,198,202,203,204,205,208,220,221,224,226,227,228,229,230,231,232,233,234,236,246,247,248,251,252,254,258,261,267,272,273,274,275,276,277,279,281,282,283,287,291,292,305,306,311,312,314,316],failov:[58,147,148],failur:[15,17,35,39,40,41,51,53,54,58,68,70,120,122,123,127,129,131,145,159,161,169,171,172,173,174,180,181,182,183,189,193,196,202,203,208,217,220,224,225,226,227,228,229,231,232,233,239,242,246,247,251,256,257,261,267,268,273,274,275,276,277,281,282,283,291,292,311,316],fair:[182,183],fairli:[76,140,226,227,275,276,282,284,291,292],fake:[147,148,182,183,184,185,220,226,227,291,292],fall:[44,120,171,172,202,203,226,246,247,255,275,282,283],fallback:[202,203,241,279,282,283,305],fallthrough:[220,224,226,228],fals:[35,162,184,185,195,202,203,207,215,220,231,233,261,275,276,299],fam:19,famili:[19,220,258,279,282,283],familiar:[4,140,141],famou:[171,172,281,282,283],fan:[19,282,285],fanci:[133,224],fapi:[171,172],far:[171,172,182,183,216,226,227,246,247,282,283,285,291,292],fast:[13,44,48,102,113,173,174,178,202,203,205,226,228,231,232,246,247,250,257,261,268,273,274,278,280,281,282,283,285,286,287,289,291,292,294,296,298,305,313],fast_reboot_entri:[171,174,261,281,282,283],fast_reset_entri:[171,174,261,281,282,283],faster:[202,203,221,246,248],fastreboothoststress:282,fastreboothoststresstortur:282,fastsleep_:[13,48],fatal:[19,58,131,157,159,162,171,172,173,182,183,187,196,202,203,214,225,231,232,246,248,261,272,275,276,281,282,283],fatalerr:164,fault:[10,17,34,35,58,68,150,226,228,291,292,315],favor:220,favour:[13,202,204],fd599965f723330da5ec55519c20cdb6aa2b3a2d:191,fd6b71fc:[208,231],fd6b71fcc6912611ce81f455b4805f0531699d5:191,fdt:[2,53,132,182,183,220,226,227,246,248,261,275,276,281,282,283,291,292],fdt_begin_nod:[226,227],fdt_offset_ptr:[291,292],fdt_open_into:[291,292],fdt_prop:[226,227],fdt_strerror:[291,292],fdtdump:[226,227],fe6d86b9:[182,183],feasibl:261,featur:[2,5,25,38,40,50,139,175,177,180,218,221,237,244,257,261,269,273,275,276,278,281,285,286,308,316],feb:[139,185,275,276],februari:[171,172,173,174,175,182,183,256,257,278],fedora25:220,fedora26:[226,228],fedora27:275,fedora29:275,fedora:[220,224,257,275,276,277],feed:[182,183],feedback:311,feel:[202,203,204,205,291,292,298],fell:[275,277],fenc:[78,147,148,150,159,161,171,172,174,180,182,183,196,202,204,220,224,226,228,229,230,231,236,238,246,247,264,268,273,274,282,283,284,287,291,292,296],fence_st:[291,292],fetch:[35,37,50,51,62,76,83,110,133,135,226,228,314],few:[0,1,2,29,70,134,137,141,153,157,158,159,160,162,171,172,178,182,183,193,195,196,201,202,203,204,205,206,207,208,217,219,220,224,226,227,228,229,230,231,232,238,241,242,251,257,258,261,273,274,275,276,277,279,281,282,283,286,288,291,292,311,313],fewer:[68,70,203],fffffffffffffff4:[162,215,226,227],fffffffffffffff8:[182,183],ffffffffffffffff:[246,247,254,275,277],ffi:161,ffix:[160,212,220],ffs:[193,202,203,226,227,246,247,261,281,282,283],ffs_close:[226,227,246,247],ffs_entry_user_to_str:[246,247],ffs_handl:[226,227],ffs_hdr_free:[246,247],ffs_header:[246,247],ffs_init:[251,275,276],ffs_lookup_part:[226,227],ffspart:[220,273,274,275,277],field:[0,24,29,33,34,35,41,162,171,172,174,175,189,202,204,215,219,220,224,226,227,231,232,246,247,258,261,266,273,274,279,281,282,283,285,286,287,291,292,311,316],fifo:[28,129,220,229,230,268,273,274],fifth:236,figur:[68,135,246,275,276],file:[13,24,36,131,133,136,138,139,141,146,171,172,178,182,183,184,185,193,202,203,204,205,217,220,222,224,225,226,227,229,230,231,232,246,247,273,274,275,276,282,285,288,291,292,298],file_eras:275,filenam:[226,227,273,274,275],filesystem:[226,227],fill:[35,54,92,95,108,171,172,226,227,231,232,268,273,282,283],filter:[21,132,171,172,189,220,226,227,246,247,258,275,276,279,282,283,287,291,292],fimwar:314,finalise_dt:291,find:[27,36,50,114,147,149,152,160,171,172,174,220,225,226,227,246,248,250,273,274,275,276,282,283,291,292,314],find_next_bit:37,fine:[2,22,35,138,162,171,172,175,208,209,215,217,220,226,227,231,233,246,247,272,275,276,282,283,286,291,292,316],finess:144,fini_arrai:[291,292],finish:[224,229,275,276],finit:[158,190,191,193],fip:[224,275,276],fir:[44,58,158,171,172,178,180,182,183,190,191,193,195,220,226,228,229,230,231,232,241,246,247,249,251,256,268,272,273,274,275,276,282,283,287,291,292],fircheck:[231,232],fire:[202,203],firenc:201,firenz:[38,136,184,186,201,202,203,216,224,226,227,277,282,283],firenze_add_pcidev_to_fsp_inventori:[147,148],firenze_get_slot_info:[147,148],fireston:[136,145,146,147,148,164,202,203,258,279,282,283],firmli:189,firmwar:[0,2,3,5,6,7,21,22,23,25,32,35,38,39,40,41,42,44,50,54,58,68,69,71,77,81,109,113,123,124,130,132,133,135,138,139,140,141,146,161,162,168,171,172,173,174,175,177,178,182,183,184,186,189,195,202,203,204,206,214,218,221,222,224,226,227,231,232,244,246,247,248,250,257,258,261,266,273,274,275,276,278,279,282,283,287,291,292,316],firmware_notifi:[226,227],firmware_request:[171,172,226,227],first:[2,21,22,35,36,42,44,47,51,56,61,69,70,71,81,88,117,118,124,127,133,136,139,141,143,146,147,148,149,150,161,167,168,171,172,173,174,175,181,182,183,184,185,186,187,188,189,190,192,193,195,196,197,198,199,200,201,202,203,204,205,206,208,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,241,246,247,248,254,255,259,267,268,269,271,272,273,274,275,276,277,280,282,283,284,285,286,287,291,292,293,298,304,308,310,312,313,314,316,317],first_frozen_p:92,firstli:[171,226,227,246,248],firwar:314,fischer:[219,220],fit:[2,17,171,172,176,182,183,231,232,242,291,292,316],five:[51,231],fix:[2,37,130,134,139,140,144,145,146,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,173,174,175,176,178,179,180,181,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,219,220,221,222,223,224,225,226,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,245,248,249,250,251,252,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,292,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309],fixm:[131,220],fixup:[140,220,226,227,228,282,283],fl_total_s:[202,203],flag:[0,30,35,41,47,58,60,107,115,130,147,149,171,172,179,182,183,193,195,201,202,203,204,205,218,220,224,226,227,228,229,231,232,234,237,244,246,247,248,250,252,256,271,273,274,275,276,282,283,286,287,291,292,312,313,316],flakei:[246,247],flash:[1,5,35,36,38,42,76,130,133,146,147,148,171,172,173,182,183,184,185,193,194,203,204,205,219,220,229,230,231,232,246,247,251,252,254,258,261,273,274,275,276,277,279,281,282,283,284,285,286,291,292,294,298,311,312,314],flash_dt_add_fw_vers:[275,276],flash_init:[281,282,283],flash_load_resourc:[202,204,261,281,282,283],flash_map_resource_nam:[171,172],flash_nvram_writ:[261,281,282,283],flat:2,flatten:[132,133,193,226],flawless:[282,283],fleetwood:304,flexibl:[2,84,171,172,173,182,183,229,230,246,247,291,292],flight:[117,120,171,172,282,285],flip:313,flood:[139,171,172,246,247],flow:[47,182,231,236,258,279,282,283,311],flr:[224,231,232],fluke:[231,232],flush:[49,151,153,154,171,172,174,180,184,185,241,246,247,258,261,273,279,281,282,283,284],fly:[35,171,172,238],fmt:35,fno:[282,285],focu:[132,185,186],focus:308,folk:[171,172,178,182,183,226,227,238,261,281,282,285],follow:[1,2,4,15,16,17,19,23,24,30,31,35,43,53,56,88,89,90,93,97,98,100,102,103,105,117,132,133,135,138,139,140,141,143,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,179,180,181,182,183,184,185,186,187,188,189,190,191,193,194,195,196,197,198,199,200,201,202,203,204,205,206,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,241,245,246,247,248,258,261,272,273,274,275,276,277,279,281,282,283,284,285,287,291,292,293,298,304,308,310,311,313,314,316,317],followup:[226,228],fonseca:202,foo:131,foot:205,footnot:136,for_each_compat:[279,282,283],for_each_present_cpu:220,forc:[44,70,114,153,171,172,182,193,201,202,203,204,205,220,226,228,229,230,231,236,258,266,272,273,274,275,276,279,282,283,298],foreign:[178,182,183],foresight:22,forev:[161,171,172,208,243,246,247,261,281,282,283,291,292],forget:[271,275,276],forgotten:[42,316],fork:[38,282,285],form:[2,21,34,35,118,132,134,171,172,182,202,203,231,232,241],formal:22,format:[1,2,15,16,17,28,34,35,40,51,67,70,84,88,103,117,135,139,162,171,173,175,184,185,202,203,215,220,226,227,248,257,275,276,277,282,283,288,311,312,314,316,317],former:[171,172,180,202,203,246,247],formerli:[250,275,276],formwar:[231,232],forse:171,fortun:[216,226,227],forward:[73,93,141,171,172,220,231,232,243,250,263,273,274,275,276,282,283,286,291,292],found:[1,4,9,17,21,22,23,41,52,69,85,86,104,118,131,135,138,139,147,148,161,162,164,167,171,172,175,181,182,183,184,185,202,203,213,215,219,220,221,224,226,227,229,231,246,247,251,255,273,274,275,276,281,282,283,284,311,314],foundat:138,four:[49,171,172,180,202,203,220,275,276],fourth:[175,206,235],foward:[255,275],foxconn:136,fpga:[282,283,284,298],fraction:1,fragment:[39,182,183],frame:[246,247],framebuff:155,framework:[19,147,162,182,183,215,220,226,227,229,230],francesco:171,francisco:138,frankli:[275,276],freder:[147,148,171,193,202,203,219,220,226,229,231,275,282,283],free:[2,7,35,39,50,60,61,77,127,131,147,148,164,165,171,172,181,182,183,202,203,208,220,224,226,227,231,233,246,247,258,263,267,273,274,275,277,279,290,294,300,306,316],freebsd:[45,146],freed:[171,172,182,183,226,241,246,247,316],freenod:138,freez:[101,150,171,172,174,226,228,231,232,236,238,272,275,276,306],freeze_st:81,freq:[2,5,13,282,283],freq_max_in_domain:[14,282,283],freq_most_recently_set:[14,282,283],frequenc:[2,14,30,34,70,145,147,148,171,172,173,184,185,186,189,201,202,203,224,226,227,246,248,282,283],frequent:[41,154],freset:[135,160,182,183,213,220,226,229,230,282,283,287,291,292],freset_deassert_delai:[282,283],freset_start:[282,283],fresh:[246,247],freshli:[202,204],fridai:[146,151,152,153,157,159,162,171,173,182,185,196,197,202,211,214,218,219,225,242,243,244,246,251,260,263,270,272,274,275,282,283,286,293,297,300,308,310],friendli:[171,172,220],fro:293,from:[0,2,3,5,7,12,13,22,26,28,30,36,37,38,40,42,44,47,50,51,52,54,56,58,67,68,69,70,71,73,75,76,78,81,84,87,88,89,90,93,97,98,99,100,101,103,105,106,108,111,116,117,121,122,123,124,127,129,130,131,132,133,134,135,139,140,141,144,146,147,148,149,150,151,153,157,159,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,178,182,183,184,185,187,188,189,191,192,193,195,196,197,201,202,203,204,205,206,209,213,215,216,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,236,237,238,240,241,245,246,247,248,250,251,253,254,255,256,257,258,259,260,262,267,268,271,273,274,275,276,277,278,279,280,281,282,283,284,285,287,288,291,292,295,298,304,305,310,311,312,313,314,315,316,317],front:[229,230,246,247],frozen:[171,172,275,276],frquenci:[202,203],fru:[10,34,68,144,171,172,221,268,273,282],fscr:[21,22],fsi:[0,147,148,231],fsm:[271,275,276],fsp:[1,8,12,19,20,36,38,40,42,43,50,54,68,77,108,120,127,130,132,133,136,141,144,145,146,152,155,159,160,161,162,163,164,165,168,191,195,201,204,206,207,208,209,210,213,214,215,216,217,230,233,246,247,250,255,280,285,288,291,292,300,301,302],fsp_cmd_get_led_list:168,fsp_cmd_powerdown_norm:[217,231,233],fsp_cmd_reboot:[217,231,233],fsp_cmd_tpo_dis:[226,227],fsp_cmd_tpo_writ:[226,227],fsp_console_read:193,fsp_console_writ:[217,231,233],fsp_console_write_buffer_spac:[217,231,233],fsp_in_reset:[162,215],fsp_in_rr:[162,163,215,216,226,227],fsp_lid_map:[182,183],fsp_log_entri:35,fsp_mkmsg:[226,227],fsp_msg:[144,193,226,227],fsp_msg_queu:[226,227],fsp_msg_sent:[226,227],fsp_msg_timeout:[162,215,226,227],fsp_opal_get_param:77,fsp_opal_manage_flash:47,fsp_opal_rtc_writ:[162,215],fsp_opal_set_param:77,fsp_opal_tpo_writ:[114,226,227],fsp_opal_update_flash:47,fsp_opal_validate_flash:47,fsp_queue_msg:144,fsp_reset_cmdclass:[163,216,226,227],fsp_serbuf_hdr:[226,227],fsp_status_invalid_subcmd:[217,231,232],fsp_sync_msg:[163,216,217,226,227,231,233],fsp_trigger_reset:[162,214,215,224,226,227],fspresetreload:[162,215,226,227],fspv1:224,fstack:[144,184,185,202,203],ftbf:[171,173],full:[1,44,49,56,88,89,90,93,97,98,103,105,115,134,139,162,171,172,178,182,183,184,185,193,202,203,215,217,219,220,226,227,228,231,232,233,236,268,273,298,316],full_purg:275,full_reboot:305,fulli:[154,195,202,203,220,282,316],fun:[160,165,291,292],func:[82,100,134],func_compar:100,fundament:[22,135,160,168,178,182,183,201,202,203,220,273,274,282,283],funni:291,further:[17,23,50,73,96,104,135,161,171,182,183,229,230,231,236,246,247,248,273,282,283,316],furthermor:[118,273,274,312],fuse:299,futur:[1,5,15,16,22,29,35,38,50,51,54,55,70,84,110,115,131,132,139,141,146,177,182,183,185,186,220,221,226,227,228,229,230,231,234,246,247,273,274,275,276,282,283,284,291,292,304,308,311,315,316],fuzz:[257,282,283],fw810:[42,141],fw830:39,fw840:8,fw_control_err:144,fw_progress:220,fwrite:36,fwt:[130,171,175,180,195,202,203,220,246,247],g123456789abc:4,g16b7ae641037:136,g23118ce:[231,232],g23f147e:141,g319c6e1:[231,233],g78d89280c3f9:4,ga2:4,gain:[171,172],gajendra:[184,185],gang:[275,276],gap:[182,183,220,231,232],garante:316,garbag:[275,276],garbal:226,garbl:261,gard:[146,147,148,161,182,183,184,185,193,205,219,220,226,231,232,246,247,272,275,276,287,291,292,294],garrison:[136,147,148,164,195,197,258,279,282,283],gate:[171,172],gather:[37,40,47,50,134,231,232,275,276],gaurente:61,gautham:229,gave:[147,148,161,164,184,185,193,202,203,204],gavin:[147,148,164,184,185,193,202,203,204,219,220,224,226],gb759ce2:39,gbp:27,gcb111c03ad7f:[171,172],gcc7:[171,173,182,183,224,226,228],gcc8:[250,273,274,275,276],gcc9:[278,288,291,292],gcc:[36,138,145,150,160,171,172,182,183,189,193,205,212,220,229,231,233,275,276,281,291,292],gcda:36,gcid:[275,317],gcov:[38,39,147,148,150,182,183,184,202,204,226,229,275,276,291,292],gcov_count:193,gcov_info:[182,183],gcov_info_list:36,gdb:[40,291,292],gear:193,gedd:[171,275],gen1:[134,220,229,230,282,283,287,291,292],gen2:[136,171,221],gen3:[134,171,172,220,229,230,231,232,235,236,275,276,287,291,292,305],gen4:[134,171,172,229,230,231,235,236,238,287,291,292],gen:[213,220],gener:[7,14,17,21,22,24,27,28,29,35,36,38,39,51,58,71,84,88,120,121,130,133,135,140,141,144,146,159,160,162,168,175,182,183,185,191,195,215,217,220,221,228,233,246,247,250,251,253,256,261,266,268,292,311,312],genid:35,geometri:316,get:[1,10,15,19,20,24,26,35,36,38,39,42,43,47,53,54,55,58,59,71,81,84,85,86,124,131,133,134,139,140,146,147,148,150,153,160,161,162,163,164,165,171,172,173,178,180,182,183,189,195,202,203,207,209,211,215,216,217,220,224,226,227,228,229,230,231,232,233,240,242,245,246,247,248,250,251,255,257,258,260,261,268,272,273,274,275,276,277,278,279,281,282,283,286,287,291,292,298,316],get_attention_st:135,get_interface_cap:[201,202,203],get_irq_config:316,get_latch_st:135,get_link_st:[135,273,274],get_pkcs7:[307,309],get_power_st:135,get_presence_st:135,get_vp_info:220,get_xiv:[220,316],getmemproc:[36,220],getscom:[202,203,220,229,230,273,274],getsigraw:225,getspi:275,getsram:[193,202,203,275,276],gf1b53c7:[231,232],gging:35,ghosh:[219,220],giant:[231,232],gigabit:164,gigant:[282,283],girq:316,git:[8,132,139,140,141,143,171,172,291,292],gitdm:[184,185],github:[36,132,138,140,171,172,176,205,219,220,221,222,224,225,226,227,228,231,232,256,275,278,282,284,291,292],give:[13,14,19,22,35,113,130,134,140,146,151,153,154,171,172,175,182,183,217,220,226,228,231,233,246,247,248,251,267,273,274,275,276,282,283,291,292,311],given:[2,22,56,61,68,73,74,75,84,102,123,132,135,162,171,172,173,174,202,203,214,221,226,231,232,250,272,273,274,275,276,291,292,311,316],glibc:22,glitch:[171,172,237,239,240],global:[57,121,202,203,220,221,246,247,273,275,276,282,283,284,298,313,316],glori:95,glue_cache_lin:42,gmail:148,gn70:136,gnuc:150,goal:[68,139,171,172,173,273,274],goater:[147,148,171,184,185,193,202,203,219,220,229,275],goe:[1,35,100,171,172,220,231,275,282,283,284],going:[12,44,70,138,139,141,171,172,182,183,193,220,221,229,230,231,232,246,247,273,274,282,283,284,291,292],golden:[193,205],gone:[131,139,162,204,214,220,224],good:[0,2,22,51,128,139,141,160,171,172,180,182,183,203,204,205,219,220,223,226,227,228,246,247,248,257,258,261,267,273,274,279,281,282,283,285,291,292,314,316],goog:2,googl:[136,171,231],got:[38,67,68,162,171,172,182,208,214,215,220,224,226,227,231,245,259,273,274,280],governor:13,gpe1_24x7:[231,232],gpe:[231,232],gpio:[226,227,246,247,291,292],gplv2:298,gpr00:[162,171,173,182,183,215,226,227,246,247],gpr01:[171,173,182,183],gpr02:[182,183],gpr03:[182,183],gpr04:[162,182,183,215,226,227,246,247],gpr05:[182,183],gpr06:[182,183],gpr07:[182,183],gpr08:[162,182,183,215,226,227,246,247],gpr09:[182,183],gpr10:[182,183],gpr11:[182,183],gpr12:[162,182,183,215,226,227,246,247],gpr13:[182,183],gpr14:[182,183],gpr15:[182,183],gpr16:[171,173,182,183],gpr17:[171,173,182,183],gpr18:[182,183],gpr19:[182,183],gpr20:[182,183],gpr21:[182,183],gpr22:[182,183],gpr23:[182,183],gpr24:[182,183],gpr25:[182,183],gpr26:[182,183],gpr27:[182,183],gpr28:[182,183],gpr29:[182,183],gpr30:[182,183],gpr31:[182,183],gpr:[220,224,231,232,246,247,282,283],gpu1:[246,247],gpu2:[246,247],gpu3:[246,247],gpu4:[246,247],gpu5:[246,247],gpu:[16,41,73,102,109,171,172,174,178,180,182,183,195,202,203,220,221,226,227,228,229,230,231,232,238,246,247,268,269,273,274,275,276,282,283,285,287,291,292,299],gpu_mem:[171,172],gpu_mem_4t_down:[171,172],grab:[220,226,228,229,230],grace:[0,70,146],gracefulli:[43,55,78,120,131,132,146,171,172,226,227,241,257,278,282,283],grain:[22,171,175],grand:[184,185],granul:[2,229,230],granular:[22,181,208,267,273,274],graphic:[2,279,282,283],great:[171,182,183,193],greater:[4,55,133,201,202,203],greatli:[147,148,258,275,279,282,283],gregori:[171,275],grep:[5,36,162,171,172,214,224],grid:[171,172],grimm:275,gross:[282,283],ground:311,groundwork:146,group:[5,14,22,29,38,41,42,51,171,172,175,226,227,229,230,231,233,246,247,269,275,276,282,283,316],group_hndl:119,guarante:[13,15,62,121,171,172,241,258,261,279,282,283,285,289,316],guard:[112,146,161,171,172,182,231,232,287,291,292],guess:[171,172,275,276,287,291,292,304],guest:[22,93,231,232,233,260,273,274,275,276,282,283,285,287,291,292,316],guid:[22,41,171,172,231,232,237],guidelin:[21,138],guidinglight:10,guilherm:[171,219,220,231],gunk:[162,214],gupta:[147,148,161,164,184,185,275],gzip:[28,129,229,230],h2b:[258,279],h_cppr:64,h_eoi:62,h_ipi:65,h_m_s_m:117,habanero:[4,136,145,161,184,185,202,203,220,279,282,283],hack:[171,172,182,183,224,229,230,231,236,246,247,250,261,281,282,285,286,287,291,292],hacker:[147,148,161,164,171,231],had:[42,76,132,147,152,171,172,184,185,200,202,204,217,226,228,229,230,231,232,233,246,247,258,259,275,276,279,280,282,283,291,292,316],hal:134,hal_success:134,half:[78,115,182,226,227,268,273,282,284,291,292,313],halfwai:122,halloran:[171,184,185,187,193,202,203,219,220,224,226,229,231,275],halt:[125,311,313,314],hammer:[202,203,261],hand:[2,135,226,231,232,273,291,292,311,313,316],handi:[171,172,291,292],handl:[2,15,16,21,37,38,41,42,43,59,68,70,75,78,82,109,110,117,119,120,131,133,134,144,146,147,148,149,151,157,160,161,169,171,172,173,182,183,184,187,193,202,203,204,207,209,212,217,219,220,224,226,227,228,229,230,231,232,233,245,248,251,255,258,261,272,273,274,275,276,279,281,282,283,285,286,287,288,291,292,301,311,315,316],handle_error:131,handle_hmi_except:[246,248],handler:[19,42,58,120,122,162,171,172,173,214,220,226,228,229,231,246,247,258,268,273,274,275,276,279,282,283,287,291,292,316],handler_address:42,handshak:[229,246,247],hang:[58,146,147,148,159,161,162,164,171,173,182,183,184,186,191,215,226,227,246,247,248,255,261,268,273,275,276,279,281,282,283,291,292],hank:[219,220],happen:[2,44,47,70,131,134,148,162,163,168,171,172,173,182,183,198,202,203,215,216,217,226,227,228,231,232,233,246,247,248,251,261,266,271,272,273,274,275,276,281,282,283,285,287,291,292,314,316],hard:[15,51,55,139,171,172,181,189,202,203,208,211,226,227,231,232,239,240,246,248,258,266,267,273,274,275,276,279,282,283,287,291],hardcod:[146,213,220,224,226,227,282,285],harden:[144,182,183,220,226,227],harder:282,hardlock:[258,279,282,283],hardlockup:[182,183,258,279,282,283],hardwar:[15,21,22,23,27,28,29,36,37,40,41,53,61,68,76,77,78,79,80,81,83,87,91,93,95,99,103,107,109,110,119,122,131,132,135,136,139,157,165,171,172,173,174,178,179,180,182,183,187,188,193,202,203,204,220,221,224,226,227,228,231,232,239,242,246,247,248,270,273,274,275,276,282,284,285,293,311,314,316],hardwir:146,haren:229,hari:[147,148,229],harmless:[146,147,148,171,172,182,183,202,203,224,241,246,247],has:[0,2,3,7,14,15,16,17,18,19,21,22,28,33,35,37,41,42,51,52,58,62,69,70,71,76,81,84,93,108,112,113,114,117,122,130,131,133,134,135,139,140,141,148,151,154,155,162,167,171,172,173,176,177,178,179,180,182,183,189,193,201,202,203,204,205,214,215,217,220,221,223,224,226,227,228,229,230,231,232,233,234,241,245,246,247,250,251,254,257,258,261,267,268,273,274,275,276,277,278,279,281,282,283,285,286,287,289,291,292,298,304,307,308,309,311,313,314,316,317],has_deep_st:[171,172],has_slw:[231,232],has_wakeup_engin:[231,232],hash:[22,23,72,73,115,143,171,172,173,226,227,291,292,313,314],hash_prop:[246,247],hasn:[226,228,229,246,247,273,274,275,276,298,316],hat:140,have:[0,2,4,5,12,13,14,17,19,20,21,22,24,28,29,32,34,35,36,37,42,43,49,50,51,52,55,61,68,70,71,75,76,77,79,81,96,100,114,122,126,127,130,131,132,133,134,135,138,139,144,146,148,149,150,151,153,154,155,157,160,161,162,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,193,194,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,257,258,259,261,266,267,268,269,272,273,274,275,276,277,279,280,281,282,283,284,285,287,291,292,308,311,312,313,314,316],haven:[138,146,202,204,246,247,273,274,275,276,282,283,287,291,292],havoc:[182,183],hba:[275,276],hbrt:[70,111,128,144,161,171,172,201,226,227,231,232,255,273,274,275,276],hcode:[171,172,246,247,248],hdat:[2,34,40,133,171,172,177,182,183,194,201,202,203,218,219,220,221,222,224,226,227,228,229,230,231,232,233,238,244,246,247,250,257,259,273,274,275,276,280,282,283,291],hdat_i2c_info:[250,275,276],hdat_to_dt:[246,247,257,275,277],hdata:[133,171,172,174,175,180,220,221,222,224,226,227,228,229,230,231,233,246,247,250,257,273,274,275,276,277,282,283,288,296,299,301],hdata_to_dt:[220,224,226,227,229,230],hdatiplparm:[182,183],hdd:[275,276],hdec:[58,146,231,236,246,247,272,275,276],hdif_child:220,hdif_get_iarray_s:220,hdt:103,head:[58,133,141,162,171,172,184,185,214,231,246,247,261,281,282,283,285,302],header:[2,35,47,133,146,153,171,172,173,174,182,183,202,203,204,219,226,227,231,232,245,246,247,250,253,261,275,276,281,282,283,285,291,292,307,309,312,313,314],heap:[2,38,131,133,147,148,165,182,183,220,275,276,291,292],heap_bas:133,heap_pop:[291,292],heap_push:[291,292],heap_replac:[291,292],heap_siz:133,hear:[171,172],heartbeat:[162,164,193,215,226,227,231,232,246,247,288],heavi:[162,215,217,226,227,231,233,246,247],heavili:[109,135,231,232,275,276],heavyweight:[275,276],hegd:[147,148,161,171,184,185,193,202,203,204,219,220,224,226,229,231,275],hei:224,heighten:311,held:[113,146,161,171,172,184,185,193,208,231,232,243,254,261,273,274,275,276,277,286,291,292],heller:[219,224],hello:[220,246,247],hello_world:[145,147,148,171,172,193,220],help:[2,5,19,35,49,58,68,133,134,138,139,147,148,169,170,171,172,173,198,202,203,219,220,226,228,229,230,231,233,246,247,257,259,267,268,273,275,276,280,282,283,291,292],helper:[133,171,172,178,182,183,202,203,220,224,226,227,241,246,247,273,275,276],hemant:226,henc:[68,102,162,171,172,174,181,182,183,208,215,217,221,226,229,230,231,232,233,236,246,247,258,261,267,271,272,273,274,275,276,279,281,282,283,284,291,292],here:[2,18,22,29,37,51,73,131,132,133,139,141,162,171,172,178,182,183,184,185,202,215,221,226,227,229,230,231,232,238,246,248,257,258,259,266,273,274,275,276,277,279,280,282,283,287,288,291,292,316],herrenschmidt:[147,148,161,164,171,184,185,193,202,203,219,220,224,226,229,231,275],heterogen:22,heurist:[202,203,282,285],hex:[35,195,202,203,275,276],hexa:35,hexadecim:[2,4],hexdump:220,hexidecim:[275,276],hfscr:[21,22],hid0:[282,285],hid:[115,171,174,220,226,227,257,278,282,283,285],hidden:[171,172,316],hiearchi:88,hierarch:[182,183],hierarchi:[17,25,34,38,88,101,171,172,312,313],high:[28,41,68,70,100,118,129,139,157,171,172,187,217,224,229,230,231,232,233,272,275,276,282,283,313],higher:[52,101,132,202,203,226,228,246,247,248,312,316],highest:[13,121,226,227,229,230,246,247],highli:141,hijack:[171,172,231,232,246,247],hilari:[171,174],hile:[124,130,161,182,183,226,228,257,278,282,283],hint:[24,171,172,311],hiomap:[250,251,252,254,261,275,276,281,284,286,291,292],hiomap_c_clos:[258,279,282,283],hiomap_e_daemon_readi:[258,279,282,283],hiomap_e_flash_lost:[258,279,282,283],hiomap_queue_msg_sync:[261,281,282,283],hiomap_window_mov:[258,261,279,281,282,283],hir:[144,162,171,172,215,224,226,227],histor:[2,76,133,220],histori:[38,132],hit:[50,131,146,147,148,160,165,171,172,174,178,182,183,201,202,203,207,220,226,228,229,230,231,232,236,246,247,248,257,275,276,278,282,283,284,287,291,292],hmc:[20,47],hmeer:[58,220],hmer:[58,70,157,171,172,182,183,187,198,202,203,242,246,247,248,261,272,275,276,281,282,283,285],hmi:[38,42,70,146,154,157,159,169,170,173,176,178,180,182,183,187,195,196,202,203,204,220,226,227,228,231,232,234,236,248,249,261,268,272,273,274,275,276,281,282,283,284,285,287,291,292],hmi_debug_trigg:[246,248],hmi_event_handl:[261,281,282,283],hmi_tfmr_error:182,hnadl:224,hold:[1,35,58,113,122,162,171,172,181,182,183,207,208,214,220,221,225,245,246,247,256,266,273,274,275,276,278,282,283,291,292],holder:[226,227],hole:[171,172,182,183],homer:[2,14,171,173,182,183,220,221,224,229,230,231,232],hood:[231,232],hook:[35,135,146,161,181,208,220,226,227,261,267,273,274,281,282,283,311,313],hookup:[181,208,267,273,274],hope:[44,171,186,206,220,286,291,292],hopefulli:[146,206],horribl:124,host:[0,2,12,23,30,35,40,42,44,46,47,50,51,55,56,57,58,59,62,63,64,65,67,68,70,77,87,88,89,90,93,97,98,99,100,101,103,105,106,113,114,115,118,121,124,128,131,132,134,136,138,147,148,150,153,157,162,164,165,166,171,172,173,175,182,183,187,189,193,201,202,203,204,208,213,214,215,217,220,224,226,227,229,230,231,232,233,245,246,247,250,251,255,258,261,273,274,275,276,279,281,282,283,285,286,287,288,291,292,304],host_interfac:193,host_load_payload:[171,174],hostboot:[4,40,132,133,154,161,171,172,173,174,177,182,183,184,185,204,220,221,222,224,226,227,229,230,231,232,234,235,238,241,243,245,246,247,250,259,273,274,275,276,280,282,283,285,291,292,314],hostcc:225,hostinterfac:[171,172],hostservic:146,hot:[86,104,135,171,172,175,201,202,203,220,221,226,227,229,230,273,274],hotplug:[27,35,38,53,104,193,202,203,213,220,221,229,230,246,247,282,283,298],hour:[117,231,232,261,281,282,285],hour_minute_second_millisecond:117,how:[2,4,5,16,17,22,37,38,49,50,69,71,76,94,96,114,127,132,139,140,166,171,172,173,174,175,178,182,183,184,185,193,202,203,204,205,206,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,246,247,248,258,259,273,274,275,276,277,279,280,282,283,284,285,287,291,292,311],howev:[5,14,77,88,121,135,150,171,172,175,182,183,188,189,193,202,203,204,220,221,226,227,229,231,232,238,241,246,247,250,254,255,259,267,271,273,274,275,276,277,280,282,283,287,288,289,291,292,304,308,311,312,313,316],howto:38,hpc:[136,267],hpt:93,hr_min:[114,226,227],hreset:[135,213,220,229,230,275],hrfid:[282,285],hrmor:[202,203,231,232,246,248],hservic:[255,275],hservice_memory_error:[181,208,267,273,274],hsprg0:[246,247],hsprg1:[246,247],hsrr0:[162,171,173,182,183,214,224],hsrr1:[147,149,162,171,173,182,183,214,224],hss:2,hssr0:[147,149],htaborg:72,htmght:161,html:[202,203],http:[36,132,133,138,140,155,171,172,176,205,219,220,221,222,224,225,226,227,228,229,231,232,246,247,256,275,278,282,284,291,292],hub:[83,103,224,275,276,282,283],hub_id:[42,83],huge:[147,148,149,182,183,226,228,275,276,298],hugo:[171,172],human:[21,22,132,134,226],humid:54,hundr:[171,172],hurt:[229,230],hvc0:[208,231],hvc1:[208,231],hvc:[193,202,203,226],hvsi:[217,231,233],hw_key_hash:314,hw_key_hash_s:314,hwcap:[21,22,180,182],hwclock:[162,215,226,227],hwirq:[91,202],hwmon:[19,171,172,175,229,230,242,246,247],hwpoison:[181,208,267,273,274],hwrng:28,hwsv:275,hygen:[281,282,283],hyp:[255,275],hypervisor:[21,22,33,35,37,38,42,68,70,130,157,169,171,175,182,183,187,231,232,246,247,257,261,278,281,282,283,284,285,316],hypervizor:164,hypothet:[21,141],i2c:[0,60,131,135,144,145,147,148,162,171,172,173,184,185,186,202,203,207,208,211,214,219,225,226,227,229,230,231,232,233,238,243,246,247,250,255,266,271,275,276,282,283,295],i2c_:[246,247],i2c_addr:[246,247],i2c_init:[171,173],i2c_port:[246,247],i2c_request_send:[271,275,276],i2c_run_req:220,i2cdetect:[211,220],i2cm:[202,203,246,247],i2cm_port:[246,247],i3f8:2,iamr:[226,227],ian:[161,184,185,193,219,220],ibm:[1,2,7,8,10,11,12,15,16,20,24,25,26,27,28,29,30,31,33,34,38,39,40,41,42,43,44,46,50,52,55,56,59,62,63,64,65,67,70,71,76,83,84,87,88,89,90,93,97,98,99,100,101,103,105,114,119,127,130,132,133,134,135,136,137,141,145,147,148,152,161,164,174,175,182,183,184,185,187,193,194,201,204,216,219,220,221,222,224,228,230,246,247,248,250,251,255,257,273,274,275,276,278,285,291,292,298,304,311,313,314,315,316,317],ibm_fsp_termin:[160,207,220],ibmer:140,ibmpowernv:[151,162,215,226,227,229,230],ic922:136,icp:[2,193],icswx:28,idata:[171,172,226,227],idea:[42,171,172,226,227,246,247,267,273,274,316],ideal:[2,35,131,171,172,173,254,257,275,276,282,283,311,316],ident:[73,120,141,246,247],identif:[34,189],identifi:[10,13,14,18,19,22,33,35,39,47,50,51,53,68,69,102,104,109,119,129,143,154,162,171,172,215,231,233,268,273,274,275,276,291,292,314],idl:[48,145,146,147,148,171,172,202,203,220,221,226,227,229,231,232,246,248,268,273,274],ids:14,idsel:69,idx:[231,233],ifdef:193,iff:[275,276],ignor:[4,5,22,41,55,56,68,70,71,78,93,104,108,117,121,162,171,172,191,193,202,203,204,215,220,221,224,226,227,229,230,231,233,236,246,247,272,275,276,282,284,287,291,292,316],iif:182,iii:[38,231],ijklmnopqrstuvwx:35,ili:19,illeg:[260,273,274],ilpc2ahb:[273,274],ima_catalog:37,imag:[0,2,4,8,17,23,36,47,132,145,165,171,172,182,183,220,226,227,231,232,246,247,248,275,276,277,282,283,291,292,298,314],imc:[25,38,61,171,172,173,180,182,183,226,227,231,232,233,234,242,246,247,282,283,306],imc_dt_update_nest_nod:[171,172],imc_init:[180,246,247,306],imc_nest_chip:[171,172],img:[246,247],imit:70,immedi:[43,104,117,127,135,161,166,171,172,220,229,239,246,247,261,273,274,275,276,281,282,283,287,291,292,311,313],immun:[257,275,277],impact:[171,172,238,261,267,273,274,281,286,291,292],imped:[282,283],impend:[54,202,217,231,233],imperfect:[291,292],impi:[282,283],implement:[17,21,22,37,42,46,47,49,50,54,55,56,68,77,83,84,88,89,90,93,97,98,101,103,105,120,121,126,131,132,133,135,144,151,162,171,172,173,175,180,181,182,183,201,202,203,204,206,208,214,220,221,224,226,227,231,232,237,246,247,250,255,258,266,267,272,273,274,275,276,279,282,283,285,291,292,311,313,314,316],implent:[226,227],impli:[21,246,247,248,316],implic:[275,276,311],implicit:[22,160,258,279,282,283,316],implmeent:[246,247],implment:[226,227],importantli:[246,247,254,273,275,277],impos:231,imposs:[118,266,273,274,282,283,298],imprint:[219,314],improperli:313,improv:[102,139,146,153,161,162,166,168,173,176,177,178,179,190,191,199,202,203,204,205,207,211,215,217,220,224,226,227,229,230,231,233,234,248,251,257,258,269,275,276,277,278,279,282,283,291,292],in_be64:[287,291,292],inaccess:[17,220],inaccur:[171,175,226,227],inact:[171,172,246,248],inadequ:131,inadequaci:[246,247],inadvert:[171,172,241],inband:[47,202,203,209,229,230,231,235,246,247,291,292],inbox:139,inc:[133,213,220,291,292],incant:[226,227],incarn:[42,291,292],incas:61,incident:[246,247],incl:161,includ:[2,4,17,28,32,35,37,70,84,97,102,115,131,133,138,140,144,146,147,148,151,163,171,172,174,182,183,184,185,187,188,189,190,191,195,196,197,198,199,200,201,202,203,216,221,224,225,226,227,229,230,231,232,236,237,246,247,253,254,255,256,257,258,259,261,262,263,264,265,268,275,276,278,279,280,281,282,283,286,287,288,289,290,291,292,294,295,296,297,299,300,301,302,303,305,306,307,309,311,312,313],incom:[217,231,233],incompat:[22,202,204],incomplet:[54,134,171,172,225,226,227,231,232],inconsist:[275,276,299],incorpor:[132,140],incorrect:[43,67,72,76,113,122,171,172,193,194,200,202,203,220,224,226,227,228,229,254,275,277,291,292],incorrectli:[50,150,171,172,197,206,226,228,231,232,246,248,254,272,275,276,277,289],increas:[4,39,134,145,147,148,166,171,172,173,175,182,183,184,185,193,194,202,204,224,226,227,228,229,230,231,232,235,236,246,247,263,273,274,275,282,283,291,292,297],incred:[291,292],increment:[58,154,182,183,231,235,248,268,273,274,275,276],inde:[1,132,171,172,226,227,231,232,252],indefinit:[121,138,171,172],independ:[143,171,172,220],indetermin:311,index:[2,9,27,29,30,35,56,88,89,90,97,98,100,105,106,171,172,178,182,183,184,185,187,202,203,226,227,229,230,254,268,273,274,275,276,277,281,282,283,313,316],indic:[0,2,5,7,11,14,15,16,18,20,21,22,23,24,31,32,35,37,38,40,42,46,50,58,69,70,71,72,85,86,88,89,98,100,102,103,104,110,114,122,129,131,135,138,147,148,171,172,182,183,184,185,186,195,201,202,203,204,213,218,220,224,225,226,227,228,229,230,231,236,238,244,245,246,247,250,261,269,272,273,274,275,276,281,282,283,285,286,291,292,311,316],indicatg:316,indirect:[166,171,172,220,224,226,228,241,287,291,292],individu:[21,22,135,147,148,171,172,202,204,231,232,238,316],individud:316,indivisu:47,industri:[133,220],inf:[171,172,246,247,273],infer:[171,172,282,283,314],infinit:[153,161,171,175,246,247],inflight:[163,209,216,226,227,258,279],inflight_bt_msg:[258,279],info:[1,35,36,58,68,70,171,172,206,217,220,224,226,228,229,230,231,232,233,246,247,275,276,282,283,316],inform:[0,2,4,7,19,22,23,24,27,32,34,35,37,40,44,50,51,54,58,68,69,70,71,110,123,132,134,136,138,141,146,147,148,161,171,172,202,203,220,221,224,226,227,231,232,237,241,246,247,248,250,257,273,274,275,276,277,282,283,291,292,313,314,315,316],infrastrcutur:37,infrastructur:[61,141,181,202,203,204,208,220,229,231,232,246,247,267,273,274,282,283,284],ing:[50,171,172,181,208,267,273,274],ingrasi:136,inher:[229,230],inherit:[171,173],init:[0,6,37,61,70,133,171,172,173,174,178,182,183,184,193,202,203,204,220,221,222,224,226,227,228,229,230,231,232,234,236,237,238,241,246,247,248,251,255,261,268,271,273,274,275,276,280,281,282,283,284,285,287,291,292],init_16:226,init_5:226,init_all_cpu:[182,183],init_boot_cpu:182,init_chip:[226,227],init_cpu_thread:182,init_shared_spr:220,initalis:245,initi:[0,17,28,35,37,38,41,42,49,50,60,61,67,71,76,89,99,102,118,124,129,131,132,133,135,136,145,147,148,151,159,161,162,171,172,173,178,180,182,183,184,185,196,198,202,203,209,214,215,217,220,224,226,227,229,230,231,232,233,246,247,258,261,268,269,273,274,275,276,279,281,282,283,285,287,291,292,311,312,314,316],initialis:[0,35,41,171,172,180,182,183,221,224,226,227,246,247,261,273,275,276,277,280,281,282,283,285,287,291,292,301],initramf:[132,182,183,226,227,246,247],initramfs_load_bas:7,initrd:[7,226,227],inject:[82,150,166,198,217,226,227,229,230,231,233,246,247,261,272,275,276,281,282,285,287,291,292],inject_mce_step:[246,247],inject_mce_ue_on_addr:[246,247],inkl:[202,204],inlin:[106,288],inoper:150,input:[2,35,56,59,88,134,139,146,171,172,182,183,226,229,230,246,247,282,283,291,292],input_output:35,ins:[171,172],insan:[1,224],insert:[86,135,202,203,246,247,316],insid:[40,42,52,131,132,163,171,172,182,183,216,217,220,224,226,227,231,232,233,246,247,250,261,273,274,275,276,281,282,283,316],insist:224,insn:[180,182],inspect:0,inspir:[139,258,279,282,283],instal:[4,36,171,173,184,185,202,203,220,226,228,246,247,258,273,274,275,276,279,282,283],instanc:[28,33,129,146,171,172,226,231,235,246,247,273,282,291,292],instanci:220,instanti:[135,226,227,246,247],instead:[2,5,42,43,50,62,63,64,65,81,84,113,133,141,146,171,172,173,174,175,178,179,180,181,182,183,193,194,195,201,202,203,204,207,213,216,220,221,226,227,229,231,232,237,238,246,247,248,249,250,251,252,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,278,279,280,281,282,283,286,287,288,289,290,291,292,294,295,296,297,299,300,301,302,303,305,306,307,309,316],instr:[282,283],instruct:[0,13,21,22,28,37,40,43,124,147,148,153,162,166,171,172,174,193,214,215,226,227,231,232,241,246,247,260,273,274,275,276,282,283,291,292,315],insuffci:50,insuffic:226,insuffici:[54,67,83,118,171,172,226,228,268,273,287],int16_t:54,int32_t:[113,122,224],int64:[43,72],int64_t:[42,44,45,46,47,48,49,50,52,53,54,55,56,57,58,62,63,64,65,67,68,69,71,76,77,78,79,80,81,82,83,84,85,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,111,112,113,114,115,116,120,121,122,123,124,125,127,316],intc:[62,63,64,65,316],integ:[131,226,227,291,292,295,307,309,316],integr:[114,133,171,172,213,220,238,261,273,274,275,276,286,291,292],intend:[0,4,17,22,35,88,113,202,203,220,224,226,227,282,283,291,292,311,316],intens:193,intent:[17,171,172,174],intention:[291,292],interact:[38,52,73,150,162,171,172,184,185,214,220,221,225,275,276,282,283,311],interconnect:[41,282,283],interest:[136,182,183,202,226,227,246,247,273,274,314],interfac:[6,9,10,19,21,24,27,28,38,42,52,58,61,67,130,132,135,146,147,148,161,171,172,175,184,185,201,202,203,209,219,221,226,227,229,230,231,232,242,246,247,250,258,273,274,275,279,282,283,287,291,292,316],interfer:[282,283],interlav:2,interleav:[2,220],interlock:[213,220],intermedi:[229,230],intern:[16,35,42,46,50,54,77,83,120,127,134,135,144,202,203,220,226,228,231,232,246,247,266,271,273,274,275,276,291,292,298,304,311,313,316],internal_create_group:[231,233],interpret:[55,171,172,202,204,226,227,271,275,276,282,285,291,292,314],interrupt:[2,5,27,30,33,35,37,38,40,42,56,57,59,62,63,64,65,70,97,121,122,130,132,134,144,146,147,148,151,153,157,160,164,169,171,172,173,178,182,183,187,193,197,202,203,207,220,224,226,227,229,231,232,241,245,246,247,248,257,258,261,270,272,275,276,278,279,281,282,283,284,285,291,292,310,311,313,315,316],interrupt_source_numb:134,interrupts_properti:[182,183],intersect:224,interupt:224,intial:311,intialis:[182,183],introduc:[42,49,58,81,131,133,143,147,153,161,162,168,169,171,172,178,182,183,201,202,203,205,215,216,220,221,226,227,229,230,246,247,257,258,269,275,276,277,279,282,283,291,292],introduct:42,introductuion:[226,227],invalid:[45,48,49,50,52,53,58,60,67,70,71,74,75,77,78,79,80,81,82,83,87,91,92,95,96,99,100,102,106,109,110,112,120,124,127,129,130,131,144,145,147,148,171,172,173,182,201,226,227,231,232,241,242,246,247,250,257,258,272,275,276,279,282,283,285,287,291,292],invalu:139,invent:[132,282,285],inventori:[291,292],invers:[188,273,274],invis:[246,247],invoc:[61,275,282,283],invok:[28,35,44,171,172,226,227,246,247,280,282,283,285,291,292],involv:[22,44,101,138,139,166,171,173,182,183,229,230,250,275,276],ioa:82,ioctl:[224,229,230],ioda2:[27,29,56,88,89,90,97,101,134],ioda3:30,ioda:[38,88,89,100,103,105,106,226,227,268,273],iohub:[171,175,275,276,282,283],iommu:[287,291,292],iopath:220,ioslot:[231,232],iotyp:84,iov:[147,149,226,227,261,281,286,291,292],iovalid:[171,172,240],iovpd:[282,283],ip_tabl:[162,215,226,227],ipi:[171,172,220,224,231,232,246,247,316],ipl:[40,44,47,51,130,145,146,171,172,173,182,183,202,203,204,218,220,224,231,232,244,273,274,293,296],iplparams_sysparam:[171,172],ipmi:[1,20,35,38,67,77,130,131,144,146,147,148,149,152,162,164,166,171,172,182,183,202,206,208,209,215,217,220,226,227,228,229,230,231,232,233,246,248,250,251,252,254,256,257,261,263,272,275,276,278,281,282,283,284,286,288,290,294,295,300],ipmi_chassis_control:[258,279,282,283],ipmi_devintf:[162,215,226,227],ipmi_dt_add_bmc_info:[275,276],ipmi_elog_commit:35,ipmi_fw_pci_init:220,ipmi_get_bt_cap:[258,279,282,283],ipmi_hiomap_handle_ev:[258,279,282,283],ipmi_hiomap_read:[258,279,282,283],ipmi_hiomap_writ:[261,281,282,283],ipmi_msg:67,ipmi_msghandl:[162,215,226,227],ipmi_partial_add_esel:206,ipmi_powernv:[162,215,226,227],ipmi_queue_msg_sync:[254,258,261,263,275,276,279,281,282,283,286,291,292],ipmitool:209,ipol:70,ipoll_ack:70,ipoll_mask:70,ipoll_statu:70,ipr:[162,215,226,227],irc:138,irq:[2,33,157,171,172,187,193,197,202,203,208,220,224,226,227,231,232,234,241,245,275,281,282,283,306,315,316],irq_happen:[231,233],irqchip:[130,182,183,202,203],irqdomain:202,irqf_shar:193,irrespect:[134,182,183,220,251,268,273,274,275,276,282,283,291,292],irrit:[246,247],is_fsp_system:[246,247],is_mambo_chip:146,isa:[2,13,21,22,122,132,194,275,282,283],isav3:219,isdimm:220,isn:[2,57,59,85,86,104,121,133,135,139,145,171,172,182,183,184,185,188,213,220,221,226,227,228,229,230,231,232,241,245,246,247,252,257,273,275,276,278,279,282,283,285,291,292,316],isol:[58,68,171,172,220,226,228,287,291,292],isra:[246,247],issu:[44,70,73,77,79,91,93,95,117,133,134,138,146,147,148,151,154,160,162,168,169,171,172,173,174,175,176,178,181,182,183,188,193,194,195,201,202,203,205,208,213,214,215,217,219,220,221,222,224,225,226,227,228,229,230,231,232,233,235,238,241,242,246,247,248,250,256,258,261,266,267,268,269,272,273,274,275,276,278,279,281,282,283,284,285,286,287,288,291,292,313,316],istep:[171,174],isync:[171,172,241],it_page_shift:106,item:[178,182,183,226,227,317],iter:[118,171,172,174,224,231,232,246,247,278,307,309,311],its:[1,2,7,14,17,35,40,53,58,70,71,76,78,84,102,121,131,133,135,138,139,171,172,173,182,183,184,185,201,202,203,220,221,226,227,229,230,231,233,238,246,247,258,269,272,273,275,276,279,282,283,287,291,292,314,316],itself:[2,36,68,114,131,171,173,182,183,193,202,203,220,224,226,228,229,230,246,247,253,260,261,266,273,274,281,282,285,291,292,314,316],ivalid:66,ivc:[157,187],ivt:[157,187,316],ivt_addr:134,ivt_len:134,jack:[202,203,219,220],jain:[171,184,185,187,193,226,231,275],jan:262,jankin:275,januari:[145,154,155,160,162,212,218,244,305],jeff:224,jefferi:[226,231,275],jenkin:[171,231,233,275],jennif:[171,275],jeremi:[147,148,164,171,184,185,193,202,203,219,220,226,231,275],jessi:[184,185,226,228],jha:[171,275],jiffi:[217,231,233],jim:[202,224],jitindar:[171,193,202,203,226,231],jitter:[133,254,275,276],job:[171,172,175,202,203,220,229,230,241,246,247,272,273,275,276],joel:[147,148,164,184,185,187,193,202,203,219,220,226,231,275],john:[164,184,185,231],join:138,jona:[147,148,161,171,184,185,193,202,203,229,231,275],json:220,juli:[148,158,159,190,191,193,194,226,227,228,229,230,268,269,273,275,276,277,287,291,292,300,307,309],jump:[133,226],jumper:[23,171,172,220],june:[189,190,214,215,274,290,291,292,299,306],junk:[246,248],junkcod:229,just:[1,2,16,35,42,43,58,108,130,133,138,141,147,148,162,171,172,174,175,177,180,182,183,193,202,203,204,215,220,221,224,226,227,228,229,230,231,232,246,247,251,255,257,261,266,272,273,274,275,276,279,281,282,283,286,287,291,292,298,311,314,316],just_pol:63,justifi:139,k80:[147,148],kamalesh:[147,148,193],kardashevskii:[171,219,220,224,231,275],kcore:36,kdump:[40,61,147,148,171,172,229,230,260,261,281,282,285],keen:1,keep:[1,2,39,44,55,109,132,139,146,162,171,172,182,183,213,215,217,220,226,227,228,229,230,231,233,238,246,247,261,275,276,281,282,283,287,291,292,316],kei:[17,23,73,118,171,172,173,193,219,304,313,314],kek:312,kennington:231,kept:[2,275,276,313],kernel:[2,5,7,13,14,17,22,23,24,31,32,37,40,41,42,43,50,53,70,71,106,118,128,129,130,132,139,140,145,146,147,148,149,150,153,154,155,160,161,162,169,171,172,175,177,178,181,182,183,193,201,202,203,204,208,213,215,217,220,224,226,227,228,229,230,231,232,233,243,245,246,247,248,251,257,258,260,261,267,268,269,272,273,274,275,276,278,279,281,282,283,285,287,291,292,311,312,313,315],kernel_command_lin:[202,204,206],kernel_entri:[275,276],kernel_kexec:[231,233],kernel_load_bas:[7,182,183],kerr:[147,148,164,171,184,185,193,202,203,219,220,226,231,275],ketchup:141,kexec:[2,50,51,61,124,125,129,132,159,171,172,174,191,193,226,227,228,229,230,231,233,261,268,273,274,281,282,285,287,291,292,313,316],kexec_cor:[231,233],key_buf_s:118,key_len:118,key_length:118,key_siz:118,keyword:[2,39,220,268,273,301],kick:[5,96,171,172,231,275,276],kill:[106,181,208,260,267,272,273,274,275,276],kill_typ:[106,272,275,276],killer:[179,182],kind:[13,35,50,182,183,220,291,292],king:[219,220],kink:202,kkkk:35,kmsg_dump:[261,281,282,283],knob:[134,137,251,275,276],know:[2,12,22,42,62,63,64,65,68,106,128,131,132,162,166,171,172,173,182,183,184,185,189,193,202,203,213,220,224,226,227,228,229,230,231,246,247,248,259,267,269,273,274,275,276,280,282,283],knowledg:[138,171,172,202,203],known:[0,12,134,144,146,162,171,172,198,202,203,213,220,226,227,231,232,233,241,246,247,250,252,258,275,276,279,282,283,285,314],kobylak:[171,184,185,275],krenn:219,kthread:[217,231,233,261,281,282,283],kudo:[171,172,182,183],kumar:[184,185,226],kvm:[93,103,134,171,172,226,227,228,231,233,257,273,274,275,276,278,282,283],kworker:[217,231,233],l142:226,l2cac_flush:275,l2cerr:275,l2misc:275,l3_misc:275,l3_prd_purge_req:275,l3_prd_purge_ttyp:275,l3cerr:275,lab:[182,183,226,227,261,273,274,275,276,281,282,285],label:[16,19,31,34,135,171,174,212,220,221,226,231,232,246,247,256,259,275,276,278,280,282,283],lack:[21,131,226,227,261,291,292,312],lai:[146,147],lan:1,landau:[171,172],lane:[2,27,29,30,135,171,172,213,220,226,228,229,230,238,275,276,282,283,287,291,292],lane_eq:2,laptop:220,larg:[41,118,133,136,146,147,148,171,184,185,221,224,229,230,231,269,270,272,275,276,282,283,285,304,308,313],larger:[17,39,55,88,118,205,219,220,229,230,257,269,275,276,278,282,283,291,292],largest:[171,175,224,316],larson:[147,148],last:[14,35,41,42,140,147,149,171,173,180,184,185,186,193,201,202,203,206,219,220,221,226,228,246,247,271,272,273,274,275,276,278,281,282,283,285,291,292,313],last_comp_vers:[226,227],latch:[121,135,220,246,247,268,273,275,276],late:[0,202,203,226,228,273],latenc:[13,52,153,171,172,178,182,183,229,254,269,275,276],later:[2,7,28,30,33,35,42,43,45,68,70,131,134,151,162,180,181,203,208,213,217,220,226,227,228,229,230,231,232,233,239,240,245,246,247,258,273,274,275,276,279,282,283,287,291,292],latest:[14,162,171,172,208,212,215,220,226,227,231,237,275,276,277,282,283],latter:[171,172,180,202,203,246,247,314],launch:273,layer:[58,70,132,138,171,172,182,183,220,261,281,282,283,291,292,316],layout:[24,38,41,119,171,172,219,229,231,232,257,259,275,277,280],lbu:60,lc921:136,lc922:136,lcd:[12,127],lcov:36,ldbar:37,lds:[291,292],lead:[4,147,148,149,159,161,162,164,171,172,180,181,182,183,189,193,195,196,202,203,204,207,208,213,214,220,221,225,226,227,231,232,234,245,246,247,273,274,281,282,283,291,292],leak:[147,148,156,182,183,184,221,226,231,233,258,279,282,283,285,307,309],least:[2,39,41,49,55,70,130,138,171,172,182,183,219,220,224,226,227,228,246,247,257,273,274,275,276,277,282,283,291,292,307,309,316],leav:[0,171,172,174,182,183,184,185,198,202,203,221,226,227,241,242,246,247,268,273,274,282,283,286,291,292,311,316],led:[5,34,38,42,135,145,146,147,148,168,182,183],led_mask:68,led_valu:68,leds_powernv:[162,215,226,227],left:[4,22,121,132,146,171,172,273,274,279,282,283,291,292,316],legaci:[193,316],legit:[171,172],leitao:[202,203],lemerrormask:84,lemfir:84,lemwof:84,len:[17,20,35,53,84,171,173,231,232],length:[12,33,41,49,50,53,54,67,77,118,130,171,172,202,203,221,231,232,257,275,276,282,283,287,291,292,313],leoluo:202,less:[4,21,84,118,133,141,171,172,182,183,193,202,203,217,220,224,226,227,231,232,233,246,247,261,275,276,281,282,283,284,291,292],lesser:[21,22,258,279,282,283],let:[162,171,172,177,179,182,183,202,203,215,217,220,226,228,231,232,233,240,241,246,247,248,250,257,258,261,273,274,275,276,279,281,282,283,287,291,292],letter:4,level:[2,8,14,17,21,22,31,33,38,88,118,123,128,133,144,146,171,172,173,175,182,183,195,197,202,203,219,220,223,224,226,227,228,229,230,231,232,236,238,246,247,248,257,272,273,274,275,276,278,282,283,288,291,292,312,313,316,317],lexic:4,liauw:[219,220],lib:133,libc:[133,139,144,145,202,203,220,291,292],libcrypto:275,libfdt:[133,291,292],libff:[184,202,204,227,246,247,281],libflash:[133,146,147,148,176,182,183,184,185,192,193,202,203,204,206,217,219,220,224,226,229,230,231,232,250,251,252,254,258,261,273,274,275,276,277,278,279,281,282,283,284,287,291,292],libgcc:153,libpor:[133,231,232],librari:[22,23,38,133,171,172,202,203,246,247,273,274,275],libstb:[23,38,133,171,172,173,182,183,202,203,204,219,225,266,273,274,295],libtool:192,libvirt:[287,291,292],libxz:133,licens:[20,38,138,298],lid:[36,47,133,135,146,182,183,202,203,220,226,227,229,230,246,247,250,254,275,276,277,281,282,283,291,292],life:[139,141,261,275,276,281,282,285],lifecycl:[8,38],lifetim:[171,172],lift:[226,227,228],light:314,lightpath:10,like:[1,8,10,13,22,26,29,36,39,42,43,44,50,51,58,70,76,90,93,103,106,117,125,131,133,134,135,139,141,146,147,148,162,171,172,174,178,182,183,184,185,189,193,194,201,202,203,215,217,220,224,226,227,228,229,230,231,232,233,246,247,248,254,256,258,261,271,272,273,274,275,276,277,278,279,281,282,283,284,285,291,292,311,313],limit:[2,15,35,50,51,70,75,88,109,110,131,132,139,147,149,160,164,165,171,172,179,182,183,202,203,207,208,217,220,221,226,227,231,232,233,236,243,246,247,258,265,279,282,283,284,285,305,313,316],line:[12,62,76,102,127,138,140,147,148,153,161,164,172,173,174,182,184,185,187,193,195,203,227,232,265,266,273,274,276,281,282,283,287,291,292,303,306,316],line_len:127,linear:[171,172,226,227,282,285],linimon:229,link0:[246,247],link1:[246,247],link:[22,27,29,35,41,121,135,136,144,146,147,148,151,153,159,162,168,171,172,178,180,182,183,193,196,201,202,203,213,214,215,217,220,221,224,226,227,228,229,230,231,232,233,234,236,239,240,246,247,250,251,258,261,268,269,271,273,274,275,276,277,279,281,282,283,284,285,287,288,291,292,311],linker:[182,183,282,285],linkstat:[213,220],linkstatu:84,linsym:[225,226,227],linux:[2,4,5,7,8,9,10,15,19,20,21,22,23,27,31,32,34,35,36,40,41,42,43,45,50,71,78,81,106,108,130,132,133,134,136,138,139,140,146,147,148,151,153,154,164,165,166,168,171,172,175,182,183,193,194,201,202,203,204,217,219,220,222,224,225,226,227,228,229,230,231,232,233,236,238,246,247,248,251,255,257,260,261,267,272,273,274,275,276,277,278,281,282,283,285,291,292,316],lippert:[171,229,231],lirq:316,list:[2,8,10,13,14,21,22,24,35,37,38,42,47,50,67,76,77,107,118,130,131,132,138,139,140,144,146,159,165,168,171,172,173,175,178,182,183,191,192,202,203,220,221,224,226,227,229,230,231,232,233,246,247,258,271,275,276,278,279,282,284,291,292,310,311,312,316],list_check:[273,274],list_check_nod:[273,274],list_del:[278,288],list_head:311,list_nod:35,list_pop:278,list_top:[171,172,278],listen:[250,273,274],listinfo:138,lite:[231,232,267,273,274],liter:81,littl:[132,161,171,172,193,229,230,246,247,248,256,273,275,276,278,282,283,287,291,292,298],little_endian:298,live:[133,231,232,298],llll:35,llx:126,lnksta:220,load:[0,7,13,17,40,70,71,93,99,132,133,144,146,157,171,172,173,174,178,182,183,187,193,202,203,204,220,226,227,229,230,231,232,234,236,241,246,247,250,254,261,272,273,274,275,276,277,281,282,283,286,287,291,292,306,311,313],load_and_boot_kernel:[171,174,225,246,247,261,273,274,280,281,282,283],load_capp_cod:[250,275,276],load_capp_ucod:[250,275,276],load_initramf:[246,247],load_kernel:[246,247],load_pm_complex:[171,172],load_reg_addr:[282,285],load_result:[226,227],load_wait:[171,172,241],loader:[17,132,291,292],loc:[26,34,171,172,182,183,246,247,249,272,275,276,282,285],loc_cod:[68,282,283],local:[68,162,171,172,182,215,231,232,241,251,275,276],local_alloc:[275,276],localhost:[231,232],locat:[1,5,10,22,28,34,37,40,68,88,103,133,134,135,147,148,171,172,187,193,220,221,226,227,229,230,231,232,241,246,247,249,268,273,274,275,276,281,282,283,285,291,292,311,316,317],lock:[61,113,122,133,145,146,160,161,162,171,172,178,181,182,183,193,207,208,211,212,214,220,225,226,227,229,231,232,233,238,243,245,246,247,255,256,261,266,273,274,275,276,278,279,282,283,286,291,292,306,316],lock_cal:[273,274,275,276],lock_depth:[171,172],lock_error:[256,278],lockabl:312,locks_held:278,lockup:[134,162,169,182,183,213,215,220,226,227,228,231,232,233,246,247,248,282,283],lof:220,log2:316,log:[2,5,32,38,42,44,50,68,83,117,123,125,126,134,144,145,146,147,148,149,153,155,156,157,158,162,166,171,172,173,175,182,183,184,186,187,191,193,195,196,198,200,201,202,203,214,215,217,220,224,226,227,228,229,230,231,232,233,236,246,247,248,249,251,254,261,263,272,273,275,276,277,281,282,283,284,287,291,292,296,297,305,314],log_add:[226,227],log_add_sect:35,log_append_data:35,log_append_msg:35,log_commit:35,log_data:288,log_id:35,log_po:[226,227],log_simple_error:[35,273,274],log_siz:35,logger:184,logic:[17,28,37,40,58,157,159,171,172,182,183,187,191,193,196,202,204,220,226,227,229,230,231,236,242,246,247,258,275,276,279,282,283,285,289,291,292,311,313,316],login:[226,227],lombard:[171,226,231,275],longer:[42,50,108,130,140,146,171,172,174,178,182,183,184,185,193,194,202,204,220,224,226,227,228,229,230,231,232,246,247,248,250,273,274,275,276,279,282,283,288,291,292,316],look:[4,5,6,12,29,35,68,70,76,134,136,141,162,171,172,174,182,183,184,185,202,203,204,215,217,220,224,225,226,227,229,230,231,233,246,247,248,251,256,258,271,272,273,274,275,276,278,279,282,283,291,292],lookup:[73,171,172,202,203,225,246,247,275,276,282,283],loop:[43,44,125,153,161,171,172,175,180,182,183,226,227,241,246,247,254,261,271,272,273,274,275,276,278,281,282,283],loos:[171,172,181,208,231,232,267,273,274],lop:[257,282,283],lopapr:[22,76],lose:[133,171,172,220,231,232,236,291,292,316],loss:[13,35,123,224,231,232,313,316],lost:[58,60,151,157,171,172,187,202,204,221,224,238,242,246,247,257,278,282,283,313,316],lot:[133,157,165,171,172,176,187,202,203,221,246,247,255,274,275,276,282,283,291,292,298],loudli:252,low:[13,69,70,103,123,128,133,144,146,202,203,226,227,231,232,275,276,282,285,288,291,292],lower:[2,101,162,171,172,174,214,226,228,240,243,271,273,274,275,276,282,284,316],lowercas:[273,274],lowest:[75,121,226,227,229,230,273,274,282,284,291,292],lpar:[73,182,183,282,283],lparid:[73,282,283],lparshort:[182,183],lparshortid:[178,182,183],lpc:[2,52,69,75,147,148,164,171,172,193,196,202,203,220,226,227,228,231,232,245,246,247,250,258,273,274,275,276,279,282,283,284,285,291,292,295,317],lpcr:[73,220],lpcr_pecedh:[257,278,282,283],lpes1:220,lpfc:[162,215,226,227],lpid:[28,73,229,230,246,247,282,283,287,291,292],lsb0:21,lseek:[291,292],lsi:[41,220,316],lspci:[150,154,164,213,220,282,285],lsprop:[171,172,174,229,230,231,232],lsu:[182,183],ltc:[145,171,172],ltssm:[134,229,230,287,291,292],luck:[271,275,276],lucki:[171,172,202,203,287,291,292,298],luckili:[202,204,246,247],lunch:[162,214,224],lxpvd:[282,283],lxvpd:[282,283],lying:[14,282,283],m32:[171,172,238,246,247],m64:[30,147,149,202,204,246,247],mabi:[147,149],machin:[2,4,12,22,30,35,36,38,40,42,44,50,68,94,96,124,127,132,133,134,135,136,144,145,146,152,154,161,165,171,172,173,178,182,183,184,185,189,195,197,202,203,204,206,211,213,220,222,224,226,227,228,229,230,231,232,239,246,247,248,250,251,255,257,258,259,261,271,273,274,275,276,278,279,280,282,283,285,287,291,292,316],machine_kexec:[231,233],macro:[35,171,172,226,227,246,247,273,288,289,291,292],macronix:[1,147,148,171,172],made:[2,5,13,19,22,48,50,74,96,113,123,132,133,139,148,171,172,182,183,217,220,224,231,232,233,253,255,258,259,261,272,275,276,279,280,281,282,283,285],madhavan:[171,226,231,275],magic:[47,133,171,172,202,203,226,227,246,247,250,275,276,291,292,313],mahesh:[147,148,164,171,184,185,187,193,202,203,219,220,226,229,231,275],mai:[0,1,4,8,14,15,16,17,20,21,22,29,31,35,36,41,42,43,44,47,50,51,54,55,58,61,70,73,77,79,88,93,105,109,110,114,115,117,118,121,122,124,126,131,132,133,134,135,137,138,140,151,157,161,162,171,172,173,174,175,177,181,182,183,184,185,187,188,189,194,205,208,213,215,217,219,220,223,224,225,226,227,228,229,230,231,232,233,238,243,245,246,247,248,249,255,258,260,261,266,267,268,271,272,273,274,275,276,279,281,282,283,284,285,286,288,291,292,293,308,310,311,312,313,316],mail:[138,139,144],mailbox:[35,250,258,275,276,279,282,283,284],main:[28,37,119,132,133,140,141,171,173,175,181,182,203,226,228,229,230,246,247,304,311],main_cpu_entri:[133,182,224,226,227,272,273,274,275,276,281,282,283,306],mainli:[133,171,173,219,220,221,222,224,225,227,230,273],maintain:[1,5,15,35,54,68,129,133,138,139,140,141,157,171,172,173,174,175,182,183,187,202,203,204,205,206,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,246,247,248,268,273,274,275,276,277,282,283,284,285,291,292,316],mainten:[38,42,70,139,157,164,169,182,183,187,231,232,246,247,261,281,282,285],major:[132,147,148,182,183,201,202,204,248,257,278,282,283,310,313],make:[2,21,22,36,40,44,58,62,63,64,65,109,113,129,130,132,138,139,141,145,146,147,149,151,154,158,161,162,171,172,173,175,179,182,183,184,185,189,190,193,202,203,204,212,215,220,224,226,227,228,229,230,231,232,233,241,246,247,248,250,253,257,258,259,261,263,266,267,273,274,275,276,279,280,281,282,283,285,286,291,292,297,298,307,309,314,316],makefil:[145,147,149,160,171,174,187,191,194,202,203,212,220,246,248,273,275,277,287,291,292],makr:[147,149],malform:[17,229,230,258,279,282,283,311,312],malfunct:[58,154,157,187,193,220,226,228,272,275,276,282,283],malici:[0,182,183],malloc:[39,165,282,285],mamatha:[187,193],mambo:[36,144,145,146,147,148,161,171,172,173,182,183,194,219,220,221,224,225,226,227,231,232,246,247,248,273,274,282,283,285,291,292],mambo_binari:220,mambo_numa:[171,172],mambo_util:[146,220,246,247],man:[171,172],manag:[14,16,20,22,35,38,47,58,109,132,134,135,171,173,181,202,203,208,220,221,231,232,255,267,273,274,275,291,292,310,316],mandatori:[2,171,172,241],mangl:[57,121,220,316],mani:[2,20,22,50,52,69,94,96,114,128,139,146,147,148,165,178,182,183,184,185,199,202,203,226,228,231,232,246,247,250,274,275,276,291,292],manifest:[171,226,228,229,230,268,273],manipul:[133,171,172,193,224,240,273,274],manner:[21,226,227,246,247,311,313],manual:[115,133,171,172,182,183,220,229,230,258,273,274,275,276,277,279,282,283],manufactur:[23,26,34,128,136,141,171,172,196,202,203],map32:88,map:[1,8,19,30,36,38,41,88,89,90,97,100,105,121,133,134,135,144,146,147,149,155,171,172,182,183,184,185,193,194,198,202,203,220,222,225,226,227,229,230,238,246,247,250,273,274,275,276,282,283,285,287,291,292,299,316,317],map_pci_dev_to_slot:[182,183],map_pe_dma_window:88,map_pe_mmio_window:90,mar:[139,287],march:[155,156,157,176,177,178,183,184,185,186,190,192,193,220,258,259,263,279,280,283,296,297],margin:[134,182,183,251,275,276],mark:[81,160,171,172,181,182,183,198,202,203,208,219,220,226,227,229,230,231,233,241,246,247,248,261,267,273,274,275,276,277,281,282,283,284,285,287,291,292],mark_write_eras:[226,227],martha:[171,172],mask:[5,21,22,27,29,30,58,68,75,82,121,134,137,157,171,172,174,182,183,187,220,226,227,231,232,241,246,247,248,249,251,271,275,276,282,283,287,291,292,316],master:[0,2,58,60,133,139,140,141,153,162,171,172,214,219,223,225,226,227,229,231,232,233,236,238,245,246,247,266,273,274,291,292],mata:[229,230],match:[2,9,28,51,52,88,103,105,118,129,145,146,161,166,171,172,174,175,182,183,189,193,201,220,224,226,227,228,229,230,231,232,235,237,246,247,248,254,261,268,273,274,275,276,277,281,282,283,286,291,292,313,316],math:[22,171,173],matrix:[246,247],matt:[219,220,226],matter:[4,171,172,202,204,258,279,282,283],matur:[202,204],mavinakayanah:[147,148,171,184,185,219,220,224,226,229],max:[15,17,54,60,70,134,147,148,171,172,173,182,183,220,221,229,230,251,258,266,273,274,275,276,279,282,283,287,289,291,292],max_eq_count:[171,172],max_led_typ:68,max_lin:275,maxim:220,maximis:[41,275,276],maximum:[13,14,15,17,52,54,55,68,75,102,110,118,171,173,182,183,193,201,229,230,246,247,268,269,273,275,276,282,283,311],maxmimum:316,maxpayloads:[261,281,286,291,292],mayb:[81,202,204,248],mbedtls_sha512:[171,172],mbox:[35,47,68,157,162,163,171,172,187,193,215,216,217,220,224,231,232,233,250,273,274,275,276,279,282,283],mbox_default_poll_m:[171,172],mbox_protocol:[226,227],mboxbridg:[226,227],mboxd:[258,279,282,283],mbt:[246,247,268,273],mca:[26,171,172],mca_id:[26,171,172],mcbist:[26,171,172,257,275,276],mcbist_id:[26,171,172],mcd:[171,172,226,227,238],mce:[22,171,172,173,182,183,246,247,272,275,276,282,283],mclemor:[171,193],mconfig:[291,292],mcs3:24,mcs:[24,26,171,172],mcs_id:[26,171,172],mddt:[40,71],mdelai:[217,231,233],mdrt:40,mdst:[40,71,194],mdt:[171,172,238],mean:[2,19,22,50,58,62,70,86,106,121,132,139,140,141,146,147,149,154,171,172,178,182,183,217,219,220,224,226,227,229,230,231,232,233,241,246,247,250,254,260,272,273,274,275,276,277,278,282,283,287,291,292,298,311,316],meaning:[246,247,275,276,282],meant:[125,159,189,196,246,247,275,276,316],meantim:[171,172,202,204,220],measur:[13,171,172,173,202,203,204,205,275,277,314],mechan:[2,41,51,146,171,172,220,224,226,227,229,230,231,234,282,283,311,313],media:[171,172],medium:130,mellanox:[102,147,148,182,183,193,220,226,227,258,269,275,276,279,282,283,287,291,292],mem:[19,109,133,182,183,202,203,220,226,229],mem_addr:89,mem_high_addr:134,mem_low_addr:134,mem_map:39,mem_region:[182,183,202,203,220,224,226,228,275,276],mem_region_init:[226,227],mem_siz:[171,172],member:[70,194,288,291,292],memblock_reserv:[181,208,267,273,274],memboot:146,memcon:5,memcpi:[70,76,246,247,281],memcpy_mcsaf:[246,247],memori:[1,2,3,5,7,17,21,22,23,24,25,28,32,34,36,38,40,49,50,51,60,61,67,69,70,71,74,75,76,77,85,86,88,89,90,93,103,104,107,115,118,119,127,131,132,134,146,147,148,156,165,168,171,172,173,174,175,180,181,182,183,184,185,193,194,199,200,202,203,208,213,220,221,224,226,227,228,229,230,231,232,233,234,238,246,247,248,261,267,269,271,272,273,274,275,276,281,282,283,284,285,287,291,292,293,296,299,306,307,309,310,311,314,316],memory_pars:[171,172],memreserv:[2,226,227],memset:[147,148,182,202,203,271,275,276],memwin32:103,memzero:182,mendoza:[147,148,161,171,184,185,193,202,203,229,231,275],meng:[202,203,275],mention:[68,123,132,206,220,282,283],merg:[139,140,206,220,224,254,275,276,277,291,292,316],mess:261,messag:[1,35,38,45,49,52,54,55,56,58,67,70,97,98,104,109,110,111,114,119,120,127,131,132,134,135,140,141,144,146,147,148,153,154,155,160,162,163,165,166,167,171,172,173,178,182,183,184,185,189,195,199,201,202,203,204,206,208,209,213,214,215,216,217,220,224,226,227,228,231,232,233,236,243,246,247,249,250,254,257,258,261,268,272,273,274,275,276,278,279,282,283,284,286,287,291,292,298],message_data:[56,134],messi:[231,232,246,247],met:[261,281,282,283,289],meta:[229,230],metadata:[7,21,22,40,71],metal:[0,220,282,283,285,287,291,292],method:[1,22,48,51,106,171,172,202,203,226,227,231,232,246,247,275,277,313],metric:[145,146],mezz:220,mfcr:225,mfg:[23,313],mflr:[282,285],mfrr:65,mfspr:[246,247],mftb:[220,275,276],mgmt:[171,174,282,283],mgt:[5,110,137,171,172,174,182,183],mib:24,michael:[147,148,161,171,184,185,187,193,202,203,204,219,220,224,226,229,231,275,276],michel:171,micro:146,microcod:[8,37,61,133,146,171,172,226,227,231,232,233,246,248],microcontrol:37,micron:[184,185],microsecond:229,mid:[185,186],middl:[246,247,258,279,282,283],migh:[246,247],might:[2,51,121,135,164,171,172,182,183,188,189,202,203,226,227,228,238,282,285,316],migrat:[282,283],mihawk:[136,288,293,295,299,300],mikei:[275,276,282,283],mileston:[219,220,221,222,224,225,226,227,228],miller:[202,203,219,220],milliecond:108,million:[291,292],millisecond:[52,94,96,117,229,230,291,292],milton:[202,203],min:[15,197,202,203,229,230,258,279,282,283,289],mind:219,minda:171,mini:[133,231,232],minim:[88,132,267,273,274,310,311],minimium:110,minimm:[246,247],minimum:[13,15,19,39,41,76,110,118,258,273,274,279,282,283,289,316],minor:[21,147,148,150,151,156,158,159,160,161,162,164,166,167,168,169,170,195,196,199,200,248,275,276,283,298],minski:136,minu:[22,88,89,90,97,100,105],minus1:[97,98],minut:[0,117,229,230,231,232,261,281,282,283],mirror:[14,223,258,279,282,283],mis:[282,285],misalign:[229,230,246,247],misbehav:[291,292],misc:[17,35,146,161,171,172,202,203,268,269,273,275,276,282,285,291,292,311],miscacul:[176,182,183],miscalcul:[176,182,183],miscellan:[2,35,226],misguid:[261,281,286,291,292],mislead:[229,230,250,275,276,282,283],mismatch:[171,172,175,213,220,243,268,273,274],mispredict:[282,285],misrout:[231,232],miss:[21,46,84,146,147,148,153,171,172,173,181,182,183,202,203,220,221,226,227,231,232,234,246,247,257,273,274,275,276,277,278,282,283,285,291,292],mistak:[229,230,246,248],mistyp:[275,276],mit:139,mitig:[162,171,172,213,226,228,239],mix:[171,172,273,274,275,276,282,283,284],mixtur:29,mktime:229,mmap:[24,61,246,247,273,291,292],mmape:[291,292],mme:56,mmio0:[275,276],mmio:[30,38,84,88,90,93,103,107,150,171,172,174,179,182,224,226,227,229,230,231,232,236,238,243,246,247,268,272,273,275,276,282,283,287,291,292,298,306,316,317],mmio_addr:317,mmio_invalid:[246,247],mmio_invalidate_wait:[246,247],mmio_window:134,mmioerrorlog0:84,mmioerrorlog1:84,mmioerrorstatu:84,mmiofirsterrorstatu:84,mmu:[2,22,72,73,202,203,220,221,224,226,227,282,285],mnopqrstuvwxyz:35,mod:[217,231,232],mod_secure_verify_compon:[171,174],mode:[10,13,21,22,23,38,41,73,99,102,115,132,147,148,149,150,161,171,172,173,174,182,183,193,194,196,202,203,204,205,220,222,224,226,227,228,229,230,231,232,233,234,238,246,247,266,268,269,271,273,274,275,276,277,282,283,285,287,291,292,299,311,312,314,316],model:[2,35,62,63,64,65,106,107,182,183,193,220,222,226,227,273,274,275,279,282,283,291,292],modern:[138,161,205,229,230],modif:[16,138,141],modifi:[134,138,139,140,171,172,182,183,226,227,229,251,253,275,276,282,283,285,316],modul:[2,25,26,38,129,132,139,151,162,171,172,202,203,215,226,227,246,247,268,273,274,282,283,314],moduleid:[171,174],moment:[102,179,182,220,226,227,228,229,246,247,273,274,275,276,282,283,291,292],mondai:[160,181,193,203,208,212,221,227,233,236,245,252,255,267,276,287,292,295],monitor:[2,37,282,285,291,292],month:[117,141],more:[2,16,17,19,21,22,35,49,50,62,68,70,73,74,84,88,130,131,132,133,135,139,144,146,154,158,160,161,164,171,172,173,174,175,178,182,183,190,193,202,203,205,207,213,220,224,226,227,228,229,230,231,232,241,246,247,248,250,253,254,256,258,275,276,277,278,279,282,283,284,285,291,292,293,298,311,313,314,316],moreov:[267,273,274],most:[14,17,29,60,140,141,147,148,161,162,164,172,182,183,184,185,187,193,202,203,204,215,227,230,258,273,274,279,282,283,284,285,287,291,292,311,316],mostli:[2,29,202,204,224,226,227,231,282,283,285,291,292,316],motherboard:0,motiv:[5,220],mount:220,move:[35,37,70,71,163,171,172,173,182,183,203,204,216,217,219,220,221,222,224,225,226,227,228,231,232,238,241,246,247,248,252,255,273,275,276,282,283,285,287,291,292,306,316],mover:34,mowgli:[136,304,305],mpipl:[5,38,42,44,182,226,228,246,247,293,294,296,300,301],mpipl_op:71,mple:35,mprintf:220,mrl:[213,220],mrw:[171,172,246,247],msarea:[282,283,299],msg:[5,55,67,70,111,171,172,226,227,229,230,231,232,258,261,279,281,282,283,287,288,291,292],msg_len:67,msg_type:70,msglog:[133,141,146,162,171,172,182,183,214,224],msgq:[67,163,216,226,227],msi:[30,38,56,97,98,105,121,153,213,220,226,227,271,275,276],msi_address:[56,134],msi_data:56,msi_rang:[56,134],msr:[73,122,162,171,173,178,182,183,215,226,227,231,232,233,246,247,261,272,275,276,281,282,283],msr_sf:[226,227],mt27700:[258,279,282,283],mtd:[171,172,184,185,202,204,206,212,220,224,229,230,231,232,282,285],mtd_no_eras:[231,232],mtlr:[282,285],mtspr:[246,247],much:[22,71,95,117,160,165,171,172,174,178,180,182,183,195,205,219,220,224,229,230,246,247,273,274,275,276,282,283,287,291,292,316],mukesh:[193,202,203,204,231],mult:88,multi:[0,58,182,183,184,186,220,222,224,246,247,304],multicast:[231,232],multicor:193,multipl:[2,4,35,49,52,56,61,73,88,89,117,146,147,171,172,175,182,183,202,203,217,220,224,226,227,229,230,231,232,233,246,247,257,258,269,271,275,276,278,279,282,283,291,292],multiplex:37,multipli:21,multithread:[184,186],munmap:[182,183],munsi:[161,184,185,193],murano:[136,226,228],murthi:[147,148],musl:194,must:[2,4,5,9,13,17,21,22,41,49,51,52,55,56,58,59,61,62,63,64,65,70,75,88,89,100,101,103,105,110,113,115,117,118,123,124,126,131,132,134,140,141,157,171,172,173,182,183,187,220,226,228,229,230,231,232,243,246,248,254,275,277,282,291,292,311,312,313,314,316],mustard:141,mutipl:[41,226,227],mutual:311,mux:[171,172,237,246,247],mve:[56,97,98,105,134],mve_numb:[56,97,98,134],mx66l1g45g:[202,203],mxxxl51235f:[1,171,172],mydisk:[246,247],myneni:229,mynetwork:[231,232],mysim:[36,246,247],mysteri:[171,172,239,240,286,291,292],n110:84,n120:84,n25q256ax:[184,185],n25qx256ax:[184,185],nack:[60,271,275,276],nageswara:[202,203,204],nak:[271,275,276,282,283],name:[1,2,8,13,15,16,17,18,19,20,21,22,24,26,34,42,49,69,118,131,132,133,134,136,138,141,154,161,164,171,172,175,178,182,183,187,204,220,222,224,226,227,229,230,246,247,250,259,273,274,275,276,280,282,283,284,285,291,292,304,317],namli:[246,247],nap:[13,202,203,220,226,227],napl:[27,41,136,147,148,184,185,186,193,258,279,282,283],narrow:[171,175,226,228],nasti:[275,276],nathan:146,nativ:[246,248,282,283,316],natur:[55,110,178,182,183,246,247,287,291,292,312,316],nbw:[182,183],nc00:84,nc18:84,nc40:84,nc80:84,nc88:84,ncc0:84,ncc8:84,ncu:[171,172,243,246,248],ncu_darn_bar:[171,172],ncu_spec_bar:[171,172,246,248],nd00:84,nd08:84,nd1:[272,275,276,282,283],nd40:84,nd48:84,nd80:84,nd88:84,ndc0:84,ndc8:84,ndev:[268,273],ndl:[269,275,276],ne00:84,ne08:84,ne40:84,ne48:84,neagtiv:[226,227],nearli:[171,172],neat:[155,184,185],neaten:[226,228],necessari:[35,41,171,172,174,182,183,221,241,246,248,258,261,273,279,281,282,283,291,292,311,316],necessarili:[229,230,252,275],necessit:[182,183],need:[2,4,5,7,13,20,35,36,41,44,48,51,58,68,69,77,102,104,109,115,118,120,121,124,127,128,129,131,132,133,134,135,138,140,141,147,148,149,151,154,157,171,172,173,174,175,176,178,180,182,183,187,189,193,201,202,203,204,219,220,221,222,224,226,227,229,230,231,232,238,241,246,247,248,255,256,257,266,269,271,273,274,275,276,277,282,283,285,286,287,288,291,292,294,298,311,312,315,316],needless:[184,185,258,279,282,283],needlessli:[1,220],neelesh:[147,148,161,164,184,185],neg:[22,131,171,172,299,316],negoti:[171,172,182,183,229,230],neither:[50,76,121,139,171,172],nest:[24,25,38,61,72,73,171,172,201,202,203,220,221,224,226,227,231,232,233,246,247],nest_imc:306,nest_pmu:[231,232],nestfir:[171,172],net:[35,291,292],net_mac:[291,292],netfn:[67,184,186,231,232,261,275,281],network:[171,172,220],netxtrem:164,neul:[147,148,161,171,184,185,187,193,202,203,204,219,220,224,226,229,231,275,276],never:[41,42,43,44,81,113,131,139,151,157,171,172,173,187,224,226,227,231,232,235,237,246,247,248,249,259,261,275,276,280,281,282,283,284,285,287,288,291,292,316],new_properti:[171,174,224],newcpu:22,newel:136,newer:[44,68,171,172,182,183,189,224,226,227,229,275,276,282,283,291,292,316],newinsn:21,newli:[58,316],newlin:[171,172,226,227,291],next:[2,20,22,35,41,50,55,118,139,153,157,171,172,187,217,220,226,227,228,231,232,233,236,273,274,283,284,285,291,298,313],next_error:[282,284],next_in:[226,227],next_out:[162,215,226,227],next_ungarded_primari:305,nfir:[84,182,226,228,275,276],nfir_cach:[275,276],nfirmask:84,nfirwof:84,nguyen:[184,185],nia:[261,281,282,283],nibbl:[171,172],nice:[160,178,182,183,220,224,226,227,291,292],nich:[246,248,282,283],nichola:[171,202,203,219,220,224,226,229,231,275],nick:298,nicol:[136,291,292],nimbu:[26,134,136,226,227,231,232,270,273,274,275,276,291,292],nip:[162,171,173,178,182,183,215,226,227,246,247,254,275,276],nmi:[162,215,220,226,227,246,247,282,283],nmmu:[73,182,183,268,273],nobodi:[282,283],noboot:[202,203],nodal:[269,275,276],node0:[26,171,172,182,183,249,282,285],node:[3,6,8,9,10,14,15,16,18,20,22,23,25,26,27,28,29,32,33,34,35,38,40,52,53,56,67,69,70,71,76,87,88,89,90,93,97,98,99,100,101,103,104,105,114,130,132,135,154,165,171,172,174,175,180,182,183,193,194,202,203,204,220,221,224,226,227,228,229,230,231,232,246,247,250,257,268,269,273,274,275,276,282,283,284,285,291,292,304,311,313,316,317],noisi:[193,272],noitifi:[229,230],nolibc:36,nomcount:[275,276],nomin:[226,227],non:[2,4,56,61,76,87,100,131,146,147,148,156,159,171,172,174,182,183,184,185,193,196,202,203,205,213,220,224,226,227,231,232,238,241,246,247,248,260,261,268,272,273,274,275,276,281,282,283,285,286,291,292,301,311,314],none:[17,108,122,131,171,172,182,183,261,273,274,282,285,291,292,311,316],nonfatalerr:164,nop:[41,97,134,226,227],nor:[50,121,184,185,217,231,232,246,247,248,291,292,316],normal:[0,28,43,44,52,113,122,128,129,134,135,147,149,150,162,163,166,171,172,202,204,213,215,216,217,220,224,226,227,228,229,230,231,232,233,241,246,247,251,258,261,275,276,279,281,282,283,285,287,291,292,316],normand:171,nornmal:28,north:236,notabal:[231,232],notabl:[50,188,202,229,230,231,232],note:[1,2,4,6,15,42,47,49,51,54,68,70,73,76,95,100,101,136,146,171,172,182,183,184,185,192,202,203,204,205,208,220,226,227,229,230,231,232,246,247,248,275,276,282,283,288,291,292,313,316],noth:[49,171,172,182,183,189,202,203,204,220,226,227,228,231,232,246,247,248,273,274,287,288,291,292],notic:[1,193,202,204,224,226,228,258,279,282,283],notif:[0,35,50,51,68,70,125,159,171,172,191,193,208,226,227,231,275,276,316],notifi:[28,35,70,159,162,171,172,191,201,202,203,214,224,229,230,237,282,284,316],novemb:[143,151,152,153,202,203,204,205,206,207,219,220,221,222,237,238,239,240,251,252,253,254,276,277,304,308],now:[2,4,24,36,39,42,51,70,110,117,130,132,133,141,144,146,147,149,161,162,164,170,171,172,173,174,180,182,183,184,185,186,187,188,189,190,191,202,203,204,205,206,215,220,224,226,227,228,229,230,231,232,238,246,247,254,255,261,270,272,273,274,275,276,277,281,282,283,284,285,287,288,291,292,298,312,313,316],npage:106,npcq:[27,29],npct601:[32,171,172],npct650:[32,171,172],npu0:273,npu1:273,npu2:[29,38,42,171,172,173,174,176,178,180,221,224,229,230,231,232,234,237,238,239,240,249,255,262,264,269,272,275,276,277,282,283,284,285,287,295,296],npu2_:[226,227],npu2_dev_bind_pci_dev:[246,247],npu2_dev_fence_brick:[180,246,247,268,273],npu2_map_pe_dma_window:[255,275],npu2_misc_fence_st:[268,273],npu2_ntl_misc_cfg1:[268,273],npu2_ntl_misc_cfg2_brick_en:[275,276],npu2_otl_config1_tx_temp2_en:[272,275,276],npu2_tce_kil:[255,272,275,276],npu2_xts_bdf_map_s:[282,283],npu2_xts_bdf_map_valid:[246,247],npu2dev:[171,172,246,247],npu3:293,npu6:[171,172,246,247],npu:[27,41,58,75,171,172,178,180,182,183,187,193,195,197,201,224,226,227,231,232,246,247,249,255,268,269,272,273,274,275,276,282,283,284,285,287,291,292],npu_err_inject:[202,203],npu_num_of_p:201,npu_sm_config0:[246,247],ns16550:2,ntl:[41,171,172,239,268,269,273,275,276],ntupl:220,num:[5,20,30,97,98,100,105,146],num_lin:127,num_lsi:105,num_seg:103,numa:[27,171,172,226,227,228],number:[1,2,4,13,18,19,21,22,26,27,28,29,33,34,35,41,46,47,49,50,56,57,68,69,70,74,75,88,89,90,93,99,100,101,102,103,113,114,120,121,122,123,129,134,135,139,141,143,147,148,149,150,158,160,162,166,171,172,173,178,180,182,183,184,185,189,190,191,193,195,198,202,203,207,208,212,213,214,215,217,220,224,226,227,229,230,231,232,233,234,236,238,241,243,246,247,248,253,268,272,273,274,275,276,282,283,284,287,291,292,298,313,314,316,317],numinstruct:[282,283],nuvoton:[32,171,172,202,203,207,211,220],nv_zcal_overrid:[226,227],nvdimm:[282,283],nvidia:[171,246,247,273,274,275,276],nvidia_uvm:[246,247],nvlink1:221,nvlink2:[73,178,220,226,227,229,237,238,239,240,269,285,291,292],nvlink:[25,29,37,38,136,176,178,182,183,184,185,193,195,198,201,206,226,227,229,231,232,246,247,261,273,274,275,276,281,282,283,284,285,287,291,292],nvme:[213,220,221,275,276],nvram:[1,5,20,38,42,44,77,134,137,147,148,171,172,182,183,204,205,210,217,220,221,224,226,227,228,229,230,231,232,246,247,248,251,261,275,276,281,282,283,285,287,291,292,298,302,315],nvram_imag:76,nvram_init:[171,172,173,275,276],nvram_pstore_writ:[261,281,282,283],nvram_reformat:[182,183],nvram_valid:[182,183],nvram_write_os_partit:[261,281,282,283],nvt:[222,231,232,282,283,316],nx842:[268,273,274],nx_addr:[28,229,230],nx_coproc_init:[268,273,274],obei:[205,282],object:[182,183,275],oblivi:[171,173],obnoxi:[226,227],obscur:[162,214,226,227,282,283],observ:[166,171,172,182,183,195,202,203,220,231,232,235,246,247,257,261,266,273,274,278,281,282,283,285,287,291,292],obsolet:50,obtain:[35,70,121,143,273,316],obu:[171,172,226,227,229,282,283],obus_index:[282,283],obviou:[153,226,227,254,275,276],obvious:[140,180,226,227,246,247,273,274],ocapi:[273,274],ocapi_mem:299,occ:[2,4,13,15,18,37,44,70,119,132,141,144,146,147,148,165,171,172,173,174,175,178,182,183,184,185,186,189,193,201,202,203,208,220,221,224,229,230,231,232,235,238,242,243,246,247,248,250,255,258,261,268,273,274,275,276,279,280,281,282,283,291,292,299,310],occ_error:70,occ_get_gpu_pres:[273,275,276],occ_gpe1:[231,232],occ_load:[70,226,227],occ_max_throttle_statu:70,occ_misc:224,occ_p9_interrupt:[231,233],occ_pstates_init:[171,174,273,274,280,282,283],occ_reset:[70,171,172,201,202,203,226,227,229,230],occ_sensor_id_to_chip:[229,230],occ_sensor_loc_cor:[273,274],occ_sensors_init:[273,274],occ_throttl:70,occache_di:229,occasion:[171,172,241,273,274,291,292],occupi:133,occur:[0,4,17,70,102,114,121,134,157,171,172,182,183,187,219,220,229,230,241,242,246,247,249,251,261,266,272,273,274,275,276,281,282,283,285,286,287,288,291,292,312],occurr:[182,183,316],oct:[42,139,210,289,302,310],octob:[151,166,167,168,169,170,171,172,173,174,175,201,203,204,217,231,232,233,234,235,236,250,272,294],ocxl:[182,183],odd:[197,202,204,224,246,247,275,276,287,291,292],oddli:250,odl0:[246,247],odl1:[246,247],odl:[246,247,282,283],oem:[0,206,226,249,250,273,274,286,288,291,292],oemhandl:226,of_pmem:[246,247],off:[0,13,38,42,43,73,96,104,109,113,135,138,139,140,146,147,149,151,171,172,173,182,183,201,202,203,204,216,217,226,227,229,230,231,233,240,261,269,273,275,276,279,281,282,283,285,298],off_dt_str:[226,227],off_dt_struct:[226,227],off_mem_rsvmap:[226,227],offb:[155,184,185],offer:[22,287,291,292],offet:316,offic:304,offici:146,offlin:[77,104,128,171,172,181,198,202,203,208,231,232,267,273,274],offload:37,offset:[3,9,24,27,29,52,76,78,88,108,129,135,171,172,213,219,220,221,222,224,225,226,227,228,268,271,273,274,275,276,316],often:[5,139,165,168,246,247,282,285,291,292],ointer:288,ojha:[193,202,203,204,231],okai:[2,5,17,26,30,32,132,140,171,172,248,250,273,274,275,276,282,283,291,292],old:[2,4,5,42,56,58,88,89,90,93,97,98,100,101,103,105,134,147,149,162,171,172,175,215,220,224,226,227,231,232,238,241,246,247,248,250,261,273,274,275,276,281,282,285,291,292,295,313,316],older:[22,43,68,70,140,155,171,172,175,208,224,229,230,231,273,274,275,276,282,283,315],oliv:[171,184,185,187,193,202,203,219,220,224,226,229,231,275],oll:[246,247],olog:220,ommit:2,on1:35,onc:[0,27,35,36,37,39,41,50,81,117,134,135,136,139,147,149,162,168,171,172,215,217,220,224,226,227,228,229,230,231,233,238,246,247,248,250,258,273,274,275,276,279,282,283,284,286,291,292,311,312,314,316],one:[0,2,4,10,16,21,22,23,26,33,35,41,49,50,56,59,68,69,70,75,86,95,100,102,104,106,108,113,117,121,124,127,132,133,135,136,139,140,145,146,147,149,152,156,163,165,168,171,172,173,176,177,179,180,182,183,188,189,193,195,200,201,202,203,204,206,217,218,220,224,226,227,228,229,230,231,232,233,238,239,240,241,242,244,246,247,253,258,260,266,267,269,273,274,275,276,279,282,283,285,287,291,292,311,313,314,316,317],ones:[2,68,171,172,184,186,196,202,203,220,226,227,231,232,250,258,259,268,273,274,275,279,280],ongo:[171,172,246,247,275,276],onli:[1,2,5,8,17,19,20,22,23,24,34,35,41,42,43,44,46,47,49,50,52,54,55,58,60,61,68,70,73,75,77,81,83,88,91,100,101,102,103,105,115,117,118,122,127,128,130,131,132,133,134,135,136,139,140,141,146,147,148,149,154,161,162,165,168,171,172,173,174,175,182,183,188,193,195,196,199,200,202,203,204,205,214,215,217,220,221,224,226,227,228,229,230,231,232,233,235,238,241,246,247,248,250,251,252,255,257,258,259,260,267,268,273,274,275,276,278,279,280,282,283,284,285,287,288,291,292,298,300,304,306,311,313,314,316],onlin:104,ontim:[258,279],onto:[133,182,183,220,226,228],onward:[70,106,193,273,274,317],ooc:[231,232],op9_v1:[171,174],op_displai:[160,282,285],opal:[7,8,10,11,12,15,16,20,21,22,24,25,27,30,31,40,43,44,45,46,47,48,51,54,55,56,58,59,60,61,62,63,64,65,66,67,68,70,72,74,75,77,79,81,82,84,87,88,89,90,93,95,97,98,99,100,101,102,103,105,106,108,111,112,113,115,120,121,122,123,124,125,126,127,128,129,133,134,135,136,137,138,139,141,143,144,145,146,147,148,149,151,154,157,158,159,160,162,166,169,170,173,174,175,178,181,182,183,185,187,191,195,196,198,201,202,203,204,205,206,207,208,213,214,215,217,220,221,222,224,228,231,232,233,236,242,245,248,250,251,254,255,257,258,261,267,268,272,273,274,275,276,277,278,279,281,282,283,284,285,286,287,291,292,293,295,296,298,305,311],opal_:[146,226,227],opal_abnormal_power_off:35,opal_add_pe_to_domain:101,opal_addr_valid:[202,203],opal_assert_reset:96,opal_async_complet:[52,60,77,104,109,110,119,120,127,220],opal_async_exampl:131,opal_async_get_token:131,opal_async_wait:131,opal_attn:35,opal_busi:[43,44,45,49,50,52,75,76,102,109,110,113,117,119,125,128,162,178,182,183,213,214,217,225,231,233,282,283,316],opal_busy_ev:[43,44,49,50,76,108,117,120,125,162,215,217,226,227,231,233],opal_cal:[46,291,292],opal_capacity_upgrade_ev:35,opal_cec_hardwar:35,opal_cec_power_down:[38,42,217,231,233],opal_cec_reboot2:[38,40,42,58,147,149,202,204,229,230],opal_cec_reboot:[38,40,42,147,149],opal_check_async_complet:[38,42],opal_check_complet:45,opal_check_token:[38,42,44,50,51,120,131,132,291,292],opal_chip:35,opal_clos:[49,83,160],opal_concurrent_maintenance_ev:35,opal_config_cpu_idle_st:[38,42],opal_console_flush:[42,154,246,247],opal_console_read:42,opal_console_writ:[42,226,227],opal_console_write_buffer_spac:42,opal_constrain:[74,122],opal_deassert_reset:96,opal_disable_mv:98,opal_dump_ack:42,opal_dump_info2:42,opal_dump_info:42,opal_dump_init:42,opal_dump_read:42,opal_dump_region_host_end:50,opal_dump_region_host_start:50,opal_dump_region_log_buf:50,opal_dump_resend:42,opal_dump_resend_notif:50,opal_dynamic_reconfig_ev:35,opal_eeh_action_clear_freeze_al:[79,80],opal_eeh_action_clear_freeze_dma:[79,80],opal_eeh_action_clear_freeze_mmio:[79,80],opal_eeh_action_set_freeze_al:[79,80],opal_eeh_action_set_freeze_dma:[79,80],opal_eeh_action_set_freeze_mmio:[79,80],opal_eeh_ioc_error:[81,83,92],opal_eeh_no_error:[81,92],opal_eeh_pe_dma_error:[81,92],opal_eeh_pe_error:[81,92],opal_eeh_pe_mmio_error:[81,92],opal_eeh_phb_error:[81,92],opal_eeh_sev_inf:[83,92],opal_eeh_sev_ioc_dead:92,opal_eeh_sev_no_error:92,opal_eeh_sev_pe_:92,opal_eeh_sev_phb_dead:92,opal_eeh_sev_phb_fenc:92,opal_eeh_stopped_dma_freez:81,opal_eeh_stopped_mmio_dma_freez:81,opal_eeh_stopped_mmio_freez:81,opal_eeh_stopped_not_frozen:81,opal_eeh_stopped_perm_unavail:81,opal_eeh_stopped_reset:81,opal_eeh_stopped_temp_unavail:81,opal_elog:[38,42],opal_elog_ack:42,opal_elog_cr:35,opal_elog_read:[42,288],opal_elog_resend:42,opal_elog_s:42,opal_elog_writ:51,opal_empti:[17,53,67,118,311],opal_enable_mv:98,opal_entri:[132,246,247,261,281,282,283],opal_epow_non:54,opal_epow_over_ambient_temp:54,opal_epow_over_internal_temp:54,opal_epow_up:54,opal_err_info:35,opal_err_inject_func_ioa_dma_rd_addr:82,opal_err_inject_func_ioa_dma_rd_data:82,opal_err_inject_func_ioa_dma_rd_mast:82,opal_err_inject_func_ioa_dma_rd_target:82,opal_err_inject_func_ioa_dma_wr_addr:82,opal_err_inject_func_ioa_dma_wr_data:82,opal_err_inject_func_ioa_dma_wr_mast:82,opal_err_inject_func_ioa_dma_wr_target:82,opal_err_inject_func_ioa_ld_cfg_addr:82,opal_err_inject_func_ioa_ld_cfg_data:82,opal_err_inject_func_ioa_ld_io_addr:82,opal_err_inject_func_ioa_ld_io_data:82,opal_err_inject_func_ioa_ld_mem_addr:82,opal_err_inject_func_ioa_ld_mem_data:82,opal_err_inject_func_ioa_st_cfg_addr:82,opal_err_inject_func_ioa_st_cfg_data:82,opal_err_inject_func_ioa_st_io_addr:82,opal_err_inject_func_ioa_st_io_data:82,opal_err_inject_func_ioa_st_mem_addr:82,opal_err_inject_func_ioa_st_mem_data:82,opal_err_inject_type_ioa_bus_err64:82,opal_err_inject_type_ioa_bus_err:82,opal_error_event_typ:35,opal_error_pan:35,opal_errorlog:35,opal_event_console_input:[193,202,203],opal_event_dump_avail:50,opal_event_msg_pend:70,opal_event_pci_error:[147,148],opal_event_rtc:117,opal_except:42,opal_external_env:35,opal_flash_:[9,52,146,205],opal_flash_eras:42,opal_flash_manag:42,opal_flash_read:42,opal_flash_upd:42,opal_flash_valid:42,opal_flash_writ:42,opal_flash_xxx:9,opal_flush_consol:[291,292],opal_get:220,opal_get_device_tre:[38,42,135],opal_get_dpo_statu:[42,70],opal_get_epow_statu:[38,42,70],opal_get_messag:70,opal_get_msg:[38,42,70,165,291,292],opal_get_msi_32:[38,42],opal_get_msi_64:[38,42,134],opal_get_param:[20,42],opal_get_power_shift_ratio:42,opal_get_powercap:[15,42],opal_get_x:[38,42,134,316],opal_get_xive_sourc:[291,292],opal_handle_hmi2:[38,42,182,183,246,247,282,283],opal_handle_hmi:[38,42],opal_handle_interrupt:[38,42,133,231,233],opal_hardwar:[17,52,61,67,71,76,77,78,79,80,81,84,91,95,102,109,110,116,117,118,119,120,122,128,160,162,215,226,227,311],opal_hmi_flags_dec_lost:58,opal_hmi_flags_hdec_lost:58,opal_hmi_flags_new_ev:58,opal_hmi_flags_tb_resync:58,opal_hmi_flags_tod_tb_fail:58,opal_i2c_addr_10:60,opal_i2c_arbt_lost:60,opal_i2c_bkend_access:60,opal_i2c_bkend_overrun:60,opal_i2c_invalid:60,opal_i2c_invalid_cmd:131,opal_i2c_lbus_par:60,opal_i2c_nack_rcvd:60,opal_i2c_raw_read:60,opal_i2c_raw_writ:60,opal_i2c_request:[38,42,143],opal_i2c_sm_read:60,opal_i2c_sm_writ:60,opal_i2c_stop_err:60,opal_i2c_timeout:60,opal_id:106,opal_imc_counter_stop:61,opal_imc_counters_cor:61,opal_imc_counters_init:[37,38,42,231,233],opal_imc_counters_nest:61,opal_imc_counters_start:[38,42,231,233],opal_imc_counters_stop:[38,42,171,172,231,233],opal_imc_counters_trac:[61,282,283],opal_info:35,opal_input_output_err_evt:35,opal_int_eoi:[38,42],opal_int_get_xirr:[38,42],opal_int_set_cppr:[38,42],opal_int_set_mfrr:[38,42],opal_internal_error:[43,50,51,53,77,83,109,110,117,119,120,123,124,127,178,182,183,217,231,233],opal_invalid_cal:[38,42],opal_io_devic:35,opal_io_subsystem:35,opal_ipmi_msg:67,opal_ipmi_msg_format_version_1:67,opal_ipmi_recv:[38,42,131,143,147,149,231,232],opal_ipmi_send:[38,42,143,231,232],opal_leds_:[10,146],opal_leds_get_ind:42,opal_leds_set_ind:42,opal_lpc_:2,opal_lpc_fw:69,opal_lpc_io:69,opal_lpc_mem:69,opal_lpc_read:[2,38,42],opal_lpc_writ:[38,42],opal_map_p:100,opal_memory_subsystem:35,opal_messag:[38,42,45,55],opal_misc:35,opal_misc_err_evt:35,opal_miscellaneous_info_onli:35,opal_mpipl_add_rang:71,opal_mpipl_fadump:294,opal_mpipl_free_preserved_memori:71,opal_mpipl_query_tag:[38,40,42],opal_mpipl_register_tag:[38,42],opal_mpipl_remove_al:71,opal_mpipl_remove_rang:71,opal_mpipl_tag:71,opal_mpipl_tag_boot_mem:71,opal_mpipl_tag_cpu:71,opal_mpipl_tag_kernel:71,opal_mpipl_tag_op:71,opal_mpipl_upd:[38,40,42],opal_msg:[70,111,291,292],opal_msg_async_comp:135,opal_msg_dpo:114,opal_msg_entri:[291,292],opal_msg_epow:54,opal_msg_hmi_evt:58,opal_msg_occ:165,opal_msg_typ:70,opal_na:35,opal_nmmu_set_ptcr:[38,42,220],opal_no_mem:[17,53,60,77,118,120,127,311],opal_nod:[171,172],opal_normal_sys_platform_shutdown:35,opal_npu_destroy_context:[42,182,183,221],opal_npu_get_relaxed_ord:[38,42],opal_npu_init_context:[42,182,183,221],opal_npu_lpc_alloc:[282,284],opal_npu_lpc_releas:[282,284],opal_npu_map_lpar:[42,221,226,227,282,283],opal_npu_mem_alloc:[38,42,291,292],opal_npu_mem_releas:[38,42,291,292],opal_npu_set_relaxed_ord:[38,42],opal_npu_spa_clear_cach:[38,42,182,183],opal_npu_spa_setup:[38,42,182,183],opal_npu_tl_set:[38,42,182,183,272,275,276],opal_nvram_writ:[261,281,282,283],opal_nx_coproc_init:[38,42],opal_occ_msg:70,opal_p7ioc_num_pest_reg:84,opal_paramet:[17,42,43,45,46,48,49,50,51,52,53,55,56,60,61,66,67,69,71,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,112,113,117,118,120,122,124,127,129,160,246,247,261,281,282,285,311,316],opal_parti:[49,50,55,113,118,120,122,291,292],opal_pci_config_read_byt:42,opal_pci_config_read_half_word:42,opal_pci_config_read_word:42,opal_pci_config_write_byt:42,opal_pci_config_write_half_word:42,opal_pci_config_write_word:42,opal_pci_eeh_freeze_clear:[38,42],opal_pci_eeh_freeze_set:[38,42],opal_pci_eeh_freeze_statu:[38,42,275,282,283],opal_pci_eeh_freeze_status2:[38,42,291,292],opal_pci_err_inject:[38,42],opal_pci_get_hub_diag_data:[38,42],opal_pci_get_pbcq_tunnel_bar:[38,42],opal_pci_get_phb_diag_data2:[38,42],opal_pci_get_phb_diag_data:[84,291,292],opal_pci_get_power_st:[38,42],opal_pci_get_presence_st:[38,42],opal_pci_get_xive_reissu:[291,292],opal_pci_map_pe_dma_window:[38,42,134],opal_pci_map_pe_dma_window_r:[38,42,134],opal_pci_map_pe_mmio_window:[38,42,134],opal_pci_msi_eoi:[38,42],opal_pci_next_error:[38,42,83,147,148],opal_pci_p2p_en:99,opal_pci_p2p_load:99,opal_pci_p2p_stor:99,opal_pci_phb_mmio_en:[38,42,134],opal_pci_pol:[38,42,96],opal_pci_reinit:[38,42],opal_pci_reset:[38,42],opal_pci_set_hub_tce_memori:[291,292],opal_pci_set_mv:[38,42,134],opal_pci_set_mve_en:[38,42,134],opal_pci_set_p2p:[38,42],opal_pci_set_p:[38,42,134],opal_pci_set_pbcq_tunnel_bar:[38,42],opal_pci_set_peltv:[38,42,134],opal_pci_set_phb_capi_mod:[38,42,193],opal_pci_set_phb_mem_window:[38,42],opal_pci_set_phb_mmio_window:134,opal_pci_set_phb_table_memori:[134,291,292],opal_pci_set_phb_tce_memori:[291,292],opal_pci_set_power_st:[38,42,135,181,208,245,246,247],opal_pci_set_xive_p:[38,42,134],opal_pci_set_xive_reissu:[291,292],opal_pci_slot_:104,opal_pci_slot_empti:[226,227],opal_pci_slot_offlin:[104,135],opal_pci_slot_onlin:[104,135],opal_pci_slot_power_:[104,135],opal_pci_slot_pres:[226,227],opal_pci_tce_kil:[38,42,272,275,276],opal_pci_tce_kill_al:[106,272,275,276],opal_pci_tce_kill_p:[106,272,275,276],opal_pci_tce_kill_pag:[106,272,275,276],opal_permiss:[17,77,109,110,119,311],opal_phb3_num_pest_reg:84,opal_phb4_num_pest_reg:84,opal_phb_capi_mode_capi:102,opal_phb_capi_mode_dma:102,opal_phb_capi_mode_dma_tvt1:102,opal_phb_capi_mode_pci:102,opal_phb_capi_mode_snoop_off:102,opal_phb_capi_mode_snoop_on:102,opal_phb_error_data_type_p7ioc:84,opal_phb_error_data_type_phb3:84,opal_phb_error_data_type_phb4:84,opal_phb_error_data_version_1:84,opal_phb_get_opt:[38,42,298],opal_phb_option_mmio_eeh_dis:107,opal_phb_option_tve1_4gb:107,opal_phb_set_opt:[38,42,298],opal_platform_err_evt:[35,193],opal_platform_firmwar:35,opal_pm_dec_stop:[231,232],opal_pm_sleep_enabled_er1:48,opal_pm_timebase_stop:[231,232],opal_pol:[171,172,246],opal_poll_ev:[38,42,43,44,49,50,59,76,117,125,131,217,231,233,246,247,258,275,276,279,282,283],opal_power_cool:35,opal_prd:[147,161],opal_prd_msg:[38,42,70,226,227],opal_prd_msg_typ:70,opal_prd_msg_type_attn:70,opal_prd_msg_type_attn_ack:70,opal_prd_msg_type_fini:70,opal_prd_msg_type_init:70,opal_prd_msg_type_occ_error:70,opal_prd_msg_type_occ_reset:70,opal_predictive_err_degraded_perf:35,opal_predictive_err_fault_rectify_boot_degrade_perf:35,opal_predictive_err_fault_rectify_reboot:35,opal_predictive_err_gener:35,opal_predictive_err_loss_of_redund:35,opal_prev_reported_err_rectifi:35,opal_processor_subsystem:35,opal_query_cpu_statu:[38,42],opal_quiesc:[38,42,122,171,172],opal_rc_attn:35,opal_rc_cu_flash:35,opal_rc_cu_init:35,opal_rc_surve_statu:35,opal_read_nvram:42,opal_read_tpo:42,opal_reboot_full_ipl:[44,220],opal_reboot_mpipl:44,opal_reboot_norm:44,opal_reboot_platform_error:[44,58,202,204],opal_recovered_err_gener:35,opal_register_dump_region:42,opal_register_exc_handl:42,opal_register_opal_exception_handl:[291,292],opal_reinit_cpu:[38,42,124,146,147,148,177,182,183,226,227,228,260,273,274],opal_reinit_cpus_hile_b:115,opal_reinit_cpus_hile_l:115,opal_reinit_cpus_tm_suspend_dis:[177,182,183,231,234],opal_reinit_pci_dev:95,opal_remove_pe_from_domain:101,opal_reset_pci_fundament:96,opal_reset_pci_hot:96,opal_reset_pci_ioda_t:96,opal_reset_pci_link:96,opal_reset_phb_complet:96,opal_reset_phb_error:96,opal_resourc:[17,55,67,71,73,74,75,102,118,217,231,233,311],opal_resource_dealloc_err_evt:35,opal_resource_dealloc_event_notifi:35,opal_resource_sparing_ev:35,opal_resync_timebas:[38,42,275,276],opal_return:[162,215,226,227,282,285],opal_return_cpu:[42,112,115],opal_rtc_read:[42,108],opal_rtc_writ:[42,108],opal_run_pol:[246,247,261,281,282,283],opal_secvar_enqueu:118,opal_secvar_enqueue_upd:[38,42,311],opal_secvar_get:[38,42],opal_secvar_get_next:[38,42],opal_sensor_group_clear:42,opal_sensor_group_en:42,opal_sensor_read:[19,38,42],opal_sensor_read_u64:[38,42],opal_set:[220,316],opal_set_irq_config:316,opal_set_param:[20,42],opal_set_power_shift_ratio:42,opal_set_powercap:[15,42],opal_set_rtc_tim:[162,215,226,227],opal_set_x:[38,42,57,134,316],opal_sg_list:[47,50],opal_signal_system_reset:[38,42,113,220,231,232],opal_slw_set_reg:[38,42,231,232,246,247],opal_softwar:35,opal_src_type_error:35,opal_srctyp:35,opal_start_cpu:[42,112,131],opal_start_cpu_thread:124,opal_success:[17,43,44,45,48,49,50,51,53,54,55,60,61,67,69,71,72,74,75,76,78,79,81,82,83,84,85,86,87,91,92,93,94,97,99,100,102,104,107,108,109,110,112,113,114,115,116,117,118,119,120,122,123,124,125,127,128,129,135,160,162,215,220,226,227,231,232,246,247,275,311],opal_surveillance_err:35,opal_sync_host_reboot:[38,42,220],opal_sys_resource_deconfig_prior_err:35,opal_sys_resources_deconfig_by_us:35,opal_syscool_insf:54,opal_sysepow_cool:54,opal_sysepow_max:54,opal_sysepow_pow:54,opal_sysepow_temp:54,opal_sysparam_read:20,opal_sysparam_rw:20,opal_sysparam_writ:20,opal_syspower_chng:[54,70],opal_syspower_fail:[54,70],opal_syspower_inc:70,opal_syspower_incl:54,opal_syspower_up:54,opal_systemp_amb:54,opal_systemp_hmd:54,opal_systemp_int:54,opal_test:[38,42],opal_test_func:126,opal_thread_inact:112,opal_thread_start:112,opal_thread_unavail:112,opal_timeout:[109,110,119],opal_token_abs:46,opal_token_pres:46,opal_tpo_writ:[226,227],opal_trace_entri:[246,247],opal_unmap_p:100,opal_unrecoverable_err_degrade_perf:35,opal_unrecoverable_err_gener:35,opal_unrecoverable_err_loss_of_funct:35,opal_unrecoverable_err_loss_redund:35,opal_unrecoverable_err_loss_redundancy_perf:35,opal_unregister_dump_region:42,opal_unsupport:[42,43,44,49,50,60,67,73,78,79,80,81,82,83,84,85,86,87,88,90,91,92,93,95,96,97,98,99,100,101,102,103,104,105,106,107,109,110,115,118,119,120,122,123,129,130,134,177,182,183,226,228],opal_unsuppsort:93,opal_write_nvram:[42,261,275,276,281,282,283],opal_write_oppanel_async:[38,42],opal_write_tpo:42,opal_wrong_st:[51,114,124,128,158,187,191],opal_xive_alloc_vp:316,opal_xive_alloc_vp_block:[231,233,316],opal_xive_allocate_irq:[42,231,232,289,294],opal_xive_allocate_vp_block:42,opal_xive_any_chip:[231,232],opal_xive_donate_pag:42,opal_xive_dump:[42,224],opal_xive_dump_tm:[231,232],opal_xive_eoi:220,opal_xive_eq_always_notifi:316,opal_xive_eq_en:316,opal_xive_eq_escal:316,opal_xive_free_act:316,opal_xive_free_irq:42,opal_xive_free_vp_block:[42,231,233],opal_xive_get:220,opal_xive_get_irq_config:42,opal_xive_get_irq_info:[42,220],opal_xive_get_queue_info:42,opal_xive_get_queue_st:42,opal_xive_get_vp_info:42,opal_xive_get_vp_st:42,opal_xive_get_xirr:220,opal_xive_irq_eoi_via_fw:316,opal_xive_irq_lsi:316,opal_xive_irq_mask_via_fw:316,opal_xive_irq_shift_bug:316,opal_xive_irq_store_eoi:316,opal_xive_irq_trigger_pag:316,opal_xive_provis:316,opal_xive_reset:[42,220,224],opal_xive_set:316,opal_xive_set_irq_config:42,opal_xive_set_queue_info:42,opal_xive_set_queue_st:42,opal_xive_set_vp_info:[42,182,183],opal_xive_sync:42,opal_xive_vp_en:316,opal_xive_vp_single_escal:316,opal_xscom_addr_error:128,opal_xscom_busi:128,opal_xscom_chiplet_off:128,opal_xscom_clock_error:128,opal_xscom_ctr_offlin:128,opal_xscom_parity_error:128,opal_xscom_partial_good:[128,275,276],opal_xscom_read:[38,42],opal_xscom_timeout:128,opal_xscom_writ:[38,42],opalchecktokenstatu:46,opaleehfreezeactiontoken:[79,80],opalepowstatu:54,opalerrinjectfunc:82,opalerrinjecttyp:82,opalfreezest:81,opalhmi_error_malfunc_alert:70,opalhmi_xstoptyp:70,opalhmiev:70,opalio:84,opaliop7iocphberrordata:84,opaliophb3errordata:[84,282,283],opaliophb4errordata:84,opaliophberrorcommon:84,opallpcaddresstyp:69,opalmsg:165,opalmveenableact:98,opalpcierrorsever:92,opalpcireinitscop:95,opalpciresetscop:[95,96],opalpciresetst:96,opalpcistatustoken:[81,92],opalpeact:100,opalpeltvact:101,opalphbopt:107,opalsyscool:54,opalsysepow:54,opalsysparamperm:20,opalsyspow:54,opalsystemp:54,opalthreadstatu:112,opalv3:[42,56,88,89,90,93,97,98,101,103,105,291,292],opaqu:[19,120,226,227,316],opb:2,opdirti:4,opel_pci_set_mv:134,open:[2,4,19,36,132,138,139,140,144,159,171,172,176,196,202,203,205,208,219,220,221,222,224,225,226,227,228,231,232,252,256,261,268,273,274,275,276,278,281,282,283,284,291,292,311],openbmc:[171,172,182,183,187,206,226,227,249,250,253,255,273,274,275,288,291,292],opencapi:[25,38,75,171,172,178,231,232,272,277,284,285,291,292,295,296,298,299,310],opencomput:220,openpow:[52,132,133,138,141,146,161,164,165,171,172,182,183,201,203,220,221,222,224,226,256,268,273,275,291,292],openpower1:[4,178,182,183,231,233],openssl:[225,275],oper:[0,5,13,18,21,35,37,38,42,43,44,47,50,51,52,55,60,61,68,71,76,78,79,80,81,87,92,95,96,99,100,108,110,113,122,124,125,127,128,131,132,146,171,172,173,174,179,180,182,183,201,202,203,205,207,217,224,226,227,229,230,231,232,233,241,242,246,247,248,250,254,258,261,271,273,274,275,276,279,281,282,283,284,286,291,292,304,311,314],operand:[212,220],opfr:221,opp:[182,183],oppanel:[5,127],oppanel_lin:127,oppanel_line_t:127,opportun:[58,70,130,171,172,181,208,217,229,231,233,258,267,273,274,279,282,283],oppos:[246,247],ops:[18,88,90,97,98,101,103,105,158,187,191,202,203,220,226,228,229,230,281,282,283],opt:[36,107,171,172,273,274,275,298],optesthmihandl:182,optim:[13,134,147,148,171,172,184,185,202,203,226,227,231,232,251,275,276,287,291,292],optimis:[182,183,226,227,228,229,230,258,270,275,276,279,282,283],option:[0,2,4,5,17,19,21,22,43,50,58,71,77,107,114,115,132,134,141,146,150,161,171,172,184,193,202,203,204,205,217,220,224,226,227,228,229,230,231,232,233,238,246,247,253,258,273,274,275,276,279,282,283,285,286,287,291,292,298,311,314,316,317],order:[2,4,6,13,21,22,41,51,58,74,100,103,109,115,118,133,154,161,171,172,174,179,182,184,185,188,189,193,202,203,204,220,226,227,228,229,230,231,232,233,246,247,257,258,271,273,275,276,277,279,282,283,287,291,292,298,312,314,316],oreq:60,org:[133,138,140,220,229,246,247,275,276,282,291,292],organ:135,organis:[246,247],origin:[38,39,44,133,171,172,188,189,229,230,231,232,242,246,247,249,273,275,276,279,281,282,283],originagt:[147,149],orphan:[282,285],oss:[131,267,273,274],other:[2,10,13,21,41,43,44,50,51,52,54,77,78,92,100,101,102,103,110,113,115,127,131,132,133,135,136,138,139,140,145,147,148,151,154,159,161,162,169,171,172,173,178,193,196,203,215,217,220,221,226,227,229,230,231,232,233,236,246,247,248,250,258,261,272,273,275,276,279,281,282,283,286,288,291,292,311,312,313,316,317],otherwis:[36,70,86,129,135,141,171,172,181,184,185,201,202,203,207,208,213,216,220,221,226,227,228,231,232,243,245,246,247,257,261,273,274,275,276,278,279,281,282,283,285,291,292,316],otl:[75,246,247,291,292],our:[39,41,108,139,147,149,160,162,166,171,172,173,178,180,182,183,193,202,203,206,207,212,215,217,219,220,226,227,228,229,230,231,232,233,246,247,250,257,269,273,274,275,276,278,282,283,291,292],ourselv:[226,227,246,247],out:[1,2,5,17,21,35,36,40,41,44,49,50,54,60,68,71,74,84,87,107,112,114,122,133,134,135,141,147,148,150,154,160,162,165,167,171,172,173,174,175,176,180,181,182,183,189,202,203,206,207,208,214,215,219,220,224,226,227,228,229,230,231,232,233,235,236,241,246,247,248,251,259,261,267,268,273,274,275,276,277,280,281,282,283,284,285,287,291,292,299,307,309,311,314],out_eoi_pag:316,out_epow:54,out_esb_shift:316,out_escalate_irq:316,out_flag:[58,316],out_lirq:316,out_prio:316,out_qeoi_pag:316,out_qflag:316,out_qindex:316,out_qpag:316,out_qsiz:316,out_qtoggl:316,out_src_chip:316,out_stat:316,out_trig_pag:316,out_vp:316,out_xirr:63,outbound:[229,230],outdat:[231,233],outgo:189,outlast:140,outlin:35,output:[1,19,37,38,59,132,134,151,154,162,171,172,173,174,184,186,202,203,215,219,220,224,226,227,228,229,230,231,232,246,247,273,274,275,276,281,282,283,288,291,292,316],outsid:[42,56,103,229,230],outstand:[51,59,108,163,165,171,172,216,226,227],outstanding_event_mask:59,ov32:[246,248],over:[0,1,20,40,41,54,70,76,77,81,109,130,131,132,133,139,147,148,149,150,151,152,155,161,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,251,257,258,260,261,266,267,268,269,273,274,275,276,277,278,279,281,282,283,284,285,291,292,313,316],overal:[2,21,68,88,184,185,246,247,311,316],overflow:[37,171,173,202,203,224,226,227,228,246,248,269,275,276,288,291,292],overhaul:[258,279,282,283],overhead:[13,37,182,183,231,232],overid:[231,232],overidden:[282,283],overlai:84,overlap:[95,103,224,226,227,231,232,246,247,282,283],overread:[307,309],overrid:[135,161,171,172,202,203,204,220,221,224,226,227,231,232,246,247,261,275,276,281,282,283,285],overridden:221,overrun:[60,145,171,172,231,232,295],overview:7,overwit:[272,275,276],overwrit:[7,146,168,184,185,246,247,257,278,282,283,291,292],overwritten:[2,275,276,282,283,287,291,292],overwrriten:[268,273],own:[2,14,21,35,58,112,133,139,171,172,173,180,184,185,189,212,217,220,226,231,233,246,247,275,276,282,283,285,287,316],owner:[17,23,171,172,275,276,278,314,316],ownership:[112,226,227,275,276],ozlab:[138,140,220,229,246,247,282,291,292],ozrom1:[287,291,292],p00:[224,275],p10:[282,283],p2p:[99,229,230],p344fb62:[231,232],p5ioc2:[184,185],p5ioc:[42,291,292],p7ioc:[42,84,90,93,103,135,160,171,175,224,282,283,291,292],p7ioccsr:84,p7iocplssr:84,p89:[231,233],p8_i2c_check_initial_statu:[162,214,225],p8_i2c_check_statu:229,p8_i2c_recov:[231,233],p8_i2c_reset_engin:[266,273,274],p8_i2c_reset_port:[266,273,274],p8_pore_gen_cpufreq_fix:123,p8_pore_table_gen_api:123,p8dnu:136,p8dtu1u:[136,202],p8dtu2u:[136,202,213,220],p8dtu:[4,136,202,206],p8e:[257,278,282,283],p8i2c:[207,220],p98b6d83:[231,232],p9_cont_thread:[246,248],p9_darn_init:[282,283],p9_i2c_bus_owner_chang:[226,227,231,233],p9_sbe_msg:288,p9_sbe_msg_send:288,p9_sbe_termin:40,p9_stop_api:[123,133,171,172,231,232,242],p9_stop_save_cpureg:123,p9_stop_thread:[246,248],p9dsu2u:[259,280],p9dsu:[134,136,224,231,232,248,251,254,256,259,275,276,278,280],p9mambo:220,p9n:[177,182,183,226,227,275],p9p:[282,284,285],p9sdu:136,p_str:220,pa_featur:[229,230],pa_features_p9:[231,232],paca:[231,233],pack:[140,288,291,292,294,313],packag:[4,37,138,147,148,171,172,184,185,246,247,273,274,275],packet:[189,229,230],pad:[70,313],page:[2,72,88,115,171,172,173,175,181,202,203,208,220,224,226,227,228,241,255,267,269,273,274,275,276,291,292,316],pai:4,paidipeddi:[171,193,202,203,204,219,220,224,226,229,231,275],pain:[220,282,283,291],pair:[111,171,172,221,222,229,230,241,316],palmetto:[39,136,145,220,226,227,279,282,283],panda:[147,149],panel:[5,127],panic:[58,154,171,172,184,226,228,261,263,281,282,283,285,297],panic_flush_kmsg_end:[261,281,282,283],paper:[171,172],papr:[2,35,62,63,64,65,68,193,282],par:229,paragraph:100,parallel:[58,182,183,189,273,274,275,276,282,283],parallelis:[182,183,273,275,276],param:[20,70,130,146,171,173,220,224,273,274,291,292],param_id:77,paramet:[0,9,20,35,38,42,43,45,46,47,49,50,51,52,56,59,68,70,71,72,73,78,80,81,88,98,100,103,113,119,122,131,132,171,172,218,220,221,224,231,233,244,246,247,248,275,282,283,286,291,292,296,311,314,316],parametr:[171,172],paranoia:[171,172],parashar:[147,148,161,184,185,193,202,203],parent:[2,30,33,34,101,103,130,134,135,146,171,174,182,183,189,202,203,246,247,282,285,316,317],parent_p:[101,134],pariti:[58,60,128,146,171,172,182,183,231,236,246,247,261,269,272,275,276,281,282,285],paritit:[287,291,292],pars:[21,22,34,36,47,133,144,146,171,172,173,174,180,182,183,189,202,203,204,218,219,220,221,224,226,227,229,230,231,232,233,244,246,247,248,257,268,273,278,280,282,283,285],parse_arg:[273,274],parse_hdat:224,parse_i2c_dev:224,parser:[2,21,171,172,224,226,246,247,250],part:[2,4,22,26,28,34,35,37,39,44,50,58,60,68,71,88,113,114,130,132,135,138,139,141,145,171,172,180,181,182,184,185,187,194,202,203,204,208,219,220,221,226,227,228,229,230,231,232,235,240,246,247,256,257,267,273,274,275,276,278,282,283,291,292,298,316],parti:[220,314],partial:[49,128,131,135,146,157,187,189,193,200,202,203,204,226,227,249,261,281,282,284,287,291,292,316],particip:138,particular:[5,21,22,28,35,46,56,68,73,88,90,93,97,118,134,135,141,171,172,178,182,183,221,222,226,266,273,274,282,283,284,314],particularli:[171,172,182,183,275,276],partid:128,partit:[9,28,37,93,133,146,147,148,154,161,171,172,173,202,203,204,205,220,221,226,227,229,230,231,232,246,247,248,250,252,253,254,273,274,275,276,277,282,283,285,287,291,292,294,313],partition:[275,276],partner:141,pasid:[73,75],pass:[0,2,7,12,17,22,34,35,40,47,50,54,55,59,68,70,71,81,89,110,111,118,127,132,133,161,171,172,174,194,202,203,204,205,220,226,227,228,229,230,231,232,246,247,261,273,274,275,281,282,283,284,285,287,291,292,311,316],passthrough:[68,226,227],passthru:161,password:[291,292],past:[33,121,171,172,224,229,230,238,246,247,259,279,280,282,283,315],patch:[38,134,138,144,146,154,159,162,163,164,166,171,172,173,174,175,180,181,182,183,184,185,195,196,201,202,203,204,208,209,214,215,216,217,219,220,221,224,226,227,228,229,230,231,232,233,238,241,246,247,250,251,254,255,256,258,259,261,266,267,268,271,272,273,274,275,276,277,279,280,281,282,283,284,285,286,287,288,291,292],patchwork:[220,246,247,282,291,292],path:[6,13,20,39,41,43,58,86,104,113,130,147,148,149,156,161,162,163,171,172,173,174,176,181,182,183,184,198,202,203,204,208,211,215,216,217,220,222,224,226,227,231,232,233,241,245,246,247,252,256,257,258,261,273,275,276,278,279,281,282,283,286,287,291,292,295,316],path_max:275,patrick:[161,184,185,187,193,202,203,219,220],patrit:[246,247],pattern:[19,22,39,182,183,216,220,226,227,231,233,311],paul:[184,185],paus:[0,180,231,233,246,247,286,291,292],pause_microcod:306,pause_microcode_at_boot:[180,246,247],pavaman:229,pave:[171,172],payload:[0,38,39,133,146,154,171,172,174,202,204,220,229,230,271,275,276,291,292,311,314],payload_addr:[282,283],pb_cent_cresp_addr_error:197,pba:[2,221],pbcq:[2,27,87,171,172,174,182,183,226,228,246,247,282,283,285],pbi:[226,228],pcap:110,pcb:[2,317],pcb_addr:[128,275,317],pci0000:150,pci:[0,2,25,37,38,42,53,84,85,86,88,89,90,93,96,99,101,103,104,106,130,146,147,148,150,155,158,160,164,175,184,185,189,201,206,213,216,228,229,230,231,232,234,236,238,243,256,258,261,271,273,274,275,276,278,279,281,282,283,285,286,287,289,291,292,298],pci_addr:103,pci_bridge_power_on:[226,227],pci_bridge_wait_link:[226,227],pci_cfg_reg_filt:206,pci_command_mast:[231,236],pci_devic:[220,226,261,281,286,291,292],pci_device_id:[268,273,274],pci_enable_bridg:[226,227],pci_error_typ:[81,92,275],pci_get_slot_info:135,pci_mem_s:89,pci_mem_typ:88,pci_reset:[171,173],pci_scan_bu:[182,183,275,276],pci_scan_on:[182,183],pci_scan_phb:[182,183],pci_setup_phb:135,pci_slot:226,pci_slot_flag_enforc:[226,227],pci_slot_op:135,pci_slot_power_off:[201,202,203],pci_slot_set_power_st:[275,276],pci_start_addr:[88,89,134],pcicap_exp_cap_slot:221,pcicap_exp_devctl:220,pcicap_exp_slotctl:[226,227],pcie:[41,56,92,100,101,134,135,147,148,164,171,182,183,187,189,202,203,213,220,221,226,227,229,230,231,232,234,235,236,246,247,251,256,269,275,276,287,291,292],pcie_cap:221,pcie_slot_get_presence_st:[213,220],pciecap_exp_devctl:220,pciecap_sriov_ctrl_vf:220,pciex:[27,29,30,282,285],pciutil:[231,232],pcix:135,pcr:[171,172,173,260,273,274,291,292,314],pct:[258,279,282,283],pdbar:[37,171,172],pdbg:[246,248,282,283],pdc:[135,220],pdf:[202,203],pe_act:100,pe_handl:75,pe_mask:75,pe_numb:[79,80,81,82,88,89,90,97,99,100,102,105,106,134],pec0:[226,227,305],pec2:[102,226,227,250,268,269,271,273,275,276],pec:[30,171,172,174,226,228,268,271,273,275,276,282,283],peek:1,peer:[99,171,172,178,182,183,229,230,282,283,291],pegasu:[184,185,275],pel:[38,51,145,147,149],pelt:[97,134,275,276],peltv:[30,101],peltv_addr:134,penalti:[229,230],pend:[4,35,45,55,62,83,108,114,120,160,162,171,172,214,220,224,226,227,238,245,282,283],peopl:[1,136,139,141,202,204,220,229,230,261,273,274,281,282,285],per:[2,14,24,26,37,41,56,58,75,88,89,129,147,149,153,162,171,172,178,182,183,194,202,203,214,224,225,226,227,229,230,231,232,238,246,247,257,271,273,274,275,276,278,282,283,284,287,291,292,298,316,317],percentag:226,perf:[37,275,282,283],perfect:[246,247,275,276,282],perfectli:[2,43],perform:[0,2,13,22,35,37,41,47,50,96,102,131,132,133,134,153,166,171,172,173,174,176,178,179,182,183,201,202,203,220,224,226,227,228,229,230,231,232,236,238,246,247,258,261,267,269,270,272,273,274,275,276,279,281,282,283,285,291,292,311,314,316],peridoci:37,period:[35,37,42,58,124,219,220,221,222,224,225,226,227,228,229,230,246,247,258,275,276,279,282,283],perl:[36,275],perm:[20,273,274],perman:[41,76,78,117,131,135,171,172,173,178,182,183,220,226,228,241,250,266,273,274,275,276,296],permanantli:[226,227],permernantli:[266,273,274],permiss:[20,131],permit:[17,138,229,230],persist:[17,118,246,247,258,279,282,283,310,311],person:[134,138,139],perspect:139,perst:[134,135,202,203,226,228,229,230,268,273,282,283,287,289,291,292],pertain:201,pes:[30,97,100,105],pest:[30,272,275,276],pesta:84,pestb:84,petikernel:[171,172],petitboot:[0,4,36,71,132,145,154,166,171,172,195,202,203,220,221,231,232,260,275,276],pex8718:220,pex9733:220,pex9797:[275,276],pex:[213,220],pexpect:[178,182,183],pfir:[226,228,275,276],pfir_cach:[275,276],pflash:[147,148,161,166,174,176,184,185,190,191,193,202,203,205,206,219,220,224,229,230,231,232,246,247,253,273,274,275,276,282,283],pflash_to_copi:226,pgood:[246,247],pgreset:[226,227],ph2:[275,276],ph3:[275,276],phandl:[2,3,4,5,7,8,9,10,13,14,18,20,21,22,23,24,26,27,29,30,32,33,34,53,104,135,171,172,193,226,227,268,273,282,283],phase:[1,275,276,282,283],phb0:[146,154,226,227,305],phb1:220,phb3:[84,91,135,147,148,149,150,153,159,160,161,166,168,171,172,175,184,185,188,193,194,196,202,203,212,220,221,224,226,227,238,282,283,285,291,292],phb3_init:[147,148],phb3_init_capp_error:150,phb3_init_hw:[147,148],phb3_pci_msi_check_q:161,phb3_set_capi_mod:150,phb3_state_creset_wait_cq:[160,220],phb3_state_fenc:[160,220],phb3_state_freset_start:168,phb4:[78,84,106,134,174,175,179,182,183,193,220,221,224,235,236,238,243,246,247,248,250,251,255,256,258,265,269,271,272,273,279,282,283,285,287,289,298,301,303,306],phb4_:[287,291,292],phb4_assert_perst:[287,291,292],phb4_capp_recoveri:[282,283],phb4_check_reg:226,phb4_creset:[171,172,182,229,230,275,276,282,283],phb4_dump_app_err_reg:[171,172],phb4_eeh_dump_reg:[272,275,276],phb4_freset:[282,283,287,291,292],phb4_get_presence_st:[226,227],phb4_host_sync_reset:[282,283],phb4_hw_init:[287,291,292],phb4_init_capp_reg:[250,271,275,276],phb4_init_hw:[287,291,292],phb4_init_ioda3:[182,183,282,283],phb4_link_trac:[291,292],phb4_probe_stack:[182,272,275,276],phb4_root_port_init:[226,227,231,236],phb4_set_capi_mod:[182,183,282,283],phb4_slot_creset_wait_cq:[171,172,226,228],phb4_tce_kil:[272,275,276],phb4_training_trac:[291,292],phb5:310,phb:[2,27,29,30,41,42,56,74,75,79,81,82,84,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,105,106,107,134,135,147,148,150,154,160,161,168,171,172,174,179,182,183,184,185,193,201,202,203,204,212,220,221,224,226,227,228,229,230,231,232,236,246,247,251,259,261,269,271,272,273,274,275,276,280,281,282,283,284,285,287,291,292,298,316],phb_ffi_lock:161,phb_id:[42,56,73,74,75,78,79,80,81,82,84,87,88,89,90,91,92,93,95,97,98,100,101,102,103,105,106,107,134],phb_statu:[81,282,283],phbcsr:84,phberr:[226,228],phberrorlog0:84,phberrorlog1:84,phberrorstatu:84,phbfirsterrorstatu:84,phbid:[30,56,87,88,89,90,93,97,98,99,100,101,103,105],phbid_init:99,phbid_target:99,phbpblerrorlog0:84,phbpblerrorlog1:84,phbpblerrorstatu:[84,229,230],phbpblfirsterrorstatu:84,phbpciedlperrorlog1:84,phbpciedlperrorlog2:84,phbpciedlperrorstatu:84,phbplssr:84,phbregberrorlog0:84,phbregberrorlog1:84,phbregberrorstatu:84,phbregbfirsterrorstatu:84,phbrxearberrorlog0:84,phbrxearberrorlog1:84,phbrxearberrorstatu:84,phbrxearbfirsterrorstatu:84,phbrxemrgerrorlog0:84,phbrxemrgerrorlog1:84,phbrxemrgerrorstatu:84,phbrxemrgfirsterrorstatu:84,phbrxetceerrorlog0:84,phbrxetceerrorlog1:84,phbrxetceerrorstatu:84,phbrxetcefirsterrorstatu:84,phbtxeerrorlog0:84,phbtxeerrorlog1:84,phbtxeerrorstatu:84,phbtxefirsterrorstatu:84,phbver:84,philipp:[147,148,184,185,193],phosphor:[291,292],phy:[2,27,29,41,134,171,172,174,182,183,226,228,229,231,232,240,246,247,251,275,276,282,283,299],phy_map:[275,276],phy_reset:[171,172,229,231,232,240],phy_rx_clock_sel:[171,172,237,240],phy_rx_dccal:[171,172,240],phyp:[229,230],physic:[2,12,23,31,41,61,75,127,135,171,172,220,226,227,231,232,261,281,282,285,286,291,292,316],pib:[2,231],piccoli:[171,219,220,231],pick:[140,153,189,191,220,250,275,276,291,292,316],pid:[28,73,129,162,178,182,183,215,226,227,229,230,231,233,246,247,282,283,287,291,292],pie:[275,276],piec:[35,132,231,236],piggin:[171,202,203,219,220,224,226,229,231,275],pile:2,pin:[69,135,273,274,289,291,292],pir:[2,14,19,61,70,123,147,148,157,171,172,178,182,183,187,220,229,230,257,272,273,274,275,276,278,282,283,291,292,316],pkcs7:[307,309],pkcs7_get_content_info_typ:[307,309],place:[141,171,172,173,220,224,226,227,246,268,273,274,275,276,282,285,291,292,314],placehold:[131,273,274],placement:[182,183],plai:[171,172,282,284],plain:[133,171,175,203,254,275,276],plan:[172,173,174,175,183,184,185,186,193,194,202,203,204,205,220,221,222,224,225,227,228,230,232,233,234,235,236,246,247,248],planar:[171,172,231,232,259,273,274,275,276,280],plat:[20,146,273,274,275,291,292],platform:[0,2,4,5,17,20,23,25,33,35,38,41,43,44,46,47,50,51,71,77,106,114,116,118,120,122,123,124,132,133,135,141,145,146,147,148,149,151,158,159,161,162,164,166,173,174,175,178,185,188,201,206,214,215,216,217,221,222,225,227,228,229,230,233,234,235,236,238,248,251,261,277,279,281,285,286,287,288,289,293,294,295,298,299,300,304,305,310,311,314],platformw:23,plausibl:43,pldd:35,ple:35,pleas:[25,140,171],plid:[171,174,224],pll:[282,283],plu:[76,108,141],plug:[171,172,184,185,226,227,268,273,275,276,291,292],pluggabl:[135,171,175,220,256,278,282,285],plugin:[291,292],plumb:[171,172],plx:[135,213,220,221,226,227,282,285],pm_complex_reset:[231,232],pm_gp1:13,pm_mcs3_:24,pmax:[189,226,227],pmc:[202,203,221],pmcr:14,pmem0:[246,247],pmem1:[246,247],pmem:[273,282,283],pmem_disk:[246,247,273,275,276],pmem_volatil:[273,275,276],pmi:37,pmin:[189,226,227],pmu:37,pnor:[7,133,146,161,171,172,173,174,202,203,204,220,226,227,229,230,231,232,246,247,250,273,274,275,276,282,283,285,311,312,314],pnor_avail:[246,247],pnor_init:[246,247],pnppnp:2,pnv_ioda_p:106,pnv_ioda_reserve_p:201,pnv_pci_ioda2_tce_invalidate_p:106,pnv_pci_phb3_tce_invalid:106,pnv_pci_phb3_tce_invalidate_p:106,pnv_phb:106,pnv_phb_model_phb3:106,pnv_platform_error_reboot:[261,281,282,283],pnv_power_off:[217,231,233],pnv_prepare_going_down:[217,231,233],point:[1,2,3,5,13,15,21,22,24,27,35,36,37,39,56,61,68,72,75,84,85,86,88,89,90,93,97,98,101,103,104,105,108,133,141,159,162,171,172,174,178,182,183,193,196,215,217,220,226,227,228,229,230,231,233,245,246,247,248,258,261,273,274,275,276,279,281,282,284,285,287,291,292,316],pointer:[35,45,49,60,67,71,75,81,85,86,87,104,109,110,146,162,171,172,175,182,183,194,202,203,215,220,224,225,226,227,275,276,277,282,283,288,316],pointless:[182,183,226,231,232,246,247],poison:[202,203,226,227],poke:1,polic:88,polici:[20,22,47,182,183,220],poll:[41,108,134,135,154,171,172,173,182,220,226,227,229,230,254,275,276,282,283,286,287,291,292],poll_interv:[207,220],poll_link:135,poll_recurs:246,poller:[140,146,147,148,154,160,167,202,203,207,217,220,231,233,246,247,255,261,275,276,281,282,283],poller_recurs:246,pool:[35,181,208,267,273,274,316],poor:[281,282,283],poorli:[150,182,183,229,273],poppl:[147,148,171,184,185,187,193,202,203,219,220,224,226,229,231,275],popul:[2,15,35,135,144,145,171,172,180,182,183,195,202,203,220,221,222,224,226,227,229,230,231,232,246,247,268,269,271,272,273,274,275,276,282,283,316],popular:[291,292],pore:[123,133],port80:295,port80h:[291,292],port:[1,2,20,26,33,97,98,132,135,146,155,160,171,172,178,182,183,184,185,188,202,203,213,220,221,226,227,231,232,246,247,266,273,274,275,276,282,283,285,291,292,317],portabl:130,portion:[139,182,183,220,275,276],portstatusreg:84,posit:[21,22,46,62,114,171,172,221,226,227,231,233,246,247,254,261,275,276,277,291,292],possibl:[2,5,15,17,22,39,55,56,77,84,88,89,90,93,97,98,101,102,103,105,109,110,115,117,125,127,139,140,145,146,147,148,159,162,168,171,172,174,181,182,183,189,191,193,202,204,206,208,215,220,224,226,227,228,229,230,231,232,246,247,248,257,259,267,268,269,273,274,275,276,280,282,283,285,286,291,292,305,311,313,316],post:[7,37,44,71,139,201,226,228,296,316],postcondit:279,postfix:22,potenti:[146,157,171,172,181,187,208,224,226,227,229,230,240,245,246,247,267,273,274,316],power10:136,power7:[42,50,83,90,93,103,115,130,136,145,146,184,185,231,291,292,317],power8:[2,4,5,8,12,13,14,19,22,27,34,42,48,49,91,115,123,130,131,132,133,136,141,144,145,146,147,148,171,172,173,174,175,182,183,202,203,220,221,222,224,225,226,227,228,230,233,234,235,236,247,248,286,291,292,317],power8nvl:[136,257,278,282,283],power9:[4,5,8,13,14,22,29,30,33,37,38,41,42,44,49,58,106,115,120,123,131,133,136,173,174,175,182,183,204,219,222,223,225,233,234,235,236,238,246,247,248,270,272,285,291,292,298,317],power9c:136,power9n:[136,282,283],power9p:136,power:[0,2,4,5,19,21,22,28,33,34,35,36,38,40,41,42,43,54,56,70,85,102,104,118,122,123,130,132,133,134,135,136,138,140,147,148,151,153,166,174,175,176,184,185,201,202,203,204,205,213,216,217,219,220,221,222,224,225,228,229,230,231,232,233,246,247,256,258,266,273,274,275,276,278,279,282,283,284,291,292,302,310,312,313,316],power_ctl:[202,203],power_st:220,powerbu:[102,171,174,180,220,231,236,246,247],powercap:[13,110,229,230,282,283],powerflt:[213,220],powerkvm:[50,132,141,143,291,292],powermac:[202,204],powernv8:[291,292],powernv9:[291,292],powernv:[2,35,106,132,136,184,185,193,273,274,275,282,283,287,291,292],powernv_defconfig:[246,247],powernv_flash:[246,247],powernv_op_panel:[162,215,226,227],powernv_rng:[162,215,226,227],poweroff:[70,146],powerpc64:[36,138],powerpc64l:138,powerpc:[2,25,38,106,139,150,171,172,175,226,227,231,236,257,278,282,283],powersav:[13,282,283],powervm:[132,246,247],ppaidip:224,ppc405:132,ppc64:[138,202,204,246,248],ppc64el:[147,148,246,247],ppc64le:[138,246,247,248],ppc:[2,316],ppc_featur:22,ppc_feature2_darn:[180,182],ppc_feature2_scv:[180,182],ppc_stk_lroff:[282,285],ppm_special_wkup_hyp_reg:221,ppr:[246,247],pr_alert:1,pr_crit:1,pr_debug:[1,226,227],pr_emerg:[1,182,183],pr_err:[1,182,183,226,278],pr_error:[195,291,292],pr_fmt:[171,172,288],pr_info:[1,171,173,195,229,230,275,276],pr_insan:1,pr_notic:[1,171,172,173,275,276,291,292,299],pr_printf:1,pr_trace:1,pr_warn:[1,288],prabhu:[184,185,193],practic:[2,38,43,133,139,171,172,217,231,232,233,273,274,275],pradeep:[184,185],pradipta:[219,220],pratic:[282,283],prbs31:[182,183],prd:[6,31,128,146,147,148,149,164,166,170,173,178,181,185,193,198,201,205,208,220,224,231,232,233,251,254,255,267,273,274,275,276,282,285,287],prd_fw_msg:[171,172],prd_purge_cmd_reg_busi:275,prd_purge_cmd_trigg:275,prd_purge_cmd_typ:275,pre:[4,35,42,171,172,202,226,227,229,230,246,247,248,291,292,316],precis:[2,22,171,172,258,279,282,283,314],preconfigur:[226,227],predecessor:88,predict:[13,35,154,157,182,183,187,229,285],predictor:[282,285],preempt:306,preeti:[147,148],pref:188,prefac:22,prefer:[22,109,139,171,172,221,229,230,231,233,275,276,316],preferenti:[226,227],prefetch:[171,172,238,246,247,268,273],prefix:[2,24,219,226,227,228,246,247,273,274,291],prefr:[226,227],prehistor:[291,292],preliminari:[147,171,172,202],preload:[146,147,148,171,173,182,183],prem:[171,275],prepar:[55,125,135,226,229,230,231,273,274,279,282,283,287,291,292],prepare_hbrt_upd:[273,274],prepare_link_chang:[135,202,203],prereq:[282,283],prerequisit:140,prerror:[35,144,220,299],prescript:22,presdet:[213,220],presenc:[2,6,21,22,23,46,51,58,86,132,134,135,213,220,221,224,226,227,228,229,230,246,247,252,273,274,275,276,282,283,287,291,292],present:[2,4,5,8,12,13,22,28,29,32,33,34,41,42,46,48,50,51,67,70,75,84,102,106,114,120,121,127,132,139,141,145,147,148,157,162,171,172,173,177,182,183,187,193,201,202,203,206,213,215,217,220,224,226,227,228,229,230,231,233,246,247,258,266,268,270,272,273,274,275,276,279,282,283,291,292,313,316],preserv:[2,7,40,71,132,293,313],preset:[171,172],pressur:[231,232],presum:[42,246,247,273,274],pretermin:41,pretti:[1,108,117,171,172,202,203,220,231,232,246,247,286,291,292],prettier:[147,149],prev:[146,171,174],preval:151,prevent:[77,79,95,147,148,160,161,171,172,174,182,183,202,204,226,227,229,230,231,232,246,247,250,251,254,266,268,273,274,275,276,277,282,283,285,287,288,289,291,292,311,313,316],previou:[109,110,118,119,120,138,143,147,171,172,173,174,178,179,180,181,182,203,204,217,226,231,232,233,246,247,249,250,251,252,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,278,279,280,281,282,283,288,289,290,291,292,312,316],previous:[73,75,81,147,148,154,162,171,172,220,224,226,227,231,232,234,271,272,275,276,287,291,292,316],prevous:221,price:[282,283],pridhiviraj:[171,193,202,203,204,219,220,224,226,229,231,275],primari:[2,35,58,171,172,193,202,203,246,247,272,275,276],primarili:56,principl:39,print:[0,1,39,126,134,147,149,154,160,162,171,172,173,178,182,183,199,200,202,203,207,215,220,221,224,226,227,228,229,230,231,232,236,246,247,253,257,261,268,273,274,275,276,278,281,282,283,284,287,288,291,292,306],print_:145,printf:[1,35,36,44,126,220,224,226,227],printk:[217,231,233],prio:[220,316],prior:[5,8,42,43,100,106,120,134,146,147,149,165,180,202,204,224,231,232,246,247,258,261,279,281,282,283,286,291,292,311,312,313],prioriti:[1,28,57,62,68,121,129,132,134,147,148,171,172,174,182,183,200,226,227,229,230,316],privat:[35,139,313],privileg:[21,22,171,175],prlog:[1,164,171,172,226,227,246,247,278,288],pro:161,proactiv:[166,182,183],probabl:[58,133,155,171,172,184,185,231,232,250,259,261,273,274,275,276,280,308],probe:[0,86,135,182,183,189,220,221,226,227,246,247,261,272,273,274,275,276,279,281,282,283,285],probe_phb4:[272,275,276],problem:[21,50,68,78,134,139,140,145,160,171,172,173,176,178,181,182,183,202,203,204,208,212,219,220,224,226,227,228,229,230,231,232,236,238,245,246,247,250,251,252,257,258,266,273,274,275,276,278,279,282,283,285,287,288,291,292],problemat:[2,246,247,282,283],proc0:[171,172,182,183,249,282,285],proc1:[171,172],proc:[2,36,37,70,109,110,119,141,171,174,220,226,227],proc_chip:[171,172,246,247],proc_gen:146,proc_init_data:220,proc_int_lin:220,proce:[131,182,261,281,282,283],procedur:[40,41,171,172,174,180,182,183,202,203,226,227,228,229,231,232,237,239,240,246,247,262,268,269,273,274,275,276,282,283,291,292,295,311,313],proceed:[182,183,246,248],process:[0,17,23,28,35,37,71,73,75,77,118,122,133,134,147,148,161,162,164,171,172,173,182,183,184,185,187,193,197,202,203,204,215,217,219,220,221,224,226,227,229,230,231,233,258,266,273,274,275,276,279,282,283,287,291,292,306,312,313,315,317],process_occ_reset:[226,227,231,232],process_one_work:[217,231,233,261,281,282,283],processor:[2,5,6,14,26,28,33,34,35,40,43,44,50,51,57,58,67,68,70,73,77,93,103,110,114,115,120,121,122,130,132,134,170,171,172,180,182,183,184,185,194,219,220,226,227,231,232,234,241,246,247,257,268,271,273,274,275,276,278,282,283,285,304,308,316],procudur:41,produc:[2,134,141,178,182,183,220,226,257,275,276,277,282,283,291,292],product:[25,26,38,140,141,171,172,202,203,204,205,206,220,226,228,282,283,304,314,316],profil:[229,230],prog:[213,220,282,285],progif:41,program:[37,40,41,56,71,171,172,197,202,203,220,226,227,229,230,231,232,237,260,273,274,275,276,282,283,316],programm:[246,247],progress:[0,35,41,96,109,110,113,119,127,146,184,186,204,206,220,229,230,263,268,273,275,276,282,283,285,286,291,292],prohibit:81,project:[22,138,171,172,182,183,202,203,220,282],promin:[202,203],promot:295,prompt:[171,172,195,202,203,220,221],prone:220,prop:21,propag:[229,230,291,292],proper:[7,171,172,175,193,220,226,227,257,271,275,276,282,284],properli:[2,17,118,133,161,162,171,172,173,182,183,193,197,202,203,206,212,213,215,220,222,226,227,228,229,230,231,232,233,238,275,276,282,283,287,291,292,306,311,312,314],properti:[2,6,7,8,9,10,13,14,15,16,17,18,19,20,21,22,24,29,34,38,44,56,59,69,70,84,87,88,89,90,93,97,98,99,100,101,103,105,110,114,121,130,132,134,145,151,155,171,172,173,174,175,182,183,184,185,187,194,201,202,203,204,220,222,226,227,228,229,230,231,232,234,246,247,250,255,257,258,268,273,274,275,276,279,282,283,285,287,291,292,312,315,316,317],propos:[182,183,231,232,261,291,292,311],propreti:[114,204],proprietari:28,protect:[171,172,202,203,240,246,247,254,256,275,276,277,282,283,311,313],protector:[144,160,171,172,184,185,202,203,212,220],protocol:[22,35,171,172,182,183,220,226,227,231,232,250,251,258,275,276,279,282,283,285,291,292],protoocol:[250,275,276],prove:[140,226,228,291,314],proven:[171,172,273,274,291,292],provid:[0,2,9,21,22,23,28,34,35,37,41,44,51,58,71,75,118,119,120,121,123,132,133,138,139,157,161,171,172,182,183,187,189,202,203,220,221,224,225,226,227,229,230,231,232,233,246,247,251,257,258,273,274,275,276,277,279,282,283,285,291,292,298,304,311,312,314,315,316],provis:316,proxi:[231,232],prsv:[171,172],psafe:[201,202,203],pseri:132,pseudo:[131,273,274],psi:[2,144,146,151,153,171,172,202,203,217,220,226,227,231,233,299],psihb:2,psl:[102,171,172,182,183,231,232],psr:[13,109,171,172,229,230],psscr:[220,231,232],pstate:[70,145,171,172,173,174,178,182,183,189,201,202,203,226,227,248,280,282,283,310],pstore_dump:[261,281,282,283],ptcr:72,pte:193,pter:[231,232],ptr:[41,171,172],publicis:[226,227],publicli:[136,273],publish:[40,226,227,314],pull:[122,171,172,175,220,231,232],pump:[220,269,275,276],punish:[291,292],punt:[182,183],pure:[2,66,132,133,140,143,206,275,276],purg:[275,287,291,292],purpos:[2,4,41,42,83,133,134,140,171,172,173,182,183,220,231,232,246,247,250,275,276,291,292,304,316],purr:[2,58,146],push:[35,171,172,220,224,241,258,279,282,283],put:[2,13,35,56,58,133,171,172,174,179,182,183,193,202,203,204,205,206,216,220,226,227,228,229,238,246,247,258,275,279,282,283,287,291,292],putmemproc:224,putscom:[182,202,203,229,230],putspi:275,pvr:[136,161,171,172,182,220,226,227,229,230,257,275,276,278,282,283],pvr_type_p9p:[282,283],pwc:115,pwr:135,pwrctl:[282,283],python:[202,203,273,274],qemu:[132,147,148,184,185,202,203,220,221,226,228,273,274,279,282,283,286,287,291,292],qemu_bin:273,qflag:316,qindex:316,qpage:316,qsize:316,qtoggl:316,qtrace:[171,172,202,203],qtracer:[171,172],quad:[14,171,172,275,276,282,283],quadrat:[275,276],qualiti:139,queri:[54,57,70,71,74,118,158,171,172,184,185,190,191,193,231,234,246,247,256,273,274,275,276,278,282,283,284,316],question:[229,230],queu:[62,67,70,129,162,202,203,215,220,268,272,273,274,275,276],queue:[35,38,62,67,68,118,131,146,162,165,171,172,201,202,203,213,215,220,224,226,227,228,229,230,231,232,258,275,279,282,283,312],quick:[171,172,254,275,276],quicker:[171,172],quickli:[182,183,268,273,286,291,292],quiesc:[113,180,182,231,232,246,247,248],quiescd:[246,248],quiesce_hold:113,quiesce_lock_break:113,quiesce_reject:113,quiesce_resum:113,quiesce_resume_fast_reboot:113,quiescent:316,quiet:[1,273],quieten:[171,172,246,247,248,252,272,273,274,275,276],quirk:[146,193,202,203,211,220,268,273,274],quirk_no_chiptod:[275,276],quirk_no_rng:[291,292],quit:[44,150,171,172,182,183,220,229,230,250,273,274,275,276,282,284,291,292,314],quiten:[246,247],r10:132,r11:[275,276,282,285],r12:[132,225,275,276],r13:[132,160,212,220,246,247,282,283],race:[146,147,148,157,159,162,171,172,187,191,194,196,202,203,215,217,220,229,231,233,241,246,247,257,278,282,283,316],rach:241,raci:[246,247],racili:[171,172],rack:[275,276],rackspac:136,radix:[72,115,194,202,203,220,226,227,282,285],rafael:202,raid:[282,283,287,291,292],rainier:[136,310],rais:[19,108,122,160,171,172,182,183,193,220,226,227,229,230,231,232,240,246,247,275,276,291,292,311,315],ram:[45,147,148,273,274,275,276,282,283],ramanna:[184,185],ran:[71,162,165,215,224,226,227],random:[28,171,172,180,182,198,202,203,220,226,227,229,231,232,241,259,280],rang:[2,7,13,15,24,30,31,40,50,56,74,88,89,93,100,103,107,134,147,149,155,165,171,172,174,181,182,183,184,185,202,203,208,220,221,222,224,226,227,229,230,242,254,257,258,267,273,274,275,276,277,279,282,283,284,291,292,316,317],ranganathprasad:[171,275],raptor:136,rare:[153,159,169,170,196,226,227,241,246,247,248,279,282,283],rashmica:275,rate:[2,52,75,145,165,182,183,184,185,265,305],rate_phi:75,rate_sz:75,rather:[1,42,44,76,110,115,117,130,131,132,144,150,152,171,172,173,177,178,182,183,184,185,193,198,202,203,206,220,221,222,224,226,227,229,230,231,232,238,239,240,246,247,250,251,253,254,257,258,259,261,272,273,274,275,276,278,279,280,281,282,283,285,287,291,292,298,311,312],ratio:[16,38,42,229,230],raw:[2,182,183,202,203,275,276,281,282,283,287,291,292],rawhid:[220,224,275],rbr:[231,232],rc1:[5,38,42,81,139,142,146,153,171,173,182,186,192,194,202,204,217,219,221,223,225,226,228,229,231,233,246,248,268,273,275,277,282,284,291],rc2:[8,38,139,142,146,171,174,192,202,205,219,222,223,226,231,234,246,275,282,285],rc3:[38,139,142,146,171,175,202,206,231,235,236,282],rc4:[4,38,139,142,171,202,231,268,273],rc5:[38,142,231],rc_rom_verifi:[171,174],rcs:136,rcu:[193,208,217,231,233],rcu_dynticks_eqs_exit:37,rcu_idle_ent:37,rcu_sch:[217,231,233],rcx:139,rdy:[171,174,246,248,261,281,282,283],reach:[0,50,101,118,171,172,226,227,258,279,282,283,287,291,292,316],reaction:51,reactiv:[182,183],read:[0,2,9,12,20,28,35,37,41,50,51,52,67,68,69,70,76,77,78,87,102,107,108,109,110,117,120,128,129,132,133,146,161,162,171,172,175,176,182,183,184,185,188,193,194,202,203,204,205,208,215,217,220,221,222,224,226,227,229,230,231,232,246,247,250,251,252,253,254,258,261,268,269,271,272,273,274,275,276,277,279,281,282,283,285,287,291,292],read_core_fir:[275,276],read_prd_msg:287,readabl:[21,22,35,132,134,171,172,202,203,226],reader:[132,291,292],readi:[35,202,203,258,261,279,281,282,283,284,291,292],readlin:[273,274,282,285],readm:[291,292],readoffset:[129,268,273,274],readonli:[220,282,285],real:[36,37,38,41,42,47,60,88,89,93,103,132,134,140,153,171,172,178,182,183,193,202,203,220,227,231,232,273,274,287,291,292,316],realist:[229,230],realiti:[246,247],realli:[165,171,172,202,204,226,227,228,229,230,246,247,261,273,274,275,276,281,282,283,285],realloc:[269,275,276,287],reap:13,rearrang:[231,232],reason:[5,17,35,42,46,50,51,58,70,121,122,132,139,171,172,182,183,220,224,226,227,228,238,246,247,250,253,258,268,272,273,274,275,276,279,282,283,291,292,304,311,312],reason_cod:35,reasoncod:[171,174],reassoci:[217,231,233],rebalanc:[291,292],reboot2:40,reboot:[0,35,40,47,51,70,102,113,145,146,147,148,149,151,152,154,162,173,174,178,184,185,202,203,204,214,224,226,231,232,246,247,250,257,258,261,263,268,272,273,274,278,279,280,281,282,283,285,286,289,291,292,294,296,297,298,305,313],reboot_typ:44,rebuild:[224,246,247,291,292],recal:[275,276],recalcul:313,receipt:54,receiv:[28,35,57,60,70,75,104,121,129,131,133,144,153,162,166,171,172,173,182,183,187,189,215,220,226,227,229,230,231,232,246,247,248,258,268,272,273,274,275,276,279,282,283,284,288,314],recent:[14,139,140,171,172,182,183,194,195,202,203,219,220,224,229,230,231,232,246,247,257,268,273,275,277,279,282,283,291,292],reciev:[226,227,228,261,281,282,285],recip:[22,246,248],recipi:[273,274],recogn:[229,230,316],recognis:[171,172,220,250,275,276],recommend:[2,44,88,132,138,147,148,157,165,171,172,178,179,180,181,226,227,249,250,251,252,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,278,279,280,281,286,287,288,289,290,294,295,296,297,299,300,301,302,303,305,306,307,309,311,316],reconfigur:[171,172,242],reconstitut:316,record:[51,84,138,154,161,171,172,182,183,219,221,231,232,282,283,291,292,294,314,316],record_id:[182,183],record_typ:35,recov:[58,70,150,157,159,162,166,171,172,178,182,183,187,193,196,215,226,227,229,230,240,246,247,258,261,279,281,282,283,285,287,291,292,313],recover:[58,122,159,171,172,196,202,203,231,232,272,275,276,282,283],recoveri:[6,58,70,102,134,146,150,161,164,169,170,171,172,181,182,183,208,226,227,228,229,230,231,232,236,242,246,247,251,258,267,271,272,273,274,275,276,279,282,283,284,287,291,292],recurs:[146,160,171,172,207,220,246,247,273,274],redbud:[282,283],redefin:313,redirect:[155,226,228],redistribut:138,redo:168,redon:[282,283],reduc:[102,144,147,148,153,171,172,182,183,193,220,226,227,231,232,236,254,258,273,274,275,276,279,281,282,283,287,291,292],reduct:[182,183],redund:[35,162,215,246,247,258,279,282,283],ref:[35,58,67],refactor:[146,161,171,172,182,183,226,227,237,282,283,298],refcount:[182,183,246,247,282,283,287,291,292],refer:[5,9,10,13,21,24,25,35,37,41,68,70,73,107,118,126,131,132,141,171,172,217,220,221,226,228,231,232,233,246,247,273,274,287,291,292,311],referenc:[2,31,311],reflect:[35,88,171,172,182,183,213,220,226,227,246,247,259,280],reformat:[275,276,313],refresh:136,refus:[213,220],reg:[2,3,9,13,24,26,27,28,29,30,31,32,33,69,84,106,130,162,171,172,178,182,183,197,202,203,215,220,226,227,241,245,246,247,257,273,274,275,276,288,301,316,317],reg_format:[130,257,275,276],regard:[35,68,86,135,188,189],regardless:[182,183,229,230,258,279,282,283,316],regb:[84,229,230],regex:[224,226,227],region:[2,3,27,31,33,38,39,50,89,103,171,172,173,175,180,182,183,184,185,202,203,220,221,224,226,227,228,231,235,238,246,247,254,261,275,276,277,281,282,283,311,313,314],regist:[2,13,21,22,28,40,42,50,51,58,69,70,71,84,87,115,122,129,132,135,146,147,148,149,150,159,162,171,172,173,174,176,178,182,183,188,193,195,196,197,199,200,202,203,213,214,219,220,221,224,226,227,228,229,230,231,232,236,238,242,245,246,247,248,251,255,257,261,268,269,271,272,273,274,275,276,278,281,282,283,284,285,287,289,291,292,302,314,316,317],register_consol:[291,292],register_dump_region:146,register_early_udbg_consol:[291,292],registr:[7,38,71,208,231],regress:[13,220,246,247,282,285,287,291,292],regular:[4,29,219,220,221,222,223,224,225,226,227,228,246,247,275,276,311],reimplement:135,reinit:[95,115,133,171,174,231,234],reinit_scop:95,reiniti:[115,221],reinstat:[229,230],reject:[17,47,171,172,178,182,183,246,247,261,281,282,285],rel:[133,147,148,184,185,292],relai:131,relat:[17,22,35,41,49,58,61,68,69,70,76,131,159,171,172,182,183,195,196,202,203,205,220,226,227,229,231,232,246,247,257,266,269,273,275,276,291,292,310,311,316],relationship:[34,146],relax:[41,74,182,183,275,276],releas:[4,35,42,49,67,71,75,81,113,131,132,136,141,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310],relev:[13,29,35,42,44,246,247,248,291,292,316],reli:[5,58,101,106,131,132,135,171,172,182,183,193,202,204,229,230,238,246,247,273,275,276,277,282,283,287,291,292,316],reliabl:[70,147,148,213,220,226,228,246,247,273,274,282,293],relianc:[164,246,247,282,285],relic:[132,229,230],relief:[231,232],reliev:[182,183],reload:[43,129,151,162,163,209,213,214,215,216,217,220,224,229,231,233,268,273,274,275,276],reloc:[103,193],remain:[1,37,39,41,70,108,114,171,172,173,182,183,202,203,217,222,226,227,231,232,246,247,248,258,275,276,279,282,283,287,291,292,313,316],remaind:[4,182,183],remap:[171,172,238,273,274],remian:[201,202,203],remind:[287,291,292],remnant:[42,291,292],remot:[144,171,172,222,259,280,314],remov:[0,2,22,38,44,61,71,81,90,93,101,103,104,130,134,135,136,137,144,146,147,148,161,162,164,172,174,179,182,183,187,193,202,203,204,206,215,221,226,228,229,230,232,241,246,247,254,258,261,262,266,267,268,273,274,276,277,279,281,286,287,295,305,306,311,315,316],renam:[130,147,148,171,172,182,183,220,226,227,246,247,250,275,276,291,292],render:[246,247,313],rendez:[246,247,272,275,276],rendezv:[246,247],renegoci:220,rent:220,renumb:[226,227],reorder:[273,274],repeat:[291,292],repeatedli:[282,283],repetit:306,replac:[1,8,34,42,50,68,130,132,146,147,148,149,154,171,172,176,177,178,179,180,181,188,189,190,195,196,197,198,199,200,201,202,204,207,208,209,210,211,212,213,214,215,216,217,218,237,238,239,240,241,242,243,244,245,246,247,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,275,276,278,279,280,281,282,285,286,287,288,289,290,291,292,294,295,296,297,299,300,301,302,303,305,306,307,309],replai:[121,314,316],repli:[139,256,278,282,283,284],repo:36,report:[17,35,36,41,58,70,117,127,130,132,139,147,148,149,153,157,161,164,169,172,174,175,177,181,182,183,184,185,187,193,202,203,204,208,230,232,242,246,247,248,250,251,258,261,267,268,271,272,273,274,276,279,281,282,283,284,285,291,292,301,311,312,316],report_cl_pair:316,report_error:35,repositori:[171,172,275],repost:[162,215,291,292],repres:[2,4,14,15,16,18,19,21,28,31,33,34,49,56,76,77,88,89,90,93,97,98,103,105,121,135,171,172,175,202,203,220,282,283,291,292,314,316,317],represent:[2,24,132,267,273,274],reproduc:[246,247,282,283],reprogram:58,requent:131,request:[14,23,28,37,41,43,44,47,50,58,60,67,68,70,71,73,74,75,76,77,78,84,96,97,102,108,109,110,115,117,118,119,120,121,122,127,129,131,135,139,146,147,149,162,166,171,172,182,183,189,193,201,202,203,208,213,215,217,220,226,227,229,230,231,232,234,246,248,255,258,261,265,269,271,273,274,275,276,277,279,281,282,283,285,286,291,292,305,315,316],request_en:74,requeu:[273,274],requi:[226,228],requir:[0,2,4,17,21,22,28,35,41,42,46,49,52,56,58,70,76,84,91,117,118,122,126,130,131,132,135,147,149,150,161,162,171,172,174,179,182,183,193,201,202,203,214,217,221,224,225,226,227,229,230,231,232,233,246,247,248,251,258,266,267,273,274,275,276,279,282,283,284,285,286,287,289,291,292,298,304,310,311,314,316],requisit:40,requr:23,requri:73,rerun:41,rescu:134,resend:[35,50,51,159,171,172,191,258,279,282,283],reserv:[0,3,7,15,16,21,23,24,25,30,32,35,38,39,41,42,60,103,117,131,132,133,139,147,148,149,165,171,172,175,181,182,183,193,201,202,203,208,220,221,222,224,226,227,228,229,230,231,232,246,247,248,250,261,267,273,274,275,276,281,282,284,286,291,292,296,314,316],reserved2:60,reserved_1:70,reset:[0,1,4,41,43,50,68,70,87,96,100,113,122,129,133,134,135,144,150,151,158,160,162,163,167,168,171,172,173,174,175,178,180,182,183,184,185,190,191,193,201,202,203,205,209,211,212,213,214,215,216,217,220,221,224,226,227,228,229,230,231,232,233,236,238,241,245,246,247,251,255,258,261,264,266,268,273,274,275,276,279,280,281,282,283,287,288,289,291,292,296,298,307,309,311,316],reset_ntl:[171,172,237,240,291,292],reset_ntl_releas:[291,292],reset_partit:[231,232,287,291,292],reset_pm_complex:[226,227,231,232],reset_scop:96,resev:[224,226],resid:[13,145,171,172,182,183,229,231,236],residu:[58,146,246,247],resili:[158,190,205],resist:[118,311,313],resolut:[281,282,283,291,292],resolv:[171,172,191,194,224,226,227],resons:209,resort:[5,182,183,282,283,313],resourc:[0,19,37,67,68,100,131,134,139,146,147,148,171,172,173,204,229,230,231,232,261,267,273,274,275,276,281,282,283,286,291,292],resource_dealloc:35,resource_id:[26,171,172],resp_siz:[231,232],respect:[5,34,58,171,172,224,252,258,268,269,273,275,276,279,282,283,285,311,316],respond:[98,162,171,172,215,226,227,229,230,242,258,266,273,274,279,282,283,287,291,292,313],respons:[35,67,70,73,108,109,110,117,119,157,161,162,167,168,171,172,182,183,187,193,202,203,209,215,217,226,227,228,229,230,231,233,238,246,247,256,258,261,266,268,269,273,274,275,276,279,281,282,283,286,288,291,292,311,314,316],respos:[163,216,226,227],respresent:[246,247],rest:[51,220,226,227,246,247,261,275,276,281,282,283,287,291,292,311],restart:[162,193,215,220,226,227,261,281,282,283,287,291,292],restor:[13,123,171,172,201,202,203,226,227,229,230,231,232,236,246,247,248,251,258,275,276,277,279,282,283,316],restrict:[171,174,246,247,291,292],restructur:[202,203],result:[4,14,40,43,47,56,101,108,131,139,150,157,171,172,174,182,183,187,197,201,202,203,204,208,213,220,226,227,229,230,231,232,233,243,246,247,254,257,258,261,266,268,271,273,274,275,276,277,278,279,281,282,283,285,286,287,288,291,292,314,316],resum:[0,113,226,227,231,232,246,248],resvp:[261,281,286,291,292],resync:[58,116],resynchronis:116,ret:[231,232],ret_from_kernel_thread:[217,231,233,261,281,282,283],retain:[171,172,231,232,275,276],retrain:[226,228,231,232,251,275,276,282,283],retreiv:[50,54,77,81,83,84,92,110,112,117,125],retri:[43,44,58,76,125,134,153,158,160,162,168,171,172,190,191,193,202,203,208,213,215,217,220,226,227,228,229,230,231,232,233,236,242,243,258,261,269,271,273,274,275,276,279,281,282,283,287,291,292],retriev:[7,38,40,51,53,71,84,85,86,117,118,135,220,221,226,272,273,275,276,282,283,300,316],retrigg:316,retriv:[70,135],returend:42,reus:[41,226,227,246,247],rev:[41,134,164,213,220,251,273,274,275,276],reveal:[201,202,203],revers:[171,172,193],revert:[145,146,171,172,175,182,183,202,204,229,230,231,234,305],review:[2,132,139,147,148,161,164,184,185,187,193,202,203,204,259,280],revis:[21,26,27,30,41,134,141,159,171,172,174,182,183,196,202,203,224,226,227,229,230,231,232,273,274],revisit:[171,172,273,274],revolv:[275,276],reword:[195,202,203],rework:[146,171,172,184,186,193,202,203,204,220,226,227,231,232,246,247,258,273,274,275,276,279,282,283,296],rewrit:[220,226,227,231,232,246,247,275,277],reza:[171,219,226,229,231,275],rfc:[139,220],rhel6:150,rhesu:[2,136,151],rick:[229,230],rid:[16,97,100,134,147,149,182,183,189,202,203,226,228,273],right:[2,28,37,138,152,171,173,178,182,183,184,185,226,227,228,246,247,258,268,272,273,275,276,279,282,283],ring:316,riser:[246,247,259,280],riser_id:[256,278,282,283],risk:[224,273,281,282,283],rlen:225,rmw:[226,227],rng:[171,172,229,230,241],road:231,rob:229,robert:[171,231],robust:[168,171,172,231,258,279,282,283],role:[153,282,284],roll:[224,275,277],rollov:164,rom:[23,171,172,202,203,291,292,314],romcod:[202,203],romem:[275,276],romulu:[136,171,172,220,246,247,250,273,274,279,282,283,285,291,292],room:[53,226,228,258,279,282,283,291,292],root:[33,34,38,53,88,132,135,160,167,171,172,174,188,202,203,221,224,226,227,231,232,246,247,258,275,276,279,282,283,285,291,292,314],rootcmplxstatu:84,rooterrorstatu:84,rootf:[246,247],ror:35,rough:[22,171,172],roughli:[36,76,139,141,168,184,185,217,229,231,233,258,279,282,283,313],round:229,rout:[2,41,58,171,172,189,202,203,316],routin:[67,171,172,220,226,227,246,247,271,275,276],rpm:[4,184,185],rpr:[147,148,226,227],rr_queue:[163,216,226,227],rrba_addr:134,rsrc:34,rst0027:10,rst:[202,203,231,233,311,314],rsv3:84,rsync:[226,227],rta:76,rtc:[38,42,108,114,144,145,146,147,148,162,184,185,215,226,227],rtc_dev_ioctl:[162,215,226,227],rtc_read_timeout_m:108,rtc_set_tim:[162,215,226,227],rtt:[30,101],rtt_addr:134,rule:[2,4,38,139,171,172,173,174,175,179,182,183,184,185,186,187,188,189,190,191,192,193,195,202,203,204,205,206,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,246,247,248,273,274,275,276,277,282,283,284,285,291,292,316],run:[6,8,13,17,21,27,35,36,37,39,41,42,47,58,61,70,73,131,132,133,139,140,141,144,145,146,147,148,153,161,164,165,166,167,168,171,172,174,180,182,183,184,185,193,205,207,217,220,221,226,227,229,230,231,232,233,235,236,240,246,247,248,257,258,260,261,268,272,273,274,275,276,277,279,281,282,283,285,286,287,288,291,292,307,309,314],run_command:[273,274],run_sm:[182,183,282,283],runtim:[0,1,4,5,6,38,39,51,133,138,145,161,168,171,172,175,182,183,206,246,247,254,273,274,275,276,286,291,292,316],russel:[171,184,185,187,193,202,203,219,220,224,226,229,231,275],rx_dccal:41,rx_fifo_address:28,rx_pr_phase_step:[231,232],rx_rc_enable_auto_rec:[275,276],rx_train:41,rxe:[231,232],rxe_arb:[231,232],rxerr:164,rxfifo:[28,129,229,230,268,273,274],ryan:275,s002204:[213,220],s64:120,s812l:136,s821lc:136,s822l:136,s822lc:136,sad:[147,149],safe:[42,44,55,70,81,132,171,172,202,203,204,224,226,227,229,230,246,247,248,273,274,275,281,282,283,291,292,313],safeguard:[171,172,239],safer:[171,173,193],safeti:131,sai:[35,70,150,171,172,182,183,226,228,246,247,255,275,276,282,285,291,292,316],said:[139,220,275,276],salgaonkar:[147,148,164,171,184,185,187,193,202,203,219,220,226,229,231,275],sam:[35,184,185,193,202,203,231],same:[0,2,14,17,22,28,37,44,52,70,72,88,95,100,103,108,117,120,122,131,134,138,140,141,146,154,157,160,171,172,173,174,178,182,183,184,185,187,188,195,202,203,207,217,220,221,222,226,227,228,229,230,231,232,233,241,246,247,248,250,257,266,269,271,273,274,275,276,277,282,283,284,285,287,291,292,311,313,316],sampl:[24,37,38,162,171,172,174,215,217,220,226,227,231,232,246,247,261,273,274,281,282,284,287],sampsel:24,samsung:221,samuel:[147,148,161,171,184,185,229,231,275],san:138,sandwich:4,sane:[171,172,254,275,276,277],sanit:[224,226,227,268,273],saniti:[61,180,182,183,193,226,227,246,247,291,292],sapphir:2,sastri:[202,203,204],sata:[275,276,282,285],saturdai:[200,299],save:[1,13,44,50,122,133,162,214,229,231,232,236,273,274,275,276,282,283,285,291,292,302,314,316],saw:275,sb_verifi:[171,172],sbe:[38,40,164,182,226,227,231,232,246,247,265,275,276,286,288,291,292,305],sbin:182,scalabl:[275,277],scale:[24,134,189,226,227,231,232],scan:[58,171,172,182,183,184,185,201,273,274,275,276,291,292],scare:[202,231,232],scari:[220,231,232,246,247],scatter:47,scenario:[0,51,113,135,151,171,172,202,217,221,231,233,258,261,275,276,279,281,282,283,301,313],schedul:[114,133,171,172,202,204,229,230,265,275,276,305],scheel:224,scheme:[4,38,120,132,143,144,226,227,246,247,311,316],schreiter:219,scl:[266,273,274],scom:[2,13,27,29,37,61,171,172,178,182,183,201,220,221,224,226,227,228,231,232,238,242,246,247,273,274,275,276,282,283,284,287,291,292,317],scom_read:[201,202,203],scom_writ:[201,202,203],scomc:[246,247],scomd:[246,247],scome:[246,247],scope:[35,95,171,172,193,220,269,275,276],score:226,scp:[226,227],scratch:[132,273,274],screen:[127,220,229,230,231,232],scribbl:[275,276],script:[6,133,161,170,171,172,184,185,202,203,205,220,226,227,246,247,275,282,285,291,292],scrub:[171,172,181,208,220,231,232,241,267,273,274],scsi_transport_fc:[162,215,226,227],scsi_transport_sa:[162,215,226,227],scv:[21,180,182],sda:[266,273,274],sdr1:219,search:[171,172,174,182,183,203,226,227],sec:[52,217,231,233,246,247],secboot_tpmnv_control_index:313,secboot_tpmnv_vars_index:313,second:[1,2,70,113,114,117,127,146,147,148,149,150,162,171,172,173,182,183,184,185,186,187,188,189,190,191,202,203,204,215,217,220,221,225,226,227,228,229,230,231,232,233,246,247,248,254,258,266,268,273,274,275,276,277,279,282,283,284,287,289,291,292,316],secondari:[2,38,42,58,113,133,171,172,202,203,257,272,275,276,278,282,283,287,291,292],secondary_cpu_entri:[182,183],secondary_wait:[182,183],secondli:[182,183,226,227,229],secti:35,sectio:35,section1:35,section:[4,17,35,39,58,76,132,171,174,202,203,226,227,231,232,275,276,282,283,285,291,292,311,313],sector:[229,230],secur:[23,38,42,133,173,174,182,183,202,203,205,220,226,227,231,232,245,253,257,266,273,274,275,276,278,282,283,294,304,311,313],secure_boot_headers_s:[275,276],secureboot:[3,17,25,38,171,172,174,182,183,202,203,311,313,314],secureboot_init:314,secureboot_tpm_info:[171,172,246,247],secureboot_verifi:[171,172,314],secvar:[5,306,307,309],secvar_backend_driv:311,secvar_flag_protect:[311,313],secvar_flag_volatil:311,secvar_nod:311,secvar_storage_driv:311,secvar_update_bank:311,secvar_util:306,secvar_variable_bank:311,see:[1,2,4,5,7,17,19,24,27,29,37,40,41,44,45,47,50,52,55,56,57,58,59,62,63,64,65,67,68,70,71,76,77,78,108,110,115,119,122,127,132,133,134,137,138,139,141,144,151,155,171,172,173,174,175,182,183,184,185,186,187,188,189,190,191,192,193,195,202,203,204,205,206,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,238,246,247,248,272,273,274,275,276,277,281,282,283,284,285,286,291,292,298,311,313,314,315,316],seem:[81,140,165,171,172,202,204,220,224,226,227,229,231,234,246,247,255,257,258,259,261,273,274,275,276,278,279,280,281,282,283,285,287,291,292,311],seen:[24,135,157,164,171,182,183,187,220,229,230],seeprom:[0,219],segment:[2,30,90,103,134,147,149,171,172,238,282,285],segment_num:90,segment_numb:134,segment_s:[103,134],sel:[0,24,35,37,147,148,149,161,166,184,191,193,220,226,227,288],sel_head:35,select:[17,20,22,28,56,88,90,93,97,103,105,171,172,175,226,229,246,247,268,273,282,283],self:[123,182,183,231,232,246,247,248,311],semant:316,send:[0,35,47,51,58,67,68,70,71,139,140,150,161,162,165,166,171,172,174,181,184,185,189,193,202,203,205,208,209,215,217,220,224,226,227,229,230,231,232,233,246,247,248,249,258,261,267,272,273,274,275,276,279,281,282,283,284,288,291,292,313,314,315],senichev:275,sens:[171,172,229,230,246,247,248,275,276,282,283,291,292,316],sensibl:[55,141,160,226,228,246,247,275,311],sensist:23,sensit:[13,121,161,246,247,316],sensor:[5,15,16,38,42,54,110,120,146,151,162,167,175,182,183,184,186,206,213,220,226,228,231,235,242,246,247,273,274,299],sensor_data:120,sensor_group:[178,182,183],sensor_handl:120,sensor_hndl:120,sensor_num:35,sensor_typ:35,senstiv:23,sent:[0,35,41,52,68,104,109,110,114,119,120,134,135,139,144,163,171,172,182,183,201,202,203,216,226,227,231,232,246,247,258,261,263,275,276,279,281,282,283,284,288,297],sep:[231,233,301],separ:[2,4,35,51,108,132,171,172,208,222,226,227,231,246,247,258,275,276,279,282,284,291,292,316],seper:[224,226],septemb:[161,163,164,165,166,197,198,199,200,216,265,303],seq:[231,232,275],sequenc:[38,118,133,135,159,162,166,171,172,173,182,183,196,202,203,205,209,215,226,231,232,241,246,247,258,271,273,274,275,276,279,281,282,283,285],sequenti:[56,134,312],sequoia:[231,232,282,283],ser_buffer_out_timeout:[217,231,233],seredynski:275,seri:[35,130,139,162,163,171,176,177,178,179,180,181,184,187,188,189,192,202,208,209,210,213,214,215,216,217,218,221,231,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,278,279,280,281,282,286,287,288,289,290,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311],serial:[1,2,26,34,35,68,132,147,148,152,171,172,180,209,217,220,231,233,246,247,273,274,275,276,282,283],serialis:226,seriou:[178,182,183],serirq:[202,203,220,226,227],serv:[68,282,283],server:[2,57,113,121,122,134,161,171,172,220,231,232,275,291,292,316],server_no:[112,124],server_numb:[57,121,134],servic:[0,3,5,34,35,38,42,43,44,50,51,67,73,77,110,114,120,133,140,147,149,171,172,220,221,231,232,246,247,261,281,282,283,291,292],ses:[162,215,226,227],session:[217,231,233,275,276],set:[0,1,2,4,10,14,15,16,17,18,19,20,21,22,35,38,41,42,47,48,50,56,57,58,61,68,70,72,73,74,75,78,87,88,89,93,98,99,101,103,104,105,107,108,109,110,112,114,115,118,121,122,123,124,127,130,131,134,135,136,137,146,147,148,150,157,160,161,162,164,169,171,172,173,177,178,179,180,182,183,184,185,187,193,195,201,202,203,204,205,206,215,216,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,234,236,237,238,244,245,246,247,248,250,251,256,261,266,268,269,271,272,273,274,275,276,278,281,282,283,284,285,286,287,291,292,298,299,311,313,316],set_attention_st:135,set_capi_mod:[282,283],set_irq_config:220,set_mv:97,set_mve_en:98,set_opal_consol:[273,274],set_p:[100,282,284],set_peltv:101,set_phb_mem_window:103,set_power_st:135,set_queue_info:220,set_vp_info:220,set_wdt:[273,274],set_xiv:[160,212,220,316],set_xive_p:105,setpci:220,setter:[246,247],settl:[226,227],setup:[22,38,41,48,52,71,73,75,150,159,161,178,182,183,196,202,203,220,221,226,227,229,230,246,247,273,274,275,281,282,283,285,287,291,292,312],setup_arch:[291,292],sever:[35,58,70,83,92,130,132,141,147,149,156,171,172,178,182,183,202,203,221,226,227,229,230,246,247,258,261,263,268,269,275,279,281,282,283,285,291,292,297],sevic:40,sgpe:[171,172],sha1:[140,141,143,314],sha1sum:141,sha256:[313,314],sha512:[3,171,172,173],shake:202,shall:316,shallow:[231,232],shan:[147,148,164,184,185,193,202,203,204,219,220,224,226],shanker:[171,275],shape:[22,273,274],share:[14,22,32,52,75,139,147,149,171,172,173,175,182,183,221,224,226,227,229,230,238,273,274,275,282,283,284,285,291,292,314],shave:[171,172],shenoi:229,shield:314,shift:[2,16,38,42,106,121,171,173,175,226,227,229,230,282,284,304,308,316],shift_bug:[179,182],shilpasri:[147,148,171,184,185,193,202,203,219,220,224,226,229,231,275],ship:[42,44,139,140,141,147,148,150,171,172,253,257,259,274,275,277,280,282,283],shoot:[108,171,172,205],shortcut:220,shorten:133,shorter:[171,172,220],shortli:[114,171,172,182,236,239,282,283],shot:[246,247],shoul:310,should:[1,2,3,4,5,7,16,17,19,21,22,24,28,32,33,35,36,39,41,42,43,44,45,49,50,51,55,56,58,59,61,70,72,73,76,78,83,84,88,89,90,93,97,98,101,103,105,110,113,121,122,123,128,131,132,133,134,135,136,138,140,141,145,147,148,149,150,155,162,167,171,172,173,174,179,182,183,184,185,189,195,201,202,203,204,205,206,213,214,216,217,220,221,224,225,226,227,228,229,230,231,232,233,241,243,246,247,248,250,251,252,257,260,261,269,270,273,274,275,276,277,281,282,283,285,286,287,291,292,298,307,309,311,313,316],shouldn:[2,221,226,227,229,230,231,232,234,273,274,316],show:[4,162,164,167,168,171,172,182,183,195,214,224,229,230,246,247,260,261,273,274,275,276,281,282,285,286,291,292],shown:[2,70,246,273,274],shreya:[184,185,193],shriya:231,shrunk:[182,183],shudown:[258,279,282,283],shuffl:[275,276],shut:[51,152,166,171,174,217,231,233],shutdown:[0,43,47,70,113,114,122,151,152,153,171,172,193,217,231,233,258,273,274,279,282,283,291,292],sibl:[2,122,171,174,267,273,274],side:[4,8,26,39,47,52,130,162,171,172,173,182,183,193,205,213,215,216,224,226,227,229,230,231,232,241,246,247,250,251,258,261,268,272,273,274,275,276,279,281,282,283,285,287,288,291,292],sigbu:[181,208,267,273,274],sigil:260,sign:[3,13,17,23,138,139,140,171,172,219,231,232,250,274,275,276,304,312],signal:[17,56,58,97,105,108,117,131,134,170,171,172,173,181,201,208,226,227,229,230,231,232,254,267,273,274,275,276,282,283,296,311,312],signal_system_reset:122,signatur:[17,35,182,183,219,225,311,312,314],signifi:[31,56,100,108,132],signific:[29,171,172,182,183,224,282,284,316],significantli:[171,172,221,229,230,254,275,276],signifig:[266,273,274],signoff:[140,147,148,161,164,184,185,187,193,202,203,204],silenc:[220,226,227,228],silent:[171,172,224],silva:226,sim:[231,232,275,291,292],simic:[193,282,283,291,292],similar:[22,29,41,44,106,114,122,124,127,132,136,147,149,182,183,219,220,221,222,224,225,226,227,228,246,247,273,274,275,276,282,283,291,292,312,313],similarli:[2,21,182,183,246,247,273,274,282,283,291,292],simpl:[35,37,39,46,76,171,172,182,183,202,203,220,226,227,228,246,247,273,274,275,276,287,291,292,311,314,316],simpler:[21,246,247,248,291,292],simpli:[49,108,121,171,172,182,183,199,246,247],simplic:[68,282,283],simplifi:[171,172,246,247],simul:[36,43,132,133,144,145,146,147,148,185,204,246,248,275],simultan:[171,172,291,292,316],sinc:[2,14,37,42,58,81,117,131,133,146,147,151,152,171,172,174,180,182,183,193,203,204,205,206,220,224,226,227,228,229,230,231,232,233,246,247,248,250,266,267,273,274,275,276,282,283,284,285,287,288,291,292,304],singh:[171,193,202,203,226,231],singl:[4,14,30,39,41,78,132,133,169,170,171,172,178,182,183,220,226,227,231,232,246,247,261,269,273,275,276,282,283,285,291,292,294,311,316,317],sit:[2,231,232],site:[202,203],situat:[13,43,122,131,153,157,169,171,173,187,207,208,217,220,224,229,230,231,233,260,261,266,273,274,281,282,283,285,291,292,311],situr:[182,183],six:[139,141,219,220,221,222,223,224,225,226,227,228,268,273],size:[2,3,5,8,9,11,12,14,17,23,24,26,28,30,31,32,34,35,36,39,45,47,50,51,52,53,55,60,67,69,70,71,75,76,78,84,88,89,103,118,130,132,133,134,147,148,171,172,173,174,175,182,183,184,186,194,202,203,204,217,219,220,222,224,226,227,229,230,231,232,233,238,246,247,255,257,258,261,268,271,273,274,275,276,277,278,279,281,282,283,284,287,291,292,294,307,309,311,313,314,316,317],size_dt_str:[226,227],size_dt_struct:[226,227],size_t:[35,314],sizeof:[35,45,171,172],skeleton:[145,171,172,193],skiboot:[0,2,3,4,8,19,21,22,24,27,30,32,34,42,43,44,46,49,50,56,81,88,89,90,93,97,98,101,103,105,112,126,131,132,134,135,136,137,139,142,313,314,315],skiboot_bas:[133,275,276],skiboot_boot_test:[226,227],skiboot_gcov:[36,291,292],skiboot_initrd:[226,227],skiboot_map:[225,291,292],skiboot_part_hdr:[182,183],skiboot_s:133,skiboot_vers:141,skip:[36,113,160,171,172,174,182,220,226,227,229,230,242,246,247,250,253,257,275,276,278,280,282,283,287,291,292,300,311],skip_perst:[229,230,282,283,287,291,292],skiroot:[132,291,292],skisym:[225,226,227],slave:[139,184,185,226,227],slb:2,slca:[146,171,172],sleep:[13,48,94,133,158,171,172,190,191,193,220,231,235,246,247,273,274,291,292],slight:[161,182,183],slightli:[19,21,166,171,172,202,204,219,220,221,222,224,225,226,227,228,250,273,275,276,282,285,291,292],slof:133,slot0:[282,285],slot1:305,slot3:[184,185],slot5:[256,278],slot:[2,38,85,86,104,154,161,164,171,172,175,182,183,184,185,187,201,202,203,204,213,216,220,221,224,226,227,229,230,231,232,246,247,256,259,261,268,269,273,275,276,277,278,280,281,282,283,285,287,289,291,292],slot_ctl:[213,220],slot_norm:[282,283],slotclk:220,slotn:154,slotstatu:84,slottabl:220,slow:[44,108,117,134,193,207,217,220,231,232,233,251,275,276,291,292],slower:[229,230,246,247],slowli:[229,230,261],sltsta:[213,220],slw:[2,165,171,172,182,183,184,185,199,200,202,203,207,220,221,226,228,229,231,232,246,247,248,267,273,274,282,283,295],slw_init:[246,248],slw_late_init:[171,172],slw_reinit:[226,228,295],small:[12,84,127,131,133,136,171,172,178,182,183,202,203,212,213,214,215,220,224,229,230,246,247,272,274,275,276,313],smaller:[2,171,172,226,227,269,273,274,275,276,282,283,313],smallest:[139,171,175],smart:[176,182,183,193,202,203,204,219,220,246,247,267,273,274],smart_writ:294,smarter:[202,203,282,283],smbus_writ:[184,186],smc:[0,220,226,227,246,247,279,282,283],smith:[132,147,148,161,164,171,184,185,187,193,202,203,204,219,220,224,226,229,231,275],sml:32,smoothli:151,smp:[226,227,231,233,301],smp_handle_nmi_ipi:[261,281,282,283],sms_atn:0,smt4:[226,227],smt8:[226,227],smt:[147,148,171,172,221,226,227,246,248,267,273,274],smt_medium:[202,203],snapshot:[37,246,247],snarf:[282,285],snip:[182,201,224,272,275,276,282,283],snippet:[35,37,59],snoop:[102,171,172,173],snooz:229,soc:[273,274],sock:[182,183],socket:[39,58,145,147,171,172,231,232,238,273,275,276,282,283],sodium:285,soft:[15,162,166,169,178,181,182,183,208,213,215,220,226,227,231,233,246,247,258,267,273,274,279,282,283],softrom:[171,172],softwar:[21,22,44,131,171,172,219,220,226,227,229,230,237,261,266,273,274,281,282,285,314,316],sol:[217,231,233],solicit:139,solid:182,solut:[139,171,172,178,226,227,231,242,253,254,258,275,276,279,282,283],solv:[202,203,211,246,247,275,276],some:[0,1,2,5,6,16,17,19,20,21,22,35,41,42,43,50,51,58,70,73,76,77,93,95,100,113,115,118,122,124,125,131,132,133,134,135,138,139,140,141,144,145,147,148,151,153,157,160,162,171,172,173,174,177,178,181,182,183,184,185,187,189,190,193,194,195,201,202,203,204,206,207,208,214,215,217,220,222,224,226,227,228,229,230,231,232,233,234,235,236,237,238,241,246,247,248,250,251,256,258,259,260,261,266,267,268,270,272,273,274,275,276,278,279,280,281,282,283,284,285,286,287,291,292,298,311,316],somebodi:[275,276],somehow:291,someon:[171,172,224,275,276],someth:[1,2,20,42,43,83,117,124,125,130,131,132,140,141,171,172,174,178,182,183,217,226,227,231,233,246,247,248,266,272,273,274,275,276,282,283,311],sometim:[58,109,139,151,171,172,226,227,231,232,241,250,273,274,275,276,291,292],somewhat:[13,226,227,231,236,291,292,316],somewher:[81,131,202,203,220,236,246,247,254,275,277,311],sonam:192,soon:[44,90,93,103,131,134,139,171,172,189,202,203,217,226,231,233,282,283,286,291,292],soonaft:139,sort:[2,4,154,171,172,181,208,245,246,247,291,292],sourc:[22,31,35,38,40,56,57,71,74,88,89,90,93,97,98,100,101,103,105,121,138,144,159,171,172,179,182,183,184,186,189,194,196,202,203,220,226,227,241,275,276,291,292,314,316],sourceid:84,spa:[75,182,183],space:[1,2,17,27,30,36,38,42,49,50,71,83,88,89,90,93,103,133,134,147,149,150,154,162,171,172,174,181,182,183,202,203,204,208,215,217,220,221,224,226,227,229,230,231,233,234,236,246,247,248,258,261,267,268,273,274,275,276,279,281,282,283,286,287,291,292,304,311,313,315,316,317],spam:[198,246,247,248,282,283],span:88,spap:75,sparingli:133,spars:[146,181,184,185,220,291,292],spcn:[68,162,213,220],spd:[171,172,220,250],speak:[43,133,139,140],spec:[25,49,68,71,114,132,147,149,182,183,184,185,189,213,220,226,227,228,231,233,261,268,271,273,275,276,281,282,285,286,287,291,292],special:[4,13,70,171,172,182,183,193,205,226,227,231,235,255,275,316],special_wakeup_count:[231,235],special_wkup_:221,specif:[0,1,2,4,17,18,21,22,28,29,31,38,42,43,51,58,70,82,83,90,93,103,106,107,115,118,123,131,133,134,139,140,145,157,173,175,182,183,187,193,198,202,203,220,226,227,229,230,231,232,234,246,247,248,251,258,261,266,273,274,275,276,277,279,281,282,283,284,286,291,292,298,311,316,317],specifi:[13,21,22,27,29,37,40,51,52,55,56,61,71,75,78,88,89,90,93,103,105,118,122,123,124,141,147,149,171,172,182,183,202,203,216,220,226,227,229,230,231,232,246,247,253,258,272,275,276,279,282,283,287,291,292,316,317],specific:[61,103,123],specifii:[246,247,249],specul:[171,172,180,241,246,247],speed:[2,27,41,182,183,184,186,202,203,220,221,226,228,229,230,231,232,246,247,282,283,287,291,292,305],spell:155,spend:[52,160,171,207,220,254,275,276,282,283,316],spent:[171,175,254,275,276],sphinx:[202,203],spi:[273,274],spin:[43,44,76,124,171,172,182,183,217,226,227,231,233,275,276],spinlock:133,spinloop:133,spira:[171,172,174,180,193,220,224,229,230,246,247],spirah:40,spiral:[160,207,220],spit:[182,183],spl:[182,183],spl_wakeup:[182,183],splat:[273,274],split:[30,47,146,171,172,220,224,226,227,231,233,258,275,276,279,282,283,284,313],spot:[258,279,282,283],sppcrd_chip_info:220,spr:[13,37,123,133,226,227,231,232,246,247,260,273,274,282,285],sprintf:144,sprn:123,sptr:[272,275,276],spuriou:[171,172,195,202,203,229,230,231,236,291,292],spurr:[2,58,146],spurriou:[231,232,246,247],squash:[161,171,172,282,285,295],sram:[182,183,193,275,276],src:[35,71,153,157,182,183,187,231,232],srci_priority_high:[171,174],sreset:[171,172,178,220,231,235,246,247,248,282,283],sreset_all_oth:[171,172],sreset_all_prepar:[171,172],sreset_kernel:[171,172],sreset_world:[171,172,220],srinivasan:[147,148,161,171,184,185,193,202,203,219,220,224,226,229,231,275],sriov:220,srr0:[162,171,173,182,183,214,224],srr1:[122,162,171,173,182,183,214,224,282,283],ssd:[282,283],ssh:[140,162,215,226,227,231,232],ssl:[275,277],stabil:[134,171,172,221,246,248,251,269,275,276],stabilis:[139,219,220,221,222,224,225,226,227,228],stabilti:[287,291,292],stabl:[38,139,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310],stack0:[269,275,276],stack1:[269,275,276],stack:[2,22,23,30,102,133,144,147,148,160,162,171,172,173,175,178,182,183,212,214,215,219,220,226,227,228,231,232,246,247,257,258,261,271,273,274,275,276,278,279,281,282,283,285,291,292,314],stack_check:144,stacktrac:[182,183],stage:[0,135,171,173,204,226,227,231,232,258,272,275,276,279,282,283,313],stai:[35,182,183,246,247,273,274,282,283,291,292],stale:[291,292,316],stall:[193,208,217,231,232,233,268,273,275,276],stand:[32,202,204],standalon:[275,276,314],standard:[2,28,35,41,50,132,133,171,172,220,226,227,241,246,247,256,273,274,278,289],standardis:[171,172,246,247],standbi:[266,273,274],stanlei:[147,148,164,184,185,187,193,202,203,219,220,226,231,275],start:[2,4,8,22,24,33,37,38,39,41,42,47,50,52,56,58,61,70,71,88,89,90,93,96,97,98,101,103,105,112,113,122,131,132,133,134,141,162,171,172,173,174,182,183,184,185,193,201,202,203,208,214,215,217,220,222,224,226,227,229,230,231,232,233,236,238,239,240,241,243,246,247,248,254,258,261,272,273,274,275,276,277,279,281,282,283,287,291,292,316],start_address:124,start_here_common:[291,292],start_kernel:[291,292],start_pm_complex:[171,172],start_preload_resourc:[226,227],starting_pci_address:[103,134],starting_real_address:[103,134],startup:[58,291,292],stash:[246,247],stat:[184,185,202,275],state:[0,17,19,21,35,40,42,44,48,50,54,58,68,74,78,80,84,85,86,94,96,98,101,103,104,108,109,110,112,115,119,123,124,131,132,133,134,135,139,145,146,150,152,154,160,162,163,164,168,171,172,175,179,180,182,184,185,191,201,202,203,204,213,215,216,220,221,224,226,227,228,229,230,231,232,234,235,242,246,247,248,251,256,258,261,264,265,266,267,272,273,274,275,276,278,279,281,282,283,284,285,286,287,289,291,292,305,310,311,312,313,314,316],statement:[171,172,291,306],statist:[184,185,193,210,217,231,232,302],statr:14,statu:[2,19,26,30,32,35,41,47,54,58,68,70,81,97,103,104,109,110,112,119,134,135,146,147,148,157,162,171,172,174,180,182,183,187,193,198,202,203,206,213,215,220,224,226,227,228,229,230,231,232,234,242,245,246,247,272,273,274,275,276,282,283,285,287,291,292,314],status2:220,stb:[133,171,172,173,174,202,204,220,245,246,247,253,275,276],stb_final:[171,172],std:[246,247,282,285],stdio:[171,172,220],stdout:[130,220,275,276],steal:[165,273],step:[35,44,58,147,148,171,172,220,226,227,246,247,273,274,275,276,282,283,286,291,292,311],stephani:275,stewart:[132,141,147,148,161,164,171,172,184,185,187,193,202,203,204,219,220,224,226,229,231,259,275,280],stick:[2,222],sticki:[268,273,275,276],still:[1,35,45,120,121,130,146,171,172,182,199,200,202,204,205,217,220,224,226,227,228,231,232,233,236,241,246,247,261,272,273,274,275,276,281,282,283,285,291,292,298,316],stinfo:[246,247],stipul:[271,275,276],stock:34,stofer:[171,275],stomp:[133,182],stop0:[231,232,246,248],stop0_lit:[229,267,273,274],stop11:[171,172,246,248],stop1:[273,274],stop1_lit:[267,273,274],stop2:[267,273,274],stop2_lit:[267,273,274],stop3:[273,274],stop4:[182,183,231,232,246,247,248],stop5:[171,172,246,248],stop:[13,21,37,38,39,42,43,48,51,58,60,61,113,133,146,157,171,172,181,184,185,187,193,208,212,217,220,231,232,233,242,246,247,248,256,261,266,267,268,273,274,275,276,278,282,283,285,310],stop_api:[171,172],stope:61,stopocc:144,stopreg:[231,232],storag:[17,50,51,76,118,282,283,291,292],store:[2,3,17,23,37,50,51,58,69,76,84,85,86,87,93,99,104,118,132,162,171,172,175,178,179,182,183,202,203,214,219,220,229,230,231,232,241,246,247,271,275,276,282,283,291,292,304,311,312,313,314,316],store_eoi:[179,182],storeeoi:[226,227,316],stq:[250,268,271,273,275,276],strai:206,straight:220,straightforward:[275,276],strang:[162,214],strategi:[14,68,162,214,225,258,279,282,283],stratton:[136,259,280],stream:[171,174,226,227],strech:[266,273,274],street:138,stress:[171,172,282],stretch:[226,229],strict:22,stride:231,string:[2,4,5,17,18,21,22,31,35,44,70,126,132,135,141,145,158,171,172,182,183,202,203,220,226,227,246,247,250,256,273,275,276,278,281,282,283,288,291,292,295,313,314,316],strip:[4,171,172,220,275,276],strong:[171,172,184,185,202,203],strongli:[132,139,165,182,183,219,223,311],strtoul:[229,230],struct:[35,47,50,60,67,70,84,106,111,127,133,135,182,183,193,194,206,220,224,225,226,227,229,230,273,274,275,276,278,282,283,288,291,292,294,311],structur:[34,35,36,40,58,67,70,84,133,134,137,171,172,193,220,224,226,227,231,232,246,247,250,261,275,276,277,281,282,283,286,288,291,292,311,312,316],sts:220,stub:[171,172],stuck:[58,134,153,161,162,169,171,172,175,199,202,203,211,215,226,227,231,233,246,247,248,251,257,261,273,274,275,276,278,281,282,283,285],stuff:[146,182,183,212,220],stupid:2,stw:[162,214],style:[2,4,50,202,203],suart:[231,232],sub:[9,31,35,53,60,135,136,162,171,172,215,224,317],subaddr:60,subaddr_sz:60,subcmd:[217,231,232],subcommand:[171,172],subdivid:[282,285],subesqu:[229,230],subject:[140,311,316],submit:[38,77,118,127,138,182,183,224],submitt:138,subnod:31,subordin:[160,256,278],subpartit:[1,202,204,231,232],subramaniyam:229,subscrib:138,subsect:311,subsequ:[2,22,117,153,171,172,181,182,183,189,208,209,226,227,228,229,230,242,258,267,273,274,279,282,283,311,314],subset:[22,54,182,183,229,230,246,247],subsi:35,substanti:231,substitut:[171,172],subsystem:[35,171,172],subsystem_id:35,subtl:[286,291,292],succe:[115,131,171,172,178,182,183,208,231,232,243,275],succeed:[131,171,172,239,291,292],succesfulli:[61,316],success:[40,43,47,51,52,54,61,69,71,72,73,74,79,87,91,99,100,107,109,110,113,115,119,120,122,123,125,127,128,129,131,157,160,162,167,171,172,181,182,183,187,208,215,217,226,227,231,232,233,267,273,274],successfulli:[17,41,45,50,51,53,54,55,60,61,67,70,75,76,78,82,83,84,85,86,92,102,104,112,113,116,118,131,171,172,182,202,203,224,231,235,261,275,276,281,282,283,311,312,316],sucess:[258,279,282,283],sudhakar:[226,231],sudo:[282,285],sue:[180,246,247],suffic:[246,247],suffici:[22,49,231,232,287,316],suggest:[171,172,219,223,269,275,276,281,282,283],suit:[5,108,138,195,202,203,220,226,227,250,275,276],suitabl:[139,182,183,193,202,220,226,228,231,246,247,268,273,275,276,282,283,316],sukadev:[171,229,231],summari:[22,58,70,130,261,281,282,283,291,292,311],superio:[273,274,279],supermicro:[4,136,202,213,219,220,224,246,247,259,280],supersed:[23,58,171,172],superset:22,suport:115,supplement:[282,285],suppli:[34,36,55,70,73,81,118,135,193,202,203,220,221,231,232,291,292],support:[2,4,5,6,10,11,17,19,20,21,22,24,26,28,30,36,37,38,41,42,43,46,49,50,51,52,58,60,61,67,68,69,70,71,73,78,79,81,82,83,84,85,86,87,90,93,99,100,102,103,104,106,107,109,110,114,115,118,119,120,121,122,123,129,130,131,135,139,141,145,146,147,148,149,150,153,155,161,164,166,171,172,174,175,179,180,182,183,186,189,193,202,203,204,205,206,209,210,213,219,220,221,223,224,226,227,228,229,230,231,232,233,238,241,242,246,247,248,250,251,255,261,266,272,273,274,275,276,279,281,282,283,284,286,288,291,292,293,296,298,301,304,310,311,314,315,316],suppos:[171,172,182,183,226,227,229,230,238,266,273,274],suppress:[231,275,276],supriou:245,supris:[282,283],suraj:[171,193,202,203,226,231],sure:[2,58,129,171,172,173,179,182,183,212,220,226,227,228,229,230,231,232,236,241,246,247,257,263,275,276,282,283,291,292,297,316],surpris:[2,135,202,203,220,221],surv:[35,162,215,226,227,231,232],surveil:[20,35,171,172],surviel:[162,215,226,227],surviv:[139,182,183],suspend:[115,177,182,183,231,234,282,284],sv830_027:39,sw288484:145,sw_driver:[171,172],swanson:275,swap:[47,171,172,182,183,226,228,291,292,313],swdn:[282,283],swich:221,swift:[136,293],swirchboard:28,switchboard:[25,38],swtich:221,sxm2:[273,275,276],sychron:220,sylvia:275,symbol:[8,133,144,146,147,149,171,173,222,225,226,227,291,292],symbol_map:222,symptom:35,sync:[30,58,147,148,171,172,179,182,183,193,196,202,203,226,227,231,232,233,258,275,276,279,291,292,295],sync_msg:[261,281,282,283],sync_tim:[231,233],syncer:[282,283],synchon:220,synchron:[58,76,171,172,182,183,184,202,203,224,246,247,254,258,271,275,276,279,282,283,286,291,292,316],synchronis:[157,171,172,175,187],synchrou:[258,279,282,283],syncron:[246,247],syncronis:41,syndrom:[171,172],syntax:[44,282,283],sys:[47,133,141,150,162,171,172,178,182,183,195,202,203,213,214,220,222,224,231,232],sys_ioctl:[162,215,226,227],sys_reboot:[231,233],sys_reset_al:122,sys_reset_all_oth:122,syscal:[146,180,182],sysdump:[194,300],sysf:[19,133,171,172,182,183,222,224,291,292],syslog:[226,227],sysparam:[5,77,273,274],system:[0,1,2,4,5,10,12,15,16,17,18,19,20,21,22,24,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47,48,50,51,52,54,55,58,62,63,64,65,68,70,76,83,88,89,91,93,103,106,108,109,110,113,114,118,122,127,131,132,133,135,136,141,145,146,147,148,153,154,156,160,161,162,164,168,173,174,175,178,180,182,183,184,185,186,188,195,196,201,202,203,204,205,206,210,215,217,221,222,225,228,230,233,234,235,236,239,240,246,247,248,250,258,259,261,266,268,270,273,274,275,276,279,280,281,282,283,284,285,286,287,291,292,295,304,310,312,313,314,316],system_cal:[162,215,226,227,231,233],system_reset:[231,232],systemd:[6,184,185,205,220,229,230],systemsim:[147,148,171,172,220,225,226,227,246,247,273,275,291,292],sytsem:103,tabl:[4,14,30,35,40,71,72,88,97,134,157,171,172,173,174,178,182,183,187,189,220,226,227,246,247,248,256,259,268,273,275,276,278,280,282,283,285,287,291,292,311],tack:[226,227],tag:[7,35,40,71,139,141,152,171,172,173,174,206,220,226,227,253,283,284,285,287,291,292],tag_val:71,tail:[4,258,279,291,292],taint:[162,178,182,183,215,226,227,246,247],take:[7,9,14,15,35,40,43,50,52,54,58,59,70,100,108,109,110,119,124,139,153,171,172,173,174,180,181,182,183,184,187,188,189,192,202,203,204,207,219,220,221,223,226,227,229,230,231,233,238,246,247,248,255,258,260,261,273,274,275,276,277,279,281,282,283,284,285,288,291,292,311],taken:[14,41,67,115,166,171,172,224,226,228,231,232,233,273,274,282,283,291,292,316],tale:[259,280],talk:[44,133,171,172,220,226,227,229,230,246,247],talo:[136,282,283,285],talosii:[282,285],tamper:[118,311,313],tap:[291,292],tapn:[291,292],target:[5,23,28,41,44,58,61,99,103,113,120,121,122,134,140,147,149,150,171,172,173,174,175,182,183,188,202,203,205,220,221,222,224,225,227,229,230,231,232,233,234,235,236,246,247,271,275,276,282,283,287,291,292,316],task:[133,162,215,217,226,227,231,233,246,247],tatlin:[291,292],tb_cmpval:[271,275,276],tb_compar:[271,275,276],tb_measur:[171,172],tb_residue_err:144,tbd:[2,316],tbl:106,tce:[30,88,89,106,134,171,173,174,175,194,226,227,255,265,272,275,276,303,306],tce_kil:[171,173],tce_level:[88,134],tce_mem_addr:42,tce_mem_s:42,tce_page_s:[88,134],tce_siz:106,tce_tabl:88,tce_table_addr:[88,134],tce_table_s:[88,134],tcg:[171,172,291,292,314],tcl:[144,146,161,182,183,202,203,226,227,246,247,282,283,291,292],tclreadlin:[273,274],tcp:[231,232],team:[141,171,172,173,182,183,184,185,226,227,228,231,232,246,247,269,275,276,282,283,284,291,292,298],tear:[226,227,246,248],technic:[42,291,292],technolog:[182,183,213,220,258,279,282,283],tediou:[182,183],tell:[51,99,141,171,172,182,183,202,204,217,220,224,226,227,231,232,233,246,247,268,273,275,276,282,283,291,292],temp:[19,171,172,272,275,276],temperatur:[13,19,54,70,146,171,172,226,227,229,230,246,247],templat:[75,135,182,183,272,275,276],temporari:[7,47,131,145,146,220,231,232,315,316],temporarili:[205,287,291,292,316],temporarli:[267,273,274],ten:[202,203,231,232],tenant:0,tend:[282,283],tendolkar:275,term:[138,147,149,226,227,258,273,274,279,282,283,287,291,292],term_numb:49,termin:[41,44,49,152,157,160,161,184,186,187,193,275,291,292],terribl:[275,276],test:[2,5,19,38,66,82,126,130,132,133,134,136,139,140,141,145,147,148,149,161,162,164,170,172,178,184,185,186,187,195,204,205,207,215,232,234,248,250,252,257,258,268,271,272,274,276,278,279,282,283,284,285,287,288,291,292,304],testcas:[162,182,215,226,227],text:[35,127,132,139,202,203,226,227,275,276,282,285,291,292],textual:[1,12,132],tfac:[70,144,246,247,261,281,282,285],tfmr:[58,70,146,171,172,231,236,246,247,261,272,275,276,281,282,285],tfmr_pariti:70,tg3:[162,215,226,227],than:[4,16,17,42,44,50,52,55,68,70,76,78,88,101,108,115,117,118,130,131,132,133,139,140,144,147,148,150,152,162,171,172,173,174,177,178,182,183,184,185,193,198,201,202,203,204,205,206,215,217,220,221,222,224,226,227,229,230,231,232,233,238,239,240,241,243,246,247,248,250,251,253,254,257,258,259,261,271,273,274,275,276,278,279,280,281,282,283,284,285,287,291,292,298,311,312,316],thank:[146,148,224,298],thankfulli:[171,172,231,232,241],thei:[1,2,4,19,21,22,28,35,37,41,50,106,122,123,128,131,134,135,138,150,162,165,171,172,175,182,183,189,202,203,215,219,220,226,227,228,229,230,231,232,233,239,241,242,243,245,246,247,248,250,251,258,261,266,268,272,273,274,275,276,279,281,282,283,285,287,291,292,298,311,312,313,316],them:[2,13,42,58,93,110,115,117,124,132,134,135,147,149,157,171,172,174,175,178,181,182,183,187,193,202,203,204,208,220,221,224,226,227,228,229,230,231,232,233,238,241,246,247,248,257,267,272,273,274,275,276,277,282,283,285,287,291,292,316],themselv:[41,184,185],theoret:[140,246,248],theori:[2,44,171,172,241,275,276],therefor:[88,150,171,172,174,229,230,246,247,269,275,276,282,283,285,311,313,317],thermal:[51,109,132,258,279,282,283],thet:316,thi:[0,1,2,3,4,5,7,9,12,13,14,15,17,18,19,20,21,22,23,24,26,27,28,29,31,33,35,36,37,39,40,41,42,43,44,46,47,48,49,50,51,52,54,55,56,57,58,61,62,63,64,65,68,69,70,71,72,73,74,76,77,79,81,83,84,87,88,89,90,91,92,93,95,96,97,98,99,100,101,102,103,105,106,107,108,109,110,113,114,115,116,117,118,119,120,121,122,123,124,125,127,128,129,130,131,132,133,134,136,138,139,140,141,143,145,146,147,148,149,150,151,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316],thin:[182,183],thing:[1,2,36,77,130,133,141,165,171,172,173,178,180,182,183,193,202,203,220,224,226,227,228,229,230,231,232,236,239,246,247,248,259,260,267,273,274,275,276,280,282,291,292,316],think:[2,81,139,147,149,162,171,172,202,203,207,215,217,220,226,227,229,231,233,261,273,274,275,276,287,291,292],third:[161,174,188,205,222,234,282,283,285],this_cpu:[268,273,274,278],thoe:[226,228],thoma:219,those:[2,4,21,22,29,31,35,37,100,103,131,135,141,150,160,162,164,171,172,182,183,189,202,203,214,219,220,224,226,227,228,231,232,241,246,247,250,258,273,275,276,279,282,283,284,287,291,292,316],though:[2,50,131,132,133,139,146,157,162,171,172,177,182,183,187,203,204,213,231,232,246,247,248,250,261,273,274,275,276,281,282,283,284,285,286,288,291,292,316],thought:[132,146,162,215,226,227,282,285],thousand:[275,276],thrash:[275,276],thread0:[257,272,275,276,278,282,283],thread:[2,14,28,37,40,58,112,116,122,124,133,147,148,169,171,172,182,183,184,186,193,202,203,208,217,226,227,229,230,231,232,233,242,243,246,247,248,257,258,261,267,272,273,274,275,276,278,279,281,282,283,285,316],thread_statu:112,three:[4,23,47,52,73,171,172,182,183,221,229,230,238,275,282,283,285,291,292,312,314],threshold:[13,134,251,275,276],thrill:219,throttl:[16,70,109,147,148,224],throttle_statu:70,through:[1,9,10,20,26,31,41,50,58,60,70,77,78,88,101,118,120,122,124,133,134,135,146,161,171,172,175,180,202,203,204,220,224,226,227,229,230,231,232,246,247,250,255,257,259,271,273,274,275,276,277,280,282,283,285,287,291,292,307,309,311],throughout:161,throughput:[171,172,182,183],thu:[2,14,41,44,54,110,153,160,171,172,189,226,227,231,232,238,252,256,259,271,273,275,276,279,280,282,283,291,292,316],thunk:[193,226,227],thursdai:[158,174,176,178,188,189,191,194,210,228,229,235,238,261,269,271,277,281,284,285,289,290,294,301,302,307,309],tick:[58,201,202,203,229,273,274,282,283],tick_nohz_idle_stop_tick:37,tid:[28,229,230,246,247],tie:[171,172,177,182,183],ties:[177,182,183],tighten:[246,247],tild:4,till:[231,246,247,268,273,287,291,292],tima:316,time:[1,5,13,35,37,38,40,41,42,44,54,58,60,69,77,88,103,108,115,124,129,131,133,134,137,139,140,141,145,146,147,148,150,153,157,160,162,164,165,167,168,171,172,173,175,178,180,182,183,187,193,201,202,203,204,207,209,213,215,217,218,220,224,226,227,228,229,230,231,232,233,235,236,238,244,246,247,248,254,255,256,258,260,261,266,267,269,271,273,274,275,276,277,278,279,281,282,283,284,285,287,291,292,308,311,316],time_wait:[146,147,148,193,202,203,261,275,276,281,282,283],time_wait_m:[202,203,261,281,282,283],time_wait_pol:[261,281,282,283],timebas:[1,2,30,58,108,116,147,148,164,169,171,172,182,183,193,202,203,229,231,232,246,247,275,276,282,283],timefram:[250,273,274],timeout:[35,109,110,113,114,119,128,146,147,148,160,162,164,166,167,169,171,172,182,183,184,185,201,202,203,207,215,217,220,226,227,229,230,231,232,233,235,236,242,243,246,247,248,258,266,268,271,272,273,274,275,276,279,282,283,287,291,292],timer:[5,58,70,146,164,171,172,173,193,199,202,203,207,217,220,226,227,229,230,231,233,241,243,246,247,255,258,261,265,272,273,274,275,276,279,281,282,285,286,291,292,305,306],timer_pol:[207,220],timestamp:[35,171,172,291,292],tini:[133,145],tlb:[2,115,226,227,228],tlbi:[171,172,173,268,273],tlbie:[226,227],tlp:[226,229,230],tlphdr1:84,tlphdr2:84,tlphdr3:84,tlphdr4:84,tm_suspend_en:[177,182,183],tmp:[182,183],tn71:[136,226,227],toc:[220,246,247,275,276,277,282,283],tod:[2,58,147,148,159,162,164,171,172,182,183,196,202,203,215,226,227,246,247,261,281,282,283],todai:[42,171,172,226,228,246,247,257,275,276,282,285,291,292],todo:[49,51,101,108,117,131,132,146,312],togeth:[22,171,172,174,177,182,183,275,276,316],toggl:[182,183,316],token:[31,42,45,46,47,49,51,52,70,104,109,110,119,120,126,131,132,135,171,172,178,182,183,208,243,246,247,272,273,274,275,276,316],told:[155,184,185,202,204,246,247],tonn:165,too:[22,84,128,130,171,172,182,183,184,186,195,202,203,221,224,226,227,228,229,230,231,235,246,247,273,274,275,276,277,282,283,291,292],took:[275,276,291,292],tool:[0,17,36,128,133,146,161,171,172,219,224,231,232,233,246,247,248,275,276,287,291,292,314],toolchain:[153,182,183,229,275,276],top:[14,17,31,37,45,140,147,148,161,164,171,174,182,183,202,203,217,220,226,227,231,233,246,247,258,268,273,274,279,298,317],topic:[273,274],topolog:[2,58,178,182,183,202,203,213,220,221,229,230,231,232,275,276,282,283],topology_add_dev:[231,233],tortur:[162,215,226,227],total:[24,35,88,89,103,147,148,161,164,171,184,185,187,193,202,203,204,219,220,224,226,229,231,261,275,276],totals:[202,204,226,227],touch:[162,215,220,226,227,229,230,291,292],toward:[193,204,220,221,222,224,225,227,230,261,273,281,282,283,304,306,308],tpm:[2,25,38,171,172,202,203,205,207,211,246,247,266,273,274,295,311,312,314],tpm_check_statu:220,tpm_chip:[171,172,173],tpm_i2c_interfac:220,tpm_i2c_nuvoton:[171,172,220,224],tpm_not_pres:[246,247],tpm_read_burst_count:220,tpm_read_fifo:220,tpm_register_chip:224,tpm_statu:[246,247],tpm_status_read_byt:220,tpm_timeout_d:220,tpm_write_fifo:220,tpmlogmgr:[171,172,314],tpmlogmgr_addev:314,tpmrel:[171,172,246,247],tpmrel_idata_hash_verif_offset:[171,172],tpo:[114,226,227],trace:[1,5,38,61,133,134,162,171,172,174,178,182,183,215,217,220,224,226,227,228,229,230,231,232,233,246,247,273,274,282,283,287,291,292],trace_:24,trace_cycl:37,trace_imc:[24,37],trace_imc_scom:24,trace_info:[291,292],trace_repeat:[291,292],tracepoint:[291,292],track:[113,146,171,172,217,219,220,221,222,224,225,226,227,228,229,230,231,233,258,261,270,275,276,279,281,282,283,286,287,291,292],tracker:[270,275,276],trade:[109,291,292],tradit:[2,171,172,316],tradition:[275,276],traffic:[102,171,172,239,258,268,273,279,282,283],trail:[268,273],train:[171,172,180,182,183,220,224,226,227,228,229,230,231,232,239,240,246,247,251,261,268,269,273,274,275,276,277,281,282,283,287,291,292],trajectori:[184,185],trampl:[246,248],transact:[21,102,115,160,162,171,172,182,183,208,214,220,225,226,228,229,231,232,234,238,243,266,273,274,282,283],transat:[226,228,231,232],transfer:[41,52,67,202,203],transit:[133,144,171,172,226,227,228,275,282,283,291,292],translat:[31,73,88,89,107,115,134,182,183,221,226,227,246,247],transmitt:[171,172],transpar:[132,134,251,275,276,316],transpend:164,transport:[171,172,246,247,250,258,275,276,279,282,283],trap:[162,178,182,183,215,226,227,246,247,273,274],travers:26,travi:[171,172,184,185,220,224,226,228,229,246,247,248,275,276,277,291,292],treat:[51,97,134,162,214,215,225,226,227,231,232,261,269,275,276,281,282,284,286,288,291,292,311],tree:[3,5,12,16,17,20,21,22,26,33,34,37,38,39,42,44,49,50,52,53,55,59,62,63,64,65,68,70,71,76,77,84,104,109,110,114,119,120,121,127,129,132,133,135,137,139,141,144,145,146,147,148,154,155,171,172,173,174,175,177,182,183,184,185,186,187,188,189,190,191,194,195,201,202,203,204,205,206,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,242,246,247,248,250,259,268,273,274,275,276,277,280,282,283,284,285,287,291,292,311,313,314],trend:[171,193,202,203,219,226,231],trerr:220,tri:[171,172,182,183,198,217,220,231,233,236,246,248,251,255,266,272,273,274,275,276,287,291,292],trick:[155,184,185,220],tricki:[220,316],trig:[162,214,224],trigger:[0,44,52,120,150,171,172,174,178,182,183,202,204,217,220,224,226,227,228,229,230,231,232,233,241,246,247,248,268,272,273,274,275,276,282,283,284,291,292,295,316],trigger_pag:[179,182],trim:[226,227],tring:224,trip:[171,172,241,275,276],tritz:226,trivial:[140,273],troubl:220,troublesom:[231,236],truncat:[147,149,193,281,282,283],trust:[23,25,38,133,173,202,203,205,220,231,232,245,253,257,275,276,278,282,283,284],trustedboot:[171,172,275,276,291,292,314],trustedboot_exit_boot_servic:[171,172,246,247],trustedboot_measur:[171,172,314],trustedbootcmd:314,try_lock:[171,172],try_lock_cal:[273,274,275,276],tscr:[226,227],tss:[171,172,314],tss_nv_writelock:313,tucson:236,tuesdai:[163,172,177,180,190,192,198,206,207,216,220,224,226,230,231,237,247,254,256,259,262,264,280,291,296,304,308,310],tuleta:[39,42,136,226,227],tunabl:[178,182,183],tune:[178,182,183,229,230,299],tunnel:[87,182,183,246,247],tupl:14,turn:[1,13,35,56,133,171,172,219,221,224,226,229,230,231,232,240,246,247,261,266,273,274,281,282,283,285,291,292,316],tve:[107,220,226,227,271,275,276],tvt1:[246,247],tvt:[171,173,174,226,227,229,230,246,247],tweak:[182,183,246,247],twi:[171,172,241],twice:[36,226,227,246,247,273,274,275,276,291,292,311],two:[1,2,4,14,31,35,37,41,44,59,68,100,108,127,132,133,139,140,141,147,149,150,161,171,172,173,174,182,183,184,185,188,197,199,211,216,222,224,226,227,228,229,230,231,232,233,235,237,238,240,243,245,246,247,248,249,258,267,268,273,275,276,279,282,283,298,311,313,314,316,317],tx_rxcal_dis:41,tx_rxcal_en:41,tx_zcal:41,txt:[21,22,31,171,172,289],tyan:[136,145],tyler:275,type:[0,2,10,16,17,18,19,21,22,24,26,27,28,29,30,34,35,37,40,43,50,51,54,60,61,67,68,69,70,82,83,84,106,109,111,119,120,129,132,135,147,148,149,151,171,172,174,178,182,183,189,193,202,204,220,221,225,226,227,229,230,231,232,242,246,247,250,269,272,273,274,275,276,282,283,291,292,311,316,317],typedef:127,typic:[2,16,22,50,52,53,60,76,86,104,127,131,133,134,147,148,182,183,229,230,254,275,276,282,283,285,316],typo:[158,182,183,189,201,202,203,206,220,226,227,272,273,275,276,282,283],u32:[21,109,110,119,120,171,175,313],u64:[17,68,71,120,171,175,313],u78c9:[10,34],u78d3:[246,247,272,275,276,282,283],uart:[1,2,151,154,164,184,186,220,224,231,232,246,247,275,276,290,299],uart_con_flush:[246,247],uart_opal_flush:[246,247],uav:[231,232],ubuntu:[162,171,172,173,215,220,226,227,275,276,277,291,292],ucod:[4,102,171,172,180,182,183,193,231,232,233,246,247,250,254,275,276,277,281,282,283],udbg_opal_putc:[291,292],udbg_writ:[291,292],udelai:[58,282,283],uefi:[291,292],ugli:[266,273,274],uglier:[226,227],uint16_t:[35,57,74,78,81,88,89,90,92,93,99,103,121],uint32_t:[35,44,47,50,53,56,57,59,60,61,62,63,65,69,75,77,78,82,91,97,98,101,105,106,113,114,117,120,121,128,129,202,203,226,227,316],uint64:[43,72],uint64_t:[42,45,46,47,48,50,51,52,53,55,56,59,60,61,67,68,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,112,114,115,117,118,123,124,126,127,128,202,203,311,316],uint8_t:[35,47,49,50,56,57,60,64,65,67,70,78,81,96,100,101,112,121,171,172,238,314,316],uio:[162,215,226,227],uio_pdrv_genirq:[162,215,226,227],ultim:[182,183,282,283],ultra_turbo:13,ultravisor:316,umac:[28,229,230],umask:220,unabl:[43,49,58,109,110,118,119,246,247,282,283,286,291,292,298],unaccess:[287,291,292],unalign:[229,230,231,232,246,247,288,294],unannounc:139,unassign:21,unassoci:[217,231,233],unauthor:311,unavail:[112,217,231,233],unavoid:22,unawar:[246,247],unbal:[282,285],unchang:[273,274,275,276,316],unclear:[246,247],uncompress:132,uncondit:[171,172,237],uncondition:[147,148,171,172,202,203,204,226,228,231,232,270,272,275,276,311],unconnect:[246,247],uncorr:[256,275,276],uncorrect:[254,275,277],uncorrerr:164,uncorrerrorstatu:84,undefi:[246,248],undefin:[70,171,172,287,291,292,313],under:[2,6,8,9,10,13,22,28,31,42,58,70,113,114,132,138,139,144,153,169,171,172,174,175,178,182,183,187,193,194,203,204,220,222,226,227,228,229,230,231,232,236,241,246,247,275,282,283,285,286,287,291,292,313],underflow:[171,172,307,309],underli:[162,171,172,214,231,232,241,246,247,255,275,316],underneath:[22,44],understand:[40,68,138,139,141,162,171,172,215,220,266,273,274,291,292],undertand:220,undesir:[122,171,174,231,233],undo:[113,259,280],unexpect:[17,51,162,171,172,173,184,185,195,202,203,214,224,255,275,281,282,283,311,314],unexpectedli:[275,282,283,284,291,292],unfilt:[182,183,287,291,292],unfinish:205,unflatten:135,unfortun:[0,157,162,171,172,187,193,214,221,224,225,226,227,228,229,230,231,232,235,236,241,246,247,275,276,282,285,286,291,292],unfreez:182,ungat:[267,273,274],unhandl:[162,214,217,224,231,232,254,275,276,291,292],unhappi:[231,232],unifi:[2,145,147,149,182,183],unimpl:42,uniniti:[146,275],uninitialis:[182,183,226,227,273,274],unintend:[182,183],unintent:[251,275,276],union:70,uniqu:[18,19,22,28,33,35,56,88,120,134,178,182,183,282,316],unit:[2,22,34,38,61,145,154,157,159,170,171,172,182,183,184,185,187,193,196,224,226,231,232,246,247,257,275,276,277,282,284,291,292],unittest:229,unknown:[22,35,61,107,131,147,162,171,172,214,219,222,224,226,228,231,233,245,246,247,248,250,273,275,276,288,295],unless:[2,15,17,88,134,138,140,154,155,171,172,173,204,220,231,232,246,247,275,276,282,283,316],unlik:[43,96,120,127,141,182,183,224,229,230,231,232,274,275,276,282,284,291,292,311,313,316],unlink:50,unlock:[145,162,171,172,181,182,183,214,225,246,247,256,275,276,278,279,313],unlock_check:278,unlucki:[226,227],unmask:[121,171,172,220,245,316],unmodifi:316,unnam:[226,227],unnecessari:[160,226,227,275,276,316],unnecessarili:[231,232,246,247],unneed:[268,273],unnot:[231,232,282,283,291],unpack:[226,227],unpatch:193,unplug:[27,213,220],unrecover:[17,35,171,172,178,182,183,196,202,203,204,261,281,282,283,285],unregist:[40,50,71],unrel:203,unreli:[162,171,172,215,217,226,227,231,233,273,274],unreproduc:[246,248],unrespons:[162,191,193,208,215,217,226,227,231,233,290,299],unsaf:[81,144,171,172],unset:[268,273],unsign:[35,106,171,172,220,226,227],unspecifi:316,unstabl:[171,173,226,275],unsupport:[22,29,41,44,50,60,61,70,73,78,80,91,92,95,96,131,132,146,171,172,226,227,282,283,316],unsuppreq:164,unsuspect:[291,292],untest:[291,292],unthrottl:70,until:[0,4,17,42,44,50,62,74,108,113,117,125,135,153,163,165,171,172,174,175,179,182,183,201,202,203,204,205,208,216,217,220,221,224,226,227,229,230,231,232,233,240,241,243,245,255,257,258,261,266,272,273,274,275,276,279,281,282,283,286,291,292,316],untim:[171,174],untouch:[118,221],untranls:134,untransl:89,unus:[42,45,51,108,220,229,230,258,261,279,281,282,283,291,292,311,313],unusu:231,unwind:[246,247,282,285],uopwr:[26,171,172,182,183,249,282,285],upcom:139,updat:[0,1,2,4,24,35,37,38,42,44,53,62,63,64,65,68,70,71,72,75,100,101,108,118,124,134,137,146,153,154,156,157,159,161,162,165,171,172,173,174,182,183,187,193,194,196,201,202,203,204,213,215,220,221,224,226,227,228,229,230,231,232,233,236,237,238,242,246,247,248,250,251,253,254,256,257,258,259,268,271,273,274,275,276,277,278,279,280,282,283,285,286,287,291,292,296,298,304,311,313,315],update_bank:311,upgrad:[22,157,171,172,226,253,273,274,275,276,291,292],upload:146,upon:[13,14,48,84,138,153,154,171,172,178,182,183,204,246,247],upper:[88,162,214,220,226,227,282,284,285],uppercas:[273,274],ups:[231,232,282,283],upstream:[50,101,139,140,141,164,171,172,182,183,189,195,202,203,246,247,248,259,275,280,282,283,284,291,292],uptick:219,upto:[35,120,171,175,291,292],urgent:134,usa:138,usabl:[21,22,27,50,147,149,171,172,184,185,201,220,226,227,231,232,316],usag:[4,17,21,22,39,130,144,171,172,226,227,231,233,273,274,275,276,311],usb:[34,282,285],use:[0,1,2,7,13,17,19,21,22,28,31,39,40,42,43,44,50,51,52,53,62,63,64,65,68,70,71,75,86,88,101,104,106,113,115,120,130,131,132,133,134,137,138,139,144,146,147,148,155,162,164,168,171,172,173,174,175,178,181,182,183,184,185,186,189,193,194,202,203,204,208,212,214,220,222,224,226,227,228,229,230,231,232,238,241,246,247,248,249,250,255,257,261,263,267,271,272,273,274,275,276,277,278,279,281,282,283,284,285,286,287,290,291,292,294,298,311,316],used:[2,7,9,13,14,16,19,21,22,23,24,27,28,29,31,35,36,37,41,42,44,45,49,50,51,56,58,67,69,70,71,73,75,81,82,83,84,88,89,90,93,95,97,98,102,103,104,105,109,110,111,113,117,118,119,120,121,122,123,127,128,132,133,134,135,171,172,173,174,175,178,179,180,181,182,183,184,185,193,202,203,213,220,221,222,224,225,226,227,228,229,230,231,232,233,236,238,239,241,246,247,248,249,250,251,252,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,294,295,296,297,299,300,301,302,303,304,305,306,307,309,311,314,316],useful:[50,113,134,139,171,172,173,178,182,183,184,185,193,202,203,220,224,226,227,229,230,231,232,235,246,247,257,273,274,275,276,278,282,283,285,291,292],useless:[171,172,182,183,202,203,226,227,231,232,282,283],user:[0,1,2,17,21,22,23,33,35,36,68,104,115,132,139,141,147,148,158,161,162,171,172,173,181,182,183,184,186,189,198,202,203,204,208,215,220,225,226,227,228,229,230,231,232,246,247,248,253,258,267,268,273,274,275,276,279,282,283,285,287,291,292,298,304,312,315,316],user_map:[291,292],userdata1:[171,174],userdata2:[171,174],userspac:[6,17,21,22,132,133,146,161,180,182,183,224,231,232,246,247,252,260,273,274,282,283],uses:[0,3,15,16,28,35,40,55,56,70,97,107,123,134,171,172,182,183,193,201,206,226,227,228,229,230,231,232,235,236,241,246,247,250,258,268,271,272,273,274,275,276,279,282,283,291,292,313,314,316],using:[0,1,2,7,13,14,19,22,28,29,35,37,39,40,44,50,54,58,60,68,70,109,110,119,120,134,136,147,149,162,171,172,173,177,181,182,183,184,185,193,202,203,204,205,208,212,213,215,219,220,221,222,224,225,226,227,228,229,230,231,232,233,238,241,246,247,254,255,258,261,267,268,271,272,273,274,275,276,279,281,282,283,285,286,287,291,292,311,314,315,316],usr:[182,183,225,287],usual:[2,58,70,77,135,154,171,172,202,203,219,226,227,246,247,268,272,273,275,276,287,291,292,316],utc:[231,233],util:[36,135,146,147,148,149,161,166,185,193,197,219,224,246,247,257,311,313,314],utilis:37,utin64_t:134,utl:[84,159,196],v100:[282,283,285,287,291,292],v10:[231,233],vagu:[287,291,292],vaibhav:[171,184,185,187,193,226,231,275],vaidyanathan:[147,148,161,171,184,185,193,202,203,219,220,224,229,231,275],val:[123,128],valeev:193,valgrind:[171,172,220],valid:[9,17,23,35,38,41,43,47,49,50,56,70,97,100,102,103,117,134,144,145,146,162,171,172,178,182,183,193,202,203,215,220,226,227,229,230,231,232,239,241,246,247,258,271,275,276,279,282,283,286,287,291,292,294,312,316],validate_esl:[307,309],validate_esl_list:[307,309],validate_mask:134,valu:[1,2,4,5,13,14,15,17,19,21,23,24,28,31,35,37,41,52,56,58,61,62,68,69,70,88,89,90,93,95,96,97,98,100,101,102,103,105,107,108,110,114,117,121,123,126,128,129,132,134,145,146,147,148,161,162,166,171,172,173,175,178,182,183,184,186,188,194,198,201,202,203,204,213,215,220,221,224,226,227,228,229,230,231,232,233,238,239,240,241,246,247,248,250,251,257,258,261,268,271,272,273,274,275,276,278,279,281,282,283,284,285,288,289,291,292,294,299,311,313,314,316],valuabl:133,vari:[1,35,153,259,275,276,280],variabl:[1,17,23,38,42,44,69,75,76,141,162,182,183,204,215,219,220,225,226,227,231,232,246,247,258,275,276,279,282,285,287,291,292,304,311],variable_bank:311,variant:[231,232,246,247,248,256,278,282,283,312],variat:132,varieti:[275,276,283],variou:[2,4,27,29,35,37,43,68,144,171,172,173,218,226,227,229,231,232,244,245,246,247,258,273,274,275,276,279,282,283,311,314,316],vas:[33,171,174,229,230,315],vas_addr:33,vasant:[147,148,161,171,184,185,193,202,203,204,219,220,224,226,229,231,258,275,279,282,283],vcpu:316,vcs:145,vcss:13,vdd:[13,145,171,172],vdid:[275,276],vdn:[171,172],vector:[21,22,134,157,171,173,187,202,203,220,231,232,233,272,275,276,282,283],vendor:[2,26,27,30,34,139,140,171,172,220,224,226,227,231,232,234,268,273,274,287,291,292],venic:136,ver:35,verbatim:138,verbos:[171,172,175,205,226,228,282,283,291,292],veri:[1,4,5,22,41,42,58,146,171,172,182,202,203,217,226,227,229,231,232,233,236,246,247,261,271,272,273,274,275,276,281,282,283,285,286,291,292,313],verif:[3,23,38,134,171,172],verifi:[3,23,150,171,172,173,182,183,204,257,259,275,276,278,280,282,283,287,291,292,301,304],verify_signatur:[307,309],versa:[109,282,283],version:[1,2,3,8,21,22,24,25,26,35,38,41,42,43,46,47,50,67,70,84,115,130,131,132,138,140,143,144,147,148,149,150,171,172,173,174,175,178,179,180,181,188,189,190,192,193,195,196,197,198,199,200,201,202,203,219,220,221,224,226,227,229,230,231,232,233,241,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,286,287,288,289,290,291,292,294,295,296,297,299,300,301,302,303,305,306,307,309,310,313,316],versu:[16,202],vesnin:[136,182,183],vga:[155,184,185,220,251,268,273,274],via:[2,13,17,20,35,37,40,41,47,61,68,70,77,93,109,119,120,132,134,137,138,139,140,144,151,163,171,172,182,183,193,202,203,216,219,220,221,224,226,227,228,229,230,231,232,238,246,247,268,269,273,275,276,282,283,285,287,288,291,292,312,313,316],vice:[109,282,283],vid:[14,171,175],view:[12,171,172,220,275,276],vini:221,violat:[282,285],vipin:[147,148,161,184,185,193,202,203],virt:[182,183],virtual:[2,25,28,35,38,132,171,172,182,183,202,203,221,229,230,261,275,276,281,282,283,285,286,291,292,316],visibil:[226,227],visibl:[0,2,141,158,171,172,189,220,273,291,292,298,316],vital:[25,38,220],vmalloc:[202,203],vmlinux:132,vmlinux_map:[225,291,292],vmx:2,vmx_crypto:[162,215,226,227],vnet:224,vnvram:[210,217,231,232,302],volatil:[76,171,172,213,220,273,282,283,311],voltag:[13,14,182,183,229,230],volum:139,voluntarili:[114,151,171,172],vou:[246,247,272,275,276],vp_id:316,vpd:[2,25,38,135,146,171,172,180,194,219,220,221,222,231,232,234,246,247,273,282,283,288,295,301,316],vpd_data_pars:288,vpd_valid:220,vpd_vini_pars:288,vpnor:[171,172],vpodc:155,vprintk_emit:[217,231,233],vprlog:[273,274],vrm:[171,172],vrml:[171,172],vsd:222,vsnprintf:220,vsu:[157,187],vsx2:21,vsx:[2,22],vtpm:32,vvs:[164,213,220],w25q256bv:[184,185],waddress:[291,292],wafer:[231,232,317],wai:[20,22,36,37,44,58,61,77,117,121,138,139,140,160,171,172,173,178,180,182,183,193,201,205,213,220,224,226,227,228,229,230,231,232,234,238,246,247,250,261,273,274,275,276,279,281,282,283,285,286,291,292,298,316],wait:[0,35,43,96,108,109,110,113,117,119,120,131,160,161,162,163,171,172,174,175,182,183,184,185,202,203,208,209,213,216,220,226,227,228,229,230,231,233,241,243,246,247,248,255,258,261,271,272,273,274,275,276,279,281,282,283,286,287,289,291,292],wait_for_all_occ_init:299,wait_for_resource_load:[220,226,227],wait_tim:[287,291,292],waiter:[275,276],waitin:[287,291,292],wake:[122,171,172,202,203,246,247,257,273,274,275,276,278,282,283],wakeup:[122,171,172,182,183,231,232,235,242,255,275,276,302],wakup:[182,183],walk:[115,171,172,174,182,183],walthour:[164,184,185,231],want:[1,2,17,35,50,84,124,127,133,155,157,171,172,175,178,182,183,187,204,217,220,226,227,229,230,231,232,233,246,247,250,261,273,274,275,276,281,282,283,285,286,291,292,316],warkenti:[202,204],warkentin:[147,148],warn:[1,19,54,56,70,88,89,90,93,97,98,101,103,105,108,121,130,132,134,146,147,160,161,165,171,172,175,182,183,184,185,189,193,195,202,203,205,220,224,226,227,228,229,230,231,232,252,257,275,276,277,278,281,282,283,285,288,291,292,299],warrant:[21,256,275,276],wart:[226,227],wasn:[145,165,226,227,254,275,277,282,283],wast:[1,147,149,224,229,230],watch:[155,171,172,220,229,230,231,232,241],watchdog:[5,38,146,162,215,226,227,246,247,248],watermark:[171,172,238],wd_power_cycle_act:[273,274],wd_reset_act:[273,274],weather:70,web:12,wed:[154,155,156,231,233],wedg:[258,279,282,283],wednesdai:[175,179,183,184,186,187,192,195,199,201,204,205,209,213,215,217,222,223,232,234,239,240,241,248,249,250,253,257,258,265,266,268,273,278,279,288,298,303,304,305,306],week:[139,203,204,205,206,219,220,221,222,223,224,225,226,227,228,283,284,285],wei:171,weird:[182,220],welcom:[132,202,203],well:[1,39,50,125,132,133,145,171,172,174,182,183,203,217,219,224,226,227,229,230,231,232,233,246,247,248,252,254,261,272,273,275,276,277,281,282,283,291,292],went:[43,83,117,124,151,195,202,203,217,231,232,233,246,259,280,282,283,287,291,292],were:[4,17,39,42,46,58,75,131,141,143,159,160,161,171,174,175,184,185,195,196,202,203,219,220,229,230,231,232,246,247,250,258,259,272,273,274,275,276,277,279,280,282,283,284,285,287,291,292,311,312,316],weren:[167,171,172,238,282],werner:[219,220],werror:[144,171,173,184,185,288],wformat:[184,185],what:[1,2,4,15,17,22,38,47,51,84,109,110,130,133,141,157,171,172,182,183,187,193,202,203,204,205,220,226,227,228,229,230,231,232,238,246,247,248,257,258,266,267,273,274,275,276,277,279,282,283,284,285,287,291,292,307,309,311,314,316],whatev:[139,171,172,226,227,228,261,272,275,276,281,286,287,291,292],wheel:132,when:[0,2,4,13,19,21,22,23,24,33,35,37,41,47,50,51,52,53,58,59,68,70,88,89,101,104,108,113,115,120,121,122,123,124,130,131,132,133,134,139,140,141,144,145,146,147,148,149,153,154,156,157,158,159,160,162,164,165,166,167,168,171,172,173,174,177,178,182,183,184,185,186,187,189,190,191,193,196,198,201,202,203,204,205,207,214,215,216,217,220,221,222,224,225,226,227,228,229,230,231,232,233,234,238,240,241,245,246,247,248,251,253,255,256,258,261,266,268,269,271,272,273,274,275,276,277,278,279,281,282,283,284,285,286,287,288,289,291,292,294,298,299,306,311,312,313,314,315,316],whenev:[40,182,183,217,226,228,229,230,231,233,239,268,273,274,275,276],where:[0,1,3,4,21,22,28,33,35,36,39,40,42,50,58,62,63,64,65,68,69,70,75,87,88,89,103,106,109,110,114,119,124,130,131,132,133,134,144,146,147,148,151,153,157,162,163,166,168,169,171,172,173,174,175,176,178,182,183,187,193,195,202,203,204,205,208,215,216,217,220,221,224,226,227,228,229,230,231,232,233,235,238,242,246,247,249,251,257,258,260,269,272,273,274,275,276,278,279,282,283,287,291,292,311,316,317],wherea:13,whether:[2,24,32,37,58,68,70,88,99,121,132,135,138,171,172,202,203,220,226,227,229,230,246,247,250,273,275,276,282,283,311,314,316],which:[0,1,2,3,9,13,14,15,16,17,19,21,22,24,27,28,29,33,35,37,41,44,50,52,56,58,62,67,68,69,70,73,76,84,88,93,100,102,104,106,108,109,118,119,120,122,123,129,133,134,135,140,141,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,178,179,180,181,182,183,184,185,186,187,188,189,190,192,193,195,196,201,202,203,204,205,206,208,214,215,217,218,219,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,238,241,242,244,245,246,247,248,250,251,254,255,256,257,258,261,267,268,269,271,272,273,274,275,276,277,278,279,281,282,283,284,285,287,288,291,292,293,298,304,308,310,311,313,314,316,317],whichev:224,whih:[282,283],whilst:[171,174],white:311,whitehorn:146,whitelist:[134,171,231,232,250,275,276],whitespac:[171,226,227,231],who:[1,4,72,95,138,141,147,148,160,161,164,172,184,185,187,193,202,203,204,246,247,259,280],whoever:133,whole:[138,147,148,154,161,171,172,204,206,226,227,229,230,231,261,273,274,275,276,282,283,291,292,313,316],wholesal:[291,292],whose:[68,182,183,231,232,246,247],whta:1,why:[70,140,171,172,220,224,226,246,247,268,273,274,287,291,292],wide:[14,20,171,172,282,283],width:[134,135,220,226,228,229,230,231,232,250,268,271,273,274,275,276,287,291,292],wild:[141,166,261,281,282,283,285],wildcard:[171,175,182,183,282,283,287,291,292],willi:[219,220],william:[161,184,185,187,193,202,203,219,220,231],wimplicit:224,win:[254,275,276],win_siz:88,win_size32:88,win_size_32:88,win_size_64:88,winbond:[184,185],window:[30,33,41,88,89,90,93,103,134,171,172,182,183,188,229,246,247,251,252,258,268,273,274,275,276,279,282,283,285],window_id:[88,89],window_num:[90,93,103,134],window_numb:[88,89],window_s:89,window_typ:[90,93,103,134],winkl:13,wio:[256,278],wipe:[161,171,172,316],wire:[27,29,135,189,226,229,230,282,283],wise:[14,282,283],wish:[140,204,258,279,282,283],wistron:[136,304],witherspoon:[41,134,136,174,182,183,220,226,227,231,232,246,247,250,273,274,279,285,291],within:[35,58,88,89,90,93,97,100,101,103,109,132,134,171,172,182,183,206,217,226,231,233,246,247,254,258,268,273,275,276,277,279,282,283,316],without:[5,21,22,37,42,61,89,100,104,122,135,161,169,171,172,173,174,180,182,183,189,195,201,202,203,204,207,208,220,221,224,226,227,228,229,231,232,238,241,246,247,253,254,258,261,266,272,273,274,275,276,279,281,282,283,285,291,292,312,316],witti:127,wkup:[171,172],wno:[275,276],woefulli:134,wof:[13,171,172,173,182,183,184,185,246,247],woken:[182,183],won:[121,150,168,171,172,182,183,220,226,227,238,258,273,274,275,276,279,282,283,287,291,292,316],wont:[182,282,283],word0:[162,215,226,227],word1:[162,215,226,227],word:[13,35,78,226,227,261,281,282,283,286,291,292,316],work:[2,5,13,17,22,39,42,44,49,50,84,130,138,139,144,145,151,162,164,171,172,173,174,175,178,182,183,193,195,202,203,204,205,206,207,208,209,215,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,240,246,247,248,250,259,261,266,272,273,274,275,276,277,279,280,282,283,284,285,287,291,292,316],workaround:[48,145,146,147,148,162,171,172,182,183,193,208,215,217,220,224,226,227,228,231,232,233,236,241,246,247,250,257,266,270,272,273,274,275,276,277,282,283,286,287,291,292],workaroundi:250,workbook:[171,172,180,182,183,226,228,231,232,236,246,247,248,255,275,282,284],worker_thread:[217,231,233,261,281,282,283],workflow:[184,185],workload:[13,109,153,157,184,185,187],workqueu:[217,231,233],world:[20,171,172,184,185,202,204,220,246,247,275,276,282],worri:219,wors:[150,182,183,246,248],worst:[169,220],worth:[171,172],would:[2,4,5,14,21,22,42,46,58,81,132,133,141,146,147,148,152,153,154,162,164,165,166,168,171,172,174,178,179,182,183,189,202,203,204,207,214,220,224,226,227,229,230,231,232,233,234,240,246,247,248,249,253,257,258,261,266,273,274,275,276,278,279,281,282,283,287,291,292],wouldn:[159,168,196,279,282,283],wrap:[133,171,172,220,246,247,275,276,291,292],wrapper:[35,50,120,171,172,198,202,203,282,285,314],wreck:[182,183,226,227],writ:220,writabl:[188,282,283],write:[1,2,9,12,13,24,28,37,39,40,41,47,49,52,54,61,69,76,77,78,107,108,117,118,127,128,139,146,158,161,162,171,172,173,174,176,182,183,188,189,193,202,203,205,215,217,219,220,224,226,227,228,229,230,231,232,233,238,242,246,247,248,252,258,261,268,271,272,273,274,275,276,279,281,282,283,284,285,287,288,290,291,292,294,299,311,313],write_reg:[287,291,292],writelock:313,writer:[291,292],written:[0,1,41,52,69,78,171,172,188,219,220,226,227,229,230,231,232,246,247,251,275,276,287,291,292,311,313],wrong:[43,51,83,117,124,129,131,166,171,172,182,183,193,194,201,213,220,226,227,228,229,230,231,232,238,246,250,259,271,272,273,274,275,276,280,282,285],wrongli:[202,203],wrote:[171,172],wrprotect:[202,204],wsp:[231,232],wspoon:[171,172],wstack:144,www:155,wzs004a:[246,247,272,275,276,282,283],wzs007x:34,x08:[134,229,230,287,291,292],x16:[134,220,226,227,229,230,268,273,282,283,287,291,292],x86:[138,282,285],x86_64:[246,247],x8x8:[282,283],x_tabl:[162,215,226,227],xer:[162,171,173,178,182,183,214,215,224,226,227,246,247,248,282,284],xhci:[282,285],xic:[62,63,64,65,121,193,224,316],xicp:2,xirr:[62,316],xive2:310,xive:[38,56,62,97,105,134,179,181,182,183,193,220,222,224,226,227,228,229,230,233,237,241,246,247,270,275,276,282,283,289,294,305],xive_cpu_st:[226,227],xive_dump_emu:316,xive_dump_tm_hyp:316,xive_dump_tm_o:316,xive_dump_tm_pool:316,xive_dump_tm_us:316,xive_dump_vp:316,xive_eq_for_target:[231,232,305],xive_get:220,xive_get_:220,xive_get_ir_target:220,xive_get_vp:220,xive_num:[56,105,134],xive_numb:[56,105,134],xive_provision_cpu:220,xive_reset:[171,172,220,241],xive_set_eq_info:220,xive_source_interrupt:[231,233],xive_source_set_x:220,xive_sync_ea:316,xive_sync_queu:316,xivr:[56,105,134],xlink:37,xml:[4,171,172,275,287,291,292],xmon:[171,172,178,182,183,246,247,291,292],xor:[171,172],xpec_nest_capp_cntl:[271,275,276],xpec_nest_read_stack_overrid:[269,275,276],xpec_pci_prdstkovr:[269,275,276],xscom:[2,26,27,28,29,30,38,128,146,158,166,171,172,174,180,182,187,190,191,193,198,199,202,203,207,220,226,227,228,229,230,231,232,242,246,247,257,261,272,273,274,275,276,281,282,285,287,291,292,296,305],xscom_addr:[28,229,230],xscom_read:[128,171,174,198,202,203,231,232,275,276],xscom_read_cfam_chipid:[226,227],xscom_reset:[171,172],xscom_writ:[128,171,174,272,275,276,288],xscom_write_mask:[171,174],xsl:[193,291,292],xslo:75,xstop:[44,171,172,238,251,261,268,272,273,274,275,276,281,282,285],xstop_error:70,xstop_reason:[70,291,292],xstop_typ:70,xts_bdf:[182,183,246,247],xts_bdf_map:[282,283],xts_pid:[182,183],xup:[162,214,224],xxx2:[171,174],xxx:[84,291,292],xxxx:2,xyz:[231,232],xz_embed:133,y_m_d:[114,117,226,227],yadro:[136,182,183,275,291,292],year:[117,229,261,273,274,281,286,288,291,292],year_month_dai:117,yes:[226,268,273],yet:[35,41,60,125,146,166,171,172,178,182,183,219,220,224,226,229,230,237,246,247,273,274,275,276,282,283,284,287,291,292,316],yield:[14,282,283],yl10113bj001:34,yocto:[187,193],yolo:[268,273],york:138,you:[1,2,36,44,58,81,84,110,124,127,131,132,133,138,139,140,141,146,147,148,155,171,172,182,183,184,185,193,195,202,203,204,205,217,219,220,223,224,226,227,229,230,231,232,233,246,247,248,253,260,275,276,282,283,291,292,316],young:[155,184,185],your:[49,138,139,140,141,184,185,224,226,227,228,231,232,246,248,291,292],your_email:138,yourself:205,youtub:155,yuan:[202,224],zaiu:[136,171,172,220,246,247,273,274,285],zalloc:[272,275,276,306],zcal:[226,227,282,283],zero:[1,4,21,61,87,88,89,100,101,114,118,127,171,172,182,183,193,195,201,202,203,221,224,226,227,229,231,235,246,247,260,261,273,274,275,276,281,282,283,285,286,291,292,299,311,313,314],zeroiz:311,zlib:28,zone:[246,247],zork:132,zz24p1:287},titles:["OPAL &lt;\u2013&gt; BMC interactions","SkiBoot Console Log","Device Tree","ibm,cvc","ibm,firmware-versions node","ibm,opal","ibm,opal/diagnostics device tree entries","Dump (MPIPL) Device Tree Binding","System Firmware","ibm,opal/flash device tree entries","Service Indicators (LEDS)","nvram Device Tree Node","Operator Panel (oppanel)","ibm,opal/power-mgt device tree entries","ibm,opal/power-mgt/occ device tree entries","power-mgt/powercap","power-mgt/psr","Secvar Binding","ibm,opal/sensor-groups","ibm,opal/sensors/ device tree nodes","sysparams","ibm,powerpc-cpu-features Binding","ibm,powerpc-cpu-features Design","ibm,secureboot","IMC Device Tree Bindings","Device Tree","P9 memory hierarchy","Nvlink Device Tree Bindings","Nest (NX) Accelerator Coprocessor","OpenCAPI Device Tree Bindings","PCI Device Tree Bindings","reserved-memory device tree nodes","Trusted Platform Module (TPM)","Virtual Accelerator Switchboard (VAS)","VPD (Vital Product Data)","How to log errors on OPAL","GCOV for skiboot","OPAL/Skiboot In-Memory Collection (IMC) interface Documentation","SkiBoot Documentation","Memory in skiboot","MPIPL (aka FADUMP) Overview","OPAL/Skiboot Nvlink Interface Documentation","OPAL API Documentation","OPAL_CEC_POWER_DOWN","OPAL_CEC_REBOOT and OPAL_CEC_REBOOT2","OPAL_CHECK_ASYNC_COMPLETION","OPAL_CHECK_TOKEN","Code Update on FSP based machine","OPAL_CONFIG_CPU_IDLE_STATE","OPAL Console calls","OPAL Dumps","OPAL_ELOG: Error logging","OPAL Flash calls","OPAL_GET_DEVICE_TREE","OPAL_GET_EPOW_STATUS","OPAL_GET_MSG","OPAL_GET_MSI_32 and OPAL_GET_MSI_64","OPAL_GET_XIVE","Hypervisor Maintenance Interrupt (HMI)","OPAL_HANDLE_INTERRUPT","OPAL_I2C_REQUEST","OPAL_IMC_COUNTERS_INIT","OPAL_INT_EOI","OPAL_INT_GET_XIRR","OPAL_INT_SET_CPPR","OPAL_INT_SET_MFRR","OPAL_INVALID_CALL","OPAL_IPMI_SEND","Service Indicators (LEDS)","OPAL_LPC_READ","OPAL_MESSAGE","OPAL MPIPL APIs","OPAL_NMMU_SET_PTCR","OPAL NPU2 calls","OPAL_NPU_SET_RELAXED_ORDER","OPAL_NPU_SPA_SETUP","OPAL NVRAM","Get/Set System Parameters","OPAL PCI Config Space Access","OPAL_PCI_EEH_FREEZE_CLEAR","OPAL_PCI_EEH_FREEZE_SET","OPAL_PCI_EEH_FREEZE_STATUS","OPAL_PCI_ERR_INJECT","OPAL_PCI_GET_HUB_DIAG_DATA","OPAL_PCI_GET_PHB_DIAG_DATA2","OPAL_PCI_GET_POWER_STATE","OPAL_PCI_GET_PRESENCE_STATE","OPAL_PCI_GET_PBCQ_TUNNEL_BAR","OPAL_PCI_MAP_PE_DMA_WINDOW","OPAL_PCI_MAP_PE_DMA_WINDOW_REAL","OPAL_PCI_MAP_PE_MMIO_WINDOW","OPAL_PCI_MSI_EOI","OPAL_PCI_NEXT_ERROR","OPAL_PCI_PHB_MMIO_ENABLE","OPAL_PCI_POLL","OPAL_PCI_REINIT","OPAL_PCI_RESET","OPAL_PCI_SET_MVE","OPAL_PCI_SET_MVE_ENABLE","OPAL_PCI_SET_P2P","OPAL_PCI_SET_PE","OPAL_PCI_SET_PELTV","OPAL_PCI_SET_PHB_CAPI_MODE","OPAL_PCI_SET_PHB_MEM_WINDOW","OPAL_PCI_SET_POWER_STATE","OPAL_PCI_SET_XIVE_PE","OPAL_PCI_TCE_KILL","OPAL_PHB_SET_OPTION","OPAL_POLL_EVENTS","OPAL Power Shift Ratio","OPAL Power Caps","OPAL_PRD_MSG","OPAL_QUERY_CPU_STATUS","OPAL_QUIESCE","OPAL Timed Power On and Delayed Power Off","OPAL_REINIT_CPUS","OPAL_RESYNC_TIMEBASE","OPAL Real Time Clock (RTC) APIs","OPAL Secure Variable API","OPAL Sensor Groups","OPAL_SENSOR_READ","OPAL_SET_XIVE","OPAL_SIGNAL_SYSTEM_RESET","OPAL_SLW_SET_REG","Starting and stopping secondary CPUs","OPAL_SYNC_HOST_REBOOT","OPAL_TEST","OPAL_WRITE_OPPANEL_ASYNC","OPAL_XSCOM_READ","OPAL_NX_COPROC_INIT","POWER9 Changes to OPAL API","OPAL API Return Codes","OPAL Specification","Skiboot overview","PCI","PCI Slots","Supported platforms &amp; CPUs","Power Management","Contributing to skiboot","Development and Release Process","Skiboot stable tree rules and releases","Versioning Scheme of skiboot","Release Notes","skiboot 4.0","skiboot 4.1","skiboot 4.1.1","skiboot 5.0","skiboot-5.1.0","skiboot-5.1.0-beta1","skiboot-5.1.0-beta2","skiboot-5.1.1","skiboot-5.1.10","skiboot-5.1.11","skiboot-5.1.12","skiboot-5.1.13","skiboot-5.1.14","skiboot-5.1.15","skiboot-5.1.16","skiboot-5.1.17","skiboot-5.1.18","skiboot-5.1.19","skiboot-5.1.2","skiboot-5.1.20","skiboot-5.1.21","skiboot-5.1.3","skiboot-5.1.4","skiboot-5.1.5","skiboot-5.1.6","skiboot-5.1.7","skiboot-5.1.8","skiboot-5.1.9","skiboot-5.10","skiboot-5.10-rc1","skiboot-5.10-rc2","skiboot-5.10-rc3","skiboot-5.10-rc4","skiboot-5.10.1","skiboot-5.10.2","skiboot-5.10.3","skiboot-5.10.4","skiboot-5.10.5","skiboot-5.10.6","skiboot-5.11","skiboot-5.11-rc1","skiboot-5.2.0","skiboot-5.2.0-rc1","skiboot-5.2.0-rc2","skiboot-5.2.1","skiboot-5.2.2","skiboot-5.2.3","skiboot-5.2.4","skiboot-5.2.5","skiboot-5.3.0","skiboot-5.3.0-rc1","skiboot-5.3.0-rc2","skiboot-5.3.1","skiboot-5.3.2","skiboot-5.3.3","skiboot-5.3.4","skiboot-5.3.5","skiboot-5.3.6","skiboot-5.3.7","skiboot-5.4.0","skiboot-5.4.0-rc1","skiboot-5.4.0-rc2","skiboot-5.4.0-rc3","skiboot-5.4.0-rc4","skiboot-5.4.1","skiboot-5.4.10","skiboot-5.4.11","skiboot-5.4.12","skiboot-5.4.2","skiboot-5.4.3","skiboot-5.4.4","skiboot-5.4.5","skiboot-5.4.6","skiboot-5.4.7","skiboot-5.4.8","skiboot-5.4.9","skiboot-5.5.0","skiboot-5.5.0-rc1","skiboot-5.5.0-rc2","skiboot-5.5.0-rc3","skiboot-5.6.0","skiboot-5.6.0-rc1","skiboot-5.6.0-rc2","skiboot-5.7","skiboot-5.7-rc1","skiboot-5.7-rc2","skiboot-5.8","skiboot-5.8-rc1","skiboot-5.9","skiboot-5.9-rc1","skiboot-5.9-rc2","skiboot-5.9-rc3","skiboot-5.9-rc4","skiboot-5.9-rc5","skiboot-5.9.1","skiboot-5.9.2","skiboot-5.9.3","skiboot-5.9.4","skiboot-5.9.5","skiboot-5.9.6","skiboot-5.9.7","skiboot-5.9.8","skiboot-5.9.9","skiboot-6.0","skiboot-6.0-rc1","skiboot-6.0-rc2","skiboot-6.0.1","skiboot-6.0.10","skiboot-6.0.11","skiboot-6.0.12","skiboot-6.0.13","skiboot-6.0.14","skiboot-6.0.15","skiboot-6.0.16","skiboot-6.0.17","skiboot-6.0.18","skiboot-6.0.19","skiboot-6.0.2","skiboot-6.0.20","skiboot-6.0.21","skiboot-6.0.22","skiboot-6.0.23","skiboot-6.0.24","skiboot-6.0.3","skiboot-6.0.4","skiboot-6.0.5","skiboot-6.0.6","skiboot-6.0.7","skiboot-6.0.8","skiboot-6.0.9","skiboot-6.1","skiboot-6.1-rc1","skiboot-6.2","skiboot-6.2-rc1","skiboot-6.2-rc2","skiboot-6.2.1","skiboot-6.2.2","skiboot-6.2.3","skiboot-6.2.4","skiboot-6.3","skiboot-6.3-rc1","skiboot-6.3-rc2","skiboot-6.3-rc3","skiboot-6.3.1","skiboot-6.3.2","skiboot-6.3.3","skiboot-6.3.4","skiboot-6.3.5","skiboot-6.4","skiboot-6.4-rc1","skiboot-6.5","skiboot-6.5.1","skiboot-6.5.2","skiboot-6.5.3","skiboot-6.5.4","skiboot-6.6","skiboot-6.6.1","skiboot-6.6.2","skiboot-6.6.3","skiboot-6.6.4","skiboot-6.6.6","skiboot-6.7","skiboot-6.7.1","skiboot-6.7.2","skiboot-6.7.3","skiboot-6.8","skiboot-6.8.1","skiboot-7.0","Secvar Drivers","Skiboot edk2-compatible Secure Variable Backend","secboot_tpm secvar storage driver for P9 platforms","Secure and Trusted Boot Library (LibSTB) Documentation","Virtual Accelerator Switchboard (VAS)","P9 XIVE Exploitation","XSCOM Bindings"],titleterms:{"0x1":108,"0x10":108,"0x100":108,"0x2":108,"0x20":108,"0x200":108,"0x4":108,"0x40":108,"0x400":108,"0x8":108,"0x80":108,"0x800":108,"case":312,"function":126,"new":[147,148,149,171,172,182,183,184,185,186,202,203,220,224,226,227,229,230,231,232,246,247,282,283,291,292,293,298,304,310],"return":[43,44,45,47,48,50,53,54,55,60,61,67,69,71,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87,91,92,94,95,96,99,100,102,104,106,107,109,110,112,113,114,115,116,117,118,119,120,122,123,124,125,126,127,128,129,131,312],"var":313,The:147,VAS:[33,268,315],abi:38,acceler:[28,33,315],accept:140,access:78,after:134,aka:40,all:[157,187,190],ami:[147,148],api:[37,42,71,117,118,130,131,193,311,316],apollo:135,argument:[43,113,115,122,126,129,202,204],ast:[166,167,184,186,273,274],astbmc:[226,227,279],author:132,backend:[311,312],background:22,bank:313,barreley:[275,276],base:[13,47,147,148,153,182,183,184,186,193,202,203,220,226,231,232,273,274,275,276,282,283],been:147,behavior:[184,185],beta1:148,beta2:149,binari:133,bind:[7,17,21,24,27,29,30,41,134,312,317],bmc:[0,147,148,166,167,184,186,193,220,231,232,258,273,274,279],boot:[40,132,133,171,172,204,246,247,291,292,314],bootkernel:[202,204],branch:139,bug:[50,147,148,149,182,183,184,185,246,247,273,274],build:[36,291,292],call:[42,49,52,73,84,85,86,102,104,117],candid:202,cap:110,capabl:41,capi2:[275,276,282,283],capi:[154,171,172,182,183,193,194,202,203,220,231,232,246,247,268],caus:58,certif:138,chang:[130,149,150,157,158,161,164,165,166,167,171,184,185,187,202,204,219,220,223,224,226,229,231,246,247,273,274,275],changeset:[171,219,220,224,226,229,231,275],chassi:0,check:134,chip:[14,37],chiplet:317,clock:[0,117],close:139,code:[17,44,47,53,60,69,78,84,85,86,102,104,117,131,182,183,311,312,314],collect:[37,40],command:[202,204],comment:2,commun:[258,279],compat:[2,311,312],compress:28,config:78,configur:41,consider:141,consol:[1,49],constraint:35,contain:314,contribut:138,contributor:[147,148,164,171,184,185,187,193,202,203,204,219,220,224,226,229,231,275],control:[0,313],coprocessor:28,core:[13,37,220],counter:24,coverag:[182,183],cpu:[13,21,22,124,136],credit:[171,219,220,224,226,229,231,275],current:141,cvc:[3,314],data:[34,36],dd2:[229,230],debug:[1,44,134,137,171,172,182,183,202,203,226,246,247,275,276,282,283,291,292],defin:22,definit:132,degrad:134,delai:114,deprec:[282,283],design:[22,35,68],detect:132,develop:[38,138,139,171,219,220,224,226,228,229,231,275,276],devic:[2,6,7,9,11,13,14,19,24,25,27,29,30,31,40,41,130,134,193,312,316],diagnost:6,disabl:[134,137],dma:134,document:[37,38,41,42,202,203,314],domain:14,driver:[311,313],drop:136,dump:[7,35,40,50],ecid:317,edk2:312,eeh:134,employ:[171,219,224,231,275],emul:[27,41],endpoint:317,enforc:17,entri:[6,9,13,14],environ:[132,138],error:[35,51,58,134],event:[24,316],exampl:[2,3,4,17,21,23,32],exploit:316,extract:36,fadump:40,fast:[5,171,172,182,183,204,220,275,276],featur:[21,22,147,148,149,171,172,182,183,184,185,202,203,220,226,227,229,230,231,232,246,247,282,283,291,292,293,298,304,310],ffspart:[246,247],firenz:[135,275,276],fireston:154,firmwar:[4,8,314],fix:[147,148,149,171,172,182,183,184,185,227,246,247,273,274,291],flag:[13,311],flash:[9,52,202,226,227],follow:147,fork:139,format:[8,313],freq:14,frequenc:13,from:35,fsp:[35,47,147,148,151,153,157,171,172,184,186,187,193,194,202,203,220,224,226,227,229,231,232,273,274,275,276,282,283],futur:42,gard:[154,171,172],garrison:[187,188,193],gave:[171,219,220,224,226,229,231,275],gcov:36,gen:41,gener:[2,41,147,148,151,153,154,157,166,167,171,172,184,186,187,189,193,194,202,203,226,227,229,230,231,232,273,274,275,276,282,283,291,316],get:77,getscom:[184,186],got:35,gpu:27,group:[18,119],guid:38,guidelin:22,hacker:[219,224,275],handl:[58,246,247],have:147,heap:39,heartbeat:5,hierarchi:26,hiomap:[258,279,282,283],histori:141,hmi:[58,171,172,193,246,247],hotplug:135,how:35,howto:140,hypervisor:58,i2c:[220,224,273,274],ibm:[3,4,5,6,9,13,14,17,18,19,21,22,23,151,153,171,172,202,203,226,227,229,231,232,282,283],idl:13,ids:13,iii:316,imc:[24,37],improv:[147,148,171,172,182,183,184,185,246,247],improvemen:[182,183],indic:[10,68,313],initi:40,input:[44,47],interact:0,interfac:[22,35,37,41,133],intern:38,interrupt:[41,58,133],ioda:134,ipmi:[0,184,186,203,258,273,274,279,291,292],kei:312,layout:[133,313],led:[10,68],level:[1,5,24],libff:[220,226],libflash:[171,172,227,246,247],librari:314,libstb:314,licens:139,lifecycl:139,line:[171,202,204,219,220,224,226,229,231,275],link:134,list:58,load_bank:311,lock:[311,313],log:[1,35,51,132,133],machin:[47,147,148,151,153,166,167],mainten:58,mambo:[184,186,193,202,203,275,276],manag:[137,182,183,226,227],map:2,mask:[13,14],mata:134,max:13,max_var_s:311,maximum:134,mbox:[182,183,226,227],memori:[26,27,31,37,39,133],messag:0,mgt:[13,14,15,16],mhz:13,min:13,misc:224,mmio:134,mode:[17,24,37,134],modul:32,most:[171,219,220,224,226,229,231,275],mpipl:[7,40,71],msi:134,nest:[28,37],node:[2,4,5,7,11,17,19,21,24,31],nomin:13,note:[35,38,102,142,311],npu2:[73,182,183,226,227,246,247,268,273,274,291,292],npu:[29,202,203],nvlink2:[171,172,182,183,221,231,232,246,247,268,273,274,275,276,282,283],nvlink:[27,41,202,203],nvram:[11,76,202,203],obsolet:23,occ:[14,226,227],off:[37,114],opal:[0,5,6,9,13,14,17,18,19,35,37,38,41,42,49,50,52,71,73,76,78,109,110,114,117,118,119,130,131,132,153,171,172,184,186,193,226,227,229,230,246,247,316],opal_async_complet:131,opal_busi:131,opal_busy_ev:131,opal_cec_power_down:43,opal_cec_reboot2:44,opal_cec_reboot:44,opal_check_async_complet:45,opal_check_token:46,opal_clos:131,opal_config_cpu_idle_st:48,opal_console_flush:49,opal_console_read:49,opal_console_writ:49,opal_console_write_buffer_spac:49,opal_constrain:131,opal_dump_ack:50,opal_dump_info2:50,opal_dump_info:50,opal_dump_init:50,opal_dump_read:50,opal_dump_resend:50,opal_elog:51,opal_elog_ack:51,opal_elog_read:51,opal_elog_resend:51,opal_elog_s:51,opal_elog_send:42,opal_elog_writ:42,opal_empti:131,opal_event_console_input:108,opal_event_console_output:108,opal_event_dump_avail:108,opal_event_epow:108,opal_event_error_log:108,opal_event_error_log_avail:108,opal_event_led_statu:108,opal_event_msg_pend:108,opal_event_nvram:108,opal_event_opal_intern:108,opal_event_pci_error:108,opal_event_rtc:108,opal_flash_eras:52,opal_flash_manag:47,opal_flash_read:52,opal_flash_upd:47,opal_flash_valid:47,opal_flash_writ:52,opal_get_completion_token_statu:42,opal_get_device_tre:53,opal_get_dpo_statu:114,opal_get_epow_statu:54,opal_get_msg:55,opal_get_msi_32:56,opal_get_msi_64:56,opal_get_param:77,opal_get_power_shift_ratio:109,opal_get_powercap:110,opal_get_x:57,opal_get_xive_sourc:42,opal_handle_hmi2:58,opal_handle_hmi:58,opal_handle_interrupt:59,opal_hardwar:131,opal_hardware_frozen:131,opal_i2c_arbt_lost:131,opal_i2c_bkend_access:131,opal_i2c_bkend_overrun:131,opal_i2c_invalid:131,opal_i2c_lbus_par:131,opal_i2c_nack_rcvd:131,opal_i2c_request:60,opal_i2c_stop_err:131,opal_i2c_timeout:131,opal_imc_counters_init:61,opal_imc_counters_start:61,opal_imc_counters_stop:61,opal_int_eoi:62,opal_int_get_xirr:63,opal_int_set_cppr:64,opal_int_set_mfrr:65,opal_internal_error:131,opal_invalid_cal:66,opal_ipmi_recv:67,opal_ipmi_send:67,opal_leds_get_ind:68,opal_leds_set_ind:68,opal_lpc_read:69,opal_lpc_writ:69,opal_messag:70,opal_mpipl_query_tag:71,opal_mpipl_register_tag:71,opal_mpipl_upd:71,opal_msg_async_comp:70,opal_msg_dpo:70,opal_msg_epow:70,opal_msg_hmi_evt:70,opal_msg_mem_err:70,opal_msg_occ:70,opal_msg_prd2:70,opal_msg_prd:70,opal_msg_shutdown:70,opal_nmmu_set_ptcr:72,opal_no_mem:131,opal_npu_destroy_context:73,opal_npu_get_relaxed_ord:74,opal_npu_init_context:73,opal_npu_map_lpar:73,opal_npu_mem_alloc:75,opal_npu_mem_releas:75,opal_npu_set_relaxed_ord:74,opal_npu_spa_clear_cach:75,opal_npu_spa_setup:75,opal_npu_tl_set:75,opal_nx_coproc_init:129,opal_old_i2c_request:42,opal_paramet:131,opal_parti:131,opal_pci_config_:78,opal_pci_config_read_byt:78,opal_pci_config_read_half_word:78,opal_pci_config_read_word:78,opal_pci_config_write_byt:78,opal_pci_config_write_half_word:78,opal_pci_config_write_word:78,opal_pci_eeh_freeze_clear:79,opal_pci_eeh_freeze_set:80,opal_pci_eeh_freeze_statu:81,opal_pci_eeh_freeze_status2:81,opal_pci_err_inject:82,opal_pci_fence_phb:42,opal_pci_get_hub_diag_data:83,opal_pci_get_pbcq_tunnel_bar:87,opal_pci_get_phb_diag_data2:84,opal_pci_get_phb_diag_data:42,opal_pci_get_power_st:85,opal_pci_get_presence_st:86,opal_pci_get_xive_reissu:42,opal_pci_map_pe_dma_window:88,opal_pci_map_pe_dma_window_r:89,opal_pci_map_pe_mmio_window:90,opal_pci_mask_pe_error:42,opal_pci_msi_eoi:91,opal_pci_next_error:92,opal_pci_phb_mmio_en:93,opal_pci_pol:94,opal_pci_reinit:95,opal_pci_reset:96,opal_pci_set_hub_tce_memori:42,opal_pci_set_mv:97,opal_pci_set_mve_en:98,opal_pci_set_p2p:99,opal_pci_set_p:100,opal_pci_set_pbcq_tunnel_bar:87,opal_pci_set_peltv:101,opal_pci_set_phb_capi_mod:102,opal_pci_set_phb_mem_window:103,opal_pci_set_phb_table_memori:42,opal_pci_set_phb_tce_memori:42,opal_pci_set_power_st:104,opal_pci_set_xive_p:105,opal_pci_set_xive_reissu:42,opal_pci_shpc:42,opal_pci_tce_kil:106,opal_permiss:131,opal_phb_get_opt:107,opal_phb_set_opt:107,opal_poll_ev:108,opal_prd_msg:111,opal_query_cpu_statu:112,opal_quiesc:113,opal_read_nvram:76,opal_read_tpo:114,opal_register_dump_region:50,opal_register_opal_exception_handl:42,opal_reinit_cpu:[115,130],opal_reinit_cpus_mmu_hash:115,opal_reinit_cpus_mmu_radix:115,opal_reinit_cpus_tm_suspend_dis:115,opal_reserved1:42,opal_reserved2:42,opal_resourc:131,opal_resync_timebas:116,opal_return_cpu:124,opal_rtc_read:117,opal_rtc_writ:117,opal_secvar_enqueue_upd:118,opal_secvar_get:118,opal_secvar_get_next:118,opal_sensor_group_clear:119,opal_sensor_group_en:119,opal_sensor_read:120,opal_sensor_read_u64:120,opal_set_param:77,opal_set_power_shift_ratio:109,opal_set_powercap:110,opal_set_slot_led_statu:42,opal_set_system_attention_l:42,opal_set_x:121,opal_signal_system_reset:122,opal_slw_set_reg:123,opal_start_cpu:124,opal_success:131,opal_sync_host_reboot:125,opal_test:126,opal_timeout:131,opal_unregister_dump_region:50,opal_unsupport:131,opal_write_nvram:76,opal_write_oppanel:42,opal_write_oppanel_async:127,opal_write_tpo:114,opal_wrong_st:131,opal_xive_allocate_irq:316,opal_xive_allocate_vp_block:316,opal_xive_donate_pag:316,opal_xive_dump:316,opal_xive_eoi:316,opal_xive_free_act:131,opal_xive_free_irq:316,opal_xive_free_vp_block:316,opal_xive_get_irq_config:316,opal_xive_get_irq_info:316,opal_xive_get_queue_info:316,opal_xive_get_queue_st:316,opal_xive_get_vp_info:316,opal_xive_get_vp_st:316,opal_xive_provis:131,opal_xive_reset:316,opal_xive_set_irq_config:316,opal_xive_set_queue_info:316,opal_xive_set_queue_st:316,opal_xive_set_vp_info:316,opal_xive_sync:316,opal_xscom_addr_error:131,opal_xscom_busi:131,opal_xscom_chiplet_off:131,opal_xscom_clock_error:131,opal_xscom_ctr_offlin:131,opal_xscom_parity_error:131,opal_xscom_partial_good:131,opal_xscom_read:128,opal_xscom_timeout:131,opal_xscom_writ:128,opencapi:[29,182,183,246,247,273,274,275,276,282,283],openpow:[166,189,202,204],oper:[12,135,316],oppanel:12,ops:71,option:32,origin:138,other:[149,182,183,184,185,202,204],output:[35,47],overview:[22,37,38,40,41,118,133,312,313],p8dnu:220,p8dtu:[279,282,283],p8nvl:188,p9dsu:[246,247,282,283],panel:12,paramet:[41,44,57,58,61,67,69,74,75,76,77,84,85,86,87,99,102,104,109,110,111,117,118,120,121,123],patch:[139,140],payload:132,pci:[27,29,30,41,78,134,135,171,172,182,183,193,202,203,204,220,221,224,226,227,246,247,268],pcie:[153,282,283],pel:35,persist:313,pflash:[153,171,172,187,194,204,226,227],phb3:[157,187,258,279],phb4:[171,172,226,227,228,229,230,231,232,268,275,276,291,292],phb:153,physic:313,platform:[32,136,154,157,171,172,182,183,184,186,187,189,190,193,194,202,203,204,220,224,226,231,232,246,247,273,274,275,276,282,283,291,292,312,313],pmicr:13,pnor:313,post_process:311,power10:310,power8:[153,157,187,231,232,273,274,275,276,282,283],power9:[130,171,172,193,194,202,203,220,221,224,226,227,228,229,230,231,232,268,273,274,275,276,282,283],power:[13,14,15,16,109,110,114,137,171,172,182,183,226,227],powercap:[15,258,279],powerpc:[21,22],practic:141,prd:[153,171,172,184,186,202,203,226,227,229,230,246,247],pre_process:311,presenc:313,previou:202,process:[38,139,311],product:34,properti:[3,4,5,23,32,135],psr:16,psscr:13,pstate:[13,14],qemu:[275,276],queue:316,quick:311,quiesc:[171,172],quiesce_typ:113,ratio:109,rc1:[172,183,184,185,193,203,220,224,227,230,232,247,274,276,283,292],rc2:[173,184,186,194,204,221,225,228,233,248,277,284],rc3:[174,205,219,222,234,285],rc4:[175,206,235],rc5:236,real:[0,117],reboot:[5,44,171,172,182,183,220,275,276],reg:14,region:317,regist:41,registr:40,releas:[38,139,140,142,202],reliabl:[171,172],remov:[42,171,184,185,219,220,224,231,275,282,283,291,292,298],report:[171,219,220,224,226,229,231,275],requir:[3,23,32],reserv:[2,31],reset:[204,313],retrain:134,retriev:35,review:[171,219,220,224,226,229,231,275],ric:134,rng:28,root:2,rtc:117,rule:140,run:14,runtim:132,sampl:35,save:[171,172],sbe:0,scheme:141,scom:24,secboot:313,secboot_tpm:313,secondari:124,secur:[17,118,171,172,204,246,247,291,292,312,314],secureboot:23,secvar:[17,311,313],sensor:[0,18,19,119,171,172,229,230,268,291,292],sequenc:134,servic:[10,68,132,314],set:77,setup:134,sha512:314,shift:109,sign:314,signoff:[171,219,220,224,226,229,231,275],simic:[184,186,202,203],simul:[184,186,193,202,203,226,227,231,232,273,274,282,283,291,292],sinc:[184,202,219],skiboot:[1,36,37,38,39,41,133,138,140,141,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,312],slot:135,sourc:[133,139],space:[41,78],special:312,specif:[41,132,137,147,148,153,171,172],speed:134,sreset:[182,183],stabl:140,start:124,stat:161,state:[13,137],statu:[17,311,312],stop:[124,137],storag:[311,313],store_init:311,submit:140,support:[0,44,132,136,184,185],switchboard:[33,315],sysparam:20,system:[8,77,171,172,220,224,226,227,229,231,232],tabl:17,target_cpu:113,test:[36,171,182,183,193,202,203,219,220,221,224,226,227,228,229,230,231,246,247,273,275,277],time:[0,114,117],todo:130,tool:193,top:[5,24,219,224],tpm:[32,220,313],trace:[24,37],train:134,tree:[2,6,7,9,11,13,14,19,24,25,27,29,30,31,40,41,130,134,140,193,312,316],trust:[32,171,172,204,246,247,291,292,314],turbo:13,type:44,ultra:13,unit:[24,36,37],updat:[17,47,312,316],userspac:190,util:[154,171,172,184,186,189,190,202,203,204,220,229,230,231,232,273,274,275,276,277,282,283,291,292],valid:[0,311],valu:[43,45,47,55,67,71,72,74,75,76,87,99,118,120],variabl:[118,312,313],vcss:14,vdd:14,vendor:41,verbos:134,verif:314,verifi:314,version:[4,141],vesnin:[275,276,282,283,291,292],virtual:[33,315],vital:34,vpd:[34,268],watchdog:[0,273,274],what:[132,140],who:[171,219,220,224,226,229,231,275],witherspoon:[171,172,275,276,282,283],write_bank:311,xive:[171,172,231,232,316],xscom:317,zaiu:[275,276,282,283]}}) \ No newline at end of file
diff --git a/doc/secvar/driver-api.html b/doc/secvar/driver-api.html
index b005849..3c0c42d 100644
--- a/doc/secvar/driver-api.html
+++ b/doc/secvar/driver-api.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Secvar Drivers &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Secvar Drivers &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -24,9 +26,8 @@
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Secvar Drivers</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -53,21 +54,22 @@ compatible.</p>
</div>
<div class="section" id="storage-driver-api">
<h2>Storage Driver API<a class="headerlink" href="#storage-driver-api" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt>The storage driver is expected to:</dt><dd><ul class="simple">
-<li><p>persist secure variables in a tamper-resistant manner</p></li>
-<li><p>handle two logical types of variable lists (referred to as “banks”)
+<dl class="docutils">
+<dt>The storage driver is expected to:</dt>
+<dd><ul class="first last simple">
+<li>persist secure variables in a tamper-resistant manner</li>
+<li>handle two logical types of variable lists (referred to as “banks”)
* the “variable bank” stores the active list of variables
-* the “update bank” stores proposed updates to the variable bank</p></li>
-<li><p>handle variables using a specific secvar flag in a sensible manner</p></li>
+* the “update bank” stores proposed updates to the variable bank</li>
+<li>handle variables using a specific secvar flag in a sensible manner</li>
</ul>
</dd>
</dl>
<p>Storage drivers must implement the following hooks for secvar to properly
utilize:</p>
-<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span> <span class="nc">secvar_storage_driver</span> <span class="p">{</span>
- <span class="kt">int</span> <span class="p">(</span><span class="o">*</span><span class="n">load_bank</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">list_head</span> <span class="o">*</span><span class="n">bank</span><span class="p">,</span> <span class="kt">int</span> <span class="n">section</span><span class="p">);</span>
- <span class="kt">int</span> <span class="p">(</span><span class="o">*</span><span class="n">write_bank</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">list_head</span> <span class="o">*</span><span class="n">bank</span><span class="p">,</span> <span class="kt">int</span> <span class="n">section</span><span class="p">);</span>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span> <span class="n">secvar_storage_driver</span> <span class="p">{</span>
+ <span class="kt">int</span> <span class="p">(</span><span class="o">*</span><span class="n">load_bank</span><span class="p">)(</span><span class="k">struct</span> <span class="n">list_head</span> <span class="o">*</span><span class="n">bank</span><span class="p">,</span> <span class="kt">int</span> <span class="n">section</span><span class="p">);</span>
+ <span class="kt">int</span> <span class="p">(</span><span class="o">*</span><span class="n">write_bank</span><span class="p">)(</span><span class="k">struct</span> <span class="n">list_head</span> <span class="o">*</span><span class="n">bank</span><span class="p">,</span> <span class="kt">int</span> <span class="n">section</span><span class="p">);</span>
<span class="kt">int</span> <span class="p">(</span><span class="o">*</span><span class="n">store_init</span><span class="p">)(</span><span class="kt">void</span><span class="p">);</span>
<span class="kt">void</span> <span class="p">(</span><span class="o">*</span><span class="n">lock</span><span class="p">)(</span><span class="kt">void</span><span class="p">);</span>
<span class="kt">uint64_t</span> <span class="n">max_var_size</span><span class="p">;</span>
@@ -95,10 +97,11 @@ or raise an error.</p>
in-memory linked lists, for the rest of secvar to operate on.</p>
<p>The <code class="docutils literal notranslate"><span class="pre">bank</span></code> parameter should be an initialized linked list. This list may not
be empty, and this hook should only append variables to the list.</p>
-<dl class="simple">
-<dt>The variables this hook loads should depend on the <code class="docutils literal notranslate"><span class="pre">section</span></code> flag:</dt><dd><ul class="simple">
-<li><p>if <code class="docutils literal notranslate"><span class="pre">SECVAR_VARIABLE_BANK</span></code>, load the active variables</p></li>
-<li><p>if <code class="docutils literal notranslate"><span class="pre">SECVAR_UPDATE_BANK</span></code>, load the proposed updates</p></li>
+<dl class="docutils">
+<dt>The variables this hook loads should depend on the <code class="docutils literal notranslate"><span class="pre">section</span></code> flag:</dt>
+<dd><ul class="first last simple">
+<li>if <code class="docutils literal notranslate"><span class="pre">SECVAR_VARIABLE_BANK</span></code>, load the active variables</li>
+<li>if <code class="docutils literal notranslate"><span class="pre">SECVAR_UPDATE_BANK</span></code>, load the proposed updates</li>
</ul>
</dd>
</dl>
@@ -168,14 +171,14 @@ state in TPM NV rather than PNOR on p9).</p>
<h2>Backend Driver API<a class="headerlink" href="#backend-driver-api" title="Permalink to this headline">¶</a></h2>
<p>The backend driver at the core defines how secure variables are defined and
processed, and by extension, also how operate the platform’s secure boot modes.</p>
-<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span> <span class="nc">secvar_backend_driver</span> <span class="p">{</span>
- <span class="kt">int</span> <span class="p">(</span><span class="o">*</span><span class="n">pre_process</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">list_head</span> <span class="o">*</span><span class="n">variable_bank</span>
- <span class="k">struct</span> <span class="nc">list_head</span> <span class="o">*</span><span class="n">update_bank</span><span class="p">);</span>
- <span class="kt">int</span> <span class="p">(</span><span class="o">*</span><span class="n">process</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">list_head</span> <span class="o">*</span><span class="n">variable_bank</span>
- <span class="k">struct</span> <span class="nc">list_head</span> <span class="o">*</span><span class="n">update_bank</span><span class="p">);</span>
- <span class="kt">int</span> <span class="p">(</span><span class="o">*</span><span class="n">post_process</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">list_head</span> <span class="o">*</span><span class="n">variable_bank</span>
- <span class="k">struct</span> <span class="nc">list_head</span> <span class="o">*</span><span class="n">update_bank</span><span class="p">);</span>
- <span class="kt">int</span> <span class="p">(</span><span class="o">*</span><span class="n">validate</span><span class="p">)(</span><span class="k">struct</span> <span class="nc">secvar</span> <span class="o">*</span><span class="n">var</span><span class="p">);</span>
+<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span> <span class="n">secvar_backend_driver</span> <span class="p">{</span>
+ <span class="kt">int</span> <span class="p">(</span><span class="o">*</span><span class="n">pre_process</span><span class="p">)(</span><span class="k">struct</span> <span class="n">list_head</span> <span class="o">*</span><span class="n">variable_bank</span>
+ <span class="k">struct</span> <span class="n">list_head</span> <span class="o">*</span><span class="n">update_bank</span><span class="p">);</span>
+ <span class="kt">int</span> <span class="p">(</span><span class="o">*</span><span class="n">process</span><span class="p">)(</span><span class="k">struct</span> <span class="n">list_head</span> <span class="o">*</span><span class="n">variable_bank</span>
+ <span class="k">struct</span> <span class="n">list_head</span> <span class="o">*</span><span class="n">update_bank</span><span class="p">);</span>
+ <span class="kt">int</span> <span class="p">(</span><span class="o">*</span><span class="n">post_process</span><span class="p">)(</span><span class="k">struct</span> <span class="n">list_head</span> <span class="o">*</span><span class="n">variable_bank</span>
+ <span class="k">struct</span> <span class="n">list_head</span> <span class="o">*</span><span class="n">update_bank</span><span class="p">);</span>
+ <span class="kt">int</span> <span class="p">(</span><span class="o">*</span><span class="n">validate</span><span class="p">)(</span><span class="k">struct</span> <span class="n">secvar</span> <span class="o">*</span><span class="n">var</span><span class="p">);</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">compatible</span><span class="p">;</span>
<span class="p">};</span>
</pre></div>
@@ -192,10 +195,11 @@ but just before <code class="docutils literal notranslate"><span class="pre">pro
early initialization logic as necessary.</p>
<p>Any error code returned by this hook will be treated as a failure, and halt
secure variable initialization.</p>
-<dl class="simple">
-<dt>Example usage:</dt><dd><ul class="simple">
-<li><p>initialize empty variables that were not loaded from storage</p></li>
-<li><p>allocate any internal structures that may be needed for processing</p></li>
+<dl class="docutils">
+<dt>Example usage:</dt>
+<dd><ul class="first last simple">
+<li>initialize empty variables that were not loaded from storage</li>
+<li>allocate any internal structures that may be needed for processing</li>
</ul>
</dd>
</dl>
@@ -228,35 +232,35 @@ for emptying the update bank prior to exiting with an error, if the bank is to
be cleared.</p>
<div class="section" id="status-codes">
<h4>Status codes<a class="headerlink" href="#status-codes" title="Permalink to this headline">¶</a></h4>
-<table class="docutils align-default">
+<table border="1" class="docutils">
<colgroup>
-<col style="width: 27%" />
-<col style="width: 73%" />
+<col width="27%" />
+<col width="73%" />
</colgroup>
-<tbody>
-<tr class="row-odd"><td><p>update-status</p></td>
-<td><p>Generic Reason</p></td>
+<tbody valign="top">
+<tr class="row-odd"><td>update-status</td>
+<td>Generic Reason</td>
</tr>
-<tr class="row-even"><td><p>OPAL_SUCCESS</p></td>
-<td><p>Updates were found and processed successfully</p></td>
+<tr class="row-even"><td>OPAL_SUCCESS</td>
+<td>Updates were found and processed successfully</td>
</tr>
-<tr class="row-odd"><td><p>OPAL_EMPTY</p></td>
-<td><p>No updates were found, none processed</p></td>
+<tr class="row-odd"><td>OPAL_EMPTY</td>
+<td>No updates were found, none processed</td>
</tr>
-<tr class="row-even"><td><p>OPAL_PARAMETER</p></td>
-<td><p>Malformed, or unexpected update data blob</p></td>
+<tr class="row-even"><td>OPAL_PARAMETER</td>
+<td>Malformed, or unexpected update data blob</td>
</tr>
-<tr class="row-odd"><td><p>OPAL_PERMISSION</p></td>
-<td><p>Update failed to apply, possible auth failure</p></td>
+<tr class="row-odd"><td>OPAL_PERMISSION</td>
+<td>Update failed to apply, possible auth failure</td>
</tr>
-<tr class="row-even"><td><p>OPAL_HARDWARE</p></td>
-<td><p>Misc. storage-related error</p></td>
+<tr class="row-even"><td>OPAL_HARDWARE</td>
+<td>Misc. storage-related error</td>
</tr>
-<tr class="row-odd"><td><p>OPAL_RESOURCE</p></td>
-<td><p>Out of space (reported by storage)</p></td>
+<tr class="row-odd"><td>OPAL_RESOURCE</td>
+<td>Out of space (reported by storage)</td>
</tr>
-<tr class="row-even"><td><p>OPAL_NO_MEM</p></td>
-<td><p>Out of memory</p></td>
+<tr class="row-even"><td>OPAL_NO_MEM</td>
+<td>Out of memory</td>
</tr>
</tbody>
</table>
@@ -273,11 +277,12 @@ the persistant storage. Any changes to the variable bank list in this hook will
NOT be persisted to storage.</p>
<p>Any error code returned by this hook will be treated as a failure, and halt
secure variable initialization.</p>
-<dl class="simple">
-<dt>Example usage:</dt><dd><ul class="simple">
-<li><p>determine secure boot state (and set <code class="docutils literal notranslate"><span class="pre">os-secure-enforcing</span></code>)</p></li>
-<li><p>remove any variables from the variable bank that do not need to be exposed</p></li>
-<li><p>append any additional volatile variables</p></li>
+<dl class="docutils">
+<dt>Example usage:</dt>
+<dd><ul class="first last simple">
+<li>determine secure boot state (and set <code class="docutils literal notranslate"><span class="pre">os-secure-enforcing</span></code>)</li>
+<li>remove any variables from the variable bank that do not need to be exposed</li>
+<li>append any additional volatile variables</li>
</ul>
</dd>
</dl>
@@ -293,12 +298,13 @@ on proposed variable validity.</p>
<p>This hook should return <code class="docutils literal notranslate"><span class="pre">OPAL_SUCCESS</span></code> if the validity check passes. Any
other return code is treated as a failure, and will be passed through the
<code class="docutils literal notranslate"><span class="pre">enqueue_update</span></code> call.</p>
-<dl class="simple">
-<dt>Example usage:</dt><dd><ul class="simple">
-<li><p>check for valid payload data structure</p></li>
-<li><p>check for valid signature format</p></li>
-<li><p>validate the signature against current variables</p></li>
-<li><p>implement a variable white/blacklist</p></li>
+<dl class="docutils">
+<dt>Example usage:</dt>
+<dd><ul class="first last simple">
+<li>check for valid payload data structure</li>
+<li>check for valid signature format</li>
+<li>validate the signature against current variables</li>
+<li>implement a variable white/blacklist</li>
</ul>
</dd>
</dl>
@@ -314,7 +320,6 @@ determine how to interact with the secure variables.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -356,15 +361,17 @@ determine how to interact with the secure variables.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -375,14 +382,13 @@ determine how to interact with the secure variables.</p>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Secvar Drivers</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/secvar/edk2.html b/doc/secvar/edk2.html
index 33648fd..3835a09 100644
--- a/doc/secvar/edk2.html
+++ b/doc/secvar/edk2.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Skiboot edk2-compatible Secure Variable Backend &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Skiboot edk2-compatible Secure Variable Backend &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -24,9 +26,8 @@
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Skiboot edk2-compatible Secure Variable Backend</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -77,7 +78,6 @@ P9 systems. (TODO expand on this)</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -102,15 +102,17 @@ P9 systems. (TODO expand on this)</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -121,14 +123,13 @@ P9 systems. (TODO expand on this)</p>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Skiboot edk2-compatible Secure Variable Backend</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/secvar/secboot_tpm.html b/doc/secvar/secboot_tpm.html
index d931dd3..3b86db9 100644
--- a/doc/secvar/secboot_tpm.html
+++ b/doc/secvar/secboot_tpm.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>secboot_tpm secvar storage driver for P9 platforms &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>secboot_tpm secvar storage driver for P9 platforms &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/classic.css" />
+ <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
@@ -24,9 +26,8 @@
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">secboot_tpm secvar storage driver for P9 platforms</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -55,10 +56,10 @@ must have been altered and are not loaded.</p>
<p>At a high-level, there are a few major logical components:</p>
<blockquote>
<div><ul class="simple">
-<li><p>(PNOR) Variable storage (split in half, active/staging)</p></li>
-<li><p>(PNOR) Update storage</p></li>
-<li><p>(TPM) Protected variable storage</p></li>
-<li><p>(TPM) Bank hashes &amp; active bit</p></li>
+<li>(PNOR) Variable storage (split in half, active/staging)</li>
+<li>(PNOR) Update storage</li>
+<li>(TPM) Protected variable storage</li>
+<li>(TPM) Bank hashes &amp; active bit</li>
</ul>
</div></blockquote>
<p>Variable storage consists of two smaller banks, variable bank 0 and variable
@@ -75,10 +76,10 @@ TPM NV Indices section for more.</p>
<p>When writing a new variable bank to storage, this is (roughly) the procedure the
driver will follow:</p>
<ol class="arabic simple">
-<li><p>write variables to the staging bank</p></li>
-<li><p>calculate hash of the staging bank</p></li>
-<li><p>store the staging bank hash in the TPM NV</p></li>
-<li><p>flip the active bank bit</p></li>
+<li>write variables to the staging bank</li>
+<li>calculate hash of the staging bank</li>
+<li>store the staging bank hash in the TPM NV</li>
+<li>flip the active bank bit</li>
</ol>
<p>This procedure ensures that the switch-over from the old variables to the
new variables is as atomic as possible. This should prevent any possible
@@ -114,14 +115,14 @@ presence will redefine the indices in the correct state.</p>
protected via two locking mechanisms:</p>
<blockquote>
<div><ul class="simple">
-<li><p>The driver’s <code class="docutils literal notranslate"><span class="pre">.lock()</span></code> hook sends the <code class="docutils literal notranslate"><span class="pre">TSS_NV_WriteLock</span></code> TPM command.</p></li>
+<li>The driver’s <code class="docutils literal notranslate"><span class="pre">.lock()</span></code> hook sends the <code class="docutils literal notranslate"><span class="pre">TSS_NV_WriteLock</span></code> TPM command.</li>
</ul>
</div></blockquote>
<p>This sets the <code class="docutils literal notranslate"><span class="pre">WRITELOCKED</span></code> attribute, which is cleared on the next
TPM reset.</p>
<blockquote>
<div><ul class="simple">
-<li><p>The TPM NV indices are defined under the platform hierarchy. Skiboot will add</p></li>
+<li>The TPM NV indices are defined under the platform hierarchy. Skiboot will add</li>
</ul>
</div></blockquote>
<p>a global lock to all the NV indices under this hierarchy prior to loading a
@@ -142,9 +143,9 @@ the remaining components of storage, similar to a first-boot scenario.</p>
device tree nodes are present in <code class="docutils literal notranslate"><span class="pre">ibm,secureboot</span></code>:</p>
<blockquote>
<div><ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">clear-os-keys</span></code></p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">clear-all-keys</span></code></p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">clear-mfg-keys</span></code></p></li>
+<li><code class="docutils literal notranslate"><span class="pre">clear-os-keys</span></code></li>
+<li><code class="docutils literal notranslate"><span class="pre">clear-all-keys</span></code></li>
+<li><code class="docutils literal notranslate"><span class="pre">clear-mfg-keys</span></code></li>
</ul>
</div></blockquote>
</div>
@@ -153,42 +154,46 @@ device tree nodes are present in <code class="docutils literal notranslate"><spa
<h1>Storage Formats/Layouts<a class="headerlink" href="#storage-formats-layouts" title="Permalink to this headline">¶</a></h1>
<div class="section" id="secboot-pnor">
<h2>SECBOOT (PNOR)<a class="headerlink" href="#secboot-pnor" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt>Partition Format:</dt><dd><ul class="simple">
-<li><p>8b secboot header
+<dl class="docutils">
+<dt>Partition Format:</dt>
+<dd><ul class="first last simple">
+<li>8b secboot header
- 4b: u32. magic number, always 0x5053424b
- 1b: u8. version, always 1
-- 3b: unused padding</p></li>
-<li><p>32k: secvars. variable bank 0</p></li>
-<li><p>32k: secvars. variable bank 1</p></li>
-<li><p>32k: secvars. update bank</p></li>
+- 3b: unused padding</li>
+<li>32k: secvars. variable bank 0</li>
+<li>32k: secvars. variable bank 1</li>
+<li>32k: secvars. update bank</li>
</ul>
</dd>
-<dt>Variable Format (secvar):</dt><dd><ul class="simple">
-<li><p>8b: u64. key length</p></li>
-<li><p>8b: u64. data size</p></li>
-<li><p>1k: string. key</p></li>
-<li><p>(data size). data</p></li>
+<dt>Variable Format (secvar):</dt>
+<dd><ul class="first last simple">
+<li>8b: u64. key length</li>
+<li>8b: u64. data size</li>
+<li>1k: string. key</li>
+<li>(data size). data</li>
</ul>
</dd>
</dl>
</div>
<div class="section" id="tpm-vars-nv">
<h2>TPM VARS (NV)<a class="headerlink" href="#tpm-vars-nv" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt>NV Index Format:</dt><dd><ul class="simple">
-<li><p>8b secboot header
+<dl class="docutils">
+<dt>NV Index Format:</dt>
+<dd><ul class="first last simple">
+<li>8b secboot header
- 4b: u32. magic number, always 0x5053424b
- 1b: u8. version, always 1
-- 3b: unused padding</p></li>
-<li><p>1016b: packed secvars. protected variable storage</p></li>
+- 3b: unused padding</li>
+<li>1016b: packed secvars. protected variable storage</li>
</ul>
</dd>
-<dt>Variable Format (packed secvar):</dt><dd><ul class="simple">
-<li><p>8b: u64. key length</p></li>
-<li><p>8b: u64. data size</p></li>
-<li><p>(key length): string. key</p></li>
-<li><p>(data size). data</p></li>
+<dt>Variable Format (packed secvar):</dt>
+<dd><ul class="first last simple">
+<li>8b: u64. key length</li>
+<li>8b: u64. data size</li>
+<li>(key length): string. key</li>
+<li>(data size). data</li>
</ul>
</dd>
</dl>
@@ -197,20 +202,19 @@ device tree nodes are present in <code class="docutils literal notranslate"><spa
<h2>TPM CONTROL (NV)<a class="headerlink" href="#tpm-control-nv" title="Permalink to this headline">¶</a></h2>
<blockquote>
<div><ul class="simple">
-<li><p>8b secboot header
+<li>8b secboot header
- 4b: u32. magic number, always 0x5053424b
- 1b: u8. version, always 1
-- 3b: unused padding</p></li>
-<li><p>1b: u8. active bit, 0 or 1</p></li>
-<li><p>32b: sha256 hash of variable bank 0</p></li>
-<li><p>32b: sha256 hash of variable bank 1</p></li>
+- 3b: unused padding</li>
+<li>1b: u8. active bit, 0 or 1</li>
+<li>32b: sha256 hash of variable bank 0</li>
+<li>32b: sha256 hash of variable bank 1</li>
</ul>
</div></blockquote>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -243,15 +247,17 @@ device tree nodes are present in <code class="docutils literal notranslate"><spa
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -262,14 +268,13 @@ device tree nodes are present in <code class="docutils literal notranslate"><spa
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
- <li class="nav-item nav-item-0"><a href="../index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">secboot_tpm secvar storage driver for P9 platforms</a></li>
+ <li class="nav-item nav-item-0"><a href="../index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/stb.html b/doc/stb.html
index 3e04b3f..7b8b366 100644
--- a/doc/stb.html
+++ b/doc/stb.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Secure and Trusted Boot Library (LibSTB) Documentation &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Secure and Trusted Boot Library (LibSTB) Documentation &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="vas.html" title="Virtual Accelerator Switchboard (VAS)"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Secure and Trusted Boot Library (LibSTB) Documentation</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -46,30 +47,31 @@
<div class="section" id="secure-and-trusted-boot-library-libstb-documentation">
<span id="stb-overview"></span><h1>Secure and Trusted Boot Library (LibSTB) Documentation<a class="headerlink" href="#secure-and-trusted-boot-library-libstb-documentation" title="Permalink to this headline">¶</a></h1>
<p><em>LibSTB</em> provides APIs to support Secure Boot and Trusted Boot in skiboot.</p>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">Secure</span> <span class="pre">Boot:</span> <span class="pre">verify</span> <span class="pre">and</span> <span class="pre">enforce.</span></code></dt><dd><p>When the system is booting in secure mode, Secure Boot MUST ensure that
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">Secure</span> <span class="pre">Boot:</span> <span class="pre">verify</span> <span class="pre">and</span> <span class="pre">enforce.</span></code></dt>
+<dd>When the system is booting in secure mode, Secure Boot MUST ensure that
only trusted code is executed during system boot by verifying if the
code is signed with trusted keys and halting the system boot if the
-verification fails.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">Trusted</span> <span class="pre">Boot:</span> <span class="pre">measure</span> <span class="pre">and</span> <span class="pre">record.</span></code></dt><dd><p>When the system is booting in trusted mode, Trusted Boot MUST create
+verification fails.</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">Trusted</span> <span class="pre">Boot:</span> <span class="pre">measure</span> <span class="pre">and</span> <span class="pre">record.</span></code></dt>
+<dd>When the system is booting in trusted mode, Trusted Boot MUST create
artifacts during system boot to prove that a particular chain of events
have happened during boot. Interested parties can subsequently assess
the artifacts to check whether or not only trusted events happened and
then make security decisions. These artifacts comprise a log of
measurements and the digests extended into the TPM PCRs. Platform
Configuration Registers (PCRs) are registers in the Trusted Platform
-Module (TPM) that are shielded from direct access by the CPU.</p>
-</dd>
+Module (TPM) that are shielded from direct access by the CPU.</dd>
</dl>
<p>In order to support Secure and Trusted Boot, the flash driver calls libSTB to
verify and measure the code it fetches from PNOR.</p>
<p>LibSTB is initialized by calling <em>secureboot_init()</em>, see <code class="docutils literal notranslate"><span class="pre">libstb/secureboot.h</span></code>.</p>
<div class="section" id="secure-boot">
<h2>Secure Boot<a class="headerlink" href="#secure-boot" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">Requirements:</span></code></dt><dd><ol class="arabic simple">
-<li><p>CVC-verify service to verify signed firmware code.</p></li>
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">Requirements:</span></code></dt>
+<dd><ol class="first last arabic simple">
+<li>CVC-verify service to verify signed firmware code.</li>
</ol>
</dd>
</dl>
@@ -84,7 +86,7 @@ precisely the <em>CVC-verify</em> service, which requires both the fetched code
hardware key hash trusted by the platform owner.</p>
<p>The secure mode status, hardware key hash and hardware key hash size
information is found in the device tree, see
-<a class="reference internal" href="device-tree/ibm%2Csecureboot.html#device-tree-ibm-secureboot"><span class="std std-ref">doc/device-tree/ibm,secureboot.rst</span></a>.</p>
+<a class="reference internal" href="device-tree/ibm,secureboot.html#device-tree-ibm-secureboot"><span class="std std-ref">doc/device-tree/ibm,secureboot.rst</span></a>.</p>
<div class="section" id="signing-firmware-code">
<span id="id1"></span><h3>Signing Firmware Code<a class="headerlink" href="#signing-firmware-code" title="Permalink to this headline">¶</a></h3>
<p>Fimware code is signed using the <code class="docutils literal notranslate"><span class="pre">sb-signing-utils</span></code> utilities by running it
@@ -140,16 +142,17 @@ sha512 hash of what is provided in &#64;data. Its parameters are documented in
</div>
<div class="section" id="trusted-boot">
<h2>Trusted Boot<a class="headerlink" href="#trusted-boot" title="Permalink to this headline">¶</a></h2>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">Requirements:</span></code></dt><dd><ol class="arabic simple">
-<li><p>TPM device and TPM driver. See devices supported in
-<a class="reference internal" href="device-tree/tpm.html#device-tree-tpm"><span class="std std-ref">doc/device-tree/tpm.rst</span></a>.</p></li>
-<li><p>TCG Software Stack (TSS) to send commands to the TPM device.</p></li>
-<li><p>Firmware Event Log driver to add new events to the log. Event log
+<dl class="docutils">
+<dt><code class="docutils literal notranslate"><span class="pre">Requirements:</span></code></dt>
+<dd><ol class="first last arabic simple">
+<li>TPM device and TPM driver. See devices supported in
+<a class="reference internal" href="device-tree/tpm.html#device-tree-tpm"><span class="std std-ref">doc/device-tree/tpm.rst</span></a>.</li>
+<li>TCG Software Stack (TSS) to send commands to the TPM device.</li>
+<li>Firmware Event Log driver to add new events to the log. Event log
address and size information is found in the device tree, see
-<a class="reference internal" href="device-tree/tpm.html#device-tree-tpm"><span class="std std-ref">doc/device-tree/tpm.rst</span></a>.</p></li>
-<li><p>CVC-sha512 service to calculate the sha512 hash of the data that
-will be measured.</p></li>
+<a class="reference internal" href="device-tree/tpm.html#device-tree-tpm"><span class="std std-ref">doc/device-tree/tpm.rst</span></a>.</li>
+<li>CVC-sha512 service to calculate the sha512 hash of the data that
+will be measured.</li>
</ol>
</dd>
</dl>
@@ -157,7 +160,7 @@ will be measured.</p></li>
<p>The flash driver calls <code class="docutils literal notranslate"><span class="pre">trustedboot_measure()</span></code> to measure the firmware code
fetched from PNOR and also record its measurement in two places. This is
performed only when the system is booting in trusted mode (information found in
-the device tree, see <a class="reference internal" href="device-tree/ibm%2Csecureboot.html#device-tree-ibm-secureboot"><span class="std std-ref">doc/device-tree/ibm,secureboot.rst</span></a>).</p>
+the device tree, see <a class="reference internal" href="device-tree/ibm,secureboot.html#device-tree-ibm-secureboot"><span class="std std-ref">doc/device-tree/ibm,secureboot.rst</span></a>).</p>
<p>Once the firmware code is measured by calling the <em>CVC-sha512</em> service, its
measurement is first recorded in a TPM PCR statically defined for each event.
In order to record it, the skiboot TCG Software Stack (TSS) API is called to
@@ -181,7 +184,6 @@ Log entries.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -218,15 +220,17 @@ Log entries.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -243,14 +247,13 @@ Log entries.</p>
<li class="right" >
<a href="vas.html" title="Virtual Accelerator Switchboard (VAS)"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Secure and Trusted Boot Library (LibSTB) Documentation</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/vas.html b/doc/vas.html
index 59f1f16..ed725c2 100644
--- a/doc/vas.html
+++ b/doc/vas.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Virtual Accelerator Switchboard (VAS) &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Virtual Accelerator Switchboard (VAS) &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="mpipl.html" title="MPIPL (aka FADUMP) Overview"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Virtual Accelerator Switchboard (VAS)</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -53,14 +54,12 @@ the interrupt and process the fault.</p>
provide backward compatibility for older kernels, enable VAS user space
support with NVRAM command.</p>
<blockquote>
-<div><p>nvram -p ibm,skiboot –update-config vas-user-space=enable</p>
-</div></blockquote>
+<div>nvram -p ibm,skiboot –update-config vas-user-space=enable</div></blockquote>
<p>This nvram config update is temporary and can be removed in future if
not needed.</p>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -80,15 +79,17 @@ not needed.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -105,14 +106,13 @@ not needed.</p>
<li class="right" >
<a href="mpipl.html" title="MPIPL (aka FADUMP) Overview"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">Virtual Accelerator Switchboard (VAS)</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/xive.html b/doc/xive.html
index e99f5dd..83a0384 100644
--- a/doc/xive.html
+++ b/doc/xive.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>P9 XIVE Exploitation &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>P9 XIVE Exploitation &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="xscom-node-bindings.html" title="XSCOM Bindings"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">P9 XIVE Exploitation</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -49,7 +50,7 @@
<span id="xive-device-tree"></span><h2>I - Device-tree updates<a class="headerlink" href="#i-device-tree-updates" title="Permalink to this headline">¶</a></h2>
<blockquote>
<div><ol class="arabic">
-<li><p>The existing OPAL <code class="docutils literal notranslate"><span class="pre">/interrupt-controller&#64;0</span></code> node remains</p>
+<li><p class="first">The existing OPAL <code class="docutils literal notranslate"><span class="pre">/interrupt-controller&#64;0</span></code> node remains</p>
<p>This node represents both the emulated XICS source controller and
an abstraction of the virtualization engine. This represents the
fact thet OPAL set_xive/get_xive functions are still supported
@@ -57,56 +58,61 @@ though they don’t provide access to the full functionality.</p>
<p>It is still the parent of all interrupts in the device-tree.</p>
<p>New or modified properties:</p>
<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">compatible</span></code> : This is extended with a new value <code class="docutils literal notranslate"><span class="pre">ibm,opal-xive-vc</span></code></p></li>
+<li><code class="docutils literal notranslate"><span class="pre">compatible</span></code> : This is extended with a new value <code class="docutils literal notranslate"><span class="pre">ibm,opal-xive-vc</span></code></li>
</ul>
</li>
-<li><p>The new <code class="docutils literal notranslate"><span class="pre">/interrupt-controller&#64;&lt;addr&gt;</span></code> node</p>
+<li><p class="first">The new <code class="docutils literal notranslate"><span class="pre">/interrupt-controller&#64;&lt;addr&gt;</span></code> node</p>
<p>This node represents both the emulated XICS presentation controller
and the new XIVE presentation layer.</p>
<p>Unlike the traditional XICS, there is only one such node for the whole
system.</p>
<p>New or modified properties:</p>
<ul>
-<li><p><code class="docutils literal notranslate"><span class="pre">compatible</span></code> : This contains at least the following strings:</p>
+<li><p class="first"><code class="docutils literal notranslate"><span class="pre">compatible</span></code> : This contains at least the following strings:</p>
<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">ibm,opal-intc</span></code> : This represents the emulated XICS presentation
+<li><code class="docutils literal notranslate"><span class="pre">ibm,opal-intc</span></code> : This represents the emulated XICS presentation
facility and might be the only property present if the version of
-OPAL doesn’t support XIVE exploitation.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">ibm,opal-xive-pe</span></code> : This represents the XIVE presentation
-engine.</p></li>
+OPAL doesn’t support XIVE exploitation.</li>
+<li><code class="docutils literal notranslate"><span class="pre">ibm,opal-xive-pe</span></code> : This represents the XIVE presentation
+engine.</li>
</ul>
</li>
-<li><p><code class="docutils literal notranslate"><span class="pre">ibm,xive-eq-sizes</span></code> : One cell per size supported, contains log2
-of size, in ascending order.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">ibm,xive-#priorities</span></code> : One cell, the number of supported priorities
-(the priorities will be 0…n)</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">ibm,xive-provision-page-size</span></code> : Page size (in bytes) of the pages to
+<li><p class="first"><code class="docutils literal notranslate"><span class="pre">ibm,xive-eq-sizes</span></code> : One cell per size supported, contains log2
+of size, in ascending order.</p>
+</li>
+<li><p class="first"><code class="docutils literal notranslate"><span class="pre">ibm,xive-#priorities</span></code> : One cell, the number of supported priorities
+(the priorities will be 0…n)</p>
+</li>
+<li><p class="first"><code class="docutils literal notranslate"><span class="pre">ibm,xive-provision-page-size</span></code> : Page size (in bytes) of the pages to
pass to OPAL for provisioning internal structures
(see opal_xive_donate_page). If this is absent, OPAL will never require
-additional provisioning. The page must be naturally aligned.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">ibm,xive-provision-chips</span></code> : The list of chip IDs for which provisioning
+additional provisioning. The page must be naturally aligned.</p>
+</li>
+<li><p class="first"><code class="docutils literal notranslate"><span class="pre">ibm,xive-provision-chips</span></code> : The list of chip IDs for which provisioning
is required. Typically, if a VP allocation return OPAL_XIVE_PROVISIONING,
opal_xive_donate_page() will need to be called to donate a page to
-<em>each</em> of these chips before trying again.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">reg</span></code> property contains the addresses &amp; sizes for the register
+<em>each</em> of these chips before trying again.</p>
+</li>
+<li><p class="first"><code class="docutils literal notranslate"><span class="pre">reg</span></code> property contains the addresses &amp; sizes for the register
ranges corresponding respectively to the 4 rings:</p>
<ul class="simple">
-<li><p>Ultravisor level</p></li>
-<li><p>Hypervisor level</p></li>
-<li><p>Guest OS level</p></li>
-<li><p>User level</p></li>
+<li>Ultravisor level</li>
+<li>Hypervisor level</li>
+<li>Guest OS level</li>
+<li>User level</li>
</ul>
<p>For any of these, a size of 0 means this level is not supported.</p>
</li>
-<li><p><code class="docutils literal notranslate"><span class="pre">single-escalation-support</span></code> (option). When present, indicatges that
+<li><p class="first"><code class="docutils literal notranslate"><span class="pre">single-escalation-support</span></code> (option). When present, indicatges that
the “single escalation” feature is supported, thus enabling the use
-of the OPAL_XIVE_VP_SINGLE_ESCALATION flag.</p></li>
+of the OPAL_XIVE_VP_SINGLE_ESCALATION flag.</p>
+</li>
</ul>
</li>
</ol>
</div></blockquote>
<ol class="arabic" start="3">
-<li><p>Interrupt descriptors</p>
+<li><p class="first">Interrupt descriptors</p>
<blockquote>
<div><p>The interrupt descriptors (aka “interrupts” properties and parts
of “interrupt-map” properties) remain 2 cells. The first cell is
@@ -123,24 +129,24 @@ combination are not exposed and subject to change).</p>
</ol>
<blockquote>
<div><ol class="arabic" start="4">
-<li><p>IPIs</p>
+<li><p class="first">IPIs</p>
<p>Each <code class="docutils literal notranslate"><span class="pre">cpu</span></code> node now contains an <code class="docutils literal notranslate"><span class="pre">interrupts</span></code> property which has
one entry (2 cells per entry) for each thread on that core
containing the interrupt number for the IPI targeted at that
thread.</p>
</li>
-<li><p>Interrupt targets</p>
+<li><p class="first">Interrupt targets</p>
<p>Targetting of interrupts uses processor targets and priority
numbers. The processor target encoding depends on which API is
used:</p>
<blockquote>
<div><ul class="simple">
-<li><p>The legacy opal_set/get_xive() APIs only support the old
-“mangled” (ie. shifted by 2) HW processor numbers.</p></li>
-<li><p>The new opal_xive_set/get_irq_config API (and other
+<li>The legacy opal_set/get_xive() APIs only support the old
+“mangled” (ie. shifted by 2) HW processor numbers.</li>
+<li>The new opal_xive_set/get_irq_config API (and other
exploitation mode APIs) use a “token” VP number which is
described in II-2. Unmodified HW processor numbers are valid
-VP numbers for those APIs.</p></li>
+VP numbers for those APIs.</li>
</ul>
</div></blockquote>
</li>
@@ -171,13 +177,13 @@ in blocks of naturally aligned powers of 2, the underlying HW
numbers will respect this alignment.</p>
<blockquote>
<div><div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>The block group mode extension makes the numbering scheme
+<p class="first admonition-title">Note</p>
+<p class="last">The block group mode extension makes the numbering scheme
a bit more tricky than simple powers of two however, see below.</p>
</div>
</div></blockquote>
<ol class="arabic">
-<li><p>Interrupt numbering and allocation</p>
+<li><p class="first">Interrupt numbering and allocation</p>
<p>As specified in the device-tree definition, interrupt numbers
are abstracted by OPAL to be a 30-bit number. All HW interrupts
are “allocated” and configured at boot time along with enough
@@ -198,7 +204,7 @@ semantically equivalent to the old opal_set_xive() which is
still supported with the addition that opal_xive_set_irq_config()
can also specify the logical interrupt number.</p>
</li>
-<li><p>VP numbering and allocation</p>
+<li><p class="first">VP numbering and allocation</p>
<p>A VP number is a 64-bit number. The internal make-up of that number
is opaque to the OS. However, it is a discrete integer that will
be a naturally aligned power of two when allocating a chunk of
@@ -212,7 +218,7 @@ uses the system processor numbers as presented in the
content to represent physical processors within the same number
space as dynamically allocated VPs.</p>
<div class="admonition note">
-<p class="admonition-title">Note</p>
+<p class="first admonition-title">Note</p>
<p>Note about block group mode:</p>
<p>The block group mode shall as much as possible be handled
transparently by OPAL.</p>
@@ -223,14 +229,14 @@ will encode the order of the allocation allowing OPAL to
reconstitute which bits are the block ID bits and which bits
are the index bits in a way transparent to the OS. The overall
range of numbers passed to Linux will still be contiguous.</p>
-<p>That implies however a limitation: We can only allocate within
+<p class="last">That implies however a limitation: We can only allocate within
power-of-two number of blocks. Thus the VP allocator will limit
itself to the largest power of two that can fit in the number
of available chips in the machine: A machine with 3 good chips
will only be able to allocate VPs from 2 of them.</p>
</div>
</li>
-<li><p>Group numbering and allocation</p>
+<li><p class="first">Group numbering and allocation</p>
<p>The group numbers are in the <em>same</em> number space as the VP
numbers. OPAL will internally use some bits of the VP number
to encode the group geometry.</p>
@@ -239,21 +245,21 @@ processors, per-chip groups or per-core groups. This will be
represented in the device-tree somewhat…</p>
<p>[TBD] OPAL will provide interfaces for allocating groups</p>
<div class="admonition note">
-<p class="admonition-title">Note</p>
+<p class="first admonition-title">Note</p>
<p>Note about P/Q bit operation on sources:</p>
<p>opal_xive_get_irq_info() returns a certain number of flags
which define the type of operation supported. The following
rules apply based on what those flags say:</p>
-<ul class="simple">
-<li><p>The Q bit isn’t functional on an LSI interrupt. There is no
+<ul class="last simple">
+<li>The Q bit isn’t functional on an LSI interrupt. There is no
garantee that the special combination “01” will work for an
LSI (and in fact it will not work on the PHB LSIs). However
just setting P to 1 is sufficient to mask an LSI (just don’t
-EOI it while masked).</p></li>
-<li><p>The recommended setting for a masked interrupt that is
+EOI it while masked).</li>
+<li>The recommended setting for a masked interrupt that is
temporarily masked by a driver is “10”. This means a new
occurrence while masked will be recorded and a “StoreEOI”
-will replay it appropriately.</p></li>
+will replay it appropriately.</li>
</ul>
</div>
</li>
@@ -279,8 +285,8 @@ coalescing is enabled).</p>
<div class="section" id="iv-opal-apis">
<h2>IV - OPAL APIs<a class="headerlink" href="#iv-opal-apis" title="Permalink to this headline">¶</a></h2>
<div class="admonition warning">
-<p class="admonition-title">Warning</p>
-<p><em>All</em> the calls listed below may return OPAL_BUSY unless
+<p class="first admonition-title">Warning</p>
+<p class="last"><em>All</em> the calls listed below may return OPAL_BUSY unless
explicitely documented not to. In that case, the call
should be performed again. The OS is allowed to insert a
delay though no minimum nor maxmimum delay is specified.
@@ -288,14 +294,14 @@ This will typically happen when performing cache update
operations in the XIVE, if they result in a collision.</p>
</div>
<div class="admonition warning">
-<p class="admonition-title">Warning</p>
+<p class="first admonition-title">Warning</p>
<p>Calls that are expected to be called at runtime
simultaneously without conflicts such as getting/setting
IRQ info or queue info are fine to do so concurrently.</p>
<p>However, there is no internal locking to prevent races
between things such as freeing a VP block and getting/setting
queue infos on that block.</p>
-<p>These aren’t fully specified (yet) but common sense shall
+<p class="last">These aren’t fully specified (yet) but common sense shall
apply.</p>
</div>
<div class="section" id="opal-xive-reset">
@@ -324,8 +330,8 @@ basically should happen on an otherwise quiescent system. In the
case of kexec, it is recommended that all processors CPPR is lowered
first.</p>
<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>This call always executes fully synchronously, never returns
+<p class="first admonition-title">Note</p>
+<p class="last">This call always executes fully synchronously, never returns
OPAL_BUSY and will work regardless of whether VPs and EQs are left
enabled or disabled. It <em>will</em> spend a significant amount of time
inside OPAL and as such is not suitable to be performed during normal
@@ -345,59 +351,59 @@ runtime.</p>
<p>Returns info about an interrupt source. This call never returns
OPAL_BUSY.</p>
<ul>
-<li><p>out_flags returns a set of flags. The following flags
+<li><p class="first">out_flags returns a set of flags. The following flags
are defined in the API (some bits are reserved, so any bit
not defined here should be ignored):</p>
<ul>
-<li><p>OPAL_XIVE_IRQ_TRIGGER_PAGE</p>
+<li><p class="first">OPAL_XIVE_IRQ_TRIGGER_PAGE</p>
<p>Indicate that the trigger page is a separate page. If that
bit is clear, there is either no trigger page or the trigger
can be done in the same page as the EOI, see below.</p>
</li>
-<li><p>OPAL_XIVE_IRQ_STORE_EOI</p>
+<li><p class="first">OPAL_XIVE_IRQ_STORE_EOI</p>
<p>Indicates that the interrupt supports the “Store EOI” option,
ie a store to the EOI page will move Q into P and retrigger
if the resulting P bit is 1. If this flag is 0, then a store
to the EOI page will do a trigger if OPAL_XIVE_IRQ_TRIGGER_PAGE
is also 0.</p>
</li>
-<li><p>OPAL_XIVE_IRQ_LSI</p>
+<li><p class="first">OPAL_XIVE_IRQ_LSI</p>
<p>Indicates that the source is a level sensitive source and thus
doesn’t have a functional Q bit. The Q bit may or may not be
implemented in HW but SW shouldn’t rely on it doing anything.</p>
</li>
-<li><p>OPAL_XIVE_IRQ_SHIFT_BUG</p>
+<li><p class="first">OPAL_XIVE_IRQ_SHIFT_BUG</p>
<p>Indicates that the source has a HW bug that shifts the bits
of the “offset” inside the EOI page left by 4 bits. So when
this is set, us 0xc000, 0xd000… instead of 0xc00, 0xd00…
as offets in the EOI page.</p>
</li>
-<li><p>OPAL_XIVE_IRQ_MASK_VIA_FW</p>
+<li><p class="first">OPAL_XIVE_IRQ_MASK_VIA_FW</p>
<p>Indicates that a FW call is needed (either opal_set_xive()
or opal_xive_set_irq_config()) to succesfully mask and unmask
the interrupt. The operations via the ESB page aren’t fully
functional.</p>
</li>
-<li><p>OPAL_XIVE_IRQ_EOI_VIA_FW</p>
+<li><p class="first">OPAL_XIVE_IRQ_EOI_VIA_FW</p>
<p>Indicates that a FW call to opal_xive_eoi() is needed to
successfully EOI the interrupt. The operation via the ESB page
isn’t fully functional.</p>
<ul class="simple">
-<li><p>out_eoi_page and out_trig_page outputs will be set to the
+<li>out_eoi_page and out_trig_page outputs will be set to the
EOI page physical address (always) and the trigger page address
(if it exists).
The trigger page may exist even if OPAL_XIVE_IRQ_TRIGGER_PAGE
is not set. In that case out_trig_page is equal to out_eoi_page.
-If the trigger page doesn’t exist, out_trig_page is set to 0.</p></li>
-<li><p>out_esb_shift contains the size (as an order, ie 2^n) of the
+If the trigger page doesn’t exist, out_trig_page is set to 0.</li>
+<li>out_esb_shift contains the size (as an order, ie 2^n) of the
EOI and trigger pages. Current supported values are 12 (4k)
and 16 (64k). Those cannot be configured by the OS and are set
-by firmware but can be different for different interrupt sources.</p></li>
-<li><p>out_src_chip will be set to the chip ID of the HW entity this
+by firmware but can be different for different interrupt sources.</li>
+<li>out_src_chip will be set to the chip ID of the HW entity this
interrupt is sourced from. It’s meant to be informative only
and thus isn’t guaranteed to be 100% accurate. The idea is for
the OS to use that to pick up a default target processor on
-the same chip.</p></li>
+the same chip.</li>
</ul>
</li>
</ul>
@@ -413,10 +419,10 @@ the same chip.</p></li>
OPAL_XIVE_IRQ_EOI_VIA_FW is set as otherwise direct ESB access
is preferred.</p>
<div class="admonition note">
-<p class="admonition-title">Note</p>
+<p class="first admonition-title">Note</p>
<p>This is the <em>same</em> opal_xive_eoi() call used by OPAL XICS
emulation. However the XIRR parameter is re-purposed as “GIRQ”.</p>
-<p>The call will perform the appropriate function depending on
+<p class="last">The call will perform the appropriate function depending on
whether OPAL is in XICS emulation mode or native XIVE exploitation
mode.</p>
</div>
@@ -431,15 +437,15 @@ mode.</p>
the equivalent of opal_get_xive() with the addition of the logical
interrupt number (the number that will be presented in the queue).</p>
<ul class="simple">
-<li><p>girq: The interrupt number to get the configuration of as
-provided by the device-tree.</p></li>
-<li><p>out_vp: Will contain the target virtual processor where the
+<li>girq: The interrupt number to get the configuration of as
+provided by the device-tree.</li>
+<li>out_vp: Will contain the target virtual processor where the
interrupt is currently routed to. This can return 0xffffffff
-if the interrupt isn’t routed to a valid virtual processor.</p></li>
-<li><p>out_prio: Will contain the priority of the interrupt or 0xff
-if masked</p></li>
-<li><p>out_lirq: Will contain the logical interrupt assigned to the
-interrupt. By default this will be the same as girq.</p></li>
+if the interrupt isn’t routed to a valid virtual processor.</li>
+<li>out_prio: Will contain the priority of the interrupt or 0xff
+if masked</li>
+<li>out_lirq: Will contain the logical interrupt assigned to the
+interrupt. By default this will be the same as girq.</li>
</ul>
</div>
<div class="section" id="opal-xive-set-irq-config">
@@ -453,15 +459,18 @@ equivalent to opal_set_xive() with the addition of the ability to
configure the logical IRQ number (the number that will be presented
in the target queue).</p>
<ul>
-<li><p>girq: The interrupt number to configure of as provided by the
-device-tree.</p></li>
-<li><p>vp: The target virtual processor. The target VP/Prio combination
+<li><p class="first">girq: The interrupt number to configure of as provided by the
+device-tree.</p>
+</li>
+<li><p class="first">vp: The target virtual processor. The target VP/Prio combination
must already exist, be enabled and populated (ie, a queue page must
-be provisioned for that queue).</p></li>
-<li><p>prio: The priority of the interrupt.</p></li>
-<li><p>lirq: The logical interrupt number assigned to that interrupt</p>
+be provisioned for that queue).</p>
+</li>
+<li><p class="first">prio: The priority of the interrupt.</p>
+</li>
+<li><p class="first">lirq: The logical interrupt number assigned to that interrupt</p>
<div class="admonition note">
-<p class="admonition-title">Note</p>
+<p class="first admonition-title">Note</p>
<p>Note about masking:</p>
<p>If the prio is set to 0xff, this call will cause the interrupt to
be masked (*). This function will not clobber the source P/Q bits (**).
@@ -471,14 +480,14 @@ discarded, potentially leaving the ESB in a stale state. Thus
care must be taken by the caller to “cleanup” the ESB state
appropriately before enabling an interrupt with this.</p>
<p>(*) Escalation interrupts cannot be masked via this function</p>
-<p>(**) The exception to this rule is interrupt sources that have
+<p class="last">(**) The exception to this rule is interrupt sources that have
the OPAL_XIVE_IRQ_MASK_VIA_FW flag set. For such sources, the OS
should make no assumption as to the state of the ESB and this
function <em>will</em> perform all the necessary masking and unmasking.</p>
</div>
<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>This call contains an implicit opal_xive_sync() of the interrupt
+<p class="first admonition-title">Note</p>
+<p class="last">This call contains an implicit opal_xive_sync() of the interrupt
source (see OPAL_XIVE_SYNC below)</p>
</div>
<p>It is recommended for an OS exploiting the XIVE directly to not use
@@ -504,52 +513,56 @@ interrupts happening while no handler was attached is considered fine.</p>
<p>This returns informations about a given interrupt queue associated
with a virtual processor and a priority.</p>
<ul>
-<li><p>out_qpage: will contain the physical address of the page where the
+<li><p class="first">out_qpage: will contain the physical address of the page where the
interrupt events will be posted or 0 if none has been configured
-yet.</p></li>
-<li><p>out_qsize: will contain the log2 of the size of the queue buffer
-or 0 if the queue hasn’t been populated. Example: 12 for a 4k page.</p></li>
-<li><p>out_qeoi_page: will contain the physical address of the MMIO page
-used to perform EOIs for the queue notifications.</p></li>
-<li><p>out_escalate_irq: will contain a girq number for the escalation
+yet.</p>
+</li>
+<li><p class="first">out_qsize: will contain the log2 of the size of the queue buffer
+or 0 if the queue hasn’t been populated. Example: 12 for a 4k page.</p>
+</li>
+<li><p class="first">out_qeoi_page: will contain the physical address of the MMIO page
+used to perform EOIs for the queue notifications.</p>
+</li>
+<li><p class="first">out_escalate_irq: will contain a girq number for the escalation
interrupt associated with that queue.</p>
<div class="admonition warning">
-<p class="admonition-title">Warning</p>
-<p>The “escalate_irq” is a special interrupt number, depending
+<p class="first admonition-title">Warning</p>
+<p class="last">The “escalate_irq” is a special interrupt number, depending
on the implementation it may or may not correspond to a normal
XIVE source. Those interrupts have no triggers, and will not
be masked by opal_set_irq_config() with a prio of 0xff.</p>
</div>
-<dl class="simple">
-<dt>..note:: The state of the OPAL_XIVE_VP_SINGLE_ESCALATION flag passed to</dt><dd><p>opal_xive_set_vp_info() can change the escalation irq number,
+<dl class="docutils">
+<dt>..note:: The state of the OPAL_XIVE_VP_SINGLE_ESCALATION flag passed to</dt>
+<dd><p class="first last">opal_xive_set_vp_info() can change the escalation irq number,
so make sure you only retrieve this after having set the flag
to the desired value. When set, all priorities will have the
same escalation interrupt.</p>
</dd>
</dl>
</li>
-<li><p>out_qflags: will contain flags defined as follow:</p>
+<li><p class="first">out_qflags: will contain flags defined as follow:</p>
<ul>
-<li><p>OPAL_XIVE_EQ_ENABLED</p>
+<li><p class="first">OPAL_XIVE_EQ_ENABLED</p>
<p>This must be set for the queue to be enabled and thus a valid
target for interrupts. Newly allocated queues are disabled by
default and must be disabled again before being freed (allocating
and freeing of queues currently only happens along with their
owner VP).</p>
<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>A newly enabled queue will have the generation set to 1
+<p class="first admonition-title">Note</p>
+<p class="last">A newly enabled queue will have the generation set to 1
and the queue pointer to 0. If the OS wants to “reset” a queue
generation and pointer, it thus must disable and re-enable
the queue.</p>
</div>
</li>
-<li><p>OPAL_XIVE_EQ_ALWAYS_NOTIFY</p>
+<li><p class="first">OPAL_XIVE_EQ_ALWAYS_NOTIFY</p>
<p>When this is set, the HW will always notify the VP on any new
entry in the queue, thus the queue own P/Q bits won’t be relevant
and using the EOI page will be unnecessary.</p>
</li>
-<li><p>OPAL_XIVE_EQ_ESCALATE</p>
+<li><p class="first">OPAL_XIVE_EQ_ESCALATE</p>
<p>When this is set, the EQ will escalate to the escalation interrupt
when failing to notify.</p>
</li>
@@ -568,31 +581,33 @@ when failing to notify.</p>
<p>This allows the OS to configure the queue page for a given processor
and priority and adjust the behaviour of the queue via flags.</p>
<ul>
-<li><p>qpage: physical address of the page where the interrupt events will
-be posted. This has to be naturally aligned.</p></li>
-<li><p>qsize: log2 of the size of the above page. A 0 here will disable
-the queue.</p></li>
-<li><p>qflags: Flags (see definitions in opal_xive_get_queue_info)</p>
+<li><p class="first">qpage: physical address of the page where the interrupt events will
+be posted. This has to be naturally aligned.</p>
+</li>
+<li><p class="first">qsize: log2 of the size of the above page. A 0 here will disable
+the queue.</p>
+</li>
+<li><p class="first">qflags: Flags (see definitions in opal_xive_get_queue_info)</p>
<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>This call will reset the generation bit to 1 and the queue
+<p class="first admonition-title">Note</p>
+<p class="last">This call will reset the generation bit to 1 and the queue
production pointer to 0.</p>
</div>
<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>The PQ bits of the escalation interrupts and of the queue
+<p class="first admonition-title">Note</p>
+<p class="last">The PQ bits of the escalation interrupts and of the queue
notification will be set to 00 when OPAL_XIVE_EQ_ENABLED is
set, and to 01 (masked) when disabling it.</p>
</div>
<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>This must be called at least once on a queue with the flag
+<p class="first admonition-title">Note</p>
+<p class="last">This must be called at least once on a queue with the flag
OPAL_XIVE_EQ_ENABLED in order to enable it after it has been
allocated (along with its owner VP).</p>
</div>
<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>When the queue is disabled (flag OPAL_XIVE_EQ_ENABLED cleared)
+<p class="first admonition-title">Note</p>
+<p class="last">When the queue is disabled (flag OPAL_XIVE_EQ_ENABLED cleared)
all other flags and arguments are ignored and the queue
configuration is wiped.</p>
</div>
@@ -614,8 +629,8 @@ if unspecified. Ideally, when a VP allocation request fails with the
OPAL_XIVE_PROVISIONING error, the OS should allocate one such page
for each chip in the system and hand it to OPAL before trying again.</p>
<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>It is possible that the provisioning ends up requiring more than
+<p class="first admonition-title">Note</p>
+<p class="last">It is possible that the provisioning ends up requiring more than
one page per chip. OPAL will keep returning the above error until
enough pages have been provided.</p>
</div>
@@ -663,22 +678,25 @@ below with the OPAL_XIVE_VP_ENABLED flag cleared before use.</p>
</div>
<p>This call returns information about a VP:</p>
<ul>
-<li><p>flags:</p>
+<li><p class="first">flags:</p>
<ul>
-<li><p>OPAL_XIVE_VP_ENABLED</p>
+<li><p class="first">OPAL_XIVE_VP_ENABLED</p>
<p>Returns the enabled state of the VP</p>
</li>
-<li><p>OPAL_XIVE_VP_SINGLE_ESCALATION (if available)</p>
+<li><p class="first">OPAL_XIVE_VP_SINGLE_ESCALATION (if available)</p>
<p>Returns whether single escalation mode is enabled for this VP
(see opal_xive_set_vp_info()).</p>
</li>
</ul>
</li>
-<li><p>cam_value: This is the value to program into the thread management
-area to dispatch that VP (ie, an encoding of the block + index).</p></li>
-<li><p>report_cl_pair: This is the real address of the reporting cache line
-pair for that VP (defaults to 0, ie disabled)</p></li>
-<li><p>chip_id: The chip that VCPU was allocated on</p></li>
+<li><p class="first">cam_value: This is the value to program into the thread management
+area to dispatch that VP (ie, an encoding of the block + index).</p>
+</li>
+<li><p class="first">report_cl_pair: This is the real address of the reporting cache line
+pair for that VP (defaults to 0, ie disabled)</p>
+</li>
+<li><p class="first">chip_id: The chip that VCPU was allocated on</p>
+</li>
</ul>
</div>
<div class="section" id="opal-xive-set-vp-info">
@@ -690,17 +708,17 @@ pair for that VP (defaults to 0, ie disabled)</p></li>
</div>
<p>This call configures a VP:</p>
<ul>
-<li><p>flags:</p>
+<li><p class="first">flags:</p>
<ul>
-<li><p>OPAL_XIVE_VP_ENABLED</p>
+<li><p class="first">OPAL_XIVE_VP_ENABLED</p>
<p>This must be set for the VP to be usable and cleared before freeing it.</p>
<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>This can be used to disable the boot time VPs though this
+<p class="first admonition-title">Note</p>
+<p class="last">This can be used to disable the boot time VPs though this
isn’t recommended. This must be used to enable allocated VPs.</p>
</div>
</li>
-<li><p>OPAL_XIVE_VP_SINGLE_ESCALATION (if available)</p>
+<li><p class="first">OPAL_XIVE_VP_SINGLE_ESCALATION (if available)</p>
<p>If this is set, the queues are configured such that all priorities
turn into a single escalation interrupt. This results in the loss of
priority 7 which can no longer be used. This this needs to be set
@@ -709,8 +727,8 @@ have been already enabled.</p>
<p>This feature is available if the “single-escalation-property” is
present in the xive device-tree node.</p>
<div class="admonition warning">
-<p class="admonition-title">Warning</p>
-<p>When enabling single escalation, and pre-existing routing
+<p class="first admonition-title">Warning</p>
+<p class="last">When enabling single escalation, and pre-existing routing
and configuration of the individual queues escalation
is lost (except queue 7 which is the new merged escalation).
When further disabling it, the previous value is not
@@ -720,12 +738,12 @@ all the queues.</p>
</li>
</ul>
</li>
-<li><p>report_cl_pair: This is the real address of the reporting cache line
+<li><p class="first">report_cl_pair: This is the real address of the reporting cache line
pair for that VP or 0 to disable.</p>
<blockquote>
<div><div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>When disabling a VP, all other VP settings are lost.</p>
+<p class="first admonition-title">Note</p>
+<p class="last">When disabling a VP, all other VP settings are lost.</p>
</div>
</div></blockquote>
</li>
@@ -757,24 +775,26 @@ will result in an OPAL_PARAMETER error.</p>
have taken effect to the point where their effects are visible to the
processor.</p>
<ul>
-<li><p>type: Type of synchronization:</p>
+<li><p class="first">type: Type of synchronization:</p>
<ul>
-<li><p>XIVE_SYNC_EAS: Synchronize a source. “id” is the girq number of the
+<li><p class="first">XIVE_SYNC_EAS: Synchronize a source. “id” is the girq number of the
interrupt. This will ensure that any change to the PQ bits or the
-interrupt targetting has taken effect.</p></li>
-<li><p>XIVE_SYNC_QUEUE: Synchronize a target queue. “id” is the girq number
+interrupt targetting has taken effect.</p>
+</li>
+<li><p class="first">XIVE_SYNC_QUEUE: Synchronize a target queue. “id” is the girq number
of the interrupt. This will ensure that any previous occurrence of the
interrupt has reached the in-memory queue and is visible to the processor.</p>
<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>XIVE_SYNC_EAS and XIVE_SYNC_QUEUE can be used together
+<p class="first admonition-title">Note</p>
+<p class="last">XIVE_SYNC_EAS and XIVE_SYNC_QUEUE can be used together
(ie. XIVE_SYNC_EAS | XIVE_SYNC_QUEUE) to completely synchronize
the path of an interrupt to its queue.</p>
</div>
</li>
</ul>
</li>
-<li><p>id: Depends on the synchronization type, see above</p></li>
+<li><p class="first">id: Depends on the synchronization type, see above</p>
+</li>
</ul>
</div>
<div class="section" id="opal-xive-dump">
@@ -785,36 +805,35 @@ the path of an interrupt to its queue.</p>
<p>This is a debugging call that will dump in the OPAL console various
state information about the XIVE.</p>
<ul class="simple">
-<li><p>type: Type of info to dump:</p>
-<ul>
-<li><dl class="simple">
-<dt>XIVE_DUMP_TM_HYP: Dump the TIMA area for hypervisor physical thread</dt><dd><p>“id” is the PIR value of the thread</p>
-</dd>
+<li>type: Type of info to dump:<ul>
+<li><dl class="first docutils">
+<dt>XIVE_DUMP_TM_HYP: Dump the TIMA area for hypervisor physical thread</dt>
+<dd>“id” is the PIR value of the thread</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>XIVE_DUMP_TM_POOL: Dump the TIMA area for the hypervisor pool</dt><dd><p>“id” is the PIR value of the thread</p>
-</dd>
+<li><dl class="first docutils">
+<dt>XIVE_DUMP_TM_POOL: Dump the TIMA area for the hypervisor pool</dt>
+<dd>“id” is the PIR value of the thread</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>XIVE_DUMP_TM_OS: Dump the TIMA area for the OS</dt><dd><p>“id” is the PIR value of the thread</p>
-</dd>
+<li><dl class="first docutils">
+<dt>XIVE_DUMP_TM_OS: Dump the TIMA area for the OS</dt>
+<dd>“id” is the PIR value of the thread</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>XIVE_DUMP_TM_USER: Dump the TIMA area for the “user” area (unsupported)</dt><dd><p>“id” is the PIR value of the thread</p>
-</dd>
+<li><dl class="first docutils">
+<dt>XIVE_DUMP_TM_USER: Dump the TIMA area for the “user” area (unsupported)</dt>
+<dd>“id” is the PIR value of the thread</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>XIVE_DUMP_VP: Dump the state of a VP structure</dt><dd><p>“id” is the VP id</p>
-</dd>
+<li><dl class="first docutils">
+<dt>XIVE_DUMP_VP: Dump the state of a VP structure</dt>
+<dd>“id” is the VP id</dd>
</dl>
</li>
-<li><dl class="simple">
-<dt>XIVE_DUMP_EMU: Dump the state of the XICS emulation for a thread</dt><dd><p>“id” is the PIR value of the thread</p>
-</dd>
+<li><dl class="first docutils">
+<dt>XIVE_DUMP_EMU: Dump the state of the XICS emulation for a thread</dt>
+<dd>“id” is the PIR value of the thread</dd>
</dl>
</li>
</ul>
@@ -831,9 +850,9 @@ state information about the XIVE.</p>
<p>This call saves the queue toggle bit and index. This must be called on
an enabled queue.</p>
<ul class="simple">
-<li><p>vp, prio: The target queue</p></li>
-<li><p>out_qtoggle: toggle bit of the queue</p></li>
-<li><p>out_qindex: index of the queue</p></li>
+<li>vp, prio: The target queue</li>
+<li>out_qtoggle: toggle bit of the queue</li>
+<li>out_qindex: index of the queue</li>
</ul>
</div>
<div class="section" id="opal-xive-set-queue-state">
@@ -847,9 +866,9 @@ an enabled queue.</p>
saved by a call to opal_xive_get_queue_state(). This must be called on
an enabled queue.</p>
<ul class="simple">
-<li><p>vp, prio: The target queue</p></li>
-<li><p>qtoggle: toggle bit of the queue</p></li>
-<li><p>qindex: index of the queue</p></li>
+<li>vp, prio: The target queue</li>
+<li>qtoggle: toggle bit of the queue</li>
+<li>qindex: index of the queue</li>
</ul>
</div>
<div class="section" id="opal-xive-get-vp-state">
@@ -861,15 +880,14 @@ an enabled queue.</p>
<p>This call saves the VP HW state in “out_state”. The format matches the
XIVE NVT word 4 and word 5. This must be called on an enabled VP.</p>
<ul class="simple">
-<li><p>vp_id: The target VP</p></li>
-<li><p>out_state: Location where the state is to be stored</p></li>
+<li>vp_id: The target VP</li>
+<li>out_state: Location where the state is to be stored</li>
</ul>
</div>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -921,15 +939,17 @@ XIVE NVT word 4 and word 5. This must be called on an enabled VP.</p>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -946,14 +966,13 @@ XIVE NVT word 4 and word 5. This must be called on an enabled VP.</p>
<li class="right" >
<a href="xscom-node-bindings.html" title="XSCOM Bindings"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">P9 XIVE Exploitation</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file
diff --git a/doc/xscom-node-bindings.html b/doc/xscom-node-bindings.html
index 87222c8..15ed6ad 100644
--- a/doc/xscom-node-bindings.html
+++ b/doc/xscom-node-bindings.html
@@ -1,19 +1,21 @@
-<!DOCTYPE html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>XSCOM Bindings &#8212; skiboot v6.7-45-g4b9ca02
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>XSCOM Bindings &#8212; skiboot e32e57e
documentation</title>
- <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="_static/classic.css" />
+ <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
- <script src="_static/jquery.js"></script>
- <script src="_static/underscore.js"></script>
- <script src="_static/doctools.js"></script>
+ <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
@@ -32,9 +34,8 @@
<li class="right" >
<a href="pci-slot.html" title="PCI Slots"
accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">XSCOM Bindings</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
@@ -58,20 +59,20 @@ space into the PCB address space.</p>
</pre></div>
</div>
<ul class="simple">
-<li><p>where &lt;chip-base-address-n&gt; is the xscom base address with the gcid-specific
-bits (for chip n) OR-ed in.</p></li>
+<li>where &lt;chip-base-address-n&gt; is the xscom base address with the gcid-specific
+bits (for chip n) OR-ed in.</li>
</ul>
<p>Each xscom node has the following properties:</p>
<blockquote>
<div><ul class="simple">
-<li><p>#address-cells = 1</p></li>
-<li><p>#size-cells = 1</p></li>
-<li><p>reg = &lt;base-address[#parent-address-cells] size[#parent-size-cells]&gt;</p></li>
-<li><p>ibm,chip-id = gcid</p></li>
-<li><p>compatible = “ibm,xscom”, “ibm,power8-scom” / “ibm,power7-xscom”</p></li>
-<li><p>ecid = &lt;Electronic Chip ID, applicable for POWER9 onwards&gt;</p></li>
-<li><p>wafer-id = &lt;wafer ID, applicable for POWER9 onwards&gt;</p></li>
-<li><p>wafer-location = &lt;wafer location, applicable for POWER9 onwards&gt;</p></li>
+<li>#address-cells = 1</li>
+<li>#size-cells = 1</li>
+<li>reg = &lt;base-address[#parent-address-cells] size[#parent-size-cells]&gt;</li>
+<li>ibm,chip-id = gcid</li>
+<li>compatible = “ibm,xscom”, “ibm,power8-scom” / “ibm,power7-xscom”</li>
+<li>ecid = &lt;Electronic Chip ID, applicable for POWER9 onwards&gt;</li>
+<li>wafer-id = &lt;wafer ID, applicable for POWER9 onwards&gt;</li>
+<li>wafer-location = &lt;wafer location, applicable for POWER9 onwards&gt;</li>
</ul>
</div></blockquote>
</div>
@@ -93,15 +94,15 @@ types:</p>
</pre></div>
</div>
<ul class="simple">
-<li><p>where the &lt;endpoint-addr&gt; is a single address (as distinct from the current
+<li>where the &lt;endpoint-addr&gt; is a single address (as distinct from the current
(gcid,base) format), consisting of the SCOM port and SCOM endpoint bits in
-their 31-bit address format.</p></li>
+their 31-bit address format.</li>
</ul>
<p>Each endpoint node has the following properties:</p>
<blockquote>
<div><ul class="simple">
-<li><p>reg = &lt;endpoint-address[#parent-address-cells] size[#parent-size-cells]&gt;</p></li>
-<li><p>compatible - depends on endpoint type, eg “ibm,power8-chiptod”</p></li>
+<li>reg = &lt;endpoint-address[#parent-address-cells] size[#parent-size-cells]&gt;</li>
+<li>compatible - depends on endpoint type, eg “ibm,power8-chiptod”</li>
</ul>
</div></blockquote>
<p>The endpoint address specifies the address on the PCB. So, to calculate the
@@ -113,16 +114,15 @@ MMIO address for a PCB register:</p>
<p>Where:</p>
<blockquote>
<div><ul class="simple">
-<li><p>xscom-base-addr is the address from the first two cells of the parent
-node’s reg property</p></li>
-<li><p>pcb_addr is the first cell of the endpoint’s reg property</p></li>
+<li>xscom-base-addr is the address from the first two cells of the parent
+node’s reg property</li>
+<li>pcb_addr is the first cell of the endpoint’s reg property</li>
</ul>
</div></blockquote>
</div>
</div>
- <div class="clearer"></div>
</div>
</div>
</div>
@@ -152,15 +152,17 @@ node’s reg property</p></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
- <h3 id="searchlabel">Quick search</h3>
+ <h3>Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
- <input type="text" name="q" aria-labelledby="searchlabel" />
+ <input type="text" name="q" />
<input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
</form>
</div>
</div>
-<script>$('#searchbox').show(0);</script>
+<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@@ -177,14 +179,13 @@ node’s reg property</p></li>
<li class="right" >
<a href="pci-slot.html" title="PCI Slots"
>previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">skiboot v6.7-45-g4b9ca02
- documentation</a> &#187;</li>
- <li class="nav-item nav-item-this"><a href="">XSCOM Bindings</a></li>
+ <li class="nav-item nav-item-0"><a href="index.html">skiboot e32e57e
+ documentation</a> &#187;</li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2016-2017, IBM, others.
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.1.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
</div>
</body>
</html> \ No newline at end of file